libX11-1.6.3/README000064401431060000012000000024531247741723500137420ustar00alancstaff00002660200006libX11 - Core X11 protocol client library Documentation for this library can be found in the included man pages, and in the Xlib spec from the specs subdirectory, also available at: http://www.x.org/releases/current/doc/libX11/libX11/libX11.html http://www.x.org/releases/current/doc/libX11/libX11/libX11.pdf and the O'Reilly Xlib books, which they have made freely available online, though only for older versions of X11: - X Series Volume 2: Xlib Reference Manual (1989, covers X11R3) http://www.archive.org/details/xlibretmanver1102nyemiss - X Series Volume 2: Xlib Reference Manual, 2nd Edition (1990, covers X11R4) http://www.archive.org/details/xlibrefmanv115ed02nyemiss All questions regarding this software should be directed at the Xorg mailing list: http://lists.freedesktop.org/mailman/listinfo/xorg Please submit bug reports to the Xorg bugzilla: https://bugs.freedesktop.org/enter_bug.cgi?product=xorg The master development code repository can be found at: git://anongit.freedesktop.org/git/xorg/lib/libX11 http://cgit.freedesktop.org/xorg/lib/libX11 For patch submission instructions, see: http://www.x.org/wiki/Development/Documentation/SubmittingPatches For more information on the git code manager, see: http://wiki.x.org/wiki/GitPage libX11-1.6.3/specs/Makefile.am000064401431060000012000000022551247741723500162330ustar00alancstaff00002660200006# # Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. # # 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: # # The above copyright notice and this permission notice (including the next # paragraph) shall be included in all copies or substantial portions of the # Software. # # THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. # SUBDIRS=libX11 i18n XIM XKB libX11-1.6.3/specs/i18n/framework/Makefile.am000064401431060000012000000006041247741723500210030ustar00alancstaff00002660200006 if ENABLE_SPECS # Main DocBook/XML files (DOCTYPE book) docbook = framework.xml # Included chapters, appendix, images chapters = framework.svg # The location where the DocBook/XML files and their generated formats are installed shelfdir = $(docdir)/i18n/framework # Generate DocBook/XML output formats with or without stylesheets include $(top_srcdir)/docbook.am endif ENABLE_SPECS libX11-1.6.3/specs/i18n/framework/framework.xml000064401431060000012000001461251247741723500214770ustar00alancstaff00002660200006 %defs; ]> X11R6 Sample Implementation Frame Work X Version 11, Release &fullrelvers; KatsuhisaYano TOSHIBA Corporation YoshioHoriuchi IBM Japan 1994 TOSHIBA Corporation IBM Corporation 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. Copyright © 1994 X Consortium 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: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED “AS IS”, 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. Except as contained in this notice, the name of X Consortium 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. X Window System is a trademark of The Open Group. Framework Preface 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) is proposed to outline the separating of the components within the sample implementation. Preface drawing. Frame work of Locale Service API Proposal 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. 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. 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. Objective Explain the current X11R6 sample implementation Document the common set of locale dependent interfaces Provide more flexible pluggable layer Locale Object Binding Functions This chapter describes functions related locale object binding for implementing the pluggable layer. 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. The loader is called in _XOpenLC, but caller of 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. Initializing a locale loader list void _XlcInitLoader The _XlcInitLoader function initializes the locale loader list with vendor specific manner. Each loader is registered with calling _XlcAddLoader. The number of loaders and their order in the loader list is implementation dependent. Add a loader typedef XLCd (*XLCdLoadProc)(name); char *name; typedef int XlcPosition; #define XlcHead #define XlcTail Bool _XlcAddLoader XLCdLoadProc proc XlcPosition position The function registers the specified locale loader "proc" to the internal loader list. The position specifies that the loader "proc" should be placed in the top of the loader list(XlcHead) or last(XlcTail). The object loader is called from the top of the loader list in order, when calling time. Remove a loader void _XlcRemoveLoader XLCdLoadProc proc The function removes the locale loader specified by "proc" from the loader list. Current implementation provides following locale loaders; _XlcDefaultLoader _XlcGenericLoader _XlcUtfLoader _XaixOsDynamicLoad Locale Method Interface 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. 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. Locale Method Functions Open a Locale Method XLCd _XOpenLC char *name The function opens a locale method which corresponds to the specified locale name. calls a locale object loader, which is registered via _XlcAddLoader into the internal loader list. If the called loader is valid and successfully opens a locale, returns the XLCd. If the loader is invalid or failed to open a locale, calls the next loader. If all registered loaders cannot open a locale, returns NULL. XLCd _XlcCurrentLC The _XlcCurrentLC function returns an XLCd that are bound to current locale. Close a Locale Method void _XCloseLC XLCd lcd The function close a locale method the specified lcd. Obtain Locale Method values char *_XGetLCValues XLCd lcd The 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. Name Type Description XlcNCodeset char* codeset part of locale name XlcNDefaultString char* XDefaultString() XlcNEncodingName char* encoding name XlcNLanguage char* language part of locale name XlcNMbCurMax int ANSI C MB_CUR_MAX XlcNStateDependentEncoding Bool is state-dependent encoding or not XlcNTerritory char* territory part of locale name Charset functions The XlcCharSet is an identifier which represents a subset of characters (character set) in the locale object. 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)(charset, args, num_args); XlcCharSet charset; XlcArgList args; int num_args; 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; Get an XlcCharSet XlcCharSet _XlcGetCharSet char *name The function gets an XlcCharSet which corresponds to the charset name specified by "name". returns NULL, if no XlcCharSet bound to specified "name". The following character sets are pre-registered. Name Description ISO8859-1:GL 7-bit ASCII graphics (ANSI X3.4-1968), Left half of ISO 8859 sets JISX0201.1976-0:GL Left half of JIS X0201-1976 (reaffirmed 1984), 8-Bit Alphanumeric-Katakana Code ISO8859-1:GR Right half of ISO 8859-1, Latin alphabet No. 1 ISO8859-2:GR Right half of ISO 8859-2, Latin alphabet No. 2 ISO8859-3:GR Right half of ISO 8859-3, Latin alphabet No. 3 ISO8859-4:GR Right half of ISO 8859-4, Latin alphabet No. 4 ISO8859-7:GR Right half of ISO 8859-7, Latin/Greek alphabet ISO8859-6:GR Right half of ISO 8859-6, Latin/Arabic alphabet ISO8859-8:GR Right half of ISO 8859-8, Latin/Hebrew alphabet ISO8859-5:GR Right half of ISO 8859-5, Latin/Cyrillic alphabet ISO8859-9:GR Right half of ISO 8859-9, Latin alphabet No. 5 JISX0201.1976-0:GR Right half of JIS X0201-1976 (reaffirmed 1984), 8-Bit Alphanumeric-Katakana Code GB2312.1980-0:GL GB2312-1980, China (PRC) Hanzi defined as GL GB2312.1980-0:GR GB2312-1980, China (PRC) Hanzi defined as GR JISX0208.1983-0:GL JIS X0208-1983, Japanese Graphic Character Set defined as GL JISX0208.1983-0:GR JIS X0208-1983, Japanese Graphic Character Set defined as GR KSC5601.1987-0:GL KS C5601-1987, Korean Graphic Character Set defined as GL KSC5601.1987-0:GR KS C5601-1987, Korean Graphic Character Set defined as GR JISX0212.1990-0:GL JIS X0212-1990, Japanese Graphic Character Set defined as GL JISX0212.1990-0:GR JIS X0212-1990, Japanese Graphic Character Set defined as GR Add an XlcCharSet Bool _XlcAddCharSet XlcCharSet charset The function registers XlcCharSet specified by "charset". Obtain Character Set values char * _XlcGetCSValues XlcCharSet charset ... The 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. Name Type Description XlcNName char* charset name XlcNEncodingName char* XLFD CharSet Registry and Encoding XlcNSide XlcSide charset side (GL, GR, ...) XlcNCharSize int number of octets per character XlcNSetSize int number of character sets XlcNControlSequence char* control sequence of Compound Text Converter Functions We provide a set of the common converter APIs, that are independent from both of source and destination text type. typedef struct _XlcConvRec *XlcConv; typedef void (*XlcCloseConverterProc)(conv); XlcConv conv; typedef int (*XlcConvertProc)(conv, from, from_left, to, to_left, args, num_args); XlcConv conv; XPointer *from; int *from_left; XPointer *to; int *to_left; XPointer *args; int num_args; typedef void (*XlcResetConverterProc)(conv); XlcConv conv; typedef struct _XlcConvMethodsRec { XlcCloseConverterProc close; XlcConvertProc convert; XlcResetConverterProc reset; } XlcConvMethodsRec, *XlcConvMethods; typedef struct _XlcConvRec { XlcConvMethods methods; XPointer state; } XlcConvRec; Open a converter XlcConv _XlcOpenConverter XLCd from_lcd char *from_type XLCd to_lcd char *to_type function opens the converter which converts a text from specified "from_type" to specified "to_type" encoding. If the function cannot find proper converter or cannot open a corresponding converter, it returns NULL. Otherwise, it returns the conversion descriptor. The following types are pre-defined. Other types are implementation dependent. Name Type Description Arguments XlcNMultiByte char * multibyte - XlcNWideChar wchar_t * wide character - XlcNCompoundText char * COMPOUND_TEXT - XlcNString char * STRING - XlcNCharSet char * per charset XlcCharSet XlcNChar char * per character XlcCharSet Close a converter void _XlcCloseConverter XlcConv conv The function closes the specified converter "conv". Code conversion int _XlcConvert XlcConv conv XPointer *from int *from_left XPointer *to int *to_left XPointer *args int num_args The function converts a sequence of characters from one type, in the array specified by "from", into a sequence of corresponding characters in another type, in the array specified by "to". The types are those specified in the _XlcOpenConverter() call that returned the conversion descriptor, "conv". The arguments "from", "from_left", "to" and "to_left" have the same specification of XPG4 iconv function. For state-dependent encodings, the conversion descriptor "conv" is placed into its initial shift state by a call for which "from" is a NULL pointer, or for which "from" points to a null pointer. The following 2 converters prepared by locale returns appropriate charset (XlcCharSet) in an area pointed by args[0]. From To Description XlcNMultiByte XlcNCharSet Segmentation (Decomposing) XlcNWideChar XlcNCharSet Segmentation (Decomposing) 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. Reset a converter void _XlcResetConverter XlcConv conv The function reset the specified converter "conv". Register a converter typedef XlcConv (*XlcOpenConverterProc)(from_lcd, from_type, to_lcd, to_type); XLCd from_lcd; char *from_type; XLCd to_lcd; char *to_type; Bool _XlcSetConverter XLCd from_lcd char *from XLCd to_lcd char *to XlcOpenConverterProc converter The XlcSetConverter function registers a converter which convert from "from_type" to "to_type" into the converter list (in the specified XLCd). X Locale Database functions 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. For more detail about X Locale Database, please refer X Locale Database Definition document. Get a resource from database void _XlcGetResource XLCd lcd char *category char *class char ***value int *count The function obtains a locale dependent data which is associated with the locale of specified "lcd". The locale data is provided by system locale or by X Locale Database file, and what kind of data is available is implementation dependent. The specified "category" and "class" are used for finding out the objective locale data. The returned value is returned in value argument in string list form, and the returned count shows the number of strings in the value. The returned value is owned by locale method, and should not be modified or freed by caller. Get a locale relative file name char *_XlcFileName XLCd lcd char *category The functions returns a file name which is bound to the specified "lcd" and "category", as a null-terminated string. If no file name can be found, or there is no readable file for the found file name, returns NULL. The returned file name should be freed by caller. The rule for searching a file name is implementation dependent. In current implementation, uses "{category}.dir" file as mapping table, which has pairs of strings, a full locale name and a corresponding file name. Utility Functions Compare Latin-1 strings int _XlcCompareISOLatin1 char*str1, *str2 int _XlcNCompareISOLatin1 char*str1, *str2 int len The _XlcCompareIsoLatin1 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 "str1" is lexicographicly less than, equal to, or greater than "str2". The _XlcNCompareIsoLatin1 function is identical to _XlcCompareISOLatin1, except that at most "len" bytes are compared. Resource Utility int XlcNumber ArrayType array Similar to XtNumber. void _XlcCopyFromArg char *src char *dst int size void _XlcCopyToArg char *src char **dst int size Similar to _XtCopyFromArg and _XtCopyToArg. void _XlcCountVaList va_list var int *count_ret Similar to _XtCountVaList. void _XlcVaToArgList va_list var int count XlcArgList *args_ret Similar to _XtVaToArgList. typedef struct _XlcResource { char *name; XrmQuark xrm_name; int size; int offset; unsigned long mask; } XlcResource, *XlcResourceList; #define XlcCreateMask (1L<<0) #define XlcDefaultMask (1L<<1) #define XlcGetMask (1L<<2) #define XlcSetMask (1L<<3) #define XlcIgnoreMask (1L<<4) void _XlcCompileResourceList XlcResourceList resources int num_resources Similar to _XtCompileResourceList. char * _XlcGetValues XPointer base XlcResourceList resources int num_resources XlcArgList args int num_args unsignedlong mask Similar to XtGetSubvalues. char * _XlcSetValues XPointer base XlcResourceList resources int num_resources XlcArgList args int num_args unsignedlong mask Similar to XtSetSubvalues. ANSI C Compatible Functions The following are ANSI C/MSE Compatible Functions for non-ANSI C environment. int _Xmblen char *str int len The function returns the number of characters pointed to by "str". Only "len" bytes in "str" are used in determining the character count returned. "Str" may point at characters from any valid codeset in the current locale. The call is equivalent to _Xmbtowc(_Xmbtowc((wchar_t*)NULL, str, len)) int _Xmbtowc wchar_t *wstr char *str int len The function converts the character(s) pointed to by "str" to their wide character representation(s) pointed to by "wstr". "Len" is the number of bytes in "str" to be converted. The return value is the number of characters converted. The call is equivalent to _Xlcmbtowc((XLCd)NULL, wstr, str, len) int _Xlcmbtowc XLCd lcd wchar_t *wstr char *str int len The function is identical to _Xmbtowc, except that it requires the "lcd" argument. If "lcd" is (XLCd) NULL, _Xlcmbtowc, calls _XlcCurrentLC to determine the current locale. int _Xwctomb char *str wchar_t wc The function converts a single wide character pointed to by "wc" to its multibyte representation pointed to by "str". On success, the return value is 1. The call is equivalent to _Xlcwctomb((XLCd)NULL, str, wstr) int _Xlcwctomb XLCd lcd char *str wchar_t wc The function is identical to _Xwctomb, except that it requires the "lcd" argument. If "lcd" is (XLCd) NULL, _Xlcwctomb, calls _XlcCurrentLC to determine the current locale. int _Xmbstowcs wchar_t *wstr char *str int len The function converts the NULL-terminated string pointed to by "str" to its wide character string representation pointed to by "wstr". "Len" is the number of characters in "str" to be converted. The call is equivalent to _Xlcmbstowcs((XLCd)NULL, wstr, str, len) int _Xlcmbstowcs XLCd lcd wchar_t *wstr char *str int len The function is identical to _Xmbstowcs, except that it requires the "lcd" argument. If "lcd" is (XLCd) NULL, _Xlcmbstowcs, calls _XlcCurrentLC to determine the current locale. int _Xwcstombs char *str wchar_t *wstr int len The function converts the (wchar_t) NULL terminated wide character string pointed to by "wstr" to the NULL terminated multibyte string pointed to by "str". The call is equivalent to _Xlcwcstombs((XLCd)NULL, str, wstr, len) int _Xlcwcstombs XLCd lcd char *str wchar_t *wstr int len The function is identical to _Xwcstombs, except that it requires the "lcd" argument. If "lcd" is (XLCd) NULL, _Xlcwcstombs, calls _XlcCurrentLC to determine the current locale. int _Xwcslen wchar_t *wstr The function returns the count of wide characters in the (wchar_t) NULL terminated wide character string pointed to by "wstr". wchar_t * _Xwcscpy wchar_t *wstr1 wchar_t *wstr2 wchar_t * _Xwcsncpy wchar_t *wstr1 wchar_t *wstr2 int len The function copies the (wchar_t) NULL terminated wide character string pointed to by "wstr2" to the object pointed at by "wstr1". "Wstr1" is (wchar_t) NULL terminated. The return value is a pointer to "wstr1". The function is identical to _Xwcscpy, except that it copies "len" wide characters from the object pointed to by "wstr2" to the object pointed to "wstr1". int _Xwcscmp wchar_t*wstr1, *wstr2 int _Xwcsncmp wchar_t*wstr1, *wstr2 int len The 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 "wstr1" is lexicographicly less then, equal to, or greater than "str2". The function is identical to _XlcCompareISOLatin1, except that at most "len" wide characters are compared. r wchar_t *wstr int len The function converts the (wchar_t) NULL terminated wide character string pointed to by "wstr" to the NULL terminated multibyte string pointed to by " image/svg+xml Application <<ANSI/MSE API>>(X Contrib) <<XLib API>>(X Core) <<ANSI/MSE API>>(X Contrib) InputMethod OutputMethod <Locl. Serv. API>X Locale Object C Library ANSI impl XLC_XLOCALE- MB_CUR_MAXcodeset infoo char/charseto conv/charset XLC_FONTSET- fontset info- charset info- font/charset- XLFD,GL/GR localedef DB- MB_CUR_MAX- codset infoo char/charseto conv/charset Locale Library non-ANSI impl. XLocale Source (X Core) System Locale Source ;font-family:Bitstream Vera Sans" x="450.71121" y="207.0899" id="text2959">C Library &2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@am__append_1 = $(docbook:.xml=.html) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TEXT_TRUE@@HAVE_XMLTO_TRUE@am__append_2 = $(docbook:.xml=.txt) @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@am__append_3 = $(docbook:.xml=.pdf) \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(docbook:.xml=.ps) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@am__append_4 = $(docbook:.xml=.html.db) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(docbook:.xml=.pdf.db) subdir = specs/i18n/framework ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_define_dir.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__dist_shelf_DATA_DIST) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h \ $(top_builddir)/include/X11/XlibConf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__dist_shelf_DATA_DIST = framework.xml framework.svg am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(shelfdir)" "$(DESTDIR)$(shelfdir)" DATA = $(dist_shelf_DATA) $(shelf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/docbook.am DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASE_CFLAGS = @BASE_CFLAGS@ BIGFONT_CFLAGS = @BIGFONT_CFLAGS@ BIGFONT_LIBS = @BIGFONT_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHANGELOG_CMD = @CHANGELOG_CMD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ FOP = @FOP@ GREP = @GREP@ I18N_MODULE_LIBS = @I18N_MODULE_LIBS@ INSTALL = @INSTALL@ INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ KEYSYMDEFS = @KEYSYMDEFS@ LAUNCHD = @LAUNCHD@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LINT = @LINT@ LINTLIB = @LINTLIB@ LINT_FLAGS = @LINT_FLAGS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MALLOC_ZERO_CFLAGS = @MALLOC_ZERO_CFLAGS@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_SUBSTS = @MAN_SUBSTS@ MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RAWCPP = @RAWCPP@ RAWCPPFLAGS = @RAWCPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRICT_CFLAGS = @STRICT_CFLAGS@ STRIP = @STRIP@ STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ TRADITIONALCPPFLAGS = @TRADITIONALCPPFLAGS@ VERSION = @VERSION@ WCHAR32 = @WCHAR32@ X11_CFLAGS = @X11_CFLAGS@ X11_DATADIR = @X11_DATADIR@ X11_EXTRA_DEPS = @X11_EXTRA_DEPS@ X11_LIBDIR = @X11_LIBDIR@ X11_LIBS = @X11_LIBS@ X11_LOCALEDATADIR = @X11_LOCALEDATADIR@ X11_LOCALEDIR = @X11_LOCALEDIR@ X11_LOCALELIBDIR = @X11_LOCALELIBDIR@ XERRORDB = @XERRORDB@ XKBPROTO_REQUIRES = @XKBPROTO_REQUIRES@ XKEYSYMDB = @XKEYSYMDB@ XLOCALEDATADIR = @XLOCALEDATADIR@ XLOCALEDIR = @XLOCALEDIR@ XLOCALELIBDIR = @XLOCALELIBDIR@ XMALLOC_ZERO_CFLAGS = @XMALLOC_ZERO_CFLAGS@ XMLTO = @XMLTO@ XORG_MAN_PAGE = @XORG_MAN_PAGE@ XORG_SGML_PATH = @XORG_SGML_PATH@ XSLTPROC = @XSLTPROC@ XSL_STYLESHEET = @XSL_STYLESHEET@ XTHREADLIB = @XTHREADLIB@ XTHREAD_CFLAGS = @XTHREAD_CFLAGS@ XTMALLOC_ZERO_CFLAGS = @XTMALLOC_ZERO_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ locales = @locales@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # Main DocBook/XML files (DOCTYPE book) @ENABLE_SPECS_TRUE@docbook = framework.xml # Included chapters, appendix, images @ENABLE_SPECS_TRUE@chapters = framework.svg # The location where the DocBook/XML files and their generated formats are installed @ENABLE_SPECS_TRUE@shelfdir = $(docdir)/i18n/framework # DocBook/XML generated output formats to be installed @ENABLE_SPECS_TRUE@shelf_DATA = $(am__append_1) $(am__append_2) \ @ENABLE_SPECS_TRUE@ $(am__append_3) $(am__append_4) # DocBook/XML file with chapters, appendix and images it includes @ENABLE_SPECS_TRUE@dist_shelf_DATA = $(docbook) $(chapters) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_SEARCHPATH_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --searchpath "$(XORG_SGML_PATH)/X11" \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --searchpath "$(abs_top_builddir)" @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_HTML_OLINK_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam target.database.document=$(XORG_SGML_PATH)/X11/dbs/masterdb.html.xml \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam current.docid="$(<:.xml=)" @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_HTML_STYLESHEET_FLAGS = -x $(STYLESHEET_SRCDIR)/xorg-xhtml.xsl @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_HTML_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_SEARCHPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_HTML_STYLESHEET_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_HTML_OLINK_FLAGS) @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_FO_IMAGEPATH_FLAGS = --stringparam img.src.path=$(abs_builddir)/ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_PDF_OLINK_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam target.database.document=$(XORG_SGML_PATH)/X11/dbs/masterdb.pdf.xml \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam current.docid="$(<:.xml=)" @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_FO_STYLESHEET_FLAGS = -x $(STYLESHEET_SRCDIR)/xorg-fo.xsl @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_FO_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_SEARCHPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_FO_STYLESHEET_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_FO_IMAGEPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_PDF_OLINK_FLAGS) # Generate documents cross-reference target databases @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_SEARCHPATH_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --path "$(XORG_SGML_PATH)/X11" \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --path "$(abs_top_builddir)" @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_OLINK_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --stringparam targets.filename "$@" \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --stringparam collect.xref.targets "only" \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --stringparam olink.base.uri "$(@:.db=)" @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_HTML_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(XSLT_SEARCHPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(XSLT_OLINK_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --nonet --xinclude \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(STYLESHEET_SRCDIR)/xorg-xhtml.xsl @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_PDF_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(XSLT_SEARCHPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(XSLT_OLINK_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --nonet --xinclude \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(STYLESHEET_SRCDIR)/xorg-fo.xsl @ENABLE_SPECS_TRUE@CLEANFILES = $(shelf_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/docbook.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign specs/i18n/framework/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign specs/i18n/framework/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/docbook.am $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_shelfDATA: $(dist_shelf_DATA) @$(NORMAL_INSTALL) @list='$(dist_shelf_DATA)'; test -n "$(shelfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(shelfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(shelfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(shelfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(shelfdir)" || exit $$?; \ done uninstall-dist_shelfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_shelf_DATA)'; test -n "$(shelfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(shelfdir)'; $(am__uninstall_files_from_dir) install-shelfDATA: $(shelf_DATA) @$(NORMAL_INSTALL) @list='$(shelf_DATA)'; test -n "$(shelfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(shelfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(shelfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(shelfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(shelfdir)" || exit $$?; \ done uninstall-shelfDATA: @$(NORMAL_UNINSTALL) @list='$(shelf_DATA)'; test -n "$(shelfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(shelfdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(shelfdir)" "$(DESTDIR)$(shelfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_shelfDATA install-shelfDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_shelfDATA uninstall-shelfDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-dist_shelfDATA install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-shelfDATA install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-dist_shelfDATA uninstall-shelfDATA .PRECIOUS: Makefile @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@%.html: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_HTML_FLAGS) xhtml-nochunks $< @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TEXT_TRUE@@HAVE_XMLTO_TRUE@%.txt: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TEXT_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_HTML_FLAGS) txt $< @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@%.pdf: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FO_FLAGS) --with-fop pdf $< @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@%.ps: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FO_FLAGS) --with-fop ps $< @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@%.html.db: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(AM_V_GEN)$(XSLTPROC) $(XSLT_HTML_FLAGS) $< @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@%.pdf.db: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(AM_V_GEN)$(XSLTPROC) $(XSLT_PDF_FLAGS) $< # Generate DocBook/XML output formats with or without stylesheets # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_OLINK_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --stringparam targets.filename "$@" \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --stringparam collect.xref.targets "only" \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --stringlibX11-1.6.3/specs/i18n/Makefile.am000064401431060000012000000022721247741723500170110ustar00alancstaff00002660200006# # Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. # # 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: # # The above copyright notice and this permission notice (including the next # paragraph) shall be included in all copies or substantial portions of the # Software. # # THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. # SUBDIRS=compose framework localedb trans libX11-1.6.3/specs/i18n/localedb/Makefile.in000064401431060000012000000600011247741725500205630ustar00alancstaff00002660200006# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # Generate output formats for a single DocBook/XML with/without chapters # # Variables set by the calling Makefile: # shelfdir: the location where the docs/specs are installed. Typically $(docdir) # docbook: the main DocBook/XML file, no chapters, appendix or image files # chapters: all files pulled in by an XInclude statement and images. # # # This makefile is intended for Users Documentation and Functional Specifications. # Do not use for Developer Documentation which is not installed and does not require olink. # Refer to http://www.x.org/releases/X11R7.6/doc/xorg-docs/ReleaseNotes.html#id2584393 # for an explanation on documents classification. # VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@am__append_1 = $(docbook:.xml=.html) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TEXT_TRUE@@HAVE_XMLTO_TRUE@am__append_2 = $(docbook:.xml=.txt) @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@am__append_3 = $(docbook:.xml=.pdf) \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(docbook:.xml=.ps) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@am__append_4 = $(docbook:.xml=.html.db) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(docbook:.xml=.pdf.db) subdir = specs/i18n/localedb ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_define_dir.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__dist_shelf_DATA_DIST) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h \ $(top_builddir)/include/X11/XlibConf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__dist_shelf_DATA_DIST = localedb.xml am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(shelfdir)" "$(DESTDIR)$(shelfdir)" DATA = $(dist_shelf_DATA) $(shelf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/docbook.am DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASE_CFLAGS = @BASE_CFLAGS@ BIGFONT_CFLAGS = @BIGFONT_CFLAGS@ BIGFONT_LIBS = @BIGFONT_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHANGELOG_CMD = @CHANGELOG_CMD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ FOP = @FOP@ GREP = @GREP@ I18N_MODULE_LIBS = @I18N_MODULE_LIBS@ INSTALL = @INSTALL@ INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ KEYSYMDEFS = @KEYSYMDEFS@ LAUNCHD = @LAUNCHD@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LINT = @LINT@ LINTLIB = @LINTLIB@ LINT_FLAGS = @LINT_FLAGS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MALLOC_ZERO_CFLAGS = @MALLOC_ZERO_CFLAGS@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_SUBSTS = @MAN_SUBSTS@ MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RAWCPP = @RAWCPP@ RAWCPPFLAGS = @RAWCPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRICT_CFLAGS = @STRICT_CFLAGS@ STRIP = @STRIP@ STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ TRADITIONALCPPFLAGS = @TRADITIONALCPPFLAGS@ VERSION = @VERSION@ WCHAR32 = @WCHAR32@ X11_CFLAGS = @X11_CFLAGS@ X11_DATADIR = @X11_DATADIR@ X11_EXTRA_DEPS = @X11_EXTRA_DEPS@ X11_LIBDIR = @X11_LIBDIR@ X11_LIBS = @X11_LIBS@ X11_LOCALEDATADIR = @X11_LOCALEDATADIR@ X11_LOCALEDIR = @X11_LOCALEDIR@ X11_LOCALELIBDIR = @X11_LOCALELIBDIR@ XERRORDB = @XERRORDB@ XKBPROTO_REQUIRES = @XKBPROTO_REQUIRES@ XKEYSYMDB = @XKEYSYMDB@ XLOCALEDATADIR = @XLOCALEDATADIR@ XLOCALEDIR = @XLOCALEDIR@ XLOCALELIBDIR = @XLOCALELIBDIR@ XMALLOC_ZERO_CFLAGS = @XMALLOC_ZERO_CFLAGS@ XMLTO = @XMLTO@ XORG_MAN_PAGE = @XORG_MAN_PAGE@ XORG_SGML_PATH = @XORG_SGML_PATH@ XSLTPROC = @XSLTPROC@ XSL_STYLESHEET = @XSL_STYLESHEET@ XTHREADLIB = @XTHREADLIB@ XTHREAD_CFLAGS = @XTHREAD_CFLAGS@ XTMALLOC_ZERO_CFLAGS = @XTMALLOC_ZERO_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ locales = @locales@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # Main DocBook/XML files (DOCTYPE book) @ENABLE_SPECS_TRUE@docbook = localedb.xml # The location where the DocBook/XML files and their generated formats are installed @ENABLE_SPECS_TRUE@shelfdir = $(docdir)/i18n/localedb # DocBook/XML generated output formats to be installed @ENABLE_SPECS_TRUE@shelf_DATA = $(am__append_1) $(am__append_2) \ @ENABLE_SPECS_TRUE@ $(am__append_3) $(am__append_4) # DocBook/XML file with chapters, appendix and images it includes @ENABLE_SPECS_TRUE@dist_shelf_DATA = $(docbook) $(chapters) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_SEARCHPATH_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --searchpath "$(XORG_SGML_PATH)/X11" \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --searchpath "$(abs_top_builddir)" @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_HTML_OLINK_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam target.database.document=$(XORG_SGML_PATH)/X11/dbs/masterdb.html.xml \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam current.docid="$(<:.xml=)" @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_HTML_STYLESHEET_FLAGS = -x $(STYLESHEET_SRCDIR)/xorg-xhtml.xsl @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_HTML_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_SEARCHPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_HTML_STYLESHEET_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_HTML_OLINK_FLAGS) @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_FO_IMAGEPATH_FLAGS = --stringparam img.src.path=$(abs_builddir)/ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_PDF_OLINK_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam target.database.document=$(XORG_SGML_PATH)/X11/dbs/masterdb.pdf.xml \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam current.docid="$(<:.xml=)" @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_FO_STYLESHEET_FLAGS = -x $(STYLESHEET_SRCDIR)/xorg-fo.xsl @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_FO_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_SEARCHPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_FO_STYLESHEET_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_FO_IMAGEPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_PDF_OLINK_FLAGS) # Generate documents cross-reference target databases @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_SEARCHPATH_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --path "$(XORG_SGML_PATH)/X11" \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --path "$(abs_top_builddir)" @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_OLINK_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --stringparam targets.filename "$@" \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --stringparam collect.xref.targets "only" \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --stringparam olink.base.uri "$(@:.db=)" @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_HTML_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(XSLT_SEARCHPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(XSLT_OLINK_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --nonet --xinclude \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(STYLESHEET_SRCDIR)/xorg-xhtml.xsl @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_PDF_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(XSLT_SEARCHPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(XSLT_OLINK_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --nonet --xinclude \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(STYLESHEET_SRCDIR)/xorg-fo.xsl @ENABLE_SPECS_TRUE@CLEANFILES = $(shelf_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/docbook.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign specs/i18n/localedb/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign specs/i18n/localedb/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/docbook.am $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_shelfDATA: $(dist_shelf_DATA) @$(NORMAL_INSTALL) @list='$(dist_shelf_DATA)'; test -n "$(shelfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(shelfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(shelfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(shelfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(shelfdir)" || exit $$?; \ done uninstall-dist_shelfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_shelf_DATA)'; test -n "$(shelfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(shelfdir)'; $(am__uninstall_files_from_dir) install-shelfDATA: $(shelf_DATA) @$(NORMAL_INSTALL) @list='$(shelf_DATA)'; test -n "$(shelfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(shelfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(shelfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(shelfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(shelfdir)" || exit $$?; \ done uninstall-shelfDATA: @$(NORMAL_UNINSTALL) @list='$(shelf_DATA)'; test -n "$(shelfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(shelfdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(shelfdir)" "$(DESTDIR)$(shelfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_shelfDATA install-shelfDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_shelfDATA uninstall-shelfDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-dist_shelfDATA install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-shelfDATA install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-dist_shelfDATA uninstall-shelfDATA .PRECIOUS: Makefile @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@%.html: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_HTML_FLAGS) xhtml-nochunks $< @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TEXT_TRUE@@HAVE_XMLTO_TRUE@%.txt: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TEXT_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_HTML_FLAGS) txt $< @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@%.pdf: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FO_FLAGS) --with-fop pdf $< @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@%.ps: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FO_FLAGS) --with-fop ps $< @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@%.html.db: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(AM_V_GEN)$(XSLTPROC) $(XSLT_HTML_FLAGS) $< @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@%.pdf.db: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(AM_V_GEN)$(XSLTPROC) $(XSLT_PDF_FLAGS) $< # Generate DocBook/XML output formats with or without stylesheets # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: E_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_OLINK_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --stringparam targets.filename "$@" \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --stringparam collect.xref.targets "only" \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --stringparam olink.base.uri "$(@:.db=)" @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSlibX11-1.6.3/specs/i18n/localedb/localedb.xml000064401431060000012000000527331247741723500210200ustar00alancstaff00002660200006 %defs; ]> X Locale Database Specification X Version 11, Release &fullrelvers; YoshioHoriuchi IBM Japan 1994IBM Corporation License to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of IBM not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS, AND NONINFRINGEMENT OF THIRD PARTY RIGHTS, IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Copyright © 1994 X Consortium 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: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED “AS IS”, 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. Except as contained in this notice, the name of the X Consortium shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from the X Consortium. X Window System is a trademark of The Open Group. LocaleDB General An X Locale Database contains the subset of a user's environment that depends on language, in X Window System. It is made up from one or more categories. Each category consists of some classes and sub-classes. It is provided as a plain ASCII text file, so a user can change its contents easily. It allows a user to customize the behavior of internationalized portion of Xlib without changing Xlib itself. This document describes; Database Format Definition Contents of Database in sample implementation Since it is hard to define the set of required information for all platforms, only the flexible database format is defined. The available entries in database are implementation dependent. Database Format Definition The X Locale Database contains one or more category definitions. This section describes the format of each category definition. The category definition consists of one or more class definitions. Each class definition has a pair of class name and class value, or has several subclasses which are enclosed by the left brace ({) and the right brace (}). Comments can be placed by using the number sign character (#). Putting the number sign character on the top of the line indicates that the entire line is comment. Also, putting any whitespace character followed by the number sign character indicates that a part of the line (from the number sign to the end of the line) is comment. A line can be continued by placing backslash (\) character as the last character on the line; this continuation character will be discarded from the input. Comment lines cannot be continued on a subsequent line using an escaped new line character. X Locale Database only accepts XPCS, the X Portable Character Set. The reserved symbols are; the quotation mark("), the number sign (#), the semicolon(;), the backslash(\), the left brace({) and the right brace(}). The format of category definition is; CategoryDefinition ::= CategoryHeader CategorySpec CategoryTrailer CategoryHeader ::= CategoryName NL CategorySpec ::= { ClassSpec } CategoryTrailer ::= "END" Delimiter CategoryName NL CategoryName ::= String ClassSpec ::= ClassName Delimiter ClassValue NL ClassName ::= String ClassValue ::= ValueList | "{" NL { ClassSpec } "}" ValueList ::= Value | Value ";" ValueList Value ::= ValuePiece | ValuePiece Value ValuePiece ::= String | QuotedString | NumericString String ::= Char { Char } QuotedString ::= """ QuotedChar { QuotedChar } """ NumericString ::= "\\o" OctDigit { OctDigit } | "\\d" DecDigit { DecDigit } | "\\x" HexDigit { HexDigit } Char ::= <XPCS except NL, Space or unescaped reserved symbols> QuotedChar ::= <XPCS except unescaped """> OctDigit ::= <character in the range of "0" - "7"> DecDigit ::= <character in the range of "0" - "9"> HexDigit ::= <character in the range of "0" - "9", "a" - "f", "A" - "F"> Delimiter ::= Space { Space } Space ::= <space> | <horizontal tab> NL ::= <newline> Elements separated by vertical bar (|) are alternatives. Curly braces ({...}) indicate zero or more repetitions of the enclosed elements. Square brackets ([...]) indicate that the enclosed element is optional. Quotes ("...") are used around literal characters. The backslash, which is not the top character of the NumericString, is recognized as an escape character, so that the next one character is treated as a literal character. For example, the two-character sequence, ""\"""(the backslash followed by the quotation mark) is recognized and replaced with a quotation mark character. Any whitespace character, that is not the Delimiter, unquoted and unescaped, is ignored. Contents of Database The available categories and classes depend on implementation, because different platform will require different information set. For example, some platform have system locale but some platform don't. Furthermore, there might be a difference in functionality even if the platform has system locale. In current sample implementation, categories listed below are available. XLC_FONTSET:XFontSet relative information XLC_XLOCALE:Character classification and conversion information XLC_FONTSET Category The XLC_FONTSET category defines the XFontSet relative information. It contains the CHARSET_REGISTRY-CHARSET_ENCODING name and character mapping side (GL, GR, etc), and is used in Output Method (OM). class super class description fsN Nth fontset (N=0,1,2, ...) charset fsN list of encoding name font fsN list of font encoding name fsN Includes an encoding information for Nth charset, where N is the index number (0,1,2,...). If there are 4 charsets available in current locale, 4 fontsets, fs0, fs1, fs2 and fs3, should be defined. This class has two subclasses, 'charset' and 'font'. charset Specifies an encoding information to be used internally in Xlib for this fontset. The format of value is; EncodingInfo ::= EncodingName [ ":" EncodingSide ] EncodingName ::= CHARSET_REGISTRY-CHARSET_ENCODING EncodingSide ::= "GL" | "GR" For detail definition of CHARSET_REGISTRY-CHARSET_ENCODING, refer to the X Logical Font Description Conventions document. example: ISO8859-1:GL font Specifies a list of encoding information which is used for searching appropriate font for this fontset. The left most entry has highest priority. XLC_XLOCALE Category The XLC_XLOCALE category defines character classification, conversion and other character attributes. class super class description encoding_name codeset name mb_cur_max MB_CUR_MAX state_depend_encoding state dependent or not wc_encoding_mask for parsing wc string wc_shift_bits for conversion between wc and mb csN Nth charset (N=0,1,2,...) side csN mapping side (GL, etc) length csN length of a character mb_encoding csN for parsing mb string wc_encoding csN for parsing wc string ct_encoding csN list of encoding name for ct encoding_name Specifies a codeset name of current locale. mb_cur_max Specifies a maximum allowable number of bytes in a multi-byte character. It is corresponding to MB_CUR_MAX of "ISO/IEC 9899:1990 C Language Standard". state_depend_encoding Indicates a current locale is state dependent. The value should be specified "True" or "False". wc_encoding_mask Specifies a bit-mask for parsing wide-char string. Each wide character is applied bit-and operation with this bit-mask, then is classified into the unique charset, by using 'wc_encoding'. wc_shift_bits Specifies a number of bit to be shifted for converting from a multi-byte character to a wide character, and vice-versa. csN Includes a character set information for Nth charset, where N is the index number (0,1,2,...). If there are 4 charsets available in current locale, cs0, cs1, cs2 and cs3 should be defined. This class has five subclasses, 'side', 'length', 'mb_encoding' 'wc_encoding' and 'ct_encoding'. side Specifies a mapping side of this charset. The format of this value is; Side ::= EncodingSide[":Default"] The suffix ":Default" can be specified. It indicates that a character belongs to the specified side is mapped to this charset in initial state. length Specifies a number of bytes of a multi-byte character of this charset. It should not contain the length of any single-shift sequence. mb_encoding Specifies a list of shift sequence for parsing multi-byte string. The format of this value is; MBEncoding ::= ShiftType ShiftSequence | ShiftType ShiftSequence ";" MBEncoding ShiftType ::= "<SS>"|"<LSL>"|"<LSR>" ShiftSequence ::= SequenceValue|SequenceValue ShiftSequence SequenceValue ::= NumericString example: <LSL> \x1b \x28 \x4a; <LSL> \x1b \x28 \x42 wc_encoding Specifies an integer value for parsing wide-char string. It is used to determine the charset for each wide character, after applying bit-and operation using 'wc_encoding_mask'. This value should be unique in all csN classes. ct_encoding Specifies a list of encoding information that can be used for Compound Text. Sample of X Locale Database The following is sample X Locale Database file. # XLocale Database Sample for ja_JP.euc # # # XLC_FONTSET category # XLC_FONTSET # fs0 class (7 bit ASCII) fs0 { charset ISO8859-1:GL font ISO8859-1:GL; JISX0201.1976-0:GL } # fs1 class (Kanji) fs1 { charset JISX0208.1983-0:GL font JISX0208.1983-0:GL } # fs2 class (Half Kana) fs2 { charset JISX0201.1976-0:GR font JISX0201.1976-0:GR } # fs3 class (User Defined Character) # fs3 { # charset JISX0212.1990-0:GL # font JISX0212.1990-0:GL # } END XLC_FONTSET # # XLC_XLOCALE category # XLC_XLOCALE encoding_name ja.euc mb_cur_max 3 state_depend_encoding False wc_encoding_mask \x00008080 wc_shift_bits 8 # cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding ISO8859-1:GL; JISX0201.1976-0:GL } # cs1 class cs1 { side GR:Default length 2 wc_encoding \x00008080 ct_encoding JISX0208.1983-0:GL; JISX0208.1983-0:GR;\ JISX0208.1983-1:GL; JISX0208.1983-1:GR } # cs2 class cs2 { side GR length 1 mb_encoding <SS> \x8e wc_encoding \x00000080 ct_encoding JISX0201.1976-0:GR } # cs3 class # cs3 { # side GL # length 2 # mb_encoding <SS> \x8f # #if HasWChar32 # wc_encoding \x20000000 # #else # wc_encoding \x00008000 # #endif # ct_encoding JISX0212.1990-0:GL; JISX0212.1990-0:GR # } END XLC_XLOCALE Reference [1] ISO/IEC 9899:1990 C Language Standard [2] X Logical Font Description Conventions current locale, 4 fontsets, fs0, fs1libX11-1.6.3/specs/i18n/localedb/Makefile.am000064401431060000012000000005021247741723500205500ustar00alancstaff00002660200006 if ENABLE_SPECS # Main DocBook/XML files (DOCTYPE book) docbook = localedb.xml # The location where the DocBook/XML files and their generated formats are installed shelfdir = $(docdir)/i18n/localedb # Generate DocBook/XML output formats with or without stylesheets include $(top_srcdir)/docbook.am endif ENABLE_SPECS libX11-1.6.3/specs/i18n/trans/Makefile.in000064401431060000012000000577571247741725500201750ustar00alancstaff00002660200006# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # Generate output formats for a single DocBook/XML with/without chapters # # Variables set by the calling Makefile: # shelfdir: the location where the docs/specs are installed. Typically $(docdir) # docbook: the main DocBook/XML file, no chapters, appendix or image files # chapters: all files pulled in by an XInclude statement and images. # # # This makefile is intended for Users Documentation and Functional Specifications. # Do not use for Developer Documentation which is not installed and does not require olink. # Refer to http://www.x.org/releases/X11R7.6/doc/xorg-docs/ReleaseNotes.html#id2584393 # for an explanation on documents classification. # VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@am__append_1 = $(docbook:.xml=.html) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TEXT_TRUE@@HAVE_XMLTO_TRUE@am__append_2 = $(docbook:.xml=.txt) @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@am__append_3 = $(docbook:.xml=.pdf) \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(docbook:.xml=.ps) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@am__append_4 = $(docbook:.xml=.html.db) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(docbook:.xml=.pdf.db) subdir = specs/i18n/trans ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_define_dir.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__dist_shelf_DATA_DIST) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h \ $(top_builddir)/include/X11/XlibConf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__dist_shelf_DATA_DIST = trans.xml am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(shelfdir)" "$(DESTDIR)$(shelfdir)" DATA = $(dist_shelf_DATA) $(shelf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/docbook.am DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASE_CFLAGS = @BASE_CFLAGS@ BIGFONT_CFLAGS = @BIGFONT_CFLAGS@ BIGFONT_LIBS = @BIGFONT_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHANGELOG_CMD = @CHANGELOG_CMD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ FOP = @FOP@ GREP = @GREP@ I18N_MODULE_LIBS = @I18N_MODULE_LIBS@ INSTALL = @INSTALL@ INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ KEYSYMDEFS = @KEYSYMDEFS@ LAUNCHD = @LAUNCHD@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LINT = @LINT@ LINTLIB = @LINTLIB@ LINT_FLAGS = @LINT_FLAGS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MALLOC_ZERO_CFLAGS = @MALLOC_ZERO_CFLAGS@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_SUBSTS = @MAN_SUBSTS@ MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RAWCPP = @RAWCPP@ RAWCPPFLAGS = @RAWCPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRICT_CFLAGS = @STRICT_CFLAGS@ STRIP = @STRIP@ STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ TRADITIONALCPPFLAGS = @TRADITIONALCPPFLAGS@ VERSION = @VERSION@ WCHAR32 = @WCHAR32@ X11_CFLAGS = @X11_CFLAGS@ X11_DATADIR = @X11_DATADIR@ X11_EXTRA_DEPS = @X11_EXTRA_DEPS@ X11_LIBDIR = @X11_LIBDIR@ X11_LIBS = @X11_LIBS@ X11_LOCALEDATADIR = @X11_LOCALEDATADIR@ X11_LOCALEDIR = @X11_LOCALEDIR@ X11_LOCALELIBDIR = @X11_LOCALELIBDIR@ XERRORDB = @XERRORDB@ XKBPROTO_REQUIRES = @XKBPROTO_REQUIRES@ XKEYSYMDB = @XKEYSYMDB@ XLOCALEDATADIR = @XLOCALEDATADIR@ XLOCALEDIR = @XLOCALEDIR@ XLOCALELIBDIR = @XLOCALELIBDIR@ XMALLOC_ZERO_CFLAGS = @XMALLOC_ZERO_CFLAGS@ XMLTO = @XMLTO@ XORG_MAN_PAGE = @XORG_MAN_PAGE@ XORG_SGML_PATH = @XORG_SGML_PATH@ XSLTPROC = @XSLTPROC@ XSL_STYLESHEET = @XSL_STYLESHEET@ XTHREADLIB = @XTHREADLIB@ XTHREAD_CFLAGS = @XTHREAD_CFLAGS@ XTMALLOC_ZERO_CFLAGS = @XTMALLOC_ZERO_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ locales = @locales@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # Main DocBook/XML files (DOCTYPE book) @ENABLE_SPECS_TRUE@docbook = trans.xml # The location where the DocBook/XML files and their generated formats are installed @ENABLE_SPECS_TRUE@shelfdir = $(docdir)/i18n/trans # DocBook/XML generated output formats to be installed @ENABLE_SPECS_TRUE@shelf_DATA = $(am__append_1) $(am__append_2) \ @ENABLE_SPECS_TRUE@ $(am__append_3) $(am__append_4) # DocBook/XML file with chapters, appendix and images it includes @ENABLE_SPECS_TRUE@dist_shelf_DATA = $(docbook) $(chapters) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_SEARCHPATH_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --searchpath "$(XORG_SGML_PATH)/X11" \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --searchpath "$(abs_top_builddir)" @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_HTML_OLINK_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam target.database.document=$(XORG_SGML_PATH)/X11/dbs/masterdb.html.xml \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam current.docid="$(<:.xml=)" @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_HTML_STYLESHEET_FLAGS = -x $(STYLESHEET_SRCDIR)/xorg-xhtml.xsl @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_HTML_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_SEARCHPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_HTML_STYLESHEET_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_HTML_OLINK_FLAGS) @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_FO_IMAGEPATH_FLAGS = --stringparam img.src.path=$(abs_builddir)/ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_PDF_OLINK_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam target.database.document=$(XORG_SGML_PATH)/X11/dbs/masterdb.pdf.xml \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam current.docid="$(<:.xml=)" @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_FO_STYLESHEET_FLAGS = -x $(STYLESHEET_SRCDIR)/xorg-fo.xsl @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_FO_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_SEARCHPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_FO_STYLESHEET_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_FO_IMAGEPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_PDF_OLINK_FLAGS) # Generate documents cross-reference target databases @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_SEARCHPATH_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --path "$(XORG_SGML_PATH)/X11" \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --path "$(abs_top_builddir)" @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_OLINK_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --stringparam targets.filename "$@" \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --stringparam collect.xref.targets "only" \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --stringparam olink.base.uri "$(@:.db=)" @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_HTML_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(XSLT_SEARCHPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(XSLT_OLINK_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --nonet --xinclude \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(STYLESHEET_SRCDIR)/xorg-xhtml.xsl @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_PDF_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(XSLT_SEARCHPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(XSLT_OLINK_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --nonet --xinclude \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(STYLESHEET_SRCDIR)/xorg-fo.xsl @ENABLE_SPECS_TRUE@CLEANFILES = $(shelf_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/docbook.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign specs/i18n/trans/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign specs/i18n/trans/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/docbook.am $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_shelfDATA: $(dist_shelf_DATA) @$(NORMAL_INSTALL) @list='$(dist_shelf_DATA)'; test -n "$(shelfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(shelfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(shelfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(shelfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(shelfdir)" || exit $$?; \ done uninstall-dist_shelfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_shelf_DATA)'; test -n "$(shelfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(shelfdir)'; $(am__uninstall_files_from_dir) install-shelfDATA: $(shelf_DATA) @$(NORMAL_INSTALL) @list='$(shelf_DATA)'; test -n "$(shelfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(shelfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(shelfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(shelfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(shelfdir)" || exit $$?; \ done uninstall-shelfDATA: @$(NORMAL_UNINSTALL) @list='$(shelf_DATA)'; test -n "$(shelfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(shelfdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(shelfdir)" "$(DESTDIR)$(shelfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_shelfDATA install-shelfDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_shelfDATA uninstall-shelfDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-dist_shelfDATA install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-shelfDATA install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-dist_shelfDATA uninstall-shelfDATA .PRECIOUS: Makefile @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@%.html: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_HTML_FLAGS) xhtml-nochunks $< @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TEXT_TRUE@@HAVE_XMLTO_TRUE@%.txt: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TEXT_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_HTML_FLAGS) txt $< @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@%.pdf: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FO_FLAGS) --with-fop pdf $< @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@%.ps: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FO_FLAGS) --with-fop ps $< @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@%.html.db: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(AM_V_GEN)$(XSLTPROC) $(XSLT_HTML_FLAGS) $< @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@%.pdf.db: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(AM_V_GEN)$(XSLTPROC) $(XSLT_PDF_FLAGS) $< # Generate DocBook/XML output formats with or without stylesheets # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: E@@HAVE_STYLESHEElibX11-1.6.3/specs/i18n/trans/trans.xml000064401431060000012000001503071247741723500177600ustar00alancstaff00002660200006 %defs; ]> The XIM Transport Specification Revision 0.1 X Version 11, Release &fullrelvers; TakashiFujiwara FUJITSU LIMITED 1994FUJITSU LIMITED Abstract This specification describes the transport layer interfaces between Xlib and IM Server, which makes various channels usable such as X protocol or TCP/IP, DECnet and etc. 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. Fujitsu makes 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. Copyright © 1994 X Consortium 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: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED “AS IS”, 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. Except as contained in this notice, the name of the X Consortium shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from the X Consortium. X Window System is a trademark of The Open Group. X Transport Specification Introduction The Xlib XIM implementation is layered into three functions, a protocol layer, an interface layer and a transport layer. The purpose of this layering is to make the protocol independent of transport implementation. Each function of these layers are: The protocol layer implements overall function of XIM and calls the interface layer functions when it needs to communicate to IM Server. The interface layer separates the implementation of the transport layer from the protocol layer, in other words, it provides implementation independent hook for the transport layer functions. The transport layer handles actual data communication with IM Server. It is done by a set of several functions named transporters. This specification describes the interface layer and the transport layer, which makes various communication channels usable such as X protocol or, TCP/IP, DECnet, STREAM, etc., and provides the information needed for adding another new transport layer. In addition, sample implementations for the transporter using the X connection is described in section 4. Initialization Registering structure to initialize The structure typed as TransportSW contains the list of the transport layer the specific implementations supports. typedef struct { char *transport_name; Bool (*config); } TransportSW; transport_name name of transportRefer to "The Input Method Protocol: Appendix B config initial configuration function A sample entry for the Xlib supporting transporters is shown below: TransportSW _XimTransportRec[] = { /* char *: * transport_name, Bool (*config)() */ "X", _XimXConf, "tcp", _XimTransConf, "local", _XimTransConf, "decnet", _XimTransConf, "streams", _XimTransConf, (char *)NULL, (Bool (*)())NULL, }; Initialization function The following function will be called once when Xlib configures the transporter functions. Bool (*config) XIM im char *transport_data im Specifies XIM structure address. transport_data Specifies the data specific to the transporter, in IM Server address.Refer to "The Input Method Protocol: Appendix B This function must setup the transporter function pointers. The actual config function will be chosen by IM Server at the pre-connection time, matching by the transport_name specified in the _XimTransportRec array; The specific members of XimProto structure listed below must be initialized so that point they appropriate transporter functions. If the specified transporter has been configured successfully, this function returns True. There is no Alternative Entry for config function itself. The structure XimProto contains the following function pointers: Bool (*connect)(); /* Open connection */ Bool (*shutdown)(); /* Close connection */ Bool (*write)(); /* Write data */ Bool (*read)(); /* Read data */ Bool (*flush)(); /* Flush data buffer */ Bool (*register_dispatcher)(); /* Register asynchronous data handler */ Bool (*call_dispatcher)(); /* Call dispatcher */ These functions are called when Xlib needs to communicate the IM Server. These functions must process the appropriate procedure described below. The interface/transport layer functions Following functions are used for the transport interface. The Transport Layer Functions Alternate Entry (Interface Layer) XimProto member (Transport Layer) Section _XimConnect connect 3.1 _XimShutdown shutdown 3.2 _XimWrite write 3.3 _XimRead read 3.4 _XimFlush flush 3.5 _XimRegisterDispatcher register_dispatcher 3.6 _XimCallDispatcher call_dispatcher 3.7
The Protocol layer calls the above functions using the Alternative Entry in the left column. The transport implementation defines XimProto member function in the right column. The Alternative Entry is provided so as to make easier to implement the Protocol Layer. Opening connection When XOpenIM is called, the following function is called to connect with the IM Server. Bool (*connect) XIM im im Specifies XIM structure address. This function must establishes the connection to the IM Server. If the connection is established successfully, this function returns True. The Alternative Entry for this function is: Bool _XimConnect XIM im im Specifies XIM structure address. Closing connection When XCloseIM is called, the following function is called to disconnect the connection with the IM Server. The Alternative Entry for this function is: Bool (*shutdown) XIM im im Specifies XIM structure address. This function must close connection with the IM Server. If the connection is closed successfully, this function returns True. The Alternative Entry for this function is: Bool _XimShutdown XIM im im Specifies XIM structure address. Writing data The following function is called, when Xlib needs to write data to the IM Server. Bool _XimWrite XIM im INT16 len XPointer data im Specifies XIM structure address. len Specifies the length of writing data. data Specifies the writing data. This function writes the data to the IM Server, regardless of the contents. The number of bytes is passed to len. The writing data is passed to data. If data is sent successfully, the function returns True. Refer to "The Input Method Protocol" for the contents of the writing data. The Alternative Entry for this function is: Bool _XimWrite XIM im INT16 len XPointer data im Specifies XIM structure address. len Specifies the length of writing data. data Specifies the writing data. Reading data The following function is called when Xlib waits for response from IM server synchronously. Bool _XimRead XIM im XPointer read_buf int buf_len int *ret_len im Specifies XIM structure address. read_buf Specifies the buffer to store data. buf_len Specifies the size of the buffer ret_len Specifies the length of stored data. This function stores the read data in read_buf, which size is specified as buf_len. The size of data is set to ret_len. This function return True, if the data is read normally or reading data is completed. The Alternative Entry for this function is: Bool _XimRead XIM im INT16 *ret_len XPointer buf int buf_len Bool (*predicate)() XPointer predicate_arg im Specifies XIM structure address. ret_len Specifies the size of the data buffer. buf Specifies the buffer to store data. buf_len Specifies the length of buffer. predicate Specifies the predicate for the XIM data. predicate_arg Specifies the predicate specific data. The predicate procedure indicates whether the data is for the XIM or not. len This function stores the read data in buf, which size is specified as buf_len. The size of data is set to ret_len. If preedicate() returns True, this function returns True. If not, it calls the registered callback function. The procedure and its arguments are: void (*predicate) XIM im INT16 len XPointer data XPointer predicate_arg im Specifies XIM structure address. len Specifies the size of the data buffer. data Specifies the buffer to store data. predicate_arg Specifies the predicate specific data. Flushing buffer The following function is called when Xlib needs to flush the data. void (*flush) XIM im im Specifies XIM structure address. This function must flush the data stored in internal buffer on the transport layer. If data transfer is completed, the function returns True. The Alternative Entry for this function is: void _XimFlush XIM im im Specifies XIM structure address. Registering asynchronous data handler Xlib needs to handle asynchronous response from IM Server. This is because some of the XIM data occur asynchronously to X events. Those data will be handled in the Filter, and the Filter will call asynchronous data handler in the protocol layer. Then it calls dispatchers in the transport layer. The dispatchers are implemented by the protocol layer. This function must store the information and prepare for later call of the dispatchers using . When multiple dispatchers are registered, they will be called sequentially in order of registration, on arrival of asynchronous data. The register_dispatcher is declared as following: Bool (*register_dispatcher) XIM im Bool (*dispatcher)() XPointer call_data im Specifies XIM structure address. dispatcher Specifies the dispatcher function to register. call_data Specifies a parameter for the dispatcher. The dispatcher is a function of the following type: Bool (*dispatcher) XIM im INT16 len XPointer data XPointer call_data im Specifies XIM structure address. len Specifies the size of the data buffer. data Specifies the buffer to store data. call_data Specifies a parameter passed to the register_dispatcher. The dispatcher is provided by the protocol layer. They are called once for every asynchronous data, in order of registration. If the data is used, it must return True. otherwise, it must return False. If the dispatcher function returns True, the Transport Layer assume that the data has been processed by the upper layer. The Alternative Entry for this function is: Bool _XimRegisterDispatcher XIM im Bool (*dispatcher)() XPointer call_data im Specifies XIM structure address. dispatcher Specifies the dispatcher function to register. call_data Specifies a parameter for the dispatcher. Calling dispatcher The following function is used to call the registered dispatcher function, when the asynchronous response from IM Server has arrived. Bool (*call_dispatcher) XIM im INT16 len XPointer data im Specifies XIM structure address. len Specifies the size of data buffer. data Specifies the buffer to store data. The call_dispatcher must call the dispatcher function, in order of their registration. len and data are the data passed to register_dispatcher. The return values are checked at each invocation, and if it finds True, it immediately return with true for its return value. It is depend on the upper layer whether the read data is XIM Protocol packet unit or not. The Alternative Entry for this function is: Bool _XimCallDispatcher XIM im INT16 len XPointer call_data
Sample implementations for the Transport Layer Sample implementations for the transporter using the X connection is described here. X Transport At the beginning of the X Transport connection for the XIM transport mechanism, two different windows must be created either in an Xlib XIM or in an IM Server, with which the Xlib and the IM Server exchange the XIM transports by using the ClientMessage events and Window Properties. In the following, the window created by the Xlib is referred as the "client communication window", and on the other hand, the window created by the IM Server is referred as the "IMS communication window". Connection In order to establish a connection, a communication window is created. A ClientMessage in the following event's format is sent to the owner window of XIM_SERVER selection, which the IM Server has created. Refer to "The Input Method Protocol" for the XIM_SERVER atom. The ClientMessage sent to the IMS window. Structure Member Contents int type ClientMessage u_long serial Set by the X Window System Bool send_event Set by the X Window System Display *display The display to which connects Window window IMS Window ID Atom message_type XInternAtom(display, "_XIM_CONNECT", false) int format 32 long data.1[0] client communication window ID long data.1[1] client-major-transport-version(*1) long data.1[2] client-major-transport-version(*1)
In order to establish the connection (to notify the IM Server communication window), the IM Server sends a ClientMessage in the following event's format to the client communication window. The ClientMessage sent by IM Server. Structure Member Contents int type ClientMessage u_long serial Set by the X Window System Bool send_event Set by the X Window System Display *display The display to which connects Window window IMS Window ID Atom message_type XInternAtom(display, "_XIM_CONNECT", false) int format 32 long data.1[0] client communication window ID long data.1[1] client-major-transport-version(*1) long data.1[2] client-major-transport-version(*1) long data.1[3] dividing size between ClientMessage and Property(*2)
(*1) major/minor-transport-version The read/write method is decided by the combination of major/minor-transport-version, as follows: The read/write method and the major/minor-transport-version Transport-version read/write major minor 0 0 only-CM & Property-with-CM 1 only-CM & multi-CM 2 only-CM & multi-CM & Property-with-CM 1 0 PropertyNotify 2 0 only-CM & PropertyNotify 1 only-CM & multi-CM & PropertyNotify
only-CM : data is sent via a ClientMessage multi-CM : data is sent via multiple ClientMessages Property-with-CM : data is written in Property, and its Atom is send via ClientMessage PropertyNotify : data is written in Property, and its Atom is send via PropertyNotify The method to decide major/minor-transport-version is as follows: The client sends 0 as major/minor-transport-version to the IM Server. The client must support all methods in Table 4-3. The client may send another number as major/minor-transport-version to use other method than the above in the future. The IM Server sends its major/minor-transport-version number to the client. The client sends data using the method specified by the IM Server. If major/minor-transport-version number is not available, it is regarded as 0. (*2) dividing size between ClientMessage and Property If data is sent via both of multi-CM and Property, specify the dividing size between ClientMessage and Property. The data, which is smaller than this size, is sent via multi-CM (or only-CM), and the data, which is lager than this size, is sent via Property.
read/write The data is transferred via either ClientMessage or Window Property in the X Window System. Format for the data from the Client to the IM Server ClientMessage If data is sent via ClientMessage event, the format is as follows: The ClientMessage event's format (first or middle) Structure Member Contents int type ClientMessage u_long serial Set by the X Window System Bool send_event Set by the X Window System Display *display The display to which connects Window window IMS Window ID Atom message_type XInternAtom(display, "_XIM_MOREDATA", False) int format 8 char data.b[20] (read/write DATA : 20 byte)
The ClientMessage event's format (only or last) Structure Member Contents int type ClientMessage u_long serial Set by the X Window System Bool send_event Set by the X Window System Display *display The display to which connects Window window IMS Window ID Atom message_type XInternAtom(display, "_XIM_PROTOCOL", False) int format 8 char data.b[20] (read/write DATA : MAX 20 byte) If the data is smaller than 20 bytes, all data other than available data must be 0.
Property In the case of large data, data will be sent via the Window Property for the efficiency. There are the following two methods to notify Property, and transport-version is decided which method is used. The XChangeProperty function is used to store data in the client communication window, and Atom of the stored data is notified to the IM Server via ClientMessage event. The XChangeProperty function is used to store data in the client communication window, and Atom of the stored data is notified to the IM Server via PropertyNotify event. The arguments of the XChangeProperty are as follows: The XChangeProperty event's format Argument Contents Display *display The display to which connects Window window IMS communication window ID Atom property read/write property Atom (*1) int format 8 int mode PropModeAppend u_char *data read/write DATA int nelements length of DATA
(*1) The read/write property ATOM allocates the following strings by XInternAtom. "_clientXXX" The client changes the property with the mode of PropModeAppend and the IM Server will read it with the delete mode i.e. (delete = True). If Atom is notified via ClientMessage event, the format of the ClientMessage is as follows: The ClientMessage event's format to send Atom of property Structure Member Contents int type ClientMessage u_long serial Set by the X Window System Bool send_event Set by the X Window System Display *display The display to which connects Window window IMS Window ID Atom message_type XInternAtom(display, "_XIM_PROTOCOL", False) int format 8 long data.1[0] length of read/write property Atom long data.1[1] read/write property Atom
Format for the data from the IM Server to the Client ClientMessage The format of the ClientMessage is as follows: The ClientMessage event's format (first or middle) Structure Member Contents int type ClientMessage u_long serial Set by the X Window System Bool send_event Set by the X Window System Display *display The display to which connects Window window IMS Window ID Atom message_type XInternAtom(display, "_XIM_MOREDATA", False) int format 8 char data.b[20] (read/write DATA : 20 byte)
The ClientMessage event's format (only or last) Structure Member Contents int type ClientMessage u_long serial Set by the X Window System Bool send_event Set by the X Window System Display *display The display to which connects Window window IMS Window ID Atom message_type XInternAtom(display, "_XIM_PROTOCOL", False) int format 8 char data.b[20] (read/write DATA : MAX 20 byte) (*1)
(*1) If the data size is smaller than 20 bytes, all data other than available data must be 0. Property In the case of large data, data will be sent via the Window Property for the efficiency. There are the following two methods to notify Property, and transport-version is decided which method is used. The XChangeProperty function is used to store data in the IMS communication window, and Atom of the property is sent via the ClientMessage event. The XChangeProperty function is used to store data in the IMS communication window, and Atom of the property is sent via PropertyNotify event. The arguments of the XChangeProperty are as follows: The XChangeProperty event's format Argument Contents Display *display The display to which connects Window window IMS communication window ID Atom property read/write property Atom (*1) int format 8 int mode PropModeAppend u_char *data read/write DATA int nelements length of DATA
(*1) The read/write property ATOM allocates some strings, which are not allocated by the client, by XInternAtom. The IM Server changes the property with the mode of PropModeAppend and the client reads it with the delete mode, i.e. (delete = True). If Atom is notified via ClientMessage event, the format of the ClientMessage is as follows: The ClientMessage event's format to send Atom of property Structure Member Contents int type ClientMessage u_long serial Set by the X Window System Bool send_event Set by the X Window System Display *display The display to which connects Window window IMS Window ID Atom message_type XInternAtom(display, "_XIM_PROTOCOL", False) int format 8 long data.1[0] length of read/write property Atom long data.1[1] read/write property Atom
Closing Connection If the client disconnect with the IM Server, shutdown function should free the communication window properties and etc..
References [1] Masahiko Narita and Hideki Hiura, "The Input Method Protocol"
s follows:
The ClientMessage event's format to send Atom of property &2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = specs/i18n ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_define_dir.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h \ $(top_builddir)/include/X11/XlibConf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASE_CFLAGS = @BASE_CFLAGS@ BIGFONT_CFLAGS = @BIGFONT_CFLAGS@ BIGFONT_LIBS = @BIGFONT_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHANGELOG_CMD = @CHANGELOG_CMD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ FOP = @FOP@ GREP = @GREP@ I18N_MODULE_LIBS = @I18N_MODULE_LIBS@ INSTALL = @INSTALL@ INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ KEYSYMDEFS = @KEYSYMDEFS@ LAUNCHD = @LAUNCHD@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LINT = @LINT@ LINTLIB = @LINTLIB@ LINT_FLAGS = @LINT_FLAGS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MALLOC_ZERO_CFLAGS = @MALLOC_ZERO_CFLAGS@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_SUBSTS = @MAN_SUBSTS@ MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RAWCPP = @RAWCPP@ RAWCPPFLAGS = @RAWCPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRICT_CFLAGS = @STRICT_CFLAGS@ STRIP = @STRIP@ STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ TRADITIONALCPPFLAGS = @TRADITIONALCPPFLAGS@ VERSION = @VERSION@ WCHAR32 = @WCHAR32@ X11_CFLAGS = @X11_CFLAGS@ X11_DATADIR = @X11_DATADIR@ X11_EXTRA_DEPS = @X11_EXTRA_DEPS@ X11_LIBDIR = @X11_LIBDIR@ X11_LIBS = @X11_LIBS@ X11_LOCALEDATADIR = @X11_LOCALEDATADIR@ X11_LOCALEDIR = @X11_LOCALEDIR@ X11_LOCALELIBDIR = @X11_LOCALELIBDIR@ XERRORDB = @XERRORDB@ XKBPROTO_REQUIRES = @XKBPROTO_REQUIRES@ XKEYSYMDB = @XKEYSYMDB@ XLOCALEDATADIR = @XLOCALEDATADIR@ XLOCALEDIR = @XLOCALEDIR@ XLOCALELIBDIR = @XLOCALELIBDIR@ XMALLOC_ZERO_CFLAGS = @XMALLOC_ZERO_CFLAGS@ XMLTO = @XMLTO@ XORG_MAN_PAGE = @XORG_MAN_PAGE@ XORG_SGML_PATH = @XORG_SGML_PATH@ XSLTPROC = @XSLTPROC@ XSL_STYLESHEET = @XSL_STYLESHEET@ XTHREADLIB = @XTHREADLIB@ XTHREAD_CFLAGS = @XTHREAD_CFLAGS@ XTMALLOC_ZERO_CFLAGS = @XTMALLOC_ZERO_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ locales = @locales@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = compose framework localedb trans all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign specs/i18n/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign specs/i18n/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ilddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vlibX11-1.6.3/specs/i18n/compose/Makefile.am000064401431060000012000000007501247741723500204550ustar00alancstaff00002660200006if ENABLE_SPECS if HAVE_PERL # Main DocBook/XML files (DOCTYPE book) docbook = libX11-keys.xml # Included chapters, appendix, images chapters = $(locales:%=%.xml) # The location where the DocBook/XML generated formats are installed shelfdir = $(docdir)/i18n/compose # Generate DocBook/XML output formats with or without stylesheets # The XML source is generated and cleaned but not distributed include docbook-nl.am endif HAVE_PERL endif ENABLE_SPECS EXTRA_DIST = compose-chart.pl libX11-1.6.3/specs/i18n/compose/compose-chart.pl000075501431060000012000000236041247741723500215300ustar00alancstaff00002660200006#! /usr/bin/perl # # Copyright 2009, 2010, Oracle and/or its affiliates. All rights reserved. # # 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: # # The above copyright notice and this permission notice (including the next # paragraph) shall be included in all copies or substantial portions of the # Software. # # THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. # # # Make a DocBook chart showing compose combinations for a locale # # See perldoc at end (or run with --help or --man options) for details # of command-line options. # # Compose file grammar is defined in modules/im/ximcp/imLcPrs.c use strict; use warnings; use Getopt::Long; use Pod::Usage; my $error_count = 0; my $charset; my $locale_name; my $output_filename = '-'; my $man = 0; my $help = 0; my $make_index = 0; GetOptions ('charset:s' => \$charset, 'locale=s' => \$locale_name, 'output=s' => \$output_filename, 'index' => \$make_index, 'help|?' => \$help, 'man' => \$man) or pod2usage(2); pod2usage(1) if $help; pod2usage(-exitstatus => 0, -verbose => 2) if $man; if (!defined($charset) || ($charset eq "")) { if (defined($locale_name)) { my $guessed_charset = $locale_name; $guessed_charset =~ s{^.*\.}{}; if ($guessed_charset =~ m{^(utf-8|gbk|gb18030)$}i) { $charset = $1; } elsif ($guessed_charset =~ m{iso8859-(\d+)}i) { $charset = "iso-8859-$1"; } elsif ($guessed_charset =~ m{^microsoft-cp(125\d)$}) { $charset = "windows-$1"; } } if (!defined($charset) || ($charset eq "")) { $charset = "utf-8"; } } if ($make_index) { # Print Docbook output open my $OUTPUT, '>', $output_filename or die "Could not create $output_filename: $!"; print $OUTPUT join ("\n", qq(), q(), q(
), q( ), q( Xlib Compose Key Charts), q( ), ( map { qq( \
$_
\
) } @ARGV ), q(
), "\n" ); close $OUTPUT or die "Couldn't write $output_filename: $!"; exit(0); } foreach my $a (@ARGV) { $error_count += make_compose_chart($a); } exit($error_count); sub make_compose_chart { my ($filename) = @_; my $errors = 0; my @compose_table = (); my @included_files = (); my $line = 0; my $pre_file = ($filename =~ m{\.pre$}) ? 1 : 0; my $in_c_comment = 0; my $in_comment = 0; my $keyseq_count = 0; open my $COMPOSE, '<', $filename or die "Could not open $filename: $!"; COMPOSE_LINE: while (my $cl = <$COMPOSE>) { $line++; chomp($cl); my $original_line = $cl; # Special handling for changes cpp makes to .pre files if ($pre_file == 1) { if ($in_c_comment) { # Look for end of multi-line C comment if ($cl =~ m{\*/(.*)$}) { $cl = $1; $in_c_comment = 0; } else { next; } } $cl =~ s{/\*.\**/}{}; # Remove single line C comments if ($cl =~ m{^(.*)/\*}) { # Start of a multi-line C comment $cl = $1; $in_c_comment = 1; } $cl =~ s{^\s*XCOMM}{#}; # Translate pre-processing comments } chomp($cl); if ($cl =~ m{^\s*#\s*(.*)$}) { # Comment only lines # Combine commment blocks my $comment = $1; if ($in_comment) { my $prev_comment = pop @compose_table; $comment = join(' ', $prev_comment->{-comment}, $comment); } else { $in_comment = 1; } push @compose_table, { -type => 'comment', -comment => $comment }; next COMPOSE_LINE; } $in_comment = 0; if ($cl =~ m{^\s*$}) { # Skip blank lines next COMPOSE_LINE; } elsif ($cl =~ m{^(STATE\s+|END_STATE)}) { # Sun extension to compose file syntax next COMPOSE_LINE; } elsif ($cl =~ m{^([^:]+)\s*:\s*(.+)$}) { my ($seq, $action) = ($1, $2); $seq =~ s{\s+$}{}; my @keys = grep { $_ !~ m/^\s*$/ } split /[\s\<\>]+/, $seq; push @compose_table, { -type => 'keyseq', -keys => [ @keys ], -action => $action }; $keyseq_count++; next COMPOSE_LINE; } elsif ($cl =~ m{^(STATE_TYPE:|\@StartDeadKeyMap|\@EndDeadKeyMap)}) { # ignore next COMPOSE_LINE; } elsif ($cl =~ m{^include "(.*)"}) { my $incpath = $1; $incpath =~ s{^X11_LOCALEDATADIR/(.*)/Compose}{the $1 compose table}; push @included_files, $incpath; next COMPOSE_LINE; } else { print STDERR ('Unrecognized pattern in ', $filename, ' on line #', $line, ":\n ", $cl, "\n"); } } close $COMPOSE; if ($errors > 0) { return $errors; } # Print Docbook output open my $OUTPUT, '>', $output_filename or die "Could not create $output_filename: $!"; print $OUTPUT join ("\n", qq(), q(), qq(
), qq(Xlib Compose Keys for $locale_name), q(Applications using Xlib input handling should recognize), q( these compose key sequences in locales using the), qq( $locale_name compose table.), "\n" ); if (@included_files) { print $OUTPUT q(This compose table includes the non-conflicting), q( entries from: ), join(',', @included_files), q(. Those entries are not shown here - see those charts for the), q( included key sequences.), "\n"; } my @pretable_comments = (); if ($keyseq_count == 0) { @pretable_comments = @compose_table; } elsif ($compose_table[0]->{-type} eq 'comment') { push @pretable_comments, shift @compose_table; } foreach my $comment_ref (@pretable_comments) { print $OUTPUT qq(), xml_escape($comment_ref->{-comment}), qq(\n); } if ($keyseq_count > 0) { start_table($OUTPUT); my $row_count = 0; foreach my $cr (@compose_table) { if ($row_count++ > 750) { # Break tables every 750 rows to avoid overflowing # xmlto/xsltproc limits on the largest tables end_table($OUTPUT); start_table($OUTPUT); $row_count = 0; } if ($cr->{-type} eq 'comment') { print $OUTPUT qq(), xml_escape($cr->{-comment}), qq(\n); } elsif ($cr->{-type} eq 'keyseq') { my $action = join(" ", xml_escape($cr->{-action})); if ($action =~ m{^\s*"\\([0-7]+)"}) { my $char = oct($1); if ($char >= 32) { $action =~ s{^\s*"\\[0-7]+"}{"&#$char;"}; } } $action =~ s{^\s*"(.+)"}{"$1"}; print $OUTPUT qq(), qq(), (map { qq($_) } xml_escape(@{$cr->{-keys}})), qq(), qq(), $action, qq(\n); } } end_table($OUTPUT); } else { print $OUTPUT qq(), qq(This compose table defines no sequences of its own.), qq(\n); } print $OUTPUT "
\n"; close $OUTPUT or die "Couldn't write $output_filename: $!"; return $errors; } sub xml_escape { my @output; foreach my $l (@_) { $l =~ s{\&}{&}g; $l =~ s{\<}{<}g; $l =~ s{\>}{>}g; push @output, $l; } return @output; } sub start_table { my ($OUTPUT) = @_; print $OUTPUT join("\n", qq(
Compose Key Sequences for $locale_name), qq(), qq( ), qq( ), qq( Key SequenceAction), qq( ), qq( \n), ); } sub end_table { my ($OUTPUT) = @_; print $OUTPUT "\n\n
\n"; } __END__ =head1 NAME compose-chart - Make DocBook/XML charts of compose table entries =head1 SYNOPSIS compose-chart [options] [file ...] Options: --charset[=] character set to specify in XML doctype --locale= name of locale to display in chart --output= filename to output chart to --index make index of charts instead of individual chart --help brief help message --man full documentation =head1 OPTIONS =over 8 =item B<--charset>[=I] Specify a character set to list in the doctype declaration in the XML output. If not specified, attempts to guess from the locale name, else default to "utf-8". =item B<--locale>=I Specify the locale name to use in the chart titles and introductory text. =item B<--output>=I Specify the output file to write the DocBook output to. =item B<--index> Generate an index of the listed locale charts instead of a chart for a specific locale. =item B<--help> Print a brief help message and exit. =item B<--man> Print the manual page and exit. =back =head1 DESCRIPTION This program will read the given compose table file(s) and generate DocBook/XML charts listing the available characters for end-user reference. =cut libX11-1.6.3/specs/i18n/compose/Makefile.in000064401431060000012000000645411247741725500205000ustar00alancstaff00002660200006# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # Generate output formats for a single DocBook/XML with/without chapters # # This version of docbook.am handles cases where XML source is generated # and the html to be produced must be in chunks, one per chapter. # The generated source must be cleaned, installed but not distributed # # Variables set by the calling Makefile: # shelfdir: the location where the docs/specs are installed. Typically $(docdir) # docbook: the main DocBook/XML file, no chapters, appendix or image files # chapters: all files pulled in by an XInclude statement and images. # # # This makefile is intended for Users Documentation and Functional Specifications. # Do not use for Developer Documentation which is not installed and does not require olink. # Refer to http://www.x.org/releases/X11R7.6/doc/xorg-docs/ReleaseNotes.html#id2584393 # for an explanation on documents classification. # VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@am__append_1 = $(docbook:.xml=.html) $(chapters:.xml=.html) @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TEXT_TRUE@@HAVE_XMLTO_TRUE@am__append_2 = $(docbook:.xml=.txt) @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@am__append_3 = $(docbook:.xml=.pdf) \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(docbook:.xml=.ps) @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@am__append_4 = $(docbook:.xml=.html.db) \ @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(docbook:.xml=.pdf.db) subdir = specs/i18n/compose ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_define_dir.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h \ $(top_builddir)/include/X11/XlibConf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(shelfdir)" DATA = $(shelf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/docbook-nl.am DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASE_CFLAGS = @BASE_CFLAGS@ BIGFONT_CFLAGS = @BIGFONT_CFLAGS@ BIGFONT_LIBS = @BIGFONT_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHANGELOG_CMD = @CHANGELOG_CMD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ FOP = @FOP@ GREP = @GREP@ I18N_MODULE_LIBS = @I18N_MODULE_LIBS@ INSTALL = @INSTALL@ INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ KEYSYMDEFS = @KEYSYMDEFS@ LAUNCHD = @LAUNCHD@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LINT = @LINT@ LINTLIB = @LINTLIB@ LINT_FLAGS = @LINT_FLAGS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MALLOC_ZERO_CFLAGS = @MALLOC_ZERO_CFLAGS@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_SUBSTS = @MAN_SUBSTS@ MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RAWCPP = @RAWCPP@ RAWCPPFLAGS = @RAWCPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRICT_CFLAGS = @STRICT_CFLAGS@ STRIP = @STRIP@ STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ TRADITIONALCPPFLAGS = @TRADITIONALCPPFLAGS@ VERSION = @VERSION@ WCHAR32 = @WCHAR32@ X11_CFLAGS = @X11_CFLAGS@ X11_DATADIR = @X11_DATADIR@ X11_EXTRA_DEPS = @X11_EXTRA_DEPS@ X11_LIBDIR = @X11_LIBDIR@ X11_LIBS = @X11_LIBS@ X11_LOCALEDATADIR = @X11_LOCALEDATADIR@ X11_LOCALEDIR = @X11_LOCALEDIR@ X11_LOCALELIBDIR = @X11_LOCALELIBDIR@ XERRORDB = @XERRORDB@ XKBPROTO_REQUIRES = @XKBPROTO_REQUIRES@ XKEYSYMDB = @XKEYSYMDB@ XLOCALEDATADIR = @XLOCALEDATADIR@ XLOCALEDIR = @XLOCALEDIR@ XLOCALELIBDIR = @XLOCALELIBDIR@ XMALLOC_ZERO_CFLAGS = @XMALLOC_ZERO_CFLAGS@ XMLTO = @XMLTO@ XORG_MAN_PAGE = @XORG_MAN_PAGE@ XORG_SGML_PATH = @XORG_SGML_PATH@ XSLTPROC = @XSLTPROC@ XSL_STYLESHEET = @XSL_STYLESHEET@ XTHREADLIB = @XTHREADLIB@ XTHREAD_CFLAGS = @XTHREAD_CFLAGS@ XTMALLOC_ZERO_CFLAGS = @XTMALLOC_ZERO_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ locales = @locales@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # Main DocBook/XML files (DOCTYPE book) @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@docbook = libX11-keys.xml # Included chapters, appendix, images @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@chapters = $(locales:%=%.xml) # The location where the DocBook/XML generated formats are installed @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@shelfdir = $(docdir)/i18n/compose # DocBook/XML generated output formats to be installed @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@shelf_DATA = $(chapters) $(docbook) \ @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@ $(am__append_1) \ @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@ $(am__append_2) \ @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@ $(am__append_3) \ @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@ $(am__append_4) @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_SEARCHPATH_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --searchpath "$(XORG_SGML_PATH)/X11" \ @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --searchpath "$(abs_top_builddir)" @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_HTML_OLINK_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam target.database.document=$(XORG_SGML_PATH)/X11/dbs/masterdb.html.xml \ @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam current.docid="$(<:.xml=)" @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_HTML_STYLESHEET_FLAGS = -x $(STYLESHEET_SRCDIR)/xorg-chunk.xsl @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_TXT_STYLESHEET_FLAGS = -x $(STYLESHEET_SRCDIR)/xorg-xhtml.xsl @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_HTML_CHUNKING_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam root.filename="$(<:.xml=)" @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_HTML_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_SEARCHPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_HTML_STYLESHEET_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_HTML_CHUNKING_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_HTML_OLINK_FLAGS) @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_TXT_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_SEARCHPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_TXT_STYLESHEET_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_HTML_OLINK_FLAGS) @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_FO_IMAGEPATH_FLAGS = --stringparam img.src.path=$(abs_builddir)/ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_FO_STYLESHEET_FLAGS = -x $(STYLESHEET_SRCDIR)/xorg-fo.xsl @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_PDF_OLINK_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam target.database.document=$(XORG_SGML_PATH)/X11/dbs/masterdb.pdf.xml \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam current.docid="$(<:.xml=)" @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_FO_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_SEARCHPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_FO_STYLESHEET_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_FO_IMAGEPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_PDF_OLINK_FLAGS) # Generate documents cross-reference target databases @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_SEARCHPATH_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --path "$(XORG_SGML_PATH)/X11" \ @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --path "$(abs_top_builddir)" @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_OLINK_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --stringparam targets.filename "$@" \ @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --stringparam collect.xref.targets "only" @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_FO_OLINK_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --stringparam olink.base.uri "$(@:.db=)" @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_HTML_CHUNKING_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --stringparam root.filename "$(<:.xml=)" @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_HTML_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(XSLT_SEARCHPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(XSLT_HTML_CHUNKING_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(XSLT_OLINK_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --nonet --xinclude \ @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(STYLESHEET_SRCDIR)/xorg-chunk.xsl @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_PDF_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(XSLT_SEARCHPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(XSLT_OLINK_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(XSLT_FO_OLINK_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --nonet --xinclude \ @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(STYLESHEET_SRCDIR)/xorg-fo.xsl @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@CLEANFILES = $(shelf_DATA) # Generate DocBook/XML output formats with or without stylesheets # The XML source is generated and cleaned but not distributed EXTRA_DIST = compose-chart.pl all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/docbook-nl.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign specs/i18n/compose/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign specs/i18n/compose/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(srcdir)/docbook-nl.am $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-shelfDATA: $(shelf_DATA) @$(NORMAL_INSTALL) @list='$(shelf_DATA)'; test -n "$(shelfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(shelfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(shelfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(shelfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(shelfdir)" || exit $$?; \ done uninstall-shelfDATA: @$(NORMAL_UNINSTALL) @list='$(shelf_DATA)'; test -n "$(shelfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(shelfdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(shelfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-shelfDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-shelfDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-shelfDATA install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-shelfDATA .PRECIOUS: Makefile # Generated DocBook/XML source files using a perl script @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@%.xml: $(top_builddir)/nls/%/Compose @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@ $(AM_V_GEN)$(PERL) $(srcdir)/compose-chart.pl \ @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@ --locale="$(@:.xml=)" --output="$@" $< @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@libX11-keys.xml: $(locales:%=%.xml) @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@ $(AM_V_GEN)$(PERL) $(srcdir)/compose-chart.pl \ @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@ --index --output="$@" $(locales) @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@%.html: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_HTML_FLAGS) xhtml $< @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TEXT_TRUE@@HAVE_XMLTO_TRUE@%.txt: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TEXT_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_TXT_FLAGS) txt $< @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@%.pdf: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FO_FLAGS) --with-fop pdf $< @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@%.ps: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FO_FLAGS) --with-fop ps $< @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@%.html.db: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(AM_V_GEN)$(XSLTPROC) $(XSLT_HTML_FLAGS) $< @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@%.pdf.db: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(AM_V_GEN)$(XSLTPROC) $(XSLT_PDF_FLAGS) $< # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: @ENABLE_SPECS_TRUE@@HAVE_PERL_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --stringparam root.filename "$(<:.xml=)" @ENABLE_SPECS_TRUE@@HlibX11-1.6.3/specs/i18n/compose/docbook-nl.am000064401431060000012000000100471247741723500207670ustar00alancstaff00002660200006# # Generate output formats for a single DocBook/XML with/without chapters # # This version of docbook.am handles cases where XML source is generated # and the html to be produced must be in chunks, one per chapter. # The generated source must be cleaned, installed but not distributed # # Variables set by the calling Makefile: # shelfdir: the location where the docs/specs are installed. Typically $(docdir) # docbook: the main DocBook/XML file, no chapters, appendix or image files # chapters: all files pulled in by an XInclude statement and images. # # # This makefile is intended for Users Documentation and Functional Specifications. # Do not use for Developer Documentation which is not installed and does not require olink. # Refer to http://www.x.org/releases/X11R7.6/doc/xorg-docs/ReleaseNotes.html#id2584393 # for an explanation on documents classification. # # DocBook/XML generated output formats to be installed shelf_DATA = $(chapters) $(docbook) # Generated DocBook/XML source files using a perl script %.xml: $(top_builddir)/nls/%/Compose $(AM_V_GEN)$(PERL) $(srcdir)/compose-chart.pl \ --locale="$(@:.xml=)" --output="$@" $< libX11-keys.xml: $(locales:%=%.xml) $(AM_V_GEN)$(PERL) $(srcdir)/compose-chart.pl \ --index --output="$@" $(locales) if HAVE_XMLTO if HAVE_STYLESHEETS XMLTO_SEARCHPATH_FLAGS = \ --searchpath "$(XORG_SGML_PATH)/X11" \ --searchpath "$(abs_top_builddir)" XMLTO_HTML_OLINK_FLAGS = \ --stringparam target.database.document=$(XORG_SGML_PATH)/X11/dbs/masterdb.html.xml \ --stringparam current.docid="$(<:.xml=)" XMLTO_HTML_STYLESHEET_FLAGS = -x $(STYLESHEET_SRCDIR)/xorg-chunk.xsl XMLTO_TXT_STYLESHEET_FLAGS = -x $(STYLESHEET_SRCDIR)/xorg-xhtml.xsl XMLTO_HTML_CHUNKING_FLAGS = \ --stringparam root.filename="$(<:.xml=)" XMLTO_HTML_FLAGS = \ $(XMLTO_SEARCHPATH_FLAGS) \ $(XMLTO_HTML_STYLESHEET_FLAGS) \ $(XMLTO_HTML_CHUNKING_FLAGS) \ $(XMLTO_HTML_OLINK_FLAGS) XMLTO_TXT_FLAGS = \ $(XMLTO_SEARCHPATH_FLAGS) \ $(XMLTO_TXT_STYLESHEET_FLAGS) \ $(XMLTO_HTML_OLINK_FLAGS) shelf_DATA += $(docbook:.xml=.html) $(chapters:.xml=.html) %.html: %.xml $(chapters) $(AM_V_GEN)$(XMLTO) $(XMLTO_HTML_FLAGS) xhtml $< if HAVE_XMLTO_TEXT shelf_DATA += $(docbook:.xml=.txt) %.txt: %.xml $(chapters) $(AM_V_GEN)$(XMLTO) $(XMLTO_TXT_FLAGS) txt $< endif HAVE_XMLTO_TEXT if HAVE_FOP XMLTO_FO_IMAGEPATH_FLAGS = --stringparam img.src.path=$(abs_builddir)/ XMLTO_FO_STYLESHEET_FLAGS = -x $(STYLESHEET_SRCDIR)/xorg-fo.xsl XMLTO_PDF_OLINK_FLAGS = \ --stringparam target.database.document=$(XORG_SGML_PATH)/X11/dbs/masterdb.pdf.xml \ --stringparam current.docid="$(<:.xml=)" XMLTO_FO_FLAGS = \ $(XMLTO_SEARCHPATH_FLAGS) \ $(XMLTO_FO_STYLESHEET_FLAGS) \ $(XMLTO_FO_IMAGEPATH_FLAGS) \ $(XMLTO_PDF_OLINK_FLAGS) shelf_DATA += $(docbook:.xml=.pdf) %.pdf: %.xml $(chapters) $(AM_V_GEN)$(XMLTO) $(XMLTO_FO_FLAGS) --with-fop pdf $< shelf_DATA += $(docbook:.xml=.ps) %.ps: %.xml $(chapters) $(AM_V_GEN)$(XMLTO) $(XMLTO_FO_FLAGS) --with-fop ps $< endif HAVE_FOP # Generate documents cross-reference target databases if HAVE_XSLTPROC XSLT_SEARCHPATH_FLAGS = \ --path "$(XORG_SGML_PATH)/X11" \ --path "$(abs_top_builddir)" XSLT_OLINK_FLAGS = \ --stringparam targets.filename "$@" \ --stringparam collect.xref.targets "only" XSLT_FO_OLINK_FLAGS = \ --stringparam olink.base.uri "$(@:.db=)" XSLT_HTML_CHUNKING_FLAGS = \ --stringparam root.filename "$(<:.xml=)" XSLT_HTML_FLAGS = \ $(XSLT_SEARCHPATH_FLAGS) \ $(XSLT_HTML_CHUNKING_FLAGS) \ $(XSLT_OLINK_FLAGS) \ --nonet --xinclude \ $(STYLESHEET_SRCDIR)/xorg-chunk.xsl XSLT_PDF_FLAGS = \ $(XSLT_SEARCHPATH_FLAGS) \ $(XSLT_OLINK_FLAGS) \ $(XSLT_FO_OLINK_FLAGS) \ --nonet --xinclude \ $(STYLESHEET_SRCDIR)/xorg-fo.xsl shelf_DATA += $(docbook:.xml=.html.db) %.html.db: %.xml $(chapters) $(AM_V_GEN)$(XSLTPROC) $(XSLT_HTML_FLAGS) $< shelf_DATA += $(docbook:.xml=.pdf.db) %.pdf.db: %.xml $(chapters) $(AM_V_GEN)$(XSLTPROC) $(XSLT_PDF_FLAGS) $< endif HAVE_XSLTPROC endif HAVE_STYLESHEETS endif HAVE_XMLTO CLEANFILES = $(shelf_DATA) es. # # # This makefile is intended for Users Documentation and Functional Specifications. # Do not use for Developer Documentation which is not installed and does not require olink. # Refer to http://www.x.org/releases/X11R7.6/doc/xorg-docs/ReleaseNotes.html#id2584393 # for an explanation on documents classification. # # DocBook/XML generated output formats to be installed shelf_DATA = $(chapters) $(docbook) # Generated DocBook/XML source files using a perl script libX11-1.6.3/specs/XKB/acknowledgement.xml000064401431060000012000000040061247741723500205100ustar00alancstaff00002660200006 Acknowledgement This document is the result of a great deal of hard work by a great many people. Without Erik Fortune’s work as Architect of the X Keyboard Extension and the longtime support of Silicon Graphics Inc. there would not be a keyboard extension. We gratefully thank Will Walker and George Sachs for their help and expertise in providing some of the content for this document, and Digital Equipment Corporation and Hewlett-Packard for allowing them to participate in this project, and we are deeply indebted to IBM for providing the funding to complete this library specification. Most of all, we thank Gary Aitken and Amber J. Benson for their long hours and late nights as ultimate authors of this specification, and for serving as authors, document editors, and XKB protocol and implementation reviewers. Their commitment to accuracy and completeness, their attention to detail, their keen insight, and their good natures when working under tremendous pressure are in some measure responsible not only for the quality of this document, but for the quality of the Keyboard extension itself. Matt Landau Manager, X Window System X Consortium Inc. X Version 11, Release 7 addendum This document is made available to you in modern formats such as HTML and PDF thanks to the efforts of Matt Dew, who converted the original troff sources to DocBook/XML and edited them into shape; Fernando Carrijo, who converted the images to SVG format; Gaetan Nadon, who set up the formatting machinery in the libX11 builds and performed further editing of the DocBook markup; and Alan Coopersmith, who converted the DocBook tags to semantic markup and cleaned up other formatting issues. libX11-1.6.3/specs/XKB/ch15.xml000064401431060000012000002156161247741723500161140ustar00alancstaff00002660200006 Xkb Client Keyboard Mapping client map mapclient The Xkb client map for a keyboard is the collection of information a client needs to interpret key events from the keyboard. It contains a global list of key types and an array of key symbol maps, each of which describes the symbols bound to a key and the rules to be used to interpret those symbols. Figure 15.1 shows the relationships between elements in the client map:
Xkb Client Map
The XkbClientMapRec Structure XkbClientMapRec The map field of the complete Xkb keyboard description (see section 6.1) is a pointer to the Xkb client map, which is of type XkbClientMapRec: typedef struct { /* Client Map */ unsigned char size_types; /* # occupied entries in types */ unsigned char num_types; /* # entries in types */ XkbKeyTypePtr types; /* vector of key types used by this keymap */ unsigned short size_syms; /* length of the syms array */ unsigned short num_syms; /* # entries in syms */ KeySym * syms; /* linear 2d tables of keysyms, 1 per key */ XkbSymMapPtr key_sym_map; /* 1 per keycode, maps keycode to syms */ unsigned char * modmap; /* 1 per keycode, real mods bound to key */ } XkbClientMapRec, *XkbClientMapPtr; The following sections describe each of the elements of the XkbClientMapRec structure in more detail. Key Types XkbKeyTypeRec XkbKTMapEntryRec Key types are used to determine the shift level of a key given the current state of the keyboard. The set of all possible key types for the Xkb keyboard description are held in the types field of the client map, whose total size is stored in size_types, and whose total number of valid entries is stored in num_types. Key types are defined using the following structures: typedef struct { /* Key Type */ XkbModsRec mods; /* modifiers used to compute shift level */ unsigned char num_levels; /* total # shift levels, do not modify directly */ unsigned char map_count; /* # entries in map, preserve (if non-NULL) */ XkbKTMapEntryPtr map; /* vector of modifiers for each shift level */ XkbModsPtr preserve; /* mods to preserve for corresponding map entry */ Atom name; /* name of key type */ Atom * level_names; /* array of names of each shift level */ } XkbKeyTypeRec, *XkbKeyTypePtr; typedef struct { /* Modifiers for a key type */ Bool active; /* True ⇒ entry active when determining shift level */ unsigned char level; /* shift level if modifiers match mods */ XkbModsRec mods; /* mods needed for this level to be selected */ } XkbKTMapEntryRec, *XkbKTMapEntryPtr; The mods field of a key type is an XkbModsRec (see section 7.2) specifying the modifiers the key type uses when calculating the shift level, and can be composed of both the core modifiers and virtual modifiers. To set the modifiers associated with a key type, modify the real_mods and vmods fields of the mods XkbModsRec accordingly. The mask field of the XkbModsRec is reserved for use by Xkb and is calculated from the real_mods and vmods fields. The num_levels field holds the total number of shift levels for the key type. Xkb uses num_levels to ensure the array of symbols bound to a key is large enough. Do not modify num_levels directly to change the number if shift levels for a key type. Instead, use XkbResizeKeyType (see section 15.2.3). The map field is a vector of XkbKTMapEntryRec structures, with map_count entries, that specify the modifier combinations for each possible shift level. Each map entry contains an active field, a mods field, and a level field. The active field determines whether the modifier combination listed in the mods field should be considered when determining shift level. If active is False, this map entry is ignored. If active is True, the level field of the map entry specifies the shift level to use when the current modifier combination matches the combination specified in the mods field of the map entry. Any combination of modifiers not explicitly listed somewhere in the map yields shift level one. In addition, map entries specifying unbound virtual modifiers are not considered. Any modifiers specified in mods are normally consumed by XkbTranslateKeyCode (see section 12.1.3). For those rare occasions a modifier should be considered despite having been used to look up a symbol, key types include an optional preserve field. If a preserve member of a key type is not NULL, it represents a list of modifiers where each entry corresponds directly to one of the key type’s map. Each entry lists the modifiers that should not be consumed if the matching map entry is used to determine shift level. Each shift level has a name and these names are held in the level_names array, whose length is num_levels. The type itself also has a name, which is held in the name field. For example, consider how the server handles the following possible symbolic description of a possible key type (note that the format used to specify keyboard mappings in the server database is not specified by the Xkb extension, although this format is one possible example): Example Key Type Symbolic Description Key Type Data Structure type "ALPHATHREE" { Xkb->map->types[i].name modifiers = Shift+Lock+LevelThree; Xkb->map->types[i].mods map[None]= Level1; Xkb->map->types[i].map[0] map[Lock]= Level1; Xkb->map->types[i].map[1] map[Shift]= Level2; Xkb->map->types[i].map[2] map[LevelThree]= Level3; Xkb->map->types[i].map[3] map[Shift+LevelThree]= Level3; Xkb->map->types[i].map[4] preserve[None]= None; Xkb->map->types[i].preserve[0] preserve[Lock]= Lock; Xkb->map->types[i].preserve[1] preserve[Shift]= None; Xkb->map->types[i].preserve[2] preserve[LevelThree]= None; Xkb->map->types[i].preserve[3] preserve[Shift+Level3]= None; Xkb->map->types[i].preserve[4] level_name[Level1]= "Base"; Xkb->map->types[i].level_names[0] level_name[Level2]= "Caps"; Xkb->map->types[i].level_names[1] level_name[Level3]= "Level3"; Xkb->map->types[i].level_names[2] };
The name of the example key type is "ALPHATHREE," and the modifiers it pays attention to are Shift, Lock, and the virtual modifier LevelThree. There are three shift levels. The name of shift level one is "Base," the name of shift level two is "Caps," and the name of shift level three is "Level3." Given the combination of the map and preserve specifications, there are five map entries. The first map entry specifies that shift level one is to be used if no modifiers are set. The second entry specifies the Lock modifier alone also yields shift level one. The third entry specifies the Shift modifier alone yields shift level two. The fourth and fifth entries specify that the virtual LevelThree modifier alone, or in combination with the Shift modifier, yields shift level three. Shift level three can be reached only if the virtual modifier LevelThree is bound to a real modifier (see section 16.4). If LevelThree is not bound to a real modifier, the map entries associated with it are ignored. Because the Lock modifier is to be preserved for further event processing, the preserve list is not NULL and parallels the map list. All preserve entries, except for the one corresponding to the map entry that specifies the Lock modifier, do not list any modifiers. For the map entry that specifies the Lock modifier, the corresponding preserve list entry lists the Lock modifier, meaning do not consume the Lock modifier. In this particular case, the preserved modifier is passed to Xlib translation functions and causes them to notice that the Lock modifier is set; consequently, the Xlib functions apply the appropriate capitalization rules to the symbol. Because this preserve entry is set only for a modifier that yields shift level one, the capitalization occurs only for level-one symbols. The Canonical Key Types Xkb allows up to XkbMaxKeyTypes (255) key types to be defined, but requires at least XkbNumRequiredTypes (4) predefined types to be in a key map. These predefined key types are referred to as the canonical key types and describe the types of keys available on most keyboards. The definitions for the canonical key types are held in the first XkbNumRequiredTypes entries of the types field of the client map and are indexed using the following constants: XkbOneLevelIndex XkbTwoLevelIndex XkbAlphabeticIndex XkbKeypadIndex ONE_LEVEL The ONE_LEVEL key type describes groups that have only one symbol. The default ONE_LEVEL key type has no map entries and does not pay attention to any modifiers. A symbolic representation of this key type could look like the following: type "ONE_LEVEL" { modifiers = None; map[None]= Level1; level_name[Level1]= "Any"; }; The description of the ONE_LEVEL key type is stored in the types [ XkbOneLevelIndex ] entry of the client key map. TWO_LEVEL The TWO_LEVEL key type describes groups that consist of two symbols but are neither alphabetic nor numeric keypad keys. The default TWO_LEVEL type uses only the Shift modifier. It returns shift level two if Shift is set, and level one if it is not. A symbolic representation of this key type could look like the following: type "TWO_LEVEL" { modifiers = Shift; map[Shift]= Level2; level_name[Level1]= "Base"; level_name[Level2]= "Shift"; }; The description of the TWO_LEVEL key type is stored in the types [ XkbTwoLevelIndex ] entry of the client key map. ALPHABETIC The ALPHABETIC key type describes groups consisting of two symbols: the lowercase form of a symbol followed by the uppercase form of the same symbol. The default ALPHABETIC type implements locale-sensitive Shift cancels CapsLock behavior using both the Shift and Lock modifiers as follows: If Shift and Lock are both set, the default ALPHABETIC type yields level one. If Shift alone is set, it yields level two. If Lock alone is set, it yields level one, but preserves the Lock modifier so Xlib notices and applies the appropriate capitalization rules. The Xlib functions are locale-sensitive and apply different capitalization rules for different locales. If neither Shift nor Lock is set, it yields level one. A symbolic representation of this key type could look like the following: type "ALPHABETIC" { modifiers = Shift+Lock; map[Shift]= Level2; preserve[Lock]= Lock; level_name[Level1]= "Base"; level_name[Level2]= "Caps"; }; The description of the ALPHABETIC key type is stored in the types [ XkbAlphabeticIndex ] entry of the client key map. KEYPAD The KEYPAD key type describes groups that consist of two symbols, at least one of which is a numeric keypad symbol. The numeric keypad symbol is assumed to reside at level two. The default KEYPAD key type implements Shift cancels NumLock behavior using the Shift modifier and the real modifier bound to the virtual modifier named NumLock, known as the NumLock modifier, as follows: If Shift and NumLock are both set, the default KEYPAD type yields level one. If Shift alone is set, it yields level two. If NumLock alone is set, it yields level two. If neither Shift nor NumLock is set, it yields level one. A symbolic representation of this key type could look like the following: type "KEYPAD" { modifiers = Shift+NumLock; map[None]= Level1; map[Shift]= Level2; map[NumLock]= Level2; map[Shift+NumLock]= Level1; level_name[Level1]= "Base"; level_name[Level2]= "Caps"; }; The description of the KEYPAD key type is stored in the types [ XkbKeypadIndex ] entry of the client key map. Initializing the Canonical Key Types in a New Client Map To set the definitions of the canonical key types in a client map to their default values, use XkbInitCanonicalKeyTypes. XkbInitCanonicalKeyTypes Status XkbInitCanonicalKeyTypes XkbDescPtr xkb unsigned int which int keypadVMod xkb keyboard description containing client map to initialize which mask of types to initialize keypadVMod index of NumLock virtual modifier XkbInitCanonicalKeyTypes initializes the first XkbNumRequiredTypes key types of the keyboard specified by the xkb parameter to their default values. The which parameter specifies what canonical key types to initialize and is a bitwise inclusive OR of the following masks: XkbOneLevelMask, XkbTwoLevelMask, XkbAlphabeticMask, and XkbKeypadMask. Only those canonical types specified by the which mask are initialized. If XkbKeypadMask is set in the which parameter, XkbInitCanonicalKeyTypes looks up the NumLock named virtual modifier to determine which virtual modifier to use when initializing the KEYPAD key type. If the NumLock virtual modifier does not exist, XkbInitCanonicalKeyTypes creates it. XkbInitCanonicalKeyTypes normally returns Success. It returns BadAccess if the Xkb extension has not been properly initialized, and BadAccess if the xkb parameter is not valid. Getting Key Types from the Server To obtain the list of available key types in the server’s keyboard mapping, use XkbGetKeyTypes. XkbGetKeyTypes Status XkbGetKeyTypes Display *dpy unsigned int first unsigned int num XkbDescPtr xkb dpy connection to X server first index to first type to get, 0 ⇒ 1st type num number of key types to be returned xkb keyboard description containing client map to update XkbGetKeyTypes is used to obtain descriptions of the key types themselves, not the key types bound to individual keys. To obtain the key types bound to an individual key, refer to the key_sym_map field of the client map (see section 15.3.1). XkbGetKeyTypes queries the server for the desired types, waits for a reply, and returns the desired types in the xkb->map->types. If successful, it returns Success. XkbGetKeyTypes returns BadAccess if the Xkb extension has not been properly initialized and BadValue if the combination of first and num results in numbers out of valid range. Changing the Number of Levels in a Key Type To change the number of levels in a key type, use XkbResizeKeyType. XkbResizeKeyType Status XkbResizeKeyType XkbDescPtr xkb int type_ndx int map_count Bool want_preserve int new_num_lvls xkb keyboard description containing client map to update type_ndx index in xkb->map->types of type to change map_count total # of map entries needed for the type want_preserve True ⇒ list of preserved modifiers is necessary new_num_lvls new max # of levels for type XkbResizeKeyType changes the type specified by xkb->map->types [ type_ndx ], and reallocates the symbols and actions bound to all keys that use the type, if necessary. XkbResizeKeyType updates only the local copy of the types in xkb; to update the server’s copy for the physical device, use XkbSetMap or XkbChangeMap after calling XkbResizeKeyType. The map_count parameter specifies the total number of map entries needed for the type, and can be zero or greater. If map_count is zero, XkbResizeKeyType frees the existing map and preserve entries for the type if they exist and sets them to NULL. The want_preserve parameter specifies whether a preserve list for the key should be created. If want_preserve is True, the preserve list with map_count entries is allocated or reallocated if it already exists. Otherwise, if want_preserve is False, the preserve field is freed if necessary and set to NULL. The new_num_lvls parameter specifies the new maximum number of shift levels for the type and is used to calculate and resize the symbols and actions bound to all keys that use the type. If type_ndx does not specify a legal type, new_num_lvls is less than 1, or the map_count is less than zero, XkbResizeKeyType returns BadValue. If XkbResizeKeyType encounters any problems with allocation, it returns BadAlloc. Otherwise, it returns Success. Copying Key Types Use XkbCopyKeyType and XkbCopyKeyTypes to copy one or more XkbKeyTypeRec structures. XkbCopyKeyType Status XkbCopyKeyType XkbKeyTypePtr from XkbKeyTypePtr into from pointer to XkbKeyTypeRec to be copied into pointer to XkbKeyTypeRec to be changed XkbCopyKeyType copies the key type specified by from to the key type specified by into. Both must point to legal XkbKeyTypeRec structures. Xkb assumes from and into point to different places. As a result, overlaps can be fatal. XkbCopyKeyType frees any existing map, preserve, and level_names in into prior to copying. If any allocation errors occur while copying from to into, XkbCopyKeyType returns BadAlloc. Otherwise, XkbCopyKeyType copies from to into and returns Success. XkbCopyKeyTypes Status XkbCopyKeyTypes XkbKeyTypePtr from XkbKeyTypePtr into int num_types from pointer to array of XkbKeyTypeRecs to copy into pointer to array of XkbKeyTypeRecs to change num_types number of types to copy XkbCopyKeyTypes copies num_types XkbKeyTypeRec structures from the array specified by from into the array specified by into. It is intended for copying between, rather than within, keyboard descriptions, so it doesn’t check for overlaps. The same rules that apply to the from and into parameters in XkbCopyKeyType apply to each entry of the from and into arrays of XkbCopyKeyTypes. If any allocation errors occur while copying from to into, XkbCopyKeyTypes returns BadAlloc. Otherwise, XkbCopyKeyTypes copies from to into and returns Success.
Key Symbol Map XkbSymMapRec The entire list of key symbols for the keyboard mapping is held in the syms field of the client map. Whereas the core keyboard mapping is a two-dimensional array of KeySyms whose rows are indexed by keycode, the syms field of Xkb is a linear list of KeySyms that needs to be indexed uniquely for each key. This section describes the key symbol map and the methods for determining the symbols bound to a key. The reason the syms field is a linear list of KeySyms is to reduce the memory consumption associated with a keymap; because Xkb allows individual keys to have multiple shift levels and a different number of groups per key, a single two-dimensional array of KeySyms would potentially be very large and sparse. Instead, Xkb provides a small two-dimensional array of KeySyms for each key. To store all of these individual arrays, Xkb concatenates each array together in the syms field of the client map. In order to determine which KeySyms in the syms field are associated with each keycode, the client map contains an array of key symbol mappings, held in the key_sym_map field. The key_sym_map field is an array of XkbSymMapRec structures indexed by keycode. The key_sym_map array has min_key_code unused entries at the start to allow direct indexing using a keycode. All keycodes falling between the minimum and maximum legal keycodes, inclusive, have key_sym_map arrays, whether or not any key actually yields that code. The KeySymMapRec structure is defined as follows: #define XkbNumKbdGroups 4 #define XkbMaxKbdGroup (XkbNumKbdGroups-1) typedef struct { /* map to keysyms for a single keycode */ unsigned char kt_index[XkbNumKbdGroups]; /* key type index for each group */ unsigned char group_info; /* # of groups and out of range group handling */ unsigned char width; /* max # of shift levels for key */ unsigned short offset; /* index to keysym table in syms array */ } XkbSymMapRec, *XkbSymMapPtr; These fields are described in detail in the following sections. Per-Key Key Type Indices The kt_index array of the XkbSymMapRec structure contains the indices of the key types (see section 15.2) for each possible group of symbols associated with the key. To obtain the index of a key type or the pointer to a key type, Xkb provides the following macros, to access the key types: The array of key types is of fixed width and is large enough to hold key types for the maximum legal number of groups (XkbNumKbdGroups, currently four); if a key has fewer than XkbNumKbdGroups groups, the extra key types are reported but ignored. XkbKeyTypeIndex int XkbKeyTypeIndex XkbDescPtr xkb KeyCode keycode int group xkb Xkb description of interest keycode keycode of interest group group index XkbKeyTypeIndex computes an index into the types vector of the client map in xkb from the given keycode and group index. XkbKeyType XkbKeyTypePtr XkbKeyType XkbDescPtr xkb KeyCode keycode int group xkb Xkb description of interest keycode keycode of interest group group index XkbKeyType returns a pointer to the key type in the types vector of the client map in xkb corresponding to the given keycode and group index. Per-Key Group Information The group_info field of an XkbSymMapRec is an encoded value containing the number of groups of symbols bound to the key as well as the specification of the treatment of out-of-range groups. It is legal for a key to have zero groups, in which case it also has zero symbols and all events from that key yield NoSymbol. To obtain the number of groups of symbols bound to the key, use XkbKeyNumGroups. To change the number of groups bound to a key, use XkbChangeTypesOfKey (see section 15.3.6). To obtain a mask that determines the treatment of out-of-range groups, use XkbKeyGroupInfo and XkbOutOfRangeGroupInfo. The keyboard controls (see ) contain a groups_wrap field specifying the handling of illegal groups on a global basis. That is, when the user performs an action causing the effective group to go out of the legal range, the groups_wrap field specifies how to normalize the effective keyboard group to a group that is legal for the keyboard as a whole, but there is no guarantee that the normalized group will be within the range of legal groups for any individual key. The per-key group_info field specifies how a key treats a legal effective group if the key does not have a type specified for the group of concern. For example, the Enter key usually has just one group defined. If the user performs an action causing the global keyboard group to change to Group2, the group_info field for the Enter key describes how to handle this situation. Out-of-range groups for individual keys are mapped to a legal group using the same options as are used for the overall keyboard group. The particular type of mapping used is controlled by the bits set in the group_info flag, as shown in Table 15.2. See section 10.7.1 for more details on the normalization methods in this table. group_info Range Normalization Bits set in group_info Normalization method XkbRedirectIntoRange XkbRedirectIntoRange XkbClampIntoRange XkbClampIntoRange none of the above XkbWrapIntoRange
Xkb provides the following macros to access group information: XkbKeyNumGroups int XkbKeyNumGroups XkbDescPtr xkb KeyCode keycode xkb Xkb description of interest keycode keycode of interest XkbKeyNumGroups returns the number of groups of symbols bound to the key corresponding to keycode. XkbKeyGroupInfo unsigned char XkbKeyGroupInfo XkbDescPtr xkb KeyCode keycode xkb Xkb description of interest keycode keycode of interest XkbKeyGroupInfo returns the group_info field from the XkbSymMapRec structure associated with the key corresponding to keycode. XkbOutOfRangeGroupInfo unsigned char XkbOutOfRangeGroupInfo unsigned char grp_inf grp_inf group_info field of XkbSymMapRec XkbOutOfRangeGroupInfo returns only the out-of-range processing information from the group_info field of an XkbSymMapRec structure. XkbOutOfRangeGroupNumber unsigned char XkbOutOfRangeGroupNumber unsigned char grp_inf grp_inf group_info field of XkbSymMapRec XkbOutOfRangeGroupNumber returns the out-of-range group number, represented as a group index, from the group_info field of an XkbSymMapRec structure.
Key Width The maximum number of shift levels for a type is also referred to as the width of a key type. The width field of the key_sym_map entry for a key contains the width of the widest type associated with the key. The width field cannot be explicitly changed; it is updated automatically whenever the symbols or set of types bound to a key are changed. Offset in to the Symbol Map The key width and number of groups associated with a key are used to form a small two-dimensional array of KeySyms for a key. This array may be different sizes for different keys. The array for a single key is stored as a linear list, in row-major order. The arrays for all of the keys are stored in the syms field of the client map. There is one row for each group associated with a key and one column for each level. The index corresponding to a given group and shift level is computed as: idx = group_index * key_width + shift_level The offset field of the key_sym_map entry for a key is used to access the beginning of the array. Xkb provides the following macros for accessing the width and offset for individual keys, as well as macros for accessing the two-dimensional array of symbols bound to the key: XkbKeyGroupsWidth int XkbKeyGroupsWidth XkbDescPtr xkb KeyCode keycode xkb Xkb description of interest keycode keycode of interest XkbKeyGroupsWidth computes the maximum width associated with the key corresponding to keycode. XkbKeyGroupWidth int XkbKeyGroupWidth XkbDescPtr xkb KeyCode keycode int grp xkb Xkb description of interest keycode keycode of interest grp group of interest XkbKeyGroupWidth computes the width of the type associated with the group grp for the key corresponding to keycode. XkbKeySymsOffset int XkbKeySymsOffset XkbDescPtr xkb KeyCode keycode xkb Xkb description of interest keycode keycode of interest XkbKeySymsOffset returns the offset of the two-dimensional array of keysyms for the key corresponding to keycode. XkbKeyNumSyms int XkbKeyNumSyms XkbDescPtr xkb KeyCode keycode xkb Xkb description of interest keycode keycode of interest XkbKeyNumSyms returns the total number of keysyms for the key corresponding to keycode. XkbKeySymsPtr KeySym *XkbKeySymsPtr XkbDescPtr xkb KeyCode keycode xkb Xkb description of interest keycode keycode of interest XkbKeySymsPtr returns the pointer to the two-dimensional array of keysyms for the key corresponding to keycode. XkbKeySymEntry KeySym XkbKeySymEntry XkbDescPtr xkb KeyCode keycode int shift int grp xkb Xkb description of interest keycode keycode of interest shift shift level of interest grp group of interest XkbKeySymEntry returns the KeySym corresponding to shift level shift and group grp from the two-dimensional array of keysyms for the key corresponding to keycode Getting the Symbol Map for Keys from the Server To obtain the symbols for a subset of the keys in a keyboard description, use XkbGetKeySyms: XkbGetKeySyms Status XkbGetKeySyms Display *dpy unsigned int first unsigned int num XkbDescPtr xkb dpy connection to X server first keycode of first key to get num number of keycodes for which syms desired xkb Xkb description to be updated XkbGetKeySyms sends a request to the server to obtain the set of keysyms bound to num keys starting with the key whose keycode is first. It waits for a reply and returns the keysyms in the map.syms field of xkb. If successful, XkbGetKeySyms returns Success. The xkb parameter must be a pointer to a valid Xkb keyboard description. If the client map in the xkb parameter has not been allocated, XkbGetKeySyms allocates and initializes it before obtaining the symbols. If a compatible version of Xkb is not available in the server or the Xkb extension has not been properly initialized, XkbGetKeySyms returns BadAccess. If num is less than 1 or greater than XkbMaxKeyCount, XkbGetKeySyms returns BadValue. If any allocation errors occur, XkbGetKeySyms returns BadAlloc. Changing the Number of Groups and Types Bound to a Key To change the number of groups and the types bound to a key, use XkbChangeTypesOfKey. XkbChangeTypesOfKey Status XkbChangeTypesOfKey XkbDescPtr xkb int key int n_groups unsigned int groups int *new_types_in XkbMapChangesPtr p_changes xkb keyboard description to be changed key keycode for key of interest n_groups new number of groups for key groups mask indicating groups to change new_types_in indices for new groups specified in groups p_changes notes changes made to xkb XkbChangeTypesOfKey reallocates the symbols and actions bound to the key, if necessary, and initializes any new symbols or actions to NoSymbol or NoAction, as appropriate. If the p_changes parameter is not NULL, XkbChangeTypesOfKey adds the XkbKeySymsMask to the changes field of p_changes and modifies the first_key_sym and num_key_syms fields of p_changes to include the key that was changed. See section 14.3.1 for more information on the XkbMapChangesPtr structure. If successful, XkbChangeTypesOfKey returns Success. The n_groups parameter specifies the new number of groups for the key. The groups parameter is a mask specifying the groups for which new types are supplied and is a bitwise inclusive OR of the following masks: XkbGroup1Mask, XkbGroup2Mask, XkbGroup3Mask, and XkbGroup4Mask. The new_types_in parameter is an integer array of length n_groups. Each entry represents the type to use for the associated group and is an index into xkb->map->types. The new_types_in array is indexed by group index; if n_groups is four and groups only has XkbGroup1Mask and XkbGroup3Mask set, new_types_in looks like this: new_types_in[0] = type for Group1 new_types_in[1] = ignored new_types_in[2] = type for Group3 new_types_in[3] = ignored For convenience, Xkb provides the following constants to use as indices to the groups: Group Index Constants Constant Name Value XkbGroup1Index 0 XkbGroup2Index 1 XkbGroup3Index 2 XkbGroup4Index 3
If the Xkb extension has not been properly initialized, XkbChangeTypesOfKey returns BadAccess. If the xkb parameter it not valid (that is, it is NULL or it does not contain a valid client map), XkbChangeTypesOfKey returns BadMatch. If the key is not a valid keycode, n_groups is greater than XkbNumKbdGroups, or the groups mask does not contain any of the valid group mask bits, XkbChangeTypesOfKey returns BadValue. If it is necessary to resize the key symbols or key actions arrays and any allocation errors occur, XkbChangeTypesOfKey returns BadAlloc.
Changing the Number of Symbols Bound to a Key To change the number of symbols bound to a key, use XkbResizeKeySyms. XkbResizeKeySyms KeySym *XkbResizeKeySyms XkbDescRec *xkb int key int needed xkb keyboard description to be changed key keycode for key to modify needed new number of keysyms required for key XkbResizeKeySyms reserves the space needed for needed keysyms and returns a pointer to the beginning of the new array that holds the keysyms. It adjusts the offset field of the key_sym_map entry for the key if necessary and can also change the syms, num_syms, and size_syms fields of xkb->map if it is necessary to reallocate the syms array. XkbResizeKeySyms does not modify either the width or number of groups associated with the key. If needed is greater than the current number of keysyms for the key, XkbResizeKeySyms initializes all new keysyms in the array to NoSymbol. Because the number of symbols needed by a key is normally computed as width * number of groups, and XkbResizeKeySyms does not modify either the width or number of groups for the key, a discrepancy exists upon return from XkbResizeKeySyms between the space allocated for the keysyms and the number required. The unused entries in the list of symbols returned by XkbResizeKeySyms are not preserved across future calls to any of the map editing functions, so you must update the key symbol mapping (which updates the width and number of groups for the key) before calling another allocator function. A call to XkbChangeTypesOfKey will update the mapping. If any allocation errors occur while resizing the number of symbols bound to the key, XkbResizeKeySyms returns NULL. A change to the number of symbols bound to a key should be accompanied by a change in the number of actions bound to a key. Refer to section 16.1.16 for more information on changing the number of actions bound to a key.
The Per-Key Modifier Map The modmap entry of the client map is an array, indexed by keycode, specifying the real modifiers bound to a key. Each entry is a mask composed of a bitwise inclusive OR of the legal real modifiers: ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask, Mod3Mask, Mod4Mask, and Mod5Mask. If a bit is set in a modmap entry, the corresponding key is bound to that modifier. Pressing or releasing the key bound to a modifier changes the modifier set and unset state. The particular manner in which the modifier set and unset state changes is determined by the behavior and actions assigned to the key (see ). Getting the Per-Key Modifier Map from the Server To update the modifier map for one or more of the keys in a keyboard description, use XkbGetKeyModifierMap. XkbGetKeyModifierMap Status XkbGetKeyModifierMap Display *dpy unsigned int first unsigned int num XkbDescPtr xkb dpy connection to X server first keycode of first key to get num number of keys for which information is desired xkb keyboard description to update XkbGetKeyModifierMap sends a request to the server for the modifier mappings for num keys starting with the key whose keycode is first. It waits for a reply and places the results in the xkb->map->modmap array. If successful, XkbGetKeyModifierMap returns Success. If the map component of the xkb parameter has not been allocated, XkbGetKeyModifierMap allocates and initializes it. If a compatible version of Xkb is not available in the server or the Xkb extension has not been properly initialized, XkbGetKeySyms returns BadAccess. If any allocation errors occur while obtaining the modifier map, XkbGetKeyModifierMap returns BadAlloc.
If successful, XkbChangeTypesOfKey returns Success. The Interpreting Key Events Xkb provides functions to help developers interpret key events without having to directly interpret Xkb data structures. Xkb also modifies the behavior of several core X library functions. Effects of Xkb on the Core X Library When support for Xkb is built into the X library, the XOpenDisplay function looks for a compatible version of Xkb on the server. If it finds a compatible version, it initializes the extension and enables implicit support for Xkb in a number of X library functions. This makes it possible for clients to take advantage of nearly all Xkb features without having to be rewritten or even recompiled, if they are built with shared libraries. This implicit support is invisible to most clients, but it can have side effects, so the extension includes ways to control or disable it. Effects of Xkb on Event State Because XOpenDisplay initializes Xkb, some events contain an Xkb description of the keyboard state instead of that normally used by the core protocol. See section 17.1.1 for more information about the differences between Xkb keyboard state and that reported by the core protocol. Effects of Xkb on MappingNotify Events eventsMappingNotify When Xkb is missing or disabled, the X library tracks changes to the keyboard mapping using MappingNotify events. Whenever the keyboard mapping is changed, the server sends all clients a MappingNotify event to report the change. When a client receives a MappingNotify event, it is supposed to call XRefreshKeyboardMapping to update the keyboard description used internally by the X library. The X Keyboard Extension uses XkbMapNotify and XkbNewKeyboardNotify events to track changes to the keyboard mapping. When an Xkb-aware client receives either event, it should call XkbRefreshKeyboardMapping to update the keyboard description used internally by the X library. To avoid duplicate events, the X server does not send core protocol MappingNotify events to a client that has selected for XkbMapNotify events. The implicit support for Xkb selects for XkbMapNotify events. This means that clients that do not explicitly use Xkb but that are using a version of the X library that has implicit support for Xkb do not receive MappingNotify events over the wire. Clients that were not written with Xkb in mind do not recognize or properly handle the new Xkb events, so the implicit support converts them to MappingNotify events that report approximately the same information, unless the client has explicitly selected for the Xkb version of the event. An Xkb-capable X server does not send events from keys that fall outside the legal range of keycodes expected by that client. Once the server sends a client an XkbNewKeyboardNotify event, it reports events from all keys because it assumes that any client that has received an XkbNewKeyboardNotify event expects key events from the new range of keycodes. The implicit support for Xkb asks for XkbNewKeyboardNotify events, so the range of keycodes reported to the client might vary without the client’s knowledge. Most clients don’t really care about the range of legal keycodes, but some clients maintain information about each key and might have problems with events that come from unexpected keys. Such clients can set the XkbLC_IgnoreNewKeyboards library control (see section 11.3.1) to prevent the implicit support from requesting notification of changes to the legal range of keycodes. X Library Functions Affected by Xkb The following X library functions are modified by Xkb: XKeycodeToKeysym XKeysymToKeycode XLookupKeysym XLookupString XRefreshKeyboardMapping XRebindKeysym The implicit support for Xkb replaces a number of X library functions with versions that understand and use the X Keyboard Extension. In most cases, the semantics of the new versions are identical to those of the old, but there are occasional visible differences. This section lists all of the functions that are affected and the differences in behavior, if any, that are visible to clients. The XKeycodeToKeysym XKeycodeToKeysym function reports the keysym associated with a particular index for a single key. The index specifies a column of symbols in the core keyboard mapping (that is, as reported by the core protocol GetKeyboardMapping request). The order of the symbols in the core mapping does not necessarily correspond to the order of the symbols used by Xkb; section 17.1.3 describes the differences. The XKeysymToKeycode XKeysymToKeycode function reports a keycode to which a particular keysym is bound. When Xkb is missing or disabled, this function looks in each column of the core keyboard mapping in turn and returns the lowest numbered key that matches in the lowest numbered group. When Xkb is present, this function uses the Xkb ordering for symbols instead. The XLookupKeysym XLookupKeysym function reports the symbol in a specific column of the key associated with an event. Whether or not Xkb is present, the column specifies an index into the core symbol mapping. The XLookupString XLookupString function reports the symbol and string associated with a key event, taking into account the keycode and keyboard state as reported in the event. When Xkb is disabled or missing, XLookupString uses the rules specified by the core protocol and reports only ISO Latin-1 characters. When Xkb is present, XLookupString uses the explicit keyboard group, key types, and rules specified by Xkb. When Xkb is present, XLookupString is allowed, but not required, to return strings in character sets other than ISO Latin-1, depending on the current locale. If any key bindings are defined, XLookupString does not use any consumed modifiers (see section 11.1.2 and section 15.2) to determine matching bindings. The XRefreshKeyboardMapping XRefreshKeyboardMapping function updates the X library’s internal representation of the keyboard to reflect changes reported via MappingNotify events. When Xkb is missing or disabled, this function reloads the entire modifier map or keyboard mapping. When Xkb is present, the implicit Xkb support keeps track of the changed components reported by each XkbMapNotify event and updates only those pieces of the keyboard description that have changed. If the implicit support has not noted any keyboard mapping changes, XRefreshKeyboardMapping updates the entire keyboard description. The XRebindKeysym XRebindKeysym function associates a string with a keysym and a set of modifiers. Xkb does not directly change this function, but it does affect the way that the state reported in the event is compared to the state specified to XRebindKeysym. When Xkb is missing or disabled, XLookupString returns the specified string if the modifiers in the event exactly match the modifiers from this call. When Xkb is present, any modifiers used to determine the keysym are consumed and are not used to look up the string. Xkb Event and Keymap Functions To find the keysym bound to a particular key at a specified group and shift level, use XkbKeycodeToKeysym. XkbKeycodeToKeysym KeySym XkbKeycodeToKeysym Display *dpy KeyCode kc unsigned int group unsigned int level dpy connection to X server kc key of interest group group of interest level shift level of interest XkbKeycodeToKeysym returns the keysym bound to a particular group and shift level for a particular key on the core keyboard. If kc is not a legal keycode for the core keyboard, or if group or level are out of range for the specified key, XkbKeycodeToKeysym returns NoSymbol. To find the set of modifiers bound to a particular keysym on the core keyboard, use XkbKeysymToModifiers. XkbKeysymToModifiers unsigned int XkbKeysymToModifiers Display *dpy KeySym ks dpy connection to X server ks keysym of interest XkbKeysymToModifiers finds the set of modifiers currently bound to the keysym ks on the core keyboard. The value returned is the mask of modifiers bound to the keysym ks. If no modifiers are bound to the keysym, XkbKeysymToModifiers returns zero; otherwise, it returns the inclusive OR of zero or more of the following: ShiftMask, ControlMask, LockMask, Mod1Mask, Mod2Mask, Mod3Mask, Mod4Mask, and Mod5Mask. Use XkbLookupKeySym to find the symbol associated with a key for a particular state. XkbLookupKeySym Bool XkbLookupKeySym Display *dpy KeyCode key unsigned int state unsigned int *mods_rtrn KeySym *sym_rtrn dpy connection to X server key key for which symbols are to be found state state for which symbol should be found mods_rtrn backfilled with consumed modifiers sym_rtrn backfilled with symbol associated with key + state XkbLookupKeySym is the equivalent of the core XLookupKeySym function. For the core keyboard, given a keycode key and an Xkb state state, XkbLookupKeySym returns the symbol associated with the key in sym_rtrn and the list of modifiers that should still be applied in mods_rtrn. The state parameter is the state from a KeyPress or KeyRelease event. XkbLookupKeySym returns True if it succeeds. Use XkbLookupKeyBinding to find the string bound to a key by XRebindKeysym. XkbLookupKeyBinding is the equivalent of the core XLookupString function. XkbLookupKeyBinding int XkbLookupKeyBinding Display *dpy KeySym sym unsigned int state char *buf int nbytes int *extra_rtrn dpy connection to server sym symbol to be looked up state state for which string is to be looked up buf buffer into which returned string is written nbytes size of buffer in bytes extra_rtrn backfilled with number bytes overflow XRebindKeysym binds an ASCII string to a specified keysym, so that the string and keysym are returned when the key is pressed and a specified list of modifiers are also being held down. XkbLookupKeyBinding returns in buf the string associated with the keysym sym and modifier state state. buf is NULL terminated unless there’s an overflow. If the string returned is larger than nbytes, a count of bytes that does not fit into the buffer is returned in extra_rtrn. XkbTranslateKeySym returns the number of bytes that it placed into buf. To find the string and symbol associated with a keysym for a given keyboard state, use XkbTranslateKeySym. XkbTranslateKeySym int XkbTranslateKeySym Display *dpy KeySym *sym_inout unsigned int mods char *buf int nbytes int *extra_rtrn dpy connection to X server sym_inout symbol to be translated; result of translation mods modifiers to apply to sym_inout buf buffer into which returned string is written nbytes size of buffer in bytes extra_rtrn number of bytes overflow XkbTranslateKeySym applies the transformations specified in mods to the symbol specified by sym_inout. It returns in buf the string, if any, associated with the keysym for the current locale. If the transformations in mods changes the keysym, sym_inout is updated accordingly. If the string returned is larger than nbytes, a count of bytes that does not fit into the buffer is returned in extra_rtrn. XkbTranslateKeySym returns the number of bytes it placed into buf. To update the keyboard description that is internal to the X library, use XkbRefreshKeyboardMapping. XkbRefreshKeyboardMapping Status XkbRefreshKeyboardMapping XkbMapNotifyEvent *event event event initiating remapping XkbRefreshKeyboardMapping is the Xkb equivalent of the core XRefreshKeyboardMapping function. It requests that the X server send the current key mapping information to this client. A client usually invokes XkbRefreshKeyboardMapping after receiving an XkbMapNotify event. XkbRefreshKeyboardMapping returns Success if it succeeds and BadMatch if the event is not an Xkb event. The XkbMapNotify event can be generated when some client calls XkbSetMap, XkbChangeMap, XkbGetKeyboardByName, or any of the standard X library functions that change the keyboard mapping or modifier mapping. To translate a keycode to a key symbol and modifiers, use XkbTranslateKeyCode. XkbTranslateKeyCode Bool XkbTranslateKeyCode XkbDescPtr xkb KeyCode key unsigned int mods unsigned int *mods_rtrn KeySym *keysym_rtrn xkb keyboard description to use for translation key keycode to translate mods modifiers to apply when translating key mods_rtrn backfilled with consumed modifiers keysym_rtrn keysym resulting from translation mods_rtrn is backfilled with the modifiers consumed by the translation process. mods is a bitwise inclusive OR of the legal modifier masks: ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask, Mod3Mask, Mod4Mask, Mod5Mask. The AlwaysConsumeShiftAndLock library control (see section 11.1.3), if enabled, causes XkbTranslateKeyCode to consume shift and lock. XkbTranslateKeyCode returns True if the translation resulted in a keysym, and False if it resulted in NoSymbol. ind the string bound to a key by XRebindKeysym. XkbLookupKeyBinding is the equivalent of the core XLookupString function. XkbLookupKeyBinding Server Database of Keyboard Components The X server maintains a database of keyboard components, identified by component type. The database contains all the information necessary to build a complete keyboard description for a particular device, as well as to assemble partial descriptions. Table 20.1 identifies the component types and the type of information they contain. Server Database Keyboard Components Component Type Component Primary Contents May also contain Keymap Complete keyboard description Normally assembled using a complete component from each of the other types Keycodes Symbolic name for each key Minimum and maximum legal keycodes Aliases for some keys Symbolic names for indicators Description of indicators physically present Types Key types Real modifier bindings and symbolic names for some virtual modifiers Compatibility Rules used to assign actions to keysyms Maps for some indicators Real modifier bindings and symbolic names for some virtual modifiers Symbols Symbol mapping for keyboard keys Modifier mapping Symbolic names for groups Explicit actions and behaviors for some keys Real modifier bindings and symbolic names for some virtual modifiers Geometry Layout of the keyboard Aliases for some keys; overrides keycodes component aliases Symbolic names for some indicators Description of indicators physically present
While a keymap is a database entry for a complete keyboard description, and therefore logically different from the individual component database entries, the rules for processing keymap entries are identical to those for the individual components. In the discussion that follows, the term component is used to refer to either individual components or a keymap. There may be multiple entries for each of the component types. An entry may be either complete or partial. Partial entries describe only a piece of the corresponding keyboard component and are designed to be combined with other entries of the same type to form a complete entry. For example, a partial symbols map might describe the differences between a common ASCII keyboard and some national layout. Such a partial map is not useful on its own because it does not include those symbols that are the same on both the ASCII and national layouts (such as function keys). On the other hand, this partial map can be used to configure any ASCII keyboard to use a national layout. When a keyboard description is built, the components are processed in the order in which they appear in Table 20.1; later definitions override earlier ones. Component Names Component names have the form “class(member)” where class describes a subset of the available components for a particular type and the optional member identifies a specific component from that subset. For example, the name "atlantis(acme)" for a symbols component might specify the symbols used for the atlantis national keyboard layout by the vendor "acme." Each class has an optional default member — references that specify a class but not a member refer to the default member of the class, if one exists. Xkb places no constraints on the interpretation of the class and member names used in component names. The class and member names are both specified using characters from the Latin-1 character set. Xkb implementations must accept all alphanumeric characters, minus (‘-’) and underscore (‘_’) in class or member names, and must not accept parentheses, plus, vertical bar, percent sign, asterisk, question mark, or white space. The use of other characters is implementation-dependent. Listing the Known Keyboard Components You may ask the server for a list of components for one or more component types. The request takes the form of a set of patterns, one pattern for each of the component types, including a pattern for the complete keyboard description. To obtain this list, use XkbListComponents. XkbListComponents XkbComponentListPtr XkbListComponents Display *dpy unsigned int device_spec XkbComponentNamesPtr ptrns int *max_inout dpy connection to X server device_spec device ID, or XkbUseCoreKbd ptrns namelist for components of interest max_inout max # returned names, # left over XkbListComponents queries the server for a list of component names matching the patterns specified in ptrns. It waits for a reply and returns the matching component names in an XkbComponentListRec structure. When you are done using the structure, you should free it using XkbFreeComponentList. device_spec indicates a particular device in which the caller is interested. A server is allowed (but not required) to restrict its reply to portions of the database that are relevant for that particular device. ptrns is a pointer to an XkbComponentNamesRec, described below. Each of the fields in ptrns contains a pattern naming the components of interest. Each of the patterns is composed of characters from the ISO Latin1 encoding, but can contain only parentheses, the wildcard characters ‘?’ and ‘*’, and characters permitted in a component class or member name (see section 20.1). A pattern may be NULL, in which case no components for that type is returned. Pattern matches with component names are case sensitive. The ‘?’ wildcard matches any single character, except a left or right parenthesis; the ‘*’ wildcard matches any number of characters, except a left or right parenthesis. If an implementation allows additional characters in a component class or member name other than those required by the Xkb extension (see section 20.1), the result of comparing one of the additional characters to either of the wildcard characters is implementation-dependent. If a pattern contains illegal characters, the illegal characters are ignored. The matching process is carried out as if the illegal characters were omitted from the pattern. max_inout is used to throttle the amount of data passed to and from the server. On input, it specifies the maximum number of names to be returned (the total number of names in all component categories). Upon return from XkbListComponents, max_inout contains the number of names that matched the request but were not returned because of the limit. XkbComponentNamesRec The component name patterns used to describe the request are passed to XkbListComponents using an XkbComponentNamesRec structure. This structure has no special allocation constraints or interrelationships with other structures; allocate and free this structure using standard malloc and free calls or their equivalent: typedef struct _XkbComponentNames { char * keymap; /* keymap names */ char * keycodes; /* keycode names */ char * types; /* type names */ char * compat; /* compatibility map names */ char * symbols; /* symbol names */ char * geometry; /* geometry names */ } XkbComponentNamesRec, *XkbComponentNamesPtr; XkbComponentListRec XkbComponentNameRec XkbListComponents returns a pointer to an XkbComponentListRec: typedef struct _XkbComponentList { int num_keymaps; /* number of entries in keymap */ int num_keycodes; /* number of entries in keycodes */ int num_types; /* number of entries in types */ int num_compat; /* number of entries in compat */ int num_symbols; /* number of entries in symbols */ int num_geometry; /* number of entries in geometry; XkbComponentNamePtr keymap; /* keymap names */ XkbComponentNamePtr keycodes; /* keycode names */ XkbComponentNamePtr types; /* type names */ XkbComponentNamePtr compat; /* compatibility map names */ XkbComponentNamePtr symbols; /* symbol names */ XkbComponentNamePtr geometry; /* geometry names */ } XkbComponentListRec, *XkbComponentListPtr; typedef struct _XkbComponentName { unsigned short flags; /* hints regarding component name */ char * name; /* name of component */ } XkbComponentNameRec, *XkbComponentNamePtr; Note that the structure used to specify patterns on input is an XkbComponentNamesRec, and that used to hold the individual component names upon return is an XkbComponentNameRec (no trailing ‘s’ in Name). When you are done using the structure returned by XkbListComponents, free it using XkbFreeComponentList. XkbFreeComponentList void XkbFreeComponentList XkbComponentListPtr list list pointer to XkbComponentListRec to free Component Hints A set of flags is associated with each component; these flags provide additional hints about the component’s use. These hints are designated by bit masks in the flags field of the XkbComponentNameRec structures contained in the XkbComponentListRec returned from XkbListComponents. The least significant byte of the flags field has the same meaning for all types of keyboard components; the interpretation of the most significant byte is dependent on the type of component. The flags bits are defined in Table 20.2. The symbols hints in Table 20.2 apply only to partial symbols components (those with XkbLC_Partial also set); full symbols components are assumed to specify all of the pieces. The alphanumeric, modifier, keypad or function keys symbols hints should describe the primary intent of the component designer and should not be simply an exhaustive list of the kinds of keys that are affected. For example, national keyboard layouts affect primarily alphanumeric keys, but many affect a few modifier keys as well; such mappings should set only the XkbLC_AlphanumericKeys hint. In general, symbols components should set only one of the four flags ( XkbLC_AlternateGroup may be combined with any of the other flags). XkbComponentNameRec Flags Bits Component Type Component Hints (flags) Meaning Value All Components XkbLC_Hidden Do not present to user (1L<<0) XkbLC_Default Default member of class (1L<<1) XkbLC_Partial Partial component (1L<<2) Keymap none Keycodes none Types none Compatibility none Symbols XkbLC_AlphanumericKeys Bindings primarily for alphanumeric keyboard section (1L<<8) XkbLC_ModifierKeys Bindings primarily for modifier keys (1L<<9) XkbLC_KeypadKeys Bindings primarily for numeric keypad keys (1L<<10) XkbLC_FunctionKeys Bindings primarily for function keys (1L<<11) XkbLC_AlternateGroup Bindings for an alternate group (1L<<12) Geometry none
Building a Keyboard Description Using the Server Database A client may request that the server fetch one or more components from its database and use those components to build a new server keyboard description. The new keyboard description may be built from scratch, or it may be built starting with the current keyboard description for a particular device. Once the keyboard description is built, all or part of it may be returned to the client. The parts returned to the client need not include all of the parts used to build the description. At the time it requests the server to build a new keyboard description, a client may also request that the server use the new description internally to replace the current keyboard description for a specific device, in which case the behavior of the device changes accordingly. To build a new keyboard description from a set of named components, and to optionally have the server use the resulting description to replace an active one, use XkbGetKeyboardByName. XkbGetKeyboardByName XkbDescPtr XkbGetKeyboardByName Display *dpy unsigned int device_spec XkbComponentNamesPtr names unsigned int want unsigned int need Bool load dpy connection to X server device_spec device ID, or XkbUseCoreKbd names names of components to fetch want desired structures in returned record need mandatory structures in returned record load True ⇒ load into device_spec names contains a set of expressions describing the keyboard components the server should use to build the new keyboard description. want and need are bit fields describing the parts of the resulting keyboard description that should be present in the returned XkbDescRec. The individual fields in names are component expressions composed of keyboard component names (no wildcarding as may be used in XkbListComponents), the special component name symbol ‘%’, and the special operator characters ‘+’ and ‘|’. A component expression is parsed left to right, as follows: The special component name “computed” may be used in keycodes component expressions and refers to a component consisting of a set of keycodes computed automatically by the server as needed. The special component name “canonical” may be used in types component expressions and refers to a partial component defining the four standard key types: ALPHABETIC, ONE_LEVEL, TWO_LEVEL, and KEYPAD. The special component name ‘%’ refers to the keyboard description for the device specified in device_spec or the keymap names component. If a keymap names component is specified that does not begin with ‘+’ or ‘|’ and does not contain ‘%’, then ‘%’ refers to the description generated by the keymap names component. Otherwise, it refers to the keyboard description for device_spec. The ‘+’ operator specifies that the following component should override the currently assembled description; any definitions that are present in both components are taken from the second. The ‘|’ operator specifies that the next specified component should augment the currently assembled description; any definitions that are present in both components are taken from the first. If the component expression begins with an operator, a leading ‘%’ is implied. If any unknown or illegal characters appear anywhere in the expression, the entire expression is invalid and is ignored. For example, if names->symbols contained the expression "+de", it specifies that the default member of the "de" class of symbols should be applied to the current keyboard mapping, overriding any existing definitions (it could also be written "+de(default)"). Here is a slightly more involved example: the expression "acme(ascii)+de(basic)|iso9995-3" constructs a German (de) mapping for the ASCII keyboard supplied by the "acme" vendor. The new definition begins with the symbols for the ASCII keyboard for Acme (acme(ascii)), overrides them with definitions for the basic German keyboard (de(basic)), and then applies the definitions from the default iso9995-3 keyboard ( iso9995-3) to any undefined keys or groups of keys (part three of the iso9995 standard defines a common set of bindings for the secondary group, but allows national layouts to override those definitions where necessary). The interpretation of the above expression components (acme, ascii, de, basic, iso9995-3) is not defined by Xkb; only the operations and their ordering are. Note that the presence of a keymap names component that does not contain ‘%’ (either explicit or implied by virtue of an expression starting with an operator) indicates a description that is independent of the keyboard description for the device specified in device_spec. The same is true of requests in which the keymap names component is empty and all five other names components contain expressions void of references to ‘%’. Requests of this form allow you to deal with keyboard definitions independent of any actual device. The server parses all non- NULL fields in names and uses them to build a keyboard description. However, before parsing the expressions in names, the server ORs the bits in want and need together and examines the result in relationship to the expressions in names. Table 20.3 identifies the components that are required for each of the possible bits in want or need. If a required component has not been specified in the names structure (the corresponding field is NULL), the server substitutes the expression “%”, resulting in the component values being taken from device_spec. In addition, if load is True, the server modifies names if necessary (again using a “%” entry) to ensure all of the following fields are non- NULL: types, keycodes, symbols, and compat. Want and Need Mask Bits and Required Names Components want or need mask bit Required names Components value XkbGBN_TypesMask Types (1L<<0) XkbGBN_CompatMapMask Compat (1L<<1) XkbGBN_ClientSymbolsMask Types + Symbols + Keycodes (1L<<2) XkbGBN_ServerSymbolsMask Types + Symbols + Keycodes (1L<<3) XkbGBN_SymbolsMask Symbols (1L<<1) XkbGBN_IndicatorMapMask Compat (1L<<4) XkbGBN_KeyNamesMask Keycodes (1L<<5) XkbGBN_GeometryMask Geometry (1L<<6) XkbGBN_OtherNamesMask Types + Symbols + Keycodes + Compat + Geometry (1L<<7) XkbGBN_AllComponentsMask (0xff)
need specifies a set of keyboard components that the server must be able to resolve in order for XkbGetKeyboardByName to succeed; if any of the components specified in need cannot be successfully resolved, XkbGetKeyboardByName fails. want specifies a set of keyboard components that the server should attempt to resolve, but that are not mandatory. If the server is unable to resolve any of these components, XkbGetKeyboardByName still succeeds. Bits specified in want that are also specified in need have no effect in the context of want. If load is True, the server updates its keyboard description for device_spec to match the result of the keyboard description just built. If load is False, the server’s description for device device_spec is not updated. In all cases, the parts specified by want and need from the just-built keyboard description are returned. The names structure in an XkbDescRec keyboard description record (see ) contains one field for each of the five component types used to build a keyboard description. When a keyboard description is built from a set of database components, the corresponding fields in this names structure are set to match the expressions used to build the component. The entire process of building a new keyboard description from the server database of components and returning all or part of it is diagrammed in Figure 20.1:
Building a New Keyboard Description from the Server Database
The information returned to the client in the XkbDescRec is essentially the result of a series of calls to extract information from a fictitious device whose description matches the one just built. The calls corresponding to each of the mask bits are summarized in Table 20.4, together with the XkbDescRec components that are filled in. XkbDescRec Components Returned for Values of Want & Needs Request (want+need) Fills in Xkb components Equivalent Function Call XkbGBN_TypesMask map.types XkbGetUpdatedMap(dpy, XkbTypesMask, Xkb) XkbGBN_ServerSymbolsMask server XkbGetUpdatedMap(dpy, XkbAllClientInfoMask, Xkb) XkbGBN_ClientSymbolsMask map, including map.types XkbGetUpdatedMap(dpy, XkbAllServerInfoMask, Xkb) XkbGBN_IndicatorMaps indicators XkbGetIndicatorMap(dpy, XkbAllIndicators, Xkb) XkbGBN_CompatMapMask compat XkbGetCompatMap(dpy, XkbAllCompatMask, Xkb) XkbGBN_GeometryMask geom XkbGetGeometry(dpy, Xkb) XkbGBN_KeyNamesMask names.keys names.key_aliases XkbGetNames(dpy, XkbKeyNamesMask | XkbKeyAliasesMask, Xkb) XkbGBN_OtherNamesMask names.keycodes names.geometry names.symbols names.types map.types[*].lvl_names[*] names.compat names.vmods names.indicators names.groups names.radio_groups names.phys_symbols XkbGetNames(dpy, XkbAllNamesMask & ~(XkbKeyNamesMask | XkbKeyAliasesMask), Xkb)
There is no way to determine which components specified in want (but not in need) were actually fetched, other than breaking the call into successive calls to XkbGetKeyboardByName and specifying individual components. XkbGetKeyboardByName always sets min_key_code and max_key_code in the returned XkbDescRec structure. XkbGetKeyboardByName is synchronous; it sends the request to the server to build a new keyboard description and waits for the reply. If successful, the return value is non-NULL. XkbGetKeyboardByName generates a BadMatch protocol error if errors are encountered when building the keyboard description. If you simply want to obtain information about the current keyboard device, rather than generating a new keyboard description from elements in the server database, use XkbGetKeyboard (see section 6.2). XkbGetKeyboard XkbDescPtr XkbGetKeyboard Display *dpy unsigned int which unsigned int device_spec dpy connection to X server which mask of components of XkbDescRec of interest device_spec device ID XkbGetKeyboard is used to read the current description for one or more components of a keyboard device. It calls XkbGetKeyboardByName as follows: XkbGetKeyboardByName ( dpy, device_spec, NULL, which, which, False).
r substitutes the expression “%”, resulting in the component values being taken from device_spec. In addition, if load is True, the server mlibX11-1.6.3/specs/XKB/XKBlib-19.svg000064401431060000012000000652531247741723500167150ustar00alancstaff00002660200006 image/svg+xml Xkb State Base Modifiers and Group Locked Modifiers and Group Latched Modifiers and Group Core Pointer Button State ServerInternalModifiers IgnoreLocksModifiers IgnoreGroupLock Compatibility Map Explicit Override Controls Xkb Keyboard Map Core Keyboard Map Compatibility State Compatibility Lookup State Compatibility Grab State LookupState Grab State EffectiveModifiersand Group 125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans" xml:space="preserve">Core libX11-1.6.3/specs/XKB/XKBlib-17.svg000064401431060000012000000734571247741723500167200ustar00alancstaff00002660200006 image/svg+xml Define realmodifiers boundto virtualmodifier Define virtual modifiersfor each key KeyCode XkbDescRec . . . . . . . . . server names . . . . . . . . . vmods[0] vmods[1] vmods[2] vmods[15] XkbNamesRec XkbServerMapRec vmods[0] vmods[1] vmods[2] vmods[15] vmodmap . . . . . . unsigned short(one per key) y="101.25849" x="185.9855" id="tspan3053-0-1-0" sodipodi:role="line">vmods[1] image/svg+xml label_color base_color properties colors shapes sections doodads key_aliases . . . . . . XkbGeometryRec XkbKeyAliasRec(s)(array) XkbColorRec(s)(array) XkbPropertyRec(s)(array) (See Figure 13.6) overlays(s)(array) . . . rows doodads bounds overlays XkbSectionRec(s)(array) (See Figure 13.5) doodads(s)(array) XkbBoundsRec XkbBoundsRec . . . keys bounds XkbRowRec(s)(array) . . . shape_ndx color_ndx XkbKeyRec(s)(array) (See Figure 13.5) doodads(s)(array) XkbBoundsRec XkbOutlineRec(s)(array) outlines approx primary bounds . . . XkbShapeRec(s)(array) -stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscaplibX11-1.6.3/specs/XKB/xkblib.xml000064401431060000012000000114541247741723500166210ustar00alancstaff00002660200006 %defs; ]> The X Keyboard Extension: Library Specification X Version 11, Release &fullrelvers; Amber J. Benson Gary Aitken Erik Fortune Silicon Graphics, Inc Donna Converse X Consortium, Inc George Sachs Hewlett-Packard Company Will Walker Digital Equipment Corporation 19951996 X Consortium Inc. Silicon Graphics Inc. Hewlett-Packard Company Digital Equipment Corporation 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: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED “AS IS”, 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. Except as contained in this notice, the names of the X Consortium, Silicon Graphics Inc., Hewlett-Packard Company, and Digital Equipment Corporation shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization. libX11-1.6.3/specs/XKB/XKBlib-3.svg000064401431060000012000001452451247741723500166260ustar00alancstaff00002660200006 image/svg+xml style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" d="m 270.58984,157.55078 103.5586,0 0,0.48047 -103.5586,0 z m 0,0" id="path216" inkscape:connector-curvature="0" /> image/svg+xml 7.1875,-2.5 7.1875,-2.6875 7,-2.6875 6.859375,-2.6875 l -2.78125,0 0,-2.79687libX11-1.6.3/specs/XKB/ch03.xml000064401431060000012000000226631247741723500161070ustar00alancstaff00002660200006 Data Structures An Xkb keyboard description consists of a variety of data structures, each of which describes some aspect of the keyboard. Although each data structure has its own peculiarities, there are a number of features common to nearly all Xkb structures. This chapter describes these common features and techniques for manipulating them. Many Xkb data structures are interdependent; changing a field in one might require changes to others. As an additional complication, some Xkb library functions allocate related components as a group to reduce fragmentation and allocator overhead. In these cases, simply allocating and freeing fields of Xkb structures might corrupt program memory. Creating and destroying such structures or keeping them properly synchronized during editing is complicated and error prone. Xkb provides functions and macros to allocate and free all major data structures. You should use them instead of allocating and freeing the structures yourself. Allocating Xkb Data Structures Xkb provides functions, known as allocators, to create and initialize Xkb data structures. In most situations, the Xkb functions that read a keyboard description from the server call these allocators automatically. As a result, you will seldom have to directly allocate or initialize Xkb data structures. However, if you need to enlarge an existing structure or construct a keyboard definition from scratch, you may need to allocate and initialize Xkb data structures directly. Each major Xkb data structure has its own unique allocator. The allocator functions share common features: allocator functions for structures with optional components take as an input argument a mask of subcomponents to be allocated. Allocators for data structures containing variable-length data take an argument specifying the initial length of the data. You may call an allocator to change the size of the space allocated for variable-length data. When you call an allocator with an existing data structure as a parameter, the allocator does not change the data in any of the fields, with one exception: variable-length data might be moved. The allocator resizes the allocated memory if the current size is too small. This normally involves allocating new memory, copying existing data to the newly allocated memory, and freeing the original memory. This possible reallocation is important to note because local variables pointing into Xkb data structures might be invalidated by calls to allocator functions. Adding Data and Editing Data Structures You should edit most data structures via the Xkb-supplied helper functions and macros, although a few data structures can be edited directly. The helper functions and macros make sure everything is initialized and interdependent values are properly updated for those Xkb structures that have interdependencies. As a general rule, if there is a helper function or macro to edit the data structure, use it. For example, increasing the width of a type requires you to resize every key that uses that type. This is complicated and ugly, which is why there’s an XkbResizeKeyType function. Many Xkb data structures have arrays whose size is reported by two fields. The first field, whose name is usually prefixed by sz_, represents the total number of elements that can be stored in the array. The second field, whose name is usually prefixed by num_, specifies the number of elements currently stored there. These arrays typically represent data whose total size cannot always be determined when the array is created. In these instances, the usual way to allocate space and add data is as follows: Call the allocator function with some arbitrary size, as a hint. For those arrays that have an Xkb...Add... function, call it each time you want to add new data to the array. The function expands the array if necessary. For example, call: XkbAllocGeomShapes(geom,4) to say I’ll need space for four new shapes in this geometry. This makes sure that sz_shapesnum_shapes >= 4, and resizes the shapes array if it isn’t. If this function succeeds, you are guaranteed to have space for the number of shapes you need. When you call an editing function for a structure, you do not need to check for space, because the function automatically checks the sz_ and num_ fields of the array, resizes the array if necessary, adds the entry to the array, and then updates the num_ field. Making Changes to the Server’s Keyboard Description In Xkb, as in the core protocol, the client and server have independent copies of the data structures that describe the keyboard. The recommended way to change some aspect of the keyboard mapping in the X server is to edit a local copy of the Xkb keyboard description and then send only the changes to the X server. This method helps eliminate the need to transfer the entire keyboard description or even an entire data structure for only minor changes. To help you keep track of the changes you make to a local copy of the keyboard description, Xkb provides separate special changes changes data structures data structures for each major Xkb data structure. These data structures do not contain the actual changed values: they only indicate the changes that have been made to the structures that actually describe the keyboard. When you wish to change the keyboard description in the server, you first modify a local copy of the keyboard description and then flag the modifications in an appropriate changes data structure. When you finish editing the local copy of the keyboard description, you pass your modified version of the keyboard description and the modified changes data structure to an Xkb function. This function uses the modified keyboard description and changes structure to pass only the changed information to the server. Note that modifying the keyboard description but not setting the appropriate flags in the changes data structure causes indeterminate behavior. Tracking Keyboard Changes in the Server The server reports all changes in its keyboard description to any interested clients via special Xkb events. Just as clients use special changes data structures to change the keyboard description in the server, the server uses special changes data structures to tell a client what changed in the server’s keyboard description. Unlike clients, however, the server does not always pass the new values when it reports changes to its copy of the keyboard description. Instead, the server only passes a changes data structure when it reports changes to its keyboard description. This is done for efficiency reasons — some clients do not always need to update their copy of the keyboard description with every report from the server. When your client application receives a report from the server indicating the keyboard description has changed, you can determine the set of changes by passing the event to an Xkb function that notes event information in the corresponding changes data structure. These note changes functions are defined for all major Xkb components, and their names have the form XkbNote{Component}Changes, where Component is the name of a major Xkb component such as Map or Names. When you want to copy these changes from the server into a local copy of the keyboard description, use the corresponding XkbGet{Component}Changes function, passing it the changes structure. The function then retrieves only the changed structures from the server and copies the modified pieces into the local keyboard description. Freeing Data Structures For the same reasons you should not directly use malloc to allocate Xkb data structures, you should not free Xkb data structures or components directly using free or Xfree. Xkb provides functions to free the various data structures and their components. Always use the free functions supplied by Xkb. There is no guarantee that any particular field can be safely freed by free or Xfree. libX11-1.6.3/specs/XKB/ch04.xml000064401431060000012000000566231247741723500161130ustar00alancstaff00002660200006 Xkb Events events The primary way the X server communicates with clients is by sending X events to them. Some events are sent to all clients, while others are sent only to clients that have requested them. Some of the events that can be requested are associated with a particular window and are only sent to those clients who have both requested the event and specified the window in which the event occurred. The Xkb extension uses events to communicate the keyboard status to interested clients. These events are not associated with a particular window. Instead, all Xkb keyboard status events are reported to all interested clients, regardless of which window currently has the keyboard focus and regardless of the grab state of the keyboard.The one exception to this rule is the XkbExtensionDeviceNotify event report that is sent when a client attempts to use an unsupported feature of an X Input Extension device (see section 21.4). The X server reports the events defined by the Xkb extension to your client application only if you have requested them. You may request Xkb events by calling either XkbSelectEvents or XkbSelectEventDetails. XkbSelectEvents requests Xkb events by their event type and causes them to be reported to your client application under all circumstances. You can specify a finer granularity for event reporting by using XkbSelectEventDetails; in this case events are reported only when the specific detail conditions you specify have been met. Xkb Event Types The Xkb Extension adds new event types to the X protocol definition. An Xkb event type is defined by two fields in the X event data structure. One is the type field, containing the base event code. This base event code is a value the X server assigns to each X extension at runtime and that identifies the extension that generated the event; thus, the event code in the type field identifies the event as an Xkb extension event, rather than an event from another extension or a core X protocol event. You can obtain the base event code via a call to XkbQueryExtension or XkbOpenDisplay. The second field is the Xkb event type, which contains a value uniquely identifying each different Xkb event type. Possible values are defined by constants declared in the header file <X11/extensions/Xkb.h>. Table 4.1 lists the categories of events defined by Xkb and their associated event types, as defined in Xkb.h. Each event is described in more detail in the section referenced for that event. Xkb Event Types Event Type Conditions Generating Event Section XkbNewKeyboardNotify Keyboard geometry; keycode range change 19 XkbMapNotify Keyboard mapping change 14.4 XkbStateNotify Keyboard state change 5.4 XkbControlsNotify Keyboard controls state change 10.11 XkbIndicatorStateNotify Keyboard indicators state change 8.5 XkbIndicatorMapNotify Keyboard indicators map change 8.5 XkbNamesNotify Keyboard name change 18.5 XkbCompatMapNotify Keyboard compatibility map change 17.5 XkbBellNotify Keyboard bell generated 9.4 XkbActionMessage Keyboard action message 16.1.11 XkbAccessXNotify AccessX state change 10.6.4 XkbExtensionDeviceNotify Extension device change 21.6
Xkb Event Data Structures eventsXkbAnyEvent XkbAnyEvent Xkb reports each event it generates in a unique structure holding the data values needed to describe the conditions the event is reporting. However, all Xkb events have certain things in common. These common features are contained in the same fields at the beginning of all Xkb event structures and are described in the XkbAnyEvent structure: typedef struct { int type; /* Xkb extension base event code */ unsigned long serial; /* X server serial number for event */ Bool send_event; /* True ⇒ synthetically generated */ Display * display; /* server connection where event generated */ Time time; /* server time when event generated */ int xkb_type; /* Xkb minor event code */ unsigned int device; /* Xkb device ID, will not be XkbUseCoreKbd */ } XkbAnyEvent; For any Xkb event, the type field is set to the base event code for the Xkb extension, assigned by the server to all Xkb extension events. The serial, send_event, and display fields are as described for all X11 events. The time field is set to the time when the event was generated and is expressed in milliseconds. The xkb_type field contains the minor extension event code, which is the extension event type, and is one of the values listed in Table 4.1. The device field contains the keyboard device identifier associated with the event. This is never XkbUseCoreKbd, even if the request that generated the event specified a device of XkbUseCoreKbd. If the request that generated the event specified XkbUseCoreKbd, device contains a value assigned by the server to specify the core keyboard. If the request that generated the event specified an X input extension device, device contains that same identifier. Other data fields specific to individual Xkb events are described in subsequent chapters where the events are described. Selecting Xkb Events eventsmask maskevent Xkb events are selected using an event mask, much the same as normal core X events are selected. However, unlike selecting core X events, where you must specify the selection status (on or off) for all possible event types whenever you wish to change the selection criteria for any one event, Xkb allows you to restrict the specification to only the event types you wish to change. This means that you do not need to remember the event selection values for all possible types each time you want to change one of them. Many Xkb event types are generated under several different circumstances. When selecting to receive an Xkb event, you may specify either that you want it delivered under all circumstances, or that you want it delivered only for a subset of the possible circumstances. You can also deselect an event type that was previously selected for, using the same granularity. Xkb provides two functions to select and deselect delivery of Xkb events. XkbSelectEvents allows you to select or deselect delivery of more than one Xkb event type at once. Events selected using XkbSelectEvents are delivered to your program under all circumstances that generate the events. To restrict delivery of an event to a subset of the conditions under which it occurs, use XkbSelectEventDetails. XkbSelectEventDetails only allows you to change the selection conditions for a single event at a time, but it provides a means of fine-tuning the conditions under which the event is delivered. To select and / or deselect for delivery of one or more Xkb events and have them delivered under all conditions, use XkbSelectEvents. XkbSelectEvents Bool XkbSelectEvents Display *display unsigned int device_spec unsigned long int bits_to_change unsigned long int values_for_bits display connection to the X server device_spec device ID, or XkbUseCoreKbd bits_to_change determines events to be selected / deselected values_for_bits 1⇒select, 0→deselect; for events in bits_to_change This request changes the Xkb event selection mask for the keyboard specified by device_spec. Each Xkb event that can be selected is represented by a bit in the bits_to_change and values_for_bits masks. Only the event selection bits specified by the bits_to_change parameter are affected; any unspecified bits are left unchanged. To turn on event selection for an event, set the bit for the event in the bits_to_change parameter and set the corresponding bit in the values_for_bits parameter. To turn off event selection for an event, set the bit for the event in the bits_to_change parameter and do not set the corresponding bit in the values_for_bits parameter. The valid values for both of these parameters are an inclusive bitwise OR of the masks shown in Table 4.2. There is no interface to return your client’s current event selection mask. Clients cannot set other clients’ event selection masks. If a bit is not set in the bits_to_change parameter, but the corresponding bit is set in the values_for_bits parameter, a BadMatch protocol error results. If an undefined bit is set in either the bits_to_change or the values_for_bits parameter, a BadValue protocol error results. All event selection bits are initially zero for clients using the Xkb extension. Once you set some bits, they remain set for your client until you clear them via another call to XkbSelectEvents. XkbSelectEvents returns False if the Xkb extension has not been initialized and True otherwise. To select or deselect for a specific Xkb event and optionally place conditions on when events of that type are reported to your client, use XkbSelectEventDetails. This allows you to exercise a finer granularity of control over delivery of Xkb events with XkbSelectEvents. XkbSelectEventDetails Bool XkbSelectEventDetails Display *display unsigned int device_spec unsigned int event_type unsigned long int bits_to_change unsigned long int values_for_bits display connection to the X server device_spec device ID, or XkbUseCoreKbd event_type Xkb event type of interest bits_to_change event selection details values_for_bits values for bits selected by bits_to_change While XkbSelectEvents allows multiple events to be selected, XkbSelectEventDetails changes the selection criteria for a single type of Xkb event. The interpretation of the bits_to_change and values_for_bits masks depends on the event type in question. XkbSelectEventDetails changes the Xkb event selection mask for the keyboard specified by device_spec and the Xkb event specified by event_type. To turn on event selection for an event detail, set the bit for the detail in the bits_to_change parameter and set the corresponding bit in the values_for_bits parameter. To turn off event detail selection for a detail, set the bit for the detail in the bits_to_change parameter and do not set the corresponding bit in the values_for_bits parameter. If an invalid event type is specified, a BadValue protocol error results. If a bit is not set in the bits_to_change parameter, but the corresponding bit is set in the values_for_bits parameter, a BadMatch protocol error results. If an undefined bit is set in either the bits_to_change or the values_for_bits parameter, a BadValue protocol error results. For each type of Xkb event, the legal event details that you can specify in the XkbSelectEventDetails request are listed in the chapters that describe each event in detail. Event Masks The X server reports the events defined by Xkb to your client application only if you have requested them via a call to XkbSelectEvents or XkbSelectEventDetails. Specify the event types in which you are interested in a mask, as described in section 4.3. Table 4.2 lists the event mask constants that can be specified with the XkbSelectEvents request and the circumstances in which the mask should be specified. XkbSelectEvents Mask Constants Event Mask Value Notification Wanted XkbNewKeyboardNotifyMask (1L<<0) Keyboard geometry change XkbMapNotifyMask (1L<<1) Keyboard mapping change XkbStateNotifyMask (1L<<2) Keyboard state change XkbControlsNotifyMask (1L<<3) Keyboard control change XkbIndicatorStateNotifyMask (1L<<4) Keyboard indicator state change XkbIndicatorMapNotifyMask (1L<<5) Keyboard indicator map change XkbNamesNotifyMask (1L<<6) Keyboard name change XkbCompatMapNotifyMask (1L<<7) Keyboard compat map change XkbBellNotifyMask (1L<<8) Bell XkbActionMessageMask (1L<<9) Action message XkbAccessXNotifyMask (1L<<10) AccessX features XkbExtensionDeviceNotifyMask (1L<<11) Extension device XkbAllEventsMask (0xFFF) All Xkb events
Unified Xkb Event Type eventsXkbEvent XkbEvent The XkbEvent structure is a union of the individual structures declared for each Xkb event type and for the core protocol XEvent type. Given an XkbEvent structure, you may use the type field to determine if the event is an Xkb event (type equals the Xkb base event code; see section 2.4). If the event is an Xkb event, you may then use the any.xkb_type field to determine the type of Xkb event and thereafter access the event-dependent components using the union member corresponding to the particular Xkb event type. typedef union _XkbEvent { int type; XkbAnyEvent any; XkbStateNotifyEvent state; XkbMapNotifyEvent map; XkbControlsNotifyEvent ctrls; XkbIndicatorNotifyEvent indicators; XkbBellNotifyEvent bell; XkbAccessXNotifyEvent accessx; XkbNamesNotifyEvent names; XkbCompatMapNotifyEvent compat; XkbActionMessageEvent message; XkbExtensionDeviceNotifyEvent device; XkbNewKeyboardNotifyEvent new_kbd; XEvent core; } XkbEvent; This unified Xkb event type includes a normal XEvent as used by the core protocol, so it is straightforward for applications that use Xkb events to call the X library event functions without having to cast every reference. For example, to get the next event, you can simply declare a variable of type XkbEvent and call: XNextEvent(dpy,&xkbev.core);
et in the bits_to_change parameter, but the corresponding bit is set in the image/svg+xml XkbGeometryRec,XkbColorRec, andXkbShapeRecrepeated fromFigure 16.4 . . . label_color base_color properties colors shapes sections doodads key_aliases XkbGeometryRec . . . color_ndx shape_ndx . . . XkbShapeDoodadRec(s) . . . color_ndx XkbTextDoodadRec(s) doodads arraymay containany of thesedoodad types shape_ndx on_color_ndx off_color_ndx . . . XkbIndicatorDoodadRec(s) color_ndx shape_ndx . . . XkbLogoDoodadRec(s) outlines approx primary bounds XkbShapeRec(s)(array) . . . XkbColorRec(s)(array) " inkscape:connector-curvature="0" id="rect5248-4-2" d="m 333.39482,462.61227 80.35056,0" style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0" /> image/svg+xml unsigned char(s)(array) unsigned short(s)(array) unsigned short(s)(array) XkbBehaviors(s)(array) XkbActions(s)(array) KeyCode XkbServerMapRec num_acts size_acts acts behaviors key_acts explicit vmods[16] vmodmap sodipodi:linespacing="125%">num_acts
Attaching Xkb Actions to X Input Extension Devices The X input extension allows an X server to support multiple keyboards, as well as other input devices, in addition to the core X keyboard and pointer. The input extension categorizes devices by grouping them into classes. Keyboards and other input devices with keys are classified as KeyClass devices by the input extension. Other types of devices supported by the input extension include, but are not limited to: mice, tablets, touchscreens, barcode readers, button boxes, trackballs, identifier devices, data gloves, and eye trackers. Xkb provides additional control over all X input extension devices, whether they are KeyClass devices or not, as well as the core keyboard and pointer. If an X server implements support for both the input extension and Xkb, the server implementor determines whether interaction between Xkb and the input extension is allowed. Implementors are free to restrict the effects of Xkb to only the core X keyboard device or allow interaction between Xkb and the input extension. Several types of interaction between Xkb and the input extension are defined by Xkb. Some or all may be allowed by the X server implementation. Regardless of whether the server allows interaction between Xkb and the input extension, the following access is provided: Xkb functionality for the core X keyboard device and its mapping is accessed via the functions described in the other chapters of this specification. Xkb functionality for the core X pointer device is accessed via the XkbGetDeviceInfo and XkbSetDeviceInfo functions described in this chapter. If all types of interaction are allowed between Xkb and the input extension, the following additional access is provided: If allowed, Xkb functionality for additional KeyClass devices supported by the input extension is accessed via those same functions. If allowed, Xkb functionality for non- KeyClass devices supported by the input extension is also accessed via the XkbGetDeviceInfo and XkbSetDeviceInfo functions described in this chapter. Each device has an X Input Extension device ID. Each device may have several classes of feedback. For example, there are two types of feedbacks that can generate bells: bell feedback and keyboard feedback (BellFeedbackClass and KbdFeedbackClass). A device can have more than one feedback of each type; the feedback ID identifies the particular feedback within its class. A keyboard feedback has: Auto-repeat status (global and per key) 32 LEDs A bell An indicator feedback has: Up to 32 LEDs If the input extension is present and the server allows interaction between the input extension and Xkb, then the core keyboard, the core keyboard indicators, and the core keyboard bells may each be addressed using an appropriate device spec, class, and ID. The constant XkbDfltXIId may be used as the device ID to specify the core keyboard indicators for the core indicator feedback. The particular device ID corresponding to the core keyboard feedback and the core indicator feedback may be obtained by calling XkbGetDeviceInfo and specifying XkbUseCoreKbd as the device_spec; the values will be returned in dflt_kbd_fb and dflt_led_fb. If the server does not allow Xkb access to input extension KeyClass devices, attempts to use Xkb requests with those devices fail with a BadKeyboard error. Attempts to access non- KeyClass input extension devices via XkbGetDeviceInfo and XkbSetDeviceInfo fail silently if Xkb access to those devices is not supported by the X server. XkbDeviceInfoRec XkbDeviceInfoRec XkbDeviceLedInfoRec Information about X Input Extension devices is transferred between a client program and the Xkb extension in an XkbDeviceInfoRec structure: typedef struct { char * name; /* name for device */ Atom type; /* name for class of devices */ unsigned short device_spec; /* device of interest */ Bool has_own_state; /* True ⇒ this device has its own state */ unsigned short supported; /* bits indicating supported capabilities */ unsigned short unsupported; /* bits indicating unsupported capabilities */ unsigned short num_btns; /* number of entries in btn_acts */ XkbAction * btn_acts; /* button actions */ unsigned short sz_leds; /* total number of entries in LEDs vector */ unsigned short num_leds; /* number of valid entries in LEDs vector */ unsigned short dflt_kbd_fb; /* input extension ID of default (core kbd) indicator */ unsigned short dflt_led_fb; /* input extension ID of default indicator feedback */ XkbDeviceLedInfoPtr leds; /* LED descriptions */ } XkbDeviceInfoRec, *XkbDeviceInfoPtr; typedef struct { unsigned short led_class; /* class for this LED device */ unsigned short led_id; /* ID for this LED device */ unsigned int phys_indicators; /* bits for which LEDs physically present */ unsigned int maps_present; /* bits for which LEDs have maps in maps */ unsigned int names_present; /* bits for which LEDs are in names */ unsigned int state; /* 1 bit ⇒ corresponding LED is on */ Atom names[XkbNumIndicators]; /* names for LEDs */ XkbIndicatorMapRec maps; /* indicator maps for each LED */ } XkbDeviceLedInfoRec, *XkbDeviceLedInfoPtr; The type field is a registered symbolic name for a class of devices (for example, "TABLET"). If a device is a keyboard (that is, is a member of KeyClass), it has its own state, and has_own_state is True. If has_own_state is False, the state of the core keyboard is used. The supported and unsupported fields are masks where each bit indicates a capability. The meaning of the mask bits is listed in Table 21.1, together with the fields in the XkbDeviceInfoRec structure that are associated with the capability represented by each bit. The same bits are used to indicate the specific information desired in many of the functions described subsequently in this section. XkbDeviceInfoRec Mask Bits Name XkbDeviceInfoRec Fields Effected Value Capability If Set XkbXI_KeyboardsMask (1L << 0) Clients can use all Xkb requests and events with KeyClass devices supported by the input device extension. XkbXI_ButtonActionsMask num_btns btn_acts (1L <<1) Clients can assign key actions to buttons on non- KeyClass input extension devices. XkbXI_IndicatorNamesMask leds->names (1L <<2) Clients can assign names to indicators on non- KeyClass input extension devices. XkbXI_IndicatorMapsMask leds->maps (1L <<3) Clients can assign indicator maps to indicators on non- KeyClass input extension devices. XkbXI_IndicatorStateMask leds->state (1L <<4) Clients can request the status of indicators on non- KeyClass input extension devices. XkbXI_IndicatorsMask sz_leds num_leds leds->* (0x1c) XkbXI_IndicatorNames­Mask | XkbXI_IndicatorMaps­Mask | XkbXI_IndicatorState­Mask XkbXI_UnsupportedFeaturesMask unsupported (1L <<15) XkbXI_AllDeviceFeaturesMask Those selected by Value column masks (0x1e) XkbXI_Indicators­Mask | XkbXI_ButtonActions­Mask XkbXI_AllFeaturesMask Those selected by Value column masks (0x1f) XkbXI_AllDevice­FeaturesMask | XkbXI_Keyboards­Mask XkbXI_AllDetailsMask Those selected by Value column masks (0x801f) XkbXI_AllFeatures­Mask | XkbXI_Unsupported­FeaturesMask
The name, type, has_own_state, supported, and unsupported fields are always filled in when a valid reply is returned from the server involving an XkbDeviceInfoRec. All of the other fields are modified only if the particular function asks for them.
Querying Xkb Features for Non-KeyClass Input Extension Devices To determine whether the X server allows Xkb access to particular capabilities of input devices other than the core X keyboard, or to determine the status of indicator maps, indicator names or button actions on a non- KeyClass extension device, use XkbGetDeviceInfo. XkbGetDeviceInfo XkbDeviceInfoPtr XkbGetDeviceInfo Display *dpy unsigned int which unsigned int device_spec unsigned int ind_class unsigned int ind_id dpy connection to X server which mask indicating information to return device_spec device ID, or XkbUseCoreKbd ind_class feedback class for indicator requests ind_id feedback ID for indicator requests XkbGetDeviceInfo returns information about the input device specified by device_spec. Unlike the device_spec parameter of most Xkb functions, device_spec does not need to be a keyboard device. It must, however, indicate either the core keyboard or a valid X Input Extension device. The which parameter is a mask specifying optional information to be returned. It is an inclusive OR of one or more of the values from Table 21.1 and causes the returned XkbDeviceInfoRec to contain values for the corresponding fields specified in the table. The XkbDeviceInfoRec returned by XkbGetDeviceInfo always has values for name (may be a null string, ""), type, supported, unsupported, has_own_state, dflt_kbd_fb, and dflt_led_fb. Other fields are filled in as specified by which. Upon return, the supported field will be set to the inclusive OR of zero or more bits from Table 21.1; each bit set indicates an optional Xkb extension device feature supported by the server implementation, and a client may modify the associated behavior. If the XkbXI_ButtonActionsMask bit is set in which, the XkbDeviceInfoRec returned will have the button actions (btn_acts field) filled in for all buttons. If which includes one of the bits in XkbXI_IndicatorsMask, the feedback class of the indicators must be specified in ind_class, and the feedback ID of the indicators must be specified in ind_id. If the request does not include any of the bits in XkbXI_IndicatorsMask, the ind_class and ind_id parameters are ignored. The class and ID can be obtained via the input device extension XListInputDevices request. If any of the XkbXI_IndicatorsMask bits are set in which, the XkbDeviceInfoRec returned will have filled in the portions of the leds structure corresponding to the indicator feedback identified by ind_class and ind_id. The leds vector of the XkbDeviceInfoRec is allocated if necessary and sz_leds and num_leds filled in. The led_class, led_id and phys_indicators fields of the leds entry corresponding to ind_class and ind_id are always filled in. If which contains XkbXI_IndicatorNamesMask, the names_present and names fields of the leds structure corresponding to ind_class and ind_id are returned. If which contains XkbXI_IndicatorStateMask, the corresponding state field is updated. If which contains XkbXI_IndicatorMapsMask, the maps_present and maps fields are updated. Xkb provides convenience functions to request subsets of the information available via XkbGetDeviceInfo. These convenience functions mirror some of the mask bits. The functions all take an XkbDeviceInfoPtr as an input argument and operate on the X Input Extension device specified by the device_spec field of the structure. Only the parts of the structure indicated in the function description are updated. The XkbDeviceInfoRec structure used in the function call can be obtained by calling XkbGetDeviceInfo or can be allocated by calling XkbAllocDeviceInfo (see section 21.3). These convenience functions are described as follows. To query the button actions associated with an X Input Extension device, use XkbGetDeviceButtonActions. XkbGetDeviceButtonActions Status XkbGetDeviceButtonActions Display *dpy XkbDeviceInfoPtr device_info Bool all_buttons unsigned int first_button unsigned int num_buttons dpy connection to X server device_info structure to update with results all_buttons True ⇒ get information for all buttons first_button number of first button for which info is desired num_buttons number of buttons for which info is desired XkbGetDeviceButtonActions queries the server for the desired button information for the device indicated by the device_spec field of device_info and waits for a reply. If successful, XkbGetDeviceButtonActions backfills the button actions (btn_acts field of device_info) for only the requested buttons, updates the name, type, supported, and unsupported fields, and returns Success. all_buttons, first_button and num_buttons specify the device buttons for which actions should be returned. Setting all_buttons to True requests actions for all device buttons; if all_buttons is False, first_button and num_buttons specify a range of buttons for which actions are requested. If a compatible version of Xkb is not available in the server or the Xkb extension has not been properly initialized, XkbGetDeviceButtonActions returns BadAccess. If allocation errors occur, a BadAlloc status is returned. If the specified device (device_info->device_spec) is invalid, a BadKeyboard status is returned. If the device has no buttons, a BadMatch status is returned. If first_button and num_buttons specify illegal buttons, a BadValue status is returned. To query the indicator names, maps, and state associated with an LED feedback of an input extension device, use XkbGetDeviceLedInfo. XkbGetDeviceLedInfo Status XkbGetDeviceLedInfo Display *dpy XkbDeviceInfoPtr device_info unsigned int led_class unsigned int led_id unsigned int which dpy connection to X server device_info structure to update with results led_class LED feedback class assigned by input extension led_id LED feedback ID assigned by input extension which mask indicating desired information XkbGetDeviceLedInfo queries the server for the desired LED information for the feedback specified by led_class and led_id for the X input extension device indicated by device_spec->device_info and waits for a reply. If successful, XkbGetDeviceLedInfo backfills the relevant fields of device_info as determined by which with the results and returns Success. Valid values for which are the inclusive OR of any of XkbXI_IndicatorNamesMask, XkbXI_IndicatorMapsMask, and XkbXI_IndicatorStateMask. The fields of device_info that are filled in when this request succeeds are name, type, supported, and unsupported, and portions of the leds structure corresponding to led_class and led_id as indicated by the bits set in which. The device_info->leds vector is allocated if necessary and sz_leds and num_leds filled in. The led_class, led_id and phys_indicators fields of the device_info->leds entry corresponding to led_class and led_id are always filled in. If which contains XkbXI_IndicatorNamesMask, the names_present and names fields of the device_info->leds structure corresponding to led_class and led_id are updated, if which contains XkbXI_IndicatorStateMask, the corresponding state field is updated, and if which contains XkbXI_IndicatorMapsMask, the maps_present and maps fields are updated. If a compatible version of Xkb is not available in the server or the Xkb extension has not been properly initialized, XkbGetDeviceLedInfo returns BadAccess. If allocation errors occur, a BadAlloc status is returned. If the device has no indicators, a BadMatch error is returned. If ledClass or ledID have illegal values, a BadValue error is returned. If they have legal values but do not specify a feedback that contains LEDs and is associated with the specified device, a BadMatch error is returned. Allocating, Initializing, and Freeing the XkbDeviceInfoRec Structure To obtain an XkbDeviceInfoRec structure, use XkbGetDeviceInfo or XkbAllocDeviceInfo. XkbAllocDeviceInfo XkbDeviceInfoPtr XkbAllocDeviceInfo unsigned int device_spec unsigned int n_buttons unsigned int sz_leds device_spec device ID with which structure will be used n_buttons number of button actions to allocate space for sz_leds number of LED feedbacks to allocate space for XkbAllocDeviceInfo allocates space for an XkbDeviceInfoRec structure and initializes that structure’s device_spec field with the device ID specified by device_spec. If n_buttons is nonzero, n_buttons XkbActions are linked into the XkbDeviceInfoRec structure and initialized to zero. If sz_leds is nonzero, sz_leds XkbDeviceLedInfoRec structures are also allocated and linked into the XkbDeviceInfoRec structure. If you request XkbDeviceLedInfoRec structures be allocated using this request, you must initialize them explicitly. To obtain an XkbDeviceLedInfoRec structure, use XkbAllocDeviceLedInfo. XkbAllocDeviceLedInfo Status XkbAllocDeviceLedInfo XkbDeviceInfoPtr device_info int num_needed device_info structure in which to allocate LED space num_needed number of indicators to allocate space for XkbAllocDeviceLedInfo allocates space for an XkbDeviceLedInfoRec and places it in device_info. If num_needed is nonzero, num_needed XkbIndicatorMapRec structures are also allocated and linked into the XkbDeviceLedInfoRec structure. If you request XkbIndicatorMapRec structures be allocated using this request, you must initialize them explicitly. All other fields are initialized to zero. To initialize an XkbDeviceLedInfoRec structure, use XkbAddDeviceLedInfo. XkbAddDeviceLedInfo XkbDeviceLedInfoPtr XkbAddDeviceLedInfo XkbDeviceInfoPtr device_info unsigned int led_class unsigned int led_id device_info structure in which to add LED info led_class input extension class for LED device of interest led_id input extension ID for LED device of interest XkbAddDeviceLedInfo first checks to see whether an entry matching led_class and led_id already exists in the device_info->leds array. If it finds a matching entry, it returns a pointer to that entry. Otherwise, it checks to be sure there is at least one empty entry in device_info->leds and extends it if there is not enough room. It then increments device_info->num_leds and fills in the next available entry in device_info->leds with led_class and led_id. If successful, XkbAddDeviceLedInfo returns a pointer to the XkbDeviceLedInfoRec structure that was initialized. If unable to allocate sufficient storage, or if device_info points to an invalid XkbDeviceInfoRec structure, or if led_class or led_id are inappropriate, XkbAddDeviceLedInfo returns NULL. To allocate additional space for button actions in an XkbDeviceInfoRec structure, use XkbResizeDeviceButtonActions. XkbResizeDeviceButtonActions Status XkbResizeDeviceButtonActions XkbDeviceInfoPtr device_info unsigned int new_total device_info structure in which to allocate button actions new_total new total number of button actions needed XkbResizeDeviceButtonActions reallocates space, if necessary, to make sure there is room for a total of new_total button actions in the device_info structure. Any new entries allocated are zeroed. If successful, XkbResizeDeviceButtonActions returns Success. If new_total is zero, all button actions are deleted, device_info->num_btns is set to zero, and device_info->btn_acts is set to NULL. If device_info is invalid or new_total is greater than 255, BadValue is returned. If a memory allocation failure occurs, a BadAlloc is returned. To free an XkbDeviceInfoRec structure, use XkbFreeDeviceInfo. XkbFreeDeviceInfo void XkbFreeDeviceInfo XkbDeviceInfoPtr device_info unsigned int which Bool free_all device_info pointer to XkbDeviceInfoRec in which to free items which mask of components of device_info to free free_all True ⇒ free everything, including device_info If free_all is True, the XkbFreeDeviceInfo frees all components of device_info and the XkbDeviceInfoRec structure pointed to by device_info itself. If free_all is False, the value of which determines which subcomponents are freed. which is an inclusive OR of one or more of the values from Table 21.1. If which contains XkbXI_ButtonActionsMask, all button actions associated with device_info are freed, device_info->btn_acts is set to NULL, and device_info->num_btns is set to zero. If which contains all bits in XkbXI_IndicatorsMask, all XkbDeviceLedInfoRec structures associated with device_info are freed, device_info->leds is set to NULL, and device_info->sz_leds and device_info->num_leds are set to zero. If which contains XkbXI_IndicatorMapsMask, all indicator maps associated with device_info are cleared, but the number of LEDs and the leds structures themselves are preserved. If which contains XkbXI_IndicatorNamesMask, all indicator names associated with device_info are cleared, but the number of LEDs and the leds structures themselves are preserved. If which contains XkbXI_IndicatorStateMask, the indicator state associated with the device_info leds are set to zeros but the number of LEDs and the leds structures themselves are preserved. Setting Xkb Features for Non-KeyClass Input Extension Devices The Xkb extension allows clients to assign any key action to either core pointer or input extension device buttons. This makes it possible to control the keyboard or generate keyboard key events from extension devices or from the core pointer. Key actions assigned to core X pointer buttons or input extension device buttons cause key events to be generated as if they had originated from the core X keyboard. Xkb implementations are required to support key actions for the buttons of the core pointer device, but support for actions on extension devices is optional. Implementations that do not support button actions for extension devices must not set the XkbXI_ButtonActionsMask bit in the supported field of an XkbDeviceInfoRec structure. If a client attempts to modify valid characteristics of a device using an implementation that does not support modification of those characteristics, no protocol error is generated. Instead, the server reports a failure for the request; it also sends an XkbExtensionDeviceNotify event to the client that issued the request if the client has selected to receive these events. To change characteristics of an X Input Extension device in the server, first modify a local copy of the device structure and then use either XkbSetDeviceInfo, or, to save network traffic, use an XkbDeviceChangesRec structure (see section 21.6) and call XkbChangeDeviceInfo to download the changes to the server. To modify some or all of the characteristics of an X Input Extension device, use XkbSetDeviceInfo. XkbSetDeviceInfo Bool XkbSetDeviceInfo Display *dpy unsigned int which XkbDeviceInfoPtr device_info dpy connection to X server which mask indicating characteristics to modify device_info structure defining the device and modifications XkbSetDeviceInfo sends a request to the server to modify the characteristics of the device specified in the device_info structure. The particular characteristics modified are identified by the bits set in which and take their values from the relevant fields in device_info (see Table 21.1). XkbSetDeviceInfo returns True if the request was successfully sent to the server. If the X server implementation does not allow interaction between the X input extension and the Xkb Extension, the function does nothing and returns False. The which parameter specifies which aspects of the device should be changed and is a bitmask composed of an inclusive OR or one or more of the following bits: XkbXI_ButtonActionsMask, XkbXI_IndicatorNamesMask, XkbXI_IndicatorMapsMask. If the features requested to be manipulated in which are valid for the device, but the server does not support assignment of one or more of them, that particular portion of the request is ignored. If the device specified in device_info->device_spec does not contain buttons and a request affecting buttons is made, or the device does not contain indicators and a request affecting indicators is made, a BadMatch protocol error results. If the XkbXI_ButtonActionsMask bit is set in the supported mask returned by XkbGetDeviceInfo, the Xkb extension allows applications to assign key actions to buttons on input extension devices other than the core keyboard device. If the XkbXI_ButtonActionsMask is set in which, the actions for all buttons specified in device_info are set to the XkbActions specified in device_info->btn_acts. If the number of buttons requested to be updated is not valid for the device, XkbSetDeviceInfo returns False and a BadValue protocol error results. If the XkbXI_IndicatorMapsMask and / or XkbXI_IndicatorNamesMask bit is set in the supported mask returned by XkbGetDeviceInfo, the Xkb extension allows applications to assign maps and / or names to the indicators of nonkeyboard extension devices. If supported, maps and / or names can be assigned to all extension device indicators, whether they are part of a keyboard feedback or part of an indicator feedback. If the XkbXI_IndicatorMapsMask and / or XkbXI_IndicatorNamesMask flag is set in which, the indicator maps and / or names for all device_info->num_leds indicator devices specified in device_info->leds are set to the maps and / or names specified in device_info->leds. device_info->leds->led_class and led_id specify the input extension class and device ID for each indicator device to modify; if they have invalid values, a BadValue protocol error results and XkbSetDeviceInfo returns False. If they have legal values but do not specify a keyboard or indicator class feedback for the device in question, a BadMatch error results. If any of the values in device_info->leds->names are not a valid Atom or None, a BadAtom protocol error results. Xkb provides convenience functions to modify subsets of the information accessible via XkbSetDeviceInfo. Only the parts of the structure indicated in the function description are modified. These convenience functions are described as follows. To change only the button actions for an input extension device, use XkbSetDeviceButtonActions. XkbSetDeviceButtonActions Bool XkbSetDeviceButtonActions Display *dpy XkbDeviceInfoPtr device_info unsigned int first_button unsigned int num_buttons dpy connection to X server device_info structure defining the device and modifications first_button number of first button to update, 0 relative num_buttons number of buttons to update XkbSetDeviceButtonActions assigns actions to the buttons of the device specified in device_info->device_spec. Actions are assigned to num_buttons buttons beginning with first_button and are taken from the actions specified in device_info->btn_acts. If the server does not support assignment of Xkb actions to extension device buttons, XkbSetDeviceButtonActions has no effect and returns False. If the device has no buttons or if first_button or num_buttons specify buttons outside of the valid range as determined by device_info->num_btns, the function has no effect and returns False. Otherwise, XkbSetDeviceButtonActions sends a request to the server to change the actions for the specified buttons and returns True. If the actual request sent to the server involved illegal button numbers, a BadValue protocol error is generated. If an invalid device identifier is specified in device_info->device_spec, a BadKeyboard protocol error results. If the actual device specified in device_info->device_spec does not contain buttons and a request affecting buttons is made, a BadMatch protocol error is generated. XkbExtensionDeviceNotify Event eventsXkbExtensionDeviceNotify XkbExtensionDeviceNotifyEvent The Xkb extension generates XkbExtensionDeviceNotify events when the status of an input extension device changes or when an attempt is made to use an Xkb feature that is not supported by a particular device. Events indicating an attempt to use an unsupported feature are delivered only to the client requesting the event. To track changes to the status of input extension devices or attempts to use unsupported features of a device, select to receive XkbExtensionDeviceNotify events by calling either XkbSelectEvents or XkbSelectEventDetails (see section 4.3). To receive XkbExtensionDeviceNotify events under all possible conditions, call XkbSelectEvents and pass XkbExtensionDeviceNotifyMask in both bits_to_change and values_for_bits. The XkbExtensionDeviceNotify event has no event details. However, you can call XkbSelectEventDetails using XkbExtensionDeviceNotify as the event_type and specifying XkbAllExtensionDeviceEventsMask in bits_to_change and values_for_bits. This has the same effect as a call to XkbSelectEvents. The structure for XkbExtensionDeviceNotify events is: typedef struct { int type; /* Xkb extension base event code */ unsigned long serial; /* X server serial number for event */ Bool send_event; /* True ⇒ synthetically generated */ Display * display; /* server connection where event generated */ Time time; /* server time when event generated */ int xkb_type; /* XkbExtensionDeviceNotifyEvent */ int device; /* Xkb device ID, will not be XkbUseCoreKbd */ unsigned int reason; /* reason for the event */ unsigned int supported; /* mask of supported features */ unsigned int unsupported; /* unsupported features this client attempted to use */ int first_btn; /* first button that changed */ int num_btns; /* number of buttons that changed */ unsigned int leds_defined; /* indicators with names or maps */ unsigned int led_state; /* current state of the indicators */ int led_class; /* feedback class for LED changes */ int led_id; /* feedback ID for LED changes */ } XkbExtensionDeviceNotifyEvent; The XkbExtensionDeviceNotify event has fields enabling it to report changes in the state (on/off) of all of the buttons for a device, but only for one LED feedback associated with a device. You will get multiple events when more than one LED feedback changes state or configuration. Tracking Changes to Extension Devices XkbDeviceChangesRec XkbDeviceLedChangesRec Changes to an Xkb extension device may be tracked by listening to XkbExtensionDeviceNotify events and accumulating the changes in an XkbDeviceChangesRec structure. The changes noted in the structure may then be used in subsequent operations to update either a server configuration or a local copy of an Xkb extension device configuration. The changes structure is defined as follows: typedef struct _XkbDeviceChanges { unsigned int changed; /* bits indicating what has changed */ unsigned short first_btn; /* number of first button which changed, if any */ unsigned short num_btns; /* number of buttons that have changed */ XkbDeviceLedChangesRec leds; } XkbDeviceChangesRec, *XkbDeviceChangesPtr; typedef struct _XkbDeviceLedChanges { unsigned short led_class; /* class of this indicator feedback bundle */ unsigned short led_id; /* ID of this indicator feedback bundle */ unsigned int names; /* bits indicating which names have changed */ unsigned int maps; /* bits indicating which maps have changed */ struct _XkbDeviceLedChanges *next; /* link to indicator change record for next set */ } XkbDeviceLedChangesRec, *XkbDeviceLedChangesPtr; A local description of the configuration and state of a device may be kept in an XkbDeviceInfoRec structure. The actual state or configuration of the device may change because of XkbSetDeviceInfo and XkbSetButtonActions requests made by clients or by user interaction with the device. The X server sends an XkbExtensionDeviceNotify event to all interested clients when the state of any buttons or indicators or the configuration of the buttons or indicators on the core keyboard or any input extension device changes. The event reports the state of indicators for a single indicator feedback, and the state of up to 128 buttons. If more than 128 buttons or more than one indicator feedback are changed, the additional buttons and indicator feedbacks are reported in subsequent events. Xkb provides functions with which you can track changes to input extension devices by noting the changes that were made and then requesting the changed information from the server. To note device changes reported in an XkbExtensionDeviceNotify event, use XkbNoteDeviceChanges. XkbNoteDeviceChanges void XkbNoteDeviceChanges XkbDeviceChangesPtr old XkbExtensionDeviceNotifyEvent *new unsigned int wanted old structure tracking state changes new event indicating state changes wanted mask indicating changes to note The wanted field specifies the changes that should be noted in old, and is composed of the bitwise inclusive OR of one or more of the masks from Table 21.1. The reason field of the event in new indicates the types of changes the event is reporting. XkbNoteDeviceChanges updates the XkbDeviceChangesRec specified by old with the changes that are both specified in wanted and contained in new->reason. To update a local copy of the state and configuration of an X input extension device with the changes previously noted in an XkbDeviceChangesRec structure, use XkbGetDeviceInfoChanges. To query the changes that have occurred in the button actions or indicator names and indicator maps associated with an input extension device, use XkbGetDeviceInfoChanges. XkbGetDeviceInfoChanges Status XkbGetDeviceInfoChanges Display *dpy XkbDeviceInfoPtr device_info XkbDeviceChangesPtr changes dpy connection to X server device_info structure to update with results changes contains notes of changes that have occurred The changes->changed field indicates which attributes of the device specified in changes->device have changed. The parameters describing the changes are contained in the other fields of changes. XkbGetDeviceInfoChanges uses that information to call XkbGetDeviceInfo to obtain the current status of those attributes that have changed. It then updates the local description of the device in device_info with the new information. To update the server’s description of a device with the changes noted in an XkbDeviceChangesRec, use XkbChangeDeviceInfo. XkbChangeDeviceInfo Bool XkbChangeDeviceInfo Display *dpy XkbDeviceInfoPtr device_info XkbDeviceChangesPtr changes dpy connection to X server device_info local copy of device state and configuration changes note specifying changes in device_info XkbChangeDeviceInfo updates the server’s description of the device specified in device_info->device_spec with the changes specified in changes and contained in device_info. The update is made by an XkbSetDeviceInfo request.
/* server connection where event generated */ Time tilibX11-1.6.3/specs/XKB/XKBlib-18.svg000064401431060000012000001167301247741723500167110ustar00alancstaff00002660200006 image/svg+xml Xkb-capableClientXkb-aware XlibXkb-unaware App Xkb-unawareClientCore kb XlibXkb-unaware App Xkb-awareClientXkb-aware XlibXkb-aware App state config kbmapping Xkb-awareServerMaintains Xkb State and Mapping,core kb mapping, but not core kb state Xkb kbmapping Xkb state Xkb Keycode Xkb Core protocol Xkb protocol Keyboard config config state kbmapping config Xkb ipodi:role="line">config
libX11-1.6.3/specs/XKB/ch13.xml000064401431060000012000003527131247741723500161120ustar00alancstaff00002660200006 Keyboard Geometry The Xkb description of a keyboard includes an optional keyboard geometry that describes the physical appearance of the keyboard. Keyboard geometry describes the shape, location, and color of all keyboard keys or other visible keyboard components such as indicators. The information contained in a keyboard geometry is sufficient to allow a client program to draw an accurate two-dimensional image of the keyboard. You can retrieve a keyboard geometry from an X server that supports Xkb, or you can allocate it from scratch and initialize it in a client program. The keyboard geometry need not have any correspondence with the physical keyboard that is connected to the X server. Geometry measurements are specified in mm/10 units. The origin (0,0) is in the top left corner of the keyboard image. A component’s own origin is also its upper left corner. In some cases a component needs to be drawn rotated. For example, a special keyboard may have a section of keys arranged in rows in a rectangular area, but the entire rectangle may not be in alignment with the rest of the keyboard, and instead, it is rotated from horizontal by 30°. Rotation for a geometry object is specified in 1/10° increments about its origin. An example of a keyboard with rotated sections is shown in Figure 13.1.
Rotated Keyboard Sections
Some geometry components include a priority, which indicates the order in which overlapping objects should be drawn. Objects should be drawn in order from highest priority (0) to lowest (255). XkbGeometryRec The keyboard geometry’s top-level description is stored in a XkbGeometryRec structure. This structure contains three types of information: Lists of items, not used to draw the basic keyboard, but indexed by the geometry descriptions that comprise the entire keyboard geometry (colors, geometry properties, key aliases, shapes) A number of singleton items that describe the keyboard as a whole (keyboard name, width and height, a color for the keyboard as a whole, and a color for keyboard key labels) A list of the keyboard’s sections and nonkey doodads The top-level geometry is described in more detail in the following. The lists of items used by components of the keyboard geometry description is as follows: The top-level keyboard geometry description includes a list of up to XkbGeomMaxColors (32) color names. A color name is a string whose interpretation is not specified by Xkb. The XkbColorRec structure provides a field for this name as well as a pixel field. The pixel field is a convenient place for an application to store a pixel value or color definition, if it needs to. All other geometry data structures refer to colors using their indices in this global list. The top-level keyboard geometry description includes a list of geometry properties. A geometry property associates an arbitrary string with an equally arbitrary name. Geometry properties can be used to provide hints to programs that display images of keyboards, but they are not interpreted by Xkb. No other geometry structures refer to geometry properties. As an example of a possible use of properties, consider the pause/break key on most PC keyboards: the break symbol is usually on the front of the key and is often a different color. A program might set a property to: LBL_PAUS = "{Pause/top/black,Break/front/red}" and use the property information to draw the key with a front label as well as a top label. The top-level keyboard geometry description includes a list of key aliases (see ). Key aliases allow the keyboard layout designer to assign multiple key names to a single key. Key aliases defined in the geometry component of a keyboard mapping override those defined in the keycodes component of the server database, which are stored in the XkbNamesRec (xkb->names). Therefore, consider the key aliases defined by the geometry before considering key aliases supplied by the keycodes. The top-level keyboard geometry description includes a list of shapes; other keyboard components refer to shapes by their index in this list. A shape consists of an arbitrary name of type Atom and one or more closed-polygon outlines. All points in an outline are specified relative to the origin of its enclosing shape, that is, whichever shape that contains this outline in its list of outlines. One outline is the primary outline. The primary outline is by default the first outline, or it can be optionally specified by the primary field in the XkbShapeRec structure. A keyboard display application can generate a simpler but still accurate keyboard image by displaying only the primary outlines for each shape. Nonrectangular keys must include a rectangular approximation as one of the outlines associated with the shape. The approximation is not normally displayed but can be used by very simple keyboard display applications to generate a recognizable but degraded image of the keyboard. The XkbGeometryRec top-level geometry description contains the following information that pertains to the keyboard as a whole: A keyboard symbolic name of type Atom to help users identify the keyboard. The width and height of the keyboard, in mm/10. For nonrectangular keyboards, the width and height describe the smallest bounding box that encloses the outline of the keyboard. The base color of the keyboard is the predominant color on the keyboard and is used as the default color for any components whose color is not explicitly specified. The label color is the color used to draw the labels on most of the keyboard keys. The label font is a string that describes the font used to draw labels on most keys; label fonts are arbitrary strings, because Xkb does not specify the format or name space for font names. The keyboard is subdivided into named sections of related keys and doodads. The sections and doodads on the keyboard are listed in the XkbGeometryRec top-level keyboard geometry description. A section is composed of keys that are physically together and logically related. Figure 13.2 shows a keyboard that is divided into four sections. A doodad describes some visible aspect of the keyboard that is not a key and is not a section.
Keyboard with Four Sections
Shapes and Outlines A shape, used to draw keyboard components and stored in a XkbShapeRec structure, has: An arbitrary name of type Atom. Bounds (two x and y coordinates) that describe the corners of a rectangle containing the shape’s top surface outline. A list of one or more outlines (described below). Optional pointers to a primary and an approximation outline (described below). If either of these pointers is NULL, the default primary/approximation outline is the first one in the list of outlines for the shape. An outline, stored in a XkbOutlineRec structure, is a list of one or more points that describes a single closed-polygon, as follows: A list with a single point describes a rectangle with one corner at the origin of the shape (0,0) and the opposite corner at the specified point. A list of two points describes a rectangle with one corner at the position specified by the first point and the opposite corner at the position specified by the second point. A list of three or more points describes an arbitrary polygon. If necessary, the polygon is automatically closed by connecting the last point in the list with the first. A nonzero value for the corner_radius field specifies that the corners of the polygon should be drawn as circles with the specified radius. All points in an outline are specified relative to the origin of the enclosing shape. Points in an outline may have negative values for the X and Y coordinate. One outline is the primary outline; a keyboard display application can generate a simple but still accurate keyboard image by displaying only the primary outlines for each shape. The default primary outline is the first in a shape’s list of outlines. If the primary field of the XkbShapeRec structure is not NULL, it points to the primary outline. A rectangular approximation must be included for nonrectangular keys as one of the outlines associated with the shape; the approximation is not normally displayed but can be used by very simple keyboard display applications to generate a recognizable but degraded image of the keyboard. Sections As previously noted, a keyboard is subdivided into sections of related keys. Each section has its own coordinate system — if a section is rotated, the coordinates of any components within the section are interpreted relative to the edges that were on the top and left before rotation. The components that make up a section, stored in a XkbSectionRec, include: An arbitrary name of type Atom. A priority, to indicate drawing order. 0 is the highest priority, 255 the lowest. Origin of the section, relative to the origin of the keyboard. The width and height and the angle of rotation. A list of rows. A row is a list of horizontally or vertically adjacent keys. Horizontal rows parallel the (prerotation) top of the section, and vertical rows parallel the (prerotation) left of the section. All keys in a horizontal row share a common top coordinate; all keys in a vertical row share a left coordinate. Figure 13.3 shows the alpha section from the keyboard shown in Figure 13.2, divided into rows. Rows and keys are defined below.
Rows in a Section
An optional list of doodads; any type of doodad can be enclosed within a section. Position and angle of rotation are relative to the origin and angle of rotation of the sections that contain them. Priority for doodads in a section is relative to the other components of the section, not to the keyboard as a whole. An optional overlay with a name of type Atom and a list of overlay rows (described below). Bounds (two x and y coordinates) that describe the corners of a rectangle containing the entire section.
Rows and Keys A row description (XkbRowRec) consists of the coordinates of its origin relative to its enclosing section, a flag indicating whether the row is horizontal or vertical, and a list of keys in the row. A key description (XkbKeyRec) consists of a key name, a shape, a key color, and a gap. The key name should correspond to one of the keys named in the keyboard names description, the shape specifies the appearance of the key, and the key color specifies the color of the key (not the label on the key; the label color is stored in the XkbGeometryRec). Keys are normally drawn immediately adjacent to one another from left to right (or top to bottom) within a row. The gap field specifies the distance between a key and its predecessor. Doodads Doodads can be global to the keyboard or part of a section. Doodads have symbolic names of arbitrary length. The only doodad name whose interpretation is specified by Xkb is Edges, which, if present, describes the outline of the entire keyboard. Each doodad’s origin is stored in fields named left and top, which are the coordinates of the doodad’s origin relative to its enclosing object, whether it be a section or the top-level keyboard. The priority for doodads that are listed in the top-level geometry is relative to the other doodads listed in the top-level geometry and the sections listed in the top-level geometry. The priority for doodads listed in a section are relative to the other components of the section. Each doodad is stored in a structure with a type field, which specifies the type of doodad. Xkb supports five types of doodads: An indicator doodad describes one of the physical keyboard indicators. Indicator doodads specify the shape of the indicator, the indicator color when it is lit (on_color) and the indicator color when it is dark (off_color). An outline doodad describes some aspect of the keyboard to be drawn as one or more hollow, closed polygons. Outline doodads specify the shape, color, and angle of rotation about the doodad origin at which they should be drawn. A solid doodad describes some aspect of the keyboard to be drawn as one or more filled polygons. Solid doodads specify the shape, color, and angle of rotation about the doodad origin at which they should be drawn. A text doodad describes a text label somewhere on the keyboard. Text doodads specify the label string, the font and color to use when drawing the label, and the angle of rotation of the doodad about its origin. A logo doodad is a catch-all, which describes some other visible element of the keyboard. A logo doodad is essentially an outline doodad with an additional symbolic name that describes the element to be drawn. If a keyboard display program recognizes the symbolic name, it can draw something appropriate within the bounding region of the shape specified in the doodad. If the symbolic name does not describe a recognizable image, it should draw an outline using the specified shape, outline, and angle of rotation. The Xkb extension does not specify the interpretation of logo names. The structures these doodads are stored in and the values of the type fields are shown in Table 13.1. Doodad Types Doodad Structure Type indicator doodad XkbIndicatorDoodadRec XkbIndicatorDoodad outline doodad XkbShapeDoodadRec XkbOutlineDoodad solid doodad XkbShapeDoodadRec XkbSolidDoodad text doodad XkbTextDoodadRec XkbTextDoodad logo doodad XkbLogoDoodadRec XkbLogoDoodad
Overlay Rows and Overlay Keys An overlay row (XkbOverlayRowRec) contains a pointer to the row it overlays and a list of overlay keys. Each overlay key definition (XkbOverlayKeyRec) indicates a key that can yield multiple keycodes and consists of a field named under, which specifies the primary name of the key and a field named over, which specifies the name for the key when the overlay keycode is selected. The key specified in under must be a member of the section that contains the overlay key definition, while the key specified in over must not be. Drawing a Keyboard Representation To draw a representation of the keyboard, draw in the following order: Draw the top-level keyboard as a rectangle, using its width and height. For each component (section or doodad) of the top-level geometry, in priority order: If component is a section For each row, in the order it appears in the section Draw keys in the order they appear in the row Draw doodads within the section in priority order. Else draw doodad Geometry Data Structures In the following figures, a solid arrow denotes a pointer to an array of structures or a singleton structure. A dotted arrow denotes an index or a pointer into the array.
Xkb Geometry Data Structures
Xkb Geometry Data Structures (Doodads)
Xkb Geometry Data Structures (Overlays)
typedef struct _XkbGeometry { /* top-level keyboard geometry structure */ Atom name; /* keyboard name */ unsigned short width_mm; /* keyboard width in mm/10 */ unsigned short height_mm; /* keyboard height in mm/10 */ char * label_font; /* font for key labels */ XkbColorPtr label_color; /* color for key labels - pointer into colors array */ XkbColorPtr base_color; /* color for basic keyboard - pointer into colors array */ unsigned short sz_properties; /* size of properties array */ unsigned short sz_colors; /* size of colors array */ unsigned short sz_shapes; /* size of shapes array */ unsigned short sz_sections; /* size of sections array */ unsigned short sz_doodads; /* size of doodads array */ unsigned short sz_key_aliases; /* size of key aliases array */ unsigned short num_properties; /* number of properties in the properties array */ unsigned short num_colors; /* number of colors in the colors array */ unsigned short num_shapes; /* number of shapes in the shapes array */ unsigned short num_sections; /* number of sections in the sections array */ unsigned short num_doodads; /* number of doodads in the doodads array */ unsigned short num_key_aliases; /* number of key aliases in the key_aliases array */ XkbPropertyPtr properties; /* properties array */ XkbColorPtr colors; /* colors array */ XkbShapePtr shapes; /* shapes array */ XkbSectionPtr sections; /* sections array */ XkbDoodadPtr doodads; /* doodads array */ XkbKeyAliasPtr key_aliases; /* key aliases array */ } XkbGeometryRec, *XkbGeometryPtr; The doodads array is only for doodads not contained in any of the sections that has its own doodads. The key aliases contained in the key_aliases array take precedence over any defined in the keycodes component of the keyboard description. typedef struct _XkbProperty { char * name; /* property name */ char * value; /* property value */ } XkbPropertyRec, *XkbPropertyPtr; typedef struct _XkbColor { unsigned int pixel; /* color */ char * spec; /* color name */ } XkbColorRec, *XkbColorPtr; typedef struct _XkbKeyAliasRec { char real[XkbKeyNameLength]; /* real name of the key */ char alias[XkbKeyNameLength]; /* alias for the key */ } XkbKeyAliasRec, *XkbKeyAliasPtr; typedef struct _XkbPoint { /* x, y coordinates */ short x; short y; } XkbPointRec, *XkbPointPtr; typedef struct _XkbOutline { unsigned short num_points; /* number of points in the outline */ unsigned short sz_points; /* size of the points array */ unsigned short corner_radius; /* draw corners as circles with this radius */ XkbPointPtr points; /* array of points defining the outline */ } XkbOutlineRec, *XkbOutlinePtr; typedef struct _XkbBounds { short x1, y1; /* upper left corner of the bounds, in mm/10 */ short x2, y2; /* lower right corner of the bounds, in mm/10 */ } XkbBoundsRec, *XkbBoundsPtr; typedef struct _XkbShape { Atom name; /* shape’s name */ unsigned short num_outlines; /* number of outlines for the shape */ unsigned short sz_outlines; /* size of the outlines array */ XkbOutlinePtr outlines; /* array of outlines for the shape */ XkbOutlinePtr approx; /* pointer into the array to the approximating outline */ XkbOutlinePtr primary; /* pointer into the array to the primary outline */ XkbBoundsRec bounds; /* bounding box for the shape; encompasses all outlines */ } XkbShapeRec, *XkbShapePtr; If approx and/or primary is NULL, the default value is used. The default primary outline is the first element in the outlines array, as is the default approximating outline. typedef struct _XkbKey { /* key in a row */ XkbKeyNameRec name; /* key name */ short gap; /* gap in mm/10 from previous key in row */ unsigned char shape_ndx; /* index of shape for key */ unsigned char color_ndx; /* index of color for key body */ } XkbKeyRec, *XkbKeyPtr; typedef struct _XkbRow { /* row in a section */ short top; /* top coordinate of row origin, relative to section’s origin */ short left; /* left coordinate of row origin, relative to section’s origin */ unsigned short num_keys; /* number of keys in the keys array */ unsigned short sz_keys; /* size of the keys array */ int vertical; /* True ⇒vertical row, False ⇒horizontal row */ XkbKeyPtr keys; /* array of keys in the row */ XkbBoundsRec bounds; /* bounding box for the row */ } XkbRowRec, *XkbRowPtr; top and left are in mm/10. typedef struct _XkbOverlayRec { Atom name; /* overlay name */ XkbSectionPtr section_under; /* the section under this overlay */ unsigned short num_rows; /* number of rows in the rows array */ unsigned short sz_rows; /* size of the rows array */ XkbOverlayRowPtr rows; /* array of rows in the overlay */ XkbBoundsPtr bounds; /* bounding box for the overlay */ } XkbOverlayRec, *XkbOverlayPtr; typedef struct _XkbOverlayRow { unsigned short row_under; /* index into the row under this overlay row */ unsigned short num_keys; /* number of keys in the keys array */ unsigned short sz_keys; /* size of the keys array */ XkbOverlayKeyPtr keys; /* array of keys in the overlay row */ } XkbOverlayRowRec, *XkbOverlayRowPtr; row_under is an index into the array of rows in the section under this overlay. The section under this overlay row is the one pointed to by section_under in this overlay row’s XkbOverlayRec. typedef struct _XkbOverlayKey { XkbKeyNameRec over; /* name of this overlay key */ XkbKeyNameRec under; /* name of the key under this overlay key */ } XkbOverlayKeyRec, *XkbOverlayKeyPtr; typedef struct _XkbSection { Atom name; /* section name */ unsigned char priority; /* drawing priority, 0⇒highest, 255⇒lowest */ short top; /* top coordinate of section origin */ short left; /* left coordinate of row origin */ unsigned short width; /* section width, in mm/10 */ unsigned short height; /* section height, in mm/10 */ short angle; /* angle of section rotation, counterclockwise */ unsigned short num_rows; /* number of rows in the rows array */ unsigned short num_doodads; /* number of doodads in the doodads array */ unsigned short num_overlays; /* number of overlays in the overlays array */ unsigned short sz_rows; /* size of the rows array */ unsigned short sz_doodads; /* size of the doodads array */ unsigned short sz_overlays; /* size of the overlays array */ XkbRowPtr rows; /* section rows array */ XkbDoodadPtr doodads; /* section doodads array */ XkbBoundsRec bounds; /* bounding box for the section, before rotation */ XkbOverlayPtr overlays; /* section overlays array */ } XkbSectionRec, *XkbSectionPtr; top and left are the origin of the section, relative to the origin of the keyboard, in mm/10. angle is in 1/10 degrees. DoodadRec Structures The doodad arrays in the XkbGeometryRec and the XkbSectionRec may contain any of the doodad structures and types shown in Table 13.1. The doodad structures form a union: typedef union _XkbDoodad { XkbAnyDoodadRec any; XkbShapeDoodadRec shape; XkbTextDoodadRec text; XkbIndicatorDoodadRec indicator; XkbLogoDoodadRec logo; } XkbDoodadRec, *XkbDoodadPtr; The top and left coordinates of each doodad are the coordinates of the origin of the doodad relative to the keyboard’s origin if the doodad is in the XkbGeometryRec doodad array, and with respect to the section’s origin if the doodad is in a XkbSectionRec doodad array. The color_ndx or on_color_ndx and off_color_ndx fields are color indices into the XkbGeometryRec’s color array and are the colors to draw the doodads with. Similarly, the shape_ndx fields are indices into the XkbGeometryRec’s shape array. typedef struct _XkbShapeDoodad { Atom name; /* doodad name */ unsigned char type; /* XkbOutlineDoodad or XkbSolidDoodad */ unsigned char priority; /* drawing priority, 0⇒highest, 255⇒lowest */ short top; /* top coordinate, in mm/10 */ short left; /* left coordinate, in mm/10 */ short angle; /* angle of rotation, clockwise, in 1/10 degrees */ unsigned short color_ndx; /* doodad color */ unsigned short shape_ndx; /* doodad shape */ } XkbShapeDoodadRec, *XkbShapeDoodadPtr; typedef struct _XkbTextDoodad { Atom name; /* doodad name */ unsigned char type; /* XkbTextDoodad */ unsigned char priority; /* drawing priority, 0⇒highest, 255⇒lowest */ short top; /* top coordinate, in mm/10 */ short left; /* left coordinate, in mm/10 */ short angle; /* angle of rotation, clockwise, in 1/10 degrees */ short width; /* width in mm/10 */ short height; /* height in mm/10 */ unsigned short color_ndx; /* doodad color */ char * text; /* doodad text */ char * font; /* arbitrary font name for doodad text */ } XkbTextDoodadRec, *XkbTextDoodadPtr; typedef struct _XkbIndicatorDoodad { Atom name; /* doodad name */ unsigned char type; /* XkbIndicatorDoodad */ unsigned char priority; /* drawing priority, 0⇒highest, 255⇒lowest */ short top; /* top coordinate, in mm/10 */ short left; /* left coordinate, in mm/10 */ short angle; /* angle of rotation, clockwise, in 1/10 degrees */ unsigned short shape_ndx; /* doodad shape */ unsigned short on_color_ndx; /* color for doodad if indicator is on */ unsigned short off_color_ndx;/* color for doodad if indicator is off */ } XkbIndicatorDoodadRec, *XkbIndicatorDoodadPtr; typedef struct _XkbLogoDoodad { Atom name; /* doodad name */ unsigned char type; /* XkbLogoDoodad */ unsigned char priority; /* drawing priority, 0⇒highest, 255⇒lowest */ short top; /* top coordinate, in mm/10 */ short left; /* left coordinate, in mm/10 */ short angle; /* angle of rotation, clockwise, in 1/10 degrees */ unsigned short color_ndx; /* doodad color */ unsigned short shape_ndx; /* doodad shape */ char * logo_name; /* text for logo */ } XkbLogoDoodadRec, *XkbLogoDoodadPtr
Getting Keyboard Geometry From the Server You can load a keyboard geometry as part of the keyboard description returned by XkbGetKeyboard. However, if a keyboard description has been previously loaded, you can instead obtain the geometry by calling the XkbGetGeometry. In this case, the geometry returned is the one associated with the keyboard whose device ID is contained in the keyboard description. To load a keyboard geometry if you already have the keyboard description, use XkbGetGeometry. XkbGetGeometry Status XkbGetGeometry Display *dpy XkbDescPtr xkb dpy connection to the X server xkb keyboard description that contains the ID for the keyboard and into which the geometry should be loaded XkbGetGeometry can return BadValue, BadImplementation, BadName, BadAlloc, or BadLength errors or Success if it succeeds. It is also possible to load a keyboard geometry by name. The X server maintains a database of keyboard components (see ). To load a keyboard geometry description from this database by name, use XkbGetNamedGeometry. XkbGetNamedGeometry Status XkbGetNamedGeometry Display *dpy XkbDescPtr xkb Atom name dpy connection to the X server xkb keyboard description into which the geometry should be loaded name name of the geometry to be loaded XkbGetNamedGeometry can return BadName if the name cannot be found. Using Keyboard Geometry Xkb provides a number of convenience functions to help use a keyboard geometry. These include functions to return the bounding box of a shape’s top surface and to update the bounding box of a shape row or section. A shape is made up of a number of outlines. Each outline is a polygon made up of a number of points. The bounding box of a shape is a rectangle that contains all the outlines of that shape.
Key Surface, Shape Outlines, and Bounding Box
To determine the bounding box of the top surface of a shape, use XkbComputeShapeTop. XkbComputeShapeTop Bool XkbComputeShapeTop XkbShapePtr shape XkbBoundsPtr bounds_rtrn shape shape to be examined bounds_rtrn backfilled with the bounding box for the shape XkbComputeShapeTop returns a BoundsRec that contains two x and y coordinates. These coordinates describe the corners of a rectangle that contains the outline that describes the top surface of the shape. The top surface is defined to be the approximating outline if the approx field of shape is not NULL. If approx is NULL, the top surface is defined as the last outline in the shape’s array of outlines. XkbComputeShapeTop returns False if shape is NULL or if there are no outlines for the shape; otherwise, it returns True. A ShapeRec contains a BoundsRec that describes the bounds of the shape. If you add or delete an outline to or from a shape, the bounding box must be updated. To update the bounding box of a shape, use XkbComputeShapeBounds. XkbComputeShapeBounds Bool XkbComputeShapeBounds XkbShapePtr shape shape shape to be examined XkbComputeShapeBounds updates the BoundsRec contained in the shape by examining all the outlines of the shape and setting the BoundsRec to the minimum x and minimum y, and maximum x and maximum y values found in those outlines. XkbComputeShapeBounds returns False if shape is NULL or if there are no outlines for the shape; otherwise, it returns True. If you add or delete a key to or from a row, or if you update the shape of one of the keys in that row, you may need to update the bounding box of that row. To update the bounding box of a row, use XkbComputeRowBounds. XkbComputeRowBounds Bool XkbComputeRowBounds XkbGeometryPtr geom XkbSectionPtr section XkbRowPtr row geom geometry that contains the section section section that contains the row row row to be examined and updated XkbComputeRowBounds checks the bounds of all keys in the row and updates the bounding box of the row if necessary. XkbComputeRowBounds returns False if any of the arguments is NULL; otherwise, it returns True. If you add or delete a row to or from a section, or if you change the geometry of any of the rows in that section, you may need to update the bounding box for that section. To update the bounding box of a section, use XkbComputeSectionBounds. XkbComputeSectionBounds Bool XkbComputeSectionBounds XkbGeometryPtr geom XkbSectionPtr section geom geometry that contains the section section section to be examined and updated XkbComputeSectionBounds examines all the rows of the section and updates the bounding box of that section so that it contains all rows. XkbComputeSectionBounds returns False if any of the arguments is NULL; otherwise, it returns True. Keys that can generate multiple keycodes may be associated with multiple names. Such keys have a primary name and an alternate name. To find the alternate name by using the primary name for a key that is part of an overlay, use XkbFindOverlayForKey. XkbFindOverlayForKey char *XkbFindOverlayForKey XkbGeometryPtr geom XkbSectionPtr section char *under geom geometry that contains the section section section to be searched for matching keys under .primary name of the key to be considered XkbFindOverlayForKey uses the primary name of the key, under, to look up the alternate name, which it returns.
Adding Elements to a Keyboard Geometry Xkb provides functions to add a single new element to the top-level keyboard geometry. In each case the num_* fields of the corresponding structure is incremented by 1. These functions do not change sz_* unless there is no more room in the array. Some of these functions fill in the values of the element’s structure from the arguments. For other functions, you must explicitly write code to fill the structure’s elements. The top-level geometry description includes a list of geometry properties. A geometry property associates an arbitrary string with an equally arbitrary name. Programs that display images of keyboards can use geometry properties as hints, but they are not interpreted by Xkb. No other geometry structures refer to geometry properties. To add one property to an existing keyboard geometry description, use XkbAddGeomProperty. XkbAddGeomProperty XkbPropertyPtr XkbAddGeomProperty XkbGeometryPtr geom char *name char *value geom geometry to be updated name name of the new property value value for the new property XkbAddGeomProperty adds one property with the specified name and value to the keyboard geometry specified by geom. XkbAddGeomProperty returns NULL if any of the parameters is empty or if it was not able to allocate space for the property. To allocate space for an arbitrary number of properties, use the XkbAllocGeomProps function. To add one key alias to an existing keyboard geometry description, use XkbAddGeomKeyAlias. XkbAddGeomKeyAlias XkbKeyAliasPtr XkbAddGeomKeyAlias XkbGeometryPtr geom char *alias char *real geom geometry to be updated alias alias to be added real real name to be bound to the new alias XkbAddGeomKeyAlias adds one key alias with the value alias to the geometry geom, and associates it with the key whose real name is real. XkbAddGeomKeyAlias returns NULL if any of the parameters is empty or if it was not able to allocate space for the alias. To allocate space for an arbitrary number of aliases, use the XkbAllocGeomKeyAliases function. To add one color name to an existing keyboard geometry description, use XkbAddGeomColor. XkbAddGeomColor XkbColorPtr XkbAddGeomColor XkbGeometryPtr geom char *spec unsigned int pixel geom geometry to be updated spec color to be added pixel color to be added XkbAddGeomColor adds the specified color name and pixel to the specified geometry geom. The top-level geometry description includes a list of up to MaxColors (32) color names. A color name is a string whose interpretation is not specified by Xkb and neither is the pixel value’s interpretation. All other geometry data structures refer to colors using their indices in this global list or pointers to colors in this list. XkbAddGeomColor returns NULL if any of the parameters is empty or if it was not able to allocate space for the color. To allocate space for an arbitrary number of colors to a geometry, use the XkbAllocGeomColors function. To add one outline to an existing shape, use XkbAddGeomOutline. XkbAddGeomOutline XkbOutlinePtr XkbAddGeomOutline XkbShapePtr shape int sz_points shape shape to be updated sz_points number of points to be reserved An outline consists of an arbitrary number of points. XkbAddGeomOutline adds an outline to the specified shape by reserving sz_points points for it. The new outline is allocated and zeroed. XkbAddGeomOutline returns NULL if any of the parameters is empty or if it was not able to allocate space. To allocate space for an arbitrary number of outlines to a shape, use XkbAllocGeomOutlines. To add a shape to a keyboard geometry, use XkbAddGeomShape. XkbAddGeomShape XkbShapePtr XkbAddGeomShape XkbGeometryPtr geom Atom name int sz_outlines geom geometry to be updated name name of the new shape sz_outlines number of outlines to be reserved A geometry contains an arbitrary number of shapes, each of which is made up of an arbitrary number of outlines. XkbAddGeomShape adds a shape to a geometry geom by allocating space for sz_outlines outlines for it and giving it the name specified by name. If a shape with name name already exists in the geometry, a pointer to the existing shape is returned. XkbAddGeomShape returns NULL if any of the parameters is empty or if it was not able to allocate space. To allocate space for an arbitrary number of geometry shapes, use XkbAllocGeomShapes. To add one key at the end of an existing row of keys, use XkbAddGeomKey. XkbAddGeomKey XkbKeyPtr XkbAddGeomKey XkbRowPtr row row row to be updated Keys are grouped into rows. XkbAddGeomKey adds one key to the end of the specified row. The key is allocated and zeroed. XkbAddGeomKey returns NULL if row is empty or if it was not able to allocate space for the key. To allocate space for an arbitrary number of keys to a row, use XkbAllocGeomKeys. To add one section to an existing keyboard geometry, use XkbAddGeomSection. XkbAddGeomSection XkbSectionPtr XkbAddGeomSection XkbGeometryPtr geom Atom name int sz_rows int sz_doodads int sz_overlays geom geometry to be updated name name of the new section sz_rows number of rows to reserve in the section sz_doodads number of doodads to reserve in the section sz_overlays number of overlays to reserve in the section A keyboard geometry contains an arbitrary number of sections. XkbAddGeomSection adds one section to an existing keyboard geometry geom. The new section contains space for the number of rows, doodads, and overlays specified by sz_rows, sz_doodads, and sz_overlays. The new section is allocated and zeroed and given the name specified by name. If a section with name name already exists in the geometry, a pointer to the existing section is returned. XkbAddGeomSection returns NULL if any of the parameters is empty or if it was not able to allocate space for the section. To allocate space for an arbitrary number of sections to a geometry, use XkbAllocGeomSections. To add a row to a section, use XkbAddGeomRow. XkbAddGeomRow XkbRowPtr XkbAddGeomRow XkbSectionPtr section int sz_keys section section to be updated sz_keys number of keys to be reserved One of the components of a keyboard geometry section is one or more rows of keys. XkbAddGeomRow adds one row to the specified section. The newly created row contains space for the number of keys specified in sz_keys. They are allocated and zeroed, but otherwise uninitialized. XkbAddGeomRow returns NULL if any of the parameters is empty or if it was not able to allocate space for the row. To allocate space for an arbitrary number of rows to a section, use the XkbAllocGeomRows function. To add one doodad to a section of a keyboard geometry or to the top-level geometry, use XkbAddGeomDoodad. XkbAddGeomDoodad XkbDoodadPtr XkbAddGeomDoodad XkbGeometryPtr geom XkbSectionPtr section Atom name geom geometry to which the doodad is added section section, if any, to which the doodad is added name name of the new doodad A doodad describes some visible aspect of the keyboard that is not a key and is not a section. XkbAddGeomDoodad adds a doodad with name specified by name to the geometry geom if section is NULL or to the section of the geometry specified by section if section is not NULL. XkbAddGeomDoodad returns NULL if any of the parameters is empty or if it was not able to allocate space for the doodad. If there is already a doodad with the name name in the doodad array for the geometry (if section is NULL) or the section (if section is non- NULL), a pointer to that doodad is returned. To allocate space for an arbitrary number of doodads to a section, use the XkbAllocGeomSectionDoodads function. To allocate space for an arbitrary number of doodads to a keyboard geometry, use the XkbAllocGeomDoodads function. To add one overlay to a section, use XkbAddGeomOverlay. XkbAddGeomOverlay XkbOverlayPtr XkbAddGeomOverlay XkbSectionPtr section Atom name int sz_rows section section to which an overlay will be added name name of the overlay sz_rows number of rows to reserve in the overlay XkbAddGeomOverlay adds an overlay with the specified name to the specified section. The new overlay is created with space allocated for sz_rows rows. If an overlay with name name already exists in the section, a pointer to the existing overlay is returned. XkbAddGeomOverlay returns NULL if any of the parameters is empty or if it was not able to allocate space for the overlay. To allocate space for an arbitrary number of overlays to a section, use the XkbAllocGeomOverlay function. To add a row to an existing overlay, use XkbAddGeomOverlayRow. XkbAddGeomOverlayRow XkbOverlayRowPtr XkbAddGeomOverlayRow XkbOverlayPtr overlay XkbRowPtr row_under int sz_keys overlay overlay to be updated row_under row to be overlayed in the section overlay overlays sz_keys number of keys to reserve in the row XkbAddGeomOverlayRow adds one row to the overlay. The new row contains space for sz_keys keys. If row_under specifies a row that doesn’t exist on the underlying section, XkbAddGeomOverlayRow returns NULL and doesn’t change the overlay. XkbAddGeomOverlayRow returns NULL if any of the parameters is empty or if it was not able to allocate space for the overlay. To add a key to an existing overlay row, use XkbAddGeomOverlayKey. XkbAddGeomOverlayKey XkbOverlayKeyPtr XkbAddGeomOverlayKey XkbOverlayPtr overlay XkbRowPtr row char *under overlay overlay to be updated row row in overlay to be updated under primary name of the key to be considered XkbAddGeomOverlayKey adds one key to the row in the overlay. If there is no key named under in the row of the underlying section, XkbAddGeomOverlayKey returns NULL. Allocating and Freeing Geometry Components Xkb provides a number of functions to allocate and free subcomponents of a keyboard geometry. Use these functions to create or modify keyboard geometries. Note that these functions merely allocate space for the new element(s), and it is up to you to fill in the values explicitly in your code. These allocation functions increase sz_* but never touch num_* (unless there is an allocation failure, in which case they reset both sz_* and num_* to zero). These functions return Success if they succeed, BadAlloc if they are not able to allocate space, or BadValue if a parameter is not as expected. To allocate space for an arbitrary number of outlines to a shape, use XkbAllocGeomOutlines. XkbAllocGeomOutlines Status XkbAllocGeomOutlines XkbShapePtr shape int num_needed shape shape for which outlines should be allocated num_needed number of new outlines required XkbAllocGeomOutlines allocates space for num_needed outlines in the specified shape. The outlines are not initialized. To free geometry outlines, use XkbFreeGeomOutlines. XkbFreeGeomOutlines void XkbFreeGeomOutlines XkbShapePtr shape int first int count Bool free_all shape shape in which outlines should be freed first first outline to be freed count number of outlines to be freed free_all True ⇒ all outlines are freed If free_all is True, all outlines are freed regardless of the value of first or count. Otherwise, count outlines are freed beginning with the one specified by first. To allocate space for an arbitrary number of keys to a row, use XkbAllocGeomKeys. XkbAllocGeomKeys Status XkbAllocGeomKeys XkbRowPtr row int num_needed row row to which keys should be allocated num_needed number of new keys required XkbAllocGeomKeys allocates num_needed keys and adds them to the row. No initialization of the keys is done. To free geometry keys, use XkbFreeGeomKeys. XkbFreeGeomKeys void XkbFreeGeomKeys XkbRowPtr row int first int count Bool free_all row row in which keys should be freed first first key to be freed count number of keys to be freed free_all True ⇒ all keys are freed If free_all is True, all keys are freed regardless of the value of first or count. Otherwise, count keys are freed beginning with the one specified by first. To allocate geometry properties, use XkbAllocGeomProps. XkbAllocGeomProps Status XkbAllocGeomProps XkbGeometryPtr geom int num_needed geom geometry for which properties should be allocated num_needed number of new properties required XkbAllocGeomProps allocates space for num_needed properties and adds them to the specified geometry geom. No initialization of the properties is done. A geometry property associates an arbitrary string with an equally arbitrary name. Geometry properties can be used to provide hints to programs that display images of keyboards, but they are not interpreted by Xkb. No other geometry structures refer to geometry properties. To free geometry properties, use XkbFreeGeomProperties. XkbFreeGeomProperties void XkbFreeGeomProperties XkbGeometryPtr geom int first int count Bool free_all geom geometry in which properties should be freed first first property to be freed count number of properties to be freed free_all True ⇒ all properties are freed If free_all is True, all properties are freed regardless of the value of first or count. Otherwise, count properties are freed beginning with the one specified by first. To allocate geometry key aliases, use XkbAllocGeomKeyAliases. XkbAllocGeomKeyAliases Status XkbAllocGeomKeyAliases XkbGeometryPtr geom int num_needed geom geometry for which key aliases should be allocated num_needed number of new key aliases required XkbAllocGeomKeyAliases allocates space for num_needed key aliases and adds them to the specified geometry geom. A key alias is a pair of strings that associates an alternate name for a key with the real name for that key. To free geometry key aliases, use XkbFreeGeomKeyAliases. XkbFreeGeomKeyAliases void XkbFreeGeomKeyAliases XkbGeometryPtr geom int first int count Bool free_all geom geometry in which key aliases should be freed first first key alias to be freed count number of key aliases to be freed free_all True ⇒ all key aliases are freed If free_all is True, all aliases in the top level of the specified geometry geom are freed regardless of the value of first or count. Otherwise, count aliases in geom are freed beginning with the one specified by first. To allocate geometry colors, use XkbAllocGeomColors. XkbAllocGeomColors Status XkbAllocGeomColors XkbGeometryPtr geom int num_needed geom geometry for which colors should be allocated num_needed number of new colors required. XkbAllocGeomColors allocates space for num_needed colors and adds them to the specified geometry geom. A color name is a string whose interpretation is not specified by Xkb. All other geometry data structures refer to colors using their indices in this global list or pointers to colors in this list. To free geometry colors, use XkbFreeGeomColors. XkbFreeGeomColors void XkbFreeGeomColors XkbGeometryPtr geom int first int count Bool free_all geom geometry in which colors should be freed first first color to be freed count number of colors to be freed free_all True ⇒ all colors are freed If free_all is True, all colors are freed regardless of the value of first or count. Otherwise, count colors are freed beginning with the one specified by first. To allocate points in an outline, use XkbAllocGeomPoints. XkbAllocGeomPoints Status XkbAllocGeomPoints XkbOutlinePtr outline int num_needed outline outline for which points should be allocated num_needed number of new points required XkbAllocGeomPoints allocates space for num_needed points in the specified outline. The points are not initialized. To free points in a outline, use XkbFreeGeomPoints. XkbFreeGeomPoints void XkbFreeGeomPoints XkbOutlinePtr outline int first int count Bool free_all outline outline in which points should be freed first first point to be freed. count number of points to be freed free_all True ⇒ all points are freed If free_all is True, all points are freed regardless of the value of first and count. Otherwise, the number of points specified by count are freed, beginning with the point specified by first in the specified outline. To allocate space for an arbitrary number of geometry shapes, use XkbAllocGeomShapes. XkbAllocGeomShapes Status XkbAllocGeomShapes XkbGeometryPtr geom int num_needed geom geometry for which shapes should be allocated num_needed number of new shapes required XkbAllocGeomShapes allocates space for num_needed shapes in the specified geometry geom. The shapes are not initialized. To free geometry shapes, use XkbFreeGeomShapes. XkbFreeGeomShapes void XkbFreeGeomShapes XkbGeometryPtr geom int first int count Bool free_all geom geometry in which shapes should be freed first first shape to be freed count number of shapes to be freed free_all True ⇒ all shapes are freed If free_all is True, all shapes in the geometry are freed regardless of the values of first and count. Otherwise, count shapes are freed, beginning with the shape specified by first. To allocate geometry sections, use XkbAllocGeomSections. XkbAllocGeomSections Status XkbAllocGeomSections XkbGeometryPtr geom int num_needed geom geometry for which sections should be allocated num_needed number of new sections required XkbAllocGeomSections allocates num_needed sections and adds them to the geometry geom. No initialization of the sections is done. To free geometry sections, use XkbFreeGeomSections. XkbFreeGeomSections void XkbFreeGeomSections XkbGeometryPtr geom int first int count Bool free_all geom geometry in which sections should be freed first first section to be freed. count number of sections to be freed free_all True ⇒ all sections are freed If free_all is True, all sections are freed regardless of the value of first and count. Otherwise, the number of sections specified by count are freed, beginning with the section specified by first in the specified geometry. To allocate rows in a section, use XkbAllocGeomRows. XkbAllocGeomRows Status XkbAllocGeomRows XkbSectionPtr section int num_needed section section for which rows should be allocated num_needed number of new rows required XkbAllocGeomRows allocates num_needed rows and adds them to the section. No initialization of the rows is done. To free rows in a section, use XkbFreeGeomRows. XkbFreeGeomRows void XkbFreeGeomRows XkbSectionPtr section int first int count Bool free_all section section in which rows should be freed first first row to be freed. count number of rows to be freed free_all True ⇒ all rows are freed If free_all is True, all rows are freed regardless of the value of first and count. Otherwise, the number of rows specified by count are freed, beginning with the row specified by first in the specified section. To allocate overlays in a section, use XkbAllocGeomOverlays. XkbAllocGeomOverlays Status XkbAllocGeomOverlays XkbSectionPtr section int num_needed section section for which overlays should be allocated num_needed number of new overlays required XkbAllocGeomRows allocates num_needed overlays and adds them to the section. No initialization of the overlays is done. To free rows in an section, use XkbFreeGeomOverlays. XkbFreeGeomOverlays void XkbFreeGeomOverlays XkbSectionPtr section int first int count Bool free_all section section in which overlays should be freed first first overlay to be freed. count number of overlays to be freed free_all True ⇒ all overlays are freed If free_all is True, all overlays are freed regardless of the value of first and count. Otherwise, the number of overlays specified by count are freed, beginning with the overlay specified by first in the specified section. To allocate rows in a overlay, use XkbAllocGeomOverlayRows. XkbAllocGeomOverlayRows Status XkbAllocGeomOverlayRows XkbSectionPtr overlay int num_needed overlay section for which rows should be allocated num_needed number of new rows required XkbAllocGeomOverlayRows allocates num_needed rows and adds them to the overlay. No initialization of the rows is done. To free rows in an overlay, use XkbFreeGeomOverlayRows. XkbFreeGeomOverlayRows void XkbFreeGeomOverlayRows XkbSectionPtr overlay int first int count Bool free_all overlay section in which rows should be freed first first row to be freed. count number of rows to be freed free_all True ⇒ all rows are freed If free_all is True, all rows are freed regardless of the value of first and count. Otherwise, the number of rows specified by count are freed, beginning with the row specified by first in the specified overlay. To allocate keys in an overlay row, use XkbAllocGeomOverlayKeys. XkbAllocGeomOverlayKeys Status XkbAllocGeomOverlayKeys XkbRowPtr row int num_needed row section for which rows should be allocated num_needed number of new rows required XkbAllocGeomOverlayKeys allocates num_needed keys and adds them to the row. No initialization of the keys is done. To free keys in an overlay row, use XkbFreeGeomOverlayKeys. XkbFreeGeomOverlayKeys void XkbFreeGeomOverlayKeys XkbRowPtr row int first int count Bool free_all row row in which keys should be freed first first key to be freed. count number of keys to be freed free_all True ⇒ all keys are freed If free_all is True, all keys are freed regardless of the value of first and count. Otherwise, the number of keys specified by count are freed, beginning with the key specified by first in the specified row. To allocate doodads that are global to a keyboard geometry, use XkbAllocGeomDoodads. XkbAllocGeomDoodads Status XkbAllocGeomDoodads XkbGeometryPtr geom int num_needed geom geometry for which doodads should be allocated num_needed number of new doodads required XkbAllocGeomDoodads allocates num_needed doodads and adds them to the specified geometry geom. No initialization of the doodads is done. To allocate doodads that are specific to a section, use XkbAllocGeomSectionDoodads. XkbAllocGeomSectionDoodads Status XkbAllocGeomSectionDoodads XkbSectionPtr section int num_needed section section for which doodads should be allocated num_needed number of new doodads required XkbAllocGeomSectionDoodads allocates num_needed doodads and adds them to the specified section. No initialization of the doodads is done. To free geometry doodads, use XkbFreeGeomDoodads. XkbFreeGeomDoodads void XkbFreeGeomDoodads XkbDoodadPtr doodads int count Bool free_all doodads doodads to be freed count number of doodads to be freed free_all True ⇒ all doodads are freed If free_all is True, all doodads in the array are freed, regardless of the value of count. Otherwise, count doodads are freed. To allocate an entire geometry, use XkbAllocGeometry. XkbAllocGeometry Status XkbAllocGeometry XkbDescPtr xkb XkbGeometrySizesPtr sizes xkb keyboard description for which geometry is to be allocated sizes initial sizes for all geometry components XkbAllocGeometry allocates a keyboard geometry and adds it to the keyboard description specified by xkb. The keyboard description should be obtained via the XkbGetKeyboard or XkbAllockeyboard functions. The sizes parameter specifies the number of elements to be reserved for the subcomponents of the keyboard geometry and can be zero or more. These subcomponents include the properties, colors, shapes, sections, and doodads. To free an entire geometry, use XkbFreeGeometry. XkbFreeGeometry void XkbFreeGeometry XkbGeometryPtr geom unsigned int which Bool free_all geom geometry to be freed which mask of geometry components to be freed free_all True ⇒ the entire geometry is freed. The values of which and free_all determine how much of the specified geometry is freed. The valid values for which are: #define XkbGeomPropertiesMask (1<<0) #define XkbGeomColorsMask (1<<1) #define XkbGeomShapesMask (1<<2) #define XkbGeomSectionsMask (1<<3) #define XkbGeomDoodadsMask (1<<4) #define XkbGeomAllMask (0x1f) If free_all is True, the entire geometry is freed regardless of the value of which. Otherwise, the portions of the geometry specified by which are freed.
rlayKeys"> Status Xkb Keyboard Mapping The Xkb keyboard mapping contains all the information the server and clients need to interpret key events. This chapter provides an overview of the terminology used to describe an Xkb keyboard mapping and introduces common utilities for manipulating the keyboard mapping. The mapping consists of two components, a server map and a client map. The client map client map mapclient is the collection of information a client needs to interpret key events from the keyboard. It contains a global list of key types and an array of key symbol maps, each of which describes the symbols bound to a key and the rules to be used to interpret those symbols. The server map server map mapserver contains the information the server needs to interpret key events. This includes actions and behaviors for each key, explicit components for a key, and the virtual modifiers and the per-key virtual modifier mapping. For detailed information on particular components of the keyboard map, refer to , and . Notation and Terminology level shift level The graphic characters or control functions that may be accessed by one key are logically arranged in groups and levels, where group and level are defined as in the ISO9995 standard: Group: A logical state of a keyboard providing access to a collection of graphic characters. Usually these graphic characters logically belong together and may be arranged on several levels within a group. Level: One of several states (normally 2 or 3) governing which graphic character is produced when a graphic key is actuated. In certain cases the level may also affect function keys. These definitions, taken from the ISO standard, refer to graphic keys and characters. In the context of Xkb, Group and Level are not constrained to graphic keys and characters; they may be used with any key to access any character the key is capable of generating. Level is often referred to as Shift Level. Levels are numbered sequentially starting at one. Shift level is derived from the modifier state, but not necessarily in the same way for all keys. For example, the Shift modifier selects shift level 2 on most keys, but for keypad keys the modifier bound to Num_Lock (that is, the NumLock virtual modifier) also selects shift level 2. For example, consider the following key (the gray characters indicate symbols that are implied or expected but are not actually engraved on the key):
Shift Levels and Groups
This key has two groups, indicated by the columns, and each group has two shift levels. For the first group (Group1), the symbol shift level one is a, and the symbol for shift level two is A. For the second group, the symbol for shift level one is æ, and the symbol for shift level two is Æ. Core Implementation The standard interpretation rules for the core X keymap only allow clients to access keys such as the one shown in Figure 14.1. That is, clients using the standard interpretation rules can only access one of four keysyms for any given KeyPress event — two different symbols in two different groups. In general, the Shift modifier, the Lock modifier, and the modifier bound to the Num_Lock key are used to change between shift level 1 and shift level 2. To switch between groups, the core implementation uses the modifier bound to the Mode_switch key. When the Mode_switch modifier is set, the keyboard is logically in Group 2. When the Mode_switch modifier is not set, the keyboard is logically in Group 1. The core implementation does not clearly specify the behavior of keys. For example, the locking behavior of the CapsLock and Num_Lock keys depends on the vendor. Xkb Implementation Xkb extends the core implementation by providing access to up to four keyboard groups with up to 63 shift levels per key The core implementation restricts the number of symbols per key to 255. With four groups, this allows for up to 63 symbols (or shift levels) per group. Most keys will only have a few shift levels. . In addition, Xkb provides precise specifications regarding the behavior of keys. In Xkb, modifier state and the current group are independent (with the exception of compatibility mapping, discussed in ). Xkb handles switching between groups via key actions, independent of any modifier state information. Key actions are in the server map component and are described in detail in section 16.1.4. Xkb handles shift levels by associating a key type with each group on each key. Each key type defines the shift levels available for the groups on keys of its type and specifies the modifier combinations necessary to access each level. For example, Xkb allows key types where the Control modifier can be used to access the shift level two of a key. Key types are in the client map component and are described in detail in section 15.2. Xkb provides precise specification of the behavior of a key using key behaviors. Key behaviors are in the server map component and are described in detail in section 16.2.
Getting Map Components from the Server Xkb provides two functions to obtain the keyboard mapping components from the server. The first function, XkbGetMap, allocates an XkbDescRec structure, retrieves mapping components from the server, and stores them in the XkbDescRec structure it just allocated. The second function, XkbGetUpdatedMap, retrieves mapping components from the server and stores them in an XkbDescRec structure that has previously been allocated. To allocate an XkbDescRec structure and populate it with the server’s keyboard client map and server map, use XkbGetMap. XkbGetMap is similar to XkbGetKeyboard (see section 6.2), but is used only for obtaining the address of an XkbDescRec structure that is populated with keyboard mapping components. It allows finer control over which substructures of the keyboard mapping components are to be populated. XkbGetKeyboard always returns fully populated components, while XkbGetMap can be instructed to return a partially populated component. XkbGetMap XkbDescPtr XkbGetMap Display *display unsigned int which unsigned int device_spec display connection to X server which mask selecting subcomponents to populate device_spec device_id, or XkbUseCoreKbd The which mask is a bitwise inclusive OR of the masks defined in Table 14.1. Only those portions of the keyboard server map and the keyboard client maps that are specified in which are allocated and populated. In addition to allocating and obtaining the server map and the client map, XkbGetMap also sets the device_spec, the min_key_code, and max_key_code fields of the keyboard description. XkbGetMap is synchronous; it queries the server for the desired information, waits for a reply, and then returns. If successful, XkbGetMap returns a pointer to the XkbDescRec structure it allocated. If unsuccessful, XkbGetMap returns NULL. When unsuccessful, one of the following protocol errors is also generated: BadAlloc (unable to allocate the XkbDescRec structure), BadValue (some mask bits in which are undefined), or BadImplementation (a compatible version of the Xkb extension is not available in the server). To free the returned data, use XkbFreeClientMap. Xkb also provides convenience functions to get partial component definitions from the server. These functions are specified in the convenience functions column in Table 14.1. Refer to the sections listed in the table for more information on these functions. Xkb Mapping Component Masks and Convenience Functions Mask Value Map Fields Convenience Functions Section XkbKeyTypesMask (1<<0) client types size_types num_types XkbGetKeyTypes XkbResizeKeyType XkbCopyKeyType XkbCopyKeyTypes 15.2 XkbKeySymsMask (1<<1) client syms size_syms num_syms key_sym_map XkbGetKeySyms XkbResizeKeySyms XkbChangeTypes­OfKey 15.3 XkbModifierMapMask (1<<2) client modmap XkbGetKeyModifier­Map 15.4 XkbExplicitComponentsMask (1<<3) server explicit XkbGetKeyExplicit­Components 16.3 XkbKeyActionsMask (1<<4) server key_acts acts num_acts size_acts XkbGetKeyActions XkbResizeKey­Actions 16.1 XkbKeyBehaviorsMask (1<<5) server behaviors XkbGetKey­Behaviors 16.2 XkbVirtualModsMask (1<<6) server vmods XkbGetVirtualMods 16.4 XkbVirtualModMapMask (1<<7) server vmodmap XkbGetVirtualMod­Map 16.4
Xkb defines combinations of these masks for convenience: #define XkbResizableInfoMask (XkbKeyTypesMask) #define XkbAllClientInfoMask (XkbKeyTypesMask | XkbKeySymsMask | XkbModifierMapMask) #define XkbAllServerInfoMask (XkbExplicitComponentsMask | XkbKeyActionsMask| XkbKeyBehaviorsMask | XkbVirtualModsMask | XkbVirtualModMapMask) #define XkbAllMapComponentsMask (XkbAllClientInfoMask|XkbAllServerInfoMask) Key types, symbol maps, and actions are all interrelated: changes in one require changes in the others. The convenience functions make it easier to edit these components and handle the interdependencies. To update the client or server map information in an existing keyboard description, use XkbGetUpdatedMap. XkbGetUpdatedMap Status XkbGetUpdatedMap Display *display unsigned int which XkbDescPtr xkb display connection to X server which mask selecting subcomponents to populate xkb keyboard description to be updated The which parameter is a bitwise inclusive OR of the masks in Table 14.1. If the needed components of the xkb structure are not already allocated, XkbGetUpdatedMap allocates them. XkbGetUpdatedMap fetches the requested information for the device specified in the XkbDescRec passed in the xkb parameter. XkbGetUpdatedMap is synchronous; it queries the server for the desired information, waits for a reply, and then returns. If successful, XkbGetUpdatedMap returns Success. If unsuccessful, XkbGetUpdatedMap returns one of the following: BadAlloc (unable to allocate a component in the XkbDescRec structure), BadValue (some mask bits in which are undefined), BadImplementation (a compatible version of the Xkb extension is not available in the server or the reply from the server was invalid).
Changing Map Components in the Server There are two ways to make changes to map components: either change a local copy of the keyboard map and call XkbSetMap to send the modified map to the server, or, to reduce network traffic, use an XkbMapChangesRec structure and call XkbChangeMap. XkbSetMap Bool XkbSetMap Display *dpy unsigned int which XkbDescPtr xkb dpy connection to X server which mask selecting subcomponents to update xkb description from which new values are taken Use XkbSetMap to send a complete new set of values for entire components (for example, all symbols, all actions, and so on) to the server. The which parameter specifies the components to be sent to the server, and is a bitwise inclusive OR of the masks listed in Table 14.1. The xkb parameter is a pointer to an XkbDescRec structure and contains the information to be copied to the server. For each bit set in the which parameter, XkbSetMap takes the corresponding structure values from the xkb parameter and sends it to the server specified by dpy. If any components specified by which are not present in the xkb parameter, XkbSetMap returns False. Otherwise, it sends the update request to the server and returns True. XkbSetMap can generate BadAlloc, BadLength, and BadValue protocol errors. Key types, symbol maps, and actions are all interrelated; changes in one require changes in the others. Xkb provides functions to make it easier to edit these components and handle the interdependencies. Table 14.1 lists these helper functions and provides a pointer to where they are defined. The XkbMapChangesRec Structure XkbMapChangesRec Use the XkbMapChangesRec structure to identify and track partial modifications to the mapping components and to reduce the amount of traffic between the server and clients. typedef struct _XkbMapChanges { unsigned short changed; /* identifies valid components in structure */ KeyCode min_key_code; /* lowest numbered keycode for device */ KeyCode max_key_code; /* highest numbered keycode for device */ unsigned char first_type; /* index of first key type modified */ unsigned char num_types; /* # types modified */ KeyCode first_key_sym; /* first key whose key_sym_map changed */ unsigned char num_key_syms; /* # key_sym_map entries changed */ KeyCode first_key_act; /* first key whose key_acts entry changed */ unsigned char num_key_acts; /* # key_acts entries changed */ KeyCode first_key_behavior; /* first key whose behaviors changed */ unsigned char num_key_behaviors; /* # behaviors entries changed */ KeyCode first_key_explicit; /* first key whose explicit entry changed */ unsigned char num_key_explicit; /* # explicit entries changed */ KeyCode first_modmap_key; /* first key whose modmap entry changed */ unsigned char num_modmap_keys; /* # modmap entries changed */ KeyCode first_vmodmap_key; /* first key whose vmodmap changed */ unsigned char num_vmodmap_keys; /* # vmodmap entries changed */ unsigned char pad1; /* reserved */ unsigned short vmods; /* mask indicating which vmods changed */ } XkbMapChangesRec, *XkbMapChangesPtr; The changed field identifies the map components that have changed in an XkbDescRec structure and may contain any of the bits in Table 14.1, which are also shown in Table 14.2. Every 1 bit in changed also identifies which other fields in the XkbMapChangesRec structure contain valid values, as indicated in Table 14.2. The min_key_code and max_key_code fields are for reference only; they are ignored on any requests sent to the server and are always updated by the server whenever it returns the data for an XkbMapChangesRec. XkbMapChangesRec Masks Mask Valid XkbMapChangesRec Fields XkbDescRec Field Containing Changed Data XkbKeyTypesMask first_type, num_types map->type[first_type] .. map->type[first_type + num_types - 1] XkbKeySymsMask first_key_sym, num_key_syms map->key_sym_map[first_key_sym] .. map->key_sym_map[first_key_sym + num_key_syms - 1] XkbModifierMapMask first_modmap_key, num_modmap_keys map->modmap[first_modmap_key] .. map->modmap[first_modmap_key + num_modmap_keys-1] XkbExplicitComponentsMask first_key_explicit, num_key_explicit server->explicit[first_key_explicit] .. server->explicit[first_key_explicit + num_key_explicit - 1] XkbKeyActionsMask first_key_act, num_key_acts server->key_acts[first_key_act] .. server->key_acts[first_key_act + num_key_acts - 1] XkbKeyBehaviorsMask first_key_behavior, num_key_behaviors server->behaviors[first_key_behavior] .. server->behaviors[first_key_behavior + num_key_behaviors - 1] XkbVirtualModsMask vmods server->vmods[*] XkbVirtualModMapMask first_vmodmap_key, num_vmodmap_keys server->vmodmap[first_vmodmap_key] .. server->vmodmap[first_vmodmap_key + num_vmodmap_keys - 1]
To update only partial components of a keyboard description, modify the appropriate fields in the server and map components of a local copy of the keyboard description, then call XkbChangeMap with an XkbMapChangesRec structure indicating which components have changed. XkbChangeMap Bool XkbChangeMap Display *dpy XkbDescPtr xkb XkbMapChangesPtr changes dpy connection to X server xkb description from which new values are taken changes identifies component parts to update XkbChangeMap copies any components specified by the changes structure from the keyboard description, xkb, to the X server specified by dpy. If any components specified by changes are not present in the xkb parameter, XkbChangeMap returns False. Otherwise, it sends a request to the server and returns True. XkbChangeMap can generate BadAlloc, BadLength, and BadValue protocol errors.
Tracking Changes to Map Components eventsXkbMapNotify XkbMapNotifyEvent The Xkb extension reports XkbMapNotify events to clients wanting notification whenever a map component of the Xkb description for a device changes. There are many different types of Xkb keyboard map changes. Xkb uses an event detail mask to identify each type of change. The event detail masks are identical to the masks listed in Table 14.1. To receive XkbMapNotify events under all possible conditions, use XkbSelectEvents (see section 4.3) and pass XkbMapNotifyMask in both bits_to_change and values_for_bits. To receive XkbMapNotify events only under certain conditions, use XkbSelectEventDetails using XkbMapNotify as the event_type and specifying the desired map changes in bits_to_change and values_for_bits using mask bits from Table 14.1. The structure for XkbMapNotify events is: typedef struct { int type; /* Xkb extension base event code */ unsigned long serial; /* X server serial number for event */ Bool send_event; /* True ⇒ synthetically generated */ Display * display; /* server connection where event generated */ Time time; /* server time when event generated */ int xkb_type; /* XkbMapNotify */ int device; /* Xkb device ID, will not be XkbUseCoreKbd */ unsigned int changed; /* identifies valid fields in rest of event */ unsigned int resized; /* reserved */ int first_type; /* index of first key type modified */ int num_types /* # types modified */ KeyCode min_key_code; /* minimum keycode for device */ KeyCode max_key_code; /* maximum keycode for device */ KeyCode first_key_sym; /* first key whose key_sym_map changed */ KeyCode first_key_act; /* first key whose key_acts entry changed */ KeyCode first_key_behavior; /* first key whose behaviors changed */ KeyCode first_key_explicit; /* first key whose explicit entry changed */ KeyCode first_modmap_key; /* first key whose modmap entry changed */ KeyCode first_vmodmap_key; /* # modmap entries changed */ int num_key_syms; /* # key_sym_map entries changed */ int num_key_acts; /* # key_acts entries changed */ int num_key_behaviors; /* # behaviors entries changed */ int num_key_explicit; /* # explicit entries changed */ int num_modmap_keys; /* # modmap entries changed */ int num_vmodmap_keys; /* # vmodmap entries changed */ unsigned int vmods; /* mask indicating which vmods changed */ } XkbMapNotifyEvent; The changed field specifies the map components that have changed and is the bitwise inclusive OR of the mask bits defined in Table 14.1. The other fields in this event are interpreted as the like-named fields in an XkbMapChangesRec (see section 14.3.1). The XkbMapNotifyEvent structure also has an additional resized field that is reserved for future use. Allocating and Freeing Client and Server Maps Calling XkbGetMap (see section 14.2) should be sufficient for most applications to get client and server maps. As a result, most applications do not need to directly allocate client and server maps. If you change the number of key types or construct map components without loading the necessary components from the X server, do not allocate any map components directly using malloc or Xmalloc. Instead, use the Xkb allocators, XkbAllocClientMap, and XkbAllocServerMap. Similarly, use the Xkb destructors, XkbFreeClientMap, and XkbFreeServerMap instead of free or Xfree. Allocating an Empty Client Map To allocate and initialize an empty client map description record, use XkbAllocClientMap. XkbAllocClientMap Status XkbAllocClientMap XkbDescPtr xkb unsigned int which unsigned int type_count xkb keyboard description in which to allocate client map which mask selecting map components to allocate type_count value of num_types field in map to be allocated XkbAllocClientMap allocates and initializes an empty client map in the map field of the keyboard description specified by xkb. The which parameter specifies the particular components of the client map structure to allocate and is a mask composed by a bitwise inclusive OR of one or more of the masks shown in Table 14.3. XkbAllocClientMap Masks Mask Effect XkbKeyTypesMask The type_count field specifies the number of entries to preallocate for the types field of the client map. If the type_count field is less than XkbNumRequiredTypes (see section 15.2.1), returns BadValue. XkbKeySymsMask The min_key_code and max_key_code fields of the xkb parameter are used to allocate the syms and key_sym_map fields of the client map. The fields are allocated to contain the maximum number of entries necessary for max_key_codemin_key_code + 1 keys. XkbModifierMapMask The min_key_code and max_key_code fields of the xkb parameter are used to allocate the modmap field of the client map. The field is allocated to contain the maximum number of entries necessary for max_key_codemin_key_code + 1 keys.
The min_key_code and max_key_code fields of the xkb parameter must be legal values if the XkbKeySymsMask or XkbModifierMapMask masks are set in the which parameter. If they are not valid, XkbAllocClientMap returns BadValue. If the client map of the keyboard description is not NULL, and any fields are already allocated in the client map, XkbAllocClientMap does not overwrite the existing values; it simply ignores that part of the request. The only exception is the types array. If type_count is greater than the current num_types field of the client map, XkbAllocClientMap resizes the types array and resets the num_types field accordingly. If XkbAllocClientMap is successful, it returns Success. Otherwise, it can return either BadMatch, BadAlloc, or BadValue errors.
Freeing a Client Map To free memory used by the client map member of an XkbDescRec structure, use XkbFreeClientMap. XkbFreeClientMap void XkbFreeClientMap XkbDescPtr xkb unsigned int which Bool free_all xkb keyboard description containing client map to free which mask identifying components of map to free free_all True ⇒ free all client components and map itself XkbFreeClientMap frees the components of client map specified by which in the XkbDescRec structure specified by the xkb parameter and sets the corresponding structure component values to NULL. The which parameter specifies a combination of the client map masks shown in Table 14.3. If free_all is True, which is ignored; XkbFreeClientMap frees every non- NULL structure component in the client map, frees the XkbClientMapRec structure referenced by the map member of the xkb parameter, and sets the map member to NULL. Allocating an Empty Server Map To allocate and initialize an empty server map description record, use XkbAllocServerMap. XkbAllocServerMap Status XkbAllocServerMap XkbDescPtr xkb unsigned int which unsigned int count_acts xkb keyboard description in which to allocate server map which mask selecting map components to allocate count_acts value of num_acts field in map to be allocated XkbAllocServerMap allocates and initializes an empty server map in the server field of the keyboard description specified by xkb. The which parameter specifies the particular components of the server map structure to allocate, as specified in Table 14.4. XkbAllocServerMap Masks Mask Effect XkbExplicitComponentsMask The min_key_code and max_key_code fields of the xkb parameter are used to allocate the explicit field of the server map. XkbKeyActionsMask The min_key_code and max_key_code fields of the xkb parameter are used to allocate the key_acts field of the server map. The count_acts parameter is used to allocate the acts field of the server map. XkbKeyBehaviorsMask The min_key_code and max_key_code fields of the xkb parameter are used to allocate the behaviors field of the server map. XkbVirtualModMapMask The min_key_code and max_key_code fields of the xkb parameter are used to allocate the vmodmap field of the server map.
The min_key_code and max_key_code fields of the xkb parameter must be legal values. If they are not valid, XkbAllocServerMap returns BadValue. If the server map of the keyboard description is not NULL and any fields are already allocated in the server map, XkbAllocServerMap does not overwrite the existing values. The only exception is with the acts array. If the count_acts parameter is greater than the current num_acts field of the server map, XkbAllocServerMap resizes the acts array and resets the num_acts field accordingly. If XkbAllocServerMap is successful, it returns Success. Otherwise, it can return either BadMatch or BadAlloc errors.
Freeing a Server Map To free memory used by the server member of an XkbDescRec structure, use XkbFreeServerMap. XkbFreeServerMap void XkbFreeServerMap XkbDescPtr xkb unsigned int which Bool free_all xkb keyboard description containing server map to free which mask identifying components of map to free free_all True ⇒ free all server map components and server itself The XkbFreeServerMap function frees the specified components of server map in the XkbDescRec structure specified by the xkb parameter and sets the corresponding structure component values to NULL. The which parameter specifies a combination of the server map masks and is a bitwise inclusive OR of the masks listed in Table 14.4. If free_all is True, which is ignored and XkbFreeServerMap frees every non- NULL structure component in the server map, frees the XkbServerMapRec structure referenced by the server member of the xkb parameter, and sets the server member to NULL.
s that part of the request. The only exception is the types array. If type_count is greater than the current num_types field of the client map, XkbAllocClientMap resizes the types array and resets the num_types field accordingly. If XkbAllolibX11-1.6.3/specs/XKB/ch05.xml000064401431060000012000001050151247741723500161020ustar00alancstaff00002660200006 Keyboard State Keyboard state encompasses all of the transitory information necessary to map a physical key press or release to an appropriate event. The Xkb keyboard state consists of primitive components and additional derived components that are maintained for efficiency reasons. Figure 5.1 shows the components of Xkb keyboard state and their relationships.
Xkb State
Keyboard State Description The Xkb keyboard state is comprised of the state of all keyboard modifiers, the keyboard group, and the state of the pointer buttons. These are grouped into the following components: The locked group and locked modifiers The latched group and latched modifiers The base group and base modifiers The effective group and effective modifiers The state of the core pointer buttons The modifiers modifiers are Shift, Lock, Control, and Mod1Mod5, as defined by the core protocol. A modifier can be thought of as a toggle that is either set or unset. All modifiers are initially unset. When a modifier is locked, it is set and remains set for all future key events, until it is explicitly unset. A latched modifier is set, but automatically unsets after the next key event that does not change the keyboard state. Locked and latched modifier state can be changed by keyboard activity or via Xkb extension library functions. The Xkb extension provides support for keysym groups, keysym groups groupkeysym groupISO9995 as defined by ISO9995: Group A logical state of a keyboard providing access to a collection of characters. A group usually contains a set of characters that logically belong together and that may be arranged on several shift levels within that group. The Xkb extension supports up to four keysym groups. Groups are named beginning with one and indexed beginning with zero. All group states are indicated using the group index. At any point in time, there is zero or one locked group, zero or one latched group, and one base group. When a group is locked, it supersedes any previous locked group and remains the locked group for all future key events, until a new group is locked. A latched group applies only to the next key event that does not change the keyboard state. The locked and latched group can be changed by keyboard activity or via Xkb extension library functions. Changing to a different group changes the keyboard state to produce characters from a different group. Groups are typically used to switch between keysyms of different languages and locales. The pointer buttons are Button1Button5, as defined by the core protocol. The base group base group groupbase and base modifiers base modifiers modifiersbase represent keys that are physically or logically down. These and the pointer buttons can be changed by keyboard activity and not by Xkb requests. It is possible for a key to be logically down, but not physically down, and neither latched nor locked. Keys may be logically down when they are physically up because of their electrical properties or because of the keyboard extension in the X server having filtered the key release, for esoteric reasons. The effective modifiers effective modifiers modifierseffective are the bitwise union of the locked, latched, and the base modifiers. The effective group effective group groupeffective is the arithmetic sum of the group indices of the latched group, locked group, and base group, which is then normalized by some function. The result is a meaningful group index. n = number of keyboard groups, 1<= n <= 4 0 <= any of locked, latched, or base group < n effective group = f(locked group + latched group + base group) The function f ensures that the effective group is within range. The precise function is specified for the keyboard and can be retrieved through the keyboard description. It may wrap around, clamp down, or default. Few applications will actually examine the effective group, and far fewer still will examine the locked, latched, and base groups. There are two circumstances under which groups are normalized: The global locked or effective group changes. In this case, the changed group is normalized into range according to the settings of the groups_wrap field of the XkbControlsRec structure for the keyboard (see section 10.7.1). The Xkb library is interpreting an event with an effective group that is legal for the keyboard as a whole, but not for the key in question. In this case, the group to use for this event only is determined using the group_info field of the key symbol mapping (XkbSymMapRec) for the event key. Each nonmodifier key on a keyboard has zero or more symbols, or keysyms, associated with it. These are the logical symbols that the key can generate when it is pressed. The set of all possible keysyms for a keyboard is divided into groups. Each key is associated with zero or more groups; each group contains one or more symbols. When a key is pressed, the determination of which symbol for the key is selected is based on the effective group and the shift level, which is determined by which modifiers are set. A client that does not explicitly call Xkb functions, but that otherwise makes use of an X library containing the Xkb extension, will have keyboard state represented in bits 0 – 14 of the state field of events that report modifier and button state. Such a client is said to be Xkb-capable. Xkb-capable client A client that does explicitly call Xkb functions is an Xkb-aware Xkb-aware client client. The Xkb keyboard state includes information derived from the effective state and from two server parameters that can be set through the keyboard extension. The following components of keyboard state pertain to Xkb-capable and Xkb-aware clients: lookup state: lookup group and lookup modifiers grab state: grab group and grab modifiers The lookup modifiers lookup modifiers modifierslookup and lookup group lookup group grouplookup are represented in the state field of core X events. The modifier state and keycode of a key event are used to determine the symbols associated with the event. For KeyPress and KeyRelease events, the lookup modifiers are computed as: ((base | latched | locked) & ~server_internal_modifiers) Otherwise the lookup modifiers are computed as: (((base | latched | (locked & ~ignore_locks)) & ~server_internal_modifiers) The lookup group is the same as the effective group. When an Xkb-capable or Xkb-aware client wishes to map a keycode to a keysym, it should use the lookup state lookup state statelookup — the lookup group and the lookup modifiers. The grab state grab state stategrab is the state used when matching events to passive grabs. If the event activates a grab, the grab modifiers grab modifiers modifiersgrab and grab group grab group groupgrab are represented in the state field of core X events; otherwise, the lookup state is used. The grab modifiers are computed as: (((base | latched | (locked & ~ignore_locks)) & ~server_internal_modifiers) If the server’s IgnoreGroupLock control (see section 10.7.3) is not set, the grab group is the same as the effective group. Otherwise, the grab group is computed from the base group and latched group, ignoring the locked group. The final three components of Xkb state are applicable to clients that are not linked with an Xlib containing the X keyboard extension library and therefore are not aware of the keyboard extension (Xkb-unaware clients): The compatibility modifier state The compatibility lookup modifier state The compatibility grab modifier state The X11 protocol interpretation of modifiers does not include direct support for multiple groups. When an Xkb-extended X server connects to an Xkb-unaware client, the compatibility states remap the keyboard group into a core modifier whenever possible. The compatibility state corresponds to the effective modifier and effective group state, with the group remapped to a modifier. The compatibility lookup and grab states correspond to the lookup and grab states, respectively, with the group remapped to a modifier. The compatibility lookup state is reported in events that do not trigger passive grabs; otherwise, the compatibility grab state is reported. Changing the Keyboard State Changing Modifiers real modifiers modifiersreal maskreal modifiers The functions in this section that change the use of modifiers use a mask in the parameter affect. It is a bitwise inclusive OR of the legal modifier masks: Real Modifier Masks Mask ShiftMask LockMask ControlMask Mod1Mask Mod2Mask Mod3Mask Mod4Mask Mod5Mask
To lock and unlock any of the eight real keyboard modifiers, use XkbLockModifiers: XkbLockModifiers Bool XkbLockModifiers Display *display unsigned int device_spec unsigned int affect unsigned int values display connection to the X server device_spec device ID, or XkbUseCoreKbd affect mask of real modifiers whose lock state is to change values 1 ⇒ lock, 0 ⇒ unlock; only for modifiers selected by affect XkbLockModifiers sends a request to the server to lock the real modifiers selected by both affect and values and to unlock the real modifiers selected by affect but not selected by values. XkbLockModifiers does not wait for a reply from the server. It returns True if the request was sent, and False otherwise. To latch and unlatch any of the eight real keyboard modifiers, use XkbLatchModifiers: XkbLatchModifiers Bool XkbLatchModifiers Display *display unsigned int device_spec unsigned int affect unsigned int values display connection to the X server device_spec device ID, or XkbUseCoreKbd affect mask of modifiers whose latch state is to change values 1 ⇒ latch, 0 ⇒ unlatch; only for mods selected by affect XkbLatchModifiers sends a request to the server to latch the real modifiers selected by both affect and values and to unlatch the real modifiers selected by affect but not selected by values. XkbLatchModifiers does not wait for a reply from the server. It returns True if the request was sent, and False otherwise.
Changing Groups keysym groups groupkeysym Reference the keysym group indices with these symbolic constants: Symbolic Group Names Symbolic Name Value XkbGroup1Index 0 XkbGroup2Index 1 XkbGroup3Index 2 XkbGroup4Index 3
To lock the keysym group, use XkbLockGroup. XkbLockGroup Bool XkbLockGroup Display *display unsigned int device_spec unsigned int group display connection to the X server device_spec device ID, or XkbUseCoreKbd group index of the keysym group to lock XkbLockGroup sends a request to the server to lock the specified group and does not wait for a reply. It returns True if the request was sent and False otherwise. To latch the keysym group, use XkbLatchGroup. XkbLatchGroup Bool XkbLatchGroup Display *display unsigned int device_spec unsigned int group display connection to the X server device_spec device ID, or XkbUseCoreKbd group index of the keysym group to latch XkbLatchGroup sends a request to the server to latch the specified group and does not wait for a reply. It returns True if the request was sent and False otherwise.
Determining Keyboard State XkbStateRec Xkb keyboard state may be represented in an XkbStateRec structure: typedef struct { unsigned char group; /* effective group index */ unsigned char base_group; /* base group index */ unsigned char latched_group; /* latched group index */ unsigned char locked_group; /* locked group index */ unsigned char mods; /* effective modifiers */ unsigned char base_mods; /* base modifiers */ unsigned char latched_mods; /* latched modifiers */ unsigned char locked_mods; /* locked modifiers */ unsigned char compat_state; /* effective group ⇒ modifiers */ unsigned char grab_mods; /* modifiers used for grabs */ unsigned char compat_grab_mods; /* mods used for compatibility mode grabs */ unsigned char lookup_mods; /* mods used to lookup symbols */ unsigned char compat_lookup_mods; /* mods used for compatibility lookup */ unsigned short ptr_buttons; /* 1 bit ⇒ corresponding pointer btn is down */ } XkbStateRec, *XkbStatePtr; To obtain the keyboard state, use XkbGetState. XkbGetState Status XkbGetState Display *display unsigned int device_spec XkbStatePtr state_return display connection to the X server device_spec device ID, or XkbUseCoreKbd state_return backfilled with Xkb state The XkbGetState function queries the server for the current keyboard state, waits for a reply, and then backfills state_return with the results. All group values are expressed as group indices in the range [0..3]. Modifiers and the compatibility modifier state values are expressed as the bitwise union of the core X11 modifier masks. The pointer button state is reported as in the core X11 protocol. Tracking Keyboard State eventsXkbStateNotify XkbStateNotifyEvent The Xkb extension reports XkbStateNotify events to clients wanting notification whenever the Xkb state changes. The changes reported include changes to any aspect of the keyboard state: when a modifier is set or unset, when the current group changes, or when a pointer button is pressed or released. As with all Xkb events, XkbStateNotify events are reported to all interested clients without regard to the current keyboard input focus or grab state. There are many different types of Xkb state changes. Xkb defines an event detail mask corresponding to each type of change. The event detail masks are listed in Table 5.3. XkbStateNotify Event Detail Masks Mask Value XkbModifierStateMask (1L << 0) XkbModifierBaseMask (1L << 1) XkbModifierLatchMask (1L << 2) XkbModifierLockMask (1L << 3) XkbGroupStateMask (1L << 4) XkbGroupBaseMask (1L << 5) XkbGroupLatchMask (1L << 6) XkbGroupLockMask (1L << 7) XkbCompatStateMask (1L << 8) XkbGrabModsMask (1L << 9) XkbCompatGrabModsMask (1L << 10) XkbLookupModsMask (1L << 11) XkbCompatLookupModsMask (1L << 12) XkbPointerButtonMask (1L << 13) XkbAllStateComponentsMask (0x3fff)
To track changes in the keyboard state for a particular device, select to receive XkbStateNotify events by calling either XkbSelectEvents or XkbSelectEventDetails (see section 4.3). To receive XkbStateNotify events under all possible conditions, use XkbSelectEvents and pass XkbStateNotifyMask in both bits_to_change and values_for_bits. To receive XkbStateNotify events only under certain conditions, use XkbSelectEventDetails using XkbStateNotify as the event_type and specifying the desired state changes in bits_to_change and values_for_bits using mask bits from Table 5.3. The structure for XkbStateNotify events is: typedef struct { int type; /* Xkb extension base event code */ unsigned long serial; /* X server serial number for event */ Bool send_event; /* True ⇒ synthetically generated */ Display * display; /* server connection where event generated */ Time time; /* server time when event generated */ int xkb_type; /* XkbStateNotify */ int device; /* Xkb device ID, will not be XkbUseCoreKbd */ unsigned int changed; /* bits indicating what has changed */ int group; /* group index of effective group */ int base_group; /* group index of base group */ int latched_group; /* group index of latched group */ int locked_group; /* group index of locked group */ unsigned int mods; /* effective modifiers */ unsigned int base_mods; /* base modifiers */ unsigned int latched_mods; /* latched modifiers */ unsigned int locked_mods; /* locked modifiers */ int compat_state; /* computed compatibility state */ unsigned char grab_mods; /* modifiers used for grabs */ unsigned char compat_grab_mods; /* modifiers used for compatibility grabs */ unsigned char lookup_mods; /* modifiers used to lookup symbols */ unsigned char compat_lookup_mods; /* mods used for compatibility look up */ int ptr_buttons; /* core pointer buttons */ KeyCode keycode; /* keycode causing event, 0 if programmatic */ char event_type; /* core event if req_major or req_minor non zero */ char req_major; /* major request code if program trigger, else 0 */ char req_minor; /* minor request code if program trigger, else 0 */ } XkbStateNotifyEvent; When you receive an XkbStateNotify event, the changed field indicates which elements of keyboard state have changed. This will be the bitwise inclusive OR of one or more of the XkbStateNotify event detail masks shown in Table 5.3. All fields reported in the event are valid, but only those indicated in changed have changed values. The group field is the group index of the effective keysym group. The base_group, latched_group, and locked_group fields are set to a group index value representing the base group, the latched group, and the locked group, respectively. The X server can set the modifier and compatibility state fields to a union of the core modifier mask bits; this union represents the corresponding modifier states. The ptr_buttons field gives the state of the core pointer buttons as a mask composed of an inclusive OR of zero or more of the core pointer button masks. Xkb state changes can occur either in response to keyboard activity or under application control. If a key event caused the state change, the keycode field gives the keycode of the key event, and the event_type field is set to either KeyPress or KeyRelease. If a pointer button event caused the state change, the keycode field is zero, and the event_type field is set to either ButtonPress or ButtonRelease. Otherwise, the major and minor codes of the request that caused the state change are given in the req_major and req_minor fields, and the keycode field is zero. The req_major value is the same as the major extension opcode.
ction>XkbGetState
Status XkbGetState Display *display unsigned int device_spec XkbStatePtr state_return Initialization and General Programming Information Extension Header Files The following include files are part of the Xkb standard: <X11/XKBlib.h> XKBlib.h is the main header file for Xkb; it declares constants, types, and functions. <X11/extensions/XKBstr.h> XKBstr.h declares types and constants for Xkb. It is included automatically from <X11/XKBlib.h>; you should never need to reference it directly in your application code. <X11/extensions/XKB.h> XKB.h defines constants for Xkb. It is included automatically from <X11/XKBstr.h>; you should never need to reference it directly in your application code. <X11/extensions/XKBgeom.h> XKBgeom.h declares types, symbolic constants, and functions for manipulating keyboard geometry descriptions. Extension Name XkbName The name of the Xkb extension is given in <X11/extensions/Xkb.h>: #define XkbName "XKEYBOARD" Most extensions to the X protocol are initialized by calling XInitExtension and passing the extension name. However, as explained in section 2.4, Xkb requires a more complex initialization sequence, and a client program should not call XInitExtension directly. Determining Library Compatibility If an application is dynamically linked, both the X server and the client-side X library must contain the Xkb extension in order for the client to use the Xkb extension capabilities. Therefore a dynamically linked application must check both the library and the server for compatibility before using Xkb function calls. A properly written program must check for compatibility between the version of the Xkb library that is dynamically loaded and the one used when the application was built. It must then check the server version for compatibility with the version of Xkb in the library. If your application is statically linked, you must still check for server compatibility and may check library compatibility. (It is possible to compile against one set of header files and link against a different, incompatible, version of the library, although this should not normally occur.) To determine the compatibility of a library at runtime, call XkbLibraryVersion. XkbLibraryVersion Bool XkbLibraryVersion int *lib_major_in_out int *lib_minor_in_out lib_major_in_out specifies and returns the major Xkb library version. lib_minor_in_out specifies and returns the minor Xkb library version. Pass the symbolic value XkbMajorVersion in lib_major_in_out and XkbMinorVersion in lib_minor_in_out. These arguments represent the version of the library used at compile time. The XkbLibraryVersion function backfills the major and minor version numbers of the library used at run time in lib_major_in_out and lib_minor_in_out. If the versions of the compile time and run time libraries are compatible, XkbLibraryVersion returns True, otherwise, it returns False. In addition, in order to use the Xkb extension, you must ensure that the extension is present in the server and that the server supports the version of the extension expected by the client. Use XkbQueryExtension to do this, as described in the next section. Initializing the Keyboard Extension Call XkbQueryExtension to check for the presence and compatibility of the extension in the server and to initialize the extension. Because of potential version mismatches, you cannot use the generic extension mechanism functions (XQueryExtension and XInitExtension) for checking for the presence of, and initializing the Xkb extension. You must call XkbQueryExtension or XkbOpenDisplay before using any other Xkb library interfaces, unless such usage is explicitly allowed in the interface description in this document. The exceptions are: XkbIgnoreExtension, XkbLibraryVersion, and a handful of audible-bell functions. You should not use any other Xkb functions if the extension is not present or is uninitialized. In general, calls to Xkb library functions made prior to initializing the Xkb extension cause BadAccess protocol errors. errors BadAccess BadAccess XkbQueryExtension both determines whether a compatible Xkb extension is present in the X server and initializes the extension when it is present. XkbQueryExtension Bool XkbQueryExtension Display *dpy int *opcode_rtrn int *event_rtrn int *error_rtrn int *major_in_out int *minor_in_out dpy connection to the X server opcode_rtrn backfilled with the major extension opcode event_rtrn backfilled with the extension base event code error_rtrn backfilled with the extension base error code major_in_out compile time lib major version in, server major version out minor_in_out compile time lib min version in, server minor version out The XkbQueryExtension function determines whether a compatible version of the X Keyboard Extension is present in the server. If a compatible extension is present, XkbQueryExtension returns True; otherwise, it returns False. If a compatible version of Xkb is present, XkbQueryExtension initializes the extension. It backfills the major opcode for the keyboard extension in opcode_rtrn, the base event code in event_rtrn, the base error code in error_rtrn, and the major and minor version numbers of the extension in major_in_out and minor_in_out. The major opcode is reported in the req_major fields of some Xkb events. For a discussion of the base event code, see section 4.1. As a convenience, you can use the function XkbOpenDisplay to perform these three tasks at once: open a connection to an X server, check for a compatible version of the Xkb extension in both the library and the server, and initialize the extension for use. XkbOpenDisplay Display *XkbOpenDisplay char *display_name int *event_rtrn int *error_rtrn int *major_in_out int *minor_in_out int *reason_rtrn display_name hardware display name, which determines the display and communications domain to be used event_rtrn backfilled with the extension base event code error_rtrn backfilled with the extension base error code major_in_out compile time lib major version in, server major version out minor_in_out compile time lib minor version in, server minor version out reason_rtrn backfilled with a status code XkbOpenDisplay is a convenience function that opens an X display connection and initializes the X keyboard extension. In all cases, upon return reason_rtrn contains a status value indicating success or the type of failure. If major_in_out and minor_in_out are not NULL, XkbOpenDisplay first calls XkbLibraryVersion to determine whether the client library is compatible, passing it the values pointed to by major_in_out and minor_in_out. If the library is incompatible, XkbOpenDisplay backfills major_in_out and minor_in_out with the major and minor extension versions of the library being used and returns NULL. If the library is compatible, XkbOpenDisplay next calls XOpenDisplay with the display_name. If this fails, the function returns NULL. If successful, XkbOpenDisplay calls XkbQueryExtension and backfills the major and minor Xkb server extension version numbers in major_in_out and minor_in_out. If the server extension version is not compatible with the library extension version or if the server extension is not present, XkbOpenDisplay closes the display and returns NULL. When successful, the function returns the display connection. The possible values for reason_rtrn are: XkbOD_BadLibraryVersion indicates XkbLibraryVersion returned False. XkbOD_ConnectionRefused indicates the display could not be opened. XkbOD_BadServerVersion indicates the library and the server have incompatible extension versions. XkbOD_NonXkbServer indicates the extension is not present in the X server. XkbOD_Success indicates that the function succeeded. Disabling the Keyboard Extension If a server supports the Xkb extension, the X library normally implements preXkb keyboard functions using the Xkb keyboard description and state. The server Xkb keyboard state may differ from the preXkb keyboard state. This difference does not affect most clients, but there are exceptions. To allow these clients to work properly, you may instruct the extension not to use Xkb functionality. Call XkbIgnoreExtension to prevent core X library keyboard functions from using the X Keyboard Extension. You must call XkbIgnoreExtension before you open a server connection; Xkb does not provide a way to enable or disable use of the extension once a connection is established. XkbIgnoreExtension Bool XkbIgnoreExtension Bool ignore ignore True means ignore the extension XkbIgnoreExtension tells the X library whether to use the X Keyboard Extension on any subsequently opened X display connections. If ignore is True, the library does not initialize the Xkb extension when it opens a new display. This forces the X server to use compatibility mode and communicate with the client using only core protocol requests and events. If ignore is False, the library treats subsequent calls to XOpenDisplay normally and uses Xkb extension requests, events, and state. Do not explicitly use Xkb on a connection for which it is disabled. XkbIgnoreExtension returns False if it was unable to apply the ignore request. Protocol Errors errors Many of the Xkb extension library functions described in this document can cause the X server to report an error, referred to in this document as a BadXxx protocol error, where Xxx is some name. These errors are fielded in the normal manner, by the default Xlib error handler or one replacing it. Note that X protocol errors are not necessarily reported immediately because of the buffering of X protocol requests in Xlib and the server. Table 2.1 lists the protocol errors that can be generated, and their causes. Xkb Protocol Errors Error Cause BadAccess The Xkb extension has not been properly initialized BadKeyboard The device specified was not a valid core or input extension device BadImplementation Invalid reply from server BadAlloc Unable to allocate storage BadMatch A compatible version of Xkb was not available in the server or an argument has correct type and range, but is otherwise invalid BadValue An argument is out of range BadAtom A name is neither a valid Atom or None BadDevice Device, Feedback Class, or Feedback ID invalid
errors BadKeyboard BadKeyboard The Xkb extension adds a single protocol error, BadKeyboard, to the core protocol error set. This error code will be reported as the error_rtrn when XkbQueryExtension is called. When a BadKeyboard error is reported in an XErrorEvent, additional information is reported in the resourceid field. The most significant byte of the resource_id is a further refinement of the error cause, as defined in Table 2.2. The least significant byte will contain the device, class, or feedback ID as indicated in the table. <errorname>BadKeyboard</errorname> Protocol Error resource_id Values high-order byte value meaning low-order byte XkbErr_BadDevice 0xff device not found device ID XkbErr_BadClass 0xfe device found, but it is of the wrong class class ID XkbErr_BadId 0xfd device found, class ok, but device does not contain a feedback with the indicated ID feedback ID
Display and Device Specifications in Function Calls Where a connection to the server is passed as an argument (Display*) and an XkbDescPtr is also passed as an argument, the Display* argument must match the dpy field of the XkbDescRec pointed to by the XkbDescPtr argument, or else the dpy field of the XkbDescRec must be NULL. If they don’t match or the dpy field is not NULL, a BadMatch error is returned (either in the return value or a backfilled Status variable). Upon successful return, the dpy field of the XkbDescRec always contains the Display* value passed in. The Xkb extension can communicate with the X input extension if it is present. Consequently, there can potentially be more than one input device connected to the server. Most Xkb library calls that require communicating with the server involve both a server connection (Display * dpy) and a device identifier (unsigned int device_spec). In some cases, the device identifier is implicit and is taken as the device_spec field of an XkbDescRec structure passed as an argument. XkbUseCoreKbd The device identifier can specify any X input extension device with a KeyClass component, or it can specify the constant, XkbUseCoreKbd. The use of XkbUseCoreKbd allows applications to indicate the core keyboard without having to determine its device identifier. Where an Xkb device identifier is passed as an argument and an XkbDescPtr is also passed as an argument, if either the argument or the XkbDescRec device_spec field is XkbUseCoreKbd, and if the function returns successfully, the XkbDescPtr device_spec field will have been converted from XkbUseCoreKbd to a real Xkb device ID. If the function does not complete successfully, the device_spec field remains unchanged. Subsequently, the device id argument must match the device_spec field of the XkbDescPtr argument. If they don’t match, a BadMatch error is returned (either in the return value or a backfilled Status variable). When the Xkb extension in the server hands an application a device identifier to use for the keyboard, that ID is the input extension identifier for the device if the server supports the X Input Extension. If the server does not support the input extension, the meaning of the identifier is undefined — the only guarantee is that when you use XkbUseCoreKbd, XkbUseCoreKbd will work and the identifier returned by the server will refer to the core keyboard device.
tension, the X library normally implements preXkb keyboard functions using the Xkb keyboard description and state. The server Xkb keyboard state may differ from the preXkb keyboard state. This difference does not affect most clients, but there are exceptions. To allow these clients to work properly, you may instruct the extension not to use Xkb functionality.
Call XkbIgnoreExtension to prevent core X library keyboard functions from libX11-1.6.3/specs/XKB/XKBlib-5.svg000064401431060000012000000731221247741723500166220ustar00alancstaff00002660200006 image/svg+xml 0.5 0.140625,-0.3125 0.671875,-1.21875 1.625,-1.21875 0.453125,0 0.53125,0.375 0.53125,0.703125 0,0.609375 -0.484375,1.890625 -0.640625,2.3125 C 3.578125,-0.9375 3.5625,-0.8125 3.5625,-0.703125 c 0,0.46875 0.359375,0.8125 0.828125,0.8125 0.9375,0 1.296875,-1.453125 1.296875,-1.53125 0,-0.109375 -0.078125,-0.109375 -0.109375,-0.109375 -0.109375,0 -0.109375,0.03125 -0.15625,0.1875 -0.203125,0.671875 -0.53125,1.234375 -1.015625,1libX11-1.6.3/specs/XKB/XKBlib-2.svg000064401431060000012000000772351247741723500166300ustar00alancstaff00002660200006 image/svg+xml Xkb State Base Modifiers Base Group Locked Modifiers Locked Group Latched Modifiers Latched Group Core Pointer Buttons Server Internal Modifiers IgnoreLock Modifiers IgnoreGroupLock Compatibility Map Effective Group Effective Modifiers Compatibility State Compatibility Lookup State Compatibility Grab State Lookup State Grab State id="text8147-3-1-6" y="145.50685" x="269.78455" style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu SanlibX11-1.6.3/specs/XKB/ch08.xml000064401431060000012000001712011247741723500161050ustar00alancstaff00002660200006 Indicators indicators Although the core X implementation supports up to 32 LEDs on an input device, it does not provide any linkage between the state of the LEDs and the logical state of the input device. For example, most keyboards have a CapsLock LED, but X does not provide a mechanism to make the LED automatically follow the logical state of the CapsLock key. Furthermore, the core X implementation does not provide clients with the ability to determine what bits in the led_mask field of the XKeyboardState map to the particular LEDs on the keyboard. For example, X does not provide a method for a client to determine what bit to set in the led_mask field to turn on the Scroll Lock LED or whether the keyboard even has a Scroll Lock LED. Xkb provides indicator names and programmable indicators to help solve these problems. Using Xkb, clients can determine the names of the various indicators, determine and control the way that the individual indicators should be updated to reflect keyboard changes, and determine which of the 32 keyboard indicators reported by the protocol are actually present on the keyboard. Clients may also request immediate notification of changes to the state of any subset of the keyboard indicators, which makes it straightforward to provide an on-screen virtual LED panel. This chapter describes Xkb indicators and the functions used for manipulating them. Indicator Names Xkb provides the capability of symbolically naming indicators. Xkb itself doesn’t use these symbolic names for anything; they are there only to help make the keyboard description comprehensible to humans. To set the names of specific indicators, use XkbSetNames as discussed in . Then set the map using XkbSetMap (see section 14.3) or XkbSetNamedIndicator (below). To retrieve indicator names, use XkbGetNames (). Indicator Data Structures Use the indicator description record, XkbIndicatorRec, and its indicator map, XkbIndicatorMapRec, to inquire about and control most indicator properties and behaviors. XkbIndicatorRec XkbIndicatorRec The description for all the Xkb indicators is held in the indicators field of the complete keyboard description (see ), which is defined as follows: #define XkbNumIndicators 32 typedef struct { unsigned long phys_indicators; /* LEDs existence */ XkbIndicatorMapRec maps[XkbNumIndicators]; /* indicator maps */ } XkbIndicatorRec, *XkbIndicatorPtr; This structure contains the phys_indicators field, which relates some information about the correspondence between indicators and physical LEDs on the keyboard, and an array of indicator maps, one map per indicator. The phys_indicators field indicates which indicators are bound to physical LEDs on the keyboard; if a bit is set in phys_indicators, then the associated indicator has a physical LED associated with it. This field is necessary because some indicators may not have corresponding physical LEDs on the keyboard. For example, most keyboards have an LED for indicating the state of CapsLock, but most keyboards do not have an LED that indicates the current group. Because phys_indicators describes a physical characteristic of the keyboard, you cannot directly change it under program control. However, if a client program loads a completely new keyboard description via XkbGetKeyboardByName, or if a new keyboard is attached and the X implementation notices, phys_indicators changes if the indicators for the new keyboard are different. XkbIndicatorMapRec XkbIndicatorMapRec Each indicator has its own set of attributes that specify whether clients can explicitly set its state and whether it tracks the keyboard state. The attributes of each indicator are held in the maps array, which is an array of XkbIndicatorRec structures: typedef struct { unsigned char flags; /* how the indicator can be changed */ unsigned char which_groups; /* match criteria for groups */ unsigned char groups; /* which keyboard groups the indicator watches */ unsigned char which_mods; /* match criteria for modifiers */ XkbModsRec mods; /* which modifiers the indicator watches */ unsigned int ctrls; /* which controls the indicator watches */ } XkbIndicatorMapRec, *XkbIndicatorMapPtr; This indicator map specifies for each indicator: The conditions under which the keyboard modifier state affects the indicator The conditions under which the keyboard group state affects the indicator The conditions under which the state of the boolean controls affects the indicator The effect (if any) of attempts to explicitly change the state of the indicator using the functions XkbSetControls or XChangeKeyboardControl For more information on the effects of explicit changes to indicators and the relationship to the indicator map, see section 8.4.1. XkbIndicatorMapRec flags field The flags field specifies the conditions under which the indicator can be changed and the effects of changing the indicator. The valid values for flags and their effects are shown in Table 8.1. XkbIndicatorMapRec flags Field Value Effect XkbIM_NoExplicit (1L<<7) Client applications cannot change the state of the indicator. XkbIM_NoAutomatic (1L<<6) Xkb does not automatically change the value of the indicator based upon a change in the keyboard state, regardless of the values for the other fields of the indicator map. XkbIM_LEDDrivesKB (1L<<5) A client application changing the state of the indicator causes the state of the keyboard to change.
Note that if XkbIM_NoAutomatic is not set, by default the indicator follows the keyboard state. If XkbIM_LEDDrivesKB is set and XkbIM_NoExplicit is not, and if you call a function which updates the server’s image of the indicator map (such as XkbSetIndicatorMap or XkbSetNamedIndicator), Xkb changes the keyboard state and controls to reflect the other fields of the indicator map, as described in the remainder of this section. If you attempt to explicitly change the value of an indicator for which XkbIM_LEDDrivesKB is absent or for which XkbIM_NoExplicit is present, keyboard state or controls are unaffected. For example, a keyboard designer may want to make the CapsLock LED controllable only by the server, but allow the Scroll Lock LED to be controlled by client applications. To do so, the keyboard designer could set the XkbIM_NoExplicit flag for the CapsLock LED, but not set it for the Scroll Lock LED. Or the keyboard designer may wish to allow the CapsLock LED to be controlled by both the server and client applications and also have the server to automatically change the CapsLock modifier state whenever a client application changes the CapsLock LED. To do so, the keyboard designer would not set the XkbIM_NoExplicit flag, but would instead set the XkbIM_LEDDrivesKB flag. The remaining fields in the indicator map specify the conditions under which Xkb automatically turns an indicator on or off (only if XkbIM_NoAutomatic is not set). If these conditions match the keyboard state, Xkb turns the indicator on. If the conditions do not match, Xkb turns the indicator off.
XkbIndicatorMapRec which_groups and groups fields The which_groups and the groups fields of an indicator map determine how the keyboard group state affects the corresponding indicator. The which_groups field controls the interpretation of groups and may contain any one of the following values: #define XkbIM_UseNone 0 #define XkbIM_UseBase (1L << 0) #define XkbIM_UseLatched (1L << 1) #define XkbIM_UseLocked (1L << 2) #define XkbIM_UseEffective (1L << 3) #define XkbIM_UseAnyGroup XkbIM_UseLatched | XkbIM_UseLocked | XkbIM_UseEffective The groups field specifies what keyboard groups an indicator watches and is the bitwise inclusive OR of the following valid values: #define XkbGroup1Mask (1<<0) #define XkbGroup2Mask (1<<1) #define XkbGroup3Mask (1<<2) #define XkbGroup4Mask (1<<3) #define XkbAnyGroupMask (1<<7) #define XkbAllGroupsMask (0xf) If XkbIM_NoAutomatic is not set (the keyboard drives the indicator), the effect of which_groups and groups is shown in Table 8.2. XkbIndicatorMapRec which_groups and groups, Keyboard Drives Indicator which_groups Effect XkbIM_UseNone The groups field and the current keyboard group state are ignored. XkbIM_UseBase If groups is nonzero, the indicator is lit whenever the base keyboard group is nonzero. If groups is zero, the indicator is lit whenever the base keyboard group is zero. XkbIM_UseLatched If groups is nonzero, the indicator is lit whenever the latched keyboard group is nonzero. If groups is zero, the indicator is lit whenever the latched keyboard group is zero. XkbIM_UseLocked The groups field is interpreted as a mask. The indicator is lit when the current locked keyboard group matches one of the bits that are set in groups. XkbIM_UseEffective The groups field is interpreted as a mask. The indicator is lit when the current effective keyboard group matches one of the bits that are set in groups.
The effect of which_groups and groups when you change an indicator for which XkbIM_LEDDrivesKB is set (the indicator drives the keyboard) is shown in Table 8.3. The New State column refers to the new state to which you set the indicator. XkbIndicatorMapRec which_groups and groups, Indicator Drives Keyboard which_groups New State Effect on Keyboard Group State XkbIM_UseNone On or Off No effect XkbIM_UseBase On or Off No effect XkbIM_UseLatched On The groups field is treated as a group mask. The keyboard group latch is changed to the lowest numbered group specified in groups; if groups is empty, the keyboard group latch is changed to zero. XkbIM_UseLatched Off The groups field is treated as a group mask. If the indicator is explicitly extinguished, keyboard group latch is changed to the lowest numbered group not specified in groups; if groups is zero, the keyboard group latch is set to the index of the highest legal keyboard group. XkbIM_UseLocked or XkbIM_UseEffective On If the groups mask is empty, group is not changed; otherwise, the locked keyboard group is changed to the lowest numbered group specified in groups. XkbIM_UseLocked or XkbIM_UseEffective Off Locked keyboard group is changed to the lowest numbered group that is not specified in the groups mask, or to Group1 if the groups mask contains all keyboard groups.
XkbIndicatorMapRec which_mods and mods fields The mods field specifies what modifiers an indicator watches. The mods field is an Xkb modifier definition, XkbModsRec, as described in section 7.2, which can specify both real and virtual modifiers. The mods field takes effect even if some or all of the virtual indicators specified in mods are unbound. To specify the mods field, in general, assign the modifiers of interest to mods.real_mods and the virtual modifiers of interest to mods.vmods. You can disregard the mods.mask field unless your application needs to interpret the indicator map directly (that is, to simulate automatic indicator behavior on its own). Relatively few applications need to do so, but if you find it necessary, you can either read the indicator map back from the server after you update it (the server automatically updates the mask field whenever any of the real or virtual modifiers are changed in the modifier definition) or you can use XkbVirtualModsToReal to determine the proper contents for the mask field, assuming that the XkbDescRec contains the virtual modifier definitions. which_mods specifies what criteria Xkb uses to determine a match with the corresponding mods field by specifying one or more components of the Xkb keyboard state. If XkbIM_NoAutomatic is not set (the keyboard drives the indicator), the indicator is lit whenever any of the modifiers specified in the mask field of the mods modifier definition are also set in any of the current keyboard state components specified by which_mods. Remember that the mask field is comprised of all of the real modifiers specified in the definition plus any real modifiers that are bound to the virtual modifiers specified in the definition. (See for more information on the keyboard state and for more information on virtual modifiers.) Use a bitwise inclusive OR of the following values to compose a value for which_mods: #define XkbIM_UseNone 0 #define XkbIM_UseBase (1L << 0) #define XkbIM_UseLatched (1L << 1) #define XkbIM_UseLocked (1L << 2) #define XkbIM_UseEffective (1L << 3) #define XkbIM_UseCompat (1L << 4) #define XkbIM_UseAnyMods XkbIM_UseBase | XkbIM_UseLatched | XkbIM_UseLocked | XkbIM_UseEffective | XkbIM_UseCompat If XkbIM_NoAutomatic is not set (the keyboard drives the indicator), the effect of which_mods and mods is shown in Table 8.4 XkbIndicatorMapRec which_mods and mods, Keyboard Drives Indicator which_mods Effect on Keyboard Modifiers XkbIM_UseNone The mods field and the current keyboard modifier state are ignored. XkbIM_UseBase The indicator is lit when any of the modifiers specified in the mask field of mods are on in the keyboard base state. If both mods.real_mods and mods.vmods are zero, the indicator is lit when the base keyboard state contains no modifiers. XkbIM_UseLatched The indicator is lit when any of the modifiers specified in the mask field of mods are latched. If both mods.real_mods and mods.vmods are zero, the indicator is lit when none of the modifier keys are latched. XkbIM_UseLocked The indicator is lit when any of the modifiers specified in the mask field of mods are locked. If both mods.real_mods and mods.vmods are zero, the indicator is lit when none of the modifier keys are locked. XkbIM_UseEffective The indicator is lit when any of the modifiers specified in the mask field of mods are in the effective keyboard state. If both mods.real_mods and mods.vmods are zero, the indicator is lit when the effective keyboard state contains no modifiers. XkbIM_UseCompat The indicator is lit when any of the modifiers specified in the mask field of mods are in the keyboard compatibility state. If both mods.real_mods and mods.vmods are zero, the indicator is lit when the keyboard compatibility state contains no modifiers.
The effect on the keyboard modifiers of which_mods and mods when you change an indicator for which XkbIM_LEDDrivesKB is set (the indicator drives the keyboard) is shown in Table 8.5. The New State column refers to the new state to which you set the indicator. XkbIndicatorMapRec which_mods and mods, Indicator Drives Keyboard which_mods New State Effect on Keyboard Modifiers XkbIM_UseNone or XkbIM_UseBase On or Off No Effect XkbIM_UseLatched On Any modifiers specified in the mask field of mods are added to the latched modifiers. XkbIM_UseLatched Off Any modifiers specified in the mask field of mods are removed from the latched modifiers. XkbIM_UseLocked, XkbIM_UseCompat, or XkbIM_UseEffective On Any modifiers specified in the mask field of mods are added to the locked modifiers. XkbIM_UseLocked Off Any modifiers specified in the mask field of mods are removed from the locked modifiers. XkbIM_UseCompat or XkbIM_UseEffective Off Any modifiers specified in the mask field of mods are removed from both the locked and latched modifiers.
XkbIndicatorMapRec ctrls field The ctrls field specifies what controls (see ) the indicator watches and is composed using the bitwise inclusive OR of the following values: #define XkbRepeatKeysMask (1L << 0) #define XkbSlowKeysMask (1L << 1) #define XkbBounceKeysMask (1L << 2) #define XkbStickyKeysMask (1L << 3) #define XkbMouseKeysMask (1L << 4) #define XkbMouseKeysAccelMask (1L << 5) #define XkbAccessXKeysMask (1L << 6) #define XkbAccessXTimeoutMask (1L << 7) #define XkbAccessXFeedbackMask (1L << 8) #define XkbAudibleBellMask (1L << 9) #define XkbOverlay1Mask (1L << 10) #define XkbOverlay2Mask (1L << 11) #define XkbAllBooleanCtrlsMask (0x00001FFF) Xkb lights the indicator whenever any of the boolean controls specified in ctrls is enabled.
Getting Information About Indicators Xkb allows applications to obtain information about indicators using two different methods. The first method, which is similar to the core X implementation, uses a mask to specify the indicators. The second method, which is more suitable for applications concerned with interoperability, uses indicator names. The correspondence between the indicator name and the bit position in masks is as follows: one of the parameters returned from XkbGetNamedIndicator is an index that is the bit position to use in any function call that requires a mask of indicator bits, as well as the indicator’s index into the XkbIndicatorRec array of indicator maps. Getting Indicator State Because the state of the indicators is relatively volatile, the keyboard description does not hold the current state of the indicators. To obtain the current state of the keyboard indicators, use XkbGetIndicatorState. XkbGetIndicatorState Status XkbGetIndicatorState Display *display unsigned int device_spec unsigned int *state_return display connection to the X server device_spec device ID, or XkbUseCoreKbd state_return backfilled with a mask of the indicator state XkbGetIndicatorState queries the display for the state of the indicators on the device specified by the device_spec. For each indicator that is turned on on the device, the associated bit is set in state_return. If a compatible version of the Xkb extension is not available in the server, XkbGetIndicatorState returns a BadMatch error. Otherwise, it sends the request to the X server, places the state of the indicators into state_return, and returns Success. Thus the value reported by XkbGetIndicatorState is identical to the value reported by the core protocol. Getting Indicator Information by Index To get the map for one or more indicators, using a mask to specify the indicators, use XkbGetIndicatorMap. XkbGetIndicatorMap Status XkbGetIndicatorMap Display *dpy unsigned int which XkbDescPtr desc dpy connection to the X server which mask of indicators for which maps should be returned desc keyboard description to be updated XkbGetIndicatorMap obtains the maps from the server for only those indicators specified by the which mask and copies the values into the keyboard description specified by desc. If the indicators field of the desc parameter is NULL, XkbGetIndicatorMap allocates and initializes it. XkbGetIndicatorMap can generate BadAlloc, BadLength, BadMatch, and BadImplementation errors. To free the indicator maps, use XkbFreeIndicatorMaps (see section 8.6). Getting Indicator Information by Name Xkb also allows applications to refer to indicators by name. Use XkbGetNames to get the indicator names (see ). Using names eliminates the need for hard-coding bitmask values for particular keyboards. For example, instead of using vendor-specific constants such as WSKBLed_ScrollLock mask on Digital workstations or XLED_SCROLL_LOCK on Sun workstations, you can instead use XkbGetNamedIndicator to look up information on the indicator named Scroll Lock. Use XkbGetNamedIndicator to look up the indicator map and other information for an indicator by name. XkbGetNamedIndicator Bool XkbGetNamedIndicator Display *dpy unsigned int device_spec Atom name int *ndx_rtrn Bool *state_rtrn XkbIndicatorMapPtr map_rtrn Bool *real_rtrn dpy connection to the X server device_spec keyboard device ID, or XkbUseCoreKbd name name of the indicator to be retrieved ndx_rtrn backfilled with the index of the retrieved indicator state_rtrn backfilled with the current state of the retrieved indicator map_rtrn backfilled with the mapping for the retrieved indicator real_rtrn backfilled with True if the named indicator is real (physical) If the device specified by device_spec has an indicator named name, XkbGetNamedIndicator returns True and populates the rest of the parameters with information about the indicator. Otherwise, XkbGetNamedIndicator returns False. The ndx_rtrn field returns the zero-based index of the named indicator. This index is the bit position to use in any function call that requires a mask of indicator bits, as well as the indicator’s index into the XkbIndicatorRec array of indicator maps. state_rtrn returns the current state of the named indicator (True = on, False = off). map_rtrn returns the indicator map for the named indicator. In addition, if the indicator is mapped to a physical LED, the real_rtrn parameter is set to True. Each of the "_rtrn" arguments is optional; you can pass NULL for any unneeded "_rtrn" arguments. XkbGetNamedIndicator can generate BadAtom and BadImplementation errors. Changing Indicator Maps and State Just as you can get the indicator map using a mask or using an indicator name, so you can change it using a mask or a name. You cannot change the phys_indicators field of the indicators structure. The only way to change the phys_indicators field is to change the keyboard map. There are two ways to make changes to indicator maps and state: either change a local copy of the indicator maps and use XkbSetIndicatorMap or XkbSetNamedIndicator, or, to reduce network traffic, use an XkbIndicatorChangesRec structure and use XkbChangeIndicators. Effects of Explicit Changes on Indicators This section discusses the effects of explicitly changing indicators depending upon different settings in the indicator map. See Table 8.3 and Table 8.5 for information on the effects of the indicator map fields when explicit changes are made. If XkbIM_LEDDrivesKB is set and XkbIM_NoExplicit is not, and if you call a function that updates the server’s image of the indicator map (such as XkbSetIndicatorMap or XkbSetNamedIndicator), Xkb changes the keyboard state and controls to reflect the other fields of the indicator map. If you attempt to explicitly change the value of an indicator for which XkbIM_LEDDrivesKB is absent or for which XkbIM_NoExplicit is present, keyboard state or controls are unaffected. If neither XkbIM_NoAutomatic nor XkbIM_NoExplicit is set in an indicator map, Xkb honors any request to change the state of the indicator, but the new state might be immediately superseded by automatic changes to the indicator state if the keyboard state or controls change. The effects of changing an indicator that drives the keyboard are cumulative; it is possible for a single change to affect keyboard group, modifiers, and controls simultaneously. If you change an indicator for which both the XkbIM_LEDDrivesKB and XkbIM_NoAutomatic flags are specified, Xkb applies the keyboard changes specified in the other indicator map fields and changes the indicator to reflect the state that was explicitly requested. The indicator remains in the new state until it is explicitly changed again. If the XkbIM_NoAutomatic flag is not set and XkbIM_LEDDrivesKB is set, Xkb applies the changes specified in the other indicator map fields and sets the state of the indicator to the values specified by the indicator map. Note that it is possible in this case for the indicator to end up in a different state than the one that was explicitly requested. For example, Xkb does not extinguish an indicator with which_mods of XkbIM_UseBase and mods of Shift if, at the time Xkb processes the request to extinguish the indicator, one of the Shift keys is physically depressed. If you explicitly light an indicator for which XkbIM_LEDDrivesKB is set, Xkb enables all of the boolean controls specified in the ctrls field of its indicator map. Explicitly extinguishing such an indicator causes Xkb to disable all of the boolean controls specified in ctrls. Changing Indicator Maps by Index To update the maps for one or more indicators, first modify a local copy of the keyboard description, then use XkbSetIndicatorMap to download the changes to the server: XkbSetIndicatorMap Bool XkbSetIndicatorMap Display *dpy unsigned int which XkbDescPtr desc dpy connection to the X server which mask of indicators to change desc keyboard description from which the maps are taken For each bit set in the which parameter, XkbSetIndicatorMap sends the corresponding indicator map from the desc parameter to the server. Changing Indicator Maps by Name XkbSetNamedIndicator can do several related things: Name an indicator if it is not already named Toggle the state of the indicator Set the indicator to a specified state Set the indicator map for the indicator XkbSetNamedIndicator BoolXkbSetNamedIndicator Display *dpy unsigned int device_spec Atom name Bool change_state Bool state Bool create_new XkbIndicatorMapPtr map dpy connection to the X server device_spec device ID, or XkbUseCoreKbd name name of the indicator to change change_state whether to change the indicator state or not state desired new state for the indicator create_new whether a new indicator with the specified name should be created when necessary map new map for the indicator If a compatible version of the Xkb extension is not available in the server, XkbSetNamedIndicator returns False. Otherwise, it sends a request to the X server to change the indicator specified by name and returns True. If change_state is True, and the optional parameter, state, is not NULL, XkbSetNamedIndicator tells the server to change the state of the named indicator to the value specified by state. If an indicator with the name specified by name does not already exist, the create_new parameter tells the server whether it should create a new named indicator. If create_new is True, the server finds the first indicator that doesn’t have a name and gives it the name specified by name. If the optional parameter, map, is not NULL, XkbSetNamedIndicator tells the server to change the indicator’s map to the values specified in map. XkbSetNamedIndicator can generate BadAtom and BadImplementation errors. In addition, it can also generate XkbIndicatorStateNotify (see section 8.5), XkbIndicatorMapNotify, and XkbNamesNotify events (see section 18.5). The XkbIndicatorChangesRec Structure XkbIndicatorChangesRec The XkbIndicatorChangesRec identifies small modifications to the indicator map. Use it with the function XkbChangeIndicators to reduce the amount of traffic sent to the server. typedef struct _XkbIndicatorChanges { unsigned int state_changes; unsigned int map_changes; } XkbIndicatorChangesRec,*XkbIndicatorChangesPtr; The state_changes field is a mask that specifies the indicators that have changed state, and map_changes is a mask that specifies the indicators whose maps have changed. To change indicator maps or state without passing the entire keyboard description, use XkbChangeIndicators. XkbChangeIndicators Bool XkbChangeIndicators Display *dpy XkbDescPtr xkb XkbIndicatorChangesPtr changes unsigned int state dpy connection to the X server xkb keyboard description from which names are to be taken. changes indicators to be updated on the server state new state of indicators listed in changes->state_changes XkbChangeIndicators copies any maps specified by changes from the keyboard description, xkb, to the server specified by dpy. If any bits are set in the state_changes field of changes, XkbChangeIndicators also sets the state of those indicators to the values specified in the state mask. A 1 bit in state turns the corresponding indicator on, a 0 bit turns it off. XkbChangeIndicators can generate BadAtom and BadImplementation errors. In addition, it can also generate XkbIndicatorStateNotify and XkbIndicatorMapNotify events (see section 8.5). Tracking Changes to Indicator State or Map eventsXkbIndicatorStateNotify XkbIndicatorStateNotifyEvent eventsXkbIndicatorMapNotify XkbIndicatorMapNotifyEvent Whenever an indicator changes state, the server sends XkbIndicatorStateNotify events to all interested clients. Similarly, whenever an indicator’s map changes, the server sends XkbIndicatorMapNotify events to all interested clients. To receive XkbIndicatorStateNotify events, use XkbSelectEvents (see section 4.3) with both the bits_to_change and values_for_bits parameters containing XkbIndicatorStateNotifyMask. To receive XkbIndicatorMapNotify events, use XkbSelectEvents with XkbIndicatorMapNotifyMask. To receive events for only specific indicators, use XkbSelectEventDetails. Set the event_type parameter to XkbIndicatorStateNotify or XkbIndicatorMapNotify, and set both the bits_to_change and values_for_bits detail parameters to a mask where each bit specifies one indicator, turning on those bits that specify the indicators for which you want to receive events. Both types of indicator events use the same structure: typedef struct _XkbIndicatorNotify { int type; /* Xkb extension base event code */ unsigned long serial; /* X server serial number for event */ Bool send_event; /* True ⇒ synthetically generated */ Display * display; /* server connection where event generated */ Time time; /* server time when event generated */ int xkb_type; /* specifies state or map notify */ int device; /* Xkb device ID, will not be XkbUseCoreKbd */ unsigned int changed; /* mask of indicators with new state or map */ unsigned int state; /* current state of all indicators */ } XkbIndicatorNotifyEvent; xkb_type is either XkbIndicatorStateNotify or XkbIndicatorMapNotify, depending on whether the event is a XkbIndicatorStateNotify event or XkbIndicatorMapNotify, event. The changed parameter is a mask that is the bitwise inclusive OR of the indicators that have changed. If the event is of type XkbIndicatorMapNotify, changed reports the maps that changed. If the event is of type XkbIndicatorStateNotify, changed reports the indicators that have changed state. state is a mask that specifies the current state of all indicators, whether they have changed or not, for both XkbIndicatorStateNotify and XkbIndicatorMapNotify events. When your client application receives either a XkbIndicatorStateNotify event or XkbIndicatorMapNotify event, you can note the changes in a changes structure by calling XkbNoteIndicatorChanges. XkbNoteIndicatorChanges void XkbNoteIndicatorChanges XkbIndicatorChangesPtr old XkbIndicatorNotifyEvent *new unsigned int wanted old XkbIndicatorChanges structure to be updated new event from which changes are to be copied wanted which changes are to be noted The wanted parameter is the bitwise inclusive OR of XkbIndicatorMapMask and XkbIndicatorStateMask. XkbNoteIndicatorChanges copies any changes reported in new and specified in wanted into the changes record specified by old. To update a local copy of the keyboard description with the actual values, pass the results of one or more calls to XkbNoteIndicatorChanges to XkbGetIndicatorChanges: XkbGetIndicatorChanges Status XkbGetIndicatorChanges Display *dpy XkbDescPtr xkb XkbIndicatorChangesPtr changes unsigned int *state dpy connection to the X server xkb keyboard description to hold the new values changes indicator maps/state to be obtained from the server state backfilled with the state of the indicators XkbGetIndicatorChanges examines the changes parameter, pulls over the necessary information from the server, and copies the results into the xkb keyboard description. If any bits are set in the state_changes field of changes, XkbGetIndicatorChanges also places the state of those indicators in state. If the indicators field of xkb is NULL, XkbGetIndicatorChanges allocates and initializes it. To free the indicators field, use XkbFreeIndicatorMaps (see section 8.6). XkbGetIndicatorChanges can generate BadAlloc, BadImplementation, and BadMatch errors. Allocating and Freeing Indicator Maps Most applications do not need to directly allocate the indicators member of the keyboard description record (the keyboard description record is described in ). If the need arises, however, use XkbAllocIndicatorMaps. XkbAllocIndicatorMaps Status XkbAllocIndicatorMaps XkbDescPtr xkb xkb keyboard description structure The xkb parameter must point to a valid keyboard description. If it doesn’t, XkbAllocIndicatorMaps returns a BadMatch error. Otherwise, XkbAllocIndicatorMaps allocates and initializes the indicators member of the keyboard description record and returns Success. If XkbAllocIndicatorMaps was unable to allocate the indicators record, it reports a BadAlloc error. To free memory used by the indicators member of an XkbDescRec structure, use XkbFreeIndicatorMaps. XkbFreeIndicatorMaps void XkbFreeIndicatorMaps XkbDescPtr xkb xkb keyboard description structure If the indicators member of the keyboard description record pointed to by xkb is not NULL, XkbFreeIndicatorMaps frees the memory associated with the indicators member of xkb.
ectEvents (see section 4.3) with both the bits_to_change and values_for_bits parameters containing XkbIndicatorStateNotifyMask. To receive XkbIndicatorMapNotify events, use XkbSelectEvents with XkbIndicatorMapNotifyMasklibX11-1.6.3/specs/XKB/ch01.xml000064401431060000012000000342041247741723500160770ustar00alancstaff00002660200006 Overview The X Keyboard Extension provides capabilities that are lacking or are cumbersome in the core X protocol. Core X Protocol Support for Keyboards The core X protocol specifies the ways that the Shift, Control, and Lock modifiers and the modifiers bound to the Mode_switch or Num_Lock keysyms interact to generate keysyms and characters. The core protocol also allows users to specify that a key affects one or more modifiers. This behavior is simple and fairly flexible, but it has a number of limitations that make it difficult or impossible to properly support many common varieties of keyboard behavior. The limitations of core protocol support for keyboards include: Use of a single, uniform, four-symbol mapping for all keyboard keys makes it difficult to properly support keyboard overlays, PC-style break keys, or keyboards that comply with ISO9995, or a host of other national and international standards. A second keyboard group may be specified using a modifier, but this has side effects that wreak havoc with client grabs and X toolkit translations. Furthermore, this approach limits the number of keyboard groups to two. Poorly specified locking key behavior requires X servers to look for a few magic keysyms to determine that keys should lock when pressed. This leads to incompatibilities between X servers with no way for clients to detect implementation differences. Poorly specified capitalization and control behavior requires modifications to X library source code to support new character sets or locales and can lead to incompatibilities between system wide and X library capitalization behavior. Limited interactions between modifiers specified by the core protocol make many common keyboard behaviors difficult or impossible to implement. For example, there is no reliable way to indicate whether or not the shift modifier should cancel the lock modifier. The lack of any explicit descriptions for indicators, most modifiers, and other aspects of the keyboard appearance requires clients that wish to clearly describe the keyboard to a user to resort to a mish-mash of prior knowledge and heuristics. Xkb Keyboard Extension Support for Keyboards The X Keyboard Extension makes it possible to clearly and explicitly specify most aspects of keyboard behavior on a per-key basis. It adds the notion of a keyboard group to the global keyboard state and provides mechanisms to more closely track the logical and physical state of the keyboard. For keyboard-control clients, Xkb provides descriptions and symbolic names for many aspects of keyboard appearance and behavior. In addition, the X Keyboard Extension includes additional keyboard controls designed to make keyboards more accessible to people with movement impairments. Xkb Extension Components The Xkb extension is composed of two parts: a server extension, and a client-side X library extension. These consist of a loadable module that may be activated when an X server is started and a modified version of Xlib. Both server and Xlib versions must be at least X11 R6. Figure 1.1 shows the overall structure of the Xkb extension:
Overall Xkb Structure
The server portion of the Xkb extension encompasses a database of named keyboard components, in unspecified format, that may be used to configure a keyboard. Internally, the server maintains a keyboard description keyboard description that includes the keyboard state and configuration (mapping). By keyboard we mean the logical keyboard device, which includes not only the physical keys, but also potentially a set of up to 32 indicators (usually LEDs) and bells. The keyboard description is a composite of several different data structures, each of which may be manipulated separately. When manipulating the server components, the design allows partial components to be transmitted between the server and a client. The individual components are shown in Figure 1.1. Client Map The key mapping information needed to convert arbitrary keycodes to symbols. Server Map The key mapping information categorizing keys by functionality (which keys are modifiers, how keys behave, and so on). Controls Client configurable quantities effecting how the keyboard behaves, such as repeat behavior and modifications for people with movement impairments. Indicators The mapping of behavior to indicators. Geometry A complete description of the physical keyboard layout, sufficient to draw a representation of the keyboard. Names A mapping of names to various aspects of the keyboard such as individual virtual modifiers, indicators, and bells. Compatibility Map The definition of how to map core protocol keyboard state to Xkb keyboard state. A client application interrogates and manipulates the keyboard by reading and writing portions of the server description for the keyboard. In a typical sequence a client would fetch the current information it is interested in, modify it, and write it back. If a client wishes to track some portion of the keyboard state, it typically maintains a local copy of the portion of the server keyboard description dealing with the items of interest and updates this local copy from events describing state transitions that are sent by the server. A client may request the server to reconfigure the keyboard either by sending explicit reconfiguration instructions to it, or by telling it to load a new configuration from its database of named components. Partial reconfiguration and incremental reconfiguration are both supported. Groups and Shift Levels The graphic characters or control functions that may be accessed by one key are logically arranged in groups and levels. See section 14.1 for a complete description of groups and levels. Radio Groups radio group groupradio A radio group is a set of keys whose behavior simulates a set of radio buttons. Once a key in a radio group is pressed, it stays logically depressed until another key in the group is pressed, at which point the previously depressed key is logically released. Consequently, at most one key in a radio group can be logically depressed at one time. A radio group is defined by a radio group index, an optional name, and by assigning each key in the radio group XkbKB_RadioGroup behavior and the radio group index.
Client Types This specification differentiates between three different classes of client applications: Xkb-aware applications These applications make specific use of Xkb functionality and APIs not present in the core protocol. Xkb-capable applications These applications make no use of Xkb extended functionality and Application Programming Interfaces (APIs) directly. However, they are linked with a version of Xlib that includes Xkb and indirectly benefit from some of Xkb’s features. Xkb-unaware applications These applications make no use of Xkb extended functionality or APIs and require Xkb’s functionality to be mapped to core Xlib functionality to operate properly. Compatibility With the Core Protocol Because the Xkb extension allows a keyboard to be configured in ways not foreseen by the core protocol, and because Xkb-unaware clients are allowed to connect to a server using the Xkb extension, there must be a means of converting between the Xkb domain and the core protocol. The Xkb server extension maintains a compatibility map as part of its keyboard description; this map controls the conversion of Xkb generated events to core protocol events and the results of core protocol requests to appropriate Xkb state and configuration. Additional Protocol Errors The Xkb extension adds a single protocol error, BadKeyboard, to the core protocol error set. See section 2.6 for a discussion of the BadKeyboard protocol error. Extension Library Functions The X Keyboard Extension replaces the core protocol definition of a keyboard with a more comprehensive one. The X Keyboard Extension library interfaces are included in Xlib. X11R6.1 is the first release by the X Consortium, Inc., that includes the X Keyboard Extension in Xlib. X11R6 included work in progress on this extension as nonstandard additions to the library. Xlib detects the presence of the X Keyboard server extension and uses Xkb protocol to replace some standard X library functions related to the keyboard. If an application uses only standard X library functions to examine the keyboard or process key events, it should not need to be modified when linked with an X library containing the X keyboard extension. All of the keyboard-related X library functions have been modified to automatically use Xkb protocol when the server extension is present. The Xkb extension adds library interfaces to allow a client application to directly manipulate the new capabilities. Error Indications errors Xkb functions that communicate with the X server check to be sure the Xkb extension has been properly initialized prior to doing any other operations. If the extension has not been properly initialized or the application, library, and server versions are incompatible, these functions return an error indication as shown in Table 1.1. Because of this test, BadAccess and BadMatch (due to incompatible versions) protocol errors should normally not be generated. Function Error Returns Due to Extension Problems Functions return type Return value pointer to a structure NULL Bool False Status BadAccess
Many Xkb functions do not actually communicate with the X server; they only require processing in the client-side portion of the library. Furthermore, some applications may never actually need to communicate with the server; they simply use the Xkb library capabilities. The functions that do not communicate with the server return either a pointer to a structure, a Bool, or a Status. These functions check that the application has queried the Xkb library version and return the values shown in Table 1.1 if it has not.
ys are modifiers, how keys behave, and so on).
Controls Client configurable quantities effecting how the keyboard behaves, such as repeat behavior and modifications for people with movement impairments. &2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@am__append_1 = $(docbook:.xml=.html) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TEXT_TRUE@@HAVE_XMLTO_TRUE@am__append_2 = $(docbook:.xml=.txt) @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@am__append_3 = $(docbook:.xml=.pdf) \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(docbook:.xml=.ps) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@am__append_4 = $(docbook:.xml=.html.db) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(docbook:.xml=.pdf.db) subdir = specs/XKB ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_define_dir.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__dist_shelf_DATA_DIST) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h \ $(top_builddir)/include/X11/XlibConf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__dist_shelf_DATA_DIST = xkblib.xml acknowledgement.xml ch01.xml \ ch02.xml ch03.xml ch04.xml ch05.xml ch06.xml ch07.xml ch08.xml \ ch09.xml ch10.xml ch11.xml ch12.xml ch13.xml ch14.xml ch15.xml \ ch16.xml ch17.xml ch18.xml ch19.xml ch20.xml ch21.xml ch22.xml \ glossary.xml XKBlib-1.svg XKBlib-2.svg XKBlib-3.svg \ XKBlib-4.svg XKBlib-5.svg XKBlib-6.svg XKBlib-7.svg \ XKBlib-8.svg XKBlib-9.svg XKBlib-10.svg XKBlib-11.svg \ XKBlib-12.svg XKBlib-13.svg XKBlib-14.svg XKBlib-15.svg \ XKBlib-16.svg XKBlib-17.svg XKBlib-18.svg XKBlib-19.svg \ XKBlib-20.svg XKBlib-21.svg am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(shelfdir)" "$(DESTDIR)$(shelfdir)" DATA = $(dist_shelf_DATA) $(shelf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/docbook.am DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASE_CFLAGS = @BASE_CFLAGS@ BIGFONT_CFLAGS = @BIGFONT_CFLAGS@ BIGFONT_LIBS = @BIGFONT_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHANGELOG_CMD = @CHANGELOG_CMD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ FOP = @FOP@ GREP = @GREP@ I18N_MODULE_LIBS = @I18N_MODULE_LIBS@ INSTALL = @INSTALL@ INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ KEYSYMDEFS = @KEYSYMDEFS@ LAUNCHD = @LAUNCHD@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LINT = @LINT@ LINTLIB = @LINTLIB@ LINT_FLAGS = @LINT_FLAGS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MALLOC_ZERO_CFLAGS = @MALLOC_ZERO_CFLAGS@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_SUBSTS = @MAN_SUBSTS@ MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RAWCPP = @RAWCPP@ RAWCPPFLAGS = @RAWCPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRICT_CFLAGS = @STRICT_CFLAGS@ STRIP = @STRIP@ STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ TRADITIONALCPPFLAGS = @TRADITIONALCPPFLAGS@ VERSION = @VERSION@ WCHAR32 = @WCHAR32@ X11_CFLAGS = @X11_CFLAGS@ X11_DATADIR = @X11_DATADIR@ X11_EXTRA_DEPS = @X11_EXTRA_DEPS@ X11_LIBDIR = @X11_LIBDIR@ X11_LIBS = @X11_LIBS@ X11_LOCALEDATADIR = @X11_LOCALEDATADIR@ X11_LOCALEDIR = @X11_LOCALEDIR@ X11_LOCALELIBDIR = @X11_LOCALELIBDIR@ XERRORDB = @XERRORDB@ XKBPROTO_REQUIRES = @XKBPROTO_REQUIRES@ XKEYSYMDB = @XKEYSYMDB@ XLOCALEDATADIR = @XLOCALEDATADIR@ XLOCALEDIR = @XLOCALEDIR@ XLOCALELIBDIR = @XLOCALELIBDIR@ XMALLOC_ZERO_CFLAGS = @XMALLOC_ZERO_CFLAGS@ XMLTO = @XMLTO@ XORG_MAN_PAGE = @XORG_MAN_PAGE@ XORG_SGML_PATH = @XORG_SGML_PATH@ XSLTPROC = @XSLTPROC@ XSL_STYLESHEET = @XSL_STYLESHEET@ XTHREADLIB = @XTHREADLIB@ XTHREAD_CFLAGS = @XTHREAD_CFLAGS@ XTMALLOC_ZERO_CFLAGS = @XTMALLOC_ZERO_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ locales = @locales@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # Main DocBook/XML files (DOCTYPE book) @ENABLE_SPECS_TRUE@docbook = xkblib.xml # Included chapters, appendix, images @ENABLE_SPECS_TRUE@chapters = \ @ENABLE_SPECS_TRUE@ acknowledgement.xml \ @ENABLE_SPECS_TRUE@ ch01.xml \ @ENABLE_SPECS_TRUE@ ch02.xml \ @ENABLE_SPECS_TRUE@ ch03.xml \ @ENABLE_SPECS_TRUE@ ch04.xml \ @ENABLE_SPECS_TRUE@ ch05.xml \ @ENABLE_SPECS_TRUE@ ch06.xml \ @ENABLE_SPECS_TRUE@ ch07.xml \ @ENABLE_SPECS_TRUE@ ch08.xml \ @ENABLE_SPECS_TRUE@ ch09.xml \ @ENABLE_SPECS_TRUE@ ch10.xml \ @ENABLE_SPECS_TRUE@ ch11.xml \ @ENABLE_SPECS_TRUE@ ch12.xml \ @ENABLE_SPECS_TRUE@ ch13.xml \ @ENABLE_SPECS_TRUE@ ch14.xml \ @ENABLE_SPECS_TRUE@ ch15.xml \ @ENABLE_SPECS_TRUE@ ch16.xml \ @ENABLE_SPECS_TRUE@ ch17.xml \ @ENABLE_SPECS_TRUE@ ch18.xml \ @ENABLE_SPECS_TRUE@ ch19.xml \ @ENABLE_SPECS_TRUE@ ch20.xml \ @ENABLE_SPECS_TRUE@ ch21.xml \ @ENABLE_SPECS_TRUE@ ch22.xml \ @ENABLE_SPECS_TRUE@ glossary.xml \ @ENABLE_SPECS_TRUE@ XKBlib-1.svg \ @ENABLE_SPECS_TRUE@ XKBlib-2.svg \ @ENABLE_SPECS_TRUE@ XKBlib-3.svg \ @ENABLE_SPECS_TRUE@ XKBlib-4.svg \ @ENABLE_SPECS_TRUE@ XKBlib-5.svg \ @ENABLE_SPECS_TRUE@ XKBlib-6.svg \ @ENABLE_SPECS_TRUE@ XKBlib-7.svg \ @ENABLE_SPECS_TRUE@ XKBlib-8.svg \ @ENABLE_SPECS_TRUE@ XKBlib-9.svg \ @ENABLE_SPECS_TRUE@ XKBlib-10.svg \ @ENABLE_SPECS_TRUE@ XKBlib-11.svg \ @ENABLE_SPECS_TRUE@ XKBlib-12.svg \ @ENABLE_SPECS_TRUE@ XKBlib-13.svg \ @ENABLE_SPECS_TRUE@ XKBlib-14.svg \ @ENABLE_SPECS_TRUE@ XKBlib-15.svg \ @ENABLE_SPECS_TRUE@ XKBlib-16.svg \ @ENABLE_SPECS_TRUE@ XKBlib-17.svg \ @ENABLE_SPECS_TRUE@ XKBlib-18.svg \ @ENABLE_SPECS_TRUE@ XKBlib-19.svg \ @ENABLE_SPECS_TRUE@ XKBlib-20.svg \ @ENABLE_SPECS_TRUE@ XKBlib-21.svg # The location where the DocBook/XML files and their generated formats are installed @ENABLE_SPECS_TRUE@shelfdir = $(docdir)/XKB # DocBook/XML generated output formats to be installed @ENABLE_SPECS_TRUE@shelf_DATA = $(am__append_1) $(am__append_2) \ @ENABLE_SPECS_TRUE@ $(am__append_3) $(am__append_4) # DocBook/XML file with chapters, appendix and images it includes @ENABLE_SPECS_TRUE@dist_shelf_DATA = $(docbook) $(chapters) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_SEARCHPATH_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --searchpath "$(XORG_SGML_PATH)/X11" \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --searchpath "$(abs_top_builddir)" @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_HTML_OLINK_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam target.database.document=$(XORG_SGML_PATH)/X11/dbs/masterdb.html.xml \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam current.docid="$(<:.xml=)" @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_HTML_STYLESHEET_FLAGS = -x $(STYLESHEET_SRCDIR)/xorg-xhtml.xsl @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_HTML_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_SEARCHPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_HTML_STYLESHEET_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_HTML_OLINK_FLAGS) @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_FO_IMAGEPATH_FLAGS = --stringparam img.src.path=$(abs_builddir)/ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_PDF_OLINK_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam target.database.document=$(XORG_SGML_PATH)/X11/dbs/masterdb.pdf.xml \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam current.docid="$(<:.xml=)" @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_FO_STYLESHEET_FLAGS = -x $(STYLESHEET_SRCDIR)/xorg-fo.xsl @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_FO_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_SEARCHPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_FO_STYLESHEET_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_FO_IMAGEPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_PDF_OLINK_FLAGS) # Generate documents cross-reference target databases @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_SEARCHPATH_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --path "$(XORG_SGML_PATH)/X11" \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --path "$(abs_top_builddir)" @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_OLINK_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --stringparam targets.filename "$@" \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --stringparam collect.xref.targets "only" \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --stringparam olink.base.uri "$(@:.db=)" @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_HTML_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(XSLT_SEARCHPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(XSLT_OLINK_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --nonet --xinclude \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(STYLESHEET_SRCDIR)/xorg-xhtml.xsl @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_PDF_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(XSLT_SEARCHPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(XSLT_OLINK_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --nonet --xinclude \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(STYLESHEET_SRCDIR)/xorg-fo.xsl @ENABLE_SPECS_TRUE@CLEANFILES = $(shelf_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/docbook.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign specs/XKB/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign specs/XKB/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/docbook.am $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_shelfDATA: $(dist_shelf_DATA) @$(NORMAL_INSTALL) @list='$(dist_shelf_DATA)'; test -n "$(shelfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(shelfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(shelfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(shelfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(shelfdir)" || exit $$?; \ done uninstall-dist_shelfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_shelf_DATA)'; test -n "$(shelfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(shelfdir)'; $(am__uninstall_files_from_dir) install-shelfDATA: $(shelf_DATA) @$(NORMAL_INSTALL) @list='$(shelf_DATA)'; test -n "$(shelfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(shelfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(shelfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(shelfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(shelfdir)" || exit $$?; \ done uninstall-shelfDATA: @$(NORMAL_UNINSTALL) @list='$(shelf_DATA)'; test -n "$(shelfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(shelfdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(shelfdir)" "$(DESTDIR)$(shelfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_shelfDATA install-shelfDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_shelfDATA uninstall-shelfDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-dist_shelfDATA install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-shelfDATA install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-dist_shelfDATA uninstall-shelfDATA .PRECIOUS: Makefile @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@%.html: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_HTML_FLAGS) xhtml-nochunks $< @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TEXT_TRUE@@HAVE_XMLTO_TRUE@%.txt: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TEXT_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_HTML_FLAGS) txt $< @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@%.pdf: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FO_FLAGS) --with-fop pdf $< @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@%.ps: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FO_FLAGS) --with-fop ps $< @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@%.html.db: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(AM_V_GEN)$(XSLTPROC) $(XSLT_HTML_FLAGS) $< @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@%.pdf.db: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(AM_V_GEN)$(XSLTPROC) $(XSLT_PDF_FLAGS) $< # Generate DocBook/XML output formats with or without stylesheets # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_OLINK_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --stringparam targets.filename "$@" \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --stringparam collect.xref.targets "only" \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --stringparam olinklibX11-1.6.3/specs/XKB/ch06.xml000064401431060000012000000266031247741723500161100ustar00alancstaff00002660200006 Complete Keyboard Description The complete Xkb description for a keyboard device is accessed using a single structure containing pointers to major Xkb components. This chapter describes this single structure and provides references to other sections of this document that discuss the major Xkb components in detail. The XkbDescRec Structure XkbDescRec The complete description of an Xkb keyboard is given by an XkbDescRec. The component structures in the XkbDescRec represent the major Xkb components outlined in Figure 1.1. typedef struct { struct _XDisplay * display; /* connection to X server */ unsigned short flags; /* private to Xkb, do not modify */ unsigned short device_spec; /* device of interest */ KeyCode min_key_code; /* minimum keycode for device */ KeyCode max_key_code; /* maximum keycode for device */ XkbControlsPtr ctrls; /* controls */ XkbServerMapPtr server; /* server keymap */ XkbClientMapPtr map; /* client keymap */ XkbIndicatorPtr indicators; /* indicator map */ XkbNamesPtr names; /* names for all components */ XkbCompatMapPtr compat; /* compatibility map */ XkbGeometryPtr geom; /* physical geometry of keyboard */ } XkbDescRec, *XkbDescPtr; The display field points to an X display structure. The flags field is private to the library: modifying flags may yield unpredictable results. The device_spec field specifies the device identifier of the keyboard input device, or XkbUseCoreKbd, which specifies the core keyboard device. The min_key_code and max_key_code fields specify the least and greatest keycode that can be returned by the keyboard. The other fields specify structure components of the keyboard description and are described in detail in other sections of this document. Table 6.1 identifies the subsequent sections of this document that discuss the individual components of the XkbDescRec. XkbDescRec Component References XkbDescRec Field For more info ctrls server map indicators names compat geom
Each structure component has a corresponding mask bit that is used in function calls to indicate that the structure should be manipulated in some manner, such as allocating it or freeing it. These masks and their relationships to the fields in the XkbDescRec are shown in Table 6.2. Mask Bits for XkbDescRec Mask Bit XkbDescRec Field Value XkbControlsMask ctrls (1L<<0) XkbServerMapMask server (1L<<1) XkbIClientMapMask map (1L<<2) XkbIndicatorMapMask indicators (1L<<3) XkbNamesMask names (1L<<4) XkbCompatMapMask compat (1L<<5) XkbGeometryMask geom (1L<<6) XkbAllComponentsMask All Fields (0x7f)
Obtaining a Keyboard Description from the Server To retrieve one or more components of a keyboard device description, use XkbGetKeyboard (see also XkbGetKeyboardByName). XkbGetKeyboard XkbDescPtr XkbGetKeyboard Display *display unsigned int which unsigned int device_spec display connection to X server which mask indicating components to return device_spec device for which to fetch description, or XkbUseCoreKbd XkbGetKeyboard allocates and returns a pointer to a keyboard description. It queries the server for those components specified in the which parameter for device device_spec and copies the results to the XkbDescRec it allocated. The remaining fields in the keyboard description are set to NULL. The valid masks for which are those listed in Table 6.2. XkbGetKeyboard can generate BadAlloc protocol errors. To free the returned keyboard description, use XkbFreeKeyboard (see section 6.4). Tracking Changes to the Keyboard Description in the Server The server can generate events whenever its copy of the keyboard description for a device changes. Refer to section 14.4 for detailed information on tracking changes to the keyboard description. Allocating and Freeing a Keyboard Description Applications seldom need to directly allocate a keyboard description; calling XkbGetKeyboard usually suffices. In the event you need to create a keyboard description from scratch, however, use XkbAllocKeyboard rather than directly calling malloc or Xmalloc. XkbAllocKeyboard XkbDescRec *XkbAllocKeyboard If XkbAllocKeyboard fails to allocate the keyboard description, it returns NULL. Otherwise, it returns a pointer to an empty keyboard description structure. The device_spec field will have been initialized to XkbUseCoreKbd. You may then either fill in the structure components or use Xkb functions to obtain values for the structure components from a keyboard device. To destroy either an entire an XkbDescRec or just some of its members, use XkbFreeKeyboard. XkbFreeKeyboard void XkbFreeKeyboard XkbDescPtr xkb unsigned int which Bool free_all xkb keyboard description with components to free which mask selecting components to free free_all True ⇒ free all components and xkb XkbFreeKeyboard frees the components of xkb specified by which and sets the corresponding values to NULL. If free_all is True, XkbFreeKeyboard frees every non- NULL component of xkb and then frees the xkb structure itself.
ntry>XkbIClientMapMask map (1L<<2) XkbIndlibX11-1.6.3/specs/XKB/XKBlib-1.svg000064401431060000012000001004161247741723500166130ustar00alancstaff00002660200006 image/svg+xml Xkb-awareUserApplication Xkb-capableUserApplication Xkb-unawareUserApplication Keyboard Core Xlib Server Database ofKeyboard Components X Server Xkb Server Extension Client Map Server Map Compatibility Map Controls Indicator Map Names Geometry Xkb Modificationsto Core Xlibfunctions XkbAdditionsto Xlib(Xkb*functions) Core Xlib Xkb Extension id="text3057-5-8-4-8-0-3" y="918.67493" x="517.61279" style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-slibX11-1.6.3/specs/XKB/XKBlib-6.svg000064401431060000012000000575751247741723500166410ustar00alancstaff00002660200006 image/svg+xml mk_curve = 0 mk_curve < 0 mk_curve > 0 mk_max_speed * Action delta distance Action delta mk_delay(msec) mk_time_to_max(count) mk_interval(msec) id="path5563-6-8" inkscape:connector-curvature="0" /> image/svg+xml Editing Function Alpha Keypad -9-0" style="fill:none;stroke:#000000;stroke-width:0.99999988;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:nonlibX11-1.6.3/specs/XKB/XKBlib-15.svg000064401431060000012000001205251247741723500167030ustar00alancstaff00002660200006 image/svg+xml XkbClientMapRec size_types num_types types size_syms num_syms syms key_sym_map mod_map unsigned char(array) KeySym(s)(array) Atom(s)(array) XkbKTMapEntryRec(s)(array) kt_index[0] kt_index[1] kt_index[2] kt_index[3] group_info width offset XkbSymMapRec(s)(array) mods num_levels map_count map preserve name level_names XkbKeyTypeRec(s)(array) Key Code 649658" x="209.78336" style="font-size:9px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%libX11-1.6.3/specs/XKB/XKBlib-12.svg000064401431060000012000000752521247741723500167060ustar00alancstaff00002660200006 image/svg+xml XkbSelectionRec(s)(array) rows doodads bounds overlays . . . XkbBoundsRec . . . rows bounds section_under XkbOverlayRec(s)(array) XkbBoundsRec XkbOverlayKeyRec(s)(array) . . . keys row_under XkbOverlayRowRec(s)(array) . . . bounds keys XkbRowRec(s)(array) XkbSectionRec andXkbRowRecrepeated fromFigure 16.4 family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans" xml:space="preserve">. . . Debugging Aids The debugging aids are intended for use primarily by Xkb implementors and are optional in any implementation. There are two bitmasks that may be used to control debugging. One bitmask controls the output of debugging information, and the other controls behavior. Both bitmasks are initially all zeros. To change the values of any of the debug controls, use XkbSetDebuggingFlags. XkbSetDebuggingFlags Bool XkbSetDebuggingFlags Display *display unsigned int mask unsigned int flags char *msg unsigned int ctrls_mask unsigned int ctrls unsigned int *ret_flags unsigned int *ret_ctrls display connection to X server mask mask selecting debug output flags to change flags values for debug output flags selected by mask msg message to print right now ctrls_mask mask selecting debug controls to change ctrls values for debug controls selected by ctrls_mask ret_flags resulting state of all debug output flags ret_ctrls resulting state of all debug controls XkbSetDebuggingFlags modifies the debug output flags as specified by mask and flags, modifies the debug controls flags as specified by ctrls_mask and ctrls, prints the message msg, and backfills ret_flags and ret_ctrls with the resulting debug output and debug controls flags. When bits are set in the debug output masks, mask and flags, Xkb prints debug information corresponding to each bit at appropriate points during its processing. The device to which the output is written is implementation-dependent, but is normally the same device to which X server error messages are directed; thus the bits that can be set in mask and flags is implementation-specific. To turn on a debug output selection, set the bit for the output in the mask parameter and set the corresponding bit in the flags parameter. To turn off event selection for an event, set the bit for the output in the mask parameter and do not set the corresponding bit in the flags parameter. When bits are set in the debug controls masks, ctrls_mask and ctrls, Xkb modifies its behavior according to each controls bit. ctrls_mask and ctrls are related in the same way that mask and flags are. The valid controls bits are defined in Table 22.1. Debug Control Masks Debug Control Mask Value Meaning XkbDF_DisableLocks (1 << 0) Disable actions that lock modifiers
XkbSetDebuggingFlags returns True if successful and False otherwise. The only protocol error it may generate is BadAlloc, if for some reason it is unable to allocate storage. XkbSetDebuggingFlags is intended for developer use and may be disabled in production X servers. If it is disabled, XkbSetDebuggingFlags has no effect and does not generate any protocol errors. The message in msg is written immediately. The device to which it is written is implementation dependent but is normally the same device where X server error messages are directed.
varlistentry> ret_flags resulting state of all debug output flags libX11-1.6.3/specs/XKB/ch17.xml000064401431060000012000001622241247741723500161120ustar00alancstaff00002660200006 The Xkb Compatibility Map As shown in Figure 17.1, the X server is normally dealing with more than one client, each of which may be receiving events from the keyboard, and each of which may issue requests to modify the keyboard in some manner. Each client may be either Xkb-unaware, Xkb-capable, or Xkb-aware. The server itself may be either Xkb-aware or Xkb-unaware. If the server is Xkb-unaware, Xkb state and keyboard mappings are not involved in any manner, and Xkb-aware clients may not issue Xkb requests to the server. If the server is Xkb-aware, the server must be able to deliver events and accept requests in which the keyboard state and mapping are compatible with the mode in which the client is operating. Consequently, for some situations, conversions must be made between Xkb state / keyboard mappings and core protocol state / keyboard mappings, and vice versa.
Server Interaction with Types of Clients
In addition to these situations involving a single server, there are cases where a client that deals with multiple servers may need to configure keyboards on different servers to be similar and the different servers may not all be Xkb-aware. Finally, a client may be dealing with descriptions of keyboards (files, and so on) that are based on core protocol and therefore may need to be able to map these descriptions to Xkb descriptions. An Xkb-aware server maintains keyboard state and mapping as an Xkb keyboard state and an Xkb keyboard mapping plus a compatibility map used to convert from Xkb components to core components and vice versa. In addition, the server also maintains a core keyboard mapping that approximates the Xkb keyboard mapping. The core keyboard mapping may be updated piecemeal, on a per-key basis. When the server receives a core protocol ChangeKeyboardMapping or SetModifierMapping request, it updates its core keyboard mapping, then uses the compatibility map to update its Xkb keyboard mapping. When the server receives an XkbSetMap request, it updates those portions of its Xkb keyboard mapping specified by the request, then uses its compatibility map to update the corresponding parts of its core keyboard map. Consequently, the server’s Xkb keyboard map and also its core keyboard map may contain components that were set directly and others that were computed. Figure 17.2 illustrates these relationships. The core keyboard map is contained only in the server, not in any client-side data structures.
Server Derivation of State and Keyboard Mapping Components
There are three kinds of compatibility transformations made by the server: Xkb State to Core State Keyboard state information reported to a client in the state field of various core events may be translated from the Xkb keyboard state maintained by the server, which includes a group number, to core protocol state, which does not. In addition, whenever the Xkb state is retrieved, the compat_state, compat_grab_mods, and compat_lookup_mods fields of the XkbStateRec returned indicate the result of applying the compatibility map to the current Xkb state in the server. Core Keyboard Mapping to Xkb Keyboard Mapping After core protocol requests received by the server to change the keyboard mapping (ChangeKeyboardMapping and SetModifierMapping) have been applied to the server’s core keyboard map, the results must be transformed to achieve an equivalent change of the Xkb keyboard mapping maintained by the server. Xkb Keyboard Mapping to Core Keyboard Mapping After Xkb protocol requests received by the server to change the keyboard mapping (XkbSetMap) have been applied to the server’s Xkb keyboard map, the results are transformed to achieve an approximately equivalent change to the core keyboard mapping maintained by the server. This chapter discusses how a client may modify the compatibility map so that subsequent transformations have a particular result. The XkbCompatMap Structure XkbCompatMapRec All configurable aspects of mapping Xkb state and configuration to and from core protocol state and configuration are defined by a compatibility map, contained in an XkbCompatMapRec structure; plus a set of explicit override controls used to prevent particular components of type 2 (core-to-Xkb keyboard mapping) transformations from automatically occurring. These explicit override controls are maintained in a separate data structure discussed in section 16.3. The compat member of an Xkb keyboard description (XkbDescRec) points to the XkbCompatMapRec structure: typedef struct _XkbCompatMapRec { XkbSymInterpretPtr sym_interpret; /* symbol based key semantics */ XkbModsRec groups[XkbNumKbdGroups]; /* group ⇒ modifier map */ unsigned short num_si; /* # structures used in sym_interpret */ unsigned short size_si; /* # structures allocated in sym_interpret */ } XkbCompatMapRec, *XkbCompatMapPtr;
Xkb Compatibility Data Structures
The subsections that follow discuss how the compatibility map and explicit override controls are used in each of the three cases where compatibility transformations are made. Xkb State to Core Protocol State Transformation As shown in Figure 17.3, there are four group compatibility maps group compatibility map mapgroup compatibility (contained in groups [0..3]) in the XkbCompatMapRec structure, one per possible Xkb group. Each group compatibility map is a modifier definition (see section 7.2 for a description of modifier definitions). The mask component of the definition specifies which real modifiers should be set in the core protocol state field when the corresponding group is active. Because only one group is active at any one time, only one of the four possible transformations is ever applied at any one point in time. If the device described by the XkbDescRec does not support four groups, the extra groups fields are present, but undefined. Normally, the Xkb-aware server reports keyboard state in the state member of events such as a KeyPress event and ButtonPress event, encoded as follows: bits meaning 15 0 13–14 Group index 8–12 Pointer Buttons 0–7 Modifiers For Xkb-unaware clients, only core protocol keyboard information may be reported. Because core protocol does not define the group index, the group index is mapped to modifier bits as specified by the groups [group index] field of the compatibility map (the bits set in the compatibility map are ORed into bits 0–7 of the state), and bits 13–14 are reported in the event as zero. Core Keyboard Mapping to Xkb Keyboard Mapping Transformation When a core protocol keyboard mapping request is received by the server, the server’s core keyboard map is updated, and then the Xkb map maintained by the server is updated. Because a client may have explicitly configured some of the Xkb keyboard mapping in the server, this automatic regeneration of the Xkb keyboard mapping from the core protocol keyboard mapping should not modify any components of the Xkb keyboard mapping that were explicitly set by a client. The client must set explicit override controls to prevent this from happening (see section 16.3). The core-to-Xkb mapping is done as follows: Map the symbols from the keys in the core keyboard map to groups and symbols on keys in the Xkb keyboard map. The core keyboard mapping is of fixed width, so each key in the core mapping has the same number of symbols associated with it. The Xkb mapping allows a different number of symbols to be associated with each key; those symbols may be divided into a different number of groups (1-4) for each key. For each key, this process therefore involves partitioning the fixed number of symbols from the core mapping into a set of variable-length groups with a variable number of symbols in each group. For example, if the core protocol map is of width five, the partition for one key might result in one group with two symbols and another with three symbols. A different key might result in two groups with two symbols plus a third group with one symbol. The core protocol map requires at least two symbols in each of the first two groups. For each changed key, determine the number of groups represented in the new core keyboard map. This results in a tentative group count for each key in the Xkb map. For each changed key, determine the number of symbols in each of the groups found in step 1a. There is one explicit override control associated with each of the four possible groups for each Xkb key, ExplicitKeyType1 through ExplicitKeyType4. If no explicit override control is set for a group, the number of symbols used for that group from the core map is two. If the explicit override control is set for a group on the key, the number of symbols used for that Xkb group from the core map is the width of the Xkb group with one exception: because of the core protocol requirement for at least two symbols in each of groups one and two, the number of symbols used for groups one and two is the maximum of 2 or the width of the Xkb group. For each changed key, assign the symbols in the core map to the appropriate group on the key. If the total number of symbols required by the Xkb map for a particular key needs more symbols than the core protocol map contains, the additional symbols are taken to be NoSymbol keysyms appended to the end of the core set. If the core map contains more symbols than are needed by the Xkb map, trailing symbols in the core map are discarded. In the absence of an explicit override for group one or two, symbols are assigned in order by group; the first symbols in the core map are assigned to group one, in order, followed by group two, and so on. For example, if the core map contained eight symbols per key, and a particular Xkb map contained 2 symbols for G1 and G2 and three for G3, the symbols would be assigned as (G is group, L is shift level): G1L1 G1L2 G2L1 G2L2 G3L1 G3L2 G3L3 If an explicit override control is set for group one or two, the symbols are taken from the core set in a somewhat different order. The first four symbols from the core set are assigned to G1L1, G1L2, G2L1, G2L2, respectively. If group one requires more symbols, they are taken next, and then any additional symbols needed by group two. Group three and four symbols are taken in complete sequence after group two. For example, a key with four groups and three symbols in each group would take symbols from the core set in the following order: G1L1 G1L2 G2L1 G2L2 G1L3 G2L3 G3L1 G3L2 G3L3 G4L1 G4L2 G4L3 As previously noted, the core protocol map requires at lease two symbols in groups one and two. Because of this, if an explicit override control for an Xkb key is set and group one and / or group two is of width one, it is not possible to generate the symbols taken from the core protocol set and assigned to position G1L2 and / or G2L2. For each group on each changed key, assign a key type appropriate for the symbols in the group. For each changed key, remove any empty or redundant groups. At this point, the groups and their associated symbols have been assigned to the corresponding key definitions in the Xkb map. Apply symbol interpretations to modify key operation. This phase is completely skipped if the ExplicitInterpret override control bit is set in the explicit controls mask for the Xkb key (see section 16.3). For each symbol on each changed key, attempt to match the symbol and modifiers from the Xkb map to a symbol interpretation describing how to generate the symbol. When a match is found in step 2a, apply the symbol interpretation to change the semantics associated with the symbol in the Xkb key map. If no match is found, apply a default interpretation. The symbol interpretations used in step 2 are configurable and may be specified using XkbSymInterpretRec structures referenced by the sym_interpret field of an XkbCompatMapRec (see Figure 17.3). Symbol Interpretations — the XkbSymInterpretRec Structure XkbSymInterpretRec Symbol interpretations are used to guide the X server when it modifies the Xkb keymap in step 2. An initial set of symbol interpretations is loaded by the server when it starts. A client may add new ones using XkbSetCompatMap (see section 17.4). Symbol interpretations result in key semantics being set. When a symbol interpretation is applied, the following components of server key event processing may be modified for the particular key involved: Virtual modifier map Auto repeat Key behavior (may be set to XkbKB_Lock) Key action (see section 16.1) The XkbSymInterpretRec structure specifies a symbol interpretation: typedef struct { KeySym sym; /* keysym of interest or NULL */ unsigned char flags; /* XkbSI_AutoRepeat, XkbSI_LockingKey */ unsigned char match; /* specifies how mods is interpreted */ unsigned char mods; /* modifier bits, correspond to eight real modifiers */ unsigned char virtual_mod; /* 1 modifier to add to key virtual mod map */ XkbAnyAction act; /* action to bind to symbol position on key */ } XkbSymInterpretRec,*XkbSymInterpretPtr; If sym is not NULL, it limits the symbol interpretation to keys on which that particular keysym is selected by the modifiers matching the criteria specified by mods and match. If sym is NULL, the interpretation may be applied to any symbol selected on a key when the modifiers match the criteria specified by mods and match. match must be one of the values shown in Table 17.1 and specifies how the real modifiers specified in mods are to be interpreted. Symbol Interpretation Match Criteria Match Criteria Value Effect XkbSI_NoneOf (0) None of the bits that are on in mods can be set, but other bits can be. XkbSI_AnyOfOrNone (1) Zero or more of the bits that are on in mods can be set, as well as others. XkbSI_AnyOf (2) One or more of the bits that are on in mods can be set, as well as any others. XkbSI_AllOf (3) All of the bits that are on in mods must be set, but others may be set as well. XkbSI_Exactly (4) All of the bits that are on in mods must be set, and no other bits may be set.
In addition to the above bits, match may contain the XkbSI_LevelOneOnly bit, in which case the modifier match criteria specified by mods and match applies only if sym is in level one of its group; otherwise, mods and match are ignored and the symbol matches a condition where no modifiers are set. #define XkbSI_LevelOneOnly (0x80) /* use mods + match only if sym is level 1 */ If no matching symbol interpretation is found, the server uses a default interpretation where: sym = 0 flags = XkbSI_AutoRepeat match = XkbSI_AnyOfOrNone mods = 0 virtual_mod = XkbNoModifier act = SA_NoAction When a matching symbol interpretation is found in step 2a, the interpretation is applied to modify the Xkb map as follows. The act field specifies a single action to be bound to the symbol position; any key event that selects the symbol causes the action to be taken. Valid actions are defined in section 16.1. If the Xkb keyboard map for the key does not have its ExplicitVModMap control set, the XkbSI_LevelOneOnly bit and symbol position are examined. If the XkbSI_LevelOneOnly bit is not set in match or the symbol is in position G1L1, the virtual_mod field is examined. If virtual_mod is not XkbNoModifier, virtual_mod specifies a single virtual modifier to be added to the virtual modifier map for the key. virtual_mod is specified as an index in the range [0..15]. If the matching symbol is in position G1L1 of the key, two bits in the flags field potentially specify additional behavior modifications: #define XkbSI_AutoRepeat (1<<0) /* key repeats if sym is in position G1L1 */ #define XkbSI_LockingKey (1<<1) /* set KB_Lock behavior if sym is in psn G1L1 */ If the Xkb keyboard map for the key does not have its ExplicitAutoRepeat control set, its auto repeat behavior is set based on the value of the XkbSI_AutoRepeat bit. If the XkbSI_AutoRepeat bit is set, the auto-repeat behavior of the key is turned on; otherwise, it is turned off. If the Xkb keyboard map for the key does not have its ExplicitBehavior control set, its locking behavior is set based on the value of the XkbSI_LockingKey bit. If XkbSI_LockingKey is set, the key behavior is set to KB_Lock; otherwise, it is turned off (see section 16.3).
Xkb Keyboard Mapping to Core Keyboard Mapping Transformations Whenever the server processes Xkb requests to change the keyboard mapping, it discards the affected portion of its core keyboard mapping and regenerates it based on the new Xkb mapping. When the Xkb mapping for a key is transformed to a core protocol mapping, the symbols for the core map are taken in the following order from the Xkb map: G1L1 G1L2 G2L1 G2L2 G1L3-n G2L3-n G3L1-n G4L1-n If group one is of width one in the Xkb map, G1L2 is taken to be NoSymbol; similarly, if group two is of width one in the Xkb map, G2L2 is taken to be NoSymbol. If the Xkb key map for a particular key has fewer groups than the core keyboard, the symbols for group one are repeated to fill in the missing core components. For example, an Xkb key with a single width-three group would be mapped to a core mapping counting three groups as: G1L1 G1L2 G1L1 G1L2 G1L3 G1L3 G1L1 G1L2 G1L3 When a core keyboard map entry is generated from an Xkb keyboard map entry, a modifier mapping is generated as well. The modifier mapping contains all of the modifiers affected by any of the actions associated with the key combined with all of the real modifiers associated with any of the virtual modifiers bound to the key. In addition, if any of the actions associated with the key affect any component of the keyboard group, all of the modifiers in the mask field of all of the group compatibility maps are added to the modifier mapping as well. While an XkbSA_ISOLock action can theoretically affect any modifier, if the Xkb mapping for a key specifies an XkbSA_ISOLock action, only the modifiers or group that are set by default are added to the modifier mapping.
Getting Compatibility Map Components From the Server Use XkbGetCompatMap to fetch any combination of the current compatibility map components from the server. When another client modifies the compatibility map, you are notified if you have selected for XkbCompatMapNotify events (see section 17.5). XkbGetCompatMap is particularly useful when you receive an event of this type, as it allows you to update your program’s version of the compatibility map to match the modified version now in the server. If your program is dealing with multiple servers and needs to configure them all in a similar manner, the updated compatibility map may be used to reconfigure other servers. To make a complete matching configuration you must also update the explicit override components of the server state. XkbGetCompatMap Status XkbGetCompatMap Display *display unsigned int which XkbDescRec *xkb display connection to server which mask of compatibility map components to fetch xkb keyboard description where results placed XkbGetCompatMap fetches the components of the compatibility map specified in which from the server specified by display and places them in the compat structure of the keyboard description xkb. Valid values for which are an inclusive OR of the values shown in Table 17.2. Compatibility Map Component Masks Mask Value Affecting XkbSymInterpMask (1<<0) Symbol interpretations XkbGroupCompatMask (1<<1) Group maps XkbAllCompatMask (0x3) All compatibility map components
If no compatibility map structure is allocated in xkb upon entry, XkbGetCompatMap allocates one. If one already exists, its contents are overwritten with the returned results. XkbGetCompatMap fetches compatibility map information for the device specified by the device_spec field of xkb. Unless you have specifically modified this field, it is the default keyboard device. XkbGetCompatMap returns Success if successful, BadAlloc if it is unable to obtain necessary storage for either the return values or work space, BadMatch if the dpy field of the xkb argument is non- NULL and does not match the display argument, and BadLength under certain conditions caused by server or Xkb implementation errors.
Using the Compatibility Map Xkb provides several functions that make it easier to apply the compatibility map to configure a client-side Xkb keyboard mapping, given a core protocol representation of part or all of a keyboard mapping. Obtain a core protocol representation of a keyboard mapping from an actual server (by using XGetKeyboardMapping, for example), a data file, or some other source. To update a local Xkb keyboard map to reflect the mapping expressed by a core format mapping by calling the function XkbUpdateMapFromCore. XkbUpdateMapFromCore Bool XkbUpdateMapFromCore XkbDescPtr xkb KeyCode first_key int num_keys int map_width KeySym *core_keysyms XkbChangesPtr changes xkb keyboard description to update first_key keycode of first key description to update num_keys number of key descriptions to update map_width width of core protocol keymap core_keysyms symbols in core protocol keymap changes backfilled with changes made to Xkb XkbUpdateMapFromCore interprets input argument information representing a keyboard map in core format to update the Xkb keyboard description passed in xkb. Only a portion of the Xkb map is updated — the portion corresponding to keys with keycodes in the range first_key through first_key + num_keys - 1. If XkbUpdateMapFromCore is being called in response to a MappingNotify event, first_key and num_keys are reported in the MappingNotify event. core_keysyms contains the keysyms corresponding to the keycode range being updated, in core keyboard description order. map_width is the number of keysyms per key in core_keysyms. Thus, the first map_width entries in core_keysyms are for the key with keycode first_key, the next map_width entries are for key first_key + 1, and so on. In addition to modifying the Xkb keyboard mapping in xkb, XkbUpdateMapFromCore backfills the changes structure whose address is passed in changes to indicate the modifications that were made. You may then use changes in subsequent calls such as XkbSetMap, to propagate the local modifications to a server. When dealing with core keyboard mappings or descriptions, it is sometimes necessary to determine the Xkb key types appropriate for the symbols bound to a key in a core keyboard mapping. Use XkbKeyTypesForCoreSymbols for this purpose: XkbKeyTypesForCoreSymbols int XkbKeyTypesForCoreSymbols XkbDescPtr xkb int map_width KeySym *core_syms unsigned int protected int *types_inout KeySym *xkb_syms_rtrn xkb keyboard description in which to place symbols map_width width of core protocol keymap in xkb_syms_rtrn core_syms core protocol format array of KeySyms protected explicit key types types_inout backfilled with the canonical types bound to groups one and two for the key xkb_syms_rtrn backfilled with symbols bound to the key in the Xkb mapping XkbKeyTypesForCoreSymbols expands the symbols in core_syms and types in types_inout according to the rules specified in section 12 of the core protocol, then chooses canonical key types (canonical key types are defined in section 15.2.1) for groups 1 and 2 using the rules specified by the Xkb protocol and places them in xkb_syms_rtrn, which will be non- NULL. A core keymap is a two-dimensional array of keysyms. It has map_width columns and max_key_code rows. XkbKeyTypesForCoreSymbols takes a single row from a core keymap, determines the number of groups associated with it, the type of each group, and the symbols bound to each group. The return value is the number of groups, types_inout has the types for each group, and xkb_syms_rtrn has the symbols in Xkb order (that is, groups are contiguous, regardless of size). protected contains the explicitly protected key types. There is one explicit override control associated with each of the four possible groups for each Xkb key, ExplicitKeyType1 through ExplicitKeyType4; protected is an inclusive OR of these controls. map_width is the width of the core keymap and is not dependent on any Xkb definitions. types_inout is an array of four type indices. On input, types_inout contains the indices of any types already assigned to the key, in case they are explicitly protected from change. Upon return, types_inout contains any automatically selected (that is, canonical) types plus any protected types. Canonical types are assigned to all four groups if there are enough symbols to do so. The four entries in types_inout correspond to the four groups for the key in question. If the groups mapping does not change, but the symbols assigned to an Xkb keyboard compatibility map do change, the semantics of the key may be modified. To apply the new compatibility mapping to an individual key to get its semantics updated, use XkbApplyCompatMapToKey. XkbApplyCompatMapToKey Bool XkbApplyCompatMapToKey XkbDescPtr xkb KeyCode key XkbChangesPtr changes xkb keyboard description to be updated key key to be updated changes notes changes to the Xkb keyboard description XkbApplyCompatMapToKey essentially performs the operation described in section 17.1.2 to a specific key. This updates the behavior, actions, repeat status, and virtual modifier bindings of the key. Changing the Server’s Compatibility Map To modify the server’s compatibility map, first modify a local copy of the Xkb compatibility map, then call XkbSetCompatMap. You may allocate a new compatibility map for this purpose using XkbAllocCompatMap (see section 17.6). You may also use a compatibility map from another server, although you need to adjust the device_spec field in the XkbDescRec accordingly. Note that symbol interpretations in a compatibility map ( sym_interpret, the vector of XkbSymInterpretRec structures) are also allocated using this same function. XkbSetCompatMap Bool XkbSetCompatMap Display *display unsigned int which XkbDescPtr xkb Bool update_actions display connection to server which mask of compat map components to set xkb source for compat map components update_actions True ⇒ apply to server’s keyboard map XkbSetCompatMap copies compatibility map information from the keyboard description in xkb to the server specified in display’s compatibility map for the device specified by the device_spec field of xkb. Unless you have specifically modified this field, it is the default keyboard device. which specifies the compatibility map components to be set, and is an inclusive OR of the bits shown in Table 17.2. After updating its compatibility map for the specified device, if update_actions is True, the server applies the new compatibility map to its entire keyboard for the device to generate a new set of key semantics, compatibility state, and a new core keyboard map. If update_actions is False, the new compatibility map is not used to generate any modifications to the current device semantics, state, or core keyboard map. One reason for not applying the compatibility map immediately would be if one server was being configured to match another on a piecemeal basis; the map should not be applied until everything is updated. To force an update at a later time, use XkbSetCompatMap specifying which as zero and update_actions as True. XkbSetCompatMap returns True if successful and False if unsuccessful. The server may report problems it encounters when processing the request subsequently via protocol errors. To add a symbol interpretation to the list of symbol interpretations in an XkbCompatRec, use XkbAddSymInterpret. XkbAddSymInterpret XkbSymInterpretPtr XkbAddSymInterpret XkbDescPtr xkb XkbSymInterpretPtr si Bool updateMap XkbChangesPtr changes xkb keyboard description to be updated si symbol interpretation to be added updateMap True⇒apply compatibility map to keys changes changes are put here XkbAddSymInterpret adds si to the list of symbol interpretations in xkb. If updateMap is True, it (re)applies the compatibility map to all of the keys on the keyboard. If changes is non- NULL, it reports the parts of the keyboard that were affected (unless updateMap is True, not much changes). XkbAddSymInterpret returns a pointer to the actual new symbol interpretation in the list or NULL if it failed. Tracking Changes to the Compatibility Map eventsXkbCompatMapNotify XkbCompatMapNotifyEvent The server automatically generates MappingNotify events when the keyboard mapping changes. If you wish to be notified of changes to the compatibility map, you should select for XkbCompatMapNotify events. If you select for XkbMapNotify events, you no longer receive the automatically generated MappingNotify events. If you subsequently deselect XkbMapNotifyEvent delivery, you again receive MappingNotify events. To receive XkbCompatMapNotify events under all possible conditions, use XkbSelectEvents (see section 4.3) and pass XkbCompatMapNotifyMask in both bits_to_change and values_for_bits. To receive XkbCompatMapNotify events only under certain conditions, use XkbSelectEventDetails using XkbCompatMapNotify as the event_type and specifying the desired map changes in bits_to_change and values_for_bits using mask bits from Table 17.2. Note that you are notified of changes you make yourself, as well as changes made by other clients. The structure for the XkbCompatMapNotifyEvent is: typedef struct { int type; /* Xkb extension base event code */ unsigned long serial; /* X server serial number for event */ Bool send_event; /* True ⇒ synthetically generated */ Display * display; /* server connection where event generated */ Time time; /* server time when event generated */ int xkb_type; /* XkbCompatMapNotify */ int device; /* Xkb device ID, will not be XkbUseCoreKbd */ unsigned int changed_groups; /* number of group maps changed */ int first_si; /* index to 1st changed symbol interpretation */ int num_si; /* number of changed symbol interpretations */ int num_total_si; /* total number of valid symbol interpretations */ } XkbCompatMapNotifyEvent; changed_groups is the number of group compatibility maps that have changed. If you are maintaining a corresponding copy of the compatibility map, or get a fresh copy from the server using XkbGetCompatMap, changed_groups references groups [0.. changed_groups -1] in the XkbCompatMapRec structure. first_si is the index of the first changed symbol interpretation, num_si is the number of changed symbol interpretations, and num_total_si is the total number of valid symbol interpretations. If you are maintaining a corresponding copy of the compatibility map, or get a fresh copy from the server using XkbGetCompatMap, first_si, num_si, and num_total_si are appropriate for use with the compat.sym_interpret vector in this structure. Allocating and Freeing the Compatibility Map If you are modifying the compatibility map, you need to allocate a new compatibility map if you do not already have one available. To do so, use XkbAllocCompatMap. XkbAllocCompatMap Status XkbAllocCompatMap XkbDescPtr xkb unsigned int which unsigned int num_si xkb keyboard description in which to allocate compat map which mask of compatibility map components to allocate num_si number of symbol interpretations to allocate xkb specifies the keyboard description for which compatibility maps are to be allocated. The compatibility map is the compat field in this structure. which specifies the compatibility map components to be allocated (see XkbGetCompatMap, in section 17.2). which is an inclusive OR of the bits shown in Table 17.2. num_si specifies the total number of entries to allocate in the symbol interpretation vector (xkb.compat.sym_interpret). Note that symbol interpretations in a compatibility map (the sym_interpret vector of XkbSymInterpretRec structures) are also allocated using this same function. To ensure that there is sufficient space in the symbol interpretation vector for entries to be added, use XkbAllocCompatMap specifying which as XkbSymInterpretMask and the number of free symbol interpretations needed in num_si. XkbAllocCompatMap returns Success if successful, BadMatch if xkb is NULL, or BadAlloc if errors are encountered when attempting to allocate storage. To free an entire compatibility map or selected portions of one, use XkbFreeCompatMap. XkbFreeCompatMap void XkbFreeCompatMap XkbDescPtr xkb unsigned int which Bool free_map xkb Xkb description in which to free compatibility map which mask of compatibility map components to free free_map True ⇒ free XkbCompatMapRec structure itself which specifies the compatibility map components to be freed (see XkbGetCompatMap, in section 17.2). which is an inclusive OR of the bits shown in Table 17.2 free_map indicates whether the XkbCompatMapRec structure itself should be freed. If free_map is True, which is ignored, all non- NULL compatibility map components are freed, and the compat field in the XkbDescRec referenced by xkb is set to NULL.
parameter>. If updateMap is True, it (re)applies the compatibility map to all of the keys on the keyboard. If changes is non- NULL, it reports the parts of the keyboard that were affected (unless updateMap is True, not much changes). libX11-1.6.3/specs/XKB/ch10.xml000064401431060000012000004657341247741723500161170ustar00alancstaff00002660200006 Keyboard Controls controls server controls controlsserver The Xkb extension is composed of two parts: a server extension, and a client-side X library extension. This chapter discusses functions used to modify controls effecting the behavior of the server portion of the Xkb extension. discusses functions used to modify controls that affect only the behavior of the client portion of the extension; those controls are known as Library Controls. Xkb contains control features that affect the entire keyboard, known as global keyboard controls. Some of the controls may be selectively enabled and disabled; these controls are known as the Boolean Controls. boolean controls controlsboolean Boolean Controls can be turned on or off under program control and can also be automatically set to an on or off condition when a client program exits. The remaining controls, known as the Non-Boolean Controls, non-boolean controls controlsnon-boolean are always active. The XkbControlsRec structure describes the current state of most of the global controls and the attributes effecting the behavior of each of these Xkb features. This chapter describes the Xkb controls and how to manipulate them. There are two possible components for each of the Boolean Controls: attributes describing how the control should work, and a state describing whether the behavior as a whole is enabled or disabled. The attributes and state for most of these controls are held in the XkbControlsRec structure (see section 10.8). You can manipulate the Xkb controls individually, via convenience functions, or as a whole. To treat them as a group, modify an XkbControlsRec structure to describe all of the changes to be made, and then pass that structure and appropriate flags to an Xkb library function, or use a XkbControlsChangesRec (see section 10.10.1) to reduce network traffic. When using a convenience function to manipulate one control individually, you do not use an XkbControlsRec structure directly. The Xkb controls are grouped as shown in Table 10.1. Xkb Keyboard Controls Type of Control Control Name Boolean Control? Controls for enabling and disabling other controls EnabledControls No AutoReset No Control for bell behavior AudibleBell Boolean Controls for repeat key behavior PerKeyRepeat No RepeatKeys Boolean DetectableAutorepeat Boolean Controls for keyboard overlays Overlay1 Boolean Overlay2 Boolean Controls for using the mouse from the keyboard MouseKeys Boolean MouseKeysAccel Boolean Controls for better keyboard access by AccessXFeedback Boolean physically impaired persons AccessXKeys Boolean AccessXTimeout Boolean BounceKeys Boolean SlowKeys Boolean StickyKeys Boolean Controls for general keyboard mapping GroupsWrap No IgnoreGroupLock Boolean IgnoreLockMods No InternalMods No Miscellaneous per-client controls GrabsUseXKBState Boolean LookupStateWhenGrabbed Boolean SendEventUsesXKBState Boolean
The individual categories and controls are described first, together with functions for manipulating them. A description of the XkbControlsRec structure and the general functions for dealing with all of the controls at once follow at the end of the chapter. Controls that Enable and Disable Other Controls Enable and disable the boolean controls under program control by using the EnabledControls control; enable and disable them upon program exit by configuring the AutoReset control. The EnabledControls Control The EnabledControls control is a bit mask where each bit that is turned on means the corresponding control is enabled, and when turned off, disabled. It corresponds to the enabled_ctrls field of an XkbControlsRec structure (see section 10.8). The bits describing which controls are turned on or off are defined in Table 10.7. Use XkbChangeEnabledControls to manipulate the EnabledControls control. XkbChangeEnabledControls Bool XkbChangeEnabledControls Display *dpy unsigned int device_spec unsigned int mask unsigned int values dpy connection to X server device_spec keyboard device to modify mask 1 bit → controls to enable / disable values 1 bit ⇒ enable, 0 bit ⇒ disable The mask parameter specifies the boolean controls to be enabled or disabled, and the values mask specifies the new state for those controls. Valid values for both of these masks are composed of a bitwise inclusive OR of bits taken from the set of mask bits in Table 10.7, using only those masks with ok in the enabled_ctrls column. If the X server does not support a compatible version of Xkb or the Xkb extension has not been properly initialized, XkbChangeEnabledControls returns False; otherwise, it sends the request to the X server and returns True. Note that the EnabledControls control only enables and disables controls; it does not configure them. Some controls, such as the AudibleBell control, have no configuration attributes and are therefore manipulated solely by enabling and disabling them. Others, however, have additional attributes to configure their behavior. For example, the RepeatControl control uses repeat_delay and repeat_interval fields to describe the timing behavior of keys that repeat. The RepeatControl behavior is turned on or off depending on the value of the XkbRepeatKeysMask bit, but you must use other means, as described in this chapter, to configure its behavior in detail. The AutoReset Control You can configure the boolean controls to automatically be enabled or disabled when a program exits. This capability is controlled via two masks maintained in the X server on a per-client basis. There is no client-side Xkb data structure corresponding to these masks. Whenever the client exits for any reason, any boolean controls specified in the auto-reset mask auto-reset mask maskauto-reset are set to the corresponding value from the auto-reset values mask. This makes it possible for clients to "clean up after themselves" automatically, even if abnormally terminated. The bits used in the masks correspond to the EnabledControls control bits. For example, a client that replaces the keyboard bell with some other audible cue might want to turn off the AudibleBell control to prevent the server from also generating a sound and avoid cacophony. If the client were to exit without resetting the AudibleBell control, the user would be left without any feedback at all. Setting AudibleBell in both the auto-reset mask and auto-reset values guarantees that the audible bell will be turned back on when the client exits. To get the current values of the auto-reset controls, use XkbGetAutoResetControls. XkbGetAutoResetControls Bool XkbGetAutoResetControls Display *dpy unsigned int *auto_ctrls unsigned int *auto_values dpy connection to X server auto_ctrls specifies which bits in auto_values are relevant auto_values 1 bit ⇒ corresponding control has auto-reset on XkbGetAutoResetControls backfills auto_ctrls and auto_values with the AutoReset control attributes for this particular client. It returns True if successful, and False otherwise. To change the current values of the AutoReset control attributes, use XkbSetAutoResetControls. XkbSetAutoResetControls Bool XkbSetAutoResetControls Display *dpy unsigned int changes unsigned int *auto_ctrls unsigned int *auto_values dpy connection to X server changes controls for which to change auto-reset values auto_ctrls controls from changes that should auto reset auto_values 1 bit ⇒ auto-reset on XkbSetAutoResetControls changes the auto-reset status and associated auto-reset values for the controls selected by changes. For any control selected by changes, if the corresponding bit is set in auto_ctrls, the control is configured to auto-reset when the client exits. If the corresponding bit in auto_values is on, the control is turned on when the client exits; if zero, the control is turned off when the client exits. For any control selected by changes, if the corresponding bit is not set in auto_ctrls, the control is configured to not reset when the client exits. For example: To leave the auto-reset controls for StickyKeys the way they are: ok = XkbSetAutoResetControls(dpy, 0, 0, 0); To change the auto-reset controls so that StickyKeys are unaffected when the client exits: ok = XkbSetAutoResetControls(dpy, XkbStickyKeysMask, 0, 0); To change the auto-reset controls so that StickyKeys are turned off when the client exits: ok = XkbSetAutoResetControls(dpy, XkbStickyKeysMask, XkbStickyKeysMask, 0); To change the auto-reset controls so that StickyKeys are turned on when the client exits: ok = XkbSetAutoResetControls(dpy, XkbStickyKeysMask, XkbStickyKeysMask, XkbStickyKeysMask); XkbSetAutoResetControls backfills auto_ctrls and auto_values with the auto-reset controls for this particular client. Note that all of the bits are valid in the returned values, not just the ones selected in the changes mask. Control for Bell Behavior The X server’s generation of sounds is controlled by the AudibleBell control. Configuration of different bell sounds is discussed in . The AudibleBell Control The AudibleBell control is a boolean control that has no attributes. As such, you may enable and disable it using either the EnabledControls control or the AutoReset control discussed in section 10.1.1. When enabled, protocol requests to generate a sound result in the X server actually producing a real sound; when disabled, requests to the server to generate a sound are ignored unless the sound is forced. See section 9.2. Controls for Repeat Key Behavior auto-repeatcontrols The repeating behavior of keyboard keys is governed by three controls, the PerKeyRepeat control, which is always active, and the RepeatKeys and DetectableAutorepeat controls, which are boolean controls that may be enabled and disabled. PerKeyRepeat determines which keys are allowed to repeat. RepeatKeys governs the behavior of an individual key when it is repeating. DetectableAutorepeat allows a client to detect when a key is repeating as a result of being held down. The PerKeyRepeat Control The PerKeyRepeat control is a bitmask long enough to contain a bit for each key on the device; it determines which individual keys are allowed to repeat. The Xkb PerKeyRepeat control provides no functionality different from that available via the core X protocol. There are no convenience functions in Xkb for manipulating this control. The PerKeyRepeat control settings are carried in the per_key_repeat field of an XkbControlsRec structure, discussed in section 10.8. The RepeatKeys Control The core protocol allows only control over whether or not the entire keyboard or individual keys should auto-repeat when held down. RepeatKeys is a boolean control that extends this capability by adding control over the delay until a key begins to repeat and the rate at which it repeats. RepeatKeys is coupled with the core auto-repeat control: when RepeatKeys is enabled or disabled, the core auto-repeat is enabled or disabled and vice versa. Auto-repeating keys are controlled by two attributes. The first, timeout, is the delay after the initial press of an auto-repeating key and the first generated repeat event. The second, interval, is the delay between all subsequent generated repeat events. As with all boolean controls, configuring the attributes that determine how the control operates does not automatically enable the control as a whole; see section 10.1. To get the current attributes of the RepeatKeys control for a keyboard device, use XkbGetAutoRepeatRate. XkbGetAutoRepeatRate Bool XkbGetAutoRepeatRate Display *display unsigned int device_spec unsigned int *timeout_rtrn unsigned int *interval_rtrn display connection to X server device_spec desired device ID, or XkbUseCoreKbd timeout_rtrn backfilled with initial repeat delay, ms interval_rtrn backfilled with subsequent repeat delay, ms XkbGetAutoRepeatRate queries the server for the current values of the RepeatControls control attributes, backfills timeout_rtrn and interval_rtrn with them, and returns True. If a compatible version of the Xkb extension is not available in the server XkbGetAutoRepeatRate returns False. To set the attributes of the RepeatKeys control for a keyboard device, use XkbSetAutoRepeatRate. XkbSetAutoRepeatRate Bool XkbSetAutoRepeatRate Display *display unsigned int device_spec unsigned int timeout unsigned int interval display connection to X server device_spec device to configure, or XkbUseCoreKbd timeout initial delay, ms interval delay between repeats, ms XkbSetAutoRepeatRate sends a request to the X server to configure the AutoRepeat control attributes to the values specified in timeout and interval. XkbSetAutoRepeatRate does not wait for a reply; it normally returns True. Specifying a zero value for either timeout or interval causes the server to generate a BadValue protocol error. If a compatible version of the Xkb extension is not available in the server, XkbSetAutoRepeatRate returns False. The DetectableAutorepeat Control Auto-repeat is the generation of multiple key events by a keyboard when the user presses a key and holds it down. Keyboard hardware and device-dependent X server software often implement auto-repeat by generating multiple KeyPress events with no intervening KeyRelease event. The standard behavior of the X server is to generate a KeyRelease event for every KeyPress event. If the keyboard hardware and device-dependent software of the X server implement auto-repeat by generating multiple KeyPress events, the device-independent part of the X server by default synthetically generates a KeyRelease event after each KeyPress event. This provides predictable behavior for X clients, but does not allow those clients to detect the fact that a key is auto-repeating. Xkb allows clients to request detectable auto-repeat. detectable auto-repeat auto-repeatdetectable If a client requests and the server supports DetectableAutorepeat, Xkb generates KeyRelease events only when the key is physically released. If DetectableAutorepeat is not supported or has not been requested, the server synthesizes a KeyRelease event for each repeating KeyPress event it generates. DetectableAutorepeat, unlike the other controls in this chapter, is not contained in the XkbControlsRec structure, nor can it be enabled or disabled via the EnabledControls control. Instead, query and set DetectableAutorepeat using XkbGetDetectableAutorepeat and XkbSetDetectableAutorepeat. DetectableAutorepeat is a condition that applies to all keyboard devices for a client’s connection to a given X server; it cannot be selectively set for some devices and not for others. For this reason, none of the Xkb library functions involving DetectableAutorepeat involve a device specifier. To determine whether or not the server supports DetectableAutorepeat, use XkbGetDetectableAutorepeat. XkbGetDetectableAutorepeat Bool XkbGetDetectableAutorepeat Display *display Bool *supported_rtrn display connection to X server supported_rtrn backfilled True if DetectableAutorepeat supported XkbGetDetectableAutorepeat queries the server for the current state of DetectableAutorepeat and waits for a reply. If supported_rtrn is not NULL, it backfills supported_rtrn with True if the server supports DetectableAutorepeat, and False otherwise. XkbGetDetectableAutorepeat returns the current state of DetectableAutorepeat for the requesting client: True if DetectableAutorepeat is set, and False otherwise. To set DetectableAutorepeat, use XkbSetDetectableAutorepeat. This request affects all keyboard activity for the requesting client only; other clients still see the expected nondetectable auto-repeat behavior, unless they have requested otherwise. XkbSetDetectableAutorepeat Bool XkbSetDetectableAutorepeat Display *display Bool detectable Bool *supported_rtrn display connection to X server detectable True ⇒ set DetectableAutorepeat supported_rtrn backfilled True if DetectableAutorepeat supported XkbSetDetectableAutorepeat sends a request to the server to set DetectableAutorepeat on for the current client if detectable is True, and off it detectable is False; it then waits for a reply. If supported_rtrn is not NULL, XkbSetDetectableAutorepeat backfills supported_rtrn with True if the server supports DetectableAutorepeat, and False if it does not. XkbSetDetectableAutorepeat returns the current state of DetectableAutorepeat for the requesting client: True if DetectableAutorepeat is set, and False otherwise. Controls for Keyboard Overlays (Overlay1 and Overlay2 Controls) A keyboard overlay allows some subset of the keyboard to report alternate keycodes when the overlay is enabled. For example, a keyboard overlay can be used to simulate a numeric or editing keypad on a keyboard that does not actually have one by reusing some portion of the keyboard as an overlay. This technique is very common on portable computers and embedded systems with small keyboards. Xkb includes direct support for two keyboard overlays, using the Overlay1 and Overlay2 controls. When Overlay1 is enabled, all of the keys that are members of the first keyboard overlay generate an alternate keycode. When Overlay2 is enabled, all of the keys that are members of the second keyboard overlay generate an alternate keycode. The two overlays are mutually exclusive; any particular key may be in at most one overlay. Overlay1 and Overlay2 are boolean controls. As such, you may enable and disable them using either the EnabledControls control or the AutoReset control discussed in section 10.1.1. To specify the overlay to which a key belongs and the alternate keycode it should generate when that overlay is enabled, assign it either the XkbKB_Overlay1 or XkbKB_Overlay2 key behaviors, as described in section 16.2. Controls for Using the Mouse from the Keyboard Using Xkb, it is possible to configure the keyboard to allow simulation of the X pointer device. This simulation includes both movement of the pointer itself and press and release events associated with the buttons on the pointer. Two controls affect this behavior: the MouseKeys control determines whether or not simulation of the pointer device is active, as well as configuring the default button; the MouseKeysAccel control determines the movement characteristics of the pointer when simulated via the keyboard. Both of them are boolean controls; as such, you may enable and disable them using either the EnabledControls control or the AutoReset control discussed in section 10.1.1. The individual keys that simulate different aspects of the pointer device are determined by the keyboard mapping, discussed in . The MouseKeys Control The MouseKeys control allows a user to control all the mouse functions from the keyboard. When MouseKeys are enabled, all keys with MouseKeys actions bound to them generate core pointer events instead of normal KeyPress and KeyRelease events. The MouseKeys control has a single attribute, mk_dflt_btn that specifies the core button number to be used by mouse keys actions that do not explicitly specify a button. There is no convenience function for getting or setting the attribute; instead use XkbGetControls and XkbSetControls (see section 10.9 and section 10.10). MouseKeys can also be turned on and off by pressing the key combination necessary to produce an XK_Pointer_EnableKeys keysym. The de facto default standard for this is ShiftAltNumLock, but this may vary depending on the keymap. The MouseKeysAccel Control When the MouseKeysAccel control is enabled, the effect of a key-activated pointer motion action changes as a key is held down. If the control is disabled, pressing a mouse-pointer key yields one mouse event. When MouseKeysAccel is enabled, mouse movement is defined by an initial distance specified in the XkbSA_MovePtr action and the following fields in the XkbControlsRec structure (see section 10.8). MouseKeysAccel Fields Field Function mk_delay Time (ms) between the initial key press and the first repeated motion event mk_interval Time (ms) between repeated motion events mk_time_to_max Number of events (count) before the pointer reaches maximum speed mk_max_speed The maximum speed (in pixels per event) the pointer reaches mk_curve The ramp used to reach maximum pointer speed
There are no convenience functions to query or change the attributes of the MouseKeysAccel control; instead use XkbGetControls and XkbSetControls (see section 10.9 and section 10.10). The effects of the attributes of the MouseKeysAccel control depend on whether the XkbSA_MovePtr action (see section 16.1) specifies relative or absolute pointer motion. Absolute Pointer Motion If an XkbSA_MovePtr action specifies an absolute position for one of the coordinates but still allows acceleration, all repeated events contain any absolute coordinates specified in the action. For example, if the XkbSA_MovePtr action specifies an absolute position for the X direction, but a relative motion for the Y direction, the pointer accelerates in the Y direction, but stays at the same X position. Relative Pointer Motion If the XkbSA_MovePtr action specifies relative motion, the initial event always moves the cursor the distance specified in the action. After mk_delay milliseconds, a second motion event is generated, and another occurs every mk_interval milliseconds until the user releases the key. Between the time of the second motion event and mk_time_to_max intervals, the change in pointer distance per interval increases with each interval. After mk_time_to_max intervals have elapsed, the change in pointer distance per interval remains the same and is calculated by multiplying the original distance specified in the action by mk_max_speed. For example, if the XkbSA_MovePtr action specifies a relative motion in the X direction of 5, mk_delay =160, mk_interval =40, mk_time_to_max =30, and mk_max_speed =30, the following happens when the user presses the key: The pointer immediately moves 5 pixels in the X direction when the key is pressed. After 160 milliseconds (mk_delay), and every 40 milliseconds thereafter (mk_interval), the pointer moves in the X direction. The distance in the X direction increases with each interval until 30 intervals ( mk_time_to_max) have elapsed. After 30 intervals, the pointer stops accelerating, and moves 150 pixels ( mk_max_speed * the original distance) every interval thereafter, until the key is released. The increase in pointer difference for each interval is a function of mk_curve. Events after the first but before maximum acceleration has been achieved are accelerated according to the formula: Where action_delta is the relative motion specified by the XkbSA_MovePtr action, mk_max_speed and mk_time_to_max are parameters to the MouseKeysAccel control, and the curveFactor is computed using the MouseKeysAccel mk_curve parameter as follows: With the result that a mk_curve of zero causes the distance moved to increase linearly from action_delta to . A negative mk_curve causes an initial sharp increase in acceleration that tapers off, and a positive curve yields a slower initial increase in acceleration followed by a sharp increase as the number of pointer events generated by the action approaches mk_time_to_max. The legal values for mk_curve are between −1000 and 1000. A distance vs. time graph of the pointer motion is shown in Figure 10.1.
MouseKeys Acceleration
Controls for Better Keyboard Access by Physically Impaired Persons The Xkb extension includes several controls specifically aimed at making keyboard use more effective for physically impaired people. All of these controls are boolean controls and may be individually enabled and disabled, as well as configured to tune their specific behavior. The behavior of these controls is based on the AccessDOS package AccessDOS provides access to the DOS operating system for people with physical impairments and was developed by the Trace R&D Center at the University of Wisconsin. For more information on AccessDOS, contact the Trace R&D Center, Waisman Center and Department of Industrial Engineering, University of Wisconsin-Madison WI 53705-2280. Phone: 608-262-6966. e-mail: info@trace.wisc.edu. . The AccessXKeys Control Enabling or disabling the keyboard controls through a graphical user interface may be impossible for people who need to use the controls. For example, a user who needs SlowKeys (see section 10.6.6) may not even be able to start the graphical application, let alone use it, if SlowKeys is not enabled. To allow easier access to some of the controls, the AccessXKeys control provides a set of special key sequences similar to those available in AccessDOS. When the AccessXKeys control is enabled, the user can turn controls on or off from the keyboard by entering the following standard key sequences: Holding down a Shift key by itself for eight seconds toggles the SlowKeys control. Pressing and releasing the left or right Shift key five times in a row, without any intervening key events and with less than 30 seconds delay between consecutive presses, toggles the state of the StickyKeys control. Simultaneously operating two or more modifier keys deactivates the StickyKeys control. When the AccessXKeys control is disabled, Xkb does not look for the above special key sequences. Some of these key sequences optionally generate audible feedback of the change in state, as described in section 10.6.3, or XkbControlsNotify events, described in section 10.11. The AccessXTimeout Control In environments where computers are shared, features such as SlowKeys present a problem: if SlowKeys is on, the keyboard can appear to be unresponsive because keys are not accepted until they are held for a certain period of time. To help solve this problem, Xkb provides an AccessXTimeout control to automatically change the enabled/disabled state of any boolean controls and to change the value of the AccessXKeys and AccessXFeedback control attributes if the keyboard is idle for a specified period of time. When a timeout as specified by AccessXTimeout occurs and a control is consequently modified, Xkb generates an XkbControlsNotify event. For more information on XkbControlsNotify events, refer to section 10.11. Use XkbGetAccessXTimeout to query the current AccessXTimeout options for a keyboard device. XkbGetAccessXTimeout Bool XkbGetAccessXTimeout Display *display unsigned int device_spec unsigned short *timeout_rtrn unsigned int *ctrls_mask_rtrn unsigned int *ctrls_values_rtrn unsigned short *opts_mask_rtrn unsigned short *opts_values_rtrn display connection to X server device_spec device to query, or XkbUseCoreKbd timeout_rtrn delay until AccessXTimeout, seconds ctrls_mask_rtrn backfilled with controls to modify ctrls_values_rtrn backfilled with on/off status for controls opts_mask_rtrn backfilled with ax_options to modify opts_values_rtrn backfilled with values for ax_options XkbGetAccessXTimeout sends a request to the X server to obtain the current values for the AccessXTimeout attributes, waits for a reply, and backfills the values into the appropriate arguments. The parameters opts_mask_rtrn and opts_values_rtrn are backfilled with the options to modify and the values for ax_options, which is a field in the XkbControlsRec structure (see section 10.8). XkbGetAccessXTimeout returns True if successful; if a compatible version of the Xkb extension is not available in the server, XkbGetAccessXTimeout returns False. To configure the AccessXTimeout options for a keyboard device, use XkbSetAccessXTimeout. XkbSetAccessXTimeout Bool XkbSetAccessXTimeout Display *display unsigned int device_spec unsigned short timeout unsigned int ctrls_mask unsigned int ctrls_values unsigned short opts_mask unsigned short opts_values display connection to X server device_spec device to configure, or XkbUseCoreKbd timeout seconds idle until AccessXTimeout occurs ctrls_mask boolean controls to modify ctrls_values new bits for controls selected by ctrls_mask opts_mask ax_options to change opts_values new bits for ax_options selected by opts_mask timeout specifies the number of seconds the keyboard must be idle before the controls are modified. ctrls_mask specifies what controls are to be enabled or disabled, and ctrls_values specifies whether those controls are to be enabled or disabled. The bit values correspond to those for enabling and disabling boolean controls (see section 10.1.1). The opts_mask field specifies which attributes of the AccessXKeys and AccessXFeedback controls are to be changed, and opts_values specifies the new values for those options. The bit values correspond to those for the ax_options field of an XkbDescRec (see section 10.8). XkbSetAccessXTimeout sends a request to configure the AccessXTimeout control to the server. It does not wait for a reply, and normally returns True. If a compatible version of the Xkb extension is not available in the server, XkbSetAccessXTimeout returns False. The AccessXFeedback Control Just as some keyboards can produce keyclicks to indicate when a key is pressed or repeating, Xkb can provide feedback for the controls by using special beep codes. Use the AccessXFeedback control to configure the specific types of operations that generate feedback. There is no convenience function for modifying the AccessXFeedback control, although the feedback as a whole can be enabled or disabled just as other boolean controls are (see section 10.1). Individual beep codes are turned on or off by modifying the following bits in the ax_options field of an XkbControlsRec structure and using XkbSetControls (see section 10.10): AccessXFeedback Masks Action Beep Code ax_options bit LED turned on High-pitched beep XkbAX_IndicatorFBMask LED turned off Low-pitched beep XkbAX_IndicatorFBMask More than one LED changed state Two high-pitched beeps XkbAX_IndicatorFBMask Control turned on Rising tone XkbAX_FeatureFBMask Control turned off Falling tone XkbAX_FeatureFBMask More than one control changed state Two high-pitched beeps XkbAX_FeatureFBMask SlowKeys and BounceKeys about to be turned on or off Three high-pitched beeps XkbAX_SlowWarnFBMask SlowKeys key pressed Medium-pitched beep XkbAX_SKPressFBMask SlowKeys key accepted Medium-pitched beep XkbAX_SKAcceptFBMask SlowKeys key rejected Low-pitched beep XkbAX_SKRejectFBMask Accepted SlowKeys key released Medium-pitched beep XkbAX_SKReleaseFBMask BounceKeys key rejected Low-pitched beep XkbAX_BKRejectFBMask StickyKeys key latched Low-pitched beep followed by high-pitched beep XkbAX_StickyKeysFBMask StickyKeys key locked High-pitched beep XkbAX_StickyKeysFBMask StickyKeys key unlocked Low-pitched beep XkbAX_StickyKeysFBMask
Implementations that cannot generate continuous tones may generate multiple beeps instead of falling and rising tones; for example, they can generate a high-pitched beep followed by a low-pitched beep instead of a continuous falling tone. Other implementations can only ring the bell with one fixed pitch. In these cases, use the XkbAX_DumbBellFBMask bit of ax_options to indicate that the bell can only ring with a fixed pitch. When any of the above feedbacks occur, Xkb may generate a XkbBellNotify event (see section 9.4).
AccessXNotify Events eventsXkbAccessXNotify XkbAccessXNotifyEvent The server can generate XkbAccessXNotify events for some of the global keyboard controls. The structure for the XkbAccessXNotify event type is as follows: typedef struct { int type; /* Xkb extension base event code */ unsigned long serial; /* X server serial number for event */ Bool send_event; /* True ⇒ synthetically generated */ Display * display; /* server connection where event generated */ Time time; /* server time when event generated */ int xkb_type; /* XkbAccessXNotify */ int device; /* Xkb device ID, will not be XkbUseCoreKbd */ int detail; /* XkbAXN_* */ KeyCode keycode; /* key of event */ int slowKeysDelay; /* current SlowKeys delay */ int debounceDelay; /* current debounce delay */ } XkbAccessXNotifyEvent; The detail field describes what AccessX event just occurred and can be any of the values in Table 10.4. AccessXNotify Events detail Reason XkbAXN_SKPress A key was pressed when SlowKeys was enabled. XkbAXN_SKAccept A key was accepted (held longer than the SlowKeys delay). XkbAXN_SKRelease An accepted SlowKeys key was released. XkbAXN_SKReject A key was rejected (released before the SlowKeys delay expired). XkbAXN_BKAccept A key was accepted by BounceKeys. XkbAXN_BKReject A key was rejected (pressed before the BounceKeys delay expired). XkbAXN_AXKWarning AccessXKeys is about to turn on/off StickyKeys or BounceKeys.
The keycode field reports the keycode of the key for which the event occurred. If the action is related to SlowKeys, the slowKeysDelay field contains the current SlowKeys acceptance delay. If the action is related to BounceKeys, the debounceDelay field contains the current BounceKeys debounce delay. Selecting for AccessX Events To receive XkbAccessXNotify events under all possible conditions, use XkbSelectEvents (see section 4.3) and pass XkbAccessXNotifyMask in both bits_to_change and values_for_bits. To receive XkbStateNotify events only under certain conditions, use XkbSelectEventDetails using XkbAccessXNotify as the event_type and specifying the desired state changes in bits_to_change and values_for_bits using mask bits from Table 10.5. AccessXNotify Event Details XkbAccessXNotify Event Details Value Circumstances XkbAXN_SKPressMask (1<<0) Slow key press notification wanted XkbAXN_SKAcceptMask (1<<1) Slow key accept notification wanted XkbAXN_SKRejectMask (1<<2) Slow key reject notification wanted XkbAXN_SKReleaseMask (1<<3) Slow key release notification wanted XkbAXN_BKAcceptMask (1<<4) Bounce key accept notification wanted XkbAXN_BKRejectMask (1<<5) Bounce key reject notification wanted XkbAXN_AXKWarningMask (1<<6) AccessX warning notification wanted XkbAXN_AllEventsMask (0x7f) All AccessX features notifications wanted
StickyKeys, RepeatKeys, and MouseKeys Events The StickyKeys, RepeatKeys, and MouseKeys controls do not generate specific events. Instead, the latching, unlatching, locking, or unlocking of modifiers using StickyKeys generates XkbStateNotify events as described in section 5.4. Repeating keys generate normal KeyPress and KeyRelease events, though the auto-repeat can be detected using DetectableAutorepeat (see section 10.3.3). Finally, MouseKeys generates pointer events identical to those of the core pointer device. The SlowKeys Control Some users may accidentally bump keys while moving a hand or typing stick toward the key they want. Usually, the keys that are accidentally bumped are just hit for a very short period of time. The SlowKeys control helps filter these accidental bumps by telling the server to wait a specified period, called the SlowKeys acceptance delay, before delivering key events. If the key is released before this period elapses, no key events are generated. Users can then bump any number of keys on their way to the one they want without accidentally getting those characters. Once they have reached the key they want, they can then hold the desired key long enough for the computer to accept it. SlowKeys is a boolean control with one configurable attribute. When the SlowKeys control is active, the server reports the initial key press, subsequent acceptance or rejection, and release of any key to interested clients by sending an appropriate AccessXNotify event (see section 10.6.4). To get the SlowKeys acceptance delay for a keyboard device, use XkbGetSlowKeysDelay. XkbGetSlowKeysDelay Bool XkbGetSlowKeysDelay Display *display unsigned int device_spec unsigned int *delay_rtrn display connection to X server device_spec device ID, or XkbUseCoreKbd delay_rtrn backfilled with SlowKeys delay, ms XkbGetSlowKeysDelay requests the attributes of the SlowKeys control from the server, waits for a reply and backfills delay_rtrn with the SlowKeys delay attribute. XkbGetSlowKeysDelay returns True if successful; if a compatible version of the Xkb extension is not available in the server, XkbGetSlowKeysDelay returns False. To set the SlowKeys acceptance delay for a keyboard device, use XkbSetSlowKeysDelay. XkbSetSlowKeysDelay Bool XkbSetSlowKeysDelay Display *display unsigned int device_spec unsigned int delay display connection to X server device_spec device to configure, or XkbUseCoreKbd delay SlowKeys delay, ms XkbSetSlowKeysDelay sends a request to configure the SlowKeys control to the server. It does not wait for a reply, and normally returns True. Specifying a value of 0 for the delay parameter causes XkbSetSlowKeysDelay to generate a BadValue protocol error. If a compatible version of the Xkb extension is not available in the server XkbSetSlowKeysDelay returns False. The BounceKeys Control Some users may accidentally bounce on a key when they release it. They press it once, then accidentally press it again after they release it. The BounceKeys control temporarily disables a key after it has been pressed, effectively debouncing the keyboard. The period of time the key is disabled after it is released is known as the BounceKeys delay. BounceKeys is a boolean control. When the BounceKeys control is active, the server reports acceptance or rejection of any key to interested clients by sending an appropriate AccessXNotify event (see section 10.6.4). Use XkbGetBounceKeysDelay to query the current BounceKeys delay for a keyboard device. XkbGetBounceKeysDelay Bool XkbGetBounceKeysDelay Display *display unsigned int device_spec unsigned int *delay_rtrn display connection to X server device_spec device ID, or XkbUseCoreKbd delay_rtrn backfilled with bounce keys delay, ms XkbGetBounceKeysDelay requests the attributes of the BounceKeys control from the server, waits for a reply, and backfills delay_rtrn with the BounceKeys delay attribute. XkbGetBounceKeysDelay returns True if successful; if a compatible version of the Xkb extension is not available in the server XkbGetSlowKeysDelay returns False. To set the BounceKeys delay for a keyboard device, use XkbSetBounceKeysDelay. XkbSetBounceKeysDelay Bool XkbSetBounceKeysDelay Display *display unsigned int device_spec unsigned int delay display connection to X server device_spec device to configure, or XkbUseCoreKbd delay bounce keys delay, ms XkbSetBounceKeysDelay sends a request to configure the BounceKeys control to the server. It does not wait for a reply and normally returns True. Specifying a value of zero for the delay parameter causes XkbSetBounceKeysDelay to generate a BadValue protocol error. If a compatible version of the Xkb extension is not available in the server, XkbSetBounceKeysDelay returns False. The StickyKeys Control Some people find it difficult or even impossible to press two keys at once. For example, a one-fingered typist or someone using a mouth stick cannot press the Shift and 1 keys at the same time. The StickyKeys control solves this problem by changing the behavior of the modifier keys. With StickyKeys, the user can first press a modifier, release it, then press another key. For example, to get an exclamation point on a PC-style keyboard, the user can press the Shift key, release it, and then press the 1 key. StickyKeys also allows users to lock modifier keys without requiring special locking keys. When StickyKeys is enabled, a modifier is latched when the user presses it just once. The user can press a modifier twice in a row to lock it, and then unlock it by pressing it one more time. When a modifier is latched, it becomes unlatched when the user presses a nonmodifier key or a pointer button. For instance, to enter the sequence Shift Control Z the user could press and release the Shift key to latch it, then press and release the Control key to latch it, and finally press and release the Z key. Because the Control key is a modifier key, pressing it does not unlatch the Shift key. Thus, after the user presses the Control key, both the Shift and Control modifiers are latched. When the user presses the Z key, the effect is as though the user had pressed Shift Control Z . In addition, because the Z key is not a modifier key, the Shift and Control modifiers are unlatched. Locking a modifier key means that the modifier affects any key or pointer button the user presses until the user unlocks it or it is unlocked programmatically. For example, to enter the sequence ("XKB") on a keyboard where ‘(’ is a shifted ‘9’, ‘)’ is a shifted ‘0’, and ‘"’ is a shifted single quote, the user could press and release the Shift key twice to lock the Shift modifier. Then, when the user presses the 9, ', x, k, b, ', and 0 keys in sequence, it generates ("XKB"). To unlock the Shift modifier, the user can press and release the Shift key. StickyKeys is a boolean control with two separate attributes that may be individually configured: one to automatically disable it, and one to control the latching behavior of modifier keys. StickyKeys Options The StickyKeys control has two options that can be accessed via the ax_options of an XkbControlsRec structure (see section 10.8). The first option, TwoKeys, specifies whether StickyKeys should automatically turn off when two keys are pressed at the same time. This feature is useful for shared computers so people who do not want them do not need to turn StickyKeys off if a previous user left StickyKeys on. The second option, LatchToLock, specifies whether or not StickyKeys locks a modifier when pressed twice in a row. Use XkbGetStickyKeysOptions to query the current StickyKeys attributes for a keyboard device. XkbGetStickyKeysOptions Bool XkbGetStickyKeysOptions Display *display unsigned int device_spec unsigned int *options_rtrn display connection to X server device_spec device ID, or XkbUseCoreKbd options_rtrn backfilled with StickyKeys option mask XkbGetStickyKeysOptions requests the attributes of the StickyKeys control from the server, waits for a reply, and backfills options_rtrn with a mask indicating whether the individual StickyKeys options are on or off. Valid bits in options_rtrn are: XkbAX_TwoKeysMask XkbAX_LatchToLockMask XkbGetStickyKeysOptions returns True if successful; if a compatible version of the Xkb extension is not available in the server XkbGetStickyKeysOptions returns False. To set the StickyKeys attributes for a keyboard device, use XkbSetStickyKeysOptions. XkbSetStickyKeysOptions Bool XkbSetStickyKeysOptions Display *display unsigned int device_spec unsigned int mask unsigned int values display connection to X server device_spec device to configure, or XkbUseCoreKbd mask selects StickyKeys attributes to modify values values for selected attributes XkbSetStickyKeysOptions sends a request to configure the StickyKeys control to the server. It does not wait for a reply and normally returns True. The valid bits to use for both the mask and values parameters are: XkbAX_TwoKeysMask XkbAX_LatchToLockMask If a compatible version of the Xkb extension is not available in the server, XkbSetStickyKeysOptions returns False.
Controls for General Keyboard Mapping There are several controls that apply to the keyboard mapping in general. They control handling of out-of-range group indices and how modifiers are processed and consumed in the server. These are: GroupsWrap IgnoreGroupLock IgnoreLockMods InternalMods IgnoreGroupLock is a boolean control; the rest are always active. Without the modifier processing options provided by Xkb, passive grabs set via translations in a client (for example, Alt<KeyPress>space) do not trigger if any modifiers other than those specified by the translation are set. This results in problems in the user interface when either NumLock or a secondary keyboard group is active. The IgnoreLockMods and IgnoreGroupLock controls make it possible to avoid this behavior without exhaustively specifying a grab for every possible modifier combination. The GroupsWrap Control The GroupsWrap control determines how illegal groups are handled on a global basis. There are a number of valid keyboard sequences that can cause the effective group number to go out of range. When this happens, the group must be normalized back to a valid number. The GroupsWrap control specifies how this is done. When dealing with group numbers, all computations are done using the group index, which is the group number minus one. There are three different algorithms; the GroupsWrap control specifies which one is used: XkbRedirectIntoRange All invalid group numbers are converted to a valid group number by taking the last four bits of the GroupsWrap control and using them as the group index. If the result is still out of range, Group one is used. XkbClampIntoRange All invalid group numbers are converted to the nearest valid group number. Group numbers larger than the highest supported group number are mapped to the highest supported group; those less than one are mapped to group one. XkbWrapIntoRange All invalid group numbers are converted to a valid group number using integer modulus applied to the group index. There are no convenience functions for manipulating the GroupsWrap control. Manipulate the GroupsWrap control via the groups_wrap field in the XkbControlsRec structure, then use XkbSetControls and XkbGetControls (see section 10.9 and section 10.10) to query and change this control. See also section 15.3.2 or a discussion of the related field, group_info, which also normalizes a group under certain circumstances. The IgnoreLockMods Control The core protocol does not provide a way to exclude specific modifiers from grab calculations, with the result that locking modifiers sometimes have unanticipated side effects. The IgnoreLockMods control specifies modifiers that should be excluded from grab calculations. These modifiers are also not reported in any core events except KeyPress and KeyRelease events that do not activate a passive grab and that do not occur while a grab is active. Manipulate the IgnoreLockMods control via the ignore_lock field in the XkbControlsRec structure, then use XkbSetControls and XkbGetControls (see section 10.9 and section 10.10) to query and change this control. Alternatively, use XkbSetIgnoreLockMods. To set the modifiers that, if locked, are not to be reported in matching events to passive grabs, use XkbSetIgnoreLockMods. XkbSetIgnoreLockMods Bool XkbSetIgnoreLockMods Display *display unsigned int device_spec unsigned int affect_real unsigned int real_values unsigned int affect_virtual unsigned int virtual_values display connection to the X server device_spec device ID, or XkbUseCoreKbd affect_real mask of real modifiers affected by this call real_values values for affected real modifiers (1⇒set, 0⇒unset) affect_virtual mask of virtual modifiers affected by this call virtual_values values for affected virtual modifiers (1⇒set, 0⇒unset) XkbSetIgnoreLockMods sends a request to the server to change the server’s IgnoreLockMods control. affect_real and real_values are masks of real modifier bits indicating which real modifiers are to be added and removed from the server’s IgnoreLockMods control. Modifiers selected by both affect_real and real_values are added to the server’s IgnoreLockMods control; those selected by affect_real but not by real_values are removed from the server’s IgnoreLockMods control. Valid values for affect_real and real_values consist of any combination of the eight core modifier bits: ShiftMask, LockMask, ControlMask, Mod1MaskMod5Mask. affect_virtual and virtual_values are masks of virtual modifier bits indicating which virtual modifiers are to be added and removed from the server’s IgnoreLockMods control. Modifiers selected by both affect_virtual and virtual_values are added to the server’s IgnoreLockMods control; those selected by affect_virtual but not by virtual_values are removed from the server’s IgnoreLockMods control. See section 7.1 for a discussion of virtual modifier masks to use in affect_virtual and virtual_values. XkbSetIgnoreLockMods does not wait for a reply from the server. It returns True if the request was sent, and False otherwise. The IgnoreGroupLock Control The IgnoreGroupLock control is a boolean control with no attributes. If enabled, it specifies that the locked state of the keyboard group should not be considered when activating passive grabs. Because IgnoreGroupLock is a boolean control with no attributes, use the general boolean controls functions (see section 10.1) to change its state. The InternalMods Control The core protocol does not provide any means to prevent a modifier from being reported in events sent to clients; Xkb, however makes this possible via the InternalMods control. It specifies modifiers that should be consumed by the server and not reported to clients. When a key is pressed and a modifier that has its bit set in the InternalMods control is reported to the server, the server uses the modifier when determining the actions to apply for the key. The server then clears the bit, so it is not actually reported to the client. In addition, modifiers specified in the InternalMods control are not used to determine grabs and are not used to calculate core protocol compatibility state. Manipulate the InternalMods control via the internal field in the XkbControlsRec structure, using XkbSetControls and XkbGetControls (see section 10.9 and section 10.10). Alternatively, use XkbSetServerInternalMods. To set the modifiers that are consumed by the server before events are delivered to the client, use XkbSetServerInternalMods. XkbSetServerInternalMods Bool XkbSetServerInternalMods Display *display unsigned int device_spec unsigned int affect_real unsigned int real_values unsigned int affect_virtual unsigned int virtual_values display connection to the X server device_spec ‘device ID, or XkbUseCoreKbd affect_real mask of real modifiers affected by this call real_values values for affected real modifiers (1⇒set, 0⇒unset) affect_virtual mask of virtual modifiers affected by this call virtual_values values for affected virtual modifiers (1⇒set, 0⇒unset) XkbSetServerInternalMods sends a request to the server to change the internal modifiers consumed by the server. affect_real and real_values are masks of real modifier bits indicating which real modifiers are to be added and removed from the server’s internal modifiers control. Modifiers selected by both affect_real and real_values are added to the server’s internal modifiers control; those selected by affect_real but not by real_values are removed from the server’s internal modifiers mask. Valid values for affect_real and real_values consist of any combination of the eight core modifier bits: ShiftMask, LockMask, ControlMask, Mod1MaskMod5Mask. affect_virtual and virtual_values are masks of virtual modifier bits indicating which virtual modifiers are to be added and removed from the server’s internal modifiers control. Modifiers selected by both affect_virtual and virtual_values are added to the server’s internal modifiers control; those selected by affect_virtual but not by virtual_values are removed from the server’s internal modifiers control. See section 7.1 for a discussion of virtual modifier masks to use in affect_virtual and virtual_values. XkbSetServerInternalMods does not wait for a reply from the server. It returns True if the request was sent and False otherwise. The XkbControlsRec Structure XkbControlsRec Many of the individual controls described in sections 10.1 through 10.7 may be manipulated via convenience functions discussed in those sections. Some of them, however, have no convenience functions. The XkbControlsRec structure allows the manipulation of one or more of the controls in a single operation and to track changes to any of them in conjunction with the XkbGetControls and XkbSetControls functions. This is the only way to manipulate those controls that have no convenience functions. The XkbControlsRec structure is defined as follows: #define XkbMaxLegalKeyCode 255 #define XkbPerKeyBitArraySize ((XkbMaxLegalKeyCode+1)/8) typedef struct { unsigned char mk_dflt_btn; /* default button for keyboard driven mouse */ unsigned char num_groups; /* number of keyboard groups */ unsigned char groups_wrap; /* how to wrap out-of-bounds groups */ XkbModsRec internal; /* defines server internal modifiers */ XkbModsRec ignore_lock; /* modifiers to ignore when checking for grab */ unsigned int enabled_ctrls; /* 1 bit ⇒ corresponding boolean control enabled */ unsigned short repeat_delay; /* ms delay until first repeat */ unsigned short repeat_interval; /* ms delay between repeats */ unsigned short slow_keys_delay; /* ms minimum time key must be down to be ok */ unsigned short debounce_delay; /* ms delay before key reactivated */ unsigned short mk_delay; /* ms delay to second mouse motion event */ unsigned short mk_interval; /* ms delay between repeat mouse events */ unsigned short mk_time_to_max; /* # intervals until constant mouse move */ unsigned short mk_max_speed; /* multiplier for maximum mouse speed */ short mk_curve; /* determines mouse move curve type */ unsigned short ax_options; /* 1 bit ⇒ Access X option enabled */ unsigned short ax_timeout; /* seconds until Access X disabled */ unsigned short axt_opts_mask; /* 1 bit ⇒ options to reset on Access X timeout */ unsigned short axt_opts_values; /* 1 bit ⇒ turn option on, 0⇒ off */ unsigned int axt_ctrls_mask; /* which bits in enabled_ctrls to modify */ unsigned int axt_ctrls_values; /* values for new bits in enabled_ctrls */ unsigned char per_key_repeat[XkbPerKeyBitArraySize]; /* per key auto repeat */ } XkbControlsRec, *XkbControlsPtr; The general-purpose functions that work with the XkbControlsRec structure use a mask to specify which controls are to be manipulated. Table 10.6 lists these controls, the masks used to select them in the general function calls (which parameter), and the data fields in the XkbControlsRec structure that comprise each of the individual controls. Also listed are the bit used to turn boolean controls on and off and the section where each control is described in more detail. Xkb Controls Control Control Selection Mask (which parameter) Relevant XkbControlsRec Data Fields Boolean Control enabled_ctrls bit Section AccessXFeedback XkbAccessXFeedbackMask ax_options: XkbAX_*FBMask XkbAccessXFeedback­Mask 10.6.3 AccessXKeys XkbAccessXKeys­Mask 10.6.1 AccessXTimeout XkbAccessXTimeoutMask ax_timeout axt_opts_mask axt_opts_values axt_ctrls_mask axt_ctrls_values XkbAccessXTimeout­Mask 10.6.2 AudibleBell XkbAudibleBellMask 9.2 AutoReset 10.1.2 BounceKeys XkbBounceKeysMask debounce_delay XkbBounceKeysMask 10.6.7 Detectable-Autorepeat 10.3.3 EnabledControls XkbControlsEnabledMask enabled_ctrls Non-Boolean Control 10.1.1 GroupsWrap XkbGroupsWrapMask groups_wrap Non-Boolean Control 10.7.1 IgnoreGroupLock XkbIgnoreGroupLock­Mask 10.7.3 IgnoreLockMods XkbIgnoreLockModsMask ignore_lock Non-Boolean Control 5.1 InternalMods XkbInternalModsMask internal Non-Boolean Control 5.1 MouseKeys XkbMouseKeysMask mk_dflt_btn XkbMouseKeysMask 10.5.1 MouseKeysAccel XkbMouseKeysAccelMask mk_delay mk_interval mk_time_to_max mk_max_speed mk_curve XkbMouseKeysAccel­Mask 10.5.2 Overlay1 XkbOverlay1Mask 10.4 Overlay2 XkbOverlay2Mask 10.4 PerKeyRepeat XkbPerKeyRepeatMask per_key_repeat Non-Boolean Control 10.3.1 RepeatKeys XkbRepeatKeysMask repeat_delay repeat_interval XkbRepeatKeysMask 10.3 SlowKeys XkbSlowKeysMask slow_keys_delay XkbSlowKeysMask 10.6.6 StickyKeys XkbStickyKeysMask ax_options: XkbAX_Two­KeysMask XkbAX_Latch­ToLockMask XkbStickyKeysMask 10.6.8
Table 10.7 shows the actual values for the individual mask bits used to select controls for modification and to enable and disable the control. Note that the same mask bit is used to specify general modifications to the parameters used to configure the control (which), and to enable and disable the control (enabled_ctrls). The anomalies in the table (no ok in column) are for controls that have no configurable attributes; and for controls that are not boolean controls and therefore cannot be enabled or disabled. Controls Mask Bits Mask Bit which or changed_ctrls enabled_ctrls Value XkbRepeatKeysMask ok ok (1L<<0) XkbSlowKeysMask ok ok (1L<<1) XkbBounceKeysMask ok ok (1L<<2) XkbStickyKeysMask ok ok (1L<<3) XkbMouseKeysMask ok ok (1L<<4) XkbMouseKeysAccelMask ok ok (1L<<5) XkbAccessXKeysMask ok ok (1L<<6) XkbAccessXTimeoutMask ok ok (1L<<7) XkbAccessXFeedbackMask ok ok (1L<<8) XkbAudibleBellMask ok (1L<<9) XkbOverlay1Mask ok (1L<<10) XkbOverlay2Mask ok (1L<<11) XkbIgnoreGroupLockMask ok (1L<<12) XkbGroupsWrapMask ok (1L<<27) XkbInternalModsMask ok (1L<<28) XkbIgnoreLockModsMask ok (1L<<29) XkbPerKeyRepeatMask ok (1L<<30) XkbControlsEnabledMask ok (1L<<31) XkbAccessXOptionsMask ok ok (XkbStickyKeysMask | XkbAccessXFeedbackMask) XkbAllBooleanCtrlsMask ok (0x00001FFF) XkbAllControlsMask ok (0xF8001FFF)
The individual fields of the XkbControlsRec structure are defined as follows. <sect3 id='mk_dflt_btn'> <title>mk_dflt_btn mk_dflt_btn is an attribute of the MouseKeys control (see section 10.5). It specifies the mouse button number to use for keyboard simulated mouse button operations. Its value should be one of the core symbols Button1Button5. num_groups num_groups is not a part of any control, but is reported in the XkbControlsRec structure whenever any of its components are fetched from the server. It reports the number of groups the particular keyboard configuration uses and is computed automatically by the server whenever the keyboard mapping changes. groups_wrap groups_wrap is an attribute of the GroupsWrap control (see section 10.7.1). It specifies the handling of illegal groups on a global basis. Valid values for groups_wrap are shown in Table 10.8. GroupsWrap options (groups_wrap field) groups_wrap symbolic name value XkbWrapIntoRange (0x00) XkbClampIntoRange (0x40) XkbRedirectIntoRange (0x80)
When groups_wrap is set to XkbRedirectIntoRange, its four low-order bits specify the index of the group to use.
internal internal is an attribute of the InternalMods control (see section 10.7.4). It specifies modifiers to be consumed in the server and not passed on to clients when events are reported. Valid values consist of any combination of the eight core modifier bits: ShiftMask, LockMask, ControlMask, Mod1MaskMod5Mask. ignore_lock ignore_lock is an attribute of the IgnoreLockMods control (see section 10.7.2). It specifies modifiers to be ignored in grab calculations. Valid values consist of any combination of the eight core modifier bits: ShiftMask, LockMask, ControlMask, Mod1MaskMod5Mask. enabled_ctrls enabled_ctrls is an attribute of the EnabledControls control (see section 10.1.1). It contains one bit per boolean control. Each bit determines whether the corresponding control is enabled or disabled; a one bit means the control is enabled. The mask bits used to enable these controls are listed in Table 10.7, using only those masks with ok in the enabled_ctrls column. repeat_delay and repeat_interval repeat_delay and repeat_interval are attributes of the RepeatKeys control (see section 10.3.2). repeat_delay is the initial delay before a key begins repeating, in milliseconds; repeat_interval is the delay between subsequent key events, in milliseconds. slow_keys_delay slow_keys_delay is an attribute of the SlowKeys control (see section 10.6.6). Its value specifies the SlowKeys acceptance delay period in milliseconds before a key press is accepted by the server. debounce_delay debounce_delay is an attribute of the BounceKeys control (see section 10.6.7). Its value specifies the BounceKeys delay period in milliseconds for which the key is disabled after having been pressed before another press of the same key is accepted by the server. mk_delay, mk_interval, mk_time_to_max, mk_max_speed, and mk_curve mk_delay, mk_interval, mk_time_to_max, mk_max_speed, and mk_curve are attributes of the MouseKeysAccel control. Refer to section 10.5.2 for a description of these fields and the units involved. ax_options The ax_options field contains attributes used to configure two different controls, the StickyKeys control (see section 10.6.8) and the AccessXFeedback control (see section 10.6.3). The ax_options field is a bitmask and may include any combination of the bits defined in Table 10.9. Access X Enable/Disable Bits (ax_options field) Access X Control ax_options bit value AccessXFeedback XkbAX_SKPressFBMask (1L<<0) XkbAX_SKAcceptFBMask (1L << 1) XkbAX_FeatureFBMask (1L << 2) XkbAX_SlowWarnFBMask (1L << 3) XkbAX_IndicatorFBMask (1L << 4) XkbAX_StickyKeysFBMask (1L << 5) XkbAX_SKReleaseFBMask (1L << 8) XkbAX_SKRejectFBMask (1L << 9) XkbAX_BKRejectFBMask (1L << 10) XkbAX_DumbBellFBMask (1L << 11) StickyKeys XkbAX_TwoKeysMask (1L << 6) XkbAX_LatchToLockMask (1L << 7) XkbAX_AllOptionsMask (0xFFF)
The fields pertaining to each control are relevant only when the control is enabled (XkbAccessXFeedbackMask or XkbStickyKeysMask bit is turned on in the enabled_ctrls field). Xkb provides a set of convenience macros for working with the ax_options field of an XkbControlsRec structure: #define XkbAX_NeedOption(c,w) ((c)->ax_options & (w)) The XkbAX_NeedOption macro is useful for determining whether a particular AccessX option is enabled or not. It accepts a pointer to an XkbControlsRec structure and a valid mask bit from Table 10.9. If the specified mask bit in the ax_options field of the controls structure is set, the macro returns the mask bit. Otherwise, it returns zero. Thus, XkbAX_NeedOption(ctlrec, XkbAX_LatchToLockMask) is nonzero if the latch to lock transition for latching keys is enabled, and zero if it is disabled. Note that XkbAX_NeedOption only determines whether or not the particular capability is configured to operate; the XkbAccessXFeedbackMask bit must also be turned on in enabled_ctrls for the capability to actually be functioning. #define XkbAX_AnyFeedback(c) \ ((c)->enabled_ctrls & XkbAccessXFeedbackMask) The XkbAX_AnyFeedback macro accepts a pointer to an XkbControlsRec structure and tells whether the AccessXFeedback control is enabled or not. If the AccessXFeedback control is enabled, the macro returns XkbAccessXFeedbackMask. Otherwise, it returns zero. #define XkbAX_NeedFeedback(c,w) \ (XkbAX_AnyFeedback(c) && XkbAX_NeedOption(c,w)) The XkbAX_NeedFeedback macro is useful for determining if both the AccessXFeedback control and a particular AccessX feedback option are enabled. The macro accepts a pointer to an XkbControlsRec structure and a feedback option from the table above. If both the AccessXFeedback control and the specified feedback option are enabled, the macro returns True. Otherwise it returns False.
ax_timeout, axt_opts_mask, axt_opts_values, axt_ctrls_mask, and axt_ctrls_values ax_timeout, axt_opts_mask, axt_opts_values, axt_ctrls_mask, and axt_ctrls_values are attributes of the AccessXTimeout control. Refer to section 10.6.2 for a description of these fields and the units involved. per_key_repeat The per_key_repeat field mirrors the auto_repeats field of the core protocol XKeyboardState structure: changing the auto_repeats field automatically changes per_key_repeat and vice versa. It is provided for convenience and to reduce protocol traffic. For example, to obtain the individual repeat key behavior as well as the repeat delay and rate, use XkbGetControls. If the per_key_repeat were not in this structure, you would have to call both XGetKeyboardControl and XkbGetControls to get this information. The bits correspond to keycodes. The first seven keys (keycodes 1–7) are indicated in per_key_repeat[0], with bit position 0 (low order) corresponding to the fictitious keycode 0. Following array elements correspond to 8 keycodes per element. A 1 bit indicates that the key is a repeating key.
Querying Controls Use XkbGetControls to find the current state of Xkb server controls. XkbGetControls Status XkbGetControls Display *display unsigned long which XkbDescPtr xkb display connection to X server which mask of controls requested xkb keyboard description for controls information XkbGetControls queries the server for the requested control information, waits for a reply, and then copies the server’s values for the requested information into the ctrls structure of the xkb argument. Only those components specified by the which parameter are copied. Valid values for which are any combination of the masks listed in Table 10.7 that have ok in the which column. If xkb->ctrls is NULL, XkbGetControls allocates and initializes it before obtaining the values specified by which. If xkb->ctrls is not NULL, XkbGetControls modifies only those portions of xkb->ctrls corresponding to the values specified by which. XkbGetControls returns Success if successful; otherwise, it returns BadAlloc if it cannot obtain sufficient storage, BadMatch if xkb is NULL or which is empty, or BadImplementation. To free the ctrls member of a keyboard description, use XkbFreeControls (see section 10.12) The num_groups field in the ctrls structure is always filled in by XkbGetControls, regardless of which bits are selected by which. Changing Controls There are two ways to make changes to controls: either change a local copy keyboard description and call XkbSetControls, or, to reduce network traffic, use an XkbControlsChangesRec structure and call XkbChangeControls. To change the state of one or more controls, first modify the ctrls structure in a local copy of the keyboard description and then use XkbSetControls to copy those changes to the X server. XkbSetControls Bool XkbSetControls Display *display unsigned long which XkbDescPtr xkb display connection to X server which mask of controls to change xkb ctrls field contains new values to be set For each bit that is set in the which parameter, XkbSetControls sends the corresponding values from the xkb->ctrls field to the server. Valid values for which are any combination of the masks listed in Table 10.7 that have ok in the which column. If xkb->ctrls is NULL, the server does not support a compatible version of Xkb, or the Xkb extension has not been properly initialized, XkbSetControls returns False. Otherwise, it sends the request to the X server and returns True. Note that changes to attributes of controls in the XkbControlsRec structure are apparent only when the associated control is enabled, although the corresponding values are still updated in the X server. For example, the repeat_delay and repeat_interval fields are ignored unless the RepeatKeys control is enabled (that is, the X server’s equivalent of xkb->ctrls has XkbRepeatKeysMask set in enabled_ctrls). It is permissible to modify the attributes of a control in one call to XkbSetControls and enable the control in a subsequent call. See section 10.1.1 for more information on enabling and disabling controls. Note that the enabled_ctrls field is itself a control — the EnabledControls control. As such, to set a specific configuration of enabled and disabled boolean controls, you must set enabled_ctrls to the appropriate bits to enable only the controls you want and disable all others, then specify the XkbControlsEnabledMask in a call to XkbSetControls. Because this is somewhat awkward if all you want to do is enable and disable controls, and not modify any of their attributes, a convenience function is also provided for this purpose (XkbChangeEnabledControls, section 10.1.1). The XkbControlsChangesRec Structure XkbControlsChangesRec The XkbControlsChangesRec structure allows applications to track modifications to an XkbControlsRec structure and thereby reduce the amount of traffic sent to the server. The same XkbControlsChangesRec structure may be used in several successive modifications to the same XkbControlsRec structure, then subsequently used to cause all of the changes, and only the changes, to be propagated to the server. The XkbControlsChangesRec structure is defined as follows: typedef struct _XkbControlsChanges { unsigned int changed_ctrls; /* bits indicating changed control data */ unsigned int enabled_ctrls_changes; /* bits indicating enabled/disabled controls */ Bool num_groups_changed; /* True if number of keyboard groups changed */ } XkbControlsChangesRec, *XkbControlsChangesPtr; The changed_ctrls field is a mask specifying which logical sets of data in the controls structure have been modified. In this context, modified means set, that is, if a value is set to the same value it previously contained, it has still been modified, and is noted as changed. Valid values for changed_ctrls are any combination of the masks listed in Table 10.7 that have ok in the changed_ctrls column. Setting a bit implies the corresponding data fields from the Relevant XkbControlsRec Data Fields column in Table 10.6 have been modified. The enabled_ctrls_changes field specifies which bits in the enabled_ctrls field have changed. If the number of keyboard groups has changed, the num_groups_changed field is set to True. If you have an Xkb description with controls that have been modified and an XkbControlsChangesRec that describes the changes that have been made, the XkbChangeControls function provides a flexible method for updating the controls in a server to match those in the changed keyboard description. XkbChangeControls Bool XkbChangeControls Display *dpy XkbDescPtr xkb XkbControlsChangesPtr changes dpy connection to X server xkb keyboard description with changed xkb->ctrls changes which parts of xkb->ctrls have changed XkbChangeControls copies any controls fields specified by changes from the keyboard description controls structure, xkb->ctrls, to the server specified by dpy. Tracking Changes to Keyboard Controls eventsXkbControlsNotify XkbControlsNotifyEvent Whenever a field in the controls structure changes in the server’s keyboard description, the server sends an XkbControlsNotify event to all interested clients.To receive XkbControlsNotify events under all possible conditions, use XkbSelectEvents (see section 4.3) and pass XkbControlsNotifyMask in both bits_to_change and values_for_bits. To receive XkbControlsNotify events only under certain conditions, use XkbSelectEventDetails using XkbControlsNotify as the event_type and specifying the desired state changes in bits_to_change and values_for_bits using mask bits from Table 10.7. The structure for the XkbControlsNotify event is defined as follows: typedef struct { int type; /* Xkb extension base event code */ unsigned long serial; /* X server serial number for event */ Bool send_event; /* True ⇒ synthetically generated */ Display * display; /* server connection where event generated */ Time time; /* server time when event generated */ int xkb_type; /* XkbCompatMapNotify */ int device; /* Xkb device ID, will not be XkbUseCoreKbd */ unsigned int changed_ctrls; /* bits indicating which controls data have changed */ unsigned int enabled_ctrls; /* controls currently enabled in server */ unsigned int enabled_ctrl_changes; /* bits indicating enabled/disabled controls */ int num_groups; /* current number of keyboard groups */ KeyCode keycode; /* != 0 ⇒ keycode of key causing change */ char event_type; /* Type of event causing change */ char req_major; /* major event code of event causing change */ char req_minor; /* minor event code of event causing change */ } XkbControlsNotifyEvent; The changed_ctrls field specifies the controls components that have changed and consists of bits taken from the masks defined in Table 10.7 with ok in the changed_ctrls column. The controls currently enabled in the server are reported in the enabled_ctrls field. If any controls were just enabled or disabled (that is, the contents of the enabled_ctrls field changed), they are flagged in the enabled_ctrl_changes field. The valid bits for these fields are the masks listed in Table 10.7 with ok in the enabled_ctrls column. The num_groups field reports the number of groups bound to the key belonging to the most number of groups and is automatically updated when the keyboard mapping changes. If the change was caused by a request from a client, the keycode and event_type fields are set to zero and the req_major and req_minor fields identify the request. The req_major value is the same as the major extension opcode. Otherwise, event_type is set to the type of event that caused the change (one of KeyPress, KeyRelease, DeviceKeyPress, DeviceKeyRelease, ButtonPress or ButtonRelease), and req_major and req_minor are undefined. If event_type is KeyPress, KeyRelease, DeviceKeyPress, or DeviceKeyRelease, the keycode field is set to the key that caused the change. If event_type is ButtonPress or ButtonRelease, keycode contains the button number. When a client receives an XkbControlsNotify event, it can note the changes in a changes structure using XkbNoteControlsChanges. XkbNoteControlsChanges void XkbNoteControlsChanges XkbControlsChangesPtr changes XkbControlsNotifyEvent *new unsigned int wanted changes records changes indicated by new new tells which things have changed wanted tells which parts of new to record in changes The wanted parameter is a bitwise inclusive OR of bits taken from the set of masks specified in Table 10.7 with ok in the changed_ctrls column. XkbNoteControlsChanges copies any changes reported in new and specified in wanted into the changes record specified by changes. Use XkbGetControlsChanges to update a local copy of a keyboard description with the changes previously noted by one or more calls to XkbNoteControlsChanges. XkbGetControlsChanges Status XkbGetControlsChanges Display *dpy XkbDescPtr xkb XkbNameChangesPtr changes dpy connection to X server xkb xkb->ctrls will be updated changes indicates which parts of xkb->ctrls to update XkbGetControlsChanges examines the changes parameter, queries the server for the necessary information, and copies the results into the xkb->ctrls keyboard description. If the ctrls field of xkb is NULL, XkbGetControlsChanges allocates and initializes it. To free the ctrls field, use XkbFreeControls (see section 10.12). XkbGetControlsChanges returns Success if successful and can generate BadAlloc, BadImplementation, and BadMatch errors. Allocating and Freeing an XkbControlsRec The need to allocate an XkbControlsRec structure seldom arises; Xkb creates one when an application calls XkbGetControls or a related function. For those situations where there is not an XkbControlsRec structure allocated in the XkbDescRec, allocate one by calling XkbAllocControls. XkbAllocControls Status XkbAllocControls XkbDescPtr xkb unsigned int which xkb Xkb description in which to allocate ctrls rec which mask of components of ctrls to allocate XkbAllocControls allocates the ctrls field of the xkb parameter, initializes all fields to zero, and returns Success. If the ctrls field is not NULL, XkbAllocControls simply returns Success. If xkb is NULL, XkbAllocControls reports a BadMatch error. If the ctrls field could not be allocated, it reports a BadAlloc error. The which mask specifies the individual fields of the ctrls structure to be allocated and can contain any of the valid masks defined in Table 10.7. Because none of the currently existing controls have any structures associated with them, which is currently of little practical value in this call. To free memory used by the ctrls member of an XkbDescRec structure, use XkbFreeControls: XkbFreeControls void XkbFreeControls XkbDescPtr xkb unsigned int which Bool free_all xkb Xkb description in which to free controls components which mask of components of ctrls to free free_all True ⇒ free everything + ctrls itself XkbFreeControls frees the specified components of the ctrls field in the xkb keyboard description and sets the corresponding structure component values to NULL or zero. The which mask specifies the fields of ctrls to be freed and can contain any of the controls components specified in Table 10.7. If free_all is True, XkbFreeControls frees every non- NULL structure component in the controls, frees the XkbControlsRec structure referenced by the ctrls member of xkb, and sets ctrls to NULL. The Miscellaneous Per-client Controls You can configure the boolean per-client controls which affect the state reported in button and key events. See section 12.1.1, 12.3, 12.5, and 16.3.11 of the XKB Protocol specification for more details. To get the current values of the per-client controls, use XkbGetPerClientControls. XkbGetPerClientControls Bool XkbGetPerClientControls Display *dpy unsigned int *ctrls dpy connection to X server ctrls 1 bit ⇒ corresponding control is on XkbGetPerClientControls backfills ctrls with the per-client control attributes for this particular client. It returns True if successful, and False otherwise. To change the current values of the per-client control attributes, use XkbSetPerClientControls. XkbSetPerClientControls Bool XkbSetPerClientControls Display *dpy unsigned int change unsigned int *value dpy connection to X server change 1 bit ⇒ change control value 1 bit ⇒ control on XkbSetPerClientControls changes the per-client values for the controls selected by change to the corresponding value in value. Legal values for change and value are: XkbPCF_GrabsUseXKBStateMask, XkbPCF_LookupStateWhenGrabbed, and XkbPCF_SendEventUsesXKBState. More than one control may be changed at one time by OR-ing the values together. XkbSetPerClientControls backfills value with the per-client control attributes for this particular client. It returns True if successful, and False otherwise.
xkb Replacing a Keyboard <quote>On the Fly</quote> Some operating system and X server implementations allow hot plugging of input devices. When using these implementations, input devices can be unplugged and new ones plugged in without restarting the software that is using those devices. There is no provision in the standard X server for notification of client programs if input devices are unplugged and/or new ones plugged in. In the case of the X keyboard, this could result in the X server having a keymap that does not match the new keyboard. If the X server implementation supports the X input device extension, a client program may also change the X keyboard programmatically. The XChangeKeyboardDevice input extension request allows a client to designate an input extension keyboard device as the X keyboard, in which case the old X keyboard device becomes inaccessible except via the input device extension. In this case, core protocol MappingNotify and input extension XChangeDeviceNotify events are generated to notify all clients that a new keyboard with a new keymap has been designated. When a client opens a connection to the X server, the server reports the minimum and maximum keycodes. The server keeps track of the minimum and maximum keycodes last reported to each client. When delivering events to a particular client, the server filters out any events that fall outside of the valid range for the client. Xkb provides an XkbNewKeyboardNotify event that reports a change in keyboard geometry and/or the range of supported keycodes. The server can generate an XkbNewKeyboardNotify event when it detects a new keyboard or in response to an XkbGetKeyboardByName request that loads a new keyboard description. Selecting for XkbNewKeyboardNotify events allows Xkb-aware clients to be notified whenever a keyboard change occurs that may affect the keymap. When a client requests XkbNewKeyboardNotify events, the server compares the range of keycodes for the current keyboard to the range of keycodes that are valid for the client. If they are not the same, the server immediately sends the client an XkbNewKeyboardNotify event. Even if the new keyboard is not new to the server, it is new to this particular client. When the server sends an XkbNewKeyboardNotify event to a client to inform it of a new keycode range, it resets the stored range of legal keycodes for the client to the keycode range reported in the event; it does not reset this range for the client if it does not sent an XkbNewKeyboardNotify event to a client. Because Xkb-unaware clients and Xkb-aware clients that do not request XkbNewKeyboardNotify events are never sent these events, the server’s notion of the legal keycode range never changes, and these clients never receive events from keys that fall outside of their notion of the legal keycode range. Clients that have not selected to receive XkbNewKeyboardNotify events do, however, receive the XkbNewKeyboardNotify event when a keyboard change occurs. Clients that have not selected to receive this event also receive numerous other events detailing the individual changes that occur when a keyboard change occurs. Clients wishing to track changes in min_key_code and max_key_code must watch for both XkbNewKeyboardNotify and XkbMapNotify events, because a simple mapping change causes an XkbMapNotify event and may change the range of valid keycodes, but does not cause an XkbNewKeyboardNotify event. If a client does not select for XkbNewKeyboardNotify events, the server restricts the range of keycodes reported to the client. In addition to filtering out-of-range key events, Xkb: Adjusts core protocol MappingNotify events to refer only to keys that match the stored legal range. Reports keyboard mappings for keys that match the stored legal range to clients that issue a core protocol GetKeyboardMapping request. Reports modifier mappings only for keys that match the stored legal range to clients that issue a core protocol GetModifierMapping request. Restricts the core protocol ChangeKeyboardMapping and SetModifierMapping requests to keys that fall inside the stored legal range. In short, Xkb does everything possible to hide from Xkb-unaware clients the fact that the range of legal keycodes has changed, because such clients cannot be expected to deal with them. Xkb events and requests are not modified in this manner; all Xkb events report the full range of legal keycodes. No requested Xkb events are discarded, and no Xkb requests have their keycode range clamped. eventsXkbNewKeyboardNotify XkbNewKeyboardNotifyEvent The structure for the XkbNewKeyboardNotify event is defined as follows: typedef struct _XkbNewKeyboardNotify { int type; /* Xkb extension base event code */ unsigned long serial; /* X server serial number for event */ Bool send_event; /* True ⇒ synthetically generated */ Display * display; /* server connection where event generated */ Time time; /* server time when event generated */ int xkb_type; /* XkbNewKeyboardNotify */ int device; /* device ID of new keyboard */ int old_device; /* device ID of old keyboard */ int min_key_code; /* min keycode of new keyboard */ int max_key_code; /* max keycode of new keyboard */ int old_min_key_code; /* min keycode of old keyboard */ int old_max_key_code; /* max keycode of old keyboard */ unsigned int changed; /* changed aspects - see masks below */ char req_major; /* major request that caused change */ char req_minor; /* minor request that caused change */ } XkbNewKeyboardNotifyEvent; To receive name notify events, use XkbSelectEvents (see section 4.3) with XkbNewKeyboardNotifyMask in both the bits_to_change and values_for_bits parameters. To receive events for only specific names, use XkbSelectEventDetails. Set the event_type parameter to XkbNewKeyboardNotify, and set both the bits_to_change and values_for_bits detail parameter to a mask composed of a bitwise OR of masks in Table 19.1. XkbNewKeyboardNotifyEvent Details XkbNewKeyboardNotify Event Details Value Circumstances XkbNKN_KeycodesMask (1L<<0) Notification of keycode range changes wanted XkbNKN_GeometryMask (1L<<1) Notification of geometry changes wanted XkbNKN_DeviceIDMask (1L<<2) Notification of device ID changes wanted XkbAllNewKeyboardEventsMask (0x7) Includes all of the above masks
The req_major and req_minor fields indicate what type of keyboard change has occurred. If req_major and req_minor are zero, the device change was not caused by a software request to the server — a spontaneous change has occurred, such as hot-plugging a new device. In this case, device is the device identifier for the new, current X keyboard device, but no implementation-independent guarantee can be made about old_device. old_device may be identical to device (an implementor is permitted to reuse the device specifier when the device changes); or it may be different. Note that req_major and req_minor being zero do not necessarily mean that the physical keyboard device has changed; rather, they only imply a spontaneous change outside of software control (some systems have keyboards that can change personality at the press of a key). If the keyboard change is the result of an X Input Extension ChangeKeyboardDevice request, req_major contains the input extension major opcode, and req_minor contains the input extension request number for X_ChangeKeyboardDevice. In this case, device and old_device are different, with device being the identifier for the new, current X keyboard device, and old_device being the identifier for the former device. If the keyboard change is the result of an XkbGetKeyboardByName function call, which generates an X_kbGetKbdByName request, req_major contains the Xkb extension base event code (see section 2.4), and req_minor contains the event code for the Xkb extension request X_kbGetKbdByName. device contains the device identifier for the new device, but nothing definitive can be said for old_device; it may be identical to device, or it may be different, depending on the implementation.
libX11-1.6.3/specs/XKB/XKBlib-20.svg000064401431060000012000000422461247741723500167020ustar00alancstaff00002660200006 image/svg+xml XkbDescRec compat XkbCompMapRec sym_interpret groups[0] groups[1] groups[2] groups[3] num_si size_si XkbSymInterpretRec(s) num_si - 1 size_si - 1 0 Groupcompatibilitymaps letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans" xml:space="preserve">groups[1]libX11-1.6.3/specs/XKB/XKBlib-9.svg000064401431060000012000002251351247741723500166310ustar00alancstaff00002660200006 image/svg+xml Row 5 Row 4 Row 2 Row 1 Row 3 erlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" /> image/svg+xml Rotated Sections e;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoflibX11-1.6.3/specs/XKB/ch07.xml000064401431060000012000000361041247741723500161060ustar00alancstaff00002660200006 Virtual Modifiers The core protocol specifies that certain keysyms, when bound to modifiers, affect the rules of keycode to keysym interpretation for all keys; for example, when the Num_Lock keysym is bound to some modifier, that modifier is used to select between shifted and unshifted state for the numeric keypad keys. The core protocol does not provide a convenient way to determine the mapping of modifier bits (in particular Mod1 through Mod5) to keysyms such as Num_Lock and Mode_switch. Using the core protocol only, a client application must retrieve and search the modifier map to determine the keycodes bound to each modifier, and then retrieve and search the keyboard mapping to determine the keysyms bound to the keycodes. It must repeat this process for all modifiers whenever any part of the modifier mapping is changed. Xkb alleviates these problems by defining virtual modifiers. In addition to the eight core modifiers, referred to as the real modifiers, real modifiers modifiersreal Xkb provides a set of sixteen named virtual modifiers. virtual modifiers modifiersvirtual Each virtual modifier can be bound to any set of the real modifiers ( Shift, Lock, Control, and Mod1Mod5). The separation of function from physical modifier bindings makes it easier to specify more clearly the intent of a binding. X servers do not all assign modifiers the same way — for example, Num_Lock might be bound to Mod2 for one vendor and to Mod4 for another. This makes it cumbersome to automatically remap the keyboard to a desired configuration without some kind of prior knowledge about the keyboard layout and bindings. With XKB, applications can use virtual modifiers to specify the desired behavior, without regard for the actual physical bindings in effect. Virtual Modifier Names and Masks Virtual modifiers are named by converting their string name to an X Atom and storing the Atom in the names.vmods array in an XkbDescRec structure (see section 6.1). The position of a name Atom in the names.vmods array defines the bit position used to represent the virtual modifier and also the index used when accessing virtual modifier information in arrays: the name in the i-th (0 relative) entry of names.vmods is the i-th virtual modifier, represented by the mask (1<<i). Throughout Xkb, various functions have a parameter that is a mask representing virtual modifier choices. In each case, the i-th bit (0 relative) of the mask represents the i-th virtual modifier. To set the name of a virtual modifier, use XkbSetNames, using XkbVirtualModNamesMask in which and the name in the xkb argument; to retrieve indicator names, use XkbGetNames. These functions are discussed in . Modifier Definitions XkbModsRec An Xkb modifier definition modifier definition enumerates a collection of real and virtual modifiers but does not in itself bind those modifiers to any particular key or to each other. Modifier definitions are included in a number of structures in the keyboard description to define the collection of modifiers that affect or are affected by some other entity. A modifier definition is relevant only in the context of some other entity such as an indicator map, a control, or a key type. (See section 8.2.2, section 10.8, and section 15.2.) typedef struct _XkbMods { unsigned char mask; /* real_mods | vmods mapped to real modifiers */ unsigned char real_mods; /* real modifier bits */ unsigned short vmods; /* virtual modifier bits */ } XkbModsRec, *XkbModsPtr; An Xkb modifier definition consists of a set of bit masks corresponding to the eight real modifiers (real_mods); a similar set of bitmasks corresponding to the 16 named virtual modifiers (vmods); and an effective mask (mask). The effective mask represents the set of all real modifiers that can logically be set either by setting any of the real modifiers or by setting any of the virtual modifiers in the definition. mask is derived from the real and virtual modifiers and should never be explicitly changed — it contains all of the real modifiers specified in the definition (real_mods) plus any real modifiers that are bound to the virtual modifiers specified in the definition (vmods). The binding of the virtual modifiers to real modifiers is exterior to the modifier definition. Xkb automatically recomputes the mask field of modifier definitions as necessary. Whenever you access a modifier definition that has been retrieved using an Xkb library function, the mask field will be correct for the keyboard mapping of interest. Binding Virtual Modifiers to Real Modifiers The binding of virtual modifiers to real modifiers is defined by the server.vmods array in an XkbDescRec structure. Each entry contains the real modifier bits that are bound to the virtual modifier corresponding to the entry. The overall relationship of fields dealing with virtual modifiers in the server keyboard description are shown in Figure 16.2. Virtual Modifier Key Mapping Xkb maintains a virtual modifier mapping, virtual modifier mapping modifiersvirtual mapping which lists the virtual modifiers associated with, or bound to, each key. The real modifiers bound to a virtual modifier always include all of the modifiers bound to any of the keys that specify that virtual modifier in their virtual modifier mapping. The server.vmodmap array indicates which virtual modifiers are bound to each key; each entry is a bitmask for the virtual modifier bits. The server.vmodmap array is indexed by keycode. The vmodmap and vmods members of the server map are the master virtual modifier definitions. Xkb automatically propagates any changes to these fields to all other fields that use virtual modifier mappings (see section 16.4). For example, if Mod3 is bound to the Num_Lock key by the core protocol modifier mapping, and the NumLock virtual modifier is bound to they Num_Lock key by the virtual modifier mapping, Mod3 is added to the set of modifiers associated with NumLock. The virtual modifier mapping is normally updated whenever actions are automatically applied to symbols (see section 16.4 for details), and few applications should need to change the virtual modifier mapping explicitly. Use XkbGetMap (see section 14.2) to get the virtual modifiers from the server or use XkbGetVirtualMods (see section 16.4.1) to update a local copy of the virtual modifiers bindings from the server. To set the binding of a virtual modifier to a real modifier, use XkbSetMap (see section 14.3). To determine the mapping of virtual modifiers to core X protocol modifiers, use XkbVirtualModsToReal. XkbVirtualModsToReal Bool XkbVirtualModsToReal XkbDescPtr xkb unsigned int virtual_mask unsigned int *mask_rtrn xkb keyboard description for input device virtual_mask virtual modifier mask to translate mask_rtrn backfilled with real modifiers If the keyboard description defined by xkb includes bindings for virtual modifiers, XkbVirtualModsToReal uses those bindings to determine the set of real modifiers that correspond to the set of virtual modifiers specified in virtual_mask. The virtual_mask parameter is a mask specifying the virtual modifiers to translate; the i-th bit (0 relative) of the mask represents the i-th virtual modifier. If mask_rtrn is non- NULL, XkbVirtualModsToReal backfills it with the resulting real modifier mask. If the keyboard description in xkb does not include virtual modifier bindings, XkbVirtualModsToReal returns False; otherwise, it returns True. It is possible for a local (client-side) keyboard description (the xkb parameter) to not contain any virtual modifier information (simply because the client has not requested it) while the server’s corresponding definition may contain virtual modifier information. Inactive Modifier Sets An unbound virtual modifier is one that is not bound to any real modifier ( server->vmods [virtual_modifier_index] is zero). Some Xkb operations ignore modifier definitions in which the virtual modifiers are unbound. Consider this example: if (state matches {Shift}) Do OneThing; if (state matches {Shift+NumLock}) Do Another; If the NumLock virtual modifier is not bound to any real modifiers, the effective masks for these two cases are identical (that is, contain only Shift). When it is essential to distinguish between OneThing and Another, Xkb considers only those modifier definitions for which all virtual modifiers are bound. Conventions modifiersnames The Xkb extension does not require any specific virtual modifier names. However, everyone benefits if the same names are used for common modifiers. The following names are suggested: NumLock ScrollLock Alt Meta AltGr LevelThree Example If the second (0-relative) entry in names.vmods contains the Atom for "NumLock", then 0x4 (1<<2) is the virtual modifier bit for the NumLock virtual modifier. If server.vmods [2] contains Mod3Mask, then the NumLock virtual modifier is bound to the Mod3 real modifier. A virtual modifier definition for this example would have: real_mods = 0 vmods = 0x4 (NumLock named virtual modifier) mask = 0x20 (Mod3Mask) Continuing the example, if the keyboard has a Num_Lock keysym bound to the key with keycode 14, and the NumLock virtual modifier is bound to this key, server.vmodmap[14] contains 0x4. Finally, if the keyboard also used the real Mod1 modifier for numeric lock operations, the modifier definition below would represent the situation where either the key bound to Mod1 or the NumLock virtual modifier could be used for this purpose: real_mods = 0x8 (Mod1Mask) vmods = 0x4 (NumLock named virtual modifier) mask = 0x28 (Mod1Mask | Mod3Mask) unsigned char real_mods; /* real modifier bits */ unsigned short vmods; /* virtual modifier bits */ } XkbModsRec, *XkbModsPtr; An Xkb modifier definition consists of a set of bit masks corresponding to the eight real modifiers (real_mods); a similar set of bitmasks corresponding to the 16 named virtual modifiers (vmods Bells bell The core X protocol allows only applications to explicitly sound the system bell with a given duration, pitch, and volume. Xkb extends this capability by allowing clients to attach symbolic names to bells, disable audible bells, and receive an event whenever the keyboard bell is rung. For the purposes of this document, the audible audible bell bellaudible bell is defined to be the system bell, or the default keyboard bell, as opposed to any other audible sound generated elsewhere in the system. You can ask to receive XkbBellNotify events (see section 9.4) when any client rings any one of the following: The default bell Any bell on an input device that can be specified by a bell_class and bell_id pair Any bell specified only by an arbitrary name. (This is, from the server’s point of view, merely a name, and not connected with any physical sound-generating device. Some client application must generate the sound, or visual feedback, if any, that is associated with the name.) You can also ask to receive XkbBellNotify events when the server rings the default bell or if any client has requested events only (without the bell sounding) for any of the bell types previously listed. You can disable audible bells on a global basis (to set the AudibleBell control, see ). For example, a client that replaces the keyboard bell with some other audible cue might want to turn off the AudibleBell control to prevent the server from also generating a sound and avoid cacophony. If you disable audible bells and request to receive XkbBellNotify events, you can generate feedback different from the default bell. You can, however, override the AudibleBell control by calling one of the functions that force the ringing of a bell in spite of the setting of the AudibleBell control — XkbForceDeviceBell or XkbForceBell (see section 9.3.3). In this case the server does not generate a bell event. Just as some keyboards can produce keyclicks to indicate when a key is pressed or repeating, Xkb can provide feedback for the controls by using special beep codes. The AccessXFeedback control is used to configure the specific types of operations that generate feedback. See section 10.6.3 for a discussion on AccessXFeedback control. This chapter describes bell names, the functions used to generate named bells, and the events the server generates for bells. Bell Names You can associate a name to an act of ringing a bell by converting the name to an Atom and then using this name when you call the functions listed in this chapter. If an event is generated as a result, the name is then passed to all other clients interested in receiving XkbBellNotify events. Note that these are arbitrary names and that there is no binding to any sounds. Any sounds or other effects (such as visual bells on the screen) must be generated by a client application upon receipt of the bell event containing the name. There is no default name for the default keyboard bell. The server does generate some predefined bells for the AccessX controls (see section 10.6.3). These named bells are shown in Table 9.1; the name is included in any bell event sent to clients that have requested to receive XkbBellNotify events. Predefined Bells Action Named Bell Indicator turned on AX_IndicatorOn Indicator turned off AX_IndicatorOff More than one indicator changed state AX_IndicatorChange Control turned on AX_FeatureOn Control turned off AX_FeatureOff More than one control changed state AX_FeatureChange SlowKeys and BounceKeys about to be turned on or off AX_SlowKeysWarning SlowKeys key pressed AX_SlowKeyPress SlowKeys key accepted AX_SlowKeyAccept SlowKeys key rejected AX_SlowKeyReject Accepted SlowKeys key released AX_SlowKeyRelease BounceKeys key rejected AX_BounceKeyReject StickyKeys key latched AX_StickyLatch StickyKeys key locked AX_StickyLock StickyKeys key unlocked AX_StickyUnlock
Audible Bells Using Xkb you can generate bell events that do not necessarily ring the system bell. This is useful if you need to use an audio server instead of the system beep. For example, when an audio client starts, it could disable the audible bell (the system bell) and then listen for XkbBellNotify events (see section 9.4). When it receives a XkbBellNotify event, the audio client could then send a request to an audio server to play a sound. You can control the audible bells feature by passing the XkbAudibleBellMask to XkbChangeEnabledControls (see section 10.1.1). If you set XkbAudibleBellMask on, the server rings the system bell when a bell event occurs. This is the default. If you set XkbAudibleBellMask off and a bell event occurs, the server does not ring the system bell unless you call XkbForceDeviceBell or XkbForceBell (see section 9.3.3). Audible bells are also part of the per-client auto-reset controls. For more information on auto-reset controls, see section 10.1.2. Bell Functions Use the functions described in this section to ring bells and to generate bell events. The input extension has two types of feedbacks that can generate bells — bell feedback and keyboard feedback. Some of the functions in this section have bell_class and bell_id parameters; set them as follows: Set bell_class to BellFeedbackClass or KbdFeedbackClass. A device can have more than one feedback of each type; set bell_id to the particular bell feedback of bell_class type. Table 9.2 shows the conditions that cause a bell to sound or an XkbBellNotifyEvent to be generated when a bell function is called. Bell Sounding and Bell Event Generating Function called AudibleBell Server sounds a bell Server sends an XkbBellNotifyEvent XkbDeviceBell On Yes Yes XkbDeviceBell Off No Yes XkbBell On Yes Yes XkbBell Off No Yes XkbDeviceBellEvent On or Off No Yes XkbBellEvent On or Off No Yes XkbDeviceForceBell On or Off Yes No XkbForceBell On or Off Yes No
Generating Named Bells To ring the bell on an X input extension device or the default keyboard, use XkbDeviceBell. XkbDeviceBell Bool XkbDeviceBell Display *display Window window unsigned int device_spec unsigned int bell_class unsigned int bell_id int percent Atom name display connection to the X server window window for which the bell is generated, or None device_spec device ID, or XkbUseCoreKbd bell_class X input extension bell class of the bell to be rung bell_id X input extension bell ID of the bell to be rung percent bell volume, from −100 to 100 inclusive name a name for the bell, or NULL Set percent to be the volume relative to the base volume for the keyboard as described for XBell. Note that bell_class and bell_id indicate the bell to physically ring. name is simply an arbitrary moniker for the client application’s use. To determine the current feedback settings of an extension input device, use XGetFeedbackControl. See the X input extension documentation for more information on XGetFeedbackControl and related data structures. If a compatible keyboard extension is not present in the X server, XkbDeviceBell immediately returns False. Otherwise, XkbDeviceBell rings the bell as specified for the display and keyboard device and returns True. If you have disabled the audible bell, the server does not ring the system bell, although it does generate a XkbBellNotify event. You can call XkbDeviceBell without first initializing the keyboard extension. As a convenience function, Xkb provides a function to ring the bell on the default keyboard: XkbBell. XkbBell Bool XkbBell Display *display Window window int percent Atom name display connection to the X server window event window, or None percent relative volume, which can range from −100 to 100 inclusive name a bell name, or NULL If a compatible keyboard extension isn’t present in the X server, XkbBell calls XBell with the specified display and percent, and returns False. Otherwise, XkbBell calls XkbDeviceBell with the specified display, window, percent, and name, a device_spec of XkbUseCoreKbd, a bell_class of XkbDfltXIClass, and a bell_id of XkbDfltXIId, and returns True. If you have disabled the audible bell, the server does not ring the system bell, although it does generate a XkbBellNotify event. You can call XkbBell without first initializing the keyboard extension. Generating Named Bell Events Using Xkb, you can also generate a named bell event that does not ring any bell. This allows you to do things such as generate events when your application starts. For example, if an audio client listens for these types of bells, it can produce a whoosh sound when it receives a named bell event to indicate a client just started. In this manner, applications can generate start-up feedback and not worry about producing annoying beeps if an audio server is not running. To cause a bell event for an X input extension device or for the keyboard, without ringing the corresponding bell, use XkbDeviceBellEvent. XkbDeviceBellEvent Bool XkbDeviceBellEvent Display *display Window window unsigned int device_spec unsigned int bell_class unsigned int bell_id int percent Atom name display connection to the X server window event window, or None device_spec device ID, or XkbUseCoreKbd bell_class input extension bell class for the event bell_id input extension bell ID for the event percent volume for the bell, which can range from −100 to 100 inclusive name a bell name, or NULL If a compatible keyboard extension isn’t present in the X server, XkbDeviceBellEvent immediately returns False. Otherwise, XkbDeviceBellEvent causes an XkbBellNotify event to be sent to all interested clients and returns True. Set percent to be the volume relative to the base volume for the keyboard as described for XBell. In addition, XkbDeviceBellEvent may generate Atom protocol errors as well as XkbBellNotify events. You can call XkbBell without first initializing the keyboard extension. As a convenience function, Xkb provides a function to cause a bell event for the keyboard without ringing the bell: XkbBellEvent. XkbBellEvent Bool XkbBellEvent Display *display Window window int percent Atom name display connection to the X server window the event window, or None percent relative volume, which can range from −100 to 100 inclusive name a bell name, or NULL If a compatible keyboard extension isn’t present in the X server, XkbBellEvent immediately returns False. Otherwise, XkbBellEvent calls XkbDeviceBellEvent with the specified display, window, percent, and name, a device_spec of XkbUseCoreKbd, a bell_class of XkbDfltXIClass, and a bell_id of XkbDfltXIId, and returns what XkbDeviceBellEvent returns. XkbBellEvent generates a XkbBellNotify event. You can call XkbBellEvent without first initializing the keyboard extension. Forcing a Server-Generated Bell To ring the bell on any keyboard, overriding user preference settings for audible bells, use XkbForceDeviceBell. XkbForceDeviceBell Bool XkbForceDeviceBell Display *display Window window unsigned int device_spec unsigned int bell_class unsigned int bell_id int percent display connection to the X server window event window, or None device_spec device ID, or XkbUseCoreKbd bell_class input extension class of the bell to be rung bell_id input extension ID of the bell to be rung percent relative volume, which can range from −100 to 100 inclusive If a compatible keyboard extension isn’t present in the X server, XkbForceDeviceBell immediately returns False. Otherwise, XkbForceDeviceBell rings the bell as specified for the display and keyboard device and returns True. Set percent to be the volume relative to the base volume for the keyboard as described for XBell. There is no name parameter because XkbForceDeviceBell does not cause an XkbBellNotify event. You can call XkbBell without first initializing the keyboard extension. To ring the bell on the default keyboard, overriding user preference settings for audible bells, use XkbForceBell. XkbForceBell Bool XkbForceBell Display *display int percent display connection to the X server percent volume for the bell, which can range from −100 to 100 inclusive If a compatible keyboard extension isn’t present in the X server, XkbForceBell calls XBell with the specified display and percent and returns False. Otherwise, XkbForceBell calls XkbForceDeviceBell with the specified display and percent, device_spec = XkbUseCoreKbd, bell_class = XkbDfltXIClass, bell_id = XkbDfltXIId, window = None, and name = NULL, and returns what XkbForceDeviceBell returns. XkbForceBell does not cause an XkbBellNotify event. You can call XkbBell without first initializing the keyboard extension.
Detecting Bells Xkb generates XkbBellNotify events for all bells except for those resulting from calls to XkbForceDeviceBell and XkbForceBell. To receive XkbBellNotify events under all possible conditions, pass XkbBellNotifyMask in both the bits_to_change and values_for_bits parameters to XkbSelectEvents (see section 4.3). The XkbBellNotify event has no event details. It is either selected or it is not. However, you can call XkbSelectEventDetails using XkbBellNotify as the event_type and specifying XkbAllBellEventsMask in bits_to_change and values_for_bits. This has the same effect as a call to XkbSelectEvents. The structure for the XkbBellNotify event type contains: typedef struct _XkbBellNotify { int type; /* Xkb extension base event code */ unsigned long serial; /* X server serial number for event */ Bool send_event; /* True ⇒ synthetically generated */ Display * display; /* server connection where event generated */ Time time; /* server time when event generated */ int xkb_type; /* XkbBellNotify */ unsigned int device; /* Xkb device ID, will not be XkbUseCoreKbd */ int percent; /* requested volume as % of max */ int pitch; /* requested pitch in Hz */ int duration; /* requested duration in microseconds */ unsigned int bell_class; /* X input extension feedback class */ unsigned int bell_id; /* X input extension feedback ID */ Atom name; /* "name" of requested bell */ Window window; /* window associated with event */ Bool event_only; /* False → the server did not produce a beep */ } XkbBellNotifyEvent; If your application needs to generate visual bell feedback on the screen when it receives a bell event, use the window ID in the XkbBellNotifyEvent, if present.
ara> As a convenience function, Xkb providelibX11-1.6.3/specs/XKB/ch18.xml000064401431060000012000001113121247741723500161030ustar00alancstaff00002660200006 Symbolic Names The core protocol does not provide any information to clients other than that actually used to interpret events. This makes it difficult to write an application that presents the keyboard to a user in an easy-to-understand way. Such applications have to examine the vendor string and keycodes to determine the type of keyboard connected to the server and then examine keysyms and modifier mappings to determine the effects of most modifiers (the Shift, Lock and Control modifiers are defined by the core protocol but no semantics are implied for any other modifiers). To make it easier for applications to present a keyboard to the user, Xkb supports symbolic names for most components of the keyboard extension. Most of these symbolic names are grouped into the names component of the keyboard description. The XkbNamesRec Structure XkbKeyNameRec XkbKeyAliasRec XkbNamesRec The names component of the keyboard description is defined as follows: #define XkbKeyNameLength 4 #define XkbKeyNumVirtualMods 16 #define XkbKeyNumIndicators 32 #define XkbKeyNumKbdGroups 4 #define XkbMaxRadioGroups 32 typedef struct { char name[XkbKeyNameLength]; /* symbolic key names */ } XkbKeyNameRec, *XkbKeyNamePtr; typedef struct { char real[XkbKeyNameLength]; /* this key name must be in the keys array */ char alias[XkbKeyNameLength]; /* symbolic key name as alias for the key */ } XkbKeyAliasRec, *XkbKeyAliasPtr; typedef struct _XkbNamesRec { Atom keycodes; /* identifies range and meaning of keycodes */ Atom geometry; /* identifies physical location, size, and shape of keys */ Atom symbols; /* identifies the symbols logically bound to the keys */ Atom types; /* identifies the set of key types */ Atom compat; /* identifies actions for keys using core protocol */ Atom vmods[XkbNumVirtualMods]; /* symbolic names for virtual modifiers */ Atom indicators[XkbNumIndicators]; /* symbolic names for indicators */ Atom groups[XkbNumKbdGroups]; /* symbolic names for keyboard groups */ XkbKeyNamePtr keys; /* symbolic key name array */ XkbKeyAliasPtr key_aliases; /* real/alias symbolic name pairs array */ Atom * radio_groups; /* radio group name array */ Atom phys_symbols; /* identifies the symbols engraved on the keyboard */ unsigned char num_keys; /* number of keys in the keys array */ unsigned char num_key_aliases; /* number of keys in the key_aliases array */ unsigned short num_rg; /* number of radio groups */ } XkbNamesRec, *XkbNamesPtr; The keycodes name identifies the range and meaning of the keycodes returned by the keyboard in question. The geometry name, on the other hand, identifies the physical location, size and shape of the various keys on the keyboard. As an example to distinguish between these two names, consider function keys on PC-compatible keyboards. Function keys are sometimes above the main keyboard and sometimes to the left of the main keyboard, but the same keycode is used for the key that is logically F1 regardless of physical position. Thus, all PC-compatible keyboards share a similar keycodes name but may have different geometry names. The keycodes name is intended to be a very general description of the keycodes returned by a keyboard; a single keycodes name might cover keyboards with differing numbers of keys provided all keys have the same semantics when present. For example, 101 and 102 key PC keyboards might use the same name. In these cases, applications can use the keyboard geometry name to determine which subset of the named keycodes is in use. The symbols name identifies the symbols logically bound to the keys. The symbols name is a human or application-readable description of the intended locale or usage of the keyboard with these symbols. The phys_symbols name, on the other hand, identifies the symbols actually engraved on the keyboard. Given this, the symbols name and phys_symbols names might be different. For example, the description for a keyboard that has English US engravings, but that is using Swiss German symbols might have a phys_symbols name of "en_US" and a symbols name of "de_CH." The types name provides some information about the set of key types (see section 15.2) that can be associated with the keyboard. In addition, each key type can have a name, and each shift level of a type can have a name. Although these names are stored in the map description with each of the types, they are accessed using the same methods as the other symbolic names. The compat name provides some information about the rules used to bind actions to keys that are changed using core protocol requests. Xkb provides symbolic names for each of the 4 keyboard groups, 16 virtual modifiers, 32 keyboard indicators, and 4 keyboard groups. These names are held in the vmods, indicators, and groups fixed-length arrays. Each key has a four-byte symbolic name. All of the symbolic key names are held in the keys array, and num_keys reports the number of entries that are in the keys array. For each key, the key name links keys with similar functions or in similar positions on keyboards that report different keycodes. For example, the F1 key may emit keycode 23 on one keyboard and keycode 86 on another. By naming this key "FK01" on both keyboards, the keyboard layout designer can reuse parts of keyboard descriptions for different keyboards. Key aliases allow the keyboard layout designer to assign multiple key names to a single key. This allows the keyboard layout designer to refer to keys using either their position or their function. For example, a keyboard layout designer may wish to refer to the left arrow key on a PC keyboard using the ISO9995-5 positional specification of A31 or using the functional specification of LEFT. The key_aliases field holds a variable-length array of real and alias key name pairs, and the total number of entries in the key_aliases array is held in num_key_aliases. For each real and alias key name pair, the real field refers to the a name in the keys array, and the alias field refers to the alias for that key. Using the previous example, the keyboard designer may use the name A31 in the keys array, but also define the name LEFT as an alias for A31 in the key_aliases array. Key aliases defined in the geometry component of a keyboard mapping (see ) override those defined in the keycodes component of the server database, which are stored in the XkbNamesRec (xkb->names). Therefore, consider the key aliases defined by the geometry before considering key aliases supplied by the XkbNamesRec. A radio group is a set of keys whose behavior simulates a set of radio buttons. Once a key in a radio group is pressed, it stays logically depressed until another key in the group is pressed, at which point the previously depressed key is logically released. Consequently, at most one key in a radio group can be logically depressed at one time. Each radio group in the keyboard description can have a name. These names are held in the variable-length array radio_groups, and num_rg tells how many elements are in the radio_groups array. Symbolic Names Masks Xkb provides several functions that work with symbolic names. Each of these functions uses a mask to specify individual fields of the structures described above. These masks and their relationships to the fields in a keyboard description are shown in Table 18.1. Symbolic Names Masks Mask Bit Value Keyboard Component Field XkbKeycodesNameMask (1<<0) Xkb->names keycodes XkbGeometryNameMask (1<<1) Xkb->names geometry XkbSymbolsNameMask (1<<2) Xkb->names symbols XkbPhysSymbolsNameMask (1<<3) Xkb->names phys_symbols XkbTypesNameMask (1<<4) Xkb->names type XkbCompatNameMask (1<<5) Xkb->names compat XkbKeyTypeNamesMask (1<<6) Xkb->map type[*].name XkbKTLevelNamesMask (1<<7) Xkb->map type[*].lvl_names[*] XkbIndicatorNamesMask (1<<8) Xkb->names indicators[*] XkbKeyNamesMask (1<<9) Xkb->names keys[*], num_keys XkbKeyAliasesMask (1<<10) Xkb->names key_aliases[*], num_key_aliases XkbVirtualModNamesMask (1<<11) Xkb->names vmods[*] XkbGroupNamesMask (1<<12) Xkb->names groups[*] XkbRGNamesMask (1<<13) Xkb->names radio_groups[*], num_rg XkbComponentNamesMask (0x3f) Xkb->names keycodes, geometry, symbols, physical symbols, types, and compatibility map XkbAllNamesMask (0x3fff) Xkb->names all name components
Getting Symbolic Names From the Server To obtain symbolic names from the server, use XkbGetNames. XkbGetNames Status XkbGetNames Display *dpy unsigned int which XkbDescPtr xkb dpy connection to the X server which mask of names or map components to be updated xkb keyboard description to be updated XkbGetNames retrieves symbolic names for the components of the keyboard extension from the X server. The which parameter specifies the name components to be updated in the xkb parameter, and is the bitwise inclusive OR of the valid names mask bits defined in Table 18.1. If the names field of the keyboard description xkb is NULL, XkbGetNames allocates and initializes the names component of the keyboard description before obtaining the values specified by which. If the names field of xkb is not NULL, XkbGetNames obtains the values specified by which and copies them into the keyboard description xkb. If the map component of the xkb parameter is NULL, XkbGetNames does not retrieve type or shift level names, even if XkbKeyTypeNamesMask or XkbKTLevelNamesMask are set in which. XkbGetNames can return Success, or BadAlloc, BadLength, BadMatch, and BadImplementation errors. To free symbolic names, use XkbFreeNames (see section 18.6) Changing Symbolic Names on the Server To change the symbolic names in the server, first modify a local copy of the keyboard description and then use either XkbSetNames, or, to save network traffic, use a XkbNameChangesRec structure and call XkbChangeNames to download the changes to the server. XkbSetNames and XkbChangeNames can generate BadAlloc, BadAtom, BadLength, BadMatch, and BadImplementation errors. XkbSetNames Bool XkbSetNames Display *dpy unsigned int which unsigned int first_type unsigned int num_types XkbDescPtr xkb dpy connection to the X server which mask of names or map components to be changed first_type first type whose name is to be changed num_types number of types for which names are to be changed xkb keyboard description from which names are to be taken Use XkbSetNames to change many names at the same time. For each bit set in which, XkbSetNames takes the corresponding value (or values in the case of arrays) from the keyboard description xkb and sends it to the server. The first_type and num_types arguments are used only if XkbKeyTypeNamesMask or XkbKTLevelNamesMask is set in which and specify a subset of the types for which the corresponding names are to be changed. If either or both of these mask bits are set but the specified types are illegal, XkbSetNames returns False and does not update any of the names specified in which. The specified types are illegal if xkb does not include a map component or if first_type and num_types specify types that are not defined in the keyboard description. <sect3 id='The_XkbNameChangesRec_Structure'> <title>The XkbNameChangesRec Structure XkbNameChangesRec The XkbNameChangesRec allows applications to identify small modifications to the symbolic names and effectively reduces the amount of traffic sent to the server: typedef struct _XkbNameChanges { unsigned int changed; /* name components that have changed */ unsigned char first_type; /* first key type with a new name */ unsigned char num_types; /* number of types with new names */ unsigned char first_lvl; /* first key type with new level names */ unsigned char num_lvls; /* number of key types with new level names */ unsigned char num_aliases; /* if key aliases changed, total number of key aliases */ unsigned char num_rg; /* if radio groups changed, total number of radio groups */ unsigned char first_key; /* first key with a new name */ unsigned char num_keys; /* number of keys with new names */ unsigned short changed_vmods; /* mask of virtual modifiers for which names have changed */ unsigned long changed_indicators; /* mask of indicators for which names were changed */ unsigned char changed_groups; /* mask of groups for which names were changed */ } XkbNameChangesRec, *XkbNameChangesPtr; The changed field specifies the name components that have changed and is the bitwise inclusive OR of the valid names mask bits defined in Table 18.1. The rest of the fields in the structure specify the ranges that have changed for the various kinds of symbolic names, as shown in Table 18.2. XkbNameChanges Fields Mask Fields Component Field XkbKeyTypeNamesMask first_type, num_types Xkb->map type[*].name XkbKTLevelNamesMask first_lvl, num_lvls Xkb->map type[*].lvl_names[*] XkbKeyAliasesMask num_aliases Xkb->names key_aliases[*] XkbRGNamesMask num_rg Xkb->names radio_groups[*] XkbKeyNamesMask first_key, num_keys Xkb->names keys[*] XkbVirtualModNamesMask changed_vmods Xkb->names vmods[*] XkbIndicatorNamesMask changed_indicators Xkb->names indicators[*] XkbGroupNamesMask changed_groups Xkb->names groups[*]
XkbChangeNames provides a more flexible method for changing symbolic names than XkbSetNames and requires the use of an XkbNameChangesRec structure. XkbChangeNames Bool XkbChangeNames Display *dpy XkbDescPtr xkb XkbNameChangesPtr changes dpy connection to the X server xkb keyboard description from which names are to be taken changes names map components to be updated on the server XkbChangeNames copies any names specified by changes from the keyboard description, xkb, to the X server specified by dpy. XkbChangeNames aborts and returns False if any illegal type names or type shift level names are specified by changes.
Tracking Name Changes eventsXkbNamesNotify XkbNamesNotifyEvent Whenever a symbolic name changes in the server’s keyboard description, the server sends a XkbNamesNotify event to all interested clients. To receive name notify events, use XkbSelectEvents (see section 4.3) with XkbNamesNotifyMask in both the bits_to_change and values_for_bits parameters. To receive events for only specific names, use XkbSelectEventDetails. Set the event_type parameter to XkbNamesNotify, and set both the bits_to_change and values_for_bits detail parameter to a mask composed of a bitwise OR of masks in Table 18.1. The structure for the XkbNamesNotify event is defined as follows: typedef struct { int type; /* Xkb extension base event code */ unsigned long serial; /* X server serial number for event */ Bool send_event; /* True ⇒ synthetically generated */ Display * display; /* server connection where event generated */ Time time; /* server time when event generated */ int xkb_type; /* XkbNamesNotify */ int device; /* Xkb device ID, will not be XkbUseCoreKbd */ unsigned int changed; /* mask of name components that have changed */ int first_type; /* first key type with a new name */ int num_types; /* number of types with new names */ int first_lvl; /* first key type with new level names */ int num_lvls; /* number of key types with new level names */ int num_aliases; /* if key aliases changed, total number of key aliases */ int num_radio_groups; /* if radio groups changed, total number of radio groups */ unsigned int changed_vmods; /* mask of virtual modifiers for which names have changed */ unsigned int changed_groups; /* mask of groups for which names were changed */ unsigned int changed_indicators; /* mask of indicators for which names were changed */ int first_key; /* first key with a new name */ int num_keys; /* number of keys with new names */ } XkbNamesNotifyEvent; The changed field specifies the name components that have changed and is the bitwise inclusive OR of the valid names mask bits defined in Table 18.1. The other fields in this event are interpreted as the like-named fields in an XkbNameChangesRec , as previously defined. When your application receives a XkbNamesNotify event, you can note the changed names in a changes structure using XkbNoteNameChanges. XkbNoteNameChanges void XkbNoteNameChanges XkbNameChangesPtr old XkbNamesNotifyEvent *new unsigned int wanted old XkbNameChangesRec structure to be updated new event from which changes are to be copied wanted types of names for which changes are to be noted The wanted parameter is the bitwise inclusive OR of the valid names mask bits shown in Table 18.1. XkbNoteNameChanges copies any changes that are reported in new and specified in wanted into the changes record specified by old. To update the local copy of the keyboard description with the actual values, pass to XkbGetNameChanges the results of one or more calls to XkbNoteNameChanges. XkbGetNameChanges Status XkbGetNameChanges Display *dpy XkbDescPtr xkb XkbNameChangesPtr changes dpy connection to the X server xkb keyboard description to which names are copied changes names components to be obtained from the server XkbGetNameChanges examines the changes parameter, retrieves the necessary information from the server, and places the results into the xkb keyboard description. XkbGetNameChanges can generate BadAlloc, BadImplementation, and BadMatch errors. Allocating and Freeing Symbolic Names Most applications do not need to directly allocate symbolic names structures. Do not allocate a names structure directly using malloc or Xmalloc if your application changes the number of key aliases or radio groups or constructs a symbolic names structure without loading the necessary components from the X server. Instead use XkbAllocNames. XkbAllocNames Status XkbAllocNames XkbDescPtr xkb unsigned int which int num_rg int num_key_aliases xkb keyboard description for which names are to be allocated which mask of names to be allocated num_rg total number of radio group names needed num_key_aliases total number of key aliases needed XkbAllocNames can return BadAlloc, BadMatch, and BadValue errors. The which parameter is the bitwise inclusive OR of the valid names mask bits defined in Table 18.1. Do not free symbolic names structures directly using free or XFree. Use XkbFreeNames instead. XkbFreeNames void XkbFreeNames XkbDescPtr xkb unsigned int which Bool free_map xkb keyboard description for which names are to be freed which mask of names components to be freed free_map True ⇒ XkbNamesRec structure itself should be freed The which parameter is the bitwise inclusive OR of the valid names mask bits defined in Table 18.1.
and set both the bits_to_change and values_for_bits detail parameter to a mask composed of a bitwise OR of masks in Table 18.1.
The structure for the XkbNamesNotify event is defined as follows: image/svg+xml Augment names tosupply componentnames required bywant and need but notsupplied in request Augment names tosupply required com-ponent names not sup-plied in request KeyboardComponentDatabase False True True False Build keyboarddescription fromexpressions innames New KeyboardDescription(Temporary) load load Keyboard Descriptionfor device_spec KeyboardDescriptionreturned toClient Build keyboarddescription for clientby extracting struc-tures specified in wantand need Replace device_specactive keyboarddescription with newlybuilt description Initial Request: device_spec names want need load e"> X Library Controls The Xkb extension is composed of two parts: a server extension, and a client-side X library extension. discusses functions used to modify controls affecting the behavior of the server portion of the Xkb extension. This chapter discusses functions used to modify controls that affect only the behavior of the client portion of the extension; these controls are known as Library Controls. library controls controlslibrary All of the Library Controls are boolean flags that may be enabled and disabled. The controls can be divided into several categories: Controls affecting general string lookups Controls affecting compose processing Controls affecting event delivery There are two types of string lookups performed by XLookupString. XLookupString The first type involves translating a single keycode into a string; the controls in the first category affect this type of lookup. The second type involves translating a series of keysyms into a string; the controls in the second category affect this type of lookup. An Xkb implementation is required to support the programming interface for all of the controls. However, an implementation may choose not to support the semantics associated with the controls that deal with compose processing. In this case, a program that accesses these controls should still function normally; however, the feedback that would normally occur with the controls enabled may be missing. Controls Affecting Keycode-to-String Translation The first type of string lookups, which are here called simple string lookups, involves translating a single keycode into a string. Because these simple lookups involve only a single keycode, all of the information needed to do the translation is contained in the keyboard state in a single event. The controls affecting simple string lookups are: ForceLatin1Lookup ConsumeLookupMods LevelOneUsesShiftAndLock ForceLatin1Lookup If the ForceLatin1Lookup control is enabled, XLookupString only returns strings using the Latin1 character set. If ForceLatin1Lookup is not enabled, XLookupString can return characters that are not in the Latin1 set. By default, this control is disabled, allowing characters outside of the Latin1 set to be returned. ConsumeLookupMods Simple string lookups in XLookupString involve two different translation phases. The first phase translates raw device keycodes to individual keysyms. The second phase attempts to map the resulting keysym into a string of one or more characters. In the first phase, some of the modifiers are normally used to determine the appropriate shift level for a key. The ConsumeLookupMods control determines whether or not XLookupString consumes the modifiers it uses during the first phase of processing (mapping a keycode to a keysym). When a modifier is consumed, it is effectively removed from the working copy of the keyboard state information XLookupString is using and appears to be unset for the remainder of the processing. If the ConsumeLookupMods control is enabled, XLookupString does not use the modifiers used to translate the keycode of the event to a keysym when it is determining the string associated with a keysym. For example, assume the keymap for the ‘A’ key only contains the shift modifier and the ConsumeLookupMods control is enabled. If a user presses the Shift key and the A key while the Num_Lock key is locked, XLookupString uses the Shift modifier when mapping the keycode for the ‘a’ key to the keysym for ‘A’; subsequently, it only uses the NumLock modifier when determining the string associated with the keysym ‘A’. If the ConsumeLookupMods control is not enabled, XLookupString uses all of the event modifiers to determine the string associated with a keysym. This behavior mirrors the behavior of XLookupString in the core implementation. The ConsumeLookupMods control is unset by default. For more information on modifier consumption, refer to . AlwaysConsumeShiftAndLock The AlwaysConsumeShiftAndLock control, if enabled, forces XLookupString to consume the Shift and Lock modifiers when processing all keys, even if the definition for the key type does not specify these modifiers. The AlwaysConsumeShiftAndLock control is unset by default. See section 15.2 for a discussion of key types. Controls Affecting Compose Processing The second type of string lookup performed by XLookupString involves translating a series of keysyms into a string. Because these lookups can involve more than one key event, they require XLookupString to retain some state information between successive calls. The process of mapping a series of keysyms to a string is known as compose processing. compose processing The controls affecting compose processing are: ConsumeKeysOnComposeFail ComposeLED BeepOnComposeFail Because different vendors have historically used different algorithms to implement compose processing, and these algorithms may be incompatible with the semantics required by the Xkb compose processing controls, implementation of the compose processing controls is optional in an Xkb implementation. ConsumeKeysOnComposeFail Some compose processing algorithms signal the start of a compose sequence by a key event meaning start compose. Another possibility is to have the compose processing simply be the result of a finite state acceptor; a compose sequence would never fail for a properly written finite state acceptor. The subsequent key events should normally result in a valid composition yielding a valid translation to a string. If the subsequent key events do not have a valid translation, some decision must be made about what to do with the key events that were processed while attempting the compose. The ConsumeKeysOnComposeFail control allows a client to specify what happens with the key events XLookupString has been considering when it reaches a dead end in a compose sequence. If the ConsumeKeysOnComposeFail control is set, all keys associated with a failed compose sequence should be consumed (discarded). If the ConsumeKeysOnComposeFail control is not set, the key events associated with a failed compose sequence should be processed as a normal sequence of key events. The ConsumeKeysOnComposeFail control is disabled by default. ComposeLED The ComposeLED control allows a client to specify whether or not an indicator should be set and cleared to provide feedback when compose processing is in progress. The control does not specify which indicator should be used; the mapping for this is up to the individual implementation. If the ComposeLED control is enabled, it specifies that an indicator should be set when a compose sequence is in progress and cleared when one is not in progress. The ComposeLED control is disabled by default. While the Xkb extension does not specify the type of type of indicator to be used when the ComposeLED control is implemented, a consistent convention between implementations is to everyone’s benefit. If a named indicator is used for this purpose, the recommended name is “Compose”. Note that some implementations may use an unnamed, custom hardware LED for this purpose. BeepOnComposeFail The BeepOnComposeFail control allows a client to specify whether or not a bell should be activated to provide feedback when a compose sequence fails. The control does not specify the type of bell that should be used; the mapping for this is up to the individual implementation. If the BeepOnComposeFail control is enabled, it specifies that a bell should be activated when a compose sequence fails. The BeepOnComposeFail control is disabled by default. If implemented, the bell should be activated using XkbBell or XkbDeviceBell. While the Xkb extension does not specify the type of bell to be used when the BeepOnComposeFail control is implemented, a consistent convention between implementations is to everyone’s benefit. If a named bell is used for this purpose, the recommended name is “ComposeFail”. Controls Effecting Event Delivery IgnoreNewKeyboards eventsNewKeyboardNotify eventsMappingNotify When Xkb is initialized, it implicitly forces requests for NewKeyboardNotify events. These events may be used by the Xkb library extension internally; they are normally translated into core protocol MappingNotify events before being passed to the client. While delivering the event to the client is appropriate in most cases, it is not appropriate for some clients that maintain per-key data structures. This is because once the server has sent a NewKeyboardNotify event, it is free to send the client events for all keys in the new range and that range may be outside of the per-key data structures the client is maintaining. The IgnoreNewKeyboards control, if enabled, prevents Xkb from mapping NewKeyboardNotify events to core MappingNotify events and passing them to the client. The control is initially disabled. Manipulating the Library Controls The Library Controls are manipulated using functions that deal with bitmasks to indicate which controls to manipulate. The controls are identified by the masks defined in Table 11.1. Library Control Masks Library Control Mask Value XkbLC_ForceLatin1Lookup (1 << 0) XkbLC_ConsumeLookupMods (1 << 1) XkbLC_AlwaysConsumeShiftAndLock (1 << 2) XkbLC_IgnoreNewKeyboards (1 << 3) XkbLC_ConsumeKeysOnComposeFail (1 << 29) XkbLC_ComposeLED (1 << 30) XkbLC_BeepOnComposeFail (1 << 31) XkbLC_AllControls (0xc0000007)
Determining Which Library Controls are Implemented To determine which Library Controls are actually implemented, use XkbXlibControlsImplemented. XkbXlibControlsImplemented unsigned int XkbXlibControlsImplemented Display *display display connection to X server XkbXlibControlsImplemented returns a bitmask indicating the controls actually implemented in the Xkb library and is composed of an inclusive OR of bits from Table 11.1. Determining the State of the Library Controls To determine the current state of the Library Controls, use XkbGetXlibControls. XkbGetXlibControls unsigned int XkbGetXlibControls Display *display display connection to X server XkbGetXlibControls returns the current state of the Library Controls as a bit mask that is an inclusive OR of the control masks from Table 11.1 for the controls that are enabled. For the optional compose processing controls, the fact that a control is enabled does not imply that it is actually implemented. Changing the State of the Library Controls To change the state of the Library Controls, use XkbSetXlibControls. XkbSetXlibControls Bool XkbSetXlibControls Display *display unsigned long bits_to_change unsigned long values_for_bits display connection to X server bits_to_change selects controls to be modified values_for_bits turns selected controls on (1) or off (0) XkbSetXlibControls modifies the state of the controls selected by bits_to_change; only the controls selected by bits_to_change are modified. If the bit corresponding to a control is on in bits_to_change and also on in values_for_bits, the control is enabled. If the bit corresponding to a control is on in bits_to_change but off in values_for_bits, the control is disabled. bits_to_change should be an inclusive OR of bits from Table 11.1.
unction> has been considering when it reaches a dead end in a compose sequence.
If the ConsumeKeysOnComposeFail control is set, all keys associated with a failed compose sequence should libX11-1.6.3/specs/XKB/ch16.xml000064401431060000012000004170051247741723500161110ustar00alancstaff00002660200006 Xkb Server Keyboard Mapping server map mapserver The server field of the complete Xkb keyboard description (see section 6.1) is a pointer to the Xkb server map. Figure 16.1 shows the relationships between elements in the server map:
Server Map Relationships
XkbServerMapRec The Xkb server map contains the information the server needs to interpret key events and is of type XkbServerMapRec: #define XkbNumVirtualMods 16 typedef struct { /* Server Map */ unsigned short num_acts; /* # of occupied entries in acts */ unsigned short size_acts; /* # of entries in acts */ XkbAction * acts; /* linear 2d tables of key actions, 1 per keycode */ XkbBehavior * behaviors; /* key behaviors, 1 per keycode */ unsigned short * key_acts; /* index into acts, 1 per keycode */ unsigned char * explicit; /* explicit overrides of core remapping, 1 per key */ unsigned char vmods[XkbNumVirtualMods]; /* real mods bound to virtual mods */ unsigned short * vmodmap; /* virtual mods bound to key, 1 per keycode */ } XkbServerMapRec, *XkbServerMapPtr; The num_acts, size_acts, acts, and key_acts fields specify the key actions, defined in section 16.1. The behaviors field describes the behavior for each key and is defined in section 16.2. The explicit field describes the explicit components for a key and is defined in section 16.3. The vmods and the vmodmap fields describe the virtual modifiers and the per-key virtual modifier mapping and are defined in section 16.4. Key Actions A key action defines the effect key presses and releases have on the internal state of the server. For example, the expected key action associated with pressing the Shift key is to set the Shift modifier. There is zero or one key action associated with each keysym bound to each key. Just as the entire list of key symbols for the keyboard mapping is held in the syms field of the client map, the entire list of key actions for the keyboard mapping is held in the acts array of the server map. The total size of acts is specified by size_acts, and the number of entries is specified by num_acts. The key_acts array, indexed by keycode, describes the actions associated with a key. The key_acts array has min_key_code unused entries at the start to allow direct indexing using a keycode. If a key_acts entry is zero, it means the key does not have any actions associated with it. If an entry is not zero, the entry represents an index into the acts field of the server map, much as the offset field of a KeySymMapRec structure is an index into the syms field of the client map. The reason the acts field is a linear list of XkbActions is to reduce the memory consumption associated with a keymap. Because Xkb allows individual keys to have multiple shift levels and a different number of groups per key, a single two-dimensional array of KeySyms would potentially be very large and sparse. Instead, Xkb provides a small two-dimensional array of XkbActions for each key. To store all of these individual arrays, Xkb concatenates each array together in the acts field of the server map. The key action structures consist only of fields of type char or unsigned char. This is done to optimize data transfer when the server sends bytes over the wire. If the fields are anything but bytes, the server has to sift through all of the actions and swap any nonbyte fields. Because they consist of nothing but bytes, it can just copy them out. Xkb provides the following macros, to simplify accessing information pertaining to key actions: XkbKeyHasActions Bool XkbKeyHasActions XkbDescPtr xkb KeyCode keycode xkb Xkb description of interest keycode keycode of interest XkbKeyHasActions returns True if the key corresponding to keycode has any actions associated with it; otherwise, it returns False. XkbKeyNumActions int XkbKeyNumActions XkbDescPtr xkb KeyCode keycode xkb Xkb description of interest keycode keycode of interest XkbKeyNumActions computes the number of actions associated with the key corresponding to keycode. This should be the same value as the result of XkbKeyNumSyms (see section 15.3.3). XkbKeyActionsPtr XkbKeyActionPtr XkbKeyActionsPtr XkbDescPtr xkb KeyCode keycode xkb Xkb description of interest keycode keycode of interest XkbKeyActionsPtr returns a pointer to the two-dimensional array of key actions associated with the key corresponding to keycode. Use XkbKeyActionsPtr only if the key actually has some actions associated with it, that is, XkbKeyNumActions (xkb, keycode) returns something greater than zero. XkbKeyAction XkbAction XkbKeyAction XkbDescPtr xkb KeyCode keycode int idx xkb Xkb description of interest keycode keycode of interest idx index for group and shift level XkbKeyAction returns the key action indexed by idx in the two-dimensional array of key actions associated with the key corresponding to keycode. idx may be computed from the group and shift level of interest as follows: idx = group_index * key_width + shift_level XkbKeyActionEntry XkbAction XkbKeyActionEntry XkbDescPtr xkb KeyCode keycode int shift int grp xkb Xkb description of interest keycode keycode of interest shift shift level within group grp group index for group of interest XkbKeyActionEntry returns the key action corresponding to group grp and shift level shift from the two-dimensional table of key actions associated with the key corresponding to keycode. The XkbAction Structure XkbAction The description for an action is held in an XkbAction structure, which is a union of all possible Xkb action types: typedef union _XkbAction { XkbAnyAction any; XkbModAction mods; XkbGroupAction group; XkbISOAction iso; XkbPtrAction ptr; XkbPtrBtnAction btn; XkbPtrDfltAction dflt; XkbSwitchScreenAction screen; XkbCtrlsAction ctrls; XkbMessageAction msg; XkbRedirectKeyAction redirect; XkbDeviceBtnAction devbtn; XkbDeviceValuatorAction devval; unsigned char type; } XkbAction; The type field is provided for convenience and is the same as the type field in the individual structures. The following sections describe the individual structures for each action in detail. The XkbAnyAction Structure XkbAnyAction The XkbAnyAction structure is a convenience structure that refers to any of the actions: #define XkbAnyActionDataSize 7 typedef struct _XkbAnyAction { unsigned char type; /* type of action; determines interpretation for data */ unsigned char data[XkbAnyActionDataSize]; } XkbAnyAction; The data field represents a structure for an action, and its interpretation depends on the type field. The valid values for the type field, and the data structures associated with them are shown in Table 16.1: Action Types Type Structure for Data XkbAction Union Member Section XkbSA_NoAction XkbSA_NoAction means the server does not perform an action for the key; this action does not have an associated data structure. any XkbSA_SetMods XkbSA_LatchMods XkbSA_LockMods XkbModAction mods 16.1.3 XkbSA_SetGroup XkbSA_LatchGroup XkbSA_LockGroup XkbGroupAction group 16.1.4 XkbSA_MovePtr XkbPtrAction ptr 16.1.5 XkbSA_PtrBtn XkbSA_LockPtrBtn XkbPtrBtnActionbtn 16.1.6 XkbSA_SetPtrDflt XkbPtrDfltAction dflt 16.1.7 XkbSA_ISOLock XkbISOAction iso 16.1.8 XkbSA_SwitchScreen XkbSwitchScreenAction screen 16.1.9 XkbSA_SetControls XkbSA_LockControls XkbCtrlsAction ctrls 16.1.10 XkbSA_ActionMessage XkbMessageAction msg 16.1.11 XkbSA_RedirectKey XkbRedirectKeyAction redirect 16.1.12 XkbSA_DeviceBtn XkbSA_LockDeviceBtn XkbDeviceBtnAction devbtn 16.1.13 XkbSA_DeviceValuator XkbDeviceValuatorAction devval 16.1.14
Actions for Changing Modifiers’ State XkbModAction Actions associated with the XkbModAction structure change the state of the modifiers when keys are pressed and released (see for a discussion of modifiers): typedef struct _XkbModAction { unsigned char type; /* XkbSA_{Set|Latch|Lock}Mods */ unsigned char flags; /* with type, controls the effect on modifiers */ unsigned char mask; /* same as mask field of a modifier description */ unsigned char real_mods; /* same as real_mods field of a modifier description */ unsigned char vmods1; /* derived from vmods field of a modifier description */ unsigned char vmods2; /* derived from vmods field of a modifier description */ } XkbModAction; In the following description, the term action modifiers action modifiers modifiersaction means the real modifier bits associated with this action. Depending on the value of flags (see Table 16.3), these are designated either in the mask field of the XkbModAction structure itself or the real modifiers bound to the key for which the action is being used. In the latter case, this is the client map->modmap [ keycode ] field. The type field can have any of the values shown in Table 16.2. Modifier Action Types Type Effect XkbSA_SetMods A key press adds any action modifiers to the keyboard’s base modifiers. A key release clears any action modifiers in the keyboard’s base modifiers, provided no other key affecting the same modifiers is logically down. If no other keys are physically depressed when this key is released, and XkbSA_ClearLocks is set in the flags field, the key release unlocks any action modifiers. XkbSA_LatchMods Key press and key release events have the same effect as for XkbSA_SetMods; if no keys are physically depressed when this key is released, key release events have the following additional effects: Modifiers unlocked due to XkbSA_ClearLocks have no further effect. If XkbSA_LatchToLock is set in the flags field, a key release locks and then unlatches any remaining action modifiers that are already latched. A key release latches any action modifiers not used by the XkbSA_ClearLocks and XkbSA_LatchToLock flags. XkbSA_LockMods A key press sets the base state of any action modifiers. If XkbSA_LockNoLock is set in the flags field, a key press also sets the locked state of any action modifiers. A key release clears any action modifiers in the keyboard’s base modifiers, provided no other key that affects the same modifiers is down. If XkbSA_LockNoUnlock is not set in the flags field, and any of the action modifiers were locked before the corresponding key press occurred, a key release unlocks them.
The flags field is composed of the bitwise inclusive OR of the masks shown in Table 16.3. A general meaning is given in the table, but the exact meaning depends on the action type. Modifier Action Flags Flag Meaning XkbSA_UseModMapMods If set, the action modifiers are determined by the modifiers bound by the modifier mapping of the key. Otherwise, the action modifiers are set to the modifiers specified by the mask, real_mods, vmods1, and vmods2 fields. XkbSA_ClearLocks If set and no keys are physically depressed when this key transition occurs, the server unlocks any action modifiers. XkbSA_LatchToLock If set, and the action type is XkbSA_LatchMods, the server locks the action modifiers if they are already latched. XkbSA_LockNoLock If set, and the action type is XkbSA_LockMods, the server only unlocks the action modifiers. XkbSA_LockNoUnlock If set, and the action is XkbSA_LockMods, the server only locks the action modifiers.
If XkbSA_UseModMapMods is not set in the flags field, the mask, real_mods, vmods1, and vmods2 fields are used to determine the action modifiers. Otherwise they are ignored and the modifiers bound to the key (client map->modmap [ keycode ]) are used instead. The mask, real_mods, vmods1, and vmods2 fields represent the components of an Xkb modifier description (see section 7.2). While the mask and real_mods fields correspond directly to the mask and real_mods fields of an Xkb modifier description, the vmods1 and vmods2 fields are combined to correspond to the vmods field of an Xkb modifier description. Xkb provides the following macros, to convert between the two formats: XkbModActionVMods unsigned short XkbModActionVMods XkbAction act act action from which to extract virtual mods XkbModActionVMods returns the vmods1 and vmods2 fields of act converted to the vmods format of an Xkb modifier description. XkbSetModActionVMods void XkbSetModActionVMods XkbAction act unsigned short vmods act action in which to set vmods vmods virtual mods to set XkbSetModActionVMods sets the vmods1 and vmods2 fields of act using the vmods format of an Xkb modifier description. Despite the fact that the first parameter of these two macros is of type XkbAction, these macros may be used only with Actions of type XkbModAction and XkbISOAction.
Actions for Changing Group State XkbGroupAction Actions associated with the XkbGroupAction structure change the current group state when keys are pressed and released (see for a description of groups and keyboard state): typedef struct _XkbGroupAction { unsigned char type; /* XkbSA_{Set|Latch|Lock}Group */ unsigned char flags; /* with type , controls the effect on groups */ char group_XXX; /* represents a group index or delta */ } XkbGroupAction; The type field can have any of the following values: Group Action Types Type Effect XkbSA_SetGroup If the XkbSA_GroupAbsolute bit is set in the flags field, key press events change the base keyboard group to the group specified by the group_XXX field. Otherwise, key press events change the base keyboard group by adding the group_XXX field to the base keyboard group. In either case, the resulting effective keyboard group is brought back into range depending on the value of the groups_wrap field of the controls structure (see section 10.7.1). If a key with an XkbSA_ISOLock action (see section 16.1.8) is pressed while this key is down, the key release of this key has no effect. Otherwise, the key release cancels the effects of the key press. If the XkbSA_ClearLocks bit is set in the flags field, and no keys are physically depressed when this key is released, the key release also sets the locked keyboard group to Group1. XkbSA_LatchGroup Key press and key release events have the same effect as for XkbSA_SetGroup; if no keys are physically depressed when this key is released, key release events have the following additional effects. If the XkbSA_LatchToLock bit is set in the flags field and the latched keyboard group index is nonzero, the key release adds the delta applied by the corresponding key press to the locked keyboard group and subtracts it from the latched keyboard group. The locked and effective keyboard group are brought back into range according to the value of the groups_wrap field of the controls structure. Otherwise, the key press adds the key press delta to the latched keyboard group. XkbSA_LockGroup If the XkbSA_GroupAbsolute is set in the flags field, key press events set the locked keyboard group to the group specified by the group_XXX field. Otherwise, key press events add the group specified by the group_XXX field to the locked keyboard group. In either case, the resulting locked and effective keyboard groups are brought back into range depending on the value of the groups_wrap field of the controls structure. A key release has no effect.
The flags field is composed of the bitwise inclusive OR of the masks shown in Table 16.5. A general meaning is given in the table, but the exact meaning depends on the action type. Group Action Flags Flag Meaning XkbSA_ClearLocks If set and no keys are physically depressed when this key transition occurs, the server sets the locked keyboard group to Group1 on a key release. XkbSA_LatchToLock If set, and the action type is XkbSA_LatchGroup, the server locks the action group if it is already latched. XkbSA_GroupAbsolute If set, the group_XXX field represents an absolute group number. Otherwise, it represents a group delta to be added to the current group to determine the new group number.
The group_XXX field represents a signed character. Xkb provides the following macros to convert between a signed integer value and a signed character: XkbSAGroup int XkbSAGroup XkbAction act act action from which to extract group XkbSAGroup returns the group_XXX field of act converted to a signed int. XkbSASetGroup void XkbSASetGroup XkbAction act int grp act action from which to set group grp group index to set in group_XXX XkbSASetGroup sets the group_XXX field of act from the group index grp. Despite the fact that the first parameter of these two macros is of type XkbAction, these macros may only be used with Actions of type XkbGroupAction and XkbISOAction.
Actions for Moving the Pointer XkbPtrAction Actions associated with the XkbPtrAction structure move the pointer when keys are pressed and released: typedef struct _XkbPtrAction { unsigned char type; /* XkbSA_MovePtr */ unsigned char flags; /* determines type of pointer motion */ unsigned char high_XXX; /* x coordinate, high bits */ unsigned char low_XXX; /* y coordinate, low bits */ unsigned char high_YYY; /* x coordinate, high bits */ unsigned char low_YYY; /* y coordinate, low bits */ } XkbPtrAction; If the MouseKeys control is not enabled (see section 10.5.1), KeyPress and KeyRelease events are treated as though the action is XkbSA_NoAction. If the MouseKeys control is enabled, a server action of type XkbSA_MovePtr instructs the server to generate core pointer MotionNotify events rather than the usual KeyPress event, and the corresponding KeyRelease event disables any mouse keys timers that were created as a result of handling the XkbSA_MovePtr action. The type field of the XkbPtrAction structure is always XkbSA_MovePtr. The flags field is a bitwise inclusive OR of the masks shown in Table 16.6. Pointer Action Types Action Type Meaning XkbSA_NoAcceleration If not set, and the MouseKeysAccel control is enabled (see section 10.5.2), the KeyPress initiates a mouse keys timer for this key; every time the timer expires, the cursor moves. XkbSA_MoveAbsoluteX If set, the X portion of the structure specifies the new pointer X coordinate. Otherwise, the X portion is added to the current pointer X coordinate to determine the new pointer X coordinate. XkbSA_MoveAbsoluteY If set, the Y portion of the structure specifies the new pointer Y coordinate. Otherwise, the Y portion is added to the current pointer Y coordinate to determine the new pointer Y coordinate.
Each of the X and Y coordinates of the XkbPtrAction structure is composed of two signed 16-bit values, that is, the X coordinate is composed of high_XXX and low_XXX, and similarly for the Y coordinate. Xkb provides the following macros, to convert between a signed integer and two signed 16-bit values in XkbPtrAction structures: XkbPtrActionX int XkbPtrActionX XkbPtrAction act act action from which to extract X XkbPtrActionX returns the high_XXX and low_XXX fields of act converted to a signed int. XkbPtrActionY int XkbPtrActionY XkbPtrAction act act action from which to extract Y XkbPtrActionY returns the high_YYY and low_YYY fields of act converted to a signed int. XkbSetPtrActionX void XkbSetPtrActionX XkbPtrAction act int x act action in which to set X x new value to set XkbSetPtrActionX sets the high_XXX and low_XXX fields of act from the signed integer value x. XkbSetPtrActionY void XkbSetPtrActionY XkbPtrAction act int y act action in which to set Y y new value to set XkbSetPtrActionX sets the high_YYY and low_YYY fields of act from the signed integer value y.
Actions for Simulating Pointer Button Press and Release XkbPtrBtnAction Actions associated with the XkbPtrBtnAction structure simulate the press and release of pointer buttons when keys are pressed and released: typedef struct _XkbPtrBtnAction { unsigned char type; /* XkbSA_PtrBtn, XkbSA_LockPtrBtn */ unsigned char flags; /* with type, controls the effect on pointer buttons */ unsigned char count; /* controls number of ButtonPress and ButtonRelease events */ unsigned char button; /* pointer button to simulate */ } XkbPtrBtnAction; If the MouseKeys (see section 10.5.1) control is not enabled, KeyPress and KeyRelease events are treated as though the action is XkbSA_NoAction. The type field can have any one of the values shown in Table 16.7. Pointer Button Action Types Type Effect XkbSA_PtrBtn If XkbSA_UseDfltButton is set in the flags field, the event is generated for the pointer button specified by the mk_dflt_btn attribute of the MouseKeys control (see section 10.5.1). Otherwise, the event is generated for the button specified by the button field. If the mouse button specified for this action is logically down, the key press and corresponding key release are ignored and have no effect. Otherwise, a key press causes one or more core pointer button events instead of the usual KeyPress event. If count is zero, a key press generates a single ButtonPress event; if count is greater than zero, a key press generates count pairs of ButtonPress and ButtonRelease events. If count is zero, a key release generates a core pointer ButtonRelease that matches the event generated by the corresponding KeyPress; if count is nonzero, a key release does not cause a ButtonRelease event. A key release never generates a key KeyRelease event. XkbSA_LockPtrBtn If the button specified by the MouseKeys default button or button is not locked, a key press causes a ButtonPress event instead of a KeyPress event and locks the button. If the button is already locked or if XkbSA_LockNoUnlock is set in the flags field, a key press is ignored and has no effect. If the corresponding key press was ignored, and if XkbSA_LockNoLock is not set in the flags field, a key release generates a ButtonRelease event instead of a KeyRelease event and unlocks the specified button. If the corresponding key press locked a button, the key release is ignored and has no effect.
The flags field is composed of the bitwise inclusive OR of the masks shown in Table 16.8. A general meaning is given in the table, but the exact meaning depends on the action type: Pointer Button Action Flags Flag Meaning XkbSA_UseDfltButton If set, the action uses the pointer button specified by the mk_dflt_btn attribute of the MouseKeys control (see section 10.5.1). Otherwise, the action uses the pointer button specified by the button field. XkbSA_LockNoLock If set, and the action type is XkbSA_LockPtrBtn, the server only unlocks the pointer button. XkbSA_LockNoUnlock If set, and the action type is XkbSA_LockPtrBtn, the server only locks the pointer button.
Actions for Changing the Pointer Button Simulated XkbPtrDfltAction Actions associated with the XkbPtrDfltAction structure change the mk_dflt_btn attribute of the MouseKeys control (see section 10.5.1): typedef struct _XkbPtrDfltAction { unsigned char type; /* XkbSA_SetPtrDflt */ unsigned char flags; /* controls the pointer button number */ unsigned char affect; /* XkbSA_AffectDfltBtn */ char valueXXX; /* new default button member */ } XkbPtrDfltAction; If the MouseKeys control is not enabled, KeyPress and KeyRelease events are treated as though the action is XkbSA_NoAction. Otherwise, this action changes the mk_dflt_btn attribute of the MouseKeys control. The type field of the XkbPtrDfltAction structure should always be XkbSA_SetPtrDflt. The flags field is composed of the bitwise inclusive OR of the values shown in Table 16.9 (currently there is only one value defined). Pointer Default Flags Flag Meaning XkbSA_DfltBtnAbsolute If set, the value field represents an absolute pointer button. Otherwise, the value field represents the amount to be added to the current default button.
The affect field specifies what changes as a result of this action. The only valid value for the affect field is XkbSA_AffectDfltBtn. The valueXXX field is a signed character that represents the new button value for the mk_dflt_btn attribute of the MouseKeys control (see section 10.5.1). If XkbSA_DfltBtnAbsolute is set in flags, valueXXX specifies the button to be used; otherwise, valueXXX specifies the amount to be added to the current default button. In either case, illegal button choices are wrapped back around into range. Xkb provides the following macros, to convert between the integer and signed character values in XkbPtrDfltAction structures: XkbSAPtrDfltValue int XkbSAPtrDfltValue XkbAction act act action from which to extract group XkbSAPtrDfltValue returns the valueXXX field of act converted to a signed int. XkbSASetPtrDfltValue void XkbSASetPtrDfltValue XkbPtrDfltAction act int val act action in which to set valueXXX val value to set in valueXXX XkbSASetPtrDfltValue sets the valueXXX field of act from val.
Actions for Locking Modifiers and Group XkbISOAction Actions associated with the XkbISOAction structure lock modifiers and the group according to the ISO9995 specification. Operated by itself, the XkbISOAction is just a caps lock. Operated simultaneously with another modifier key, it transforms the other key into a locking key. For example, press ISO_Lock, press and release Control_L, release ISO_Lock ends up locking the Control modifier. The default behavior is to convert: {Set,Latch}Mods to: LockMods {Set,Latch}Group to: LockGroup SetPtrBtn to: LockPtrBtn SetControls to: LockControls The affects field allows you to turn those effects on or off individually. Set XkbSA_ISONoAffectMods to disable the first, XkbSA_ISONoAffectGroup to disable the second, and so forth. typedef struct _XkbISOAction { unsigned char type; /* XkbSA_ISOLock */ unsigned char flags; /* controls changes to group or modifier state */ unsigned char mask; /* same as mask field of a modifier description */ unsigned char real_mods; /* same as real_mods field of a modifier description */ char group_XXX; /* group index or delta group */ unsigned char affect; /* specifies whether to affect mods, group, ptrbtn, or controls */ unsigned char vmods1; /* derived from vmods field of a modifier description */ unsigned char vmods2; /* derived from vmods field of a modifier description */ } XkbISOAction; The type field of the XkbISOAction structure should always be XkbSA_ISOLock. The interpretation of the flags field depends on whether the XkbSA_ISODfltIsGroup is set in the flags field or not. If the XkbSA_ISODfltIsGroup is set in the flags field, the action is used to change the group state. The remaining valid bits of the flags field are composed of a bitwise inclusive OR using the masks shown in Table 16.10. ISO Action Flags when XkbSA_ISODfltIsGroup is Set Flag Meaning XkbSA_ISODfltIsGroup If set, the action is used to change the base group state. Must be set for the remaining bits in this table to carry their interpretations. A key press sets the base group as specified by the group_XXX field and the XkbSA_GroupAbsolute bit of the flags field (see section Note). If no other actions are transformed by the XkbSA_ISOLock action, a key release locks the group. Otherwise, a key release clears group set by the key press. XkbSA_GroupAbsolute If set, the group_XXX field represents an absolute group number. Otherwise, it represents a group delta to be added to the current group to determine the new group number. XkbSA_ISONoAffectMods If not set, any XkbSA_SetMods or XkbSA_LatchMods actions that occur simultaneously with the XkbSA_ISOLock action are treated as XkbSA_LockMods actions instead. XkbSA_ISONoAffectGroup If not set, any XkbSA_SetGroup or XkbSA_LatchGroup actions that occur simultaneously with the XkbSA_ISOLock action are treated as XkbSA_LockGroup actions instead. XkbSA_ISONoAffectPtr If not set, any XkbSA_PtrBtn actions that occur simultaneously with the XkbSA_ISOLock action are treated as XkbSA_LockPtrBtn actions instead. XkbSA_ISONoAffectCtrls If not set, any XkbSA_SetControls actions that occur simultaneously with the XkbSA_ISOLock action are treated as XkbSA_LockControls actions instead.
If the XkbSA_ISODfltIsGroup is not set in the flags field, the action is used to change the modifier state and the remaining valid bits of the flags field are composed of a bitwise inclusive OR using the masks shown in Table 16.11. ISO Action Flags when XkbSA_ISODfltIsGroup is Not Set Flag Meaning XkbSA_ISODfltIsGroup If not set, action is used to change the base modifier state. Must not be set for the remaining bits in this table to carry their interpretations. A key press sets the action modifiers in the keyboard’s base modifiers using the mask, real_mods, vmods1, and vmods2 fields (see section 16.1.3). If no other actions are transformed by the XkbSA_ISOLock action, a key release locks the action modifiers. Otherwise, a key release clears the base modifiers set by the key press. XkbSA_UseModMapMods If set, the action modifiers are determined by the modifiers bound by the modifier mapping of the key. Otherwise, the action modifiers are set to the modifiers specified by the mask, real_mods, vmods1, and vmods2 fields. XkbSA_LockNoLock If set, the server only unlocks the action modifiers. XkbSA_LockNoUnlock If set, the server only locks the action modifiers. XkbSA_ISONoAffectMods If not set, any XkbSA_SetMods or XkbSA_LatchMods actions that occur simultaneously with the XkbSA_ISOLock action are treated as XkbSA_LockMods actions instead. XkbSA_ISONoAffectGroup If not set, any XkbSA_SetGroup or XkbSA_LatchGroup actions that occur simultaneously with the XkbSA_ISOLock action are treated as XkbSA_LockGroup actions instead. XkbSA_ISONoAffectPtr If not set, any XkbSA_PtrBtn actions that occur simultaneously with the XkbSA_ISOLock action are treated as XkbSA_LockPtrBtn actions instead. XkbSA_ISONoAffectCtrls If not set, any XkbSA_SetControls actions that occur simultaneously with the XkbSA_ISOLock action are treated as XkbSA_LockControls actions instead.
The group_XXX field represents a signed character. Xkb provides macros to convert between a signed integer value and a signed character as shown in section Note. The mask, real_mods, vmods1, and vmods2 fields represent the components of an Xkb modifier description (see section 7.2). While the mask and real_mods fields correspond directly to the mask and real_mods fields of an Xkb modifier description, the vmods1 and vmods2 fields are combined to correspond to the vmods field of an Xkb modifier description. Xkb provides macros to convert between the two formats as shown in section 16.1.3. The affect field is composed of a bitwise inclusive OR using the masks shown in Table 16.11. ISO Action Affect Field Values Affect Meaning XkbSA_ISONoAffectMods If XkbSA_ISONoAffectMods is not set, any SA_SetMods or SA_LatchMods actions occurring simultaneously with the XkbISOAction are treated as SA_LockMods instead. XkbSA_ISONoAffectGroup If XkbSA_ISONoAffectGroup is not set, any SA_SetGroup or SA_LatchGroup actions occurring simultaneously with the XkbISOAction are treated as SA_LockGroup instead. XkbSA_ISONoAffectPtr If XkbSA_ISONoAffectPtr is not set, any SA_PtrBtn actions occurring simultaneously with the XkbISOAction are treated as SA_LockPtrBtn instead. XkbSA_ISONoAffectCtrls If XkbSA_ISONoAffectCtrls is not set, any SA_SetControls actions occurring simultaneously with the XkbISOAction are treated as SA_LockControls instead.
Actions for Changing the Active Screen XkbSwitchScreenAction Actions associated with the XkbSwitchScreenAction action structure change the active screen on a multiscreen display: This action is optional. Servers are free to ignore the action or any of its flags if they do not support the requested behavior. If the action is ignored, it behaves like XkbSA_NoAction. Otherwise, key press and key release events do not generate an event. typedef struct _XkbSwitchScreenAction { unsigned char type; /* XkbSA_SwitchScreen */ unsigned char flags; /* controls screen switching */ char screenXXX; /* screen number or delta */ } XkbSwitchScreenAction; The type field of the XkbSwitchScreenAction structure should always be XkbSA_SwitchScreen. The flags field is composed of the bitwise inclusive OR of the masks shown in Table 16.13. Switch Screen Action Flags Flag Meaning XkbSA_SwitchAbsolute If set, the screenXXX field represents the index of the new screen. Otherwise, it represents an offset from the current screen to the new screen. XkbSA_SwitchApplication If not set, the action should switch to another screen on the same server. Otherwise, it should switch to another X server or application that shares the same physical display.
The screenXXX field is a signed character value that represents either the relative or absolute screen index, depending on the state of the XkbSA_SwitchAbsolute bit in the flags field. Xkb provides the following macros to convert between the integer and signed character value for screen numbers in XkbSwitchScreenAction structures: XkbSAScreen int XkbSAScreen XkbSwitchScreenAction act act action from which to extract screen XkbSAScreen returns the screenXXX field of act converted to a signed int. XkbSASetScreen void XkbSASetScreen XkbSwitchScreenAction act int s act action in which to set screenXXX s value to set in screenXXX XkbSASetScreen sets the screenXXX field of act from s.
Actions for Changing Boolean Controls State XkbCtrlsAction Actions associated with the XkbCtrlsAction structure change the state of the boolean controls (see section 10.1): typedef struct _XkbCtrlsAction { unsigned char type; /* XkbSA_SetControls, XkbSA_LockControls */ unsigned char flags; /* with type, controls enabling and disabling of controls */ unsigned char ctrls3; /* ctrls0 through ctrls3 represent the boolean controls */ unsigned char ctrls2; /* ctrls0 through ctrls3 represent the boolean controls */ unsigned char ctrls1; /* ctrls0 through ctrls3 represent the boolean controls */ unsigned char ctrls0; /* ctrls0 through ctrls3 represent the boolean controls */ } XkbCtrlsAction; The type field can have any one of the values shown in Table 16.14. Controls Action Types Type Effect XkbSA_SetControls A key press enables any boolean controls specified in the ctrls fields that were not already enabled at the time of the key press. A key release disables any controls enabled by the key press. This action can cause XkbControlsNotify events (see section 10.1). XkbSA_LockControls If the XkbSA_LockNoLock bit is not set in the flags field, a key press enables any controls specified in the ctrls fields that were not already enabled at the time of the key press. If the XkbSA_LockNoUnlock bit is not set in the flags field, a key release disables any controls specified in the ctrls fields that were not already disabled at the time of the key press. This action can cause XkbControlsNotify events (see section 10.1).
The flags field is composed of the bitwise inclusive OR of the masks shown in Table 16.15. Control Action Flags Flag Meaning XkbSA_LockNoLock If set, and the action type is XkbSA_LockControls, the server only disables controls. XkbSA_LockNoUnlock If set, and the action type is XkbSA_LockControls, the server only enables controls.
The XkbSA_SetControls action implements a key that enables a boolean control when pressed and disables it when released. The XkbSA_LockControls action is used to implement a key that toggles the state of a boolean control each time it is pressed and released. The XkbSA_LockNoLock and XkbSA_LockNoUnlock flags allow modifying the toggling behavior to only unlock or only lock the boolean control. The ctrls0, ctrls1, ctrls2, and ctrls3 fields represent the boolean controls in the enabled_ctrls field of the controls structure (see section 10.1). Xkb provides the following macros, to convert between the two formats: XkbActionCtrls unsigned int XkbActionCtrls XkbCtrlsAction act act action from which to extract controls XkbActionCtrls returns the ctrls fields of act converted to an unsigned int. XkbSAActionSetCtrls void XkbSAActionSetCtrls XkbCtrlsAction act unsigned int ctrls act action in which to set ctrls0-ctrls3 ctrls value to set in ctrls0-ctrls3 XkbSAActionSetCtrls sets the ctrls0 through ctrls3 fields of act from ctrls.
Actions for Generating Messages XkbMessageAction Actions associated with the XkbMessageAction structure generate XkbActionMessage events: #define XkbActionMessageLength 6 typedef struct _XkbMessageAction { unsigned char type; /* XkbSA_ActionMessage */ unsigned char flags; /* controls event generation via key presses and releases */ unsigned char message[XkbActionMessageLength]; /* message */ } XkbMessageAction; The type field of the XkbMessageAction structure should always be XkbSA_ActionMessage. The flags field is composed of the bitwise inclusive OR of the masks shown in Table 16.16. Message Action Flags Flag Meaning XkbSA_MessageOnPress If set, key press events generate an XkbActionMessage event that reports the keycode, event type, and contents of the message field. XkbSA_MessageOnRelease If set, key release events generate an XkbActionMessage event that reports the keycode, event type, and contents of the message field. XkbSA_MessageGenKeyEvent If set, key press and key release events generate KeyPress and KeyRelease events, regardless of whether they generate XkbActionMessage events.
The message field is an array of XkbActionMessageLength unsigned characters and may be set to anything the keymap designer wishes. Detecting Key Action Messages eventsXkbActionMessage XkbActionMessageEvent To receive XkbActionMessage events by calling either XkbSelectEvents or XkbSelectEventDetails (see section 4.3). To receive XkbActionMessage events under all possible conditions, use XkbSelectEvents and pass XkbActionMessageMask in both bits_to_change and values_for_bits. The XkbActionMessage event has no event details. However, you can call XkbSelectEventDetails using XkbActionMessage as the event_type and specifying XkbAllActionMessagesMask in bits_to_change and values_for_bits. This has the same effect as a call to XkbSelectEvents. The structure for the XkbActionMessage event is defined as follows: typedef struct _XkbActionMessage { int type; /* Xkb extension base event code */ unsigned long serial; /* X server serial number for event */ Bool send_event; /* True ⇒ synthetically generated */ Display * display; /* server connection where event generated */ Time time; /* server time when event generated */ int xkb_type; /* XkbActionMessage */ int device; /* Xkb device ID, will not be XkbUseCoreKbd */ KeyCode keycode; /* keycode of key triggering event */ Bool press; /* True ⇒ key press, False ⇒ release */ Bool key_event_follows;/* True ⇒ KeyPress/KeyRelease follows */ char message[XkbActionMessageLength+1]; /* message text */ } XkbActionMessageEvent; The keycode is the keycode of the key that was pressed or released. The press field specifies whether the event was the result of a key press or key release. The key_event_follows specifies whether a KeyPress (if press is True) or KeyRelease (if press is False) event is also sent to the client. As with all other Xkb events, XkbActionMessageEvents are delivered to all clients requesting them, regardless of the current keyboard focus. However, the KeyPress or KeyRelease event that conditionally follows an XkbActionMessageEvent is sent only to the client selected by the current keyboard focus. key_event_follows is True only for the client that is actually sent the following KeyPress or KeyRelease event. The message field is set to the message specified in the action and is guaranteed to be NULL -terminated; the Xkb extension forces a NULL into message [ XkbActionMessageLength ].
Actions for Generating a Different Keycode XkbRedirectKeyAction Actions associated with the XkbRedirectKeyAction structure generate KeyPress and KeyRelease events containing a keycode different from the key that was pressed or released: typedef struct _XkbRedirectKeyAction { unsigned char type; /* XkbSA_RedirectKey */ unsigned char new_key; /* keycode to be put in event */ unsigned char mods_mask; /* mask of real mods to be reset */ unsigned char mods; /* mask of real mods to take values from */ unsigned char vmods_mask0; /* first half of mask of virtual mods to be reset */ unsigned char vmods_mask1; /* other half of mask of virtual mods to be reset */ unsigned char vmods0; /* first half of mask of virtual mods to take values from */ unsigned char vmods1; /* other half of mask of virtual mods to take values from */ } XkbRedirectKeyAction; The type field for the XkbRedirectKeyAction structure should always be XkbSA_RedirectKey. Key presses cause a KeyPress event for the key specified by the new_key field instead of the actual key. The state reported in this event reports the current effective modifiers changed as follows: any real modifiers selected by the mods_mask field are set to corresponding values from the mods field. Any real modifiers bound to the virtual modifiers specified by the vmods_mask0 and vmods_mask1 fields are either set or cleared, depending on the corresponding values in the vmods0 and vmods1 fields. If the real and virtual modifier definitions specify conflicting values for a single modifier, the real modifier definition has priority. Key releases cause a KeyRelease event for the key specified by the new_key field instead of the actual key. The state for this event consists of the effective keyboard modifiers at the time of the release, changed as described previously. The XkbSA_RedirectKey action normally redirects to another key on the same device as the key that caused the event, unless that device does not belong to the input extension KeyClass, in which case this action causes an event on the core keyboard device. (The input extension categorizes devices by breaking them into classes. Keyboards, and other input devices with keys, are classified as KeyClass devices by the input extension.) The vmods_mask0 and vmods_mask1 fields actually represent one vmods_mask value, as described in . Xkb provides the following macros, to convert between the two formats: XkbSARedirectVModsMask unsigned int XkbSARedirectVModsMask XkbRedirectKeyAction act act action from which to extract vmods XkbSARedirectVModsMask returns the vmods_mask0 and vmods_mask1 fields of act converted to an unsigned int. XkbSARedirectSetVModsMask void XkbSARedirectSetVModsMask XkbRedirectKeyAction act unsigned int vm act action in which to set vmods vm new value for virtual modifier mask XkbSARedirectSetVModsMask sets the vmods_mask0 and vmods_mask1 fields of act from vm. Similarly, the vmods0 and vmods1 fields actually represent one vmods value, as described in . To convert between the two formats, Xkb provides the following convenience macros: XkbSARedirectVMods unsigned int XkbSARedirectVMods XkbRedirectKeyAction act act action from which to extract vmods XkbSARedirectVModsMask returns the vmods0 and vmods1 fields of act converted to an unsigned int. XkbSARedirectSetVMods void XkbSARedirectSetVMods XkbRedirectKeyAction act unsigned int v act action in which to set vmods v new value for virtual modifiers XkbSARedirectSetVModsMask sets the vmods0 and vmods1 of act from v. Actions for Generating DeviceButtonPress and DeviceButtonRelease XkbDeviceBtnAction Actions associated with XkbDeviceBtnAction structures generate DeviceButtonPress and DeviceButtonRelease events instead of normal KeyPress and KeyRelease events: typedef struct _XkbDeviceBtnAction { unsigned char type; /* XkbSA_DeviceBtn, XkbSA_LockDeviceBtn */ unsigned char flags; /* with type, specifies locking or unlocking */ unsigned char count; /* controls number of DeviceButtonPress and Release events */ unsigned char button; /* index of button on device */ unsigned char device; /* device ID of an X input extension device */ } XkbDeviceBtnAction; The type field can have any one of the values shown in Table 16.17. Device Button Action Types Type Effect XkbSA_DeviceBtn If the button specified by this action is logically down, the key press and corresponding release are ignored and have no effect. If the device or button specified by this action are illegal, this action behaves like XkbSA_NoAction. Otherwise, key presses cause one or more input extension device events instead of the usual key press event. If the count field is zero, a key press generates a single DeviceButtonPress event. If count is greater than zero, a key press event generates count pairs of DeviceButtonPress and DeviceButtonRelease events. If count is zero, a key release generates an input extension DeviceButtonRelease event that matches the event generated by the corresponding key press. If count is nonzero, a key release does not cause a DeviceButtonRelease event. Key releases never cause KeyRelease events. XkbSA_LockDeviceBtn If the device or button specified by this action are illegal, this action behaves like XkbSA_NoAction. Otherwise, if the specified button is not locked and the XkbSA_LockNoLock bit is not set in the flags field, a key press generates an input extension DeviceButtonPress event instead of a KeyPress event and locks the button. If the button is already locked or if XkbSA_LockNoLock bit is set in the flags field, the key press is ignored and has no effect. If the corresponding key press was ignored, and if the XkbSA_LockNoUnlock bit is not set in the flags field, a key release generates an input extension DeviceButtonRelease event instead of a KeyRelease event and unlocks the button. If the corresponding key press locked a button, the key release is ignored and has no effect.
The flags field is composed of the bitwise inclusive OR of the masks shown in Table 16.18. Device Button Action Flags Flag Meaning XkbSA_LockNoLock If set, and the action type is XkbSA_LockDeviceBtn, the server only unlocks the button. XkbSA_LockNoUnlock If set, and the action type is XkbSA_LockDeviceBtn, the server only locks the button.
Actions for Simulating Events from Device Valuators XkbDeviceValuatorAction A valuator valuator manipulates a range of values for some entity, like a mouse axis, a slider or a dial. Actions associated with XkbDeviceValuatorAction structures are used to simulate events from one or two input extension device valuators. typedef struct _XkbDeviceValuatorAction { unsigned char type; /* XkbSA_DeviceValuator */ unsigned char device; /* device ID */ unsigned char v1_what; /* determines how valuator is to behave for valuator 1 */ unsigned char v1_ndx; /* specifies a real valuator */ unsigned char v1_value; /* the value for valuator 1 */ unsigned char v2_what; /* determines how valuator is to behave for valuator 2 */ unsigned char v2_ndx; /* specifies a real valuator */ unsigned char v2_value; /* the value for valuator 1 */ } XkbDeviceValuatorAction; If device is illegal or if neither v1_ndx nor v2_ndx specifies a legal valuator, this action behaves like XkbSA_NoAction. The low four bits of v1_what and v2_what specify the corresponding scale value (denoted val<n>Scale in Table 16.17), if needed. The high four bits of v1_what and v2_what specify the operation to perform to set the values. The high four bits of v1_what and v2_what can have the values shown in Table 16.17; the use of val<n>Scale is shown in that table also. Device Valuator v<n>_what High Bits Values Value of high bits Effect XkbSA_IgnoreVal No action XkbSA_SetValMin v<n>_value is set to its minimum legal value. XkbSA_SetValCenter v<n>_valueis centered (to (max-min)/2). XkbSA_SetValMax v<n>_value is set to its maximum legal value. XkbSA_SetValRelative v<n>_value * (2 val<n>Scale) is added to v<n>_value. XkbSA_SetValAbsolute v<n>_value is set to (2 val<n>Scale).
Illegal values for XkbSA_SetValRelative or XkbSA_SetValAbsolute are clamped into range. Note that all of these possibilities are legal for absolute valuators. For relative valuators, only XkbSA_SetValRelative is permitted. Part of the input extension description of a device is the range of legal values for all absolute valuators, whence the maximum and minimum legal values shown in Table 16.17. The following two masks are provided as a convenience to select either portion of v1_what or v2_what: #define XkbSA_ValOpMask (0x70) #define XkbSA_ValScaleMask (0x07) v1_ndx and v2_ndx specify valuators that actually exists. For example, most mice have two valuators (x and y axes) so the only legal values for a mouse would be 0 and 1. For a dial box with eight dials, any value in the range 0..7 would be correct.
Obtaining Key Actions for Keys from the Server To update the actions (the key_acts array) for a subset of the keys in a keyboard description, use XkbGetKeyActions. XkbGetKeyActions Status XkbGetKeyActions Display *dpy unsigned int first unsigned int num XkbDescPtr xkb dpy connection to X server first keycode of first key of interest num number of keys desired xkb pointer to keyboard description where result is stored XkbGetKeyActions sends a request to the server to obtain the actions for num keys on the keyboard starting with key first. It waits for a reply and returns the actions in the server->key_acts field of xkb. If successful, XkbGetKeyActions returns Success. The xkb parameter must be a pointer to a valid Xkb keyboard description. If the server map in the xkb parameter has not been allocated, XkbGetKeyActions allocates and initializes it before obtaining the actions. If the server does not have a compatible version of Xkb, or the Xkb extension has not been properly initialized, XkbGetKeyActions returns BadAccess. If num is less than 1 or greater than XkbMaxKeyCount, XkbGetKeyActions returns BadValue. If any allocation errors occur, XkbGetKeyActions returns BadAlloc. Changing the Number of Actions Bound to a Key To change the number of actions bound to a key, use XkbResizeKeyActions. XkbResizeKeyActions XkbAction *XkbResizeKeyActions XkbDescRec *xkb int key int needed xkb keyboard description to change key keycode of key to change needed new number of actions required The xkb parameter points to the keyboard description containing the key whose number of actions is to be changed. The key parameter is the keycode of the key to change, and needed specifies the new number of actions required for the key. XkbResizeKeyActions reserves the space needed for the actions and returns a pointer to the beginning of the new array that holds the actions. It can change the acts, num_acts, and size_acts fields of xkb->server if it is necessary to reallocate the acts array. If needed is greater than the current number of keysyms for the key, XkbResizeKeyActions initializes all new actions in the array to NoAction. Because the number of actions needed by a key is normally computed as width * number of groups, and XkbResizeKeyActions does not modify either the width or number of groups for the key, a discrepancy exists on return from XkbResizeKeyActions between the space allocated for the actions and the number required. The unused entries in the list of actions returned by XkbResizeKeyActions are not preserved across future calls to any of the map editing functions, so you must update the key actions (which updates the width and number of groups for the key) before calling another allocator function. A call to XkbChangeTypesOfKey updates these. If any allocation errors occur while resizing the number of actions bound to the key, XkbResizeKeyActions returns NULL. A change to the number of actions bound to a key should be accompanied by a change in the number of symbols bound to a key. Refer to section 15.3.7 for more information on changing the number of symbols bound to a key.
Key Behavior Key behavior refers to the demeanor of a key. For example, the expected behavior of the CapsLock key is that it logically locks when pressed, and then logically unlocks when pressed again. Radio Groups Keys that belong to the same radio group have the XkbKB_RadioGroup type in the type field and the radio group index specified in the data field in the XkbBehavior structure. If the radio group has a name in the XkbNamesRec structure, the radio group index is the index into the radio_group array in the XkbNamesRec structure. A radio group key when pressed stays logically down until another key in the radio group is pressed, when the first key becomes logically up and the new key becomes logically down. Setting the XkbKB_RGAllowNone bit in the behavior for all of the keys of the radio group means that pressing the logically down member of the radio group causes it to logically release, in which case none of the keys of the radio group would be logically down. If XkbKB_RGAllowNone is not set, there is no way to release the logically down member of the group. The low five bits of the data field of the XkbBehavior structure are the group number, the high three bits are flags. The only flag currently defined is: #define XkbKB_RGAllowNone 0x80 The XkbBehavior Structure XkbBehavior The behaviors field of the server map is an array of XkbBehavior structures, indexed by keycode, and contains the behavior for each key. The XkbBehavior structure is defined as follows: typedef struct _XkbBehavior { unsigned char type; /* behavior type + optional XkbKB_Permanent bit */ unsigned char data; } XkbBehavior; The type field specifies the Xkb behavior, and the value of the data field depends on the type. Xkb supports the key behaviors shown in Table 16.20. Key Behaviors Type Effect XkbKB_Default Press and release events are processed normally. The data field is unused. XkbKB_Lock If a key is logically up (that is, the corresponding bit of the core key map is cleared) when it is pressed, the key press is processed normally and the corresponding release is ignored. If the key is logically down when pressed, the key press is ignored but the corresponding release is processed normally. The data field is unused. XkbKB_RadioGroup If another member of the radio group is logically down (all members of the radio group have the same index, specified in data) when a key is pressed, the server synthesizes a key release for the member that is logically down and then processes the new key press event normally. If the key itself is logically down when pressed, the key press event is ignored, but the processing of the corresponding key release depends on the value of the XkbKB_RGAllowNone bit in flags. If it is set, the key release is processed normally; otherwise, the key release is also ignored. All other key release events are ignored. XkbKB_Overlay1 If the Overlay1 control is enabled (see section 10.4), data is interpreted as a keycode, and events from this key are reported as if they came from data’s keycode. Otherwise, press and release events are processed normally. XkbKB_Overlay2 If the Overlay2 control is enabled (see section 10.4), data is interpreted as a keycode, and events from this key are reported as if they came from data’s keycode. Otherwise, press and release events are processed normally.
Xkb also provides the mask, XkbKB_Permanent to specify whether the key behavior type should be simulated by Xkb or whether the key behavior describes an unalterable physical, electrical, or software aspect of the keyboard. If the XkbKB_Permanent bit is not set in the type field, Xkb simulates the behavior in software. Otherwise, Xkb relies upon the keyboard to implement the behavior.
Obtaining Key Behaviors for Keys from the Server To obtain the behaviors (the behaviors array) for a subset of the keys in a keyboard description from the server, use XkbGetKeyBehaviors: XkbGetKeyBehaviors Status XkbGetKeyBehaviors Display *dpy unsigned int first unsigned int num XkbDescPtr xkb dpy connection to server first keycode of first key to get num number of keys for which behaviors are desired xkb Xkb description to contain the result XkbGetKeyBehaviors sends a request to the server to obtain the behaviors for num keys on the keyboard starting with the key whose keycode is first. It waits for a reply and returns the behaviors in the server->behaviors field of xkb. If successful, XkbGetKeyBehaviors returns Success. If the server map in the xkb parameter has not been allocated, XkbGetKeyBehaviors allocates and initializes it before obtaining the actions. If the server does not have a compatible version of Xkb, or the Xkb extension has not been properly initialized, XkbGetKeyBehaviors returns BadAccess. If num is less than 1 or greater than XkbMaxKeyCount, XkbGetKeyBehaviors returns BadValue. If any allocation errors occur, XkbGetKeyBehaviors returns BadAlloc.
Explicit Components—Avoiding Automatic Remapping by the Server Whenever a client remaps the keyboard using core protocol requests, Xkb examines the map to determine likely default values for the components that cannot be specified using the core protocol (see section 17.1.2 for more information on how Xkb chooses the default values). This automatic remapping might replace definitions explicitly requested by an application, so the Xkb keyboard description defines an explicit components mask for each key. Any aspects of the automatic remapping listed in the explicit components mask for a key are not changed by the automatic keyboard mapping. The explicit components masks are held in the explicit field of the server map, which is an array indexed by keycode. Each entry in this array is a mask that is a bitwise inclusive OR of the values shown in Table 16.21. Explicit Component Masks Bit in Explicit Mask Value Protects Against ExplicitKeyType1 (1<<0) Automatic determination of the key type associated with Group1. ExplicitKeyType2 (1<<1) Automatic determination of the key type associated with Group2. ExplicitKeyType3 (1<<2) Automatic determination of the key type associated with Group3. ExplicitKeyType4 (1<<3) Automatic determination of the key type associated with Group4. ExplicitInterpret (1<<4) Application of any of the fields of a symbol interpretation to the key in question. ExplicitAutoRepeat (1<<5) Automatic determination of auto-repeat status for the key, as specified in a symbol interpretation. ExplicitBehavior (1<<6) Automatic assignment of the XkbKB_Lock behavior to the key, if the XkbSI_LockingKey flag is set in a symbol interpretation. ExplicitVModMap (1<<7) Automatic determination of the virtual modifier map for the key based on the actions assigned to the key and the symbol interpretations that match the key.
Obtaining Explicit Components for Keys from the Server To obtain the explicit components (the explicit array) for a subset of the keys in a keyboard description, use XkbGetKeyExplicitComponents. XkbGetKeyExplicitComponents Status XkbGetKeyExplicitComponents Display *dpy unsigned int first unsigned int num XkbDescPtr xkb dpy connection to server first keycode of first key to fetch num number of keys for which to get explicit info xkb Xkb description in which to put results XkbGetKeyExplicitComponents sends a request to the server to obtain the explicit components for num keys on the keyboard starting with key first. It waits for a reply and returns the explicit components in the server->explicit array of xkb. If successful, XkbGetKeyExplicitComponents returns Success. The xkb parameter must be a pointer to a valid Xkb keyboard description. If the server map in the xkb parameter has not been allocated, XkbGetKeyExplicitComponents allocates and initializes it before obtaining the actions. If the server does not have a compatible version of Xkb, or the Xkb extension has not been properly initialized, XkbGetKeyExplicitComponents returns BadMatch. If num is less than 1 or greater than XkbMaxKeyCount, XkbGetKeyExplicitComponents returns BadValue. If any allocation errors occur, XkbGetKeyExplicitComponents returns BadAlloc.
Virtual Modifier Mapping The vmods member of the server map is a fixed-length array containing XkbNumVirtualMods entries. Each entry corresponds to a virtual modifier and provides the binding of the virtual modifier to the real modifier bits. Each entry in the vmods array is a bitwise inclusive OR of the legal modifier masks: ShiftMask LockMask ControlMask Mod1Mask Mod2Mask Mod3Mask Mod4Mask Mod5Mask The vmodmap member of the server map is similar to the modmap array of the client map (see section 15.4), but is used to define the virtual modifier mapping for each key. Like the modmap member, it is indexed by keycode, and each entry is a mask representing the virtual modifiers bound to the corresponding key: Each of the bits in a vmodmap entry represents an index into the vmods member. That is, bit 0 of a vmodmap entry refers to index 0 of the vmods array, bit 1 refers to index 1, and so on. If a bit is set in the vmodmap entry for a key, that key is bound to the corresponding virtual modifier in the vmods array. The vmodmap and vmods members of the server map are the master virtual modifier definitions. Xkb automatically propagates any changes to these fields to all other fields that use virtual modifier mappings. The overall relationship of fields dealing with virtual modifiers in an Xkb keyboard description are shown in Figure 16.2.
Virtual Modifier Relationships
Obtaining Virtual Modifier Bindings from the Server To obtain a subset of the virtual modifier bindings (the vmods array) in a keyboard description, use XkbGetVirtualMods: XkbGetVirtualMods Status XkbGetVirtualMods Display *dpy unsigned int which XkbDescPtr xkb dpy connection to server which mask indicating virtual modifier bindings to get xkb Xkb description where results will be placed XkbGetVirtualMods sends a request to the server to obtain the vmods entries for the virtual modifiers specified in the mask, which, and waits for a reply. See section 7.1 for a description of how to determine the virtual modifier mask. For each bit set in which, XkbGetVirtualMods updates the corresponding virtual modifier definition in the server->vmods array of xkb. The xkb parameter must be a pointer to a valid Xkb keyboard description. If successful, XkbGetVirtualMods returns Success. If the server map has not been allocated in the xkb parameter, XkbGetVirtualMods allocates and initializes it before obtaining the virtual modifier bindings. If the server does not have a compatible version of Xkb, or the Xkb extension has not been properly initialized, XkbGetVirtualMods returns BadMatch. Any errors in allocation cause XkbGetVirtualMods to return BadAlloc. Obtaining Per-Key Virtual Modifier Mappings from the Server To obtain the virtual modifier map (the vmodmap array) for a subset of the keys in a keyboard description, use XkbGetKeyVirtualModMap: XkbGetKeyVirtualModMap Status XkbGetKeyVirtualModMap Display *dpy unsigned int first unsigned int num XkbDescPtr xkb dpy connection to server first keycode of first key to fetch num # keys for which virtual mod maps are desired xkb Xkb description where results will be placed XkbGetKeyVirtualModmap sends a request to the server to obtain the virtual modifier mappings for num keys on the keyboard starting with key first. It waits for a reply and returns the virtual modifier mappings in the server->vmodmap array of xkb. If successful, XkbGetKeyVirtualModMap returns Success. The xkb parameter must be a pointer to a valid Xkb keyboard description If the server map in the xkb parameter has not been allocated, XkbGetKeyVirtualModMap allocates and initializes it before obtaining the virtual modifier mappings. If the server does not have a compatible version of Xkb, or the Xkb extension has not been properly initialized, XkbGetKeyVirtualModMap returns BadMatch. If num is less than 1 or greater than XkbMaxKeyCount, XkbGetKeyVirtualModMap returns BadValue. If any allocation errors occur, XkbGetKeyVirtualModMap returns BadAlloc.
entry> XkbGetKeyExplicitComponents sends a request to the server to obtain the explicit components for num keys on the keyboard starting with key first. It waits for a reply and returns the explicit components in the server->explicit array of xkb. If successful, XkbGetKeyExplicitComponents returns Success Glossary Allocator Xkb provides functions, known as allocators, to create and initialize Xkb data structures. Audible Bell An audible bell is the sound generated by whatever bell is associated with the keyboard or input extension device, as opposed to any other audible sound generated elsewhere in the system. Autoreset Controls The autoreset controls configure the boolean controls to automatically be enabled or disabled at the time a program exits. Base Group The group in effect as a result of all actions other than a previous lock or latch request; the base group is transient. For example, the user pressing and holding a group shift key that shifts to Group2 would result in the base group being group 2 at that point in time. Initially, base group is always Group1. Base Modifiers Modifiers that are turned on as a result of some actions other than previous lock or latch requests; base modifiers are transient. For example, the user pressing and holding a key bound to the Shift modifier would result in Shift being a base modifier at that point in time. Base Event Code A number assigned by the X server at run time that is assigned to the extension to identify events from that extension. Base State The base group and base modifiers represent keys that are physically or logically down; these constitute the base state. Boolean Controls Global keyboard controls that may be selectively enabled and disabled under program control and that may be automatically set to an on or off condition upon client program exit. Canonical Key Types The canonical key types are predefined key types that describe the types of keys available on most keyboards. The definitions for the canonical key types are held in the first XkbNumRequiredTypes entries of the types field of the client map and are indexed using the following constants: XkbOneLevelIndex XkbTwoLevelIndex XkbAlphabeticIndex XkbKeypadIndex Client Map The key mapping information needed to convert arbitrary keycodes to symbols. Compat Name The compat name is a string that provides some information about the rules used to bind actions to keys that are changed using core protocol requests. Compatibility State When an Xkb-extended X server connects to an Xkb-unaware client, the compatibility state remaps the keyboard group into a core modifier whenever possible. Compatibility Grab State The grab state that results from applying the compatibility map to the Xkb grab state. Compatibility Map The definition of how to map core protocol keyboard state to Xkb keyboard state. Component Expression An expression used to describe server keyboard database components to be loaded. It describes the order in which the components should be loaded and the rules by which duplicate attributes should be resolved. Compose Processing The process of mapping a series of keysyms to a string is known as compose processing. Consumed Modifier Xkb normally consumes modifiers in determining the appropriate symbol for an event, that is, the modifiers are not considered during any of the later stages of event processing. For those rare occasions when a modifier should be considered despite having been used to look up a symbol, key types include an optional preserve field. Core Event An event created from the core X server. Detectable Auto-Repeat Detectable auto-repeat allows a client to detect an auto-repeating key. If a client requests and the server supports detectable auto-repeat, Xkb generates KeyRelease events only when the key is physically released. Thus the client receives a number of KeyPress events for that key without intervening KeyRelease events until the key is finally released, when a KeyRelease event is received. Effective Group The effective group is the arithmetic sum of the locked, latched, and base groups. The effective keyboard group is always brought back into range depending on the value of the GroupsWrap control for the keyboard. If an event occurs with an effective group that is legal for the keyboard as a whole, but not for the key in question, the group for that event only is normalized using the algorithm specified by the group_info member of the key symbol map (XkbSymMapRec). Effective Mask An Xkb modifier definition consists of a set of bit masks corresponding to the eight real modifiers; a similar set of bitmasks corresponding to the 16 named virtual modifiers; and an effective mask. The effective mask represents the set of all real modifiers that can logically be set either by setting any of the real modifiers or by setting any of the virtual modifiers in the definition. Effective Modifier The effective modifiers are the bitwise union of the base, latched and locked modifiers. Extension Device Any keyboard or other input device recognized by the X input extension. Global Keyboard Controls Controls that affect the way Xkb generates key events. The controls affect all keys, as opposed to per-key controls that are for a single key. Global controls include RepeatKeys Control DetectableAuto-repeat SlowKeys BounceKeys StickyKeys MouseKeys MouseKeysAccel AccessXKeys AccessXTimeout AccessXFeedback Overlay1 Overlay2 EnabledControls Grab State The grab state is the state used when matching events to passive grabs. It consists of the grab group and the grab modifiers. Group See Keysym Group Group Index A number used as the internal representation for a group number. Group1 through Group 4 have indices of 0 through 3. Groups Wrap Control If a group index exceeds the maximum number of groups permitted for the specified keyboard, it is wrapped or truncated back into range as specified by the global GroupsWrap control. GroupsWrap can have the following values: WrapIntoRange ClampIntoRange RedirectIntoRange Key Type An attribute of a key that identifies which modifiers affect the shift level of a key and the number of groups on the key. Key Width The maximum number of shift levels in any group for the key type associated with a key. Keysym Group A keysym group is a logical state of the keyboard providing access to a collection of characters. A group usually contains a set of characters that logically belong together and that may be arranged on several shift levels within that group. For example, Group1 could be the English alphabet, and Group2 could be Greek. Xkb supports up to four different groups for an input device or keyboard. Groups are in the range 1–4 (Group1–Group4), and are often referred to as G1–G4 and indexed as 0–3. Indicator An indicator is a feedback mechanism such as an LED on an input device. Using Xkb, a client application can determine the names of the various indicators, determine and control the way that the individual indicators should be updated to reflect keyboard changes, and determine which of the 32 keyboard indicators reported by the protocol are actually present on the keyboard. Indicator Feedback An indicator feedback describes the state of a bank of up to 32 lights. It has a mask where each bit corresponds to a light and an associated value mask that specifies which lights are on or off. Indicator Map An indicator has its own set of attributes that specify whether clients can explicitly set its state and whether it tracks the keyboard state. The indicator map is the collection of these attributes for each indicator and is held in the maps array, which is an array of XkbIndicatorRec structures. Input Extension An extension to the core X protocol that allows an X server to support multiple keyboards, as well as other input devices, in addition to the core X keyboard and pointer. Other types of devices supported by the input extension include, but are not limited to: mice, tablets, touchscreens, barcode readers, button boxes, trackballs, identifier devices, data gloves, and eye trackers. Key Action A key action consists of an operator and some optional data. Once the server has applied the global controls and per-key behavior and has decided to process a key event, it applies key actions to determine the effects of the key on the internal state of the server. Xkb supports actions that do the following: Change base, latched, or locked modifiers or group Move the core pointer or simulate core pointer button events Change most aspects of keyboard behavior Terminate or suspend the server Send a message to interested clients Simulate events on other keys Key Alias A key alias is a symbolic name for a specific physical key. Key aliases allow the keyboard layout designer to assign multiple key names to a single key. This allows the keyboard layout designer to refer to keys using either their position or their function. Key aliases can be specified both in the symbolic names component and in the keyboard geometry. Both sets of aliases are always valid, but key alias definitions in the keyboard geometry have priority; if both symbolic names and geometry include aliases, you should consider the definitions from the geometry before considering the definitions from the symbolic names section. Key Behavior The behaviors field of the server map is an array of XkbBehavior, indexed by keycode, and contains the behavior for each key. The X server uses key behavior to determine whether to process or filter out any given key event; key behavior is independent of keyboard modifier or group state. Each key has exactly one behavior. Key behaviors include: XkbKB_Default XkbKB_Lock XkbKB_RadioGroup XkbKB_Overlay1 XkbKB_Overlay2 Key Symbol Map A key symbol map describes the symbols bound to a key and the rules to be used to interpret those symbols. It is an array of XkbSymMapRec structures indexed by keycode. Key Type Key types are used to determine the shift level of a key given the current state of the keyboard. There is one key type for each group for a key. Key types are defined using the XkbKeyTypeRec and XkbKTMapEntryRec structures. Xkb allows up to XkbMaxKeyTypes (255) key types to be defined, but requires at least XkbNumRequiredTypes (4) predefined types to be in a key map. Keyboard Bells The sound the default bell makes when rung is the system bell or the default keyboard bell. Some input devices may have more than one bell, identified by bell_class and bell_id. Keyboard Components There are five types of components stored in the X server database of keyboard components. They correspond to the >symbols, geometry, keycodes, compat, and types symbolic names associated with a keyboard. Keyboard Feedback A keyboard feedback includes the following: Keyclick volume Bell volume Bell pitch Bell duration Global auto-repeat Per key auto-repeat 32 LEDs Key Width, Key Type Width The maximum number of shift levels for a type is referred to as the width of a key type. Keyboard Geometry Keyboard geometry describes the physical appearance of the keyboard, including the shape, location, and color of all keyboard keys or other visible keyboard components such as indicators and is stored in a XkbGeometryRec structure. The information contained in a keyboard geometry is sufficient to allow a client program to draw an accurate two-dimensional image of the keyboard. Keyboard Geometry Name The keyboard geometry name describes the physical location, size, and shape of the various keys on the keyboard and is part of the XkbNamesRec structure. Keyboard State Keyboard state encompasses all of the transitory information necessary to map a physical key press or release to an appropriate event. Keycode A numeric value returned to the X server when a key on a keyboard is pressed or released, indicating which key is being modulated. Keycode numbers are in the range 1 <= keycode <= max, where max is the number of physical keys on the device. Keycode Name The keycode name describes the range and meaning of the keycodes returned by the keyboard and is part of the XkbNamesRec structure. Latched Group A latched group is a group index that is combined with the base and locked group to form the effective group. It applies only to the next key event that does not change the keyboard state. The latched group can be changed by keyboard activity or via Xkb extension library functions. Latched Modifier Latched modifiers are the set of modifiers that are combined with the base modifiers and the locked modifiers to form the effective modifiers. It applies only to the next key event that does not change the keyboard state. LED A light emitting diode. However, for the purposes of the X keyboard extension specification, a LED is any form of visual two-state indicator that is either on or off. Locked Group A locked group is a group index that is combined with the base and latched group to form the effective group. When a group is locked, it supersedes any previous locked group and remains the locked group for all future key events, until a new group is locked. The locked group can be changed by keyboard activity or via Xkb extension library functions. Locked Modifiers Locked modifiers are the set of modifiers that are combined with the base modifiers and the latched modifiers to form the effective modifiers. A locked modifier applies to all future key events until it is explicitly unlocked. Lookup State The lookup state is composed of the lookup group and the lookup modifiers, and it is the state an Xkb-capable or Xkb-aware client should use to map a keycode to a keysym. Modifier A modifier is a logical condition that is either set or unset. The modifiers control the Shift Level selected when a key event occurs. Xkb supports the core protocol eight modifiers (Shift, Lock, Control, and Mod1 through Mod5), called the real modifiers. In addition, Xkb extends modifier flexibility by providing a set of sixteen named virtual modifiers, each of which can be bound to any set of the eight real modifiers. Modifier Key A modifier key is a key whose operation has no immediate effect, but that, for as long as it is held down, modifies the effect of other keys. A modifier key may be, for example, a shift key or a control key. Modifier Definition An Xkb modifier definition, held in an XkbModsRec, consists of a set of real modifiers, a set of virtual modifiers, and an effective mask. The mask is the union of the real modifiers and the set of real modifiers to which the virtual modifiers map; the mask cannot be explicitly changed. Nonkeyboard Extension Device An input extension device that is not a keyboard. Other types of devices supported by the input extension include, but are not limited to: mice, tablets, touchscreens, barcode readers, button boxes, trackballs, identifier devices, data gloves, and eye trackers. Outlines An outline is a list of one or more points that describes a single closed polygon, used in the geometry specification for a keyboard. Physical Indicator Mask The physical indicator mask is a field in the XkbIndicatorRec that indicates which indicators are bound to physical LEDs on the keyboard; if a bit is set in phys_indicators, then the associated indicator has a physical LED associated with it. This field is necessary because some indicators may not have corresponding physical LEDs on the keyboard. Physical Symbol Keyboard Name The symbols keyboard name identifies the symbols logically bound to the keys. The symbols name is a human or application-readable description of the intended locale or usage of the keyboard with these symbols. The phys_symbols keyboard name, on the other hand, identifies the symbols actually engraved on the keyboard. Preserved Modifier Xkb normally consumes modifiers in determining the appropriate symbol for an event, that is, the modifiers are not considered during any of the later stages of event processing. For those rare occasions when a modifier should be considered despite having been used to look up a symbol, key types include an optional preserve field. If a modifier is present in the preserve list, it is a preserved modifier. Radio Group A radio group is a set of keys whose behavior simulates a set of radio buttons. Once a key in a radio group is pressed, it stays logically depressed until another key in the group is pressed, at which point the previously depressed key is logically released. Consequently, at most one key in a radio group can be logically depressed at one time. Real Modifier Xkb supports the eight core protocol modifiers (Shift, Lock, Control, and Mod1 through Mod5); these are called the real modifiers, as opposed to the set of sixteen named virtual modifiers that can be bound to any set of the eight real modifiers. Server Internal Modifiers Modifiers that the server uses to determine the appropriate symbol for an event; internal modifiers are normally consumed by the server. Shift Level One of several states (normally 2 or 3) governing which graphic character is produced when a key is actuated. Symbol Keyboard Name The symbols keyboard name identifies the symbols logically bound to the keys. The symbols name is a human or application-readable description of the intended locale or usage of the keyboard with these symbols. The phys_symbols keyboard name, on the other hand, identifies the symbols actually engraved on the keyboard. Symbolic Name Xkb supports symbolic names for most components of the keyboard extension. Most of these symbolic names are grouped into the names component of the keyboard description. State Field The portion of a client-side core protocol event that holds the modifier, group, and button state information pertaining to the event. Types Name The types name provides some information about the set of key types that can be associated with the keyboard. In addition, each key type can have a name, and each shift level of a type can have a name. Valuator A valuator reports a range of values for some entity, like a mouse axis, a slider, or a dial. Virtual Modifier Xkb provides a set of sixteen named virtual modifiers that can be bound to any set of the eight real modifiers. Each virtual modifier can be bound to any set of the real modifiers (Shift, Lock, Control, and Mod1Mod5). Virtual Modifier Mapping Xkb maintains a virtual modifier mapping, which lists the virtual modifiers associated with each key. Xkb-aware Client A client application that initializes Xkb extension and is consequently bound to an Xlib that includes the Xkb extension. Xkb-capable Client A client application that makes no Xkb extension Xlib calls but is bound to an Xlib that includes the Xkb extension. Xkb-unaware Client A client application that makes no Xkb extension Xlib calls and is bound to an Xlib that does not include the Xkb extension. Latched Group A latched group is a group index that is combined with the base and locked group to form the effective group. It applies only to the next key event that does not change the keyboard state. The latched group can be changed by keyboard activity or via Xkb extension library functions. Latched Modifier image/svg+xml actual keysurface approximateoutline primaryoutline detailedoutline boundingbox outline array libX11-1.6.3/specs/XKB/XKBlib-14.svg000064401431060000012000001067031247741723500167040ustar00alancstaff00002660200006 image/svg+xml Core Symbols A a L1 L2 L1 L2 G1 G2 Xkb Symbols A a L1 L2 G1 G2 Symbols a G1L1 = A G1L2 = G2L1 = G2L2 = Physical Key Shift Level Group a A 1.05273 -0.4603,0.48763 -0.94565,0.84538 -1.45606,1.07324 -0.libX11-1.6.3/specs/Makefile.in000064401431060000012000000514101247741725500162430ustar00alancstaff00002660200006# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. # # 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: # # The above copyright notice and this permission notice (including the next # paragraph) shall be included in all copies or substantial portions of the # Software. # # THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. # VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = specs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_define_dir.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h \ $(top_builddir)/include/X11/XlibConf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASE_CFLAGS = @BASE_CFLAGS@ BIGFONT_CFLAGS = @BIGFONT_CFLAGS@ BIGFONT_LIBS = @BIGFONT_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHANGELOG_CMD = @CHANGELOG_CMD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ FOP = @FOP@ GREP = @GREP@ I18N_MODULE_LIBS = @I18N_MODULE_LIBS@ INSTALL = @INSTALL@ INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ KEYSYMDEFS = @KEYSYMDEFS@ LAUNCHD = @LAUNCHD@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LINT = @LINT@ LINTLIB = @LINTLIB@ LINT_FLAGS = @LINT_FLAGS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MALLOC_ZERO_CFLAGS = @MALLOC_ZERO_CFLAGS@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_SUBSTS = @MAN_SUBSTS@ MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RAWCPP = @RAWCPP@ RAWCPPFLAGS = @RAWCPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRICT_CFLAGS = @STRICT_CFLAGS@ STRIP = @STRIP@ STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ TRADITIONALCPPFLAGS = @TRADITIONALCPPFLAGS@ VERSION = @VERSION@ WCHAR32 = @WCHAR32@ X11_CFLAGS = @X11_CFLAGS@ X11_DATADIR = @X11_DATADIR@ X11_EXTRA_DEPS = @X11_EXTRA_DEPS@ X11_LIBDIR = @X11_LIBDIR@ X11_LIBS = @X11_LIBS@ X11_LOCALEDATADIR = @X11_LOCALEDATADIR@ X11_LOCALEDIR = @X11_LOCALEDIR@ X11_LOCALELIBDIR = @X11_LOCALELIBDIR@ XERRORDB = @XERRORDB@ XKBPROTO_REQUIRES = @XKBPROTO_REQUIRES@ XKEYSYMDB = @XKEYSYMDB@ XLOCALEDATADIR = @XLOCALEDATADIR@ XLOCALEDIR = @XLOCALEDIR@ XLOCALELIBDIR = @XLOCALELIBDIR@ XMALLOC_ZERO_CFLAGS = @XMALLOC_ZERO_CFLAGS@ XMLTO = @XMLTO@ XORG_MAN_PAGE = @XORG_MAN_PAGE@ XORG_SGML_PATH = @XORG_SGML_PATH@ XSLTPROC = @XSLTPROC@ XSL_STYLESHEET = @XSL_STYLESHEET@ XTHREADLIB = @XTHREADLIB@ XTHREAD_CFLAGS = @XTHREAD_CFLAGS@ XTMALLOC_ZERO_CFLAGS = @XTMALLOC_ZERO_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ locales = @locales@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = libX11 i18n XIM XKB all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign specs/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign specs/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: dor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendorlibX11-1.6.3/specs/libX11/CH03.xml000064401431060000012000003507411247741723500164240ustar00alancstaff00002660200006 Window Functions Visual Types Visual Type On some display hardware, it may be possible to deal with color resources in more than one way. For example, you may be able to deal with a screen of either 12-bit depth with arbitrary mapping of pixel to color (pseudo-color) or 24-bit depth with 8 bits of the pixel dedicated to each of red, green, and blue. These different ways of dealing with the visual aspects of the screen are called visuals. For each screen of the display, there may be a list of valid visual types supported at different depths of the screen. Because default windows and visual types are defined for each screen, most simple applications need not deal with this complexity. Xlib provides macros and functions that return the default root window, the default depth of the default root window, and the default visual type (see sections 2.2.1 and 16.7). Xlib uses an opaque Visual Visual structure that contains information about the possible color mapping. The visual utility functions (see section 16.7) use an XVisualInfo structure to return this information to an application. The members of this structure pertinent to this discussion are class, red_mask, green_mask, blue_mask, bits_per_rgb, and colormap_size. The class member specifies one of the possible visual classes of the screen and can be Visual ClassesStaticGray Visual ClassesStaticColor Visual ClassesTrueColor Visual ClassesStaticColor Visual ClassesGrayScale Visual ClassesPseudoColor StaticGray, StaticColor, TrueColor, GrayScale, PseudoColor, or DirectColor. The following concepts may serve to make the explanation of visual types clearer. The screen can be color or grayscale, can have a colormap that is writable or read-only, and can also have a colormap whose indices are decomposed into separate RGB pieces, provided one is not on a grayscale screen. This leads to the following diagram: Color Gray-Scale R/O R/W R/O R/W ---------------------------------------------- Undecomposed Static Pseudo Static Gray Colormap Color Color Gray Scale Decomposed True Direct Colormap Color Color ---------------------------------------------- Conceptually, as each pixel is read out of video memory for display on the screen, it goes through a look-up stage by indexing into a colormap. Colormaps can be manipulated arbitrarily on some hardware, in limited ways on other hardware, and not at all on other hardware. The visual types affect the colormap and the RGB values in the following ways: For PseudoColor, a pixel value indexes a colormap to produce independent RGB values, and the RGB values can be changed dynamically. GrayScale is treated the same way as PseudoColor except that the primary that drives the screen is undefined. Thus, the client should always store the same value for red, green, and blue in the colormaps. For DirectColor, a pixel value is decomposed into separate RGB subfields, and each subfield separately indexes the colormap for the corresponding value. The RGB values can be changed dynamically. TrueColor is treated the same way as DirectColor except that the colormap has predefined, read-only RGB values. These RGB values are server dependent but provide linear or near-linear ramps in each primary. StaticColor is treated the same way as PseudoColor except that the colormap has predefined, read-only, server-dependent RGB values. StaticGray is treated the same way as StaticColor except that the RGB values are equal for any single pixel value, thus resulting in shades of gray. StaticGray with a two-entry colormap can be thought of as monochrome. The red_mask, green_mask, and blue_mask members are only defined for DirectColor and TrueColor. Each has one contiguous set of bits with no intersections. The bits_per_rgb member specifies the log base 2 of the number of distinct color values (individually) of red, green, and blue. Actual RGB values are unsigned 16-bit numbers. The colormap_size member defines the number of available colormap entries in a newly created colormap. For DirectColor and TrueColor, this is the size of an individual pixel subfield. To obtain the visual ID from a Visual, use . XVisualIDFromVisual VisualID XVisualIDFromVisual Visual *visual visual Specifies the visual type. The function returns the visual ID for the specified visual type. Window Attributes Window Windowattributes All InputOutput windows have a border width of zero or more pixels, an optional background, an event suppression mask (which suppresses propagation of events from children), and a property list (see section 4.3). The window border and background can be a solid color or a pattern, called a tile. All windows except the root have a parent and are clipped by their parent. If a window is stacked on top of another window, it obscures that other window for the purpose of input. If a window has a background (almost all do), it obscures the other window for purposes of output. Attempts to output to the obscured area do nothing, and no input events (for example, pointer motion) are generated for the obscured area. Windows also have associated property lists (see section 4.3). Both InputOutput and InputOnly windows have the following common attributes, which are the only attributes of an InputOnly window: win-gravity event-mask do-not-propagate-mask override-redirect cursor If you specify any other attributes for an InputOnly window, a BadMatch error results. InputOnly windows are used for controlling input events in situations where InputOutput windows are unnecessary. InputOnly windows are invisible; can only be used to control such things as cursors, input event generation, and grabbing; and cannot be used in any graphics requests. Note that InputOnly windows cannot have InputOutput windows as inferiors. Windows have borders of a programmable width and pattern as well as a background pattern or tile. Tilepixmaps Pixel values can be used for solid colors. Resource IDsfreeing Freeingresources The background and border pixmaps can be destroyed immediately after creating the window if no further explicit references to them are to be made. Tilemode The pattern can either be relative to the parent or absolute. If ParentRelative, the parent's background is used. When windows are first created, they are not visible (not mapped) on the screen. Any output to a window that is not visible on the screen and that does not have backing store will be discarded. Windowmapping An application may wish to create a window long before it is mapped to the screen. When a window is eventually mapped to the screen (using ), XMapWindow the X server generates an Expose event for the window if backing store has not been maintained. A window manager can override your choice of size, border width, and position for a top-level window. Your program must be prepared to use the actual size and position of the top window. It is not acceptable for a client application to resize itself unless in direct response to a human command to do so. Instead, either your program should use the space given to it, or if the space is too small for any useful work, your program might ask the user to resize the window. The border of your top-level window is considered fair game for window managers. To set an attribute of a window, set the appropriate member of the XSetWindowAttributes structure and OR in the corresponding value bitmask in your subsequent calls to and , or use one of the other convenience functions that set the appropriate attribute. The symbols for the value mask bits and the XSetWindowAttributes structure are: /* Window attribute value mask bits */ /* Window attribute value mask bits */ #define CWBackPixmap (1L<<0) #define CWBackPixel (1L<<1) #define CWBorderPixmap (1L<<2) #define CWBorderPixel (1L<<3) #define CWBitGravity (1L<<4) #define CWWinGravity (1L<<5) #define CWBackingStore (1L<<6) #define CWBackingPlanes (1L<<7) #define CWBackingPixel (1L<<8) #define CWOverrideRedirect (1L<<9) #define CWSaveUnder (1L<<10) #define CWEventMask (1L<<11) #define CWDontPropagate (1L<<12) #define CWColormap (1L<<13) #define CWCursor (1L<<14) XSetWindowAttributes /* Values */ typedef struct { Pixmap background_pixmap; /* background, None, or ParentRelative */ unsigned long background_pixel; /* background pixel */ Pixmap border_pixmap; /* border of the window or CopyFromParent */ unsigned long border_pixel; /* border pixel value */ int bit_gravity; /* one of bit gravity values */ int win_gravity; /* one of the window gravity values */ int backing_store; /* NotUseful, WhenMapped, Always */ unsigned long backing_planes; /* planes to be preserved if possible */ unsigned long backing_pixel; /* value to use in restoring planes */ Bool save_under; /* should bits under be saved? (popups) */ long event_mask; /* set of events that should be saved */ long do_not_propagate_mask; /* set of events that should not propagate */ Bool override_redirect; /* boolean value for override_redirect */ Colormap colormap; /* color map to be associated with window */ Cursor cursor; /* cursor to be displayed (or None) */ } XSetWindowAttributes; The following lists the defaults for each window attribute and indicates whether the attribute is applicable to InputOutput and InputOnly windows: Attribute Default InputOutput InputOnly background-pixmap None Yes No background-pixel Undefined Yes No border-pixmap CopyFromParent Yes No border-pixel Undefined Yes No bit-gravity ForgetGravity Yes No win-gravity NorthWestGravity Yes Yes backing-store NotUseful Yes No backing-planes All ones Yes No backing-pixel zero Yes No save-under False Yes No event-mask empty set Yes Yes do-not-propagate-mask empty set Yes Yes override-redirect False Yes Yes colormap CopyFromParent Yes No cursor None Yes Yes Background Attribute Only InputOutput windows can have a background. You can set the background of an InputOutput window by using a pixel or a pixmap. The background-pixmap attribute of a window specifies the pixmap to be used for a window's background. This pixmap can be of any size, although some sizes may be faster than others. The background-pixel attribute of a window specifies a pixel value used to paint a window's background in a single color. You can set the background-pixmap to a pixmap, None (default), or ParentRelative. You can set the background-pixel of a window to any pixel value (no default). If you specify a background-pixel, it overrides either the default background-pixmap or any value you may have set in the background-pixmap. A pixmap of an undefined size that is filled with the background-pixel is used for the background. Range checking is not performed on the background pixel; it simply is truncated to the appropriate number of bits. If you set the background-pixmap, it overrides the default. The background-pixmap and the window must have the same depth, or a BadMatch error results. If you set background-pixmap to None, the window has no defined background. If you set the background-pixmap to ParentRelative: The parent window's background-pixmap is used. The child window, however, must have the same depth as its parent, or a BadMatch error results. If the parent window has a background-pixmap of None, the window also has a background-pixmap of None. A copy of the parent window's background-pixmap is not made. The parent's background-pixmap is examined each time the child window's background-pixmap is required. The background tile origin always aligns with the parent window's background tile origin. If the background-pixmap is not ParentRelative, the background tile origin is the child window's origin. Setting a new background, whether by setting background-pixmap or background-pixel, overrides any previous background. The background-pixmap can be freed immediately if no further explicit reference is made to it (the X server will keep a copy to use when needed). If you later draw into the pixmap used for the background, what happens is undefined because the X implementation is free to make a copy of the pixmap or to use the same pixmap. When no valid contents are available for regions of a window and either the regions are visible or the server is maintaining backing store, the server automatically tiles the regions with the window's background unless the window has a background of None. If the background is None, the previous screen contents from other windows of the same depth as the window are simply left in place as long as the contents come from the parent of the window or an inferior of the parent. Otherwise, the initial contents of the exposed regions are undefined. Expose events are then generated for the regions, even if the background-pixmap is None (see section 10.9). Border Attribute Only InputOutput windows can have a border. You can set the border of an InputOutput window by using a pixel or a pixmap. The border-pixmap attribute of a window specifies the pixmap to be used for a window's border. The border-pixel attribute of a window specifies a pixmap of undefined size filled with that pixel be used for a window's border. Range checking is not performed on the background pixel; it simply is truncated to the appropriate number of bits. The border tile origin is always the same as the background tile origin. You can also set the border-pixmap to a pixmap of any size (some may be faster than others) or to CopyFromParent (default). You can set the border-pixel to any pixel value (no default). If you set a border-pixmap, it overrides the default. The border-pixmap and the window must have the same depth, or a BadMatch error results. If you set the border-pixmap to CopyFromParent, the parent window's border-pixmap is copied. Subsequent changes to the parent window's border attribute do not affect the child window. However, the child window must have the same depth as the parent window, or a BadMatch error results. The border-pixmap can be freed immediately if no further explicit reference is made to it. If you later draw into the pixmap used for the border, what happens is undefined because the X implementation is free either to make a copy of the pixmap or to use the same pixmap. If you specify a border-pixel, it overrides either the default border-pixmap or any value you may have set in the border-pixmap. All pixels in the window's border will be set to the border-pixel. Setting a new border, whether by setting border-pixel or by setting border-pixmap, overrides any previous border. Output to a window is always clipped to the inside of the window. Therefore, graphics operations never affect the window border. Gravity Attributes The bit gravity of a window defines which region of the window should be retained when an InputOutput window is resized. The default value for the bit-gravity attribute is ForgetGravity. The window gravity of a window allows you to define how the InputOutput or InputOnly window should be repositioned if its parent is resized. The default value for the win-gravity attribute is NorthWestGravity. If the inside width or height of a window is not changed and if the window is moved or its border is changed, then the contents of the window are not lost but move with the window. Changing the inside width or height of the window causes its contents to be moved or lost (depending on the bit-gravity of the window) and causes children to be reconfigured (depending on their win-gravity). For a change of width and height, the (x, y) pairs are defined: Gravity Direction Coordinates NorthWestGravity (0, 0) NorthGravity (Width/2, 0) NorthEastGravity (Width, 0) WestGravity (0, Height/2) CenterGravity (Width/2, Height/2) EastGravity (Width, Height/2) SouthWestGravity (0, Height) SouthGravity (Width/2, Height) SouthEastGravity (Width, Height) When a window with one of these bit-gravity values is resized, the corresponding pair defines the change in position of each pixel in the window. When a window with one of these win-gravities has its parent window resized, the corresponding pair defines the change in position of the window within the parent. When a window is so repositioned, a GravityNotify event is generated (see section 10.10.5). A bit-gravity of StaticGravity indicates that the contents or origin should not move relative to the origin of the root window. If the change in size of the window is coupled with a change in position (x, y), then for bit-gravity the change in position of each pixel is (−x, −y), and for win-gravity the change in position of a child when its parent is so resized is (−x, −y). Note that StaticGravity still only takes effect when the width or height of the window is changed, not when the window is moved. A bit-gravity of ForgetGravity indicates that the window's contents are always discarded after a size change, even if a backing store or save under has been requested. The window is tiled with its background and zero or more Expose events are generated. If no background is defined, the existing screen contents are not altered. Some X servers may also ignore the specified bit-gravity and always generate Expose events. The contents and borders of inferiors are not affected by their parent's bit-gravity. A server is permitted to ignore the specified bit-gravity and use Forget instead. A win-gravity of UnmapGravity is like NorthWestGravity (the window is not moved), except the child is also unmapped when the parent is resized, and an UnmapNotify event is generated. Backing Store Attribute Some implementations of the X server may choose to maintain the contents of InputOutput windows. If the X server maintains the contents of a window, the off-screen saved pixels are known as backing store. The backing store advises the X server on what to do with the contents of a window. The backing-store attribute can be set to NotUseful (default), WhenMapped, or Always. A backing-store attribute of NotUseful advises the X server that maintaining contents is unnecessary, although some X implementations may still choose to maintain contents and, therefore, not generate Expose events. A backing-store attribute of WhenMapped advises the X server that maintaining contents of obscured regions when the window is mapped would be beneficial. In this case, the server may generate an Expose event when the window is created. A backing-store attribute of Always advises the X server that maintaining contents even when the window is unmapped would be beneficial. Even if the window is larger than its parent, this is a request to the X server to maintain complete contents, not just the region within the parent window boundaries. While the X server maintains the window's contents, Expose events normally are not generated, but the X server may stop maintaining contents at any time. When the contents of obscured regions of a window are being maintained, regions obscured by noninferior windows are included in the destination of graphics requests (and source, when the window is the source). However, regions obscured by inferior windows are not included. Save Under Flag Save Unders Some server implementations may preserve contents of InputOutput windows under other InputOutput windows. This is not the same as preserving the contents of a window for you. You may get better visual appeal if transient windows (for example, pop-up menus) request that the system preserve the screen contents under them, so the temporarily obscured applications do not have to repaint. You can set the save-under flag to True or False (default). If save-under is True, the X server is advised that, when this window is mapped, saving the contents of windows it obscures would be beneficial. Backing Planes and Backing Pixel Attributes You can set backing planes to indicate (with bits set to 1) which bit planes of an InputOutput window hold dynamic data that must be preserved in backing store and during save unders. The default value for the backing-planes attribute is all bits set to 1. You can set backing pixel to specify what bits to use in planes not covered by backing planes. The default value for the backing-pixel attribute is all bits set to 0. The X server is free to save only the specified bit planes in the backing store or the save under and is free to regenerate the remaining planes with the specified pixel value. Any extraneous bits in these values (that is, those bits beyond the specified depth of the window) may be simply ignored. If you request backing store or save unders, you should use these members to minimize the amount of off-screen memory required to store your window. Event Mask and Do Not Propagate Mask Attributes The event mask defines which events the client is interested in for this InputOutput or InputOnly window (or, for some event types, inferiors of this window). The event mask is the bitwise inclusive OR of zero or more of the valid event mask bits. You can specify that no maskable events are reported by setting NoEventMask (default). The do-not-propagate-mask attribute defines which events should not be propagated to ancestor windows when no client has the event type selected in this InputOutput or InputOnly window. The do-not-propagate-mask is the bitwise inclusive OR of zero or more of the following masks: KeyPress, KeyRelease, ButtonPress, ButtonRelease, PointerMotion, Button1Motion, Button2Motion, Button3Motion, Button4Motion, Button5Motion, and ButtonMotion. You can specify that all events are propagated by setting NoEventMask (default). Override Redirect Flag To control window placement or to add decoration, a window manager often needs to intercept (redirect) any map or configure request. Pop-up windows, however, often need to be mapped without a window manager getting in the way. To control whether an InputOutput or InputOnly window is to ignore these structure control facilities, use the override-redirect flag. The override-redirect flag specifies whether map and configure requests on this window should override a SubstructureRedirectMask on the parent. You can set the override-redirect flag to True or False (default). Window managers use this information to avoid tampering with pop-up windows (see also chapter 14). Colormap Attribute The colormap attribute specifies which colormap best reflects the true colors of the InputOutput window. The colormap must have the same visual type as the window, or a BadMatch error results. X servers capable of supporting multiple hardware colormaps can use this information, and window managers can use it for calls to . You can set the colormap attribute to a colormap or to CopyFromParent (default). If you set the colormap to CopyFromParent, the parent window's colormap is copied and used by its child. However, the child window must have the same visual type as the parent, or a BadMatch error results. The parent window must not have a colormap of None, or a BadMatch error results. The colormap is copied by sharing the colormap object between the child and parent, not by making a complete copy of the colormap contents. Subsequent changes to the parent window's colormap attribute do not affect the child window. Cursor Attribute The cursor attribute specifies which cursor is to be used when the pointer is in the InputOutput or InputOnly window. You can set the cursor to a cursor or None (default). If you set the cursor to None, the parent's cursor is used when the pointer is in the InputOutput or InputOnly window, and any change in the parent's cursor will cause an immediate change in the displayed cursor. By calling , the cursor can be freed immediately as long as no further explicit reference to it is made. Creating Windows Xlib provides basic ways for creating windows, and toolkits often supply higher-level functions specifically for creating and placing top-level windows, which are discussed in the appropriate toolkit documentation. If you do not use a toolkit, however, you must provide some standard information or hints for the window manager by using the Xlib inter-client communication functions (see chapter 14). If you use Xlib to create your own top-level windows (direct children of the root window), you must observe the following rules so that all applications interact reasonably across the different styles of window management: You must never fight with the window manager for the size or placement of your top-level window. You must be able to deal with whatever size window you get, even if this means that your application just prints a message like ``Please make me bigger'' in its window. You should only attempt to resize or move top-level windows in direct response to a user request. If a request to change the size of a top-level window fails, you must be prepared to live with what you get. You are free to resize or move the children of top-level windows as necessary. (Toolkits often have facilities for automatic relayout.) If you do not use a toolkit that automatically sets standard window properties, you should set these properties for top-level windows before mapping them. For further information, see chapter 14 and the Inter-Client Communication Conventions Manual. is the more general function that allows you to set specific window attributes when you create a window. creates a window that inherits its attributes from its parent window. WindowInputOnly The X server acts as if InputOnly windows do not exist for the purposes of graphics requests, exposure processing, and VisibilityNotify events. An InputOnly window cannot be used as a drawable (that is, as a source or destination for graphics requests). InputOnly and InputOutput windows act identically in other respects (properties, grabs, input control, and so on). Extension packages can define other classes of windows. To create an unmapped window and set its window attributes, use . XCreateWindow Window XCreateWindow Display *display Window parent int x int y unsigned int width unsigned int height unsigned int border_width int depth unsigned int class Visual *visual unsigned long valuemask XSetWindowAttributes *attributes display Specifies the connection to the X server. parent Specifies the parent window. x y Specify the x and y coordinates, which are the top-left outside corner of the created window's borders and are relative to the inside of the parent window's borders. width height Specify the width and height, which are the created window's inside dimensions and do not include the created window's borders. The dimensions must be nonzero, or a BadValue error results. border_width Specifies the width of the created window's border in pixels. depth Specifies the window's depth. A depth of CopyFromParent means the depth is taken from the parent. class Specifies the created window's class. You can pass InputOutput, InputOnly, or CopyFromParent. A class of CopyFromParent means the class is taken from the parent. visual Specifies the visual type. A visual of CopyFromParent means the visual type is taken from the parent. valuemask Specifies which window attributes are defined in the attributes argument. This mask is the bitwise inclusive OR of the valid attribute mask bits. If valuemask is zero, the attributes are ignored and are not referenced. attributes Specifies the structure from which the values (as specified by the value mask) are to be taken. The value mask should have the appropriate bits set to indicate which attributes have been set in the structure. The function creates an unmapped subwindow for a specified parent window, returns the window ID of the created window, and causes the X server to generate a CreateNotify event. The created window is placed on top in the stacking order with respect to siblings. The coordinate system has the X axis horizontal and the Y axis vertical with the origin [0, 0] at the upper-left corner. Coordinates are integral, in terms of pixels, and coincide with pixel centers. Each window and pixmap has its own coordinate system. For a window, the origin is inside the border at the inside, upper-left corner. The border_width for an InputOnly window must be zero, or a BadMatch error results. For class InputOutput, the visual type and depth must be a combination supported for the screen, or a BadMatch error results. The depth need not be the same as the parent, but the parent must not be a window of class InputOnly, or a BadMatch error results. For an InputOnly window, the depth must be zero, and the visual must be one supported by the screen. If either condition is not met, a BadMatch error results. The parent window, however, may have any depth and class. If you specify any invalid window attribute for a window, a BadMatch error results. The created window is not yet displayed (mapped) on the user's display. To display the window, call . The new window initially uses the same cursor as its parent. A new cursor can be defined for the new window by calling . CursorInitial State XDefineCursor The window will not be visible on the screen unless it and all of its ancestors are mapped and it is not obscured by any of its ancestors. can generate BadAlloc, BadColor, BadCursor, BadMatch, BadPixmap, BadValue, and BadWindow errors. To create an unmapped InputOutput subwindow of a given parent window, use . XCreateSimpleWindow Window XCreateSimpleWindow Display *display Window parent int x int y unsigned int width unsigned int height unsigned int border_width unsigned long border unsigned long background display Specifies the connection to the X server. parent Specifies the parent window. x y Specify the x and y coordinates, which are the top-left outside corner of the new window's borders and are relative to the inside of the parent window's borders. width height Specify the width and height, which are the created window's inside dimensions and do not include the created window's borders. The dimensions must be nonzero, or a BadValue error results. border_width Specifies the width of the created window's border in pixels. border Specifies the border pixel value of the window. background Specifies the background pixel value of the window. The function creates an unmapped InputOutput subwindow for a specified parent window, returns the window ID of the created window, and causes the X server to generate a CreateNotify event. The created window is placed on top in the stacking order with respect to siblings. Any part of the window that extends outside its parent window is clipped. The border_width for an InputOnly window must be zero, or a BadMatch error results. inherits its depth, class, and visual from its parent. All other window attributes, except background and border, have their default values. can generate BadAlloc, BadMatch, BadValue, and BadWindow errors. Destroying Windows Xlib provides functions that you can use to destroy a window or destroy all subwindows of a window. To destroy a window and all of its subwindows, use . XDestroyWindow XDestroyWindow Display *display Window w display Specifies the connection to the X server. w Specifies the window. The function destroys the specified window as well as all of its subwindows and causes the X server to generate a DestroyNotify event for each window. The window should never be referenced again. If the window specified by the w argument is mapped, it is unmapped automatically. The ordering of the DestroyNotify events is such that for any given window being destroyed, DestroyNotify is generated on any inferiors of the window before being generated on the window itself. The ordering among siblings and across subhierarchies is not otherwise constrained. If the window you specified is a root window, no windows are destroyed. Destroying a mapped window will generate Expose events on other windows that were obscured by the window being destroyed. can generate a BadWindow error. To destroy all subwindows of a specified window, use . XDestroySubwindows XDestroySubwindows Display *display Window w display Specifies the connection to the X server. w Specifies the window. The function destroys all inferior windows of the specified window, in bottom-to-top stacking order. It causes the X server to generate a DestroyNotify event for each window. If any mapped subwindows were actually destroyed, causes the X server to generate Expose events on the specified window. This is much more efficient than deleting many windows one at a time because much of the work need be performed only once for all of the windows, rather than for each window. The subwindows should never be referenced again. can generate a BadWindow error. Mapping Windows A window is considered mapped if an call has been made on it. It may not be visible on the screen for one of the following reasons: It is obscured by another opaque window. One of its ancestors is not mapped. It is entirely clipped by an ancestor. Expose events are generated for the window when part or all of it becomes visible on the screen. A client receives the Expose events only if it has asked for them. Windows retain their position in the stacking order when they are unmapped. A window manager may want to control the placement of subwindows. If SubstructureRedirectMask has been selected by a window manager on a parent window (usually a root window), a map request initiated by other clients on a child window is not performed, and the window manager is sent a MapRequest event. However, if the override-redirect flag on the child had been set to True (usually only on pop-up menus), the map request is performed. A tiling window manager might decide to reposition and resize other clients' windows and then decide to map the window to its final location. A window manager that wants to provide decoration might reparent the child into a frame first. For further information, see sections 3.2.8 and 10.10. Only a single client at a time can select for SubstructureRedirectMask. Similarly, a single client can select for ResizeRedirectMask on a parent window. Then, any attempt to resize the window by another client is suppressed, and the client receives a ResizeRequest event. To map a given window, use . XMapWindow XMapWindow Display *display Window w display Specifies the connection to the X server. w Specifies the window. The function maps the window and all of its subwindows that have had map requests. Mapping a window that has an unmapped ancestor does not display the window but marks it as eligible for display when the ancestor becomes mapped. Such a window is called unviewable. When all its ancestors are mapped, the window becomes viewable and will be visible on the screen if it is not obscured by another window. This function has no effect if the window is already mapped. If the override-redirect of the window is False and if some other client has selected SubstructureRedirectMask on the parent window, then the X server generates a MapRequest event, and the function does not map the window. Otherwise, the window is mapped, and the X server generates a MapNotify event. If the window becomes viewable and no earlier contents for it are remembered, the X server tiles the window with its background. If the window's background is undefined, the existing screen contents are not altered, and the X server generates zero or more Expose events. If backing-store was maintained while the window was unmapped, no Expose events are generated. If backing-store will now be maintained, a full-window exposure is always generated. Otherwise, only visible regions may be reported. Similar tiling and exposure take place for any newly viewable inferiors. XMapWindow If the window is an InputOutput window, generates Expose events on each InputOutput window that it causes to be displayed. If the client maps and paints the window and if the client begins processing events, the window is painted twice. To avoid this, first ask for Expose events and then map the window, so the client processes input events as usual. The event list will include Expose for each window that has appeared on the screen. The client's normal response to an Expose event should be to repaint the window. This method usually leads to simpler programs and to proper interaction with window managers. can generate a BadWindow error. To map and raise a window, use . XMapRaised XMapRaised Display *display Window w display Specifies the connection to the X server. w Specifies the window. The function essentially is similar to in that it maps the window and all of its subwindows that have had map requests. However, it also raises the specified window to the top of the stack. For additional information, see . can generate multiple BadWindow errors. To map all subwindows for a specified window, use . XMapSubwindows XMapSubwindows Display *display Window w display Specifies the connection to the X server. w Specifies the window. The XMapSubwindows function maps all subwindows for a specified window in top-to-bottom stacking order. The X server generates Expose events on each newly displayed window. This may be much more efficient than mapping many windows one at a time because the server needs to perform much of the work only once, for all of the windows, rather than for each window. can generate a BadWindow error. Unmapping Windows Xlib provides functions that you can use to unmap a window or all subwindows. To unmap a window, use . XUnmapWindow XUnmapWindow Display *display Window w display Specifies the connection to the X server. w Specifies the window. The function unmaps the specified window and causes the X server to generate an UnmapNotify UnmapNotify Event XUnmapWindow event. If the specified window is already unmapped, has no effect. Normal exposure processing on formerly obscured windows is performed. Any child window will no longer be visible until another map call is made on the parent. In other words, the subwindows are still mapped but are not visible until the parent is mapped. Unmapping a window will generate Expose events on windows that were formerly obscured by it. can generate a BadWindow error. To unmap all subwindows for a specified window, use . XUnmapSubwindows XUnmapSubwindows Display *display Window w display Specifies the connection to the X server. w Specifies the window. The function unmaps all subwindows for the specified window in bottom-to-top stacking order. It causes the X server to generate an UnmapNotify event on each subwindow and Expose events on formerly obscured windows. UnmapNotify Event Using this function is much more efficient than unmapping multiple windows one at a time because the server needs to perform much of the work only once, for all of the windows, rather than for each window. can generate a BadWindow error. Configuring Windows Xlib provides functions that you can use to move a window, resize a window, move and resize a window, or change a window's border width. To change one of these parameters, set the appropriate member of the XWindowChanges structure and OR in the corresponding value mask in subsequent calls to . The symbols for the value mask bits and the XWindowChanges structure are: /* Configure window value mask bits */ #define CWX (1<<0) #define CWY (1<<1) #define CWWidth (1<<2) #define CWHeight (1<<3) #define CWBorderWidth (1<<4) #define CWSibling (1<<5) #define CWStackMode (1<<6) XWindowChanges /* Values */ typedef struct { int x, y; int width, height; int border_width; Window sibling; int stack_mode; } XWindowChanges; The x and y members are used to set the window's x and y coordinates, which are relative to the parent's origin and indicate the position of the upper-left outer corner of the window. The width and height members are used to set the inside size of the window, not including the border, and must be nonzero, or a BadValue error results. Attempts to configure a root window have no effect. The border_width member is used to set the width of the border in pixels. Note that setting just the border width leaves the outer-left corner of the window in a fixed position but moves the absolute position of the window's origin. If you attempt to set the border-width attribute of an InputOnly window nonzero, a BadMatch error results. The sibling member is used to set the sibling window for stacking operations. The stack_mode member is used to set how the window is to be restacked and can be set to Above, Below, TopIf, BottomIf, or Opposite. If the override-redirect flag of the window is False and if some other client has selected SubstructureRedirectMask on the parent, the X server generates a ConfigureRequest event, and no further processing is performed. Otherwise, if some other client has selected ResizeRedirectMask on the window and the inside width or height of the window is being changed, a ResizeRequest event is generated, and the current inside width and height are used instead. Note that the override-redirect flag of the window has no effect on ResizeRedirectMask and that SubstructureRedirectMask on the parent has precedence over ResizeRedirectMask on the window. When the geometry of the window is changed as specified, the window is restacked among siblings, and a ConfigureNotify event is generated if the state of the window actually changes. GravityNotify events are generated after ConfigureNotify events. If the inside width or height of the window has actually changed, children of the window are affected as specified. If a window's size actually changes, the window's subwindows move according to their window gravity. Depending on the window's bit gravity, the contents of the window also may be moved (see section 3.2.3). If regions of the window were obscured but now are not, exposure processing is performed on these formerly obscured windows, including the window itself and its inferiors. As a result of increasing the width or height, exposure processing is also performed on any new regions of the window and any regions where window contents are lost. The restack check (specifically, the computation for BottomIf, TopIf, and Opposite) is performed with respect to the window's final size and position (as controlled by the other arguments of the request), not its initial position. If a sibling is specified without a stack_mode, a BadMatch error results. If a sibling and a stack_mode are specified, the window is restacked as follows: Above The window is placed just above the sibling. Below The window is placed just below the sibling. TopIf If the sibling occludes the window, the window is placed at the top of the stack. BottomIf If the window occludes the sibling, the window is placed at the bottom of the stack. Opposite If the sibling occludes the window, the window is placed at the top of the stack. If the window occludes the sibling, the window is placed at the bottom of the stack. If a stack_mode is specified but no sibling is specified, the window is restacked as follows: Above The window is placed at the top of the stack. Below The window is placed at the bottom of the stack. TopIf If any sibling occludes the window, the window is placed at the top of the stack. BottomIf If the window occludes any sibling, the window is placed at the bottom of the stack. Opposite If any sibling occludes the window, the window is placed at the top of the stack. If the window occludes any sibling, the window is placed at the bottom of the stack. Attempts to configure a root window have no effect. To configure a window's size, location, stacking, or border, use . XConfigureWindow XConfigureWindow Display *display Window w unsigned int value_mask XWindowChanges *values display Specifies the connection to the X server. w Specifies the window to be reconfigured. value_mask Specifies which values are to be set using information in the values structure. This mask is the bitwise inclusive OR of the valid configure window values bits. values Specifies the XWindowChanges structure. The function uses the values specified in the XWindowChanges structure to reconfigure a window's size, position, border, and stacking order. Values not specified are taken from the existing geometry of the window. If a sibling is specified without a stack_mode or if the window is not actually a sibling, a BadMatch error results. Note that the computations for BottomIf, TopIf, and Opposite are performed with respect to the window's final geometry (as controlled by the other arguments passed to ), not its initial geometry. Any backing store contents of the window, its inferiors, and other newly visible windows are either discarded or changed to reflect the current screen contents (depending on the implementation). can generate BadMatch, BadValue, and BadWindow errors. To move a window without changing its size, use . XMoveWindow XMoveWindow Display *display Window w int x int y display Specifies the connection to the X server. w Specifies the window to be moved. x y Specify the x and y coordinates, which define the new location of the top-left pixel of the window's border or the window itself if it has no border. The function moves the specified window to the specified x and y coordinates, but it does not change the window's size, raise the window, or change the mapping state of the window. Moving a mapped window may or may not lose the window's contents depending on if the window is obscured by nonchildren and if no backing store exists. If the contents of the window are lost, the X server generates Expose events. Moving a mapped window generates Expose events on any formerly obscured windows. If the override-redirect flag of the window is False and some other client has selected SubstructureRedirectMask on the parent, the X server generates a ConfigureRequest event, and no further processing is performed. Otherwise, the window is moved. can generate a BadWindow error. To change a window's size without changing the upper-left coordinate, use . XResizeWindow XResizeWindow Display *display Window w unsigned int width unsigned int height display Specifies the connection to the X server. w Specifies the window. width height Specify the width and height, which are the interior dimensions of the window after the call completes. The function changes the inside dimensions of the specified window, not including its borders. This function does not change the window's upper-left coordinate or the origin and does not restack the window. Changing the size of a mapped window may lose its contents and generate Expose events. If a mapped window is made smaller, changing its size generates Expose events on windows that the mapped window formerly obscured. If the override-redirect flag of the window is False and some other client has selected SubstructureRedirectMask on the parent, the X server generates a ConfigureRequest event, and no further processing is performed. If either width or height is zero, a BadValue error results. can generate BadValue and BadWindow errors. To change the size and location of a window, use . XMoveResizeWindow XMoveResizeWindow Display *display Window w int x int y unsigned int width unsigned int height display Specifies the connection to the X server. w Specifies the window to be reconfigured. x y Specify the x and y coordinates, which define the new position of the window relative to its parent. width height Specify the width and height, which define the interior size of the window. The function changes the size and location of the specified window without raising it. Moving and resizing a mapped window may generate an Expose event on the window. Depending on the new size and location parameters, moving and resizing a window may generate Expose events on windows that the window formerly obscured. If the override-redirect flag of the window is False and some other client has selected SubstructureRedirectMask on the parent, the X server generates a ConfigureRequest event, and no further processing is performed. Otherwise, the window size and location are changed. can generate BadValue and BadWindow errors. To change the border width of a given window, use . XSetWindowBorderWidth XSetWindowBorderWidth Display *display Window w unsigned int width display Specifies the connection to the X server. w Specifies the window. width Specifies the width of the window border. The function sets the specified window's border width to the specified width. can generate a BadWindow error. Changing Window Stacking Order Xlib provides functions that you can use to raise, lower, circulate, or restack windows. To raise a window so that no sibling window obscures it, use . XRaiseWindow XRaiseWindow Display *display Window w display Specifies the connection to the X server. w Specifies the window. The function raises the specified window to the top of the stack so that no sibling window obscures it. If the windows are regarded as overlapping sheets of paper stacked on a desk, then raising a window is analogous to moving the sheet to the top of the stack but leaving its x and y location on the desk constant. Raising a mapped window may generate Expose events for the window and any mapped subwindows that were formerly obscured. If the override-redirect attribute of the window is False and some other client has selected SubstructureRedirectMask on the parent, the X server generates a ConfigureRequest event, and no processing is performed. Otherwise, the window is raised. can generate a BadWindow error. To lower a window so that it does not obscure any sibling windows, use . XLowerWindow XLowerWindow Display *display Window w display Specifies the connection to the X server. w Specifies the window. The function lowers the specified window to the bottom of the stack so that it does not obscure any sibling windows. If the windows are regarded as overlapping sheets of paper stacked on a desk, then lowering a window is analogous to moving the sheet to the bottom of the stack but leaving its x and y location on the desk constant. Lowering a mapped window will generate Expose events on any windows it formerly obscured. If the override-redirect attribute of the window is False and some other client has selected SubstructureRedirectMask on the parent, the X server generates a ConfigureRequest event, and no processing is performed. Otherwise, the window is lowered to the bottom of the stack. can generate a BadWindow error. To circulate a subwindow up or down, use . XCirculateSubwindows XCirculateSubwindows Display *display Window w int direction display Specifies the connection to the X server. w Specifies the window. direction Specifies the direction (up or down) that you want to circulate the window. You can pass RaiseLowest or LowerHighest. The function circulates children of the specified window in the specified direction. If you specify RaiseLowest, raises the lowest mapped child (if any) that is occluded by another child to the top of the stack. If you specify LowerHighest, lowers the highest mapped child (if any) that occludes another child to the bottom of the stack. Exposure processing is then performed on formerly obscured windows. If some other client has selected SubstructureRedirectMask on the window, the X server generates a CirculateRequest event, and no further processing is performed. If a child is actually restacked, the X server generates a CirculateNotify event. can generate BadValue and BadWindow errors. To raise the lowest mapped child of a window that is partially or completely occluded by another child, use . XCirculateSubwindowsUp XCirculateSubwindowsUp Display *display Window w display Specifies the connection to the X server. w Specifies the window. The function raises the lowest mapped child of the specified window that is partially or completely occluded by another child. Completely unobscured children are not affected. This is a convenience function equivalent to with RaiseLowest specified. can generate a BadWindow error. To lower the highest mapped child of a window that partially or completely occludes another child, use . XCirculateSubwindowsDown XCirculateSubwindowsDown Display *display Window w display Specifies the connection to the X server. w Specifies the window. The function lowers the highest mapped child of the specified window that partially or completely occludes another child. Completely unobscured children are not affected. This is a convenience function equivalent to with LowerHighest specified. can generate a BadWindow error. To restack a set of windows from top to bottom, use . XRestackWindows XRestackWindows Display *display Window windows[] int nwindows display Specifies the connection to the X server. windows Specifies an array containing the windows to be restacked. nwindows Specifies the number of windows to be restacked. The function restacks the windows in the order specified, from top to bottom. The stacking order of the first window in the windows array is unaffected, but the other windows in the array are stacked underneath the first window, in the order of the array. The stacking order of the other windows is not affected. For each window in the window array that is not a child of the specified window, a BadMatch error results. If the override-redirect attribute of a window is False and some other client has selected SubstructureRedirectMask on the parent, the X server generates ConfigureRequest events for each window whose override-redirect flag is not set, and no further processing is performed. Otherwise, the windows will be restacked in top-to-bottom order. can generate a BadWindow error. Changing Window Attributes Xlib provides functions that you can use to set window attributes. is the more general function that allows you to set one or more window attributes provided by the XSetWindowAttributes structure. The other functions described in this section allow you to set one specific window attribute, such as a window's background. To change one or more attributes for a given window, use . XChangeWindowAttributes XChangeWindowAttributes Display *display Window w unsigned long valuemask XSetWindowAttributes *attributes display Specifies the connection to the X server. w Specifies the window. valuemask Specifies which window attributes are defined in the attributes argument. This mask is the bitwise inclusive OR of the valid attribute mask bits. If valuemask is zero, the attributes are ignored and are not referenced. The values and restrictions are the same as for . attributes Specifies the structure from which the values (as specified by the value mask) are to be taken. The value mask should have the appropriate bits set to indicate which attributes have been set in the structure (see section 3.2). Depending on the valuemask, the function uses the window attributes in the XSetWindowAttributes structure to change the specified window attributes. Changing the background does not cause the window contents to be changed. To repaint the window and its background, use . Setting the border or changing the background such that the border tile origin changes causes the border to be repainted. Changing the background of a root window to None or ParentRelative restores the default background pixmap. Changing the border of a root window to CopyFromParent restores the default border pixmap. Changing the win-gravity does not affect the current position of the window. Changing the backing-store of an obscured window to WhenMapped or Always, or changing the backing-planes, backing-pixel, or save-under of a mapped window may have no immediate effect. Changing the colormap of a window (that is, defining a new map, not changing the contents of the existing map) generates a ColormapNotify event. Changing the colormap of a visible window may have no immediate effect on the screen because the map may not be installed (see ). Changing the cursor of a root window to None restores the default cursor. Whenever possible, you are encouraged to share colormaps. Multiple clients can select input on the same window. Their event masks are maintained separately. When an event is generated, it is reported to all interested clients. However, only one client at a time can select for SubstructureRedirectMask, ResizeRedirectMask, and ButtonPressMask. If a client attempts to select any of these event masks and some other client has already selected one, a BadAccess error results. There is only one do-not-propagate-mask for a window, not one per client. can generate BadAccess, BadColor, BadCursor, BadMatch, BadPixmap, BadValue, and BadWindow errors. To set the background of a window to a given pixel, use . XSetWindowBackground XSetWindowBackground Display *display Window w unsigned long background_pixel display Specifies the connection to the X server. w Specifies the window. background_pixel Specifies the pixel that is to be used for the background. The function sets the background of the window to the specified pixel value. Changing the background does not cause the window contents to be changed. uses a pixmap of undefined size filled with the pixel value you passed. If you try to change the background of an InputOnly window, a BadMatch error results. can generate BadMatch and BadWindow errors. To set the background of a window to a given pixmap, use . Windowbackground XSetWindowBackgroundPixmap XSetWindowBackgroundPixmap Display *display Window w Pixmap background_pixmap display Specifies the connection to the X server. w Specifies the window. background_pixmap Specifies the background pixmap, ParentRelative, or None. Resource IDsfreeing Freeingresources The function sets the background pixmap of the window to the specified pixmap. The background pixmap can immediately be freed if no further explicit references to it are to be made. If ParentRelative is specified, the background pixmap of the window's parent is used, or on the root window, the default background is restored. If you try to change the background of an InputOnly window, a BadMatch error results. If the background is set to None, the window has no defined background. can generate BadMatch, BadPixmap, and BadWindow errors. and do not change the current contents of the window. To change and repaint a window's border to a given pixel, use . XSetWindowBorder XSetWindowBorder Display *display Window w unsigned long border_pixel display Specifies the connection to the X server. w Specifies the window. border_pixel Specifies the entry in the colormap. The function sets the border of the window to the pixel value you specify. If you attempt to perform this on an InputOnly window, a BadMatch error results. can generate BadMatch and BadWindow errors. To change and repaint the border tile of a given window, use . XSetWindowBorderPixmap XSetWindowBorderPixmap Display *display Window w Pixmap border_pixmap display Specifies the connection to the X server. w Specifies the window. border_pixmap Specifies the border pixmap or CopyFromParent. The function sets the border pixmap of the window to the pixmap you specify. The border pixmap can be freed immediately if no further explicit references to it are to be made. If you specify CopyFromParent, a copy of the parent window's border pixmap is used. If you attempt to perform this on an InputOnly window, a BadMatch error results. Resource IDsfreeing Freeingresources can generate BadMatch, BadPixmap, and BadWindow errors. To set the colormap of a given window, use . XSetWindowColormap XSetWindowColormap Display *display Window w Colormap colormap display Specifies the connection to the X server. w Specifies the window. colormap Specifies the colormap. The function sets the specified colormap of the specified window. The colormap must have the same visual type as the window, or a BadMatch error results. can generate BadColor, BadMatch, and BadWindow errors. To define which cursor will be used in a window, use . Windowdefining the cursor XDefineCursor XDefineCursor Display *display Window w Cursor cursor display Specifies the connection to the X server. w Specifies the window. cursor Specifies the cursor that is to be displayed or None. If a cursor is set, it will be used when the pointer is in the window. If the cursor is None, it is equivalent to . can generate BadCursor and BadWindow errors. To undefine the cursor in a given window, use . Windowundefining the cursor XUndefineCursor XUndefineCursor Display *display Window w display Specifies the connection to the X server. w Specifies the window. The function undoes the effect of a previous for this window. When the pointer is in the window, the parent's cursor will now be used. On the root window, the default cursor is restored. can generate a BadWindow error. a> Specifies the background pixlibX11-1.6.3/specs/libX11/CH04.xml000064401431060000012000002172421247741723500164230ustar00alancstaff00002660200006 Window Information Functions After you connect the display to the X server and create a window, you can use the Xlib window information functions to: Obtain information about a window Translate screen coordinates Manipulate property lists Obtain and change window properties Manipulate selections Obtaining Window Information Xlib provides functions that you can use to obtain information about the window tree, the window's current attributes, the window's current geometry, or the current pointer coordinates. Because they are most frequently used by window managers, these functions all return a status to indicate whether the window still exists. To obtain the parent, a list of children, and number of children for a given window, use . Child Window Parent Window XQueryTree Status XQueryTree Display *display Window w Window *root_return Window *parent_return Window **children_return unsigned int *nchildren_return display Specifies the connection to the X server. w Specifies the window whose list of children, root, parent, and number of children you want to obtain. root_return Returns the root window. parent_return Returns the parent window. children_return Returns the list of children. nchildren_return Returns the number of children. The function returns the root ID, the parent window ID, a pointer to the list of children windows (NULL when there are no children), and the number of children in the list for the specified window. The children are listed in current stacking order, from bottom-most (first) to top-most (last). returns zero if it fails and nonzero if it succeeds. To free a non-NULL children list when it is no longer needed, use . can generate a BadWindow error. To obtain the current attributes of a given window, use . XGetWindowAttributes Status XGetWindowAttributes Display *display Window w XWindowAttributes *window_attributes_return display Specifies the connection to the X server. w Specifies the window whose current attributes you want to obtain. window_attributes_return Returns the specified window's attributes in the XWindowAttributes structure. The function returns the current attributes for the specified window to an XWindowAttributes structure. XWindowAttributes typedef struct { int x, y; /* location of window */ int width, height; /* width and height of window */ int border_width; /* border width of window */ int depth; /* depth of window */ Visual *visual; /* the associated visual structure */ Window root; /* root of screen containing window */ int class; /* InputOutput, InputOnly*/ int bit_gravity; /* one of the bit gravity values */ int win_gravity; /* one of the window gravity values */ int backing_store; /* NotUseful, WhenMapped, Always */ unsigned long backing_planes; /* planes to be preserved if possible */ unsigned long backing_pixel; /* value to be used when restoring planes */ Bool save_under; /* boolean, should bits under be saved? */ Colormap colormap; /* color map to be associated with window */ Bool map_installed; /* boolean, is color map currently installed*/ int map_state; /* IsUnmapped, IsUnviewable, IsViewable */ long all_event_masks; /* set of events all people have interest in*/ long your_event_mask; /* my event mask */ long do_not_propagate_mask; /* set of events that should not propagate */ Bool override_redirect; /* boolean value for override-redirect */ Screen *screen; /* back pointer to correct screen */ } XWindowAttributes; The x and y members are set to the upper-left outer corner relative to the parent window's origin. The width and height members are set to the inside size of the window, not including the border. The border_width member is set to the window's border width in pixels. The depth member is set to the depth of the window (that is, bits per pixel for the object). The visual member is a pointer to the screen's associated Visual structure. The root member is set to the root window of the screen containing the window. The class member is set to the window's class and can be either InputOutput or InputOnly. The bit_gravity member is set to the window's bit gravity and can be one of the following: ForgetGravity NorthWestGravity NorthGravity NorthEastGravity WestGravity EastGravity SouthWestGravity SouthGravity SouthEastGravity StaticGravity The win_gravity member is set to the window's window gravity and can be one of the following: UnmapGravity NorthWestGravity NorthGravity NorthEastGravity WestGravity EastGravity SouthWestGravity SouthGravity SouthEastGravity StaticGravity CenterGravity For additional information on gravity, see section 3.2.3. The backing_store member is set to indicate how the X server should maintain the contents of a window and can be WhenMapped, Always, or NotUseful. The backing_planes member is set to indicate (with bits set to 1) which bit planes of the window hold dynamic data that must be preserved in backing_stores and during save_unders. The backing_pixel member is set to indicate what values to use for planes not set in backing_planes. The save_under member is set to True or False. The colormap member is set to the colormap for the specified window and can be a colormap ID or None. The map_installed member is set to indicate whether the colormap is currently installed and can be True or False. The map_state member is set to indicate the state of the window and can be IsUnmapped, IsUnviewable, or IsViewable. IsUnviewable is used if the window is mapped but some ancestor is unmapped. The all_event_masks member is set to the bitwise inclusive OR of all event masks selected on the window by all clients. The your_event_mask member is set to the bitwise inclusive OR of all event masks selected by the querying client. The do_not_propagate_mask member is set to the bitwise inclusive OR of the set of events that should not propagate. The override_redirect member is set to indicate whether this window overrides structure control facilities and can be True or False. Window manager clients should ignore the window if this member is True. The screen member is set to a screen pointer that gives you a back pointer to the correct screen. This makes it easier to obtain the screen information without having to loop over the root window fields to see which field matches. can generate BadDrawable and BadWindow errors. To obtain the current geometry of a given drawable, use . XGetGeometry Status XGetGeometry Display *display Drawable d Window *root_return int*x_return, *y_return unsigned int *width_return unsigned int *height_return unsigned int *border_width_return unsigned int *depth_return display Specifies the connection to the X server. d Specifies the drawable, which can be a window or a pixmap. root_return Returns the root window. x_return y_return Return the x and y coordinates that define the location of the drawable. For a window, these coordinates specify the upper-left outer corner relative to its parent's origin. For pixmaps, these coordinates are always zero. width_return height_return Return the drawable's dimensions (width and height). For a window, these dimensions specify the inside size, not including the border. border_width_return Returns the border width in pixels. If the drawable is a pixmap, it returns zero. depth_return Returns the depth of the drawable (bits per pixel for the object). The function returns the root window and the current geometry of the drawable. The geometry of the drawable includes the x and y coordinates, width and height, border width, and depth. These are described in the argument list. It is legal to pass to this function a window whose class is InputOnly. can generate a BadDrawable error. Translating Screen Coordinates Applications sometimes need to perform a coordinate transformation from the coordinate space of one window to another window or need to determine which window the pointing device is in. and fulfill these needs (and avoid any race conditions) by asking the X server to perform these operations. To translate a coordinate in one window to the coordinate space of another window, use . XTranslateCoordinates Bool XTranslateCoordinates Display *display Windowsrc_w, dest_w intsrc_x, src_y int*dest_x_return, *dest_y_return Window *child_return display Specifies the connection to the X server. src_w Specifies the source window. dest_w Specifies the destination window. src_x src_y Specify the x and y coordinates within the source window. dest_x_return dest_y_return Return the x and y coordinates within the destination window. child_return Returns the child if the coordinates are contained in a mapped child of the destination window. If returns True, it takes the src_x and src_y coordinates relative to the source window's origin and returns these coordinates to dest_x_return and dest_y_return relative to the destination window's origin. If returns False, src_w and dest_w are on different screens, and dest_x_return and dest_y_return are zero. If the coordinates are contained in a mapped child of dest_w, that child is returned to child_return. Otherwise, child_return is set to None. can generate a BadWindow error. To obtain the screen coordinates of the pointer or to determine the pointer coordinates relative to a specified window, use . XQueryPointer Bool XQueryPointer Display *display Window w Window*root_return, *child_return int*root_x_return, *root_y_return int*win_x_return, *win_y_return unsigned int *mask_return display Specifies the connection to the X server. w Specifies the window. root_return Returns the root window that the pointer is in. child_return Returns the child window that the pointer is located in, if any. root_x_return root_y_return Return the pointer coordinates relative to the root window's origin. win_x_return win_y_return Return the pointer coordinates relative to the specified window. mask_return Returns the current state of the modifier keys and pointer buttons. The function returns the root window the pointer is logically on and the pointer coordinates relative to the root window's origin. If returns False, the pointer is not on the same screen as the specified window, and returns None to child_return and zero to win_x_return and win_y_return. If returns True, the pointer coordinates returned to win_x_return and win_y_return are relative to the origin of the specified window. In this case, returns the child that contains the pointer, if any, or else None to child_return. returns the current logical state of the keyboard buttons and the modifier keys in mask_return. It sets mask_return to the bitwise inclusive OR of one or more of the button or modifier key bitmasks to match the current state of the mouse buttons and the modifier keys. Note that the logical state of a device (as seen through Xlib) may lag the physical state if device event processing is frozen (see section 12.1). can generate a BadWindow error. Properties and Atoms A property is a collection of named, typed data. The window system has a set of predefined properties Atompredefined (for example, the name of a window, size hints, and so on), and users can define any other arbitrary information and associate it with windows. Each property has a name, which is an ISO Latin-1 string. For each named property, a unique identifier (atom) is associated with it. A property also has a type, for example, string or integer. These types are also indicated using atoms, so arbitrary new types can be defined. Data of only one type may be associated with a single property name. Clients can store and retrieve properties associated with windows. For efficiency reasons, an atom is used rather than a character string. can be used to obtain the atom for property names. Atom A property is also stored in one of several possible formats. The X server can store the information as 8-bit quantities, 16-bit quantities, or 32-bit quantities. This permits the X server to present the data in the byte order that the client expects. If you define further properties of complex type, you must encode and decode them yourself. These functions must be carefully written if they are to be portable. For further information about how to write a library extension, see appendix C. The type of a property is defined by an atom, which allows for arbitrary extension in this type scheme. Atom Certain property names are predefined in the server for commonly used functions. The atoms for these properties are defined in <X11/Xatom.h>. X11/Xatom.h Files<X11/Xatom.h> Headers<X11/Xatom.h> To avoid name clashes with user symbols, the #define name for each atom has the XA_ prefix. For an explanation of the functions that let you get and set much of the information stored in these predefined properties, see chapter 14. The core protocol imposes no semantics on these property names, but semantics are specified in other X Consortium standards, such as the Inter-Client Communication Conventions Manual and the X Logical Font Description Conventions. You can use properties to communicate other information between applications. The functions described in this section let you define new properties and get the unique atom IDs in your applications. Although any particular atom can have some client interpretation within each of the name spaces, atoms occur in five distinct name spaces within the protocol: Selections Property names Property types Font properties Type of a ClientMessage event (none are built into the X server) The built-in selection property names are: PRIMARY SECONDARY The built-in property names are: CUT_BUFFER0 CUT_BUFFER1 CUT_BUFFER2 CUT_BUFFER3 CUT_BUFFER4 CUT_BUFFER5 CUT_BUFFER6 CUT_BUFFER7 RGB_BEST_MAP RGB_BLUE_MAP RGB_DEFAULT_MAP RGB_GRAY_MAP RGB_GREEN_MAP RGB_RED_MAP RESOURCE_MANAGER WM_CLASS WM_CLIENT_MACHINE WM_COLORMAP_WINDOWS WM_COMMAND WM_HINTS WM_ICON_NAME WM_ICON_SIZE WM_NAME WM_NORMAL_HINTS WM_PROTOCOLS WM_STATE WM_TRANSIENT_FOR WM_ZOOM_HINTS The built-in property types are: ARC ATOM BITMAP CARDINAL COLORMAP CURSOR DRAWABLE FONT INTEGER PIXMAP POINT RGB_COLOR_MAP RECTANGLE STRING VISUALID WINDOW WM_HINTS WM_SIZE_HINTS The built-in font property names are: MIN_SPACE NORM_SPACE MAX_SPACE END_SPACE SUPERSCRIPT_X SUPERSCRIPT_Y SUBSCRIPT_X SUBSCRIPT_Y UNDERLINE_POSITION UNDERLINE_THICKNESS FONT_NAME FULL_NAME STRIKEOUT_DESCENT STRIKEOUT_ASCENT ITALIC_ANGLE X_HEIGHT QUAD_WIDTH WEIGHT POINT_SIZE RESOLUTION COPYRIGHT NOTICE FAMILY_NAME CAP_HEIGHT For further information about font properties, see section 8.5. To return an atom for a given name, use . Atominterning XInternAtom Atom XInternAtom Display *display char *atom_name Bool only_if_exists display Specifies the connection to the X server. atom_name Specifies the name associated with the atom you want returned. only_if_exists Specifies a Boolean value that indicates whether the atom must be created. The function returns the atom identifier associated with the specified atom_name string. If only_if_exists is False, the atom is created if it does not exist. Therefore, can return None. If the atom name is not in the Host Portable Character Encoding, the result is implementation-dependent. Uppercase and lowercase matter; the strings ``thing'', ``Thing'', and ``thinG'' all designate different atoms. The atom will remain defined even after the client's connection closes. It will become undefined only when the last connection to the X server closes. can generate BadAlloc and BadValue errors. To return atoms for an array of names, use . Atominterning XInternAtoms Status XInternAtoms Display *display char **names int count Bool only_if_exists Atom *atoms_return display Specifies the connection to the X server. names Specifies the array of atom names. count Specifies the number of atom names in the array. only_if_exists Specifies a Boolean value that indicates whether the atom must be created. atoms_return Returns the atoms. The function returns the atom identifiers associated with the specified names. The atoms are stored in the atoms_return array supplied by the caller. Calling this function is equivalent to calling for each of the names in turn with the specified value of only_if_exists, but this function minimizes the number of round-trip protocol exchanges between the client and the X server. This function returns a nonzero status if atoms are returned for all of the names; otherwise, it returns zero. can generate BadAlloc and BadValue errors. To return a name for a given atom identifier, use . Atomgetting name XGetAtomName char *XGetAtomName Display *display Atom atom display Specifies the connection to the X server. atom Specifies the atom for the property name you want returned. The function returns the name associated with the specified atom. If the data returned by the server is in the Latin Portable Character Encoding, then the returned string is in the Host Portable Character Encoding. Otherwise, the result is implementation-dependent. To free the resulting string, call . can generate a BadAtom error. To return the names for an array of atom identifiers, use . Atomgetting name XGetAtomNames Status XGetAtomNames Display *display Atom *atoms int count char **names_return display Specifies the connection to the X server. atoms Specifies the array of atoms. count Specifies the number of atoms in the array. names_return Returns the atom names. The function returns the names associated with the specified atoms. The names are stored in the names_return array supplied by the caller. Calling this function is equivalent to calling for each of the atoms in turn, but this function minimizes the number of round-trip protocol exchanges between the client and the X server. This function returns a nonzero status if names are returned for all of the atoms; otherwise, it returns zero. can generate a BadAtom error. Obtaining and Changing Window Properties You can attach a property list to every window. Each property has a name, a type, and a value (see section 4.3). The value is an array of 8-bit, 16-bit, or 32-bit quantities, whose interpretation is left to the clients. The type char is used to represent 8-bit quantities, the type short is used to represent 16-bit quantities, and the type long is used to represent 32-bit quantities. Xlib provides functions that you can use to obtain, change, update, or interchange window properties. In addition, Xlib provides other utility functions for inter-client communication (see chapter 14). To obtain the type, format, and value of a property of a given window, use . Propertygetting XGetWindowProperty int XGetWindowProperty display w property long_offset long_length delete req_type actual_type_return actual_format_return nitems_return bytes_after_return prop_return display Specifies the connection to the X server. w Specifies the window whose property you want to obtain. property Specifies the property name. long_offset Specifies the offset in the specified property (in 32-bit quantities) where the data is to be retrieved. long_length Specifies the length in 32-bit multiples of the data to be retrieved. delete Specifies a Boolean value that determines whether the property is deleted. req_type Specifies the atom identifier associated with the property type or AnyPropertyType. actual_type_return Returns the atom identifier that defines the actual type of the property. actual_format_return Returns the actual format of the property. nitems_return Returns the actual number of 8-bit, 16-bit, or 32-bit items stored in the prop_return data. bytes_after_return Returns the number of bytes remaining to be read in the property if a partial read was performed. prop_return Returns the data in the specified format. The function returns the actual type of the property; the actual format of the property; the number of 8-bit, 16-bit, or 32-bit items transferred; the number of bytes remaining to be read in the property; and a pointer to the data actually returned. sets the return arguments as follows: If the specified property does not exist for the specified window, returns None to actual_type_return and the value zero to actual_format_return and bytes_after_return. The nitems_return argument is empty. In this case, the delete argument is ignored. If the specified property exists but its type does not match the specified type, returns the actual property type to actual_type_return, the actual property format (never zero) to actual_format_return, and the property length in bytes (even if the actual_format_return is 16 or 32) to bytes_after_return. It also ignores the delete argument. The nitems_return argument is empty. If the specified property exists and either you assign AnyPropertyType to the req_type argument or the specified type matches the actual property type, returns the actual property type to actual_type_return and the actual property format (never zero) to actual_format_return. It also returns a value to bytes_after_return and nitems_return, by defining the following values: N = actual length of the stored property in bytes (even if the format is 16 or 32) I = 4 * long_offset T = N - I L = MINIMUM(T, 4 * long_length) A = N - (I + L) The returned value starts at byte index I in the property (indexing from zero), and its length in bytes is L. If the value for long_offset causes L to be negative, a BadValue error results. The value of bytes_after_return is A, giving the number of trailing unread bytes in the stored property. If the returned format is 8, the returned data is represented as a char array. If the returned format is 16, the returned data is represented as a short array and should be cast to that type to obtain the elements. If the returned format is 32, the returned data is represented as a long array and should be cast to that type to obtain the elements. always allocates one extra byte in prop_return (even if the property is zero length) and sets it to zero so that simple properties consisting of characters do not have to be copied into yet another string before use. If delete is True and bytes_after_return is zero, deletes the property from the window and generates a PropertyNotify event on the window. The function returns Success if it executes successfully. To free the resulting data, use . can generate BadAtom, BadValue, and BadWindow errors. To obtain a given window's property list, use . Propertylisting XListProperties Atom *XListProperties Display *display Window w int *num_prop_return display Specifies the connection to the X server. w Specifies the window whose property list you want to obtain. num_prop_return Returns the length of the properties array. The function returns a pointer to an array of atom properties that are defined for the specified window or returns NULL if no properties were found. To free the memory allocated by this function, use . can generate a BadWindow error. To change a property of a given window, use . Propertychanging Propertyappending Propertyprepending Propertyreplacing Propertyformat Propertytype XChangeProperty XChangeProperty Display *display Window w Atomproperty, type int format int mode unsignedchar *data int nelements display Specifies the connection to the X server. w Specifies the window whose property you want to change. property Specifies the property name. type Specifies the type of the property. The X server does not interpret the type but simply passes it back to an application that later calls . format Specifies whether the data should be viewed as a list of 8-bit, 16-bit, or 32-bit quantities. Possible values are 8, 16, and 32. This information allows the X server to correctly perform byte-swap operations as necessary. If the format is 16-bit or 32-bit, you must explicitly cast your data pointer to an (unsigned char *) in the call to . mode Specifies the mode of the operation. You can pass PropModeReplace, PropModePrepend, or PropModeAppend. data Specifies the property data. nelements Specifies the number of elements of the specified data format. The function alters the property for the specified window and causes the X server to generate a PropertyNotify event on that window. performs the following: If mode is PropModeReplace, discards the previous property value and stores the new data. If mode is PropModePrepend or PropModeAppend, inserts the specified data before the beginning of the existing data or onto the end of the existing data, respectively. The type and format must match the existing property value, or a BadMatch error results. If the property is undefined, it is treated as defined with the correct type and format with zero-length data. If the specified format is 8, the property data must be a char array. If the specified format is 16, the property data must be a short array. If the specified format is 32, the property data must be a long array. The lifetime of a property is not tied to the storing client. Properties remain until explicitly deleted, until the window is destroyed, or until the server resets. For a discussion of what happens when the connection to the X server is closed, see section 2.6. The maximum size of a property is server dependent and can vary dynamically depending on the amount of memory the server has available. (If there is insufficient space, a BadAlloc error results.) can generate BadAlloc, BadAtom, BadMatch, BadValue, and BadWindow errors. To rotate a window's property list, use . XRotateWindowProperties XRotateWindowProperties Display *display Window w Atom properties[] int num_prop int npositions display Specifies the connection to the X server. w Specifies the window. properties Specifies the array of properties that are to be rotated. num_prop Specifies the length of the properties array. npositions Specifies the rotation amount. The function allows you to rotate properties on a window and causes the X server to generate PropertyNotify events. If the property names in the properties array are viewed as being numbered starting from zero and if there are num_prop property names in the list, then the value associated with property name I becomes the value associated with property name (I + npositions) mod N for all I from zero to N − 1. The effect is to rotate the states by npositions places around the virtual ring of property names (right for positive npositions, left for negative npositions). If npositions mod N is nonzero, the X server generates a PropertyNotify event for each property in the order that they are listed in the array. If an atom occurs more than once in the list or no property with that name is defined for the window, a BadMatch error results. If a BadAtom or BadMatch error results, no properties are changed. can generate BadAtom, BadMatch, and BadWindow errors. To delete a property on a given window, use . Propertydeleting XDeleteProperty XDeleteProperty Display *display Window w Atom property display Specifies the connection to the X server. w Specifies the window whose property you want to delete. property Specifies the property name. The function deletes the specified property only if the property was defined on the specified window and causes the X server to generate a PropertyNotify event on the window unless the property does not exist. can generate BadAtom and BadWindow errors. Selections Selection Selections are one method used by applications to exchange data. By using the property mechanism, applications can exchange data of arbitrary types and can negotiate the type of the data. A selection can be thought of as an indirect property with a dynamic type. That is, rather than having the property stored in the X server, the property is maintained by some client (the owner). A selection is global in nature (considered to belong to the user but be maintained by clients) rather than being private to a particular window subhierarchy or a particular set of clients. Xlib provides functions that you can use to set, get, or request conversion of selections. This allows applications to implement the notion of current selection, which requires that notification be sent to applications when they no longer own the selection. Applications that support selection often highlight the current selection and so must be informed when another application has acquired the selection so that they can unhighlight the selection. When a client asks for the contents of a selection, it specifies a selection target type. This target type can be used to control the transmitted representation of the contents. For example, if the selection is ``the last thing the user clicked on'' and that is currently an image, then the target type might specify whether the contents of the image should be sent in XY format or Z format. The target type can also be used to control the class of contents transmitted, for example, asking for the ``looks'' (fonts, line spacing, indentation, and so forth) of a paragraph selection, not the text of the paragraph. The target type can also be used for other purposes. The protocol does not constrain the semantics. To set the selection owner, use . Selectionsetting the owner XSetSelectionOwner XSetSelectionOwner Display *display Atom selection Window owner Time time display Specifies the connection to the X server. selection Specifies the selection atom. owner Specifies the owner of the specified selection atom. You can pass a window or None. time Specifies the time. You can pass either a timestamp or CurrentTime. The function changes the owner and last-change time for the specified selection and has no effect if the specified time is earlier than the current last-change time of the specified selection or is later than the current X server time. Otherwise, the last-change time is set to the specified time, with CurrentTime replaced by the current server time. If the owner window is specified as None, then the owner of the selection becomes None (that is, no owner). Otherwise, the owner of the selection becomes the client executing the request. If the new owner (whether a client or None) is not the same as the current owner of the selection and the current owner is not None, the current owner is sent a SelectionClear event. If the client that is the owner of a selection is later terminated (that is, its connection is closed) or if the owner window it has specified in the request is later destroyed, the owner of the selection automatically reverts to None, but the last-change time is not affected. The selection atom is uninterpreted by the X server. returns the owner window, which is reported in SelectionRequest and SelectionClear events. Selections are global to the X server. can generate BadAtom and BadWindow errors. To return the selection owner, use . Selectiongetting the owner XGetSelectionOwner Window XGetSelectionOwner Display *display Atom selection display Specifies the connection to the X server. selection Specifies the selection atom whose owner you want returned. The function returns the window ID associated with the window that currently owns the specified selection. If no selection was specified, the function returns the constant None. If None is returned, there is no owner for the selection. can generate a BadAtom error. To request conversion of a selection, use . Selectionconverting XConvertSelection XConvertSelection Display *display Atom selection Atom target Atom property Window requestor Time time display Specifies the connection to the X server. selection Specifies the selection atom. target Specifies the target atom. property Specifies the property name. You also can pass None. requestor Specifies the requestor. time Specifies the time. You can pass either a timestamp or CurrentTime. requests that the specified selection be converted to the specified target type: If the specified selection has an owner, the X server sends a SelectionRequest event to that owner. If no owner for the specified selection exists, the X server generates a SelectionNotify event to the requestor with property None. The arguments are passed on unchanged in either of the events. There are two predefined selection atoms: PRIMARY and SECONDARY. can generate BadAtom and BadWindow errors. --> can generate BadAtom and BadWindow errors. Selections Selection SelectiolibX11-1.6.3/specs/libX11/libX11.xml000064401431060000012000000146611247741723500170250ustar00alancstaff00002660200006 %defs; ]> Xlib - C Language X Interface X Consortium Standard X Version 11, Release &fullrelvers; JamesGettys Digital Equipment Corporation Cambridge Research Laboratory RobertW. Scheifler Massachusetts Institute of Technology Laboratory for Computer Science ChuckAdams Tektronix, Inc. VaniaJoloboff Open Software Foundation HidekiHiura Sun Microsystems, Inc. BillMcMahon Hewlett-Packard Company RonNewman Massachusetts Institute of Technology AlTabayoyon Tektronix, Inc. GlennWidener Tektronix, Inc. ShigeruYamada Fujitsu OSSI 198519861987 1988198919911994 19962002The Open Group 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: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED “AS IS”, 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 OPEN GROUP 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. 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 The Open Group. Copyright © 1985, 1986, 1987, 1988, 1989, 1991 Digital Equipment Corporation Permission to use, copy, modify and distribute this documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appears in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the names of Digital and Tetronix not be used in in advertising or publicity pertaining to distribution of the software without specific, written prior permission. Digital and Tetronix make no representations about the suitability of the software described herein for any purpose. It is provided “as is” without express or implied warranty. TekHVC is a trademark of Tektronix, Inc. > Tektronix, Inc. libX11-1.6.3/specs/libX11/AppD.xml000064401431060000012000001477711247741723500166220ustar00alancstaff00002660200006 Compatibility Functions The X Version 11 and X Version 10 functions discussed in this appendix are obsolete, have been superseded by newer X Version 11 functions, and are maintained for compatibility reasons only. X Version 11 Compatibility Functions You can use the X Version 11 compatibility functions to: Set standard properties Set and get window sizing hints Set and get an XStandardColormap structure Parse window geometry Get X environment defaults Setting Standard Properties To specify a minimum set of properties describing the simplest application, use . This function has been superseded by and sets all or portions of the WM_NAME, WM_ICON_NAME, WM_HINTS, WM_COMMAND, and WM_NORMAL_HINTS properties. XSetStandardProperties XSetStandardProperties Display *display Window w char *window_name char *icon_name Pixmap icon_pixmap char **argv int argc XSizeHints *hints display Specifies the connection to the X server. w Specifies the window. window_name Specifies the window name, which should be a null-terminated string. icon_name Specifies the icon name, which should be a null-terminated string. icon_pixmap Specifies the bitmap that is to be used for the icon or None. argv Specifies the application's argument list. argc Specifies the number of arguments. hints Specifies a pointer to the size hints for the window in its normal state. The function provides a means by which simple applications set the most essential properties with a single call. should be used to give a window manager some information about your program's preferences. It should not be used by applications that need to communicate more information than is possible with . (Typically, argv is the argv array of your main program.) If the strings are not in the Host Portable Character Encoding, the result is implementation-dependent. can generate BadAlloc and BadWindow errors. Setting and Getting Window Sizing Hints Xlib provides functions that you can use to set or get window sizing hints. The functions discussed in this section use the flags and the XSizeHints structure, as defined in the <X11/Xutil.h> X11/Xutil.h Files<X11/Xutil.h> Headers<X11/Xutil.h> header file and use the WM_NORMAL_HINTS property. To set the size hints for a given window in its normal state, use . This function has been superseded by . XSetNormalHints XSetNormalHints Display *display Window w XSizeHints *hints display Specifies the connection to the X server. w Specifies the window. hints Specifies a pointer to the size hints for the window in its normal state. The function sets the size hints structure for the specified window. Applications use to inform the window manager of the size or position desirable for that window. In addition, an application that wants to move or resize itself should call and specify its new desired location and size as well as making direct Xlib calls to move or resize. This is because window managers may ignore redirected configure requests, but they pay attention to property changes. To set size hints, an application not only must assign values to the appropriate members in the hints structure but also must set the flags member of the structure to indicate which information is present and where it came from. A call to is meaningless, unless the flags member is set to indicate which members of the structure have been assigned values. can generate BadAlloc and BadWindow errors. To return the size hints for a window in its normal state, use . This function has been superseded by . XGetNormalHints Status XGetNormalHints Display *display Window w XSizeHints *hints_return display Specifies the connection to the X server. w Specifies the window. hints_return Returns the size hints for the window in its normal state. The function returns the size hints for a window in its normal state. It returns a nonzero status if it succeeds or zero if the application specified no normal size hints for this window. can generate a BadWindow error. The next two functions set and read the WM_ZOOM_HINTS property. To set the zoom hints for a window, use . This function is no longer supported by the Inter-Client Communication Conventions Manual. XSetZoomHints XSetZoomHints Display *display Window w XSizeHints *zhints display Specifies the connection to the X server. w Specifies the window. zhints Specifies a pointer to the zoom hints. Many window managers think of windows in one of three states: iconic, normal, or zoomed. The function provides the window manager with information for the window in the zoomed state. can generate BadAlloc and BadWindow errors. To read the zoom hints for a window, use . This function is no longer supported by the Inter-Client Communication Conventions Manual. XGetZoomHints Status XGetZoomHints Display *display Window w XSizeHints *zhints_return display Specifies the connection to the X server. w Specifies the window. zhints_return Returns the zoom hints. The function returns the size hints for a window in its zoomed state. It returns a nonzero status if it succeeds or zero if the application specified no zoom size hints for this window. can generate a BadWindow error. To set the value of any property of type WM_SIZE_HINTS, use . This function has been superseded by . XSetSizeHints XSetSizeHints Display *display Window w XSizeHints *hints Atom property display Specifies the connection to the X server. w Specifies the window. hints Specifies a pointer to the size hints. property Specifies the property name. The function sets the XSizeHints structure for the named property and the specified window. This is used by and and can be used to set the value of any property of type WM_SIZE_HINTS. Thus, it may be useful if other properties of that type get defined. can generate BadAlloc, BadAtom, and BadWindow errors. To read the value of any property of type WM_SIZE_HINTS, use . This function has been superseded by . XGetSizeHints Status XGetSizeHints Display *display Window w XSizeHints *hints_return Atom property display Specifies the connection to the X server. w Specifies the window. hints_return Returns the size hints. property Specifies the property name. The function returns the XSizeHints structure for the named property and the specified window. This is used by and . It also can be used to retrieve the value of any property of type WM_SIZE_HINTS. Thus, it may be useful if other properties of that type get defined. returns a nonzero status if a size hint was defined or zero otherwise. can generate BadAtom and BadWindow errors. Getting and Setting an XStandardColormap Structure To get the XStandardColormap structure associated with one of the described atoms, use . This function has been superseded by . XGetStandardColormap Status XGetStandardColormap Display *display Window w XStandardColormap *colormap_return Atom property display Specifies the connection to the X server. w Specifies the window. colormap_return Returns the colormap associated with the specified atom. property Specifies the property name. The function returns the colormap definition associated with the atom supplied as the property argument. returns a nonzero status if successful and zero otherwise. For example, to fetch the standard GrayScale colormap for a display, you use with the following syntax: XGetStandardColormap(dpy, DefaultRootWindow(dpy), &cmap, XA_RGB_GRAY_MAP); See section 14.3 for the semantics of standard colormaps. can generate BadAtom and BadWindow errors. To set a standard colormap, use . This function has been superseded by . XSetStandardColormap XSetStandardColormap Display *display Window w XStandardColormap *colormap Atom property display Specifies the connection to the X server. w Specifies the window. colormap Specifies the colormap. property Specifies the property name. The function usually is only used by window or session managers. can generate BadAlloc, BadAtom, BadDrawable, and BadWindow errors. Parsing Window Geometry To parse window geometry given a user-specified position and a default position, use . This function has been superseded by . Windowdetermining location XGeometry int XGeometry Display *display int screen char*position, *default_position unsigned int bwidth unsigned int fwidth unsigned int fheight intxadder, yadder int*x_return, *y_return int*width_return, *height_return display Specifies the connection to the X server. screen Specifies the screen. position default_position Specify the geometry specifications. bwidth Specifies the border width. fheight fwidth Specify the font height and width in pixels (increment size). xadder yadder Specify additional interior padding needed in the window. x_return y_return Return the x and y offsets. width_return height_return Return the width and height determined. You pass in the border width (bwidth), size of the increments fwidth and fheight (typically font width and height), and any additional interior space (xadder and yadder) to make it easy to compute the resulting size. The function returns the position the window should be placed given a position and a default position. determines the placement of a window using a geometry specification as specified by and the additional information about the window. Given a fully qualified default geometry specification and an incomplete geometry specification, returns a bitmask value as defined above in the call, by using the position argument. The returned width and height will be the width and height specified by default_position as overridden by any user-specified position. They are not affected by fwidth, fheight, xadder, or yadder. The x and y coordinates are computed by using the border width, the screen width and height, padding as specified by xadder and yadder, and the fheight and fwidth times the width and height from the geometry specifications. Getting the X Environment Defaults The function provides a primitive interface to the resource manager facilities discussed in chapter 15. It is only useful in very simple applications. XGetDefault char *XGetDefault Display *display char *program char *option display Specifies the connection to the X server. program Specifies the program name for the Xlib defaults (usually argv[0] of the main program). option Specifies the option name. The function returns the value of the resource prog.option, where prog is the program argument with the directory prefix removed and option must be a single component. Note that multilevel resources cannot be used with . The class "Program.Name" is always used for the resource lookup. If the specified option name does not exist for this program, returns NULL. The strings returned by are owned by Xlib and should not be modified or freed by the client. If a database has been set with , that database is used for the lookup. Otherwise, a database is created and is set in the display (as if by calling ). The database is created in the current locale. To create a database, uses resources from the RESOURCE_MANAGER property on the root window of screen zero. If no such property exists, a resource file in the user's home directory is used. On a POSIX-conformant system, this file is "$HOME/.Xdefaults". Files$HOME/.Xdefaults After loading these defaults, merges additional defaults specified by the XENVIRONMENT environment variable. If XENVIRONMENT is defined, it contains a full path name for the additional resource file. If XENVIRONMENT is not defined, looks for "$HOME/.Xdefaults-name" , where name specifies the name of the machine on which the application is running. X Version 10 Compatibility Functions You can use the X Version 10 compatibility functions to: Draw and fill polygons and curves Associate user data with a value Drawing and Filling Polygons and Curves Xlib provides functions that you can use to draw or fill arbitrary polygons or curves. These functions are provided mainly for compatibility with X Version 10 and have no server support. That is, they call other Xlib functions, not the server directly. Thus, if you just have straight lines to draw, using XDrawLines or XDrawSegments is much faster. The functions discussed here provide all the functionality of the X Version 10 functions , X10 compatibilityXDraw , X10 compatibilityXDrawFilled XDrawPatterned, X10 compatibilityXDrawPatterned XDrawDashed, X10 compatibilityXDrawDashed and XDrawTiled. X10 compatibilityXDrawTiled They are as compatible as possible given X Version 11's new line-drawing functions. One thing to note, however, is that VertexDrawLastPoint is no longer supported. Also, the error status returned is the opposite of what it was under X Version 10 (this is the X Version 11 standard error status). XAppendVertex and XClearVertexFlag from X Version 10 also are not supported. Just how the graphics context you use is set up actually determines whether you get dashes or not, and so on. Lines are properly joined if they connect and include the closing of a closed figure (see ). The functions discussed here fail (return zero) only if they run out of memory or are passed a Vertex list that has a Vertex with VertexStartClosed set that is not followed by a Vertex with VertexEndClosed set. To achieve the effects of the X Version 10 , X10 compatibilityXDraw XDrawDashed, X10 compatibilityXDrawDashed and XDrawPatterned, X10 compatibilityXDrawPatterned use . #include <X11/X10.h> Status XDraw Display *display Drawable d GC gc Vertex *vlist int vcount display Specifies the connection to the X server. d Specifies the drawable. gc Specifies the GC. vlist Specifies a pointer to the list of vertices that indicate what to draw. vcount Specifies how many vertices are in vlist. The function draws an arbitrary polygon or curve. The figure drawn is defined by the specified list of vertices (vlist). The points are connected by lines as specified in the flags in the vertex structure. Each Vertex, as defined in <X11/X10.h>, X11/X10.h Files<X11/X10.h> Headers<X11/X10.h> is a structure with the following members: Vertex typedef struct _Vertex { short x,y; unsigned short flags; } Vertex; The x and y members are the coordinates of the vertex that are relative to either the upper left inside corner of the drawable (if VertexRelative is zero) or the previous vertex (if VertexRelative is one). The flags, as defined in <X11/X10.h>, X11/X10.h Files<X11/X10.h> Headers<X11/X10.h> are as follows: VertexRelative VertexDontDraw VertexCurved VertexStartClosed VertexEndClosed VertexRelative 0x0001 /* else absolute */ VertexDontDraw 0x0002 /* else draw */ VertexCurved 0x0004 /* else straight */ VertexStartClosed 0x0008 /* else not */ VertexEndClosed 0x0010 /* else not */ If VertexRelative is not set, the coordinates are absolute (that is, relative to the drawable's origin). The first vertex must be an absolute vertex. If VertexDontDraw is one, no line or curve is drawn from the previous vertex to this one. This is analogous to picking up the pen and moving to another place before drawing another line. If VertexCurved is one, a spline algorithm is used to draw a smooth curve from the previous vertex through this one to the next vertex. Otherwise, a straight line is drawn from the previous vertex to this one. It makes sense to set VertexCurved to one only if a previous and next vertex are both defined (either explicitly in the array or through the definition of a closed curve). It is permissible for VertexDontDraw bits and VertexCurved bits both to be one. This is useful if you want to define the previous point for the smooth curve but do not want an actual curve drawing to start until this point. If VertexStartClosed is one, then this point marks the beginning of a closed curve. This vertex must be followed later in the array by another vertex whose effective coordinates are identical and that has a VertexEndClosed bit of one. The points in between form a cycle to determine predecessor and successor vertices for the spline algorithm. This function uses these GC components: function, plane-mask, line-width, line-style, cap-style, join-style, fill-style, subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask. It also uses these GC mode-dependent components: foreground, background, tile, stipple, tile-stipple-x-origin, tile-stipple-y-origin, dash-offset, and dash-list. To achieve the effects of the X Version 10 XDrawTiled X10 compatibilityXDrawTiled and , X10 compatibilityXDrawFilled use . #include <X11/X10.h> Status XDrawFilled Display *display Drawable d GC gc Vertex *vlist int vcount display Specifies the connection to the X server. d Specifies the drawable. gc Specifies the GC. vlist Specifies a pointer to the list of vertices that indicate what to draw. vcount Specifies how many vertices are in vlist. The function draws arbitrary polygons or curves and then fills them. This function uses these GC components: function, plane-mask, line-width, line-style, cap-style, join-style, fill-style, subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask. It also uses these GC mode-dependent components: foreground, background, tile, stipple, tile-stipple-x-origin, tile-stipple-y-origin, dash-offset, dash-list, fill-style, and fill-rule. Associating User Data with a Value These functions have been superseded by the context management functions (see section 16.10). It is often necessary to associate arbitrary information with resource IDs. Xlib provides the XAssocTable functions that you can use to make such an association. Hash Lookup WindowIDs Resource IDs Application programs often need to be able to easily refer to their own data structures when an event arrives. The XAssocTable system provides users of the X library with a method for associating their own data structures with X resources (Pixmaps, Fonts, Windows, and so on). An XAssocTable can be used to type X resources. For example, the user may want to have three or four types of windows, each with different properties. This can be accomplished by associating each X window ID with a pointer to a window property data structure defined by the user. A generic type has been defined in the X library for resource IDs. It is called an XID. There are a few guidelines that should be observed when using an XAssocTable : All XIDs are relative to the specified display. Because of the hashing scheme used by the association mechanism, the following rules for determining the size of a XAssocTable should be followed. Associations will be made and looked up more efficiently if the table size (number of buckets in the hashing system) is a power of two and if there are not more than 8 XIDs per bucket. To return a pointer to a new XAssocTable, use . XCreateAssocTable XAssocTable *XCreateAssocTable int size size Specifies the number of buckets in the hash system of XAssocTable. The size argument specifies the number of buckets in the hash system of XAssocTable. For reasons of efficiency the number of buckets should be a power of two. Some size suggestions might be: use 32 buckets per 100 objects, and a reasonable maximum number of objects per buckets is 8. If an error allocating memory for the XAssocTable occurs, a NULL pointer is returned. To create an entry in a given XAssocTable, use . XMakeAssoc XMakeAssoc Display *display XAssocTable *table XID x_id char *data display Specifies the connection to the X server. table Specifies the assoc table. x_id Specifies the X resource ID. data Specifies the data to be associated with the X resource ID. The function inserts data into an XAssocTable keyed on an XID. Data is inserted into the table only once. Redundant inserts are ignored. The queue in each association bucket is sorted from the lowest XID to the highest XID. To obtain data from a given XAssocTable, use . XLookUpAssoc char *XLookUpAssoc Display *display XAssocTable *table XID x_id display Specifies the connection to the X server. table Specifies the assoc table. x_id Specifies the X resource ID. The function retrieves the data stored in an XAssocTable by its XID. If an appropriately matching XID can be found in the table, returns the data associated with it. If the x_id cannot be found in the table, it returns NULL. To delete an entry from a given XAssocTable, use . XDeleteAssoc XDeleteAssoc Display *display XAssocTable *table XID x_id display Specifies the connection to the X server. table Specifies the assoc table. x_id Specifies the X resource ID. The function deletes an association in an XAssocTable keyed on its XID. Redundant deletes (and deletes of nonexistent XIDs) are ignored. Deleting associations in no way impairs the performance of an XAssocTable. To free the memory associated with a given XAssocTable, use . XDestroyAssocTable XDestroyAssocTable XAssocTable *table table Specifies the assoc table. stentrylibX11-1.6.3/specs/libX11/AppC.xml000064401431060000012000002723461247741723500166160ustar00alancstaff00002660200006 Extensions Because X can evolve by extensions to the core protocol, it is important that extensions not be perceived as second-class citizens. At some point, your favorite extensions may be adopted as additional parts of the X Standard. Therefore, there should be little to distinguish the use of an extension from that of the core protocol. To avoid having to initialize extensions explicitly in application programs, it is also important that extensions perform lazy evaluations, automatically initializing themselves when called for the first time. This appendix describes techniques for writing extensions to Xlib that will run at essentially the same performance as the core protocol requests. It is expected that a given extension to X consists of multiple requests. Defining 10 new features as 10 separate extensions is a bad practice. Rather, they should be packaged into a single extension and should use minor opcodes to distinguish the requests. The symbols and macros used for writing stubs to Xlib are listed in <X11/Xlibint.h>. Basic Protocol Support Routines The basic protocol requests for extensions are and . XQueryExtension Bool XQueryExtension Display *display char *name int *major_opcode_return int *first_event_return int *first_error_return display Specifies the connection to the X server. name Specifies the extension name. major_opcode_return Returns the major opcode. first_event_return Returns the first event code, if any. first_error_return Returns the first error code, if any. The function determines if the named extension is present. If the extension is not present, returns False; otherwise, it returns True. If the extension is present, returns the major opcode for the extension to major_opcode_return; otherwise, it returns zero. Any minor opcode and the request formats are specific to the extension. If the extension involves additional event types, returns the base event type code to first_event_return; otherwise, it returns zero. The format of the events is specific to the extension. If the extension involves additional error codes, returns the base error code to first_error_return; otherwise, it returns zero. The format of additional data in the errors is specific to the extension. If the extension name is not in the Host Portable Character Encoding the result is implementation-dependent. Uppercase and lowercase matter; the strings ``thing'', ``Thing'', and ``thinG'' are all considered different names. XListExtensions char **XListExtensions Display *display int *nextensions_return display Specifies the connection to the X server. nextensions_return Returns the number of extensions listed. The function returns a list of all extensions supported by the server. If the data returned by the server is in the Latin Portable Character Encoding, then the returned strings are in the Host Portable Character Encoding. Otherwise, the result is implementation-dependent. XFreeExtensionList XFreeExtensionList char **list list Specifies the list of extension names. The function frees the memory allocated by . Hooking into Xlib These functions allow you to hook into the library. They are not normally used by application programmers but are used by people who need to extend the core X protocol and the X library interface. The functions, which generate protocol requests for X, are typically called stubs. In extensions, stubs first should check to see if they have initialized themselves on a connection. If they have not, they then should call to attempt to initialize themselves on the connection. If the extension needs to be informed of GC/font allocation or deallocation or if the extension defines new event types, the functions described here allow the extension to be called when these events occur. The XExtCodes structure returns the information from and is defined in <X11/Xlib.h>: XExtCodes typedef struct _XExtCodes { /* public to extension, cannot be changed */ int extension; /* extension number */ int major_opcode; /* major op-code assigned by server */ int first_event; /* first event number for the extension */ int first_error; /* first error number for the extension */ } XExtCodes; XInitExtension XExtCodes *XInitExtension Display *display char *name display Specifies the connection to the X server. name Specifies the extension name. The function determines if the named extension exists. Then, it allocates storage for maintaining the information about the extension on the connection, chains this onto the extension list for the connection, and returns the information the stub implementor will need to access the extension. If the extension does not exist, returns NULL. If the extension name is not in the Host Portable Character Encoding, the result is implementation-dependent. Uppercase and lowercase matter; the strings ``thing'', ``Thing'', and ``thinG'' are all considered different names. The extension number in the XExtCodes structure is needed in the other calls that follow. This extension number is unique only to a single connection. XAddExtension XExtCodes *XAddExtension Display *display display Specifies the connection to the X server. For local Xlib extensions, the function allocates the XExtCodes structure, bumps the extension number count, and chains the extension onto the extension list. (This permits extensions to Xlib without requiring server extensions.) Hooks into the Library These functions allow you to define procedures that are to be called when various circumstances occur. The procedures include the creation of a new GC for a connection, the copying of a GC, the freeing of a GC, the creating and freeing of fonts, the conversion of events defined by extensions to and from wire format, and the handling of errors. All of these functions return the previous procedure defined for this extension. XESetCloseDisplay int XESetCloseDisplay Display *display int extension int (*proc)() display Specifies the connection to the X server. extension Specifies the extension number. proc Specifies the procedure to call when the display is closed. The function defines a procedure to be called whenever XCloseDisplay is called. It returns any previously defined procedure, usually NULL. When XCloseDisplay is called, your procedure is called with these arguments: int (*proc) Display *display XExtCodes *codes XESetCreateGC int *XESetCreateGC Display *display int extension int (*proc)() display Specifies the connection to the X server. extension Specifies the extension number. proc Specifies the procedure to call when a GC is closed. The function defines a procedure to be called whenever a new GC is created. It returns any previously defined procedure, usually NULL. When a GC is created, your procedure is called with these arguments: int (*proc) Display *display GC gc XExtCodes *codes XESetCopyGC int *XESetCopyGC Display *display int extension int (*proc)() display Specifies the connection to the X server. extension Specifies the extension number. proc Specifies the procedure to call when GC components are copied. The function defines a procedure to be called whenever a GC is copied. It returns any previously defined procedure, usually NULL. When a GC is copied, your procedure is called with these arguments: int (*proc) Display *display GC gc XExtCodes *codes int *XESetFreeGC Display *display int extension int (*proc)() display Specifies the connection to the X server. extension Specifies the extension number. proc Specifies the procedure to call when a GC is freed. The function defines a procedure to be called whenever a GC is freed. It returns any previously defined procedure, usually NULL. When a GC is freed, your procedure is called with these arguments: int (*proc) Display *display GC gc XExtCodes *codes XESetCreateFont int *XESetCreateFont Display *display int extension int (*proc)() display Specifies the connection to the X server. extension Specifies the extension number. proc Specifies the procedure to call when a font is created. The function defines a procedure to be called whenever and are called. It returns any previously defined procedure, usually NULL. When or is called, your procedure is called with these arguments: int (*proc) Display *display XFontStruct *fs XExtCodes *codes XESetFreeFont int *XESetFreeFont Display *display int extension int (*proc)() display Specifies the connection to the X server. extension Specifies the extension number. proc Specifies the procedure to call when a font is freed. The function defines a procedure to be called whenever is called. It returns any previously defined procedure, usually NULL. When is called, your procedure is called with these arguments: int (*proc) Display *display XFontStruct *fs XExtCodes *codes The and functions allow you to define new events to the library. An XEvent structure always has a type code (type int) as the first component. This uniquely identifies what kind of event it is. The second component is always the serial number (type unsigned long) of the last request processed by the server. The third component is always a Boolean (type Bool) indicating whether the event came from a SendEvent protocol request. The fourth component is always a pointer to the display the event was read from. The fifth component is always a resource ID of one kind or another, usually a window, carefully selected to be useful to toolkit dispatchers. The fifth component should always exist, even if the event does not have a natural destination; if there is no value from the protocol to put in this component, initialize it to zero. There is an implementation limit such that your host event structure size cannot be bigger than the size of the XEvent union of structures. There also is no way to guarantee that more than 24 elements or 96 characters in the structure will be fully portable between machines. XESetWireToEvent int *XESetWireToEvent Display *display int event_number Status (*proc)() display Specifies the connection to the X server. event_number Specifies the event code. proc Specifies the procedure to call when converting an event. The function defines a procedure to be called when an event needs to be converted from wire format (xEvent) to host format (XEvent). The event number defines which protocol event number to install a conversion procedure for. returns any previously defined procedure. You can replace a core event conversion function with one of your own, although this is not encouraged. It would, however, allow you to intercept a core event and modify it before being placed in the queue or otherwise examined. When Xlib needs to convert an event from wire format to host format, your procedure is called with these arguments: int (*proc) Display *display XEvent *re xEvent *event Your procedure must return status to indicate if the conversion succeeded. The re argument is a pointer to where the host format event should be stored, and the event argument is the 32-byte wire event structure. In the XEvent structure you are creating, you must fill in the five required members of the event structure. You should fill in the type member with the type specified for the xEvent structure. You should copy all other members from the xEvent structure (wire format) to the XEvent structure (host format). Your conversion procedure should return True if the event should be placed in the queue or False if it should not be placed in the queue. To initialize the serial number component of the event, call with the event and use the return value. _XSetLastRequestRead unsigned long_XSetLastRequestRead Display *display xGenericReply *rep display Specifies the connection to the X server. rep Specifies the wire event structure. The function computes and returns a complete serial number from the partial serial number in the event. XESetEventToWire Status *XESetEventToWire Display *display int event_number int (*proc)() display Specifies the connection to the X server. event_number Specifies the event code. proc Specifies the procedure to call when converting an event. The function defines a procedure to be called when an event needs to be converted from host format (XEvent) to wire format (xEvent) form. The event number defines which protocol event number to install a conversion procedure for. returns any previously defined procedure. It returns zero if the conversion fails or nonzero otherwise. You can replace a core event conversion function with one of your own, although this is not encouraged. It would, however, allow you to intercept a core event and modify it before being sent to another client. When Xlib needs to convert an event from host format to wire format, your procedure is called with these arguments: int (*proc) Display *display XEvent *re xEvent *event The re argument is a pointer to the host format event, and the event argument is a pointer to where the 32-byte wire event structure should be stored. You should fill in the type with the type from the XEvent structure. All other members then should be copied from the host format to the xEvent structure. XESetWireToError Bool *XESetWireToError Display *display int error_number Bool (*proc)() display Specifies the connection to the X server. error_number Specifies the error code. proc Specifies the procedure to call when an error is received. The function defines a procedure to be called when an extension error needs to be converted from wire format to host format. The error number defines which protocol error code to install the conversion procedure for. returns any previously defined procedure. Use this function for extension errors that contain additional error values beyond those in a core X error, when multiple wire errors must be combined into a single Xlib error, or when it is necessary to intercept an X error before it is otherwise examined. When Xlib needs to convert an error from wire format to host format, the procedure is called with these arguments: int (*proc) Display *display XErrorEvent *he xError *we The he argument is a pointer to where the host format error should be stored. The structure pointed at by he is guaranteed to be as large as an XEvent structure and so can be cast to a type larger than an XErrorEvent to store additional values. If the error is to be completely ignored by Xlib (for example, several protocol error structures will be combined into one Xlib error), then the function should return False; otherwise, it should return True. XESetError int *XESetError Display *display int extension int (*proc)() display Specifies the connection to the X server. extension Specifies the extension number. proc Specifies the procedure to call when an error is received. Inside Xlib, there are times that you may want to suppress the calling of the external error handling when an error occurs. This allows status to be returned on a call at the cost of the call being synchronous (though most such functions are query operations, in any case, and are typically programmed to be synchronous). When Xlib detects a protocol error in , it calls your procedure with these arguments: int (*proc) Display *display xError *err XExtCodes *codes int *ret_code The err argument is a pointer to the 32-byte wire format error. The codes argument is a pointer to the extension codes structure. The ret_code argument is the return code you may want returned to. If your procedure returns a zero value, the error is not suppressed, and the client's error handler is called. (For further information, see section 11.8.2.) If your procedure returns nonzero, the error is suppressed, and returns the value of ret_code. XESetErrorString char *XESetErrorString Display *display int extension char *(*proc)() display Specifies the connection to the X server. extension Specifies the extension number. proc Specifies the procedure to call to obtain an error string. The function returns a string to the user for an error. allows you to define a procedure to be called that should return a pointer to the error message. The following is an example. int (*proc) Display *display int code XExtCodes *codes char *buffer int nbytes Your procedure is called with the error code for every error detected. You should copy nbytes of a null-terminated string containing the error message into buffer. XESetPrintErrorValues void *XESetPrintErrorValues Display *display int extension void (*proc)() display Specifies the connection to the X server. extension Specifies the extension number. proc Specifies the procedure to call when an error is printed. The function defines a procedure to be called when an extension error is printed, to print the error values. Use this function for extension errors that contain additional error values beyond those in a core X error. It returns any previously defined procedure. When Xlib needs to print an error, the procedure is called with these arguments: void (*proc) Display *display XErrorEvent *ev void *fp The structure pointed at by ev is guaranteed to be as large as an XEvent structure and so can be cast to a type larger than an XErrorEvent to obtain additional values set by using . The underlying type of the fp argument is system dependent; on a POSIX-compliant system, fp should be cast to type FILE*. XESetFlushGC int *XESetFlushGC Display *display int extension int *(*proc)() display Specifies the connection to the X server. extension Specifies the extension number. proc Specifies the procedure to call when a GC is flushed. The procedure set by the function has the same interface as the procedure set by the function, but is called when a GC cache needs to be updated in the server. XESetBeforeFlush int *XESetCopyGC Display *display int extension int *(*proc)() display Specifies the connection to the X server. extension Specifies the extension number. proc Specifies the procedure to call when a buffer is flushed. The XESetBeforeFlush function defines a procedure to be called when data is about to be sent to the server. When data is about to be sent, your procedure is called one or more times with these arguments: void (*proc) Display *display XExtCodes *codes char *data long len The data argument specifies a portion of the outgoing data buffer, and its length in bytes is specified by the len argument. Your procedure must not alter the contents of the data and must not do additional protocol requests to the same display. Hooks onto Xlib Data Structures Various Xlib data structures have provisions for extension procedures to chain extension supplied data onto a list. These structures are GC, Visual, Screen, ScreenFormat, Display, and XFontStruct. Because the list pointer is always the first member in the structure, a single set of procedures can be used to manipulate the data on these lists. The following structure is used in the functions in this section and is defined in <X11/Xlib.h> XExtData typedef struct _XExtData { int number; /* number returned by XInitExtension */ struct _XExtData *next; /* next item on list of data for structure */ int (*free_private)(); /* if defined, called to free private */ XPointer private_data; /* data private to this extension. */ } XExtData; When any of the data structures listed above are freed, the list is walked, and the structure's free procedure (if any) is called. If free is NULL, then the library frees both the data pointed to by the private_data member and the structure itself. union { Display *display; GC gc; Visual *visual; Screen *screen; ScreenFormat *pixmap_format; XFontStruct *font } XEDataObject; XEHeadOfExtensionList XExtData **XEHeadOfExtensionList XEDataObject object object Specifies the object. The function returns a pointer to the list of extension structures attached to the specified object. In concert with , allows an extension to attach arbitrary data to any of the structures of types contained in XEDataObject. XAddToExtensionList XAddToExtensionList XExtData **structure XExtData *ext_data structure Specifies the extension list. ext_data Specifies the extension data structure to add. The structure argument is a pointer to one of the data structures enumerated above. You must initialize ext_data->number with the extension number before calling this function. XFindOnExtensionList XExtData *XFindOnExtensionList struct_XExtData **structure int number structure Specifies the extension list. number Specifies the extension number from . The function returns the first extension data structure for the extension numbered number. It is expected that an extension will add at most one extension data structure to any single data structure's extension data list. There is no way to find additional structures. The macro, which allocates and returns a resource ID, is defined in <X11/Xlib.h>. XAllocID XAllocID Display *display display Specifies the connection to the X server. This macro is a call through the Display structure to an internal resource ID allocator. It returns a resource ID that you can use when creating new resources. The macro allocates and returns an array of resource ID. XAllocIDs XAllocIDs Display *display XID *ids_return int count display Specifies the connection to the X server. ids_return Returns the resource IDs. rep Specifies the number of resource IDs requested. This macro is a call through the Display structure to an internal resource ID allocator. It returns resource IDs to the array supplied by the caller. To correctly handle automatic reuse of resource IDs, you must call when requesting multiple resource IDs. This call might generate protocol requests. GC Caching GCs are cached by the library to allow merging of independent change requests to the same GC into single protocol requests. This is typically called a write-back cache. Any extension procedure whose behavior depends on the contents of a GC must flush the GC cache to make sure the server has up-to-date contents in its GC. The macro checks the dirty bits in the library's GC structure and calls if any elements have changed. The macro is defined as follows: FlushGC FlushGC Display *display GC gc display Specifies the connection to the X server. gc Specifies the GC. Note that if you extend the GC to add additional resource ID components, you should ensure that the library stub sends the change request immediately. This is because a client can free a resource immediately after using it, so if you only stored the value in the cache without forcing a protocol request, the resource might be destroyed before being set into the GC. You can use the procedure to force the cache to be flushed. The procedure is defined as follows: _XFlushGCCache _XFlushGCCache Display *display GC gc display Specifies the connection to the X server. gc Specifies the GC. Graphics Batching If you extend X to add more poly graphics primitives, you may be able to take advantage of facilities in the library to allow back-to-back single calls to be transformed into poly requests. This may dramatically improve performance of programs that are not written using poly requests. A pointer to an xReq, called last_req in the display structure, is the last request being processed. By checking that the last request type, drawable, gc, and other options are the same as the new one and that there is enough space left in the buffer, you may be able to just extend the previous graphics request by extending the length field of the request and appending the data to the buffer. This can improve performance by five times or more in naive programs. For example, here is the source for the stub. (Writing extension stubs is discussed in the next section.) #include <X11/Xlibint.h> /* precompute the maximum size of batching request allowed */ static int size = sizeof(xPolyPointReq) + EPERBATCH * sizeof(xPoint); XDrawPoint(dpy, d, gc, x, y) register Display *dpy; Drawable d; GC gc; int x, y; /* INT16 */ { xPoint *point; LockDisplay(dpy); FlushGC(dpy, gc); { register xPolyPointReq *req = (xPolyPointReq *) dpy->last_req; /* if same as previous request, with same drawable, batch requests */ if ( (req->reqType == X_PolyPoint) && (req->drawable == d) && (req->gc == gc->gid) && (req->coordMode == CoordModeOrigin) && ((dpy->bufptr + sizeof (xPoint)) <= dpy->bufmax) && (((char *)dpy->bufptr - (char *)req) < size) ) { point = (xPoint *) dpy->bufptr; req->length += sizeof (xPoint) >> 2; dpy->bufptr += sizeof (xPoint); } else { GetReqExtra(PolyPoint, 4, req); /* 1 point = 4 bytes */ req->drawable = d; req->gc = gc->gid; req->coordMode = CoordModeOrigin; point = (xPoint *) (req + 1); } point->x = x; point->y = y; } UnlockDisplay(dpy); SyncHandle(); } To keep clients from generating very long requests that may monopolize the server, there is a symbol defined in <X11/Xlibint.h> of EPERBATCH on the number of requests batched. Most of the performance benefit occurs in the first few merged requests. Note that is called before picking up the value of last_req, because it may modify this field. Writing Extension Stubs All X requests always contain the length of the request, expressed as a 16-bit quantity of 32 bits. This means that a single request can be no more than 256K bytes in length. Some servers may not support single requests of such a length. The value of dpy->max_request_size contains the maximum length as defined by the server implementation. For further information, see X Window System Protocol. Requests, Replies, and Xproto.h The <X11/Xproto.h> file contains three sets of definitions that are of interest to the stub implementor: request names, request structures, and reply structures. You need to generate a file equivalent to <X11/Xproto.h> for your extension and need to include it in your stub procedure. Each stub procedure also must include <X11/Xlibint.h>. The identifiers are deliberately chosen in such a way that, if the request is called X_DoSomething, then its request structure is xDoSomethingReq, and its reply is xDoSomethingReply. The GetReq family of macros, defined in <X11/Xlibint.h>, takes advantage of this naming scheme. For each X request, there is a definition in <X11/Xproto.h> that looks similar to this: #define X_DoSomething 42 In your extension header file, this will be a minor opcode, instead of a major opcode. Request Format Every request contains an 8-bit major opcode and a 16-bit length field expressed in units of 4 bytes. Every request consists of 4 bytes of header (containing the major opcode, the length field, and a data byte) followed by zero or more additional bytes of data. The length field defines the total length of the request, including the header. The length field in a request must equal the minimum length required to contain the request. If the specified length is smaller or larger than the required length, the server should generate a BadLength error. Unused bytes in a request are not required to be zero. Extensions should be designed in such a way that long protocol requests can be split up into smaller requests, if it is possible to exceed the maximum request size of the server. The protocol guarantees the maximum request size to be no smaller than 4096 units (16384 bytes). Major opcodes 128 through 255 are reserved for extensions. Extensions are intended to contain multiple requests, so extension requests typically have an additional minor opcode encoded in the second data byte in the request header, but the placement and interpretation of this minor opcode as well as all other fields in extension requests are not defined by the core protocol. Every request is implicitly assigned a sequence number (starting with one) used in replies, errors, and events. To help but not cure portability problems to certain machines, the B16 and B32 macros have been defined so that they can become bitfield specifications on some machines. For example, on a Cray, these should be used for all 16-bit and 32-bit quantities, as discussed below. Most protocol requests have a corresponding structure typedef in <X11/Xproto.h>, which looks like: xDoSomethingReq typedef struct _DoSomethingReq { CARD8 reqType; /* X_DoSomething */ CARD8 someDatum; /* used differently in different requests */ CARD16 length B16; /* total # of bytes in request, divided by 4 */ ... /* request-specific data */ ... } xDoSomethingReq; If a core protocol request has a single 32-bit argument, you need not declare a request structure in your extension header file. Instead, such requests use the xResourceReq structure in <X11/Xproto.h>. This structure is used for any request whose single argument is a Window, Pixmap, Drawable, GContext, Font, Cursor, Colormap, Atom, or VisualID. xResourceReq typedef struct _ResourceReq { CARD8 reqType; /* the request type, e.g. X_DoSomething */ BYTE pad; /* not used */ CARD16 length B16; /* 2 (= total # of bytes in request, divided by 4) */ CARD32 id B32; /* the Window, Drawable, Font, GContext, etc. */ } xResourceReq; If convenient, you can do something similar in your extension header file. In both of these structures, the reqType field identifies the type of the request (for example, X_MapWindow or X_CreatePixmap). The length field tells how long the request is in units of 4-byte longwords. This length includes both the request structure itself and any variable-length data, such as strings or lists, that follow the request structure. Request structures come in different sizes, but all requests are padded to be multiples of four bytes long. A few protocol requests take no arguments at all. Instead, they use the xReq structure in <X11/Xproto.h>, which contains only a reqType and a length (and a pad byte). If the protocol request requires a reply, then <X11/Xproto.h> also contains a reply structure typedef: xDoSomethingReply typedef struct _DoSomethingReply { BYTE type; /* always X_Reply */ BYTE someDatum; /* used differently in different requests */ CARD16 sequenceNumber B16; /* # of requests sent so far */ CARD32 length B32; /* # of additional bytes, divided by 4 */ ... /* request-specific data */ ... } xDoSomethingReply; Most of these reply structures are 32 bytes long. If there are not that many reply values, then they contain a sufficient number of pad fields to bring them up to 32 bytes. The length field is the total number of bytes in the request minus 32, divided by 4. This length will be nonzero only if: The reply structure is followed by variable-length data, such as a list or string. The reply structure is longer than 32 bytes. Only GetWindowAttributesl, QueryFont, QueryKeymap, and GetKeyboardControl have reply structures longer than 32 bytes in the core protocol. A few protocol requests return replies that contain no data. <X11/Xproto.h> does not define reply structures for these. Instead, they use the xGenericReply structure, which contains only a type, length, and sequence number (and sufficient padding to make it 32 bytes long). Starting to Write a Stub Procedure An Xlib stub procedure should start like this: #include "<X11/Xlibint.h> XDoSomething (arguments, ... ) /* argument declarations */ { register XDoSomethingReq *req; ... If the protocol request has a reply, then the variable declarations should include the reply structure for the request. The following is an example: xDoSomethingReply rep; Locking Data Structures To lock the display structure for systems that want to support multithreaded access to a single display connection, each stub will need to lock its critical section. Generally, this section is the point from just before the appropriate GetReq call until all arguments to the call have been stored into the buffer. The precise instructions needed for this locking depend upon the machine architecture. Two calls, which are generally implemented as macros, have been provided. LockDisplay LockDisplay Display *display UnlockDisplay UnlockDisplay Display *display display Specifies the connection to the X server. Sending the Protocol Request and Arguments After the variable declarations, a stub procedure should call one of four macros defined in <X11/Xlibint.h>: GetReq, GetReqExtra, GetResReq, or GetEmptyReq. All of these macros take, as their first argument, the name of the protocol request as declared in <X11/Xproto.h> except with X_ removed. Each one declares a Display structure pointer, called dpy, and a pointer to a request structure, called req, which is of the appropriate type. The macro then appends the request structure to the output buffer, fills in its type and length field, and sets req to point to it. If the protocol request has no arguments (for instance, X_GrabServer), then use GetEmptyReq. GetEmptyReq (DoSomething, req); If the protocol request has a single 32-bit argument (such as a Pixmap, Window, Drawable, Atom, and so on), then use GetResReq. The second argument to the macro is the 32-bit object. X_MapWindow is a good example. GetResReq (DoSomething, rid, req); The rid argument is the Pixmap, Window, or other resource ID. If the protocol request takes any other argument list, then call GetReq. After the GetReq, you need to set all the other fields in the request structure, usually from arguments to the stub procedure. GetReq (DoSomething, req); /* fill in arguments here */ req->arg1 = arg1; req->arg2 = arg2; ... A few stub procedures (such as and ) return a resource ID to the caller but pass a resource ID as an argument to the protocol request. Such procedures use the macro to allocate a resource ID from the range of IDs that were assigned to this client when it opened the connection. rid = req->rid = XAllocID(); ... return (rid); Finally, some stub procedures transmit a fixed amount of variable-length data after the request. Typically, these procedures (such as and ) are special cases of more general functions like and . These procedures use GetReqExtra, which is the same as GetReq except that it takes an additional argument (the number of extra bytes to allocate in the output buffer after the request structure). This number should always be a multiple of four. Note that it is possible for req to be set to NULL as a defensive measure if the requested length exceeds the Xlib's buffer size (normally 16K). Variable Length Arguments Some protocol requests take additional variable-length data that follow the xDoSomethingReq structure. The format of this data varies from request to request. Some requests require a sequence of 8-bit bytes, others a sequence of 16-bit or 32-bit entities, and still others a sequence of structures. It is necessary to add the length of any variable-length data to the length field of the request structure. That length field is in units of 32-bit longwords. If the data is a string or other sequence of 8-bit bytes, then you must round the length up and shift it before adding: req->length += (nbytes+3)>>2; To transmit variable-length data, use the macros. If the data fits into the output buffer, then this macro copies it to the buffer. If it does not fit, however, the macro calls _XSend, which transmits first the contents of the buffer and then your data. The macros take three arguments: the display, a pointer to the beginning of the data, and the number of bytes to be sent. Data display (char * , Data16, and Data32 are macros that may use their last argument more than once, so that argument should be a variable rather than an expression such as ``nitems*sizeof(item)''. You should do that kind of computation in a separate statement before calling them. Use the appropriate macro when sending byte, short, or long data. If the protocol request requires a reply, then call the procedure _XSend instead of the macro. _XSend takes the same arguments, but because it sends your data immediately instead of copying it into the output buffer (which would later be flushed anyway by the following call on ), it is faster. Replies If the protocol request has a reply, then call after you have finished dealing with all the fixed-length and variable-length arguments. flushes the output buffer and waits for an xReply packet to arrive. If any events arrive in the meantime, places them in the queue for later use. _XReply Status _XReply Display *display xReply *rep int extra Bool discard display Specifies the connection to the X server. rep Specifies the reply structure. extra Specifies the number of 32-bit words expected after the replay. discard Specifies if any data beyond that specified in the extra argument should be discarded. The function waits for a reply packet and copies its contents into the specified rep. handles error and event packets that occur before the reply is received. takes four arguments: A Display * structure A pointer to a reply structure (which must be cast to an xReply *) The number of additional 32-bit words (beyond sizeof( xReply) = 32 bytes) in the reply structure A Boolean that indicates whether is to discard any additional bytes beyond those it was told to read Because most reply structures are 32 bytes long, the third argument is usually 0. The only core protocol exceptions are the replies to GetWindowAttributesl, QueryFont, QueryKeymap, and GetKeyboardControl, which have longer replies. The last argument should be False if the reply structure is followed by additional variable-length data (such as a list or string). It should be True if there is not any variable-length data. This last argument is provided for upward-compatibility reasons to allow a client to communicate properly with a hypothetical later version of the server that sends more data than the client expected. For example, some later version of GetWindowAttributesl might use a larger, but compatible, xGetWindowAttributesReply that contains additional attribute data at the end. returns True if it received a reply successfully or False if it received any sort of error. For a request with a reply that is not followed by variable-length data, you write something like: _XReply(display, (xReply *)&rep, 0, True); *ret1 = rep.ret1; *ret2 = rep.ret2; *ret3 = rep.ret3; ... UnlockDisplay(dpy); SyncHandle(); return (rep.ret4); } If there is variable-length data after the reply, change the True to False, and use the appropriate function to read the variable-length data. _XRead Display *display char *data_return long nbytes display Specifies the connection to the X server. data_return Specifies the buffer. nbytes Specifies the number of bytes required. The function reads the specified number of bytes into data_return. _XRead16 Display *display short *data_return long nbytes display Specifies the connection to the X server. data_return Specifies the buffer. nbytes Specifies the number of bytes required. The function reads the specified number of bytes, unpacking them as 16-bit quantities, into the specified array as shorts. _XRead32 Display *display long *data_return long nbytes display Specifies the connection to the X server. data_return Specifies the buffer. nbytes Specifies the number of bytes required. The function reads the specified number of bytes, unpacking them as 32-bit quantities, into the specified array as longs. _XRead16Pad Display *display short *data_return long nbytes display Specifies the connection to the X server. data_return Specifies the buffer. nbytes Specifies the number of bytes required. The function reads the specified number of bytes, unpacking them as 16-bit quantities, into the specified array as shorts. If the number of bytes is not a multiple of four, reads and discards up to two additional pad bytes. _XReadPad Display *display char *data_return long nbytes display Specifies the connection to the X server. data_return Specifies the buffer. nbytes Specifies the number of bytes required. The function reads the specified number of bytes into data_return. If the number of bytes is not a multiple of four, reads and discards up to three additional pad bytes. Each protocol request is a little different. For further information, see the Xlib sources for examples. Synchronous Calling Each procedure should have a call, just before returning to the user, to a macro called SyncHandle. If synchronous mode is enabled (see XSynchronize), the request is sent immediately. The library, however, waits until any error the procedure could generate at the server has been handled. Allocating and Deallocating Memory To support the possible reentry of these procedures, you must observe several conventions when allocating and deallocating memory, most often done when returning data to the user from the window system of a size the caller could not know in advance (for example, a list of fonts or a list of extensions). The standard C library functions on many systems are not protected against signals or other multithreaded uses. The following analogies to standard I/O library functions have been defined: These should be used in place of any calls you would make to the normal C library functions. If you need a single scratch buffer inside a critical section (for example, to pack and unpack data to and from the wire protocol), the general memory allocators may be too expensive to use (particularly in output functions, which are performance critical). The following function returns a scratch buffer for use within a critical section: _XAllocScratch char *_XAllocScratch Display *display unsigned long nbytes display Specifies the connection to the X server. nbytes Specifies the number of bytes required. This storage must only be used inside of a critical section of your stub. The returned pointer cannot be assumed valid after any call that might permit another thread to execute inside Xlib. For example, the pointer cannot be assumed valid after any use of the GetReq or families of macros, after any use of , or after any use of the _XSend or families of functions. The following function returns a scratch buffer for use across critical sections: _XAllocTemp char *_XAllocTemp Display *display unsigned long nbytes display Specifies the connection to the X server. nbytes Specifies the number of bytes required. This storage can be used across calls that might permit another thread to execute inside Xlib. The storage must be explicitly returned to Xlib. The following function returns the storage: _XFreeTemp void _XFreeTemp Display *display char *buf unsigned long nbytes display Specifies the connection to the X server. buf Specifies the buffer to return. nbytes Specifies the size of the buffer. You must pass back the same pointer and size that were returned by . Portability Considerations Many machine architectures, including many of the more recent RISC architectures, do not correctly access data at unaligned locations; their compilers pad out structures to preserve this characteristic. Many other machines capable of unaligned references pad inside of structures as well to preserve alignment, because accessing aligned data is usually much faster. Because the library and the server use structures to access data at arbitrary points in a byte stream, all data in request and reply packets must be naturally aligned; that is, 16-bit data starts on 16-bit boundaries in the request and 32-bit data on 32-bit boundaries. All requests must be a multiple of 32 bits in length to preserve the natural alignment in the data stream. You must pad structures out to 32-bit boundaries. Pad information does not have to be zeroed unless you want to preserve such fields for future use in your protocol requests. Floating point varies radically between machines and should be avoided completely if at all possible. This code may run on machines with 16-bit ints. So, if any integer argument, variable, or return value either can take only nonnegative values or is declared as a CARD16 in the protocol, be sure to declare it as unsigned int and not as int. (This, of course, does not apply to Booleans or enumerations.) Similarly, if any integer argument or return value is declared CARD32 in the protocol, declare it as an unsigned long and not as int or long. This also goes for any internal variables that may take on values larger than the maximum 16-bit unsigned int. The library currently assumes that a char is 8 bits, a short is 16 bits, an int is 16 or 32 bits, and a long is 32 bits. The PackData macro is a half-hearted attempt to deal with the possibility of 32 bit shorts. However, much more work is needed to make this work properly. Deriving the Correct Extension Opcode The remaining problem a writer of an extension stub procedure faces that the core protocol does not face is to map from the call to the proper major and minor opcodes. While there are a number of strategies, the simplest and fastest is outlined below. Declare an array of pointers, _NFILE long (this is normally found in <stdio.h> and is the number of file descriptors supported on the system) of type XExtCodes. Make sure these are all initialized to NULL. When your stub is entered, your initialization test is just to use the display pointer passed in to access the file descriptor and an index into the array. If the entry is NULL, then this is the first time you are entering the procedure for this display. Call your initialization procedure and pass to it the display pointer. Once in your initialization procedure, call ; if it succeeds, store the pointer returned into this array. Make sure to establish a close display handler to allow you to zero the entry. Do whatever other initialization your extension requires. (For example, install event handlers and so on.) Your initialization procedure would normally return a pointer to the XExtCodes structure for this extension, which is what would normally be found in your array of pointers. After returning from your initialization procedure, the stub can now continue normally, because it has its major opcode safely in its hand in the XExtCodes structure.
The function reads the specified number of bytes into data_return. If the number of bytes is not a multiple of four, Resource Manager Functions A program often needs a variety of options in the X environment (for example, fonts, colors, icons, and cursors). Specifying all of these options on the command line is awkward because users may want to customize many aspects of the program and need a convenient way to establish these customizations as the default settings. The resource manager is provided for this purpose. Resource specifications are usually stored in human-readable files and in server properties. The resource manager is a database manager with a twist. In most database systems, you perform a query using an imprecise specification, and you get back a set of records. The resource manager, however, allows you to specify a large set of values with an imprecise specification, to query the database with a precise specification, and to get back only a single value. This should be used by applications that need to know what the user prefers for colors, fonts, and other resources. It is this use as a database for dealing with X resources that inspired the name "Resource Manager," although the resource manager can be and is used in other ways. For example, a user of your application may want to specify that all windows should have a blue background but that all mail-reading windows should have a red background. With well-engineered and coordinated applications, a user can define this information using only two lines of specifications. As an example of how the resource manager works, consider a mail-reading application called xmh. Assume that it is designed so that it uses a complex window hierarchy all the way down to individual command buttons, which may be actual small subwindows in some toolkits. These are often called objects or widgets. In such toolkit systems, each user interface object can be composed of other objects and can be assigned a name and a class. Fully qualified names or classes can have arbitrary numbers of component names, but a fully qualified name always has the same number of component names as a fully qualified class. This generally reflects the structure of the application as composed of these objects, starting with the application itself. For example, the xmh mail program has a name "xmh" and is one of a class of "Mail" programs. By convention, the first character of class components is capitalized, and the first letter of name components is in lowercase. Each name and class finally has an attribute (for example, "foreground" or "font"). If each window is properly assigned a name and class, it is easy for the user to specify attributes of any portion of the application. At the top level, the application might consist of a paned window (that is, a window divided into several sections) named "toc". One pane of the paned window is a button box window named "buttons" and is filled with command buttons. One of these command buttons is used to incorporate new mail and has the name "incorporate". This window has a fully qualified name, "xmh.toc.buttons.incorporate", and a fully qualified class, "Xmh.Paned.Box.Command". Its fully qualified name is the name of its parent, "xmh.toc.buttons", followed by its name, "incorporate". Its class is the class of its parent, "Xmh.Paned.Box", followed by its particular class, "Command". The fully qualified name of a resource is the attribute's name appended to the object's fully qualified name, and the fully qualified class is its class appended to the object's class. The incorporate button might need the following resources: Title string, Font, Foreground color for its inactive state, Background color for its inactive state, Foreground color for its active state, and Background color for its active state. Each resource is considered to be an attribute of the button and, as such, has a name and a class. For example, the foreground color for the button in its active state might be named "activeForeground", and its class might be "Foreground". When an application looks up a resource (for example, a color), it passes the complete name and complete class of the resource to a look-up routine. The resource manager compares this complete specification against the incomplete specifications of entries in the resource database, finds the best match, and returns the corresponding value for that entry. The definitions for the resource manager are contained in <X11/Xresource.h>. X11/Xresource.h Files<X11/Xresource.h> Headers<X11/Xresource.h> Resource File Syntax The syntax of a resource file is a sequence of resource lines terminated by newline characters or the end of the file. The syntax of an individual resource line is: ResourceLine = Comment | IncludeFile | ResourceSpec | <empty line> Comment = "!" {<any character except null or newline>} IncludeFile = "#" WhiteSpace "include" WhiteSpace FileName WhiteSpace FileName = <valid filename for operating system> ResourceSpec = WhiteSpace ResourceName WhiteSpace ":" WhiteSpace Value ResourceName = [Binding] {Component Binding} ComponentName Binding = "." | "*" WhiteSpace = {<space> | <horizontal tab>} Component = "?" | ComponentName ComponentName = NameChar {NameChar} NameChar = "a"-"z" | "A"-"Z" | "0"-"9" | "_" | "-" Value = {<any character except null or unescaped newline>} Elements separated by vertical bar (|) are alternatives. Curly braces ({......}) indicate zero or more repetitions of the enclosed elements. Square brackets ([......]) indicate that the enclosed element is optional. Quotes ("......") are used around literal characters. IncludeFile lines are interpreted by replacing the line with the contents of the specified file. The word "include" must be in lowercase. The file name is interpreted relative to the directory of the file in which the line occurs (for example, if the file name contains no directory or contains a relative directory specification). If a ResourceName contains a contiguous sequence of two or more Binding characters, the sequence will be replaced with a single ".." character if the sequence contains only ".." characters; otherwise, the sequence will be replaced with a single "*" character. A resource database never contains more than one entry for a given ResourceName. If a resource file contains multiple lines with the same ResourceName, the last line in the file is used. Any white space characters before or after the name or colon in a ResourceSpec are ignored. To allow a Value to begin with white space, the two-character sequence "\\space" (backslash followed by space) is recognized and replaced by a space character, and the two-character sequence "\\tab" (backslash followed by horizontal tab) is recognized and replaced by a horizontal tab character. To allow a Value to contain embedded newline characters, the two-character sequence "\\n" is recognized and replaced by a newline character. To allow a Value to be broken across multiple lines in a text file, the two-character sequence "\\newline" (backslash followed by newline) is recognized and removed from the value. To allow a Value to contain arbitrary character codes, the four-character sequence "\\nnn", where each n is a digit character in the range of "0"-"7", is recognized and replaced with a single byte that contains the octal value specified by the sequence. Finally, the two-character sequence "\newline" is recognized and replaced with a single backslash. As an example of these sequences, the following resource line contains a value consisting of four characters: a backslash, a null, a "z", and a newline: magic.values: \\000\ z\n Resource Manager Matching Rules The algorithm for determining which resource database entry matches a given query is the heart of the resource manager. All queries must fully specify the name and class of the desired resource (use of the characters "*" and "?" is not permitted). The library supports up to 100 components in a full name or class. Resources are stored in the database with only partially specified names and classes, using pattern matching constructs. An asterisk (*) is a loose binding and is used to represent any number of intervening components, including none. A period (.) is a tight binding and is used to separate immediately adjacent components. A question mark (?) is used to match any single component name or class. A database entry cannot end in a loose binding; the final component (which cannot be the character "?") must be specified. The lookup algorithm searches the database for the entry that most closely matches (is most specific for) the full name and class being queried. When more than one database entry matches the full name and class, precedence rules are used to select just one. The full name and class are scanned from left to right (from highest level in the hierarchy to lowest), one component at a time. At each level, the corresponding component and/or binding of each matching entry is determined, and these matching components and bindings are compared according to precedence rules. Each of the rules is applied at each level before moving to the next level, until a rule selects a single entry over all others. The rules, in order of precedence, are: An entry that contains a matching component (whether name, class, or the character "?") takes precedence over entries that elide the level (that is, entries that match the level in a loose binding). An entry with a matching name takes precedence over both entries with a matching class and entries that match using the character "?". An entry with a matching class takes precedence over entries that match using the character "?". An entry preceded by a tight binding takes precedence over entries preceded by a loose binding. To illustrate these rules, consider the following resource database entries: xmh*Paned*activeForeground: red (entry A) *incorporate.Foreground: blue (entry B) xmh.toc*Command*activeForeground: green (entry C) xmh.toc*?.Foreground: white (entry D) xmh.toc*Command.activeForeground: black (entry E) Consider a query for the resource: xmh.toc.messagefunctions.incorporate.activeForeground (name) Xmh.Paned.Box.Command.Foreground (class) At the first level (xmh, Xmh), rule 1 eliminates entry B. At the second level (toc, Paned), rule 2 eliminates entry A. At the third level (messagefunctions, Box), no entries are eliminated. At the fourth level (incorporate, Command), rule 2 eliminates entry D. At the fifth level (activeForeground, Foreground), rule 3 eliminates entry C. Quarks Most uses of the resource manager involve defining names, classes, and representation types as string constants. However, always referring to strings in the resource manager can be slow, because it is so heavily used in some toolkits. To solve this problem, a shorthand for a string is used in place of the string in many of the resource manager functions. Simple comparisons can be performed rather than string comparisons. The shorthand name for a string is called a quark and is the type XrmQuark. On some occasions, you may want to allocate a quark that has no string equivalent. A quark is to a string what an atom is to a string in the server, but its use is entirely local to your application. To allocate a new quark, use XrmUniqueQuark. XrmUniqueQuark XrmQuark XrmUniqueQuark() The XrmUniqueQuark function allocates a quark that is guaranteed not to represent any string that is known to the resource manager. Each name, class, and representation type is typedef'd as an XrmQuark. typedef int XrmQuark, *XrmQuarkList; typedef XrmQuark XrmName; typedef XrmQuark XrmClass; typedef XrmQuark XrmRepresentation; #define NULLQUARK ((XrmQuark) 0) Lists are represented as null-terminated arrays of quarks. The size of the array must be large enough for the number of components used. typedef XrmQuarkList XrmNameList; typedef XrmQuarkList XrmClassList; To convert a string to a quark, use or XrmPermStringToQuark. #define XrmStringToName(string) XrmStringToQuark(string) #define XrmStringToClass(string) XrmStringToQuark(string) #define XrmStringToRepresentation(string) XrmStringToQuark(string) XrmStringToQuark XrmPermStringToQuark XrmQuark XrmStringToQuark char *string string Specifies the string for which a quark(Ql is to be allocated. These functions can be used to convert from string to quark representation. If the string is not in the Host Portable Character Encoding, the conversion is implementation-dependent. The string argument to need not be permanently allocated storage. XrmPermStringToQuark is just like , except that Xlib is permitted to assume the string argument is permanently allocated, and, hence, that it can be used as the value to be returned by . For any given quark, if returns a non-NULL value, all future calls will return the same value (identical address). To convert a quark to a string, use . #define XrmNameToString(name) XrmQuarkToString(name) #define XrmClassToString(class) XrmQuarkToString(name) #define XrmRepresentationToString(type) XrmQuarkToString(type) XrmQuarkToString char *XrmQuarkToString XrmQuark quark quark Specifies the quark for which the equivalent string is desired. These functions can be used to convert from quark representation to string. The string pointed to by the return value must not be modified or freed. The returned string is byte-for-byte equal to the original string passed to one of the string-to-quark routines. If no string exists for that quark, returns NULL. For any given quark, if returns a non-NULL value, all future calls will return the same value (identical address). To convert a string with one or more components to a quark list, use . #define XrmStringToNameList(str,name) XrmStringToQuarkList((str), (name)) #define XrmStringToClassList(str,class) XrmStringToQuarkList((str), (class)) XrmStringToQuarkList void XrmStringToQuarkList char *string XrmQuarkList quarks_return string Specifies the string for which a quark list is to be allocated. quarks_return Returns the list of quarks. The caller must allocate sufficient space for the quarks list before calling . The function converts the null-terminated string (generally a fully qualified name) to a list of quarks. Note that the string must be in the valid ResourceName format (see section 15.1). If the string is not in the Host Portable Character Encoding, the conversion is implementation-dependent. A binding list is a list of type XrmBindingList and indicates if components of name or class lists are bound tightly or loosely (that is, if wildcarding of intermediate components is specified). typedef enum {XrmBindTightly, XrmBindLoosely} XrmBinding, *XrmBindingList; XrmBindTightly indicates that a period separates the components, and XrmBindLoosely indicates that an asterisk separates the components. To convert a string with one or more components to a binding list and a quark list, use . XrmStringToBindingQuarkList XrmStringToBindingQuarkList char *string XrmBindingList bindings_return XrmQuarkList quarks_return string Specifies the string for which a quark list is to be allocated. bindings_return Returns the binding list. The caller must allocate sufficient space for the binding list before calling . quarks_return Returns the list of quarks. The caller must allocate sufficient space for the quarks list before calling . Component names in the list are separated by a period or an asterisk character. The string must be in the format of a valid ResourceName (see section 15.1). If the string does not start with a period or an asterisk, a tight binding is assumed. For example, the string ``*a.b*c'' becomes: quarks: a b c bindings: loose tight loose Creating and Storing Databases XrmDatabase A resource database is an opaque type, XrmDatabase. Each database value is stored in an XrmValue structure. This structure consists of a size, an address, and a representation type. The size is specified in bytes. The representation type is a way for you to store data tagged by some application-defined type (for example, the strings ``font'' or ``color''). It has nothing to do with the C data type or with its class. The XrmValue structure is defined as: XrmValue typedef struct { unsigned int size; XPointer addr; } XrmValue, *XrmValuePtr; To initialize the resource manager, use . XrmInitialize void XrmInitialize void XrmInitialize(\|) To retrieve a database from disk, use . XrmGetFileDatabase XrmDatabase XrmGetFileDatabase char *filename filename Specifies the resource database file name. The function opens the specified file, creates a new resource database, and loads it with the specifications read in from the specified file. The specified file should contain a sequence of entries in valid ResourceLine format (see section 15.1); the database that results from reading a file with incorrect syntax is implementation-dependent. The file is parsed in the current locale, and the database is created in the current locale. If it cannot open the specified file, returns NULL. To store a copy of a database to disk, use . XrmPutFileDatabase void XrmPutFileDatabase XrmDatabase database char *stored_db database Specifies the database that is to be used. stored_db Specifies the file name for the stored database. The function stores a copy of the specified database in the specified file. Text is written to the file as a sequence of entries in valid ResourceLine format (see section 15.1). The file is written in the locale of the database. Entries containing resource names that are not in the Host Portable Character Encoding or containing values that are not in the encoding of the database locale, are written in an implementation-dependent manner. The order in which entries are written is implementation-dependent. Entries with representation types other than ``String'' are ignored. To obtain a pointer to the screen-independent resources of a display, use . XResourceManagerString char *XResourceManagerString Display *display display Specifies the connection to the X server. The function returns the RESOURCE_MANAGER property from the server's root window of screen zero, which was returned when the connection was opened using . The property is converted from type STRING to the current locale. The conversion is identical to that produced by for a single element STRING property. The returned string is owned by Xlib and should not be freed by the client. The property value must be in a format that is acceptable to . If no property exists, NULL is returned. To obtain a pointer to the screen-specific resources of a screen, use . XScreenResourceString char *XScreenResourceString Screen *screen screen Specifies the screen. The function returns the SCREEN_RESOURCES property from the root window of the specified screen. The property is converted from type STRING to the current locale. The conversion is identical to that produced by for a single element STRING property. The property value must be in a format that is acceptable to . If no property exists, NULL is returned. The caller is responsible for freeing the returned string by using . To create a database from a string, use . XrmGetStringDatabase XrmDatabase XrmGetStringDatabase char *data data Specifies the database contents using a string. The function creates a new database and stores the resources specified in the specified null-terminated string. is similar to except that it reads the information out of a string instead of out of a file. The string should contain a sequence of entries in valid ResourceLine format (see section 15.1) terminated by a null character; the database that results from using a string with incorrect syntax is implementation-dependent. The string is parsed in the current locale, and the database is created in the current locale. To obtain the locale name of a database, use . XrmLocaleOfDatabase char *XrmLocaleOfDatabase XrmDatabase database database Specifies the resource database. The function returns the name of the locale bound to the specified database, as a null-terminated string. The returned locale name string is owned by Xlib and should not be modified or freed by the client. Xlib is not permitted to free the string until the database is destroyed. Until the string is freed, it will not be modified by Xlib. To destroy a resource database and free its allocated memory, use . XrmDestroyDatabase void XrmDestroyDatabase XrmDatabase database database Specifies the resource database. If database is NULL, returns immediately. To associate a resource database with a display, use . XrmSetDatabase void XrmSetDatabase Display *display XrmDatabase database display Specifies the connection to the X server. database Specifies the resource database. The function associates the specified resource database (or NULL) with the specified display. The database previously associated with the display (if any) is not destroyed. A client or toolkit may find this function convenient for retaining a database once it is constructed. To get the resource database associated with a display, use . XrmGetDatabase XrmDatabase XrmGetDatabase Display *display display Specifies the connection to the X server. The function returns the database associated with the specified display. It returns NULL if a database has not yet been set. Merging Resource Databases To merge the contents of a resource file into a database, use . XrmCombineFileDatabase Status XrmCombineFileDatabase char *filename XrmDatabase *target_db Bool override filename Specifies the resource database file name. target_db Specifies the resource database into which the source database is to be merged. override Specifies whether source entries override target ones. The function merges the contents of a resource file into a database. If the same specifier is used for an entry in both the file and the database, the entry in the file will replace the entry in the database if override is True; otherwise, the entry in the file is discarded. The file is parsed in the current locale. If the file cannot be read, a zero status is returned; otherwise, a nonzero status is returned. If target_db contains NULL, creates and returns a new database to it. Otherwise, the database pointed to by target_db is not destroyed by the merge. The database entries are merged without changing values or types, regardless of the locale of the database. The locale of the target database is not modified. To merge the contents of one database into another database, use . XrmCombineDatabase void XrmCombineDatabase XrmDatabasesource_db, *target_db Bool override source_db Specifies the resource database that is to be merged into the target database. target_db Specifies the resource database into which the source database is to be merged. override Specifies whether source entries override target ones. The function merges the contents of one database into another. If the same specifier is used for an entry in both databases, the entry in the source_db will replace the entry in the target_db if override is True; otherwise, the entry in source_db is discarded. If target_db contains NULL, simply stores source_db in it. Otherwise, source_db is destroyed by the merge, but the database pointed to by target_db is not destroyed. The database entries are merged without changing values or types, regardless of the locales of the databases. The locale of the target database is not modified. To merge the contents of one database into another database with override semantics, use . XrmMergeDatabases void XrmMergeDatabases XrmDatabasesource_db, *target_db source_db Specifies the resource database that is to be merged into the target database. target_db Specifies the resource database into which the source database is to be merged. Calling the function is equivalent to calling the function with an override argument of True. Looking Up Resources To retrieve a resource from a resource database, use , , or . XrmGetResource Bool XrmGetResource XrmDatabase database char *str_name char *str_class char **str_type_return XrmValue *value_return database Specifies the database that is to be used. str_name Specifies the fully qualified name of the value being retrieved (as a string). str_class Specifies the fully qualified class of the value being retrieved (as a string). str_type_return Returns the representation type of the destination (as a string). value_return Returns the value in the database. XrmQGetResource Bool XrmQGetResource XrmDatabase database XrmNameList quark_name XrmClassList quark_class XrmRepresentation *quark_type_return XrmValue *value_return database Specifies the database that is to be used. quark_name Specifies the fully qualified name of the value being retrieved (as a quark). quark_class Specifies the fully qualified class of the value being retrieved (as a quark). quark_type_return Returns the representation type of the destination (as a quark). value_return Returns the value in the database. The and functions retrieve a resource from the specified database. Both take a fully qualified name/class pair, a destination resource representation, and the address of a value (size/address pair). The value and returned type point into database memory; therefore, you must not modify the data. The database only frees or overwrites entries on , , or . A client that is not storing new values into the database or is not merging the database should be safe using the address passed back at any time until it exits. If a resource was found, both and return True; otherwise, they return False. Most applications and toolkits do not make random probes into a resource database to fetch resources. The X toolkit access pattern for a resource database is quite stylized. A series of from 1 to 20 probes is made with only the last name/class differing in each probe. The function is at worst a 2n algorithm, where n is the length of the name/class list. This can be improved upon by the application programmer by prefetching a list of database levels that might match the first part of a name/class list. To obtain a list of database levels, use XrmQGetSearchList. XrmQGetSearchList Bool XrmQGetSearchResource XrmDatabase database XrmNameList names XrmClassList classes XrmSearchList list_return int list_length database Specifies the database that is to be used. names Specifies a list of resource names. classes Specifies a list of resource classes. list_return Returns a search list for further use. The caller must allocate sufficient space for the list before calling XrmQGetSearchList. list_length Specifies the number of entries (not the byte size) allocated for list_return. The XrmQGetSearchList function takes a list of names and classes and returns a list of database levels where a match might occur. The returned list is in best-to-worst order and uses the same algorithm as for determining precedence. If list_return was large enough for the search list, XrmQGetSearchList returns True; otherwise, it returns False. The size of the search list that the caller must allocate is dependent upon the number of levels and wildcards in the resource specifiers that are stored in the database. The worst case length is 3n, where n is the number of name or class components in names or classes. When using XrmQGetSearchList followed by multiple probes for resources with a common name and class prefix, only the common prefix should be specified in the name and class list to XrmQGetSearchList. To search resource database levels for a given resource, use . XrmQGetSearchResource Bool XrmQGetSearchResource XrmSearchList list XrmName name XrmClass class XrmRepresentation *type_return XrmValue *value_return list Specifies the search list returned by XrmQGetSearchList. name Specifies the resource name. class Specifies the resource class. type_return Returns data representation type. value_return Returns the value in the database. The function searches the specified database levels for the resource that is fully identified by the specified name and class. The search stops with the first match. returns True if the resource was found; otherwise, it returns False. A call to XrmQGetSearchList with a name and class list containing all but the last component of a resource name followed by a call to with the last component name and class returns the same database entry as and with the fully qualified name and class. Storing into a Resource Database To store resources into the database, use or . Both functions take a partial resource specification, a representation type, and a value. This value is copied into the specified database. XrmPutResource void XrmPutResource XrmDatabase *database char *specifier char *type XrmValue *value database Specifies the resource database. specifier Specifies a complete or partial specification of the resource. type Specifies the type of the resource. value Specifies the value of the resource, which is specified as a string. If database contains NULL, creates a new database and returns a pointer to it. is a convenience function that calls followed by: XrmQPutResource(database, bindings, quarks, XrmStringToQuark(type), value) If the specifier and type are not in the Host Portable Character Encoding, the result is implementation-dependent. The value is stored in the database without modification. XrmQPutResource void XrmQPutResource XrmDatabase *database XrmBindingList bindings XrmQuarkList quarks XrmRepresentation type XrmValue *value database Specifies the resource database. bindings Specifies a list of bindings. quarks Specifies the complete or partial name or the class list of the resource. type Specifies the type of the resource. value Specifies the value of the resource, which is specified as a string. If database contains NULL, creates a new database and returns a pointer to it. If a resource entry with the identical bindings and quarks already exists in the database, the previous type and value are replaced by the new specified type and value. The value is stored in the database without modification. To add a resource that is specified as a string, use . XrmPutStringResource void XrmPutStringResource XrmDatabase *database char *specifier char *value database Specifies the resource database. specifier Specifies a complete or partial specification of the resource. value Specifies the value of the resource, which is specified as a string. If database contains NULL, creates a new database and returns a pointer to it. adds a resource with the specified value to the specified database. is a convenience function that first calls on the specifier and then calls , using a ``String'' representation type. If the specifier is not in the Host Portable Character Encoding, the result is implementation-dependent. The value is stored in the database without modification. To add a string resource using quarks as a specification, use . XrmQPutStringResource void XrmQPutStringResource XrmDatabase *database XrmBindingList bindings XrmQuarkList quarks char *value database Specifies the resource database. bindings Specifies a list of bindings. quarks Specifies the complete or partial name or the class list of the resource. value Specifies the value of the resource, which is specified as a string. If database contains NULL, creates a new database and returns a pointer to it. is a convenience routine that constructs an XrmValue for the value string (by calling strlen to compute the size) and then calls , using a ``String'' representation type. The value is stored in the database without modification. To add a single resource entry that is specified as a string that contains both a name and a value, use . XrmPutLineResource void XrmPutLineResource XrmDatabase *database char *line database Specifies the resource database. line Specifies the resource name and value pair as a single string. If database contains NULL, creates a new database and returns a pointer to it. adds a single resource entry to the specified database. The line should be in valid ResourceLine format (see section 15.1) terminated by a newline or null character; the database that results from using a string with incorrect syntax is implementation-dependent. The string is parsed in the locale of the database. If the ResourceName is not in the Host Portable Character Encoding, the result is implementation-dependent. Note that comment lines are not stored. Enumerating Database Entries To enumerate the entries of a database, use . XrmEnumerateDatabase #define XrmEnumAllLevels 0 #define XrmEnumOneLevel 0 Bool XrmEnumerateDatabase XrmDatabase database XrmNameList name_prefix XrmClassList class_prefix int mode Bool (*proc)() XPointer arg database Specifies the resource database. name_prefix Specifies the resource name prefix. class_prefix Specifies the resource class prefix. mode Specifies the number of levels to enumerate. proc Specifies the procedure that is to be called for each matching entry. arg Specifies the user-supplied argument that will be passed to the procedure. The function calls the specified procedure for each resource in the database that would match some completion of the given name/class resource prefix. The order in which resources are found is implementation-dependent. If mode is XrmEnumOneLevel, a resource must match the given name/class prefix with just a single name and class appended. If mode is XrmEnumAllLevels, the resource must match the given name/class prefix with one or more names and classes appended. If the procedure returns True, the enumeration terminates and the function returns True. If the procedure always returns False, all matching resources are enumerated and the function returns False. The procedure is called with the following arguments: (*proc)(database, bindings, quarks, type, value, arg) XrmDatabase *database; XrmBindingList bindings; XrmQuarkList quarks; XrmRepresentation *type; XrmValue *value; XPointer arg; The bindings and quarks lists are terminated by NULLQUARK. Note that pointers to the database and type are passed, but these values should not be modified. The procedure must not modify the database. If Xlib has been initialized for threads, the procedure is called with the database locked and the result of a call by the procedure to any Xlib function using the same database is not defined. Parsing Command Line Options The function can be used to parse the command line arguments to a program and modify a resource database with selected entries from the command line. XrmOptionKind typedef enum { XrmoptionNoArg, /* Value is specified in XrmOptionDescRec.value */ XrmoptionIsArg, /* Value is the option string itself */ XrmoptionStickyArg, /* Value is characters immediately following option */ XrmoptionSepArg, /* Value is next argument in argv */ XrmoptionResArg, /* Resource and value in next argument in argv */ XrmoptionSkipArg, /* Ignore this option and the next argument in argv */ XrmoptionSkipLine, /* Ignore this option and the rest of argv */ XrmoptionSkipNArgs /* Ignore this option and the next \ \ \ XrmOptionDescRec.value arguments in argv */ } XrmOptionKind; Note that XrmoptionSkipArg is equivalent to XrmoptionSkipNArgs with the XrmOptionDescRec.value field containing the value one. Note also that the value zero for XrmoptionSkipNArgs indicates that only the option itself is to be skipped. XrmOptionDescRec typedef struct { char *option; /* Option specification string in argv */ char *specifier; /* Binding and resource name (sans application name) */ XrmOptionKind argKind; /* Which style of option it is */ XPointer value; /* Value to provide if XrmoptionNoArg or \ \ \ XrmoptionSkipNArgs */ } XrmOptionDescRec, *XrmOptionDescList; To load a resource database from a C command line, use . XrmParseCommand void XrmParseCommand XrmDatabase *database XrmOptionDescList table int table_count char *name int *argc_in_out char **argv_in_out database Specifies the resource database. table Specifies the table of command line arguments to be parsed. table_count Specifies the number of entries in the table. name Specifies the application name. argc_in_out Specifies the number of arguments and returns the number of remaining arguments. argv_in_out Specifies the command line arguments and returns the remaining arguments. The function parses an (argc, argv) pair according to the specified option table, loads recognized options into the specified database with type ``String,'' and modifies the (argc, argv) pair to remove all recognized options. If database contains NULL, creates a new database and returns a pointer to it. Otherwise, entries are added to the database specified. If a database is created, it is created in the current locale. The specified table is used to parse the command line. Recognized options in the table are removed from argv, and entries are added to the specified resource database in the order they occur in argv. The table entries contain information on the option string, the option name, the style of option, and a value to provide if the option kind is XrmoptionNoArg. The option names are compared byte-for-byte to arguments in argv, independent of any locale. The resource values given in the table are stored in the resource database without modification. All resource database entries are created using a ``String'' representation type. The argc argument specifies the number of arguments in argv and is set on return to the remaining number of arguments that were not parsed. The name argument should be the name of your application for use in building the database entry. The name argument is prefixed to the resourceName in the option table before storing a database entry. The name argument is treated as a single component, even if it has embedded periods. No separating (binding) character is inserted, so the table must contain either a period (.) or an asterisk (*) as the first character in each resourceName entry. To specify a more completely qualified resource name, the resourceName entry can contain multiple components. If the name argument and the resourceNames are not in the Host Portable Character Encoding, the result is implementation-dependent. The following provides a sample option table: static XrmOptionDescRec opTable[] = { {"-background", "*background", XrmoptionSepArg, (XPointer) NULL}, {"-bd", "*borderColor", XrmoptionSepArg, (XPointer) NULL}, {"-bg", "*background", XrmoptionSepArg, (XPointer) NULL}, {"-borderwidth", "*TopLevelShell.borderWidth", XrmoptionSepArg, (XPointer) NULL}, {"-bordercolor", "*borderColor", XrmoptionSepArg, (XPointer) NULL}, {"-bw", "*TopLevelShell.borderWidth", XrmoptionSepArg, (XPointer) NULL}, {"-display", ".display", XrmoptionSepArg, (XPointer) NULL}, {"-fg", "*foreground", XrmoptionSepArg, (XPointer) NULL}, {"-fn", "*font", XrmoptionSepArg, (XPointer) NULL}, {"-font", "*font", XrmoptionSepArg, (XPointer) NULL}, {"-foreground", "*foreground", XrmoptionSepArg, (XPointer) NULL}, {"-geometry", ".TopLevelShell.geometry", XrmoptionSepArg, (XPointer) NULL}, {"-iconic", ".TopLevelShell.iconic", XrmoptionNoArg, (XPointer) "on"}, {"-name", ".name", XrmoptionSepArg, (XPointer) NULL}, {"-reverse", "*reverseVideo", XrmoptionNoArg, (XPointer) "on"}, {"-rv", "*reverseVideo", XrmoptionNoArg, (XPointer) "on"}, {"-synchronous", "*synchronous", XrmoptionNoArg, (XPointer) "on"}, {"-title", ".TopLevelShell.title", XrmoptionSepArg, (XPointer) NULL}, {"-xrm", NULL, XrmoptionResArg, (XPointer) NULL}, }; In this table, if the -background (or -bg) option is used to set background colors, the stored resource specifier matches all resources of attribute background. If the -borderwidth option is used, the stored resource specifier applies only to border width attributes of class TopLevelShell (that is, outer-most windows, including pop-up windows). If the -title option is used to set a window name, only the topmost application windows receive the resource. When parsing the command line, any unique unambiguous abbreviation for an option name in the table is considered a match for the option. Note that uppercase and lowercase matter. phasis remap='I'>quarks, type, value, arg) XrmDatabase *database; XrmBindingList bindings; XrmQuarkList quarks; XrmRepresentation *type; XrmValue * Input Device Functions You can use the Xlib input device functions to: Grab the pointer and individual buttons on the pointer Grab the keyboard and individual keys on the keyboard Resume event processing Move the pointer Set the input focus Manipulate the keyboard and pointer settings Manipulate the keyboard encoding Pointer Grabbing Xlib provides functions that you can use to control input from the pointer, which usually is a mouse. Usually, as soon as keyboard and mouse events occur, the X server delivers them to the appropriate client, which is determined by the window and input focus. The X server provides sufficient control over event delivery to allow window managers to support mouse ahead and various other styles of user interface. Many of these user interfaces depend on synchronous delivery of events. The delivery of pointer and keyboard events can be controlled independently. When mouse buttons or keyboard keys are grabbed, events will be sent to the grabbing client rather than the normal client who would have received the event. If the keyboard or pointer is in asynchronous mode, further mouse and keyboard events will continue to be processed. If the keyboard or pointer is in synchronous mode, no further events are processed until the grabbing client allows them (see ). The keyboard or pointer is considered frozen during this interval. The event that triggered the grab can also be replayed. Note that the logical state of a device (as seen by client applications) may lag the physical state if device event processing is frozen. Active grab There are two kinds of grabs: active and passive. An active grab occurs when a single client grabs the keyboard and/or pointer explicitly (see and ). Passive grab A passive grab occurs when clients grab a particular keyboard key or pointer button in a window, and the grab will activate when the key or button is actually pressed. Passive grabs are convenient for implementing reliable pop-up menus. For example, you can guarantee that the pop-up is mapped before the up pointer button event occurs by grabbing a button requesting synchronous behavior. The down event will trigger the grab and freeze further processing of pointer events until you have the chance to map the pop-up window. You can then allow further event processing. The up event will then be correctly processed relative to the pop-up window. For many operations, there are functions that take a time argument. The X server includes a timestamp in various events. One special time, called CurrentTime Time CurrentTime, represents the current server time. The X server maintains the time when the input focus was last changed, when the keyboard was last grabbed, when the pointer was last grabbed, or when a selection was last changed. Your application may be slow reacting to an event. You often need some way to specify that your request should not occur if another application has in the meanwhile taken control of the keyboard, pointer, or selection. By providing the timestamp from the event in the request, you can arrange that the operation not take effect if someone else has performed an operation in the meanwhile. A timestamp is a time value, expressed in milliseconds. It typically is the time since the last server reset. Timestamp values wrap around (after about 49.7 days). The server, given its current time is represented by timestamp T, always interprets timestamps from clients by treating half of the timestamp space as being later in time than T. One timestamp value, named CurrentTime, is never generated by the server. This value is reserved for use in requests to represent the current server time. For many functions in this section, you pass pointer event mask bits. The valid pointer event mask bits are: ButtonPressMask, ButtonReleaseMask, EnterWindowMask, LeaveWindowMask, PointerMotionMask, PointerMotionHintMask, Button1MotionMask, Button2MotionMask, Button3MotionMask, Button4MotionMask, Button5MotionMask, ButtonMotionMask, and KeymapStateMask. For other functions in this section, you pass keymask bits. The valid keymask bits are: ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask, Mod3Mask, Mod4Mask, and Mod5Mask. To grab the pointer, use . Grabbingpointer Pointergrabbing XGrabPointer int XGrabPointer Display *display Window grab_window Bool owner_events unsigned int event_mask intpointer_mode, keyboard_mode Window confine_to Cursor cursor Time time display Specifies the connection to the X server. grab_window Specifies the grab window. owner_events Specifies a Boolean value that indicates whether the pointer events are to be reported as usual or reported with respect to the grab window if selected by the event mask. event_mask Specifies which pointer events are reported to the client. The mask is the bitwise inclusive OR of the valid pointer event mask bits. pointer_mode Specifies further processing of pointer events. You can pass GrabModeSync or GrabModeAsync. keyboard_mode Specifies further processing of keyboard events. You can pass GrabModeSync or GrabModeAsync. confine_to Specifies the window to confine the pointer in or None. cursor Specifies the cursor that is to be displayed during the grab or None. time Specifies the time. You can pass either a timestamp or CurrentTime. The function actively grabs control of the pointer and returns GrabSuccess if the grab was successful. Further pointer events are reported only to the grabbing client. overrides any active pointer grab by this client. If owner_events is False, all generated pointer events are reported with respect to grab_window and are reported only if selected by event_mask. If owner_events is True and if a generated pointer event would normally be reported to this client, it is reported as usual. Otherwise, the event is reported with respect to the grab_window and is reported only if selected by event_mask. For either value of owner_events, unreported events are discarded. If the pointer_mode is GrabModeAsync, pointer event processing continues as usual. If the pointer is currently frozen by this client, the processing of events for the pointer is resumed. If the pointer_mode is GrabModeSync, the state of the pointer, as seen by client applications, appears to freeze, and the X server generates no further pointer events until the grabbing client calls or until the pointer grab is released. Actual pointer changes are not lost while the pointer is frozen; they are simply queued in the server for later processing. If the keyboard_mode is GrabModeAsync, keyboard event processing is unaffected by activation of the grab. If the keyboard_mode is GrabModeSync, the state of the keyboard, as seen by client applications, appears to freeze, and the X server generates no further keyboard events until the grabbing client calls or until the pointer grab is released. Actual keyboard changes are not lost while the pointer is frozen; they are simply queued in the server for later processing. If a cursor is specified, it is displayed regardless of what window the pointer is in. If None is specified, the normal cursor for that window is displayed when the pointer is in grab_window or one of its subwindows; otherwise, the cursor for grab_window is displayed. If a confine_to window is specified, the pointer is restricted to stay contained in that window. The confine_to window need have no relationship to the grab_window. If the pointer is not initially in the confine_to window, it is warped automatically to the closest edge just before the grab activates and enter/leave events are generated as usual. If the confine_to window is subsequently reconfigured, the pointer is warped automatically, as necessary, to keep it contained in the window. The time argument allows you to avoid certain circumstances that come up if applications take a long time to respond or if there are long network delays. Consider a situation where you have two applications, both of which normally grab the pointer when clicked on. If both applications specify the timestamp from the event, the second application may wake up faster and successfully grab the pointer before the first application. The first application then will get an indication that the other application grabbed the pointer before its request was processed. generates EnterNotify and LeaveNotify events. Either if grab_window or confine_to window is not viewable or if the confine_to window lies completely outside the boundaries of the root window, fails and returns GrabNotViewable. If the pointer is actively grabbed by some other client, it fails and returns AlreadyGrabbed. If the pointer is frozen by an active grab of another client, it fails and returns GrabFrozen. If the specified time is earlier than the last-pointer-grab time or later than the current X server time, it fails and returns GrabInvalidTime. Otherwise, the last-pointer-grab time is set to the specified time (CurrentTime is replaced by the current X server time). can generate BadCursor, BadValue, and BadWindow errors. To ungrab the pointer, use . Ungrabbingpointer Pointerungrabbing XUngrabPointer XUngrabPointer Display *display Time time display Specifies the connection to the X server. time Specifies the time. You can pass either a timestamp or CurrentTime. The function releases the pointer and any queued events if this client has actively grabbed the pointer from , , or from a normal button press. does not release the pointer if the specified time is earlier than the last-pointer-grab time or is later than the current X server time. It also generates EnterNotify and LeaveNotify events. The X server performs an UngrabPointer request automatically if the event window or confine_to window for an active pointer grab becomes not viewable or if window reconfiguration causes the confine_to window to lie completely outside the boundaries of the root window. To change an active pointer grab, use . Pointergrabbing Changingpointer grab XChangeActivePointerGrab XChangeActivePointerGrab Display *display unsigned int event_mask Cursor cursor Time time display Specifies the connection to the X server. event_mask Specifies which pointer events are reported to the client. The mask is the bitwise inclusive OR of the valid pointer event mask bits. cursor Specifies the cursor that is to be displayed or None. time Specifies the time. You can pass either a timestamp or CurrentTime. The function changes the specified dynamic parameters if the pointer is actively grabbed by the client and if the specified time is no earlier than the last-pointer-grab time and no later than the current X server time. This function has no effect on the passive parameters of an . The interpretation of event_mask and cursor is the same as described in . can generate BadCursor and BadValue errors. To grab a pointer button, use . Grabbingbuttons Buttongrabbing XGrabButton XGrabButton Display *display unsigned int button unsigned int modifiers Window grab_window Bool owner_events unsigned int event_mask intpointer_mode, keyboard_mode Window confine_to Cursor cursor display Specifies the connection to the X server. button Specifies the pointer button that is to be grabbed or AnyButton. modifiers Specifies the set of keymasks or AnyModifier. The mask is the bitwise inclusive OR of the valid keymask bits. grab_window Specifies the grab window. owner_events Specifies a Boolean value that indicates whether the pointer events are to be reported as usual or reported with respect to the grab window if selected by the event mask. event_mask Specifies which pointer events are reported to the client. The mask is the bitwise inclusive OR of the valid pointer event mask bits. pointer_mode Specifies further processing of pointer events. You can pass GrabModeSync or GrabModeAsync. keyboard_mode Specifies further processing of keyboard events. You can pass GrabModeSync or GrabModeAsync. confine_to Specifies the window to confine the pointer in or None. cursor Specifies the cursor that is to be displayed or None. The function establishes a passive grab. In the future, the pointer is actively grabbed (as for ), the last-pointer-grab time is set to the time at which the button was pressed (as transmitted in the ButtonPress event), and the ButtonPress event is reported if all of the following conditions are true: The pointer is not grabbed, and the specified button is logically pressed when the specified modifier keys are logically down, and no other buttons or modifier keys are logically down. The grab_window contains the pointer. The confine_to window (if any) is viewable. A passive grab on the same button/key combination does not exist on any ancestor of grab_window. The interpretation of the remaining arguments is as for . The active grab is terminated automatically when the logical state of the pointer has all buttons released (independent of the state of the logical modifier keys). Note that the logical state of a device (as seen by client applications) may lag the physical state if device event processing is frozen. This request overrides all previous grabs by the same client on the same button/key combinations on the same window. A modifiers of AnyModifier is equivalent to issuing the grab request for all possible modifier combinations (including the combination of no modifiers). It is not required that all modifiers specified have currently assigned KeyCodes. A button of AnyButton is equivalent to issuing the request for all possible buttons. Otherwise, it is not required that the specified button currently be assigned to a physical button. If some other client has already issued an with the same button/key combination on the same window, a BadAccess error results. When using AnyModifier or AnyButton, the request fails completely, and a BadAccess error results (no grabs are established) if there is a conflicting grab for any combination. has no effect on an active grab. can generate BadCursor, BadValue, and BadWindow errors. To ungrab a pointer button, use . Ungrabbingbuttons Buttonungrabbing XUngrabButton XUngrabButton Display *display unsigned int button unsigned int modifiers Window grab_window display Specifies the connection to the X server. button Specifies the pointer button that is to be released or AnyButton. modifiers Specifies the set of keymasks or AnyModifier. The mask is the bitwise inclusive OR of the valid keymask bits. grab_window Specifies the grab window. The function releases the passive button/key combination on the specified window if it was grabbed by this client. A modifiers of AnyModifier is equivalent to issuing the ungrab request for all possible modifier combinations, including the combination of no modifiers. A button of AnyButton is equivalent to issuing the request for all possible buttons. has no effect on an active grab. can generate BadValue and BadWindow errors. Keyboard Grabbing Xlib provides functions that you can use to grab or ungrab the keyboard as well as allow events. For many functions in this section, you pass keymask bits. The valid keymask bits are: ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask, Mod3Mask, Mod4Mask, and Mod5Mask. To grab the keyboard, use . Keyboardgrabbing Grabbingkeyboard XGrabKeyboard int XGrabKeyboard Display *display Window grab_window Bool owner_events intpointer_mode, keyboard_mode Time time display Specifies the connection to the X server. grab_window Specifies the grab window. owner_events Specifies a Boolean value that indicates whether the keyboard events are to be reported as usual. pointer_mode Specifies further processing of pointer events. You can pass GrabModeSync or GrabModeAsync. keyboard_mode Specifies further processing of keyboard events. You can pass GrabModeSync or GrabModeAsync. time Specifies the time. You can pass either a timestamp or CurrentTime. The function actively grabs control of the keyboard and generates FocusIn and FocusOut events. Further key events are reported only to the grabbing client. overrides any active keyboard grab by this client. If owner_events is False, all generated key events are reported with respect to grab_window. If owner_events is True and if a generated key event would normally be reported to this client, it is reported normally; otherwise, the event is reported with respect to the grab_window. Both KeyPress and KeyRelease events are always reported, independent of any event selection made by the client. If the keyboard_mode argument is GrabModeAsync, keyboard event processing continues as usual. If the keyboard is currently frozen by this client, then processing of keyboard events is resumed. If the keyboard_mode argument is GrabModeSync, the state of the keyboard (as seen by client applications) appears to freeze, and the X server generates no further keyboard events until the grabbing client issues a releasing call or until the keyboard grab is released. Actual keyboard changes are not lost while the keyboard is frozen; they are simply queued in the server for later processing. If pointer_mode is GrabModeAsync, pointer event processing is unaffected by activation of the grab. If pointer_mode is GrabModeSync, the state of the pointer (as seen by client applications) appears to freeze, and the X server generates no further pointer events until the grabbing client issues a releasing call or until the keyboard grab is released. Actual pointer changes are not lost while the pointer is frozen; they are simply queued in the server for later processing. If the keyboard is actively grabbed by some other client, fails and returns AlreadyGrabbed. If grab_window is not viewable, it fails and returns GrabNotViewable. If the keyboard is frozen by an active grab of another client, it fails and returns GrabFrozen. If the specified time is earlier than the last-keyboard-grab time or later than the current X server time, it fails and returns GrabInvalidTime. Otherwise, the last-keyboard-grab time is set to the specified time (CurrentTime is replaced by the current X server time). can generate BadValue and BadWindow errors. To ungrab the keyboard, use . Keyboardungrabbing Ungrabbingkeyboard XUngrabKeyboard XUngrabKeyboard Display *display Time time display Specifies the connection to the X server. time Specifies the time. You can pass either a timestamp or CurrentTime. The function releases the keyboard and any queued events if this client has it actively grabbed from either or . does not release the keyboard and any queued events if the specified time is earlier than the last-keyboard-grab time or is later than the current X server time. It also generates FocusIn and FocusOut events. The X server automatically performs an UngrabKeyboard request if the event window for an active keyboard grab becomes not viewable. To passively grab a single key of the keyboard, use . Keygrabbing Grabbingkeys XGrabKey XGrabKey Display *display int keycode unsigned int modifiers Window grab_window Bool owner_events intpointer_mode, keyboard_mode display Specifies the connection to the X server. keycode Specifies the KeyCode or AnyKey. modifiers Specifies the set of keymasks or AnyModifier. The mask is the bitwise inclusive OR of the valid keymask bits. grab_window Specifies the grab window. owner_events Specifies a Boolean value that indicates whether the keyboard events are to be reported as usual. pointer_mode Specifies further processing of pointer events. You can pass GrabModeSync or GrabModeAsync. keyboard_mode Specifies further processing of keyboard events. You can pass GrabModeSync or GrabModeAsync. The function establishes a passive grab on the keyboard. In the future, the keyboard is actively grabbed (as for ), the last-keyboard-grab time is set to the time at which the key was pressed (as transmitted in the KeyPress event), and the KeyPress event is reported if all of the following conditions are true: The keyboard is not grabbed and the specified key (which can itself be a modifier key) is logically pressed when the specified modifier keys are logically down, and no other modifier keys are logically down. Either the grab_window is an ancestor of (or is) the focus window, or the grab_window is a descendant of the focus window and contains the pointer. A passive grab on the same key combination does not exist on any ancestor of grab_window. The interpretation of the remaining arguments is as for . The active grab is terminated automatically when the logical state of the keyboard has the specified key released (independent of the logical state of the modifier keys). Note that the logical state of a device (as seen by client applications) may lag the physical state if device event processing is frozen. A modifiers argument of AnyModifier is equivalent to issuing the request for all possible modifier combinations (including the combination of no modifiers). It is not required that all modifiers specified have currently assigned KeyCodes. A keycode argument of AnyKey is equivalent to issuing the request for all possible KeyCodes. Otherwise, the specified keycode must be in the range specified by min_keycode and max_keycode in the connection setup, or a BadValue error results. If some other client has issued a with the same key combination on the same window, a BadAccess error results. When using AnyModifier or AnyKey, the request fails completely, and a BadAccess error results (no grabs are established) if there is a conflicting grab for any combination. can generate BadAccess, BadValue, and BadWindow errors. To ungrab a key, use . Keyungrabbing Ungrabbingkeys XUngrabKey XUngrabKey Display *display int keycode unsigned int modifiers Window grab_window display Specifies the connection to the X server. keycode Specifies the KeyCode or AnyKey. modifiers Specifies the set of keymasks or AnyModifier. The mask is the bitwise inclusive OR of the valid keymask bits. grab_window Specifies the grab window. The function releases the key combination on the specified window if it was grabbed by this client. It has no effect on an active grab. A modifiers of AnyModifier is equivalent to issuing the request for all possible modifier combinations (including the combination of no modifiers). A keycode argument of AnyKey is equivalent to issuing the request for all possible key codes. can generate BadValue and BadWindow errors. Resuming Event Processing The previous sections discussed grab mechanisms with which processing of events by the server can be temporarily suspended. This section describes the mechanism for resuming event processing. To allow further events to be processed when the device has been frozen, use . XAllowEvents XAllowEvents Display *display int event_mode Time time display Specifies the connection to the X server. event_mode Specifies the event mode. You can pass AsyncPointer, SyncPointer, AsyncKeyboard, SyncKeyboard, ReplayPointer, ReplayKeyboard, AsyncBoth, or SyncBoth. time Specifies the time. You can pass either a timestamp or CurrentTime. The function releases some queued events if the client has caused a device to freeze. It has no effect if the specified time is earlier than the last-grab time of the most recent active grab for the client or if the specified time is later than the current X server time. Depending on the event_mode argument, the following occurs: AsyncPointer If the pointer is frozen by the client, pointer event processing continues as usual. If the pointer is frozen twice by the client on behalf of two separate grabs, AsyncPointer thaws for both. AsyncPointer has no effect if the pointer is not frozen by the client, but the pointer need not be grabbed by the client. SyncPointer If the pointer is frozen and actively grabbed by the client, pointer event processing continues as usual until the next ButtonPress or ButtonRelease event is reported to the client. At this time, the pointer again appears to freeze. However, if the reported event causes the pointer grab to be released, the pointer does not freeze. SyncPointer has no effect if the pointer is not frozen by the client or if the pointer is not grabbed by the client. ReplayPointer If the pointer is actively grabbed by the client and is frozen as the result of an event having been sent to the client (either from the activation of an or from a previous with mode SyncPointer but not from an ), the pointer grab is released and that event is completely reprocessed. This time, however, the function ignores any passive grabs at or above (toward the root of) the grab_window of the grab just released. The request has no effect if the pointer is not grabbed by the client or if the pointer is not frozen as the result of an event. AsyncKeyboard If the keyboard is frozen by the client, keyboard event processing continues as usual. If the keyboard is frozen twice by the client on behalf of two separate grabs, AsyncKeyboard thaws for both. AsyncKeyboard has no effect if the keyboard is not frozen by the client, but the keyboard need not be grabbed by the client. SyncKeyboard If the keyboard is frozen and actively grabbed by the client, keyboard event processing continues as usual until the next KeyPress or KeyRelease event is reported to the client. At this time, the keyboard again appears to freeze. However, if the reported event causes the keyboard grab to be released, the keyboard does not freeze. SyncKeyboard has no effect if the keyboard is not frozen by the client or if the keyboard is not grabbed by the client. ReplayKeyboard If the keyboard is actively grabbed by the client and is frozen as the result of an event having been sent to the client (either from the activation of an or from a previous with mode SyncKeyboard but not from an ), the keyboard grab is released and that event is completely reprocessed. This time, however, the function ignores any passive grabs at or above (toward the root of) the grab_window of the grab just released. The request has no effect if the keyboard is not grabbed by the client or if the keyboard is not frozen as the result of an event. SyncBoth If both pointer and keyboard are frozen by the client, event processing for both devices continues as usual until the next ButtonPress, ButtonRelease, KeyPress, or KeyRelease event is reported to the client for a grabbed device (button event for the pointer, key event for the keyboard), at which time the devices again appear to freeze. However, if the reported event causes the grab to be released, then the devices do not freeze (but if the other device is still grabbed, then a subsequent event for it will still cause both devices to freeze). SyncBoth has no effect unless both pointer and keyboard are frozen by the client. If the pointer or keyboard is frozen twice by the client on behalf of two separate grabs, SyncBoth thaws for both (but a subsequent freeze for SyncBoth will only freeze each device once). AsyncBoth If the pointer and the keyboard are frozen by the client, event processing for both devices continues as usual. If a device is frozen twice by the client on behalf of two separate grabs, AsyncBoth thaws for both. AsyncBoth has no effect unless both pointer and keyboard are frozen by the client. AsyncPointer, SyncPointer, and ReplayPointer have no effect on the processing of keyboard events. AsyncKeyboard, SyncKeyboard, and ReplayKeyboard have no effect on the processing of pointer events. It is possible for both a pointer grab and a keyboard grab (by the same or different clients) to be active simultaneously. If a device is frozen on behalf of either grab, no event processing is performed for the device. It is possible for a single device to be frozen because of both grabs. In this case, the freeze must be released on behalf of both grabs before events can again be processed. If a device is frozen twice by a single client, then a single releases both. can generate a BadValue error. Moving the Pointer Although movement of the pointer normally should be left to the control of the end user, sometimes it is necessary to move the pointer to a new position under program control. To move the pointer to an arbitrary point in a window, use . XWarpPointer XWarpPointer Display *display Windowsrc_w, dest_w intsrc_x, src_y unsigned int src_width unsigned int src_height intdest_x, dest_y display Specifies the connection to the X server. src_w Specifies the source window or None. dest_w Specifies the destination window or None. src_x src_y src_width src_height Specify a rectangle in the source window. dest_x dest_y Specify the x and y coordinates within the destination window. If dest_w is None, moves the pointer by the offsets (dest_x, dest_y) relative to the current position of the pointer. If dest_w is a window, moves the pointer to the offsets (dest_x, dest_y) relative to the origin of dest_w. However, if src_w is a window, the move only takes place if the window src_w contains the pointer and if the specified rectangle of src_w contains the pointer. The src_x and src_y coordinates are relative to the origin of src_w. If src_height is zero, it is replaced with the current height of src_w minus src_y. If src_width is zero, it is replaced with the current width of src_w minus src_x. There is seldom any reason for calling this function. The pointer should normally be left to the user. If you do use this function, however, it generates events just as if the user had instantaneously moved the pointer from one position to another. Note that you cannot use to move the pointer outside the confine_to window of an active pointer grab. An attempt to do so will only move the pointer as far as the closest edge of the confine_to window. can generate a BadWindow error. Controlling Input Focus Xlib provides functions that you can use to set and get the input focus. The input focus is a shared resource, and cooperation among clients is required for correct interaction. See the Inter-Client Communication Conventions Manual for input focus policy. To set the input focus, use . XSetInputFocus XSetInputFocus Display *display Window focus int revert_to Time time display Specifies the connection to the X server. focus Specifies the window, PointerRoot, or None. revert_to Specifies where the input focus reverts to if the window becomes not viewable. You can pass RevertToParent, RevertToPointerRoot, or RevertToNone. time Specifies the time. You can pass either a timestamp or CurrentTime. The function changes the input focus and the last-focus-change time. It has no effect if the specified time is earlier than the current last-focus-change time or is later than the current X server time. Otherwise, the last-focus-change time is set to the specified time (CurrentTime is replaced by the current X server time). causes the X server to generate FocusIn and FocusOut events. Depending on the focus argument, the following occurs: If focus is None, all keyboard events are discarded until a new focus window is set, and the revert_to argument is ignored. If focus is a window, it becomes the keyboard's focus window. If a generated keyboard event would normally be reported to this window or one of its inferiors, the event is reported as usual. Otherwise, the event is reported relative to the focus window. If focus is PointerRoot, the focus window is dynamically taken to be the root window of whatever screen the pointer is on at each keyboard event. In this case, the revert_to argument is ignored. The specified focus window must be viewable at the time is called, or a BadMatch error results. If the focus window later becomes not viewable, the X server evaluates the revert_to argument to determine the new focus window as follows: If revert_to is RevertToParent, the focus reverts to the parent (or the closest viewable ancestor), and the new revert_to value is taken to be RevertToNone. If revert_to is RevertToPointerRoot or RevertToNone, the focus reverts to PointerRoot or None, respectively. When the focus reverts, the X server generates FocusIn and FocusOut events, but the last-focus-change time is not affected. can generate BadMatch, BadValue, and BadWindow errors. To obtain the current input focus, use . XGetInputFocus XGetInputFocus Display *display Window *focus_return int *revert_to_return display Specifies the connection to the X server. focus_return Returns the focus window, PointerRoot, or None. revert_to_return Returns the current focus state (RevertToParent, RevertToPointerRoot, or RevertToNone). The function returns the focus window and the current focus state. Manipulating the Keyboard and Pointer Settings Xlib provides functions that you can use to change the keyboard control, obtain a list of the auto-repeat keys, turn keyboard auto-repeat on or off, ring the bell, set or obtain the pointer button or keyboard mapping, and obtain a bit vector for the keyboard. Keyboardbell volume Keyboardkeyclick volume Keyboardbit vector Mouseprogramming This section discusses the user-preference options of bell, key click, pointer behavior, and so on. The default values for many of these options are server dependent. Not all implementations will actually be able to control all of these parameters. The function changes control of a keyboard and operates on a XKeyboardControl structure: /* Mask bits for ChangeKeyboardControl */ #define KBBellPercent (1L<<0) #define KBBellPitch (1L<<1) #define KBBellDuration (1L<<2) #define KBLed (1L<<3) #define KBLedMode (1L<<4) #define KBKey (1L<<5) #define KBAutoRepeatMode (1L<<6) /* Values */ typedef struct { int key_click_percent; int bell_percent; int bell_pitch; int bell_duration; int led; int led_mode; /* LedModeOn, LedModeOff */ int key; int auto_repeat_mode; /* AutoRepeatModeOff, AutoRepeatModeOn, AutoRepeatModeDefault */ } XKeyboardControl; The key_click_percent member sets the volume for key clicks between 0 (off) and 100 (loud) inclusive, if possible. A setting of -1 restores the default. Other negative values generate a BadValue error. The bell_percent sets the base volume for the bell between 0 (off) and 100 (loud) inclusive, if possible. A setting of -1 restores the default. Other negative values generate a BadValue error. The bell_pitch member sets the pitch (specified in Hz) of the bell, if possible. A setting of -1 restores the default. Other negative values generate a BadValue error. The bell_duration member sets the duration of the bell specified in milliseconds, if possible. A setting of -1 restores the default. Other negative values generate a BadValue error. If both the led_mode and led members are specified, the state of that LED is changed, if possible. The led_mode member can be set to LedModeOn or LedModeOff. If only led_mode is specified, the state of all LEDs are changed, if possible. At most 32 LEDs numbered from one are supported. No standard interpretation of LEDs is defined. If led is specified without led_mode, a BadMatch error results. If both the auto_repeat_mode and key members are specified, the auto_repeat_mode of that key is changed (according to AutoRepeatModeOn, AutoRepeatModeOff, or AutoRepeatModeDefault), if possible. If only auto_repeat_mode is specified, the global auto_repeat_mode for the entire keyboard is changed, if possible, and does not affect the per-key settings. If a key is specified without an auto_repeat_mode, a BadMatch error results. Each key has an individual mode of whether or not it should auto-repeat and a default setting for the mode. In addition, there is a global mode of whether auto-repeat should be enabled or not and a default setting for that mode. When global mode is AutoRepeatModeOn, keys should obey their individual auto-repeat modes. When global mode is AutoRepeatModeOff, no keys should auto-repeat. An auto-repeating key generates alternating KeyPress and KeyRelease events. When a key is used as a modifier, it is desirable for the key not to auto-repeat, regardless of its auto-repeat setting. A bell generator connected with the console but not directly on a keyboard is treated as if it were part of the keyboard. The order in which controls are verified and altered is server-dependent. If an error is generated, a subset of the controls may have been altered. XChangeKeyboardControl XChangeKeyboardControl Display *display unsigned long value_mask XKeyboardControl *values display Specifies the connection to the X server. value_mask Specifies which controls to change. This mask is the bitwise inclusive OR of the valid control mask bits. values Specifies one value for each bit set to 1 in the mask. The function controls the keyboard characteristics defined by the XKeyboardControl structure. The value_mask argument specifies which values are to be changed. can generate BadMatch and BadValue errors. To obtain the current control values for the keyboard, use . XGetKeyboardControl XGetKeyboardControl Display *display XKeyboardState *values_return display Specifies the connection to the X server. values_return Returns the current keyboard controls in the specified XKeyboardState structure. The function returns the current control values for the keyboard to the XKeyboardState structure. XGetKeyboardControl XKeyboardState typedef struct { int key_click_percent; int bell_percent; unsigned int bell_pitch, bell_duration; unsigned long led_mask; int global_auto_repeat; char auto_repeats[32]; } XKeyboardState; For the LEDs, the least significant bit of led_mask corresponds to LED one, and each bit set to 1 in led_mask indicates an LED that is lit. The global_auto_repeat member can be set to AutoRepeatModeOn or AutoRepeatModeOff. The auto_repeats member is a bit vector. Each bit set to 1 indicates that auto-repeat is enabled for the corresponding key. The vector is represented as 32 bytes. Byte N (from 0) contains the bits for keys 8N to 8N + 7 with the least significant bit in the byte representing key 8N. To turn on keyboard auto-repeat, use . XAutoRepeatOn XAutoRepeatOn Display *display display Specifies the connection to the X server. The function turns on auto-repeat for the keyboard on the specified display. To turn off keyboard auto-repeat, use . XAutoRepeatOff XAutoRepeatOff Display *display display Specifies the connection to the X server. The function turns off auto-repeat for the keyboard on the specified display. To ring the bell, use . XBell XBell Display *display int percent display Specifies the connection to the X server. percent Specifies the volume for the bell, which can range from -100 to 100 inclusive. The function rings the bell on the keyboard on the specified display, if possible. The specified volume is relative to the base volume for the keyboard. If the value for the percent argument is not in the range -100 to 100 inclusive, a BadValue error results. The volume at which the bell rings when the percent argument is nonnegative is: base - [(base * percent) / 100] + percent The volume at which the bell rings when the percent argument is negative is: base + [(base * percent) / 100] To change the base volume of the bell, use . can generate a BadValue error. To obtain a bit vector that describes the state of the keyboard, use . XQueryKeymap XQueryKeymap Display *display char keys_return[32] display Specifies the connection to the X server. keys_return Returns an array of bytes that identifies which keys are pressed down. Each bit represents one key of the keyboard. The function returns a bit vector for the logical state of the keyboard, where each bit set to 1 indicates that the corresponding key is currently pressed down. The vector is represented as 32 bytes. Byte N (from 0) contains the bits for keys 8N to 8N + 7 with the least significant bit in the byte representing key 8N. Note that the logical state of a device (as seen by client applications) may lag the physical state if device event processing is frozen. To set the mapping of the pointer buttons, use . XSetPointerMapping int XSetPointerMapping Display *display unsignedchar map[] int nmap display Specifies the connection to the X server. map Specifies the mapping list. nmap Specifies the number of items in the mapping list. The function sets the mapping of the pointer. If it succeeds, the X server generates a MappingNotify event, and returns MappingSuccess. Element map[i] defines the logical button number for the physical button i+1. The length of the list must be the same as would return, or a BadValue error results. A zero element disables a button, and elements are not restricted in value by the number of physical buttons. However, no two elements can have the same nonzero value, or a BadValue error results. If any of the buttons to be altered are logically in the down state, returns MappingBusy, and the mapping is not changed. can generate a BadValue error. To get the pointer mapping, use . XGetPointerMapping int XGetPointerMapping Display *display unsignedchar map_return[] int nmap display Specifies the connection to the X server. map_return Returns the mapping list. nmap Specifies the number of items in the mapping list. The function returns the current mapping of the pointer. Pointer buttons are numbered starting from one. returns the number of physical buttons actually on the pointer. The nominal mapping for a pointer is map[i]=i+1. The nmap argument specifies the length of the array where the pointer mapping is returned, and only the first nmap elements are returned in map_return. To control the pointer's interactive feel, use . XChangePointerControl XChangePointerControl Display *display Booldo_accel, do_threshold intaccel_numerator, accel_denominator int threshold display Specifies the connection to the X server. do_accel Specifies a Boolean value that controls whether the values for the accel_numerator or accel_denominator are used. do_threshold Specifies a Boolean value that controls whether the value for the threshold is used. accel_numerator Specifies the numerator for the acceleration multiplier. accel_denominator Specifies the denominator for the acceleration multiplier. threshold Specifies the acceleration threshold. The function defines how the pointing device moves. The acceleration, expressed as a fraction, is a multiplier for movement. For example, specifying 3/1 means the pointer moves three times as fast as normal. The fraction may be rounded arbitrarily by the X server. Acceleration only takes effect if the pointer moves more than threshold pixels at once and only applies to the amount beyond the value in the threshold argument. Setting a value to -1 restores the default. The values of the do_accel and do_threshold arguments must be True for the pointer values to be set, or the parameters are unchanged. Negative values (other than -1) generate a BadValue error, as does a zero value for the accel_denominator argument. can generate a BadValue error. To get the current pointer parameters, use . XGetPointerControl XGetPointerControl Display *display int*accel_numerator_return, *accel_denominator_return int *threshold_return display Specifies the connection to the X server. accel_numerator_return Returns the numerator for the acceleration multiplier. accel_denominator_return Returns the denominator for the acceleration multiplier. threshold_return Returns the acceleration threshold. The function returns the pointer's current acceleration multiplier and acceleration threshold. Manipulating the Keyboard Encoding A KeyCode represents a physical (or logical) key. KeyCodes lie in the inclusive range [8,255]. A KeyCode value carries no intrinsic information, although server implementors may attempt to encode geometry (for example, matrix) information in some fashion so that it can be interpreted in a server-dependent fashion. The mapping between keys and KeyCodes cannot be changed. A KeySym is an encoding of a symbol on the cap of a key. The set of defined KeySyms includes the ISO Latin character sets (1-4), Katakana, Arabic, Cyrillic, Greek, Technical, Special, Publishing, APL, Hebrew, Thai, Korean and a miscellany of keys found on keyboards (Return, Help, Tab, and so on). To the extent possible, these sets are derived from international standards. In areas where no standards exist, some of these sets are derived from Digital Equipment Corporation standards. The list of defined symbols can be found in <X11/keysymdef.h>. X11/keysymdef.h Files<X11/keysymdef.h> Headers<X11/keysymdef.h> Unfortunately, some C preprocessors have limits on the number of defined symbols. If you must use KeySyms not in the Latin 1-4, Greek, and miscellaneous classes, you may have to define a symbol for those sets. Most applications usually only include <X11/keysym.h>, X11/keysym.h Files<X11/keysym.h> Headers<X11/keysym.h> which defines symbols for ISO Latin 1-4, Greek, and miscellaneous. A list of KeySyms is associated with each KeyCode. The list is intended to convey the set of symbols on the corresponding key. If the list (ignoring trailing NoSymbol entries) is a single KeySym ``K'', then the list is treated as if it were the list ``K NoSymbol K NoSymbol''. If the list (ignoring trailing NoSymbol entries) is a pair of KeySyms ``K1 K2'', then the list is treated as if it were the list ``K1 K2 K1 K2''. If the list (ignoring trailing NoSymbol entries) is a triple of KeySyms ``K1 K2 K3'', then the list is treated as if it were the list ``K1 K2 K3 NoSymbol''. When an explicit ``void'' element is desired in the list, the value VoidSymbol can be used. The first four elements of the list are split into two groups of KeySyms. Group 1 contains the first and second KeySyms; Group 2 contains the third and fourth KeySyms. Within each group, if the second element of the group is NoSymbol, then the group should be treated as if the second element were the same as the first element, except when the first element is an alphabetic KeySym ``K'' for which both lowercase and uppercase forms are defined. In that case, the group should be treated as if the first element were the lowercase form of ``K'' and the second element were the uppercase form of ``K''. The standard rules for obtaining a KeySym from a KeyPress event make use of only the Group 1 and Group 2 KeySyms; no interpretation of other KeySyms in the list is given. Which group to use is determined by the modifier state. Switching between groups is controlled by the KeySym named MODE SWITCH, by attaching that KeySym to some KeyCode and attaching that KeyCode to any one of the modifiers Mod1 through Mod5. This modifier is called the group modifier. For any KeyCode, Group 1 is used when the group modifier is off, and Group 2 is used when the group modifier is on. The Lock modifier is interpreted as CapsLock when the KeySym named XK_Caps_Lock is attached to some KeyCode and that KeyCode is attached to the Lock modifier. The Lock modifier is interpreted as ShiftLock when the KeySym named XK_Shift_Lock is attached to some KeyCode and that KeyCode is attached to the Lock modifier. If the Lock modifier could be interpreted as both CapsLock and ShiftLock, the CapsLock interpretation is used. The operation of keypad keys is controlled by the KeySym named XK_Num_Lock, by attaching that KeySym to some KeyCode and attaching that KeyCode to any one of the modifiers Mod1 through Mod5. This modifier is called the numlock modifier. The standard KeySyms with the prefix ``XK_KP_'' in their name are called keypad KeySyms; these are KeySyms with numeric value in the hexadecimal range 0xFF80 to 0xFFBD inclusive. In addition, vendor-specific KeySyms in the hexadecimal range 0x11000000 to 0x1100FFFF are also keypad KeySyms. Within a group, the choice of KeySym is determined by applying the first rule that is satisfied from the following list: The numlock modifier is on and the second KeySym is a keypad KeySym. In this case, if the Shift modifier is on, or if the Lock modifier is on and is interpreted as ShiftLock, then the first KeySym is used, otherwise the second KeySym is used. The Shift and Lock modifiers are both off. In this case, the first KeySym is used. The Shift modifier is off, and the Lock modifier is on and is interpreted as CapsLock. In this case, the first KeySym is used, but if that KeySym is lowercase alphabetic, then the corresponding uppercase KeySym is used instead. The Shift modifier is on, and the Lock modifier is on and is interpreted as CapsLock. In this case, the second KeySym is used, but if that KeySym is lowercase alphabetic, then the corresponding uppercase KeySym is used instead. The Shift modifier is on, or the Lock modifier is on and is interpreted as ShiftLock, or both. In this case, the second KeySym is used. No spatial geometry of the symbols on the key is defined by their order in the KeySym list, although a geometry might be defined on a server-specific basis. The X server does not use the mapping between KeyCodes and KeySyms. Rather, it merely stores it for reading and writing by clients. To obtain the legal KeyCodes for a display, use . XDisplayKeycodes XDisplayKeycodes Display *display int*min_keycodes_return, *max_keycodes_return display Specifies the connection to the X server. min_keycodes_return Returns the minimum number of KeyCodes. max_keycodes_return Returns the maximum number of KeyCodes. The function returns the min-keycodes and max-keycodes supported by the specified display. The minimum number of KeyCodes returned is never less than 8, and the maximum number of KeyCodes returned is never greater than 255. Not all KeyCodes in this range are required to have corresponding keys. To obtain the symbols for the specified KeyCodes, use . XGetKeyboardMapping KeySym *XGetKeyboardMapping Display *display KeyCode first_keycode int keycode_count int *keysyms_per_keycode_return display Specifies the connection to the X server. first_keycode Specifies the first KeyCode that is to be returned. keycode_count Specifies the number of KeyCodes that are to be returned. keysyms_per_keycode_return Returns the number of KeySyms per KeyCode. The function returns the symbols for the specified number of KeyCodes starting with first_keycode. The value specified in first_keycode must be greater than or equal to min_keycode as returned by , or a BadValue error results. In addition, the following expression must be less than or equal to max_keycode as returned by : first_keycode + keycode_count - 1 If this is not the case, a BadValue error results. The number of elements in the KeySyms list is: keycode_count * keysyms_per_keycode_return KeySym number N, counting from zero, for KeyCode K has the following index in the list, counting from zero: (K - first_code) * keysyms_per_code_return + N The X server arbitrarily chooses the keysyms_per_keycode_return value to be large enough to report all requested symbols. A special KeySym value of NoSymbol is used to fill in unused elements for individual KeyCodes. To free the storage returned by , use . can generate a BadValue error. To change the keyboard mapping, use . XChangeKeyboardMapping XChangeKeyboardMapping Display *display int first_keycode int keysyms_per_keycode KeySym *keysyms int num_codes display Specifies the connection to the X server. first_keycode Specifies the first KeyCode that is to be changed. keysyms_per_keycode Specifies the number of KeySyms per KeyCode. keysyms Specifies an array of KeySyms. num_codes Specifies the number of KeyCodes that are to be changed. The function defines the symbols for the specified number of KeyCodes starting with first_keycode. The symbols for KeyCodes outside this range remain unchanged. The number of elements in keysyms must be: num_codes * keysyms_per_keycode The specified first_keycode must be greater than or equal to min_keycode returned by , or a BadValue error results. In addition, the following expression must be less than or equal to max_keycode as returned by , or a BadValue error results: first_keycode + num_codes - 1 KeySym number N, counting from zero, for KeyCode K has the following index in keysyms, counting from zero: (K - first_keycode) * keysyms_per_keycode + N The specified keysyms_per_keycode can be chosen arbitrarily by the client to be large enough to hold all desired symbols. A special KeySym value of NoSymbol should be used to fill in unused elements for individual KeyCodes. It is legal for NoSymbol to appear in nontrailing positions of the effective list for a KeyCode. generates a MappingNotify event. There is no requirement that the X server interpret this mapping. It is merely stored for reading and writing by clients. can generate BadAlloc and BadValue errors. The next six functions make use of the XModifierKeymap data structure, which contains: XModifierKeymap typedef struct { int max_keypermod; /* This server's max number of keys per modifier */ KeyCode *modifiermap; /* An 8 by max_keypermod array of the modifiers */ } XModifierKeymap; To create an XModifierKeymap structure, use . XNewModifiermap XModifierKeymap *XNewModifiermap int max_keys_per_mod max_keys_per_mod Specifies the number of KeyCode entries preallocated to the modifiers in the map. The function returns a pointer to XModifierKeymap structure for later use. To add a new entry to an XModifierKeymap structure, use . XInsertModifiermapEntry XModifierKeymap *XInsertModifiermapEntry XModifierKeymap *modmap KeyCode keycode_entry int modifier modmap Specifies the XModifierKeymap structure. keycode_entry Specifies the KeyCode. modifier Specifies the modifier. The function adds the specified KeyCode to the set that controls the specified modifier and returns the resulting XModifierKeymap structure (expanded as needed). To delete an entry from an XModifierKeymap structure, use . XDeleteModifiermapEntry XModifierKeymap *XDeleteModifiermapEntry XModifierKeymap *modmap KeyCode keycode_entry int modifier modmap Specifies the XModifierKeymap structure. keycode_entry Specifies the KeyCode. modifier Specifies the modifier. The function deletes the specified KeyCode from the set that controls the specified modifier and returns a pointer to the resulting XModifierKeymap structure. To destroy an XModifierKeymap structure, use . XFreeModifiermap XFreeModifiermap XModifierKeymap *modmap modmap Specifies the XModifierKeymap structure. The function frees the specified XModifierKeymap structure. To set the KeyCodes to be used as modifiers, use . XSetModifierMapping int XSetModifierMapping Display *display XModifierKeymap *modmap display Specifies the connection to the X server. modmap Specifies the XModifierKeymap structure. The function specifies the KeyCodes of the keys (if any) that are to be used as modifiers. If it succeeds, the X server generates a MappingNotify event, and returns MappingSuccess. X permits at most 8 modifier keys. If more than 8 are specified in the XModifierKeymap structure, a BadLength error results. The modifiermap member of the XModifierKeymap structure contains 8 sets of max_keypermod KeyCodes, one for each modifier in the order Shift, Lock, Control, Mod1, Mod2, Mod3, Mod4, and Mod5. Only nonzero KeyCodes have meaning in each set, and zero KeyCodes are ignored. In addition, all of the nonzero KeyCodes must be in the range specified by min_keycode and max_keycode in the Display structure, or a BadValue error results. An X server can impose restrictions on how modifiers can be changed, for example, if certain keys do not generate up transitions in hardware, if auto-repeat cannot be disabled on certain keys, or if multiple modifier keys are not supported. If some such restriction is violated, the status reply is MappingFailed, and none of the modifiers are changed. If the new KeyCodes specified for a modifier differ from those currently defined and any (current or new) keys for that modifier are in the logically down state, returns MappingBusy, and none of the modifiers is changed. can generate BadAlloc and BadValue errors. To obtain the KeyCodes used as modifiers, use . XGetModifierMapping XModifierKeymap *XGetModifierMapping Display *display display Specifies the connection to the X server. The function returns a pointer to a newly created XModifierKeymap structure that contains the keys being used as modifiers. The structure should be freed after use by calling . If only zero values appear in the set for any modifier, that modifier is disabled. reading and writing by clients. can generate BadAlloc and BadValue errors. The next six functions make use of the XModifierKeymap data structure, which contains: XModifierKeymap Pixmaps can only be used on the screen on which they were created. Pixmaps are off-screen resources that are used for various operations, such as defining cursors as tiling patterns or as the source for certain raster operations. Most graphics requests can operate either on a window or on a pixmap. A bitmap is a single bit-plane pixmap. To create a pixmap of a given size, use . XCreatePixmap Pixmap XCreatePixmap Display *display Drawable d unsigned int width unsigned int height unsigned int depth display Specifies the connection to the X server. d Specifies which screen the pixmap is created on. width height Specify the width and height, which define the dimensions of the pixmap. depth Specifies the depth of the pixmap. The function creates a pixmap of the width, height, and depth you specified and returns a pixmap ID that identifies it. It is valid to pass an InputOnly window to the drawable argument. The width and height arguments must be nonzero, or a BadValue error results. The depth argument must be one of the depths supported by the screen of the specified drawable, or a BadValue error results. The server uses the specified drawable to determine on which screen to create the pixmap. The pixmap can be used only on this screen and only with other drawables of the same depth (see for an exception to this rule). The initial contents of the pixmap are undefined. can generate BadAlloc, BadDrawable, and BadValue errors. To free all storage associated with a specified pixmap, use . XFreePixmap XFreePixmap Display *display Pixmap pixmap display Specifies the connection to the X server. pixmap Specifies the pixmap. The function first deletes the association between the pixmap ID and the pixmap. Then, the X server frees the pixmap storage when there are no references to it. The pixmap should never be referenced again. can generate a BadPixmap error. Creating, Recoloring, and Freeing Cursors Each window can have a different cursor defined for it. Whenever the pointer is in a visible window, it is set to the cursor defined for that window. If no cursor was defined for that window, the cursor is the one defined for the parent window. From X's perspective, a cursor consists of a cursor source, mask, colors, and a hotspot. The mask pixmap determines the shape of the cursor and must be a depth of one. The source pixmap must have a depth of one, and the colors determine the colors of the source. The hotspot defines the point on the cursor that is reported when a pointer event occurs. There may be limitations imposed by the hardware on cursors as to size and whether a mask is implemented. XQueryBestCursor can be used to find out what sizes are possible. There is a standard font for creating cursors, but Xlib provides functions that you can use to create cursors from an arbitrary font or from bitmaps. To create a cursor from the standard cursor font, use . #include <X11/cursorfont.h> XCreateFontCursor Cursor XCreateFontCursor Display *display unsigned int shape display Specifies the connection to the X server. shape Specifies the shape of the cursor. X provides a set of standard cursor shapes in a special font named cursor. Applications are encouraged to use this interface for their cursors because the font can be customized for the individual display type. The shape argument specifies which glyph of the standard fonts to use. The hotspot comes from the information stored in the cursor font. The initial colors of a cursor are a black foreground and a white background (see ). For further information about cursor shapes, see appendix B. can generate BadAlloc and BadValue errors. To create a cursor from font glyphs, use . XCreateGlyphCursor Cursor XCreateGlyphCursor Display *display Fontsource_font, mask_font unsigned int source_char, mask_char XColor *foreground_color XColor *background_color display Specifies the connection to the X server. source_font Specifies the font for the source glyph. mask_font Specifies the font for the mask glyph or None. source_char Specifies the character glyph for the source. mask_char Specifies the glyph character for the mask. foreground_color Specifies the RGB values for the foreground of the source. background_color Specifies the RGB values for the background of the source. The function is similar to except that the source and mask bitmaps are obtained from the specified font glyphs. The source_char must be a defined glyph in source_font, or a BadValue error results. If mask_font is given, mask_char must be a defined glyph in mask_font, or a BadValue error results. The mask_font and character are optional. The origins of the source_char and mask_char (if defined) glyphs are positioned coincidently and define the hotspot. The source_char and mask_char need not have the same bounding box metrics, and there is no restriction on the placement of the hotspot relative to the bounding boxes. If no mask_char is given, all pixels of the source are displayed. You can free the fonts immediately by calling if no further explicit references to them are to be made. For 2-byte matrix fonts, the 16-bit value should be formed with the byte1 member in the most significant byte and the byte2 member in the least significant byte. can generate BadAlloc, BadFont, and BadValue errors. To create a cursor from two bitmaps, use . XCreatePixmapCursor Cursor XCreatePixmapCursor Display *display Pixmap source Pixmap mask XColor *foreground_color XColor *background_color unsigned int x, y display Specifies the connection to the X server. source Specifies the shape of the source cursor. mask Specifies the cursor's source bits to be displayed or None. foreground_color Specifies the RGB values for the foreground of the source. background_color Specifies the RGB values for the background of the source. x y Specify the x and y coordinates, which indicate the hotspot relative to the source's origin. The function creates a cursor and returns the cursor ID associated with it. The foreground and background RGB values must be specified using foreground_color and background_color, even if the X server only has a StaticGray or GrayScale screen. The foreground color is used for the pixels set to 1 in the source, and the background color is used for the pixels set to 0. Both source and mask, if specified, must have depth one (or a BadMatch error results) but can have any root. The mask argument defines the shape of the cursor. The pixels set to 1 in the mask define which source pixels are displayed, and the pixels set to 0 define which pixels are ignored. If no mask is given, all pixels of the source are displayed. The mask, if present, must be the same size as the pixmap defined by the source argument, or a BadMatch error results. The hotspot must be a point within the source, or a BadMatch error results. The components of the cursor can be transformed arbitrarily to meet display limitations. The pixmaps can be freed immediately if no further explicit references to them are to be made. Subsequent drawing in the source or mask pixmap has an undefined effect on the cursor. The X server might or might not make a copy of the pixmap. can generate BadAlloc and BadPixmap errors. To determine useful cursor sizes, use . XQueryBestCursor Status XQueryBestCursor Display *display Drawable d unsigned int width unsigned int height unsigned int *width_return unsigned int *height_return display Specifies the connection to the X server. d Specifies the drawable, which indicates the screen. width height Specify the width and height of the cursor that you want the size information for. width_return height_return Return the best width and height that is closest to the specified width and height. Some displays allow larger cursors than other displays. The function provides a way to find out what size cursors are actually possible on the display. Cursorlimitations It returns the largest size that can be displayed. Applications should be prepared to use smaller cursors on displays that cannot support large ones. can generate a BadDrawable error. To change the color of a given cursor, use . XRecolorCursor XRecolorCursor Display *display Cursor cursor XColor*foreground_color, *background_color display Specifies the connection to the X server. cursor Specifies the cursor. foreground_color Specifies the RGB values for the foreground of the source. background_color Specifies the RGB values for the background of the source. The function changes the color of the specified cursor, and if the cursor is being displayed on a screen, the change is visible immediately. The pixel members of the XColor structures are ignored; only the RGB values are used. can generate a BadCursor error. To free (destroy) a given cursor, use . XFreeCursor XFreeCursor Display *display Cursor cursor display Specifies the connection to the X server. cursor Specifies the cursor. The function deletes the association between the cursor resource ID and the specified cursor. The cursor storage is freed when no other resource references it. The specified cursor ID should not be referred to again. can generate a BadCursor error. maps, use . XCreatePixmapCursor Display Functions Before your program can use a display, you must establish a connection to the X server. Once you have established a connection, you then can use the Xlib macros and functions discussed in this chapter to return information about the display. This chapter discusses how to: Open (connect to) the display Obtain information about the display, image formats, or screens Generate a NoOperation protocol request Free client-created data Close (disconnect from) a display Use X Server connection close operations Use Xlib with threads Use internal connections Opening the Display To open a connection to the X server that controls a display, use . XOpenDisplay Display *XOpenDisplay char *display_name display_name Specifies the hardware display name, which determines the display and communications domain to be used. On a POSIX-conformant system, if the display_name is NULL, it defaults to the value of the DISPLAY environment variable. EnvironmentDISPLAY The encoding and interpretation of the display name are implementation-dependent. Strings in the Host Portable Character Encoding are supported; support for other characters is implementation-dependent. On POSIX-conformant systems, the display name or DISPLAY environment variable can be a string in the format: protocol/hostname:number.screen_number protocol Specifies a protocol family or an alias for a protocol family. Supported protocol families are implementation dependent. The protocol entry is optional. If protocol is not specified, the / separating protocol and hostname must also not be specified. hostname Specifies the name of the host machine on which the display is physically attached. You follow the hostname with either a single colon (:) or a double colon (::). number Specifies the number of the display server on that host machine. You may optionally follow this display number with a period (.). A single CPU can have more than one display. Multiple displays are usually numbered starting with zero. Screen screen_number Specifies the screen to be used on that server. Multiple screens can be controlled by a single X server. The screen_number sets an internal variable that can be accessed by using the DefaultScreen macro or the function if you are using languages other than C (see section 2.2.1). For example, the following would specify screen 1 of display 0 on the machine named ``dual-headed'': dual-headed:0.1 The function returns a Display structure that serves as the connection to the X server and that contains all the information about that X server. connects your application to the X server through TCP or DECnet communications protocols, or through some local inter-process communication protocol. ProtocolTCP ProtocolDECnet If the protocol is specified as "tcp", "inet", or "inet6", or if no protocol is specified and the hostname is a host machine name and a single colon (:) separates the hostname and display number, connects using TCP streams. (If the protocol is specified as "inet", TCP over IPv4 is used. If the protocol is specified as "inet6", TCP over IPv6 is used. Otherwise, the implementation determines which IP version is used.) If the hostname and protocol are both not specified, Xlib uses whatever it believes is the fastest transport. If the hostname is a host machine name and a double colon (::) separates the hostname and display number, connects using DECnet. A single X server can support any or all of these transport mechanisms simultaneously. A particular Xlib implementation can support many more of these transport mechanisms. Display If successful, returns a pointer to a Display structure, which is defined in <X11/Xlib.h>. X11/Xlib.h Files<X11/Xlib.h> Headers<X11/Xlib.h> If does not succeed, it returns NULL. After a successful call to , all of the screens in the display can be used by the client. The screen number specified in the display_name argument is returned by the DefaultScreen macro (or the function). You can access elements of the Display and Screen structures only by using the information macros or functions. For information about using macros and functions to obtain information from the Display structure, see section 2.2.1. X servers may implement various types of access control mechanisms (see section 9.8). Obtaining Information about the Display, Image Formats, or Screens The Xlib library provides a number of useful macros and corresponding functions that return data from the Display structure. The macros are used for C programming, and their corresponding function equivalents are for other language bindings. This section discusses the: Display macros Image format functions and macros Screen information macros Displaydata structure All other members of the Display structure (that is, those for which no macros are defined) are private to Xlib and must not be used. Applications must never directly modify or inspect these private members of the Display structure. The , , , , , and functions in the next sections are misnamed. These functions really should be named Screenwhatever and XScreenwhatever, not Displaywhatever or XDisplaywhatever. Our apologies for the resulting confusion. Display Macros Applications should not directly modify any part of the Display and Screen structures. The members should be considered read-only, although they may change as the result of other operations on the display. The following lists the C language macros, their corresponding function equivalents that are for other language bindings, and what data both can return. AllPlanes() XAllPlanes() AllPlanes XAllPlanes Both return a value with all bits set to 1 suitable for use in a plane argument to a procedure. Both BlackPixel and WhitePixel can be used in implementing a monochrome application. These pixel values are for permanently allocated entries in the default colormap. The actual RGB (red, green, and blue) values are settable on some screens and, in any case, may not actually be black or white. The names are intended to convey the expected relative intensity of the colors. BlackPixel(display, screen_number) unsigned long XBlackPixel Display *display int screen_number display Specifies the connection to the X server. screen_number Specifies the appropriate screen number on the host server. BlackPixel XBlackPixel Both return the black pixel value for the specified screen. WhitePixel(display, screen_number) unsigned long XWhitePixel Display *display int screen_number display Specifies the connection to the X server. screen_number Specifies the appropriate screen number on the host server. WhitePixel XWhitePixel Both return the white pixel value for the specified screen. ConnectionNumber(display) int XConnectionNumber Display *display display Specifies the connection to the X server. ConnectionNumber XConnectionNumber Both return a connection number for the specified display. On a POSIX-conformant system, this is the file descriptor of the connection. DefaultColormap(display, screen_number) Colormap XDefaultColormap Display *display int screen_number display Specifies the connection to the X server. screen_number Specifies the appropriate screen number on the host server. DefaultColormap XDefaultColormap Both return the default colormap ID for allocation on the specified screen. Most routine allocations of color should be made out of this colormap. DefaultDepth(display, screen_number) int XDefaultDepth Display *display int screen_number display Specifies the connection to the X server. screen_number Specifies the appropriate screen number on the host server. DefaultDepth XDefaultDepth Both return the depth (number of planes) of the default root window for the specified screen. Other depths may also be supported on this screen (see ). XListDepths To determine the number of depths that are available on a given screen, use XListDepths. DefaultGC(display, screen_number) GC XDefaultGC Display *display int screen_number int *count_return display Specifies the connection to the X server. screen_number Specifies the appropriate screen number on the host server. count_return Returns the number of depths. The XListDepths function returns the array of depths that are available on the specified screen. If the specified screen_number is valid and sufficient memory for the array can be allocated, XListDepths sets count_return to the number of available depths. Otherwise, it does not set count_return and returns NULL. To release the memory allocated for the array of depths, use . DefaultGC(display, screen_number) GC XDefaultGC Display *display int screen_number display Specifies the connection to the X server. screen_number Specifies the appropriate screen number on the host server. DefaultGC XDefaultGC Both return the default graphics context for the root window of the specified screen. This GC is created for the convenience of simple applications and contains the default GC components with the foreground and background pixel values initialized to the black and white pixels for the screen, respectively. You can modify its contents freely because it is not used in any Xlib function. This GC should never be freed. DefaultRootWindow(display) Window XDefaultRootWindow Display *display display Specifies the connection to the X server. DefaultRootWindow XDefaultRootWindow Both return the root window for the default screen. DefaultScreenOfDisplay(display) Screen *XDefaultScreenOfDisplay Display *display display Specifies the connection to the X server. DefaultScreenOfDisplay XDefaultScreenOfDisplay Both return a pointer to the default screen. ScreenOfDisplay(display, screen_number) Screen *XScreenOfDisplay Display *display int screen_number display Specifies the connection to the X server. screen_number Specifies the appropriate screen number on the host server. ScreenOfDisplay XScreenOfDisplay Both return a pointer to the indicated screen. DefaultScreen(display) int XDefaultScreen Display *display display Specifies the connection to the X server. DefaultScreen XDefaultScreen Both return the default screen number referenced by the function. This macro or function should be used to retrieve the screen number in applications that will use only a single screen. DefaultVisual(display, screen_number) Visual *XDefaultVisual Display *display int screen_number display Specifies the connection to the X server. screen_number Specifies the appropriate screen number on the host server. DefaultVisual XDefaultVisual Both return the default visual type for the specified screen. For further information about visual types, see section 3.1. DisplayCells(display, screen_number) int XDisplayCells Display *display int screen_number display Specifies the connection to the X server. screen_number Specifies the appropriate screen number on the host server. DisplayCells XDisplayCells Both return the number of entries in the default colormap. DisplayPlanes(display, screen_number) int XDisplayPlanes Display *display int screen_number display Specifies the connection to the X server. screen_number Specifies the appropriate screen number on the host server. DisplayPlanes XDisplayPlanes Both return the depth of the root window of the specified screen. For an explanation of depth, see the glossary. DisplayString(display) char *XDisplayString Display *display display Specifies the connection to the X server. DisplayString XDisplayString Both return the string that was passed to when the current display was opened. On POSIX-conformant systems, if the passed string was NULL, these return the value of the DISPLAY environment variable when the current display was opened. POSIX System Callfork These are useful to applications that invoke the fork system call and want to open a new connection to the same display from the child process as well as for printing error messages. LastKnownRequestProcessed(display) unsigned long XLastKnownRequestProcessed Display *display display Specifies the connection to the X server. XExtendedMaxRequestSize The XExtendedMaxRequestSize function returns zero if the specified display does not support an extended-length protocol encoding; otherwise, it returns the maximum request size (in 4-byte units) supported by the server using the extended-length encoding. The Xlib functions , , , , , and will use the extended-length encoding as necessary, if supported by the server. Use of the extended-length encoding in other Xlib functions (for example, , , , , , ) is permitted but not required; an Xlib implementation may choose to split the data across multiple smaller requests instead. LastKnownRequestProcessed(display) unsigned long XLastKnownRequestProcessed Display *display display Specifies the connection to the X server. XMaxRequestSize The XMaxRequestSize function returns the maximum request size (in 4-byte units) supported by the server without using an extended-length protocol encoding. Single protocol requests to the server can be no larger than this size unless an extended-length protocol encoding is supported by the server. The protocol guarantees the size to be no smaller than 4096 units (16384 bytes). Xlib automatically breaks data up into multiple protocol requests as necessary for the following functions: , , , , , and . LastKnownRequestProcessed(display) unsigned long XLastKnownRequestProcessed Display *display display Specifies the connection to the X server. LastKnownRequestProcessed XLastKnownRequestProcessed Both extract the full serial number of the last request known by Xlib to have been processed by the X server. Xlib automatically sets this number when replies, events, and errors are received. NextRequest(display) unsigned long XNextRequest Display *display display Specifies the connection to the X server. NextRequest XNextRequest Both extract the full serial number that is to be used for the next request. Serial numbers are maintained separately for each display connection. ProtocolVersion(display) int XProtocolVersion Display *display display Specifies the connection to the X server. ProtocolVersion XProtocolVersion Both return the major version number (11) of the X protocol associated with the connected display. ProtocolRevision(display) int XProtocolRevision Display *display display Specifies the connection to the X server. ProtocolRevision XProtocolRevision Both return the minor protocol revision number of the X server. QLength(display) int XQLength Display *display display Specifies the connection to the X server. QLength XQLength Both return the length of the event queue for the connected display. Note that there may be more events that have not been read into the queue yet (see ). RootWindow(display, screen_number) Window XRootWindow Display *display int screen_number display Specifies the connection to the X server. screen_number Specifies the appropriate screen number on the host server. WindowRootWindow RootWindow WindowXRootWindow XRootWindow Both return the root window. These are useful with functions that need a drawable of a particular screen and for creating top-level windows. ScreenCount(display) int XScreenCount Display *display display Specifies the connection to the X server. ScreenCount XScreenCount Both return the number of available screens. ServerVendor(display) char *XServerVendor Display *display display Specifies the connection to the X server. ServerVendor XServerVendor Both return a pointer to a null-terminated string that provides some identification of the owner of the X server implementation. If the data returned by the server is in the Latin Portable Character Encoding, then the string is in the Host Portable Character Encoding. Otherwise, the contents of the string are implementation-dependent. VendorRelease(display) int XVendorRelease Display *display display Specifies the connection to the X server. VendorRelease XVendorRelease Both return a number related to a vendor's release of the X server. Image Format Functions and Macros Applications are required to present data to the X server in a format that the server demands. To help simplify applications, most of the work required to convert the data is provided by Xlib (see sections 8.7 and 16.8). The XPixmapFormatValues structure provides an interface to the pixmap format information that is returned at the time of a connection setup. It contains: typedef struct { int depth; int bits_per_pixel; int scanline_pad; } XPixmapFormatValues; To obtain the pixmap format information for a given display, use XListPixmapFormats. XListPixmapFormats XPixmapFormatValues *XListPixmapFormats Display *display int *count_return display Specifies the connection to the X server. count_return Returns the number of pixmap formats that are supported by the display. The XListPixmapFormats function returns an array of XPixmapFormatValues structures that describe the types of Z format images supported by the specified display. If insufficient memory is available, XListPixmapFormats returns NULL. To free the allocated storage for the XPixmapFormatValues structures, use . The following lists the C language macros, their corresponding function equivalents that are for other language bindings, and what data they both return for the specified server and screen. These are often used by toolkits as well as by simple applications. ImageByteOrder(display) int XImageByteOrder Display *display display Specifies the connection to the X server. ImageByteOrder XImageByteOrder Both specify the required byte order for images for each scanline unit in XY format (bitmap) or for each pixel value in Z format. The macro or function can return either LSBFirst or MSBFirst. BitmapUnit(display) int XBitmapUnit Display *display display Specifies the connection to the X server. BitmapUnit XBitmapUnit Both return the size of a bitmap's scanline unit in bits. The scanline is calculated in multiples of this value. BitmapBitOrder(display) int XBitmapBitOrder Display *display display Specifies the connection to the X server. BitmapBitOrder XBitmapBitOrder Within each bitmap unit, the left-most bit in the bitmap as displayed on the screen is either the least significant or most significant bit in the unit. This macro or function can return LSBFirst or MSBFirst. BitmapPad(display) int XBitmapPad Display *display display Specifies the connection to the X server. BitmapPad XBitmapPad Each scanline must be padded to a multiple of bits returned by this macro or function. DisplayHeight(display, screen_number) int XDisplayHeight Display *display int screen_number display Specifies the connection to the X server. screen_number Specifies the appropriate screen number on the host server. DisplayHeight XDisplayHeight Both return an integer that describes the height of the screen in pixels. DisplayHeightMM(display, screen_number) int XDisplayHeightMM Display *display int screen_number display Specifies the connection to the X server. screen_number Specifies the appropriate screen number on the host server. DisplayHeightMM XDisplayHeightMM Both return the height of the specified screen in millimeters. DisplayWidth(display, screen_number) int XDisplayWidth Display *display int screen_number display Specifies the connection to the X server. screen_number Specifies the appropriate screen number on the host server. DisplayWidth XDisplayWidth Both return the width of the screen in pixels. DisplayWidthMM(display, screen_number) int XDisplayWidthMM Display *display int screen_number display Specifies the connection to the X server. screen_number Specifies the appropriate screen number on the host server. DisplayWidthMM XDisplayWidthMM Both return the width of the specified screen in millimeters. Screen Information Macros The following lists the C language macros, their corresponding function equivalents that are for other language bindings, and what data they both can return. These macros or functions all take a pointer to the appropriate screen structure. BlackPixelOfScreen(screen) unsigned long XBlackPixelOfScreen Screen *screen screen Specifies the appropriate Screen structure. BlackPixelOfScreen XBlackPixelOfScreen Both return the black pixel value of the specified screen. WhitePixelOfScreen(screen) unsigned long XWhitePixelOfScreen Screen *screen screen Specifies the appropriate Screen structure. WhitePixelOfScreen XWhitePixelOfScreen Both return the white pixel value of the specified screen. CellsOfScreen(screen) int XCellsOfScreen Screen *screen screen Specifies the appropriate Screen structure. CellsOfScreen XCellsOfScreen Both return the number of colormap cells in the default colormap of the specified screen. DefaultColormapOfScreen(screen) Colormap XDefaultColormapOfScreen Screen *screen screen Specifies the appropriate Screen structure. DefaultColormapOfScreen XDefaultColormapOfScreen Both return the default colormap of the specified screen. DefaultDepthOfScreen(screen) int XDefaultDepthOfScreen Screen *screen screen Specifies the appropriate Screen structure. DefaultDepthOfScreen XDefaultDepthOfScreen Both return the depth of the root window. DefaultGCOfScreen(screen) GC XDefaultGCOfScreen Screen *screen screen Specifies the appropriate Screen structure. DefaultGCOfScreen XDefaultGCOfScreen Both return a default graphics context (GC) of the specified screen, which has the same depth as the root window of the screen. The GC must never be freed. DefaultVisualOfScreen(screen) Visual *XDefaultVisualOfScreen Screen *screen screen Specifies the appropriate Screen structure. DefaultVisualOfScreen XDefaultVisualOfScreen Both return the default visual of the specified screen. For information on visual types, see section 3.1. DoesBackingStore(screen) int XDoesBackingStore Screen *screen screen Specifies the appropriate Screen structure. DoesBackingStore XDoesBackingStore Both return a value indicating whether the screen supports backing stores. The value returned can be one of WhenMapped, NotUseful, or Always (see section 3.2.4). DoesSaveUnders(screen) Bool XDoesSaveUnders Screen *screen screen Specifies the appropriate Screen structure. DoesSaveUnders XDoesSaveUnders Both return a Boolean value indicating whether the screen supports save unders. If True, the screen supports save unders. If False, the screen does not support save unders (see section 3.2.5). DisplayOfScreen(screen) Display *XDisplayOfScreen Screen *screen screen Specifies the appropriate Screen structure. DisplayOfScreen XDisplayOfScreen Both return the display of the specified screen. XScreenNumberOfScreen EventMaskOfScreen(screen) long XEventMaskOfScreen Screen *screen screen Specifies the appropriate Screen structure. The XScreenNumberOfScreen function returns the screen index number of the specified screen. EventMaskOfScreen(screen) long XEventMaskOfScreen Screen *screen screen Specifies the appropriate Screen structure. EventMaskOfScreen XEventMaskOfScreen Both return the event mask of the root window for the specified screen at connection setup time. WidthOfScreen(screen) int XWidthOfScreen Screen *screen screen Specifies the appropriate Screen structure. WidthOfScreen XWidthOfScreen Both return the width of the specified screen in pixels. HeightOfScreen(screen) int XHeightOfScreen Screen *screen screen Specifies the appropriate Screen structure. HeightOfScreen XHeightOfScreen Both return the height of the specified screen in pixels. WidthMMOfScreen(screen) int XWidthMMOfScreen Screen *screen screen Specifies the appropriate Screen structure. WidthMMOfScreen XWidthMMOfScreen Both return the width of the specified screen in millimeters. HeightMMOfScreen(screen) int XHeightMMOfScreen Screen *screen screen Specifies the appropriate Screen structure. HeightMMOfScreen XHeightMMOfScreen Both return the height of the specified screen in millimeters. MaxCmapsOfScreen(screen) int XMaxCmapsOfScreen Screen *screen screen Specifies the appropriate Screen structure. MaxCmapsOfScreen XMaxCmapsOfScreen Both return the maximum number of installed colormaps supported by the specified screen (see section 9.3). MinCmapsOfScreen(screen) int XMinCmapsOfScreen Screen *screen screen Specifies the appropriate Screen structure. MinCmapsOfScreen XMinCmapsOfScreen Both return the minimum number of installed colormaps supported by the specified screen (see section 9.3). PlanesOfScreen(screen) int XPlanesOfScreen Screen *screen screen Specifies the appropriate Screen structure. PlanesOfScreen XPlanesOfScreen Both return the depth of the root window. RootWindowOfScreen(screen) Window XRootWindowOfScreen Screen *screen screen Specifies the appropriate Screen structure. RootWindowOfScreen XRootWindowOfScreen Both return the root window of the specified screen. Generating a NoOperation Protocol Request To execute a NoOperation protocol request, use . XNoOp XNoOp Display *display display Specifies the connection to the X server. The function sends a NoOperation protocol request to the X server, thereby exercising the connection. Freeing Client-Created Data To free in-memory data that was created by an Xlib function, use . XFree XFree void *data data Specifies the data that is to be freed. The function is a general-purpose Xlib routine that frees the specified data. You must use it to free any objects that were allocated by Xlib, unless an alternate function is explicitly specified for the object. A NULL pointer cannot be passed to this function. Closing the Display To close a display or disconnect from the X server, use XCloseDisplay. XCloseDisplay XCloseDisplay Display *display display Specifies the connection to the X server. The XCloseDisplay function closes the connection to the X server for the display specified in the Display structure and destroys all windows, resource IDs (Window, Font, Pixmap, Colormap, Cursor, and GContext), or other resources that the client has created on this display, unless the close-down mode of the resource has been changed (see ). Therefore, these windows, resource IDs, and other resources should never be referenced again or an error will be generated. Before exiting, you should call XCloseDisplay explicitly so that any pending errors are reported as XCloseDisplay performs a final operation. Resource IDs XCloseDisplay XCloseDisplay can generate a BadGC error. Xlib provides a function to permit the resources owned by a client to survive after the client's connection is closed. To change a client's close-down mode, use . XSetCloseDownMode XSetCloseDownMode Display *display int close_mode display Specifies the connection to the X server. close_mode Specifies the client close-down mode. You can pass DestroyAll, RetainPermanent, or RetainTemporary. The defines what will happen to the client's resources at connection close. A connection starts in DestroyAll mode. For information on what happens to the client's resources when the close_mode argument is RetainPermanent or RetainTemporary, see section 2.6. can generate a BadValue error. Using X Server Connection Close Operations When the X server's connection to a client is closed either by an explicit call to XCloseDisplay or by a process that exits, the X server performs the following automatic operations: It disowns all selections owned by the client (see ). It performs an and if the client has actively grabbed the pointer or the keyboard. It performs an if the client has grabbed the server. It releases all passive grabs made by the client. It marks all resources (including colormap entries) allocated by the client either as permanent or temporary, depending on whether the close-down mode is RetainPermanent or RetainTemporary. However, this does not prevent other client applications from explicitly destroying the resources (see ). When the close-down mode is DestroyAll, the X server destroys all of a client's resources as follows: It examines each window in the client's save-set to determine if it is an inferior (subwindow) of a window created by the client. (The save-set is a list of other clients' windows that are referred to as save-set windows.) If so, the X server reparents the save-set window to the closest ancestor so that the save-set window is not an inferior of a window created by the client. The reparenting leaves unchanged the absolute coordinates (with respect to the root window) of the upper-left outer corner of the save-set window. It performs a MapWindow request on the save-set window if the save-set window is unmapped. The X server does this even if the save-set window was not an inferior of a window created by the client. It destroys all windows created by the client. It performs the appropriate free request on each nonwindow resource created by the client in the server (for example, Font, Pixmap, Cursor, Colormap, and GContext). It frees all colors and colormap entries allocated by a client application. Additional processing occurs when the last connection to the X server closes. An X server goes through a cycle of having no connections and having some connections. When the last connection to the X server closes as a result of a connection closing with the close_mode of DestroyAll, the X server does the following: It resets its state as if it had just been started. The X server begins by destroying all lingering resources from clients that have terminated in RetainPermanent or RetainTemporary mode. It deletes all but the predefined atom identifiers. It deletes all properties on all root windows (see section 4.3). It resets all device maps and attributes (for example, key click, bell volume, and acceleration) as well as the access control list. It restores the standard root tiles and cursors. It restores the default font path. It restores the input focus to state PointerRoot. However, the X server does not reset if you close a connection with a close-down mode set to RetainPermanent or RetainTemporary. Using Xlib with Threads On systems that have threads, support may be provided to permit multiple threads to use Xlib concurrently. To initialize support for concurrent threads, use XInitThreads. XInitThreads Status XInitThreads(); The XInitThreads function initializes Xlib support for concurrent threads. This function must be the first Xlib function a multi-threaded program calls, and it must complete before any other Xlib call is made. This function returns a nonzero status if initialization was successful; otherwise, it returns zero. On systems that do not support threads, this function always returns zero. It is only necessary to call this function if multiple threads might use Xlib concurrently. If all calls to Xlib functions are protected by some other access mechanism (for example, a mutual exclusion lock in a toolkit or through explicit client programming), Xlib thread initialization is not required. It is recommended that single-threaded programs not call this function. To lock a display across several Xlib calls, use XLockDisplay. XLockDisplay XLockDisplay Display *display display Specifies the connection to the X server. The XLockDisplay function locks out all other threads from using the specified display. Other threads attempting to use the display will block until the display is unlocked by this thread. Nested calls to XLockDisplay work correctly; the display will not actually be unlocked until has been called the same number of times as XLockDisplay. This function has no effect unless Xlib was successfully initialized for threads using XInitThreads. To unlock a display, use . XUnlockDisplay XUnlockDisplay Display *display display Specifies the connection to the X server. The function allows other threads to use the specified display again. Any threads that have blocked on the display are allowed to continue. Nested locking works correctly; if XLockDisplay has been called multiple times by a thread, then must be called an equal number of times before the display is actually unlocked. This function has no effect unless Xlib was successfully initialized for threads using XInitThreads. Using Internal Connections In addition to the connection to the X server, an Xlib implementation may require connections to other kinds of servers (for example, to input method servers as described in chapter 13). Toolkits and clients that use multiple displays, or that use displays in combination with other inputs, need to obtain these additional connections to correctly block until input is available and need to process that input when it is available. Simple clients that use a single display and block for input in an Xlib event function do not need to use these facilities. To track internal connections for a display, use . type void XConnectionWatchProc Display *display XPointer client_data int fd Bool opening XPointer *watch_data Status XAddConnectionWatch Display *display XWatchProc procedure XPointer client_data display Specifies the connection to the X server. procedure Specifies the procedure to be called. client_data Specifies the additional client data. The function registers a procedure to be called each time Xlib opens or closes an internal connection for the specified display. The procedure is passed the display, the specified client_data, the file descriptor for the connection, a Boolean indicating whether the connection is being opened or closed, and a pointer to a location for private watch data. If opening is True, the procedure can store a pointer to private data in the location pointed to by watch_data; when the procedure is later called for this same connection and opening is False, the location pointed to by watch_data will hold this same private data pointer. This function can be called at any time after a display is opened. If internal connections already exist, the registered procedure will immediately be called for each of them, before returns. returns a nonzero status if the procedure is successfully registered; otherwise, it returns zero. The registered procedure should not call any Xlib functions. If the procedure directly or indirectly causes the state of internal connections or watch procedures to change, the result is not defined. If Xlib has been initialized for threads, the procedure is called with the display locked and the result of a call by the procedure to any Xlib function that locks the display is not defined unless the executing thread has externally locked the display using XLockDisplay. To stop tracking internal connections for a display, use XRemoveConnectionWatch. XRemoveConnectionWatch () Status XRemoveConnectionWatch Display *display XWatchProc procedure XPointer client_data display Specifies the connection to the X server. procedure Specifies the procedure to be called. client_data Specifies the additional client data. The XRemoveConnectionWatch function removes a previously registered connection watch procedure. The client_data must match the client_data used when the procedure was initially registered. To process input on an internal connection, use . XProcessInternalConnection () void XProcessInternalConnection Display *display int fd display Specifies the connection to the X server. fd Specifies the file descriptor. The function processes input available on an internal connection. This function should be called for an internal connection only after an operating system facility (for example, select or poll) has indicated that input is available; otherwise, the effect is not defined. To obtain all of the current internal connections for a display, use . XInternalConnectionNumbers () Status XInternalConnectionNumbers Display *display int ** fd int * count_return display Specifies the connection to the X server. fd_return Returns the file descriptors. count_return Returns the number of file descriptors. The function returns a list of the file descriptors for all internal connections currently open for the specified display. When the allocated list is no longer needed, free it by using . This functions returns a nonzero status if the list is successfully allocated; otherwise, it returns zero. n>. This function has no effect unless Xlib was successfully initialized for threads using XInitThreads. To unlock a display,libX11-1.6.3/specs/libX11/CH13.xml000064401431060000012000011343361247741723500164260ustar00alancstaff00002660200006 Locales and Internationalized Text Functions An internationalized application is one that is adaptable to the requirements of different native languages, local customs, and character string encodings. The process of adapting the operation to a particular native language, local custom, or string encoding is called localization. A goal of internationalization is to permit localization without program source modifications or recompilation. As one of the localization mechanisms, Xlib provides an X Input Method (XIM) functional interface for internationalized text input and an X Output Method (XOM) functional interface for internationalized text output. Internationalization in X is based on the concept of a locale. A locale defines the localized behavior of a program at run time. Locales affect Xlib in its: Encoding and processing of input method text Encoding of resource files and values Encoding and imaging of text strings Encoding and decoding for inter-client text communication • Encoding and decoding for inter-client text communication Characters from various languages are represented in a computer using an encoding. Different languages have different encodings, and there are even different encodings for the same characters in the same language. This chapter defines support for localized text imaging and text input and describes the locale mechanism that controls all locale-dependent Xlib functions. Sets of functions are provided for multibyte (char *) text as well as wide character (wchar_t) text in the form supported by the host C language environment. The multibyte and wide character functions are equivalent except for the form of the text argument. The Xlib internationalization functions are not meant to provide support for multilingual applications (mixing multiple languages within a single piece of text), but they make it possible to implement applications that work in limited fashion with more than one language in independent contexts. The remainder of this chapter discusses: X locale management Locale and modifier dependencies Variable argument lists Output methods Input methods String constants X Locale Management X supports one or more of the locales defined by the host environment. On implementations that conform to the ANSI C library, the locale announcement method is setlocale. This function configures the locale operation of both the host C library and Xlib. The operation of Xlib is governed by the LC_CTYPE category; this is called the current locale. An implementation is permitted to provide implementation-dependent mechanisms for announcing the locale in addition to setlocale. On implementations that do not conform to the ANSI C library, the locale announcement method is Xlib implementation-dependent. The mechanism by which the semantic operation of Xlib is defined for a specific locale is implementation-dependent. X is not required to support all the locales supported by the host. To determine if the current locale is supported by X, use XSupportsLocale. Bool XSupportsLocale() The XSupportsLocale function returns True if Xlib functions are capable of operating under the current locale. If it returns False, Xlib locale-dependent functions for which the XLocaleNotSupported return status is defined will return XLocaleNotSupported. Other Xlib locale-dependent routines will operate in the ``C'' locale. The client is responsible for selecting its locale and X modifiers. Clients should provide a means for the user to override the clients' locale selection at client invocation. Most single-display X clients operate in a single locale for both X and the host processing environment. They will configure the locale by calling three functions: the host locale configuration function, XSupportsLocale, and . The semantics of certain categories of X internationalization capabilities can be configured by setting modifiers. Modifiers are named by implementation-dependent and locale-specific strings. The only standard use for this capability at present is selecting one of several styles of keyboard input method. To configure Xlib locale modifiers for the current locale, use . XSetLocaleModifiers char *XSetLocaleModifiers char *modifier_list modifier_list Specifies the modifiers. The function sets the X modifiers for the current locale setting. The modifier_list argument is a null-terminated string of the form ``{@category=value}'', that is, having zero or more concatenated ``@category=value'' entries, where category is a category name and value is the (possibly empty) setting for that category. The values are encoded in the current locale. Category names are restricted to the POSIX Portable Filename Character Set. The local host X locale modifiers announcer (on POSIX-compliant systems, the XMODIFIERS environment variable) is appended to the modifier_list to provide default values on the local host. If a given category appears more than once in the list, the first setting in the list is used. If a given category is not included in the full modifier list, the category is set to an implementation-dependent default for the current locale. An empty value for a category explicitly specifies the implementation-dependent default. If the function is successful, it returns a pointer to a string. The contents of the string are such that a subsequent call with that string (in the same locale) will restore the modifiers to the same settings. If modifier_list is a NULL pointer, also returns a pointer to such a string, and the current locale modifiers are not changed. If invalid values are given for one or more modifier categories supported by the locale, a NULL pointer is returned, and none of the current modifiers are changed. At program startup, the modifiers that are in effect are unspecified until the first successful call to set them. Whenever the locale is changed, the modifiers that are in effect become unspecified until the next successful call to set them. Clients should always call with a non-NULL modifier_list after setting the locale before they call any locale-dependent Xlib routine. The only standard modifier category currently defined is ``im'', which identifies the desired input method. The values for input method are not standardized. A single locale may use multiple input methods, switching input method under user control. The modifier may specify the initial input method in effect or an ordered list of input methods. Multiple input methods may be specified in a single im value string in an implementation-dependent manner. The returned modifiers string is owned by Xlib and should not be modified or freed by the client. It may be freed by Xlib after the current locale or modifiers are changed. Until freed, it will not be modified by Xlib. The recommended procedure for clients initializing their locale and modifiers is to obtain locale and modifier announcers separately from one of the following prioritized sources: A command line option A resource The empty string ("") The first of these that is defined should be used. Note that when a locale command line option or locale resource is defined, the effect should be to set all categories to the specified locale, overriding any category-specific settings in the local host environment. Locale and Modifier Dependencies The internationalized Xlib functions operate in the current locale configured by the host environment and X locale modifiers set by or in the locale and modifiers configured at the time some object supplied to the function was created. For each locale-dependent function, the following table describes the locale (and modifiers) dependency: Locale from Affects the Function In Locale Query/Configuration: setlocale XSupportsLocale Locale queried Locale modified Resources: setlocale Locale of XrmDatabase XrmDatabase Locale of XrmDatabase Setting Standard Properties: setlocale Encoding of supplied/returned text (some WM_ property text in environment locale) setlocale Encoding of supplied/returned text Text Input: setlocale XIM input method selection XIM selection XIM selection XIM XIC input method configuration , and so on Queried locale XIC Keyboard layout Encoding of returned text Text Drawing: setlocale XOM output method selection Charsets of fonts in XFontSet XOM XOC output method configuration , and so on Queried locale XFontSet , Locale of supplied text , and so on Locale of supplied text , and so on , XwcTextExtents, and so on Locale-dependent metrics Xlib Errors: setlocale , , and so on Locale of error message Clients may assume that a locale-encoded text string returned by an X function can be passed to a C library routine, or vice versa, if the locale is the same at the two calls. All text strings processed by internationalized Xlib functions are assumed to begin in the initial state of the encoding of the locale, if the encoding is state-dependent. All Xlib functions behave as if they do not change the current locale or X modifier setting. (This means that if they do change locale or call with a non-NULL argument, they must save and restore the current state on entry and exit.) Also, Xlib functions on implementations that conform to the ANSI C library do not alter the global state associated with the ANSI C functions mblen, mbtowc, wctomb, and strtok. Variable Argument Lists Various functions in this chapter have arguments that conform to the ANSI C variable argument list calling convention. Each function denoted with an argument of the form ``...'' takes a variable-length list of name and value pairs, where each name is a string and each value is of type XPointer. A name argument that is NULL identifies the end of the list. A variable-length argument list may contain a nested list. If the name XNVaNestedList is specified in place of an argument name, then the following value is interpreted as an XVaNestedList value that specifies a list of values logically inserted into the original list at the point of declaration. A NULL identifies the end of a nested list. To allocate a nested variable argument list dynamically, use . XVaCreateNestedList XVaNestedList XVaCreateNestedList int dummy dummy Specifies an unused argument (required by ANSI C). ... Specifies the variable length argument list(Al. The function allocates memory and copies its arguments into a single list pointer, which may be used as a value for arguments requiring a list value. Any entries are copied as specified. Data passed by reference is not copied; the caller must ensure data remains valid for the lifetime of the nested list. The list should be freed using when it is no longer needed. Output Methods This section provides discussions of the following X Output Method (XOM) topics: Output method overview Output method functions Output method values Output context functions Output context values Creating and freeing a font set Obtaining font set metrics Drawing text using font sets Output Method Overview Locale-dependent text may include one or more text components, each of which may require different fonts and character set encodings. In some languages, each component might have a different drawing direction, and some components might contain context-dependent characters that change shape based on relationships with neighboring characters. When drawing such locale-dependent text, some locale-specific knowledge is required; for example, what fonts are required to draw the text, how the text can be separated into components, and which fonts are selected to draw each component. Further, when bidirectional text must be drawn, the internal representation order of the text must be changed into the visual representation order to be drawn. An X Output Method provides a functional interface so that clients do not have to deal directly with such locale-dependent details. Output methods provide the following capabilities: Creating a set of fonts required to draw locale-dependent text. Drawing locale-dependent text with a font set without the caller needing to be aware of locale dependencies. Obtaining the escapement and extents in pixels of locale-dependent text. Determining if bidirectional or context-dependent drawing is required in a specific locale with a specific font set. Two different abstractions are used in the representation of the output method for clients. The abstraction used to communicate with an output method is an opaque data structure represented by the XOM data type. The abstraction for representing the state of a particular output thread is called an output context. The Xlib representation of an output context is an XOC, which is compatible with XFontSet in terms of its functional interface, but is a broader, more generalized abstraction. Output Method Functions To open an output method, use . XOpenOM XOM XOpenOM Display *display XrmDatabase db char *res_name char *res_class display Specifies the connection to the X server. db Specifies a pointer to the resource database. res_name Specifies the full resource name of the application. res_class Specifies the full class name of the application. The function opens an output method matching the current locale and modifiers specification. The current locale and modifiers are bound to the output method when is called. The locale associated with an output method cannot be changed. The specific output method to which this call will be routed is identified on the basis of the current locale and modifiers. will identify a default output method corresponding to the current locale. That default can be modified using to set the output method modifier. The db argument is the resource database to be used by the output method for looking up resources that are private to the output method. It is not intended that this database be used to look up values that can be set as OC values in an output context. If db is NULL, no database is passed to the output method. The res_name and res_class arguments specify the resource name and class of the application. They are intended to be used as prefixes by the output method when looking up resources that are common to all output contexts that may be created for this output method. The characters used for resource names and classes must be in the X Portable Character Set. The resources looked up are not fully specified if res_name or res_class is NULL. The res_name and res_class arguments are not assumed to exist beyond the call to . The specified resource database is assumed to exist for the lifetime of the output method. returns NULL if no output method could be opened. To close an output method, use . XCloseOM Status XCloseOM XOM om om Specifies the output method. The function closes the specified output method. To set output method attributes, use . XSetOMValues char *XSetOMValues XOM om om Specifies the output method. ... Specifies the variable-length argument list to set XOM values. The function presents a variable argument list programming interface for setting properties or features of the specified output method. This function returns NULL if it succeeds; otherwise, it returns the name of the first argument that could not be obtained. No standard arguments are currently defined by Xlib. To query an output method, use . XGetOMValues char *XGetOMValues XOM om om Specifies the output method. ... Specifies the variable-length argument list to get XOM values. The function presents a variable argument list programming interface for querying properties or features of the specified output method. This function returns NULL if it succeeds; otherwise, it returns the name of the first argument that could not be obtained. To obtain the display associated with an output method, use . XDisplayOfOM Display *XDisplayOfOM XOM om om Specifies the output method. The function returns the display associated with the specified output method. To get the locale associated with an output method, use . XLocaleOfOM char *XLocaleOfOM XOM om om Specifies the output method. The returns the locale associated with the specified output method. X Output Method Values The following table describes how XOM values are interpreted by an output method. The first column lists the XOM values. The second column indicates how each of the XOM values are treated by a particular output style. The following key applies to this table. Key Explanation G This value may be read using . XOM Value Key XNRequiredCharSet G XNQueryOrientation G XNDirectionalDependentDrawing G XNContextualDrawing G Required Char Set The XNRequiredCharSet argument returns the list of charsets that are required for loading the fonts needed for the locale. The value of the argument is a pointer to a structure of type XOMCharSetList. The XOMCharSetList structure is defined as follows: XOMCharSetList typedef struct { int charset_count; char **charset_list; } XOMCharSetList; The charset_list member is a list of one or more null-terminated charset names, and the charset_count member is the number of charset names. The required charset list is owned by Xlib and should not be modified or freed by the client. It will be freed by a call to with the associated XOM. Until freed, its contents will not be modified by Xlib. Query Orientation The XNQueryOrientation argument returns the global orientation of text when drawn. Other than XOMOrientation_LTR_TTB, the set of orientations supported is locale-dependent. The value of the argument is a pointer to a structure of type XOMOrientation. Clients are responsible for freeing the XOMOrientation structure by using ; this also frees the contents of the structure. typedef struct { int num_orientation; XOrientation *orientation; /* Input Text description */ } XOMOrientation; typedef enum { XOMOrientation_LTR_TTB, XOMOrientation_RTL_TTB, XOMOrientation_TTB_LTR, XOMOrientation_TTB_RTL, XOMOrientation_Context } XOrientation; The possible value for XOrientation may be: XOMOrientation_LTR_TTB left-to-right, top-to-bottom global orientation XOMOrientation_RTL_TTB right-to-left, top-to-bottom global orientation XOMOrientation_TTB_LTR top-to-bottom, left-to-right global orientation XOMOrientation_TTB_RTL top-to-bottom, right-to-left global orientation XOMOrientation_Context contextual global orientation Directional Dependent Drawing The XNDirectionalDependentDrawing argument indicates whether the text rendering functions implement implicit handling of directional text. If this value is True, the output method has knowledge of directional dependencies and reorders text as necessary when rendering text. If this value is False, the output method does not implement any directional text handling, and all character directions are assumed to be left-to-right. Regardless of the rendering order of characters, the origins of all characters are on the primary draw direction side of the drawing origin. This OM value presents functionality identical to the function. Context Dependent Drawing The XNContextualDrawing argument indicates whether the text rendering functions implement implicit context-dependent drawing. If this value is True, the output method has knowledge of context dependencies and performs character shape editing, combining glyphs to present a single character as necessary. The actual shape editing is dependent on the locale implementation and the font set used. This OM value presents functionality identical to the function. Output Context Functions An output context is an abstraction that contains both the data required by an output method and the information required to display that data. There can be multiple output contexts for one output method. The programming interfaces for creating, reading, or modifying an output context use a variable argument list. The name elements of the argument lists are referred to as XOC values. It is intended that output methods be controlled by these XOC values. As new XOC values are created, they should be registered with the X Consortium. An XOC can be used anywhere an XFontSet can be used, and vice versa; XFontSet is retained for compatibility with previous releases. The concepts of output methods and output contexts include broader, more generalized abstraction than font set, supporting complex and more intelligent text display, and dealing not only with multiple fonts but also with context dependencies. However, XFontSet is widely used in several interfaces, so XOC is defined as an upward compatible type of XFontSet. To create an output context, use . XCreateOC XOC XCreateOC XOM om om Specifies the output method. ... Specifies the variable-length argument list to set XOC values. The function creates an output context within the specified output method. The base font names argument is mandatory at creation time, and the output context will not be created unless it is provided. All other output context values can be set later. returns NULL if no output context could be created. NULL can be returned for any of the following reasons: A required argument was not set. A read-only argument was set. An argument name is not recognized. The output method encountered an output method implementation-dependent error. can generate a BadAtom error. To destroy an output context, use . XDestroyOC void XDestroyOC XOC oc oc Specifies the output context. The function destroys the specified output context. To get the output method associated with an output context, use . XOMOfOC XOM XOMOfOC XOC oc oc Specifies the output context. The function returns the output method associated with the specified output context. Xlib provides two functions for setting and reading output context values, respectively, and . Both functions have a variable-length argument list. In that argument list, any XOC value's name must be denoted with a character string using the X Portable Character Set. To set XOC values, use . XSetOCValues char *XSetOCValues XOC oc oc Specifies the output context. ... Specifies the variable-length argument list to set XOC values. The function returns NULL if no error occurred; otherwise, it returns the name of the first argument that could not be set. An argument might not be set for any of the following reasons: The argument is read-only. The argument name is not recognized. An implementation-dependent error occurs. Each value to be set must be an appropriate datum, matching the data type imposed by the semantics of the argument. can generate a BadAtom error. To obtain XOC values, use . XGetOCValues char *XGetOCValues XOC oc oc Specifies the output context. ... Specifies the variable-length argument list to get XOC values. The function returns NULL if no error occurred; otherwise, it returns the name of the first argument that could not be obtained. An argument might not be obtained for any of the following reasons: The argument name is not recognized. An implementation-dependent error occurs. Each argument value following a name must point to a location where the value is to be stored. Output Context Values The following table describes how XOC values are interpreted by an output method. The first column lists the XOC values. The second column indicates the alternative interfaces that function identically and are provided for compatibility with previous releases. The third column indicates how each of the XOC values is treated. The following keys apply to this table. Key Explanation C This value must be set with . D This value may be set using . If it is not set,a default is provided. G This value may be read using . S This value must be set using . XOC Value Alternative Interface Key BaseFontName C-G MissingCharSet G DefaultString G Orientation - D-S-G ResourceName - S-G ResourceClass - S-G FontInfo G OMAutomatic - G Base Font Name The XNBaseFontName argument is a list of base font names that Xlib uses to load the fonts needed for the locale. The base font names are a comma-separated list. The string is null-terminated and is assumed to be in the Host Portable Character Encoding; otherwise, the result is implementation-dependent. White space immediately on either side of a separating comma is ignored. Use of XLFD font names permits Xlib to obtain the fonts needed for a variety of locales from a single locale-independent base font name. The single base font name should name a family of fonts whose members are encoded in the various charsets needed by the locales of interest. An XLFD base font name can explicitly name a charset needed for the locale. This allows the user to specify an exact font for use with a charset required by a locale, fully controlling the font selection. If a base font name is not an XLFD name, Xlib will attempt to obtain an XLFD name from the font properties for the font. If Xlib is successful, the function will return this XLFD name instead of the client-supplied name. This argument must be set at creation time and cannot be changed. If no fonts exist for any of the required charsets, or if the locale definition in Xlib requires that a font exist for a particular charset and a font is not found for that charset, returns NULL. When querying for the XNBaseFontName XOC value, returns a null-terminated string identifying the base font names that Xlib used to load the fonts needed for the locale. This string is owned by Xlib and should not be modified or freed by the client. The string will be freed by a call to with the associated XOC. Until freed, the string contents will not be modified by Xlib. Missing CharSet The XNMissingCharSet argument returns the list of required charsets that are missing from the font set. The value of the argument is a pointer to a structure of type XOMCharSetList. If fonts exist for all of the charsets required by the current locale, charset_list is set to NULL and charset_count is set to zero. If no fonts exist for one or more of the required charsets, charset_list is set to a list of one or more null-terminated charset names for which no fonts exist, and charset_count is set to the number of missing charsets. The charsets are from the list of the required charsets for the encoding of the locale and do not include any charsets to which Xlib may be able to remap a required charset. The missing charset list is owned by Xlib and should not be modified or freed by the client. It will be freed by a call to with the associated XOC. Until freed, its contents will not be modified by Xlib. Default String When a drawing or measuring function is called with an XOC that has missing charsets, some characters in the locale will not be drawable. The XNDefaultString argument returns a pointer to a string that represents the glyphs that are drawn with this XOC when the charsets of the available fonts do not include all glyphs required to draw a character. The string does not necessarily consist of valid characters in the current locale and is not necessarily drawn with the fonts loaded for the font set, but the client can draw or measure the default glyphs by including this string in a string being drawn or measured with the XOC. If the XNDefaultString argument returned the empty string (""), no glyphs are drawn and the escapement is zero. The returned string is null-terminated. It is owned by Xlib and should not be modified or freed by the client. It will be freed by a call to with the associated XOC. Until freed, its contents will not be modified by Xlib. Orientation The XNOrientation argument specifies the current orientation of text when drawn. The value of this argument is one of the values returned by the function with the XNQueryOrientation argument specified in the XOrientation list. The value of the argument is of type XOrientation. When XNOrientation is queried, the value specifies the current orientation. When XNOrientation is set, a value is used to set the current orientation. When XOMOrientation_Context is set, the text orientation of the text is determined according to an implementation-defined method (for example, ISO 6429 control sequences), and the initial text orientation for locale-dependent Xlib functions is assumed to be XOMOrientation_LTR_TTB. The XNOrientation value does not change the prime drawing direction for Xlib drawing functions. Resource Name and Class The XNResourceName and XNResourceClass arguments are strings that specify the full name and class used by the client to obtain resources for the display of the output context. These values should be used as prefixes for name and class when looking up resources that may vary according to the output context. If these values are not set, the resources will not be fully specified. It is not intended that values that can be set as XOM values be set as resources. When querying for the XNResourceName or XNResourceClass XOC value, returns a null-terminated string. This string is owned by Xlib and should not be modified or freed by the client. The string will be freed by a call to with the associated XOC or when the associated value is changed via . Until freed, the string contents will not be modified by Xlib. Font Info The XNFontInfo argument specifies a list of one or more XFontStruct structures and font names for the fonts used for drawing by the given output context. The value of the argument is a pointer to a structure of type XOMFontInfo. typedef struct { int num_font; XFontStruct **font_struct_list; char **font_name_list; } XOMFontInfo; A list of pointers to the XFontStruct structures is returned to font_struct_list. A list of pointers to null-terminated, fully-specified font name strings in the locale of the output context is returned to font_name_list. The font_name_list order corresponds to the font_struct_list order. The number of XFontStruct structures and font names is returned to num_font. Because it is not guaranteed that a given character will be imaged using a single font glyph, there is no provision for mapping a character or default string to the font properties, font ID, or direction hint for the font for the character. The client may access the XFontStruct list to obtain these values for all the fonts currently in use. Xlib does not guarantee that fonts are loaded from the server at the creation of an XOC. Xlib may choose to cache font data, loading it only as needed to draw text or compute text dimensions. Therefore, existence of the per_char metrics in the XFontStruct structures in the XFontStructSet is undefined. Also, note that all properties in the XFontStruct structures are in the STRING encoding. The client must not free the XOMFontInfo struct itself; it will be freed when the XOC is closed. OM Automatic The XNOMAutomatic argument returns whether the associated output context was created by or not. Because the function not only destroys the output context but also closes the implicit output method associated with it, should be used with any output context created by . However, it is possible that a client does not know how the output context was created. Before a client destroys the output context, it can query whether XNOMAutomatic is set to determine whether or should be used to destroy the output context. Creating and Freeing a Font Set Xlib international text drawing is done using a set of one or more fonts, as needed for the locale of the text. Fonts are loaded according to a list of base font names supplied by the client and the charsets required by the locale. The XFontSet is an opaque type representing the state of a particular output thread and is equivalent to the type XOC. The function is a convenience function for creating an output context using only default values. The returned XFontSet has an implicitly created XOM. This XOM has an OM value XNOMAutomatic automatically set to True so that the output context self indicates whether it was created by or . XCreateFontSet XFontSet XCreateFontSet Display *display char *base_font_name_list char ***missing_charset_list_return int *missing_charset_count_return char **def_string_return display Specifies the connection to the X server. base_font_name_list Specifies the base font names. missing_charset_list_return Returns the missing charsets. missing_charset_count_return Returns the number of missing charsets. def_string_return Returns the string drawn for missing charsets. The function creates a font set for the specified display. The font set is bound to the current locale when is called. The font set may be used in subsequent calls to obtain font and character information and to image text in the locale of the font set. The base_font_name_list argument is a list of base font names that Xlib uses to load the fonts needed for the locale. The base font names are a comma-separated list. The string is null-terminated and is assumed to be in the Host Portable Character Encoding; otherwise, the result is implementation-dependent. White space immediately on either side of a separating comma is ignored. Use of XLFD font names permits Xlib to obtain the fonts needed for a variety of locales from a single locale-independent base font name. The single base font name should name a family of fonts whose members are encoded in the various charsets needed by the locales of interest. An XLFD base font name can explicitly name a charset needed for the locale. This allows the user to specify an exact font for use with a charset required by a locale, fully controlling the font selection. If a base font name is not an XLFD name, Xlib will attempt to obtain an XLFD name from the font properties for the font. If this action is successful in obtaining an XLFD name, the function will return this XLFD name instead of the client-supplied name. Xlib uses the following algorithm to select the fonts that will be used to display text with the XFontSet. For each font charset required by the locale, the base font name list is searched for the first appearance of one of the following cases that names a set of fonts that exist at the server: The first XLFD-conforming base font name that specifies the required charset or a superset of the required charset in its CharSetRegistry and CharSetEncoding fields. The implementation may use a base font name whose specified charset is a superset of the required charset, for example, an ISO8859-1 font for an ASCII charset. The first set of one or more XLFD-conforming base font names that specify one or more charsets that can be remapped to support the required charset. The Xlib implementation may recognize various mappings from a required charset to one or more other charsets and use the fonts for those charsets. For example, JIS Roman is ASCII with tilde and backslash replaced by yen and overbar; Xlib may load an ISO8859-1 font to support this character set if a JIS Roman font is not available. The first XLFD-conforming font name or the first non-XLFD font name for which an XLFD font name can be obtained, combined with the required charset (replacing the CharSetRegistry and CharSetEncoding fields in the XLFD font name). As in case 1, the implementation may use a charset that is a superset of the required charset. The first font name that can be mapped in some implementation-dependent manner to one or more fonts that support imaging text in the charset. For example, assume that a locale required the charsets: ISO8859-1 JISX0208.1983 JISX0201.1976 GB2312-1980.0 The user could supply a base_font_name_list that explicitly specifies the charsets, ensuring that specific fonts are used if they exist. For example: "-JIS-Fixed-Medium-R-Normal--26-180-100-100-C-240-JISX0208.1983-0,\\ -JIS-Fixed-Medium-R-Normal--26-180-100-100-C-120-JISX0201.1976-0,\\ -GB-Fixed-Medium-R-Normal--26-180-100-100-C-240-GB2312-1980.0,\\ -Adobe-Courier-Bold-R-Normal--25-180-75-75-M-150-ISO8859-1" Alternatively, the user could supply a base_font_name_list that omits the charsets, letting Xlib select font charsets required for the locale. For example: "-JIS-Fixed-Medium-R-Normal--26-180-100-100-C-240,\\ -JIS-Fixed-Medium-R-Normal--26-180-100-100-C-120,\\ -GB-Fixed-Medium-R-Normal--26-180-100-100-C-240,\\ -Adobe-Courier-Bold-R-Normal--25-180-100-100-M-150" Alternatively, the user could simply supply a single base font name that allows Xlib to select from all available fonts that meet certain minimum XLFD property requirements. For example: "-*-*-*-R-Normal--*-180-100-100-*-*" If is unable to create the font set, either because there is insufficient memory or because the current locale is not supported, returns NULL, missing_charset_list_return is set to NULL, and missing_charset_count_return is set to zero. If fonts exist for all of the charsets required by the current locale, returns a valid XFontSet, missing_charset_list_return is set to NULL, and missing_charset_count_return is set to zero. If no font exists for one or more of the required charsets, sets missing_charset_list_return to a list of one or more null-terminated charset names for which no font exists and sets missing_charset_count_return to the number of missing fonts. The charsets are from the list of the required charsets for the encoding of the locale and do not include any charsets to which Xlib may be able to remap a required charset. If no font exists for any of the required charsets or if the locale definition in Xlib requires that a font exist for a particular charset and a font is not found for that charset, returns NULL. Otherwise, returns a valid XFontSet to font_set. When an Xmb/wc drawing or measuring function is called with an XFontSet that has missing charsets, some characters in the locale will not be drawable. If def_string_return is non-NULL, returns a pointer to a string that represents the glyphs that are drawn with this XFontSet when the charsets of the available fonts do not include all font glyphs required to draw a codepoint. The string does not necessarily consist of valid characters in the current locale and is not necessarily drawn with the fonts loaded for the font set, but the client can draw and measure the default glyphs by including this string in a string being drawn or measured with the XFontSet. If the string returned to def_string_return is the empty string (""), no glyphs are drawn, and the escapement is zero. The returned string is null-terminated. It is owned by Xlib and should not be modified or freed by the client. It will be freed by a call to with the associated XFontSet. Until freed, its contents will not be modified by Xlib. The client is responsible for constructing an error message from the missing charset and default string information and may choose to continue operation in the case that some fonts did not exist. The returned XFontSet and missing charset list should be freed with and , respectively. The client-supplied base_font_name_list may be freed by the client after calling . To obtain a list of XFontStruct structures and full font names given an XFontSet, use . XFontsOfFontSet int XFontsOfFontSet XFontSet font_set XFontStruct ***font_struct_list_return char ***font_name_list_return font_set Specifies the font set. font_struct_list_return Returns the list of font structs. font_name_list_return Returns the list of font names. The function returns a list of one or more XFontStructs and font names for the fonts used by the Xmb and Xwc layers for the given font set. A list of pointers to the XFontStruct structures is returned to font_struct_list_return. A list of pointers to null-terminated, fully specified font name strings in the locale of the font set is returned to font_name_list_return. The font_name_list order corresponds to the font_struct_list order. The number of XFontStruct structures and font names is returned as the value of the function. Because it is not guaranteed that a given character will be imaged using a single font glyph, there is no provision for mapping a character or default string to the font properties, font ID, or direction hint for the font for the character. The client may access the XFontStruct list to obtain these values for all the fonts currently in use. Xlib does not guarantee that fonts are loaded from the server at the creation of an XFontSet. Xlib may choose to cache font data, loading it only as needed to draw text or compute text dimensions. Therefore, existence of the per_char metrics in the XFontStruct structures in the XFontStructSet is undefined. Also, note that all properties in the XFontStruct structures are in the STRING encoding. The XFontStruct and font name lists are owned by Xlib and should not be modified or freed by the client. They will be freed by a call to with the associated XFontSet. Until freed, their contents will not be modified by Xlib. To obtain the base font name list and the selected font name list given an XFontSet, use . XBaseFontNameListOfFontSet char *XBaseFontNameListOfFontSet XFontSet font_set font_set Specifies the font set. The function returns the original base font name list supplied by the client when the XFontSet was created. A null-terminated string containing a list of comma-separated font names is returned as the value of the function. White space may appear immediately on either side of separating commas. If obtained an XLFD name from the font properties for the font specified by a non-XLFD base name, the function will return the XLFD name instead of the non-XLFD base name. The base font name list is owned by Xlib and should not be modified or freed by the client. It will be freed by a call to with the associated XFontSet. Until freed, its contents will not be modified by Xlib. To obtain the locale name given an XFontSet, use . XLocaleOfFontSet char *XLocaleOfFontSet XFontSet font_set font_set Specifies the font set. The function returns the name of the locale bound to the specified XFontSet, as a null-terminated string. The returned locale name string is owned by Xlib and should not be modified or freed by the client. It may be freed by a call to with the associated XFontSet. Until freed, it will not be modified by Xlib. The function is a convenience function for freeing an output context. also frees its associated XOM if the output context was created by . XFreeFontSet void XFreeFontSet Display *display XFontSet font_set display Specifies the connection to the X server. font_set Specifies the font set. The function frees the specified font set. The associated base font name list, font name list, XFontStruct list, and XFontSetExtents, if any, are freed. Obtaining Font Set Metrics Metrics for the internationalized text drawing functions are defined in terms of a primary draw direction, which is the default direction in which the character origin advances for each succeeding character in the string. The Xlib interface is currently defined to support only a left-to-right primary draw direction. The drawing origin is the position passed to the drawing function when the text is drawn. The baseline is a line drawn through the drawing origin parallel to the primary draw direction. Character ink is the pixels painted in the foreground color and does not include interline or intercharacter spacing or image text background pixels. The drawing functions are allowed to implement implicit text directionality control, reversing the order in which characters are rendered along the primary draw direction in response to locale-specific lexical analysis of the string. Regardless of the character rendering order, the origins of all characters are on the primary draw direction side of the drawing origin. The screen location of a particular character image may be determined with or . The drawing functions are allowed to implement context-dependent rendering, where the glyphs drawn for a string are not simply a concatenation of the glyphs that represent each individual character. A string of two characters drawn with may render differently than if the two characters were drawn with separate calls to . If the client appends or inserts a character in a previously drawn string, the client may need to redraw some adjacent characters to obtain proper rendering. To find out about direction-dependent rendering, use . XDirectionalDependentDrawing Bool XDirectionalDependentDrawing XFontSet font_set font_set Specifies the font set. The function returns True if the drawing functions implement implicit text directionality; otherwise, it returns False. To find out about context-dependent rendering, use . XContextualDrawing Bool XContextualDrawing XFontSet font_set font_set Specifies the font set. The function returns True if text drawn with the font set might include context-dependent drawing; otherwise, it returns False. To find out about context-dependent or direction-dependent rendering, use . XContextDependentDrawing Bool XContextDependentDrawing XFontSet font_set font_set Specifies the font set. The function returns True if the drawing functions implement implicit text directionality or if text drawn with the font_set might include context-dependent drawing; otherwise, it returns False. The drawing functions do not interpret newline, tab, or other control characters. The behavior when nonprinting characters other than space are drawn is implementation-dependent. It is the client's responsibility to interpret control characters in a text stream. The maximum character extents for the fonts that are used by the text drawing layers can be accessed by the XFontSetExtents structure: XFontSetExtents typedef struct { XRectangle max_ink_extent; /* over all drawable characters */ XRectangle max_logical_extent; /* over all drawable characters */ } XFontSetExtents; The XRectangle structures used to return font set metrics are the usual Xlib screen-oriented rectangles with x, y giving the upper left corner, and width and height always positive. The max_ink_extent member gives the maximum extent, over all drawable characters, of the rectangles that bound the character glyph image drawn in the foreground color, relative to a constant origin. See and XwcTextExtents for detailed semantics. The max_logical_extent member gives the maximum extent, over all drawable characters, of the rectangles that specify minimum spacing to other graphical features, relative to a constant origin. Other graphical features drawn by the client, for example, a border surrounding the text, should not intersect this rectangle. The max_logical_extent member should be used to compute minimum interline spacing and the minimum area that must be allowed in a text field to draw a given number of arbitrary characters. Due to context-dependent rendering, appending a given character to a string may change the string's extent by an amount other than that character's individual extent. The rectangles for a given character in a string can be obtained from or . To obtain the maximum extents structure given an XFontSet, use . XExtentsOfFontSet XFontSetExtents *XExtentsOfFontSet XFontSet font_set font_set Specifies the font set. The function returns an XFontSetExtents structure for the fonts used by the Xmb and Xwc layers for the given font set. The XFontSetExtents structure is owned by Xlib and should not be modified or freed by the client. It will be freed by a call to with the associated XFontSet. Until freed, its contents will not be modified by Xlib. To obtain the escapement in pixels of the specified text as a value, use or . XmbTextEscapement XwcTextEscapement int XmbTextEscapement XFontSet font_set char *string int num_bytes int XwcTextEscapement XFontSet font_set wchar_t *string int num_wchars font_set Specifies the font set. string Specifies the character string. num_bytes Specifies the number of bytes in the string argument. num_wchars Specifies the number of characters in the string argument. The and functions return the escapement in pixels of the specified string as a value, using the fonts loaded for the specified font set. The escapement is the distance in pixels in the primary draw direction from the drawing origin to the origin of the next character to be drawn, assuming that the rendering of the next character is not dependent on the supplied string. Regardless of the character rendering order, the escapement is always positive. To obtain the overall_ink_return and overall_logical_return arguments, the overall bounding box of the string's image, and a logical bounding box, use or XwcTextExtents. XmbTextExtents XwcTextExtents int XmbTextExtents XFontSet font_set char *string int num_bytes XRectangle *overall_ink_return XRectangle *overall_logical_return int XwcTextExtents XFontSet font_set wchar_t *string int num_wchars XRectangle *overall_ink_return XRectangle *overall_logical_return font_set Specifies the font set. string Specifies the character string. num_bytes Specifies the number of bytes in the string argument. num_wchars Specifies the number of characters in the string argument. overall_ink_return Returns the overall ink dimensions. overall_logical_return Returns the overall logical dimensions. The and XwcTextExtents functions set the components of the specified overall_ink_return and overall_logical_return arguments to the overall bounding box of the string's image and a logical bounding box for spacing purposes, respectively. They return the value returned by or . These metrics are relative to the drawing origin of the string, using the fonts loaded for the specified font set. If the overall_ink_return argument is non-NULL, it is set to the bounding box of the string's character ink. The overall_ink_return for a nondescending, horizontally drawn Latin character is conventionally entirely above the baseline; that is, overall_ink_return.height <= -overall_ink_return.y. The overall_ink_return for a nonkerned character is entirely at, and to the right of, the origin; that is, overall_ink_return.x >= 0. A character consisting of a single pixel at the origin would set overall_ink_return fields y = 0, x = 0, width = 1, and height = 1. If the overall_logical_return argument is non-NULL, it is set to the bounding box that provides minimum spacing to other graphical features for the string. Other graphical features, for example, a border surrounding the text, should not intersect this rectangle. When the XFontSet has missing charsets, metrics for each unavailable character are taken from the default string returned by so that the metrics represent the text as it will actually be drawn. The behavior for an invalid codepoint is undefined. To determine the effective drawing origin for a character in a drawn string, the client should call on the entire string, then on the character, and subtract the x values of the returned rectangles for the character. This is useful to redraw portions of a line of text or to justify words, but for context-dependent rendering, the client should not assume that it can redraw the character by itself and get the same rendering. To obtain per-character information for a text string, use or . XmbTextPerCharExtents XwcTextPerCharExtents Status XmbTextPerCharExtents XFontSet font_set char *string int num_bytes XRectangle *ink_array_return XRectangle *logical_array_return int array_size int *num_chars_return XRectangle *overall_ink_return XRectangle *overall_logical_return Status XwcTextPerCharExtents XFontSet font_set wchar_t *string int num_wchars XRectangle *ink_array_return XRectangle *logical_array_return int array_size int *num_chars_return XRectangle *overall_ink_return XRectangle *overall_logical_return font_set Specifies the font set. string Specifies the character string. num_bytes Specifies the number of bytes in the string argument. num_wchars Specifies the number of characters in the string argument. ink_array_return Returns the ink dimensions for each character. logical_array_return Returns the logical dimensions for each character. array_size Specifies the size of ink_array_return and logical_array_return. The caller must pass in arrays of this size. num_chars_return Returns the number of characters in the string argument. overall_ink_return Returns the overall ink dimensions. overall_logical_return Returns the overall logical dimensions. The and functions return the text dimensions of each character of the specified text, using the fonts loaded for the specified font set. Each successive element of ink_array_return and logical_array_return is set to the successive character's drawn metrics, relative to the drawing origin of the string and one rectangle for each character in the supplied text string. The number of elements of ink_array_return and logical_array_return that have been set is returned to num_chars_return. Each element of ink_array_return is set to the bounding box of the corresponding character's drawn foreground color. Each element of logical_array_return is set to the bounding box that provides minimum spacing to other graphical features for the corresponding character. Other graphical features should not intersect any of the logical_array_return rectangles. Note that an XRectangle represents the effective drawing dimensions of the character, regardless of the number of font glyphs that are used to draw the character or the direction in which the character is drawn. If multiple characters map to a single character glyph, the dimensions of all the XRectangles of those characters are the same. When the XFontSet has missing charsets, metrics for each unavailable character are taken from the default string returned by so that the metrics represent the text as it will actually be drawn. The behavior for an invalid codepoint is undefined. If the array_size is too small for the number of characters in the supplied text, the functions return zero and num_chars_return is set to the number of rectangles required. Otherwise, the functions return a nonzero value. If the overall_ink_return or overall_logical_return argument is non-NULL, and return the maximum extent of the string's metrics to overall_ink_return or overall_logical_return, as returned by or XwcTextExtents. Drawing Text Using Font Sets The functions defined in this section draw text at a specified location in a drawable. They are similar to the functions , , and except that they work with font sets instead of single fonts and interpret the text based on the locale of the font set instead of treating the bytes of the string as direct font indexes. See section 8.6 for details of the use of Graphics Contexts (GCs) and possible protocol errors. If a BadFont error is generated, characters prior to the offending character may have been drawn. The text is drawn using the fonts loaded for the specified font set; the font in the GC is ignored and may be modified by the functions. No validation that all fonts conform to some width rule is performed. The text functions and use the following structures: XmbTextItem typedef struct { char *chars; /* pointer to string */ int nchars; /* number of bytes */ int delta; /* pixel delta between strings */ XFontSet font_set; /* fonts, None means don't change */ } XmbTextItem; XwcTextItem typedef struct { wchar_t *chars; /* pointer to wide char string */ int nchars; /* number of wide characters */ int delta; /* pixel delta between strings */ XFontSet font_set; /* fonts, None means don't change */ } XwcTextItem; To draw text using multiple font sets in a given drawable, use or . XmbDrawText XwcDrawText void XmbDrawText Display *display Drawable d GC gc int x int y XmbTextItem *items int nitems void XwcDrawText Display *display Drawable d GC gc int x int y XwcTextItem *items int nitems display Specifies the connection to the X server. d Specifies the drawable. gc Specifies the GC. x y Specify the x and y coordinates of the position in the new parent window. items Specifies an array of text items. nitems Specifies the number of text items in the array. The and functions allow complex spacing and font set shifts between text strings. Each text item is processed in turn, with the origin of a text element advanced in the primary draw direction by the escapement of the previous text item. A text item delta specifies an additional escapement of the text item drawing origin in the primary draw direction. A font_set member other than None in an item causes the font set to be used for this and subsequent text items in the text_items list. Leading text items with a font_set member set to None will not be drawn. and do not perform any context-dependent rendering between text segments. Clients may compute the drawing metrics by passing each text segment to and XwcTextExtents or and . When the XFontSet has missing charsets, each unavailable character is drawn with the default string returned by . The behavior for an invalid codepoint is undefined. To draw text using a single font set in a given drawable, use or . XmbDrawString XwcDrawString void XmbDrawString Display *display Drawable d XFontSet font_set GC gc int x int y char *string int num_bytes void XwcDrawString Display *display Drawable d XFontSet font_set GC gc int x int y wchar_t *string int num_wchars display Specifies the connection to the X server. d Specifies the drawable. font_set Specifies the font set. gc Specifies the GC. x y Specify the x and y coordinates of the position in the new parent window. string Specifies the character string. num_bytes Specifies the number of bytes in the string argument. num_wchars Specifies the number of characters in the string argument. The and functions draw the specified text with the foreground pixel. When the XFontSet has missing charsets, each unavailable character is drawn with the default string returned by . The behavior for an invalid codepoint is undefined. To draw image text using a single font set in a given drawable, use or . XmbDrawImageString XwcDrawImageString void XmbDrawImageString Display *display Drawable d XFontSet font_set GC gc int x int y char *string int num_bytes void XwcDrawImageString Display *display Drawable d XFontSet font_set GC gc int x int y wchar_t *string int num_wchars display Specifies the connection to the X server. d Specifies the drawable. font_set Specifies the font set. gc Specifies the GC. x y Specify the x and y coordinates of the position in the new parent window. string Specifies the character string. num_bytes Specifies the number of bytes in the string argument. num_wchars Specifies the number of characters in the string argument. The and functions fill a destination rectangle with the background pixel defined in the GC and then paint the text with the foreground pixel. The filled rectangle is the rectangle returned to overall_logical_return by or XwcTextExtents for the same text and XFontSet. When the XFontSet has missing charsets, each unavailable character is drawn with the default string returned by . The behavior for an invalid codepoint is undefined. Input Methods This section provides discussions of the following X Input Method (XIM) topics: Input method overview Input method management Input method functions Input method values Input context functions Input context values Input method callback semantics Event filtering Getting keyboard input Input method conventions Input Method Overview This section provides definitions for terms and concepts used for internationalized text input and a brief overview of the intended use of the mechanisms provided by Xlib. A large number of languages in the world use alphabets consisting of a small set of symbols (letters) to form words. To enter text into a computer in an alphabetic language, a user usually has a keyboard on which there exist key symbols corresponding to the alphabet. Sometimes, a few characters of an alphabetic language are missing on the keyboard. Many computer users who speak a Latin-alphabet-based language only have an English-based keyboard. They need to hit a combination of keystrokes to enter a character that does not exist directly on the keyboard. A number of algorithms have been developed for entering such characters. These are known as European input methods, compose input methods, or dead-key input methods. Japanese is an example of a language with a phonetic symbol set, where each symbol represents a specific sound. There are two phonetic symbol sets in Japanese: Katakana and Hiragana. In general, Katakana is used for words that are of foreign origin, and Hiragana is used for writing native Japanese words. Collectively, the two systems are called Kana. Each set consists of 48 characters. Korean also has a phonetic symbol set, called Hangul. Each of the 24 basic phonetic symbols (14 consonants and 10 vowels) represents a specific sound. A syllable is composed of two or three parts: the initial consonants, the vowels, and the optional last consonants. With Hangul, syllables can be treated as the basic units on which text processing is done. For example, a delete operation may work on a phonetic symbol or a syllable. Korean code sets include several thousands of these syllables. A user types the phonetic symbols that make up the syllables of the words to be entered. The display may change as each phonetic symbol is entered. For example, when the second phonetic symbol of a syllable is entered, the first phonetic symbol may change its shape and size. Likewise, when the third phonetic symbol is entered, the first two phonetic symbols may change their shape and size. Not all languages rely solely on alphabetic or phonetic systems. Some languages, including Japanese and Korean, employ an ideographic writing system. In an ideographic system, rather than taking a small set of symbols and combining them in different ways to create words, each word consists of one unique symbol (or, occasionally, several symbols). The number of symbols can be very large: approximately 50,000 have been identified in Hanzi, the Chinese ideographic system. Two major aspects of ideographic systems impact their use with computers. First, the standard computer character sets in Japan, China, and Korea include roughly 8,000 characters, while sets in Taiwan have between 15,000 and 30,000 characters. This makes it necessary to use more than one byte to represent a character. Second, it obviously is impractical to have a keyboard that includes all of a given language's ideographic symbols. Therefore, a mechanism is required for entering characters so that a keyboard with a reasonable number of keys can be used. Those input methods are usually based on phonetics, but there also exist methods based on the graphical properties of characters. In Japan, both Kana and the ideographic system Kanji are used. In Korea, Hangul and sometimes the ideographic system Hanja are used. Now consider entering ideographs in Japan, Korea, China, and Taiwan. In Japan, either Kana or English characters are typed and then a region is selected (sometimes automatically) for conversion to Kanji. Several Kanji characters may have the same phonetic representation. If that is the case with the string entered, a menu of characters is presented and the user must choose the appropriate one. If no choice is necessary or a preference has been established, the input method does the substitution directly. When Latin characters are converted to Kana or Kanji, it is called a romaji conversion. In Korea, it is usually acceptable to keep Korean text in Hangul form, but some people may choose to write Hanja-originated words in Hanja rather than in Hangul. To change Hangul to Hanja, the user selects a region for conversion and then follows the same basic method as that described for Japanese. Probably because there are well-accepted phonetic writing systems for Japanese and Korean, computer input methods in these countries for entering ideographs are fairly standard. Keyboard keys have both English characters and phonetic symbols engraved on them, and the user can switch between the two sets. The situation is different for Chinese. While there is a phonetic system called Pinyin promoted by authorities, there is no consensus for entering Chinese text. Some vendors use a phonetic decomposition (Pinyin or another), others use ideographic decomposition of Chinese words, with various implementations and keyboard layouts. There are about 16 known methods, none of which is a clear standard. Also, there are actually two ideographic sets used: Traditional Chinese (the original written Chinese) and Simplified Chinese. Several years ago, the People's Republic of China launched a campaign to simplify some ideographic characters and eliminate redundancies altogether. Under the plan, characters would be streamlined every five years. Characters have been revised several times now, resulting in the smaller, simpler set that makes up Simplified Chinese. Input Method Architecture As shown in the previous section, there are many different input methods in use today, each varying with language, culture, and history. A common feature of many input methods is that the user may type multiple keystrokes to compose a single character (or set of characters). The process of composing characters from keystrokes is called preediting. It may require complex algorithms and large dictionaries involving substantial computer resources. Input methods may require one or more areas in which to show the feedback of the actual keystrokes, to propose disambiguation to the user, to list dictionaries, and so on. The input method areas of concern are as follows: The status area is a logical extension of the LEDs that exist on the physical keyboard. It is a window that is intended to present the internal state of the input method that is critical to the user. The status area may consist of text data and bitmaps or some combination. The preedit area displays the intermediate text for those languages that are composing prior to the client handling the data. The auxiliary area is used for pop-up menus and customizing dialogs that may be required for an input method. There may be multiple auxiliary areas for an input method. Auxiliary areas are managed by the input method independent of the client. Auxiliary areas are assumed to be separate dialogs, which are maintained by the input method. There are various user interaction styles used for preediting. The ones supported by Xlib are as follows: For on-the-spot input methods, preediting data will be displayed directly in the application window. Application data is moved to allow preedit data to appear at the point of insertion. Over-the-spot preediting means that the data is displayed in a preedit window that is placed over the point of insertion. Off-the-spot preediting means that the preedit window is inside the application window but not at the point of insertion. Often, this type of window is placed at the bottom of the application window. Root-window preediting refers to input methods that use a preedit window that is the child of RootWindow. It would require a lot of computing resources if portable applications had to include input methods for all the languages in the world. To avoid this, a goal of the Xlib design is to allow an application to communicate with an input method placed in a separate process. Such a process is called an input server. The server to which the application should connect is dependent on the environment when the application is started up, that is, the user language and the actual encoding to be used for it. The input method connection is said to be locale-dependent. It is also user-dependent. For a given language, the user can choose, to some extent, the user interface style of input method (if choice is possible among several). Using an input server implies communication overhead, but applications can be migrated without relinking. Input methods can be implemented either as a stub communicating to an input server or as a local library. An input method may be based on a front-end or a back-end architecture. In a front-end architecture, there are two separate connections to the X server: keystrokes go directly from the X server to the input method on one connection and other events to the regular client connection. The input method is then acting as a filter and sends composed strings to the client. A front-end architecture requires synchronization between the two connections to avoid lost key events or locking issues. In a back-end architecture, a single X server connection is used. A dispatching mechanism must decide on this channel to delegate appropriate keystrokes to the input method. For instance, it may retain a Help keystroke for its own purpose. In the case where the input method is a separate process (that is, a server), there must be a special communication protocol between the back-end client and the input server. A front-end architecture introduces synchronization issues and a filtering mechanism for noncharacter keystrokes (Function keys, Help, and so on). A back-end architecture sometimes implies more communication overhead and more process switching. If all three processes (X server, input server, client) are running on a single workstation, there are two process switches for each keystroke in a back-end architecture, but there is only one in a front-end architecture. The abstraction used by a client to communicate with an input method is an opaque data structure represented by the XIM data type. This data structure is returned by the function, which opens an input method on a given display. Subsequent operations on this data structure encapsulate all communication between client and input method. There is no need for an X client to use any networking library or natural language package to use an input method. A single input server may be used for one or more languages, supporting one or more encoding schemes. But the strings returned from an input method will always be encoded in the (single) locale associated with the XIM object. Input Contexts Xlib provides the ability to manage a multi-threaded state for text input. A client may be using multiple windows, each window with multiple text entry areas, and the user possibly switching among them at any time. The abstraction for representing the state of a particular input thread is called an input context. The Xlib representation of an input context is an XIC. An input context is the abstraction retaining the state, properties, and semantics of communication between a client and an input method. An input context is a combination of an input method, a locale specifying the encoding of the character strings to be returned, a client window, internal state information, and various layout or appearance characteristics. The input context concept somewhat matches for input the graphics context abstraction defined for graphics output. One input context belongs to exactly one input method. Different input contexts may be associated with the same input method, possibly with the same client window. An XIC is created with the function, providing an XIM argument and affiliating the input context to the input method for its lifetime. When an input method is closed with , all of its affiliated input contexts should not be used any more (and should preferably be destroyed before closing the input method). Considering the example of a client window with multiple text entry areas, the application programmer could, for example, choose to implement as follows: As many input contexts are created as text entry areas, and the client will get the input accumulated on each context each time it looks up in that context. A single context is created for a top-level window in the application. If such a window contains several text entry areas, each time the user moves to another text entry area, the client has to indicate changes in the context. A range of choices can be made by application designers to use either a single or multiple input contexts, according to the needs of their application. Getting Keyboard Input To obtain characters from an input method, a client must call the function or with an input context created from that input method. Both a locale and display are bound to an input method when it is opened, and an input context inherits this locale and display. Any strings returned by or will be encoded in that locale. Focus Management For each text entry area in which the or functions are used, there will be an associated input context. When the application focus moves to a text entry area, the application must set the input context focus to the input context associated with that area. The input context focus is set by calling with the appropriate input context. Also, when the application focus moves out of a text entry area, the application should unset the focus for the associated input context by calling . As an optimization, if is called successively on two different input contexts, setting the focus on the second will automatically unset the focus on the first. To set and unset the input context focus correctly, it is necessary to track application-level focus changes. Such focus changes do not necessarily correspond to X server focus changes. If a single input context is being used to do input for multiple text entry areas, it will also be necessary to set the focus window of the input context whenever the focus window changes (see section 13.5.6.3). Geometry Management In most input method architectures (on-the-spot being the notable exception), the input method will perform the display of its own data. To provide better visual locality, it is often desirable to have the input method areas embedded within a client. To do this, the client may need to allocate space for an input method. Xlib provides support that allows the size and position of input method areas to be provided by a client. The input method areas that are supported for geometry management are the status area and the preedit area. The fundamental concept on which geometry management for input method windows is based is the proper division of responsibilities between the client (or toolkit) and the input method. The division of responsibilities is as follows: The client is responsible for the geometry of the input method window. The input method is responsible for the contents of the input method window. An input method is able to suggest a size to the client, but it cannot suggest a placement. Also the input method can only suggest a size. It does not determine the size, and it must accept the size it is given. Before a client provides geometry management for an input method, it must determine if geometry management is needed. The input method indicates the need for geometry management by setting XIMPreeditArea or XIMStatusArea in its XIMStyles value returned by . When a client has decided that it will provide geometry management for an input method, it indicates that decision by setting the XNInputStyle value in the XIC. After a client has established with the input method that it will do geometry management, the client must negotiate the geometry with the input method. The geometry is negotiated by the following steps: The client suggests an area to the input method by setting the XNAreaNeeded value for that area. If the client has no constraints for the input method, it either will not suggest an area or will set the width and height to zero. Otherwise, it will set one of the values. The client will get the XIC value XNAreaNeeded. The input method will return its suggested size in this value. The input method should pay attention to any constraints suggested by the client. The client sets the XIC value XNArea to inform the input method of the geometry of its window. The client should try to honor the geometry requested by the input method. The input method must accept this geometry. Clients doing geometry management must be aware that setting other XIC values may affect the geometry desired by an input method. For example, XNFontSet and XNLineSpace may change the geometry desired by the input method. The table of XIC values (see section 13.5.6) indicates the values that can cause the desired geometry to change when they are set. It is the responsibility of the client to renegotiate the geometry of the input method window when it is needed. In addition, a geometry management callback is provided by which an input method can initiate a geometry change. Event Filtering A filtering mechanism is provided to allow input methods to capture X events transparently to clients. It is expected that toolkits (or clients) using or will call this filter at some point in the event processing mechanism to make sure that events needed by an input method can be filtered by that input method. If there were no filter, a client could receive and discard events that are necessary for the proper functioning of an input method. The following provides a few examples of such events: Expose events on preedit window in local mode. Events may be used by an input method to communicate with an input server. Such input server protocol-related events have to be intercepted if one does not want to disturb client code. Key events can be sent to a filter before they are bound to translations such as those the X Toolkit Intrinsics library provides. Clients are expected to get the XIC value XNFilterEvents and augment the event mask for the client window with that event mask. This mask may be zero. Callbacks When an on-the-spot input method is implemented, only the client can insert or delete preedit data in place and possibly scroll existing text. This means that the echo of the keystrokes has to be achieved by the client itself, tightly coupled with the input method logic. When the user enters a keystroke, the client calls or . At this point, in the on-the-spot case, the echo of the keystroke in the preedit has not yet been done. Before returning to the client logic that handles the input characters, the look-up function must call the echoing logic to insert the new keystroke. If the keystrokes entered so far make up a character, the keystrokes entered need to be deleted, and the composed character will be returned. Hence, what happens is that, while being called by client code, the input method logic has to call back to the client before it returns. The client code, that is, a callback procedure, is called from the input method logic. There are a number of cases where the input method logic has to call back the client. Each of those cases is associated with a well-defined callback action. It is possible for the client to specify, for each input context, what callback is to be called for each action. There are also callbacks provided for feedback of status information and a callback to initiate a geometry request for an input method. Visible Position Feedback Masks In the on-the-spot input style, there is a problem when attempting to draw preedit strings that are longer than the available space. Once the display area is exceeded, it is not clear how best to display the preedit string. The visible position feedback masks of XIMText help resolve this problem by allowing the input method to specify hints that indicate the essential portions of the preedit string. For example, such hints can help developers implement scrolling of a long preedit string within a short preedit display area. Preedit String Management As highlighted before, the input method architecture provides preediting, which supports a type of preprocessor input composition. In this case, composition consists of interpreting a sequence of key events and returning a committed string via or . This provides the basics for input methods. In addition to preediting based on key events, a general framework is provided to give a client that desires it more advanced preediting based on the text within the client. This framework is called string conversion and is provided using XIC values. The fundamental concept of string conversion is to allow the input method to manipulate the client's text independent of any user preediting operation. The need for string conversion is based on language needs and input method capabilities. The following are some examples of string conversion: Transliteration conversion provides language-specific conversions within the input method. In the case of Korean input, users wish to convert a Hangul string into a Hanja string while in preediting, after preediting, or in other situations (for example, on a selected string). The conversion is triggered when the user presses a Hangul-to-Hanja key sequence (which may be input method specific). Sometimes the user may want to invoke the conversion after finishing preediting or on a user-selected string. Thus, the string to be converted is in an application buffer, not in the preedit area of the input method. The string conversion services allow the client to request this transliteration conversion from the input method. There are many other transliteration conversions defined for various languages, for example, Kana-to-Kanji conversion in Japanese. The key to remember is that transliteration conversions are triggered at the request of the user and returned to the client immediately without affecting the preedit area of the input method. Reconversion of a previously committed string or a selected string is supported by many input methods as a convenience to the user. For example, a user tends to mistype the commit key while preediting. In that case, some input methods provide a special key sequence to request a ``reconvert'' operation on the committed string, similiar to the undo facility provided by most text editors. Another example is where the user is proofreading a document that has some misconversions from preediting and wants to correct the misconverted text. Such reconversion is again triggered by the user invoking some special action, but reconversions should not affect the state of the preedit area. Context-sensitive conversion is required for some languages and input methods that need to retrieve text that surrounds the current spot location (cursor position) of the client's buffer. Such text is needed when the preediting operation depends on some surrounding characters (usually preceding the spot location). For example, in Thai language input, certain character sequences may be invalid and the input method may want to check whether characters constitute a valid word. Input methods that do such context-dependent checking need to retrieve the characters surrounding the current cursor position to obtain complete words. Unlike other conversions, this conversion is not explicitly requested by the user. Input methods that provide such context-sensitive conversion continuously need to request context from the client, and any change in the context of the spot location may affect such conversions. The client's context would be needed if the user moves the cursor and starts editing again. For this reason, an input method supporting this type of conversion should take notice of when the client calls or , which is usually an indication of a context change. Context-sensitive conversions just need a copy of the client's text, while other conversions replace the client's text with new text to achieve the reconversion or transliteration. Yet in all cases the result of a conversion, either immediately or via preediting, is returned by the and functions. String conversion support is dependent on the availability of the XNStringConversion or XNStringConversionCallback XIC values. Because the input method may not support string conversions, clients have to query the availability of string conversion operations by checking the supported XIC values list by calling with the XNQueryICValuesList IM value. The difference between these two values is whether the conversion is invoked by the client or the input method. The XNStringConversion XIC value is used by clients to request a string conversion from the input method. The client is responsible for determining which events are used to trigger the string conversion and whether the string to be converted should be copied or deleted. The type of conversion is determined by the input method; the client can only pass the string to be converted. The client is guaranteed that no XNStringConversionCallback will be issued when this value is set; thus, the client need only set one of these values. The XNStringConversionCallback XIC value is used by the client to notify the input method that it will accept requests from the input method for string conversion. If this value is set, it is the input method's responsibility to determine which events are used to trigger the string conversion. When such events occur, the input method issues a call to the client-supplied procedure to retrieve the string to be converted. The client's callback procedure is notified whether to copy or delete the string and is provided with hints as to the amount of text needed. The XIMStringConversionCallbackStruct specifies which text should be passed back to the input method. Finally, the input method may call the client's XNStringConversionCallback procedure multiple times if the string returned from the callback is not sufficient to perform a successful conversion. The arguments to the client's procedure allow the input method to define a position (in character units) relative to the client's cursor position and the size of the text needed. By varying the position and size of the desired text in subsequent callbacks, the input method can retrieve additional text. Input Method Management The interface to input methods might appear to be simply creating an input method () and freeing an input method (). However, input methods may require complex communication with input method servers (IM servers), for example: If the X server, IM server, and X clients are started asynchronously, some clients may attempt to connect to the IM server before it is fully operational, and fail. Therefore, some mechanism is needed to allow clients to detect when an IM server has started. It is up to clients to decide what should be done when an IM server is not available (for example, wait, or use some other IM server). Some input methods may allow the underlying IM server to be switched. Such customization may be desired without restarting the entire client. To support management of input methods in these cases, the following functions are provided: This function allows clients to register a callback procedure to be called when Xlib detects that an IM server is up and available. A client calls this function as a result of the callback procedure being called. , These functions use the XIM and XIC values, XNDestroyCallback, to allow a client to register a callback procedure to be called when Xlib detects that an IM server that was associated with an opened input method is no longer available. In addition, this function can be used to switch IM servers for those input methods that support such functionality. The IM value for switching IM servers is implementation-dependent; see the description below about switching IM servers. This function removes a callback procedure registered by the client. Input methods that support switching of IM servers may exhibit some side-effects: The input method will ensure that any new IM server supports any of the input styles being used by input contexts already associated with the input method. However, the list of supported input styles may be different. Geometry management requests on previously created input contexts may be initiated by the new IM server. Hot Keys Some clients need to guarantee which keys can be used to escape from the input method, regardless of the input method state; for example, the client-specific Help key or the keys to move the input focus. The HotKey mechanism allows clients to specify a set of keys for this purpose. However, the input method might not allow clients to specify hot keys. Therefore, clients have to query support of hot keys by checking the supported XIC values list by calling with the XNQueryICValuesList IM value. When the hot keys specified conflict with the key bindings of the input method, hot keys take precedence over the key bindings of the input method. Preedit State Operation An input method may have several internal states, depending on its implementation and the locale. However, one state that is independent of locale and implementation is whether the input method is currently performing a preediting operation. Xlib provides the ability for an application to manage the preedit state programmatically. Two methods are provided for retrieving the preedit state of an input context. One method is to query the state by calling with the XNPreeditState XIC value. Another method is to receive notification whenever the preedit state is changed. To receive such notification, an application needs to register a callback by calling with the XNPreeditStateNotifyCallback XIC value. In order to change the preedit state programmatically, an application needs to call with XNPreeditState. Availability of the preedit state is input method dependent. The input method may not provide the ability to set the state or to retrieve the state programmatically. Therefore, clients have to query availability of preedit state operations by checking the supported XIC values list by calling with the XNQueryICValuesList IM value. Input Method Functions To open a connection, use . XOpenIM XIM XOpenIM Display *display XrmDatabase db char *res_name char *res_class display Specifies the connection to the X server. db Specifies a pointer to the resource database. res_name Specifies the full resource name of the application. res_class Specifies the full class name of the application. The function opens an input method, matching the current locale and modifiers specification. Current locale and modifiers are bound to the input method at opening time. The locale associated with an input method cannot be changed dynamically. This implies that the strings returned by or , for any input context affiliated with a given input method, will be encoded in the locale current at the time the input method is opened. The specific input method to which this call will be routed is identified on the basis of the current locale. will identify a default input method corresponding to the current locale. That default can be modified using for the input method modifier. The db argument is the resource database to be used by the input method for looking up resources that are private to the input method. It is not intended that this database be used to look up values that can be set as IC values in an input context. If db is NULL, no database is passed to the input method. The res_name and res_class arguments specify the resource name and class of the application. They are intended to be used as prefixes by the input method when looking up resources that are common to all input contexts that may be created for this input method. The characters used for resource names and classes must be in the X Portable Character Set. The resources looked up are not fully specified if res_name or res_class is NULL. The res_name and res_class arguments are not assumed to exist beyond the call to . The specified resource database is assumed to exist for the lifetime of the input method. returns NULL if no input method could be opened. To close a connection, use . XCloseIM Status XCloseIM XIM im im Specifies the input method. The function closes the specified input method. To set input method attributes, use . XSetIMValues char *XSetIMValues XIM im im Specifies the input method. ... Specifies the variable-length argument list to set XIM values. The function presents a variable argument list programming interface for setting attributes of the specified input method. It returns NULL if it succeeds; otherwise, it returns the name of the first argument that could not be set. Xlib does not attempt to set arguments from the supplied list that follow the failed argument; all arguments in the list preceding the failed argument have been set correctly. To query an input method, use . XGetIMValues char *XGetIMValues XIM im im Specifies the input method. ... Specifies the variable length argument list to get XIM values. The function presents a variable argument list programming interface for querying properties or features of the specified input method. This function returns NULL if it succeeds; otherwise, it returns the name of the first argument that could not be obtained. Each XIM value argument (following a name) must point to a location where the XIM value is to be stored. That is, if the XIM value is of type T, the argument must be of type T*. If T itself is a pointer type, then allocates memory to store the actual data, and the client is responsible for freeing this data by calling with the returned pointer. To obtain the display associated with an input method, use . XDisplayOfIM Display *XDisplayOfIM XIM im im Specifies the input method. The function returns the display associated with the specified input method. To get the locale associated with an input method, use . XLocaleOfIM char *XLocaleOfIM XIM im im Specifies the input method. The function returns the locale associated with the specified input method. To register an input method instantiate callback, use . XRegisterIMInstantiateCallback Bool XRegisterIMInstantiateCallback Display *display XrmDatabase db char *res_name char *res_class XIMProc callback XPointer *client_data display Specifies the connection to the X server. db Specifies a pointer to the resource database. res_name Specifies the full resource name of the application. res_class Specifies the full class name of the application. callback Specifies a pointer to the input method instantiate callback. client_data Specifies the additional client data. The function registers a callback to be invoked whenever a new input method becomes available for the specified display that matches the current locale and modifiers. The function returns True if it succeeds; otherwise, it returns False. The generic prototype is as follows: IMInstantiateCallback void IMInstantiateCallback Display *display XPointer client_data XPointer call_data display Specifies the connection to the X server. client_data Specifies the additional client data. call_data Not used for this callback and always passed as NULL. To unregister an input method instantiation callback, use . XUnregisterIMInstantiateCallback Bool XUnregisterIMInstantiateCallback Display *display XrmDatabase db char *res_name char *res_class XIMProc callback XPointer *client_data display Specifies the connection to the X server. db Specifies a pointer to the resource database. res_name Specifies the full resource name of the application. res_class Specifies the full class name of the application. callback Specifies a pointer to the input method instantiate callback. client_data Specifies the additional client data. The function removes an input method instantiation callback previously registered. The function returns True if it succeeds; otherwise, it returns False. Input Method Values The following table describes how XIM values are interpreted by an input method. The first column lists the XIM values. The second column indicates how each of the XIM values are treated by that input style. The following keys apply to this table. Key Explanation D This value may be set using . If it is not set, a default is provided. S This value may be set using . G This value may be read using . XIM Value Key XNQueryInputStyle G XNResourceName D-S-G XNResourceClass D-S-G XNDestroyCallback D-S-G XNQueryIMValuesList G XNQueryICValuesList G XNVisiblePosition G XNR6PreeditCallback D-S-G XNR6PreeditCallback is obsolete and its use is not recommended (see section 13.5.4.6). Query Input Style A client should always query the input method to determine which input styles are supported. The client should then find an input style it is capable of supporting. If the client cannot find an input style that it can support, it should negotiate with the user the continuation of the program (exit, choose another input method, and so on). The argument value must be a pointer to a location where the returned value will be stored. The returned value is a pointer to a structure of type XIMStyles. Clients are responsible for freeing the XIMStyles structure. To do so, use . The XIMStyles structure is defined as follows: XIMStyle XIMPreeditArea XIMPreeditCallbacks XIMPreeditPosition XIMPreeditNothing XIMPreeditNone XIMStatusArea XIMStatusCallbacks XIMStatusNothing XIMStatusNone XIMStyles typedef unsigned long XIMStyle; #define XIMPreeditArea 0x0001L #define XIMPreeditCallbacks 0x0002L #define XIMPreeditPosition 0x0004L #define XIMPreeditNothing 0x0008L #define XIMPreeditNone 0x0010L #define XIMStatusArea 0x0100L #define XIMStatusCallbacks 0x0200L #define XIMStatusNothing 0x0400L #define XIMStatusNone 0x0800L typedef struct { unsigned short count_styles; XIMStyle * supported_styles; } XIMStyles; An XIMStyles structure contains the number of input styles supported in its count_styles field. This is also the size of the supported_styles array. The supported styles is a list of bitmask combinations, which indicate the combination of styles for each of the areas supported. These areas are described later. Each element in the list should select one of the bitmask values for each area. The list describes the complete set of combinations supported. Only these combinations are supported by the input method. The preedit category defines what type of support is provided by the input method for preedit information. XIMPreeditArea XIMPreeditPosition XIMPreeditCallbacks XIMPreeditNothing XIMPreeditNone XIMPreeditArea If chosen, the input method would require the client to provide some area values for it to do its preediting. Refer to XIC values XNArea and XNAreaNeeded. XIMPreeditPosition If chosen, the input method would require the client to provide positional values. Refer to XIC values XNSpotLocation and XNFocusWindow. XIMPreeditCallbacks If chosen, the input method would require the client to define the set of preedit callbacks. Refer to XIC values XNPreeditStartCallback, XNPreeditDoneCallback, XNPreeditDrawCallback, and XNPreeditCaretCallback. XIMPreeditNothing If chosen, the input method can function without any preedit values. XIMPreeditNone The input method does not provide any preedit feedback. Any preedit value is ignored. This style is mutually exclusive with the other preedit styles. The status category defines what type of support is provided by the input method for status information. XIMStatusArea XIMStatusCallbacks XIMStatusNothing XIMStatusNone XIMStatusArea The input method requires the client to provide some area values for it to do its status feedback. See XNArea and XNAreaNeeded. XIMStatusCallbacks The input method requires the client to define the set of status callbacks, XNStatusStartCallback, XNStatusDoneCallback, and XNStatusDrawCallback. XIMStatusNothing The input method can function without any status values. XIMStatusNone The input method does not provide any status feedback. If chosen, any status value is ignored. This style is mutually exclusive with the other status styles. Resource Name and Class The XNResourceName and XNResourceClass arguments are strings that specify the full name and class used by the input method. These values should be used as prefixes for the name and class when looking up resources that may vary according to the input method. If these values are not set, the resources will not be fully specified. It is not intended that values that can be set as XIM values be set as resources. Destroy Callback The XNDestroyCallback argument is a pointer to a structure of type XIMCallback. XNDestroyCallback is triggered when an input method stops its service for any reason. After the callback is invoked, the input method is closed and the associated input context(s) are destroyed by Xlib. Therefore, the client should not call or . The generic prototype of this callback function is as follows: DestroyCallback void DestroyCallback XIM im XPointer client_data XPointer call_data im Specifies the input method. client_data Specifies the additional client data. call_data Not used for this callback and always passed as NULL. A DestroyCallback is always called with a NULL call_data argument. Query IM/IC Values List XNQueryIMValuesList and XNQueryICValuesList are used to query about XIM and XIC values supported by the input method. The argument value must be a pointer to a location where the returned value will be stored. The returned value is a pointer to a structure of type XIMValuesList. Clients are responsible for freeing the XIMValuesList structure. To do so, use . The XIMValuesList structure is defined as follows: typedef struct { unsigned short count_values; char **supported_values; } XIMValuesList; Visible Position The XNVisiblePosition argument indicates whether the visible position masks of XIMFeedback in XIMText are available. The argument value must be a pointer to a location where the returned value will be stored. The returned value is of type Bool. If the returned value is True, the input method uses the visible position masks of XIMFeedback in XIMText; otherwise, the input method does not use the masks. Because this XIM value is optional, a client should call with argument XNQueryIMValuesList before using this argument. If the XNVisiblePosition does not exist in the IM values list returned from XNQueryIMValuesList, the visible position masks of XIMFeedback in XIMText are not used to indicate the visible position. Preedit Callback Behavior The XNR6PreeditCallback argument originally included in the X11R6 specification has been deprecated.\(dg During formulation of the X11R6 specification, the behavior of the R6 PreeditDrawCallbacks was going to differ significantly from that of the R5 callbacks. Late changes to the specification converged the R5 and R6 behaviors, eliminating the need for XNR6PreeditCallback. Unfortunately, this argument was not removed from the R6 specification before it was published. The XNR6PreeditCallback argument indicates whether the behavior of preedit callbacks regarding XIMPreeditDrawCallbackStruct values follows Release 5 or Release 6 semantics. The value is of type Bool. When querying for XNR6PreeditCallback, if the returned value is True, the input method uses the Release 6 behavior; otherwise, it uses the Release 5 behavior. The default value is False. In order to use Release 6 semantics, the value of XNR6PreeditCallback must be set to True. Because this XIM value is optional, a client should call with argument XNQueryIMValuesList before using this argument. If the XNR6PreeditCallback does not exist in the IM values list returned from XNQueryIMValuesList, the PreeditCallback behavior is Release 5 semantics. Input Context Functions An input context is an abstraction that is used to contain both the data required (if any) by an input method and the information required to display that data. There may be multiple input contexts for one input method. The programming interfaces for creating, reading, or modifying an input context use a variable argument list. The name elements of the argument lists are referred to as XIC values. It is intended that input methods be controlled by these XIC values. As new XIC values are created, they should be registered with the X Consortium. To create an input context, use . XCreateIC XIC XCreateIC XIM im im Specifies the input method. ... Specifies the variable length argument list to set XIC values. The function creates a context within the specified input method. Some of the arguments are mandatory at creation time, and the input context will not be created if those arguments are not provided. The mandatory arguments are the input style and the set of text callbacks (if the input style selected requires callbacks). All other input context values can be set later. returns a NULL value if no input context could be created. A NULL value could be returned for any of the following reasons: A required argument was not set. A read-only argument was set (for example, XNFilterEvents). The argument name is not recognized. The input method encountered an input method implementation-dependent error. can generate BadAtom, BadColor, BadPixmap, and BadWindow errors. To destroy an input context, use . XDestroyIC void XDestroyIC XIC ic ic Specifies the input context. destroys the specified input context. To communicate to and synchronize with input method for any changes in keyboard focus from the client side, use and . XSetICFocus void XSetICFocus XIC ic ic Specifies the input context. The function allows a client to notify an input method that the focus window attached to the specified input context has received keyboard focus. The input method should take action to provide appropriate feedback. Complete feedback specification is a matter of user interface policy. Calling does not affect the focus window value. XUnsetICFocus void XUnsetICFocus XIC ic ic Specifies the input context. The function allows a client to notify an input method that the specified input context has lost the keyboard focus and that no more input is expected on the focus window attached to that input context. The input method should take action to provide appropriate feedback. Complete feedback specification is a matter of user interface policy. Calling does not affect the focus window value; the client may still receive events from the input method that are directed to the focus window. To reset the state of an input context to its initial state, use or . XmbResetIC XwcResetIC char *XmbResetIC XIC ic wchar_t *XwcResetIC XIC ic ic Specifies the input context. When XNResetState is set to XIMInitialState, and reset an input context to its initial state; when XNResetState is set to XIMPreserveState, the current input context state is preserved. In both cases, any input pending on that context is deleted. The input method is required to clear the preedit area, if any, and update the status accordingly. Calling or does not change the focus. The return value of is its current preedit string as a multibyte string. If there is any preedit text drawn or visible to the user, then these procedures must return a non-NULL string. If there is no visible preedit text, then it is input method implementation-dependent whether these procedures return a non-NULL string or NULL. The client should free the returned string by calling . To get the input method associated with an input context, use . XIMOfIC XIM XIMOfIC XIC ic ic Specifies the input context. The function returns the input method associated with the specified input context. Xlib provides two functions for setting and reading XIC values, respectively, and . Both functions have a variable-length argument list. In that argument list, any XIC value's name must be denoted with a character string using the X Portable Character Set. To set XIC values, use . XSetICValues char *XSetICValues XIC ic ic Specifies the input context. ... Specifies the variable length argument list to set XIC values. The function returns NULL if no error occurred; otherwise, it returns the name of the first argument that could not be set. An argument might not be set for any of the following reasons: The argument is read-only (for example, XNFilterEvents). The argument name is not recognized. An implementation-dependent error occurs. Each value to be set must be an appropriate datum, matching the data type imposed by the semantics of the argument. can generate BadAtom, BadColor, BadCursor, BadPixmap, and BadWindow errors. To obtain XIC values, use . XGetICValues char *XGetICValues XIC ic ic Specifies the input context. ... Specifies the variable length argument list to get XIC values. The function returns NULL if no error occurred; otherwise, it returns the name of the first argument that could not be obtained. An argument could not be obtained for any of the following reasons: The argument name is not recognized. The input method encountered an implementation-dependent error. Each IC attribute value argument (following a name) must point to a location where the IC value is to be stored. That is, if the IC value is of type T, the argument must be of type T*. If T itself is a pointer type, then allocates memory to store the actual data, and the client is responsible for freeing this data by calling with the returned pointer. The exception to this rule is for an IC value of type XVaNestedList (for preedit and status attributes). In this case, the argument must also be of type XVaNestedList. Then, the rule of changing type T to T* and freeing the allocated data applies to each element of the nested list. Input Context Values The following tables describe how XIC values are interpreted by an input method depending on the input style chosen by the user. The first column lists the XIC values. The second column indicates which values are involved in affecting, negotiating, and setting the geometry of the input method windows. The subentries under the third column indicate the different input styles that are supported. Each of these columns indicates how each of the XIC values are treated by that input style. The following keys apply to these tables. Key Explanation C This value must be set with . D This value may be set using .> If it is not set,> a default is provided. G This value may be read using . GN This value may cause geometry negotiation when its value is set by means of or . GR This value will be the response of the input method when any GN value is changed. GS This value will cause the geometry of the input method window to be set. O This value must be set once and only once. It need not be set at create time. S This value may be set with . Ignored This value is ignored by the input method for the given input style. XIC Value Geometry Mangement Preedit Callback Preedit Position Input Style Preedit Area Preedit Nothing Preedit None Input Style C-G C-G C-G C-G C-G Client Window O-G O-G O-G O-G Ignored Focus Window GN D-S-G D-S-G D-S-G D-S-G Ignored Resource Name Ignored D-S-G D-S-G D-S-G Ignored Resource Class Ignored D-S-G D-S-G D-S-G Ignored Geometry Callback Ignored Ignored D-S-G Ignored Ignored Filter Events G G G G Ignored Destroy Callback D-S-G D-S-G D-S-G D-S-G D-S-G String Conversion Callback S-G S-G S-G S-G S-G String Conversion D-S-G D-S-G D-S-G D-S-G D-S-G Reset State D-S-G D-S-G D-S-G D-S-G Ignored HotKey S-G S-G S-G S-G Ignored HotKeyState D-S-G D-S-G D-S-G D-S-G Ignored Preedit Area GS Ignored D-S-G D-S-G Ignored Ignored Area Needed GN-GR Ignored Ignored S-G Ignored Ignored Spot Location Ignored D-S-G Ignored Ignored Ignored Colormap Ignored D-S-G D-S-G D-S-G Ignored Foreground Ignored D-S-G D-S-G D-S-G Ignored Background Ignored D-S-G D-S-G D-S-G Ignored Background Pixmap Ignored D-S-G D-S-G D-S-G Ignored Font Set GN Ignored D-S-G D-S-G D-S-G Ignored Line Spacing GN Ignored D-S-G D-S-G D-S-G Ignored Cursor Ignored D-S-G D-S-G D-S-G Ignored Preedit State D-S-G D-S-G D-S-G D-S-G Ignored Preedit State Notify Callback S-G S-G S-G S-G Ignored Preedit Callbacks C-S-G Ignored Ignored Ignored Ignored XIC Value Geomentry Management Status Callback Status Area Status Nothing Status None Input Style C-G C-G C-G C-G Client Window O-G O-G O-G Ignored Focus Window GN D-S-G D-S-G D-S-G Ignored Resource Name Ignored D-S-G D-S-G Ignored Resource Class Ignored D-S-G D-S-G Ignored Geometry Callback Ignored D-S-G Ignored Ignored Filter Events G G G G Status Area GS Ignored D-S-G Ignored Ignored Area Needed GN-GR Ignored S-G Ignored Ignored Colormap Ignored D-S-G D-S-G Ignored Foreground Ignored D-S-G D-S-G Ignored Background Ignored D-S-G D-S-G Ignored Background Pixmap Ignored D-S-G D-S-G Ignored Font Set GN Ignored D-S-G D-S-G Ignored Line Spacing GN Ignored D-S-G D-S-G Ignored Cursor Ignored D-S-G D-S-G Ignored Status Callbacks C-S-G Ignored Ignored Ignored Input Style The XNInputStyle argument specifies the input style to be used. The value of this argument must be one of the values returned by the function with the XNQueryInputStyle argument specified in the supported_styles list. Note that this argument must be set at creation time and cannot be changed. Client Window XNClientWindow The XNClientWindow argument specifies to the input method the client window in which the input method can display data or create subwindows. Geometry values for input method areas are given with respect to the client window. Dynamic change of client window is not supported. This argument may be set only once and should be set before any input is done using this input context. If it is not set, the input method may not operate correctly. If an attempt is made to set this value a second time with , the string XNClientWindow will be returned by , and the client window will not be changed. If the client window is not a valid window ID on the display attached to the input method, a BadWindow error can be generated when this value is used by the input method. Focus Window XNFocusWindow The XNFocusWindow argument specifies the focus window. The primary purpose of the XNFocusWindow is to identify the window that will receive the key event when input is composed. In addition, the input method may possibly affect the focus window as follows: Select events on it Send events to it Modify its properties Grab the keyboard within that window The associated value must be of type Window. If the focus window is not a valid window ID on the display attached to the input method, a BadWindow error can be generated when this value is used by the input method. When this XIC value is left unspecified, the input method will use the client window as the default focus window. Resource Name and Class XNResourceName XNResourceClass The XNResourceName and XNResourceClass arguments are strings that specify the full name and class used by the client to obtain resources for the client window. These values should be used as prefixes for name and class when looking up resources that may vary according to the input context. If these values are not set, the resources will not be fully specified. It is not intended that values that can be set as XIC values be set as resources. Geometry Callback XNGeometryCallback The XNGeometryCallback argument is a structure of type XIMCallback (see section 13.5.6.13.12). The XNGeometryCallback argument specifies the geometry callback that a client can set. This callback is not required for correct operation of either an input method or a client. It can be set for a client whose user interface policy permits an input method to request the dynamic change of that input method's window. An input method that does dynamic change will need to filter any events that it uses to initiate the change. Filter Events XNFilterEvents The XNFilterEvents argument returns the event mask that an input method needs to have selected for. The client is expected to augment its own event mask for the client window with this one. This argument is read-only, is set by the input method at create time, and is never changed. The type of this argument is unsigned long. Setting this value will cause an error. Destroy Callback The XNDestroyCallback argument is a pointer to a structure of type XIMCallback (see section 13.5.6.13.12). This callback is triggered when the input method stops its service for any reason; for example, when a connection to an IM server is broken. After the destroy callback is called, the input context is destroyed and the input method is closed. Therefore, the client should not call and . String Conversion Callback The XNStringConversionCallback argument is a structure of type XIMCallback (see section 13.5.6.13.12). The XNStringConversionCallback argument specifies a string conversion callback. This callback is not required for correct operation of either the input method or the client. It can be set by a client to support string conversions that may be requested by the input method. An input method that does string conversions will filter any events that it uses to initiate the conversion. Because this XIC value is optional, a client should call with argument XNQueryICValuesList before using this argument. String Conversion The XNStringConversion argument is a structure of type XIMStringConversionText. The XNStringConversion argument specifies the string to be converted by an input method. This argument is not required for correct operation of either the input method or the client. String conversion facilitates the manipulation of text independent of preediting. It is essential for some input methods and clients to manipulate text by performing context-sensitive conversion, reconversion, or transliteration conversion on it. Because this XIC value is optional, a client should call with argument XNQueryICValuesList before using this argument. The XIMStringConversionText structure is defined as follows: typedef struct _XIMStringConversionText { unsigned short length; XIMStringConversionFeedback *feedback; Bool encoding_is_wchar; union { char *mbs; wchar_t *wcs; } string; } XIMStringConversionText; typedef unsigned long XIMStringConversionFeedback; The feedback member is reserved for future use. The text to be converted is defined by the string and length members. The length is indicated in characters. To prevent the library from freeing memory pointed to by an uninitialized pointer, the client should set the feedback element to NULL. Reset State The XNResetState argument specifies the state the input context will return to after calling or . The XIC state may be set to its initial state, as specified by the XNPreeditState value when was called, or it may be set to preserve the current state. The valid masks for XIMResetState are as follows: XIMInitialState XINPreserveState typedef unsigned long XIMResetState; #define XIMInitialState (1L) #define XIMPreserveState (1L<<1) If XIMInitialState is set, then and will return to the initial XNPreeditState state of the XIC. If XIMPreserveState is set, then and will preserve the current state of the XIC. If XNResetState is left unspecified, the default is XIMInitialState. XIMResetState values other than those specified above will default to XIMInitialState. Because this XIC value is optional, a client should call with argument XNQueryICValuesList before using this argument. Hot Keys The XNHotKey argument specifies the hot key list to the XIC. The hot key list is a pointer to the structure of type XIMHotKeyTriggers, which specifies the key events that must be received without any interruption of the input method. For the hot key list set with this argument to be utilized, the client must also set XNHotKeyState to XIMHotKeyStateON. Because this XIC value is optional, a client should call with argument XNQueryICValuesList before using this functionality. The value of the argument is a pointer to a structure of type XIMHotKeyTriggers. If an event for a key in the hot key list is found, then the process will receive the event and it will be processed inside the client. typedef struct { KeySym keysym; unsigned int modifier; unsigned int modifier_mask; } XIMHotKeyTrigger; typedef struct { int num_hot_key; XIMHotKeyTrigger *key; } XIMHotKeyTriggers; The combination of modifier and modifier_mask are used to represent one of three states for each modifier: either the modifier must be on, or the modifier must be off, or the modifier is a ``don't care'' - it may be on or off. When a modifier_mask bit is set to 0, the state of the associated modifier is ignored when evaluating whether the key is hot or not. Modifier Bit Mask Bit Meaning 0 1 The modifier must be off. 1 1 The modifier must be on. n/a 0 Do not care if the modifier is on or off. Hot Key State The XNHotKeyState argument specifies the hot key state of the input method. This is usually used to switch the input method between hot key operation and normal input processing. The value of the argument is a pointer to a structure of type XIMHotKeyState . typedef unsigned long XIMHotKeyState; #define XIMHotKeyStateON (0x0001L) #define XIMHotKeyStateOFF (0x0002L) If not specified, the default is XIMHotKeyStateOFF. Preedit and Status Attributes XNPreeditAttributes XNStatusAttributes The XNPreeditAttributes and XNStatusAttributes arguments specify to an input method the attributes to be used for the preedit and status areas, if any. Those attributes are passed to or as a nested variable-length list. The names to be used in these lists are described in the following sections. Area XNArea The value of the XNArea argument must be a pointer to a structure of type XRectangle. The interpretation of the XNArea argument is dependent on the input method style that has been set. If the input method style is XIMPreeditPosition, XNArea specifies the clipping region within which preediting will take place. If the focus window has been set, the coordinates are assumed to be relative to the focus window. Otherwise, the coordinates are assumed to be relative to the client window. If neither has been set, the results are undefined. If XNArea is not specified, is set to NULL, or is invalid, the input method will default the clipping region to the geometry of the XNFocusWindow. If the area specified is NULL or invalid, the results are undefined. If the input style is XIMPreeditArea or XIMStatusArea, XNArea specifies the geometry provided by the client to the input method. The input method may use this area to display its data, either preedit or status depending on the area designated. The input method may create a window as a child of the client window with dimensions that fit the XNArea. The coordinates are relative to the client window. If the client window has not been set yet, the input method should save these values and apply them when the client window is set. If XNArea is not specified, is set to NULL, or is invalid, the results are undefined. Area Needed XNAreaNeeded When set, the XNAreaNeeded argument specifies the geometry suggested by the client for this area (preedit or status). The value associated with the argument must be a pointer to a structure of type XRectangle. Note that the x, y values are not used and that nonzero values for width or height are the constraints that the client wishes the input method to respect. When read, the XNAreaNeeded argument specifies the preferred geometry desired by the input method for the area. This argument is only valid if the input style is XIMPreeditArea or XIMStatusArea. It is used for geometry negotiation between the client and the input method and has no other effect on the input method (see section 13.5.1.5). Spot Location XNSpotLocation The XNSpotLocation argument specifies to the input method the coordinates of the spot to be used by an input method executing with XNInputStyle set to XIMPreeditPosition. When specified to any input method other than XIMPreeditPosition, this XIC value is ignored. The x coordinate specifies the position where the next character would be inserted. The y coordinate is the position of the baseline used by the current text line in the focus window. The x and y coordinates are relative to the focus window, if it has been set; otherwise, they are relative to the client window. If neither the focus window nor the client window has been set, the results are undefined. The value of the argument is a pointer to a structure of type XPoint. Colormap Two different arguments can be used to indicate what colormap the input method should use to allocate colors, a colormap ID, or a standard colormap name. XNColormap The XNColormap argument is used to specify a colormap ID. The argument value is of type Colormap. An invalid argument may generate a BadColor error when it is used by the input method. XNStdColormap The XNStdColormap argument is used to indicate the name of the standard colormap in which the input method should allocate colors. The argument value is an Atom that should be a valid atom for calling . An invalid argument may generate a BadAtom error when it is used by the input method. If the colormap is left unspecified, the client window colormap becomes the default. Foreground and Background XNForeground XNBackground The XNForeground and XNBackground arguments specify the foreground and background pixel, respectively. The argument value is of type unsigned long. It must be a valid pixel in the input method colormap. If these values are left unspecified, the default is determined by the input method. Background Pixmap The XNBackgroundPixmap argument specifies a background pixmap to be used as the background of the window. The value must be of type Pixmap. An invalid argument may generate a BadPixmap error when it is used by the input method. If this value is left unspecified, the default is determined by the input method. Font Set XNFontSet The XNFontSet argument specifies to the input method what font set is to be used. The argument value is of type XFontSet. If this value is left unspecified, the default is determined by the input method. Line Spacing The XNLineSpace argument specifies to the input method what line spacing is to be used in the preedit window if more than one line is to be used. This argument is of type int. If this value is left unspecified, the default is determined by the input method. Cursor XNCursor The XNCursor argument specifies to the input method what cursor is to be used in the specified window. This argument is of type Cursor. An invalid argument may generate a BadCursor error when it is used by the input method. If this value is left unspecified, the default is determined by the input method. Preedit State The XNPreeditState argument specifies the state of input preediting for the input method. Input preediting can be on or off. The valid mask names for XNPreeditState are as follows: XIMPreeditUnknown XIMPreeditEnable XIMPreeditDisable typedef unsigned long XIMPreeditState; #define XIMPreeditUnknown 0L #define XIMPreeditEnable 1L #define XIMPreeditDisable (1L<<1) If a value of XIMPreeditEnable is set, then input preediting is turned on by the input method. If a value of XIMPreeditDisable is set, then input preediting is turned off by the input method. If XNPreeditState is left unspecified, then the state will be implementation-dependent. When XNResetState is set to XIMInitialState, the XNPreeditState value specified at the creation time will be reflected as the initial state for and . Because this XIC value is optional, a client should call with argument XNQueryICValuesList before using this argument. Preedit State Notify Callback The preedit state notify callback is triggered by the input method when the preediting state has changed. The value of the XNPreeditStateNotifyCallback argument is a pointer to a structure of type XIMCallback. The generic prototype is as follows: PreeditStateNotifyCallback void PreeditStateNotifyCallback XIC ic XPointer client_data XIMPreeditStateNotifyCallbackStruct *call_data ic Specifies the input context. client_data Specifies the additional client data. call_data Specifies the current preedit state. The XIMPreeditStateNotifyCallbackStruct structure is defined as follows: XIMPreeditStateNotifyCallbackStruct typedef struct _XIMPreeditStateNotifyCallbackStruct { XIMPreeditState state; } XIMPreeditStateNotifyCallbackStruct; Because this XIC value is optional, a client should call with argument XNQueryICValuesList before using this argument. Preedit and Status Callbacks A client that wants to support the input style XIMPreeditCallbacks must provide a set of preedit callbacks to the input method. The set of preedit callbacks is as follows: XNPreeditStartCallback XNPreeditDoneCallback XNPreeditDrawCallback XNPreeditCaretCallback XNPreeditStartCallback This is called when the input method starts preedit. XNPreeditDoneCallback This is called when the input method stops preedit. XNPreeditDrawCallback This is called when a number of preedit keystrokes should be echoed. XNPreeditCaretCallback This is called to move the text insertion point within the preedit string. A client that wants to support the input style XIMStatusCallbacks must provide a set of status callbacks to the input method. The set of status callbacks is as follows: XNStatusStartCallback XNStatusDoneCallback XNStatusDrawCallback XNStatusStartCallback This is called when the input method initializes the status area. XNStatusDoneCallback This is called when the input method no longer needs the status area. XNStatusDrawCallback This is called when updating of the status area is required. The value of any status or preedit argument is a pointer to a structure of type XIMCallback. XIMProc XIMCallback typedef void (*XIMProc)(); typedef struct { XPointer client_data; XIMProc callback; } XIMCallback; Each callback has some particular semantics and will carry the data that expresses the environment necessary to the client into a specific data structure. This paragraph only describes the arguments to be used to set the callback. Setting any of these values while doing preedit may cause unexpected results. Input Method Callback Semantics XIM callbacks are procedures defined by clients or text drawing packages that are to be called from the input method when selected events occur. Most clients will use a text editing package or a toolkit and, hence, will not need to define such callbacks. This section defines the callback semantics, when they are triggered, and what their arguments are. This information is mostly useful for X toolkit implementors. Callbacks are mostly provided so that clients (or text editing packages) can implement on-the-spot preediting in their own window. In that case, the input method needs to communicate and synchronize with the client. The input method needs to communicate changes in the preedit window when it is under control of the client. Those callbacks allow the client to initialize the preedit area, display a new preedit string, move the text insertion point during preedit, terminate preedit, or update the status area. All callback procedures follow the generic prototype: CallbackPrototype void CallbackPrototype XIC ic XPointer client_data SomeType call_data ic Specifies the input context. client_data Specifies the additional client data. call_data Specifies data specific to the callback. The call_data argument is a structure that expresses the arguments needed to achieve the semantics; that is, it is a specific data structure appropriate to the callback. In cases where no data is needed in the callback, this call_data argument is NULL. The client_data argument is a closure that has been initially specified by the client when specifying the callback and passed back. It may serve, for example, to inherit application context in the callback. The following paragraphs describe the programming semantics and specific data structure associated with the different reasons. Geometry Callback The geometry callback is triggered by the input method to indicate that it wants the client to negotiate geometry. The generic prototype is as follows: GeometryCallback void GeometryCallback XIC ic XPointer client_data XPointer call_data ic Specifies the input context. client_data Specifies the additional client data. call_data Not used for this callback and always passed as NULL. The callback is called with a NULL call_data argument. Destroy Callback The destroy callback is triggered by the input method when it stops service for any reason. After the callback is invoked, the input context will be freed by Xlib. The generic prototype is as follows: DestroyCallback void DestroyCallback XIC ic XPointer client_data XPointer call_data ic Specifies the input context. client_data Specifies the additional client data. call_data Not used for this callback and always passed as NULL. The callback is called with a NULL call_data argument. String Conversion Callback The string conversion callback is triggered by the input method to request the client to return the string to be converted. The returned string may be either a multibyte or wide character string, with an encoding matching the locale bound to the input context. The callback prototype is as follows: StringConversionCallback void StringConversionCallback XIC ic XPointer client_data XIMStringConversionCallbackStruct *call_data ic Specifies the input method. client_data Specifies the additional client data. call_data Specifies the amount of the string to be converted. The callback is passed an XIMStringConversionCallbackStruct structure in the call_data argument. The text member is an XIMStringConversionText structure (see section 13.5.6.9) to be filled in by the client and describes the text to be sent to the input method. The data pointed to by the string and feedback elements of the XIMStringConversionText structure will be freed using by the input method after the callback returns. So the client should not point to internal buffers that are critical to the client. Similarly, because the feedback element is currently reserved for future use, the client should set feedback to NULL to prevent the library from freeing memory at some random location due to an uninitialized pointer. The XIMStringConversionCallbackStruct structure is defined as follows: XIMStringConversionCallbackStruct typedef struct _XIMStringConversionCallbackStruct { XIMStringConversionPosition position; XIMCaretDirection direction; short factor; XIMStringConversionOperation operation; XIMStringConversionText *text; } XIMStringConversionCallbackStruct; typedef short XIMStringConversionPosition; typedef unsigned short XIMStringConversionOperation; #define XIMStringConversionSubstitution (0x0001) #define XIMStringConversionRetrieval (0x0001) XIMStringConversionPosition specifies the starting position of the string to be returned in the XIMStringConversionText structure. The value identifies a position, in units of characters, relative to the client's cursor position in the client's buffer. The ending position of the text buffer is determined by the direction and factor members. Specifically, it is the character position relative to the starting point as defined by the XIMCaretDirection. The factor member of XIMStringConversionCallbackStruct specifies the number of XIMCaretDirection positions to be applied. For example, if the direction specifies XIMLineEnd and factor is 1, then all characters from the starting position to the end of the current display line are returned. If the direction specifies XIMForwardChar or XIMBackwardChar, then the factor specifies a relative position, indicated in characters, from the starting position. XIMStringConversionOperation specifies whether the string to be converted should be deleted (substitution) or copied (retrieval) from the client's buffer. When the XIMStringConversionOperation is XIMStringConversionSubstitution, the client must delete the string to be converted from its own buffer. When the XIMStringConversionOperation is XIMStringConversionRetrieval, the client must not delete the string to be converted from its buffer. The substitute operation is typically used for reconversion and transliteration conversion, while the retrieval operation is typically used for context-sensitive conversion. Preedit State Callbacks When the input method turns preediting on or off, a or callback is triggered to let the toolkit do the setup or the cleanup for the preedit region. PreeditStartCallback int PreeditStartCallback XIC ic XPointer client_data XPointer call_data ic Specifies the input context. client_data Specifies the additional client data. call_data Not used for this callback and always passed as NULL. When preedit starts on the specified input context, the callback is called with a NULL call_data argument. will return the maximum size of the preedit string. A positive number indicates the maximum number of bytes allowed in the preedit string, and a value of -1 indicates there is no limit. PreeditDoneCallback void PreeditDoneCallback XIC ic XPointer client_data XPointer call_data ic Specifies the input context. client_data Specifies the additional client data. call_data Not used for this callback and always passed as NULL. When preedit stops on the specified input context, the callback is called with a NULL call_data argument. The client can release the data allocated by . should initialize appropriate data needed for displaying preedit information and for handling further calls. Once is called, it will not be called again before has been called. Preedit Draw Callback This callback is triggered to draw and insert, delete or replace, preedit text in the preedit region. The preedit text may include unconverted input text such as Japanese Kana, converted text such as Japanese Kanji characters, or characters of both kinds. That string is either a multibyte or wide character string, whose encoding matches the locale bound to the input context. The callback prototype is as follows: PreeditDrawCallback void PreeditDrawCallback XIC ic XPointer client_data XIMPreeditDrawCallbackStruct *call_data ic Specifies the input context. client_data Specifies the additional client data. call_data Specifies the preedit drawing information. The callback is passed an XIMPreeditDrawCallbackStruct structure in the call_data argument. The text member of this structure contains the text to be drawn. After the string has been drawn, the caret should be moved to the specified location. The XIMPreeditDrawCallbackStruct structure is defined as follows: XIMPreeditDrawCallbackStruct typedef struct _XIMPreeditDrawCallbackStruct { int caret; /* Cursor offset within preedit string */ int chg_first; /* Starting change position */ int chg_length; /* Length of the change in character count */ XIMText *text; } XIMPreeditDrawCallbackStruct; The client must keep updating a buffer of the preedit text and the callback arguments referring to indexes in that buffer. The call_data fields have specific meanings according to the operation, as follows: To indicate text deletion, the call_data member specifies a NULL text field. The text to be deleted is then the current text in the buffer from position chg_first (starting at zero) on a character length of chg_length. When text is non-NULL, it indicates insertion or replacement of text in the buffer. The chg_length member identifies the number of characters in the current preedit buffer that are affected by this call. A positive chg_length indicates that chg_length number of characters, starting at chg_first, must be deleted or must be replaced by text, whose length is specified in the XIMText structure. A chg_length value of zero indicates that text must be inserted right at the position specified by chg_first. A value of zero for chg_first specifies the first character in the buffer. chg_length and chg_first combine to identify the modification required to the preedit buffer; beginning at chg_first, replace chg_length number of characters with the text in the supplied XIMText structure. For example, suppose the preedit buffer contains the string "ABCDE". Text: A B C D E ^ ^ ^ ^ ^ ^ CharPos: 0 1 2 3 4 5 The CharPos in the diagram shows the location of the character position relative to the character. If the value of chg_first is 1 and the value of chg_length is 3, this says to replace 3 characters beginning at character position 1 with the string in the XIMText structure. Hence, BCD would be replaced by the value in the structure. Though chg_length and chg_first are both signed integers they will never have a negative value. The caret member identifies the character position before which the cursor should be placed - after modification to the preedit buffer has been completed. For example, if caret is zero, the cursor is at the beginning of the buffer. If the caret is one, the cursor is between the first and second character. XIMText typedef struct _XIMText { unsigned short length; XIMFeedback * feedback; Bool encoding_is_wchar; union { char * multi_byte; wchar_t * wide_char; } string; } XIMText; The text string passed is actually a structure specifying as follows: The length member is the text length in characters. The encoding_is_wchar member is a value that indicates if the text string is encoded in wide character or multibyte format. The text string may be passed either as multibyte or as wide character; the input method controls in which form data is passed. The client's callback routine must be able to handle data passed in either form. The string member is the text string. The feedback member indicates rendering type for each character in the string member. If string is NULL (indicating that only highlighting of the existing preedit buffer should be updated), feedback points to length highlight elements that should be applied to the existing preedit buffer, beginning at chg_first. The feedback member expresses the types of rendering feedback the callback should apply when drawing text. Rendering of the text to be drawn is specified either in generic ways (for example, primary, secondary) or in specific ways (reverse, underline). When generic indications are given, the client is free to choose the rendering style. It is necessary, however, that primary and secondary be mapped to two distinct rendering styles. If an input method wants to control display of the preedit string, an input method can indicate the visibility hints using feedbacks in a specific way. The XIMVisibleToForward, XIMVisibleToBackword, and XIMVisibleToCenter masks are exclusively used for these visibility hints. The XIMVisibleToForward mask indicates that the preedit text is preferably displayed in the primary draw direction from the caret position in the preedit area forward. The XIMVisibleToBackword mask indicates that the preedit text is preferably displayed from the caret position in the preedit area backward, relative to the primary draw direction. The XIMVisibleToCenter mask indicates that the preedit text is preferably displayed with the caret position in the preedit area centered. The insertion point of the preedit string could exist outside of the visible area when visibility hints are used. Only one of the masks is valid for the entire preedit string, and only one character can hold one of these feedbacks for a given input context at one time. This feedback may be OR'ed together with another highlight (such as XIMReverse). Only the most recently set feedback is valid, and any previous feedback is automatically canceled. This is a hint to the client, and the client is free to choose how to display the preedit string. The feedback member also specifies how rendering of the text argument should be performed. If the feedback is NULL, the callback should apply the same feedback as is used for the surrounding characters in the preedit buffer; if chg_first is at a highlight boundary, the client can choose which of the two highlights to use. If feedback is not NULL, feedback specifies an array defining the rendering for each character of the string, and the length of the array is thus length. If an input method wants to indicate that it is only updating the feedback of the preedit text without changing the content of it, the XIMText structure will contain a NULL value for the string field, the number of characters affected (relative to chg_first) will be in the length field, and the feedback field will point to an array of XIMFeedback. Each element in the feedback array is a bitmask represented by a value of type XIMFeedback. The valid mask names are as follows: XIMReverse XIMUnderline XIMHighlight XIMPrimary XIMSecondary XIMTertiary XIMVisibleToForward XIMVisibleToBackward XIMVisibleToCenter typedef unsigned long XIMFeedback; #define XIMReverse 1L #define XIMUnderline (1L<<1) #define XIMHighlight (1L<<2) #define XIMPrimary (1L<<5)* #define XIMSecondary (1L<<6)* #define XIMTertiary (1L<<7)* #define XIMVisibleToForward (1L<<8) #define XIMVisibleToBackward (1L<<9) #define XIMVisibleToCenter (1L<<10) *† The values for XIMPrimary, XIMSecondary, and XIMTertiary were incorrectly defined in the R5 specification. The X Consortium’s X11R5 implementation correctly implemented the values for these highlights. The value of these highlights has been corrected in this specification to agree with the values in the Consortium’s X11R5 and X11R6 implementations. Characters drawn with the XIMReverse highlight should be drawn by swapping the foreground and background colors used to draw normal, unhighlighted characters. Characters drawn with the XIMUnderline highlight should be underlined. Characters drawn with the XIMHighlight, XIMPrimary, XIMSecondary, and XIMTertiary highlights should be drawn in some unique manner that must be different from XIMReverse and XIMUnderline. The values for XIMPrimary, XIMSecondary, and XIMTertiary were incorrectly defined in the R5 specification. The X Consortium's X11R5 implementation correctly implemented the values for these highlights. The value of these highlights has been corrected in this specification to agree with the values in the Consortium's X11R5 and X11R6 implementations. Preedit Caret Callback An input method may have its own navigation keys to allow the user to move the text insertion point in the preedit area (for example, to move backward or forward). Consequently, input method needs to indicate to the client that it should move the text insertion point. It then calls the PreeditCaretCallback. PreeditCaretCallback void PreeditCaretCallback XIC ic XPointer client_data XIMPreeditCaretCallbackStruct *call_data ic Specifies the input context. client_data Specifies the additional client data. call_data Specifies the preedit caret information. The input method will trigger PreeditCaretCallback to move the text insertion point during preedit. The call_data argument contains a pointer to an XIMPreeditCaretCallbackStruct structure, which indicates where the caret should be moved. The callback must move the insertion point to its new location and return, in field position, the new offset value from the initial position. The XIMPreeditCaretCallbackStruct structure is defined as follows: XIMPreeditCaretCallbackStruct typedef struct _XIMPreeditCaretCallbackStruct { int position; /* Caret offset within preedit string */ XIMCaretDirection direction; /* Caret moves direction */ XIMCaretStyle style; /* Feedback of the caret */ } XIMPreeditCaretCallbackStruct; The XIMCaretStyle structure is defined as follows: XIMCaretStyle typedef enum { XIMIsInvisible, /* Disable caret feedback */ XIMIsPrimary, /* UI defined caret feedback */ XIMIsSecondary, /* UI defined caret feedback */ } XIMCaretStyle; The XIMCaretDirection structure is defined as follows: XIMCaretDirection typedef enum { XIMForwardChar, XIMBackwardChar, XIMForwardWord, XIMBackwardWord, XIMCaretUp, XIMCaretDown, XIMNextLine, XIMPreviousLine, XIMLineStart, XIMLineEnd, XIMAbsolutePosition, XIMDontChange, } XIMCaretDirection; These values are defined as follows: XIMForwardChar XIMBackwardChar XIMForwardWord XIMBackwardWord XIMCaretUp XIMCaretDown XIMForwardChar Move the caret forward one character position. XIMBackwardChar Move the caret backward one character position. XIMForwardWord Move the caret forward one word. XIMBackwardWord Move the caret backward one word. XIMCaretUp Move the caret up one line keeping the current horizontal offset. XIMCaretDown Move the caret down one line keeping the current horizontal offset. XIMPreviousLine Move the caret to the beginning of the previous line. XIMNextLine Move the caret to the beginning of the next line. XIMLineStart Move the caret to the beginning of the current display line that contains the caret. XIMLineEnd Move the caret to the end of the current display line that contains the caret. XIMAbsolutePosition The callback must move to the location specified by the position field of the callback data, indicated in characters, starting from the beginning of the preedit text. Hence, a value of zero means move back to the beginning of the preedit text. XIMDontChange The caret position does not change. XIMNextLine XIMPreviousLine XIMLineStart XIMLineEnd XIMAbsolutePosition XIMDontChange Status Callbacks An input method may communicate changes in the status of an input context (for example, created, destroyed, or focus changes) with three status callbacks: StatusStartCallback, StatusDoneCallback, and StatusDrawCallback. When the input context is created or gains focus, the input method calls the StatusStartCallback callback. StatusStartCallback void StatusStartCallback XIC ic XPointer client_data XPointer call_data ic Specifies the input context. client_data Specifies the additional client data. call_data Not used for this callback and always passed as NULL. The callback should initialize appropriate data for displaying status and for responding to StatusDrawCallback calls. Once StatusStartCallback is called, it will not be called again before StatusDoneCallback has been called. When an input context is destroyed or when it loses focus, the input method calls StatusDoneCallback. StatusDoneCallback void StatusDoneCallback XIC ic XPointer client_data XPointer call_data ic Specifies the input context. client_data Specifies the additional client data. call_data Not used for this callback and always passed as NULL. The callback may release any data allocated on StatusStart. When an input context status has to be updated, the input method calls StatusDrawCallback. StatusDrawCallback void StatusDrawCallback XIC ic XPointer client_data XIMStatusDrawCallbackStruct *call_data ic Specifies the input context. client_data Specifies the additional client data. call_data Specifies the status drawing information. The callback should update the status area by either drawing a string or imaging a bitmap in the status area. The XIMStatusDataType and XIMStatusDrawCallbackStruct structures are defined as follows: XIMStatusDataType XIMStatusDrawCallbackStruct typedef enum { XIMTextType, XIMBitmapType, } XIMStatusDataType; typedef struct _XIMStatusDrawCallbackStruct { XIMStatusDataType type; union { XIMText *text; Pixmap bitmap; } data; } XIMStatusDrawCallbackStruct; The feedback styles XIMVisibleToForward, XIMVisibleToBackword, and XIMVisibleToCenter are not relevant and will not appear in the XIMFeedback element of the XIMText structure. Event Filtering Xlib provides the ability for an input method to register a filter internal to Xlib. This filter is called by a client (or toolkit) by calling after calling . Any client that uses the XIM interface should call to allow input methods to process their events without knowledge of the client's dispatching mechanism. A client's user interface policy may determine the priority of event filters with respect to other event-handling mechanisms (for example, modal grabs). Clients may not know how many filters there are, if any, and what they do. They may only know if an event has been filtered on return of . Clients should discard filtered events. To filter an event, use . XFilterEvent Bool XFilterEvent XEvent *event Window w event Specifies the event to filter. w Specifies the window for which the filter is to be applied. If the window argument is None, applies the filter to the window specified in the XEvent structure. The window argument is provided so that layers above Xlib that do event redirection can indicate to which window an event has been redirected. If returns True, then some input method has filtered the event, and the client should discard the event. If returns False, then the client should continue processing the event. If a grab has occurred in the client and returns True, the client should ungrab the keyboard. Getting Keyboard Input To get composed input from an input method, use or . XmbLookupString XwcLookupString int XmbLookupString XIC ic XKeyPressedEvent *event char *buffer_return int bytes_buffer KeySym *keysym_return Status *status_return int XwcLookupString XIC ic XKeyPressedEvent *event wchar_t *buffer_return int wchars_buffer KeySym *keysym_return Status *status_return ic Specifies the input context. event Specifies the key event to be used. buffer_return Returns a multibyte string or wide character string (if any) from the input method. bytes_buffer wchars_buffer Specifies space available in the return buffer. keysym_return Returns the KeySym computed from the event if this argument is not NULL. status_return Returns a value indicating what kind of data is returned. The and functions return the string from the input method specified in the buffer_return argument. If no string is returned, the buffer_return argument is unchanged. The KeySym into which the KeyCode from the event was mapped is returned in the keysym_return argument if it is non-NULL and the status_return argument indicates that a KeySym was returned. If both a string and a KeySym are returned, the KeySym value does not necessarily correspond to the string returned. returns the length of the string in bytes, and returns the length of the string in characters. Both and return text in the encoding of the locale bound to the input method of the specified input context. Each string returned by and begins in the initial state of the encoding of the locale (if the encoding of the locale is state-dependent). To insure proper input processing, it is essential that the client pass only KeyPress events to and . Their behavior when a client passes a KeyRelease event is undefined. Clients should check the status_return argument before using the other returned values. These two functions both return a value to status_return that indicates what has been returned in the other arguments. The possible values returned are: XBufferOverflow The input string to be returned is too large for the supplied buffer_return. The required size ( in bytes; in characters) is returned as the value of the function, and the contents of buffer_return and keysym_return are not modified. The client should recall the function with the same event and a buffer of adequate size to obtain the string. XLookupNone No consistent input has been composed so far. The contents of buffer_return and keysym_return are not modified, and the function returns zero. XLookupChars Some input characters have been composed. They are placed in the buffer_return argument, and the string length is returned as the value of the function. The string is encoded in the locale bound to the input context. The content of the keysym_return argument is not modified. XLookupKeySym A KeySym has been returned instead of a string and is returned in keysym_return. The content of the buffer_return argument is not modified, and the function returns zero. XLookupBoth Both a KeySym and a string are returned; XLookupChars and XLookupKeySym occur simultaneously. It does not make any difference if the input context passed as an argument to and is the one currently in possession of the focus or not. Input may have been composed within an input context before it lost the focus, and that input may be returned on subsequent calls to or even though it does not have any more keyboard focus. Input Method Conventions The input method architecture is transparent to the client. However, clients should respect a number of conventions in order to work properly. Clients must also be aware of possible effects of synchronization between input method and library in the case of a remote input server. Client Conventions A well-behaved client (or toolkit) should first query the input method style. If the client cannot satisfy the requirements of the supported styles (in terms of geometry management or callbacks), it should negotiate with the user continuation of the program or raise an exception or error of some sort. Synchronization Conventions A KeyPress event with a KeyCode of zero is used exclusively as a signal that an input method has composed input that can be returned by or . No other use is made of a KeyPress event with KeyCode of zero. Such an event may be generated by either a front-end or a back-end input method in an implementation-dependent manner. Some possible ways to generate this event include: A synthetic event sent by an input method server An artificial event created by a input method filter and pushed onto a client's event queue A KeyPress event whose KeyCode value is modified by an input method filter When callback support is specified by the client, input methods will not take action unless they explicitly called back the client and obtained no response (the callback is not specified or returned invalid data). String Constants The following symbols for string constants are defined in <X11/Xlib.h>. Although they are shown here with particular macro definitions, they may be implemented as macros, as global symbols, or as a mixture of the two. The string pointer value itself is not significant; clients must not assume that inequality of two values implies inequality of the actual string data. #define XNVaNestedList "XNVaNestedList" #define XNSeparatorofNestedList "separatorofNestedList" #define XNQueryInputStyle "queryInputStyle" #define XNClientWindow "clientWindow" #define XNInputStyle "inputStyle" #define XNFocusWindow "focusWindow" #define XNResourceName "resourceName" #define XNResourceClass "resourceClass" #define XNGeometryCallback "geometryCallback" #define XNDestroyCallback "destroyCallback" #define XNFilterEvents "filterEvents" #define XNPreeditStartCallback "preeditStartCallback" #define XNPreeditDoneCallback "preeditDoneCallback" #define XNPreeditDrawCallback "preeditDrawCallback" #define XNPreeditCaretCallback "preeditCaretCallback" #define XNPreeditStateNotifyCallback "preeditStateNotifyCallback" #define XNPreeditAttributes "preeditAttributes" #define XNStatusStartCallback "statusStartCallback" #define XNStatusDoneCallback "statusDoneCallback" #define XNStatusDrawCallback "statusDrawCallback" #define XNStatusAttributes "statusAttributes" #define XNArea "area" #define XNAreaNeeded "areaNeeded" #define XNSpotLocation "spotLocation" #define XNColormap "colorMap" #define XNStdColormap "stdColorMap" #define XNForeground "foreground" #define XNBackground "background" #define XNBackgroundPixmap "backgroundPixmap" #define XNFontSet "fontSet" #define XNLineSpace "lineSpace" #define XNCursor "cursor" #define XNQueryIMValuesList "queryIMValuesList" #define XNQueryICValuesList "queryICValuesList" #define XNStringConversionCallback "stringConversionCallback" #define XNStringConversion "stringConversion" #define XNResetState "resetState" #define XNHotKey "hotkey" #define XNHotKeyState "hotkeyState" #define XNPreeditState "preeditState" #define XNVisiblePosition "visiblePosition" #define XNR6PreeditCallbackBehavior "r6PreeditCallback" #define XNRequiredCharSet "requiredCharSet" #define XNQueryOrientation "queryOrientation" #define XNDirectionalDependentDrawing "directionalDependentDrawing" #define XNContextualDrawing "contextualDrawing" #define XNBaseFontName "baseFontName" #define XNMissingCharSet "missingCharSet" #define XNDefaultString "defaultString" #define XNOrientation "orientation" #define XNFontInfo "fontInfo" #define XNOMAutomatic "omAutomatic" a> returns the length of the string in bytes, and returns the length of the string in characters. Both Inter-Client Communication Functions The Inter-Client Communication Conventions Manual, hereafter referred to as the ICCCM, details the X Consortium approved conventions that govern inter-client communications. These conventions ensure peer-to-peer client cooperation in the use of selections, cut buffers, and shared resources as well as client cooperation with window and session managers. For further information, see the Inter-Client Communication Conventions Manual. Xlib provides a number of standard properties and programming interfaces that are ICCCM compliant. The predefined atoms for some of these properties are defined in the <X11/Xatom.h> header file, where to avoid name conflicts with user symbols their #define name has an XA_ prefix. For further information about atoms and properties, see section 4.3. Xlib’s selection and cut buffer mechanisms provide the primary programming interfaces by which peer client applications communicate with each other (see sections 4.5 and 16.6). The functions discussed in this chapter provide the primary programming interfaces by which client applications communicate with their window and session managers as well as share standard colormaps. The standard properties that are of special interest for communicating with window and session managers are: Name Type Format Description WM_CLASS STRING 8 Set by application programs to allow window and session managers to obtain the application’s resources from the resource database. WM_CLIENT_MACHINE TEXT The string name of the machine on which the client application is running. WM_COLORMAP_WINDOWS WINDOWS 32 The list of window IDs that may need a different colormap from that of their top-level window. WM_COMMAND TEXT The command and arguments, null separated, used to invoke the application. WM_HINTS WM_HINTS 32 Additional hints set by the client for use by the window manager. The C type of this property is XWMHints. WM_ICON_NAME TEXT The name to be used in an icon. WM_ICON_SIZE WM_ICON_SIZE 32 The window manager may set this property on the root window to specify the icon sizes it supports. The C type of this property is XIconSize. WM_NAME TEXT The name of the application. WM_NORMAL_HINTS WM_NORMAL_HINTS 32 Size hints for a window in its normal state. The C type of this property is XSizeHints. WM_PROTOCOLS ATOM 32 List of atoms that identify the communications protocols between the client and window manager in which the client is willing to participate. WM_STATE WM_STATE 32 Intended for communication between window and session managers only. WM_TRANSIENT_FOR WINDOW 32 Set by application programs to indicate to the window manager that a transient top-level window, such as a dialog box. The remainder of this chapter discusses: Client to window manager communication Client to session manager communication Standard colormaps Client to Window Manager Communication This section discusses how to: Manipulate top-level windows Convert string lists Set and read text properties Set and read the WM_NAME property Set and read the WM_ICON_NAME property Set and read the WM_HINTS property Set and read the WM_NORMAL_HINTS property Set and read the WM_CLASS property Set and read the WM_TRANSIENT_FOR property Set and read the WM_PROTOCOLS property Set and read the WM_COLORMAP_WINDOWS property Set and read the WM_ICON_SIZE property Use window manager convenience functions Manipulating Top-Level Windows Xlib provides functions that you can use to change the visibility or size of top-level windows (that is, those that were created as children of the root window). Note that the subwindows that you create are ignored by window managers. Therefore, you should use the basic window functions described in chapter 3 to manipulate your application's subwindows. To request that a top-level window be iconified, use . XIconifyWindow Status XIconifyWindow Display *display Window w int screen_number display Specifies the connection to the X server. w Specifies the window. screen_number Specifies the appropriate screen number on the host server. The function sends a WM_CHANGE_STATE ClientMessage event with a format of 32 and a first data element of IconicState (as described in section 4.1.4 of the Inter-Client Communication Conventions Manual) and a window of w to the root window of the specified screen with an event mask set to SubstructureNotifyMask | SubstructureRedirectMask. Window managers may elect to receive this message and if the window is in its normal state, may treat it as a request to change the window's state from normal to iconic. If the WM_CHANGE_STATE property cannot be interned, does not send a message and returns a zero status. It returns a nonzero status if the client message is sent successfully; otherwise, it returns a zero status. To request that a top-level window be withdrawn, use . XWithdrawWindow Status XWithdrawWindow Display *display Window w int screen_number display Specifies the connection to the X server. w Specifies the window. screen_number Specifies the appropriate screen number on the host server. The function unmaps the specified window and sends a synthetic UnmapNotify event to the root window of the specified screen. Window managers may elect to receive this message and may treat it as a request to change the window's state to withdrawn. When a window is in the withdrawn state, neither its normal nor its iconic representations is visible. It returns a nonzero status if the UnmapNotify event is successfully sent; otherwise, it returns a zero status. can generate a BadWindow error. To request that a top-level window be reconfigured, use . XReconfigureWMWindow Status XReconfigureWMWindow Display *display Window w int screen_number unsigned int value_mask XWindowChanges *values display Specifies the connection to the X server. w Specifies the window. screen_number Specifies the appropriate screen number on the host server. value_mask Specifies which values are to be set using information in the values structure. This mask is the bitwise inclusive OR of the valid configure window values bits. values Specifies the XWindowChanges structure. The function issues a ConfigureWindow request on the specified top-level window. If the stacking mode is changed and the request fails with a BadMatch error, the error is trapped by Xlib and a synthetic ConfigureRequestEvent containing the same configuration parameters is sent to the root of the specified window. Window managers may elect to receive this event and treat it as a request to reconfigure the indicated window. It returns a nonzero status if the request or event is successfully sent; otherwise, it returns a zero status. can generate BadValue and BadWindow errors. Converting String Lists Many of the text properties allow a variety of types and formats. Because the data stored in these properties are not simple null-terminated strings, an XTextProperty structure is used to describe the encoding, type, and length of the text as well as its value. The XTextProperty structure contains: XTextProperty typedef struct { unsigned char *value; /* property data */ Atom encoding; /* type of property */ int format; /* 8, 16, or 32 */ unsigned long nitems; /* number of items in value */ } XTextProperty; Xlib provides functions to convert localized text to or from encodings that support the inter-client communication conventions for text. In addition, functions are provided for converting between lists of pointers to character strings and text properties in the STRING encoding. The functions for localized text return a signed integer error status that encodes Success as zero, specific error conditions as negative numbers, and partial conversion as a count of unconvertible characters. #define #XNoMemory -1 #define #XLocaleNotSupported -2 #define #XConverterNotFound -3 typedef enum { XStringStyle, /* STRING */ XCompoundTextStyle, /* COMPOUND_TEXT */ XTextStyle, /* text in owner's encoding (current locale) */ XStdICCTextStyle /* STRING, else COMPOUND_TEXT */ } XICCEncodingStyle; To convert a list of text strings to an XTextProperty structure, use or . XmbTextListToTextProperty XwcTextListToTextProperty int XmbTextListToTextProperty Display *display char **list int count XICCEncodingStyle style XTextProperty *text_prop_return int XwcTextListToTextProperty Display *display wchar_t **list int count XICCEncodingStyle style XTextProperty *text_prop_return display Specifies the connection to the X server. list Specifies a list of null-terminated character strings. count Specifies the number of strings specified. style Specifies the manner in which the property is encoded. text_prop_return Returns the XTextProperty structure. The and functions set the specified XTextProperty value to a set of null-separated elements representing the concatenation of the specified list of null-terminated text strings. A final terminating null is stored at the end of the value field of text_prop_return but is not included in the nitems member. The functions set the encoding field of text_prop_return to an Atom for the specified display naming the encoding determined by the specified style and convert the specified text list to this encoding for storage in the text_prop_return value field. If the style XStringStyle or XCompoundTextStyle is specified, this encoding is ``STRING'' or ``COMPOUND_TEXT'', respectively. If the style XTextStyle is specified, this encoding is the encoding of the current locale. If the style XStdICCTextStyle is specified, this encoding is ``STRING'' if the text is fully convertible to STRING, else ``COMPOUND_TEXT''. If insufficient memory is available for the new value string, the functions return XNoMemory. If the current locale is not supported, the functions return XLocaleNotSupported. In both of these error cases, the functions do not set text_prop_return. To determine if the functions are guaranteed not to return XLocaleNotSupported, use XSupportsLocale. If the supplied text is not fully convertible to the specified encoding, the functions return the number of unconvertible characters. Each unconvertible character is converted to an implementation-defined and encoding-specific default string. Otherwise, the functions return Success. Note that full convertibility to all styles except XStringStyle is guaranteed. To free the storage for the value field, use . To obtain a list of text strings from an XTextProperty structure, use or . XmbTextPropertyToTextList XwcTextPropertyToTextList int XmbTextPropertyToTextList Display *display XTextProperty *text_prop char ***list_return int *count_return int XwcTextPropertyToTextList Display *display XTextProperty *text_prop wchar_t ***list_return int *count_return display Specifies the connection to the X server. text_prop Specifies the XTextProperty structure to be used. list_return Returns a list of null-terminated character strings. count_return Returns the number of strings. The and functions return a list of text strings in the current locale representing the null-separated elements of the specified XTextProperty structure. The data in text_prop must be format 8. Multiple elements of the property (for example, the strings in a disjoint text selection) are separated by a null byte. The contents of the property are not required to be null-terminated; any terminating null should not be included in text_prop.nitems. If insufficient memory is available for the list and its elements, and return XNoMemory. If the current locale is not supported, the functions return XLocaleNotSupported. Otherwise, if the encoding field of text_prop is not convertible to the encoding of the current locale, the functions return XConverterNotFound. For supported locales, existence of a converter from COMPOUND_TEXT, STRING or the encoding of the current locale is guaranteed if XSupportsLocale returns True for the current locale (but the actual text may contain unconvertible characters). Conversion of other encodings is implementation-dependent. In all of these error cases, the functions do not set any return values. Otherwise, and return the list of null-terminated text strings to list_return and the number of text strings to count_return. If the value field of text_prop is not fully convertible to the encoding of the current locale, the functions return the number of unconvertible characters. Each unconvertible character is converted to a string in the current locale that is specific to the current locale. To obtain the value of this string, use XDefaultString. Otherwise, and return Success. To free the storage for the list and its contents returned by , use . To free the storage for the list and its contents returned by , use . To free the in-memory data associated with the specified wide character string list, use . XwcFreeStringList void XwcFreeStringList wchar_t **list list Specifies the list of strings to be freed. The function frees memory allocated by . To obtain the default string for text conversion in the current locale, use char *XDefaultString() The XDefaultString function returns the default string used by Xlib for text conversion (for example, in ). The default string is the string in the current locale that is output when an unconvertible character is found during text conversion. If the string returned by XDefaultString is the empty string (""), no character is output in the converted text. XDefaultString does not return NULL. The string returned by XDefaultString is independent of the default string for text drawing; see to obtain the default string for an XFontSet. The behavior when an invalid codepoint is supplied to any Xlib function is undefined. The returned string is null-terminated. It is owned by Xlib and should not be modified or freed by the client. It may be freed after the current locale is changed. Until freed, it will not be modified by Xlib. To set the specified list of strings in the STRING encoding to a XTextProperty structure, use . XStringListToTextProperty Status XStringListToTextProperty char **list int count XTextProperty *text_prop_return list Specifies a list of null-terminated character strings. count Specifies the number of strings. text_prop_return Returns the XTextProperty structure. The function sets the specified XTextProperty to be of type STRING (format 8) with a value representing the concatenation of the specified list of null-separated character strings. An extra null byte (which is not included in the nitems member) is stored at the end of the value field of text_prop_return. The strings are assumed (without verification) to be in the STRING encoding. If insufficient memory is available for the new value string, does not set any fields in the XTextProperty structure and returns a zero status. Otherwise, it returns a nonzero status. To free the storage for the value field, use . To obtain a list of strings from a specified XTextProperty structure in the STRING encoding, use . XTextPropertyToStringList Status XTextPropertyToStringList XTextProperty *text_prop char ***list_return int *count_return text_prop Specifies the XTextProperty structure to be used. list_return Returns a list of null-terminated character strings. count_return Returns the number of strings. The function returns a list of strings representing the null-separated elements of the specified XTextProperty structure. The data in text_prop must be of type STRING and format 8. Multiple elements of the property (for example, the strings in a disjoint text selection) are separated by NULL (encoding 0). The contents of the property are not null-terminated. If insufficient memory is available for the list and its elements, sets no return values and returns a zero status. Otherwise, it returns a nonzero status. To free the storage for the list and its contents, use . To free the in-memory data associated with the specified string list, use . XFreeStringList void XFreeStringList char **list list Specifies the list of strings to be freed. The function releases memory allocated by and and the missing charset list allocated by . Setting and Reading Text Properties Xlib provides two functions that you can use to set and read the text properties for a given window. You can use these functions to set and read those properties of type TEXT (WM_NAME, WM_ICON_NAME, WM_COMMAND, and WM_CLIENT_MACHINE). In addition, Xlib provides separate convenience functions that you can use to set each of these properties. For further information about these convenience functions, see sections 14.1.4, 14.1.5, 14.2.1, and 14.2.2, respectively. To set one of a window's text properties, use . XSetTextProperty void XSetTextProperty Display *display Window w XTextProperty *text_prop Atom property display Specifies the connection to the X server. w Specifies the window. text_prop Specifies the XTextProperty structure to be used. property Specifies the property name. The function replaces the existing specified property for the named window with the data, type, format, and number of items determined by the value field, the encoding field, the format field, and the nitems field, respectively, of the specified XTextProperty structure. If the property does not already exist, sets it for the specified window. can generate BadAlloc, BadAtom, BadValue, and BadWindow errors. To read one of a window's text properties, use . XGetTextProperty Status XGetTextProperty Display *display Window w XTextProperty *text_prop_return Atom property display Specifies the connection to the X server. w Specifies the window. text_prop_return Returns the XTextProperty structure. property Specifies the property name. The function reads the specified property from the window and stores the data in the returned XTextProperty structure. It stores the data in the value field, the type of the data in the encoding field, the format of the data in the format field, and the number of items of data in the nitems field. An extra byte containing null (which is not included in the nitems member) is stored at the end of the value field of text_prop_return. The particular interpretation of the property's encoding and data as text is left to the calling application. If the specified property does not exist on the window, sets the value field to NULL, the encoding field to None, the format field to zero, and the nitems field to zero. If it was able to read and store the data in the XTextProperty structure, returns a nonzero status; otherwise, it returns a zero status. can generate BadAtom and BadWindow errors. Setting and Reading the WM_NAME Property Xlib provides convenience functions that you can use to set and read the WM_NAME property for a given window. To set a window's WM_NAME property with the supplied convenience function, use . XSetWMName void XSetWMName Display *display Window w XTextProperty *text_prop display Specifies the connection to the X server. w Specifies the window. text_prop Specifies the XTextProperty structure to be used. The convenience function calls to set the WM_NAME property. To read a window's WM_NAME property with the supplied convenience function, use . XGetWMName Status XGetWMName Display *display Window w XTextProperty *text_prop_return display Specifies the connection to the X server. w Specifies the window. text_prop_return Returns the XTextProperty structure. The convenience function calls to obtain the WM_NAME property. It returns a nonzero status on success; otherwise, it returns a zero status. The following two functions have been superseded by and , respectively. You can use these additional convenience functions for window names that are encoded as STRING properties. To assign a name to a window, use . Windowname XStoreName XStoreName Display *display Window w char *window_name display Specifies the connection to the X server. w Specifies the window. window_name Specifies the window name, which should be a null-terminated string. The function assigns the name passed to window_name to the specified window. A window manager can display the window name in some prominent place, such as the title bar, to allow users to identify windows easily. Some window managers may display a window's name in the window's icon, although they are encouraged to use the window's icon name if one is provided by the application. If the string is not in the Host Portable Character Encoding, the result is implementation-dependent. can generate BadAlloc and BadWindow errors. To get the name of a window, use . XFetchName Status XFetchName Display *display Window w char **window_name_return display Specifies the connection to the X server. w Specifies the window. window_name_return Returns the window name, which is a null-terminated string. The function returns the name of the specified window. If it succeeds, it returns a nonzero status; otherwise, no name has been set for the window, and it returns zero. If the WM_NAME property has not been set for this window, sets window_name_return to NULL. If the data returned by the server is in the Latin Portable Character Encoding, then the returned string is in the Host Portable Character Encoding. Otherwise, the result is implementation-dependent. When finished with it, a client must free the window name string using . can generate a BadWindow error. Setting and Reading the WM_ICON_NAME Property Xlib provides convenience functions that you can use to set and read the WM_ICON_NAME property for a given window. To set a window's WM_ICON_NAME property, use . XSetWMIconName void XSetWMIconName Display *display Window w XTextProperty *text_prop display Specifies the connection to the X server. w Specifies the window. text_prop Specifies the XTextProperty structure to be used. The convenience function calls to set the WM_ICON_NAME property. To read a window's WM_ICON_NAME property, use . XGetWMIconName Status XGetWMIconName Display *display Window w XTextProperty *text_prop_return display Specifies the connection to the X server. w Specifies the window. text_prop_return Returns the XTextProperty structure. The convenience function calls to obtain the WM_ICON_NAME property. It returns a nonzero status on success; otherwise, it returns a zero status. The next two functions have been superseded by and , respectively. You can use these additional convenience functions for window names that are encoded as STRING properties. To set the name to be displayed in a window's icon, use . Windowicon name XSetIconName XSetIconName Display *display Window w char *icon_name display Specifies the connection to the X server. w Specifies the window. icon_name Specifies the icon name, which should be a null-terminated string. If the string is not in the Host Portable Character Encoding, the result is implementation-dependent. can generate BadAlloc and BadWindow errors. To get the name a window wants displayed in its icon, use . XGetIconName Status XGetIconName Display *display Window w char **icon_name_return display Specifies the connection to the X server. w Specifies the window. icon_name_return Returns the window's icon name, which is a null-terminated string. The function returns the name to be displayed in the specified window's icon. If it succeeds, it returns a nonzero status; otherwise, if no icon name has been set for the window, it returns zero. If you never assigned a name to the window, sets icon_name_return to NULL. If the data returned by the server is in the Latin Portable Character Encoding, then the returned string is in the Host Portable Character Encoding. Otherwise, the result is implementation-dependent. When finished with it, a client must free the icon name string using . can generate a BadWindow error. Setting and Reading the WM_HINTS Property Xlib provides functions that you can use to set and read the WM_HINTS property for a given window. These functions use the flags and the XWMHints structure, as defined in the <X11/Xutil.h> X11/Xutil.h Files<X11/Xutil.h> Headers<X11/Xutil.h> header file. To allocate an XWMHints structure, use XAllocWMHints. XWMHints *XAllocWMHints() The XAllocWMHints function allocates and returns a pointer to an XWMHints structure. Note that all fields in the XWMHints structure are initially set to zero. If insufficient memory is available, XAllocWMHints returns NULL. To free the memory allocated to this structure, use . The XWMHints structure contains: /* Window manager hints mask bits */ #define InputHint (1L<<0) #define StateHint (1L<<1) #define IconPixmapHint (1L<<2) #define IconWindowHint (1L<<3) #define IconPositionHint (1L<<4) #define IconMaskHint (1L<<5) #define WindowGroupHint (1L<<6) #define UrgencyHint (1L<<8) #define AllHints (InputHint|StateHint|IconPixmapHint| IconWIndowHint|IconPositionHint| IconMaskHint|WindowGroupHint) /* Values */ typedef struct { long flags; /* marks which fields in this structure are defined */ Bool input; /* does this application rely on the window manager to get keyboard input? */ int initial_state; /* see below */ Pixmap icon_pixmap; /* pixmap to be used as icon */ Window icon_window; /* window to be used as icon */ int icon_x, icon_y; /* initial position of icon */ Pixmap icon_mask; /* pixmap to be used as mask for icon_pixmap */ XID window_group; /* id of related window group */ /* this structure may be extended in the future */ } XWMHints; The input member is used to communicate to the window manager the input focus model used by the application. Applications that expect input but never explicitly set focus to any of their subwindows (that is, use the push model of focus management), such as X Version 10 style applications that use real-estate driven focus, should set this member to True. Similarly, applications that set input focus to their subwindows only when it is given to their top-level window by a window manager should also set this member to True. Applications that manage their own input focus by explicitly setting focus to one of their subwindows whenever they want keyboard input (that is, use the pull model of focus management) should set this member to False. Applications that never expect any keyboard input also should set this member to False. Pull model window managers should make it possible for push model applications to get input by setting input focus to the top-level windows of applications whose input member is True. Push model window managers should make sure that pull model applications do not break them by resetting input focus to PointerRoot when it is appropriate (for example, whenever an application whose input member is False sets input focus to one of its subwindows). The definitions for the initial_state flag are: #define WithdrawnState 0 #define NormalState 1 /* most applications start this way */ #define IconicState 3 /* application wants to start as an icon */ The icon_mask specifies which pixels of the icon_pixmap should be used as the icon. This allows for nonrectangular icons. Both icon_pixmap and icon_mask must be bitmaps. The icon_window lets an application provide a window for use as an icon for window managers that support such use. The window_group lets you specify that this window belongs to a group of other windows. For example, if a single application manipulates multiple top-level windows, this allows you to provide enough information that a window manager can iconify all of the windows rather than just the one window. The UrgencyHint flag, if set in the flags field, indicates that the client deems the window contents to be urgent, requiring the timely response of the user. The window manager will make some effort to draw the user's attention to this window while this flag is set. The client must provide some means by which the user can cause the urgency flag to be cleared (either mitigating the condition that made the window urgent or merely shutting off the alarm) or the window to be withdrawn. To set a window's WM_HINTS property, use . XSetWMHints XSetWMHints Display *display Window w XWMHints *wmhints display Specifies the connection to the X server. w Specifies the window. wmhints Specifies the XWMHints structure to be used. The function sets the window manager hints that include icon information and location, the initial state of the window, and whether the application relies on the window manager to get keyboard input. can generate BadAlloc and BadWindow errors. To read a window's WM_HINTS property, use . XGetWMHints XWMHints *XGetWMHints Display *display Window w display Specifies the connection to the X server. w Specifies the window. The function reads the window manager hints and returns NULL if no WM_HINTS property was set on the window or returns a pointer to an XWMHints structure if it succeeds. When finished with the data, free the space used for it by calling . can generate a BadWindow error. Setting and Reading the WM_NORMAL_HINTS Property Xlib provides functions that you can use to set or read the WM_NORMAL_HINTS property for a given window. The functions use the flags and the XSizeHints structure, as defined in the <X11/Xutil.h> X11/Xutil.h Files<X11/Xutil.h> Headers<X11/Xutil.h> header file. The size of the XSizeHints structure may grow in future releases, as new components are added to support new ICCCM features. Passing statically allocated instances of this structure into Xlib may result in memory corruption when running against a future release of the library. As such, it is recommended that only dynamically allocated instances of the structure be used. To allocate an XSizeHints structure, use XAllocSizeHints. XSizeHints *XAllocSizeHints() The XAllocSizeHints function allocates and returns a pointer to an XSizeHints structure. Note that all fields in the XSizeHints structure are initially set to zero. If insufficient memory is available, XAllocSizeHints returns NULL. To free the memory allocated to this structure, use . The XSizeHints structure contains: /* Size hints mask bits */ #define USPosition (1L<<0) /* user specified x,y */ #define USSize (1L<<1) /* user specified width,height */ #define PPosition (1L<<2) /* program specified posistion */ #define PSize (1L<<3) /* program specified size */ #define PMinSize (1L<<4) /* program specified minimum size */ #define PMaxSize (1L<<5) /* program specified maximum size */ #define PResizeInc (1L<<5) /* program specified resize increments */ #define PAspect (1L<<6) /* program specified min and max aspect ratios */ #define PBaseSize (1L<<8) #define PWinGravity (1L<<9) #define PAllHints (PPosition|Psize| PMinSize|PMaxSize| PResizeInc|PAspect) /* Values */ typedef struct { long flags; /* marks which fields in this structure are defined */ int x, y; /* Obsolete */ int width, height; /* Obsolete */ int min_width, min_height; int max_width, max_height; int width_inc, height_inc; struct { int x; /* numerator */ int y; /* denominator */ } min_aspect, max_aspect; int base_width, base_height; int win_gravity; /* this structure may be extended in the future */ } XSizeHints; The x, y, width, and height members are now obsolete and are left solely for compatibility reasons. The min_width and min_height members specify the minimum window size that still allows the application to be useful. The max_width and max_height members specify the maximum window size. The width_inc and height_inc members define an arithmetic progression of sizes (minimum to maximum) into which the window prefers to be resized. The min_aspect and max_aspect members are expressed as ratios of x and y, and they allow an application to specify the range of aspect ratios it prefers. The base_width and base_height members define the desired size of the window. The window manager will interpret the position of the window and its border width to position the point of the outer rectangle of the overall window specified by the win_gravity member. The outer rectangle of the window includes any borders or decorations supplied by the window manager. In other words, if the window manager decides to place the window where the client asked, the position on the parent window's border named by the win_gravity will be placed where the client window would have been placed in the absence of a window manager. Note that use of the PAllHints macro is highly discouraged. To set a window's WM_NORMAL_HINTS property, use . XSetWMNormalHints void XSetWMNormalHints Display *display Window w XSizeHints *hints display Specifies the connection to the X server. w Specifies the window. hints Specifies the size hints for the window in its normal state. The function replaces the size hints for the WM_NORMAL_HINTS property on the specified window. If the property does not already exist, sets the size hints for the WM_NORMAL_HINTS property on the specified window. The property is stored with a type of WM_SIZE_HINTS and a format of 32. can generate BadAlloc and BadWindow errors. To read a window's WM_NORMAL_HINTS property, use . XGetWMNormalHints Status XGetWMNormalHints Display *display Window w XSizeHints *hints_return long *supplied_return display Specifies the connection to the X server. w Specifies the window. hints_return Returns the size hints for the window in its normal state. supplied_return Returns the hints that were supplied by the user. The function returns the size hints stored in the WM_NORMAL_HINTS property on the specified window. If the property is of type WM_SIZE_HINTS, is of format 32, and is long enough to contain either an old (pre-ICCCM) or new size hints structure, sets the various fields of the XSizeHints structure, sets the supplied_return argument to the list of fields that were supplied by the user (whether or not they contained defined values), and returns a nonzero status. Otherwise, it returns a zero status. If returns successfully and a pre-ICCCM size hints property is read, the supplied_return argument will contain the following bits: (USPosition|USSize|PPosition|PSize|PMinSize| PMaxSize|PResizeInc|PAspect) If the property is large enough to contain the base size and window gravity fields as well, the supplied_return argument will also contain the following bits: PBaseSize|PWinGravity can generate a BadWindow error. To set a window's WM_SIZE_HINTS property, use . XSetWMSizeHints void XSetWMSizeHints Display *display Window w XSizeHints *hints Atom property display Specifies the connection to the X server. w Specifies the window. hints Specifies the XSizeHints structure to be used. property Specifies the property name. The function replaces the size hints for the specified property on the named window. If the specified property does not already exist, sets the size hints for the specified property on the named window. The property is stored with a type of WM_SIZE_HINTS and a format of 32. To set a window's normal size hints, you can use the function. can generate BadAlloc, BadAtom, and BadWindow errors. To read a window's WM_SIZE_HINTS property, use . XGetWMSizeHints Status XGetWMSizeHints Display *display Window w XSizeHints *hints_return long *supplied_return Atom property display Specifies the connection to the X server. w Specifies the window. hints_return Returns the XSizeHints structure. supplied_return Returns the hints that were supplied by the user. property Specifies the property name. The function returns the size hints stored in the specified property on the named window. If the property is of type WM_SIZE_HINTS, is of format 32, and is long enough to contain either an old (pre-ICCCM) or new size hints structure, sets the various fields of the XSizeHints structure, sets the supplied_return argument to the list of fields that were supplied by the user (whether or not they contained defined values), and returns a nonzero status. Otherwise, it returns a zero status. To get a window's normal size hints, you can use the function. If returns successfully and a pre-ICCCM size hints property is read, the supplied_return argument will contain the following bits: (USPosition|USSize|PPosition|PSize|PMinSize| PMaxSize|PResizeInc|PAspect) If the property is large enough to contain the base size and window gravity fields as well, the supplied_return argument will also contain the following bits: PBaseSize|PWinGravity can generate BadAtom and BadWindow errors. Setting and Reading the WM_CLASS Property Xlib provides functions that you can use to set and get the WM_CLASS property for a given window. These functions use the XClassHint structure, which is defined in the <X11/Xutil.h> X11/Xutil.h Files<X11/Xutil.h> Headers<X11/Xutil.h> header file. To allocate an XClassHint structure, use XAllocClassHint. XAllocClassHint XClassHint *XAllocClassHint() The XAllocClassHint function allocates and returns a pointer to an XClassHint structure. Note that the pointer fields in the XClassHint structure are initially set to NULL. If insufficient memory is available, XAllocClassHint returns NULL. To free the memory allocated to this structure, use . The XClassHint contains: XClassHint typedef struct { char *res_name; char *res_class; } XClassHint; The res_name member contains the application name, and the res_class member contains the application class. Note that the name set in this property may differ from the name set as WM_NAME. That is, WM_NAME specifies what should be displayed in the title bar and, therefore, can contain temporal information (for example, the name of a file currently in an editor's buffer). On the other hand, the name specified as part of WM_CLASS is the formal name of the application that should be used when retrieving the application's resources from the resource database. To set a window's WM_CLASS property, use . XSetClassHint XSetClassHint Display *display Window w XClassHint *class_hints display Specifies the connection to the X server. w Specifies the window. class_hints Specifies the XClassHint structure that is to be used. The function sets the class hint for the specified window. If the strings are not in the Host Portable Character Encoding, the result is implementation-dependent. can generate BadAlloc and BadWindow errors. To read a window's WM_CLASS property, use . XGetClassHint Status XGetClassHint Display *display Window w XClassHint *class_hints_return display Specifies the connection to the X server. w Specifies the window. class_hints_return Returns the XClassHint structure. The function returns the class hint of the specified window to the members of the supplied structure. If the data returned by the server is in the Latin Portable Character Encoding, then the returned strings are in the Host Portable Character Encoding. Otherwise, the result is implementation-dependent. It returns a nonzero status on success; otherwise, it returns a zero status. To free res_name and res_class when finished with the strings, use on each individually. can generate a BadWindow error. Setting and Reading the WM_TRANSIENT_FOR Property Xlib provides functions that you can use to set and read the WM_TRANSIENT_FOR property for a given window. To set a window's WM_TRANSIENT_FOR property, use . XSetTransientForHint XSetTransientForHint Display *display Window w Window prop_window display Specifies the connection to the X server. w Specifies the window. prop_window Specifies the window that the WM_TRANSIENT_FOR property is to be set to. The function sets the WM_TRANSIENT_FOR property of the specified window to the specified prop_window. can generate BadAlloc and BadWindow errors. To read a window's WM_TRANSIENT_FOR property, use . XGetTransientForHint Status XGetTransientForHint Display *display Window w Window *prop_window_return display Specifies the connection to the X server. w Specifies the window. prop_window_return Returns the WM_TRANSIENT_FOR property of the specified window. The function returns the WM_TRANSIENT_FOR property for the specified window. It returns a nonzero status on success; otherwise, it returns a zero status. can generate a BadWindow error. Setting and Reading the WM_PROTOCOLS Property Xlib provides functions that you can use to set and read the WM_PROTOCOLS property for a given window. To set a window's WM_PROTOCOLS property, use . XSetWMProtocols Status XSetWMProtocols Display *display Window w Atom *protocols int count display Specifies the connection to the X server. w Specifies the window. protocols Specifies the list of protocols. count Specifies the number of protocols in the list. The function replaces the WM_PROTOCOLS property on the specified window with the list of atoms specified by the protocols argument. If the property does not already exist, sets the WM_PROTOCOLS property on the specified window to the list of atoms specified by the protocols argument. The property is stored with a type of ATOM and a format of 32. If it cannot intern the WM_PROTOCOLS atom, returns a zero status. Otherwise, it returns a nonzero status. can generate BadAlloc and BadWindow errors. To read a window's WM_PROTOCOLS property, use . XGetWMProtocols Status XGetWMProtocols Display *display Window w Atom **protocols_return int *count_return display Specifies the connection to the X server. w Specifies the window. protocols_return Returns the list of protocols. count_return Returns the number of protocols in the list. The function returns the list of atoms stored in the WM_PROTOCOLS property on the specified window. These atoms describe window manager protocols in which the owner of this window is willing to participate. If the property exists, is of type ATOM, is of format 32, and the atom WM_PROTOCOLS can be interned, sets the protocols_return argument to a list of atoms, sets the count_return argument to the number of elements in the list, and returns a nonzero status. Otherwise, it sets neither of the return arguments and returns a zero status. To release the list of atoms, use . can generate a BadWindow error. Setting and Reading the WM_COLORMAP_WINDOWS Property Xlib provides functions that you can use to set and read the WM_COLORMAP_WINDOWS property for a given window. To set a window's WM_COLORMAP_WINDOWS property, use . XSetWMColormapWindows Status XSetWMColormapWindows Display *display Window w Window *colormap_windows int count display Specifies the connection to the X server. w Specifies the window. colormap_windows Specifies the list of windows. count Specifies the number of windows in the list. The function replaces the WM_COLORMAP_WINDOWS property on the specified window with the list of windows specified by the colormap_windows argument. If the property does not already exist, sets the WM_COLORMAP_WINDOWS property on the specified window to the list of windows specified by the colormap_windows argument. The property is stored with a type of WINDOW and a format of 32. If it cannot intern the WM_COLORMAP_WINDOWS atom, returns a zero status. Otherwise, it returns a nonzero status. can generate BadAlloc and BadWindow errors. To read a window's WM_COLORMAP_WINDOWS property, use . XGetWMColormapWindows Status XGetWMColormapWindows Display *display Window w Window **colormap_windows_return int *count_return display Specifies the connection to the X server. w Specifies the window. colormap_windows_return Returns the list of windows. count_return Returns the number of windows in the list. The function returns the list of window identifiers stored in the WM_COLORMAP_WINDOWS property on the specified window. These identifiers indicate the colormaps that the window manager may need to install for this window. If the property exists, is of type WINDOW, is of format 32, and the atom WM_COLORMAP_WINDOWS can be interned, sets the windows_return argument to a list of window identifiers, sets the count_return argument to the number of elements in the list, and returns a nonzero status. Otherwise, it sets neither of the return arguments and returns a zero status. To release the list of window identifiers, use . can generate a BadWindow error. Setting and Reading the WM_ICON_SIZE Property Xlib provides functions that you can use to set and read the WM_ICON_SIZE property for a given window. These functions use the XIconSize XIconSize structure, which is defined in the <X11/Xutil.h> X11/Xutil.h Files<X11/Xutil.h> Headers<X11/Xutil.h> header file. To allocate an XIconSize structure, use XAllocIconSize. XIconSize *XAllocIconSize() The XAllocIconSize function allocates and returns a pointer to an XIconSize structure. Note that all fields in the XIconSize structure are initially set to zero. If insufficient memory is available, XAllocIconSize returns NULL. To free the memory allocated to this structure, use . The XIconSize structure contains: XIconSize typedef struct { int min_width, min_height; int max_width, max_height; int width_inc, height_inc; } XIconSize; The width_inc and height_inc members define an arithmetic progression of sizes (minimum to maximum) that represent the supported icon sizes. To set a window's WM_ICON_SIZE property, use . XSetIconSizes XSetIconSizes Display *display Window w XIconSize *size_list int count display Specifies the connection to the X server. w Specifies the window. size_list Specifies the size list. count Specifies the number of items in the size list. The function is used only by window managers to set the supported icon sizes. can generate BadAlloc and BadWindow errors. To read a window's WM_ICON_SIZE property, use . XGetIconSizes Status XGetIconSizes Display *display Window w XIconSize **size_list_return int *count_return display Specifies the connection to the X server. w Specifies the window. size_list_return Returns the size list. count_return Returns the number of items in the size list. The function returns zero if a window manager has not set icon sizes; otherwise, it returns nonzero. should be called by an application that wants to find out what icon sizes would be most appreciated by the window manager under which the application is running. The application should then use to supply the window manager with an icon pixmap or window in one of the supported sizes. To free the data allocated in size_list_return, use . can generate a BadWindow error. Using Window Manager Convenience Functions The function stores the standard set of window manager properties, with text properties in standard encodings for internationalized text communication. The standard window manager properties for a given window are WM_NAME, WM_ICON_NAME, WM_HINTS, WM_NORMAL_HINTS, WM_CLASS, WM_COMMAND, WM_CLIENT_MACHINE, and WM_LOCALE_NAME. XmbSetWMProperties void XmbSetWMProperties Display *display Window w char *window_name char *icon_name char *argv[] int argc XSizeHints *normal_hints XWMHints *wm_hints XClassHint *class_hints display Specifies the connection to the X server. w Specifies the window. window_name Specifies the window name, which should be a null-terminated string. icon_name Specifies the icon name, which should be a null-terminated string. argv Specifies the application's argument list. argc Specifies the number of arguments. hints Specifies the size hints for the window in its normal state. wm_hints Specifies the XWMHints structure to be used. class_hints Specifies the XClassHint structure to be used. The convenience function provides a simple programming interface for setting those essential window properties that are used for communicating with other clients (particularly window and session managers). If the window_name argument is non-NULL, sets the WM_NAME property. If the icon_name argument is non-NULL, sets the WM_ICON_NAME property. The window_name and icon_name arguments are null-terminated strings in the encoding of the current locale. If the arguments can be fully converted to the STRING encoding, the properties are created with type ``STRING''; otherwise, the arguments are converted to Compound Text, and the properties are created with type ``COMPOUND_TEXT''. If the normal_hints argument is non-NULL, calls , which sets the WM_NORMAL_HINTS property (see section 14.1.7). If the wm_hints argument is non-NULL, calls , which sets the WM_HINTS property (see section 14.1.6). If the argv argument is non-NULL, sets the WM_COMMAND property from argv and argc. An argc of zero indicates a zero-length command. The hostname of the machine is stored using (see section 14.2.2). If the class_hints argument is non-NULL, sets the WM_CLASS property. If the res_name member in the XClassHint structure is set to the NULL pointer and the RESOURCE_NAME environment variable is set, the value of the environment variable is substituted for res_name. If the res_name member is NULL, the environment variable is not set, and argv and argv[0] are set, then the value of argv[0], stripped of any directory prefixes, is substituted for res_name. It is assumed that the supplied class_hints.res_name and argv, the RESOURCE_NAME environment variable, and the hostname of the machine are in the encoding of the locale announced for the LC_CTYPE category (on POSIX-compliant systems, the LC_CTYPE, else LANG environment variable). The corresponding WM_CLASS, WM_COMMAND, and WM_CLIENT_MACHINE properties are typed according to the local host locale announcer. No encoding conversion is performed prior to storage in the properties. For clients that need to process the property text in a locale, sets the WM_LOCALE_NAME property to be the name of the current locale. The name is assumed to be in the Host Portable Character Encoding and is converted to STRING for storage in the property. can generate BadAlloc and BadWindow errors. To set a window's standard window manager properties with strings in client-specified encodings, use . The standard window manager properties for a given window are WM_NAME, WM_ICON_NAME, WM_HINTS, WM_NORMAL_HINTS, WM_CLASS, WM_COMMAND, and WM_CLIENT_MACHINE. XSetWMProperties void XSetWMProperties Display *display Window w XTextProperty *window_name XTextProperty *icon_name char **argv int argc XSizeHints *normal_hints XWMHints *wm_hints XClassHint *class_hints display Specifies the connection to the X server. w Specifies the window. window_name Specifies the window name, which should be a null-terminated string. icon_name Specifies the icon name, which should be a null-terminated string. argv Specifies the application's argument list. argc Specifies the number of arguments. normal_hints Specifies the size hints for the window in its normal state. wm_hints Specifies the XWMHints structure to be used. class_hints Specifies the XClassHint structure to be used. The convenience function provides a single programming interface for setting those essential window properties that are used for communicating with other clients (particularly window and session managers). If the window_name argument is non-NULL, calls , which, in turn, sets the WM_NAME property (see section 14.1.4). If the icon_name argument is non-NULL, calls , which sets the WM_ICON_NAME property (see section 14.1.5). If the argv argument is non-NULL, calls , which sets the WM_COMMAND property (see section 14.2.1). Note that an argc of zero is allowed to indicate a zero-length command. Note also that the hostname of this machine is stored using (see section 14.2.2). If the normal_hints argument is non-NULL, calls , which sets the WM_NORMAL_HINTS property (see section 14.1.7). If the wm_hints argument is non-NULL, calls , which sets the WM_HINTS property (see section 14.1.6). If the class_hints argument is non-NULL, calls , which sets the WM_CLASS property (see section 14.1.8). If the res_name member in the XClassHint structure is set to the NULL pointer and the RESOURCE_NAME environment variable is set, then the value of the environment variable is substituted for res_name. If the res_name member is NULL, the environment variable is not set, and argv and argv[0] are set, then the value of argv[0], stripped of any directory prefixes, is substituted for res_name. can generate BadAlloc and BadWindow errors. Client to Session Manager Communication This section discusses how to: Set and read the WM_COMMAND property Set and read the WM_CLIENT_MACHINE property Setting and Reading the WM_COMMAND Property Xlib provides functions that you can use to set and read the WM_COMMAND property for a given window. To set a window's WM_COMMAND property, use . XSetCommand XSetCommand Display *display Window w char **argv int argc display Specifies the connection to the X server. w Specifies the window. argv Specifies the application's argument list. argc Specifies the number of arguments. The function sets the command and arguments used to invoke the application. (Typically, argv is the argv array of your main program.) If the strings are not in the Host Portable Character Encoding, the result is implementation-dependent. can generate BadAlloc and BadWindow errors. To read a window's WM_COMMAND property, use . XGetCommand Status XGetCommand Display *display Window w char ***argv_return int *argc_return display Specifies the connection to the X server. w Specifies the window. argv_return Returns the application's argument list. argc_return Returns the number of arguments returned. The function reads the WM_COMMAND property from the specified window and returns a string list. If the WM_COMMAND property exists, it is of type STRING and format 8. If sufficient memory can be allocated to contain the string list, fills in the argv_return and argc_return arguments and returns a nonzero status. Otherwise, it returns a zero status. If the data returned by the server is in the Latin Portable Character Encoding, then the returned strings are in the Host Portable Character Encoding. Otherwise, the result is implementation-dependent. To free the memory allocated to the string list, use . Setting and Reading the WM_CLIENT_MACHINE Property Xlib provides functions that you can use to set and read the WM_CLIENT_MACHINE property for a given window. To set a window's WM_CLIENT_MACHINE property, use . XSetWMClientMachine void XSetWMClientMachine Display *display Window w XTextProperty *text_prop display Specifies the connection to the X server. w Specifies the window. text_prop Specifies the XTextProperty structure to be used. The convenience function calls to set the WM_CLIENT_MACHINE property. To read a window's WM_CLIENT_MACHINE property, use . XGetWMClientMachine Status XGetWMClientMachine Display *display Window w XTextProperty *text_prop_return display Specifies the connection to the X server. w Specifies the window. text_prop_return Returns the XTextProperty structure. The convenience function performs an on the WM_CLIENT_MACHINE property. It returns a nonzero status on success; otherwise, it returns a zero status. Standard Colormaps Applications with color palettes, smooth-shaded drawings, or digitized images demand large numbers of colors. In addition, these applications often require an efficient mapping from color triples to pixel values that display the appropriate colors. As an example, consider a three-dimensional display program that wants to draw a smoothly shaded sphere. At each pixel in the image of the sphere, the program computes the intensity and color of light reflected back to the viewer. The result of each computation is a triple of red, green, and blue (RGB) coefficients in the range 0.0 to 1.0. To draw the sphere, the program needs a colormap that provides a large range of uniformly distributed colors. The colormap should be arranged so that the program can convert its RGB triples into pixel values very quickly, because drawing the entire sphere requires many such conversions. On many current workstations, the display is limited to 256 or fewer colors. Applications must allocate colors carefully, not only to make sure they cover the entire range they need but also to make use of as many of the available colors as possible. On a typical X display, many applications are active at once. Most workstations have only one hardware look-up table for colors, so only one application colormap can be installed at a given time. The application using the installed colormap is displayed correctly, and the other applications go technicolor and are displayed with false colors. As another example, consider a user who is running an image processing program to display earth-resources data. The image processing program needs a colormap set up with 8 reds, 8 greens, and 4 blues, for a total of 256 colors. Because some colors are already in use in the default colormap, the image processing program allocates and installs a new colormap. The user decides to alter some of the colors in the image by invoking a color palette program to mix and choose colors. The color palette program also needs a colormap with eight reds, eight greens, and four blues, so just like the image processing program, it must allocate and install a new colormap. Because only one colormap can be installed at a time, the color palette may be displayed incorrectly whenever the image processing program is active. Conversely, whenever the palette program is active, the image may be displayed incorrectly. The user can never match or compare colors in the palette and image. Contention for colormap resources can be reduced if applications with similar color needs share colormaps. The image processing program and the color palette program could share the same colormap if there existed a convention that described how the colormap was set up. Whenever either program was active, both would be displayed correctly. The standard colormap properties define a set of commonly used colormaps. Applications that share these colormaps and conventions display true colors more often and provide a better interface to the user. Standard colormaps allow applications to share commonly used color resources. This allows many applications to be displayed in true colors simultaneously, even when each application needs an entirely filled colormap. Several standard colormaps are described in this section. Usually, a window manager creates these colormaps. Applications should use the standard colormaps if they already exist. To allocate an XStandardColormap structure, use XAllocStandardColormap. XStandardColormap *XAllocStandardColormap() The XAllocStandardColormap function allocates and returns a pointer to an XStandardColormap structure. Note that all fields in the XStandardColormap structure are initially set to zero. If insufficient memory is available, XAllocStandardColormap returns NULL. To free the memory allocated to this structure, use . The XStandardColormap structure contains: /* Hints */ #define ReeaseByFreeingColormap ((XID)1L) /* Values */ typedef struct { Colormap colormap; unsigned long red_max; unsigned long red_mult; unsigned long green_max; unsigned long green_mult; unsigned long blue_max; unsigned long blue_mult; unsigned long base_pixel; VisualID visualid; XID killid; } XStandardColormap; The colormap member is the colormap created by the function. The red_max, green_max, and blue_max members give the maximum red, green, and blue values, respectively. Each color coefficient ranges from zero to its max, inclusive. For example, a common colormap allocation is 3/3/2 (3 planes for red, 3 planes for green, and 2 planes for blue). This colormap would have red_max = 7, green_max = 7, and blue_max = 3. An alternate allocation that uses only 216 colors is red_max = 5, green_max = 5, and blue_max = 5. The red_mult, green_mult, and blue_mult members give the scale factors used to compose a full pixel value. (See the discussion of the base_pixel members for further information.) For a 3/3/2 allocation, red_mult might be 32, green_mult might be 4, and blue_mult might be 1. For a 6-colors-each allocation, red_mult might be 36, green_mult might be 6, and blue_mult might be 1. The base_pixel member gives the base pixel value used to compose a full pixel value. Usually, the base_pixel is obtained from a call to the function. Given integer red, green, and blue coefficients in their appropriate ranges, one then can compute a corresponding pixel value by using the following expression: (r * red_mult + g * green_mult + b * blue_mult + base_pixel) & 0xFFFFFFFF For GrayScale colormaps, only the colormap, red_max, red_mult, and base_pixel members are defined. The other members are ignored. To compute a GrayScale pixel value, use the following expression: (gray * red_mult + base_pixel) & 0xFFFFFFFF Negative multipliers can be represented by converting the 2's complement representation of the multiplier into an unsigned long and storing the result in the appropriate _mult field. The step of masking by 0xFFFFFFFF effectively converts the resulting positive multiplier into a negative one. The masking step will take place automatically on many machine architectures, depending on the size of the integer type used to do the computation. The visualid member gives the ID number of the visual from which the colormap was created. The killid member gives a resource ID that indicates whether the cells held by this standard colormap are to be released by freeing the colormap ID or by calling the function on the indicated resource. (Note that this method is necessary for allocating out of an existing colormap.) The properties containing the XStandardColormap information have the type RGB_COLOR_MAP. The remainder of this section discusses standard colormap properties and atoms as well as how to manipulate standard colormaps. Standard Colormap Properties and Atoms Standard Colormaps Colormapsstandard Several standard colormaps are available. Each standard colormap is defined by a property, and each such property is identified by an atom. The following list names the atoms and describes the colormap associated with each one. The <X11/Xatom.h> X11/Xatom.h Files<X11/Xatom.h> Headers<X11/Xatom.h> header file contains the definitions for each of the following atoms, which are prefixed with XA_. RGB_DEFAULT_MAP This atom names a property. The value of the property is an array of XStandardColormap structures. Each entry in the array describes an RGB subset of the default color map for the Visual specified by visual_id. Some applications only need a few RGB colors and may be able to allocate them from the system default colormap. This is the ideal situation because the fewer colormaps that are active in the system the more applications are displayed with correct colors at all times. A typical allocation for the RGB_DEFAULT_MAP on 8-plane displays is 6 reds, 6 greens, and 6 blues. This gives 216 uniformly distributed colors (6 intensities of 36 different hues) and still leaves 40 elements of a 256-element colormap available for special-purpose colors for text, borders, and so on. RGB_BEST_MAP This atom names a property. The value of the property is an XStandardColormap. The property defines the best RGB colormap available on the screen. (Of course, this is a subjective evaluation.) Many image processing and three-dimensional applications need to use all available colormap cells and to distribute as many perceptually distinct colors as possible over those cells. This implies that there may be more green values available than red, as well as more green or red than blue. For an 8-plane PseudoColor visual, RGB_BEST_MAP is likely to be a 3/3/2 allocation. For a 24-plane DirectColor visual, RGB_BEST_MAP is normally an 8/8/8 allocation. RGB_RED_MAP,RGB_GREEN_MAP,RGB_BLUE_MAP These atoms name properties. The value of each property is an XStandardColormap. The properties define all-red, all-green, and all-blue colormaps, respectively. These maps are used by applications that want to make color-separated images. For example, a user might generate a full-color image on an 8-plane display both by rendering an image three times (once with high color resolution in red, once with green, and once with blue) and by multiply exposing a single frame in a camera. RGB_GRAY_MAP This atom names a property. The value of the property is an XStandardColormap. The property describes the best GrayScale colormap available on the screen. As previously mentioned, only the colormap, red_max, red_mult, and base_pixel members of the XStandardColormap structure are used for GrayScale colormaps. Setting and Obtaining Standard Colormaps Xlib provides functions that you can use to set and obtain an XStandardColormap structure. To set an XStandardColormap structure, use . XSetRGBColormaps void XSetRGBColormaps Display *display Window w XStandardColormap *std_colormap int count Atom property display Specifies the connection to the X server. w Specifies the window. std_colormap Specifies the XStandardColormap structure to be used. count Specifies the number of colormaps. property Specifies the property name. The function replaces the RGB colormap definition in the specified property on the named window. If the property does not already exist, sets the RGB colormap definition in the specified property on the named window. The property is stored with a type of RGB_COLOR_MAP and a format of 32. Note that it is the caller's responsibility to honor the ICCCM restriction that only RGB_DEFAULT_MAP contain more than one definition. The function usually is only used by window or session managers. To create a standard colormap, follow this procedure: Open a new connection to the same server. Grab the server. See if the property is on the property list of the root window for the screen. If the desired property is not present: Create a colormap (unless you are using the default colormap of the screen). Determine the color characteristics of the visual. Allocate cells in the colormap (or create it with AllocAll). Call to store appropriate color values in the colormap. Fill in the descriptive members in the XStandardColormap structure. Attach the property to the root window. Use to make the resource permanent. Ungrab the server. can generate BadAlloc, BadAtom, and BadWindow errors. To obtain the XStandardColormap structure associated with the specified property, use . XGetRGBColormaps Status XGetRGBColormaps Display *display Window w XStandardColormap **std_colormap_return int *count_return Atom property display Specifies the connection to the X server. w Specifies the window. std_colormap_return Returns the XStandardColormap structure. count_return Returns the number of colormaps. property Specifies the property name. The function returns the RGB colormap definitions stored in the specified property on the named window. If the property exists, is of type RGB_COLOR_MAP, is of format 32, and is long enough to contain a colormap definition, allocates and fills in space for the returned colormaps and returns a nonzero status. If the visualid is not present, assumes the default visual for the screen on which the window is located; if the killid is not present, None is assumed, which indicates that the resources cannot be released. Otherwise, none of the fields are set, and returns a zero status. Note that it is the caller's responsibility to honor the ICCCM restriction that only RGB_DEFAULT_MAP contain more than one definition. can generate BadAtom and BadWindow errors. on for the RGB_DEFAULT_MAP on 8-plane displays is 6 reds, 6 greens, and 6 blues. This gives 216 uniformly distributed colors (6 intensitielibX11-1.6.3/specs/libX11/Makefile.in000064401431060000012000000616561247741725500173200ustar00alancstaff00002660200006# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # Generate output formats for a single DocBook/XML with/without chapters # # Variables set by the calling Makefile: # shelfdir: the location where the docs/specs are installed. Typically $(docdir) # docbook: the main DocBook/XML file, no chapters, appendix or image files # chapters: all files pulled in by an XInclude statement and images. # # # This makefile is intended for Users Documentation and Functional Specifications. # Do not use for Developer Documentation which is not installed and does not require olink. # Refer to http://www.x.org/releases/X11R7.6/doc/xorg-docs/ReleaseNotes.html#id2584393 # for an explanation on documents classification. # VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@am__append_1 = $(docbook:.xml=.html) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TEXT_TRUE@@HAVE_XMLTO_TRUE@am__append_2 = $(docbook:.xml=.txt) @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@am__append_3 = $(docbook:.xml=.pdf) \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(docbook:.xml=.ps) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@am__append_4 = $(docbook:.xml=.html.db) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(docbook:.xml=.pdf.db) subdir = specs/libX11 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_define_dir.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__dist_shelf_DATA_DIST) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h \ $(top_builddir)/include/X11/XlibConf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__dist_shelf_DATA_DIST = libX11.xml AppA.xml AppB.xml AppC.xml \ AppD.xml CH01.xml CH02.xml CH03.xml CH04.xml CH05.xml CH06.xml \ CH07.xml CH08.xml CH09.xml CH10.xml CH11.xml CH12.xml CH13.xml \ CH14.xml CH15.xml CH16.xml credits.xml glossary.xml am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(shelfdir)" "$(DESTDIR)$(shelfdir)" DATA = $(dist_shelf_DATA) $(shelf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/docbook.am DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASE_CFLAGS = @BASE_CFLAGS@ BIGFONT_CFLAGS = @BIGFONT_CFLAGS@ BIGFONT_LIBS = @BIGFONT_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHANGELOG_CMD = @CHANGELOG_CMD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ FOP = @FOP@ GREP = @GREP@ I18N_MODULE_LIBS = @I18N_MODULE_LIBS@ INSTALL = @INSTALL@ INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ KEYSYMDEFS = @KEYSYMDEFS@ LAUNCHD = @LAUNCHD@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LINT = @LINT@ LINTLIB = @LINTLIB@ LINT_FLAGS = @LINT_FLAGS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MALLOC_ZERO_CFLAGS = @MALLOC_ZERO_CFLAGS@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_SUBSTS = @MAN_SUBSTS@ MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RAWCPP = @RAWCPP@ RAWCPPFLAGS = @RAWCPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRICT_CFLAGS = @STRICT_CFLAGS@ STRIP = @STRIP@ STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ TRADITIONALCPPFLAGS = @TRADITIONALCPPFLAGS@ VERSION = @VERSION@ WCHAR32 = @WCHAR32@ X11_CFLAGS = @X11_CFLAGS@ X11_DATADIR = @X11_DATADIR@ X11_EXTRA_DEPS = @X11_EXTRA_DEPS@ X11_LIBDIR = @X11_LIBDIR@ X11_LIBS = @X11_LIBS@ X11_LOCALEDATADIR = @X11_LOCALEDATADIR@ X11_LOCALEDIR = @X11_LOCALEDIR@ X11_LOCALELIBDIR = @X11_LOCALELIBDIR@ XERRORDB = @XERRORDB@ XKBPROTO_REQUIRES = @XKBPROTO_REQUIRES@ XKEYSYMDB = @XKEYSYMDB@ XLOCALEDATADIR = @XLOCALEDATADIR@ XLOCALEDIR = @XLOCALEDIR@ XLOCALELIBDIR = @XLOCALELIBDIR@ XMALLOC_ZERO_CFLAGS = @XMALLOC_ZERO_CFLAGS@ XMLTO = @XMLTO@ XORG_MAN_PAGE = @XORG_MAN_PAGE@ XORG_SGML_PATH = @XORG_SGML_PATH@ XSLTPROC = @XSLTPROC@ XSL_STYLESHEET = @XSL_STYLESHEET@ XTHREADLIB = @XTHREADLIB@ XTHREAD_CFLAGS = @XTHREAD_CFLAGS@ XTMALLOC_ZERO_CFLAGS = @XTMALLOC_ZERO_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ locales = @locales@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # Main DocBook/XML files (DOCTYPE book) @ENABLE_SPECS_TRUE@docbook = libX11.xml # Included chapters, appendix, images @ENABLE_SPECS_TRUE@chapters = \ @ENABLE_SPECS_TRUE@ AppA.xml \ @ENABLE_SPECS_TRUE@ AppB.xml \ @ENABLE_SPECS_TRUE@ AppC.xml \ @ENABLE_SPECS_TRUE@ AppD.xml \ @ENABLE_SPECS_TRUE@ CH01.xml \ @ENABLE_SPECS_TRUE@ CH02.xml \ @ENABLE_SPECS_TRUE@ CH03.xml \ @ENABLE_SPECS_TRUE@ CH04.xml \ @ENABLE_SPECS_TRUE@ CH05.xml \ @ENABLE_SPECS_TRUE@ CH06.xml \ @ENABLE_SPECS_TRUE@ CH07.xml \ @ENABLE_SPECS_TRUE@ CH08.xml \ @ENABLE_SPECS_TRUE@ CH09.xml \ @ENABLE_SPECS_TRUE@ CH10.xml \ @ENABLE_SPECS_TRUE@ CH11.xml \ @ENABLE_SPECS_TRUE@ CH12.xml \ @ENABLE_SPECS_TRUE@ CH13.xml \ @ENABLE_SPECS_TRUE@ CH14.xml \ @ENABLE_SPECS_TRUE@ CH15.xml \ @ENABLE_SPECS_TRUE@ CH16.xml \ @ENABLE_SPECS_TRUE@ credits.xml \ @ENABLE_SPECS_TRUE@ glossary.xml # The location where the DocBook/XML files and their generated formats are installed @ENABLE_SPECS_TRUE@shelfdir = $(docdir)/libX11 # DocBook/XML generated output formats to be installed @ENABLE_SPECS_TRUE@shelf_DATA = $(am__append_1) $(am__append_2) \ @ENABLE_SPECS_TRUE@ $(am__append_3) $(am__append_4) # DocBook/XML file with chapters, appendix and images it includes @ENABLE_SPECS_TRUE@dist_shelf_DATA = $(docbook) $(chapters) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_SEARCHPATH_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --searchpath "$(XORG_SGML_PATH)/X11" \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --searchpath "$(abs_top_builddir)" @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_HTML_OLINK_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam target.database.document=$(XORG_SGML_PATH)/X11/dbs/masterdb.html.xml \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam current.docid="$(<:.xml=)" @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_HTML_STYLESHEET_FLAGS = -x $(STYLESHEET_SRCDIR)/xorg-xhtml.xsl @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_HTML_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_SEARCHPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_HTML_STYLESHEET_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_HTML_OLINK_FLAGS) @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_FO_IMAGEPATH_FLAGS = --stringparam img.src.path=$(abs_builddir)/ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_PDF_OLINK_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam target.database.document=$(XORG_SGML_PATH)/X11/dbs/masterdb.pdf.xml \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam current.docid="$(<:.xml=)" @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_FO_STYLESHEET_FLAGS = -x $(STYLESHEET_SRCDIR)/xorg-fo.xsl @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_FO_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_SEARCHPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_FO_STYLESHEET_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_FO_IMAGEPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_PDF_OLINK_FLAGS) # Generate documents cross-reference target databases @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_SEARCHPATH_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --path "$(XORG_SGML_PATH)/X11" \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --path "$(abs_top_builddir)" @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_OLINK_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --stringparam targets.filename "$@" \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --stringparam collect.xref.targets "only" \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --stringparam olink.base.uri "$(@:.db=)" @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_HTML_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(XSLT_SEARCHPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(XSLT_OLINK_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --nonet --xinclude \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(STYLESHEET_SRCDIR)/xorg-xhtml.xsl @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_PDF_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(XSLT_SEARCHPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(XSLT_OLINK_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --nonet --xinclude \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(STYLESHEET_SRCDIR)/xorg-fo.xsl @ENABLE_SPECS_TRUE@CLEANFILES = $(shelf_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/docbook.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign specs/libX11/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign specs/libX11/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/docbook.am $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_shelfDATA: $(dist_shelf_DATA) @$(NORMAL_INSTALL) @list='$(dist_shelf_DATA)'; test -n "$(shelfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(shelfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(shelfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(shelfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(shelfdir)" || exit $$?; \ done uninstall-dist_shelfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_shelf_DATA)'; test -n "$(shelfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(shelfdir)'; $(am__uninstall_files_from_dir) install-shelfDATA: $(shelf_DATA) @$(NORMAL_INSTALL) @list='$(shelf_DATA)'; test -n "$(shelfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(shelfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(shelfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(shelfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(shelfdir)" || exit $$?; \ done uninstall-shelfDATA: @$(NORMAL_UNINSTALL) @list='$(shelf_DATA)'; test -n "$(shelfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(shelfdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(shelfdir)" "$(DESTDIR)$(shelfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_shelfDATA install-shelfDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_shelfDATA uninstall-shelfDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-dist_shelfDATA install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-shelfDATA install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-dist_shelfDATA uninstall-shelfDATA .PRECIOUS: Makefile @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@%.html: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_HTML_FLAGS) xhtml-nochunks $< @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TEXT_TRUE@@HAVE_XMLTO_TRUE@%.txt: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TEXT_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_HTML_FLAGS) txt $< @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@%.pdf: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FO_FLAGS) --with-fop pdf $< @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@%.ps: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FO_FLAGS) --with-fop ps $< @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@%.html.db: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(AM_V_GEN)$(XSLTPROC) $(XSLT_HTML_FLAGS) $< @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@%.pdf.db: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(AM_V_GEN)$(XSLTPROC) $(XSLT_PDF_FLAGS) $< # Generate DocBook/XML output formats with or without stylesheets # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: PECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_OLINK_FlibX11-1.6.3/specs/libX11/AppB.xml000064401431060000012000000057231247741723500166060ustar00alancstaff00002660200006 X Font Cursors The following are the available cursors that can be used with . #define XC_X_cursor 0 #define XC_ll_angle 76 #define XC_arrow 2 #define XC_lr_angle 78 #define XC_based_arrow_down 4 #define XC_man 80 #define XC_based_arrow_up 6 #define XC_middlebutton 82 #define XC_boat 8 #define XC_mouse 84 #define XC_bogosity 10 #define XC_pencil 86 #define XC_bottom_left_corner 12 #define XC_pirate 88 #define XC_bottom_right_corner 14 #define XC_plus 90 #define XC_bottom_side 16 #define XC_question_arrow 92 #define XC_bottom_tee 18 #define XC_right_ptr 94 #define XC_box_spiral 20 #define XC_right_side 96 #define XC_center_ptr 22 #define XC_right_tee 98 #define XC_circle 24 #define XC_rightbutton 100 #define XC_clock 26 #define XC_rtl_logo 102 #define XC_coffee_mug 28 #define XC_sailboat 104 #define XC_cross 30 #define XC_sb_down_arrow 106 #define XC_cross_reverse 32 #define XC_sb_h_double_arrow 108 #define XC_crosshair 34 #define XC_sb_left_arrow 110 #define XC_diamond_cross 36 #define XC_sb_right_arrow 112 #define XC_dot 38 #define XC_sb_up_arrow 114 #define XC_dot_box_mask 40 #define XC_sb_v_double_arrow 116 #define XC_double_arrow 42 #define XC_shuttle 118 #define XC_draft_large 44 #define XC_sizing 120 #define XC_draft_small 46 #define XC_spider 122 #define XC_draped_box 48 #define XC_spraycan 124 #define XC_exchange 50 #define XC_star 126 #define XC_fleur 52 #define XC_target 128 #define XC_gobbler 54 #define XC_tcross 130 #define XC_gumby 56 #define XC_top_left_arrow 132 #define XC_hand1 58 #define XC_top_left_corner 134 #define XC_hand2 60 #define XC_top_right_corner 136 #define XC_heart 62 #define XC_top_side 138 #define XC_icon 64 #define XC_top_tee 140 #define XC_iron_cross 66 #define XC_trek 142 #define XC_left_ptr 68 #define XC_ul_angle 144 #define XC_left_side 70 #define XC_umbrella 146 #define XC_left_tee 72 #define XC_ur_angle 148 #define XC_leftbutton 74 #define XC_watch 150 #define XC_xterm 152 libX11-1.6.3/specs/libX11/CH10.xml000064401431060000012000004333131247741723500164170ustar00alancstaff00002660200006 Events A client application communicates with the X server through the connection you establish with the XOpenDisplay function. A client application sends requests to the X server over this connection. These requests are made by the Xlib functions that are called in the client application. Many Xlib functions cause the X server to generate events, and the user’s typing or moving the pointer can generate events asynchronously. The X server returns events to the client on the same connection. This chapter discusses the following topics associated with events: Event types Event structures Event masks Event processing Functions for handling events are dealt with in the next chapter. Event Types Eventtypes An event is data generated asynchronously by the X server as a result of some device activity or as side effects of a request sent by an Xlib function. Event Device-related events propagate from the source window to ancestor windows until some client application has selected that event type or until the event is explicitly discarded. The X server generally sends an event to a client application only if the client has specifically asked to be informed of that event type, typically by setting the event-mask attribute of the window. The mask can also be set when you create a window or by changing the window's event-mask. You can also mask out events that would propagate to ancestor windows by manipulating the do-not-propagate mask of the window's attributes. However, MappingNotify events are always sent to all clients. Input Control Output Control An event type describes a specific event generated by the X server. For each event type, a corresponding constant name is defined in <X11/X.h>, X11/X.h Files<X11/X.h> Headers<X11/X.h> which is used when referring to an event type. Eventcategories The following table lists the event category and its associated event type or types. The processing associated with these events is discussed in section 10.5. Event Category Event Type Keyboard events KeyPress, KeyRelease Pointer events ButtonPress, ButtonRelease, MotionNotify Window crossing events EnterNotify, LeaveNotify Input focus events FocusIn, FocusOut Keymap state notification event KeymapNotify Exposure events Expose, GraphicsExpose, NoExpose Structure control events CirculateRequest, ConfigureRequest, MapRequest, ResizeRequest Window state notification events CirculateNotify, ConfigureNotify, CreateNotify, DestroyNotify, GravityNotify, MapNotify, MappingNotify, ReparentNotify, UnmapNotify, VisibilityNotify Colormap state notification event ColormapNotify Client communication events ClientMessage, PropertyNotify, SelectionClear, SelectionNotify, SelectionRequest Event Structures For each event type, a corresponding structure is declared in <X11/Xlib.h>. X11/Xlib.h Files<X11/Xlib.h> Headers<X11/Xlib.h> All the event structures have the following common members: XAnyEvent typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; } XAnyEvent; The type member is set to the event type constant name that uniquely identifies it. For example, when the X server reports a GraphicsExpose event to a client application, it sends an XGraphicsExposeEvent structure with the type member set to GraphicsExpose. The display member is set to a pointer to the display the event was read on. The send_event member is set to True if the event came from a SendEvent protocol request. The serial member is set from the serial number reported in the protocol but expanded from the 16-bit least-significant bits to a full 32-bit value. The window member is set to the window that is most useful to toolkit dispatchers. The X server can send events at any time in the input stream. Xlib stores any events received while waiting for a reply in an event queue for later use. Xlib also provides functions that allow you to check events in the event queue (see section 11.3). In addition to the individual structures declared for each event type, the XEvent structure is a union of the individual structures declared for each event type. Depending on the type, you should access members of each event by using the XEvent union. XEvent typedef union _XEvent { int type; /* must not be changed */ XAnyEvent xany; XKeyEvent xkey; XButtonEvent xbutton; XMotionEvent xmotion; XCrossingEvent xcrossing; XFocusChangeEvent xfocus; XExposeEvent xexpose; XGraphicsExposeEvent xgraphicsexpose; XNoExposeEvent xnoexpose; XVisibilityEvent xvisibility; XCreateWindowEvent xcreatewindow; XDestroyWindowEvent xdestroywindow; XUnmapEvent xunmap; XMapEvent xmap; XMapRequestEvent xmaprequest; XReparentEvent xreparent; XConfigureEvent xconfigure; XGravityEvent xgravity; XResizeRequestEvent xresizerequest; XConfigureRequestEvent xconfigurerequest; XCirculateEvent xcirculate; XCirculateRequestEvent xcirculaterequest; XPropertyEvent xproperty; XSelectionClearEvent xselectionclear; XSelectionRequestEvent xselectionrequest; XSelectionEvent xselection; XColormapEvent xcolormap; XClientMessageEvent xclient; XMappingEvent xmapping; XErrorEvent xerror; XKeymapEvent xkeymap; long pad[24]; } XEvent; An XEvent structure's first entry always is the type member, which is set to the event type. The second member always is the serial number of the protocol request that generated the event. The third member always is send_event, which is a Bool that indicates if the event was sent by a different client. The fourth member always is a display, which is the display that the event was read from. Except for keymap events, the fifth member always is a window, which has been carefully selected to be useful to toolkit dispatchers. To avoid breaking toolkits, the order of these first five entries is not to change. Most events also contain a time member, which is the time at which an event occurred. In addition, a pointer to the generic event must be cast before it is used to access any other information in the structure. Event Masks Event mask Clients select event reporting of most events relative to a window. To do this, pass an event mask to an Xlib event-handling function that takes an event_mask argument. The bits of the event mask are defined in <X11/X.h>. X11/X.h Files<X11/X.h> Headers<X11/X.h> Each bit in the event mask maps to an event mask name, which describes the event or events you want the X server to return to a client application. Unless the client has specifically asked for them, most events are not reported to clients when they are generated. Unless the client suppresses them by setting graphics-exposures in the GC to False, GraphicsExpose and NoExpose are reported by default as a result of and . SelectionClear, SelectionRequest, SelectionNotify, or ClientMessage cannot be masked. Selection-related events are only sent to clients cooperating with selections (see section 4.5). When the keyboard or pointer mapping is changed, MappingNotify is always sent to clients. The following table lists the event mask constants you can pass to the event_mask argument and the circumstances in which you would want to specify the event mask: Event Mask Circumstances NoEventMask No events wanted KeyPressMask Keyboard down events wanted KeyReleaseMask Keyboard up events wanted ButtonPressMask Pointer button down events wanted ButtonReleaseMask Pointer button up events wanted EnterWindowMask Pointer window entry events wanted LeaveWindowMask Pointer window leave events wanted PointerMotionMask Pointer motion events wanted PointerMotionHintMask Pointer motion hints wanted Button1MotionMask Pointer motion while button 1 down Button2MotionMask Pointer motion while button 2 down Button3MotionMask Pointer motion while button 3 down Button4MotionMask Pointer motion while button 4 down Button5MotionMask Pointer motion while button 5 down ButtonMotionMask Pointer motion while any button down KeymapStateMask Keyboard state wanted at window entry and focus in ExposureMask Any exposure wanted VisibilityChangeMask Any change in visibility wanted StructureNotifyMask Any change in window structure wanted ResizeRedirectMask Redirect resize of this window SubstructureNotifyMask Substructure notification wanted SubstructureRedirectMask Redirect structure requests on children FocusChangeMask Any change in input focus wanted PropertyChangeMask Any change in property wanted ColormapChangeMask Any change in colormap wanted OwnerGrabButtonMask Automatic grabs should activate with owner_events set to True Event Processing Overview The event reported to a client application during event processing depends on which event masks you provide as the event-mask attribute for a window. For some event masks, there is a one-to-one correspondence between the event mask constant and the event type constant. For example, if you pass the event mask ButtonPressMask, the X server sends back only ButtonPress events. CurrentTime Most events contain a time member, which is the time at which an event occurred. In other cases, one event mask constant can map to several event type constants. For example, if you pass the event mask SubstructureNotifyMask, the X server can send back CirculateNotify, ConfigureNotify, CreateNotify, DestroyNotify, GravityNotify, MapNotify, ReparentNotify, or UnmapNotify events. In another case, two event masks can map to one event type. For example, if you pass either PointerMotionMask or ButtonMotionMask, the X server sends back a MotionNotify event. The following table lists the event mask, its associated event type or types, and the structure name associated with the event type. Some of these structures actually are typedefs to a generic structure that is shared between two event types. Note that N.A. appears in columns for which the information is not applicable. Event Mask Event Type Structure Generic Structure ButtonMotionMask Button1MotionMask Button2MotionMask Button3MotionMask Button4MotionMask Button5MotionMask MotionNotify XPointerMovedEvent XMotionEvent ButtonPressMask ButtonPress XButtonPressedEvent XButtonEvent ButtonReleaseMask ButtonRelease XButtonReleasedEvent XButtonEvent ColormapChangeMask ColormapNotify XColormapEvent EnterWindowMask EnterNotify XEnterWindowEvent XCrossingEvent LeaveWindowMask LeaveNotify XLeaveWindowEvent XCrossingEvent ExposureMask Expose XExposeEvent GCGraphicsExposures in GC GraphicsExpose XGraphicsExposeEvent NoExpose XNoExposeEvent FocusChangeMask FocusIn XFocusInEvent XFocusChangeEvent FocusOut XFocusOutEvent XFocusChangeEvent KeymapStateMask KeymapNotify XKeymapEvent KeyPressMask KeyPress XKeyPressedEvent XKeyEvent KeyReleaseMask KeyRelease XKeyReleasedEvent XKeyEvent OwnerGrabButtonMask N.A. N.A. PointerMotionMask MotionNotify XPointerMovedEvent XMotionEvent PointerMotionHintMask N.A. N.A. PropertyChangeMask PropertyNotify XPropertyEvent ResizeRedirectMask ResizeRequest XResizeRequestEvent StructureNotifyMask CirculateNotify XCirculateEvent ConfigureNotify XConfigureEvent DestroyNotify XDestroyWindowEvent GravityNotify XGravityEvent MapNotify XMapEvent ReparentNotify XReparentEvent UnmapNotify XUnmapEvent SubstructureNotifyMask CirculateNotify XCirculateEvent ConfigureNotify XConfigureEvent CreateNotify XCreateWindowEvent DestroyNotify XDestroyWindowEvent GravityNotify XGravityEvent MapNotify XMapEvent ReparentNotify XReparentEvent UnmapNotify XUnmapEvent SubstructureRedirectMask CirculateRequest XCirculateRequestEvent ConfigureRequest XConfigureRequestEvent MapRequest XMapRequestEvent N.A. ClientMessage XClientMessageEvent N.A. MappingNotify XMappingEvent N.A. SelectionClear XSelectionClearEvent N.A. SelectionNotify XSelectionEvent N.A. SelectionRequest XSelectionRequestEvent VisibilityChangeMask VisibilityNotify XVisibilityEvent The sections that follow describe the processing that occurs when you select the different event masks. The sections are organized according to these processing categories: Keyboard and pointer events Window crossing events Input focus events Keymap state notification events Exposure events Window state notification events Structure control events Colormap state notification events Client communication events Keyboard and Pointer Events This section discusses: Pointer button events Keyboard and pointer events Pointer Button Events The following describes the event processing that occurs when a pointer button press is processed with the pointer in some window w and when no active pointer grab is in progress. The X server searches the ancestors of w from the root down, looking for a passive grab to activate. If no matching passive grab on the button exists, the X server automatically starts an active grab for the client receiving the event and sets the last-pointer-grab time to the current server time. The effect is essentially equivalent to an with these client passed arguments: Argument Value w The event window event_mask The client's selected pointer events on the event window pointer_mode GrabModeAsync keyboard_mode GrabModeAsync owner_events True, if the client has selected OwnerGrabButtonMask on the event window, otherwise False confine_to None cursor None The active grab is automatically terminated when the logical state of the pointer has all buttons released. Clients can modify the active grab by calling and . Keyboard and Pointer Events EventsButtonPress EventsButtonRelease EventsKeyPress EventsKeyRelease EventsMotionNotify This section discusses the processing that occurs for the keyboard events KeyPress and KeyRelease and the pointer events ButtonPress, ButtonRelease, and MotionNotify. For information about the keyboard event-handling utilities, see chapter 11. KeyPress KeyRelease The X server reports KeyPress or KeyRelease events to clients wanting information about keys that logically change state. Note that these events are generated for all keys, even those mapped to modifier bits. ButtonPress ButtonRelease The X server reports ButtonPress or ButtonRelease events to clients wanting information about buttons that logically change state. MotionNotify The X server reports MotionNotify events to clients wanting information about when the pointer logically moves. The X server generates this event whenever the pointer is moved and the pointer motion begins and ends in the window. The granularity of MotionNotify events is not guaranteed, but a client that selects this event type is guaranteed to receive at least one event when the pointer moves and then rests. The generation of the logical changes lags the physical changes if device event processing is frozen. To receive KeyPress, KeyRelease, ButtonPress, and ButtonRelease events, set KeyPressMask, KeyReleaseMask, ButtonPressMask, and ButtonReleaseMask bits in the event-mask attribute of the window. To receive MotionNotify events, set one or more of the following event masks bits in the event-mask attribute of the window. Button1MotionMask - Button5MotionMask The client application receives MotionNotify events only when one or more of the specified buttons is pressed. ButtonMotionMask The client application receives MotionNotify events only when at least one button is pressed. PointerMotionMask The client application receives MotionNotify events independent of the state of the pointer buttons. PointerMotionHintMask If PointerMotionHintMask is selected in combination with one or more of the above masks, the X server is free to send only one MotionNotify event (with the is_hint member of the XPointerMovedEvent structure set to NotifyHint) to the client for the event window, until either the key or button state changes, the pointer leaves the event window, or the client calls or . The server still may send MotionNotify events without is_hint set to NotifyHint. The source of the event is the viewable window that the pointer is in. The window used by the X server to report these events depends on the window's position in the window hierarchy and whether any intervening window prohibits the generation of these events. Starting with the source window, the X server searches up the window hierarchy until it locates the first window specified by a client as having an interest in these events. If one of the intervening windows has its do-not-propagate-mask set to prohibit generation of the event type, the events of those types will be suppressed. Clients can modify the actual window used for reporting by performing active grabs and, in the case of keyboard events, by using the focus window. The structures for these event types contain: typedef struct { int type; /* ButtonPress or ButtonRelease */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; /* ``event'' window it is reported relative to */ Window root; /* root window that the event occurred on */ Window subwindow; /* child window */ Time time; /* milliseconds */ int x, y; /* pointer x, y coordinates in event window */ int x_root, y_root; /* coordinates relative to root */ unsigned int state; /* key or button mask */ unsigned int button; /* detail */ Bool same_screen; /* same screen flag */ } XButtonEvent; typedef XButtonEvent XButtonPressedEvent; typedef XButtonEvent XButtonReleasedEvent; typedef struct { int type; /* KeyPress or KeyRelease */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; /* ``event'' window it is reported relative to */ Window root; /* root window that the event occurred on */ Window subwindow; /* child window */ Time time; /* milliseconds */ int x, y; /* pointer x, y coordinates in event window */ int x_root, y_root; /* coordinates relative to root */ unsigned int state; /* key or button mask */ unsigned int keycode; /* detail */ Bool same_screen; /* same screen flag */ } XKeyEvent; typedef XKeyEvent XKeyPressedEvent; typedef XKeyEvent XKeyReleasedEvent; typedef struct { int type; /* MotionNotify */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; /* ``event'' window reported relative to */ Window root; /* root window that the event occurred on */ Window subwindow; /* child window */ Time time; /* milliseconds */ int x, y; /* pointer x, y coordinates in event window */ int x_root, y_root; /* coordinates relative to root */ unsigned int state; /* key or button mask */ char is_hint; /* detail */ Bool same_screen; /* same screen flag */ } XMotionEvent; typedef XMotionEvent XPointerMovedEvent; These structures have the following common members: window, root, subwindow, time, x, y, x_root, y_root, state, and same_screen. The window member is set to the window on which the event was generated and is referred to as the event window. As long as the conditions previously discussed are met, this is the window used by the X server to report the event. The root member is set to the source window's root window. The x_root and y_root members are set to the pointer's coordinates relative to the root window's origin at the time of the event. The same_screen member is set to indicate whether the event window is on the same screen as the root window and can be either True or False. If True, the event and root windows are on the same screen. If False, the event and root windows are not on the same screen. If the source window is an inferior of the event window, the subwindow member of the structure is set to the child of the event window that is the source window or the child of the event window that is an ancestor of the source window. Otherwise, the X server sets the subwindow member to None. The time member is set to the time when the event was generated and is expressed in milliseconds. If the event window is on the same screen as the root window, the x and y members are set to the coordinates relative to the event window's origin. Otherwise, these members are set to zero. The state member is set to indicate the logical state of the pointer buttons and modifier keys just prior to the event, which is the bitwise inclusive OR of one or more of the button or modifier key masks: Button1Mask, Button2Mask, Button3Mask, Button4Mask, Button5Mask, ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask, Mod3Mask, Mod4Mask, and Mod5Mask. Each of these structures also has a member that indicates the detail. For the XKeyPressedEvent and XKeyReleasedEvent structures, this member is called a keycode. It is set to a number that represents a physical key on the keyboard. The keycode is an arbitrary representation for any key on the keyboard (see sections 12.7 and 16.1). For the XButtonPressedEvent and XButtonReleasedEvent structures, this member is called button. It represents the pointer button that changed state and can be the Button1, Button2, Button3, Button4, or Button5 value. For the XPointerMovedEvent structure, this member is called is_hint. It can be set to NotifyNormal or NotifyHint. Some of the symbols mentioned in this section have fixed values, as follows: Symbol Value Button1MotionMask (1L<<8) Button2MotionMask (1L<<9) Button3MotionMask (1L<<10) Button4MotionMask (1L<<11) Button5MotionMask (1L<<12) Button1Mask (1<<8) Button2Mask (1<<9) Button3Mask (1<<10) Button4Mask (1<<11) Button5Mask (1<<12) ShiftMask (1<<0) LockMask (1<<1) ControlMask (1<<2) Mod1Mask (1<<3) Mod2Mask (1<<4) Mod3Mask (1<<5) Mod4Mask (1<<6) Mod5Mask (1<<7) Button1 1 Button2 2 Button3 3 Button4 4 Button5 5 Window Entry/Exit Events EventsEnterNotify EventsLeaveNotify This section describes the processing that occurs for the window crossing events EnterNotify and LeaveNotify. EnterNotify LeaveNotify If a pointer motion or a window hierarchy change causes the pointer to be in a different window than before, the X server reports EnterNotify or LeaveNotify events to clients who have selected for these events. All EnterNotify and LeaveNotify events caused by a hierarchy change are generated after any hierarchy event (UnmapNotify, MapNotify, ConfigureNotify, GravityNotify, CirculateNotify) caused by that change; however, the X protocol does not constrain the ordering of EnterNotify and LeaveNotify events with respect to FocusOut, VisibilityNotify, and Expose events. This contrasts with MotionNotify events, which are also generated when the pointer moves but only when the pointer motion begins and ends in a single window. An EnterNotify or LeaveNotify event also can be generated when some client application calls and . To receive EnterNotify or LeaveNotify events, set the EnterWindowMask or LeaveWindowMask bits of the event-mask attribute of the window. The structure for these event types contains: XCrossingEvent XEnterWindowEvent XLeaveWindowEvent typedef struct { int type; /* EnterNotify or LeaveNotify */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; /* ``event'' window reported relative to */ Window root; /* root window that the event occurred on */ Window subwindow; /* child window */ Time time; /* milliseconds */ int x, y; /* pointer x, y coordinates in event window */ int x_root, y_root; /* coordinates relative to root */ int mode; /* NotifyNormal, NotifyGrab, NotifyUngrab */ int detail; /* * NotifyAncestor, NotifyVirtual, NotifyInferior, * NotifyNonlinear,NotifyNonlinearVirtual */ Bool same_screen; /* same screen flag */ Bool focus; /* boolean focus */ unsigned int state; /* key or button mask */ } XCrossingEvent; typedef XCrossingEvent XEnterWindowEvent; typedef XCrossingEvent XLeaveWindowEvent; The window member is set to the window on which the EnterNotify or LeaveNotify event was generated and is referred to as the event window. This is the window used by the X server to report the event, and is relative to the root window on which the event occurred. The root member is set to the root window of the screen on which the event occurred. For a LeaveNotify event, if a child of the event window contains the initial position of the pointer, the subwindow component is set to that child. Otherwise, the X server sets the subwindow member to None. For an EnterNotify event, if a child of the event window contains the final pointer position, the subwindow component is set to that child or None. The time member is set to the time when the event was generated and is expressed in milliseconds. The x and y members are set to the coordinates of the pointer position in the event window. This position is always the pointer's final position, not its initial position. If the event window is on the same screen as the root window, x and y are the pointer coordinates relative to the event window's origin. Otherwise, x and y are set to zero. The x_root and y_root members are set to the pointer's coordinates relative to the root window's origin at the time of the event. The same_screen member is set to indicate whether the event window is on the same screen as the root window and can be either True or False. If True, the event and root windows are on the same screen. If False, the event and root windows are not on the same screen. The focus member is set to indicate whether the event window is the focus window or an inferior of the focus window. The X server can set this member to either True or False. If True, the event window is the focus window or an inferior of the focus window. If False, the event window is not the focus window or an inferior of the focus window. The state member is set to indicate the state of the pointer buttons and modifier keys just prior to the event. The X server can set this member to the bitwise inclusive OR of one or more of the button or modifier key masks: Button1Mask, Button2Mask, Button3Mask, Button4Mask, Button5Mask, ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask, Mod3Mask, Mod4Mask, Mod5Mask. The mode member is set to indicate whether the events are normal events, pseudo-motion events when a grab activates, or pseudo-motion events when a grab deactivates. The X server can set this member to NotifyNormal, NotifyGrab, or NotifyUngrab. The detail member is set to indicate the notify detail and can be NotifyAncestor, NotifyVirtual, NotifyInferior, NotifyNonlinear, or NotifyNonlinearVirtual. Normal Entry/Exit Events EnterNotify and LeaveNotify events are generated when the pointer moves from one window to another window. Normal events are identified by XEnterWindowEvent or XLeaveWindowEvent structures whose mode member is set to NotifyNormal. When the pointer moves from window A to window B and A is an inferior of B, the X server does the following: It generates a LeaveNotify event on window A, with the detail member of the XLeaveWindowEvent structure set to NotifyAncestor. It generates a LeaveNotify event on each window between window A and window B, exclusive, with the detail member of each XLeaveWindowEvent structure set to NotifyVirtual. It generates an EnterNotify event on window B, with the detail member of the XEnterWindowEvent structure set to NotifyInferior. When the pointer moves from window A to window B and B is an inferior of A, the X server does the following: It generates a LeaveNotify event on window A, with the detail member of the XLeaveWindowEvent structure set to NotifyInferior. It generates an EnterNotify event on each window between window A and window B, exclusive, with the detail member of each XEnterWindowEvent structure set to NotifyVirtual. It generates an EnterNotify event on window B, with the detail member of the XEnterWindowEvent structure set to NotifyAncestor. When the pointer moves from window A to window B and window C is their least common ancestor, the X server does the following: It generates a LeaveNotify event on window A, with the detail member of the XLeaveWindowEvent structure set to NotifyNonlinear. It generates a LeaveNotify event on each window between window A and window C, exclusive, with the detail member of each XLeaveWindowEvent structure set to NotifyNonlinearVirtual. It generates an EnterNotify event on each window between window C and window B, exclusive, with the detail member of each XEnterWindowEvent structure set to NotifyNonlinearVirtual. It generates an EnterNotify event on window B, with the detail member of the XEnterWindowEvent structure set to NotifyNonlinear. When the pointer moves from window A to window B on different screens, the X server does the following: It generates a LeaveNotify event on window A, with the detail member of the XLeaveWindowEvent structure set to NotifyNonlinear. If window A is not a root window, it generates a LeaveNotify event on each window above window A up to and including its root, with the detail member of each XLeaveWindowEvent structure set to NotifyNonlinearVirtual. If window B is not a root window, it generates an EnterNotify event on each window from window B's root down to but not including window B, with the detail member of each XEnterWindowEvent structure set to NotifyNonlinearVirtual. It generates an EnterNotify event on window B, with the detail member of the XEnterWindowEvent structure set to NotifyNonlinear. Grab and Ungrab Entry/Exit Events Pseudo-motion mode EnterNotify and LeaveNotify events are generated when a pointer grab activates or deactivates. Events in which the pointer grab activates are identified by XEnterWindowEvent or XLeaveWindowEvent structures whose mode member is set to NotifyGrab. Events in which the pointer grab deactivates are identified by XEnterWindowEvent or XLeaveWindowEvent structures whose mode member is set to NotifyUngrab (see ). When a pointer grab activates after any initial warp into a confine_to window and before generating any actual ButtonPress event that activates the grab, G is the grab_window for the grab, and P is the window the pointer is in, the X server does the following: It generates EnterNotify and LeaveNotify events (see section 10.6.1) with the mode members of the XEnterWindowEvent and XLeaveWindowEvent structures set to NotifyGrab. These events are generated as if the pointer were to suddenly warp from its current position in P to some position in G. However, the pointer does not warp, and the X server uses the pointer position as both the initial and final positions for the events. When a pointer grab deactivates after generating any actual ButtonRelease event that deactivates the grab, G is the grab_window for the grab, and P is the window the pointer is in, the X server does the following: It generates EnterNotify and LeaveNotify events (see section 10.6.1) with the mode members of the XEnterWindowEvent and XLeaveWindowEvent structures set to NotifyUngrab. These events are generated as if the pointer were to suddenly warp from some position in G to its current position in P. However, the pointer does not warp, and the X server uses the current pointer position as both the initial and final positions for the events. Input Focus Events EventsFocusIn EventsFocusOut This section describes the processing that occurs for the input focus events FocusIn and FocusOut. FocusIn FocusOut The X server can report FocusIn or FocusOut events to clients wanting information about when the input focus changes. The keyboard is always attached to some window (typically, the root window or a top-level window), which is called the focus window. The focus window and the position of the pointer determine the window that receives keyboard input. Clients may need to know when the input focus changes to control highlighting of areas on the screen. To receive FocusIn or FocusOut events, set the FocusChangeMask bit in the event-mask attribute of the window. The structure for these event types contains: XFocusChangeEvent XFocusInEvent XFocusOutEvent typedef struct { int type; /* FocusIn or FocusOut */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; /* window of event */ int mode; /* NotifyNormal, NotifyGrab, NotifyUngrab */ int detail; /* * NotifyAncestor, NotifyVirtual, NotifyInferior, * NotifyNonlinear,NotifyNonlinearVirtual, NotifyPointer, * NotifyPointerRoot, NotifyDetailNone */ } XFocusChangeEvent; typedef XFocusChangeEvent XFocusInEvent; typedef XFocusChangeEvent XFocusOutEvent; The window member is set to the window on which the FocusIn or FocusOut event was generated. This is the window used by the X server to report the event. The mode member is set to indicate whether the focus events are normal focus events, focus events while grabbed, focus events when a grab activates, or focus events when a grab deactivates. The X server can set the mode member to NotifyNormal, NotifyWhileGrabbed, NotifyGrab, or NotifyUngrab. All FocusOut events caused by a window unmap are generated after any UnmapNotify event; however, the X protocol does not constrain the ordering of FocusOut events with respect to generated EnterNotify, LeaveNotify, VisibilityNotify, and Expose events. Depending on the event mode, the detail member is set to indicate the notify detail and can be NotifyAncestor, NotifyVirtual, NotifyInferior, NotifyNonlinear, NotifyNonlinearVirtual, NotifyPointer, NotifyPointerRoot, or NotifyDetailNone. Normal Focus Events and Focus Events While Grabbed Normal focus events are identified by XFocusInEvent or XFocusOutEvent structures whose mode member is set to NotifyNormal. Focus events while grabbed are identified by XFocusInEvent or XFocusOutEvent structures whose mode member is set to NotifyWhileGrabbed. The X server processes normal focus and focus events while grabbed according to the following: When the focus moves from window A to window B, A is an inferior of B, and the pointer is in window P, the X server does the following: It generates a FocusOut event on window A, with the detail member of the XFocusOutEvent structure set to NotifyAncestor. It generates a FocusOut event on each window between window A and window B, exclusive, with the detail member of each XFocusOutEvent structure set to NotifyVirtual. It generates a FocusIn event on window B, with the detail member of the XFocusOutEvent structure set to NotifyInferior. If window P is an inferior of window B but window P is not window A or an inferior or ancestor of window A, it generates a FocusIn event on each window below window B, down to and including window P, with the detail member of each XFocusInEvent structure set to NotifyPointer. When the focus moves from window A to window B, B is an inferior of A, and the pointer is in window P, the X server does the following: If window P is an inferior of window A but P is not an inferior of window B or an ancestor of B, it generates a FocusOut event on each window from window P up to but not including window A, with the detail member of each XFocusOutEvent structure set to NotifyPointer. It generates a FocusOut event on window A, with the detail member of the XFocusOutEvent structure set to NotifyInferior. It generates a FocusIn event on each window between window A and window B, exclusive, with the detail member of each XFocusInEvent structure set to NotifyVirtual. It generates a FocusIn event on window B, with the detail member of the XFocusInEvent structure set to NotifyAncestor. When the focus moves from window A to window B, window C is their least common ancestor, and the pointer is in window P, the X server does the following: If window P is an inferior of window A, it generates a FocusOut event on each window from window P up to but not including window A, with the detail member of the XFocusOutEvent structure set to NotifyPointer. It generates a FocusOut event on window A, with the detail member of the XFocusOutEvent structure set to NotifyNonlinear. It generates a FocusOut event on each window between window A and window C, exclusive, with the detail member of each XFocusOutEvent structure set to NotifyNonlinearVirtual. It generates a FocusIn event on each window between C and B, exclusive, with the detail member of each XFocusInEvent structure set to NotifyNonlinearVirtual. It generates a FocusIn event on window B, with the detail member of the XFocusInEvent structure set to NotifyNonlinear. If window P is an inferior of window B, it generates a FocusIn event on each window below window B down to and including window P, with the detail member of the XFocusInEvent structure set to NotifyPointer. When the focus moves from window A to window B on different screens and the pointer is in window P, the X server does the following: If window P is an inferior of window A, it generates a FocusOut event on each window from window P up to but not including window A, with the detail member of each XFocusOutEvent structure set to NotifyPointer. It generates a FocusOut event on window A, with the detail member of the XFocusOutEvent structure set to NotifyNonlinear. If window A is not a root window, it generates a FocusOut event on each window above window A up to and including its root, with the detail member of each XFocusOutEvent structure set to NotifyNonlinearVirtual. If window B is not a root window, it generates a FocusIn event on each window from window B's root down to but not including window B, with the detail member of each XFocusInEvent structure set to NotifyNonlinearVirtual. It generates a FocusIn event on window B, with the detail member of each XFocusInEvent structure set to NotifyNonlinear. If window P is an inferior of window B, it generates a FocusIn event on each window below window B down to and including window P, with the detail member of each XFocusInEvent structure set to NotifyPointer. When the focus moves from window A to PointerRoot (events sent to the window under the pointer) or None (discard), and the pointer is in window P, the X server does the following: If window P is an inferior of window A, it generates a FocusOut event on each window from window P up to but not including window A, with the detail member of each XFocusOutEvent structure set to NotifyPointer. It generates a FocusOut event on window A, with the detail member of the XFocusOutEvent structure set to NotifyNonlinear. If window A is not a root window, it generates a FocusOut event on each window above window A up to and including its root, with the detail member of each XFocusOutEvent structure set to NotifyNonlinearVirtual. It generates a FocusIn event on the root window of all screens, with the detail member of each XFocusInEvent structure set to NotifyPointerRoot (or NotifyDetailNone). If the new focus is PointerRoot, it generates a FocusIn event on each window from window P's root down to and including window P, with the detail member of each XFocusInEvent structure set to NotifyPointer. When the focus moves from PointerRoot (events sent to the window under the pointer) or None to window A, and the pointer is in window P, the X server does the following: If the old focus is PointerRoot, it generates a FocusOut event on each window from window P up to and including window P's root, with the detail member of each XFocusOutEvent structure set to NotifyPointer. It generates a FocusOut event on all root windows, with the detail member of each XFocusOutEvent structure set to NotifyPointerRoot (or NotifyDetailNone). If window A is not a root window, it generates a FocusIn event on each window from window A's root down to but not including window A, with the detail member of each XFocusInEvent structure set to NotifyNonlinearVirtual. It generates a FocusIn event on window A, with the detail member of the XFocusInEvent structure set to NotifyNonlinear. If window P is an inferior of window A, it generates a FocusIn event on each window below window A down to and including window P, with the detail member of each XFocusInEvent structure set to NotifyPointer. When the focus moves from PointerRoot (events sent to the window under the pointer) to None (or vice versa), and the pointer is in window P, the X server does the following: If the old focus is PointerRoot, it generates a FocusOut event on each window from window P up to and including window P's root, with the detail member of each XFocusOutEvent structure set to NotifyPointer. It generates a FocusOut event on all root windows, with the detail member of each XFocusOutEvent structure set to either NotifyPointerRoot or NotifyDetailNone. It generates a FocusIn event on all root windows, with the detail member of each XFocusInEvent structure set to NotifyDetailNone or NotifyPointerRoot. If the new focus is PointerRoot, it generates a FocusIn event on each window from window P's root down to and including window P, with the detail member of each XFocusInEvent structure set to NotifyPointer. Focus Events Generated by Grabs Focus events in which the keyboard grab activates are identified by XFocusInEvent or XFocusOutEvent structures whose mode member is set to NotifyGrab. Focus events in which the keyboard grab deactivates are identified by XFocusInEvent or XFocusOutEvent structures whose mode member is set to NotifyUngrab (see ). When a keyboard grab activates before generating any actual KeyPress event that activates the grab, G is the grab_window, and F is the current focus, the X server does the following: It generates FocusIn and FocusOut events, with the mode members of the XFocusInEvent and XFocusOutEvent structures set to NotifyGrab. These events are generated as if the focus were to change from F to G. When a keyboard grab deactivates after generating any actual KeyRelease event that deactivates the grab, G is the grab_window, and F is the current focus, the X server does the following: It generates FocusIn and FocusOut events, with the mode members of the XFocusInEvent and XFocusOutEvent structures set to NotifyUngrab. These events are generated as if the focus were to change from G to F. Key Map State Notification Events EventsKeymapNotify KeymapNotify The X server can report KeymapNotify events to clients that want information about changes in their keyboard state. To receive KeymapNotify events, set the KeymapStateMask bit in the event-mask attribute of the window. The X server generates this event immediately after every EnterNotify and FocusIn event. The structure for this event type contains: XKeymapEvent /* generated on EnterWindow and FocusIn when KeymapState selected */ typedef struct { int type; /* KeymapNotify */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; char key_vector[32]; } XKeymapEvent; The window member is not used but is present to aid some toolkits. The key_vector member is set to the bit vector of the keyboard. Each bit set to 1 indicates that the corresponding key is currently pressed. The vector is represented as 32 bytes. Byte N (from 0) contains the bits for keys 8N to 8N + 7 with the least significant bit in the byte representing key 8N. Exposure Events The X protocol does not guarantee to preserve the contents of window regions when the windows are obscured or reconfigured. Some implementations may preserve the contents of windows. Other implementations are free to destroy the contents of windows when exposed. X expects client applications to assume the responsibility for restoring the contents of an exposed window region. (An exposed window region describes a formerly obscured window whose region becomes visible.) Therefore, the X server sends Expose events describing the window and the region of the window that has been exposed. A naive client application usually redraws the entire window. A more sophisticated client application redraws only the exposed region. Expose Events EventsExpose Expose The X server can report Expose events to clients wanting information about when the contents of window regions have been lost. The circumstances in which the X server generates Expose events are not as definite as those for other events. However, the X server never generates Expose events on windows whose class you specified as InputOnly. The X server can generate Expose events when no valid contents are available for regions of a window and either the regions are visible, the regions are viewable and the server is (perhaps newly) maintaining backing store on the window, or the window is not viewable but the server is (perhaps newly) honoring the window's backing-store attribute of Always or WhenMapped. The regions decompose into an (arbitrary) set of rectangles, and an Expose event is generated for each rectangle. For any given window, the X server guarantees to report contiguously all of the regions exposed by some action that causes Expose events, such as raising a window. To receive Expose events, set the ExposureMask bit in the event-mask attribute of the window. The structure for this event type contains: XExposeEvent typedef struct { int type; /* Expose */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; int x, y; int width, height; int count; /* if nonzero, at least this many more */ } XExposeEvent; The window member is set to the exposed (damaged) window. The x and y members are set to the coordinates relative to the window's origin and indicate the upper-left corner of the rectangle. The width and height members are set to the size (extent) of the rectangle. The count member is set to the number of Expose events that are to follow. If count is zero, no more Expose events follow for this window. However, if count is nonzero, at least that number of Expose events (and possibly more) follow for this window. Simple applications that do not want to optimize redisplay by distinguishing between subareas of its window can just ignore all Expose events with nonzero counts and perform full redisplays on events with zero counts. GraphicsExpose and NoExpose Events EventsGraphicsExpose EventsNoExpose GraphicsExpose The X server can report GraphicsExpose events to clients wanting information about when a destination region could not be computed during certain graphics requests: or . The X server generates this event whenever a destination region could not be computed because of an obscured or out-of-bounds source region. In addition, the X server guarantees to report contiguously all of the regions exposed by some graphics request (for example, copying an area of a drawable to a destination drawable). NoExpose The X server generates a NoExpose event whenever a graphics request that might produce a GraphicsExpose event does not produce any. In other words, the client is really asking for a GraphicsExpose event but instead receives a NoExpose event. To receive GraphicsExpose or NoExpose events, you must first set the graphics-exposure attribute of the graphics context to True. You also can set the graphics-expose attribute when creating a graphics context using or by calling . The structures for these event types contain: XGraphicsExposeEvent typedef struct { int type; /* GraphicsExpose */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Drawable drawable; int x, y; int width, height; int count; /* if nonzero, at least this many more */ int major_code; /* core is CopyArea or CopyPlane */ int minor_code; /* not defined in the core */ } XGraphicsExposeEvent; XNoExposeEvent typedef struct { int type; /* NoExpose */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Drawable drawable; int major_code; /* core is CopyArea or CopyPlane */ int minor_code; /* not defined in the core */ } XNoExposeEvent; Both structures have these common members: drawable, major_code, and minor_code. The drawable member is set to the drawable of the destination region on which the graphics request was to be performed. The major_code member is set to the graphics request initiated by the client and can be either X_CopyArea or X_CopyPlane. If it is X_CopyArea, a call to initiated the request. If it is X_CopyPlane, a call to initiated the request. These constants are defined in <X11/Xproto.h>. X11/Xproto.h Files<X11/Xproto.h> Headers<X11/Xproto.h> The minor_code member, like the major_code member, indicates which graphics request was initiated by the client. However, the minor_code member is not defined by the core X protocol and will be zero in these cases, although it may be used by an extension. The XGraphicsExposeEvent structure has these additional members: x, y, width, height, and count. The x and y members are set to the coordinates relative to the drawable's origin and indicate the upper-left corner of the rectangle. The width and height members are set to the size (extent) of the rectangle. The count member is set to the number of GraphicsExpose events to follow. If count is zero, no more GraphicsExpose events follow for this window. However, if count is nonzero, at least that number of GraphicsExpose events (and possibly more) are to follow for this window. Window State Change Events The following sections discuss: CirculateNotify events ConfigureNotify events CreateNotify events DestroyNotify events GravityNotify events MapNotify events MappingNotify events ReparentNotify events UnmapNotify events VisibilityNotify events CirculateNotify Events EventsCirculateNotify CirculateNotify The X server can report CirculateNotify events to clients wanting information about when a window changes its position in the stack. The X server generates this event type whenever a window is actually restacked as a result of a client application calling , , or . To receive CirculateNotify events, set the StructureNotifyMask bit in the event-mask attribute of the window or the SubstructureNotifyMask bit in the event-mask attribute of the parent window (in which case, circulating any child generates an event). The structure for this event type contains: XCirculateEvent typedef struct { int type; /* CirculateNotify */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window event; Window window; int place; /* PlaceOnTop, PlaceOnBottom */ } XCirculateEvent; The event member is set either to the restacked window or to its parent, depending on whether StructureNotify or SubstructureNotify was selected. The window member is set to the window that was restacked. The place member is set to the window's position after the restack occurs and is either PlaceOnTop or PlaceOnBottom. If it is PlaceOnTop, the window is now on top of all siblings. If it is PlaceOnBottom, the window is now below all siblings. ConfigureNotify Events EventsConfigureNotify ConfigureNotify The X server can report ConfigureNotify events to clients wanting information about actual changes to a window's state, such as size, position, border, and stacking order. The X server generates this event type whenever one of the following configure window requests made by a client application actually completes: A window's size, position, border, and/or stacking order is reconfigured by calling . The window's position in the stacking order is changed by calling , , or . A window is moved by calling . A window's size is changed by calling . A window's size and location is changed by calling . A window is mapped and its position in the stacking order is changed by calling . A window's border width is changed by calling . To receive ConfigureNotify events, set the StructureNotifyMask bit in the event-mask attribute of the window or the SubstructureNotifyMask bit in the event-mask attribute of the parent window (in which case, configuring any child generates an event). The structure for this event type contains: XConfigureEvent typedef struct { int type; /* ConfigureNotify */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window event; Window window; int x, y; int width, height; int border_width; Window above; Bool override_redirect; } XConfigureEvent; The event member is set either to the reconfigured window or to its parent, depending on whether StructureNotify or SubstructureNotify was selected. The window member is set to the window whose size, position, border, and/or stacking order was changed. The x and y members are set to the coordinates relative to the parent window's origin and indicate the position of the upper-left outside corner of the window. The width and height members are set to the inside size of the window, not including the border. The border_width member is set to the width of the window's border, in pixels. The above member is set to the sibling window and is used for stacking operations. If the X server sets this member to None, the window whose state was changed is on the bottom of the stack with respect to sibling windows. However, if this member is set to a sibling window, the window whose state was changed is placed on top of this sibling window. The override_redirect member is set to the override-redirect attribute of the window. Window manager clients normally should ignore this window if the override_redirect member is True. CreateNotify Events EventsCreateNotify CreateNotify The X server can report CreateNotify events to clients wanting information about creation of windows. The X server generates this event whenever a client application creates a window by calling or . To receive CreateNotify events, set the SubstructureNotifyMask bit in the event-mask attribute of the window. Creating any children then generates an event. The structure for the event type contains: XCreateWindowEvent typedef struct { int type; /* CreateNotify */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window parent; /* parent of the window */ Window window; /* window id of window created */ int x, y; /* window location */ int width, height; /* size of window */ int border_width; /* border width */ Bool override_redirect; /* creation should be overridden */ } XCreateWindowEvent; The parent member is set to the created window's parent. The window member specifies the created window. The x and y members are set to the created window's coordinates relative to the parent window's origin and indicate the position of the upper-left outside corner of the created window. The width and height members are set to the inside size of the created window (not including the border) and are always nonzero. The border_width member is set to the width of the created window's border, in pixels. The override_redirect member is set to the override-redirect attribute of the window. Window manager clients normally should ignore this window if the override_redirect member is True. DestroyNotify Events EventsDestroyNotify DestroyNotify The X server can report DestroyNotify events to clients wanting information about which windows are destroyed. The X server generates this event whenever a client application destroys a window by calling or . The ordering of the DestroyNotify events is such that for any given window, DestroyNotify is generated on all inferiors of the window before being generated on the window itself. The X protocol does not constrain the ordering among siblings and across subhierarchies. To receive DestroyNotify events, set the StructureNotifyMask bit in the event-mask attribute of the window or the SubstructureNotifyMask bit in the event-mask attribute of the parent window (in which case, destroying any child generates an event). The structure for this event type contains: XDestroyWindowEvent typedef struct { int type; /* DestroyNotify */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window event; Window window; } XDestroyWindowEvent; The event member is set either to the destroyed window or to its parent, depending on whether StructureNotify or SubstructureNotify was selected. The window member is set to the window that is destroyed. GravityNotify Events EventsGravityNotify GravityNotify The X server can report GravityNotify events to clients wanting information about when a window is moved because of a change in the size of its parent. The X server generates this event whenever a client application actually moves a child window as a result of resizing its parent by calling , , or . To receive GravityNotify events, set the StructureNotifyMask bit in the event-mask attribute of the window or the SubstructureNotifyMask bit in the event-mask attribute of the parent window (in which case, any child that is moved because its parent has been resized generates an event). The structure for this event type contains: XGravityEvent typedef struct { int type; /* GravityNotify */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window event; Window window; int x, y; } XGravityEvent; The event member is set either to the window that was moved or to its parent, depending on whether StructureNotify or SubstructureNotify was selected. The window member is set to the child window that was moved. The x and y members are set to the coordinates relative to the new parent window's origin and indicate the position of the upper-left outside corner of the window. MapNotify Events EventsMapNotify MapNotify The X server can report MapNotify events to clients wanting information about which windows are mapped. The X server generates this event type whenever a client application changes the window's state from unmapped to mapped by calling , , , , or as a result of save-set processing. To receive MapNotify events, set the StructureNotifyMask bit in the event-mask attribute of the window or the SubstructureNotifyMask bit in the event-mask attribute of the parent window (in which case, mapping any child generates an event). The structure for this event type contains: XMapEvent typedef struct { int type; /* MapNotify */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window event; Window window; Bool override_redirect; /* boolean, is override set... */ } XMapEvent; The event member is set either to the window that was mapped or to its parent, depending on whether StructureNotify or SubstructureNotify was selected. The window member is set to the window that was mapped. The override_redirect member is set to the override-redirect attribute of the window. Window manager clients normally should ignore this window if the override-redirect attribute is True, because these events usually are generated from pop-ups, which override structure control. MappingNotify Events EventsMappingNotify MappingNotify The X server reports MappingNotify events to all clients. There is no mechanism to express disinterest in this event. The X server generates this event type whenever a client application successfully calls: to indicate which KeyCodes are to be used as modifiers to change the keyboard mapping to set the pointer mapping The structure for this event type contains: XMappingEvent typedef struct { int type; /* MappingNotify */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; /* unused */ int request; /* one of MappingModifier, MappingKeyboard, MappingPointer */ int first_keycode; /* first keycode */ int count; /* defines range of change w. first_keycode*/ } XMappingEvent; The request member is set to indicate the kind of mapping change that occurred and can be MappingModifier, MappingKeyboard, or MappingPointer. If it is MappingModifier, the modifier mapping was changed. If it is MappingKeyboard, the keyboard mapping was changed. If it is MappingPointer, the pointer button mapping was changed. The first_keycode and count members are set only if the request member was set to MappingKeyboard. The number in first_keycode represents the first number in the range of the altered mapping, and count represents the number of keycodes altered. To update the client application's knowledge of the keyboard, you should call . ReparentNotify Events EventsReparentNotify ReparentNotify The X server can report ReparentNotify events to clients wanting information about changing a window's parent. The X server generates this event whenever a client application calls and the window is actually reparented. To receive ReparentNotify events, set the StructureNotifyMask bit in the event-mask attribute of the window or the SubstructureNotifyMask bit in the event-mask attribute of either the old or the new parent window (in which case, reparenting any child generates an event). The structure for this event type contains: XReparentEvent typedef struct { int type; /* ReparentNotify */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window event; Window window; Window parent; int x, y; Bool override_redirect; } XReparentEvent; The event member is set either to the reparented window or to the old or the new parent, depending on whether StructureNotify or SubstructureNotify was selected. The window member is set to the window that was reparented. The parent member is set to the new parent window. The x and y members are set to the reparented window's coordinates relative to the new parent window's origin and define the upper-left outer corner of the reparented window. The override_redirect member is set to the override-redirect attribute of the window specified by the window member. Window manager clients normally should ignore this window if the override_redirect member is True. UnmapNotify Events EventsUnmapNotify UnmapNotify The X server can report UnmapNotify events to clients wanting information about which windows are unmapped. The X server generates this event type whenever a client application changes the window's state from mapped to unmapped. To receive UnmapNotify events, set the StructureNotifyMask bit in the event-mask attribute of the window or the SubstructureNotifyMask bit in the event-mask attribute of the parent window (in which case, unmapping any child window generates an event). The structure for this event type contains: XUnmapEvent typedef struct { int type; /* UnmapNotify */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window event; Window window; Bool from_configure; } XUnmapEvent; The event member is set either to the unmapped window or to its parent, depending on whether StructureNotify or SubstructureNotify was selected. This is the window used by the X server to report the event. The window member is set to the window that was unmapped. The from_configure member is set to True if the event was generated as a result of a resizing of the window's parent when the window itself had a win_gravity of UnmapGravity. VisibilityNotify Events EventsVisibilityNotify VisibilityNotify The X server can report VisibilityNotify events to clients wanting any change in the visibility of the specified window. A region of a window is visible if someone looking at the screen can actually see it. The X server generates this event whenever the visibility changes state. However, this event is never generated for windows whose class is InputOnly. All VisibilityNotify events caused by a hierarchy change are generated after any hierarchy event (UnmapNotify, MapNotify, ConfigureNotify, GravityNotify, CirculateNotify) caused by that change. Any VisibilityNotify event on a given window is generated before any Expose events on that window, but it is not required that all VisibilityNotify events on all windows be generated before all Expose events on all windows. The X protocol does not constrain the ordering of VisibilityNotify events with respect to FocusOut, EnterNotify, and LeaveNotify events. To receive VisibilityNotify events, set the VisibilityChangeMask bit in the event-mask attribute of the window. The structure for this event type contains: XVisibilityEvent typedef struct { int type; /* VisibilityNotify */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; int state; } XVisibilityEvent; The window member is set to the window whose visibility state changes. The state member is set to the state of the window's visibility and can be VisibilityUnobscured, VisibilityPartiallyObscured, or VisibilityFullyObscured. The X server ignores all of a window's subwindows when determining the visibility state of the window and processes VisibilityNotify events according to the following: When the window changes state from partially obscured, fully obscured, or not viewable to viewable and completely unobscured, the X server generates the event with the state member of the XVisibilityEvent structure set to VisibilityUnobscured. When the window changes state from viewable and completely unobscured or not viewable to viewable and partially obscured, the X server generates the event with the state member of the XVisibilityEvent structure set to VisibilityPartiallyObscured. When the window changes state from viewable and completely unobscured, viewable and partially obscured, or not viewable to viewable and fully obscured, the X server generates the event with the state member of the XVisibilityEvent structure set to VisibilityFullyObscured. Structure Control Events This section discusses: CirculateRequest events ConfigureRequest events MapRequest events ResizeRequest events CirculateRequest Events EventsCirculateRequest CirculateRequest The X server can report CirculateRequest events to clients wanting information about when another client initiates a circulate window request on a specified window. The X server generates this event type whenever a client initiates a circulate window request on a window and a subwindow actually needs to be restacked. The client initiates a circulate window request on the window by calling , , or . To receive CirculateRequest events, set the SubstructureRedirectMask in the event-mask attribute of the window. Then, in the future, the circulate window request for the specified window is not executed, and thus, any subwindow's position in the stack is not changed. For example, suppose a client application calls to raise a subwindow to the top of the stack. If you had selected SubstructureRedirectMask on the window, the X server reports to you a CirculateRequest event and does not raise the subwindow to the top of the stack. The structure for this event type contains: XCirculateRequestEvent typedef struct { int type; /* CirculateRequest */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window parent; Window window; int place; /* PlaceOnTop, PlaceOnBottom */ } XCirculateRequestEvent; The parent member is set to the parent window. The window member is set to the subwindow to be restacked. The place member is set to what the new position in the stacking order should be and is either PlaceOnTop or PlaceOnBottom. If it is PlaceOnTop, the subwindow should be on top of all siblings. If it is PlaceOnBottom, the subwindow should be below all siblings. ConfigureRequest Events EventsConfigureRequest ConfigureRequest The X server can report ConfigureRequest events to clients wanting information about when a different client initiates a configure window request on any child of a specified window. The configure window request attempts to reconfigure a window's size, position, border, and stacking order. The X server generates this event whenever a different client initiates a configure window request on a window by calling , , , , , , , , or . To receive ConfigureRequest events, set the SubstructureRedirectMask bit in the event-mask attribute of the window. ConfigureRequest events are generated when a ConfigureWindow protocol request is issued on a child window by another client. For example, suppose a client application calls to lower a window. If you had selected SubstructureRedirectMask on the parent window and if the override-redirect attribute of the window is set to False, the X server reports a ConfigureRequest event to you and does not lower the specified window. The structure for this event type contains: XConfigureRequestEvent typedef struct { int type; /* ConfigureRequest */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window parent; Window window; int x, y; int width, height; int border_width; Window above; int detail; /* Above, Below, TopIf, BottomIf, Opposite */ unsigned long value_mask; } XConfigureRequestEvent; The parent member is set to the parent window. The window member is set to the window whose size, position, border width, and/or stacking order is to be reconfigured. The value_mask member indicates which components were specified in the ConfigureWindow protocol request. The corresponding values are reported as given in the request. The remaining values are filled in from the current geometry of the window, except in the case of above (sibling) and detail (stack-mode), which are reported as None and Above, respectively, if they are not given in the request. MapRequest Events EventsMapRequest MapRequest The X server can report MapRequest events to clients wanting information about a different client's desire to map windows. A window is considered mapped when a map window request completes. The X server generates this event whenever a different client initiates a map window request on an unmapped window whose override_redirect member is set to False. Clients initiate map window requests by calling , , or . To receive MapRequest events, set the SubstructureRedirectMask bit in the event-mask attribute of the window. This means another client's attempts to map a child window by calling one of the map window request functions is intercepted, and you are sent a MapRequest instead. For example, suppose a client application calls to map a window. If you (usually a window manager) had selected SubstructureRedirectMask on the parent window and if the override-redirect attribute of the window is set to False, the X server reports a MapRequest event to you and does not map the specified window. Thus, this event gives your window manager client the ability to control the placement of subwindows. The structure for this event type contains: XMapRequestEvent typedef struct { int type; /* MapRequest */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window parent; Window window; } XMapRequestEvent; The parent member is set to the parent window. The window member is set to the window to be mapped. ResizeRequest Events EventsResizeRequest ResizeRequest The X server can report ResizeRequest events to clients wanting information about another client's attempts to change the size of a window. The X server generates this event whenever some other client attempts to change the size of the specified window by calling , , or . To receive ResizeRequest events, set the ResizeRedirect bit in the event-mask attribute of the window. Any attempts to change the size by other clients are then redirected. The structure for this event type contains: XResizeRequestEvent typedef struct { int type; /* ResizeRequest */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; int width, height; } XResizeRequestEvent; The window member is set to the window whose size another client attempted to change. The width and height members are set to the inside size of the window, excluding the border. Colormap State Change Events EventsColormapNotify ColormapNotify The X server can report ColormapNotify events to clients wanting information about when the colormap changes and when a colormap is installed or uninstalled. The X server generates this event type whenever a client application: Changes the colormap member of the XSetWindowAttributes structure by calling , , or Installs or uninstalls the colormap by calling or To receive ColormapNotify events, set the ColormapChangeMask bit in the event-mask attribute of the window. The structure for this event type contains: XColormapEvent typedef struct { int type; /* ColormapNotify */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; Colormap colormap; /* colormap or None */ Bool new; int state; /* ColormapInstalled, ColormapUninstalled */ } XColormapEvent; The window member is set to the window whose associated colormap is changed, installed, or uninstalled. For a colormap that is changed, installed, or uninstalled, the colormap member is set to the colormap associated with the window. For a colormap that is changed by a call to , the colormap member is set to None. The new member is set to indicate whether the colormap for the specified window was changed or installed or uninstalled and can be True or False. If it is True, the colormap was changed. If it is False, the colormap was installed or uninstalled. The state member is always set to indicate whether the colormap is installed or uninstalled and can be ColormapInstalled or ColormapUninstalled. Client Communication Events This section discusses: ClientMessage events PropertyNotify events SelectionClear events SelectionNotify events SelectionRequest events ClientMessage Events EventsClientMessage ClientMessage The X server generates ClientMessage events only when a client calls the function . The structure for this event type contains: XClientMessageEvent typedef struct { int type; /* ClientMessage */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; Atom message_type; int format; union { char b[20]; short s[10]; long l[5]; } data; } XClientMessageEvent; The message_type member is set to an atom that indicates how the data should be interpreted by the receiving client. The format member is set to 8, 16, or 32 and specifies whether the data should be viewed as a list of bytes, shorts, or longs. The data member is a union that contains the members b, s, and l. The b, s, and l members represent data of twenty 8-bit values, ten 16-bit values, and five 32-bit values. Particular message types might not make use of all these values. The X server places no interpretation on the values in the window, message_type, or data members. PropertyNotify Events EventsPropertyNotify PropertyNotify The X server can report PropertyNotify events to clients wanting information about property changes for a specified window. To receive PropertyNotify events, set the PropertyChangeMask bit in the event-mask attribute of the window. The structure for this event type contains: XPropertyEvent typedef struct { int type; /* PropertyNotify */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; Atom atom; Time time; int state; /* PropertyNewValue or PropertyDelete */ } XPropertyEvent; The window member is set to the window whose associated property was changed. The atom member is set to the property's atom and indicates which property was changed or desired. The time member is set to the server time when the property was changed. The state member is set to indicate whether the property was changed to a new value or deleted and can be PropertyNewValue or PropertyDelete. The state member is set to PropertyNewValue when a property of the window is changed using or (even when adding zero-length data using ) and when replacing all or part of a property with identical data using or . The state member is set to PropertyDelete when a property of the window is deleted using or, if the delete argument is True, . SelectionClear Events EventsSelectionClear SelectionClear The X server reports SelectionClear events to the client losing ownership of a selection. The X server generates this event type when another client asserts ownership of the selection by calling . The structure for this event type contains: XSelectionClearEvent typedef struct { int type; /* SelectionClear */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; Atom selection; Time time; } XSelectionClearEvent; The selection member is set to the selection atom. The time member is set to the last change time recorded for the selection. The window member is the window that was specified by the current owner (the owner losing the selection) in its call. SelectionRequest Events EventsSelectionRequest SelectionRequest The X server reports SelectionRequest events to the owner of a selection. The X server generates this event whenever a client requests a selection conversion by calling for the owned selection. The structure for this event type contains: XSelectionRequestEvent typedef struct { int type; /* SelectionRequest */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window owner; Window requestor; Atom selection; Atom target; Atom property; Time time; } XSelectionRequestEvent; The owner member is set to the window that was specified by the current owner in its call. The requestor member is set to the window requesting the selection. The selection member is set to the atom that names the selection. For example, PRIMARY is used to indicate the primary selection. The target member is set to the atom that indicates the type the selection is desired in. The property member can be a property name or None. The time member is set to the timestamp or CurrentTime value from the ConvertSelection request. The owner should convert the selection based on the specified target type and send a SelectionNotify event back to the requestor. A complete specification for using selections is given in the X Consortium standard Inter-Client Communication Conventions Manual. SelectionNotify Events EventsSelectionNotify SelectionNotify This event is generated by the X server in response to a ConvertSelection protocol request when there is no owner for the selection. When there is an owner, it should be generated by the owner of the selection by using . The owner of a selection should send this event to a requestor when a selection has been converted and stored as a property or when a selection conversion could not be performed (which is indicated by setting the property member to None). If None is specified as the property in the ConvertSelection protocol request, the owner should choose a property name, store the result as that property on the requestor window, and then send a SelectionNotify giving that actual property name. The structure for this event type contains: XSelectionEvent typedef struct { int type; /* SelectionNotify */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window requestor; Atom selection; Atom target; Atom property; /* atom or None */ Time time; } XSelectionEvent; The requestor member is set to the window associated with the requestor of the selection. The selection member is set to the atom that indicates the selection. For example, PRIMARY is used for the primary selection. The target member is set to the atom that indicates the converted type. For example, PIXMAP is used for a pixmap. The property member is set to the atom that indicates which property the result was stored on. If the conversion failed, the property member is set to None. The time member is set to the time the conversion took place and can be a timestamp or CurrentTime. } data; } XClientMessageEvent; The message_type member is set to an atom that indicates how the data should be interpreted by the receiving client. The format member is set to 8, 16, or 32 and specifies whether the data should be viewed as a list libX11-1.6.3/specs/libX11/AppA.xml000064401431060000012000002166611247741723500166120ustar00alancstaff00002660200006 Xlib Functions and Protocol Requests This appendix provides two tables that relate to Xlib functions and the X protocol. The following table lists each Xlib function (in alphabetical order) and the corresponding protocol request that it generates. Protocol requests made by each Xlib function Xlib Function Protocol Request ForceScreenSaver ChangeHosts ChangeHosts ChangeSaveSet AllocColor AllocColorCells AllocColorPlanes AllocNamedColor AllowEvents ChangeKeyboardControl ChangeKeyboardControl Bell ChangeActivePointerGrab ChangeGC ChangeKeyboardControl ChangeKeyboardMapping ChangePointerControl ChangeProperty ChangeSaveSet ChangeWindowAttributes CirculateWindow CirculateWindow CirculateWindow ClearArea ClearArea ConfigureWindow ConvertSelection CopyArea CopyColormapAndFree CopyGC CopyPlane CreateGC CreatePixmap FreeGC PutImage CreateColormap CreateGlyphCursor CreateGC CreateGlyphCursor CreatePixmap CreateCursor XCreatePixmapFromData CreateGC CreatePixmap FreeGC PutImage CreateWindow CreateWindow ChangeWindowAttributes DeleteProperty DestroySubwindows DestroyWindow SetAccessControl PolyArc PolyArc ImageText8 ImageText16 PolySegment PolyLine PolyPoint PolyPoint PolyRectangle PolyRectangle PolySegment PolyText8 PolyText16 PolyText8 PolyText16 SetAccessControl GetProperty GetProperty PolyFillArc PolyFillArc FillPoly PolyFillRectangle PolyFillRectangle ForceScreenSaver FreeColormap FreeColors FreeCursor CloseFont FreeGC FreePixmap GetAtomName GetProperty GetFontPath GetGeometry GetProperty GetProperty GetImage GetInputFocus GetKeyboardControl GetKeyboardMapping GetModifierMapping GetMotionEvents GetProperty GetPointerControl GetPointerMapping GetProperty GetScreenSaver GetSelectionOwner GetProperty GetProperty GetProperty GetProperty GetProperty InternAtom GetProperty GetProperty GetProperty GetProperty GetProperty InternAtom GetProperty GetWindowAttributes GetGeometry GetProperty GetProperty GrabButton GrabKey GrabKeyboard GrabPointer GrabServer InternAtom SendEvent QueryExtension InstallColormap InternAtom KillClient ListExtensions ListFonts ListFontsWithInfo ListHosts ListInstalledColormaps ListProperties OpenFont OpenFont QueryFont LookupColor ConfigureWindow ConfigureWindow MapWindow MapSubwindows MapWindow ConfigureWindow ConfigureWindow NoOperation CreateGC LookupColor PutImage QueryBestSize QueryBestSize QueryBestSize QueryBestSize QueryColors QueryColors QueryExtension QueryFont QueryKeymap QueryPointer QueryTextExtents QueryTextExtents QueryTree ConfigureWindow CreateGC CreatePixmap FreeGC PutImage RecolorCursor ConfigureWindow SendEvent ChangeSaveSet ChangeHosts ChangeHosts ReparentWindow ForceScreenSaver ConfigureWindow ConfigureWindow RotateProperties RotateProperties ChangeWindowAttributes SendEvent SetAccessControl ChangeGC ChangeGC ChangeProperty ChangeGC ChangeGC SetClipRectangles SetCloseDownMode ChangeProperty SetDashes ChangeGC ChangeGC ChangeGC SetFontPath ChangeGC ChangeGC ChangeGC ChangeProperty ChangeProperty SetInputFocus ChangeGC SetModifierMapping ChangeProperty ChangeGC SetPointerMapping ChangeProperty SetScreenSaver SetSelectionOwner ChangeProperty ChangeProperty ChangeGC ChangeGC ChangeGC ChangeProperty ChangeGC ChangeProperty ChangeGC ChangeProperty ChangeProperty InternAtom ChangeProperty ChangeProperty ChangeProperty ChangeProperty ChangeProperty ChangeProperty InternAtom ChangeProperty ChangeWindowAttributes ChangeWindowAttributes ChangeWindowAttributes ChangeWindowAttributes ConfigureWindow ChangeWindowAttributes ChangeProperty ChangeProperty ChangeProperty StoreColors StoreColors ChangeProperty StoreNamedColor GetInputFocus XSynchronize GetInputFocus TranslateCoordinates ChangeWindowAttributes UngrabButton UngrabKey UngrabKeyboard UngrabPointer UngrabServer UninstallColormap CloseFont UnmapSubwindows UnmapWindow WarpPointer SendEvent UnmapWindow
The following table lists each X protocol request (in alphabetical order) and the Xlib functions that reference it. Xlib functions which use each Protocol Request Protocol Request Xlib Function AllocColor AllocColorCells AllocColorPlanes AllocNamedColor AllowEvents Bell ChangeActivePointerGrab ChangeGC ChangeHosts ChangeKeyboardControl ChangeKeyboardMapping ChangePointerControl ChangeProperty ChangeSaveSet ChangeWindowAttributes CirculateWindow ClearArea CloseFont ConfigureWindow ConvertSelection CopyArea CopyColormapAndFree CopyGC CopyPlane CreateColormap CreateCursor CreateGC XCreatePixmapFromData CreateGlyphCursor CreatePixmap XCreatePixmapFromData CreateWindow DeleteProperty DestroySubwindows DestroyWindow FillPoly ForceScreenSaver FreeColormap FreeColors FreeCursor FreeGC XCreatePixmapFromData FreePixmap GetAtomName GetFontPath GetGeometry GetImage GetInputFocus XSynchronize GetKeyboardControl GetKeyboardMapping GetModifierMapping GetMotionEvents GetPointerControl GetPointerMapping GetProperty GetSelectionOwner GetWindowAttributes GrabButton GrabKey GrabKeyboard GrabPointer GrabServer ImageText8 ImageText16 InstallColormap InternAtom KillClient ListExtensions ListFonts ListFontsWithInfo ListHosts ListInstalledColormaps ListProperties LookupColor MapSubwindows MapWindow NoOperation OpenFont PolyArc PolyFillArc PolyFillRectangle PolyLine PolyPoint PolyRectangle PolySegment PolyText8 PolyText16 PutImage XCreatePixmapFromData QueryBestSize QueryColors QueryExtension QueryFont QueryKeymap QueryPointer QueryTextExtents QueryTree RecolorCursor ReparentWindow RotateProperties SendEvent SetAccessControl SetClipRectangles SetCloseDownMode SetDashes SetFontPath SetInputFocus SetModifierMapping SetPointerMapping SetScreenSaver SetSelectionOwner StoreColors StoreNamedColor TranslateCoordinates UngrabButton UngrabKey UngrabKeyboard UngrabPointer UngrabServer UninstallColormap UnmapSubwindows XUnmapSubWindows UnmapWindow WarpPointer
select: title'/> NoOperatilibX11-1.6.3/specs/libX11/CH08.xml000064401431060000012000004733611247741723500164350ustar00alancstaff00002660200006 Graphics Functions Once you have established a connection to a display, you can use the Xlib graphics functions to: Clear and copy areas Draw points, lines, rectangles, and arcs Fill areas Manipulate fonts Draw text Transfer images between clients and the server If the same drawable and GC is used for each call, Xlib batches back-to-back calls to XDrawPoint, XDrawLine, XDrawRectangle, XFillArc, and XFillRectangle. Note that this reduces the total number of requests sent to the server. Clearing Areas Xlib provides functions that you can use to clear an area or the entire window. Because pixmaps do not have defined backgrounds, they cannot be filled by using the functions described in this section. Instead, to accomplish an analogous operation on a pixmap, you should use , which sets the pixmap to a known value. To clear a rectangular area of a given window, use . Areasclearing Clearingareas XClearArea XClearArea Display *display Window w int x int y unsigned int width unsigned int height Bool exposures display Specifies the connection to the X server. w Specifies the window. x y Specify the x and y coordinates, which are relative to the origin of the window and specify the upper-left corner of the rectangle. width height Specify the width and height, which are the dimensions of the rectangle. exposures Specifies a Boolean value that indicates if Expose events are to be generated. The function paints a rectangular area in the specified window according to the specified dimensions with the window's background pixel or pixmap. The subwindow-mode effectively is ClipByChildren. If width is zero, it is replaced with the current width of the window minus x. If height is zero, it is replaced with the current height of the window minus y. If the window has a defined background tile, the rectangle clipped by any children is filled with this tile. If the window has background None, the contents of the window are not changed. In either case, if exposures is True, one or more Expose events are generated for regions of the rectangle that are either visible or are being retained in a backing store. If you specify a window whose class is InputOnly, a BadMatch error results. can generate BadMatch, BadValue, and BadWindow errors. To clear the entire area in a given window, use . Windowclearing Clearingwindows XClearWindow XClearWindow Display *display Window w display Specifies the connection to the X server. w Specifies the window. The function clears the entire area in the specified window and is equivalent to (display, w, 0, 0, 0, 0, False). If the window has a defined background tile, the rectangle is tiled with a plane-mask of all ones and GXcopy function. If the window has background None, the contents of the window are not changed. If you specify a window whose class is InputOnly, a BadMatch error results. can generate BadMatch and BadWindow errors. Copying Areas Xlib provides functions that you can use to copy an area or a bit plane. To copy an area between drawables of the same root and depth, use . Areascopying Copyingareas XCopyArea XCopyArea Display *display Drawablesrc, dest GC gc intsrc_x, src_y unsigned int width unsigned int height intdest_x, dest_y display Specifies the connection to the X server. src dest Specify the source and destination rectangles to be combined. gc Specifies the GC. src_x src_y Specify the x and y coordinates, which are relative to the origin of the source rectangle and specify its upper-left corner. width height Specify the width and height, which are the dimensions of both the source and destination rectangles. dest_x dest_y Specify the x and y coordinates, which are relative to the origin of the destination rectangle and specify its upper-left corner. The function combines the specified rectangle of src with the specified rectangle of dest. The drawables must have the same root and depth, or a BadMatch error results. If regions of the source rectangle are obscured and have not been retained in backing store or if regions outside the boundaries of the source drawable are specified, those regions are not copied. Instead, the following occurs on all corresponding destination regions that are either visible or are retained in backing store. If the destination is a window with a background other than None, corresponding regions of the destination are tiled with that background (with plane-mask of all ones and GXcopy function). Regardless of tiling or whether the destination is a window or a pixmap, if graphics-exposures is True, then GraphicsExpose events for all corresponding destination regions are generated. If graphics-exposures is True but no GraphicsExpose events are generated, a NoExpose event is generated. Note that by default graphics-exposures is True in new GCs. This function uses these GC components: function, plane-mask, subwindow-mode, graphics-exposures, clip-x-origin, clip-y-origin, and clip-mask. can generate BadDrawable, BadGC, and BadMatch errors. To copy a single bit plane of a given drawable, use . Planecopying Copyingplanes XCopyPlane XCopyPlane Display *display Drawablesrc, dest GC gc intsrc_x, src_y unsigned int width unsigned int height intdest_x, dest_y unsigned long plane display Specifies the connection to the X server. src dest Specify the source and destination rectangles to be combined. gc Specifies the GC. src_x src_y Specify the x and y coordinates, which are relative to the origin of the source rectangle and specify its upper-left corner. width height Specify the width and height, which are the dimensions of both the source and destination rectangles. dest_x dest_y Specify the x and y coordinates, which are relative to the origin of the destination rectangle and specify its upper-left corner. plane Specifies the bit plane. You must set exactly one bit to 1. The function uses a single bit plane of the specified source rectangle combined with the specified GC to modify the specified rectangle of dest. The drawables must have the same root but need not have the same depth. If the drawables do not have the same root, a BadMatch error results. If plane does not have exactly one bit set to 1 and the value of plane is not less than %2 sup n%, where n is the depth of src, a BadValue error results. Effectively, forms a pixmap of the same depth as the rectangle of dest and with a size specified by the source region. It uses the foreground/background pixels in the GC (foreground everywhere the bit plane in src contains a bit set to 1, background everywhere the bit plane in src contains a bit set to 0) and the equivalent of a CopyArea protocol request is performed with all the same exposure semantics. This can also be thought of as using the specified region of the source bit plane as a stipple with a fill-style of FillOpaqueStippled for filling a rectangular area of the destination. This function uses these GC components: function, plane-mask, foreground, background, subwindow-mode, graphics-exposures, clip-x-origin, clip-y-origin, and clip-mask. can generate BadDrawable, BadGC, BadMatch, and BadValue errors. Drawing Points, Lines, Rectangles, and Arcs Xlib provides functions that you can use to draw: A single point or multiple points A single line or multiple lines A single rectangle or multiple rectangles A single arc or multiple arcs Some of the functions described in the following sections use these structures: XSegment typedef struct { short x1, y1, x2, y2; } XSegment; XPoint typedef struct { short x, y; } XPoint; XRectangle typedef struct { short x, y; unsigned short width, height; } XRectangle; XArc typedef struct { short x, y; unsigned short width, height; short angle1, angle2; /* Degrees * 64 */ } XArc; All x and y members are signed integers. The width and height members are 16-bit unsigned integers. You should be careful not to generate coordinates and sizes out of the 16-bit ranges, because the protocol only has 16-bit fields for these values. Drawing Single and Multiple Points Pointsdrawing Drawingpoints XDrawPoints XDrawPoint To draw a single point in a given drawable, use . XDrawPoint XDrawPoint Display *display Drawable d GC gc int x int y display Specifies the connection to the X server. d Specifies the drawable. gc Specifies the GC. x y Specify the x and y coordinates where you want the point drawn. To draw multiple points in a given drawable, use . XDrawPoints XDrawPoints Display *display Drawable d GC gc XPoint *points int npoints int mode display Specifies the connection to the X server. d Specifies the drawable. gc Specifies the GC. points Specifies an array of points. npoints Specifies the number of points in the array. mode Specifies the coordinate mode. You can pass CoordModeOrigin or CoordModePrevious. The function uses the foreground pixel and function components of the GC to draw a single point into the specified drawable; draws multiple points this way. CoordModeOrigin treats all coordinates as relative to the origin, and CoordModePrevious treats all coordinates after the first as relative to the previous point. draws the points in the order listed in the array. Both functions use these GC components: function, plane-mask, foreground, subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask. can generate BadDrawable, BadGC, and BadMatch errors. can generate BadDrawable, BadGC, BadMatch, and BadValue errors. Drawing Single and Multiple Lines Linesdrawing Drawinglines XDrawLine XDrawLines Polygonsdrawing Drawingpolygons XDrawSegments To draw a single line between two points in a given drawable, use . XDrawLine XDrawLine Display *display Drawable d GC gc intx1,y1,x2, y2 display Specifies the connection to the X server. d Specifies the drawable. gc Specifies the GC. x1 y1 x2 y2 Specify the points (x1, y1) and (x2, y2) to be connected. To draw multiple lines in a given drawable, use . XDrawLines XDrawLines Display *display Drawable d GC gc XPoint *points int npoints int mode display Specifies the connection to the X server. d Specifies the drawable. gc Specifies the GC. points Specifies an array of points. npoints Specifies the number of points in the array. mode Specifies the coordinate mode. You can pass CoordModeOrigin or CoordModePrevious. To draw multiple, unconnected lines in a given drawable, use . XDrawSegments XDrawSegments Display *display Drawable d GC gc XSegment *segments int nsegments display Specifies the connection to the X server. d Specifies the drawable. gc Specifies the GC. segments Specifies an array of segments. nsegments Specifies the number of segments in the array. The function uses the components of the specified GC to draw a line between the specified set of points (x1, y1) and (x2, y2). It does not perform joining at coincident endpoints. For any given line, does not draw a pixel more than once. If lines intersect, the intersecting pixels are drawn multiple times. The function uses the components of the specified GC to draw npoints-1 lines between each pair of points (point[i], point[i+1]) in the array of XPoint structures. It draws the lines in the order listed in the array. The lines join correctly at all intermediate points, and if the first and last points coincide, the first and last lines also join correctly. For any given line, does not draw a pixel more than once. If thin (zero line-width) lines intersect, the intersecting pixels are drawn multiple times. If wide lines intersect, the intersecting pixels are drawn only once, as though the entire PolyLine protocol request were a single, filled shape. CoordModeOrigin treats all coordinates as relative to the origin, and CoordModePrevious treats all coordinates after the first as relative to the previous point. The function draws multiple, unconnected lines. For each segment, draws a line between (x1, y1) and (x2, y2). It draws the lines in the order listed in the array of XSegment structures and does not perform joining at coincident endpoints. For any given line, does not draw a pixel more than once. If lines intersect, the intersecting pixels are drawn multiple times. All three functions use these GC components: function, plane-mask, line-width, line-style, cap-style, fill-style, subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask. The function also uses the join-style GC component. All three functions also use these GC mode-dependent components: foreground, background, tile, stipple, tile-stipple-x-origin, tile-stipple-y-origin, dash-offset, and dash-list. , , and can generate BadDrawable, BadGC, and BadMatch errors. also can generate BadValue errors. Drawing Single and Multiple Rectangles Rectanglesdrawing Drawingrectangles XDrawRectangle XDrawRectangles To draw the outline of a single rectangle in a given drawable, use . XDrawRectangle XDrawRectangle Display *display Drawable d GC gc int x int y unsigned int width unsigned int height display Specifies the connection to the X server. d Specifies the drawable. gc Specifies the GC. x y Specify the x and y coordinates, which specify the upper-left corner of the rectangle. width height Specify the width and height, which specify the dimensions of the rectangle. To draw the outline of multiple rectangles in a given drawable, use . XDrawRectangles XDrawRectangles Display *display Drawable d GC gc XRectangle rectangles[] int nrectangles display Specifies the connection to the X server. d Specifies the drawable. gc Specifies the GC. rectangles Specifies an array of rectangles. nrectangles Specifies the number of rectangles in the array. The and functions draw the outlines of the specified rectangle or rectangles as if a five-point PolyLine protocol request were specified for each rectangle: [x,y] [x+width,y] [x+width,y+height] [x,y+height] [x,y] For the specified rectangle or rectangles, these functions do not draw a pixel more than once. draws the rectangles in the order listed in the array. If rectangles intersect, the intersecting pixels are drawn multiple times. Both functions use these GC components: function, plane-mask, line-width, line-style, cap-style, join-style, fill-style, subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask. They also use these GC mode-dependent components: foreground, background, tile, stipple, tile-stipple-x-origin, tile-stipple-y-origin, dash-offset, and dash-list. and can generate BadDrawable, BadGC, and BadMatch errors. Drawing Single and Multiple Arcs Drawingarcs XDrawArc Arcsdrawing XDrawArcs To draw a single arc in a given drawable, use . XDrawArc XDrawArc Display *display Drawable d GC gc int x int y unsigned int width unsigned int height intangle1, angle2 display Specifies the connection to the X server. d Specifies the drawable. gc Specifies the GC. x y Specify the x and y coordinates, which are relative to the origin of the drawable and specify the upper-left corner of the bounding rectangle. width height Specify the width and height, which are the major and minor axes of the arc. angle1 Specifies the start of the arc relative to the three-o'clock position from the center, in units of degrees * 64. angle2 Specifies the path and extent of the arc relative to the start of the arc, in units of degrees * 64. To draw multiple arcs in a given drawable, use . XDrawArcs XDrawArcs Display *display Drawable d GC gc XArc *arcs int narcs display Specifies the connection to the X server. d Specifies the drawable. gc Specifies the GC. arcs Specifies an array of arcs. narcs Specifies the number of arcs in the array. delim %% draws a single circular or elliptical arc, and draws multiple circular or elliptical arcs. Each arc is specified by a rectangle and two angles. The center of the circle or ellipse is the center of the rectangle, and the major and minor axes are specified by the width and height. Positive angles indicate counterclockwise motion, and negative angles indicate clockwise motion. If the magnitude of angle2 is greater than 360 degrees, or truncates it to 360 degrees. For an arc specified as %[ ~x, ~y, ~width , ~height, ~angle1, ~angle2 ]%, the origin of the major and minor axes is at % [ x +^ {width over 2} , ~y +^ {height over 2} ]%, and the infinitely thin path describing the entire circle or ellipse intersects the horizontal axis at % [ x, ~y +^ {height over 2} ]% and % [ x +^ width , ~y +^ { height over 2 }] % and intersects the vertical axis at % [ x +^ { width over 2 } , ~y ]% and % [ x +^ { width over 2 }, ~y +^ height ]%. These coordinates can be fractional and so are not truncated to discrete coordinates. The path should be defined by the ideal mathematical path. For a wide line with line-width lw, the bounding outlines for filling are given by the two infinitely thin paths consisting of all points whose perpendicular distance from the path of the circle/ellipse is equal to lw/2 (which may be a fractional value). The cap-style and join-style are applied the same as for a line corresponding to the tangent of the circle/ellipse at the endpoint. For an arc specified as % [ ~x, ~y, ~width, ~height, ~angle1, ~angle2 ]%, the angles must be specified in the effectively skewed coordinate system of the ellipse (for a circle, the angles and coordinate systems are identical). The relationship between these angles and angles expressed in the normal coordinate system of the screen (as measured with a protractor) is as follows: % roman "skewed-angle" ~ = ~ atan left ( tan ( roman "normal-angle" ) * width over height right ) +^ adjust% The skewed-angle and normal-angle are expressed in radians (rather than in degrees scaled by 64) in the range % [ 0 , ~2 pi ]% and where atan returns a value in the range % [ - pi over 2 , ~pi over 2 ] % and adjust is: %0% for normal-angle in the range % [ 0 , ~pi over 2 ]% %pi% for normal-angle in the range % [ pi over 2 , ~{3 pi} over 2 ]% %2 pi% for normal-angle in the range % [ {3 pi} over 2 , ~2 pi ]% For any given arc, and do not draw a pixel more than once. If two arcs join correctly and if the line-width is greater than zero and the arcs intersect, and do not draw a pixel more than once. Otherwise, the intersecting pixels of intersecting arcs are drawn multiple times. Specifying an arc with one endpoint and a clockwise extent draws the same pixels as specifying the other endpoint and an equivalent counterclockwise extent, except as it affects joins. If the last point in one arc coincides with the first point in the following arc, the two arcs will join correctly. If the first point in the first arc coincides with the last point in the last arc, the two arcs will join correctly. By specifying one axis to be zero, a horizontal or vertical line can be drawn. Angles are computed based solely on the coordinate system and ignore the aspect ratio. Both functions use these GC components: function, plane-mask, line-width, line-style, cap-style, join-style, fill-style, subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask. They also use these GC mode-dependent components: foreground, background, tile, stipple, tile-stipple-x-origin, tile-stipple-y-origin, dash-offset, and dash-list. and can generate BadDrawable, BadGC, and BadMatch errors. Filling Areas Xlib provides functions that you can use to fill: A single rectangle or multiple rectangles A single polygon A single arc or multiple arcs Filling Single and Multiple Rectangles Fillingrectangles XFillRectangle Rectanglefilling XFillRectangles To fill a single rectangular area in a given drawable, use . XFillRectangle XFillRectangle Display *display Drawable d GC gc int x int y unsigned int width unsigned int height display Specifies the connection to the X server. d Specifies the drawable. gc Specifies the GC. x y Specify the x and y coordinates, which are relative to the origin of the drawable and specify the upper-left corner of the rectangle. width height Specify the width and height, which are the dimensions of the rectangle to be filled. To fill multiple rectangular areas in a given drawable, use . XFillRectangles XFillRectangles Display *display Drawable d GC gc XRectangle *rectangles int nrectangles display Specifies the connection to the X server. d Specifies the drawable. gc Specifies the GC. rectangles Specifies an array of rectangles. nrectangles Specifies the number of rectangles in the array. The and functions fill the specified rectangle or rectangles as if a four-point FillPolygon protocol request were specified for each rectangle: [x,y] [x+width,y] [x+width,y+height] [x,y+height] Each function uses the x and y coordinates, width and height dimensions, and GC you specify. fills the rectangles in the order listed in the array. For any given rectangle, and do not draw a pixel more than once. If rectangles intersect, the intersecting pixels are drawn multiple times. Both functions use these GC components: function, plane-mask, fill-style, subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask. They also use these GC mode-dependent components: foreground, background, tile, stipple, tile-stipple-x-origin, and tile-stipple-y-origin. and can generate BadDrawable, BadGC, and BadMatch errors. Filling a Single Polygon To fill a polygon area in a given drawable, use . Polygonsfilling Fillingpolygon XFillPolygon XFillPolygon Display *display Drawable d GC gc XPoint *points int npoints int shape int mode display Specifies the connection to the X server. d Specifies the drawable. gc Specifies the GC. points Specifies an array of points. npoints Specifies the number of points in the array. shape Specifies a shape that helps the server to improve performance. You can pass Complex, Convex, or Nonconvex. mode Specifies the coordinate mode. You can pass CoordModeOrigin or CoordModePrevious. fills the region closed by the specified path. The path is closed automatically if the last point in the list does not coincide with the first point. does not draw a pixel of the region more than once. CoordModeOrigin treats all coordinates as relative to the origin, and CoordModePrevious treats all coordinates after the first as relative to the previous point. Depending on the specified shape, the following occurs: If shape is Complex, the path may self-intersect. Note that contiguous coincident points in the path are not treated as self-intersection. If shape is Convex, for every pair of points inside the polygon, the line segment connecting them does not intersect the path. If known by the client, specifying Convex can improve performance. If you specify Convex for a path that is not convex, the graphics results are undefined. If shape is Nonconvex, the path does not self-intersect, but the shape is not wholly convex. If known by the client, specifying Nonconvex instead of Complex may improve performance. If you specify Nonconvex for a self-intersecting path, the graphics results are undefined. The fill-rule of the GC controls the filling behavior of self-intersecting polygons. This function uses these GC components: function, plane-mask, fill-style, fill-rule, subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask. It also uses these GC mode-dependent components: foreground, background, tile, stipple, tile-stipple-x-origin, and tile-stipple-y-origin. can generate BadDrawable, BadGC, BadMatch, and BadValue errors. Filling Single and Multiple Arcs XFillArc Arcsfilling Fillingarcs To fill a single arc in a given drawable, use . XFillArc XFillArc Display *display Drawable d GC gc int x int y unsigned int width unsigned int height intangle1, angle2 display Specifies the connection to the X server. d Specifies the drawable. gc Specifies the GC. x y Specify the x and y coordinates, which are relative to the origin of the drawable and specify the upper-left corner of the bounding rectangle. width height Specify the width and height, which are the major and minor axes of the arc. angle1 Specifies the start of the arc relative to the three-o'clock position from the center, in units of degrees * 64. angle2 Specifies the path and extent of the arc relative to the start of the arc, in units of degrees * 64. To fill multiple arcs in a given drawable, use . XFillArcs XFillArcs Display *display Drawable d GC gc XArc *arcs int narcs display Specifies the connection to the X server. d Specifies the drawable. gc Specifies the GC. arcs Specifies an array of arcs. narcs Specifies the number of arcs in the array. For each arc, or fills the region closed by the infinitely thin path described by the specified arc and, depending on the arc-mode specified in the GC, one or two line segments. For ArcChord, the single line segment joining the endpoints of the arc is used. For ArcPieSlice, the two line segments joining the endpoints of the arc with the center point are used. fills the arcs in the order listed in the array. For any given arc, and do not draw a pixel more than once. If regions intersect, the intersecting pixels are drawn multiple times. Both functions use these GC components: function, plane-mask, fill-style, arc-mode, subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask. They also use these GC mode-dependent components: foreground, background, tile, stipple, tile-stipple-x-origin, and tile-stipple-y-origin. and can generate BadDrawable, BadGC, and BadMatch errors. Font Metrics Font A font is a graphical description of a set of characters that are used to increase efficiency whenever a set of small, similar sized patterns are repeatedly used. This section discusses how to: Load and free fonts Obtain and free font names Compute character string sizes Compute logical extents Query character string sizes The X server loads fonts whenever a program requests a new font. The server can cache fonts for quick lookup. Fonts are global across all screens in a server. Several levels are possible when dealing with fonts. Most applications simply use to load a font and query the font metrics. Characters in fonts are regarded as masks. Except for image text requests, the only pixels modified are those in which bits are set to 1 in the character. This means that it makes sense to draw text using stipples or tiles (for example, many menus gray-out unusable entries). The XFontStruct structure contains all of the information for the font and consists of the font-specific information as well as a pointer to an array of XCharStruct structures for the characters contained in the font. The XFontStruct, XFontProp, and XCharStruct structures contain: XCharStruct typedef struct { short lbearing; /* origin to left edge of raster */ short rbearing; /* origin to right edge of raster */ short width; /* advance to next char's origin */ short ascent; /* baseline to top edge of raster */ short descent; /* baseline to bottom edge of raster */ unsigned short attributes; /* per char flags (not predefined) */ } XCharStruct; XFontProp typedef struct { Atom name; unsigned long card32; } XFontProp; XChar2b typedef struct { /* normal 16 bit characters are two bytes */ unsigned char byte1; unsigned char byte2; } XChar2b; XFontStruct typedef struct { XExtData *ext_data; /* hook for extension to hang data */ Font fid; /* Font id for this font */ unsigned direction; /* hint about the direction font is painted */ unsigned min_char_or_byte2; /* first character */ unsigned max_char_or_byte2; /* last character */ unsigned min_byte1; /* first row that exists */ unsigned max_byte1; /* last row that exists */ Bool all_chars_exist; /* flag if all characters have nonzero size */ unsigned default_char; /* char to print for undefined character */ int n_properties; /* how many properties there are */ XFontProp *properties; /* pointer to array of additional properties */ XCharStruct min_bounds; /* minimum bounds over all existing char */ XCharStruct max_bounds; /* maximum bounds over all existing char */ XCharStruct *per_char; /* first_char to last_char information */ int ascent; /* logical extent above baseline for spacing */ int descent; /* logical descent below baseline for spacing */ } XFontStruct; X supports single byte/character, two bytes/character matrix, and 16-bit character text operations. Note that any of these forms can be used with a font, but a single byte/character text request can only specify a single byte (that is, the first row of a 2-byte font). You should view 2-byte fonts as a two-dimensional matrix of defined characters: byte1 specifies the range of defined rows and byte2 defines the range of defined columns of the font. Single byte/character fonts have one row defined, and the byte2 range specified in the structure defines a range of characters. The bounding box of a character is defined by the XCharStruct of that character. When characters are absent from a font, the default_char is used. When fonts have all characters of the same size, only the information in the XFontStruct min and max bounds are used. The members of the XFontStruct have the following semantics: The direction member can be either FontLeftToRight or FontRightToLeft. It is just a hint as to whether most XCharStruct elements have a positive (FontLeftToRight) or a negative (FontRightToLeft) character width metric. The core protocol defines no support for vertical text. If the min_byte1 and max_byte1 members are both zero, min_char_or_byte2 specifies the linear character index corresponding to the first element of the per_char array, and max_char_or_byte2 specifies the linear character index of the last element. If either min_byte1 or max_byte1 are nonzero, both min_char_or_byte2 and max_char_or_byte2 are less than 256, and the 2-byte character index values corresponding to the per_char array element N (counting from 0) are: byte1 = N/D + min_byte1 byte2 = N\\D + min_char_or_byte2 where: D = max_char_or_byte2 - min_char_or_byte2 + 1 / = integer division \\ = integer modulus If the per_char pointer is NULL, all glyphs between the first and last character indexes inclusive have the same information, as given by both min_bounds and max_bounds. If all_chars_exist is True, all characters in the per_char array have nonzero bounding boxes. The default_char member specifies the character that will be used when an undefined or nonexistent character is printed. The default_char is a 16-bit character (not a 2-byte character). For a font using 2-byte matrix format, the default_char has byte1 in the most-significant byte and byte2 in the least significant byte. If the default_char itself specifies an undefined or nonexistent character, no printing is performed for an undefined or nonexistent character. The min_bounds and max_bounds members contain the most extreme values of each individual XCharStruct component over all elements of this array (and ignore nonexistent characters). The bounding box of the font (the smallest rectangle enclosing the shape obtained by superimposing all of the characters at the same origin [x,y]) has its upper-left coordinate at: [x + min_bounds.lbearing, y - max_bounds.ascent] Its width is: max_bounds.rbearing - min_bounds.lbearing Its height is: max_bounds.ascent + max_bounds.descent The ascent member is the logical extent of the font above the baseline that is used for determining line spacing. Specific characters may extend beyond this. The descent member is the logical extent of the font at or below the baseline that is used for determining line spacing. Specific characters may extend beyond this. If the baseline is at Y-coordinate y, the logical extent of the font is inclusive between the Y-coordinate values (y - font.ascent) and (y + font.descent - 1). Typically, the minimum interline spacing between rows of text is given by ascent + descent. For a character origin at [x,y], the bounding box of a character (that is, the smallest rectangle that encloses the character's shape) described in terms of XCharStruct components is a rectangle with its upper-left corner at: [x + lbearing, y - ascent] Its width is: rbearing - lbearing Its height is: ascent + descent The origin for the next character is defined to be: [x + width, y] The lbearing member defines the extent of the left edge of the character ink from the origin. The rbearing member defines the extent of the right edge of the character ink from the origin. The ascent member defines the extent of the top edge of the character ink from the origin. The descent member defines the extent of the bottom edge of the character ink from the origin. The width member defines the logical width of the character. Note that the baseline (the y position of the character origin) is logically viewed as being the scanline just below nondescending characters. When descent is zero, only pixels with Y-coordinates less than y are drawn, and the origin is logically viewed as being coincident with the left edge of a nonkerned character. When lbearing is zero, no pixels with X-coordinate less than x are drawn. Any of the XCharStruct metric members could be negative. If the width is negative, the next character will be placed to the left of the current origin. The X protocol does not define the interpretation of the attributes member in the XCharStruct structure. A nonexistent character is represented with all members of its XCharStruct set to zero. A font is not guaranteed to have any properties. The interpretation of the property value (for example, long or unsigned long) must be derived from a priori knowledge of the property. A basic set of font properties is specified in the X Consortium standard X Logical Font Description Conventions. Loading and Freeing Fonts Xlib provides functions that you can use to load fonts, get font information, unload fonts, and free font information. Fontsgetting information Fontsunloading Fontsfreeing font information A few font functions use a GContext resource ID or a font ID interchangeably. To load a given font, use . XLoadFont Font XLoadFont Display *display char *name display Specifies the connection to the X server. name Specifies the name of the font, which is a null-terminated string. The function loads the specified font and returns its associated font ID. If the font name is not in the Host Portable Character Encoding, the result is implementation-dependent. Use of uppercase or lowercase does not matter. When the characters ``?'' and ``*'' are used in a font name, a pattern match is performed and any matching font is used. In the pattern, the ``?'' character will match any single character, and the ``*'' character will match any number of characters. A structured format for font names is specified in the X Consortium standard X Logical Font Description Conventions. If was unsuccessful at loading the specified font, a BadName error results. Fonts are not associated with a particular screen and can be stored as a component of any GC. When the font is no longer needed, call . can generate BadAlloc and BadName errors. To return information about an available font, use . XQueryFont XFontStruct *XQueryFont Display *display XID font_ID display Specifies the connection to the X server. font_ID Specifies the font ID or the GContext ID. The function returns a pointer to the XFontStruct structure, which contains information associated with the font. You can query a font or the font stored in a GC. The font ID stored in the XFontStruct structure will be the GContext ID, and you need to be careful when using this ID in other functions (see ). If the font does not exist, returns NULL. To free this data, use . To perform a and in a single operation, use . XLoadQueryFont XFontStruct *XLoadQueryFont Display *display char *name display Specifies the connection to the X server. name Specifies the name of the font, which is a null-terminated string. The function provides the most common way for accessing a font. both opens (loads) the specified font and returns a pointer to the appropriate XFontStruct structure. If the font name is not in the Host Portable Character Encoding, the result is implementation-dependent. If the font does not exist, returns NULL. can generate a BadAlloc error. To unload the font and free the storage used by the font structure that was allocated by or , use . XFreeFont XFreeFont Display *display XFontStruct *font_struct display Specifies the connection to the X server. font_struct Specifies the storage associated with the font. The function deletes the association between the font resource ID and the specified font and frees the XFontStruct structure. The font itself will be freed when no other resource references it. The data and the font should not be referenced again. can generate a BadFont error. To return a given font property, use . XGetFontProperty Bool XGetFontProperty XFontStruct *font_struct Atom atom unsigned long *value_return font_struct Specifies the storage associated with the font. atom Specifies the atom for the property name you want returned. value_return Returns the value of the font property. Given the atom for that property, the function returns the value of the specified font property. also returns False if the property was not defined or True if it was defined. A set of predefined atoms exists for font properties, which can be found in <X11/Xatom.h>. X11/Xatom.h Files<X11/Xatom.h> Headers<X11/Xatom.h> This set contains the standard properties associated with a font. Although it is not guaranteed, it is likely that the predefined font properties will be present. To unload a font that was loaded by , use . XUnloadFont XUnloadFont Display *display Font font display Specifies the connection to the X server. font Specifies the font. The function deletes the association between the font resource ID and the specified font. The font itself will be freed when no other resource references it. The font should not be referenced again. can generate a BadFont error. Obtaining and Freeing Font Names and Information You obtain font names and information by matching a wildcard specification when querying a font type for a list of available sizes and so on. To return a list of the available font names, use . XListFonts char **XListFonts Display *display char *pattern int maxnames int *actual_count_return display Specifies the connection to the X server. pattern Specifies the null-terminated pattern string that can contain wildcard characters. maxnames Specifies the maximum number of names to be returned. actual_count_return Returns the actual number of font names. The function returns an array of available font names (as controlled by the font search path; see ) that match the string you passed to the pattern argument. The pattern string can contain any characters, but each asterisk (*) is a wildcard for any number of characters, and each question mark (?) is a wildcard for a single character. If the pattern string is not in the Host Portable Character Encoding, the result is implementation-dependent. Use of uppercase or lowercase does not matter. Each returned string is null-terminated. If the data returned by the server is in the Latin Portable Character Encoding, then the returned strings are in the Host Portable Character Encoding. Otherwise, the result is implementation-dependent. If there are no matching font names, returns NULL. The client should call when finished with the result to free the memory. To free a font name array, use . XFreeFontNames XFreeFontNames char *list[] list Specifies the array of strings you want to free. The function frees the array and strings returned by or . To obtain the names and information about available fonts, use . XListFontsWithInfo char **XListFontsWithInfo Display *display char *pattern int maxnames int *count_return XFontStruct **info_return display Specifies the connection to the X server. pattern Specifies the null-terminated pattern string that can contain wildcard characters. maxnames Specifies the maximum number of names to be returned. count_return Returns the actual number of matched font names. info_return Returns the font information. The function returns a list of font names that match the specified pattern and their associated font information. The list of names is limited to size specified by maxnames. The information returned for each font is identical to what would return except that the per-character metrics are not returned. The pattern string can contain any characters, but each asterisk (*) is a wildcard for any number of characters, and each question mark (?) is a wildcard for a single character. If the pattern string is not in the Host Portable Character Encoding, the result is implementation-dependent. Use of uppercase or lowercase does not matter. Each returned string is null-terminated. If the data returned by the server is in the Latin Portable Character Encoding, then the returned strings are in the Host Portable Character Encoding. Otherwise, the result is implementation-dependent. If there are no matching font names, returns NULL. To free only the allocated name array, the client should call . To free both the name array and the font information array or to free just the font information array, the client should call . To free font structures and font names, use . XFreeFontInfo XFreeFontInfo char **names XFontStruct *free_info int actual_count names Specifies the list of font names. free_info Specifies the font information. actual_count Specifies the actual number of font names. The function frees a font structure or an array of font structures and optionally an array of font names. If NULL is passed for names, no font names are freed. If a font structure for an open font (returned by ) is passed, the structure is freed, but the font is not closed; use to close the font. Computing Character String Sizes Xlib provides functions that you can use to compute the width, the logical extents, and the server information about 8-bit and 2-byte text strings. XTextWidth XTextWidth16 The width is computed by adding the character widths of all the characters. It does not matter if the font is an 8-bit or 2-byte font. These functions return the sum of the character metrics in pixels. To determine the width of an 8-bit character string, use . XTextWidth int XTextWidth XFontStruct *font_struct char *string int count font_struct Specifies the font used for the width computation. string Specifies the character string. count Specifies the character count in the specified string. To determine the width of a 2-byte character string, use . XTextWidth16 int XTextWidth16 XFontStruct *font_struct XChar2b *string int count font_struct Specifies the font used for the width computation. string Specifies the character string. count Specifies the character count in the specified string. Computing Logical Extents To compute the bounding box of an 8-bit character string in a given font, use . XTextExtents XTextExtents XFontStruct *font_struct char *string int nchars int *direction_return int*font_ascent_return, *font_descent_return XCharStruct *overall_return font_struct Specifies the XFontStruct structure. string Specifies the character string. nchars Specifies the number of characters in the character string. direction_return Returns the value of the direction hint (FontLeftToRight or FontRightToLeft). font_ascent_return Returns the font ascent. font_descent_return Returns the font descent. overall_return Returns the overall size in the specified XCharStruct structure. To compute the bounding box of a 2-byte character string in a given font, use . XTextExtents16 XTextExtents16 XFontStruct *font_struct XChar2b *string int nchars int *direction_return int*font_ascent_return, *font_descent_return XCharStruct *overall_return font_struct Specifies the XFontStruct structure. string Specifies the character string. nchars Specifies the number of characters in the character string. direction_return Returns the value of the direction hint (FontLeftToRight or FontRightToLeft). font_ascent_return Returns the font ascent. font_descent_return Returns the font descent. overall_return Returns the overall size in the specified XCharStruct structure. The and functions perform the size computation locally and, thereby, avoid the round-trip overhead of and . Both functions return an XCharStruct structure, whose members are set to the values as follows. The ascent member is set to the maximum of the ascent metrics of all characters in the string. The descent member is set to the maximum of the descent metrics. The width member is set to the sum of the character-width metrics of all characters in the string. For each character in the string, let W be the sum of the character-width metrics of all characters preceding it in the string. Let L be the left-side-bearing metric of the character plus W. Let R be the right-side-bearing metric of the character plus W. The lbearing member is set to the minimum L of all characters in the string. The rbearing member is set to the maximum R. For fonts defined with linear indexing rather than 2-byte matrix indexing, each XChar2b structure is interpreted as a 16-bit number with byte1 as the most significant byte. If the font has no defined default character, undefined characters in the string are taken to have all zero metrics. Querying Character String Sizes To query the server for the bounding box of an 8-bit character string in a given font, use . XQueryTextExtents XQueryTextExtents Display *display XID font_ID char *string int nchars int *direction_return int*font_ascent_return, *font_descent_return XCharStruct *overall_return display Specifies the connection to the X server. font_ID Specifies either the font ID or the GContext ID that contains the font. string Specifies the character string. nchars Specifies the number of characters in the character string. direction_return Returns the value of the direction hint (FontLeftToRight or FontRightToLeft). font_ascent_return Returns the font ascent. font_descent_return Returns the font descent. overall_return Returns the overall size in the specified XCharStruct structure. To query the server for the bounding box of a 2-byte character string in a given font, use . XQueryTextExtents16 XQueryTextExtents16 Display *display XID font_ID XChar2b *string int nchars int *direction_return int*font_ascent_return, *font_descent_return XCharStruct *overall_return display Specifies the connection to the X server. font_ID Specifies either the font ID or the GContext ID that contains the font. string Specifies the character string. nchars Specifies the number of characters in the character string. direction_return Returns the value of the direction hint (FontLeftToRight or FontRightToLeft). font_ascent_return Returns the font ascent. font_descent_return Returns the font descent. overall_return Returns the overall size in the specified XCharStruct structure. The and functions return the bounding box of the specified 8-bit and 16-bit character string in the specified font or the font contained in the specified GC. These functions query the X server and, therefore, suffer the round-trip overhead that is avoided by and . Both functions return a XCharStruct structure, whose members are set to the values as follows. The ascent member is set to the maximum of the ascent metrics of all characters in the string. The descent member is set to the maximum of the descent metrics. The width member is set to the sum of the character-width metrics of all characters in the string. For each character in the string, let W be the sum of the character-width metrics of all characters preceding it in the string. Let L be the left-side-bearing metric of the character plus W. Let R be the right-side-bearing metric of the character plus W. The lbearing member is set to the minimum L of all characters in the string. The rbearing member is set to the maximum R. For fonts defined with linear indexing rather than 2-byte matrix indexing, each XChar2b structure is interpreted as a 16-bit number with byte1 as the most significant byte. If the font has no defined default character, undefined characters in the string are taken to have all zero metrics. Characters with all zero metrics are ignored. If the font has no defined default_char, the undefined characters in the string are also ignored. and can generate BadFont and BadGC errors. Drawing Text This section discusses how to draw: Complex text Text characters Image text characters The fundamental text functions and use the following structures: XTextItem typedef struct { char *chars; /* pointer to string */ int nchars; /* number of characters */ int delta; /* delta between strings */ Font font; /* Font to print it in, None don't change */ } XTextItem; XTextItem16 typedef struct { XChar2b *chars; /* pointer to two-byte characters */ int nchars; /* number of characters */ int delta; /* delta between strings */ Font font; /* font to print it in, None don't change */ } XTextItem16; If the font member is not None, the font is changed before printing and also is stored in the GC. If an error was generated during text drawing, the previous items may have been drawn. The baseline of the characters are drawn starting at the x and y coordinates that you pass in the text drawing functions. For example, consider the background rectangle drawn by . If you want the upper-left corner of the background rectangle to be at pixel coordinate (x,y), pass the (x,y + ascent) as the baseline origin coordinates to the text functions. The ascent is the font ascent, as given in the XFontStruct structure. If you want the lower-left corner of the background rectangle to be at pixel coordinate (x,y), pass the (x,y - descent + 1) as the baseline origin coordinates to the text functions. The descent is the font descent, as given in the XFontStruct structure. Drawing Complex Text Textdrawing Drawingtext items To draw 8-bit characters in a given drawable, use . XDrawText XDrawText Display *display Drawable d GC gc int x int y XTextItem *items int nitems display Specifies the connection to the X server. d Specifies the drawable. gc Specifies the GC. x y Specify the x and y coordinates, which are relative to the origin of the specified drawable and define the origin of the first character. items Specifies an array of text items. nitems Specifies the number of text items in the array. To draw 2-byte characters in a given drawable, use . XDrawText16 XDrawText16 Display *display Drawable d GC gc int x int y XTextItem16 *items int nitems display Specifies the connection to the X server. d Specifies the drawable. gc Specifies the GC. x y Specify the x and y coordinates, which are relative to the origin of the specified drawable and define the origin of the first character. items Specifies an array of text items. nitems Specifies the number of text items in the array. The function is similar to except that it uses 2-byte or 16-bit characters. Both functions allow complex spacing and font shifts between counted strings. Each text item is processed in turn. A font member other than None in an item causes the font to be stored in the GC and used for subsequent text. A text element delta specifies an additional change in the position along the x axis before the string is drawn. The delta is always added to the character origin and is not dependent on any characteristics of the font. Each character image, as defined by the font in the GC, is treated as an additional mask for a fill operation on the drawable. The drawable is modified only where the font character has a bit set to 1. If a text item generates a BadFont error, the previous text items may have been drawn. For fonts defined with linear indexing rather than 2-byte matrix indexing, each XChar2b structure is interpreted as a 16-bit number with byte1 as the most significant byte. Both functions use these GC components: function, plane-mask, fill-style, font, subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask. They also use these GC mode-dependent components: foreground, background, tile, stipple, tile-stipple-x-origin, and tile-stipple-y-origin. and can generate BadDrawable, BadFont, BadGC, and BadMatch errors. Drawing Text Characters Stringsdrawing Drawingstrings To draw 8-bit characters in a given drawable, use . XDrawString XDrawString Display *display Drawable d GC gc int x int y char *string int length display Specifies the connection to the X server. d Specifies the drawable. gc Specifies the GC. x y Specify the x and y coordinates, which are relative to the origin of the specified drawable and define the origin of the first character. string Specifies the character string. length Specifies the number of characters in the string argument. To draw 2-byte characters in a given drawable, use . XDrawString16 XDrawString16 Display *display Drawable d GC gc int x int y XChar2b *string int length display Specifies the connection to the X server. d Specifies the drawable. gc Specifies the GC. x y Specify the x and y coordinates, which are relative to the origin of the specified drawable and define the origin of the first character. string Specifies the character string. length Specifies the number of characters in the string argument. Each character image, as defined by the font in the GC, is treated as an additional mask for a fill operation on the drawable. The drawable is modified only where the font character has a bit set to 1. For fonts defined with 2-byte matrix indexing and used with , each byte is used as a byte2 with a byte1 of zero. Both functions use these GC components: function, plane-mask, fill-style, font, subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask. They also use these GC mode-dependent components: foreground, background, tile, stipple, tile-stipple-x-origin, and tile-stipple-y-origin. and can generate BadDrawable, BadGC, and BadMatch errors. Drawing Image Text Characters Image textdrawing Drawingimage text Some applications, in particular terminal emulators, need to print image text in which both the foreground and background bits of each character are painted. This prevents annoying flicker on many displays. XDrawImageString XDrawImageString16 To draw 8-bit image text characters in a given drawable, use . XDrawImageString XDrawImageString Display *display Drawable d GC gc int x int y char *string int length display Specifies the connection to the X server. d Specifies the drawable. gc Specifies the GC. x y Specify the x and y coordinates, which are relative to the origin of the specified drawable and define the origin of the first character. string Specifies the character string. length Specifies the number of characters in the string argument. To draw 2-byte image text characters in a given drawable, use . XDrawImageString16 XDrawImageString16 Display *display Drawable d GC gc int x int y XChar2b *string int length display Specifies the connection to the X server. d Specifies the drawable. gc Specifies the GC. x y Specify the x and y coordinates, which are relative to the origin of the specified drawable and define the origin of the first character. string Specifies the character string. length Specifies the number of characters in the string argument. The function is similar to except that it uses 2-byte or 16-bit characters. Both functions also use both the foreground and background pixels of the GC in the destination. The effect is first to fill a destination rectangle with the background pixel defined in the GC and then to paint the text with the foreground pixel. The upper-left corner of the filled rectangle is at: [x, y - font-ascent] The width is: overall-width The height is: font-ascent + font-descent The overall-width, font-ascent, and font-descent are as would be returned by using gc and string. The function and fill-style defined in the GC are ignored for these functions. The effective function is GXcopy, and the effective fill-style is FillSolid. For fonts defined with 2-byte matrix indexing and used with , each byte is used as a byte2 with a byte1 of zero. Both functions use these GC components: plane-mask, foreground, background, font, subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask. and can generate BadDrawable, BadGC, and BadMatch errors. Transferring Images between Client and Server Xlib provides functions that you can use to transfer images between a client and the server. Because the server may require diverse data formats, Xlib provides an image object that fully describes the data in memory and that provides for basic operations on that data. You should reference the data through the image object rather than referencing the data directly. However, some implementations of the Xlib library may efficiently deal with frequently used data formats by replacing functions in the procedure vector with special case functions. Supported operations include destroying the image, getting a pixel, storing a pixel, extracting a subimage of an image, and adding a constant to an image (see section 16.8). All the image manipulation functions discussed in this section make use of the XImage structure, which describes an image as it exists in the client's memory. XImage typedef struct _XImage { int width, height; /* size of image */ int xoffset; /* number of pixels offset in X direction */ int format; /* XYBitmap, XYPixmap, ZPixmap */ char *data; /* pointer to image data */ int byte_order; /* data byte order, LSBFirst, MSBFirst */ int bitmap_unit; /* quant. of scanline 8, 16, 32 */ int bitmap_bit_order; /* LSBFirst, MSBFirst */ int bitmap_pad; /* 8, 16, 32 either XY or ZPixmap */ int depth; /* depth of image */ int bytes_per_line; /* accelerator to next scanline */ int bits_per_pixel; /* bits per pixel (ZPixmap) */ unsigned long red_mask; /* bits in z arrangement */ unsigned long green_mask; unsigned long blue_mask; XPointer obdata; /* hook for the object routines to hang on */ struct funcs { /* image manipulation routines */ struct _XImage *(*create_image)(); int (*destroy_image)(); unsigned long (*get_pixel)(); int (*put_pixel)(); struct _XImage *(*sub_image)(); int (*add_pixel)(); } f; } XImage; To initialize the image manipulation routines of an image structure, use . XInitImage Status XInitImage XImage *image ximage Specifies the image. The function initializes the internal image manipulation routines of an image structure, based on the values of the various structure members. All fields other than the manipulation routines must already be initialized. If the bytes_per_line member is zero, will assume the image data is contiguous in memory and set the bytes_per_line member to an appropriate value based on the other members; otherwise, the value of bytes_per_line is not changed. All of the manipulation routines are initialized to functions that other Xlib image manipulation functions need to operate on the type of image specified by the rest of the structure. This function must be called for any image constructed by the client before passing it to any other Xlib function. Image structures created or returned by Xlib do not need to be initialized in this fashion. This function returns a nonzero status if initialization of the structure is successful. It returns zero if it detected some error or inconsistency in the structure, in which case the image is not changed. To combine an image with a rectangle of a drawable on the display, use . XPutImage XPutImage Display *display Drawable d GC gc XImage *image intsrc_x, src_y intdest_x, dest_y unsigned int width unsigned int height display Specifies the connection to the X server. d Specifies the drawable. gc Specifies the GC. image Specifies the image you want combined with the rectangle. src_x Specifies the offset in X from the left edge of the image defined by the XImage structure. src_y Specifies the offset in Y from the top edge of the image defined by the XImage structure. dest_x dest_y Specify the x and y coordinates, which are relative to the origin of the drawable and are the coordinates of the subimage. width height Specify the width and height of the subimage, which define the dimensions of the rectangle. The function combines an image with a rectangle of the specified drawable. The section of the image defined by the src_x, src_y, width, and height arguments is drawn on the specified part of the drawable. If XYBitmap format is used, the depth of the image must be one, or a BadMatch error results. The foreground pixel in the GC defines the source for the one bits in the image, and the background pixel defines the source for the zero bits. For XYPixmap and ZPixmap, the depth of the image must match the depth of the drawable, or a BadMatch error results. If the characteristics of the image (for example, byte_order and bitmap_unit) differ from what the server requires, automatically makes the appropriate conversions. This function uses these GC components: function, plane-mask, subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask. It also uses these GC mode-dependent components: foreground and background. can generate BadDrawable, BadGC, BadMatch, and BadValue errors. To return the contents of a rectangle in a given drawable on the display, use . This function specifically supports rudimentary screen dumps. XGetImage XImage *XGetImage Display *display Drawable d int x int y unsigned int width unsigned int height unsigned long plane_mask int format display Specifies the connection to the X server. d Specifies the drawable. x y Specify the x and y coordinates, which are relative to the origin of the drawable and define the upper-left corner of the rectangle. width height Specify the width and height of the subimage, which define the dimensions of the rectangle. plane_mask Specifies the plane mask. format Specifies the format for the image. You can pass XYPixmap or ZPixmap. The function returns a pointer to an XImage structure. This structure provides you with the contents of the specified rectangle of the drawable in the format you specify. If the format argument is XYPixmap, the image contains only the bit planes you passed to the plane_mask argument. If the plane_mask argument only requests a subset of the planes of the display, the depth of the returned image will be the number of planes requested. If the format argument is ZPixmap, returns as zero the bits in all planes not specified in the plane_mask argument. The function performs no range checking on the values in plane_mask and ignores extraneous bits. returns the depth of the image to the depth member of the XImage structure. The depth of the image is as specified when the drawable was created, except when getting a subset of the planes in XYPixmap format, when the depth is given by the number of bits set to 1 in plane_mask. If the drawable is a pixmap, the given rectangle must be wholly contained within the pixmap, or a BadMatch error results. If the drawable is a window, the window must be viewable, and it must be the case that if there were no inferiors or overlapping windows, the specified rectangle of the window would be fully visible on the screen and wholly contained within the outside edges of the window, or a BadMatch error results. Note that the borders of the window can be included and read with this request. If the window has backing-store, the backing-store contents are returned for regions of the window that are obscured by noninferior windows. If the window does not have backing-store, the returned contents of such obscured regions are undefined. The returned contents of visible regions of inferiors of a different depth than the specified window's depth are also undefined. The pointer cursor image is not included in the returned contents. If a problem occurs, returns NULL. can generate BadDrawable, BadMatch, and BadValue errors. To copy the contents of a rectangle on the display to a location within a preexisting image structure, use . XGetSubImage XImage *XGetSubImage Display *display Drawable d int x int y unsigned int width unsigned int height unsigned long plane_mask int format XImage *dest_image intdest_x, dest_y display Specifies the connection to the X server. d Specifies the drawable. x y Specify the x and y coordinates, which are relative to the origin of the drawable and define the upper-left corner of the rectangle. width height Specify the width and height of the subimage, which define the dimensions of the rectangle. plane_mask Specifies the plane mask. format Specifies the format for the image. You can pass XYPixmap or ZPixmap. dest_image Specifies the destination image. dest_x dest_y Specify the x and y coordinates, which are relative to the origin of the destination rectangle, specify its upper-left corner, and determine where the subimage is placed in the destination image. The function updates dest_image with the specified subimage in the same manner as . If the format argument is XYPixmap, the image contains only the bit planes you passed to the plane_mask argument. If the format argument is ZPixmap, returns as zero the bits in all planes not specified in the plane_mask argument. The function performs no range checking on the values in plane_mask and ignores extraneous bits. As a convenience, returns a pointer to the same XImage structure specified by dest_image. The depth of the destination XImage structure must be the same as that of the drawable. If the specified subimage does not fit at the specified location on the destination image, the right and bottom edges are clipped. If the drawable is a pixmap, the given rectangle must be wholly contained within the pixmap, or a BadMatch error results. If the drawable is a window, the window must be viewable, and it must be the case that if there were no inferiors or overlapping windows, the specified rectangle of the window would be fully visible on the screen and wholly contained within the outside edges of the window, or a BadMatch error results. If the window has backing-store, then the backing-store contents are returned for regions of the window that are obscured by noninferior windows. If the window does not have backing-store, the returned contents of such obscured regions are undefined. The returned contents of visible regions of inferiors of a different depth than the specified window's depth are also undefined. If a problem occurs, returns NULL. can generate BadDrawable, BadGC, BadMatch, and BadValue errors. Specifies the connection to the X server.
d Specifies the drawable. libX11-1.6.3/specs/libX11/CH01.xml000064401431060000012000001034151247741723500164140ustar00alancstaff00002660200006 Introduction to Xlib The X Window System is a network-transparent window system that was designed at MIT. X display servers run on computers with either monochrome or color bitmap display hardware. The server distributes user input to and accepts output requests from various client programs located either on the same machine or elsewhere in the network. Xlib is a C subroutine library that application programs (clients) use to interface with the window system by means of a stream connection. Although a client usually runs on the same machine as the X server it is talking to, this need not be the case. Xlib − C Language X Interface is a reference guide to the low-level C language interface to the X Window System protocol. It is neither a tutorial nor a user’s guide to programming the X Window System. Rather, it provides a detailed description of each function in the library as well as a discussion of the related background information. Xlib − C Language X Interface assumes a basic understanding of a graphics window system and of the C programming language. Other higher-level abstractions (for example, those provided by the toolkits for X) are built on top of the Xlib library. For further information about these higher-level libraries, see the appropriate toolkit documentation. The X Window System Protocol provides the definitive word on the behavior of X. Although additional information appears here, the protocol document is the ruling document. To provide an introduction to X programming, this chapter discusses: Overview of the X Window System Errors Standard header files Generic values and types Naming and argument conventions within Xlib Programming considerations Character sets and encodings Formatting conventions Overview of the X Window System Some of the terms used in this book are unique to X, and other terms that are common to other window systems have different meanings in X. You may find it helpful to refer to the glossary, which is located at the end of the book. The X Window System supports one or more screens containing overlapping windows or subwindows. Screen A screen is a physical monitor and hardware that can be color, grayscale, or monochrome. There can be multiple screens for each display or workstation. A single X server can provide display services for any number of screens. A set of screens for a single user with one keyboard and one pointer (usually a mouse) is called a display. All the windows in an X server are arranged in strict hierarchies. At the top of each hierarchy is a root window, which covers each of the display screens. Each root window is partially or completely covered by child windows. All windows, except for root windows, have parents. There is usually at least one window for each application program. Child window Parent Window Child windows may in turn have their own children. In this way, an application program can create an arbitrarily deep tree on each screen. X provides graphics, text, and raster operations for windows. A child window can be larger than its parent. That is, part or all of the child window can extend beyond the boundaries of the parent, but all output to a window is clipped by its parent. Stacking order If several children of a window have overlapping locations, one of the children is considered to be on top of or raised over the others, thus obscuring them. Output to areas covered by other windows is suppressed by the window system unless the window has backing store. If a window is obscured by a second window, the second window obscures only those ancestors of the second window that are also ancestors of the first window. Window A window has a border zero or more pixels in width, which can be any pattern (pixmap) or solid color you like. A window usually but not always has a background pattern, which will be repainted by the window system when uncovered. Child windows obscure their parents, and graphic operations in the parent window usually are clipped by the children. Each window and pixmap has its own coordinate system. The coordinate system has the X axis horizontal and the Y axis vertical with the origin [0, 0] at the upper-left corner. Coordinates are integral, in terms of pixels, and coincide with pixel centers. For a window, the origin is inside the border at the inside, upper-left corner. X does not guarantee to preserve the contents of windows. When part or all of a window is hidden and then brought back onto the screen, its contents may be lost. The server then sends the client program an Expose event to notify it that part or all of the window needs to be repainted. Programs must be prepared to regenerate the contents of windows on demand. Pixmap Drawable Tile Bitmap X also provides off-screen storage of graphics objects, called pixmaps. Single plane (depth 1) pixmaps are sometimes referred to as bitmaps. Pixmaps can be used in most graphics functions interchangeably with windows and are used in various graphics operations to define patterns or tiles. Windows and pixmaps together are referred to as drawables. Most of the functions in Xlib just add requests to an output buffer. These requests later execute asynchronously on the X server. Functions that return values of information stored in the server do not return (that is, they block) until an explicit reply is received or an error occurs. You can provide an error handler, which will be called when the error is reported. XSync If a client does not want a request to execute asynchronously, it can follow the request with a call to , which blocks until all previously buffered asynchronous events have been sent and acted on. As an important side effect, the output buffer in Xlib is always flushed by a call to any function that returns a value from the server or waits for input. Resource IDs Resource IDsWindow Resource IDsFont Resource IDsPixmap Resource IDsColormap Resource IDsCursor Resource IDsGContext Many Xlib functions will return an integer resource ID, which allows you to refer to objects stored on the X server. These can be of type Window, Font, Pixmap, Colormap, Cursor, and GContext, as defined in the file <X11/X.h>. X11/X.h Files<X11/X.h> Headers<X11/X.h> These resources are created by requests and are destroyed (or freed) by requests or when connections are closed. Most of these resources are potentially sharable between applications, and in fact, windows are manipulated explicitly by window manager programs. Fonts and cursors are shared automatically across multiple screens. Fonts are loaded and unloaded as needed and are shared by multiple clients. Fonts are often cached in the server. Xlib provides no support for sharing graphics contexts between applications. Event Client programs are informed of events. Events may either be side effects of a request (for example, restacking windows generates Expose events) or completely asynchronous (for example, from the keyboard). A client program asks to be informed of events. Because other applications can send events to your application, programs must be prepared to handle (or ignore) events of all types. Input events (for example, a key pressed or the pointer moved) arrive asynchronously from the server and are queued until they are requested by an explicit call (for example, or ). In addition, some library functions (for example, ) generate Expose and ConfigureRequest events. These events also arrive asynchronously, but the client may XSync wish to explicitly wait for them by calling after calling a function that can cause the server to generate events. Errors Some functions return Status, an integer error indication. If the function fails, it returns a zero. If the function returns a status of zero, it has not updated the return arguments. Status Because C does not provide multiple return values, many functions must return their results by writing into client-passed storage. Errorhandling By default, errors are handled either by a standard library function or by one that you provide. Functions that return pointers to strings return NULL pointers if the string does not exist. The X server reports protocol errors at the time that it detects them. If more than one error could be generated for a given request, the server can report any of them. Because Xlib usually does not transmit requests to the server immediately (that is, it buffers them), errors can be reported much later than they actually occur. For debugging purposes, however, Xlib provides a mechanism for forcing synchronous behavior (see section 11.8.1). When synchronization is enabled, errors are reported as they are generated. When Xlib detects an error, it calls an error handler, which your program can provide. If you do not provide an error handler, the error is printed, and your program terminates. Standard Header Files The following include files are part of the Xlib standard: Headers <X11/Xlib.h> X11/Xlib.h Files<X11/Xlib.h> Headers<X11/Xlib.h> This is the main header file for Xlib. The majority of all Xlib symbols are declared by including this file. This file also contains the preprocessor symbol XlibSpecificationRelease. XlibSpecificationRelease This symbol is defined to have the 6 in this release of the standard. (Release 5 of Xlib was the first release to have this symbol.) <X11/X.h> X11/X.h Files<X11/X.h> Headers<X11/X.h> This file declares types and constants for the X protocol that are to be used by applications. It is included automatically from <X11/Xlib.h> so application code should never need to reference this file directly. <X11/Xcms.h> X11/Xcms.h Files<X11/Xcms.h> Headers<X11/Xcms.h> This file contains symbols for much of the color management facilities described in chapter 6. All functions, types, and symbols with the prefix "Xcms", plus the Color Conversion Contexts macros, are declared in this file. <X11/Xlib.h> must be included before including this file. <X11/Xutil.h> X11/Xutil.h Files<X11/Xutil.h> Headers<X11/Xutil.h> This file declares various functions, types, and symbols used for inter-client communication and application utility functions, which are described in chapters 14 and 16. <X11/Xlib.h> must be included before including this file. <X11/Xresource.h> X11/Xresource.h Files<X11/Xresource.h> Headers<X11/Xresource.h> This file declares all functions, types, and symbols for the resource manager facilities, which are described in chapter 15. <X11/Xlib.h> must be included before including this file. <X11/Xatom.h> X11/Xatom.h Files<X11/Xatom.h> Headers<X11/Xatom.h> This file declares all predefined atoms, which are symbols with the prefix "XA_". <X11/cursorfont.h> X11/cursorfont.h Files<X11/cursorfont.h> Headers<X11/cursorfont.h> This file declares the cursor symbols for the standard cursor font, which are listed in Appendix B. All cursor symbols have the prefix "XC_". <X11/keysymdef.h> X11/keysymdef.h Files<X11/keysymdef.h> Headers<X11/keysymdef.h> This file declares all standard KeySym values, which are symbols with the prefix "XK_". The KeySyms are arranged in groups, and a preprocessor symbol controls inclusion of each group. The preprocessor symbol must be defined prior to inclusion of the file to obtain the associated values. The preprocessor symbols are XK_MISCELLANY, XK_XKB_KEYS, XK_3270, XK_LATIN1, XK_LATIN2, XK_LATIN3, XK_LATIN4, XK_KATAKANA, XK_ARABIC, XK_CYRILLIC, XK_GREEK, XK_TECHNICAL, XK_SPECIAL, XK_PUBLISHING, XK_APL, XK_HEBREW, XK_THAI, and XK_KOREAN. <X11/keysym.h> X11/keysym.h Files<X11/keysym.h> Headers<X11/keysym.h> This file defines the preprocessor symbols XK_MISCELLANY, XK_XKB_KEYS, XK_LATIN1, XK_LATIN2, XK_LATIN3, XK_LATIN4, and XK_GREEK and then includes <X11/keysymdef.h>. <X11/Xlibint.h> X11/Xlibint.h Files<X11/Xlibint.h> Headers<X11/Xlibint.h> This file declares all the functions, types, and symbols used for extensions, which are described in Appendix C. This file automatically includes <X11/Xlib.h>. <X11/Xproto.h> X11/Xproto.h Files<X11/Xproto.h> Headers<X11/Xproto.h> This file declares types and symbols for the basic X protocol, for use in implementing extensions. It is included automatically from <X11/Xlibint.h>, so application and extension code should never need to reference this file directly. <X11/Xprotostr.h> X11/Xprotostr.h Files<X11/Xprotostr.h> Headers<X11/Xprotostr.h> This file declares types and symbols for the basic X protocol, for use in implementing extensions. It is included automatically from <X11/Xproto.h>, so application and extension code should never need to reference this file directly. <X11/X10.h> X11/X10.h Files<X11/X10.h> Headers<X11/X10.h> This file declares all the functions, types, and symbols used for the X10 compatibility functions, which are described in Appendix D. Generic Values and Types The following symbols are defined by Xlib and used throughout the manual: Bool True False Xlib defines the type Bool and the Boolean values True and False. None None is the universal null resource ID or atom. XID The type XID is used for generic resource IDs. XPointer The type XPointer is defined to be char * and is used as a generic opaque pointer to data. Naming and Argument Conventions within Xlib Xlib follows a number of conventions for the naming and syntax of the functions. Given that you remember what information the function requires, these conventions are intended to make the syntax of the functions more predictable. The major naming conventions are: To differentiate the X symbols from the other symbols, the library uses mixed case for external symbols. It leaves lowercase for variables and all uppercase for user macros, as per existing convention. All Xlib functions begin with a capital X. The beginnings of all function names and symbols are capitalized. All user-visible data structures begin with a capital X. More generally, anything that a user might dereference begins with a capital X. Macros and other symbols do not begin with a capital X. To distinguish them from all user symbols, each word in the macro is capitalized. All elements of or variables in a data structure are in lowercase. Compound words, where needed, are constructed with underscores (_). The display argument, where used, is always first in the argument list. All resource objects, where used, occur at the beginning of the argument list immediately after the display argument. When a graphics context is present together with another type of resource (most commonly, a drawable), the graphics context occurs in the argument list after the other resource. Drawables outrank all other resources. Source arguments always precede the destination arguments in the argument list. The x argument always precedes the y argument in the argument list. The width argument always precedes the height argument in the argument list. Where the x, y, width, and height arguments are used together, the x and y arguments always precede the width and height arguments. Where a mask is accompanied with a structure, the mask always precedes the pointer to the structure in the argument list. Programming Considerations The major programming considerations are: Coordinates and sizes in X are actually 16-bit quantities. This decision was made to minimize the bandwidth required for a given level of performance. Coordinates usually are declared as an int in the interface. Values larger than 16 bits are truncated silently. Sizes (width and height) are declared as unsigned quantities. Keyboards are the greatest variable between different manufacturers' workstations. If you want your program to be portable, you should be particularly conservative here. Many display systems have limited amounts of off-screen memory. If you can, you should minimize use of pixmaps and backing store. The user should have control of their screen real estate. Therefore, you should write your applications to react to window management rather than presume control of the entire screen. What you do inside of your top-level window, however, is up to your application. For further information, see chapter 14 and the Inter-Client Communication Conventions Manual. Character Sets and Encodings Some of the Xlib functions make reference to specific character sets and character encodings. The following are the most common: X Portable Character Set A basic set of 97 characters, which are assumed to exist in all locales supported by Xlib. This set contains the following characters: a..z A..Z 0..9 !"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ <space>, <tab>, and <newline> This set is the left/lower half of the graphic character set of ISO8859-1 plus space, tab, and newline. It is also the set of graphic characters in 7-bit ASCII plus the same three control characters. The actual encoding of these characters on the host is system dependent. Host Portable Character Encoding The encoding of the X Portable Character Set on the host. The encoding itself is not defined by this standard, but the encoding must be the same in all locales supported by Xlib on the host. If a string is said to be in the Host Portable Character Encoding, then it only contains characters from the X Portable Character Set, in the host encoding. Latin-1 The coded character set defined by the ISO8859-1 standard. Latin Portable Character Encoding The encoding of the X Portable Character Set using the Latin-1 codepoints plus ASCII control characters. If a string is said to be in the Latin Portable Character Encoding, then it only contains characters from the X Portable Character Set, not all of Latin-1. STRING Encoding Latin-1, plus tab and newline. POSIX Portable Filename Character Set The set of 65 characters, which can be used in naming files on a POSIX-compliant host, that are correctly processed in all locales. The set is: a..z A..Z 0..9 ._- Formatting Conventions Xlib − C Language X Interface uses the following conventions: Global symbols are printed in this special font. These can be either function names, symbols defined in include files, or structure names. When declared and defined, function arguments are printed in italics. In the explanatory text that follows, they usually are printed in regular type. Each function is introduced by a general discussion that distinguishes it from other functions. The function declaration itself follows, and each argument is specifically explained. Although ANSI C function prototype syntax is not used, Xlib header files normally declare functions using function prototypes in ANSI C environments. General discussion of the function, if any is required, follows the arguments. Where applicable, the last paragraph of the explanation lists the possible Xlib error codes that the function can generate. For a complete discussion of the Xlib error codes, see section 11.8.2. To eliminate any ambiguity between those arguments that you pass and those that a function returns to you, the explanations for all arguments that you pass start with the word specifies or, in the case of multiple arguments, the word specify. The explanations for all arguments that are returned to you start with the word returns or, in the case of multiple arguments, the word return. The explanations for all arguments that you can pass and are returned start with the words specifies and returns. Any pointer to a structure that is used to return a value is designated as such by the _return suffix as part of its name. All other pointers passed to these functions are used for reading only. A few arguments use pointers to structures that are used for both input and output and are indicated by using the _in_out suffix. None None is the universal null resource ID or atom. XIlibX11-1.6.3/specs/libX11/CH06.xml000064401431060000012000006625571247741723500164420ustar00alancstaff00002660200006 Color Management Functions Each X window always has an associated colormap that provides a level of indirection between pixel values and colors displayed on the screen. Xlib provides functions that you can use to manipulate a colormap. The X protocol defines colors using values in the RGB color space. The RGB color space is device dependent; rendering an RGB value on differing output devices typically results in different colors. Xlib also provides a means for clients to specify color using device-independent color spaces for consistent results across devices. Xlib supports device-independent color spaces derivable from the CIE XYZ color space. This includes the CIE XYZ, xyY, L*u*v*, and L*a*b* color spaces as well as the TekHVC color space. This chapter discusses how to: Create, copy, and destroy a colormap Specify colors by name or value Allocate, modify, and free color cells Read entries in a colormap Convert between color spaces Control aspects of color conversion Query the color gamut of a screen Add new color spaces All functions, types, and symbols in this chapter with the prefix ``Xcms'' are defined in <X11/Xcms.h>. X11/Xcms.h Files<X11/Xcms.h> Headers<X11/Xcms.h> The remaining functions and types are defined in <X11/Xlib.h>. X11/Xlib.h Files<X11/Xlib.h> Headers<X11/Xlib.h> Functions in this chapter manipulate the representation of color on the screen. For each possible value that a pixel can take in a window, there is a color cell in the colormap. For example, if a window is 4 bits deep, pixel values 0 through 15 are defined. A colormap is a collection of color cells. A color cell consists of a triple of red, green, and blue (RGB) values. The hardware imposes limits on the number of significant bits in these values. As each pixel is read out of display memory, the pixel is looked up in a colormap. The RGB value of the cell determines what color is displayed on the screen. On a grayscale display with a black-and-white monitor, the values are combined to determine the brightness on the screen. Typically, an application allocates color cells or sets of color cells to obtain the desired colors. The client can allocate read-only cells. In which case, the pixel values for these colors can be shared among multiple applications, and the RGB value of the cell cannot be changed. If the client allocates read/write cells, they are exclusively owned by the client, and the color associated with the pixel value can be changed at will. Cells must be allocated (and, if read/write, initialized with an RGB value) by a client to obtain desired colors. The use of pixel value for an unallocated cell results in an undefined color. Because colormaps are associated with windows, X supports displays with multiple colormaps and, indeed, different types of colormaps. If there are insufficient colormap resources in the display, some windows will display in their true colors, and others will display with incorrect colors. A window manager usually controls which windows are displayed in their true colors if more than one colormap is required for the color resources the applications are using. At any time, there is a set of installed colormaps for a screen. Windows using one of the installed colormaps display with true colors, and windows using other colormaps generally display with incorrect colors. You can control the set of installed colormaps by using and . Colormaps are local to a particular screen. Screens always have a default colormap, and programs typically allocate cells out of this colormap. Generally, you should not write applications that monopolize color resources. Although some hardware supports multiple colormaps installed at one time, many of the hardware displays built today support only a single installed colormap, so the primitives are written to encourage sharing of colormap entries between applications. The DefaultColormap macro returns the default colormap. The DefaultVisual macro returns the default visual type for the specified screen. Color map Possible visual types are StaticGray, GrayScale, StaticColor, PseudoColor, TrueColor, or DirectColor (see section 3.1). Color Structures Functions that operate only on RGB color space values use an XColor structure, which contains: XColor typedef struct { unsigned long pixel; /* pixel value */ unsigned short red, green, blue; /* rgb values */ char flags; /* DoRed, DoGreen, DoBlue */ char pad; } XColor; The red, green, and blue values are always in the range 0 to 65535 inclusive, independent of the number of bits actually used in the display hardware. The server scales these values down to the range used by the hardware. Black is represented by (0,0,0), and white is represented by (65535,65535,65535). Color In some functions, the flags member controls which of the red, green, and blue members is used and can be the inclusive OR of zero or more of DoRed, DoGreen, and DoBlue. Functions that operate on all color space values use an XcmsColor structure. This structure contains a union of substructures, each supporting color specification encoding for a particular color space. Like the XColor structure, the XcmsColor structure contains pixel and color specification information (the spec member in the XcmsColor structure). XcmsColor typedef unsigned long XcmsColorFormat; /* Color Specification Format */ typedef struct { union { XcmsRGB RGB; XcmsRGBi RGBi; XcmsCIEXYZ CIEXYZ; XcmsCIEuvY CIEuvY; XcmsCIExyY CIExyY; XcmsCIELab CIELab; XcmsCIELuv CIELuv; XcmsTekHVC TekHVC; XcmsPad Pad; } spec; unsigned long pixel; XcmsColorFormat format; } XcmsColor; /* Xcms Color Structure */ Because the color specification can be encoded for the various color spaces, encoding for the spec member is identified by the format member, which is of type XcmsColorFormat. The following macros define standard formats. #define XcmsUndefinedFormat 0x00000000 #define XcmsCIEXYZFormat 0x00000001 /* CIE XYZ */ #define XcmsCIEuvYFormat 0x00000002 /* CIE u'v'Y */ #define XcmsCIExyYFormat 0x00000003 /* CIE xyY */ #define XcmsCIELabFormat 0x00000004 /* CIE L*a*b* */ #define XcmsCIELuvFormat 0x00000005 /* CIE L*u*v* */ #define XcmsTekHVCFormat 0x00000006 /* TekHVC */ #define XcmsRGBFormat 0x80000000 /* RGB Device */ #define XcmsRGBiFormat 0x80000001 /* RGB Intensity */ Formats for device-independent color spaces are distinguishable from those for device-dependent spaces by the 32nd bit. If this bit is set, it indicates that the color specification is in a device-dependent form; otherwise, it is in a device-independent form. If the 31st bit is set, this indicates that the color space has been added to Xlib at run time (see section 6.12.4). The format value for a color space added at run time may be different each time the program is executed. If references to such a color space must be made outside the client (for example, storing a color specification in a file), then reference should be made by color space string prefix (see and ). Data types that describe the color specification encoding for the various color spaces are defined as follows: XcmsRGB typedef double XcmsFloat; typedef struct { unsigned short red; /* 0x0000 to 0xffff */ unsigned short green; /* 0x0000 to 0xffff */ unsigned short blue; /* 0x0000 to 0xffff */ } XcmsRGB; /* RGB Device */ XcmsRGBi typedef struct { XcmsFloat red; /* 0.0 to 1.0 */ XcmsFloat green; /* 0.0 to 1.0 */ XcmsFloat blue; /* 0.0 to 1.0 */ } XcmsRGBi; /* RGB Intensity */ XcmsCIEXYZ typedef struct { XcmsFloat X; XcmsFloat Y; /* 0.0 to 1.0 */ XcmsFloat Z; } XcmsCIEXYZ; /* CIE XYZ */ XcmsCIEuvY typedef struct { XcmsFloat u_prime; /* 0.0 to ~0.6 */ XcmsFloat v_prime; /* 0.0 to ~0.6 */ XcmsFloat Y; /* 0.0 to 1.0 */ } XcmsCIEuvY; /* CIE u'v'Y */ XcmsCIExyY typedef struct { XcmsFloat x; /* 0.0 to ~.75 */ XcmsFloat y; /* 0.0 to ~.85 */ XcmsFloat Y; /* 0.0 to 1.0 */ } XcmsCIExyY; /* CIE xyY */ XcmsCIELab typedef struct { XcmsFloat L_star; /* 0.0 to 100.0 */ XcmsFloat a_star; XcmsFloat b_star; } XcmsCIELab; /* CIE L*a*b* */ XcmsCIELuv typedef struct { XcmsFloat L_star; /* 0.0 to 100.0 */ XcmsFloat u_star; XcmsFloat v_star; } XcmsCIELuv; /* CIE L*u*v* */ XcmsTekHVC typedef struct { XcmsFloat H; /* 0.0 to 360.0 */ XcmsFloat V; /* 0.0 to 100.0 */ XcmsFloat C; /* 0.0 to 100.0 */ } XcmsTekHVC; /* TekHVC */ XcmsPad typedef struct { XcmsFloat pad0; XcmsFloat pad1; XcmsFloat pad2; XcmsFloat pad3; } XcmsPad; /* four doubles */ The device-dependent formats provided allow color specification in: RGB Intensity (XcmsRGBi) Red, green, and blue linear intensity values, floating-point values from 0.0 to 1.0, where 1.0 indicates full intensity, 0.5 half intensity, and so on. RGB Device (XcmsRGB) Red, green, and blue values appropriate for the specified output device. XcmsRGB values are of type unsigned short, scaled from 0 to 65535 inclusive, and are interchangeable with the red, green, and blue values in an XColor structure. It is important to note that RGB Intensity values are not gamma corrected values. In contrast, RGB Device values generated as a result of converting color specifications are always gamma corrected, and RGB Device values acquired as a result of querying a colormap or passed in by the client are assumed by Xlib to be gamma corrected. The term RGB value in this manual always refers to an RGB Device value. Color Strings Xlib provides a mechanism for using string names for colors. A color string may either contain an abstract color name or a numerical color specification. Color strings are case-insensitive. Color strings are used in the following functions: Xlib supports the use of abstract color names, for example, red or blue. A value for this abstract name is obtained by searching one or more color name databases. Xlib first searches zero or more client-side databases; the number, location, and content of these databases is implementation-dependent and might depend on the current locale. If the name is not found, Xlib then looks for the color in the X server's database. If the color name is not in the Host Portable Character Encoding, the result is implementation-dependent. A numerical color specification consists of a color space name and a set of values in the following syntax: <color_space_name>:<value>/.../<value> The following are examples of valid color strings. "CIEXYZ:0.3227/0.28133/0.2493" "RGBi:1.0/0.0/0.0" "rgb:00/ff/00" "CIELuv:50.0/0.0/0.0" The syntax and semantics of numerical specifications are given for each standard color space in the following sections. <acronym>RGB</acronym> Device String Specification An RGB Device specification is identified by the prefix ``rgb:'' and conforms to the following syntax: rgb:<red>/<green>/<blue> <red>, <green>, <blue> := h | hh | hhh | hhhh h := single hexadecimal digits (case insignificant) Note that h indicates the value scaled in 4 bits, hh the value scaled in 8 bits, hhh the value scaled in 12 bits, and hhhh the value scaled in 16 bits, respectively. Typical examples are the strings ``rgb:ea/75/52'' and ``rgb:ccc/320/320'', but mixed numbers of hexadecimal digit strings (``rgb:ff/a5/0'' and ``rgb:ccc/32/0'') are also allowed. For backward compatibility, an older syntax for RGB Device is supported, but its continued use is not encouraged. The syntax is an initial sharp sign character followed by a numeric specification, in one of the following formats: #RGB (4 bits each) #RRGGBB (8 bits each) #RRRGGGBBB (12 bits each) #RRRRGGGGBBBB (16 bits each) The R, G, and B represent single hexadecimal digits. When fewer than 16 bits each are specified, they represent the most significant bits of the value (unlike the ``rgb:'' syntax, in which values are scaled). For example, the string ``#3a7'' is the same as ``#3000a0007000''. <acronym>RGB</acronym> Intensity String Specification An RGB intensity specification is identified by the prefix ``rgbi:'' and conforms to the following syntax: rgbi:<red>/<green>/<blue> Note that red, green, and blue are floating-point values between 0.0 and 1.0, inclusive. The input format for these values is an optional sign, a string of numbers possibly containing a decimal point, and an optional exponent field containing an E or e followed by a possibly signed integer string. Device-Independent String Specifications The standard device-independent string specifications have the following syntax: CIEXYZ:<X>/<Y>/<Z> CIEuvY:<u>/<v>/<Y> CIExyY:<x>/<y>/<Y> CIELab:<L>/<a>/<b> CIELuv:<L>/<u>/<v> TekHVC:<H>/<V>/<C> All of the values (C, H, V, X, Y, Z, a, b, u, v, y, x) are floating-point values. The syntax for these values is an optional plus or minus sign, a string of digits possibly containing a decimal point, and an optional exponent field consisting of an ``E'' or ``e'' followed by an optional plus or minus followed by a string of digits. Color Conversion Contexts and Gamut Mapping When Xlib converts device-independent color specifications into device-dependent specifications and vice versa, it uses knowledge about the color limitations of the screen hardware. This information, typically called the device profile, Device profile is available in a Color Conversion Context (CCC). Color Conversion Context CCC Because a specified color may be outside the color gamut of the target screen and the white point associated with the color specification may differ from the white point inherent to the screen, Xlib applies gamut mapping when it encounters certain conditions: White point Gamut compression occurs when conversion of device-independent color specifications to device-dependent color specifications results in a color out of the target screen's gamut. White adjustment occurs when the inherent white point of the screen differs from the white point assumed by the client. Gamut handling methods are stored as callbacks in the CCC, which in turn are used by the color space conversion routines. Client data is also stored in the CCC for each callback. The CCC also contains the white point the client assumes to be associated with color specifications (that is, the Client White Point). Client White Point Gamut compression Gamut handling White point adjustment The client can specify the gamut handling callbacks and client data as well as the Client White Point. Xlib does not preclude the X client from performing other forms of gamut handling (for example, gamut expansion); however, Xlib does not provide direct support for gamut handling other than white adjustment and gamut compression. Associated with each colormap is an initial CCC transparently generated by Xlib. Color Conversion Contextcreation Therefore, when you specify a colormap as an argument to an Xlib function, you are indirectly specifying a CCC. CCCof colormap Color Conversion Contextof colormap There is a default CCC associated with each screen. Newly created CCCs inherit attributes from the default CCC, so the default CCC attributes can be modified to affect new CCCs. CCCdefault Color Conversion Contextdefault Xcms functions in which gamut mapping can occur return Status and have specific status values defined for them, as follows: XcmsFailure indicates that the function failed. XcmsSuccess indicates that the function succeeded. In addition, if the function performed any color conversion, the colors did not need to be compressed. XcmsSuccessWithCompression indicates the function performed color conversion and at least one of the colors needed to be compressed. The gamut compression method is determined by the gamut compression procedure in the CCC that is specified directly as a function argument or in the CCC indirectly specified by means of the colormap argument. Creating, Copying, and Destroying Colormaps To create a colormap for a screen, use . XCreateColormap Colormap XCreateColormap Display *display Window w Visual *visual int alloc display Specifies the connection to the X server. w Specifies the window on whose screen you want to create a colormap. visual Specifies a visual type supported on the screen. If the visual type is not one supported by the screen, a BadMatch error results. alloc Specifies the colormap entries to be allocated. You can pass AllocNone or AllocAll. The function creates a colormap of the specified visual type for the screen on which the specified window resides and returns the colormap ID associated with it. Note that the specified window is only used to determine the screen. The initial values of the colormap entries are undefined for the visual classes GrayScale, PseudoColor, and DirectColor. For StaticGray, StaticColor, and TrueColor, the entries have defined values, but those values are specific to the visual and are not defined by X. For StaticGray, StaticColor, and TrueColor, alloc must be AllocNone, or a BadMatch error results. For the other visual classes, if alloc is AllocNone, the colormap initially has no allocated entries, and clients can allocate them. For information about the visual types, see section 3.1. If alloc is AllocAll, the entire colormap is allocated writable. The initial values of all allocated entries are undefined. For GrayScale and PseudoColor, the effect is as if an call returned all pixel values from zero to N - 1, where N is the colormap entries value in the specified visual. For DirectColor, the effect is as if an call returned a pixel value of zero and red_mask, green_mask, and blue_mask values containing the same bits as the corresponding masks in the specified visual. However, in all cases, none of these entries can be freed by using . can generate BadAlloc, BadMatch, BadValue, and BadWindow errors. To create a new colormap when the allocation out of a previously shared colormap has failed because of resource exhaustion, use . XCopyColormapAndFree Colormap XCopyColormapAndFree Display *display Colormap colormap display Specifies the connection to the X server. colormap Specifies the colormap. The function creates a colormap of the same visual type and for the same screen as the specified colormap and returns the new colormap ID. It also moves all of the client's existing allocation from the specified colormap to the new colormap with their color values intact and their read-only or writable characteristics intact and frees those entries in the specified colormap. Color values in other entries in the new colormap are undefined. If the specified colormap was created by the client with alloc set to AllocAll, the new colormap is also created with AllocAll, all color values for all entries are copied from the specified colormap, and then all entries in the specified colormap are freed. If the specified colormap was not created by the client with AllocAll, the allocations to be moved are all those pixels and planes that have been allocated by the client using , , , or and that have not been freed since they were allocated. can generate BadAlloc and BadColor errors. To destroy a colormap, use . XFreeColormap XFreeColormap Display *display Colormap colormap display Specifies the connection to the X server. colormap Specifies the colormap that you want to destroy. The function deletes the association between the colormap resource ID and the colormap and frees the colormap storage. However, this function has no effect on the default colormap for a screen. If the specified colormap is an installed map for a screen, it is uninstalled (see ). If the specified colormap is defined as the colormap for a window (by , , or ), changes the colormap associated with the window to None and generates a ColormapNotify event. X does not define the colors displayed for a window with a colormap of None. can generate a BadColor error. Mapping Color Names to Values To map a color name to an RGB value, use . Colornaming XLookupColor Status XLookupColor Display *display Colormap colormap char *color_name XColor*exact_def_return, *screen_def_return display Specifies the connection to the X server. colormap Specifies the colormap. color_name Specifies the color name string (for example, red) whose color definition structure you want returned. exact_def_return Returns the exact RGB values. screen_def_return Returns the closest RGB values provided by the hardware. The function looks up the string name of a color with respect to the screen associated with the specified colormap. It returns both the exact color values and the closest values provided by the screen with respect to the visual type of the specified colormap. If the color name is not in the Host Portable Character Encoding, the result is implementation-dependent. Use of uppercase or lowercase does not matter. returns nonzero if the name is resolved; otherwise, it returns zero. can generate a BadColor error. To map a color name to the exact RGB value, use . Colornaming XParseColor Status XParseColor Display *display Colormap colormap char *spec XColor *exact_def_return display Specifies the connection to the X server. colormap Specifies the colormap. spec Specifies the color name string; case is ignored. exact_def_return Returns the exact color value for later use and sets the DoRed, DoGreen, and DoBlue flags. The function looks up the string name of a color with respect to the screen associated with the specified colormap. It returns the exact color value. If the color name is not in the Host Portable Character Encoding, the result is implementation-dependent. Use of uppercase or lowercase does not matter. returns nonzero if the name is resolved; otherwise, it returns zero. can generate a BadColor error. To map a color name to a value in an arbitrary color space, use . Colornaming XcmsLookupColor Status XcmsLookupColor Display *display Colormap colormap char *color_string XcmsColor*color_exact_return, *color_screen_return XcmsColorFormat result_format display Specifies the connection to the X server. colormap Specifies the colormap. color_string Specifies the color string(St. color_exact_return Returns the color specification parsed from the color string or parsed from the corresponding string found in a color-name database. color_screen_return Returns the color that can be reproduced on the screen. result_format Specifies the color format for the returned color specifications (color_screen_return and color_exact_return arguments). If the format is XcmsUndefinedFormat and the color string contains a numerical color specification, the specification is returned in the format used in that numerical color specification. If the format is XcmsUndefinedFormat and the color string contains a color name, the specification is returned in the format used to store the color in the database. The function looks up the string name of a color with respect to the screen associated with the specified colormap. It returns both the exact color values and the closest values provided by the screen with respect to the visual type of the specified colormap. The values are returned in the format specified by result_format. If the color name is not in the Host Portable Character Encoding, the result is implementation-dependent. Use of uppercase or lowercase does not matter. returns XcmsSuccess or XcmsSuccessWithCompression if the name is resolved; otherwise, it returns XcmsFailure. If XcmsSuccessWithCompression is returned, the color specification returned in color_screen_return is the result of gamut compression. Allocating and Freeing Color Cells There are two ways of allocating color cells: explicitly as read-only entries, one pixel value at a time, or read/write, where you can allocate a number of color cells and planes simultaneously. Read-only colormap cells A read-only cell has its RGB value set by the server. Read/write colormap cells Read/write cells do not have defined colors initially; functions described in the next section must be used to store values into them. Although it is possible for any client to store values into a read/write cell allocated by another client, read/write cells normally should be considered private to the client that allocated them. Read-only colormap cells are shared among clients. The server counts each allocation and freeing of the cell by clients. When the last client frees a shared cell, the cell is finally deallocated. If a single client allocates the same read-only cell multiple times, the server counts each such allocation, not just the first one. To allocate a read-only color cell with an RGB value, use . Allocationread-only colormap cells Read-only colormap cellsallocating Colorallocation XAllocColor Status XAllocColor Display *display Colormap colormap XColor *screen_in_out display Specifies the connection to the X server. colormap Specifies the colormap. screen_in_out Specifies and returns the values actually used in the colormap. The function allocates a read-only colormap entry corresponding to the closest RGB value supported by the hardware. returns the pixel value of the color closest to the specified RGB elements supported by the hardware and returns the RGB value actually used. The corresponding colormap cell is read-only. In addition, returns nonzero if it succeeded or zero if it failed. Color map Colorallocation Allocationcolormap read-only colormap cells Multiple clients that request the same effective RGB value can be assigned the same read-only entry, thus allowing entries to be shared. When the last client deallocates a shared cell, it is deallocated. does not use or affect the flags in the XColor structure. can generate a BadColor error. delim %% To allocate a read-only color cell with a color in arbitrary format, use . Allocationread-only colormap cells Read-only colormap cellsallocating Colorallocation XcmsAllocColor Status XcmsAllocColor Display *display Colormap colormap XcmsColor *color_in_out XcmsColorFormat result_format display Specifies the connection to the X server. colormap Specifies the colormap. color_in_out Specifies the color to allocate and returns the pixel and color that is actually used in the colormap. result_format Specifies the color format for the returned color specification. The function is similar to except the color can be specified in any format. The function ultimately calls to allocate a read-only color cell (colormap entry) with the specified color. first converts the color specified to an RGB value and then passes this to . returns the pixel value of the color cell and the color specification actually allocated. This returned color specification is the result of converting the RGB value returned by into the format specified with the result_format argument. If there is no interest in a returned color specification, unnecessary computation can be bypassed if result_format is set to XcmsRGBFormat. The corresponding colormap cell is read-only. If this routine returns XcmsFailure, the color_in_out color specification is left unchanged. can generate a BadColor error. To allocate a read-only color cell using a color name and return the closest color supported by the hardware in RGB format, use . Allocationread-only colormap cells Read-only colormap cellsallocating Colornaming Colorallocation XAllocNamedColor Status XAllocNamedColor Display *display Colormap colormap char *color_name XColor*screen_def_return, *exact_def_return display Specifies the connection to the X server. colormap Specifies the colormap. color_name Specifies the color name string (for example, red) whose color definition structure you want returned. screen_def_return Returns the closest RGB values provided by the hardware. exact_def_return Returns the exact RGB values. The function looks up the named color with respect to the screen that is associated with the specified colormap. It returns both the exact database definition and the closest color supported by the screen. The allocated color cell is read-only. The pixel value is returned in screen_def_return. If the color name is not in the Host Portable Character Encoding, the result is implementation-dependent. Use of uppercase or lowercase does not matter. If screen_def_return and exact_def_return point to the same structure, the pixel field will be set correctly, but the color values are undefined. returns nonzero if a cell is allocated; otherwise, it returns zero. can generate a BadColor error. To allocate a read-only color cell using a color name and return the closest color supported by the hardware in an arbitrary format, use . Allocationread-only colormap cells Read-only colormap cellsallocating Colornaming Colorallocation XcmsAllocNamedColor Status XcmsAllocNamedColor Display *display Colormap colormap char *color_string XcmsColor *color_screen_return XcmsColor *color_exact_return XcmsColorFormat result_format display Specifies the connection to the X server. colormap Specifies the colormap. color_string Specifies the color string whose color definition structure is to be returned. color_screen_return Returns the pixel value of the color cell and color specification that actually is stored for that cell. color_exact_return Returns the color specification parsed from the color string or parsed from the corresponding string found in a color-name database. result_format Specifies the color format for the returned color specifications (color_screen_return and color_exact_return arguments). If the format is XcmsUndefinedFormat and the color string contains a numerical color specification, the specification is returned in the format used in that numerical color specification. If the format is XcmsUndefinedFormat and the color string contains a color name, the specification is returned in the format used to store the color in the database. The function is similar to except that the color returned can be in any format specified. This function ultimately calls to allocate a read-only color cell with the color specified by a color string. The color string is parsed into an XcmsColor structure (see ), converted to an RGB value, and finally passed to . If the color name is not in the Host Portable Character Encoding, the result is implementation-dependent. Use of uppercase or lowercase does not matter. This function returns both the color specification as a result of parsing (exact specification) and the actual color specification stored (screen specification). This screen specification is the result of converting the RGB value returned by into the format specified in result_format. If there is no interest in a returned color specification, unnecessary computation can be bypassed if result_format is set to XcmsRGBFormat. If color_screen_return and color_exact_return point to the same structure, the pixel field will be set correctly, but the color values are undefined. can generate a BadColor error. To allocate read/write color cell and color plane combinations for a PseudoColor model, use . Read/write colormap cellsallocating Allocationread/write colormap cells Colorallocation XAllocColorCells Status XAllocColorCells Display *display Colormap colormap Bool contig unsigned long plane_masks_return[] unsigned int nplanes unsigned long pixels_return[] unsigned int npixels display Specifies the connection to the X server. colormap Specifies the colormap. contig Specifies a Boolean value that indicates whether the planes must be contiguous. plane_mask_return Returns an array of plane masks. nplanes Specifies the number of plane masks that are to be returned in the plane masks array. pixels_return Returns an array of pixel values. npixels Specifies the number of pixel values that are to be returned in the pixels_return array. The function allocates read/write color cells. The number of colors must be positive and the number of planes nonnegative, or a BadValue error results. If ncolors and nplanes are requested, then ncolors pixels and nplane plane masks are returned. No mask will have any bits set to 1 in common with any other mask or with any of the pixels. By ORing together each pixel with zero or more masks, ncolors × 2nplanes distinct pixels can be produced. All of these are allocated writable by the request. For GrayScale or PseudoColor, each mask has exactly one bit set to 1. For DirectColor, each has exactly three bits set to 1. If contig is True and if all masks are ORed together, a single contiguous set of bits set to 1 will be formed for GrayScale or PseudoColor and three contiguous sets of bits set to 1 (one within each pixel subfield) for DirectColor. The RGB values of the allocated entries are undefined. returns nonzero if it succeeded or zero if it failed. can generate BadColor and BadValue errors. To allocate read/write color resources for a DirectColor model, use . Read/write colormap planesallocating Allocationread/write colormap planes Colorallocation XAllocColorPlanes Status XAllocColorPlanes Display *display Colormap colormap Bool contig unsigned long pixels_return[] int ncolors intnreds,ngreens, nblues unsigned long *rmask_return,*gmask_return, *bmask_return display Specifies the connection to the X server. colormap Specifies the colormap. contig Specifies a Boolean value that indicates whether the planes must be contiguous. pixels_return Returns an array of pixel values. returns the pixel values in this array. ncolors Specifies the number of pixel values that are to be returned in the pixels_return array. nreds ngreens nblues Specify the number of red, green, and blue planes. The value you pass must be nonnegative. rmask_return gmask_return bmask_return Return bit masks for the red, green, and blue planes. The specified ncolors must be positive; and nreds, ngreens, and nblues must be nonnegative, or a BadValue error results. If ncolors colors, nreds reds, ngreens greens, and nblues blues are requested, ncolors pixels are returned; and the masks have nreds, ngreens, and nblues bits set to 1, respectively. If contig is True, each mask will have a contiguous set of bits set to 1. No mask will have any bits set to 1 in common with any other mask or with any of the pixels. For DirectColor, each mask will lie within the corresponding pixel subfield. By ORing together subsets of masks with each pixel value, ncolors × 2(nreds+ngreens+nblues) distinct pixel values can be produced. All of these are allocated by the request. However, in the colormap, there are only ncolors × 2nreds independent red entries, ncolors × 2ngreens independent green entries, and ncolors × 2nblues independent blue entries. This is true even for PseudoColor. When the colormap entry of a pixel value is changed (using , , or ), the pixel is decomposed according to the masks, and the corresponding independent entries are updated. returns nonzero if it succeeded or zero if it failed. can generate BadColor and BadValue errors. Freeingcolors To free colormap cells, use . XFreeColors Colordeallocation XFreeColors Display *display Colormap colormap unsigned long pixels[] int npixels unsigned long planes display Specifies the connection to the X server. colormap Specifies the colormap. pixels Specifies an array of pixel values that map to the cells in the specified colormap. npixels Specifies the number of pixels. planes Specifies the planes you want to free. The function frees the cells represented by pixels whose values are in the pixels array. The planes argument should not have any bits set to 1 in common with any of the pixels. The set of all pixels is produced by ORing together subsets of the planes argument with the pixels. The request frees all of these pixels that were allocated by the client (using XAllocColor XAllocNamedColor XAllocColorCells XAllocColorPlanes , , , and ). Note that freeing an individual pixel obtained from may not actually allow it to be reused until all of its related pixels are also freed. Similarly, a read-only entry is not actually freed until it has been freed by all clients, and if a client allocates the same read-only entry multiple times, it must free the entry that many times before the entry is actually freed. All specified pixels that are allocated by the client in the colormap are freed, even if one or more pixels produce an error. If a specified pixel is not a valid index into the colormap, a BadValue error results. If a specified pixel is not allocated by the client (that is, is unallocated or is only allocated by another client) or if the colormap was created with all entries writable (by passing AllocAll to ), a BadAccess error results. If more than one pixel is in error, the one that gets reported is arbitrary. can generate BadAccess, BadColor, and BadValue errors. Modifying and Querying Colormap Cells To store an RGB value in a single colormap cell, use . Colorstoring XStoreColor XStoreColor Display *display Colormap colormap XColor *color display Specifies the connection to the X server. colormap Specifies the colormap. color Specifies the pixel and RGB values. The function changes the colormap entry of the pixel value specified in the pixel member of the XColor structure. You specified this value in the pixel member of the XColor structure. This pixel value must be a read/write cell and a valid index into the colormap. If a specified pixel is not a valid index into the colormap, a BadValue error results. also changes the red, green, and/or blue color components. You specify which color components are to be changed by setting DoRed, DoGreen, and/or DoBlue in the flags member of the XColor structure. If the colormap is an installed map for its screen, the changes are visible immediately. can generate BadAccess, BadColor, and BadValue errors. To store multiple RGB values in multiple colormap cells, use . Colorstoring XStoreColors XStoreColors Display *display Colormap colormap XColor color[] int ncolors display Specifies the connection to the X server. colormap Specifies the colormap. color Specifies an array of color definition structures to be stored. ncolors Specifies the number of XColor structures in the color definition array. The function changes the colormap entries of the pixel values specified in the pixel members of the XColor structures. You specify which color components are to be changed by setting DoRed, DoGreen, and/or DoBlue in the flags member of the XColor structures. If the colormap is an installed map for its screen, the changes are visible immediately. changes the specified pixels if they are allocated writable in the colormap by any client, even if one or more pixels generates an error. If a specified pixel is not a valid index into the colormap, a BadValue error results. If a specified pixel either is unallocated or is allocated read-only, a BadAccess error results. If more than one pixel is in error, the one that gets reported is arbitrary. can generate BadAccess, BadColor, and BadValue errors. To store a color of arbitrary format in a single colormap cell, use . Colorstoring XcmsStoreColor Status XcmsStoreColor Display *display Colormap colormap XcmsColor *color display Specifies the connection to the X server. colormap Specifies the colormap. color Specifies the color cell and the color to store. Values specified in this XcmsColor structure remain unchanged on return. The function converts the color specified in the XcmsColor structure into RGB values. It then uses this RGB specification in an XColor structure, whose three flags (DoRed, DoGreen, and DoBlue) are set, in a call to to change the color cell specified by the pixel member of the XcmsColor structure. This pixel value must be a valid index for the specified colormap, and the color cell specified by the pixel value must be a read/write cell. If the pixel value is not a valid index, a BadValue error results. If the color cell is unallocated or is allocated read-only, a BadAccess error results. If the colormap is an installed map for its screen, the changes are visible immediately. Note that has no return value; therefore, an XcmsSuccess return value from this function indicates that the conversion to RGB succeeded and the call to was made. To obtain the actual color stored, use . Because of the screen's hardware limitations or gamut compression, the color stored in the colormap may not be identical to the color specified. can generate BadAccess, BadColor, and BadValue errors. To store multiple colors of arbitrary format in multiple colormap cells, use . Colorstoring XcmsStoreColors Status XcmsStoreColors Display *display Colormap colormap XcmsColor colors[] int ncolors Bool compression_flags_return[] display Specifies the connection to the X server. colormap Specifies the colormap. colors Specifies the color specification array of XcmsColor structures, each specifying a color cell and the color to store in that cell. Values specified in the array remain unchanged upon return. ncolors Specifies the number of XcmsColor structures in the color-specification array. compression_flags_return Returns an array of Boolean values indicating compression status. If a non-NULL pointer is supplied, each element of the array is set to True if the corresponding color was compressed and False otherwise. Pass NULL if the compression status is not useful. The function converts the colors specified in the array of XcmsColor structures into RGB values and then uses these RGB specifications in XColor structures, whose three flags (DoRed, DoGreen, and DoBlue) are set, in a call to to change the color cells specified by the pixel member of the corresponding XcmsColor structure. Each pixel value must be a valid index for the specified colormap, and the color cell specified by each pixel value must be a read/write cell. If a pixel value is not a valid index, a BadValue error results. If a color cell is unallocated or is allocated read-only, a BadAccess error results. If more than one pixel is in error, the one that gets reported is arbitrary. If the colormap is an installed map for its screen, the changes are visible immediately. Note that has no return value; therefore, an XcmsSuccess return value from this function indicates that conversions to RGB succeeded and the call to was made. To obtain the actual colors stored, use . Because of the screen's hardware limitations or gamut compression, the colors stored in the colormap may not be identical to the colors specified. can generate BadAccess, BadColor, and BadValue errors. To store a color specified by name in a single colormap cell, use . Colorstoring Colornaming XStoreNamedColor XStoreNamedColor Display *display Colormap colormap char *color unsigned long pixel int flags display Specifies the connection to the X server. colormap Specifies the colormap. color Specifies the color name string (for example, red). pixel Specifies the entry in the colormap. flags Specifies which red, green, and blue components are set. The function looks up the named color with respect to the screen associated with the colormap and stores the result in the specified colormap. The pixel argument determines the entry in the colormap. The flags argument determines which of the red, green, and blue components are set. You can set this member to the bitwise inclusive OR of the bits DoRed, DoGreen, and DoBlue. If the color name is not in the Host Portable Character Encoding, the result is implementation-dependent. Use of uppercase or lowercase does not matter. If the specified pixel is not a valid index into the colormap, a BadValue error results. If the specified pixel either is unallocated or is allocated read-only, a BadAccess error results. can generate BadAccess, BadColor, BadName, and BadValue errors. The and functions take pixel values in the pixel member of XColor structures and store in the structures the RGB values for those pixels from the specified colormap. The values returned for an unallocated entry are undefined. These functions also set the flags member in the XColor structure to all three colors. If a pixel is not a valid index into the specified colormap, a BadValue error results. If more than one pixel is in error, the one that gets reported is arbitrary. To query the RGB value of a single colormap cell, use . Colorquerying XQueryColor XQueryColor Display *display Colormap colormap XColor *def_in_out display Specifies the connection to the X server. colormap Specifies the colormap. def_in_out Specifies and returns the RGB values for the pixel specified in the structure. The function returns the current RGB value for the pixel in the XColor structure and sets the DoRed, DoGreen, and DoBlue flags. can generate BadColor and BadValue errors. To query the RGB values of multiple colormap cells, use . Colorquerying XQueryColors XQueryColors Display *display Colormap colormap XColor defs_in_out[] int ncolors display Specifies the connection to the X server. colormap Specifies the colormap. defs_in_out Specifies and returns an array of color definition structures for the pixel specified in the structure. ncolors Specifies the number of XColor structures in the color definition array. The function returns the RGB value for each pixel in each XColor structure and sets the DoRed, DoGreen, and DoBlue flags in each structure. can generate BadColor and BadValue errors. To query the color of a single colormap cell in an arbitrary format, use . Colorquerying XcmsQueryColor Status XcmsQueryColor Display *display Colormap colormap XcmsColor *color_in_out XcmsColorFormat result_format display Specifies the connection to the X server. colormap Specifies the colormap. color_in_out Specifies the pixel member that indicates the color cell to query. The color specification stored for the color cell is returned in this XcmsColor structure. result_format Specifies the color format for the returned color specification. The function obtains the RGB value for the pixel value in the pixel member of the specified XcmsColor structure and then converts the value to the target format as specified by the result_format argument. If the pixel is not a valid index in the specified colormap, a BadValue error results. can generate BadColor and BadValue errors. To query the color of multiple colormap cells in an arbitrary format, use . Colorquerying XcmsQueryColors Status XcmsQueryColors Display *display Colormap colormap XcmsColor colors_in_out[] unsigned int ncolors XcmsColorFormat result_format display Specifies the connection to the X server. colormap Specifies the colormap. colors_in_out Specifies an array of XcmsColor structures, each pixel member indicating the color cell to query. The color specifications for the color cells are returned in these structures. ncolors Specifies the number of XcmsColor structures in the color-specification array. result_format Specifies the color format for the returned color specification. The function obtains the RGB values for pixel values in the pixel members of XcmsColor structures and then converts the values to the target format as specified by the result_format argument. If a pixel is not a valid index into the specified colormap, a BadValue error results. If more than one pixel is in error, the one that gets reported is arbitrary. can generate BadColor and BadValue errors. Color Conversion Context Functions This section describes functions to create, modify, and query Color Conversion Contexts (CCCs). Associated with each colormap is an initial CCC transparently generated by Xlib. Color Conversion Contextcreation Therefore, when you specify a colormap as an argument to a function, you are indirectly specifying a CCC. CCCof colormap Color Conversion Contextof colormap The CCC attributes that can be modified by the X client are: Client White Point Gamut compression procedure and client data White point adjustment procedure and client data The initial values for these attributes are implementation specific. The CCC attributes for subsequently created CCCs can be defined by changing the CCC attributes of the default CCC. CCCdefault Color Conversion Contextdefault There is a default CCC associated with each screen. Getting and Setting the Color Conversion Context of a Colormap To obtain the CCC associated with a colormap, use . XcmsCCCOfColormap ColormapCCC of CCCof colormap Color Conversion Contextof colormap XcmsCCC XcmsCCCOfColormap Display *display Colormap colormap display Specifies the connection to the X server. colormap Specifies the colormap. The function returns the CCC associated with the specified colormap. Once obtained, the CCC attributes can be queried or modified. Unless the CCC associated with the specified colormap is changed with , this CCC is used when the specified colormap is used as an argument to color functions. To change the CCC associated with a colormap, use . XcmsSetCCCOfColormap ColormapCCC of CCCof colormap Color Conversion Contextof colormap XcmsCCC XcmsSetCCCOfColormap Display *display Colormap colormap XcmsCCC ccc display Specifies the connection to the X server. colormap Specifies the colormap. ccc Specifies the CCC. The function changes the CCC associated with the specified colormap. It returns the CCC previously associated with the colormap. If they are not used again in the application, CCCs should be freed by calling . Several colormaps may share the same CCC without restriction; this includes the CCCs generated by Xlib with each colormap. Xlib, however, creates a new CCC with each new colormap. Obtaining the Default Color Conversion Context You can change the default CCC attributes for subsequently created CCCs by changing the CCC attributes of the default CCC. CCCdefault Color Conversion Contextdefault A default CCC is associated with each screen. To obtain the default CCC for a screen, use . XcmsDefaultCCC Color Conversion Contextdefault CCCdefault XcmsCCC XcmsDefaultCCC Display *display int screen_number display Specifies the connection to the X server. screen_number Specifies the appropriate screen number on the host server. The function returns the default CCC for the specified screen. Its visual is the default visual of the screen. Its initial gamut compression and white point adjustment procedures as well as the associated client data are implementation specific. Color Conversion Context Macros Applications should not directly modify any part of the XcmsCCC. The following lists the C language macros, their corresponding function equivalents for other language bindings, and what data they both can return. DisplayOfCCC XcmsDisplayOfCCC DisplayOfCCC XcmsCCC ccc Display *XcmsDisplayOfCCC XcmsCCC ccc ccc Specifies the CCC. Both return the display associated with the specified CCC. VisualOfCCC XcmsVisualOfCCC VisualOfCCC XcmsCCC ccc Visual *XcmsVisualOfCCC XcmsCCC ccc ccc Specifies the CCC. Both return the visual associated with the specified CCC. ScreenNumberOfCCC XcmsScreenNumberOfCCC ScreenNumberOfCCC XcmsCCC ccc int XcmsScreenNumberOfCCC XcmsCCC ccc ccc Specifies the CCC. Both return the number of the screen associated with the specified CCC. ScreenWhitePointOfCCC XcmsScreenWhitePointOfCCC ScreenWhitePointOfCCC XcmsCCC ccc XcmsColor XcmsScreenWhitePointOfCCC XcmsCCC ccc ccc Specifies the CCC. Both return the white point of the screen associated with the specified CCC. ClientWhitePointOfCCC XcmsClientWhitePointOfCCC ClientWhitePointOfCCC XcmsCCC ccc XcmsColor *XcmsClientWhitePointOfCCC XcmsCCC ccc ccc Specifies the CCC. Both return the Client White Point of the specified CCC. Modifying Attributes of a Color Conversion Context To set the Client White Point in the CCC, use . XcmsSetWhitePoint Client White Pointof Color Conversion Context Status XcmsSetWhitePoint XcmsCCC ccc XcmsColor *color ccc Specifies the CCC. color Specifies the new Client White Point. The function changes the Client White Point in the specified CCC. Note that the pixel member is ignored and that the color specification is left unchanged upon return. The format for the new white point must be XcmsCIEXYZFormat, XcmsCIEuvYFormat, XcmsCIExyYFormat, or XcmsUndefinedFormat. If the color argument is NULL, this function sets the format component of the Client White Point specification to XcmsUndefinedFormat, indicating that the Client White Point is assumed to be the same as the Screen White Point. This function returns nonzero status if the format for the new white point is valid; otherwise, it returns zero. To set the gamut compression procedure and corresponding client data in a specified CCC, use . XcmsSetCompressionProc Gamut compressionsetting in Color Conversion Context Gamut compressionprocedure Gamut compressionclient data XcmsCompressionProc XcmsSetCompressionProc XcmsCCC ccc XcmsCompressionProc compression_proc XPointer client_data ccc Specifies the CCC. compression_proc Specifies the gamut compression procedure that is to be applied when a color lies outside the screen's color gamut. If NULL is specified and a function using this CCC must convert a color specification to a device-dependent format and encounters a color that lies outside the screen's color gamut, that function will return XcmsFailure. client_data Specifies client data for gamut compression procedure or NULL. The function first sets the gamut compression procedure and client data in the specified CCC with the newly specified procedure and client data and then returns the old procedure. To set the white point adjustment procedure and corresponding client data in a specified CCC, use . XcmsSetWhiteAdjustProc White point adjustmentsetting in Color Conversion Context White point adjustmentprocedure White point adjustmentclient data XcmsWhiteAdjustProc XcmsSetWhiteAdjustProc XcmsCCC ccc XcmsWhiteAdjustProc white_adjust_proc XPointer client_data ccc Specifies the CCC. white_adjust_proc Specifies the white point adjustment procedure. client_data Specifies client data for white point adjustment procedure or NULL. The function first sets the white point adjustment procedure and client data in the specified CCC with the newly specified procedure and client data and then returns the old procedure. Creating and Freeing a Color Conversion Context You can explicitly create a CCC within your application by calling . These created CCCs can then be used by those functions that explicitly call for a CCC argument. Old CCCs that will not be used by the application should be freed using . To create a CCC, use . XcmsCreateCCC Color Conversion Contextcreation CCCcreation XcmsCCC XcmsCreateCCC Display *display int screen_number Visual *visual XcmsColor *client_white_point XcmsCompressionProc compression_proc XPointer compression_client_data XcmsWhiteAdjustProc white_adjust_proc XPointer white_adjust_client_data display Specifies the connection to the X server. screen_number Specifies the appropriate screen number on the host server. visual Specifies the visual type. client_white_point Specifies the Client White Point. If NULL is specified, the Client White Point is to be assumed to be the same as the Screen White Point. Note that the pixel member is ignored. compression_proc Specifies the gamut compression procedure that is to be applied when a color lies outside the screen's color gamut. If NULL is specified and a function using this CCC must convert a color specification to a device-dependent format and encounters a color that lies outside the screen's color gamut, that function will return XcmsFailure. compression_client_data Specifies client data for use by the gamut compression procedure or NULL. white_adjust_proc Specifies the white adjustment procedure that is to be applied when the Client White Point differs from the Screen White Point. NULL indicates that no white point adjustment is desired. white_adjust_client_data Specifies client data for use with the white point adjustment procedure or NULL. The function creates a CCC for the specified display, screen, and visual. To free a CCC, use . XcmsFreeCCC Color Conversion Contextfreeing CCCfreeing void XcmsFreeCCC XcmsCCC ccc ccc Specifies the CCC. The function frees the memory used for the specified CCC. Note that default CCCs and those currently associated with colormaps are ignored. Converting between Color Spaces To convert an array of color specifications in arbitrary color formats to a single destination format, use . Color conversion Colorconversion XcmsConvertColors Status XcmsConvertColors XcmsCCC ccc XcmsColor colors_in_out[] unsigned int ncolors XcmsColorFormat target_format Bool compression_flags_return[] ccc Specifies the CCC. If conversion is between device-independent color spaces only (for example, TekHVC to CIELuv), the CCC is necessary only to specify the Client White Point. colors_in_out Specifies an array of color specifications. Pixel members are ignored and remain unchanged upon return. ncolors Specifies the number of XcmsColor structures in the color-specification array. target_format Specifies the target color specification format. compression_flags_return Returns an array of Boolean values indicating compression status. If a non-NULL pointer is supplied, each element of the array is set to True if the corresponding color was compressed and False otherwise. Pass NULL if the compression status is not useful. The function converts the color specifications in the specified array of XcmsColor structures from their current format to a single target format, using the specified CCC. When the return value is XcmsFailure, the contents of the color specification array are left unchanged. The array may contain a mixture of color specification formats (for example, 3 CIE XYZ, 2 CIE Luv, and so on). When the array contains both device-independent and device-dependent color specifications and the target_format argument specifies a device-dependent format (for example, XcmsRGBiFormat, XcmsRGBFormat), all specifications are converted to CIE XYZ format and then to the target device-dependent format. Callback Functions This section describes the gamut compression and white point adjustment callbacks. The gamut compression procedure specified in the CCC is called when an attempt to convert a color specification from XcmsCIEXYZ to a device-dependent format (typically XcmsRGBi) results in a color that lies outside the screen's color gamut. If the gamut compression procedure requires client data, this data is passed via the gamut compression client data in the CCC. During color specification conversion between device-independent and device-dependent color spaces, if a white point adjustment procedure is specified in the CCC, it is triggered when the Client White Point and Screen White Point differ. If required, the client data is obtained from the CCC. Prototype Gamut Compression Procedure The gamut compression callback interface must adhere to the following: XcmsCompressionProc typedef Status(*XcmsCompressionProc) XcmsCCC ccc XcmsColor colors_in_out[] unsigned int ncolors unsigned int index Bool compression_flags_return[] ccc Specifies the CCC. colors_in_out Specifies an array of color specifications. Pixel members should be ignored and must remain unchanged upon return. ncolors Specifies the number of XcmsColor structures in the color-specification array. index Specifies the index into the array of XcmsColor structures for the encountered color specification that lies outside the screen's color gamut. Valid values are 0 (for the first element) to ncolors - 1. compression_flags_return Returns an array of Boolean values for indicating compression status. If a non-NULL pointer is supplied and a color at a given index is compressed, then True should be stored at the corresponding index in this array; otherwise, the array should not be modified. When implementing a gamut compression procedure, consider the following rules and assumptions: The gamut compression procedure can attempt to compress one or multiple specifications at a time. When called, elements 0 to index - 1 in the color specification array can be assumed to fall within the screen's color gamut. In addition, these color specifications are already in some device-dependent format (typically XcmsRGBi). If any modifications are made to these color specifications, they must be in their initial device-dependent format upon return. When called, the element in the color specification array specified by the index argument contains the color specification outside the screen's color gamut encountered by the calling routine. In addition, this color specification can be assumed to be in XcmsCIEXYZ. Upon return, this color specification must be in XcmsCIEXYZ. When called, elements from index to ncolors - 1 in the color specification array may or may not fall within the screen's color gamut. In addition, these color specifications can be assumed to be in XcmsCIEXYZ. If any modifications are made to these color specifications, they must be in XcmsCIEXYZ upon return. The color specifications passed to the gamut compression procedure have already been adjusted to the Screen White Point. This means that at this point the color specification's white point is the Screen White Point. If the gamut compression procedure uses a device-independent color space not initially accessible for use in the color management system, use to ensure that it is added. Supplied Gamut Compression Procedures The following equations are useful in describing gamut compression functions: delim %% %CIELab~Psychometric~Chroma ~=~ sqrt(a_star sup 2 ~+~ b_star sup 2 )% %CIELab~Psychometric~Hue ~=~ tan sup -1 left [ b_star over a_star right ]% %CIELuv~Psychometric~Chroma ~=~ sqrt(u_star sup 2 ~+~ v_star sup 2 )% %CIELuv~Psychometric~Hue ~=~ tan sup -1 left [ v_star over u_star right ]% The gamut compression callback procedures provided by Xlib are as follows: XcmsCIELabClipL This brings the encountered out-of-gamut color specification into the screen's color gamut by reducing or increasing CIE metric lightness (L*) in the CIE L*a*b* color space until the color is within the gamut. If the Psychometric Chroma of the color specification is beyond maximum for the Psychometric Hue Angle, then while maintaining the same Psychometric Hue Angle, the color will be clipped to the CIE L*a*b* coordinates of maximum Psychometric Chroma. See . No client data is necessary. XcmsCIELabClipab This brings the encountered out-of-gamut color specification into the screen's color gamut by reducing Psychometric Chroma, while maintaining Psychometric Hue Angle, until the color is within the gamut. No client data is necessary. XcmsCIELabClipLab This brings the encountered out-of-gamut color specification into the screen's color gamut by replacing it with CIE L*a*b* coordinates that fall within the color gamut while maintaining the original Psychometric Hue Angle and whose vector to the original coordinates is the shortest attainable. No client data is necessary. XcmsCIELuvClipL This brings the encountered out-of-gamut color specification into the screen's color gamut by reducing or increasing CIE metric lightness (L*) in the CIE L*u*v* color space until the color is within the gamut. If the Psychometric Chroma of the color specification is beyond maximum for the Psychometric Hue Angle, then, while maintaining the same Psychometric Hue Angle, the color will be clipped to the CIE L*u*v* coordinates of maximum Psychometric Chroma. See . No client data is necessary. XcmsCIELuvClipuv This brings the encountered out-of-gamut color specification into the screen's color gamut by reducing Psychometric Chroma, while maintaining Psychometric Hue Angle, until the color is within the gamut. No client data is necessary. XcmsCIELuvClipLuv This brings the encountered out-of-gamut color specification into the screen's color gamut by replacing it with CIE L*u*v* coordinates that fall within the color gamut while maintaining the original Psychometric Hue Angle and whose vector to the original coordinates is the shortest attainable. No client data is necessary. XcmsTekHVCClipV This brings the encountered out-of-gamut color specification into the screen's color gamut by reducing or increasing the Value dimension in the TekHVC color space until the color is within the gamut. If Chroma of the color specification is beyond maximum for the particular Hue, then, while maintaining the same Hue, the color will be clipped to the Value and Chroma coordinates that represent maximum Chroma for that particular Hue. No client data is necessary. XcmsTekHVCClipC This brings the encountered out-of-gamut color specification into the screen's color gamut by reducing the Chroma dimension in the TekHVC color space until the color is within the gamut. No client data is necessary. XcmsTekHVCClipVC This brings the encountered out-of-gamut color specification into the screen's color gamut by replacing it with TekHVC coordinates that fall within the color gamut while maintaining the original Hue and whose vector to the original coordinates is the shortest attainable. No client data is necessary. Prototype White Point Adjustment Procedure The white point adjustment procedure interface must adhere to the following: XcmsWhiteAdjustProc typedef Status (*XcmsWhiteAdjustProc) XcmsCCC ccc XcmsColor *initial_white_point XcmsColor *target_white_point XcmsColorFormat target_format XcmsColor colors_in_out[] unsigned int ncolors Bool compression_flags_return[] ccc Specifies the CCC. initial_white_point Specifies the initial white point. target_white_point Specifies the target white point. target_format Specifies the target color specification format. colors_in_out Specifies an array of color specifications. Pixel members should be ignored and must remain unchanged upon return. ncolors Specifies the number of XcmsColor structures in the color-specification array. compression_flags_return Returns an array of Boolean values for indicating compression status. If a non-NULL pointer is supplied and a color at a given index is compressed, then True should be stored at the corresponding index in this array; otherwise, the array should not be modified. Supplied White Point Adjustment Procedures White point adjustment procedures provided by Xlib are as follows: XcmsCIELabWhiteShiftColors This uses the CIE L*a*b* color space for adjusting the chromatic character of colors to compensate for the chromatic differences between the source and destination white points. This procedure simply converts the color specifications to XcmsCIELab using the source white point and then converts to the target specification format using the destination's white point. No client data is necessary. XcmsCIELuvWhiteShiftColors This uses the CIE L*u*v* color space for adjusting the chromatic character of colors to compensate for the chromatic differences between the source and destination white points. This procedure simply converts the color specifications to XcmsCIELuv using the source white point and then converts to the target specification format using the destination's white point. No client data is necessary. XcmsTekHVCWhiteShiftColors This uses the TekHVC color space for adjusting the chromatic character of colors to compensate for the chromatic differences between the source and destination white points. This procedure simply converts the color specifications to XcmsTekHVC using the source white point and then converts to the target specification format using the destination's white point. An advantage of this procedure over those previously described is an attempt to minimize hue shift. No client data is necessary. From an implementation point of view, these white point adjustment procedures convert the color specifications to a device-independent but white-point-dependent color space (for example, CIE L*u*v*, CIE L*a*b*, TekHVC) using one white point and then converting those specifications to the target color space using another white point. In other words, the specification goes in the color space with one white point but comes out with another white point, resulting in a chromatic shift based on the chromatic displacement between the initial white point and target white point. The CIE color spaces that are assumed to be white-point-independent are CIE u'v'Y, CIE XYZ, and CIE xyY. When developing a custom white point adjustment procedure that uses a device-independent color space not initially accessible for use in the color management system, use to ensure that it is added. As an example, if the CCC specifies a white point adjustment procedure and if the Client White Point and Screen White Point differ, the function will use the white point adjustment procedure twice: Once to convert to XcmsRGB A second time to convert from XcmsRGB For example, assume the specification is in XcmsCIEuvY and the adjustment procedure is XcmsCIELuvWhiteShiftColors. During conversion to XcmsRGB, the call to results in the following series of color specification conversions: From XcmsCIEuvY to XcmsCIELuv using the Client White Point From XcmsCIELuv to XcmsCIEuvY using the Screen White Point From XcmsCIEuvY to XcmsCIEXYZ (CIE u'v'Y and XYZ are white-point-independent color spaces) From XcmsCIEXYZ to XcmsRGBi From XcmsRGBi to XcmsRGB The resulting RGB specification is passed to , and the RGB specification returned by is converted back to XcmsCIEuvY by reversing the color conversion sequence. Gamut Querying Functions This section describes the gamut querying functions that Xlib provides. These functions allow the client to query the boundary of the screen's color gamut in terms of the CIE L*a*b*, CIE L*u*v*, and TekHVC color spaces. Gamut querying Functions are also provided that allow you to query the color specification of: White (full-intensity red, green, and blue) Red (full-intensity red while green and blue are zero) Green (full-intensity green while red and blue are zero) Blue (full-intensity blue while red and green are zero) Black (zero-intensity red, green, and blue) The white point associated with color specifications passed to and returned from these gamut querying functions is assumed to be the Screen White Point. Screen White Point This is a reasonable assumption, because the client is trying to query the screen's color gamut. The following naming convention is used for the Max and Min functions: Xcms<color_space>QueryMax<dimensions> Xcms<color_space>QueryMin<dimensions> The <dimensions> consists of a letter or letters that identify the dimensions of the color space that are not fixed. For example, is given a fixed Hue and Value for which maximum Chroma is found. Red, Green, and Blue Queries To obtain the color specification for black (zero-intensity red, green, and blue), use . XcmsQueryBlack Status XcmsQueryBlack XcmsCCC ccc XcmsColorFormat target_format XcmsColor *color_return ccc Specifies the CCC. The CCC's Client White Point and white point adjustment procedures are ignored. target_format Specifies the target color specification format. color_return Returns the color specification in the specified target format for zero-intensity red, green, and blue. The white point associated with the returned color specification is the Screen White Point. The value returned in the pixel member is undefined. The function returns the color specification in the specified target format for zero-intensity red, green, and blue. To obtain the color specification for blue (full-intensity blue while red and green are zero), use . XcmsQueryBlue Status XcmsQueryBlue XcmsCCC ccc XcmsColorFormat target_format XcmsColor *color_return ccc Specifies the CCC. The CCC's Client White Point and white point adjustment procedures are ignored. target_format Specifies the target color specification format. color_return Returns the color specification in the specified target format for full-intensity blue while red and green are zero. The white point associated with the returned color specification is the Screen White Point. The value returned in the pixel member is undefined. The function returns the color specification in the specified target format for full-intensity blue while red and green are zero. To obtain the color specification for green (full-intensity green while red and blue are zero), use . XcmsQueryGreen Status XcmsQueryGreen XcmsCCC ccc XcmsColorFormat target_format XcmsColor *color_return ccc Specifies the CCC. The CCC's Client White Point and white point adjustment procedures are ignored. target_format Specifies the target color specification format. color_return Returns the color specification in the specified target format for full-intensity green while red and blue are zero. The white point associated with the returned color specification is the Screen White Point. The value returned in the pixel member is undefined. The function returns the color specification in the specified target format for full-intensity green while red and blue are zero. To obtain the color specification for red (full-intensity red while green and blue are zero), use . XcmsQueryRed Status XcmsQueryRed XcmsCCC ccc XcmsColorFormat target_format XcmsColor *color_return ccc Specifies the CCC. The CCC's Client White Point and white point adjustment procedures are ignored. target_format Specifies the target color specification format. color_return Returns the color specification in the specified target format for full-intensity red while green and blue are zero. The white point associated with the returned color specification is the Screen White Point. The value returned in the pixel member is undefined. The function returns the color specification in the specified target format for full-intensity red while green and blue are zero. To obtain the color specification for white (full-intensity red, green, and blue), use . XcmsQueryWhite Status XcmsQueryWhite XcmsCCC ccc XcmsColorFormat target_format XcmsColor *color_return ccc Specifies the CCC. The CCC's Client White Point and white point adjustment procedures are ignored. target_format Specifies the target color specification format. color_return Returns the color specification in the specified target format for full-intensity red, green, and blue. The white point associated with the returned color specification is the Screen White Point. The value returned in the pixel member is undefined. The function returns the color specification in the specified target format for full-intensity red, green, and blue. CIELab Queries The following equations are useful in describing the CIELab query functions: delim %% Psychometric Hue Angle CIE metric lightness Psychometric Chroma Psychometric Chromamaximum %CIELab~Psychometric~Chroma ~=~ sqrt(a_star sup 2 ~+~ b_star sup 2 )% %CIELab~Psychometric~Hue ~=~ tan sup -1 left [ b_star over a_star right ]% To obtain the CIE L*a*b* coordinates of maximum Psychometric Chroma for a given Psychometric Hue Angle and CIE metric lightness (L*), use . XcmsCIELabQueryMaxC Status XcmsCIELabQueryMaxC XcmsCCC ccc XcmsFloat hue_angle XcmsFloat L_star XcmsColor *color_return ccc Specifies the CCC. The CCC's Client White Point and white point adjustment procedures are ignored. hue_angle Specifies the hue angle (in degrees) at which to find maximum chroma. L_star Specifies the lightness (L*) at which to find maximum chroma. color_return Returns the CIE L*a*b* coordinates of maximum chroma displayable by the screen for the given hue angle and lightness. The white point associated with the returned color specification is the Screen White Point. The value returned in the pixel member is undefined. The function, given a hue angle and lightness, finds the point of maximum chroma displayable by the screen. It returns this point in CIE L*a*b* coordinates. To obtain the CIE L*a*b* coordinates of maximum CIE metric lightness (L*) for a given Psychometric Hue Angle and Psychometric Chroma, use . Psychometric Hue Angle CIE metric lightness CIE metric lightnessmaximum XcmsCIELabQueryMaxL Status XcmsCIELabQueryMaxL XcmsCCC ccc XcmsFloat hue_angle XcmsFloat chroma XcmsColor *color_return ccc Specifies the CCC. The CCC's Client White Point and white point adjustment procedures are ignored. hue_angle Specifies the hue angle (in degrees) at which to find maximum lightness. chroma Specifies the chroma at which to find maximum lightness. color_return Returns the CIE L*a*b* coordinates of maximum lightness displayable by the screen for the given hue angle and chroma. The white point associated with the returned color specification is the Screen White Point. The value returned in the pixel member is undefined. The function, given a hue angle and chroma, finds the point in CIE L*a*b* color space of maximum lightness (L*) displayable by the screen. It returns this point in CIE L*a*b* coordinates. An XcmsFailure return value usually indicates that the given chroma is beyond maximum for the given hue angle. To obtain the CIE L*a*b* coordinates of maximum Psychometric Chroma for a given Psychometric Hue Angle, use . Psychometric Hue Angle Psychometric Chroma CIE metric lightness Psychometric Chromamaximum CIE metric lightnessmaximum XcmsCIELabQueryMaxLC Status XcmsCIELabQueryMaxLC XcmsCCC ccc XcmsFloat hue_angle XcmsColor *color_return ccc Specifies the CCC. The CCC's Client White Point and white point adjustment procedures are ignored. hue_angle Specifies the hue angle (in degrees) at which to find maximum chroma. color_return Returns the CIE L*a*b* coordinates of maximum chroma displayable by the screen for the given hue angle. The white point associated with the returned color specification is the Screen White Point. The value returned in the pixel member is undefined. The function, given a hue angle, finds the point of maximum chroma displayable by the screen. It returns this point in CIE L*a*b* coordinates. To obtain the CIE L*a*b* coordinates of minimum CIE metric lightness (L*) for a given Psychometric Hue Angle and Psychometric Chroma, use . Psychometric Hue Angle CIE metric lightness CIE metric lightnessminimum XcmsCIELabQueryMinL Status XcmsCIELabQueryMinL XcmsCCC ccc XcmsFloat hue_angle XcmsFloat chroma XcmsColor *color_return ccc Specifies the CCC. The CCC's Client White Point and white point adjustment procedures are ignored. hue_angle Specifies the hue angle (in degrees) at which to find minimum lightness. chroma Specifies the chroma at which to find minimum lightness. color_return Returns the CIE L*a*b* coordinates of minimum lightness displayable by the screen for the given hue angle and chroma. The white point associated with the returned color specification is the Screen White Point. The value returned in the pixel member is undefined. The function, given a hue angle and chroma, finds the point of minimum lightness (L*) displayable by the screen. It returns this point in CIE L*a*b* coordinates. An XcmsFailure return value usually indicates that the given chroma is beyond maximum for the given hue angle. CIELuv Queries The following equations are useful in describing the CIELuv query functions: delim %% Psychometric Hue Angle CIE metric lightness Psychometric Chroma Psychometric Chromamaximum %CIELuv~Psychometric~Chroma ~=~ sqrt(u_star sup 2 ~+~ v_star sup 2 )% %CIELuv~Psychometric~Hue ~=~ tan sup -1 left [ v_star over u_star right ]% To obtain the CIE L*u*v* coordinates of maximum Psychometric Chroma for a given Psychometric Hue Angle and CIE metric lightness (L*), use . XcmsCIELuvQueryMaxC Status XcmsCIELuvQueryMaxC XcmsCCC ccc XcmsFloat hue_angle XcmsFloat L_star XcmsColor *color_return ccc Specifies the CCC. The CCC's Client White Point and white point adjustment procedures are ignored. hue_angle Specifies the hue angle (in degrees) at which to find maximum chroma. L_star Specifies the lightness (L*) at which to find maximum chroma. color_return Returns the CIE L*u*v* coordinates of maximum chroma displayable by the screen for the given hue angle and lightness. The white point associated with the returned color specification is the Screen White Point. The value returned in the pixel member is undefined. The function, given a hue angle and lightness, finds the point of maximum chroma displayable by the screen. It returns this point in CIE L*u*v* coordinates. To obtain the CIE L*u*v* coordinates of maximum CIE metric lightness (L*) for a given Psychometric Hue Angle and Psychometric Chroma, use . Psychometric Hue Angle CIE metric lightness CIE metric lightnessmaximum XcmsCIELuvQueryMaxL Status XcmsCIELuvQueryMaxL XcmsCCC ccc XcmsFloat hue_angle XcmsFloat chroma XcmsColor *color_return ccc Specifies the CCC. The CCC's Client White Point and white point adjustment procedures are ignored. hue_angle Specifies the hue angle (in degrees) at which to find maximum lightness. L_star Specifies the lightness (L*) at which to find maximum lightness. color_return Returns the CIE L*u*v* coordinates of maximum lightness displayable by the screen for the given hue angle and chroma. The white point associated with the returned color specification is the Screen White Point. The value returned in the pixel member is undefined. The function, given a hue angle and chroma, finds the point in CIE L*u*v* color space of maximum lightness (L*) displayable by the screen. It returns this point in CIE L*u*v* coordinates. An XcmsFailure return value usually indicates that the given chroma is beyond maximum for the given hue angle. To obtain the CIE L*u*v* coordinates of maximum Psychometric Chroma for a given Psychometric Hue Angle, use . Psychometric Hue Angle Psychometric Chroma CIE metric lightness Psychometric Chromamaximum CIE metric lightnessmaximum XcmsCIELuvQueryMaxLC Status XcmsCIELuvQueryMaxLC XcmsCCC ccc XcmsFloat hue_angle XcmsColor *color_return ccc Specifies the CCC. The CCC's Client White Point and white point adjustment procedures are ignored. hue_angle Specifies the hue angle (in degrees) at which to find maximum chroma. color_return Returns the CIE L*u*v* coordinates of maximum chroma displayable by the screen for the given hue angle. The white point associated with the returned color specification is the Screen White Point. The value returned in the pixel member is undefined. The function, given a hue angle, finds the point of maximum chroma displayable by the screen. It returns this point in CIE L*u*v* coordinates. To obtain the CIE L*u*v* coordinates of minimum CIE metric lightness (L*) for a given Psychometric Hue Angle and Psychometric Chroma, use . Psychometric Hue Angle CIE metric lightness CIE metric lightnessminimum XcmsCIELuvQueryMinL Status XcmsCIELuvQueryMinL XcmsCCC ccc XcmsFloat hue_angle XcmsFloat chroma XcmsColor *color_return ccc Specifies the CCC. The CCC's Client White Point and white point adjustment procedures are ignored. hue_angle Specifies the hue angle (in degrees) at which to find minimum lightness. chroma Specifies the chroma at which to find minimum lightness. color_return Returns the CIE L*u*v* coordinates of minimum lightness displayable by the screen for the given hue angle and chroma. The white point associated with the returned color specification is the Screen White Point. The value returned in the pixel member is undefined. The function, given a hue angle and chroma, finds the point of minimum lightness (L*) displayable by the screen. It returns this point in CIE L*u*v* coordinates. An XcmsFailure return value usually indicates that the given chroma is beyond maximum for the given hue angle. TekHVC Queries To obtain the maximum Chroma for a given Hue and Value, use . Chroma Chromamaximum XcmsTekHVCQueryMaxC Status XcmsTekHVCQueryMaxC XcmsCCC ccc XcmsFloat hue XcmsFloat value XcmsColor *color_return ccc Specifies the CCC. The CCC's Client White Point and white point adjustment procedures are ignored. hue Specifies the Hue in which to find the maximum Chroma. value Specifies the Value in which to find the maximum Chroma. color_return Returns the maximum Chroma along with the actual Hue and Value at which the maximum Chroma was found. The white point associated with the returned color specification is the Screen White Point. The value returned in the pixel member is undefined. The function, given a Hue and Value, determines the maximum Chroma in TekHVC color space displayable by the screen. It returns the maximum Chroma along with the actual Hue and Value at which the maximum Chroma was found. To obtain the maximum Value for a given Hue and Chroma, use . Value Valuemaximum XcmsTekHVCQueryMaxV Status XcmsTekHVCQueryMaxV XcmsCCC ccc XcmsFloat hue XcmsFloat chroma XcmsColor *color_return ccc Specifies the CCC. The CCC's Client White Point and white point adjustment procedures are ignored. hue Specifies the Hue in which to find the maximum Value. chroma Specifies the chroma at which to find maximum Value. color_return Returns the maximum Value along with the Hue and Chroma at which the maximum Value was found. The white point associated with the returned color specification is the Screen White Point. The value returned in the pixel member is undefined. The function, given a Hue and Chroma, determines the maximum Value in TekHVC color space displayable by the screen. It returns the maximum Value and the actual Hue and Chroma at which the maximum Value was found. To obtain the maximum Chroma and Value at which it is reached for a specified Hue, use . Chroma Value Chromamaximum Valuemaximum XcmsTekHVCQueryMaxVC Status XcmsTekHVCQueryMaxVC XcmsCCC ccc XcmsFloat hue XcmsColor *color_return ccc Specifies the CCC. The CCC's Client White Point and white point adjustment procedures are ignored. hue Specifies the Hue in which to find the maximum Chroma. color_return Returns the color specification in XcmsTekHVC for the maximum Chroma, the Value at which that maximum Chroma is reached, and the actual Hue at which the maximum Chroma was found. The white point associated with the returned color specification is the Screen White Point. The value returned in the pixel member is undefined. The function, given a Hue, determines the maximum Chroma in TekHVC color space displayable by the screen and the Value at which that maximum Chroma is reached. It returns the maximum Chroma, the Value at which that maximum Chroma is reached, and the actual Hue for which the maximum Chroma was found. To obtain a specified number of TekHVC specifications such that they contain maximum Values for a specified Hue and the Chroma at which the maximum Values are reached, use . Chroma Value Chromamaximum Valuemaximum XcmsTekHVCQueryMaxVSamples Status XcmsTekHVCQueryMaxVSamples XcmsCCC ccc XcmsFloat hue XcmsColor colors_return[] unsigned int nsamples ccc Specifies the CCC. The CCC's Client White Point and white point adjustment procedures are ignored. hue Specifies the Hue for maximum Chroma/Value samples. nsamples Specifies the number of samples. colors_return Returns nsamples of color specifications in XcmsTekHVC such that the Chroma is the maximum attainable for the Value and Hue. The white point associated with the returned color specification is the Screen White Point. The value returned in the pixel member is undefined. The returns nsamples of maximum Value, the Chroma at which that maximum Value is reached, and the actual Hue for which the maximum Chroma was found. These sample points may then be used to plot the maximum Value/Chroma boundary of the screen's color gamut for the specified Hue in TekHVC color space. To obtain the minimum Value for a given Hue and Chroma, use . Value Valueminimum XcmsTekHVCQueryMinV Status XcmsTekHVCQueryMinV XcmsCCC ccc XcmsFloat hue XcmsFloat chroma XcmsColor *color_return ccc Specifies the CCC. The CCC's Client White Point and white point adjustment procedures are ignored. hue Specifies the Hue in which to find the minimum Value. value Specifies the Value in which to find the minimum Value. color_return Returns the minimum Value and the actual Hue and Chroma at which the minimum Value was found. The white point associated with the returned color specification is the Screen White Point. The value returned in the pixel member is undefined. The function, given a Hue and Chroma, determines the minimum Value in TekHVC color space displayable by the screen. It returns the minimum Value and the actual Hue and Chroma at which the minimum Value was found. Color Management Extensions The Xlib color management facilities can be extended in two ways: Device-Independent Color Spaces Device-independent color spaces that are derivable to CIE XYZ space can be added using the function. Color Characterization Function Set A Color Characterization Function Set consists of device-dependent color spaces and their functions that convert between these color spaces and the CIE XYZ color space, bundled together for a specific class of output devices. A function set can be added using the function. Color Spaces The CIE XYZ color space serves as the hub for all conversions between device-independent and device-dependent color spaces. Therefore, the knowledge to convert an XcmsColor structure to and from CIE XYZ format is associated with each color space. For example, conversion from CIE L*u*v* to RGB requires the knowledge to convert from CIE L*u*v* to CIE XYZ and from CIE XYZ to RGB. This knowledge is stored as an array of functions that, when applied in series, will convert the XcmsColor structure to or from CIE XYZ format. This color specification conversion mechanism facilitates the addition of color spaces. Of course, when converting between only device-independent color spaces or only device-dependent color spaces, shortcuts are taken whenever possible. For example, conversion from TekHVC to CIE L*u*v* is performed by intermediate conversion to CIE u*v*Y and then to CIE L*u*v*, thus bypassing conversion between CIE u*v*Y and CIE XYZ. Adding Device-Independent Color Spaces To add a device-independent color space, use . XcmsAddColorSpace Status XcmsAddColorSpace XcmsColorSpace *color_space color_space Specifies the device-independent color space to add. The function makes a device-independent color space (actually an XcmsColorSpace structure) accessible by the color management system. Because format values for unregistered color spaces are assigned at run time, they should be treated as private to the client. If references to an unregistered color space must be made outside the client (for example, storing color specifications in a file using the unregistered color space), then reference should be made by color space prefix (see and ). If the XcmsColorSpace structure is already accessible in the color management system, returns XcmsSuccess. Note that added XcmsColorSpaces must be retained for reference by Xlib. Querying Color Space Format and Prefix To obtain the format associated with the color space associated with a specified color string prefix, use . XcmsFormatOfPrefix XcmsColorFormat XcmsFormatOfPrefix char *prefix prefix Specifies the string that contains the color space prefix. The function returns the format for the specified color space prefix (for example, the string ``CIEXYZ''). The prefix is case-insensitive. If the color space is not accessible in the color management system, returns XcmsUndefinedFormat. To obtain the color string prefix associated with the color space specified by a color format, use . XcmsPrefixOfFormat char *XcmsPrefixOfFormat XcmsColorFormat format format Specifies the color specification format. The function returns the string prefix associated with the color specification encoding specified by the format argument. Otherwise, if no encoding is found, it returns NULL. The returned string must be treated as read-only. Creating Additional Color Spaces Color space specific information necessary for color space conversion and color string parsing is stored in an XcmsColorSpace structure. Therefore, a new structure containing this information is required for each additional color space. In the case of device-independent color spaces, a handle to this new structure (that is, by means of a global variable) is usually made accessible to the client program for use with the function. If a new XcmsColorSpace structure specifies a color space not registered with the X Consortium, they should be treated as private to the client because format values for unregistered color spaces are assigned at run time. If references to an unregistered color space must be made outside the client (for example, storing color specifications in a file using the unregistered color space), then reference should be made by color space prefix (see and ). typedef (*XcmsConversionProc)(); typedef XcmsConversionProc *XcmsFuncListPtr; /* A NULL terminated list of function pointers*/ typedef struct _XcmsColorSpace { char *prefix; XcmsColorFormat format; XcmsParseStringProc parseString; XcmsFuncListPtr to_CIEXYZ; XcmsFuncListPtr from_CIEXYZ; int inverse_flag; } XcmsColorSpace; The prefix member specifies the prefix that indicates a color string is in this color space's string format. For example, the strings ``ciexyz'' or ``CIEXYZ'' for CIE XYZ, and ``rgb'' or ``RGB'' for RGB. The prefix is case insensitive. The format member specifies the color specification format. Formats for unregistered color spaces are assigned at run time. The parseString member contains a pointer to the function that can parse a color string into an XcmsColor structure. This function returns an integer (int): nonzero if it succeeded and zero otherwise. The to_CIEXYZ and from_CIEXYZ members contain pointers, each to a NULL terminated list of function pointers. When the list of functions is executed in series, it will convert the color specified in an XcmsColor structure from/to the current color space format to/from the CIE XYZ format. Each function returns an integer (int): nonzero if it succeeded and zero otherwise. The white point to be associated with the colors is specified explicitly, even though white points can be found in the CCC. The inverse_flag member, if nonzero, specifies that for each function listed in to_CIEXYZ, its inverse function can be found in from_CIEXYZ such that: Given: n = number of functions in each list for each i, such that 0 <= i < n from_CIEXYZ[n - i - 1] is the inverse of to_CIEXYZ[i]. This allows Xlib to use the shortest conversion path, thus bypassing CIE XYZ if possible (for example, TekHVC to CIE L*u*v*). Parse String Callback The callback in the XcmsColorSpace structure for parsing a color string for the particular color space must adhere to the following software interface specification: XcmsParseStringProc Status XcmsParseStringProc char *color_string XcmsColor *color_return color_string Specifies the color string to parse. color_return Returns the color specification in the color space's format. Color Specification Conversion Callback Callback functions in the XcmsColorSpace structure for converting a color specification between device-independent spaces must adhere to the following software interface specification: Status ConversionProc XcmsCCC ccc XcmsColor *white_point XcmsColor *colors_in_out unsigned int ncolors ccc Specifies the CCC. white_point Specifies the white point associated with color specifications. The pixel member should be ignored, and the entire structure remain unchanged upon return. colors_in_out Specifies an array of color specifications. Pixel members should be ignored and must remain unchanged upon return. ncolors Specifies the number of XcmsColor structures in the color-specification array. Callback functions in the XcmsColorSpace structure for converting a color specification to or from a device-dependent space must adhere to the following software interface specification: Status ConversionProc XcmsCCC ccc XcmsColor *colors_in_out unsigned int ncolors Bool compression_flags_return[] ccc Specifies the CCC. colors_in_out Specifies an array of color specifications. Pixel members should be ignored and must remain unchanged upon return. ncolors Specifies the number of XcmsColor structures in the color-specification array. compression_flags_return Returns an array of Boolean values for indicating compression status. If a non-NULL pointer is supplied and a color at a given index is compressed, then True should be stored at the corresponding index in this array; otherwise, the array should not be modified. Conversion functions are available globally for use by other color spaces. The conversion functions provided by Xlib are: Function Converts from Converts to XcmsCIELabToCIEXYZ XcmsCIELabFormat XcmsCIEXYZFormat XcmsCIELuvToCIEuvY XcmsCIELuvFormat XcmsCIEuvYFormat XcmsCIEXYZToCIELab XcmsCIEXYZFormat XcmsCIELabFormat XcmsCIEXYZToCIEuvY XcmsCIEXYZFormat XcmsCIEuvYFormat XcmsCIEXYZToCIExyY XcmsCIEXYZFormat XcmsCIExyYFormat XcmsCIEXYZToRGBi XcmsCIEXYZFormat XcmsRGBiFormat XcmsCIEuvYToCIELuv XcmsCIEuvYFormat XcmsCIELabFormat XcmsCIEuvYToCIEXYZ XcmsCIEuvYFormat XcmsCIEXYZFormat XcmsCIEuvYToTekHVC XcmsCIEuvYFormat XcmsTekHVCFormat XcmsCIExyYToCIEXYZ XcmsCIExyYFormat XcmsCIEXYZFormat XcmsRGBToRGBi XcmsRGBFormat XcmsRGBiFormat XcmsRGBiToCIEXYZ XcmsRGBiFormat XcmsCIEXYZFormat XcmsRGBiToRGB XcmsRGBiFormat XcmsRGBFormat XcmsTekHVCToCIEuvY XcmsTekHVCFormat XcmsCIEuvYFormat Function Sets Function set Function setLINEAR_RGB Functions to convert between device-dependent color spaces and CIE XYZ may differ for different classes of output devices (for example, color versus gray monitors). Therefore, the notion of a Color Characterization Function Set has been developed. A function set consists of device-dependent color spaces and the functions that convert color specifications between these device-dependent color spaces and the CIE XYZ color space appropriate for a particular class of output devices. The function set also contains a function that reads color characterization data off root window properties. It is this characterization data that will differ between devices within a class of output devices. Device Color Characterization For details about how color characterization data is stored in root window properties, see the section on Device Color Characterization in the Inter-Client Communication Conventions Manual. The LINEAR_RGB function set is provided by Xlib and will support most color monitors. Function sets may require data that differs from those needed for the LINEAR_RGB function set. In that case, its corresponding data may be stored on different root window properties. Adding Function Sets To add a function set, use . XcmsAddFunctionSet Status XcmsAddFunctionSet XcmsFunctionSet *function_set function_set Specifies the function set to add. The function adds a function set to the color management system. If the function set uses device-dependent XcmsColorSpace structures not accessible in the color management system, adds them. If an added XcmsColorSpace structure is for a device-dependent color space not registered with the X Consortium, they should be treated as private to the client because format values for unregistered color spaces are assigned at run time. If references to an unregistered color space must be made outside the client (for example, storing color specifications in a file using the unregistered color space), then reference should be made by color space prefix (see and ). Additional function sets should be added before any calls to other Xlib routines are made. If not, the XcmsPerScrnInfo member of a previously created XcmsCCC does not have the opportunity to initialize with the added function set. Creating Additional Function Sets The creation of additional function sets should be required only when an output device does not conform to existing function sets or when additional device-dependent color spaces are necessary. A function set consists primarily of a collection of device-dependent XcmsColorSpace structures and a means to read and store a screen's color characterization data. This data is stored in an XcmsFunctionSet structure. A handle to this structure (that is, by means of global variable) is usually made accessible to the client program for use with . If a function set uses new device-dependent XcmsColorSpace structures, they will be transparently processed into the color management system. Function sets can share an XcmsColorSpace structure for a device-dependent color space. In addition, multiple XcmsColorSpace structures are allowed for a device-dependent color space; however, a function set can reference only one of them. These XcmsColorSpace structures will differ in the functions to convert to and from CIE XYZ, thus tailored for the specific function set. typedef struct _XcmsFunctionSet { XcmsColorSpace **DDColorSpaces; XcmsScreenInitProc screenInitProc; XcmsScreenFreeProc screenFreeProc; } XcmsFunctionSet; The DDColorSpaces member is a pointer to a NULL terminated list of pointers to XcmsColorSpace structures for the device-dependent color spaces that are supported by the function set. The screenInitProc member is set to the callback procedure (see the following interface specification) that initializes the XcmsPerScrnInfo structure for a particular screen. The screen initialization callback must adhere to the following software interface specification: XcmsScreenInitProc typedef Status (*XcmsScreenInitProc) Display *display int screen_number ScmsPerScrnInfo *screen_info display Specifies the connection to the X server. screen_number Specifies the appropriate screen number on the host server. screen_info Specifies the XcmsPerScrnInfo structure, which contains the per screen information. The screen initialization callback in the XcmsFunctionSet structure fetches the color characterization data (device profile) for the specified screen, typically off properties on the screen's root window. It then initializes the specified XcmsPerScrnInfo structure. Device profile Color Characterization Data If successful, the procedure fills in the XcmsPerScrnInfo structure as follows: It sets the screenData member to the address of the created device profile data structure (contents known only by the function set). It next sets the screenWhitePoint member. It next sets the functionSet member to the address of the XcmsFunctionSet structure. It then sets the state member to XcmsInitSuccess and finally returns XcmsSuccess. If unsuccessful, the procedure sets the state member to XcmsInitFailure and returns XcmsFailure. The XcmsPerScrnInfo structure contains: typedef struct _XcmsPerScrnInfo { XcmsColor screenWhitePoint; XPointer functionSet; XPointer screenData; unsigned char state; char pad[3]; } XcmsPerScrnInfo; The screenWhitePoint member specifies the white point inherent to the screen. The functionSet member specifies the appropriate function set. The screenData member specifies the device profile. The state member is set to one of the following: XcmsInitNone indicates initialization has not been previously attempted. XcmsInitFailure indicates initialization has been previously attempted but failed. XcmsInitSuccess indicates initialization has been previously attempted and succeeded. The screen free callback must adhere to the following software interface specification: typedef void (*XcmsScreenFreeProc) XPointer screenData screenData Specifies the data to be freed. This function is called to free the screenData stored in an XcmsPerScrnInfo structure. devices (for example, color versus gray monitors). Therefore, the notion of a Color Characterization Function Set has been developed. A functionlibX11-1.6.3/specs/libX11/glossary.xml000064401431060000012000001754431247741723500176360ustar00alancstaff00002660200006 Glossary Access control list Access control list X maintains a list of hosts from which client programs can be run. By default, only programs on the local host and hosts specified in an initial list read by the server can use the display. This access control list can be changed by clients on the local host. Some server implementations can also implement other authorization mechanisms in addition to or in place of this mechanism. The action of this mechanism can be conditional based on the authorization protocol name and data received by the server at connection setup. Active grab Active grab A grab is active when the pointer or keyboard is actually owned by the single grabbing client. Ancestors Ancestors If W is an inferior of A, then A is an ancestor of W. Atom Atom An atom is a unique ID corresponding to a string name. Atoms are used to identify properties, types, and selections. Background Background An InputOutput window can have a background, which is defined as a pixmap. When regions of the window have their contents lost or invalidated, the server automatically tiles those regions with the background. Backing store Backing store When a server maintains the contents of a window, the pixels saved off-screen are known as a backing store. Base font name Base font name A font name used to select a family of fonts whose members may be encoded in various charsets. The CharSetRegistry and CharSetEncoding fields of an XLFD name identify the charset of the font. A base font name may be a full XLFD name, with all fourteen '-' delimiters, or an abbreviated XLFD name containing only the first 12 fields of an XLFD name, up to but not including CharSetRegistry, with or without the thirteenth '-', or a non-XLFD name. Any XLFD fields may contain wild cards. When creating an XFontSet, Xlib accepts from the client a list of one or more base font names which select one or more font families. They are combined with charset names obtained from the encoding of the locale to load the fonts required to render text. Bit gravity Bitgravity When a window is resized, the contents of the window are not necessarily discarded. It is possible to request that the server relocate the previous contents to some region of the window (though no guarantees are made). This attraction of window contents for some location of a window is known as bit gravity. Bit plane Bitplane When a pixmap or window is thought of as a stack of bitmaps, each bitmap is called a bit plane or plane. Bitmap Bitmap A bitmap is a pixmap of depth one. Border Border An InputOutput window can have a border of equal thickness on all four sides of the window. The contents of the border are defined by a pixmap, and the server automatically maintains the contents of the border. Exposure events are never generated for border regions. Button grabbing Buttongrabbing Buttons on the pointer can be passively grabbed by a client. When the button is pressed, the pointer is then actively grabbed by the client. Byte order Byteorder For image (pixmap/bitmap) data, the server defines the byte order, and clients with different native byte ordering must swap bytes as necessary. For all other parts of the protocol, the client defines the byte order, and the server swaps bytes as necessary. Character Character A member of a set of elements used for the organization, control, or representation of text (ISO2022, as adapted by XPG3). Note that in ISO2022 terms, a character is not bound to a coded value until it is identified as part of a coded character set. Character glyph Character glyph The abstract graphical symbol for a character. Character glyphs may or may not map one-to-one to font glyphs, and may be context-dependent, varying with the adjacent characters. Multiple characters may map to a single character glyph. Character set Character set A collection of characters. Charset Charset An encoding with a uniform, state-independent mapping from characters to codepoints. A coded character set. For display in X, there can be a direct mapping from a charset to one font, if the width of all characters in the charset is either one or two bytes. A text string encoded in an encoding such as Shift-JIS cannot be passed directly to the X server, because the text imaging requests accept only single-width charsets (either 8 or 16 bits). Charsets which meet these restrictions can serve as ``font charsets''. Font charsets strictly speaking map font indices to font glyphs, not characters to character glyphs. Note that a single font charset is sometimes used as the encoding of a locale, for example, ISO8859-1. Children Children The children of a window are its first-level subwindows. Class Class Windows can be of different classes or types. See the entries for InputOnly and InputOutput windows for further information about valid window types. Client Client An application program connects to the window system server by some interprocess communication (IPC) path, such as a TCP connection or a shared memory buffer. This program is referred to as a client of the window system server. More precisely, the client is the IPC path itself. A program with multiple paths open to the server is viewed as multiple clients by the protocol. Resource lifetimes are controlled by connection lifetimes, not by program lifetimes. Clipping region Clipping region In a graphics context, a bitmap or list of rectangles can be specified to restrict output to a particular region of the window. The image defined by the bitmap or rectangles is called a clipping region. Coded character Coded character A character bound to a codepoint. Coded character set Coded character set A set of unambiguous rules that establishes a character set and the one-to-one relationship between each character of the set and its bit representation. (ISO2022, as adapted by XPG3) A definition of a one-to-one mapping of a set of characters to a set of codepoints. Codepoint Codepoint The coded representation of a single character in a coded character set. Colormap Colormap A colormap consists of a set of entries defining color values. The colormap associated with a window is used to display the contents of the window; each pixel value indexes the colormap to produce an RGB value that drives the guns of a monitor. Depending on hardware limitations, one or more colormaps can be installed at one time so that windows associated with those maps display with true colors. Connection Connection The IPC path between the server and client program is known as a connection. A client program typically (but not necessarily) has one connection to the server over which requests and events are sent. Containment Containment A window contains the pointer if the window is viewable and the hotspot of the cursor is within a visible region of the window or a visible region of one of its inferiors. The border of the window is included as part of the window for containment. The pointer is in a window if the window contains the pointer but no inferior contains the pointer. Coordinate system Coordinate system The coordinate system has X horizontal and Y vertical, with the origin [0, 0] at the upper left. Coordinates are integral and coincide with pixel centers. Each window and pixmap has its own coordinate system. For a window, the origin is inside the border at the inside upper-left corner. Cursor Cursor A cursor is the visible shape of the pointer on a screen. It consists of a hotspot, a source bitmap, a shape bitmap, and a pair of colors. The cursor defined for a window controls the visible appearance when the pointer is in that window. Depth Depth The depth of a window or pixmap is the number of bits per pixel it has. The depth of a graphics context is the depth of the drawables it can be used in conjunction with graphics output. Device Device Keyboards, mice, tablets, track-balls, button boxes, and so on are all collectively known as input devices. Pointers can have one or more buttons (the most common number is three). The core protocol only deals with two devices: the keyboard and the pointer. DirectColor DirectColor DirectColor is a class of colormap in which a pixel value is decomposed into three separate subfields for indexing. The first subfield indexes an array to produce red intensity values. The second subfield indexes a second array to produce blue intensity values. The third subfield indexes a third array to produce green intensity values. The RGB (red, green, and blue) values in the colormap entry can be changed dynamically. Display Display Displaystructure A server, together with its screens and input devices, is called a display. The Xlib Display structure contains all information about the particular display and its screens as well as the state that Xlib needs to communicate with the display over a particular connection. Drawable Drawable Both windows and pixmaps can be used as sources and destinations in graphics operations. These windows and pixmaps are collectively known as drawables. However, an InputOnly window cannot be used as a source or destination in a graphics operation. Encoding Encoding A set of unambiguous rules that establishes a character set and a relationship between the characters and their representations. The character set does not have to be fixed to a finite pre-defined set of characters. The representations do not have to be of uniform length. Examples are an ISO2022 graphic set, a state-independent or state-dependent combination of graphic sets, possibly including control sets, and the X Compound Text encoding. In X, encodings are identified by a string which appears as: the CharSetRegistry and CharSetEncoding components of an XLFD name; the name of a charset of the locale for which a font could not be found; or an atom which identifies the encoding of a text property or which names an encoding for a text selection target type. Encoding names should be composed of characters from the X Portable Character Set. Escapement Escapement The escapement of a string is the distance in pixels in the primary draw direction from the drawing origin to the origin of the next character (that is, the one following the given string) to be drawn. Event Event Clients are informed of information asynchronously by means of events. These events can be either asynchronously generated from devices or generated as side effects of client requests. Events are grouped into types. The server never sends an event to a client unless the client has specifically asked to be informed of that type of event. However, clients can force events to be sent to other clients. Events are typically reported relative to a window. Event mask Eventmask Events are requested relative to a window. The set of event types a client requests relative to a window is described by using an event mask. Event propagation Eventpropagation Device-related events propagate from the source window to ancestor windows until some client has expressed interest in handling that type of event or until the event is discarded explicitly. Event source Eventsource The deepest viewable window that the pointer is in is called the source of a device-related event. Event synchronization Eventsynchronization There are certain race conditions possible when demultiplexing device events to clients (in particular, deciding where pointer and keyboard events should be sent when in the middle of window management operations). The event synchronization mechanism allows synchronous processing of device events. Exposure event EventExposure Servers do not guarantee to preserve the contents of windows when windows are obscured or reconfigured. Exposure events are sent to clients to inform them when contents of regions of windows have been lost. Extension Extension Named extensions to the core protocol can be defined to extend the system. Extensions to output requests, resources, and event types are all possible and expected. Font Font A font is an array of glyphs (typically characters). The protocol does no translation or interpretation of character sets. The client simply indicates values used to index the glyph array. A font contains additional metric information to determine interglyph and interline spacing. Font glyph Font glyph The abstract graphical symbol for an index into a font. Frozen events Frozen events Clients can freeze event processing during keyboard and pointer grabs. GC GC GC is an abbreviation for graphics context. See Graphics context. Glyph Glyph An identified abstract graphical symbol independent of any actual image. (ISO/IEC/DIS 9541-1) An abstract visual representation of a graphic character, not bound to a codepoint. Glyph image Glyph image An image of a glyph, as obtained from a glyph representation displayed on a presentation surface. (ISO/IEC/DIS 9541-1) Grab Grab Keyboard keys, the keyboard, pointer buttons, the pointer, and the server can be grabbed for exclusive use by a client. In general, these facilities are not intended to be used by normal applications but are intended for various input and window managers to implement various styles of user interfaces. Graphics context Graphics context Various information for graphics output is stored in a graphics context (GC), such as foreground pixel, background pixel, line width, clipping region, and so on. A graphics context can only be used with drawables that have the same root and the same depth as the graphics context. Gravity Gravity The contents of windows and windows themselves have a gravity, which determines how the contents move when a window is resized. See Bit gravity and Window gravity. GrayScale GrayScale GrayScale can be viewed as a degenerate case of PseudoColor, in which the red, green, and blue values in any given colormap entry are equal and thus, produce shades of gray. The gray values can be changed dynamically. Host Portable Character Encoding Host Portable Character Encoding The encoding of the X Portable Character Set on the host. The encoding itself is not defined by this standard, but the encoding must be the same in all locales supported by Xlib on the host. If a string is said to be in the Host Portable Character Encoding, then it only contains characters from the X Portable Character Set, in the host encoding. Hotspot Hotspot A cursor has an associated hotspot, which defines the point in the cursor corresponding to the coordinates reported for the pointer. Identifier Identifier An identifier is a unique value associated with a resource that clients use to name that resource. The identifier can be used over any connection to name the resource. Inferiors Inferiors The inferiors of a window are all of the subwindows nested below it: the children, the children's children, and so on. Input focus Inputfocus The input focus is usually a window defining the scope for processing of keyboard input. If a generated keyboard event usually would be reported to this window or one of its inferiors, the event is reported as usual. Otherwise, the event is reported with respect to the focus window. The input focus also can be set such that all keyboard events are discarded and such that the focus window is dynamically taken to be the root window of whatever screen the pointer is on at each keyboard event. Input manager Inputmanager Control over keyboard input is typically provided by an input manager client, which usually is part of a window manager. InputOnly window WindowInputOnly An InputOnly window is a window that cannot be used for graphics requests. InputOnly windows are invisible and are used to control such things as cursors, input event generation, and grabbing. InputOnly windows cannot have InputOutput windows as inferiors. InputOutput window WindowInputOutput An InputOutput window is the normal kind of window that is used for both input and output. InputOutput windows can have both InputOutput and InputOnly windows as inferiors. Internationalization Internationalization The process of making software adaptable to the requirements of different native languages, local customs, and character string encodings. Making a computer program adaptable to different locales without program source modifications or recompilation. ISO2022 ISO2022 ISO standard for code extension techniques for 7-bit and 8-bit coded character sets. Key grabbing Keygrabbing Keys on the keyboard can be passively grabbed by a client. When the key is pressed, the keyboard is then actively grabbed by the client. Keyboard grabbing Keyboardgrabbing A client can actively grab control of the keyboard, and key events will be sent to that client rather than the client the events would normally have been sent to. Keysym Keysym An encoding of a symbol on a keycap on a keyboard. Latin-1 Latin-1 The coded character set defined by the ISO8859-1 standard. Latin Portable Character Encoding Latin Portable Character Encoding The encoding of the X Portable Character Set using the Latin-1 codepoints plus ASCII control characters. If a string is said to be in the Latin Portable Character Encoding, then it only contains characters from the X Portable Character Set, not all of Latin-1. Locale Locale The international environment of a computer program defining the ``localized'' behavior of that program at run-time. This information can be established from one or more sets of localization data. ANSI C defines locale-specific processing by C system library calls. See ANSI C and the X/Open Portability Guide specifications for more details. In this specification, on implementations that conform to the ANSI C library, the ``current locale'' is the current setting of the LC_CTYPE setlocale category. Associated with each locale is a text encoding. When text is processed in the context of a locale, the text must be in the encoding of the locale. The current locale affects Xlib in its: Encoding and processing of input method text Encoding of resource files and values Encoding and imaging of text strings Encoding and decoding for inter-client text communication Locale name Locale name The identifier used to select the desired locale for the host C library and X library functions. On ANSI C library compliant systems, the locale argument to the setlocale function. Localization Localization The process of establishing information within a computer system specific to the operation of particular native languages, local customs and coded character sets. (XPG3) Mapped Mapped window A window is said to be mapped if a map call has been performed on it. Unmapped windows and their inferiors are never viewable or visible. Modifier keys Modifier keys Shift, Control, Meta, Super, Hyper, Alt, Compose, Apple, CapsLock, ShiftLock, and similar keys are called modifier keys. Monochrome Monochrome Monochrome is a special case of StaticGray in which there are only two colormap entries. Multibyte Multibyte A character whose codepoint is stored in more than one byte; any encoding which can contain multibyte characters; text in a multibyte encoding. The ``char *'' null-terminated string datatype in ANSI C. Note that references in this document to multibyte strings imply only that the strings may contain multibyte characters. Obscure Obscure A window is obscured if some other window obscures it. A window can be partially obscured and so still have visible regions. Window A obscures window B if both are viewable InputOutput windows, if A is higher in the global stacking order, and if the rectangle defined by the outside edges of A intersects the rectangle defined by the outside edges of B. Note the distinction between obscures and occludes. Also note that window borders are included in the calculation. Occlude Occlude A window is occluded if some other window occludes it. Window A occludes window B if both are mapped, if A is higher in the global stacking order, and if the rectangle defined by the outside edges of A intersects the rectangle defined by the outside edges of B. Note the distinction between occludes and obscures. Also note that window borders are included in the calculation and that InputOnly windows never obscure other windows but can occlude other windows. Padding Padding Some padding bytes are inserted in the data stream to maintain alignment of the protocol requests on natural boundaries. This increases ease of portability to some machine architectures. Parent window Windowparent If C is a child of P, then P is the parent of C. Passive grab Passive grab Grabbing a key or button is a passive grab. The grab activates when the key or button is actually pressed. Pixel value Pixel value A pixel is an N-bit value, where N is the number of bit planes used in a particular window or pixmap (that is, is the depth of the window or pixmap). A pixel in a window indexes a colormap to derive an actual color to be displayed. Pixmap Pixmap A pixmap is a three-dimensional array of bits. A pixmap is normally thought of as a two-dimensional array of pixels, where each pixel can be a value from 0 to 2N-1, and where N is the depth (z axis) of the pixmap. A pixmap can also be thought of as a stack of N bitmaps. A pixmap can only be used on the screen that it was created in. Plane Plane When a pixmap or window is thought of as a stack of bitmaps, each bitmap is called a plane or bit plane. Plane mask Planemask Graphics operations can be restricted to only affect a subset of bit planes of a destination. A plane mask is a bit mask describing which planes are to be modified. The plane mask is stored in a graphics context. Pointer Pointer The pointer is the pointing device currently attached to the cursor and tracked on the screens. Pointer grabbing Pointergrabbing A client can actively grab control of the pointer. Then button and motion events will be sent to that client rather than the client the events would normally have been sent to. Pointing device Pointing device A pointing device is typically a mouse, tablet, or some other device with effective dimensional motion. The core protocol defines only one visible cursor, which tracks whatever pointing device is attached as the pointer. POSIX POSIX Portable Operating System Interface, ISO/IEC 9945-1 (IEEE Std 1003.1). POSIX Portable Filename Character Set POSIX Portable Filename Character Set The set of 65 characters which can be used in naming files on a POSIX-compliant host that are correctly processed in all locales. The set is: a..z A..Z 0..9 ._- Property Property Windows can have associated properties that consist of a name, a type, a data format, and some data. The protocol places no interpretation on properties. They are intended as a general-purpose naming mechanism for clients. For example, clients might use properties to share information such as resize hints, program names, and icon formats with a window manager. Property list Property list The property list of a window is the list of properties that have been defined for the window. PseudoColor PseudoColor PseudoColor is a class of colormap in which a pixel value indexes the colormap entry to produce an independent RGB value; that is, the colormap is viewed as an array of triples (RGB values). The RGB values can be changed dynamically. Rectangle Rectangle A rectangle specified by [x,y,w,h] has an infinitely thin outline path with corners at [x,y], [x+w,y], [x+w,y+h], and [x, y+h]. When a rectangle is filled, the lower-right edges are not drawn. For example, if w=h=0, nothing would be drawn. For w=h=1, a single pixel would be drawn. Redirecting control Redirecting control Window managers (or client programs) may enforce window layout policy in various ways. When a client attempts to change the size or position of a window, the operation may be redirected to a specified client rather than the operation actually being performed. Reply Reply Information requested by a client program using the X protocol is sent back to the client with a reply. Both events and replies are multiplexed on the same connection. Most requests do not generate replies, but some requests generate multiple replies. Request Request A command to the server is called a request. It is a single block of data sent over a connection. Resource Resource Windows, pixmaps, cursors, fonts, graphics contexts, and colormaps are known as resources. They all have unique identifiers associated with them for naming purposes. The lifetime of a resource usually is bounded by the lifetime of the connection over which the resource was created. RGB values RGB values RGB values are the red, green, and blue intensity values that are used to define a color. These values are always represented as 16-bit, unsigned numbers, with 0 the minimum intensity and 65535 the maximum intensity. The X server scales these values to match the display hardware. Root Root The root of a pixmap or graphics context is the same as the root of whatever drawable was used when the pixmap or GC was created. The root of a window is the root window under which the window was created. Root window Windowroot Each screen has a root window covering it. The root window cannot be reconfigured or unmapped, but otherwise it acts as a full-fledged window. A root window has no parent. Save set Save set The save set of a client is a list of other clients' windows that, if they are inferiors of one of the client's windows at connection close, should not be destroyed and that should be remapped if currently unmapped. Save sets are typically used by window managers to avoid lost windows if the manager should terminate abnormally. Scanline Scanline A scanline is a list of pixel or bit values viewed as a horizontal row (all values having the same y coordinate) of an image, with the values ordered by increasing the x coordinate. Scanline order Scanlineorder An image represented in scanline order contains scanlines ordered by increasing the y coordinate. Screen Screen Screenstructure Displaystructure A server can provide several independent screens, which typically have physically independent monitors. This would be the expected configuration when there is only a single keyboard and pointer shared among the screens. A Screen structure contains the information about that screen and is linked to the Display structure. Selection Selection A selection can be thought of as an indirect property with dynamic type. That is, rather than having the property stored in the X server, it is maintained by some client (the owner). A selection is global and is thought of as belonging to the user and being maintained by clients, rather than being private to a particular window subhierarchy or a particular set of clients. When a client asks for the contents of a selection, it specifies a selection target type, which can be used to control the transmitted representation of the contents. For example, if the selection is ``the last thing the user clicked on,'' and that is currently an image, then the target type might specify whether the contents of the image should be sent in XY format or Z format. The target type can also be used to control the class of contents transmitted; for example, asking for the ``looks'' (fonts, line spacing, indentation, and so forth) of a paragraph selection, rather than the text of the paragraph. The target type can also be used for other purposes. The protocol does not constrain the semantics. Server Server The server, which is also referred to as the X server, provides the basic windowing mechanism. It handles IPC connections from clients, multiplexes graphics requests onto the screens, and demultiplexes input back to the appropriate clients. Server grabbing Servergrabbing The server can be grabbed by a single client for exclusive use. This prevents processing of any requests from other client connections until the grab is completed. This is typically only a transient state for such things as rubber-banding, pop-up menus, or executing requests indivisibly. Shift sequence Shift sequence ISO2022 defines control characters and escape sequences which temporarily (single shift) or permanently (locking shift) cause a different character set to be in effect (``invoking'' a character set). Sibling Sibling Children of the same parent window are known as sibling windows. Stacking order Stacking order Sibling windows, similar to sheets of paper on a desk, can stack on top of each other. Windows above both obscure and occlude lower windows. The relationship between sibling windows is known as the stacking order. State-dependent encoding State-dependent encoding An encoding in which an invocation of a charset can apply to multiple characters in sequence. A state-dependent encoding begins in an ``initial state'' and enters other ``shift states'' when specific ``shift sequences'' are encountered in the byte sequence. In ISO2022 terms, this means use of locking shifts, not single shifts. State-independent encoding State-independent encoding Any encoding in which the invocations of the charsets are fixed, or span only a single character. In ISO2022 terms, this means use of at most single shifts, not locking shifts. StaticColor StaticColor StaticColor can be viewed as a degenerate case of PseudoColor in which the RGB values are predefined and read-only. StaticGray StaticGray StaticGray can be viewed as a degenerate case of GrayScale in which the gray values are predefined and read-only. The values are typically linear or near-linear increasing ramps. Status Status Many Xlib functions return a success status. If the function does not succeed, however, its arguments are not disturbed. Stipple Stipple A stipple pattern is a bitmap that is used to tile a region to serve as an additional clip mask for a fill operation with the foreground color. STRING encoding Latin-1, plus tab and newline. String Equivalence String Equivalence Two ISO Latin-1 STRING8 values are considered equal if they are the same length and if corresponding bytes are either equal or are equivalent as follows: decimal values 65 to 90 inclusive (characters ``A'' to ``Z'') are pairwise equivalent to decimal values 97 to 122 inclusive (characters ``a'' to ``z''), decimal values 192 to 214 inclusive (characters ``A grave'' to ``O diaeresis'') are pairwise equivalent to decimal values 224 to 246 inclusive (characters ``a grave'' to ``o diaeresis''), and decimal values 216 to 222 inclusive (characters ``O oblique'' to ``THORN'') are pairwise equivalent to decimal values 246 to 254 inclusive (characters ``o oblique'' to ``thorn''). Tile Tile A pixmap can be replicated in two dimensions to tile a region. The pixmap itself is also known as a tile. Timestamp Timestamp A timestamp is a time value expressed in milliseconds. It is typically the time since the last server reset. Timestamp values wrap around (after about 49.7 days). The server, given its current time is represented by timestamp T, always interprets timestamps from clients by treating half of the timestamp space as being earlier in time than T and half of the timestamp space as being later in time than T. One timestamp value, represented by the constant CurrentTime, is never generated by the server. This value is reserved for use in requests to represent the current server time. TrueColor TrueColor TrueColor can be viewed as a degenerate case of DirectColor in which the subfields in the pixel value directly encode the corresponding RGB values. That is, the colormap has predefined read-only RGB values. The values are typically linear or near-linear increasing ramps. Type Type A type is an arbitrary atom used to identify the interpretation of property data. Types are completely uninterpreted by the server. They are solely for the benefit of clients. X predefines type atoms for many frequently used types, and clients also can define new types. Viewable Viewable A window is viewable if it and all of its ancestors are mapped. This does not imply that any portion of the window is actually visible. Graphics requests can be performed on a window when it is not viewable, but output will not be retained unless the server is maintaining backing store. Visible Visible A region of a window is visible if someone looking at the screen can actually see it; that is, the window is viewable and the region is not occluded by any other window. Whitespace Whitespace Any spacing character. On implementations that conform to the ANSI C library, whitespace is any character for which isspace returns true. Window gravity Windowgravity When windows are resized, subwindows may be repositioned automatically relative to some position in the window. This attraction of a subwindow to some part of its parent is known as window gravity. Window manager Windowmanager Manipulation of windows on the screen and much of the user interface (policy) is typically provided by a window manager client. X Portable Character Set X Portable Character Set A basic set of 97 characters which are assumed to exist in all locales supported by Xlib. This set contains the following characters: a..z A..Z 0..9 !"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ <space>, <tab>, and <newline> This is the left/lower half (also called the G0 set) of the graphic character set of ISO8859-1 plus <space>, <tab>, and <newline>. It is also the set of graphic characters in 7-bit ASCII plus the same three control characters. The actual encoding of these characters on the host is system dependent; see the Host Portable Character Encoding. XLFD XLFD The X Logical Font Description Conventions that define a standard syntax for structured font names. XY format XY format The data for a pixmap is said to be in XY format if it is organized as a set of bitmaps representing individual bit planes with the planes appearing from most-significant to least-significant bit order. Z format Z format The data for a pixmap is said to be in Z format if it is organized as a set of pixel values in scanline order. References Draft Proposed Multibyte Extension of ANSI C, Draft 1.1 November 30, 1989 SC22/C WG/SWG IPSJ/ITSCJ Japan ISO2022: Information processing - ISO 7-bit and 8-bit coded character sets - Code extension techniques. ISO8859-1: Information processing - 8-bit single-byte coded graphic character sets - Part 1: Latin alphabet No. 1. <acronym>POSIX</acronym>: Information Technology - Portable Operating System Interface (<acronym>POSIX</acronym>) - Part 1: System Application Program Interface (API) [C Language], ISO/IEC 9945-1. Text of ISO/IEC/DIS 9541-1, Information Processing - Font Information Interchange - Part 1: Architecture. X/Open Portability Guide, Issue 3, December 1988 (XPG3), X/Open Company, Ltd, Prentice-Hall, Inc. 1989. ISBN 0-13-685835-8. (See especially Volume 3: XSI Supplementary Definitions.) rimary>StaticColor StaticColor can be viewed as a degenerate case of PseudoColor in whlibX11-1.6.3/specs/libX11/CH11.xml000064401431060000012000002206511247741723500164170ustar00alancstaff00002660200006 Event Handling Functions This chapter discusses the Xlib functions you can use to: Select events Handle the output buffer and the event queue Select events from the event queue Send and get events Handle protocol errors Some toolkits use their own event-handling functions and do not allow you to interchange these event-handling functions with those in Xlib. For further information, see the documentation supplied with the toolkit. Most applications simply are event loops: they wait for an event, decide what to do with it, execute some amount of code that results in changes to the display, and then wait for the next event. Selecting Events There are two ways to select the events you want reported to your client application. One way is to set the event_mask member of the XSetWindowAttributes structure when you call and . Another way is to use . XSelectInput XSelectInput Display *display Window w long event_mask display Specifies the connection to the X server. w Specifies the window whose events you are interested in. event_mask Specifies the event mask. The function requests that the X server report the events associated with the specified event mask. Initially, X will not report any of these events. Events are reported relative to a window. If a window is not interested in a device event, it usually propagates to the closest ancestor that is interested, unless the do_not_propagate mask prohibits it. Eventpropagation Setting the event-mask attribute of a window overrides any previous call for the same window but not for other clients. Multiple clients can select for the same events on the same window with the following restrictions: Multiple clients can select events on the same window because their event masks are disjoint. When the X server generates an event, it reports it to all interested clients. Only one client at a time can select CirculateRequest, ConfigureRequest, or MapRequest events, which are associated with the event mask SubstructureRedirectMask. Only one client at a time can select a ResizeRequest event, which is associated with the event mask ResizeRedirectMask. Only one client at a time can select a ButtonPress event, which is associated with the event mask ButtonPressMask. The server reports the event to all interested clients. can generate a BadWindow error. Handling the Output Buffer The output buffer is an area used by Xlib to store requests. The functions described in this section flush the output buffer if the function would block or not return an event. That is, all requests residing in the output buffer that have not yet been sent are transmitted to the X server. These functions differ in the additional tasks they might perform. To flush the output buffer, use . XFlush XFlush Display *display display Specifies the connection to the X server. The function flushes the output buffer. Most client applications need not use this function because the output buffer is automatically flushed as needed by calls to , , and . XPending XNextEvent XWindowEvent Events generated by the server may be enqueued into the library's event queue. To flush the output buffer and then wait until all requests have been processed, use . XSync XSync Display *display Bool discard display Specifies the connection to the X server. discard Specifies a Boolean value that indicates whether discards all events on the event queue. The function flushes the output buffer and then waits until all requests have been received and processed by the X server. Any errors generated must be handled by the error handler. For each protocol error received by Xlib, calls the client application's error handling routine (see section 11.8.2). Any events generated by the server are enqueued into the library's event queue. Finally, if you passed False, does not discard the events in the queue. If you passed True, discards all events in the queue, including those events that were on the queue before was called. Client applications seldom need to call . Event Queue Management Xlib maintains an event queue. However, the operating system also may be buffering data in its network connection that is not yet read into the event queue. To check the number of events in the event queue, use . XEventsQueued int XEventsQueued Display *display int mode display Specifies the connection to the X server. mode Specifies the mode. You can pass QueuedAlready, QueuedAfterFlush, or QueuedAfterReading. If mode is QueuedAlready, returns the number of events already in the event queue (and never performs a system call). If mode is QueuedAfterFlush, returns the number of events already in the queue if the number is nonzero. If there are no events in the queue, flushes the output buffer, attempts to read more events out of the application's connection, and returns the number read. If mode is QueuedAfterReading, returns the number of events already in the queue if the number is nonzero. If there are no events in the queue, attempts to read more events out of the application's connection without flushing the output buffer and returns the number read. always returns immediately without I/O if there are events already in the queue. with mode QueuedAfterFlush is identical in behavior to . with mode QueuedAlready is identical to the function. To return the number of events that are pending, use . XPending int XPending Display *display display Specifies the connection to the X server. The function returns the number of events that have been received from the X server but have not been removed from the event queue. is identical to with the mode QueuedAfterFlush specified. Manipulating the Event Queue Xlib provides functions that let you manipulate the event queue. This section discusses how to: Obtain events, in order, and remove them from the queue Peek at events in the queue without removing them Obtain events that match the event mask or the arbitrary predicate procedures that you provide Returning the Next Event To get the next event and remove it from the queue, use . XNextEvent XNextEvent Display *display XEvent *event_return display Specifies the connection to the X server. event_return Returns the next event in the queue. The function copies the first event from the event queue into the specified XEvent structure and then removes it from the queue. If the event queue is empty, flushes the output buffer and blocks until an event is received. To peek at the event queue, use . XPeekEvent XPeekEvent Display *display XEvent *event_return display Specifies the connection to the X server. event_return Returns a copy of the matched event's associated structure. The function returns the first event from the event queue, but it does not remove the event from the queue. If the queue is empty, flushes the output buffer and blocks until an event is received. It then copies the event into the client-supplied XEvent structure without removing it from the event queue. Selecting Events Using a Predicate Procedure Each of the functions discussed in this section requires you to pass a predicate procedure that determines if an event matches what you want. Your predicate procedure must decide if the event is useful without calling any Xlib functions. If the predicate directly or indirectly causes the state of the event queue to change, the result is not defined. If Xlib has been initialized for threads, the predicate is called with the display locked and the result of a call by the predicate to any Xlib function that locks the display is not defined unless the caller has first called XLockDisplay. The predicate procedure and its associated arguments are: Bool Display *display XEvent *event XPointer arg display Specifies the connection to the X server. event Specifies the XEvent structure. arg Specifies the argument passed in from the , , or function. The predicate procedure is called once for each event in the queue until it finds a match. After finding a match, the predicate procedure must return True. If it did not find a match, it must return False. To check the event queue for a matching event and, if found, remove the event from the queue, use . XIfEvent XIfEvent Display *display XEvent *event_return Bool (*predicate)() XPointer arg display Specifies the connection to the X server. event_return Returns the matched event's associated structure. predicate Specifies the procedure that is to be called to determine if the next event in the queue matches what you want. arg Specifies the user-supplied argument that will be passed to the predicate procedure. The function completes only when the specified predicate procedure returns True for an event, which indicates an event in the queue matches. flushes the output buffer if it blocks waiting for additional events. removes the matching event from the queue and copies the structure into the client-supplied XEvent structure. To check the event queue for a matching event without blocking, use . XCheckIfEvent Bool XCheckIfEvent Display *display XEvent *event_return Bool (*predicate)() XPointer arg display Specifies the connection to the X server. event_return Returns a copy of the matched event's associated structure. predicate Specifies the procedure that is to be called to determine if the next event in the queue matches what you want. arg Specifies the user-supplied argument that will be passed to the predicate procedure. When the predicate procedure finds a match, copies the matched event into the client-supplied XEvent structure and returns True. (This event is removed from the queue.) If the predicate procedure finds no match, returns False, and the output buffer will have been flushed. All earlier events stored in the queue are not discarded. To check the event queue for a matching event without removing the event from the queue, use . XPeekIfEvent XPeekIfEvent Display *display XEvent *event_return Bool (*predicate)() XPointer arg display Specifies the connection to the X server. event_return Returns a copy of the matched event's associated structure. predicate Specifies the procedure that is to be called to determine if the next event in the queue matches what you want. arg Specifies the user-supplied argument that will be passed to the predicate procedure. The function returns only when the specified predicate procedure returns True for an event. After the predicate procedure finds a match, copies the matched event into the client-supplied XEvent structure without removing the event from the queue. flushes the output buffer if it blocks waiting for additional events. Selecting Events Using a Window or Event Mask The functions discussed in this section let you select events by window or event types, allowing you to process events out of order. To remove the next event that matches both a window and an event mask, use . XWindowEvent XWindowEvent Display *display Window w long event_mask XEvent *event_return display Specifies the connection to the X server. w Specifies the window whose events you are interested in. event_mask Specifies the event mask. event_return Returns the matched event's associated structure. The function searches the event queue for an event that matches both the specified window and event mask. When it finds a match, removes that event from the queue and copies it into the specified XEvent structure. The other events stored in the queue are not discarded. If a matching event is not in the queue, flushes the output buffer and blocks until one is received. To remove the next event that matches both a window and an event mask (if any), use . XCheckWindowEvent This function is similar to except that it never blocks and it returns a Bool indicating if the event was returned. XCheckWindowEvent Bool XCheckWindowEvent Display *display Window w long event_mask XEvent *event_return display Specifies the connection to the X server. w Specifies the window whose events you are interested in. event_mask Specifies the event mask. event_return Returns the matched event's associated structure. The function searches the event queue and then the events available on the server connection for the first event that matches the specified window and event mask. If it finds a match, removes that event, copies it into the specified XEvent structure, and returns True. The other events stored in the queue are not discarded. If the event you requested is not available, returns False, and the output buffer will have been flushed. To remove the next event that matches an event mask, use . XMaskEvent XMaskEvent Display *display long event_mask XEvent *event_return display Specifies the connection to the X server. event_mask Specifies the event mask. event_return Returns the matched event's associated structure. The function searches the event queue for the events associated with the specified mask. When it finds a match, removes that event and copies it into the specified XEvent structure. The other events stored in the queue are not discarded. If the event you requested is not in the queue, flushes the output buffer and blocks until one is received. To return and remove the next event that matches an event mask (if any), use . This function is similar to except that it never blocks and it returns a Bool indicating if the event was returned. XCheckMaskEvent Bool XCheckMaskEvent Display *display long event_mask XEvent *event_return display Specifies the connection to the X server. event_mask Specifies the event mask. event_return Returns the matched event's associated structure. The function searches the event queue and then any events available on the server connection for the first event that matches the specified mask. If it finds a match, removes that event, copies it into the specified XEvent structure, and returns True. The other events stored in the queue are not discarded. If the event you requested is not available, returns False, and the output buffer will have been flushed. To return and remove the next event in the queue that matches an event type, use . XCheckTypedEvent Bool XCheckTypedEvent Display *display int event_type XEvent *event_return display Specifies the connection to the X server. event_type Specifies the event type to be compared. event_return Returns the matched event's associated structure. The function searches the event queue and then any events available on the server connection for the first event that matches the specified type. If it finds a match, removes that event, copies it into the specified XEvent structure, and returns True. The other events in the queue are not discarded. If the event is not available, returns False, and the output buffer will have been flushed. To return and remove the next event in the queue that matches an event type and a window, use . XCheckTypedWindowEvent Bool XCheckTypedWindowEvent Display *display Window w int event_type XEvent *event_return display Specifies the connection to the X server. w Specifies the window. event_type Specifies the event type to be compared. event_return Returns the matched event's associated structure. The function searches the event queue and then any events available on the server connection for the first event that matches the specified type and window. If it finds a match, removes the event from the queue, copies it into the specified XEvent structure, and returns True. The other events in the queue are not discarded. If the event is not available, returns False, and the output buffer will have been flushed. Putting an Event Back into the Queue To push an event back into the event queue, use . XPutBackEvent XPutBackEvent Display *display XEvent *event display Specifies the connection to the X server. event Specifies the event. The function pushes an event back onto the head of the display's event queue by copying the event into the queue. This can be useful if you read an event and then decide that you would rather deal with it later. There is no limit to the number of times in succession that you can call . Sending Events to Other Applications To send an event to a specified window, use . XSendEvent This function is often used in selection processing. For example, the owner of a selection should use to send a SelectionNotify event to a requestor when a selection has been converted and stored as a property. XSendEvent Status XSendEvent Display *display Window w Bool propagate long event_mask XEvent *event_send display Specifies the connection to the X server. w Specifies the window the event is to be sent to, or PointerWindow, or InputFocus. propagate Specifies a Boolean value. event_mask Specifies the event mask. event_send Specifies the event that is to be sent. The function identifies the destination window, determines which clients should receive the specified events, and ignores any active grabs. This function requires you to pass an event mask. For a discussion of the valid event mask names, see section 10.3. This function uses the w argument to identify the destination window as follows: If w is PointerWindow, the destination window is the window that contains the pointer. If w is InputFocus and if the focus window contains the pointer, the destination window is the window that contains the pointer; otherwise, the destination window is the focus window. To determine which clients should receive the specified events, uses the propagate argument as follows: If event_mask is the empty set, the event is sent to the client that created the destination window. If that client no longer exists, no event is sent. If propagate is False, the event is sent to every client selecting on destination any of the event types in the event_mask argument. If propagate is True and no clients have selected on destination any of the event types in event-mask, the destination is replaced with the closest ancestor of destination for which some client has selected a type in event-mask and for which no intervening window has that type in its do-not-propagate-mask. If no such window exists or if the window is an ancestor of the focus window and InputFocus was originally specified as the destination, the event is not sent to any clients. Otherwise, the event is reported to every client selecting on the final destination any of the types specified in event_mask. The event in the XEvent structure must be one of the core events or one of the events defined by an extension (or a BadValue error results) so that the X server can correctly byte-swap the contents as necessary. The contents of the event are otherwise unaltered and unchecked by the X server except to force send_event to True in the forwarded event and to set the serial number in the event correctly; therefore these fields and the display field are ignored by . returns zero if the conversion to wire protocol format failed and returns nonzero otherwise. can generate BadValue and BadWindow errors. Getting Pointer Motion History Some X server implementations will maintain a more complete history of pointer motion than is reported by event notification. The pointer position at each pointer hardware interrupt may be stored in a buffer for later retrieval. This buffer is called the motion history buffer. For example, a few applications, such as paint programs, want to have a precise history of where the pointer traveled. However, this historical information is highly excessive for most applications. To determine the approximate maximum number of elements in the motion buffer, use XDisplayMotionBufferSize. XDisplayMotionBufferSize unsigned long Display *display display Specifies the connection to the X server. The server may retain the recent history of the pointer motion and do so to a finer granularity than is reported by MotionNotify events. The function makes this history available. To get the motion history for a specified window and time, use . XGetMotionEvents XTimeCoord *XGetMotionEvents Display *display Window w Timestart, stop int *nevents_return display Specifies the connection to the X server. w Specifies the window. start stop Specify the time interval in which the events are returned from the motion history buffer. You can pass a timestamp or CurrentTime. nevents_return Returns the number of events from the motion history buffer. The function returns all events in the motion history buffer that fall between the specified start and stop times, inclusive, and that have coordinates that lie within the specified window (including its borders) at its present placement. If the server does not support motion history, if the start time is later than the stop time, or if the start time is in the future, no events are returned; returns NULL. If the stop time is in the future, it is equivalent to specifying CurrentTime. The return type for this function is a structure defined as follows: XTimeCoord typedef struct { Time time; short x, y; } XTimeCoord; The time member is set to the time, in milliseconds. The x and y members are set to the coordinates of the pointer and are reported relative to the origin of the specified window. To free the data returned from this call, use . can generate a BadWindow error. Handling Protocol Errors Xlib provides functions that you can use to enable or disable synchronization and to use the default error handlers. Enabling or Disabling Synchronization When debugging X applications, it often is very convenient to require Xlib to behave synchronously so that errors are reported as they occur. The following function lets you disable or enable synchronous behavior. Note that graphics may occur 30 or more times more slowly when synchronization is enabled. _Xdebug On POSIX-conformant systems, there is also a global variable _Xdebug that, if set to nonzero before starting a program under a debugger, will force synchronous library behavior. After completing their work, all Xlib functions that generate protocol requests call what is known as an after function. sets which function is to be called. XSetAfterFunction int Display *display int (*procedure)() display Specifies the connection to the X server. procedure Specifies the procedure to be called. The specified procedure is called with only a display pointer. returns the previous after function. To enable or disable synchronization, use XSynchronize. Debuggingsynchronous mode XSynchronize int Display *display Bool onoff display Specifies the connection to the X server. onoff Specifies a Boolean value that indicates whether to enable or disable synchronization. The XSynchronize function returns the previous after function. If onoff is True, XSynchronize turns on synchronous behavior. If onoff is False, XSynchronize turns off synchronous behavior. Using the Default Error Handlers Debuggingerror handlers Errorhandlers There are two default error handlers in Xlib: one to handle typically fatal conditions (for example, the connection to a display server dying because a machine crashed) and one to handle protocol errors from the X server. These error handlers can be changed to user-supplied routines if you prefer your own error handling and can be changed as often as you like. If either function is passed a NULL pointer, it will reinvoke the default handler. The action of the default handlers is to print an explanatory message and exit. To set the error handler, use . XSetErrorHandler int *XSetErrorHandler int *handler handler Specifies the program's supplied error handler. Xlib generally calls the program's supplied error handler whenever an error is received. It is not called on BadName errors from OpenFont, LookupColor, or AllocNamedColor protocol requests or on BadFont errors from a QueryFont protocol request. These errors generally are reflected back to the program through the procedural interface. Because this condition is not assumed to be fatal, it is acceptable for your error handler to return; the returned value is ignored. However, the error handler should not call any functions (directly or indirectly) on the display that will generate protocol requests or that will look for input events. The previous error handler is returned. The XErrorEvent structure contains: Debuggingerror event XErrorEvent typedef struct { int type; Display *display; /* Display the event was read from */ unsigned long serial; /* serial number of failed request */ unsigned char error_code; /* error code of failed request */ unsigned char request_code; /* Major op-code of failed request */ unsigned char minor_code; /* Minor op-code of failed request */ XID resourceid; /* resource id */ } XErrorEvent; Serial Number The serial member is the number of requests, starting from one, sent over the network connection since it was opened. It is the number that was the value of NextRequest immediately before the failing call was made. The request_code member is a protocol request of the procedure that failed, as defined in <X11/Xproto.h>. The following error codes can be returned by the functions described in this chapter: Debuggingerror numbers Errorcodes BadAccess BadAlloc BadAtom BadColor BadCursor BadDrawable BadFont BadGC BadIDChoice Error Code Description BadAccess A client attempts to grab a key/button combination already grabbed by another client. A client attempts to free a colormap entry that it had not already allocated or to free an entry in a colormap that was created with all entries writable. A client attempts to store into a read-only or unallocated colormap entry. A client attempts to modify the access control list from other than the local (or otherwise authorized) host. A client attempts to select an event type that another client has already selected. BadAlloc The server fails to allocate the requested resource. Note that the explicit listing of BadAlloc errors in requests only covers allocation errors at a very coarse level and is not intended to (nor can it in practice hope to) cover all cases of a server running out of allocation space in the middle of service. The semantics when a server runs out of allocation space are left unspecified, but a server may generate a BadAlloc error on any request for this reason, and clients should be prepared to receive such errors and handle or discard them. BadAtom A value for an atom argument does not name a defined atom. BadColor A value for a colormap argument does not name a defined colormap. BadCursor A value for a cursor argument does not name a defined cursor. BadDrawable A value for a drawable argument does not name a defined window or pixmap. BadFont A value for a font argument does not name a defined font (or, in some cases, GContext). BadGC A value for a GContext argument does not name a defined GContext. BadIDChoice The value chosen for a resource identifier either is not included in the range assigned to the client or is already in use. Under normal circumstances, this cannot occur and should be considered a server or Xlib error. BadImplementation The server does not implement some aspect of the request. A server that generates this error for a core request is deficient. As such, this error is not listed for any of the requests, but clients should be prepared to receive such errors and handle or discard them. BadLength The length of a request is shorter or longer than that required to contain the arguments. This is an internal Xlib or server error. The length of a request exceeds the maximum length accepted by the server. BadMatch In a graphics request, the root and depth of the graphics context do not match those of the drawable. An InputOnly window is used as a drawable. Some argument or pair of arguments has the correct type and range, but it fails to match in some other way required by the request. An InputOnly window lacks this attribute. BadName A font or color of the specified name does not exist. BadPixmap A value for a pixmap argument does not name a defined pixmap. BadRequest The major or minor opcode does not specify a valid request. This usually is an Xlib or server error. BadValue Some numeric value falls outside of the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives typically can generate this error (due to the encoding). BadWindow A value for a window argument does not name a defined window. BadImplementation BadLength BadMatch BadName BadPixmap BadRequest BadValue BadWindow The BadAtom, BadColor, BadCursor, BadDrawable, BadFont, BadGC, BadPixmap, and BadWindow errors are also used when the argument type is extended by a set of fixed alternatives. To obtain textual descriptions of the specified error code, use . XGetErrorText Debuggingerror message strings XGetErrorText Display *display int code char *buffer_return int length display Specifies the connection to the X server. code Specifies the error code for which you want to obtain a description. buffer_return Returns the error description. length Specifies the size of the buffer. The function copies a null-terminated string describing the specified error code into the specified buffer. The returned text is in the encoding of the current locale. It is recommended that you use this function to obtain an error description because extensions to Xlib may define their own error codes and error strings. To obtain error messages from the error database, use . XGetErrorDatabaseText XGetErrorDatabaseText Display *display char*name, *message char *default_string char *buffer_return int length display Specifies the connection to the X server. name Specifies the name of the application. message Specifies the type of the error message. default_string Specifies the default error message if none is found in the database. buffer_return Returns the error description. length Specifies the size of the buffer. The function returns a null-terminated message (or the default message) from the error message database. Xlib uses this function internally to look up its error messages. The text in the default_string argument is assumed to be in the encoding of the current locale, and the text stored in the buffer_return argument is in the encoding of the current locale. The name argument should generally be the name of your application. The message argument should indicate which type of error message you want. If the name and message are not in the Host Portable Character Encoding, the result is implementation-dependent. Xlib uses three predefined ``application names'' to report errors. In these names, uppercase and lowercase matter. XProtoError The protocol error number is used as a string for the message argument. XlibMessage These are the message strings that are used internally by the library. XRequest For a core protocol request, the major request protocol number is used for the message argument. For an extension request, the extension name (as given by InitExtension) followed by a period (.) and the minor request protocol number is used for the message argument. If no string is found in the error database, the default_string is returned to the buffer argument. To report an error to the user when the requested display does not exist, use . XDisplayName char *XDisplayName char *string string Specifies the character string. The function returns the name of the display that would attempt to use. If a NULL string is specified, looks in the environment for the display and returns the display name that would attempt to use. This makes it easier to report to the user precisely which display the program attempted to open when the initial connection attempt failed. To handle fatal I/O errors, use XSetIOErrorHandler. XSetIOErrorHandler int int(*handler)(Display *) handler Specifies the program's supplied error handler. The XSetIOErrorHandler sets the fatal I/O error handler. Xlib calls the program's supplied error handler if any sort of system call error occurs (for example, the connection to the server was lost). This is assumed to be a fatal condition, and the called routine should not return. If the I/O error handler does return, the client process exits. Note that the previous error handler is returned. e id='BadRequest'>BadRequest The major or minor opcodelibX11-1.6.3/specs/libX11/CH16.xml000064401431060000012000003304631247741723500164270ustar00alancstaff00002660200006 Application Utility Functions Once you have initialized the X system, you can use the Xlib utility functions to: Use keyboard utility functions Use Latin-1 keyboard event functions Allocate permanent storage Parse the window geometry Manipulate regions Use cut buffers Determine the appropriate visual type Manipulate images Manipulate bitmaps Use the context manager As a group, the functions discussed in this chapter provide the functionality that is frequently needed and that spans toolkits. Many of these functions do not generate actual protocol requests to the server. Using Keyboard Utility Functions This section discusses mapping between KeyCodes and KeySyms, classifying KeySyms, and mapping between KeySyms and string names. The first three functions in this section operate on a cached copy of the server keyboard mapping. The first four KeySyms for each KeyCode are modified according to the rules given in section 12.7. To obtain the untransformed KeySyms defined for a key, use the functions described in section 12.7. To obtain a KeySym for the KeyCode of an event, use . XLookupKeysym KeySym XLookupKeysym XKeyEvent *key_event int index key_event Specifies the KeyPress or KeyRelease event. index Specifies the index into the KeySyms list for the event's KeyCode. The function uses a given keyboard event and the index you specified to return the KeySym from the list that corresponds to the KeyCode member in the XKeyPressedEvent or XKeyReleasedEvent structure. If no KeySym is defined for the KeyCode of the event, returns NoSymbol. To obtain a KeySym for a specific KeyCode, use . XKeycodeToKeysym KeySym XKeycodeToKeysym Display *display KeyCode keycode int index display Specifies the connection to the X server. keycode Specifies the KeyCode. index Specifies the element of KeyCode vector. The function uses internal Xlib tables and returns the KeySym defined for the specified KeyCode and the element of the KeyCode vector. If no symbol is defined, returns NoSymbol. To obtain a KeyCode for a key having a specific KeySym, use . XKeysymToKeycode KeyCode XKeysymToKeycode Display *display KeySym keysym display Specifies the connection to the X server. keysym Specifies the KeySym that is to be searched for. If the specified KeySym is not defined for any KeyCode, returns zero. The mapping between KeyCodes and KeySyms is cached internal to Xlib. When this information is changed at the server, an Xlib function must be called to refresh the cache. To refresh the stored modifier and keymap information, use . XRefreshKeyboardMapping XRefreshKeyboardMapping XMappingEvent *event_map event_map Specifies the mapping event that is to be used. The function refreshes the stored modifier and keymap information. You usually call this function when a MappingNotify event with a request member of MappingKeyboard or MappingModifier occurs. The result is to update Xlib's knowledge of the keyboard. To obtain the uppercase and lowercase forms of a KeySym, use . XConvertCase void XConvertCase KeySym keysym KeySym *lower_return KeySym *upper_return keysym Specifies the KeySym that is to be converted. lower_return Returns the lowercase form of keysym, or keysym. upper_return Returns the uppercase form of keysym, or keysym. The function returns the uppercase and lowercase forms of the specified Keysym, if the KeySym is subject to case conversion; otherwise, the specified KeySym is returned to both lower_return and upper_return. Support for conversion of other than Latin and Cyrillic KeySyms is implementation-dependent. KeySyms have string names as well as numeric codes. To convert the name of the KeySym to the KeySym code, use . XStringToKeysym KeySym XStringToKeysym char *string string Specifies the name of the KeySym that is to be converted. Standard KeySym names are obtained from <X11/keysymdef.h> X11/keysymdef.h Files<X11/keysymdef.h> Headers<X11/keysymdef.h> by removing the XK_ prefix from each name. KeySyms that are not part of the Xlib standard also may be obtained with this function. The set of KeySyms that are available in this manner and the mechanisms by which Xlib obtains them is implementation-dependent. If the KeySym name is not in the Host Portable Character Encoding, the result is implementation-dependent. If the specified string does not match a valid KeySym, returns NoSymbol. To convert a KeySym code to the name of the KeySym, use . XKeysymToString char *XKeysymToString KeySym keysym keysym Specifies the KeySym that is to be converted. The returned string is in a static area and must not be modified. The returned string is in the Host Portable Character Encoding. If the specified KeySym is not defined, returns a NULL. KeySym Classification Macros You may want to test if a KeySym is, for example, on the keypad or on one of the function keys. You can use KeySym macros to perform the following tests. IsCursorKey(keysym) keysym Specifies the KeySym that is to be tested. IsCursorKey Returns True if the specified KeySym is a cursor key. IsFunctionKey(keysym) keysym Specifies the KeySym that is to be tested. IsFunctionKey Returns True if the specified KeySym is a function key. IsKeypadKey(keysym) keysym Specifies the KeySym that is to be tested. IsKeypadKey Returns True if the specified KeySym is a standard keypad key. IsPrivateKeypadKey(keysym) keysym Specifies the KeySym that is to be tested. IsPrivateKeypadKey Returns True if the specified KeySym is a vendor-private keypad key. IsMiscFunctionKey(keysym) keysym Specifies the KeySym that is to be tested. IsMiscFunctionKey Returns True if the specified KeySym is a miscellaneous function key. IsModifierKey(keysym) keysym Specifies the KeySym that is to be tested. IsModifierKey Returns True if the specified KeySym is a modifier key. IsPFKey(keysym) keysym Specifies the KeySym that is to be tested. IsPFKey Returns True if the specified KeySym is a PF key. Using Latin-1 Keyboard Event Functions Chapter 13 describes internationalized text input facilities, but sometimes it is expedient to write an application that only deals with Latin-1 characters and ASCII controls, so Xlib provides a simple function for that purpose. handles the standard modifier semantics described in section 12.7. This function does not use any of the input method facilities described in chapter 13 and does not depend on the current locale. To map a key event to an ISO Latin-1 string, use . XLookupString int XLookupString XKeyEvent *event_struct char *buffer_return int bytes_buffer KeySym *keysym_return XComposeStatus *status_in_out event_struct Specifies the key event structure to be used. You can pass XKeyPressedEvent or XKeyReleasedEvent. buffer_return Returns the translated characters. bytes_buffer Specifies the length of the buffer. No more than bytes_buffer of translation are returned. keysym_return Returns the KeySym computed from the event if this argument is not NULL. status_in_out Specifies or returns the XComposeStatus structure or NULL. The function translates a key event to a KeySym and a string. The KeySym is obtained by using the standard interpretation of the Shift, Lock, group, and numlock modifiers as defined in the X Protocol specification. If the KeySym has been rebound (see ), the bound string will be stored in the buffer. Otherwise, the KeySym is mapped, if possible, to an ISO Latin-1 character or (if the Control modifier is on) to an ASCII control character, and that character is stored in the buffer. returns the number of characters that are stored in the buffer. If present (non-NULL), the XComposeStatus structure records the state, which is private to Xlib, that needs preservation across calls to to implement compose processing. The creation of XComposeStatus structures is implementation-dependent; a portable program must pass NULL for this argument. depends on the cached keyboard information mentioned in the previous section, so it is necessary to use to keep this information up-to-date. To rebind the meaning of a KeySym for , use . XRebindKeysym XRebindKeysym Display *display KeySym keysym KeySym list[ ] int mod_count unsignedchar *string int num_bytes display Specifies the connection to the X server. keysym Specifies the KeySym that is to be rebound. list Specifies the KeySyms to be used as modifiers. mod_count Specifies the number of modifiers in the modifier list. string Specifies the string that is copied and will be returned by . num_bytes Specifies the number of bytes in the string argument. The function can be used to rebind the meaning of a KeySym for the client. It does not redefine any key in the X server but merely provides an easy way for long strings to be attached to keys. returns this string when the appropriate set of modifier keys are pressed and when the KeySym would have been used for the translation. No text conversions are performed; the client is responsible for supplying appropriately encoded strings. Note that you can rebind a KeySym that may not exist. Allocating Permanent Storage To allocate some memory you will never give back, use . Xpermalloc char *Xpermalloc unsigned int size The function allocates storage that can never be freed for the life of the program. The memory is allocated with alignment for the C type double. This function may provide some performance and space savings over the standard operating system memory allocator. Parsing the Window Geometry To parse standard window geometry strings, use . Windowdetermining location XParseGeometry int XParseGeometry char *parsestring int*x_return, *y_return unsigned int *width_return unsigned int *height_return parsestring Specifies the string you want to parse. x_return y_return Return the x and y offsets. width_return height_return Return the width and height determined. By convention, X applications use a standard string to indicate window size and placement. makes it easier to conform to this standard because it allows you to parse the standard window geometry. Specifically, this function lets you parse strings of the form: [=][<width>{xX}<height>][{+-}<xoffset>{+-}<yoffset>] The fields map into the arguments associated with this function. (Items enclosed in < > are integers, items in [ ] are optional, and items enclosed in { } indicate ``choose one of.'' Note that the brackets should not appear in the actual string.) If the string is not in the Host Portable Character Encoding, the result is implementation-dependent. The function returns a bitmask that indicates which of the four values (width, height, xoffset, and yoffset) were actually found in the string and whether the x and y values are negative. By convention, −0 is not equal to +0, because the user needs to be able to say ``position the window relative to the right or bottom edge.'' For each value found, the corresponding argument is updated. For each value not found, the argument is left unchanged. The bits are represented by XValue, YValue, WidthValue, HeightValue, XNegative, or YNegative and are defined in <X11/Xutil.h>. X11/Xutil.h Files<X11/Xutil.h> Headers<X11/Xutil.h> They will be set whenever one of the values is defined or one of the signs is set. If the function returns either the XValue or YValue flag, you should place the window at the requested position. To construct a window's geometry information, use . XWMGeometry int XWMGeometry Display *display int screen char *user_geom char *def_geom unsigned int bwidth XSizeHints *hints int*x_return, *y_return int *width_return int *height_return int *gravity_return display Specifies the connection to the X server. screen Specifies the screen. user_geom Specifies the user-specified geometry or NULL. def_geom Specifies the application's default geometry or NULL. bwidth Specifies the border width. hints Specifies the size hints for the window in its normal state. x_return y_return Return the x and y offsets. width_return height_return Return the width and height determined. gravity_return Returns the window gravity. The function combines any geometry information (given in the format used by ) specified by the user and by the calling program with size hints (usually the ones to be stored in WM_NORMAL_HINTS) and returns the position, size, and gravity (NorthWestGravity, NorthEastGravity, SouthEastGravity, or SouthWestGravity) that describe the window. If the base size is not set in the XSizeHints structure, the minimum size is used if set. Otherwise, a base size of zero is assumed. If no minimum size is set in the hints structure, the base size is used. A mask (in the form returned by ) that describes which values came from the user specification and whether or not the position coordinates are relative to the right and bottom edges is returned. Note that these coordinates will have already been accounted for in the x_return and y_return values. Note that invalid geometry specifications can cause a width or height of zero to be returned. The caller may pass the address of the hints win_gravity field as gravity_return to update the hints directly. Manipulating Regions Regions are arbitrary sets of pixel locations. Xlib provides functions for manipulating regions. The opaque type Region is defined in <X11/Xutil.h>. X11/Xutil.h Files<X11/Xutil.h> Headers<X11/Xutil.h> Xlib provides functions that you can use to manipulate regions. This section discusses how to: Create, copy, or destroy regions Move or shrink regions Compute with regions Determine if regions are empty or equal Locate a point or rectangle in a region Creating, Copying, or Destroying Regions To create a new empty region, use XCreateRegion. Region XCreateRegion() To generate a region from a polygon, use . XPolygonRegion Region XPolygonRegion XPoint points[] int n int fill_rule points Specifies an array of points. n Specifies the number of points in the polygon. fill_rule Specifies the fill-rule you want to set for the specified GC. You can pass EvenOddRule or WindingRule. The function returns a region for the polygon defined by the points array. For an explanation of fill_rule, see . To set the clip-mask of a GC to a region, use . XSetRegion XSetRegion Display *display GC gc Region r display Specifies the connection to the X server. gc Specifies the GC. r Specifies the region. The function sets the clip-mask in the GC to the specified region. The region is specified relative to the drawable's origin. The resulting GC clip origin is implementation-dependent. Once it is set in the GC, the region can be destroyed. To deallocate the storage associated with a specified region, use . XDestroyRegion XDestroyRegion Region r r Specifies the region. Moving or Shrinking Regions To move a region by a specified amount, use . XOffsetRegion XOffsetRegion Region r intdx, dy r Specifies the region. dx dy Specify the x and y coordinates, which define the amount you want to move the specified region. To reduce a region by a specified amount, use . XShrinkRegion XShrinkRegion Region r intdx, dy r Specifies the region. dx dy Specify the x and y coordinates, which define the amount you want to shrink the specified region. Positive values shrink the size of the region, and negative values expand the region. Computing with Regions To generate the smallest rectangle enclosing a region, use . XClipBox XClipBox Region r XRectangle *rect_return r Specifies the region. rect_return Returns the smallest enclosing rectangle. The function returns the smallest rectangle enclosing the specified region. To compute the intersection of two regions, use . XIntersectRegion XIntersectRegion Regionsra,srb, dr_return sra srb Specify the two regions with which you want to perform the computation. dr_return Returns the result of the computation. To compute the union of two regions, use . XUnionRegion XUnionRegion Regionsra,srb, dr_return sra srb Specify the two regions with which you want to perform the computation. dr_return Returns the result of the computation. To create a union of a source region and a rectangle, use . XUnionRectWithRegion XUnionRectWithRegion XRectangle *rectangle Region src_region Region dest_region_return rectangle Specifies the rectangle. src_region Specifies the source region to be used. dest_region_return Returns the destination region. The function updates the destination region from a union of the specified rectangle and the specified source region. To subtract two regions, use . XSubtractRegion XSubtractRegion Regionsra,srb, dr_return sra srb Specify the two regions with which you want to perform the computation. dr_return Returns the result of the computation. The function subtracts srb from sra and stores the results in dr_return. To calculate the difference between the union and intersection of two regions, use . XXorRegion XXorRegion Regionsra,srb, dr_return sra srb Specify the two regions with which you want to perform the computation. dr_return Returns the result of the computation. Determining if Regions Are Empty or Equal To determine if the specified region is empty, use . XEmptyRegion Bool XEmptyRegion Region r r Specifies the region. The function returns True if the region is empty. To determine if two regions have the same offset, size, and shape, use . XEqualRegion Bool XEqualRegion Regionr1, r2 r1 r2 Specify the two regions. The function returns True if the two regions have the same offset, size, and shape. Locating a Point or a Rectangle in a Region To determine if a specified point resides in a specified region, use . XPointInRegion Bool XPointInRegion Region r int x int y r Specifies the region. x y Specify the x and y coordinates, which define the point. The function returns True if the point (x, y) is contained in the region r. To determine if a specified rectangle is inside a region, use . XRectInRegion int XRectInRegion Region r int x int y unsigned int width unsigned int height r Specifies the region. x y Specify the x and y coordinates, which define the coordinates of the upper-left corner of the rectangle. width height Specify the width and height, which define the rectangle. The function returns RectangleIn if the rectangle is entirely in the specified region, RectangleOut if the rectangle is entirely out of the specified region, and RectanglePart if the rectangle is partially in the specified region. Using Cut Buffers Cut Buffers Xlib provides functions to manipulate cut buffers, a very simple form of cut-and-paste inter-client communication. Selections are a much more powerful and useful mechanism for interchanging data between client (see section 4.5) and generally should be used instead of cut buffers. Cut buffers are implemented as properties on the first root window of the display. The buffers can only contain text, in the STRING encoding. The text encoding is not changed by Xlib when fetching or storing. Eight buffers are provided and can be accessed as a ring or as explicit buffers (numbered 0 through 7). To store data in cut buffer 0, use . XStoreBytes XStoreBytes Display *display char *bytes int nbytes display Specifies the connection to the X server. bytes Specifies the bytes, which are not necessarily ASCII or null-terminated. nbytes Specifies the number of bytes to be stored. The data can have embedded null characters and need not be null-terminated. The cut buffer's contents can be retrieved later by any client calling . can generate a BadAlloc error. To store data in a specified cut buffer, use . XStoreBuffer XStoreBuffer Display *display char *bytes int nbytes int buffer display Specifies the connection to the X server. bytes Specifies the bytes, which are not necessarily ASCII or null-terminated. nbytes Specifies the number of bytes to be stored. buffer Specifies the buffer in which you want to store the bytes. If an invalid buffer is specified, the call has no effect. The data can have embedded null characters and need not be null-terminated. can generate a BadAlloc error. To return data from cut buffer 0, use . XFetchBytes char *XFetchBytes Display *display int *nbytes_return display Specifies the connection to the X server. nbytes_return Returns the number of bytes in the buffer. The function returns the number of bytes in the nbytes_return argument, if the buffer contains data. Otherwise, the function returns NULL and sets nbytes to 0. The appropriate amount of storage is allocated and the pointer returned. The client must free this storage when finished with it by calling . To return data from a specified cut buffer, use . XFetchBuffer char *XFetchBuffer Display *display int *nbytes_return int buffer display Specifies the connection to the X server. nbytes_return Returns the number of bytes in the buffer. buffer Specifies the buffer from which you want the stored data returned. The function returns zero to the nbytes_return argument if there is no data in the buffer or if an invalid buffer is specified. To rotate the cut buffers, use . XRotateBuffers XRotateBuffers Display *display int rotate display Specifies the connection to the X server. rotate Specifies how much to rotate the cut buffers. The function rotates the cut buffers, such that buffer 0 becomes buffer n, buffer 1 becomes n + 1 mod 8, and so on. This cut buffer numbering is global to the display. Note that generates BadMatch errors if any of the eight buffers have not been created. Determining the Appropriate Visual Type A single display can support multiple screens. Each screen can have several different visual types supported at different depths. You can use the functions described in this section to determine which visual to use for your application. The functions in this section use the visual information masks and the XVisualInfo structure, which is defined in <X11/Xutil.h> X11/Xutil.h Files<X11/Xutil.h> Headers<X11/Xutil.h> and contains: /* Visual information mask bits */ #define VisualNoMask 0x0 #define VisualIDMask 0x1 #define VisualScreenMask 0x2 #define VisualDepthMask 0x4 #define VisualClassMask 0x8 #define VisualRedMaskMask 0x10 #define VisualGreenMaskMask 0x20 #define VisualBlueMaskMask 0x40 #define VisualColormapSizeMask 0x80 #define VisualBitsPerRGBMask 0x100 #define VisualAllMask 0x1FF /* Values */ typedef struct { Visual *visual; VisualID visualid; int screen; unsigned int depth; int class; unsigned long red_mask; unsigned long green_mask; unsigned long blue_mask; int colormap_size; int bits_per_rgb; } XVisualInfo; To obtain a list of visual information structures that match a specified template, use . XGetVisualInfo XVisualInfo *XGetVisualInfo Display *display long vinfo_mask XVisualInfo *vinfo_template int *nitems_return display Specifies the connection to the X server. vinfo_mask Specifies the visual mask value. vinfo_template Specifies the visual attributes that are to be used in matching the visual structures. nitems_return Returns the number of matching visual structures. The function returns a list of visual structures that have attributes equal to the attributes specified by vinfo_template. If no visual structures match the template using the specified vinfo_mask, returns a NULL. To free the data returned by this function, use . To obtain the visual information that matches the specified depth and class of the screen, use . XMatchVisualInfo Status XMatchVisualInfo Display *display int screen int depth int class XVisualInfo *vinfo_return display Specifies the connection to the X server. screen Specifies the screen. depth Specifies the depth of the screen. class Specifies the class of the screen. vinfo_return Returns the matched visual information. The function returns the visual information for a visual that matches the specified depth and class for a screen. Because multiple visuals that match the specified depth and class can exist, the exact visual chosen is undefined. If a visual is found, returns nonzero and the information on the visual to vinfo_return. Otherwise, when a visual is not found, returns zero. Manipulating Images Xlib provides several functions that perform basic operations on images. All operations on images are defined using an XImage structure, as defined in <X11/Xlib.h>. X11/Xlib.h Files<X11/Xlib.h> Headers<X11/Xlib.h> Because the number of different types of image formats can be very large, this hides details of image storage properly from applications. This section describes the functions for generic operations on images. Manufacturers can provide very fast implementations of these for the formats frequently encountered on their hardware. These functions are neither sufficient nor desirable to use for general image processing. Rather, they are here to provide minimal functions on screen format images. The basic operations for getting and putting images are and . Note that no functions have been defined, as yet, to read and write images to and from disk files. The XImage structure describes an image as it exists in the client's memory. The user can request that some of the members such as height, width, and xoffset be changed when the image is sent to the server. Note that bytes_per_line in concert with offset can be used to extract a subset of the image. Other members (for example, byte order, bitmap_unit, and so forth) are characteristics of both the image and the server. If these members differ between the image and the server, makes the appropriate conversions. The first byte of the first line of plane n must be located at the address (data + (n * height * bytes_per_line)). For a description of the XImage structure, see section 8.7. To allocate an XImage structure and initialize it with image format values from a display, use . XCreateImage XImage *XCreateImage Display *display Visual *visual unsigned int depth int format int offset char *data unsigned int width unsigned int height int bitmap_pad int bytes_per_line display Specifies the connection to the X server. visual Specifies the Visual structure. depth Specifies the depth of the image. format Specifies the format for the image. You can pass XYBitmap, XYPixmap, or ZPixmap. offset Specifies the number of pixels to ignore at the beginning of the scanline. data Specifies the image data. width Specifies the width of the image, in pixels. height Specifies the height of the image, in pixels. bitmap_pad Specifies the quantum of a scanline (8, 16, or 32). In other words, the start of one scanline is separated in client memory from the start of the next scanline by an integer multiple of this many bits. bytes_per_line Specifies the number of bytes in the client image between the start of one scanline and the start of the next. The function allocates the memory needed for an XImage structure for the specified display but does not allocate space for the image itself. Rather, it initializes the structure byte-order, bit-order, and bitmap-unit values from the display and returns a pointer to the XImage structure. The red, green, and blue mask values are defined for Z format images only and are derived from the Visual structure passed in. Other values also are passed in. The offset permits the rapid displaying of the image without requiring each scanline to be shifted into position. If you pass a zero value in bytes_per_line, Xlib assumes that the scanlines are contiguous in memory and calculates the value of bytes_per_line itself. Note that when the image is created using , , or , the destroy procedure that the function calls frees both the image structure and the data pointed to by the image structure. The basic functions used to get a pixel, set a pixel, create a subimage, and add a constant value to an image are defined in the image object. The functions in this section are really macro invocations of the functions in the image object and are defined in <X11/Xutil.h>. X11/Xutil.h Files<X11/Xutil.h> Headers<X11/Xutil.h> To obtain a pixel value in an image, use . XGetPixel unsigned long XGetPixel XImage *ximage int x int y ximage Specifies the image. x y Specify the x and y coordinates. The function returns the specified pixel from the named image. The pixel value is returned in normalized format (that is, the least significant byte of the long is the least significant byte of the pixel). The image must contain the x and y coordinates. To set a pixel value in an image, use . XPutPixel XPutPixel XImage *ximage int x int y unsigned long pixel ximage Specifies the image. x y Specify the x and y coordinates. pixel Specifies the new pixel value. The function overwrites the pixel in the named image with the specified pixel value. The input pixel value must be in normalized format (that is, the least significant byte of the long is the least significant byte of the pixel). The image must contain the x and y coordinates. To create a subimage, use . XSubImage XImage *XSubImage XImage *ximage int x int y unsigned int subimage_width unsigned int subimage_height ximage Specifies the image. x y Specify the x and y coordinates. subimage_width Specifies the width of the new subimage, in pixels. subimage_height Specifies the height of the new subimage, in pixels. The function creates a new image that is a subsection of an existing one. It allocates the memory necessary for the new XImage structure and returns a pointer to the new image. The data is copied from the source image, and the image must contain the rectangle defined by x, y, subimage_width, and subimage_height. To increment each pixel in an image by a constant value, use . XAddPixel XAddPixel XImage *ximage long value ximage Specifies the image. value Specifies the constant value that is to be added. The function adds a constant value to every pixel in an image. It is useful when you have a base pixel value from allocating color resources and need to manipulate the image to that form. To deallocate the memory allocated in a previous call to , use . XDestroyImage XDestroyImage XImage *ximage ximage Specifies the image. The function deallocates the memory associated with the XImage structure. Note that when the image is created using , , or , the destroy procedure that this macro calls frees both the image structure and the data pointed to by the image structure. Manipulating Bitmaps Xlib provides functions that you can use to read a bitmap from a file, save a bitmap to a file, or create a bitmap. This section describes those functions that transfer bitmaps to and from the client's file system, thus allowing their reuse in a later connection (for example, from an entirely different client or to a different display or server). The X version 11 bitmap file format is: #define name_width width #define name_height height #define name_x_hot x #define name_y_hot y static unsigned char name_bits[] = { 0xNN,... } The lines for the variables ending with _x_hot and _y_hot suffixes are optional because they are present only if a hotspot has been defined for this bitmap. The lines for the other variables are required. The word ``unsigned'' is optional; that is, the type of the _bits array can be ``char'' or ``unsigned char''. The _bits array must be large enough to contain the size bitmap. The bitmap unit is 8. To read a bitmap from a file and store it in a pixmap, use . XReadBitmapFile int XReadBitmapFile Display *display Drawable d char *filename unsigned int *width_return unsigned int *height_return Pixmap *bitmap_return int*x_hot_return, *y_hot_return display Specifies the connection to the X server. d Specifies the drawable that indicates the screen. filename Specifies the file name to use. The format of the file name is operating-system dependent. width_return height_return Return the width and height values of the read in bitmap file. bitmap_return Returns the bitmap that is created. x_hot_return y_hot_return Return the hotspot coordinates. The function reads in a file containing a bitmap. The file is parsed in the encoding of the current locale. The ability to read other than the standard format is implementation-dependent. If the file cannot be opened, returns BitmapOpenFailed. If the file can be opened but does not contain valid bitmap data, it returns BitmapFileInvalid. If insufficient working storage is allocated, it returns BitmapNoMemory. If the file is readable and valid, it returns BitmapSuccess. returns the bitmap's height and width, as read from the file, to width_return and height_return. It then creates a pixmap of the appropriate size, reads the bitmap data from the file into the pixmap, and assigns the pixmap to the caller's variable bitmap. The caller must free the bitmap using when finished. If name_x_hot and name_y_hot exist, returns them to x_hot_return and y_hot_return; otherwise, it returns −1,−1. can generate BadAlloc, BadDrawable, and BadGC errors. To read a bitmap from a file and return it as data, use . XReadBitmapFileData int XReadBitmapFileData char *filename unsigned int *width_return unsigned int *height_return unsignedchar *data_return int*x_hot_return, *y_hot_return filename Specifies the file name to use. The format of the file name is operating-system dependent. width_return height_return Return the width and height values of the read in bitmap file. data_return Returns the bitmap data. x_hot_return y_hot_return Return the hotspot coordinates. The function reads in a file containing a bitmap, in the same manner as , but returns the data directly rather than creating a pixmap in the server. The bitmap data is returned in data_return; the client must free this storage when finished with it by calling . The status and other return values are the same as for . To write out a bitmap from a pixmap to a file, use . XWriteBitmapFile int XWriteBitmapFile Display *display char *filename Pixmap bitmap unsigned int width unsigned int height intx_hot, y_hot display Specifies the connection to the X server. filename Specifies the file name to use. The format of the file name is operating-system dependent. bitmap Specifies the bitmap. width height Specify the width and height. x_hot y_hot Specify where to place the hotspot coordinates (or −1,−1 if none are present) in the file. The function writes a bitmap out to a file in the X Version 11 format. The name used in the output file is derived from the file name by deleting the directory prefix. The file is written in the encoding of the current locale. If the file cannot be opened for writing, it returns BitmapOpenFailed. If insufficient memory is allocated, returns BitmapNoMemory; otherwise, on no error, it returns BitmapSuccess. If x_hot and y_hot are not −1, −1, writes them out as the hotspot coordinates for the bitmap. can generate BadDrawable and BadMatch errors. To create a pixmap and then store bitmap-format data into it, use . XCreatePixmapFromBitmapData Pixmap XCreatePixmapFromBitmapData Display *display Drawable d char *data unsigned int width unsigned int height unsigned long fg, bg unsigned int depth display Specifies the connection to the X server. d Specifies the drawable that indicates the screen. data Specifies the data in bitmap format. width height Specify the width and height. fg bg Specify the foreground and background pixel values to use. depth Specifies the depth of the pixmap. The function creates a pixmap of the given depth and then does a bitmap-format of the data into it. The depth must be supported by the screen of the specified drawable, or a BadMatch error results. can generate BadAlloc, BadDrawable, BadGC, and BadValue errors. To include a bitmap written out by XWriteBitmapFile in a program directly, as opposed to reading it in every time at run time, use . XCreateBitmapFromData Pixmap XCreateBitmapFromData Display *display Drawable d char *data unsigned int width unsigned int height display Specifies the connection to the X server. d Specifies the drawable that indicates the screen. data Specifies the location of the bitmap data. width height Specify the width and height. The function allows you to include in your C program (using #include) a bitmap file that was written out by (X version 11 format only) without reading in the bitmap file. The following example creates a gray bitmap: #include "gray.bitmap" Pixmap bitmap; bitmap = XCreateBitmapFromData(display, window, gray_bits, gray_width, gray_height); If insufficient working storage was allocated, returns None. It is your responsibility to free the bitmap using when finished. can generate BadAlloc and BadGC errors. Using the Context Manager The context manager provides a way of associating data with an X resource ID (mostly typically a window) in your program. Note that this is local to your program; the data is not stored in the server on a property list. Any amount of data in any number of pieces can be associated with a resource ID, and each piece of data has a type associated with it. The context manager requires knowledge of the resource ID and type to store or retrieve data. Essentially, the context manager can be viewed as a two-dimensional, sparse array: one dimension is subscripted by the X resource ID and the other by a context type field. Each entry in the array contains a pointer to the data. Xlib provides context management functions with which you can save data values, get data values, delete entries, and create a unique context type. The symbols used are in <X11/Xutil.h>. X11/Xutil.h Files<X11/Xutil.h> Headers<X11/Xutil.h> To save a data value that corresponds to a resource ID and context type, use . XSaveContext int XSaveContext Display *display XID rid XContext context XPointer data display Specifies the connection to the X server. rid Specifies the resource ID with which the data is associated. context Specifies the context type to which the data belongs. data Specifies the data to be associated with the window and type. If an entry with the specified resource ID and type already exists, overrides it with the specified context. The function returns a nonzero error code if an error has occurred and zero otherwise. Possible errors are XCNOMEM (out of memory). To get the data associated with a resource ID and type, use . XFindContext int XFindContext Display *display XID rid XContext context XPointer *data_return display Specifies the connection to the X server. rid Specifies the resource ID with which the data is associated. context Specifies the context type to which the data belongs. data_return Returns the data. Because it is a return value, the data is a pointer. The function returns a nonzero error code if an error has occurred and zero otherwise. Possible errors are XCNOENT (context-not-found). To delete an entry for a given resource ID and type, use . XDeleteContext int XDeleteContext Display *display XID rid XContext context display Specifies the connection to the X server. rid Specifies the resource ID with which the data is associated. context Specifies the context type to which the data belongs. The function deletes the entry for the given resource ID and type from the data structure. This function returns the same error codes that returns if called with the same arguments. does not free the data whose address was saved. To create a unique context type that may be used in subsequent calls to and , use XUniqueContext. XContext XuniqueContext() nd='XWriteBitmapFile' xrefstyle='select: title'/> XWriteBitmapFile in a program directly, as opposed to reading it in every time at run time, use Graphics Context Functions A number of resources are used when performing graphics operations in X. Most information about performing graphics (for example, foreground color, background color, line style, and so on) is stored in resources called graphics contexts (GCs). Most graphics operations (see chapter 8) take a GC as an argument. Although in theory the X protocol permits sharing of GCs between applications, it is expected that applications will use their own GCs when performing operations. Sharing of GCs is highly discouraged because the library may cache GC state. Graphics operations can be performed to either windows or pixmaps, which collectively are called drawables. Each drawable exists on a single screen. A GC is created for a specific screen and drawable depth and can only be used with drawables of matching screen and depth. This chapter discusses how to: Manipulate graphics context/state Use graphics context convenience functions Manipulating Graphics Context/State Most attributes of graphics operations are stored in GCs. These include line width, line style, plane mask, foreground, background, tile, stipple, clipping region, end style, join style, and so on. Graphics operations (for example, drawing lines) use these values to determine the actual drawing operation. Extensions to X may add additional components to GCs. The contents of a GC are private to Xlib. Xlib implements a write-back cache for all elements of a GC that are not resource IDs to allow Xlib to implement the transparent coalescing of changes to GCs. For example, a call to of a GC followed by a call to results in only a single-change GC protocol request to the server. GCs are neither expected nor encouraged to be shared between client applications, so this write-back caching should present no problems. Applications cannot share GCs without external synchronization. Therefore, sharing GCs between applications is highly discouraged. To set an attribute of a GC, set the appropriate member of the XGCValues structure and OR in the corresponding value bitmask in your subsequent calls to . The symbols for the value mask bits and the XGCValues structure are: /* GC attribute value mask bits */ #define GCFunction (1L<<0) #define GCPlaneMask (1L<<1) #define GCForeground (1L<<2) #define GCBackground (1L<<3) #define GCLineWidth (1L<<4) #define GCLineStyle (1L<<5) #define GCCapStyle (1L<<6) #define GCJoinStyle (1L<<7) #define GCFillStyle (1L<<8) #define GCFillRule (1L<<9) #define GCTile (1L<<10) #define GCStipple (1L<<11) #define GCTileStipXOrigin (1L<<12) #define GCTileStipYOrigin (1L<<13) #define GCFont (1L<<14) #define GCSubwindowMode (1L<<15) #define GCGraphicsExposures (1L<<16) #define GCClipXOrigin (1L<<17) #define GCClipYOrigin (1L<<18) #define GCClipMask (1L<<19) #define GCDashOffset (1L<<20) #define GCDashList (1L<<21) #define GCArcMode (1L<<22) /* Values */ typedef struct { int function; /* logical operation */ unsigned long plane_mask; /* plane mask */ unsigned long foreground; /* foreground pixel */ unsigned long background; /* background pixel */ int line_width; /* line width (in pixels) */ int line_style; /* LineSolid, LineOnOffDash, LineDoubleDash */ int cap_style; /* CapNotLast, CapButt, CapRound, CapProjecting */ int join_style; /* JoinMiter, JoinRound, JoinBevel */ int fill_style; /* FillSolid, FillTiled, FillStippled FillOpaqueStippled*/ int fill_rule; /* EvenOddRule, WindingRule */ int arc_mode; /* ArcChord, ArcPieSlice */ Pixmap tile; /* tile pixmap for tiling operations */ Pixmap stipple; /* stipple 1 plane pixmap for stippling */ int ts_x_origin; /* offset for tile or stipple operations */ int ts_y_origin Font font; /* default text font for text operations */ int subwindow_mode; /* ClipByChildren, IncludeInferiors */ Bool graphics_exposures; /* boolean, should exposures be generated */ int clip_x_origin; /* origin for clipping */ int clip_y_origin; Pixmap clip_mask; /* bitmap clipping; other calls for rects */ int dash_offset; /* patterned/dashed line information */ char dashes; } XGCValues; The default GC values are: Component Default function GXcopy plane_mask All ones foreground 0 background 1 line_width 0 line_style LineSolid cap_style CapButt join_style JoinMiter fill_style FillSolid fill_rule EvenOddRule arc_mode ArcPieSlice tile Pixmap of unspecified size filled with foreground pixel (that is, client specified pixel if any, else 0) (subsequent changes to foreground do not affect this pixmap) stipple Pixmap of unspecified size filled with ones ts_x_origin 0 ts_y_origin 0 font <implementation dependent> subwindow_mode ClipByChildren graphics_exposures True clip_x_origin 0 clip_y_origin 0 clip_mask None dash_offset 0 dashes 4 (that is, the list [4, 4]) Note that foreground and background are not set to any values likely to be useful in a window. Display Functions Source Destination The function attributes of a GC are used when you update a section of a drawable (the destination) with bits from somewhere else (the source). The function in a GC defines how the new destination bits are to be computed from the source bits and the old destination bits. GXcopy is typically the most useful because it will work on a color display, but special applications may use other functions, particularly in concert with particular planes of a color display. The 16 GC functions, defined in <X11/X.h>, X11/X.h Files<X11/X.h> Headers<X11/X.h> are: Function Name Value Operation GXclear 0x0 0 GXand 0x1 src AND dst GXandReverse 0x2 src AND NOT dst GXcopy 0x3 src GXandInverted 0x4 (NOT src) AND dst GXnoop 0x5 dst GXxor 0x6 src XOR dst GXor 0x7 src OR dst GXnor 0x8 (NOT src) AND (NOT dst) GXequiv 0x9 (NOT src) XOR dst GXinvert 0xa NOT dst GXorReverse 0xb src OR (NOT dst) GXcopyInverted 0xc NOT src GXorInverted 0xd (NOT src) OR dst GXnand 0xe (NOT src) OR (NOT dst) GXset 0xf 1 Many graphics operations depend on either pixel values or planes in a GC. Pixel value The planes attribute is of type long, and it specifies which planes of the destination are to be modified, one bit per plane. Planemask A monochrome display has only one plane and will be the least significant bit of the word. As planes are added to the display hardware, they will occupy more significant bits in the plane mask. In graphics operations, given a source and destination pixel, the result is computed bitwise on corresponding bits of the pixels. That is, a Boolean operation is performed in each bit plane. The plane_mask restricts the operation to a subset of planes. A macro constant AllPlanes can be used to refer to all planes of the screen simultaneously. The result is computed by the following: ((src FUNC dst) AND plane-mask) OR (dst AND (NOT plane-mask)) Range checking is not performed on the values for foreground, background, or plane_mask. They are simply truncated to the appropriate number of bits. The line-width is measured in pixels and either can be greater than or equal to one (wide line) or can be the special value zero (thin line). Wide lines are drawn centered on the path described by the graphics request. Unless otherwise specified by the join-style or cap-style, the bounding box of a wide line with endpoints [x1, y1], [x2, y2] and width w is a rectangle with vertices at the following real coordinates: [x1-(w*sn/2), y1+(w*cs/2)], [x1+(w*sn/2), y1-(w*cs/2)], [x2-(w*sn/2), y2+(w*cs/2)], [x2+(w*sn/2), y2-(w*cs/2)] Here sn is the sine of the angle of the line, and cs is the cosine of the angle of the line. A pixel is part of the line and so is drawn if the center of the pixel is fully inside the bounding box (which is viewed as having infinitely thin edges). If the center of the pixel is exactly on the bounding box, it is part of the line if and only if the interior is immediately to its right (x increasing direction). Pixels with centers on a horizontal edge are a special case and are part of the line if and only if the interior or the boundary is immediately below (y increasing direction) and the interior or the boundary is immediately to the right (x increasing direction). Thin lines (zero line-width) are one-pixel-wide lines drawn using an unspecified, device-dependent algorithm. There are only two constraints on this algorithm. If a line is drawn unclipped from [x1,y1] to [x2,y2] and if another line is drawn unclipped from [x1+dx,y1+dy] to [x2+dx,y2+dy], a point [x,y] is touched by drawing the first line if and only if the point [x+dx,y+dy] is touched by drawing the second line. The effective set of points comprising a line cannot be affected by clipping. That is, a point is touched in a clipped line if and only if the point lies inside the clipping region and the point would be touched by the line when drawn unclipped. A wide line drawn from [x1,y1] to [x2,y2] always draws the same pixels as a wide line drawn from [x2,y2] to [x1,y1], not counting cap-style and join-style. It is recommended that this property be true for thin lines, but this is not required. A line-width of zero may differ from a line-width of one in which pixels are drawn. This permits the use of many manufacturers' line drawing hardware, which may run many times faster than the more precisely specified wide lines. In general, drawing a thin line will be faster than drawing a wide line of width one. However, because of their different drawing algorithms, thin lines may not mix well aesthetically with wide lines. If it is desirable to obtain precise and uniform results across all displays, a client should always use a line-width of one rather than a line-width of zero. The line-style defines which sections of a line are drawn: LineSolid The full path of the line is drawn. LineDoubleDash The full path of the line is drawn, but the even dashes are filled differently from the odd dashes (see fill-style) with CapButt style used where even and odd dashes meet. LineOnOffDash Only the even dashes are drawn, and cap-style applies to all internal ends of the individual dashes, except CapNotLast is treated as CapButt. The cap-style defines how the endpoints of a path are drawn: CapNotLast This is equivalent to CapButt except that for a line-width of zero the final endpoint is not drawn. CapButt The line is square at the endpoint (perpendicular to the slope of the line) with no projection beyond. CapRound The line has a circular arc with the diameter equal to the line-width, centered on the endpoint. (This is equivalent to CapButt for line-width of zero). CapProjecting The line is square at the end, but the path continues beyond the endpoint for a distance equal to half the line-width. (This is equivalent to CapButt for line-width of zero). The join-style defines how corners are drawn for wide lines: JoinMiter The outer edges of two lines extend to meet at an angle. However, if the angle is less than 11 degrees, then a JoinBevel join-style is used instead. JoinRound The corner is a circular arc with the diameter equal to the line-width, centered on the joinpoint. JoinBevel The corner has CapButt endpoint styles with the triangular notch filled. For a line with coincident endpoints (x1=x2, y1=y2), when the cap-style is applied to both endpoints, the semantics depends on the line-width and the cap-style: CapNotLast thin The results are device dependent, but the desired effect is that nothing is drawn. CapButt thin The results are device dependent, but the desired effect is that a single pixel is drawn. CapRound thin The results are the same as for CapButt /thin. CapProjecting thin The results are the same as for CapButt /thin. CapButt wide Nothing is drawn. CapRound wide The closed path is a circle, centered at the endpoint, and with the diameter equal to the line-width. CapProjecting wide The closed path is a square, aligned with the coordinate axes, centered at the endpoint, and with the sides equal to the line-width. For a line with coincident endpoints (x1=x2, y1=y2), when the join-style is applied at one or both endpoints, the effect is as if the line was removed from the overall path. However, if the total path consists of or is reduced to a single point joined with itself, the effect is the same as when the cap-style is applied at both endpoints. The tile/stipple represents an infinite two-dimensional plane, with the tile/stipple replicated in all dimensions. When that plane is superimposed on the drawable for use in a graphics operation, the upper-left corner of some instance of the tile/stipple is at the coordinates within the drawable specified by the tile/stipple origin. The tile/stipple and clip origins are interpreted relative to the origin of whatever destination drawable is specified in a graphics request. The tile pixmap must have the same root and depth as the GC, or a BadMatch error results. The stipple pixmap must have depth one and must have the same root as the GC, or a BadMatch error results. For stipple operations where the fill-style is FillStippled but not FillOpaqueStippled, the stipple pattern is tiled in a single plane and acts as an additional clip mask to be ANDed with the clip-mask. Although some sizes may be faster to use than others, any size pixmap can be used for tiling or stippling. The fill-style defines the contents of the source for line, text, and fill requests. For all text and fill requests (for example, , , , , and ); for line requests with line-style LineSolid (for example, , , , ); and for the even dashes for line requests with line-style LineOnOffDash or LineDoubleDash, the following apply: FillSolid Foreground FillTiled Tile FillOpaqueStippled A tile with the same width and height as stipple, but with background everywhere stipple has a zero and with foreground everywhere stipple has a one FillStippled Foreground masked by stipple When drawing lines with line-style LineDoubleDash, the odd dashes are controlled by the fill-style in the following manner: FillSolid Background FillTiled Same as for even dashes FillOpaqueStippled Same as for even dashes FillStippled Background masked by stipple Storing a pixmap in a GC might or might not result in a copy being made. If the pixmap is later used as the destination for a graphics request, the change might or might not be reflected in the GC. If the pixmap is used simultaneously in a graphics request both as a destination and as a tile or stipple, the results are undefined. For optimum performance, you should draw as much as possible with the same GC (without changing its components). The costs of changing GC components relative to using different GCs depend on the display hardware and the server implementation. It is quite likely that some amount of GC information will be cached in display hardware and that such hardware can only cache a small number of GCs. The dashes value is actually a simplified form of the more general patterns that can be set with . Specifying a value of N is equivalent to specifying the two-element list [N, N] in . The value must be nonzero, or a BadValue error results. The clip-mask restricts writes to the destination drawable. If the clip-mask is set to a pixmap, it must have depth one and have the same root as the GC, or a BadMatch error results. If clip-mask is set to None, the pixels are always drawn regardless of the clip origin. The clip-mask also can be set by calling the or functions. Only pixels where the clip-mask has a bit set to 1 are drawn. Pixels are not drawn outside the area covered by the clip-mask or where the clip-mask has a bit set to 0. The clip-mask affects all graphics requests. The clip-mask does not clip sources. The clip-mask origin is interpreted relative to the origin of whatever destination drawable is specified in a graphics request. You can set the subwindow-mode to ClipByChildren or IncludeInferiors. For ClipByChildren, both source and destination windows are additionally clipped by all viewable InputOutput children. For IncludeInferiors, neither source nor destination window is clipped by inferiors. This will result in including subwindow contents in the source and drawing through subwindow boundaries of the destination. The use of IncludeInferiors on a window of one depth with mapped inferiors of differing depth is not illegal, but the semantics are undefined by the core protocol. The fill-rule defines what pixels are inside (drawn) for paths given in requests and can be set to EvenOddRule or WindingRule. For EvenOddRule, a point is inside if an infinite ray with the point as origin crosses the path an odd number of times. For WindingRule, a point is inside if an infinite ray with the point as origin crosses an unequal number of clockwise and counterclockwise directed path segments. A clockwise directed path segment is one that crosses the ray from left to right as observed from the point. A counterclockwise segment is one that crosses the ray from right to left as observed from the point. The case where a directed line segment is coincident with the ray is uninteresting because you can simply choose a different ray that is not coincident with a segment. For both EvenOddRule and WindingRule, a point is infinitely small, and the path is an infinitely thin line. A pixel is inside if the center point of the pixel is inside and the center point is not on the boundary. If the center point is on the boundary, the pixel is inside if and only if the polygon interior is immediately to its right (x increasing direction). Pixels with centers on a horizontal edge are a special case and are inside if and only if the polygon interior is immediately below (y increasing direction). The arc-mode controls filling in the function and can be set to ArcPieSlice or ArcChord. For ArcPieSlice, the arcs are pie-slice filled. For ArcChord, the arcs are chord filled. The graphics-exposure flag controls GraphicsExpose event generation for and requests (and any similar requests defined by extensions). To create a new GC that is usable on a given screen with a depth of drawable, use . Graphics contextinitializing XCreateGC GC XCreateGC Display *display Drawable d unsigned long valuemask XGCValues *values display Specifies the connection to the X server. d Specifies the drawable. valuemask Specifies which components in the GC are to be set using the information in the specified values structure. This argument is the bitwise inclusive OR of zero or more of the valid GC component mask bits. values Specifies any values as specified by the valuemask. The function creates a graphics context and returns a GC. The GC can be used with any destination drawable having the same root and depth as the specified drawable. Use with other drawables results in a BadMatch error. can generate BadAlloc, BadDrawable, BadFont, BadMatch, BadPixmap, and BadValue errors. To copy components from a source GC to a destination GC, use . XCopyGC XCopyGC Display *display GCsrc, dest unsigned long valuemask display Specifies the connection to the X server. src Specifies the components of the source GC. valuemask Specifies which components in the GC are to be copied to the destination GC. This argument is the bitwise inclusive OR of zero or more of the valid GC component mask bits. dest Specifies the destination GC. The function copies the specified components from the source GC to the destination GC. The source and destination GCs must have the same root and depth, or a BadMatch error results. The valuemask specifies which component to copy, as for . can generate BadAlloc, BadGC, and BadMatch errors. To change the components in a given GC, use . XChangeGC XChangeGC Display *display GC gc unsigned long valuemask XGCValues *values display Specifies the connection to the X server. gc Specifies the GC. valuemask Specifies which components in the GC are to be changed using information in the specified values structure. This argument is the bitwise inclusive OR of zero or more of the valid GC component mask bits. values Specifies any values as specified by the valuemask. The function changes the components specified by valuemask for the specified GC. The values argument contains the values to be set. The values and restrictions are the same as for . Changing the clip-mask overrides any previous request on the context. Changing the dash-offset or dash-list overrides any previous request on the context. The order in which components are verified and altered is server dependent. If an error is generated, a subset of the components may have been altered. can generate BadAlloc, BadFont, BadGC, BadMatch, BadPixmap, and BadValue errors. To obtain components of a given GC, use . XGetGCValues Status XGetGCValues Display *display GC gc unsigned long valuemask XGCValues *values_return display Specifies the connection to the X server. gc Specifies the GC. valuemask Specifies which components in the GC are to be returned in the values_return argument. This argument is the bitwise inclusive OR of zero or more of the valid GC component mask bits. values_return Returns the GC values in the specified XGCValues structure. The function returns the components specified by valuemask for the specified GC. If the valuemask contains a valid set of GC mask bits (GCFunction, GCPlaneMask, GCForeground, GCBackground, GCLineWidth, GCLineStyle, GCCapStyle, GCJoinStyle, GCFillStyle, GCFillRule, GCTile, GCStipple, GCTileStipXOrigin, GCTileStipYOrigin, GCFont, GCSubwindowMode, GCGraphicsExposures, GCClipXOrigin, GCClipYOrigin, GCDashOffset, or GCArcMode) and no error occurs, sets the requested components in values_return and returns a nonzero status. Otherwise, it returns a zero status. Note that the clip-mask and dash-list (represented by the GCClipMask and GCDashList bits, respectively, in the valuemask) cannot be requested. Also note that an invalid resource ID (with one or more of the three most significant bits set to 1) will be returned for GCFont, GCTile, and GCStipple if the component has never been explicitly set by the client. To free a given GC, use . XFreeGC XFreeGC Display *display GC gc display Specifies the connection to the X server. gc Specifies the GC. The function destroys the specified GC as well as all the associated storage. can generate a BadGC error. To obtain the GContext resource ID for a given GC, use . XGContextFromGC GContext XGContextFromGC GC gc gc Specifies the GC for which you want the resource ID. Xlib usually defers sending changes to the components of a GC to the server until a graphics function is actually called with that GC. This permits batching of component changes into a single server request. In some circumstances, however, it may be necessary for the client to explicitly force sending the changes to the server. An example might be when a protocol extension uses the GC indirectly, in such a way that the extension interface cannot know what GC will be used. To force sending GC component changes, use . XFlushGC void XFlushGC Display *display GC gc display Specifies the connection to the X server. gc Specifies the GC. Using Graphics Context Convenience Routines This section discusses how to set the: Foreground, background, plane mask, or function components Line attributes and dashes components Fill style and fill rule components Fill tile and stipple components Font component Clip region component Arc mode, subwindow mode, and graphics exposure components Setting the Foreground, Background, Function, or Plane Mask To set the foreground, background, plane mask, and function components for a given GC, use . XSetState XSetState Display *display GC gc unsigned long foreground, background int function unsigned long plane_mask display Specifies the connection to the X server. gc Specifies the GC. foreground Specifies the foreground you want to set for the specified GC. background Specifies the background you want to set for the specified GC. function Specifies the function you want to set for the specified GC. plane_mask Specifies the plane mask. can generate BadAlloc, BadGC, and BadValue errors. To set the foreground of a given GC, use . XSetForeground XSetForeground Display *display GC gc unsigned long foreground display Specifies the connection to the X server. gc Specifies the GC. foreground Specifies the foreground you want to set for the specified GC. can generate BadAlloc and BadGC errors. To set the background of a given GC, use . XSetBackground XSetBackground Display *display GC gc unsigned long background display Specifies the connection to the X server. gc Specifies the GC. background Specifies the background you want to set for the specified GC. can generate BadAlloc and BadGC errors. To set the display function in a given GC, use . XSetFunction XSetFunction Display *display GC gc int function display Specifies the connection to the X server. gc Specifies the GC. function Specifies the function you want to set for the specified GC. can generate BadAlloc, BadGC, and BadValue errors. To set the plane mask of a given GC, use . XSetPlaneMask XSetPlaneMask Display *display GC gc unsigned long plane_mask display Specifies the connection to the X server. gc Specifies the GC. plane_mask Specifies the plane mask. can generate BadAlloc and BadGC errors. Setting the Line Attributes and Dashes To set the line drawing components of a given GC, use . XSetLineAttributes XSetLineAttributes Display *display GC gc unsigned int line_width int line_style int cap_style int join_style display Specifies the connection to the X server. gc Specifies the GC. line_width Specifies the line-width you want to set for the specified GC. line_style Specifies the line-style you want to set for the specified GC. You can pass LineSolid, LineOnOffDash, or LineDoubleDash. cap_style Specifies the line-style and cap-style you want to set for the specified GC. You can pass CapNotLast, CapButt, CapRound, or CapProjecting. join_style Specifies the line join-style you want to set for the specified GC. You can pass JoinMiter, JoinRound, or JoinBevel. can generate BadAlloc, BadGC, and BadValue errors. To set the dash-offset and dash-list for dashed line styles of a given GC, use . XSetDashes XSetDashes Display *display GC gc int dash_offset char dash_list[] int n display Specifies the connection to the X server. gc Specifies the GC. dash_offset Specifies the phase of the pattern for the dashed line-style you want to set for the specified GC. dash_list Specifies the dash-list for the dashed line-style you want to set for the specified GC. n Specifies the number of elements in dash_list. The function sets the dash-offset and dash-list attributes for dashed line styles in the specified GC. There must be at least one element in the specified dash_list, or a BadValue error results. The initial and alternating elements (second, fourth, and so on) of the dash_list are the even dashes, and the others are the odd dashes. Each element specifies a dash length in pixels. All of the elements must be nonzero, or a BadValue error results. Specifying an odd-length list is equivalent to specifying the same list concatenated with itself to produce an even-length list. The dash-offset defines the phase of the pattern, specifying how many pixels into the dash-list the pattern should actually begin in any single graphics request. Dashing is continuous through path elements combined with a join-style but is reset to the dash-offset between each sequence of joined lines. The unit of measure for dashes is the same for the ordinary coordinate system. Ideally, a dash length is measured along the slope of the line, but implementations are only required to match this ideal for horizontal and vertical lines. Failing the ideal semantics, it is suggested that the length be measured along the major axis of the line. The major axis is defined as the x axis for lines drawn at an angle of between −45 and +45 degrees or between 135 and 225 degrees from the x axis. For all other lines, the major axis is the y axis. can generate BadAlloc, BadGC, and BadValue errors. Setting the Fill Style and Fill Rule To set the fill-style of a given GC, use . XSetFillStyle XSetFillStyle Display *display GC gc int fill_style display Specifies the connection to the X server. gc Specifies the GC. fill_style Specifies the fill-style you want to set for the specified GC. You can pass FillSolid, FillTiled, FillStippled, or FillOpaqueStippled. can generate BadAlloc, BadGC, and BadValue errors. To set the fill-rule of a given GC, use . XSetFillRule XSetFillRule Display *display GC gc int fill_rule display Specifies the connection to the X server. gc Specifies the GC. fill_rule Specifies the fill-rule you want to set for the specified GC. You can pass EvenOddRule or WindingRule. can generate BadAlloc, BadGC, and BadValue errors. Setting the Fill Tile and Stipple Some displays have hardware support for tiling or stippling with patterns of specific sizes. Tiling and stippling operations that restrict themselves to those specific sizes run much faster than such operations with arbitrary size patterns. Xlib provides functions that you can use to determine the best size, tile, or stipple for the display as well as to set the tile or stipple shape and the tile or stipple origin. To obtain the best size of a tile, stipple, or cursor, use . XQueryBestSize Status XQueryBestSize Display *display int class Drawable which_screen unsigned int width unsigned int height unsigned int *width_return unsigned int *height_return display Specifies the connection to the X server. class Specifies the class that you are interested in. You can pass TileShape, CursorShape, or StippleShape. which_screen Specifies any drawable on the screen. width height Specify the width and height. width_return height_return Return the width and height of the object best supported by the display hardware. The function returns the best or closest size to the specified size. For CursorShape, this is the largest size that can be fully displayed on the screen specified by which_screen. For TileShape, this is the size that can be tiled fastest. For StippleShape, this is the size that can be stippled fastest. For CursorShape, the drawable indicates the desired screen. For TileShape and StippleShape, the drawable indicates the screen and possibly the window class and depth. An InputOnly window cannot be used as the drawable for TileShape or StippleShape, or a BadMatch error results. can generate BadDrawable, BadMatch, and BadValue errors. To obtain the best fill tile shape, use . XQueryBestTile Status XQueryBestTile Display *display Drawable which_screen unsigned int width unsigned int height unsigned int *width_return unsigned int *height_return display Specifies the connection to the X server. which_screen Specifies any drawable on the screen. width height Specify the width and height. width_return height_return Return the width and height of the object best supported by the display hardware. The function returns the best or closest size, that is, the size that can be tiled fastest on the screen specified by which_screen. The drawable indicates the screen and possibly the window class and depth. If an InputOnly window is used as the drawable, a BadMatch error results. can generate BadDrawable and BadMatch errors. To obtain the best stipple shape, use . XQueryBestStipple Status XQueryBestStipple Display *display Drawable which_screen unsigned int width unsigned int height unsigned int *width_return unsigned int *height_return display Specifies the connection to the X server. which_screen Specifies any drawable on the screen. width height Specify the width and height. width_return height_return Return the width and height of the object best supported by the display hardware. The function returns the best or closest size, that is, the size that can be stippled fastest on the screen specified by which_screen. The drawable indicates the screen and possibly the window class and depth. If an InputOnly window is used as the drawable, a BadMatch error results. can generate BadDrawable and BadMatch errors. To set the fill tile of a given GC, use . XSetTile XSetTile Display *display GC gc Pixmap tile display Specifies the connection to the X server. gc Specifies the GC. tile Specifies the fill tile you want to set for the specified GC. The tile and GC must have the same depth, or a BadMatch error results. can generate BadAlloc, BadGC, BadMatch, and BadPixmap errors. To set the stipple of a given GC, use . XSetStipple XSetStipple Display *display GC gc Pixmap stipple display Specifies the connection to the X server. gc Specifies the GC. stipple Specifies the stipple you want to set for the specified GC. The stipple must have a depth of one, or a BadMatch error results. can generate BadAlloc, BadGC, BadMatch, and BadPixmap errors. To set the tile or stipple origin of a given GC, use . XSetTSOrigin XSetTSOrigin Display *display GC gc intts_x_origin, ts_y_origin display Specifies the connection to the X server. gc Specifies the GC. ts_x_origin ts_y_origin Specify the x and y coordinates of the tile and stipple origin. When graphics requests call for tiling or stippling, the parent's origin will be interpreted relative to whatever destination drawable is specified in the graphics request. can generate BadAlloc and BadGC errors. Setting the Current Font To set the current font of a given GC, use . XSetFont XSetFont Display *display GC gc Font font display Specifies the connection to the X server. gc Specifies the GC. font Specifies the font. can generate BadAlloc, BadFont, and BadGC errors. Setting the Clip Region Xlib provides functions that you can use to set the clip-origin and the clip-mask or set the clip-mask to a list of rectangles. To set the clip-origin of a given GC, use . XSetClipOrigin XSetClipOrigin Display *display GC gc intclip_x_origin, clip_y_origin display Specifies the connection to the X server. gc Specifies the GC. clip_x_origin clip_y_origin Specify the x and y coordinates of the clip-mask origin. The clip-mask origin is interpreted relative to the origin of whatever destination drawable is specified in the graphics request. can generate BadAlloc and BadGC errors. To set the clip-mask of a given GC to the specified pixmap, use . XSetClipMask XSetClipMask Display *display GC gc Pixmap pixmap display Specifies the connection to the X server. gc Specifies the GC. pixmap Specifies the pixmap or None. If the clip-mask is set to None, the pixels are always drawn (regardless of the clip-origin). can generate BadAlloc, BadGC, BadMatch, and BadPixmap errors. To set the clip-mask of a given GC to the specified list of rectangles, use . XSetClipRectangles XSetClipRectangles Display *display GC gc intclip_x_origin, clip_y_origin XRectangle rectangles[] int n int ordering display Specifies the connection to the X server. gc Specifies the GC. clip_x_origin clip_y_origin Specify the x and y coordinates of the clip-mask origin. rectangles Specifies an array of rectangles that define the clip-mask. n Specifies the number of rectangles. ordering Specifies the ordering relations on the rectangles. You can pass Unsorted, YSorted, YXSorted, or YXBanded. The function changes the clip-mask in the specified GC to the specified list of rectangles and sets the clip origin. The output is clipped to remain contained within the rectangles. The clip-origin is interpreted relative to the origin of whatever destination drawable is specified in a graphics request. The rectangle coordinates are interpreted relative to the clip-origin. The rectangles should be nonintersecting, or the graphics results will be undefined. Note that the list of rectangles can be empty, which effectively disables output. This is the opposite of passing None as the clip-mask in , , and . If known by the client, ordering relations on the rectangles can be specified with the ordering argument. This may provide faster operation by the server. If an incorrect ordering is specified, the X server may generate a BadMatch error, but it is not required to do so. If no error is generated, the graphics results are undefined. Unsorted means the rectangles are in arbitrary order. YSorted means that the rectangles are nondecreasing in their Y origin. YXSorted additionally constrains YSorted order in that all rectangles with an equal Y origin are nondecreasing in their X origin. YXBanded additionally constrains YXSorted by requiring that, for every possible Y scanline, all rectangles that include that scanline have an identical Y origins and Y extents. can generate BadAlloc, BadGC, BadMatch, and BadValue errors. Xlib provides a set of basic functions for performing region arithmetic. For information about these functions, see section 16.5. Setting the Arc Mode, Subwindow Mode, and Graphics Exposure To set the arc mode of a given GC, use . XSetArcMode XSetArcMode Display *display GC gc int arc_mode display Specifies the connection to the X server. gc Specifies the GC. arc_mode Specifies the arc mode. You can pass ArcChord or ArcPieSlice. can generate BadAlloc, BadGC, and BadValue errors. To set the subwindow mode of a given GC, use . XSetSubwindowMode XSetSubwindowMode Display *display GC gc int subwindow_mode display Specifies the connection to the X server. gc Specifies the GC. subwindow_mode Specifies the subwindow mode. You can pass ClipByChildren or IncludeInferiors. can generate BadAlloc, BadGC, and BadValue errors. To set the graphics-exposures flag of a given GC, use . XSetGraphicsExposures XSetGraphicsExposures Display *display GC gc Bool graphics_exposures display Specifies the connection to the X server. gc Specifies the GC. graphics_exposures Specifies a Boolean value that indicates whether you want GraphicsExpose and NoExpose events to be reported when calling and with this GC. can generate BadAlloc, BadGC, and BadValue errors. es the GC. pixmap libX11-1.6.3/specs/libX11/CH09.xml000064401431060000012000001556111247741723500164310ustar00alancstaff00002660200006 Window and Session Manager Functions Although it is difficult to categorize functions as exclusively for an application, a window manager, or a session manager, the functions in this chapter are most often used by window managers and session managers. It is not expected that these functions will be used by most application programs. Xlib provides management functions to: Change the parent of a window Control the lifetime of a window Manage installed colormaps Set and retrieve the font search path Grab the server Kill a client Control the screen saver Control host access Changing the Parent of a Window To change a window's parent to another window on the same screen, use . There is no way to move a window between screens. XReparentWindow XReparentWindow Display *display Window w Window parent int x int y display Specifies the connection to the X server. w Specifies the window. parent Specifies the parent window. x y Specify the x and y coordinates of the position in the new parent window. If the specified window is mapped, automatically performs an UnmapWindow request on it, removes it from its current position in the hierarchy, and inserts it as the child of the specified parent. The window is placed in the stacking order on top with respect to sibling windows. After reparenting the specified window, causes the X server to generate a ReparentNotify event. The override_redirect member returned in this event is set to the window's corresponding attribute. Window manager clients usually should ignore this window if this member is set to True. Finally, if the specified window was originally mapped, the X server automatically performs a MapWindow request on it. The X server performs normal exposure processing on formerly obscured windows. The X server might not generate Expose events for regions from the initial UnmapWindow request that are immediately obscured by the final MapWindow request. A BadMatch error results if: The new parent window is not on the same screen as the old parent window. The new parent window is the specified window or an inferior of the specified window. The new parent is InputOnly, and the window is not. The specified window has a ParentRelative background, and the new parent window is not the same depth as the specified window. can generate BadMatch and BadWindow errors. Controlling the Lifetime of a Window The save-set of a client is a list of other clients' windows that, if they are inferiors of one of the client's windows at connection close, should not be destroyed and should be remapped if they are unmapped. For further information about close-connection processing, see section 2.6. To allow an application's window to survive when a window manager that has reparented a window fails, Xlib provides the save-set functions that you can use to control the longevity of subwindows that are normally destroyed when the parent is destroyed. For example, a window manager that wants to add decoration to a window by adding a frame might reparent an application's window. When the frame is destroyed, the application's window should not be destroyed but be returned to its previous place in the window hierarchy. The X server automatically removes windows from the save-set when they are destroyed. To add or remove a window from the client's save-set, use . XChangeSaveSet XChangeSaveSet Display *display Window w int change_mode display Specifies the connection to the X server. w Specifies the window that you want to add to or delete from the client's save-set. change_mode Specifies the mode. You can pass SetModeInsert or SetModeDelete. Depending on the specified mode, either inserts or deletes the specified window from the client's save-set. The specified window must have been created by some other client, or a BadMatch error results. can generate BadMatch, BadValue, and BadWindow errors. To add a window to the client's save-set, use . XAddToSaveSet XAddToSaveSet Display *display Window w display Specifies the connection to the X server. w Specifies the window that you want to add to the client's save-set. The function adds the specified window to the client's save-set. The specified window must have been created by some other client, or a BadMatch error results. can generate BadMatch and BadWindow errors. To remove a window from the client's save-set, use . XRemoveFromSaveSet XRemoveFromSaveSet Display *display Window w display Specifies the connection to the X server. w Specifies the window that you want to delete from the client's save-set. The function removes the specified window from the client's save-set. The specified window must have been created by some other client, or a BadMatch error results. can generate BadMatch and BadWindow errors. Managing Installed Colormaps The X server maintains a list of installed colormaps. Windows using these colormaps are guaranteed to display with correct colors; windows using other colormaps may or may not display with correct colors. Xlib provides functions that you can use to install a colormap, uninstall a colormap, and obtain a list of installed colormaps. At any time, there is a subset of the installed maps that is viewed as an ordered list and is called the required list. The length of the required list is at most M, where M is the minimum number of installed colormaps specified for the screen in the connection setup. The required list is maintained as follows. When a colormap is specified to , it is added to the head of the list; the list is truncated at the tail, if necessary, to keep its length to at most M. When a colormap is specified to and it is in the required list, it is removed from the list. A colormap is not added to the required list when it is implicitly installed by the X server, and the X server cannot implicitly uninstall a colormap that is in the required list. To install a colormap, use . XInstallColormap XInstallColormap Display *display Colormap colormap display Specifies the connection to the X server. colormap Specifies the colormap. The function installs the specified colormap for its associated screen. All windows associated with this colormap immediately display with true colors. You associated the windows with this colormap when you created them by calling , , , or . If the specified colormap is not already an installed colormap, the X server generates a ColormapNotify event on each window that has that colormap. In addition, for every other colormap that is installed as a result of a call to , the X server generates a ColormapNotify event on each window that has that colormap. can generate a BadColor error. To uninstall a colormap, use . XUninstallColormap XUninstallColormap Display *display Colormap colormap display Specifies the connection to the X server. colormap Specifies the colormap. The function removes the specified colormap from the required list for its screen. As a result, the specified colormap might be uninstalled, and the X server might implicitly install or uninstall additional colormaps. Which colormaps get installed or uninstalled is server dependent except that the required list must remain installed. If the specified colormap becomes uninstalled, the X server generates a ColormapNotify event on each window that has that colormap. In addition, for every other colormap that is installed or uninstalled as a result of a call to , the X server generates a ColormapNotify event on each window that has that colormap. can generate a BadColor error. To obtain a list of the currently installed colormaps for a given screen, use . XListInstalledColormaps Colormap *XListInstalledColormaps Display *display Window w int *num_return display Specifies the connection to the X server. w Specifies the window that determines the screen. num_return Returns the number of currently installed colormaps. The function returns a list of the currently installed colormaps for the screen of the specified window. The order of the colormaps in the list is not significant and is no explicit indication of the required list. When the allocated list is no longer needed, free it by using . can generate a BadWindow error. Setting and Retrieving the Font Search Path The set of fonts available from a server depends on a font search path. Xlib provides functions to set and retrieve the search path for a server. To set the font search path, use . XSetFontPath XSetFontPath Display *display char **directories int ndirs display Specifies the connection to the X server. directories Specifies the directory path used to look for a font. Setting the path to the empty list restores the default path defined for the X server. ndirs Specifies the number of directories in the path. The function defines the directory search path for font lookup. There is only one search path per X server, not one per client. The encoding and interpretation of the strings are implementation-dependent, but typically they specify directories or font servers to be searched in the order listed. An X server is permitted to cache font information internally; for example, it might cache an entire font from a file and not check on subsequent opens of that font to see if the underlying font file has changed. However, when the font path is changed, the X server is guaranteed to flush all cached information about fonts for which there currently are no explicit resource IDs allocated. The meaning of an error from this request is implementation-dependent. can generate a BadValue error. To get the current font search path, use . XGetFontPath char **XGetFontPath Display *display int *npaths_return display Specifies the connection to the X server. npaths_return Returns the number of strings in the font path array. The function allocates and returns an array of strings containing the search path. The contents of these strings are implementation-dependent and are not intended to be interpreted by client applications. When it is no longer needed, the data in the font path should be freed by using . To free data returned by , use . XFreeFontPath XFreeFontPath char **list list Specifies the array of strings you want to free. The function frees the data allocated by . Grabbing the Server Xlib provides functions that you can use to grab and ungrab the server. These functions can be used to control processing of output on other connections by the window system server. While the server is grabbed, no processing of requests or close downs on any other connection will occur. A client closing its connection automatically ungrabs the server. Menus Windowmanagers Although grabbing the server is highly discouraged, it is sometimes necessary. To grab the server, use . Servergrabbing Grabbingserver XGrabServer XGrabServer Display *display display Specifies the connection to the X server. The function disables processing of requests and close downs on all other connections than the one this request arrived on. You should not grab the X server any more than is absolutely necessary. To ungrab the server, use . XUngrabServer XUngrabServer Display *display display Specifies the connection to the X server. The function restarts processing of requests and close downs on other connections. You should avoid grabbing the X server as much as possible. Killing Clients Xlib provides a function to cause the connection to a client to be closed and its resources to be destroyed. To destroy a client, use . XKillClient XKillClient Display *display XID resource display Specifies the connection to the X server. resource Specifies any resource associated with the client that you want to destroy or AllTemporary. The function forces a close down of the client that created the resource if a valid resource is specified. If the client has already terminated in either RetainPermanent or RetainTemporary mode, all of the client's resources are destroyed. If AllTemporary is specified, the resources of all clients that have terminated in RetainTemporary are destroyed (see section 2.5). This permits implementation of window manager facilities that aid debugging. A client can set its close-down mode to RetainTemporary. If the client then crashes, its windows would not be destroyed. The programmer can then inspect the application's window tree and use the window manager to destroy the zombie windows. can generate a BadValue error. Controlling the Screen Saver Xlib provides functions that you can use to set or reset the mode of the screen saver, to force or activate the screen saver, or to obtain the current screen saver values. To set the screen saver mode, use . XSetScreenSaver XSetScreenSaver Display *display inttimeout, interval int prefer_blanking int allow_exposures display Specifies the connection to the X server. timeout Specifies the timeout, in seconds, until the screen saver turns on. interval Specifies the interval, in seconds, between screen saver alterations. prefer_blanking Specifies how to enable screen blanking. You can pass DontPreferBlanking, PreferBlanking, or DefaultBlanking. allow_exposures Specifies the screen save control values. You can pass DontAllowExposures, AllowExposures, or DefaultExposures. Timeout and interval are specified in seconds. A timeout of 0 disables the screen saver (but an activated screen saver is not deactivated), and a timeout of −1 restores the default. Other negative values generate a BadValue error. If the timeout value is nonzero, enables the screen saver. An interval of 0 disables the random-pattern motion. If no input from devices (keyboard, mouse, and so on) is generated for the specified number of timeout seconds once the screen saver is enabled, the screen saver is activated. For each screen, if blanking is preferred and the hardware supports video blanking, the screen simply goes blank. Otherwise, if either exposures are allowed or the screen can be regenerated without sending Expose events to clients, the screen is tiled with the root window background tile randomly re-origined each interval seconds. Otherwise, the screens' state do not change, and the screen saver is not activated. The screen saver is deactivated, and all screen states are restored at the next keyboard or pointer input or at the next call to with mode ScreenSaverReset. If the server-dependent screen saver method supports periodic change, the interval argument serves as a hint about how long the change period should be, and zero hints that no periodic change should be made. Examples of ways to change the screen include scrambling the colormap periodically, moving an icon image around the screen periodically, or tiling the screen with the root window background tile, randomly re-origined periodically. can generate a BadValue error. To force the screen saver on or off, use . XForceScreenSaver XForceScreenSaver Display *display int mode display Specifies the connection to the X server. mode Specifies the mode that is to be applied. You can pass ScreenSaverActive or ScreenSaverReset. If the specified mode is ScreenSaverActive and the screen saver currently is deactivated, activates the screen saver even if the screen saver had been disabled with a timeout of zero. If the specified mode is ScreenSaverReset and the screen saver currently is enabled, deactivates the screen saver if it was activated, and the activation timer is reset to its initial state (as if device input had been received). can generate a BadValue error. To activate the screen saver, use . XActivateScreenSaver XActivateScreenSaver Display *display display Specifies the connection to the X server. To reset the screen saver, use . XResetScreenSaver XResetScreenSaver Display *display display Specifies the connection to the X server. To get the current screen saver values, use . XGetScreenSaver XGetScreenSaver Display *display int*timeout_return, *interval_return int *prefer_blanking_return int *allow_exposures_return display Specifies the connection to the X server. timeout_return Returns the timeout, in seconds, until the screen saver turns on. interval_return Returns the interval between screen saver invocations. prefer_blanking_return Returns the current screen blanking preference (DontPreferBlanking, PreferBlanking, or DefaultBlanking). allow_exposures_return Returns the current screen save control value (DontAllowExposures, AllowExposures, or DefaultExposures). Controlling Host Access This section discusses how to: Add, get, or remove hosts from the access control list Change, enable, or disable access Access control list Authentication X does not provide any protection on a per-window basis. If you find out the resource ID of a resource, you can manipulate it. To provide some minimal level of protection, however, connections are permitted only from machines you trust. This is adequate on single-user workstations but obviously breaks down on timesharing machines. Although provisions exist in the X protocol for proper connection authentication, the lack of a standard authentication server leaves host-level access control as the only common mechanism. Default Protection The initial set of hosts allowed to open connections typically consists of: The host the window system is running on. On POSIX-conformant systems, each host listed in the /etc/X?.hosts file. The ? indicates the number of the display. Files/etc/X?.hosts This file should consist of host names separated by newlines. DECnet nodes must terminate in :: to distinguish them from Internet hosts. If a host is not in the access control list when the access control mechanism is enabled and if the host attempts to establish a connection, the server refuses the connection. To change the access list, the client must reside on the same host as the server and/or must have been granted permission in the initial authorization at connection setup. Servers also can implement other access control policies in addition to or in place of this host access facility. For further information about other access control implementations, see X Window System Protocol. Adding, Getting, or Removing Hosts Xlib provides functions that you can use to add, get, or remove hosts from the access control list. All the host access control functions use the XHostAddress structure, which contains: XHostAddress typedef struct { int family; /* for example FamilyInternet */ int length; /* length of address, in bytes */ char *address; /* pointer to where to find the address */ } XHostAddress; The family member specifies which protocol address family to use (for example, TCP/IP or DECnet) and can be FamilyInternet, FamilyInternet6, FamilyServerInterpreted, FamilyDECnet, or FamilyChaos. The length member specifies the length of the address in bytes. The address member specifies a pointer to the address. For TCP/IP, the address should be in network byte order. For IP version 4 addresses, the family should be FamilyInternet and the length should be 4 bytes. For IP version 6 addresses, the family should be FamilyInternet6 and the length should be 16 bytes. For the DECnet family, the server performs no automatic swapping on the address bytes. A Phase IV address is 2 bytes long. The first byte contains the least significant 8 bits of the node number. The second byte contains the most significant 2 bits of the node number in the least significant 2 bits of the byte and the area in the most significant 6 bits of the byte. For the ServerInterpreted family, the length is ignored and the address member is a pointer to a XServerInterpretedAddress structure, which contains: XServerInterpretedAddress typedef struct { int typelength; /* length of type string, in bytes */ int valuelength; /* length of value string, in bytes */ char *type; /* pointer to where to find the type string */ char *value; /* pointer to where to find the address */ } XServerInterpretedAddress; The type and value members point to strings representing the type and value of the server interpreted entry. These strings may not be NULL-terminated so care should be used when accessing them. The typelength and valuelength members specify the length in byte of the type and value strings. To add a single host, use . XAddHost XAddHost Display *display XHostAddress *host display Specifies the connection to the X server. host Specifies the host that is to be added. The function adds the specified host to the access control list for that display. The server must be on the same host as the client issuing the command, or a BadAccess error results. can generate BadAccess and BadValue errors. To add multiple hosts at one time, use . XAddHosts XAddHosts Display *display XHostAddress *hosts int num_hosts display Specifies the connection to the X server. hosts Specifies each host that is to be added. num_hosts Specifies the number of hosts. The function adds each specified host to the access control list for that display. The server must be on the same host as the client issuing the command, or a BadAccess error results. can generate BadAccess and BadValue errors. To obtain a host list, use . XListHosts XHostAddress *XListHosts Display *display int *nhosts_return Bool *state_return display Specifies the connection to the X server. nhosts_return Returns the number of hosts currently in the access control list. state_return Returns the state of the access control. The function returns the current access control list as well as whether the use of the list at connection setup was enabled or disabled. allows a program to find out what machines can make connections. It also returns a pointer to a list of host structures that were allocated by the function. When no longer needed, this memory should be freed by calling . To remove a single host, use . XRemoveHost XRemoveHost Display *display XHostAddress *host display Specifies the connection to the X server. host Specifies the host that is to be removed. The function removes the specified host from the access control list for that display. The server must be on the same host as the client process, or a BadAccess error results. If you remove your machine from the access list, you can no longer connect to that server, and this operation cannot be reversed unless you reset the server. can generate BadAccess and BadValue errors. To remove multiple hosts at one time, use . XRemoveHosts XRemoveHosts Display *display XHostAddress *hosts int num_hosts display Specifies the connection to the X server. hosts Specifies each host that is to be removed. num_hosts Specifies the number of hosts. The function removes each specified host from the access control list for that display. The X server must be on the same host as the client process, or a BadAccess error results. If you remove your machine from the access list, you can no longer connect to that server, and this operation cannot be reversed unless you reset the server. can generate BadAccess and BadValue errors. Changing, Enabling, or Disabling Access Control Xlib provides functions that you can use to enable, disable, or change access control. For these functions to execute successfully, the client application must reside on the same host as the X server and/or have been given permission in the initial authorization at connection setup. To change access control, use . XSetAccessControl XSetAccessControl Display *display int mode display Specifies the connection to the X server. mode Specifies the mode. You can pass EnableAccess or DisableAccess. The function either enables or disables the use of the access control list at each connection setup. can generate BadAccess and BadValue errors. To enable access control, use . XEnableAccessControl XEnableAccessControl Display *display display Specifies the connection to the X server. The function enables the use of the access control list at each connection setup. can generate a BadAccess error. To disable access control, use . XDisableAccessControl XDisableAccessControl Display *display display Specifies the connection to the X server. The function disables the use of the access control list at each connection setup. can generate a BadAccess error. Specifies the connection to the X server. Acknowledgments The design and implementation of the first 10 versions of X were primarily the work of three individuals: Robert Scheifler of the MIT Laboratory for Computer Science and Jim Gettys of Digital Equipment Corporation and Ron Newman of MIT, both at MIT Project Athena. X version 11, however, is the result of the efforts of dozens of individuals at almost as many locations and organizations. At the risk of offending some of the players by exclusion, we would like to acknowledge some of the people who deserve special credit and recognition for their work on Xlib. Our apologies to anyone inadvertently overlooked. Release 1 Our thanks does to Ron Newman (MIT Project Athena), who contributed substantially to the design and implementation of the Version 11 Xlib interface. Our thanks also goes to Ralph Swick (Project Athena and Digital) who kept it all together for us during the early releases. He handled literally thousands of requests from people everywhere and saved the sanity of at least one of us. His calm good cheer was a foundation on which we could build. Our thanks also goes to Todd Brunhoff (Tektronix) who was ``loaned'' to Project Athena at exactly the right moment to provide very capable and much-needed assistance during the alpha and beta releases. He was responsible for the successful integration of sources from multiple sites; we would not have had a release without him. Our thanks also goes to Al Mento and Al Wojtas of Digital's ULTRIX Documentation Group. With good humor and cheer, they took a rough draft and made it an infinitely better and more useful document. The work they have done will help many everywhere. We also would like to thank Hal Murray (Digital SRC) and Peter George (Digital VMS) who contributed much by proofreading the early drafts of this document. Our thanks also goes to Jeff Dike (Digital UEG), Tom Benson, Jackie Granfield, and Vince Orgovan (Digital VMS) who helped with the library utilities implementation; to Hania Gajewska (Digital UEG-WSL) who, along with Ellis Cohen (CMU and Siemens), was instrumental in the semantic design of the window manager properties; and to Dave Rosenthal (Sun Microsystems) who also contributed to the protocol and provided the sample generic color frame buffer device-dependent code. The alpha and beta test participants deserve special recognition and thanks as well. It is significant that the bug reports (and many fixes) during alpha and beta test came almost exclusively from just a few of the alpha testers, mostly hardware vendors working on product implementations of X. The continued public contribution of vendors and universities is certainly to the benefit of the entire X community. Our special thanks must go to Sam Fuller, Vice-President of Corporate Research at Digital, who has remained committed to the widest public availability of X and who made it possible to greatly supplement MIT's resources with the Digital staff in order to make version 11 a reality. Many of the people mentioned here are part of the Western Software Laboratory (Digital UEG-WSL) of the ULTRIX Engineering group and work for Smokey Wallace, who has been vital to the project's success. Others not mentioned here worked on the toolkit and are acknowledged in the X Toolkit documentation. Of course, we must particularly thank Paul Asente, formerly of Stanford University and now of Digital UEG-WSL, who wrote W, the predecessor to X, and Brian Reid, formerly of Stanford University and now of Digital WRL, who had much to do with W's design. Finally, our thanks goes to MIT, Digital Equipment Corporation, and IBM for providing the environment where it could happen. Release 4 Our thanks go to Jim Fulton (MIT X Consortium) for designing and specifying the new Xlib functions for Inter-Client Communication Conventions (ICCCM) support. We also thank Al Mento of Digital for his continued effort in maintaining this document and Jim Fulton and Donna Converse (MIT X Consortium) for their much-appreciated efforts in reviewing the changes. Release 5 The principal authors of the Input Method facilities are Vania Joloboff (Open Software Foundation) and Bill McMahon (Hewlett-Packard). The principal author of the rest of the internationalization facilities is Glenn Widener (Tektronix). Our thanks to them for keeping their sense of humor through a long and sometimes difficult design process. Although the words and much of the design are due to them, many others have contributed substantially to the design and implementation. Tom McFarland (HP) and Frank Rojas (IBM) deserve particular recognition for their contributions. Other contributors were: Tim Anderson (Motorola), Alka Badshah (OSF), Gabe Beged-Dov (HP), Chih-Chung Ko (III), Vera Cheng (III), Michael Collins (Digital), Walt Daniels (IBM), Noritoshi Demizu (OMRON), Keisuke Fukui (Fujitsu), Hitoshoi Fukumoto (Nihon Sun), Tim Greenwood (Digital), John Harvey (IBM), Hideki Hiura (Sun), Fred Horman (AT&T), Norikazu Kaiya (Fujitsu), Yuji Kamata (IBM), Yutaka Kataoka (Waseda University), Ranee Khubchandani (Sun), Akira Kon (NEC), Hiroshi Kuribayashi (OMRON), Teruhiko Kurosaka (Sun), Seiji Kuwari (OMRON), Sandra Martin (OSF), Narita Masahiko (Fujitsu), Masato Morisaki (NTT), Nelson Ng (Sun), Takashi Nishimura (NTT America), Makato Nishino (IBM), Akira Ohsone (Nihon Sun), Chris Peterson (MIT), Sam Shteingart (AT&T), Manish Sheth (AT&T), Muneiyoshi Suzuki (NTT), Cori Mehring (Digital), Shoji Sugiyama (IBM), and Eiji Tosa (IBM). We are deeply indebted to Tatsuya Kato (NTT), Hiroshi Kuribayashi (OMRON), Seiji Kuwari (OMRON), Muneiyoshi Suzuki (NTT), and Li Yuhong (OMRON) for producing one of the first complete sample implementation of the internationalization facilities, and Hiromu Inukai (Nihon Sun), Takashi Fujiwara (Fujitsu), Hideki Hiura (Sun), Yasuhiro Kawai (Oki Technosystems Laboratory), Kazunori Nishihara (Fuji Xerox), Masaki Takeuchi (Sony), Katsuhisa Yano (Toshiba), Makoto Wakamatsu (Sony Corporation) for producing the another complete sample implementation of the internationalization facilities. The principal authors (design and implementation) of the Xcms color management facilities are Al Tabayoyon (Tektronix) and Chuck Adams (Tektronix). Joann Taylor (Tektronix), Bob Toole (Tektronix), and Keith Packard (MIT X Consortium) also contributed significantly to the design. Others who contributed are: Harold Boll (Kodak), Ken Bronstein (HP), Nancy Cam (SGI), Donna Converse (MIT X Consortium), Elias Israel (ISC), Deron Johnson (Sun), Jim King (Adobe), Ricardo Motta (HP), Chuck Peek (IBM), Wil Plouffe (IBM), Dave Sternlicht (MIT X Consortium), Kumar Talluri (AT&T), and Richard Verberg (IBM). We also once again thank Al Mento of Digital for his work in formatting and reformatting text for this manual, and for producing man pages. Thanks also to Clive Feather (IXI) for proof-reading and finding a number of small errors. Release 6 Stephen Gildea (X Consortium) authored the threads support. Ovais Ashraf (Sun) and Greg Olsen (Sun) contributed substantially by testing the facilities and reporting bugs in a timely fashion. The principal authors of the internationalization facilities, including Input and Output Methods, are Hideki Hiura (SunSoft) and Shigeru Yamada (Fujitsu OSSI). Although the words and much of the design are due to them, many others have contributed substantially to the design and implementation. They are: Takashi Fujiwara (Fujitsu), Yoshio Horiuchi (IBM), Makoto Inada (Digital), Hiromu Inukai (Nihon SunSoft), Song JaeKyung (KAIST), Franky Ling (Digital), Tom McFarland (HP), Hiroyuki Miyamoto (Digital), Masahiko Narita (Fujitsu), Frank Rojas (IBM), Hidetoshi Tajima (HP), Masaki Takeuchi (Sony), Makoto Wakamatsu (Sony), Masaki Wakao (IBM), Katsuhisa Yano(Toshiba) and Jinsoo Yoon (KAIST). The principal producers of the sample implementation of the internationalization facilities are: Jeffrey Bloomfield (Fujitsu OSSI), Takashi Fujiwara (Fujitsu), Hideki Hiura (SunSoft), Yoshio Horiuchi (IBM), Makoto Inada (Digital), Hiromu Inukai (Nihon SunSoft), Song JaeKyung (KAIST), Riki Kawaguchi (Fujitsu), Franky Ling (Digital), Hiroyuki Miyamoto (Digital), Hidetoshi Tajima (HP), Toshimitsu Terazono (Fujitsu), Makoto Wakamatsu (Sony), Masaki Wakao (IBM), Shigeru Yamada (Fujitsu OSSI) and Katsuhisa Yano (Toshiba). The coordinators of the integration, testing, and release of this implementation of the internationalization facilities are Nobuyuki Tanaka (Sony) and Makoto Wakamatsu (Sony). Others who have contributed to the architectural design or testing of the sample implementation of the internationalization facilities are: Hector Chan (Digital), Michael Kung (IBM), Joseph Kwok (Digital), Hiroyuki Machida (Sony), Nelson Ng (SunSoft), Frank Rojas (IBM), Yoshiyuki Segawa (Fujitsu OSSI), Makiko Shimamura (Fujitsu), Shoji Sugiyama (IBM), Lining Sun (SGI), Masaki Takeuchi (Sony), Jinsoo Yoon (KAIST) and Akiyasu Zen (HP). Jim Gettys Cambridge Research Laboratory Digital Equipment Corporation Robert W. Scheifler Laboratory for Computer Science Massachusetts Institute of Technology Release 7 This document is made available to you in modern formats such as HTML and PDF thanks to the efforts of Matt Dew, who converted the original troff sources to DocBook/XML and edited them into shape; along with Gaetan Nadon and Alan Coopersmith, who set up the formatting machinery in the libX11 builds and performed further editing of the DocBook markup. libX11-1.6.3/specs/XIM/sampleprotocolflow1.svg000064401431060000012000001031011247741723500213610ustar00alancstaff00002660200006 image/svg+xml Key event Key event Xib API IM library XNextEvent XFilterEvent XNextEvent XFilterEvent XNextEvent XFilterEvent(returns False) XmbLookupString XIM_FORWARD_EVENT XIM_FORWARD_EVENTor XIM_COMMIT(synchronous) XIM_FORWARD_EVENT XIM_SYNC XIM_SYNC_REPLY XIM_SET_IC_FOCUS XIM_SYNC_REPLY asa reply of the XIM_FORWARD_EVENT IM Server synchronousrequest processed(The focusedIC is changed) processed processed XSetICFocus XNextEvent Application movesthe focus Pending x="277.69659" y="228.37003">XIM_SET_IC_FOCUS XIM_SYNC_REPLY as image/svg+xml IM Library IM Server Keys in the on-key-list event mask is changedto deselect the event event mask is changedto select the event XIM_FORWARD_EVENT XIM_EXT_SET_EVENT_MASK intercept-event-mask is set XIM_EXT_SET_EVENT_MASK select-event-mask is set event mask is changedto select the event X events directly cometo the IM Server when preediting is turned off event mask is changedto deselect the event cape:window-width="551" inkscape:window-height="483" inkscape:window-x="0" inkscape:window-y="262" inkscape:window-maximized="0" /> image/svg+xml image/svg+xml IM Library IM Server Keys in the on-key-list XIM_EXT_SET_EVENT_MASK intercept-event-mask is set XIM_EXT_SET_EVENT_MASK select-event-mask is set XIM_TRIGGER_NOTIFY the specified eventsare being filtered Keys in the off-key-list the specified eventsare being processed Keys in the on-key-list the specified eventsare being processed Keys in the off-key-list the specified eventsare being discarded XIM_TRIGGER_NOTIFY_REPLY libX11-1.6.3/specs/XIM/Makefile.in000064401431060000012000000607301247741725500167050ustar00alancstaff00002660200006# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # Generate output formats for a single DocBook/XML with/without chapters # # Variables set by the calling Makefile: # shelfdir: the location where the docs/specs are installed. Typically $(docdir) # docbook: the main DocBook/XML file, no chapters, appendix or image files # chapters: all files pulled in by an XInclude statement and images. # # # This makefile is intended for Users Documentation and Functional Specifications. # Do not use for Developer Documentation which is not installed and does not require olink. # Refer to http://www.x.org/releases/X11R7.6/doc/xorg-docs/ReleaseNotes.html#id2584393 # for an explanation on documents classification. # VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@am__append_1 = $(docbook:.xml=.html) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TEXT_TRUE@@HAVE_XMLTO_TRUE@am__append_2 = $(docbook:.xml=.txt) @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@am__append_3 = $(docbook:.xml=.pdf) \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(docbook:.xml=.ps) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@am__append_4 = $(docbook:.xml=.html.db) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(docbook:.xml=.pdf.db) subdir = specs/XIM ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_define_dir.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__dist_shelf_DATA_DIST) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h \ $(top_builddir)/include/X11/XlibConf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__dist_shelf_DATA_DIST = xim.xml dynamicflowsampleseq.svg \ dynamicflow.svg eventflow.svg sampleprotocolflow1.svg \ sampleprotocolflow2.svg staticflowsampleseq.svg staticflow.svg am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(shelfdir)" "$(DESTDIR)$(shelfdir)" DATA = $(dist_shelf_DATA) $(shelf_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/docbook.am DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASE_CFLAGS = @BASE_CFLAGS@ BIGFONT_CFLAGS = @BIGFONT_CFLAGS@ BIGFONT_LIBS = @BIGFONT_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHANGELOG_CMD = @CHANGELOG_CMD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ FOP = @FOP@ GREP = @GREP@ I18N_MODULE_LIBS = @I18N_MODULE_LIBS@ INSTALL = @INSTALL@ INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ KEYSYMDEFS = @KEYSYMDEFS@ LAUNCHD = @LAUNCHD@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LINT = @LINT@ LINTLIB = @LINTLIB@ LINT_FLAGS = @LINT_FLAGS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MALLOC_ZERO_CFLAGS = @MALLOC_ZERO_CFLAGS@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_SUBSTS = @MAN_SUBSTS@ MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RAWCPP = @RAWCPP@ RAWCPPFLAGS = @RAWCPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRICT_CFLAGS = @STRICT_CFLAGS@ STRIP = @STRIP@ STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ TRADITIONALCPPFLAGS = @TRADITIONALCPPFLAGS@ VERSION = @VERSION@ WCHAR32 = @WCHAR32@ X11_CFLAGS = @X11_CFLAGS@ X11_DATADIR = @X11_DATADIR@ X11_EXTRA_DEPS = @X11_EXTRA_DEPS@ X11_LIBDIR = @X11_LIBDIR@ X11_LIBS = @X11_LIBS@ X11_LOCALEDATADIR = @X11_LOCALEDATADIR@ X11_LOCALEDIR = @X11_LOCALEDIR@ X11_LOCALELIBDIR = @X11_LOCALELIBDIR@ XERRORDB = @XERRORDB@ XKBPROTO_REQUIRES = @XKBPROTO_REQUIRES@ XKEYSYMDB = @XKEYSYMDB@ XLOCALEDATADIR = @XLOCALEDATADIR@ XLOCALEDIR = @XLOCALEDIR@ XLOCALELIBDIR = @XLOCALELIBDIR@ XMALLOC_ZERO_CFLAGS = @XMALLOC_ZERO_CFLAGS@ XMLTO = @XMLTO@ XORG_MAN_PAGE = @XORG_MAN_PAGE@ XORG_SGML_PATH = @XORG_SGML_PATH@ XSLTPROC = @XSLTPROC@ XSL_STYLESHEET = @XSL_STYLESHEET@ XTHREADLIB = @XTHREADLIB@ XTHREAD_CFLAGS = @XTHREAD_CFLAGS@ XTMALLOC_ZERO_CFLAGS = @XTMALLOC_ZERO_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ locales = @locales@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # Main DocBook/XML files (DOCTYPE book) @ENABLE_SPECS_TRUE@docbook = xim.xml # Included chapters, appendix, images @ENABLE_SPECS_TRUE@chapters = \ @ENABLE_SPECS_TRUE@ dynamicflowsampleseq.svg \ @ENABLE_SPECS_TRUE@ dynamicflow.svg \ @ENABLE_SPECS_TRUE@ eventflow.svg \ @ENABLE_SPECS_TRUE@ sampleprotocolflow1.svg \ @ENABLE_SPECS_TRUE@ sampleprotocolflow2.svg \ @ENABLE_SPECS_TRUE@ staticflowsampleseq.svg \ @ENABLE_SPECS_TRUE@ staticflow.svg # The location where the DocBook/XML files and their generated formats are installed @ENABLE_SPECS_TRUE@shelfdir = $(docdir)/XIM # DocBook/XML generated output formats to be installed @ENABLE_SPECS_TRUE@shelf_DATA = $(am__append_1) $(am__append_2) \ @ENABLE_SPECS_TRUE@ $(am__append_3) $(am__append_4) # DocBook/XML file with chapters, appendix and images it includes @ENABLE_SPECS_TRUE@dist_shelf_DATA = $(docbook) $(chapters) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_SEARCHPATH_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --searchpath "$(XORG_SGML_PATH)/X11" \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --searchpath "$(abs_top_builddir)" @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_HTML_OLINK_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam target.database.document=$(XORG_SGML_PATH)/X11/dbs/masterdb.html.xml \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam current.docid="$(<:.xml=)" @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_HTML_STYLESHEET_FLAGS = -x $(STYLESHEET_SRCDIR)/xorg-xhtml.xsl @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_HTML_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_SEARCHPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_HTML_STYLESHEET_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_HTML_OLINK_FLAGS) @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_FO_IMAGEPATH_FLAGS = --stringparam img.src.path=$(abs_builddir)/ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_PDF_OLINK_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam target.database.document=$(XORG_SGML_PATH)/X11/dbs/masterdb.pdf.xml \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ --stringparam current.docid="$(<:.xml=)" @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_FO_STYLESHEET_FLAGS = -x $(STYLESHEET_SRCDIR)/xorg-fo.xsl @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@XMLTO_FO_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_SEARCHPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_FO_STYLESHEET_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_FO_IMAGEPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(XMLTO_PDF_OLINK_FLAGS) # Generate documents cross-reference target databases @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_SEARCHPATH_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --path "$(XORG_SGML_PATH)/X11" \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --path "$(abs_top_builddir)" @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_OLINK_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --stringparam targets.filename "$@" \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --stringparam collect.xref.targets "only" \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --stringparam olink.base.uri "$(@:.db=)" @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_HTML_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(XSLT_SEARCHPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(XSLT_OLINK_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --nonet --xinclude \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(STYLESHEET_SRCDIR)/xorg-xhtml.xsl @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@XSLT_PDF_FLAGS = \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(XSLT_SEARCHPATH_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(XSLT_OLINK_FLAGS) \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ --nonet --xinclude \ @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(STYLESHEET_SRCDIR)/xorg-fo.xsl @ENABLE_SPECS_TRUE@CLEANFILES = $(shelf_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/docbook.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign specs/XIM/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign specs/XIM/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/docbook.am $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_shelfDATA: $(dist_shelf_DATA) @$(NORMAL_INSTALL) @list='$(dist_shelf_DATA)'; test -n "$(shelfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(shelfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(shelfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(shelfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(shelfdir)" || exit $$?; \ done uninstall-dist_shelfDATA: @$(NORMAL_UNINSTALL) @list='$(dist_shelf_DATA)'; test -n "$(shelfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(shelfdir)'; $(am__uninstall_files_from_dir) install-shelfDATA: $(shelf_DATA) @$(NORMAL_INSTALL) @list='$(shelf_DATA)'; test -n "$(shelfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(shelfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(shelfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(shelfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(shelfdir)" || exit $$?; \ done uninstall-shelfDATA: @$(NORMAL_UNINSTALL) @list='$(shelf_DATA)'; test -n "$(shelfdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(shelfdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(shelfdir)" "$(DESTDIR)$(shelfdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_shelfDATA install-shelfDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_shelfDATA uninstall-shelfDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-dist_shelfDATA install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-shelfDATA install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-dist_shelfDATA uninstall-shelfDATA .PRECIOUS: Makefile @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@%.html: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_HTML_FLAGS) xhtml-nochunks $< @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TEXT_TRUE@@HAVE_XMLTO_TRUE@%.txt: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TEXT_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_HTML_FLAGS) txt $< @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@%.pdf: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FO_FLAGS) --with-fop pdf $< @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@%.ps: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_FOP_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@ $(AM_V_GEN)$(XMLTO) $(XMLTO_FO_FLAGS) --with-fop ps $< @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@%.html.db: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(AM_V_GEN)$(XSLTPROC) $(XSLT_HTML_FLAGS) $< @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@%.pdf.db: %.xml $(chapters) @ENABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@HAVE_XMLTO_TRUE@@HAVE_XSLTPROC_TRUE@ $(AM_V_GEN)$(XSLTPROC) $(XSLT_PDF_FLAGS) $< # Generate DocBook/XML output formats with or without stylesheets # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ABLE_SPECS_TRUE@@HAVE_STYLESHEETS_TRUE@@libX11-1.6.3/specs/XIM/Makefile.am000064401431060000012000000010221247741723500166570ustar00alancstaff00002660200006 if ENABLE_SPECS # Main DocBook/XML files (DOCTYPE book) docbook = xim.xml # Included chapters, appendix, images chapters = \ dynamicflowsampleseq.svg \ dynamicflow.svg \ eventflow.svg \ sampleprotocolflow1.svg \ sampleprotocolflow2.svg \ staticflowsampleseq.svg \ staticflow.svg # The location where the DocBook/XML files and their generated formats are installed shelfdir = $(docdir)/XIM # Generate DocBook/XML output formats with or without stylesheets include $(top_srcdir)/docbook.am endif ENABLE_SPECS libX11-1.6.3/specs/XIM/sampleprotocolflow2.svg000064401431060000012000001113531247741723500213720ustar00alancstaff00002660200006 image/svg+xml Key event Key event Xib API IM library XNextEvent XFilterEvent XNextEvent XFilterEvent XNextEvent XFilterEvent(returns False) XmbLookupString XSetICFocus XIM_FORWARD_EVENT XIM_FORWARD_EVENTor XIM_COMMIT(synchronous) XIM_FORWARD_EVENT XIM_SYNC XIM_SYNC_REPLY XIM_SET_IC_FOCUS ispend because another sync cycle is startedby XIM_COMMIT XIM_SET_IC_FOCUS XIM_SYNC_REPLY asa reply of the XIM_FORWARD_EVENT XIM_SET_IC_FOCUS XIM_FORWARD_EVENT IM Server synchronousrequest Pending processed(The focusedIC is changed) processed processed processed XSetICFocus Pending untilsync cycle is done Button press causesfocus change Key event XNextEvent XFilterEvent Application movesthe focus Pending sed image/svg+xml IM Library IM Server Keys in the on-key-list XIM_EXT_SET_EVENT_MASK intercept-event-mask is set XIM_EXT_SET_EVENT_MASK select-event-mask is set XIM_FORWARD_EVENT the specified eventsare being filtered Keys in the off-key-list the specified eventsare being processed Keys in the on-key-list the specified eventsare being processed Keys in the off-key-list the specified eventsare being discarded x="62.841949" y="390.33578">Keys in the on-key-list %defs; ]>
The Input Method Protocol X Consortium Standard X Version 11, Release &fullrelvers; Version 1.0 MasahikoNarita FUJITSU Limited. HidekiHiura SunSoft, Inc. 19931994 FUJITSU LIMITED Oracle and/or its affiliates This specifies a protocol between IM library and IM (Input Method) Server for internationalized text input, which is indepedent from any specific language, any specific input method and the transport layer used in communication between the IM library and the IM Server, and uses a client-server model. This protocol allows user to use his/her favorite method for all applications within the stand-along distrubuted environment. Permission to use,copy and distribute this documetation for any purpose and without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. Fujitsu and Sun Microsystems make no representation about the suitability for any purpose of the information in this document. This documentation is provided as is without express implied warranty. Copyright © 1993, 1994 X Consortium 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: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED “AS IS”, 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. Except as contained in this notice, the name of the X Consortium shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from the X Consortium. X Window System is a trademark of The Open Group. Introduction Scope The internationalization in the X Window System Version 11, Release 5 (X11R5) provides a common API which application developers can use to create portable internationalized programs and to adapt them to the requirements of different native languages, local customs, and character string encodings (this is called "localization"). As one of its internationalization mechanisms X11R5 has defined a functional interface for internationalized text input, called XIM (X Input Method). When a client-server model is used with an IM (Input Method) implementation, a protocol must be established between the client and the server. However, the protocol used to interface Input Method Servers (IM Servers) with the Input Method libraries (IM libraries) to which applications are linked was not addressed in X11R5. This led application developers to depend on vendor-specific input methods, decreased the user's choice of available input methods, and made it more difficult for developers to create portable applications. This paper describes the Input Method Protocol developed for X11R6 to resolve the above problems and to address the requirements of existing and future input methods. The Input Method Protocol is independent from the transport layer used in communication between the IM library and the IM Server. Thus, the input method protocol can be built on any inter-process communication mechanism, such as TCP/IP or the X protocol. In addition, the protocol provides for future extensions such as differing input model types. Background Text input is much more simple for some languages than others. English, for instance, uses an alphabet of a manageable size, and input consists of pressing the corresponding key on a keyboard, perhaps in combination with a shift key for capital letters or special characters. Some languages have larger alphabets, or modifiers such as accents, which require the addition of special key combinations in order to enter text. These input methods may require "dead-keys" or "compose-keys" which, when followed by different combinations of key strokes, generate different characters. Text input for ideographic languages is much less simple. In these languages, characters represent actual objects rather than phonetic sounds used in pronouncing a word, and the number of characters in these languages may continue to grow. In Japanese, for instance, most text input methods involve entering characters in a phonetic alphabet, after which the input method searches a dictionary for possible ideographic equivalents (of which there may be many). The input method then presents the candidate characters for the user to choose from. In Japanese, either Kana (phonetic symbols) or Roman letters are typed and then a region is selected for conversion to Kanji. Several Kanji characters may have the same phonetic representation. If that is the case with the string entered, a menu of characters is presented and the user must choose the appropriate one. If no choice is necessary or a preference has been established, the input method does the substitution directly. These complicated input methods must present state information (Status Area), text entry and edit space (Preedit Area), and menu/choice presentations (Auxiliary Area). Much of the protocol between the IM library and the IM Server involves managing these IM areas. Because of the size and complexity of these input methods, and because of how widely they vary from one language or locale to another, they are usually implemented as separate processes which can serve many client processes on the same computer or network. Input Method Styles X11 internationalization support includes the following four types of input method: - on-the-spot: The client application is directed by the IM Server to display all pre-edit data at the site of text insertion. The client registers callbacks invoked by the input method during pre-editing. - off-the-spot: The client application provides display windows for the pre-edit data to the input method which displays into them directly. - over-the-spot: The input method displays pre-edit data in a window which it brings up directly over the text insertion position. - root-window: The input method displays all pre-edit data in a separate area of the screen in a window specific to the input method. Client applications must choose from the available input methods supported by the IM Server and provide the display areas and callbacks required by the input method. Architecture Implementation Model Within the X Window System environment, the following two typical architectural models can be used as an input method's implementation model. - Client/Server model: A separate process, the IM Server, processes input and handles preediting, converting, and committing. The IM library within the application, acting as client to the IM Server, simply receives the committed string from the IM Server. - Library model: All input is handled by the IM library within the application. The event process is closed within the IM library and a separate IM Server process may not be required. Most languages which need complex preediting, such as Asian languages, are implemented using the Client/Server IM model. Other languages which need only dead key or compose key processing, such as European languages, are implemented using the Library model. In this paper, we discuss mainly the Client/Server IM model and the protocol used in communication between the IM library (client) and the IM Server. Structure of IM When the client connects or disconnects to the IM Server, an open or close operation occurs between the client and the IM Server. The IM can be specified at the time of XOpenIM() by setting the locale of the client and a locale modifier. Since the IM remembers the locale at the time of creation XOpenIM() can be called multiple times (with the setting for the locale and the locale modifier changed) to support multiple languages. In addition, the supported IM type can be obtained using XGetIMValues(). The client usually holds multiple input (text) fields. Xlib provides a value type called the "Input Context" (IC) to manage each individual input field. An IC can be created by specifying XIM using XCreateIC(), and it can be destroyed using XDestroyIC(). The IC can specify the type of IM which is supported by XIM for each input field, so each input field can handle a different type of IM. Most importantly information such as the committed string sent from the IM Server to the client, is exchanged based on each IC. Since each IC corresponds to an input field, the focused input field should be announced to the IM Server using XSetICFocus(). (XUnsetICFocus() can also be used to change the focus.) Event Handling Model Existing input methods support either the FrontEnd method, the BackEnd method, or both. This protocol specifically supports the BackEnd method as the default method, but also supports the FrontEnd method as an optional IM Server extension. The difference between the FrontEnd and BackEnd methods is in how events are delivered to the IM Server. (Fig. 1) BackEnd Method In the BackEnd method, client window input events are always delivered to the IM library, which then passes them to the IM Server. Events are handled serially in the order delivered, and therefore there is no synchronization problem between the IM library and the IM Server. Using this method, the IM library forwards all KeyPress and KeyRelease events to the IM Server (as required by the Event Flow Control model described in ) and synchronizes with the IM Server (as described in ). FrontEnd Method In the FrontEnd method, client window input events are delivered by the X server directly to both the IM Server and the IM library. Therefore this method provides much better interactive performance while preediting (particularly in cases such as when the IM Server is running locally on the user's workstation and the client application is running on another workstation over a relatively slow network). However, the FrontEnd model may have synchronization problems between the key events handled in the IM Server and other events handled in the client, and these problems could possibly cause the loss or duplication of key events. For this reason, the BackEnd method is the core method supported, and the FrontEnd method is made available as an extension for performance purposes. (Refer to for more information.) The flow of events Event Flow Control This protocol supports two event flow models for communication between the IM library and the IM Server (Static and Dynamic). Static Event Flow requires that input events always be sent to the IM Server from the client. Dynamic Event Flow, however, requires only that those input events which need to be processed (converted) be sent to the IM Server from the client. For instance, in the case of inputing a combination of ASCII characters and Chinese characters, ASCII characters do not need to be processed in the IM Server, so their key events do not have to be sent to the IM Server. On the other hand, key events necessary for composing Chinese characters must be sent to the IM Server. Thus, by adopting the Dynamic Event Flow, the number of requests among the X Server, the client, and the IM Server is significantly reduced, and the number of context switches is also reduced, resulting in improved performance. The IM Server can send XIM_REGISTER_TRIGGERKEYS message in order to switch the event flow in the Dynamic Event Flow. The protocol for this process is described in . Default Preconnection Convention IM Servers are strongly encouraged to register their symbolic names as the ATOM names into the IM Server directory property, XIM_SERVERS, on the root window of the screen_number 0. This property can contain a list of ATOMs, and the each ATOM represents each possible IM Server. IM Server names are restricted to POSIX Portable Filename Character Set. To discover if the IM Server is active, see if there is an owner for the selection with that atom name. To learn the address of that IM Server, convert the selection target TRANSPORT, which will return a string form of the transport address(es). To learn the supported locales of that IM Server, convert the selection target LOCALES, which will return a set of names of the supported locales in the syntax X/Open defines. The basic semantics to determine the IM Server if there are multiple ATOMs are found in XIM_SERVERS property, is first fit if the IM Server name is not given as a X modifier's category im. The address information retrievable from the TRANSPORT target is a transport-specific name. The preregistered formats for transport-specific names are listed in . Additional transport-specific names may be registered with X Consortium. For environments that lack X connections, or for IM Servers which do not use the X Window System, the preconnection convention with IM Server may be given outside the X Window system (e.g. using a Name Service). Protocol The protocol described below uses the bi-directional synchronous/asynchronous request/reply/error model and is specified using the same conventions outlined in Section 2 of the core X Window System protocol [1]: Basic Requests Packet Format This section describes the requests that may be exchanged between the client and the IM Server. The basic request packet header format is as follows. major-opcode: CARD8 minor-opcode: CARD8 length: CARD16 The MAJOR-OPCODE specifies which core request or extension package this packet represents. If the MAJOR-OPCODE corresponds to a core request, the MINOR-OPCODE contains 8 bits of request-specific data. (If the MINOR-OPCODE is not used, it is 0.) Otherwise, the MAJOR-OPCODE and the MINOR-OPCODE are specified by XIM_QUERY_EXTENSION message. (Refer to 4.7. Query the supported extension protocol list.) The LENGTH field specifies the number of 4 bytes elements following the header. If no additional data is followed by the header, the LENGTH field will be 0. Data Types The following data types are used in the core X IM Server protocol: BITMASK16 CARD16 BITMASK32 CARD32 PADDING FORMAT Where N is some expression, and Pad(N) is the number of bytes needed to round N up to a Pad(N) = (4 - (N mod 4)) mod 4 LPCE 1 A character from the4 X Portable Character Set in Latin Portable Character Encoding STRING 2 n length of string in bytes n LISTofLPCE string p unused, p=Pad(2+n) STR 1 n length of name in bytes n STRING8 name XIMATTR 2 CARD16 attribute ID (*1) 2 CARD16 type of the value (*2) 2 n length of im-attribute n STRING8 im-attribute p unused, p = Pad(2+n) The im-attribute argument specifies XIM values such as XNQueryInputStyle. XICATTR 2 CARD16 attribute ID (*1) 2 CARD16 type of the value (*2) 2 n length of ic-attribute n STRING8 ic-attribute p unused, p = Pad(2+n) (*1) XIMATTR and XICATTR are used during the setup stage and XIMATTRIBUTE and XICATTRIBUTE are used after each attribute ID has been recognized by the IM Server and the IM library. (*2) The value types are defined as follows: values data format #0 Separator of NestedList -----(*3) #1 byte data CARD8 #2 word data CARD16 #3 long data CARD32 #4 char data STRING8 #5 Window CARD32 #10 XIMStyles 2 n number of XIMStyle list 2 unused n CARD32 XIMStyle list #11 XRectangle 2 INT16 X 2 INT16 Y 2 CARD16 width 2 CARD16 height #12 XPoint 2 INT16 X 2 INT16 Y #13 XFontSet 2 n length of Base font name n STRING8 Base font name list p unused, p = Pad(2+n) #15 XIMHotKeyTriggers 4 n number of XIMTRIGGERKEY list (*4) n XIMTRIGGERKEY XIMHotkeyTrigger list n XIMHOTKEYSTATE HotKey processing state #17 XIMStringConversion XIMSTRCONVTEXT #18 XIMPreeditState XIMPREEDITSTATE #19 XIMResetState XIMRESETSTATE #x7fff NestedList ----- (*3) The IC value for the separator of NestedList is defined as follows, #define XNSeparatorofNestedList "separatorofNestedList" , which is registered in X Consortium and cannot be used for any other purpose. (*4) LISTofFOO A Type name of the form LISTof FOO means a counted list of elements of type FOO. The size of the length field may vary (it is not necessarily the same size as a FOO), and in some cases, it may be implicit. XIMTRIGGERKEY 4 CARD32 keysym 4 CARD32 modifier 4 CARD32 modifier mask ENCODINGINFO 2 n length of encoding info n STRING8 encoding info p unused, p=Pad(2+n) 1 CARD8 extension major-opcode 1 CARD8 extension minor-opcode 2 n length of extension name n STRING8 extension name p unused, p = Pad(n) XIMATTRIBUTE 2 CARD16 attribute ID 2 n value length n value p unused, p = Pad(n) XICATTRIBUTE 2 CARD16 attribute ID 2 n value length n value p unused, p = Pad(n) XIMSTRCONVTEXT 2 CARD16 XIMStringConversionFeedback #x0000001 XIMStringConversionLeftEdge #x0000002 XIMStringConversionRightEdge #x0000004 XIMStringConversionTopEdge #x0000008 XIMStringConversionBottomEdge #x0000010 XIMStringConversionConvealed #x0000020 XIMStringConversionWrapped 2 n byte length of the retrieved string n STRING8 retrieved string p unused, p = Pad(n) 2 m byte length of feedback array 2 unused m LISTofXIMSTRCONVFEEDBACK feedback array(*1) (*1) This field is reserved for future use. XIMFEEDBACK 4 CARD32 XIMFeedback #x000001 XIMReverse #x000002 XIMUnderline #x000004 XIMHighlight #x000008 XIMPrimary #x000010 XIMSecondary #x000020 XIMTertiary #x000040 XIMVisibleToForward #x000080 XIMVisibleToBackward #x000100 XIMVisibleCenter XIMHOTKEYSTATE 4 CARD32 XIMHotKeyState #x0000001 XIMHotKeyStateON #x0000002 XIMHotKeyStateOFF XIMPREEDITSTATE 4 CARD32 XIMPreeditState #x0000001 XIMPreeditEnable #x0000002 XIMPreeditDisable XIMRESETSTATE 4 CARD32 XIMResetState #x0000001 XIMInitialState #x0000002 XIMPreserveState Error Notification Both the IM Server and the IM library return XIM_ERROR messages instead of the corresponding reply messages if any errors occur during data processing. At most one error is generated per request. If more than one error condition is encountered in processing a request, the choice of which error is returned is implementation-dependent. XIM_ERROR (IM Server <--> IM library) 2 CARD16 input-method-ID 2 CARD16 input-context-ID 2 BITMASK16 flag (*1) #0000 Both Input-Method-ID and Input-Context-ID are invalid #0001 Input-Method-ID is valid #0002 Input-Context-ID is valid 2 CARD16 Error Code #1 BadAlloc #2 BadStyle #3 BadClientWindow #4 BadFocusWindow #5 BadArea #6 BadSpotLocation #7 BadColormap #8 BadAtom #9 BadPixel #10 BadPixmap #11 BadName #12 BadCursor #13 BadProtocol #14 BadForeground #15 BadBackground #16 LocaleNotSupported #999 BadSomething (*2) 2 n byte length of error detail. 2 CARD16 type of error detail (*3) n STRING8 error detail (*4) p unused, p = Pad(n) (*1) Before an IM is created, both Input-Method-ID and Input-Context-ID are invalid. Before an IC is created, only Input-Method-ID is valid. After that, both of Input-Method-ID and Input-Context-ID are valid. (*2) Unspecific error, for example "language engine died" (*3) This field is reserved for future use. (*4) Vendor defined detail error message Connection Establishment XIM_CONNECT message requests to establish a connection over a mutually-understood virtual stream. XIM_CONNECT (IM library -> IM Server) 1 byte order #x42 MSB first #x6c LSB first 1 unused 2 CARD16 client-major-protocol-version (*1) 2 CARD16 client-minor-protocol-version (*1) 2 CARD16 number of client-auth-protocol-names n LISTofSTRING client-auth-protocol-names (*1) Specify the version of IM Protocol that the client supports. A client must send XIM_CONNECT message as the first message on the connection. The list specifies the names of authentication protocols the sending IM Server is willing to perform. (If the client need not authenticate, the list may be omited.) XIM_AUTH_REQUIRED message is used to send the authentication protocol name and protocol-specific data. XIM_AUTH_REQUIRED (IM library <--> IM Server) 1 CARD8 auth-protocol-index 3 unused 2 n length of authentication data 2 unused n <varies> data p unused, p = Pad(n) The auth-protocol is specified by an index into the list of names given in the XIM_CONNECT or XIM_AUTH_SETUP message. Any protocol-specific data that might be required is also sent. The IM library sends XIM_AUTH_REPLY message as the reply to XIM_AUTH_REQUIRED message, if the IM Server is authenticated. XIM_AUTH_REPLY (IM library -> IM Server) 2 n length of authentication data 2 unused 2 n length of authentication data 2 unused n <varies> data p unused, p = Pad(n) The auth data is specific to the authentication protocol in use. XIM_AUTH_NEXT message requests to send more auth data. XIM_AUTH_NEXT (IM library <--> IM Server) 2 n length of authentication data 2 unused n <varies> data p unused, p = Pad(n) The auth data is specific to the authentication protocol in use. The IM Server sends XIM_AUTH_SETUP message to authenticate the client. XIM_AUTH_SETUP (IM Server -> IM library) 2 CARD16 number of client-auth-protocol-names 2 unused n LISTofSTRING server-auth-protocol-names The list specifies the names of authentication protocols the client is willing to perform. XIM_AUTH_NG message requests to give up the connection. XIM_AUTH_NG (IM library <--> IM Server) The IM Server sends XIM_CONNECT_REPLY message as the reply to XIM_CONNECT or XIM_AUTH_REQUIRED message. XIM_CONNECT_REPLY (IM Server -> IM library) 2 CARD16 server-major-protocol-version (*1) 2 CARD16 server-minor-protocol-version (*1) (*1) Specify the version of IM Protocol that the IM Server supports. This document specifies major version one, minor version zero. Here are the state diagrams for the client and the IM Server. State transitions for the client init_status: Use authorization function -> client_ask Not use authorization function -> client_no_check start: Send XIM_CONNECT If client_ask -> client_wait1 If client_no_check, client-auth-protocol-names may be omited -> client_wait2 client_wait1: Receive XIM_AUTH_REQUIRED -> client_check Receive <other> -> client_NG client_check: If no more auth needed, send XIM_AUTH_REPLY -> client_wait2 If good auth data, send XIM_AUTH_NEXT -> client_wait1 If bad auth data, send XIM_AUTH_NG -> give up on this protocol client_wait2: Receive XIM_CONNECT_REPLY -> connect Receive XIM_AUTH_SETUP -> client_more Receive XIM_AUTH_NEXT -> client_more Receive XIM_AUTH_NG -> give up on this protocol Receive <other> -> client_NG client_more: Send XIM_AUTH_REQUIRED -> client_wait2 client_NG: Send XIM_AUTH_NG -> give up on this protocol State transitions for the IM Server init_status: Use authorization function -> server_ask Not use authorization function -> server_no_check start: Receive XIM_CONNECT -> start2 Receive <other> -> server_NG start2: If client_ask, send XIM_AUTH_REQUIRED -> server_wait1 If client_no_check and server_ask, send XIM_AUTH_SETUP -> server_wait2 If client_no_check and server_no_check, send XIM_CONNECT_REPLY -> connect server_wait1: Receive XIM_AUTH_REPLY -> server2 Receive XIM_AUTH_NEXT -> server_more Receive <other> -> server_NG server_more Send XIM_AUTH_REQUIRED -> server_wait1 server2 If server_ask, send XIM_AUTH_SETUP -> server_wait2 If server_no_check, send XIM_CONNECT_REPLY -> connect server_wait2 Receive XIM_AUTH_REQUIRED -> server_check Receive <other> -> server_NG server_check If no more auth data, send XIM_CONNECT_REPLY -> connect If bad auth data, send XIM_AUTH_NG -> give up on this protocol If good auth data, send XIM_AUTH_NEXT -> server_wait2 server_NG Send XIM_AUTH_NG -> give up on this protocol XIM_DISCONNECT message requests to shutdown the connection over a mutually-understood virtual stream. XIM_DISCONNECT (IM library -> IM Server) XIM_DISCONNECT is a synchronous request. The IM library should wait until it receives either an XIM_DISCONNECT_REPLY packet or an XIM_ERROR packet. XIM_DISCONNECT_REPLY (IM Server -> IM library) XIM_OPEN requests to establish a logical connection between the IM library and the IM Server. XIM_OPEN (IM library -> IM Server) n STR locale name p unused, p = Pad(n) XIM_OPEN is a synchronous request. The IM library should wait until receiving either an XIM_OPEN_REPLY packet or an XIM_ERROR packet. XIM_OPEN_REPLY (IM Server -> IM library) 2 CARD16 input-method-ID 2 n byte length of IM attributes supported n LISTofXIMATTR IM attributes supported 2 m byte length of IC attributes supported 2 CARD16 unused m LISTofXICATTR IC attributes supported XIM_OPEN_REPLY message returns all supported IM and IC attributes in LISTofXIMATTR and LISTofXICATTR. These IM and IC attribute IDs are used to reduce the amount of data which must be transferred via the network. In addition, this indicates to the IM library what kinds of IM/IC attributes can be used in this session, and what types of data will be exchanged. This allows the IM Server provider and application writer to support IM system enhancements with new IM/IC attributes, without modifying Xlib. The IC value for the separator of NestedList must be included in the LISTofXICATTR. XIM_CLOSE message requests to shutdown the logical connection between the IM library and the IM Server. XIM_CLOSE (IM library -> IM Server) 2 CARD16 input-method-ID 2 unused XIM_CLOSE is a synchronous request. The IM library should wait until receiving either an XIM_CLOSE_REPLY packet or an XIM_ERROR packet. XIM_CLOSE_REPLY (IM Server -> IM library) 2 CARD16 input-method-ID 2 unused Event Flow Control An IM Server must send XIM_SET_EVENT_MASK message to the IM library in order for events to be forwarded to the IM Server, since the IM library initially doesn't forward any events to the IM Server. In the protocol, the IM Server will specify masks of X events to be forwarded and which need to be synchronized by the IM library. XIM_SET_EVENT_MASK (IM Server -> IM library) 2 CARD16 input-method-ID 2 CARD16 input-context-ID 4 EVENTMASK forward-event-mask (*1) 4 EVENTMASK synchronous-event-mask (*2) (*1) Specify all the events to be forwarded to the IM Server by the IM library. (*2) Specify the events to be forwarded with synchronous flag on by the IM library. XIM_SET_EVENT_MASK is an asynchronous request. The event masks are valid immediately after they are set until changed by another XIM_SET_EVENT_MASK message. If input-context-ID is set to zero, the default value of the input-method-ID will be changed to the event masks specified in the request. That value will be used for the IC's which have no individual values. Using the Dynamic Event Flow model, an IM Server sends XIM_REGISTER_TRIGGERKEYS message to the IM library before sending XIM_OPEN_REPLY message. Or the IM library may suppose that the IM Server uses the Static Event Flow model. XIM_REGISTER_TRIGGERKEYS (IM Server -> IM library) 2 CARD16 input-method-ID 2 unused 4 n byte length of on-keys n LISTofXIMTRIGGERKEY on-keys list 4 m byte length of off-keys m LISTofXIMTRIGGERKEY off-keys list XIM_REGISTER_TRIGGERKEYS is an asynchronous request. The IM Server notifys the IM library of on-keys and off-keys lists with this message. The IM library notifys the IM Server with XIM_TRIGGER_NOTIFY message that a key event matching either on-keys or off-keys has been occurred. XIM_TRIGGER_NOTIFY (IM library -> IM Server) 2 CARD16 input-method-ID 2 CARD16 input-context-ID 4 CARD32 flag #0 on-keys list #1 off-keys list 4 CARD32 index of keys list 4 EVENTMASK client-select-event-mask (*1) (*1) Specify the events currently selected by the IM library with XSelectInput. XIM_TRIGGER_NOTIFY is a synchronous request. The IM library should wait until receiving either an XIM_TRIGGER_NOTIFY_REPLY packet or an XIM_ERROR packet. XIM_TRIGGER_NOTIFY_REPLY (IM Server -> IM library) 2 CARD16 input-method-ID 2 CARD16 input-context-ID Encoding Negotiation XIM_ENCODING_NEGOTIATION message requests to decide which encoding to be sent across the wire. When the negotiation fails, the fallback default encoding is Portable Character Encoding. XIM_ENCODING_NEGOTIATION (IM library -> IM Server).sp 6p 2 CARD16 input-method-ID 2 n byte length of encodings listed by name n LISTofSTR list of encodings supported in the IM library. p unused, p = Pad(n) 2 m byte length of encodings listed by detailed data 2 unused m LISTofENCODINGINFO list of encordings supported in the IM library The IM Server must choose one encoding from the list sent by the IM library. If index of the encording determined is -1 to indicate that the negotiation is failed, the fallback default encoding is used. The message must be issued after sending XIM_OPEN message via XOpenIM(). The name of encoding may be registered with X Consortium. XIM_ENCODING_NEGOTIATION is a synchronous request. The IM library should wait until receiving either an XIM_ENCODING_NEGOTIATION_REPLY packet or an XIM_ERROR packet. XIM_ENCODING_NEGOTIATION_REPLY (IM Server -> IM library) 2 CARD16 input-method-ID 2 CARD16 category of the encoding determined. #0 name #1 detailed data 2 INT16 index of the encoding determinated. 2 unused Query the supported extension protocol list XIM_QUERY_EXTENSION message requests to query the IM extensions supported by the IM Server to which the client is being connected. XIM_QUERY_EXTENSION (IM library -> IM Server) 2 CARD16 input-method-ID 2 n byte length of extensions supported by the IM library n LISTofSTR extensions supported by the IM library p unused, p = Pad(n) An example of a supported extension is FrontEnd. The message must be issued after sending XIM_OPEN message via XOpenIM(). If n is 0, the IM library queries the IM Server for all extensions. If n is not 0, the IM library queries whether the IM Server supports the contents specified in the list. If a client uses an extension request without previously having issued a XIM_QUERY_EXTENSION message for that extension, the IM Server responds with a BadProtocol error. If the IM Server encounters a request with an unknown MAJOR-OPCODE or MINOR-OPCODE, it responds with a BadProtocol error. XIM_QUERY_EXTENSION is a synchronous request. The IM library should wait until receiving either an XIM_QUERY_EXTENSION_REPLY packet or an XIM_ERROR packet. XIM_QUERY_EXTENSION_REPLY (IM Server -> IM library) 2 CARD16 input-method-ID 2 n byte length of extensions supported by both the IM library and the IM Server n LISTofEXT list of extensions supported by both the IM library and the IM Server XIM_QUERY_EXTENSION_REPLY message returns the list of extensions supported by both the IM library and the IM Server. If the list passed in XIM_QUERY_EXTENSION message is NULL, the IM Server returns the full list of extensions supported by the IM Server. If the list is not NULL, the IM Server returns the extensions in the list that are supported by the IM Server. A zero-length string is not a valid extension name. The IM library should disregard any zero-length strings that are returned in the extension list. The IM library does not use the requests which are not supported by the IM Server. Setting IM Values XIM_SET_IM_VALUES requests to set attributes to the IM. XIM_SET_IM_VALUES (IM library -> IM Server) 2 CARD16 input-method-ID 2 n byte length of im-attribute n LISTofXIMATTRIBUTE im-attributes The im-attributes in XIM_SET_IM_VALUES message are specified as a LISTofXIMATTRIBUTE, specifying the attributes to be set. Attributes other than the ones returned by XIM_OPEN_REPLY message should not be specified. XIM_SET_IM_VALUES is a synchronous request. The IM library should wait until receiving either an XIM_SET_IM_VALUES_REPLY packet or an XIM_ERROR packet, because it must receive the error attribute if XIM_ERROR message is returned. XIM_SET_IM_VALUES_REPLY (IM Server -> IM library) 2 CARD16 input-method-ID 2 unused XIM_SET_IM_VALUES_REPLY message returns the input-method-ID to distinguish replies from multiple IMs. Getting IM Values XIM_GET_IM_VALUES requests to query IM values supported by the IM Server currently being connected. XIM_GET_IM_VALUES (IM library -> IM Server) 2 CARD16 input-method-ID 2 n byte length of im-attribute-id n LISTofCARD16 im-attribute-id p unused, p=Pad(n) XIM_GET_IM_VALUES is a synchronous request. The IM library should wait until it receives either an XIM_GET_IM_VALUES_REPLY packet or an XIM_ERROR packet. XIM_GET_IM_VALUES_REPLY (IM Server -> IM library) 2 CARD16 input-method-ID 2 n byte length of im-attributes returned n LISTofXIMATTRIBUTE im-attributes returned The IM Server returns IM values with XIM_GET_IM_VALUES_REPLY message. The order of the returned im-attribute values corresponds directly to that of the list passed with the XIM_GET_IM_VALUES message. Creating an IC XIM_CREATE_IC message requests to create an IC. XIM_CREATE_IC (IM library -> IM Server) 2 CARD16 input-method-ID 2 n byte length of ic-attributes n LISTofXICATTRIBUTE ic-attributes The input-context-id is specified by the IM Server to identify the client (IC). (It is not specified by the client in XIM_CREATE_IC message.), and it should not be set to zero. XIM_CREATE_IC is a synchronous request which returns the input-context-ID. The IM library should wait until it receives either an XIM_CREATE_IC_REPLY packet or an XIM_ERROR packet. XIM_CREATE_IC_REPLY (IM Server -> IM library) 2 CARD16 input-method-ID 2 CARD16 input-context-ID Destroying the IC XIM_DESTROY_IC message requests to destroy the IC. XIM_DESTROY_IC (IM library -> IM Server) 2 CARD16 input-method-ID 2 CARD16 input-context-ID XIM_DESTROY_IC is a synchronous request. The IM library should not free its resources until it receives an XIM_DESTROY_IC_REPLY message because XIM_DESTROY_IC message may result in Callback packets such as XIM_PREEDIT_DRAW and XIM_PREEDIT_DONE. XIM_DESTROY_IC_REPLY (IM Server -> IM library) 2 CARD16 input-method-ID 2 CARD16 input-context-ID Setting IC Values XIM_SET_IC_VALUES messages requests to set attributes to the IC. XIM_SET_IC_VALUES (IM library -> IM Server) 2 CARD16 input-method-ID 2 CARD16 input-context-ID 2 n byte length of ic-attributes 2 unused n LISTofXICATTRIBUTE ic-attributes The ic-attributes in XIM_SET_IC_VALUES message are specified as a LISTofXICATTRIBUTE, specifying the attributes to be set. Attributes other than the ones returned by XIM_OPEN_REPLY message should not be specified. XIM_SET_IC_VALUES is a synchronous request. The IM library should wait until receiving either an XIM_SET_IC_VALUES_REPLY packet or an XIM_ERROR packet, because it must receive the error attribute if XIM_ERROR message is returned. XIM_SET_IC_VALUES_REPLY (IM Server -> IM library) 2 CARD16 input-method-ID 2 CARD16 input-context-ID Getting IC Values XIM_GET_IC_VALUES message requests to query IC values supported by the IM Server currently being connected. XIM_GET_IC_VALUES (IM library -> IM Server) 2 CARD16 input-method-ID 2 CARD16 input-context-ID 2 n byte length of ic-attribute-id n LISTofCARD16 ic-attribute-id p unused, p=Pad(2+n) In LISTofCARD16, the appearance of the ic-attribute-id for the separator of NestedList shows the end of the heading nested list. XIM_GET_IC_VALUES is a synchronous request and returns each attribute with its values to show the correspondence. The IM library should wait until receiving either an XIM_GET_IC_VALUES_REPLY packet or an XIM_ERROR packet. XIM_GET_IC_VALUES_REPLY (IM Server -> IM library) 2 CARD16 input-method-ID 2 CARD16 input-context-ID 2 n byte length of ic-attribute 2 unused n LISTofXICATTRIBUTE ic-attribute Setting IC Focus XIM_SET_IC_FOCUS message requests to set the focus to the IC. XIM_SET_IC_FOCUS (IM library -> IM Server) 2 CARD16 input-method-ID 2 CARD16 input-context-ID XIM_SET_IC_FOCUS is an asynchronous request. Unsetting IC Focus XIM_UNSET_IC_FOCUS message requests to unset the focus to the focused IC. XIM_UNSET_IC_FOCUS (IM library -> IM Server) 2 CARD16 input-method-ID 2 CARD16 input-context-ID XIM_UNSET_IC_FOCUS is an asynchronous request. Filtering Events Event filtering is mainly provided for BackEnd method to allow input method to capture X events transparently to clients. X Events are forwarded by XIM_FORWARD_EVENT message. This message can be operated both synchronously and asynchronously. If the requester sets the synchronous flag, the receiver must send XIM_SYNC_REPLY message back to the requester when all the data processing is done. Protocol flow of BackEnd model With BackEnd method, the protocol flow can be classified into two methods in terms of synchronization, depending on the synchronous-eventmask of XIM_SET_EVENT_MASK message. One can be called on-demand-synchronous method and another can be called as full-synchronous method. In on-demand-synchronous method, the IM library always receives XIM_FORWARD_EVENT or XIM_COMMIT message as a synchronous request. Also, the IM Server needs to synchronously process the correspondent reply from the IM library and the following XIM_FORWARD_EVENT message sent from the IM library when any of the event causes the IM Server to send XIM_FORWARD_EVENT or XIM_COMMIT message to the IM library, so that the input service is consistent. If the IM library gets the control back from the application after receiving the synchronous request, the IM library replies for the synchronous request before processing any of the events. In this time, the IM Server blocks XIM_FORWARD_EVENT message which is sent by the IM library, and handles it after receiving the reply. However, the IM Server handles the other protocols at any time. In full-synchronous method, the IM library always sends XIM_FORWARD_EVENT message to the IM Server as a synchronous request. Therefore, the reply to it from the IM Server will be put between the XIM_FORWARD_EVENT message and its XIM_SYNC_REPLY message. In case of sending XIM_FORWARD_EVENT or XIM_COMMIT message, the IM Server should set the synchronous flag off. Because the synchronization can be done by the following XIM_SYNC_REPLY message. Following chart shows one of the simplest protocol flow which only deals with keyevents for preediting operation. Sample Protocol Flow Following chart shows one of the complex protocol flow, which deals with multiple focus windows and button press event as well as keyevent, and the focus is moved by the application triggered by both of keyevent and button press event. Sample Protocol Flow 2 XIM_FORWARD_EVENT (IM library <--> IM Server) 2 CARD16 input-method-ID 2 CARD16 input-context-ID 2 BITMASK16 flag #0001 synchronous #0002 request filtering (*1) #0004 request lookupstring (*2) 2 CARD16 serial number XEVENT X event (*1) Indicate the receiver should filter events and possible preedit may be invoked. (*2) Indicate the receiver should only do lookup string. The IM Server is expected to just do a conversion of the key event to the best candidate. This bit may affect the state of the preedit state (e.g. compose of dead key sequences). XEVENT format is same as the X Protocol event format(xEvent). As the value of xEvent's sequenceNumber is the bottom of 16 bit of XEvent's xany.serial, the top of 16 bit is sent by serial number(INT16). XIM_FORWARD_EVENT message is used for forwarding the events from the IM library to the IM Server in order for IM to be able to filter the event. On the other hand, this message is also used for forwarding the events from the IM Server to the IM library if the event forwarded from the IM library is not filtered. The IM Server, which receives XIM_FORWARD_EVENT message without synchronous bit, should set synchronous bit. If both "request event filtering" and "request lookupstring" flag are set, then both filtering and lookup should be done for the same event. Synchronizing with the IM Server XIM_SYNC message requests to synchronize the IM library and the IM Server. XIM_SYNC (IM library <--> IM Server) 2 CARD16 input-method-ID 2 CARD16 input-context-ID This synchronization can be started either on the IM library side or on the IM Server side. The side which receives XIM_SYNC message should process all XIM requests before replying. The input-context-ID is necessary to distinguish the IC with which the IM library and the IM Server are synchronized. XIM_SYNC_REPLY (IM Server <--> IM library) 2 CARD16 input-method-ID 2 CARD16 input-context-ID The side which receives XIM_FORWARD_EVENT, XIM_COMMIT or any other message with synchronous bit, should process all XIM request before replying, and send XIM_SYNC_REPLY message as the reply to the previous message. Sending a committed string When the IM Server commits a string, the IM Server sends either the committed string or list of KeySym, or both, by XIM_COMMIT message. XIM_COMMIT (IM Server -> IM library) 2 CARD16 input-method-ID 2 CARD16 input-context-ID 2 BITMASK16 flag #0001 synchronous #0002 XLookupChars #0004 XLookupKeySym #0006 XLookupBoth = XLookupChars | XLookupKeySym If flag is XLookupKeySym, the arguments continue as follows: 2 unused 4 KEYSYM KeySym If flag is XLookupChars, the arguments continue as follows 2 m byte length of committed string m LISTofBYTE committed string p unused, p = Pad(m) If flag is XLookupBoth, the arguments continue as follows 2 unused 4 KEYSYM KeySym 2 n byte length of committed string n LISTofBYTE committed string p unused, p = Pad(2+n) The IM Server which receives XIM_COMMIT message without synchronous bit should set synchronous bit. Reset IC XIM_RESET_IC message requests to reset the status of IC in the IM Server. XIM_RESET_IC (IM library -> IM Server) 2 CARD16 input-method-ID 2 CARD16 input-context-ID XIM_RESET_IC is a synchronous request. The IM library should wait until receiving either an XIM_RESET_IC_REPLY packet or an XIM_ERROR packet. XIM_RESET_IC_REPLY (IM Server -> IM library) 2 CARD16 input-method-ID 2 CARD16 input-context-ID 2 n byte length of preedit string n LISTofBYTE preedit string p unused, p = Pad(2+n) XIM_RESET_IC_REPLY message returns the input-context-ID to distinguish replies from multiple ICs. Callbacks If XIMStyle has XIMPreeditArea or XIMStatusArea set, XIMGeometryCallback may be used, and if XIMPreeditCallback and/or XIMStatusCallback are set, corresponding callbacks may be used. Any callback request may be sent from an IM Server to an IM client asynchronously in response to any request previously sent by the IM client to the IM Server. When an IM Server needs to send a callback request synchronously with the request previously sent by an IM client, the IM Server sends it before replying to the previous request. Negotiating geometry The IM Server sends XIM_GEOMETRY message to start geometry negotiation, if XIMStyle has XIMPreeditArea or XIMStatusArea set. XIM_GEOMETRY (IM Server -> IM library) 2 CARD16 input-method-ID 2 CARD16 input-context-ID There is always a single Focus Window, even if some input fields have only one IC. Converting a string XIM_STR_CONVERSION (IM Server -> IM library) 2 CARD16 input-method-ID 2 CARD16 input-context-ID 2 CARD16 XIMStringConversionPosition 2 unused 4 CARD32 XIMCaretDirection #0 XIMForwardChar #1 XIMBackwardChar #2 XIMForwardWord #3 XIMBackwardWord #4 XIMCaretUp #5 XIMCaretDown #6 XIMNextLine #7 XIMCPreviousLine #8 XIMLineStart #9 XIMLineEnd #10 XIMAbsolutePosition #11 XIMDontChange 2 CARD16 factor 2 CARD16 XIMStringConversionOperation #0001 XIMStringConversionSubstitution #0002 XIMStringConversionRetrieval 2 INT16 byte length to multiply the XIMStringConversionType XIM_STR_CONVERSION message may be used to start the string conversion from the IM Server. XIM_STR_CONVERSION_REPLY (IM library -> IM Server) 2 CARD16 input-method-ID 2 CARD16 input-context-ID 4 CARD32 XIMStringConversionFeedback XIMSTRCONVTEXT XIMStringConversionText XIM_STR_CONVERSION_REPLY message returns the string to be converted and the feedback information array. Preedit Callbacks The IM Server sends XIM_PREEDIT_START message to call the XIMPreeditStartCallback function. XIM_PREEDIT_START (IM Server -> IM library) 2 CARD16 input-method-ID 2 CARD16 input-context-ID The reply to this message must be sent synchronously. The reply forwards the return value from the callback function to the IM Server. XIM_PREEDIT_START_REPLY (IM library -> IM Server) 2 CARD16 input-method-ID 2 CARD16 input-context-ID 4 INT32 return value XIM_PREEDIT_START_REPLY message returns the input-context-ID to distinguish replies from multiple IC's. The return value contains the return value of the function XIMPreeditStartCallback. The IM Server sends XIM_PREEDIT_DRAW message to call the XIMPreeditDrawCallback function. XIM_PREEDIT_DRAW (IM Server -> IM library) 2 CARD16 input-method-ID 2 CARD16 input-context-ID 4 INT32 caret 4 INT32 chg_first 4 INT32 chg_length 4 BITMASK32 status #x0000001 no string #x0000002 no feedback 2 n length of preedit string n STRING8 preedit string p unused, p = Pad(2+n) 2 m byte length of feedback array 2 unused m LISTofXIMFEEDBACK feedback array The fields "caret", "chg_first" and "chg_length" correspond to the fields of XIMPreeditDrawCallbackStruct. When the "no string" bit of the status field is set, the text field of XIMPreeditDrawCallbackStruct is NULL. When the "no feedback" bit of the status field is set, the text feedback field of XIMPreeditDrawCallbackStruct is NULL. When the above bits are not set, "preedit string" contains the preedit string to be displayed, and the feedback array contains feedback information. The IM Server sends XIM_PREEDIT_CARET message to call the PreeditCaretCallback function. XIM_PREEDIT_CARET (IM Server -> IM library) 2 CARD16 input-method-ID 2 CARD16 input-context-ID 4 INT32 position 4 CARD32 direction #0 XIMForwardChar #1 XIMBackwardChar #2 XIMForwardWord #3 XIMBackwardWord #4 XIMCaretUp #5 XIMCaretDown #6 XIMNextLine #7 XIMCPreviousLine #8 XIMLineStart #9 XIMLineEnd #10 XIMAbsolutePosition #11 XIMDontChange 4 CARD32 style #0 XIMInvisible #1 XIMCPrimary #2 XIMSecondary Each entry corresponds to a field of XIMPreeditCaretCallbackStruct. Since this callback sets the caret position, its reply must be sent synchronously. XIM_PREEDIT_CARET_REPLY (IM library -> IM Server) 2 CARD16 input-method-ID 2 CARD16 input-context-ID 4 CARD32 position The position is the value returned by the callback function after it has been called. The IM Server sends XIM_PREEDIT_DONE message to call the XIMPreeditDoneCallback function. XIM_PREEDIT_DONE (IM Server -> IM library) 2 CARD16 input-method-ID 2 CARD16 input-context-ID Preedit state notify XIM_PREEDITSTATE (IM Server -> IM Library) 2 CARD16 input-method-ID 2 CARD16 input-context-ID 4 BITMASK32 XIMPreeditState #x0000000 XIMPreeditUnknown #x0000001 XIMPreeditEnable #x0000002 XIMPreeditDisable XIM_PREEDITSTATE message is used to call the XIMPreeditStateNotifyCallback function. Status Callbacks The IM Server sends XIM_STATUS_START message to call the XIMStatusStartCallback function. XIM_STATUS_START (IM Server -> IM library) 2 CARD16 input-method-ID 2 CARD16 input-context-ID The IM Server sends XIM_STATUS_DRAW message to call the XIMStatusDrawCallback function. XIM_STATUS_DRAW (IM Server -> IM library) 2 CARD16 input-method-ID 2 CARD16 input-context-ID 4 CARD32 type #0 XIMTextType #1 XIMBitmapType If type is XIMTextType, the arguments continue as follows. 4 BITMASK32 status #x0000001 no string #x0000002 no feedback 2 n length of status string n STRING8 status string p unused, p = Pad(2+n) 2 m byte length of feedback array 2 unused m LISTofXIMFEEDBACK feedback array If type is XIMBitmapType, the arguments continue as follows. 4 PIXMAP pixmap data The field "type" corresponds to the field in XIMStatusDrawCallbackStruct. The IM Server sends XIM_STATUS_DONE message to call the XIMStatusDoneCallback function. XIM_STATUS_DONE (IM Server -> IM library) 2 CARD16 input-method-ID 2 CARD16 input-context-ID Acknowledgements This document represents the culmination of several years of debate and experiments done under the auspices of the MIT X Consortium i18n working group. Although this was a group effort, the author remains responsible for any errors or omissions. We would like to thank to all members of this group. And we would like to make special thanks to the following people (in alphabetical order) for their participation in the IM Protocol design, Hector Chan, Takashi Fujiwara, Yoshio Horiuchi, Makoto Inada, Hiromu Inukai, Mickael Kung, Seiji Kuwari, Franky Ling, Hiroyuki Machida, Hiroyuki Miyamoto, Frank Rojas, Bob Scheifler, Makiko Shimamura, Shoji Sugiyama, Hidetoshi Tajima, Masaki Takeuchi, Makoto Wakamatsu, Masaki Wakao, Nobuyuki Tanaka, Shigeru Yamada, Katsuhisa Yano, Jinsoo Yoon. References X Window System Protocol Version 11 Robert W.Scheifler Xlib - C Language X Interface" Robert W.Scheifler Common Extensions Extension opcodes and packet names (e.g. XIM_EXT_SET_EVENT_MASK ) for additional extensions may be registered with X Consortium. The following is a commonly well-known extended packet. (1) Extension to manipulate the event handling\fP XIM_EXT_SET_EVENT_MASK message specifies the set of event masks that the IM library should manipulate. XIM_EXT_SET_EVENT_MASK (IM Server -> IM library) 2 CARD16 input-method-ID 2 CARD16 input-context-ID 4 EVENTMASK filter-event-mask (*1) 4 EVENTMASK intercept-event-mask (*2) 4 EVENTMASK select-event-mask (*3) 4 EVENTMASK forward-event-mask (*4) 4 EVENTMASK synchronous-event-mask (*5) (*1) Specify the events to be neglected by the IM library via XFilterEvent. (*2) Specify the events to be deselected by the IM library with XSelectInput. (*3) Specify the events to be selected by the IM library with XSelectInput. (*4) Specify all the events to be forwarded to the IM Server by the IM library. (*5) Specify the events to be forwarded with synchronous flag on by the IM library. The IM library must reply XIM_SYNC_REPLY message to the IM Server. This request is valid after the ic is created. (2) Extension for improvement of performance. The following requests may be used for improvement of performance. XIM_EXT_FORWARD_KEYEVENT message may be used instead of XIM_FORWARD_EVENT message. XIM_EXT_FORWARD_KEYEVENT (IM Server <--> IM library) 2 CARD16 input-method-ID 2 CARD16 input-context-ID 2 BITMASK16 flag #0001 synchronous 2 CARD16 sequence number 1 BYTE xEvent.u.u.type 1 BYTE keycode 2 CARD16 state 4 CARD32 time 4 CARD32 window XIM_EXT_MOVE message may be used to change the spot location instead of XIM_SET_IC_VALUES message. It is effective only if the client specified XIMPreeditPosition. XIM_EXT_MOVE (IM library -> IM Server) 2 CARD16 input-method-ID 2 CARD16 input-context-ID 2 INT16 X 2 INT16 Y XIM_EXT_MOVE message is a asynchronous request. Transport List The list of transport specific IM Server address format registered The following format represents the ATOM contained in XIM_SERVERS property and the string returned from the request converting selection target LOCALES and TRANSPORT. "{category=[value,...]}..." The following categories are currently registered. server;: IM Server name (used for XIM_SERVERS) locale;: XPG4 locale name (LOCALES) transport;: transport-specific name (TRANSPORT) The preregistered formats for transport-specific names are as follows: TCP/IP Names The following syntax should be used for system internal domain names: <local name> ::= "local/"<hostname>":"<pathname> Where <pathname> is a path name of socket address. IM Server's name should be set to <pathname> to run multiple IM Server at the same time The following syntax should be used for Internet domain names: <TCP name> ::= "tcp/"<hostname>":"<ipportnumber> where <hostname> is either symbolic (such as expo.lcs.mit.edu) or numeric decimal (such as 18.30.0.212). The <ipportnumber> is the port on which the IM Server is listening for connections. For example: tcp/expo.lcs.mit.edu:8012 tcp/18.30.0.212:7890 DECnet Names The following syntax should be used for DECnet names: <DECnet name> ::= "decnet/"<nodename>"::IMSERVER$"<objname> where <nodename> is either symbolic (such as SRVNOD) or the numeric decimal form of the DECnet address (such as 44.70). The <objname> is normal, case-insensitive DECnet object name. For example: DECNET/SRVNOD::IMSERVER$DEFAULT decnet/44.70::IMSERVER$other X Names The following syntax should be used for X names: <X name> ::= "X/" If a given category has multiple values, the value is evaluated in order of setting. Protocol Number Major Protocol number XIM_CONNECT #001 XIM_CONNECT_REPLY #002 XIM_DISCONNECT #003 XIM_DISCONNECT_REPLY #004 XIM_AUTH_REQUIRED #010 XIM_AUTH_REPLY #011 XIM_AUTH_NEXT #012 XIM_AUTH_SETUP #013 XIM_AUTH_NG #014 XIM_ERROR #020 XIM_OPEN #030 XIM_OPEN_REPLY #031 XIM_CLOSE #032 XIM_CLOSE_REPLY #033 XIM_REGISTER_TRIGGERKEYS #034 XIM_TRIGGER_NOTIFY #035 XIM_TRIGGER_NOTIFY_REPLY #036 XIM_SET_EVENT_MASK #037 XIM_ENCODING_NEGOTIATION #038 XIM_ENCODING_NEGOTIATION_REPLY #039 XIM_QUERY_EXTENSION #040 XIM_QUERY_EXTENSION_REPLY #041 XIM_SET_IM_VALUES #042 XIM_SET_IM_VALUES_REPLY #043 XIM_GET_IM_VALUES #044 XIM_GET_IM_VALUES_REPLY #045 XIM_CREATE_IC #050 XIM_CREATE_IC_REPLY #051 XIM_DESTROY_IC #052 XIM_DESTROY_IC_REPLY #053 XIM_SET_IC_VALUES #054 XIM_SET_IC_VALUES_REPLY #055 XIM_GET_IC_VALUES #056 XIM_GET_IC_VALUES_REPLY #057 XIM_SET_IC_FOCUS #058 XIM_UNSET_IC_FOCUS #059 XIM_FORWARD_EVENT #060 XIM_SYNC #061 XIM_SYNC_REPLY #062 XIM_COMMIT #063 XIM_RESET_IC #064 XIM_RESET_IC_REPLY #065 XIM_GEOMETRY #070 XIM_STR_CONVERSION #071 XIM_STR_CONVERSION_REPLY #072 XIM_PREEDIT_START #073 XIM_PREEDIT_START_REPLY #074 XIM_PREEDIT_DRAW #075 XIM_PREEDIT_CARET #076 XIM_PREEDIT_CARET_REPLY #077 XIM_PREEDIT_DONE #078 XIM_STATUS_START #079 XIM_STATUS_DRAW #080 XIM_STATUS_DONE #081 XIM_PREEDITSTATE #082 (*) The IM Server's extension protocol number should be more than #128. Implementation Tips (1) FrontEnd Method FrontEnd method is recognized as a performance acceleration by the trade off of the variety of the reliability. In order to use the FrontEnd method, the IM library must query the IM Server to see if the FrontEnd extension is available. The query is made by using the XIM_QUERY_EXTENSION message. The IM Server may send XIM_EXT_SET_EVENT_MASK message with intercept-event-mask, forward-event-mask, and synchronous-event-mask values set after replying XIM_QUERY_EXTENSION_REPLY message. FrontEnd method can be implemented in a couple of ways depending on how the IM Server utilize XIM_EXT_SET_EVENT_MASK message. One approach is to update both of the input mask and the filter-event-mask depending on the preeidting state. The sample protocol sequence using the static event flow is as follows: The flow of events To pursuit a maximum performance regardless of the preediting mode, the IM Server may use the dynamic event flow with the following sample protocol sequence. The flow of events This method can reduce the XIM protocol traffic dramatically by updating intercept-event-mask and select-event-mask accordingly. The tradeoff of this performance improvement is that the key events may be lost or disordered in some particular situation, such as when the user types the keyboard in following sequence really fast: <preediting on key>"some strings"<preediting off key>"another string" Since this method requires the input mask updates to the both the IM Server and Xlib when turning on and off the preediting, and there is a time lag till the requests take effect when two client issues the input mask updates simultaneously. Another approach of the FrontEnd method is to update the filter-event-mask depending on the preediting state and not to update the input mask. The IM Server must register both of the preediting on key list and off key list by XIM_REGISTER_TRIGGERKEYS message. In this method, Both the IM Server and the IM client select the same events on the same client's window, so that the events are delivered to both of the IM Server and the client. The preediting on and off states are expressed by whether the key events are filtered or not. The sample protocol sequence are as follows: <<Using static event flow>> The flow of events <<Using the dynamic event flow>> The flow of events This method does not have the problem of the time lag when going across the preediting on and off mode, however, the amount of the performance acceleration is not as good as the method described above. In general, the FrontEnd method requires some synchronization to some of the X protocols, such as the ChangeWindowAttribute protocol for the event mask change or the GrabKey protocol, since it relies on the X's principal event dispatching mechanism. Any X protocol bindings do not consider the synchronization might cause some mis-synchronization between the IM clients and the IM Server. (2) Transport Layer The Xlib XIM implementation is layered into three functions, a protocol layer, an interface layer and a transport layer. The purpose of this layering is to make the protocol independent of transport implementation. Each function of these layers are: The protocol layer implements overall function of XIM and calls the interface layer functions when it needs to communicate to IM Server. The interface layer separates the implementation of the transport layer from the protocol layer, in other words, it provides implementation independent hook for the transport layer functions. The transport layer handles actual data communication with IM Server. It is done by a set of several functions named transporters. The interface layer and the transport layer make various communication channels usable such as X Protocol, TCP/IP, DECnet or STREAM. The following is a sample implementation for the transporter using the X connection. Refer to "xtrans" for the transporter using Socket Transport. At the beginning of the X Transport connection for the XIM transport mechanism, two different windows must be created either in an Xlib XIM or in an IM Server, with which the Xlib and the IM Server exchange the XIM transports by using the ClientMessage events and Window Properties. In the following, the window created by the Xlib is referred as the "client communication window", and on the other hand, the window created by the IM Server is referred as the "IMS communication window". Connection In order to establish a connection, a communication window is created. A ClientMessage in the following event's format is sent to the owner window of XIM_SERVER selection, which the IM Server has created. Refer to "The Input Method Protocol" for the XIM_SERVER atom. The ClientMessage sent to the IMS window. Structure Member Contents int type ClientMessage u_long serial Set by the X Window System Bool send_event Set by the X Window System Display *display The display to which connects Window window IMS Window ID Atom message_type XInternAtom(display, "_XIM_XCONNECT", False) int format 32 long data.l[0] client communication window ID long data.l[1] client-major-transport-version (*1) long data.l[2] client-major-transport-version (*1)
In order to establish the connection (to notify the IM Server communication window), the IM Server sends a ClientMessage in the following event's format to the client communication window. The ClientMessage sent by the IM Server. Structure Member Contents int type ClientMessage u_long serial Set by the X Window System Bool send_event Set by the X Window System Display *display The display to which connects Window window client communication window ID Atom message_type XInternAtom(display, "_XIM_XCONNECT", False) int format 32 long data.l[0] IMS communication window ID long data.l[1] server-major-transport-version (*1) long data.l[2] server-minor-transport-version (*1) long data.l[3] dividing size between ClientMessage and Property (*2)
(*1) major/minor-transport-version The read/write method is decided by the combination of major/minor-transport-version, as follows: The read/write method and the major/minor-transport-version Transport-version read/write major minor 0 0 only-CM & Property-with-CM 1 only-CM & multi-CM 2 only-CM & multi-CM & Property-with-CM 1 0 PropertyNotify 2 0 only-CM & PropertyNotify 1 only-CM & multi-CM & PropertyNotify
only-CM : data is sent via a ClientMessage multi-CM : data is sent via multiple ClientMessages Property-with-CM : data is written in Property, and its Atom is send via ClientMessage PropertyNotify : data is written in Property, and its Atom is send via PropertyNotify The method to decide major/minor-transport-version is as follows: The client sends 0 as major/minor-transport-version to the IM Server. The client must support all methods in Table D-3. The client may send another number as major/minor-transport-version to use other method than the above in the future. The IM Server sends its major/minor-transport-version number to the client. The client sends data using the method specified by the IM Server. If major/minor-transport-version number is not available, it is regarded as 0. (*2) dividing size between ClientMessage and Property If data is sent via both of multi-CM and Property, specify the dividing size between ClientMessage and Property. The data, which is smaller than this size, is sent via multi-CM (or only-CM), and the data, which is lager than this size, is sent via Property. read/write The data is transferred via either ClientMessage or Window Property in the X Window System. Format for the data from the Client to the IM Server ClientMessage If data is sent via ClientMessage event, the format is as follows: The ClientMessage event's format (first or middle) Structure Member Contents int type ClientMessage u_long serial Set by the X Window System Bool send_event Set by the X Window System Display *display The display to which connects Window window IMS communication window ID Atom message_type XInternAtom(display, "_XIM_MOREDATA", False) int format 8 char data.b[20] (read/write DATA : 20 byte)
The ClientMessage event's format (only or last) Structure Member Contents int type ClientMessage u_long serial Set by the X Window System Bool send_event Set by the X Window System Display *display The display to which connects Window window IMS communication window ID Atom message_type XInternAtom(display, "_XIM_PROTOCOL", False) int format 8 char data.b[20] (read/write DATA : MAX 20 byte) (*1)
(*1) If the data is smaller than 20 byte, all data other than available data must be 0. Property In the case of large data, data will be sent via the Window Property for the efficiency. There are the following two methods to notify Property, and transport-version is decided which method is used. The XChangeProperty function is used to store data in the client communication window, and Atom of the stored data is notified to the IM Server via ClientMessage event. The XChangeProperty function is used to store data in the client communication window, and Atom of the stored data is notified to the IM Server via PropertyNotify event. The arguments of the XChangeProperty are as follows: The XChangeProperty event's format Argument Contents Display *display The display to which connects Window window IMS communication window ID Atom property read/write property Atom (*1) Atom type XA_STRING int format 8 int mode PropModeAppend u_char *data read/write DATA int nelements length of DATA
The read/write property ATOM allocates the following strings by XInternAtom. "_clientXXX" The client changes the property with the mode of PropModeAppend and the IM Server will read it with the delete mode i.e. (delete = True). If Atom is notified via ClientMessage event, the format of the ClientMessage is as follows: The ClientMessage event's format to send Atom of property Structure Members Contents int type ClientMessage u_long serial Set by the X Window System Bool send_event Set by the X Window System Display *display The display to which connects Window window IMS communication window ID Atom message_type XInternAtom(display, "_XIM_PROTOCOL", False) int format 32 long data.l[0] length of read/write property Atom long data.l[1] read/write property Atom
Format for the data from the IM Server to the Client ClientMessage The format of the ClientMessage is as follows: The ClientMessage event's format (first or middle) Structure Members Contents int type ClientMessage u_long serial Set by the X Window System Bool send_event Set by the X Window System Display *display The display to which connects Window window client communication window ID Atom message_type XInternAtom(display, "_XIM_MOREDATA", False) int format 8 char data.b[20] (read/write DATA : 20 byte)
The ClientMessage event's format (only or last) Structure Members Contents int type ClientMessage u_long serial Set by the X Window System Bool send_event Set by the X Window System Display *display The display to which connects Window window client communication window ID Atom message_type XInternAtom(display, "_XIM_PROTOCOL", False) int format 8 char data.b[20] (read/write DATA : MAX 20 byte) (*1)
(*1) If the data size is smaller than 20 bytes, all data other than available data must be 0. Property In the case of large data, data will be sent via the Window Property for the efficiency. There are the following two methods to notify Property, and transport-version is decided which method is used. The XChangeProperty function is used to store data in the IMS communication window, and Atom of the property is sent via the ClientMessage event. The XChangeProperty function is used to store data in the IMS communication window, and Atom of the property is sent via PropertyNotify event. The arguments of the XChangeProperty are as follows: The XChangeProperty event's format Argument Contents Display *display The display which to connects Window window client communication window ID Atom property read/write property Atom (*1) Atom type XA_STRING int format 8 int mode PropModeAppend u_char *data read/write DATA int nelements length of DATA
(*1) The read/write property ATOM allocates some strings, which are not allocated by the client, by XInternAtom. The IM Server changes the property with the mode of PropModeAppend and the client reads it with the delete mode, i.e. (delete = True). If Atom is notified via ClientMessage event, the format of the ClientMessage is as follows: The ClientMessage event's format to send Atom of property Structure Member Contents int type ClientMessage u_long serial Set by the X Window System Bool send_event Set by the X Window System Display *display The display to which connects Window window client communication window ID Atom message_type XInternAtom(display, "_XIM_PROTOCOL", False) int format 32 long data.l[0] length of read/write property ATOM long data.l[1] read/write property ATOM
Closing Connection If the client disconnect with the IM Server, shutdown function should free the communication window properties and etc..
ra> If Atom is notified via ClientMessage event, the format of the ClientMessage is as follows: The ClientMessage event's format to send Atom of property image/svg+xml X Server Backend Method(Core) Frontend Method(Extension) IM Server Library Application age/svg+xml image/svg+xml IM Library IM Server Keys in the on-key-list event mask is changedto deselect the event event mask is changedto select the event XIM_EXT_SET_EVENT_MASK intercept-event-mask is set XIM_EXT_SET_EVENT_MASK select-event-mask is set event mask is changedto select the event X events directly cometo the IM Server when preediting is turned off event mask is changedto deselect the event XIM_TRIGGER_NOTIFY XIM_TRIGGER_NOTIFY_REPLY libX11-1.6.3/include/Makefile.am000064401431060000012000000004721247741723500165400ustar00alancstaff00002660200006x11includedir=${includedir}/X11 x11include_HEADERS=\ X11/XKBlib.h \ X11/Xcms.h \ X11/Xlib.h \ X11/Xlibint.h \ X11/Xlocale.h \ X11/Xresource.h \ X11/Xutil.h \ X11/cursorfont.h \ X11/Xregion.h \ X11/ImUtil.h \ X11/Xlib-xcb.h nodist_x11include_HEADERS=\ X11/XlibConf.h EXTRA_DIST = \ X11/XlibConf.h.in libX11-1.6.3/include/Makefile.in000064401431060000012000000461161247741725400165570ustar00alancstaff00002660200006# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = include ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_define_dir.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(x11include_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h \ $(top_builddir)/include/X11/XlibConf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(x11includedir)" \ "$(DESTDIR)$(x11includedir)" HEADERS = $(nodist_x11include_HEADERS) $(x11include_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASE_CFLAGS = @BASE_CFLAGS@ BIGFONT_CFLAGS = @BIGFONT_CFLAGS@ BIGFONT_LIBS = @BIGFONT_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHANGELOG_CMD = @CHANGELOG_CMD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ FOP = @FOP@ GREP = @GREP@ I18N_MODULE_LIBS = @I18N_MODULE_LIBS@ INSTALL = @INSTALL@ INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ KEYSYMDEFS = @KEYSYMDEFS@ LAUNCHD = @LAUNCHD@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LINT = @LINT@ LINTLIB = @LINTLIB@ LINT_FLAGS = @LINT_FLAGS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MALLOC_ZERO_CFLAGS = @MALLOC_ZERO_CFLAGS@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_SUBSTS = @MAN_SUBSTS@ MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RAWCPP = @RAWCPP@ RAWCPPFLAGS = @RAWCPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRICT_CFLAGS = @STRICT_CFLAGS@ STRIP = @STRIP@ STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ TRADITIONALCPPFLAGS = @TRADITIONALCPPFLAGS@ VERSION = @VERSION@ WCHAR32 = @WCHAR32@ X11_CFLAGS = @X11_CFLAGS@ X11_DATADIR = @X11_DATADIR@ X11_EXTRA_DEPS = @X11_EXTRA_DEPS@ X11_LIBDIR = @X11_LIBDIR@ X11_LIBS = @X11_LIBS@ X11_LOCALEDATADIR = @X11_LOCALEDATADIR@ X11_LOCALEDIR = @X11_LOCALEDIR@ X11_LOCALELIBDIR = @X11_LOCALELIBDIR@ XERRORDB = @XERRORDB@ XKBPROTO_REQUIRES = @XKBPROTO_REQUIRES@ XKEYSYMDB = @XKEYSYMDB@ XLOCALEDATADIR = @XLOCALEDATADIR@ XLOCALEDIR = @XLOCALEDIR@ XLOCALELIBDIR = @XLOCALELIBDIR@ XMALLOC_ZERO_CFLAGS = @XMALLOC_ZERO_CFLAGS@ XMLTO = @XMLTO@ XORG_MAN_PAGE = @XORG_MAN_PAGE@ XORG_SGML_PATH = @XORG_SGML_PATH@ XSLTPROC = @XSLTPROC@ XSL_STYLESHEET = @XSL_STYLESHEET@ XTHREADLIB = @XTHREADLIB@ XTHREAD_CFLAGS = @XTHREAD_CFLAGS@ XTMALLOC_ZERO_CFLAGS = @XTMALLOC_ZERO_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ locales = @locales@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ x11includedir = ${includedir}/X11 x11include_HEADERS = \ X11/XKBlib.h \ X11/Xcms.h \ X11/Xlib.h \ X11/Xlibint.h \ X11/Xlocale.h \ X11/Xresource.h \ X11/Xutil.h \ X11/cursorfont.h \ X11/Xregion.h \ X11/ImUtil.h \ X11/Xlib-xcb.h nodist_x11include_HEADERS = \ X11/XlibConf.h EXTRA_DIST = \ X11/XlibConf.h.in all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign include/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-nodist_x11includeHEADERS: $(nodist_x11include_HEADERS) @$(NORMAL_INSTALL) @list='$(nodist_x11include_HEADERS)'; test -n "$(x11includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(x11includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(x11includedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(x11includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(x11includedir)" || exit $$?; \ done uninstall-nodist_x11includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(nodist_x11include_HEADERS)'; test -n "$(x11includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(x11includedir)'; $(am__uninstall_files_from_dir) install-x11includeHEADERS: $(x11include_HEADERS) @$(NORMAL_INSTALL) @list='$(x11include_HEADERS)'; test -n "$(x11includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(x11includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(x11includedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(x11includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(x11includedir)" || exit $$?; \ done uninstall-x11includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(x11include_HEADERS)'; test -n "$(x11includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(x11includedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(x11includedir)" "$(DESTDIR)$(x11includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-nodist_x11includeHEADERS \ install-x11includeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-nodist_x11includeHEADERS \ uninstall-x11includeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool cscopelist-am ctags ctags-am distclean \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man \ install-nodist_x11includeHEADERS install-pdf install-pdf-am \ install-ps install-ps-am install-strip \ install-x11includeHEADERS installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am \ uninstall-nodist_x11includeHEADERS uninstall-x11includeHEADERS .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ libX11-1.6.3/include/X11/ImUtil.h000064401431060000012000000007131247741723500164270ustar00alancstaff00002660200006 #ifndef _X11_IMUTIL_H_ #define _X11_IMUTIL_H_ extern int _XGetScanlinePad( Display *dpy, int depth); extern int _XGetBitsPerPixel( Display *dpy, int depth); extern int _XSetImage( XImage *srcimg, register XImage *dstimg, register int x, register int y); extern int _XReverse_Bytes( register unsigned char *bpt, register int nb); extern void _XInitImageFuncPtrs( register XImage *image); #endif /* _X11_IMUTIL_H_ */ libX11-1.6.3/include/X11/Xcms.h000064401431060000012000000515421247741723500161440ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * DESCRIPTION * Public include file for X Color Management System */ #ifndef _X11_XCMS_H_ #define _X11_XCMS_H_ #include /* The Xcms structs are full of implicit padding to properly align members. We can't clean that up without breaking ABI, so tell clang not to bother complaining about it. */ #ifdef __clang__ #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wpadded" #endif /* * XCMS Status Values */ #define XcmsFailure 0 #define XcmsSuccess 1 #define XcmsSuccessWithCompression 2 /* * Color Space Format ID's * Color Space ID's are of XcmsColorFormat type. * * bit 31 * 0 == Device-Independent * 1 == Device-Dependent * * bit 30: * 0 == Registered with X Consortium * 1 == Unregistered */ #define XcmsUndefinedFormat (XcmsColorFormat)0x00000000 #define XcmsCIEXYZFormat (XcmsColorFormat)0x00000001 #define XcmsCIEuvYFormat (XcmsColorFormat)0x00000002 #define XcmsCIExyYFormat (XcmsColorFormat)0x00000003 #define XcmsCIELabFormat (XcmsColorFormat)0x00000004 #define XcmsCIELuvFormat (XcmsColorFormat)0x00000005 #define XcmsTekHVCFormat (XcmsColorFormat)0x00000006 #define XcmsRGBFormat (XcmsColorFormat)0x80000000 #define XcmsRGBiFormat (XcmsColorFormat)0x80000001 /* * State of XcmsPerScrnInfo */ #define XcmsInitNone 0x00 /* no initialization attempted */ #define XcmsInitSuccess 0x01 /* initialization successful */ #define XcmsInitFailure 0xff /* failure, use defaults */ #define DisplayOfCCC(ccc) ((ccc)->dpy) #define ScreenNumberOfCCC(ccc) ((ccc)->screenNumber) #define VisualOfCCC(ccc) ((ccc)->visual) #define ClientWhitePointOfCCC(ccc) (&(ccc)->clientWhitePt) #define ScreenWhitePointOfCCC(ccc) (&(ccc)->pPerScrnInfo->screenWhitePt) #define FunctionSetOfCCC(ccc) ((ccc)->pPerScrnInfo->functionSet) typedef unsigned long XcmsColorFormat; /* Color Space Format ID */ typedef double XcmsFloat; /* * Device RGB */ typedef struct { unsigned short red; /* scaled from 0x0000 to 0xffff */ unsigned short green; /* scaled from 0x0000 to 0xffff */ unsigned short blue; /* scaled from 0x0000 to 0xffff */ } XcmsRGB; /* * RGB Intensity */ typedef struct { XcmsFloat red; /* 0.0 - 1.0 */ XcmsFloat green; /* 0.0 - 1.0 */ XcmsFloat blue; /* 0.0 - 1.0 */ } XcmsRGBi; /* * CIE XYZ */ typedef struct { XcmsFloat X; XcmsFloat Y; XcmsFloat Z; } XcmsCIEXYZ; /* * CIE u'v'Y */ typedef struct { XcmsFloat u_prime; /* 0.0 - 1.0 */ XcmsFloat v_prime; /* 0.0 - 1.0 */ XcmsFloat Y; /* 0.0 - 1.0 */ } XcmsCIEuvY; /* * CIE xyY */ typedef struct { XcmsFloat x; /* 0.0 - 1.0 */ XcmsFloat y; /* 0.0 - 1.0 */ XcmsFloat Y; /* 0.0 - 1.0 */ } XcmsCIExyY; /* * CIE L*a*b* */ typedef struct { XcmsFloat L_star; /* 0.0 - 100.0 */ XcmsFloat a_star; XcmsFloat b_star; } XcmsCIELab; /* * CIE L*u*v* */ typedef struct { XcmsFloat L_star; /* 0.0 - 100.0 */ XcmsFloat u_star; XcmsFloat v_star; } XcmsCIELuv; /* * TekHVC */ typedef struct { XcmsFloat H; /* 0.0 - 360.0 */ XcmsFloat V; /* 0.0 - 100.0 */ XcmsFloat C; /* 0.0 - 100.0 */ } XcmsTekHVC; /* * PAD */ typedef struct { XcmsFloat pad0; XcmsFloat pad1; XcmsFloat pad2; XcmsFloat pad3; } XcmsPad; /* * XCMS Color Structure */ typedef struct { union { XcmsRGB RGB; XcmsRGBi RGBi; XcmsCIEXYZ CIEXYZ; XcmsCIEuvY CIEuvY; XcmsCIExyY CIExyY; XcmsCIELab CIELab; XcmsCIELuv CIELuv; XcmsTekHVC TekHVC; XcmsPad Pad; } spec; /* the color specification */ unsigned long pixel; /* pixel value (as needed) */ XcmsColorFormat format; /* the specification format */ } XcmsColor; /* * XCMS Per Screen related data */ typedef struct _XcmsPerScrnInfo { XcmsColor screenWhitePt; /* Screen White point */ XPointer functionSet; /* pointer to Screen Color Characterization */ /* Function Set structure */ XPointer screenData; /* pointer to corresponding Screen Color*/ /* Characterization Data */ unsigned char state; /* XcmsInitNone, XcmsInitSuccess, XcmsInitFailure */ char pad[3]; } XcmsPerScrnInfo; typedef struct _XcmsCCC *XcmsCCC; typedef Status (*XcmsCompressionProc)( /* Gamut Compression Proc */ XcmsCCC /* ccc */, XcmsColor* /* colors_in_out */, unsigned int /* ncolors */, unsigned int /* index */, Bool* /* compression_flags_return */ ); typedef Status (*XcmsWhiteAdjustProc)( /* White Point Adjust Proc */ XcmsCCC /* ccc */, XcmsColor* /* initial_white_point*/, XcmsColor* /* target_white_point*/, XcmsColorFormat /* target_format */, XcmsColor* /* colors_in_out */, unsigned int /* ncolors */, Bool* /* compression_flags_return */ ); /* * XCMS Color Conversion Context */ typedef struct _XcmsCCC { Display *dpy; /* X Display */ int screenNumber; /* X screen number */ Visual *visual; /* X Visual */ XcmsColor clientWhitePt; /* Client White Point */ XcmsCompressionProc gamutCompProc; /* Gamut Compression Function */ XPointer gamutCompClientData; /* Gamut Comp Func Client Data */ XcmsWhiteAdjustProc whitePtAdjProc; /* White Point Adjustment Function */ XPointer whitePtAdjClientData; /* White Pt Adj Func Client Data */ XcmsPerScrnInfo *pPerScrnInfo; /* pointer to per screen information */ /* associated with the above display */ /* screenNumber */ } XcmsCCCRec; typedef Status (*XcmsScreenInitProc)( /* Screen Initialization Proc */ Display* /* dpy */, int /* screen_number */, XcmsPerScrnInfo* /* screen_info */ ); typedef void (*XcmsScreenFreeProc)( XPointer /* screenData */ ); /* * Function List Pointer -- pointer to an array of function pointers. * The end of list is indicated by a NULL pointer. */ /* * XXX: The use of the XcmsConversionProc type is broken. The * device-independent colour conversion code uses it as: typedef Status (*XcmsConversionProc)(XcmsCCC, XcmsColor *, XcmsColor *, unsigned int); * while the device-dependent code uses it as: typedef Status (*XcmsConversionProc)(XcmsCCC, XcmsColor *, unsigned int, Bool *); * Until this is reworked, it's probably best to leave it unprotoized. * The code works regardless. */ typedef Status (*XcmsDDConversionProc)( /* using device-dependent version */ XcmsCCC /* ccc */, XcmsColor* /* pcolors_in_out */, unsigned int /* ncolors */, Bool* /* pCompressed */ ); typedef Status (*XcmsDIConversionProc)( /* using device-independent version */ XcmsCCC /* ccc */, XcmsColor* /* white_point */, XcmsColor* /* pcolors_in_out */, unsigned int /* ncolors */ ); typedef XcmsDIConversionProc XcmsConversionProc; typedef XcmsConversionProc *XcmsFuncListPtr; typedef int (*XcmsParseStringProc)( /* Color String Parsing Proc */ char* /* color_string */, XcmsColor* /* color_return */ ); /* * Color Space -- per Color Space related data (Device-Independent * or Device-Dependent) */ typedef struct _XcmsColorSpace { const char *prefix; /* Prefix of string format. */ XcmsColorFormat id; /* Format ID number. */ XcmsParseStringProc parseString; /* String format parsing function */ XcmsFuncListPtr to_CIEXYZ; /* Pointer to an array of function */ /* pointers such that when the */ /* functions are executed in sequence */ /* will convert a XcmsColor structure */ /* from this color space to CIEXYZ */ /* space. */ XcmsFuncListPtr from_CIEXYZ;/* Pointer to an array of function */ /* pointers such that when the */ /* functions are executed in sequence */ /* will convert a XcmsColor structure */ /* from CIEXYZ space to this color */ /* space. */ int inverse_flag; /* If 1, indicates that for 0 <= i < n */ /* where n is the number of function */ /* pointers in the lists to_CIEXYZ */ /* and from_CIEXYZ; for each function */ /* to_CIEXYZ[i] its inverse function */ /* is from_CIEXYZ[n - i]. */ } XcmsColorSpace; /* * Screen Color Characterization Function Set -- per device class * color space conversion functions. */ typedef struct _XcmsFunctionSet { XcmsColorSpace **DDColorSpaces; /* Pointer to an array of pointers to */ /* Device-DEPENDENT color spaces */ /* understood by this SCCFuncSet. */ XcmsScreenInitProc screenInitProc; /* Screen initialization function that */ /* reads Screen Color Characterization*/ /* Data off properties on the screen's*/ /* root window. */ XcmsScreenFreeProc screenFreeProc; /* Function that frees the SCCData */ /* structures. */ } XcmsFunctionSet; _XFUNCPROTOBEGIN extern Status XcmsAddColorSpace ( XcmsColorSpace* /* pColorSpace */ ); extern Status XcmsAddFunctionSet ( XcmsFunctionSet* /* functionSet */ ); extern Status XcmsAllocColor ( Display* /* dpy */, Colormap /* colormap */, XcmsColor* /* color_in_out */, XcmsColorFormat /* result_format */ ); extern Status XcmsAllocNamedColor ( Display* /* dpy */, Colormap /* colormap */, _Xconst char* /* color_string */, XcmsColor* /* color_scrn_return */, XcmsColor* /* color_exact_return */, XcmsColorFormat /* result_format */ ); extern XcmsCCC XcmsCCCOfColormap ( Display* /* dpy */, Colormap /* colormap */ ); extern Status XcmsCIELabClipab( XcmsCCC /* ccc */, XcmsColor* /* colors_in_out */, unsigned int /* ncolors */, unsigned int /* index */, Bool* /* compression_flags_return */ ); extern Status XcmsCIELabClipL( XcmsCCC /* ccc */, XcmsColor* /* colors_in_out */, unsigned int /* ncolors */, unsigned int /* index */, Bool* /* compression_flags_return */ ); extern Status XcmsCIELabClipLab( XcmsCCC /* ccc */, XcmsColor* /* colors_in_out */, unsigned int /* ncolors */, unsigned int /* index */, Bool* /* compression_flags_return */ ); extern Status XcmsCIELabQueryMaxC ( XcmsCCC /* ccc */, XcmsFloat /* hue_angle */, XcmsFloat /* L_star */, XcmsColor* /* color_return */ ); extern Status XcmsCIELabQueryMaxL ( XcmsCCC /* ccc */, XcmsFloat /* hue_angle */, XcmsFloat /* chroma */, XcmsColor* /* color_return */ ); extern Status XcmsCIELabQueryMaxLC ( XcmsCCC /* ccc */, XcmsFloat /* hue_angle */, XcmsColor* /* color_return */ ); extern Status XcmsCIELabQueryMinL ( XcmsCCC /* ccc */, XcmsFloat /* hue_angle */, XcmsFloat /* chroma */, XcmsColor* /* color_return */ ); extern Status XcmsCIELabToCIEXYZ ( XcmsCCC /* ccc */, XcmsColor* /* white_point */, XcmsColor* /* colors */, unsigned int /* ncolors */ ); extern Status XcmsCIELabWhiteShiftColors( XcmsCCC /* ccc */, XcmsColor* /* initial_white_point*/, XcmsColor* /* target_white_point*/, XcmsColorFormat /* target_format */, XcmsColor* /* colors_in_out */, unsigned int /* ncolors */, Bool* /* compression_flags_return */ ); extern Status XcmsCIELuvClipL( XcmsCCC /* ccc */, XcmsColor* /* colors_in_out */, unsigned int /* ncolors */, unsigned int /* index */, Bool* /* compression_flags_return */ ); extern Status XcmsCIELuvClipLuv( XcmsCCC /* ccc */, XcmsColor* /* colors_in_out */, unsigned int /* ncolors */, unsigned int /* index */, Bool* /* compression_flags_return */ ); extern Status XcmsCIELuvClipuv( XcmsCCC /* ccc */, XcmsColor* /* colors_in_out */, unsigned int /* ncolors */, unsigned int /* index */, Bool* /* compression_flags_return */ ); extern Status XcmsCIELuvQueryMaxC ( XcmsCCC /* ccc */, XcmsFloat /* hue_angle */, XcmsFloat /* L_star */, XcmsColor* /* color_return */ ); extern Status XcmsCIELuvQueryMaxL ( XcmsCCC /* ccc */, XcmsFloat /* hue_angle */, XcmsFloat /* chroma */, XcmsColor* /* color_return */ ); extern Status XcmsCIELuvQueryMaxLC ( XcmsCCC /* ccc */, XcmsFloat /* hue_angle */, XcmsColor* /* color_return */ ); extern Status XcmsCIELuvQueryMinL ( XcmsCCC /* ccc */, XcmsFloat /* hue_angle */, XcmsFloat /* chroma */, XcmsColor* /* color_return */ ); extern Status XcmsCIELuvToCIEuvY ( XcmsCCC /* ccc */, XcmsColor* /* white_point */, XcmsColor* /* colors */, unsigned int /* ncolors */ ); extern Status XcmsCIELuvWhiteShiftColors( XcmsCCC /* ccc */, XcmsColor* /* initial_white_point*/, XcmsColor* /* target_white_point*/, XcmsColorFormat /* target_format */, XcmsColor* /* colors_in_out */, unsigned int /* ncolors */, Bool* /* compression_flags_return */ ); extern Status XcmsCIEXYZToCIELab ( XcmsCCC /* ccc */, XcmsColor* /* white_point */, XcmsColor* /* colors */, unsigned int /* ncolors */ ); extern Status XcmsCIEXYZToCIEuvY ( XcmsCCC /* ccc */, XcmsColor* /* white_point */, XcmsColor* /* colors */, unsigned int /* ncolors */ ); extern Status XcmsCIEXYZToCIExyY ( XcmsCCC /* ccc */, XcmsColor* /* white_point */, XcmsColor* /* colors */, unsigned int /* ncolors */ ); extern Status XcmsCIEXYZToRGBi ( XcmsCCC /* ccc */, XcmsColor* /* colors */, unsigned int /* ncolors */, Bool* /* compression_flags_return */ ); extern Status XcmsCIEuvYToCIELuv ( XcmsCCC /* ccc */, XcmsColor* /* white_point */, XcmsColor* /* colors */, unsigned int /* ncolors */ ); extern Status XcmsCIEuvYToCIEXYZ ( XcmsCCC /* ccc */, XcmsColor* /* white_point */, XcmsColor* /* colors */, unsigned int /* ncolors */ ); extern Status XcmsCIEuvYToTekHVC ( XcmsCCC /* ccc */, XcmsColor* /* white_point */, XcmsColor* /* colors */, unsigned int /* ncolors */ ); extern Status XcmsCIExyYToCIEXYZ ( XcmsCCC /* ccc */, XcmsColor* /* white_point */, XcmsColor* /* colors */, unsigned int /* ncolors */ ); extern XcmsColor *XcmsClientWhitePointOfCCC ( XcmsCCC /* ccc */ ); extern Status XcmsConvertColors ( XcmsCCC /* ccc */, XcmsColor* /* colorArry_in_out */, unsigned int /* nColors */, XcmsColorFormat /* targetFormat */, Bool* /* compArry_return */ ); extern XcmsCCC XcmsCreateCCC ( Display* /* dpy */, int /* screenNumber */, Visual* /* visual */, XcmsColor* /* clientWhitePt */, XcmsCompressionProc /* gamutCompProc */, XPointer /* gamutCompClientData */, XcmsWhiteAdjustProc /* whitePtAdjProc */, XPointer /* whitePtAdjClientData */ ); extern XcmsCCC XcmsDefaultCCC ( Display* /* dpy */, int /* screenNumber */ ); extern Display *XcmsDisplayOfCCC ( XcmsCCC /* ccc */ ); extern XcmsColorFormat XcmsFormatOfPrefix ( char* /* prefix */ ); extern void XcmsFreeCCC ( XcmsCCC /* ccc */ ); extern Status XcmsLookupColor ( Display* /* dpy */, Colormap /* colormap */, _Xconst char* /* color_string */, XcmsColor* /* pColor_exact_in_out */, XcmsColor* /* pColor_scrn_in_out */, XcmsColorFormat /* result_format */ ); extern char *XcmsPrefixOfFormat ( XcmsColorFormat /* id */ ); extern Status XcmsQueryBlack ( XcmsCCC /* ccc */, XcmsColorFormat /* target_format */, XcmsColor* /* color_return */ ); extern Status XcmsQueryBlue ( XcmsCCC /* ccc */, XcmsColorFormat /* target_format */, XcmsColor* /* color_return */ ); extern Status XcmsQueryColor ( Display* /* dpy */, Colormap /* colormap */, XcmsColor* /* pColor_in_out */, XcmsColorFormat /* result_format */ ); extern Status XcmsQueryColors ( Display* /* dpy */, Colormap /* colormap */, XcmsColor* /* colorArry_in_out */, unsigned int /* nColors */, XcmsColorFormat /* result_format */ ); extern Status XcmsQueryGreen ( XcmsCCC /* ccc */, XcmsColorFormat /* target_format */, XcmsColor* /* color_return */ ); extern Status XcmsQueryRed ( XcmsCCC /* ccc */, XcmsColorFormat /* target_format */, XcmsColor* /* color_return */ ); extern Status XcmsQueryWhite ( XcmsCCC /* ccc */, XcmsColorFormat /* target_format */, XcmsColor* /* color_return */ ); extern Status XcmsRGBiToCIEXYZ ( XcmsCCC /* ccc */, XcmsColor* /* colors */, unsigned int /* ncolors */, Bool* /* compression_flags_return */ ); extern Status XcmsRGBiToRGB ( XcmsCCC /* ccc */, XcmsColor* /* colors */, unsigned int /* ncolors */, Bool* /* compression_flags_return */ ); extern Status XcmsRGBToRGBi ( XcmsCCC /* ccc */, XcmsColor* /* colors */, unsigned int /* ncolors */, Bool* /* compression_flags_return */ ); extern int XcmsScreenNumberOfCCC ( XcmsCCC /* ccc */ ); extern XcmsColor *XcmsScreenWhitePointOfCCC ( XcmsCCC /* ccc */ ); extern XcmsCCC XcmsSetCCCOfColormap( Display* /* dpy */, Colormap /* colormap */, XcmsCCC /* ccc */ ); extern XcmsCompressionProc XcmsSetCompressionProc ( XcmsCCC /* ccc */, XcmsCompressionProc /* compression_proc */, XPointer /* client_data */ ); extern XcmsWhiteAdjustProc XcmsSetWhiteAdjustProc ( XcmsCCC /* ccc */, XcmsWhiteAdjustProc /* white_adjust_proc */, XPointer /* client_data */ ); extern Status XcmsSetWhitePoint ( XcmsCCC /* ccc */, XcmsColor* /* color */ ); extern Status XcmsStoreColor ( Display* /* dpy */, Colormap /* colormap */, XcmsColor* /* pColor_in */ ); extern Status XcmsStoreColors ( Display* /* dpy */, Colormap /* colormap */, XcmsColor* /* colorArry_in */, unsigned int /* nColors */, Bool* /* compArry_return */ ); extern Status XcmsTekHVCClipC( XcmsCCC /* ccc */, XcmsColor* /* colors_in_out */, unsigned int /* ncolors */, unsigned int /* index */, Bool* /* compression_flags_return */ ); extern Status XcmsTekHVCClipV( XcmsCCC /* ccc */, XcmsColor* /* colors_in_out */, unsigned int /* ncolors */, unsigned int /* index */, Bool* /* compression_flags_return */ ); extern Status XcmsTekHVCClipVC( XcmsCCC /* ccc */, XcmsColor* /* colors_in_out */, unsigned int /* ncolors */, unsigned int /* index */, Bool* /* compression_flags_return */ ); extern Status XcmsTekHVCQueryMaxC ( XcmsCCC /* ccc */, XcmsFloat /* hue */, XcmsFloat /* value */, XcmsColor* /* color_return */ ); extern Status XcmsTekHVCQueryMaxV ( XcmsCCC /* ccc */, XcmsFloat /* hue */, XcmsFloat /* chroma */, XcmsColor* /* color_return */ ); extern Status XcmsTekHVCQueryMaxVC ( XcmsCCC /* ccc */, XcmsFloat /* hue */, XcmsColor* /* color_return */ ); extern Status XcmsTekHVCQueryMaxVSamples ( XcmsCCC /* ccc */, XcmsFloat /* hue */, XcmsColor* /* colors_return */, unsigned int /* nsamples */ ); extern Status XcmsTekHVCQueryMinV ( XcmsCCC /* ccc */, XcmsFloat /* hue */, XcmsFloat /* chroma */, XcmsColor* /* color_return */ ); extern Status XcmsTekHVCToCIEuvY ( XcmsCCC /* ccc */, XcmsColor* /* white_point */, XcmsColor* /* colors */, unsigned int /* ncolors */ ); extern Status XcmsTekHVCWhiteShiftColors( XcmsCCC /* ccc */, XcmsColor* /* initial_white_point*/, XcmsColor* /* target_white_point*/, XcmsColorFormat /* target_format */, XcmsColor* /* colors_in_out */, unsigned int /* ncolors */, Bool* /* compression_flags_return */ ); extern Visual *XcmsVisualOfCCC ( XcmsCCC /* ccc */ ); #ifdef __clang__ #pragma clang diagnostic pop #endif _XFUNCPROTOEND #endif /* _X11_XCMS_H_ */ */, unsigned int /* ncolors */, unsigned int /* index */, Bool* /* compression_flags_return */ ); extern Status XcmsCIELabClipL( XcmsCCC /*libX11-1.6.3/include/X11/Xresource.h000064401431060000012000000246041247741723500172100ustar00alancstaff00002660200006 /*********************************************************** Copyright 1987, 1988, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifndef _X11_XRESOURCE_H_ #define _X11_XRESOURCE_H_ #ifndef _XP_PRINT_SERVER_ #include #endif /**************************************************************** **************************************************************** *** *** *** *** *** X Resource Manager Intrinsics *** *** *** *** *** **************************************************************** ****************************************************************/ _XFUNCPROTOBEGIN /**************************************************************** * * Memory Management * ****************************************************************/ extern char *Xpermalloc( unsigned int /* size */ ); /**************************************************************** * * Quark Management * ****************************************************************/ typedef int XrmQuark, *XrmQuarkList; #define NULLQUARK ((XrmQuark) 0) typedef char *XrmString; #define NULLSTRING ((XrmString) 0) /* find quark for string, create new quark if none already exists */ extern XrmQuark XrmStringToQuark( _Xconst char* /* string */ ); extern XrmQuark XrmPermStringToQuark( _Xconst char* /* string */ ); /* find string for quark */ extern XrmString XrmQuarkToString( XrmQuark /* quark */ ); extern XrmQuark XrmUniqueQuark( void ); #define XrmStringsEqual(a1, a2) (strcmp(a1, a2) == 0) /**************************************************************** * * Conversion of Strings to Lists * ****************************************************************/ typedef enum {XrmBindTightly, XrmBindLoosely} XrmBinding, *XrmBindingList; extern void XrmStringToQuarkList( _Xconst char* /* string */, XrmQuarkList /* quarks_return */ ); extern void XrmStringToBindingQuarkList( _Xconst char* /* string */, XrmBindingList /* bindings_return */, XrmQuarkList /* quarks_return */ ); /**************************************************************** * * Name and Class lists. * ****************************************************************/ typedef XrmQuark XrmName; typedef XrmQuarkList XrmNameList; #define XrmNameToString(name) XrmQuarkToString(name) #define XrmStringToName(string) XrmStringToQuark(string) #define XrmStringToNameList(str, name) XrmStringToQuarkList(str, name) typedef XrmQuark XrmClass; typedef XrmQuarkList XrmClassList; #define XrmClassToString(c_class) XrmQuarkToString(c_class) #define XrmStringToClass(c_class) XrmStringToQuark(c_class) #define XrmStringToClassList(str,c_class) XrmStringToQuarkList(str, c_class) /**************************************************************** * * Resource Representation Types and Values * ****************************************************************/ typedef XrmQuark XrmRepresentation; #define XrmStringToRepresentation(string) XrmStringToQuark(string) #define XrmRepresentationToString(type) XrmQuarkToString(type) typedef struct { unsigned int size; XPointer addr; } XrmValue, *XrmValuePtr; /**************************************************************** * * Resource Manager Functions * ****************************************************************/ typedef struct _XrmHashBucketRec *XrmHashBucket; typedef XrmHashBucket *XrmHashTable; typedef XrmHashTable XrmSearchList[]; typedef struct _XrmHashBucketRec *XrmDatabase; extern void XrmDestroyDatabase( XrmDatabase /* database */ ); extern void XrmQPutResource( XrmDatabase* /* database */, XrmBindingList /* bindings */, XrmQuarkList /* quarks */, XrmRepresentation /* type */, XrmValue* /* value */ ); extern void XrmPutResource( XrmDatabase* /* database */, _Xconst char* /* specifier */, _Xconst char* /* type */, XrmValue* /* value */ ); extern void XrmQPutStringResource( XrmDatabase* /* database */, XrmBindingList /* bindings */, XrmQuarkList /* quarks */, _Xconst char* /* value */ ); extern void XrmPutStringResource( XrmDatabase* /* database */, _Xconst char* /* specifier */, _Xconst char* /* value */ ); extern void XrmPutLineResource( XrmDatabase* /* database */, _Xconst char* /* line */ ); extern Bool XrmQGetResource( XrmDatabase /* database */, XrmNameList /* quark_name */, XrmClassList /* quark_class */, XrmRepresentation* /* quark_type_return */, XrmValue* /* value_return */ ); extern Bool XrmGetResource( XrmDatabase /* database */, _Xconst char* /* str_name */, _Xconst char* /* str_class */, char** /* str_type_return */, XrmValue* /* value_return */ ); extern Bool XrmQGetSearchList( XrmDatabase /* database */, XrmNameList /* names */, XrmClassList /* classes */, XrmSearchList /* list_return */, int /* list_length */ ); extern Bool XrmQGetSearchResource( XrmSearchList /* list */, XrmName /* name */, XrmClass /* class */, XrmRepresentation* /* type_return */, XrmValue* /* value_return */ ); /**************************************************************** * * Resource Database Management * ****************************************************************/ #ifndef _XP_PRINT_SERVER_ extern void XrmSetDatabase( Display* /* display */, XrmDatabase /* database */ ); extern XrmDatabase XrmGetDatabase( Display* /* display */ ); #endif /* !_XP_PRINT_SERVER_ */ extern XrmDatabase XrmGetFileDatabase( _Xconst char* /* filename */ ); extern Status XrmCombineFileDatabase( _Xconst char* /* filename */, XrmDatabase* /* target */, Bool /* override */ ); extern XrmDatabase XrmGetStringDatabase( _Xconst char* /* data */ /* null terminated string */ ); extern void XrmPutFileDatabase( XrmDatabase /* database */, _Xconst char* /* filename */ ); extern void XrmMergeDatabases( XrmDatabase /* source_db */, XrmDatabase* /* target_db */ ); extern void XrmCombineDatabase( XrmDatabase /* source_db */, XrmDatabase* /* target_db */, Bool /* override */ ); #define XrmEnumAllLevels 0 #define XrmEnumOneLevel 1 extern Bool XrmEnumerateDatabase( XrmDatabase /* db */, XrmNameList /* name_prefix */, XrmClassList /* class_prefix */, int /* mode */, Bool (*)( XrmDatabase* /* db */, XrmBindingList /* bindings */, XrmQuarkList /* quarks */, XrmRepresentation* /* type */, XrmValue* /* value */, XPointer /* closure */ ) /* proc */, XPointer /* closure */ ); extern const char *XrmLocaleOfDatabase( XrmDatabase /* database */ ); /**************************************************************** * * Command line option mapping to resource entries * ****************************************************************/ typedef enum { XrmoptionNoArg, /* Value is specified in OptionDescRec.value */ XrmoptionIsArg, /* Value is the option string itself */ XrmoptionStickyArg, /* Value is characters immediately following option */ XrmoptionSepArg, /* Value is next argument in argv */ XrmoptionResArg, /* Resource and value in next argument in argv */ XrmoptionSkipArg, /* Ignore this option and the next argument in argv */ XrmoptionSkipLine, /* Ignore this option and the rest of argv */ XrmoptionSkipNArgs /* Ignore this option and the next OptionDescRes.value arguments in argv */ } XrmOptionKind; typedef struct { char *option; /* Option abbreviation in argv */ char *specifier; /* Resource specifier */ XrmOptionKind argKind; /* Which style of option it is */ XPointer value; /* Value to provide if XrmoptionNoArg */ } XrmOptionDescRec, *XrmOptionDescList; extern void XrmParseCommand( XrmDatabase* /* database */, XrmOptionDescList /* table */, int /* table_count */, _Xconst char* /* name */, int* /* argc_in_out */, char** /* argv_in_out */ ); _XFUNCPROTOEND #endif /* _X11_XRESOURCE_H_ */ /* DON'T ADD STUFF AFTER THIS #endif */ ion for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and thalibX11-1.6.3/include/X11/Xutil.h000064401431060000012000000515511247741723500163370ustar00alancstaff00002660200006 /*********************************************************** Copyright 1987, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifndef _X11_XUTIL_H_ #define _X11_XUTIL_H_ /* You must include before including this file */ #include #include /* The Xlib structs are full of implicit padding to properly align members. We can't clean that up without breaking ABI, so tell clang not to bother complaining about it. */ #ifdef __clang__ #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wpadded" #endif /* * Bitmask returned by XParseGeometry(). Each bit tells if the corresponding * value (x, y, width, height) was found in the parsed string. */ #define NoValue 0x0000 #define XValue 0x0001 #define YValue 0x0002 #define WidthValue 0x0004 #define HeightValue 0x0008 #define AllValues 0x000F #define XNegative 0x0010 #define YNegative 0x0020 /* * new version containing base_width, base_height, and win_gravity fields; * used with WM_NORMAL_HINTS. */ typedef struct { long flags; /* marks which fields in this structure are defined */ int x, y; /* obsolete for new window mgrs, but clients */ int width, height; /* should set so old wm's don't mess up */ int min_width, min_height; int max_width, max_height; int width_inc, height_inc; struct { int x; /* numerator */ int y; /* denominator */ } min_aspect, max_aspect; int base_width, base_height; /* added by ICCCM version 1 */ int win_gravity; /* added by ICCCM version 1 */ } XSizeHints; /* * The next block of definitions are for window manager properties that * clients and applications use for communication. */ /* flags argument in size hints */ #define USPosition (1L << 0) /* user specified x, y */ #define USSize (1L << 1) /* user specified width, height */ #define PPosition (1L << 2) /* program specified position */ #define PSize (1L << 3) /* program specified size */ #define PMinSize (1L << 4) /* program specified minimum size */ #define PMaxSize (1L << 5) /* program specified maximum size */ #define PResizeInc (1L << 6) /* program specified resize increments */ #define PAspect (1L << 7) /* program specified min and max aspect ratios */ #define PBaseSize (1L << 8) /* program specified base for incrementing */ #define PWinGravity (1L << 9) /* program specified window gravity */ /* obsolete */ #define PAllHints (PPosition|PSize|PMinSize|PMaxSize|PResizeInc|PAspect) typedef struct { long flags; /* marks which fields in this structure are defined */ Bool input; /* does this application rely on the window manager to get keyboard input? */ int initial_state; /* see below */ Pixmap icon_pixmap; /* pixmap to be used as icon */ Window icon_window; /* window to be used as icon */ int icon_x, icon_y; /* initial position of icon */ Pixmap icon_mask; /* icon mask bitmap */ XID window_group; /* id of related window group */ /* this structure may be extended in the future */ } XWMHints; /* definition for flags of XWMHints */ #define InputHint (1L << 0) #define StateHint (1L << 1) #define IconPixmapHint (1L << 2) #define IconWindowHint (1L << 3) #define IconPositionHint (1L << 4) #define IconMaskHint (1L << 5) #define WindowGroupHint (1L << 6) #define AllHints (InputHint|StateHint|IconPixmapHint|IconWindowHint| \ IconPositionHint|IconMaskHint|WindowGroupHint) #define XUrgencyHint (1L << 8) /* definitions for initial window state */ #define WithdrawnState 0 /* for windows that are not mapped */ #define NormalState 1 /* most applications want to start this way */ #define IconicState 3 /* application wants to start as an icon */ /* * Obsolete states no longer defined by ICCCM */ #define DontCareState 0 /* don't know or care */ #define ZoomState 2 /* application wants to start zoomed */ #define InactiveState 4 /* application believes it is seldom used; */ /* some wm's may put it on inactive menu */ /* * new structure for manipulating TEXT properties; used with WM_NAME, * WM_ICON_NAME, WM_CLIENT_MACHINE, and WM_COMMAND. */ typedef struct { unsigned char *value; /* same as Property routines */ Atom encoding; /* prop type */ int format; /* prop data format: 8, 16, or 32 */ unsigned long nitems; /* number of data items in value */ } XTextProperty; #define XNoMemory -1 #define XLocaleNotSupported -2 #define XConverterNotFound -3 typedef enum { XStringStyle, /* STRING */ XCompoundTextStyle, /* COMPOUND_TEXT */ XTextStyle, /* text in owner's encoding (current locale)*/ XStdICCTextStyle, /* STRING, else COMPOUND_TEXT */ /* The following is an XFree86 extension, introduced in November 2000 */ XUTF8StringStyle /* UTF8_STRING */ } XICCEncodingStyle; typedef struct { int min_width, min_height; int max_width, max_height; int width_inc, height_inc; } XIconSize; typedef struct { char *res_name; char *res_class; } XClassHint; #ifdef XUTIL_DEFINE_FUNCTIONS extern int XDestroyImage( XImage *ximage); extern unsigned long XGetPixel( XImage *ximage, int x, int y); extern int XPutPixel( XImage *ximage, int x, int y, unsigned long pixel); extern XImage *XSubImage( XImage *ximage, int x, int y, unsigned int width, unsigned int height); extern int XAddPixel( XImage *ximage, long value); #else /* * These macros are used to give some sugar to the image routines so that * naive people are more comfortable with them. */ #define XDestroyImage(ximage) \ ((*((ximage)->f.destroy_image))((ximage))) #define XGetPixel(ximage, x, y) \ ((*((ximage)->f.get_pixel))((ximage), (x), (y))) #define XPutPixel(ximage, x, y, pixel) \ ((*((ximage)->f.put_pixel))((ximage), (x), (y), (pixel))) #define XSubImage(ximage, x, y, width, height) \ ((*((ximage)->f.sub_image))((ximage), (x), (y), (width), (height))) #define XAddPixel(ximage, value) \ ((*((ximage)->f.add_pixel))((ximage), (value))) #endif /* * Compose sequence status structure, used in calling XLookupString. */ typedef struct _XComposeStatus { XPointer compose_ptr; /* state table pointer */ int chars_matched; /* match state */ } XComposeStatus; /* * Keysym macros, used on Keysyms to test for classes of symbols */ #define IsKeypadKey(keysym) \ (((KeySym)(keysym) >= XK_KP_Space) && ((KeySym)(keysym) <= XK_KP_Equal)) #define IsPrivateKeypadKey(keysym) \ (((KeySym)(keysym) >= 0x11000000) && ((KeySym)(keysym) <= 0x1100FFFF)) #define IsCursorKey(keysym) \ (((KeySym)(keysym) >= XK_Home) && ((KeySym)(keysym) < XK_Select)) #define IsPFKey(keysym) \ (((KeySym)(keysym) >= XK_KP_F1) && ((KeySym)(keysym) <= XK_KP_F4)) #define IsFunctionKey(keysym) \ (((KeySym)(keysym) >= XK_F1) && ((KeySym)(keysym) <= XK_F35)) #define IsMiscFunctionKey(keysym) \ (((KeySym)(keysym) >= XK_Select) && ((KeySym)(keysym) <= XK_Break)) #ifdef XK_XKB_KEYS #define IsModifierKey(keysym) \ ((((KeySym)(keysym) >= XK_Shift_L) && ((KeySym)(keysym) <= XK_Hyper_R)) \ || (((KeySym)(keysym) >= XK_ISO_Lock) && \ ((KeySym)(keysym) <= XK_ISO_Level5_Lock)) \ || ((KeySym)(keysym) == XK_Mode_switch) \ || ((KeySym)(keysym) == XK_Num_Lock)) #else #define IsModifierKey(keysym) \ ((((KeySym)(keysym) >= XK_Shift_L) && ((KeySym)(keysym) <= XK_Hyper_R)) \ || ((KeySym)(keysym) == XK_Mode_switch) \ || ((KeySym)(keysym) == XK_Num_Lock)) #endif /* * opaque reference to Region data type */ typedef struct _XRegion *Region; /* Return values from XRectInRegion() */ #define RectangleOut 0 #define RectangleIn 1 #define RectanglePart 2 /* * Information used by the visual utility routines to find desired visual * type from the many visuals a display may support. */ typedef struct { Visual *visual; VisualID visualid; int screen; int depth; #if defined(__cplusplus) || defined(c_plusplus) int c_class; /* C++ */ #else int class; #endif unsigned long red_mask; unsigned long green_mask; unsigned long blue_mask; int colormap_size; int bits_per_rgb; } XVisualInfo; #define VisualNoMask 0x0 #define VisualIDMask 0x1 #define VisualScreenMask 0x2 #define VisualDepthMask 0x4 #define VisualClassMask 0x8 #define VisualRedMaskMask 0x10 #define VisualGreenMaskMask 0x20 #define VisualBlueMaskMask 0x40 #define VisualColormapSizeMask 0x80 #define VisualBitsPerRGBMask 0x100 #define VisualAllMask 0x1FF /* * This defines a window manager property that clients may use to * share standard color maps of type RGB_COLOR_MAP: */ typedef struct { Colormap colormap; unsigned long red_max; unsigned long red_mult; unsigned long green_max; unsigned long green_mult; unsigned long blue_max; unsigned long blue_mult; unsigned long base_pixel; VisualID visualid; /* added by ICCCM version 1 */ XID killid; /* added by ICCCM version 1 */ } XStandardColormap; #define ReleaseByFreeingColormap ((XID) 1L) /* for killid field above */ /* * return codes for XReadBitmapFile and XWriteBitmapFile */ #define BitmapSuccess 0 #define BitmapOpenFailed 1 #define BitmapFileInvalid 2 #define BitmapNoMemory 3 /**************************************************************** * * Context Management * ****************************************************************/ /* Associative lookup table return codes */ #define XCSUCCESS 0 /* No error. */ #define XCNOMEM 1 /* Out of memory */ #define XCNOENT 2 /* No entry in table */ typedef int XContext; #define XUniqueContext() ((XContext) XrmUniqueQuark()) #define XStringToContext(string) ((XContext) XrmStringToQuark(string)) _XFUNCPROTOBEGIN /* The following declarations are alphabetized. */ extern XClassHint *XAllocClassHint ( void ); extern XIconSize *XAllocIconSize ( void ); extern XSizeHints *XAllocSizeHints ( void ); extern XStandardColormap *XAllocStandardColormap ( void ); extern XWMHints *XAllocWMHints ( void ); extern int XClipBox( Region /* r */, XRectangle* /* rect_return */ ); extern Region XCreateRegion( void ); extern const char *XDefaultString (void); extern int XDeleteContext( Display* /* display */, XID /* rid */, XContext /* context */ ); extern int XDestroyRegion( Region /* r */ ); extern int XEmptyRegion( Region /* r */ ); extern int XEqualRegion( Region /* r1 */, Region /* r2 */ ); extern int XFindContext( Display* /* display */, XID /* rid */, XContext /* context */, XPointer* /* data_return */ ); extern Status XGetClassHint( Display* /* display */, Window /* w */, XClassHint* /* class_hints_return */ ); extern Status XGetIconSizes( Display* /* display */, Window /* w */, XIconSize** /* size_list_return */, int* /* count_return */ ); extern Status XGetNormalHints( Display* /* display */, Window /* w */, XSizeHints* /* hints_return */ ); extern Status XGetRGBColormaps( Display* /* display */, Window /* w */, XStandardColormap** /* stdcmap_return */, int* /* count_return */, Atom /* property */ ); extern Status XGetSizeHints( Display* /* display */, Window /* w */, XSizeHints* /* hints_return */, Atom /* property */ ); extern Status XGetStandardColormap( Display* /* display */, Window /* w */, XStandardColormap* /* colormap_return */, Atom /* property */ ); extern Status XGetTextProperty( Display* /* display */, Window /* window */, XTextProperty* /* text_prop_return */, Atom /* property */ ); extern XVisualInfo *XGetVisualInfo( Display* /* display */, long /* vinfo_mask */, XVisualInfo* /* vinfo_template */, int* /* nitems_return */ ); extern Status XGetWMClientMachine( Display* /* display */, Window /* w */, XTextProperty* /* text_prop_return */ ); extern XWMHints *XGetWMHints( Display* /* display */, Window /* w */ ); extern Status XGetWMIconName( Display* /* display */, Window /* w */, XTextProperty* /* text_prop_return */ ); extern Status XGetWMName( Display* /* display */, Window /* w */, XTextProperty* /* text_prop_return */ ); extern Status XGetWMNormalHints( Display* /* display */, Window /* w */, XSizeHints* /* hints_return */, long* /* supplied_return */ ); extern Status XGetWMSizeHints( Display* /* display */, Window /* w */, XSizeHints* /* hints_return */, long* /* supplied_return */, Atom /* property */ ); extern Status XGetZoomHints( Display* /* display */, Window /* w */, XSizeHints* /* zhints_return */ ); extern int XIntersectRegion( Region /* sra */, Region /* srb */, Region /* dr_return */ ); extern void XConvertCase( KeySym /* sym */, KeySym* /* lower */, KeySym* /* upper */ ); extern int XLookupString( XKeyEvent* /* event_struct */, char* /* buffer_return */, int /* bytes_buffer */, KeySym* /* keysym_return */, XComposeStatus* /* status_in_out */ ); extern Status XMatchVisualInfo( Display* /* display */, int /* screen */, int /* depth */, int /* class */, XVisualInfo* /* vinfo_return */ ); extern int XOffsetRegion( Region /* r */, int /* dx */, int /* dy */ ); extern Bool XPointInRegion( Region /* r */, int /* x */, int /* y */ ); extern Region XPolygonRegion( XPoint* /* points */, int /* n */, int /* fill_rule */ ); extern int XRectInRegion( Region /* r */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */ ); extern int XSaveContext( Display* /* display */, XID /* rid */, XContext /* context */, _Xconst char* /* data */ ); extern int XSetClassHint( Display* /* display */, Window /* w */, XClassHint* /* class_hints */ ); extern int XSetIconSizes( Display* /* display */, Window /* w */, XIconSize* /* size_list */, int /* count */ ); extern int XSetNormalHints( Display* /* display */, Window /* w */, XSizeHints* /* hints */ ); extern void XSetRGBColormaps( Display* /* display */, Window /* w */, XStandardColormap* /* stdcmaps */, int /* count */, Atom /* property */ ); extern int XSetSizeHints( Display* /* display */, Window /* w */, XSizeHints* /* hints */, Atom /* property */ ); extern int XSetStandardProperties( Display* /* display */, Window /* w */, _Xconst char* /* window_name */, _Xconst char* /* icon_name */, Pixmap /* icon_pixmap */, char** /* argv */, int /* argc */, XSizeHints* /* hints */ ); extern void XSetTextProperty( Display* /* display */, Window /* w */, XTextProperty* /* text_prop */, Atom /* property */ ); extern void XSetWMClientMachine( Display* /* display */, Window /* w */, XTextProperty* /* text_prop */ ); extern int XSetWMHints( Display* /* display */, Window /* w */, XWMHints* /* wm_hints */ ); extern void XSetWMIconName( Display* /* display */, Window /* w */, XTextProperty* /* text_prop */ ); extern void XSetWMName( Display* /* display */, Window /* w */, XTextProperty* /* text_prop */ ); extern void XSetWMNormalHints( Display* /* display */, Window /* w */, XSizeHints* /* hints */ ); extern void XSetWMProperties( Display* /* display */, Window /* w */, XTextProperty* /* window_name */, XTextProperty* /* icon_name */, char** /* argv */, int /* argc */, XSizeHints* /* normal_hints */, XWMHints* /* wm_hints */, XClassHint* /* class_hints */ ); extern void XmbSetWMProperties( Display* /* display */, Window /* w */, _Xconst char* /* window_name */, _Xconst char* /* icon_name */, char** /* argv */, int /* argc */, XSizeHints* /* normal_hints */, XWMHints* /* wm_hints */, XClassHint* /* class_hints */ ); extern void Xutf8SetWMProperties( Display* /* display */, Window /* w */, _Xconst char* /* window_name */, _Xconst char* /* icon_name */, char** /* argv */, int /* argc */, XSizeHints* /* normal_hints */, XWMHints* /* wm_hints */, XClassHint* /* class_hints */ ); extern void XSetWMSizeHints( Display* /* display */, Window /* w */, XSizeHints* /* hints */, Atom /* property */ ); extern int XSetRegion( Display* /* display */, GC /* gc */, Region /* r */ ); extern void XSetStandardColormap( Display* /* display */, Window /* w */, XStandardColormap* /* colormap */, Atom /* property */ ); extern int XSetZoomHints( Display* /* display */, Window /* w */, XSizeHints* /* zhints */ ); extern int XShrinkRegion( Region /* r */, int /* dx */, int /* dy */ ); extern Status XStringListToTextProperty( char** /* list */, int /* count */, XTextProperty* /* text_prop_return */ ); extern int XSubtractRegion( Region /* sra */, Region /* srb */, Region /* dr_return */ ); extern int XmbTextListToTextProperty( Display* display, char** list, int count, XICCEncodingStyle style, XTextProperty* text_prop_return ); extern int XwcTextListToTextProperty( Display* display, wchar_t** list, int count, XICCEncodingStyle style, XTextProperty* text_prop_return ); extern int Xutf8TextListToTextProperty( Display* display, char** list, int count, XICCEncodingStyle style, XTextProperty* text_prop_return ); extern void XwcFreeStringList( wchar_t** list ); extern Status XTextPropertyToStringList( XTextProperty* /* text_prop */, char*** /* list_return */, int* /* count_return */ ); extern int XmbTextPropertyToTextList( Display* display, const XTextProperty* text_prop, char*** list_return, int* count_return ); extern int XwcTextPropertyToTextList( Display* display, const XTextProperty* text_prop, wchar_t*** list_return, int* count_return ); extern int Xutf8TextPropertyToTextList( Display* display, const XTextProperty* text_prop, char*** list_return, int* count_return ); extern int XUnionRectWithRegion( XRectangle* /* rectangle */, Region /* src_region */, Region /* dest_region_return */ ); extern int XUnionRegion( Region /* sra */, Region /* srb */, Region /* dr_return */ ); extern int XWMGeometry( Display* /* display */, int /* screen_number */, _Xconst char* /* user_geometry */, _Xconst char* /* default_geometry */, unsigned int /* border_width */, XSizeHints* /* hints */, int* /* x_return */, int* /* y_return */, int* /* width_return */, int* /* height_return */, int* /* gravity_return */ ); extern int XXorRegion( Region /* sra */, Region /* srb */, Region /* dr_return */ ); #ifdef __clang__ #pragma clang diagnostic pop #endif _XFUNCPROTOEND #endif /* _X11_XUTIL_H_ */ eturn codes for XReadBitmapFile and XWriteBitmapFile */ #define BitmapSuccess 0 #define BitmapOpenFailed 1 #define BitmapFileInvalid 2 #define BitmlibX11-1.6.3/include/X11/Xregion.h000064401431060000012000000134751247741723500166500ustar00alancstaff00002660200006/************************************************************************ Copyright 1987, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ************************************************************************/ #ifndef _X11_XREGION_H_ #define _X11_XREGION_H_ typedef struct { short x1, x2, y1, y2; } Box, BOX, BoxRec, *BoxPtr; typedef struct { short x, y, width, height; }RECTANGLE, RectangleRec, *RectanglePtr; #define TRUE 1 #define FALSE 0 #define MAXSHORT 32767 #define MINSHORT -MAXSHORT #ifndef MAX #define MAX(a,b) (((a) > (b)) ? (a) : (b)) #endif #ifndef MIN #define MIN(a,b) (((a) < (b)) ? (a) : (b)) #endif /* * clip region */ typedef struct _XRegion { long size; long numRects; BOX *rects; BOX extents; } REGION; /* Xutil.h contains the declaration: * typedef struct _XRegion *Region; */ /* 1 if two BOXs overlap. * 0 if two BOXs do not overlap. * Remember, x2 and y2 are not in the region */ #define EXTENTCHECK(r1, r2) \ ((r1)->x2 > (r2)->x1 && \ (r1)->x1 < (r2)->x2 && \ (r1)->y2 > (r2)->y1 && \ (r1)->y1 < (r2)->y2) /* * update region extents */ #define EXTENTS(r,idRect){\ if((r)->x1 < (idRect)->extents.x1)\ (idRect)->extents.x1 = (r)->x1;\ if((r)->y1 < (idRect)->extents.y1)\ (idRect)->extents.y1 = (r)->y1;\ if((r)->x2 > (idRect)->extents.x2)\ (idRect)->extents.x2 = (r)->x2;\ if((r)->y2 > (idRect)->extents.y2)\ (idRect)->extents.y2 = (r)->y2;\ } /* * Check to see if there is enough memory in the present region. */ #define MEMCHECK(reg, rect, firstrect){\ if ((reg)->numRects >= ((reg)->size - 1)){\ BoxPtr tmpRect = Xrealloc ((firstrect), \ (2 * (sizeof(BOX)) * ((reg)->size))); \ if (tmpRect == NULL) \ return(0);\ (firstrect) = tmpRect; \ (reg)->size *= 2;\ (rect) = &(firstrect)[(reg)->numRects];\ }\ } /* this routine checks to see if the previous rectangle is the same * or subsumes the new rectangle to add. */ #define CHECK_PREVIOUS(Reg, R, Rx1, Ry1, Rx2, Ry2)\ (!(((Reg)->numRects > 0)&&\ ((R-1)->y1 == (Ry1)) &&\ ((R-1)->y2 == (Ry2)) &&\ ((R-1)->x1 <= (Rx1)) &&\ ((R-1)->x2 >= (Rx2)))) /* add a rectangle to the given Region */ #define ADDRECT(reg, r, rx1, ry1, rx2, ry2){\ if (((rx1) < (rx2)) && ((ry1) < (ry2)) &&\ CHECK_PREVIOUS((reg), (r), (rx1), (ry1), (rx2), (ry2))){\ (r)->x1 = (rx1);\ (r)->y1 = (ry1);\ (r)->x2 = (rx2);\ (r)->y2 = (ry2);\ EXTENTS((r), (reg));\ (reg)->numRects++;\ (r)++;\ }\ } /* add a rectangle to the given Region */ #define ADDRECTNOX(reg, r, rx1, ry1, rx2, ry2){\ if ((rx1 < rx2) && (ry1 < ry2) &&\ CHECK_PREVIOUS((reg), (r), (rx1), (ry1), (rx2), (ry2))){\ (r)->x1 = (rx1);\ (r)->y1 = (ry1);\ (r)->x2 = (rx2);\ (r)->y2 = (ry2);\ (reg)->numRects++;\ (r)++;\ }\ } #define EMPTY_REGION(pReg) pReg->numRects = 0 #define REGION_NOT_EMPTY(pReg) pReg->numRects #define INBOX(r, x, y) \ ( ( ((r).x2 > x)) && \ ( ((r).x1 <= x)) && \ ( ((r).y2 > y)) && \ ( ((r).y1 <= y)) ) /* * number of points to buffer before sending them off * to scanlines() : Must be an even number */ #define NUMPTSTOBUFFER 200 /* * used to allocate buffers for points and link * the buffers together */ typedef struct _POINTBLOCK { XPoint pts[NUMPTSTOBUFFER]; struct _POINTBLOCK *next; } POINTBLOCK; #endif /* _X11_XREGION_H_ */ libX11-1.6.3/include/X11/XlibConf.h.in000064401431060000012000000027161247741723500173420ustar00alancstaff00002660200006/* * Copyright © 2005 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of Keith Packard not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. Keith Packard makes no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #ifndef _XLIBCONF_H_ #define _XLIBCONF_H_ /* * This header file exports defines necessary to correctly * use Xlibint.h both inside Xlib and by external libraries * such as extensions. */ /* Threading support? */ #undef XTHREADS /* Use multi-threaded libc functions? */ #undef XUSE_MTSAFE_API #endif /* _XLIBCONF_H_ */ libX11-1.6.3/include/X11/Xlib-xcb.h000064401431060000012000000007721247741723500167010ustar00alancstaff00002660200006/* Copyright (C) 2003-2006 Jamey Sharp, Josh Triplett * This file is licensed under the MIT license. See the file COPYING. */ #ifndef _X11_XLIB_XCB_H_ #define _X11_XLIB_XCB_H_ #include #include #include _XFUNCPROTOBEGIN xcb_connection_t *XGetXCBConnection(Display *dpy); enum XEventQueueOwner { XlibOwnsEventQueue = 0, XCBOwnsEventQueue }; void XSetEventQueueOwner(Display *dpy, enum XEventQueueOwner owner); _XFUNCPROTOEND #endif /* _X11_XLIB_XCB_H_ */ libX11-1.6.3/include/X11/Xlocale.h000064401431060000012000000024211247741723500166110ustar00alancstaff00002660200006/* Copyright 1991, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifndef _X11_XLOCALE_H_ #define _X11_XLOCALE_H_ #include #include #include #endif /* _X11_XLOCALE_H_ */ libX11-1.6.3/include/X11/cursorfont.h000064401431060000012000000060561247741723500174360ustar00alancstaff00002660200006/* Copyright 1987, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifndef _X11_CURSORFONT_H_ #define _X11_CURSORFONT_H_ #define XC_num_glyphs 154 #define XC_X_cursor 0 #define XC_arrow 2 #define XC_based_arrow_down 4 #define XC_based_arrow_up 6 #define XC_boat 8 #define XC_bogosity 10 #define XC_bottom_left_corner 12 #define XC_bottom_right_corner 14 #define XC_bottom_side 16 #define XC_bottom_tee 18 #define XC_box_spiral 20 #define XC_center_ptr 22 #define XC_circle 24 #define XC_clock 26 #define XC_coffee_mug 28 #define XC_cross 30 #define XC_cross_reverse 32 #define XC_crosshair 34 #define XC_diamond_cross 36 #define XC_dot 38 #define XC_dotbox 40 #define XC_double_arrow 42 #define XC_draft_large 44 #define XC_draft_small 46 #define XC_draped_box 48 #define XC_exchange 50 #define XC_fleur 52 #define XC_gobbler 54 #define XC_gumby 56 #define XC_hand1 58 #define XC_hand2 60 #define XC_heart 62 #define XC_icon 64 #define XC_iron_cross 66 #define XC_left_ptr 68 #define XC_left_side 70 #define XC_left_tee 72 #define XC_leftbutton 74 #define XC_ll_angle 76 #define XC_lr_angle 78 #define XC_man 80 #define XC_middlebutton 82 #define XC_mouse 84 #define XC_pencil 86 #define XC_pirate 88 #define XC_plus 90 #define XC_question_arrow 92 #define XC_right_ptr 94 #define XC_right_side 96 #define XC_right_tee 98 #define XC_rightbutton 100 #define XC_rtl_logo 102 #define XC_sailboat 104 #define XC_sb_down_arrow 106 #define XC_sb_h_double_arrow 108 #define XC_sb_left_arrow 110 #define XC_sb_right_arrow 112 #define XC_sb_up_arrow 114 #define XC_sb_v_double_arrow 116 #define XC_shuttle 118 #define XC_sizing 120 #define XC_spider 122 #define XC_spraycan 124 #define XC_star 126 #define XC_target 128 #define XC_tcross 130 #define XC_top_left_arrow 132 #define XC_top_left_corner 134 #define XC_top_right_corner 136 #define XC_top_side 138 #define XC_top_tee 140 #define XC_trek 142 #define XC_ul_angle 144 #define XC_umbrella 146 #define XC_ur_angle 148 #define XC_watch 150 #define XC_xterm 152 #endif /* _X11_CURSORFONT_H_ */ libX11-1.6.3/include/X11/Xlibint.h000064401431060000012000001104011247741723500166310ustar00alancstaff00002660200006 /* Copyright 1984, 1985, 1987, 1989, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifndef _X11_XLIBINT_H_ #define _X11_XLIBINT_H_ 1 /* * Xlibint.h - Header definition and support file for the internal * support routines used by the C subroutine interface * library (Xlib) to the X Window System. * * Warning, there be dragons here.... */ #include #include /* to declare xEvent */ #include /* for configured options like XTHREADS */ /* The Xlib structs are full of implicit padding to properly align members. We can't clean that up without breaking ABI, so tell clang not to bother complaining about it. */ #ifdef __clang__ #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wpadded" #endif #ifdef WIN32 #define _XFlush _XFlushIt #endif /* * If your BytesReadable correctly detects broken connections, then * you should NOT define XCONN_CHECK_FREQ. */ #ifndef XCONN_CHECK_FREQ #define XCONN_CHECK_FREQ 256 #endif struct _XGC { XExtData *ext_data; /* hook for extension to hang data */ GContext gid; /* protocol ID for graphics context */ Bool rects; /* boolean: TRUE if clipmask is list of rectangles */ Bool dashes; /* boolean: TRUE if dash-list is really a list */ unsigned long dirty;/* cache dirty bits */ XGCValues values; /* shadow structure of values */ }; struct _XDisplay { XExtData *ext_data; /* hook for extension to hang data */ struct _XFreeFuncs *free_funcs; /* internal free functions */ int fd; /* Network socket. */ int conn_checker; /* ugly thing used by _XEventsQueued */ int proto_major_version;/* maj. version of server's X protocol */ int proto_minor_version;/* minor version of server's X protocol */ char *vendor; /* vendor of the server hardware */ XID resource_base; /* resource ID base */ XID resource_mask; /* resource ID mask bits */ XID resource_id; /* allocator current ID */ int resource_shift; /* allocator shift to correct bits */ XID (*resource_alloc)( /* allocator function */ struct _XDisplay* ); int byte_order; /* screen byte order, LSBFirst, MSBFirst */ int bitmap_unit; /* padding and data requirements */ int bitmap_pad; /* padding requirements on bitmaps */ int bitmap_bit_order; /* LeastSignificant or MostSignificant */ int nformats; /* number of pixmap formats in list */ ScreenFormat *pixmap_format; /* pixmap format list */ int vnumber; /* Xlib's X protocol version number. */ int release; /* release of the server */ struct _XSQEvent *head, *tail; /* Input event queue. */ int qlen; /* Length of input event queue */ unsigned long last_request_read; /* seq number of last event read */ unsigned long request; /* sequence number of last request. */ char *last_req; /* beginning of last request, or dummy */ char *buffer; /* Output buffer starting address. */ char *bufptr; /* Output buffer index pointer. */ char *bufmax; /* Output buffer maximum+1 address. */ unsigned max_request_size; /* maximum number 32 bit words in request*/ struct _XrmHashBucketRec *db; int (*synchandler)( /* Synchronization handler */ struct _XDisplay* ); char *display_name; /* "host:display" string used on this connect*/ int default_screen; /* default screen for operations */ int nscreens; /* number of screens on this server*/ Screen *screens; /* pointer to list of screens */ unsigned long motion_buffer; /* size of motion buffer */ volatile unsigned long flags; /* internal connection flags */ int min_keycode; /* minimum defined keycode */ int max_keycode; /* maximum defined keycode */ KeySym *keysyms; /* This server's keysyms */ XModifierKeymap *modifiermap; /* This server's modifier keymap */ int keysyms_per_keycode;/* number of rows */ char *xdefaults; /* contents of defaults from server */ char *scratch_buffer; /* place to hang scratch buffer */ unsigned long scratch_length; /* length of scratch buffer */ int ext_number; /* extension number on this display */ struct _XExten *ext_procs; /* extensions initialized on this display */ /* * the following can be fixed size, as the protocol defines how * much address space is available. * While this could be done using the extension vector, there * may be MANY events processed, so a search through the extension * list to find the right procedure for each event might be * expensive if many extensions are being used. */ Bool (*event_vec[128])( /* vector for wire to event */ Display * /* dpy */, XEvent * /* re */, xEvent * /* event */ ); Status (*wire_vec[128])( /* vector for event to wire */ Display * /* dpy */, XEvent * /* re */, xEvent * /* event */ ); KeySym lock_meaning; /* for XLookupString */ struct _XLockInfo *lock; /* multi-thread state, display lock */ struct _XInternalAsync *async_handlers; /* for internal async */ unsigned long bigreq_size; /* max size of big requests */ struct _XLockPtrs *lock_fns; /* pointers to threads functions */ void (*idlist_alloc)( /* XID list allocator function */ Display * /* dpy */, XID * /* ids */, int /* count */ ); /* things above this line should not move, for binary compatibility */ struct _XKeytrans *key_bindings; /* for XLookupString */ Font cursor_font; /* for XCreateFontCursor */ struct _XDisplayAtoms *atoms; /* for XInternAtom */ unsigned int mode_switch; /* keyboard group modifiers */ unsigned int num_lock; /* keyboard numlock modifiers */ struct _XContextDB *context_db; /* context database */ Bool (**error_vec)( /* vector for wire to error */ Display * /* display */, XErrorEvent * /* he */, xError * /* we */ ); /* * Xcms information */ struct { XPointer defaultCCCs; /* pointer to an array of default XcmsCCC */ XPointer clientCmaps; /* pointer to linked list of XcmsCmapRec */ XPointer perVisualIntensityMaps; /* linked list of XcmsIntensityMap */ } cms; struct _XIMFilter *im_filters; struct _XSQEvent *qfree; /* unallocated event queue elements */ unsigned long next_event_serial_num; /* inserted into next queue elt */ struct _XExten *flushes; /* Flush hooks */ struct _XConnectionInfo *im_fd_info; /* _XRegisterInternalConnection */ int im_fd_length; /* number of im_fd_info */ struct _XConnWatchInfo *conn_watchers; /* XAddConnectionWatch */ int watcher_count; /* number of conn_watchers */ XPointer filedes; /* struct pollfd cache for _XWaitForReadable */ int (*savedsynchandler)( /* user synchandler when Xlib usurps */ Display * /* dpy */ ); XID resource_max; /* allocator max ID */ int xcmisc_opcode; /* major opcode for XC-MISC */ struct _XkbInfoRec *xkb_info; /* XKB info */ struct _XtransConnInfo *trans_conn; /* transport connection object */ struct _X11XCBPrivate *xcb; /* XCB glue private data */ /* Generic event cookie handling */ unsigned int next_cookie; /* next event cookie */ /* vector for wire to generic event, index is (extension - 128) */ Bool (*generic_event_vec[128])( Display * /* dpy */, XGenericEventCookie * /* Xlib event */, xEvent * /* wire event */); /* vector for event copy, index is (extension - 128) */ Bool (*generic_event_copy_vec[128])( Display * /* dpy */, XGenericEventCookie * /* in */, XGenericEventCookie * /* out*/); void *cookiejar; /* cookie events returned but not claimed */ }; #define XAllocIDs(dpy,ids,n) (*(dpy)->idlist_alloc)(dpy,ids,n) #ifndef _XEVENT_ /* * _QEvent datatype for use in input queueing. */ typedef struct _XSQEvent { struct _XSQEvent *next; XEvent event; unsigned long qserial_num; /* so multi-threaded code can find new ones */ } _XQEvent; #endif #include #ifdef __sgi #define _SGI_MP_SOURCE /* turn this on to get MP safe errno */ #endif #include #define _XBCOPYFUNC _Xbcopy #include #include /* Utek leaves kernel macros around in include files (bleah) */ #ifdef dirty #undef dirty #endif #include #include #include _XFUNCPROTOBEGIN /* * The following definitions can be used for locking requests in multi-threaded * address spaces. */ #ifdef XTHREADS /* Author: Stephen Gildea, MIT X Consortium * * declarations for C Threads locking */ typedef struct _LockInfoRec *LockInfoPtr; /* interfaces for locking.c */ struct _XLockPtrs { /* used by all, including extensions; do not move */ void (*lock_display)( Display *dpy #if defined(XTHREADS_WARN) || defined(XTHREADS_FILE_LINE) , char *file , int line #endif ); void (*unlock_display)( Display *dpy #if defined(XTHREADS_WARN) || defined(XTHREADS_FILE_LINE) , char *file , int line #endif ); }; #if defined(WIN32) && !defined(_XLIBINT_) #define _XCreateMutex_fn (*_XCreateMutex_fn_p) #define _XFreeMutex_fn (*_XFreeMutex_fn_p) #define _XLockMutex_fn (*_XLockMutex_fn_p) #define _XUnlockMutex_fn (*_XUnlockMutex_fn_p) #define _Xglobal_lock (*_Xglobal_lock_p) #endif /* in XlibInt.c */ extern void (*_XCreateMutex_fn)( LockInfoPtr /* lock */ ); extern void (*_XFreeMutex_fn)( LockInfoPtr /* lock */ ); extern void (*_XLockMutex_fn)( LockInfoPtr /* lock */ #if defined(XTHREADS_WARN) || defined(XTHREADS_FILE_LINE) , char * /* file */ , int /* line */ #endif ); extern void (*_XUnlockMutex_fn)( LockInfoPtr /* lock */ #if defined(XTHREADS_WARN) || defined(XTHREADS_FILE_LINE) , char * /* file */ , int /* line */ #endif ); extern LockInfoPtr _Xglobal_lock; #if defined(XTHREADS_WARN) || defined(XTHREADS_FILE_LINE) #define LockDisplay(d) if ((d)->lock_fns) (*(d)->lock_fns->lock_display)((d),__FILE__,__LINE__) #define UnlockDisplay(d) if ((d)->lock_fns) (*(d)->lock_fns->unlock_display)((d),__FILE__,__LINE__) #define _XLockMutex(lock) if (_XLockMutex_fn) (*_XLockMutex_fn)(lock,__FILE__,__LINE__) #define _XUnlockMutex(lock) if (_XUnlockMutex_fn) (*_XUnlockMutex_fn)(lock,__FILE__,__LINE__) #else /* used everywhere, so must be fast if not using threads */ #define LockDisplay(d) if ((d)->lock_fns) (*(d)->lock_fns->lock_display)(d) #define UnlockDisplay(d) if ((d)->lock_fns) (*(d)->lock_fns->unlock_display)(d) #define _XLockMutex(lock) if (_XLockMutex_fn) (*_XLockMutex_fn)(lock) #define _XUnlockMutex(lock) if (_XUnlockMutex_fn) (*_XUnlockMutex_fn)(lock) #endif #define _XCreateMutex(lock) if (_XCreateMutex_fn) (*_XCreateMutex_fn)(lock); #define _XFreeMutex(lock) if (_XFreeMutex_fn) (*_XFreeMutex_fn)(lock); #else /* XTHREADS */ #define LockDisplay(dis) #define _XLockMutex(lock) #define _XUnlockMutex(lock) #define UnlockDisplay(dis) #define _XCreateMutex(lock) #define _XFreeMutex(lock) #endif #define Xfree(ptr) free((ptr)) /* * Note that some machines do not return a valid pointer for malloc(0), in * which case we provide an alternate under the control of the * define MALLOC_0_RETURNS_NULL. This is necessary because some * Xlib code expects malloc(0) to return a valid pointer to storage. */ #if defined(MALLOC_0_RETURNS_NULL) || defined(__clang_analyzer__) # define Xmalloc(size) malloc(((size) == 0 ? 1 : (size))) # define Xrealloc(ptr, size) realloc((ptr), ((size) == 0 ? 1 : (size))) # define Xcalloc(nelem, elsize) calloc(((nelem) == 0 ? 1 : (nelem)), (elsize)) #else # define Xmalloc(size) malloc((size)) # define Xrealloc(ptr, size) realloc((ptr), (size)) # define Xcalloc(nelem, elsize) calloc((nelem), (elsize)) #endif #include #define LOCKED 1 #define UNLOCKED 0 #ifndef BUFSIZE #define BUFSIZE 2048 /* X output buffer size. */ #endif #ifndef PTSPERBATCH #define PTSPERBATCH 1024 /* point batching */ #endif #ifndef WLNSPERBATCH #define WLNSPERBATCH 50 /* wide line batching */ #endif #ifndef ZLNSPERBATCH #define ZLNSPERBATCH 1024 /* thin line batching */ #endif #ifndef WRCTSPERBATCH #define WRCTSPERBATCH 10 /* wide line rectangle batching */ #endif #ifndef ZRCTSPERBATCH #define ZRCTSPERBATCH 256 /* thin line rectangle batching */ #endif #ifndef FRCTSPERBATCH #define FRCTSPERBATCH 256 /* filled rectangle batching */ #endif #ifndef FARCSPERBATCH #define FARCSPERBATCH 256 /* filled arc batching */ #endif #ifndef CURSORFONT #define CURSORFONT "cursor" /* standard cursor fonts */ #endif /* * Display flags */ #define XlibDisplayIOError (1L << 0) #define XlibDisplayClosing (1L << 1) #define XlibDisplayNoXkb (1L << 2) #define XlibDisplayPrivSync (1L << 3) #define XlibDisplayProcConni (1L << 4) /* in _XProcessInternalConnection */ #define XlibDisplayReadEvents (1L << 5) /* in _XReadEvents */ #define XlibDisplayReply (1L << 5) /* in _XReply */ #define XlibDisplayWriting (1L << 6) /* in _XFlushInt, _XSend */ #define XlibDisplayDfltRMDB (1L << 7) /* mark if RM db from XGetDefault */ /* * X Protocol packetizing macros. */ /* Leftover from CRAY support - was defined empty on all non-Cray systems */ #define WORD64ALIGN /** * Return a len-sized request buffer for the request type. This function may * flush the output queue. * * @param dpy The display connection * @param type The request type * @param len Length of the request in bytes * * @returns A pointer to the request buffer with a few default values * initialized. */ extern void *_XGetRequest(Display *dpy, CARD8 type, size_t len); /* GetReqSized is the same as GetReq but allows the caller to specify the * size in bytes. 'sz' must be a multiple of 4! */ #define GetReqSized(name, sz, req) \ req = (x##name##Req *) _XGetRequest(dpy, X_##name, sz) /* * GetReq - Get the next available X request packet in the buffer and * return it. * * "name" is the name of the request, e.g. CreatePixmap, OpenFont, etc. * "req" is the name of the request pointer. * */ #define GetReq(name, req) \ GetReqSized(name, SIZEOF(x##name##Req), req) /* GetReqExtra is the same as GetReq, but allocates "n" additional bytes after the request. "n" must be a multiple of 4! */ #define GetReqExtra(name, n, req) \ GetReqSized(name, SIZEOF(x##name##Req) + n, req) /* * GetResReq is for those requests that have a resource ID * (Window, Pixmap, GContext, etc.) as their single argument. * "rid" is the name of the resource. */ #define GetResReq(name, rid, req) \ req = (xResourceReq *) _XGetRequest(dpy, X_##name, SIZEOF(xResourceReq)); \ req->id = (rid) /* * GetEmptyReq is for those requests that have no arguments * at all. */ #define GetEmptyReq(name, req) \ req = (xReq *) _XGetRequest(dpy, X_##name, SIZEOF(xReq)) /* * MakeBigReq sets the CARD16 "req->length" to 0 and inserts a new CARD32 * length, after req->length, before the data in the request. The new length * includes the "n" extra 32-bit words. * * Do not use MakeBigReq if there is no data already in the request. * req->length must already be >= 2. */ #ifdef LONG64 #define MakeBigReq(req,n) \ { \ CARD64 _BRdat; \ CARD32 _BRlen = req->length - 1; \ req->length = 0; \ _BRdat = ((CARD32 *)req)[_BRlen]; \ memmove(((char *)req) + 8, ((char *)req) + 4, (_BRlen - 1) << 2); \ ((CARD32 *)req)[1] = _BRlen + n + 2; \ Data32(dpy, &_BRdat, 4); \ } #else #define MakeBigReq(req,n) \ { \ CARD32 _BRdat; \ CARD32 _BRlen = req->length - 1; \ req->length = 0; \ _BRdat = ((CARD32 *)req)[_BRlen]; \ memmove(((char *)req) + 8, ((char *)req) + 4, (_BRlen - 1) << 2); \ ((CARD32 *)req)[1] = _BRlen + n + 2; \ Data32(dpy, &_BRdat, 4); \ } #endif /* * SetReqLen increases the count of 32-bit words in the request by "n", * or by "badlen" if "n" is too large. * * Do not use SetReqLen if "req" does not already have data after the * xReq header. req->length must already be >= 2. */ #ifndef __clang_analyzer__ #define SetReqLen(req,n,badlen) \ if ((req->length + n) > (unsigned)65535) { \ if (dpy->bigreq_size) { \ MakeBigReq(req,n) \ } else { \ n = badlen; \ req->length += n; \ } \ } else \ req->length += n #else #define SetReqLen(req,n,badlen) \ req->length += n #endif #define SyncHandle() \ if (dpy->synchandler) (*dpy->synchandler)(dpy) extern void _XFlushGCCache(Display *dpy, GC gc); #define FlushGC(dpy, gc) \ if ((gc)->dirty) _XFlushGCCache((dpy), (gc)) /* * Data - Place data in the buffer and pad the end to provide * 32 bit word alignment. Transmit if the buffer fills. * * "dpy" is a pointer to a Display. * "data" is a pointer to a data buffer. * "len" is the length of the data buffer. */ #ifndef DataRoutineIsProcedure #define Data(dpy, data, len) {\ if (dpy->bufptr + (len) <= dpy->bufmax) {\ memcpy(dpy->bufptr, data, (int)len);\ dpy->bufptr += ((len) + 3) & ~3;\ } else\ _XSend(dpy, data, len);\ } #endif /* DataRoutineIsProcedure */ /* Allocate bytes from the buffer. No padding is done, so if * the length is not a multiple of 4, the caller must be * careful to leave the buffer aligned after sending the * current request. * * "type" is the type of the pointer being assigned to. * "ptr" is the pointer being assigned to. * "n" is the number of bytes to allocate. * * Example: * xTextElt *elt; * BufAlloc (xTextElt *, elt, nbytes) */ #define BufAlloc(type, ptr, n) \ if (dpy->bufptr + (n) > dpy->bufmax) \ _XFlush (dpy); \ ptr = (type) dpy->bufptr; \ memset(ptr, '\0', n); \ dpy->bufptr += (n); #define Data16(dpy, data, len) Data((dpy), (_Xconst char *)(data), (len)) #define _XRead16Pad(dpy, data, len) _XReadPad((dpy), (char *)(data), (len)) #define _XRead16(dpy, data, len) _XRead((dpy), (char *)(data), (len)) #ifdef LONG64 #define Data32(dpy, data, len) _XData32(dpy, (_Xconst long *)data, len) extern int _XData32( Display *dpy, register _Xconst long *data, unsigned len ); extern void _XRead32( Display *dpy, register long *data, long len ); #else #define Data32(dpy, data, len) Data((dpy), (_Xconst char *)(data), (len)) #define _XRead32(dpy, data, len) _XRead((dpy), (char *)(data), (len)) #endif #define PackData16(dpy,data,len) Data16 (dpy, data, len) #define PackData32(dpy,data,len) Data32 (dpy, data, len) /* Xlib manual is bogus */ #define PackData(dpy,data,len) PackData16 (dpy, data, len) #define min(a,b) (((a) < (b)) ? (a) : (b)) #define max(a,b) (((a) > (b)) ? (a) : (b)) #define CI_NONEXISTCHAR(cs) (((cs)->width == 0) && \ (((cs)->rbearing|(cs)->lbearing| \ (cs)->ascent|(cs)->descent) == 0)) /* * CI_GET_CHAR_INFO_1D - return the charinfo struct for the indicated 8bit * character. If the character is in the column and exists, then return the * appropriate metrics (note that fonts with common per-character metrics will * return min_bounds). If none of these hold true, try again with the default * char. */ #define CI_GET_CHAR_INFO_1D(fs,col,def,cs) \ { \ cs = def; \ if (col >= fs->min_char_or_byte2 && col <= fs->max_char_or_byte2) { \ if (fs->per_char == NULL) { \ cs = &fs->min_bounds; \ } else { \ cs = &fs->per_char[(col - fs->min_char_or_byte2)]; \ if (CI_NONEXISTCHAR(cs)) cs = def; \ } \ } \ } #define CI_GET_DEFAULT_INFO_1D(fs,cs) \ CI_GET_CHAR_INFO_1D (fs, fs->default_char, NULL, cs) /* * CI_GET_CHAR_INFO_2D - return the charinfo struct for the indicated row and * column. This is used for fonts that have more than row zero. */ #define CI_GET_CHAR_INFO_2D(fs,row,col,def,cs) \ { \ cs = def; \ if (row >= fs->min_byte1 && row <= fs->max_byte1 && \ col >= fs->min_char_or_byte2 && col <= fs->max_char_or_byte2) { \ if (fs->per_char == NULL) { \ cs = &fs->min_bounds; \ } else { \ cs = &fs->per_char[((row - fs->min_byte1) * \ (fs->max_char_or_byte2 - \ fs->min_char_or_byte2 + 1)) + \ (col - fs->min_char_or_byte2)]; \ if (CI_NONEXISTCHAR(cs)) cs = def; \ } \ } \ } #define CI_GET_DEFAULT_INFO_2D(fs,cs) \ { \ unsigned int r = (fs->default_char >> 8); \ unsigned int c = (fs->default_char & 0xff); \ CI_GET_CHAR_INFO_2D (fs, r, c, NULL, cs); \ } /* srcvar must be a variable for large architecture version */ #define OneDataCard32(dpy,dstaddr,srcvar) \ { *(CARD32 *)(dstaddr) = (srcvar); } typedef struct _XInternalAsync { struct _XInternalAsync *next; /* * handler arguments: * rep is the generic reply that caused this handler * to be invoked. It must also be passed to _XGetAsyncReply. * buf and len are opaque values that must be passed to * _XGetAsyncReply or _XGetAsyncData. * data is the closure stored in this struct. * The handler returns True iff it handled this reply. */ Bool (*handler)( Display* /* dpy */, xReply* /* rep */, char* /* buf */, int /* len */, XPointer /* data */ ); XPointer data; } _XAsyncHandler; typedef struct _XAsyncEState { unsigned long min_sequence_number; unsigned long max_sequence_number; unsigned char error_code; unsigned char major_opcode; unsigned short minor_opcode; unsigned char last_error_received; int error_count; } _XAsyncErrorState; extern void _XDeqAsyncHandler(Display *dpy, _XAsyncHandler *handler); #define DeqAsyncHandler(dpy,handler) { \ if (dpy->async_handlers == (handler)) \ dpy->async_handlers = (handler)->next; \ else \ _XDeqAsyncHandler(dpy, handler); \ } typedef void (*FreeFuncType) ( Display* /* display */ ); typedef int (*FreeModmapType) ( XModifierKeymap* /* modmap */ ); /* * This structure is private to the library. */ typedef struct _XFreeFuncs { FreeFuncType atoms; /* _XFreeAtomTable */ FreeModmapType modifiermap; /* XFreeModifiermap */ FreeFuncType key_bindings; /* _XFreeKeyBindings */ FreeFuncType context_db; /* _XFreeContextDB */ FreeFuncType defaultCCCs; /* _XcmsFreeDefaultCCCs */ FreeFuncType clientCmaps; /* _XcmsFreeClientCmaps */ FreeFuncType intensityMaps; /* _XcmsFreeIntensityMaps */ FreeFuncType im_filters; /* _XFreeIMFilters */ FreeFuncType xkb; /* _XkbFreeInfo */ } _XFreeFuncRec; /* types for InitExt.c */ typedef int (*CreateGCType) ( Display* /* display */, GC /* gc */, XExtCodes* /* codes */ ); typedef int (*CopyGCType)( Display* /* display */, GC /* gc */, XExtCodes* /* codes */ ); typedef int (*FlushGCType) ( Display* /* display */, GC /* gc */, XExtCodes* /* codes */ ); typedef int (*FreeGCType) ( Display* /* display */, GC /* gc */, XExtCodes* /* codes */ ); typedef int (*CreateFontType) ( Display* /* display */, XFontStruct* /* fs */, XExtCodes* /* codes */ ); typedef int (*FreeFontType) ( Display* /* display */, XFontStruct* /* fs */, XExtCodes* /* codes */ ); typedef int (*CloseDisplayType) ( Display* /* display */, XExtCodes* /* codes */ ); typedef int (*ErrorType) ( Display* /* display */, xError* /* err */, XExtCodes* /* codes */, int* /* ret_code */ ); typedef char* (*ErrorStringType) ( Display* /* display */, int /* code */, XExtCodes* /* codes */, char* /* buffer */, int /* nbytes */ ); typedef void (*PrintErrorType)( Display* /* display */, XErrorEvent* /* ev */, void* /* fp */ ); typedef void (*BeforeFlushType)( Display* /* display */, XExtCodes* /* codes */, _Xconst char* /* data */, long /* len */ ); /* * This structure is private to the library. */ typedef struct _XExten { /* private to extension mechanism */ struct _XExten *next; /* next in list */ XExtCodes codes; /* public information, all extension told */ CreateGCType create_GC; /* routine to call when GC created */ CopyGCType copy_GC; /* routine to call when GC copied */ FlushGCType flush_GC; /* routine to call when GC flushed */ FreeGCType free_GC; /* routine to call when GC freed */ CreateFontType create_Font; /* routine to call when Font created */ FreeFontType free_Font; /* routine to call when Font freed */ CloseDisplayType close_display; /* routine to call when connection closed */ ErrorType error; /* who to call when an error occurs */ ErrorStringType error_string; /* routine to supply error string */ char *name; /* name of this extension */ PrintErrorType error_values; /* routine to supply error values */ BeforeFlushType before_flush; /* routine to call when sending data */ struct _XExten *next_flush; /* next in list of those with flushes */ } _XExtension; /* Temporary definition until we can depend on an xproto release with it */ #ifdef _X_COLD # define _XLIB_COLD _X_COLD #elif defined(__GNUC__) && ((__GNUC__ * 100 + __GNUC_MINOR__) >= 403) /* 4.3+ */ # define _XLIB_COLD __attribute__((__cold__)) #else # define _XLIB_COLD /* nothing */ #endif /* extension hooks */ #ifdef DataRoutineIsProcedure extern void Data(Display *dpy, char *data, long len); #endif extern int _XError( Display* /* dpy */, xError* /* rep */ ); extern int _XIOError( Display* /* dpy */ ) _X_NORETURN; extern int (*_XIOErrorFunction)( Display* /* dpy */ ); extern int (*_XErrorFunction)( Display* /* dpy */, XErrorEvent* /* error_event */ ); extern void _XEatData( Display* /* dpy */, unsigned long /* n */ ) _XLIB_COLD; extern void _XEatDataWords( Display* /* dpy */, unsigned long /* n */ ) _XLIB_COLD; #if defined(__SUNPRO_C) /* Studio compiler alternative to "cold" attribute */ # pragma rarely_called(_XEatData, _XEatDataWords) #endif extern char *_XAllocScratch( Display* /* dpy */, unsigned long /* nbytes */ ); extern char *_XAllocTemp( Display* /* dpy */, unsigned long /* nbytes */ ); extern void _XFreeTemp( Display* /* dpy */, char* /* buf */, unsigned long /* nbytes */ ); extern Visual *_XVIDtoVisual( Display* /* dpy */, VisualID /* id */ ); extern unsigned long _XSetLastRequestRead( Display* /* dpy */, xGenericReply* /* rep */ ); extern int _XGetHostname( char* /* buf */, int /* maxlen */ ); extern Screen *_XScreenOfWindow( Display* /* dpy */, Window /* w */ ); extern Bool _XAsyncErrorHandler( Display* /* dpy */, xReply* /* rep */, char* /* buf */, int /* len */, XPointer /* data */ ); extern char *_XGetAsyncReply( Display* /* dpy */, char* /* replbuf */, xReply* /* rep */, char* /* buf */, int /* len */, int /* extra */, Bool /* discard */ ); extern void _XGetAsyncData( Display* /* dpy */, char * /* data */, char * /* buf */, int /* len */, int /* skip */, int /* datalen */, int /* discardtotal */ ); extern void _XFlush( Display* /* dpy */ ); extern int _XEventsQueued( Display* /* dpy */, int /* mode */ ); extern void _XReadEvents( Display* /* dpy */ ); extern int _XRead( Display* /* dpy */, char* /* data */, long /* size */ ); extern void _XReadPad( Display* /* dpy */, char* /* data */, long /* size */ ); extern void _XSend( Display* /* dpy */, _Xconst char* /* data */, long /* size */ ); extern Status _XReply( Display* /* dpy */, xReply* /* rep */, int /* extra */, Bool /* discard */ ); extern void _XEnq( Display* /* dpy */, xEvent* /* event */ ); extern void _XDeq( Display* /* dpy */, _XQEvent* /* prev */, _XQEvent* /* qelt */ ); extern Bool _XUnknownWireEvent( Display* /* dpy */, XEvent* /* re */, xEvent* /* event */ ); extern Bool _XUnknownWireEventCookie( Display* /* dpy */, XGenericEventCookie* /* re */, xEvent* /* event */ ); extern Bool _XUnknownCopyEventCookie( Display* /* dpy */, XGenericEventCookie* /* in */, XGenericEventCookie* /* out */ ); extern Status _XUnknownNativeEvent( Display* /* dpy */, XEvent* /* re */, xEvent* /* event */ ); extern Bool _XWireToEvent(Display *dpy, XEvent *re, xEvent *event); extern Bool _XDefaultWireError(Display *display, XErrorEvent *he, xError *we); extern Bool _XPollfdCacheInit(Display *dpy); extern void _XPollfdCacheAdd(Display *dpy, int fd); extern void _XPollfdCacheDel(Display *dpy, int fd); extern XID _XAllocID(Display *dpy); extern void _XAllocIDs(Display *dpy, XID *ids, int count); extern int _XFreeExtData( XExtData* /* extension */ ); extern int (*XESetCreateGC( Display* /* display */, int /* extension */, int (*) ( Display* /* display */, GC /* gc */, XExtCodes* /* codes */ ) /* proc */ ))( Display*, GC, XExtCodes* ); extern int (*XESetCopyGC( Display* /* display */, int /* extension */, int (*) ( Display* /* display */, GC /* gc */, XExtCodes* /* codes */ ) /* proc */ ))( Display*, GC, XExtCodes* ); extern int (*XESetFlushGC( Display* /* display */, int /* extension */, int (*) ( Display* /* display */, GC /* gc */, XExtCodes* /* codes */ ) /* proc */ ))( Display*, GC, XExtCodes* ); extern int (*XESetFreeGC( Display* /* display */, int /* extension */, int (*) ( Display* /* display */, GC /* gc */, XExtCodes* /* codes */ ) /* proc */ ))( Display*, GC, XExtCodes* ); extern int (*XESetCreateFont( Display* /* display */, int /* extension */, int (*) ( Display* /* display */, XFontStruct* /* fs */, XExtCodes* /* codes */ ) /* proc */ ))( Display*, XFontStruct*, XExtCodes* ); extern int (*XESetFreeFont( Display* /* display */, int /* extension */, int (*) ( Display* /* display */, XFontStruct* /* fs */, XExtCodes* /* codes */ ) /* proc */ ))( Display*, XFontStruct*, XExtCodes* ); extern int (*XESetCloseDisplay( Display* /* display */, int /* extension */, int (*) ( Display* /* display */, XExtCodes* /* codes */ ) /* proc */ ))( Display*, XExtCodes* ); extern int (*XESetError( Display* /* display */, int /* extension */, int (*) ( Display* /* display */, xError* /* err */, XExtCodes* /* codes */, int* /* ret_code */ ) /* proc */ ))( Display*, xError*, XExtCodes*, int* ); extern char* (*XESetErrorString( Display* /* display */, int /* extension */, char* (*) ( Display* /* display */, int /* code */, XExtCodes* /* codes */, char* /* buffer */, int /* nbytes */ ) /* proc */ ))( Display*, int, XExtCodes*, char*, int ); extern void (*XESetPrintErrorValues ( Display* /* display */, int /* extension */, void (*)( Display* /* display */, XErrorEvent* /* ev */, void* /* fp */ ) /* proc */ ))( Display*, XErrorEvent*, void* ); extern Bool (*XESetWireToEvent( Display* /* display */, int /* event_number */, Bool (*) ( Display* /* display */, XEvent* /* re */, xEvent* /* event */ ) /* proc */ ))( Display*, XEvent*, xEvent* ); extern Bool (*XESetWireToEventCookie( Display* /* display */, int /* extension */, Bool (*) ( Display* /* display */, XGenericEventCookie* /* re */, xEvent* /* event */ ) /* proc */ ))( Display*, XGenericEventCookie*, xEvent* ); extern Bool (*XESetCopyEventCookie( Display* /* display */, int /* extension */, Bool (*) ( Display* /* display */, XGenericEventCookie* /* in */, XGenericEventCookie* /* out */ ) /* proc */ ))( Display*, XGenericEventCookie*, XGenericEventCookie* ); extern Status (*XESetEventToWire( Display* /* display */, int /* event_number */, Status (*) ( Display* /* display */, XEvent* /* re */, xEvent* /* event */ ) /* proc */ ))( Display*, XEvent*, xEvent* ); extern Bool (*XESetWireToError( Display* /* display */, int /* error_number */, Bool (*) ( Display* /* display */, XErrorEvent* /* he */, xError* /* we */ ) /* proc */ ))( Display*, XErrorEvent*, xError* ); extern void (*XESetBeforeFlush( Display* /* display */, int /* error_number */, void (*) ( Display* /* display */, XExtCodes* /* codes */, _Xconst char* /* data */, long /* len */ ) /* proc */ ))( Display*, XExtCodes*, _Xconst char*, long ); /* internal connections for IMs */ typedef void (*_XInternalConnectionProc)( Display* /* dpy */, int /* fd */, XPointer /* call_data */ ); extern Status _XRegisterInternalConnection( Display* /* dpy */, int /* fd */, _XInternalConnectionProc /* callback */, XPointer /* call_data */ ); extern void _XUnregisterInternalConnection( Display* /* dpy */, int /* fd */ ); extern void _XProcessInternalConnection( Display* /* dpy */, struct _XConnectionInfo* /* conn_info */ ); /* Display structure has pointers to these */ struct _XConnectionInfo { /* info from _XRegisterInternalConnection */ int fd; _XInternalConnectionProc read_callback; XPointer call_data; XPointer *watch_data; /* set/used by XConnectionWatchProc */ struct _XConnectionInfo *next; }; struct _XConnWatchInfo { /* info from XAddConnectionWatch */ XConnectionWatchProc fn; XPointer client_data; struct _XConnWatchInfo *next; }; #ifdef __UNIXOS2__ extern char* __XOS2RedirRoot( char* ); #endif extern int _XTextHeight( XFontStruct* /* font_struct */, _Xconst char* /* string */, int /* count */ ); extern int _XTextHeight16( XFontStruct* /* font_struct */, _Xconst XChar2b* /* string */, int /* count */ ); #if defined(WIN32) extern int _XOpenFile( _Xconst char* /* path */, int /* flags */ ); extern int _XOpenFileMode( _Xconst char* /* path */, int /* flags */, mode_t /* mode */ ); extern void* _XFopenFile( _Xconst char* /* path */, _Xconst char* /* mode */ ); extern int _XAccessFile( _Xconst char* /* path */ ); #else #define _XOpenFile(path,flags) open(path,flags) #define _XOpenFileMode(path,flags,mode) open(path,flags,mode) #define _XFopenFile(path,mode) fopen(path,mode) #endif /* EvToWire.c */ extern Status _XEventToWire(Display *dpy, XEvent *re, xEvent *event); extern int _XF86LoadQueryLocaleFont( Display* /* dpy */, _Xconst char* /* name*/, XFontStruct** /* xfp*/, Font* /* fidp */ ); extern void _XProcessWindowAttributes ( register Display *dpy, xChangeWindowAttributesReq *req, register unsigned long valuemask, register XSetWindowAttributes *attributes); extern int _XDefaultError( Display *dpy, XErrorEvent *event); extern int _XDefaultIOError( Display *dpy); extern void _XSetClipRectangles ( register Display *dpy, GC gc, int clip_x_origin, int clip_y_origin, XRectangle *rectangles, int n, int ordering); Status _XGetWindowAttributes( register Display *dpy, Window w, XWindowAttributes *attr); int _XPutBackEvent ( register Display *dpy, register XEvent *event); extern Bool _XIsEventCookie( Display *dpy, XEvent *ev); extern void _XFreeEventCookies( Display *dpy); extern void _XStoreEventCookie( Display *dpy, XEvent *ev); extern Bool _XFetchEventCookie( Display *dpy, XGenericEventCookie *ev); extern Bool _XCopyEventCookie( Display *dpy, XGenericEventCookie *in, XGenericEventCookie *out); /* lcFile.c */ extern void xlocaledir( char *buf, int buf_len ); #ifdef __clang__ #pragma clang diagnostic pop #endif _XFUNCPROTOEND #endif /* _X11_XLIBINT_H_ */ xGenericReply* /* rep */ ); extern int _XGetHostname( char* /* buf */, int /* maxlen */ ); extern Screen *_XScreenOfWindow( Display* /* dpy */, Window /* w */ ); extern Bool _XAsyncErrorHandler( Display* /* dpy */, xReply* /* rep libX11-1.6.3/include/X11/Xlib.h000064401431060000012000003022521247741723500161250ustar00alancstaff00002660200006/* Copyright 1985, 1986, 1987, 1991, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ /* * Xlib.h - Header definition and support file for the C subroutine * interface library (Xlib) to the X Window System Protocol (V11). * Structures and symbols starting with "_" are private to the library. */ #ifndef _X11_XLIB_H_ #define _X11_XLIB_H_ #define XlibSpecificationRelease 6 #include #if defined(__SCO__) || defined(__UNIXWARE__) #include #endif #include /* applications should not depend on these two headers being included! */ #include #include #ifndef X_WCHAR #include #else #ifdef __UNIXOS2__ #include #else /* replace this with #include or typedef appropriate for your system */ typedef unsigned long wchar_t; #endif #endif extern int _Xmblen( char *str, int len ); /* API mentioning "UTF8" or "utf8" is an XFree86 extension, introduced in November 2000. Its presence is indicated through the following macro. */ #define X_HAVE_UTF8_STRING 1 /* The Xlib structs are full of implicit padding to properly align members. We can't clean that up without breaking ABI, so tell clang not to bother complaining about it. */ #ifdef __clang__ #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wpadded" #endif typedef char *XPointer; #define Bool int #define Status int #define True 1 #define False 0 #define QueuedAlready 0 #define QueuedAfterReading 1 #define QueuedAfterFlush 2 #define ConnectionNumber(dpy) (((_XPrivDisplay)dpy)->fd) #define RootWindow(dpy, scr) (ScreenOfDisplay(dpy,scr)->root) #define DefaultScreen(dpy) (((_XPrivDisplay)dpy)->default_screen) #define DefaultRootWindow(dpy) (ScreenOfDisplay(dpy,DefaultScreen(dpy))->root) #define DefaultVisual(dpy, scr) (ScreenOfDisplay(dpy,scr)->root_visual) #define DefaultGC(dpy, scr) (ScreenOfDisplay(dpy,scr)->default_gc) #define BlackPixel(dpy, scr) (ScreenOfDisplay(dpy,scr)->black_pixel) #define WhitePixel(dpy, scr) (ScreenOfDisplay(dpy,scr)->white_pixel) #define AllPlanes ((unsigned long)~0L) #define QLength(dpy) (((_XPrivDisplay)dpy)->qlen) #define DisplayWidth(dpy, scr) (ScreenOfDisplay(dpy,scr)->width) #define DisplayHeight(dpy, scr) (ScreenOfDisplay(dpy,scr)->height) #define DisplayWidthMM(dpy, scr)(ScreenOfDisplay(dpy,scr)->mwidth) #define DisplayHeightMM(dpy, scr)(ScreenOfDisplay(dpy,scr)->mheight) #define DisplayPlanes(dpy, scr) (ScreenOfDisplay(dpy,scr)->root_depth) #define DisplayCells(dpy, scr) (DefaultVisual(dpy,scr)->map_entries) #define ScreenCount(dpy) (((_XPrivDisplay)dpy)->nscreens) #define ServerVendor(dpy) (((_XPrivDisplay)dpy)->vendor) #define ProtocolVersion(dpy) (((_XPrivDisplay)dpy)->proto_major_version) #define ProtocolRevision(dpy) (((_XPrivDisplay)dpy)->proto_minor_version) #define VendorRelease(dpy) (((_XPrivDisplay)dpy)->release) #define DisplayString(dpy) (((_XPrivDisplay)dpy)->display_name) #define DefaultDepth(dpy, scr) (ScreenOfDisplay(dpy,scr)->root_depth) #define DefaultColormap(dpy, scr)(ScreenOfDisplay(dpy,scr)->cmap) #define BitmapUnit(dpy) (((_XPrivDisplay)dpy)->bitmap_unit) #define BitmapBitOrder(dpy) (((_XPrivDisplay)dpy)->bitmap_bit_order) #define BitmapPad(dpy) (((_XPrivDisplay)dpy)->bitmap_pad) #define ImageByteOrder(dpy) (((_XPrivDisplay)dpy)->byte_order) #define NextRequest(dpy) (((_XPrivDisplay)dpy)->request + 1) #define LastKnownRequestProcessed(dpy) (((_XPrivDisplay)dpy)->last_request_read) /* macros for screen oriented applications (toolkit) */ #define ScreenOfDisplay(dpy, scr)(&((_XPrivDisplay)dpy)->screens[scr]) #define DefaultScreenOfDisplay(dpy) ScreenOfDisplay(dpy,DefaultScreen(dpy)) #define DisplayOfScreen(s) ((s)->display) #define RootWindowOfScreen(s) ((s)->root) #define BlackPixelOfScreen(s) ((s)->black_pixel) #define WhitePixelOfScreen(s) ((s)->white_pixel) #define DefaultColormapOfScreen(s)((s)->cmap) #define DefaultDepthOfScreen(s) ((s)->root_depth) #define DefaultGCOfScreen(s) ((s)->default_gc) #define DefaultVisualOfScreen(s)((s)->root_visual) #define WidthOfScreen(s) ((s)->width) #define HeightOfScreen(s) ((s)->height) #define WidthMMOfScreen(s) ((s)->mwidth) #define HeightMMOfScreen(s) ((s)->mheight) #define PlanesOfScreen(s) ((s)->root_depth) #define CellsOfScreen(s) (DefaultVisualOfScreen((s))->map_entries) #define MinCmapsOfScreen(s) ((s)->min_maps) #define MaxCmapsOfScreen(s) ((s)->max_maps) #define DoesSaveUnders(s) ((s)->save_unders) #define DoesBackingStore(s) ((s)->backing_store) #define EventMaskOfScreen(s) ((s)->root_input_mask) /* * Extensions need a way to hang private data on some structures. */ typedef struct _XExtData { int number; /* number returned by XRegisterExtension */ struct _XExtData *next; /* next item on list of data for structure */ int (*free_private)( /* called to free private storage */ struct _XExtData *extension ); XPointer private_data; /* data private to this extension. */ } XExtData; /* * This file contains structures used by the extension mechanism. */ typedef struct { /* public to extension, cannot be changed */ int extension; /* extension number */ int major_opcode; /* major op-code assigned by server */ int first_event; /* first event number for the extension */ int first_error; /* first error number for the extension */ } XExtCodes; /* * Data structure for retrieving info about pixmap formats. */ typedef struct { int depth; int bits_per_pixel; int scanline_pad; } XPixmapFormatValues; /* * Data structure for setting graphics context. */ typedef struct { int function; /* logical operation */ unsigned long plane_mask;/* plane mask */ unsigned long foreground;/* foreground pixel */ unsigned long background;/* background pixel */ int line_width; /* line width */ int line_style; /* LineSolid, LineOnOffDash, LineDoubleDash */ int cap_style; /* CapNotLast, CapButt, CapRound, CapProjecting */ int join_style; /* JoinMiter, JoinRound, JoinBevel */ int fill_style; /* FillSolid, FillTiled, FillStippled, FillOpaeueStippled */ int fill_rule; /* EvenOddRule, WindingRule */ int arc_mode; /* ArcChord, ArcPieSlice */ Pixmap tile; /* tile pixmap for tiling operations */ Pixmap stipple; /* stipple 1 plane pixmap for stipping */ int ts_x_origin; /* offset for tile or stipple operations */ int ts_y_origin; Font font; /* default text font for text operations */ int subwindow_mode; /* ClipByChildren, IncludeInferiors */ Bool graphics_exposures;/* boolean, should exposures be generated */ int clip_x_origin; /* origin for clipping */ int clip_y_origin; Pixmap clip_mask; /* bitmap clipping; other calls for rects */ int dash_offset; /* patterned/dashed line information */ char dashes; } XGCValues; /* * Graphics context. The contents of this structure are implementation * dependent. A GC should be treated as opaque by application code. */ typedef struct _XGC #ifdef XLIB_ILLEGAL_ACCESS { XExtData *ext_data; /* hook for extension to hang data */ GContext gid; /* protocol ID for graphics context */ /* there is more to this structure, but it is private to Xlib */ } #endif *GC; /* * Visual structure; contains information about colormapping possible. */ typedef struct { XExtData *ext_data; /* hook for extension to hang data */ VisualID visualid; /* visual id of this visual */ #if defined(__cplusplus) || defined(c_plusplus) int c_class; /* C++ class of screen (monochrome, etc.) */ #else int class; /* class of screen (monochrome, etc.) */ #endif unsigned long red_mask, green_mask, blue_mask; /* mask values */ int bits_per_rgb; /* log base 2 of distinct color values */ int map_entries; /* color map entries */ } Visual; /* * Depth structure; contains information for each possible depth. */ typedef struct { int depth; /* this depth (Z) of the depth */ int nvisuals; /* number of Visual types at this depth */ Visual *visuals; /* list of visuals possible at this depth */ } Depth; /* * Information about the screen. The contents of this structure are * implementation dependent. A Screen should be treated as opaque * by application code. */ struct _XDisplay; /* Forward declare before use for C++ */ typedef struct { XExtData *ext_data; /* hook for extension to hang data */ struct _XDisplay *display;/* back pointer to display structure */ Window root; /* Root window id. */ int width, height; /* width and height of screen */ int mwidth, mheight; /* width and height of in millimeters */ int ndepths; /* number of depths possible */ Depth *depths; /* list of allowable depths on the screen */ int root_depth; /* bits per pixel */ Visual *root_visual; /* root visual */ GC default_gc; /* GC for the root root visual */ Colormap cmap; /* default color map */ unsigned long white_pixel; unsigned long black_pixel; /* White and Black pixel values */ int max_maps, min_maps; /* max and min color maps */ int backing_store; /* Never, WhenMapped, Always */ Bool save_unders; long root_input_mask; /* initial root input mask */ } Screen; /* * Format structure; describes ZFormat data the screen will understand. */ typedef struct { XExtData *ext_data; /* hook for extension to hang data */ int depth; /* depth of this image format */ int bits_per_pixel; /* bits/pixel at this depth */ int scanline_pad; /* scanline must padded to this multiple */ } ScreenFormat; /* * Data structure for setting window attributes. */ typedef struct { Pixmap background_pixmap; /* background or None or ParentRelative */ unsigned long background_pixel; /* background pixel */ Pixmap border_pixmap; /* border of the window */ unsigned long border_pixel; /* border pixel value */ int bit_gravity; /* one of bit gravity values */ int win_gravity; /* one of the window gravity values */ int backing_store; /* NotUseful, WhenMapped, Always */ unsigned long backing_planes;/* planes to be preseved if possible */ unsigned long backing_pixel;/* value to use in restoring planes */ Bool save_under; /* should bits under be saved? (popups) */ long event_mask; /* set of events that should be saved */ long do_not_propagate_mask; /* set of events that should not propagate */ Bool override_redirect; /* boolean value for override-redirect */ Colormap colormap; /* color map to be associated with window */ Cursor cursor; /* cursor to be displayed (or None) */ } XSetWindowAttributes; typedef struct { int x, y; /* location of window */ int width, height; /* width and height of window */ int border_width; /* border width of window */ int depth; /* depth of window */ Visual *visual; /* the associated visual structure */ Window root; /* root of screen containing window */ #if defined(__cplusplus) || defined(c_plusplus) int c_class; /* C++ InputOutput, InputOnly*/ #else int class; /* InputOutput, InputOnly*/ #endif int bit_gravity; /* one of bit gravity values */ int win_gravity; /* one of the window gravity values */ int backing_store; /* NotUseful, WhenMapped, Always */ unsigned long backing_planes;/* planes to be preserved if possible */ unsigned long backing_pixel;/* value to be used when restoring planes */ Bool save_under; /* boolean, should bits under be saved? */ Colormap colormap; /* color map to be associated with window */ Bool map_installed; /* boolean, is color map currently installed*/ int map_state; /* IsUnmapped, IsUnviewable, IsViewable */ long all_event_masks; /* set of events all people have interest in*/ long your_event_mask; /* my event mask */ long do_not_propagate_mask; /* set of events that should not propagate */ Bool override_redirect; /* boolean value for override-redirect */ Screen *screen; /* back pointer to correct screen */ } XWindowAttributes; /* * Data structure for host setting; getting routines. * */ typedef struct { int family; /* for example FamilyInternet */ int length; /* length of address, in bytes */ char *address; /* pointer to where to find the bytes */ } XHostAddress; /* * Data structure for ServerFamilyInterpreted addresses in host routines */ typedef struct { int typelength; /* length of type string, in bytes */ int valuelength; /* length of value string, in bytes */ char *type; /* pointer to where to find the type string */ char *value; /* pointer to where to find the address */ } XServerInterpretedAddress; /* * Data structure for "image" data, used by image manipulation routines. */ typedef struct _XImage { int width, height; /* size of image */ int xoffset; /* number of pixels offset in X direction */ int format; /* XYBitmap, XYPixmap, ZPixmap */ char *data; /* pointer to image data */ int byte_order; /* data byte order, LSBFirst, MSBFirst */ int bitmap_unit; /* quant. of scanline 8, 16, 32 */ int bitmap_bit_order; /* LSBFirst, MSBFirst */ int bitmap_pad; /* 8, 16, 32 either XY or ZPixmap */ int depth; /* depth of image */ int bytes_per_line; /* accelarator to next line */ int bits_per_pixel; /* bits per pixel (ZPixmap) */ unsigned long red_mask; /* bits in z arrangment */ unsigned long green_mask; unsigned long blue_mask; XPointer obdata; /* hook for the object routines to hang on */ struct funcs { /* image manipulation routines */ struct _XImage *(*create_image)( struct _XDisplay* /* display */, Visual* /* visual */, unsigned int /* depth */, int /* format */, int /* offset */, char* /* data */, unsigned int /* width */, unsigned int /* height */, int /* bitmap_pad */, int /* bytes_per_line */); int (*destroy_image) (struct _XImage *); unsigned long (*get_pixel) (struct _XImage *, int, int); int (*put_pixel) (struct _XImage *, int, int, unsigned long); struct _XImage *(*sub_image)(struct _XImage *, int, int, unsigned int, unsigned int); int (*add_pixel) (struct _XImage *, long); } f; } XImage; /* * Data structure for XReconfigureWindow */ typedef struct { int x, y; int width, height; int border_width; Window sibling; int stack_mode; } XWindowChanges; /* * Data structure used by color operations */ typedef struct { unsigned long pixel; unsigned short red, green, blue; char flags; /* do_red, do_green, do_blue */ char pad; } XColor; /* * Data structures for graphics operations. On most machines, these are * congruent with the wire protocol structures, so reformatting the data * can be avoided on these architectures. */ typedef struct { short x1, y1, x2, y2; } XSegment; typedef struct { short x, y; } XPoint; typedef struct { short x, y; unsigned short width, height; } XRectangle; typedef struct { short x, y; unsigned short width, height; short angle1, angle2; } XArc; /* Data structure for XChangeKeyboardControl */ typedef struct { int key_click_percent; int bell_percent; int bell_pitch; int bell_duration; int led; int led_mode; int key; int auto_repeat_mode; /* On, Off, Default */ } XKeyboardControl; /* Data structure for XGetKeyboardControl */ typedef struct { int key_click_percent; int bell_percent; unsigned int bell_pitch, bell_duration; unsigned long led_mask; int global_auto_repeat; char auto_repeats[32]; } XKeyboardState; /* Data structure for XGetMotionEvents. */ typedef struct { Time time; short x, y; } XTimeCoord; /* Data structure for X{Set,Get}ModifierMapping */ typedef struct { int max_keypermod; /* The server's max # of keys per modifier */ KeyCode *modifiermap; /* An 8 by max_keypermod array of modifiers */ } XModifierKeymap; /* * Display datatype maintaining display specific data. * The contents of this structure are implementation dependent. * A Display should be treated as opaque by application code. */ #ifndef XLIB_ILLEGAL_ACCESS typedef struct _XDisplay Display; #endif struct _XPrivate; /* Forward declare before use for C++ */ struct _XrmHashBucketRec; typedef struct #ifdef XLIB_ILLEGAL_ACCESS _XDisplay #endif { XExtData *ext_data; /* hook for extension to hang data */ struct _XPrivate *private1; int fd; /* Network socket. */ int private2; int proto_major_version;/* major version of server's X protocol */ int proto_minor_version;/* minor version of servers X protocol */ char *vendor; /* vendor of the server hardware */ XID private3; XID private4; XID private5; int private6; XID (*resource_alloc)( /* allocator function */ struct _XDisplay* ); int byte_order; /* screen byte order, LSBFirst, MSBFirst */ int bitmap_unit; /* padding and data requirements */ int bitmap_pad; /* padding requirements on bitmaps */ int bitmap_bit_order; /* LeastSignificant or MostSignificant */ int nformats; /* number of pixmap formats in list */ ScreenFormat *pixmap_format; /* pixmap format list */ int private8; int release; /* release of the server */ struct _XPrivate *private9, *private10; int qlen; /* Length of input event queue */ unsigned long last_request_read; /* seq number of last event read */ unsigned long request; /* sequence number of last request. */ XPointer private11; XPointer private12; XPointer private13; XPointer private14; unsigned max_request_size; /* maximum number 32 bit words in request*/ struct _XrmHashBucketRec *db; int (*private15)( struct _XDisplay* ); char *display_name; /* "host:display" string used on this connect*/ int default_screen; /* default screen for operations */ int nscreens; /* number of screens on this server*/ Screen *screens; /* pointer to list of screens */ unsigned long motion_buffer; /* size of motion buffer */ unsigned long private16; int min_keycode; /* minimum defined keycode */ int max_keycode; /* maximum defined keycode */ XPointer private17; XPointer private18; int private19; char *xdefaults; /* contents of defaults from server */ /* there is more to this structure, but it is private to Xlib */ } #ifdef XLIB_ILLEGAL_ACCESS Display, #endif *_XPrivDisplay; #undef _XEVENT_ #ifndef _XEVENT_ /* * Definitions of specific events. */ typedef struct { int type; /* of event */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; /* "event" window it is reported relative to */ Window root; /* root window that the event occurred on */ Window subwindow; /* child window */ Time time; /* milliseconds */ int x, y; /* pointer x, y coordinates in event window */ int x_root, y_root; /* coordinates relative to root */ unsigned int state; /* key or button mask */ unsigned int keycode; /* detail */ Bool same_screen; /* same screen flag */ } XKeyEvent; typedef XKeyEvent XKeyPressedEvent; typedef XKeyEvent XKeyReleasedEvent; typedef struct { int type; /* of event */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; /* "event" window it is reported relative to */ Window root; /* root window that the event occurred on */ Window subwindow; /* child window */ Time time; /* milliseconds */ int x, y; /* pointer x, y coordinates in event window */ int x_root, y_root; /* coordinates relative to root */ unsigned int state; /* key or button mask */ unsigned int button; /* detail */ Bool same_screen; /* same screen flag */ } XButtonEvent; typedef XButtonEvent XButtonPressedEvent; typedef XButtonEvent XButtonReleasedEvent; typedef struct { int type; /* of event */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; /* "event" window reported relative to */ Window root; /* root window that the event occurred on */ Window subwindow; /* child window */ Time time; /* milliseconds */ int x, y; /* pointer x, y coordinates in event window */ int x_root, y_root; /* coordinates relative to root */ unsigned int state; /* key or button mask */ char is_hint; /* detail */ Bool same_screen; /* same screen flag */ } XMotionEvent; typedef XMotionEvent XPointerMovedEvent; typedef struct { int type; /* of event */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; /* "event" window reported relative to */ Window root; /* root window that the event occurred on */ Window subwindow; /* child window */ Time time; /* milliseconds */ int x, y; /* pointer x, y coordinates in event window */ int x_root, y_root; /* coordinates relative to root */ int mode; /* NotifyNormal, NotifyGrab, NotifyUngrab */ int detail; /* * NotifyAncestor, NotifyVirtual, NotifyInferior, * NotifyNonlinear,NotifyNonlinearVirtual */ Bool same_screen; /* same screen flag */ Bool focus; /* boolean focus */ unsigned int state; /* key or button mask */ } XCrossingEvent; typedef XCrossingEvent XEnterWindowEvent; typedef XCrossingEvent XLeaveWindowEvent; typedef struct { int type; /* FocusIn or FocusOut */ unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; /* window of event */ int mode; /* NotifyNormal, NotifyWhileGrabbed, NotifyGrab, NotifyUngrab */ int detail; /* * NotifyAncestor, NotifyVirtual, NotifyInferior, * NotifyNonlinear,NotifyNonlinearVirtual, NotifyPointer, * NotifyPointerRoot, NotifyDetailNone */ } XFocusChangeEvent; typedef XFocusChangeEvent XFocusInEvent; typedef XFocusChangeEvent XFocusOutEvent; /* generated on EnterWindow and FocusIn when KeyMapState selected */ typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; char key_vector[32]; } XKeymapEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; int x, y; int width, height; int count; /* if non-zero, at least this many more */ } XExposeEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Drawable drawable; int x, y; int width, height; int count; /* if non-zero, at least this many more */ int major_code; /* core is CopyArea or CopyPlane */ int minor_code; /* not defined in the core */ } XGraphicsExposeEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Drawable drawable; int major_code; /* core is CopyArea or CopyPlane */ int minor_code; /* not defined in the core */ } XNoExposeEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; int state; /* Visibility state */ } XVisibilityEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window parent; /* parent of the window */ Window window; /* window id of window created */ int x, y; /* window location */ int width, height; /* size of window */ int border_width; /* border width */ Bool override_redirect; /* creation should be overridden */ } XCreateWindowEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window event; Window window; } XDestroyWindowEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window event; Window window; Bool from_configure; } XUnmapEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window event; Window window; Bool override_redirect; /* boolean, is override set... */ } XMapEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window parent; Window window; } XMapRequestEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window event; Window window; Window parent; int x, y; Bool override_redirect; } XReparentEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window event; Window window; int x, y; int width, height; int border_width; Window above; Bool override_redirect; } XConfigureEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window event; Window window; int x, y; } XGravityEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; int width, height; } XResizeRequestEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window parent; Window window; int x, y; int width, height; int border_width; Window above; int detail; /* Above, Below, TopIf, BottomIf, Opposite */ unsigned long value_mask; } XConfigureRequestEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window event; Window window; int place; /* PlaceOnTop, PlaceOnBottom */ } XCirculateEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window parent; Window window; int place; /* PlaceOnTop, PlaceOnBottom */ } XCirculateRequestEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; Atom atom; Time time; int state; /* NewValue, Deleted */ } XPropertyEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; Atom selection; Time time; } XSelectionClearEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window owner; Window requestor; Atom selection; Atom target; Atom property; Time time; } XSelectionRequestEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window requestor; Atom selection; Atom target; Atom property; /* ATOM or None */ Time time; } XSelectionEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; Colormap colormap; /* COLORMAP or None */ #if defined(__cplusplus) || defined(c_plusplus) Bool c_new; /* C++ */ #else Bool new; #endif int state; /* ColormapInstalled, ColormapUninstalled */ } XColormapEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; Atom message_type; int format; union { char b[20]; short s[10]; long l[5]; } data; } XClientMessageEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display; /* Display the event was read from */ Window window; /* unused */ int request; /* one of MappingModifier, MappingKeyboard, MappingPointer */ int first_keycode; /* first keycode */ int count; /* defines range of change w. first_keycode*/ } XMappingEvent; typedef struct { int type; Display *display; /* Display the event was read from */ XID resourceid; /* resource id */ unsigned long serial; /* serial number of failed request */ unsigned char error_code; /* error code of failed request */ unsigned char request_code; /* Major op-code of failed request */ unsigned char minor_code; /* Minor op-code of failed request */ } XErrorEvent; typedef struct { int type; unsigned long serial; /* # of last request processed by server */ Bool send_event; /* true if this came from a SendEvent request */ Display *display;/* Display the event was read from */ Window window; /* window on which event was requested in event mask */ } XAnyEvent; /*************************************************************** * * GenericEvent. This event is the standard event for all newer extensions. */ typedef struct { int type; /* of event. Always GenericEvent */ unsigned long serial; /* # of last request processed */ Bool send_event; /* true if from SendEvent request */ Display *display; /* Display the event was read from */ int extension; /* major opcode of extension that caused the event */ int evtype; /* actual event type. */ } XGenericEvent; typedef struct { int type; /* of event. Always GenericEvent */ unsigned long serial; /* # of last request processed */ Bool send_event; /* true if from SendEvent request */ Display *display; /* Display the event was read from */ int extension; /* major opcode of extension that caused the event */ int evtype; /* actual event type. */ unsigned int cookie; void *data; } XGenericEventCookie; /* * this union is defined so Xlib can always use the same sized * event structure internally, to avoid memory fragmentation. */ typedef union _XEvent { int type; /* must not be changed; first element */ XAnyEvent xany; XKeyEvent xkey; XButtonEvent xbutton; XMotionEvent xmotion; XCrossingEvent xcrossing; XFocusChangeEvent xfocus; XExposeEvent xexpose; XGraphicsExposeEvent xgraphicsexpose; XNoExposeEvent xnoexpose; XVisibilityEvent xvisibility; XCreateWindowEvent xcreatewindow; XDestroyWindowEvent xdestroywindow; XUnmapEvent xunmap; XMapEvent xmap; XMapRequestEvent xmaprequest; XReparentEvent xreparent; XConfigureEvent xconfigure; XGravityEvent xgravity; XResizeRequestEvent xresizerequest; XConfigureRequestEvent xconfigurerequest; XCirculateEvent xcirculate; XCirculateRequestEvent xcirculaterequest; XPropertyEvent xproperty; XSelectionClearEvent xselectionclear; XSelectionRequestEvent xselectionrequest; XSelectionEvent xselection; XColormapEvent xcolormap; XClientMessageEvent xclient; XMappingEvent xmapping; XErrorEvent xerror; XKeymapEvent xkeymap; XGenericEvent xgeneric; XGenericEventCookie xcookie; long pad[24]; } XEvent; #endif #define XAllocID(dpy) ((*((_XPrivDisplay)dpy)->resource_alloc)((dpy))) /* * per character font metric information. */ typedef struct { short lbearing; /* origin to left edge of raster */ short rbearing; /* origin to right edge of raster */ short width; /* advance to next char's origin */ short ascent; /* baseline to top edge of raster */ short descent; /* baseline to bottom edge of raster */ unsigned short attributes; /* per char flags (not predefined) */ } XCharStruct; /* * To allow arbitrary information with fonts, there are additional properties * returned. */ typedef struct { Atom name; unsigned long card32; } XFontProp; typedef struct { XExtData *ext_data; /* hook for extension to hang data */ Font fid; /* Font id for this font */ unsigned direction; /* hint about direction the font is painted */ unsigned min_char_or_byte2;/* first character */ unsigned max_char_or_byte2;/* last character */ unsigned min_byte1; /* first row that exists */ unsigned max_byte1; /* last row that exists */ Bool all_chars_exist;/* flag if all characters have non-zero size*/ unsigned default_char; /* char to print for undefined character */ int n_properties; /* how many properties there are */ XFontProp *properties; /* pointer to array of additional properties*/ XCharStruct min_bounds; /* minimum bounds over all existing char*/ XCharStruct max_bounds; /* maximum bounds over all existing char*/ XCharStruct *per_char; /* first_char to last_char information */ int ascent; /* log. extent above baseline for spacing */ int descent; /* log. descent below baseline for spacing */ } XFontStruct; /* * PolyText routines take these as arguments. */ typedef struct { char *chars; /* pointer to string */ int nchars; /* number of characters */ int delta; /* delta between strings */ Font font; /* font to print it in, None don't change */ } XTextItem; typedef struct { /* normal 16 bit characters are two bytes */ unsigned char byte1; unsigned char byte2; } XChar2b; typedef struct { XChar2b *chars; /* two byte characters */ int nchars; /* number of characters */ int delta; /* delta between strings */ Font font; /* font to print it in, None don't change */ } XTextItem16; typedef union { Display *display; GC gc; Visual *visual; Screen *screen; ScreenFormat *pixmap_format; XFontStruct *font; } XEDataObject; typedef struct { XRectangle max_ink_extent; XRectangle max_logical_extent; } XFontSetExtents; /* unused: typedef void (*XOMProc)(); */ typedef struct _XOM *XOM; typedef struct _XOC *XOC, *XFontSet; typedef struct { char *chars; int nchars; int delta; XFontSet font_set; } XmbTextItem; typedef struct { wchar_t *chars; int nchars; int delta; XFontSet font_set; } XwcTextItem; #define XNRequiredCharSet "requiredCharSet" #define XNQueryOrientation "queryOrientation" #define XNBaseFontName "baseFontName" #define XNOMAutomatic "omAutomatic" #define XNMissingCharSet "missingCharSet" #define XNDefaultString "defaultString" #define XNOrientation "orientation" #define XNDirectionalDependentDrawing "directionalDependentDrawing" #define XNContextualDrawing "contextualDrawing" #define XNFontInfo "fontInfo" typedef struct { int charset_count; char **charset_list; } XOMCharSetList; typedef enum { XOMOrientation_LTR_TTB, XOMOrientation_RTL_TTB, XOMOrientation_TTB_LTR, XOMOrientation_TTB_RTL, XOMOrientation_Context } XOrientation; typedef struct { int num_orientation; XOrientation *orientation; /* Input Text description */ } XOMOrientation; typedef struct { int num_font; XFontStruct **font_struct_list; char **font_name_list; } XOMFontInfo; typedef struct _XIM *XIM; typedef struct _XIC *XIC; typedef void (*XIMProc)( XIM, XPointer, XPointer ); typedef Bool (*XICProc)( XIC, XPointer, XPointer ); typedef void (*XIDProc)( Display*, XPointer, XPointer ); typedef unsigned long XIMStyle; typedef struct { unsigned short count_styles; XIMStyle *supported_styles; } XIMStyles; #define XIMPreeditArea 0x0001L #define XIMPreeditCallbacks 0x0002L #define XIMPreeditPosition 0x0004L #define XIMPreeditNothing 0x0008L #define XIMPreeditNone 0x0010L #define XIMStatusArea 0x0100L #define XIMStatusCallbacks 0x0200L #define XIMStatusNothing 0x0400L #define XIMStatusNone 0x0800L #define XNVaNestedList "XNVaNestedList" #define XNQueryInputStyle "queryInputStyle" #define XNClientWindow "clientWindow" #define XNInputStyle "inputStyle" #define XNFocusWindow "focusWindow" #define XNResourceName "resourceName" #define XNResourceClass "resourceClass" #define XNGeometryCallback "geometryCallback" #define XNDestroyCallback "destroyCallback" #define XNFilterEvents "filterEvents" #define XNPreeditStartCallback "preeditStartCallback" #define XNPreeditDoneCallback "preeditDoneCallback" #define XNPreeditDrawCallback "preeditDrawCallback" #define XNPreeditCaretCallback "preeditCaretCallback" #define XNPreeditStateNotifyCallback "preeditStateNotifyCallback" #define XNPreeditAttributes "preeditAttributes" #define XNStatusStartCallback "statusStartCallback" #define XNStatusDoneCallback "statusDoneCallback" #define XNStatusDrawCallback "statusDrawCallback" #define XNStatusAttributes "statusAttributes" #define XNArea "area" #define XNAreaNeeded "areaNeeded" #define XNSpotLocation "spotLocation" #define XNColormap "colorMap" #define XNStdColormap "stdColorMap" #define XNForeground "foreground" #define XNBackground "background" #define XNBackgroundPixmap "backgroundPixmap" #define XNFontSet "fontSet" #define XNLineSpace "lineSpace" #define XNCursor "cursor" #define XNQueryIMValuesList "queryIMValuesList" #define XNQueryICValuesList "queryICValuesList" #define XNVisiblePosition "visiblePosition" #define XNR6PreeditCallback "r6PreeditCallback" #define XNStringConversionCallback "stringConversionCallback" #define XNStringConversion "stringConversion" #define XNResetState "resetState" #define XNHotKey "hotKey" #define XNHotKeyState "hotKeyState" #define XNPreeditState "preeditState" #define XNSeparatorofNestedList "separatorofNestedList" #define XBufferOverflow -1 #define XLookupNone 1 #define XLookupChars 2 #define XLookupKeySym 3 #define XLookupBoth 4 typedef void *XVaNestedList; typedef struct { XPointer client_data; XIMProc callback; } XIMCallback; typedef struct { XPointer client_data; XICProc callback; } XICCallback; typedef unsigned long XIMFeedback; #define XIMReverse 1L #define XIMUnderline (1L<<1) #define XIMHighlight (1L<<2) #define XIMPrimary (1L<<5) #define XIMSecondary (1L<<6) #define XIMTertiary (1L<<7) #define XIMVisibleToForward (1L<<8) #define XIMVisibleToBackword (1L<<9) #define XIMVisibleToCenter (1L<<10) typedef struct _XIMText { unsigned short length; XIMFeedback *feedback; Bool encoding_is_wchar; union { char *multi_byte; wchar_t *wide_char; } string; } XIMText; typedef unsigned long XIMPreeditState; #define XIMPreeditUnKnown 0L #define XIMPreeditEnable 1L #define XIMPreeditDisable (1L<<1) typedef struct _XIMPreeditStateNotifyCallbackStruct { XIMPreeditState state; } XIMPreeditStateNotifyCallbackStruct; typedef unsigned long XIMResetState; #define XIMInitialState 1L #define XIMPreserveState (1L<<1) typedef unsigned long XIMStringConversionFeedback; #define XIMStringConversionLeftEdge (0x00000001) #define XIMStringConversionRightEdge (0x00000002) #define XIMStringConversionTopEdge (0x00000004) #define XIMStringConversionBottomEdge (0x00000008) #define XIMStringConversionConcealed (0x00000010) #define XIMStringConversionWrapped (0x00000020) typedef struct _XIMStringConversionText { unsigned short length; XIMStringConversionFeedback *feedback; Bool encoding_is_wchar; union { char *mbs; wchar_t *wcs; } string; } XIMStringConversionText; typedef unsigned short XIMStringConversionPosition; typedef unsigned short XIMStringConversionType; #define XIMStringConversionBuffer (0x0001) #define XIMStringConversionLine (0x0002) #define XIMStringConversionWord (0x0003) #define XIMStringConversionChar (0x0004) typedef unsigned short XIMStringConversionOperation; #define XIMStringConversionSubstitution (0x0001) #define XIMStringConversionRetrieval (0x0002) typedef enum { XIMForwardChar, XIMBackwardChar, XIMForwardWord, XIMBackwardWord, XIMCaretUp, XIMCaretDown, XIMNextLine, XIMPreviousLine, XIMLineStart, XIMLineEnd, XIMAbsolutePosition, XIMDontChange } XIMCaretDirection; typedef struct _XIMStringConversionCallbackStruct { XIMStringConversionPosition position; XIMCaretDirection direction; XIMStringConversionOperation operation; unsigned short factor; XIMStringConversionText *text; } XIMStringConversionCallbackStruct; typedef struct _XIMPreeditDrawCallbackStruct { int caret; /* Cursor offset within pre-edit string */ int chg_first; /* Starting change position */ int chg_length; /* Length of the change in character count */ XIMText *text; } XIMPreeditDrawCallbackStruct; typedef enum { XIMIsInvisible, /* Disable caret feedback */ XIMIsPrimary, /* UI defined caret feedback */ XIMIsSecondary /* UI defined caret feedback */ } XIMCaretStyle; typedef struct _XIMPreeditCaretCallbackStruct { int position; /* Caret offset within pre-edit string */ XIMCaretDirection direction; /* Caret moves direction */ XIMCaretStyle style; /* Feedback of the caret */ } XIMPreeditCaretCallbackStruct; typedef enum { XIMTextType, XIMBitmapType } XIMStatusDataType; typedef struct _XIMStatusDrawCallbackStruct { XIMStatusDataType type; union { XIMText *text; Pixmap bitmap; } data; } XIMStatusDrawCallbackStruct; typedef struct _XIMHotKeyTrigger { KeySym keysym; int modifier; int modifier_mask; } XIMHotKeyTrigger; typedef struct _XIMHotKeyTriggers { int num_hot_key; XIMHotKeyTrigger *key; } XIMHotKeyTriggers; typedef unsigned long XIMHotKeyState; #define XIMHotKeyStateON (0x0001L) #define XIMHotKeyStateOFF (0x0002L) typedef struct { unsigned short count_values; char **supported_values; } XIMValuesList; _XFUNCPROTOBEGIN #if defined(WIN32) && !defined(_XLIBINT_) #define _Xdebug (*_Xdebug_p) #endif extern int _Xdebug; extern XFontStruct *XLoadQueryFont( Display* /* display */, _Xconst char* /* name */ ); extern XFontStruct *XQueryFont( Display* /* display */, XID /* font_ID */ ); extern XTimeCoord *XGetMotionEvents( Display* /* display */, Window /* w */, Time /* start */, Time /* stop */, int* /* nevents_return */ ); extern XModifierKeymap *XDeleteModifiermapEntry( XModifierKeymap* /* modmap */, #if NeedWidePrototypes unsigned int /* keycode_entry */, #else KeyCode /* keycode_entry */, #endif int /* modifier */ ); extern XModifierKeymap *XGetModifierMapping( Display* /* display */ ); extern XModifierKeymap *XInsertModifiermapEntry( XModifierKeymap* /* modmap */, #if NeedWidePrototypes unsigned int /* keycode_entry */, #else KeyCode /* keycode_entry */, #endif int /* modifier */ ); extern XModifierKeymap *XNewModifiermap( int /* max_keys_per_mod */ ); extern XImage *XCreateImage( Display* /* display */, Visual* /* visual */, unsigned int /* depth */, int /* format */, int /* offset */, char* /* data */, unsigned int /* width */, unsigned int /* height */, int /* bitmap_pad */, int /* bytes_per_line */ ); extern Status XInitImage( XImage* /* image */ ); extern XImage *XGetImage( Display* /* display */, Drawable /* d */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */, unsigned long /* plane_mask */, int /* format */ ); extern XImage *XGetSubImage( Display* /* display */, Drawable /* d */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */, unsigned long /* plane_mask */, int /* format */, XImage* /* dest_image */, int /* dest_x */, int /* dest_y */ ); /* * X function declarations. */ extern Display *XOpenDisplay( _Xconst char* /* display_name */ ); extern void XrmInitialize( void ); extern char *XFetchBytes( Display* /* display */, int* /* nbytes_return */ ); extern char *XFetchBuffer( Display* /* display */, int* /* nbytes_return */, int /* buffer */ ); extern char *XGetAtomName( Display* /* display */, Atom /* atom */ ); extern Status XGetAtomNames( Display* /* dpy */, Atom* /* atoms */, int /* count */, char** /* names_return */ ); extern char *XGetDefault( Display* /* display */, _Xconst char* /* program */, _Xconst char* /* option */ ); extern char *XDisplayName( _Xconst char* /* string */ ); extern char *XKeysymToString( KeySym /* keysym */ ); extern int (*XSynchronize( Display* /* display */, Bool /* onoff */ ))( Display* /* display */ ); extern int (*XSetAfterFunction( Display* /* display */, int (*) ( Display* /* display */ ) /* procedure */ ))( Display* /* display */ ); extern Atom XInternAtom( Display* /* display */, _Xconst char* /* atom_name */, Bool /* only_if_exists */ ); extern Status XInternAtoms( Display* /* dpy */, char** /* names */, int /* count */, Bool /* onlyIfExists */, Atom* /* atoms_return */ ); extern Colormap XCopyColormapAndFree( Display* /* display */, Colormap /* colormap */ ); extern Colormap XCreateColormap( Display* /* display */, Window /* w */, Visual* /* visual */, int /* alloc */ ); extern Cursor XCreatePixmapCursor( Display* /* display */, Pixmap /* source */, Pixmap /* mask */, XColor* /* foreground_color */, XColor* /* background_color */, unsigned int /* x */, unsigned int /* y */ ); extern Cursor XCreateGlyphCursor( Display* /* display */, Font /* source_font */, Font /* mask_font */, unsigned int /* source_char */, unsigned int /* mask_char */, XColor _Xconst * /* foreground_color */, XColor _Xconst * /* background_color */ ); extern Cursor XCreateFontCursor( Display* /* display */, unsigned int /* shape */ ); extern Font XLoadFont( Display* /* display */, _Xconst char* /* name */ ); extern GC XCreateGC( Display* /* display */, Drawable /* d */, unsigned long /* valuemask */, XGCValues* /* values */ ); extern GContext XGContextFromGC( GC /* gc */ ); extern void XFlushGC( Display* /* display */, GC /* gc */ ); extern Pixmap XCreatePixmap( Display* /* display */, Drawable /* d */, unsigned int /* width */, unsigned int /* height */, unsigned int /* depth */ ); extern Pixmap XCreateBitmapFromData( Display* /* display */, Drawable /* d */, _Xconst char* /* data */, unsigned int /* width */, unsigned int /* height */ ); extern Pixmap XCreatePixmapFromBitmapData( Display* /* display */, Drawable /* d */, char* /* data */, unsigned int /* width */, unsigned int /* height */, unsigned long /* fg */, unsigned long /* bg */, unsigned int /* depth */ ); extern Window XCreateSimpleWindow( Display* /* display */, Window /* parent */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */, unsigned int /* border_width */, unsigned long /* border */, unsigned long /* background */ ); extern Window XGetSelectionOwner( Display* /* display */, Atom /* selection */ ); extern Window XCreateWindow( Display* /* display */, Window /* parent */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */, unsigned int /* border_width */, int /* depth */, unsigned int /* class */, Visual* /* visual */, unsigned long /* valuemask */, XSetWindowAttributes* /* attributes */ ); extern Colormap *XListInstalledColormaps( Display* /* display */, Window /* w */, int* /* num_return */ ); extern char **XListFonts( Display* /* display */, _Xconst char* /* pattern */, int /* maxnames */, int* /* actual_count_return */ ); extern char **XListFontsWithInfo( Display* /* display */, _Xconst char* /* pattern */, int /* maxnames */, int* /* count_return */, XFontStruct** /* info_return */ ); extern char **XGetFontPath( Display* /* display */, int* /* npaths_return */ ); extern char **XListExtensions( Display* /* display */, int* /* nextensions_return */ ); extern Atom *XListProperties( Display* /* display */, Window /* w */, int* /* num_prop_return */ ); extern XHostAddress *XListHosts( Display* /* display */, int* /* nhosts_return */, Bool* /* state_return */ ); _X_DEPRECATED extern KeySym XKeycodeToKeysym( Display* /* display */, #if NeedWidePrototypes unsigned int /* keycode */, #else KeyCode /* keycode */, #endif int /* index */ ); extern KeySym XLookupKeysym( XKeyEvent* /* key_event */, int /* index */ ); extern KeySym *XGetKeyboardMapping( Display* /* display */, #if NeedWidePrototypes unsigned int /* first_keycode */, #else KeyCode /* first_keycode */, #endif int /* keycode_count */, int* /* keysyms_per_keycode_return */ ); extern KeySym XStringToKeysym( _Xconst char* /* string */ ); extern long XMaxRequestSize( Display* /* display */ ); extern long XExtendedMaxRequestSize( Display* /* display */ ); extern char *XResourceManagerString( Display* /* display */ ); extern char *XScreenResourceString( Screen* /* screen */ ); extern unsigned long XDisplayMotionBufferSize( Display* /* display */ ); extern VisualID XVisualIDFromVisual( Visual* /* visual */ ); /* multithread routines */ extern Status XInitThreads( void ); extern void XLockDisplay( Display* /* display */ ); extern void XUnlockDisplay( Display* /* display */ ); /* routines for dealing with extensions */ extern XExtCodes *XInitExtension( Display* /* display */, _Xconst char* /* name */ ); extern XExtCodes *XAddExtension( Display* /* display */ ); extern XExtData *XFindOnExtensionList( XExtData** /* structure */, int /* number */ ); extern XExtData **XEHeadOfExtensionList( XEDataObject /* object */ ); /* these are routines for which there are also macros */ extern Window XRootWindow( Display* /* display */, int /* screen_number */ ); extern Window XDefaultRootWindow( Display* /* display */ ); extern Window XRootWindowOfScreen( Screen* /* screen */ ); extern Visual *XDefaultVisual( Display* /* display */, int /* screen_number */ ); extern Visual *XDefaultVisualOfScreen( Screen* /* screen */ ); extern GC XDefaultGC( Display* /* display */, int /* screen_number */ ); extern GC XDefaultGCOfScreen( Screen* /* screen */ ); extern unsigned long XBlackPixel( Display* /* display */, int /* screen_number */ ); extern unsigned long XWhitePixel( Display* /* display */, int /* screen_number */ ); extern unsigned long XAllPlanes( void ); extern unsigned long XBlackPixelOfScreen( Screen* /* screen */ ); extern unsigned long XWhitePixelOfScreen( Screen* /* screen */ ); extern unsigned long XNextRequest( Display* /* display */ ); extern unsigned long XLastKnownRequestProcessed( Display* /* display */ ); extern char *XServerVendor( Display* /* display */ ); extern char *XDisplayString( Display* /* display */ ); extern Colormap XDefaultColormap( Display* /* display */, int /* screen_number */ ); extern Colormap XDefaultColormapOfScreen( Screen* /* screen */ ); extern Display *XDisplayOfScreen( Screen* /* screen */ ); extern Screen *XScreenOfDisplay( Display* /* display */, int /* screen_number */ ); extern Screen *XDefaultScreenOfDisplay( Display* /* display */ ); extern long XEventMaskOfScreen( Screen* /* screen */ ); extern int XScreenNumberOfScreen( Screen* /* screen */ ); typedef int (*XErrorHandler) ( /* WARNING, this type not in Xlib spec */ Display* /* display */, XErrorEvent* /* error_event */ ); extern XErrorHandler XSetErrorHandler ( XErrorHandler /* handler */ ); typedef int (*XIOErrorHandler) ( /* WARNING, this type not in Xlib spec */ Display* /* display */ ); extern XIOErrorHandler XSetIOErrorHandler ( XIOErrorHandler /* handler */ ); extern XPixmapFormatValues *XListPixmapFormats( Display* /* display */, int* /* count_return */ ); extern int *XListDepths( Display* /* display */, int /* screen_number */, int* /* count_return */ ); /* ICCCM routines for things that don't require special include files; */ /* other declarations are given in Xutil.h */ extern Status XReconfigureWMWindow( Display* /* display */, Window /* w */, int /* screen_number */, unsigned int /* mask */, XWindowChanges* /* changes */ ); extern Status XGetWMProtocols( Display* /* display */, Window /* w */, Atom** /* protocols_return */, int* /* count_return */ ); extern Status XSetWMProtocols( Display* /* display */, Window /* w */, Atom* /* protocols */, int /* count */ ); extern Status XIconifyWindow( Display* /* display */, Window /* w */, int /* screen_number */ ); extern Status XWithdrawWindow( Display* /* display */, Window /* w */, int /* screen_number */ ); extern Status XGetCommand( Display* /* display */, Window /* w */, char*** /* argv_return */, int* /* argc_return */ ); extern Status XGetWMColormapWindows( Display* /* display */, Window /* w */, Window** /* windows_return */, int* /* count_return */ ); extern Status XSetWMColormapWindows( Display* /* display */, Window /* w */, Window* /* colormap_windows */, int /* count */ ); extern void XFreeStringList( char** /* list */ ); extern int XSetTransientForHint( Display* /* display */, Window /* w */, Window /* prop_window */ ); /* The following are given in alphabetical order */ extern int XActivateScreenSaver( Display* /* display */ ); extern int XAddHost( Display* /* display */, XHostAddress* /* host */ ); extern int XAddHosts( Display* /* display */, XHostAddress* /* hosts */, int /* num_hosts */ ); extern int XAddToExtensionList( struct _XExtData** /* structure */, XExtData* /* ext_data */ ); extern int XAddToSaveSet( Display* /* display */, Window /* w */ ); extern Status XAllocColor( Display* /* display */, Colormap /* colormap */, XColor* /* screen_in_out */ ); extern Status XAllocColorCells( Display* /* display */, Colormap /* colormap */, Bool /* contig */, unsigned long* /* plane_masks_return */, unsigned int /* nplanes */, unsigned long* /* pixels_return */, unsigned int /* npixels */ ); extern Status XAllocColorPlanes( Display* /* display */, Colormap /* colormap */, Bool /* contig */, unsigned long* /* pixels_return */, int /* ncolors */, int /* nreds */, int /* ngreens */, int /* nblues */, unsigned long* /* rmask_return */, unsigned long* /* gmask_return */, unsigned long* /* bmask_return */ ); extern Status XAllocNamedColor( Display* /* display */, Colormap /* colormap */, _Xconst char* /* color_name */, XColor* /* screen_def_return */, XColor* /* exact_def_return */ ); extern int XAllowEvents( Display* /* display */, int /* event_mode */, Time /* time */ ); extern int XAutoRepeatOff( Display* /* display */ ); extern int XAutoRepeatOn( Display* /* display */ ); extern int XBell( Display* /* display */, int /* percent */ ); extern int XBitmapBitOrder( Display* /* display */ ); extern int XBitmapPad( Display* /* display */ ); extern int XBitmapUnit( Display* /* display */ ); extern int XCellsOfScreen( Screen* /* screen */ ); extern int XChangeActivePointerGrab( Display* /* display */, unsigned int /* event_mask */, Cursor /* cursor */, Time /* time */ ); extern int XChangeGC( Display* /* display */, GC /* gc */, unsigned long /* valuemask */, XGCValues* /* values */ ); extern int XChangeKeyboardControl( Display* /* display */, unsigned long /* value_mask */, XKeyboardControl* /* values */ ); extern int XChangeKeyboardMapping( Display* /* display */, int /* first_keycode */, int /* keysyms_per_keycode */, KeySym* /* keysyms */, int /* num_codes */ ); extern int XChangePointerControl( Display* /* display */, Bool /* do_accel */, Bool /* do_threshold */, int /* accel_numerator */, int /* accel_denominator */, int /* threshold */ ); extern int XChangeProperty( Display* /* display */, Window /* w */, Atom /* property */, Atom /* type */, int /* format */, int /* mode */, _Xconst unsigned char* /* data */, int /* nelements */ ); extern int XChangeSaveSet( Display* /* display */, Window /* w */, int /* change_mode */ ); extern int XChangeWindowAttributes( Display* /* display */, Window /* w */, unsigned long /* valuemask */, XSetWindowAttributes* /* attributes */ ); extern Bool XCheckIfEvent( Display* /* display */, XEvent* /* event_return */, Bool (*) ( Display* /* display */, XEvent* /* event */, XPointer /* arg */ ) /* predicate */, XPointer /* arg */ ); extern Bool XCheckMaskEvent( Display* /* display */, long /* event_mask */, XEvent* /* event_return */ ); extern Bool XCheckTypedEvent( Display* /* display */, int /* event_type */, XEvent* /* event_return */ ); extern Bool XCheckTypedWindowEvent( Display* /* display */, Window /* w */, int /* event_type */, XEvent* /* event_return */ ); extern Bool XCheckWindowEvent( Display* /* display */, Window /* w */, long /* event_mask */, XEvent* /* event_return */ ); extern int XCirculateSubwindows( Display* /* display */, Window /* w */, int /* direction */ ); extern int XCirculateSubwindowsDown( Display* /* display */, Window /* w */ ); extern int XCirculateSubwindowsUp( Display* /* display */, Window /* w */ ); extern int XClearArea( Display* /* display */, Window /* w */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */, Bool /* exposures */ ); extern int XClearWindow( Display* /* display */, Window /* w */ ); extern int XCloseDisplay( Display* /* display */ ); extern int XConfigureWindow( Display* /* display */, Window /* w */, unsigned int /* value_mask */, XWindowChanges* /* values */ ); extern int XConnectionNumber( Display* /* display */ ); extern int XConvertSelection( Display* /* display */, Atom /* selection */, Atom /* target */, Atom /* property */, Window /* requestor */, Time /* time */ ); extern int XCopyArea( Display* /* display */, Drawable /* src */, Drawable /* dest */, GC /* gc */, int /* src_x */, int /* src_y */, unsigned int /* width */, unsigned int /* height */, int /* dest_x */, int /* dest_y */ ); extern int XCopyGC( Display* /* display */, GC /* src */, unsigned long /* valuemask */, GC /* dest */ ); extern int XCopyPlane( Display* /* display */, Drawable /* src */, Drawable /* dest */, GC /* gc */, int /* src_x */, int /* src_y */, unsigned int /* width */, unsigned int /* height */, int /* dest_x */, int /* dest_y */, unsigned long /* plane */ ); extern int XDefaultDepth( Display* /* display */, int /* screen_number */ ); extern int XDefaultDepthOfScreen( Screen* /* screen */ ); extern int XDefaultScreen( Display* /* display */ ); extern int XDefineCursor( Display* /* display */, Window /* w */, Cursor /* cursor */ ); extern int XDeleteProperty( Display* /* display */, Window /* w */, Atom /* property */ ); extern int XDestroyWindow( Display* /* display */, Window /* w */ ); extern int XDestroySubwindows( Display* /* display */, Window /* w */ ); extern int XDoesBackingStore( Screen* /* screen */ ); extern Bool XDoesSaveUnders( Screen* /* screen */ ); extern int XDisableAccessControl( Display* /* display */ ); extern int XDisplayCells( Display* /* display */, int /* screen_number */ ); extern int XDisplayHeight( Display* /* display */, int /* screen_number */ ); extern int XDisplayHeightMM( Display* /* display */, int /* screen_number */ ); extern int XDisplayKeycodes( Display* /* display */, int* /* min_keycodes_return */, int* /* max_keycodes_return */ ); extern int XDisplayPlanes( Display* /* display */, int /* screen_number */ ); extern int XDisplayWidth( Display* /* display */, int /* screen_number */ ); extern int XDisplayWidthMM( Display* /* display */, int /* screen_number */ ); extern int XDrawArc( Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */, int /* angle1 */, int /* angle2 */ ); extern int XDrawArcs( Display* /* display */, Drawable /* d */, GC /* gc */, XArc* /* arcs */, int /* narcs */ ); extern int XDrawImageString( Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, _Xconst char* /* string */, int /* length */ ); extern int XDrawImageString16( Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, _Xconst XChar2b* /* string */, int /* length */ ); extern int XDrawLine( Display* /* display */, Drawable /* d */, GC /* gc */, int /* x1 */, int /* y1 */, int /* x2 */, int /* y2 */ ); extern int XDrawLines( Display* /* display */, Drawable /* d */, GC /* gc */, XPoint* /* points */, int /* npoints */, int /* mode */ ); extern int XDrawPoint( Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */ ); extern int XDrawPoints( Display* /* display */, Drawable /* d */, GC /* gc */, XPoint* /* points */, int /* npoints */, int /* mode */ ); extern int XDrawRectangle( Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */ ); extern int XDrawRectangles( Display* /* display */, Drawable /* d */, GC /* gc */, XRectangle* /* rectangles */, int /* nrectangles */ ); extern int XDrawSegments( Display* /* display */, Drawable /* d */, GC /* gc */, XSegment* /* segments */, int /* nsegments */ ); extern int XDrawString( Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, _Xconst char* /* string */, int /* length */ ); extern int XDrawString16( Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, _Xconst XChar2b* /* string */, int /* length */ ); extern int XDrawText( Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, XTextItem* /* items */, int /* nitems */ ); extern int XDrawText16( Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, XTextItem16* /* items */, int /* nitems */ ); extern int XEnableAccessControl( Display* /* display */ ); extern int XEventsQueued( Display* /* display */, int /* mode */ ); extern Status XFetchName( Display* /* display */, Window /* w */, char** /* window_name_return */ ); extern int XFillArc( Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */, int /* angle1 */, int /* angle2 */ ); extern int XFillArcs( Display* /* display */, Drawable /* d */, GC /* gc */, XArc* /* arcs */, int /* narcs */ ); extern int XFillPolygon( Display* /* display */, Drawable /* d */, GC /* gc */, XPoint* /* points */, int /* npoints */, int /* shape */, int /* mode */ ); extern int XFillRectangle( Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */ ); extern int XFillRectangles( Display* /* display */, Drawable /* d */, GC /* gc */, XRectangle* /* rectangles */, int /* nrectangles */ ); extern int XFlush( Display* /* display */ ); extern int XForceScreenSaver( Display* /* display */, int /* mode */ ); extern int XFree( void* /* data */ ); extern int XFreeColormap( Display* /* display */, Colormap /* colormap */ ); extern int XFreeColors( Display* /* display */, Colormap /* colormap */, unsigned long* /* pixels */, int /* npixels */, unsigned long /* planes */ ); extern int XFreeCursor( Display* /* display */, Cursor /* cursor */ ); extern int XFreeExtensionList( char** /* list */ ); extern int XFreeFont( Display* /* display */, XFontStruct* /* font_struct */ ); extern int XFreeFontInfo( char** /* names */, XFontStruct* /* free_info */, int /* actual_count */ ); extern int XFreeFontNames( char** /* list */ ); extern int XFreeFontPath( char** /* list */ ); extern int XFreeGC( Display* /* display */, GC /* gc */ ); extern int XFreeModifiermap( XModifierKeymap* /* modmap */ ); extern int XFreePixmap( Display* /* display */, Pixmap /* pixmap */ ); extern int XGeometry( Display* /* display */, int /* screen */, _Xconst char* /* position */, _Xconst char* /* default_position */, unsigned int /* bwidth */, unsigned int /* fwidth */, unsigned int /* fheight */, int /* xadder */, int /* yadder */, int* /* x_return */, int* /* y_return */, int* /* width_return */, int* /* height_return */ ); extern int XGetErrorDatabaseText( Display* /* display */, _Xconst char* /* name */, _Xconst char* /* message */, _Xconst char* /* default_string */, char* /* buffer_return */, int /* length */ ); extern int XGetErrorText( Display* /* display */, int /* code */, char* /* buffer_return */, int /* length */ ); extern Bool XGetFontProperty( XFontStruct* /* font_struct */, Atom /* atom */, unsigned long* /* value_return */ ); extern Status XGetGCValues( Display* /* display */, GC /* gc */, unsigned long /* valuemask */, XGCValues* /* values_return */ ); extern Status XGetGeometry( Display* /* display */, Drawable /* d */, Window* /* root_return */, int* /* x_return */, int* /* y_return */, unsigned int* /* width_return */, unsigned int* /* height_return */, unsigned int* /* border_width_return */, unsigned int* /* depth_return */ ); extern Status XGetIconName( Display* /* display */, Window /* w */, char** /* icon_name_return */ ); extern int XGetInputFocus( Display* /* display */, Window* /* focus_return */, int* /* revert_to_return */ ); extern int XGetKeyboardControl( Display* /* display */, XKeyboardState* /* values_return */ ); extern int XGetPointerControl( Display* /* display */, int* /* accel_numerator_return */, int* /* accel_denominator_return */, int* /* threshold_return */ ); extern int XGetPointerMapping( Display* /* display */, unsigned char* /* map_return */, int /* nmap */ ); extern int XGetScreenSaver( Display* /* display */, int* /* timeout_return */, int* /* interval_return */, int* /* prefer_blanking_return */, int* /* allow_exposures_return */ ); extern Status XGetTransientForHint( Display* /* display */, Window /* w */, Window* /* prop_window_return */ ); extern int XGetWindowProperty( Display* /* display */, Window /* w */, Atom /* property */, long /* long_offset */, long /* long_length */, Bool /* delete */, Atom /* req_type */, Atom* /* actual_type_return */, int* /* actual_format_return */, unsigned long* /* nitems_return */, unsigned long* /* bytes_after_return */, unsigned char** /* prop_return */ ); extern Status XGetWindowAttributes( Display* /* display */, Window /* w */, XWindowAttributes* /* window_attributes_return */ ); extern int XGrabButton( Display* /* display */, unsigned int /* button */, unsigned int /* modifiers */, Window /* grab_window */, Bool /* owner_events */, unsigned int /* event_mask */, int /* pointer_mode */, int /* keyboard_mode */, Window /* confine_to */, Cursor /* cursor */ ); extern int XGrabKey( Display* /* display */, int /* keycode */, unsigned int /* modifiers */, Window /* grab_window */, Bool /* owner_events */, int /* pointer_mode */, int /* keyboard_mode */ ); extern int XGrabKeyboard( Display* /* display */, Window /* grab_window */, Bool /* owner_events */, int /* pointer_mode */, int /* keyboard_mode */, Time /* time */ ); extern int XGrabPointer( Display* /* display */, Window /* grab_window */, Bool /* owner_events */, unsigned int /* event_mask */, int /* pointer_mode */, int /* keyboard_mode */, Window /* confine_to */, Cursor /* cursor */, Time /* time */ ); extern int XGrabServer( Display* /* display */ ); extern int XHeightMMOfScreen( Screen* /* screen */ ); extern int XHeightOfScreen( Screen* /* screen */ ); extern int XIfEvent( Display* /* display */, XEvent* /* event_return */, Bool (*) ( Display* /* display */, XEvent* /* event */, XPointer /* arg */ ) /* predicate */, XPointer /* arg */ ); extern int XImageByteOrder( Display* /* display */ ); extern int XInstallColormap( Display* /* display */, Colormap /* colormap */ ); extern KeyCode XKeysymToKeycode( Display* /* display */, KeySym /* keysym */ ); extern int XKillClient( Display* /* display */, XID /* resource */ ); extern Status XLookupColor( Display* /* display */, Colormap /* colormap */, _Xconst char* /* color_name */, XColor* /* exact_def_return */, XColor* /* screen_def_return */ ); extern int XLowerWindow( Display* /* display */, Window /* w */ ); extern int XMapRaised( Display* /* display */, Window /* w */ ); extern int XMapSubwindows( Display* /* display */, Window /* w */ ); extern int XMapWindow( Display* /* display */, Window /* w */ ); extern int XMaskEvent( Display* /* display */, long /* event_mask */, XEvent* /* event_return */ ); extern int XMaxCmapsOfScreen( Screen* /* screen */ ); extern int XMinCmapsOfScreen( Screen* /* screen */ ); extern int XMoveResizeWindow( Display* /* display */, Window /* w */, int /* x */, int /* y */, unsigned int /* width */, unsigned int /* height */ ); extern int XMoveWindow( Display* /* display */, Window /* w */, int /* x */, int /* y */ ); extern int XNextEvent( Display* /* display */, XEvent* /* event_return */ ); extern int XNoOp( Display* /* display */ ); extern Status XParseColor( Display* /* display */, Colormap /* colormap */, _Xconst char* /* spec */, XColor* /* exact_def_return */ ); extern int XParseGeometry( _Xconst char* /* parsestring */, int* /* x_return */, int* /* y_return */, unsigned int* /* width_return */, unsigned int* /* height_return */ ); extern int XPeekEvent( Display* /* display */, XEvent* /* event_return */ ); extern int XPeekIfEvent( Display* /* display */, XEvent* /* event_return */, Bool (*) ( Display* /* display */, XEvent* /* event */, XPointer /* arg */ ) /* predicate */, XPointer /* arg */ ); extern int XPending( Display* /* display */ ); extern int XPlanesOfScreen( Screen* /* screen */ ); extern int XProtocolRevision( Display* /* display */ ); extern int XProtocolVersion( Display* /* display */ ); extern int XPutBackEvent( Display* /* display */, XEvent* /* event */ ); extern int XPutImage( Display* /* display */, Drawable /* d */, GC /* gc */, XImage* /* image */, int /* src_x */, int /* src_y */, int /* dest_x */, int /* dest_y */, unsigned int /* width */, unsigned int /* height */ ); extern int XQLength( Display* /* display */ ); extern Status XQueryBestCursor( Display* /* display */, Drawable /* d */, unsigned int /* width */, unsigned int /* height */, unsigned int* /* width_return */, unsigned int* /* height_return */ ); extern Status XQueryBestSize( Display* /* display */, int /* class */, Drawable /* which_screen */, unsigned int /* width */, unsigned int /* height */, unsigned int* /* width_return */, unsigned int* /* height_return */ ); extern Status XQueryBestStipple( Display* /* display */, Drawable /* which_screen */, unsigned int /* width */, unsigned int /* height */, unsigned int* /* width_return */, unsigned int* /* height_return */ ); extern Status XQueryBestTile( Display* /* display */, Drawable /* which_screen */, unsigned int /* width */, unsigned int /* height */, unsigned int* /* width_return */, unsigned int* /* height_return */ ); extern int XQueryColor( Display* /* display */, Colormap /* colormap */, XColor* /* def_in_out */ ); extern int XQueryColors( Display* /* display */, Colormap /* colormap */, XColor* /* defs_in_out */, int /* ncolors */ ); extern Bool XQueryExtension( Display* /* display */, _Xconst char* /* name */, int* /* major_opcode_return */, int* /* first_event_return */, int* /* first_error_return */ ); extern int XQueryKeymap( Display* /* display */, char [32] /* keys_return */ ); extern Bool XQueryPointer( Display* /* display */, Window /* w */, Window* /* root_return */, Window* /* child_return */, int* /* root_x_return */, int* /* root_y_return */, int* /* win_x_return */, int* /* win_y_return */, unsigned int* /* mask_return */ ); extern int XQueryTextExtents( Display* /* display */, XID /* font_ID */, _Xconst char* /* string */, int /* nchars */, int* /* direction_return */, int* /* font_ascent_return */, int* /* font_descent_return */, XCharStruct* /* overall_return */ ); extern int XQueryTextExtents16( Display* /* display */, XID /* font_ID */, _Xconst XChar2b* /* string */, int /* nchars */, int* /* direction_return */, int* /* font_ascent_return */, int* /* font_descent_return */, XCharStruct* /* overall_return */ ); extern Status XQueryTree( Display* /* display */, Window /* w */, Window* /* root_return */, Window* /* parent_return */, Window** /* children_return */, unsigned int* /* nchildren_return */ ); extern int XRaiseWindow( Display* /* display */, Window /* w */ ); extern int XReadBitmapFile( Display* /* display */, Drawable /* d */, _Xconst char* /* filename */, unsigned int* /* width_return */, unsigned int* /* height_return */, Pixmap* /* bitmap_return */, int* /* x_hot_return */, int* /* y_hot_return */ ); extern int XReadBitmapFileData( _Xconst char* /* filename */, unsigned int* /* width_return */, unsigned int* /* height_return */, unsigned char** /* data_return */, int* /* x_hot_return */, int* /* y_hot_return */ ); extern int XRebindKeysym( Display* /* display */, KeySym /* keysym */, KeySym* /* list */, int /* mod_count */, _Xconst unsigned char* /* string */, int /* bytes_string */ ); extern int XRecolorCursor( Display* /* display */, Cursor /* cursor */, XColor* /* foreground_color */, XColor* /* background_color */ ); extern int XRefreshKeyboardMapping( XMappingEvent* /* event_map */ ); extern int XRemoveFromSaveSet( Display* /* display */, Window /* w */ ); extern int XRemoveHost( Display* /* display */, XHostAddress* /* host */ ); extern int XRemoveHosts( Display* /* display */, XHostAddress* /* hosts */, int /* num_hosts */ ); extern int XReparentWindow( Display* /* display */, Window /* w */, Window /* parent */, int /* x */, int /* y */ ); extern int XResetScreenSaver( Display* /* display */ ); extern int XResizeWindow( Display* /* display */, Window /* w */, unsigned int /* width */, unsigned int /* height */ ); extern int XRestackWindows( Display* /* display */, Window* /* windows */, int /* nwindows */ ); extern int XRotateBuffers( Display* /* display */, int /* rotate */ ); extern int XRotateWindowProperties( Display* /* display */, Window /* w */, Atom* /* properties */, int /* num_prop */, int /* npositions */ ); extern int XScreenCount( Display* /* display */ ); extern int XSelectInput( Display* /* display */, Window /* w */, long /* event_mask */ ); extern Status XSendEvent( Display* /* display */, Window /* w */, Bool /* propagate */, long /* event_mask */, XEvent* /* event_send */ ); extern int XSetAccessControl( Display* /* display */, int /* mode */ ); extern int XSetArcMode( Display* /* display */, GC /* gc */, int /* arc_mode */ ); extern int XSetBackground( Display* /* display */, GC /* gc */, unsigned long /* background */ ); extern int XSetClipMask( Display* /* display */, GC /* gc */, Pixmap /* pixmap */ ); extern int XSetClipOrigin( Display* /* display */, GC /* gc */, int /* clip_x_origin */, int /* clip_y_origin */ ); extern int XSetClipRectangles( Display* /* display */, GC /* gc */, int /* clip_x_origin */, int /* clip_y_origin */, XRectangle* /* rectangles */, int /* n */, int /* ordering */ ); extern int XSetCloseDownMode( Display* /* display */, int /* close_mode */ ); extern int XSetCommand( Display* /* display */, Window /* w */, char** /* argv */, int /* argc */ ); extern int XSetDashes( Display* /* display */, GC /* gc */, int /* dash_offset */, _Xconst char* /* dash_list */, int /* n */ ); extern int XSetFillRule( Display* /* display */, GC /* gc */, int /* fill_rule */ ); extern int XSetFillStyle( Display* /* display */, GC /* gc */, int /* fill_style */ ); extern int XSetFont( Display* /* display */, GC /* gc */, Font /* font */ ); extern int XSetFontPath( Display* /* display */, char** /* directories */, int /* ndirs */ ); extern int XSetForeground( Display* /* display */, GC /* gc */, unsigned long /* foreground */ ); extern int XSetFunction( Display* /* display */, GC /* gc */, int /* function */ ); extern int XSetGraphicsExposures( Display* /* display */, GC /* gc */, Bool /* graphics_exposures */ ); extern int XSetIconName( Display* /* display */, Window /* w */, _Xconst char* /* icon_name */ ); extern int XSetInputFocus( Display* /* display */, Window /* focus */, int /* revert_to */, Time /* time */ ); extern int XSetLineAttributes( Display* /* display */, GC /* gc */, unsigned int /* line_width */, int /* line_style */, int /* cap_style */, int /* join_style */ ); extern int XSetModifierMapping( Display* /* display */, XModifierKeymap* /* modmap */ ); extern int XSetPlaneMask( Display* /* display */, GC /* gc */, unsigned long /* plane_mask */ ); extern int XSetPointerMapping( Display* /* display */, _Xconst unsigned char* /* map */, int /* nmap */ ); extern int XSetScreenSaver( Display* /* display */, int /* timeout */, int /* interval */, int /* prefer_blanking */, int /* allow_exposures */ ); extern int XSetSelectionOwner( Display* /* display */, Atom /* selection */, Window /* owner */, Time /* time */ ); extern int XSetState( Display* /* display */, GC /* gc */, unsigned long /* foreground */, unsigned long /* background */, int /* function */, unsigned long /* plane_mask */ ); extern int XSetStipple( Display* /* display */, GC /* gc */, Pixmap /* stipple */ ); extern int XSetSubwindowMode( Display* /* display */, GC /* gc */, int /* subwindow_mode */ ); extern int XSetTSOrigin( Display* /* display */, GC /* gc */, int /* ts_x_origin */, int /* ts_y_origin */ ); extern int XSetTile( Display* /* display */, GC /* gc */, Pixmap /* tile */ ); extern int XSetWindowBackground( Display* /* display */, Window /* w */, unsigned long /* background_pixel */ ); extern int XSetWindowBackgroundPixmap( Display* /* display */, Window /* w */, Pixmap /* background_pixmap */ ); extern int XSetWindowBorder( Display* /* display */, Window /* w */, unsigned long /* border_pixel */ ); extern int XSetWindowBorderPixmap( Display* /* display */, Window /* w */, Pixmap /* border_pixmap */ ); extern int XSetWindowBorderWidth( Display* /* display */, Window /* w */, unsigned int /* width */ ); extern int XSetWindowColormap( Display* /* display */, Window /* w */, Colormap /* colormap */ ); extern int XStoreBuffer( Display* /* display */, _Xconst char* /* bytes */, int /* nbytes */, int /* buffer */ ); extern int XStoreBytes( Display* /* display */, _Xconst char* /* bytes */, int /* nbytes */ ); extern int XStoreColor( Display* /* display */, Colormap /* colormap */, XColor* /* color */ ); extern int XStoreColors( Display* /* display */, Colormap /* colormap */, XColor* /* color */, int /* ncolors */ ); extern int XStoreName( Display* /* display */, Window /* w */, _Xconst char* /* window_name */ ); extern int XStoreNamedColor( Display* /* display */, Colormap /* colormap */, _Xconst char* /* color */, unsigned long /* pixel */, int /* flags */ ); extern int XSync( Display* /* display */, Bool /* discard */ ); extern int XTextExtents( XFontStruct* /* font_struct */, _Xconst char* /* string */, int /* nchars */, int* /* direction_return */, int* /* font_ascent_return */, int* /* font_descent_return */, XCharStruct* /* overall_return */ ); extern int XTextExtents16( XFontStruct* /* font_struct */, _Xconst XChar2b* /* string */, int /* nchars */, int* /* direction_return */, int* /* font_ascent_return */, int* /* font_descent_return */, XCharStruct* /* overall_return */ ); extern int XTextWidth( XFontStruct* /* font_struct */, _Xconst char* /* string */, int /* count */ ); extern int XTextWidth16( XFontStruct* /* font_struct */, _Xconst XChar2b* /* string */, int /* count */ ); extern Bool XTranslateCoordinates( Display* /* display */, Window /* src_w */, Window /* dest_w */, int /* src_x */, int /* src_y */, int* /* dest_x_return */, int* /* dest_y_return */, Window* /* child_return */ ); extern int XUndefineCursor( Display* /* display */, Window /* w */ ); extern int XUngrabButton( Display* /* display */, unsigned int /* button */, unsigned int /* modifiers */, Window /* grab_window */ ); extern int XUngrabKey( Display* /* display */, int /* keycode */, unsigned int /* modifiers */, Window /* grab_window */ ); extern int XUngrabKeyboard( Display* /* display */, Time /* time */ ); extern int XUngrabPointer( Display* /* display */, Time /* time */ ); extern int XUngrabServer( Display* /* display */ ); extern int XUninstallColormap( Display* /* display */, Colormap /* colormap */ ); extern int XUnloadFont( Display* /* display */, Font /* font */ ); extern int XUnmapSubwindows( Display* /* display */, Window /* w */ ); extern int XUnmapWindow( Display* /* display */, Window /* w */ ); extern int XVendorRelease( Display* /* display */ ); extern int XWarpPointer( Display* /* display */, Window /* src_w */, Window /* dest_w */, int /* src_x */, int /* src_y */, unsigned int /* src_width */, unsigned int /* src_height */, int /* dest_x */, int /* dest_y */ ); extern int XWidthMMOfScreen( Screen* /* screen */ ); extern int XWidthOfScreen( Screen* /* screen */ ); extern int XWindowEvent( Display* /* display */, Window /* w */, long /* event_mask */, XEvent* /* event_return */ ); extern int XWriteBitmapFile( Display* /* display */, _Xconst char* /* filename */, Pixmap /* bitmap */, unsigned int /* width */, unsigned int /* height */, int /* x_hot */, int /* y_hot */ ); extern Bool XSupportsLocale (void); extern char *XSetLocaleModifiers( const char* /* modifier_list */ ); extern XOM XOpenOM( Display* /* display */, struct _XrmHashBucketRec* /* rdb */, _Xconst char* /* res_name */, _Xconst char* /* res_class */ ); extern Status XCloseOM( XOM /* om */ ); extern char *XSetOMValues( XOM /* om */, ... ) _X_SENTINEL(0); extern char *XGetOMValues( XOM /* om */, ... ) _X_SENTINEL(0); extern Display *XDisplayOfOM( XOM /* om */ ); extern char *XLocaleOfOM( XOM /* om */ ); extern XOC XCreateOC( XOM /* om */, ... ) _X_SENTINEL(0); extern void XDestroyOC( XOC /* oc */ ); extern XOM XOMOfOC( XOC /* oc */ ); extern char *XSetOCValues( XOC /* oc */, ... ) _X_SENTINEL(0); extern char *XGetOCValues( XOC /* oc */, ... ) _X_SENTINEL(0); extern XFontSet XCreateFontSet( Display* /* display */, _Xconst char* /* base_font_name_list */, char*** /* missing_charset_list */, int* /* missing_charset_count */, char** /* def_string */ ); extern void XFreeFontSet( Display* /* display */, XFontSet /* font_set */ ); extern int XFontsOfFontSet( XFontSet /* font_set */, XFontStruct*** /* font_struct_list */, char*** /* font_name_list */ ); extern char *XBaseFontNameListOfFontSet( XFontSet /* font_set */ ); extern char *XLocaleOfFontSet( XFontSet /* font_set */ ); extern Bool XContextDependentDrawing( XFontSet /* font_set */ ); extern Bool XDirectionalDependentDrawing( XFontSet /* font_set */ ); extern Bool XContextualDrawing( XFontSet /* font_set */ ); extern XFontSetExtents *XExtentsOfFontSet( XFontSet /* font_set */ ); extern int XmbTextEscapement( XFontSet /* font_set */, _Xconst char* /* text */, int /* bytes_text */ ); extern int XwcTextEscapement( XFontSet /* font_set */, _Xconst wchar_t* /* text */, int /* num_wchars */ ); extern int Xutf8TextEscapement( XFontSet /* font_set */, _Xconst char* /* text */, int /* bytes_text */ ); extern int XmbTextExtents( XFontSet /* font_set */, _Xconst char* /* text */, int /* bytes_text */, XRectangle* /* overall_ink_return */, XRectangle* /* overall_logical_return */ ); extern int XwcTextExtents( XFontSet /* font_set */, _Xconst wchar_t* /* text */, int /* num_wchars */, XRectangle* /* overall_ink_return */, XRectangle* /* overall_logical_return */ ); extern int Xutf8TextExtents( XFontSet /* font_set */, _Xconst char* /* text */, int /* bytes_text */, XRectangle* /* overall_ink_return */, XRectangle* /* overall_logical_return */ ); extern Status XmbTextPerCharExtents( XFontSet /* font_set */, _Xconst char* /* text */, int /* bytes_text */, XRectangle* /* ink_extents_buffer */, XRectangle* /* logical_extents_buffer */, int /* buffer_size */, int* /* num_chars */, XRectangle* /* overall_ink_return */, XRectangle* /* overall_logical_return */ ); extern Status XwcTextPerCharExtents( XFontSet /* font_set */, _Xconst wchar_t* /* text */, int /* num_wchars */, XRectangle* /* ink_extents_buffer */, XRectangle* /* logical_extents_buffer */, int /* buffer_size */, int* /* num_chars */, XRectangle* /* overall_ink_return */, XRectangle* /* overall_logical_return */ ); extern Status Xutf8TextPerCharExtents( XFontSet /* font_set */, _Xconst char* /* text */, int /* bytes_text */, XRectangle* /* ink_extents_buffer */, XRectangle* /* logical_extents_buffer */, int /* buffer_size */, int* /* num_chars */, XRectangle* /* overall_ink_return */, XRectangle* /* overall_logical_return */ ); extern void XmbDrawText( Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, XmbTextItem* /* text_items */, int /* nitems */ ); extern void XwcDrawText( Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, XwcTextItem* /* text_items */, int /* nitems */ ); extern void Xutf8DrawText( Display* /* display */, Drawable /* d */, GC /* gc */, int /* x */, int /* y */, XmbTextItem* /* text_items */, int /* nitems */ ); extern void XmbDrawString( Display* /* display */, Drawable /* d */, XFontSet /* font_set */, GC /* gc */, int /* x */, int /* y */, _Xconst char* /* text */, int /* bytes_text */ ); extern void XwcDrawString( Display* /* display */, Drawable /* d */, XFontSet /* font_set */, GC /* gc */, int /* x */, int /* y */, _Xconst wchar_t* /* text */, int /* num_wchars */ ); extern void Xutf8DrawString( Display* /* display */, Drawable /* d */, XFontSet /* font_set */, GC /* gc */, int /* x */, int /* y */, _Xconst char* /* text */, int /* bytes_text */ ); extern void XmbDrawImageString( Display* /* display */, Drawable /* d */, XFontSet /* font_set */, GC /* gc */, int /* x */, int /* y */, _Xconst char* /* text */, int /* bytes_text */ ); extern void XwcDrawImageString( Display* /* display */, Drawable /* d */, XFontSet /* font_set */, GC /* gc */, int /* x */, int /* y */, _Xconst wchar_t* /* text */, int /* num_wchars */ ); extern void Xutf8DrawImageString( Display* /* display */, Drawable /* d */, XFontSet /* font_set */, GC /* gc */, int /* x */, int /* y */, _Xconst char* /* text */, int /* bytes_text */ ); extern XIM XOpenIM( Display* /* dpy */, struct _XrmHashBucketRec* /* rdb */, char* /* res_name */, char* /* res_class */ ); extern Status XCloseIM( XIM /* im */ ); extern char *XGetIMValues( XIM /* im */, ... ) _X_SENTINEL(0); extern char *XSetIMValues( XIM /* im */, ... ) _X_SENTINEL(0); extern Display *XDisplayOfIM( XIM /* im */ ); extern char *XLocaleOfIM( XIM /* im*/ ); extern XIC XCreateIC( XIM /* im */, ... ) _X_SENTINEL(0); extern void XDestroyIC( XIC /* ic */ ); extern void XSetICFocus( XIC /* ic */ ); extern void XUnsetICFocus( XIC /* ic */ ); extern wchar_t *XwcResetIC( XIC /* ic */ ); extern char *XmbResetIC( XIC /* ic */ ); extern char *Xutf8ResetIC( XIC /* ic */ ); extern char *XSetICValues( XIC /* ic */, ... ) _X_SENTINEL(0); extern char *XGetICValues( XIC /* ic */, ... ) _X_SENTINEL(0); extern XIM XIMOfIC( XIC /* ic */ ); extern Bool XFilterEvent( XEvent* /* event */, Window /* window */ ); extern int XmbLookupString( XIC /* ic */, XKeyPressedEvent* /* event */, char* /* buffer_return */, int /* bytes_buffer */, KeySym* /* keysym_return */, Status* /* status_return */ ); extern int XwcLookupString( XIC /* ic */, XKeyPressedEvent* /* event */, wchar_t* /* buffer_return */, int /* wchars_buffer */, KeySym* /* keysym_return */, Status* /* status_return */ ); extern int Xutf8LookupString( XIC /* ic */, XKeyPressedEvent* /* event */, char* /* buffer_return */, int /* bytes_buffer */, KeySym* /* keysym_return */, Status* /* status_return */ ); extern XVaNestedList XVaCreateNestedList( int /*unused*/, ... ) _X_SENTINEL(0); /* internal connections for IMs */ extern Bool XRegisterIMInstantiateCallback( Display* /* dpy */, struct _XrmHashBucketRec* /* rdb */, char* /* res_name */, char* /* res_class */, XIDProc /* callback */, XPointer /* client_data */ ); extern Bool XUnregisterIMInstantiateCallback( Display* /* dpy */, struct _XrmHashBucketRec* /* rdb */, char* /* res_name */, char* /* res_class */, XIDProc /* callback */, XPointer /* client_data */ ); typedef void (*XConnectionWatchProc)( Display* /* dpy */, XPointer /* client_data */, int /* fd */, Bool /* opening */, /* open or close flag */ XPointer* /* watch_data */ /* open sets, close uses */ ); extern Status XInternalConnectionNumbers( Display* /* dpy */, int** /* fd_return */, int* /* count_return */ ); extern void XProcessInternalConnection( Display* /* dpy */, int /* fd */ ); extern Status XAddConnectionWatch( Display* /* dpy */, XConnectionWatchProc /* callback */, XPointer /* client_data */ ); extern void XRemoveConnectionWatch( Display* /* dpy */, XConnectionWatchProc /* callback */, XPointer /* client_data */ ); extern void XSetAuthorization( char * /* name */, int /* namelen */, char * /* data */, int /* datalen */ ); extern int _Xmbtowc( wchar_t * /* wstr */, char * /* str */, int /* len */ ); extern int _Xwctomb( char * /* str */, wchar_t /* wc */ ); extern Bool XGetEventData( Display* /* dpy */, XGenericEventCookie* /* cookie*/ ); extern void XFreeEventData( Display* /* dpy */, XGenericEventCookie* /* cookie*/ ); #ifdef __clang__ #pragma clang diagnostic pop #endif _XFUNCPROTOEND #endif /* _X11_XLIB_H_ */ ; extern int XVendorRelease( Display* /* display */ ); extern int XWarpPointer( Display* /* display */, Window /* src_w */, Window /* dest_w */, int /* src_x */, int /* src_y */, unsigned int /* src_width */, unsigned int /* src_height */, int /* dest_x */, int /* dest_y */ ); extern inlibX11-1.6.3/include/X11/XKBlib.h000064401431060000012000000744231247741723500163500ustar00alancstaff00002660200006/************************************************************ Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Silicon Graphics not be used in advertising or publicity pertaining to distribution of the software without specific prior written permission. Silicon Graphics makes no representation about the suitability of this software for any purpose. It is provided "as is" without any express or implied warranty. SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ********************************************************/ #ifndef _X11_XKBLIB_H_ #define _X11_XKBLIB_H_ #include #include typedef struct _XkbAnyEvent { int type; /* XkbAnyEvent */ unsigned long serial; /* # of last req processed by server */ Bool send_event; /* is this from a SendEvent request? */ Display * display; /* Display the event was read from */ Time time; /* milliseconds */ int xkb_type; /* XKB event minor code */ unsigned int device; /* device ID */ } XkbAnyEvent; typedef struct _XkbNewKeyboardNotify { int type; /* XkbAnyEvent */ unsigned long serial; /* of last req processed by server */ Bool send_event; /* is this from a SendEvent request? */ Display * display; /* Display the event was read from */ Time time; /* milliseconds */ int xkb_type; /* XkbNewKeyboardNotify */ int device; /* device ID */ int old_device; /* device ID of previous keyboard */ int min_key_code; /* minimum key code */ int max_key_code; /* maximum key code */ int old_min_key_code;/* min key code of previous kbd */ int old_max_key_code;/* max key code of previous kbd */ unsigned int changed; /* changed aspects of the keyboard */ char req_major; /* major and minor opcode of req */ char req_minor; /* that caused change, if applicable */ } XkbNewKeyboardNotifyEvent; typedef struct _XkbMapNotifyEvent { int type; /* XkbAnyEvent */ unsigned long serial; /* of last req processed by server */ Bool send_event; /* is this from a SendEvent request */ Display * display; /* Display the event was read from */ Time time; /* milliseconds */ int xkb_type; /* XkbMapNotify */ int device; /* device ID */ unsigned int changed; /* fields which have been changed */ unsigned int flags; /* reserved */ int first_type; /* first changed key type */ int num_types; /* number of changed key types */ KeyCode min_key_code; KeyCode max_key_code; KeyCode first_key_sym; KeyCode first_key_act; KeyCode first_key_behavior; KeyCode first_key_explicit; KeyCode first_modmap_key; KeyCode first_vmodmap_key; int num_key_syms; int num_key_acts; int num_key_behaviors; int num_key_explicit; int num_modmap_keys; int num_vmodmap_keys; unsigned int vmods; /* mask of changed virtual mods */ } XkbMapNotifyEvent; typedef struct _XkbStateNotifyEvent { int type; /* XkbAnyEvent */ unsigned long serial; /* # of last req processed by server */ Bool send_event; /* is this from a SendEvent request? */ Display * display; /* Display the event was read from */ Time time; /* milliseconds */ int xkb_type; /* XkbStateNotify */ int device; /* device ID */ unsigned int changed; /* mask of changed state components */ int group; /* keyboard group */ int base_group; /* base keyboard group */ int latched_group; /* latched keyboard group */ int locked_group; /* locked keyboard group */ unsigned int mods; /* modifier state */ unsigned int base_mods; /* base modifier state */ unsigned int latched_mods; /* latched modifiers */ unsigned int locked_mods; /* locked modifiers */ int compat_state; /* compatibility state */ unsigned char grab_mods; /* mods used for grabs */ unsigned char compat_grab_mods;/* grab mods for non-XKB clients */ unsigned char lookup_mods; /* mods sent to clients */ unsigned char compat_lookup_mods; /* mods sent to non-XKB clients */ int ptr_buttons; /* pointer button state */ KeyCode keycode; /* keycode that caused the change */ char event_type; /* KeyPress or KeyRelease */ char req_major; /* Major opcode of request */ char req_minor; /* Minor opcode of request */ } XkbStateNotifyEvent; typedef struct _XkbControlsNotify { int type; /* XkbAnyEvent */ unsigned long serial; /* of last req processed by server */ Bool send_event; /* is this from a SendEvent request? */ Display * display; /* Display the event was read from */ Time time; /* milliseconds */ int xkb_type; /* XkbControlsNotify */ int device; /* device ID */ unsigned int changed_ctrls; /* controls with changed sub-values */ unsigned int enabled_ctrls; /* controls currently enabled */ unsigned int enabled_ctrl_changes;/* controls just {en,dis}abled */ int num_groups; /* total groups on keyboard */ KeyCode keycode; /* key that caused change or 0 */ char event_type; /* type of event that caused change */ char req_major; /* if keycode==0, major and minor */ char req_minor; /* opcode of req that caused change */ } XkbControlsNotifyEvent; typedef struct _XkbIndicatorNotify { int type; /* XkbAnyEvent */ unsigned long serial; /* of last req processed by server */ Bool send_event; /* is this from a SendEvent request? */ Display * display; /* Display the event was read from */ Time time; /* milliseconds */ int xkb_type; /* XkbIndicatorNotify */ int device; /* device ID */ unsigned int changed; /* indicators with new state or map */ unsigned int state; /* current state of all indicators */ } XkbIndicatorNotifyEvent; typedef struct _XkbNamesNotify { int type; /* XkbAnyEvent */ unsigned long serial; /* of last req processed by server */ Bool send_event; /* is this from a SendEvent request? */ Display * display; /* Display the event was read from */ Time time; /* milliseconds */ int xkb_type; /* XkbNamesNotify */ int device; /* device ID */ unsigned int changed; /* names that have changed */ int first_type; /* first key type with new name */ int num_types; /* number of key types with new names */ int first_lvl; /* first key type new new level names */ int num_lvls; /* # of key types w/new level names */ int num_aliases; /* total number of key aliases*/ int num_radio_groups;/* total number of radio groups */ unsigned int changed_vmods; /* virtual modifiers with new names */ unsigned int changed_groups; /* groups with new names */ unsigned int changed_indicators;/* indicators with new names */ int first_key; /* first key with new name */ int num_keys; /* number of keys with new names */ } XkbNamesNotifyEvent; typedef struct _XkbCompatMapNotify { int type; /* XkbAnyEvent */ unsigned long serial; /* of last req processed by server */ Bool send_event; /* is this from a SendEvent request? */ Display * display; /* Display the event was read from */ Time time; /* milliseconds */ int xkb_type; /* XkbCompatMapNotify */ int device; /* device ID */ unsigned int changed_groups; /* groups with new compat maps */ int first_si; /* first new symbol interp */ int num_si; /* number of new symbol interps */ int num_total_si; /* total # of symbol interps */ } XkbCompatMapNotifyEvent; typedef struct _XkbBellNotify { int type; /* XkbAnyEvent */ unsigned long serial; /* of last req processed by server */ Bool send_event; /* is this from a SendEvent request? */ Display * display; /* Display the event was read from */ Time time; /* milliseconds */ int xkb_type; /* XkbBellNotify */ int device; /* device ID */ int percent; /* requested volume as a % of maximum */ int pitch; /* requested pitch in Hz */ int duration; /* requested duration in useconds */ int bell_class; /* (input extension) feedback class */ int bell_id; /* (input extension) ID of feedback */ Atom name; /* "name" of requested bell */ Window window; /* window associated with event */ Bool event_only; /* "event only" requested */ } XkbBellNotifyEvent; typedef struct _XkbActionMessage { int type; /* XkbAnyEvent */ unsigned long serial; /* of last req processed by server */ Bool send_event; /* is this from a SendEvent request? */ Display * display; /* Display the event was read from */ Time time; /* milliseconds */ int xkb_type; /* XkbActionMessage */ int device; /* device ID */ KeyCode keycode; /* key that generated the event */ Bool press; /* true if act caused by key press */ Bool key_event_follows;/* true if key event also generated */ int group; /* effective group */ unsigned int mods; /* effective mods */ char message[XkbActionMessageLength+1]; /* message -- leave space for NUL */ } XkbActionMessageEvent; typedef struct _XkbAccessXNotify { int type; /* XkbAnyEvent */ unsigned long serial; /* of last req processed by server */ Bool send_event; /* is this from a SendEvent request? */ Display * display; /* Display the event was read from */ Time time; /* milliseconds */ int xkb_type; /* XkbAccessXNotify */ int device; /* device ID */ int detail; /* XkbAXN_* */ int keycode; /* key of event */ int sk_delay; /* current slow keys delay */ int debounce_delay; /* current debounce delay */ } XkbAccessXNotifyEvent; typedef struct _XkbExtensionDeviceNotify { int type; /* XkbAnyEvent */ unsigned long serial; /* of last req processed by server */ Bool send_event; /* is this from a SendEvent request? */ Display * display; /* Display the event was read from */ Time time; /* milliseconds */ int xkb_type; /* XkbExtensionDeviceNotify */ int device; /* device ID */ unsigned int reason; /* reason for the event */ unsigned int supported; /* mask of supported features */ unsigned int unsupported; /* mask of unsupported features */ /* that some app tried to use */ int first_btn; /* first button that changed */ int num_btns; /* range of buttons changed */ unsigned int leds_defined; /* indicators with names or maps */ unsigned int led_state; /* current state of the indicators */ int led_class; /* feedback class for led changes */ int led_id; /* feedback id for led changes */ } XkbExtensionDeviceNotifyEvent; typedef union _XkbEvent { int type; XkbAnyEvent any; XkbNewKeyboardNotifyEvent new_kbd; XkbMapNotifyEvent map; XkbStateNotifyEvent state; XkbControlsNotifyEvent ctrls; XkbIndicatorNotifyEvent indicators; XkbNamesNotifyEvent names; XkbCompatMapNotifyEvent compat; XkbBellNotifyEvent bell; XkbActionMessageEvent message; XkbAccessXNotifyEvent accessx; XkbExtensionDeviceNotifyEvent device; XEvent core; } XkbEvent; typedef struct _XkbKbdDpyState XkbKbdDpyStateRec,*XkbKbdDpyStatePtr; /* XkbOpenDisplay error codes */ #define XkbOD_Success 0 #define XkbOD_BadLibraryVersion 1 #define XkbOD_ConnectionRefused 2 #define XkbOD_NonXkbServer 3 #define XkbOD_BadServerVersion 4 /* Values for XlibFlags */ #define XkbLC_ForceLatin1Lookup (1<<0) #define XkbLC_ConsumeLookupMods (1<<1) #define XkbLC_AlwaysConsumeShiftAndLock (1<<2) #define XkbLC_IgnoreNewKeyboards (1<<3) #define XkbLC_ControlFallback (1<<4) #define XkbLC_ConsumeKeysOnComposeFail (1<<29) #define XkbLC_ComposeLED (1<<30) #define XkbLC_BeepOnComposeFail (1<<31) #define XkbLC_AllComposeControls (0xc0000000) #define XkbLC_AllControls (0xc000001f) _XFUNCPROTOBEGIN extern Bool XkbIgnoreExtension( Bool /* ignore */ ); extern Display *XkbOpenDisplay( char * /* name */, int * /* ev_rtrn */, int * /* err_rtrn */, int * /* major_rtrn */, int * /* minor_rtrn */, int * /* reason */ ); extern Bool XkbQueryExtension( Display * /* dpy */, int * /* opcodeReturn */, int * /* eventBaseReturn */, int * /* errorBaseReturn */, int * /* majorRtrn */, int * /* minorRtrn */ ); extern Bool XkbUseExtension( Display * /* dpy */, int * /* major_rtrn */, int * /* minor_rtrn */ ); extern Bool XkbLibraryVersion( int * /* libMajorRtrn */, int * /* libMinorRtrn */ ); extern unsigned int XkbSetXlibControls( Display* /* dpy */, unsigned int /* affect */, unsigned int /* values */ ); extern unsigned int XkbGetXlibControls( Display* /* dpy */ ); extern unsigned int XkbXlibControlsImplemented(void); typedef Atom (*XkbInternAtomFunc)( Display * /* dpy */, _Xconst char * /* name */, Bool /* only_if_exists */ ); typedef char * (*XkbGetAtomNameFunc)( Display * /* dpy */, Atom /* atom */ ); extern void XkbSetAtomFuncs( XkbInternAtomFunc /* getAtom */, XkbGetAtomNameFunc /* getName */ ); extern KeySym XkbKeycodeToKeysym( Display * /* dpy */, #if NeedWidePrototypes unsigned int /* kc */, #else KeyCode /* kc */, #endif int /* group */, int /* level */ ); extern unsigned int XkbKeysymToModifiers( Display * /* dpy */, KeySym /* ks */ ); extern Bool XkbLookupKeySym( Display * /* dpy */, KeyCode /* keycode */, unsigned int /* modifiers */, unsigned int * /* modifiers_return */, KeySym * /* keysym_return */ ); extern int XkbLookupKeyBinding( Display * /* dpy */, KeySym /* sym_rtrn */, unsigned int /* mods */, char * /* buffer */, int /* nbytes */, int * /* extra_rtrn */ ); extern Bool XkbTranslateKeyCode( XkbDescPtr /* xkb */, KeyCode /* keycode */, unsigned int /* modifiers */, unsigned int * /* modifiers_return */, KeySym * /* keysym_return */ ); extern int XkbTranslateKeySym( Display * /* dpy */, register KeySym * /* sym_return */, unsigned int /* modifiers */, char * /* buffer */, int /* nbytes */, int * /* extra_rtrn */ ); extern Bool XkbSetAutoRepeatRate( Display * /* dpy */, unsigned int /* deviceSpec */, unsigned int /* delay */, unsigned int /* interval */ ); extern Bool XkbGetAutoRepeatRate( Display * /* dpy */, unsigned int /* deviceSpec */, unsigned int * /* delayRtrn */, unsigned int * /* intervalRtrn */ ); extern Bool XkbChangeEnabledControls( Display * /* dpy */, unsigned int /* deviceSpec */, unsigned int /* affect */, unsigned int /* values */ ); extern Bool XkbDeviceBell( Display * /* dpy */, Window /* win */, int /* deviceSpec */, int /* bellClass */, int /* bellID */, int /* percent */, Atom /* name */ ); extern Bool XkbForceDeviceBell( Display * /* dpy */, int /* deviceSpec */, int /* bellClass */, int /* bellID */, int /* percent */ ); extern Bool XkbDeviceBellEvent( Display * /* dpy */, Window /* win */, int /* deviceSpec */, int /* bellClass */, int /* bellID */, int /* percent */, Atom /* name */ ); extern Bool XkbBell( Display * /* dpy */, Window /* win */, int /* percent */, Atom /* name */ ); extern Bool XkbForceBell( Display * /* dpy */, int /* percent */ ); extern Bool XkbBellEvent( Display * /* dpy */, Window /* win */, int /* percent */, Atom /* name */ ); extern Bool XkbSelectEvents( Display * /* dpy */, unsigned int /* deviceID */, unsigned int /* affect */, unsigned int /* values */ ); extern Bool XkbSelectEventDetails( Display * /* dpy */, unsigned int /* deviceID */, unsigned int /* eventType */, unsigned long /* affect */, unsigned long /* details */ ); extern void XkbNoteMapChanges( XkbMapChangesPtr /* old */, XkbMapNotifyEvent * /* new */, unsigned int /* wanted */ ); extern void XkbNoteNameChanges( XkbNameChangesPtr /* old */, XkbNamesNotifyEvent * /* new */, unsigned int /* wanted */ ); extern Status XkbGetIndicatorState( Display * /* dpy */, unsigned int /* deviceSpec */, unsigned int * /* pStateRtrn */ ); extern Status XkbGetDeviceIndicatorState( Display * /* dpy */, unsigned int /* deviceSpec */, unsigned int /* ledClass */, unsigned int /* ledID */, unsigned int * /* pStateRtrn */ ); extern Status XkbGetIndicatorMap( Display * /* dpy */, unsigned long /* which */, XkbDescPtr /* desc */ ); extern Bool XkbSetIndicatorMap( Display * /* dpy */, unsigned long /* which */, XkbDescPtr /* desc */ ); #define XkbNoteIndicatorMapChanges(o,n,w) \ ((o)->map_changes|=((n)->map_changes&(w))) #define XkbNoteIndicatorStateChanges(o,n,w)\ ((o)->state_changes|=((n)->state_changes&(w))) #define XkbGetIndicatorMapChanges(d,x,c) \ (XkbGetIndicatorMap((d),(c)->map_changes,x)) #define XkbChangeIndicatorMaps(d,x,c) \ (XkbSetIndicatorMap((d),(c)->map_changes,x)) extern Bool XkbGetNamedIndicator( Display * /* dpy */, Atom /* name */, int * /* pNdxRtrn */, Bool * /* pStateRtrn */, XkbIndicatorMapPtr /* pMapRtrn */, Bool * /* pRealRtrn */ ); extern Bool XkbGetNamedDeviceIndicator( Display * /* dpy */, unsigned int /* deviceSpec */, unsigned int /* ledClass */, unsigned int /* ledID */, Atom /* name */, int * /* pNdxRtrn */, Bool * /* pStateRtrn */, XkbIndicatorMapPtr /* pMapRtrn */, Bool * /* pRealRtrn */ ); extern Bool XkbSetNamedIndicator( Display * /* dpy */, Atom /* name */, Bool /* changeState */, Bool /* state */, Bool /* createNewMap */, XkbIndicatorMapPtr /* pMap */ ); extern Bool XkbSetNamedDeviceIndicator( Display * /* dpy */, unsigned int /* deviceSpec */, unsigned int /* ledClass */, unsigned int /* ledID */, Atom /* name */, Bool /* changeState */, Bool /* state */, Bool /* createNewMap */, XkbIndicatorMapPtr /* pMap */ ); extern Bool XkbLockModifiers( Display * /* dpy */, unsigned int /* deviceSpec */, unsigned int /* affect */, unsigned int /* values */ ); extern Bool XkbLatchModifiers( Display * /* dpy */, unsigned int /* deviceSpec */, unsigned int /* affect */, unsigned int /* values */ ); extern Bool XkbLockGroup( Display * /* dpy */, unsigned int /* deviceSpec */, unsigned int /* group */ ); extern Bool XkbLatchGroup( Display * /* dpy */, unsigned int /* deviceSpec */, unsigned int /* group */ ); extern Bool XkbSetServerInternalMods( Display * /* dpy */, unsigned int /* deviceSpec */, unsigned int /* affectReal */, unsigned int /* realValues */, unsigned int /* affectVirtual */, unsigned int /* virtualValues */ ); extern Bool XkbSetIgnoreLockMods( Display * /* dpy */, unsigned int /* deviceSpec */, unsigned int /* affectReal */, unsigned int /* realValues */, unsigned int /* affectVirtual */, unsigned int /* virtualValues */ ); extern Bool XkbVirtualModsToReal( XkbDescPtr /* xkb */, unsigned int /* virtual_mask */, unsigned int * /* mask_rtrn */ ); extern Bool XkbComputeEffectiveMap( XkbDescPtr /* xkb */, XkbKeyTypePtr /* type */, unsigned char * /* map_rtrn */ ); extern Status XkbInitCanonicalKeyTypes( XkbDescPtr /* xkb */, unsigned int /* which */, int /* keypadVMod */ ); extern XkbDescPtr XkbAllocKeyboard( void ); extern void XkbFreeKeyboard( XkbDescPtr /* xkb */, unsigned int /* which */, Bool /* freeDesc */ ); extern Status XkbAllocClientMap( XkbDescPtr /* xkb */, unsigned int /* which */, unsigned int /* nTypes */ ); extern Status XkbAllocServerMap( XkbDescPtr /* xkb */, unsigned int /* which */, unsigned int /* nActions */ ); extern void XkbFreeClientMap( XkbDescPtr /* xkb */, unsigned int /* what */, Bool /* freeMap */ ); extern void XkbFreeServerMap( XkbDescPtr /* xkb */, unsigned int /* what */, Bool /* freeMap */ ); extern XkbKeyTypePtr XkbAddKeyType( XkbDescPtr /* xkb */, Atom /* name */, int /* map_count */, Bool /* want_preserve */, int /* num_lvls */ ); extern Status XkbAllocIndicatorMaps( XkbDescPtr /* xkb */ ); extern void XkbFreeIndicatorMaps( XkbDescPtr /* xkb */ ); extern XkbDescPtr XkbGetMap( Display * /* dpy */, unsigned int /* which */, unsigned int /* deviceSpec */ ); extern Status XkbGetUpdatedMap( Display * /* dpy */, unsigned int /* which */, XkbDescPtr /* desc */ ); extern Status XkbGetMapChanges( Display * /* dpy */, XkbDescPtr /* xkb */, XkbMapChangesPtr /* changes */ ); extern Status XkbRefreshKeyboardMapping( XkbMapNotifyEvent * /* event */ ); extern Status XkbGetKeyTypes( Display * /* dpy */, unsigned int /* first */, unsigned int /* num */, XkbDescPtr /* xkb */ ); extern Status XkbGetKeySyms( Display * /* dpy */, unsigned int /* first */, unsigned int /* num */, XkbDescPtr /* xkb */ ); extern Status XkbGetKeyActions( Display * /* dpy */, unsigned int /* first */, unsigned int /* num */, XkbDescPtr /* xkb */ ); extern Status XkbGetKeyBehaviors( Display * /* dpy */, unsigned int /* firstKey */, unsigned int /* nKeys */, XkbDescPtr /* desc */ ); extern Status XkbGetVirtualMods( Display * /* dpy */, unsigned int /* which */, XkbDescPtr /* desc */ ); extern Status XkbGetKeyExplicitComponents( Display * /* dpy */, unsigned int /* firstKey */, unsigned int /* nKeys */, XkbDescPtr /* desc */ ); extern Status XkbGetKeyModifierMap( Display * /* dpy */, unsigned int /* firstKey */, unsigned int /* nKeys */, XkbDescPtr /* desc */ ); extern Status XkbGetKeyVirtualModMap( Display * /* dpy */, unsigned int /* first */, unsigned int /* num */, XkbDescPtr /* xkb */ ); extern Status XkbAllocControls( XkbDescPtr /* xkb */, unsigned int /* which*/ ); extern void XkbFreeControls( XkbDescPtr /* xkb */, unsigned int /* which */, Bool /* freeMap */ ); extern Status XkbGetControls( Display * /* dpy */, unsigned long /* which */, XkbDescPtr /* desc */ ); extern Bool XkbSetControls( Display * /* dpy */, unsigned long /* which */, XkbDescPtr /* desc */ ); extern void XkbNoteControlsChanges( XkbControlsChangesPtr /* old */, XkbControlsNotifyEvent * /* new */, unsigned int /* wanted */ ); #define XkbGetControlsChanges(d,x,c) XkbGetControls(d,(c)->changed_ctrls,x) #define XkbChangeControls(d,x,c) XkbSetControls(d,(c)->changed_ctrls,x) extern Status XkbAllocCompatMap( XkbDescPtr /* xkb */, unsigned int /* which */, unsigned int /* nInterpret */ ); extern void XkbFreeCompatMap( XkbDescPtr /* xkb */, unsigned int /* which */, Bool /* freeMap */ ); extern Status XkbGetCompatMap( Display * /* dpy */, unsigned int /* which */, XkbDescPtr /* xkb */ ); extern Bool XkbSetCompatMap( Display * /* dpy */, unsigned int /* which */, XkbDescPtr /* xkb */, Bool /* updateActions */ ); extern XkbSymInterpretPtr XkbAddSymInterpret( XkbDescPtr /* xkb */, XkbSymInterpretPtr /* si */, Bool /* updateMap */, XkbChangesPtr /* changes */ ); extern Status XkbAllocNames( XkbDescPtr /* xkb */, unsigned int /* which */, int /* nTotalRG */, int /* nTotalAliases */ ); extern Status XkbGetNames( Display * /* dpy */, unsigned int /* which */, XkbDescPtr /* desc */ ); extern Bool XkbSetNames( Display * /* dpy */, unsigned int /* which */, unsigned int /* firstType */, unsigned int /* nTypes */, XkbDescPtr /* desc */ ); extern Bool XkbChangeNames( Display * /* dpy */, XkbDescPtr /* xkb */, XkbNameChangesPtr /* changes */ ); extern void XkbFreeNames( XkbDescPtr /* xkb */, unsigned int /* which */, Bool /* freeMap */ ); extern Status XkbGetState( Display * /* dpy */, unsigned int /* deviceSpec */, XkbStatePtr /* rtrnState */ ); extern Bool XkbSetMap( Display * /* dpy */, unsigned int /* which */, XkbDescPtr /* desc */ ); extern Bool XkbChangeMap( Display* /* dpy */, XkbDescPtr /* desc */, XkbMapChangesPtr /* changes */ ); extern Bool XkbSetDetectableAutoRepeat( Display * /* dpy */, Bool /* detectable */, Bool * /* supported */ ); extern Bool XkbGetDetectableAutoRepeat( Display * /* dpy */, Bool * /* supported */ ); extern Bool XkbSetAutoResetControls( Display * /* dpy */, unsigned int /* changes */, unsigned int * /* auto_ctrls */, unsigned int * /* auto_values */ ); extern Bool XkbGetAutoResetControls( Display * /* dpy */, unsigned int * /* auto_ctrls */, unsigned int * /* auto_ctrl_values */ ); extern Bool XkbSetPerClientControls( Display * /* dpy */, unsigned int /* change */, unsigned int * /* values */ ); extern Bool XkbGetPerClientControls( Display * /* dpy */, unsigned int * /* ctrls */ ); extern Status XkbCopyKeyType( XkbKeyTypePtr /* from */, XkbKeyTypePtr /* into */ ); extern Status XkbCopyKeyTypes( XkbKeyTypePtr /* from */, XkbKeyTypePtr /* into */, int /* num_types */ ); extern Status XkbResizeKeyType( XkbDescPtr /* xkb */, int /* type_ndx */, int /* map_count */, Bool /* want_preserve */, int /* new_num_lvls */ ); extern KeySym *XkbResizeKeySyms( XkbDescPtr /* desc */, int /* forKey */, int /* symsNeeded */ ); extern XkbAction *XkbResizeKeyActions( XkbDescPtr /* desc */, int /* forKey */, int /* actsNeeded */ ); extern Status XkbChangeTypesOfKey( XkbDescPtr /* xkb */, int /* key */, int /* num_groups */, unsigned int /* groups */, int * /* newTypes */, XkbMapChangesPtr /* pChanges */ ); extern Status XkbChangeKeycodeRange( XkbDescPtr /* xkb */, int /* minKC */, int /* maxKC */, XkbChangesPtr /* changes */ ); /***====================================================================***/ extern XkbComponentListPtr XkbListComponents( Display * /* dpy */, unsigned int /* deviceSpec */, XkbComponentNamesPtr /* ptrns */, int * /* max_inout */ ); extern void XkbFreeComponentList( XkbComponentListPtr /* list */ ); extern XkbDescPtr XkbGetKeyboard( Display * /* dpy */, unsigned int /* which */, unsigned int /* deviceSpec */ ); extern XkbDescPtr XkbGetKeyboardByName( Display * /* dpy */, unsigned int /* deviceSpec */, XkbComponentNamesPtr /* names */, unsigned int /* want */, unsigned int /* need */, Bool /* load */ ); /***====================================================================***/ extern int XkbKeyTypesForCoreSymbols( /* returns # of groups */ XkbDescPtr /* xkb */, /* keyboard device */ int /* map_width */, /* width of core KeySym array */ KeySym * /* core_syms */, /* always mapWidth symbols */ unsigned int /* protected */, /* explicit key types */ int * /* types_inout */, /* always four type indices */ KeySym * /* xkb_syms_rtrn */ /* must have enough space */ ); extern Bool XkbApplyCompatMapToKey( /* False only on error */ XkbDescPtr /* xkb */, /* keymap to be edited */ KeyCode /* key */, /* key to be updated */ XkbChangesPtr /* changes */ /* resulting changes to map */ ); extern Bool XkbUpdateMapFromCore( /* False only on error */ XkbDescPtr /* xkb */, /* XKB keyboard to be edited */ KeyCode /* first_key */, /* first changed key */ int /* num_keys */, /* number of changed keys */ int /* map_width */, /* width of core keymap */ KeySym * /* core_keysyms */, /* symbols from core keymap */ XkbChangesPtr /* changes */ /* resulting changes */ ); /***====================================================================***/ extern XkbDeviceLedInfoPtr XkbAddDeviceLedInfo( XkbDeviceInfoPtr /* devi */, unsigned int /* ledClass */, unsigned int /* ledId */ ); extern Status XkbResizeDeviceButtonActions( XkbDeviceInfoPtr /* devi */, unsigned int /* newTotal */ ); extern XkbDeviceInfoPtr XkbAllocDeviceInfo( unsigned int /* deviceSpec */, unsigned int /* nButtons */, unsigned int /* szLeds */ ); extern void XkbFreeDeviceInfo( XkbDeviceInfoPtr /* devi */, unsigned int /* which */, Bool /* freeDevI */ ); extern void XkbNoteDeviceChanges( XkbDeviceChangesPtr /* old */, XkbExtensionDeviceNotifyEvent * /* new */, unsigned int /* wanted */ ); extern XkbDeviceInfoPtr XkbGetDeviceInfo( Display * /* dpy */, unsigned int /* which */, unsigned int /* deviceSpec */, unsigned int /* ledClass */, unsigned int /* ledID */ ); extern Status XkbGetDeviceInfoChanges( Display * /* dpy */, XkbDeviceInfoPtr /* devi */, XkbDeviceChangesPtr /* changes */ ); extern Status XkbGetDeviceButtonActions( Display * /* dpy */, XkbDeviceInfoPtr /* devi */, Bool /* all */, unsigned int /* first */, unsigned int /* nBtns */ ); extern Status XkbGetDeviceLedInfo( Display * /* dpy */, XkbDeviceInfoPtr /* devi */, unsigned int /* ledClass (class, XIDflt, XIAll) */, unsigned int /* ledId (id, XIDflt, XIAll) */, unsigned int /* which (XkbXI_Indicator{Names,Map}Mask */ ); extern Bool XkbSetDeviceInfo( Display * /* dpy */, unsigned int /* which */, XkbDeviceInfoPtr /* devi */ ); extern Bool XkbChangeDeviceInfo( Display* /* dpy */, XkbDeviceInfoPtr /* desc */, XkbDeviceChangesPtr /* changes */ ); extern Bool XkbSetDeviceLedInfo( Display * /* dpy */, XkbDeviceInfoPtr /* devi */, unsigned int /* ledClass */, unsigned int /* ledID */, unsigned int /* which */ ); extern Bool XkbSetDeviceButtonActions( Display * /* dpy */, XkbDeviceInfoPtr /* devi */, unsigned int /* first */, unsigned int /* nBtns */ ); /***====================================================================***/ extern char XkbToControl( char /* c */ ); /***====================================================================***/ extern Bool XkbSetDebuggingFlags( Display * /* dpy */, unsigned int /* mask */, unsigned int /* flags */, char * /* msg */, unsigned int /* ctrls_mask */, unsigned int /* ctrls */, unsigned int * /* rtrn_flags */, unsigned int * /* rtrn_ctrls */ ); extern Bool XkbApplyVirtualModChanges( XkbDescPtr /* xkb */, unsigned int /* changed */, XkbChangesPtr /* changes */ ); extern Bool XkbUpdateActionVirtualMods( XkbDescPtr /* xkb */, XkbAction * /* act */, unsigned int /* changed */ ); extern void XkbUpdateKeyTypeVirtualMods( XkbDescPtr /* xkb */, XkbKeyTypePtr /* type */, unsigned int /* changed */, XkbChangesPtr /* changes */ ); _XFUNCPROTOEND #endif /* _X11_XKBLIB_H_ */ /* which */, XkbDescPtr /* desc */ ); extern Status XkbGetMapChanges( Display * /* dpy */, XkbDescPtr /* xkb */, XkbMapChangesPtr /* changes */ ); extern Status XkbRefreshKeyboardMapping( XkbMapNotifyEvent * libX11-1.6.3/COPYING000064401431060000012000001336521247741723500141230ustar00alancstaff00002660200006The following is the 'standard copyright' agreed upon by most contributors, and is currently the canonical license preferred by the X.Org Foundation. This is a slight variant of the common MIT license form published by the Open Source Initiative at http://www.opensource.org/licenses/mit-license.php Copyright holders of new code should use this license statement where possible, and insert their name to this list. Please sort by surname for people, and by the full name for other entities (e.g. Juliusz Chroboczek sorts before Intel Corporation sorts before Daniel Stone). See each individual source file or directory for the license that applies to that file. Copyright (C) 2003-2006,2008 Jamey Sharp, Josh Triplett Copyright © 2009 Red Hat, Inc. Copyright 1990-1992,1999,2000,2004,2009,2010 Oracle and/or its affiliates. All rights reserved. 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: The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. ---------------------------------------------------------------------- The following licenses are 'legacy' - usually MIT/X11 licenses with the name of the copyright holder(s) in the license statement: Copyright 1984-1994, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. X Window System is a trademark of The Open Group. ---------------------------------------- Copyright 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium Copyright 2000 The XFree86 Project, Inc. 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: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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. Except as contained in this notice, the name of the X Consortium shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from the X Consortium. Copyright 1985, 1986, 1987, 1988, 1989, 1990, 1991 by Digital Equipment Corporation Portions Copyright 1990, 1991 by Tektronix, Inc. Permission to use, copy, modify and distribute this documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appears in all copies and that both that copyright notice and this permission notice appear in all copies, and that the names of Digital and Tektronix not be used in in advertising or publicity pertaining to this documentation without specific, written prior permission. Digital and Tektronix makes no representations about the suitability of this documentation for any purpose. It is provided ``as is'' without express or implied warranty. ---------------------------------------- Copyright (c) 1999-2000 Free Software Foundation, Inc. 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: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 FREE SOFTWARE FOUNDATION 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. Except as contained in this notice, the name of the Free Software Foundation shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from the Free Software Foundation. ---------------------------------------- Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. All Rights Reserved This file is a component of an X Window System-specific implementation of Xcms based on the TekColor Color Management System. TekColor is a trademark of Tektronix, Inc. The term "TekHVC" designates a particular color space that is the subject of U.S. Patent No. 4,985,853 (equivalent foreign patents pending). Permission is hereby granted to use, copy, modify, sell, and otherwise distribute this software and its documentation for any purpose and without fee, provided that: 1. This copyright, permission, and disclaimer notice is reproduced in all copies of this software and any modification thereof and in supporting documentation; 2. Any color-handling application which displays TekHVC color cooordinates identifies these as TekHVC color coordinates in any interface that displays these coordinates and in any associated documentation; 3. The term "TekHVC" is always used, and is only used, in association with the mathematical derivations of the TekHVC Color Space, including those provided in this file and any equivalent pathways and mathematical derivations, regardless of digital (e.g., floating point or integer) representation. Tektronix makes no representation about the suitability of this software for any purpose. It is provided "as is" and with all faults. TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. ---------------------------------------- (c) Copyright 1995 FUJITSU LIMITED This is source code modified by FUJITSU LIMITED under the Joint Development Agreement for the CDE/Motif PST. ---------------------------------------- Copyright 1992 by Oki Technosystems Laboratory, Inc. Copyright 1992 by Fuji Xerox Co., Ltd. Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Oki Technosystems Laboratory and Fuji Xerox not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. Oki Technosystems Laboratory and Fuji Xerox make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. OKI TECHNOSYSTEMS LABORATORY AND FUJI XEROX DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL OKI TECHNOSYSTEMS LABORATORY AND FUJI XEROX BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ---------------------------------------- Copyright 1990, 1991, 1992, 1993, 1994 by FUJITSU LIMITED Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of FUJITSU LIMITED not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ---------------------------------------- Copyright (c) 1995 David E. Wexelblat. All rights reserved 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: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 DAVID E. WEXELBLAT 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. Except as contained in this notice, the name of David E. Wexelblat shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from David E. Wexelblat. ---------------------------------------- Copyright 1990, 1991 by OMRON Corporation Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name OMRON not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. OMRON makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. OMRON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL OMRON BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ---------------------------------------- Copyright 1985, 1986, 1987, 1988, 1989, 1990, 1991 by Digital Equipment Corporation Portions Copyright 1990, 1991 by Tektronix, Inc Rewritten for X.org by Chris Lee Permission to use, copy, modify, distribute, and sell 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. Chris Lee makes no representations about the suitability for any purpose of the information in this document. It is provided \`\`as-is'' without express or implied warranty. ---------------------------------------- Copyright 1993 by Digital Equipment Corporation, Maynard, Massachusetts, Copyright 1994 by FUJITSU LIMITED Copyright 1994 by Sony Corporation All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the names of Digital, FUJITSU LIMITED and Sony Corporation not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL, FUJITSU LIMITED AND SONY CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL, FUJITSU LIMITED AND SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ---------------------------------------- Copyright 1991 by the Open Software Foundation Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Open Software Foundation not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. Open Software Foundation makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. OPEN SOFTWARE FOUNDATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL OPEN SOFTWARE FOUNDATIONN BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ---------------------------------------- Copyright 1990, 1991, 1992,1993, 1994 by FUJITSU LIMITED Copyright 1993, 1994 by Sony Corporation Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of FUJITSU LIMITED and Sony Corporation not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED and Sony Corporation makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED AND SONY CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU LIMITED OR SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ---------------------------------------- Copyright (c) 1993, 1995 by Silicon Graphics Computer Systems, Inc. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Silicon Graphics not be used in advertising or publicity pertaining to distribution of the software without specific prior written permission. Silicon Graphics makes no representation about the suitability of this software for any purpose. It is provided "as is" without any express or implied warranty. SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ---------------------------------------- Copyright 1991, 1992, 1993, 1994 by FUJITSU LIMITED Copyright 1993 by Digital Equipment Corporation Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of FUJITSU LIMITED and Digital Equipment Corporation not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED and Digital Equipment Corporation makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ---------------------------------------- Copyright 1992, 1993 by FUJITSU LIMITED Copyright 1993 by Fujitsu Open Systems Solutions, Inc. Copyright 1994 by Sony Corporation Permission to use, copy, modify, distribute and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of FUJITSU LIMITED, Fujitsu Open Systems Solutions, Inc. and Sony Corporation not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED, Fujitsu Open Systems Solutions, Inc. and Sony Corporation make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED, FUJITSU OPEN SYSTEMS SOLUTIONS, INC. AND SONY CORPORATION DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU OPEN SYSTEMS SOLUTIONS, INC., FUJITSU LIMITED AND SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ---------------------------------------- Copyright 1987, 1988, 1990, 1993 by Digital Equipment Corporation, Maynard, Massachusetts, All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ---------------------------------------- Copyright 1993 by SunSoft, Inc. Copyright 1999-2000 by Bruno Haible Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the names of SunSoft, Inc. and Bruno Haible not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. SunSoft, Inc. and Bruno Haible make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. SunSoft Inc. AND Bruno Haible DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SunSoft, Inc. OR Bruno Haible BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ---------------------------------------- Copyright 1991 by the Open Software Foundation Copyright 1993 by the TOSHIBA Corp. Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the names of Open Software Foundation and TOSHIBA not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. Open Software Foundation and TOSHIBA make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. OPEN SOFTWARE FOUNDATION AND TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL OPEN SOFTWARE FOUNDATIONN OR TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ---------------------------------------- Copyright 1988 by Wyse Technology, Inc., San Jose, Ca., All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name Wyse not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. WYSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ---------------------------------------- Copyright 1991 by the Open Software Foundation Copyright 1993, 1994 by the Sony Corporation Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the names of Open Software Foundation and Sony Corporation not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. Open Software Foundation and Sony Corporation make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. OPEN SOFTWARE FOUNDATION AND SONY CORPORATION DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL OPEN SOFTWARE FOUNDATIONN OR SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ---------------------------------------- Copyright 1992, 1993 by FUJITSU LIMITED Copyright 1993 by Fujitsu Open Systems Solutions, Inc. Permission to use, copy, modify, distribute and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of FUJITSU LIMITED and Fujitsu Open Systems Solutions, Inc. not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED and Fujitsu Open Systems Solutions, Inc. makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED AND FUJITSU OPEN SYSTEMS SOLUTIONS, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU OPEN SYSTEMS SOLUTIONS, INC. AND FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ---------------------------------------- Copyright 1993, 1994 by Sony Corporation Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Sony Corporation not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. Sony Corporation makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. SONY CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ---------------------------------------- Copyright 1986, 1998 The Open Group Copyright (c) 2000 The XFree86 Project, Inc. Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OR THE XFREE86 PROJECT 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. Except as contained in this notice, the name of the X Consortium or of the XFree86 Project shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from the X Consortium and the XFree86 Project. ---------------------------------------- Copyright 1990, 1991 by OMRON Corporation, NTT Software Corporation, and Nippon Telegraph and Telephone Corporation Copyright 1991 by the Open Software Foundation Copyright 1993 by the FUJITSU LIMITED Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the names of OMRON, NTT Software, NTT, and Open Software Foundation not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. OMRON, NTT Software, NTT, and Open Software Foundation make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. OMRON, NTT SOFTWARE, NTT, AND OPEN SOFTWARE FOUNDATION DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL OMRON, NTT SOFTWARE, NTT, OR OPEN SOFTWARE FOUNDATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ---------------------------------------- Copyright 1988 by Wyse Technology, Inc., San Jose, Ca, Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts, All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL AND WYSE DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL OR WYSE BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ---------------------------------------- Copyright 1991, 1992 by Fuji Xerox Co., Ltd. Copyright 1992, 1993, 1994 by FUJITSU LIMITED Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Fuji Xerox, FUJITSU LIMITED not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. Fuji Xerox, FUJITSU LIMITED make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. FUJI XEROX, FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJI XEROX, FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ---------------------------------------- Copyright 2006 Josh Triplett 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: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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. ---------------------------------------- (c) Copyright 1996 by Sebastien Marineau and Holger Veit 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: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 HOLGER VEIT 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. Except as contained in this notice, the name of Sebastien Marineau or Holger Veit shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from Holger Veit or Sebastien Marineau. ---------------------------------------- Copyright 1990, 1991 by OMRON Corporation, NTT Software Corporation, and Nippon Telegraph and Telephone Corporation Copyright 1991 by the Open Software Foundation Copyright 1993 by the TOSHIBA Corp. Copyright 1993, 1994 by Sony Corporation Copyright 1993, 1994 by the FUJITSU LIMITED Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the names of OMRON, NTT Software, NTT, Open Software Foundation, and Sony Corporation not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. OMRON, NTT Software, NTT, Open Software Foundation, and Sony Corporation make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. OMRON, NTT SOFTWARE, NTT, OPEN SOFTWARE FOUNDATION, AND SONY CORPORATION DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL OMRON, NTT SOFTWARE, NTT, OPEN SOFTWARE FOUNDATION, OR SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ---------------------------------------- Copyright 2000 by Bruno Haible Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Bruno Haible not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. Bruno Haible makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. Bruno Haible DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL Bruno Haible BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ---------------------------------------- Copyright © 2003 Keith Packard Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Keith Packard not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. Keith Packard makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ---------------------------------------- Copyright (c) 2007-2009, Troy D. Hanson All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------- Copyright 1992, 1993 by TOSHIBA Corp. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of TOSHIBA not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. TOSHIBA make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ---------------------------------------- Copyright IBM Corporation 1993 All Rights Reserved License to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of IBM not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS, AND NONINFRINGEMENT OF THIRD PARTY RIGHTS, IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ---------------------------------------- Copyright 1990, 1991 by OMRON Corporation, NTT Software Corporation, and Nippon Telegraph and Telephone Corporation Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the names of OMRON, NTT Software, and NTT not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. OMRON, NTT Software, and NTT make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. OMRON, NTT SOFTWARE, AND NTT, DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL OMRON, NTT SOFTWARE, OR NTT, BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. SS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BElibX11-1.6.3/compile000075501431060000012000000162451247741725400144450ustar00alancstaff00002660200006#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2012-10-14.11; # UTC # Copyright (C) 1999-2014 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: libX11-1.6.3/nls/ru_RU.UTF-8/XI18N_OBJS000064401431060000012000000005311247741723500170560ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for ru_RU.UTF-8 locale # XLC common/xlcUTF8Load _XlcUtf8Loader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/ru_RU.UTF-8/Compose.pre000064401431060000012000000000601247741723500176210ustar00alancstaff00002660200006include "X11_LOCALEDATADIR/en_US.UTF-8/Compose" libX11-1.6.3/nls/ru_RU.UTF-8/XLC_LOCALE.pre000064401431060000012000000045321247741723500176710ustar00alancstaff00002660200006XCOMM XCOMM XLocale Database Sample for ru_RU.UTF-8 XCOMM Derived from en_US.UTF-8 XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET on_demand_loading True object_name generic XCOMM fs0 class (7 bit ASCII) fs0 { charset { name ISO8859-1:GL } font { primary ISO8859-1:GL vertical_rotate all } } XCOMM fs1 class (ISO8859 families) fs1 { charset { name ISO8859-1:GR } font { primary ISO8859-1:GR } } XCOMM fs2 class (KOI8-R) fs2 { charset { name KOI8-R:GR } font { primary KOI8-R:GR } } XCOMM fs3 class (MICROSOFT-CP1251) fs3 { charset { name MICROSOFT-CP1251:GR } font { primary MICROSOFT-CP1251:GR } } XCOMM fs4 class (ISO8859-5) fs4 { charset { name ISO8859-5:GR } font { primary ISO8859-5:GR } } XCOMM fs5 class (Kanji) fs5 { charset { name JISX0208.1983-0:GL } font { primary JISX0208.1983-0:GL } } XCOMM fs6 class (Korean Character) fs6 { charset { name KSC5601.1987-0:GL } font { primary KSC5601.1987-0:GL } } XCOMM fs7 class (Chinese Han Character) fs7 { charset { name GB2312.1980-0:GL } font { primary GB2312.1980-0:GL } } XCOMM fs8 class (Half Kana) fs8 { charset { name JISX0201.1976-0:GR } font { primary JISX0201.1976-0:GR vertical_rotate all } } XCOMM ISO10646 should come last so the fonts above will actually be used XCOMM fs9 class fs9 { charset { name ISO10646-1 } font { primary ISO10646-1 } } END XLC_FONTSET XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name UTF-8 mb_cur_max 6 state_depend_encoding False XCOMM cs0 class cs0 { side GL:Default length 1 ct_encoding ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 ct_encoding ISO8859-1:GR } XCOMM cs2 class cs2 { side GR length 2 ct_encoding JISX0208.1983-0:GL; JISX0208.1983-0:GR; JISX0208.1983-1:GL; JISX0208.1983-1:GR } XCOMM cs3 class cs3 { side GL length 2 ct_encoding KSC5601.1987-0:GL; KSC5601.1987-0:GR; KSC5601.1987-1:GL; KSC5601.1987-1:GR } XCOMM cs4 class cs4 { side GR length 2 ct_encoding GB2312.1980-0:GL; GB2312.1980-0:GR } XCOMM cs5 class cs5 { side GR length 1 ct_encoding JISX0201.1976-0:GR } XCOMM cs6 class cs6 { side none ct_encoding ISO10646-1 } END XLC_XLOCALE libX11-1.6.3/nls/pt_BR.UTF-8/Compose.pre000064401431060000012000000031071247741723500176000ustar00alancstaff00002660200006XCOMM UTF-8 (Unicode) compose sequences XCOMM XCOMM Originally modified for Brazilian Portuguese XCOMM by Gustavo Noronha Silva . XCOMM Transformed to an include file plus some overrides XCOMM by Benno Schulenberg XCOMM Use the sequences from en_US.UTF-8 as the basis: include "X11_LOCALEDATADIR/en_US.UTF-8/Compose" XCOMM This one should probably be deleted, because in XCOMM en_US.UTF8 this is lowercase schwa, not uppercase: : "Ə" U018f XCOMM Two nice additions -- maybe add to en_US.UTF8? : "〝" U301d # REVERSED DOUBLE PRIME QUOTATION MARK : "〞" U301e # DOUBLE PRIME QUOTATION MARK XCOMM Overriding C with acute: : "Ç" Ccedilla # LATIN CAPITAL LETTER C WITH CEDILLA : "ç" ccedilla # LATIN SMALL LETTER C WITH CEDILLA XCOMM Overriding E with ogonek: : "Ȩ" U0228 # LATIN CAPITAL LETTER E WITH CEDILLA : "ȩ" U0229 # LATIN SMALL LETTER E WITH CEDILLA XCOMM Overriding U with ogonek: : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE XCOMM These two should probably go back into en_US.UTF8; XCOMM they were most likely mistakenly dropped in June 2006: : "ϓ" U03D3 # GREEK UPSILON WITH ACUTE AND HOOK SYMBOL : "ϓ" U03D3 # GREEK UPSILON WITH ACUTE AND HOOK SYMBOL libX11-1.6.3/nls/pt_BR.UTF-8/XLC_LOCALE.pre000064401431060000012000000041111247741723500176340ustar00alancstaff00002660200006XCOMM XLocale Database Sample for pt_BR.UTF-8 XCOMM XCOMM Based on XLocale Database Sample for en_US.UTF-8 XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET on_demand_loading True object_name generic XCOMM fs0 class (7 bit ASCII) fs0 { charset { name ISO8859-1:GL } font { primary ISO8859-1:GL vertical_rotate all } } XCOMM fs1 class (ISO8859 families) fs1 { charset { name ISO8859-1:GR } font { primary ISO8859-1:GR } } XCOMM fs2 class (Kanji) fs2 { charset { name JISX0208.1983-0:GL } font { primary JISX0208.1983-0:GL } } XCOMM fs3 class (Korean Character) fs3 { charset { name KSC5601.1987-0:GL } font { primary KSC5601.1987-0:GL } } XCOMM fs4 class (Chinese Han Character) fs4 { charset { name GB2312.1980-0:GL } font { primary GB2312.1980-0:GL } } XCOMM fs5 class (Half Kana) fs5 { charset { name JISX0201.1976-0:GR } font { primary JISX0201.1976-0:GR vertical_rotate all } } XCOMM ISO10646 is last, per Roland Mainz in XCOMM http://bugs.freedesktop.org/show_bug.cgi?id=1896 fs6 { charset { name ISO10646-1 } font { primary ISO10646-1 } } END XLC_FONTSET XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name UTF-8 mb_cur_max 6 state_depend_encoding False XCOMM cs0 class cs0 { side GL:Default length 1 ct_encoding ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 ct_encoding ISO8859-1:GR } XCOMM cs2 class cs2 { side GR length 2 ct_encoding JISX0208.1983-0:GL; JISX0208.1983-0:GR;\ JISX0208.1983-1:GL; JISX0208.1983-1:GR } XCOMM cs3 class cs3 { side GL length 2 ct_encoding KSC5601.1987-0:GL; KSC5601.1987-0:GR;\ KSC5601.1987-1:GL; KSC5601.1987-1:GR } XCOMM cs4 class cs4 { side GR length 2 ct_encoding GB2312.1980-0:GL; GB2312.1980-0:GR } XCOMM cs5 class cs5 { side GR length 1 ct_encoding JISX0201.1976-0:GR } XCOMM cs6 class cs6 { side none ct_encoding ISO10646-1 } END XLC_XLOCALE libX11-1.6.3/nls/pt_BR.UTF-8/XI18N_OBJS000064401431060000012000000005311247741723500170300ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for pt_BR.UTF-8 locale # XLC common/xlcUTF8Load _XlcUtf8Loader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/ko_KR.UTF-8/XLC_LOCALE.pre000064401431060000012000000043511247741723500176410ustar00alancstaff00002660200006 XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET on_demand_loading True object_name generic XCOMM We leave the legacy encodings in for the moment, because we don't XCOMM have that many ISO10646 fonts yet. XCOMM fs0 class (7 bit ASCII) fs0 { charset { name ISO8859-1:GL } font { primary ISO8859-1:GL vertical_rotate all } } XCOMM fs1 class (ISO8859 families) fs1 { charset { name ISO8859-1:GR } font { primary ISO8859-1:GR } } XCOMM fs2 class (Korean Character) fs2 { charset { name KSC5601.1987-0:GL } font { primary KSC5601.1987-0:GL } } XCOMM fs3 class (Kanji) fs3 { charset { name JISX0208.1983-0:GL } font { primary JISX0208.1983-0:GL } } XCOMM fs4 class (Chinese Han Character) fs4 { charset { name GB2312.1980-0:GL } font { primary GB2312.1980-0:GL } } XCOMM fs5 class (Half Kana) fs5 { charset { name JISX0201.1976-0:GR } font { primary JISX0201.1976-0:GR vertical_rotate all } } XCOMM ISO10646-1 is put last to make usually better-looking XCOMM other fonts are picked up before iso10646-1 fonts. XCOMM Moreover, some iso10646-1 fonts don't have any glyph at all XCOMM in ISO8859-X ranges. XCOMM fs6 class fs6 { charset { name ISO10646-1 } font { primary ISO10646-1 } } END XLC_FONTSET XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name UTF-8 mb_cur_max 6 state_depend_encoding False XCOMM cs0 class cs0 { side GL:Default length 1 ct_encoding ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 ct_encoding ISO8859-1:GR } XCOMM cs2 class cs2 { side GL length 2 ct_encoding KSC5601.1987-0:GL; KSC5601.1987-0:GR; KSC5601.1987-1:GL; KSC5601.1987-1:GR } XCOMM cs3 class cs3 { side GR length 2 ct_encoding JISX0208.1983-0:GL; JISX0208.1983-0:GR; JISX0208.1983-1:GL; JISX0208.1983-1:GR } XCOMM cs4 class cs4 { side GR length 2 ct_encoding GB2312.1980-0:GL; GB2312.1980-0:GR } XCOMM cs5 class cs5 { side GR length 1 ct_encoding JISX0201.1976-0:GR } XCOMM cs6 class cs6 { side none ct_encoding ISO10646-1 } END XLC_XLOCALE libX11-1.6.3/nls/ko_KR.UTF-8/Compose.pre000064401431060000012000000000601247741723500175720ustar00alancstaff00002660200006include "X11_LOCALEDATADIR/en_US.UTF-8/Compose" libX11-1.6.3/nls/ko_KR.UTF-8/XI18N_OBJS000064401431060000012000000005331247741723500170310ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for ko_KR.UTF-8 locale # # XLC common/xlcUTF8Load _XlcUtf8Loader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/zh_TW/Compose.pre000064401431060000012000000005431247741723500170240ustar00alancstaff00002660200006XCOMM XCOMM zh_TW Compose Sequence XCOMM XCOMM Sequence Definition XCOMM XCOMM XCOMM This file currently has no entries. It appears that a compose file (even XCOMM just an empty one) is required for the appropriate keysyms to work for XCOMM this encoding. XCOMM XCOMM Means XCOMM Special Character XCOMM End of Sequence Definition libX11-1.6.3/nls/zh_TW/XLC_LOCALE.pre000064401431060000012000000045521247741723500170700ustar00alancstaff00002660200006XCOMM XLocale Database Sample for zh_TW XCOMM XCOMM Note: In lib/X11/lcCT.c, charset names for CNS11643 coded character XCOMM sets are defined as CNS11643.1986-1 and -2. In the ECMA Registry, XCOMM CNS coded character sets 1-7 are registered as CNS 11643-1992. XCOMM CJK.INF Version 1.7 (August 15, 1995) written by Ken Lunde says XCOMM plane 14 of CNS 11643-1983 now became plane 3 of CNS 11643-1992. XCOMM I do not know how Taiwanese EUC is organized currently, so I left the XCOMM X11R6 organization of fsN/csN as it is and only changed "CNS11643-*" XCOMM to "CNS11643.1986-*". XCOMM 1995-10-24 T. Numata (numa@rp.open.cs.fujitsu.co.jp) XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class (7 bit ASCII) fs0 { charset { name ISO8859-1:GL } font { primary ISO8859-1:GL vertical_rotate all } } XCOMM fs1 class fs1 { charset { name CNS11643.1986-1:GL } font { primary CNS11643.1986-1:GL } } XCOMM fs2 class fs2 { charset { name CNS11643.1986-2:GL } font { primary CNS11643.1986-2:GL } } XCOMM fs3 class fs3 { charset { name CNS11643.1986-14:GL } font { primary CNS11643.1986-14:GL } } XCOMM fs4 class fs4 { charset { name CNS11643.1986-15:GL } font { primary CNS11643.1986-15:GL } } XCOMM fs5 class fs5 { charset { name CNS11643.1986-16:GL } font { primary CNS11643.1986-16:GL } } END XLC_FONTSET XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name zh_TW.euc mb_cur_max 4 state_depend_encoding False wc_encoding_mask \x3fffc000 wc_shift_bits 7 use_stdc_env True force_convert_to_mb True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding ISO8859-1:GL; CNS11643.1986-0:GL } XCOMM cs1 class cs1 { side GR:Default length 2 wc_encoding \x30000000 ct_encoding CNS11643.1986-1:GR } XCOMM cs2 class # plane 2 cs2 { side GR length 2 mb_encoding \x8e\xa2 wc_encoding \x10088000 ct_encoding CNS11643.1986-2:GR } XCOMM cs3 class # plane 14 cs3 { side GR length 2 mb_encoding \x8e\xae wc_encoding \x100b8000 ct_encoding CNS11643.1986-14:GR } XCOMM cs4 class # plane 15 cs4 { side GR length 2 mb_encoding \x8e\xaf wc_encoding \x100bc000 ct_encoding CNS11643.1986-15:GR } XCOMM cs5 class # plane 16 cs5 { side GR length 2 mb_encoding \x8e\xb0 wc_encoding \x100c0000 ct_encoding CNS11643.1986-16:GR } END XLC_XLOCALE libX11-1.6.3/nls/zh_TW/XI18N_OBJS000064401431060000012000000003641247741723500162570ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for zh_TW locale # XLC common/xlibi18n _XlcGenericLoader # XLC_open XIM common/ximp40 _Ximp_OpenIM # XIM_open XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/tatar-cyr/XI18N_OBJS000064401431060000012000000005251247741723500171310ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for tatar-cyr locale # XLC common/xlcDef _XlcDefaultLoader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/tatar-cyr/XLC_LOCALE.pre000064401431060000012000000021421247741723500177340ustar00alancstaff00002660200006XCOMM XLocale Database Sample for tatar-cyr. XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class fs0 { charset { name ISO8859-1:GL } font { primary TATAR-CYR:GL substitute ISO8859-1:GL vertical_rotate all } } XCOMM fs1 class fs1 { charset { name TATAR-CYR:GR } font { primary TATAR-CYR:GR } } END XLC_FONTSET XCOMM XCOMM XLC_CHARSET_DEFINE category XCOMM XLC_CHARSET_DEFINE csd0 { charset_name TATAR-CYR side GR length 1 string_encoding False sequence \x1b%/1 } END XLC_CHARSET_DEFINE XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name TATAR-CYR mb_cur_max 1 state_depend_encoding False #if WCHAR32 wc_encoding_mask \x30000000 wc_shift_bits 7 #else wc_encoding_mask \x00008080 wc_shift_bits 8 #endif use_stdc_env True force_convert_to_mb True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding TATAR-CYR:GL; ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 #if WCHAR32 wc_encoding \x30000000 #else wc_encoding \x00008080 #endif ct_encoding TATAR-CYR:GR } END XLC_XLOCALE libX11-1.6.3/nls/tatar-cyr/Compose.pre000064401431060000012000000000001247741723500176630ustar00alancstaff00002660200006libX11-1.6.3/nls/isiri-3342/XI18N_OBJS000064401431060000012000000005261247741723500167340ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for isiri-3342 locale # XLC common/xlcDef _XlcDefaultLoader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/isiri-3342/Compose.pre000064401431060000012000000000001247741723500174650ustar00alancstaff00002660200006libX11-1.6.3/nls/isiri-3342/XLC_LOCALE.pre000064401431060000012000000021171247741723500175400ustar00alancstaff00002660200006XCOMM XLocale Database Sample for mulelao-1. XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class (7 bit ASCII) fs0 { charset { name ISO8859-1:GL } font { primary ISIRI-3342:GL substitute ISO8859-1:GL } } XCOMM fs1 class fs1 { charset ISIRI-3342:GR font ISIRI-3342:GR } END XLC_FONTSET XCOMM XCOMM XLC_CHARSET_DEFINE category XCOMM XLC_CHARSET_DEFINE csd0 { charset_name ISIRI-3342 side GR length 1 string_encoding False sequence \x1b%/1 } END XLC_CHARSET_DEFINE XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name ISIRI-3342 mb_cur_max 1 state_depend_encoding False #if WCHAR32 wc_encoding_mask \x30000000 wc_shift_bits 7 #else wc_encoding_mask \x00008080 wc_shift_bits 8 #endif use_stdc_env True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding ISIRI-3342:GL; ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 #if WCHAR32 wc_encoding \x30000000 #else wc_encoding \x00008080 #endif ct_encoding ISIRI-3342:GR } END XLC_XLOCALE libX11-1.6.3/nls/koi8-c/XI18N_OBJS000064401431060000012000000005221247741723500163120ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for koi8-c locale # XLC common/xlcDef _XlcDefaultLoader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/koi8-c/XLC_LOCALE.pre000064401431060000012000000020571247741723500171250ustar00alancstaff00002660200006XCOMM XLocale Database Sample for koi8-c. XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class (7 bit ASCII) fs0 { charset { name ISO8859-1:GL } font { primary KOI8-C:GL substitute ISO8859-1:GL } } XCOMM fs1 class fs1 { charset KOI8-C:GR font KOI8-C:GR } END XLC_FONTSET XCOMM XCOMM XLC_CHARSET_DEFINE category XCOMM XLC_CHARSET_DEFINE csd0 { charset_name KOI8-C side GR length 1 string_encoding False sequence \x1b%/1 } END XLC_CHARSET_DEFINE XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name KOI8-C mb_cur_max 1 state_depend_encoding False #if WCHAR32 wc_encoding_mask \x30000000 wc_shift_bits 7 #else wc_encoding_mask \x00008080 wc_shift_bits 8 #endif use_stdc_env True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding KOI8-C:GL; ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 #if WCHAR32 wc_encoding \x30000000 #else wc_encoding \x00008080 #endif ct_encoding KOI8-C:GR } END XLC_XLOCALE M XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class (7 bit ASCII) fs0 { charset { name ISO8859-1:GL } font { primary KOI8-C:GL substitute ISO8859-1:GL } } XCOMM fs1 class fs1 { charset KOI8-C:GR font KOI8-C:GR } END XLC_FONTSET XCOMM XCOMM XLC_CHARSET_DEFINE category XCOMM XLC_CHARSET_DEFINE csd0 { charset_name KOI8-C side GR length 1 string_encoding False sequence \x1b%/1 } END XLC_CHARSET_DEFINlibX11-1.6.3/nls/koi8-c/Compose.pre000064401431060000012000000142421247741723500170640ustar00alancstaff00002660200006XCOMM XCOMM koi8-c Compose Sequence XCOMM XCOMM Sequence Definition XCOMM XCOMM XCOMM Means XCOMM Special Character : "#" numbersign : "'" apostrophe : "'" apostrophe : "@" at : "[" bracketleft : "\\" backslash : "\\" backslash : "\\" backslash : "]" bracketright : "^" asciicircum : "^" asciicircum : "^" asciicircum : "^" asciicircum : "`" grave : "`" grave : "{" braceleft : "{" braceleft : "|" bar : "|" bar : "|" bar : "|" bar : "|" bar : "|" bar : "}" braceright : "}" braceright : "~" asciitilde : "~" asciitilde : "~" asciitilde : "~" asciitilde : "\240" nobreakspace : "\200" Cyrillic_ghe_bar : "\220" Cyrillic_GHE_bar : "\201" Cyrillic_zhe_descender : "\221" Cyrillic_ZHE_descender : "\202" Cyrillic_ka_descender : "\222" Cyrillic_KA_descender : "\203" Cyrillic_ka_vertstroke : "\223" Cyrillic_KA_vertstroke : "\203" Cyrillic_ka_vertstroke : "\223" Cyrillic_KA_vertstroke : "\204" Cyrillic_en_descender : "\224" Cyrillic_EN_descender : "\205" Cyrillic_u_straight : "\225" Cyrillic_U_straight : "\205" Cyrillic_u_straight : "\225" Cyrillic_U_straight : "\206" Cyrillic_u_straight_bar : "\226" Cyrillic_U_straight_bat : "\206" Cyrillic_u_straight_bar : "\226" Cyrillic_U_straight_bat : "\207" Cyrillic_ha_descender : "\227" Cyrillic_HA_descender : "\210" Cyrillic_che_descender : "\230" Cyrillic_CHE_descender : "\211" Cyrillic_che_vertstroke : "\231" Cyrillic_CHE_vertstroke : "\211" Cyrillic_che_vertstroke : "\231" Cyrillic_CHE_vertstroke : "\212" Cyrillic_shha : "\232" Cyrillic_SHHA : "\212" Cyrillic_shha : "\232" Cyrillic_SHHA : "\212" Cyrillic_shha : "\232" Cyrillic_SHHA : "\213" Cyrillic_schwa : "\233" Cyrillic_SCHWA : "\213" Cyrillic_schwa : "\233" Cyrillic_SCHWA : "\214" Cyrillic_i_macron : "\234" Cyrillic_I_macron : "\215" Cyrillic_o_bar : "\235" Cyrillic_O_bar : "\216" Cyrillic_u_macron : "\236" Cyrillic_U_macron : "\241" Serbian_dje : "\261" Serbian_DJE : "\242" Macedonia_gje : "\262" Macedonia_GJE : "\243" Cyrillic_io : "\263" Cyrillic_IO : "\243" Cyrillic_io : "\263" Cyrillic_IO : "\243" Cyrillic_io : "\263" Cyrillic_IO : "\251" Cyrillic_lje : "\271" Cyrillic_LJE : "\252" Cyrillic_nje : "\272" Cyrillic_NJE : "\300" Cyrillic_yu : "\340" Cyrillic_YU : "\300" Cyrillic_yu : "\340" Cyrillic_YU : "\303" Cyrillic_tse : "\343" Cyrillic_TSE : "\321" Cyrillic_ya : "\361" Cyrillic_YA : "\321" Cyrillic_ya : "\361" Cyrillic_YA : "\335" Cyrillic_shcha : "\375" Cyrillic_SHCHA XCOMM End of Sequence Definition libX11-1.6.3/nls/iso8859-9/XI18N_OBJS000064401431060000012000000003701247741723500165170ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for euro locales # XLC common/xlibi18n _XlcGenericLoader # XLC_open XIM common/xiiimp _XimpLocalOpenIM # XIM_open XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/iso8859-9/Compose.pre000064401431060000012000000523771247741723500173030ustar00alancstaff00002660200006XCOMM XCOMM ISO 8859-9 (Latin5) Compose Sequence XCOMM XCOMM Sequence Definition XCOMM XCOMM XCOMM Means XCOMM Special Character : "#" numbersign : "'" apostrophe : "'" apostrophe : "[" bracketleft : "\\" backslash : "\\" backslash : "\\" backslash : "]" bracketright : "^" asciicircum : "^" asciicircum : "^" asciicircum : "^" asciicircum : "`" grave : "`" grave : "{" braceleft : "{" braceleft : "|" bar : "|" bar : "|" bar : "|" bar : "|" bar : "|" bar : "}" braceright : "}" braceright : "~" asciitilde : "~" asciitilde : "~" asciitilde : "~" asciitilde : "\241" exclamdown : "\242" cent : "\242" cent : "\242" cent : "\242" cent : "\242" cent : "\242" cent : "\242" cent : "\242" cent : "\243" sterling : "\243" sterling : "\243" sterling : "\243" sterling : "\243" sterling : "\243" sterling : "\243" sterling : "\243" sterling : "\244" EuroSign : "\244" EuroSign : "\244" EuroSign : "\244" EuroSign : "\244" EuroSign : "\244" EuroSign : "\244" EuroSign : "\244" EuroSign : "\245" yen : "\245" yen : "\245" yen : "\245" yen : "\245" yen : "\245" yen : "\245" yen : "\245" yen : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section <0> : "\247" section <0> : "\247" section <0> : "\247" section <0> : "\247" section : "\251" copyright : "\251" copyright : "\251" copyright : "\251" copyright : "\251" copyright : "\251" copyright : "\251" copyright : "\251" copyright <0> : "\251" copyright <0> : "\251" copyright <0> : "\251" copyright <0> : "\251" copyright : "\251" copyright : "\252" ordfeminine : "\252" ordfeminine : "\252" ordfeminine : "\252" ordfeminine : "\272" masculine : "\272" masculine : "\272" masculine : "\272" masculine : "\253" guillemotleft : "\273" guillemotright <0> : "\260" degree <0> : "\260" degree <0> : "\260" degree <0> : "\260" degree : "\261" plusminus : "\261" plusminus : "\265" mu : "\265" mu : "\265" mu : "\265" mu <1> : "\271" onesuperior <1> : "\271" onesuperior <1> : "\271" onesuperior <1> : "\271" onesuperior <1> : "\271" onesuperior <1> : "\271" onesuperior <2> : "\262" twosuperior <2> : "\262" twosuperior <2> : "\262" twosuperior <2> : "\262" twosuperior <2> : "\262" twosuperior <2> : "\262" twosuperior <3> : "\263" threesuperior <3> : "\263" threesuperior <3> : "\263" threesuperior <3> : "\263" threesuperior <3> : "\263" threesuperior <3> : "\263" threesuperior

: "\266" paragraph

: "\266" paragraph

: "\266" paragraph

: "\266" paragraph : "\267" periodcentered : "\267" periodcentered : "\267" periodcentered : "\277" questiondown : "\240" nobreakspace : "\254" notsign : "\254" notsign : "\255" hyphen : "\256" registered : "\256" registered : "\256" registered : "\257" macron : "\257" macron : "\257" macron : "\257" macron : "\257" macron : "\367" division : "\367" division : "\327" multiply : "\264" acute : "\270" cedilla : "\250" diaeresis XCOMM Accented Alphabet : "\300" Agrave : "\300" Agrave : "\301" Aacute : "\301" Aacute : "\301" Aacute : "\301" Aacute : "\302" Acircumflex : "\302" Acircumflex : "\302" Acircumflex : "\302" Acircumflex : "\303" Atilde : "\303" Atilde : "\303" Atilde : "\303" Atilde : "\304" Adiaeresis : "\304" Adiaeresis : "\304" Adiaeresis : "\304" Adiaeresis : "\305" Aring : "\305" Aring : "\305" Aring : "\306" AE : "\340" agrave : "\340" agrave : "\341" aacute : "\341" aacute : "\341" aacute : "\341" aacute : "\342" acircumflex : "\342" acircumflex : "\342" acircumflex : "\342" acircumflex : "\343" atilde : "\343" atilde : "\343" atilde : "\343" atilde : "\344" adiaeresis : "\344" adiaeresis : "\344" adiaeresis : "\344" adiaeresis : "\345" aring : "\345" aring : "\345" aring : "\346" ae : "\307" Ccedilla : "\307" Ccedilla : "\307" Ccedilla : "\307" Ccedilla : "\347" ccedilla : "\347" ccedilla : "\347" ccedilla : "\347" ccedilla : "\320" ETH : "\320" ETH : "\360" eth : "\360" eth : "\310" Egrave : "\310" Egrave : "\311" Eacute : "\311" Eacute : "\311" Eacute : "\311" Eacute : "\312" Ecircumflex : "\312" Ecircumflex : "\312" Ecircumflex : "\312" Ecircumflex : "\313" Ediaeresis : "\313" Ediaeresis : "\313" Ediaeresis : "\313" Ediaeresis : "\350" egrave : "\350" egrave : "\351" eacute : "\351" eacute : "\351" eacute : "\351" eacute : "\352" ecircumflex : "\352" ecircumflex : "\352" ecircumflex : "\352" ecircumflex : "\353" ediaeresis : "\353" ediaeresis : "\353" ediaeresis : "\353" ediaeresis : "\320" Gbreve : "\320" Gbreve : "\320" Gbreve : "\320" Gbreve : "\320" Gbreve : "\360" gbreve : "\360" gbreve : "\360" gbreve : "\360" gbreve : "\360" gbreve : "\314" Igrave : "\314" Igrave : "\315" Iacute : "\315" Iacute : "\315" Iacute : "\315" Iacute : "\316" Icircumflex : "\316" Icircumflex : "\316" Icircumflex : "\316" Icircumflex : "\317" Idiaeresis : "\317" Idiaeresis : "\317" Idiaeresis : "\317" Idiaeresis : "\335" Iabovedot : "\335" Iabovedot : "\354" igrave : "\354" igrave : "\355" iacute : "\355" iacute : "\355" iacute : "\355" iacute : "\356" icircumflex : "\356" icircumflex : "\356" icircumflex : "\356" icircumflex : "\357" idiaeresis : "\357" idiaeresis : "\357" idiaeresis : "\357" idiaeresis : "\375" idotless : "\375" idotless : "\321" Ntilde : "\321" Ntilde : "\321" Ntilde : "\321" Ntilde : "\361" ntilde : "\361" ntilde : "\361" ntilde : "\361" ntilde : "\322" Ograve : "\322" Ograve : "\323" Oacute : "\323" Oacute : "\323" Oacute : "\323" Oacute : "\324" Ocircumflex : "\324" Ocircumflex : "\324" Ocircumflex : "\324" Ocircumflex : "\325" Otilde : "\325" Otilde : "\325" Otilde : "\325" Otilde : "\326" Odiaeresis : "\326" Odiaeresis : "\326" Odiaeresis : "\326" Odiaeresis : "\330" Ooblique : "\330" Ooblique : "\274" OE : "\362" ograve : "\362" ograve : "\363" oacute : "\363" oacute : "\363" oacute : "\363" oacute : "\364" ocircumflex : "\364" ocircumflex : "\364" ocircumflex : "\364" ocircumflex : "\365" otilde : "\365" otilde : "\365" otilde : "\365" otilde : "\366" odiaeresis : "\366" odiaeresis : "\366" odiaeresis : "\366" odiaeresis : "\370" oslash : "\370" oslash : "\336" Scedilla : "\336" Scedilla : "\336" Scedilla : "\376" scedilla : "\336" Scedilla : "\376" scedilla : "\376" scedilla : "\376" scedilla : "\331" Ugrave : "\331" Ugrave : "\332" Uacute : "\332" Uacute : "\332" Uacute : "\332" Uacute : "\333" Ucircumflex : "\333" Ucircumflex : "\333" Ucircumflex : "\333" Ucircumflex : "\334" Udiaeresis : "\334" Udiaeresis : "\334" Udiaeresis : "\334" Udiaeresis : "\371" ugrave : "\371" ugrave : "\372" uacute : "\372" uacute : "\372" uacute : "\372" uacute : "\373" ucircumflex : "\373" ucircumflex : "\373" ucircumflex : "\373" ucircumflex : "\374" udiaeresis : "\374" udiaeresis : "\374" udiaeresis : "\374" udiaeresis : "\337" ssharp : "\336" THORN : "\376" thorn : "\335" Yacute : "\335" Yacute : "\335" Yacute : "\335" Yacute : "\276" Ydiaeresis : "\276" Ydiaeresis : "\276" Ydiaeresis : "\276" Ydiaeresis : "\375" yacute : "\375" yacute : "\375" yacute : "\375" yacute : "\377" ydiaeresis : "\377" ydiaeresis : "\377" ydiaeresis : "\377" ydiaeresis : "\264" Zcaron : "\264" Zcaron : "\270" zcaron : "\270" zcaron : "\264" Zcaron : "\270" zcaron XCOMM XCOMM dead key accent keysyms XCOMM Special Character : "|" bar : "`" grave : "'" apostrophe : "\250" diaeresis : "^" asciicircum : "~" asciitilde <0> : "\260" degree <1> : "\271" onesuperior <2> : "\262" twosuperior <3> : "\263" threesuperior : "\267" periodcentered : "\254" notsign : "\257" macron : "\257" macron : "\264" acute : "\270" cedilla : "\250" diaeresis XCOMM Accented Alphabet : "\305" Aring : "\345" aring : "\300" Agrave : "\301" Aacute : "\302" Acircumflex : "\303" Atilde : "\304" Adiaeresis : "\340" agrave : "\341" aacute : "\342" acircumflex : "\343" atilde : "\344" adiaeresis : "\307" Ccedilla : "\347" ccedilla : "\310" Egrave : "\311" Eacute : "\312" Ecircumflex : "\313" Ediaeresis : "\350" egrave : "\351" eacute : "\352" ecircumflex : "\353" ediaeresis : "\320" Gbreve : "\360" gbreve : "\335" Iabovedot : "\314" Igrave : "\315" Iacute : "\316" Icircumflex : "\317" Idiaeresis : "\375" idotless : "\354" igrave : "\355" iacute : "\356" icircumflex : "\357" idiaeresis : "\321" Ntilde : "\361" ntilde : "\322" Ograve : "\323" Oacute : "\324" Ocircumflex : "\325" Otilde : "\326" Odiaeresis : "\362" ograve : "\363" oacute : "\364" ocircumflex : "\365" otilde : "\366" odiaeresis : "\246" Scaron : "\250" scaron : "\336" Scedilla : "\376" scedilla : "\331" Ugrave : "\332" Uacute : "\333" Ucircumflex : "\334" Udiaeresis : "\371" ugrave : "\372" uacute : "\373" ucircumflex : "\374" udiaeresis : "\335" Yacute : "\276" Ydiaeresis : "\375" yacute : "\377" ydiaeresis : "\264" Zcaron : "\270" zcaron XCOMM End of Sequence Definition i_key> : "\314" Igrave : "\315" Iacute : "\315" Iacute : "\315" Iacute : "\315" Iacute : "\316" IcirlibX11-1.6.3/nls/iso8859-9/XLC_LOCALE.pre000064401431060000012000000016521247741723500173310ustar00alancstaff00002660200006XCOMM XLocale Database Sample for iso8859-9. XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class fs0 { charset { name ISO8859-1:GL } font { primary ISO8859-9:GL substitute ISO8859-1:GL vertical_rotate all } } XCOMM fs1 class fs1 { charset { name ISO8859-9:GR } font { primary ISO8859-9:GR } } END XLC_FONTSET XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name ISO8859-9 mb_cur_max 1 state_depend_encoding False #if WCHAR32 wc_encoding_mask \x30000000 wc_shift_bits 7 #else wc_encoding_mask \x00008080 wc_shift_bits 8 #endif use_stdc_env True force_convert_to_mb True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding ISO8859-9:GL; ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 #if WCHAR32 wc_encoding \x30000000 #else wc_encoding \x00008080 #endif ct_encoding ISO8859-9:GR } END XLC_XLOCALE libX11-1.6.3/nls/th_TH.UTF-8/Compose.pre000064401431060000012000000000601247741723500175730ustar00alancstaff00002660200006include "X11_LOCALEDATADIR/en_US.UTF-8/Compose" libX11-1.6.3/nls/th_TH.UTF-8/XLC_LOCALE.pre000064401431060000012000000021101247741723500176310ustar00alancstaff00002660200006XCOMM XLocale Database Sample for th_TH XCOMM XCOMM XCOMM Modified from origial th_TH.TACTIS XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class fs0 { charset { name ISO10646-1 } font { primary ISO10646-1 } } XCOMM We leave the legacy encodings in for the moment, because we don't XCOMM have that many ISO10646 fonts yet. XCOMM fs0 class (7 bit ASCII) fs1 { charset ISO8859-1:GL font ISO8859-1:GL } XCOMM fs1 class (Thai) fs2 { charset ISO8859-11:GR font ISO8859-11:GR } END XLC_FONTSET XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name UTF-8 mb_cur_max 3 state_depend_encoding False wc_encoding_mask \x30000000 wc_shift_bits 7 use_stdc_env True force_convert_to_mb True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 wc_encoding \x30000000 ct_encoding ISO8859-11:GR } XCOMM cs2 class cs2 { side none ct_encoding ISO10646-1 } END XLC_XLOCALE libX11-1.6.3/nls/th_TH.UTF-8/XI18N_OBJS000064401431060000012000000005331247741723500170320ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for th_TH.UTF-8 locale # # XLC common/xlcUTF8Load _XlcUtf8Loader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/iso8859-3/XLC_LOCALE.pre000064401431060000012000000016521247741723500173230ustar00alancstaff00002660200006XCOMM XLocale Database Sample for iso8859-3. XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class fs0 { charset { name ISO8859-1:GL } font { primary ISO8859-3:GL substitute ISO8859-1:GL vertical_rotate all } } XCOMM fs1 class fs1 { charset { name ISO8859-3:GR } font { primary ISO8859-3:GR } } END XLC_FONTSET XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name ISO8859-3 mb_cur_max 1 state_depend_encoding False #if WCHAR32 wc_encoding_mask \x30000000 wc_shift_bits 7 #else wc_encoding_mask \x00008080 wc_shift_bits 8 #endif use_stdc_env True force_convert_to_mb True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding ISO8859-3:GL; ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 #if WCHAR32 wc_encoding \x30000000 #else wc_encoding \x00008080 #endif ct_encoding ISO8859-3:GR } END XLC_XLOCALE libX11-1.6.3/nls/iso8859-3/XI18N_OBJS000064401431060000012000000005251247741723500165130ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for iso8859-3 locale # XLC common/xlcDef _XlcDefaultLoader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/iso8859-3/Compose.pre000064401431060000012000000545051247741723500172700ustar00alancstaff00002660200006XCOMM XCOMM ISO 8859-3 (Latin3) Compose Sequence XCOMM XCOMM Sequence Definition XCOMM XCOMM XCOMM Means XCOMM Special Character : "#" numbersign : "'" apostrophe : "'" apostrophe : "@" at : "[" bracketleft : "\\" backslash : "\\" backslash : "\\" backslash : "]" bracketright : "^" asciicircum : "^" asciicircum : "^" asciicircum : "^" asciicircum : "`" grave : "`" grave : "{" braceleft : "{" braceleft : "|" bar : "|" bar : "|" bar : "|" bar : "|" bar : "|" bar : "}" braceright : "}" braceright : "~" asciitilde : "~" asciitilde : "~" asciitilde : "~" asciitilde : "\243" sterling : "\243" sterling : "\243" sterling : "\243" sterling : "\243" sterling : "\243" sterling : "\243" sterling : "\243" sterling : "\244" EuroSign : "\244" EuroSign : "\244" EuroSign : "\244" EuroSign : "\244" EuroSign : "\244" EuroSign : "\244" EuroSign : "\244" EuroSign : "\245" yen : "\245" yen : "\245" yen : "\245" yen : "\245" yen : "\245" yen : "\245" yen : "\245" yen : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section <0> : "\247" section <0> : "\247" section <0> : "\247" section <0> : "\247" section <0> : "\260" degree <0> : "\260" degree <0> : "\260" degree <0> : "\260" degree : "\265" mu : "\265" mu : "\265" mu : "\265" mu <2> : "\262" twosuperior <2> : "\262" twosuperior <2> : "\262" twosuperior <2> : "\262" twosuperior <2> : "\262" twosuperior <2> : "\262" twosuperior <3> : "\263" threesuperior <3> : "\263" threesuperior <3> : "\263" threesuperior <3> : "\263" threesuperior <3> : "\263" threesuperior <3> : "\263" threesuperior : "\267" periodcentered : "\267" periodcentered : "\267" periodcentered : "\240" nobreakspace : "\255" hyphen : "\256" registered : "\256" registered : "\256" registered : "\367" division : "\367" division : "\327" multiply : "\264" acute : "\270" cedilla : "\250" diaeresis XCOMM Accented Alphabet : "\300" Agrave : "\300" Agrave : "\301" Aacute : "\301" Aacute : "\301" Aacute : "\301" Aacute : "\302" Acircumflex : "\302" Acircumflex : "\302" Acircumflex : "\302" Acircumflex : "\303" Atilde : "\303" Atilde : "\303" Atilde : "\303" Atilde : "\304" Adiaeresis : "\304" Adiaeresis : "\304" Adiaeresis : "\304" Adiaeresis : "\340" agrave : "\340" agrave : "\341" aacute : "\341" aacute : "\341" aacute : "\341" aacute : "\342" acircumflex : "\342" acircumflex : "\342" acircumflex : "\342" acircumflex : "\343" atilde : "\343" atilde : "\343" atilde : "\343" atilde : "\344" adiaeresis : "\344" adiaeresis : "\344" adiaeresis : "\344" adiaeresis : "\305" Cabovedot : "\305" Cabovedot : "\306" Ccircumflex : "\306" Ccircumflex : "\306" Ccircumflex : "\306" Ccircumflex : "\307" Ccedilla : "\307" Ccedilla : "\307" Ccedilla : "\307" Ccedilla : "\345" cabovedot : "\345" cabovedot : "\346" ccircumflex : "\346" ccircumflex : "\346" ccircumflex : "\346" ccircumflex : "\347" ccedilla : "\347" ccedilla : "\347" ccedilla : "\347" ccedilla : "\320" ETH : "\320" ETH : "\360" eth : "\360" eth : "\310" Egrave : "\310" Egrave : "\311" Eacute : "\311" Eacute : "\311" Eacute : "\311" Eacute : "\312" Ecircumflex : "\312" Ecircumflex : "\312" Ecircumflex : "\312" Ecircumflex : "\313" Ediaeresis : "\313" Ediaeresis : "\313" Ediaeresis : "\313" Ediaeresis : "\350" egrave : "\350" egrave : "\351" eacute : "\351" eacute : "\351" eacute : "\351" eacute : "\352" ecircumflex : "\352" ecircumflex : "\352" ecircumflex : "\352" ecircumflex : "\353" ediaeresis : "\353" ediaeresis : "\353" ediaeresis : "\353" ediaeresis : "\253" Gbreve : "\253" Gbreve : "\253" Gbreve : "\253" Gbreve : "\253" Gbreve : "\325" Gabovedot : "\325" Gabovedot : "\330" Gcircumflex : "\330" Gcircumflex : "\330" Gcircumflex : "\330" Gcircumflex : "\273" gbreve : "\273" gbreve : "\273" gbreve : "\273" gbreve : "\273" gbreve : "\365" gabovedot : "\365" gabovedot : "\370" gcircumflex : "\370" gcircumflex : "\370" gcircumflex : "\370" gcircumflex : "\241" Hstroke : "\241" Hstroke : "\246" Hcircumflex : "\246" Hcircumflex : "\246" Hcircumflex : "\246" Hcircumflex : "\261" hstroke : "\261" hstroke : "\266" hcircumflex : "\266" hcircumflex : "\266" hcircumflex : "\266" hcircumflex : "\251" Iabovedot : "\251" Iabovedot : "\314" Igrave : "\314" Igrave : "\315" Iacute : "\315" Iacute : "\315" Iacute : "\315" Iacute : "\316" Icircumflex : "\316" Icircumflex : "\316" Icircumflex : "\316" Icircumflex : "\317" Idiaeresis : "\317" Idiaeresis : "\317" Idiaeresis : "\317" Idiaeresis : "\271" idotless : "\271" idotless : "\354" igrave : "\354" igrave : "\355" iacute : "\355" iacute : "\355" iacute : "\355" iacute : "\356" icircumflex : "\356" icircumflex : "\356" icircumflex : "\356" icircumflex : "\357" idiaeresis : "\357" idiaeresis : "\357" idiaeresis : "\357" idiaeresis : "\254" Jcircumflex : "\254" Jcircumflex : "\254" Jcircumflex : "\254" Jcircumflex : "\274" jcircumflex : "\274" jcircumflex : "\274" jcircumflex : "\274" jcircumflex : "\322" Ograve : "\322" Ograve : "\323" Oacute : "\323" Oacute : "\323" Oacute : "\323" Oacute : "\324" Ocircumflex : "\324" Ocircumflex : "\324" Ocircumflex : "\324" Ocircumflex : "\325" Otilde : "\325" Otilde : "\325" Otilde : "\325" Otilde : "\326" Odiaeresis : "\326" Odiaeresis : "\326" Odiaeresis : "\326" Odiaeresis : "\362" ograve : "\362" ograve : "\363" oacute : "\363" oacute : "\363" oacute : "\363" oacute : "\364" ocircumflex : "\364" ocircumflex : "\364" ocircumflex : "\364" ocircumflex : "\365" otilde : "\365" otilde : "\365" otilde : "\365" otilde : "\366" odiaeresis : "\366" odiaeresis : "\366" odiaeresis : "\366" odiaeresis : "\252" Scedilla : "\252" Scedilla : "\252" Scedilla : "\272" scedilla : "\252" Scedilla : "\272" scedilla : "\272" scedilla : "\272" scedilla : "\336" Scircumflex : "\336" Scircumflex : "\336" Scircumflex : "\336" Scircumflex : "\376" scircumflex : "\376" scircumflex : "\376" scircumflex : "\376" scircumflex : "\331" Ugrave : "\331" Ugrave : "\332" Uacute : "\332" Uacute : "\332" Uacute : "\332" Uacute : "\333" Ucircumflex : "\333" Ucircumflex : "\333" Ucircumflex : "\333" Ucircumflex : "\334" Udiaeresis : "\334" Udiaeresis : "\334" Udiaeresis : "\334" Udiaeresis : "\335" Ubreve : "\335" Ubreve : "\335" Ubreve : "\335" Ubreve : "\335" Ubreve : "\371" ugrave : "\371" ugrave : "\372" uacute : "\372" uacute : "\372" uacute : "\372" uacute : "\373" ucircumflex : "\373" ucircumflex : "\373" ucircumflex : "\373" ucircumflex : "\374" udiaeresis : "\374" udiaeresis : "\374" udiaeresis : "\374" udiaeresis : "\375" ubreve : "\375" ubreve : "\375" ubreve : "\375" ubreve : "\375" ubreve : "\337" ssharp : "\335" Yacute : "\335" Yacute : "\335" Yacute : "\335" Yacute : "\276" Ydiaeresis : "\276" Ydiaeresis : "\276" Ydiaeresis : "\276" Ydiaeresis : "\375" yacute : "\375" yacute : "\375" yacute : "\375" yacute : "\377" ydiaeresis : "\377" ydiaeresis : "\377" ydiaeresis : "\377" ydiaeresis : "\257" Zabovedot : "\257" Zabovedot : "\277" zabovedot : "\277" zabovedot XCOMM XCOMM dead key accent keysyms XCOMM Special Character : "|" bar : "`" grave : "'" apostrophe : "\250" diaeresis : "^" asciicircum : "~" asciitilde <0> : "\260" degree <1> : "\271" onesuperior <2> : "\262" twosuperior <3> : "\263" threesuperior : "\267" periodcentered : "\254" notsign : "\257" macron : "\257" macron : "\264" acute : "\270" cedilla : "\250" diaeresis XCOMM Accented Alphabet : "\305" Aring : "\345" aring : "\300" Agrave : "\301" Aacute : "\302" Acircumflex : "\303" Atilde : "\304" Adiaeresis : "\340" agrave : "\341" aacute : "\342" acircumflex : "\343" atilde : "\344" adiaeresis : "\307" Ccedilla : "\306" Ccircumflex : "\305" Cabovedot : "\347" ccedilla : "\346" ccircumflex : "\345" cabovedot : "\310" Egrave : "\311" Eacute : "\312" Ecircumflex : "\313" Ediaeresis : "\350" egrave : "\351" eacute : "\352" ecircumflex : "\353" ediaeresis : "\253" Gbreve : "\330" Gcircumflex : "\273" gbreve : "\370" gcircumflex : "\246" Hcircumflex : "\266" hcircumflex : "\314" Igrave : "\315" Iacute : "\316" Icircumflex : "\317" Idiaeresis : "\251" Iabovedot : "\354" igrave : "\355" iacute : "\356" icircumflex : "\357" idiaeresis : "\271" idotless : "\254" Jcircumflex : "\274" jcircumflex : "\321" Ntilde : "\361" ntilde : "\322" Ograve : "\323" Oacute : "\324" Ocircumflex : "\325" Otilde : "\326" Odiaeresis : "\362" ograve : "\363" oacute : "\364" ocircumflex : "\365" otilde : "\366" odiaeresis : "\246" Scaron : "\252" Scedilla : "\336" Scircumflex : "\250" scaron : "\272" scedilla : "\376" scircumflex : "\335" Ubreve : "\331" Ugrave : "\332" Uacute : "\333" Ucircumflex : "\334" Udiaeresis : "\375" ubreve : "\371" ugrave : "\372" uacute : "\373" ucircumflex : "\374" udiaeresis : "\335" Yacute : "\276" Ydiaeresis : "\375" yacute : "\377" ydiaeresis : "\264" Zcaron : "\257" Zabovedot : "\270" zcaron : "\277" zabovedot XCOMM End of Sequence Definition : "\254" Jcircumflex : "\254" Jcircumflex : "\254" Jcircumflex Means XCOMM Special Character XCOMM Right-hand side (Accented Alphabet) XCOMM These compose sequences are pure supposition on my part. XCOMM It would be nice to know what the real cultural conventions XCOMM are for compose sequences. : "\241" Aogonek : "\241" Aogonek : "\242" kra : "\243" Rcedilla : "\243" Rcedilla : "\243" Rcedilla : "\243" Rcedilla : "\244" currency : "\244" currency : "\244" currency : "\244" currency : "\244" currency : "\244" currency : "\244" currency : "\244" currency <0> : "\244" currency <0> : "\244" currency <0> : "\244" currency <0> : "\244" currency : "\245" Itilde : "\245" Itilde : "\246" Lcedilla : "\246" Lcedilla : "\246" Lcedilla : "\246" Lcedilla : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section <0> : "\247" section <0> : "\247" section <0> : "\247" section <0> : "\247" section : "\250" diaeresis : "\251" Scaron : "\251" Scaron : "\252" Emacron : "\252" Emacron : "\252" Emacron : "\252" Emacron : "\253" Gcedilla : "\253" Gcedilla : "\253" Gcedilla : "\253" Gcedilla : "\254" Tstroke : "\254" Tstroke : "\254" Tstroke : "\255" hyphen : "\256" Zcaron : "\256" Zcaron : "\257" macron : "\257" macron : "\257" macron : "\257" macron : "\257" macron <0> : "\260" degree <0> : "\260" degree : "\261" aogonek : "\261" aogonek : "\263" rcedilla : "\263" rcedilla : "\263" rcedilla : "\263" rcedilla : "\264" acute : "\265" itilde : "\265" itilde : "\266" lcedilla : "\266" lcedilla : "\266" lcedilla : "\266" lcedilla : "\267" caron : "\270" cedilla : "\271" scaron : "\271" scaron : "\272" emacron : "\272" emacron : "\272" emacron : "\272" emacron : "\273" gcedilla : "\273" gcedilla : "\273" gcedilla : "\273" gcedilla : "\274" tstroke : "\274" tstroke : "\274" tstroke : "\275" ENG : "\276" zcaron : "\276" zcaron : "\277" eng : "\300" Amacron : "\300" Amacron : "\300" Amacron : "\300" Amacron : "\301" Aacute : "\301" Aacute : "\301" Aacute : "\301" Aacute : "\302" Acircumflex : "\302" Acircumflex : "\302" Acircumflex : "\302" Acircumflex : "\303" Atilde : "\303" Atilde : "\304" Adiaeresis : "\304" Adiaeresis : "\305" Aring : "\305" Aring : "\306" AE : "\307" Iogonek : "\307" Iogonek : "\310" Ccaron : "\310" Ccaron : "\311" Eacute : "\311" Eacute : "\311" Eacute : "\311" Eacute : "\312" Eogonek : "\312" Eogonek : "\313" Ediaeresis : "\313" Ediaeresis : "\314" Eabovedot : "\314" Eabovedot : "\315" Iacute : "\315" Iacute : "\315" Iacute : "\315" Iacute : "\316" Icircumflex : "\316" Icircumflex : "\316" Icircumflex : "\316" Icircumflex : "\317" Imacron : "\317" Imacron : "\317" Imacron : "\317" Imacron : "\320" Dstroke : "\320" Dstroke : "\321" Ncedilla : "\321" Ncedilla : "\321" Ncedilla : "\321" Ncedilla : "\322" Omacron : "\322" Omacron : "\322" Omacron : "\322" Omacron : "\323" Kcedilla : "\323" Kcedilla : "\323" Kcedilla : "\323" Kcedilla : "\324" Ocircumflex : "\324" Ocircumflex : "\324" Ocircumflex : "\324" Ocircumflex : "\325" Otilde : "\325" Otilde : "\326" Odiaeresis : "\326" Odiaeresis : "\327" multiply : "\330" Ooblique : "\330" Ooblique : "\331" Uogonek : "\331" Uogonek : "\332" Uacute : "\332" Uacute : "\332" Uacute : "\332" Uacute : "\333" Ucircumflex : "\333" Ucircumflex : "\333" Ucircumflex : "\333" Ucircumflex : "\334" Udiaeresis : "\334" Udiaeresis : "\335" Utilde : "\335" Utilde : "\336" Umacron : "\336" Umacron : "\336" Umacron : "\336" Umacron : "\337" ssharp : "\340" amacron : "\340" amacron : "\340" amacron : "\340" amacron : "\341" aacute : "\341" aacute : "\341" aacute : "\341" aacute : "\342" acircumflex : "\342" acircumflex : "\342" acircumflex : "\342" acircumflex : "\343" atilde : "\343" atilde : "\344" adiaeresis : "\344" adiaeresis : "\345" aring : "\345" aring : "\346" ae : "\347" iogonek : "\347" iogonek : "\350" ccaron : "\350" ccaron : "\351" eacute : "\351" eacute : "\351" eacute : "\351" eacute : "\352" eogonek : "\352" eogonek : "\353" ediaeresis : "\353" ediaeresis : "\354" eabovedot : "\354" eabovedot : "\355" iacute : "\355" iacute : "\355" iacute : "\355" iacute : "\356" icircumflex : "\356" icircumflex : "\356" icircumflex : "\356" icircumflex : "\357" imacron : "\357" imacron : "\357" imacron : "\357" imacron : "\360" dstroke : "\360" dstroke : "\361" ncedilla : "\361" ncedilla : "\361" ncedilla : "\361" ncedilla : "\362" omacron : "\362" omacron : "\362" omacron : "\362" omacron : "\363" kcedilla : "\363" kcedilla : "\363" kcedilla : "\363" kcedilla : "\364" ocircumflex : "\364" ocircumflex : "\364" ocircumflex : "\364" ocircumflex : "\365" otilde : "\365" otilde : "\366" odiaeresis : "\366" odiaeresis : "\367" division : "\367" division : "\370" ooblique : "\370" ooblique : "\371" uogonek : "\371" uogonek : "\372" uacute : "\372" uacute : "\372" uacute : "\372" uacute : "\373" ucircumflex : "\373" ucircumflex : "\373" ucircumflex : "\373" ucircumflex : "\374" udiaeresis : "\374" udiaeresis : "\375" utilde : "\375" utilde : "\376" umacron : "\376" umacron : "\376" umacron : "\376" umacron : "\377" abovedot : "\314" Eabovedot : "\354" eabovedot : "\377" abovedot : "\377" abovedot : "\305" Aring : "\345" aring : "\264" acute : "\264" acute : "\301" Aacute : "\311" Eacute : "\315" Iacute : "\332" Uacute : "\341" aacute : "\351" eacute : "\355" iacute : "\372" uacute : "\251" Scaron : "\256" Zcaron : "\267" caron : "\267" caron : "\271" scaron : "\276" zcaron : "\310" Ccaron : "\350" ccaron : "\243" Rcedilla : "\246" Lcedilla : "\253" Gcedilla : "\263" rcedilla : "\266" lcedilla : "\270" cedilla : "\270" cedilla : "\273" gcedilla : "\321" Ncedilla : "\323" Kcedilla : "\361" ncedilla : "\363" kcedilla : "\302" Acircumflex : "\316" Icircumflex : "\324" Ocircumflex : "\333" Ucircumflex : "\342" acircumflex : "\356" icircumflex : "\364" ocircumflex : "\373" ucircumflex : "\250" diaeresis : "\250" diaeresis : "\304" Adiaeresis : "\313" Ediaeresis : "\326" Odiaeresis : "\334" Udiaeresis : "\344" adiaeresis : "\353" ediaeresis : "\366" odiaeresis : "\374" udiaeresis : "\252" Emacron : "\257" macron : "\257" macron : "\272" emacron : "\300" Amacron : "\317" Imacron : "\322" Omacron : "\336" Umacron : "\340" amacron : "\357" imacron : "\362" omacron : "\376" umacron : "\241" Aogonek : "\261" aogonek : "\262" ogonek : "\262" ogonek : "\307" Iogonek : "\312" Eogonek : "\331" Uogonek : "\347" iogonek : "\352" eogonek : "\371" uogonek : "\260" ring : "\260" ring : "\245" Itilde : "\265" itilde : "\303" Atilde : "\325" Otilde : "\335" Utilde : "\343" atilde : "\365" otilde : "\375" utilde : "~" asciitilde : "~" asciitilde XCOMM End of Sequence Definition libX11-1.6.3/nls/iso8859-4/XI18N_OBJS000064401431060000012000000005251247741723500165140ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for iso8859-4 locale # XLC common/xlcDef _XlcDefaultLoader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/zh_CN/Compose.pre000064401431060000012000000005401247741723500167670ustar00alancstaff00002660200006XCOMM XCOMM zh Compose Sequence XCOMM XCOMM Sequence Definition XCOMM XCOMM XCOMM This file currently has no entries. It appears that a compose file (even XCOMM just an empty one) is required for the appropriate keysyms to work for XCOMM this encoding. XCOMM XCOMM Means XCOMM Special Character XCOMM End of Sequence Definition libX11-1.6.3/nls/zh_CN/XI18N_OBJS000064401431060000012000000005221247741723500162210ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for zh locale # # XLC common/xlibi18n _XlcGenericLoader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/zh_CN/XLC_LOCALE.pre000064401431060000012000000015121247741723500170270ustar00alancstaff00002660200006XCOMM XLocale Database Sample for zh (eucCN). XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class (7 bit ASCII) fs0 { charset { name ISO8859-1:GL } font { primary ISO8859-1:GL vertical_rotate all } } XCOMM fs1 class fs1 { charset { name GB2312.1980-0:GL } font { primary GB2312.1980-0:GL substitute GB2312.1980-0:GLGR } } END XLC_FONTSET XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name zh.euc mb_cur_max 2 state_depend_encoding False wc_encoding_mask \x30000000 wc_shift_bits 7 use_stdc_env True force_convert_to_mb True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 2 wc_encoding \x30000000 ct_encoding GB2312.1980-0:GL; GB2312.1980-0:GR } END XLC_XLOCALE libX11-1.6.3/nls/Makefile.am000064401431060000012000000031431247741723500157070ustar00alancstaff00002660200006 x11localedir = $(X11_LOCALEDATADIR) CLEANFILES = SUFFIXES = EXTRA_DIST = locale.alias.pre compose.dir.pre locale.dir.pre \ compose-check.pl x11locale_DATA = locale.alias locale.dir compose.dir CLEANFILES += \ locale.alias locale.alias.l1 locale.alias.l2 \ compose.dir compose.dir.l1 compose.dir.l2 \ locale.dir locale.dir.l1 locale.dir.l2 \ XLC_LOCALE include $(top_srcdir)/cpprules.in # Global data files locale.alias: locale.alias.pre $(AM_V_GEN)$(RAWCPP) $(RAWCPPFLAGS) $(CPP_FILES_FLAGS) < $(srcdir)/locale.alias.pre | $(CPP_SED_MAGIC) > locale.alias.l1 $(SED) -e '/^[^#][^ ]*:/s/://' -e '/^[^#].*[ ].*:/d' \ < locale.alias.l1 > locale.alias.l2 cat locale.alias.l2 locale.alias.l1 > locale.alias compose.dir: compose.dir.pre $(AM_V_GEN)$(RAWCPP) $(RAWCPPFLAGS) $(CPP_FILES_FLAGS) < $(srcdir)/compose.dir.pre | $(CPP_SED_MAGIC) > compose.dir.l1 $(SED) -e '/^[^#][^ ]*:/s/://' -e '/^[^#].*[ ].*:/d' \ < compose.dir.l1 > compose.dir.l2 cat compose.dir.l2 compose.dir.l1 > compose.dir locale.dir: locale.dir.pre $(AM_V_GEN)$(RAWCPP) $(RAWCPPFLAGS) $(CPP_FILES_FLAGS) < $(srcdir)/locale.dir.pre | $(CPP_SED_MAGIC) > locale.dir.l1 $(SED) -e '/^[^#][^ ]*:/s/://' -e '/^[^#].*[ ].*:/d' \ < locale.dir.l1 > locale.dir.l2 cat locale.dir.l2 locale.dir.l1 > locale.dir if HAVE_PERL LOG_COMPILER = $(PERL) TESTS = compose-check.pl endif HAVE_PERL # Per-locale data files nobase_dist_x11locale_DATA = $(locales:%=%/XI18N_OBJS) nobase_x11locale_DATA = $(locales:%=%/XLC_LOCALE) $(locales:%=%/Compose) EXTRA_DIST += $(nobase_x11locale_DATA:%=%.pre) CLEANFILES += $(nobase_x11locale_DATA) libX11-1.6.3/nls/iso8859-9e/XI18N_OBJS000064401431060000012000000005261247741723500166670ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for iso8859-9e locale # XLC common/xlcDef _XlcDefaultLoader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/iso8859-9e/XLC_LOCALE.pre000064401431060000012000000021511247741723500174710ustar00alancstaff00002660200006XCOMM XLocale Database Sample for iso8859-9e. XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class fs0 { charset { name ISO8859-1:GL } font { primary ISO8859-9E:GL substitute ISO8859-1:GL vertical_rotate all } } XCOMM fs1 class fs1 { charset { name ISO8859-9E:GR } font { primary ISO8859-9E:GR } } END XLC_FONTSET XCOMM XCOMM XLC_CHARSET_DEFINE category XCOMM XLC_CHARSET_DEFINE csd0 { charset_name ISO8859-9E side GR length 1 string_encoding False sequence \x1b%/1 } END XLC_CHARSET_DEFINE XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name ISO8859-9E mb_cur_max 1 state_depend_encoding False #if WCHAR32 wc_encoding_mask \x30000000 wc_shift_bits 7 #else wc_encoding_mask \x00008080 wc_shift_bits 8 #endif use_stdc_env True force_convert_to_mb True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding ISO8859-9E:GL; ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 #if WCHAR32 wc_encoding \x30000000 #else wc_encoding \x00008080 #endif ct_encoding ISO8859-9E:GR } END XLC_XLOCALE libX11-1.6.3/nls/iso8859-9e/Compose.pre000064401431060000012000000535131247741723500174410ustar00alancstaff00002660200006XCOMM XCOMM ISO 8859-9e (Latin??) Compose Sequence XCOMM XCOMM Sequence Definition XCOMM XCOMM XCOMM Means XCOMM Special Character : "#" numbersign : "'" apostrophe : "'" apostrophe : "[" bracketleft : "\\" backslash : "\\" backslash : "\\" backslash : "]" bracketright : "^" asciicircum : "^" asciicircum : "^" asciicircum : "^" asciicircum : "`" grave : "`" grave : "{" braceleft : "{" braceleft : "|" bar : "|" bar : "|" bar : "|" bar : "|" bar : "|" bar : "}" braceright : "}" braceright : "~" asciitilde : "~" asciitilde : "~" asciitilde : "~" asciitilde : "\241" exclamdown : "\242" cent : "\242" cent : "\242" cent : "\242" cent : "\242" cent : "\242" cent : "\242" cent : "\242" cent : "\243" sterling : "\243" sterling : "\243" sterling : "\243" sterling : "\243" sterling : "\243" sterling : "\243" sterling : "\243" sterling : "\244" EuroSign : "\244" EuroSign : "\244" EuroSign : "\244" EuroSign : "\244" EuroSign : "\244" EuroSign : "\244" EuroSign : "\244" EuroSign : "\245" yen : "\245" yen : "\245" yen : "\245" yen : "\245" yen : "\245" yen : "\245" yen : "\245" yen : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section <0> : "\247" section <0> : "\247" section <0> : "\247" section <0> : "\247" section : "\251" copyright : "\251" copyright : "\251" copyright : "\251" copyright : "\251" copyright : "\251" copyright : "\251" copyright : "\251" copyright <0> : "\251" copyright <0> : "\251" copyright <0> : "\251" copyright <0> : "\251" copyright : "\251" copyright : "\252" ordfeminine : "\252" ordfeminine : "\252" ordfeminine : "\252" ordfeminine : "\272" masculine : "\272" masculine : "\272" masculine : "\272" masculine : "\253" guillemotleft : "\273" guillemotright <0> : "\260" degree <0> : "\260" degree <0> : "\260" degree <0> : "\260" degree : "\261" plusminus : "\261" plusminus : "\265" mu : "\265" mu : "\265" mu : "\265" mu <1> : "\271" onesuperior <1> : "\271" onesuperior <1> : "\271" onesuperior <1> : "\271" onesuperior <1> : "\271" onesuperior <1> : "\271" onesuperior <2> : "\262" twosuperior <2> : "\262" twosuperior <2> : "\262" twosuperior <2> : "\262" twosuperior <2> : "\262" twosuperior <2> : "\262" twosuperior <3> : "\263" threesuperior <3> : "\263" threesuperior <3> : "\263" threesuperior <3> : "\263" threesuperior <3> : "\263" threesuperior <3> : "\263" threesuperior

: "\266" paragraph

: "\266" paragraph

: "\266" paragraph

: "\266" paragraph : "\267" periodcentered : "\267" periodcentered : "\267" periodcentered : "\277" questiondown : "\240" nobreakspace : "\254" notsign : "\254" notsign : "\255" hyphen : "\256" registered : "\256" registered : "\256" registered : "\257" macron : "\257" macron : "\257" macron : "\257" macron : "\257" macron : "\367" division : "\367" division : "\327" multiply : "\264" acute : "\270" cedilla : "\250" diaeresis XCOMM Accented Alphabet : "\300" Agrave : "\300" Agrave : "\301" Aacute : "\301" Aacute : "\301" Aacute : "\301" Aacute : "\302" Acircumflex : "\302" Acircumflex : "\302" Acircumflex : "\302" Acircumflex : "\303" Atilde : "\303" Atilde : "\303" Atilde : "\303" Atilde : "\304" Adiaeresis : "\304" Adiaeresis : "\304" Adiaeresis : "\304" Adiaeresis : "\305" Aring : "\305" Aring : "\305" Aring : "\306" SCHWA : "\340" agrave : "\340" agrave : "\341" aacute : "\341" aacute : "\341" aacute : "\341" aacute : "\342" acircumflex : "\342" acircumflex : "\342" acircumflex : "\342" acircumflex : "\343" atilde : "\343" atilde : "\343" atilde : "\343" atilde : "\344" adiaeresis : "\344" adiaeresis : "\344" adiaeresis : "\344" adiaeresis : "\345" aring : "\345" aring : "\345" aring : "\346" schwa : "\307" Ccedilla : "\307" Ccedilla : "\307" Ccedilla : "\307" Ccedilla : "\347" ccedilla : "\347" ccedilla : "\347" ccedilla : "\347" ccedilla : "\320" ETH : "\320" ETH : "\360" eth : "\360" eth : "\310" Egrave : "\310" Egrave : "\311" Eacute : "\311" Eacute : "\311" Eacute : "\311" Eacute : "\312" Ecircumflex : "\312" Ecircumflex : "\312" Ecircumflex : "\312" Ecircumflex : "\313" Ediaeresis : "\313" Ediaeresis : "\313" Ediaeresis : "\313" Ediaeresis : "\350" egrave : "\350" egrave : "\351" eacute : "\351" eacute : "\351" eacute : "\351" eacute : "\352" ecircumflex : "\352" ecircumflex : "\352" ecircumflex : "\352" ecircumflex : "\353" ediaeresis : "\353" ediaeresis : "\353" ediaeresis : "\353" ediaeresis : "\320" Gbreve : "\320" Gbreve : "\320" Gbreve : "\320" Gbreve : "\320" Gbreve : "\360" gbreve : "\360" gbreve : "\360" gbreve : "\360" gbreve : "\360" gbreve : "\314" Igrave : "\314" Igrave : "\315" Iacute : "\315" Iacute : "\315" Iacute : "\315" Iacute : "\316" Icircumflex : "\316" Icircumflex : "\316" Icircumflex : "\316" Icircumflex : "\317" Idiaeresis : "\317" Idiaeresis : "\317" Idiaeresis : "\317" Idiaeresis : "\335" Iabovedot : "\335" Iabovedot : "\354" igrave : "\354" igrave : "\355" iacute : "\355" iacute : "\355" iacute : "\355" iacute : "\356" icircumflex : "\356" icircumflex : "\356" icircumflex : "\356" icircumflex : "\357" idiaeresis : "\357" idiaeresis : "\357" idiaeresis : "\357" idiaeresis : "\375" idotless : "\375" idotless : "\321" Ntilde : "\321" Ntilde : "\321" Ntilde : "\321" Ntilde : "\361" ntilde : "\361" ntilde : "\361" ntilde : "\361" ntilde : "\322" Ograve : "\322" Ograve : "\323" Oacute : "\323" Oacute : "\323" Oacute : "\323" Oacute : "\324" Ocircumflex : "\324" Ocircumflex : "\324" Ocircumflex : "\324" Ocircumflex : "\325" Otilde : "\325" Otilde : "\325" Otilde : "\325" Otilde : "\326" Odiaeresis : "\326" Odiaeresis : "\326" Odiaeresis : "\326" Odiaeresis : "\330" Ooblique : "\330" Ooblique : "\274" OE : "\362" ograve : "\362" ograve : "\363" oacute : "\363" oacute : "\363" oacute : "\363" oacute : "\364" ocircumflex : "\364" ocircumflex : "\364" ocircumflex : "\364" ocircumflex : "\365" otilde : "\365" otilde : "\365" otilde : "\365" otilde : "\366" odiaeresis : "\366" odiaeresis : "\366" odiaeresis : "\366" odiaeresis : "\370" oslash : "\370" oslash : "\336" Scedilla : "\336" Scedilla : "\336" Scedilla : "\376" scedilla : "\336" Scedilla : "\376" scedilla : "\376" scedilla : "\376" scedilla : "\331" Ugrave : "\331" Ugrave : "\332" Uacute : "\332" Uacute : "\332" Uacute : "\332" Uacute : "\333" Ucircumflex : "\333" Ucircumflex : "\333" Ucircumflex : "\333" Ucircumflex : "\334" Udiaeresis : "\334" Udiaeresis : "\334" Udiaeresis : "\334" Udiaeresis : "\371" ugrave : "\371" ugrave : "\372" uacute : "\372" uacute : "\372" uacute : "\372" uacute : "\373" ucircumflex : "\373" ucircumflex : "\373" ucircumflex : "\373" ucircumflex : "\374" udiaeresis : "\374" udiaeresis : "\374" udiaeresis : "\374" udiaeresis : "\337" ssharp : "\336" THORN : "\376" thorn : "\327" Yacute : "\327" Yacute : "\327" Yacute : "\327" Yacute : "\276" Ydiaeresis : "\276" Ydiaeresis : "\276" Ydiaeresis : "\276" Ydiaeresis : "\367" yacute : "\367" yacute : "\367" yacute : "\367" yacute : "\377" ydiaeresis : "\377" ydiaeresis : "\377" ydiaeresis : "\377" ydiaeresis : "\241" Zcaron : "\241" Zcaron : "\261" zcaron : "\261" zcaron : "\241" Zcaron : "\261" zcaron : "\252" Gcaron : "\252" Gcaron : "\272" gcaron : "\272" gcaron : "\252" Gcaron : "\272" gcaron : "\264" Ocaron : "\264" Ocaron : "\275" ocaron : "\275" ocaron : "\264" Ocaron : "\275" ocaron XCOMM XCOMM dead key accent keysyms XCOMM Special Character : "|" bar : "`" grave : "'" apostrophe : "\250" diaeresis : "^" asciicircum : "~" asciitilde <0> : "\260" degree <1> : "\271" onesuperior <2> : "\262" twosuperior <3> : "\263" threesuperior : "\267" periodcentered : "\254" notsign : "\257" macron : "\257" macron : "\264" acute : "\270" cedilla : "\250" diaeresis XCOMM Accented Alphabet : "\305" Aring : "\345" aring : "\300" Agrave : "\301" Aacute : "\302" Acircumflex : "\303" Atilde : "\304" Adiaeresis : "\340" agrave : "\341" aacute : "\342" acircumflex : "\343" atilde : "\344" adiaeresis : "\307" Ccedilla : "\347" ccedilla : "\310" Egrave : "\311" Eacute : "\312" Ecircumflex : "\313" Ediaeresis : "\350" egrave : "\351" eacute : "\352" ecircumflex : "\353" ediaeresis : "\320" Gbreve : "\360" gbreve : "\335" Iabovedot : "\314" Igrave : "\315" Iacute : "\316" Icircumflex : "\317" Idiaeresis : "\375" idotless : "\354" igrave : "\355" iacute : "\356" icircumflex : "\357" idiaeresis : "\321" Ntilde : "\361" ntilde : "\322" Ograve : "\323" Oacute : "\324" Ocircumflex : "\325" Otilde : "\326" Odiaeresis : "\362" ograve : "\363" oacute : "\364" ocircumflex : "\365" otilde : "\366" odiaeresis : "\336" Scedilla : "\376" scedilla : "\331" Ugrave : "\332" Uacute : "\333" Ucircumflex : "\334" Udiaeresis : "\371" ugrave : "\372" uacute : "\373" ucircumflex : "\374" udiaeresis : "\327" Yacute : "\276" Ydiaeresis : "\367" yacute : "\377" ydiaeresis : "\241" Zcaron : "\261" zcaron : "\252" Gcaron : "\272" gcaron XCOMM End of Sequence Definition > : "\317" Idiaeresis : "\335" Iabovedot : "\335" Iabovedot Means XCOMM Special Character : "#" numbersign : "'" apostrophe : "'" apostrophe : "@" at : "[" bracketleft : "\\" backslash : "\\" backslash : "\\" backslash : "]" bracketright : "^" asciicircum : "^" asciicircum : "^" asciicircum : "^" asciicircum : "`" grave : "`" grave : "{" braceleft : "{" braceleft : "|" bar : "|" bar : "|" bar : "|" bar : "|" bar : "|" bar : "}" braceright : "}" braceright : "~" asciitilde : "~" asciitilde : "~" asciitilde : "~" asciitilde : "\241" exclamdown : "\242" cent : "\242" cent : "\242" cent : "\242" cent : "\242" cent : "\242" cent : "\242" cent : "\242" cent : "\243" sterling : "\243" sterling : "\243" sterling : "\243" sterling : "\243" sterling : "\243" sterling : "\243" sterling : "\243" sterling : "\244" EuroSign : "\244" EuroSign : "\244" EuroSign : "\244" EuroSign : "\244" EuroSign : "\244" EuroSign : "\244" EuroSign : "\244" EuroSign : "\245" yen : "\245" yen : "\245" yen : "\245" yen : "\245" yen : "\245" yen : "\245" yen : "\245" yen : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section <0> : "\247" section <0> : "\247" section <0> : "\247" section <0> : "\247" section : "\251" copyright : "\251" copyright : "\251" copyright : "\251" copyright : "\251" copyright : "\251" copyright : "\251" copyright : "\251" copyright <0> : "\251" copyright <0> : "\251" copyright <0> : "\251" copyright <0> : "\251" copyright : "\251" copyright : "\251" copyright : "\252" ordfeminine : "\252" ordfeminine : "\252" ordfeminine : "\252" ordfeminine : "\272" masculine : "\272" masculine : "\272" masculine : "\272" masculine : "\253" guillemotleft : "\273" guillemotright <0> : "\260" degree <0> : "\260" degree <0> : "\260" degree <0> : "\260" degree : "\261" plusminus : "\261" plusminus : "\265" mu : "\265" mu : "\265" mu : "\265" mu <1> : "\271" onesuperior <1> : "\271" onesuperior <1> : "\271" onesuperior <1> : "\271" onesuperior <1> : "\271" onesuperior <1> : "\271" onesuperior <2> : "\262" twosuperior <2> : "\262" twosuperior <2> : "\262" twosuperior <2> : "\262" twosuperior <2> : "\262" twosuperior <2> : "\262" twosuperior <3> : "\263" threesuperior <3> : "\263" threesuperior <3> : "\263" threesuperior <3> : "\263" threesuperior <3> : "\263" threesuperior <3> : "\263" threesuperior

: "\266" paragraph

: "\266" paragraph

: "\266" paragraph

: "\266" paragraph : "\267" periodcentered : "\267" periodcentered : "\267" periodcentered : "\277" questiondown : "\240" nobreakspace : "\254" notsign : "\254" notsign : "\255" hyphen : "\256" registered : "\256" registered : "\256" registered : "\257" macron : "\257" macron : "\257" macron : "\257" macron : "\257" macron : "\367" division : "\367" division : "\327" multiply : "\264" acute : "\270" cedilla : "\"" quotedbl XCOMM Accented Alphabet : "\300" Agrave : "\300" Agrave : "\301" Aacute : "\301" Aacute : "\301" Aacute : "\301" Aacute : "\302" Acircumflex : "\302" Acircumflex : "\302" Acircumflex : "\302" Acircumflex : "\303" Atilde : "\303" Atilde : "\303" Atilde : "\303" Atilde : "\304" Adiaeresis : "\304" Adiaeresis : "\304" Adiaeresis : "\304" Adiaeresis : "\305" Aring : "\305" Aring : "\305" Aring : "\305" Aring : "\306" AE : "\340" agrave : "\340" agrave : "\341" aacute : "\341" aacute : "\341" aacute : "\341" aacute : "\342" acircumflex : "\342" acircumflex : "\342" acircumflex : "\342" acircumflex : "\343" atilde : "\343" atilde : "\343" atilde : "\343" atilde : "\344" adiaeresis : "\344" adiaeresis : "\344" adiaeresis : "\344" adiaeresis : "\345" aring : "\345" aring : "\345" aring : "\345" aring : "\346" ae : "\307" Ccedilla : "\347" ccedilla : "\307" Ccedilla : "\307" Ccedilla : "\307" Ccedilla : "\307" Ccedilla : "\347" ccedilla : "\347" ccedilla : "\347" ccedilla : "\347" ccedilla : "\320" ETH : "\320" ETH : "\360" eth : "\360" eth : "\310" Egrave : "\310" Egrave : "\311" Eacute : "\311" Eacute : "\311" Eacute : "\311" Eacute : "\312" Ecircumflex : "\312" Ecircumflex : "\312" Ecircumflex : "\312" Ecircumflex : "\313" Ediaeresis : "\313" Ediaeresis : "\313" Ediaeresis : "\313" Ediaeresis : "\350" egrave : "\350" egrave : "\351" eacute : "\351" eacute : "\351" eacute : "\351" eacute : "\352" ecircumflex : "\352" ecircumflex : "\352" ecircumflex : "\352" ecircumflex : "\353" ediaeresis : "\353" ediaeresis : "\353" ediaeresis : "\353" ediaeresis : "\314" Igrave : "\314" Igrave : "\315" Iacute : "\315" Iacute : "\315" Iacute : "\315" Iacute : "\316" Icircumflex : "\316" Icircumflex : "\316" Icircumflex : "\316" Icircumflex : "\317" Idiaeresis : "\317" Idiaeresis : "\317" Idiaeresis : "\317" Idiaeresis : "\354" igrave : "\354" igrave : "\355" iacute : "\355" iacute : "\355" iacute : "\355" iacute : "\356" icircumflex : "\356" icircumflex : "\356" icircumflex : "\356" icircumflex : "\357" idiaeresis : "\357" idiaeresis : "\357" idiaeresis : "\357" idiaeresis : "\321" Ntilde : "\321" Ntilde : "\321" Ntilde : "\321" Ntilde : "\361" ntilde : "\361" ntilde : "\361" ntilde : "\361" ntilde : "\322" Ograve : "\322" Ograve : "\323" Oacute : "\323" Oacute : "\323" Oacute : "\323" Oacute : "\324" Ocircumflex : "\324" Ocircumflex : "\324" Ocircumflex : "\324" Ocircumflex : "\325" Otilde : "\325" Otilde : "\325" Otilde : "\325" Otilde : "\326" Odiaeresis : "\326" Odiaeresis : "\326" Odiaeresis : "\326" Odiaeresis : "\330" Ooblique : "\330" Ooblique : "\274" OE : "\362" ograve : "\362" ograve : "\363" oacute : "\363" oacute : "\363" oacute : "\363" oacute : "\364" ocircumflex : "\364" ocircumflex : "\364" ocircumflex : "\364" ocircumflex : "\365" otilde : "\365" otilde : "\365" otilde : "\365" otilde : "\366" odiaeresis : "\366" odiaeresis : "\366" odiaeresis : "\366" odiaeresis : "\370" oslash : "\370" oslash : "\275" oe : "\246" Scaron : "\246" Scaron : "\250" scaron : "\250" scaron : "\331" Ugrave : "\331" Ugrave : "\332" Uacute : "\332" Uacute : "\332" Uacute : "\332" Uacute : "\333" Ucircumflex : "\333" Ucircumflex : "\333" Ucircumflex : "\333" Ucircumflex : "\334" Udiaeresis : "\334" Udiaeresis : "\334" Udiaeresis : "\334" Udiaeresis : "\371" ugrave : "\371" ugrave : "\372" uacute : "\372" uacute : "\372" uacute : "\372" uacute : "\373" ucircumflex : "\373" ucircumflex : "\373" ucircumflex : "\373" ucircumflex : "\374" udiaeresis : "\374" udiaeresis : "\374" udiaeresis : "\374" udiaeresis : "\337" ssharp : "\336" THORN : "\376" thorn : "\335" Yacute : "\335" Yacute : "\335" Yacute : "\335" Yacute : "\276" Ydiaeresis : "\276" Ydiaeresis : "\276" Ydiaeresis : "\276" Ydiaeresis : "\375" yacute : "\375" yacute : "\375" yacute : "\375" yacute : "\377" ydiaeresis : "\377" ydiaeresis : "\377" ydiaeresis : "\377" ydiaeresis : "\264" Zcaron : "\264" Zcaron : "\270" zcaron : "\270" zcaron XCOMM XCOMM dead key accent keysyms XCOMM Special Character : "|" bar : "^" asciicircum : "^" asciicircum : "~" asciitilde : "~" asciitilde : "`" grave : "`" grave XCOMM These are for us_intl, that does not have diaeresis, etc : "'" apostrophe : "\264" acute : "\"" quotedbl : "\"" quotedbl : "\"" quotedbl <0> : "\260" degree <1> : "\271" onesuperior <2> : "\262" twosuperior <3> : "\263" threesuperior : "\267" periodcentered : "\254" notsign : "\257" macron : "\257" macron : "\264" acute : "\270" cedilla : "\"" quotedbl XCOMM Accented Alphabet : "\305" Aring : "\300" Agrave : "\301" Aacute : "\302" Acircumflex : "\303" Atilde : "\304" Adiaeresis : "\345" aring : "\340" agrave : "\341" aacute : "\342" acircumflex : "\343" atilde : "\344" adiaeresis : "\307" Ccedilla : "\347" ccedilla : "\310" Egrave : "\311" Eacute : "\312" Ecircumflex : "\313" Ediaeresis : "\350" egrave : "\351" eacute : "\352" ecircumflex : "\353" ediaeresis : "\314" Igrave : "\315" Iacute : "\316" Icircumflex : "\317" Idiaeresis : "\354" igrave : "\355" iacute : "\356" icircumflex : "\357" idiaeresis : "\321" Ntilde : "\361" ntilde : "\322" Ograve : "\323" Oacute : "\324" Ocircumflex : "\325" Otilde : "\326" Odiaeresis : "\362" ograve : "\363" oacute : "\364" ocircumflex : "\365" otilde : "\366" odiaeresis : "\246" Scaron : "\250" scaron : "\246" Scaron : "\250" scaron : "\331" Ugrave : "\332" Uacute : "\333" Ucircumflex : "\334" Udiaeresis : "\371" ugrave : "\372" uacute : "\373" ucircumflex : "\374" udiaeresis : "\335" Yacute : "\276" Ydiaeresis : "\375" yacute : "\377" ydiaeresis : "\264" Zcaron : "\270" zcaron : "\264" Zcaron : "\270" zcaron XCOMM Useful for portuguese language : "\307" Ccedilla : "\347" ccedilla XCOMM End of Sequence Definition 351" eacute : "\351" eacute : "\351" eacute : "\352" ecircumflex : "\352" ecircumflex : "\352" ecircumflex : "\352" ecircumflexlibX11-1.6.3/nls/iso8859-15/XI18N_OBJS000064401431060000012000000005261247741723500165770ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for iso8859-15 locale # XLC common/xlcDef _XlcDefaultLoader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/georgian-ps/Compose.pre000064401431060000012000000005511247741723500202030ustar00alancstaff00002660200006XCOMM XCOMM georgian-ps Compose Sequence XCOMM XCOMM Sequence Definition XCOMM XCOMM XCOMM This file currently has no entries. It appears that a compose file (even XCOMM just an empty one) is required for the appropriate keysyms to work for XCOMM this encoding. XCOMM XCOMM Means XCOMM Special Character XCOMM End of Sequence Definition libX11-1.6.3/nls/georgian-ps/XI18N_OBJS000064401431060000012000000005271247741723500174400ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for georgian-ps locale # XLC common/xlcDef _XlcDefaultLoader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/georgian-ps/XLC_LOCALE.pre000064401431060000012000000021271247741723500202440ustar00alancstaff00002660200006XCOMM XLocale Database Sample for georgian-ps XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class (7 bit ASCII) fs0 { charset { name ISO8859-1:GL } font { primary GEORGIAN-PS:GL substitute ISO8859-1:GL } } XCOMM fs1 class fs1 { charset GEORGIAN-PS:GR font GEORGIAN-PS:GR } END XLC_FONTSET XCOMM XCOMM XLC_CHARSET_DEFINE category XCOMM XLC_CHARSET_DEFINE csd0 { charset_name GEORGIAN-PS side GR length 1 string_encoding False sequence \x1b%/1 } END XLC_CHARSET_DEFINE XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name GEORGIAN-PS mb_cur_max 1 state_depend_encoding False #if WCHAR32 wc_encoding_mask \x30000000 wc_shift_bits 7 #else wc_encoding_mask \x00008080 wc_shift_bits 8 #endif use_stdc_env True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding GEORGIAN-PS:GL; ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 #if WCHAR32 wc_encoding \x30000000 #else wc_encoding \x00008080 #endif ct_encoding GEORGIAN-PS:GR } END XLC_XLOCALE libX11-1.6.3/nls/zh_HK.big5/XI18N_OBJS000064401431060000012000000005301247741723500170470ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for zh_HK.big5 locale # XLC common/xlibi18n _XlcGenericLoader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/zh_HK.big5/XLC_LOCALE.pre000064401431060000012000000021421247741723500176560ustar00alancstaff00002660200006XCOMM XCOMM (c) 1996, X11R6 L10N for Taiwan and Big5 Encoding Project XCOMM XCOMM modified for X11R6.3 by Hung-Chi Chu 1998/01/10 XCOMM XCOMM XLC_FONTSET category XCOMM XCOMM XLC_FONTSET XCOMM fs0 class (7 bit ASCII) fs0 { charset { name ISO8859-1:GL } font { primary ISO8859-1:GL vertical_rotate all } } XCOMM fs1 class fs1 { charset { name BIG5-0:GLGR } font { primary BIG5-0:GLGR substitute BIG5-0:GLGR } } END XLC_FONTSET XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name zh_HK.Big5 mb_cur_max 2 state_depend_encoding False wc_encoding_mask \x00008000 wc_shift_bits 8 use_stdc_env True force_convert_to_mb True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding ISO8859-1:GL } XCOMM cs1 class cs1 { side none length 2 byte1 \xa1,\xf9 byte2 \x40,\x7e;\xa1,\xfe wc_encoding \x00008000 ct_encoding BIG5-0:GLGR:\x1b\x25\x2f\x32\x80\x89\x42\x49\x47\x35\x2d\x30\x02 mb_conversion [\xa140,\xf9fe]->\x2140 ct_conversion [\x2140,\x79fe]->\xa140 } END XLC_XLOCALE libX11-1.6.3/nls/zh_HK.big5/Compose.pre000064401431060000012000000005421247741723500176200ustar00alancstaff00002660200006XCOMM XCOMM zh_HK.big5 Compose Sequence XCOMM XCOMM Sequence Definition XCOMM XCOMM This file currently has no entries. It appears that a compose file (even XCOMM just an empty one) is required for the appropriate keysyms to work for XCOMM this encoding. XCOMM XCOMM Means XCOMM Special Character XCOMM End of Sequence Definition libX11-1.6.3/nls/iso8859-11/XI18N_OBJS000064401431060000012000000005301247741723500165660ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for iso8859-11 locale # # XLC common/xlcDef _XlcDefaultLoader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/iso8859-11/XLC_LOCALE.pre000064401431060000012000000016611247741723500174020ustar00alancstaff00002660200006XCOMM XLocale Database Sample for iso8859-11. XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class fs0 { charset { name ISO8859-1:GL } font { primary ISO8859-11:GL substitute ISO8859-1:GL vertical_rotate all } } XCOMM fs1 class fs1 { charset { name ISO8859-11:GR } font { primary ISO8859-11:GR } } END XLC_FONTSET XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name ISO8859-11 mb_cur_max 1 state_depend_encoding False #if WCHAR32 wc_encoding_mask \x30000000 wc_shift_bits 7 #else wc_encoding_mask \x00008080 wc_shift_bits 8 #endif use_stdc_env True force_convert_to_mb True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding ISO8859-11:GL; ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 #if WCHAR32 wc_encoding \x30000000 #else wc_encoding \x00008080 #endif ct_encoding ISO8859-11:GR } END XLC_XLOCALE libX11-1.6.3/nls/iso8859-11/Compose.pre000064401431060000012000000000001247741723500173240ustar00alancstaff00002660200006libX11-1.6.3/nls/en_US.UTF-8/Compose.pre000064401431060000012000021243421247741723500176120ustar00alancstaff00002660200006XCOMM UTF-8 (Unicode) compose sequence XCOMM David.Monniaux@ens.fr XCOMM XCOMM Part 1 - Manual definitions XCOMM Spacing versions of dead accents : "~" asciitilde # TILDE : "~" asciitilde # TILDE : "'" apostrophe # APOSTROPHE : "´" acute # ACUTE ACCENT : "´" acute # ACUTE ACCENT : "`" grave # GRAVE ACCENT : "`" grave # GRAVE ACCENT : "^" asciicircum # CIRCUMFLEX ACCENT : "^" asciicircum # CIRCUMFLEX ACCENT : "°" degree # DEGREE SIGN : "°" degree # DEGREE SIGN : "¯" macron # MACRON : "¯" macron # MACRON : "¯" macron # MACRON : "¯" macron # MACRON : "¯" macron # MACRON : "¯" macron # MACRON : "˘" breve # BREVE : "˘" breve # BREVE : "˘" breve # BREVE : "˘" breve # BREVE : "˙" abovedot # DOT ABOVE : "˙" abovedot # DOT ABOVE : "¨" diaeresis # DIAERESIS : "¨" diaeresis # DIAERESIS : "\"" quotedbl # REVERSE SOLIDUS : "˝" U2dd # DOUBLE ACUTE ACCENT : "˝" U2dd # DOUBLE ACUTE ACCENT : "ˇ" caron # CARON : "ˇ" caron # CARON : "ˇ" caron # CARON : "ˇ" caron # CARON : "¸" cedilla # CEDILLA : "¸" cedilla # CEDILLA : "˛" ogonek # OGONEK : "˛" ogonek # OGONEK : "ͺ" U37a # GREEK YPOGEGRAMMENI : "ͺ" U37a # GREEK YPOGEGRAMMENI : "­" U00ad # SOFT HYPHEN XCOMM ASCII characters that may be difficult to access XCOMM on some keyboards. : "#" numbersign # NUMBER SIGN : "'" apostrophe # APOSTROPHE : "'" apostrophe # APOSTROPHE : "@" at # COMMERCIAL AT : "[" bracketleft # LEFT SQUARE BRACKET : "\\" backslash # REVERSE SOLIDUS : "\\" backslash # REVERSE SOLIDUS : "\\" backslash # REVERSE SOLIDUS : "]" bracketright # RIGHT SQUARE BRACKET : "^" asciicircum # CIRCUMFLEX ACCENT : "^" asciicircum # CIRCUMFLEX ACCENT : "^" asciicircum # CIRCUMFLEX ACCENT : "^" asciicircum # CIRCUMFLEX ACCENT : "`" grave # GRAVE ACCENT : "`" grave # GRAVE ACCENT : "¸" cedilla # CEDILLA : "¸" cedilla # CEDILLA : "¸" cedilla # CEDILLA : "{" braceleft # LEFT CURLY BRACKET : "{" braceleft # LEFT CURLY BRACKET : "|" bar # VERTICAL LINE : "|" bar # VERTICAL LINE : "|" bar # VERTICAL LINE : "|" bar # VERTICAL LINE : "|" bar # VERTICAL LINE : "|" bar # VERTICAL LINE : "}" braceright # RIGHT CURLY BRACKET : "}" braceright # RIGHT CURLY BRACKET : "~" asciitilde # TILDE : "~" asciitilde # TILDE : "~" asciitilde # TILDE : "~" asciitilde # TILDE XCOMM Spaces : " " nobreakspace # NO-BREAK SPACE : " " U2008 # PUNCTUATION SPACE : "©" copyright # COPYRIGHT SIGN : "©" copyright # COPYRIGHT SIGN : "©" copyright # COPYRIGHT SIGN : "©" copyright # COPYRIGHT SIGN : "©" copyright # COPYRIGHT SIGN : "©" copyright # COPYRIGHT SIGN : "®" registered # REGISTERED SIGN : "®" registered # REGISTERED SIGN : "®" registered # REGISTERED SIGN : "®" registered # REGISTERED SIGN : "®" registered # REGISTERED SIGN : "®" registered # REGISTERED SIGN : "›" U203a # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK : "‹" U2039 # SINGLE LEFT-POINTING ANGLE QUOTATION MARK : "…" ellipsis # HORIZONTAL ELLIPSIS : "·" periodcentered # MIDDLE DOT : "·" periodcentered # MIDDLE DOT : "·" periodcentered # MIDDLE DOT : "•" enfilledcircbullet # BULLET : "¦" brokenbar # BROKEN BAR : "¡" exclamdown # INVERTED EXCLAMATION MARK

: "¶" paragraph # PILCROW SIGN

: "¶" paragraph # PILCROW SIGN : "±" plusminus # PLUS-MINUS SIGN : "±" plusminus # PLUS-MINUS SIGN : "¿" questiondown # INVERTED QUESTION MARK : "ß" ssharp # LATIN SMALL LETTER SHARP S : "ẞ" U1e9e # LATIN CAPITAL LETTER SHARP S : "œ" oe # LATIN SMALL LIGATURE OE : "Œ" OE # LATIN CAPITAL LIGATURE OE : "æ" ae # LATIN SMALL LETTER AE : "Æ" AE # LATIN CAPITAL LETTER AE : "ff" Ufb00 # LATIN SMALL LIGATURE FF : "fi" Ufb01 # LATIN SMALL LIGATURE FI : "fl" Ufb02 # LATIN SMALL LIGATURE FL : "ffi" Ufb03 # LATIN SMALL LIGATURE FFI : "ffl" Ufb04 # LATIN SMALL LIGATURE FFL : "IJ" U0132 # LATIN CAPITAL LIGATURE IJ : "IJ" U0132 # LATIN CAPITAL LIGATURE IJ : "ij" U0133 # LATIN SMALL LIGATURE IJ : "°" degree # DEGREE SIGN <0> : "°" degree # DEGREE SIGN <0> : "°" degree # DEGREE SIGN XCOMM Quotation marks : "«" guillemotleft # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK : "»" guillemotright # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK : "‘" U2018 # LEFT SINGLE QUOTATION MARK : "‘" U2018 # LEFT SINGLE QUOTATION MARK : "’" U2019 # RIGHT SINGLE QUOTATION MARK : "’" U2019 # RIGHT SINGLE QUOTATION MARK : "‚" U201a # SINGLE LOW-9 QUOTATION MARK : "‚" U201a # SINGLE LOW-9 QUOTATION MARK : "“" U201c # LEFT DOUBLE QUOTATION MARK : "“" U201c # LEFT DOUBLE QUOTATION MARK : "”" U201d # RIGHT DOUBLE QUOTATION MARK : "”" U201d # RIGHT DOUBLE QUOTATION MARK : "„" U201e # DOUBLE LOW-9 QUOTATION MARK : "„" U201e # DOUBLE LOW-9 QUOTATION MARK XCOMM Per xxx : "‰" U2030 # PER MILLE SIGN XCOMM Currencies : "₠" U20a0 # EURO-CURRENCY SIGN : "₡" U20a1 # COLON SIGN : "₡" U20a1 # COLON SIGN : "₢" U20a2 # CRUZEIRO SIGN : "₣" U20a3 # FRENCH FRANC SIGN : "₤" U20a4 # LIRA SIGN : "₤" U20a4 # LIRA SIGN : "₥" U20a5 # MILL SIGN : "₥" U20a5 # MILL SIGN : "₦" U20a6 # NAIRA SIGN : "₦" U20a6 # NAIRA SIGN

: "₧" U20a7 # PESETA SIGN : "₨" U20a8 # RUPEE SIGN : "₩" U20a9 # WON SIGN : "₩" U20a9 # WON SIGN XCOMM "₪" U20aa NEW SHEQEL SIGN : "₫" U20ab # DONG SIGN : "₫" U20ab # DONG SIGN : "€" EuroSign # EURO SIGN : "€" EuroSign # EURO SIGN : "€" EuroSign # EURO SIGN : "€" EuroSign # EURO SIGN : "€" EuroSign # EURO SIGN : "€" EuroSign # EURO SIGN : "€" EuroSign # EURO SIGN : "€" EuroSign # EURO SIGN : "€" EuroSign # EURO SIGN : "€" EuroSign # EURO SIGN : "€" EuroSign # EURO SIGN : "€" EuroSign # EURO SIGN XCOMM "₭" U20ad KIP SIGN XCOMM "₮" U20ae TUGRIK SIGN XCOMM "₯" U20af DRACHMA SIGN XCOMM "₰" U20b0 GERMAN PENNY SIGN XCOMM "₱" U20b1 PESO SIGN XCOMM "₲" U20b2 GUARANI SIGN XCOMM "₳" U20b3 AUSTRAL SIGN XCOMM "₴" U20b4 HRYVNIA SIGN XCOMM "₵" U20b5 CEDI SIGN : "₹" U20b9 # INDIAN RUPEE SIGN : "₹" U20b9 # INDIAN RUPEE SIGN : "₹" U20b9 # INDIAN RUPEE SIGN : "₹" U20b9 # INDIAN RUPEE SIGN : "¢" cent # CENT SIGN : "¢" cent # CENT SIGN : "¢" cent # CENT SIGN : "¢" cent # CENT SIGN : "¢" cent # CENT SIGN : "¢" cent # CENT SIGN : "£" sterling # POUND SIGN : "£" sterling # POUND SIGN : "£" sterling # POUND SIGN : "£" sterling # POUND SIGN : "¥" yen # YEN SIGN : "¥" yen # YEN SIGN : "¥" yen # YEN SIGN : "¥" yen # YEN SIGN : "¥" yen # YEN SIGN : "¥" yen # YEN SIGN : "¥" yen # YEN SIGN : "¥" yen # YEN SIGN XCOMM Long S : "ſ" U017f # LATIN SMALL LETTER LONG S : "ſ" U017f # LATIN SMALL LETTER LONG S : "ẛ" U1e9b # LATIN SMALL LETTER LONG S WITH DOT ABOVE : "ẛ" U1e9b # LATIN SMALL LETTER LONG S WITH DOT ABOVE XCOMM Dashes : "–" U2013 # EN DASH : "—" U2014 # EM DASH XCOMM Musical alterations : "♩" U2669 # QUARTER NOTE : "♪" U266a # EIGHTH NOTE : "♫" U266b # BEAMED EIGHTH NOTES : "♬" U266c # BEAMED SIXTEENTH NOTES : "♭" U266d # MUSIC FLAT SIGN : "♮" U266e # MUSIC NATURAL SIGN : "♯" U266f # MUSIC SHARP SIGN XCOMM Other symbols : "§" section # SECTION SIGN : "§" section # SECTION SIGN : "§" section # SECTION SIGN : "§" section # SECTION SIGN : "§" section # SECTION SIGN : "§" section # SECTION SIGN : "§" section # SECTION SIGN : "¤" currency # CURRENCY SIGN : "¤" currency # CURRENCY SIGN : "¤" currency # CURRENCY SIGN : "¤" currency # CURRENCY SIGN : "¤" currency # CURRENCY SIGN : "¤" currency # CURRENCY SIGN : "¤" currency # CURRENCY SIGN : "¤" currency # CURRENCY SIGN

: "¶" paragraph # PILCROW SIGN : "№" numerosign # NUMERO SIGN : "№" numerosign # NUMERO SIGN : "№" numerosign # NUMERO SIGN : "№" numerosign # NUMERO SIGN : "⸘" U2E18 # INVERTED INTERROBANG : "‽" U203D # INTERROBANG

: "☭" U262D # HAMMER AND SICKLE : "Ⓐ" U24B6 # CIRCLED LATIN CAPITAL LETTER A <3> : "♥" U2665 # BLACK HEART SUIT : "☺" U263A # WHITE SMILING FACE : "☹" U2639 # WHITE FROWNING FACE : "🖕" U1F595 # REVERSED HAND WITH MIDDLE FINGER EXTENDED

: "🖖" U1F596 # RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS XCOMM Part 2 XCOMM Compose map for Korean Hangul(Choseongul) Conjoining Jamos automatically XCOMM generated from UnicodeData-2.0.14.txt at XCOMM ftp://ftp.unicode.org/Public/2.0-Update/UnicodeData-2.0.14.txt XCOMM by Jungshik Shin 2002-10-17 XCOMM There are some conflicts among sequences, but I left them alone. XCOMM XCOMM group 1: cluster jamos made of three basic jamos /* The following block gets overridden by later shorter compositions * : "ᄢ" U1122 # HANGUL CHOSEONG PIEUP-SIOS-KIYEOK * : "ᄣ" U1123 # HANGUL CHOSEONG PIEUP-SIOS-TIKEUT * : "ᄤ" U1124 # HANGUL CHOSEONG PIEUP-SIOS-PIEUP * : "ᄥ" U1125 # HANGUL CHOSEONG PIEUP-SSANGSIOS * : "ᄦ" U1126 # HANGUL CHOSEONG PIEUP-SIOS-CIEUC * : "ᄬ" U112c # HANGUL CHOSEONG KAPYEOUNSSANGPIEUP * : "ᄳ" U1133 # HANGUL CHOSEONG SIOS-PIEUP-KIYEOK * : "ᄴ" U1134 # HANGUL CHOSEONG SIOS-SSANGSIOS * : "ᅫ" U116b # HANGUL JUNGSEONG WAE * : "ᅰ" U1170 # HANGUL JUNGSEONG WE * : "ᆋ" U118b # HANGUL JUNGSEONG U-EO-EU * : "ᇄ" U11c4 # HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK * : "ᇌ" U11cc # HANGUL JONGSEONG RIEUL-KIYEOK-SIOS * : "ᇏ" U11cf # HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH * : "ᇑ" U11d1 # HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK * : "ᇒ" U11d2 # HANGUL JONGSEONG RIEUL-MIEUM-SIOS * : "ᇓ" U11d3 # HANGUL JONGSEONG RIEUL-PIEUP-SIOS * : "ᇔ" U11d4 # HANGUL JONGSEONG RIEUL-PIEUP-HIEUH * : "ᇕ" U11d5 # HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP * : "ᇖ" U11d6 # HANGUL JONGSEONG RIEUL-SSANGSIOS * : "ᇞ" U11de # HANGUL JONGSEONG MIEUM-SSANGSIOS * : "ᇭ" U11ed # HANGUL JONGSEONG IEUNG-SSANGKIYEOK */ : "ᄁ" U1101 # HANGUL CHOSEONG SSANGKIYEOK : "ᄄ" U1104 # HANGUL CHOSEONG SSANGTIKEUT : "ᄈ" U1108 # HANGUL CHOSEONG SSANGPIEUP : "ᄊ" U110a # HANGUL CHOSEONG SSANGSIOS : "ᄍ" U110d # HANGUL CHOSEONG SSANGCIEUC : "ᄓ" U1113 # HANGUL CHOSEONG NIEUN-KIYEOK : "ᄔ" U1114 # HANGUL CHOSEONG SSANGNIEUN : "ᄕ" U1115 # HANGUL CHOSEONG NIEUN-TIKEUT : "ᄖ" U1116 # HANGUL CHOSEONG NIEUN-PIEUP : "ᄗ" U1117 # HANGUL CHOSEONG TIKEUT-KIYEOK : "ᄘ" U1118 # HANGUL CHOSEONG RIEUL-NIEUN : "ᄙ" U1119 # HANGUL CHOSEONG SSANGRIEUL : "ᄚ" U111a # HANGUL CHOSEONG RIEUL-HIEUH : "ᄛ" U111b # HANGUL CHOSEONG KAPYEOUNRIEUL : "ᄜ" U111c # HANGUL CHOSEONG MIEUM-PIEUP : "ᄝ" U111d # HANGUL CHOSEONG KAPYEOUNMIEUM : "ᄞ" U111e # HANGUL CHOSEONG PIEUP-KIYEOK : "ᄟ" U111f # HANGUL CHOSEONG PIEUP-NIEUN : "ᄠ" U1120 # HANGUL CHOSEONG PIEUP-TIKEUT : "ᄡ" U1121 # HANGUL CHOSEONG PIEUP-SIOS : "ᄧ" U1127 # HANGUL CHOSEONG PIEUP-CIEUC : "ᄨ" U1128 # HANGUL CHOSEONG PIEUP-CHIEUCH : "ᄩ" U1129 # HANGUL CHOSEONG PIEUP-THIEUTH : "ᄪ" U112a # HANGUL CHOSEONG PIEUP-PHIEUPH : "ᄫ" U112b # HANGUL CHOSEONG KAPYEOUNPIEUP : "ᄭ" U112d # HANGUL CHOSEONG SIOS-KIYEOK : "ᄮ" U112e # HANGUL CHOSEONG SIOS-NIEUN : "ᄯ" U112f # HANGUL CHOSEONG SIOS-TIKEUT : "ᄰ" U1130 # HANGUL CHOSEONG SIOS-RIEUL : "ᄱ" U1131 # HANGUL CHOSEONG SIOS-MIEUM : "ᄲ" U1132 # HANGUL CHOSEONG SIOS-PIEUP : "ᄵ" U1135 # HANGUL CHOSEONG SIOS-IEUNG : "ᄶ" U1136 # HANGUL CHOSEONG SIOS-CIEUC : "ᄷ" U1137 # HANGUL CHOSEONG SIOS-CHIEUCH : "ᄸ" U1138 # HANGUL CHOSEONG SIOS-KHIEUKH : "ᄹ" U1139 # HANGUL CHOSEONG SIOS-THIEUTH : "ᄺ" U113a # HANGUL CHOSEONG SIOS-PHIEUPH : "ᄻ" U113b # HANGUL CHOSEONG SIOS-HIEUH : "ᄽ" U113d # HANGUL CHOSEONG CHITUEUMSSANGSIOS : "ᄿ" U113f # HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS : "ᅁ" U1141 # HANGUL CHOSEONG IEUNG-KIYEOK : "ᅂ" U1142 # HANGUL CHOSEONG IEUNG-TIKEUT : "ᅃ" U1143 # HANGUL CHOSEONG IEUNG-MIEUM : "ᅄ" U1144 # HANGUL CHOSEONG IEUNG-PIEUP : "ᅅ" U1145 # HANGUL CHOSEONG IEUNG-SIOS : "ᅆ" U1146 # HANGUL CHOSEONG IEUNG-PANSIOS : "ᅇ" U1147 # HANGUL CHOSEONG SSANGIEUNG : "ᅈ" U1148 # HANGUL CHOSEONG IEUNG-CIEUC : "ᅉ" U1149 # HANGUL CHOSEONG IEUNG-CHIEUCH : "ᅊ" U114a # HANGUL CHOSEONG IEUNG-THIEUTH : "ᅋ" U114b # HANGUL CHOSEONG IEUNG-PHIEUPH : "ᅍ" U114d # HANGUL CHOSEONG CIEUC-IEUNG : "ᅏ" U114f # HANGUL CHOSEONG CHITUEUMSSANGCIEUC : "ᅑ" U1151 # HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC : "ᅒ" U1152 # HANGUL CHOSEONG CHIEUCH-KHIEUKH : "ᅓ" U1153 # HANGUL CHOSEONG CHIEUCH-HIEUH : "ᅖ" U1156 # HANGUL CHOSEONG PHIEUPH-PIEUP : "ᅗ" U1157 # HANGUL CHOSEONG KAPYEOUNPHIEUPH : "ᅘ" U1158 # HANGUL CHOSEONG SSANGHIEUH : "ᅢ" U1162 # HANGUL JUNGSEONG AE : "ᅤ" U1164 # HANGUL JUNGSEONG YAE : "ᅦ" U1166 # HANGUL JUNGSEONG E : "ᅨ" U1168 # HANGUL JUNGSEONG YE : "ᅪ" U116a # HANGUL JUNGSEONG WA : "ᅬ" U116c # HANGUL JUNGSEONG OE : "ᅯ" U116f # HANGUL JUNGSEONG WEO : "ᅱ" U1171 # HANGUL JUNGSEONG WI : "ᅴ" U1174 # HANGUL JUNGSEONG YI : "ᅶ" U1176 # HANGUL JUNGSEONG A-O : "ᅷ" U1177 # HANGUL JUNGSEONG A-U : "ᅸ" U1178 # HANGUL JUNGSEONG YA-O : "ᅹ" U1179 # HANGUL JUNGSEONG YA-YO : "ᅺ" U117a # HANGUL JUNGSEONG EO-O : "ᅻ" U117b # HANGUL JUNGSEONG EO-U : "ᅼ" U117c # HANGUL JUNGSEONG EO-EU : "ᅽ" U117d # HANGUL JUNGSEONG YEO-O : "ᅾ" U117e # HANGUL JUNGSEONG YEO-U : "ᅿ" U117f # HANGUL JUNGSEONG O-EO : "ᆀ" U1180 # HANGUL JUNGSEONG O-E : "ᆁ" U1181 # HANGUL JUNGSEONG O-YE : "ᆂ" U1182 # HANGUL JUNGSEONG O-O : "ᆃ" U1183 # HANGUL JUNGSEONG O-U : "ᆄ" U1184 # HANGUL JUNGSEONG YO-YA : "ᆅ" U1185 # HANGUL JUNGSEONG YO-YAE : "ᆆ" U1186 # HANGUL JUNGSEONG YO-YEO : "ᆇ" U1187 # HANGUL JUNGSEONG YO-O : "ᆈ" U1188 # HANGUL JUNGSEONG YO-I : "ᆉ" U1189 # HANGUL JUNGSEONG U-A : "ᆊ" U118a # HANGUL JUNGSEONG U-AE : "ᆌ" U118c # HANGUL JUNGSEONG U-YE : "ᆍ" U118d # HANGUL JUNGSEONG U-U : "ᆎ" U118e # HANGUL JUNGSEONG YU-A : "ᆏ" U118f # HANGUL JUNGSEONG YU-EO : "ᆐ" U1190 # HANGUL JUNGSEONG YU-E : "ᆑ" U1191 # HANGUL JUNGSEONG YU-YEO : "ᆒ" U1192 # HANGUL JUNGSEONG YU-YE : "ᆓ" U1193 # HANGUL JUNGSEONG YU-U : "ᆔ" U1194 # HANGUL JUNGSEONG YU-I : "ᆕ" U1195 # HANGUL JUNGSEONG EU-U : "ᆖ" U1196 # HANGUL JUNGSEONG EU-EU : "ᆗ" U1197 # HANGUL JUNGSEONG YI-U : "ᆘ" U1198 # HANGUL JUNGSEONG I-A : "ᆙ" U1199 # HANGUL JUNGSEONG I-YA : "ᆚ" U119a # HANGUL JUNGSEONG I-O : "ᆛ" U119b # HANGUL JUNGSEONG I-U : "ᆜ" U119c # HANGUL JUNGSEONG I-EU : "ᆝ" U119d # HANGUL JUNGSEONG I-ARAEA : "ᆟ" U119f # HANGUL JUNGSEONG ARAEA-EO : "ᆠ" U11a0 # HANGUL JUNGSEONG ARAEA-U : "ᆡ" U11a1 # HANGUL JUNGSEONG ARAEA-I : "ᆢ" U11a2 # HANGUL JUNGSEONG SSANGARAEA : "ᆩ" U11a9 # HANGUL JONGSEONG SSANGKIYEOK : "ᆪ" U11aa # HANGUL JONGSEONG KIYEOK-SIOS : "ᆬ" U11ac # HANGUL JONGSEONG NIEUN-CIEUC : "ᆭ" U11ad # HANGUL JONGSEONG NIEUN-HIEUH : "ᆰ" U11b0 # HANGUL JONGSEONG RIEUL-KIYEOK : "ᆱ" U11b1 # HANGUL JONGSEONG RIEUL-MIEUM : "ᆲ" U11b2 # HANGUL JONGSEONG RIEUL-PIEUP : "ᆳ" U11b3 # HANGUL JONGSEONG RIEUL-SIOS : "ᆴ" U11b4 # HANGUL JONGSEONG RIEUL-THIEUTH : "ᆵ" U11b5 # HANGUL JONGSEONG RIEUL-PHIEUPH : "ᆶ" U11b6 # HANGUL JONGSEONG RIEUL-HIEUH : "ᆹ" U11b9 # HANGUL JONGSEONG PIEUP-SIOS : "ᆻ" U11bb # HANGUL JONGSEONG SSANGSIOS : "ᇃ" U11c3 # HANGUL JONGSEONG KIYEOK-RIEUL : "ᇅ" U11c5 # HANGUL JONGSEONG NIEUN-KIYEOK : "ᇆ" U11c6 # HANGUL JONGSEONG NIEUN-TIKEUT : "ᇇ" U11c7 # HANGUL JONGSEONG NIEUN-SIOS : "ᇈ" U11c8 # HANGUL JONGSEONG NIEUN-PANSIOS : "ᇉ" U11c9 # HANGUL JONGSEONG NIEUN-THIEUTH : "ᇊ" U11ca # HANGUL JONGSEONG TIKEUT-KIYEOK : "ᇋ" U11cb # HANGUL JONGSEONG TIKEUT-RIEUL : "ᇍ" U11cd # HANGUL JONGSEONG RIEUL-NIEUN : "ᇎ" U11ce # HANGUL JONGSEONG RIEUL-TIKEUT : "ᇐ" U11d0 # HANGUL JONGSEONG SSANGRIEUL : "ᇗ" U11d7 # HANGUL JONGSEONG RIEUL-PANSIOS : "ᇘ" U11d8 # HANGUL JONGSEONG RIEUL-KHIEUKH : "ᇙ" U11d9 # HANGUL JONGSEONG RIEUL-YEORINHIEUH : "ᇚ" U11da # HANGUL JONGSEONG MIEUM-KIYEOK : "ᇛ" U11db # HANGUL JONGSEONG MIEUM-RIEUL : "ᇜ" U11dc # HANGUL JONGSEONG MIEUM-PIEUP : "ᇝ" U11dd # HANGUL JONGSEONG MIEUM-SIOS : "ᇟ" U11df # HANGUL JONGSEONG MIEUM-PANSIOS : "ᇠ" U11e0 # HANGUL JONGSEONG MIEUM-CHIEUCH : "ᇡ" U11e1 # HANGUL JONGSEONG MIEUM-HIEUH : "ᇢ" U11e2 # HANGUL JONGSEONG KAPYEOUNMIEUM : "ᇣ" U11e3 # HANGUL JONGSEONG PIEUP-RIEUL : "ᇤ" U11e4 # HANGUL JONGSEONG PIEUP-PHIEUPH : "ᇥ" U11e5 # HANGUL JONGSEONG PIEUP-HIEUH : "ᇦ" U11e6 # HANGUL JONGSEONG KAPYEOUNPIEUP : "ᇧ" U11e7 # HANGUL JONGSEONG SIOS-KIYEOK : "ᇨ" U11e8 # HANGUL JONGSEONG SIOS-TIKEUT : "ᇩ" U11e9 # HANGUL JONGSEONG SIOS-RIEUL : "ᇪ" U11ea # HANGUL JONGSEONG SIOS-PIEUP : "ᇬ" U11ec # HANGUL JONGSEONG IEUNG-KIYEOK : "ᇮ" U11ee # HANGUL JONGSEONG SSANGIEUNG : "ᇯ" U11ef # HANGUL JONGSEONG IEUNG-KHIEUKH : "ᇱ" U11f1 # HANGUL JONGSEONG YESIEUNG-SIOS : "ᇲ" U11f2 # HANGUL JONGSEONG YESIEUNG-PANSIOS : "ᇳ" U11f3 # HANGUL JONGSEONG PHIEUPH-PIEUP : "ᇴ" U11f4 # HANGUL JONGSEONG KAPYEOUNPHIEUPH : "ᇵ" U11f5 # HANGUL JONGSEONG HIEUH-NIEUN : "ᇶ" U11f6 # HANGUL JONGSEONG HIEUH-RIEUL : "ᇷ" U11f7 # HANGUL JONGSEONG HIEUH-MIEUM : "ᇸ" U11f8 # HANGUL JONGSEONG HIEUH-PIEUP : "ᄢ" U1122 # HANGUL CHOSEONG PIEUP-SIOS-KIYEOK : "ᄣ" U1123 # HANGUL CHOSEONG PIEUP-SIOS-TIKEUT : "ᄤ" U1124 # HANGUL CHOSEONG PIEUP-SIOS-PIEUP : "ᄥ" U1125 # HANGUL CHOSEONG PIEUP-SSANGSIOS : "ᄦ" U1126 # HANGUL CHOSEONG PIEUP-SIOS-CIEUC : "ᄬ" U112c # HANGUL CHOSEONG KAPYEOUNSSANGPIEUP : "ᄳ" U1133 # HANGUL CHOSEONG SIOS-PIEUP-KIYEOK : "ᄴ" U1134 # HANGUL CHOSEONG SIOS-SSANGSIOS : "ᅫ" U116b # HANGUL JUNGSEONG WAE : "ᅰ" U1170 # HANGUL JUNGSEONG WE : "ᆋ" U118b # HANGUL JUNGSEONG U-EO-EU : "ᇄ" U11c4 # HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK : "ᇌ" U11cc # HANGUL JONGSEONG RIEUL-KIYEOK-SIOS : "ᇏ" U11cf # HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH : "ᇑ" U11d1 # HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK : "ᇒ" U11d2 # HANGUL JONGSEONG RIEUL-MIEUM-SIOS : "ᇓ" U11d3 # HANGUL JONGSEONG RIEUL-PIEUP-SIOS : "ᇔ" U11d4 # HANGUL JONGSEONG RIEUL-PIEUP-HIEUH : "ᇕ" U11d5 # HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP : "ᇖ" U11d6 # HANGUL JONGSEONG RIEUL-SSANGSIOS : "ᇞ" U11de # HANGUL JONGSEONG MIEUM-SSANGSIOS : "ᇭ" U11ed # HANGUL JONGSEONG IEUNG-SSANGKIYEOK : "ᄢ" U1122 # HANGUL CHOSEONG PIEUP-SIOS-KIYEOK : "ᄣ" U1123 # HANGUL CHOSEONG PIEUP-SIOS-TIKEUT : "ᄤ" U1124 # HANGUL CHOSEONG PIEUP-SIOS-PIEUP : "ᄥ" U1125 # HANGUL CHOSEONG PIEUP-SSANGSIOS : "ᄦ" U1126 # HANGUL CHOSEONG PIEUP-SIOS-CIEUC : "ᄬ" U112c # HANGUL CHOSEONG KAPYEOUNSSANGPIEUP : "ᄳ" U1133 # HANGUL CHOSEONG SIOS-PIEUP-KIYEOK : "ᄴ" U1134 # HANGUL CHOSEONG SIOS-SSANGSIOS : "ᅫ" U116b # HANGUL JUNGSEONG WAE : "ᅰ" U1170 # HANGUL JUNGSEONG WE : "ᆋ" U118b # HANGUL JUNGSEONG U-EO-EU : "ᇄ" U11c4 # HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK : "ᇌ" U11cc # HANGUL JONGSEONG RIEUL-KIYEOK-SIOS : "ᇑ" U11d1 # HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK : "ᇒ" U11d2 # HANGUL JONGSEONG RIEUL-MIEUM-SIOS : "ᇓ" U11d3 # HANGUL JONGSEONG RIEUL-PIEUP-SIOS : "ᇔ" U11d4 # HANGUL JONGSEONG RIEUL-PIEUP-HIEUH : "ᇕ" U11d5 # HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP : "ᇖ" U11d6 # HANGUL JONGSEONG RIEUL-SSANGSIOS : "ᇞ" U11de # HANGUL JONGSEONG MIEUM-SSANGSIOS : "ᇭ" U11ed # HANGUL JONGSEONG IEUNG-SSANGKIYEOK XCOMM Part 3 : "¬" notsign # NOT SIGN : "¬" notsign # NOT SIGN : "ª" ordfeminine # FEMININE ORDINAL INDICATOR : "ª" ordfeminine # FEMININE ORDINAL INDICATOR : "ª" ordfeminine # FEMININE ORDINAL INDICATOR : "ª" ordfeminine # FEMININE ORDINAL INDICATOR <2> : "²" twosuperior # SUPERSCRIPT TWO <2> : "²" twosuperior # SUPERSCRIPT TWO <2> : "²" twosuperior # SUPERSCRIPT TWO : "²" twosuperior # SUPERSCRIPT TWO : "²" twosuperior # SUPERSCRIPT TWO : "²" twosuperior # SUPERSCRIPT TWO : "²" twosuperior # SUPERSCRIPT TWO <3> : "³" threesuperior # SUPERSCRIPT THREE <3> : "³" threesuperior # SUPERSCRIPT THREE <3> : "³" threesuperior # SUPERSCRIPT THREE : "³" threesuperior # SUPERSCRIPT THREE : "³" threesuperior # SUPERSCRIPT THREE : "µ" mu # MICRO SIGN : "µ" mu # MICRO SIGN : "µ" mu # MICRO SIGN <1> : "¹" onesuperior # SUPERSCRIPT ONE <1> : "¹" onesuperior # SUPERSCRIPT ONE <1> : "¹" onesuperior # SUPERSCRIPT ONE : "¹" onesuperior # SUPERSCRIPT ONE : "¹" onesuperior # SUPERSCRIPT ONE : "º" masculine # MASCULINE ORDINAL INDICATOR : "º" masculine # MASCULINE ORDINAL INDICATOR : "º" masculine # MASCULINE ORDINAL INDICATOR : "º" masculine # MASCULINE ORDINAL INDICATOR <1> <4> : "¼" onequarter # VULGAR FRACTION ONE QUARTER <1> <2> : "½" onehalf # VULGAR FRACTION ONE HALF <3> <4> : "¾" threequarters # VULGAR FRACTION THREE QUARTERS : "À" Agrave # LATIN CAPITAL LETTER A WITH GRAVE : "À" Agrave # LATIN CAPITAL LETTER A WITH GRAVE : "À" Agrave # LATIN CAPITAL LETTER A WITH GRAVE : "Á" Aacute # LATIN CAPITAL LETTER A WITH ACUTE : "Á" Aacute # LATIN CAPITAL LETTER A WITH ACUTE : "Á" Aacute # LATIN CAPITAL LETTER A WITH ACUTE : "Á" Aacute # LATIN CAPITAL LETTER A WITH ACUTE : "Á" Aacute # LATIN CAPITAL LETTER A WITH ACUTE : "Â" Acircumflex # LATIN CAPITAL LETTER A WITH CIRCUMFLEX : "Â" Acircumflex # LATIN CAPITAL LETTER A WITH CIRCUMFLEX : "Â" Acircumflex # LATIN CAPITAL LETTER A WITH CIRCUMFLEX : "Â" Acircumflex # LATIN CAPITAL LETTER A WITH CIRCUMFLEX : "Â" Acircumflex # LATIN CAPITAL LETTER A WITH CIRCUMFLEX : "Ã" Atilde # LATIN CAPITAL LETTER A WITH TILDE : "Ã" Atilde # LATIN CAPITAL LETTER A WITH TILDE : "Ã" Atilde # LATIN CAPITAL LETTER A WITH TILDE : "Ä" Adiaeresis # LATIN CAPITAL LETTER A WITH DIAERESIS : "Ä" Adiaeresis # LATIN CAPITAL LETTER A WITH DIAERESIS : "Ä" Adiaeresis # LATIN CAPITAL LETTER A WITH DIAERESIS : "Ä" Adiaeresis # LATIN CAPITAL LETTER A WITH DIAERESIS : "Ä" Adiaeresis # LATIN CAPITAL LETTER A WITH DIAERESIS : "Å" Aring # LATIN CAPITAL LETTER A WITH RING ABOVE : "Å" Aring # LATIN CAPITAL LETTER A WITH RING ABOVE : "Å" Aring # LATIN CAPITAL LETTER A WITH RING ABOVE : "Å" Aring # LATIN CAPITAL LETTER A WITH RING ABOVE : "Å" Aring # LATIN CAPITAL LETTER A WITH RING ABOVE : "Ç" Ccedilla # LATIN CAPITAL LETTER C WITH CEDILLA : "Ç" Ccedilla # LATIN CAPITAL LETTER C WITH CEDILLA : "Ç" Ccedilla # LATIN CAPITAL LETTER C WITH CEDILLA : "Ç" Ccedilla # LATIN CAPITAL LETTER C WITH CEDILLA : "È" Egrave # LATIN CAPITAL LETTER E WITH GRAVE : "È" Egrave # LATIN CAPITAL LETTER E WITH GRAVE : "È" Egrave # LATIN CAPITAL LETTER E WITH GRAVE : "É" Eacute # LATIN CAPITAL LETTER E WITH ACUTE : "É" Eacute # LATIN CAPITAL LETTER E WITH ACUTE : "É" Eacute # LATIN CAPITAL LETTER E WITH ACUTE : "É" Eacute # LATIN CAPITAL LETTER E WITH ACUTE : "É" Eacute # LATIN CAPITAL LETTER E WITH ACUTE : "Ê" Ecircumflex # LATIN CAPITAL LETTER E WITH CIRCUMFLEX : "Ê" Ecircumflex # LATIN CAPITAL LETTER E WITH CIRCUMFLEX : "Ê" Ecircumflex # LATIN CAPITAL LETTER E WITH CIRCUMFLEX : "Ê" Ecircumflex # LATIN CAPITAL LETTER E WITH CIRCUMFLEX : "Ê" Ecircumflex # LATIN CAPITAL LETTER E WITH CIRCUMFLEX : "Ë" Ediaeresis # LATIN CAPITAL LETTER E WITH DIAERESIS : "Ë" Ediaeresis # LATIN CAPITAL LETTER E WITH DIAERESIS : "Ë" Ediaeresis # LATIN CAPITAL LETTER E WITH DIAERESIS : "Ë" Ediaeresis # LATIN CAPITAL LETTER E WITH DIAERESIS : "Ë" Ediaeresis # LATIN CAPITAL LETTER E WITH DIAERESIS : "Ì" Igrave # LATIN CAPITAL LETTER I WITH GRAVE : "Ì" Igrave # LATIN CAPITAL LETTER I WITH GRAVE : "Ì" Igrave # LATIN CAPITAL LETTER I WITH GRAVE : "Í" Iacute # LATIN CAPITAL LETTER I WITH ACUTE : "Í" Iacute # LATIN CAPITAL LETTER I WITH ACUTE : "Í" Iacute # LATIN CAPITAL LETTER I WITH ACUTE : "Í" Iacute # LATIN CAPITAL LETTER I WITH ACUTE : "Í" Iacute # LATIN CAPITAL LETTER I WITH ACUTE : "Î" Icircumflex # LATIN CAPITAL LETTER I WITH CIRCUMFLEX : "Î" Icircumflex # LATIN CAPITAL LETTER I WITH CIRCUMFLEX : "Î" Icircumflex # LATIN CAPITAL LETTER I WITH CIRCUMFLEX : "Î" Icircumflex # LATIN CAPITAL LETTER I WITH CIRCUMFLEX : "Î" Icircumflex # LATIN CAPITAL LETTER I WITH CIRCUMFLEX : "Ï" Idiaeresis # LATIN CAPITAL LETTER I WITH DIAERESIS : "Ï" Idiaeresis # LATIN CAPITAL LETTER I WITH DIAERESIS : "Ï" Idiaeresis # LATIN CAPITAL LETTER I WITH DIAERESIS : "Ï" Idiaeresis # LATIN CAPITAL LETTER I WITH DIAERESIS : "Ï" Idiaeresis # LATIN CAPITAL LETTER I WITH DIAERESIS : "J́" # LATIN CAPITAL LETTER J U004A with COMBINING ACUTE ACCENT U0301 : "J́" # LATIN CAPITAL LETTER J U004A with COMBINING ACUTE ACCENT U0301 : "J́" # LATIN CAPITAL LETTER J U004A with COMBINING ACUTE ACCENT U0301 : "J́" # LATIN CAPITAL LETTER J U004A with COMBINING ACUTE ACCENT U0301 : "J́" # LATIN CAPITAL LETTER J U004A with COMBINING ACUTE ACCENT U0301 : "Ð" ETH # LATIN CAPITAL LETTER ETH : "Ñ" Ntilde # LATIN CAPITAL LETTER N WITH TILDE : "Ñ" Ntilde # LATIN CAPITAL LETTER N WITH TILDE : "Ñ" Ntilde # LATIN CAPITAL LETTER N WITH TILDE : "Ò" Ograve # LATIN CAPITAL LETTER O WITH GRAVE : "Ò" Ograve # LATIN CAPITAL LETTER O WITH GRAVE : "Ò" Ograve # LATIN CAPITAL LETTER O WITH GRAVE : "Ó" Oacute # LATIN CAPITAL LETTER O WITH ACUTE : "Ó" Oacute # LATIN CAPITAL LETTER O WITH ACUTE : "Ó" Oacute # LATIN CAPITAL LETTER O WITH ACUTE : "Ó" Oacute # LATIN CAPITAL LETTER O WITH ACUTE : "Ó" Oacute # LATIN CAPITAL LETTER O WITH ACUTE : "Ô" Ocircumflex # LATIN CAPITAL LETTER O WITH CIRCUMFLEX : "Ô" Ocircumflex # LATIN CAPITAL LETTER O WITH CIRCUMFLEX : "Ô" Ocircumflex # LATIN CAPITAL LETTER O WITH CIRCUMFLEX : "Ô" Ocircumflex # LATIN CAPITAL LETTER O WITH CIRCUMFLEX : "Ô" Ocircumflex # LATIN CAPITAL LETTER O WITH CIRCUMFLEX : "Õ" Otilde # LATIN CAPITAL LETTER O WITH TILDE : "Õ" Otilde # LATIN CAPITAL LETTER O WITH TILDE : "Õ" Otilde # LATIN CAPITAL LETTER O WITH TILDE : "Ö" Odiaeresis # LATIN CAPITAL LETTER O WITH DIAERESIS : "Ö" Odiaeresis # LATIN CAPITAL LETTER O WITH DIAERESIS : "Ö" Odiaeresis # LATIN CAPITAL LETTER O WITH DIAERESIS : "Ö" Odiaeresis # LATIN CAPITAL LETTER O WITH DIAERESIS : "Ö" Odiaeresis # LATIN CAPITAL LETTER O WITH DIAERESIS : "×" multiply # MULTIPLICATION SIGN : "Ø" Oslash # LATIN CAPITAL LETTER O WITH STROKE : "Ø" Oslash # LATIN CAPITAL LETTER O WITH STROKE : "Ø" Oslash # LATIN CAPITAL LETTER O WITH STROKE : "Ø" Oslash # LATIN CAPITAL LETTER O WITH STROKE : "Ù" Ugrave # LATIN CAPITAL LETTER U WITH GRAVE : "Ù" Ugrave # LATIN CAPITAL LETTER U WITH GRAVE : "Ù" Ugrave # LATIN CAPITAL LETTER U WITH GRAVE : "Ú" Uacute # LATIN CAPITAL LETTER U WITH ACUTE : "Ú" Uacute # LATIN CAPITAL LETTER U WITH ACUTE : "Ú" Uacute # LATIN CAPITAL LETTER U WITH ACUTE : "Ú" Uacute # LATIN CAPITAL LETTER U WITH ACUTE : "Ú" Uacute # LATIN CAPITAL LETTER U WITH ACUTE : "Û" Ucircumflex # LATIN CAPITAL LETTER U WITH CIRCUMFLEX : "Û" Ucircumflex # LATIN CAPITAL LETTER U WITH CIRCUMFLEX : "Û" Ucircumflex # LATIN CAPITAL LETTER U WITH CIRCUMFLEX : "Û" Ucircumflex # LATIN CAPITAL LETTER U WITH CIRCUMFLEX : "Û" Ucircumflex # LATIN CAPITAL LETTER U WITH CIRCUMFLEX : "Ü" Udiaeresis # LATIN CAPITAL LETTER U WITH DIAERESIS : "Ü" Udiaeresis # LATIN CAPITAL LETTER U WITH DIAERESIS : "Ü" Udiaeresis # LATIN CAPITAL LETTER U WITH DIAERESIS : "Ü" Udiaeresis # LATIN CAPITAL LETTER U WITH DIAERESIS : "Ü" Udiaeresis # LATIN CAPITAL LETTER U WITH DIAERESIS : "Ý" Yacute # LATIN CAPITAL LETTER Y WITH ACUTE : "Ý" Yacute # LATIN CAPITAL LETTER Y WITH ACUTE : "Ý" Yacute # LATIN CAPITAL LETTER Y WITH ACUTE : "Ý" Yacute # LATIN CAPITAL LETTER Y WITH ACUTE : "Ý" Yacute # LATIN CAPITAL LETTER Y WITH ACUTE : "Þ" THORN # LATIN CAPITAL LETTER THORN : "à" agrave # LATIN SMALL LETTER A WITH GRAVE : "à" agrave # LATIN SMALL LETTER A WITH GRAVE : "à" agrave # LATIN SMALL LETTER A WITH GRAVE : "á" aacute # LATIN SMALL LETTER A WITH ACUTE : "á" aacute # LATIN SMALL LETTER A WITH ACUTE : "á" aacute # LATIN SMALL LETTER A WITH ACUTE : "á" aacute # LATIN SMALL LETTER A WITH ACUTE : "á" aacute # LATIN SMALL LETTER A WITH ACUTE : "â" acircumflex # LATIN SMALL LETTER A WITH CIRCUMFLEX : "â" acircumflex # LATIN SMALL LETTER A WITH CIRCUMFLEX : "â" acircumflex # LATIN SMALL LETTER A WITH CIRCUMFLEX : "â" acircumflex # LATIN SMALL LETTER A WITH CIRCUMFLEX : "â" acircumflex # LATIN SMALL LETTER A WITH CIRCUMFLEX : "ã" atilde # LATIN SMALL LETTER A WITH TILDE : "ã" atilde # LATIN SMALL LETTER A WITH TILDE : "ã" atilde # LATIN SMALL LETTER A WITH TILDE : "ä" adiaeresis # LATIN SMALL LETTER A WITH DIAERESIS : "ä" adiaeresis # LATIN SMALL LETTER A WITH DIAERESIS : "ä" adiaeresis # LATIN SMALL LETTER A WITH DIAERESIS : "ä" adiaeresis # LATIN SMALL LETTER A WITH DIAERESIS : "ä" adiaeresis # LATIN SMALL LETTER A WITH DIAERESIS : "å" aring # LATIN SMALL LETTER A WITH RING ABOVE : "å" aring # LATIN SMALL LETTER A WITH RING ABOVE : "å" aring # LATIN SMALL LETTER A WITH RING ABOVE : "å" aring # LATIN SMALL LETTER A WITH RING ABOVE : "å" aring # LATIN SMALL LETTER A WITH RING ABOVE : "ç" ccedilla # LATIN SMALL LETTER C WITH CEDILLA : "ç" ccedilla # LATIN SMALL LETTER C WITH CEDILLA : "ç" ccedilla # LATIN SMALL LETTER C WITH CEDILLA : "ç" ccedilla # LATIN SMALL LETTER C WITH CEDILLA : "è" egrave # LATIN SMALL LETTER E WITH GRAVE : "è" egrave # LATIN SMALL LETTER E WITH GRAVE : "è" egrave # LATIN SMALL LETTER E WITH GRAVE : "é" eacute # LATIN SMALL LETTER E WITH ACUTE : "é" eacute # LATIN SMALL LETTER E WITH ACUTE : "é" eacute # LATIN SMALL LETTER E WITH ACUTE : "é" eacute # LATIN SMALL LETTER E WITH ACUTE : "é" eacute # LATIN SMALL LETTER E WITH ACUTE : "ê" ecircumflex # LATIN SMALL LETTER E WITH CIRCUMFLEX : "ê" ecircumflex # LATIN SMALL LETTER E WITH CIRCUMFLEX : "ê" ecircumflex # LATIN SMALL LETTER E WITH CIRCUMFLEX : "ê" ecircumflex # LATIN SMALL LETTER E WITH CIRCUMFLEX : "ê" ecircumflex # LATIN SMALL LETTER E WITH CIRCUMFLEX : "ë" ediaeresis # LATIN SMALL LETTER E WITH DIAERESIS : "ë" ediaeresis # LATIN SMALL LETTER E WITH DIAERESIS : "ë" ediaeresis # LATIN SMALL LETTER E WITH DIAERESIS : "ë" ediaeresis # LATIN SMALL LETTER E WITH DIAERESIS : "ë" ediaeresis # LATIN SMALL LETTER E WITH DIAERESIS : "ì" igrave # LATIN SMALL LETTER I WITH GRAVE : "ì" igrave # LATIN SMALL LETTER I WITH GRAVE : "ì" igrave # LATIN SMALL LETTER I WITH GRAVE : "í" iacute # LATIN SMALL LETTER I WITH ACUTE : "í" iacute # LATIN SMALL LETTER I WITH ACUTE : "í" iacute # LATIN SMALL LETTER I WITH ACUTE : "í" iacute # LATIN SMALL LETTER I WITH ACUTE : "í" iacute # LATIN SMALL LETTER I WITH ACUTE : "î" icircumflex # LATIN SMALL LETTER I WITH CIRCUMFLEX : "î" icircumflex # LATIN SMALL LETTER I WITH CIRCUMFLEX : "î" icircumflex # LATIN SMALL LETTER I WITH CIRCUMFLEX : "î" icircumflex # LATIN SMALL LETTER I WITH CIRCUMFLEX : "î" icircumflex # LATIN SMALL LETTER I WITH CIRCUMFLEX : "ï" idiaeresis # LATIN SMALL LETTER I WITH DIAERESIS : "ï" idiaeresis # LATIN SMALL LETTER I WITH DIAERESIS : "ï" idiaeresis # LATIN SMALL LETTER I WITH DIAERESIS : "ï" idiaeresis # LATIN SMALL LETTER I WITH DIAERESIS : "ï" idiaeresis # LATIN SMALL LETTER I WITH DIAERESIS : "j́" # LATIN SMALL LETTER J U006A with COMBINING ACUTE ACCENT U0301 : "j́" # LATIN SMALL LETTER J U006A with COMBINING ACUTE ACCENT U0301 : "j́" # LATIN SMALL LETTER J U006A with COMBINING ACUTE ACCENT U0301 : "j́" # LATIN SMALL LETTER J U006A with COMBINING ACUTE ACCENT U0301 : "j́" # LATIN SMALL LETTER J U006A with COMBINING ACUTE ACCENT U0301 : "ð" eth # LATIN SMALL LETTER ETH : "ñ" ntilde # LATIN SMALL LETTER N WITH TILDE : "ñ" ntilde # LATIN SMALL LETTER N WITH TILDE : "ñ" ntilde # LATIN SMALL LETTER N WITH TILDE : "ò" ograve # LATIN SMALL LETTER O WITH GRAVE : "ò" ograve # LATIN SMALL LETTER O WITH GRAVE : "ò" ograve # LATIN SMALL LETTER O WITH GRAVE : "ó" oacute # LATIN SMALL LETTER O WITH ACUTE : "ó" oacute # LATIN SMALL LETTER O WITH ACUTE : "ó" oacute # LATIN SMALL LETTER O WITH ACUTE : "ó" oacute # LATIN SMALL LETTER O WITH ACUTE : "ó" oacute # LATIN SMALL LETTER O WITH ACUTE : "ô" ocircumflex # LATIN SMALL LETTER O WITH CIRCUMFLEX : "ô" ocircumflex # LATIN SMALL LETTER O WITH CIRCUMFLEX : "ô" ocircumflex # LATIN SMALL LETTER O WITH CIRCUMFLEX : "ô" ocircumflex # LATIN SMALL LETTER O WITH CIRCUMFLEX : "ô" ocircumflex # LATIN SMALL LETTER O WITH CIRCUMFLEX : "õ" otilde # LATIN SMALL LETTER O WITH TILDE : "õ" otilde # LATIN SMALL LETTER O WITH TILDE : "õ" otilde # LATIN SMALL LETTER O WITH TILDE : "ö" odiaeresis # LATIN SMALL LETTER O WITH DIAERESIS : "ö" odiaeresis # LATIN SMALL LETTER O WITH DIAERESIS : "ö" odiaeresis # LATIN SMALL LETTER O WITH DIAERESIS : "ö" odiaeresis # LATIN SMALL LETTER O WITH DIAERESIS : "ö" odiaeresis # LATIN SMALL LETTER O WITH DIAERESIS : "÷" division # DIVISION SIGN : "÷" division # DIVISION SIGN : "ø" oslash # LATIN SMALL LETTER O WITH STROKE : "ø" oslash # LATIN SMALL LETTER O WITH STROKE : "ø" oslash # LATIN SMALL LETTER O WITH STROKE : "ø" oslash # LATIN SMALL LETTER O WITH STROKE : "ù" ugrave # LATIN SMALL LETTER U WITH GRAVE : "ù" ugrave # LATIN SMALL LETTER U WITH GRAVE : "ù" ugrave # LATIN SMALL LETTER U WITH GRAVE : "ú" uacute # LATIN SMALL LETTER U WITH ACUTE : "ú" uacute # LATIN SMALL LETTER U WITH ACUTE : "ú" uacute # LATIN SMALL LETTER U WITH ACUTE : "ú" uacute # LATIN SMALL LETTER U WITH ACUTE : "ú" uacute # LATIN SMALL LETTER U WITH ACUTE : "û" ucircumflex # LATIN SMALL LETTER U WITH CIRCUMFLEX : "û" ucircumflex # LATIN SMALL LETTER U WITH CIRCUMFLEX : "û" ucircumflex # LATIN SMALL LETTER U WITH CIRCUMFLEX : "û" ucircumflex # LATIN SMALL LETTER U WITH CIRCUMFLEX : "û" ucircumflex # LATIN SMALL LETTER U WITH CIRCUMFLEX : "ü" udiaeresis # LATIN SMALL LETTER U WITH DIAERESIS : "ü" udiaeresis # LATIN SMALL LETTER U WITH DIAERESIS : "ü" udiaeresis # LATIN SMALL LETTER U WITH DIAERESIS : "ü" udiaeresis # LATIN SMALL LETTER U WITH DIAERESIS : "ü" udiaeresis # LATIN SMALL LETTER U WITH DIAERESIS : "ý" yacute # LATIN SMALL LETTER Y WITH ACUTE : "ý" yacute # LATIN SMALL LETTER Y WITH ACUTE : "ý" yacute # LATIN SMALL LETTER Y WITH ACUTE : "ý" yacute # LATIN SMALL LETTER Y WITH ACUTE : "ý" yacute # LATIN SMALL LETTER Y WITH ACUTE : "þ" thorn # LATIN SMALL LETTER THORN : "ÿ" ydiaeresis # LATIN SMALL LETTER Y WITH DIAERESIS : "ÿ" ydiaeresis # LATIN SMALL LETTER Y WITH DIAERESIS : "ÿ" ydiaeresis # LATIN SMALL LETTER Y WITH DIAERESIS : "ÿ" ydiaeresis # LATIN SMALL LETTER Y WITH DIAERESIS : "ÿ" ydiaeresis # LATIN SMALL LETTER Y WITH DIAERESIS : "Ā" U0100 # LATIN CAPITAL LETTER A WITH MACRON : "Ā" U0100 # LATIN CAPITAL LETTER A WITH MACRON : "Ā" U0100 # LATIN CAPITAL LETTER A WITH MACRON : "Ā" U0100 # LATIN CAPITAL LETTER A WITH MACRON : "Ā" U0100 # LATIN CAPITAL LETTER A WITH MACRON : "Ā" U0100 # LATIN CAPITAL LETTER A WITH MACRON : "ā" U0101 # LATIN SMALL LETTER A WITH MACRON : "ā" U0101 # LATIN SMALL LETTER A WITH MACRON : "ā" U0101 # LATIN SMALL LETTER A WITH MACRON : "ā" U0101 # LATIN SMALL LETTER A WITH MACRON : "ā" U0101 # LATIN SMALL LETTER A WITH MACRON : "ā" U0101 # LATIN SMALL LETTER A WITH MACRON : "Ă" U0102 # LATIN CAPITAL LETTER A WITH BREVE : "Ă" U0102 # LATIN CAPITAL LETTER A WITH BREVE : "Ă" U0102 # LATIN CAPITAL LETTER A WITH BREVE : "Ă" U0102 # LATIN CAPITAL LETTER A WITH BREVE : "Ă" U0102 # LATIN CAPITAL LETTER A WITH BREVE : "ă" U0103 # LATIN SMALL LETTER A WITH BREVE : "ă" U0103 # LATIN SMALL LETTER A WITH BREVE : "ă" U0103 # LATIN SMALL LETTER A WITH BREVE : "ă" U0103 # LATIN SMALL LETTER A WITH BREVE : "ă" U0103 # LATIN SMALL LETTER A WITH BREVE : "Ą" U0104 # LATIN CAPITAL LETTER A WITH OGONEK : "Ą" U0104 # LATIN CAPITAL LETTER A WITH OGONEK : "Ą" U0104 # LATIN CAPITAL LETTER A WITH OGONEK : "Ą" U0104 # LATIN CAPITAL LETTER A WITH OGONEK : "Ą" U0104 # LATIN CAPITAL LETTER A WITH OGONEK : "ą" U0105 # LATIN SMALL LETTER A WITH OGONEK : "ą" U0105 # LATIN SMALL LETTER A WITH OGONEK : "ą" U0105 # LATIN SMALL LETTER A WITH OGONEK : "ą" U0105 # LATIN SMALL LETTER A WITH OGONEK : "ą" U0105 # LATIN SMALL LETTER A WITH OGONEK : "Ć" U0106 # LATIN CAPITAL LETTER C WITH ACUTE : "Ć" U0106 # LATIN CAPITAL LETTER C WITH ACUTE : "Ć" U0106 # LATIN CAPITAL LETTER C WITH ACUTE : "Ć" U0106 # LATIN CAPITAL LETTER C WITH ACUTE : "ć" U0107 # LATIN SMALL LETTER C WITH ACUTE : "ć" U0107 # LATIN SMALL LETTER C WITH ACUTE : "ć" U0107 # LATIN SMALL LETTER C WITH ACUTE : "ć" U0107 # LATIN SMALL LETTER C WITH ACUTE : "Ĉ" U0108 # LATIN CAPITAL LETTER C WITH CIRCUMFLEX : "Ĉ" U0108 # LATIN CAPITAL LETTER C WITH CIRCUMFLEX : "ĉ" U0109 # LATIN SMALL LETTER C WITH CIRCUMFLEX : "ĉ" U0109 # LATIN SMALL LETTER C WITH CIRCUMFLEX : "Ċ" U010A # LATIN CAPITAL LETTER C WITH DOT ABOVE : "Ċ" U010A # LATIN CAPITAL LETTER C WITH DOT ABOVE : "Ċ" U010A # LATIN CAPITAL LETTER C WITH DOT ABOVE : "ċ" U010B # LATIN SMALL LETTER C WITH DOT ABOVE : "ċ" U010B # LATIN SMALL LETTER C WITH DOT ABOVE : "ċ" U010B # LATIN SMALL LETTER C WITH DOT ABOVE : "Č" U010C # LATIN CAPITAL LETTER C WITH CARON : "Č" U010C # LATIN CAPITAL LETTER C WITH CARON : "Č" U010C # LATIN CAPITAL LETTER C WITH CARON : "Č" U010C # LATIN CAPITAL LETTER C WITH CARON : "č" U010D # LATIN SMALL LETTER C WITH CARON : "č" U010D # LATIN SMALL LETTER C WITH CARON : "č" U010D # LATIN SMALL LETTER C WITH CARON : "č" U010D # LATIN SMALL LETTER C WITH CARON : "Ď" U010E # LATIN CAPITAL LETTER D WITH CARON : "Ď" U010E # LATIN CAPITAL LETTER D WITH CARON : "Ď" U010E # LATIN CAPITAL LETTER D WITH CARON : "Ď" U010E # LATIN CAPITAL LETTER D WITH CARON : "ď" U010F # LATIN SMALL LETTER D WITH CARON : "ď" U010F # LATIN SMALL LETTER D WITH CARON : "ď" U010F # LATIN SMALL LETTER D WITH CARON : "ď" U010F # LATIN SMALL LETTER D WITH CARON : "Đ" Dstroke # LATIN CAPITAL LETTER D WITH STROKE : "Đ" Dstroke # LATIN CAPITAL LETTER D WITH STROKE : "Đ" Dstroke # LATIN CAPITAL LETTER D WITH STROKE : "Đ" Dstroke # LATIN CAPITAL LETTER D WITH STROKE : "Đ" Dstroke # LATIN CAPITAL LETTER D WITH STROKE : "đ" dstroke # LATIN SMALL LETTER D WITH STROKE : "đ" dstroke # LATIN SMALL LETTER D WITH STROKE : "đ" dstroke # LATIN SMALL LETTER D WITH STROKE : "đ" dstroke # LATIN SMALL LETTER D WITH STROKE : "đ" dstroke # LATIN SMALL LETTER D WITH STROKE : "Ē" U0112 # LATIN CAPITAL LETTER E WITH MACRON : "Ē" U0112 # LATIN CAPITAL LETTER E WITH MACRON : "Ē" U0112 # LATIN CAPITAL LETTER E WITH MACRON : "Ē" U0112 # LATIN CAPITAL LETTER E WITH MACRON : "Ē" U0112 # LATIN CAPITAL LETTER E WITH MACRON : "Ē" U0112 # LATIN CAPITAL LETTER E WITH MACRON : "ē" U0113 # LATIN SMALL LETTER E WITH MACRON : "ē" U0113 # LATIN SMALL LETTER E WITH MACRON : "ē" U0113 # LATIN SMALL LETTER E WITH MACRON : "ē" U0113 # LATIN SMALL LETTER E WITH MACRON : "ē" U0113 # LATIN SMALL LETTER E WITH MACRON : "ē" U0113 # LATIN SMALL LETTER E WITH MACRON : "Ĕ" U0114 # LATIN CAPITAL LETTER E WITH BREVE : "Ĕ" U0114 # LATIN CAPITAL LETTER E WITH BREVE : "Ĕ" U0114 # LATIN CAPITAL LETTER E WITH BREVE : "ĕ" U0115 # LATIN SMALL LETTER E WITH BREVE : "ĕ" U0115 # LATIN SMALL LETTER E WITH BREVE : "ĕ" U0115 # LATIN SMALL LETTER E WITH BREVE : "Ė" U0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE : "Ė" U0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE : "Ė" U0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE : "ė" U0117 # LATIN SMALL LETTER E WITH DOT ABOVE : "ė" U0117 # LATIN SMALL LETTER E WITH DOT ABOVE : "ė" U0117 # LATIN SMALL LETTER E WITH DOT ABOVE : "Ę" U0118 # LATIN CAPITAL LETTER E WITH OGONEK : "Ę" U0118 # LATIN CAPITAL LETTER E WITH OGONEK : "Ę" U0118 # LATIN CAPITAL LETTER E WITH OGONEK : "Ę" U0118 # LATIN CAPITAL LETTER E WITH OGONEK : "Ę" U0118 # LATIN CAPITAL LETTER E WITH OGONEK : "ę" U0119 # LATIN SMALL LETTER E WITH OGONEK : "ę" U0119 # LATIN SMALL LETTER E WITH OGONEK : "ę" U0119 # LATIN SMALL LETTER E WITH OGONEK : "ę" U0119 # LATIN SMALL LETTER E WITH OGONEK : "ę" U0119 # LATIN SMALL LETTER E WITH OGONEK : "Ě" U011A # LATIN CAPITAL LETTER E WITH CARON : "Ě" U011A # LATIN CAPITAL LETTER E WITH CARON : "Ě" U011A # LATIN CAPITAL LETTER E WITH CARON : "Ě" U011A # LATIN CAPITAL LETTER E WITH CARON : "ě" U011B # LATIN SMALL LETTER E WITH CARON : "ě" U011B # LATIN SMALL LETTER E WITH CARON : "ě" U011B # LATIN SMALL LETTER E WITH CARON : "ě" U011B # LATIN SMALL LETTER E WITH CARON : "Ĝ" U011C # LATIN CAPITAL LETTER G WITH CIRCUMFLEX : "Ĝ" U011C # LATIN CAPITAL LETTER G WITH CIRCUMFLEX : "ĝ" U011D # LATIN SMALL LETTER G WITH CIRCUMFLEX : "ĝ" U011D # LATIN SMALL LETTER G WITH CIRCUMFLEX : "Ğ" U011E # LATIN CAPITAL LETTER G WITH BREVE : "Ğ" U011E # LATIN CAPITAL LETTER G WITH BREVE : "Ğ" U011E # LATIN CAPITAL LETTER G WITH BREVE : "Ğ" U011E # LATIN CAPITAL LETTER G WITH BREVE : "Ğ" U011E # LATIN CAPITAL LETTER G WITH BREVE : "Ğ" U011E # LATIN CAPITAL LETTER G WITH BREVE : "Ğ" U011E # LATIN CAPITAL LETTER G WITH BREVE : "ğ" U011F # LATIN SMALL LETTER G WITH BREVE : "ğ" U011F # LATIN SMALL LETTER G WITH BREVE : "ğ" U011F # LATIN SMALL LETTER G WITH BREVE : "ğ" U011F # LATIN SMALL LETTER G WITH BREVE : "ğ" U011F # LATIN SMALL LETTER G WITH BREVE : "ğ" U011F # LATIN SMALL LETTER G WITH BREVE : "ğ" U011F # LATIN SMALL LETTER G WITH BREVE : "Ġ" U0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE : "Ġ" U0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE : "Ġ" U0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE : "ġ" U0121 # LATIN SMALL LETTER G WITH DOT ABOVE : "ġ" U0121 # LATIN SMALL LETTER G WITH DOT ABOVE : "ġ" U0121 # LATIN SMALL LETTER G WITH DOT ABOVE : "Ģ" U0122 # LATIN CAPITAL LETTER G WITH CEDILLA : "Ģ" U0122 # LATIN CAPITAL LETTER G WITH CEDILLA : "Ģ" U0122 # LATIN CAPITAL LETTER G WITH CEDILLA : "Ģ" U0122 # LATIN CAPITAL LETTER G WITH CEDILLA : "ģ" U0123 # LATIN SMALL LETTER G WITH CEDILLA : "ģ" U0123 # LATIN SMALL LETTER G WITH CEDILLA : "ģ" U0123 # LATIN SMALL LETTER G WITH CEDILLA : "ģ" U0123 # LATIN SMALL LETTER G WITH CEDILLA : "Ĥ" U0124 # LATIN CAPITAL LETTER H WITH CIRCUMFLEX : "Ĥ" U0124 # LATIN CAPITAL LETTER H WITH CIRCUMFLEX : "ĥ" U0125 # LATIN SMALL LETTER H WITH CIRCUMFLEX : "ĥ" U0125 # LATIN SMALL LETTER H WITH CIRCUMFLEX : "Ħ" U0126 # LATIN CAPITAL LETTER H WITH STROKE : "Ħ" U0126 # LATIN CAPITAL LETTER H WITH STROKE : "Ħ" U0126 # LATIN CAPITAL LETTER H WITH STROKE : "ħ" U0127 # LATIN SMALL LETTER H WITH STROKE : "ħ" U0127 # LATIN SMALL LETTER H WITH STROKE : "ħ" U0127 # LATIN SMALL LETTER H WITH STROKE : "Ĩ" U0128 # LATIN CAPITAL LETTER I WITH TILDE : "Ĩ" U0128 # LATIN CAPITAL LETTER I WITH TILDE : "Ĩ" U0128 # LATIN CAPITAL LETTER I WITH TILDE : "ĩ" U0129 # LATIN SMALL LETTER I WITH TILDE : "ĩ" U0129 # LATIN SMALL LETTER I WITH TILDE : "ĩ" U0129 # LATIN SMALL LETTER I WITH TILDE : "Ī" U012A # LATIN CAPITAL LETTER I WITH MACRON : "Ī" U012A # LATIN CAPITAL LETTER I WITH MACRON : "Ī" U012A # LATIN CAPITAL LETTER I WITH MACRON : "Ī" U012A # LATIN CAPITAL LETTER I WITH MACRON : "Ī" U012A # LATIN CAPITAL LETTER I WITH MACRON : "Ī" U012A # LATIN CAPITAL LETTER I WITH MACRON : "ī" U012B # LATIN SMALL LETTER I WITH MACRON : "ī" U012B # LATIN SMALL LETTER I WITH MACRON : "ī" U012B # LATIN SMALL LETTER I WITH MACRON : "ī" U012B # LATIN SMALL LETTER I WITH MACRON : "ī" U012B # LATIN SMALL LETTER I WITH MACRON : "ī" U012B # LATIN SMALL LETTER I WITH MACRON : "Ĭ" U012C # LATIN CAPITAL LETTER I WITH BREVE : "Ĭ" U012C # LATIN CAPITAL LETTER I WITH BREVE : "Ĭ" U012C # LATIN CAPITAL LETTER I WITH BREVE : "ĭ" U012D # LATIN SMALL LETTER I WITH BREVE : "ĭ" U012D # LATIN SMALL LETTER I WITH BREVE : "ĭ" U012D # LATIN SMALL LETTER I WITH BREVE : "Į" U012E # LATIN CAPITAL LETTER I WITH OGONEK : "Į" U012E # LATIN CAPITAL LETTER I WITH OGONEK : "Į" U012E # LATIN CAPITAL LETTER I WITH OGONEK : "Į" U012E # LATIN CAPITAL LETTER I WITH OGONEK : "Į" U012E # LATIN CAPITAL LETTER I WITH OGONEK : "į" U012F # LATIN SMALL LETTER I WITH OGONEK : "į" U012F # LATIN SMALL LETTER I WITH OGONEK : "į" U012F # LATIN SMALL LETTER I WITH OGONEK : "į" U012F # LATIN SMALL LETTER I WITH OGONEK : "į" U012F # LATIN SMALL LETTER I WITH OGONEK : "İ" U0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE : "İ" U0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE : "İ" U0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE : "ı" U0131 # LATIN SMALL LETTER DOTLESS I : "ı" U0131 # LATIN SMALL LETTER DOTLESS I : "ı" U0131 # LATIN SMALL LETTER DOTLESS I : "Ĵ" U0134 # LATIN CAPITAL LETTER J WITH CIRCUMFLEX : "Ĵ" U0134 # LATIN CAPITAL LETTER J WITH CIRCUMFLEX : "ĵ" U0135 # LATIN SMALL LETTER J WITH CIRCUMFLEX : "ĵ" U0135 # LATIN SMALL LETTER J WITH CIRCUMFLEX : "Ķ" U0136 # LATIN CAPITAL LETTER K WITH CEDILLA : "Ķ" U0136 # LATIN CAPITAL LETTER K WITH CEDILLA : "Ķ" U0136 # LATIN CAPITAL LETTER K WITH CEDILLA : "Ķ" U0136 # LATIN CAPITAL LETTER K WITH CEDILLA : "ķ" U0137 # LATIN SMALL LETTER K WITH CEDILLA : "ķ" U0137 # LATIN SMALL LETTER K WITH CEDILLA : "ķ" U0137 # LATIN SMALL LETTER K WITH CEDILLA : "ķ" U0137 # LATIN SMALL LETTER K WITH CEDILLA : "ĸ" U0138 # LATIN SMALL LETTER KRA : "Ĺ" U0139 # LATIN CAPITAL LETTER L WITH ACUTE : "Ĺ" U0139 # LATIN CAPITAL LETTER L WITH ACUTE : "Ĺ" U0139 # LATIN CAPITAL LETTER L WITH ACUTE : "Ĺ" U0139 # LATIN CAPITAL LETTER L WITH ACUTE : "ĺ" U013A # LATIN SMALL LETTER L WITH ACUTE : "ĺ" U013A # LATIN SMALL LETTER L WITH ACUTE : "ĺ" U013A # LATIN SMALL LETTER L WITH ACUTE : "ĺ" U013A # LATIN SMALL LETTER L WITH ACUTE : "Ļ" U013B # LATIN CAPITAL LETTER L WITH CEDILLA : "Ļ" U013B # LATIN CAPITAL LETTER L WITH CEDILLA : "Ļ" U013B # LATIN CAPITAL LETTER L WITH CEDILLA : "Ļ" U013B # LATIN CAPITAL LETTER L WITH CEDILLA : "ļ" U013C # LATIN SMALL LETTER L WITH CEDILLA : "ļ" U013C # LATIN SMALL LETTER L WITH CEDILLA : "ļ" U013C # LATIN SMALL LETTER L WITH CEDILLA : "ļ" U013C # LATIN SMALL LETTER L WITH CEDILLA : "Ľ" U013D # LATIN CAPITAL LETTER L WITH CARON : "Ľ" U013D # LATIN CAPITAL LETTER L WITH CARON : "Ľ" U013D # LATIN CAPITAL LETTER L WITH CARON : "Ľ" U013D # LATIN CAPITAL LETTER L WITH CARON : "ľ" U013E # LATIN SMALL LETTER L WITH CARON : "ľ" U013E # LATIN SMALL LETTER L WITH CARON : "ľ" U013E # LATIN SMALL LETTER L WITH CARON : "ľ" U013E # LATIN SMALL LETTER L WITH CARON : "Ł" U0141 # LATIN CAPITAL LETTER L WITH STROKE : "Ł" U0141 # LATIN CAPITAL LETTER L WITH STROKE : "Ł" U0141 # LATIN CAPITAL LETTER L WITH STROKE : "Ł" U0141 # LATIN CAPITAL LETTER L WITH STROKE : "ł" U0142 # LATIN SMALL LETTER L WITH STROKE : "ł" U0142 # LATIN SMALL LETTER L WITH STROKE : "ł" U0142 # LATIN SMALL LETTER L WITH STROKE : "ł" U0142 # LATIN SMALL LETTER L WITH STROKE : "Ń" U0143 # LATIN CAPITAL LETTER N WITH ACUTE : "Ń" U0143 # LATIN CAPITAL LETTER N WITH ACUTE : "Ń" U0143 # LATIN CAPITAL LETTER N WITH ACUTE : "Ń" U0143 # LATIN CAPITAL LETTER N WITH ACUTE : "ń" U0144 # LATIN SMALL LETTER N WITH ACUTE : "ń" U0144 # LATIN SMALL LETTER N WITH ACUTE : "ń" U0144 # LATIN SMALL LETTER N WITH ACUTE : "ń" U0144 # LATIN SMALL LETTER N WITH ACUTE : "Ņ" U0145 # LATIN CAPITAL LETTER N WITH CEDILLA : "Ņ" U0145 # LATIN CAPITAL LETTER N WITH CEDILLA : "Ņ" U0145 # LATIN CAPITAL LETTER N WITH CEDILLA : "Ņ" U0145 # LATIN CAPITAL LETTER N WITH CEDILLA : "ņ" U0146 # LATIN SMALL LETTER N WITH CEDILLA : "ņ" U0146 # LATIN SMALL LETTER N WITH CEDILLA : "ņ" U0146 # LATIN SMALL LETTER N WITH CEDILLA : "ņ" U0146 # LATIN SMALL LETTER N WITH CEDILLA : "Ň" U0147 # LATIN CAPITAL LETTER N WITH CARON : "Ň" U0147 # LATIN CAPITAL LETTER N WITH CARON : "Ň" U0147 # LATIN CAPITAL LETTER N WITH CARON : "Ň" U0147 # LATIN CAPITAL LETTER N WITH CARON : "ň" U0148 # LATIN SMALL LETTER N WITH CARON : "ň" U0148 # LATIN SMALL LETTER N WITH CARON : "ň" U0148 # LATIN SMALL LETTER N WITH CARON : "ň" U0148 # LATIN SMALL LETTER N WITH CARON : "Ŋ" U014A # LATIN CAPITAL LETTER ENG : "ŋ" U014B # LATIN SMALL LETTER ENG : "Ō" U014C # LATIN CAPITAL LETTER O WITH MACRON : "Ō" U014C # LATIN CAPITAL LETTER O WITH MACRON : "Ō" U014C # LATIN CAPITAL LETTER O WITH MACRON : "Ō" U014C # LATIN CAPITAL LETTER O WITH MACRON : "Ō" U014C # LATIN CAPITAL LETTER O WITH MACRON : "Ō" U014C # LATIN CAPITAL LETTER O WITH MACRON : "ō" U014D # LATIN SMALL LETTER O WITH MACRON : "ō" U014D # LATIN SMALL LETTER O WITH MACRON : "ō" U014D # LATIN SMALL LETTER O WITH MACRON : "ō" U014D # LATIN SMALL LETTER O WITH MACRON : "ō" U014D # LATIN SMALL LETTER O WITH MACRON : "ō" U014D # LATIN SMALL LETTER O WITH MACRON : "Ŏ" U014E # LATIN CAPITAL LETTER O WITH BREVE : "Ŏ" U014E # LATIN CAPITAL LETTER O WITH BREVE : "Ŏ" U014E # LATIN CAPITAL LETTER O WITH BREVE : "ŏ" U014F # LATIN SMALL LETTER O WITH BREVE : "ŏ" U014F # LATIN SMALL LETTER O WITH BREVE : "ŏ" U014F # LATIN SMALL LETTER O WITH BREVE : "Ő" U0150 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE : "Ő" U0150 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE : "ő" U0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE : "ő" U0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE : "Ŕ" U0154 # LATIN CAPITAL LETTER R WITH ACUTE : "Ŕ" U0154 # LATIN CAPITAL LETTER R WITH ACUTE : "Ŕ" U0154 # LATIN CAPITAL LETTER R WITH ACUTE : "Ŕ" U0154 # LATIN CAPITAL LETTER R WITH ACUTE : "ŕ" U0155 # LATIN SMALL LETTER R WITH ACUTE : "ŕ" U0155 # LATIN SMALL LETTER R WITH ACUTE : "ŕ" U0155 # LATIN SMALL LETTER R WITH ACUTE : "ŕ" U0155 # LATIN SMALL LETTER R WITH ACUTE : "Ŗ" U0156 # LATIN CAPITAL LETTER R WITH CEDILLA : "Ŗ" U0156 # LATIN CAPITAL LETTER R WITH CEDILLA : "Ŗ" U0156 # LATIN CAPITAL LETTER R WITH CEDILLA : "Ŗ" U0156 # LATIN CAPITAL LETTER R WITH CEDILLA : "ŗ" U0157 # LATIN SMALL LETTER R WITH CEDILLA : "ŗ" U0157 # LATIN SMALL LETTER R WITH CEDILLA : "ŗ" U0157 # LATIN SMALL LETTER R WITH CEDILLA : "ŗ" U0157 # LATIN SMALL LETTER R WITH CEDILLA : "Ř" U0158 # LATIN CAPITAL LETTER R WITH CARON : "Ř" U0158 # LATIN CAPITAL LETTER R WITH CARON : "Ř" U0158 # LATIN CAPITAL LETTER R WITH CARON : "Ř" U0158 # LATIN CAPITAL LETTER R WITH CARON : "ř" U0159 # LATIN SMALL LETTER R WITH CARON : "ř" U0159 # LATIN SMALL LETTER R WITH CARON : "ř" U0159 # LATIN SMALL LETTER R WITH CARON : "ř" U0159 # LATIN SMALL LETTER R WITH CARON : "Ś" U015A # LATIN CAPITAL LETTER S WITH ACUTE : "Ś" U015A # LATIN CAPITAL LETTER S WITH ACUTE : "Ś" U015A # LATIN CAPITAL LETTER S WITH ACUTE : "Ś" U015A # LATIN CAPITAL LETTER S WITH ACUTE : "ś" U015B # LATIN SMALL LETTER S WITH ACUTE : "ś" U015B # LATIN SMALL LETTER S WITH ACUTE : "ś" U015B # LATIN SMALL LETTER S WITH ACUTE : "ś" U015B # LATIN SMALL LETTER S WITH ACUTE : "Ŝ" U015C # LATIN CAPITAL LETTER S WITH CIRCUMFLEX : "Ŝ" U015C # LATIN CAPITAL LETTER S WITH CIRCUMFLEX : "ŝ" U015D # LATIN SMALL LETTER S WITH CIRCUMFLEX : "ŝ" U015D # LATIN SMALL LETTER S WITH CIRCUMFLEX : "Ş" U015E # LATIN CAPITAL LETTER S WITH CEDILLA : "Ş" U015E # LATIN CAPITAL LETTER S WITH CEDILLA : "Ş" U015E # LATIN CAPITAL LETTER S WITH CEDILLA : "Ş" U015E # LATIN CAPITAL LETTER S WITH CEDILLA : "ş" U015F # LATIN SMALL LETTER S WITH CEDILLA : "ş" U015F # LATIN SMALL LETTER S WITH CEDILLA : "ş" U015F # LATIN SMALL LETTER S WITH CEDILLA : "ş" U015F # LATIN SMALL LETTER S WITH CEDILLA : "ş" U015F # LATIN SMALL LETTER S WITH CEDILLA : "Š" U0160 # LATIN CAPITAL LETTER S WITH CARON : "Š" U0160 # LATIN CAPITAL LETTER S WITH CARON : "Š" U0160 # LATIN CAPITAL LETTER S WITH CARON : "Š" U0160 # LATIN CAPITAL LETTER S WITH CARON : "š" U0161 # LATIN SMALL LETTER S WITH CARON : "š" U0161 # LATIN SMALL LETTER S WITH CARON : "š" U0161 # LATIN SMALL LETTER S WITH CARON : "š" U0161 # LATIN SMALL LETTER S WITH CARON : "Ţ" U0162 # LATIN CAPITAL LETTER T WITH CEDILLA : "Ţ" U0162 # LATIN CAPITAL LETTER T WITH CEDILLA : "Ţ" U0162 # LATIN CAPITAL LETTER T WITH CEDILLA : "Ţ" U0162 # LATIN CAPITAL LETTER T WITH CEDILLA : "ţ" U0163 # LATIN SMALL LETTER T WITH CEDILLA : "ţ" U0163 # LATIN SMALL LETTER T WITH CEDILLA : "ţ" U0163 # LATIN SMALL LETTER T WITH CEDILLA : "ţ" U0163 # LATIN SMALL LETTER T WITH CEDILLA : "Ť" U0164 # LATIN CAPITAL LETTER T WITH CARON : "Ť" U0164 # LATIN CAPITAL LETTER T WITH CARON : "Ť" U0164 # LATIN CAPITAL LETTER T WITH CARON : "Ť" U0164 # LATIN CAPITAL LETTER T WITH CARON : "ť" U0165 # LATIN SMALL LETTER T WITH CARON : "ť" U0165 # LATIN SMALL LETTER T WITH CARON : "ť" U0165 # LATIN SMALL LETTER T WITH CARON : "ť" U0165 # LATIN SMALL LETTER T WITH CARON : "Ŧ" U0166 # LATIN CAPITAL LETTER T WITH STROKE : "Ŧ" U0166 # LATIN CAPITAL LETTER T WITH STROKE : "Ŧ" U0166 # LATIN CAPITAL LETTER T WITH STROKE : "Ŧ" U0166 # LATIN CAPITAL LETTER T WITH STROKE : "Ŧ" U0166 # LATIN CAPITAL LETTER T WITH STROKE : "ŧ" U0167 # LATIN SMALL LETTER T WITH STROKE : "ŧ" U0167 # LATIN SMALL LETTER T WITH STROKE : "ŧ" U0167 # LATIN SMALL LETTER T WITH STROKE : "ŧ" U0167 # LATIN SMALL LETTER T WITH STROKE : "ŧ" U0167 # LATIN SMALL LETTER T WITH STROKE : "Ũ" U0168 # LATIN CAPITAL LETTER U WITH TILDE : "Ũ" U0168 # LATIN CAPITAL LETTER U WITH TILDE : "Ũ" U0168 # LATIN CAPITAL LETTER U WITH TILDE : "ũ" U0169 # LATIN SMALL LETTER U WITH TILDE : "ũ" U0169 # LATIN SMALL LETTER U WITH TILDE : "ũ" U0169 # LATIN SMALL LETTER U WITH TILDE : "Ū" U016A # LATIN CAPITAL LETTER U WITH MACRON : "Ū" U016A # LATIN CAPITAL LETTER U WITH MACRON : "Ū" U016A # LATIN CAPITAL LETTER U WITH MACRON : "Ū" U016A # LATIN CAPITAL LETTER U WITH MACRON : "Ū" U016A # LATIN CAPITAL LETTER U WITH MACRON : "Ū" U016A # LATIN CAPITAL LETTER U WITH MACRON : "ū" U016B # LATIN SMALL LETTER U WITH MACRON : "ū" U016B # LATIN SMALL LETTER U WITH MACRON : "ū" U016B # LATIN SMALL LETTER U WITH MACRON : "ū" U016B # LATIN SMALL LETTER U WITH MACRON : "ū" U016B # LATIN SMALL LETTER U WITH MACRON : "ū" U016B # LATIN SMALL LETTER U WITH MACRON : "Ŭ" U016C # LATIN CAPITAL LETTER U WITH BREVE : "Ŭ" U016C # LATIN CAPITAL LETTER U WITH BREVE : "Ŭ" U016C # LATIN CAPITAL LETTER U WITH BREVE : "Ŭ" U016C # LATIN CAPITAL LETTER U WITH BREVE : "ŭ" U016D # LATIN SMALL LETTER U WITH BREVE : "ŭ" U016D # LATIN SMALL LETTER U WITH BREVE : "ŭ" U016D # LATIN SMALL LETTER U WITH BREVE : "ŭ" U016D # LATIN SMALL LETTER U WITH BREVE : "Ů" U016E # LATIN CAPITAL LETTER U WITH RING ABOVE : "Ů" U016E # LATIN CAPITAL LETTER U WITH RING ABOVE : "Ů" U016E # LATIN CAPITAL LETTER U WITH RING ABOVE : "Ů" U016E # LATIN CAPITAL LETTER U WITH RING ABOVE : "ů" U016F # LATIN SMALL LETTER U WITH RING ABOVE : "ů" U016F # LATIN SMALL LETTER U WITH RING ABOVE : "ů" U016F # LATIN SMALL LETTER U WITH RING ABOVE : "ů" U016F # LATIN SMALL LETTER U WITH RING ABOVE : "Ű" U0170 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE : "Ű" U0170 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE : "ű" U0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE : "ű" U0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE : "Ų" U0172 # LATIN CAPITAL LETTER U WITH OGONEK : "Ų" U0172 # LATIN CAPITAL LETTER U WITH OGONEK : "Ų" U0172 # LATIN CAPITAL LETTER U WITH OGONEK : "Ų" U0172 # LATIN CAPITAL LETTER U WITH OGONEK : "Ų" U0172 # LATIN CAPITAL LETTER U WITH OGONEK : "ų" U0173 # LATIN SMALL LETTER U WITH OGONEK : "ų" U0173 # LATIN SMALL LETTER U WITH OGONEK : "ų" U0173 # LATIN SMALL LETTER U WITH OGONEK : "ų" U0173 # LATIN SMALL LETTER U WITH OGONEK : "ų" U0173 # LATIN SMALL LETTER U WITH OGONEK : "Ŵ" U0174 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX : "Ŵ" U0174 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX : "Ŵ" U0174 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX : "ŵ" U0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX : "ŵ" U0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX : "ŵ" U0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX : "Ŷ" U0176 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX : "Ŷ" U0176 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX : "Ŷ" U0176 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX : "ŷ" U0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX : "ŷ" U0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX : "ŷ" U0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX : "Ÿ" U0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS : "Ÿ" U0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS : "Ÿ" U0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS : "Ÿ" U0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS : "Ÿ" U0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS : "Ź" U0179 # LATIN CAPITAL LETTER Z WITH ACUTE : "Ź" U0179 # LATIN CAPITAL LETTER Z WITH ACUTE : "Ź" U0179 # LATIN CAPITAL LETTER Z WITH ACUTE : "Ź" U0179 # LATIN CAPITAL LETTER Z WITH ACUTE : "ź" U017A # LATIN SMALL LETTER Z WITH ACUTE : "ź" U017A # LATIN SMALL LETTER Z WITH ACUTE : "ź" U017A # LATIN SMALL LETTER Z WITH ACUTE : "ź" U017A # LATIN SMALL LETTER Z WITH ACUTE : "Ż" U017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE : "Ż" U017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE : "Ż" U017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE : "ż" U017C # LATIN SMALL LETTER Z WITH DOT ABOVE : "ż" U017C # LATIN SMALL LETTER Z WITH DOT ABOVE : "ż" U017C # LATIN SMALL LETTER Z WITH DOT ABOVE : "Ž" U017D # LATIN CAPITAL LETTER Z WITH CARON : "Ž" U017D # LATIN CAPITAL LETTER Z WITH CARON : "Ž" U017D # LATIN CAPITAL LETTER Z WITH CARON : "Ž" U017D # LATIN CAPITAL LETTER Z WITH CARON : "Ž" U017D # LATIN CAPITAL LETTER Z WITH CARON : "ž" U017E # LATIN SMALL LETTER Z WITH CARON : "ž" U017E # LATIN SMALL LETTER Z WITH CARON : "ž" U017E # LATIN SMALL LETTER Z WITH CARON : "ž" U017E # LATIN SMALL LETTER Z WITH CARON : "ž" U017E # LATIN SMALL LETTER Z WITH CARON : "ƀ" U0180 # LATIN SMALL LETTER B WITH STROKE : "ƀ" U0180 # LATIN SMALL LETTER B WITH STROKE : "ƀ" U0180 # LATIN SMALL LETTER B WITH STROKE : "Ɨ" U0197 # LATIN CAPITAL LETTER I WITH STROKE : "Ɨ" U0197 # LATIN CAPITAL LETTER I WITH STROKE : "Ɨ" U0197 # LATIN CAPITAL LETTER I WITH STROKE : "Ơ" U01A0 # LATIN CAPITAL LETTER O WITH HORN : "Ơ" U01A0 # LATIN CAPITAL LETTER O WITH HORN : "ơ" U01A1 # LATIN SMALL LETTER O WITH HORN : "ơ" U01A1 # LATIN SMALL LETTER O WITH HORN : "Ư" U01AF # LATIN CAPITAL LETTER U WITH HORN : "Ư" U01AF # LATIN CAPITAL LETTER U WITH HORN : "ư" U01B0 # LATIN SMALL LETTER U WITH HORN : "ư" U01B0 # LATIN SMALL LETTER U WITH HORN : "Ƶ" U01B5 # LATIN CAPITAL LETTER Z WITH STROKE : "Ƶ" U01B5 # LATIN CAPITAL LETTER Z WITH STROKE : "Ƶ" U01B5 # LATIN CAPITAL LETTER Z WITH STROKE : "ƶ" U01B6 # LATIN SMALL LETTER Z WITH STROKE : "ƶ" U01B6 # LATIN SMALL LETTER Z WITH STROKE : "ƶ" U01B6 # LATIN SMALL LETTER Z WITH STROKE : "Ǎ" U01CD # LATIN CAPITAL LETTER A WITH CARON : "Ǎ" U01CD # LATIN CAPITAL LETTER A WITH CARON : "ǎ" U01CE # LATIN SMALL LETTER A WITH CARON : "ǎ" U01CE # LATIN SMALL LETTER A WITH CARON : "Ǐ" U01CF # LATIN CAPITAL LETTER I WITH CARON : "Ǐ" U01CF # LATIN CAPITAL LETTER I WITH CARON : "ǐ" U01D0 # LATIN SMALL LETTER I WITH CARON : "ǐ" U01D0 # LATIN SMALL LETTER I WITH CARON : "Ǒ" U01D1 # LATIN CAPITAL LETTER O WITH CARON : "Ǒ" U01D1 # LATIN CAPITAL LETTER O WITH CARON : "ǒ" U01D2 # LATIN SMALL LETTER O WITH CARON : "ǒ" U01D2 # LATIN SMALL LETTER O WITH CARON : "Ǔ" U01D3 # LATIN CAPITAL LETTER U WITH CARON : "Ǔ" U01D3 # LATIN CAPITAL LETTER U WITH CARON : "ǔ" U01D4 # LATIN SMALL LETTER U WITH CARON : "ǔ" U01D4 # LATIN SMALL LETTER U WITH CARON : "Ǖ" U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON : "Ǖ" U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON : "Ǖ" U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON : "Ǖ" U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON : "Ǖ" U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON : "Ǖ" U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON : "Ǖ" U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON : "Ǖ" U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON : "Ǖ" U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON : "ǖ" U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON : "ǖ" U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON : "ǖ" U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON : "ǖ" U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON : "ǖ" U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON : "ǖ" U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON : "ǖ" U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON : "ǖ" U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON : "ǖ" U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON : "Ǘ" U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE : "Ǘ" U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE : "Ǘ" U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE : "Ǘ" U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE : "Ǘ" U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE : "Ǘ" U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE : "Ǘ" U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE : "Ǘ" U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE : "Ǘ" U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE : "ǘ" U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE : "ǘ" U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE : "ǘ" U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE : "ǘ" U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE : "ǘ" U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE : "ǘ" U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE : "ǘ" U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE : "ǘ" U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE : "ǘ" U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE : "Ǚ" U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON : "Ǚ" U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON : "Ǚ" U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON : "Ǚ" U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON : "Ǚ" U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON : "Ǚ" U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON : "ǚ" U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON : "ǚ" U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON : "ǚ" U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON : "ǚ" U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON : "ǚ" U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON : "ǚ" U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON : "Ǜ" U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE : "Ǜ" U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE : "Ǜ" U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE : "Ǜ" U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE : "Ǜ" U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE : "Ǜ" U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE : "ǜ" U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE : "ǜ" U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE : "ǜ" U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE : "ǜ" U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE : "ǜ" U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE : "ǜ" U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON : "Ǡ" U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON : "Ǡ" U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON : "Ǡ" U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON : "Ǡ" U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON : "Ǡ" U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON : "Ǡ" U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON : "Ǡ" U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON : "Ǡ" U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON : "Ǡ" U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON : "ǡ" U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON : "ǡ" U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON : "ǡ" U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON : "ǡ" U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON : "ǡ" U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON : "ǡ" U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON : "ǡ" U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON : "ǡ" U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON : "ǡ" U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON : "Ǣ" U01E2 # LATIN CAPITAL LETTER AE WITH MACRON : "Ǣ" U01E2 # LATIN CAPITAL LETTER AE WITH MACRON : "Ǣ" U01E2 # LATIN CAPITAL LETTER AE WITH MACRON : "ǣ" U01E3 # LATIN SMALL LETTER AE WITH MACRON : "ǣ" U01E3 # LATIN SMALL LETTER AE WITH MACRON : "ǣ" U01E3 # LATIN SMALL LETTER AE WITH MACRON : "Ǥ" U01E4 # LATIN CAPITAL LETTER G WITH STROKE : "Ǥ" U01E4 # LATIN CAPITAL LETTER G WITH STROKE : "Ǥ" U01E4 # LATIN CAPITAL LETTER G WITH STROKE : "ǥ" U01E5 # LATIN SMALL LETTER G WITH STROKE : "ǥ" U01E5 # LATIN SMALL LETTER G WITH STROKE : "ǥ" U01E5 # LATIN SMALL LETTER G WITH STROKE : "Ǧ" U01E6 # LATIN CAPITAL LETTER G WITH CARON : "Ǧ" U01E6 # LATIN CAPITAL LETTER G WITH CARON : "ǧ" U01E7 # LATIN SMALL LETTER G WITH CARON : "ǧ" U01E7 # LATIN SMALL LETTER G WITH CARON : "Ǩ" U01E8 # LATIN CAPITAL LETTER K WITH CARON : "Ǩ" U01E8 # LATIN CAPITAL LETTER K WITH CARON : "ǩ" U01E9 # LATIN SMALL LETTER K WITH CARON : "ǩ" U01E9 # LATIN SMALL LETTER K WITH CARON : "Ǫ" U01EA # LATIN CAPITAL LETTER O WITH OGONEK : "Ǫ" U01EA # LATIN CAPITAL LETTER O WITH OGONEK : "Ǫ" U01EA # LATIN CAPITAL LETTER O WITH OGONEK : "Ǫ" U01EA # LATIN CAPITAL LETTER O WITH OGONEK : "Ǫ" U01EA # LATIN CAPITAL LETTER O WITH OGONEK : "ǫ" U01EB # LATIN SMALL LETTER O WITH OGONEK : "ǫ" U01EB # LATIN SMALL LETTER O WITH OGONEK : "ǫ" U01EB # LATIN SMALL LETTER O WITH OGONEK : "ǫ" U01EB # LATIN SMALL LETTER O WITH OGONEK : "ǫ" U01EB # LATIN SMALL LETTER O WITH OGONEK : "Ǭ" U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON : "Ǭ" U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON : "Ǭ" U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON : "Ǭ" U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON : "Ǭ" U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON : "Ǭ" U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON : "Ǭ" U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON : "Ǭ" U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON : "Ǭ" U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON : "Ǯ" U01EE # LATIN CAPITAL LETTER EZH WITH CARON : "Ǯ" U01EE # LATIN CAPITAL LETTER EZH WITH CARON : "ǯ" U01EF # LATIN SMALL LETTER EZH WITH CARON : "ǯ" U01EF # LATIN SMALL LETTER EZH WITH CARON : "ǰ" U01F0 # LATIN SMALL LETTER J WITH CARON : "ǰ" U01F0 # LATIN SMALL LETTER J WITH CARON : "Ǵ" U01F4 # LATIN CAPITAL LETTER G WITH ACUTE : "Ǵ" U01F4 # LATIN CAPITAL LETTER G WITH ACUTE : "Ǵ" U01F4 # LATIN CAPITAL LETTER G WITH ACUTE : "ǵ" U01F5 # LATIN SMALL LETTER G WITH ACUTE : "ǵ" U01F5 # LATIN SMALL LETTER G WITH ACUTE : "ǵ" U01F5 # LATIN SMALL LETTER G WITH ACUTE : "Ǹ" U01F8 # LATIN CAPITAL LETTER N WITH GRAVE : "Ǹ" U01F8 # LATIN CAPITAL LETTER N WITH GRAVE : "ǹ" U01F9 # LATIN SMALL LETTER N WITH GRAVE : "ǹ" U01F9 # LATIN SMALL LETTER N WITH GRAVE : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE : "Ǽ" U01FC # LATIN CAPITAL LETTER AE WITH ACUTE : "Ǽ" U01FC # LATIN CAPITAL LETTER AE WITH ACUTE : "Ǽ" U01FC # LATIN CAPITAL LETTER AE WITH ACUTE : "ǽ" U01FD # LATIN SMALL LETTER AE WITH ACUTE : "ǽ" U01FD # LATIN SMALL LETTER AE WITH ACUTE : "ǽ" U01FD # LATIN SMALL LETTER AE WITH ACUTE : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE : "Ȁ" U0200 # LATIN CAPITAL LETTER A WITH DOUBLE GRAVE : "ȁ" U0201 # LATIN SMALL LETTER A WITH DOUBLE GRAVE : "Ȃ" U0202 # LATIN CAPITAL LETTER A WITH INVERTED BREVE : "ȃ" U0203 # LATIN SMALL LETTER A WITH INVERTED BREVE : "Ȅ" U0204 # LATIN CAPITAL LETTER E WITH DOUBLE GRAVE : "ȅ" U0205 # LATIN SMALL LETTER E WITH DOUBLE GRAVE : "Ȇ" U0206 # LATIN CAPITAL LETTER E WITH INVERTED BREVE : "ȇ" U0207 # LATIN SMALL LETTER E WITH INVERTED BREVE : "Ȉ" U0208 # LATIN CAPITAL LETTER I WITH DOUBLE GRAVE : "ȉ" U0209 # LATIN SMALL LETTER I WITH DOUBLE GRAVE : "Ȋ" U020A # LATIN CAPITAL LETTER I WITH INVERTED BREVE : "ȋ" U020B # LATIN SMALL LETTER I WITH INVERTED BREVE : "Ȍ" U020C # LATIN CAPITAL LETTER O WITH DOUBLE GRAVE : "ȍ" U020D # LATIN SMALL LETTER O WITH DOUBLE GRAVE : "Ȏ" U020E # LATIN CAPITAL LETTER O WITH INVERTED BREVE : "ȏ" U020F # LATIN SMALL LETTER O WITH INVERTED BREVE : "Ȑ" U0210 # LATIN CAPITAL LETTER R WITH DOUBLE GRAVE : "ȑ" U0211 # LATIN SMALL LETTER R WITH DOUBLE GRAVE : "Ȓ" U0212 # LATIN CAPITAL LETTER R WITH INVERTED BREVE : "ȓ" U0213 # LATIN SMALL LETTER R WITH INVERTED BREVE : "Ȕ" U0214 # LATIN CAPITAL LETTER U WITH DOUBLE GRAVE : "ȕ" U0215 # LATIN SMALL LETTER U WITH DOUBLE GRAVE : "Ȗ" U0216 # LATIN CAPITAL LETTER U WITH INVERTED BREVE : "ȗ" U0217 # LATIN SMALL LETTER U WITH INVERTED BREVE : "Ȟ" U021E # LATIN CAPITAL LETTER H WITH CARON : "Ȟ" U021E # LATIN CAPITAL LETTER H WITH CARON : "ȟ" U021F # LATIN SMALL LETTER H WITH CARON : "ȟ" U021F # LATIN SMALL LETTER H WITH CARON : "Ȧ" U0226 # LATIN CAPITAL LETTER A WITH DOT ABOVE : "Ȧ" U0226 # LATIN CAPITAL LETTER A WITH DOT ABOVE : "ȧ" U0227 # LATIN SMALL LETTER A WITH DOT ABOVE : "ȧ" U0227 # LATIN SMALL LETTER A WITH DOT ABOVE : "Ȩ" U0228 # LATIN CAPITAL LETTER E WITH CEDILLA : "Ȩ" U0228 # LATIN CAPITAL LETTER E WITH CEDILLA : "ȩ" U0229 # LATIN SMALL LETTER E WITH CEDILLA : "ȩ" U0229 # LATIN SMALL LETTER E WITH CEDILLA : "Ȫ" U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON : "Ȫ" U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON : "Ȫ" U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON : "Ȫ" U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON : "Ȫ" U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON : "Ȫ" U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON : "Ȫ" U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON : "Ȫ" U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON : "Ȫ" U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON : "ȫ" U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON : "ȫ" U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON : "ȫ" U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON : "ȫ" U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON : "ȫ" U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON : "ȫ" U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON : "ȫ" U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON : "ȫ" U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON : "ȫ" U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON : "Ȭ" U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON : "Ȭ" U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON : "Ȭ" U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON : "Ȭ" U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON : "Ȭ" U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON : "Ȭ" U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON : "Ȭ" U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON : "Ȭ" U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON : "Ȭ" U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON : "ȭ" U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON : "ȭ" U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON : "ȭ" U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON : "ȭ" U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON : "ȭ" U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON : "ȭ" U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON : "ȭ" U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON : "ȭ" U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON : "ȭ" U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON : "Ȯ" U022E # LATIN CAPITAL LETTER O WITH DOT ABOVE : "Ȯ" U022E # LATIN CAPITAL LETTER O WITH DOT ABOVE : "ȯ" U022F # LATIN SMALL LETTER O WITH DOT ABOVE : "ȯ" U022F # LATIN SMALL LETTER O WITH DOT ABOVE : "Ȱ" U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON : "Ȱ" U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON : "Ȱ" U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON : "Ȱ" U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON : "Ȱ" U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON : "Ȱ" U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON : "Ȱ" U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON : "Ȱ" U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON : "Ȱ" U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON : "ȱ" U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON : "ȱ" U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON : "ȱ" U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON : "ȱ" U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON : "ȱ" U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON : "ȱ" U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON : "ȱ" U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON : "ȱ" U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON : "ȱ" U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON : "Ȳ" U0232 # LATIN CAPITAL LETTER Y WITH MACRON : "Ȳ" U0232 # LATIN CAPITAL LETTER Y WITH MACRON : "Ȳ" U0232 # LATIN CAPITAL LETTER Y WITH MACRON : "ȳ" U0233 # LATIN SMALL LETTER Y WITH MACRON : "ȳ" U0233 # LATIN SMALL LETTER Y WITH MACRON : "ȳ" U0233 # LATIN SMALL LETTER Y WITH MACRON : "ə" U0259 # LATIN SMALL LETTER SCHWA : "ɨ" U0268 # LATIN SMALL LETTER I WITH STROKE : "ɨ" U0268 # LATIN SMALL LETTER I WITH STROKE : "ɨ" U0268 # LATIN SMALL LETTER I WITH STROKE : "ʡ" U02A1 # LATIN LETTER GLOTTAL STOP WITH STROKE : "ʡ" U02A1 # LATIN LETTER GLOTTAL STOP WITH STROKE : "ʰ" U02B0 # MODIFIER LETTER SMALL H : "ʰ" U02B0 # MODIFIER LETTER SMALL H : "ʰ" U02B0 # MODIFIER LETTER SMALL H : "ʰ" U02B0 # MODIFIER LETTER SMALL H : "ʱ" U02B1 # MODIFIER LETTER SMALL H WITH HOOK : "ʱ" U02B1 # MODIFIER LETTER SMALL H WITH HOOK : "ʱ" U02B1 # MODIFIER LETTER SMALL H WITH HOOK : "ʱ" U02B1 # MODIFIER LETTER SMALL H WITH HOOK : "ʲ" U02B2 # MODIFIER LETTER SMALL J : "ʲ" U02B2 # MODIFIER LETTER SMALL J : "ʲ" U02B2 # MODIFIER LETTER SMALL J : "ʲ" U02B2 # MODIFIER LETTER SMALL J : "ʳ" U02B3 # MODIFIER LETTER SMALL R : "ʳ" U02B3 # MODIFIER LETTER SMALL R : "ʳ" U02B3 # MODIFIER LETTER SMALL R : "ʳ" U02B3 # MODIFIER LETTER SMALL R : "ʴ" U02B4 # MODIFIER LETTER SMALL TURNED R : "ʴ" U02B4 # MODIFIER LETTER SMALL TURNED R : "ʴ" U02B4 # MODIFIER LETTER SMALL TURNED R : "ʴ" U02B4 # MODIFIER LETTER SMALL TURNED R : "ʵ" U02B5 # MODIFIER LETTER SMALL TURNED R WITH HOOK : "ʵ" U02B5 # MODIFIER LETTER SMALL TURNED R WITH HOOK : "ʵ" U02B5 # MODIFIER LETTER SMALL TURNED R WITH HOOK : "ʵ" U02B5 # MODIFIER LETTER SMALL TURNED R WITH HOOK : "ʶ" U02B6 # MODIFIER LETTER SMALL CAPITAL INVERTED R : "ʶ" U02B6 # MODIFIER LETTER SMALL CAPITAL INVERTED R : "ʶ" U02B6 # MODIFIER LETTER SMALL CAPITAL INVERTED R : "ʶ" U02B6 # MODIFIER LETTER SMALL CAPITAL INVERTED R : "ʷ" U02B7 # MODIFIER LETTER SMALL W : "ʷ" U02B7 # MODIFIER LETTER SMALL W : "ʷ" U02B7 # MODIFIER LETTER SMALL W : "ʷ" U02B7 # MODIFIER LETTER SMALL W : "ʸ" U02B8 # MODIFIER LETTER SMALL Y : "ʸ" U02B8 # MODIFIER LETTER SMALL Y : "ʸ" U02B8 # MODIFIER LETTER SMALL Y : "ʸ" U02B8 # MODIFIER LETTER SMALL Y : "ˠ" U02E0 # MODIFIER LETTER SMALL GAMMA : "ˠ" U02E0 # MODIFIER LETTER SMALL GAMMA : "ˠ" U02E0 # MODIFIER LETTER SMALL GAMMA : "ˠ" U02E0 # MODIFIER LETTER SMALL GAMMA : "ˡ" U02E1 # MODIFIER LETTER SMALL L : "ˡ" U02E1 # MODIFIER LETTER SMALL L : "ˡ" U02E1 # MODIFIER LETTER SMALL L : "ˡ" U02E1 # MODIFIER LETTER SMALL L : "ˢ" U02E2 # MODIFIER LETTER SMALL S : "ˢ" U02E2 # MODIFIER LETTER SMALL S : "ˢ" U02E2 # MODIFIER LETTER SMALL S : "ˢ" U02E2 # MODIFIER LETTER SMALL S : "ˣ" U02E3 # MODIFIER LETTER SMALL X : "ˣ" U02E3 # MODIFIER LETTER SMALL X : "ˣ" U02E3 # MODIFIER LETTER SMALL X : "ˣ" U02E3 # MODIFIER LETTER SMALL X : "ˤ" U02E4 # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP : "ˤ" U02E4 # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP : "ˤ" U02E4 # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP : "ˤ" U02E4 # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP : "̈́" U0344 # COMBINING GREEK DIALYTIKA TONOS : "̈́" U0344 # COMBINING GREEK DIALYTIKA TONOS : "̈́" U0344 # COMBINING GREEK DIALYTIKA TONOS : "̈́" U0344 # COMBINING GREEK DIALYTIKA TONOS : "̈́" U0344 # COMBINING GREEK DIALYTIKA TONOS : "΅" U0385 # GREEK DIALYTIKA TONOS : "΅" U0385 # GREEK DIALYTIKA TONOS : "΅" U0385 # GREEK DIALYTIKA TONOS : "΅" U0385 # GREEK DIALYTIKA TONOS : "΅" U0385 # GREEK DIALYTIKA TONOS : "΅" U0385 # GREEK DIALYTIKA TONOS : "Ά" U0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS : "Ά" U0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS : "Ά" U0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS : "Ά" U0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS : "Έ" U0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS : "Έ" U0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS : "Έ" U0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS : "Έ" U0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS : "Ή" U0389 # GREEK CAPITAL LETTER ETA WITH TONOS : "Ή" U0389 # GREEK CAPITAL LETTER ETA WITH TONOS : "Ή" U0389 # GREEK CAPITAL LETTER ETA WITH TONOS : "Ή" U0389 # GREEK CAPITAL LETTER ETA WITH TONOS : "Ί" U038A # GREEK CAPITAL LETTER IOTA WITH TONOS : "Ί" U038A # GREEK CAPITAL LETTER IOTA WITH TONOS : "Ί" U038A # GREEK CAPITAL LETTER IOTA WITH TONOS : "Ί" U038A # GREEK CAPITAL LETTER IOTA WITH TONOS : "Ό" U038C # GREEK CAPITAL LETTER OMICRON WITH TONOS : "Ό" U038C # GREEK CAPITAL LETTER OMICRON WITH TONOS : "Ό" U038C # GREEK CAPITAL LETTER OMICRON WITH TONOS : "Ό" U038C # GREEK CAPITAL LETTER OMICRON WITH TONOS : "Ύ" U038E # GREEK CAPITAL LETTER UPSILON WITH TONOS : "Ύ" U038E # GREEK CAPITAL LETTER UPSILON WITH TONOS : "Ύ" U038E # GREEK CAPITAL LETTER UPSILON WITH TONOS : "Ύ" U038E # GREEK CAPITAL LETTER UPSILON WITH TONOS : "Ώ" U038F # GREEK CAPITAL LETTER OMEGA WITH TONOS : "Ώ" U038F # GREEK CAPITAL LETTER OMEGA WITH TONOS : "Ώ" U038F # GREEK CAPITAL LETTER OMEGA WITH TONOS : "Ώ" U038F # GREEK CAPITAL LETTER OMEGA WITH TONOS : "ΐ" U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS : "ΐ" U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS : "ΐ" U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS : "ΐ" U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS : "ΐ" U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS : "ΐ" U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS : "ΐ" U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS : "ΐ" U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS : "ΐ" U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS : "ΐ" U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS : "ΐ" U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS : "Ϊ" U03AA # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA : "Ϊ" U03AA # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA : "Ϊ" U03AA # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA : "Ϋ" U03AB # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA : "Ϋ" U03AB # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA : "Ϋ" U03AB # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA : "ά" U03AC # GREEK SMALL LETTER ALPHA WITH TONOS : "ά" U03AC # GREEK SMALL LETTER ALPHA WITH TONOS : "ά" U03AC # GREEK SMALL LETTER ALPHA WITH TONOS : "ά" U03AC # GREEK SMALL LETTER ALPHA WITH TONOS : "έ" U03AD # GREEK SMALL LETTER EPSILON WITH TONOS : "έ" U03AD # GREEK SMALL LETTER EPSILON WITH TONOS : "έ" U03AD # GREEK SMALL LETTER EPSILON WITH TONOS : "έ" U03AD # GREEK SMALL LETTER EPSILON WITH TONOS : "ή" U03AE # GREEK SMALL LETTER ETA WITH TONOS : "ή" U03AE # GREEK SMALL LETTER ETA WITH TONOS : "ή" U03AE # GREEK SMALL LETTER ETA WITH TONOS : "ή" U03AE # GREEK SMALL LETTER ETA WITH TONOS : "ί" U03AF # GREEK SMALL LETTER IOTA WITH TONOS : "ί" U03AF # GREEK SMALL LETTER IOTA WITH TONOS : "ί" U03AF # GREEK SMALL LETTER IOTA WITH TONOS : "ΰ" U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS : "ΰ" U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS : "ΰ" U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS : "ΰ" U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS : "ΰ" U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS : "ΰ" U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS : "ΰ" U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS : "ΰ" U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS : "ΰ" U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS : "ΰ" U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS : "ΰ" U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS : "ϊ" U03CA # GREEK SMALL LETTER IOTA WITH DIALYTIKA : "ϊ" U03CA # GREEK SMALL LETTER IOTA WITH DIALYTIKA : "ϊ" U03CA # GREEK SMALL LETTER IOTA WITH DIALYTIKA : "ϋ" U03CB # GREEK SMALL LETTER UPSILON WITH DIALYTIKA : "ϋ" U03CB # GREEK SMALL LETTER UPSILON WITH DIALYTIKA : "ϋ" U03CB # GREEK SMALL LETTER UPSILON WITH DIALYTIKA : "ό" U03CC # GREEK SMALL LETTER OMICRON WITH TONOS : "ό" U03CC # GREEK SMALL LETTER OMICRON WITH TONOS : "ό" U03CC # GREEK SMALL LETTER OMICRON WITH TONOS : "ό" U03CC # GREEK SMALL LETTER OMICRON WITH TONOS : "ύ" U03CD # GREEK SMALL LETTER UPSILON WITH TONOS : "ύ" U03CD # GREEK SMALL LETTER UPSILON WITH TONOS : "ύ" U03CD # GREEK SMALL LETTER UPSILON WITH TONOS : "ύ" U03CD # GREEK SMALL LETTER UPSILON WITH TONOS : "ώ" U03CE # GREEK SMALL LETTER OMEGA WITH TONOS : "ώ" U03CE # GREEK SMALL LETTER OMEGA WITH TONOS : "ώ" U03CE # GREEK SMALL LETTER OMEGA WITH TONOS : "ώ" U03CE # GREEK SMALL LETTER OMEGA WITH TONOS : "ϔ" U03D4 # GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL : "Ѐ" U0400 # CYRILLIC CAPITAL LETTER IE WITH GRAVE : "Ѐ" U0400 # CYRILLIC CAPITAL LETTER IE WITH GRAVE : "Ё" U0401 # CYRILLIC CAPITAL LETTER IO : "Ё" U0401 # CYRILLIC CAPITAL LETTER IO : "Ѓ" U0403 # CYRILLIC CAPITAL LETTER GJE : "Ѓ" U0403 # CYRILLIC CAPITAL LETTER GJE : "Ѓ" U0403 # CYRILLIC CAPITAL LETTER GJE : "Ї" U0407 # CYRILLIC CAPITAL LETTER YI : "Ї" U0407 # CYRILLIC CAPITAL LETTER YI : "Ќ" U040C # CYRILLIC CAPITAL LETTER KJE : "Ќ" U040C # CYRILLIC CAPITAL LETTER KJE : "Ќ" U040C # CYRILLIC CAPITAL LETTER KJE : "Ѝ" U040D # CYRILLIC CAPITAL LETTER I WITH GRAVE : "Ѝ" U040D # CYRILLIC CAPITAL LETTER I WITH GRAVE : "Ў" U040E # CYRILLIC CAPITAL LETTER SHORT U : "Ў" U040E # CYRILLIC CAPITAL LETTER SHORT U : "Ў" U040E # CYRILLIC CAPITAL LETTER SHORT U : "Й" U0419 # CYRILLIC CAPITAL LETTER SHORT I : "Й" U0419 # CYRILLIC CAPITAL LETTER SHORT I : "Й" U0419 # CYRILLIC CAPITAL LETTER SHORT I : "й" U0439 # CYRILLIC SMALL LETTER SHORT I : "й" U0439 # CYRILLIC SMALL LETTER SHORT I : "й" U0439 # CYRILLIC SMALL LETTER SHORT I : "ѐ" U0450 # CYRILLIC SMALL LETTER IE WITH GRAVE : "ѐ" U0450 # CYRILLIC SMALL LETTER IE WITH GRAVE : "ё" U0451 # CYRILLIC SMALL LETTER IO : "ё" U0451 # CYRILLIC SMALL LETTER IO : "ѓ" U0453 # CYRILLIC SMALL LETTER GJE : "ѓ" U0453 # CYRILLIC SMALL LETTER GJE : "ѓ" U0453 # CYRILLIC SMALL LETTER GJE : "ї" U0457 # CYRILLIC SMALL LETTER YI : "ї" U0457 # CYRILLIC SMALL LETTER YI : "ќ" U045C # CYRILLIC SMALL LETTER KJE : "ќ" U045C # CYRILLIC SMALL LETTER KJE : "ќ" U045C # CYRILLIC SMALL LETTER KJE : "ѝ" U045D # CYRILLIC SMALL LETTER I WITH GRAVE : "ѝ" U045D # CYRILLIC SMALL LETTER I WITH GRAVE : "ў" U045E # CYRILLIC SMALL LETTER SHORT U : "ў" U045E # CYRILLIC SMALL LETTER SHORT U : "ў" U045E # CYRILLIC SMALL LETTER SHORT U : "Ѷ" U0476 # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT : "ѷ" U0477 # CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT : "Ғ" U0492 # CYRILLIC CAPITAL LETTER GHE WITH STROKE : "Ғ" U0492 # CYRILLIC CAPITAL LETTER GHE WITH STROKE : "ғ" U0493 # CYRILLIC SMALL LETTER GHE WITH STROKE : "ғ" U0493 # CYRILLIC SMALL LETTER GHE WITH STROKE : "Ҟ" U049E # CYRILLIC CAPITAL LETTER KA WITH STROKE : "Ҟ" U049E # CYRILLIC CAPITAL LETTER KA WITH STROKE : "ҟ" U049F # CYRILLIC SMALL LETTER KA WITH STROKE : "ҟ" U049F # CYRILLIC SMALL LETTER KA WITH STROKE : "Ұ" U04B0 # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE : "Ұ" U04B0 # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE : "ұ" U04B1 # CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE : "ұ" U04B1 # CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE : "Ӂ" U04C1 # CYRILLIC CAPITAL LETTER ZHE WITH BREVE : "Ӂ" U04C1 # CYRILLIC CAPITAL LETTER ZHE WITH BREVE : "Ӂ" U04C1 # CYRILLIC CAPITAL LETTER ZHE WITH BREVE : "ӂ" U04C2 # CYRILLIC SMALL LETTER ZHE WITH BREVE : "ӂ" U04C2 # CYRILLIC SMALL LETTER ZHE WITH BREVE : "ӂ" U04C2 # CYRILLIC SMALL LETTER ZHE WITH BREVE : "Ӑ" U04D0 # CYRILLIC CAPITAL LETTER A WITH BREVE : "Ӑ" U04D0 # CYRILLIC CAPITAL LETTER A WITH BREVE : "Ӑ" U04D0 # CYRILLIC CAPITAL LETTER A WITH BREVE : "ӑ" U04D1 # CYRILLIC SMALL LETTER A WITH BREVE : "ӑ" U04D1 # CYRILLIC SMALL LETTER A WITH BREVE : "ӑ" U04D1 # CYRILLIC SMALL LETTER A WITH BREVE : "Ӓ" U04D2 # CYRILLIC CAPITAL LETTER A WITH DIAERESIS : "Ӓ" U04D2 # CYRILLIC CAPITAL LETTER A WITH DIAERESIS : "ӓ" U04D3 # CYRILLIC SMALL LETTER A WITH DIAERESIS : "ӓ" U04D3 # CYRILLIC SMALL LETTER A WITH DIAERESIS : "Ӗ" U04D6 # CYRILLIC CAPITAL LETTER IE WITH BREVE : "Ӗ" U04D6 # CYRILLIC CAPITAL LETTER IE WITH BREVE : "Ӗ" U04D6 # CYRILLIC CAPITAL LETTER IE WITH BREVE : "ӗ" U04D7 # CYRILLIC SMALL LETTER IE WITH BREVE : "ӗ" U04D7 # CYRILLIC SMALL LETTER IE WITH BREVE : "ӗ" U04D7 # CYRILLIC SMALL LETTER IE WITH BREVE : "Ӛ" U04DA # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS : "Ӛ" U04DA # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS : "ӛ" U04DB # CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS : "ӛ" U04DB # CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS : "Ӝ" U04DC # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS : "Ӝ" U04DC # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS : "ӝ" U04DD # CYRILLIC SMALL LETTER ZHE WITH DIAERESIS : "ӝ" U04DD # CYRILLIC SMALL LETTER ZHE WITH DIAERESIS : "Ӟ" U04DE # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS : "Ӟ" U04DE # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS : "ӟ" U04DF # CYRILLIC SMALL LETTER ZE WITH DIAERESIS : "ӟ" U04DF # CYRILLIC SMALL LETTER ZE WITH DIAERESIS : "Ӣ" U04E2 # CYRILLIC CAPITAL LETTER I WITH MACRON : "Ӣ" U04E2 # CYRILLIC CAPITAL LETTER I WITH MACRON : "Ӣ" U04E2 # CYRILLIC CAPITAL LETTER I WITH MACRON : "ӣ" U04E3 # CYRILLIC SMALL LETTER I WITH MACRON : "ӣ" U04E3 # CYRILLIC SMALL LETTER I WITH MACRON : "ӣ" U04E3 # CYRILLIC SMALL LETTER I WITH MACRON : "Ӥ" U04E4 # CYRILLIC CAPITAL LETTER I WITH DIAERESIS : "Ӥ" U04E4 # CYRILLIC CAPITAL LETTER I WITH DIAERESIS : "ӥ" U04E5 # CYRILLIC SMALL LETTER I WITH DIAERESIS : "ӥ" U04E5 # CYRILLIC SMALL LETTER I WITH DIAERESIS : "Ӧ" U04E6 # CYRILLIC CAPITAL LETTER O WITH DIAERESIS : "Ӧ" U04E6 # CYRILLIC CAPITAL LETTER O WITH DIAERESIS : "ӧ" U04E7 # CYRILLIC SMALL LETTER O WITH DIAERESIS : "ӧ" U04E7 # CYRILLIC SMALL LETTER O WITH DIAERESIS : "Ӫ" U04EA # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS : "Ӫ" U04EA # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS : "ӫ" U04EB # CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS : "ӫ" U04EB # CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS : "Ӭ" U04EC # CYRILLIC CAPITAL LETTER E WITH DIAERESIS : "Ӭ" U04EC # CYRILLIC CAPITAL LETTER E WITH DIAERESIS : "ӭ" U04ED # CYRILLIC SMALL LETTER E WITH DIAERESIS : "ӭ" U04ED # CYRILLIC SMALL LETTER E WITH DIAERESIS : "Ӯ" U04EE # CYRILLIC CAPITAL LETTER U WITH MACRON : "Ӯ" U04EE # CYRILLIC CAPITAL LETTER U WITH MACRON : "Ӯ" U04EE # CYRILLIC CAPITAL LETTER U WITH MACRON : "ӯ" U04EF # CYRILLIC SMALL LETTER U WITH MACRON : "ӯ" U04EF # CYRILLIC SMALL LETTER U WITH MACRON : "ӯ" U04EF # CYRILLIC SMALL LETTER U WITH MACRON : "Ӱ" U04F0 # CYRILLIC CAPITAL LETTER U WITH DIAERESIS : "Ӱ" U04F0 # CYRILLIC CAPITAL LETTER U WITH DIAERESIS : "ӱ" U04F1 # CYRILLIC SMALL LETTER U WITH DIAERESIS : "ӱ" U04F1 # CYRILLIC SMALL LETTER U WITH DIAERESIS : "Ӳ" U04F2 # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE : "Ӳ" U04F2 # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE : "ӳ" U04F3 # CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE : "ӳ" U04F3 # CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE : "Ӵ" U04F4 # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS : "Ӵ" U04F4 # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS : "ӵ" U04F5 # CYRILLIC SMALL LETTER CHE WITH DIAERESIS : "ӵ" U04F5 # CYRILLIC SMALL LETTER CHE WITH DIAERESIS : "Ӹ" U04F8 # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS : "Ӹ" U04F8 # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS : "ӹ" U04F9 # CYRILLIC SMALL LETTER YERU WITH DIAERESIS : "ӹ" U04F9 # CYRILLIC SMALL LETTER YERU WITH DIAERESIS : "آ" U0622 # ARABIC LETTER ALEF WITH MADDA ABOVE : "أ" U0623 # ARABIC LETTER ALEF WITH HAMZA ABOVE : "ؤ" U0624 # ARABIC LETTER WAW WITH HAMZA ABOVE : "إ" U0625 # ARABIC LETTER ALEF WITH HAMZA BELOW : "ئ" U0626 # ARABIC LETTER YEH WITH HAMZA ABOVE : "ۀ" U06C0 # ARABIC LETTER HEH WITH YEH ABOVE : "ۂ" U06C2 # ARABIC LETTER HEH GOAL WITH HAMZA ABOVE : "ۓ" U06D3 # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE : "ऩ" U0929 # DEVANAGARI LETTER NNNA : "ऱ" U0931 # DEVANAGARI LETTER RRA : "ऴ" U0934 # DEVANAGARI LETTER LLLA : "क़" U0958 # DEVANAGARI LETTER QA : "ख़" U0959 # DEVANAGARI LETTER KHHA : "ग़" U095A # DEVANAGARI LETTER GHHA : "ज़" U095B # DEVANAGARI LETTER ZA : "ड़" U095C # DEVANAGARI LETTER DDDHA : "ढ़" U095D # DEVANAGARI LETTER RHA : "फ़" U095E # DEVANAGARI LETTER FA : "य़" U095F # DEVANAGARI LETTER YYA : "ো" U09CB # BENGALI VOWEL SIGN O : "ৌ" U09CC # BENGALI VOWEL SIGN AU : "ড়" U09DC # BENGALI LETTER RRA : "ঢ়" U09DD # BENGALI LETTER RHA : "য়" U09DF # BENGALI LETTER YYA : "ਲ਼" U0A33 # GURMUKHI LETTER LLA : "ਸ਼" U0A36 # GURMUKHI LETTER SHA : "ਖ਼" U0A59 # GURMUKHI LETTER KHHA : "ਗ਼" U0A5A # GURMUKHI LETTER GHHA : "ਜ਼" U0A5B # GURMUKHI LETTER ZA : "ਫ਼" U0A5E # GURMUKHI LETTER FA : "ୈ" U0B48 # ORIYA VOWEL SIGN AI : "ୋ" U0B4B # ORIYA VOWEL SIGN O : "ୌ" U0B4C # ORIYA VOWEL SIGN AU : "ଡ଼" U0B5C # ORIYA LETTER RRA : "ଢ଼" U0B5D # ORIYA LETTER RHA : "ஔ" U0B94 # TAMIL LETTER AU : "ொ" U0BCA # TAMIL VOWEL SIGN O : "ோ" U0BCB # TAMIL VOWEL SIGN OO : "ௌ" U0BCC # TAMIL VOWEL SIGN AU : "ై" U0C48 # TELUGU VOWEL SIGN AI : "ೀ" U0CC0 # KANNADA VOWEL SIGN II : "ೇ" U0CC7 # KANNADA VOWEL SIGN EE : "ೈ" U0CC8 # KANNADA VOWEL SIGN AI : "ೊ" U0CCA # KANNADA VOWEL SIGN O : "ೋ" U0CCB # KANNADA VOWEL SIGN OO /* : "ೋ" U0CCB # KANNADA VOWEL SIGN OO */ : "ൊ" U0D4A # MALAYALAM VOWEL SIGN O : "ോ" U0D4B # MALAYALAM VOWEL SIGN OO : "ൌ" U0D4C # MALAYALAM VOWEL SIGN AU : "ේ" U0DDA # SINHALA VOWEL SIGN DIGA KOMBUVA : "ො" U0DDC # SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA : "ෝ" U0DDD # SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA /* : "ෝ" U0DDD # SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA */ : "ෞ" U0DDE # SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA : "གྷ" U0F43 # TIBETAN LETTER GHA : "ཌྷ" U0F4D # TIBETAN LETTER DDHA : "དྷ" U0F52 # TIBETAN LETTER DHA : "བྷ" U0F57 # TIBETAN LETTER BHA : "ཛྷ" U0F5C # TIBETAN LETTER DZHA : "ཀྵ" U0F69 # TIBETAN LETTER KSSA : "ཱི" U0F73 # TIBETAN VOWEL SIGN II : "ཱུ" U0F75 # TIBETAN VOWEL SIGN UU : "ྲྀ" U0F76 # TIBETAN VOWEL SIGN VOCALIC R : "ླྀ" U0F78 # TIBETAN VOWEL SIGN VOCALIC L : "ཱྀ" U0F81 # TIBETAN VOWEL SIGN REVERSED II : "ྒྷ" U0F93 # TIBETAN SUBJOINED LETTER GHA : "ྜྷ" U0F9D # TIBETAN SUBJOINED LETTER DDHA : "ྡྷ" U0FA2 # TIBETAN SUBJOINED LETTER DHA : "ྦྷ" U0FA7 # TIBETAN SUBJOINED LETTER BHA : "ྫྷ" U0FAC # TIBETAN SUBJOINED LETTER DZHA : "ྐྵ" U0FB9 # TIBETAN SUBJOINED LETTER KSSA : "ဦ" U1026 # MYANMAR LETTER UU : "Ḁ" U1E00 # LATIN CAPITAL LETTER A WITH RING BELOW : "ḁ" U1E01 # LATIN SMALL LETTER A WITH RING BELOW : "Ḃ" U1E02 # LATIN CAPITAL LETTER B WITH DOT ABOVE : "Ḃ" U1E02 # LATIN CAPITAL LETTER B WITH DOT ABOVE : "Ḃ" U1E02 # LATIN CAPITAL LETTER B WITH DOT ABOVE : "ḃ" U1E03 # LATIN SMALL LETTER B WITH DOT ABOVE : "ḃ" U1E03 # LATIN SMALL LETTER B WITH DOT ABOVE : "ḃ" U1E03 # LATIN SMALL LETTER B WITH DOT ABOVE : "Ḅ" U1E04 # LATIN CAPITAL LETTER B WITH DOT BELOW : "Ḅ" U1E04 # LATIN CAPITAL LETTER B WITH DOT BELOW : "ḅ" U1E05 # LATIN SMALL LETTER B WITH DOT BELOW : "ḅ" U1E05 # LATIN SMALL LETTER B WITH DOT BELOW : "Ḇ" U1E06 # LATIN CAPITAL LETTER B WITH LINE BELOW : "ḇ" U1E07 # LATIN SMALL LETTER B WITH LINE BELOW : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE : "Ḋ" U1E0A # LATIN CAPITAL LETTER D WITH DOT ABOVE : "Ḋ" U1E0A # LATIN CAPITAL LETTER D WITH DOT ABOVE : "Ḋ" U1E0A # LATIN CAPITAL LETTER D WITH DOT ABOVE : "ḋ" U1E0B # LATIN SMALL LETTER D WITH DOT ABOVE : "ḋ" U1E0B # LATIN SMALL LETTER D WITH DOT ABOVE : "ḋ" U1E0B # LATIN SMALL LETTER D WITH DOT ABOVE : "Ḍ" U1E0C # LATIN CAPITAL LETTER D WITH DOT BELOW : "Ḍ" U1E0C # LATIN CAPITAL LETTER D WITH DOT BELOW : "ḍ" U1E0D # LATIN SMALL LETTER D WITH DOT BELOW : "ḍ" U1E0D # LATIN SMALL LETTER D WITH DOT BELOW : "Ḏ" U1E0E # LATIN CAPITAL LETTER D WITH LINE BELOW : "ḏ" U1E0F # LATIN SMALL LETTER D WITH LINE BELOW : "Ḑ" U1E10 # LATIN CAPITAL LETTER D WITH CEDILLA : "Ḑ" U1E10 # LATIN CAPITAL LETTER D WITH CEDILLA : "Ḑ" U1E10 # LATIN CAPITAL LETTER D WITH CEDILLA : "Ḑ" U1E10 # LATIN CAPITAL LETTER D WITH CEDILLA : "ḑ" U1E11 # LATIN SMALL LETTER D WITH CEDILLA : "ḑ" U1E11 # LATIN SMALL LETTER D WITH CEDILLA : "ḑ" U1E11 # LATIN SMALL LETTER D WITH CEDILLA : "ḑ" U1E11 # LATIN SMALL LETTER D WITH CEDILLA : "Ḓ" U1E12 # LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW : "ḓ" U1E13 # LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW : "Ḕ" U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE : "Ḕ" U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE : "Ḕ" U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE : "Ḕ" U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE : "Ḕ" U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE : "Ḕ" U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE : "Ḕ" U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE : "Ḕ" U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE : "ḕ" U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE : "ḕ" U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE : "ḕ" U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE : "ḕ" U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE : "ḕ" U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE : "ḕ" U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE : "ḕ" U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE : "ḕ" U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE : "Ḙ" U1E18 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW : "ḙ" U1E19 # LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW : "Ḛ" U1E1A # LATIN CAPITAL LETTER E WITH TILDE BELOW : "ḛ" U1E1B # LATIN SMALL LETTER E WITH TILDE BELOW : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE : "Ḟ" U1E1E # LATIN CAPITAL LETTER F WITH DOT ABOVE : "Ḟ" U1E1E # LATIN CAPITAL LETTER F WITH DOT ABOVE : "Ḟ" U1E1E # LATIN CAPITAL LETTER F WITH DOT ABOVE : "ḟ" U1E1F # LATIN SMALL LETTER F WITH DOT ABOVE : "ḟ" U1E1F # LATIN SMALL LETTER F WITH DOT ABOVE : "ḟ" U1E1F # LATIN SMALL LETTER F WITH DOT ABOVE : "Ḡ" U1E20 # LATIN CAPITAL LETTER G WITH MACRON : "Ḡ" U1E20 # LATIN CAPITAL LETTER G WITH MACRON : "Ḡ" U1E20 # LATIN CAPITAL LETTER G WITH MACRON : "ḡ" U1E21 # LATIN SMALL LETTER G WITH MACRON : "ḡ" U1E21 # LATIN SMALL LETTER G WITH MACRON : "ḡ" U1E21 # LATIN SMALL LETTER G WITH MACRON : "Ḣ" U1E22 # LATIN CAPITAL LETTER H WITH DOT ABOVE : "Ḣ" U1E22 # LATIN CAPITAL LETTER H WITH DOT ABOVE : "ḣ" U1E23 # LATIN SMALL LETTER H WITH DOT ABOVE : "ḣ" U1E23 # LATIN SMALL LETTER H WITH DOT ABOVE : "Ḥ" U1E24 # LATIN CAPITAL LETTER H WITH DOT BELOW : "Ḥ" U1E24 # LATIN CAPITAL LETTER H WITH DOT BELOW : "ḥ" U1E25 # LATIN SMALL LETTER H WITH DOT BELOW : "ḥ" U1E25 # LATIN SMALL LETTER H WITH DOT BELOW : "Ḧ" U1E26 # LATIN CAPITAL LETTER H WITH DIAERESIS : "Ḧ" U1E26 # LATIN CAPITAL LETTER H WITH DIAERESIS : "ḧ" U1E27 # LATIN SMALL LETTER H WITH DIAERESIS : "ḧ" U1E27 # LATIN SMALL LETTER H WITH DIAERESIS : "Ḩ" U1E28 # LATIN CAPITAL LETTER H WITH CEDILLA : "Ḩ" U1E28 # LATIN CAPITAL LETTER H WITH CEDILLA : "Ḩ" U1E28 # LATIN CAPITAL LETTER H WITH CEDILLA : "Ḩ" U1E28 # LATIN CAPITAL LETTER H WITH CEDILLA : "ḩ" U1E29 # LATIN SMALL LETTER H WITH CEDILLA : "ḩ" U1E29 # LATIN SMALL LETTER H WITH CEDILLA : "ḩ" U1E29 # LATIN SMALL LETTER H WITH CEDILLA : "ḩ" U1E29 # LATIN SMALL LETTER H WITH CEDILLA : "Ḫ" U1E2A # LATIN CAPITAL LETTER H WITH BREVE BELOW : "ḫ" U1E2B # LATIN SMALL LETTER H WITH BREVE BELOW : "Ḭ" U1E2C # LATIN CAPITAL LETTER I WITH TILDE BELOW : "ḭ" U1E2D # LATIN SMALL LETTER I WITH TILDE BELOW : "Ḯ" U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE : "Ḯ" U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE : "Ḯ" U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE : "Ḯ" U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE : "Ḯ" U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE : "Ḯ" U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE : "Ḯ" U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE : "Ḯ" U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE : "Ḯ" U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE : "ḯ" U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE : "ḯ" U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE : "ḯ" U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE : "ḯ" U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE : "ḯ" U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE : "ḯ" U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE : "ḯ" U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE : "ḯ" U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE : "ḯ" U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE : "Ḱ" U1E30 # LATIN CAPITAL LETTER K WITH ACUTE : "Ḱ" U1E30 # LATIN CAPITAL LETTER K WITH ACUTE : "Ḱ" U1E30 # LATIN CAPITAL LETTER K WITH ACUTE : "ḱ" U1E31 # LATIN SMALL LETTER K WITH ACUTE : "ḱ" U1E31 # LATIN SMALL LETTER K WITH ACUTE : "ḱ" U1E31 # LATIN SMALL LETTER K WITH ACUTE : "Ḳ" U1E32 # LATIN CAPITAL LETTER K WITH DOT BELOW : "Ḳ" U1E32 # LATIN CAPITAL LETTER K WITH DOT BELOW : "ḳ" U1E33 # LATIN SMALL LETTER K WITH DOT BELOW : "ḳ" U1E33 # LATIN SMALL LETTER K WITH DOT BELOW : "Ḵ" U1E34 # LATIN CAPITAL LETTER K WITH LINE BELOW : "ḵ" U1E35 # LATIN SMALL LETTER K WITH LINE BELOW : "Ḷ" U1E36 # LATIN CAPITAL LETTER L WITH DOT BELOW : "Ḷ" U1E36 # LATIN CAPITAL LETTER L WITH DOT BELOW : "ḷ" U1E37 # LATIN SMALL LETTER L WITH DOT BELOW : "ḷ" U1E37 # LATIN SMALL LETTER L WITH DOT BELOW : "Ḹ" U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON : "Ḹ" U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON : "Ḹ" U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON : "Ḹ" U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON : "Ḹ" U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON : "Ḹ" U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON : "Ḹ" U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON : "Ḹ" U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON : "Ḹ" U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON : "ḹ" U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON : "ḹ" U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON : "ḹ" U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON : "ḹ" U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON : "ḹ" U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON : "ḹ" U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON : "ḹ" U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON : "ḹ" U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON : "ḹ" U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON : "Ḻ" U1E3A # LATIN CAPITAL LETTER L WITH LINE BELOW : "ḻ" U1E3B # LATIN SMALL LETTER L WITH LINE BELOW : "Ḽ" U1E3C # LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW : "ḽ" U1E3D # LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW : "Ḿ" U1E3E # LATIN CAPITAL LETTER M WITH ACUTE : "Ḿ" U1E3E # LATIN CAPITAL LETTER M WITH ACUTE : "Ḿ" U1E3E # LATIN CAPITAL LETTER M WITH ACUTE : "ḿ" U1E3F # LATIN SMALL LETTER M WITH ACUTE : "ḿ" U1E3F # LATIN SMALL LETTER M WITH ACUTE : "ḿ" U1E3F # LATIN SMALL LETTER M WITH ACUTE : "Ṁ" U1E40 # LATIN CAPITAL LETTER M WITH DOT ABOVE : "Ṁ" U1E40 # LATIN CAPITAL LETTER M WITH DOT ABOVE : "Ṁ" U1E40 # LATIN CAPITAL LETTER M WITH DOT ABOVE : "ṁ" U1E41 # LATIN SMALL LETTER M WITH DOT ABOVE : "ṁ" U1E41 # LATIN SMALL LETTER M WITH DOT ABOVE : "ṁ" U1E41 # LATIN SMALL LETTER M WITH DOT ABOVE : "Ṃ" U1E42 # LATIN CAPITAL LETTER M WITH DOT BELOW : "Ṃ" U1E42 # LATIN CAPITAL LETTER M WITH DOT BELOW : "ṃ" U1E43 # LATIN SMALL LETTER M WITH DOT BELOW : "ṃ" U1E43 # LATIN SMALL LETTER M WITH DOT BELOW : "Ṅ" U1E44 # LATIN CAPITAL LETTER N WITH DOT ABOVE : "Ṅ" U1E44 # LATIN CAPITAL LETTER N WITH DOT ABOVE : "ṅ" U1E45 # LATIN SMALL LETTER N WITH DOT ABOVE : "ṅ" U1E45 # LATIN SMALL LETTER N WITH DOT ABOVE : "Ṇ" U1E46 # LATIN CAPITAL LETTER N WITH DOT BELOW : "Ṇ" U1E46 # LATIN CAPITAL LETTER N WITH DOT BELOW : "ṇ" U1E47 # LATIN SMALL LETTER N WITH DOT BELOW : "ṇ" U1E47 # LATIN SMALL LETTER N WITH DOT BELOW : "Ṉ" U1E48 # LATIN CAPITAL LETTER N WITH LINE BELOW : "ṉ" U1E49 # LATIN SMALL LETTER N WITH LINE BELOW : "Ṋ" U1E4A # LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW : "ṋ" U1E4B # LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE : "Ṏ" U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS : "Ṏ" U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS : "Ṏ" U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS : "Ṏ" U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS : "Ṏ" U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS : "Ṏ" U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS : "ṏ" U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS : "ṏ" U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS : "ṏ" U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS : "ṏ" U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS : "ṏ" U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS : "ṏ" U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS : "Ṑ" U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE : "Ṑ" U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE : "Ṑ" U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE : "Ṑ" U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE : "Ṑ" U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE : "Ṑ" U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE : "Ṑ" U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE : "Ṑ" U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE : "ṑ" U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE : "ṑ" U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE : "ṑ" U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE : "ṑ" U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE : "ṑ" U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE : "ṑ" U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE : "ṑ" U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE : "ṑ" U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE

: "Ṕ" U1E54 # LATIN CAPITAL LETTER P WITH ACUTE

: "Ṕ" U1E54 # LATIN CAPITAL LETTER P WITH ACUTE

: "Ṕ" U1E54 # LATIN CAPITAL LETTER P WITH ACUTE

: "ṕ" U1E55 # LATIN SMALL LETTER P WITH ACUTE

: "ṕ" U1E55 # LATIN SMALL LETTER P WITH ACUTE

: "ṕ" U1E55 # LATIN SMALL LETTER P WITH ACUTE

: "Ṗ" U1E56 # LATIN CAPITAL LETTER P WITH DOT ABOVE

: "Ṗ" U1E56 # LATIN CAPITAL LETTER P WITH DOT ABOVE

: "Ṗ" U1E56 # LATIN CAPITAL LETTER P WITH DOT ABOVE

: "ṗ" U1E57 # LATIN SMALL LETTER P WITH DOT ABOVE

: "ṗ" U1E57 # LATIN SMALL LETTER P WITH DOT ABOVE

: "ṗ" U1E57 # LATIN SMALL LETTER P WITH DOT ABOVE : "Ṙ" U1E58 # LATIN CAPITAL LETTER R WITH DOT ABOVE : "Ṙ" U1E58 # LATIN CAPITAL LETTER R WITH DOT ABOVE : "ṙ" U1E59 # LATIN SMALL LETTER R WITH DOT ABOVE : "ṙ" U1E59 # LATIN SMALL LETTER R WITH DOT ABOVE : "Ṛ" U1E5A # LATIN CAPITAL LETTER R WITH DOT BELOW : "Ṛ" U1E5A # LATIN CAPITAL LETTER R WITH DOT BELOW : "ṛ" U1E5B # LATIN SMALL LETTER R WITH DOT BELOW : "ṛ" U1E5B # LATIN SMALL LETTER R WITH DOT BELOW : "Ṝ" U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON : "Ṝ" U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON : "Ṝ" U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON : "Ṝ" U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON : "Ṝ" U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON : "Ṝ" U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON : "Ṝ" U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON : "Ṝ" U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON : "Ṝ" U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON : "ṝ" U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON : "ṝ" U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON : "ṝ" U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON : "ṝ" U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON : "ṝ" U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON : "ṝ" U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON : "ṝ" U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON : "ṝ" U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON : "ṝ" U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON : "Ṟ" U1E5E # LATIN CAPITAL LETTER R WITH LINE BELOW : "ṟ" U1E5F # LATIN SMALL LETTER R WITH LINE BELOW : "Ṡ" U1E60 # LATIN CAPITAL LETTER S WITH DOT ABOVE : "Ṡ" U1E60 # LATIN CAPITAL LETTER S WITH DOT ABOVE : "Ṡ" U1E60 # LATIN CAPITAL LETTER S WITH DOT ABOVE : "ṡ" U1E61 # LATIN SMALL LETTER S WITH DOT ABOVE : "ṡ" U1E61 # LATIN SMALL LETTER S WITH DOT ABOVE : "ṡ" U1E61 # LATIN SMALL LETTER S WITH DOT ABOVE : "Ṣ" U1E62 # LATIN CAPITAL LETTER S WITH DOT BELOW : "Ṣ" U1E62 # LATIN CAPITAL LETTER S WITH DOT BELOW : "ṣ" U1E63 # LATIN SMALL LETTER S WITH DOT BELOW : "ṣ" U1E63 # LATIN SMALL LETTER S WITH DOT BELOW : "Ṥ" U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE : "Ṥ" U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE : "Ṥ" U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE : "Ṥ" U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE : "Ṥ" U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE : "Ṥ" U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE : "Ṥ" U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE : "Ṥ" U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE : "ṥ" U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE : "ṥ" U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE : "ṥ" U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE : "ṥ" U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE : "ṥ" U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE : "ṥ" U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE : "ṥ" U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE : "ṥ" U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE : "Ṧ" U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE : "Ṧ" U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE : "Ṧ" U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE : "Ṧ" U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE : "Ṧ" U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE : "ṧ" U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE : "ṧ" U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE : "ṧ" U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE : "ṧ" U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE : "ṧ" U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE : "Ṩ" U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE : "Ṩ" U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE : "Ṩ" U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE : "Ṩ" U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE : "Ṩ" U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE : "Ṩ" U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE : "ṩ" U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE : "ṩ" U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE : "ṩ" U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE : "ṩ" U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE : "ṩ" U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE : "ṩ" U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE : "Ṫ" U1E6A # LATIN CAPITAL LETTER T WITH DOT ABOVE : "Ṫ" U1E6A # LATIN CAPITAL LETTER T WITH DOT ABOVE : "Ṫ" U1E6A # LATIN CAPITAL LETTER T WITH DOT ABOVE : "ṫ" U1E6B # LATIN SMALL LETTER T WITH DOT ABOVE : "ṫ" U1E6B # LATIN SMALL LETTER T WITH DOT ABOVE : "ṫ" U1E6B # LATIN SMALL LETTER T WITH DOT ABOVE : "Ṭ" U1E6C # LATIN CAPITAL LETTER T WITH DOT BELOW : "Ṭ" U1E6C # LATIN CAPITAL LETTER T WITH DOT BELOW : "ṭ" U1E6D # LATIN SMALL LETTER T WITH DOT BELOW : "ṭ" U1E6D # LATIN SMALL LETTER T WITH DOT BELOW : "Ṯ" U1E6E # LATIN CAPITAL LETTER T WITH LINE BELOW : "ṯ" U1E6F # LATIN SMALL LETTER T WITH LINE BELOW : "Ṱ" U1E70 # LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW : "ṱ" U1E71 # LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW : "Ṳ" U1E72 # LATIN CAPITAL LETTER U WITH DIAERESIS BELOW : "ṳ" U1E73 # LATIN SMALL LETTER U WITH DIAERESIS BELOW : "Ṵ" U1E74 # LATIN CAPITAL LETTER U WITH TILDE BELOW : "ṵ" U1E75 # LATIN SMALL LETTER U WITH TILDE BELOW : "Ṷ" U1E76 # LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW : "ṷ" U1E77 # LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE : "Ṻ" U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS : "Ṻ" U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS : "Ṻ" U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS : "Ṻ" U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS : "Ṻ" U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS : "Ṻ" U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS : "Ṻ" U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS : "Ṻ" U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS : "ṻ" U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS : "ṻ" U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS : "ṻ" U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS : "ṻ" U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS : "ṻ" U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS : "ṻ" U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS : "ṻ" U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS : "ṻ" U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS : "Ṽ" U1E7C # LATIN CAPITAL LETTER V WITH TILDE : "Ṽ" U1E7C # LATIN CAPITAL LETTER V WITH TILDE : "ṽ" U1E7D # LATIN SMALL LETTER V WITH TILDE : "ṽ" U1E7D # LATIN SMALL LETTER V WITH TILDE : "Ṿ" U1E7E # LATIN CAPITAL LETTER V WITH DOT BELOW : "Ṿ" U1E7E # LATIN CAPITAL LETTER V WITH DOT BELOW : "ṿ" U1E7F # LATIN SMALL LETTER V WITH DOT BELOW : "ṿ" U1E7F # LATIN SMALL LETTER V WITH DOT BELOW : "Ẁ" U1E80 # LATIN CAPITAL LETTER W WITH GRAVE : "Ẁ" U1E80 # LATIN CAPITAL LETTER W WITH GRAVE : "ẁ" U1E81 # LATIN SMALL LETTER W WITH GRAVE : "ẁ" U1E81 # LATIN SMALL LETTER W WITH GRAVE : "Ẃ" U1E82 # LATIN CAPITAL LETTER W WITH ACUTE : "Ẃ" U1E82 # LATIN CAPITAL LETTER W WITH ACUTE : "Ẃ" U1E82 # LATIN CAPITAL LETTER W WITH ACUTE : "ẃ" U1E83 # LATIN SMALL LETTER W WITH ACUTE : "ẃ" U1E83 # LATIN SMALL LETTER W WITH ACUTE : "ẃ" U1E83 # LATIN SMALL LETTER W WITH ACUTE : "Ẅ" U1E84 # LATIN CAPITAL LETTER W WITH DIAERESIS : "Ẅ" U1E84 # LATIN CAPITAL LETTER W WITH DIAERESIS : "ẅ" U1E85 # LATIN SMALL LETTER W WITH DIAERESIS : "ẅ" U1E85 # LATIN SMALL LETTER W WITH DIAERESIS : "Ẇ" U1E86 # LATIN CAPITAL LETTER W WITH DOT ABOVE : "Ẇ" U1E86 # LATIN CAPITAL LETTER W WITH DOT ABOVE : "ẇ" U1E87 # LATIN SMALL LETTER W WITH DOT ABOVE : "ẇ" U1E87 # LATIN SMALL LETTER W WITH DOT ABOVE : "Ẉ" U1E88 # LATIN CAPITAL LETTER W WITH DOT BELOW : "Ẉ" U1E88 # LATIN CAPITAL LETTER W WITH DOT BELOW : "ẉ" U1E89 # LATIN SMALL LETTER W WITH DOT BELOW : "ẉ" U1E89 # LATIN SMALL LETTER W WITH DOT BELOW : "Ẋ" U1E8A # LATIN CAPITAL LETTER X WITH DOT ABOVE : "Ẋ" U1E8A # LATIN CAPITAL LETTER X WITH DOT ABOVE : "ẋ" U1E8B # LATIN SMALL LETTER X WITH DOT ABOVE : "ẋ" U1E8B # LATIN SMALL LETTER X WITH DOT ABOVE : "Ẍ" U1E8C # LATIN CAPITAL LETTER X WITH DIAERESIS : "Ẍ" U1E8C # LATIN CAPITAL LETTER X WITH DIAERESIS : "ẍ" U1E8D # LATIN SMALL LETTER X WITH DIAERESIS : "ẍ" U1E8D # LATIN SMALL LETTER X WITH DIAERESIS : "Ẏ" U1E8E # LATIN CAPITAL LETTER Y WITH DOT ABOVE : "Ẏ" U1E8E # LATIN CAPITAL LETTER Y WITH DOT ABOVE : "ẏ" U1E8F # LATIN SMALL LETTER Y WITH DOT ABOVE : "ẏ" U1E8F # LATIN SMALL LETTER Y WITH DOT ABOVE : "Ẑ" U1E90 # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX : "Ẑ" U1E90 # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX : "ẑ" U1E91 # LATIN SMALL LETTER Z WITH CIRCUMFLEX : "ẑ" U1E91 # LATIN SMALL LETTER Z WITH CIRCUMFLEX : "Ẓ" U1E92 # LATIN CAPITAL LETTER Z WITH DOT BELOW : "Ẓ" U1E92 # LATIN CAPITAL LETTER Z WITH DOT BELOW : "ẓ" U1E93 # LATIN SMALL LETTER Z WITH DOT BELOW : "ẓ" U1E93 # LATIN SMALL LETTER Z WITH DOT BELOW : "Ẕ" U1E94 # LATIN CAPITAL LETTER Z WITH LINE BELOW : "ẕ" U1E95 # LATIN SMALL LETTER Z WITH LINE BELOW : "ẖ" U1E96 # LATIN SMALL LETTER H WITH LINE BELOW : "ẗ" U1E97 # LATIN SMALL LETTER T WITH DIAERESIS : "ẗ" U1E97 # LATIN SMALL LETTER T WITH DIAERESIS : "ẘ" U1E98 # LATIN SMALL LETTER W WITH RING ABOVE : "ẘ" U1E98 # LATIN SMALL LETTER W WITH RING ABOVE : "ẙ" U1E99 # LATIN SMALL LETTER Y WITH RING ABOVE : "ẙ" U1E99 # LATIN SMALL LETTER Y WITH RING ABOVE : "ẛ" U1E9B # LATIN SMALL LETTER LONG S WITH DOT ABOVE : "ẛ" U1E9B # LATIN SMALL LETTER LONG S WITH DOT ABOVE : "Ạ" U1EA0 # LATIN CAPITAL LETTER A WITH DOT BELOW : "Ạ" U1EA0 # LATIN CAPITAL LETTER A WITH DOT BELOW : "ạ" U1EA1 # LATIN SMALL LETTER A WITH DOT BELOW : "ạ" U1EA1 # LATIN SMALL LETTER A WITH DOT BELOW : "Ả" U1EA2 # LATIN CAPITAL LETTER A WITH HOOK ABOVE : "Ả" U1EA2 # LATIN CAPITAL LETTER A WITH HOOK ABOVE : "ả" U1EA3 # LATIN SMALL LETTER A WITH HOOK ABOVE : "ả" U1EA3 # LATIN SMALL LETTER A WITH HOOK ABOVE : "Ấ" U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE : "Ấ" U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE : "Ấ" U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE : "Ấ" U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE : "Ấ" U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE : "Ấ" U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE : "Ấ" U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE : "Ấ" U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE : "Ấ" U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE : "ấ" U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE : "ấ" U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE : "ấ" U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE : "ấ" U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE : "ấ" U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE : "ấ" U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE : "ấ" U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE : "ấ" U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE : "ấ" U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE : "Ầ" U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE : "Ầ" U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE : "Ầ" U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE : "Ầ" U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE : "Ầ" U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE : "Ầ" U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE : "ầ" U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE : "ầ" U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE : "ầ" U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE : "ầ" U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE : "ầ" U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE : "ầ" U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE : "Ẩ" U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE : "Ẩ" U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE : "Ẩ" U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE : "Ẩ" U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE : "Ẩ" U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE : "Ẩ" U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE : "ẩ" U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE : "ẩ" U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE : "ẩ" U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE : "ẩ" U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE : "ẩ" U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE : "ẩ" U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE : "Ẫ" U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE : "Ẫ" U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE : "Ẫ" U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE : "Ẫ" U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE : "Ẫ" U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE : "Ẫ" U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE : "ẫ" U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE : "ẫ" U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE : "ẫ" U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE : "ẫ" U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE : "ẫ" U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE : "ẫ" U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE : "Ậ" U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW : "Ậ" U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW : "Ậ" U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW : "Ậ" U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW : "Ậ" U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW : "Ậ" U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW : "Ậ" U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW : "ậ" U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW : "ậ" U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW : "ậ" U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW : "ậ" U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW : "ậ" U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW : "ậ" U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW : "ậ" U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE : "Ằ" U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE : "Ằ" U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE : "Ằ" U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE : "Ằ" U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE : "Ằ" U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE : "Ằ" U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE : "Ằ" U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE : "ằ" U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE : "ằ" U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE : "ằ" U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE : "ằ" U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE : "ằ" U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE : "ằ" U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE : "ằ" U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE : "Ẳ" U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE : "Ẳ" U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE : "Ẳ" U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE : "Ẳ" U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE : "Ẳ" U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE : "Ẳ" U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE : "Ẳ" U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE : "ẳ" U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE : "ẳ" U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE : "ẳ" U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE : "ẳ" U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE : "ẳ" U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE : "ẳ" U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE : "ẳ" U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE : "Ẵ" U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE : "Ẵ" U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE : "Ẵ" U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE : "Ẵ" U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE : "Ẵ" U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE : "Ẵ" U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE : "Ẵ" U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE : "ẵ" U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE : "ẵ" U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE : "ẵ" U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE : "ẵ" U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE : "ẵ" U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE : "ẵ" U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE : "ẵ" U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE : "Ặ" U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW : "Ặ" U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW : "Ặ" U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW : "Ặ" U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW : "Ặ" U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW : "Ặ" U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW : "Ặ" U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW : "Ặ" U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW : "Ặ" U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW : "Ặ" U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW : "ặ" U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW : "ặ" U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW : "ặ" U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW : "ặ" U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW : "ặ" U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW : "ặ" U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW : "ặ" U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW : "ặ" U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW : "ặ" U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW : "ặ" U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW : "Ẹ" U1EB8 # LATIN CAPITAL LETTER E WITH DOT BELOW : "Ẹ" U1EB8 # LATIN CAPITAL LETTER E WITH DOT BELOW : "ẹ" U1EB9 # LATIN SMALL LETTER E WITH DOT BELOW : "ẹ" U1EB9 # LATIN SMALL LETTER E WITH DOT BELOW : "Ẻ" U1EBA # LATIN CAPITAL LETTER E WITH HOOK ABOVE : "Ẻ" U1EBA # LATIN CAPITAL LETTER E WITH HOOK ABOVE : "ẻ" U1EBB # LATIN SMALL LETTER E WITH HOOK ABOVE : "ẻ" U1EBB # LATIN SMALL LETTER E WITH HOOK ABOVE : "Ẽ" U1EBC # LATIN CAPITAL LETTER E WITH TILDE : "Ẽ" U1EBC # LATIN CAPITAL LETTER E WITH TILDE : "ẽ" U1EBD # LATIN SMALL LETTER E WITH TILDE : "ẽ" U1EBD # LATIN SMALL LETTER E WITH TILDE : "Ế" U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE : "Ế" U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE : "Ế" U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE : "Ế" U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE : "Ế" U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE : "Ế" U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE : "Ế" U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE : "Ế" U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE : "Ế" U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE : "ế" U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE : "ế" U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE : "ế" U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE : "ế" U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE : "ế" U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE : "ế" U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE : "ế" U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE : "ế" U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE : "ế" U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE : "Ề" U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE : "Ề" U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE : "Ề" U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE : "Ề" U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE : "Ề" U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE : "Ề" U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE : "ề" U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE : "ề" U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE : "ề" U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE : "ề" U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE : "ề" U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE : "ề" U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE : "Ể" U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE : "Ể" U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE : "Ể" U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE : "Ể" U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE : "Ể" U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE : "Ể" U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE : "ể" U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE : "ể" U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE : "ể" U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE : "ể" U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE : "ể" U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE : "ể" U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE : "Ễ" U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE : "Ễ" U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE : "Ễ" U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE : "Ễ" U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE : "Ễ" U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE : "Ễ" U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE : "ễ" U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE : "ễ" U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE : "ễ" U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE : "ễ" U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE : "ễ" U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE : "ễ" U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE : "Ệ" U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW : "Ệ" U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW : "Ệ" U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW : "Ệ" U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW : "Ệ" U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW : "Ệ" U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW : "Ệ" U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW : "ệ" U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW : "ệ" U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW : "ệ" U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW : "ệ" U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW : "ệ" U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW : "ệ" U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW : "ệ" U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW : "Ỉ" U1EC8 # LATIN CAPITAL LETTER I WITH HOOK ABOVE : "Ỉ" U1EC8 # LATIN CAPITAL LETTER I WITH HOOK ABOVE : "ỉ" U1EC9 # LATIN SMALL LETTER I WITH HOOK ABOVE : "ỉ" U1EC9 # LATIN SMALL LETTER I WITH HOOK ABOVE : "Ị" U1ECA # LATIN CAPITAL LETTER I WITH DOT BELOW : "Ị" U1ECA # LATIN CAPITAL LETTER I WITH DOT BELOW : "ị" U1ECB # LATIN SMALL LETTER I WITH DOT BELOW : "ị" U1ECB # LATIN SMALL LETTER I WITH DOT BELOW : "Ọ" U1ECC # LATIN CAPITAL LETTER O WITH DOT BELOW : "Ọ" U1ECC # LATIN CAPITAL LETTER O WITH DOT BELOW : "ọ" U1ECD # LATIN SMALL LETTER O WITH DOT BELOW : "ọ" U1ECD # LATIN SMALL LETTER O WITH DOT BELOW : "Ỏ" U1ECE # LATIN CAPITAL LETTER O WITH HOOK ABOVE : "Ỏ" U1ECE # LATIN CAPITAL LETTER O WITH HOOK ABOVE : "ỏ" U1ECF # LATIN SMALL LETTER O WITH HOOK ABOVE : "ỏ" U1ECF # LATIN SMALL LETTER O WITH HOOK ABOVE : "Ố" U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE : "Ố" U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE : "Ố" U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE : "Ố" U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE : "Ố" U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE : "Ố" U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE : "Ố" U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE : "Ố" U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE : "Ố" U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE : "ố" U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE : "ố" U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE : "ố" U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE : "ố" U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE : "ố" U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE : "ố" U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE : "ố" U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE : "ố" U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE : "ố" U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE : "Ồ" U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE : "Ồ" U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE : "Ồ" U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE : "Ồ" U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE : "Ồ" U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE : "Ồ" U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE : "ồ" U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE : "ồ" U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE : "ồ" U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE : "ồ" U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE : "ồ" U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE : "ồ" U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE : "Ổ" U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE : "Ổ" U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE : "Ổ" U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE : "Ổ" U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE : "Ổ" U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE : "Ổ" U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE : "ổ" U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE : "ổ" U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE : "ổ" U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE : "ổ" U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE : "ổ" U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE : "ổ" U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE : "Ỗ" U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE : "Ỗ" U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE : "Ỗ" U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE : "Ỗ" U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE : "Ỗ" U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE : "Ỗ" U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE : "ỗ" U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE : "ỗ" U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE : "ỗ" U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE : "ỗ" U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE : "ỗ" U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE : "ỗ" U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE : "Ộ" U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW : "Ộ" U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW : "Ộ" U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW : "Ộ" U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW : "Ộ" U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW : "Ộ" U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW : "Ộ" U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW : "ộ" U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW : "ộ" U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW : "ộ" U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW : "ộ" U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW : "ộ" U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW : "ộ" U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW : "ộ" U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE : "ở" U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE : "ở" U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE : "ở" U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE : "ở" U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE : "ở" U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE : "ở" U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW : "ợ" U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW : "ợ" U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW : "ợ" U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW : "ợ" U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW : "ợ" U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW : "ợ" U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW : "Ụ" U1EE4 # LATIN CAPITAL LETTER U WITH DOT BELOW : "Ụ" U1EE4 # LATIN CAPITAL LETTER U WITH DOT BELOW : "ụ" U1EE5 # LATIN SMALL LETTER U WITH DOT BELOW : "ụ" U1EE5 # LATIN SMALL LETTER U WITH DOT BELOW : "Ủ" U1EE6 # LATIN CAPITAL LETTER U WITH HOOK ABOVE : "Ủ" U1EE6 # LATIN CAPITAL LETTER U WITH HOOK ABOVE : "ủ" U1EE7 # LATIN SMALL LETTER U WITH HOOK ABOVE : "ủ" U1EE7 # LATIN SMALL LETTER U WITH HOOK ABOVE : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW : "ự" U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW : "ự" U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW : "ự" U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW : "ự" U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW : "ự" U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW : "ự" U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW : "Ỳ" U1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE : "Ỳ" U1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE : "ỳ" U1EF3 # LATIN SMALL LETTER Y WITH GRAVE : "ỳ" U1EF3 # LATIN SMALL LETTER Y WITH GRAVE : "Ỵ" U1EF4 # LATIN CAPITAL LETTER Y WITH DOT BELOW : "Ỵ" U1EF4 # LATIN CAPITAL LETTER Y WITH DOT BELOW : "ỵ" U1EF5 # LATIN SMALL LETTER Y WITH DOT BELOW : "ỵ" U1EF5 # LATIN SMALL LETTER Y WITH DOT BELOW : "Ỷ" U1EF6 # LATIN CAPITAL LETTER Y WITH HOOK ABOVE : "Ỷ" U1EF6 # LATIN CAPITAL LETTER Y WITH HOOK ABOVE : "ỷ" U1EF7 # LATIN SMALL LETTER Y WITH HOOK ABOVE : "ỷ" U1EF7 # LATIN SMALL LETTER Y WITH HOOK ABOVE : "Ỹ" U1EF8 # LATIN CAPITAL LETTER Y WITH TILDE : "Ỹ" U1EF8 # LATIN CAPITAL LETTER Y WITH TILDE : "ỹ" U1EF9 # LATIN SMALL LETTER Y WITH TILDE : "ỹ" U1EF9 # LATIN SMALL LETTER Y WITH TILDE : "ἀ" U1F00 # GREEK SMALL LETTER ALPHA WITH PSILI : "ἀ" U1F00 # GREEK SMALL LETTER ALPHA WITH PSILI : "ἁ" U1F01 # GREEK SMALL LETTER ALPHA WITH DASIA : "ἁ" U1F01 # GREEK SMALL LETTER ALPHA WITH DASIA : "ἂ" U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA : "ἂ" U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA : "ἂ" U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA : "ἂ" U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA : "ἂ" U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA : "ἂ" U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA : "ἃ" U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA : "ἃ" U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA : "ἃ" U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA : "ἃ" U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA : "ἃ" U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA : "ἃ" U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA : "ἄ" U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA : "ἄ" U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA : "ἄ" U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA : "ἄ" U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA : "ἄ" U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA : "ἄ" U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA : "ἄ" U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA : "ἄ" U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA : "ἄ" U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA : "ἅ" U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA : "ἅ" U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA : "ἅ" U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA : "ἅ" U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA : "ἅ" U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA : "ἅ" U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA : "ἅ" U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA : "ἅ" U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA : "ἅ" U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA : "ἆ" U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI : "ἆ" U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI : "ἆ" U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI : "ἆ" U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI : "ἆ" U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI : "ἆ" U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI : "ἇ" U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI : "ἇ" U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI : "ἇ" U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI : "ἇ" U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI : "ἇ" U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI : "ἇ" U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI : "Ἀ" U1F08 # GREEK CAPITAL LETTER ALPHA WITH PSILI : "Ἀ" U1F08 # GREEK CAPITAL LETTER ALPHA WITH PSILI : "Ἁ" U1F09 # GREEK CAPITAL LETTER ALPHA WITH DASIA : "Ἁ" U1F09 # GREEK CAPITAL LETTER ALPHA WITH DASIA : "Ἂ" U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA : "Ἂ" U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA : "Ἂ" U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA : "Ἂ" U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA : "Ἂ" U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA : "Ἂ" U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA : "Ἃ" U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA : "Ἃ" U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA : "Ἃ" U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA : "Ἃ" U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA : "Ἃ" U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA : "Ἃ" U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA : "Ἄ" U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA : "Ἄ" U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA : "Ἄ" U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA : "Ἄ" U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA : "Ἄ" U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA : "Ἄ" U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA : "Ἄ" U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA : "Ἄ" U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA : "Ἄ" U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA : "Ἅ" U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA : "Ἅ" U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA : "Ἅ" U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA : "Ἅ" U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA : "Ἅ" U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA : "Ἅ" U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA : "Ἅ" U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA : "Ἅ" U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA : "Ἅ" U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA : "Ἆ" U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI : "Ἆ" U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI : "Ἆ" U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI : "Ἆ" U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI : "Ἆ" U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI : "Ἆ" U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI : "Ἇ" U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI : "Ἇ" U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI : "Ἇ" U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI : "Ἇ" U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI : "Ἇ" U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI : "Ἇ" U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI : "ἐ" U1F10 # GREEK SMALL LETTER EPSILON WITH PSILI : "ἐ" U1F10 # GREEK SMALL LETTER EPSILON WITH PSILI : "ἑ" U1F11 # GREEK SMALL LETTER EPSILON WITH DASIA : "ἑ" U1F11 # GREEK SMALL LETTER EPSILON WITH DASIA : "ἒ" U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA : "ἒ" U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA : "ἒ" U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA : "ἒ" U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA : "ἒ" U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA : "ἒ" U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA : "ἓ" U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA : "ἓ" U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA : "ἓ" U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA : "ἓ" U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA : "ἓ" U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA : "ἓ" U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA : "ἔ" U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA : "ἔ" U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA : "ἔ" U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA : "ἔ" U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA : "ἔ" U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA : "ἔ" U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA : "ἔ" U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA : "ἔ" U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA : "ἔ" U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA : "ἕ" U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA : "ἕ" U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA : "ἕ" U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA : "ἕ" U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA : "ἕ" U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA : "ἕ" U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA : "ἕ" U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA : "ἕ" U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA : "ἕ" U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA : "Ἐ" U1F18 # GREEK CAPITAL LETTER EPSILON WITH PSILI : "Ἐ" U1F18 # GREEK CAPITAL LETTER EPSILON WITH PSILI : "Ἑ" U1F19 # GREEK CAPITAL LETTER EPSILON WITH DASIA : "Ἑ" U1F19 # GREEK CAPITAL LETTER EPSILON WITH DASIA : "Ἒ" U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA : "Ἒ" U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA : "Ἒ" U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA : "Ἒ" U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA : "Ἒ" U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA : "Ἒ" U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA : "Ἓ" U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA : "Ἓ" U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA : "Ἓ" U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA : "Ἓ" U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA : "Ἓ" U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA : "Ἓ" U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA : "Ἔ" U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA : "Ἔ" U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA : "Ἔ" U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA : "Ἔ" U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA : "Ἔ" U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA : "Ἔ" U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA : "Ἔ" U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA : "Ἔ" U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA : "Ἔ" U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA : "Ἕ" U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA : "Ἕ" U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA : "Ἕ" U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA : "Ἕ" U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA : "Ἕ" U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA : "Ἕ" U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA : "Ἕ" U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA : "Ἕ" U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA : "Ἕ" U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA : "ἠ" U1F20 # GREEK SMALL LETTER ETA WITH PSILI : "ἠ" U1F20 # GREEK SMALL LETTER ETA WITH PSILI : "ἡ" U1F21 # GREEK SMALL LETTER ETA WITH DASIA : "ἡ" U1F21 # GREEK SMALL LETTER ETA WITH DASIA : "ἢ" U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA : "ἢ" U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA : "ἢ" U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA : "ἢ" U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA : "ἢ" U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA : "ἢ" U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA : "ἣ" U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA : "ἣ" U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA : "ἣ" U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA : "ἣ" U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA : "ἣ" U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA : "ἣ" U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA : "ἤ" U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA : "ἤ" U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA : "ἤ" U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA : "ἤ" U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA : "ἤ" U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA : "ἤ" U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA : "ἤ" U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA : "ἤ" U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA : "ἤ" U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA : "ἥ" U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA : "ἥ" U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA : "ἥ" U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA : "ἥ" U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA : "ἥ" U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA : "ἥ" U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA : "ἥ" U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA : "ἥ" U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA : "ἥ" U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA : "ἦ" U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI : "ἦ" U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI : "ἦ" U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI : "ἦ" U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI : "ἦ" U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI : "ἦ" U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI : "ἧ" U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI : "ἧ" U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI : "ἧ" U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI : "ἧ" U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI : "ἧ" U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI : "ἧ" U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI : "Ἠ" U1F28 # GREEK CAPITAL LETTER ETA WITH PSILI : "Ἠ" U1F28 # GREEK CAPITAL LETTER ETA WITH PSILI : "Ἡ" U1F29 # GREEK CAPITAL LETTER ETA WITH DASIA : "Ἡ" U1F29 # GREEK CAPITAL LETTER ETA WITH DASIA : "Ἢ" U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA : "Ἢ" U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA : "Ἢ" U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA : "Ἢ" U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA : "Ἢ" U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA : "Ἢ" U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA : "Ἣ" U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA : "Ἣ" U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA : "Ἣ" U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA : "Ἣ" U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA : "Ἣ" U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA : "Ἣ" U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA : "Ἤ" U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA : "Ἤ" U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA : "Ἤ" U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA : "Ἤ" U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA : "Ἤ" U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA : "Ἤ" U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA : "Ἤ" U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA : "Ἤ" U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA : "Ἤ" U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA : "Ἥ" U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA : "Ἥ" U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA : "Ἥ" U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA : "Ἥ" U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA : "Ἥ" U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA : "Ἥ" U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA : "Ἥ" U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA : "Ἥ" U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA : "Ἥ" U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA : "Ἦ" U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI : "Ἦ" U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI : "Ἦ" U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI : "Ἦ" U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI : "Ἦ" U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI : "Ἦ" U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI : "Ἧ" U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI : "Ἧ" U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI : "Ἧ" U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI : "Ἧ" U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI : "Ἧ" U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI : "Ἧ" U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI : "ἰ" U1F30 # GREEK SMALL LETTER IOTA WITH PSILI : "ἰ" U1F30 # GREEK SMALL LETTER IOTA WITH PSILI : "ἱ" U1F31 # GREEK SMALL LETTER IOTA WITH DASIA : "ἱ" U1F31 # GREEK SMALL LETTER IOTA WITH DASIA : "ἲ" U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA : "ἲ" U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA : "ἲ" U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA : "ἲ" U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA : "ἲ" U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA : "ἲ" U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA : "ἳ" U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA : "ἳ" U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA : "ἳ" U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA : "ἳ" U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA : "ἳ" U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA : "ἳ" U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA : "ἴ" U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA : "ἴ" U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA : "ἴ" U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA : "ἴ" U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA : "ἴ" U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA : "ἴ" U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA : "ἴ" U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA : "ἴ" U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA : "ἴ" U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA : "ἵ" U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA : "ἵ" U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA : "ἵ" U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA : "ἵ" U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA : "ἵ" U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA : "ἵ" U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA : "ἵ" U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA : "ἵ" U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA : "ἵ" U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA : "ἶ" U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI : "ἶ" U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI : "ἶ" U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI : "ἶ" U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI : "ἶ" U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI : "ἶ" U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI : "ἷ" U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI : "ἷ" U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI : "ἷ" U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI : "ἷ" U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI : "ἷ" U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI : "ἷ" U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI : "Ἰ" U1F38 # GREEK CAPITAL LETTER IOTA WITH PSILI : "Ἰ" U1F38 # GREEK CAPITAL LETTER IOTA WITH PSILI : "Ἱ" U1F39 # GREEK CAPITAL LETTER IOTA WITH DASIA : "Ἱ" U1F39 # GREEK CAPITAL LETTER IOTA WITH DASIA : "Ἲ" U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA : "Ἲ" U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA : "Ἲ" U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA : "Ἲ" U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA : "Ἲ" U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA : "Ἲ" U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA : "Ἳ" U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA : "Ἳ" U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA : "Ἳ" U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA : "Ἳ" U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA : "Ἳ" U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA : "Ἳ" U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA : "Ἴ" U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA : "Ἴ" U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA : "Ἴ" U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA : "Ἴ" U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA : "Ἴ" U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA : "Ἴ" U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA : "Ἴ" U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA : "Ἴ" U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA : "Ἴ" U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA : "Ἵ" U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA : "Ἵ" U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA : "Ἵ" U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA : "Ἵ" U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA : "Ἵ" U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA : "Ἵ" U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA : "Ἵ" U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA : "Ἵ" U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA : "Ἵ" U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA : "Ἶ" U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI : "Ἶ" U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI : "Ἶ" U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI : "Ἶ" U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI : "Ἶ" U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI : "Ἶ" U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI : "Ἷ" U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI : "Ἷ" U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI : "Ἷ" U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI : "Ἷ" U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI : "Ἷ" U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI : "Ἷ" U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI : "ὀ" U1F40 # GREEK SMALL LETTER OMICRON WITH PSILI : "ὀ" U1F40 # GREEK SMALL LETTER OMICRON WITH PSILI : "ὁ" U1F41 # GREEK SMALL LETTER OMICRON WITH DASIA : "ὁ" U1F41 # GREEK SMALL LETTER OMICRON WITH DASIA : "ὂ" U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA : "ὂ" U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA : "ὂ" U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA : "ὂ" U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA : "ὂ" U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA : "ὂ" U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA : "ὃ" U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA : "ὃ" U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA : "ὃ" U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA : "ὃ" U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA : "ὃ" U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA : "ὃ" U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA : "ὄ" U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA : "ὄ" U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA : "ὄ" U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA : "ὄ" U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA : "ὄ" U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA : "ὄ" U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA : "ὄ" U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA : "ὄ" U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA : "ὄ" U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA : "ὅ" U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA : "ὅ" U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA : "ὅ" U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA : "ὅ" U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA : "ὅ" U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA : "ὅ" U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA : "ὅ" U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA : "ὅ" U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA : "ὅ" U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA : "Ὀ" U1F48 # GREEK CAPITAL LETTER OMICRON WITH PSILI : "Ὀ" U1F48 # GREEK CAPITAL LETTER OMICRON WITH PSILI : "Ὁ" U1F49 # GREEK CAPITAL LETTER OMICRON WITH DASIA : "Ὁ" U1F49 # GREEK CAPITAL LETTER OMICRON WITH DASIA : "Ὂ" U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA : "Ὂ" U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA : "Ὂ" U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA : "Ὂ" U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA : "Ὂ" U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA : "Ὂ" U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA : "Ὃ" U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA : "Ὃ" U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA : "Ὃ" U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA : "Ὃ" U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA : "Ὃ" U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA : "Ὃ" U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA : "Ὄ" U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA : "Ὄ" U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA : "Ὄ" U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA : "Ὄ" U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA : "Ὄ" U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA : "Ὄ" U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA : "Ὄ" U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA : "Ὄ" U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA : "Ὄ" U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA : "Ὅ" U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA : "Ὅ" U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA : "Ὅ" U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA : "Ὅ" U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA : "Ὅ" U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA : "Ὅ" U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA : "Ὅ" U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA : "Ὅ" U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA : "Ὅ" U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA : "ὐ" U1F50 # GREEK SMALL LETTER UPSILON WITH PSILI : "ὐ" U1F50 # GREEK SMALL LETTER UPSILON WITH PSILI : "ὑ" U1F51 # GREEK SMALL LETTER UPSILON WITH DASIA : "ὑ" U1F51 # GREEK SMALL LETTER UPSILON WITH DASIA : "ὒ" U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA : "ὒ" U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA : "ὒ" U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA : "ὒ" U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA : "ὒ" U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA : "ὒ" U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA : "ὓ" U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA : "ὓ" U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA : "ὓ" U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA : "ὓ" U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA : "ὓ" U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA : "ὓ" U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA : "ὔ" U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA : "ὔ" U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA : "ὔ" U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA : "ὔ" U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA : "ὔ" U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA : "ὔ" U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA : "ὔ" U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA : "ὔ" U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA : "ὔ" U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA : "ὕ" U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA : "ὕ" U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA : "ὕ" U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA : "ὕ" U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA : "ὕ" U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA : "ὕ" U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA : "ὕ" U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA : "ὕ" U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA : "ὕ" U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA : "ὖ" U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI : "ὖ" U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI : "ὖ" U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI : "ὖ" U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI : "ὖ" U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI : "ὖ" U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI : "ὗ" U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI : "ὗ" U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI : "ὗ" U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI : "ὗ" U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI : "ὗ" U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI : "ὗ" U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI : "Ὑ" U1F59 # GREEK CAPITAL LETTER UPSILON WITH DASIA : "Ὑ" U1F59 # GREEK CAPITAL LETTER UPSILON WITH DASIA : "Ὓ" U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA : "Ὓ" U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA : "Ὓ" U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA : "Ὓ" U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA : "Ὓ" U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA : "Ὓ" U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA : "Ὕ" U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA : "Ὕ" U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA : "Ὕ" U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA : "Ὕ" U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA : "Ὕ" U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA : "Ὕ" U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA : "Ὕ" U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA : "Ὕ" U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA : "Ὕ" U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA : "Ὗ" U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI : "Ὗ" U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI : "Ὗ" U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI : "Ὗ" U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI : "Ὗ" U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI : "Ὗ" U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI : "ὠ" U1F60 # GREEK SMALL LETTER OMEGA WITH PSILI : "ὠ" U1F60 # GREEK SMALL LETTER OMEGA WITH PSILI : "ὡ" U1F61 # GREEK SMALL LETTER OMEGA WITH DASIA : "ὡ" U1F61 # GREEK SMALL LETTER OMEGA WITH DASIA : "ὢ" U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA : "ὢ" U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA : "ὢ" U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA : "ὢ" U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA : "ὢ" U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA : "ὢ" U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA : "ὣ" U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA : "ὣ" U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA : "ὣ" U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA : "ὣ" U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA : "ὣ" U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA : "ὣ" U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA : "ὤ" U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA : "ὤ" U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA : "ὤ" U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA : "ὤ" U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA : "ὤ" U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA : "ὤ" U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA : "ὤ" U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA : "ὤ" U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA : "ὤ" U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA : "ὥ" U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA : "ὥ" U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA : "ὥ" U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA : "ὥ" U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA : "ὥ" U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA : "ὥ" U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA : "ὥ" U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA : "ὥ" U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA : "ὥ" U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA : "ὦ" U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI : "ὦ" U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI : "ὦ" U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI : "ὦ" U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI : "ὦ" U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI : "ὦ" U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI : "ὧ" U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI : "ὧ" U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI : "ὧ" U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI : "ὧ" U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI : "ὧ" U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI : "ὧ" U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI : "Ὠ" U1F68 # GREEK CAPITAL LETTER OMEGA WITH PSILI : "Ὠ" U1F68 # GREEK CAPITAL LETTER OMEGA WITH PSILI : "Ὡ" U1F69 # GREEK CAPITAL LETTER OMEGA WITH DASIA : "Ὡ" U1F69 # GREEK CAPITAL LETTER OMEGA WITH DASIA : "Ὢ" U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA : "Ὢ" U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA : "Ὢ" U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA : "Ὢ" U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA : "Ὢ" U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA : "Ὢ" U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA : "Ὣ" U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA : "Ὣ" U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA : "Ὣ" U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA : "Ὣ" U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA : "Ὣ" U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA : "Ὣ" U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA : "Ὤ" U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA : "Ὤ" U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA : "Ὤ" U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA : "Ὤ" U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA : "Ὤ" U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA : "Ὤ" U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA : "Ὤ" U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA : "Ὤ" U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA : "Ὤ" U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA : "Ὥ" U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA : "Ὥ" U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA : "Ὥ" U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA : "Ὥ" U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA : "Ὥ" U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA : "Ὥ" U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA : "Ὥ" U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA : "Ὥ" U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA : "Ὥ" U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA : "Ὦ" U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI : "Ὦ" U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI : "Ὦ" U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI : "Ὦ" U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI : "Ὦ" U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI : "Ὦ" U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI : "Ὧ" U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI : "Ὧ" U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI : "Ὧ" U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI : "Ὧ" U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI : "Ὧ" U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI : "Ὧ" U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI : "ὰ" U1F70 # GREEK SMALL LETTER ALPHA WITH VARIA : "ὰ" U1F70 # GREEK SMALL LETTER ALPHA WITH VARIA : "ὲ" U1F72 # GREEK SMALL LETTER EPSILON WITH VARIA : "ὲ" U1F72 # GREEK SMALL LETTER EPSILON WITH VARIA : "ὴ" U1F74 # GREEK SMALL LETTER ETA WITH VARIA : "ὴ" U1F74 # GREEK SMALL LETTER ETA WITH VARIA : "ὶ" U1F76 # GREEK SMALL LETTER IOTA WITH VARIA : "ὶ" U1F76 # GREEK SMALL LETTER IOTA WITH VARIA : "ὸ" U1F78 # GREEK SMALL LETTER OMICRON WITH VARIA : "ὸ" U1F78 # GREEK SMALL LETTER OMICRON WITH VARIA : "ὺ" U1F7A # GREEK SMALL LETTER UPSILON WITH VARIA : "ὺ" U1F7A # GREEK SMALL LETTER UPSILON WITH VARIA : "ὼ" U1F7C # GREEK SMALL LETTER OMEGA WITH VARIA : "ὼ" U1F7C # GREEK SMALL LETTER OMEGA WITH VARIA : "ᾀ" U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI : "ᾀ" U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI : "ᾀ" U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI : "ᾀ" U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI : "ᾀ" U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI : "ᾀ" U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI : "ᾁ" U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI : "ᾁ" U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI : "ᾁ" U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI : "ᾁ" U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI : "ᾁ" U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI : "ᾁ" U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾂ" U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾃ" U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾄ" U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾅ" U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾆ" U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾇ" U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾈ" U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI : "ᾈ" U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI : "ᾈ" U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI : "ᾈ" U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI : "ᾈ" U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI : "ᾈ" U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI : "ᾉ" U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI : "ᾉ" U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI : "ᾉ" U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI : "ᾉ" U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI : "ᾉ" U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI : "ᾉ" U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾊ" U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾋ" U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾌ" U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾍ" U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾎ" U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾏ" U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾐ" U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI : "ᾐ" U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI : "ᾐ" U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI : "ᾐ" U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI : "ᾐ" U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI : "ᾐ" U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI : "ᾑ" U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI : "ᾑ" U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI : "ᾑ" U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI : "ᾑ" U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI : "ᾑ" U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI : "ᾑ" U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾒ" U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾓ" U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾔ" U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾕ" U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾖ" U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾗ" U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾘ" U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI : "ᾘ" U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI : "ᾘ" U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI : "ᾘ" U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI : "ᾘ" U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI : "ᾘ" U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI : "ᾙ" U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI : "ᾙ" U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI : "ᾙ" U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI : "ᾙ" U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI : "ᾙ" U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI : "ᾙ" U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾚ" U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾛ" U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾜ" U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾝ" U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾞ" U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾟ" U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾠ" U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI : "ᾠ" U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI : "ᾠ" U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI : "ᾠ" U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI : "ᾠ" U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI : "ᾠ" U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI : "ᾡ" U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI : "ᾡ" U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI : "ᾡ" U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI : "ᾡ" U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI : "ᾡ" U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI : "ᾡ" U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾢ" U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾣ" U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾤ" U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾥ" U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾦ" U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾧ" U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI : "ᾨ" U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI : "ᾨ" U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI : "ᾨ" U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI : "ᾨ" U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI : "ᾨ" U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI : "ᾨ" U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI : "ᾩ" U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI : "ᾩ" U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI : "ᾩ" U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI : "ᾩ" U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI : "ᾩ" U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI : "ᾩ" U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾪ" U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾫ" U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾬ" U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾭ" U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾮ" U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾯ" U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI : "ᾰ" U1FB0 # GREEK SMALL LETTER ALPHA WITH VRACHY : "ᾰ" U1FB0 # GREEK SMALL LETTER ALPHA WITH VRACHY : "ᾰ" U1FB0 # GREEK SMALL LETTER ALPHA WITH VRACHY : "ᾱ" U1FB1 # GREEK SMALL LETTER ALPHA WITH MACRON : "ᾱ" U1FB1 # GREEK SMALL LETTER ALPHA WITH MACRON : "ᾱ" U1FB1 # GREEK SMALL LETTER ALPHA WITH MACRON : "ᾲ" U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI : "ᾲ" U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI : "ᾲ" U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI : "ᾲ" U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI : "ᾲ" U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI : "ᾲ" U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI : "ᾳ" U1FB3 # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI : "ᾳ" U1FB3 # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI : "ᾴ" U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI : "ᾴ" U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI : "ᾴ" U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI : "ᾴ" U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI : "ᾴ" U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI : "ᾴ" U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI : "ᾴ" U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI : "ᾴ" U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI : "ᾶ" U1FB6 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI : "ᾶ" U1FB6 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI : "ᾷ" U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI : "ᾷ" U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI : "ᾷ" U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI : "ᾷ" U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI : "ᾷ" U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI : "ᾷ" U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI : "Ᾰ" U1FB8 # GREEK CAPITAL LETTER ALPHA WITH VRACHY : "Ᾰ" U1FB8 # GREEK CAPITAL LETTER ALPHA WITH VRACHY : "Ᾰ" U1FB8 # GREEK CAPITAL LETTER ALPHA WITH VRACHY : "Ᾱ" U1FB9 # GREEK CAPITAL LETTER ALPHA WITH MACRON : "Ᾱ" U1FB9 # GREEK CAPITAL LETTER ALPHA WITH MACRON : "Ᾱ" U1FB9 # GREEK CAPITAL LETTER ALPHA WITH MACRON : "Ὰ" U1FBA # GREEK CAPITAL LETTER ALPHA WITH VARIA : "Ὰ" U1FBA # GREEK CAPITAL LETTER ALPHA WITH VARIA : "ᾼ" U1FBC # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI : "ᾼ" U1FBC # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI : "῁" U1FC1 # GREEK DIALYTIKA AND PERISPOMENI : "῁" U1FC1 # GREEK DIALYTIKA AND PERISPOMENI : "ῂ" U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI : "ῂ" U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI : "ῂ" U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI : "ῂ" U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI : "ῂ" U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI : "ῂ" U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI : "ῃ" U1FC3 # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI : "ῃ" U1FC3 # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI : "ῄ" U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI : "ῄ" U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI : "ῄ" U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI : "ῄ" U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI : "ῄ" U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI : "ῄ" U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI : "ῄ" U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI : "ῄ" U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI : "ῆ" U1FC6 # GREEK SMALL LETTER ETA WITH PERISPOMENI : "ῆ" U1FC6 # GREEK SMALL LETTER ETA WITH PERISPOMENI : "ῇ" U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI : "ῇ" U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI : "ῇ" U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI : "ῇ" U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI : "ῇ" U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI : "ῇ" U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI : "Ὲ" U1FC8 # GREEK CAPITAL LETTER EPSILON WITH VARIA : "Ὲ" U1FC8 # GREEK CAPITAL LETTER EPSILON WITH VARIA : "Ὴ" U1FCA # GREEK CAPITAL LETTER ETA WITH VARIA : "Ὴ" U1FCA # GREEK CAPITAL LETTER ETA WITH VARIA : "ῌ" U1FCC # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI : "ῌ" U1FCC # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI : "῍" U1FCD # GREEK PSILI AND VARIA : "῍" U1FCD # GREEK PSILI AND VARIA : "῎" U1FCE # GREEK PSILI AND OXIA : "῎" U1FCE # GREEK PSILI AND OXIA : "῎" U1FCE # GREEK PSILI AND OXIA : "῏" U1FCF # GREEK PSILI AND PERISPOMENI : "῏" U1FCF # GREEK PSILI AND PERISPOMENI : "ῐ" U1FD0 # GREEK SMALL LETTER IOTA WITH VRACHY : "ῐ" U1FD0 # GREEK SMALL LETTER IOTA WITH VRACHY : "ῐ" U1FD0 # GREEK SMALL LETTER IOTA WITH VRACHY : "ῑ" U1FD1 # GREEK SMALL LETTER IOTA WITH MACRON : "ῑ" U1FD1 # GREEK SMALL LETTER IOTA WITH MACRON : "ῑ" U1FD1 # GREEK SMALL LETTER IOTA WITH MACRON : "ῒ" U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA : "ῒ" U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA : "ῒ" U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA : "ῒ" U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA : "ῒ" U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA : "ῒ" U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA : "ῖ" U1FD6 # GREEK SMALL LETTER IOTA WITH PERISPOMENI : "ῖ" U1FD6 # GREEK SMALL LETTER IOTA WITH PERISPOMENI : "ῗ" U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI : "ῗ" U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI : "ῗ" U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI : "ῗ" U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI : "ῗ" U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI : "ῗ" U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI : "Ῐ" U1FD8 # GREEK CAPITAL LETTER IOTA WITH VRACHY : "Ῐ" U1FD8 # GREEK CAPITAL LETTER IOTA WITH VRACHY : "Ῐ" U1FD8 # GREEK CAPITAL LETTER IOTA WITH VRACHY : "Ῑ" U1FD9 # GREEK CAPITAL LETTER IOTA WITH MACRON : "Ῑ" U1FD9 # GREEK CAPITAL LETTER IOTA WITH MACRON : "Ῑ" U1FD9 # GREEK CAPITAL LETTER IOTA WITH MACRON : "Ὶ" U1FDA # GREEK CAPITAL LETTER IOTA WITH VARIA : "Ὶ" U1FDA # GREEK CAPITAL LETTER IOTA WITH VARIA : "῝" U1FDD # GREEK DASIA AND VARIA : "῝" U1FDD # GREEK DASIA AND VARIA : "῞" U1FDE # GREEK DASIA AND OXIA : "῞" U1FDE # GREEK DASIA AND OXIA : "῞" U1FDE # GREEK DASIA AND OXIA : "῟" U1FDF # GREEK DASIA AND PERISPOMENI : "῟" U1FDF # GREEK DASIA AND PERISPOMENI : "ῠ" U1FE0 # GREEK SMALL LETTER UPSILON WITH VRACHY : "ῠ" U1FE0 # GREEK SMALL LETTER UPSILON WITH VRACHY : "ῠ" U1FE0 # GREEK SMALL LETTER UPSILON WITH VRACHY : "ῡ" U1FE1 # GREEK SMALL LETTER UPSILON WITH MACRON : "ῡ" U1FE1 # GREEK SMALL LETTER UPSILON WITH MACRON : "ῡ" U1FE1 # GREEK SMALL LETTER UPSILON WITH MACRON : "ῢ" U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA : "ῢ" U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA : "ῢ" U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA : "ῢ" U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA : "ῢ" U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA : "ῢ" U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA : "ῤ" U1FE4 # GREEK SMALL LETTER RHO WITH PSILI : "ῤ" U1FE4 # GREEK SMALL LETTER RHO WITH PSILI : "ῥ" U1FE5 # GREEK SMALL LETTER RHO WITH DASIA : "ῥ" U1FE5 # GREEK SMALL LETTER RHO WITH DASIA : "ῦ" U1FE6 # GREEK SMALL LETTER UPSILON WITH PERISPOMENI : "ῦ" U1FE6 # GREEK SMALL LETTER UPSILON WITH PERISPOMENI : "ῧ" U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI : "ῧ" U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI : "ῧ" U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI : "ῧ" U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI : "ῧ" U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI : "ῧ" U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI : "Ῠ" U1FE8 # GREEK CAPITAL LETTER UPSILON WITH VRACHY : "Ῠ" U1FE8 # GREEK CAPITAL LETTER UPSILON WITH VRACHY : "Ῠ" U1FE8 # GREEK CAPITAL LETTER UPSILON WITH VRACHY : "Ῡ" U1FE9 # GREEK CAPITAL LETTER UPSILON WITH MACRON : "Ῡ" U1FE9 # GREEK CAPITAL LETTER UPSILON WITH MACRON : "Ῡ" U1FE9 # GREEK CAPITAL LETTER UPSILON WITH MACRON : "Ὺ" U1FEA # GREEK CAPITAL LETTER UPSILON WITH VARIA : "Ὺ" U1FEA # GREEK CAPITAL LETTER UPSILON WITH VARIA : "Ῥ" U1FEC # GREEK CAPITAL LETTER RHO WITH DASIA : "Ῥ" U1FEC # GREEK CAPITAL LETTER RHO WITH DASIA : "῭" U1FED # GREEK DIALYTIKA AND VARIA : "῭" U1FED # GREEK DIALYTIKA AND VARIA : "ῲ" U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI : "ῲ" U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI : "ῲ" U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI : "ῲ" U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI : "ῲ" U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI : "ῲ" U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI : "ῳ" U1FF3 # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI : "ῳ" U1FF3 # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI : "ῴ" U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI : "ῴ" U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI : "ῴ" U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI : "ῴ" U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI : "ῴ" U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI : "ῴ" U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI : "ῴ" U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI : "ῴ" U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI : "ῶ" U1FF6 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI : "ῶ" U1FF6 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI : "ῷ" U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI : "ῷ" U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI : "ῷ" U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI : "ῷ" U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI : "ῷ" U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI : "ῷ" U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI : "Ὸ" U1FF8 # GREEK CAPITAL LETTER OMICRON WITH VARIA : "Ὸ" U1FF8 # GREEK CAPITAL LETTER OMICRON WITH VARIA : "Ὼ" U1FFA # GREEK CAPITAL LETTER OMEGA WITH VARIA : "Ὼ" U1FFA # GREEK CAPITAL LETTER OMEGA WITH VARIA : "ῼ" U1FFC # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI : "ῼ" U1FFC # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI <0> : "⁰" U2070 # SUPERSCRIPT ZERO <0> : "⁰" U2070 # SUPERSCRIPT ZERO : "⁰" U2070 # SUPERSCRIPT ZERO : "⁰" U2070 # SUPERSCRIPT ZERO : "ⁱ" U2071 # SUPERSCRIPT LATIN SMALL LETTER I : "ⁱ" U2071 # SUPERSCRIPT LATIN SMALL LETTER I : "ⁱ" U2071 # SUPERSCRIPT LATIN SMALL LETTER I : "ⁱ" U2071 # SUPERSCRIPT LATIN SMALL LETTER I <4> : "⁴" U2074 # SUPERSCRIPT FOUR <4> : "⁴" U2074 # SUPERSCRIPT FOUR : "⁴" U2074 # SUPERSCRIPT FOUR : "⁴" U2074 # SUPERSCRIPT FOUR <5> : "⁵" U2075 # SUPERSCRIPT FIVE <5> : "⁵" U2075 # SUPERSCRIPT FIVE : "⁵" U2075 # SUPERSCRIPT FIVE : "⁵" U2075 # SUPERSCRIPT FIVE <6> : "⁶" U2076 # SUPERSCRIPT SIX <6> : "⁶" U2076 # SUPERSCRIPT SIX : "⁶" U2076 # SUPERSCRIPT SIX : "⁶" U2076 # SUPERSCRIPT SIX <7> : "⁷" U2077 # SUPERSCRIPT SEVEN <7> : "⁷" U2077 # SUPERSCRIPT SEVEN : "⁷" U2077 # SUPERSCRIPT SEVEN : "⁷" U2077 # SUPERSCRIPT SEVEN <8> : "⁸" U2078 # SUPERSCRIPT EIGHT <8> : "⁸" U2078 # SUPERSCRIPT EIGHT : "⁸" U2078 # SUPERSCRIPT EIGHT : "⁸" U2078 # SUPERSCRIPT EIGHT <9> : "⁹" U2079 # SUPERSCRIPT NINE <9> : "⁹" U2079 # SUPERSCRIPT NINE : "⁹" U2079 # SUPERSCRIPT NINE : "⁹" U2079 # SUPERSCRIPT NINE : "⁺" U207A # SUPERSCRIPT PLUS SIGN : "⁺" U207A # SUPERSCRIPT PLUS SIGN : "⁺" U207A # SUPERSCRIPT PLUS SIGN : "⁺" U207A # SUPERSCRIPT PLUS SIGN : "⁻" U207B # SUPERSCRIPT MINUS : "⁻" U207B # SUPERSCRIPT MINUS : "⁻" U207B # SUPERSCRIPT MINUS : "⁼" U207C # SUPERSCRIPT EQUALS SIGN : "⁼" U207C # SUPERSCRIPT EQUALS SIGN : "⁼" U207C # SUPERSCRIPT EQUALS SIGN : "⁼" U207C # SUPERSCRIPT EQUALS SIGN : "⁽" U207D # SUPERSCRIPT LEFT PARENTHESIS : "⁽" U207D # SUPERSCRIPT LEFT PARENTHESIS : "⁾" U207E # SUPERSCRIPT RIGHT PARENTHESIS : "⁾" U207E # SUPERSCRIPT RIGHT PARENTHESIS : "ⁿ" U207F # SUPERSCRIPT LATIN SMALL LETTER N : "ⁿ" U207F # SUPERSCRIPT LATIN SMALL LETTER N : "ⁿ" U207F # SUPERSCRIPT LATIN SMALL LETTER N : "ⁿ" U207F # SUPERSCRIPT LATIN SMALL LETTER N <0> : "₀" U2080 # SUBSCRIPT ZERO : "₀" U2080 # SUBSCRIPT ZERO <0> : "₀" U2080 # SUBSCRIPT ZERO : "₀" U2080 # SUBSCRIPT ZERO <1> : "₁" U2081 # SUBSCRIPT ONE : "₁" U2081 # SUBSCRIPT ONE <1> : "₁" U2081 # SUBSCRIPT ONE : "₁" U2081 # SUBSCRIPT ONE <2> : "₂" U2082 # SUBSCRIPT TWO : "₂" U2082 # SUBSCRIPT TWO : "₂" U2082 # SUBSCRIPT TWO <2> : "₂" U2082 # SUBSCRIPT TWO : "₂" U2082 # SUBSCRIPT TWO : "₂" U2082 # SUBSCRIPT TWO <3> : "₃" U2083 # SUBSCRIPT THREE : "₃" U2083 # SUBSCRIPT THREE <3> : "₃" U2083 # SUBSCRIPT THREE : "₃" U2083 # SUBSCRIPT THREE <4> : "₄" U2084 # SUBSCRIPT FOUR : "₄" U2084 # SUBSCRIPT FOUR <4> : "₄" U2084 # SUBSCRIPT FOUR : "₄" U2084 # SUBSCRIPT FOUR <5> : "₅" U2085 # SUBSCRIPT FIVE : "₅" U2085 # SUBSCRIPT FIVE <5> : "₅" U2085 # SUBSCRIPT FIVE : "₅" U2085 # SUBSCRIPT FIVE <6> : "₆" U2086 # SUBSCRIPT SIX : "₆" U2086 # SUBSCRIPT SIX <6> : "₆" U2086 # SUBSCRIPT SIX : "₆" U2086 # SUBSCRIPT SIX <7> : "₇" U2087 # SUBSCRIPT SEVEN : "₇" U2087 # SUBSCRIPT SEVEN <7> : "₇" U2087 # SUBSCRIPT SEVEN : "₇" U2087 # SUBSCRIPT SEVEN <8> : "₈" U2088 # SUBSCRIPT EIGHT : "₈" U2088 # SUBSCRIPT EIGHT <8> : "₈" U2088 # SUBSCRIPT EIGHT : "₈" U2088 # SUBSCRIPT EIGHT <9> : "₉" U2089 # SUBSCRIPT NINE : "₉" U2089 # SUBSCRIPT NINE <9> : "₉" U2089 # SUBSCRIPT NINE : "₉" U2089 # SUBSCRIPT NINE : "₊" U208A # SUBSCRIPT PLUS SIGN : "₊" U208A # SUBSCRIPT PLUS SIGN : "₊" U208A # SUBSCRIPT PLUS SIGN : "₊" U208A # SUBSCRIPT PLUS SIGN : "₋" U208B # SUBSCRIPT MINUS : "₋" U208B # SUBSCRIPT MINUS : "₌" U208C # SUBSCRIPT EQUALS SIGN : "₌" U208C # SUBSCRIPT EQUALS SIGN : "₌" U208C # SUBSCRIPT EQUALS SIGN : "₌" U208C # SUBSCRIPT EQUALS SIGN : "₍" U208D # SUBSCRIPT LEFT PARENTHESIS : "₍" U208D # SUBSCRIPT LEFT PARENTHESIS : "₎" U208E # SUBSCRIPT RIGHT PARENTHESIS : "₎" U208E # SUBSCRIPT RIGHT PARENTHESIS : "℠" U2120 # SERVICE MARK : "℠" U2120 # SERVICE MARK : "℠" U2120 # SERVICE MARK : "℠" U2120 # SERVICE MARK : "℠" U2120 # SERVICE MARK : "℠" U2120 # SERVICE MARK : "℠" U2120 # SERVICE MARK : "℠" U2120 # SERVICE MARK : "™" U2122 # TRADE MARK SIGN : "™" U2122 # TRADE MARK SIGN : "™" U2122 # TRADE MARK SIGN : "™" U2122 # TRADE MARK SIGN : "™" U2122 # TRADE MARK SIGN : "™" U2122 # TRADE MARK SIGN : "™" U2122 # TRADE MARK SIGN : "™" U2122 # TRADE MARK SIGN <1> <7> : "⅐" U2150 # VULGAR FRACTION ONE SEVENTH <1> <9> : "⅑" U2151 # VULGAR FRACTION ONE NINTH <1> <1> <0> : "⅒" U2152 # VULGAR FRACTION ONE TENTH <1> <3> : "⅓" U2153 # VULGAR FRACTION ONE THIRD <2> <3> : "⅔" U2154 # VULGAR FRACTION TWO THIRDS <1> <5> : "⅕" U2155 # VULGAR FRACTION ONE FIFTH <2> <5> : "⅖" U2156 # VULGAR FRACTION TWO FIFTHS <3> <5> : "⅗" U2157 # VULGAR FRACTION THREE FIFTHS <4> <5> : "⅘" U2158 # VULGAR FRACTION FOUR FIFTHS <1> <6> : "⅙" U2159 # VULGAR FRACTION ONE SIXTH <5> <6> : "⅚" U215A # VULGAR FRACTION FIVE SIXTHS <1> <8> : "⅛" U215B # VULGAR FRACTION ONE EIGHTH <3> <8> : "⅜" U215C # VULGAR FRACTION THREE EIGHTHS <5> <8> : "⅝" U215D # VULGAR FRACTION FIVE EIGHTHS <7> <8> : "⅞" U215E # VULGAR FRACTION SEVEN EIGHTHS <0> <3> : "↉" U2189 # VULGAR FRACTION ZERO THIRDS : "↚" U219A # LEFTWARDS ARROW WITH STROKE : "↚" U219A # LEFTWARDS ARROW WITH STROKE : "↛" U219B # RIGHTWARDS ARROW WITH STROKE : "↛" U219B # RIGHTWARDS ARROW WITH STROKE : "↮" U21AE # LEFT RIGHT ARROW WITH STROKE : "↮" U21AE # LEFT RIGHT ARROW WITH STROKE : "←" U2190 # LEFTWARDS ARROW : "→" U2192 # RIGHTWARDS ARROW : "⇒" U21D2 # RIGHTWARDS DOUBLE ARROW : "∄" U2204 # THERE DOES NOT EXIST : "∅" U2205 # EMPTY SET : "∉" U2209 # NOT AN ELEMENT OF : "∌" U220C # DOES NOT CONTAIN AS MEMBER : "∤" U2224 # DOES NOT DIVIDE : "∦" U2226 # NOT PARALLEL TO : "≁" U2241 # NOT TILDE : "≄" U2244 # NOT ASYMPTOTICALLY EQUAL TO : "≇" U2247 # NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO : "≉" U2249 # NOT ALMOST EQUAL TO : "≠" U2260 # NOT EQUAL TO : "≠" U2260 # NOT EQUAL TO : "≠" U2260 # NOT EQUAL TO : "≠" U2260 # NOT EQUAL TO : "≢" U2262 # NOT IDENTICAL TO : "≤" U2264 # LESS-THAN OR EQUAL TO : "≥" U2265 # GREATER-THAN OR EQUAL TO : "≭" U226D # NOT EQUIVALENT TO : "≮" U226E # NOT LESS-THAN : "≮" U226E # NOT LESS-THAN : "≯" U226F # NOT GREATER-THAN : "≯" U226F # NOT GREATER-THAN : "≰" U2270 # NEITHER LESS-THAN NOR EQUAL TO : "≱" U2271 # NEITHER GREATER-THAN NOR EQUAL TO : "≴" U2274 # NEITHER LESS-THAN NOR EQUIVALENT TO : "≵" U2275 # NEITHER GREATER-THAN NOR EQUIVALENT TO : "≸" U2278 # NEITHER LESS-THAN NOR GREATER-THAN : "≹" U2279 # NEITHER GREATER-THAN NOR LESS-THAN : "⊀" U2280 # DOES NOT PRECEDE : "⊁" U2281 # DOES NOT SUCCEED : "⊄" U2284 # NOT A SUBSET OF : "⊄" U2284 # NOT A SUBSET OF : "⊅" U2285 # NOT A SUPERSET OF : "⊅" U2285 # NOT A SUPERSET OF : "⊈" U2288 # NEITHER A SUBSET OF NOR EQUAL TO : "⊉" U2289 # NEITHER A SUPERSET OF NOR EQUAL TO : "⊬" U22AC # DOES NOT PROVE : "⊭" U22AD # NOT TRUE : "⊮" U22AE # DOES NOT FORCE : "⊯" U22AF # NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE : "⋠" U22E0 # DOES NOT PRECEDE OR EQUAL : "⋡" U22E1 # DOES NOT SUCCEED OR EQUAL : "⋢" U22E2 # NOT SQUARE IMAGE OF OR EQUAL TO : "⋣" U22E3 # NOT SQUARE ORIGINAL OF OR EQUAL TO : "⋪" U22EA # NOT NORMAL SUBGROUP OF : "⋫" U22EB # DOES NOT CONTAIN AS NORMAL SUBGROUP : "⋬" U22EC # NOT NORMAL SUBGROUP OF OR EQUAL TO : "⋭" U22ED # DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL : "⌀" U2300 # DIAMETER SIGN <1> : "①" U2460 # CIRCLED DIGIT ONE : "①" U2460 # CIRCLED DIGIT ONE <2> : "②" U2461 # CIRCLED DIGIT TWO : "②" U2461 # CIRCLED DIGIT TWO : "②" U2461 # CIRCLED DIGIT TWO <3> : "③" U2462 # CIRCLED DIGIT THREE : "③" U2462 # CIRCLED DIGIT THREE <4> : "④" U2463 # CIRCLED DIGIT FOUR : "④" U2463 # CIRCLED DIGIT FOUR <5> : "⑤" U2464 # CIRCLED DIGIT FIVE : "⑤" U2464 # CIRCLED DIGIT FIVE <6> : "⑥" U2465 # CIRCLED DIGIT SIX : "⑥" U2465 # CIRCLED DIGIT SIX <7> : "⑦" U2466 # CIRCLED DIGIT SEVEN : "⑦" U2466 # CIRCLED DIGIT SEVEN <8> : "⑧" U2467 # CIRCLED DIGIT EIGHT : "⑧" U2467 # CIRCLED DIGIT EIGHT <9> : "⑨" U2468 # CIRCLED DIGIT NINE : "⑨" U2468 # CIRCLED DIGIT NINE <1> <0> : "⑩" U2469 # CIRCLED NUMBER TEN <1> : "⑩" U2469 # CIRCLED NUMBER TEN <0> : "⑩" U2469 # CIRCLED NUMBER TEN : "⑩" U2469 # CIRCLED NUMBER TEN <1> <1> : "⑪" U246A # CIRCLED NUMBER ELEVEN <1> : "⑪" U246A # CIRCLED NUMBER ELEVEN <1> : "⑪" U246A # CIRCLED NUMBER ELEVEN : "⑪" U246A # CIRCLED NUMBER ELEVEN <1> <2> : "⑫" U246B # CIRCLED NUMBER TWELVE <1> : "⑫" U246B # CIRCLED NUMBER TWELVE <1> : "⑫" U246B # CIRCLED NUMBER TWELVE <2> : "⑫" U246B # CIRCLED NUMBER TWELVE : "⑫" U246B # CIRCLED NUMBER TWELVE : "⑫" U246B # CIRCLED NUMBER TWELVE <1> <3> : "⑬" U246C # CIRCLED NUMBER THIRTEEN <1> : "⑬" U246C # CIRCLED NUMBER THIRTEEN <3> : "⑬" U246C # CIRCLED NUMBER THIRTEEN : "⑬" U246C # CIRCLED NUMBER THIRTEEN <1> <4> : "⑭" U246D # CIRCLED NUMBER FOURTEEN <1> : "⑭" U246D # CIRCLED NUMBER FOURTEEN <4> : "⑭" U246D # CIRCLED NUMBER FOURTEEN : "⑭" U246D # CIRCLED NUMBER FOURTEEN <1> <5> : "⑮" U246E # CIRCLED NUMBER FIFTEEN <1> : "⑮" U246E # CIRCLED NUMBER FIFTEEN <5> : "⑮" U246E # CIRCLED NUMBER FIFTEEN : "⑮" U246E # CIRCLED NUMBER FIFTEEN <1> <6> : "⑯" U246F # CIRCLED NUMBER SIXTEEN <1> : "⑯" U246F # CIRCLED NUMBER SIXTEEN <6> : "⑯" U246F # CIRCLED NUMBER SIXTEEN : "⑯" U246F # CIRCLED NUMBER SIXTEEN <1> <7> : "⑰" U2470 # CIRCLED NUMBER SEVENTEEN <1> : "⑰" U2470 # CIRCLED NUMBER SEVENTEEN <7> : "⑰" U2470 # CIRCLED NUMBER SEVENTEEN : "⑰" U2470 # CIRCLED NUMBER SEVENTEEN <1> <8> : "⑱" U2471 # CIRCLED NUMBER EIGHTEEN <1> : "⑱" U2471 # CIRCLED NUMBER EIGHTEEN <8> : "⑱" U2471 # CIRCLED NUMBER EIGHTEEN : "⑱" U2471 # CIRCLED NUMBER EIGHTEEN <1> <9> : "⑲" U2472 # CIRCLED NUMBER NINETEEN <1> : "⑲" U2472 # CIRCLED NUMBER NINETEEN <9> : "⑲" U2472 # CIRCLED NUMBER NINETEEN : "⑲" U2472 # CIRCLED NUMBER NINETEEN <2> <0> : "⑳" U2473 # CIRCLED NUMBER TWENTY <2> : "⑳" U2473 # CIRCLED NUMBER TWENTY <0> : "⑳" U2473 # CIRCLED NUMBER TWENTY : "⑳" U2473 # CIRCLED NUMBER TWENTY <0> : "⑳" U2473 # CIRCLED NUMBER TWENTY : "⑳" U2473 # CIRCLED NUMBER TWENTY : "Ⓐ" U24B6 # CIRCLED LATIN CAPITAL LETTER A : "Ⓑ" U24B7 # CIRCLED LATIN CAPITAL LETTER B : "Ⓒ" U24B8 # CIRCLED LATIN CAPITAL LETTER C : "Ⓓ" U24B9 # CIRCLED LATIN CAPITAL LETTER D : "Ⓔ" U24BA # CIRCLED LATIN CAPITAL LETTER E : "Ⓕ" U24BB # CIRCLED LATIN CAPITAL LETTER F : "Ⓖ" U24BC # CIRCLED LATIN CAPITAL LETTER G : "Ⓗ" U24BD # CIRCLED LATIN CAPITAL LETTER H : "Ⓘ" U24BE # CIRCLED LATIN CAPITAL LETTER I : "Ⓙ" U24BF # CIRCLED LATIN CAPITAL LETTER J : "Ⓚ" U24C0 # CIRCLED LATIN CAPITAL LETTER K : "Ⓛ" U24C1 # CIRCLED LATIN CAPITAL LETTER L : "Ⓜ" U24C2 # CIRCLED LATIN CAPITAL LETTER M : "Ⓝ" U24C3 # CIRCLED LATIN CAPITAL LETTER N : "Ⓞ" U24C4 # CIRCLED LATIN CAPITAL LETTER O

: "Ⓟ" U24C5 # CIRCLED LATIN CAPITAL LETTER P : "Ⓠ" U24C6 # CIRCLED LATIN CAPITAL LETTER Q : "Ⓡ" U24C7 # CIRCLED LATIN CAPITAL LETTER R : "Ⓢ" U24C8 # CIRCLED LATIN CAPITAL LETTER S : "Ⓣ" U24C9 # CIRCLED LATIN CAPITAL LETTER T : "Ⓤ" U24CA # CIRCLED LATIN CAPITAL LETTER U : "Ⓥ" U24CB # CIRCLED LATIN CAPITAL LETTER V : "Ⓦ" U24CC # CIRCLED LATIN CAPITAL LETTER W : "Ⓧ" U24CD # CIRCLED LATIN CAPITAL LETTER X : "Ⓨ" U24CE # CIRCLED LATIN CAPITAL LETTER Y : "Ⓩ" U24CF # CIRCLED LATIN CAPITAL LETTER Z : "ⓐ" U24D0 # CIRCLED LATIN SMALL LETTER A : "ⓑ" U24D1 # CIRCLED LATIN SMALL LETTER B : "ⓒ" U24D2 # CIRCLED LATIN SMALL LETTER C : "ⓓ" U24D3 # CIRCLED LATIN SMALL LETTER D : "ⓔ" U24D4 # CIRCLED LATIN SMALL LETTER E : "ⓕ" U24D5 # CIRCLED LATIN SMALL LETTER F : "ⓖ" U24D6 # CIRCLED LATIN SMALL LETTER G : "ⓗ" U24D7 # CIRCLED LATIN SMALL LETTER H : "ⓘ" U24D8 # CIRCLED LATIN SMALL LETTER I : "ⓙ" U24D9 # CIRCLED LATIN SMALL LETTER J : "ⓚ" U24DA # CIRCLED LATIN SMALL LETTER K : "ⓛ" U24DB # CIRCLED LATIN SMALL LETTER L : "ⓜ" U24DC # CIRCLED LATIN SMALL LETTER M : "ⓝ" U24DD # CIRCLED LATIN SMALL LETTER N : "ⓞ" U24DE # CIRCLED LATIN SMALL LETTER O

: "ⓟ" U24DF # CIRCLED LATIN SMALL LETTER P : "ⓠ" U24E0 # CIRCLED LATIN SMALL LETTER Q : "ⓡ" U24E1 # CIRCLED LATIN SMALL LETTER R : "ⓢ" U24E2 # CIRCLED LATIN SMALL LETTER S : "ⓣ" U24E3 # CIRCLED LATIN SMALL LETTER T : "ⓤ" U24E4 # CIRCLED LATIN SMALL LETTER U : "ⓥ" U24E5 # CIRCLED LATIN SMALL LETTER V : "ⓦ" U24E6 # CIRCLED LATIN SMALL LETTER W : "ⓧ" U24E7 # CIRCLED LATIN SMALL LETTER X : "ⓨ" U24E8 # CIRCLED LATIN SMALL LETTER Y : "ⓩ" U24E9 # CIRCLED LATIN SMALL LETTER Z <0> : "⓪" U24EA # CIRCLED DIGIT ZERO : "⓪" U24EA # CIRCLED DIGIT ZERO : "⨥" U2A25 # PLUS SIGN WITH DOT BELOW : "⨦" U2A26 # PLUS SIGN WITH TILDE BELOW : "⨪" U2A2A # MINUS SIGN WITH DOT BELOW : "⩦" U2A66 # EQUALS SIGN WITH DOT BELOW : "⩷" U2A77 # EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW : "⩷" U2A77 # EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW : "⫝̸" U2ADC # FORKING : "⫰" U2AF0 # VERTICAL LINE WITH CIRCLE BELOW : "が" U304C # HIRAGANA LETTER GA : "ぎ" U304E # HIRAGANA LETTER GI : "ぐ" U3050 # HIRAGANA LETTER GU : "げ" U3052 # HIRAGANA LETTER GE : "ご" U3054 # HIRAGANA LETTER GO : "ざ" U3056 # HIRAGANA LETTER ZA : "じ" U3058 # HIRAGANA LETTER ZI : "ず" U305A # HIRAGANA LETTER ZU : "ぜ" U305C # HIRAGANA LETTER ZE : "ぞ" U305E # HIRAGANA LETTER ZO : "だ" U3060 # HIRAGANA LETTER DA : "ぢ" U3062 # HIRAGANA LETTER DI : "づ" U3065 # HIRAGANA LETTER DU : "で" U3067 # HIRAGANA LETTER DE : "ど" U3069 # HIRAGANA LETTER DO : "ば" U3070 # HIRAGANA LETTER BA : "ぱ" U3071 # HIRAGANA LETTER PA : "び" U3073 # HIRAGANA LETTER BI : "ぴ" U3074 # HIRAGANA LETTER PI : "ぶ" U3076 # HIRAGANA LETTER BU : "ぷ" U3077 # HIRAGANA LETTER PU : "べ" U3079 # HIRAGANA LETTER BE : "ぺ" U307A # HIRAGANA LETTER PE : "ぼ" U307C # HIRAGANA LETTER BO : "ぽ" U307D # HIRAGANA LETTER PO : "ゔ" U3094 # HIRAGANA LETTER VU : "ゞ" U309E # HIRAGANA VOICED ITERATION MARK : "ガ" U30AC # KATAKANA LETTER GA : "ギ" U30AE # KATAKANA LETTER GI : "グ" U30B0 # KATAKANA LETTER GU : "ゲ" U30B2 # KATAKANA LETTER GE : "ゴ" U30B4 # KATAKANA LETTER GO : "ザ" U30B6 # KATAKANA LETTER ZA : "ジ" U30B8 # KATAKANA LETTER ZI : "ズ" U30BA # KATAKANA LETTER ZU : "ゼ" U30BC # KATAKANA LETTER ZE : "ゾ" U30BE # KATAKANA LETTER ZO : "ダ" U30C0 # KATAKANA LETTER DA : "ヂ" U30C2 # KATAKANA LETTER DI : "ヅ" U30C5 # KATAKANA LETTER DU : "デ" U30C7 # KATAKANA LETTER DE : "ド" U30C9 # KATAKANA LETTER DO : "バ" U30D0 # KATAKANA LETTER BA : "パ" U30D1 # KATAKANA LETTER PA : "ビ" U30D3 # KATAKANA LETTER BI : "ピ" U30D4 # KATAKANA LETTER PI : "ブ" U30D6 # KATAKANA LETTER BU : "プ" U30D7 # KATAKANA LETTER PU : "ベ" U30D9 # KATAKANA LETTER BE : "ペ" U30DA # KATAKANA LETTER PE : "ボ" U30DC # KATAKANA LETTER BO : "ポ" U30DD # KATAKANA LETTER PO : "ヴ" U30F4 # KATAKANA LETTER VU : "ヷ" U30F7 # KATAKANA LETTER VA : "ヸ" U30F8 # KATAKANA LETTER VI : "ヹ" U30F9 # KATAKANA LETTER VE : "ヺ" U30FA # KATAKANA LETTER VO : "ヾ" U30FE # KATAKANA VOICED ITERATION MARK : "㆒" U3192 # IDEOGRAPHIC ANNOTATION ONE MARK : "㆒" U3192 # IDEOGRAPHIC ANNOTATION ONE MARK : "㆓" U3193 # IDEOGRAPHIC ANNOTATION TWO MARK : "㆓" U3193 # IDEOGRAPHIC ANNOTATION TWO MARK : "㆔" U3194 # IDEOGRAPHIC ANNOTATION THREE MARK : "㆔" U3194 # IDEOGRAPHIC ANNOTATION THREE MARK : "㆕" U3195 # IDEOGRAPHIC ANNOTATION FOUR MARK : "㆕" U3195 # IDEOGRAPHIC ANNOTATION FOUR MARK : "㆖" U3196 # IDEOGRAPHIC ANNOTATION TOP MARK : "㆖" U3196 # IDEOGRAPHIC ANNOTATION TOP MARK : "㆗" U3197 # IDEOGRAPHIC ANNOTATION MIDDLE MARK : "㆗" U3197 # IDEOGRAPHIC ANNOTATION MIDDLE MARK : "㆘" U3198 # IDEOGRAPHIC ANNOTATION BOTTOM MARK : "㆘" U3198 # IDEOGRAPHIC ANNOTATION BOTTOM MARK : "㆙" U3199 # IDEOGRAPHIC ANNOTATION FIRST MARK : "㆙" U3199 # IDEOGRAPHIC ANNOTATION FIRST MARK : "㆚" U319A # IDEOGRAPHIC ANNOTATION SECOND MARK : "㆚" U319A # IDEOGRAPHIC ANNOTATION SECOND MARK : "㆛" U319B # IDEOGRAPHIC ANNOTATION THIRD MARK : "㆛" U319B # IDEOGRAPHIC ANNOTATION THIRD MARK : "㆜" U319C # IDEOGRAPHIC ANNOTATION FOURTH MARK : "㆜" U319C # IDEOGRAPHIC ANNOTATION FOURTH MARK : "㆝" U319D # IDEOGRAPHIC ANNOTATION HEAVEN MARK : "㆝" U319D # IDEOGRAPHIC ANNOTATION HEAVEN MARK : "㆞" U319E # IDEOGRAPHIC ANNOTATION EARTH MARK : "㆞" U319E # IDEOGRAPHIC ANNOTATION EARTH MARK : "㆟" U319F # IDEOGRAPHIC ANNOTATION MAN MARK : "㆟" U319F # IDEOGRAPHIC ANNOTATION MAN MARK <2> <1> : "㉑" U3251 # CIRCLED NUMBER TWENTY ONE <2> : "㉑" U3251 # CIRCLED NUMBER TWENTY ONE <1> : "㉑" U3251 # CIRCLED NUMBER TWENTY ONE : "㉑" U3251 # CIRCLED NUMBER TWENTY ONE <1> : "㉑" U3251 # CIRCLED NUMBER TWENTY ONE : "㉑" U3251 # CIRCLED NUMBER TWENTY ONE <2> <2> : "㉒" U3252 # CIRCLED NUMBER TWENTY TWO <2> : "㉒" U3252 # CIRCLED NUMBER TWENTY TWO <2> : "㉒" U3252 # CIRCLED NUMBER TWENTY TWO <2> : "㉒" U3252 # CIRCLED NUMBER TWENTY TWO : "㉒" U3252 # CIRCLED NUMBER TWENTY TWO : "㉒" U3252 # CIRCLED NUMBER TWENTY TWO <2> : "㉒" U3252 # CIRCLED NUMBER TWENTY TWO : "㉒" U3252 # CIRCLED NUMBER TWENTY TWO : "㉒" U3252 # CIRCLED NUMBER TWENTY TWO <2> <3> : "㉓" U3253 # CIRCLED NUMBER TWENTY THREE <2> : "㉓" U3253 # CIRCLED NUMBER TWENTY THREE <3> : "㉓" U3253 # CIRCLED NUMBER TWENTY THREE : "㉓" U3253 # CIRCLED NUMBER TWENTY THREE <3> : "㉓" U3253 # CIRCLED NUMBER TWENTY THREE : "㉓" U3253 # CIRCLED NUMBER TWENTY THREE <2> <4> : "㉔" U3254 # CIRCLED NUMBER TWENTY FOUR <2> : "㉔" U3254 # CIRCLED NUMBER TWENTY FOUR <4> : "㉔" U3254 # CIRCLED NUMBER TWENTY FOUR : "㉔" U3254 # CIRCLED NUMBER TWENTY FOUR <4> : "㉔" U3254 # CIRCLED NUMBER TWENTY FOUR : "㉔" U3254 # CIRCLED NUMBER TWENTY FOUR <2> <5> : "㉕" U3255 # CIRCLED NUMBER TWENTY FIVE <2> : "㉕" U3255 # CIRCLED NUMBER TWENTY FIVE <5> : "㉕" U3255 # CIRCLED NUMBER TWENTY FIVE : "㉕" U3255 # CIRCLED NUMBER TWENTY FIVE <5> : "㉕" U3255 # CIRCLED NUMBER TWENTY FIVE : "㉕" U3255 # CIRCLED NUMBER TWENTY FIVE <2> <6> : "㉖" U3256 # CIRCLED NUMBER TWENTY SIX <2> : "㉖" U3256 # CIRCLED NUMBER TWENTY SIX <6> : "㉖" U3256 # CIRCLED NUMBER TWENTY SIX : "㉖" U3256 # CIRCLED NUMBER TWENTY SIX <6> : "㉖" U3256 # CIRCLED NUMBER TWENTY SIX : "㉖" U3256 # CIRCLED NUMBER TWENTY SIX <2> <7> : "㉗" U3257 # CIRCLED NUMBER TWENTY SEVEN <2> : "㉗" U3257 # CIRCLED NUMBER TWENTY SEVEN <7> : "㉗" U3257 # CIRCLED NUMBER TWENTY SEVEN : "㉗" U3257 # CIRCLED NUMBER TWENTY SEVEN <7> : "㉗" U3257 # CIRCLED NUMBER TWENTY SEVEN : "㉗" U3257 # CIRCLED NUMBER TWENTY SEVEN <2> <8> : "㉘" U3258 # CIRCLED NUMBER TWENTY EIGHT <2> : "㉘" U3258 # CIRCLED NUMBER TWENTY EIGHT <8> : "㉘" U3258 # CIRCLED NUMBER TWENTY EIGHT : "㉘" U3258 # CIRCLED NUMBER TWENTY EIGHT <8> : "㉘" U3258 # CIRCLED NUMBER TWENTY EIGHT : "㉘" U3258 # CIRCLED NUMBER TWENTY EIGHT <2> <9> : "㉙" U3259 # CIRCLED NUMBER TWENTY NINE <2> : "㉙" U3259 # CIRCLED NUMBER TWENTY NINE <9> : "㉙" U3259 # CIRCLED NUMBER TWENTY NINE : "㉙" U3259 # CIRCLED NUMBER TWENTY NINE <9> : "㉙" U3259 # CIRCLED NUMBER TWENTY NINE : "㉙" U3259 # CIRCLED NUMBER TWENTY NINE <3> <0> : "㉚" U325A # CIRCLED NUMBER THIRTY <3> : "㉚" U325A # CIRCLED NUMBER THIRTY <0> : "㉚" U325A # CIRCLED NUMBER THIRTY : "㉚" U325A # CIRCLED NUMBER THIRTY <3> <1> : "㉛" U325B # CIRCLED NUMBER THIRTY ONE <3> : "㉛" U325B # CIRCLED NUMBER THIRTY ONE <1> : "㉛" U325B # CIRCLED NUMBER THIRTY ONE : "㉛" U325B # CIRCLED NUMBER THIRTY ONE <3> <2> : "㉜" U325C # CIRCLED NUMBER THIRTY TWO <3> : "㉜" U325C # CIRCLED NUMBER THIRTY TWO <3> : "㉜" U325C # CIRCLED NUMBER THIRTY TWO <2> : "㉜" U325C # CIRCLED NUMBER THIRTY TWO : "㉜" U325C # CIRCLED NUMBER THIRTY TWO : "㉜" U325C # CIRCLED NUMBER THIRTY TWO <3> <3> : "㉝" U325D # CIRCLED NUMBER THIRTY THREE <3> : "㉝" U325D # CIRCLED NUMBER THIRTY THREE <3> : "㉝" U325D # CIRCLED NUMBER THIRTY THREE : "㉝" U325D # CIRCLED NUMBER THIRTY THREE <3> <4> : "㉞" U325E # CIRCLED NUMBER THIRTY FOUR <3> : "㉞" U325E # CIRCLED NUMBER THIRTY FOUR <4> : "㉞" U325E # CIRCLED NUMBER THIRTY FOUR : "㉞" U325E # CIRCLED NUMBER THIRTY FOUR <3> <5> : "㉟" U325F # CIRCLED NUMBER THIRTY FIVE <3> : "㉟" U325F # CIRCLED NUMBER THIRTY FIVE <5> : "㉟" U325F # CIRCLED NUMBER THIRTY FIVE : "㉟" U325F # CIRCLED NUMBER THIRTY FIVE : "㉠" U3260 # CIRCLED HANGUL KIYEOK : "㉡" U3261 # CIRCLED HANGUL NIEUN : "㉢" U3262 # CIRCLED HANGUL TIKEUT : "㉣" U3263 # CIRCLED HANGUL RIEUL : "㉤" U3264 # CIRCLED HANGUL MIEUM : "㉥" U3265 # CIRCLED HANGUL PIEUP : "㉦" U3266 # CIRCLED HANGUL SIOS : "㉧" U3267 # CIRCLED HANGUL IEUNG : "㉨" U3268 # CIRCLED HANGUL CIEUC : "㉩" U3269 # CIRCLED HANGUL CHIEUCH : "㉪" U326A # CIRCLED HANGUL KHIEUKH : "㉫" U326B # CIRCLED HANGUL THIEUTH : "㉬" U326C # CIRCLED HANGUL PHIEUPH : "㉭" U326D # CIRCLED HANGUL HIEUH : "㉮" U326E # CIRCLED HANGUL KIYEOK A : "㉯" U326F # CIRCLED HANGUL NIEUN A : "㉰" U3270 # CIRCLED HANGUL TIKEUT A : "㉱" U3271 # CIRCLED HANGUL RIEUL A : "㉲" U3272 # CIRCLED HANGUL MIEUM A : "㉳" U3273 # CIRCLED HANGUL PIEUP A : "㉴" U3274 # CIRCLED HANGUL SIOS A : "㉵" U3275 # CIRCLED HANGUL IEUNG A : "㉶" U3276 # CIRCLED HANGUL CIEUC A : "㉷" U3277 # CIRCLED HANGUL CHIEUCH A : "㉸" U3278 # CIRCLED HANGUL KHIEUKH A : "㉹" U3279 # CIRCLED HANGUL THIEUTH A : "㉺" U327A # CIRCLED HANGUL PHIEUPH A : "㉻" U327B # CIRCLED HANGUL HIEUH A : "㊀" U3280 # CIRCLED IDEOGRAPH ONE : "㊁" U3281 # CIRCLED IDEOGRAPH TWO : "㊂" U3282 # CIRCLED IDEOGRAPH THREE : "㊃" U3283 # CIRCLED IDEOGRAPH FOUR : "㊄" U3284 # CIRCLED IDEOGRAPH FIVE : "㊅" U3285 # CIRCLED IDEOGRAPH SIX : "㊆" U3286 # CIRCLED IDEOGRAPH SEVEN : "㊇" U3287 # CIRCLED IDEOGRAPH EIGHT : "㊈" U3288 # CIRCLED IDEOGRAPH NINE : "㊉" U3289 # CIRCLED IDEOGRAPH TEN : "㊊" U328A # CIRCLED IDEOGRAPH MOON : "㊋" U328B # CIRCLED IDEOGRAPH FIRE : "㊌" U328C # CIRCLED IDEOGRAPH WATER : "㊍" U328D # CIRCLED IDEOGRAPH WOOD : "㊎" U328E # CIRCLED IDEOGRAPH METAL : "㊏" U328F # CIRCLED IDEOGRAPH EARTH : "㊐" U3290 # CIRCLED IDEOGRAPH SUN : "㊑" U3291 # CIRCLED IDEOGRAPH STOCK : "㊒" U3292 # CIRCLED IDEOGRAPH HAVE : "㊓" U3293 # CIRCLED IDEOGRAPH SOCIETY : "㊔" U3294 # CIRCLED IDEOGRAPH NAME : "㊕" U3295 # CIRCLED IDEOGRAPH SPECIAL : "㊖" U3296 # CIRCLED IDEOGRAPH FINANCIAL : "㊗" U3297 # CIRCLED IDEOGRAPH CONGRATULATION : "㊘" U3298 # CIRCLED IDEOGRAPH LABOR : "㊙" U3299 # CIRCLED IDEOGRAPH SECRET : "㊚" U329A # CIRCLED IDEOGRAPH MALE : "㊛" U329B # CIRCLED IDEOGRAPH FEMALE : "㊜" U329C # CIRCLED IDEOGRAPH SUITABLE : "㊝" U329D # CIRCLED IDEOGRAPH EXCELLENT : "㊞" U329E # CIRCLED IDEOGRAPH PRINT : "㊟" U329F # CIRCLED IDEOGRAPH ATTENTION : "㊠" U32A0 # CIRCLED IDEOGRAPH ITEM : "㊡" U32A1 # CIRCLED IDEOGRAPH REST : "㊢" U32A2 # CIRCLED IDEOGRAPH COPY : "㊣" U32A3 # CIRCLED IDEOGRAPH CORRECT : "㊤" U32A4 # CIRCLED IDEOGRAPH HIGH : "㊥" U32A5 # CIRCLED IDEOGRAPH CENTRE : "㊦" U32A6 # CIRCLED IDEOGRAPH LOW : "㊧" U32A7 # CIRCLED IDEOGRAPH LEFT : "㊨" U32A8 # CIRCLED IDEOGRAPH RIGHT : "㊩" U32A9 # CIRCLED IDEOGRAPH MEDICINE : "㊪" U32AA # CIRCLED IDEOGRAPH RELIGION : "㊫" U32AB # CIRCLED IDEOGRAPH STUDY : "㊬" U32AC # CIRCLED IDEOGRAPH SUPERVISE : "㊭" U32AD # CIRCLED IDEOGRAPH ENTERPRISE : "㊮" U32AE # CIRCLED IDEOGRAPH RESOURCE : "㊯" U32AF # CIRCLED IDEOGRAPH ALLIANCE : "㊰" U32B0 # CIRCLED IDEOGRAPH NIGHT <3> <6> : "㊱" U32B1 # CIRCLED NUMBER THIRTY SIX <3> : "㊱" U32B1 # CIRCLED NUMBER THIRTY SIX <6> : "㊱" U32B1 # CIRCLED NUMBER THIRTY SIX : "㊱" U32B1 # CIRCLED NUMBER THIRTY SIX <3> <7> : "㊲" U32B2 # CIRCLED NUMBER THIRTY SEVEN <3> : "㊲" U32B2 # CIRCLED NUMBER THIRTY SEVEN <7> : "㊲" U32B2 # CIRCLED NUMBER THIRTY SEVEN : "㊲" U32B2 # CIRCLED NUMBER THIRTY SEVEN <3> <8> : "㊳" U32B3 # CIRCLED NUMBER THIRTY EIGHT <3> : "㊳" U32B3 # CIRCLED NUMBER THIRTY EIGHT <8> : "㊳" U32B3 # CIRCLED NUMBER THIRTY EIGHT : "㊳" U32B3 # CIRCLED NUMBER THIRTY EIGHT <3> <9> : "㊴" U32B4 # CIRCLED NUMBER THIRTY NINE <3> : "㊴" U32B4 # CIRCLED NUMBER THIRTY NINE <9> : "㊴" U32B4 # CIRCLED NUMBER THIRTY NINE : "㊴" U32B4 # CIRCLED NUMBER THIRTY NINE <4> <0> : "㊵" U32B5 # CIRCLED NUMBER FORTY <4> : "㊵" U32B5 # CIRCLED NUMBER FORTY <0> : "㊵" U32B5 # CIRCLED NUMBER FORTY : "㊵" U32B5 # CIRCLED NUMBER FORTY <4> <1> : "㊶" U32B6 # CIRCLED NUMBER FORTY ONE <4> : "㊶" U32B6 # CIRCLED NUMBER FORTY ONE <1> : "㊶" U32B6 # CIRCLED NUMBER FORTY ONE : "㊶" U32B6 # CIRCLED NUMBER FORTY ONE <4> <2> : "㊷" U32B7 # CIRCLED NUMBER FORTY TWO <4> : "㊷" U32B7 # CIRCLED NUMBER FORTY TWO <4> : "㊷" U32B7 # CIRCLED NUMBER FORTY TWO <2> : "㊷" U32B7 # CIRCLED NUMBER FORTY TWO : "㊷" U32B7 # CIRCLED NUMBER FORTY TWO : "㊷" U32B7 # CIRCLED NUMBER FORTY TWO <4> <3> : "㊸" U32B8 # CIRCLED NUMBER FORTY THREE <4> : "㊸" U32B8 # CIRCLED NUMBER FORTY THREE <3> : "㊸" U32B8 # CIRCLED NUMBER FORTY THREE : "㊸" U32B8 # CIRCLED NUMBER FORTY THREE <4> <4> : "㊹" U32B9 # CIRCLED NUMBER FORTY FOUR <4> : "㊹" U32B9 # CIRCLED NUMBER FORTY FOUR <4> : "㊹" U32B9 # CIRCLED NUMBER FORTY FOUR : "㊹" U32B9 # CIRCLED NUMBER FORTY FOUR <4> <5> : "㊺" U32BA # CIRCLED NUMBER FORTY FIVE <4> : "㊺" U32BA # CIRCLED NUMBER FORTY FIVE <5> : "㊺" U32BA # CIRCLED NUMBER FORTY FIVE : "㊺" U32BA # CIRCLED NUMBER FORTY FIVE <4> <6> : "㊻" U32BB # CIRCLED NUMBER FORTY SIX <4> : "㊻" U32BB # CIRCLED NUMBER FORTY SIX <6> : "㊻" U32BB # CIRCLED NUMBER FORTY SIX : "㊻" U32BB # CIRCLED NUMBER FORTY SIX <4> <7> : "㊼" U32BC # CIRCLED NUMBER FORTY SEVEN <4> : "㊼" U32BC # CIRCLED NUMBER FORTY SEVEN <7> : "㊼" U32BC # CIRCLED NUMBER FORTY SEVEN : "㊼" U32BC # CIRCLED NUMBER FORTY SEVEN <4> <8> : "㊽" U32BD # CIRCLED NUMBER FORTY EIGHT <4> : "㊽" U32BD # CIRCLED NUMBER FORTY EIGHT <8> : "㊽" U32BD # CIRCLED NUMBER FORTY EIGHT : "㊽" U32BD # CIRCLED NUMBER FORTY EIGHT <4> <9> : "㊾" U32BE # CIRCLED NUMBER FORTY NINE <4> : "㊾" U32BE # CIRCLED NUMBER FORTY NINE <9> : "㊾" U32BE # CIRCLED NUMBER FORTY NINE : "㊾" U32BE # CIRCLED NUMBER FORTY NINE <5> <0> : "㊿" U32BF # CIRCLED NUMBER FIFTY <5> : "㊿" U32BF # CIRCLED NUMBER FIFTY <0> : "㊿" U32BF # CIRCLED NUMBER FIFTY : "㊿" U32BF # CIRCLED NUMBER FIFTY : "㋐" U32D0 # CIRCLED KATAKANA A : "㋑" U32D1 # CIRCLED KATAKANA I : "㋒" U32D2 # CIRCLED KATAKANA U : "㋓" U32D3 # CIRCLED KATAKANA E : "㋔" U32D4 # CIRCLED KATAKANA O : "㋕" U32D5 # CIRCLED KATAKANA KA : "㋖" U32D6 # CIRCLED KATAKANA KI : "㋗" U32D7 # CIRCLED KATAKANA KU : "㋘" U32D8 # CIRCLED KATAKANA KE : "㋙" U32D9 # CIRCLED KATAKANA KO : "㋚" U32DA # CIRCLED KATAKANA SA : "㋛" U32DB # CIRCLED KATAKANA SI : "㋜" U32DC # CIRCLED KATAKANA SU : "㋝" U32DD # CIRCLED KATAKANA SE : "㋞" U32DE # CIRCLED KATAKANA SO : "㋟" U32DF # CIRCLED KATAKANA TA : "㋠" U32E0 # CIRCLED KATAKANA TI : "㋡" U32E1 # CIRCLED KATAKANA TU : "㋢" U32E2 # CIRCLED KATAKANA TE : "㋣" U32E3 # CIRCLED KATAKANA TO : "㋤" U32E4 # CIRCLED KATAKANA NA : "㋥" U32E5 # CIRCLED KATAKANA NI : "㋦" U32E6 # CIRCLED KATAKANA NU : "㋧" U32E7 # CIRCLED KATAKANA NE : "㋨" U32E8 # CIRCLED KATAKANA NO : "㋩" U32E9 # CIRCLED KATAKANA HA : "㋪" U32EA # CIRCLED KATAKANA HI : "㋫" U32EB # CIRCLED KATAKANA HU : "㋬" U32EC # CIRCLED KATAKANA HE : "㋭" U32ED # CIRCLED KATAKANA HO : "㋮" U32EE # CIRCLED KATAKANA MA : "㋯" U32EF # CIRCLED KATAKANA MI : "㋰" U32F0 # CIRCLED KATAKANA MU : "㋱" U32F1 # CIRCLED KATAKANA ME : "㋲" U32F2 # CIRCLED KATAKANA MO : "㋳" U32F3 # CIRCLED KATAKANA YA : "㋴" U32F4 # CIRCLED KATAKANA YU : "㋵" U32F5 # CIRCLED KATAKANA YO : "㋶" U32F6 # CIRCLED KATAKANA RA : "㋷" U32F7 # CIRCLED KATAKANA RI : "㋸" U32F8 # CIRCLED KATAKANA RU : "㋹" U32F9 # CIRCLED KATAKANA RE : "㋺" U32FA # CIRCLED KATAKANA RO : "㋻" U32FB # CIRCLED KATAKANA WA : "㋼" U32FC # CIRCLED KATAKANA WI : "㋽" U32FD # CIRCLED KATAKANA WE : "㋾" U32FE # CIRCLED KATAKANA WO XCOMM XCOMM Hebrew letters with accents XCOMM : "יִ" UFB1D # HEBREW LETTER YOD WITH HIRIQ : "ײַ" UFB1F # HEBREW LIGATURE YIDDISH YOD YOD PATAH : "שׁ" UFB2A # HEBREW LETTER SHIN WITH SHIN DOT : "שׂ" UFB2B # HEBREW LETTER SHIN WITH SIN DOT : "שּׁ" UFB2C # HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT : "שּׁ" UFB2C # HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT : "שּׂ" UFB2D # HEBREW LETTER SHIN WITH DAGESH AND SIN DOT : "שּׂ" UFB2D # HEBREW LETTER SHIN WITH DAGESH AND SIN DOT : "אַ" UFB2E # HEBREW LETTER ALEF WITH PATAH : "אָ" UFB2F # HEBREW LETTER ALEF WITH QAMATS : "אּ" UFB30 # HEBREW LETTER ALEF WITH MAPIQ : "בּ" UFB31 # HEBREW LETTER BET WITH DAGESH : "בּ" UFB31 # HEBREW LETTER BET WITH DAGESH : "גּ" UFB32 # HEBREW LETTER GIMEL WITH DAGESH : "גּ" UFB32 # HEBREW LETTER GIMEL WITH DAGESH : "דּ" UFB33 # HEBREW LETTER DALET WITH DAGESH : "דּ" UFB33 # HEBREW LETTER DALET WITH DAGESH : "הּ" UFB34 # HEBREW LETTER HE WITH MAPIQ : "וּ" UFB35 # HEBREW LETTER VAV WITH DAGESH : "זּ" UFB36 # HEBREW LETTER ZAYIN WITH DAGESH : "זּ" UFB36 # HEBREW LETTER ZAYIN WITH DAGESH : "טּ" UFB38 # HEBREW LETTER TET WITH DAGESH : "טּ" UFB38 # HEBREW LETTER TET WITH DAGESH : "יּ" UFB39 # HEBREW LETTER YOD WITH DAGESH : "ךּ" UFB3A # HEBREW LETTER FINAL KAF WITH DAGESH : "כּ" UFB3B # HEBREW LETTER KAF WITH DAGESH : "לּ" UFB3C # HEBREW LETTER LAMED WITH DAGESH : "מּ" UFB3E # HEBREW LETTER MEM WITH DAGESH : "נּ" UFB40 # HEBREW LETTER NUN WITH DAGESH : "סּ" UFB41 # HEBREW LETTER SAMEKH WITH DAGESH : "סּ" UFB41 # HEBREW LETTER SAMEKH WITH DAGESH : "ףּ" UFB43 # HEBREW LETTER FINAL PE WITH DAGESH : "פּ" UFB44 # HEBREW LETTER PE WITH DAGESH : "צּ" UFB46 # HEBREW LETTER TSADI WITH DAGESH : "צּ" UFB46 # HEBREW LETTER TSADI WITH DAGESH : "קּ" UFB47 # HEBREW LETTER QOF WITH DAGESH : "קּ" UFB47 # HEBREW LETTER QOF WITH DAGESH : "רּ" UFB48 # HEBREW LETTER RESH WITH DAGESH : "שּ" UFB49 # HEBREW LETTER SHIN WITH DAGESH : "תּ" UFB4A # HEBREW LETTER TAV WITH DAGESH : "תּ" UFB4A # HEBREW LETTER TAV WITH DAGESH : "וֹ" UFB4B # HEBREW LETTER VAV WITH HOLAM : "בֿ" UFB4C # HEBREW LETTER BET WITH RAFE : "בֿ" UFB4C # HEBREW LETTER BET WITH RAFE : "כֿ" UFB4D # HEBREW LETTER KAF WITH RAFE : "פֿ" UFB4E # HEBREW LETTER PE WITH RAFE : "𝅗𝅥" U1D15E # MUSICAL SYMBOL HALF NOTE : "𝅘𝅥" U1D15F # MUSICAL SYMBOL QUARTER NOTE : "𝅘𝅥𝅮" U1D160 # MUSICAL SYMBOL EIGHTH NOTE /* : "𝅘𝅥𝅮" U1D160 # MUSICAL SYMBOL EIGHTH NOTE */ : "𝅘𝅥𝅯" U1D161 # MUSICAL SYMBOL SIXTEENTH NOTE /* : "𝅘𝅥𝅯" U1D161 # MUSICAL SYMBOL SIXTEENTH NOTE */ : "𝅘𝅥𝅰" U1D162 # MUSICAL SYMBOL THIRTY-SECOND NOTE /* : "𝅘𝅥𝅰" U1D162 # MUSICAL SYMBOL THIRTY-SECOND NOTE */ : "𝅘𝅥𝅱" U1D163 # MUSICAL SYMBOL SIXTY-FOURTH NOTE /* : "𝅘𝅥𝅱" U1D163 # MUSICAL SYMBOL SIXTY-FOURTH NOTE */ : "𝅘𝅥𝅲" U1D164 # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE /* : "𝅘𝅥𝅲" U1D164 # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE */ : "𝆹𝅥" U1D1BB # MUSICAL SYMBOL MINIMA : "𝆺𝅥" U1D1BC # MUSICAL SYMBOL MINIMA BLACK : "𝆹𝅥𝅮" U1D1BD # MUSICAL SYMBOL SEMIMINIMA WHITE /* : "𝆹𝅥𝅮" U1D1BD # MUSICAL SYMBOL SEMIMINIMA WHITE */ : "𝆺𝅥𝅮" U1D1BE # MUSICAL SYMBOL SEMIMINIMA BLACK /* : "𝆺𝅥𝅮" U1D1BE # MUSICAL SYMBOL SEMIMINIMA BLACK */ : "𝆹𝅥𝅯" U1D1BF # MUSICAL SYMBOL FUSA WHITE /* : "𝆹𝅥𝅯" U1D1BF # MUSICAL SYMBOL FUSA WHITE */ : "𝆺𝅥𝅯" U1D1C0 # MUSICAL SYMBOL FUSA BLACK /* : "𝆺𝅥𝅯" U1D1C0 # MUSICAL SYMBOL FUSA BLACK */ XCOMM XCOMM Khmer digraphs XCOMM : "ាំ" : "ោះ" : "េះ" : "ុំ" : "ុះ" XCOMM XCOMM Arabic Lam-Alef ligatures XCOMM : "لا" # ARABIC LIGATURE LAM WITH ALEF : "لأ" # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE : "لإ" # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW : "لآ" # ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE XCOMM XCOMM French-Dvorak Bépo compositions XCOMM : "Ǡ" U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON : "ǡ" U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON : "ȷ" U0237 # LATIN SMALL LETTER DOTLESS J : "Ŀ" U013F # LATIN CAPITAL LETTER L WITH MIDDLE DOT : "ŀ" U0140 # LATIN SMALL LETTER L WITH MIDDLE DOT : "Ȱ" U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON : "ȱ" U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON : "̇" U0307 # COMBINING DOT ABOVE : "Ṥ" U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE : "ṥ" U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE : "Ǘ" U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE : "ǘ" U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE : "́" U0301 # COMBINING ACUTE ACCENT : "Ṩ" U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE : "ṩ" U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE : "̣" U0323 # COMBINING DOT BELOW : "̣" U0323 # COMBINING DOT BELOW : "̣" U0323 # COMBINING DOT BELOW : "Ắ" Abreveacute # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE : "Ằ" Abrevegrave # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE : "Ẳ" Abrevehook # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE : "Ẵ" Abrevetilde # LATIN CAPITAL LETTER A WITH BREVE AND TILDE : "ắ" abreveacute # LATIN SMALL LETTER A WITH BREVE AND ACUTE : "ằ" abrevegrave # LATIN SMALL LETTER A WITH BREVE AND GRAVE : "ẳ" abrevehook # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE : "ẵ" abrevetilde # LATIN SMALL LETTER A WITH BREVE AND TILDE : "̆" U0306 # COMBINING BREVE : "₍" U208D # SUBSCRIPT LEFT PARENTHESIS : "₎" U208E # SUBSCRIPT RIGHT PARENTHESIS : "₊" U208A # SUBSCRIPT PLUS SIGN : "₋" U208B # SUBSCRIPT MINUS <0> : "₀" zerosubscript # SUBSCRIPT ZERO <1> : "₁" onesubscript # SUBSCRIPT ONE <2> : "₂" twosubscript # SUBSCRIPT TWO <3> : "₃" threesubscript # SUBSCRIPT THREE <4> : "₄" foursubscript # SUBSCRIPT FOUR <5> : "₅" fivesubscript # SUBSCRIPT FIVE <6> : "₆" sixsubscript # SUBSCRIPT SIX <7> : "₇" sevensubscript # SUBSCRIPT SEVEN <8> : "₈" eightsubscript # SUBSCRIPT EIGHT <9> : "₉" ninesubscript # SUBSCRIPT NINE : "₌" U208C # SUBSCRIPT EQUALS SIGN : "Dž" U01C5 # LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON : "Ṧ" U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE : "ṧ" U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE : "Ǚ" U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON : "ǚ" U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON : "̌" U030C # COMBINING CARON : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE : "₵" U20B5 # CEDI SIGN : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE : "₵" U20B5 # CEDI SIGN : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE : "̧" U0327 # COMBINING CEDILLA : "Ấ" Acircumflexacute # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE : "Ầ" Acircumflexgrave # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE : "Ẩ" Acircumflexhook # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE : "Ẫ" Acircumflextilde # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE : "ấ" acircumflexacute # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE : "ầ" acircumflexgrave # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE : "ẩ" acircumflexhook # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE : "ẫ" acircumflextilde # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE : "Ế" Ecircumflexacute # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE : "Ề" Ecircumflexgrave # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE : "Ể" Ecircumflexhook # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE : "Ễ" Ecircumflextilde # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE : "ế" ecircumflexacute # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE : "ề" ecircumflexgrave # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE : "ể" ecircumflexhook # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE : "ễ" ecircumflextilde # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE : "Ố" Ocircumflexacute # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE : "Ồ" Ocircumflexgrave # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE : "Ổ" Ocircumflexhook # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE : "Ỗ" Ocircumflextilde # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE : "ố" ocircumflexacute # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE : "ồ" ocircumflexgrave # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE : "ổ" ocircumflexhook # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE : "ỗ" ocircumflextilde # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE : "̂" U0302 # COMBINING CIRCUMFLEX ACCENT : "Ș" U0218 # LATIN CAPITAL LETTER S WITH COMMA BELOW : "Ș" U0218 # LATIN CAPITAL LETTER S WITH COMMA BELOW : "Ș" U0218 # LATIN CAPITAL LETTER S WITH COMMA BELOW : "ș" U0219 # LATIN SMALL LETTER S WITH COMMA BELOW : "ș" U0219 # LATIN SMALL LETTER S WITH COMMA BELOW : "ș" U0219 # LATIN SMALL LETTER S WITH COMMA BELOW : "Ț" U021A # LATIN CAPITAL LETTER T WITH COMMA BELOW : "Ț" U021A # LATIN CAPITAL LETTER T WITH COMMA BELOW : "Ț" U021A # LATIN CAPITAL LETTER T WITH COMMA BELOW : "ț" U021B # LATIN SMALL LETTER T WITH COMMA BELOW : "ț" U021B # LATIN SMALL LETTER T WITH COMMA BELOW : "ț" U021B # LATIN SMALL LETTER T WITH COMMA BELOW : "," comma # COMMA : "̦" U0326 # COMBINING COMMA BELOW : "," comma # COMMA : "₳" U20B3 # AUSTRAL SIGN : "؋" U060B # AFGHANI SIGN : "₱" U20B1 # PESO SIGN : "฿" Thai_baht # THAI CURRENCY SYMBOL BAHT : "₵" U20B5 # CEDI SIGN : "₡" ColonSign # COLON SIGN : "₵" U20B5 # CEDI SIGN : "¢" cent # CENT SIGN : "₯" U20AF # DRACHMA SIGN : "₫" DongSign # DONG SIGN : "₠" EcuSign # EURO-CURRENCY SIGN : "€" EuroSign # EURO SIGN : "₣" FFrancSign # FRENCH FRANC SIGN : "ƒ" function # LATIN SMALL LETTER F WITH HOOK : "₲" U20B2 # GUARANI SIGN : "₲" U20B2 # GUARANI SIGN : "₴" U20B4 # HRYVNIA SIGN : "₴" U20B4 # HRYVNIA SIGN : "៛" U17DB # KHMER CURRENCY SYMBOL RIEL : "﷼" UFDFC # RIAL SIGN : "₭" U20AD # KIP SIGN : "₭" U20AD # KIP SIGN : "₤" LiraSign # LIRA SIGN : "£" sterling # POUND SIGN : "ℳ" U2133 # SCRIPT CAPITAL M : "₥" MillSign # MILL SIGN : "₦" NairaSign # NAIRA SIGN : "₦" NairaSign # NAIRA SIGN : "૱" U0AF1 # GUJARATI RUPEE SIGN : "௹" U0BF9 # TAMIL RUPEE SIGN

: "₧" PesetaSign # PESETA SIGN

: "₰" U20B0 # GERMAN PENNY SIGN : "₢" CruzeiroSign # CRUZEIRO SIGN : "₨" RupeeSign # RUPEE SIGN : "$" dollar # DOLLAR SIGN : "₪" NewSheqelSign # NEW SHEQEL SIGN : "₮" U20AE # TUGRIK SIGN : "৳" U09F3 # BENGALI RUPEE SIGN : "৲" U09F2 # BENGALI RUPEE MARK : "৲" U09F2 # BENGALI RUPEE MARK : "圓" U5713 # YUAN / WEN : "元" U5143 # YUAN / WEN : "₩" WonSign # WON SIGN : "₩" WonSign # WON SIGN : "円" U5186 # YEN : "¥" yen # YEN SIGN : "¤" currency # CURRENCY SIGN : "¤" currency # CURRENCY SIGN : "¤" currency # CURRENCY SIGN : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON : "Ḯ" U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE : "ḯ" U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE : "Ȫ" U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON : "ȫ" U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON : "Ǘ" U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE : "Ǚ" U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON : "Ǜ" U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE : "ǘ" U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE : "ǚ" U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON : "ǜ" U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE : "̈" U0308 # COMBINING DIAERESIS : "̋" U030B # COMBINING DOUBLE ACUTE ACCENT : "Ǜ" U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE : "ǜ" U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE : "̀" U0300 # COMBINING GRAVE ACCENT : "Α" U0391 # GREEK CAPITAL LETTER ALPHA : "α" U03B1 # GREEK SMALL LETTER ALPHA : "Β" U0392 # GREEK CAPITAL LETTER BETA : "β" U03B2 # GREEK SMALL LETTER BETA : "Δ" U0394 # GREEK CAPITAL LETTER DELTA : "δ" U03B4 # GREEK SMALL LETTER DELTA : "Ε" U0395 # GREEK CAPITAL LETTER EPSILON : "ε" U03B5 # GREEK SMALL LETTER EPSILON : "Φ" U03A6 # GREEK CAPITAL LETTER PHI : "φ" U03C6 # GREEK SMALL LETTER PHI : "Γ" U0393 # GREEK CAPITAL LETTER GAMMA : "γ" U03B3 # GREEK SMALL LETTER GAMMA : "Η" U0397 # GREEK CAPITAL LETTER ETA : "η" U03B7 # GREEK SMALL LETTER ETA : "Ι" U0399 # GREEK CAPITAL LETTER IOTA : "ι" U03B9 # GREEK SMALL LETTER IOTA : "Θ" U0398 # GREEK CAPITAL LETTER THETA : "θ" U03B8 # GREEK SMALL LETTER THETA : "Κ" U039A # GREEK CAPITAL LETTER KAPPA : "κ" U03BA # GREEK SMALL LETTER KAPPA : "Λ" U039B # GREEK CAPITAL LETTER LAMDA : "λ" U03BB # GREEK SMALL LETTER LAMDA : "Μ" U039C # GREEK CAPITAL LETTER MU : "μ" U03BC # GREEK SMALL LETTER MU : "Ν" U039D # GREEK CAPITAL LETTER NU : "ν" U03BD # GREEK SMALL LETTER NU : "Ο" U039F # GREEK CAPITAL LETTER OMICRON : "ο" U03BF # GREEK SMALL LETTER OMICRON

: "Π" U03A0 # GREEK CAPITAL LETTER PI

: "π" U03C0 # GREEK SMALL LETTER PI : "Χ" U03A7 # GREEK CAPITAL LETTER CHI : "χ" U03C7 # GREEK SMALL LETTER CHI : "Ρ" U03A1 # GREEK CAPITAL LETTER RHO : "ρ" U03C1 # GREEK SMALL LETTER RHO : "Σ" U03A3 # GREEK CAPITAL LETTER SIGMA : "σ" U03C3 # GREEK SMALL LETTER SIGMA : "Τ" U03A4 # GREEK CAPITAL LETTER TAU : "τ" U03C4 # GREEK SMALL LETTER TAU : "Υ" U03A5 # GREEK CAPITAL LETTER UPSILON : "υ" U03C5 # GREEK SMALL LETTER UPSILON : "Ω" U03A9 # GREEK CAPITAL LETTER OMEGA : "ω" U03C9 # GREEK SMALL LETTER OMEGA : "Ξ" U039E # GREEK CAPITAL LETTER XI : "ξ" U03BE # GREEK SMALL LETTER XI : "Ψ" U03A8 # GREEK CAPITAL LETTER PSI : "ψ" U03C8 # GREEK SMALL LETTER PSI : "Ζ" U0396 # GREEK CAPITAL LETTER ZETA : "ζ" U03B6 # GREEK SMALL LETTER ZETA : "µ" U00B5 # MICRO SIGN : "µ" U00B5 # MICRO SIGN : "µ" U00B5 # MICRO SIGN : "Ɓ" U0181 # LATIN CAPITAL LETTER B WITH HOOK : "ɓ" U0253 # LATIN SMALL LETTER B WITH HOOK : "Ƈ" U0187 # LATIN CAPITAL LETTER C WITH HOOK : "ƈ" U0188 # LATIN SMALL LETTER C WITH HOOK : "Ɗ" U018A # LATIN CAPITAL LETTER D WITH HOOK : "ɗ" U0257 # LATIN SMALL LETTER D WITH HOOK : "ᶑ" U1D91 # LATIN SMALL LETTER D WITH HOOK AND TAIL : "Ƒ" U0191 # LATIN CAPITAL LETTER F WITH HOOK : "ƒ" function # LATIN SMALL LETTER F WITH HOOK : "Ɠ" U0193 # LATIN CAPITAL LETTER G WITH HOOK : "ɠ" U0260 # LATIN SMALL LETTER G WITH HOOK : "ɦ" U0266 # LATIN SMALL LETTER H WITH HOOK : "ʄ" U0284 # LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK : "Ƙ" U0198 # LATIN CAPITAL LETTER K WITH HOOK : "ƙ" U0199 # LATIN SMALL LETTER K WITH HOOK : "Ɱ" U2C6E # LATIN CAPITAL LETTER M WITH HOOK : "ɱ" U0271 # LATIN SMALL LETTER M WITH HOOK : "Ɲ" U019D # LATIN CAPITAL LETTER N WITH LEFT HOOK : "ɲ" U0272 # LATIN SMALL LETTER N WITH LEFT HOOK

: "Ƥ" U01A4 # LATIN CAPITAL LETTER P WITH HOOK

: "ƥ" U01A5 # LATIN SMALL LETTER P WITH HOOK : "ʠ" U02A0 # LATIN SMALL LETTER Q WITH HOOK : "ɝ" U025D # LATIN SMALL LETTER REVERSED OPEN E WITH HOOK : "ɼ" U027C # LATIN SMALL LETTER R WITH LONG LEG : "ʂ" U0282 # LATIN SMALL LETTER S WITH HOOK : "ɚ" U025A # LATIN SMALL LETTER SCHWA WITH HOOK : "Ƭ" U01AC # LATIN CAPITAL LETTER T WITH HOOK : "ƭ" U01AD # LATIN SMALL LETTER T WITH HOOK : "ɻ" U027B # LATIN SMALL LETTER TURNED R WITH HOOK : "Ʋ" U01B2 # LATIN CAPITAL LETTER V WITH HOOK : "ʋ" U028B # LATIN SMALL LETTER V WITH HOOK : "Ⱳ" U2C72 # LATIN CAPITAL LETTER W WITH HOOK : "ⱳ" U2C73 # LATIN SMALL LETTER W WITH HOOK : "Ȥ" U0224 # LATIN CAPITAL LETTER Z WITH HOOK : "ȥ" U0225 # LATIN SMALL LETTER Z WITH HOOK : "̉" U0309 # COMBINING HOOK ABOVE : "̉" U0309 # COMBINING HOOK ABOVE : "̉" U0309 # COMBINING HOOK ABOVE : "Ớ" Ohornacute # LATIN CAPITAL LETTER O WITH HORN AND ACUTE : "Ợ" Ohornbelowdot # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW : "Ờ" Ohorngrave # LATIN CAPITAL LETTER O WITH HORN AND GRAVE : "Ở" Ohornhook # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE : "Ỡ" Ohorntilde # LATIN CAPITAL LETTER O WITH HORN AND TILDE : "ớ" ohornacute # LATIN SMALL LETTER O WITH HORN AND ACUTE : "ợ" ohornbelowdot # LATIN SMALL LETTER O WITH HORN AND DOT BELOW : "ờ" ohorngrave # LATIN SMALL LETTER O WITH HORN AND GRAVE : "ở" ohornhook # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE : "ỡ" ohorntilde # LATIN SMALL LETTER O WITH HORN AND TILDE : "Ứ" Uhornacute # LATIN CAPITAL LETTER U WITH HORN AND ACUTE : "Ự" Uhornbelowdot # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW : "Ừ" Uhorngrave # LATIN CAPITAL LETTER U WITH HORN AND GRAVE : "Ử" Uhornhook # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE : "Ữ" Uhorntilde # LATIN CAPITAL LETTER U WITH HORN AND TILDE : "ứ" uhornacute # LATIN SMALL LETTER U WITH HORN AND ACUTE : "ự" uhornbelowdot # LATIN SMALL LETTER U WITH HORN AND DOT BELOW : "ừ" uhorngrave # LATIN SMALL LETTER U WITH HORN AND GRAVE : "ử" uhornhook # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE : "ữ" uhorntilde # LATIN SMALL LETTER U WITH HORN AND TILDE : "̛" U031B # COMBINING HORN : "̛" U031B # COMBINING HORN : "̛" U031B # COMBINING HORN : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE : "Ḕ" U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE : "ḕ" U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE : "Ṑ" U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE : "ṑ" U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE : "Ǖ" U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON : "ǖ" U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON : "̄" U0304 # COMBINING MACRON : "Ǭ" U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON : "̨" U0328 # COMBINING OGONEK : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE : "̊" U030A # COMBINING RING ABOVE <2> : "ƻ" U01BB # LATIN LETTER TWO WITH STROKE : "≠" notequal # NOT EQUAL TO : "Ⱥ" U023A # LATIN CAPITAL LETTER A WITH STROKE : "ⱥ" U2C65 # LATIN SMALL LETTER A WITH STROKE : "Ƀ" U0243 # LATIN CAPITAL LETTER B WITH STROKE : "Ȼ" U023B # LATIN CAPITAL LETTER C WITH STROKE : "ȼ" U023C # LATIN SMALL LETTER C WITH STROKE : "Ɇ" U0246 # LATIN CAPITAL LETTER E WITH STROKE : "ɇ" U0247 # LATIN SMALL LETTER E WITH STROKE : "≯" U226F # NOT GREATER-THAN : "≱" U2271 # NEITHER GREATER-THAN NOR EQUAL TO : "Ɉ" U0248 # LATIN CAPITAL LETTER J WITH STROKE : "ɉ" U0249 # LATIN SMALL LETTER J WITH STROKE : "ᵼ" U1D7C # LATIN SMALL LETTER IOTA WITH STROKE : "ɟ" U025F # LATIN SMALL LETTER DOTLESS J WITH STROKE : "≮" U226E # NOT LESS-THAN : "≰" U2270 # NEITHER LESS-THAN NOR EQUAL TO : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE

: "Ᵽ" U2C63 # LATIN CAPITAL LETTER P WITH STROKE

: "ᵽ" U1D7D # LATIN SMALL LETTER P WITH STROKE : "Ɍ" U024C # LATIN CAPITAL LETTER R WITH STROKE : "ɍ" U024D # LATIN SMALL LETTER R WITH STROKE : "Ʉ" U0244 # LATIN CAPITAL LETTER U BAR : "ʉ" U0289 # LATIN SMALL LETTER U BAR : "Ɏ" U024E # LATIN CAPITAL LETTER Y WITH STROKE : "ɏ" U024F # LATIN SMALL LETTER Y WITH STROKE : "/" slash # SOLIDUS : "̸" U0338 # COMBINING LONG SOLIDUS OVERLAY : "/" slash # SOLIDUS : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE : "Ṏ" U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS : "Ȭ" U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE : "ṏ" U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS : "ȭ" U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE : "≃" similarequal # ASYMPTOTICALLY EQUAL TO : "≲" U2272 # LESS-THAN OR EQUIVALENT TO : "≳" U2273 # GREATER-THAN OR EQUIVALENT TO : "̃" U0303 # COMBINING TILDE : "Ṥ" U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE : "ṥ" U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE : "Ṩ" U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE : "ṩ" U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE : "Ṧ" U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE : "ṧ" U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE : "Ǡ" U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON : "ǡ" U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON : "Ȱ" U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON : "ȱ" U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON : "ɟ" U025F # LATIN SMALL LETTER DOTLESS J WITH STROKE : "ɟ" U025F # LATIN SMALL LETTER DOTLESS J WITH STROKE : "Ắ" Abreveacute # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE : "ắ" abreveacute # LATIN SMALL LETTER A WITH BREVE AND ACUTE : "Ḉ" U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE : "ḉ" U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE : "Ấ" Acircumflexacute # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE : "ấ" acircumflexacute # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE : "Ế" Ecircumflexacute # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE : "ế" ecircumflexacute # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE : "Ố" Ocircumflexacute # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE : "ố" ocircumflexacute # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE : "Ḯ" U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE : "ḯ" U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE : "Ǘ" U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE : "ǘ" U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE : "Ớ" Ohornacute # LATIN CAPITAL LETTER O WITH HORN AND ACUTE : "ớ" ohornacute # LATIN SMALL LETTER O WITH HORN AND ACUTE : "Ứ" Uhornacute # LATIN CAPITAL LETTER U WITH HORN AND ACUTE : "ứ" uhornacute # LATIN SMALL LETTER U WITH HORN AND ACUTE : "Ḗ" U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE : "ḗ" U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE : "Ṓ" U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE : "ṓ" U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE : "Ṍ" U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE : "ṍ" U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE : "Ṹ" U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE : "ṹ" U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE : "Ặ" Abrevebelowdot # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW : "ặ" abrevebelowdot # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW : "Ậ" Acircumflexbelowdot # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW : "ậ" acircumflexbelowdot # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW : "Ệ" Ecircumflexbelowdot # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW : "ệ" ecircumflexbelowdot # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW : "Ộ" Ocircumflexbelowdot # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW : "ộ" ocircumflexbelowdot # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW : "Ợ" Ohornbelowdot # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW : "ợ" ohornbelowdot # LATIN SMALL LETTER O WITH HORN AND DOT BELOW : "Ự" Uhornbelowdot # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW : "ự" uhornbelowdot # LATIN SMALL LETTER U WITH HORN AND DOT BELOW : "Ḹ" U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON : "ḹ" U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON : "Ṝ" U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON : "ṝ" U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON : "Ḝ" U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE : "ḝ" U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE : "Ằ" Abrevegrave # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE : "ằ" abrevegrave # LATIN SMALL LETTER A WITH BREVE AND GRAVE : "Ẳ" Abrevehook # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE : "ẳ" abrevehook # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE : "Ẵ" Abrevetilde # LATIN CAPITAL LETTER A WITH BREVE AND TILDE : "ẵ" abrevetilde # LATIN SMALL LETTER A WITH BREVE AND TILDE : "Ǚ" U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON : "ǚ" U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON : "₵" U20B5 # CEDI SIGN : "₵" U20B5 # CEDI SIGN : "₵" U20B5 # CEDI SIGN : "₵" U20B5 # CEDI SIGN : "Ầ" Acircumflexgrave # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE : "ầ" acircumflexgrave # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE : "Ề" Ecircumflexgrave # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE : "ề" ecircumflexgrave # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE : "Ồ" Ocircumflexgrave # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE : "ồ" ocircumflexgrave # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE : "Ẩ" Acircumflexhook # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE : "ẩ" acircumflexhook # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE : "Ể" Ecircumflexhook # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE : "ể" ecircumflexhook # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE : "Ổ" Ocircumflexhook # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE : "ổ" ocircumflexhook # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE : "Ẫ" Acircumflextilde # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE : "ẫ" acircumflextilde # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE : "Ễ" Ecircumflextilde # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE : "ễ" ecircumflextilde # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE : "Ỗ" Ocircumflextilde # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE : "ỗ" ocircumflextilde # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE : "Ǜ" U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE : "ǜ" U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON : "Ȫ" U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON : "ȫ" U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON : "Ṏ" U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS : "ṏ" U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS : "Ờ" Ohorngrave # LATIN CAPITAL LETTER O WITH HORN AND GRAVE : "ờ" ohorngrave # LATIN SMALL LETTER O WITH HORN AND GRAVE : "Ừ" Uhorngrave # LATIN CAPITAL LETTER U WITH HORN AND GRAVE : "ừ" uhorngrave # LATIN SMALL LETTER U WITH HORN AND GRAVE : "Ḕ" U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE : "ḕ" U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE : "Ṑ" U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE : "ṑ" U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE : "Ở" Ohornhook # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE : "ở" ohornhook # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE : "Ử" Uhornhook # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE : "ử" uhornhook # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE : "Ỡ" Ohorntilde # LATIN CAPITAL LETTER O WITH HORN AND TILDE : "ỡ" ohorntilde # LATIN SMALL LETTER O WITH HORN AND TILDE : "Ữ" Uhorntilde # LATIN CAPITAL LETTER U WITH HORN AND TILDE : "ữ" uhorntilde # LATIN SMALL LETTER U WITH HORN AND TILDE : "Ǭ" U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON : "Ȭ" U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON : "ȭ" U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON : "ϒ" U03D2 # GREEK UPSILON WITH HOOK SYMBOL : "ϒ" U03D2 # GREEK UPSILON WITH HOOK SYMBOL : "Ᾱ" U1FB9 # GREEK CAPITAL LETTER ALPHA WITH MACRON : "Ᾱ" U1FB9 # GREEK CAPITAL LETTER ALPHA WITH MACRON : "ᾱ" U1FB1 # GREEK SMALL LETTER ALPHA WITH MACRON : "ᾱ" U1FB1 # GREEK SMALL LETTER ALPHA WITH MACRON : "Ῑ" U1FD9 # GREEK CAPITAL LETTER IOTA WITH MACRON : "Ῑ" U1FD9 # GREEK CAPITAL LETTER IOTA WITH MACRON : "ῑ" U1FD1 # GREEK SMALL LETTER IOTA WITH MACRON : "ῑ" U1FD1 # GREEK SMALL LETTER IOTA WITH MACRON : "Ῡ" U1FE9 # GREEK CAPITAL LETTER UPSILON WITH MACRON : "Ῡ" U1FE9 # GREEK CAPITAL LETTER UPSILON WITH MACRON : "ῡ" U1FE1 # GREEK SMALL LETTER UPSILON WITH MACRON : "ῡ" U1FE1 # GREEK SMALL LETTER UPSILON WITH MACRON : "ϼ" U03FC # GREEK RHO WITH STROKE SYMBOL : "ϼ" U03FC # GREEK RHO WITH STROKE SYMBOL XCOMM XCOMM Cyrillic NFDs XCOMM : "а̏" # CYRILLIC SMALL LETTER A WITH COMBINING DOUBLE GRAVE ACCENT : "а̏" # CYRILLIC SMALL LETTER A WITH COMBINING DOUBLE GRAVE ACCENT : "а̑" # CYRILLIC SMALL LETTER A WITH COMBINING INVERTED BREVE : "а̀" # CYRILLIC SMALL LETTER A WITH COMBINING GRAVE ACCENT : "а̀" # CYRILLIC SMALL LETTER A WITH COMBINING GRAVE ACCENT : "а́" # CYRILLIC SMALL LETTER A WITH COMBINING ACUTE ACCENT : "а́" # CYRILLIC SMALL LETTER A WITH COMBINING ACUTE ACCENT : "а́" # CYRILLIC SMALL LETTER A WITH COMBINING ACUTE ACCENT : "а̄" # CYRILLIC SMALL LETTER A WITH COMBINING MACRON : "а̄" # CYRILLIC SMALL LETTER A WITH COMBINING MACRON : "а̄" # CYRILLIC SMALL LETTER A WITH COMBINING MACRON : "а̂" # CYRILLIC SMALL LETTER A WITH COMBINING CIRCUMFLEX ACCENT : "а̂" # CYRILLIC SMALL LETTER A WITH COMBINING CIRCUMFLEX ACCENT : "А̏" # CYRILLIC CAPITAL LETTER A WITH COMBINING DOUBLE GRAVE ACCENT : "А̏" # CYRILLIC CAPITAL LETTER A WITH COMBINING DOUBLE GRAVE ACCENT : "А̑" # CYRILLIC CAPITAL LETTER A WITH COMBINING INVERTED BREVE : "А̀" # CYRILLIC CAPITAL LETTER A WITH COMBINING GRAVE ACCENT : "А̀" # CYRILLIC CAPITAL LETTER A WITH COMBINING GRAVE ACCENT : "А́" # CYRILLIC CAPITAL LETTER A WITH COMBINING ACUTE ACCENT : "А́" # CYRILLIC CAPITAL LETTER A WITH COMBINING ACUTE ACCENT : "А́" # CYRILLIC CAPITAL LETTER A WITH COMBINING ACUTE ACCENT : "А̄" # CYRILLIC CAPITAL LETTER A WITH COMBINING MACRON : "А̄" # CYRILLIC CAPITAL LETTER A WITH COMBINING MACRON : "А̄" # CYRILLIC CAPITAL LETTER A WITH COMBINING MACRON : "А̂" # CYRILLIC CAPITAL LETTER A WITH COMBINING CIRCUMFLEX ACCENT : "А̂" # CYRILLIC CAPITAL LETTER A WITH COMBINING CIRCUMFLEX ACCENT : "е̏" # CYRILLIC SMALL LETTER IE WITH COMBINING DOUBLE GRAVE ACCENT : "е̏" # CYRILLIC SMALL LETTER IE WITH COMBINING DOUBLE GRAVE ACCENT : "е̑" # CYRILLIC SMALL LETTER IE WITH COMBINING INVERTED BREVE : "е́" # CYRILLIC SMALL LETTER IE WITH COMBINING ACUTE ACCENT : "е́" # CYRILLIC SMALL LETTER IE WITH COMBINING ACUTE ACCENT : "е́" # CYRILLIC SMALL LETTER IE WITH COMBINING ACUTE ACCENT : "е̄" # CYRILLIC SMALL LETTER IE WITH COMBINING MACRON : "е̄" # CYRILLIC SMALL LETTER IE WITH COMBINING MACRON : "е̄" # CYRILLIC SMALL LETTER IE WITH COMBINING MACRON : "е̂" # CYRILLIC SMALL LETTER IE WITH COMBINING CIRCUMFLEX ACCENT : "е̂" # CYRILLIC SMALL LETTER IE WITH COMBINING CIRCUMFLEX ACCENT : "Е̏" # CYRILLIC CAPITAL LETTER IE WITH COMBINING DOUBLE GRAVE ACCENT : "Е̏" # CYRILLIC CAPITAL LETTER IE WITH COMBINING DOUBLE GRAVE ACCENT : "Е̑" # CYRILLIC CAPITAL LETTER IE WITH COMBINING INVERTED BREVE : "Е́" # CYRILLIC CAPITAL LETTER IE WITH COMBINING ACUTE ACCENT : "Е́" # CYRILLIC CAPITAL LETTER IE WITH COMBINING ACUTE ACCENT : "Е́" # CYRILLIC CAPITAL LETTER IE WITH COMBINING ACUTE ACCENT : "Е̄" # CYRILLIC CAPITAL LETTER IE WITH COMBINING MACRON : "Е̄" # CYRILLIC CAPITAL LETTER IE WITH COMBINING MACRON : "Е̄" # CYRILLIC CAPITAL LETTER IE WITH COMBINING MACRON : "Е̂" # CYRILLIC CAPITAL LETTER IE WITH COMBINING CIRCUMFLEX ACCENT : "Е̂" # CYRILLIC CAPITAL LETTER IE WITH COMBINING CIRCUMFLEX ACCENT : "и̏" # CYRILLIC SMALL LETTER I WITH COMBINING DOUBLE GRAVE ACCENT : "и̏" # CYRILLIC SMALL LETTER I WITH COMBINING DOUBLE GRAVE ACCENT : "и̑" # CYRILLIC SMALL LETTER I WITH COMBINING INVERTED BREVE : "и́" # CYRILLIC SMALL LETTER I WITH COMBINING ACUTE ACCENT : "и́" # CYRILLIC SMALL LETTER I WITH COMBINING ACUTE ACCENT : "и́" # CYRILLIC SMALL LETTER I WITH COMBINING ACUTE ACCENT : "и̂" # CYRILLIC SMALL LETTER I WITH COMBINING CIRCUMFLEX ACCENT : "и̂" # CYRILLIC SMALL LETTER I WITH COMBINING CIRCUMFLEX ACCENT : "И̏" # CYRILLIC CAPITAL LETTER I WITH COMBINING DOUBLE GRAVE ACCENT : "И̏" # CYRILLIC CAPITAL LETTER I WITH COMBINING DOUBLE GRAVE ACCENT : "И̑" # CYRILLIC CAPITAL LETTER I WITH COMBINING INVERTED BREVE : "И́" # CYRILLIC CAPITAL LETTER I WITH COMBINING ACUTE ACCENT : "И́" # CYRILLIC CAPITAL LETTER I WITH COMBINING ACUTE ACCENT : "И́" # CYRILLIC CAPITAL LETTER I WITH COMBINING ACUTE ACCENT : "И̂" # CYRILLIC CAPITAL LETTER I WITH COMBINING CIRCUMFLEX ACCENT : "И̂" # CYRILLIC CAPITAL LETTER I WITH COMBINING CIRCUMFLEX ACCENT : "о̏" # CYRILLIC SMALL LETTER O WITH COMBINING DOUBLE GRAVE ACCENT : "о̏" # CYRILLIC SMALL LETTER O WITH COMBINING DOUBLE GRAVE ACCENT : "о̑" # CYRILLIC SMALL LETTER O WITH COMBINING INVERTED BREVE : "о̀" # CYRILLIC SMALL LETTER O WITH COMBINING GRAVE ACCENT : "о̀" # CYRILLIC SMALL LETTER O WITH COMBINING GRAVE ACCENT : "о́" # CYRILLIC SMALL LETTER O WITH COMBINING ACUTE ACCENT : "о́" # CYRILLIC SMALL LETTER O WITH COMBINING ACUTE ACCENT : "о́" # CYRILLIC SMALL LETTER O WITH COMBINING ACUTE ACCENT : "о̄" # CYRILLIC SMALL LETTER O WITH COMBINING MACRON : "о̄" # CYRILLIC SMALL LETTER O WITH COMBINING MACRON : "о̄" # CYRILLIC SMALL LETTER O WITH COMBINING MACRON : "о̂" # CYRILLIC SMALL LETTER O WITH COMBINING CIRCUMFLEX ACCENT : "о̂" # CYRILLIC SMALL LETTER O WITH COMBINING CIRCUMFLEX ACCENT : "О̏" # CYRILLIC CAPITAL LETTER O WITH COMBINING DOUBLE GRAVE ACCENT : "О̏" # CYRILLIC CAPITAL LETTER O WITH COMBINING DOUBLE GRAVE ACCENT : "О̑" # CYRILLIC CAPITAL LETTER O WITH COMBINING INVERTED BREVE : "О̀" # CYRILLIC CAPITAL LETTER O WITH COMBINING GRAVE ACCENT : "О̀" # CYRILLIC CAPITAL LETTER O WITH COMBINING GRAVE ACCENT : "О́" # CYRILLIC CAPITAL LETTER O WITH COMBINING ACUTE ACCENT : "О́" # CYRILLIC CAPITAL LETTER O WITH COMBINING ACUTE ACCENT : "О́" # CYRILLIC CAPITAL LETTER O WITH COMBINING ACUTE ACCENT : "О̄" # CYRILLIC CAPITAL LETTER O WITH COMBINING MACRON : "О̄" # CYRILLIC CAPITAL LETTER O WITH COMBINING MACRON : "О̄" # CYRILLIC CAPITAL LETTER O WITH COMBINING MACRON : "О̂" # CYRILLIC CAPITAL LETTER O WITH COMBINING CIRCUMFLEX ACCENT : "О̂" # CYRILLIC CAPITAL LETTER O WITH COMBINING CIRCUMFLEX ACCENT : "у̏" # CYRILLIC SMALL LETTER U WITH COMBINING DOUBLE GRAVE ACCENT : "у̏" # CYRILLIC SMALL LETTER U WITH COMBINING DOUBLE GRAVE ACCENT : "у̑" # CYRILLIC SMALL LETTER U WITH COMBINING INVERTED BREVE : "у̀" # CYRILLIC SMALL LETTER U WITH COMBINING GRAVE ACCENT : "у̀" # CYRILLIC SMALL LETTER U WITH COMBINING GRAVE ACCENT : "у́" # CYRILLIC SMALL LETTER U WITH COMBINING ACUTE ACCENT : "у́" # CYRILLIC SMALL LETTER U WITH COMBINING ACUTE ACCENT : "у́" # CYRILLIC SMALL LETTER U WITH COMBINING ACUTE ACCENT : "у̂" # CYRILLIC SMALL LETTER U WITH COMBINING CIRCUMFLEX ACCENT : "у̂" # CYRILLIC SMALL LETTER U WITH COMBINING CIRCUMFLEX ACCENT : "У̏" # CYRILLIC CAPITAL LETTER U WITH COMBINING DOUBLE GRAVE ACCENT : "У̏" # CYRILLIC CAPITAL LETTER U WITH COMBINING DOUBLE GRAVE ACCENT : "У̑" # CYRILLIC CAPITAL LETTER U WITH COMBINING INVERTED BREVE : "У̀" # CYRILLIC CAPITAL LETTER U WITH COMBINING GRAVE ACCENT : "У̀" # CYRILLIC CAPITAL LETTER U WITH COMBINING GRAVE ACCENT : "У́" # CYRILLIC CAPITAL LETTER U WITH COMBINING ACUTE ACCENT : "У́" # CYRILLIC CAPITAL LETTER U WITH COMBINING ACUTE ACCENT : "У́" # CYRILLIC CAPITAL LETTER U WITH COMBINING ACUTE ACCENT : "У̂" # CYRILLIC CAPITAL LETTER U WITH COMBINING CIRCUMFLEX ACCENT : "У̂" # CYRILLIC CAPITAL LETTER U WITH COMBINING CIRCUMFLEX ACCENT : "р̏" # CYRILLIC SMALL LETTER ER WITH COMBINING DOUBLE GRAVE ACCENT : "р̏" # CYRILLIC SMALL LETTER ER WITH COMBINING DOUBLE GRAVE ACCENT : "р̑" # CYRILLIC SMALL LETTER ER WITH COMBINING INVERTED BREVE : "р̀" # CYRILLIC SMALL LETTER ER WITH COMBINING GRAVE ACCENT : "р̀" # CYRILLIC SMALL LETTER ER WITH COMBINING GRAVE ACCENT : "р́" # CYRILLIC SMALL LETTER ER WITH COMBINING ACUTE ACCENT : "р́" # CYRILLIC SMALL LETTER ER WITH COMBINING ACUTE ACCENT : "р́" # CYRILLIC SMALL LETTER ER WITH COMBINING ACUTE ACCENT : "р̄" # CYRILLIC SMALL LETTER ER WITH COMBINING MACRON : "р̄" # CYRILLIC SMALL LETTER ER WITH COMBINING MACRON : "р̄" # CYRILLIC SMALL LETTER ER WITH COMBINING MACRON : "р̂" # CYRILLIC SMALL LETTER ER WITH COMBINING CIRCUMFLEX ACCENT : "р̂" # CYRILLIC SMALL LETTER ER WITH COMBINING CIRCUMFLEX ACCENT : "Р̏" # CYRILLIC CAPITAL LETTER ER WITH COMBINING DOUBLE GRAVE ACCENT : "Р̏" # CYRILLIC CAPITAL LETTER ER WITH COMBINING DOUBLE GRAVE ACCENT : "Р̑" # CYRILLIC CAPITAL LETTER ER WITH COMBINING INVERTED BREVE : "Р̀" # CYRILLIC CAPITAL LETTER ER WITH COMBINING GRAVE ACCENT : "Р̀" # CYRILLIC CAPITAL LETTER ER WITH COMBINING GRAVE ACCENT : "Р́" # CYRILLIC CAPITAL LETTER ER WITH COMBINING ACUTE ACCENT : "Р́" # CYRILLIC CAPITAL LETTER ER WITH COMBINING ACUTE ACCENT : "Р́" # CYRILLIC CAPITAL LETTER ER WITH COMBINING ACUTE ACCENT : "Р̄" # CYRILLIC CAPITAL LETTER ER WITH COMBINING MACRON : "Р̄" # CYRILLIC CAPITAL LETTER ER WITH COMBINING MACRON : "Р̄" # CYRILLIC CAPITAL LETTER ER WITH COMBINING MACRON : "Р̂" # CYRILLIC CAPITAL LETTER ER WITH COMBINING CIRCUMFLEX ACCENT : "Р̂" # CYRILLIC CAPITAL LETTER ER WITH COMBINING CIRCUMFLEX ACCENT : "🙌" # PERSON RAISING BOTH HANDS IN CELEBRATION XCOMM APL support Geoff Streeter 2012-01-04 XCOMM APL was initially an overstruck language. The original APL terminal was an IBM golfball XCOMM with a specially designed golfball. This meant that characters could be overstruck to XCOMM produce other characters. This gave APL a richness of primitives which is still powerful XCOMM today. Overstrikes were always independent of order. XCOMM APLs have extended this into a number of dialects. Let us try to support lots of them. XCOMM Together with some that have not been used yet. Some traditional ones are not included. XCOMM Characters from "Mathematical Operators" : "√" U221a # v / SQUARE ROOT : "√" U221a # / v SQUARE ROOT <8> <8> : "∞" U221e # 8 8 INFINITY : "≡" U2261 # = _ IDENTICAL TO : "≢" U2262 # _ ≠ NOT IDENTICAL TO : "≢" U2262 # ≠ _ NOT IDENTICAL TO : "≤" U2264 # < _ LESS-THAN OR EQUAL TO : "≤" U2264 # _ < LESS-THAN OR EQUAL TO : "≥" U2265 # > _ GREATER-THAN OR EQUAL TO : "≥" U2265 # _ > GREATER-THAN OR EQUAL TO : "⊆" U2286 # _ ⊂ SUBSET OF OR EQUAL TO : "⊆" U2286 # ⊂ _ SUBSET OF OR EQUAL TO : "⊇" U2287 # _ ⊃ SUPERSET OF OR EQUAL TO : "⊇" U2287 # ⊃ _ SUPERSET OF OR EQUAL TO : "⊖" U2296 # ○ - CIRCLED MINUS : "⊖" U2296 # - ○ CIRCLED MINUS : "⊙" U2299 # ○ - CIRCLED DOT : "⊙" U2299 # - ○ CIRCLED DOT : "⋄" U22c4 # < > DIAMOND OPERATOR : "⋄" U22c4 # > < DIAMOND OPERATOR : "⋄" U22c4 # ∧ ∨ DIAMOND OPERATOR : "⋄" U22c4 # ∨ ∧ DIAMOND OPERATOR : "∴" therefore # : . THEREFORE : "∵" because # . : BECAUSE XCOMM Characters from "Miscellaneous Technical" : "⌶" U2336 # ⊥ ⊤ APL FUNCTIONAL SYMBOL I-BEAM : "⌶" U2336 # ⊥ ⊤ APL FUNCTIONAL SYMBOL I-BEAM : "⌷" U2337 # [ ] APL FUNCTIONAL SYMBOL SQUISH QUAD : "⌷" U2337 # ] [ APL FUNCTIONAL SYMBOL SQUISH QUAD : "⌸" U2338 # ⎕ = APL FUNCTIONAL SYMBOL QUAD EQUAL : "⌸" U2338 # = ⎕ APL FUNCTIONAL SYMBOL QUAD EQUAL : "⌹" U2339 # ⎕ ÷ APL FUNCTIONAL SYMBOL QUAD DIVIDE : "⌹" U2339 # ÷ ⎕ APL FUNCTIONAL SYMBOL QUAD DIVIDE : "⌺" U233a # ⎕ ⋄ APL FUNCTIONAL SYMBOL QUAD DIAMOND : "⌺" U233a # ⋄ ⎕ APL FUNCTIONAL SYMBOL QUAD DIAMOND : "⌻" U233b # ⎕ ∘ APL FUNCTIONAL SYMBOL QUAD JOT : "⌻" U233b # ∘ ⎕ APL FUNCTIONAL SYMBOL QUAD JOT : "⌼" U233c # ⎕ ○ APL FUNCTIONAL SYMBOL QUAD CIRCLE : "⌼" U233c # ○ ⎕ APL FUNCTIONAL SYMBOL QUAD CIRCLE : "⌽" U233d # ○ | APL FUNCTIONAL SYMBOL CIRCLE STILE : "⌽" U233d # | ○ APL FUNCTIONAL SYMBOL CIRCLE STILE : "⌾" U233e # ○ ∘ APL FUNCTIONAL SYMBOL CIRCLE JOT : "⌾" U233e # ∘ ○ APL FUNCTIONAL SYMBOL CIRCLE JOT : "⌿" U233f # / - APL FUNCTIONAL SYMBOL SLASH BAR : "⌿" U233f # - / APL FUNCTIONAL SYMBOL SLASH BAR : "⍀" U2340 # \ - APL FUNCTIONAL SYMBOL BACKSLASH BAR : "⍀" U2340 # - \ APL FUNCTIONAL SYMBOL BACKSLASH BAR : "⍁" U2341 # / ⎕ APL FUNCTIONAL SYMBOL QUAD SLASH : "⍁" U2341 # ⎕ / APL FUNCTIONAL SYMBOL QUAD SLASH : "⍂" U2342 # \ ⎕ APL FUNCTIONAL SYMBOL QUAD BACKSLASH : "⍂" U2342 # ⎕ \ APL FUNCTIONAL SYMBOL QUAD BACKSLASH : "⍃" U2343 # < ⎕ APL FUNCTIONAL SYMBOL QUAD LESS-THAN : "⍃" U2343 # ⎕ < APL FUNCTIONAL SYMBOL QUAD LESS-THAN : "⍄" U2344 # > ⎕ APL FUNCTIONAL SYMBOL QUAD GREATER-THAN : "⍄" U2344 # ⎕ > APL FUNCTIONAL SYMBOL QUAD GREATER-THAN : "⍅" U2345 # ← | APL FUNCTIONAL SYMBOL LEFTWARDS VANE : "⍅" U2345 # | ← APL FUNCTIONAL SYMBOL LEFTWARDS VANE : "⍆" U2346 # → | APL FUNCTIONAL SYMBOL RIGHTWARDS VANE : "⍆" U2346 # | → APL FUNCTIONAL SYMBOL RIGHTWARDS VANE : "⍇" U2347 # ← ⎕ APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW : "⍇" U2347 # ⎕ ← APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW : "⍈" U2348 # → ⎕ APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW : "⍈" U2348 # ⎕ → APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW : "⍉" U2349 # ○ \ APL FUNCTIONAL SYMBOL CIRCLE SLOPE : "⍉" U2349 # \ ○ APL FUNCTIONAL SYMBOL CIRCLE SLOPE : "⍊" U234a # _ ⊥ APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR : "⍊" U234a # ⊥ _ APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR : "⍋" U234b # ∆ | APL FUNCTIONAL SYMBOL DELTA STILE : "⍋" U234b # | ∆ APL FUNCTIONAL SYMBOL DELTA STILE : "⍌" U234c # ∨ ⎕ APL FUNCTIONAL SYMBOL QUAD DOWN CARET : "⍌" U234c # ⎕ ∨ APL FUNCTIONAL SYMBOL QUAD DOWN CARET : "⍍" U234d # ∆ ⎕ APL FUNCTIONAL SYMBOL QUAD DELTA : "⍍" U234d # ⎕ ∆ APL FUNCTIONAL SYMBOL QUAD DELTA : "⍎" U234e # ∘ ⊥ APL FUNCTIONAL SYMBOL DOWN TACK JOT : "⍎" U234e # ⊥ ∘ APL FUNCTIONAL SYMBOL DOWN TACK JOT : "⍏" U234f # ↑ - APL FUNCTIONAL SYMBOL UPWARDS VANE : "⍏" U234f # - ↑ APL FUNCTIONAL SYMBOL UPWARDS VANE : "⍐" U2350 # ↑ ⎕ APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW : "⍐" U2350 # ⎕ ↑ APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW XCOMM I cannot get anything to work with . Given that no extant APLs use ⍑ I will just leave the lines XCOMM in place. : "⍑" U2351 # ¯ ⊤ APL FUNCTIONAL SYMBOL UP TACK OVERBAR : "⍑" U2351 # ⊤ ¯ APL FUNCTIONAL SYMBOL UP TACK OVERBAR : "⍒" U2352 # ∇ | APL FUNCTIONAL SYMBOL DEL STILE : "⍒" U2352 # | ∇ APL FUNCTIONAL SYMBOL DEL STILE : "⍓" U2353 # ∧ ⎕ APL FUNCTIONAL SYMBOL QUAD UP CARET : "⍓" U2353 # ⎕ ∧ APL FUNCTIONAL SYMBOL QUAD UP CARET : "⍔" U2354 # ∇ ⎕ APL FUNCTIONAL SYMBOL QUAD DEL : "⍔" U2354 # ⎕ ∇ APL FUNCTIONAL SYMBOL QUAD DEL : "⍕" U2355 # ∘ ⊤ APL FUNCTIONAL SYMBOL UP TACK JOT : "⍕" U2355 # ⊤ ∘ APL FUNCTIONAL SYMBOL UP TACK JOT : "⍖" U2356 # ↓ - APL FUNCTIONAL SYMBOL DOWNWARDS VANE : "⍖" U2356 # - ↓ APL FUNCTIONAL SYMBOL DOWNWARDS VANE : "⍗" U2357 # ↓ ⎕ APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW : "⍗" U2357 # ⎕ ↓ APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW XCOMM This line clashes with the (and similar) that appear to be there to provide XCOMM a work around for the problems with . Or to cope with keyboards that do not have (more likely). XCOMM All APL keyboards have , it is used as the -ve sign for numbers. XCOMM I do not know of an extant APL using ⍘ : "⍘" U2358 # _ ' APL FUNCTIONAL SYMBOL QUOTE UNDERBAR : "⍙" U2359 # ∆ _ APL FUNCTIONAL SYMBOL DELTA UNDERBAR : "⍙" U2359 # _ ∆ APL FUNCTIONAL SYMBOL DELTA UNDERBAR : "⍚" U235a # ⋄ _ APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR : "⍚" U235a # _ ⋄ APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR : "⍛" U235b # ∘ _ APL FUNCTIONAL SYMBOL JOT UNDERBAR : "⍛" U235b # _ ∘ APL FUNCTIONAL SYMBOL JOT UNDERBAR : "⍜" U235c # ○ _ APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR : "⍜" U235c # _ ○ APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR : "⍝" U235d # ∘ ∩ APL FUNCTIONAL SYMBOL UP SHOE JOT : "⍝" U235d # ∩ ∘ APL FUNCTIONAL SYMBOL UP SHOE JOT : "⍞" U235e # * ¨ APL FUNCTIONAL SYMBOL QUOTE QUAD : "⍞" U235e # ¨ * APL FUNCTIONAL SYMBOL QUOTE QUAD : "⍟" U235f # ○ * APL FUNCTIONAL SYMBOL CIRCLE STAR : "⍟" U235f # * ○ APL FUNCTIONAL SYMBOL CIRCLE STAR : "⍠" U2360 # : ⎕ APL FUNCTIONAL SYMBOL QUAD COLON : "⍠" U2360 # ⎕ : APL FUNCTIONAL SYMBOL QUAD COLON : "⍡" U2361 # ¨ ⊤ APL FUNCTIONAL SYMBOL UP TACK DIAERESIS : "⍡" U2361 # ⊤ ¨ APL FUNCTIONAL SYMBOL UP TACK DIAERESIS : "⍢" U2362 # ¨ ∇ APL FUNCTIONAL SYMBOL DEL DIAERESIS : "⍢" U2362 # ∇ ¨ APL FUNCTIONAL SYMBOL DEL DIAERESIS : "⍣" U2363 # * ¨ APL FUNCTIONAL SYMBOL STAR DIAERESIS : "⍣" U2363 # ¨ * APL FUNCTIONAL SYMBOL STAR DIAERESIS : "⍤" U2364 # ∘ ¨ APL FUNCTIONAL SYMBOL JOT DIAERESIS : "⍤" U2364 # ¨ ∘ APL FUNCTIONAL SYMBOL JOT DIAERESIS : "⍥" U2365 # ○ ¨ APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS : "⍥" U2365 # ¨ ○ APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS : "⍦" U2366 # ∪ | APL FUNCTIONAL SYMBOL DOWN SHOE STILE : "⍦" U2366 # | ∪ APL FUNCTIONAL SYMBOL DOWN SHOE STILE : "⍧" U2367 # ⊂ | APL FUNCTIONAL SYMBOL LEFT SHOE STILE : "⍧" U2367 # | ⊂ APL FUNCTIONAL SYMBOL LEFT SHOE STILE : "⍨" U2368 # ~ ¨ APL FUNCTIONAL SYMBOL TILDE DIAERESIS : "⍩" U2369 # ¨ > APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS : "⍩" U2369 # > ¨ APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS : "⍫" U236b # ∇ ~ APL FUNCTIONAL SYMBOL DEL TILDE : "⍫" U236b # ~ ∇ APL FUNCTIONAL SYMBOL DEL TILDE <0> : "⍬" U236c # 0 ~ APL FUNCTIONAL SYMBOL ZILDE <0> : "⍬" U236c # ~ 0 APL FUNCTIONAL SYMBOL ZILDE : "⍭" U236d # | ~ APL FUNCTIONAL SYMBOL STILE TILDE : "⍭" U236d # ~ | APL FUNCTIONAL SYMBOL STILE TILDE XCOMM This line does not work. It clashes with XCOMM for Ǭ and XCOMM for ǭ. XCOMM Given that no extant APLs use ⍮ I will just leave the line in place. : "⍮" U236e # ; _ APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR : "⍯" U236f # ≠ ⎕ APL FUNCTIONAL SYMBOL QUAD NOT EQUAL : "⍯" U236f # ⎕ ≠ APL FUNCTIONAL SYMBOL QUAD NOT EQUAL : "⍰" U2370 # ? ⎕ APL FUNCTIONAL SYMBOL QUAD QUESTION : "⍰" U2370 # ⎕ ? APL FUNCTIONAL SYMBOL QUAD QUESTION : "⍱" U2371 # ∨ ~ APL FUNCTIONAL SYMBOL DOWN CARET TILDE : "⍱" U2371 # ~ ∨ APL FUNCTIONAL SYMBOL DOWN CARET TILDE : "⍲" U2372 # ∧ ~ APL FUNCTIONAL SYMBOL UP CARET TILDE : "⍲" U2372 # ~ ∧ APL FUNCTIONAL SYMBOL UP CARET TILDE : "⍶" U2376 # ⍺ _ APL FUNCTIONAL SYMBOL ALPHA UNDERBAR : "⍶" U2376 # _ ⍺ APL FUNCTIONAL SYMBOL ALPHA UNDERBAR : "⍷" U2377 # ∊ _ APL FUNCTIONAL SYMBOL EPSILON UNDERBAR : "⍷" U2377 # _ ∊ APL FUNCTIONAL SYMBOL EPSILON UNDERBAR : "⍸" U2378 # ⍳ _ APL FUNCTIONAL SYMBOL IOTA UNDERBAR : "⍸" U2378 # _ ⍳ APL FUNCTIONAL SYMBOL IOTA UNDERBAR : "⍹" U2379 # ⍵ _ APL FUNCTIONAL SYMBOL OMEGA UNDERBAR : "⍹" U2379 # _ ⍵ APL FUNCTIONAL SYMBOL OMEGA UNDERBAR LE SLOPE : "⍉" U2349 # \ ○ APL FUNCTIONAL SYMBOL CIRCLE SLOPE : "⍊" U234a # _ ⊥ APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR : "libX11-1.6.3/nls/en_US.UTF-8/XI18N_OBJS000064401431060000012000000005321247741723500170340ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for euro locales # XLC common/xlcUTF8Load _XlcUtf8Loader # XLC_open XOM common/xomGeneric _XomGenericOpenOM # XOM_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister libX11-1.6.3/nls/en_US.UTF-8/XLC_LOCALE.pre000064401431060000012000000104341247741723500176440ustar00alancstaff00002660200006XCOMM XLocale Database Sample for en_US.UTF-8 XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET on_demand_loading True object_name generic XCOMM fs0 class (7 bit ASCII) fs0 { charset { name ISO8859-1:GL } font { primary ISO8859-1:GL vertical_rotate all } } XCOMM fs1 class (ISO8859 families) fs1 { charset { name ISO8859-1:GR } font { primary ISO8859-1:GR } } XCOMM fs2 class (ISO8859 families) fs2 { charset { name ISO8859-2:GR } font { primary ISO8859-2:GR } } XCOMM fs3 class (ISO8859 families) fs3 { charset { name ISO8859-3:GR } font { primary ISO8859-3:GR } } XCOMM fs4 class (ISO8859 families) fs4 { charset { name ISO8859-4:GR } font { primary ISO8859-4:GR } } XCOMM fs5 class (ISO8859 families) fs5 { charset { name ISO8859-5:GR } font { primary ISO8859-5:GR } } XCOMM fs6 class (koi8-r) fs6 { charset { name KOI8-R:GR } font { primary KOI8-R:GR } } XCOMM fs7 class (ISO8859 families) fs7 { charset { name ISO8859-7:GR } font { primary ISO8859-7:GR } } XCOMM fs9 class (ISO8859 families) fs8 { charset { name ISO8859-9:GR } font { primary ISO8859-9:GR } } XCOMM fs13 class (ISO8859 families) fs9 { charset { name ISO8859-13:GR } font { primary ISO8859-13:GR } } XCOMM fs14 class (ISO8859 families) fs10 { charset { name ISO8859-14:GR } font { primary ISO8859-14:GR } } XCOMM fs15 class (ISO8859 families) fs11 { charset { name ISO8859-15:GR } font { primary ISO8859-15:GR } } XCOMM fs16 class (Kanji) fs12 { charset { name JISX0208.1983-0:GL } font { primary JISX0208.1983-0:GL } } XCOMM fs17 class (Korean Character) fs13 { charset { name KSC5601.1987-0:GL } font { primary KSC5601.1987-0:GL } } XCOMM fs18 class (Chinese Han Character) fs14 { charset { name GB2312.1980-0:GL } font { primary GB2312.1980-0:GL } } XCOMM fs20 class (Half Kana) fs15 { charset { name JISX0201.1976-0:GR } font { primary JISX0201.1976-0:GR vertical_rotate all } } XCOMM ISO10646 should come last so the fonts above will actually be used XCOMM fs24 class fs16 { charset { name ISO10646-1 } font { primary ISO10646-1 } } END XLC_FONTSET XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name UTF-8 mb_cur_max 6 state_depend_encoding False XCOMM cs0 class cs0 { side GL:Default length 1 ct_encoding ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 ct_encoding ISO8859-1:GR } XCOMM cs2 class cs2 { side GR length 1 ct_encoding ISO8859-2:GR } XCOMM cs3 class cs3 { side GR length 1 ct_encoding ISO8859-3:GR } XCOMM cs4 class cs4 { side GR length 1 ct_encoding ISO8859-4:GR } XCOMM cs5 class cs5 { side GR length 1 ct_encoding ISO8859-5:GR } XCOMM cs6 class cs6 { side GR length 1 ct_encoding KOI8-R:GR } XCOMM cs7 class cs7 { side GR length 1 ct_encoding ISO8859-7:GR } XCOMM cs9 class cs8 { side GR length 1 ct_encoding ISO8859-9:GR } XCOMM cs13 class cs9 { side GR length 1 ct_encoding ISO8859-13:GR } XCOMM cs14 class cs10 { side GR length 1 ct_encoding ISO8859-14:GR } XCOMM cs15 class cs11 { side GR length 1 ct_encoding ISO8859-15:GR } XCOMM cs16 class cs12 { side GR length 2 ct_encoding JISX0208.1983-0:GL; JISX0208.1983-0:GR;\ JISX0208.1983-1:GL; JISX0208.1983-1:GR } XCOMM cs17 class cs13 { side GL length 2 ct_encoding KSC5601.1987-0:GL; KSC5601.1987-0:GR;\ KSC5601.1987-1:GL; KSC5601.1987-1:GR } XCOMM cs18 class cs14 { side GR length 2 ct_encoding GB2312.1980-0:GL; GB2312.1980-0:GR } XCOMM cs20 class cs15 { side GR length 1 ct_encoding JISX0201.1976-0:GR } XCOMM cs24 class cs16 { side none ct_encoding ISO10646-1 } END XLC_XLOCALE libX11-1.6.3/nls/zh_CN.gbk/Compose.pre000064401431060000012000000005471247741723500175400ustar00alancstaff00002660200006XCOMM XCOMM zh_CN.GBK Compose Sequence XCOMM XCOMM Sequence Definition XCOMM XCOMM XCOMM This file currently has no entries. It appears that a compose file (even XCOMM just an empty one) is required for the appropriate keysyms to work for XCOMM this encoding. XCOMM XCOMM Means XCOMM Special Character XCOMM End of Sequence Definition libX11-1.6.3/nls/zh_CN.gbk/XI18N_OBJS000064401431060000012000000005271247741723500167700ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for zh_CN.gbk locale # XLC common/xlibi18n _XlcGenericLoader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/zh_CN.gbk/XLC_LOCALE.pre000064401431060000012000000023231247741723500175720ustar00alancstaff00002660200006XCOMM XCOMM X11R6 L10N for Chinese GBK Encoding. XCOMM modified from xc/nls/XLC_LOCALE/zh_TW.Big5 XCOMM by Sean Chen XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class (7 bit ASCII) fs0 { charset { name ISO8859-1:GL } font { primary ISO8859-1:GL vertical_rotate all } } XCOMM fs1 class fs1 { charset { name GBK-0:GLGR } font { primary GBK-0:GLGR substitute GB13000.1993-1:GLGR } } END XLC_FONTSET XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name zh_CN.GBK mb_cur_max 2 state_depend_encoding False wc_encoding_mask \x00008000 wc_shift_bits 8 use_stdc_env True force_convert_to_mb True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding ISO8859-1:GL } XCOMM cs1 class cs1 { side none length 2 byte1 \x81,\xfe byte2 \x40,\x7e;\x80,\xfe wc_encoding \x00008000 ct_encoding GBK-0:GLGR:\x1b\x25\x2f\x32 mb_conversion [\x8140,\xfefe]->\x0140 ct_conversion [\x0140,\x7efe]->\x8140 } END XLC_XLOCALE libX11-1.6.3/nls/el_GR.UTF-8/XI18N_OBJS000064401431060000012000000000001247741723500170010ustar00alancstaff00002660200006libX11-1.6.3/nls/el_GR.UTF-8/XLC_LOCALE.pre000064401431060000012000000000001247741723500176070ustar00alancstaff00002660200006libX11-1.6.3/nls/el_GR.UTF-8/Compose.pre000064401431060000012000003644411247741723500175750ustar00alancstaff00002660200006XCOMM XCOMM XCOMM UTF-8 compose sequence definitions for the greek keyboard layout. XCOMM XCOMM This file is mostly meant to be used along with the xkb/symbols/el XCOMM symbols definition file. In addition, the dead key definitions in XCOMM the machine generated part are really only relevant to the XCOMM "polytonic" variant in that file. XCOMM XCOMM The definitions herein cover the following ISO 10646 / Unicode XCOMM ranges: XCOMM - Basic Latin (0000-007F) (complete coverage) XCOMM - Latin-1 Supplement (0080-00FF) (complete coverage) XCOMM - Greek and Coptic (0370-03FF) (only the big ISO 8859-7 based XCOMM part at the beginning) XCOMM - Greek Extended (1F00-1FFF) (complete coverage) XCOMM - There are also six (6) characters from other ranges. XCOMM Moreover, the following character sets are completely covered: XCOMM - ISO 8859-1 XCOMM - ISO 8859-7 XCOMM XCOMM This file consists of four parts. Two of them have been adapted from XCOMM the iso8859-1/Compose and iso8859-7/Compose files. The other two XCOMM parts have been created by: XCOMM Vasilis Vasaitis XCOMM based on the idea and initial implementation by: XCOMM Alejandros Diamandidis XCOMM Part 1 XCOMM XCOMM ISO 8859-1 (Latin-1) multi-key definitions extracted and converted XCOMM from the iso8859-1/Compose file. XCOMM Special Character : "#" numbersign : "'" apostrophe : "'" apostrophe : "@" at : "[" bracketleft : "\\" backslash : "\\" backslash : "]" bracketright : "^" asciicircum : "^" asciicircum : "^" asciicircum : "^" asciicircum : "`" grave : "`" grave : "{" braceleft : "{" braceleft : "|" bar : "|" bar : "|" bar : "|" bar : "|" bar : "|" bar : "}" braceright : "}" braceright : "~" asciitilde : "~" asciitilde : "~" asciitilde : "~" asciitilde : "¡" exclamdown : "¢" cent : "¢" cent : "¢" cent : "¢" cent : "¢" cent : "¢" cent : "¢" cent : "¢" cent : "£" sterling : "£" sterling : "£" sterling : "£" sterling : "£" sterling : "£" sterling : "£" sterling : "£" sterling : "¥" yen : "¥" yen : "¥" yen : "¥" yen : "¥" yen : "¥" yen : "¥" yen : "¥" yen : "§" section : "§" section : "§" section : "§" section : "§" section : "§" section : "§" section : "§" section <0> : "§" section <0> : "§" section <0> : "§" section <0> : "§" section : "¤" currency : "¤" currency : "¤" currency : "¤" currency : "¤" currency : "¤" currency : "¤" currency : "¤" currency <0> : "¤" currency <0> : "¤" currency <0> : "¤" currency <0> : "¤" currency : "©" copyright : "©" copyright : "©" copyright : "©" copyright : "©" copyright : "©" copyright : "©" copyright : "©" copyright <0> : "©" copyright <0> : "©" copyright <0> : "©" copyright <0> : "©" copyright : "©" copyright : "ª" ordfeminine : "ª" ordfeminine : "ª" ordfeminine : "ª" ordfeminine : "º" masculine : "º" masculine : "º" masculine : "º" masculine : "«" guillemotleft : "»" guillemotright <0> : "°" degree <0> : "°" degree <0> : "°" degree <0> : "°" degree : "±" plusminus : "±" plusminus : "µ" mu : "µ" mu : "µ" mu : "µ" mu <1> : "¹" onesuperior <1> : "¹" onesuperior <1> : "¹" onesuperior <1> : "¹" onesuperior <1> : "¹" onesuperior <1> : "¹" onesuperior <2> : "²" twosuperior <2> : "²" twosuperior <2> : "²" twosuperior <2> : "²" twosuperior <2> : "²" twosuperior <2> : "²" twosuperior <3> : "³" threesuperior <3> : "³" threesuperior <3> : "³" threesuperior <3> : "³" threesuperior <3> : "³" threesuperior <3> : "³" threesuperior

: "¶" paragraph

: "¶" paragraph

: "¶" paragraph

: "¶" paragraph : "·" periodcentered : "·" periodcentered : "·" periodcentered : "•" enfilledcircbullet : "…" ellipsis <1> <4> : "¼" onequarter <1> <2> : "½" onehalf <3> <4> : "¾" threequarters : "¿" questiondown : " " nobreakspace : "¦" brokenbar : "¦" brokenbar : "¦" brokenbar : "¦" brokenbar : "¦" brokenbar : "¦" brokenbar : "¦" brokenbar : "¬" notsign : "¬" notsign : "­" hyphen : "®" registered : "®" registered : "®" registered : "¯" macron : "¯" macron : "¯" macron : "¯" macron : "¯" macron : "÷" division : "÷" division : "×" multiply : "´" acute : "¸" cedilla : "¨" diaeresis XCOMM Accented Alphabet : "À" Agrave : "À" Agrave : "Á" Aacute : "Á" Aacute : "Á" Aacute : "Á" Aacute : "Â" Acircumflex : "Â" Acircumflex : "Â" Acircumflex : "Â" Acircumflex : "Ã" Atilde : "Ã" Atilde : "Ã" Atilde : "Ã" Atilde : "Ä" Adiaeresis : "Ä" Adiaeresis : "Ä" Adiaeresis : "Ä" Adiaeresis : "Å" Aring : "Å" Aring : "Å" Aring : "Å" Aring : "Æ" AE : "à" agrave : "à" agrave : "á" aacute : "á" aacute : "á" aacute : "á" aacute : "â" acircumflex : "â" acircumflex : "â" acircumflex : "â" acircumflex : "ã" atilde : "ã" atilde : "ã" atilde : "ã" atilde : "ä" adiaeresis : "ä" adiaeresis : "ä" adiaeresis : "ä" adiaeresis : "å" aring : "å" aring : "å" aring : "å" aring : "æ" ae : "Ç" Ccedilla : "ç" ccedilla : "Ç" Ccedilla : "Ç" Ccedilla : "Ç" Ccedilla : "Ç" Ccedilla : "ç" ccedilla : "ç" ccedilla : "ç" ccedilla : "ç" ccedilla : "Ð" ETH : "Ð" ETH : "ð" eth : "ð" eth : "È" Egrave : "È" Egrave : "É" Eacute : "É" Eacute : "É" Eacute : "É" Eacute : "Ê" Ecircumflex : "Ê" Ecircumflex : "Ê" Ecircumflex : "Ê" Ecircumflex : "Ë" Ediaeresis : "Ë" Ediaeresis : "Ë" Ediaeresis : "Ë" Ediaeresis : "è" egrave : "è" egrave : "é" eacute : "é" eacute : "é" eacute : "é" eacute : "ê" ecircumflex : "ê" ecircumflex : "ê" ecircumflex : "ê" ecircumflex : "ë" ediaeresis : "ë" ediaeresis : "ë" ediaeresis : "ë" ediaeresis : "Ì" Igrave : "Ì" Igrave : "Í" Iacute : "Í" Iacute : "Í" Iacute : "Í" Iacute : "Î" Icircumflex : "Î" Icircumflex : "Î" Icircumflex : "Î" Icircumflex : "Ï" Idiaeresis : "Ï" Idiaeresis : "Ï" Idiaeresis : "Ï" Idiaeresis : "ì" igrave : "ì" igrave : "í" iacute : "í" iacute : "í" iacute : "í" iacute : "î" icircumflex : "î" icircumflex : "î" icircumflex : "î" icircumflex : "ï" idiaeresis : "ï" idiaeresis : "ï" idiaeresis : "ï" idiaeresis : "Ñ" Ntilde : "Ñ" Ntilde : "Ñ" Ntilde : "Ñ" Ntilde : "ñ" ntilde : "ñ" ntilde : "ñ" ntilde : "ñ" ntilde : "Ò" Ograve : "Ò" Ograve : "Ó" Oacute : "Ó" Oacute : "Ó" Oacute : "Ó" Oacute : "Ô" Ocircumflex : "Ô" Ocircumflex : "Ô" Ocircumflex : "Ô" Ocircumflex : "Õ" Otilde : "Õ" Otilde : "Õ" Otilde : "Õ" Otilde : "Ö" Odiaeresis : "Ö" Odiaeresis : "Ö" Odiaeresis : "Ö" Odiaeresis : "Ø" Ooblique : "Ø" Ooblique : "ò" ograve : "ò" ograve : "ó" oacute : "ó" oacute : "ó" oacute : "ó" oacute : "ô" ocircumflex : "ô" ocircumflex : "ô" ocircumflex : "ô" ocircumflex : "õ" otilde : "õ" otilde : "õ" otilde : "õ" otilde : "ö" odiaeresis : "ö" odiaeresis : "ö" odiaeresis : "ö" odiaeresis : "ø" oslash : "ø" oslash : "Ù" Ugrave : "Ù" Ugrave : "Ú" Uacute : "Ú" Uacute : "Ú" Uacute : "Ú" Uacute : "Û" Ucircumflex : "Û" Ucircumflex : "Û" Ucircumflex : "Û" Ucircumflex : "Ü" Udiaeresis : "Ü" Udiaeresis : "Ü" Udiaeresis : "Ü" Udiaeresis : "ù" ugrave : "ù" ugrave : "ú" uacute : "ú" uacute : "ú" uacute : "ú" uacute : "û" ucircumflex : "û" ucircumflex : "û" ucircumflex : "û" ucircumflex : "ü" udiaeresis : "ü" udiaeresis : "ü" udiaeresis : "ü" udiaeresis : "ß" ssharp : "Þ" THORN : "þ" thorn : "Ý" Yacute : "Ý" Yacute : "Ý" Yacute : "Ý" Yacute : "ý" yacute : "ý" yacute : "ý" yacute : "ý" yacute : "ÿ" ydiaeresis : "ÿ" ydiaeresis : "ÿ" ydiaeresis : "ÿ" ydiaeresis XCOMM Part 2 XCOMM XCOMM Greek Extended multi-key and dead key definitions. These have been XCOMM machine-generated by a perl script, found at: XCOMM http://hal.csd.auth.gr/~vvas/i18n/xkb/polytonic-compose.pl : "ἀ" U1f00 : "ἀ" U1f00 : "ἀ" U1f00 : "ἁ" U1f01 : "ἁ" U1f01 : "ἁ" U1f01 : "ἂ" U1f02 : "ἂ" U1f02 : "ἂ" U1f02 : "ἂ" U1f02 : "ἂ" U1f02 : "ἂ" U1f02 : "ἃ" U1f03 : "ἃ" U1f03 : "ἃ" U1f03 : "ἃ" U1f03 : "ἃ" U1f03 : "ἃ" U1f03 : "ἄ" U1f04 : "ἄ" U1f04 : "ἄ" U1f04 : "ἄ" U1f04 : "ἄ" U1f04 : "ἄ" U1f04 : "ἅ" U1f05 : "ἅ" U1f05 : "ἅ" U1f05 : "ἅ" U1f05 : "ἅ" U1f05 : "ἅ" U1f05 : "ἆ" U1f06 : "ἆ" U1f06 : "ἆ" U1f06 : "ἆ" U1f06 : "ἆ" U1f06 : "ἆ" U1f06 : "ἇ" U1f07 : "ἇ" U1f07 : "ἇ" U1f07 : "ἇ" U1f07 : "ἇ" U1f07 : "ἇ" U1f07 : "Ἀ" U1f08 : "Ἀ" U1f08 : "Ἀ" U1f08 : "Ἁ" U1f09 : "Ἁ" U1f09 : "Ἁ" U1f09 : "Ἂ" U1f0a : "Ἂ" U1f0a : "Ἂ" U1f0a : "Ἂ" U1f0a : "Ἂ" U1f0a : "Ἂ" U1f0a : "Ἃ" U1f0b : "Ἃ" U1f0b : "Ἃ" U1f0b : "Ἃ" U1f0b : "Ἃ" U1f0b : "Ἃ" U1f0b : "Ἄ" U1f0c : "Ἄ" U1f0c : "Ἄ" U1f0c : "Ἄ" U1f0c : "Ἄ" U1f0c : "Ἄ" U1f0c : "Ἅ" U1f0d : "Ἅ" U1f0d : "Ἅ" U1f0d : "Ἅ" U1f0d : "Ἅ" U1f0d : "Ἅ" U1f0d : "Ἆ" U1f0e : "Ἆ" U1f0e : "Ἆ" U1f0e : "Ἆ" U1f0e : "Ἆ" U1f0e : "Ἆ" U1f0e : "Ἇ" U1f0f : "Ἇ" U1f0f : "Ἇ" U1f0f : "Ἇ" U1f0f : "Ἇ" U1f0f : "Ἇ" U1f0f : "ἐ" U1f10 : "ἐ" U1f10 : "ἐ" U1f10 : "ἑ" U1f11 : "ἑ" U1f11 : "ἑ" U1f11 : "ἒ" U1f12 : "ἒ" U1f12 : "ἒ" U1f12 : "ἒ" U1f12 : "ἒ" U1f12 : "ἒ" U1f12 : "ἓ" U1f13 : "ἓ" U1f13 : "ἓ" U1f13 : "ἓ" U1f13 : "ἓ" U1f13 : "ἓ" U1f13 : "ἔ" U1f14 : "ἔ" U1f14 : "ἔ" U1f14 : "ἔ" U1f14 : "ἔ" U1f14 : "ἔ" U1f14 : "ἕ" U1f15 : "ἕ" U1f15 : "ἕ" U1f15 : "ἕ" U1f15 : "ἕ" U1f15 : "ἕ" U1f15 : "Ἐ" U1f18 : "Ἐ" U1f18 : "Ἐ" U1f18 : "Ἑ" U1f19 : "Ἑ" U1f19 : "Ἑ" U1f19 : "Ἒ" U1f1a : "Ἒ" U1f1a : "Ἒ" U1f1a : "Ἒ" U1f1a : "Ἒ" U1f1a : "Ἒ" U1f1a : "Ἓ" U1f1b : "Ἓ" U1f1b : "Ἓ" U1f1b : "Ἓ" U1f1b : "Ἓ" U1f1b : "Ἓ" U1f1b : "Ἔ" U1f1c : "Ἔ" U1f1c : "Ἔ" U1f1c : "Ἔ" U1f1c : "Ἔ" U1f1c : "Ἔ" U1f1c : "Ἕ" U1f1d : "Ἕ" U1f1d : "Ἕ" U1f1d : "Ἕ" U1f1d : "Ἕ" U1f1d : "Ἕ" U1f1d : "ἠ" U1f20 : "ἠ" U1f20 : "ἠ" U1f20 : "ἡ" U1f21 : "ἡ" U1f21 : "ἡ" U1f21 : "ἢ" U1f22 : "ἢ" U1f22 : "ἢ" U1f22 : "ἢ" U1f22 : "ἢ" U1f22 : "ἢ" U1f22 : "ἣ" U1f23 : "ἣ" U1f23 : "ἣ" U1f23 : "ἣ" U1f23 : "ἣ" U1f23 : "ἣ" U1f23 : "ἤ" U1f24 : "ἤ" U1f24 : "ἤ" U1f24 : "ἤ" U1f24 : "ἤ" U1f24 : "ἤ" U1f24 : "ἥ" U1f25 : "ἥ" U1f25 : "ἥ" U1f25 : "ἥ" U1f25 : "ἥ" U1f25 : "ἥ" U1f25 : "ἦ" U1f26 : "ἦ" U1f26 : "ἦ" U1f26 : "ἦ" U1f26 : "ἦ" U1f26 : "ἦ" U1f26 : "ἧ" U1f27 : "ἧ" U1f27 : "ἧ" U1f27 : "ἧ" U1f27 : "ἧ" U1f27 : "ἧ" U1f27 : "Ἠ" U1f28 : "Ἠ" U1f28 : "Ἠ" U1f28 : "Ἡ" U1f29 : "Ἡ" U1f29 : "Ἡ" U1f29 : "Ἢ" U1f2a : "Ἢ" U1f2a : "Ἢ" U1f2a : "Ἢ" U1f2a : "Ἢ" U1f2a : "Ἢ" U1f2a : "Ἣ" U1f2b : "Ἣ" U1f2b : "Ἣ" U1f2b : "Ἣ" U1f2b : "Ἣ" U1f2b : "Ἣ" U1f2b : "Ἤ" U1f2c : "Ἤ" U1f2c : "Ἤ" U1f2c : "Ἤ" U1f2c : "Ἤ" U1f2c : "Ἤ" U1f2c : "Ἥ" U1f2d : "Ἥ" U1f2d : "Ἥ" U1f2d : "Ἥ" U1f2d : "Ἥ" U1f2d : "Ἥ" U1f2d : "Ἦ" U1f2e : "Ἦ" U1f2e : "Ἦ" U1f2e : "Ἦ" U1f2e : "Ἦ" U1f2e : "Ἦ" U1f2e : "Ἧ" U1f2f : "Ἧ" U1f2f : "Ἧ" U1f2f : "Ἧ" U1f2f : "Ἧ" U1f2f : "Ἧ" U1f2f : "ἰ" U1f30 : "ἰ" U1f30 : "ἰ" U1f30 : "ἱ" U1f31 : "ἱ" U1f31 : "ἱ" U1f31 : "ἲ" U1f32 : "ἲ" U1f32 : "ἲ" U1f32 : "ἲ" U1f32 : "ἲ" U1f32 : "ἲ" U1f32 : "ἳ" U1f33 : "ἳ" U1f33 : "ἳ" U1f33 : "ἳ" U1f33 : "ἳ" U1f33 : "ἳ" U1f33 : "ἴ" U1f34 : "ἴ" U1f34 : "ἴ" U1f34 : "ἴ" U1f34 : "ἴ" U1f34 : "ἴ" U1f34 : "ἵ" U1f35 : "ἵ" U1f35 : "ἵ" U1f35 : "ἵ" U1f35 : "ἵ" U1f35 : "ἵ" U1f35 : "ἶ" U1f36 : "ἶ" U1f36 : "ἶ" U1f36 : "ἶ" U1f36 : "ἶ" U1f36 : "ἶ" U1f36 : "ἷ" U1f37 : "ἷ" U1f37 : "ἷ" U1f37 : "ἷ" U1f37 : "ἷ" U1f37 : "ἷ" U1f37 : "Ἰ" U1f38 : "Ἰ" U1f38 : "Ἰ" U1f38 : "Ἱ" U1f39 : "Ἱ" U1f39 : "Ἱ" U1f39 : "Ἲ" U1f3a : "Ἲ" U1f3a : "Ἲ" U1f3a : "Ἲ" U1f3a : "Ἲ" U1f3a : "Ἲ" U1f3a : "Ἳ" U1f3b : "Ἳ" U1f3b : "Ἳ" U1f3b : "Ἳ" U1f3b : "Ἳ" U1f3b : "Ἳ" U1f3b : "Ἴ" U1f3c : "Ἴ" U1f3c : "Ἴ" U1f3c : "Ἴ" U1f3c : "Ἴ" U1f3c : "Ἴ" U1f3c : "Ἵ" U1f3d : "Ἵ" U1f3d : "Ἵ" U1f3d : "Ἵ" U1f3d : "Ἵ" U1f3d : "Ἵ" U1f3d : "Ἶ" U1f3e : "Ἶ" U1f3e : "Ἶ" U1f3e : "Ἶ" U1f3e : "Ἶ" U1f3e : "Ἶ" U1f3e : "Ἷ" U1f3f : "Ἷ" U1f3f : "Ἷ" U1f3f : "Ἷ" U1f3f : "Ἷ" U1f3f : "Ἷ" U1f3f : "ὀ" U1f40 : "ὀ" U1f40 : "ὀ" U1f40 : "ὁ" U1f41 : "ὁ" U1f41 : "ὁ" U1f41 : "ὂ" U1f42 : "ὂ" U1f42 : "ὂ" U1f42 : "ὂ" U1f42 : "ὂ" U1f42 : "ὂ" U1f42 : "ὃ" U1f43 : "ὃ" U1f43 : "ὃ" U1f43 : "ὃ" U1f43 : "ὃ" U1f43 : "ὃ" U1f43 : "ὄ" U1f44 : "ὄ" U1f44 : "ὄ" U1f44 : "ὄ" U1f44 : "ὄ" U1f44 : "ὄ" U1f44 : "ὅ" U1f45 : "ὅ" U1f45 : "ὅ" U1f45 : "ὅ" U1f45 : "ὅ" U1f45 : "ὅ" U1f45 : "Ὀ" U1f48 : "Ὀ" U1f48 : "Ὀ" U1f48 : "Ὁ" U1f49 : "Ὁ" U1f49 : "Ὁ" U1f49 : "Ὂ" U1f4a : "Ὂ" U1f4a : "Ὂ" U1f4a : "Ὂ" U1f4a : "Ὂ" U1f4a : "Ὂ" U1f4a : "Ὃ" U1f4b : "Ὃ" U1f4b : "Ὃ" U1f4b : "Ὃ" U1f4b : "Ὃ" U1f4b : "Ὃ" U1f4b : "Ὄ" U1f4c : "Ὄ" U1f4c : "Ὄ" U1f4c : "Ὄ" U1f4c : "Ὄ" U1f4c : "Ὄ" U1f4c : "Ὅ" U1f4d : "Ὅ" U1f4d : "Ὅ" U1f4d : "Ὅ" U1f4d : "Ὅ" U1f4d : "Ὅ" U1f4d : "ὐ" U1f50 : "ὐ" U1f50 : "ὐ" U1f50 : "ὑ" U1f51 : "ὑ" U1f51 : "ὑ" U1f51 : "ὒ" U1f52 : "ὒ" U1f52 : "ὒ" U1f52 : "ὒ" U1f52 : "ὒ" U1f52 : "ὒ" U1f52 : "ὓ" U1f53 : "ὓ" U1f53 : "ὓ" U1f53 : "ὓ" U1f53 : "ὓ" U1f53 : "ὓ" U1f53 : "ὔ" U1f54 : "ὔ" U1f54 : "ὔ" U1f54 : "ὔ" U1f54 : "ὔ" U1f54 : "ὔ" U1f54 : "ὕ" U1f55 : "ὕ" U1f55 : "ὕ" U1f55 : "ὕ" U1f55 : "ὕ" U1f55 : "ὕ" U1f55 : "ὖ" U1f56 : "ὖ" U1f56 : "ὖ" U1f56 : "ὖ" U1f56 : "ὖ" U1f56 : "ὖ" U1f56 : "ὗ" U1f57 : "ὗ" U1f57 : "ὗ" U1f57 : "ὗ" U1f57 : "ὗ" U1f57 : "ὗ" U1f57 : "Ὑ" U1f59 : "Ὑ" U1f59 : "Ὑ" U1f59 : "Ὓ" U1f5b : "Ὓ" U1f5b : "Ὓ" U1f5b : "Ὓ" U1f5b : "Ὓ" U1f5b : "Ὓ" U1f5b : "Ὕ" U1f5d : "Ὕ" U1f5d : "Ὕ" U1f5d : "Ὕ" U1f5d : "Ὕ" U1f5d : "Ὕ" U1f5d : "Ὗ" U1f5f : "Ὗ" U1f5f : "Ὗ" U1f5f : "Ὗ" U1f5f : "Ὗ" U1f5f : "Ὗ" U1f5f : "ὠ" U1f60 : "ὠ" U1f60 : "ὠ" U1f60 : "ὡ" U1f61 : "ὡ" U1f61 : "ὡ" U1f61 : "ὢ" U1f62 : "ὢ" U1f62 : "ὢ" U1f62 : "ὢ" U1f62 : "ὢ" U1f62 : "ὢ" U1f62 : "ὣ" U1f63 : "ὣ" U1f63 : "ὣ" U1f63 : "ὣ" U1f63 : "ὣ" U1f63 : "ὣ" U1f63 : "ὤ" U1f64 : "ὤ" U1f64 : "ὤ" U1f64 : "ὤ" U1f64 : "ὤ" U1f64 : "ὤ" U1f64 : "ὥ" U1f65 : "ὥ" U1f65 : "ὥ" U1f65 : "ὥ" U1f65 : "ὥ" U1f65 : "ὥ" U1f65 : "ὦ" U1f66 : "ὦ" U1f66 : "ὦ" U1f66 : "ὦ" U1f66 : "ὦ" U1f66 : "ὦ" U1f66 : "ὧ" U1f67 : "ὧ" U1f67 : "ὧ" U1f67 : "ὧ" U1f67 : "ὧ" U1f67 : "ὧ" U1f67 : "Ὠ" U1f68 : "Ὠ" U1f68 : "Ὠ" U1f68 : "Ὡ" U1f69 : "Ὡ" U1f69 : "Ὡ" U1f69 : "Ὢ" U1f6a : "Ὢ" U1f6a : "Ὢ" U1f6a : "Ὢ" U1f6a : "Ὢ" U1f6a : "Ὢ" U1f6a : "Ὣ" U1f6b : "Ὣ" U1f6b : "Ὣ" U1f6b : "Ὣ" U1f6b : "Ὣ" U1f6b : "Ὣ" U1f6b : "Ὤ" U1f6c : "Ὤ" U1f6c : "Ὤ" U1f6c : "Ὤ" U1f6c : "Ὤ" U1f6c : "Ὤ" U1f6c : "Ὥ" U1f6d : "Ὥ" U1f6d : "Ὥ" U1f6d : "Ὥ" U1f6d : "Ὥ" U1f6d : "Ὥ" U1f6d : "Ὦ" U1f6e : "Ὦ" U1f6e : "Ὦ" U1f6e : "Ὦ" U1f6e : "Ὦ" U1f6e : "Ὦ" U1f6e : "Ὧ" U1f6f : "Ὧ" U1f6f : "Ὧ" U1f6f : "Ὧ" U1f6f : "Ὧ" U1f6f : "Ὧ" U1f6f : "ὰ" U1f70 : "ὰ" U1f70 : "ὲ" U1f72 : "ὲ" U1f72 : "ὴ" U1f74 : "ὴ" U1f74 : "ὶ" U1f76 : "ὶ" U1f76 : "ὸ" U1f78 : "ὸ" U1f78 : "ὺ" U1f7a : "ὺ" U1f7a : "ὼ" U1f7c : "ὼ" U1f7c : "ᾀ" U1f80 : "ᾀ" U1f80 : "ᾀ" U1f80 : "ᾀ" U1f80 : "ᾀ" U1f80 : "ᾀ" U1f80 : "ᾁ" U1f81 : "ᾁ" U1f81 : "ᾁ" U1f81 : "ᾁ" U1f81 : "ᾁ" U1f81 : "ᾁ" U1f81 : "ᾂ" U1f82 : "ᾂ" U1f82 : "ᾂ" U1f82 : "ᾂ" U1f82 : "ᾂ" U1f82 : "ᾂ" U1f82 : "ᾂ" U1f82 : "ᾂ" U1f82 : "ᾂ" U1f82 : "ᾂ" U1f82 : "ᾂ" U1f82 : "ᾂ" U1f82 : "ᾂ" U1f82 : "ᾂ" U1f82 : "ᾂ" U1f82 : "ᾂ" U1f82 : "ᾂ" U1f82 : "ᾂ" U1f82 : "ᾃ" U1f83 : "ᾃ" U1f83 : "ᾃ" U1f83 : "ᾃ" U1f83 : "ᾃ" U1f83 : "ᾃ" U1f83 : "ᾃ" U1f83 : "ᾃ" U1f83 : "ᾃ" U1f83 : "ᾃ" U1f83 : "ᾃ" U1f83 : "ᾃ" U1f83 : "ᾃ" U1f83 : "ᾃ" U1f83 : "ᾃ" U1f83 : "ᾃ" U1f83 : "ᾃ" U1f83 : "ᾃ" U1f83 : "ᾄ" U1f84 : "ᾄ" U1f84 : "ᾄ" U1f84 : "ᾄ" U1f84 : "ᾄ" U1f84 : "ᾄ" U1f84 : "ᾄ" U1f84 : "ᾄ" U1f84 : "ᾄ" U1f84 : "ᾄ" U1f84 : "ᾄ" U1f84 : "ᾄ" U1f84 : "ᾄ" U1f84 : "ᾄ" U1f84 : "ᾄ" U1f84 : "ᾄ" U1f84 : "ᾄ" U1f84 : "ᾄ" U1f84 : "ᾅ" U1f85 : "ᾅ" U1f85 : "ᾅ" U1f85 : "ᾅ" U1f85 : "ᾅ" U1f85 : "ᾅ" U1f85 : "ᾅ" U1f85 : "ᾅ" U1f85 : "ᾅ" U1f85 : "ᾅ" U1f85 : "ᾅ" U1f85 : "ᾅ" U1f85 : "ᾅ" U1f85 : "ᾅ" U1f85 : "ᾅ" U1f85 : "ᾅ" U1f85 : "ᾅ" U1f85 : "ᾅ" U1f85 : "ᾆ" U1f86 : "ᾆ" U1f86 : "ᾆ" U1f86 : "ᾆ" U1f86 : "ᾆ" U1f86 : "ᾆ" U1f86 : "ᾆ" U1f86 : "ᾆ" U1f86 : "ᾆ" U1f86 : "ᾆ" U1f86 : "ᾆ" U1f86 : "ᾆ" U1f86 : "ᾆ" U1f86 : "ᾆ" U1f86 : "ᾆ" U1f86 : "ᾆ" U1f86 : "ᾆ" U1f86 : "ᾆ" U1f86 : "ᾇ" U1f87 : "ᾇ" U1f87 : "ᾇ" U1f87 : "ᾇ" U1f87 : "ᾇ" U1f87 : "ᾇ" U1f87 : "ᾇ" U1f87 : "ᾇ" U1f87 : "ᾇ" U1f87 : "ᾇ" U1f87 : "ᾇ" U1f87 : "ᾇ" U1f87 : "ᾇ" U1f87 : "ᾇ" U1f87 : "ᾇ" U1f87 : "ᾇ" U1f87 : "ᾇ" U1f87 : "ᾇ" U1f87 : "ᾈ" U1f88 : "ᾈ" U1f88 : "ᾈ" U1f88 : "ᾈ" U1f88 : "ᾈ" U1f88 : "ᾈ" U1f88 : "ᾉ" U1f89 : "ᾉ" U1f89 : "ᾉ" U1f89 : "ᾉ" U1f89 : "ᾉ" U1f89 : "ᾉ" U1f89 : "ᾊ" U1f8a : "ᾊ" U1f8a : "ᾊ" U1f8a : "ᾊ" U1f8a : "ᾊ" U1f8a : "ᾊ" U1f8a : "ᾊ" U1f8a : "ᾊ" U1f8a : "ᾊ" U1f8a : "ᾊ" U1f8a : "ᾊ" U1f8a : "ᾊ" U1f8a : "ᾊ" U1f8a : "ᾊ" U1f8a : "ᾊ" U1f8a : "ᾊ" U1f8a : "ᾊ" U1f8a : "ᾊ" U1f8a : "ᾋ" U1f8b : "ᾋ" U1f8b : "ᾋ" U1f8b : "ᾋ" U1f8b : "ᾋ" U1f8b : "ᾋ" U1f8b : "ᾋ" U1f8b : "ᾋ" U1f8b : "ᾋ" U1f8b : "ᾋ" U1f8b : "ᾋ" U1f8b : "ᾋ" U1f8b : "ᾋ" U1f8b : "ᾋ" U1f8b : "ᾋ" U1f8b : "ᾋ" U1f8b : "ᾋ" U1f8b : "ᾋ" U1f8b : "ᾌ" U1f8c : "ᾌ" U1f8c : "ᾌ" U1f8c : "ᾌ" U1f8c : "ᾌ" U1f8c : "ᾌ" U1f8c : "ᾌ" U1f8c : "ᾌ" U1f8c : "ᾌ" U1f8c : "ᾌ" U1f8c : "ᾌ" U1f8c : "ᾌ" U1f8c : "ᾌ" U1f8c : "ᾌ" U1f8c : "ᾌ" U1f8c : "ᾌ" U1f8c : "ᾌ" U1f8c : "ᾌ" U1f8c : "ᾍ" U1f8d : "ᾍ" U1f8d : "ᾍ" U1f8d : "ᾍ" U1f8d : "ᾍ" U1f8d : "ᾍ" U1f8d : "ᾍ" U1f8d : "ᾍ" U1f8d : "ᾍ" U1f8d : "ᾍ" U1f8d : "ᾍ" U1f8d : "ᾍ" U1f8d : "ᾍ" U1f8d : "ᾍ" U1f8d : "ᾍ" U1f8d : "ᾍ" U1f8d : "ᾍ" U1f8d : "ᾍ" U1f8d : "ᾎ" U1f8e : "ᾎ" U1f8e : "ᾎ" U1f8e : "ᾎ" U1f8e : "ᾎ" U1f8e : "ᾎ" U1f8e : "ᾎ" U1f8e : "ᾎ" U1f8e : "ᾎ" U1f8e : "ᾎ" U1f8e : "ᾎ" U1f8e : "ᾎ" U1f8e : "ᾎ" U1f8e : "ᾎ" U1f8e : "ᾎ" U1f8e : "ᾎ" U1f8e : "ᾎ" U1f8e : "ᾎ" U1f8e : "ᾏ" U1f8f : "ᾏ" U1f8f : "ᾏ" U1f8f : "ᾏ" U1f8f : "ᾏ" U1f8f : "ᾏ" U1f8f : "ᾏ" U1f8f : "ᾏ" U1f8f : "ᾏ" U1f8f : "ᾏ" U1f8f : "ᾏ" U1f8f : "ᾏ" U1f8f : "ᾏ" U1f8f : "ᾏ" U1f8f : "ᾏ" U1f8f : "ᾏ" U1f8f : "ᾏ" U1f8f : "ᾏ" U1f8f : "ᾐ" U1f90 : "ᾐ" U1f90 : "ᾐ" U1f90 : "ᾐ" U1f90 : "ᾐ" U1f90 : "ᾐ" U1f90 : "ᾑ" U1f91 : "ᾑ" U1f91 : "ᾑ" U1f91 : "ᾑ" U1f91 : "ᾑ" U1f91 : "ᾑ" U1f91 : "ᾒ" U1f92 : "ᾒ" U1f92 : "ᾒ" U1f92 : "ᾒ" U1f92 : "ᾒ" U1f92 : "ᾒ" U1f92 : "ᾒ" U1f92 : "ᾒ" U1f92 : "ᾒ" U1f92 : "ᾒ" U1f92 : "ᾒ" U1f92 : "ᾒ" U1f92 : "ᾒ" U1f92 : "ᾒ" U1f92 : "ᾒ" U1f92 : "ᾒ" U1f92 : "ᾒ" U1f92 : "ᾒ" U1f92 : "ᾓ" U1f93 : "ᾓ" U1f93 : "ᾓ" U1f93 : "ᾓ" U1f93 : "ᾓ" U1f93 : "ᾓ" U1f93 : "ᾓ" U1f93 : "ᾓ" U1f93 : "ᾓ" U1f93 : "ᾓ" U1f93 : "ᾓ" U1f93 : "ᾓ" U1f93 : "ᾓ" U1f93 : "ᾓ" U1f93 : "ᾓ" U1f93 : "ᾓ" U1f93 : "ᾓ" U1f93 : "ᾓ" U1f93 : "ᾔ" U1f94 : "ᾔ" U1f94 : "ᾔ" U1f94 : "ᾔ" U1f94 : "ᾔ" U1f94 : "ᾔ" U1f94 : "ᾔ" U1f94 : "ᾔ" U1f94 : "ᾔ" U1f94 : "ᾔ" U1f94 : "ᾔ" U1f94 : "ᾔ" U1f94 : "ᾔ" U1f94 : "ᾔ" U1f94 : "ᾔ" U1f94 : "ᾔ" U1f94 : "ᾔ" U1f94 : "ᾔ" U1f94 : "ᾕ" U1f95 : "ᾕ" U1f95 : "ᾕ" U1f95 : "ᾕ" U1f95 : "ᾕ" U1f95 : "ᾕ" U1f95 : "ᾕ" U1f95 : "ᾕ" U1f95 : "ᾕ" U1f95 : "ᾕ" U1f95 : "ᾕ" U1f95 : "ᾕ" U1f95 : "ᾕ" U1f95 : "ᾕ" U1f95 : "ᾕ" U1f95 : "ᾕ" U1f95 : "ᾕ" U1f95 : "ᾕ" U1f95 : "ᾖ" U1f96 : "ᾖ" U1f96 : "ᾖ" U1f96 : "ᾖ" U1f96 : "ᾖ" U1f96 : "ᾖ" U1f96 : "ᾖ" U1f96 : "ᾖ" U1f96 : "ᾖ" U1f96 : "ᾖ" U1f96 : "ᾖ" U1f96 : "ᾖ" U1f96 : "ᾖ" U1f96 : "ᾖ" U1f96 : "ᾖ" U1f96 : "ᾖ" U1f96 : "ᾖ" U1f96 : "ᾖ" U1f96 : "ᾗ" U1f97 : "ᾗ" U1f97 : "ᾗ" U1f97 : "ᾗ" U1f97 : "ᾗ" U1f97 : "ᾗ" U1f97 : "ᾗ" U1f97 : "ᾗ" U1f97 : "ᾗ" U1f97 : "ᾗ" U1f97 : "ᾗ" U1f97 : "ᾗ" U1f97 : "ᾗ" U1f97 : "ᾗ" U1f97 : "ᾗ" U1f97 : "ᾗ" U1f97 : "ᾗ" U1f97 : "ᾗ" U1f97 : "ᾘ" U1f98 : "ᾘ" U1f98 : "ᾘ" U1f98 : "ᾘ" U1f98 : "ᾘ" U1f98 : "ᾘ" U1f98 : "ᾙ" U1f99 : "ᾙ" U1f99 : "ᾙ" U1f99 : "ᾙ" U1f99 : "ᾙ" U1f99 : "ᾙ" U1f99 : "ᾚ" U1f9a : "ᾚ" U1f9a : "ᾚ" U1f9a : "ᾚ" U1f9a : "ᾚ" U1f9a : "ᾚ" U1f9a : "ᾚ" U1f9a : "ᾚ" U1f9a : "ᾚ" U1f9a : "ᾚ" U1f9a : "ᾚ" U1f9a : "ᾚ" U1f9a : "ᾚ" U1f9a : "ᾚ" U1f9a : "ᾚ" U1f9a : "ᾚ" U1f9a : "ᾚ" U1f9a : "ᾚ" U1f9a : "ᾛ" U1f9b : "ᾛ" U1f9b : "ᾛ" U1f9b : "ᾛ" U1f9b : "ᾛ" U1f9b : "ᾛ" U1f9b : "ᾛ" U1f9b : "ᾛ" U1f9b : "ᾛ" U1f9b : "ᾛ" U1f9b : "ᾛ" U1f9b : "ᾛ" U1f9b : "ᾛ" U1f9b : "ᾛ" U1f9b : "ᾛ" U1f9b : "ᾛ" U1f9b : "ᾛ" U1f9b : "ᾛ" U1f9b : "ᾜ" U1f9c : "ᾜ" U1f9c : "ᾜ" U1f9c : "ᾜ" U1f9c : "ᾜ" U1f9c : "ᾜ" U1f9c : "ᾜ" U1f9c : "ᾜ" U1f9c : "ᾜ" U1f9c : "ᾜ" U1f9c : "ᾜ" U1f9c : "ᾜ" U1f9c : "ᾜ" U1f9c : "ᾜ" U1f9c : "ᾜ" U1f9c : "ᾜ" U1f9c : "ᾜ" U1f9c : "ᾜ" U1f9c : "ᾝ" U1f9d : "ᾝ" U1f9d : "ᾝ" U1f9d : "ᾝ" U1f9d : "ᾝ" U1f9d : "ᾝ" U1f9d : "ᾝ" U1f9d : "ᾝ" U1f9d : "ᾝ" U1f9d : "ᾝ" U1f9d : "ᾝ" U1f9d : "ᾝ" U1f9d : "ᾝ" U1f9d : "ᾝ" U1f9d : "ᾝ" U1f9d : "ᾝ" U1f9d : "ᾝ" U1f9d : "ᾝ" U1f9d : "ᾞ" U1f9e : "ᾞ" U1f9e : "ᾞ" U1f9e : "ᾞ" U1f9e : "ᾞ" U1f9e : "ᾞ" U1f9e : "ᾞ" U1f9e : "ᾞ" U1f9e : "ᾞ" U1f9e : "ᾞ" U1f9e : "ᾞ" U1f9e : "ᾞ" U1f9e : "ᾞ" U1f9e : "ᾞ" U1f9e : "ᾞ" U1f9e : "ᾞ" U1f9e : "ᾞ" U1f9e : "ᾞ" U1f9e : "ᾟ" U1f9f : "ᾟ" U1f9f : "ᾟ" U1f9f : "ᾟ" U1f9f : "ᾟ" U1f9f : "ᾟ" U1f9f : "ᾟ" U1f9f : "ᾟ" U1f9f : "ᾟ" U1f9f : "ᾟ" U1f9f : "ᾟ" U1f9f : "ᾟ" U1f9f : "ᾟ" U1f9f : "ᾟ" U1f9f : "ᾟ" U1f9f : "ᾟ" U1f9f : "ᾟ" U1f9f : "ᾟ" U1f9f : "ᾠ" U1fa0 : "ᾠ" U1fa0 : "ᾠ" U1fa0 : "ᾠ" U1fa0 : "ᾠ" U1fa0 : "ᾠ" U1fa0 : "ᾡ" U1fa1 : "ᾡ" U1fa1 : "ᾡ" U1fa1 : "ᾡ" U1fa1 : "ᾡ" U1fa1 : "ᾡ" U1fa1 : "ᾢ" U1fa2 : "ᾢ" U1fa2 : "ᾢ" U1fa2 : "ᾢ" U1fa2 : "ᾢ" U1fa2 : "ᾢ" U1fa2 : "ᾢ" U1fa2 : "ᾢ" U1fa2 : "ᾢ" U1fa2 : "ᾢ" U1fa2 : "ᾢ" U1fa2 : "ᾢ" U1fa2 : "ᾢ" U1fa2 : "ᾢ" U1fa2 : "ᾢ" U1fa2 : "ᾢ" U1fa2 : "ᾢ" U1fa2 : "ᾢ" U1fa2 : "ᾣ" U1fa3 : "ᾣ" U1fa3 : "ᾣ" U1fa3 : "ᾣ" U1fa3 : "ᾣ" U1fa3 : "ᾣ" U1fa3 : "ᾣ" U1fa3 : "ᾣ" U1fa3 : "ᾣ" U1fa3 : "ᾣ" U1fa3 : "ᾣ" U1fa3 : "ᾣ" U1fa3 : "ᾣ" U1fa3 : "ᾣ" U1fa3 : "ᾣ" U1fa3 : "ᾣ" U1fa3 : "ᾣ" U1fa3 : "ᾣ" U1fa3 : "ᾤ" U1fa4 : "ᾤ" U1fa4 : "ᾤ" U1fa4 : "ᾤ" U1fa4 : "ᾤ" U1fa4 : "ᾤ" U1fa4 : "ᾤ" U1fa4 : "ᾤ" U1fa4 : "ᾤ" U1fa4 : "ᾤ" U1fa4 : "ᾤ" U1fa4 : "ᾤ" U1fa4 : "ᾤ" U1fa4 : "ᾤ" U1fa4 : "ᾤ" U1fa4 : "ᾤ" U1fa4 : "ᾤ" U1fa4 : "ᾤ" U1fa4 : "ᾥ" U1fa5 : "ᾥ" U1fa5 : "ᾥ" U1fa5 : "ᾥ" U1fa5 : "ᾥ" U1fa5 : "ᾥ" U1fa5 : "ᾥ" U1fa5 : "ᾥ" U1fa5 : "ᾥ" U1fa5 : "ᾥ" U1fa5 : "ᾥ" U1fa5 : "ᾥ" U1fa5 : "ᾥ" U1fa5 : "ᾥ" U1fa5 : "ᾥ" U1fa5 : "ᾥ" U1fa5 : "ᾥ" U1fa5 : "ᾥ" U1fa5 : "ᾦ" U1fa6 : "ᾦ" U1fa6 : "ᾦ" U1fa6 : "ᾦ" U1fa6 : "ᾦ" U1fa6 : "ᾦ" U1fa6 : "ᾦ" U1fa6 : "ᾦ" U1fa6 : "ᾦ" U1fa6 : "ᾦ" U1fa6 : "ᾦ" U1fa6 : "ᾦ" U1fa6 : "ᾦ" U1fa6 : "ᾦ" U1fa6 : "ᾦ" U1fa6 : "ᾦ" U1fa6 : "ᾦ" U1fa6 : "ᾦ" U1fa6 : "ᾧ" U1fa7 : "ᾧ" U1fa7 : "ᾧ" U1fa7 : "ᾧ" U1fa7 : "ᾧ" U1fa7 : "ᾧ" U1fa7 : "ᾧ" U1fa7 : "ᾧ" U1fa7 : "ᾧ" U1fa7 : "ᾧ" U1fa7 : "ᾧ" U1fa7 : "ᾧ" U1fa7 : "ᾧ" U1fa7 : "ᾧ" U1fa7 : "ᾧ" U1fa7 : "ᾧ" U1fa7 : "ᾧ" U1fa7 : "ᾧ" U1fa7 : "ᾨ" U1fa8 : "ᾨ" U1fa8 : "ᾨ" U1fa8 : "ᾨ" U1fa8 : "ᾨ" U1fa8 : "ᾨ" U1fa8 : "ᾩ" U1fa9 : "ᾩ" U1fa9 : "ᾩ" U1fa9 : "ᾩ" U1fa9 : "ᾩ" U1fa9 : "ᾩ" U1fa9 : "ᾪ" U1faa : "ᾪ" U1faa : "ᾪ" U1faa : "ᾪ" U1faa : "ᾪ" U1faa : "ᾪ" U1faa : "ᾪ" U1faa : "ᾪ" U1faa : "ᾪ" U1faa : "ᾪ" U1faa : "ᾪ" U1faa : "ᾪ" U1faa : "ᾪ" U1faa : "ᾪ" U1faa : "ᾪ" U1faa : "ᾪ" U1faa : "ᾪ" U1faa : "ᾪ" U1faa : "ᾫ" U1fab : "ᾫ" U1fab : "ᾫ" U1fab : "ᾫ" U1fab : "ᾫ" U1fab : "ᾫ" U1fab : "ᾫ" U1fab : "ᾫ" U1fab : "ᾫ" U1fab : "ᾫ" U1fab : "ᾫ" U1fab : "ᾫ" U1fab : "ᾫ" U1fab : "ᾫ" U1fab : "ᾫ" U1fab : "ᾫ" U1fab : "ᾫ" U1fab : "ᾫ" U1fab : "ᾬ" U1fac : "ᾬ" U1fac : "ᾬ" U1fac : "ᾬ" U1fac : "ᾬ" U1fac : "ᾬ" U1fac : "ᾬ" U1fac : "ᾬ" U1fac : "ᾬ" U1fac : "ᾬ" U1fac : "ᾬ" U1fac : "ᾬ" U1fac : "ᾬ" U1fac : "ᾬ" U1fac : "ᾬ" U1fac : "ᾬ" U1fac : "ᾬ" U1fac : "ᾬ" U1fac : "ᾭ" U1fad : "ᾭ" U1fad : "ᾭ" U1fad : "ᾭ" U1fad : "ᾭ" U1fad : "ᾭ" U1fad : "ᾭ" U1fad : "ᾭ" U1fad : "ᾭ" U1fad : "ᾭ" U1fad : "ᾭ" U1fad : "ᾭ" U1fad : "ᾭ" U1fad : "ᾭ" U1fad : "ᾭ" U1fad : "ᾭ" U1fad : "ᾭ" U1fad : "ᾭ" U1fad : "ᾮ" U1fae : "ᾮ" U1fae : "ᾮ" U1fae : "ᾮ" U1fae : "ᾮ" U1fae : "ᾮ" U1fae : "ᾮ" U1fae : "ᾮ" U1fae : "ᾮ" U1fae : "ᾮ" U1fae : "ᾮ" U1fae : "ᾮ" U1fae : "ᾮ" U1fae : "ᾮ" U1fae : "ᾮ" U1fae : "ᾮ" U1fae : "ᾮ" U1fae : "ᾮ" U1fae : "ᾯ" U1faf : "ᾯ" U1faf : "ᾯ" U1faf : "ᾯ" U1faf : "ᾯ" U1faf : "ᾯ" U1faf : "ᾯ" U1faf : "ᾯ" U1faf : "ᾯ" U1faf : "ᾯ" U1faf : "ᾯ" U1faf : "ᾯ" U1faf : "ᾯ" U1faf : "ᾯ" U1faf : "ᾯ" U1faf : "ᾯ" U1faf : "ᾯ" U1faf : "ᾯ" U1faf : "ᾰ" U1fb0 : "ᾱ" U1fb1 : "Ᾰ" U1fb8 : "Ᾱ" U1fb9 : "ῐ" U1fd0 : "ῑ" U1fd1 : "Ῐ" U1fd8 : "Ῑ" U1fd9 : "ῠ" U1fe0 : "ῡ" U1fe1 : "Ῠ" U1fe8 : "Ῡ" U1fe9 : "Ὰ" U1fba : "Ὰ" U1fba : "Ὲ" U1fc8 : "Ὲ" U1fc8 : "Ὴ" U1fca : "Ὴ" U1fca : "Ὶ" U1fda : "Ὶ" U1fda : "Ὺ" U1fea : "Ὺ" U1fea : "Ὸ" U1ff8 : "Ὸ" U1ff8 : "Ὼ" U1ffa : "Ὼ" U1ffa : "ᾲ" U1fb2 : "ᾲ" U1fb2 : "ᾲ" U1fb2 : "ᾲ" U1fb2 : "ᾳ" U1fb3 : "ᾳ" U1fb3 : "ᾴ" U1fb4 : "ᾴ" U1fb4 : "ᾴ" U1fb4 : "ᾴ" U1fb4 : "ᾶ" U1fb6 : "ᾶ" U1fb6 : "ᾷ" U1fb7 : "ᾷ" U1fb7 : "ᾷ" U1fb7 : "ᾷ" U1fb7 : "ῂ" U1fc2 : "ῂ" U1fc2 : "ῂ" U1fc2 : "ῂ" U1fc2 : "ῃ" U1fc3 : "ῃ" U1fc3 : "ῄ" U1fc4 : "ῄ" U1fc4 : "ῄ" U1fc4 : "ῄ" U1fc4 : "ῆ" U1fc6 : "ῆ" U1fc6 : "ῇ" U1fc7 : "ῇ" U1fc7 : "ῇ" U1fc7 : "ῇ" U1fc7 : "ῒ" U1fd2 : "ῒ" U1fd2 : "ῒ" U1fd2 : "ῒ" U1fd2 : "ῖ" U1fd6 : "ῖ" U1fd6 : "ῗ" U1fd7 : "ῗ" U1fd7 : "ῗ" U1fd7 : "ῗ" U1fd7 : "ῢ" U1fe2 : "ῢ" U1fe2 : "ῢ" U1fe2 : "ῢ" U1fe2 : "ῦ" U1fe6 : "ῦ" U1fe6 : "ῧ" U1fe7 : "ῧ" U1fe7 : "ῧ" U1fe7 : "ῧ" U1fe7 : "ῲ" U1ff2 : "ῲ" U1ff2 : "ῲ" U1ff2 : "ῲ" U1ff2 : "ῳ" U1ff3 : "ῳ" U1ff3 : "ῴ" U1ff4 : "ῴ" U1ff4 : "ῴ" U1ff4 : "ῴ" U1ff4 : "ῶ" U1ff6 : "ῶ" U1ff6 : "ῷ" U1ff7 : "ῷ" U1ff7 : "ῷ" U1ff7 : "ῷ" U1ff7 : "ᾼ" U1fbc : "ᾼ" U1fbc : "ῌ" U1fcc : "ῌ" U1fcc : "ῼ" U1ffc : "ῼ" U1ffc : "ῤ" U1fe4 : "ῤ" U1fe4 : "ῤ" U1fe4 : "ῥ" U1fe5 : "ῥ" U1fe5 : "ῥ" U1fe5 : "Ῥ" U1fec : "Ῥ" U1fec : "Ῥ" U1fec : "῍" U1fcd : "῍" U1fcd : "῍" U1fcd : "῍" U1fcd : "῎" U1fce : "῎" U1fce : "῎" U1fce : "῎" U1fce : "῏" U1fcf : "῏" U1fcf : "῏" U1fcf : "῏" U1fcf : "῝" U1fdd : "῝" U1fdd : "῝" U1fdd : "῝" U1fdd : "῞" U1fde : "῞" U1fde : "῞" U1fde : "῞" U1fde : "῟" U1fdf : "῟" U1fdf : "῟" U1fdf : "῟" U1fdf : "῭" U1fed : "῭" U1fed : "῁" U1fc1 : "῁" U1fc1 : "᾿" U1fbf : "᾿" U1fbf : "᾿" U1fbf : "᾿" U1fbf : "῾" U1ffe : "῾" U1ffe : "῾" U1ffe : "῾" U1ffe : "`" U1fef : "`" U1fef : "῀" U1fc0 : "῀" U1fc0 : "᾽" U1fbd : "᾽" U1fbd : "ι" U1fbe : "ͺ" U037a : "ͺ" U037a XCOMM Part 3 XCOMM XCOMM ISO 8859-7 (Greek) multi-key and dead key definitions extracted and XCOMM converted from the iso8859-7/Compose file. : "Ά" Greek_ALPHAaccent : "Ά" Greek_ALPHAaccent : "Έ" Greek_EPSILONaccent : "Έ" Greek_EPSILONaccent : "Ή" Greek_ETAaccent : "Ή" Greek_ETAaccent : "Ί" Greek_IOTAaccent : "Ί" Greek_IOTAaccent : "Ό" Greek_OMICRONaccent : "Ό" Greek_OMICRONaccent : "Ύ" Greek_UPSILONaccent : "Ύ" Greek_UPSILONaccent : "Ώ" Greek_OMEGAaccent : "Ώ" Greek_OMEGAaccent : "Ϊ" Greek_IOTAdieresis : "Ϊ" Greek_IOTAdieresis : "Ϋ" Greek_UPSILONdieresis : "Ϋ" Greek_UPSILONdieresis : "ά" Greek_alphaaccent : "ά" Greek_alphaaccent : "έ" Greek_epsilonaccent : "έ" Greek_epsilonaccent : "ή" Greek_etaaccent : "ή" Greek_etaaccent : "ί" Greek_iotaaccent : "ί" Greek_iotaaccent : "ό" Greek_omicronaccent : "ό" Greek_omicronaccent : "ύ" Greek_upsilonaccent : "ύ" Greek_upsilonaccent : "ώ" Greek_omegaaccent : "ώ" Greek_omegaaccent : "ϊ" Greek_iotadieresis : "ϊ" Greek_iotadieresis : "ϋ" Greek_upsilondieresis : "ϋ" Greek_upsilondieresis : "ΐ" Greek_iotaaccentdieresis : "ΐ" Greek_iotaaccentdieresis : "ΰ" Greek_upsilonaccentdieresis : "ΰ" Greek_upsilonaccentdieresis : "΅" Greek_accentdieresis : "΅" Greek_accentdieresis : "ά" Greek_alphaaccent : "έ" Greek_epsilonaccent : "ή" Greek_etaaccent : "ί" Greek_iotaaccent : "ό" Greek_omicronaccent : "ύ" Greek_upsilonaccent : "ώ" Greek_omegaaccent : "Ά" Greek_ALPHAaccent : "Έ" Greek_EPSILONaccent : "Ή" Greek_ETAaccent : "Ί" Greek_IOTAaccent : "Ό" Greek_OMICRONaccent : "Ύ" Greek_UPSILONaccent : "Ώ" Greek_OMEGAaccent : "΄" U0384 : "΄" U0384 : "·" periodcentered : "«" guillemotleft : "»" guillemotright : "ϊ" Greek_iotadieresis : "ϋ" Greek_upsilondieresis : "Ϊ" Greek_IOTAdieresis : "Ϋ" Greek_UPSILONdieresis : "¨" diaeresis : "¨" diaeresis : "·" periodcentered : "«" guillemotleft : "»" guillemotright : "ΐ" Greek_iotaaccentdieresis : "ΰ" Greek_upsilonaccentdieresis : "΅" Greek_accentdieresis : "ΐ" Greek_iotaaccentdieresis : "ΰ" Greek_upsilonaccentdieresis : "΅" Greek_accentdieresis XCOMM Part 4 XCOMM XCOMM Miscellaneous extensions. : "¯" macron : "¯" macron : "˘" breve : "˘" breve : "`" grave : "´" acute : "~" asciitilde : "‘" leftsinglequotemark : "‘" leftsinglequotemark : "’" rightsinglequotemark : "’" rightsinglequotemark : "―" Greek_horizbar : "˘" breve : "ʹ" U0374 : "͵" U0375 : ";" U037e : "·" U0387 : "€" EuroSign : "€" EuroSign : "€" EuroSign : "€" EuroSign : "€" EuroSign : "€" EuroSign : "€" EuroSign : "€" EuroSign : "€" EuroSign : "€" EuroSign : "€" EuroSign : "€" EuroSign : "₯" U20af : "₯" U20af : "₯" U20af : "₯" U20af : "‽" U203D # INTERROBANG : "‽" U203D # INTERROBANG <1> <3> : "⅓" U2153 # VULGAR FRACTION ONE THIRD <2> <3> : "⅔" U2154 # VULGAR FRACTION TWO THIRDS <1> <5> : "⅕" U2155 # VULGAR FRACTION ONE FIFTH <2> <5> : "⅖" U2156 # VULGAR FRACTION TWO FIFTHS <3> <5> : "⅗" U2157 # VULGAR FRACTION THREE FIFTHS <4> <5> : "⅘" U2158 # VULGAR FRACTION FOUR FIFTHS <1> <6> : "⅙" U2159 # VULGAR FRACTION ONE SIXTH <5> <6> : "⅚" U215A # VULGAR FRACTION FIVE SIXTHS <1> <8> : "⅛" U215B # VULGAR FRACTION ONE EIGHTH <3> <8> : "⅜" U215C # VULGAR FRACTION THREE EIGHTHS <5> <8> : "⅝" U215D # VULGAR FRACTION FIVE EIGHTHS <7> <8> : "⅞" U215E # VULGAR FRACTION SEVEN EIGHTHS XCOMM XCOMM Khmer digraphs XCOMM : "ាំ" : "ោះ" : "េះ" : "ុំ" : "ុះ" XCOMM End ῎" U1fce : "῏" U1fcf : "῏" U1fcf : "῏" U1flibX11-1.6.3/nls/ko/Compose.pre000064401431060000012000000005401247741723500163770ustar00alancstaff00002660200006XCOMM XCOMM ko Compose Sequence XCOMM XCOMM Sequence Definition XCOMM XCOMM XCOMM This file currently has no entries. It appears that a compose file (even XCOMM just an empty one) is required for the appropriate keysyms to work for XCOMM this encoding. XCOMM XCOMM Means XCOMM Special Character XCOMM End of Sequence Definition libX11-1.6.3/nls/ko/XI18N_OBJS000064401431060000012000000003601247741723500156310ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for ko locale # XLC common/xlibi18n _XlcGenericLoader # XLC_open XIM common/ximp40 _Ximp_OpenIM # XIM_open XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/ko/XLC_LOCALE.pre000064401431060000012000000017031247741723500164410ustar00alancstaff00002660200006XCOMM XLocale Database Sample for ko. XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class (7 bit ASCII) fs0 { charset { name ISO8859-1:GL } font { primary ISO8859-1:GL vertical_rotate all } } XCOMM fs1 class fs1 { charset { name KSC5601.1987-0:GL } font { primary KSC5601.1987-0:GL substitute KSC5601.1987-0:GL } } END XLC_FONTSET XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name ko.euc mb_cur_max 2 state_depend_encoding False #if WCHAR32 wc_encoding_mask \x30000000 wc_shift_bits 7 #else wc_encoding_mask \x00008080 wc_shift_bits 8 #endif use_stdc_env True force_convert_to_mb True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 2 #if WCHAR32 wc_encoding \x30000000 #else wc_encoding \x00008080 #endif ct_encoding KSC5601.1987-0:GL; KSC5601.1987-0:GR } END XLC_XLOCALE libX11-1.6.3/nls/locale.dir.pre000064401431060000012000000443761247741723500164140ustar00alancstaff00002660200006XCOMM XCOMM This file contains locale database file names XCOMM The first word is the locale database file name and XCOMM the second word is the full locale name. XCOMM XCOMM C/XLC_LOCALE: C iso8859-1/XLC_LOCALE: af_ZA.ISO8859-1 iso8859-6/XLC_LOCALE: ar_AA.ISO8859-6 iso8859-6/XLC_LOCALE: ar_BH.ISO8859-6 iso8859-6/XLC_LOCALE: ar_DZ.ISO8859-6 iso8859-6/XLC_LOCALE: ar_EG.ISO8859-6 iso8859-6/XLC_LOCALE: ar_IQ.ISO8859-6 iso8859-6/XLC_LOCALE: ar_JO.ISO8859-6 iso8859-6/XLC_LOCALE: ar_KW.ISO8859-6 iso8859-6/XLC_LOCALE: ar_LB.ISO8859-6 iso8859-6/XLC_LOCALE: ar_LY.ISO8859-6 iso8859-6/XLC_LOCALE: ar_MA.ISO8859-6 iso8859-6/XLC_LOCALE: ar_OM.ISO8859-6 iso8859-6/XLC_LOCALE: ar_QA.ISO8859-6 iso8859-6/XLC_LOCALE: ar_SA.ISO8859-6 iso8859-6/XLC_LOCALE: ar_SD.ISO8859-6 iso8859-6/XLC_LOCALE: ar_SY.ISO8859-6 iso8859-6/XLC_LOCALE: ar_TN.ISO8859-6 iso8859-6/XLC_LOCALE: ar_YE.ISO8859-6 iso8859-6/XLC_LOCALE: ar_AE.ISO8859-6 iso8859-9e/XLC_LOCALE: az_AZ.ISO8859-9E koi8-c/XLC_LOCALE: az_AZ.KOI8-C iso8859-5/XLC_LOCALE: be_BY.ISO8859-5 microsoft-cp1251/XLC_LOCALE: be_BY.CP1251 iso8859-5/XLC_LOCALE: bg_BG.ISO8859-5 microsoft-cp1251/XLC_LOCALE: bg_BG.CP1251 koi8-r/XLC_LOCALE: bg_BG.KOI8-R iso8859-2/XLC_LOCALE: bs_BA.ISO8859-2 iso8859-1/XLC_LOCALE: br_FR.ISO8859-1 iso8859-14/XLC_LOCALE: br_FR.ISO8859-14 iso8859-15/XLC_LOCALE: br_FR.ISO8859-15 iso8859-1/XLC_LOCALE: ca_AD.ISO8859-1 iso8859-15/XLC_LOCALE: ca_AD.ISO8859-15 iso8859-1/XLC_LOCALE: ca_ES.ISO8859-1 iso8859-15/XLC_LOCALE: ca_ES.ISO8859-15 iso8859-1/XLC_LOCALE: ca_FR.ISO8859-1 iso8859-15/XLC_LOCALE: ca_FR.ISO8859-15 iso8859-1/XLC_LOCALE: ca_IT.ISO8859-1 iso8859-15/XLC_LOCALE: ca_IT.ISO8859-15 iso8859-2/XLC_LOCALE: cs_CZ.ISO8859-2 iso8859-1/XLC_LOCALE: cy_GB.ISO8859-1 iso8859-14/XLC_LOCALE: cy_GB.ISO8859-14 iso8859-15/XLC_LOCALE: cy_GB.ISO8859-15 iso8859-1/XLC_LOCALE: da_DK.ISO8859-1 iso8859-15/XLC_LOCALE: da_DK.ISO8859-15 iso8859-1/XLC_LOCALE: de_AT.ISO8859-1 iso8859-15/XLC_LOCALE: de_AT.ISO8859-15 iso8859-1/XLC_LOCALE: de_BE.ISO8859-1 iso8859-15/XLC_LOCALE: de_BE.ISO8859-15 iso8859-1/XLC_LOCALE: de_CH.ISO8859-1 iso8859-15/XLC_LOCALE: de_CH.ISO8859-15 iso8859-1/XLC_LOCALE: de_DE.ISO8859-1 iso8859-15/XLC_LOCALE: de_DE.ISO8859-15 iso8859-1/XLC_LOCALE: de_LI.ISO8859-1 iso8859-1/XLC_LOCALE: de_LI.ISO8859-15 iso8859-1/XLC_LOCALE: de_LU.ISO8859-1 iso8859-15/XLC_LOCALE: de_LU.ISO8859-15 iso8859-7/XLC_LOCALE: el_GR.ISO8859-7 iso8859-4/XLC_LOCALE: ee_EE.ISO8859-4 iso8859-15/XLC_LOCALE: el_GR.ISO8859-15 iso8859-1/XLC_LOCALE: en_AU.ISO8859-1 iso8859-1/XLC_LOCALE: en_BE.ISO8859-1 iso8859-15/XLC_LOCALE: en_BE.ISO8859-15 iso8859-1/XLC_LOCALE: en_BZ.ISO8859-1 iso8859-1/XLC_LOCALE: en_BW.ISO8859-1 iso8859-1/XLC_LOCALE: en_CA.ISO8859-1 iso8859-1/XLC_LOCALE: en_EN.ISO8859-1 iso8859-1/XLC_LOCALE: en_GB.ISO8859-1 iso8859-15/XLC_LOCALE: en_GB.ISO8859-15 iso8859-1/XLC_LOCALE: en_HK.ISO8859-1 iso8859-1/XLC_LOCALE: en_IE.ISO8859-1 iso8859-15/XLC_LOCALE: en_IE.ISO8859-15 iso8859-15/XLC_LOCALE: en_IN.ISO8859-15 iso8859-1/XLC_LOCALE: en_JM.ISO8859-1 iso8859-1/XLC_LOCALE: en_NZ.ISO8859-1 iso8859-1/XLC_LOCALE: en_PH.ISO8859-1 iso8859-1/XLC_LOCALE: en_SG.ISO8859-1 iso8859-1/XLC_LOCALE: en_TT.ISO8859-1 iso8859-1/XLC_LOCALE: en_UK.ISO8859-1 iso8859-15/XLC_LOCALE: en_UK.ISO8859-15 iso8859-1/XLC_LOCALE: en_US.ISO8859-1 iso8859-15/XLC_LOCALE: en_US.ISO8859-15 iso8859-1/XLC_LOCALE: en_ZA.ISO8859-1 iso8859-15/XLC_LOCALE: en_ZA.ISO8859-15 iso8859-1/XLC_LOCALE: en_ZW.ISO8859-1 iso8859-3/XLC_LOCALE: eo_EO.ISO8859-3 iso8859-3/XLC_LOCALE: eo_XX.ISO8859-3 iso8859-1/XLC_LOCALE: es_AR.ISO8859-1 iso8859-1/XLC_LOCALE: es_BO.ISO8859-1 iso8859-1/XLC_LOCALE: es_CL.ISO8859-1 iso8859-1/XLC_LOCALE: es_CO.ISO8859-1 iso8859-1/XLC_LOCALE: es_CR.ISO8859-1 iso8859-1/XLC_LOCALE: es_DO.ISO8859-1 iso8859-1/XLC_LOCALE: es_EC.ISO8859-1 iso8859-1/XLC_LOCALE: es_ES.ISO8859-1 iso8859-15/XLC_LOCALE: es_ES.ISO8859-15 iso8859-1/XLC_LOCALE: es_GT.ISO8859-1 iso8859-1/XLC_LOCALE: es_HN.ISO8859-1 iso8859-1/XLC_LOCALE: es_MX.ISO8859-1 iso8859-1/XLC_LOCALE: es_NI.ISO8859-1 iso8859-1/XLC_LOCALE: es_PA.ISO8859-1 iso8859-15/XLC_LOCALE: es_PA.ISO8859-15 iso8859-1/XLC_LOCALE: es_PE.ISO8859-1 iso8859-15/XLC_LOCALE: es_PE.ISO8859-15 iso8859-1/XLC_LOCALE: es_PR.ISO8859-1 iso8859-1/XLC_LOCALE: es_PY.ISO8859-1 iso8859-15/XLC_LOCALE: es_PY.ISO8859-15 iso8859-1/XLC_LOCALE: es_SV.ISO8859-1 iso8859-15/XLC_LOCALE: es_SV.ISO8859-15 iso8859-1/XLC_LOCALE: es_US.ISO8859-1 iso8859-1/XLC_LOCALE: es_UY.ISO8859-1 iso8859-15/XLC_LOCALE: es_UY.ISO8859-15 iso8859-1/XLC_LOCALE: es_VE.ISO8859-1 iso8859-15/XLC_LOCALE: es_VE.ISO8859-15 iso8859-1/XLC_LOCALE: et_EE.ISO8859-1 iso8859-4/XLC_LOCALE: et_EE.ISO8859-4 iso8859-13/XLC_LOCALE: et_EE.ISO8859-13 iso8859-15/XLC_LOCALE: et_EE.ISO8859-15 iso8859-1/XLC_LOCALE: eu_ES.ISO8859-1 iso8859-15/XLC_LOCALE: eu_ES.ISO8859-15 isiri-3342/XLC_LOCALE: fa_IR.ISIRI-3342 iso8859-1/XLC_LOCALE: fi_FI.ISO8859-1 iso8859-15/XLC_LOCALE: fi_FI.ISO8859-15 iso8859-1/XLC_LOCALE: fo_FO.ISO8859-1 iso8859-15/XLC_LOCALE: fo_FO.ISO8859-15 iso8859-1/XLC_LOCALE: fr_BE.ISO8859-1 iso8859-15/XLC_LOCALE: fr_BE.ISO8859-15 iso8859-1/XLC_LOCALE: fr_CA.ISO8859-1 iso8859-15/XLC_LOCALE: fr_CA.ISO8859-15 iso8859-1/XLC_LOCALE: fr_CH.ISO8859-1 iso8859-15/XLC_LOCALE: fr_CH.ISO8859-15 iso8859-1/XLC_LOCALE: fr_FR.ISO8859-1 iso8859-15/XLC_LOCALE: fr_FR.ISO8859-15 iso8859-1/XLC_LOCALE: fr_LU.ISO8859-1 iso8859-15/XLC_LOCALE: fr_LU.ISO8859-15 iso8859-1/XLC_LOCALE: ga_IE.ISO8859-1 iso8859-14/XLC_LOCALE: ga_IE.ISO8859-14 iso8859-15/XLC_LOCALE: ga_IE.ISO8859-15 iso8859-1/XLC_LOCALE: gd_GB.ISO8859-1 iso8859-14/XLC_LOCALE: gd_GB.ISO8859-14 iso8859-15/XLC_LOCALE: gd_GB.ISO8859-15 iso8859-1/XLC_LOCALE: gl_ES.ISO8859-1 iso8859-15/XLC_LOCALE: gl_ES.ISO8859-15 iso8859-1/XLC_LOCALE: gv_GB.ISO8859-1 iso8859-14/XLC_LOCALE: gv_GB.ISO8859-14 iso8859-15/XLC_LOCALE: gv_GB.ISO8859-15 iso8859-8/XLC_LOCALE: he_IL.ISO8859-8 microsoft-cp1255/XLC_LOCALE: he_IL.CP1255 iscii-dev/XLC_LOCALE: hi_IN.ISCII-DEV iso8859-2/XLC_LOCALE: hr_HR.ISO8859-2 iso8859-2/XLC_LOCALE: hu_HU.ISO8859-2 armscii-8/XLC_LOCALE: hy_AM.ARMSCII-8 iso8859-1/XLC_LOCALE: id_ID.ISO8859-1 iso8859-1/XLC_LOCALE: id_ID.ISO8859-15 iso8859-1/XLC_LOCALE: is_IS.ISO8859-1 iso8859-15/XLC_LOCALE: is_IS.ISO8859-15 iso8859-1/XLC_LOCALE: it_CH.ISO8859-1 iso8859-15/XLC_LOCALE: it_CH.ISO8859-15 iso8859-1/XLC_LOCALE: it_IT.ISO8859-1 iso8859-15/XLC_LOCALE: it_IT.ISO8859-15 ja/XLC_LOCALE: ja_JP.eucJP ja.SJIS/XLC_LOCALE: ja_JP.SJIS ja.JIS/XLC_LOCALE: ja_JP.JIS7 georgian-academy/XLC_LOCALE: ka_GE.GEORGIAN-ACADEMY georgian-ps/XLC_LOCALE: ka_GE.GEORGIAN-PS iso8859-1/XLC_LOCALE: kl_GL.ISO8859-1 iso8859-15/XLC_LOCALE: kl_GL.ISO8859-15 ko/XLC_LOCALE: ko_KR.eucKR iso8859-1/XLC_LOCALE: kw_GB.ISO8859-1 iso8859-14/XLC_LOCALE: kw_GB.ISO8859-14 iso8859-15/XLC_LOCALE: kw_GB.ISO8859-15 ibm-cp1133/XLC_LOCALE: lo_LA.IBM-CP1133 mulelao-1/XLC_LOCALE: lo_LA.MULELAO-1 iso8859-4/XLC_LOCALE: lt_LT.ISO8859-4 iso8859-13/XLC_LOCALE: lt_LT.ISO8859-13 iso8859-4/XLC_LOCALE: lv_LV.ISO8859-4 iso8859-13/XLC_LOCALE: lv_LV.ISO8859-13 iso8859-13/XLC_LOCALE: mi_NZ.ISO8859-13 iso8859-5/XLC_LOCALE: mk_MK.ISO8859-5 microsoft-cp1251/XLC_LOCALE: mk_MK.CP1251 iso8859-1/XLC_LOCALE: ms_MY.ISO8859-1 iso8859-3/XLC_LOCALE: mt_MT.ISO8859-3 iso8859-1/XLC_LOCALE: nb_NO.ISO8859-1 iso8859-1/XLC_LOCALE: nb_NO.ISO8859-15 iso8859-1/XLC_LOCALE: nl_BE.ISO8859-1 iso8859-15/XLC_LOCALE: nl_BE.ISO8859-15 iso8859-1/XLC_LOCALE: nl_NL.ISO8859-1 iso8859-15/XLC_LOCALE: nl_NL.ISO8859-15 iso8859-1/XLC_LOCALE: nn_NO.ISO8859-1 iso8859-1/XLC_LOCALE: nn_NO.ISO8859-15 iso8859-1/XLC_LOCALE: no_NO.ISO8859-1 iso8859-1/XLC_LOCALE: no_NO.ISO8859-15 iso8859-1/XLC_LOCALE: nr_ZA.ISO8859-1 iso8859-15/XLC_LOCALE: nso_ZA.ISO8859-15 iso8859-1/XLC_LOCALE: ny_NO.ISO8859-1 iso8859-1/XLC_LOCALE: ny_NO.ISO8859-15 iso8859-1/XLC_LOCALE: oc_FR.ISO8859-1 iso8859-15/XLC_LOCALE: oc_FR.ISO8859-15 iso8859-1/XLC_LOCALE: pd_DE.ISO8859-1 iso8859-15/XLC_LOCALE: pd_DE.ISO8859-15 iso8859-1/XLC_LOCALE: pd_US.ISO8859-1 iso8859-15/XLC_LOCALE: pd_US.ISO8859-15 iso8859-1/XLC_LOCALE: ph_PH.ISO8859-1 iso8859-2/XLC_LOCALE: pl_PL.ISO8859-2 iso8859-1/XLC_LOCALE: pp_AN.ISO8859-1 iso8859-1/XLC_LOCALE: pt_BR.ISO8859-1 iso8859-15/XLC_LOCALE: pt_BR.ISO8859-15 iso8859-1/XLC_LOCALE: pt_PT.ISO8859-1 iso8859-15/XLC_LOCALE: pt_PT.ISO8859-15 iso8859-2/XLC_LOCALE: ro_RO.ISO8859-2 iso8859-5/XLC_LOCALE: ru_RU.ISO8859-5 microsoft-cp1251/XLC_LOCALE: ru_RU.CP1251 koi8-r/XLC_LOCALE: ru_RU.KOI8-R microsoft-cp1251/XLC_LOCALE: ru_UA.CP1251 koi8-u/XLC_LOCALE: ru_UA.KOI8-U iso8859-1/XLC_LOCALE: rw_RW.ISO8859-1 iso8859-2/XLC_LOCALE: sh_YU.ISO8859-2 iso8859-2/XLC_LOCALE: sk_SK.ISO8859-2 iso8859-2/XLC_LOCALE: sl_SI.ISO8859-2 iso8859-2/XLC_LOCALE: sq_AL.ISO8859-2 iso8859-2/XLC_LOCALE: sr_CS.ISO8859-2 iso8859-5/XLC_LOCALE: sr_CS.ISO8859-5 iso8859-2/XLC_LOCALE: sr_YU.ISO8859-2 iso8859-5/XLC_LOCALE: sr_YU.ISO8859-5 microsoft-cp1251/XLC_LOCALE: sr_YU.CP1251 iso8859-1/XLC_LOCALE: ss_ZA.ISO8859-1 iso8859-1/XLC_LOCALE: st_ZA.ISO8859-1 iso8859-1/XLC_LOCALE: sv_FI.ISO8859-1 iso8859-15/XLC_LOCALE: sv_FI.ISO8859-15 iso8859-1/XLC_LOCALE: sv_SE.ISO8859-1 iso8859-15/XLC_LOCALE: sv_SE.ISO8859-15 tscii-0/XLC_LOCALE: ta_IN.TSCII-0 koi8-c/XLC_LOCALE: tg_TJ.KOI8-C th_TH/XLC_LOCALE: th_TH.TIS620 iso8859-11/XLC_LOCALE: th_TH.ISO8859-11 iso8859-1/XLC_LOCALE: tl_PH.ISO8859-1 iso8859-15/XLC_LOCALE: tn_ZA.ISO8859-15 iso8859-9/XLC_LOCALE: tr_TR.ISO8859-9 iso8859-1/XLC_LOCALE: ts_ZA.ISO8859-1 tatar-cyr/XLC_LOCALE: tt_RU.TATAR-CYR koi8-c/XLC_LOCALE: tt_RU.KOI8-C iso8859-5/XLC_LOCALE: uk_UA.ISO8859-5 microsoft-cp1251/XLC_LOCALE: uk_UA.CP1251 koi8-u/XLC_LOCALE: uk_UA.KOI8-U microsoft-cp1256/XLC_LOCALE: ur_PK.CP1256 iso8859-1/XLC_LOCALE: uz_UZ.ISO8859-1 vi_VN.tcvn/XLC_LOCALE: vi_VN.TCVN vi_VN.viscii/XLC_LOCALE: vi_VN.VISCII iso8859-1/XLC_LOCALE: wa_BE.ISO8859-1 iso8859-15/XLC_LOCALE: wa_BE.ISO8859-15 iso8859-1/XLC_LOCALE: xh_ZA.ISO8859-1 microsoft-cp1255/XLC_LOCALE: yi_US.CP1255 zh_CN/XLC_LOCALE: zh_CN.eucCN zh_CN/XLC_LOCALE: zh_CN.gb2312 zh_CN.gbk/XLC_LOCALE: zh_CN.gbk zh_CN.gb18030/XLC_LOCALE: zh_CN.gb18030 zh_HK.big5/XLC_LOCALE: zh_HK.big5 zh_HK.big5hkscs/XLC_LOCALE: zh_HK.big5hkscs zh_TW.big5/XLC_LOCALE: zh_TW.big5 zh_TW/XLC_LOCALE: zh_TW.eucTW iso8859-1/XLC_LOCALE: zu_ZA.ISO8859-1 XCOMM Note: The UTF-8 locales don't work correctly yet. Work in progress. en_US.UTF-8/XLC_LOCALE: af_ZA.UTF-8 en_US.UTF-8/XLC_LOCALE: am_ET.UTF-8 en_US.UTF-8/XLC_LOCALE: ar_AA.UTF-8 en_US.UTF-8/XLC_LOCALE: ar_AE.UTF-8 en_US.UTF-8/XLC_LOCALE: ar_BH.UTF-8 en_US.UTF-8/XLC_LOCALE: ar_DZ.UTF-8 en_US.UTF-8/XLC_LOCALE: ar_EG.UTF-8 en_US.UTF-8/XLC_LOCALE: ar_IN.UTF-8 en_US.UTF-8/XLC_LOCALE: ar_IQ.UTF-8 en_US.UTF-8/XLC_LOCALE: ar_JO.UTF-8 en_US.UTF-8/XLC_LOCALE: ar_KW.UTF-8 en_US.UTF-8/XLC_LOCALE: ar_LB.UTF-8 en_US.UTF-8/XLC_LOCALE: ar_LY.UTF-8 en_US.UTF-8/XLC_LOCALE: ar_MA.UTF-8 en_US.UTF-8/XLC_LOCALE: ar_OM.UTF-8 en_US.UTF-8/XLC_LOCALE: bs_BA.UTF-8 en_US.UTF-8/XLC_LOCALE: ar_QA.UTF-8 en_US.UTF-8/XLC_LOCALE: ar_SA.UTF-8 en_US.UTF-8/XLC_LOCALE: ar_SD.UTF-8 en_US.UTF-8/XLC_LOCALE: ar_SY.UTF-8 en_US.UTF-8/XLC_LOCALE: ar_TN.UTF-8 en_US.UTF-8/XLC_LOCALE: ar_YE.UTF-8 en_US.UTF-8/XLC_LOCALE: as_IN.UTF-8 en_US.UTF-8/XLC_LOCALE: az_AZ.UTF-8 en_US.UTF-8/XLC_LOCALE: be_BY.UTF-8 en_US.UTF-8/XLC_LOCALE: bg_BG.UTF-8 en_US.UTF-8/XLC_LOCALE: bn_BD.UTF-8 en_US.UTF-8/XLC_LOCALE: bn_IN.UTF-8 en_US.UTF-8/XLC_LOCALE: bo_IN.UTF-8 en_US.UTF-8/XLC_LOCALE: br_FR.UTF-8 en_US.UTF-8/XLC_LOCALE: ca_AD.UTF-8 en_US.UTF-8/XLC_LOCALE: ca_ES.UTF-8 en_US.UTF-8/XLC_LOCALE: ca_FR.UTF-8 en_US.UTF-8/XLC_LOCALE: ca_IT.UTF-8 en_US.UTF-8/XLC_LOCALE: cs_CZ.UTF-8 en_US.UTF-8/XLC_LOCALE: cy_GB.UTF-8 en_US.UTF-8/XLC_LOCALE: cs_CZ.UTF-8 en_US.UTF-8/XLC_LOCALE: da_DK.UTF-8 en_US.UTF-8/XLC_LOCALE: de_AT.UTF-8 en_US.UTF-8/XLC_LOCALE: de_BE.UTF-8 en_US.UTF-8/XLC_LOCALE: de_CH.UTF-8 en_US.UTF-8/XLC_LOCALE: de_DE.UTF-8 en_US.UTF-8/XLC_LOCALE: de_LI.UTF-8 en_US.UTF-8/XLC_LOCALE: de_LU.UTF-8 en_US.UTF-8/XLC_LOCALE: el_CY.UTF-8 en_US.UTF-8/XLC_LOCALE: el_GR.UTF-8 en_US.UTF-8/XLC_LOCALE: en_AU.UTF-8 en_US.UTF-8/XLC_LOCALE: en_BE.UTF-8 en_US.UTF-8/XLC_LOCALE: en_BW.UTF-8 en_US.UTF-8/XLC_LOCALE: en_BZ.UTF-8 en_US.UTF-8/XLC_LOCALE: en_CA.UTF-8 en_US.UTF-8/XLC_LOCALE: en_DK.UTF-8 en_US.UTF-8/XLC_LOCALE: en_GB.UTF-8 en_US.UTF-8/XLC_LOCALE: en_EN.UTF-8 en_US.UTF-8/XLC_LOCALE: en_HK.UTF-8 en_US.UTF-8/XLC_LOCALE: en_IE.UTF-8 en_US.UTF-8/XLC_LOCALE: en_IN.UTF-8 en_US.UTF-8/XLC_LOCALE: en_JM.UTF-8 en_US.UTF-8/XLC_LOCALE: en_MT.UTF-8 en_US.UTF-8/XLC_LOCALE: en_NZ.UTF-8 en_US.UTF-8/XLC_LOCALE: en_PH.UTF-8 en_US.UTF-8/XLC_LOCALE: en_SG.UTF-8 en_US.UTF-8/XLC_LOCALE: en_TT.UTF-8 en_US.UTF-8/XLC_LOCALE: en_UK.UTF-8 en_US.UTF-8/XLC_LOCALE: en_US.UTF-8 en_US.UTF-8/XLC_LOCALE: en_ZA.UTF-8 en_US.UTF-8/XLC_LOCALE: en_ZW.UTF-8 en_US.UTF-8/XLC_LOCALE: eo_EO.UTF-8 en_US.UTF-8/XLC_LOCALE: eo_XX.UTF-8 en_US.UTF-8/XLC_LOCALE: es_AR.UTF-8 en_US.UTF-8/XLC_LOCALE: es_BO.UTF-8 en_US.UTF-8/XLC_LOCALE: es_CL.UTF-8 en_US.UTF-8/XLC_LOCALE: es_CO.UTF-8 en_US.UTF-8/XLC_LOCALE: es_CR.UTF-8 en_US.UTF-8/XLC_LOCALE: es_DO.UTF-8 en_US.UTF-8/XLC_LOCALE: es_EC.UTF-8 en_US.UTF-8/XLC_LOCALE: es_ES.UTF-8 en_US.UTF-8/XLC_LOCALE: es_GT.UTF-8 en_US.UTF-8/XLC_LOCALE: es_HN.UTF-8 en_US.UTF-8/XLC_LOCALE: es_MX.UTF-8 en_US.UTF-8/XLC_LOCALE: es_NI.UTF-8 en_US.UTF-8/XLC_LOCALE: es_PA.UTF-8 en_US.UTF-8/XLC_LOCALE: es_PE.UTF-8 en_US.UTF-8/XLC_LOCALE: es_PR.UTF-8 en_US.UTF-8/XLC_LOCALE: es_PY.UTF-8 en_US.UTF-8/XLC_LOCALE: es_SV.UTF-8 en_US.UTF-8/XLC_LOCALE: es_US.UTF-8 en_US.UTF-8/XLC_LOCALE: es_UY.UTF-8 en_US.UTF-8/XLC_LOCALE: es_VE.UTF-8 en_US.UTF-8/XLC_LOCALE: et_EE.UTF-8 en_US.UTF-8/XLC_LOCALE: eu_ES.UTF-8 en_US.UTF-8/XLC_LOCALE: fa_IR.UTF-8 en_US.UTF-8/XLC_LOCALE: fi_FI.UTF-8 en_US.UTF-8/XLC_LOCALE: fo_FO.UTF-8 en_US.UTF-8/XLC_LOCALE: fr_BE.UTF-8 en_US.UTF-8/XLC_LOCALE: fr_CA.UTF-8 en_US.UTF-8/XLC_LOCALE: fr_CH.UTF-8 en_US.UTF-8/XLC_LOCALE: fr_FR.UTF-8 en_US.UTF-8/XLC_LOCALE: fr_LU.UTF-8 en_US.UTF-8/XLC_LOCALE: ga_IE.UTF-8 en_US.UTF-8/XLC_LOCALE: gd_GB.UTF-8 en_US.UTF-8/XLC_LOCALE: gl_ES.UTF-8 en_US.UTF-8/XLC_LOCALE: gu_IN.UTF-8 en_US.UTF-8/XLC_LOCALE: gv_GB.UTF-8 en_US.UTF-8/XLC_LOCALE: he_IL.UTF-8 en_US.UTF-8/XLC_LOCALE: hi_IN.UTF-8 en_US.UTF-8/XLC_LOCALE: hne_IN.UTF-8 en_US.UTF-8/XLC_LOCALE: hr_HR.UTF-8 en_US.UTF-8/XLC_LOCALE: hu_HU.UTF-8 en_US.UTF-8/XLC_LOCALE: hy_AM.UTF-8 en_US.UTF-8/XLC_LOCALE: id_ID.UTF-8 en_US.UTF-8/XLC_LOCALE: is_IS.UTF-8 en_US.UTF-8/XLC_LOCALE: it_CH.UTF-8 en_US.UTF-8/XLC_LOCALE: it_IT.UTF-8 en_US.UTF-8/XLC_LOCALE: iu_CA.UTF-8 ja_JP.UTF-8/XLC_LOCALE: ja_JP.UTF-8 en_US.UTF-8/XLC_LOCALE: ka_GE.UTF-8 en_US.UTF-8/XLC_LOCALE: kk_KZ.UTF-8 en_US.UTF-8/XLC_LOCALE: kl_GL.UTF-8 en_US.UTF-8/XLC_LOCALE: km_KH.UTF-8 en_US.UTF-8/XLC_LOCALE: kn_IN.UTF-8 en_US.UTF-8/XLC_LOCALE: ks_IN.UTF-8 en_US.UTF-8/XLC_LOCALE: ks_IN@devanagari.UTF-8 ko_KR.UTF-8/XLC_LOCALE: ko_KR.UTF-8 en_US.UTF-8/XLC_LOCALE: ku_TR.UTF-8 en_US.UTF-8/XLC_LOCALE: kw_GB.UTF-8 en_US.UTF-8/XLC_LOCALE: ky_KG.UTF-8 en_US.UTF-8/XLC_LOCALE: lo_LA.UTF-8 en_US.UTF-8/XLC_LOCALE: lt_LT.UTF-8 en_US.UTF-8/XLC_LOCALE: lv_LV.UTF-8 en_US.UTF-8/XLC_LOCALE: mai_IN.UTF-8 en_US.UTF-8/XLC_LOCALE: mi_NZ.UTF-8 en_US.UTF-8/XLC_LOCALE: mk_MK.UTF-8 en_US.UTF-8/XLC_LOCALE: ml_IN.UTF-8 en_US.UTF-8/XLC_LOCALE: mr_IN.UTF-8 en_US.UTF-8/XLC_LOCALE: ms_MY.UTF-8 en_US.UTF-8/XLC_LOCALE: mt_MT.UTF-8 en_US.UTF-8/XLC_LOCALE: nl_BE.UTF-8 en_US.UTF-8/XLC_LOCALE: nl_NL.UTF-8 en_US.UTF-8/XLC_LOCALE: nb_NO.UTF-8 en_US.UTF-8/XLC_LOCALE: nn_NO.UTF-8 en_US.UTF-8/XLC_LOCALE: no_NO.UTF-8 en_US.UTF-8/XLC_LOCALE: nr_ZA.UTF-8 en_US.UTF-8/XLC_LOCALE: nso_ZA.UTF-8 en_US.UTF-8/XLC_LOCALE: ny_NO.UTF-8 en_US.UTF-8/XLC_LOCALE: oc_FR.UTF-8 en_US.UTF-8/XLC_LOCALE: or_IN.UTF-8 en_US.UTF-8/XLC_LOCALE: pa_IN.UTF-8 en_US.UTF-8/XLC_LOCALE: pa_PK.UTF-8 en_US.UTF-8/XLC_LOCALE: pd_DE.UTF-8 en_US.UTF-8/XLC_LOCALE: pd_US.UTF-8 en_US.UTF-8/XLC_LOCALE: ph_PH.UTF-8 en_US.UTF-8/XLC_LOCALE: pl_PL.UTF-8 en_US.UTF-8/XLC_LOCALE: pp_AN.UTF-8 pt_BR.UTF-8/XLC_LOCALE: pt_BR.UTF-8 en_US.UTF-8/XLC_LOCALE: pt_PT.UTF-8 en_US.UTF-8/XLC_LOCALE: ro_RO.UTF-8 ru_RU.UTF-8/XLC_LOCALE: ru_RU.UTF-8 en_US.UTF-8/XLC_LOCALE: ru_UA.UTF-8 en_US.UTF-8/XLC_LOCALE: rw_RW.UTF-8 en_US.UTF-8/XLC_LOCALE: sa_IN.UTF-8 en_US.UTF-8/XLC_LOCALE: sd_IN.UTF-8 en_US.UTF-8/XLC_LOCALE: sd_IN@devanagari.UTF-8 en_US.UTF-8/XLC_LOCALE: se_NO.UTF-8 en_US.UTF-8/XLC_LOCALE: sh_BA.UTF-8 en_US.UTF-8/XLC_LOCALE: sh_YU.UTF-8 en_US.UTF-8/XLC_LOCALE: si_LK.UTF-8 en_US.UTF-8/XLC_LOCALE: sk_SK.UTF-8 en_US.UTF-8/XLC_LOCALE: sl_SI.UTF-8 en_US.UTF-8/XLC_LOCALE: sq_AL.UTF-8 en_US.UTF-8/XLC_LOCALE: sr_CS.UTF-8 en_US.UTF-8/XLC_LOCALE: sr_ME.UTF-8 en_US.UTF-8/XLC_LOCALE: sr_RS.UTF-8 en_US.UTF-8/XLC_LOCALE: sr_YU.UTF-8 en_US.UTF-8/XLC_LOCALE: ss_ZA.UTF-8 en_US.UTF-8/XLC_LOCALE: st_ZA.UTF-8 en_US.UTF-8/XLC_LOCALE: sv_FI.UTF-8 en_US.UTF-8/XLC_LOCALE: sv_SE.UTF-8 en_US.UTF-8/XLC_LOCALE: ta_IN.UTF-8 en_US.UTF-8/XLC_LOCALE: te_IN.UTF-8 en_US.UTF-8/XLC_LOCALE: tg_TJ.UTF-8 th_TH.UTF-8/XLC_LOCALE: th_TH.UTF-8 en_US.UTF-8/XLC_LOCALE: ti_ER.UTF-8 en_US.UTF-8/XLC_LOCALE: ti_ET.UTF-8 en_US.UTF-8/XLC_LOCALE: tl_PH.UTF-8 en_US.UTF-8/XLC_LOCALE: tn_ZA.UTF-8 en_US.UTF-8/XLC_LOCALE: tr_TR.UTF-8 en_US.UTF-8/XLC_LOCALE: ts_ZA.UTF-8 en_US.UTF-8/XLC_LOCALE: tt_RU.UTF-8 en_US.UTF-8/XLC_LOCALE: uk_UA.UTF-8 en_US.UTF-8/XLC_LOCALE: ur_IN.UTF-8 en_US.UTF-8/XLC_LOCALE: ur_PK.UTF-8 en_US.UTF-8/XLC_LOCALE: uz_UZ.UTF-8 en_US.UTF-8/XLC_LOCALE: ve_ZA.UTF-8 en_US.UTF-8/XLC_LOCALE: vi_VN.UTF-8 en_US.UTF-8/XLC_LOCALE: wa_BE.UTF-8 en_US.UTF-8/XLC_LOCALE: xh_ZA.UTF-8 en_US.UTF-8/XLC_LOCALE: yi_US.UTF-8 en_US.UTF-8/XLC_LOCALE: ne_NP.UTF-8 zh_CN.UTF-8/XLC_LOCALE: zh_CN.UTF-8 zh_HK.UTF-8/XLC_LOCALE: zh_HK.UTF-8 zh_CN.UTF-8/XLC_LOCALE: zh_SG.UTF-8 zh_TW.UTF-8/XLC_LOCALE: zh_TW.UTF-8 en_US.UTF-8/XLC_LOCALE: zu_ZA.UTF-8 C_LOCALE: pp_AN.ISO8859-1 iso8859-1/XLC_LOCALE: pt_BR.ISO8859-1 iso8859-15/XLC_LOCALE: pt_BR.ISO8859-15 iso8859-1/XLC_LOCALE: pt_PT.ISO8859-1 iso8859-15/XLC_LOCALE: pt_PT.ISO8859-15 iso8859-2/XLC_LOCALE: ro_RO.ISO8859-2 iso8859-5/XLC_LOCALE: rlibX11-1.6.3/nls/compose.dir.pre000064401431060000012000000403111247741723500166030ustar00alancstaff00002660200006XCOMM XCOMM This file contains compose table file names. XCOMM The first word is the compose table file name XCOMM and the second word is the full locale name. XCOMM XCOMM iso8859-1/Compose: C iso8859-1/Compose: af_ZA.ISO8859-1 iso8859-6/Compose: ar_AA.ISO8859-6 iso8859-6/Compose: ar_AE.ISO8859-6 iso8859-6/Compose: ar_BH.ISO8859-6 iso8859-6/Compose: ar_DZ.ISO8859-6 iso8859-6/Compose: ar_EG.ISO8859-6 iso8859-6/Compose: ar_IQ.ISO8859-6 iso8859-6/Compose: ar_JO.ISO8859-6 iso8859-6/Compose: ar_KW.ISO8859-6 iso8859-6/Compose: ar_LB.ISO8859-6 iso8859-6/Compose: ar_LY.ISO8859-6 iso8859-6/Compose: ar_MA.ISO8859-6 iso8859-6/Compose: ar_OM.ISO8859-6 iso8859-6/Compose: ar_QA.ISO8859-6 iso8859-6/Compose: ar_SA.ISO8859-6 iso8859-6/Compose: ar_SD.ISO8859-6 iso8859-6/Compose: ar_SY.ISO8859-6 iso8859-6/Compose: ar_TN.ISO8859-6 iso8859-6/Compose: ar_YE.ISO8859-6 iso8859-9e/Compose: az_AZ.ISO8859-9E koi8-c/Compose: az_AZ.KOI8-C microsoft-cp1251/Compose: be_BY.CP1251 iso8859-5/Compose: be_BY.ISO8859-5 iso8859-5/Compose: bg_BG.ISO8859-5 microsoft-cp1251/Compose: bg_BG.CP1251 koi8-r/Compose: bg_BG.KOI8-R iso8859-1/Compose: br_FR.ISO8859-1 iso8859-14/Compose: br_FR.ISO8859-14 iso8859-15/Compose: br_FR.ISO8859-15 iso8859-2/Compose: bs_BA.ISO8859-2 iso8859-1/Compose: ca_AD.ISO8859-1 iso8859-15/Compose: ca_AD.ISO8859-15 iso8859-1/Compose: ca_ES.ISO8859-1 iso8859-15/Compose: ca_ES.ISO8859-15 iso8859-1/Compose: ca_FR.ISO8859-1 iso8859-15/Compose: ca_FR.ISO8859-15 iso8859-1/Compose: ca_IT.ISO8859-1 iso8859-15/Compose: ca_IT.ISO8859-15 iso8859-2/Compose: cs_CZ.ISO8859-2 iso8859-1/Compose: cy_GB.ISO8859-1 iso8859-14/Compose: cy_GB.ISO8859-14 iso8859-15/Compose: cy_GB.ISO8859-15 iso8859-1/Compose: da_DK.ISO8859-1 iso8859-15/Compose: da_DK.ISO8859-15 iso8859-1/Compose: de_AT.ISO8859-1 iso8859-15/Compose: de_AT.ISO8859-15 iso8859-1/Compose: de_BE.ISO8859-1 iso8859-15/Compose: de_BE.ISO8859-15 iso8859-1/Compose: de_CH.ISO8859-1 iso8859-15/Compose: de_CH.ISO8859-15 iso8859-1/Compose: de_DE.ISO8859-1 iso8859-15/Compose: de_DE.ISO8859-15 iso8859-1/Compose: de_LI.ISO8859-1 iso8859-15/Compose: de_LI.ISO8859-15 iso8859-1/Compose: de_LU.ISO8859-1 iso8859-15/Compose: de_LU.ISO8859-15 iso8859-4/Compose: ee_EE.ISO8859-4 iso8859-7/Compose: el_GR.ISO8859-7 iso8859-15/Compose: el_GR.ISO8859-15 iso8859-1/Compose: en_AU.ISO8859-1 iso8859-1/Compose: en_BE.ISO8859-1 iso8859-15/Compose: en_BE.ISO8859-15 iso8859-1/Compose: en_BW.ISO8859-1 iso8859-1/Compose: en_BZ.ISO8859-1 iso8859-1/Compose: en_CA.ISO8859-1 iso8859-1/Compose: en_EN.ISO8859-1 iso8859-1/Compose: en_GB.ISO8859-1 iso8859-15/Compose: en_GB.ISO8859-15 iso8859-1/Compose: en_HK.ISO8859-1 iso8859-1/Compose: en_IE.ISO8859-1 iso8859-15/Compose: en_IE.ISO8859-15 iso8859-15/Compose: en_IN.ISO8859-15 iso8859-1/Compose: en_JM.ISO8859-1 iso8859-1/Compose: en_NZ.ISO8859-1 iso8859-1/Compose: en_PH.ISO8859-1 iso8859-1/Compose: en_SG.ISO8859-1 iso8859-1/Compose: en_TT.ISO8859-1 iso8859-1/Compose: en_UK.ISO8859-1 iso8859-15/Compose: en_UK.ISO8859-15 iso8859-1/Compose: en_US.ISO8859-1 iso8859-15/Compose: en_US.ISO8859-15 iso8859-1/Compose: en_ZA.ISO8859-1 iso8859-15/Compose: en_ZA.ISO8859-15 iso8859-1/Compose: en_ZW.ISO8859-1 iso8859-3/Compose: eo_EO.ISO8859-3 iso8859-3/Compose: eo_XX.ISO8859-3 iso8859-1/Compose: es_AR.ISO8859-1 iso8859-1/Compose: es_BO.ISO8859-1 iso8859-1/Compose: es_CL.ISO8859-1 iso8859-1/Compose: es_CO.ISO8859-1 iso8859-1/Compose: es_CR.ISO8859-1 iso8859-1/Compose: es_DO.ISO8859-1 iso8859-1/Compose: es_EC.ISO8859-1 iso8859-1/Compose: es_ES.ISO8859-1 iso8859-15/Compose: es_ES.ISO8859-15 iso8859-1/Compose: es_GT.ISO8859-1 iso8859-1/Compose: es_HN.ISO8859-1 iso8859-1/Compose: es_MX.ISO8859-1 iso8859-1/Compose: es_NI.ISO8859-1 iso8859-1/Compose: es_PA.ISO8859-1 iso8859-15/Compose: es_PA.ISO8859-15 iso8859-1/Compose: es_PE.ISO8859-1 iso8859-15/Compose: es_PE.ISO8859-15 iso8859-1/Compose: es_PR.ISO8859-1 iso8859-1/Compose: es_PY.ISO8859-1 iso8859-15/Compose: es_PY.ISO8859-15 iso8859-1/Compose: es_SV.ISO8859-1 iso8859-15/Compose: es_SV.ISO8859-15 iso8859-1/Compose: es_US.ISO8859-1 iso8859-1/Compose: es_UY.ISO8859-1 iso8859-15/Compose: es_UY.ISO8859-15 iso8859-1/Compose: es_VE.ISO8859-1 iso8859-15/Compose: es_VE.ISO8859-15 iso8859-1/Compose: et_EE.ISO8859-1 iso8859-4/Compose: et_EE.ISO8859-4 iso8859-13/Compose: et_EE.ISO8859-13 iso8859-15/Compose: et_EE.ISO8859-15 iso8859-1/Compose: eu_ES.ISO8859-1 iso8859-15/Compose: eu_ES.ISO8859-15 isiri-3342/Compose: fa_IR.ISIRI-3342 iso8859-1/Compose: fi_FI.ISO8859-1 iso8859-15/Compose: fi_FI.ISO8859-15 iso8859-1/Compose: fo_FO.ISO8859-1 iso8859-15/Compose: fo_FO.ISO8859-15 iso8859-1/Compose: fr_BE.ISO8859-1 iso8859-15/Compose: fr_BE.ISO8859-15 iso8859-1/Compose: fr_CA.ISO8859-1 iso8859-15/Compose: fr_CA.ISO8859-15 iso8859-1/Compose: fr_CH.ISO8859-1 iso8859-15/Compose: fr_CH.ISO8859-15 iso8859-1/Compose: fr_FR.ISO8859-1 iso8859-15/Compose: fr_FR.ISO8859-15 iso8859-1/Compose: fr_LU.ISO8859-1 iso8859-15/Compose: fr_LU.ISO8859-15 iso8859-1/Compose: ga_IE.ISO8859-1 iso8859-14/Compose: ga_IE.ISO8859-14 iso8859-15/Compose: ga_IE.ISO8859-15 iso8859-1/Compose: gd_GB.ISO8859-1 iso8859-14/Compose: gd_GB.ISO8859-14 iso8859-15/Compose: gd_GB.ISO8859-15 iso8859-1/Compose: gl_ES.ISO8859-1 iso8859-15/Compose: gl_ES.ISO8859-15 iso8859-1/Compose: gv_GB.ISO8859-1 iso8859-14/Compose: gv_GB.ISO8859-14 iso8859-15/Compose: gv_GB.ISO8859-15 iso8859-8/Compose: he_IL.ISO8859-8 microsoft-cp1255/Compose: he_IL.CP1255 iscii-dev/Compose: hi_IN.ISCII-DEV iso8859-2/Compose: hr_HR.ISO8859-2 iso8859-2/Compose: hu_HU.ISO8859-2 armscii-8/Compose: hy_AM.ARMSCII-8 iso8859-1/Compose: id_ID.ISO8859-1 iso8859-15/Compose: id_ID.ISO8859-15 iso8859-1/Compose: is_IS.ISO8859-1 iso8859-15/Compose: is_IS.ISO8859-15 iso8859-1/Compose: it_CH.ISO8859-1 iso8859-15/Compose: it_CH.ISO8859-15 iso8859-1/Compose: it_IT.ISO8859-1 iso8859-15/Compose: it_IT.ISO8859-15 ja/Compose: ja_JP.eucJP ja.SJIS/Compose: ja_JP.SJIS ja.JIS/Compose: ja_JP.JIS7 georgian-academy/Compose: ka_GE.GEORGIAN-ACADEMY georgian-ps/Compose: ka_GE.GEORGIAN-PS iso8859-1/Compose: kl_GL.ISO8859-1 iso8859-15/Compose: kl_GL.ISO8859-15 iso8859-1/Compose: kw_GB.ISO8859-1 iso8859-14/Compose: kw_GB.ISO8859-14 iso8859-15/Compose: kw_GB.ISO8859-15 ko/Compose: ko_KR.eucKR ibm-cp1133/Compose: lo_LA.IBM-CP1133 mulelao-1/Compose: lo_LA.MULELAO-1 iso8859-4/Compose: lt_LT.ISO8859-4 iso8859-13/Compose: lt_LT.ISO8859-13 iso8859-4/Compose: lv_LV.ISO8859-4 iso8859-13/Compose: lv_LV.ISO8859-13 iso8859-13/Compose: mi_NZ.ISO8859-13 iso8859-5/Compose: mk_MK.ISO8859-5 microsoft-cp1251/Compose: mk_MK.CP1251 iso8859-1/Compose: ms_MY.ISO8859-1 iso8859-3/Compose: mt_MT.ISO8859-3 iso8859-1/Compose: nl_BE.ISO8859-1 iso8859-15/Compose: nl_BE.ISO8859-15 iso8859-1/Compose: nl_NL.ISO8859-1 iso8859-15/Compose: nl_NL.ISO8859-15 iso8859-1/Compose: no_NO.ISO8859-1 iso8859-15/Compose: no_NO.ISO8859-15 iso8859-1/Compose: nb_NO.ISO8859-1 iso8859-15/Compose: nb_NO.ISO8859-15 iso8859-1/Compose: nn_NO.ISO8859-1 iso8859-15/Compose: nn_NO.ISO8859-15 iso8859-1/Compose: nr_ZA.ISO8859-1 iso8859-15/Compose: nso_ZA.ISO8859-15 iso8859-1/Compose: ny_NO.ISO8859-1 iso8859-15/Compose: ny_NO.ISO8859-15 iso8859-1/Compose: oc_FR.ISO8859-1 iso8859-15/Compose: oc_FR.ISO8859-15 iso8859-1/Compose: pd_DE.ISO8859-1 iso8859-15/Compose: pd_DE.ISO8859-15 iso8859-1/Compose: pd_US.ISO8859-1 iso8859-15/Compose: pd_US.ISO8859-15 iso8859-1/Compose: ph_PH.ISO8859-1 iso8859-2/Compose: pl_PL.ISO8859-2 iso8859-1/Compose: pp_AN.ISO8859-1 iso8859-1/Compose: pt_BR.ISO8859-1 iso8859-15/Compose: pt_BR.ISO8859-15 iso8859-1/Compose: pt_PT.ISO8859-1 iso8859-15/Compose: pt_PT.ISO8859-15 iso8859-2/Compose: ro_RO.ISO8859-2 koi8-r/Compose: ru_RU.KOI8-R iso8859-5/Compose: ru_RU.ISO8859-5 microsoft-cp1251/Compose: ru_RU.CP1251 microsoft-cp1251/Compose: ru_UA.CP1251 koi8-u/Compose: ru_UA.KOI8-U iso8859-1/Compose: rw_RW.ISO8859-1 iso8859-2/Compose: sh_YU.ISO8859-2 iso8859-2/Compose: sk_SK.ISO8859-2 iso8859-2/Compose: sl_SI.ISO8859-2 iso8859-2/Compose: sq_AL.ISO8859-2 iso8859-2/Compose: sr_CS.ISO8859-2 iso8859-5/Compose: sr_CS.ISO8859-5 iso8859-2/Compose: sr_YU.ISO8859-2 microsoft-cp1251/Compose: sr_YU.CP1251 iso8859-5/Compose: sr_YU.ISO8859-5 iso8859-1/Compose: ss_ZA.ISO8859-1 iso8859-1/Compose: st_ZA.ISO8859-1 iso8859-1/Compose: sv_FI.ISO8859-1 iso8859-15/Compose: sv_FI.ISO8859-15 iso8859-1/Compose: sv_SE.ISO8859-1 iso8859-15/Compose: sv_SE.ISO8859-15 tscii-0/Compose: ta_IN.TSCII-0 koi8-c/Compose: tg_TJ.KOI8-C iso8859-1/Compose: tl_PH.ISO8859-1 iso8859-11/Compose: th_TH.ISO8859-11 th_TH/Compose: th_TH.TIS620 iso8859-15/Compose: tn_ZA.ISO8859-15 iso8859-9/Compose: tr_TR.ISO8859-9 iso8859-1/Compose: ts_ZA.ISO8859-1 tatar-cyr/Compose: tt_RU.TATAR-CYR microsoft-cp1251/Compose: uk_UA.CP1251 koi8-c/Compose: tt_RU.KOI8-C koi8-u/Compose: uk_UA.KOI8-U iso8859-5/Compose: uk_UA.ISO8859-5 microsoft-cp1256/Compose: ur_PK.CP1256 iso8859-1/Compose: uz_UZ.ISO8859-1 vi_VN.viscii/Compose: vi_VN.VISCII vi_VN.tcvn/Compose: vi_VN.TCVN iso8859-1/Compose: wa_BE.ISO8859-1 iso8859-15/Compose: wa_BE.ISO8859-15 iso8859-1/Compose: xh_ZA.ISO8859-1 microsoft-cp1255/Compose: yi_US.CP1255 zh_CN/Compose: zh_CN.eucCN zh_CN/Compose: zh_CN.gb2312 zh_CN.gbk/Compose: zh_CN.gbk zh_CN.gb18030/Compose: zh_CN.gb18030 zh_HK.big5/Compose: zh_HK.big5 zh_HK.big5hkscs/Compose: zh_HK.big5hkscs zh_TW.big5/Compose: zh_TW.big5 zh_TW/Compose: zh_TW.eucTW iso8859-1/Compose: zu_ZA.ISO8859-1 XCOMM XCOMM en_US.UTF-8/Compose: af_ZA.UTF-8 am_ET.UTF-8/Compose: am_ET.UTF-8 en_US.UTF-8/Compose: ar_AA.UTF-8 en_US.UTF-8/Compose: ar_AE.UTF-8 en_US.UTF-8/Compose: ar_BH.UTF-8 en_US.UTF-8/Compose: ar_DZ.UTF-8 en_US.UTF-8/Compose: ar_EG.UTF-8 en_US.UTF-8/Compose: ar_IN.UTF-8 en_US.UTF-8/Compose: ar_IQ.UTF-8 en_US.UTF-8/Compose: ar_JO.UTF-8 en_US.UTF-8/Compose: ar_KW.UTF-8 en_US.UTF-8/Compose: ar_LB.UTF-8 en_US.UTF-8/Compose: ar_LY.UTF-8 en_US.UTF-8/Compose: ar_MA.UTF-8 en_US.UTF-8/Compose: ar_OM.UTF-8 en_US.UTF-8/Compose: ar_QA.UTF-8 en_US.UTF-8/Compose: ar_SA.UTF-8 en_US.UTF-8/Compose: ar_SD.UTF-8 en_US.UTF-8/Compose: ar_SY.UTF-8 en_US.UTF-8/Compose: ar_TN.UTF-8 en_US.UTF-8/Compose: ar_YE.UTF-8 en_US.UTF-8/Compose: as_IN.UTF-8 en_US.UTF-8/Compose: az_AZ.UTF-8 en_US.UTF-8/Compose: be_BY.UTF-8 en_US.UTF-8/Compose: bg_BG.UTF-8 en_US.UTF-8/Compose: bn_BD.UTF-8 en_US.UTF-8/Compose: bn_IN.UTF-8 en_US.UTF-8/Compose: bo_IN.UTF-8 en_US.UTF-8/Compose: br_FR.UTF-8 en_US.UTF-8/Compose: bs_BA.UTF-8 en_US.UTF-8/Compose: ca_AD.UTF-8 en_US.UTF-8/Compose: ca_ES.UTF-8 en_US.UTF-8/Compose: ca_FR.UTF-8 en_US.UTF-8/Compose: ca_IT.UTF-8 en_US.UTF-8/Compose: cs_CZ.UTF-8 en_US.UTF-8/Compose: cy_GB.UTF-8 en_US.UTF-8/Compose: da_DK.UTF-8 en_US.UTF-8/Compose: de_AT.UTF-8 en_US.UTF-8/Compose: de_BE.UTF-8 en_US.UTF-8/Compose: de_CH.UTF-8 en_US.UTF-8/Compose: de_DE.UTF-8 en_US.UTF-8/Compose: de_LI.UTF-8 en_US.UTF-8/Compose: de_LU.UTF-8 el_GR.UTF-8/Compose: el_CY.UTF-8 el_GR.UTF-8/Compose: el_GR.UTF-8 en_US.UTF-8/Compose: en_AU.UTF-8 en_US.UTF-8/Compose: en_BE.UTF-8 en_US.UTF-8/Compose: en_BW.UTF-8 en_US.UTF-8/Compose: en_BZ.UTF-8 en_US.UTF-8/Compose: en_CA.UTF-8 en_US.UTF-8/Compose: en_DK.UTF-8 en_US.UTF-8/Compose: en_EN.UTF-8 en_US.UTF-8/Compose: en_GB.UTF-8 en_US.UTF-8/Compose: en_HK.UTF-8 en_US.UTF-8/Compose: en_IE.UTF-8 en_US.UTF-8/Compose: en_IN.UTF-8 en_US.UTF-8/Compose: en_JM.UTF-8 en_US.UTF-8/Compose: en_MT.UTF-8 en_US.UTF-8/Compose: en_NZ.UTF-8 en_US.UTF-8/Compose: en_PH.UTF-8 en_US.UTF-8/Compose: en_SG.UTF-8 en_US.UTF-8/Compose: en_TT.UTF-8 en_US.UTF-8/Compose: en_UK.UTF-8 en_US.UTF-8/Compose: en_US.UTF-8 en_US.UTF-8/Compose: en_ZA.UTF-8 en_US.UTF-8/Compose: en_ZW.UTF-8 en_US.UTF-8/Compose: eo_EO.UTF-8 en_US.UTF-8/Compose: eo_XX.UTF-8 en_US.UTF-8/Compose: es_AR.UTF-8 en_US.UTF-8/Compose: es_BO.UTF-8 en_US.UTF-8/Compose: es_CL.UTF-8 en_US.UTF-8/Compose: es_CO.UTF-8 en_US.UTF-8/Compose: es_CR.UTF-8 en_US.UTF-8/Compose: es_DO.UTF-8 en_US.UTF-8/Compose: es_EC.UTF-8 en_US.UTF-8/Compose: es_ES.UTF-8 en_US.UTF-8/Compose: es_GT.UTF-8 en_US.UTF-8/Compose: es_HN.UTF-8 en_US.UTF-8/Compose: es_MX.UTF-8 en_US.UTF-8/Compose: es_NI.UTF-8 en_US.UTF-8/Compose: es_PA.UTF-8 en_US.UTF-8/Compose: es_PE.UTF-8 en_US.UTF-8/Compose: es_PR.UTF-8 en_US.UTF-8/Compose: es_PY.UTF-8 en_US.UTF-8/Compose: es_SV.UTF-8 en_US.UTF-8/Compose: es_US.UTF-8 en_US.UTF-8/Compose: es_UY.UTF-8 en_US.UTF-8/Compose: es_VE.UTF-8 en_US.UTF-8/Compose: et_EE.UTF-8 en_US.UTF-8/Compose: eu_ES.UTF-8 en_US.UTF-8/Compose: fa_IR.UTF-8 fi_FI.UTF-8/Compose: fi_FI.UTF-8 en_US.UTF-8/Compose: fo_FO.UTF-8 en_US.UTF-8/Compose: fr_BE.UTF-8 en_US.UTF-8/Compose: fr_CA.UTF-8 en_US.UTF-8/Compose: fr_CH.UTF-8 en_US.UTF-8/Compose: fr_FR.UTF-8 en_US.UTF-8/Compose: fr_LU.UTF-8 en_US.UTF-8/Compose: ga_IE.UTF-8 en_US.UTF-8/Compose: gd_GB.UTF-8 en_US.UTF-8/Compose: gl_ES.UTF-8 en_US.UTF-8/Compose: gu_IN.UTF-8 en_US.UTF-8/Compose: gv_GB.UTF-8 en_US.UTF-8/Compose: he_IL.UTF-8 en_US.UTF-8/Compose: hi_IN.UTF-8 en_US.UTF-8/Compose: hne_IN.UTF-8 en_US.UTF-8/Compose: hr_HR.UTF-8 en_US.UTF-8/Compose: hu_HU.UTF-8 en_US.UTF-8/Compose: hy_AM.UTF-8 en_US.UTF-8/Compose: id_ID.UTF-8 en_US.UTF-8/Compose: is_IS.UTF-8 en_US.UTF-8/Compose: it_CH.UTF-8 en_US.UTF-8/Compose: it_IT.UTF-8 en_US.UTF-8/Compose: iu_CA.UTF-8 ja_JP.UTF-8/Compose: ja_JP.UTF-8 en_US.UTF-8/Compose: ka_GE.UTF-8 en_US.UTF-8/Compose: kk_KZ.UTF-8 en_US.UTF-8/Compose: kl_GL.UTF-8 km_KH.UTF-8/Compose: km_KH.UTF-8 en_US.UTF-8/Compose: kn_IN.UTF-8 ko_KR.UTF-8/Compose: ko_KR.UTF-8 en_US.UTF-8/Compose: ks_IN.UTF-8 en_US.UTF-8/Compose: ks_IN@devanagari.UTF-8 en_US.UTF-8/Compose: ku_TR.UTF-8 en_US.UTF-8/Compose: kw_GB.UTF-8 en_US.UTF-8/Compose: ky_KG.UTF-8 en_US.UTF-8/Compose: lo_LA.UTF-8 en_US.UTF-8/Compose: lt_LT.UTF-8 en_US.UTF-8/Compose: lv_LV.UTF-8 en_US.UTF-8/Compose: mai_IN.UTF-8 en_US.UTF-8/Compose: mi_NZ.UTF-8 en_US.UTF-8/Compose: mk_MK.UTF-8 en_US.UTF-8/Compose: ml_IN.UTF-8 en_US.UTF-8/Compose: mr_IN.UTF-8 en_US.UTF-8/Compose: ms_MY.UTF-8 en_US.UTF-8/Compose: mt_MT.UTF-8 en_US.UTF-8/Compose: ne_NP.UTF-8 en_US.UTF-8/Compose: nl_BE.UTF-8 en_US.UTF-8/Compose: nl_NL.UTF-8 en_US.UTF-8/Compose: nn_NO.UTF-8 en_US.UTF-8/Compose: no_NO.UTF-8 en_US.UTF-8/Compose: nb_NO.UTF-8 en_US.UTF-8/Compose: nr_ZA.UTF-8 en_US.UTF-8/Compose: nso_ZA.UTF-8 en_US.UTF-8/Compose: ny_NO.UTF-8 en_US.UTF-8/Compose: oc_FR.UTF-8 en_US.UTF-8/Compose: or_IN.UTF-8 en_US.UTF-8/Compose: pa_IN.UTF-8 en_US.UTF-8/Compose: pa_PK.UTF-8 en_US.UTF-8/Compose: pd_DE.UTF-8 en_US.UTF-8/Compose: pd_US.UTF-8 en_US.UTF-8/Compose: ph_PH.UTF-8 en_US.UTF-8/Compose: pl_PL.UTF-8 en_US.UTF-8/Compose: pp_AN.UTF-8 pt_BR.UTF-8/Compose: pt_BR.UTF-8 en_US.UTF-8/Compose: pt_PT.UTF-8 en_US.UTF-8/Compose: ro_RO.UTF-8 ru_RU.UTF-8/Compose: ru_RU.UTF-8 en_US.UTF-8/Compose: ru_UA.UTF-8 en_US.UTF-8/Compose: rw_RW.UTF-8 en_US.UTF-8/Compose: sa_IN.UTF-8 en_US.UTF-8/Compose: sd_IN.UTF-8 en_US.UTF-8/Compose: sd_IN@devanagari.UTF-8 en_US.UTF-8/Compose: se_NO.UTF-8 en_US.UTF-8/Compose: sh_BA.UTF-8 en_US.UTF-8/Compose: sh_YU.UTF-8 en_US.UTF-8/Compose: si_LK.UTF-8 en_US.UTF-8/Compose: sk_SK.UTF-8 en_US.UTF-8/Compose: sl_SI.UTF-8 en_US.UTF-8/Compose: sq_AL.UTF-8 sr_CS.UTF-8/Compose: sr_CS.UTF-8 en_US.UTF-8/Compose: sr_ME.UTF-8 en_US.UTF-8/Compose: sr_RS.UTF-8 en_US.UTF-8/Compose: sr_YU.UTF-8 en_US.UTF-8/Compose: ss_ZA.UTF-8 en_US.UTF-8/Compose: st_ZA.UTF-8 en_US.UTF-8/Compose: sv_FI.UTF-8 en_US.UTF-8/Compose: sv_SE.UTF-8 en_US.UTF-8/Compose: ta_IN.UTF-8 en_US.UTF-8/Compose: te_IN.UTF-8 en_US.UTF-8/Compose: tg_TJ.UTF-8 th_TH.UTF-8/Compose: th_TH.UTF-8 en_US.UTF-8/Compose: ti_ER.UTF-8 en_US.UTF-8/Compose: ti_ET.UTF-8 en_US.UTF-8/Compose: tl_PH.UTF-8 en_US.UTF-8/Compose: tn_ZA.UTF-8 en_US.UTF-8/Compose: tr_TR.UTF-8 en_US.UTF-8/Compose: ts_ZA.UTF-8 en_US.UTF-8/Compose: tt_RU.UTF-8 en_US.UTF-8/Compose: uk_UA.UTF-8 en_US.UTF-8/Compose: ur_IN.UTF-8 en_US.UTF-8/Compose: ur_PK.UTF-8 en_US.UTF-8/Compose: uz_UZ.UTF-8 en_US.UTF-8/Compose: ve_ZA.UTF-8 en_US.UTF-8/Compose: vi_VN.UTF-8 en_US.UTF-8/Compose: wa_BE.UTF-8 en_US.UTF-8/Compose: xh_ZA.UTF-8 en_US.UTF-8/Compose: yi_US.UTF-8 zh_CN.UTF-8/Compose: zh_CN.UTF-8 zh_HK.UTF-8/Compose: zh_HK.UTF-8 en_US.UTF-8/Compose: zh_SG.UTF-8 zh_TW.UTF-8/Compose: zh_TW.UTF-8 en_US.UTF-8/Compose: zu_ZA.UTF-8 so8859-15/Compose: kw_GB.ISO8859-15 ko/Compose: ko_KR.eucKR ibm-cp1133/Compose: lo_LA.IBM-CP1133 mulelao-1/Compose: lo_LA.MULELAO-1 iso8859-4/Compose: lt_LT.ISO8859-4 iso8859-13/Compose: lt_LT.ISO8859-13 iso8859-4/Compose: lv_LV.ISO8859-4 iso8859-13/Compose: lv_LV.ISO8859-13 iso8859-13/Compose: mi_NZlibX11-1.6.3/nls/Makefile.in000064401431060000012000001024341247741725500157250ustar00alancstaff00002660200006# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # -*- Makefile -*- # Rules for generating files using the C pre-processor # (Replaces CppFileTarget from Imake) VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = nls ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_define_dir.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(nobase_dist_x11locale_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h \ $(top_builddir)/include/X11/XlibConf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(x11localedir)" \ "$(DESTDIR)$(x11localedir)" "$(DESTDIR)$(x11localedir)" DATA = $(nobase_dist_x11locale_DATA) $(nobase_x11locale_DATA) \ $(x11locale_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/cpprules.in \ $(top_srcdir)/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASE_CFLAGS = @BASE_CFLAGS@ BIGFONT_CFLAGS = @BIGFONT_CFLAGS@ BIGFONT_LIBS = @BIGFONT_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHANGELOG_CMD = @CHANGELOG_CMD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ FOP = @FOP@ GREP = @GREP@ I18N_MODULE_LIBS = @I18N_MODULE_LIBS@ INSTALL = @INSTALL@ INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ KEYSYMDEFS = @KEYSYMDEFS@ LAUNCHD = @LAUNCHD@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LINT = @LINT@ LINTLIB = @LINTLIB@ LINT_FLAGS = @LINT_FLAGS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MALLOC_ZERO_CFLAGS = @MALLOC_ZERO_CFLAGS@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_SUBSTS = @MAN_SUBSTS@ MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RAWCPP = @RAWCPP@ RAWCPPFLAGS = @RAWCPPFLAGS@ SED = LC_CTYPE=C sed SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRICT_CFLAGS = @STRICT_CFLAGS@ STRIP = @STRIP@ STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ TRADITIONALCPPFLAGS = @TRADITIONALCPPFLAGS@ VERSION = @VERSION@ WCHAR32 = @WCHAR32@ X11_CFLAGS = @X11_CFLAGS@ X11_DATADIR = @X11_DATADIR@ X11_EXTRA_DEPS = @X11_EXTRA_DEPS@ X11_LIBDIR = @X11_LIBDIR@ X11_LIBS = @X11_LIBS@ X11_LOCALEDATADIR = @X11_LOCALEDATADIR@ X11_LOCALEDIR = @X11_LOCALEDIR@ X11_LOCALELIBDIR = @X11_LOCALELIBDIR@ XERRORDB = @XERRORDB@ XKBPROTO_REQUIRES = @XKBPROTO_REQUIRES@ XKEYSYMDB = @XKEYSYMDB@ XLOCALEDATADIR = @XLOCALEDATADIR@ XLOCALEDIR = @XLOCALEDIR@ XLOCALELIBDIR = @XLOCALELIBDIR@ XMALLOC_ZERO_CFLAGS = @XMALLOC_ZERO_CFLAGS@ XMLTO = @XMLTO@ XORG_MAN_PAGE = @XORG_MAN_PAGE@ XORG_SGML_PATH = @XORG_SGML_PATH@ XSLTPROC = @XSLTPROC@ XSL_STYLESHEET = @XSL_STYLESHEET@ XTHREADLIB = @XTHREADLIB@ XTHREAD_CFLAGS = @XTHREAD_CFLAGS@ XTMALLOC_ZERO_CFLAGS = @XTMALLOC_ZERO_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ locales = @locales@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ x11localedir = $(X11_LOCALEDATADIR) CLEANFILES = locale.alias locale.alias.l1 locale.alias.l2 compose.dir \ compose.dir.l1 compose.dir.l2 locale.dir locale.dir.l1 \ locale.dir.l2 XLC_LOCALE $(nobase_x11locale_DATA) SUFFIXES = .pre EXTRA_DIST = locale.alias.pre compose.dir.pre locale.dir.pre \ compose-check.pl $(nobase_x11locale_DATA:%=%.pre) x11locale_DATA = locale.alias locale.dir compose.dir WCHAR32_FLAGS = -DWCHAR32=@WCHAR32@ CPP_FILES_FLAGS = $(WCHAR32_FLAGS) # Translate XCOMM into pound sign with sed, rather than passing -DXCOMM=XCOMM # to cpp, because that trick does not work on all ANSI C preprocessors. # Delete line numbers from the cpp output (-P is not portable, I guess). # Allow XCOMM to be preceded by whitespace and provide a means of generating # output lines with trailing backslashes. # Allow XHASH to always be substituted, even in cases where XCOMM isn't. CPP_SED_MAGIC = $(SED) -e '/^\# *[0-9][0-9]* *.*$$/d' \ -e '/^\#line *[0-9][0-9]* *.*$$/d' \ -e '/^[ ]*XCOMM$$/s/XCOMM/\#/' \ -e '/^[ ]*XCOMM[^a-zA-Z0-9_]/s/XCOMM/\#/' \ -e '/^[ ]*XHASH/s/XHASH/\#/' \ -e 's,X11_LOCALEDATADIR,$(X11_LOCALEDATADIR),g' \ -e '/\@\@$$/s/\@\@$$/\\/' @HAVE_PERL_TRUE@LOG_COMPILER = $(PERL) @HAVE_PERL_TRUE@TESTS = compose-check.pl # Per-locale data files nobase_dist_x11locale_DATA = $(locales:%=%/XI18N_OBJS) nobase_x11locale_DATA = $(locales:%=%/XLC_LOCALE) $(locales:%=%/Compose) all: all-am .SUFFIXES: .SUFFIXES: .pre .log .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/cpprules.in $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign nls/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign nls/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/cpprules.in $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-nobase_dist_x11localeDATA: $(nobase_dist_x11locale_DATA) @$(NORMAL_INSTALL) @list='$(nobase_dist_x11locale_DATA)'; test -n "$(x11localedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(x11localedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(x11localedir)" || exit 1; \ fi; \ $(am__nobase_list) | while read dir files; do \ xfiles=; for file in $$files; do \ if test -f "$$file"; then xfiles="$$xfiles $$file"; \ else xfiles="$$xfiles $(srcdir)/$$file"; fi; done; \ test -z "$$xfiles" || { \ test "x$$dir" = x. || { \ echo " $(MKDIR_P) '$(DESTDIR)$(x11localedir)/$$dir'"; \ $(MKDIR_P) "$(DESTDIR)$(x11localedir)/$$dir"; }; \ echo " $(INSTALL_DATA) $$xfiles '$(DESTDIR)$(x11localedir)/$$dir'"; \ $(INSTALL_DATA) $$xfiles "$(DESTDIR)$(x11localedir)/$$dir" || exit $$?; }; \ done uninstall-nobase_dist_x11localeDATA: @$(NORMAL_UNINSTALL) @list='$(nobase_dist_x11locale_DATA)'; test -n "$(x11localedir)" || list=; \ $(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \ dir='$(DESTDIR)$(x11localedir)'; $(am__uninstall_files_from_dir) install-nobase_x11localeDATA: $(nobase_x11locale_DATA) @$(NORMAL_INSTALL) @list='$(nobase_x11locale_DATA)'; test -n "$(x11localedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(x11localedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(x11localedir)" || exit 1; \ fi; \ $(am__nobase_list) | while read dir files; do \ xfiles=; for file in $$files; do \ if test -f "$$file"; then xfiles="$$xfiles $$file"; \ else xfiles="$$xfiles $(srcdir)/$$file"; fi; done; \ test -z "$$xfiles" || { \ test "x$$dir" = x. || { \ echo " $(MKDIR_P) '$(DESTDIR)$(x11localedir)/$$dir'"; \ $(MKDIR_P) "$(DESTDIR)$(x11localedir)/$$dir"; }; \ echo " $(INSTALL_DATA) $$xfiles '$(DESTDIR)$(x11localedir)/$$dir'"; \ $(INSTALL_DATA) $$xfiles "$(DESTDIR)$(x11localedir)/$$dir" || exit $$?; }; \ done uninstall-nobase_x11localeDATA: @$(NORMAL_UNINSTALL) @list='$(nobase_x11locale_DATA)'; test -n "$(x11localedir)" || list=; \ $(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \ dir='$(DESTDIR)$(x11localedir)'; $(am__uninstall_files_from_dir) install-x11localeDATA: $(x11locale_DATA) @$(NORMAL_INSTALL) @list='$(x11locale_DATA)'; test -n "$(x11localedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(x11localedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(x11localedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(x11localedir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(x11localedir)" || exit $$?; \ done uninstall-x11localeDATA: @$(NORMAL_UNINSTALL) @list='$(x11locale_DATA)'; test -n "$(x11localedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(x11localedir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? compose-check.pl.log: compose-check.pl @p='compose-check.pl'; \ b='compose-check.pl'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(x11localedir)" "$(DESTDIR)$(x11localedir)" "$(DESTDIR)$(x11localedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-nobase_dist_x11localeDATA \ install-nobase_x11localeDATA install-x11localeDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-nobase_dist_x11localeDATA \ uninstall-nobase_x11localeDATA uninstall-x11localeDATA .MAKE: check-am install-am install-strip .PHONY: all all-am check check-TESTS check-am clean clean-generic \ clean-libtool cscopelist-am ctags-am distclean \ distclean-generic distclean-libtool distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-nobase_dist_x11localeDATA \ install-nobase_x11localeDATA install-pdf install-pdf-am \ install-ps install-ps-am install-strip install-x11localeDATA \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am recheck tags-am \ uninstall uninstall-am uninstall-nobase_dist_x11localeDATA \ uninstall-nobase_x11localeDATA uninstall-x11localeDATA .PRECIOUS: Makefile .pre: @$(MKDIR_P) $(@D) $(AM_V_GEN)$(RAWCPP) $(RAWCPPFLAGS) $(CPP_FILES_FLAGS) < $< | $(CPP_SED_MAGIC) > $@ # Global data files locale.alias: locale.alias.pre $(AM_V_GEN)$(RAWCPP) $(RAWCPPFLAGS) $(CPP_FILES_FLAGS) < $(srcdir)/locale.alias.pre | $(CPP_SED_MAGIC) > locale.alias.l1 $(SED) -e '/^[^#][^ ]*:/s/://' -e '/^[^#].*[ ].*:/d' \ < locale.alias.l1 > locale.alias.l2 cat locale.alias.l2 locale.alias.l1 > locale.alias compose.dir: compose.dir.pre $(AM_V_GEN)$(RAWCPP) $(RAWCPPFLAGS) $(CPP_FILES_FLAGS) < $(srcdir)/compose.dir.pre | $(CPP_SED_MAGIC) > compose.dir.l1 $(SED) -e '/^[^#][^ ]*:/s/://' -e '/^[^#].*[ ].*:/d' \ < compose.dir.l1 > compose.dir.l2 cat compose.dir.l2 compose.dir.l1 > compose.dir locale.dir: locale.dir.pre $(AM_V_GEN)$(RAWCPP) $(RAWCPPFLAGS) $(CPP_FILES_FLAGS) < $(srcdir)/locale.dir.pre | $(CPP_SED_MAGIC) > locale.dir.l1 $(SED) -e '/^[^#][^ ]*:/s/://' -e '/^[^#].*[ ].*:/d' \ < locale.dir.l1 > locale.dir.l2 cat locale.dir.l2 locale.dir.l1 > locale.dir # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: esult:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$resultslibX11-1.6.3/nls/iso8859-7/XLC_LOCALE.pre000064401431060000012000000016521247741723500173270ustar00alancstaff00002660200006XCOMM XLocale Database Sample for iso8859-7. XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class fs0 { charset { name ISO8859-1:GL } font { primary ISO8859-7:GL substitute ISO8859-1:GL vertical_rotate all } } XCOMM fs1 class fs1 { charset { name ISO8859-7:GR } font { primary ISO8859-7:GR } } END XLC_FONTSET XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name ISO8859-7 mb_cur_max 1 state_depend_encoding False #if WCHAR32 wc_encoding_mask \x30000000 wc_shift_bits 7 #else wc_encoding_mask \x00008080 wc_shift_bits 8 #endif use_stdc_env True force_convert_to_mb True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding ISO8859-7:GL; ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 #if WCHAR32 wc_encoding \x30000000 #else wc_encoding \x00008080 #endif ct_encoding ISO8859-7:GR } END XLC_XLOCALE libX11-1.6.3/nls/iso8859-7/XI18N_OBJS000064401431060000012000000003701247741723500165150ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for euro locales # XLC common/xlibi18n _XlcGenericLoader # XLC_open XIM common/xiiimp _XimpLocalOpenIM # XIM_open XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/iso8859-7/Compose.pre000064401431060000012000000247651247741723500173010ustar00alancstaff00002660200006XCOMM XCOMM ISO 8859-7 (Greek) Compose Sequence XCOMM XCOMM XCOMM XCOMM Sequence Definition XCOMM XCOMM Means XCOMM Special Character : "#" numbersign : "'" apostrophe : "'" apostrophe : "@" at : "[" bracketleft : "\\" backslash : "\\" backslash : "\\" backslash : "]" bracketright : "^" asciicircum : "^" asciicircum : "^" asciicircum : "^" asciicircum : "`" grave : "`" grave : "{" braceleft : "{" braceleft : "|" bar : "|" bar : "|" bar : "|" bar : "|" bar : "|" bar : "}" braceright : "}" braceright : "~" asciitilde : "~" asciitilde : "~" asciitilde : "~" asciitilde : "\243" sterling : "\243" sterling : "\243" sterling : "\243" sterling : "\243" sterling : "\243" sterling : "\243" sterling : "\243" sterling : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section <0> : "\247" section <0> : "\247" section <0> : "\247" section <0> : "\247" section : "\251" copyright : "\251" copyright : "\251" copyright : "\251" copyright : "\251" copyright : "\251" copyright : "\251" copyright : "\251" copyright <0> : "\251" copyright <0> : "\251" copyright <0> : "\251" copyright <0> : "\251" copyright : "\251" copyright : "\253" guillemotleft : "\273" guillemotright <0> : "\260" degree <0> : "\260" degree <0> : "\260" degree <0> : "\260" degree : "\261" plusminus : "\261" plusminus <2> : "\262" twosuperior <2> : "\262" twosuperior <2> : "\262" twosuperior <2> : "\262" twosuperior <2> : "\262" twosuperior <2> : "\262" twosuperior <3> : "\263" threesuperior <3> : "\263" threesuperior <3> : "\263" threesuperior <3> : "\263" threesuperior <3> : "\263" threesuperior <3> : "\263" threesuperior : "\267" periodcentered : "\267" periodcentered : "\267" periodcentered <1> <2> : "\275" onehalf : "\240" nobreakspace : "\246" brokenbar : "\246" brokenbar : "\246" brokenbar : "\246" brokenbar : "\246" brokenbar : "\246" brokenbar : "\246" brokenbar : "\254" notsign : "\254" notsign : "\255" hyphen XCOMM should be Greek tonos but not defined in X11 : "\264" acute XCOMM should be Greek dialytika but not defined in X11 : "\250" diaeresis XCOMM special characters that don't exist in Latin-1 : "\241" leftsinglequotemark : "\241" leftsinglequotemark : "\242" rightsinglequotemark : "\242" rightsinglequotemark : "\257" Greek_horizbar XCOMM Accented Alphabet : "\266" Greek_ALPHAaccent : "\266" Greek_ALPHAaccent : "\270" Greek_EPSILONaccent : "\270" Greek_EPSILONaccent : "\271" Greek_ETAaccent : "\271" Greek_ETAaccent : "\272" Greek_IOTAaccent : "\272" Greek_IOTAaccent : "\274" Greek_OMICRONaccent : "\274" Greek_OMICRONaccent : "\276" Greek_UPSILONaccent : "\276" Greek_UPSILONaccent : "\277" Greek_OMEGAaccent : "\277" Greek_OMEGAaccent : "\332" Greek_IOTAdieresis : "\332" Greek_IOTAdieresis : "\333" Greek_UPSILONdieresis : "\333" Greek_UPSILONdieresis : "\334" Greek_alphaaccent : "\334" Greek_alphaaccent : "\335" Greek_epsilonaccent : "\335" Greek_epsilonaccent : "\336" Greek_etaaccent : "\336" Greek_etaaccent : "\337" Greek_iotaaccent : "\337" Greek_iotaaccent : "\374" Greek_omicronaccent : "\374" Greek_omicronaccent : "\375" Greek_upsilonaccent : "\375" Greek_upsilonaccent : "\376" Greek_omegaaccent : "\376" Greek_omegaaccent : "\372" Greek_iotadieresis : "\372" Greek_iotadieresis : "\373" Greek_upsilondieresis : "\373" Greek_upsilondieresis : "\300" Greek_iotaaccentdieresis : "\300" Greek_iotaaccentdieresis : "\340" Greek_upsilonaccentdieresis : "\340" Greek_upsilonaccentdieresis : "\265" Greek_accentdieresis : "\265" Greek_accentdieresis XCOMM XCOMM XCOMM dead key accent keysyms XCOMM Special Character : "|" bar : "`" grave : "\250" diaeresis : "^" asciicircum : "~" asciitilde : "\"" quotedbl : "\260" degree : "\260" degree <0> : "\260" degree <2> : "\262" twosuperior <3> : "\263" threesuperior : "\267" periodcentered : "\246" brokenbar : "\254" notsign : "\264" acute : "\250" diaeresis XCOMM Accented Alphabet (plus some more symbols) : "\334" Greek_alphaaccent : "\335" Greek_epsilonaccent : "\336" Greek_etaaccent : "\337" Greek_iotaaccent : "\374" Greek_omicronaccent : "\375" Greek_upsilonaccent : "\376" Greek_omegaaccent : "\266" Greek_ALPHAaccent : "\270" Greek_EPSILONaccent : "\271" Greek_ETAaccent : "\272" Greek_IOTAaccent : "\274" Greek_OMICRONaccent : "\276" Greek_UPSILONaccent : "\277" Greek_OMEGAaccent : "\264" acute : "\264" acute : "\267" periodcentered : "\253" guillemotleft : "\273" guillemotright : "\372" Greek_iotadieresis : "\373" Greek_upsilondieresis : "\332" Greek_IOTAdieresis : "\333" Greek_UPSILONdieresis : "\250" diaeresis : "\267" periodcentered : "\253" guillemotleft : "\273" guillemotright : "\300" Greek_iotaaccentdieresis : "\340" Greek_upsilonaccentdieresis : "\265" Greek_accentdieresis : "\300" Greek_iotaaccentdieresis : "\340" Greek_upsilonaccentdieresis : "\265" Greek_accentdieresis libX11-1.6.3/nls/fi_FI.UTF-8/XI18N_OBJS000064401431060000012000000000001247741723500167650ustar00alancstaff00002660200006libX11-1.6.3/nls/fi_FI.UTF-8/XLC_LOCALE.pre000064401431060000012000000000001247741723500175730ustar00alancstaff00002660200006libX11-1.6.3/nls/fi_FI.UTF-8/Compose.pre000064401431060000012000001070131247741723500175470ustar00alancstaff00002660200006XCOMM XCOMM Official compose sequences for Finland based on SFS 5966 standard XCOMM XCOMM This compose sequence map implements all the functionality of Annex 3 XCOMM and Annex 4 of the standard and additionally defines the sequences XCOMM provided in en_US.UTF-8/Compose. SFS 5966 sequences override any XCOMM conflicting rules from en_US.UTF-8/Compose. XCOMM XCOMM Annex 1 of the standard is implemented in the keymap symbols/fi XCOMM XCOMM Complete rewrite by Marko Myllynen XCOMM Original version by Troy Korjuslommi XCOMM XCOMM Use en_US.UTF-8/Compose as the base compose sequence definition set include "X11_LOCALEDATADIR/en_US.UTF-8/Compose" XCOMM Define all the sequences of the standard overriding any sequence XCOMM from en_US.UTF-8/Compose if such a sequence was provided already XCOMM Sequences from Annex 3 XCOMM Sequences with COMBINING ACUTE ACCENT / : "´" U00B4 # ACUTE ACCENT : "á" U00E1 # LATIN SMALL LETTER A WITH ACUTE : "Á" U00C1 # LATIN CAPITAL LETTER A WITH ACUTE : "ć" U0107 # LATIN SMALL LETTER C WITH ACUTE : "Ć" U0106 # LATIN CAPITAL LETTER C WITH ACUTE : "é" U00E9 # LATIN SMALL LETTER E WITH ACUTE : "É" U00C9 # LATIN CAPITAL LETTER E WITH ACUTE : "í" U00ED # LATIN SMALL LETTER I WITH ACUTE : "Í" U00CD # LATIN CAPITAL LETTER I WITH ACUTE : "ĺ" U013A # LATIN SMALL LETTER L WITH ACUTE : "Ĺ" U0139 # LATIN CAPITAL LETTER L WITH ACUTE : "ń" U0144 # LATIN SMALL LETTER N WITH ACUTE : "Ń" U0143 # LATIN CAPITAL LETTER N WITH ACUTE : "ó" U00F3 # LATIN SMALL LETTER O WITH ACUTE : "Ó" U00D3 # LATIN CAPITAL LETTER O WITH ACUTE : "ŕ" U0155 # LATIN SMALL LETTER R WITH ACUTE : "Ŕ" U0154 # LATIN CAPITAL LETTER R WITH ACUTE : "ś" U015B # LATIN SMALL LETTER S WITH ACUTE : "Ś" U015A # LATIN CAPITAL LETTER S WITH ACUTE : "ú" U00FA # LATIN SMALL LETTER U WITH ACUTE : "Ú" U00DA # LATIN CAPITAL LETTER U WITH ACUTE : "ẃ" U1E83 # LATIN SMALL LETTER W WITH ACUTE : "Ẃ" U1E82 # LATIN CAPITAL LETTER W WITH ACUTE : "ý" U00FD # LATIN SMALL LETTER Y WITH ACUTE : "Ý" U00DD # LATIN CAPITAL LETTER Y WITH ACUTE : "ź" U017A # LATIN SMALL LETTER Z WITH ACUTE : "Ź" U0179 # LATIN CAPITAL LETTER Z WITH ACUTE : "ǽ" U01FD # LATIN SMALL LETTER AE WITH ACUTE : "Ǽ" U01FC # LATIN CAPITAL LETTER AE WITH ACUTE : "ǿ" U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE : "Ǿ" U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE XCOMM Sequences with COMBINING BREVE / : "˘" U02D8 # BREVE : "ă" U0103 # LATIN SMALL LETTER A WITH BREVE : "Ă" U0102 # LATIN CAPITAL LETTER A WITH BREVE : "ĕ" U0115 # LATIN SMALL LETTER E WITH BREVE : "Ĕ" U0114 # LATIN CAPITAL LETTER E WITH BREVE : "ğ" U011F # LATIN SMALL LETTER G WITH BREVE : "Ğ" U011E # LATIN CAPITAL LETTER G WITH BREVE : "ĭ" U012D # LATIN SMALL LETTER I WITH BREVE : "Ĭ" U012C # LATIN CAPITAL LETTER I WITH BREVE : "ŏ" U014F # LATIN SMALL LETTER O WITH BREVE : "Ŏ" U014E # LATIN CAPITAL LETTER O WITH BREVE : "ŭ" U016D # LATIN SMALL LETTER U WITH BREVE : "Ŭ" U016C # LATIN CAPITAL LETTER U WITH BREVE XCOMM Sequences with COMBINING CARON / : "ˇ" U02C7 # CARON : "ǎ" U01CE # LATIN SMALL LETTER A WITH CARON : "Ǎ" U01CD # LATIN CAPITAL LETTER A WITH CARON : "č" U010D # LATIN SMALL LETTER C WITH CARON : "Č" U010C # LATIN CAPITAL LETTER C WITH CARON : "ď" U010F # LATIN SMALL LETTER D WITH CARON : "Ď" U010E # LATIN CAPITAL LETTER D WITH CARON : "ě" U011B # LATIN SMALL LETTER E WITH CARON : "Ě" U011A # LATIN CAPITAL LETTER E WITH CARON : "ǧ" U01E7 # LATIN SMALL LETTER G WITH CARON : "Ǧ" U01E6 # LATIN CAPITAL LETTER G WITH CARON : "ȟ" U021F # LATIN SMALL LETTER H WITH CARON : "Ȟ" U021E # LATIN CAPITAL LETTER H WITH CARON : "ǐ" U01D0 # LATIN SMALL LETTER I WITH CARON : "Ǐ" U01CF # LATIN CAPITAL LETTER I WITH CARON : "ǩ" U01E9 # LATIN SMALL LETTER K WITH CARON : "Ǩ" U01E8 # LATIN CAPITAL LETTER K WITH CARON : "ľ" U013E # LATIN SMALL LETTER L WITH CARON : "Ľ" U013D # LATIN CAPITAL LETTER L WITH CARON : "ň" U0148 # LATIN SMALL LETTER N WITH CARON : "Ň" U0147 # LATIN CAPITAL LETTER N WITH CARON : "ǒ" U01D2 # LATIN SMALL LETTER O WITH CARON : "Ǒ" U01D1 # LATIN CAPITAL LETTER O WITH CARON : "ř" U0159 # LATIN SMALL LETTER R WITH CARON : "Ř" U0158 # LATIN CAPITAL LETTER R WITH CARON : "š" U0161 # LATIN SMALL LETTER S WITH CARON : "Š" U0160 # LATIN CAPITAL LETTER S WITH CARON : "ť" U0165 # LATIN SMALL LETTER T WITH CARON : "Ť" U0164 # LATIN CAPITAL LETTER T WITH CARON : "ǔ" U01D4 # LATIN SMALL LETTER U WITH CARON : "Ǔ" U01D3 # LATIN CAPITAL LETTER U WITH CARON : "ž" U017E # LATIN SMALL LETTER Z WITH CARON : "Ž" U017D # LATIN CAPITAL LETTER Z WITH CARON : "ǯ" U01EF # LATIN SMALL LETTER EZH WITH CARON : "Ǯ" U01EE # LATIN CAPITAL LETTER EZH WITH CARON XCOMM Sequences with COMBINING CEDILLA / : "¸" U00B8 # CEDILLA : "ç" U00E7 # LATIN SMALL LETTER C WITH CEDILLA : "Ç" U00C7 # LATIN CAPITAL LETTER C WITH CEDILLA : "ģ" U0123 # LATIN SMALL LETTER G WITH CEDILLA : "Ģ" U0122 # LATIN CAPITAL LETTER G WITH CEDILLA : "ķ" U0137 # LATIN SMALL LETTER K WITH CEDILLA : "Ķ" U0136 # LATIN CAPITAL LETTER K WITH CEDILLA : "ļ" U013C # LATIN SMALL LETTER L WITH CEDILLA : "Ļ" U013B # LATIN CAPITAL LETTER L WITH CEDILLA : "ņ" U0146 # LATIN SMALL LETTER N WITH CEDILLA : "Ņ" U0145 # LATIN CAPITAL LETTER N WITH CEDILLA : "ŗ" U0157 # LATIN SMALL LETTER R WITH CEDILLA : "Ŗ" U0156 # LATIN CAPITAL LETTER R WITH CEDILLA : "ş" U015F # LATIN SMALL LETTER S WITH CEDILLA : "Ş" U015E # LATIN CAPITAL LETTER S WITH CEDILLA : "ţ" U0163 # LATIN SMALL LETTER T WITH CEDILLA : "Ţ" U0162 # LATIN CAPITAL LETTER T WITH CEDILLA XCOMM Sequences with COMBINING CIRCUMFLEX ACCENT / : "^" U005E # CIRCUMFLEX : "â" U00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX : "Â" U00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX : "ĉ" U0109 # LATIN SMALL LETTER C WITH CIRCUMFLEX : "Ĉ" U0108 # LATIN CAPITAL LETTER C WITH CIRCUMFLEX : "ê" U00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX : "Ê" U00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX : "ĝ" U011D # LATIN SMALL LETTER G WITH CIRCUMFLEX : "Ĝ" U011C # LATIN CAPITAL LETTER G WITH CIRCUMFLEX : "ĥ" U0125 # LATIN SMALL LETTER H WITH CIRCUMFLEX : "Ĥ" U0124 # LATIN CAPITAL LETTER H WITH CIRCUMFLEX : "î" U00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX : "Î" U00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX : "ĵ" U0135 # LATIN SMALL LETTER J WITH CIRCUMFLEX : "Ĵ" U0134 # LATIN CAPITAL LETTER J WITH CIRCUMFLEX : "ô" U00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX : "Ô" U00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX : "ŝ" U015D # LATIN SMALL LETTER S WITH CIRCUMFLEX : "Ŝ" U015C # LATIN CAPITAL LETTER S WITH CIRCUMFLEX : "û" U00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX : "Û" U00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX : "ŵ" U0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX : "Ŵ" U0174 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX : "ŷ" U0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX : "Ŷ" U0176 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX XCOMM Sequences with COMBINING DIAERESIS / : "¨" U00A8 # DIAERESIS : "ä" U00E4 # LATIN SMALL LETTER A WITH DIAERESIS : "Ä" U00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS : "ë" U00EB # LATIN SMALL LETTER E WITH DIAERESIS : "Ë" U00CB # LATIN CAPITAL LETTER E WITH DIAERESIS : "ï" U00EF # LATIN SMALL LETTER I WITH DIAERESIS : "Ï" U00CF # LATIN CAPITAL LETTER I WITH DIAERESIS : "ö" U00F6 # LATIN SMALL LETTER O WITH DIAERESIS : "Ö" U00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS : "ü" U00FC # LATIN SMALL LETTER U WITH DIAERESIS : "Ü" U00DC # LATIN CAPITAL LETTER U WITH DIAERESIS : "ẅ" U1E85 # LATIN SMALL LETTER W WITH DIAERESIS : "Ẅ" U1E84 # LATIN CAPITAL LETTER W WITH DIAERESIS : "ÿ" U00FF # LATIN SMALL LETTER Y WITH DIAERESIS : "Ÿ" U0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS XCOMM Sequences with COMBINING DOT ABOVE / : "˙" U02D9 # DOT ABOVE : "ḃ" U1E03 # LATIN SMALL LETTER B WITH DOT ABOVE : "Ḃ" U1E02 # LATIN CAPITAL LETTER B WITH DOT ABOVE : "ċ" U010B # LATIN SMALL LETTER C WITH DOT ABOVE : "Ċ" U010A # LATIN CAPITAL LETTER C WITH DOT ABOVE : "ḋ" U1E0B # LATIN SMALL LETTER D WITH DOT ABOVE : "Ḋ" U1E0A # LATIN CAPITAL LETTER D WITH DOT ABOVE : "ė" U0117 # LATIN SMALL LETTER E WITH DOT ABOVE : "Ė" U0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE : "ḟ" U1E1F # LATIN SMALL LETTER F WITH DOT ABOVE : "Ḟ" U1E1E # LATIN CAPITAL LETTER F WITH DOT ABOVE : "ġ" U0121 # LATIN SMALL LETTER G WITH DOT ABOVE : "Ġ" U0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE : "İ" U0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE : "ṁ" U1E41 # LATIN SMALL LETTER M WITH DOT ABOVE : "Ṁ" U1E40 # LATIN CAPITAL LETTER M WITH DOT ABOVE

: "ṗ" U1E57 # LATIN SMALL LETTER P WITH DOT ABOVE

: "Ṗ" U1E56 # LATIN CAPITAL LETTER P WITH DOT ABOVE : "ṡ" U1E61 # LATIN SMALL LETTER S WITH DOT ABOVE : "Ṡ" U1E60 # LATIN CAPITAL LETTER S WITH DOT ABOVE : "ṫ" U1E6B # LATIN SMALL LETTER T WITH DOT ABOVE : "Ṫ" U1E6A # LATIN CAPITAL LETTER T WITH DOT ABOVE : "ż" U017C # LATIN SMALL LETTER Z WITH DOT ABOVE : "Ż" U017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE XCOMM Sequences with COMBINING DOT BELOW / XCOMM : " " U.... # DOT BELOW : "ạ" U1EA1 # LATIN SMALL LETTER A WITH DOT BELOW : "Ạ" U1EA0 # LATIN CAPITAL LETTER A WITH DOT BELOW : "ẹ" U1EB9 # LATIN SMALL LETTER E WITH DOT BELOW : "Ẹ" U1EB8 # LATIN CAPITAL LETTER E WITH DOT BELOW : "ị" U1ECB # LATIN SMALL LETTER I WITH DOT BELOW : "Ị" U1ECA # LATIN CAPITAL LETTER I WITH DOT BELOW : "ọ" U1ECD # LATIN SMALL LETTER O WITH DOT BELOW : "Ọ" U1ECC # LATIN CAPITAL LETTER O WITH DOT BELOW : "ụ" U1EE5 # LATIN SMALL LETTER U WITH DOT BELOW : "Ụ" U1EE4 # LATIN CAPITAL LETTER U WITH DOT BELOW : "ỵ" U1EF5 # LATIN SMALL LETTER Y WITH DOT BELOW : "Ỵ" U1EF4 # LATIN CAPITAL LETTER Y WITH DOT BELOW XCOMM Sequences with COMBINING DOUBLE ACUTE ACCENT / : "˝" U02DD # DOUBLE ACUTE ACCENT : "ő" U0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE : "Ő" U0150 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE : "ű" U0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE : "Ű" U0170 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE XCOMM Sequences with COMBINING GRAVE ACCENT / : "`" U0060 # GRAVE ACCENT : "à" U00E0 # LATIN SMALL LETTER A WITH GRAVE : "À" U00C0 # LATIN CAPITAL LETTER A WITH GRAVE : "è" U00E8 # LATIN SMALL LETTER E WITH GRAVE : "È" U00C8 # LATIN CAPITAL LETTER E WITH GRAVE : "ì" U00EC # LATIN SMALL LETTER I WITH GRAVE : "Ì" U00CC # LATIN CAPITAL LETTER I WITH GRAVE : "ò" U00F2 # LATIN SMALL LETTER O WITH GRAVE : "Ò" U00D2 # LATIN CAPITAL LETTER O WITH GRAVE : "ù" U00F9 # LATIN SMALL LETTER U WITH GRAVE : "Ù" U00D9 # LATIN CAPITAL LETTER U WITH GRAVE : "ẁ" U1E81 # LATIN SMALL LETTER W WITH GRAVE : "Ẁ" U1E80 # LATIN CAPITAL LETTER W WITH GRAVE : "ỳ" U1EF3 # LATIN SMALL LETTER Y WITH GRAVE : "Ỳ" U1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE XCOMM Sequences with COMBINING MACRON / : "¯" U00AF # MACRON : "ā" U0101 # LATIN SMALL LETTER A WITH MACRON : "Ā" U0100 # LATIN CAPITAL LETTER A WITH MACRON : "ē" U0113 # LATIN SMALL LETTER E WITH MACRON : "Ē" U0112 # LATIN CAPITAL LETTER E WITH MACRON : "ī" U012B # LATIN SMALL LETTER I WITH MACRON : "Ī" U012A # LATIN CAPITAL LETTER I WITH MACRON : "ō" U014D # LATIN SMALL LETTER O WITH MACRON : "Ō" U014C # LATIN CAPITAL LETTER O WITH MACRON : "ū" U016B # LATIN SMALL LETTER U WITH MACRON : "Ū" U016A # LATIN CAPITAL LETTER U WITH MACRON : "ǣ" U01E3 # LATIN SMALL LETTER AE WITH MACRON : "Ǣ" U01E2 # LATIN CAPITAL LETTER AE WITH MACRON : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON XCOMM Sequences with COMBINING OGONEK / : "˛" U02DB # OGONEK : "ą" U0105 # LATIN SMALL LETTER A WITH OGONEK : "Ą" U0104 # LATIN CAPITAL LETTER A WITH OGONEK : "ę" U0119 # LATIN SMALL LETTER E WITH OGONEK : "Ę" U0118 # LATIN CAPITAL LETTER E WITH OGONEK : "į" U012F # LATIN SMALL LETTER I WITH OGONEK : "Į" U012E # LATIN CAPITAL LETTER I WITH OGONEK : "ǫ" U01EB # LATIN SMALL LETTER O WITH OGONEK : "Ǫ" U01EA # LATIN CAPITAL LETTER O WITH OGONEK : "ų" U0173 # LATIN SMALL LETTER U WITH OGONEK : "Ų" U0172 # LATIN CAPITAL LETTER U WITH OGONEK XCOMM Sequences with COMBINING RING ABOVE / : "˚" U02DA # RING ABOVE : "å" U00E5 # LATIN SMALL LETTER A WITH RING ABOVE : "Å" U00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE : "ů" U016F # LATIN SMALL LETTER U WITH RING ABOVE : "Ů" U016E # LATIN CAPITAL LETTER U WITH RING ABOVE XCOMM Sequences with COMBINING TILDE / : "~" U007E # TILDE : "ã" U00E3 # LATIN SMALL LETTER A WITH TILDE : "Ã" U00C3 # LATIN CAPITAL LETTER A WITH TILDE : "ẽ" U1EBD # LATIN SMALL LETTER E WITH TILDE : "Ẽ" U1EBC # LATIN CAPITAL LETTER E WITH TILDE : "ĩ" U0129 # LATIN SMALL LETTER I WITH TILDE : "Ĩ" U0128 # LATIN CAPITAL LETTER I WITH TILDE : "ñ" U00F1 # LATIN SMALL LETTER N WITH TILDE : "Ñ" U00D1 # LATIN CAPITAL LETTER N WITH TILDE : "õ" U00F5 # LATIN SMALL LETTER O WITH TILDE : "Õ" U00D5 # LATIN CAPITAL LETTER O WITH TILDE : "ũ" U0169 # LATIN SMALL LETTER U WITH TILDE : "Ũ" U0168 # LATIN CAPITAL LETTER U WITH TILDE : "ỹ" U1EF9 # LATIN SMALL LETTER Y WITH TILDE : "Ỹ" U1EF8 # LATIN CAPITAL LETTER Y WITH TILDE XCOMM Sequences with AUXILIARY STROKE / : "đ" U0111 # LATIN SMALL LETTER D WITH STROKE : "Đ" U0110 # LATIN CAPITAL LETTER D WITH STROKE : "ǥ" U01E5 # LATIN SMALL LETTER G WITH STROKE : "Ǥ" U01E4 # LATIN CAPITAL LETTER G WITH STROKE : "ħ" U0127 # LATIN SMALL LETTER H WITH STROKE : "Ħ" U0126 # LATIN CAPITAL LETTER H WITH STROKE : "ł" U0142 # LATIN SMALL LETTER L WITH STROKE : "Ł" U0141 # LATIN CAPITAL LETTER L WITH STROKE : "ø" U00F8 # LATIN SMALL LETTER O WITH STROKE : "Ø" U00D8 # LATIN CAPITAL LETTER O WITH STROKE : "ŧ" U0167 # LATIN SMALL LETTER T WITH STROKE : "Ŧ" U0166 # LATIN CAPITAL LETTER T WITH STROKE XCOMM Sequences from Annex 4 XCOMM Sequences with COMBINING BREVE / : "ắ" U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE : "ặ" U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW : "ằ" U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE : "ẳ" U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE : "ẵ" U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE : "Ắ" U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE : "Ặ" U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW : "Ằ" U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE : "Ẳ" U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE : "Ẵ" U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE XCOMM Sequences with COMBINING CIRCUMFLEX ACCENT / : "ấ" U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE : "ậ" U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW : "ầ" U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE : "ẩ" U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE : "ẫ" U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE : "Ấ" U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE : "Ậ" U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW : "Ầ" U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE : "Ẩ" U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE : "Ẫ" U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE : "ế" U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE : "ệ" U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW : "ề" U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE : "ể" U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE : "ễ" U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE : "Ệ" U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE : "Ệ" U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW : "Ề" U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE : "Ể" U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE : "Ễ" U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE : "ố" U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE : "ộ" U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW : "ồ" U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE : "ổ" U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE : "ỗ" U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE : "Ố" U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE : "Ộ" U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW : "Ồ" U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE : "Ổ" U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE : "Ỗ" U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE XCOMM Sequences with COMBINING DIAERESIS / : "ǟ" U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON : "Ǟ" U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON XCOMM Sequences with COMBINING DOT ABOVE / : "ȧ" U0227 # LATIN SMALL LETTER A WITH DOT ABOVE : "ǡ" U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON : "Ȧ" U0226 # LATIN CAPITAL LETTER A WITH DOT ABOVE : "Ǡ" U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON XCOMM Sequences with COMBINING HOOK ABOVE / : "ả" U1EA3 # LATIN SMALL LETTER A WITH HOOK ABOVE : "Ả" U1EA2 # LATIN CAPITAL LETTER A WITH HOOK ABOVE : "ẻ" U1EBB # LATIN SMALL LETTER E WITH HOOK ABOVE : "Ẻ" U1EBA # LATIN CAPITAL LETTER E WITH HOOK ABOVE : "ỉ" U1EC9 # LATIN SMALL LETTER I WITH HOOK ABOVE : "Ỉ" U1EC8 # LATIN CAPITAL LETTER I WITH HOOK ABOVE : "ỏ" U1ECF # LATIN SMALL LETTER O WITH HOOK ABOVE : "Ỏ" U1ECE # LATIN CAPITAL LETTER O WITH HOOK ABOVE : "ủ" U1EE7 # LATIN SMALL LETTER U WITH HOOK ABOVE : "Ủ" U1EE6 # LATIN CAPITAL LETTER U WITH HOOK ABOVE : "ỷ" U1EF7 # LATIN SMALL LETTER Y WITH HOOK ABOVE : "Ỷ" U1EF6 # LATIN CAPITAL LETTER Y WITH HOOK ABOVE XCOMM Sequences with COMBINING HORN / : "ơ" U01A1 # LATIN SMALL LETTER O WITH HORN : "ớ" U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE : "ợ" U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE : "ờ" U1EDD # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE : "ỡ" U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE : "Ơ" U01A0 # LATIN CAPITAL LETTER O WITH HORN : "Ớ" U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE : "Ợ" U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW : "Ờ" U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE : "Ở" U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE : "Ỡ" U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE : "ư" U01B0 # LATIN SMALL LETTER U WITH HORN : "ứ" U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE : "ự" U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW : "ừ" U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE : "ử" U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE : "ữ" U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE : "Ư" U01AF # LATIN CAPITAL LETTER U WITH HORN : "Ứ" U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE : "Ự" U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW : "Ừ" U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE : "Ử" U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE : "Ữ" U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE XCOMM Sequences with COMBINING OGONEK / : "ǭ" U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON : "Ǭ" U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON XCOMM Sequences with COMBINING RING ABOVE / : "ǻ" U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE : "Ǻ" U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE XCOMM Additional sequences from Annex 5 for the reportoire of the MES-2 XCOMM (Multilingual European Subset No. 2 in ISO/IEC 10646, Collection 282) : "ƒ" U0192 # LATIN SMALL LETTER F WITH HOOK : "fi" UFB01 # LATIN SMALL LIGATURE FI : "fl" UFB02 # LATIN SMALL LIGATURE FL : "ij" U0133 # LATIN SMALL LIGATURE IJ : "IJ" U0132 # LATIN CAPITAL LIGATURE IJ : "ŀ" U0140 # LATIN SMALL LETTER L WITH MIDDLE DOT : "Ŀ" U013F # LATIN CAPITAL LETTER L WITH MIDDLE DOT : "ʼn" U0149 # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE : "ɼ" U027C # LATIN SMALL LETTER R WITH LONG LEG : "ſ" U017F # LATIN SMALL LETTER LONG S : "ẛ" U1E9B # LATIN SMALL LETTER LONG S WITH DOT ABOVE : "ẛ" U1E9B # LATIN SMALL LETTER LONG S WITH DOT ABOVE : "ș" U0219 # LATIN SMALL LETTER S WITH COMMA BELOW : "Ș" U0218 # LATIN CAPITAL LETTER S WITH COMMA BELOW : "ț" U021B # LATIN SMALL LETTER T WITH COMMA BELOW : "Ț" U021A # LATIN CAPITAL LETTER T WITH COMMA BELOW EVE AND GRAVE : "Ẳ" U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE : "Ẵ" U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE XCOMM Sequences with COMBINING CIRCUMFLEX ACCENT / : "ấ" U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE : "ậ" U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX libX11-1.6.3/nls/ja/XI18N_OBJS000064401431060000012000000011431247741723500156120ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for ja locale # XLC ja/xlibi18n_ja _XlcGenericLoader # XLC_open XLC common/xlibi18n _XlcGenericLoader # XLC_open #XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_regiser XIM_unregister XIM common/ximp40 _Ximp_OpenIM # XIM_open XIM common/ximlocal _XimpLocalOpenIM # XIM_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_regiser XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/ja/XLC_LOCALE.pre000064401431060000012000000036341247741723500164270ustar00alancstaff00002660200006XCOMM XCOMM XLocale Database Sample for ja_JP.euc XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class (7 bit ASCII) fs0 { charset { name ISO8859-1:GL } font { primary ISO8859-1:GL substitute JISX0201.1976-0:GL vertical_rotate all } } XCOMM fs1 class (Kanji) fs1 { charset { name JISX0208.1983-0:GL udc_area \x7521,\x7e7e } font { primary JISX0208.1983-0:GL substitute JISX0208.1990-0:GL } } XCOMM fs2 class (Half Kana) fs2 { charset { name JISX0201.1976-0:GR } font { primary JISX0201.1976-0:GR substitute JISX0201.1976-0:GR vertical_rotate all } } XCOMM fs3 class (Supplementary Kanji) XCOMM fs3 { XCOMM charset { XCOMM name JISX0212.1990-0:GL XCOMM udc_area \x7521,\x7e7e XCOMM } XCOMM font { XCOMM primary JISX0212.1990-0:GL XCOMM } XCOMM } END XLC_FONTSET XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name ja.euc mb_cur_max 3 state_depend_encoding False #if WCHAR32 wc_encoding_mask \x30000000 wc_shift_bits 7 #else wc_encoding_mask \x00008080 wc_shift_bits 8 #endif use_stdc_env True force_convert_to_mb True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding ISO8859-1:GL; JISX0201.1976-0:GL } XCOMM cs1 class cs1 { side GR:Default length 2 #if WCHAR32 wc_encoding \x30000000 #else wc_encoding \x00008080 #endif ct_encoding JISX0208.1983-0:GL; JISX0208.1983-0:GR;\ JISX0208.1983-1:GL; JISX0208.1983-1:GR } XCOMM cs2 class cs2 { side GR length 1 mb_encoding \x8e #if WCHAR32 wc_encoding \x10000000 #else wc_encoding \x00000080 #endif ct_encoding JISX0201.1976-0:GR } XCOMM cs3 class XCOMM cs3 { XCOMM side GL XCOMM length 2 XCOMM mb_encoding \x8f XCOMM #if WCHAR32 XCOMM wc_encoding \x20000000 XCOMM #else XCOMM wc_encoding \x00008000 XCOMM #endif XCOMM ct_encoding JISX0212.1990-0:GL; JISX0212.1990-0:GR XCOMM } END XLC_XLOCALE libX11-1.6.3/nls/ja/Compose.pre000064401431060000012000000005401247741723500163600ustar00alancstaff00002660200006XCOMM XCOMM ja Compose Sequence XCOMM XCOMM Sequence Definition XCOMM XCOMM XCOMM This file currently has no entries. It appears that a compose file (even XCOMM just an empty one) is required for the appropriate keysyms to work for XCOMM this encoding. XCOMM XCOMM Means XCOMM Special Character XCOMM End of Sequence Definition libX11-1.6.3/nls/ibm-cp1133/XLC_LOCALE.pre000064401431060000012000000021171247741723500175070ustar00alancstaff00002660200006XCOMM XLocale Database Sample for ibm-cp1133. XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class (7 bit ASCII) fs0 { charset { name ISO8859-1:GL } font { primary IBM-CP1133:GL substitute ISO8859-1:GL } } XCOMM fs1 class fs1 { charset IBM-CP1133:GR font IBM-CP1133:GR } END XLC_FONTSET XCOMM XCOMM XLC_CHARSET_DEFINE category XCOMM XLC_CHARSET_DEFINE csd0 { charset_name IBM-CP1133 side GR length 1 string_encoding False sequence \x1b%/1 } END XLC_CHARSET_DEFINE XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name IBM-CP1133 mb_cur_max 1 state_depend_encoding False #if WCHAR32 wc_encoding_mask \x30000000 wc_shift_bits 7 #else wc_encoding_mask \x00008080 wc_shift_bits 8 #endif use_stdc_env True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding IBM-CP1133:GL; ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 #if WCHAR32 wc_encoding \x30000000 #else wc_encoding \x00008080 #endif ct_encoding IBM-CP1133:GR } END XLC_XLOCALE libX11-1.6.3/nls/ibm-cp1133/Compose.pre000064401431060000012000000005501247741723500174460ustar00alancstaff00002660200006XCOMM XCOMM ibm-cp1133 Compose Sequence XCOMM XCOMM Sequence Definition XCOMM XCOMM XCOMM This file currently has no entries. It appears that a compose file (even XCOMM just an empty one) is required for the appropriate keysyms to work for XCOMM this encoding. XCOMM XCOMM Means XCOMM Special Character XCOMM End of Sequence Definition libX11-1.6.3/nls/ibm-cp1133/XI18N_OBJS000064401431060000012000000005261247741723500167030ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for ibm-cp1133 locale # XLC common/xlcDef _XlcDefaultLoader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/zh_HK.UTF-8/XI18N_OBJS000064401431060000012000000005311247741723500170250ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for zh_HK.UTF-8 locale # XLC common/xlcUTF8Load _XlcUtf8Loader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/zh_HK.UTF-8/XLC_LOCALE.pre000064401431060000012000000033361247741723500176410ustar00alancstaff00002660200006XCOMM XFree86 NLS for Chinese locale zh_HK.UTF-8 XCOMM Modified from xc/nls/XLC_LOCALE/en_US.UTF-8 XCOMM by James Su XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET on_demand_loading True object_name generic XCOMM We leave the legacy encodings in for the moment, because we don't XCOMM have that many ISO10646 fonts yet. XCOMM fs0 class (7 bit ASCII) fs0 { charset { name ISO8859-1:GL } font { primary ISO8859-1:GL vertical_rotate all } } XCOMM fs1 class (ISO8859 families) fs1 { charset { name ISO8859-1:GR } font { primary ISO8859-1:GR } } XCOMM fs2 class fs2 { charset { name BIG5HKSCS-0:GLGR } font { primary BIG5HKSCS-0:GLGR substitute BIG5-0:GLGR } } XCOMM fs3 class fs3 { charset { name ISO10646-1 } font { primary ISO10646-1 } } END XLC_FONTSET XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name UTF-8 mb_cur_max 6 state_depend_encoding False XCOMM cs0 class cs0 { side GL:Default length 1 ct_encoding ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 ct_encoding ISO8859-1:GR } XCOMM cs2 class cs2 { side none length 2 ct_encoding BIG5HKSCS-0:GLGR } XCOMM cs3 class cs3 { side none ct_encoding ISO10646-1 } END XLC_XLOCALE libX11-1.6.3/nls/zh_HK.UTF-8/Compose.pre000064401431060000012000000000601247741723500175700ustar00alancstaff00002660200006include "X11_LOCALEDATADIR/en_US.UTF-8/Compose" libX11-1.6.3/nls/compose-check.pl000075501431060000012000000107341247741723500167370ustar00alancstaff00002660200006#! /usr/bin/perl # # Copyright 2009 Oracle and/or its affiliates. All rights reserved. # # 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: # # The above copyright notice and this permission notice (including the next # paragraph) shall be included in all copies or substantial portions of the # Software. # # THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. # # # Check a compose file for duplicate/conflicting entries and other common errors # # Compose file grammar is defined in modules/im/ximcp/imLcPrs.c use strict; use warnings; my $error_count = 0; if (scalar(@ARGV) == 0) { if ( -f 'Compose' ) { push @ARGV, 'Compose'; } else { push @ARGV, glob '*/Compose'; } } foreach my $cf (@ARGV) { # print "Checking $cf\n"; $error_count += check_compose_file($cf); } exit($error_count); sub check_compose_file { my ($filename) = @_; my $errors = 0; my %compose_table = (); my $line = 0; my $pre_file = ($filename =~ m{\.pre$}) ? 1 : 0; my $in_c_comment = 0; open my $COMPOSE, '<', $filename or die "Could not open $filename: $!"; COMPOSE_LINE: while (my $cl = <$COMPOSE>) { $line++; chomp($cl); my $original_line = $cl; # Special handling for changes cpp makes to .pre files if ($pre_file == 1) { if ($in_c_comment) { # Look for end of multi-line C comment if ($cl =~ m{\*/(.*)$}) { $cl = $1; $in_c_comment = 0; } else { next; } } $cl =~ s{/\*.\**/}{}; # Remove single line C comments if ($cl =~ m{^(.*)/\*}) { # Start of a multi-line C comment $cl = $1; $in_c_comment = 1; } next if $cl =~ m{^\s*XCOMM}; # Skip pre-processing comments } $cl =~ s{#.*$}{}; # Remove comments next if $cl =~ m{^\s*$}; # Skip blank (or comment-only) lines chomp($cl); if ($cl =~ m{^(STATE\s+|END_STATE)}) { # Sun extension to compose file syntax %compose_table = (); } elsif ($cl =~ m{^([^:]+)\s*:\s*(.+)$}) { my ($seq, $action) = ($1, $2); $seq =~ s{\s+$}{}; my @keys = grep { $_ !~ m/^\s*$/ } split /[\s\<\>]+/, $seq; my $final_key = pop @keys; my $keytable = \%compose_table; foreach my $k (@keys) { if ($k =~ m{^U([[:xdigit:]]+)$}) { $k = 'U' . lc($1); } if (exists $keytable->{$k}) { $keytable = $keytable->{$k}; if (ref($keytable) ne 'HASH') { print "Clash with existing sequence in $filename on line $line: $seq\n"; print_sequences([$line, $original_line]); print_sequences($keytable); $errors++; next COMPOSE_LINE; } } else { my $new_keytable = {}; $keytable->{$k} = $new_keytable; $keytable = $new_keytable; } } if (exists $keytable->{$final_key}) { print "Clash with existing sequence in $filename on line $line: $seq\n"; print_sequences([$line, $original_line]); print_sequences($keytable->{$final_key}); $errors++; } else { $keytable->{$final_key} = [$line, $original_line]; } } elsif ($cl =~ m{^(STATE_TYPE:|\@StartDeadKeyMap|\@EndDeadKeyMap)}) { # ignore } elsif ($cl =~ m{^include "(.*)"}) { my $incpath = $1; if (($pre_file == 1) && ($incpath !~ m{^X11_LOCALEDATADIR/})) { print "Include path starts with $incpath instead of X11_LOCALEDATADIR\n", " -- may not find include files when installed in alternate paths\n\n"; } } else { print 'Unrecognized pattern in ', $filename, ' on line #', $line, ":\n ", $cl, "\n"; } } close $COMPOSE; return $errors; } sub print_sequences { my ($entry_ref) = @_; if (ref($entry_ref) eq 'HASH') { foreach my $h (values %{$entry_ref}) { print_sequences($h); } } else { my ($line, $seq) = @{$entry_ref}; print " line #", $line, ": ", $seq, "\n"; } } libX11-1.6.3/nls/microsoft-cp1255/XI18N_OBJS000064401431060000012000000005341247741723500201450ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for microsoft-cp1255 locale # XLC common/xlcDef _XlcDefaultLoader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/microsoft-cp1255/Compose.pre000064401431060000012000000000001247741723500206770ustar00alancstaff00002660200006libX11-1.6.3/nls/microsoft-cp1255/XLC_LOCALE.pre000064401431060000012000000022321247741723500207500ustar00alancstaff00002660200006XCOMM XLocale Database Sample for microsoft-cp1255. XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class fs0 { charset { name ISO8859-1:GL } font { primary MICROSOFT-CP1255:GL substitute ISO8859-1:GL vertical_rotate all } } XCOMM fs1 class fs1 { charset { name MICROSOFT-CP1255:GR } font { primary MICROSOFT-CP1255:GR } } END XLC_FONTSET XCOMM XCOMM XLC_CHARSET_DEFINE category XCOMM XLC_CHARSET_DEFINE csd0 { charset_name MICROSOFT-CP1255 side GR length 1 string_encoding False sequence \x1b%/1 } END XLC_CHARSET_DEFINE XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name MICROSOFT-CP1255 mb_cur_max 1 state_depend_encoding False #if WCHAR32 wc_encoding_mask \x30000000 wc_shift_bits 7 #else wc_encoding_mask \x00008080 wc_shift_bits 8 #endif use_stdc_env True force_convert_to_mb True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding MICROSOFT-CP1255:GL; ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 #if WCHAR32 wc_encoding \x30000000 #else wc_encoding \x00008080 #endif ct_encoding MICROSOFT-CP1255:GR } END XLC_XLOCALE libX11-1.6.3/nls/iso8859-14/XLC_LOCALE.pre000064401431060000012000000016611247741723500174050ustar00alancstaff00002660200006XCOMM XLocale Database Sample for iso8859-14. XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class fs0 { charset { name ISO8859-1:GL } font { primary ISO8859-14:GL substitute ISO8859-1:GL vertical_rotate all } } XCOMM fs1 class fs1 { charset { name ISO8859-14:GR } font { primary ISO8859-14:GR } } END XLC_FONTSET XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name ISO8859-14 mb_cur_max 1 state_depend_encoding False #if WCHAR32 wc_encoding_mask \x30000000 wc_shift_bits 7 #else wc_encoding_mask \x00008080 wc_shift_bits 8 #endif use_stdc_env True force_convert_to_mb True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding ISO8859-14:GL; ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 #if WCHAR32 wc_encoding \x30000000 #else wc_encoding \x00008080 #endif ct_encoding ISO8859-14:GR } END XLC_XLOCALE libX11-1.6.3/nls/iso8859-14/XI18N_OBJS000064401431060000012000000005261247741723500165760ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for iso8859-14 locale # XLC common/xlcDef _XlcDefaultLoader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/iso8859-14/Compose.pre000064401431060000012000000511731247741723500173500ustar00alancstaff00002660200006XCOMM ISO 8859-14 (Latin 8) Compose Sequences XCOMM XCOMM Original version by Alastair McKinstry, XCOMM Fixed and tidied up by Seamus O Ciardhuain (Dec 2002) XCOMM XCOMM XCOMM First part is taken from the Latin-1 definitions, XCOMM i.e. characters the same in 8859-1 and 8859-14. XCOMM XCOMM Means XCOMM Special Character : "#" numbersign : "'" apostrophe : "'" apostrophe : "@" at : "[" bracketleft : "\\" backslash : "\\" backslash : "\\" backslash : "]" bracketright : "^" asciicircum : "^" asciicircum : "^" asciicircum : "^" asciicircum : "`" grave : "`" grave : "{" braceleft : "{" braceleft : "|" bar : "|" bar : "|" bar : "|" bar : "|" bar : "|" bar : "}" braceright : "}" braceright : "~" asciitilde : "~" asciitilde : "~" asciitilde : "~" asciitilde : "\243" sterling : "\243" sterling : "\243" sterling : "\243" sterling : "\243" sterling : "\243" sterling : "\243" sterling : "\243" sterling : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section <0> : "\247" section <0> : "\247" section <0> : "\247" section <0> : "\247" section : "\251" copyright : "\251" copyright : "\251" copyright : "\251" copyright : "\251" copyright : "\251" copyright : "\251" copyright : "\251" copyright <0> : "\251" copyright <0> : "\251" copyright <0> : "\251" copyright <0> : "\251" copyright

: "\266" paragraph

: "\266" paragraph

: "\266" paragraph

: "\266" paragraph : "\240" nobreakspace : "\255" hyphen : "\256" registered : "\256" registered : "\256" registered : "\256" registered <0> : "\256" registered <0> : "\256" registered <0> : "\256" registered <0> : "\256" registered XCOMM Accented Alphabet : "\300" Agrave : "\300" Agrave : "\301" Aacute : "\301" Aacute : "\301" Aacute : "\301" Aacute : "\302" Acircumflex : "\302" Acircumflex : "\302" Acircumflex : "\302" Acircumflex : "\303" Atilde : "\303" Atilde : "\303" Atilde : "\303" Atilde : "\304" Adiaeresis : "\304" Adiaeresis : "\304" Adiaeresis : "\304" Adiaeresis : "\305" Aring : "\305" Aring : "\306" AE : "\340" agrave : "\340" agrave : "\341" aacute : "\341" aacute : "\341" aacute : "\341" aacute : "\342" acircumflex : "\342" acircumflex : "\342" acircumflex : "\342" acircumflex : "\343" atilde : "\343" atilde : "\343" atilde : "\343" atilde : "\344" adiaeresis : "\344" adiaeresis : "\344" adiaeresis : "\344" adiaeresis : "\345" aring : "\345" aring : "\346" ae : "\307" Ccedilla : "\307" Ccedilla : "\307" Ccedilla : "\307" Ccedilla : "\347" ccedilla : "\347" ccedilla : "\347" ccedilla : "\347" ccedilla : "\310" Egrave : "\310" Egrave : "\311" Eacute : "\311" Eacute : "\311" Eacute : "\311" Eacute : "\312" Ecircumflex : "\312" Ecircumflex : "\312" Ecircumflex : "\312" Ecircumflex : "\313" Ediaeresis : "\313" Ediaeresis : "\313" Ediaeresis : "\313" Ediaeresis : "\350" egrave : "\350" egrave : "\351" eacute : "\351" eacute : "\351" eacute : "\351" eacute : "\352" ecircumflex : "\352" ecircumflex : "\352" ecircumflex : "\352" ecircumflex : "\353" ediaeresis : "\353" ediaeresis : "\353" ediaeresis : "\353" ediaeresis : "\314" Igrave : "\314" Igrave : "\315" Iacute : "\315" Iacute : "\315" Iacute : "\315" Iacute : "\316" Icircumflex : "\316" Icircumflex : "\316" Icircumflex : "\316" Icircumflex : "\317" Idiaeresis : "\317" Idiaeresis : "\317" Idiaeresis : "\317" Idiaeresis : "\354" igrave : "\354" igrave : "\355" iacute : "\355" iacute : "\355" iacute : "\355" iacute : "\356" icircumflex : "\356" icircumflex : "\356" icircumflex : "\356" icircumflex : "\357" idiaeresis : "\357" idiaeresis : "\357" idiaeresis : "\357" idiaeresis : "\321" Ntilde : "\321" Ntilde : "\321" Ntilde : "\321" Ntilde : "\361" ntilde : "\361" ntilde : "\361" ntilde : "\361" ntilde : "\322" Ograve : "\322" Ograve : "\323" Oacute : "\323" Oacute : "\323" Oacute : "\323" Oacute : "\324" Ocircumflex : "\324" Ocircumflex : "\324" Ocircumflex : "\324" Ocircumflex : "\325" Otilde : "\325" Otilde : "\325" Otilde : "\325" Otilde : "\326" Odiaeresis : "\326" Odiaeresis : "\326" Odiaeresis : "\326" Odiaeresis : "\330" Ooblique : "\330" Ooblique : "\362" ograve : "\362" ograve : "\363" oacute : "\363" oacute : "\363" oacute : "\363" oacute : "\364" ocircumflex : "\364" ocircumflex : "\364" ocircumflex : "\364" ocircumflex : "\365" otilde : "\365" otilde : "\365" otilde : "\365" otilde : "\366" odiaeresis : "\366" odiaeresis : "\366" odiaeresis : "\366" odiaeresis : "\370" oslash : "\370" oslash : "\331" Ugrave : "\331" Ugrave : "\332" Uacute : "\332" Uacute : "\332" Uacute : "\332" Uacute : "\333" Ucircumflex : "\333" Ucircumflex : "\333" Ucircumflex : "\333" Ucircumflex : "\334" Udiaeresis : "\334" Udiaeresis : "\334" Udiaeresis : "\334" Udiaeresis : "\371" ugrave : "\371" ugrave : "\372" uacute : "\372" uacute : "\372" uacute : "\372" uacute : "\373" ucircumflex : "\373" ucircumflex : "\373" ucircumflex : "\373" ucircumflex : "\374" udiaeresis : "\374" udiaeresis : "\374" udiaeresis : "\374" udiaeresis : "\337" ssharp : "\335" Yacute : "\335" Yacute : "\335" Yacute : "\335" Yacute : "\375" yacute : "\375" yacute : "\375" yacute : "\375" yacute : "\377" ydiaeresis : "\377" ydiaeresis : "\377" ydiaeresis : "\377" ydiaeresis XCOMM XCOMM dead key accent keysyms XCOMM Special Character : "|" bar : "`" grave : "'" apostrophe : "^" asciicircum : "~" asciitilde XCOMM Accented Alphabet : "\300" Agrave : "\301" Aacute : "\302" Acircumflex : "\303" Atilde : "\304" Adiaeresis : "\340" agrave : "\341" aacute : "\342" acircumflex : "\343" atilde : "\344" adiaeresis : "\307" Ccedilla : "\347" ccedilla : "\310" Egrave : "\311" Eacute : "\312" Ecircumflex : "\313" Ediaeresis : "\350" egrave : "\351" eacute : "\352" ecircumflex : "\353" ediaeresis : "\314" Igrave : "\315" Iacute : "\316" Icircumflex : "\317" Idiaeresis : "\354" igrave : "\355" iacute : "\356" icircumflex : "\357" idiaeresis : "\321" Ntilde : "\361" ntilde : "\322" Ograve : "\323" Oacute : "\324" Ocircumflex : "\325" Otilde : "\326" Odiaeresis : "\362" ograve : "\363" oacute : "\364" ocircumflex : "\365" otilde : "\366" odiaeresis : "\331" Ugrave : "\332" Uacute : "\333" Ucircumflex : "\334" Udiaeresis : "\371" ugrave : "\372" uacute : "\373" ucircumflex : "\374" udiaeresis : "\335" Yacute : "\375" yacute : "\377" ydiaeresis XCOMM The following is Celtic character support, XCOMM i.e. the characters in 8859-14 which differ from 8859-1. : "\242" babovedot : "\241" Babovedot : "\245" cabovedot : "\245" Cabovedot : "\253" dabovedot : "\246" Dabovedot : "\261" fabovedot : "\260" Fabovedot : "\263" gabovedot : "\262" Gabovedot : "\265" mabovedot : "\264" Mabovedot

: "\271" pabovedot

: "\267" Pabovedot : "\277" sabovedot : "\273" Sabovedot : "\367" tabovedot : "\327" Tabovedot : "\242" babovedot : "\241" Babovedot : "\245" cabovedot : "\245" Cabovedot : "\253" dabovedot : "\246" Dabovedot : "\261" fabovedot : "\260" Fabovedot : "\263" gabovedot : "\262" Gabovedot : "\265" mabovedot : "\264" Mabovedot

: "\271" pabovedot

: "\267" Pabovedot : "\277" sabovedot : "\273" Sabovedot : "\367" tabovedot : "\327" Tabovedot : "\376" ycircumflex : "\376" ycircumflex : "\336" Ycircumflex : "\336" Ycircumflex : "\360" wcircumflex : "\360" wcircumflex : "\320" Wcircumflex : "\320" Wcircumflex : "\257" Ydiaeresis : "\257" Ydiaeresis : "\257" Ydiaeresis : "\257" Ydiaeresis : "\275" Wdiaeresis : "\275" Wdiaeresis : "\275" Wdiaeresis : "\275" Wdiaeresis : "\276" wdiaeresis : "\276" wdiaeresis : "\276" wdiaeresis : "\276" wdiaeresis : "\254" Ygrave : "\254" Ygrave : "\274" ygrave : "\274" ygrave : "\250" Wgrave : "\250" Wgrave : "\270" wgrave : "\270" wgrave : "\252" Wacute : "\252" Wacute : "\252" Wacute : "\252" Wacute : "\272" wacute : "\272" wacute : "\272" wacute : "\272" wacute : "\242" babovedot : "\241" Babovedot : "\245" cabovedot : "\245" Cabovedot : "\253" dabovedot : "\246" Dabovedot : "\261" fabovedot : "\260" Fabovedot : "\263" gabovedot : "\262" Gabovedot : "\265" mabovedot : "\264" Mabovedot

: "\271" pabovedot

: "\267" Pabovedot : "\277" sabovedot : "\273" Sabovedot : "\367" tabovedot : "\327" Tabovedot : "\242" babovedot : "\241" Babovedot : "\245" cabovedot : "\245" Cabovedot : "\253" dabovedot : "\246" Dabovedot : "\261" fabovedot : "\260" Fabovedot : "\263" gabovedot : "\262" Gabovedot : "\265" mabovedot : "\264" Mabovedot

: "\271" pabovedot

: "\267" Pabovedot : "\277" sabovedot : "\273" Sabovedot : "\367" tabovedot : "\327" Tabovedot : "\242" babovedot : "\241" Babovedot : "\245" cabovedot : "\245" Cabovedot : "\253" dabovedot : "\246" Dabovedot : "\261" fabovedot : "\260" Fabovedot : "\263" gabovedot : "\262" Gabovedot : "\265" mabovedot : "\264" Mabovedot

: "\271" pabovedot

: "\267" Pabovedot : "\277" sabovedot : "\273" Sabovedot : "\367" tabovedot : "\327" Tabovedot : "\257" Ydiaeresis : "\254" Ygrave : "\274" ygrave : "\376" ycircumflex : "\336" Ycircumflex : "\360" wcircumflex : "\320" Wcircumflex : "\276" wdiaeresis : "\275" Wdiaeresis : "\272" wacute : "\252" Wacute : "\250" Wgrave : "\270" wgrave XCOMM End of Sequence Definition " Uacute : "\332" Uacute : "\332" Uacute : "\333" Ucircumflex : "\333" Ucircumflex : "\333" Ucircumflex : "\333" Ucircumflex : "\334" Udiaeresis : "\334" UdilibX11-1.6.3/nls/iso8859-5/XI18N_OBJS000064401431060000012000000003701247741723500165130ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for euro locales # XLC common/xlibi18n _XlcGenericLoader # XLC_open XIM common/xiiimp _XimpLocalOpenIM # XIM_open XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/iso8859-5/Compose.pre000064401431060000012000000005501247741723500172610ustar00alancstaff00002660200006XCOMM XCOMM ISO 8859-5 Compose Sequence XCOMM XCOMM Sequence Definition XCOMM XCOMM XCOMM This file currently has no entries. It appears that a compose file (even XCOMM just an empty one) is required for the appropriate keysyms to work for XCOMM this encoding. XCOMM XCOMM Means XCOMM Special Character XCOMM End of Sequence Definition libX11-1.6.3/nls/iso8859-5/XLC_LOCALE.pre000064401431060000012000000016521247741723500173250ustar00alancstaff00002660200006XCOMM XLocale Database Sample for iso8859-5. XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class fs0 { charset { name ISO8859-1:GL } font { primary ISO8859-5:GL substitute ISO8859-1:GL vertical_rotate all } } XCOMM fs1 class fs1 { charset { name ISO8859-5:GR } font { primary ISO8859-5:GR } } END XLC_FONTSET XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name ISO8859-5 mb_cur_max 1 state_depend_encoding False #if WCHAR32 wc_encoding_mask \x30000000 wc_shift_bits 7 #else wc_encoding_mask \x00008080 wc_shift_bits 8 #endif use_stdc_env True force_convert_to_mb True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding ISO8859-5:GL; ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 #if WCHAR32 wc_encoding \x30000000 #else wc_encoding \x00008080 #endif ct_encoding ISO8859-5:GR } END XLC_XLOCALE libX11-1.6.3/nls/ja.SJIS/Compose.pre000064401431060000012000000005451247741723500171340ustar00alancstaff00002660200006XCOMM XCOMM ja.SJIS Compose Sequence XCOMM XCOMM Sequence Definition XCOMM XCOMM XCOMM This file currently has no entries. It appears that a compose file (even XCOMM just an empty one) is required for the appropriate keysyms to work for XCOMM this encoding. XCOMM XCOMM Means XCOMM Special Character XCOMM End of Sequence Definition libX11-1.6.3/nls/ja.SJIS/XLC_LOCALE.pre000064401431060000012000000332621247741723500171760ustar00alancstaff00002660200006XCOMM XCOMM XLocale Database Sample for ja_JP.sjis XCOMM #ifndef __uxp__ XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class (7 bit ASCII) fs0 { charset { name ISO8859-1:GL } font { primary ISO8859-1:GL substitute JISX0201.1976-0:GL vertical_rotate all } } XCOMM fs1 class (Kanji) fs1 { charset { name JISX0208.1983-0:GL } font { primary JISX0208.1983-0:GL substitute JISX0208.1990-0:GL } } XCOMM fs2 class (Half Kana) fs2 { charset { name JISX0201.1976-0:GR } font { primary JISX0201.1976-0:GR substitute JISX0201.1976-0:GR vertical_rotate all } } XCOMM fs3 class (Supplementary Kanji) XCOMM fs3 { XCOMM charset { XCOMM name JISX0212.1990-0:GL XCOMM } XCOMM font { XCOMM primary JISX0212.1990-0:GL XCOMM } XCOMM } END XLC_FONTSET XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name ja.sjis mb_cur_max 2 state_depend_encoding False #if WCHAR32 wc_encoding_mask \x30000000 wc_shift_bits 7 #else wc_encoding_mask \x00008080 wc_shift_bits 8 #endif use_stdc_env True force_convert_to_mb True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding ISO8859-1:GL; JISX0201.1976-0:GL } XCOMM cs1 class cs1 { side none length 2 byte1 \x81,\x9f;\xe0,\xef byte2 \x40,\x7e;\x80,\xfc #if WCHAR32 wc_encoding \x30000000 #else wc_encoding \x00008080 #endif ct_encoding JISX0208.1983-0:GL; JISX0208.1983-0:GR;\ JISX0208.1983-1:GL; JISX0208.1983-1:GR mb_conversion \ [\x8140,\x817e]->\x2121,[\x8180,\x819e]->\x2160,[\x819f,\x81fc]->\x2221,\ [\x8240,\x827e]->\x2321,[\x8280,\x829e]->\x2360,[\x829f,\x82fc]->\x2421,\ [\x8340,\x837e]->\x2521,[\x8380,\x839e]->\x2560,[\x839f,\x83fc]->\x2621,\ [\x8440,\x847e]->\x2721,[\x8480,\x849e]->\x2760,[\x849f,\x84fc]->\x2821,\ [\x8540,\x857e]->\x2921,[\x8580,\x859e]->\x2960,[\x859f,\x85fc]->\x2a21,\ [\x8640,\x867e]->\x2b21,[\x8680,\x869e]->\x2b60,[\x869f,\x86fc]->\x2c21,\ [\x8740,\x877e]->\x2d21,[\x8780,\x879e]->\x2d60,[\x879f,\x87fc]->\x2e21,\ [\x8840,\x887e]->\x2f21,[\x8880,\x889e]->\x2f60,[\x889f,\x88fc]->\x3021,\ [\x8940,\x897e]->\x3121,[\x8980,\x899e]->\x3160,[\x899f,\x89fc]->\x3221,\ [\x8a40,\x8a7e]->\x3321,[\x8a80,\x8a9e]->\x3360,[\x8a9f,\x8afc]->\x3421,\ [\x8b40,\x8b7e]->\x3521,[\x8b80,\x8b9e]->\x3560,[\x8b9f,\x8bfc]->\x3621,\ [\x8c40,\x8c7e]->\x3721,[\x8c80,\x8c9e]->\x3760,[\x8c9f,\x8cfc]->\x3821,\ [\x8d40,\x8d7e]->\x3921,[\x8d80,\x8d9e]->\x3960,[\x8d9f,\x8dfc]->\x3a21,\ [\x8e40,\x8e7e]->\x3b21,[\x8e80,\x8e9e]->\x3b60,[\x8e9f,\x8efc]->\x3c21,\ [\x8f40,\x8f7e]->\x3d21,[\x8f80,\x8f9e]->\x3d60,[\x8f9f,\x8ffc]->\x3e21,\ [\x9040,\x907e]->\x3f21,[\x9080,\x909e]->\x3f60,[\x909f,\x90fc]->\x4021,\ [\x9140,\x917e]->\x4121,[\x9180,\x919e]->\x4160,[\x919f,\x91fc]->\x4221,\ [\x9240,\x927e]->\x4321,[\x9280,\x929e]->\x4360,[\x929f,\x92fc]->\x4421,\ [\x9340,\x937e]->\x4521,[\x9380,\x939e]->\x4560,[\x939f,\x93fc]->\x4621,\ [\x9440,\x947e]->\x4721,[\x9480,\x949e]->\x4760,[\x949f,\x94fc]->\x4821,\ [\x9540,\x957e]->\x4921,[\x9580,\x959e]->\x4960,[\x959f,\x95fc]->\x4a21,\ [\x9640,\x967e]->\x4b21,[\x9680,\x969e]->\x4b60,[\x969f,\x96fc]->\x4c21,\ [\x9740,\x977e]->\x4d21,[\x9780,\x979e]->\x4d60,[\x979f,\x97fc]->\x4e21,\ [\x9840,\x987e]->\x4f21,[\x9880,\x989e]->\x4f60,[\x989f,\x98fc]->\x5021,\ [\x9940,\x997e]->\x5121,[\x9980,\x999e]->\x5160,[\x999f,\x99fc]->\x5221,\ [\x9a40,\x9a7e]->\x5321,[\x9a80,\x9a9e]->\x5360,[\x9a9f,\x9afc]->\x5421,\ [\x9b40,\x9b7e]->\x5521,[\x9b80,\x9b9e]->\x5560,[\x9b9f,\x9bfc]->\x5621,\ [\x9c40,\x9c7e]->\x5721,[\x9c80,\x9c9e]->\x5760,[\x9c9f,\x9cfc]->\x5821,\ [\x9d40,\x9d7e]->\x5921,[\x9d80,\x9d9e]->\x5960,[\x9d9f,\x9dfc]->\x5a21,\ [\x9e40,\x9e7e]->\x5b21,[\x9e80,\x9e9e]->\x5b60,[\x9e9f,\x9efc]->\x5c21,\ [\x9f40,\x9f7e]->\x5d21,[\x9f80,\x9f9e]->\x5d60,[\x9f9f,\x9ffc]->\x5e21,\ [\xe040,\xe07e]->\x5f21,[\xe080,\xe09e]->\x5f60,[\xe09f,\xe0fc]->\x6021,\ [\xe140,\xe17e]->\x6121,[\xe180,\xe19e]->\x6160,[\xe19f,\xe1fc]->\x6221,\ [\xe240,\xe27e]->\x6321,[\xe280,\xe29e]->\x6360,[\xe29f,\xe2fc]->\x6421,\ [\xe340,\xe37e]->\x6521,[\xe380,\xe39e]->\x6560,[\xe39f,\xe3fc]->\x6621,\ [\xe440,\xe47e]->\x6721,[\xe480,\xe49e]->\x6760,[\xe49f,\xe4fc]->\x6821,\ [\xe540,\xe57e]->\x6921,[\xe580,\xe59e]->\x6960,[\xe59f,\xe5fc]->\x6a21,\ [\xe640,\xe67e]->\x6b21,[\xe680,\xe69e]->\x6b60,[\xe69f,\xe6fc]->\x6c21,\ [\xe740,\xe77e]->\x6d21,[\xe780,\xe79e]->\x6d60,[\xe79f,\xe7fc]->\x6e21,\ [\xe840,\xe87e]->\x6f21,[\xe880,\xe89e]->\x6f60,[\xe89f,\xe8fc]->\x7021,\ [\xe940,\xe97e]->\x7121,[\xe980,\xe99e]->\x7160,[\xe99f,\xe9fc]->\x7221,\ [\xea40,\xea7e]->\x7321,[\xea80,\xea9e]->\x7360,[\xea9f,\xeafc]->\x7421,\ [\xeb40,\xeb7e]->\x7521,[\xeb80,\xeb9e]->\x7560,[\xeb9f,\xebfc]->\x7621,\ [\xec40,\xec7e]->\x7721,[\xec80,\xec9e]->\x7760,[\xec9f,\xecfc]->\x7821,\ [\xed40,\xed7e]->\x7921,[\xed80,\xed9e]->\x7960,[\xed9f,\xedfc]->\x7a21,\ [\xee40,\xee7e]->\x7b21,[\xee80,\xee9e]->\x7b60,[\xee9f,\xeefc]->\x7c21,\ [\xef40,\xef7e]->\x7d21,[\xef80,\xef9e]->\x7d60,[\xef9f,\xeffc]->\x7e21 } XCOMM cs2 class cs2 { side GR length 1 #if WCHAR32 wc_encoding \x10000000 #else wc_encoding \x00000080 #endif ct_encoding JISX0201.1976-0:GR } XCOMM cs3 class XCOMM cs3 { XCOMM side GR XCOMM length 2 XCOMM #if WCHAR32 XCOMM wc_encoding \x20000000 XCOMM #else XCOMM wc_encoding \x00008000 XCOMM #endif XCOMM ct_encoding JISX0212.1990-0:GL; JISX0212.1990-0:GR XCOMM } END XLC_XLOCALE #else /* __uxp__ */ XCOMM For UXP/DS plat form XCOMM XCOMM XLC_CHARSET_DEFINE category XCOMM XLC_CHARSET_DEFINE csd0 { charset_name u90x03.1991-0 side GL length 2 gc_number 94 string_encoding False sequence \x1b\x25\x28\x32 encoding_name fujitsu.U90X03 } csd1 { charset_name u90x03.1991-0 side GR length 2 gc_number 94 string_encoding False sequence \x1b\x25\x2f\x32 encoding_name fujitsu.U90X03 } END XLC_CHARSET_DEFINE XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class (7 bit ASCII) fs0 { charset { name JISX0201.1976-0:GL } font { primary JISX0201.1976-0:GL substitute ISO8859-1:GL vertical_rotate all } } XCOMM fs1 class (Kanji) fs1 { charset { name JISX0208.1983-0:GL } font { primary fujitsu.u90x01.1991-0:GL substitute u90x01.1991-0:GL;\ JISX0208.1983-0:GL; JISX0208.1983-0:GR;\ JISX0208.1983-1:GL; JISX0208.1983-1:GR;\ JISX0208.1990-0:GL; JISX0208.1990-0:GR vertical_map u90x01.1991-0.2:GL,\ [\x2122,\x2125]->\x7d21,[\x2131,\x2132]->\x7d25,\ [\x213c,\x213e]->\x7d27,[\x2141,\x215b]->\x7d2a,\ [\x2421,\x2421]->\x7d45,[\x2423,\x2423]->\x7d46,\ [\x2425,\x2425]->\x7d47,[\x2427,\x2427]->\x7d48,\ [\x2429,\x2429]->\x7d49,[\x2443,\x2443]->\x7d4a,\ [\x2463,\x2463]->\x7d4b,[\x2465,\x2465]->\x7d4c,\ [\x2467,\x2467]->\x7d4d,[\x246e,\x246e]->\x7d4e,\ [\x2521,\x2521]->\x7d4f,[\x2523,\x2523]->\x7d50,\ [\x2525,\x2525]->\x7d51,[\x2527,\x2527]->\x7d52,\ [\x2529,\x2529]->\x7d53,[\x2543,\x2543]->\x7d54,\ [\x2563,\x2563]->\x7d55,[\x2565,\x2565]->\x7d56,\ [\x2567,\x2567]->\x7d57,[\x256e,\x256e]->\x7d58,\ [\x2575,\x2576]->\x7d59,[\x2475,\x2476]->\x7d5b } } XCOMM fs2 class (Half Kana) fs2 { charset { name JISX0201.1976-0:GR } font { primary JISX0201.1976-0:GR vertical_rotate all } } XCOMM fs3 class (Supplementary Kanji) fs3 { charset { name u90x03.1991-0:GL; u90x03.1991-0:GR udc_area \x6521,\x787e } font { primary fujitsu.u90x03.1991-0:GL substitute u90x03.1991-0:GL;\ JISX0208.1983-0:GL; JISX0208.1983-0:GR;\ JISX0208.1983-1:GL; JISX0208.1983-1:GR;\ JISX0208.1990-0:GL; JISX0208.1990-0:GR } } END XLC_FONTSET XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name ja.sjis mb_cur_max 2 state_depend_encoding False wc_encoding_mask \x30000000 wc_shift_bits 7 XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding JISX0201.1976-0:GL; ISO8859-1:GL } XCOMM cs1 class cs1 { side none length 2 byte1 \x81,\x9f;\xe0,\xef byte2 \x40,\x7e;\x80,\xfc wc_encoding \x30000000 ct_encoding JISX0208.1983-0:GL; JISX0208.1983-0:GR;\ JISX0208.1983-1:GL; JISX0208.1983-1:GR mb_conversion \ [\x8140,\x817e]->\x2121,[\x8180,\x819e]->\x2160,[\x819f,\x81fc]->\x2221,\ [\x8240,\x827e]->\x2321,[\x8280,\x829e]->\x2360,[\x829f,\x82fc]->\x2421,\ [\x8340,\x837e]->\x2521,[\x8380,\x839e]->\x2560,[\x839f,\x83fc]->\x2621,\ [\x8440,\x847e]->\x2721,[\x8480,\x849e]->\x2760,[\x849f,\x84fc]->\x2821,\ [\x8540,\x857e]->\x2921,[\x8580,\x859e]->\x2960,[\x859f,\x85fc]->\x2a21,\ [\x8640,\x867e]->\x2b21,[\x8680,\x869e]->\x2b60,[\x869f,\x86fc]->\x2c21,\ [\x8740,\x877e]->\x2d21,[\x8780,\x879e]->\x2d60,[\x879f,\x87fc]->\x2e21,\ [\x8840,\x887e]->\x2f21,[\x8880,\x889e]->\x2f60,[\x889f,\x88fc]->\x3021,\ [\x8940,\x897e]->\x3121,[\x8980,\x899e]->\x3160,[\x899f,\x89fc]->\x3221,\ [\x8a40,\x8a7e]->\x3321,[\x8a80,\x8a9e]->\x3360,[\x8a9f,\x8afc]->\x3421,\ [\x8b40,\x8b7e]->\x3521,[\x8b80,\x8b9e]->\x3560,[\x8b9f,\x8bfc]->\x3621,\ [\x8c40,\x8c7e]->\x3721,[\x8c80,\x8c9e]->\x3760,[\x8c9f,\x8cfc]->\x3821,\ [\x8d40,\x8d7e]->\x3921,[\x8d80,\x8d9e]->\x3960,[\x8d9f,\x8dfc]->\x3a21,\ [\x8e40,\x8e7e]->\x3b21,[\x8e80,\x8e9e]->\x3b60,[\x8e9f,\x8efc]->\x3c21,\ [\x8f40,\x8f7e]->\x3d21,[\x8f80,\x8f9e]->\x3d60,[\x8f9f,\x8ffc]->\x3e21,\ [\x9040,\x907e]->\x3f21,[\x9080,\x909e]->\x3f60,[\x909f,\x90fc]->\x4021,\ [\x9140,\x917e]->\x4121,[\x9180,\x919e]->\x4160,[\x919f,\x91fc]->\x4221,\ [\x9240,\x927e]->\x4321,[\x9280,\x929e]->\x4360,[\x929f,\x92fc]->\x4421,\ [\x9340,\x937e]->\x4521,[\x9380,\x939e]->\x4560,[\x939f,\x93fc]->\x4621,\ [\x9440,\x947e]->\x4721,[\x9480,\x949e]->\x4760,[\x949f,\x94fc]->\x4821,\ [\x9540,\x957e]->\x4921,[\x9580,\x959e]->\x4960,[\x959f,\x95fc]->\x4a21,\ [\x9640,\x967e]->\x4b21,[\x9680,\x969e]->\x4b60,[\x969f,\x96fc]->\x4c21,\ [\x9740,\x977e]->\x4d21,[\x9780,\x979e]->\x4d60,[\x979f,\x97fc]->\x4e21,\ [\x9840,\x987e]->\x4f21,[\x9880,\x989e]->\x4f60,[\x989f,\x98fc]->\x5021,\ [\x9940,\x997e]->\x5121,[\x9980,\x999e]->\x5160,[\x999f,\x99fc]->\x5221,\ [\x9a40,\x9a7e]->\x5321,[\x9a80,\x9a9e]->\x5360,[\x9a9f,\x9afc]->\x5421,\ [\x9b40,\x9b7e]->\x5521,[\x9b80,\x9b9e]->\x5560,[\x9b9f,\x9bfc]->\x5621,\ [\x9c40,\x9c7e]->\x5721,[\x9c80,\x9c9e]->\x5760,[\x9c9f,\x9cfc]->\x5821,\ [\x9d40,\x9d7e]->\x5921,[\x9d80,\x9d9e]->\x5960,[\x9d9f,\x9dfc]->\x5a21,\ [\x9e40,\x9e7e]->\x5b21,[\x9e80,\x9e9e]->\x5b60,[\x9e9f,\x9efc]->\x5c21,\ [\x9f40,\x9f7e]->\x5d21,[\x9f80,\x9f9e]->\x5d60,[\x9f9f,\x9ffc]->\x5e21,\ [\xe040,\xe07e]->\x5f21,[\xe080,\xe09e]->\x5f60,[\xe09f,\xe0fc]->\x6021,\ [\xe140,\xe17e]->\x6121,[\xe180,\xe19e]->\x6160,[\xe19f,\xe1fc]->\x6221,\ [\xe240,\xe27e]->\x6321,[\xe280,\xe29e]->\x6360,[\xe29f,\xe2fc]->\x6421,\ [\xe340,\xe37e]->\x6521,[\xe380,\xe39e]->\x6560,[\xe39f,\xe3fc]->\x6621,\ [\xe440,\xe47e]->\x6721,[\xe480,\xe49e]->\x6760,[\xe49f,\xe4fc]->\x6821,\ [\xe540,\xe57e]->\x6921,[\xe580,\xe59e]->\x6960,[\xe59f,\xe5fc]->\x6a21,\ [\xe640,\xe67e]->\x6b21,[\xe680,\xe69e]->\x6b60,[\xe69f,\xe6fc]->\x6c21,\ [\xe740,\xe77e]->\x6d21,[\xe780,\xe79e]->\x6d60,[\xe79f,\xe7fc]->\x6e21,\ [\xe840,\xe87e]->\x6f21,[\xe880,\xe89e]->\x6f60,[\xe89f,\xe8fc]->\x7021,\ [\xe940,\xe97e]->\x7121,[\xe980,\xe99e]->\x7160,[\xe99f,\xe9fc]->\x7221,\ [\xea40,\xea7e]->\x7321,[\xea80,\xea9e]->\x7360,[\xea9f,\xeafc]->\x7421,\ [\xeb40,\xeb7e]->\x7521,[\xeb80,\xeb9e]->\x7560,[\xeb9f,\xebfc]->\x7621,\ [\xec40,\xec7e]->\x7721,[\xec80,\xec9e]->\x7760,[\xec9f,\xecfc]->\x7821,\ [\xed40,\xed7e]->\x7921,[\xed80,\xed9e]->\x7960,[\xed9f,\xedfc]->\x7a21,\ [\xee40,\xee7e]->\x7b21,[\xee80,\xee9e]->\x7b60,[\xee9f,\xeefc]->\x7c21,\ [\xef40,\xef7e]->\x7d21,[\xef80,\xef9e]->\x7d60,[\xef9f,\xeffc]->\x7e21 } XCOMM cs2 class cs2 { side GR length 1 wc_encoding \x10000000 ct_encoding JISX0201.1976-0:GR } XCOMM cs3 class cs3 { side none length 2 byte1 \xf0,\xfc byte2 \x40,\x7e;\x80,\xfc wc_encoding \x20000000 ct_encoding u90x03.1991-0:GL; u90x03.1991-0:GR mb_conversion \ [\xf040,\xf07e]->\x6521,[\xf080,\xf09e]->\x6560,[\xf09f,\xf0fc]->\x6621,\ [\xf140,\xf17e]->\x6721,[\xf180,\xf19e]->\x6760,[\xf19f,\xf1fc]->\x6821,\ [\xf240,\xf27e]->\x6921,[\xf280,\xf29e]->\x6960,[\xf29f,\xf2fc]->\x6a21,\ [\xf340,\xf37e]->\x6b21,[\xf380,\xf39e]->\x6b60,[\xf39f,\xf3fc]->\x6c21,\ [\xf440,\xf47e]->\x6d21,[\xf480,\xf49e]->\x6d60,[\xf49f,\xf4fc]->\x6e21,\ [\xf540,\xf57e]->\x6f21,[\xf580,\xf59e]->\x6f60,[\xf59f,\xf5fc]->\x7021,\ [\xf640,\xf67e]->\x7121,[\xf680,\xf69e]->\x7160,[\xf69f,\xf6fc]->\x7221,\ [\xf740,\xf77e]->\x7321,[\xf780,\xf79e]->\x7360,[\xf79f,\xf7fc]->\x7421,\ [\xf840,\xf87e]->\x7521,[\xf880,\xf89e]->\x7560,[\xf89f,\xf8fc]->\x7621,\ [\xf940,\xf97e]->\x7721,[\xf980,\xf99e]->\x7760,[\xf99f,\xf9fc]->\x7821,\ [\xfa40,\xfa7e]->\x7921,[\xfa80,\xfa9e]->\x7960,[\xfa9f,\xfafc]->\x7a21,\ [\xfb40,\xfb7e]->\x7b21,[\xfb80,\xfb9e]->\x7b60,[\xfb9f,\xfbfc]->\x7c21,\ [\xfc40,\xfc7e]->\x7d21,[\xfc80,\xfc9e]->\x7d60,[\xfc9f,\xfcfc]->\x7e21 } END XLC_XLOCALE #endif /* __uxp__ */ oding JISX0201.1976-0:GR } XCOMM cs3 class XCOMM cs3 { XCOMM side GR XCOMM length 2 XCOMM #if WCHAR32 XCOMM wc_encoding \x20000000 XCOMM #else XCOMM wc_encoding \x00008000 XCOMM #endif XCOMM ct_encoding JISX0212.1990-0:GL; JISX0212.1990-0:GR XCOMM } END XLC_XLOCALE #else /* __uxp__ */ XCOMM For UXP/DS plat form XCOMM XClibX11-1.6.3/nls/ja.SJIS/XI18N_OBJS000064401431060000012000000007411247741723500163640ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for ja locale # XLC ja_JP.PCK/xlibi18n_PCK _XlcGenericLoader # XLC_open XLC common/xlibi18n _XlcGenericLoader # XLC_open XIM common/ximp40 _Ximp_OpenIM # XIM_open XIM common/ximlocal _XimpLocalOpenIM # XIM_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_regiser XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/zh_TW.UTF-8/XI18N_OBJS000064401431060000012000000005311247741723500170550ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for zh_TW.UTF-8 locale # XLC common/xlcUTF8Load _XlcUtf8Loader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/zh_TW.UTF-8/XLC_LOCALE.pre000064401431060000012000000024361247741723500176710ustar00alancstaff00002660200006XCOMM XLocale Database Sample for zh_TW.UTF-8 XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET on_demand_loading True object_name generic XCOMM We leave the legacy encodings in for the moment, because we don't XCOMM have that many ISO10646 fonts yet. XCOMM fs0 class (7 bit ASCII) fs0 { charset { name ISO8859-1:GL } font { primary ISO8859-1:GL vertical_rotate all } } XCOMM fs1 class (ISO8859 families) fs1 { charset { name ISO8859-1:GR } font { primary ISO8859-1:GR } } XCOMM fs2 class (Chinese Han Character (Traditional)) fs2 { charset { name BIG5-0:GLGR } font { primary BIG5-0:GLGR substitute BIG5-0:GLGR } } XCOMM fs3 class fs3 { charset { name ISO10646-1 } font { primary ISO10646-1 } } END XLC_FONTSET XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name UTF-8 mb_cur_max 6 state_depend_encoding False XCOMM cs0 class cs0 { side GL:Default length 1 ct_encoding ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 ct_encoding ISO8859-1:GR } XCOMM cs2 class cs2 { side none length 2 ct_encoding BIG5-0:GLGR } XCOMM cs3 class cs3 { side none ct_encoding ISO10646-1 } END XLC_XLOCALE libX11-1.6.3/nls/zh_TW.UTF-8/Compose.pre000064401431060000012000000000601247741723500176200ustar00alancstaff00002660200006include "X11_LOCALEDATADIR/en_US.UTF-8/Compose" libX11-1.6.3/nls/iscii-dev/XI18N_OBJS000064401431060000012000000005251247741723500170770ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for iscii-dev locale # XLC common/xlcDef _XlcDefaultLoader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/iscii-dev/Compose.pre000064401431060000012000000000001247741723500176310ustar00alancstaff00002660200006libX11-1.6.3/nls/iscii-dev/XLC_LOCALE.pre000064401431060000012000000021071247741723500177030ustar00alancstaff00002660200006XCOMM XLocale Database Sample for mulelao-1. XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class (7 bit ASCII) fs0 { charset { name ISO8859-1:GL } font { primary ISCII-DEV:GL substitute ISO8859-1:GL } } XCOMM fs1 class fs1 { charset ISCII-DEV:GR font ISCII-DEV:GR } END XLC_FONTSET XCOMM XCOMM XLC_CHARSET_DEFINE category XCOMM XLC_CHARSET_DEFINE csd0 { charset_name ISCII-DEV side GR length 1 string_encoding False sequence \x1b%/1 } END XLC_CHARSET_DEFINE XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name ISCII-DEV mb_cur_max 1 state_depend_encoding False #if WCHAR32 wc_encoding_mask \x30000000 wc_shift_bits 7 #else wc_encoding_mask \x00008080 wc_shift_bits 8 #endif use_stdc_env True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding ISCII-DEV:GL; ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 #if WCHAR32 wc_encoding \x30000000 #else wc_encoding \x00008080 #endif ct_encoding ISCII-DEV:GR } END XLC_XLOCALE libX11-1.6.3/nls/sr_CS.UTF-8/XLC_LOCALE.pre000064401431060000012000000000001247741723500176300ustar00alancstaff00002660200006libX11-1.6.3/nls/sr_CS.UTF-8/XI18N_OBJS000064401431060000012000000004531247741723500170360ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for euro locales # XLC common/xlcUTF8Load _XlcUtf8Loader # XLC_open XOM common/xomLTRTTB _XomGenericOpenOM # XOM_open XIM common/xiiimp _SwitchOpenIM # XIM_open XIM common/xiiimp _XimpLocalOpenIM # XIM_open libX11-1.6.3/nls/sr_CS.UTF-8/Compose.pre000064401431060000012000000137101247741723500176040ustar00alancstaff00002660200006include "X11_LOCALEDATADIR/en_US.UTF-8/Compose" XCOMM Serbian accented Cyrillic XCOMM а А - U+0430, U+0410 Cyrillic_a, Cyrillic_A XCOMM е Е - U+0435, U+0415 Cyrillic_e, Cyrillic_E XCOMM о О - U+043E, U+041E Cyrillic_o, Cyrillic_O XCOMM у У - U+0443, U+0423 Cyrillic_u, Cyrillic_U XCOMM и И - U+0438, U+0418 Cyrillic_i, Cyrillic_I XCOMM XCOMM ̀ - U+0300 , , XCOMM ́ - U+0301 , , , XCOMM ̂ - U+0302 , XCOMM ̏ - U+030F , XCOMM ̀ - kratkouzlazni, U+0300 , , : "а̀" : "а̀" : "а̀" : "А̀" : "А̀" : "А̀" : "ѐ" : "ѐ" : "ѐ" : "Ѐ" : "Ѐ" : "Ѐ" : "ѝ" : "ѝ" : "ѝ" : "Ѝ" : "Ѝ" : "Ѝ" : "о̀" : "о̀" : "о̀" : "О̀" : "О̀" : "О̀" : "у̀" : "у̀" : "у̀" : "У̀" : "У̀" : "У̀" XCOMM ́ - dugouzlazni, U+0301 , , , : "а́" : "а́" : "а́" : "а́" : "А́" : "А́" : "А́" : "А́" : "е́" : "е́" : "е́" : "е́" : "Е́" : "Е́" : "Е́" : "Е́" : "и́" : "и́" : "и́" : "и́" : "И́" : "И́" : "И́" : "И́" : "о́" : "о́" : "о́" : "о́" : "О́" : "О́" : "О́" : "О́" : "у́" : "у́" : "у́" : "у́" : "У́" : "У́" : "У́" : "У́" XCOMM ̂ - dugosilazni, U+0302 , : "а̂" : "а̂" : "А̂" : "А̂" : "е̂" : "е̂" : "Е̂" : "Е̂" : "и̂" : "и̂" : "И̂" : "И̂" : "о̂" : "о̂" : "О̂" : "О̂" : "у̂" : "у̂" : "У̂" : "У̂" XCOMM ̏ - kratkosilazni, U+030F , XCOMM there's no appropriate dead_doublegrave, so we use these two dead keys : "а̏" : "а̏" : "А̏" : "А̏" : "е̏" : "е̏" : "Е̏" : "Е̏" : "и̏" : "и̏" : "И̏" : "И̏" : "о̏" : "о̏" : "О̏" : "О̏" : "у̏" : "у̏" : "У̏" : "У̏" rillic_U> : "У̀" XCOMM ́ - dugouzlazni, U+0301 : "`" grave : " " space : "~" asciitilde : "'" apostrophe : "\264" acute XCOMM Accented Alphabet : "\300" Agrave : "\340" agrave : "\304" Ahook : "\344" ahook : "\303" Atilde : "\343" atilde : "\301" Aacute : "\341" aacute : "\200" Abelowdot : "\325" abelowdot : "\202" Abrevegrave : "\242" abrevegrave : "\002" Abrevehook : "\306" abrevehook : "\005" Abrevetilde : "\307" abrevetilde : "\201" Abreveacute : "\241" abreveacute : "\203" Abrevebelowdot : "\243" abrevebelowdot : "\205" Acircumflexgrave : "\245" acircumflexgrave : "\206" Acircumflexhook : "\246" acircumflexhook : "\006" Acircumflextilde : "\347" acircumflextilde : "\204" Acircumflexacute : "\244" acircumflexacute : "\207" Acircumflexbelowdot : "\247" acircumflexbelowdot : "\310" Egrave : "\350" egrave : "\313" Ehook : "\353" ehook : "\210" Etilde : "\250" etilde : "\311" Eacute : "\351" eacute : "\211" Ebelowdot : "\251" ebelowdot : "\213" Ecircumflexgrave : "\253" ecircumflexgrave : "\214" Ecircumflexhook : "\254" ecircumflexhook : "\215" Ecircumflextilde : "\255" ecircumflextilde : "\212" Ecircumflexacute : "\252" ecircumflexacute : "\216" Ecircumflexbelowdot : "\256" ecircumflexbelowdot : "\314" Igrave : "\354" igrave : "\233" Ihook : "\357" ihook : "\316" Itilde : "\356" itilde : "\315" Iacute : "\355" iacute : "\230" Ibelowdot : "\270" ibelowdot : "\322" Ograve : "\362" ograve : "\231" Ohook : "\366" ohook : "\240" Otilde : "\365" otilde : "\323" Oacute : "\363" oacute : "\232" Obelowdot : "\367" obelowdot : "\220" Ocircumflexgrave : "\260" ocircumflexgrave : "\221" Ocircumflexhook : "\261" ocircumflexhook : "\222" Ocircumflextilde : "\262" ocircumflextilde : "\217" Ocircumflexacute : "\257" ocircumflexacute : "\223" Ocircumflexbelowdot : "\265" ocircumflexbelowdot : "\226" Ohorngrave : "\266" ohorngrave : "\227" Ohornhook : "\267" ohornhook : "\263" Ohorntilde : "\336" ohorntilde : "\225" Ohornacute : "\276" ohornacute : "\224" Ohornbelowdot : "\376" ohornbelowdot : "\331" Ugrave : "\371" ugrave : "\234" Uhook : "\374" uhook : "\235" Utilde : "\373" utilde : "\332" Uacute : "\372" uacute : "\236" Ubelowdot : "\370" ubelowdot : "\273" Uhorngrave : "\327" uhorngrave : "\274" Uhornhook : "\330" uhornhook : "\377" Uhorntilde : "\346" uhorntilde : "\272" Uhornacute : "\321" uhornacute : "\271" Uhornbelowdot : "\361" uhornbelowdot : "\237" Ygrave : "\317" ygrave : "\024" Yhook : "\326" yhook : "\031" Ytilde : "\333" ytilde : "\335" Yacute : "\375" yacute : "\036" Ybelowdot : "\334" ybelowdot XCOMM End of Sequence Definition "\005" Abrevetilde : "\307" abrevetilde Means XCOMM Special Character XCOMM End of Sequence Definition libX11-1.6.3/nls/zh_HK.big5hkscs/XLC_LOCALE.pre000064401431060000012000000022171247741723500207150ustar00alancstaff00002660200006XCOMM XCOMM (c) 1996, X11R6 L10N for Taiwan and Big5 Encoding Project XCOMM XCOMM modified for X11R6.3 by Hung-Chi Chu 1998/01/10 XCOMM modified for Big5HKSCS by Roger So XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class (7 bit ASCII) fs0 { charset { name ISO8859-1:GL } font { primary ISO8859-1:GL vertical_rotate all } } XCOMM fs1 class (HKSCS extensions) fs1 { charset { name BIG5HKSCS-0:GLGR } font { primary BIG5HKSCS-0:GLGR substitute BIG5HKSCS-0:GLGR } } END XLC_FONTSET XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name zh_HK.big5hkscs mb_cur_max 2 state_depend_encoding False wc_encoding_mask \x00008000 wc_shift_bits 8 use_stdc_env True force_convert_to_mb True +XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding ISO8859-1:GL } XCOMM cs1 class cs1 { side none length 2 byte1 \x85,\xfe byte2 \x40,\x7e;\xa1,\xfe wc_encoding \x00008000 ct_encoding BIG5HKSCS-0:GLGR:\x1b\x25\x2f\x32 mb_conversion [\x8540,\xfefe]->\x0540 ct_conversion [\x0540,\x7efe]->\x8540 } END XLC_XLOCALE libX11-1.6.3/nls/armscii-8/Compose.pre000064401431060000012000000005471247741723500175710ustar00alancstaff00002660200006XCOMM XCOMM ARMSCII-8 Compose Sequence XCOMM XCOMM Sequence Definition XCOMM XCOMM XCOMM This file currently has no entries. It appears that a compose file (even XCOMM just an empty one) is required for the appropriate keysyms to work for XCOMM this encoding. XCOMM XCOMM Means XCOMM Special Character XCOMM End of Sequence Definition libX11-1.6.3/nls/armscii-8/XLC_LOCALE.pre000064401431060000012000000021071247741723500176230ustar00alancstaff00002660200006XCOMM XLocale Database Sample for armscii-8. XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class (7 bit ASCII) fs0 { charset { name ISO8859-1:GL } font { primary ARMSCII-8:GL substitute ISO8859-1:GL } } XCOMM fs1 class fs1 { charset ARMSCII-8:GR font ARMSCII-8:GR } END XLC_FONTSET XCOMM XCOMM XLC_CHARSET_DEFINE category XCOMM XLC_CHARSET_DEFINE csd0 { charset_name ARMSCII-8 side GR length 1 string_encoding False sequence \x1b%/1 } END XLC_CHARSET_DEFINE XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name ARMSCII-8 mb_cur_max 1 state_depend_encoding False #if WCHAR32 wc_encoding_mask \x30000000 wc_shift_bits 7 #else wc_encoding_mask \x00008080 wc_shift_bits 8 #endif use_stdc_env True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding ARMSCII-8:GL; ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 #if WCHAR32 wc_encoding \x30000000 #else wc_encoding \x00008080 #endif ct_encoding ARMSCII-8:GR } END XLC_XLOCALE libX11-1.6.3/nls/armscii-8/XI18N_OBJS000064401431060000012000000005251247741723500170170ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for armscii-8 locale # XLC common/xlcDef _XlcDefaultLoader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/iso8859-2/Compose.pre000064401431060000012000000562461247741723500172730ustar00alancstaff00002660200006XCOMM XCOMM ISO 8859-2 (Latin2) Compose Sequence XCOMM XCOMM XCOMM Sequence Definition XCOMM XCOMM Means XCOMM Special Character : "#" numbersign : "'" apostrophe : "'" apostrophe : "@" at : "[" bracketleft : "\\" backslash : "\\" backslash : "\\" backslash : "]" bracketright : "^" asciicircum : "^" asciicircum : "^" asciicircum : "^" asciicircum : "`" grave : "`" grave : "{" braceleft : "{" braceleft : "|" bar : "|" bar : "|" bar : "|" bar : "|" bar : "|" bar : "}" braceright : "}" braceright : "~" asciitilde : "~" asciitilde : "~" asciitilde : "~" asciitilde : "\244" currency : "\244" currency : "\244" currency : "\244" currency : "\244" currency : "\244" currency : "\244" currency : "\244" currency <0> : "\244" currency <0> : "\244" currency <0> : "\244" currency <0> : "\244" currency

: "\266" paragraph

: "\266" paragraph

: "\266" paragraph

: "\266" paragraph XCOMM Right-hand side (Accented Alphabet) XCOMM These compose sequences are pure supposition on my part. XCOMM It would be nice to know what the real cultural conventions XCOMM are for compose sequences. : "\241" Aogonek : "\241" Aogonek : "\241" Aogonek : "\241" Aogonek : "\242" breve : "\243" Lstroke : "\245" Lcaron : "\245" Lcaron : "\245" Lcaron : "\245" Lcaron : "\246" Sacute : "\246" Sacute : "\246" Sacute : "\246" Sacute : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section <0> : "\247" section <0> : "\247" section <0> : "\247" section <0> : "\247" section : "\250" diaeresis : "\251" Scaron : "\251" Scaron : "\251" Scaron : "\251" Scaron : "\252" Scedilla : "\252" Scedilla : "\252" Scedilla : "\252" Scedilla : "\253" Tcaron : "\253" Tcaron : "\253" Tcaron : "\253" Tcaron : "\254" Zacute : "\254" Zacute : "\254" Zacute : "\254" Zacute : "\255" hyphen : "\256" Zcaron : "\256" Zcaron : "\256" Zcaron : "\256" Zcaron : "\257" Zabovedot <0> : "\260" degree <0> : "\260" degree : "\261" aogonek : "\261" aogonek : "\261" aogonek : "\261" aogonek : "\263" lstroke : "\265" lcaron : "\265" lcaron : "\265" lcaron : "\265" lcaron : "\266" sacute : "\266" sacute : "\266" sacute : "\266" sacute : "\267" caron : "\270" cedilla : "\271" scaron : "\271" scaron : "\271" scaron : "\271" scaron : "\272" scedilla : "\272" scedilla : "\272" scedilla : "\272" scedilla : "\273" tcaron : "\273" tcaron : "\273" tcaron : "\273" tcaron : "\274" zacute : "\274" zacute : "\274" zacute : "\274" zacute : "\275" doubleacute : "\275" doubleacute : "\276" zcaron : "\276" zcaron : "\276" zcaron : "\276" zcaron : "\277" zabovedot : "\300" Racute : "\300" Racute : "\300" Racute : "\300" Racute : "\301" Aacute : "\301" Aacute : "\301" Aacute : "\301" Aacute : "\302" Acircumflex : "\302" Acircumflex : "\302" Acircumflex : "\302" Acircumflex : "\303" Abreve : "\303" Abreve : "\303" Abreve : "\304" Adiaeresis : "\304" Adiaeresis : "\305" Lacute : "\305" Lacute : "\305" Lacute : "\305" Lacute : "\306" Cacute : "\306" Cacute : "\306" Cacute : "\306" Cacute : "\307" Ccedilla : "\307" Ccedilla : "\307" Ccedilla : "\307" Ccedilla : "\310" Ccaron : "\310" Ccaron : "\310" Ccaron : "\310" Ccaron : "\311" Eacute : "\311" Eacute : "\311" Eacute : "\311" Eacute : "\312" Eogonek : "\312" Eogonek : "\312" Eogonek : "\312" Eogonek : "\313" Ediaeresis : "\313" Ediaeresis : "\314" Ecaron : "\314" Ecaron : "\314" Ecaron : "\314" Ecaron : "\315" Iacute : "\315" Iacute : "\315" Iacute : "\315" Iacute : "\316" Icircumflex : "\316" Icircumflex : "\316" Icircumflex : "\316" Icircumflex : "\317" Dcaron : "\317" Dcaron : "\317" Dcaron : "\317" Dcaron : "\320" Dstroke : "\320" Dstroke : "\321" Nacute : "\321" Nacute : "\321" Nacute : "\321" Nacute : "\322" Ncaron : "\322" Ncaron : "\322" Ncaron : "\322" Ncaron : "\323" Oacute : "\323" Oacute : "\323" Oacute : "\323" Oacute : "\324" Ocircumflex : "\324" Ocircumflex : "\324" Ocircumflex : "\324" Ocircumflex : "\325" Odoubleacute : "\325" Odoubleacute : "\326" Odiaeresis : "\326" Odiaeresis : "\327" multiply : "\330" Rcaron : "\330" Rcaron : "\330" Rcaron : "\330" Rcaron : "\331" Uring : "\331" Uring : "\332" Uacute : "\332" Uacute : "\332" Uacute : "\332" Uacute : "\333" Udoubleacute : "\333" Udoubleacute : "\334" Udiaeresis : "\334" Udiaeresis : "\335" Yacute : "\335" Yacute : "\335" Yacute : "\335" Yacute : "\336" Tcedilla : "\336" Tcedilla : "\336" Tcedilla : "\336" Tcedilla : "\337" ssharp : "\340" racute : "\340" racute : "\340" racute : "\340" racute : "\341" aacute : "\341" aacute : "\341" aacute : "\341" aacute : "\342" acircumflex : "\342" acircumflex : "\342" acircumflex : "\342" acircumflex : "\343" abreve : "\343" abreve : "\343" abreve : "\344" adiaeresis : "\344" adiaeresis : "\345" lacute : "\345" lacute : "\345" lacute : "\345" lacute : "\346" cacute : "\346" cacute : "\346" cacute : "\346" cacute : "\347" ccedilla : "\347" ccedilla : "\347" ccedilla : "\347" ccedilla : "\350" ccaron : "\350" ccaron : "\350" ccaron : "\350" ccaron : "\351" eacute : "\351" eacute : "\351" eacute : "\351" eacute : "\352" eogonek : "\352" eogonek : "\352" eogonek : "\352" eogonek : "\353" ediaeresis : "\353" ediaeresis : "\354" ecaron : "\354" ecaron : "\354" ecaron : "\354" ecaron : "\355" iacute : "\355" iacute : "\355" iacute : "\355" iacute : "\356" icircumflex : "\356" icircumflex : "\356" icircumflex : "\356" icircumflex : "\357" dcaron : "\357" dcaron : "\357" dcaron : "\357" dcaron : "\360" dstroke : "\360" dstroke : "\361" nacute : "\361" nacute : "\361" nacute : "\361" nacute : "\362" ncaron : "\362" ncaron : "\362" ncaron : "\362" ncaron : "\363" oacute : "\363" oacute : "\363" oacute : "\363" oacute : "\364" ocircumflex : "\364" ocircumflex : "\364" ocircumflex : "\364" ocircumflex : "\365" odoubleacute : "\365" odoubleacute : "\366" odiaeresis : "\366" odiaeresis : "\367" division : "\367" division : "\370" rcaron : "\370" rcaron : "\370" rcaron : "\370" rcaron : "\371" uring : "\371" uring : "\372" uacute : "\372" uacute : "\372" uacute : "\372" uacute : "\373" udoubleacute : "\373" udoubleacute : "\374" udiaeresis : "\374" udiaeresis : "\375" yacute : "\375" yacute : "\375" yacute : "\375" yacute : "\376" tcedilla : "\376" tcedilla : "\376" tcedilla : "\376" tcedilla : "\377" abovedot : "\301" Aacute : "\306" Cacute : "\311" Eacute : "\315" Iacute : "\305" Lacute : "\321" Nacute : "\323" Oacute : "\300" Racute : "\246" Sacute : "\332" Uacute : "\335" Yacute : "\254" Zacute : "\341" aacute : "\346" cacute : "\351" eacute : "\355" iacute : "\345" lacute : "\361" nacute : "\363" oacute : "\340" racute : "\266" sacute : "\372" uacute : "\375" yacute : "\274" zacute : "\303" Abreve : "\343" abreve : "\304" Adiaeresis : "\313" Ediaeresis : "\326" Odiaeresis : "\334" Udiaeresis : "\344" adiaeresis : "\353" ediaeresis : "\366" odiaeresis : "\374" udiaeresis : "\331" Uring : "\371" uring : "\325" Odoubleacute : "\333" Udoubleacute : "\365" odoubleacute : "\373" udoubleacute : "\310" Ccaron : "\317" Dcaron : "\314" Ecaron : "\245" Lcaron : "\322" Ncaron : "\330" Rcaron : "\251" Scaron : "\253" Tcaron : "\256" Zcaron : "\350" ccaron : "\357" dcaron : "\354" ecaron : "\265" lcaron : "\362" ncaron : "\370" rcaron : "\271" scaron : "\273" tcaron : "\276" zcaron : "\252" Scedilla : "\307" Ccedilla : "\336" Tcedilla : "\347" ccedilla : "\272" scedilla : "\376" tcedilla XCOMM those are for ease of use : "\331" Uring : "\371" uring : "\331" Uring : "\371" uring XCOMM traditional sequences : "\274" OE : "\275" oe : "\305" Aring : "\345" aring : "\260" degree : "\260" degree : "\260" degree : "\260" degree : "\245" Itilde : "\265" itilde : "\303" Atilde : "\325" Otilde : "\335" Utilde : "\343" atilde : "\365" otilde : "\375" utilde : "\321" Ntilde : "\361" ntilde : "~" asciitilde : "~" asciitilde : "~" asciitilde : "~" asciitilde : "\267" caron : "\267" caron : "\267" caron : "\267" caron : "\302" Acircumflex : "\316" Icircumflex : "\324" Ocircumflex : "\333" Ucircumflex : "\342" acircumflex : "\356" icircumflex : "\364" ocircumflex : "\373" ucircumflex : "\136" asciicircum : "\136" asciicircum : "\136" asciicircum : "\136" asciicircum : "\253" Gbreve : "\273" gbreve : "\335" Ubreve : "\375" ubreve : "\242" breve : "\242" breve : "\242" breve : "\242" breve : "\241" Aogonek : "\307" Iogonek : "\312" Eogonek : "\331" Uogonek : "\261" aogonek : "\347" iogonek : "\352" eogonek : "\371" uogonek : "\662" ogonek : "\662" ogonek : "\662" ogonek : "\662" ogonek : "\300" Agrave : "\340" agrave : "\310" Egrave : "\350" egrave : "\314" Igrave : "\354" igrave : "\322" Ograve : "\362" ograve : "\331" Ugrave : "\371" ugrave : "`" grave : "`" grave : "`" grave : "`" grave : "\305" Cabovedot : "\345" cabovedot : "\251" Iabovedot : "\271" idotless : "\257" Zabovedot : "\277" zabovedot : "\314" Eabovedot : "\354" eabovedot : "\377" abovedot : "\377" abovedot : "\377" abovedot : "\377" abovedot : "\264" acute : "\264" acute : "\264" acute : "\264" acute : "\675" doubleacute : "\675" doubleacute : "\675" doubleacute : "\675" doubleacute : "\317" Idiaeresis : "\357" idiaeresis : "\377" ydiaeresis : "\250" diaeresis : "\250" diaeresis : "\250" diaeresis : "\250" diaeresis : "\270" cedilla : "\270" cedilla : "\270" cedilla : "\270" cedilla : "\257" macron : "\257" macron : "\257" macron : "\257" macron XCOMM End of Sequence Definition : "\357" dcaron : "\360" dstroke : "\360" dstroke : "\361" nacute : "\361" nacute : "\361" nacute : "\361" nacute : "\362" ncaron libX11-1.6.3/nls/iso8859-2/XI18N_OBJS000064401431060000012000000003701247741723500165100ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for euro locales # XLC common/xlibi18n _XlcGenericLoader # XLC_open XIM common/xiiimp _XimpLocalOpenIM # XIM_open XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/iso8859-2/XLC_LOCALE.pre000064401431060000012000000016521247741723500173220ustar00alancstaff00002660200006XCOMM XLocale Database Sample for iso8859-2. XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class fs0 { charset { name ISO8859-1:GL } font { primary ISO8859-2:GL substitute ISO8859-1:GL vertical_rotate all } } XCOMM fs1 class fs1 { charset { name ISO8859-2:GR } font { primary ISO8859-2:GR } } END XLC_FONTSET XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name ISO8859-2 mb_cur_max 1 state_depend_encoding False #if WCHAR32 wc_encoding_mask \x30000000 wc_shift_bits 7 #else wc_encoding_mask \x00008080 wc_shift_bits 8 #endif use_stdc_env True force_convert_to_mb True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding ISO8859-2:GL; ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 #if WCHAR32 wc_encoding \x30000000 #else wc_encoding \x00008080 #endif ct_encoding ISO8859-2:GR } END XLC_XLOCALE libX11-1.6.3/nls/iso8859-8/Compose.pre000064401431060000012000000005501247741723500172640ustar00alancstaff00002660200006XCOMM XCOMM ISO 8859-8 Compose Sequence XCOMM XCOMM Sequence Definition XCOMM XCOMM XCOMM This file currently has no entries. It appears that a compose file (even XCOMM just an empty one) is required for the appropriate keysyms to work for XCOMM this encoding. XCOMM XCOMM Means XCOMM Special Character XCOMM End of Sequence Definition libX11-1.6.3/nls/iso8859-8/XI18N_OBJS000064401431060000012000000005251247741723500165200ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for iso8859-8 locale # XLC common/xlcDef _XlcDefaultLoader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/iso8859-8/XLC_LOCALE.pre000064401431060000012000000016521247741723500173300ustar00alancstaff00002660200006XCOMM XLocale Database Sample for iso8859-8. XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class fs0 { charset { name ISO8859-1:GL } font { primary ISO8859-8:GL substitute ISO8859-1:GL vertical_rotate all } } XCOMM fs1 class fs1 { charset { name ISO8859-8:GR } font { primary ISO8859-8:GR } } END XLC_FONTSET XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name ISO8859-8 mb_cur_max 1 state_depend_encoding False #if WCHAR32 wc_encoding_mask \x30000000 wc_shift_bits 7 #else wc_encoding_mask \x00008080 wc_shift_bits 8 #endif use_stdc_env True force_convert_to_mb True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding ISO8859-8:GL; ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 #if WCHAR32 wc_encoding \x30000000 #else wc_encoding \x00008080 #endif ct_encoding ISO8859-8:GR } END XLC_XLOCALE libX11-1.6.3/nls/th_TH/Compose.pre000064401431060000012000000000001247741723500167630ustar00alancstaff00002660200006libX11-1.6.3/nls/th_TH/XI18N_OBJS000064401431060000012000000005211247741723500162250ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for th_TH locale # XLC common/xlcDef _XlcDefaultLoader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/th_TH/XLC_LOCALE.pre000064401431060000012000000016551247741723500170440ustar00alancstaff00002660200006XCOMM XLocale Database Sample for th_TH XCOMM XCOMM XCOMM Modified from origial th_TH.TACTIS XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class (7 bit ASCII) fs0 { charset ISO8859-1:GL font ISO8859-1:GL } XCOMM fs1 class (Thai) fs1 { charset ISO8859-11:GR font ISO8859-11:GR } END XLC_FONTSET XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name TIS620 mb_cur_max 1 state_depend_encoding False #if WCHAR32 wc_encoding_mask \x30000000 wc_shift_bits 7 #else wc_encoding_mask \x00008080 wc_shift_bits 8 #endif use_stdc_env True force_convert_to_mb True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 #if WCHAR32 wc_encoding \x30000000 #else wc_encoding \x00008080 #endif ct_encoding ISO8859-11:GR } END XLC_XLOCALE libX11-1.6.3/nls/iso8859-13/XI18N_OBJS000064401431060000012000000003701247741723500165720ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for euro locales # XLC common/xlibi18n _XlcGenericLoader # XLC_open XIM common/xiiimp _XimpLocalOpenIM # XIM_open XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/iso8859-13/Compose.pre000064401431060000012000000514651247741723500173530ustar00alancstaff00002660200006XCOMM XCOMM ISO 8859-13 (Latin7) Compose Sequence XCOMM XCOMM Sequence Definition XCOMM XCOMM Means XCOMM Special Character XCOMM Right-hand side (Accented Alphabet) XCOMM These compose sequences are pure supposition on my part. XCOMM It would be nice to know what the real cultural conventions XCOMM are for compose sequences. : "#" numbersign : "'" apostrophe : "'" apostrophe : "@" at : "[" bracketleft : "\\" backslash : "\\" backslash : "\\" backslash : "]" bracketright : "^" asciicircum : "^" asciicircum : "^" asciicircum : "^" asciicircum : "`" grave : "`" grave : "`" grave : "`" grave : "{" braceleft : "{" braceleft : "|" bar : "|" bar : "}" braceright : "}" braceright : "~" asciitilde : "~" asciitilde : "~" asciitilde : "~" asciitilde : "\241" rightdoublequotemark : "\241" rightdoublequotemark : "\245" doublelowquotemark : "\245" doublelowquotemark : "\264" leftdoublequotemark : "\264" leftdoublequotemark : "\253" guillemotleft : "\273" guillemotright : "\377" rightsinglequotemark : "\377" rightsinglequotemark : "\377" rightsinglequotemark : "\242" cent : "\242" cent : "\242" cent : "\242" cent : "\242" cent : "\242" cent : "\242" cent : "\242" cent : "\243" sterling : "\243" sterling : "\243" sterling : "\243" sterling : "\251" copyright : "\251" copyright : "\251" copyright : "\251" copyright : "\251" copyright : "\251" copyright : "\251" copyright : "\251" copyright <0> : "\251" copyright <0> : "\251" copyright <0> : "\251" copyright <0> : "\251" copyright : "\251" copyright : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section <0> : "\247" section <0> : "\247" section <0> : "\247" section <0> : "\247" section : "\244" currency : "\244" currency : "\244" currency : "\244" currency : "\244" currency : "\244" currency : "\244" currency : "\244" currency <0> : "\244" currency <0> : "\244" currency <0> : "\244" currency <0> : "\244" currency <0> : "\260" degree <0> : "\260" degree <0> : "\260" degree <0> : "\260" degree : "\261" plusminus : "\261" plusminus : "\265" mu : "\265" mu : "\265" mu : "\265" mu : "\265" mu <1> : "\271" onesuperior <1> : "\271" onesuperior <1> : "\271" onesuperior <1> : "\271" onesuperior <1> : "\271" onesuperior <1> : "\271" onesuperior <2> : "\262" twosuperior <2> : "\262" twosuperior <2> : "\262" twosuperior <2> : "\262" twosuperior <2> : "\262" twosuperior <2> : "\262" twosuperior <3> : "\263" threesuperior <3> : "\263" threesuperior <3> : "\263" threesuperior <3> : "\263" threesuperior <3> : "\263" threesuperior <3> : "\263" threesuperior

: "\266" paragraph

: "\266" paragraph

: "\266" paragraph

: "\266" paragraph : "\267" periodcentered : "\267" periodcentered : "\267" periodcentered <1> <4> : "\274" onequarter <1> <2> : "\275" onehalf <3> <4> : "\276" threequarters : "\277" questiondown : "\240" nobreakspace : "\246" brokenbar : "\246" brokenbar : "\246" brokenbar : "\246" brokenbar : "\246" brokenbar : "\246" brokenbar : "\246" brokenbar : "\254" notsign : "\254" notsign : "\255" hyphen : "\256" registered : "\256" registered : "\256" registered : "\367" division : "\367" division : "\327" multiply XCOMM Accented Alphabet : "\300" Aogonek : "\300" Aogonek : "\300" Aogonek : "\300" Aogonek : "\252" Rcedilla : "\252" Rcedilla : "\252" Rcedilla : "\252" Rcedilla : "\317" Lcedilla : "\317" Lcedilla : "\317" Lcedilla : "\317" Lcedilla : "\320" Scaron : "\320" Scaron : "\307" Emacron : "\307" Emacron : "\307" Emacron : "\307" Emacron : "\314" Gcedilla : "\314" Gcedilla : "\314" Gcedilla : "\314" Gcedilla : "\336" Zcaron : "\336" Zcaron : "\340" aogonek : "\340" aogonek : "\340" aogonek : "\340" aogonek : "\272" rcedilla : "\272" rcedilla : "\272" rcedilla : "\272" rcedilla : "\357" lcedilla : "\357" lcedilla : "\357" lcedilla : "\357" lcedilla : "\360" scaron : "\360" scaron : "\347" emacron : "\347" emacron : "\347" emacron : "\347" emacron : "\354" gcedilla : "\354" gcedilla : "\354" gcedilla : "\354" gcedilla : "\376" zcaron : "\376" zcaron : "\302" Amacron : "\302" Amacron : "\302" Amacron : "\302" Amacron : "\304" Adiaeresis : "\304" Adiaeresis : "\305" Aring : "\305" Aring : "\305" Aring : "\305" Aring : "\257" AE : "\301" Iogonek : "\301" Iogonek : "\301" Iogonek : "\301" Iogonek : "\310" Ccaron : "\310" Ccaron : "\311" Eacute : "\311" Eacute : "\311" Eacute : "\311" Eacute : "\306" Eogonek : "\306" Eogonek : "\306" Eogonek : "\306" Eogonek : "\313" Eabovedot : "\313" Eabovedot : "\316" Imacron : "\316" Imacron : "\316" Imacron : "\316" Imacron : "\322" Ncedilla : "\322" Ncedilla : "\322" Ncedilla : "\322" Ncedilla : "\324" Omacron : "\324" Omacron : "\324" Omacron : "\324" Omacron : "\315" Kcedilla : "\315" Kcedilla : "\315" Kcedilla : "\315" Kcedilla : "\325" Otilde : "\325" Otilde : "\326" Odiaeresis : "\326" Odiaeresis : "\250" Ooblique : "\250" Ooblique : "\330" Uogonek : "\330" Uogonek : "\330" Uogonek : "\330" Uogonek : "\334" Udiaeresis : "\334" Udiaeresis : "\333" Umacron : "\333" Umacron : "\333" Umacron : "\333" Umacron : "\337" ssharp : "\342" amacron : "\342" amacron : "\342" amacron : "\342" amacron : "\344" adiaeresis : "\344" adiaeresis : "\345" aring : "\345" aring : "\345" aring : "\345" aring : "\277" ae : "\341" iogonek : "\341" iogonek : "\341" iogonek : "\341" iogonek : "\350" ccaron : "\350" ccaron : "\351" eacute : "\351" eacute : "\351" eacute : "\351" eacute : "\346" eogonek : "\346" eogonek : "\346" eogonek : "\346" eogonek : "\353" eabovedot : "\353" eabovedot : "\356" imacron : "\356" imacron : "\356" imacron : "\356" imacron : "\362" ncedilla : "\362" ncedilla : "\362" ncedilla : "\362" ncedilla : "\364" omacron : "\364" omacron : "\364" omacron : "\364" omacron : "\355" kcedilla : "\355" kcedilla : "\355" kcedilla : "\355" kcedilla : "\365" otilde : "\365" otilde : "\366" odiaeresis : "\366" odiaeresis : "\270" ooblique : "\270" ooblique : "\370" uogonek : "\370" uogonek : "\370" uogonek : "\370" uogonek : "\374" udiaeresis : "\374" udiaeresis : "\373" umacron : "\373" umacron : "\373" umacron : "\373" umacron : "\303" Cacute : "\303" Cacute : "\343" cacute : "\343" cacute : "\323" Oacute : "\323" Oacute : "\363" oacute : "\363" oacute : "\312" Zacute : "\312" Zacute : "\352" zacute : "\352" zacute : "\321" Nacute : "\321" Nacute : "\361" nacute : "\361" nacute : "\331" Lstroke : "\331" Lstroke : "\331" Lstroke : "\331" Lstroke : "\371" lstroke : "\371" lstroke : "\371" lstroke : "\371" lstroke : "\332" Sacute : "\332" Sacute : "\372" sacute : "\372" sacute : "\335" Zabovedot : "\335" Zabovedot : "\375" zabovedot : "\375" zabovedot : "\305" Aring : "\345" aring : "\313" Eabovedot : "\353" eabovedot : "\335" Zabovedot : "\375" zabovedot : "\267" abovedot : "\305" Aring : "\345" aring : "\313" Eabovedot : "\353" eabovedot : "\335" Zabovedot : "\375" zabovedot : "\260" ring : "\260" ring : "\377" rightsinglequotemark : "\303" Cacute : "\311" Eacute : "\312" Zacute : "\321" Nacute : "\323" Oacute : "\332" Sacute : "\343" cacute : "\351" eacute : "\352" zacute : "\361" nacute : "\363" oacute : "\372" sacute : "\310" Ccaron : "\320" Scaron : "\336" Zcaron : "\350" ccaron : "\360" scaron : "\376" zcaron : "\252" Rcedilla : "\314" Gcedilla : "\315" Kcedilla : "\317" Lcedilla : "\322" Ncedilla : "\272" rcedilla : "\354" gcedilla : "\355" kcedilla : "\357" lcedilla : "\362" ncedilla : "\304" Adiaeresis : "\326" Odiaeresis : "\334" Udiaeresis : "\344" adiaeresis : "\366" odiaeresis : "\374" udiaeresis : "\302" Amacron : "\307" Emacron : "\316" Imacron : "\324" Omacron : "\333" Umacron : "\342" amacron : "\347" emacron : "\356" imacron : "\364" omacron : "\373" umacron : "\255" macron : "\255" macron : "\300" Aogonek : "\301" Iogonek : "\306" Eogonek : "\330" Uogonek : "\340" aogonek : "\341" iogonek : "\346" eogonek : "\370" uogonek : "\325" Otilde : "\365" otilde : "~" asciitilde : "~" asciitilde XCOMM End of Sequence Definition a : "\357" lcedilla : "\357" lcedilla : "\360" scaron : "\360" scaron : "\libX11-1.6.3/nls/iso8859-13/XLC_LOCALE.pre000064401431060000012000000016611247741723500174040ustar00alancstaff00002660200006XCOMM XLocale Database Sample for iso8859-13. XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class fs0 { charset { name ISO8859-1:GL } font { primary ISO8859-13:GL substitute ISO8859-1:GL vertical_rotate all } } XCOMM fs1 class fs1 { charset { name ISO8859-13:GR } font { primary ISO8859-13:GR } } END XLC_FONTSET XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name ISO8859-13 mb_cur_max 1 state_depend_encoding False #if WCHAR32 wc_encoding_mask \x30000000 wc_shift_bits 7 #else wc_encoding_mask \x00008080 wc_shift_bits 8 #endif use_stdc_env True force_convert_to_mb True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding ISO8859-13:GL; ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 #if WCHAR32 wc_encoding \x30000000 #else wc_encoding \x00008080 #endif ct_encoding ISO8859-13:GR } END XLC_XLOCALE libX11-1.6.3/nls/zh_CN.UTF-8/XLC_LOCALE.pre000064401431060000012000000037201247741723500176340ustar00alancstaff00002660200006XCOMM XFree86 NLS for Chinese locale zh_CN.UTF-8 XCOMM Modified from xc/nls/XLC_LOCALE/en_US.UTF-8 XCOMM by James Su XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET on_demand_loading True object_name generic XCOMM We leave the legacy encodings in for the moment, because we don't XCOMM have that many ISO10646 fonts yet. XCOMM fs0 class (7 bit ASCII) fs0 { charset { name ISO8859-1:GL } font { primary ISO8859-1:GL vertical_rotate all } } XCOMM fs1 class (ISO8859 families) fs1 { charset { name ISO8859-1:GR } font { primary ISO8859-1:GR } } XCOMM fs2 class (Chinese Han Character) fs2 { charset { name GB2312.1980-0:GL } font { primary GB2312.1980-0:GL } } XCOMM fs3 class (Chinese Han Character GBK) fs3 { charset { name GBK-0:GLGR } font { primary GBK-0:GLGR substitute GB13000.1993-1:GLGR } } XCOMM fs4 class fs4 { charset { name ISO10646-1 } font { primary ISO10646-1 } } END XLC_FONTSET XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name UTF-8 mb_cur_max 6 state_depend_encoding False XCOMM cs0 class cs0 { side GL:Default length 1 ct_encoding ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 ct_encoding ISO8859-1:GR } XCOMM cs2 class cs2 { side GR length 2 ct_encoding GB2312.1980-0:GL; GB2312.1980-0:GR } XCOMM cs3 class cs3 { side none ct_encoding ISO10646-1 } END XLC_XLOCALE libX11-1.6.3/nls/zh_CN.UTF-8/XI18N_OBJS000064401431060000012000000005331247741723500170250ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for zh_CN.UTF-8 locale # # XLC common/xlcUTF8Load _XlcUtf8Loader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/zh_CN.UTF-8/Compose.pre000064401431060000012000000000601247741723500175660ustar00alancstaff00002660200006include "X11_LOCALEDATADIR/en_US.UTF-8/Compose" libX11-1.6.3/nls/zh_TW.big5/Compose.pre000064401431060000012000000005501247741723500176470ustar00alancstaff00002660200006XCOMM XCOMM zh_TW.big5 Compose Sequence XCOMM XCOMM Sequence Definition XCOMM XCOMM XCOMM This file currently has no entries. It appears that a compose file (even XCOMM just an empty one) is required for the appropriate keysyms to work for XCOMM this encoding. XCOMM XCOMM Means XCOMM Special Character XCOMM End of Sequence Definition libX11-1.6.3/nls/zh_TW.big5/XLC_LOCALE.pre000064401431060000012000000225761247741723500177230ustar00alancstaff00002660200006XCOMM XCOMM (c) 1996, X11R6 L10N for Taiwan and Big5 Encoding Project XCOMM XCOMM modified for X11R6.3 by Hung-Chi Chu 1998/01/10 XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class (7 bit ASCII) fs0 { charset { name ISO8859-1:GL } font { primary ISO8859-1:GL vertical_rotate all } } XCOMM fs1 class fs1 { charset { name BIG5-0:GLGR } font { primary BIG5-0:GLGR substitute BIG5-0:GLGR } } END XLC_FONTSET XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name zh_TW.Big5 mb_cur_max 2 state_depend_encoding False wc_encoding_mask \x00038000 wc_shift_bits 8 use_stdc_env True force_convert_to_mb True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding ISO8859-1:GL } XCOMM cs1 class cs1 { side none length 2 byte1 \xa1,\xf9 byte2 \x40,\x7e;\xa1,\xfe wc_encoding \x00008000 ct_encoding BIG5-0:GLGR:\x1b\x25\x2f\x32 mb_conversion [\xa140,\xf9fe]->\x2140 ct_conversion [\x2140,\x79fe]->\xa140 } XCOMM cs2 class cs2 { side none length 2 byte1 \xa1,\xc7 byte2 \x40,\x7e;\xa1,\xfe wc_encoding \x00010000 ct_encoding BIG5-E0:GL;BIG5-E0:GR mb_conversion [\xa140,\xa17e]->\x2121, [\xa1a1,\xa1bf]->\x2160, [\xa1c0,\xa1fe]->\x2221, [\xa240,\xa25e]->\x2260, [\xa25f,\xa27e]->\x2321, [\xa2a1,\xa2de]->\x2341, [\xa2df,\xa2fe]->\x2421, [\xa340,\xa37d]->\x2441, [\xa37e,\xa37e]->\x2521, [\xa3a1,\xa3fd]->\x2522, [\xa3fe,\xa3fe]->\x2621, [\xa440,\xa47e]->\x2622, [\xa4a1,\xa4be]->\x2661, [\xa4bf,\xa4fe]->\x2721, [\xa540,\xa55d]->\x2761, [\xa55e,\xa57e]->\x2821, [\xa5a1,\xa5dd]->\x2842, [\xa5de,\xa5fe]->\x2921, [\xa640,\xa67c]->\x2942, [\xa67d,\xa67e]->\x2a21, [\xa6a1,\xa6fc]->\x2a23, [\xa6fd,\xa6fe]->\x2b21, [\xa740,\xa77e]->\x2b23, [\xa7a1,\xa7bd]->\x2b62, [\xa7be,\xa7fe]->\x2c21, [\xa840,\xa85c]->\x2c62, [\xa85d,\xa87e]->\x2d21, [\xa8a1,\xa8dc]->\x2d43, [\xa8dd,\xa8fe]->\x2e21, [\xa940,\xa97b]->\x2e43, [\xa97c,\xa97e]->\x2f21, [\xa9a1,\xa9fb]->\x2f24, [\xa9fc,\xa9fe]->\x3021, [\xaa40,\xaa7e]->\x3024, [\xaaa1,\xaabc]->\x3063, [\xaabd,\xaafe]->\x3121, [\xab40,\xab5b]->\x3163, [\xab5c,\xab7e]->\x3221, [\xaba1,\xabdb]->\x3244, [\xabdc,\xabfe]->\x3321, [\xac40,\xac7a]->\x3344, [\xac7b,\xac7e]->\x3421, [\xaca1,\xacfa]->\x3425, [\xacfb,\xacfe]->\x3521, [\xad40,\xad7e]->\x3525, [\xada1,\xadbb]->\x3564, [\xadbc,\xadfe]->\x3621, [\xae40,\xae5a]->\x3664, [\xae5b,\xae7e]->\x3721, [\xaea1,\xaeda]->\x3745, [\xaedb,\xaefe]->\x3821, [\xaf40,\xaf79]->\x3845, [\xaf7a,\xaf7e]->\x3921, [\xafa1,\xaff9]->\x3926, [\xaffa,\xaffe]->\x3a21, [\xb040,\xb07e]->\x3a26, [\xb0a1,\xb0ba]->\x3a65, [\xb0bb,\xb0fe]->\x3b21, [\xb140,\xb159]->\x3b65, [\xb15a,\xb17e]->\x3c21, [\xb1a1,\xb1d9]->\x3c46, [\xb1da,\xb1fe]->\x3d21, [\xb240,\xb278]->\x3d46, [\xb279,\xb27e]->\x3e21, [\xb2a1,\xb2f8]->\x3e27, [\xb2f9,\xb2fe]->\x3f21, [\xb340,\xb37e]->\x3f27, [\xb3a1,\xb3b9]->\x3f66, [\xb3ba,\xb3fe]->\x4021, [\xb440,\xb458]->\x4066, [\xb459,\xb47e]->\x4121, [\xb4a1,\xb4d8]->\x4147, [\xb4d9,\xb4fe]->\x4221, [\xb540,\xb577]->\x4247, [\xb578,\xb57e]->\x4321, [\xb5a1,\xb5f7]->\x4328, [\xb5f8,\xb5fe]->\x4421, [\xb640,\xb67e]->\x4428, [\xb6a1,\xb6b8]->\x4467, [\xb6b9,\xb6fe]->\x4521, [\xb740,\xb757]->\x4567, [\xb758,\xb77e]->\x4621, [\xb7a1,\xb7d7]->\x4648, [\xb7d8,\xb7fe]->\x4721, [\xb840,\xb876]->\x4748, [\xb877,\xb87e]->\x4821, [\xb8a1,\xb8f6]->\x4829, [\xb8f7,\xb8fe]->\x4921, [\xb940,\xb97e]->\x4929, [\xb9a1,\xb9b7]->\x4968, [\xb9b8,\xb9fe]->\x4a21, [\xba40,\xba56]->\x4a68, [\xba57,\xba7e]->\x4b21, [\xbaa1,\xbad6]->\x4b49, [\xbad7,\xbafe]->\x4c21, [\xbb40,\xbb75]->\x4c49, [\xbb76,\xbb7e]->\x4d21, [\xbba1,\xbbf5]->\x4d2a, [\xbbf6,\xbbfe]->\x4e21, [\xbc40,\xbc7e]->\x4e2a, [\xbca1,\xbcb6]->\x4e69, [\xbcb7,\xbcfe]->\x4f21, [\xbd40,\xbd55]->\x4f69, [\xbd56,\xbd7e]->\x5021, [\xbda1,\xbdd5]->\x504a, [\xbdd6,\xbdfe]->\x5121, [\xbe40,\xbe74]->\x514a, [\xbe75,\xbe7e]->\x5221, [\xbea1,\xbef4]->\x522b, [\xbef5,\xbefe]->\x5321, [\xbf40,\xbf7e]->\x532b, [\xbfa1,\xbfb5]->\x536a, [\xbfb6,\xbffe]->\x5421, [\xc040,\xc054]->\x546a, [\xc055,\xc07e]->\x5521, [\xc0a1,\xc0d4]->\x554b, [\xc0d5,\xc0fe]->\x5621, [\xc140,\xc173]->\x564b, [\xc174,\xc17e]->\x5721, [\xc1a1,\xc1f3]->\x572c, [\xc1f4,\xc1fe]->\x5821, [\xc240,\xc27e]->\x582c, [\xc2a1,\xc2b4]->\x586b, [\xc2b5,\xc2fe]->\x5921, [\xc340,\xc353]->\x596b, [\xc354,\xc37e]->\x5a21, [\xc3a1,\xc3d3]->\x5a4c, [\xc3d4,\xc3fe]->\x5b21, [\xc440,\xc472]->\x5b4c, [\xc473,\xc47e]->\x5c21, [\xc4a1,\xc4f2]->\x5c2d, [\xc4f3,\xc4fe]->\x5d21, [\xc540,\xc57e]->\x5d2d, [\xc5a1,\xc5b3]->\x5d6c, [\xc5b4,\xc5fe]->\x5e21, [\xc640,\xc652]->\x5e6c, [\xc653,\xc67e]->\x5f21, [\xc6a1,\xc6d2]->\x5f4d, [\xc6d3,\xc6fe]->\x6021, [\xc740,\xc771]->\x604d, [\xc772,\xc77e]->\x6121, [\xc7a1,\xc7f1]->\x612e, [\xc7f2,\xc7fe]->\x6221 } XCOMM cs3 class cs3 { side none length 2 byte1 \xc9,\xf9 byte2 \x40,\x7e;\xa1,\xfe wc_encoding \x00020000 ct_encoding BIG5-E1:GL;BIG5-E1:GR mb_conversion [\xc940,\xc97e]->\x2121, [\xc9a1,\xc9bf]->\x2160, [\xc9c0,\xc9fe]->\x2221, [\xca40,\xca5e]->\x2260, [\xca5f,\xca7e]->\x2321, [\xcaa1,\xcade]->\x2341, [\xcadf,\xcafe]->\x2421, [\xcb40,\xcb7d]->\x2441, [\xcb7e,\xcb7e]->\x2521, [\xcba1,\xcbfd]->\x2522, [\xcbfe,\xcbfe]->\x2621, [\xcc40,\xcc7e]->\x2622, [\xcca1,\xccbe]->\x2661, [\xccbf,\xccfe]->\x2721, [\xcd40,\xcd5d]->\x2761, [\xcd5e,\xcd7e]->\x2821, [\xcda1,\xcddd]->\x2842, [\xcdde,\xcdfe]->\x2921, [\xce40,\xce7c]->\x2942, [\xce7d,\xce7e]->\x2a21, [\xcea1,\xcefc]->\x2a23, [\xcefd,\xcefe]->\x2b21, [\xcf40,\xcf7e]->\x2b23, [\xcfa1,\xcfbd]->\x2b62, [\xcfbe,\xcffe]->\x2c21, [\xd040,\xd05c]->\x2c62, [\xd05d,\xd07e]->\x2d21, [\xd0a1,\xd0dc]->\x2d43, [\xd0dd,\xd0fe]->\x2e21, [\xd140,\xd17b]->\x2e43, [\xd17c,\xd17e]->\x2f21, [\xd1a1,\xd1fb]->\x2f24, [\xd1fc,\xd1fe]->\x3021, [\xd240,\xd27e]->\x3024, [\xd2a1,\xd2bc]->\x3063, [\xd2bd,\xd2fe]->\x3121, [\xd340,\xd35b]->\x3163, [\xd35c,\xd37e]->\x3221, [\xd3a1,\xd3db]->\x3244, [\xd3dc,\xd3fe]->\x3321, [\xd440,\xd47a]->\x3344, [\xd47b,\xd47e]->\x3421, [\xd4a1,\xd4fa]->\x3425, [\xd4fb,\xd4fe]->\x3521, [\xd540,\xd57e]->\x3525, [\xd5a1,\xd5bb]->\x3564, [\xd5bc,\xd5fe]->\x3621, [\xd640,\xd65a]->\x3664, [\xd65b,\xd67e]->\x3721, [\xd6a1,\xd6da]->\x3745, [\xd6db,\xd6fe]->\x3821, [\xd740,\xd779]->\x3845, [\xd77a,\xd77e]->\x3921, [\xd7a1,\xd7f9]->\x3926, [\xd7fa,\xd7fe]->\x3a21, [\xd840,\xd87e]->\x3a26, [\xd8a1,\xd8ba]->\x3a65, [\xd8bb,\xd8fe]->\x3b21, [\xd940,\xd959]->\x3b65, [\xd95a,\xd97e]->\x3c21, [\xd9a1,\xd9d9]->\x3c46, [\xd9da,\xd9fe]->\x3d21, [\xda40,\xda78]->\x3d46, [\xda79,\xda7e]->\x3e21, [\xdaa1,\xdaf8]->\x3e27, [\xdaf9,\xdafe]->\x3f21, [\xdb40,\xdb7e]->\x3f27, [\xdba1,\xdbb9]->\x3f66, [\xdbba,\xdbfe]->\x4021, [\xdc40,\xdc58]->\x4066, [\xdc59,\xdc7e]->\x4121, [\xdca1,\xdcd8]->\x4147, [\xdcd9,\xdcfe]->\x4221, [\xdd40,\xdd77]->\x4247, [\xdd78,\xdd7e]->\x4321, [\xdda1,\xddf7]->\x4328, [\xddf8,\xddfe]->\x4421, [\xde40,\xde7e]->\x4428, [\xdea1,\xdeb8]->\x4467, [\xdeb9,\xdefe]->\x4521, [\xdf40,\xdf57]->\x4567, [\xdf58,\xdf7e]->\x4621, [\xdfa1,\xdfd7]->\x4648, [\xdfd8,\xdffe]->\x4721, [\xe040,\xe076]->\x4748, [\xe077,\xe07e]->\x4821, [\xe0a1,\xe0f6]->\x4829, [\xe0f7,\xe0fe]->\x4921, [\xe140,\xe17e]->\x4929, [\xe1a1,\xe1b7]->\x4968, [\xe1b8,\xe1fe]->\x4a21, [\xe240,\xe256]->\x4a68, [\xe257,\xe27e]->\x4b21, [\xe2a1,\xe2d6]->\x4b49, [\xe2d7,\xe2fe]->\x4c21, [\xe340,\xe375]->\x4c49, [\xe376,\xe37e]->\x4d21, [\xe3a1,\xe3f5]->\x4d2a, [\xe3f6,\xe3fe]->\x4e21, [\xe440,\xe47e]->\x4e2a, [\xe4a1,\xe4b6]->\x4e69, [\xe4b7,\xe4fe]->\x4f21, [\xe540,\xe555]->\x4f69, [\xe556,\xe57e]->\x5021, [\xe5a1,\xe5d5]->\x504a, [\xe5d6,\xe5fe]->\x5121, [\xe640,\xe674]->\x514a, [\xe675,\xe67e]->\x5221, [\xe6a1,\xe6f4]->\x522b, [\xe6f5,\xe6fe]->\x5321, [\xe740,\xe77e]->\x532b, [\xe7a1,\xe7b5]->\x536a, [\xe7b6,\xe7fe]->\x5421, [\xe840,\xe854]->\x546a, [\xe855,\xe87e]->\x5521, [\xe8a1,\xe8d4]->\x554b, [\xe8d5,\xe8fe]->\x5621, [\xe940,\xe973]->\x564b, [\xe974,\xe97e]->\x5721, [\xe9a1,\xe9f3]->\x572c, [\xe9f4,\xe9fe]->\x5821, [\xea40,\xea7e]->\x582c, [\xeaa1,\xeab4]->\x586b, [\xeab5,\xeafe]->\x5921, [\xeb40,\xeb53]->\x596b, [\xeb54,\xeb7e]->\x5a21, [\xeba1,\xebd3]->\x5a4c, [\xebd4,\xebfe]->\x5b21, [\xec40,\xec72]->\x5b4c, [\xec73,\xec7e]->\x5c21, [\xeca1,\xecf2]->\x5c2d, [\xecf3,\xecfe]->\x5d21, [\xed40,\xed7e]->\x5d2d, [\xeda1,\xedb3]->\x5d6c, [\xedb4,\xedfe]->\x5e21, [\xee40,\xee52]->\x5e6c, [\xee53,\xee7e]->\x5f21, [\xeea1,\xeed2]->\x5f4d, [\xeed3,\xeefe]->\x6021, [\xef40,\xef71]->\x604d, [\xef72,\xef7e]->\x6121, [\xefa1,\xeff1]->\x612e, [\xeff2,\xeffe]->\x6221, [\xf040,\xf07e]->\x622e, [\xf0a1,\xf0b2]->\x626d, [\xf0b3,\xf0fe]->\x6321, [\xf140,\xf151]->\x636d, [\xf152,\xf17e]->\x6421, [\xf1a1,\xf1d1]->\x644e, [\xf1d2,\xf1fe]->\x6521, [\xf240,\xf270]->\x654e, [\xf271,\xf27e]->\x6621, [\xf2a1,\xf2f0]->\x662f, [\xf2f1,\xf2fe]->\x6721, [\xf340,\xf37e]->\x672f, [\xf3a1,\xf3b1]->\x676e, [\xf3b2,\xf3fe]->\x6821, [\xf440,\xf450]->\x686e, [\xf451,\xf47e]->\x6921, [\xf4a1,\xf4d0]->\x694f, [\xf4d1,\xf4fe]->\x6a21, [\xf540,\xf56f]->\x6a4f, [\xf570,\xf57e]->\x6b21, [\xf5a1,\xf5ef]->\x6b30, [\xf5f0,\xf5fe]->\x6c21, [\xf640,\xf67e]->\x6c30, [\xf6a1,\xf6b0]->\x6c6f, [\xf6b1,\xf6fe]->\x6d21, [\xf740,\xf74f]->\x6d6f, [\xf750,\xf77e]->\x6e21, [\xf7a1,\xf7cf]->\x6e50, [\xf7d0,\xf7fe]->\x6f21, [\xf840,\xf86e]->\x6f50, [\xf86f,\xf87e]->\x7021, [\xf8a1,\xf8ee]->\x7031, [\xf8ef,\xf8fe]->\x7121, [\xf940,\xf97e]->\x7131, [\xf9a1,\xf9af]->\x7170, [\xf9b0,\xf9fe]->\x7221 } END XLC_XLOCALE libX11-1.6.3/nls/zh_TW.big5/XI18N_OBJS000064401431060000012000000005301247741723500170770ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for zh_TW.big5 locale # XLC common/xlibi18n _XlcGenericLoader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/vi_VN.tcvn/XLC_LOCALE.pre000064401431060000012000000021071247741723500200210ustar00alancstaff00002660200006XCOMM XLocale Database Sample for vi_VN.TCVN XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class (7 bit ASCII) fs0 { charset { name ISO8859-1:GL } font { primary TCVN-5712:GL substitute ISO8859-1:GL } } XCOMM fs1 class fs1 { charset TCVN-5712:GR font TCVN-5712:GR } END XLC_FONTSET XCOMM XCOMM XLC_CHARSET_DEFINE category XCOMM XLC_CHARSET_DEFINE csd0 { charset_name TCVN-5712 side GR length 1 string_encoding False sequence \x1b%/1 } END XLC_CHARSET_DEFINE XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name TCVN-5712 mb_cur_max 1 state_depend_encoding False #if WCHAR32 wc_encoding_mask \x30000000 wc_shift_bits 7 #else wc_encoding_mask \x00008080 wc_shift_bits 8 #endif use_stdc_env True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding TCVN-5712:GL; ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 #if WCHAR32 wc_encoding \x30000000 #else wc_encoding \x00008080 #endif ct_encoding TCVN-5712:GR } END XLC_XLOCALE libX11-1.6.3/nls/vi_VN.tcvn/Compose.pre000064401431060000012000000126551247741723500177720ustar00alancstaff00002660200006XCOMM 1998/12/18 Le Hong Boi $ XCOMM XCOMM TCVN 5712-2 Compose Sequences XCOMM XCOMM Sequence Definition XCOMM XCOMM dead key accent keysyms XCOMM Special Character : "`" grave : " " space : "~" asciitilde : "'" apostrophe : "\264" acute XCOMM Accented Alphabet : "\200" Agrave : "\265" agrave : "\266" Ahook : "\266" ahook : "\202" Atilde : "\267" atilde : "\203" Aacute : "\270" aacute : "\271" Abelowdot : "\271" abelowdot : "\273" Abrevegrave : "\273" abrevegrave : "\274" Abrevehook : "\274" abrevehook : "\275" Abrevetilde : "\275" abrevetilde : "\276" Abreveacute : "\276" abreveacute : "\306" Abrevebelowdot : "\306" abrevebelowdot : "\307" Acircumflexgrave : "\307" acircumflexgrave : "\310" Acircumflexhook : "\310" acircumflexhook : "\311" Acircumflextilde : "\311" acircumflextilde : "\312" Acircumflexacute : "\312" acircumflexacute : "\313" Acircumflexbelowdot : "\313" acircumflexbelowdot : "\207" Egrave : "\314" egrave : "\316" Ehook : "\316" ehook : "\317" Etilde : "\317" etilde : "\212" Eacute : "\320" eacute : "\321" Ebelowdot : "\321" ebelowdot : "\322" Ecircumflexgrave : "\322" ecircumflexgrave : "\323" Ecircumflexhook : "\323" ecircumflexhook : "\324" Ecircumflextilde : "\324" ecircumflextilde : "\325" Ecircumflexacute : "\325" ecircumflexacute : "\326" Ecircumflexbelowdot : "\326" ecircumflexbelowdot : "\215" Igrave : "\327" igrave : "\330" Ihook : "\330" ihook : "\217" Itilde : "\334" itilde : "\220" Iacute : "\335" iacute : "\336" Ibelowdot : "\336" ibelowdot : "\222" Ograve : "\337" ograve : "\341" Ohook : "\341" ohook : "\224" Otilde : "\342" otilde : "\225" Oacute : "\343" oacute : "\344" Obelowdot : "\344" obelowdot : "\345" Ocircumflexgrave : "\345" ocircumflexgrave : "\346" Ocircumflexhook : "\346" ocircumflexhook : "\347" Ocircumflextilde : "\347" ocircumflextilde : "\350" Ocircumflexacute : "\350" ocircumflexacute : "\351" Ocircumflexbelowdot : "\351" ocircumflexbelowdot : "\352" Ohorngrave : "\352" ohorngrave : "\353" Ohornhook : "\353" ohornhook : "\354" Ohorntilde : "\354" ohorntilde : "\355" Ohornacute : "\355" ohornacute : "\356" Ohornbelowdot : "\356" ohornbelowdot : "\235" Ugrave : "\357" ugrave : "\361" Uhook : "\361" uhook : "\237" Utilde : "\362" utilde : "\001" Uacute : "\363" uacute : "\364" Ubelowdot : "\364" ubelowdot : "\365" Uhorngrave : "\365" uhorngrave : "\366" Uhornhook : "\366" uhornhook : "\367" Uhorntilde : "\367" uhorntilde : "\370" Uhornacute : "\370" uhornacute : "\371" Uhornbelowdot : "\371" uhornbelowdot : "\023" Ygrave : "\372" ygrave : "\373" Yhook : "\373" yhook : "\374" Ytilde : "\374" ytilde : "\026" Yacute : "\375" yacute : "\376" Ybelowdot : "\376" ybelowdot XCOMM End of Sequence Definition libX11-1.6.3/nls/vi_VN.tcvn/XI18N_OBJS000064401431060000012000000005261247741723500172160ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for vi_VN.tcvn locale # XLC common/xlcDef _XlcDefaultLoader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/mulelao-1/XI18N_OBJS000064401431060000012000000005251247741723500170170ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for mulelao-1 locale # XLC common/xlcDef _XlcDefaultLoader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/mulelao-1/Compose.pre000064401431060000012000000005471247741723500175710ustar00alancstaff00002660200006XCOMM XCOMM mulelao-1 Compose Sequence XCOMM XCOMM Sequence Definition XCOMM XCOMM XCOMM This file currently has no entries. It appears that a compose file (even XCOMM just an empty one) is required for the appropriate keysyms to work for XCOMM this encoding. XCOMM XCOMM Means XCOMM Special Character XCOMM End of Sequence Definition libX11-1.6.3/nls/mulelao-1/XLC_LOCALE.pre000064401431060000012000000021071247741723500176230ustar00alancstaff00002660200006XCOMM XLocale Database Sample for mulelao-1. XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class (7 bit ASCII) fs0 { charset { name ISO8859-1:GL } font { primary MULELAO-1:GL substitute ISO8859-1:GL } } XCOMM fs1 class fs1 { charset MULELAO-1:GR font MULELAO-1:GR } END XLC_FONTSET XCOMM XCOMM XLC_CHARSET_DEFINE category XCOMM XLC_CHARSET_DEFINE csd0 { charset_name MULELAO-1 side GR length 1 string_encoding False sequence \x1b%/1 } END XLC_CHARSET_DEFINE XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name MULELAO-1 mb_cur_max 1 state_depend_encoding False #if WCHAR32 wc_encoding_mask \x30000000 wc_shift_bits 7 #else wc_encoding_mask \x00008080 wc_shift_bits 8 #endif use_stdc_env True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding MULELAO-1:GL; ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 #if WCHAR32 wc_encoding \x30000000 #else wc_encoding \x00008080 #endif ct_encoding MULELAO-1:GR } END XLC_XLOCALE libX11-1.6.3/nls/ja_JP.UTF-8/XLC_LOCALE.pre000064401431060000012000000043601247741723500176170ustar00alancstaff00002660200006XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET on_demand_loading True object_name generic XCOMM We leave the legacy encodings in for the moment, because we don't XCOMM have that many ISO10646 fonts yet. XCOMM fs0 class (7 bit ASCII) fs0 { charset { name ISO8859-1:GL } font { primary ISO8859-1:GL vertical_rotate all } } XCOMM fs1 class (ISO8859 families) fs1 { charset { name ISO8859-1:GR } font { primary ISO8859-1:GR } } XCOMM fs2 class (Kanji) fs2 { charset { name JISX0208.1983-0:GL } font { primary JISX0208.1983-0:GL } } XCOMM fs3 class (Korean Character) fs3 { charset { name KSC5601.1987-0:GL } font { primary KSC5601.1987-0:GL } } XCOMM fs4 class (Chinese Han Character) fs4 { charset { name GB2312.1980-0:GL } font { primary GB2312.1980-0:GL } } XCOMM fs5 class (Half Kana) fs5 { charset { name JISX0201.1976-0:GR } font { primary JISX0201.1976-0:GR vertical_rotate all } } XCOMM ISO10646-1 is put last to make usually better-looking XCOMM other fonts are picked up before iso10646-1 fonts. XCOMM Moreover, some iso10646-1 fonts don't have any glyph at all XCOMM in ISO8859-X ranges. XCOMM fs6 class fs6 { charset { name ISO10646-1 } font { primary ISO10646-1 } } END XLC_FONTSET XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name UTF-8 mb_cur_max 6 state_depend_encoding False XCOMM cs0 class cs0 { side GL:Default length 1 ct_encoding ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 ct_encoding ISO8859-1:GR } XCOMM cs2 class cs2 { side GR length 2 ct_encoding JISX0208.1983-0:GL; JISX0208.1983-0:GR; JISX0208.1983-1:GL; JISX0208.1983-1:GR } XCOMM cs3 class cs3 { side GL length 2 ct_encoding KSC5601.1987-0:GL; KSC5601.1987-0:GR; KSC5601.1987-1:GL; KSC5601.1987-1:GR } XCOMM cs4 class cs4 { side GR length 2 ct_encoding GB2312.1980-0:GL; GB2312.1980-0:GR } XCOMM cs5 class cs5 { side GR length 1 ct_encoding JISX0201.1976-0:GR } XCOMM cs6 class cs6 { side none ct_encoding ISO10646-1 } END XLC_XLOCALE libX11-1.6.3/nls/ja_JP.UTF-8/XI18N_OBJS000064401431060000012000000005331247741723500170070ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for ja_JP.UTF-8 locale # # XLC common/xlcUTF8Load _XlcUtf8Loader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/ja_JP.UTF-8/Compose.pre000064401431060000012000000000601247741723500175500ustar00alancstaff00002660200006include "X11_LOCALEDATADIR/en_US.UTF-8/Compose" libX11-1.6.3/nls/georgian-academy/XLC_LOCALE.pre000064401431060000012000000021761247741723500212310ustar00alancstaff00002660200006XCOMM XLocale Database Sample for georgian-academy XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class (7 bit ASCII) fs0 { charset { name ISO8859-1:GL } font { primary GEORGIAN-ACADEMY:GL substitute ISO8859-1:GL } } XCOMM fs1 class fs1 { charset GEORGIAN-ACADEMY:GR font GEORGIAN-ACADEMY:GR } END XLC_FONTSET XCOMM XCOMM XLC_CHARSET_DEFINE category XCOMM XLC_CHARSET_DEFINE csd0 { charset_name GEORGIAN-ACADEMY side GR length 1 string_encoding False sequence \x1b%/1 } END XLC_CHARSET_DEFINE XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name GEORGIAN-ACADEMY mb_cur_max 1 state_depend_encoding False #if WCHAR32 wc_encoding_mask \x30000000 wc_shift_bits 7 #else wc_encoding_mask \x00008080 wc_shift_bits 8 #endif use_stdc_env True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding GEORGIAN-ACADEMY:GL; ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 #if WCHAR32 wc_encoding \x30000000 #else wc_encoding \x00008080 #endif ct_encoding GEORGIAN-ACADEMY:GR } END XLC_XLOCALE libX11-1.6.3/nls/georgian-academy/XI18N_OBJS000064401431060000012000000005341247741723500204170ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for georgian-academy locale # XLC common/xlcDef _XlcDefaultLoader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/georgian-academy/Compose.pre000064401431060000012000000005561247741723500211710ustar00alancstaff00002660200006XCOMM XCOMM georgian-academy Compose Sequence XCOMM XCOMM Sequence Definition XCOMM XCOMM XCOMM This file currently has no entries. It appears that a compose file (even XCOMM just an empty one) is required for the appropriate keysyms to work for XCOMM this encoding. XCOMM XCOMM Means XCOMM Special Character XCOMM End of Sequence Definition libX11-1.6.3/nls/am_ET.UTF-8/Compose.pre000064401431060000012000000400161247741723500175570ustar00alancstaff00002660200006XCOMM XCOMM UTF-8 (Unicode) compose sequence XCOMM for Ethiopean layout. XCOMM Designed as a part of OLPC project XCOMM XCOMM 2007 Sergey Udaltsov XCOMM XCOMM XCOMM Group I XCOMM XCOMM Modifier: /u/ : "ሁ" U1201 # key h (base character ሀ) : "ሉ" U1209 # key l (base character ለ) : "ሙ" U1219 # key m (base character መ) : "ሩ" U1229 # key r (base character ረ) : "ሱ" U1231 # key s (base character ሰ) : "ቁ" U1241 # key q (base character ቀ) : "ቡ" U1261 # key b (base character በ) : "ቱ" U1271 # key t (base character ተ) : "ኑ" U1291 # key n (base character ነ) : "ኡ" U12A1 # key x (base character አ) : "ኩ" U12A9 # key k (base character ከ) : "ዉ" U12C9 # key w (base character ወ) : "ዙ" U12D9 # key z (base character ዘ) : "ዩ" U12E9 # key y (base character የ) : "ዱ" U12F1 # key d (base character ደ) : "ጁ" U1301 # key j (base character ጀ) : "ጉ" U1309 # key g (base character ገ) : "ፁ" U1341 # key [ (base character ፀ) : "ፉ" U1349 # key f (base character ፈ) : "ፑ" U1351 # key p (base character ፐ) : "ሹ" U1239 # key v (base character ሸ) : "ጩ" U1329 # key ] (base character ጨ) XCOMM Modifier: /i/ : "ሂ" U1202 # key h (base character ሀ) : "ሊ" U120A # key l (base character ለ) : "ሚ" U121A # key m (base character መ) : "ሪ" U122A # key r (base character ረ) : "ሲ" U1232 # key s (base character ሰ) : "ቂ" U1242 # key q (base character ቀ) : "ቢ" U1262 # key b (base character በ) : "ቲ" U1272 # key t (base character ተ) : "ኒ" U1292 # key n (base character ነ) : "ኢ" U12A2 # key x (base character አ) : "ኪ" U12AA # key k (base character ከ) : "ዊ" U12CA # key w (base character ወ) : "ዚ" U12DA # key z (base character ዘ) : "ዪ" U12EA # key y (base character የ) : "ዲ" U12F2 # key d (base character ደ) : "ጂ" U1302 # key j (base character ጀ) : "ጊ" U130A # key g (base character ገ) : "ፂ" U1342 # key [ (base character ፀ) : "ፊ" U134A # key f (base character ፈ) : "ፒ" U1352 # key p (base character ፐ) : "ሺ" U123A # key v (base character ሸ) : "ጪ" U132A # key ] (base character ጨ) XCOMM Modifier: /a/ : "ሃ" U1203 # key h (base character ሀ) : "ላ" U120B # key l (base character ለ) : "ማ" U121B # key m (base character መ) : "ራ" U122B # key r (base character ረ) : "ሳ" U1233 # key s (base character ሰ) : "ቃ" U1243 # key q (base character ቀ) : "ባ" U1263 # key b (base character በ) : "ታ" U1273 # key t (base character ተ) : "ና" U1293 # key n (base character ነ) : "ኣ" U12A3 # key x (base character አ) : "ካ" U12AB # key k (base character ከ) : "ዋ" U12CB # key w (base character ወ) : "ዛ" U12DB # key z (base character ዘ) : "ያ" U12EB # key y (base character የ) : "ዳ" U12F3 # key d (base character ደ) : "ጃ" U1303 # key j (base character ጀ) : "ጋ" U130B # key g (base character ገ) : "ፃ" U1343 # key [ (base character ፀ) : "ፋ" U134B # key f (base character ፈ) : "ፓ" U1353 # key p (base character ፐ) : "ሻ" U123B # key v (base character ሸ) : "ጫ" U132B # key ] (base character ጨ) XCOMM Modifier: /e/ : "ሄ" U1204 # key h (base character ሀ) : "ሌ" U120C # key l (base character ለ) : "ሜ" U121C # key m (base character መ) : "ሬ" U122C # key r (base character ረ) : "ሴ" U1234 # key s (base character ሰ) : "ቄ" U1244 # key q (base character ቀ) : "ቤ" U1264 # key b (base character በ) : "ቴ" U1274 # key t (base character ተ) : "ኔ" U1294 # key n (base character ነ) : "ኤ" U12A4 # key x (base character አ) : "ኬ" U12AC # key k (base character ከ) : "ዌ" U12CC # key w (base character ወ) : "ዜ" U12DC # key z (base character ዘ) : "ዬ" U12EC # key y (base character የ) : "ዴ" U12F4 # key d (base character ደ) : "ጄ" U1304 # key j (base character ጀ) : "ጌ" U130C # key g (base character ገ) : "ፄ" U1344 # key [ (base character ፀ) : "ፌ" U134C # key f (base character ፈ) : "ፔ" U1354 # key p (base character ፐ) : "ሼ" U123C # key v (base character ሸ) : "ጬ" U132C # key ] (base character ጨ) XCOMM Modifier: /c/ : "ህ" U1205 # key h (base character ሀ) : "ል" U120D # key l (base character ለ) : "ም" U121D # key m (base character መ) : "ር" U122D # key r (base character ረ) : "ስ" U1235 # key s (base character ሰ) : "ቅ" U1245 # key q (base character ቀ) : "ብ" U1265 # key b (base character በ) : "ት" U1275 # key t (base character ተ) : "ን" U1295 # key n (base character ነ) : "እ" U12A5 # key x (base character አ) : "ክ" U12AD # key k (base character ከ) : "ው" U12CD # key w (base character ወ) : "ዝ" U12DD # key z (base character ዘ) : "ይ" U12ED # key y (base character የ) : "ድ" U12F5 # key d (base character ደ) : "ጅ" U1305 # key j (base character ጀ) : "ግ" U130D # key g (base character ገ) : "ፅ" U1345 # key [ (base character ፀ) : "ፍ" U134D # key f (base character ፈ) : "ፕ" U1355 # key p (base character ፐ) : "ሽ" U123D # key v (base character ሸ) : "ጭ" U132D # key ] (base character ጨ) XCOMM Modifier: /o/ : "ሆ" U1206 # key h (base character ሀ) : "ሎ" U120E # key l (base character ለ) : "ሞ" U121E # key m (base character መ) : "ሮ" U122E # key r (base character ረ) : "ሶ" U1236 # key s (base character ሰ) : "ቆ" U1246 # key q (base character ቀ) : "ቦ" U1266 # key b (base character በ) : "ቶ" U1276 # key t (base character ተ) : "ኖ" U1296 # key n (base character ነ) : "ኦ" U12A6 # key x (base character አ) : "ኮ" U12AE # key k (base character ከ) : "ዎ" U12CE # key w (base character ወ) : "ዞ" U12DE # key z (base character ዘ) : "ዮ" U12EE # key y (base character የ) : "ዶ" U12F6 # key d (base character ደ) : "ጆ" U1306 # key j (base character ጀ) : "ጎ" U130E # key g (base character ገ) : "ፆ" U1346 # key [ (base character ፀ) : "ፎ" U134E # key f (base character ፈ) : "ፖ" U1356 # key p (base character ፐ) : "ሾ" U123E # key v (base character ሸ) : "ጮ" U132E # key ] (base character ጨ) XCOMM Modifier: /A/ : "ሏ" U120F # key l (base character ለ) : "ሟ" U121F # key m (base character መ) : "ሯ" U122F # key r (base character ረ) : "ሷ" U1237 # key s (base character ሰ) : "ቋ" U124B # key q (base character ቀ) : "ቧ" U1267 # key b (base character በ) : "ቷ" U1277 # key t (base character ተ) : "ኗ" U1297 # key n (base character ነ) : "ኧ" U12A7 # key x (base character አ) : "ኳ" U12B3 # key k (base character ከ) : "ዟ" U12DF # key z (base character ዘ) : "ዷ" U12F7 # key d (base character ደ) : "ጇ" U1307 # key j (base character ጀ) : "ጓ" U1313 # key g (base character ገ) : "ፏ" U134F # key f (base character ፈ) : "ፗ" U1357 # key p (base character ፐ) : "ሿ" U123F # key v (base character ሸ) : "ጯ" U132F # key ] (base character ጨ) XCOMM Modifier: /U/ : "ቍ" U124D # key q (base character ቀ) : "ኵ" U12B5 # key k (base character ከ) : "ጕ" U1315 # key g (base character ገ) XCOMM Modifier: /I/ : "ቊ" U124A # key q (base character ቀ) : "ኲ" U12B2 # key k (base character ከ) : "ጒ" U1312 # key g (base character ገ) XCOMM Modifier: /E/ : "ቌ" U124C # key q (base character ቀ) : "ኴ" U12B4 # key k (base character ከ) : "ጔ" U1314 # key g (base character ገ) XCOMM Modifier: /O/ : "ቈ" U1248 # key q (base character ቀ) : "ኰ" U12B0 # key k (base character ከ) : "ጐ" U1310 # key g (base character ገ) XCOMM XCOMM Group II XCOMM XCOMM Modifier: /u/ : "ሑ" U1211 # key h (base character ሐ) : "ሡ" U1221 # key s (base character ሠ) : "ቑ" U1251 # key q (base character ቐ) : "ቹ" U1279 # key c (base character ቸ) : "ጡ" U1321 # key t (base character ጠ) : "ኙ" U1299 # key n (base character ኘ) : "ዑ" U12D1 # key x (base character ዐ) : "ኹ" U12B9 # key k (base character ኸ) : "ዡ" U12E1 # key z (base character ዠ) : "ዹ" U12F9 # key d (base character ዸ) : "ጙ" U1319 # key g (base character ጘ) : "ጹ" U1339 # key [ (base character ጸ) : "ጱ" U1331 # key p (base character ጰ) : "ኁ" U1281 # key ] (base character ኀ) : "ቩ" U1269 # key v (base character ቨ) XCOMM Modifier: /i/ : "ሒ" U1212 # key h (base character ሐ) : "ሢ" U1222 # key s (base character ሠ) : "ቒ" U1252 # key q (base character ቐ) : "ቺ" U127A # key c (base character ቸ) : "ጢ" U1322 # key t (base character ጠ) : "ኚ" U129A # key n (base character ኘ) : "ዒ" U12D2 # key x (base character ዐ) : "ኺ" U12BA # key k (base character ኸ) : "ዢ" U12E2 # key z (base character ዠ) : "ዺ" U12FA # key d (base character ዸ) : "ጚ" U131A # key g (base character ጘ) : "ጺ" U133A # key [ (base character ጸ) : "ጲ" U1332 # key p (base character ጰ) : "ኂ" U1282 # key ] (base character ኀ) : "ቪ" U126A # key v (base character ቨ) XCOMM Modifier: /a/ : "ሓ" U1213 # key h (base character ሐ) : "ሣ" U1223 # key s (base character ሠ) : "ቓ" U1253 # key q (base character ቐ) : "ቻ" U127B # key c (base character ቸ) : "ጣ" U1323 # key t (base character ጠ) : "ኛ" U129B # key n (base character ኘ) : "ዓ" U12D3 # key x (base character ዐ) : "ኻ" U12BB # key k (base character ኸ) : "ዣ" U12E3 # key z (base character ዠ) : "ዻ" U12FB # key d (base character ዸ) : "ጛ" U131B # key g (base character ጘ) : "ጻ" U133B # key [ (base character ጸ) : "ጳ" U1333 # key p (base character ጰ) : "ኃ" U1283 # key ] (base character ኀ) : "ቫ" U126B # key v (base character ቨ) XCOMM Modifier: /e/ : "ሔ" U1214 # key h (base character ሐ) : "ሤ" U1224 # key s (base character ሠ) : "ቔ" U1254 # key q (base character ቐ) : "ቼ" U127C # key c (base character ቸ) : "ጤ" U1324 # key t (base character ጠ) : "ኜ" U129C # key n (base character ኘ) : "ዔ" U12D4 # key x (base character ዐ) : "ኼ" U12BC # key k (base character ኸ) : "ዤ" U12E4 # key z (base character ዠ) : "ዼ" U12FC # key d (base character ዸ) : "ጜ" U131C # key g (base character ጘ) : "ጼ" U133C # key [ (base character ጸ) : "ጴ" U1334 # key p (base character ጰ) : "ኄ" U1284 # key ] (base character ኀ) : "ቬ" U126C # key v (base character ቨ) XCOMM Modifier: /c/ : "ሕ" U1215 # key h (base character ሐ) : "ሥ" U1225 # key s (base character ሠ) : "ቕ" U1255 # key q (base character ቐ) : "ች" U127D # key c (base character ቸ) : "ጥ" U1325 # key t (base character ጠ) : "ኝ" U129D # key n (base character ኘ) : "ዕ" U12D5 # key x (base character ዐ) : "ኽ" U12BD # key k (base character ኸ) : "ዥ" U12E5 # key z (base character ዠ) : "ዽ" U12FD # key d (base character ዸ) : "ጝ" U131D # key g (base character ጘ) : "ጽ" U133D # key [ (base character ጸ) : "ጵ" U1335 # key p (base character ጰ) : "ኅ" U1285 # key ] (base character ኀ) : "ቭ" U126D # key v (base character ቨ) XCOMM Modifier: /o/ : "ሖ" U1216 # key h (base character ሐ) : "ሦ" U1226 # key s (base character ሠ) : "ቖ" U1256 # key q (base character ቐ) : "ቾ" U127E # key c (base character ቸ) : "ጦ" U1326 # key t (base character ጠ) : "ኞ" U129E # key n (base character ኘ) : "ዖ" U12D6 # key x (base character ዐ) : "ኾ" U12BE # key k (base character ኸ) : "ዦ" U12E6 # key z (base character ዠ) : "ዾ" U12FE # key d (base character ዸ) : "ጞ" U131E # key g (base character ጘ) : "ጾ" U133E # key [ (base character ጸ) : "ጶ" U1336 # key p (base character ጰ) : "ኆ" U1286 # key ] (base character ኀ) : "ቮ" U126E # key v (base character ቨ) XCOMM Modifier: /A/ : "ሗ" U1217 # key h (base character ሐ) : "ሧ" U1227 # key s (base character ሠ) : "ቛ" U125B # key q (base character ቐ) : "ቿ" U127F # key c (base character ቸ) : "ጧ" U1327 # key t (base character ጠ) : "ኟ" U129F # key n (base character ኘ) : "ዃ" U12C3 # key k (base character ኸ) : "ዧ" U12E7 # key z (base character ዠ) : "ዿ" U12FF # key d (base character ዸ) : "ጿ" U133F # key [ (base character ጸ) : "ጷ" U1337 # key p (base character ጰ) : "ኋ" U128B # key ] (base character ኀ) : "ቯ" U126F # key v (base character ቨ) XCOMM Modifier: /U/ : "ቝ" U125D # key q (base character ቐ) : "ዅ" U12C5 # key k (base character ኸ) XCOMM Modifier: /I/ : "ቚ" U125A # key q (base character ቐ) : "ዂ" U12C2 # key k (base character ኸ) XCOMM Modifier: /E/ : "ቜ" U125C # key q (base character ቐ) : "ዄ" U12C4 # key k (base character ኸ) XCOMM Modifier: /O/ : "ቘ" U1258 # key q (base character ቐ) : "ዀ" U12C0 # key k (base character ኸ) XCOMM XCOMM Group III XCOMM : "፥" U1365 # key " : "፦" U1366 # key " : "|" U007C # key - : "¥" U00A5 # key _ : "፧" U1367 # key ? XCOMM XCOMM Khmer digraphs XCOMM : "ាំ" : "ោះ" : "េះ" : "ុំ" : "ុះ" XCOMM XCOMM Arabic Lam-Alef ligatures XCOMM : "لا" # ARABIC LIGATURE LAM WITH ALEF : "لأ" # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE : "لإ" # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW : "لآ" # ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE # key f (base character ፈ) : "ፕ" U1355 # key p (base character ፐ) : "ሽ" U123D # key v (base character ሸ) : "ጭ" U132D # key ] (base character ጨ) XCOMM Modifier: /o/ : "ሆ" U1206 # key h (base character ሀ) : "ሎ" U120E # key l (base character ለ) : "ሞ" U121E # key m (base character መ) : "ሮ" U122E # key r (base character ረ) : "ሶ" U1236 # key s (base character ሰ) Means XCOMM Special Character XCOMM End of Sequence Definition libX11-1.6.3/nls/iso8859-6/XLC_LOCALE.pre000064401431060000012000000016521247741723500173260ustar00alancstaff00002660200006XCOMM XLocale Database Sample for iso8859-6. XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class fs0 { charset { name ISO8859-1:GL } font { primary ISO8859-6:GL substitute ISO8859-1:GL vertical_rotate all } } XCOMM fs1 class fs1 { charset { name ISO8859-6:GR } font { primary ISO8859-6:GR } } END XLC_FONTSET XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name ISO8859-6 mb_cur_max 1 state_depend_encoding False #if WCHAR32 wc_encoding_mask \x30000000 wc_shift_bits 7 #else wc_encoding_mask \x00008080 wc_shift_bits 8 #endif use_stdc_env True force_convert_to_mb True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding ISO8859-6:GL; ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 #if WCHAR32 wc_encoding \x30000000 #else wc_encoding \x00008080 #endif ct_encoding ISO8859-6:GR } END XLC_XLOCALE libX11-1.6.3/nls/iso8859-6/XI18N_OBJS000064401431060000012000000005251247741723500165160ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for iso8859-6 locale # XLC common/xlcDef _XlcDefaultLoader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/iso8859-6/Compose.pre000064401431060000012000000005501247741723500172620ustar00alancstaff00002660200006XCOMM XCOMM ISO 8859-6 Compose Sequence XCOMM XCOMM Sequence Definition XCOMM XCOMM XCOMM This file currently has no entries. It appears that a compose file (even XCOMM just an empty one) is required for the appropriate keysyms to work for XCOMM this encoding. XCOMM XCOMM Means XCOMM Special Character XCOMM End of Sequence Definition libX11-1.6.3/nls/zh_CN.gb18030/Compose.pre000064401431060000012000000005531247741723500177560ustar00alancstaff00002660200006XCOMM XCOMM zh_CN.GB18030 Compose Sequence XCOMM XCOMM Sequence Definition XCOMM XCOMM XCOMM This file currently has no entries. It appears that a compose file (even XCOMM just an empty one) is required for the appropriate keysyms to work for XCOMM this encoding. XCOMM XCOMM Means XCOMM Special Character XCOMM End of Sequence Definition libX11-1.6.3/nls/zh_CN.gb18030/XI18N_OBJS000064401431060000012000000005331247741723500172060ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for zh_CN.gb18030 locale # XLC common/xlcUTF8Load _XlcUtf8Loader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/zh_CN.gb18030/XLC_LOCALE.pre000064401431060000012000000027431247741723500200210ustar00alancstaff00002660200006XCOMM XFree86 NLS for Chinese encoding GB18030 XCOMM Modified from xc/nls/XLC_LOCALE/en_US.UTF-8 XCOMM by James Su XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET on_demand_loading True object_name generic XCOMM We leave the legacy encodings in for the moment, because we don't XCOMM have that many ISO10646 fonts yet. XCOMM fs0 class (7 bit ASCII) fs0 { charset { name ISO8859-1:GL } font { primary ISO8859-1:GL vertical_rotate all } } XCOMM fs1 class (ISO8859 families) fs1 { charset { name ISO8859-1:GR } font { primary ISO8859-1:GR } } XCOMM fs2 class (Chinese Han Character) fs2 { charset { name GB2312.1980-0:GL } font { primary GB2312.1980-0:GL } } XCOMM fs3 class (Chinese Han Character GBK) fs3 { charset { name GBK-0:GLGR } font { primary GBK-0:GLGR substitute GB13000.1993-1:GLGR } } XCOMM fs4 class fs4 { charset { name ISO10646-1 } font { primary GB18030-0 substitute GBK2K-0 } } END XLC_FONTSET XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name GB18030 mb_cur_max 4 state_depend_encoding False XCOMM cs0 class cs0 { side GL:Default length 1 ct_encoding ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 ct_encoding ISO8859-1:GR } XCOMM cs2 class cs2 { side GR length 2 ct_encoding GB2312.1980-0:GL; GB2312.1980-0:GR } XCOMM cs3 class cs3 { side none ct_encoding ISO10646-1 } END XLC_XLOCALE libX11-1.6.3/nls/ja.JIS/Compose.pre000064401431060000012000000005441247741723500170100ustar00alancstaff00002660200006XCOMM XCOMM ja.JIS Compose Sequence XCOMM XCOMM Sequence Definition XCOMM XCOMM XCOMM This file currently has no entries. It appears that a compose file (even XCOMM just an empty one) is required for the appropriate keysyms to work for XCOMM this encoding. XCOMM XCOMM Means XCOMM Special Character XCOMM End of Sequence Definition libX11-1.6.3/nls/ja.JIS/XLC_LOCALE.pre000064401431060000012000000037361247741723500170560ustar00alancstaff00002660200006XCOMM XCOMM XLocale Database Sample for ja_JP.jis XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class (7 bit ASCII) fs0 { charset { name ISO8859-1:GL } font { primary ISO8859-1:GL substitute JISX0201.1976-0:GL vertical_rotate all } } XCOMM fs1 class (Kanji) fs1 { charset { name JISX0208.1983-0:GL } font { primary JISX0208.1983-0:GL substitute JISX0208.1990-0:GL } } XCOMM fs2 class (Half Kana) fs2 { charset { name JISX0201.1976-0:GR } font { primary JISX0201.1976-0:GR substitute JISX0201.1976-0:GR vertical_rotate all } } XCOMM fs3 class (Supplementary Kanji) XCOMM fs3 { XCOMM charset { XCOMM name JISX0212.1990-0:GL XCOMM } XCOMM font { XCOMM primary JISX0212.1990-0:GL XCOMM } XCOMM } END XLC_FONTSET XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name ja.jis mb_cur_max 5 state_depend_encoding True #if WCHAR32 wc_encoding_mask \x30000000 wc_shift_bits 7 #else wc_encoding_mask \x00008080 wc_shift_bits 8 #endif use_stdc_env True force_convert_to_mb True XCOMM cs0 class cs0 { side GL:Default length 1 mb_encoding \x1b \x28 \x4a;\ \x1b \x28 \x42 wc_encoding \x00000000 ct_encoding ISO8859-1:GL; JISX0201.1976-0:GL } XCOMM cs1 class cs1 { side GL length 2 mb_encoding \x1b \x24 \x42;\ \x1b \x24 \x40 #if WCHAR32 wc_encoding \x30000000 #else wc_encoding \x00008080 #endif ct_encoding JISX0208.1983-0:GL; JISX0208.1983-0:GR;\ JISX0208.1983-1:GL; JISX0208.1983-1:GR } XCOMM cs2 class cs2 { side GL length 1 mb_encoding \x1b \x28 \x49 #if WCHAR32 wc_encoding \x10000000 #else wc_encoding \x00000080 #endif ct_encoding JISX0201.1976-0:GR } XCOMM cs3 class XCOMM cs3 { XCOMM side GL XCOMM length 2 XCOMM mb_encoding \x1b \x24 \x28 \x44 XCOMM #if WCHAR32 XCOMM wc_encoding \x20000000 XCOMM #else XCOMM wc_encoding \x00008000 XCOMM #endif XCOMM ct_encoding JISX0212.1990-0:GL; JISX0212.1990-0:GR XCOMM } END XLC_XLOCALE libX11-1.6.3/nls/ja.JIS/XI18N_OBJS000064401431060000012000000005241247741723500162400ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for ja.JIS locale # XLC common/xlibi18n _XlcGenericLoader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/locale.alias.pre000064401431060000012000001327071247741723500167230ustar00alancstaff00002660200006XCOMM XCOMM This file contains alias name of locale. XCOMM Each alias name is described within one line. XCOMM The first word is the alias name (simplified locale name) XCOMM the second word is full locale name. XCOMM XCOMM POSIX: C POSIX-UTF2: C C_C.C: C C.en: C C.ASCII: C C.iso88591: en_US.ISO8859-1 Cextend: en_US.ISO8859-1 Cextend.en: en_US.ISO8859-1 English_United-States.437: C C.UTF-8: en_US.UTF-8 XCOMM a3 is not an ISO 639 language code, but in Cyrillic, "Z" looks like "3". a3: az_AZ.KOI8-C a3_AZ: az_AZ.KOI8-C a3_AZ.koi8c: az_AZ.KOI8-C a3_AZ.KOI-C: az_AZ.KOI8-C a3_AZ.UTF-8: az_AZ.UTF-8 af: af_ZA.ISO8859-1 af_ZA: af_ZA.ISO8859-1 af_ZA.iso88591: af_ZA.ISO8859-1 af_ZA.ISO-8859-1: af_ZA.ISO8859-1 af_ZA.utf8: af_ZA.UTF-8 am: am_ET.UTF-8 am_ET: am_ET.UTF-8 ar: ar_AA.ISO8859-6 ar_AA: ar_AA.ISO8859-6 AR_AA: ar_AA.ISO8859-6 Ar_AA: ar_AA.ISO8859-6 AR_AA.UTF-8: ar_AA.UTF-8 ar_AA.iso88596: ar_AA.ISO8859-6 ar_AA.ISO-8859-6: ar_AA.ISO8859-6 ar_AE: ar_AE.ISO8859-6 ar_AE.iso88596: ar_AE.ISO8859-6 ar_AE.ISO-8859-6: ar_AE.ISO8859-6 ar_AE.utf8: ar_AE.UTF-8 ar_BH: ar_BH.ISO8859-6 ar_BH.iso88596: ar_BH.ISO8859-6 ar_BH.ISO-8859-6: ar_BH.ISO8859-6 ar_BH.utf8: ar_BH.UTF-8 ar_DZ: ar_DZ.ISO8859-6 ar_DZ.iso88596: ar_DZ.ISO8859-6 ar_DZ.ISO-8859-6: ar_DZ.ISO8859-6 ar_DZ.utf8: ar_DZ.UTF-8 ar_EG: ar_EG.ISO8859-6 ar_EG.iso88596: ar_EG.ISO8859-6 ar_EG.ISO-8859-6: ar_EG.ISO8859-6 ar_EG.utf8: ar_EG.UTF-8 ar_IN: ar_IN.UTF-8 ar_IN.utf8: ar_IN.UTF-8 ar_IQ: ar_IQ.ISO8859-6 ar_IQ.iso88596: ar_IQ.ISO8859-6 ar_IQ.ISO-8859-6: ar_IQ.ISO8859-6 ar_IQ.utf8: ar_IQ.UTF-8 ar_JO: ar_JO.ISO8859-6 ar_JO.iso88596: ar_JO.ISO8859-6 ar_JO.ISO-8859-6: ar_JO.ISO8859-6 ar_JO.utf8: ar_JO.UTF-8 ar_KW: ar_KW.ISO8859-6 ar_KW.iso88596: ar_KW.ISO8859-6 ar_KW.ISO-8859-6: ar_KW.ISO8859-6 ar_KW.utf8: ar_KW.UTF-8 ar_LB: ar_LB.ISO8859-6 ar_LB.iso88596: ar_LB.ISO8859-6 ar_LB.ISO-8859-6: ar_LB.ISO8859-6 ar_LB.utf8: ar_LB.UTF-8 ar_LY: ar_LY.ISO8859-6 ar_LY.iso88596: ar_LY.ISO8859-6 ar_LY.ISO-8859-6: ar_LY.ISO8859-6 ar_LY.utf8: ar_LY.UTF-8 ar_MA: ar_MA.ISO8859-6 ar_MA.iso88596: ar_MA.ISO8859-6 ar_MA.ISO-8859-6: ar_MA.ISO8859-6 ar_MA.utf8: ar_MA.UTF-8 ar_OM: ar_OM.ISO8859-6 ar_OM.iso88596: ar_OM.ISO8859-6 ar_OM.ISO-8859-6: ar_OM.ISO8859-6 ar_OM.utf8: ar_OM.UTF-8 ar_QA: ar_QA.ISO8859-6 ar_QA.iso88596: ar_QA.ISO8859-6 ar_QA.ISO-8859-6: ar_QA.ISO8859-6 ar_QA.utf8: ar_QA.UTF-8 ar_SA: ar_SA.ISO8859-6 ar_SA.iso88596: ar_SA.ISO8859-6 ar_SA.ISO-8859-6: ar_SA.ISO8859-6 ar_SA.utf8: ar_SA.UTF-8 ar_SD: ar_SD.ISO8859-6 ar_SD.iso88596: ar_SD.ISO8859-6 ar_SD.ISO-8859-6: ar_SD.ISO8859-6 ar_SD.utf8: ar_SD.UTF-8 ar_SY: ar_SY.ISO8859-6 ar_SY.iso88596: ar_SY.ISO8859-6 ar_SY.ISO-8859-6: ar_SY.ISO8859-6 ar_SY.utf8: ar_SY.UTF-8 ar_TN: ar_TN.ISO8859-6 ar_TN.iso88596: ar_TN.ISO8859-6 ar_TN.ISO-8859-6: ar_TN.ISO8859-6 ar_TN.utf8: ar_TN.UTF-8 as: as_IN.UTF-8 as_IN: as_IN.UTF-8 as_IN.utf8: as_IN.UTF-8 ar_YE: ar_YE.ISO8859-6 ar_YE.iso88596: ar_YE.ISO8859-6 ar_YE.ISO-8859-6: ar_YE.ISO8859-6 ar_YE.utf8: ar_YE.UTF-8 az: az_AZ.ISO8859-9E az_AZ: az_AZ.ISO8859-9E az_AZ.iso88599e: az_AZ.ISO8859-9E be: be_BY.CP1251 be@latin: be_BY.UTF-8@latin be_BY: be_BY.CP1251 be_BY@latin: be_BY.UTF-8@latin be_BY.cp1251: be_BY.CP1251 be_BY.microsoftcp1251: be_BY.CP1251 be_BY.microsoft-cp1251: be_BY.CP1251 be_BY.MICROSOFT-CP1251: be_BY.CP1251 be_BY.utf8: be_BY.UTF-8 be_BY.utf8@latin: be_BY.UTF-8@latin bg: bg_BG.CP1251 bg_BG: bg_BG.CP1251 bg_BG.cp1251: bg_BG.CP1251 bg_BG.microsoftcp1251: bg_BG.CP1251 bg_BG.microsoft-cp1251: bg_BG.CP1251 bg_BG.MICROSOFT-CP1251: bg_BG.CP1251 bg_BG.iso88595: bg_BG.ISO8859-5 bg_BG.ISO-8859-5: bg_BG.ISO8859-5 bg_BG.koi8r: bg_BG.KOI8-R be_BG.utf8: bg_BG.UTF-8 bn_IN: bn_IN.UTF-8 bn_IN.utf8: bn_IN.UTF-8 bo_IN: bo_IN.UTF-8 bo_IN.utf8: bo_IN.UTF-8 br: br_FR.ISO8859-1 br_FR: br_FR.ISO8859-1 br_FR.iso88591: br_FR.ISO8859-1 br_FR.ISO-8859-1: br_FR.ISO8859-1 br_FR.iso885914: br_FR.ISO8859-14 br_FR.ISO-8859-14: br_FR.ISO8859-14 br_FR.iso885915: br_FR.ISO8859-15 br_FR.ISO-8859-15: br_FR.ISO8859-15 br_FR.ISO-8859-15@euro: br_FR.ISO8859-15 br_FR@euro: br_FR.ISO8859-15 br_FR.UTF-8@euro: br_FR.UTF-8 bs: bs_BA.ISO8859-2 bs_BA: bs_BA.ISO8859-2 bs_BA.iso88592: bs_BA.ISO8859-2 bs_BA.ISO-8859-2: bs_BA.ISO8859-2 bs_BA.ISO_8859-2: bs_BA.ISO8859-2 ca: ca_ES.ISO8859-1 ca_AD: ca_AD.ISO8859-1 ca_AD@euro: ca_AD.ISO8859-15 ca_AD.iso88591: ca_AD.ISO8859-1 ca_AD.ISO-8859-1: ca_AD.ISO8859-1 ca_AD.iso885915: ca_AD.ISO8859-15 ca_AD.utf8: ca_AD.UTF-8 ca_AD.ISO-8859-15: ca_AD.ISO8859-15 ca_AD.ISO-8859-15@euro: ca_AD.ISO8859-15 ca_AD.UTF-8@euro: ca_AD.UTF-8 ca_ES: ca_ES.ISO8859-1 ca_ES@euro: ca_ES.ISO8859-15 ca_ES.iso88591: ca_ES.ISO8859-1 ca_ES.ISO-8859-1: ca_ES.ISO8859-1 ca_ES.iso885915: ca_ES.ISO8859-15 ca_ES.utf8: ca_ES.UTF-8 ca_ES.ISO-8859-15: ca_ES.ISO8859-15 ca_ES.ISO-8859-15@euro: ca_ES.ISO8859-15 ca_ES.UTF-8@euro: ca_ES.UTF-8 ca_FR: ca_FR.ISO8859-1 ca_FR@euro: ca_FR.ISO8859-15 ca_FR.iso88591: ca_FR.ISO8859-1 ca_FR.ISO-8859-1: ca_FR.ISO8859-1 ca_FR.iso885915: ca_FR.ISO8859-15 ca_FR.utf8: ca_FR.UTF-8 ca_FR.ISO-8859-15: ca_FR.ISO8859-15 ca_FR.ISO-8859-15@euro: ca_FR.ISO8859-15 ca_FR.UTF-8@euro: ca_FR.UTF-8 ca_IT: ca_IT.ISO8859-1 ca_IT@euro: ca_IT.ISO8859-15 ca_IT.iso88591: ca_IT.ISO8859-1 ca_IT.ISO-8859-1: ca_IT.ISO8859-1 ca_IT.iso885915: ca_IT.ISO8859-15 ca_IT.utf8: ca_IT.UTF-8 ca_IT.ISO-8859-15: ca_IT.ISO8859-15 ca_IT.ISO-8859-15@euro: ca_IT.ISO8859-15 ca_IT.UTF-8@euro: ca_IT.UTF-8 cs: cs_CZ.ISO8859-2 cs_CS: cs_CZ.ISO8859-2 cs_CS.ISO8859-2: cs_CZ.ISO8859-2 cs_CZ: cs_CZ.ISO8859-2 cs_CZ.iso88592: cs_CZ.ISO8859-2 cs_CS.iso8859-2: cs_CZ.ISO8859-2 cs_CZ.ISO-8859-2: cs_CZ.ISO8859-2 cs_CZ.ISO_8859-2: cs_CZ.ISO8859-2 cs_CZ.utf8: cs_CZ.UTF-8 XCOMM cz is an old name for Czech (now cs), and should be deleted in the future. cz: cs_CZ.ISO8859-2 cz_CZ: cs_CZ.ISO8859-2 cz_CZ.utf8: cs_CZ.UTF-8 cz_CZ.UTF-8: cs_CZ.UTF-8 cy: cy_GB.ISO8859-1 cy_GB: cy_GB.ISO8859-1 cy_GB.iso88591: cy_GB.ISO8859-1 cy_GB.ISO-8859-1: cy_GB.ISO8859-1 cy_GB.iso885914: cy_GB.ISO8859-14 cy_GB.ISO-8859-14: cy_GB.ISO8859-14 cy_GB.iso885915: cy_GB.ISO8859-15 cy_GB.ISO-8859-15: cy_GB.ISO8859-15 da: da_DK.ISO8859-1 da.ISO8859-15: da_DK.ISO8859-15 da_DK: da_DK.ISO8859-1 DA_DK: da_DK.ISO8859-1 da_DK.88591: da_DK.ISO8859-1 da_DK.88591.en: da_DK.ISO8859-1 da_DK.iso88591: da_DK.ISO8859-1 da_DK.ISO-8859-1: da_DK.ISO8859-1 da_DK.ISO_8859-1: da_DK.ISO8859-1 da_DK.iso885915: da_DK.ISO8859-15 da_DK.ISO-8859-15: da_DK.ISO8859-15 da_DK.8859-15: da_DK.ISO8859-15 da_DK.utf8: da_DK.UTF-8 DA_DK.UTF-8: da_DK.UTF-8 de: de_DE.ISO8859-1 de.ISO8859-15: de_DE.ISO8859-15 de_AT: de_AT.ISO8859-1 de_AT@euro: de_AT.ISO8859-15 de_AT.iso88591: de_AT.ISO8859-1 de_AT.ISO-8859-1: de_AT.ISO8859-1 de_AT.ISO_8859-1: de_AT.ISO8859-1 de_AT.iso885915: de_AT.ISO8859-15 de_AT.ISO-8859-15: de_AT.ISO8859-15 de_AT.ISO-8859-15@euro: de_AT.ISO8859-15 de_AT.UTF-8@euro: de_AT.UTF-8 de_AT.utf8: de_AT.UTF-8 de_BE: de_BE.ISO8859-1 de_BE@euro: de_BE.ISO8859-15 de_BE.iso88591: de_BE.ISO8859-1 de_BE.ISO_8859-1: de_BE.ISO8859-1 de_BE.ISO-8859-1: de_BE.ISO8859-1 de_BE.iso885915: de_BE.ISO8859-15 de_BE.ISO_8859-15: de_BE.ISO8859-15 de_BE.ISO-8859-15: de_BE.ISO8859-15 de_BE.ISO-8859-15@euro: de_BE.ISO8859-15 de_BE.UTF-8@euro: de_BE.UTF-8 de_CH: de_CH.ISO8859-1 de_CH.iso88591: de_CH.ISO8859-1 de_CH.ISO_8859-1: de_CH.ISO8859-1 de_CH.ISO-8859-1: de_CH.ISO8859-1 de_CH.iso885915: de_CH.ISO8859-15 de_CH.ISO_8859-15: de_CH.ISO8859-15 de_CH.ISO-8859-15: de_CH.ISO8859-15 de_CH.utf8: de_CH.UTF-8 de_DE: de_DE.ISO8859-1 de_DE@euro: de_DE.ISO8859-15 de_DE.88591: de_DE.ISO8859-1 de_DE.88591.en: de_DE.ISO8859-1 de_DE.iso88591: de_DE.ISO8859-1 de_DE.ISO-8859-1: de_DE.ISO8859-1 de_DE.ISO_8859-1: de_DE.ISO8859-1 de_DE.iso885915: de_DE.ISO8859-15 de_DE.ISO-8859-15: de_DE.ISO8859-15 de_DE.ISO_8859-15: de_DE.ISO8859-15 de_DE.8859-15: de_DE.ISO8859-15 de_DE.8859-15@euro: de_DE.ISO8859-15 de_DE.ISO-8859-15@euro: de_DE.ISO8859-15 de_DE.UTF-8@euro: de_DE.UTF-8 de_DE.utf8: de_DE.UTF-8 de_LU: de_LU.ISO8859-1 de_LU@euro: de_LU.ISO8859-15 de_LU.iso88591: de_LU.ISO8859-1 de_LU.ISO_8859-1: de_LU.ISO8859-1 de_LU.ISO-8859-1: de_LU.ISO8859-1 de_LU.iso885915: de_LU.ISO8859-15 de_LU.ISO_8859-15: de_LU.ISO8859-15 de_LU.ISO-8859-15: de_LU.ISO8859-15 de_LU.ISO-8859-15@euro: de_LU.ISO8859-15 de_LU.UTF-8@euro: de_LU.UTF-8 de_LU.utf8: de_LU.UTF-8 GER_DE.8859: de_DE.ISO8859-1 GER_DE.8859.in: de_DE.ISO8859-1 ee: ee_EE.ISO8859-4 ee_EE: ee_EE.ISO8859-4 ee_EE.iso88594: ee_EE.ISO8859-4 el: el_GR.ISO8859-7 el_GR: el_GR.ISO8859-7 el_GR.iso88597: el_GR.ISO8859-7 el_GR.ISO-8859-7: el_GR.ISO8859-7 el_GR@euro: el_GR.ISO8859-15 el_GR.utf8: el_GR.UTF-8 en: en_US.ISO8859-1 en.ISO-8859-1: en_US.ISO8859-1 en_AU: en_AU.ISO8859-1 en_AU.iso88591: en_AU.ISO8859-1 en_AU.ISO-8859-1: en_AU.ISO8859-1 en_AU.ISO_8859-1: en_AU.ISO8859-1 en_AU.utf8: en_AU.UTF-8 en_BE: en_BE.ISO8859-1 en_BE@euro: en_BE.ISO8859-15 en_BE.utf8: en_BE.UTF-8 en_BW: en_BW.ISO8859-1 en_BW.utf8: en_BW.UTF-8 en_BW.iso88591: en_BW.ISO8859-1 en_BW.ISO-8859-1: en_BW.ISO8859-1 en_CA: en_CA.ISO8859-1 en_CA.iso88591: en_CA.ISO8859-1 en_CA.ISO-8859-1: en_CA.ISO8859-1 en_CA.ISO_8859-1: en_CA.ISO8859-1 en_CA.utf8: en_CA.UTF-8 en_DL.utf8: en_DL.UTF-8 en_GB: en_GB.ISO8859-1 en_GB.88591: en_GB.ISO8859-1 en_GB.88591.en: en_GB.ISO8859-1 en_GB.iso88591: en_GB.ISO8859-1 en_GB.ISO-8859-1: en_GB.ISO8859-1 en_GB.ISO_8859-1: en_GB.ISO8859-1 en_GB.iso885915: en_GB.ISO8859-15 en_GB.ISO-8859-15: en_GB.ISO8859-15 en_GB.utf8: en_GB.UTF-8 en_UK: en_GB.ISO8859-1 ENG_GB.8859: en_GB.ISO8859-1 ENG_GB.8859.in: en_GB.ISO8859-1 en_HK: en_HK.ISO8859-1 en_HK.iso88591: en_HK.ISO8859-1 en_HK.ISO-8859-1: en_HK.ISO8859-1 en_HK.utf8: en_HK.UTF-8 en_IE: en_IE.ISO8859-1 en_IE.iso88591: en_IE.ISO8859-1 en_IE.ISO-8859-1: en_IE.ISO8859-1 en_IE.iso885915: en_IE.ISO8859-15 en_IE.ISO-8859-15: en_IE.ISO8859-15 en_IE.ISO-8859-15@euro: en_IE.ISO8859-15 en_IE@euro: en_IE.ISO8859-15 en_IE.UTF-8@euro: en_IE.UTF-8 en_IE.utf8: en_IE.UTF-8 en_IN.utf8: en_IN.UTF-8 en_IN: en_IN.ISO8859-1 en_NZ: en_NZ.ISO8859-1 en_NZ.iso88591: en_NZ.ISO8859-1 en_NZ.ISO-8859-1: en_NZ.ISO8859-1 en_NZ.utf8: en_NZ.UTF-8 en_PH: en_PH.ISO8859-1 en_PH.utf8: en_PH.UTF-8 en_PH.iso88591: en_PH.ISO8859-1 en_PH.ISO-8859-1: en_PH.ISO8859-1 en_SG: en_SG.ISO8859-1 en_SG.utf8: en_SG.UTF-8 en_SG.iso88591: en_SG.ISO8859-1 en_SG.ISO-8859-1: en_SG.ISO8859-1 en_US: en_US.ISO8859-1 EN_US: en_US.ISO8859-1 en_US.88591: en_US.ISO8859-1 en_US.88591.en: en_US.ISO8859-1 en_US.iso88591: en_US.ISO8859-1 en_US.ISO-8859-1: en_US.ISO8859-1 en_US.ISO_8859-1: en_US.ISO8859-1 en_US.iso885915: en_US.ISO8859-15 en_US.ISO-8859-15: en_US.ISO8859-15 en_US.8859-15: en_US.ISO8859-15 en_US.ISO8859-15@euro: en_US.ISO8859-15 en_US.utf8: en_US.UTF-8 EN_US.UTF-8: en_US.UTF-8 en_ZA: en_ZA.ISO8859-1 en_ZA.88591: en_ZA.ISO8859-1 en_ZA.88591.en: en_ZA.ISO8859-1 en_ZA.iso88591: en_ZA.ISO8859-1 en_ZA.ISO-8859-1: en_ZA.ISO8859-1 en_ZA.ISO_8859-1: en_ZA.ISO8859-1 en_ZA.iso885915: en_ZA.ISO8859-15 en_ZA.ISO-8859-15: en_ZA.ISO8859-15 en_ZA.utf8: en_ZA.UTF-8 en_ZW: en_ZW.ISO8859-1 en_ZW.utf8: en_ZS.UTF-8 en_ZW.iso88591: en_ZW.ISO8859-1 en_ZW.ISO-8859-1: en_ZW.ISO8859-1 eo: eo_XX.ISO8859-3 eo_EO: eo_EO.ISO8859-3 eo_EO.ISO8859-3: eo_EO.ISO8859-3 eo_XX: eo_XX.ISO8859-3 eo_XX.ISO8859-3: eo_XX.ISO8859-3 es: es_ES.ISO8859-1 es.UTF-8: es_ES.UTF-8 es_AR: es_AR.ISO8859-1 es_AR.iso88591: es_AR.ISO8859-1 es_AR.ISO-8859-1: es_AR.ISO8859-1 es_AR.utf8: es_AR.UTF-8 es_BO: es_BO.ISO8859-1 es_BO.iso88591: es_BO.ISO8859-1 es_BO.ISO-8859-1: es_BO.ISO8859-1 es_BO.utf8: es_BO.UTF-8 es_CL: es_CL.ISO8859-1 es_CL.iso88591: es_CL.ISO8859-1 es_CL.ISO-8859-1: es_CL.ISO8859-1 es_CL.utf8: es_CL.UTF-8 es_CO: es_CO.ISO8859-1 es_CO.iso88591: es_CO.ISO8859-1 es_CO.ISO-8859-1: es_CO.ISO8859-1 es_CO.utf8: es_CO.UTF-8 es_CR: es_CR.ISO8859-1 es_CR.iso88591: es_CR.ISO8859-1 es_CR.ISO-8859-1: es_CR.ISO8859-1 es_CR.utf8: es_CR.UTF-8 es_DO: es_DO.ISO8859-1 es_DO.iso88591: es_DO.ISO8859-1 es_DO.ISO-8859-1: es_DO.ISO8859-1 es_DO.utf8: es_DO.UTF-8 es_EC: es_EC.ISO8859-1 es_EC.iso88591: es_EC.ISO8859-1 es_EC.ISO-8859-1: es_EC.ISO8859-1 es_EC.utf8: es_EC.UTF-8 es_ES: es_ES.ISO8859-1 es_ES.88591: es_ES.ISO8859-1 es_ES.88591.en: es_ES.ISO8859-1 es_ES.iso88591: es_ES.ISO8859-1 es_ES.ISO-8859-1: es_ES.ISO8859-1 es_ES.ISO_8859-1: es_ES.ISO8859-1 es_ES.iso885915: es_ES.ISO8859-15 es_ES.ISO-8859-15: es_ES.ISO8859-15 es_ES.ISO-8859-15@euro: es_ES.ISO8859-15 es_ES@euro: es_ES.ISO8859-15 es_ES.UTF-8@euro: es_ES.UTF-8 es_ES.utf8: es_ES.UTF-8 es_GT: es_GT.ISO8859-1 es_GT.iso88591: es_GT.ISO8859-1 es_GT.ISO-8859-1: es_GT.ISO8859-1 es_GT.utf8: es_GT.UTF-8 es_HN: es_HN.ISO8859-1 es_HN.iso88591: es_HN.ISO8859-1 es_HN.ISO-8859-1: es_HN.ISO8859-1 es_HN.utf8: es_HN.UTF-8 es_MX: es_MX.ISO8859-1 es_MX.iso88591: es_MX.ISO8859-1 es_MX.ISO-8859-1: es_MX.ISO8859-1 es_MX.utf8: es_MX.UTF-8 es_NI: es_NI.ISO8859-1 es_NI.iso88591: es_NI.ISO8859-1 es_NI.ISO-8859-1: es_NI.ISO8859-1 es_NI.utf8: es_NI.UTF-8 es_PA: es_PA.ISO8859-1 es_PA.iso88591: es_PA.ISO8859-1 es_PA.ISO-8859-1: es_PA.ISO8859-1 es_PA.iso885915: es_PA.ISO8859-15 es_PA.utf8: es_PA.UTF-8 es_PE: es_PE.ISO8859-1 es_PE.iso88591: es_PE.ISO8859-1 es_PE.ISO-8859-1: es_PE.ISO8859-1 es_PE.iso885915: es_PE.ISO8859-15 es_PE.utf8: es_PE.UTF-8 es_PR: es_PR.ISO8859-1 es_PR.iso88591: es_PR.ISO8859-1 es_PR.ISO-8859-1: es_PR.ISO8859-1 es_PR.utf8: es_PR.UTF-8 es_PY: es_PY.ISO8859-1 es_PY.iso88591: es_PY.ISO8859-1 es_PY.ISO-8859-1: es_PY.ISO8859-1 es_PY.iso885915: es_PY.ISO8859-15 es_PY.utf8: es_PY.UTF-8 es_SV: es_SV.ISO8859-1 es_SV.iso88591: es_SV.ISO8859-1 es_SV.ISO-8859-1: es_SV.ISO8859-1 es_SV.iso885915: es_SV.ISO8859-15 es_SV.utf8: es_SV.UTF-8 es_US: es_US.ISO8859-1 es_US.iso88591: es_US.ISO8859-1 es_US.ISO-8859-1: es_US.ISO8859-1 es_UY: es_UY.ISO8859-1 es_UY.iso88591: es_UY.ISO8859-1 es_UY.ISO-8859-1: es_UY.ISO8859-1 es_UY.iso885915: es_UY.ISO8859-15 es_UY.utf8: es_UY.UTF-8 es_VE: es_VE.ISO8859-1 es_VE.iso88591: es_VE.ISO8859-1 es_VE.ISO-8859-1: es_VE.ISO8859-1 es_VE.iso885915: es_VE.ISO8859-15 es_VE.utf8: es_VE.UTF-8 #if defined(SVR4) && defined(sun) XCOMM Sun Solaris 2.6 has erroneously specified Estonian as a Latin-1 XCOMM language; however this is clearly incorrect according to ISO8859. #endif XCOMM According to Estonian local standards, ISO8859-4 is not a recommended XCOMM charset. EVS8:2000 specifies ISO8859-15 as the base charset. et: et_EE.ISO8859-15 et_EE: et_EE.ISO8859-15 et_EE.iso88591: et_EE.ISO8859-1 et_EE.ISO-8859-1: et_EE.ISO8859-1 et_EE.iso88594: et_EE.ISO8859-4 et_EE.ISO-8859-4: et_EE.ISO8859-4 et_EE.iso885913: et_EE.ISO8859-13 et_EE.ISO-8859-13: et_EE.ISO8859-13 et_EE.iso885915: et_EE.ISO8859-15 et_EE.ISO-8859-15: et_EE.ISO8859-15 et_EE.utf8: et_EE.UTF-8 eu: eu_ES.ISO8859-1 eu_ES: eu_ES.ISO8859-1 eu_ES.iso88591: eu_ES.ISO8859-1 eu_ES.ISO-8859-1: eu_ES.ISO8859-1 eu_ES.iso885915: eu_ES.ISO8859-15 eu_ES.ISO-8859-15: eu_ES.ISO8859-15 eu_ES.ISO-8859-15@euro: eu_ES.ISO8859-15 eu_ES@euro: eu_ES.ISO8859-15 eu_ES.UTF-8@euro: eu_ES.UTF-8 fa: fa_IR.UTF-8 fa_IR: fa_IR.UTF-8 fa_IR.isiri3342: fa_IR.ISIRI-3342 fa_IR.utf8: fa_IR.UTF-8 fi: fi_FI.ISO8859-15 fi.ISO8859-15: fi_FI.ISO8859-15 fi_FI: fi_FI.ISO8859-15 fi_FI.88591: fi_FI.ISO8859-1 fi_FI.88591.en: fi_FI.ISO8859-1 fi_FI.iso88591: fi_FI.ISO8859-1 fi_FI.ISO-8859-1: fi_FI.ISO8859-1 fi_FI.ISO_8859-1: fi_FI.ISO8859-1 fi_FI.iso885915: fi_FI.ISO8859-15 fi_FI.ISO-8859-15: fi_FI.ISO8859-15 fi_FI.ISO-8859-15@euro: fi_FI.ISO8859-15 fi_FI@euro: fi_FI.ISO8859-15 fi_FI.utf8: fi_FI.UTF-8 fi_FI.UTF-8@euro: fi_FI.UTF-8 fo: fo_FO.ISO8859-1 fo_FO: fo_FO.ISO8859-1 fo_FO.iso88591: fo_FO.ISO8859-1 fo_FO.ISO-8859-1: fo_FO.ISO8859-1 fo_FO.iso885915: fo_FO.ISO8859-15 fo_FO.ISO-8859-15: fo_FO.ISO8859-15 fo_FO.utf8: fo_FO.UTF-8 fr: fr_FR.ISO8859-1 fr.ISO8859-15: fr_FR.ISO8859-15 fr.UTF-8: fr_FR.UTF-8 fr_BE: fr_BE.ISO8859-1 fr_BE.88591: fr_BE.ISO8859-1 fr_BE.88591.en: fr_BE.ISO8859-1 fr_BE.ISO-8859-1: fr_BE.ISO8859-1 fr_BE.ISO_8859-1: fr_BE.ISO8859-1 fr_BE.iso885915: fr_BE.ISO8859-15 fr_BE.ISO-8859-15: fr_BE.ISO8859-15 fr_BE.ISO-8859-15@euro: fr_BE.ISO8859-15 fr_BE@euro: fr_BE.ISO8859-15 fr_BE.utf8: fr_BE.UTF-8 fr_BE.UTF-8@euro: fr_BE.UTF-8 fr_CA: fr_CA.ISO8859-1 fr_CA.88591: fr_CA.ISO8859-1 fr_CA.88591.en: fr_CA.ISO8859-1 fr_CA.iso88591: fr_CA.ISO8859-1 fr_CA.ISO-8859-1: fr_CA.ISO8859-1 fr_CA.ISO_8859-1: fr_CA.ISO8859-1 fr_CA.iso885915: fr_CA.ISO8859-15 fr_CA.ISO-8859-15: fr_CA.ISO8859-15 fr_CA.utf8: fr_CA.UTF-8 fr_CH: fr_CH.ISO8859-1 fr_CH.88591: fr_CH.ISO8859-1 fr_CH.88591.en: fr_CH.ISO8859-1 fr_CH.ISO-8859-1: fr_CH.ISO8859-1 fr_CH.ISO_8859-1: fr_CH.ISO8859-1 fr_CH.iso885915: fr_CH.ISO8859-15 fr_CH.ISO-8859-15: fr_CH.ISO8859-15 fr_CH.utf8: fr_CH.UTF-8 fr_FR: fr_FR.ISO8859-1 fr_FR.88591: fr_FR.ISO8859-1 fr_FR.88591.en: fr_FR.ISO8859-1 fr_FR.iso88591: fr_FR.ISO8859-1 fr_FR.ISO-8859-1: fr_FR.ISO8859-1 fr_FR.ISO_8859-1: fr_FR.ISO8859-1 fr_FR.iso885915: fr_FR.ISO8859-15 fr_FR.ISO-8859-15: fr_FR.ISO8859-15 fr_FR.ISO-8859-15@euro: fr_FR.ISO8859-15 fr_FR@euro: fr_FR.ISO8859-15 fr_FR.UTF-8@euro: fr_FR.UTF-8 fr_FR.utf8: fr_FR.UTF-8 fr_LU: fr_LU.ISO8859-1 fr_LU.88591: fr_LU.ISO8859-1 fr_LU.88591.en: fr_LU.ISO8859-1 fr_LU.iso88591: fr_LU.ISO8859-1 fr_LU.ISO-8859-1: fr_LU.ISO8859-1 fr_LU.ISO_8859-1: fr_LU.ISO8859-1 fr_LU.iso885915: fr_LU.ISO8859-15 fr_LU.ISO-8859-15: fr_LU.ISO8859-15 fr_LU.ISO-8859-15@euro: fr_LU.ISO8859-15 fr_LU@euro: fr_LU.ISO8859-15 fr_LU.UTF-8@euro: fr_LU.UTF-8 fr_LU.utf8: fr_LU.UTF-8 FRE_FR.8859: fr_FR.ISO8859-1 FRE_FR.8859.in: fr_FR.ISO8859-1 ga: ga_IE.ISO8859-1 ga_IE: ga_IE.ISO8859-1 ga_IE.iso88591: ga_IE.ISO8859-1 ga_IE.ISO-8859-1: ga_IE.ISO8859-1 ga_IE.iso885914: ga_IE.ISO8859-14 ga_IE.ISO-8859-14: ga_IE.ISO8859-14 ga_IE.iso885915: ga_IE.ISO8859-15 ga_IE.ISO-8859-15: ga_IE.ISO8859-15 ga_IE.ISO-8859-15@euro: ga_IE.ISO8859-15 ga_IE@euro: ga_IE.ISO8859-15 ga_IE.UTF-8@euro: ga_IE.UTF-8 ga_IE.utf8: ga_IE.UTF-8 gd: gd_GB.ISO8859-1 gd_GB: gd_GB.ISO8859-1 gd_GB.iso88591: gd_GB.ISO8859-1 gd_GB.ISO-8859-1: gd_GB.ISO8859-1 gd_GB.iso885914: gd_GB.ISO8859-14 gd_GB.ISO-8859-14: gd_GB.ISO8859-14 gd_GB.iso885915: gd_GB.ISO8859-15 gd_GB.ISO-8859-15: gd_GB.ISO8859-15 gl: gl_ES.ISO8859-1 gl_ES: gl_ES.ISO8859-1 gl_ES.iso88591: gl_ES.ISO8859-1 gl_ES.ISO-8859-1: gl_ES.ISO8859-1 gl_ES.iso885915: gl_ES.ISO8859-15 gl_ES.ISO-8859-15: gl_ES.ISO8859-15 gl_ES.ISO-8859-15@euro: gl_ES.ISO8859-15 gl_ES@euro: gl_ES.ISO8859-15 gl_ES.UTF-8@euro: gl_ES.UTF-8 gl_ES.utf8: gl_ES.UTF-8 gu_IN: gu_IN.UTF-8 gu_IN.utf8: gu_IN.UTF-8 gv: gv_GB.ISO8859-1 gv_GB: gv_GB.ISO8859-1 gv_GB.iso88591: gv_GB.ISO8859-1 gv_GB.ISO-8859-1: gv_GB.ISO8859-1 gv_GB.iso885914: gv_GB.ISO8859-14 gv_GB.ISO-8859-14: gv_GB.ISO8859-14 gv_GB.iso885915: gv_GB.ISO8859-15 gv_GB.ISO-8859-15: gv_GB.ISO8859-15 he: he_IL.ISO8859-8 he_IL: he_IL.ISO8859-8 HE_IL: he_IL.ISO8859-8 he_IL.iso88598: he_IL.ISO8859-8 he_IL.ISO-8859-8: he_IL.ISO8859-8 he_IL.cp1255: he_IL.CP1255 he_IL.microsoftcp1255: he_IL.CP1255 he_IL.microsoft-cp1255: he_IL.CP1255 he_IL.MICROSOFT-CP1255: he_IL.CP1255 he_IL.utf8: he_IL.UTF-8 HE_IL.UTF-8: he_IL.UTF-8 hi: hi_IN.ISCII-DEV hi_IN: hi_IN.ISCII-DEV HI_IN: hi_IN.ISCII-DEV hi_IN.isciidev: hi_IN.ISCII-DEV hi_IN.utf8: hi_IN.UTF-8 HI_IN.UTF-8: hi_IN.UTF-8 hne: hne_IN.UTF-8 hne_IN: hne_IN.UTF-8 hne_IN.utf8: hne_IN.UTF-8 hr: hr_HR.ISO8859-2 hr_HR: hr_HR.ISO8859-2 hr_HR.iso88592: hr_HR.ISO8859-2 hr_HR.ISO-8859-2: hr_HR.ISO8859-2 hr_HR.ISO_8859-2: hr_HR.ISO8859-2 hr_HR.utf8: hr_HR.UTF-8 hu: hu_HU.ISO8859-2 hu_HU: hu_HU.ISO8859-2 hu_HU.iso88592: hu_HU.ISO8859-2 hu_HU.ISO-8859-2: hu_HU.ISO8859-2 hu_HU.utf8: hu_HU.UTF-8 XCOMM in was the old ISO code for Indonesian (now id). These lines should be XCOMM deleted in the future. in: id_ID.ISO8859-1 in_ID: id_ID.ISO8859-1 is: is_IS.ISO8859-1 is_IS: is_IS.ISO8859-1 is_IS.iso88591: is_IS.ISO8859-1 is_IS.ISO-8859-1: is_IS.ISO8859-1 is_IS.ISO_8859-1: is_IS.ISO8859-1 is_IS.iso885915: is_IS.ISO8859-15 is_IS.ISO-8859-15: is_IS.ISO8859-15 is_IS.utf8: is_IS.UTF-8 it: it_IT.ISO8859-1 it.ISO8859-15: it_IT.ISO8859-15 it.UTF-8: it_IT.UTF-8 it_CH: it_CH.ISO8859-1 it_CH.iso88591: it_CH.ISO8859-1 it_CH.ISO_8859-1: it_CH.ISO8859-1 it_CH.ISO-8859-1: it_CH.ISO8859-1 it_CH.iso885915: it_CH.ISO8859-15 it_CH.utf8: it_CH.UTF-8 it_IT: it_IT.ISO8859-1 it_IT.88591: it_IT.ISO8859-1 it_IT.88591.en: it_IT.ISO8859-1 it_IT.iso88591: it_IT.ISO8859-1 it_IT.ISO-8859-1: it_IT.ISO8859-1 it_IT.ISO_8859-1: it_IT.ISO8859-1 it_IT.iso885915: it_IT.ISO8859-15 it_IT.ISO-8859-15: it_IT.ISO8859-15 it_IT.ISO-8859-15@euro: it_IT.ISO8859-15 it_IT@euro: it_IT.ISO8859-15 it_IT.utf8: it_IT.UTF-8 it_IT.UTF-8@euro: it_IT.UTF-8 XCOMM NUNACOM is an encoding for the Inuktitut syllabics XCOMM we have little else on this encoding. iu: iu_CA.NUNACOM-8 iu_CA: iu_CA.NUNACOM-8 iu_CA.nunacom8: iu_CA.NUNACOM-8 XCOMM iw was the old ISO code for Hebrew (now he). These lines should be XCOMM deleted in the future. iw: he_IL.ISO8859-8 iw_IL: he_IL.ISO8859-8 Iw_IL: he_IL.ISO8859-8 iw_IL.iso88598: he_IL.ISO8859-8 iw_IL.ISO-8859-8: he_IL.ISO8859-8 ja_JP: ja_JP.eucJP ja: ja_JP.eucJP ja.JIS: ja_JP.JIS7 ja.SJIS: ja_JP.SJIS ja_JP.ujis: ja_JP.eucJP Jp_JP: ja_JP.eucJP ja_JP.AJEC: ja_JP.eucJP ja_JP.EUC: ja_JP.eucJP ja_JP.EUC-JP: ja_JP.eucJP ja_JP.EUC_JP: ja_JP.eucJP ja_JP.eucjp: ja_JP.eucJP ja_JP.ISO-2022-JP: ja_JP.JIS7 ja_JP.JIS: ja_JP.JIS7 ja_JP.jis7: ja_JP.JIS7 ja_JP.mscode: ja_JP.SJIS ja_JP.PCK: ja_JP.SJIS ja_JP.SJIS: ja_JP.SJIS ja_JP.sjis: ja_JP.SJIS ja_JP.utf8: ja_JP.UTF-8 JA_JP.utf8: ja_JP.UTF-8 ka: ka_GE.GEORGIAN-ACADEMY ka_GE: ka_GE.GEORGIAN-ACADEMY ka_GE.georgianacademy: ka_GE.GEORGIAN-ACADEMY ka_GE.georgianrs: ka_GE.GEORGIAN-ACADEMY ka_GE.georgianps: ka_GE.GEORGIAN-PS kl: kl_GL.ISO8859-1 kl_GL: kl_GL.ISO8859-1 kl_GL.iso88591: kl_GL.ISO8859-1 kl_GL.ISO-8859-1: kl_GL.ISO8859-1 kl_GL.iso885915: kl_GL.ISO8859-15 kl_GL.utf8: kl_GL.UTF-8 km_KH: km_KH.UTF-8 km_KH.utf8: km_KH.UTF-8 kn: kn_IN.UTF-8 kn_IN: kn_IN.UTF-8 kn_IN.utf8: kn_IN.UTF-8 ko: ko_KR.eucKR ko.UTF-8: ko_KR.UTF-8 ko_KR: ko_KR.eucKR KO_KR: ko_KR.eucKR ko_KR.EUC: ko_KR.eucKR ko_KR.EUC-KR: ko_KR.eucKR ko_KR.euc: ko_KR.eucKR ko_KR.euckr: ko_KR.eucKR ko_KR.utf8: ko_KR.UTF-8 KO_KR.UTF-8: ko_KR.UTF-8 ks: ks_IN.UTF-8 ks_IN: ks_IN.UTF-8 ks_IN.utf8: ks_IN.UTF-8 ks_IN@devanagari: ks_IN@devanagari.UTF-8 ks_IN@devanagari.utf8: ks_IN@devanagari.UTF-8 kw: kw_GB.ISO8859-1 kw_GB: kw_GB.ISO8859-1 kw_GB.iso88591: kw_GB.ISO8859-1 kw_GB.ISO-8859-1: kw_GB.ISO8859-1 kw_GB.iso885914: kw_GB.ISO8859-14 kw_GB.ISO-8859-14: kw_GB.ISO8859-14 kw_GB.iso885915: kw_GB.ISO8859-15 kw_GB.ISO-8859-15: kw_GB.ISO8859-15 ky: ky_KG.UTF-8 ky_KG: ky_KG.UTF-8 ky_KG.UTF-8: ky_KG.UTF-8 ky_KG.utf8: ky_KG.UTF-8 lo: lo_LA.MULELAO-1 lo_LA: lo_LA.MULELAO-1 lo_LA.cp1133: lo_LA.IBM-CP1133 lo_LA.ibmcp1133: lo_LA.IBM-CP1133 lo_LA.mulelao1: lo_LA.MULELAO-1 #if defined(VeryOldFreeBSD) XCOMM most locales in FreeBSD 2.1.[56] do not work, allow use of FreeBSD's XCOMM generic Latin-1 locale name. N.B. "lt" is a bad code to use for a XCOMM generic Latin-1 locale anyway because it is the country code for XCOMM Lithuania, which by default uses Latin-7 (ISO-8859-13). lt_LN.ISO_8859-1: lt_LN.ISO8859-1 #endif lt: lt_LT.ISO8859-13 lt_LT: lt_LT.ISO8859-13 lt_LT.iso88594: lt_LT.ISO8859-4 lt_LT.ISO-8859-4: lt_LT.ISO8859-4 lt_LT.ISO_8859-4: lt_LT.ISO8859-4 lt_LT.iso885913: lt_LT.ISO8859-13 lt_LT.ISO-8859-13: lt_LT.ISO8859-13 lt_LT.ISO_8859-13: lt_LT.ISO8859-13 lt_LT.utf8: lt_LT.UTF-8 lv: lv_LV.ISO8859-13 lv_LV: lv_LV.ISO8859-13 lv_LV.iso88594: lv_LV.ISO8859-4 lv_LV.ISO-8859-4: lv_LV.ISO8859-4 lv_LV.iso885913: lv_LV.ISO8859-13 lv_LV.ISO-8859-13: lv_LV.ISO8859-13 lv_LV.ISO_8859-13: lv_LV.ISO8859-13 lv_LV.utf8: lv_LV.UTF-8 mai: mai_IN.UTF-8 mai_IN: mai_IN.UTF-8 mai_IN.utf8: mai_IN.UTF-8 mi: mi_NZ.ISO8859-1 mi_NZ: mi_NZ.ISO8859-1 mi_NZ.iso88591: mi_NZ.ISO8859-1 mk: mk_MK.ISO8859-5 mk_MK: mk_MK.ISO8859-5 mk_MK.iso88595: mk_MK.ISO8859-5 mk_MK.ISO-8859-5: mk_MK.ISO8859-5 mk_MK.cp1251: mk_MK.CP1251 mk_MK.microsoftcp1251: mk_MK.CP1251 mk_MK.microsoft-cp1251: mk_MK.CP1251 mk_MK.MICROSOFT-CP1251: mk_MK.CP1251 mk_MK.utf8: mk_MK.UTF-8 ml: ml_IN.UTF-8 ml_IN: ml_IN.UTF-8 ml_IN.utf8: ml_IN.UTF-8 mr: mr_IN.UTF-8 mr_IN: mr_IN.UTF-8 mr_IN.utf8: mr_IN.UTF-8 ms: ms_MY.ISO8859-1 ms_MY: ms_MY.ISO8859-1 ms_MY.iso88591: ms_MY.ISO8859-1 ms_MY.ISO-8859-1: ms_MY.ISO8859-1 mt: mt_MT.ISO8859-3 mt_MT: mt_MT.ISO8859-3 mt_MT.ISO-8859-3: mt_MT.ISO8859-3 nb: nb_NO.ISO8859-1 nb_NO: nb_NO.ISO8859-1 nb_NO.88591: nb_NO.ISO8859-1 nb_NO.iso88591: nb_NO.ISO8859-1 nb_NO.ISO-8859-1: nb_NO.ISO8859-1 nb_NO.iso885915: nb_NO.ISO8859-15 nb_NO.ISO-8859-15: nb_NO.ISO8859-15 nb_NO.utf8: nb_NO.UTF-8 ne_NP: ne_NP.UTF-8 ne_NP.utf8: ne_NP.UTF-8 nl: nl_NL.ISO8859-1 nl.ISO8859-15: nl_NL.ISO8859-15 nl_BE: nl_BE.ISO8859-1 nl_BE.88591: nl_BE.ISO8859-1 nl_BE.88591.en: nl_BE.ISO8859-1 nl_BE.iso88591: nl_BE.ISO8859-1 nl_BE.ISO-8859-1: nl_BE.ISO8859-1 nl_BE.ISO_8859-1: nl_BE.ISO8859-1 nl_BE.iso885915: nl_BE.ISO8859-15 nl_BE.ISO-8859-15: nl_BE.ISO8859-15 nl_BE.ISO-8859-15@euro: nl_BE.ISO8859-15 nl_BE@euro: nl_BE.ISO8859-15 nl_BE.utf8: nl_BE.UTF-8 nl_BE.UTF-8@euro: nl_BE.UTF-8 nl_NL: nl_NL.ISO8859-1 nl_NL.88591: nl_NL.ISO8859-1 nl_NL.88591.en: nl_NL.ISO8859-1 nl_NL.iso88591: nl_NL.ISO8859-1 nl_NL.ISO-8859-1: nl_NL.ISO8859-1 nl_NL.ISO_8859-1: nl_NL.ISO8859-1 nl_NL.iso885915: nl_NL.ISO8859-15 nl_NL.ISO-8859-15: nl_NL.ISO8859-15 nl_NL.ISO-8859-15@euro: nl_NL.ISO8859-15 nl_NL@euro: nl_NL.ISO8859-15 nl_NL.utf8: nl_NL.UTF-8 nl_NL.UTF-8@euro: nl_NL.UTF-8 nn: nn_NO.ISO8859-1 nn_NO: nn_NO.ISO8859-1 nn_NO.88591: nn_NO.ISO8859-1 nn_NO.ISO-8859-1: nn_NO.ISO8859-1 nn_NO.ISO_8859-1: nn_NO.ISO8859-1 nn_NO.iso885915: nn_NO.ISO8859-15 nn_NO.ISO-8859-15: nn_NO.ISO8859-15 nn_NO.utf8: nn_NO.UTF-8 no: no_NO.ISO8859-1 no_NO: no_NO.ISO8859-1 no_NO.88591: no_NO.ISO8859-1 no_NO.88591.en: no_NO.ISO8859-1 no_NO.iso88591: no_NO.ISO8859-1 no_NO.ISO-8859-1: no_NO.ISO8859-1 no_NO.ISO8859-1@bokmal: no_NO.ISO8859-1 no_NO.ISO8859-1@nynorsk: no_NO.ISO8859-1 no_NO.iso885915: no_NO.ISO8859-15 no_NO.ISO-8859-15: no_NO.ISO8859-15 no_NO.utf8: no_NO.UTF-8 nr: nr_ZA.ISO8859-1 nr_ZA: nr_ZA.ISO8859-1 nr_ZA.iso88591: nr_ZA.ISO8859-1 nr_ZA.utf8: nr_ZA.UTF-8 nso: nso_ZA.ISO8859-15 nso_ZA: nso_ZA.ISO8859-15 nso_ZA.iso885915: nso_ZA.ISO8859-15 nso_ZA.utf8: nso_ZA.UTF-8 ny: ny_NO.ISO8859-1 ny_NO: ny_NO.ISO8859-1 ny_NO.88591: ny_NO.ISO8859-1 ny_NO.ISO_8859-1: ny_NO.ISO8859-1 ny_NO.iso885915: ny_NO.ISO8859-15 no@nynorsk: ny_NO.ISO8859-1 nynorsk: nn_NO.ISO8859-1 oc: oc_FR.ISO8859-1 oc_FR: oc_FR.ISO8859-1 oc_FR.iso88591: oc_FR.ISO8859-1 oc_FR.ISO-8859-1: oc_FR.ISO8859-1 oc_FR.iso885915: oc_FR.ISO8859-15 oc_FR.ISO-8859-15: oc_FR.ISO8859-15 oc_FR@euro: oc_FR.ISO8859-15 or: or_IN.UTF-8 or_IN: or_IN.UTF-8 or_IN.utf8: or_IN.UTF-8 pa: pa_IN.UTF-8 pa_IN: pa_IN.UTF-8 pa_IN.utf8: pa_IN.UTF-8 pa_PK.utf8: pa_PK.UTF-8 pd: pd_US.ISO8859-1 pd_DE: pd_DE.ISO8859-1 pd_US: pd_US.ISO8859-1 pd_DE.iso88591: pd_DE.ISO8859-1 pd_US.iso88591: pd_US.ISO8859-1 pd_DE.iso885915: pd_DE.ISO8859-15 pd_US.iso885915: pd_US.ISO8859-15 ph: ph_PH.ISO8859-1 ph_PH: ph_PH.ISO8859-1 ph_PH.iso88591: ph_PH.ISO8859-1 pl: pl_PL.ISO8859-2 pl.UTF-8: pl_PL.UTF-8 pl_PL: pl_PL.ISO8859-2 pl_PL.iso88592: pl_PL.ISO8859-2 pl_PL.ISO-8859-2: pl_PL.ISO8859-2 pl_PL.utf8: pl_PL.UTF-8 pp: pp_AN.ISO8859-1 pp_AN: pp_AN.ISO8859-1 pp_AN.iso88591: pp_AN.ISO8859-1 pt: pt_PT.ISO8859-1 pt.ISO8859-15: pt_PT.ISO8859-15 pt_BR: pt_BR.ISO8859-1 pt_BR.88591: pt_BR.ISO8859-1 pt_BR.88591.en: pt_BR.ISO8859-1 pt_BR.iso88591: pt_BR.ISO8859-1 pt_BR.ISO-8859-1: pt_BR.ISO8859-1 pt_BR.ISO_8859-1: pt_BR.ISO8859-1 pt_BR.iso885915: pt_BR.ISO8859-15 pt_BR.utf8: pt_BR.UTF-8 pt_PT: pt_PT.ISO8859-1 pt_PT.88591: pt_PT.ISO8859-1 pt_PT.88591.en: pt_PT.ISO8859-1 pt_PT.iso88591: pt_PT.ISO8859-1 pt_PT.ISO-8859-1: pt_PT.ISO8859-1 pt_PT.ISO_8859-1: pt_PT.ISO8859-1 pt_PT.iso885915: pt_PT.ISO8859-15 pt_PT.ISO-8859-15: pt_PT.ISO8859-15 pt_PT.ISO-8859-15@euro: pt_PT.ISO8859-15 pt_PT@euro: pt_PT.ISO8859-15 pt_PT.utf8: pt_PT.UTF-8 pt_PT.UTF-8@euro: pt_PT.UTF-8 ro: ro_RO.ISO8859-2 ro_RO: ro_RO.ISO8859-2 ro_RO.iso88592: ro_RO.ISO8859-2 ro_RO.ISO-8859-2: ro_RO.ISO8859-2 ro_RO.utf8: ro_RO.UTF-8 ru: ru_RU.UTF-8 ru.koi8-r: ru_RU.KOI8-R ru.UTF-8: ru_RU.UTF-8 ru_RU: ru_RU.UTF-8 ru_RU.utf8: ru_RU.UTF-8 ru_RU.iso88595: ru_RU.ISO8859-5 ru_RU.ISO-8859-5: ru_RU.ISO8859-5 ru_RU.koi8r: ru_RU.KOI8-R ru_RU.cp1251: ru_RU.CP1251 ru_RU.microsoftcp1251: ru_RU.CP1251 ru_RU.microsoft-cp1251: ru_RU.CP1251 ru_RU.MICROSOFT-CP1251: ru_RU.CP1251 #if defined(INCLUDE_ru_SU) XCOMM ru_SU is redundant now ru_SU: ru_RU.KOI8-R ru_SU.ISO8859-5: ru_RU.ISO8859-5 ru_SU.KOI8-R: ru_RU.KOI8-R #endif ru_UA: ru_UA.KOI8-U ru_UA.koi8u: ru_UA.KOI8-U ru_UA.cp1251: ru_UA.CP1251 ru_UA.microsoftcp1251: ru_UA.CP1251 ru_UA.microsoft-cp1251: ru_UA.CP1251 ru_UA.MICROSOFT-CP1251: ru_UA.CP1251 rw: rw_RW.ISO8859-1 rw_RW: rw_RW.ISO8859-1 rw_RW.iso8859-1: rw_RW.ISO8859-1 rw_RW.ISO-8859-1: rw_RW.ISO8859-1 rw_RW.utf8: rw_RW.UTF-8 sd: sd_IN.UTF-8 sd_IN.utf8: sd_IN.UTF-8 sd@devanagari: sd_IN@devanagari.UTF-8 sd_IN@devanagari: sd_IN@devanagari.UTF-8 sd_IN@devanagari.utf8: sd_IN@devanagari.UTF-8 se_NO: se_NO.UTF-8 se_NO.utf8: se_NO.UTF-8 XCOMM sh was the old ISO code for Serbo-Croatian (now individual sr and hr). XCOMM YU was the old ISO code for Yugoslavia (later CS for Serbia&Montenegro). XCOMM CS was the old ISO code for Serbia&Montenegro (now separate RS and ME). XCOMM These lines should be deleted in the future. sh: sr_RS.UTF-8@latin sh_BA.ISO8859-2@bosnia: sr_CS.ISO8859-2 sh_HR.iso88592: hr_HR.ISO8859-2 sh_YU: sr_RS.UTF-8@latin sh_YU.utf8: sr_RS.UTF-8@latin si: si_LK.UTF-8 si_LK: si_LK.UTF-8 sk: sk_SK.ISO8859-2 sk_SK: sk_SK.ISO8859-2 sk_SK.iso88592: sk_SK.ISO8859-2 sk_SK.ISO-8859-2: sk_SK.ISO8859-2 sk_SK.utf8: sk_SK.UTF-8 sl: sl_SI.ISO8859-2 sl_SI: sl_SI.ISO8859-2 sl_SI.iso88592: sl_SI.ISO8859-2 sl_SI.ISO-8859-2: sl_SI.ISO8859-2 sl_SI.utf8: sl_SI.UTF-8 sq: sq_AL.ISO8859-2 sq_AL: sq_AL.ISO8859-2 sq_AL.iso88592: sq_AL.ISO8859-2 sq_AL.ISO-8859-2: sq_AL.ISO8859-2 sq_AL.utf8: sq_AL.UTF-8 XCOMM YU was the old ISO code for Yugoslavia (later CS for Serbia&Montenegro). XCOMM CS was the old ISO code for Serbia&Montenegro (now separate RS and ME). XCOMM Some of these lines should be deleted in the future. sr: sr_RS.UTF-8 sr_YU: sr_RS.UTF-8@latin sr@cyrillic: sr_RS.UTF-8 sr_YU@cyrillic: sr_RS.UTF-8 sr_YU.utf8: sr_RS.UTF-8 sr_YU.UTF-8@cyrillic: sr_RS.UTF-8 sr_CS: sr_CS.UTF-8 sr@Latn: sr_CS.UTF-8@latin sr_CS@Latn: sr_CS.UTF-8@latin sr_CS.utf8: sr_CS.UTF-8 sr_CS.UTF-8@Latn: sr_CS.UTF-8@latin sr_RS: sr_RS.UTF-8 sr@latin: sr_RS.UTF-8@latin sr_RS@latin: sr_RS.UTF-8@latin sr_RS@Latn: sr_RS.UTF-8@latin sr_RS.UTF-8@Latn: sr_RS.UTF-8@latin sr_RS.utf8: sr_RS.UTF-8 sr_ME: sr_ME.UTF-8 sr_ME.utf8: sr_ME.UTF-8 ss: ss_ZA.ISO8859-1 ss_ZA: ss_ZA.ISO8859-1 ss_ZA.iso88591: ss_ZA.ISO8859-1 ss_ZA.utf8: ss_ZA.UTF-8 st: st_ZA.ISO8859-1 st_ZA: st_ZA.ISO8859-1 st_ZA.iso88591: st_ZA.ISO8859-1 st_ZA.utf8: st_ZA.UTF-8 sv: sv_SE.ISO8859-1 sv.ISO8859-15: sv_SE.ISO8859-15 sv.UTF-8: sv_SE.UTF-8 sv_FI: sv_FI.ISO8859-1 sv_FI.iso88591: sv_FI.ISO8859-1 sv_FI.ISO-8859-1: sv_FI.ISO8859-1 sv_FI.iso885915: sv_FI.ISO8859-15 sv_FI.ISO-8859-15: sv_FI.ISO8859-15 sv_FI.ISO-8859-15@euro: sv_FI.ISO8859-15 sv_FI@euro: sv_FI.ISO8859-15 sv_FI.UTF-8@euro: sv_FI.UTF-8 sv_FI.utf8: sv_FI.UTF-8 sv_SE: sv_SE.ISO8859-1 sv_SE.88591: sv_SE.ISO8859-1 sv_SE.88591.en: sv_SE.ISO8859-1 sv_SE.iso88591: sv_SE.ISO8859-1 sv_SE.ISO-8859-1: sv_SE.ISO8859-1 sv_SE.ISO_8859-1: sv_SE.ISO8859-1 sv_SE.iso885915: sv_SE.ISO8859-15 sv_SE.ISO-8859-15: sv_SE.ISO8859-15 sv_SE@euro: sv_SE.ISO8859-15 sv_SE.utf8: sv_SE.UTF-8 ta: ta_IN.TSCII-0 ta_IN: ta_IN.TSCII-0 ta_IN.tscii: ta_IN.TSCII-0 ta_IN.tscii0: ta_IN.TSCII-0 te: te_IN.UTF-8 te.UTF-8: te_IN.UTF-8 te_IN.utf8: te_IN.UTF-8 tg: tg_TJ.KOI8-C tg_TJ: tg_TJ.KOI8-C tg_TJ.koi8c: tg_TJ.KOI8-C th: th_TH.ISO8859-11 th_TH: th_TH.ISO8859-11 th_TH.ISO-8859-11: th_TH.ISO8859-11 th_TH.tis620: th_TH.TIS620 th_TH.TIS-620: th_TH.TIS620 th_TH.TACTIS: th_TH.TIS620 th_TH.utf8: th_TH.UTF-8 tl: tl_PH.ISO8859-1 tl_PH: tl_PH.ISO8859-1 tl_PH.iso88591: tl_PH.ISO8859-1 tl_PH.ISO-8859-1: tl_PH.ISO8859-1 tn: tn_ZA.ISO8859-15 tn_ZA: tn_ZA.ISO8859-15 tn_ZA.iso8859-15: tn_ZA.ISO8859-15 tn_ZA.utf8: tn_ZA.UTF-8 tr: tr_TR.ISO8859-9 tr_TR: tr_TR.ISO8859-9 TR_TR: tr_TR.ISO8859-9 tr_TR.iso88599: tr_TR.ISO8859-9 tr_TR.ISO-8859-9: tr_TR.ISO8859-9 tr_TR.utf8: tr_TR.UTF-8 TR_TR.utf8: tr_TR.UTF-8 ts: ts_ZA.ISO8859-1 ts_ZA: ts_ZA.ISO8859-1 ts_ZA.iso88591: ts_ZA.ISO8859-1 ts_ZA.utf8: ts_ZA.UTF-8 tt: tt_RU.TATAR-CYR tt_RU: tt_RU.TATAR-CYR tt_RU.tatarcyr: tt_RU.TATAR-CYR tt_RU.koi8c: tt_RU.KOI8-C uk: uk_UA.KOI8-U uk_UA: uk_UA.KOI8-U uk_UA.iso88595: uk_UA.ISO8859-5 uk_UA.koi8u: uk_UA.KOI8-U uk_UA.cp1251: uk_UA.CP1251 uk_UA.microsoftcp1251: uk_UA.CP1251 uk_UA.microsoft-cp1251: uk_UA.CP1251 uk_UA.MICROSOFT-CP1251: uk_UA.CP1251 uk_UA.utf8: uk_UA.UTF-8 ur: ur_IN.UTF-8 ur_IN: ur_IN.UTF-8 ur_IN.utf8: ur_IN.UTF-8 ur: ur_PK.CP1256 ur_PK: ur_PK.CP1256 ur_PK.cp1256: ur_PK.CP1256 ur_PK.microsoftcp1256: ur_PK.CP1256 ur_PK.microsoft-cp1256: ur_PK.CP1256 ur_PK.MICROSOFT-CP1256: ur_PK.CP1256 uz: uz_UZ.UTF-8 uz_UZ: uz_UZ.UTF-8 uz_UZ.ISO-8859-1: uz_UZ.ISO8859-1 uz_UZ@cyrillic: uz_UZ.UTF-8 uz_UZ.UTF-8@cyrillic: uz_UZ.UTF-8 ve: ve_ZA.UTF-8 ve_ZA: ve_ZA.UTF-8 ve_ZA.utf8: ve_ZA.UTF-8 vi: vi_VN.TCVN vi_VN: vi_VN.TCVN Vi_VN: vi_VN.TCVN VI_VN: vi_VN.TCVN vi_VN.tcvn: vi_VN.TCVN vi_VN.tcvn5712: vi_VN.TCVN vi_VN.viscii: vi_VN.VISCII vi_VN.viscii111: vi_VN.VISCII vi_VN.utf8: vi_VN.UTF-8 VI_VN.UTF-8: vi_VN.UTF-8 wa: wa_BE.ISO8859-1 wa_BE: wa_BE.ISO8859-1 wa_BE.iso88591: wa_BE.ISO8859-1 wa_BE.ISO-8859-1: wa_BE.ISO8859-1 wa_BE.iso885915: wa_BE.ISO8859-15 wa_BE.ISO-8859-15: wa_BE.ISO8859-15 wa_BE.ISO-8859-15@euro: wa_BE.ISO8859-15 wa_BE@euro: wa_BE.ISO8859-15 xh: xh_ZA.ISO8859-1 xh_ZA: xh_ZA.ISO8859-1 xh_ZA.iso88591: xh_ZA.ISO8859-1 xh_ZA.utf8: xh_ZA.UTF-8 yi: yi_US.CP1255 yi_US: yi_US.CP1255 yi_US.cp1255: yi_US.CP1255 yi_US.microsoftcp1255: yi_US.CP1255 yi_US.microsoft-cp1255: yi_US.CP1255 yi_US.MICROSOFT-CP1255: yi_US.CP1255 zh_CN: zh_CN.gb2312 zh_CN.Big5: zh_TW.big5 zh_CN.EUC: zh_CN.eucCN zh_CN.GB2312: zh_CN.gb2312 zh_CN.GBK: zh_CN.gbk zh_CN.GB18030: zh_CN.gb18030 zh_CN.big5: zh_TW.big5 zh_CN.euc: zh_CN.eucCN zh_CN.utf8: zh_CN.UTF-8 ZH_CN.UTF-8: zh_CN.UTF-8 zh_HK: zh_HK.big5hkscs zh_HK.BIG5HK: zh_HK.big5hkscs zh_HK.Big5hkscs: zh_HK.big5hkscs zh_HK.Big5-hkscs: zh_HK.big5hkscs zh_HK.Big5_hkscs: zh_HK.big5hkscs zh_HK.Big5HKSCS: zh_HK.big5hkscs zh_HK.BIG5-HKSCS: zh_HK.big5hkscs zh_HK.BIG5_HKSCS: zh_HK.big5hkscs zh_HK.Big5-HKSCS: zh_HK.big5hkscs zh_HK.big5-hkscs: zh_HK.big5hkscs zh_HK.Big5-HKSCS: zh_HK.big5hkscs zh_HK.Big5HKSCS: zh_HK.big5hkscs zh_HK.Big5: zh_HK.big5 zh_HK.utf8: zh_HK.UTF-8 ZH_HK.UTF-8: zh_HK.UTF-8 ZH_SG.UTF-8: zh_SG.UTF-8 zh_TW: zh_TW.big5 zh_TW.Big5: zh_TW.big5 zh_TW.BIG5: zh_TW.big5 Zh_TW.big5: zh_TW.big5 zh_TW.EUC: zh_TW.eucTW zh_TW.EUC-TW: zh_TW.eucTW zh_TW.utf8: zh_TW.UTF-8 ZH_TW.UTF-8: zh_TW.UTF-8 zu: zu_ZA.ISO8859-1 zu_ZA: zu_ZA.ISO8859-1 zu_ZA.iso88591: zu_ZA.ISO8859-1 zu_ZA.utf8: zu_ZA.UTF-8 XCOMM The following locale names are used in SCO 3.0 english_uk.8859: en_GB.ISO8859-1 english_us.8859: en_US.ISO8859-1 english_us.ascii: en_US.ISO8859-1 french_france.8859: fr_FR.ISO8859-1 german_germany.8859: de_DE.ISO8859-1 portuguese_brazil.8859: pt_BR.ISO8859-1 spanish_spain.8859: es_ES.ISO8859-1 XCOMM The following locale names are used in HPUX 9.x american.iso88591: en_US.ISO8859-1 arabic.iso88596: ar_AA.ISO8859-6 bokmal: nb_NO.ISO8859-1 bokml: nb_NO.ISO8859-1 bulgarian: bg_BG.CP1251 c-french.iso88591: fr_CA.ISO8859-1 catalan: ca_ES.ISO8859-1 chinese-s: zh_CN.eucCN chinese-t: zh_TW.eucTW croatian: hr_HR.ISO8859-2 czech: cs_CZ.ISO8859-2 danish: da_DK.ISO8859-1 dansk: da_DK.ISO8859-1 danish.iso88591: da_DK.ISO8859-1 deutsch: de_DE.ISO8859-1 dutch: nl_NL.ISO8859-1 dutch.iso88591: nl_BE.ISO8859-1 eesti: et_EE.ISO8859-1 english.iso88591: en_EN.ISO8859-1 estonian: et_EE.ISO8859-1 finnish: fi_FI.ISO8859-1 finnish.iso88591: fi_FI.ISO8859-1 franais: fr_FR.ISO8859-1 french: fr_FR.ISO8859-1 french.iso88591: fr_CH.ISO8859-1 galego: gl_ES.ISO8859-1 galician: gl_ES.ISO8859-1 german: de_DE.ISO8859-1 german.iso88591: de_CH.ISO8859-1 greek: el_GR.ISO8859-7 greek.iso88597: el_GR.ISO8859-7 hebrew: he_IL.ISO8859-8 hebrew.iso88598: he_IL.ISO8859-8 hrvatski: hr_HR.ISO8859-2 hungarian: hu_HU.ISO8859-2 icelandic.iso88591: is_IS.ISO8859-1 icelandic: is_IS.ISO8859-1 italian: it_IT.ISO8859-1 italian.iso88591: it_IT.ISO8859-1 japanese: ja_JP.eucJP japanese.euc: ja_JP.eucJP japanese.sjis: ja_JP.SJIS korean: ko_KR.eucKR korean.euc: ko_KR.eucKR lithuanian: lt_LT.ISO8859-13 norwegian: no_NO.ISO8859-1 norwegian.iso88591: no_NO.ISO8859-1 polish: pl_PL.ISO8859-2 portuguese: pt_PT.ISO8859-1 portuguese.iso88591: pt_PT.ISO8859-1 romanian: ro_RO.ISO8859-2 rumanian: ro_RO.ISO8859-2 russian: ru_RU.ISO8859-5 serbocroatian: sr_RS.UTF-8@latin sinhala: si_LK.UTF-8 slovak: sk_SK.ISO8859-2 slovene: sl_SI.ISO8859-2 slovenian: sl_SI.ISO8859-2 spanish: es_ES.ISO8859-1 spanish.iso88591: es_ES.ISO8859-1 swedish: sv_SE.ISO8859-1 swedish.iso88591: sv_SE.ISO8859-1 turkish: tr_TR.ISO8859-9 turkish.iso88599: tr_TR.ISO8859-9 thai: th_TH.ISO8859-11 univ.utf8: en_US.UTF-8 XCOMM Digital Unix utf universal.utf8@ucs4: en_US.UTF-8 XCOMM Solaris and SunOS have iso_8859_1 and iso_8859_15 LC_CTYPES XCOMM to augment LANG=C iso_8859_1: en_US.ISO8859-1 iso_8859_15: en_US.ISO8859-15 #ifdef WIN32 XCOMM Microsoft Windows/NT 4.0 SP3 XCOMM parser doesn't grok embedded spaces in locale name Afrikaans_South Africa.1252: af_ZA.ISO8859-1 Arabic_Bahrain.1256: ar_BH.ISO8859-6 Arabic_Algeria.1256: ar_DZ.ISO8859-6 Arabic_Egypt.1256: ar_EG.ISO8859-6 Arabic_Iraq.1256: ar_IQ.ISO8859-6 Arabic_Jordan.1256: ar_JO.ISO8859-6 Arabic_Kuwait.1256: ar_KW.ISO8859-6 Arabic_Lebanon.1256: ar_LB.ISO8859-6 Arabic_Libya.1256: ar_LY.ISO8859-6 Arabic_Morocco.1256: ar_MA.ISO8859-6 Arabic_Oman.1256: ar_OM.ISO8859-6 Arabic_Qatar.1256: ar_QA.ISO8859-6 Arabic_Saudi Arabia.1256: ar_SA.ISO8859-6 Arabic_Tunisia.1256: ar_TN.ISO8859-6 Arabic_Yemen.1256: ar_YE.ISO8859-6 Belarusian_Belarus.1251: be_BY.ISO8859-5 Bulgarian_Bulgaria.1251: bg_BG.ISO8859-5 Catalan_Andorra.1252: ca_AD.ISO8859-1 Catalan_Spain.1252: ca_ES.ISO8859-1 Catalan_France.1252: ca_FR.ISO8859-1 Catalan_Italy.1252: ca_IT.ISO8859-1 Czech_Czech Republic.1250: cs_CZ.ISO8859-2 Danish_Denmark.1252: da_DK.ISO8859-1 German_Austria.1252: de_AT.ISO8859-1 German_Switzerland.1252: de_CH.ISO8859-1 German_Germany.1252: de_DE.ISO8859-1 German_Liechtenstein.1252: de_LI.ISO8859-1 German_Luxembourg.1252: de_LU.ISO8859-1 Greek_Greece.1253: el_GR.ISO8859-7 English_Australia.1252: en_AU.ISO8859-1 English_Belize.1252: en_BZ.ISO8859-1 English_Canada.1252: en_CA.ISO8859-1 English_Ireland.1252: en_IE.ISO8859-1 English_Jamaica.1252: en_JM.ISO8859-1 English_New Zealand.1252: en_NZ.ISO8859-1 English_Trinidad y Tobago.1252: en_TT.ISO8859-1 English_United Kingdom.1252: en_UK.ISO8859-1 English_United States.1252: en_US.ISO8859-1 English_South Africa.1252: en_ZA.ISO8859-1 Spanish_Argentina.1252: es_AR.ISO8859-1 Spanish_Bolivia.1252: es_BO.ISO8859-1 Spanish_Chile.1252: es_CL.ISO8859-1 Spanish_Colombia.1252: es_CO.ISO8859-1 Spanish_Costa Rica.1252: es_CR.ISO8859-1 Spanish_Dominican Republic.1252: es_DO.ISO8859-1 Spanish_Ecuador.1252: es_EC.ISO8859-1 Spanish - Modern Sort_Spain.1252: es_ES.ISO8859-1 Spanish - Traditional Sort_Spain.1252: es_ES.ISO8859-1 Spanish_Guatemala.1252: es_GT.ISO8859-1 Spanish_Honduras.1252: es_HN.ISO8859-1 Spanish_Mexican.1252: es_MX.ISO8859-1 Spanish_Nicaragua.1252: es_NI.ISO8859-1 Spanish_Panama.1252: es_PA.ISO8859-1 Spanish_Paraguay.1252: es_PY.ISO8859-1 Spanish_Peru.1252: es_PE.ISO8859-1 Spanish_Puerto Rico.1252: es_PR.ISO8859-1 Spanish_El Salvador.1252: es_SV.ISO8859-1 Spanish_Uruguay.1252: es_UY.ISO8859-1 Spanish_Venezuela.1252: es_VE.ISO8859-1 Estonian_Estonia.1257: et_EE.ISO8859-13 Basque_Spain.1252: eu_ES.ISO8859-1 Finnish_Finland.1252: fi_FI.ISO8859-1 French_Belgium.1252: fr_BE.ISO8859-1 French_Canada.1252: fr_CA.ISO8859-1 French_Switzerland.1252: fr_CH.ISO8859-1 French_France.1252: fr_FR.ISO8859-1 French_Luxembourg.1252: fr_LU.ISO8859-1 Faeroese_Faeroe Islands.1252: fo_FO.ISO8859-1 Hebrew_Israel.1255: he_IL.ISO8859-8 Croatian_Croatia.1250: hr_HR.ISO8859-2 Hungarian_Hungary.1250: hu_HU.ISO8859-2 Indonesian_Indonesia.1252: id_ID.ISO8859-1 Icelandic_Iceland.1252: is_IS.ISO8859-1 Italian_Switzerland.1252: it_CH.ISO8859-1 Italian_Italy.1252: it_IT.ISO8859-1 Japanese_Japan.932: ja_JP.SJIS Korean_Korea.949: ko_KR.EUC Lithuanian_Lithuania.1257: lt_LT.ISO8859-13 Latvian_Latvia.1257: lv_LV.ISO8859-13 Dutch_Belgium.1252: nl_BE.ISO8859-1 Dutch_Netherlands.1252: nl_NL.ISO8859-1 Norwegian (Nynorsk)_Norway.1252: no_NO.ISO8859-1 Norwegian (Bokml)_Norway.1252: no_NO.ISO8859-1 Polish_Poland.1250: pl_PL.ISO8859-2 Portuguese_Brazil.1252: pt_BR.ISO8859-1 Portuguese_Portugal.1252: pt_PT.ISO8859-1 Romanian_Romania.1250: ro_RO.ISO8859-2 Russian_Russia.1251: ru_RU.ISO8859-5 Slovak_Slovakia.1250: sk_SK.ISO8859-2 Slovene_Slovenia.1250: sl_SI.ISO8859-2 Albanian_Albania.1250: sq_AL.ISO8859-2 Serbian (Latin)_Serbia.1250: sr_RS.UTF-8@latin Swedish_Finland.1252: sv_FI.ISO8859-1 Swedish_Sweden.1252: sv_SE.ISO8859-1 Turkish_Turkey.1254: tr_TR.ISO8859-9 Ukrainian_Ukraine.1251: uk_UA.ISO8859-5 Chinese(PRC)_People's Republic of China.936: zh_CN.EUC Chinese(PRC)_Hong Kong.950: zh_HK.EUC Chinese(Singapore)_Signapore.936: zh_SG.EUC Chinese(Taiwan)_Taiwan.950: zh_TW.EUC #endif XCOMM Other miscellaneous locale names ISO8859-1: en_US.ISO8859-1 ISO-8859-1: en_US.ISO8859-1 japan: ja_JP.eucJP Japanese-EUC: ja_JP.eucJP R.ISO8859-9 tr_TR.utf8: tr_TR.UTF-8 TR_TR.utf8: tlibX11-1.6.3/nls/koi8-u/XI18N_OBJS000064401431060000012000000005221247741723500163340ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for koi8-u locale # XLC common/xlcDef _XlcDefaultLoader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/koi8-u/Compose.pre000064401431060000012000000005441247741723500171060ustar00alancstaff00002660200006XCOMM XCOMM koi8-u Compose Sequence XCOMM XCOMM Sequence Definition XCOMM XCOMM XCOMM This file currently has no entries. It appears that a compose file (even XCOMM just an empty one) is required for the appropriate keysyms to work for XCOMM this encoding. XCOMM XCOMM Means XCOMM Special Character XCOMM End of Sequence Definition libX11-1.6.3/nls/koi8-u/XLC_LOCALE.pre000064401431060000012000000020571247741723500171470ustar00alancstaff00002660200006XCOMM XLocale Database Sample for koi8-u. XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class (7 bit ASCII) fs0 { charset { name ISO8859-1:GL } font { primary KOI8-U:GL substitute ISO8859-1:GL } } XCOMM fs1 class fs1 { charset KOI8-U:GR font KOI8-U:GR } END XLC_FONTSET XCOMM XCOMM XLC_CHARSET_DEFINE category XCOMM XLC_CHARSET_DEFINE csd0 { charset_name KOI8-U side GR length 1 string_encoding False sequence \x1b%/1 } END XLC_CHARSET_DEFINE XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name KOI8-U mb_cur_max 1 state_depend_encoding False #if WCHAR32 wc_encoding_mask \x30000000 wc_shift_bits 7 #else wc_encoding_mask \x00008080 wc_shift_bits 8 #endif use_stdc_env True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding KOI8-U:GL; ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 #if WCHAR32 wc_encoding \x30000000 #else wc_encoding \x00008080 #endif ct_encoding KOI8-U:GR } END XLC_XLOCALE libX11-1.6.3/nls/iso8859-1/Compose.pre000064401431060000012000001057211247741723500172630ustar00alancstaff00002660200006XCOMM XCOMM ISO 8859-1 (Latin1) Compose Sequence XCOMM XCOMM XCOMM XCOMM Sequence Definition XCOMM XCOMM Means XCOMM Special Character : "#" numbersign : "'" apostrophe : "'" apostrophe : "@" at : "[" bracketleft : "\\" backslash : "\\" backslash : "\\" backslash : "]" bracketright : "^" asciicircum : "^" asciicircum : "^" asciicircum : "^" asciicircum : "`" grave : "`" grave : "{" braceleft : "{" braceleft : "|" bar : "|" bar : "|" bar : "|" bar : "|" bar : "|" bar : "}" braceright : "}" braceright : "~" asciitilde : "~" asciitilde : "~" asciitilde : "~" asciitilde : "\241" exclamdown : "\242" cent : "\242" cent : "\242" cent : "\242" cent : "\242" cent : "\242" cent : "\242" cent : "\242" cent : "\243" sterling : "\243" sterling : "\243" sterling : "\243" sterling : "\243" sterling : "\243" sterling : "\243" sterling : "\243" sterling : "\245" yen : "\245" yen : "\245" yen : "\245" yen : "\245" yen : "\245" yen : "\245" yen : "\245" yen : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section : "\247" section <0> : "\247" section <0> : "\247" section <0> : "\247" section <0> : "\247" section : "\244" currency : "\244" currency : "\244" currency : "\244" currency : "\244" currency : "\244" currency : "\244" currency : "\244" currency <0> : "\244" currency <0> : "\244" currency <0> : "\244" currency <0> : "\244" currency : "\251" copyright : "\251" copyright : "\251" copyright : "\251" copyright : "\251" copyright : "\251" copyright : "\251" copyright : "\251" copyright <0> : "\251" copyright <0> : "\251" copyright <0> : "\251" copyright <0> : "\251" copyright : "\251" copyright : "\252" ordfeminine : "\252" ordfeminine : "\252" ordfeminine : "\252" ordfeminine : "\272" masculine : "\272" masculine : "\272" masculine : "\272" masculine : "\253" guillemotleft : "\273" guillemotright <0> : "\260" degree <0> : "\260" degree <0> : "\260" degree <0> : "\260" degree : "\261" plusminus : "\261" plusminus : "\265" mu : "\265" mu : "\265" mu : "\265" mu <1> : "\271" onesuperior <1> : "\271" onesuperior <1> : "\271" onesuperior <1> : "\271" onesuperior <1> : "\271" onesuperior <1> : "\271" onesuperior <2> : "\262" twosuperior <2> : "\262" twosuperior <2> : "\262" twosuperior <2> : "\262" twosuperior <2> : "\262" twosuperior <2> : "\262" twosuperior <3> : "\263" threesuperior <3> : "\263" threesuperior <3> : "\263" threesuperior <3> : "\263" threesuperior <3> : "\263" threesuperior <3> : "\263" threesuperior

: "\266" paragraph

: "\266" paragraph

: "\266" paragraph

: "\266" paragraph : "\267" periodcentered : "\267" periodcentered : "\267" periodcentered <1> <4> : "\274" onequarter <1> <2> : "\275" onehalf <3> <4> : "\276" threequarters : "\277" questiondown : "\240" nobreakspace : "\246" brokenbar : "\246" brokenbar : "\246" brokenbar : "\246" brokenbar : "\246" brokenbar : "\246" brokenbar : "\246" brokenbar : "\254" notsign : "\254" notsign : "\255" hyphen : "\256" registered : "\256" registered : "\256" registered : "\257" macron : "\257" macron : "\257" macron : "\257" macron : "\257" macron : "\367" division : "\367" division : "\327" multiply : "\264" acute : "\270" cedilla : "\250" diaeresis XCOMM Accented Alphabet : "\300" Agrave : "\300" Agrave : "\301" Aacute : "\301" Aacute : "\301" Aacute : "\301" Aacute : "\302" Acircumflex : "\302" Acircumflex : "\302" Acircumflex : "\302" Acircumflex : "\303" Atilde : "\303" Atilde : "\303" Atilde : "\303" Atilde : "\304" Adiaeresis : "\304" Adiaeresis : "\304" Adiaeresis : "\304" Adiaeresis : "\305" Aring : "\305" Aring : "\305" Aring : "\305" Aring : "\306" AE : "\340" agrave : "\340" agrave : "\341" aacute : "\341" aacute : "\341" aacute : "\341" aacute : "\342" acircumflex : "\342" acircumflex : "\342" acircumflex : "\342" acircumflex : "\343" atilde : "\343" atilde : "\343" atilde : "\343" atilde : "\344" adiaeresis : "\344" adiaeresis : "\344" adiaeresis : "\344" adiaeresis : "\345" aring : "\345" aring : "\345" aring : "\345" aring : "\346" ae : "\307" Ccedilla : "\347" ccedilla : "\307" Ccedilla : "\307" Ccedilla : "\307" Ccedilla : "\307" Ccedilla : "\347" ccedilla : "\347" ccedilla : "\347" ccedilla : "\347" ccedilla : "\320" ETH : "\320" ETH : "\360" eth : "\360" eth : "\310" Egrave : "\310" Egrave : "\311" Eacute : "\311" Eacute : "\311" Eacute : "\311" Eacute : "\312" Ecircumflex : "\312" Ecircumflex : "\312" Ecircumflex : "\312" Ecircumflex : "\313" Ediaeresis : "\313" Ediaeresis : "\313" Ediaeresis : "\313" Ediaeresis : "\350" egrave : "\350" egrave : "\351" eacute : "\351" eacute : "\351" eacute : "\351" eacute : "\352" ecircumflex : "\352" ecircumflex : "\352" ecircumflex : "\352" ecircumflex : "\353" ediaeresis : "\353" ediaeresis : "\353" ediaeresis : "\353" ediaeresis : "\314" Igrave : "\314" Igrave : "\315" Iacute : "\315" Iacute : "\315" Iacute : "\315" Iacute : "\316" Icircumflex : "\316" Icircumflex : "\316" Icircumflex : "\316" Icircumflex : "\317" Idiaeresis : "\317" Idiaeresis : "\317" Idiaeresis : "\317" Idiaeresis : "\354" igrave : "\354" igrave : "\355" iacute : "\355" iacute : "\355" iacute : "\355" iacute : "\356" icircumflex : "\356" icircumflex : "\356" icircumflex : "\356" icircumflex : "\357" idiaeresis : "\357" idiaeresis : "\357" idiaeresis : "\357" idiaeresis : "\321" Ntilde : "\321" Ntilde : "\321" Ntilde : "\321" Ntilde : "\361" ntilde : "\361" ntilde : "\361" ntilde : "\361" ntilde : "\322" Ograve : "\322" Ograve : "\323" Oacute : "\323" Oacute : "\323" Oacute : "\323" Oacute : "\324" Ocircumflex : "\324" Ocircumflex : "\324" Ocircumflex : "\324" Ocircumflex : "\325" Otilde : "\325" Otilde : "\325" Otilde : "\325" Otilde : "\326" Odiaeresis : "\326" Odiaeresis : "\326" Odiaeresis : "\326" Odiaeresis : "\330" Ooblique : "\330" Ooblique : "\362" ograve : "\362" ograve : "\363" oacute : "\363" oacute : "\363" oacute : "\363" oacute : "\364" ocircumflex : "\364" ocircumflex : "\364" ocircumflex : "\364" ocircumflex : "\365" otilde : "\365" otilde : "\365" otilde : "\365" otilde : "\366" odiaeresis : "\366" odiaeresis : "\366" odiaeresis : "\366" odiaeresis : "\370" oslash : "\370" oslash : "\331" Ugrave : "\331" Ugrave : "\332" Uacute : "\332" Uacute : "\332" Uacute : "\332" Uacute : "\333" Ucircumflex : "\333" Ucircumflex : "\333" Ucircumflex : "\333" Ucircumflex : "\334" Udiaeresis : "\334" Udiaeresis : "\334" Udiaeresis : "\334" Udiaeresis : "\371" ugrave : "\371" ugrave : "\372" uacute : "\372" uacute : "\372" uacute : "\372" uacute : "\373" ucircumflex : "\373" ucircumflex : "\373" ucircumflex : "\373" ucircumflex : "\374" udiaeresis : "\374" udiaeresis : "\374" udiaeresis : "\374" udiaeresis : "\337" ssharp : "\336" THORN : "\376" thorn : "\335" Yacute : "\335" Yacute : "\335" Yacute : "\335" Yacute : "\375" yacute : "\375" yacute : "\375" yacute : "\375" yacute : "\377" ydiaeresis : "\377" ydiaeresis : "\377" ydiaeresis : "\377" ydiaeresis XCOMM XCOMM XCOMM dead key accent keysyms XCOMM Special Character : "|" bar : "^" asciicircum : "^" asciicircum : "~" asciitilde : "~" asciitilde : "`" grave : "`" grave XCOMM These are for us_intl, that does not have diaeresis, etc : "'" apostrophe : "\264" acute : "\"" quotedbl : "\250" diaeresis : "\"" quotedbl : "\260" degree : "\260" degree <0> : "\260" degree <1> : "\271" onesuperior <2> : "\262" twosuperior <3> : "\263" threesuperior : "\267" periodcentered : "\246" brokenbar : "\254" notsign : "\257" macron : "\257" macron : "\264" acute : "\270" cedilla : "\250" diaeresis XCOMM Accented Alphabet : "\305" Aring : "\300" Agrave : "\301" Aacute : "\302" Acircumflex : "\303" Atilde : "\304" Adiaeresis : "\345" aring : "\340" agrave : "\341" aacute : "\342" acircumflex : "\343" atilde : "\344" adiaeresis : "\307" Ccedilla : "\347" ccedilla : "\310" Egrave : "\311" Eacute : "\312" Ecircumflex : "\313" Ediaeresis : "\350" egrave : "\351" eacute : "\352" ecircumflex : "\353" ediaeresis : "\314" Igrave : "\315" Iacute : "\316" Icircumflex : "\317" Idiaeresis : "\354" igrave : "\355" iacute : "\356" icircumflex : "\357" idiaeresis : "\321" Ntilde : "\361" ntilde : "\322" Ograve : "\323" Oacute : "\324" Ocircumflex : "\325" Otilde : "\326" Odiaeresis : "\362" ograve : "\363" oacute : "\364" ocircumflex : "\365" otilde : "\366" odiaeresis : "\331" Ugrave : "\332" Uacute : "\333" Ucircumflex : "\334" Udiaeresis : "\334" Udiaeresis : "\371" ugrave : "\372" uacute : "\373" ucircumflex : "\374" udiaeresis : "\374" udiaeresis : "\335" Yacute : "\375" yacute : "\377" ydiaeresis XCOMM Useful for portuguese language : "\307" Ccedilla : "\347" ccedilla XCOMM #ifdef USE_CTRL_SHIFT_T_SEQS XCOMM Ctrl Means XCOMM Special Character Ctrl : "#" numbersign Ctrl : "'" apostrophe Ctrl : "'" apostrophe Ctrl : "@" at Ctrl : "[" bracketleft Ctrl : "\\" backslash Ctrl : "\\" backslash Ctrl : "\\" backslash Ctrl : "]" bracketright Ctrl : "^" asciicircum Ctrl : "^" asciicircum Ctrl : "^" asciicircum Ctrl : "^" asciicircum Ctrl : "`" grave Ctrl : "`" grave Ctrl : "{" braceleft Ctrl : "{" braceleft Ctrl : "|" bar Ctrl : "|" bar Ctrl : "|" bar Ctrl : "|" bar Ctrl : "|" bar Ctrl : "|" bar Ctrl : "}" braceright Ctrl : "}" braceright Ctrl : "~" asciitilde Ctrl : "~" asciitilde Ctrl : "~" asciitilde Ctrl : "~" asciitilde Ctrl : "\241" exclamdown Ctrl : "\242" cent Ctrl : "\242" cent Ctrl : "\242" cent Ctrl : "\242" cent Ctrl : "\242" cent Ctrl : "\242" cent Ctrl : "\242" cent Ctrl : "\242" cent Ctrl : "\243" sterling Ctrl : "\243" sterling Ctrl : "\243" sterling Ctrl : "\243" sterling Ctrl : "\243" sterling Ctrl : "\243" sterling Ctrl : "\243" sterling Ctrl : "\243" sterling Ctrl : "\245" yen Ctrl : "\245" yen Ctrl : "\245" yen Ctrl : "\245" yen Ctrl : "\245" yen Ctrl : "\245" yen Ctrl : "\245" yen Ctrl : "\245" yen Ctrl : "\247" section Ctrl : "\247" section Ctrl : "\247" section Ctrl : "\247" section Ctrl : "\247" section Ctrl : "\247" section Ctrl : "\247" section Ctrl : "\247" section Ctrl <0> : "\247" section Ctrl <0> : "\247" section Ctrl <0> : "\247" section Ctrl <0> : "\247" section Ctrl : "\244" currency Ctrl : "\244" currency Ctrl : "\244" currency Ctrl : "\244" currency Ctrl : "\244" currency Ctrl : "\244" currency Ctrl : "\244" currency Ctrl : "\244" currency Ctrl <0> : "\244" currency Ctrl <0> : "\244" currency Ctrl <0> : "\244" currency Ctrl <0> : "\244" currency Ctrl : "\251" copyright Ctrl : "\251" copyright Ctrl : "\251" copyright Ctrl : "\251" copyright Ctrl : "\251" copyright Ctrl : "\251" copyright Ctrl : "\251" copyright Ctrl : "\251" copyright Ctrl <0> : "\251" copyright Ctrl <0> : "\251" copyright Ctrl <0> : "\251" copyright Ctrl <0> : "\251" copyright Ctrl : "\252" ordfeminine Ctrl : "\252" ordfeminine Ctrl : "\252" ordfeminine Ctrl : "\252" ordfeminine Ctrl : "\272" masculine Ctrl : "\272" masculine Ctrl : "\272" masculine Ctrl : "\272" masculine Ctrl : "\253" guillemotleft Ctrl : "\273" guillemotright Ctrl <0> : "\260" degree Ctrl <0> : "\260" degree Ctrl <0> : "\260" degree Ctrl <0> : "\260" degree Ctrl : "\261" plusminus Ctrl : "\261" plusminus Ctrl : "\265" mu Ctrl : "\265" mu Ctrl : "\265" mu Ctrl : "\265" mu Ctrl <1> : "\271" onesuperior Ctrl <1> : "\271" onesuperior Ctrl <1> : "\271" onesuperior Ctrl <1> : "\271" onesuperior Ctrl <1> : "\271" onesuperior Ctrl <1> : "\271" onesuperior Ctrl <2> : "\262" twosuperior Ctrl <2> : "\262" twosuperior Ctrl <2> : "\262" twosuperior Ctrl <2> : "\262" twosuperior Ctrl <2> : "\262" twosuperior Ctrl <2> : "\262" twosuperior Ctrl <3> : "\263" threesuperior Ctrl <3> : "\263" threesuperior Ctrl <3> : "\263" threesuperior Ctrl <3> : "\263" threesuperior Ctrl <3> : "\263" threesuperior Ctrl <3> : "\263" threesuperior Ctrl

: "\266" paragraph Ctrl

: "\266" paragraph Ctrl

: "\266" paragraph Ctrl

: "\266" paragraph Ctrl : "\267" periodcentered Ctrl : "\267" periodcentered Ctrl : "\267" periodcentered Ctrl <1> <4> : "\274" onequarter Ctrl <1> <2> : "\275" onehalf Ctrl <3> <4> : "\276" threequarters Ctrl : "\277" questiondown Ctrl : "\240" nobreakspace Ctrl : "\246" brokenbar Ctrl : "\246" brokenbar Ctrl : "\246" brokenbar Ctrl : "\246" brokenbar Ctrl : "\246" brokenbar Ctrl : "\246" brokenbar Ctrl : "\246" brokenbar Ctrl : "\254" notsign Ctrl : "\254" notsign Ctrl : "\255" hyphen Ctrl : "\256" registered Ctrl : "\256" registered Ctrl : "\257" macron Ctrl : "\257" macron Ctrl : "\257" macron Ctrl : "\257" macron Ctrl : "\257" macron Ctrl : "\367" division Ctrl : "\367" division Ctrl : "\327" multiply Ctrl : "\264" acute Ctrl : "\270" cedilla Ctrl : "\250" diaeresis XCOMM Accented Alphabet Ctrl : "\300" Agrave Ctrl : "\300" Agrave Ctrl : "\301" Aacute Ctrl : "\301" Aacute Ctrl : "\301" Aacute Ctrl : "\301" Aacute Ctrl : "\302" Acircumflex Ctrl : "\302" Acircumflex Ctrl : "\302" Acircumflex Ctrl : "\302" Acircumflex Ctrl : "\303" Atilde Ctrl : "\303" Atilde Ctrl : "\303" Atilde Ctrl : "\303" Atilde Ctrl : "\304" Adiaeresis Ctrl : "\304" Adiaeresis Ctrl : "\304" Adiaeresis Ctrl : "\304" Adiaeresis Ctrl : "\305" Aring Ctrl : "\305" Aring Ctrl : "\305" Aring Ctrl : "\305" Aring Ctrl : "\306" AE Ctrl : "\340" agrave Ctrl : "\340" agrave Ctrl : "\341" aacute Ctrl : "\341" aacute Ctrl : "\341" aacute Ctrl : "\341" aacute Ctrl : "\342" acircumflex Ctrl : "\342" acircumflex Ctrl : "\342" acircumflex Ctrl : "\342" acircumflex Ctrl : "\343" atilde Ctrl : "\343" atilde Ctrl : "\343" atilde Ctrl : "\343" atilde Ctrl : "\344" adiaeresis Ctrl : "\344" adiaeresis Ctrl : "\344" adiaeresis Ctrl : "\344" adiaeresis Ctrl : "\345" aring Ctrl : "\345" aring Ctrl : "\345" aring Ctrl : "\345" aring Ctrl : "\346" ae Ctrl : "\307" Ccedilla Ctrl : "\307" Ccedilla Ctrl : "\347" ccedilla Ctrl : "\347" ccedilla Ctrl : "\320" ETH Ctrl : "\320" ETH Ctrl : "\360" eth Ctrl : "\360" eth Ctrl : "\310" Egrave Ctrl : "\310" Egrave Ctrl : "\311" Eacute Ctrl : "\311" Eacute Ctrl : "\311" Eacute Ctrl : "\311" Eacute Ctrl : "\312" Ecircumflex Ctrl : "\312" Ecircumflex Ctrl : "\312" Ecircumflex Ctrl : "\312" Ecircumflex Ctrl : "\313" Ediaeresis Ctrl : "\313" Ediaeresis Ctrl : "\313" Ediaeresis Ctrl : "\313" Ediaeresis Ctrl : "\350" egrave Ctrl : "\350" egrave Ctrl : "\351" eacute Ctrl : "\351" eacute Ctrl : "\351" eacute Ctrl : "\351" eacute Ctrl : "\352" ecircumflex Ctrl : "\352" ecircumflex Ctrl : "\352" ecircumflex Ctrl : "\352" ecircumflex Ctrl : "\353" ediaeresis Ctrl : "\353" ediaeresis Ctrl : "\353" ediaeresis Ctrl : "\353" ediaeresis Ctrl : "\314" Igrave Ctrl : "\314" Igrave Ctrl : "\315" Iacute Ctrl : "\315" Iacute Ctrl : "\315" Iacute Ctrl : "\315" Iacute Ctrl : "\316" Icircumflex Ctrl : "\316" Icircumflex Ctrl : "\316" Icircumflex Ctrl : "\316" Icircumflex Ctrl : "\317" Idiaeresis Ctrl : "\317" Idiaeresis Ctrl : "\317" Idiaeresis Ctrl : "\317" Idiaeresis Ctrl : "\354" igrave Ctrl : "\354" igrave Ctrl : "\355" iacute Ctrl : "\355" iacute Ctrl : "\355" iacute Ctrl : "\355" iacute Ctrl : "\356" icircumflex Ctrl : "\356" icircumflex Ctrl : "\356" icircumflex Ctrl : "\356" icircumflex Ctrl : "\357" idiaeresis Ctrl : "\357" idiaeresis Ctrl : "\357" idiaeresis Ctrl : "\357" idiaeresis Ctrl : "\321" Ntilde Ctrl : "\321" Ntilde Ctrl : "\321" Ntilde Ctrl : "\321" Ntilde Ctrl : "\361" ntilde Ctrl : "\361" ntilde Ctrl : "\361" ntilde Ctrl : "\361" ntilde Ctrl : "\322" Ograve Ctrl : "\322" Ograve Ctrl : "\323" Oacute Ctrl : "\323" Oacute Ctrl : "\323" Oacute Ctrl : "\323" Oacute Ctrl : "\324" Ocircumflex Ctrl : "\324" Ocircumflex Ctrl : "\324" Ocircumflex Ctrl : "\324" Ocircumflex Ctrl : "\325" Otilde Ctrl : "\325" Otilde Ctrl : "\325" Otilde Ctrl : "\325" Otilde Ctrl : "\326" Odiaeresis Ctrl : "\326" Odiaeresis Ctrl : "\326" Odiaeresis Ctrl : "\326" Odiaeresis Ctrl : "\330" Ooblique Ctrl : "\330" Ooblique Ctrl : "\362" ograve Ctrl : "\362" ograve Ctrl : "\363" oacute Ctrl : "\363" oacute Ctrl : "\363" oacute Ctrl : "\363" oacute Ctrl : "\364" ocircumflex Ctrl : "\364" ocircumflex Ctrl : "\364" ocircumflex Ctrl : "\364" ocircumflex Ctrl : "\365" otilde Ctrl : "\365" otilde Ctrl : "\365" otilde Ctrl : "\365" otilde Ctrl : "\366" odiaeresis Ctrl : "\366" odiaeresis Ctrl : "\366" odiaeresis Ctrl : "\366" odiaeresis Ctrl : "\370" oslash Ctrl : "\370" oslash Ctrl : "\331" Ugrave Ctrl : "\331" Ugrave Ctrl : "\332" Uacute Ctrl : "\332" Uacute Ctrl : "\332" Uacute Ctrl : "\332" Uacute Ctrl : "\333" Ucircumflex Ctrl : "\333" Ucircumflex Ctrl : "\333" Ucircumflex Ctrl : "\333" Ucircumflex Ctrl : "\334" Udiaeresis Ctrl : "\334" Udiaeresis Ctrl : "\334" Udiaeresis Ctrl : "\334" Udiaeresis Ctrl : "\371" ugrave Ctrl : "\371" ugrave Ctrl : "\372" uacute Ctrl : "\372" uacute Ctrl : "\372" uacute Ctrl : "\372" uacute Ctrl : "\373" ucircumflex Ctrl : "\373" ucircumflex Ctrl : "\373" ucircumflex Ctrl : "\373" ucircumflex Ctrl : "\374" udiaeresis Ctrl : "\374" udiaeresis Ctrl : "\374" udiaeresis Ctrl : "\374" udiaeresis Ctrl : "\337" ssharp Ctrl : "\336" THORN Ctrl : "\376" thorn Ctrl : "\335" Yacute Ctrl : "\335" Yacute Ctrl : "\335" Yacute Ctrl : "\335" Yacute Ctrl : "\375" yacute Ctrl : "\375" yacute Ctrl : "\375" yacute Ctrl : "\375" yacute Ctrl : "\377" ydiaeresis Ctrl : "\377" ydiaeresis Ctrl : "\377" ydiaeresis Ctrl : "\377" ydiaeresis #endif /* USE_CTRL_SHIFT_T_SEQS */ XCOMM End of Sequence Definition rl <3> : "\263" threesuperior CtrllibX11-1.6.3/nls/iso8859-1/XI18N_OBJS000064401431060000012000000005241247741723500165100ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for euro locales # XLC common/xlibi18n _XlcGenericLoader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/iso8859-1/XLC_LOCALE.pre000064401431060000012000000015771247741723500173270ustar00alancstaff00002660200006XCOMM XLocale Database Sample for iso8859-1. XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class fs0 { charset { name ISO8859-1:GL } font { primary ISO8859-1:GL vertical_rotate all } } XCOMM fs1 class fs1 { charset { name ISO8859-1:GR } font { primary ISO8859-1:GR } } END XLC_FONTSET XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name ISO8859-1 mb_cur_max 1 state_depend_encoding False #if WCHAR32 wc_encoding_mask \x30000000 wc_shift_bits 7 #else wc_encoding_mask \x00008080 wc_shift_bits 8 #endif use_stdc_env True force_convert_to_mb True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 #if WCHAR32 wc_encoding \x30000000 #else wc_encoding \x00008080 #endif ct_encoding ISO8859-1:GR } END XLC_XLOCALE libX11-1.6.3/nls/nokhchi-1/XLC_LOCALE.pre000064401431060000012000000021101247741723500176020ustar00alancstaff00002660200006XCOMM XLocale Database Sample for mulelao-1. XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class (7 bit ASCII) fs0 { charset { name ISO8859-1:GL } font { primary NOKHCHI-1:GL substitute ISO8859-1:GL } } XCOMM fs1 class fs1 { charset NOKHCHI-1:GR font NOKHCHI-1:GR } END XLC_FONTSET XCOMM XCOMM XLC_CHARSET_DEFINE category XCOMM XLC_CHARSET_DEFINE csd0 { charset_name NOKHCHI-1 side GR length 1 string_encoding False sequence \x1b%/1 } END XLC_CHARSET_DEFINE XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name NOKHCHI-1 mb_cur_max 1 state_depend_encoding False #if WCHAR32 wc_encoding_mask \x30000000 wc_shift_bits 7 #else wc_encoding_mask \x00008080 wc_shift_bits 8 #endif use_stdc_env True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding NOKHCHI-1:GL; ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 #if WCHAR32 wc_encoding \x30000000 #else wc_encoding \x00008080 #endif ct_encoding NOKHCHI-1:GR } END XLC_XLOCALE libX11-1.6.3/nls/nokhchi-1/Compose.pre000064401431060000012000000000001247741723500175360ustar00alancstaff00002660200006libX11-1.6.3/nls/nokhchi-1/XI18N_OBJS000064401431060000012000000005251247741723500170040ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for nokhchi-1 locale # XLC common/xlcDef _XlcDefaultLoader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/microsoft-cp1251/XI18N_OBJS000064401431060000012000000005341247741723500201410ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for microsoft-cp1251 locale # XLC common/xlcDef _XlcDefaultLoader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/microsoft-cp1251/Compose.pre000064401431060000012000000000001247741723500206730ustar00alancstaff00002660200006libX11-1.6.3/nls/microsoft-cp1251/XLC_LOCALE.pre000064401431060000012000000022321247741723500207440ustar00alancstaff00002660200006XCOMM XLocale Database Sample for microsoft-cp1251. XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class fs0 { charset { name ISO8859-1:GL } font { primary MICROSOFT-CP1251:GL substitute ISO8859-1:GL vertical_rotate all } } XCOMM fs1 class fs1 { charset { name MICROSOFT-CP1251:GR } font { primary MICROSOFT-CP1251:GR } } END XLC_FONTSET XCOMM XCOMM XLC_CHARSET_DEFINE category XCOMM XLC_CHARSET_DEFINE csd0 { charset_name MICROSOFT-CP1251 side GR length 1 string_encoding False sequence \x1b%/1 } END XLC_CHARSET_DEFINE XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name MICROSOFT-CP1251 mb_cur_max 1 state_depend_encoding False #if WCHAR32 wc_encoding_mask \x30000000 wc_shift_bits 7 #else wc_encoding_mask \x00008080 wc_shift_bits 8 #endif use_stdc_env True force_convert_to_mb True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding MICROSOFT-CP1251:GL; ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 #if WCHAR32 wc_encoding \x30000000 #else wc_encoding \x00008080 #endif ct_encoding MICROSOFT-CP1251:GR } END XLC_XLOCALE me ISO8859-1:GL } font { primary MICROSOFT-CP1251:GL substitute ISO8859-1:GL vertical_rotate all } } XCOMM fs1 class fs1 { charset { name MICROSOFT-CP1251:GR } font { primary MICROSOFT-CP1251:GR } } END XLC_FONTSET XCOMM XCOMM XLC_CHARSET_DEFINE category XCOMM XLC_CHARSET_DEFINE csd0 { charset_name MICROSOFT-CP1251 side GR lengtlibX11-1.6.3/nls/iso8859-10/XI18N_OBJS000064401431060000012000000005261247741723500165720ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for iso8859-10 locale # XLC common/xlcDef _XlcDefaultLoader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/nls/iso8859-10/XLC_LOCALE.pre000064401431060000012000000016601247741723500174000ustar00alancstaff00002660200006XCOMM XLocale Database Sample for iso8859-4. XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class fs0 { charset { name ISO8859-1:GL } font { primary ISO8859-10:GL substitute ISO8859-1:GL vertical_rotate all } } XCOMM fs1 class fs1 { charset { name ISO8859-10:GR } font { primary ISO8859-10:GR } } END XLC_FONTSET XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name ISO8859-10 mb_cur_max 1 state_depend_encoding False #if WCHAR32 wc_encoding_mask \x30000000 wc_shift_bits 7 #else wc_encoding_mask \x00008080 wc_shift_bits 8 #endif use_stdc_env True force_convert_to_mb True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding ISO8859-10:GL; ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 #if WCHAR32 wc_encoding \x30000000 #else wc_encoding \x00008080 #endif ct_encoding ISO8859-10:GR } END XLC_XLOCALE libX11-1.6.3/nls/iso8859-10/Compose.pre000064401431060000012000000005511247741723500173360ustar00alancstaff00002660200006XCOMM XCOMM ISO 8859-10 Compose Sequence XCOMM XCOMM Sequence Definition XCOMM XCOMM XCOMM This file currently has no entries. It appears that a compose file (even XCOMM just an empty one) is required for the appropriate keysyms to work for XCOMM this encoding. XCOMM XCOMM Means XCOMM Special Character XCOMM End of Sequence Definition libX11-1.6.3/nls/cs_CZ.UTF-8/XLC_LOCALE.pre000064401431060000012000000000001247741723500176200ustar00alancstaff00002660200006libX11-1.6.3/nls/cs_CZ.UTF-8/XI18N_OBJS000064401431060000012000000000001247741723500170120ustar00alancstaff00002660200006libX11-1.6.3/nls/cs_CZ.UTF-8/Compose.pre000064401431060000012000000010321247741723500175660ustar00alancstaff00002660200006XCOMM UTF-8 (Unicode) compose sequences XCOMM XCOMM Modified for Czech, following iso8859-2/Compose XCOMM by James Cloos XCOMM based on bug report by Vladimír Marek XCOMM Use the sequences from en_US.UTF-8 as the basis: include "X11_LOCALEDATADIR/en_US.UTF-8/Compose" XCOMM Overriding U with caron: : "ů" U016F # LATIN SMALL LETTER U WITH RING ABOVE : "Ů" U016E # LATIN CAPITAL LETTER U WITH RING ABOVE libX11-1.6.3/nls/km_KH.UTF-8/XI18N_OBJS000064401431060000012000000004531247741723500170160ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for euro locales # XLC common/xlcUTF8Load _XlcUtf8Loader # XLC_open XOM common/xomLTRTTB _XomGenericOpenOM # XOM_open XIM common/xiiimp _SwitchOpenIM # XIM_open XIM common/xiiimp _XimpLocalOpenIM # XIM_open libX11-1.6.3/nls/km_KH.UTF-8/XLC_LOCALE.pre000064401431060000012000000000001247741723500176100ustar00alancstaff00002660200006libX11-1.6.3/nls/km_KH.UTF-8/Compose.pre000064401431060000012000000002451247741723500175630ustar00alancstaff00002660200006include "X11_LOCALEDATADIR/en_US.UTF-8/Compose" XCOMM Khmer digraphs : "ាំ" : "ោះ" : "េះ" : "ុំ" : "ុះ" libX11-1.6.3/nls/C/XLC_LOCALE.pre000064401431060000012000000014421247741723500162120ustar00alancstaff00002660200006XCOMM XLocale Database Sample for C. XCOMM XCOMM XCOMM XLC_FONTSET category XCOMM XLC_FONTSET XCOMM fs0 class (7 bit ASCII) fs0 { charset { name ISO8859-1:GL } font { primary ISO8859-1:GL vertical_rotate all } } END XLC_FONTSET XCOMM XCOMM XLC_XLOCALE category XCOMM XLC_XLOCALE encoding_name STRING mb_cur_max 1 state_depend_encoding False #if WCHAR32 wc_encoding_mask \x30000000 wc_shift_bits 7 #else wc_encoding_mask \x00008080 wc_shift_bits 8 #endif use_stdc_env True force_convert_to_mb True XCOMM cs0 class cs0 { side GL:Default length 1 wc_encoding \x00000000 ct_encoding ISO8859-1:GL } XCOMM cs1 class cs1 { side GR:Default length 1 #if WCHAR32 wc_encoding \x30000000 #else wc_encoding \x00008080 #endif ct_encoding ISO8859-1:GR } END XLC_XLOCALE LC_XLOCALE encoding_name STRING mb_cur_max 1 state_depend_encoding False #if WCHAR32 wc_encoding_mask \x30000000 wc_shift_bits 7 #else wc_encoding_mask \x00008080 wc_shift_bits 8 #endif use_stdc_env True force_convelibX11-1.6.3/nls/C/Compose.pre000064401431060000012000000000001247741723500161370ustar00alancstaff00002660200006libX11-1.6.3/nls/C/XI18N_OBJS000064401431060000012000000005241247741723500154040ustar00alancstaff00002660200006# CATEGORY(XLC|XIM|OM) SHARED_LIBRARY_NAME FUNCTION_NAME # # XI18N objects table for euro locales # XLC common/xlibi18n _XlcGenericLoader # XLC_open XIM common/ximcp _XimOpenIM _XimRegisterIMInstantiateCallback _XimUnRegisterIMInstantiateCallback # XIM_open XIM_register XIM_unregister XOM common/xomGeneric _XomGenericOpenOM # XOM_open libX11-1.6.3/AUTHORS000064401431060000012000000024321247741723500141270ustar00alancstaff00002660200006Once upon a midnight hour, long ago, in a galaxy, far, far, away, Xlib was originally developed by Jim Gettys, of Digital Equipment Corporation (now part of HP). Warren Turkal did the autotooling in October, 2003. Josh Triplett, Jamey Sharp, and the XCB team (xcb@lists.freedesktop.org) maintain the XCB support. Individual developers include (in no particular order): Sebastien Marineau, Holger Veit, Bruno Haible, Keith Packard, Bob Scheifler, Takashi Fujiwara, Kazunori Nishihara, Hideki Hiura, Hiroyuki Miyamoto, Katsuhisi Yano, Shigeru Yamada, Stephen Gildea, Li Yuhong, Seiji Kuwari. The specifications and documentation contain extensive credits. Conversion of those documents from troff to DocBook/XML was performed by Matt Dew, with assistance in editing & formatting tool setup from Gaetan Nadon and Alan Coopersmith. This work was supported by many organizations (in no particular order), including the X Consortium, Digital Equipment Corporation, Tektronix, The Open Group, OMRON, Wyse Technology, Fujitsu Limited, Sun Microsystems, Fuji Xerox, Sony Corporation, Toshiba Corporation, Massachusetts Institute of Technology, Silicon Graphics, the XFree86 Project, among others. Patches/fixes came from all over. No doubt we've missed credits. Please let us know who should be credited. libX11-1.6.3/m4/ax_define_dir.m4000064401431060000012000000032521247741723500164220ustar00alancstaff00002660200006# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_define_dir.html # =========================================================================== # # SYNOPSIS # # AX_DEFINE_DIR(VARNAME, DIR [, DESCRIPTION]) # # DESCRIPTION # # This macro sets VARNAME to the expansion of the DIR variable, taking # care of fixing up ${prefix} and such. # # VARNAME is then offered as both an output variable and a C preprocessor # symbol. # # Example: # # AX_DEFINE_DIR([DATADIR], [datadir], [Where data are placed to.]) # # LICENSE # # Copyright (c) 2008 Stepan Kasal # Copyright (c) 2008 Andreas Schwab # Copyright (c) 2008 Guido U. Draheim # Copyright (c) 2008 Alexandre Oliva # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 6 AU_ALIAS([AC_DEFINE_DIR], [AX_DEFINE_DIR]) AC_DEFUN([AX_DEFINE_DIR], [ prefix_NONE= exec_prefix_NONE= test "x$prefix" = xNONE && prefix_NONE=yes && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix_NONE=yes && exec_prefix=$prefix dnl In Autoconf 2.60, ${datadir} refers to ${datarootdir}, which in turn dnl refers to ${prefix}. Thus we have to use `eval' twice. eval ax_define_dir="\"[$]$2\"" eval ax_define_dir="\"$ax_define_dir\"" AC_SUBST($1, "$ax_define_dir") AC_DEFINE_UNQUOTED($1, "$ax_define_dir", [$3]) test "$prefix_NONE" && prefix=NONE test "$exec_prefix_NONE" && exec_prefix=NONE ]) libX11-1.6.3/ltmain.sh000044401431060000012000010515221247741724500147030ustar00alancstaff00002660200006 # libtool (GNU libtool) 2.4.2 # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --no-quiet, --no-silent # print informational messages (default) # --no-warn don't display warning messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print more informational messages than default # --no-verbose don't print the extra informational messages # --version print version information # -h, --help, --help-all print short, long, or detailed help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. When passed as first option, # `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.4.2 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . # GNU libtool home page: . # General help using GNU software: . PROGRAM=libtool PACKAGE=libtool VERSION=2.4.2 TIMESTAMP="" package_revision=1.3337 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # NLS nuisances: We save the old values to restore during execute mode. lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL $lt_unset CDPATH # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" : ${CP="cp -f"} test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_dirname may be replaced by extended shell implementation # func_basename file func_basename () { func_basename_result=`$ECHO "${1}" | $SED "$basename"` } # func_basename may be replaced by extended shell implementation # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` } # func_dirname_and_basename may be replaced by extended shell implementation # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname may be replaced by extended shell implementation # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' pathcdr='s,^/[^/]*,,' removedotparts=':dotsl s@/\./@/@g t dotsl s,/\.$,/,' collapseslashes='s@/\{1,\}@/@g' finalslash='s,/*$,/,' # func_normal_abspath PATH # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. # value returned in "$func_normal_abspath_result" func_normal_abspath () { # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` while :; do # Processed it all yet? if test "$func_normal_abspath_tpath" = / ; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result" ; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_relative_path SRCDIR DSTDIR # generates a relative path from SRCDIR to DSTDIR, with a trailing # slash if non-empty, suitable for immediately appending a filename # without needing to append a separator. # value returned in "$func_relative_path_result" func_relative_path () { func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=${func_dirname_result} if test "x$func_relative_path_tlibdir" = x ; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test "x$func_stripname_result" != x ; then func_relative_path_result=${func_relative_path_result}/${func_stripname_result} fi # Normalisation. If bindir is libdir, return empty string, # else relative path ending with a slash; either way, target # file name can be directly appended. if test ! -z "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result/" func_relative_path_result=$func_stripname_result fi } # The name of this program: func_dirname_and_basename "$progpath" progname=$func_basename_result # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' # Sed substitution that converts a w32 file name or path # which contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname: ${opt_mode+$opt_mode: }$*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` done my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "$my_tmpdir" } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "$1" | $SED \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_tr_sh # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_version # Echo version message to standard output and exit. func_version () { $opt_debug $SED -n '/(C)/!b go :more /\./!{ N s/\n# / / b more } :go /^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $opt_debug $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" echo $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help [NOEXIT] # Echo long help message to standard output and exit, # unless 'noexit' is passed as argument. func_help () { $opt_debug $SED -n '/^# Usage:/,/# Report bugs to/ { :print s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ p d } /^# .* home page:/b print /^# General help using/b print ' < "$progpath" ret=$? if test -z "$1"; then exit $ret fi } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $opt_debug func_error "missing argument for $1." exit_cmd=exit } # func_split_short_opt shortopt # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. func_split_short_opt () { my_sed_short_opt='1s/^\(..\).*$/\1/;q' my_sed_short_rest='1s/^..\(.*\)$/\1/;q' func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` } # func_split_short_opt may be replaced by extended shell implementation # func_split_long_opt longopt # Set func_split_long_opt_name and func_split_long_opt_arg shell # variables after splitting LONGOPT at the `=' sign. func_split_long_opt () { my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^--[^=]*=//' func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` } # func_split_long_opt may be replaced by extended shell implementation exit_cmd=: magic="%%%MAGIC variable%%%" magic_exe="%%%MAGIC EXE variable%%%" # Global variables. nonopt= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "${1}=\$${1}\${2}" } # func_append may be replaced by extended shell implementation # func_append_quoted var value # Quote VALUE and append to the end of shell variable VAR, separated # by a space. func_append_quoted () { func_quote_for_eval "${2}" eval "${1}=\$${1}\\ \$func_quote_for_eval_result" } # func_append_quoted may be replaced by extended shell implementation # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "${@}"` } # func_arith may be replaced by extended shell implementation # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` } # func_len may be replaced by extended shell implementation # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` } # func_lo2o may be replaced by extended shell implementation # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` } # func_xform may be replaced by extended shell implementation # func_fatal_configuration arg... # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_error ${1+"$@"} func_error "See the $PACKAGE documentation for more information." func_fatal_error "Fatal configuration error." } # func_config # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # Display the features supported by this script. func_features () { echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag tagname # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname="$1" re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf="/$re_begincf/,/$re_endcf/p" # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Option defaults: opt_debug=: opt_dry_run=false opt_config=false opt_preserve_dup_deps=false opt_features=false opt_finish=false opt_help=false opt_help_all=false opt_silent=: opt_warning=: opt_verbose=: opt_silent=false opt_verbose=false # Parse options once, thoroughly. This comes as soon as possible in the # script to make things like `--version' happen as quickly as we can. { # this just eases exit handling while test $# -gt 0; do opt="$1" shift case $opt in --debug|-x) opt_debug='set -x' func_echo "enabling shell trace mode" $opt_debug ;; --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) opt_config=: func_config ;; --dlopen|-dlopen) optarg="$1" opt_dlopen="${opt_dlopen+$opt_dlopen }$optarg" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) opt_features=: func_features ;; --finish) opt_finish=: set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help_all=: opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_mode="$optarg" case $optarg in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_silent=false func_append preserve_args " $opt" ;; --no-warning|--no-warn) opt_warning=false func_append preserve_args " $opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $opt" ;; --silent|--quiet) opt_silent=: func_append preserve_args " $opt" opt_verbose=false ;; --verbose|-v) opt_verbose=: func_append preserve_args " $opt" opt_silent=false ;; --tag) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_tag="$optarg" func_append preserve_args " $opt $optarg" func_enable_tag "$optarg" shift ;; -\?|-h) func_usage ;; --help) func_help ;; --version) func_version ;; # Separate optargs to long options: --*=*) func_split_long_opt "$opt" set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-n*|-v*) func_split_short_opt "$opt" set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) set dummy "$opt" ${1+"$@"}; shift; break ;; esac done # Validate options: # save first non-option argument if test "$#" -gt 0; then nonopt="$opt" shift fi # preserve --debug test "$opt_debug" = : || func_append preserve_args " --debug" case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test "$opt_mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$opt_mode' for more information." } # Bail if the options were screwed $exit_cmd $EXIT_FAILURE } ## ----------- ## ## Main. ## ## ----------- ## # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case "$lt_sysroot:$1" in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result="=$func_stripname_result" ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$lt_sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $opt_debug # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result="" if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result" ; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $opt_debug if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $opt_debug # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $opt_debug if test -z "$2" && test -n "$1" ; then func_error "Could not determine host file name corresponding to" func_error " \`$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result="$1" fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $opt_debug if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " \`$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result="$3" fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $opt_debug case $4 in $1 ) func_to_host_path_result="$3$func_to_host_path_result" ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via `$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $opt_debug $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $opt_debug case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result="$1" } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result="$func_convert_core_msys_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via `$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $opt_debug if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd="func_convert_path_${func_stripname_result}" fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $opt_debug func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result="$1" } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_msys_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_mode_compile arg... func_mode_compile () { $opt_debug # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify \`-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" func_append_quoted lastarg "$arg" done IFS="$save_ifs" func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with \`-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj="$func_basename_result" } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from \`$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$opt_mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$opt_mode'" ;; esac echo $ECHO "Try \`$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test "$opt_help" = :; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | sed -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | sed '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$opt_mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "\`$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument \`$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and \`=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the \`-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test "$opt_mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test "x$prev" = x-m && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$opt_mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename="" if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname" ; then func_basename "$dlprefile_dlname" dlprefile_dlbasename="$func_basename_result" else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename" ; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $opt_debug sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $opt_debug match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive which possess that section. Heuristic: eliminate # all those which have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $opt_debug if func_cygming_gnu_implib_p "$1" ; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1" ; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result="" fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" if test "$lock_old_archive_extraction" = yes; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test "$lock_old_archive_extraction" = yes; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ which is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options which match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include /* declarations of non-ANSI functions */ #if defined(__MINGW32__) # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined(__CYGWIN__) # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined (other platforms) ... */ #endif /* portability defines, excluding path handling macros */ #if defined(_MSC_VER) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC # ifndef _INTPTR_T_DEFINED # define _INTPTR_T_DEFINED # define intptr_t int # endif #elif defined(__MINGW32__) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined(__CYGWIN__) # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined (other platforms) ... */ #endif #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #if defined(LT_DEBUGWRAPPER) static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $opt_debug case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir="$arg" prev= continue ;; dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-flto*|-fwhopr*|-fuse-linker-plugin) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test "$prev" = dlfiles; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps ; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." else echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test "$prefer_static_libs" = yes || test "$prefer_static_libs,$installed" = "built,no"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib="$l" done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$lt_sysroot$libdir" absdir="$lt_sysroot$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later func_append notinst_path " $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi case "$host" in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test "$installed" = no; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then echo if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$opt_mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$absdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$opt_mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system can not link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs="$temp_deplibs" fi func_append newlib_search_path " $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path="$deplib" ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|qnx|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. func_append verstring ":${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" func_append libobjs " $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$opt_mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test "X$deplibs_check_method" = "Xnone"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then # Remove ${wl} instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$opt_mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd1 in $cmds; do IFS="$save_ifs" # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test "$try_normal_branch" = yes \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=${output_objdir}/${output_la}.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\${concat_cmds}$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " ${wl}-bind_at_load" func_append finalize_command " ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs="$new_libs" func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=no ;; *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then func_append oldobjs " $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" func_resolve_sysroot "$deplib" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test "x$bindir" != x ; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$opt_mode" = link || test "$opt_mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) func_append RM " $arg"; rmforce=yes ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then odir="$objdir" else odir="$dir/$objdir" fi func_basename "$file" name="$func_basename_result" test "$opt_mode" = uninstall && odir="$dir" # Remember odir for removal later, being careful to avoid duplicates if test "$opt_mode" = clean; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case "$opt_mode" in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test "$opt_mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name" ; then func_append rmfiles " $odir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$opt_mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 lt" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs=libX11-1.6.3/Makefile.in000064401431060000012000000734541247741725400151410ustar00alancstaff00002660200006# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_define_dir.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h \ $(top_builddir)/include/X11/XlibConf.h CONFIG_CLEAN_FILES = x11.pc x11-xcb.pc CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgconfigdir)" DATA = $(pkgconfig_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = include modules src nls man specs am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/x11-xcb.pc.in \ $(srcdir)/x11.pc.in $(top_srcdir)/include/X11/XlibConf.h.in \ AUTHORS COPYING ChangeLog INSTALL NEWS README compile \ config.guess config.sub install-sh ltmain.sh missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2 GZIP_ENV = --best DIST_TARGETS = dist-bzip2 dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASE_CFLAGS = @BASE_CFLAGS@ BIGFONT_CFLAGS = @BIGFONT_CFLAGS@ BIGFONT_LIBS = @BIGFONT_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHANGELOG_CMD = @CHANGELOG_CMD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ FOP = @FOP@ GREP = @GREP@ I18N_MODULE_LIBS = @I18N_MODULE_LIBS@ INSTALL = @INSTALL@ INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ KEYSYMDEFS = @KEYSYMDEFS@ LAUNCHD = @LAUNCHD@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LINT = @LINT@ LINTLIB = @LINTLIB@ LINT_FLAGS = @LINT_FLAGS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MALLOC_ZERO_CFLAGS = @MALLOC_ZERO_CFLAGS@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_SUBSTS = @MAN_SUBSTS@ MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RAWCPP = @RAWCPP@ RAWCPPFLAGS = @RAWCPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRICT_CFLAGS = @STRICT_CFLAGS@ STRIP = @STRIP@ STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ TRADITIONALCPPFLAGS = @TRADITIONALCPPFLAGS@ VERSION = @VERSION@ WCHAR32 = @WCHAR32@ X11_CFLAGS = @X11_CFLAGS@ X11_DATADIR = @X11_DATADIR@ X11_EXTRA_DEPS = @X11_EXTRA_DEPS@ X11_LIBDIR = @X11_LIBDIR@ X11_LIBS = @X11_LIBS@ X11_LOCALEDATADIR = @X11_LOCALEDATADIR@ X11_LOCALEDIR = @X11_LOCALEDIR@ X11_LOCALELIBDIR = @X11_LOCALELIBDIR@ XERRORDB = @XERRORDB@ XKBPROTO_REQUIRES = @XKBPROTO_REQUIRES@ XKEYSYMDB = @XKEYSYMDB@ XLOCALEDATADIR = @XLOCALEDATADIR@ XLOCALEDIR = @XLOCALEDIR@ XLOCALELIBDIR = @XLOCALELIBDIR@ XMALLOC_ZERO_CFLAGS = @XMALLOC_ZERO_CFLAGS@ XMLTO = @XMLTO@ XORG_MAN_PAGE = @XORG_MAN_PAGE@ XORG_SGML_PATH = @XORG_SGML_PATH@ XSLTPROC = @XSLTPROC@ XSL_STYLESHEET = @XSL_STYLESHEET@ XTHREADLIB = @XTHREADLIB@ XTHREAD_CFLAGS = @XTHREAD_CFLAGS@ XTMALLOC_ZERO_CFLAGS = @XTMALLOC_ZERO_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ locales = @locales@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ @XLIB_LOADABLE_I18N_FALSE@ORDER = modules src @XLIB_LOADABLE_I18N_TRUE@ORDER = src modules # Order: nls before specs SUBDIRS = include $(ORDER) nls man specs ACLOCAL_AMFLAGS = -I m4 pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = x11.pc x11-xcb.pc MAINTAINERCLEANFILES = ChangeLog INSTALL # Check source code with tools like lint & sparse @LINT_TRUE@LINT_SUBDIRS = src # modules all: all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): include/X11/XlibConf.h: include/X11/stamp-h2 @test -f $@ || rm -f include/X11/stamp-h2 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) include/X11/stamp-h2 include/X11/stamp-h2: $(top_srcdir)/include/X11/XlibConf.h.in $(top_builddir)/config.status @rm -f include/X11/stamp-h2 cd $(top_builddir) && $(SHELL) ./config.status include/X11/XlibConf.h distclean-hdr: -rm -f include/X11/XlibConf.h include/X11/stamp-h2 x11.pc: $(top_builddir)/config.status $(srcdir)/x11.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ x11-xcb.pc: $(top_builddir)/config.status $(srcdir)/x11-xcb.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ done uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(pkgconfigdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr \ distclean-libtool distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-pkgconfigDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-pkgconfigDATA .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ clean-libtool cscope cscopelist-am ctags ctags-am dist \ dist-all dist-bzip2 dist-gzip dist-hook dist-lzip dist-shar \ dist-tarZ dist-xz dist-zip distcheck distclean \ distclean-generic distclean-hdr distclean-libtool \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-pkgconfigDATA install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am \ uninstall-pkgconfigDATA .PRECIOUS: Makefile .PHONY: ChangeLog INSTALL INSTALL: $(INSTALL_CMD) ChangeLog: $(CHANGELOG_CMD) dist-hook: ChangeLog INSTALL @LINT_TRUE@lint: @LINT_TRUE@ @for subdir in $(LINT_SUBDIRS) ; do \ @LINT_TRUE@ echo "Making $@ in $$subdir"; \ @LINT_TRUE@ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) lint) ; \ @LINT_TRUE@ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cplibX11-1.6.3/config.sub000075501431060000012000001062231247741725400150460ustar00alancstaff00002660200006#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2014 Free Software Foundation, Inc. timestamp='2014-12-03' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2014 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | visium \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; leon|leon[3-9]) basic_machine=sparc-$basic_machine ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | visium-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; leon-*|leon[3-9]-*) basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: v810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) libX11-1.6.3/configure.ac000064401431060000012000000401321247741723500153440ustar00alancstaff00002660200006 # Initialize Autoconf AC_PREREQ([2.60]) AC_INIT([libX11], [1.6.3], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], [libX11]) AC_CONFIG_SRCDIR([Makefile.am]) AC_CONFIG_HEADERS([src/config.h include/X11/XlibConf.h]) AC_CONFIG_MACRO_DIR([m4]) AC_CANONICAL_BUILD AC_CANONICAL_HOST # Set common system defines for POSIX extensions, such as _GNU_SOURCE # Must be called before any macros that run the compiler (like AC_PROG_LIBTOOL) # to avoid autoconf errors. AC_USE_SYSTEM_EXTENSIONS # Initialize Automake AM_INIT_AUTOMAKE([foreign dist-bzip2]) # Initialize libtool AC_PROG_LIBTOOL # Require xorg-macros minimum of 1.15 for fop minimum version m4_ifndef([XORG_MACROS_VERSION], [m4_fatal([must install xorg-macros 1.15 or later before running autoconf/autogen])]) XORG_MACROS_VERSION(1.15) XORG_DEFAULT_OPTIONS XORG_ENABLE_SPECS XORG_WITH_XMLTO(0.0.22) XORG_WITH_FOP([],[no]) XORG_WITH_XSLTPROC XORG_CHECK_SGML_DOCTOOLS(1.10) XORG_PROG_RAWCPP XORG_WITH_PERL # Required when PKG_CHECK_MODULES called within an if statement PKG_PROG_PKG_CONFIG if test x"$CC_FOR_BUILD" = x; then if test x"$cross_compiling" = xyes; then AC_CHECK_PROGS(CC_FOR_BUILD, gcc cc) else CC_FOR_BUILD="$CC" fi fi AC_SUBST([CC_FOR_BUILD]) if test x"$CPPFLAGS_FOR_BUILD" = x; then if test ! x"$cross_compiling" = xyes; then CPPFLAGS_FOR_BUILD=${CPPFLAGS} fi fi AC_SUBST(CPPFLAGS_FOR_BUILD) if test x"$CFLAGS_FOR_BUILD" = x; then if test ! x"$cross_compiling" = xyes; then CFLAGS_FOR_BUILD=${CFLAGS} fi fi AC_SUBST(CFLAGS_FOR_BUILD) if test x"$LDFLAGS_FOR_BUILD" = x; then if test ! x"$cross_compiling" = xyes; then LDFLAGS_FOR_BUILD=${LDFLAGS} fi fi AC_SUBST(LDFLAGS_FOR_BUILD) # Checks for pkg-config packages # Always required X11_REQUIRES='xproto >= 7.0.17 xextproto xtrans xcb >= 1.1.92' X11_EXTRA_DEPS="xcb >= 1.1.92" PKG_PROG_PKG_CONFIG() AC_SUBST(X11_EXTRA_DEPS) # Issue an error if xtrans.m4 was not found and XTRANS_CONNECTION_FLAGS macro # was not expanded, since libX11 with no transport types is rather useless. # # If you're seeing an error here, be sure you installed the lib/xtrans module # first and if it's not in the default location, that you set the ACLOCAL # environment variable to find it, such as: # ACLOCAL="aclocal -I ${PREFIX}/share/aclocal" m4_pattern_forbid([^XTRANS_CONNECTION_FLAGS$]) # Transport selection macro from xtrans.m4 XTRANS_CONNECTION_FLAGS # Secure RPC detection macro from xtrans.m4 XTRANS_SECURE_RPC_FLAGS # Preferred order to try transports for local connections AC_MSG_CHECKING([what order to try transports in for local connections]) DEFAULT_LOCAL_TRANS="" case $host_os in solaris*) # On Solaris 2.6 through 9, named pipes (LOCAL_TRANS) were # faster than Unix domain sockets, but on Solaris 10 & later, # Unix domain sockets are faster now. if test "$UNIXCONN" = "yes" ; then if test ! "x$DEFAULT_LOCAL_TRANS" = "x" ; then DEFAULT_LOCAL_TRANS="${DEFAULT_LOCAL_TRANS}," fi DEFAULT_LOCAL_TRANS="${DEFAULT_LOCAL_TRANS}UNIX_TRANS" fi if test "$LOCALCONN" = "yes" ; then if test ! "x$DEFAULT_LOCAL_TRANS" = "x" ; then DEFAULT_LOCAL_TRANS="${DEFAULT_LOCAL_TRANS}," fi DEFAULT_LOCAL_TRANS="${DEFAULT_LOCAL_TRANS}LOCAL_TRANS" fi if test "$TCPCONN" = "yes" ; then if test ! "x$DEFAULT_LOCAL_TRANS" = "x" ; then DEFAULT_LOCAL_TRANS="${DEFAULT_LOCAL_TRANS}," fi DEFAULT_LOCAL_TRANS="${DEFAULT_LOCAL_TRANS}TCP_TRANS" fi ;; linux*) # LOCAL_TRANS is used for abstract sockets. if test "$UNIXCONN" = "yes" ; then if test ! "x$DEFAULT_LOCAL_TRANS" = "x" ; then DEFAULT_LOCAL_TRANS="${DEFAULT_LOCAL_TRANS}," fi DEFAULT_LOCAL_TRANS="${DEFAULT_LOCAL_TRANS}LOCAL_TRANS,UNIX_TRANS" fi if test "$TCPCONN" = "yes" ; then if test ! "x$DEFAULT_LOCAL_TRANS" = "x" ; then DEFAULT_LOCAL_TRANS="${DEFAULT_LOCAL_TRANS}," fi DEFAULT_LOCAL_TRANS="${DEFAULT_LOCAL_TRANS}TCP_TRANS" fi ;; *) if test "$LOCALCONN" = "yes" ; then if test ! "x$DEFAULT_LOCAL_TRANS" = "x" ; then DEFAULT_LOCAL_TRANS="${DEFAULT_LOCAL_TRANS}," fi DEFAULT_LOCAL_TRANS="${DEFAULT_LOCAL_TRANS}LOCAL_TRANS" fi if test "$UNIXCONN" = "yes" ; then if test ! "x$DEFAULT_LOCAL_TRANS" = "x" ; then DEFAULT_LOCAL_TRANS="${DEFAULT_LOCAL_TRANS}," fi DEFAULT_LOCAL_TRANS="${DEFAULT_LOCAL_TRANS}UNIX_TRANS" fi if test "$TCPCONN" = "yes" ; then if test ! "x$DEFAULT_LOCAL_TRANS" = "x" ; then DEFAULT_LOCAL_TRANS="${DEFAULT_LOCAL_TRANS}," fi DEFAULT_LOCAL_TRANS="${DEFAULT_LOCAL_TRANS}TCP_TRANS" fi ;; esac AC_ARG_WITH(local-transport-order, AS_HELP_STRING([--with-local-transport-order=LIST], [preference sorted list of transport types to try for local connections]), [LOCAL_TRANSPORT_LIST=$withval], [LOCAL_TRANSPORT_LIST=$DEFAULT_LOCAL_TRANS]) AC_DEFINE_UNQUOTED([LOCAL_TRANSPORT_LIST], [$LOCAL_TRANSPORT_LIST], [preference sorted list of transport types to try for local connections]) AC_MSG_RESULT([$LOCAL_TRANSPORT_LIST]) # Check for dlopen AC_MSG_CHECKING([if run-time linking is supported]) AC_SEARCH_LIBS(dlopen,[dl svld]) if test "x$ac_cv_search_dlopen" = xno; then AC_SEARCH_LIBS(shl_load,[dld]) if test "x$ac_cv_search_shl_load" != xno; then AC_DEFINE(HAVE_SHL_LOAD,1, [Use shl_load to load shared libraries]) AC_CHECK_HEADERS([dl.h]) fi else AC_DEFINE(HAVE_DLOPEN,1,[Use dlopen to load shared libraries]) AC_CHECK_HEADERS([dlfcn.h]) fi if test "x$ac_cv_header_dlfcn_h" = xyes -o "x$ac_cv_header_dl_h" = xyes; then HAVE_LOADABLE_MODULES=yes else HAVE_LOADABLE_MODULES=no fi AC_MSG_RESULT($HAVE_LOADABLE_MODULES) AC_MSG_CHECKING([if loadable i18n module support should be enabled]) AC_ARG_ENABLE(loadable-i18n, AS_HELP_STRING([--enable-loadable-i18n], [Controls loadable i18n module support]), [XLIB_LOADABLE_I18N=$enableval], [XLIB_LOADABLE_I18N="no"]) if test x$XLIB_LOADABLE_I18N = xyes; then if test x$HAVE_LOADABLE_MODULES = xno; then AC_MSG_ERROR([Loadable module support is required to enable loadable i18n module support]) fi AC_DEFINE(USE_DYNAMIC_LC,1, [Split some i18n functions into loadable modules]) AC_SUBST(I18N_MODULE_LIBS,'${top_builddir}/src/libX11.la') fi AC_MSG_RESULT($XLIB_LOADABLE_I18N) AM_CONDITIONAL(XLIB_LOADABLE_I18N, test x$XLIB_LOADABLE_I18N = xyes) AC_MSG_CHECKING([if loadable Xcursor library support should be enabled]) AC_ARG_ENABLE(loadable-xcursor, AS_HELP_STRING([--disable-loadable-xcursor], [Controls loadable xcursor library support]), [XLIB_LOADABLE_XCURSOR=$enableval], [XLIB_LOADABLE_XCURSOR=$HAVE_LOADABLE_MODULES]) if test x$XLIB_LOADABLE_XCURSOR = xyes; then AC_DEFINE(USE_DYNAMIC_XCURSOR,1, [Use the X cursor library to load cursors]) fi AC_MSG_RESULT($XLIB_LOADABLE_XCURSOR) # Checks for header files. AC_CHECK_HEADERS([sys/select.h]) # Checks for typedefs, structures, and compiler characteristics. # Checks for library functions. AC_CHECK_FUNCS([strtol seteuid]) # Used in lcFile.c (see also --enable-xlocaledir settings below) XLOCALEDIR_IS_SAFE="no" AC_CHECK_DECL([issetugid]) AC_CHECK_FUNC([issetugid]) if test "$ac_cv_have_decl_issetugid" = yes && test "$ac_cv_func_issetugid" = yes; then XLOCALEDIR_IS_SAFE="yes" AC_DEFINE(HASSETUGID,1,[Has issetugid() function]) fi AC_CHECK_FUNC([getresuid], [XLOCALEDIR_IS_SAFE="yes"] AC_DEFINE(HASGETRESUID,1,[Has getresuid() & getresgid() functions])) # Used in Font.c AC_CHECK_FUNC([shmat], AC_DEFINE(HAS_SHM,1,[Has shm*() functions])) # Checks for system services # AC_PATH_XTRA # arch specific things WCHAR32="1" case $host_os in os2*) os2="true" ; WCHAR32="0" ;; *) ;; esac AC_SUBST(WCHAR32) AM_CONDITIONAL(OS2, test x$os2 = xtrue) AC_ARG_WITH(launchd, AS_HELP_STRING([--with-launchd], [Build with support for Apple's launchd (default: auto)]), [LAUNCHD=$withval], [LAUNCHD=auto]) if test "x$LAUNCHD" = xauto; then unset LAUNCHD AC_CHECK_PROG(LAUNCHD, [launchd], [yes], [no], [$PATH$PATH_SEPARATOR/sbin]) fi if test "x$LAUNCHD" = xyes ; then AC_DEFINE(HAVE_LAUNCHD, 1, [launchd support available]) AC_DEFINE(TRANS_REOPEN, 1, [launchd support available]) fi AC_ARG_ENABLE(xthreads, AS_HELP_STRING([--disable-xthreads], [Disable Xlib support for Multithreading]), [xthreads=$enableval],[xthreads=yes]) AC_CHECK_LIB(c, getpwuid_r, [mtsafeapi="yes"], [mtsafeapi="no"]) case x$xthreads in xyes) AC_DEFINE(XTHREADS,1,[Whether libX11 is compiled with thread support]) if test x$mtsafeapi = xyes then AC_DEFINE(XUSE_MTSAFE_API,1,[Whether libX11 needs to use MT safe API's]) fi ;; *) ;; esac AC_CHECK_LIB(c, pthread_self, [thrstubs="no"], [thrstubs="yes"]) AM_CONDITIONAL(THRSTUBS, test x$thrstubs = xyes) # XXX incomplete, please fill this in if test x$xthreads = xyes ; then case $host_os in linux*|gnu*|k*bsd*-gnu) XTHREADLIB=-lpthread ;; netbsd*) XTHREAD_CFLAGS="-D_POSIX_THREAD_SAFE_FUNCTIONS" XTHREADLIB="-lpthread" ;; freebsd*) XTHREAD_CFLAGS="-D_THREAD_SAFE" XTHREADLIB="-pthread" ;; dragonfly*|openbsd*) XTHREADLIB="-pthread" ;; solaris*) XTHREAD_CFLAGS="-D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS" ;; esac fi AC_SUBST(XTHREADLIB) AC_SUBST(XTHREAD_CFLAGS) AC_CHECK_FUNC(poll, [AC_DEFINE(USE_POLL, 1, [poll() function is available])], ) # # Find keysymdef.h # AC_MSG_CHECKING([keysym definitions]) AC_ARG_WITH([keysymdefdir], [AC_HELP_STRING([--with-keysymdefdir=DIR], [The location of keysymdef.h (defaults to xproto include dir)])], [KEYSYMDEFDIR=$withval], [KEYSYMDEFDIR=`$PKG_CONFIG --variable=includedir xproto`/X11]) if test ! -d "$KEYSYMDEFDIR"; then AC_MSG_ERROR([$KEYSYMDEFDIR doesn't exist or isn't a directory]) fi FILES="keysymdef.h XF86keysym.h Sunkeysym.h DECkeysym.h HPkeysym.h" for i in $FILES; do if test -f "$KEYSYMDEFDIR/$i"; then KEYSYMDEFS="$KEYSYMDEFS $KEYSYMDEFDIR/$i" elif test "x$i" = "xkeysymdef.h"; then AC_MSG_ERROR([Cannot find keysymdef.h]) fi done AC_MSG_RESULT([$KEYSYMDEFS]) AC_SUBST(KEYSYMDEFS) AC_ARG_ENABLE(xcms, AS_HELP_STRING([--disable-xcms], [Disable Xlib support for CMS *EXPERIMENTAL*]), [XCMS=$enableval],[XCMS=yes]) AM_CONDITIONAL(XCMS, [test x$XCMS = xyes ]) if test x"$XCMS" = "xyes"; then AC_DEFINE(XCMS,1,[Include support for XCMS]) fi AC_ARG_ENABLE(xlocale, AS_HELP_STRING([--disable-xlocale], [Disable Xlib locale implementation *EXPERIMENTAL*]), [XLOCALE=$enableval],[XLOCALE=yes]) AM_CONDITIONAL(XLOCALE, [ test x$XLOCALE = xyes ]) if test x"$XLOCALE" = "xyes"; then AC_DEFINE(XLOCALE,1,[support for X Locales]) fi # This disables XLOCALEDIR. Set it if you're using BuildLoadableXlibI18n, # don't have either issetugid() or getresuid(), and you need to protect # clients that are setgid or setuid to an id other than 0. AC_MSG_CHECKING([if XLOCALEDIR support should be enabled]) AC_ARG_ENABLE(xlocaledir, AS_HELP_STRING([--enable-xlocaledir], [Enable XLOCALEDIR environment variable support]), [ENABLE_XLOCALEDIR=$enableval],[ENABLE_XLOCALEDIR=$XLOCALEDIR_IS_SAFE]) if test "x$ENABLE_XLOCALEDIR" = "xno"; then AC_DEFINE(NO_XLOCALEDIR,1,[Disable XLOCALEDIR environment variable]) fi AC_MSG_RESULT($ENABLE_XLOCALEDIR) AC_ARG_ENABLE(xf86bigfont, AS_HELP_STRING([--disable-xf86bigfont], [Disable XF86BigFont extension support]), [XF86BIGFONT=$enableval],[XF86BIGFONT="yes"]) if test "x$XF86BIGFONT" = "xyes"; then PKG_CHECK_MODULES(BIGFONT, [xf86bigfontproto >= 1.2.0], AC_DEFINE(XF86BIGFONT,1,[Enable XF86BIGFONT extension]),XF86BIGFONT="no") fi AC_ARG_ENABLE(xkb, AS_HELP_STRING([--disable-xkb], [Disable XKB support *EXPERIMENTAL*]), [XKB=$enableval],[XKB=yes]) AM_CONDITIONAL(XKB, [ test x$XKB = xyes ]) if test x"$XKB" = "xyes"; then XKBPROTO_REQUIRES="kbproto" X11_REQUIRES="${X11_REQUIRES} kbproto inputproto" AC_DEFINE(XKB,1,[Use XKB]) else XKBPROTO_REQUIRES="" fi AC_SUBST(XKBPROTO_REQUIRES) AC_FUNC_MMAP() composecache_default=$ac_cv_func_mmap_fixed_mapped AC_CHECK_FUNC(nl_langinfo, , [composecache_default=no]) AC_ARG_ENABLE(composecache, AS_HELP_STRING([--disable-composecache], [Disable compose table cache support]), [COMPOSECACHE=$enableval],[COMPOSECACHE=$composecache_default]) if test x"$COMPOSECACHE" = "xyes"; then AC_DEFINE(COMPOSECACHE,1,[Include compose table cache support]) fi # Allow checking code with lint, sparse, etc. XORG_WITH_LINT XORG_LINT_LIBRARY([X11]) X11_DATADIR="${datadir}/X11" AX_DEFINE_DIR(X11_DATADIR, X11_DATADIR, [Location of libX11 data]) AC_SUBST(X11_DATADIR) X11_LIBDIR="${libdir}/X11" AX_DEFINE_DIR(X11_LIBDIR, X11_LIBDIR, [Location of libX11 library data]) AC_SUBST(X11_LIBDIR) PKG_CHECK_MODULES(X11, [$X11_REQUIRES]) X11_CFLAGS="$X11_CFLAGS $XTHREAD_CFLAGS" # # Yes, it would be nice to put the locale data in # /usr/share, but the locale stuff includes loadable # libraries which must be located in the same directory # as the other locale data, so for now, everything lives # in ${libdir} # X11_LOCALEDATADIR="${X11_DATADIR}/locale" AX_DEFINE_DIR(XLOCALEDATADIR, X11_LOCALEDATADIR, [Location of libX11 locale data]) AC_SUBST(X11_LOCALEDATADIR) AC_ARG_WITH(locale-lib-dir, AS_HELP_STRING([--with-locale-lib-dir=DIR], [Directory where locale libraries files are installed (default: $libdir/X11/locale)]), [ X11_LOCALELIBDIR="$withval" ], [ X11_LOCALELIBDIR="${X11_LIBDIR}/locale" ]) AX_DEFINE_DIR(XLOCALELIBDIR, X11_LOCALELIBDIR, [Location of libX11 locale libraries]) AC_SUBST(X11_LOCALELIBDIR) X11_LOCALEDIR="${X11_LOCALEDATADIR}" AX_DEFINE_DIR(XLOCALEDIR, X11_LOCALEDIR, [Location of libX11 locale data]) AC_SUBST(X11_LOCALEDIR) locales="\ am_ET.UTF-8 armscii-8 C cs_CZ.UTF-8 el_GR.UTF-8 en_US.UTF-8 \ fi_FI.UTF-8 georgian-academy georgian-ps ibm-cp1133 iscii-dev \ isiri-3342 iso8859-1 iso8859-10 iso8859-11 iso8859-13 iso8859-14 \ iso8859-15 iso8859-2 iso8859-3 iso8859-4 iso8859-5 iso8859-6 \ iso8859-7 iso8859-8 iso8859-9 iso8859-9e ja ja.JIS \ ja_JP.UTF-8 ja.SJIS km_KH.UTF-8 ko koi8-c koi8-r \ koi8-u ko_KR.UTF-8 microsoft-cp1251 microsoft-cp1255 \ microsoft-cp1256 mulelao-1 nokhchi-1 pt_BR.UTF-8 ru_RU.UTF-8 \ sr_CS.UTF-8 tatar-cyr th_TH th_TH.UTF-8 tscii-0 vi_VN.tcvn \ vi_VN.viscii zh_CN zh_CN.gb18030 zh_CN.gbk zh_CN.UTF-8 \ zh_HK.big5 zh_HK.big5hkscs zh_HK.UTF-8 zh_TW zh_TW.big5 \ zh_TW.UTF-8" AC_SUBST(locales) XKEYSYMDB="${X11_DATADIR}/XKeysymDB" AX_DEFINE_DIR(XKEYSYMDB, XKEYSYMDB, [Location of keysym database]) XERRORDB="${X11_DATADIR}/XErrorDB" AX_DEFINE_DIR(XERRORDB, XERRORDB, [Location of error message database]) XORG_CHECK_MALLOC_ZERO AC_CONFIG_FILES([Makefile include/Makefile man/Makefile man/xkb/Makefile src/Makefile src/util/Makefile src/xcms/Makefile src/xlibi18n/Makefile modules/Makefile modules/im/Makefile modules/im/ximcp/Makefile modules/lc/Makefile modules/lc/def/Makefile modules/lc/gen/Makefile modules/lc/Utf8/Makefile modules/om/Makefile modules/om/generic/Makefile src/xkb/Makefile nls/Makefile specs/Makefile specs/i18n/Makefile specs/i18n/compose/Makefile specs/i18n/framework/Makefile specs/i18n/localedb/Makefile specs/i18n/trans/Makefile specs/libX11/Makefile specs/XIM/Makefile specs/XKB/Makefile x11.pc x11-xcb.pc]) AC_OUTPUT echo "" echo "X11 will be built with the following settings:" echo " Loadable i18n module support: "$XLIB_LOADABLE_I18N echo " Loadable xcursor library support: "$XLIB_LOADABLE_XCURSOR echo " Threading support: "$xthreads echo " Use Threads safe API: "$mtsafeapi echo " Threads stubs in libX11: "$thrstubs echo " XCMS: "$XCMS echo " Internationalization support: "$XLOCALE echo " XF86BigFont support: "$XF86BIGFONT echo " XKB support: "$XKB echo " XLOCALEDIR environment variable support: "$ENABLE_XLOCALEDIR echo " Compose table cache enabled: "$COMPOSECACHE echo " Functional specs building enabled: "$build_specs echo "" AC_DEFINE(HASSETUGID,1,[Has issetugid() function]) fi AC_CHECK_FUNC([getresuid], [XLOCALEDIR_IS_SAFE="yes"] AC_DEFINE(HASGETRESUID,1,[Has getresuid() & getresgid() functions])) # Used in Font.c AC_CHECK_FUNC([shmat], AC_DEFINE(HAS_SHM,1,[Has shm*() functions])) # Checks for system services # AC_PATH_XTRA # arch specific things WCHAR32="1" case $host_os in os2*) os2="true" ; WCHAR32="0" ;; *) ;; esac AC_SUBSlibX11-1.6.3/test-driver000075501431060000012000000110401247741725500152520ustar00alancstaff00002660200006#! /bin/sh # test-driver - basic testsuite driver script. scriptversion=2013-07-13.22; # UTC # Copyright (C) 2011-2014 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . # Make unconditional expansion of undefined variables an error. This # helps a lot in preventing typo-related bugs. set -u usage_error () { echo "$0: $*" >&2 print_usage >&2 exit 2 } print_usage () { cat <$log_file 2>&1 estatus=$? if test $enable_hard_errors = no && test $estatus -eq 99; then tweaked_estatus=1 else tweaked_estatus=$estatus fi case $tweaked_estatus:$expect_failure in 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; 0:*) col=$grn res=PASS recheck=no gcopy=no;; 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; *:*) col=$red res=FAIL recheck=yes gcopy=yes;; esac # Report the test outcome and exit status in the logs, so that one can # know whether the test passed or failed simply by looking at the '.log' # file, without the need of also peaking into the corresponding '.trs' # file (automake bug#11814). echo "$res $test_name (exit status: $estatus)" >>$log_file # Report outcome to console. echo "${col}${res}${std}: $test_name" # Register the test result, and other relevant metadata. echo ":test-result: $res" > $trs_file echo ":global-test-result: $res" >> $trs_file echo ":recheck: $recheck" >> $trs_file echo ":copy-in-global-log: $gcopy" >> $trs_file # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: libX11-1.6.3/NEWS000064401431060000012000000172131247741723500135610ustar00alancstaff00002660200006Version 1.1.2 - 2007-06-03 * Security fixes: * Fix CVE-2007-1667: Multiple integer overflows in the XGetPixel() and XInitImage() functions. * Bug #9279: Fixed a file descriptor leak. * Xlib/XCB: Ensure _XReadEvents reads at least one new event and blocks for exactly one event. Large performance improvement for XIfEvent and similar. * Hold XCB's Xlib lock even when only the user lock (XLockDisplay) is held. An Xlib client can query Display state, such as with NextRequest, while it holds only the Xlib user lock (between XLockDisplay and XUnlockDisplay), so XCB requests in other threads should be blocked when the Xlib user lock is held. We acquire the lock even when XInitThreads was not called, so that pure XCB code can use multiple threads even in an otherwise single-threaded Xlib application. * Allow re-entrant Xlib calls from _XIOError. Some libraries try to clean up X resources from atexit handlers, _fini, or C++ destructors. To make these work, downgrade the Display lock to a user lock (as in XLockDisplay) before calling exit(3). This blocks Xlib calls from threads other than the one calling exit(3) while still allowing the exit handlers to call Xlib. * Xlib/XCB: Avoid re-crashing after _XIOError. * Xlib/XCB: Only remove pending_requests when there are provably no more responses. * For NetBSD, define XTHREADLIB and XTHREAD_CFLAGS. * Bug #7703: Fixed XSetSizeHints() et al wrt use of uninitialized data. Now only those fields of the respective hint struct are set that are actually valid in the input data. * Bug #10292: Fixed a memory leak related to XOpenDisplay() in the XCB code. * Bug #7713: Initialize all of the event's fields before sending it. * Bug #10562: Define _GNU_SOURCE on glibc systems. * Use unistd.h to get getresuid() and friends, now that we have _GNU_SOURCE defined. * Switched function definitions from K&R to ANSI style. * Many constness fixes. * Fixed a few warnings. * Fix 64bit issues with reallocation. * Manpage fixes: * Add man pages for XKB APIs. (Volunteer needed to convert prototypes in man pages to ANSI C style...) * Protect C comments and #defines in XKB man pages from being mangled by cpp * Fix typo in nroff macro in XkbAddGeomOverlayKey.man * Bug #9695: Fixed a few argument types in the XOpenIM manpage. * Markup tweak for XOpenIM. * Bug #9696: refer to XDefineCursor() instead of XDefineCusor(). * Bug #9697: Fixed documentation of XVisualInfo struct. The "depth" member was said to be unsigned int, but it's signed. * nls fixes: * Update el_GR.UTF-8/Compose.pre to match changes in xkeyboard-config cvs. * For nls/*.pre, allow people to comment lines by starting them with '##'. * Build system fixes: * Add autogen.sh to EXTRA_DIST. * Makefile.am: make ChangeLog hook safer * Don't distribute the configure-generated XlibConf.h in tarballs. Version 1.1.1 - 2006-11-30 The "xcompmgr is hard, let's go releasing" release * Fix Bug #9154 and friends, to unbreak xcompmgr: Always process an event for _XReadEvents, even if an error occurs. Previously, process_responses (in the wait_for_first_event case called from _XReadEvents) considered any return from xcb_wait_for_event sufficient to think it had processed an event. If xcb_wait_for_event returned an error, and no more events occurred before process_responses called xcb_poll_for_event, process_responses would try to return with dpy->head NULL, and would fail an assertion for the _XReadEvents postcondition. Now, process_responses continues using xcb_wait_for_event until it gets an event. * Bug #9153: Fix access to freed memory. The fix for bug #8622 introduced a smaller bug where _XReply would read memory shortly after freeing it. This patch caches the needed value in a stack-allocated variable before the heap-allocated memory is freed. * libx11 doesn't use inputproto in public headers; don't require it in x11.pc. Based on a Debian patch. * Debian bug #354315: Clarify return value in XGetWindowAttributes man page. Patch by Debian user Ross Combs. Version 1.1 - 2006-11-23 * Add note in man-page that XListFontsWithInfo is not thread-safe. _XReply drops the Display lock, so the value of dpy->request may change before _XReply is called again. Jamey Sharp discovered this by inspection a few years ago. * Fix Bug #8622, by fixing the response processing order for threaded apps. process_responses (the common code for _XReply, _XReadEvents, and _XEventsQueued) now handles responses in order, by adding condition variables to the list of outstanding requests in dpy->xcb->pending_requests, and blocking on them when those requests should get processed, to allow _XReply to process them; if actually called from _XReply, it returns when _XReply's request should get processed. _XReply broadcasts on its condition variable after it has read its reply and re-acquired the display lock. * Don't hold the display lock around callbacks to the application. This avoids recursive locking of the display lock (which triggers an XCB locking assertion), particularly with emacs. * Add xcb-xlib dependency to x11.pc when built against XCB. * Allocate the right amount of memory for dpy->lock_fns. Fixes a crash on startup with gdk. Version 1.1 RC2 - 2006-11-02 Benno Schulenberg: nls: remove duplicate compose entries (bug #2286) nls: remove shadowed compose entries (bug #2286) nls (en_US): remove long compositions that override shorter (bug #2286) Caolan McNamara: XKB geometry: fix leaks in GetKeyboardByName (bug #8099) David Nusinow: Dynamically generate internal manpage section using __libmanpagesuffix__ so that it actually matches the section if you don't use 3X11 Jamey Sharp: Add correct Display locking to XKB functions. XKB bugfix: SyncHandle must be called after UnlockDisplay, not before. XCB: check for and handle I/O errors in _XGetXCBBuffer. Matthias Hopf: Fix double open of compose file. Version 1.1 RC1 - 2006-10-06 This release includes the Xlib/XCB work, which uses XCB as the Xlib transport layer, and allows a client to use both Xlib and XCB on the same connection. This allows clients to transition from Xlib to XCB incrementally. Clients which link only to libX11, and do not use XCB, should not notice any differences in this release. Clients desiring XCB interoperability should additionally #include , link to libX11-xcb, use XGetXCBConnection(dpy) to obtain the underlying XCB connection, and then use XCB functions directly on that connection. Note that while a client can issue requests and handle their replies or errors with either Xlib or XCB, only one can own and handle the event queue. By default, Xlib must own the event queue, for compatibility with legacy Xlib clients. Clients can use the function XSetEventQueueOwner immediately after XOpenDisplay to let XCB own the event queue instead. Clients may not call this function after processing any responses, as this will potentially lose responses. We expect to have an RC2 release corresponding to the Xorg RC2 schedule, which should include additional internal architecture enhancements, but no user-visible changes. 1.0 final should match RC2. Other smaller changes in this release: * correct ChangeLog generation * support running lint and sparse * Autoconf 2.60 * fix man page for XUrgencyHint * improve man pages for XGrabButton, XGrabKey, XGetWindowProperty * new locales: as_IN.UTF-8, kn_IN.UTF-8, ml_IN.UTF-8, or_IN.UTF-8, te_IN.UTF-8, ur_IN.UTF-8 * on systems with both UNIXCONN and LOCALCONN, try unix if local fails * fix sparse warnings * ansify static functions -- Josh Triplett , Jamey Sharp till allowing the exit handlers to call Xlib. * Xlib/XCB: Avoid re-crashing after _XIOError. * Xlib/XCB: Only remove pending_requests when there are provably no more responses. * For NetBSD, define XTHREADLIB and XTHREAD_CFLAGS. * Bug #7703: Fixed XSetSizeHints() et al wrt use of uninitialized data. Now only those fields of the respective hint struct are set thatlibX11-1.6.3/missing000075501431060000012000000153301247741725400144600ustar00alancstaff00002660200006#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2013-10-28.13; # UTC # Copyright (C) 1996-2014 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: libX11-1.6.3/depcomp000075501431060000012000000560161247741725400144440ustar00alancstaff00002660200006#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2013-05-30.07; # UTC # Copyright (C) 1999-2014 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: eld by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # EachlibX11-1.6.3/Makefile.am000064401431060000012000000011541247741723500151130ustar00alancstaff00002660200006if XLIB_LOADABLE_I18N ORDER=src modules else ORDER=modules src endif # Order: nls before specs SUBDIRS=include $(ORDER) nls man specs ACLOCAL_AMFLAGS = -I m4 pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = x11.pc x11-xcb.pc MAINTAINERCLEANFILES = ChangeLog INSTALL .PHONY: ChangeLog INSTALL INSTALL: $(INSTALL_CMD) ChangeLog: $(CHANGELOG_CMD) dist-hook: ChangeLog INSTALL if LINT # Check source code with tools like lint & sparse LINT_SUBDIRS=src # modules lint: @for subdir in $(LINT_SUBDIRS) ; do \ echo "Making $@ in $$subdir"; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) lint) ; \ done endif LINT libX11-1.6.3/src/MapWindow.c000064401431060000012000000025771247741723500157310ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XMapWindow ( register Display *dpy, Window w) { register xResourceReq *req; LockDisplay (dpy); GetResReq(MapWindow, w, req); UnlockDisplay (dpy); SyncHandle(); return 1; } libX11-1.6.3/src/DrArc.c000064401431060000012000000042561247741723500150130ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ /* Note to future maintainers: XDrawArc does NOT batch successive PolyArc requests into a single request like XDrawLine, XDrawPoint, etc. We don't do this because X_PolyArc applies the GC's join-style if the last point in one arc coincides with the first point in another. The client wouldn't expect this and would have no easy way to defeat it. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XDrawArc( register Display *dpy, Drawable d, GC gc, int x, int y, /* INT16 */ unsigned int width, unsigned int height, /* CARD16 */ int angle1, int angle2) /* INT16 */ { register xPolyArcReq *req; register xArc *arc; LockDisplay(dpy); FlushGC(dpy, gc); GetReqExtra (PolyArc, SIZEOF(xArc), req); req->drawable = d; req->gc = gc->gid; arc = (xArc *) NEXTPTR(req,xPolyArcReq); arc->x = x; arc->y = y; arc->width = width; arc->height = height; arc->angle1 = angle1; arc->angle2 = angle2; UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/RecolorC.c000064401431060000012000000033141247741723500155220ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XRecolorCursor( register Display *dpy, Cursor cursor, XColor *foreground, XColor *background) { register xRecolorCursorReq *req; LockDisplay(dpy); GetReq(RecolorCursor, req); req->cursor = cursor; req->foreRed = foreground->red; req->foreGreen = foreground->green; req->foreBlue = foreground->blue; req->backRed = background->red; req->backGreen = background->green; req->backBlue = background->blue; UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/Quarks.c000064401431060000012000000247041247741723500152660ustar00alancstaff00002660200006 /*********************************************************** Copyright 1987, 1988, 1990 by Digital Equipment Corporation, Maynard, All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1990, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include #include "Xresinternal.h" /* Not cost effective, at least for vanilla MIT clients */ /* #define PERMQ */ #ifdef PERMQ typedef unsigned char Bits; #endif typedef unsigned long Entry; /* dont confuse with EntryRec from Xintatom.h */ static XrmQuark nextQuark = 1; /* next available quark number */ static unsigned long quarkMask = 0; static Entry zero = 0; static Entry *quarkTable = &zero; /* crock */ static unsigned long quarkRehash; static XrmString **stringTable = NULL; #ifdef PERMQ static Bits **permTable = NULL; #endif static XrmQuark nextUniq = -1; /* next quark from XrmUniqueQuark */ #define QUANTUMSHIFT 8 #define QUANTUMMASK ((1 << QUANTUMSHIFT) - 1) #define CHUNKPER 8 #define CHUNKMASK ((CHUNKPER << QUANTUMSHIFT) - 1) #define LARGEQUARK ((Entry)0x80000000L) #define QUARKSHIFT 18 #define QUARKMASK ((LARGEQUARK - 1) >> QUARKSHIFT) #define XSIGMASK ((1L << QUARKSHIFT) - 1) #define STRQUANTSIZE (sizeof(XrmString) * (QUANTUMMASK + 1)) #ifdef PERMQ #define QUANTSIZE (STRQUANTSIZE + \ (sizeof(Bits) * ((QUANTUMMASK + 1) >> 3)) #else #define QUANTSIZE STRQUANTSIZE #endif #define HASH(sig) ((sig) & quarkMask) #define REHASHVAL(sig) ((((sig) % quarkRehash) + 2) | 1) #define REHASH(idx,rehash) ((idx + rehash) & quarkMask) #define NAME(q) stringTable[(q) >> QUANTUMSHIFT][(q) & QUANTUMMASK] #ifdef PERMQ #define BYTEREF(q) permTable[(q) >> QUANTUMSHIFT][((q) & QUANTUMMASK) >> 3] #define ISPERM(q) (BYTEREF(q) & (1 << ((q) & 7))) #define SETPERM(q) BYTEREF(q) |= (1 << ((q) & 7)) #define CLEARPERM(q) BYTEREF(q) &= ~(1 << ((q) & 7)) #endif /* Permanent memory allocation */ #define WALIGN sizeof(unsigned long) #define DALIGN sizeof(double) #define NEVERFREETABLESIZE ((8192-12) & ~(DALIGN-1)) static char *neverFreeTable = NULL; static int neverFreeTableSize = 0; static char *permalloc(unsigned int length) { char *ret; if (neverFreeTableSize < length) { if (length >= NEVERFREETABLESIZE) return Xmalloc(length); if (! (ret = Xmalloc(NEVERFREETABLESIZE))) return (char *) NULL; neverFreeTableSize = NEVERFREETABLESIZE; neverFreeTable = ret; } ret = neverFreeTable; neverFreeTable += length; neverFreeTableSize -= length; return(ret); } typedef struct {char a; double b;} TestType1; typedef struct {char a; unsigned long b;} TestType2; #ifdef XTHREADS static char *_Xpermalloc(unsigned int length); char *Xpermalloc(unsigned int length) { char *p; _XLockMutex(_Xglobal_lock); p = _Xpermalloc(length); _XUnlockMutex(_Xglobal_lock); return p; } #define Xpermalloc _Xpermalloc static #endif /* XTHREADS */ char *Xpermalloc(unsigned int length) { int i; if (neverFreeTableSize && length < NEVERFREETABLESIZE) { if ((sizeof(TestType1) != (sizeof(TestType2) - sizeof(unsigned long) + sizeof(double))) && !(length & (DALIGN-1)) && ((i = (NEVERFREETABLESIZE - neverFreeTableSize) & (DALIGN-1)))) { neverFreeTableSize -= DALIGN - i; neverFreeTable += DALIGN - i; } else if ((i = (NEVERFREETABLESIZE - neverFreeTableSize) & (WALIGN-1))) { neverFreeTableSize -= WALIGN - i; neverFreeTable += WALIGN - i; } } return permalloc(length); } static Bool ExpandQuarkTable(void) { unsigned long oldmask, newmask; register char c, *s; register Entry *oldentries, *entries; register Entry entry; register int oldidx, newidx, rehash; Signature sig; XrmQuark q; oldentries = quarkTable; if ((oldmask = quarkMask)) newmask = (oldmask << 1) + 1; else { if (!stringTable) { stringTable = Xmalloc(sizeof(XrmString *) * CHUNKPER); if (!stringTable) return False; stringTable[0] = (XrmString *)NULL; } #ifdef PERMQ if (!permTable) permTable = Xmalloc(sizeof(Bits *) * CHUNKPER); if (!permTable) return False; #endif stringTable[0] = (XrmString *)Xpermalloc(QUANTSIZE); if (!stringTable[0]) return False; #ifdef PERMQ permTable[0] = (Bits *)((char *)stringTable[0] + STRQUANTSIZE); #endif newmask = 0x1ff; } entries = Xcalloc(newmask + 1, sizeof(Entry)); if (!entries) return False; quarkTable = entries; quarkMask = newmask; quarkRehash = quarkMask - 2; for (oldidx = 0; oldidx <= oldmask; oldidx++) { if ((entry = oldentries[oldidx])) { if (entry & LARGEQUARK) q = entry & (LARGEQUARK-1); else q = (entry >> QUARKSHIFT) & QUARKMASK; for (sig = 0, s = NAME(q); (c = *s++); ) sig = (sig << 1) + c; newidx = HASH(sig); if (entries[newidx]) { rehash = REHASHVAL(sig); do { newidx = REHASH(newidx, rehash); } while (entries[newidx]); } entries[newidx] = entry; } } if (oldmask) Xfree(oldentries); return True; } XrmQuark _XrmInternalStringToQuark( register _Xconst char *name, register int len, register Signature sig, Bool permstring) { register XrmQuark q; register Entry entry; register int idx, rehash; register int i; register char *s1, *s2; char *new; rehash = 0; idx = HASH(sig); _XLockMutex(_Xglobal_lock); while ((entry = quarkTable[idx])) { if (entry & LARGEQUARK) q = entry & (LARGEQUARK-1); else { if ((entry - sig) & XSIGMASK) goto nomatch; q = (entry >> QUARKSHIFT) & QUARKMASK; } for (i = len, s1 = (char *)name, s2 = NAME(q); --i >= 0; ) { if (*s1++ != *s2++) goto nomatch; } if (*s2) { nomatch: if (!rehash) rehash = REHASHVAL(sig); idx = REHASH(idx, rehash); continue; } #ifdef PERMQ if (permstring && !ISPERM(q)) { Xfree(NAME(q)); NAME(q) = (char *)name; SETPERM(q); } #endif _XUnlockMutex(_Xglobal_lock); return q; } if (nextUniq == nextQuark) goto fail; if ((nextQuark + (nextQuark >> 2)) > quarkMask) { if (!ExpandQuarkTable()) goto fail; _XUnlockMutex(_Xglobal_lock); return _XrmInternalStringToQuark(name, len, sig, permstring); } q = nextQuark; if (!(q & QUANTUMMASK)) { if (!(q & CHUNKMASK)) { if (!(new = Xrealloc(stringTable, sizeof(XrmString *) * ((q >> QUANTUMSHIFT) + CHUNKPER)))) goto fail; stringTable = (XrmString **)new; #ifdef PERMQ if (!(new = Xrealloc(permTable, sizeof(Bits *) * ((q >> QUANTUMSHIFT) + CHUNKPER)))) goto fail; permTable = (Bits **)new; #endif } new = Xpermalloc(QUANTSIZE); if (!new) goto fail; stringTable[q >> QUANTUMSHIFT] = (XrmString *)new; #ifdef PERMQ permTable[q >> QUANTUMSHIFT] = (Bits *)(new + STRQUANTSIZE); #endif } if (!permstring) { s2 = (char *)name; #ifdef PERMQ name = Xmalloc(len+1); #else name = permalloc(len+1); #endif if (!name) goto fail; for (i = len, s1 = (char *)name; --i >= 0; ) *s1++ = *s2++; *s1++ = '\0'; #ifdef PERMQ CLEARPERM(q); } else { SETPERM(q); #endif } NAME(q) = (char *)name; if (q <= QUARKMASK) entry = (q << QUARKSHIFT) | (sig & XSIGMASK); else entry = q | LARGEQUARK; quarkTable[idx] = entry; nextQuark++; _XUnlockMutex(_Xglobal_lock); return q; fail: _XUnlockMutex(_Xglobal_lock); return NULLQUARK; } XrmQuark XrmStringToQuark( _Xconst char *name) { register char c, *tname; register Signature sig = 0; if (!name) return (NULLQUARK); for (tname = (char *)name; (c = *tname++); ) sig = (sig << 1) + c; return _XrmInternalStringToQuark(name, tname-(char *)name-1, sig, False); } XrmQuark XrmPermStringToQuark( _Xconst char *name) { register char c, *tname; register Signature sig = 0; if (!name) return (NULLQUARK); for (tname = (char *)name; (c = *tname++); ) sig = (sig << 1) + c; return _XrmInternalStringToQuark(name, tname-(char *)name-1, sig, True); } XrmQuark XrmUniqueQuark(void) { XrmQuark q; _XLockMutex(_Xglobal_lock); if (nextUniq == nextQuark) q = NULLQUARK; else q = nextUniq--; _XUnlockMutex(_Xglobal_lock); return q; } XrmString XrmQuarkToString(register XrmQuark quark) { XrmString s; _XLockMutex(_Xglobal_lock); if (quark <= 0 || quark >= nextQuark) s = NULLSTRING; else { #ifdef PERMQ /* We have to mark the quark as permanent, since the caller might hold * onto the string pointer forver. */ SETPERM(quark); #endif s = NAME(quark); } _XUnlockMutex(_Xglobal_lock); return s; } QUANTUMMASK ((1 << QUANTUMSHIFT) - 1) #define CHUNKPER 8 #dlibX11-1.6.3/src/globals.c000064401431060000012000000060471247741723500154430ustar00alancstaff00002660200006/* Copyright 1989, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ /* * * Global data * * This file should contain only those objects which must be predefined. */ #ifdef HAVE_CONFIG_H #include #endif #include /* * If possible, it is useful to have the global data default to a null value. * Some shared library implementations are *much* happier if there isn't any * global initialized data. */ #ifdef NULL_NOT_ZERO /* then need to initialize */ #define SetZero(t,var,z) t var = z #else #define SetZero(t,var,z) t var #endif #ifdef USL_SHAREDLIB /* then need extra variables */ /* * If we need to define extra variables for each global */ #define ZEROINIT(t,var,val) SetZero(t,var,val); \ SetZero (long, _libX_##var##Flag, 0); \ SetZero (void *, _libX_##var##Ptr, NULL) #else /* else not USL_SHAREDLIB */ /* * no extra crud */ #define ZEROINIT(t,var,val) SetZero (t, var, val) #endif /* USL_SHAREDLIB */ /* * Error handlers; used to be in XlibInt.c */ ZEROINIT (XErrorHandler, _XErrorFunction, NULL); ZEROINIT (XIOErrorHandler, _XIOErrorFunction, NULL); ZEROINIT (_XQEvent *, _qfree, NULL); /* * Debugging information and display list; used to be in XOpenDis.c */ ZEROINIT (int, _Xdebug, 0); ZEROINIT (Display *, _XHeadOfDisplayList, NULL); #ifdef XTEST1 /* * Stuff for input synthesis extension: */ /* * Holds the two event type codes for this extension. The event type codes * for this extension may vary depending on how many extensions are installed * already, so the initial values given below will be added to the base event * code that is aquired when this extension is installed. * * These two variables must be available to programs that use this extension. */ int XTestInputActionType = 0; int XTestFakeAckType = 1; #endif /* * NOTE: any additional external definition NEED * to be inserted BELOW this point!!! */ /* * NOTE: any additional external definition NEED * to be inserted ABOVE this point!!! */ libX11-1.6.3/src/GetHints.c000064401431060000012000000231611247741723500155410ustar00alancstaff00002660200006 /*********************************************************** Copyright 1987, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include "Xatomtype.h" #include #include Status XGetSizeHints ( Display *dpy, Window w, XSizeHints *hints, Atom property) { xPropSizeHints *prop = NULL; Atom actual_type; int actual_format; unsigned long leftover; unsigned long nitems; if (XGetWindowProperty(dpy, w, property, 0L, (long) OldNumPropSizeElements, False, XA_WM_SIZE_HINTS, &actual_type, &actual_format, &nitems, &leftover, (unsigned char **)&prop) != Success) return (0); if ((actual_type != XA_WM_SIZE_HINTS) || (nitems < OldNumPropSizeElements) || (actual_format != 32)) { Xfree (prop); return(0); } hints->flags = (prop->flags & (USPosition|USSize|PAllHints)); hints->x = cvtINT32toInt (prop->x); hints->y = cvtINT32toInt (prop->y); hints->width = cvtINT32toInt (prop->width); hints->height = cvtINT32toInt (prop->height); hints->min_width = cvtINT32toInt (prop->minWidth); hints->min_height = cvtINT32toInt (prop->minHeight); hints->max_width = cvtINT32toInt (prop->maxWidth); hints->max_height = cvtINT32toInt (prop->maxHeight); hints->width_inc = cvtINT32toInt (prop->widthInc); hints->height_inc = cvtINT32toInt (prop->heightInc); hints->min_aspect.x = cvtINT32toInt (prop->minAspectX); hints->min_aspect.y = cvtINT32toInt (prop->minAspectY); hints->max_aspect.x = cvtINT32toInt (prop->maxAspectX); hints->max_aspect.y = cvtINT32toInt (prop->maxAspectY); Xfree(prop); return(1); } /* * must return a pointer to the hint, in malloc'd memory, or routine is not * extensible; any use of the caller's memory would cause things to be stepped * on. */ XWMHints *XGetWMHints ( Display *dpy, Window w) { xPropWMHints *prop = NULL; register XWMHints *hints; Atom actual_type; int actual_format; unsigned long leftover; unsigned long nitems; if (XGetWindowProperty(dpy, w, XA_WM_HINTS, 0L, (long)NumPropWMHintsElements, False, XA_WM_HINTS, &actual_type, &actual_format, &nitems, &leftover, (unsigned char **)&prop) != Success) return (NULL); /* If the property is undefined on the window, return null pointer. */ /* pre-R3 bogusly truncated window_group, don't fail on them */ if ((actual_type != XA_WM_HINTS) || (nitems < (NumPropWMHintsElements - 1)) || (actual_format != 32)) { Xfree (prop); return(NULL); } /* static copies not allowed in library, due to reentrancy constraint*/ if ((hints = Xcalloc (1, sizeof(XWMHints)))) { hints->flags = prop->flags; hints->input = (prop->input ? True : False); hints->initial_state = cvtINT32toInt (prop->initialState); hints->icon_pixmap = prop->iconPixmap; hints->icon_window = prop->iconWindow; hints->icon_x = cvtINT32toInt (prop->iconX); hints->icon_y = cvtINT32toInt (prop->iconY); hints->icon_mask = prop->iconMask; if (nitems >= NumPropWMHintsElements) hints->window_group = prop->windowGroup; else hints->window_group = 0; } Xfree (prop); return(hints); } Status XGetZoomHints ( Display *dpy, Window w, XSizeHints *zhints) { return (XGetSizeHints(dpy, w, zhints, XA_WM_ZOOM_HINTS)); } Status XGetNormalHints ( Display *dpy, Window w, XSizeHints *hints) { return (XGetSizeHints(dpy, w, hints, XA_WM_NORMAL_HINTS)); } /* * XGetIconSizes reads the property * ICONSIZE_ATOM type: ICONSIZE_ATOM format: 32 */ Status XGetIconSizes ( Display *dpy, Window w, /* typically, root */ XIconSize **size_list, /* RETURN */ int *count) /* RETURN number of items on the list */ { xPropIconSize *prop = NULL; register xPropIconSize *pp; register XIconSize *hp, *hints; Atom actual_type; int actual_format; unsigned long leftover; unsigned long nitems; register int i; if (XGetWindowProperty(dpy, w, XA_WM_ICON_SIZE, 0L, 60L, False, XA_WM_ICON_SIZE, &actual_type, &actual_format, &nitems, &leftover, (unsigned char **)&prop) != Success) return (0); pp = prop; if ((actual_type != XA_WM_ICON_SIZE) || (nitems < NumPropIconSizeElements) || (nitems % NumPropIconSizeElements != 0) || (actual_format != 32)) { Xfree (prop); return(0); } /* static copies not allowed in library, due to reentrancy constraint*/ nitems /= NumPropIconSizeElements; if (! (hp = hints = Xcalloc (nitems, sizeof(XIconSize)))) { Xfree (prop); return 0; } /* march down array putting things into native form */ for (i = 0; i < nitems; i++) { hp->min_width = cvtINT32toInt (pp->minWidth); hp->min_height = cvtINT32toInt (pp->minHeight); hp->max_width = cvtINT32toInt (pp->maxWidth); hp->max_height = cvtINT32toInt (pp->maxHeight); hp->width_inc = cvtINT32toInt (pp->widthInc); hp->height_inc = cvtINT32toInt (pp->heightInc); hp += 1; pp += 1; } *count = nitems; *size_list = hints; Xfree (prop); return(1); } Status XGetCommand ( Display *dpy, Window w, char ***argvp, int *argcp) { XTextProperty tp; int argc; char **argv; if (!XGetTextProperty (dpy, w, &tp, XA_WM_COMMAND)) return 0; if (tp.encoding != XA_STRING || tp.format != 8) { Xfree (tp.value); return 0; } /* * ignore final if present since UNIX WM_COMMAND is nul-terminated */ if (tp.nitems && (tp.value[tp.nitems - 1] == '\0')) tp.nitems--; /* * create a string list and return if successful */ if (!XTextPropertyToStringList (&tp, &argv, &argc)) { Xfree (tp.value); return (0); } Xfree (tp.value); *argvp = argv; *argcp = argc; return 1; } Status XGetTransientForHint( Display *dpy, Window w, Window *propWindow) { Atom actual_type; int actual_format; unsigned long nitems; unsigned long leftover; Window *data = NULL; if (XGetWindowProperty(dpy, w, XA_WM_TRANSIENT_FOR, 0L, 1L, False, XA_WINDOW, &actual_type, &actual_format, &nitems, &leftover, (unsigned char **) &data) != Success) { *propWindow = None; return (0); } if ( (actual_type == XA_WINDOW) && (actual_format == 32) && (nitems != 0) ) { *propWindow = *data; Xfree( (char *) data); return (1); } *propWindow = None; Xfree( (char *) data); return(0); } Status XGetClassHint( Display *dpy, Window w, XClassHint *classhint) /* RETURN */ { int len_name, len_class; Atom actual_type; int actual_format; unsigned long nitems; unsigned long leftover; unsigned char *data = NULL; if (XGetWindowProperty(dpy, w, XA_WM_CLASS, 0L, (long)BUFSIZ, False, XA_STRING, &actual_type, &actual_format, &nitems, &leftover, &data) != Success) return (0); if ( (actual_type == XA_STRING) && (actual_format == 8) ) { len_name = strlen((char *) data); if (! (classhint->res_name = Xmalloc(len_name + 1))) { Xfree(data); return (0); } strcpy(classhint->res_name, (char *) data); if (len_name == nitems) len_name--; len_class = strlen((char *) (data+len_name+1)); if (! (classhint->res_class = Xmalloc(len_class + 1))) { Xfree(classhint->res_name); classhint->res_name = (char *) NULL; Xfree(data); return (0); } strcpy(classhint->res_class, (char *) (data+len_name+1)); Xfree( (char *) data); return(1); } Xfree( (char *) data); return(0); } libX11-1.6.3/src/SetPntMap.c000064401431060000012000000045511247741723500156710ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" /* returns either DeviceMappingSuccess or DeviceMappingBusy */ int XSetPointerMapping ( register Display *dpy, _Xconst unsigned char *map, int nmaps) { register xSetPointerMappingReq *req; xSetPointerMappingReply rep; LockDisplay(dpy); GetReq (SetPointerMapping, req); req->nElts = nmaps; req->length += (nmaps + 3)>>2; Data (dpy, (_Xconst char *)map, (long) nmaps); if (_XReply (dpy, (xReply *)&rep, 0, xFalse) == 0) rep.success = MappingSuccess; UnlockDisplay(dpy); SyncHandle(); return ((int) rep.success); } int XChangeKeyboardMapping ( register Display *dpy, int first_keycode, int keysyms_per_keycode, KeySym *keysyms, int nkeycodes) { register long nbytes; register xChangeKeyboardMappingReq *req; LockDisplay(dpy); GetReq (ChangeKeyboardMapping, req); req->firstKeyCode = first_keycode; req->keyCodes = nkeycodes; req->keySymsPerKeyCode = keysyms_per_keycode; req->length += nkeycodes * keysyms_per_keycode; nbytes = keysyms_per_keycode * nkeycodes * 4; Data32 (dpy, (long *)keysyms, nbytes); UnlockDisplay(dpy); SyncHandle(); return 0; } notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WlibX11-1.6.3/src/FontNames.c000064401431060000012000000063401247741723500157060ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include char ** XListFonts( register Display *dpy, _Xconst char *pattern, /* null-terminated */ int maxNames, int *actualCount) /* RETURN */ { register long nbytes; register unsigned i; register int length; char **flist = NULL; char *ch = NULL; char *chend; int count = 0; xListFontsReply rep; register xListFontsReq *req; unsigned long rlen; LockDisplay(dpy); GetReq(ListFonts, req); req->maxNames = maxNames; nbytes = req->nbytes = pattern ? strlen (pattern) : 0; req->length += (nbytes + 3) >> 2; _XSend (dpy, pattern, nbytes); /* use _XSend instead of Data, since following _XReply will flush buffer */ if (!_XReply (dpy, (xReply *)&rep, 0, xFalse)) { *actualCount = 0; UnlockDisplay(dpy); SyncHandle(); return (char **) NULL; } if (rep.nFonts) { flist = Xmalloc (rep.nFonts * sizeof(char *)); if (rep.length < (INT_MAX >> 2)) { rlen = rep.length << 2; ch = Xmalloc(rlen + 1); /* +1 to leave room for last null-terminator */ } if ((! flist) || (! ch)) { Xfree(flist); Xfree(ch); _XEatDataWords(dpy, rep.length); *actualCount = 0; UnlockDisplay(dpy); SyncHandle(); return (char **) NULL; } _XReadPad (dpy, ch, rlen); /* * unpack into null terminated strings. */ chend = ch + (rlen + 1); length = *(unsigned char *)ch; *ch = 1; /* make sure it is non-zero for XFreeFontNames */ for (i = 0; i < rep.nFonts; i++) { if (ch + length < chend) { flist[i] = ch + 1; /* skip over length */ ch += length + 1; /* find next length ... */ length = *(unsigned char *)ch; *ch = '\0'; /* and replace with null-termination */ count++; } else flist[i] = NULL; } } *actualCount = count; UnlockDisplay(dpy); SyncHandle(); return (flist); } int XFreeFontNames(char **list) { if (list) { if (!*(list[0]-1)) { /* from ListFontsWithInfo */ register char **names; for (names = list+1; *names; names++) Xfree (*names); } Xfree (list[0]-1); Xfree (list); } return 1; } libX11-1.6.3/src/DrLines.c000064401431060000012000000034031247741723500153510ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XDrawLines ( register Display *dpy, Drawable d, GC gc, XPoint *points, int npoints, int mode) { register xPolyLineReq *req; register long length; LockDisplay(dpy); FlushGC(dpy, gc); GetReq (PolyLine, req); req->drawable = d; req->gc = gc->gid; req->coordMode = mode; SetReqLen(req, npoints, 65535 - req->length); /* each point is 2 16-bit integers */ length = npoints << 2; /* watch out for macros... */ Data16 (dpy, (short *) points, length); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/ParseCmd.c000064401431060000012000000155641247741723500155220ustar00alancstaff00002660200006 /*********************************************************** Copyright 1987, 1988, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* XrmParseCommand() Parse command line and store argument values into resource database Allows any un-ambiguous abbreviation for an option name, but requires that the table be ordered with any options that are prefixes of other options appearing before the longer version in the table. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include #include static void _XReportParseError(XrmOptionDescRec *arg, const char *msg) { (void) fprintf(stderr, "Error parsing argument \"%s\" (%s); %s\n", arg->option, arg->specifier, msg); exit(1); } void XrmParseCommand( XrmDatabase *pdb, /* data base */ register XrmOptionDescList options, /* pointer to table of valid options */ int num_options, /* number of options */ _Xconst char *prefix, /* name to prefix resources with */ int *argc, /* address of argument count */ char **argv) /* argument list (command line) */ { int foundOption; char **argsave; register int i, myargc; XrmBinding bindings[100]; XrmQuark quarks[100]; XrmBinding *start_bindings; XrmQuark *start_quarks; char *optP, *argP = NULL, optchar, argchar = 0; int matches; enum {DontCare, Check, NotSorted, Sorted} table_is_sorted; char **argend; #define PutCommandResource(value_str) \ { \ XrmStringToBindingQuarkList( \ options[i].specifier, start_bindings, start_quarks); \ XrmQPutStringResource(pdb, bindings, quarks, value_str); \ } /* PutCommandResource */ myargc = (*argc); argend = argv + myargc; argsave = ++argv; /* Initialize bindings/quark list with prefix (typically app name). */ quarks[0] = XrmStringToName(prefix); bindings[0] = XrmBindTightly; start_quarks = quarks+1; start_bindings = bindings+1; table_is_sorted = (myargc > 2) ? Check : DontCare; for (--myargc; myargc > 0; --myargc, ++argv) { foundOption = False; matches = 0; for (i=0; i < num_options; ++i) { /* checking the sort order first insures we don't have to re-do the check if the arg hits on the last entry in the table. Useful because usually '=' is the last entry and users frequently specify geometry early in the command */ if (table_is_sorted == Check && i > 0 && strcmp(options[i].option, options[i-1].option) < 0) { table_is_sorted = NotSorted; } for (argP = *argv, optP = options[i].option; (optchar = *optP++) && (argchar = *argP++) && argchar == optchar;); if (!optchar) { if (!*argP || options[i].argKind == XrmoptionStickyArg || options[i].argKind == XrmoptionIsArg) { /* give preference to exact matches, StickyArg and IsArg */ matches = 1; foundOption = i; break; } } else if (!argchar) { /* may be an abbreviation for this option */ matches++; foundOption = i; } else if (table_is_sorted == Sorted && optchar > argchar) { break; } if (table_is_sorted == Check && i > 0 && strcmp(options[i].option, options[i-1].option) < 0) { table_is_sorted = NotSorted; } } if (table_is_sorted == Check && i >= (num_options-1)) table_is_sorted = Sorted; if (matches == 1) { i = foundOption; switch (options[i].argKind){ case XrmoptionNoArg: --(*argc); PutCommandResource(options[i].value); break; case XrmoptionIsArg: --(*argc); PutCommandResource(*argv); break; case XrmoptionStickyArg: --(*argc); PutCommandResource(argP); break; case XrmoptionSepArg: if (myargc > 1) { ++argv; --myargc; --(*argc); --(*argc); PutCommandResource(*argv); } else (*argsave++) = (*argv); break; case XrmoptionResArg: if (myargc > 1) { ++argv; --myargc; --(*argc); --(*argc); XrmPutLineResource(pdb, *argv); } else (*argsave++) = (*argv); break; case XrmoptionSkipArg: if (myargc > 1) { --myargc; (*argsave++) = (*argv++); } (*argsave++) = (*argv); break; case XrmoptionSkipLine: for (; myargc > 0; myargc--) (*argsave++) = (*argv++); break; case XrmoptionSkipNArgs: { register int j = 1 + (long) options[i].value; if (j > myargc) j = myargc; for (; j > 0; j--) { (*argsave++) = (*argv++); myargc--; } argv--; /* went one too far before */ myargc++; } break; default: _XReportParseError (&options[i], "unknown kind"); break; } } else (*argsave++) = (*argv); /*compress arglist*/ } if (argsave < argend) (*argsave)=NULL; /* put NULL terminator on compressed argv */ } libX11-1.6.3/src/GetGeom.c000064401431060000012000000036361247741723500153500ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" Status XGetGeometry ( register Display *dpy, Drawable d, Window *root, /* RETURN */ int *x, int *y, /* RETURN */ unsigned int *width, unsigned int *height, unsigned int *borderWidth, unsigned int *depth) /* RETURN */ { xGetGeometryReply rep; register xResourceReq *req; LockDisplay(dpy); GetResReq(GetGeometry, d, req); if (!_XReply (dpy, (xReply *)&rep, 0, xTrue)) { UnlockDisplay(dpy); SyncHandle(); return (0); } *root = rep.root; *x = cvtINT16toInt (rep.x); *y = cvtINT16toInt (rep.y); *width = rep.width; *height = rep.height; *borderWidth = rep.borderWidth; *depth = rep.depth; UnlockDisplay(dpy); SyncHandle(); return (1); } libX11-1.6.3/src/KillCl.c000064401431060000012000000026111247741723500151630ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XKillClient( register Display *dpy, XID resource) { register xResourceReq *req; LockDisplay(dpy); GetResReq(KillClient, resource, req); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/StrKeysym.c000064401431060000012000000111661247741723500157700ustar00alancstaff00002660200006/* Copyright 1985, 1987, 1990, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include #include "Xlibint.h" #include #include #include "Xresinternal.h" #define NEEDKTABLE #include "ks_tables.h" #include "Key.h" #ifndef KEYSYMDB #ifndef XKEYSYMDB #define KEYSYMDB "/usr/lib/X11/XKeysymDB" #else #define KEYSYMDB XKEYSYMDB #endif #endif static Bool initialized; static XrmDatabase keysymdb; static XrmQuark Qkeysym[2]; XrmDatabase _XInitKeysymDB(void) { if (!initialized) { const char *dbname; XrmInitialize(); /* use and name of this env var is not part of the standard */ /* implementation-dependent feature */ dbname = getenv("XKEYSYMDB"); if (!dbname) dbname = KEYSYMDB; keysymdb = XrmGetFileDatabase(dbname); if (keysymdb) Qkeysym[0] = XrmStringToQuark("Keysym"); initialized = True; } return keysymdb; } KeySym XStringToKeysym(_Xconst char *s) { register int i, n; int h; register Signature sig = 0; register const char *p = s; register int c; register int idx; const unsigned char *entry; unsigned char sig1, sig2; KeySym val; while ((c = *p++)) sig = (sig << 1) + c; i = sig % KTABLESIZE; h = i + 1; sig1 = (sig >> 8) & 0xff; sig2 = sig & 0xff; n = KMAXHASH; while ((idx = hashString[i])) { entry = &_XkeyTable[idx]; if ((entry[0] == sig1) && (entry[1] == sig2) && !strcmp(s, (const char *)entry + 6)) { val = (entry[2] << 24) | (entry[3] << 16) | (entry[4] << 8) | entry[5]; if (!val) val = XK_VoidSymbol; return val; } if (!--n) break; i += h; if (i >= KTABLESIZE) i -= KTABLESIZE; } if (!initialized) (void)_XInitKeysymDB(); if (keysymdb) { XrmValue result; XrmRepresentation from_type; char c; XrmQuark names[2]; names[0] = _XrmInternalStringToQuark(s, p - s - 1, sig, False); names[1] = NULLQUARK; (void)XrmQGetResource(keysymdb, names, Qkeysym, &from_type, &result); if (result.addr && (result.size > 1)) { val = 0; for (i = 0; i < result.size - 1; i++) { c = ((char *)result.addr)[i]; if ('0' <= c && c <= '9') val = (val<<4)+c-'0'; else if ('a' <= c && c <= 'f') val = (val<<4)+c-'a'+10; else if ('A' <= c && c <= 'F') val = (val<<4)+c-'A'+10; else return NoSymbol; } return val; } } if (*s == 'U') { val = 0; for (p = &s[1]; *p; p++) { c = *p; if ('0' <= c && c <= '9') val = (val<<4)+c-'0'; else if ('a' <= c && c <= 'f') val = (val<<4)+c-'a'+10; else if ('A' <= c && c <= 'F') val = (val<<4)+c-'A'+10; else return NoSymbol; if (val > 0x10ffff) return NoSymbol; } if (val < 0x20 || (val > 0x7e && val < 0xa0)) return NoSymbol; if (val < 0x100) return val; return val | 0x01000000; } if (strlen(s) > 2 && s[0] == '0' && s[1] == 'x') { char *tmp = NULL; val = strtoul(s, &tmp, 16); if (val == ULONG_MAX || (tmp && *tmp != '\0')) return NoSymbol; else return val; } /* Stupid inconsistency between the headers and XKeysymDB: the former has * no separating underscore, while some XF86* syms in the latter did. * As a last ditch effort, try without. */ if (strncmp(s, "XF86_", 5) == 0) { KeySym ret; char *tmp = strdup(s); if (!tmp) return NoSymbol; memmove(&tmp[4], &tmp[5], strlen(s) - 5 + 1); ret = XStringToKeysym(tmp); free(tmp); return ret; } return NoSymbol; } libX11-1.6.3/src/GrButton.c000064401431060000012000000036401247741723500155600ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XGrabButton( register Display *dpy, unsigned int button, /* CARD8 */ unsigned int modifiers, /* CARD16 */ Window grab_window, Bool owner_events, unsigned int event_mask, /* CARD16 */ int pointer_mode, int keyboard_mode, Window confine_to, Cursor curs) { register xGrabButtonReq *req; LockDisplay(dpy); GetReq(GrabButton, req); req->modifiers = modifiers; req->button = button; req->grabWindow = grab_window; req->ownerEvents = owner_events; req->eventMask = event_mask; req->pointerMode = pointer_mode; req->keyboardMode = keyboard_mode; req->confineTo = confine_to; req->cursor = curs; UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/StNColor.c000064401431060000012000000047411247741723500155220ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include #include "Xlibint.h" #include "Xcmsint.h" int XStoreNamedColor( register Display *dpy, Colormap cmap, _Xconst char *name, /* STRING8 */ unsigned long pixel, /* CARD32 */ int flags) /* DoRed, DoGreen, DoBlue */ { unsigned int nbytes; register xStoreNamedColorReq *req; XcmsCCC ccc; XcmsColor cmsColor_exact; XColor scr_def; #ifdef XCMS /* * Let's Attempt to use Xcms approach to Parse Color */ if ((ccc = XcmsCCCOfColormap(dpy, cmap)) != (XcmsCCC)NULL) { if (_XcmsResolveColorString(ccc, &name, &cmsColor_exact, XcmsRGBFormat) >= XcmsSuccess) { _XcmsRGB_to_XColor(&cmsColor_exact, &scr_def, 1); scr_def.pixel = pixel; scr_def.flags = flags; return XStoreColor(dpy, cmap, &scr_def); } /* * Otherwise we failed; or name was changed with yet another * name. Thus pass name to the X Server. */ } #endif /* * The Xcms and i18n methods failed, so lets pass it to the server * for parsing. */ LockDisplay(dpy); GetReq(StoreNamedColor, req); req->cmap = cmap; req->flags = flags; req->pixel = pixel; req->nbytes = nbytes = strlen(name); req->length += (nbytes + 3) >> 2; /* round up to multiple of 4 */ Data(dpy, name, (long)nbytes); UnlockDisplay(dpy); SyncHandle(); return 0; } libX11-1.6.3/src/SetTile.c000064401431060000012000000027601247741723500153670ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XSetTile ( register Display *dpy, GC gc, Pixmap tile) { LockDisplay(dpy); /* always update, since client may have changed pixmap contents */ gc->values.tile = tile; gc->dirty |= GCTile; _XFlushGCCache(dpy, gc); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/DrLine.c000064401431060000012000000046731247741723500152000ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" /* precompute the maximum size of batching request allowed */ #define wsize (SIZEOF(xPolySegmentReq) + WLNSPERBATCH * SIZEOF(xSegment)) #define zsize (SIZEOF(xPolySegmentReq) + ZLNSPERBATCH * SIZEOF(xSegment)) int XDrawLine ( register Display *dpy, Drawable d, GC gc, int x1, int y1, int x2, int y2) { register xSegment *segment; LockDisplay(dpy); FlushGC(dpy, gc); { register xPolySegmentReq *req = (xPolySegmentReq *) dpy->last_req; /* if same as previous request, with same drawable, batch requests */ if ( (req->reqType == X_PolySegment) && (req->drawable == d) && (req->gc == gc->gid) && ((dpy->bufptr + SIZEOF(xSegment)) <= dpy->bufmax) && (((char *)dpy->bufptr - (char *)req) < (gc->values.line_width ? wsize : zsize)) ) { req->length += SIZEOF(xSegment) >> 2; segment = (xSegment *) dpy->bufptr; dpy->bufptr += SIZEOF(xSegment); } else { GetReqExtra (PolySegment, SIZEOF(xSegment), req); req->drawable = d; req->gc = gc->gid; segment = (xSegment *) NEXTPTR(req,xPolySegmentReq); } segment->x1 = x1; segment->y1 = y1; segment->x2 = x2; segment->y2 = y2; UnlockDisplay(dpy); SyncHandle(); } return 1; } libX11-1.6.3/src/FetchName.c000064401431060000012000000053101247741723500156420ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include Status XFetchName ( register Display *dpy, Window w, char **name) { Atom actual_type; int actual_format; unsigned long nitems; unsigned long leftover; unsigned char *data = NULL; if (XGetWindowProperty(dpy, w, XA_WM_NAME, 0L, (long)BUFSIZ, False, XA_STRING, &actual_type, &actual_format, &nitems, &leftover, &data) != Success) { *name = NULL; return (0); } if ( (actual_type == XA_STRING) && (actual_format == 8) ) { /* The data returned by XGetWindowProperty is guarranteed to contain one extra byte that is null terminated to make retrieveing string properties easy. */ *name = (char *)data; return(1); } Xfree (data); *name = NULL; return(0); } Status XGetIconName ( register Display *dpy, Window w, char **icon_name) { Atom actual_type; int actual_format; unsigned long nitems; unsigned long leftover; unsigned char *data = NULL; if (XGetWindowProperty(dpy, w, XA_WM_ICON_NAME, 0L, (long)BUFSIZ, False, XA_STRING, &actual_type, &actual_format, &nitems, &leftover, &data) != Success) { *icon_name = NULL; return (0); } if ( (actual_type == XA_STRING) && (actual_format == 8) ) { /* The data returned by XGetWindowProperty is guarranteed to contain one extra byte that is null terminated to make retrieveing string properties easy. */ *icon_name = (char*)data; return(1); } Xfree (data); *icon_name = NULL; return(0); } libX11-1.6.3/src/LockDis.c000064401431060000012000000046011247741723500153420ustar00alancstaff00002660200006 /* Copyright 1993, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ /* * Author: Stephen Gildea, MIT X Consortium * * XLockDis.c - multi-thread application-level locking routines */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #ifdef XTHREADS #include "locking.h" #endif void XLockDisplay( register Display* dpy) { #ifdef XTHREADS LockDisplay(dpy); if (dpy->lock) (*dpy->lock->user_lock_display)(dpy); /* * We want the threads in the reply queue to all get out before * XLockDisplay returns, in case they have any side effects the * caller of XLockDisplay was trying to protect against. * XLockDisplay puts itself at the head of the event waiters queue * to wait for all the replies to come in. */ if (dpy->lock && dpy->lock->reply_awaiters) { struct _XCVList *cvl; cvl = (*dpy->lock->create_cvl)(dpy); /* stuff ourselves on the head of the queue */ cvl->next = dpy->lock->event_awaiters; dpy->lock->event_awaiters = cvl; while (dpy->lock->reply_awaiters) ConditionWait(dpy, cvl->cv); UnlockNextEventReader(dpy); /* pass the signal on */ } UnlockDisplay(dpy); #endif } void XUnlockDisplay( register Display* dpy) { #ifdef XTHREADS LockDisplay(dpy); if (dpy->lock) (*dpy->lock->user_unlock_display)(dpy); UnlockDisplay(dpy); #endif } libX11-1.6.3/src/InitExt.c000064401431060000012000000263261247741723500154060ustar00alancstaff00002660200006/* Copyright 1987, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include /* * This routine is used to link a extension in so it will be called * at appropriate times. */ XExtCodes *XInitExtension ( Display *dpy, _Xconst char *name) { XExtCodes codes; /* temp. place for extension information. */ register _XExtension *ext;/* need a place to build it all */ if (!XQueryExtension(dpy, name, &codes.major_opcode, &codes.first_event, &codes.first_error)) return (NULL); LockDisplay (dpy); if (! (ext = Xcalloc (1, sizeof (_XExtension))) || ! (ext->name = strdup(name))) { Xfree(ext); UnlockDisplay(dpy); return (XExtCodes *) NULL; } codes.extension = dpy->ext_number++; ext->codes = codes; /* chain it onto the display list */ ext->next = dpy->ext_procs; dpy->ext_procs = ext; UnlockDisplay (dpy); return (&ext->codes); /* tell him which extension */ } XExtCodes *XAddExtension (Display *dpy) { register _XExtension *ext; LockDisplay (dpy); if (! (ext = Xcalloc (1, sizeof (_XExtension)))) { UnlockDisplay(dpy); return (XExtCodes *) NULL; } ext->codes.extension = dpy->ext_number++; /* chain it onto the display list */ ext->next = dpy->ext_procs; dpy->ext_procs = ext; UnlockDisplay (dpy); return (&ext->codes); /* tell him which extension */ } static _XExtension *XLookupExtension ( register Display *dpy, /* display */ register int extension) /* extension number */ { register _XExtension *ext; for (ext = dpy->ext_procs; ext; ext = ext->next) if (ext->codes.extension == extension) return (ext); return (NULL); } XExtData **XEHeadOfExtensionList(XEDataObject object) { return *(XExtData ***)&object; } int XAddToExtensionList( XExtData **structure, XExtData *ext_data) { ext_data->next = *structure; *structure = ext_data; return 1; } XExtData *XFindOnExtensionList( XExtData **structure, int number) { XExtData *ext; ext = *structure; while (ext && (ext->number != number)) ext = ext->next; return ext; } /* * Routines to hang procs on the extension structure. */ CreateGCType XESetCreateGC( Display *dpy, /* display */ int extension, /* extension number */ CreateGCType proc) /* routine to call when GC created */ { register _XExtension *e; /* for lookup of extension */ register CreateGCType oldproc; if ((e = XLookupExtension (dpy, extension)) == NULL) return (NULL); LockDisplay(dpy); oldproc = e->create_GC; e->create_GC = proc; UnlockDisplay(dpy); return (CreateGCType)oldproc; } CopyGCType XESetCopyGC( Display *dpy, /* display */ int extension, /* extension number */ CopyGCType proc) /* routine to call when GC copied */ { register _XExtension *e; /* for lookup of extension */ register CopyGCType oldproc; if ((e = XLookupExtension (dpy, extension)) == NULL) return (NULL); LockDisplay(dpy); oldproc = e->copy_GC; e->copy_GC = proc; UnlockDisplay(dpy); return (CopyGCType)oldproc; } FlushGCType XESetFlushGC( Display *dpy, /* display */ int extension, /* extension number */ FlushGCType proc) /* routine to call when GC copied */ { register _XExtension *e; /* for lookup of extension */ register FlushGCType oldproc; if ((e = XLookupExtension (dpy, extension)) == NULL) return (NULL); LockDisplay(dpy); oldproc = e->flush_GC; e->flush_GC = proc; UnlockDisplay(dpy); return (FlushGCType)oldproc; } FreeGCType XESetFreeGC( Display *dpy, /* display */ int extension, /* extension number */ FreeGCType proc) /* routine to call when GC freed */ { register _XExtension *e; /* for lookup of extension */ register FreeGCType oldproc; if ((e = XLookupExtension (dpy, extension)) == NULL) return (NULL); LockDisplay(dpy); oldproc = e->free_GC; e->free_GC = proc; UnlockDisplay(dpy); return (FreeGCType)oldproc; } CreateFontType XESetCreateFont( Display *dpy, /* display */ int extension, /* extension number */ CreateFontType proc) /* routine to call when font created */ { register _XExtension *e; /* for lookup of extension */ register CreateFontType oldproc; if ((e = XLookupExtension (dpy, extension)) == NULL) return (NULL); LockDisplay(dpy); oldproc = e->create_Font; e->create_Font = proc; UnlockDisplay(dpy); return (CreateFontType)oldproc; } FreeFontType XESetFreeFont( Display *dpy, /* display */ int extension, /* extension number */ FreeFontType proc) /* routine to call when font freed */ { register _XExtension *e; /* for lookup of extension */ register FreeFontType oldproc; if ((e = XLookupExtension (dpy, extension)) == NULL) return (NULL); LockDisplay(dpy); oldproc = e->free_Font; e->free_Font = proc; UnlockDisplay(dpy); return (FreeFontType)oldproc; } CloseDisplayType XESetCloseDisplay( Display *dpy, /* display */ int extension, /* extension number */ CloseDisplayType proc) /* routine to call when display closed */ { register _XExtension *e; /* for lookup of extension */ register CloseDisplayType oldproc; if ((e = XLookupExtension (dpy, extension)) == NULL) return (NULL); LockDisplay(dpy); oldproc = e->close_display; e->close_display = proc; UnlockDisplay(dpy); return (CloseDisplayType)oldproc; } typedef Bool (*WireToEventType) ( Display* /* display */, XEvent* /* re */, xEvent* /* event */ ); WireToEventType XESetWireToEvent( Display *dpy, /* display */ int event_number, /* event routine to replace */ WireToEventType proc) /* routine to call when converting event */ { register WireToEventType oldproc; if (proc == NULL) proc = (WireToEventType)_XUnknownWireEvent; LockDisplay (dpy); oldproc = dpy->event_vec[event_number]; dpy->event_vec[event_number] = proc; UnlockDisplay (dpy); return (WireToEventType)oldproc; } typedef Bool (*WireToEventCookieType) ( Display* /* display */, XGenericEventCookie* /* re */, xEvent* /* event */ ); WireToEventCookieType XESetWireToEventCookie( Display *dpy, /* display */ int extension, /* extension major opcode */ WireToEventCookieType proc /* routine to call for generic events */ ) { WireToEventCookieType oldproc; if (proc == NULL) proc = (WireToEventCookieType)_XUnknownWireEventCookie; LockDisplay (dpy); oldproc = dpy->generic_event_vec[extension & 0x7F]; dpy->generic_event_vec[extension & 0x7F] = proc; UnlockDisplay (dpy); return (WireToEventCookieType)oldproc; } typedef Bool (*CopyEventCookieType) ( Display* /* display */, XGenericEventCookie* /* in */, XGenericEventCookie* /* out */ ); CopyEventCookieType XESetCopyEventCookie( Display *dpy, /* display */ int extension, /* extension major opcode */ CopyEventCookieType proc /* routine to copy generic events */ ) { CopyEventCookieType oldproc; if (proc == NULL) proc = (CopyEventCookieType)_XUnknownCopyEventCookie; LockDisplay (dpy); oldproc = dpy->generic_event_copy_vec[extension & 0x7F]; dpy->generic_event_copy_vec[extension & 0x7F] = proc; UnlockDisplay (dpy); return (CopyEventCookieType)oldproc; } typedef Status (*EventToWireType) ( Display* /* display */, XEvent* /* re */, xEvent* /* event */ ); EventToWireType XESetEventToWire( Display *dpy, /* display */ int event_number, /* event routine to replace */ EventToWireType proc) /* routine to call when converting event */ { register EventToWireType oldproc; if (proc == NULL) proc = (EventToWireType) _XUnknownNativeEvent; LockDisplay (dpy); oldproc = dpy->wire_vec[event_number]; dpy->wire_vec[event_number] = proc; UnlockDisplay(dpy); return (EventToWireType)oldproc; } typedef Bool (*WireToErrorType) ( Display* /* display */, XErrorEvent* /* he */, xError* /* we */ ); WireToErrorType XESetWireToError( Display *dpy, /* display */ int error_number, /* error routine to replace */ WireToErrorType proc) /* routine to call when converting error */ { register WireToErrorType oldproc = NULL; if (proc == NULL) proc = (WireToErrorType)_XDefaultWireError; LockDisplay (dpy); if (!dpy->error_vec) { int i; dpy->error_vec = Xmalloc(256 * sizeof(oldproc)); for (i = 1; i < 256; i++) dpy->error_vec[i] = _XDefaultWireError; } if (dpy->error_vec) { oldproc = dpy->error_vec[error_number]; dpy->error_vec[error_number] = proc; } UnlockDisplay (dpy); return (WireToErrorType)oldproc; } ErrorType XESetError( Display *dpy, /* display */ int extension, /* extension number */ ErrorType proc) /* routine to call when X error happens */ { register _XExtension *e; /* for lookup of extension */ register ErrorType oldproc; if ((e = XLookupExtension (dpy, extension)) == NULL) return (NULL); LockDisplay(dpy); oldproc = e->error; e->error = proc; UnlockDisplay(dpy); return (ErrorType)oldproc; } ErrorStringType XESetErrorString( Display *dpy, /* display */ int extension, /* extension number */ ErrorStringType proc) /* routine to call when I/O error happens */ { register _XExtension *e; /* for lookup of extension */ register ErrorStringType oldproc; if ((e = XLookupExtension (dpy, extension)) == NULL) return (NULL); LockDisplay(dpy); oldproc = e->error_string; e->error_string = proc; UnlockDisplay(dpy); return (ErrorStringType)oldproc; } PrintErrorType XESetPrintErrorValues( Display *dpy, /* display */ int extension, /* extension number */ PrintErrorType proc) /* routine to call to print */ { register _XExtension *e; /* for lookup of extension */ register PrintErrorType oldproc; if ((e = XLookupExtension (dpy, extension)) == NULL) return (NULL); LockDisplay(dpy); oldproc = e->error_values; e->error_values = proc; UnlockDisplay(dpy); return (PrintErrorType)oldproc; } BeforeFlushType XESetBeforeFlush( Display *dpy, /* display */ int extension, /* extension number */ BeforeFlushType proc) /* routine to call on flush */ { register _XExtension *e; /* for lookup of extension */ register BeforeFlushType oldproc; register _XExtension *ext; if ((e = XLookupExtension (dpy, extension)) == NULL) return (NULL); LockDisplay(dpy); oldproc = e->before_flush; e->before_flush = proc; for (ext = dpy->flushes; ext && ext != e; ext = ext->next) ; if (!ext) { e->next_flush = dpy->flushes; dpy->flushes = e; } UnlockDisplay(dpy); return (BeforeFlushType)oldproc; } extension structure. */ CreateGCType XESetCreateGC( Display *dpy, /* display */ int extension, /* extension number */ CreateGCType proc) /* routine to call when GC created */ { register _XExtension *e; /* for lookup of extension */ register CreateGCType oldproc; if ((e = XLookupExtension libX11-1.6.3/src/FreeCurs.c000064401431060000012000000026311247741723500155310ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XFreeCursor( register Display *dpy, Cursor cursor) { register xResourceReq *req; LockDisplay(dpy); GetResReq(FreeCursor, cursor, req); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/GetIFocus.c000064401431060000012000000030601247741723500156400ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XGetInputFocus( register Display *dpy, Window *focus, int *revert_to) { xGetInputFocusReply rep; register xReq *req; LockDisplay(dpy); GetEmptyReq(GetInputFocus, req); (void) _XReply (dpy, (xReply *)&rep, 0, xTrue); *focus = rep.focus; *revert_to = rep.revertTo; UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/Xresinternal.h000064401431060000012000000006251247741723500164770ustar00alancstaff00002660200006 #ifndef _XRESINTERNAL_H_ #define _XRESINTERNAL_H_ #include #include #include /* type defines */ typedef uint32_t Signature; /* prototypes */ extern XrmQuark _XrmInternalStringToQuark( register _Xconst char *name, register int len, register Signature sig, Bool permstring); #endif /* _XRESOURCEINTERNAL_H_ */ /* DON'T ADD STUFF AFTER THIS #endif */ libX11-1.6.3/src/Xintatom.h000064401431060000012000000011021247741723500156130ustar00alancstaff00002660200006 #ifndef _XINTATOM_H_ #define _XINTATOM_H_ 1 #include #include /* IntAtom.c */ #define TABLESIZE 64 typedef struct _Entry { unsigned long sig; Atom atom; } EntryRec, *Entry; #define RESERVED ((Entry) 1) #define EntryName(e) ((char *)(e+1)) typedef struct _XDisplayAtoms { Entry table[TABLESIZE]; } AtomTable; _XFUNCPROTOBEGIN extern void _XUpdateAtomCache(Display *dpy, const char *name, Atom atom, unsigned long sig, int idx, int n); extern void _XFreeAtomTable(Display *dpy); _XFUNCPROTOEND #endif /* _XINTATOM_H_ */ > #include /* IntAtom.c */ #define TABLESIZE 64 typedef struct _Entry { unsigned long sig; Atom atom; } EntryRec, *Entry; #define RESERVED ((Entry) 1) #define EntryName(e) ((char *)(e+1)) typedef struct _XDisplayAtoms { Entry table[TABLESIZE]; } AtomTable; _XFUNCPROTOBEGIN extern void _XUpdateAtomCache(Display *dpy, const char *name, Atom atom, unsigned long sig, int idx, int n); extern void _XFreeAtlibX11-1.6.3/src/Misc.c000064401431060000012000000034251247741723500147100ustar00alancstaff00002660200006/* Copyright 1988, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" long XMaxRequestSize(Display *dpy) { return dpy->max_request_size; } char *XResourceManagerString(Display *dpy) { return dpy->xdefaults; } unsigned long XDisplayMotionBufferSize(Display *dpy) { return dpy->motion_buffer; } int XDisplayKeycodes( Display *dpy, int *min_keycode_return, int *max_keycode_return) { *min_keycode_return = dpy->min_keycode; *max_keycode_return = dpy->max_keycode; return 1; } VisualID XVisualIDFromVisual(Visual *visual) { return visual->visualid; } long XExtendedMaxRequestSize(Display *dpy) { return dpy->bigreq_size; } libX11-1.6.3/src/KeysymStr.c000064401431060000012000000073041247741723500157670ustar00alancstaff00002660200006 /* Copyright 1990, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include #include #include "Xresinternal.h" #include /* sprintf */ #define NEEDVTABLE #include "ks_tables.h" #include "Key.h" typedef struct _GRNData { char *name; XrmRepresentation type; XrmValuePtr value; } GRNData; /*ARGSUSED*/ static Bool SameValue( XrmDatabase* db, XrmBindingList bindings, XrmQuarkList quarks, XrmRepresentation* type, XrmValuePtr value, XPointer data ) { GRNData *gd = (GRNData *)data; if ((*type == gd->type) && (value->size == gd->value->size) && !strncmp((char *)value->addr, (char *)gd->value->addr, value->size)) { gd->name = XrmQuarkToString(*quarks); /* XXX */ return True; } return False; } char *XKeysymToString(KeySym ks) { XrmDatabase keysymdb; if (!ks || (ks & ((unsigned long) ~0x1fffffff)) != 0) return ((char *)NULL); if (ks == XK_VoidSymbol) ks = 0; if (ks <= 0x1fffffff) { unsigned char val1 = ks >> 24; unsigned char val2 = (ks >> 16) & 0xff; unsigned char val3 = (ks >> 8) & 0xff; unsigned char val4 = ks & 0xff; int i = ks % VTABLESIZE; int h = i + 1; int n = VMAXHASH; int idx; while ((idx = hashKeysym[i])) { const unsigned char *entry = &_XkeyTable[idx]; if ((entry[0] == val1) && (entry[1] == val2) && (entry[2] == val3) && (entry[3] == val4)) return ((char *)entry + 4); if (!--n) break; i += h; if (i >= VTABLESIZE) i -= VTABLESIZE; } } if ((keysymdb = _XInitKeysymDB())) { char buf[9]; XrmValue resval; XrmQuark empty = NULLQUARK; GRNData data; snprintf(buf, sizeof(buf), "%lX", ks); resval.addr = (XPointer)buf; resval.size = strlen(buf) + 1; data.name = (char *)NULL; data.type = XrmPermStringToQuark("String"); data.value = &resval; (void)XrmEnumerateDatabase(keysymdb, &empty, &empty, XrmEnumAllLevels, SameValue, (XPointer)&data); if (data.name) return data.name; } if (ks >= 0x01000100 && ks <= 0x0110ffff) { KeySym val = ks & 0xffffff; char *s; int i; if (val & 0xff0000) i = 10; else i = 6; s = Xmalloc(i); if (s == NULL) return s; i--; s[i--] = '\0'; for (; i; i--){ unsigned char val1 = val & 0xf; val >>= 4; if (val1 < 10) s[i] = '0'+ val1; else s[i] = 'A'+ val1 - 10; } s[i] = 'U'; return s; } return ((char *) NULL); } libX11-1.6.3/src/ConfWind.c000064401431060000012000000033321247741723500155210ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XMoveResizeWindow( register Display *dpy, Window w, int x, int y, unsigned int width, unsigned int height) { register xConfigureWindowReq *req; LockDisplay(dpy); GetReqExtra(ConfigureWindow, 16, req); req->window = w; req->mask = CWX | CWY | CWWidth | CWHeight; { register CARD32 *valuePtr = (CARD32 *) NEXTPTR(req,xConfigureWindowReq); *valuePtr++ = x; *valuePtr++ = y; *valuePtr++ = width; *valuePtr = height; } UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/SetSSaver.c000064401431060000012000000031301247741723500156650ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XSetScreenSaver( register Display *dpy, int timeout, int interval, int prefer_blank, int allow_exp) { register xSetScreenSaverReq *req; LockDisplay(dpy); GetReq(SetScreenSaver, req); req->timeout = timeout; req->interval = interval; req->preferBlank = prefer_blank; req->allowExpose = allow_exp; UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/SetFont.c000064401431060000012000000027161247741723500154010ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XSetFont ( register Display *dpy, GC gc, Font font) { LockDisplay(dpy); if (gc->values.font != font) { gc->values.font = font; gc->dirty |= GCFont; _XFlushGCCache(dpy, gc); } UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/GrServer.c000064401431060000012000000025511247741723500155530ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XGrabServer (register Display *dpy) { register xReq *req; LockDisplay(dpy); GetEmptyReq(GrabServer, req); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/StColors.c000064401431060000012000000036661247741723500155740ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XStoreColors( register Display *dpy, Colormap cmap, XColor *defs, int ncolors) { register int i; xColorItem citem; register xStoreColorsReq *req; LockDisplay(dpy); GetReq(StoreColors, req); req->cmap = cmap; req->length += (ncolors * SIZEOF(xColorItem)) >> 2; /* assume size is 4*n */ for (i = 0; i < ncolors; i++) { citem.pixel = defs[i].pixel; citem.red = defs[i].red; citem.green = defs[i].green; citem.blue = defs[i].blue; citem.flags = defs[i].flags; /* note that xColorItem doesn't contain all 16-bit quantities, so we can't use Data16 */ Data(dpy, (char *)&citem, (long) SIZEOF(xColorItem)); /* assume size is 4*n */ } UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/ImText16.c000064401431060000012000000052161247741723500153760ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XDrawImageString16( register Display *dpy, Drawable d, GC gc, int x, int y, _Xconst XChar2b *string, int length) { register xImageText16Req *req; XChar2b *CharacterOffset = (XChar2b *)string; int FirstTimeThrough = True; int lastX = 0; LockDisplay(dpy); FlushGC(dpy, gc); while (length > 0) { int Unit, Datalength; if (length > 255) Unit = 255; else Unit = length; if (FirstTimeThrough) { FirstTimeThrough = False; } else { char buf[512]; xQueryTextExtentsReq *qreq; xQueryTextExtentsReply rep; unsigned char *ptr; XChar2b *str; int i; GetReq(QueryTextExtents, qreq); qreq->fid = gc->gid; qreq->length += (510 + 3)>>2; qreq->oddLength = 1; str = CharacterOffset - 255; for (ptr = (unsigned char *)buf, i = 255; --i >= 0; str++) { *ptr++ = str->byte1; *ptr++ = str->byte2; } Data (dpy, buf, 510); if (!_XReply (dpy, (xReply *)&rep, 0, xTrue)) break; x = lastX + cvtINT32toInt (rep.overallWidth); } GetReq (ImageText16, req); req->length += ((Unit << 1) + 3) >> 2; req->nChars = Unit; req->drawable = d; req->gc = gc->gid; req->y = y; lastX = req->x = x; Datalength = Unit << 1; Data (dpy, (char *)CharacterOffset, (long)Datalength); CharacterOffset += Unit; length -= Unit; } UnlockDisplay(dpy); SyncHandle(); return 0; } libX11-1.6.3/src/Bell.c000064401431060000012000000026301247741723500146700ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XBell( register Display *dpy, int percent) { register xBellReq *req; LockDisplay(dpy); GetReq(Bell,req); req->percent = percent; UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/OCWrap.c000064401431060000012000000057711247741723500151560ustar00alancstaff00002660200006/* * Copyright 1992, 1993 by TOSHIBA Corp. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of TOSHIBA not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. TOSHIBA make no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * * Author: Katsuhisa Yano TOSHIBA Corp. * mopi@osa.ilab.toshiba.co.jp */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xlcint.h" XOC XCreateOC(XOM om, ...) { va_list var; XlcArgList args; XOC oc; int num_args; va_start(var, om); _XlcCountVaList(var, &num_args); va_end(var); va_start(var, om); _XlcVaToArgList(var, num_args, &args); va_end(var); if (args == (XlcArgList) NULL) return (XOC) NULL; oc = (*om->methods->create_oc)(om, args, num_args); Xfree(args); if (oc) { oc->core.next = om->core.oc_list; om->core.oc_list = oc; } return oc; } void XDestroyOC(XOC oc) { XOC prev, oc_list; prev = oc_list = oc->core.om->core.oc_list; if (oc_list == oc) oc->core.om->core.oc_list = oc_list->core.next; else { while ((oc_list = oc_list->core.next)) { if (oc_list == oc) { prev->core.next = oc_list->core.next; break; } prev = oc_list; } } (*oc->methods->destroy)(oc); } XOM XOMOfOC(XOC oc) { return oc->core.om; } char * XSetOCValues(XOC oc, ...) { va_list var; XlcArgList args; char *ret; int num_args; va_start(var, oc); _XlcCountVaList(var, &num_args); va_end(var); va_start(var, oc); _XlcVaToArgList(var, num_args, &args); va_end(var); if (args == (XlcArgList) NULL) return (char *) NULL; ret = (*oc->methods->set_values)(oc, args, num_args); Xfree(args); return ret; } char * XGetOCValues(XOC oc, ...) { va_list var; XlcArgList args; char *ret; int num_args; va_start(var, oc); _XlcCountVaList(var, &num_args); va_end(var); va_start(var, oc); _XlcVaToArgList(var, num_args, &args); va_end(var); if (args == (XlcArgList) NULL) return (char *) NULL; ret = (*oc->methods->get_values)(oc, args, num_args); Xfree(args); return ret; } libX11-1.6.3/src/ChkMaskEv.c000064401431060000012000000054041247741723500156300ustar00alancstaff00002660200006/* Copyright 1985, 1987, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" extern long const _Xevent_to_mask[]; #define AllPointers (PointerMotionMask|PointerMotionHintMask|ButtonMotionMask) #define AllButtons (Button1MotionMask|Button2MotionMask|Button3MotionMask|\ Button4MotionMask|Button5MotionMask) /* * Check existing events in queue to find if any match. If so, return. * If not, flush buffer and see if any more events are readable. If one * matches, return. If all else fails, tell the user no events found. */ Bool XCheckMaskEvent ( register Display *dpy, long mask, /* Selected event mask. */ register XEvent *event) /* XEvent to be filled in. */ { register _XQEvent *prev, *qelt; unsigned long qe_serial = 0; int n; /* time through count */ LockDisplay(dpy); /* Delete unclaimed cookies */ _XFreeEventCookies(dpy); prev = NULL; for (n = 3; --n >= 0;) { for (qelt = prev ? prev->next : dpy->head; qelt; prev = qelt, qelt = qelt->next) { if ((qelt->event.type < GenericEvent) && (_Xevent_to_mask[qelt->event.type] & mask) && ((qelt->event.type != MotionNotify) || (mask & AllPointers) || (mask & AllButtons & qelt->event.xmotion.state))) { *event = qelt->event; _XDeq(dpy, prev, qelt); UnlockDisplay(dpy); return True; } } if (prev) qe_serial = prev->qserial_num; switch (n) { case 2: _XEventsQueued(dpy, QueuedAfterReading); break; case 1: _XFlush(dpy); break; } if (prev && prev->qserial_num != qe_serial) /* another thread has snatched this event */ prev = NULL; } UnlockDisplay(dpy); return False; } terMotionMask|PointerMotionHintMask|ButtonMotionMask) #define AllButtons (Button1MotionMask|Button2MotionMask|Button3MotionMask|\ Button4MotionMask|Button5MotionMask) /* * Check existing events in queue to find if any match. If so, return. * libX11-1.6.3/src/Text.c000064401431060000012000000074261247741723500147460ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XDrawString( register Display *dpy, Drawable d, GC gc, int x, int y, _Xconst char *string, int length) { int Datalength = 0; register xPolyText8Req *req; if (length <= 0) return 0; LockDisplay(dpy); FlushGC(dpy, gc); GetReq (PolyText8, req); req->drawable = d; req->gc = gc->gid; req->x = x; req->y = y; Datalength += SIZEOF(xTextElt) * ((length + 253) / 254) + length; req->length += (Datalength + 3)>>2; /* convert to number of 32-bit words */ /* * If the entire request does not fit into the remaining space in the * buffer, flush the buffer first. If the request does fit into the * empty buffer, then we won't have to flush it at the end to keep * the buffer 32-bit aligned. */ if (dpy->bufptr + Datalength > dpy->bufmax) _XFlush (dpy); { int nbytes; int PartialNChars = length; /* register xTextElt *elt; */ char *CharacterOffset = (char *)string; unsigned char *tbuf; while(PartialNChars > 254) { nbytes = 254 + SIZEOF(xTextElt); BufAlloc (unsigned char *, tbuf, nbytes); /* elt->delta = 0; * elt->len = 254; */ *(unsigned char *)tbuf = 254; *(tbuf+1) = 0; /* memcpy ((char *) (elt + 1), CharacterOffset, 254); */ memcpy ((char *)tbuf+2, CharacterOffset, 254); PartialNChars = PartialNChars - 254; CharacterOffset += 254; } if (PartialNChars) { nbytes = PartialNChars + SIZEOF(xTextElt); BufAlloc (unsigned char *, tbuf, nbytes); /* elt->delta = 0; * elt->len = PartialNChars; */ *(unsigned char *)tbuf = PartialNChars; *(tbuf+1) = 0; /* memcpy ((char *) (elt + 1), CharacterOffset, PartialNChars); */ memcpy ((char *)tbuf+2, CharacterOffset, PartialNChars); } } /* Pad request out to a 32-bit boundary */ if (Datalength &= 3) { char *pad; /* * BufAlloc is a macro that uses its last argument more than * once, otherwise I'd write "BufAlloc (char *, pad, 4-length)" */ length = 4 - Datalength; BufAlloc (char *, pad, length); /* * if there are 3 bytes of padding, the first byte MUST be 0 * so the pad bytes aren't mistaken for a final xTextElt */ *pad = 0; } /* * If the buffer pointer is not now pointing to a 32-bit boundary, * we must flush the buffer so that it does point to a 32-bit boundary * at the end of this routine. */ if ((dpy->bufptr - dpy->buffer) & 3) _XFlush (dpy); UnlockDisplay(dpy); SyncHandle(); return 0; } libX11-1.6.3/src/TrCoords.c000064401431060000012000000036171247741723500155570ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" Bool XTranslateCoordinates( register Display *dpy, Window src_win, Window dest_win, int src_x, int src_y, int *dst_x, int *dst_y, Window *child) { register xTranslateCoordsReq *req; xTranslateCoordsReply rep; LockDisplay(dpy); GetReq(TranslateCoords, req); req->srcWid = src_win; req->dstWid = dest_win; req->srcX = src_x; req->srcY = src_y; if (_XReply (dpy, (xReply *)&rep, 0, xTrue) == 0) { UnlockDisplay(dpy); SyncHandle(); return(False); } *child = rep.child; *dst_x = cvtINT16toInt (rep.dstX); *dst_y = cvtINT16toInt (rep.dstY); UnlockDisplay(dpy); SyncHandle(); return ((int)rep.sameScreen); } libX11-1.6.3/src/UngrabKbd.c000064401431060000012000000026321247741723500156530ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XUngrabKeyboard ( register Display *dpy, Time time) { register xResourceReq *req; LockDisplay(dpy); GetResReq(UngrabKeyboard, time, req); UnlockDisplay(dpy); SyncHandle(); return 1; } ed in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WlibX11-1.6.3/src/PropAlloc.c000064401431060000012000000034121247741723500157040ustar00alancstaff00002660200006/* Copyright 1989, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xutil.h" #include /* * Routines for allocating space for structures that are expected to get * longer at some point. */ XSizeHints *XAllocSizeHints (void) { return Xcalloc (1, sizeof (XSizeHints)); } XStandardColormap *XAllocStandardColormap (void) { return Xcalloc (1, sizeof (XStandardColormap)); } XWMHints *XAllocWMHints (void) { return Xcalloc (1, sizeof (XWMHints)); } XClassHint *XAllocClassHint (void) { return Xcalloc (1, sizeof (XClassHint)); } XIconSize *XAllocIconSize (void) { return Xcalloc (1, sizeof (XIconSize)); } libX11-1.6.3/src/FillPoly.c000064401431060000012000000034551247741723500155520ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XFillPolygon( register Display *dpy, Drawable d, GC gc, XPoint *points, int n_points, int shape, int mode) { register xFillPolyReq *req; register long nbytes; LockDisplay(dpy); FlushGC(dpy, gc); GetReq(FillPoly, req); req->drawable = d; req->gc = gc->gid; req->shape = shape; req->coordMode = mode; SetReqLen(req, n_points, 65535 - req->length); /* shift (mult. by 4) before passing to the (possible) macro */ nbytes = n_points << 2; Data16 (dpy, (short *) points, nbytes); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/Window.c000064401431060000012000000077131247741723500152700ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" void _XProcessWindowAttributes ( register Display *dpy, xChangeWindowAttributesReq *req, register unsigned long valuemask, register XSetWindowAttributes *attributes) { unsigned long values[32]; register unsigned long *value = values; unsigned int nvalues; if (valuemask & CWBackPixmap) *value++ = attributes->background_pixmap; if (valuemask & CWBackPixel) *value++ = attributes->background_pixel; if (valuemask & CWBorderPixmap) *value++ = attributes->border_pixmap; if (valuemask & CWBorderPixel) *value++ = attributes->border_pixel; if (valuemask & CWBitGravity) *value++ = attributes->bit_gravity; if (valuemask & CWWinGravity) *value++ = attributes->win_gravity; if (valuemask & CWBackingStore) *value++ = attributes->backing_store; if (valuemask & CWBackingPlanes) *value++ = attributes->backing_planes; if (valuemask & CWBackingPixel) *value++ = attributes->backing_pixel; if (valuemask & CWOverrideRedirect) *value++ = attributes->override_redirect; if (valuemask & CWSaveUnder) *value++ = attributes->save_under; if (valuemask & CWEventMask) *value++ = attributes->event_mask; if (valuemask & CWDontPropagate) *value++ = attributes->do_not_propagate_mask; if (valuemask & CWColormap) *value++ = attributes->colormap; if (valuemask & CWCursor) *value++ = attributes->cursor; req->length += (nvalues = value - values); nvalues <<= 2; /* watch out for macros... */ Data32 (dpy, (long *) values, (long)nvalues); } #define AllMaskBits (CWBackPixmap|CWBackPixel|CWBorderPixmap|\ CWBorderPixel|CWBitGravity|CWWinGravity|\ CWBackingStore|CWBackingPlanes|CWBackingPixel|\ CWOverrideRedirect|CWSaveUnder|CWEventMask|\ CWDontPropagate|CWColormap|CWCursor) Window XCreateWindow( register Display *dpy, Window parent, int x, int y, unsigned int width, unsigned int height, unsigned int borderWidth, int depth, unsigned int class, Visual *visual, unsigned long valuemask, XSetWindowAttributes *attributes) { Window wid; register xCreateWindowReq *req; LockDisplay(dpy); GetReq(CreateWindow, req); req->parent = parent; req->x = x; req->y = y; req->width = width; req->height = height; req->borderWidth = borderWidth; req->depth = depth; req->class = class; if (visual == CopyFromParent) req->visual = CopyFromParent; else req->visual = visual->visualid; wid = req->wid = XAllocID(dpy); valuemask &= AllMaskBits; if ((req->mask = valuemask)) _XProcessWindowAttributes (dpy, (xChangeWindowAttributesReq *)req, valuemask, attributes); UnlockDisplay(dpy); SyncHandle(); return (wid); } libX11-1.6.3/src/StColor.c000064401431060000012000000033651247741723500154050ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XStoreColor( register Display *dpy, Colormap cmap, XColor *def) { xColorItem *citem; register xStoreColorsReq *req; LockDisplay(dpy); GetReqExtra(StoreColors, SIZEOF(xColorItem), req); /* assume size is 4*n */ req->cmap = cmap; citem = (xColorItem *) NEXTPTR(req,xStoreColorsReq); citem->pixel = def->pixel; citem->red = def->red; citem->green = def->green; citem->blue = def->blue; citem->flags = def->flags; /* do_red, do_green, do_blue */ UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/Context.c000064401431060000012000000201051247741723500154330ustar00alancstaff00002660200006 /*********************************************************** Copyright 1987, 1988, 1990 by Digital Equipment Corporation, Maynard, All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1990, 1994, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ /* This module implements a simple sparse array. XSaveContext(a,b,c,d) will store d in position (a,b,c) of the array. XFindContext(a,b,c,&d) will set d to be the value in position (a,b,c). XDeleteContext(a,b,c) will delete the entry in (a,b,c). a is a display id, b is a resource id, and c is a Context. d is just an XPointer. This code will work with any range of parameters, but is geared to be most efficient with very few (one or two) different a's. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xutil.h" #ifdef XTHREADS #include "locking.h" #endif #define INITHASHMASK 63 /* Number of entries originally in the hash table. */ typedef struct _TableEntryRec { /* Stores one entry. */ XID rid; XContext context; XPointer data; struct _TableEntryRec *next; } TableEntryRec, *TableEntry; typedef struct _XContextDB { /* Stores hash table for one display. */ TableEntry *table; /* Pointer to array of hash entries. */ int mask; /* Current size of hash table minus 1. */ int numentries; /* Number of entries currently in table. */ #ifdef XTHREADS LockInfoRec linfo; #endif } DBRec, *DB; #ifdef MOTIFBC static DB NullDB = (DB)0; #endif /* Given an XID and a context, returns a value between 0 and HashSize-1. Currently, this requires that HashSize be a power of 2. */ #define Hash(db,rid,context) \ (db)->table[(((rid) << 1) + context) & (db)->mask] /* Resize the given db */ static void ResizeTable(DB db) { TableEntry *otable; register TableEntry entry, next, *pold, *head; register int i, j; otable = db->table; for (i = INITHASHMASK+1; (i + i) < db->numentries; ) i += i; db->table = Xcalloc(i, sizeof(TableEntry)); if (!db->table) { db->table = otable; return; } j = db->mask + 1; db->mask = i - 1; for (pold = otable ; --j >= 0; pold++) { for (entry = *pold; entry; entry = next) { next = entry->next; head = &Hash(db, entry->rid, entry->context); entry->next = *head; *head = entry; } } Xfree(otable); } static void _XFreeContextDB(Display *display) { register DB db; register int i; register TableEntry *pentry, entry, next; db = display->context_db; if (db) { for (i = db->mask + 1, pentry = db->table ; --i >= 0; pentry++) { for (entry = *pentry; entry; entry = next) { next = entry->next; Xfree(entry); } } Xfree(db->table); _XFreeMutex(&db->linfo); Xfree(db); } } /* Public routines. */ /* Save the given value of data to correspond with the keys XID and context. Returns nonzero error code if an error has occured, 0 otherwise. Possible errors are Out-of-memory. */ int XSaveContext( Display *display, register XID rid, register XContext context, _Xconst char* data) { DB *pdb; register DB db; TableEntry *head; register TableEntry entry; #ifdef MOTIFBC if (!display) { pdb = &NullDB; db = *pdb; } else #endif { LockDisplay(display); pdb = &display->context_db; db = *pdb; UnlockDisplay(display); } if (!db) { db = Xmalloc(sizeof(DBRec)); if (!db) return XCNOMEM; db->mask = INITHASHMASK; db->table = Xcalloc(db->mask + 1, sizeof(TableEntry)); if (!db->table) { Xfree(db); return XCNOMEM; } db->numentries = 0; _XCreateMutex(&db->linfo); #ifdef MOTIFBC if (!display) *pdb = db; else #endif { LockDisplay(display); *pdb = db; display->free_funcs->context_db = _XFreeContextDB; UnlockDisplay(display); } } _XLockMutex(&db->linfo); head = &Hash(db, rid, context); _XUnlockMutex(&db->linfo); for (entry = *head; entry; entry = entry->next) { if (entry->rid == rid && entry->context == context) { entry->data = (XPointer)data; return 0; } } entry = Xmalloc(sizeof(TableEntryRec)); if (!entry) return XCNOMEM; entry->rid = rid; entry->context = context; entry->data = (XPointer)data; entry->next = *head; *head = entry; _XLockMutex(&db->linfo); db->numentries++; if (db->numentries > (db->mask << 2)) ResizeTable(db); _XUnlockMutex(&db->linfo); return 0; } /* Given an XID and context, returns the associated data. Note that data here is a pointer since it is a return value. Returns nonzero error code if an error has occured, 0 otherwise. Possible errors are Entry-not-found. */ int XFindContext(Display *display, XID rid, XContext context, XPointer *data) { register DB db; register TableEntry entry; #ifdef MOTIFBC if (!display) db = NullDB; else #endif { LockDisplay(display); db = display->context_db; UnlockDisplay(display); } if (!db) return XCNOENT; _XLockMutex(&db->linfo); for (entry = Hash(db, rid, context); entry; entry = entry->next) { if (entry->rid == rid && entry->context == context) { *data = (XPointer)entry->data; _XUnlockMutex(&db->linfo); return 0; } } _XUnlockMutex(&db->linfo); return XCNOENT; } /* Deletes the entry for the given XID and context from the datastructure. This returns the same thing that FindContext would have returned if called with the same arguments. */ int XDeleteContext(Display *display, XID rid, XContext context) { register DB db; register TableEntry entry, *prev; #ifdef MOTIFBC if (!display) db = NullDB; else #endif { LockDisplay(display); db = display->context_db; UnlockDisplay(display); } if (!db) return XCNOENT; _XLockMutex(&db->linfo); for (prev = &Hash(db, rid, context); (entry = *prev); prev = &entry->next) { if (entry->rid == rid && entry->context == context) { *prev = entry->next; Xfree(entry); db->numentries--; if (db->numentries < db->mask && db->mask > INITHASHMASK) ResizeTable(db); _XUnlockMutex(&db->linfo); return 0; } } _XUnlockMutex(&db->linfo); return XCNOENT; } *************************************/ /* Copyright 1987, 1988, 1990, 1994, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permissilibX11-1.6.3/src/SetWMCMapW.c000064401431060000012000000053651247741723500157110ustar00alancstaff00002660200006 /*********************************************************** Copyright 1987, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include /* * XSetWMProtocols sets the property * WM_COLORMAP_WINDOWS type: WINDOW format:32 */ Status XSetWMColormapWindows ( Display *dpy, Window w, Window *windows, int count) { Atom prop; prop = XInternAtom (dpy, "WM_COLORMAP_WINDOWS", False); if (prop == None) return False; XChangeProperty (dpy, w, prop, XA_WINDOW, 32, PropModeReplace, (unsigned char *) windows, count); return True; } libX11-1.6.3/src/Cr.h000064401431060000012000000012401247741723500143570ustar00alancstaff00002660200006 #ifndef _CR_H_ #define _CR_H_ #include extern int _XUpdateGCCache( register GC gc, register unsigned long mask, register XGCValues *attr); extern void _XNoticeCreateBitmap( Display *dpy, Pixmap pid, unsigned int width, unsigned int height); extern void _XNoticePutBitmap( Display *dpy, Drawable draw, XImage *image); extern Cursor _XTryShapeBitmapCursor( Display *dpy, Pixmap source, Pixmap mask, XColor *foreground, XColor *background, unsigned int x, unsigned int y); #endif /* _CR_H_ */ libX11-1.6.3/src/xcb_io.c000064401431060000012000000547141247741723500152670ustar00alancstaff00002660200006/* Copyright (C) 2003-2006 Jamey Sharp, Josh Triplett * This file is licensed under the MIT license. See the file COPYING. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "locking.h" #include "Xprivate.h" #include "Xxcbint.h" #include #include #ifdef HAVE_INTTYPES_H #include #endif #include #include #include #include #include #ifdef HAVE_SYS_SELECT_H #include #endif #define xcb_fail_assert(_message, _var) { \ unsigned int _var = 1; \ fprintf(stderr, "[xcb] Aborting, sorry about that.\n"); \ assert(!_var); \ } #define throw_thread_fail_assert(_message, _var) { \ fprintf(stderr, "[xcb] " _message "\n"); \ fprintf(stderr, "[xcb] Most likely this is a multi-threaded client " \ "and XInitThreads has not been called\n"); \ xcb_fail_assert(_message, _var); \ } /* XXX: It would probably be most useful if we stored the last-processed * request, so we could find the offender from the message. */ #define throw_extlib_fail_assert(_message, _var) { \ fprintf(stderr, "[xcb] " _message "\n"); \ fprintf(stderr, "[xcb] This is most likely caused by a broken X " \ "extension library\n"); \ xcb_fail_assert(_message, _var); \ } static void return_socket(void *closure) { Display *dpy = closure; InternalLockDisplay(dpy, /* don't skip user locks */ 0); _XSend(dpy, NULL, 0); dpy->bufmax = dpy->buffer; UnlockDisplay(dpy); } static void require_socket(Display *dpy) { if(dpy->bufmax == dpy->buffer) { uint64_t sent; int flags = 0; /* if we don't own the event queue, we have to ask XCB * to set our errors aside for us. */ if(dpy->xcb->event_owner != XlibOwnsEventQueue) flags = XCB_REQUEST_CHECKED; if(!xcb_take_socket(dpy->xcb->connection, return_socket, dpy, flags, &sent)) _XIOError(dpy); /* Xlib uses unsigned long for sequence numbers. XCB * uses 64-bit internally, but currently exposes an * unsigned int API. If these differ, Xlib cannot track * the full 64-bit sequence number if 32-bit wrap * happens while Xlib does not own the socket. A * complete fix would be to make XCB's public API use * 64-bit sequence numbers. */ if (sizeof(unsigned long) > sizeof(unsigned int) && dpy->xcb->event_owner == XlibOwnsEventQueue && (sent - dpy->last_request_read >= (UINT64_C(1) << 32))) { throw_thread_fail_assert("Sequence number wrapped " "beyond 32 bits while Xlib " "did not own the socket", xcb_xlib_seq_number_wrapped); } dpy->xcb->last_flushed = dpy->request = sent; dpy->bufmax = dpy->xcb->real_bufmax; } } /* Call internal connection callbacks for any fds that are currently * ready to read. This function will not block unless one of the * callbacks blocks. * * This code borrowed from _XWaitForReadable. Inverse call tree: * _XRead * _XWaitForWritable * _XFlush * _XSend * _XEventsQueued * _XReadEvents * _XRead[0-9]+ * _XAllocIDs * _XReply * _XEatData * _XReadPad */ static void check_internal_connections(Display *dpy) { struct _XConnectionInfo *ilist; fd_set r_mask; struct timeval tv; int result; int highest_fd = -1; if(dpy->flags & XlibDisplayProcConni || !dpy->im_fd_info) return; FD_ZERO(&r_mask); for(ilist = dpy->im_fd_info; ilist; ilist = ilist->next) { assert(ilist->fd >= 0); FD_SET(ilist->fd, &r_mask); if(ilist->fd > highest_fd) highest_fd = ilist->fd; } assert(highest_fd >= 0); tv.tv_sec = 0; tv.tv_usec = 0; result = select(highest_fd + 1, &r_mask, NULL, NULL, &tv); if(result == -1) { if(errno == EINTR) return; _XIOError(dpy); } for(ilist = dpy->im_fd_info; result && ilist; ilist = ilist->next) if(FD_ISSET(ilist->fd, &r_mask)) { _XProcessInternalConnection(dpy, ilist); --result; } } static PendingRequest *append_pending_request(Display *dpy, unsigned long sequence) { PendingRequest *node = malloc(sizeof(PendingRequest)); assert(node); node->next = NULL; node->sequence = sequence; node->reply_waiter = 0; if(dpy->xcb->pending_requests_tail) { if (XLIB_SEQUENCE_COMPARE(dpy->xcb->pending_requests_tail->sequence, >=, node->sequence)) throw_thread_fail_assert("Unknown sequence number " "while appending request", xcb_xlib_unknown_seq_number); if (dpy->xcb->pending_requests_tail->next != NULL) throw_thread_fail_assert("Unknown request in queue " "while appending request", xcb_xlib_unknown_req_pending); dpy->xcb->pending_requests_tail->next = node; } else dpy->xcb->pending_requests = node; dpy->xcb->pending_requests_tail = node; return node; } static void dequeue_pending_request(Display *dpy, PendingRequest *req) { if (req != dpy->xcb->pending_requests) throw_thread_fail_assert("Unknown request in queue while " "dequeuing", xcb_xlib_unknown_req_in_deq); dpy->xcb->pending_requests = req->next; if(!dpy->xcb->pending_requests) { if (req != dpy->xcb->pending_requests_tail) throw_thread_fail_assert("Unknown request in queue " "while dequeuing", xcb_xlib_unknown_req_in_deq); dpy->xcb->pending_requests_tail = NULL; } else if (XLIB_SEQUENCE_COMPARE(req->sequence, >=, dpy->xcb->pending_requests->sequence)) throw_thread_fail_assert("Unknown sequence number while " "dequeuing request", xcb_xlib_threads_sequence_lost); free(req); } static int handle_error(Display *dpy, xError *err, Bool in_XReply) { _XExtension *ext; int ret_code; /* Oddly, Xlib only allows extensions to suppress errors when * those errors were seen by _XReply. */ if(in_XReply) /* * we better see if there is an extension who may * want to suppress the error. */ for(ext = dpy->ext_procs; ext; ext = ext->next) if(ext->error && (*ext->error)(dpy, err, &ext->codes, &ret_code)) return ret_code; _XError(dpy, err); return 0; } /* Widen a 32-bit sequence number into a native-word-size (unsigned long) * sequence number. Treating the comparison as a 1 and shifting it avoids a * conditional branch, and shifting by 16 twice avoids a compiler warning when * sizeof(unsigned long) == 4. */ static void widen(unsigned long *wide, unsigned int narrow) { unsigned long new = (*wide & ~0xFFFFFFFFUL) | narrow; *wide = new + ((unsigned long) (new < *wide) << 16 << 16); } /* Thread-safety rules: * * At most one thread can be reading from XCB's event queue at a time. * If you are not the current event-reading thread and you need to find * out if an event is available, you must wait. * * The same rule applies for reading replies. * * A single thread cannot be both the the event-reading and the * reply-reading thread at the same time. * * We always look at both the current event and the first pending reply * to decide which to process next. * * We always process all responses in sequence-number order, which may * mean waiting for another thread (either the event_waiter or the * reply_waiter) to handle an earlier response before we can process or * return a later one. If so, we wait on the corresponding condition * variable for that thread to process the response and wake us up. */ static xcb_generic_reply_t *poll_for_event(Display *dpy) { /* Make sure the Display's sequence numbers are valid */ require_socket(dpy); /* Precondition: This thread can safely get events from XCB. */ assert(dpy->xcb->event_owner == XlibOwnsEventQueue && !dpy->xcb->event_waiter); if(!dpy->xcb->next_event) dpy->xcb->next_event = xcb_poll_for_event(dpy->xcb->connection); if(dpy->xcb->next_event) { PendingRequest *req = dpy->xcb->pending_requests; xcb_generic_event_t *event = dpy->xcb->next_event; unsigned long event_sequence = dpy->last_request_read; widen(&event_sequence, event->full_sequence); if(!req || XLIB_SEQUENCE_COMPARE(event_sequence, <, req->sequence) || (event->response_type != X_Error && event_sequence == req->sequence)) { if (XLIB_SEQUENCE_COMPARE(event_sequence, >, dpy->request)) { throw_thread_fail_assert("Unknown sequence " "number while " "processing queue", xcb_xlib_threads_sequence_lost); } dpy->last_request_read = event_sequence; dpy->xcb->next_event = NULL; return (xcb_generic_reply_t *) event; } } return NULL; } static xcb_generic_reply_t *poll_for_response(Display *dpy) { void *response; xcb_generic_error_t *error; PendingRequest *req; while(!(response = poll_for_event(dpy)) && (req = dpy->xcb->pending_requests) && !req->reply_waiter && xcb_poll_for_reply(dpy->xcb->connection, req->sequence, &response, &error)) { if(XLIB_SEQUENCE_COMPARE(req->sequence, >, dpy->request)) { throw_thread_fail_assert("Unknown sequence number " "while awaiting reply", xcb_xlib_threads_sequence_lost); } dpy->last_request_read = req->sequence; if(response) break; dequeue_pending_request(dpy, req); if(error) return (xcb_generic_reply_t *) error; } return response; } static void handle_response(Display *dpy, xcb_generic_reply_t *response, Bool in_XReply) { _XAsyncHandler *async, *next; switch(response->response_type) { case X_Reply: for(async = dpy->async_handlers; async; async = next) { next = async->next; if(async->handler(dpy, (xReply *) response, (char *) response, sizeof(xReply) + (response->length << 2), async->data)) break; } break; case X_Error: handle_error(dpy, (xError *) response, in_XReply); break; default: /* event */ /* GenericEvents may be > 32 bytes. In this case, the * event struct is trailed by the additional bytes. the * xcb_generic_event_t struct uses 4 bytes for internal * numbering, so we need to shift the trailing data to * be after the first 32 bytes. */ if(response->response_type == GenericEvent && ((xcb_ge_event_t *) response)->length) { xcb_ge_event_t *event = (xcb_ge_event_t *) response; memmove(&event->full_sequence, &event[1], event->length * 4); } _XEnq(dpy, (xEvent *) response); break; } free(response); } int _XEventsQueued(Display *dpy, int mode) { xcb_generic_reply_t *response; if(dpy->flags & XlibDisplayIOError) return 0; if(dpy->xcb->event_owner != XlibOwnsEventQueue) return 0; if(mode == QueuedAfterFlush) _XSend(dpy, NULL, 0); else check_internal_connections(dpy); /* If another thread is blocked waiting for events, then we must * let that thread pick up the next event. Since it blocked, we * can reasonably claim there are no new events right now. */ if(!dpy->xcb->event_waiter) { while((response = poll_for_response(dpy))) handle_response(dpy, response, False); if(xcb_connection_has_error(dpy->xcb->connection)) _XIOError(dpy); } return dpy->qlen; } /* _XReadEvents - Flush the output queue, * then read as many events as possible (but at least 1) and enqueue them */ void _XReadEvents(Display *dpy) { xcb_generic_reply_t *response; unsigned long serial; if(dpy->flags & XlibDisplayIOError) return; _XSend(dpy, NULL, 0); if(dpy->xcb->event_owner != XlibOwnsEventQueue) return; check_internal_connections(dpy); serial = dpy->next_event_serial_num; while(serial == dpy->next_event_serial_num || dpy->qlen == 0) { if(dpy->xcb->event_waiter) { ConditionWait(dpy, dpy->xcb->event_notify); /* Maybe the other thread got us an event. */ continue; } if(!dpy->xcb->next_event) { xcb_generic_event_t *event; dpy->xcb->event_waiter = 1; UnlockDisplay(dpy); event = xcb_wait_for_event(dpy->xcb->connection); /* It appears that classic Xlib respected user * locks when waking up after waiting for * events. However, if this thread did not have * any user locks, and another thread takes a * user lock and tries to read events, then we'd * deadlock. So we'll choose to let the thread * that got in first consume events, despite the * later thread's user locks. */ InternalLockDisplay(dpy, /* ignore user locks */ 1); dpy->xcb->event_waiter = 0; ConditionBroadcast(dpy, dpy->xcb->event_notify); if(!event) _XIOError(dpy); dpy->xcb->next_event = event; } /* We've established most of the conditions for * poll_for_response to return non-NULL. The exceptions * are connection shutdown, and finding that another * thread is waiting for the next reply we'd like to * process. */ response = poll_for_response(dpy); if(response) handle_response(dpy, response, False); else if(dpy->xcb->pending_requests->reply_waiter) { /* need braces around ConditionWait */ ConditionWait(dpy, dpy->xcb->reply_notify); } else _XIOError(dpy); } /* The preceding loop established that there is no * event_waiter--unless we just called ConditionWait because of * a reply_waiter, in which case another thread may have become * the event_waiter while we slept unlocked. */ if(!dpy->xcb->event_waiter) while((response = poll_for_response(dpy))) handle_response(dpy, response, False); if(xcb_connection_has_error(dpy->xcb->connection)) _XIOError(dpy); } /* * _XSend - Flush the buffer and send the client data. 32 bit word aligned * transmission is used, if size is not 0 mod 4, extra bytes are transmitted. * * Note that the connection must not be read from once the data currently * in the buffer has been written. */ void _XSend(Display *dpy, const char *data, long size) { static const xReq dummy_request; static char const pad[3]; struct iovec vec[3]; uint64_t requests; _XExtension *ext; xcb_connection_t *c = dpy->xcb->connection; if(dpy->flags & XlibDisplayIOError) return; if(dpy->bufptr == dpy->buffer && !size) return; /* iff we asked XCB to set aside errors, we must pick those up * eventually. iff there are async handlers, we may have just * issued requests that will generate replies. in either case, * we need to remember to check later. */ if(dpy->xcb->event_owner != XlibOwnsEventQueue || dpy->async_handlers) { uint64_t sequence; for(sequence = dpy->xcb->last_flushed + 1; sequence <= dpy->request; ++sequence) append_pending_request(dpy, sequence); } requests = dpy->request - dpy->xcb->last_flushed; dpy->xcb->last_flushed = dpy->request; vec[0].iov_base = dpy->buffer; vec[0].iov_len = dpy->bufptr - dpy->buffer; vec[1].iov_base = (char *)data; vec[1].iov_len = size; vec[2].iov_base = (char *)pad; vec[2].iov_len = -size & 3; for(ext = dpy->flushes; ext; ext = ext->next_flush) { int i; for(i = 0; i < 3; ++i) if(vec[i].iov_len) ext->before_flush(dpy, &ext->codes, vec[i].iov_base, vec[i].iov_len); } if(xcb_writev(c, vec, 3, requests) < 0) _XIOError(dpy); dpy->bufptr = dpy->buffer; dpy->last_req = (char *) &dummy_request; check_internal_connections(dpy); _XSetSeqSyncFunction(dpy); } /* * _XFlush - Flush the X request buffer. If the buffer is empty, no * action is taken. */ void _XFlush(Display *dpy) { require_socket(dpy); _XSend(dpy, NULL, 0); _XEventsQueued(dpy, QueuedAfterReading); } static const XID inval_id = ~0UL; void _XIDHandler(Display *dpy) { if (dpy->xcb->next_xid == inval_id) _XAllocIDs(dpy, &dpy->xcb->next_xid, 1); } /* _XAllocID - resource ID allocation routine. */ XID _XAllocID(Display *dpy) { XID ret = dpy->xcb->next_xid; assert (ret != inval_id); dpy->xcb->next_xid = inval_id; _XSetPrivSyncFunction(dpy); return ret; } /* _XAllocIDs - multiple resource ID allocation routine. */ void _XAllocIDs(Display *dpy, XID *ids, int count) { int i; #ifdef XTHREADS if (dpy->lock) (*dpy->lock->user_lock_display)(dpy); UnlockDisplay(dpy); #endif for (i = 0; i < count; i++) ids[i] = xcb_generate_id(dpy->xcb->connection); #ifdef XTHREADS InternalLockDisplay(dpy, /* don't skip user locks */ 0); if (dpy->lock) (*dpy->lock->user_unlock_display)(dpy); #endif } static void _XFreeReplyData(Display *dpy, Bool force) { if(!force && dpy->xcb->reply_consumed < dpy->xcb->reply_length) return; free(dpy->xcb->reply_data); dpy->xcb->reply_data = NULL; } /* * _XReply - Wait for a reply packet and copy its contents into the * specified rep. * extra: number of 32-bit words expected after the reply * discard: should I discard data following "extra" words? */ Status _XReply(Display *dpy, xReply *rep, int extra, Bool discard) { xcb_generic_error_t *error; xcb_connection_t *c = dpy->xcb->connection; char *reply; PendingRequest *current; if (dpy->xcb->reply_data) throw_extlib_fail_assert("Extra reply data still left in queue", xcb_xlib_extra_reply_data_left); if(dpy->flags & XlibDisplayIOError) return 0; _XSend(dpy, NULL, 0); if(dpy->xcb->pending_requests_tail && dpy->xcb->pending_requests_tail->sequence == dpy->request) current = dpy->xcb->pending_requests_tail; else current = append_pending_request(dpy, dpy->request); /* Don't let any other thread get this reply. */ current->reply_waiter = 1; while(1) { PendingRequest *req = dpy->xcb->pending_requests; xcb_generic_reply_t *response; if(req != current && req->reply_waiter) { ConditionWait(dpy, dpy->xcb->reply_notify); /* Another thread got this reply. */ continue; } req->reply_waiter = 1; UnlockDisplay(dpy); response = xcb_wait_for_reply(c, req->sequence, &error); /* Any user locks on another thread must have been taken * while we slept in xcb_wait_for_reply. Classic Xlib * ignored those user locks in this case, so we do too. */ InternalLockDisplay(dpy, /* ignore user locks */ 1); /* We have the response we're looking for. Now, before * letting anyone else process this sequence number, we * need to process any events that should have come * earlier. */ if(dpy->xcb->event_owner == XlibOwnsEventQueue) { xcb_generic_reply_t *event; /* If some thread is already waiting for events, * it will get the first one. That thread must * process that event before we can continue. */ /* FIXME: That event might be after this reply, * and might never even come--or there might be * multiple threads trying to get events. */ while(dpy->xcb->event_waiter) { /* need braces around ConditionWait */ ConditionWait(dpy, dpy->xcb->event_notify); } while((event = poll_for_event(dpy))) handle_response(dpy, event, True); } req->reply_waiter = 0; ConditionBroadcast(dpy, dpy->xcb->reply_notify); if(XLIB_SEQUENCE_COMPARE(req->sequence, >, dpy->request)) { throw_thread_fail_assert("Unknown sequence number " "while processing reply", xcb_xlib_threads_sequence_lost); } dpy->last_request_read = req->sequence; if(!response) dequeue_pending_request(dpy, req); if(req == current) { reply = (char *) response; break; } if(error) handle_response(dpy, (xcb_generic_reply_t *) error, True); else if(response) handle_response(dpy, response, True); } check_internal_connections(dpy); if(dpy->xcb->next_event && dpy->xcb->next_event->response_type == X_Error) { xcb_generic_event_t *event = dpy->xcb->next_event; unsigned long event_sequence = dpy->last_request_read; widen(&event_sequence, event->full_sequence); if(event_sequence == dpy->last_request_read) { error = (xcb_generic_error_t *) event; dpy->xcb->next_event = NULL; } } if(error) { int ret_code; /* Xlib is evil and assumes that even errors will be * copied into rep. */ memcpy(rep, error, 32); /* do not die on "no such font", "can't allocate", "can't grab" failures */ switch(error->error_code) { case BadName: switch(error->major_code) { case X_LookupColor: case X_AllocNamedColor: free(error); return 0; } break; case BadFont: if(error->major_code == X_QueryFont) { free(error); return 0; } break; case BadAlloc: case BadAccess: free(error); return 0; } ret_code = handle_error(dpy, (xError *) error, True); free(error); return ret_code; } /* it's not an error, but we don't have a reply, so it's an I/O * error. */ if(!reply) { _XIOError(dpy); return 0; } /* there's no error and we have a reply. */ dpy->xcb->reply_data = reply; dpy->xcb->reply_consumed = sizeof(xReply) + (extra * 4); dpy->xcb->reply_length = sizeof(xReply); if(dpy->xcb->reply_data[0] == 1) dpy->xcb->reply_length += (((xcb_generic_reply_t *) dpy->xcb->reply_data)->length * 4); /* error: Xlib asks too much. give them what we can anyway. */ if(dpy->xcb->reply_length < dpy->xcb->reply_consumed) dpy->xcb->reply_consumed = dpy->xcb->reply_length; memcpy(rep, dpy->xcb->reply_data, dpy->xcb->reply_consumed); _XFreeReplyData(dpy, discard); return 1; } int _XRead(Display *dpy, char *data, long size) { assert(size >= 0); if(size == 0) return 0; if(dpy->xcb->reply_data == NULL || dpy->xcb->reply_consumed + size > dpy->xcb->reply_length) throw_extlib_fail_assert("Too much data requested from _XRead", xcb_xlib_too_much_data_requested); memcpy(data, dpy->xcb->reply_data + dpy->xcb->reply_consumed, size); dpy->xcb->reply_consumed += size; _XFreeReplyData(dpy, False); return 0; } /* * _XReadPad - Read bytes from the socket taking into account incomplete * reads. If the number of bytes is not 0 mod 4, read additional pad * bytes. */ void _XReadPad(Display *dpy, char *data, long size) { _XRead(dpy, data, size); dpy->xcb->reply_consumed += -size & 3; _XFreeReplyData(dpy, False); } /* Read and discard "n" 8-bit bytes of data */ void _XEatData(Display *dpy, unsigned long n) { dpy->xcb->reply_consumed += n; _XFreeReplyData(dpy, False); } /* * Read and discard "n" 32-bit words of data * Matches the units of the length field in X protocol replies, and provides * a single implementation of overflow checking to avoid having to replicate * those checks in every caller. */ void _XEatDataWords(Display *dpy, unsigned long n) { if (n < ((INT_MAX - dpy->xcb->reply_consumed) >> 2)) dpy->xcb->reply_consumed += (n << 2); else /* Overflow would happen, so just eat the rest of the reply */ dpy->xcb->reply_consumed = dpy->xcb->reply_length; _XFreeReplyData(dpy, False); } unsigned long _XNextRequest(Display *dpy) { /* This will update dpy->request. The assumption is that the next thing * that the application will do is make a request so there's little * overhead. */ require_socket(dpy); return NextRequest(dpy); } he exceptions * are connection shutdown, and findlibX11-1.6.3/src/QuCurShp.c000064401431060000012000000034761247741723500155350ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" Status XQueryBestCursor( register Display *dpy, Drawable drawable, unsigned int width, unsigned int height, unsigned int *ret_width, unsigned int *ret_height) { xQueryBestSizeReply rep; register xQueryBestSizeReq *req; LockDisplay(dpy); GetReq(QueryBestSize, req); req->class = CursorShape; req->drawable = drawable; req->width = width; req->height = height; if (_XReply (dpy, (xReply *)&rep, 0, xTrue) == 0) { UnlockDisplay(dpy); SyncHandle(); return 0; } *ret_width = rep.width; *ret_height = rep.height; UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/NextEvent.c000064401431060000012000000031741247741723500157360ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" /* * Return next event in queue, or if none, flush output and wait for * events. */ int XNextEvent ( register Display *dpy, register XEvent *event) { register _XQEvent *qelt; LockDisplay(dpy); /* Delete unclaimed cookies */ _XFreeEventCookies(dpy); if (dpy->head == NULL) _XReadEvents(dpy); qelt = dpy->head; *event = qelt->event; _XDeq(dpy, NULL, qelt); _XStoreEventCookie(dpy, event); UnlockDisplay(dpy); return 0; } libX11-1.6.3/src/SetFore.c000064401431060000012000000027551247741723500153710ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XSetForeground ( register Display *dpy, GC gc, unsigned long foreground) /* CARD32 */ { LockDisplay(dpy); if (gc->values.foreground != foreground) { gc->values.foreground = foreground; gc->dirty |= GCForeground; } UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/PeekEvent.c000064401431060000012000000032511247741723500157000ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" /* * Return the next event in the queue, * BUT do not remove it from the queue. * If none found, flush and wait until there is an event to peek. */ int XPeekEvent ( register Display *dpy, register XEvent *event) { XEvent copy; LockDisplay(dpy); if (dpy->head == NULL) _XReadEvents(dpy); *event = (dpy->head)->event; if (_XCopyEventCookie(dpy, &event->xcookie, ©.xcookie)) { _XStoreEventCookie(dpy, ©); *event = copy; } UnlockDisplay(dpy); return 1; } libX11-1.6.3/src/UninsCmap.c000064401431060000012000000026451247741723500157150ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XUninstallColormap( register Display *dpy, Colormap cmap) { register xResourceReq *req; LockDisplay(dpy); GetResReq(UninstallColormap, cmap, req); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/SetStCmap.c000064401431060000012000000065251247741723500156640ustar00alancstaff00002660200006 /*********************************************************** Copyright 1987, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #include #include "Xatomtype.h" #include /* * WARNING * * This is a pre-ICCCM routine. It must not reference any of the new fields * in the XStandardColormap structure. */ void XSetStandardColormap( Display *dpy, Window w, XStandardColormap *cmap, Atom property) /* XA_RGB_BEST_MAP, etc. */ { Screen *sp; XStandardColormap stdcmap; sp = _XScreenOfWindow (dpy, w); if (!sp) { /* already caught the XGetGeometry error in _XScreenOfWindow */ return; } stdcmap.colormap = cmap->colormap; stdcmap.red_max = cmap->red_max; stdcmap.red_mult = cmap->red_mult; stdcmap.green_max = cmap->green_max; stdcmap.green_mult = cmap->green_mult; stdcmap.blue_max = cmap->blue_max; stdcmap.blue_mult = cmap->blue_mult; stdcmap.base_pixel = cmap->base_pixel; stdcmap.visualid = sp->root_visual->visualid; stdcmap.killid = None; /* don't know how to kill this one */ #ifdef XCMS XSetRGBColormaps (dpy, w, &stdcmap, 1, property); #endif return; } libX11-1.6.3/src/IfEvent.c000064401431060000012000000041641247741723500153560ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" /* * Flush output and (wait for and) return the next event matching the * predicate in the queue. */ int XIfEvent ( register Display *dpy, register XEvent *event, Bool (*predicate)( Display* /* display */, XEvent* /* event */, char* /* arg */ ), /* function to call */ char *arg) { register _XQEvent *qelt, *prev; unsigned long qe_serial = 0; LockDisplay(dpy); prev = NULL; while (1) { for (qelt = prev ? prev->next : dpy->head; qelt; prev = qelt, qelt = qelt->next) { if(qelt->qserial_num > qe_serial && (*predicate)(dpy, &qelt->event, arg)) { *event = qelt->event; _XDeq(dpy, prev, qelt); _XStoreEventCookie(dpy, event); UnlockDisplay(dpy); return 0; } } if (prev) qe_serial = prev->qserial_num; _XReadEvents(dpy); if (prev && prev->qserial_num != qe_serial) /* another thread has snatched this event */ prev = NULL; } } libX11-1.6.3/src/AutoRep.c000064401431060000012000000030701247741723500153700ustar00alancstaff00002660200006/* Copyright 1985, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XAutoRepeatOn (register Display *dpy) { XKeyboardControl values; values.auto_repeat_mode = AutoRepeatModeOn; XChangeKeyboardControl (dpy, KBAutoRepeatMode, &values); return 1; } int XAutoRepeatOff (register Display *dpy) { XKeyboardControl values; values.auto_repeat_mode = AutoRepeatModeOff; XChangeKeyboardControl (dpy, KBAutoRepeatMode, &values); return 1; } use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WlibX11-1.6.3/src/GetNrmHint.c000064401431060000012000000107651247741723500160410ustar00alancstaff00002660200006/*********************************************************** Copyright 1988 by Wyse Technology, Inc., San Jose, Ca, Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts, All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL AND WYSE DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL OR WYSE BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include "Xatomtype.h" #include #include Status XGetWMSizeHints ( Display *dpy, Window w, XSizeHints *hints, long *supplied, Atom property) { xPropSizeHints *prop = NULL; Atom actual_type; int actual_format; unsigned long leftover; unsigned long nitems; if (XGetWindowProperty (dpy, w, property, 0L, (long)NumPropSizeElements, False, XA_WM_SIZE_HINTS, &actual_type, &actual_format, &nitems, &leftover, (unsigned char **)&prop) != Success) return False; if ((actual_type != XA_WM_SIZE_HINTS) || (nitems < OldNumPropSizeElements) || (actual_format != 32)) { Xfree (prop); return False; } hints->flags = prop->flags; /* XSizeHints misdeclares these as int instead of long */ hints->x = cvtINT32toInt (prop->x); hints->y = cvtINT32toInt (prop->y); hints->width = cvtINT32toInt (prop->width); hints->height = cvtINT32toInt (prop->height); hints->min_width = cvtINT32toInt (prop->minWidth); hints->min_height = cvtINT32toInt (prop->minHeight); hints->max_width = cvtINT32toInt (prop->maxWidth); hints->max_height = cvtINT32toInt (prop->maxHeight); hints->width_inc = cvtINT32toInt (prop->widthInc); hints->height_inc = cvtINT32toInt (prop->heightInc); hints->min_aspect.x = cvtINT32toInt (prop->minAspectX); hints->min_aspect.y = cvtINT32toInt (prop->minAspectY); hints->max_aspect.x = cvtINT32toInt (prop->maxAspectX); hints->max_aspect.y = cvtINT32toInt (prop->maxAspectY); *supplied = (USPosition | USSize | PAllHints); if (nitems >= NumPropSizeElements) { hints->base_width= cvtINT32toInt (prop->baseWidth); hints->base_height= cvtINT32toInt (prop->baseHeight); hints->win_gravity= cvtINT32toInt (prop->winGravity); *supplied |= (PBaseSize | PWinGravity); } hints->flags &= (*supplied); /* get rid of unwanted bits */ Xfree(prop); return True; } Status XGetWMNormalHints ( Display *dpy, Window w, XSizeHints *hints, long *supplied) { return (XGetWMSizeHints (dpy, w, hints, supplied, XA_WM_NORMAL_HINTS)); } libX11-1.6.3/src/ChWindow.c000064401431060000012000000032341247741723500155350ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XResizeWindow( register Display *dpy, Window w, unsigned int width, unsigned int height) { register xConfigureWindowReq *req; LockDisplay(dpy); GetReqExtra(ConfigureWindow, 8, req); /* 2 4-byte quantities */ req->window = w; req->mask = CWWidth | CWHeight; { CARD32 *valuePtr = (CARD32 *) NEXTPTR(req,xConfigureWindowReq); *valuePtr++ = width; *valuePtr = height; } UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/PmapBgnd.c000064401431060000012000000031221247741723500154770ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XSetWindowBackgroundPixmap( register Display *dpy, Window w, Pixmap pixmap) { register xChangeWindowAttributesReq *req; LockDisplay (dpy); GetReqExtra (ChangeWindowAttributes, 4, req); req->window = w; req->valueMask = CWBackPixmap; OneDataCard32 (dpy, NEXTPTR(req,xChangeWindowAttributesReq), pixmap); UnlockDisplay (dpy); SyncHandle(); return 1; } ute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WlibX11-1.6.3/src/PutImage.c000064401431060000012000000745601247741723500155400ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xutil.h" #include #include "Cr.h" #include "ImUtil.h" #if defined(__STDC__) && ((defined(sun) && defined(SVR4)) || defined(WIN32)) #define RConst /**/ #else #define RConst const #endif #if defined(Lynx) && defined(ROUNDUP) #undef ROUNDUP #endif /* assumes pad is a power of 2 */ #define ROUNDUP(nbytes, pad) (((nbytes) + ((pad) - 1)) & ~(long)((pad) - 1)) static unsigned char const _reverse_byte[0x100] = { 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0, 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0, 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8, 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8, 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4, 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4, 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec, 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc, 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2, 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2, 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea, 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa, 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6, 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6, 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee, 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe, 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1, 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1, 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9, 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9, 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5, 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5, 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed, 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd, 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3, 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3, 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb, 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb, 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7, 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7, 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef, 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff }; static unsigned char const _reverse_nibs[0x100] = { 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80, 0x90, 0xa0, 0xb0, 0xc0, 0xd0, 0xe0, 0xf0, 0x01, 0x11, 0x21, 0x31, 0x41, 0x51, 0x61, 0x71, 0x81, 0x91, 0xa1, 0xb1, 0xc1, 0xd1, 0xe1, 0xf1, 0x02, 0x12, 0x22, 0x32, 0x42, 0x52, 0x62, 0x72, 0x82, 0x92, 0xa2, 0xb2, 0xc2, 0xd2, 0xe2, 0xf2, 0x03, 0x13, 0x23, 0x33, 0x43, 0x53, 0x63, 0x73, 0x83, 0x93, 0xa3, 0xb3, 0xc3, 0xd3, 0xe3, 0xf3, 0x04, 0x14, 0x24, 0x34, 0x44, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb4, 0xc4, 0xd4, 0xe4, 0xf4, 0x05, 0x15, 0x25, 0x35, 0x45, 0x55, 0x65, 0x75, 0x85, 0x95, 0xa5, 0xb5, 0xc5, 0xd5, 0xe5, 0xf5, 0x06, 0x16, 0x26, 0x36, 0x46, 0x56, 0x66, 0x76, 0x86, 0x96, 0xa6, 0xb6, 0xc6, 0xd6, 0xe6, 0xf6, 0x07, 0x17, 0x27, 0x37, 0x47, 0x57, 0x67, 0x77, 0x87, 0x97, 0xa7, 0xb7, 0xc7, 0xd7, 0xe7, 0xf7, 0x08, 0x18, 0x28, 0x38, 0x48, 0x58, 0x68, 0x78, 0x88, 0x98, 0xa8, 0xb8, 0xc8, 0xd8, 0xe8, 0xf8, 0x09, 0x19, 0x29, 0x39, 0x49, 0x59, 0x69, 0x79, 0x89, 0x99, 0xa9, 0xb9, 0xc9, 0xd9, 0xe9, 0xf9, 0x0a, 0x1a, 0x2a, 0x3a, 0x4a, 0x5a, 0x6a, 0x7a, 0x8a, 0x9a, 0xaa, 0xba, 0xca, 0xda, 0xea, 0xfa, 0x0b, 0x1b, 0x2b, 0x3b, 0x4b, 0x5b, 0x6b, 0x7b, 0x8b, 0x9b, 0xab, 0xbb, 0xcb, 0xdb, 0xeb, 0xfb, 0x0c, 0x1c, 0x2c, 0x3c, 0x4c, 0x5c, 0x6c, 0x7c, 0x8c, 0x9c, 0xac, 0xbc, 0xcc, 0xdc, 0xec, 0xfc, 0x0d, 0x1d, 0x2d, 0x3d, 0x4d, 0x5d, 0x6d, 0x7d, 0x8d, 0x9d, 0xad, 0xbd, 0xcd, 0xdd, 0xed, 0xfd, 0x0e, 0x1e, 0x2e, 0x3e, 0x4e, 0x5e, 0x6e, 0x7e, 0x8e, 0x9e, 0xae, 0xbe, 0xce, 0xde, 0xee, 0xfe, 0x0f, 0x1f, 0x2f, 0x3f, 0x4f, 0x5f, 0x6f, 0x7f, 0x8f, 0x9f, 0xaf, 0xbf, 0xcf, 0xdf, 0xef, 0xff }; int _XReverse_Bytes( register unsigned char *bpt, register int nb) { do { *bpt = _reverse_byte[*bpt]; bpt++; } while (--nb > 0); return 0; } /* XXX the following functions are declared int instead of void because various * compilers and lints complain about later initialization of SwapFunc and/or * (swapfunc == NoSwap) when void is used. */ /*ARGSUSED*/ static void NoSwap ( register unsigned char *src, register unsigned char *dest, long srclen, long srcinc, long destinc, unsigned int height, int half_order) { long h = height; if (srcinc == destinc) memcpy((char *)dest, (char *)src, (int)(srcinc * (h - 1) + srclen)); else for (; --h >= 0; src += srcinc, dest += destinc) memcpy((char *)dest, (char *)src, (int)srclen); } static void SwapTwoBytes ( register unsigned char *src, register unsigned char *dest, long srclen, long srcinc, long destinc, unsigned int height, int half_order) { long length = ROUNDUP(srclen, 2); register long h, n; srcinc -= length; destinc -= length; for (h = height; --h >= 0; src += srcinc, dest += destinc) { if ((h == 0) && (srclen != length)) { length -= 2; if (half_order == MSBFirst) *(dest + length) = *(src + length + 1); else *(dest + length + 1) = *(src + length); } for (n = length; n > 0; n -= 2, src += 2) { *dest++ = *(src + 1); *dest++ = *src; } } } static void SwapThreeBytes ( register unsigned char *src, register unsigned char *dest, long srclen, long srcinc, long destinc, unsigned int height, int byte_order) { long length = ((srclen + 2) / 3) * 3; register long h, n; srcinc -= length; destinc -= length; for (h = height; --h >= 0; src += srcinc, dest += destinc) { if ((h == 0) && (srclen != length)) { length -= 3; if ((srclen - length) == 2) *(dest + length + 1) = *(src + length + 1); if (byte_order == MSBFirst) *(dest + length) = *(src + length + 2); else *(dest + length + 2) = *(src + length); } for (n = length; n > 0; n -= 3, src += 3) { *dest++ = *(src + 2); *dest++ = *(src + 1); *dest++ = *src; } } } static void SwapFourBytes ( register unsigned char *src, register unsigned char *dest, long srclen, long srcinc, long destinc, unsigned int height, int half_order) { long length = ROUNDUP(srclen, 4); register long h, n; srcinc -= length; destinc -= length; for (h = height; --h >= 0; src += srcinc, dest += destinc) { if ((h == 0) && (srclen != length)) { length -= 4; if (half_order == MSBFirst) *(dest + length) = *(src + length + 3); if (((half_order == LSBFirst) && ((srclen - length) == 3)) || ((half_order == MSBFirst) && (srclen & 2))) *(dest + length + 1) = *(src + length + 2); if (((half_order == MSBFirst) && ((srclen - length) == 3)) || ((half_order == LSBFirst) && (srclen & 2))) *(dest + length + 2) = *(src + length + 1); if (half_order == LSBFirst) *(dest + length + 3) = *(src + length); } for (n = length; n > 0; n -= 4, src += 4) { *dest++ = *(src + 3); *dest++ = *(src + 2); *dest++ = *(src + 1); *dest++ = *src; } } } static void SwapWords ( register unsigned char *src, register unsigned char *dest, long srclen, long srcinc, long destinc, unsigned int height, int half_order) { long length = ROUNDUP(srclen, 4); register long h, n; srcinc -= length; destinc -= length; for (h = height; --h >= 0; src += srcinc, dest += destinc) { if ((h == 0) && (srclen != length)) { length -= 4; if (half_order == MSBFirst) *(dest + length + 1) = *(src + length + 3); if (((half_order == LSBFirst) && ((srclen - length) == 3)) || ((half_order == MSBFirst) && (srclen & 2))) *(dest + length) = *(src + length + 2); if (((half_order == MSBFirst) && ((srclen - length) == 3)) || ((half_order == LSBFirst) && (srclen & 2))) *(dest + length + 3) = *(src + length + 1); if (half_order == LSBFirst) *(dest + length + 2) = *(src + length); } for (n = length; n > 0; n -= 4, src += 2) { *dest++ = *(src + 2); *dest++ = *(src + 3); *dest++ = *src++; *dest++ = *src++; } } } static void SwapNibbles( register unsigned char *src, register unsigned char *dest, long srclen, long srcinc, long destinc, unsigned int height) { register long h, n; register const unsigned char *rev = _reverse_nibs; srcinc -= srclen; destinc -= srclen; for (h = height; --h >= 0; src += srcinc, dest += destinc) for (n = srclen; --n >= 0; ) *dest++ = rev[*src++]; } static void ShiftNibblesLeft ( register unsigned char *src, register unsigned char *dest, long srclen, long srcinc, long destinc, unsigned int height, int nibble_order) { register long h, n; register unsigned char c1, c2; srcinc -= srclen; destinc -= srclen; if (nibble_order == MSBFirst) { for (h = height; --h >= 0; src += srcinc, dest += destinc) for (n = srclen; --n >= 0; ) { c1 = *src++; c2 = *src; *dest++ = ((c1 & 0x0f) << 4) | ((c2 & (unsigned)0xf0) >> 4); } } else { for (h = height; --h >= 0; src += srcinc, dest += destinc) for (n = srclen; --n >= 0; ) { c1 = *src++; c2 = *src; *dest++ = ((c2 & 0x0f) << 4) | ((c1 & (unsigned)0xf0) >> 4); } } } /*ARGSUSED*/ static void SwapBits( register unsigned char *src, register unsigned char *dest, long srclen, long srcinc, long destinc, unsigned int height, int half_order) { register long h, n; register const unsigned char *rev = _reverse_byte; srcinc -= srclen; destinc -= srclen; for (h = height; --h >= 0; src += srcinc, dest += destinc) for (n = srclen; --n >= 0; ) *dest++ = rev[*src++]; } static void SwapBitsAndTwoBytes( register unsigned char *src, register unsigned char *dest, long srclen, long srcinc, long destinc, unsigned int height, int half_order) { long length = ROUNDUP(srclen, 2); register long h, n; register const unsigned char *rev = _reverse_byte; srcinc -= length; destinc -= length; for (h = height; --h >= 0; src += srcinc, dest += destinc) { if ((h == 0) && (srclen != length)) { length -= 2; if (half_order == MSBFirst) *(dest + length) = rev[*(src + length + 1)]; else *(dest + length + 1) = rev[*(src + length)]; } for (n = length; n > 0; n -= 2, src += 2) { *dest++ = rev[*(src + 1)]; *dest++ = rev[*src]; } } } static void SwapBitsAndFourBytes( register unsigned char *src, register unsigned char *dest, long srclen, long srcinc, long destinc, unsigned int height, int half_order) { long length = ROUNDUP(srclen, 4); register long h, n; register const unsigned char *rev = _reverse_byte; srcinc -= length; destinc -= length; for (h = height; --h >= 0; src += srcinc, dest += destinc) { if ((h == 0) && (srclen != length)) { length -= 4; if (half_order == MSBFirst) *(dest + length) = rev[*(src + length + 3)]; if (((half_order == LSBFirst) && ((srclen - length) == 3)) || ((half_order == MSBFirst) && (srclen & 2))) *(dest + length + 1) = rev[*(src + length + 2)]; if (((half_order == MSBFirst) && ((srclen - length) == 3)) || ((half_order == LSBFirst) && (srclen & 2))) *(dest + length + 2) = rev[*(src + length + 1)]; if (half_order == LSBFirst) *(dest + length + 3) = rev[*(src + length)]; } for (n = length; n > 0; n -= 4, src += 4) { *dest++ = rev[*(src + 3)]; *dest++ = rev[*(src + 2)]; *dest++ = rev[*(src + 1)]; *dest++ = rev[*src]; } } } static void SwapBitsAndWords( register unsigned char *src, register unsigned char *dest, long srclen, long srcinc, long destinc, unsigned int height, int half_order) { long length = ROUNDUP(srclen, 4); register long h, n; register const unsigned char *rev = _reverse_byte; srcinc -= length; destinc -= length; for (h = height; --h >= 0; src += srcinc, dest += destinc) { if ((h == 0) && (srclen != length)) { length -= 4; if (half_order == MSBFirst) *(dest + length + 1) = rev[*(src + length + 3)]; if (((half_order == LSBFirst) && ((srclen - length) == 3)) || ((half_order == MSBFirst) && (srclen & 2))) *(dest + length) = rev[*(src + length + 2)]; if (((half_order == MSBFirst) && ((srclen - length) == 3)) || ((half_order == LSBFirst) && (srclen & 2))) *(dest + length + 3) = rev[*(src + length + 1)]; if (half_order == LSBFirst) *(dest + length + 2) = rev[*(src + length)]; } for (n = length; n > 0; n -= 4, src += 2) { *dest++ = rev[*(src + 2)]; *dest++ = rev[*(src + 3)]; *dest++ = rev[*src++]; *dest++ = rev[*src++]; } } } /* The following table gives the bit ordering within bytes (when accessed sequentially) for a scanline containing 32 bits, with bits numbered 0 to 31, where bit 0 should be leftmost on the display. For a given byte labelled A-B, A is for the most significant bit of the byte, and B is for the least significant bit. legend: 1 scanline-unit = 8 2 scanline-unit = 16 4 scanline-unit = 32 M byte-order = MostSignificant L byte-order = LeastSignificant m bit-order = MostSignificant l bit-order = LeastSignificant format ordering 1Mm 00-07 08-15 16-23 24-31 2Mm 00-07 08-15 16-23 24-31 4Mm 00-07 08-15 16-23 24-31 1Ml 07-00 15-08 23-16 31-24 2Ml 15-08 07-00 31-24 23-16 4Ml 31-24 23-16 15-08 07-00 1Lm 00-07 08-15 16-23 24-31 2Lm 08-15 00-07 24-31 16-23 4Lm 24-31 16-23 08-15 00-07 1Ll 07-00 15-08 23-16 31-24 2Ll 07-00 15-08 23-16 31-24 4Ll 07-00 15-08 23-16 31-24 The following table gives the required conversion between any two formats. It is based strictly on the table above. If you believe one, you should believe the other. legend: n no changes s reverse 8-bit units within 16-bit units l reverse 8-bit units within 32-bit units w reverse 16-bit units within 32-bit units R reverse bits within 8-bit units S s+R L l+R W w+R */ static void (* RConst (SwapFunction[12][12]))( register unsigned char *src, register unsigned char *dest, long srclen, long srcinc, long destinc, unsigned int height, int half_order) = { #define n NoSwap, #define s SwapTwoBytes, #define l SwapFourBytes, #define w SwapWords, #define R SwapBits, #define S SwapBitsAndTwoBytes, #define L SwapBitsAndFourBytes, #define W SwapBitsAndWords, /* 1Mm 2Mm 4Mm 1Ml 2Ml 4Ml 1Lm 2Lm 4Lm 1Ll 2Ll 4Ll */ /* 1Mm */ { n n n R S L n s l R R R }, /* 2Mm */ { n n n R S L n s l R R R }, /* 4Mm */ { n n n R S L n s l R R R }, /* 1Ml */ { R R R n s l R S L n n n }, /* 2Ml */ { S S S s n w S R W s s s }, /* 4Ml */ { L L L l w n L W R l l l }, /* 1Lm */ { n n n R S L n s l R R R }, /* 2Lm */ { s s s S R W s n w S S S }, /* 4Lm */ { l l l L W R l w n L L L }, /* 1Ll */ { R R R n s l R S L n n n }, /* 2Ll */ { R R R n s l R S L n n n }, /* 4Ll */ { R R R n s l R S L n n n } #undef n #undef s #undef l #undef w #undef R #undef S #undef L #undef W }; /* Of course, the table above is a lie. We also need to factor in the * order of the source data to cope with swapping half of a unit at the * end of a scanline, since we are trying to avoid de-ref'ing off the * end of the source. * * Defines whether the first half of a unit has the first half of the data */ static int const HalfOrder[12] = { LSBFirst, /* 1Mm */ LSBFirst, /* 2Mm */ LSBFirst, /* 4Mm */ LSBFirst, /* 1Ml */ MSBFirst, /* 2Ml */ MSBFirst, /* 4Ml */ LSBFirst, /* 1Lm */ MSBFirst, /* 2Lm */ MSBFirst, /* 4Lm */ LSBFirst, /* 1Ll */ LSBFirst, /* 2Ll */ LSBFirst /* 4Ll */ }; /* Finally, for SwapWords cases, the half order depends not just on the source * but also on the destination scanline unit. Use of this table changes some * MSBFirsts to LSBFirsts that are "do not care" (because the function will be * NoSwap or SwapBits) in addition to changing the desired ones. */ static int const HalfOrderWord[12] = { MSBFirst, /* 1Mm */ MSBFirst, /* 2Mm */ MSBFirst, /* 4Mm */ MSBFirst, /* 1Ml */ MSBFirst, /* 2Ml */ LSBFirst, /* 4Ml */ MSBFirst, /* 1Lm */ MSBFirst, /* 2Lm */ LSBFirst, /* 4Lm */ MSBFirst, /* 1Ll */ MSBFirst, /* 2Ll */ MSBFirst /* 4Ll */ }; /* * This macro creates a value from 0 to 11 suitable for indexing * into the table above. */ #define ComposeIndex(bitmap_unit, bitmap_bit_order, byte_order) \ (((bitmap_unit == 32) ? 2 : ((bitmap_unit == 16) ? 1 : 0)) \ + (((bitmap_bit_order == MSBFirst) ? 0 : 3) \ + ((byte_order == MSBFirst) ? 0 : 6))) /* Cancel a GetReq operation, before doing _XSend or Data */ #define UnGetReq(name)\ dpy->bufptr -= SIZEOF(x##name##Req);\ dpy->request-- static void SendXYImage( register Display *dpy, register xPutImageReq *req, register XImage *image, int req_xoffset, int req_yoffset) { register int j; long total_xoffset, bytes_per_src, bytes_per_dest, length; long bytes_per_line, bytes_per_src_plane, bytes_per_dest_plane; char *src, *dest, *buf; char *extra = (char *)NULL; register void (*swapfunc)( register unsigned char *src, register unsigned char *dest, long srclen, long srcinc, long destinc, unsigned int height, int half_order); int half_order; total_xoffset = image->xoffset + req_xoffset; req->leftPad = total_xoffset & (dpy->bitmap_unit - 1); total_xoffset = (unsigned)(total_xoffset - req->leftPad) >> 3; /* The protocol requires left-pad of zero on all ZPixmap, even * though the 1-bit case is identical to bitmap format. This is a * bug in the protocol, caused because 1-bit ZPixmap was added late * in the game. Hairy shifting code compensation isn't worth it, * just use XYPixmap format instead. */ if ((req->leftPad != 0) && (req->format == ZPixmap)) req->format = XYPixmap; bytes_per_dest = (unsigned long)ROUNDUP((long)req->width + req->leftPad, dpy->bitmap_pad) >> 3; bytes_per_dest_plane = bytes_per_dest * req->height; length = bytes_per_dest_plane * image->depth; req->length += (length + 3) >> 2; swapfunc = SwapFunction[ComposeIndex(image->bitmap_unit, image->bitmap_bit_order, image->byte_order)] [ComposeIndex(dpy->bitmap_unit, dpy->bitmap_bit_order, dpy->byte_order)]; half_order = HalfOrder[ComposeIndex(image->bitmap_unit, image->bitmap_bit_order, image->byte_order)]; if (half_order == MSBFirst) half_order = HalfOrderWord[ComposeIndex(dpy->bitmap_unit, dpy->bitmap_bit_order, dpy->byte_order)]; src = image->data + (image->bytes_per_line * req_yoffset) + total_xoffset; /* when total_xoffset > 0, we have to worry about stepping off the * end of image->data. */ if ((swapfunc == NoSwap) && (image->bytes_per_line == bytes_per_dest) && (((total_xoffset == 0) && ((image->depth == 1) || (image->height == req->height))) || ((image->depth == 1) && ((req_yoffset + req->height) < (unsigned)image->height)))) { Data(dpy, src, length); return; } length = ROUNDUP(length, 4); if ((dpy->bufptr + length) > dpy->bufmax) { if ((buf = _XAllocScratch(dpy, length)) == NULL) { UnGetReq(PutImage); return; } } else buf = dpy->bufptr; bytes_per_src = (req->width + req->leftPad + (unsigned)7) >> 3; bytes_per_line = image->bytes_per_line; bytes_per_src_plane = bytes_per_line * image->height; total_xoffset &= (image->bitmap_unit - 1) >> 3; if ((total_xoffset > 0) && (image->byte_order != image->bitmap_bit_order)) { char *temp; long bytes_per_temp_plane, temp_length; bytes_per_line = bytes_per_src + total_xoffset; src -= total_xoffset; bytes_per_temp_plane = bytes_per_line * req->height; temp_length = ROUNDUP(bytes_per_temp_plane * image->depth, 4); if (buf == dpy->bufptr) { if (! (temp = _XAllocScratch(dpy, temp_length))) { UnGetReq(PutImage); return; } } else if ((extra = temp = Xmalloc(temp_length)) == NULL) { UnGetReq(PutImage); return; } swapfunc = SwapFunction[ComposeIndex(image->bitmap_unit, image->bitmap_bit_order, image->byte_order)] [ComposeIndex(image->bitmap_unit, dpy->byte_order, dpy->byte_order)]; for (dest = temp, j = image->depth; --j >= 0; src += bytes_per_src_plane, dest += bytes_per_temp_plane) (*swapfunc)((unsigned char *)src, (unsigned char *)dest, bytes_per_line, (long)image->bytes_per_line, bytes_per_line, req->height, half_order); swapfunc = SwapFunction[ComposeIndex(image->bitmap_unit, dpy->byte_order, dpy->byte_order)] [ComposeIndex(dpy->bitmap_unit, dpy->bitmap_bit_order, dpy->byte_order)]; half_order = HalfOrder[ComposeIndex(image->bitmap_unit, dpy->byte_order, dpy->byte_order)]; src = temp + total_xoffset; bytes_per_src_plane = bytes_per_temp_plane; } for (dest = buf, j = image->depth; --j >= 0; src += bytes_per_src_plane, dest += bytes_per_dest_plane) (*swapfunc)((unsigned char *)src, (unsigned char *)dest, bytes_per_src, bytes_per_line, bytes_per_dest, req->height, half_order); Xfree(extra); if (buf == dpy->bufptr) dpy->bufptr += length; else _XSend(dpy, buf, length); } static void SendZImage( register Display *dpy, register xPutImageReq *req, register XImage *image, int req_xoffset, int req_yoffset, int dest_bits_per_pixel, int dest_scanline_pad) { long bytes_per_src, bytes_per_dest, length; unsigned char *src, *dest; unsigned char *shifted_src = NULL; req->leftPad = 0; bytes_per_src = ROUNDUP((long)req->width * image->bits_per_pixel, 8) >> 3; bytes_per_dest = ROUNDUP((long)req->width * dest_bits_per_pixel, dest_scanline_pad) >> 3; length = bytes_per_dest * req->height; req->length += (length + 3) >> 2; src = (unsigned char *)image->data + (req_yoffset * image->bytes_per_line) + ((req_xoffset * image->bits_per_pixel) >> 3); if ((image->bits_per_pixel == 4) && ((unsigned int) req_xoffset & 0x01)) { if (! (shifted_src = Xmalloc(req->height * image->bytes_per_line))) { UnGetReq(PutImage); return; } ShiftNibblesLeft(src, shifted_src, bytes_per_src, (long) image->bytes_per_line, (long) image->bytes_per_line, req->height, image->byte_order); src = shifted_src; } /* when req_xoffset > 0, we have to worry about stepping off the * end of image->data. */ if (((image->byte_order == dpy->byte_order) || (image->bits_per_pixel == 8)) && ((long)image->bytes_per_line == bytes_per_dest) && ((req_xoffset == 0) || ((req_yoffset + req->height) < (unsigned)image->height))) { Data(dpy, (char *)src, length); Xfree(shifted_src); return; } length = ROUNDUP(length, 4); if ((dpy->bufptr + length) <= dpy->bufmax) dest = (unsigned char *)dpy->bufptr; else if ((dest = (unsigned char *) _XAllocScratch(dpy, length)) == NULL) { Xfree(shifted_src); UnGetReq(PutImage); return; } if ((image->byte_order == dpy->byte_order) || (image->bits_per_pixel == 8)) NoSwap(src, dest, bytes_per_src, (long)image->bytes_per_line, bytes_per_dest, req->height, image->byte_order); else if (image->bits_per_pixel == 32) SwapFourBytes(src, dest, bytes_per_src, (long)image->bytes_per_line, bytes_per_dest, req->height, image->byte_order); else if (image->bits_per_pixel == 24) SwapThreeBytes(src, dest, bytes_per_src, (long)image->bytes_per_line, bytes_per_dest, req->height, image->byte_order); else if (image->bits_per_pixel == 16) SwapTwoBytes(src, dest, bytes_per_src, (long)image->bytes_per_line, bytes_per_dest, req->height, image->byte_order); else SwapNibbles(src, dest, bytes_per_src, (long)image->bytes_per_line, bytes_per_dest, req->height); if (dest == (unsigned char *)dpy->bufptr) dpy->bufptr += length; else _XSend(dpy, (char *)dest, length); Xfree(shifted_src); } static void PutImageRequest( register Display *dpy, Drawable d, GC gc, register XImage *image, int req_xoffset, int req_yoffset, int x, int y, unsigned int req_width, unsigned int req_height, int dest_bits_per_pixel, int dest_scanline_pad) { register xPutImageReq *req; GetReq(PutImage, req); req->drawable = d; req->gc = gc->gid; req->dstX = x; req->dstY = y; req->width = req_width; req->height = req_height; req->depth = image->depth; req->format = image->format; if ((image->bits_per_pixel == 1) || (image->format != ZPixmap)) SendXYImage(dpy, req, image, req_xoffset, req_yoffset); else SendZImage(dpy, req, image, req_xoffset, req_yoffset, dest_bits_per_pixel, dest_scanline_pad); } static void PutSubImage ( register Display *dpy, Drawable d, GC gc, register XImage *image, int req_xoffset, int req_yoffset, int x, int y, unsigned int req_width, unsigned int req_height, int dest_bits_per_pixel, int dest_scanline_pad) { int left_pad, BytesPerRow, Available; if ((req_width == 0) || (req_height == 0)) return; Available = ((65536 < dpy->max_request_size) ? (65536 << 2) : (dpy->max_request_size << 2)) - SIZEOF(xPutImageReq); if ((image->bits_per_pixel == 1) || (image->format != ZPixmap)) { left_pad = (image->xoffset + req_xoffset) & (dpy->bitmap_unit - 1); BytesPerRow = (ROUNDUP((long)req_width + left_pad, dpy->bitmap_pad) >> 3) * image->depth; } else { left_pad = 0; BytesPerRow = ROUNDUP((long)req_width * dest_bits_per_pixel, dest_scanline_pad) >> 3; } if ((BytesPerRow * req_height) <= Available) { PutImageRequest(dpy, d, gc, image, req_xoffset, req_yoffset, x, y, req_width, req_height, dest_bits_per_pixel, dest_scanline_pad); } else if (req_height > 1) { int SubImageHeight = Available / BytesPerRow; if (SubImageHeight == 0) SubImageHeight = 1; PutSubImage(dpy, d, gc, image, req_xoffset, req_yoffset, x, y, req_width, (unsigned int) SubImageHeight, dest_bits_per_pixel, dest_scanline_pad); PutSubImage(dpy, d, gc, image, req_xoffset, req_yoffset + SubImageHeight, x, y + SubImageHeight, req_width, req_height - SubImageHeight, dest_bits_per_pixel, dest_scanline_pad); } else { int SubImageWidth = (((Available << 3) / dest_scanline_pad) * dest_scanline_pad) - left_pad; PutSubImage(dpy, d, gc, image, req_xoffset, req_yoffset, x, y, (unsigned int) SubImageWidth, 1, dest_bits_per_pixel, dest_scanline_pad); PutSubImage(dpy, d, gc, image, req_xoffset + SubImageWidth, req_yoffset, x + SubImageWidth, y, req_width - SubImageWidth, 1, dest_bits_per_pixel, dest_scanline_pad); } } int XPutImage ( register Display *dpy, Drawable d, GC gc, register XImage *image, int req_xoffset, int req_yoffset, int x, int y, unsigned int req_width, unsigned int req_height) { long width = req_width; long height = req_height; int dest_bits_per_pixel, dest_scanline_pad; if (req_xoffset < 0) { width += req_xoffset; req_xoffset = 0; } if (req_yoffset < 0) { height += req_yoffset; req_yoffset = 0; } if ((req_xoffset + width) > image->width) width = image->width - req_xoffset; if ((req_yoffset + height) > image->height) height = image->height - req_yoffset; if ((width <= 0) || (height <= 0)) return 0; if ((image->bits_per_pixel == 1) || (image->format != ZPixmap)) { dest_bits_per_pixel = 1; dest_scanline_pad = dpy->bitmap_pad; } else { register int n; register ScreenFormat *format; dest_bits_per_pixel = image->bits_per_pixel; dest_scanline_pad = image->bitmap_pad; for (n = dpy->nformats, format = dpy->pixmap_format; --n >= 0; format++) if (format->depth == image->depth) { dest_bits_per_pixel = format->bits_per_pixel; dest_scanline_pad = format->scanline_pad; } if (dest_bits_per_pixel != image->bits_per_pixel) { XImage img; register long i, j; /* XXX slow, but works */ img.width = width; img.height = height; img.xoffset = 0; img.format = ZPixmap; img.byte_order = dpy->byte_order; img.bitmap_unit = dpy->bitmap_unit; img.bitmap_bit_order = dpy->bitmap_bit_order; img.bitmap_pad = dest_scanline_pad; img.depth = image->depth; img.bits_per_pixel = dest_bits_per_pixel; img.bytes_per_line = ROUNDUP((dest_bits_per_pixel * width), dest_scanline_pad) >> 3; img.data = Xmalloc(img.bytes_per_line * height); if (img.data == NULL) return 0; _XInitImageFuncPtrs(&img); for (j = height; --j >= 0; ) for (i = width; --i >= 0; ) XPutPixel(&img, i, j, XGetPixel(image, req_xoffset + i, req_yoffset + j)); LockDisplay(dpy); FlushGC(dpy, gc); PutSubImage(dpy, d, gc, &img, 0, 0, x, y, (unsigned int) width, (unsigned int) height, dest_bits_per_pixel, dest_scanline_pad); UnlockDisplay(dpy); SyncHandle(); Xfree(img.data); return 0; } } LockDisplay(dpy); FlushGC(dpy, gc); PutSubImage(dpy, d, gc, image, req_xoffset, req_yoffset, x, y, (unsigned int) width, (unsigned int) height, dest_bits_per_pixel, dest_scanline_pad); UnlockDisplay(dpy); SyncHandle(); #ifdef USE_DYNAMIC_XCURSOR if (image->bits_per_pixel == 1 && x == 0 && y == 0 && width == image->width && height == image->height && gc->values.function == GXcopy && (gc->values.plane_mask & 1)) { _XNoticePutBitmap (dpy, d, image); } #endif return 0; } it - 1) >> 3; if ((total_xoffset > 0) && (image->byte_order != image->bitmap_bit_order)) { char *temp; long bytes_per_temp_plane, temp_llibX11-1.6.3/src/FontInfo.c000064401431060000012000000142131247741723500155340ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include #if defined(XF86BIGFONT) #define USE_XF86BIGFONT #endif #ifdef USE_XF86BIGFONT extern void _XF86BigfontFreeFontMetrics( XFontStruct* /* fs */ ); #endif char **XListFontsWithInfo( register Display *dpy, _Xconst char *pattern, /* null-terminated */ int maxNames, int *actualCount, /* RETURN */ XFontStruct **info) /* RETURN */ { unsigned long nbytes; unsigned long reply_left; /* unused data left in reply buffer */ register int i; register XFontStruct *fs; unsigned int size = 0; XFontStruct *finfo = NULL; char **flist = NULL; xListFontsWithInfoReply reply; register xListFontsReq *req; int j; LockDisplay(dpy); GetReq(ListFontsWithInfo, req); req->maxNames = maxNames; nbytes = req->nbytes = pattern ? strlen (pattern) : 0; req->length += (nbytes + 3) >> 2; _XSend (dpy, pattern, nbytes); /* use _XSend instead of Data, since subsequent _XReply will flush buffer */ for (i = 0; ; i++) { if (!_XReply (dpy, (xReply *) &reply, ((SIZEOF(xListFontsWithInfoReply) - SIZEOF(xGenericReply)) >> 2), xFalse)) { reply.nameLength = 0; /* avoid trying to read more replies */ reply_left = 0; goto badmem; } reply_left = reply.length - ((SIZEOF(xListFontsWithInfoReply) - SIZEOF(xGenericReply)) >> 2); if (reply.nameLength == 0) { _XEatDataWords(dpy, reply_left); break; } if (reply.nReplies >= (INT_MAX - i)) /* avoid overflowing size */ goto badmem; if ((i + reply.nReplies) >= size) { size = i + reply.nReplies + 1; if (size >= (INT_MAX / sizeof(XFontStruct))) goto badmem; if (finfo) { XFontStruct * tmp_finfo; char ** tmp_flist; tmp_finfo = Xrealloc (finfo, sizeof(XFontStruct) * size); if (tmp_finfo) finfo = tmp_finfo; else goto badmem; tmp_flist = Xrealloc (flist, sizeof(char *) * (size+1)); if (tmp_flist) flist = tmp_flist; else goto badmem; } else { if (! (finfo = Xmalloc(sizeof(XFontStruct) * size))) goto clearwire; if (! (flist = Xmalloc(sizeof(char *) * (size+1)))) { Xfree(finfo); goto clearwire; } } } fs = &finfo[i]; fs->ext_data = NULL; fs->per_char = NULL; fs->fid = None; fs->direction = reply.drawDirection; fs->min_char_or_byte2 = reply.minCharOrByte2; fs->max_char_or_byte2 = reply.maxCharOrByte2; fs->min_byte1 = reply.minByte1; fs->max_byte1 = reply.maxByte1; fs->default_char = reply.defaultChar; fs->all_chars_exist = reply.allCharsExist; fs->ascent = cvtINT16toInt (reply.fontAscent); fs->descent = cvtINT16toInt (reply.fontDescent); /* XXX the next two statements won't work if short isn't 16 bits */ fs->min_bounds = * (XCharStruct *) &reply.minBounds; fs->max_bounds = * (XCharStruct *) &reply.maxBounds; fs->n_properties = reply.nFontProps; fs->properties = NULL; if (fs->n_properties > 0) { /* nFontProps is a CARD16 */ nbytes = reply.nFontProps * SIZEOF(xFontProp); if ((nbytes >> 2) <= reply_left) { size_t pbytes = reply.nFontProps * sizeof(XFontProp); fs->properties = Xmalloc (pbytes); } if (! fs->properties) goto badmem; _XRead32 (dpy, (long *)fs->properties, nbytes); reply_left -= (nbytes >> 2); } /* nameLength is a CARD8 */ nbytes = reply.nameLength + 1; if (!i) nbytes++; /* make first string 1 byte longer, to match XListFonts */ flist[i] = Xmalloc (nbytes); if (! flist[i]) { if (finfo[i].properties) Xfree(finfo[i].properties); goto badmem; } if (!i) { *flist[0] = 0; /* zero to distinguish from XListFonts */ flist[0]++; } flist[i][reply.nameLength] = '\0'; _XReadPad (dpy, flist[i], (long) reply.nameLength); } *info = finfo; *actualCount = i; if (flist) flist[i] = NULL; /* required in case XFreeFontNames is called */ UnlockDisplay(dpy); SyncHandle(); return (flist); badmem: /* Free all memory allocated by this function. */ for (j=(i-1); (j >= 0); j--) { if (j == 0) flist[j]--; /* was incremented above */ Xfree(flist[j]); if (finfo[j].properties) Xfree(finfo[j].properties); } Xfree(flist); Xfree(finfo); clearwire: /* Clear the wire. */ _XEatDataWords(dpy, reply_left); while ((reply.nameLength != 0) && _XReply(dpy, (xReply *) &reply, ((SIZEOF(xListFontsWithInfoReply) - SIZEOF(xGenericReply)) >> 2), xTrue)); UnlockDisplay(dpy); SyncHandle(); *info = NULL; *actualCount = 0; return (char **) NULL; } int XFreeFontInfo ( char **names, XFontStruct *info, int actualCount) { register int i; if (names) { Xfree (names[0]-1); for (i = 1; i < actualCount; i++) { Xfree (names[i]); } Xfree(names); } if (info) { for (i = 0; i < actualCount; i++) { if (info[i].per_char) #ifdef USE_XF86BIGFONT _XF86BigfontFreeFontMetrics(&info[i]); #else Xfree (info[i].per_char); #endif if (info[i].properties) Xfree (info[i].properties); } Xfree(info); } return 1; } libX11-1.6.3/src/SelInput.c000064401431060000012000000030751247741723500155610ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XSelectInput ( register Display *dpy, Window w, long mask) { register xChangeWindowAttributesReq *req; LockDisplay(dpy); GetReqExtra (ChangeWindowAttributes, 4, req); req->window = w; req->valueMask = CWEventMask; OneDataCard32 (dpy, NEXTPTR(req,xChangeWindowAttributesReq), mask); UnlockDisplay(dpy); SyncHandle(); return 1; } MITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP 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. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise tlibX11-1.6.3/src/ChGC.c000064401431060000012000000031661247741723500145630ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Cr.h" int XChangeGC ( register Display *dpy, GC gc, unsigned long valuemask, XGCValues *values) { LockDisplay(dpy); valuemask &= (1L << (GCLastBit + 1)) - 1; if (valuemask) _XUpdateGCCache (gc, valuemask, values); /* if any Resource ID changed, must flush */ if (gc->dirty & (GCFont | GCTile | GCStipple)) _XFlushGCCache(dpy, gc); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/ChWAttrs.c000064401431060000012000000036311247741723500155130ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #define AllMaskBits (CWBackPixmap|CWBackPixel|CWBorderPixmap|\ CWBorderPixel|CWBitGravity|CWWinGravity|\ CWBackingStore|CWBackingPlanes|CWBackingPixel|\ CWOverrideRedirect|CWSaveUnder|CWEventMask|\ CWDontPropagate|CWColormap|CWCursor) int XChangeWindowAttributes ( register Display *dpy, Window w, unsigned long valuemask, XSetWindowAttributes *attributes) { register xChangeWindowAttributesReq *req; LockDisplay(dpy); GetReq(ChangeWindowAttributes,req); req->window = w; valuemask &= AllMaskBits; if ((req->valueMask = valuemask)) _XProcessWindowAttributes (dpy, req, valuemask, attributes); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/GetFProp.c000064401431060000012000000033261247741723500155030ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" Bool XGetFontProperty( XFontStruct *fs, register Atom name, unsigned long *valuePtr) { /* XXX this is a simple linear search for now. If the protocol is changed to sort the property list, this should become a binary search. */ register XFontProp *prop = fs->properties; register XFontProp *last = prop + fs->n_properties; while (prop != last) { if (prop->name == name) { *valuePtr = prop->card32; return (1); } prop++; } return (0); } libX11-1.6.3/src/DefCursor.c000064401431060000012000000031001247741723500156770ustar00alancstaff00002660200006/* Copyright 1986,1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XDefineCursor ( register Display *dpy, Window w, Cursor cursor) { register xChangeWindowAttributesReq *req; LockDisplay(dpy); GetReqExtra (ChangeWindowAttributes, 4, req); req->window = w; req->valueMask = CWCursor; OneDataCard32 (dpy, NEXTPTR(req,xChangeWindowAttributesReq), cursor); UnlockDisplay(dpy); SyncHandle(); return 1; } D TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP 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. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise tolibX11-1.6.3/src/FreePix.c000064401431060000012000000026311247741723500153550ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XFreePixmap( register Display *dpy, Pixmap pixmap) { register xResourceReq *req; LockDisplay(dpy); GetResReq(FreePixmap, pixmap, req); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/CopyArea.c000064401431060000012000000034661247741723500155250ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XCopyArea( register Display *dpy, Drawable src_drawable, Drawable dst_drawable, GC gc, int src_x, int src_y, unsigned int width, unsigned int height, int dst_x, int dst_y) { register xCopyAreaReq *req; LockDisplay(dpy); FlushGC(dpy, gc); GetReq(CopyArea, req); req->srcDrawable = src_drawable; req->dstDrawable = dst_drawable; req->gc = gc->gid; req->srcX = src_x; req->srcY = src_y; req->dstX = dst_x; req->dstY = dst_y; req->width = width; req->height = height; UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/WinEvent.c000064401431060000012000000052311247741723500155510ustar00alancstaff00002660200006/* Copyright 1985, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" extern long const _Xevent_to_mask[]; #define AllPointers (PointerMotionMask|PointerMotionHintMask|ButtonMotionMask) #define AllButtons (Button1MotionMask|Button2MotionMask|Button3MotionMask|\ Button4MotionMask|Button5MotionMask) /* * Return the next event in the queue * for the given window matching one of the events in the mask. * Events earlier in the queue are not discarded. * If none found, flush, and then wait until an event arrives which * matches. */ int XWindowEvent ( register Display *dpy, Window w, /* Selected window. */ long mask, /* Selected event mask. */ register XEvent *event) /* XEvent to be filled in. */ { register _XQEvent *prev, *qelt; unsigned long qe_serial = 0; LockDisplay(dpy); /* Delete unclaimed cookies */ _XFreeEventCookies(dpy); prev = NULL; while (1) { for (qelt = prev ? prev->next : dpy->head; qelt; prev = qelt, qelt = qelt->next) { if ((qelt->event.xany.window == w) && (qelt->event.type < GenericEvent) && (_Xevent_to_mask[qelt->event.type] & mask) && ((qelt->event.type != MotionNotify) || (mask & AllPointers) || (mask & AllButtons & qelt->event.xmotion.state))) { *event = qelt->event; _XDeq(dpy, prev, qelt); UnlockDisplay(dpy); return 0; } } if (prev) qe_serial = prev->qserial_num; _XReadEvents(dpy); if (prev && prev->qserial_num != qe_serial) /* another thread has snatched this event */ prev = NULL; } } libX11-1.6.3/src/QuColor.c000064401431060000012000000036311247741723500154000ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XQueryColor( register Display *dpy, Colormap cmap, XColor *def) /* RETURN */ { xrgb color; xQueryColorsReply rep; register xQueryColorsReq *req; unsigned long val = def->pixel; /* needed for macro below */ LockDisplay(dpy); GetReqExtra(QueryColors, 4, req); /* a pixel (CARD32) is 4 bytes */ req->cmap = cmap; OneDataCard32 (dpy, NEXTPTR(req,xQueryColorsReq), val); if (_XReply(dpy, (xReply *) &rep, 0, xFalse) != 0) { _XRead(dpy, (char *)&color, (long) SIZEOF(xrgb)); def->red = color.red; def->blue = color.blue; def->green = color.green; def->flags = DoRed | DoGreen | DoBlue; } UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/ChSaveSet.c000064401431060000012000000033011247741723500156330ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XChangeSaveSet( register Display *dpy, Window win, int mode) { register xChangeSaveSetReq *req; LockDisplay(dpy); GetReq(ChangeSaveSet, req); req->window = win; req->mode = mode; UnlockDisplay(dpy); SyncHandle(); return 1; } int XAddToSaveSet( register Display *dpy, Window win) { return XChangeSaveSet(dpy,win,SetModeInsert); } int XRemoveFromSaveSet ( register Display *dpy, Window win) { return XChangeSaveSet(dpy,win,SetModeDelete); } libX11-1.6.3/src/ChCmap.c000064401431060000012000000031151247741723500151440ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XSetWindowColormap( register Display *dpy, Window w, Colormap colormap) { register xChangeWindowAttributesReq *req; LockDisplay(dpy); GetReqExtra (ChangeWindowAttributes, 4, req); req->window = w; req->valueMask = CWColormap; OneDataCard32 (dpy, NEXTPTR(req,xChangeWindowAttributesReq), colormap); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/GetColor.c000064401431060000012000000061641247741723500155360ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include #include "Xlibint.h" #include "Xcmsint.h" Status XAllocNamedColor( register Display *dpy, Colormap cmap, _Xconst char *colorname, /* STRING8 */ XColor *hard_def, /* RETURN */ XColor *exact_def) /* RETURN */ { long nbytes; xAllocNamedColorReply rep; xAllocNamedColorReq *req; XcmsCCC ccc; XcmsColor cmsColor_exact; Status ret; #ifdef XCMS /* * Let's Attempt to use Xcms and i18n approach to Parse Color */ if ((ccc = XcmsCCCOfColormap(dpy, cmap)) != (XcmsCCC)NULL) { const char *tmpName = colorname; switch (_XcmsResolveColorString(ccc, &tmpName, &cmsColor_exact, XcmsRGBFormat)) { case XcmsSuccess: case XcmsSuccessWithCompression: _XcmsRGB_to_XColor(&cmsColor_exact, exact_def, 1); memcpy((char *)hard_def, (char *)exact_def, sizeof(XColor)); ret = XAllocColor(dpy, cmap, hard_def); exact_def->pixel = hard_def->pixel; return(ret); case XcmsFailure: case _XCMS_NEWNAME: /* * if the result was _XCMS_NEWNAME tmpName points to * a string in cmsColNm.c:pairs table, for example, * gray70 would become tekhvc:0.0/70.0/0.0 */ break; } } #endif /* * Xcms and i18n approach failed. */ LockDisplay(dpy); GetReq(AllocNamedColor, req); req->cmap = cmap; nbytes = req->nbytes = strlen(colorname); req->length += (nbytes + 3) >> 2; /* round up to mult of 4 */ _XSend(dpy, colorname, nbytes); /* _XSend is more efficient that Data, since _XReply follows */ if (!_XReply (dpy, (xReply *) &rep, 0, xTrue)) { UnlockDisplay(dpy); SyncHandle(); return (0); } exact_def->red = rep.exactRed; exact_def->green = rep.exactGreen; exact_def->blue = rep.exactBlue; hard_def->red = rep.screenRed; hard_def->green = rep.screenGreen; hard_def->blue = rep.screenBlue; exact_def->pixel = hard_def->pixel = rep.pixel; UnlockDisplay(dpy); SyncHandle(); return (1); } s documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WlibX11-1.6.3/src/UngrabKey.c000064401431060000012000000030311247741723500156750ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XUngrabKey( register Display *dpy, int key, unsigned int modifiers, Window grab_window) { register xUngrabKeyReq *req; LockDisplay(dpy); GetReq(UngrabKey, req); req->grabWindow = grab_window; req->modifiers = modifiers; req->key = key; UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/PeekIfEv.c000064401431060000012000000043771247741723500154620ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" /* * return the next event in the queue that satisfies the predicate. * BUT do not remove it from the queue. * If none found, flush, and then wait until one satisfies the predicate. */ int XPeekIfEvent ( register Display *dpy, register XEvent *event, Bool (*predicate)( Display* /* display */, XEvent* /* event */, char* /* arg */ ), char *arg) { register _XQEvent *prev, *qelt; unsigned long qe_serial = 0; LockDisplay(dpy); prev = NULL; while (1) { for (qelt = prev ? prev->next : dpy->head; qelt; prev = qelt, qelt = qelt->next) { if(qelt->qserial_num > qe_serial && (*predicate)(dpy, &qelt->event, arg)) { XEvent copy; *event = qelt->event; if (_XCopyEventCookie(dpy, &event->xcookie, ©.xcookie)) { _XStoreEventCookie(dpy, ©); *event = copy; } UnlockDisplay(dpy); return 0; } } if (prev) qe_serial = prev->qserial_num; _XReadEvents(dpy); if (prev && prev->qserial_num != qe_serial) /* another thread has snatched this event */ prev = NULL; } } libX11-1.6.3/src/Xxcbint.h000064401431060000012000000023011247741723500154310ustar00alancstaff00002660200006/* Copyright (C) 2003-2006 Jamey Sharp, Josh Triplett * This file is licensed under the MIT license. See the file COPYING. */ #ifndef XXCBINT_H #define XXCBINT_H #include #include #include #ifdef WIN32 #include #endif #include #include "locking.h" #define XLIB_SEQUENCE_COMPARE(a,op,b) (((long) (a) - (long) (b)) op 0) typedef struct PendingRequest PendingRequest; struct PendingRequest { PendingRequest *next; unsigned long sequence; unsigned reply_waiter; }; typedef struct _X11XCBPrivate { xcb_connection_t *connection; PendingRequest *pending_requests; PendingRequest *pending_requests_tail; xcb_generic_event_t *next_event; char *real_bufmax; char *reply_data; int reply_length; int reply_consumed; uint64_t last_flushed; enum XEventQueueOwner event_owner; XID next_xid; /* handle simultaneous threads waiting for responses */ xcondition_t event_notify; int event_waiter; xcondition_t reply_notify; } _X11XCBPrivate; /* xcb_disp.c */ int _XConnectXCB(Display *dpy, _Xconst char *display, int *screenp); void _XFreeX11XCBStructure(Display *dpy); unsigned long _XNextRequest(Display *dpy); #endif /* XXCBINT_H */ libX11-1.6.3/src/DrPoint.c000064401431060000012000000044631247741723500153770ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" /* precompute the maximum size of batching request allowed */ #define size (SIZEOF(xPolyPointReq) + PTSPERBATCH * SIZEOF(xPoint)) int XDrawPoint( register Display *dpy, Drawable d, GC gc, int x, int y) /* INT16 */ { xPoint *point; LockDisplay(dpy); FlushGC(dpy, gc); { register xPolyPointReq *req = (xPolyPointReq *) dpy->last_req; /* if same as previous request, with same drawable, batch requests */ if ( (req->reqType == X_PolyPoint) && (req->drawable == d) && (req->gc == gc->gid) && (req->coordMode == CoordModeOrigin) && ((dpy->bufptr + SIZEOF(xPoint)) <= dpy->bufmax) && (((char *)dpy->bufptr - (char *)req) < size) ) { req->length += SIZEOF(xPoint) >> 2; point = (xPoint *) dpy->bufptr; dpy->bufptr += SIZEOF(xPoint); } else { GetReqExtra(PolyPoint, 4, req); /* 1 point = 4 bytes */ req->drawable = d; req->gc = gc->gid; req->coordMode = CoordModeOrigin; point = (xPoint *) NEXTPTR(req,xPolyPointReq); } point->x = x; point->y = y; } UnlockDisplay(dpy); SyncHandle(); return 1; } FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise tlibX11-1.6.3/src/RepWindow.c000064401431060000012000000030061247741723500157260ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XReparentWindow( register Display *dpy, Window w, Window p, int x, int y) { register xReparentWindowReq *req; LockDisplay(dpy); GetReq(ReparentWindow, req); req->window = w; req->parent = p; req->x = x; req->y = y; UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/GetProp.c000064401431060000012000000105441247741723500153750ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include int XGetWindowProperty( register Display *dpy, Window w, Atom property, long offset, long length, Bool delete, Atom req_type, Atom *actual_type, /* RETURN */ int *actual_format, /* RETURN 8, 16, or 32 */ unsigned long *nitems, /* RETURN # of 8-, 16-, or 32-bit entities */ unsigned long *bytesafter, /* RETURN */ unsigned char **prop) /* RETURN */ { xGetPropertyReply reply; register xGetPropertyReq *req; xError error = {0}; /* Always initialize return values, in case callers fail to initialize them and fail to check the return code for an error. */ *actual_type = None; *actual_format = 0; *nitems = *bytesafter = 0L; *prop = (unsigned char *) NULL; LockDisplay(dpy); GetReq (GetProperty, req); req->window = w; req->property = property; req->type = req_type; req->delete = delete; req->longOffset = offset; req->longLength = length; error.sequenceNumber = dpy->request; if (!_XReply (dpy, (xReply *) &reply, 0, xFalse)) { UnlockDisplay(dpy); SyncHandle(); return (1); /* not Success */ } if (reply.propertyType != None) { unsigned long nbytes, netbytes; int format = reply.format; /* * Protect against both integer overflow and just plain oversized * memory allocation - no server should ever return this many props. */ if (reply.nItems >= (INT_MAX >> 4)) format = -1; /* fall through to default error case */ switch (format) { /* * One extra byte is malloced than is needed to contain the property * data, but this last byte is null terminated and convenient for * returning string properties, so the client doesn't then have to * recopy the string to make it null terminated. */ case 8: nbytes = netbytes = reply.nItems; if (nbytes + 1 > 0 && (*prop = Xmalloc (nbytes + 1))) _XReadPad (dpy, (char *) *prop, netbytes); break; case 16: nbytes = reply.nItems * sizeof (short); netbytes = reply.nItems << 1; if (nbytes + 1 > 0 && (*prop = Xmalloc (nbytes + 1))) _XRead16Pad (dpy, (short *) *prop, netbytes); break; case 32: nbytes = reply.nItems * sizeof (long); netbytes = reply.nItems << 2; if (nbytes + 1 > 0 && (*prop = Xmalloc (nbytes + 1))) _XRead32 (dpy, (long *) *prop, netbytes); break; default: /* * This part of the code should never be reached. If it is, * the server sent back a property with an invalid format. * This is a BadImplementation error. */ { /* sequence number stored above */ error.type = X_Error; error.majorCode = X_GetProperty; error.minorCode = 0; error.errorCode = BadImplementation; _XError(dpy, &error); } nbytes = netbytes = 0L; break; } if (! *prop) { _XEatDataWords(dpy, reply.length); UnlockDisplay(dpy); SyncHandle(); return(BadAlloc); /* not Success */ } (*prop)[nbytes] = '\0'; } *actual_type = reply.propertyType; *actual_format = reply.format; *nitems = reply.nItems; *bytesafter = reply.bytesAfter; UnlockDisplay(dpy); SyncHandle(); return(Success); } libX11-1.6.3/src/GetKCnt.c000064401431060000012000000036251247741723500153160ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XGetKeyboardControl ( register Display *dpy, register XKeyboardState *state) { xGetKeyboardControlReply rep; register xReq *req; LockDisplay(dpy); GetEmptyReq (GetKeyboardControl, req); (void) _XReply (dpy, (xReply *) &rep, (SIZEOF(xGetKeyboardControlReply) - SIZEOF(xReply)) >> 2, xTrue); state->key_click_percent = rep.keyClickPercent; state->bell_percent = rep.bellPercent; state->bell_pitch = rep.bellPitch; state->bell_duration = rep.bellDuration; state->led_mask = rep.ledMask; state->global_auto_repeat = rep.globalAutoRepeat; memcpy (state->auto_repeats, rep.map, sizeof state->auto_repeats); UnlockDisplay(dpy); SyncHandle(); return 1; } ept as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise tlibX11-1.6.3/src/CrBFData.c000064401431060000012000000051271247741723500153640ustar00alancstaff00002660200006/* Copyright 1987, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlib.h" /* * XCreateBitmapFromData: Routine to make a pixmap of depth 1 from user * supplied data. * D is any drawable on the same screen that the pixmap will be used in. * Data is a pointer to the bit data, and * width & height give the size in bits of the pixmap. * * The following format is assumed for data: * * format=XYPixmap * bit_order=LSBFirst * byte_order=LSBFirst * padding=8 * bitmap_unit=8 * xoffset=0 * no extra bytes per line */ Pixmap XCreateBitmapFromData( Display *display, Drawable d, _Xconst char *data, unsigned int width, unsigned int height) { Pixmap pix = XCreatePixmap(display, d, width, height, 1); GC gc = XCreateGC(display, pix, (unsigned long) 0, (XGCValues *) 0); if (gc == NULL) { XFreePixmap(display, pix); return (Pixmap) None; } else { XImage ximage = { .height = height, .width = width, .depth = 1, .bits_per_pixel = 1, .xoffset = 0, .format = XYPixmap, .data = (char *) data, .byte_order = LSBFirst, .bitmap_unit = 8, .bitmap_bit_order = LSBFirst, .bitmap_pad = 8, .bytes_per_line = (width + 7) / 8, }; XPutImage(display, pix, gc, &ximage, 0, 0, 0, 0, width, height); XFreeGC(display, gc); return(pix); } } libX11-1.6.3/src/SetFunc.c000064401431060000012000000027101247741723500153600ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XSetFunction ( register Display *dpy, GC gc, int function) { LockDisplay(dpy); if (gc->values.function != function) { gc->values.function = function; gc->dirty |= GCFunction; } UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/Backgnd.c000064401431060000012000000031171247741723500153440ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XSetWindowBackground( register Display *dpy, Window w, unsigned long pixel) { register xChangeWindowAttributesReq *req; LockDisplay(dpy); GetReqExtra (ChangeWindowAttributes, 4, req); req->window = w; req->valueMask = CWBackPixel; OneDataCard32 (dpy, NEXTPTR(req,xChangeWindowAttributesReq), pixel); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/GetWMProto.c000064401431060000012000000060531247741723500160240ustar00alancstaff00002660200006 /*********************************************************** Copyright 1987, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include #include Status XGetWMProtocols ( Display *dpy, Window w, Atom **protocols, int *countReturn) { Atom *data = NULL; Atom actual_type; Atom prop; int actual_format; unsigned long leftover, nitems; prop = XInternAtom(dpy, "WM_PROTOCOLS", False); if (prop == None) return False; /* get the property */ if (XGetWindowProperty (dpy, w, prop, 0L, 1000000L, False, XA_ATOM, &actual_type, &actual_format, &nitems, &leftover, (unsigned char **) &data) != Success) return False; if (actual_type != XA_ATOM || actual_format != 32) { Xfree (data); return False; } *protocols = (Atom *) data; *countReturn = (int) nitems; return True; } libX11-1.6.3/src/ChAccCon.c000064401431060000012000000032031247741723500154100ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XEnableAccessControl(register Display *dpy) { return XSetAccessControl(dpy, EnableAccess); } int XDisableAccessControl(register Display *dpy) { return XSetAccessControl(dpy, DisableAccess); } int XSetAccessControl( register Display *dpy, int mode) { register xSetAccessControlReq *req; LockDisplay(dpy); GetReq(SetAccessControl, req); req->mode = mode; UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/ScrResStr.c000064401431060000012000000034701247741723500157070ustar00alancstaff00002660200006/* Copyright 1991, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include char *XScreenResourceString(Screen *screen) { Atom prop_name; Atom actual_type; int actual_format; unsigned long nitems; unsigned long leftover; char *val = NULL; prop_name = XInternAtom(screen->display, "SCREEN_RESOURCES", True); if (prop_name && XGetWindowProperty(screen->display, screen->root, prop_name, 0L, 100000000L, False, XA_STRING, &actual_type, &actual_format, &nitems, &leftover, (unsigned char **) &val) == Success) { if ((actual_type == XA_STRING) && (actual_format == 8)) return val; Xfree(val); } return (char *)NULL; } libX11-1.6.3/src/WrBitF.c000064401431060000012000000073431247741723500151550ustar00alancstaff00002660200006/* Copyright 1987, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include #include "Xutil.h" #include #define ERR_RETURN NULL static char *Format_Image( XImage *image, int *resultsize) { register int x, c, b; register char *ptr; int y; char *data; int width, height; int bytes_per_line; width = image->width; height = image->height; bytes_per_line = (width+7)/8; *resultsize = bytes_per_line * height; /* Calculate size of data */ data = Xmalloc( *resultsize ); /* Get space for data */ if (!data) return(ERR_RETURN); /* * The slow but robust brute force method of converting the image: */ ptr = data; c = 0; b=1; for (y=0; y * * * 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: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", 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 * HOLGER VEIT 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. * * Except as contained in this notice, the name of Sebastien Marineau or Holger Veit * shall not be used in advertising or otherwise to promote the sale, use or other * dealings in this Software without prior written authorization from Holger Veit or * Sebastien Marineau. * */ /* A few OS/2 functions needed in the X11 lib. Mainly, the file path redirection * functions and the "optimized" select() for the clients */ #define I_NEED_OS2_H #ifdef HAVE_CONFIG_H #include #endif #include #include #include #define INCL_DOSSEMAPHORES #define INCL_DOSNPIPES #define INCL_DOSMISC #define INCL_DOSMODULEMGR #undef BOOL #undef BYTE #include #include #include char *__XOS2RedirRoot(char *fname) { /* This adds a further redirection by allowing the ProjectRoot * to be prepended by the content of the envvar X11ROOT. * This is for the purpose to move the whole X11 stuff to a different * disk drive. * The feature was added despite various environment variables * because not all file opens respect them. */ static char redirname[300]; /* enough for long filenames */ char *root; /* if name does not start with /, assume it is not root-based */ if (fname==0 || !(fname[0]=='/' || fname[0]=='\\')) return fname; root = (char*)getenv("X11ROOT"); if (root==0 || (fname[1]==':' && isalpha(fname[0])) || (strlen(fname)+strlen(root)+2) > 300) return fname; sprintf(redirname,"%s%s",root,fname); return redirname; } char *__XOS2RedirRoot1(char *format, char *arg1, char *arg2, char *arg3) { /* this first constructs a name from a format and up to three * components, then adds a path */ char buf[300]; sprintf(buf,format,arg1,arg2,arg3); return __XOS2RedirRoot(buf); } /* This below implements select() for the calls in this file. It has been */ /* somewhat optimized for improved performance, but assumes a few */ /* things so it cannot be used as a general select. If both pipes and */ /* sockets are present, this may call the emx select */ HEV hPipeSem; HMODULE hmod_so32dll; static int (*os2_tcp_select)(int*,int,int,int,long); ULONG os2_get_sys_millis(); extern int _files[]; #define MAX_TCP 256 /* These lifted from sys/emx.h. Change if that changes there! */ #define F_SOCKET 0x10000000 #define F_PIPE 0x20000000 struct select_data { fd_set read_copy; fd_set write_copy; BOOL have_read; BOOL have_write; int tcp_select_mask[MAX_TCP]; int tcp_emx_handles[MAX_TCP]; int tcp_select_copy[MAX_TCP]; int socket_nread; int socket_nwrite; int socket_ntotal; int pipe_ntotal; int pipe_have_write; int max_fds; }; int os2ClientSelect(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout) { static BOOL FirstTime=TRUE; static haveTCPIP=TRUE; ULONG timeout_ms; ULONG postCount, start_millis,now_millis; char faildata[16]; struct select_data sd; BOOL any_ready; int np,ns, i,ready_handles,n; APIRET rc; sd.have_read=FALSE; sd.have_write=FALSE; sd.socket_nread=0; sd.socket_nwrite=0; sd.socket_ntotal=0; sd.max_fds=31; ready_handles=0; any_ready=FALSE; sd.pipe_ntotal=0; sd.pipe_have_write=FALSE; if(FirstTime){ /* First load the so32dll.dll module and get a pointer to the SELECT fn */ if((rc=DosLoadModule(faildata,sizeof(faildata),"SO32DLL",&hmod_so32dll))!=0){ fprintf(stderr, "Could not load module so32dll.dll, rc = %d. Error note %s\n",rc,faildata); haveTCPIP=FALSE; } if((rc = DosQueryProcAddr(hmod_so32dll, 0, "SELECT", (PPFN)&os2_tcp_select))!=0){ fprintf(stderr, "Could not query address of SELECT, rc = %d.\n",rc); haveTCPIP=FALSE; } /* Call these a first time to set the semaphore */ rc = DosCreateEventSem(NULL, &hPipeSem, DC_SEM_SHARED, FALSE); if(rc) { fprintf(stderr, "Could not create event semaphore, rc=%d\n",rc); return(-1); } rc = DosResetEventSem(hPipeSem, &postCount); FirstTime = FALSE; } /* Set up the time delay structs */ if(timeout!=NULL) { timeout_ms=timeout->tv_sec*1000+timeout->tv_usec/1000; } else { timeout_ms=1000000; } /* This should be large enough... */ if(timeout_ms>0) start_millis=os2_get_sys_millis(); /* Copy the masks */ {FD_ZERO(&sd.read_copy);} {FD_ZERO(&sd.write_copy);} if(readfds!=NULL){ XFD_COPYSET(readfds,&sd.read_copy); sd.have_read=TRUE;} if(writefds!=NULL) {XFD_COPYSET(writefds,&sd.write_copy);sd.have_write=TRUE;} /* And zero the original masks */ if(sd.have_read){ FD_ZERO(readfds);} if(sd.have_write) {FD_ZERO(writefds);} if(exceptfds != NULL) {FD_ZERO(exceptfds);} /* Now we parse the fd_sets passed to select and separate pipe/sockets */ n = os2_parse_select(&sd,nfds); if(n == -1) { errno = EBADF; return (-1); } /* Now we have three cases: either we have sockets, pipes, or both */ /* We handle all three cases differently to optimize things */ /* Case 1: only pipes! */ if((sd.pipe_ntotal >0) && (!sd.socket_ntotal)){ np = os2_check_pipes(&sd,readfds,writefds); if(np > 0){ return (np); } else if (np == -1) { return(-1); } while(!any_ready){ rc = DosWaitEventSem(hPipeSem, timeout_ms); if(rc == 640) { return(0); } if((rc != 0) && (rc != 95)) {errno= EBADF; return(-1);} np = os2_check_pipes(&sd,readfds,writefds); if (np > 0){ return(np); } else if (np < 0){ return(-1); } } } /* Case 2: only sockets. Just let the os/2 tcp select do the work */ if((sd.socket_ntotal > 0) && (!sd.pipe_ntotal)){ ns = os2_check_sockets(&sd, readfds, writefds, timeout_ms); return (ns); } /* Case 3: combination of both */ if((sd.socket_ntotal > 0) && (sd.pipe_ntotal)){ np = os2_check_pipes(&sd,readfds,writefds); if(np > 0){ any_ready=TRUE; ready_handles += np; } else if (np == -1) { return(-1); } ns = os2_check_sockets(&sd,readfds,writefds, 0); if(ns>0){ ready_handles+=ns; any_ready = TRUE; } else if (ns == -1) {return(-1);} while (!any_ready && timeout_ms){ rc = DosWaitEventSem(hPipeSem, 10L); if(rc == 0){ np = os2_check_pipes(&sd,readfds,writefds); if(np > 0){ ready_handles+=np; any_ready = TRUE; } else if (np == -1) { return(-1); } } ns = os2_check_sockets(&sd,readfds,writefds,exceptfds, 0); if(ns>0){ ready_handles+=ns; any_ready = TRUE; } else if (ns == -1) {return(-1);} if (i%8 == 0) { now_millis = os2_get_sys_millis(); if((now_millis-start_millis) > timeout_ms) timeout_ms = 0; } i++; } } return(ready_handles); } ULONG os2_get_sys_millis() { APIRET rc; ULONG milli; rc = DosQuerySysInfo(14, 14, &milli, sizeof(milli)); if(rc) { fprintf(stderr,"Bad return code querying the millisecond counter! rc=%d\n",rc); return(0); } return(milli); } int os2_parse_select(sd,nfds) struct select_data *sd; int nfds; { int i; APIRET rc; /* First we determine up to which descriptor we need to check. */ /* No need to check up to 256 if we don't have to (and usually we dont...)*/ /* Note: stuff here is hardcoded for fd_sets which are int[8] as in EMX!!! */ if(nfds > sd->max_fds){ for(i=0;i<((FD_SETSIZE+31)/32);i++){ if(sd->read_copy.fds_bits[i] || sd->write_copy.fds_bits[i]) sd->max_fds=(i*32) +32; } } else { sd->max_fds = nfds; } /* Check if result is greater than specified in select() call */ if(sd->max_fds > nfds) sd->max_fds = nfds; if (sd->have_read) { for (i = 0; i < sd->max_fds; ++i) { if (FD_ISSET (i, &sd->read_copy)){ if(_files[i] & F_SOCKET) { sd->tcp_select_mask[sd->socket_ntotal]=_getsockhandle(i); sd->tcp_emx_handles[sd->socket_ntotal]=i; sd->socket_ntotal++; sd->socket_nread++; } else if (_files[i] & F_PIPE) { sd -> pipe_ntotal++; rc = DosSetNPipeSem((HPIPE)i, (HSEM) hPipeSem, i); if(rc) { fprintf(stderr,"Error SETNPIPE rc = %d\n",rc); return -1;} } } } } if (sd->have_write) { for (i = 0; i < sd->max_fds; ++i) { if (FD_ISSET (i, &sd->write_copy)){ if(_files[i] & F_SOCKET) { sd->tcp_select_mask[sd->socket_ntotal]=_getsockhandle(i); sd->tcp_emx_handles[sd->socket_ntotal]=i; sd->socket_ntotal++; sd->socket_nwrite++; } else if (_files[i] & F_PIPE) { sd -> pipe_ntotal++; rc = DosSetNPipeSem((HPIPE)i, (HSEM) hPipeSem, i); if(rc) { fprintf(stderr,"Error SETNPIPE rc = %d\n",rc); return -1;} sd -> pipe_have_write=TRUE; } } } } return(sd->socket_ntotal); } int os2_check_sockets(sd,readfds,writefds) struct select_data *sd; fd_set *readfds,*writefds; { int e,i; int j,n; memcpy(sd->tcp_select_copy,sd->tcp_select_mask, sd->socket_ntotal*sizeof(int)); e = os2_tcp_select(sd->tcp_select_copy,sd->socket_nread, sd->socket_nwrite, 0, 0); if(e == 0) return(e); /* We have something ready? */ if(e>0){ j = 0; n = 0; for (i = 0; i < sd->socket_nread; ++i, ++j) if (sd->tcp_select_copy[j] != -1) { FD_SET (sd->tcp_emx_handles[j], readfds); n ++; } for (i = 0; i < sd->socket_nwrite; ++i, ++j) if (sd->tcp_select_copy[j] != -1) { FD_SET (sd->tcp_emx_handles[j], writefds); n ++; } errno = 0; return n; } if(e<0){ /*Error -- TODO */ fprintf(stderr,"Error in server select! e=%d\n",e); errno = EBADF; return (-1); } } /* Check to see if anything is ready on pipes */ int os2_check_pipes(sd,readfds,writefds) struct select_data *sd; fd_set *readfds,*writefds; { int i,e; ULONG ulPostCount; PIPESEMSTATE pipeSemState[128]; APIRET rc; e = 0; rc = DosResetEventSem(hPipeSem,&ulPostCount); rc = DosQueryNPipeSemState((HSEM) hPipeSem, (PPIPESEMSTATE)&pipeSemState, sizeof(pipeSemState)); if(rc) fprintf(stderr,"SELECT: rc from QueryNPipeSem: %d\n",rc); i=0; while (pipeSemState[i].fStatus != 0) { /*fprintf(stderr,"SELECT: sem entry, stat=%d, flag=%d, key=%d,avail=%d\n", pipeSemState[i].fStatus,pipeSemState[i].fFlag,pipeSemState[i].usKey, pipeSemState[i].usAvail); */ if((pipeSemState[i].fStatus == 1) && (FD_ISSET(pipeSemState[i].usKey,&sd->read_copy))){ FD_SET(pipeSemState[i].usKey,readfds); e++; } else if((pipeSemState[i].fStatus == 2) && (FD_ISSET(pipeSemState[i].usKey,&sd->write_copy))){ FD_SET(pipeSemState[i].usKey,writefds); e++; } else if( (pipeSemState[i].fStatus == 3) && ( (FD_ISSET(pipeSemState[i].usKey,&sd->read_copy)) || (FD_ISSET(pipeSemState[i].usKey,&sd->write_copy)) )){ errno = EBADF; return (-1); } i++; } /* endwhile */ /*fprintf(stderr,"Done listing pipe sem entries, total %d entries, total ready entries %d\n",i,e);*/ errno = 0; return(e); } return(0); } if((rc != 0) && (rc != 95)) {errno= EBADF; return(-1);} np = os2_check_pipes(&sd,readfds,writefds); if (np > 0){ return(np); } else if (np < 0){ return(-1); } } } /* Case 2: only sockets. Just let the os/2 tcp select do the work */ if((sd.socket_ntotal > 0) && (!sd.plibX11-1.6.3/src/GetSOwner.c000064401431060000012000000030371247741723500156710ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" Window XGetSelectionOwner( register Display *dpy, Atom selection) { xGetSelectionOwnerReply rep; register xResourceReq *req; LockDisplay(dpy); GetResReq(GetSelectionOwner, selection, req); if (_XReply(dpy, (xReply *)&rep, 0, xTrue) == 0) rep.owner = None; UnlockDisplay(dpy); SyncHandle(); return(rep.owner); } libX11-1.6.3/src/RaiseWin.c000064401431060000012000000031171247741723500155340ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XRaiseWindow ( register Display *dpy, Window w) { register xConfigureWindowReq *req; unsigned long val = Above; /* needed for macro below */ LockDisplay(dpy); GetReqExtra(ConfigureWindow, 4, req); req->window = w; req->mask = CWStackMode; OneDataCard32 (dpy, NEXTPTR(req,xConfigureWindowReq), val); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/XomGeneric.h000064401431060000012000000222431247741723500160610ustar00alancstaff00002660200006/* * Copyright 1992, 1993 by TOSHIBA Corp. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of TOSHIBA not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. TOSHIBA make no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * * Author: Katsuhisa Yano TOSHIBA Corp. * mopi@osa.ilab.toshiba.co.jp */ /* * Copyright 1995 by FUJITSU LIMITED * This is source code modified by FUJITSU LIMITED under the Joint * Development Agreement for the CDE/Motif PST. * * Modifier: Takanori Tateno FUJITSU LIMITED * */ #ifndef _XOMGENERIC_H_ #define _XOMGENERIC_H_ #include "XlcPublic.h" #define XOM_GENERIC(om) (&((XOMGeneric) om)->gen) #define XOC_GENERIC(font_set) (&((XOCGeneric) font_set)->gen) /* For VW/UDC */ typedef struct _CodeRangeRec { unsigned long start; unsigned long end; unsigned long dmy1; unsigned long dmy2; } CodeRangeRec, *CodeRange; typedef struct _VRotateRec { char *charset_name; /* Charset name */ XlcSide side; /* Encoding side */ int num_cr; CodeRange code_range; char *xlfd_name; XFontStruct *font; } VRotateRec, *VRotate; typedef enum { XOMMultiByte, XOMWideChar, XOMUtf8String } XOMTextType; typedef struct _FontDataRec { char *name; XlcSide side; /* For VW/UDC */ int scopes_num; FontScope scopes; char *xlfd_name; XFontStruct *font; } FontDataRec, *FontData; #define VROTATE_NONE 0 #define VROTATE_PART 1 #define VROTATE_ALL 2 typedef struct _OMDataRec { int charset_count; XlcCharSet *charset_list; int font_data_count; FontData font_data; /* For VW/UDC */ int substitute_num; FontData substitute; /* Vertical Writing */ int vmap_num; FontData vmap; int vrotate_type; int vrotate_num; CodeRange vrotate; } OMDataRec, *OMData; typedef struct _XOMGenericPart { int data_num; OMData data; Bool on_demand_loading; char *object_name; } XOMGenericPart; typedef struct _XOMGenericRec { XOMMethods methods; XOMCoreRec core; XOMGenericPart gen; } XOMGenericRec, *XOMGeneric; /* * XOC dependent data */ typedef struct _FontSetRec { int id; int charset_count; XlcCharSet *charset_list; int font_data_count; FontData font_data; char *font_name; XFontStruct *info; XFontStruct *font; XlcSide side; Bool is_xchar2b; /* For VW/UDC */ int substitute_num; FontData substitute; /* Vertical Writing */ int vpart_initialize; int vmap_num; FontData vmap; int vrotate_num; VRotate vrotate; } FontSetRec, *FontSet; typedef struct _XOCGenericPart { XlcConv mbs_to_cs; XlcConv wcs_to_cs; XlcConv utf8_to_cs; int font_set_num; FontSet font_set; } XOCGenericPart; typedef struct _XOCGenericRec { XOCMethods methods; XOCCoreRec core; XOCGenericPart gen; } XOCGenericRec, *XOCGeneric; _XFUNCPROTOBEGIN extern XOM _XomGenericOpenOM( XLCd /* lcd */, Display* /* dpy */, XrmDatabase /* rdb */, _Xconst char* /* res_name */, _Xconst char* /* res_class */ ); extern XlcConv _XomInitConverter( XOC /* oc */, XOMTextType /* type */ ); extern int _XomConvert( XOC /* oc */, XlcConv /* conv */, XPointer* /* from */, int* /* from_left */, XPointer* /* to */, int* /* to_left */, XPointer* /* args */, int /* num_args */ ); extern int _XmbDefaultTextEscapement(XOC oc, _Xconst char *text, int length); extern int _XwcDefaultTextEscapement(XOC oc, _Xconst wchar_t *text, int length); extern int _Xutf8DefaultTextEscapement(XOC oc, _Xconst char *text, int length); extern int _XmbDefaultTextExtents(XOC oc, _Xconst char *text, int length, XRectangle *overall_ink, XRectangle *overall_logical); extern int _XwcDefaultTextExtents(XOC oc, _Xconst wchar_t *text, int length, XRectangle *overall_ink, XRectangle *overall_logical); extern int _Xutf8DefaultTextExtents(XOC oc, _Xconst char *text, int length, XRectangle *overall_ink, XRectangle *overall_logical); extern Status _XmbDefaultTextPerCharExtents( XOC oc, _Xconst char *text, int length, XRectangle *ink_buf, XRectangle *logical_buf, int buf_size, int *num_chars, XRectangle *overall_ink, XRectangle *overall_logical); extern Status _XwcDefaultTextPerCharExtents( XOC oc, _Xconst wchar_t *text, int length, XRectangle *ink_buf, XRectangle *logical_buf, int buf_size, int *num_chars, XRectangle *overall_ink, XRectangle *overall_logical); extern Status _Xutf8DefaultTextPerCharExtents( XOC oc, _Xconst char *text, int length, XRectangle *ink_buf, XRectangle *logical_buf, int buf_size, int *num_chars, XRectangle *overall_ink, XRectangle *overall_logical); extern int _XmbDefaultDrawString(Display *dpy, Drawable d, XOC oc, GC gc, int x, int y, _Xconst char *text, int length); extern int _XwcDefaultDrawString(Display *dpy, Drawable d, XOC oc, GC gc, int x, int y, _Xconst wchar_t *text, int length); extern int _Xutf8DefaultDrawString(Display *dpy, Drawable d, XOC oc, GC gc, int x, int y, _Xconst char *text, int length); extern void _XmbDefaultDrawImageString(Display *dpy, Drawable d, XOC oc, GC gc, int x, int y, _Xconst char *text, int length); extern void _XwcDefaultDrawImageString(Display *dpy, Drawable d, XOC oc, GC gc, int x, int y, _Xconst wchar_t *text, int length); extern void _Xutf8DefaultDrawImageString(Display *dpy, Drawable d, XOC oc, GC gc, int x, int y, _Xconst char *text, int length); extern int _XmbGenericTextEscapement(XOC oc, _Xconst char *text, int length); extern int _XmbGenericTextExtents(XOC oc, _Xconst char *text, int length, XRectangle *overall_ink, XRectangle *overall_logical); extern int _Xutf8GenericDrawString(Display *dpy, Drawable d, XOC oc, GC gc, int x, int y, _Xconst char *text, int length); extern void _Xutf8GenericDrawImageString(Display *dpy, Drawable d, XOC oc, GC gc, int x, int y, _Xconst char *text, int length); extern Status _Xutf8GenericTextPerCharExtents( XOC oc, _Xconst char *text, int length, XRectangle *ink_buf, XRectangle *logical_buf, int buf_size, int *num_chars, XRectangle *overall_ink, XRectangle *overall_logical); extern int _Xutf8GenericTextExtents(XOC oc, _Xconst char *text, int length, XRectangle *overall_ink, XRectangle *overall_logical); extern int _Xutf8GenericTextEscapement(XOC oc, _Xconst char *text, int length); extern void _XwcGenericDrawImageString(Display *dpy, Drawable d, XOC oc, GC gc, int x, int y, _Xconst wchar_t *text, int length); extern int _XwcGenericDrawString(Display *dpy, Drawable d, XOC oc, GC gc, int x, int y, _Xconst wchar_t *text, int length); extern Status _XwcGenericTextPerCharExtents(XOC oc, _Xconst wchar_t *text, int length, XRectangle *ink_buf, XRectangle *logical_buf, int buf_size, int *num_chars, XRectangle *overall_ink, XRectangle *overall_logical); extern int _XwcGenericTextExtents(XOC oc, _Xconst wchar_t *text, int length, XRectangle *overall_ink, XRectangle *overall_logical); extern int _XwcGenericTextEscapement(XOC oc, _Xconst wchar_t *text, int length); extern void _XmbGenericDrawImageString(Display *dpy, Drawable d, XOC oc, GC gc, int x, int y, _Xconst char *text, int length); extern int _XmbGenericDrawString(Display *dpy, Drawable d, XOC oc, GC gc, int x, int y, _Xconst char *text, int length); extern Status _XmbGenericTextPerCharExtents(XOC oc, _Xconst char *text, int length, XRectangle *ink_buf, XRectangle *logical_buf, int buf_size, int *num_chars, XRectangle *overall_ink, XRectangle *overall_logical); extern FontData read_EncodingInfo( int count, char **value); extern int _XomGenericDrawString( Display *dpy, Drawable d, XOC oc, GC gc, int x, int y, XOMTextType type, XPointer text, int length); extern int _XomGenericTextExtents( XOC oc, XOMTextType type, XPointer text, int length, XRectangle *overall_ink, XRectangle *overall_logical); extern FontData _XomGetFontDataFromFontSet( FontSet fs, unsigned char *str, int len, int *len_ret, int is2b, int type); _XFUNCPROTOEND #endif /* _XOMGENERIC_H_ */ nsigned long end; unsigned long dmy1; unsigned long dmy2; } CodeRangeRec, *CodeRange; typedef struct _VRotateRec { char *charset_name; /* Charset name */ XlcSide side; /* Encoding side */ int num_cr; CodeRange code_range; clibX11-1.6.3/src/QuPntr.c000064401431060000012000000036371247741723500152530ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" Bool XQueryPointer( register Display *dpy, Window w, Window *root, Window *child, int *root_x, int *root_y, int *win_x, int *win_y, unsigned int *mask) { xQueryPointerReply rep; xResourceReq *req; LockDisplay(dpy); GetResReq(QueryPointer, w, req); if (_XReply (dpy, (xReply *)&rep, 0, xTrue) == 0) { UnlockDisplay(dpy); SyncHandle(); return(False); } *root = rep.root; *child = rep.child; *root_x = cvtINT16toInt (rep.rootX); *root_y = cvtINT16toInt (rep.rootY); *win_x = cvtINT16toInt (rep.winX); *win_y = cvtINT16toInt (rep.winY); *mask = rep.mask; UnlockDisplay(dpy); SyncHandle(); return (rep.sameScreen); } libX11-1.6.3/src/evtomask.c000064401431060000012000000057301247741723500156470ustar00alancstaff00002660200006/* Copyright 1987, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include /* * This array can be used given an event type to determine the mask bits * that could have generated it. */ long const _Xevent_to_mask [LASTEvent] = { 0, /* no event 0 */ 0, /* no event 1 */ KeyPressMask, /* KeyPress */ KeyReleaseMask, /* KeyRelease */ ButtonPressMask, /* ButtonPress */ ButtonReleaseMask, /* ButtonRelease */ PointerMotionMask|PointerMotionHintMask|Button1MotionMask| Button2MotionMask|Button3MotionMask|Button4MotionMask| Button5MotionMask|ButtonMotionMask, /* MotionNotify */ EnterWindowMask, /* EnterNotify */ LeaveWindowMask, /* LeaveNotify */ FocusChangeMask, /* FocusIn */ FocusChangeMask, /* FocusOut */ KeymapStateMask, /* KeymapNotify */ ExposureMask, /* Expose */ ExposureMask, /* GraphicsExpose */ ExposureMask, /* NoExpose */ VisibilityChangeMask, /* VisibilityNotify */ SubstructureNotifyMask, /* CreateNotify */ StructureNotifyMask|SubstructureNotifyMask, /* DestroyNotify */ StructureNotifyMask|SubstructureNotifyMask, /* UnmapNotify */ StructureNotifyMask|SubstructureNotifyMask, /* MapNotify */ SubstructureRedirectMask, /* MapRequest */ SubstructureNotifyMask|StructureNotifyMask, /* ReparentNotify */ StructureNotifyMask|SubstructureNotifyMask, /* ConfigureNotify */ SubstructureRedirectMask, /* ConfigureRequest */ SubstructureNotifyMask|StructureNotifyMask, /* GravityNotify */ ResizeRedirectMask, /* ResizeRequest */ SubstructureNotifyMask|StructureNotifyMask, /* CirculateNotify */ SubstructureRedirectMask, /* CirculateRequest */ PropertyChangeMask, /* PropertyNotify */ 0, /* SelectionClear */ 0, /* SelectionRequest */ 0, /* SelectionNotify */ ColormapChangeMask, /* ColormapNotify */ 0, /* ClientMessage */ 0, /* MappingNotify */ }; libX11-1.6.3/src/CopyPlane.c000064401431060000012000000035661247741723500157150ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XCopyPlane( register Display *dpy, Drawable src_drawable, Drawable dst_drawable, GC gc, int src_x, int src_y, unsigned int width, unsigned int height, int dst_x, int dst_y, unsigned long bit_plane) { register xCopyPlaneReq *req; LockDisplay(dpy); FlushGC(dpy, gc); GetReq(CopyPlane, req); req->srcDrawable = src_drawable; req->dstDrawable = dst_drawable; req->gc = gc->gid; req->srcX = src_x; req->srcY = src_y; req->dstX = dst_x; req->dstY = dst_y; req->width = width; req->height = height; req->bitPlane = bit_plane; UnlockDisplay(dpy); SyncHandle(); return 1; } is permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WlibX11-1.6.3/src/LookupCol.c000064401431060000012000000054131247741723500157230ustar00alancstaff00002660200006/* Copyright 1985, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include #include "Xlibint.h" #include "Xcmsint.h" Status XLookupColor ( register Display *dpy, Colormap cmap, _Xconst char *spec, XColor *def, XColor *scr) { register int n; xLookupColorReply reply; register xLookupColorReq *req; XcmsCCC ccc; XcmsColor cmsColor_exact; #ifdef XCMS /* * Let's Attempt to use Xcms and i18n approach to Parse Color */ if ((ccc = XcmsCCCOfColormap(dpy, cmap)) != (XcmsCCC)NULL) { const char *tmpName = spec; switch (_XcmsResolveColorString(ccc, &tmpName, &cmsColor_exact, XcmsRGBFormat)) { case XcmsSuccess: case XcmsSuccessWithCompression: _XcmsRGB_to_XColor(&cmsColor_exact, def, 1); memcpy((char *)scr, (char *)def, sizeof(XColor)); _XUnresolveColor(ccc, scr); return(1); case XcmsFailure: case _XCMS_NEWNAME: /* * if the result was _XCMS_NEWNAME tmpName points to * a string in cmsColNm.c:pairs table, for example, * gray70 would become tekhvc:0.0/70.0/0.0 */ break; } } #endif /* * Xcms and i18n methods failed, so lets pass it to the server * for parsing. */ n = strlen (spec); LockDisplay(dpy); GetReq (LookupColor, req); req->cmap = cmap; req->nbytes = n; req->length += (n + 3) >> 2; Data (dpy, spec, (long)n); if (!_XReply (dpy, (xReply *) &reply, 0, xTrue)) { UnlockDisplay(dpy); SyncHandle(); return (0); } def->red = reply.exactRed; def->green = reply.exactGreen; def->blue = reply.exactBlue; scr->red = reply.screenRed; scr->green = reply.screenGreen; scr->blue = reply.screenBlue; UnlockDisplay(dpy); SyncHandle(); return (1); } libX11-1.6.3/src/WMGeom.c000064401431060000012000000146151247741723500151530ustar00alancstaff00002660200006/* Copyright 1989, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xutil.h" static int _GeometryMaskToGravity( int mask); /* * This routine given a user supplied positional argument and a default * argument (fully qualified) will return the position the window should take * as well as the gravity to be set in the WM_NORMAL_HINTS size hints. * Always sets all return values and returns a mask describing which fields * were set by the user or'ed with whether or not the x and y values should * be considered "negative". */ int XWMGeometry ( Display *dpy, /* user's display connection */ int screen, /* screen on which to do computation */ _Xconst char *user_geom, /* user provided geometry spec */ _Xconst char *def_geom, /* default geometry spec for window */ unsigned int bwidth, /* border width */ XSizeHints *hints, /* usually WM_NORMAL_HINTS */ int *x_return, /* location of window */ int *y_return, /* location of window */ int *width_return, /* size of window */ int *height_return, /* size of window */ int *gravity_return) /* gravity of window */ { int ux, uy; /* returned values from parse */ unsigned int uwidth, uheight; /* returned values from parse */ int umask; /* parse mask of returned values */ int dx, dy; /* default values from parse */ unsigned int dwidth, dheight; /* default values from parse */ int dmask; /* parse mask of returned values */ int base_width, base_height; /* valid amounts */ int min_width, min_height; /* valid amounts */ int width_inc, height_inc; /* valid amounts */ int rx, ry, rwidth, rheight; /* return values */ int rmask; /* return mask */ /* * Get the base sizes and increments. Section 4.1.2.3 of the ICCCM * states that the base and minimum sizes are defaults for each other. * If neither is given, then the base sizes should be 0. These parameters * control the sets of sizes that window managers should allow for the * window according to the following formulae: * * width = base_width + (i * width_inc) * height = base_height + (j * height_inc) */ base_width = ((hints->flags & PBaseSize) ? hints->base_width : ((hints->flags & PMinSize) ? hints->min_width : 0)); base_height = ((hints->flags & PBaseSize) ? hints->base_height : ((hints->flags & PMinSize) ? hints->min_height : 0)); min_width = ((hints->flags & PMinSize) ? hints->min_width : base_width); min_height = ((hints->flags & PMinSize) ? hints->min_height : base_height); width_inc = (hints->flags & PResizeInc) ? hints->width_inc : 1; height_inc = (hints->flags & PResizeInc) ? hints->height_inc : 1; /* * parse the two geometry masks */ rmask = umask = XParseGeometry (user_geom, &ux, &uy, &uwidth, &uheight); dmask = XParseGeometry (def_geom, &dx, &dy, &dwidth, &dheight); /* * get the width and height: * 1. if user-specified, then take that value * 2. else, if program-specified, then take that value * 3. else, take 1 * 4. multiply by the size increment * 5. and add to the base size */ rwidth = ((((umask & WidthValue) ? uwidth : ((dmask & WidthValue) ? dwidth : 1)) * width_inc) + base_width); rheight = ((((umask & HeightValue) ? uheight : ((dmask & HeightValue) ? dheight : 1)) * height_inc) + base_height); /* * Make sure computed size is within limits. Note that we always do the * lower bounds check since the base size (which defaults to 0) should * be used if a minimum size isn't specified. */ if (rwidth < min_width) rwidth = min_width; if (rheight < min_height) rheight = min_height; if (hints->flags & PMaxSize) { if (rwidth > hints->max_width) rwidth = hints->max_width; if (rheight > hints->max_height) rheight = hints->max_height; } /* * Compute the location. Set the negative flags in the return mask * (and watch out for borders), if necessary. */ if (umask & XValue) { rx = ((umask & XNegative) ? (DisplayWidth (dpy, screen) + ux - rwidth - 2 * bwidth) : ux); } else if (dmask & XValue) { if (dmask & XNegative) { rx = (DisplayWidth (dpy, screen) + dx - rwidth - 2 * bwidth); rmask |= XNegative; } else rx = dx; } else { rx = 0; /* gotta choose something... */ } if (umask & YValue) { ry = ((umask & YNegative) ? (DisplayHeight(dpy, screen) + uy - rheight - 2 * bwidth) : uy); } else if (dmask & YValue) { if (dmask & YNegative) { ry = (DisplayHeight(dpy, screen) + dy - rheight - 2 * bwidth); rmask |= YNegative; } else ry = dy; } else { ry = 0; /* gotta choose something... */ } /* * All finished, so set the return variables. */ *x_return = rx; *y_return = ry; *width_return = rwidth; *height_return = rheight; *gravity_return = _GeometryMaskToGravity (rmask); return rmask; } static int _GeometryMaskToGravity( int mask) { switch (mask & (XNegative|YNegative)) { case 0: return NorthWestGravity; case XNegative: return NorthEastGravity; case YNegative: return SouthWestGravity; default: return SouthEastGravity; } } RE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise tlibX11-1.6.3/src/Pending.c000064401431060000012000000033711247741723500154010ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" /* Read in pending events if needed and return the number of queued events. */ int XEventsQueued ( register Display *dpy, int mode) { int ret_val; LockDisplay(dpy); if (dpy->qlen || (mode == QueuedAlready)) ret_val = dpy->qlen; else ret_val = _XEventsQueued (dpy, mode); UnlockDisplay(dpy); return ret_val; } int XPending (register Display *dpy) { int ret_val; LockDisplay(dpy); if (dpy->qlen) ret_val = dpy->qlen; else ret_val = _XEventsQueued (dpy, QueuedAfterFlush); UnlockDisplay(dpy); return ret_val; } libX11-1.6.3/src/SetWMProto.c000064401431060000012000000053401247741723500160360ustar00alancstaff00002660200006 /*********************************************************** Copyright 1987, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include /* * XSetWMProtocols sets the property * WM_PROTOCOLS type: ATOM format: 32 */ Status XSetWMProtocols ( Display *dpy, Window w, Atom *protocols, int count) { Atom prop; prop = XInternAtom (dpy, "WM_PROTOCOLS", False); if (prop == None) return False; XChangeProperty (dpy, w, prop, XA_ATOM, 32, PropModeReplace, (unsigned char *) protocols, count); return True; } libX11-1.6.3/src/VisUtil.c000064401431060000012000000156641247741723500154240ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xutil.h" #include /* * This procedure returns a list of visual information structures * that match the specified attributes given in the visual information * template. * * If no visuals exist that match the specified attributes, a NULL is * returned. * * The choices for visual_info_mask are: * * VisualNoMask * VisualIDMask * VisualScreenMask * VisualDepthMask * VisualClassMask * VisualRedMaskMask * VisualGreenMaskMask * VisualBlueMaskMask * VisualColormapSizeMask * VisualBitsPerRGBMask * VisualAllMask */ XVisualInfo *XGetVisualInfo( Display *dpy, register long visual_info_mask, register XVisualInfo *visual_info_template, int *nitems) /* RETURN */ { register Visual *vp; register Depth *dp; Screen *sp; int ii,screen_s,screen_e,total,count; register XVisualInfo *vip,*vip_base; /* NOTE: NO HIGH PERFORMING CODE TO BE FOUND HERE */ LockDisplay(dpy); /* ALLOCATE THE ORIGINAL BUFFER; REALLOCED LATER IF OVERFLOW OCCURS; FREED AT END IF NO VISUALS ARE FOUND */ count = 0; total = 10; if (! (vip_base = vip = Xmalloc(sizeof(XVisualInfo) * total))) { UnlockDisplay(dpy); return (XVisualInfo *) NULL; } /* DETERMINE IF WE DO ALL SCREENS OR ONLY ONE */ screen_s = 0; screen_e = dpy->nscreens; if (visual_info_mask & VisualScreenMask) { screen_s = visual_info_template->screen; if (screen_s < 0 || screen_s >= screen_e) screen_e = screen_s; else screen_e = screen_s + 1; } /* LOOP THROUGH SCREENS */ for (ii=screen_s; iiscreens[ii]); /* LOOP THROUGH DEPTHS */ for (dp=sp->depths; dp < (sp->depths + sp->ndepths); dp++) { if ((visual_info_mask & VisualDepthMask) && (dp->depth != visual_info_template->depth)) continue; /* LOOP THROUGH VISUALS */ if (dp->visuals) { for (vp=dp->visuals; vp<(dp->visuals + dp->nvisuals); vp++) { if ((visual_info_mask & VisualIDMask) && (vp->visualid != visual_info_template->visualid)) continue; if ((visual_info_mask & VisualClassMask) && (vp->class != visual_info_template->class)) continue; if ((visual_info_mask & VisualRedMaskMask) && (vp->red_mask != visual_info_template->red_mask)) continue; if ((visual_info_mask & VisualGreenMaskMask) && (vp->green_mask != visual_info_template->green_mask)) continue; if ((visual_info_mask & VisualBlueMaskMask) && (vp->blue_mask != visual_info_template->blue_mask)) continue; if ((visual_info_mask & VisualColormapSizeMask) && (vp->map_entries != visual_info_template->colormap_size)) continue; if ((visual_info_mask & VisualBitsPerRGBMask) && (vp->bits_per_rgb != visual_info_template->bits_per_rgb)) continue; /* YEA!!! WE FOUND A GOOD ONE */ if (count+1 > total) { XVisualInfo *old_vip_base = vip_base; total += 10; if (! (vip_base = Xrealloc(vip_base, sizeof(XVisualInfo) * total))) { Xfree(old_vip_base); UnlockDisplay(dpy); return (XVisualInfo *) NULL; } vip = &vip_base[count]; } count++; vip->visual = _XVIDtoVisual(dpy, vp->visualid); vip->visualid = vp->visualid; vip->screen = ii; vip->depth = dp->depth; vip->class = vp->class; vip->red_mask = vp->red_mask; vip->green_mask = vp->green_mask; vip->blue_mask = vp->blue_mask; vip->colormap_size = vp->map_entries; vip->bits_per_rgb = vp->bits_per_rgb; vip++; } /* END OF LOOP ON VISUALS */ } /* END OF IF THERE ARE ANY VISUALS AT THIS DEPTH */ } /* END OF LOOP ON DEPTHS */ } /* END OF LOOP ON SCREENS */ UnlockDisplay(dpy); if (count) { *nitems = count; return vip_base; } Xfree(vip_base); *nitems = 0; return NULL; } /* * This procedure will return the visual information for a visual * that matches the specified depth and class for a screen. Since * multiple visuals may exist that match the specified depth and * class, which visual chosen is undefined. * * If a visual is found, True is returned as the function value, * otherwise False is returned. */ Status XMatchVisualInfo( Display *dpy, int screen, int depth, int class, XVisualInfo *visual_info) /* RETURNED */ { Visual *vp; Depth *dp; Screen *sp; int ii,jj; if (screen < 0 || screen >= dpy->nscreens) return False; LockDisplay(dpy); sp = (Screen *)(&dpy->screens[screen]); dp = sp->depths; for (ii=0; ii < sp->ndepths; ii++) { /* LOOK THROUGH DEPTHS FOR THE WANTED DEPTH */ if (dp->depth == depth) { vp = dp->visuals; /* LOOK THROUGH VISUALS FOR THE WANTED CLASS */ /* if nvisuals == 0 then vp will be NULL */ for (jj=0; jjnvisuals; jj++) { if (vp->class == class) { visual_info->visual = _XVIDtoVisual(dpy, vp->visualid); visual_info->visualid = vp->visualid; visual_info->screen = screen; visual_info->depth = depth; visual_info->class = vp->class; visual_info->red_mask = vp->red_mask; visual_info->green_mask = vp->green_mask; visual_info->blue_mask = vp->blue_mask; visual_info->colormap_size = vp->map_entries; visual_info->bits_per_rgb = vp->bits_per_rgb; UnlockDisplay(dpy); return True; } vp++; } } dp++; } UnlockDisplay(dpy); return False; } libX11-1.6.3/src/MapRaised.c000064401431060000012000000032141247741723500156560ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XMapRaised ( register Display *dpy, Window w) { register xConfigureWindowReq *req; register xResourceReq *req2; unsigned long val = Above; /* needed for macro */ LockDisplay(dpy); GetReqExtra(ConfigureWindow, 4, req); req->window = w; req->mask = CWStackMode; OneDataCard32 (dpy, NEXTPTR(req,xConfigureWindowReq), val); GetResReq (MapWindow, w, req2); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/utlist.h000064401431060000012000000133741247741723500153520ustar00alancstaff00002660200006/* Copyright (c) 2007-2009, Troy D. Hanson All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef UTLIST_H #define UTLIST_H #define UTLIST_VERSION 1.7 /* From: http://uthash.sourceforge.net/utlist.html */ /* * This file contains macros to manipulate singly and doubly-linked lists. * * 1. LL_ macros: singly-linked lists. * 2. DL_ macros: doubly-linked lists. * 3. CDL_ macros: circular doubly-linked lists. * * To use singly-linked lists, your structure must have a "next" pointer. * To use doubly-linked lists, your structure must "prev" and "next" pointers. * Either way, the pointer to the head of the list must be initialized to NULL. * * ----------------.EXAMPLE ------------------------- * struct item { * int id; * struct item *prev, *next; * } * * struct item *list = NULL: * * int main() { * struct item *item; * ... allocate and populate item ... * DL_APPEND(list, item); * } * -------------------------------------------------- * * For doubly-linked lists, the append and delete macros are O(1) * For singly-linked lists, append and delete are O(n) but prepend is O(1) * The sort macro is O(n log(n)) for all types of single/double/circular lists. */ /****************************************************************************** * doubly linked list macros (non-circular) * *****************************************************************************/ #define DL_PREPEND(head,add) \ do { \ (add)->next = head; \ if (head) { \ (add)->prev = (head)->prev; \ (head)->prev = (add); \ } else { \ (add)->prev = (add); \ } \ (head) = (add); \ } while (0) #define DL_APPEND(head,add) \ do { \ if (head) { \ (add)->prev = (head)->prev; \ (head)->prev->next = (add); \ (head)->prev = (add); \ (add)->next = NULL; \ } else { \ (head)=(add); \ (head)->prev = (head); \ (head)->next = NULL; \ } \ } while (0); #define DL_DELETE(head,del) \ do { \ if ((del)->prev == (del)) { \ (head)=NULL; \ } else if ((del)==(head)) { \ (del)->next->prev = (del)->prev; \ (head) = (del)->next; \ } else { \ (del)->prev->next = (del)->next; \ if ((del)->next) { \ (del)->next->prev = (del)->prev; \ } else { \ (head)->prev = (del)->prev; \ } \ } \ } while (0); #define DL_FOREACH(head,el) \ for(el=head;el;el=el->next) #define DL_FOREACH_SAFE(head,el,tmp) \ for(el=head,tmp=el->next;el;el=tmp,tmp=(el) ? (el->next) : NULL) #endif /* UTLIST_H */ libX11-1.6.3/src/SetLocale.c000064401431060000012000000140461247741723500156710ustar00alancstaff00002660200006 /* * Copyright 1990, 1991 by OMRON Corporation, NTT Software Corporation, * and Nippon Telegraph and Telephone Corporation * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the names of OMRON, NTT Software, and NTT * not be used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. OMRON, NTT Software, * and NTT make no representations about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. * * OMRON, NTT SOFTWARE, AND NTT, DISCLAIM ALL WARRANTIES WITH REGARD * TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL OMRON, NTT SOFTWARE, OR NTT, BE * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Authors: Li Yuhong OMRON Corporation * Tetsuya Kato NTT Software Corporation * Hiroshi Kuribayashi OMRON Corporation * */ /* Copyright 1987,1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xlcint.h" #include #include #include "XlcPubI.h" #define MAXLOCALE 64 /* buffer size of locale name */ #if defined(__APPLE__) || defined(__CYGWIN__) char * _Xsetlocale( int category, _Xconst char *name ) { return setlocale(category, name); } #endif /* __APPLE__ || __CYGWIN__ */ /* * _XlcMapOSLocaleName is an implementation dependent routine that derives * the LC_CTYPE locale name as used in the sample implementation from that * returned by setlocale. * * Should match the code in Xt ExtractLocaleName. * * This function name is a bit of a misnomer. Even the siname parameter * name is a misnomer. On most modern operating systems this function is * a no-op, simply returning the osname; but on older operating systems * like Ultrix, or HPUX 9.x and earlier, when you set LANG=german.88591 * then the string returned by setlocale(LC_ALL, "") will look something * like: "german.88591 german.88591 ... german.88591". Then this function * will pick out the LC_CTYPE component and return a pointer to that. */ char * _XlcMapOSLocaleName( char *osname, char *siname) { #if defined(hpux) || defined(CSRG_BASED) || defined(sun) || defined(SVR4) || defined(sgi) || defined(__osf__) || defined(AIXV3) || defined(ultrix) || defined(WIN32) || defined(__UNIXOS2__) || defined(linux) # ifdef hpux # ifndef _LastCategory /* HPUX 9 and earlier */ # define SKIPCOUNT 2 # define STARTCHAR ':' # define ENDCHAR ';' # else /* HPUX 10 */ # define ENDCHAR ' ' # endif # else # ifdef ultrix # define SKIPCOUNT 2 # define STARTCHAR '\001' # define ENDCHAR '\001' # else # if defined(WIN32) || defined(__UNIXOS2__) # define SKIPCOUNT 1 # define STARTCHAR '=' # define ENDCHAR ';' # define WHITEFILL # else # if defined(__osf__) || (defined(AIXV3) && !defined(AIXV4)) # define STARTCHAR ' ' # define ENDCHAR ' ' # else # if defined(linux) # define STARTSTR "LC_CTYPE=" # define ENDCHAR ';' # else # if !defined(sun) || defined(SVR4) # define STARTCHAR '/' # define ENDCHAR '/' # endif # endif # endif # endif # endif # endif char *start; char *end; int len; # ifdef SKIPCOUNT int n; # endif start = osname; # ifdef SKIPCOUNT for (n = SKIPCOUNT; --n >= 0 && start && (start = strchr (start, STARTCHAR)); start++) ; if (!start) start = osname; # endif # ifdef STARTCHAR if (start && (start = strchr (start, STARTCHAR))) # elif defined (STARTSTR) if (start && (start = strstr (start,STARTSTR))) # endif { # ifdef STARTCHAR start++; # elif defined (STARTSTR) start += strlen(STARTSTR); # endif if ((end = strchr (start, ENDCHAR))) { len = end - start; if (len >= MAXLOCALE) len = MAXLOCALE - 1; strncpy(siname, start, len); *(siname + len) = '\0'; # ifdef WHITEFILL for (start = siname; start = strchr(start, ' '); ) *start++ = '-'; # endif return siname; } else /* if no ENDCHAR is found we are at the end of the line */ return start; } # ifdef WHITEFILL if (strchr(osname, ' ')) { len = strlen(osname); if (len >= MAXLOCALE - 1) len = MAXLOCALE - 1; strncpy(siname, osname, len); *(siname + len) = '\0'; for (start = siname; start = strchr(start, ' '); ) *start++ = '-'; return siname; } # endif # undef STARTCHAR # undef ENDCHAR # undef WHITEFILL #endif return osname; } orporation, NTT Software Corporation, * and Nippon Telegraph and Telephone Corporation * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the names of OMRON, NTT Software, and NTlibX11-1.6.3/src/OMWrap.c000064401431060000012000000054751247741723500151710ustar00alancstaff00002660200006/* * Copyright 1992, 1993 by TOSHIBA Corp. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of TOSHIBA not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. TOSHIBA make no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * * Author: Katsuhisa Yano TOSHIBA Corp. * mopi@osa.ilab.toshiba.co.jp */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xlcint.h" XOM XOpenOM(Display *dpy, XrmDatabase rdb, _Xconst char *res_name, _Xconst char *res_class) { XLCd lcd = _XOpenLC((char *) NULL); if (lcd == NULL) return (XOM) NULL; if (lcd->methods->open_om) return (*lcd->methods->open_om)(lcd, dpy, rdb, res_name, res_class); return (XOM) NULL; } Status XCloseOM(XOM om) { XOC oc, next; XLCd lcd = om->core.lcd; next = om->core.oc_list; while ((oc = next)) { next = oc->core.next; (*oc->methods->destroy)(oc); } om->core.oc_list = NULL; _XCloseLC(lcd); return (*om->methods->close)(om); } char * XSetOMValues(XOM om, ...) { va_list var; XlcArgList args; char *ret; int num_args; va_start(var, om); _XlcCountVaList(var, &num_args); va_end(var); va_start(var, om); _XlcVaToArgList(var, num_args, &args); va_end(var); if (args == (XlcArgList) NULL) return (char *) NULL; ret = (*om->methods->set_values)(om, args, num_args); Xfree(args); return ret; } char * XGetOMValues(XOM om, ...) { va_list var; XlcArgList args; char *ret; int num_args; va_start(var, om); _XlcCountVaList(var, &num_args); va_end(var); va_start(var, om); _XlcVaToArgList(var, num_args, &args); va_end(var); if (args == (XlcArgList) NULL) return (char *) NULL; ret = (*om->methods->get_values)(om, args, num_args); Xfree(args); return ret; } Display * XDisplayOfOM(XOM om) { return om->core.display; } char * XLocaleOfOM(XOM om) { return om->core.lcd->core->name; } libX11-1.6.3/src/locking.c000064401431060000012000000374021247741723500154450ustar00alancstaff00002660200006/* Copyright 1992, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ /* * Author: Stephen Gildea, MIT X Consortium * * locking.c - multi-thread locking routines implemented in C Threads */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #undef _XLockMutex #undef _XUnlockMutex #undef _XCreateMutex #undef _XFreeMutex #ifdef XTHREADS #ifdef __UNIXWARE__ #include #endif #include "Xprivate.h" #include "locking.h" #ifdef XTHREADS_WARN #include /* for warn/debug stuff */ #endif /* Additional arguments for source code location lock call was made from */ #if defined(XTHREADS_WARN) || defined(XTHREADS_FILE_LINE) # define XTHREADS_FILE_LINE_ARGS \ , \ char* file, /* source file, from macro */ \ int line #else # define XTHREADS_FILE_LINE_ARGS /* None */ #endif #define NUM_FREE_CVLS 4 /* in lcWrap.c */ extern LockInfoPtr _Xi18n_lock; #ifdef WIN32 static DWORD _X_TlsIndex = (DWORD)-1; void _Xthread_init(void) { if (_X_TlsIndex == (DWORD)-1) _X_TlsIndex = TlsAlloc(); } struct _xthread_waiter * _Xthread_waiter(void) { struct _xthread_waiter *me; if (!(me = TlsGetValue(_X_TlsIndex))) { me = xmalloc(sizeof(struct _xthread_waiter)); me->sem = CreateSemaphore(NULL, 0, 1, NULL); me->next = NULL; TlsSetValue(_X_TlsIndex, me); } return me; } #endif /* WIN32 */ static xthread_t _Xthread_self(void) { return xthread_self(); } static LockInfoRec global_lock; static LockInfoRec i18n_lock; static void _XLockMutex( LockInfoPtr lip XTHREADS_FILE_LINE_ARGS ) { xmutex_lock(lip->lock); } static void _XUnlockMutex( LockInfoPtr lip XTHREADS_FILE_LINE_ARGS ) { xmutex_unlock(lip->lock); } static void _XCreateMutex( LockInfoPtr lip) { lip->lock = xmutex_malloc(); if (lip->lock) { xmutex_init(lip->lock); xmutex_set_name(lip->lock, "Xlib"); } } static void _XFreeMutex( LockInfoPtr lip) { xmutex_clear(lip->lock); xmutex_free(lip->lock); } #ifdef XTHREADS_WARN static char *locking_file; static int locking_line; static xthread_t locking_thread; static Bool xlibint_unlock = False; /* XlibInt.c may Unlock and re-Lock */ /* history that is useful to examine in a debugger */ #define LOCK_HIST_SIZE 21 static struct { Bool lockp; /* True for lock, False for unlock */ xthread_t thread; char *file; int line; } locking_history[LOCK_HIST_SIZE]; int lock_hist_loc = 0; /* next slot to fill */ static void _XLockDisplayWarn( Display *dpy, char *file, /* source file, from macro */ int line) { xthread_t self; xthread_t old_locker; self = xthread_self(); old_locker = locking_thread; if (xthread_have_id(old_locker)) { if (xthread_equal(old_locker, self)) printf("Xlib ERROR: %s line %d thread %x: locking display already locked at %s line %d\n", file, line, self, locking_file, locking_line); #ifdef XTHREADS_DEBUG else printf("%s line %d: thread %x waiting on lock held by %s line %d thread %x\n", file, line, self, locking_file, locking_line, old_locker); #endif /* XTHREADS_DEBUG */ } xmutex_lock(dpy->lock->mutex); if (strcmp(file, "XlibInt.c") == 0) { if (!xlibint_unlock) printf("Xlib ERROR: XlibInt.c line %d thread %x locking display it did not unlock\n", line, self); xlibint_unlock = False; } #ifdef XTHREADS_DEBUG /* if (old_locker && old_locker != self) */ if (strcmp("XClearArea.c", file) && strcmp("XDrSegs.c", file)) /* ico */ printf("%s line %d: thread %x got display lock\n", file, line, self); #endif /* XTHREADS_DEBUG */ locking_thread = self; if (strcmp(file, "XlibInt.c") != 0) { locking_file = file; locking_line = line; } locking_history[lock_hist_loc].file = file; locking_history[lock_hist_loc].line = line; locking_history[lock_hist_loc].thread = self; locking_history[lock_hist_loc].lockp = True; lock_hist_loc++; if (lock_hist_loc >= LOCK_HIST_SIZE) lock_hist_loc = 0; } #endif /* XTHREADS_WARN */ static void _XUnlockDisplay( Display *dpy XTHREADS_FILE_LINE_ARGS ) { #ifdef XTHREADS_WARN xthread_t self = xthread_self(); #ifdef XTHREADS_DEBUG if (strcmp("XClearArea.c", file) && strcmp("XDrSegs.c", file)) /* ico */ printf("%s line %d: thread %x unlocking display\n", file, line, self); #endif /* XTHREADS_DEBUG */ if (!xthread_have_id(locking_thread)) printf("Xlib ERROR: %s line %d thread %x: unlocking display that is not locked\n", file, line, self); else if (strcmp(file, "XlibInt.c") == 0) xlibint_unlock = True; #ifdef XTHREADS_DEBUG else if (strcmp(file, locking_file) != 0) /* not always an error because locking_file is not per-thread */ printf("%s line %d: unlocking display locked from %s line %d (probably okay)\n", file, line, locking_file, locking_line); #endif /* XTHREADS_DEBUG */ xthread_clear_id(locking_thread); locking_history[lock_hist_loc].file = file; locking_history[lock_hist_loc].line = line; locking_history[lock_hist_loc].thread = self; locking_history[lock_hist_loc].lockp = False; lock_hist_loc++; if (lock_hist_loc >= LOCK_HIST_SIZE) lock_hist_loc = 0; #endif /* XTHREADS_WARN */ xmutex_unlock(dpy->lock->mutex); } static struct _XCVList *_XCreateCVL( Display *dpy) { struct _XCVList *cvl; if ((cvl = dpy->lock->free_cvls) != NULL) { dpy->lock->free_cvls = cvl->next; dpy->lock->num_free_cvls--; } else { cvl = Xmalloc(sizeof(struct _XCVList)); if (!cvl) return NULL; cvl->cv = xcondition_malloc(); if (!cvl->cv) { Xfree(cvl); return NULL; } xcondition_init(cvl->cv); xcondition_set_name(cvl->cv, "Xlib read queue"); } cvl->next = NULL; return cvl; } /* Put ourselves on the queue to read the connection. Allocates and returns a queue element. */ static struct _XCVList * _XPushReader( Display *dpy, struct _XCVList ***tail) { struct _XCVList *cvl; cvl = _XCreateCVL(dpy); #ifdef XTHREADS_DEBUG printf("_XPushReader called in thread %x, pushing %x\n", xthread_self(), cvl); #endif **tail = cvl; *tail = &cvl->next; return cvl; } /* signal the next thread waiting to read the connection */ static void _XPopReader( Display *dpy, struct _XCVList **list, struct _XCVList ***tail) { register struct _XCVList *front = *list; #ifdef XTHREADS_DEBUG printf("_XPopReader called in thread %x, popping %x\n", xthread_self(), front); #endif if (dpy->flags & XlibDisplayProcConni) /* we never added ourself in the first place */ return; if (front) { /* check "front" for paranoia */ *list = front->next; if (*tail == &front->next) /* did we free the last elt? */ *tail = list; if (dpy->lock->num_free_cvls < NUM_FREE_CVLS) { front->next = dpy->lock->free_cvls; dpy->lock->free_cvls = front; dpy->lock->num_free_cvls++; } else { xcondition_clear(front->cv); Xfree(front->cv); Xfree(front); } } /* signal new front after it is in place */ if ((dpy->lock->reply_first = (dpy->lock->reply_awaiters != NULL))) { ConditionSignal(dpy, dpy->lock->reply_awaiters->cv); } else if (dpy->lock->event_awaiters) { ConditionSignal(dpy, dpy->lock->event_awaiters->cv); } } static void _XConditionWait( xcondition_t cv, xmutex_t mutex XTHREADS_FILE_LINE_ARGS ) { #ifdef XTHREADS_WARN xthread_t self = xthread_self(); char *old_file = locking_file; int old_line = locking_line; #ifdef XTHREADS_DEBUG printf("line %d thread %x in condition wait\n", line, self); #endif xthread_clear_id(locking_thread); locking_history[lock_hist_loc].file = file; locking_history[lock_hist_loc].line = line; locking_history[lock_hist_loc].thread = self; locking_history[lock_hist_loc].lockp = False; lock_hist_loc++; if (lock_hist_loc >= LOCK_HIST_SIZE) lock_hist_loc = 0; #endif /* XTHREADS_WARN */ xcondition_wait(cv, mutex); #ifdef XTHREADS_WARN locking_thread = self; locking_file = old_file; locking_line = old_line; locking_history[lock_hist_loc].file = file; locking_history[lock_hist_loc].line = line; locking_history[lock_hist_loc].thread = self; locking_history[lock_hist_loc].lockp = True; lock_hist_loc++; if (lock_hist_loc >= LOCK_HIST_SIZE) lock_hist_loc = 0; #ifdef XTHREADS_DEBUG printf("line %d thread %x was signaled\n", line, self); #endif /* XTHREADS_DEBUG */ #endif /* XTHREADS_WARN */ } static void _XConditionSignal( xcondition_t cv XTHREADS_FILE_LINE_ARGS ) { #ifdef XTHREADS_WARN #ifdef XTHREADS_DEBUG printf("line %d thread %x is signalling\n", line, xthread_self()); #endif #endif xcondition_signal(cv); } static void _XConditionBroadcast( xcondition_t cv XTHREADS_FILE_LINE_ARGS ) { #ifdef XTHREADS_WARN #ifdef XTHREADS_DEBUG printf("line %d thread %x is broadcasting\n", line, xthread_self()); #endif #endif xcondition_broadcast(cv); } static void _XFreeDisplayLock( Display *dpy) { struct _XCVList *cvl; if (dpy->lock != NULL) { if (dpy->lock->mutex != NULL) { xmutex_clear(dpy->lock->mutex); xmutex_free(dpy->lock->mutex); } if (dpy->lock->cv != NULL) { xcondition_clear(dpy->lock->cv); xcondition_free(dpy->lock->cv); } if (dpy->lock->writers != NULL) { xcondition_clear(dpy->lock->writers); xcondition_free(dpy->lock->writers); } while ((cvl = dpy->lock->free_cvls)) { dpy->lock->free_cvls = cvl->next; xcondition_clear(cvl->cv); Xfree(cvl->cv); Xfree(cvl); } Xfree(dpy->lock); dpy->lock = NULL; } if (dpy->lock_fns != NULL) { Xfree(dpy->lock_fns); dpy->lock_fns = NULL; } } /* * wait for thread with user-level display lock to release it. */ static void _XDisplayLockWait( Display *dpy) { xthread_t self; while (dpy->lock->locking_level > 0) { self = xthread_self(); if (xthread_equal(dpy->lock->locking_thread, self)) break; ConditionWait(dpy, dpy->lock->cv); } } static void _XLockDisplay( Display *dpy XTHREADS_FILE_LINE_ARGS ) { #ifdef XTHREADS_WARN _XLockDisplayWarn(dpy, file, line); #else xmutex_lock(dpy->lock->mutex); #endif if (dpy->lock->locking_level > 0) _XDisplayLockWait(dpy); _XIDHandler(dpy); _XSeqSyncFunction(dpy); } /* * _XReply is allowed to exit from select/poll and clean up even if a * user-level lock is in force, so it uses this instead of _XFancyLockDisplay. */ static void _XInternalLockDisplay( Display *dpy, Bool wskip XTHREADS_FILE_LINE_ARGS ) { #ifdef XTHREADS_WARN _XLockDisplayWarn(dpy, file, line); #else xmutex_lock(dpy->lock->mutex); #endif if (!wskip && dpy->lock->locking_level > 0) _XDisplayLockWait(dpy); } static void _XUserLockDisplay( register Display* dpy) { _XDisplayLockWait(dpy); if (++dpy->lock->locking_level == 1) { dpy->lock->lock_wait = _XDisplayLockWait; dpy->lock->locking_thread = xthread_self(); } } static void _XUserUnlockDisplay( register Display* dpy) { if (dpy->lock->locking_level > 0 && --dpy->lock->locking_level == 0) { /* signal other threads that might be waiting in XLockDisplay */ ConditionBroadcast(dpy, dpy->lock->cv); dpy->lock->lock_wait = NULL; xthread_clear_id(dpy->lock->locking_thread); } } /* returns 0 if initialized ok, -1 if unable to allocate a mutex or other memory */ static int _XInitDisplayLock( Display *dpy) { dpy->lock_fns = Xmalloc(sizeof(struct _XLockPtrs)); if (dpy->lock_fns == NULL) return -1; dpy->lock = Xmalloc(sizeof(struct _XLockInfo)); if (dpy->lock == NULL) { _XFreeDisplayLock(dpy); return -1; } dpy->lock->cv = xcondition_malloc(); dpy->lock->mutex = xmutex_malloc(); dpy->lock->writers = xcondition_malloc(); if (!dpy->lock->cv || !dpy->lock->mutex || !dpy->lock->writers) { _XFreeDisplayLock(dpy); return -1; } dpy->lock->reply_bytes_left = 0; dpy->lock->reply_was_read = False; dpy->lock->reply_awaiters = NULL; dpy->lock->reply_awaiters_tail = &dpy->lock->reply_awaiters; dpy->lock->event_awaiters = NULL; dpy->lock->event_awaiters_tail = &dpy->lock->event_awaiters; dpy->lock->reply_first = False; dpy->lock->locking_level = 0; dpy->lock->num_free_cvls = 0; dpy->lock->free_cvls = NULL; xthread_clear_id(dpy->lock->locking_thread); xthread_clear_id(dpy->lock->reading_thread); xthread_clear_id(dpy->lock->conni_thread); xmutex_init(dpy->lock->mutex); xmutex_set_name(dpy->lock->mutex, "Xlib Display"); xcondition_init(dpy->lock->cv); xcondition_set_name(dpy->lock->cv, "XLockDisplay"); xcondition_init(dpy->lock->writers); xcondition_set_name(dpy->lock->writers, "Xlib wait for writable"); dpy->lock_fns->lock_display = _XLockDisplay; dpy->lock->internal_lock_display = _XInternalLockDisplay; dpy->lock_fns->unlock_display = _XUnlockDisplay; dpy->lock->user_lock_display = _XUserLockDisplay; dpy->lock->user_unlock_display = _XUserUnlockDisplay; dpy->lock->pop_reader = _XPopReader; dpy->lock->push_reader = _XPushReader; dpy->lock->condition_wait = _XConditionWait; dpy->lock->condition_signal = _XConditionSignal; dpy->lock->condition_broadcast = _XConditionBroadcast; dpy->lock->create_cvl = _XCreateCVL; dpy->lock->lock_wait = NULL; /* filled in by XLockDisplay() */ return 0; } #ifdef __UNIXWARE__ xthread_t __x11_thr_self() { return 0; } xthread_t (*_x11_thr_self)() = __x11_thr_self; #endif Status XInitThreads(void) { if (_Xglobal_lock) return 1; #ifdef __UNIXWARE__ else { void *dl_handle = dlopen(NULL, RTLD_LAZY); if (!dl_handle || ((_x11_thr_self = (xthread_t(*)())dlsym(dl_handle,"thr_self")) == 0)) { _x11_thr_self = __x11_thr_self; (void) fprintf (stderr, "XInitThreads called, but no libthread in the calling program!\n" ); } } #endif /* __UNIXWARE__ */ #ifdef xthread_init xthread_init(); /* return value? */ #endif if (!(global_lock.lock = xmutex_malloc())) return 0; if (!(i18n_lock.lock = xmutex_malloc())) { xmutex_free(global_lock.lock); global_lock.lock = NULL; return 0; } _Xglobal_lock = &global_lock; xmutex_init(_Xglobal_lock->lock); xmutex_set_name(_Xglobal_lock->lock, "Xlib global"); _Xi18n_lock = &i18n_lock; xmutex_init(_Xi18n_lock->lock); xmutex_set_name(_Xi18n_lock->lock, "Xlib i18n"); _XLockMutex_fn = _XLockMutex; _XUnlockMutex_fn = _XUnlockMutex; _XCreateMutex_fn = _XCreateMutex; _XFreeMutex_fn = _XFreeMutex; _XInitDisplayLock_fn = _XInitDisplayLock; _XFreeDisplayLock_fn = _XFreeDisplayLock; _Xthread_self_fn = _Xthread_self; #ifdef XTHREADS_WARN #ifdef XTHREADS_DEBUG setlinebuf(stdout); /* for debugging messages */ #endif #endif return 1; } #else /* XTHREADS */ Status XInitThreads(void) { return 0; } #endif /* XTHREADS */ (probably okay)\n", file, line, locking_file, locking_line); #endif /* XTHREADS_DEBUG */ xthread_clear_id(locking_thread); locking_history[lock_hist_loc].file = file; locking_history[lock_hist_loc].line = line; locking_history[lolibX11-1.6.3/src/FreeEData.c000064401431060000012000000027261247741723500156000ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int _XFreeExtData (XExtData *extension) { XExtData *temp; while (extension) { if (extension->free_private) (*extension->free_private)(extension); else Xfree (extension->private_data); temp = extension->next; Xfree (extension); extension = temp; } return 0; } libX11-1.6.3/src/MapSubs.c000064401431060000012000000026301247741723500153640ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XMapSubwindows( register Display *dpy, Window win) { register xResourceReq *req; LockDisplay(dpy); GetResReq(MapSubwindows, win, req); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/DrRects.c000064401431060000012000000036011247741723500153570ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XDrawRectangles( register Display *dpy, Drawable d, GC gc, XRectangle *rects, int n_rects) { register xPolyRectangleReq *req; long len; int n; LockDisplay(dpy); FlushGC(dpy, gc); while (n_rects) { GetReq(PolyRectangle, req); req->drawable = d; req->gc = gc->gid; n = n_rects; len = ((long)n) << 1; if (!dpy->bigreq_size && len > (dpy->max_request_size - req->length)) { n = (dpy->max_request_size - req->length) >> 1; len = ((long)n) << 1; } SetReqLen(req, len, len); len <<= 2; /* watch out for macros... */ Data16 (dpy, (short *) rects, len); n_rects -= n; rects += n; } UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/Host.c000064401431060000012000000106161247741723500147320ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group All rights reserved. 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, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, provided that the above copyright notice(s) and this permission notice appear in all copies of the Software and that both the above copyright notice(s) and this permission notice appear in supporting documentation. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization of the copyright holder. X Window System is a trademark of The Open Group. */ /* * Copyright 2004 Oracle and/or its affiliates. All rights reserved. * * 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: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. */ /* this might be rightly regarded an os dependent file */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" static inline int changehost (Display *dpy, XHostAddress *host, BYTE mode) { xChangeHostsReq *req; int length; XServerInterpretedAddress *siAddr; int addrlen; siAddr = host->family == FamilyServerInterpreted ? (XServerInterpretedAddress *)host->address : NULL; addrlen = siAddr ? siAddr->typelength + siAddr->valuelength + 1 : host->length; length = (addrlen + 3) & ~0x3; /* round up */ LockDisplay(dpy); GetReqExtra (ChangeHosts, length, req); if (!req) { UnlockDisplay(dpy); return 0; } req->mode = mode; req->hostFamily = host->family; req->hostLength = addrlen; if (siAddr) { char *dest = (char *) NEXTPTR(req,xChangeHostsReq); memcpy(dest, siAddr->type, siAddr->typelength); dest[siAddr->typelength] = '\0'; memcpy(dest + siAddr->typelength + 1,siAddr->value,siAddr->valuelength); } else { memcpy((char *) NEXTPTR(req,xChangeHostsReq), host->address, addrlen); } UnlockDisplay(dpy); SyncHandle(); return 1; } int XAddHost ( register Display *dpy, XHostAddress *host) { return changehost(dpy, host, HostInsert); } int XRemoveHost ( register Display *dpy, XHostAddress *host) { return changehost(dpy, host, HostDelete); } int XAddHosts ( register Display *dpy, XHostAddress *hosts, int n) { register int i; for (i = 0; i < n; i++) { (void) XAddHost(dpy, &hosts[i]); } return 1; } int XRemoveHosts ( register Display *dpy, XHostAddress *hosts, int n) { register int i; for (i = 0; i < n; i++) { (void) XRemoveHost(dpy, &hosts[i]); } return 1; } d/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to libX11-1.6.3/src/GetWMCMapW.c000064401431060000012000000061231247741723500156660ustar00alancstaff00002660200006 /*********************************************************** Copyright 1987, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include #include Status XGetWMColormapWindows ( Display *dpy, Window w, Window **colormapWindows, int *countReturn) { Atom *data = NULL; Atom actual_type; Atom prop; int actual_format; unsigned long leftover, nitems; prop = XInternAtom(dpy, "WM_COLORMAP_WINDOWS", False); if (prop == None) return False; /* get the property */ if (XGetWindowProperty (dpy, w, prop, 0L, 1000000L, False, XA_WINDOW, &actual_type, &actual_format, &nitems, &leftover, (unsigned char **) &data) != Success) return False; if (actual_type != XA_WINDOW || actual_format != 32) { Xfree (data); return False; } *colormapWindows = (Window *) data; *countReturn = (int) nitems; return True; } libX11-1.6.3/src/x11_xcb.c000064401431060000012000000005501247741723500152560ustar00alancstaff00002660200006/* Copyright (C) 2003,2006 Jamey Sharp, Josh Triplett * This file is licensed under the MIT license. See the file COPYING. */ #include "Xlibint.h" #include "Xxcbint.h" xcb_connection_t *XGetXCBConnection(Display *dpy) { return dpy->xcb->connection; } void XSetEventQueueOwner(Display *dpy, enum XEventQueueOwner owner) { dpy->xcb->event_owner = owner; } libX11-1.6.3/src/ParseCol.c000064401431060000012000000066211247741723500155260ustar00alancstaff00002660200006/* Copyright 1985, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include #include "Xlibint.h" #include "Xcmsint.h" Status XParseColor ( register Display *dpy, Colormap cmap, _Xconst char *spec, XColor *def) { register int n, i; int r, g, b; char c; XcmsCCC ccc; XcmsColor cmsColor; if (!spec) return(0); n = strlen (spec); if (*spec == '#') { /* * RGB */ spec++; n--; if (n != 3 && n != 6 && n != 9 && n != 12) return (0); n /= 3; g = b = 0; do { r = g; g = b; b = 0; for (i = n; --i >= 0; ) { c = *spec++; b <<= 4; if (c >= '0' && c <= '9') b |= c - '0'; else if (c >= 'A' && c <= 'F') b |= c - ('A' - 10); else if (c >= 'a' && c <= 'f') b |= c - ('a' - 10); else return (0); } } while (*spec != '\0'); n <<= 2; n = 16 - n; def->red = r << n; def->green = g << n; def->blue = b << n; def->flags = DoRed | DoGreen | DoBlue; return (1); } #ifdef XCMS /* * Let's Attempt to use Xcms and i18n approach to Parse Color */ if ((ccc = XcmsCCCOfColormap(dpy, cmap)) != (XcmsCCC)NULL) { const char *tmpName = spec; switch (_XcmsResolveColorString(ccc, &tmpName, &cmsColor, XcmsRGBFormat)) { case XcmsSuccess: case XcmsSuccessWithCompression: cmsColor.pixel = def->pixel; _XcmsRGB_to_XColor(&cmsColor, def, 1); return(1); case XcmsFailure: case _XCMS_NEWNAME: /* * if the result was _XCMS_NEWNAME tmpName points to * a string in cmsColNm.c:pairs table, for example, * gray70 would become tekhvc:0.0/70.0/0.0 */ break; } } #endif /* * Xcms and i18n methods failed, so lets pass it to the server * for parsing. */ { xLookupColorReply reply; register xLookupColorReq *req; LockDisplay(dpy); GetReq (LookupColor, req); req->cmap = cmap; req->nbytes = n = strlen(spec); req->length += (n + 3) >> 2; Data (dpy, spec, (long)n); if (!_XReply (dpy, (xReply *) &reply, 0, xTrue)) { UnlockDisplay(dpy); SyncHandle(); return (0); } def->red = reply.exactRed; def->green = reply.exactGreen; def->blue = reply.exactBlue; def->flags = DoRed | DoGreen | DoBlue; UnlockDisplay(dpy); SyncHandle(); return (1); } } Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise tlibX11-1.6.3/src/GrKey.c000064401431060000012000000033041247741723500150320ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XGrabKey( register Display *dpy, int key, unsigned int modifiers, Window grab_window, Bool owner_events, int pointer_mode, int keyboard_mode) { register xGrabKeyReq *req; LockDisplay(dpy); GetReq(GrabKey, req); req->ownerEvents = owner_events; req->grabWindow = grab_window; req->modifiers = modifiers; req->key = key; req->pointerMode = pointer_mode; req->keyboardMode = keyboard_mode; UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/ChkTypEv.c000064401431060000012000000045711247741723500155150ustar00alancstaff00002660200006/* Copyright 1985, 1987, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" /* * Check existing events in queue to find if any match. If so, return. * If not, flush buffer and see if any more events are readable. If one * matches, return. If all else fails, tell the user no events found. */ Bool XCheckTypedEvent ( register Display *dpy, int type, /* Selected event type. */ register XEvent *event) /* XEvent to be filled in. */ { register _XQEvent *prev, *qelt; unsigned long qe_serial = 0; int n; /* time through count */ LockDisplay(dpy); /* Delete unclaimed cookies */ _XFreeEventCookies(dpy); prev = NULL; for (n = 3; --n >= 0;) { for (qelt = prev ? prev->next : dpy->head; qelt; prev = qelt, qelt = qelt->next) { if (qelt->event.type == type) { *event = qelt->event; _XDeq(dpy, prev, qelt); _XStoreEventCookie(dpy, event); UnlockDisplay(dpy); return True; } } if (prev) qe_serial = prev->qserial_num; switch (n) { case 2: _XEventsQueued(dpy, QueuedAfterReading); break; case 1: _XFlush(dpy); break; } if (prev && prev->qserial_num != qe_serial) /* another thread has snatched this event */ prev = NULL; } UnlockDisplay(dpy); return False; } libX11-1.6.3/src/Iconify.c000064401431060000012000000061231247741723500154130ustar00alancstaff00002660200006 /*********************************************************** Copyright 1988 by Wyse Technology, Inc., San Jose, Ca. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name Wyse not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. WYSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1988, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include /* * This function instructs the window manager to change this window from * NormalState to IconicState. */ Status XIconifyWindow ( Display *dpy, Window w, int screen) { Atom prop; prop = XInternAtom (dpy, "WM_CHANGE_STATE", False); if (prop == None) return False; else { XClientMessageEvent ev = { .type = ClientMessage, .window = w, .message_type = prop, .format = 32, .data.l[0] = IconicState }; Window root = RootWindow (dpy, screen); return (XSendEvent (dpy, root, False, SubstructureRedirectMask|SubstructureNotifyMask, (XEvent *)&ev)); } } e Technology, Inc., San Jose, Ca. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name Wyse not be used in advertising or libX11-1.6.3/src/UngrabPtr.c000064401431060000012000000026311247741723500157170ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XUngrabPointer( register Display *dpy, Time time) { register xResourceReq *req; LockDisplay(dpy); GetResReq(UngrabPointer, time, req); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/SetClMask.c000064401431060000012000000030201247741723500156320ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XSetClipMask ( register Display *dpy, GC gc, Pixmap mask) { LockDisplay(dpy); /* always update, since client may have changed pixmap contents */ gc->values.clip_mask = mask; gc->dirty |= GCClipMask; gc->rects = 0; _XFlushGCCache(dpy, gc); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/Xrm.c000064401431060000012000002074051247741723500145670ustar00alancstaff00002660200006 /*********************************************************** Copyright 1987, 1988, 1990 by Digital Equipment Corporation, Maynard All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1990, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include "Xlibint.h" #include #include "Xlcint.h" #ifdef XTHREADS #include "locking.h" #endif #include #include #include #include "Xresinternal.h" #include "Xresource.h" /* These Xrm routines allow very fast lookup of resources in the resource database. Several usage patterns are exploited: (1) Widgets get a lot of resources at one time. Rather than look up each from scratch, we can precompute the prioritized list of database levels once, then search for each resource starting at the beginning of the list. (2) Many database levels don't contain any leaf resource nodes. There is no point in looking for resources on a level that doesn't contain any. This information is kept on a per-level basis. (3) Sometimes the widget instance tree is structured such that you get the same class name repeated on the fully qualified widget name. This can result in the same database level occuring multiple times on the search list. The code below only checks to see if you get two identical search lists in a row, rather than look back through all database levels, but in practice this removes all duplicates I've ever observed. Joel McCormack */ /* The Xrm representation has been completely redesigned to substantially reduce memory and hopefully improve performance. The database is structured into two kinds of tables: LTables that contain only values, and NTables that contain only other tables. Some invariants: The next pointer of the top-level node table points to the top-level leaf table, if any. Within an LTable, for a given name, the tight value always precedes the loose value, and if both are present the loose value is always right after the tight value. Within an NTable, all of the entries for a given name are contiguous, in the order tight NTable, loose NTable, tight LTable, loose LTable. Bob Scheifler */ static XrmQuark XrmQString, XrmQANY; typedef Bool (*DBEnumProc)( XrmDatabase* /* db */, XrmBindingList /* bindings */, XrmQuarkList /* quarks */, XrmRepresentation* /* type */, XrmValue* /* value */, XPointer /* closure */ ); typedef struct _VEntry { struct _VEntry *next; /* next in chain */ XrmQuark name; /* name of this entry */ unsigned int tight:1; /* 1 if it is a tight binding */ unsigned int string:1; /* 1 if type is String */ unsigned int size:30; /* size of value */ } VEntryRec, *VEntry; typedef struct _DEntry { VEntryRec entry; /* entry */ XrmRepresentation type; /* representation type */ } DEntryRec, *DEntry; /* the value is right after the structure */ #define StringValue(ve) (XPointer)((ve) + 1) #define RepType(ve) ((DEntry)(ve))->type /* the value is right after the structure */ #define DataValue(ve) (XPointer)(((DEntry)(ve)) + 1) #define RawValue(ve) (char *)((ve)->string ? StringValue(ve) : DataValue(ve)) typedef struct _NTable { struct _NTable *next; /* next in chain */ XrmQuark name; /* name of this entry */ unsigned int tight:1; /* 1 if it is a tight binding */ unsigned int leaf:1; /* 1 if children are values */ unsigned int hasloose:1; /* 1 if has loose children */ unsigned int hasany:1; /* 1 if has ANY entry */ unsigned int pad:4; /* unused */ unsigned int mask:8; /* hash size - 1 */ unsigned int entries:16; /* number of children */ } NTableRec, *NTable; /* the buckets are right after the structure */ #define NodeBuckets(ne) ((NTable *)((ne) + 1)) #define NodeHash(ne,q) NodeBuckets(ne)[(q) & (ne)->mask] /* leaf tables have an extra level of indirection for the buckets, * so that resizing can be done without invalidating a search list. * This is completely ugly, and wastes some memory, but the Xlib * spec doesn't really specify whether invalidation is OK, and the * old implementation did not invalidate. */ typedef struct _LTable { NTableRec table; VEntry *buckets; } LTableRec, *LTable; #define LeafHash(le,q) (le)->buckets[(q) & (le)->table.mask] /* An XrmDatabase just holds a pointer to the first top-level table. * The type name is no longer descriptive, but better to not change * the Xresource.h header file. This type also gets used to define * XrmSearchList, which is a complete crock, but we'll just leave it * and caste types as required. */ typedef struct _XrmHashBucketRec { NTable table; XPointer mbstate; XrmMethods methods; #ifdef XTHREADS LockInfoRec linfo; #endif } XrmHashBucketRec; /* closure used in get/put resource */ typedef struct _VClosure { XrmRepresentation *type; /* type of value */ XrmValuePtr value; /* value itself */ } VClosureRec, *VClosure; /* closure used in get search list */ typedef struct _SClosure { LTable *list; /* search list */ int idx; /* index of last filled element */ int limit; /* maximum index */ } SClosureRec, *SClosure; /* placed in XrmSearchList to indicate next table is loose only */ #define LOOSESEARCH ((LTable)1) /* closure used in enumerate database */ typedef struct _EClosure { XrmDatabase db; /* the database */ DBEnumProc proc; /* the user proc */ XPointer closure; /* the user closure */ XrmBindingList bindings; /* binding list */ XrmQuarkList quarks; /* quark list */ int mode; /* XrmEnum */ } EClosureRec, *EClosure; /* types for typecasting ETable based functions to NTable based functions */ typedef Bool (*getNTableSProcp)( NTable table, XrmNameList names, XrmClassList classes, SClosure closure); typedef Bool (*getNTableVProcp)( NTable table, XrmNameList names, XrmClassList classes, VClosure closure); typedef Bool (*getNTableEProcp)( NTable table, XrmNameList names, XrmClassList classes, register int level, EClosure closure); /* predicate to determine when to resize a hash table */ #define GrowthPred(n,m) ((unsigned)(n) > (((m) + 1) << 2)) #define GROW(prev) \ if (GrowthPred((*prev)->entries, (*prev)->mask)) \ GrowTable(prev) /* pick a reasonable value for maximum depth of resource database */ #define MAXDBDEPTH 100 /* macro used in get/search functions */ /* find an entry named ename, with leafness given by leaf */ #define NFIND(ename) \ q = ename; \ entry = NodeHash(table, q); \ while (entry && entry->name != q) \ entry = entry->next; \ if (leaf && entry && !entry->leaf) { \ entry = entry->next; \ if (entry && !entry->leaf) \ entry = entry->next; \ if (entry && entry->name != q) \ entry = (NTable)NULL; \ } /* resourceQuarks keeps track of what quarks have been associated with values * in all LTables. If a quark has never been used in an LTable, we don't need * to bother looking for it. */ static unsigned char *resourceQuarks = (unsigned char *)NULL; static XrmQuark maxResourceQuark = -1; /* determines if a quark has been used for a value in any database */ #define IsResourceQuark(q) ((q) > 0 && (q) <= maxResourceQuark && \ resourceQuarks[(q) >> 3] & (1 << ((q) & 7))) typedef unsigned char XrmBits; #define BSLASH ((XrmBits) (1 << 5)) #define NORMAL ((XrmBits) (1 << 4)) #define EOQ ((XrmBits) (1 << 3)) #define SEP ((XrmBits) (1 << 2)) #define ENDOF ((XrmBits) (1 << 1)) #define SPACE (NORMAL|EOQ|SEP|(XrmBits)0) #define RSEP (NORMAL|EOQ|SEP|(XrmBits)1) #define EOS (EOQ|SEP|ENDOF|(XrmBits)0) #define EOL (EOQ|SEP|ENDOF|(XrmBits)1) #define BINDING (NORMAL|EOQ) #define ODIGIT (NORMAL|(XrmBits)1) #define next_char(ch,str) xrmtypes[(unsigned char)((ch) = *(++(str)))] #define next_mbchar(ch,len,str) xrmtypes[(unsigned char)(ch = (*db->methods->mbchar)(db->mbstate, str, &len), str += len, ch)] #define is_space(bits) ((bits) == SPACE) #define is_EOQ(bits) ((bits) & EOQ) #define is_EOF(bits) ((bits) == EOS) #define is_EOL(bits) ((bits) & ENDOF) #define is_binding(bits) ((bits) == BINDING) #define is_odigit(bits) ((bits) == ODIGIT) #define is_separator(bits) ((bits) & SEP) #define is_nonpcs(bits) (!(bits)) #define is_normal(bits) ((bits) & NORMAL) #define is_simple(bits) ((bits) & (NORMAL|BSLASH)) #define is_special(bits) ((bits) & (ENDOF|BSLASH)) /* parsing types */ static XrmBits const xrmtypes[256] = { EOS,0,0,0,0,0,0,0, 0,SPACE,EOL,0,0, #if defined(WIN32) || defined(__UNIXOS2__) EOL, /* treat CR the same as LF, just in case */ #else 0, #endif 0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, SPACE,NORMAL,NORMAL,NORMAL,NORMAL,NORMAL,NORMAL,NORMAL, NORMAL,NORMAL,BINDING,NORMAL,NORMAL,NORMAL,BINDING,NORMAL, ODIGIT,ODIGIT,ODIGIT,ODIGIT,ODIGIT,ODIGIT,ODIGIT,ODIGIT, NORMAL,NORMAL,RSEP,NORMAL,NORMAL,NORMAL,NORMAL,NORMAL, NORMAL,NORMAL,NORMAL,NORMAL,NORMAL,NORMAL,NORMAL,NORMAL, NORMAL,NORMAL,NORMAL,NORMAL,NORMAL,NORMAL,NORMAL,NORMAL, NORMAL,NORMAL,NORMAL,NORMAL,NORMAL,NORMAL,NORMAL,NORMAL, NORMAL,NORMAL,NORMAL,NORMAL,BSLASH,NORMAL,NORMAL,NORMAL, NORMAL,NORMAL,NORMAL,NORMAL,NORMAL,NORMAL,NORMAL,NORMAL, NORMAL,NORMAL,NORMAL,NORMAL,NORMAL,NORMAL,NORMAL,NORMAL, NORMAL,NORMAL,NORMAL,NORMAL,NORMAL,NORMAL,NORMAL,NORMAL, NORMAL,NORMAL,NORMAL,NORMAL,NORMAL,NORMAL,NORMAL,0 /* The rest will be automatically initialized to zero. */ }; void XrmInitialize(void) { XrmQString = XrmPermStringToQuark("String"); XrmQANY = XrmPermStringToQuark("?"); } XrmDatabase XrmGetDatabase( Display *display) { XrmDatabase retval; LockDisplay(display); retval = display->db; UnlockDisplay(display); return retval; } void XrmSetDatabase( Display *display, XrmDatabase database) { LockDisplay(display); /* destroy database if set up implicitly by XGetDefault() */ if (display->db && (display->flags & XlibDisplayDfltRMDB)) { XrmDestroyDatabase(display->db); display->flags &= ~XlibDisplayDfltRMDB; } display->db = database; UnlockDisplay(display); } void XrmStringToQuarkList( register _Xconst char *name, register XrmQuarkList quarks) /* RETURN */ { register XrmBits bits; register Signature sig = 0; register char ch, *tname; register int i = 0; if ((tname = (char *)name)) { tname--; while (!is_EOF(bits = next_char(ch, tname))) { if (is_binding (bits)) { if (i) { /* Found a complete name */ *quarks++ = _XrmInternalStringToQuark(name,tname - name, sig, False); i = 0; sig = 0; } name = tname+1; } else { sig = (sig << 1) + ch; /* Compute the signature. */ i++; } } *quarks++ = _XrmInternalStringToQuark(name, tname - name, sig, False); } *quarks = NULLQUARK; } void XrmStringToBindingQuarkList( register _Xconst char *name, register XrmBindingList bindings, /* RETURN */ register XrmQuarkList quarks) /* RETURN */ { register XrmBits bits; register Signature sig = 0; register char ch, *tname; register XrmBinding binding; register int i = 0; if ((tname = (char *)name)) { tname--; binding = XrmBindTightly; while (!is_EOF(bits = next_char(ch, tname))) { if (is_binding (bits)) { if (i) { /* Found a complete name */ *bindings++ = binding; *quarks++ = _XrmInternalStringToQuark(name, tname - name, sig, False); i = 0; sig = 0; binding = XrmBindTightly; } name = tname+1; if (ch == '*') binding = XrmBindLoosely; } else { sig = (sig << 1) + ch; /* Compute the signature. */ i++; } } *bindings = binding; *quarks++ = _XrmInternalStringToQuark(name, tname - name, sig, False); } *quarks = NULLQUARK; } #ifdef DEBUG static void PrintQuarkList( XrmQuarkList quarks, FILE *stream) { Bool firstNameSeen; for (firstNameSeen = False; *quarks; quarks++) { if (firstNameSeen) { (void) fprintf(stream, "."); } firstNameSeen = True; (void) fputs(XrmQuarkToString(*quarks), stream); } } /* PrintQuarkList */ #endif /* DEBUG */ /* * Fallback methods for Xrm parsing. * Simulate a C locale. No state needed here. */ static void c_mbnoop( XPointer state) { } static char c_mbchar( XPointer state, const char *str, int *lenp) { *lenp = 1; return *str; } static const char * c_lcname( XPointer state) { return "C"; } static const XrmMethodsRec mb_methods = { c_mbnoop, /* mbinit */ c_mbchar, /* mbchar */ c_mbnoop, /* mbfinish */ c_lcname, /* lcname */ c_mbnoop /* destroy */ }; static XrmDatabase NewDatabase(void) { register XrmDatabase db; db = Xmalloc(sizeof(XrmHashBucketRec)); if (db) { _XCreateMutex(&db->linfo); db->table = (NTable)NULL; db->mbstate = (XPointer)NULL; db->methods = _XrmInitParseInfo(&db->mbstate); if (!db->methods) db->methods = &mb_methods; } return db; } /* move all values from ftable to ttable, and free ftable's buckets. * ttable is guaranteed empty to start with. */ static void MoveValues( LTable ftable, register LTable ttable) { register VEntry fentry, nfentry; register VEntry *prev; register VEntry *bucket; register VEntry tentry; register int i; for (i = ftable->table.mask, bucket = ftable->buckets; i >= 0; i--) { for (fentry = *bucket++; fentry; fentry = nfentry) { prev = &LeafHash(ttable, fentry->name); tentry = *prev; *prev = fentry; /* chain on all with same name, to preserve invariant order */ while ((nfentry = fentry->next) && nfentry->name == fentry->name) fentry = nfentry; fentry->next = tentry; } } Xfree(ftable->buckets); } /* move all tables from ftable to ttable, and free ftable. * ttable is quaranteed empty to start with. */ static void MoveTables( NTable ftable, register NTable ttable) { register NTable fentry, nfentry; register NTable *prev; register NTable *bucket; register NTable tentry; register int i; for (i = ftable->mask, bucket = NodeBuckets(ftable); i >= 0; i--) { for (fentry = *bucket++; fentry; fentry = nfentry) { prev = &NodeHash(ttable, fentry->name); tentry = *prev; *prev = fentry; /* chain on all with same name, to preserve invariant order */ while ((nfentry = fentry->next) && nfentry->name == fentry->name) fentry = nfentry; fentry->next = tentry; } } Xfree(ftable); } /* grow the table, based on current number of entries */ static void GrowTable( NTable *prev) { register NTable table; register int i; table = *prev; i = table->mask; if (i == 255) /* biggest it gets */ return; while (i < 255 && GrowthPred(table->entries, i)) i = (i << 1) + 1; i++; /* i is now the new size */ if (table->leaf) { register LTable ltable; LTableRec otable; ltable = (LTable)table; /* cons up a copy to make MoveValues look symmetric */ otable = *ltable; ltable->buckets = Xcalloc(i, sizeof(VEntry)); if (!ltable->buckets) { ltable->buckets = otable.buckets; return; } ltable->table.mask = i - 1; MoveValues(&otable, ltable); } else { register NTable ntable; ntable = Xcalloc(1, sizeof(NTableRec) + (i * sizeof(NTable))); if (!ntable) return; *ntable = *table; ntable->mask = i - 1; *prev = ntable; MoveTables(table, ntable); } } /* merge values from ftable into *pprev, destroy ftable in the process */ static void MergeValues( LTable ftable, NTable *pprev, Bool override) { register VEntry fentry, tentry; register VEntry *prev; register LTable ttable; VEntry *bucket; int i; register XrmQuark q; ttable = (LTable)*pprev; if (ftable->table.hasloose) ttable->table.hasloose = 1; for (i = ftable->table.mask, bucket = ftable->buckets; i >= 0; i--, bucket++) { for (fentry = *bucket; fentry; ) { q = fentry->name; prev = &LeafHash(ttable, q); tentry = *prev; while (tentry && tentry->name != q) tentry = *(prev = &tentry->next); /* note: test intentionally uses fentry->name instead of q */ /* permits serendipitous inserts */ while (tentry && tentry->name == fentry->name) { /* if tentry is earlier, skip it */ if (!fentry->tight && tentry->tight) { tentry = *(prev = &tentry->next); continue; } if (fentry->tight != tentry->tight) { /* no match, chain in fentry */ *prev = fentry; prev = &fentry->next; fentry = *prev; *prev = tentry; ttable->table.entries++; } else if (override) { /* match, chain in fentry, splice out and free tentry */ *prev = fentry; prev = &fentry->next; fentry = *prev; *prev = tentry->next; /* free the overridden entry */ Xfree(tentry); /* get next tentry */ tentry = *prev; } else { /* match, discard fentry */ prev = &tentry->next; tentry = fentry; /* use as a temp var */ fentry = fentry->next; /* free the overpowered entry */ Xfree(tentry); /* get next tentry */ tentry = *prev; } if (!fentry) break; } /* at this point, tentry cannot match any fentry named q */ /* chain in all bindings together, preserve invariant order */ while (fentry && fentry->name == q) { *prev = fentry; prev = &fentry->next; fentry = *prev; *prev = tentry; ttable->table.entries++; } } } Xfree(ftable->buckets); Xfree(ftable); /* resize if necessary, now that we're all done */ GROW(pprev); } /* merge tables from ftable into *pprev, destroy ftable in the process */ static void MergeTables( NTable ftable, NTable *pprev, Bool override) { register NTable fentry, tentry; NTable nfentry; register NTable *prev; register NTable ttable; NTable *bucket; int i; register XrmQuark q; ttable = *pprev; if (ftable->hasloose) ttable->hasloose = 1; if (ftable->hasany) ttable->hasany = 1; for (i = ftable->mask, bucket = NodeBuckets(ftable); i >= 0; i--, bucket++) { for (fentry = *bucket; fentry; ) { q = fentry->name; prev = &NodeHash(ttable, q); tentry = *prev; while (tentry && tentry->name != q) tentry = *(prev = &tentry->next); /* note: test intentionally uses fentry->name instead of q */ /* permits serendipitous inserts */ while (tentry && tentry->name == fentry->name) { /* if tentry is earlier, skip it */ if ((fentry->leaf && !tentry->leaf) || (!fentry->tight && tentry->tight && (fentry->leaf || !tentry->leaf))) { tentry = *(prev = &tentry->next); continue; } nfentry = fentry->next; if (fentry->leaf != tentry->leaf || fentry->tight != tentry->tight) { /* no match, just chain in */ *prev = fentry; *(prev = &fentry->next) = tentry; ttable->entries++; } else { if (fentry->leaf) MergeValues((LTable)fentry, prev, override); else MergeTables(fentry, prev, override); /* bump to next tentry */ tentry = *(prev = &(*prev)->next); } /* bump to next fentry */ fentry = nfentry; if (!fentry) break; } /* at this point, tentry cannot match any fentry named q */ /* chain in all bindings together, preserve invariant order */ while (fentry && fentry->name == q) { *prev = fentry; prev = &fentry->next; fentry = *prev; *prev = tentry; ttable->entries++; } } } Xfree(ftable); /* resize if necessary, now that we're all done */ GROW(pprev); } void XrmCombineDatabase( XrmDatabase from, XrmDatabase *into, Bool override) { register NTable *prev; register NTable ftable, ttable, nftable; if (!*into) { *into = from; } else if (from) { _XLockMutex(&from->linfo); _XLockMutex(&(*into)->linfo); if ((ftable = from->table)) { prev = &(*into)->table; ttable = *prev; if (!ftable->leaf) { nftable = ftable->next; if (ttable && !ttable->leaf) { /* both have node tables, merge them */ MergeTables(ftable, prev, override); /* bump to into's leaf table, if any */ ttable = *(prev = &(*prev)->next); } else { /* into has no node table, link from's in */ *prev = ftable; *(prev = &ftable->next) = ttable; } /* bump to from's leaf table, if any */ ftable = nftable; } else { /* bump to into's leaf table, if any */ if (ttable && !ttable->leaf) ttable = *(prev = &ttable->next); } if (ftable) { /* if into has a leaf, merge, else insert */ if (ttable) MergeValues((LTable)ftable, prev, override); else *prev = ftable; } } (from->methods->destroy)(from->mbstate); _XUnlockMutex(&from->linfo); _XFreeMutex(&from->linfo); Xfree(from); _XUnlockMutex(&(*into)->linfo); } } void XrmMergeDatabases( XrmDatabase from, XrmDatabase *into) { XrmCombineDatabase(from, into, True); } /* store a value in the database, overriding any existing entry */ static void PutEntry( XrmDatabase db, XrmBindingList bindings, XrmQuarkList quarks, XrmRepresentation type, XrmValuePtr value) { register NTable *pprev, *prev; register NTable table; register XrmQuark q; register VEntry *vprev; register VEntry entry; NTable *nprev, *firstpprev; #define NEWTABLE(q,i) \ table = Xmalloc(sizeof(LTableRec)); \ if (!table) \ return; \ table->name = q; \ table->hasloose = 0; \ table->hasany = 0; \ table->mask = 0; \ table->entries = 0; \ if (quarks[i]) { \ table->leaf = 0; \ nprev = NodeBuckets(table); \ } else { \ table->leaf = 1; \ if (!(nprev = Xmalloc(sizeof(VEntry *)))) {\ Xfree(table); \ return; \ } \ ((LTable)table)->buckets = (VEntry *)nprev; \ } \ *nprev = (NTable)NULL; \ table->next = *prev; \ *prev = table if (!db || !*quarks) return; table = *(prev = &db->table); /* if already at leaf, bump to the leaf table */ if (!quarks[1] && table && !table->leaf) table = *(prev = &table->next); pprev = prev; if (!table || (quarks[1] && table->leaf)) { /* no top-level node table, create one and chain it in */ NEWTABLE(NULLQUARK,1); table->tight = 1; /* arbitrary */ prev = nprev; } else { /* search along until we need a value */ while (quarks[1]) { q = *quarks; table = *(prev = &NodeHash(table, q)); while (table && table->name != q) table = *(prev = &table->next); if (!table) break; /* not found */ if (quarks[2]) { if (table->leaf) break; /* not found */ } else { if (!table->leaf) { /* bump to leaf table, if any */ table = *(prev = &table->next); if (!table || table->name != q) break; /* not found */ if (!table->leaf) { /* bump to leaf table, if any */ table = *(prev = &table->next); if (!table || table->name != q) break; /* not found */ } } } if (*bindings == XrmBindTightly) { if (!table->tight) break; /* not found */ } else { if (table->tight) { /* bump to loose table, if any */ table = *(prev = &table->next); if (!table || table->name != q || !quarks[2] != table->leaf) break; /* not found */ } } /* found that one, bump to next quark */ pprev = prev; quarks++; bindings++; } if (!quarks[1]) { /* found all the way to a leaf */ q = *quarks; entry = *(vprev = &LeafHash((LTable)table, q)); while (entry && entry->name != q) entry = *(vprev = &entry->next); /* if want loose and have tight, bump to next entry */ if (entry && *bindings == XrmBindLoosely && entry->tight) entry = *(vprev = &entry->next); if (entry && entry->name == q && (*bindings == XrmBindTightly) == entry->tight) { /* match, need to override */ if ((type == XrmQString) == entry->string && entry->size == value->size) { /* update type if not String, can be different */ if (!entry->string) RepType(entry) = type; /* identical size, just overwrite value */ memcpy(RawValue(entry), (char *)value->addr, value->size); return; } /* splice out and free old entry */ *vprev = entry->next; Xfree(entry); (*pprev)->entries--; } /* this is where to insert */ prev = (NTable *)vprev; } } /* keep the top table, because we may have to grow it */ firstpprev = pprev; /* iterate until we get to the leaf */ while (quarks[1]) { /* build a new table and chain it in */ NEWTABLE(*quarks,2); if (*quarks++ == XrmQANY) (*pprev)->hasany = 1; if (*bindings++ == XrmBindTightly) { table->tight = 1; } else { table->tight = 0; (*pprev)->hasloose = 1; } (*pprev)->entries++; pprev = prev; prev = nprev; } /* now allocate the value entry */ entry = Xmalloc(((type == XrmQString) ? sizeof(VEntryRec) : sizeof(DEntryRec)) + value->size); if (!entry) return; entry->name = q = *quarks; if (*bindings == XrmBindTightly) { entry->tight = 1; } else { entry->tight = 0; (*pprev)->hasloose = 1; } /* chain it in, with a bit of type cast ugliness */ entry->next = *((VEntry *)prev); *((VEntry *)prev) = entry; entry->size = value->size; if (type == XrmQString) { entry->string = 1; } else { entry->string = 0; RepType(entry) = type; } /* save a copy of the value */ memcpy(RawValue(entry), (char *)value->addr, value->size); (*pprev)->entries++; /* this is a new leaf, need to remember it for search lists */ if (q > maxResourceQuark) { unsigned oldsize = (maxResourceQuark + 1) >> 3; unsigned size = ((q | 0x7f) + 1) >> 3; /* reallocate in chunks */ if (resourceQuarks) { unsigned char *prevQuarks = resourceQuarks; resourceQuarks = Xrealloc(resourceQuarks, size); if (!resourceQuarks) { Xfree(prevQuarks); } } else resourceQuarks = Xmalloc(size); if (resourceQuarks) { bzero((char *)&resourceQuarks[oldsize], size - oldsize); maxResourceQuark = (size << 3) - 1; } else { maxResourceQuark = -1; } } if (q > 0 && resourceQuarks) resourceQuarks[q >> 3] |= 1 << (q & 0x7); GROW(firstpprev); #undef NEWTABLE } void XrmQPutResource( XrmDatabase *pdb, XrmBindingList bindings, XrmQuarkList quarks, XrmRepresentation type, XrmValuePtr value) { if (!*pdb) *pdb = NewDatabase(); _XLockMutex(&(*pdb)->linfo); PutEntry(*pdb, bindings, quarks, type, value); _XUnlockMutex(&(*pdb)->linfo); } void XrmPutResource( XrmDatabase *pdb, _Xconst char *specifier, _Xconst char *type, XrmValuePtr value) { XrmBinding bindings[MAXDBDEPTH+1]; XrmQuark quarks[MAXDBDEPTH+1]; if (!*pdb) *pdb = NewDatabase(); _XLockMutex(&(*pdb)->linfo); XrmStringToBindingQuarkList(specifier, bindings, quarks); PutEntry(*pdb, bindings, quarks, XrmStringToQuark(type), value); _XUnlockMutex(&(*pdb)->linfo); } void XrmQPutStringResource( XrmDatabase *pdb, XrmBindingList bindings, XrmQuarkList quarks, _Xconst char *str) { XrmValue value; if (!*pdb) *pdb = NewDatabase(); value.addr = (XPointer) str; value.size = strlen(str)+1; _XLockMutex(&(*pdb)->linfo); PutEntry(*pdb, bindings, quarks, XrmQString, &value); _XUnlockMutex(&(*pdb)->linfo); } /* Function Name: GetDatabase * Description: Parses a string and stores it as a database. * Arguments: db - the database. * str - a pointer to the string containing the database. * filename - source filename, if any. * doall - whether to do all lines or just one */ /* * This function is highly optimized to inline as much as possible. * Be very careful with modifications, or simplifications, as they * may adversely affect the performance. * * Chris Peterson, MIT X Consortium 5/17/90. */ /* * Xlib spec says max 100 quarks in a lookup, will stop and return if * return if any single production's lhs has more than 100 components. */ #define QLIST_SIZE 100 /* * This should be big enough to handle things like the XKeysymDB or biggish * ~/.Xdefaults or app-defaults files. Anything bigger will be allocated on * the heap. */ #define DEF_BUFF_SIZE 8192 static void GetIncludeFile( XrmDatabase db, _Xconst char *base, _Xconst char *fname, int fnamelen, int depth); static void GetDatabase( XrmDatabase db, _Xconst char *str, _Xconst char *filename, Bool doall, int depth) { char *rhs; char *lhs, lhs_s[DEF_BUFF_SIZE]; XrmQuark quarks[QLIST_SIZE + 1]; /* allow for a terminal NullQuark */ XrmBinding bindings[QLIST_SIZE + 1]; register char *ptr; register XrmBits bits = 0; register char c; register Signature sig; register char *ptr_max; register int num_quarks; register XrmBindingList t_bindings; int len, alloc_chars; unsigned long str_len; XrmValue value; Bool only_pcs; Bool dolines; if (!db) return; /* * if strlen (str) < DEF_BUFF_SIZE allocate buffers on the stack for * speed otherwise malloc the buffer. From a buffer overflow standpoint * we can be sure that neither: a) a component on the lhs, or b) a * value on the rhs, will be longer than the overall length of str, * i.e. strlen(str). * * This should give good performance when parsing "*foo: bar" type * databases as might be passed with -xrm command line options; but * with larger databases, e.g. .Xdefaults, app-defaults, or KeysymDB * files, the size of the buffers will be overly large. One way * around this would be to double-parse each production with a resulting * performance hit. In any event we can be assured that a lhs component * name or a rhs value won't be longer than str itself. */ str_len = strlen (str); if (DEF_BUFF_SIZE > str_len) lhs = lhs_s; else if ((lhs = Xmalloc (str_len)) == NULL) return; alloc_chars = DEF_BUFF_SIZE < str_len ? str_len : DEF_BUFF_SIZE; if ((rhs = Xmalloc (alloc_chars)) == NULL) { if (lhs != lhs_s) Xfree (lhs); return; } (*db->methods->mbinit)(db->mbstate); str--; dolines = True; while (!is_EOF(bits) && dolines) { dolines = doall; /* * First: Remove extra whitespace. */ do { bits = next_char(c, str); } while is_space(bits); /* * Ignore empty lines. */ if (is_EOL(bits)) continue; /* start a new line. */ /* * Second: check the first character in a line to see if it is * "!" signifying a comment, or "#" signifying a directive. */ if (c == '!') { /* Comment, spin to next newline */ while (is_simple(bits = next_char(c, str))) {} if (is_EOL(bits)) continue; while (!is_EOL(bits = next_mbchar(c, len, str))) {} str--; continue; /* start a new line. */ } if (c == '#') { /* Directive */ /* remove extra whitespace */ only_pcs = True; while (is_space(bits = next_char(c, str))) {}; /* only "include" directive is currently defined */ if (!strncmp(str, "include", 7)) { str += (7-1); /* remove extra whitespace */ while (is_space(bits = next_char(c, str))) {}; /* must have a starting " */ if (c == '"') { _Xconst char *fname = str+1; len = 0; do { if (only_pcs) { bits = next_char(c, str); if (is_nonpcs(bits)) only_pcs = False; } if (!only_pcs) bits = next_mbchar(c, len, str); } while (c != '"' && !is_EOL(bits)); /* must have an ending " */ if (c == '"') GetIncludeFile(db, filename, fname, str - len - fname, depth); } } /* spin to next newline */ if (only_pcs) { while (is_simple(bits)) bits = next_char(c, str); if (is_EOL(bits)) continue; } while (!is_EOL(bits)) bits = next_mbchar(c, len, str); str--; continue; /* start a new line. */ } /* * Third: loop through the LHS of the resource specification * storing characters and converting this to a Quark. */ num_quarks = 0; t_bindings = bindings; sig = 0; ptr = lhs; *t_bindings = XrmBindTightly; for(;;) { if (!is_binding(bits)) { while (!is_EOQ(bits)) { *ptr++ = c; sig = (sig << 1) + c; /* Compute the signature. */ bits = next_char(c, str); } quarks[num_quarks++] = _XrmInternalStringToQuark(lhs, ptr - lhs, sig, False); if (num_quarks > QLIST_SIZE) { Xfree(rhs); if (lhs != lhs_s) Xfree (lhs); (*db->methods->mbfinish)(db->mbstate); return; } if (is_separator(bits)) { if (!is_space(bits)) break; /* Remove white space */ do { *ptr++ = c; sig = (sig << 1) + c; /* Compute the signature. */ } while (is_space(bits = next_char(c, str))); /* * The spec doesn't permit it, but support spaces * internal to resource name/class */ if (is_separator(bits)) break; num_quarks--; continue; } if (c == '.') *(++t_bindings) = XrmBindTightly; else *(++t_bindings) = XrmBindLoosely; sig = 0; ptr = lhs; } else { /* * Magic unspecified feature #254. * * If two separators appear with no Text between them then * ignore them. * * If anyone of those separators is a '*' then the binding * will be loose, otherwise it will be tight. */ if (c == '*') *t_bindings = XrmBindLoosely; } bits = next_char(c, str); } quarks[num_quarks] = NULLQUARK; /* * Make sure that there is a ':' in this line. */ if (c != ':') { char oldc; /* * A parsing error has occured, toss everything on the line * a new_line can still be escaped with a '\'. */ while (is_normal(bits)) bits = next_char(c, str); if (is_EOL(bits)) continue; bits = next_mbchar(c, len, str); do { oldc = c; bits = next_mbchar(c, len, str); } while (c && (c != '\n' || oldc == '\\')); str--; continue; } /* * I now have a quark and binding list for the entire left hand * side. "c" currently points to the ":" separating the left hand * side for the right hand side. It is time to begin processing * the right hand side. */ /* * Fourth: Remove more whitespace */ for(;;) { if (is_space(bits = next_char(c, str))) continue; if (c != '\\') break; bits = next_char(c, str); if (c == '\n') continue; str--; bits = BSLASH; c = '\\'; break; } /* * Fifth: Process the right hand side. */ ptr = rhs; ptr_max = ptr + alloc_chars - 4; only_pcs = True; len = 1; for(;;) { /* * Tight loop for the normal case: Non backslash, non-end of value * character that will fit into the allocated buffer. */ if (only_pcs) { while (is_normal(bits) && ptr < ptr_max) { *ptr++ = c; bits = next_char(c, str); } if (is_EOL(bits)) break; if (is_nonpcs(bits)) { only_pcs = False; bits = next_mbchar(c, len, str); } } while (!is_special(bits) && ptr + len <= ptr_max) { len = -len; while (len) *ptr++ = str[len++]; if (*str == '\0') { bits = EOS; break; } bits = next_mbchar(c, len, str); } if (is_EOL(bits)) { str--; break; } if (c == '\\') { /* * We need to do some magic after a backslash. */ Bool read_next = True; if (only_pcs) { bits = next_char(c, str); if (is_nonpcs(bits)) only_pcs = False; } if (!only_pcs) bits = next_mbchar(c, len, str); if (is_EOL(bits)) { if (is_EOF(bits)) continue; } else if (c == 'n') { /* * "\n" means insert a newline. */ *ptr++ = '\n'; } else if (c == '\\') { /* * "\\" completes to just one backslash. */ *ptr++ = '\\'; } else { /* * pick up to three octal digits after the '\'. */ char temp[3]; int count = 0; while (is_odigit(bits) && count < 3) { temp[count++] = c; if (only_pcs) { bits = next_char(c, str); if (is_nonpcs(bits)) only_pcs = False; } if (!only_pcs) bits = next_mbchar(c, len, str); } /* * If we found three digits then insert that octal code * into the value string as a character. */ if (count == 3) { *ptr++ = (unsigned char) ((temp[0] - '0') * 0100 + (temp[1] - '0') * 010 + (temp[2] - '0')); } else { int tcount; /* * Otherwise just insert those characters into the * string, since no special processing is needed on * numerics we can skip the special processing. */ for (tcount = 0; tcount < count; tcount++) { *ptr++ = temp[tcount]; /* print them in the correct order */ } } read_next = False; } if (read_next) { if (only_pcs) { bits = next_char(c, str); if (is_nonpcs(bits)) only_pcs = False; } if (!only_pcs) bits = next_mbchar(c, len, str); } } /* * It is important to make sure that there is room for at least * four more characters in the buffer, since I can add that * many characters into the buffer after a backslash has occured. */ if (ptr + len > ptr_max) { char * temp_str; alloc_chars += BUFSIZ/10; temp_str = Xrealloc(rhs, sizeof(char) * alloc_chars); if (!temp_str) { Xfree(rhs); if (lhs != lhs_s) Xfree (lhs); (*db->methods->mbfinish)(db->mbstate); return; } ptr = temp_str + (ptr - rhs); /* reset pointer. */ rhs = temp_str; ptr_max = rhs + alloc_chars - 4; } } /* * Lastly: Terminate the value string, and store this entry * into the database. */ *ptr++ = '\0'; /* Store it in database */ value.size = ptr - rhs; value.addr = (XPointer) rhs; PutEntry(db, bindings, quarks, XrmQString, &value); } if (lhs != lhs_s) Xfree (lhs); Xfree (rhs); (*db->methods->mbfinish)(db->mbstate); } void XrmPutStringResource( XrmDatabase *pdb, _Xconst char*specifier, _Xconst char*str) { XrmValue value; XrmBinding bindings[MAXDBDEPTH+1]; XrmQuark quarks[MAXDBDEPTH+1]; if (!*pdb) *pdb = NewDatabase(); XrmStringToBindingQuarkList(specifier, bindings, quarks); value.addr = (XPointer) str; value.size = strlen(str)+1; _XLockMutex(&(*pdb)->linfo); PutEntry(*pdb, bindings, quarks, XrmQString, &value); _XUnlockMutex(&(*pdb)->linfo); } void XrmPutLineResource( XrmDatabase *pdb, _Xconst char*line) { if (!*pdb) *pdb = NewDatabase(); _XLockMutex(&(*pdb)->linfo); GetDatabase(*pdb, line, (char *)NULL, False, 0); _XUnlockMutex(&(*pdb)->linfo); } XrmDatabase XrmGetStringDatabase( _Xconst char *data) { XrmDatabase db; db = NewDatabase(); _XLockMutex(&db->linfo); GetDatabase(db, data, (char *)NULL, True, 0); _XUnlockMutex(&db->linfo); return db; } /* Function Name: ReadInFile * Description: Reads the file into a buffer. * Arguments: filename - the name of the file. * Returns: An allocated string containing the contents of the file. */ static char * ReadInFile(_Xconst char *filename) { register int fd, size; char * filebuf; #ifdef __UNIXOS2__ filename = __XOS2RedirRoot(filename); #endif /* * MS-Windows and OS/2 note: Default open mode includes O_TEXT */ if ( (fd = _XOpenFile (filename, O_RDONLY)) == -1 ) return (char *)NULL; /* * MS-Windows and OS/2 note: depending on how the sources are * untarred, the newlines in resource files may or may not have * been expanded to CRLF. Either way the size returned by fstat * is sufficient to read the file into because in text-mode any * CRLFs in a file will be converted to newlines (LF) with the * result that the number of bytes actually read with be <= * to the size returned by fstat. */ { struct stat status_buffer; if ( ((fstat(fd, &status_buffer)) == -1 ) || (status_buffer.st_size >= INT_MAX) ) { close (fd); return (char *)NULL; } else size = (int) status_buffer.st_size; } if (!(filebuf = Xmalloc(size + 1))) { /* leave room for '\0' */ close(fd); return (char *)NULL; } size = read (fd, filebuf, size); #ifdef __UNIXOS2__ { /* kill CRLF */ int i,k; for (i=k=0; i= BUFSIZ) return; if (depth >= MAXDBDEPTH) return; if (*fname != '/' && base && (str = strrchr(base, '/'))) { len = str - base + 1; if (len + fnamelen >= BUFSIZ) return; strncpy(realfname, base, len); strncpy(realfname + len, fname, fnamelen); realfname[len + fnamelen] = '\0'; } else { strncpy(realfname, fname, fnamelen); realfname[fnamelen] = '\0'; } if (!(str = ReadInFile(realfname))) return; GetDatabase(db, str, realfname, True, depth + 1); Xfree(str); } XrmDatabase XrmGetFileDatabase( _Xconst char *filename) { XrmDatabase db; char *str; if (!(str = ReadInFile(filename))) return (XrmDatabase)NULL; db = NewDatabase(); _XLockMutex(&db->linfo); GetDatabase(db, str, filename, True, 0); _XUnlockMutex(&db->linfo); Xfree(str); return db; } Status XrmCombineFileDatabase( _Xconst char *filename, XrmDatabase *target, Bool override) { XrmDatabase db; char *str; if (!(str = ReadInFile(filename))) return 0; if (override) { db = *target; if (!db) *target = db = NewDatabase(); } else db = NewDatabase(); _XLockMutex(&db->linfo); GetDatabase(db, str, filename, True, 0); _XUnlockMutex(&db->linfo); Xfree(str); if (!override) XrmCombineDatabase(db, target, False); return 1; } /* call the user proc for every value in the table, arbitrary order. * stop if user proc returns True. level is current depth in database. */ /*ARGSUSED*/ static Bool EnumLTable( LTable table, XrmNameList names, XrmClassList classes, register int level, register EClosure closure) { register VEntry *bucket; register int i; register VEntry entry; XrmValue value; XrmRepresentation type; Bool tightOk; closure->bindings[level] = (table->table.tight ? XrmBindTightly : XrmBindLoosely); closure->quarks[level] = table->table.name; level++; tightOk = !*names; closure->quarks[level + 1] = NULLQUARK; for (i = table->table.mask, bucket = table->buckets; i >= 0; i--, bucket++) { for (entry = *bucket; entry; entry = entry->next) { if (entry->tight && !tightOk) continue; closure->bindings[level] = (entry->tight ? XrmBindTightly : XrmBindLoosely); closure->quarks[level] = entry->name; value.size = entry->size; if (entry->string) { type = XrmQString; value.addr = StringValue(entry); } else { type = RepType(entry); value.addr = DataValue(entry); } if ((*closure->proc)(&closure->db, closure->bindings+1, closure->quarks+1, &type, &value, closure->closure)) return True; } } return False; } static Bool EnumAllNTable( NTable table, register int level, register EClosure closure) { register NTable *bucket; register int i; register NTable entry; XrmQuark empty = NULLQUARK; if (level >= MAXDBDEPTH) return False; for (i = table->mask, bucket = NodeBuckets(table); i >= 0; i--, bucket++) { for (entry = *bucket; entry; entry = entry->next) { if (entry->leaf) { if (EnumLTable((LTable)entry, &empty, &empty, level, closure)) return True; } else { closure->bindings[level] = (entry->tight ? XrmBindTightly : XrmBindLoosely); closure->quarks[level] = entry->name; if (EnumAllNTable(entry, level+1, closure)) return True; } } } return False; } /* recurse on every table in the table, arbitrary order. * stop if user proc returns True. level is current depth in database. */ static Bool EnumNTable( NTable table, XrmNameList names, XrmClassList classes, register int level, register EClosure closure) { register NTable entry; register XrmQuark q; register unsigned int leaf; Bool (*get)( NTable table, XrmNameList names, XrmClassList classes, register int level, EClosure closure); Bool bilevel; /* find entries named ename, leafness leaf, tight or loose, and call get */ #define ITIGHTLOOSE(ename) \ NFIND(ename); \ if (entry) { \ if (leaf == entry->leaf) { \ if (!leaf && !entry->tight && entry->next && \ entry->next->name == q && entry->next->tight && \ (bilevel || entry->next->hasloose) && \ EnumLTable((LTable)entry->next, names+1, classes+1, \ level, closure)) \ return True; \ if ((*get)(entry, names+1, classes+1, level, closure)) \ return True; \ if (entry->tight && (entry = entry->next) && \ entry->name == q && leaf == entry->leaf && \ (*get)(entry, names+1, classes+1, level, closure)) \ return True; \ } else if (entry->leaf) { \ if ((bilevel || entry->hasloose) && \ EnumLTable((LTable)entry, names+1, classes+1, level, closure))\ return True; \ if (entry->tight && (entry = entry->next) && \ entry->name == q && (bilevel || entry->hasloose) && \ EnumLTable((LTable)entry, names+1, classes+1, level, closure))\ return True; \ } \ } /* find entries named ename, leafness leaf, loose only, and call get */ #define ILOOSE(ename) \ NFIND(ename); \ if (entry && entry->tight && (entry = entry->next) && entry->name != q) \ entry = (NTable)NULL; \ if (entry) { \ if (leaf == entry->leaf) { \ if ((*get)(entry, names+1, classes+1, level, closure)) \ return True; \ } else if (entry->leaf && (bilevel || entry->hasloose)) { \ if (EnumLTable((LTable)entry, names+1, classes+1, level, closure))\ return True; \ } \ } if (level >= MAXDBDEPTH) return False; closure->bindings[level] = (table->tight ? XrmBindTightly : XrmBindLoosely); closure->quarks[level] = table->name; level++; if (!*names) { if (EnumAllNTable(table, level, closure)) return True; } else { if (names[1] || closure->mode == XrmEnumAllLevels) { get = EnumNTable; /* recurse */ leaf = 0; bilevel = !names[1]; } else { get = (getNTableEProcp)EnumLTable; /* bottom of recursion */ leaf = 1; bilevel = False; } if (table->hasloose && closure->mode == XrmEnumAllLevels) { NTable *bucket; int i; XrmQuark empty = NULLQUARK; for (i = table->mask, bucket = NodeBuckets(table); i >= 0; i--, bucket++) { q = NULLQUARK; for (entry = *bucket; entry; entry = entry->next) { if (!entry->tight && entry->name != q && entry->name != *names && entry->name != *classes) { q = entry->name; if (entry->leaf) { if (EnumLTable((LTable)entry, &empty, &empty, level, closure)) return True; } else { if (EnumNTable(entry, &empty, &empty, level, closure)) return True; } } } } } ITIGHTLOOSE(*names); /* do name, tight and loose */ ITIGHTLOOSE(*classes); /* do class, tight and loose */ if (table->hasany) { ITIGHTLOOSE(XrmQANY); /* do ANY, tight and loose */ } if (table->hasloose) { while (1) { names++; classes++; if (!*names) break; if (!names[1] && closure->mode != XrmEnumAllLevels) { get = (getNTableEProcp)EnumLTable; /* bottom of recursion */ leaf = 1; } ILOOSE(*names); /* loose names */ ILOOSE(*classes); /* loose classes */ if (table->hasany) { ILOOSE(XrmQANY); /* loose ANY */ } } names--; classes--; } } /* now look for matching leaf nodes */ entry = table->next; if (!entry) return False; if (entry->leaf) { if (entry->tight && !table->tight) entry = entry->next; } else { entry = entry->next; if (!entry || !entry->tight) return False; } if (!entry || entry->name != table->name) return False; /* found one */ level--; if ((!*names || entry->hasloose) && EnumLTable((LTable)entry, names, classes, level, closure)) return True; if (entry->tight && entry == table->next && (entry = entry->next) && entry->name == table->name && (!*names || entry->hasloose)) return EnumLTable((LTable)entry, names, classes, level, closure); return False; #undef ITIGHTLOOSE #undef ILOOSE } /* call the proc for every value in the database, arbitrary order. * stop if the proc returns True. */ Bool XrmEnumerateDatabase( XrmDatabase db, XrmNameList names, XrmClassList classes, int mode, DBEnumProc proc, XPointer closure) { XrmBinding bindings[MAXDBDEPTH+2]; XrmQuark quarks[MAXDBDEPTH+2]; register NTable table; EClosureRec eclosure; Bool retval = False; if (!db) return False; _XLockMutex(&db->linfo); eclosure.db = db; eclosure.proc = proc; eclosure.closure = closure; eclosure.bindings = bindings; eclosure.quarks = quarks; eclosure.mode = mode; table = db->table; if (table && !table->leaf && !*names && mode == XrmEnumOneLevel) table = table->next; if (table) { if (!table->leaf) retval = EnumNTable(table, names, classes, 0, &eclosure); else retval = EnumLTable((LTable)table, names, classes, 0, &eclosure); } _XUnlockMutex(&db->linfo); return retval; } static void PrintBindingQuarkList( XrmBindingList bindings, XrmQuarkList quarks, FILE *stream) { Bool firstNameSeen; for (firstNameSeen = False; *quarks; bindings++, quarks++) { if (*bindings == XrmBindLoosely) { (void) fprintf(stream, "*"); } else if (firstNameSeen) { (void) fprintf(stream, "."); } firstNameSeen = True; (void) fputs(XrmQuarkToString(*quarks), stream); } } /* output out the entry in correct file syntax */ /*ARGSUSED*/ static Bool DumpEntry( XrmDatabase *db, XrmBindingList bindings, XrmQuarkList quarks, XrmRepresentation *type, XrmValuePtr value, XPointer data) { FILE *stream = (FILE *)data; register unsigned int i; register char *s; register char c; if (*type != XrmQString) (void) putc('!', stream); PrintBindingQuarkList(bindings, quarks, stream); s = value->addr; i = value->size; if (*type == XrmQString) { (void) fputs(":\t", stream); if (i) i--; } else (void) fprintf(stream, "=%s:\t", XrmRepresentationToString(*type)); if (i && (*s == ' ' || *s == '\t')) (void) putc('\\', stream); /* preserve leading whitespace */ while (i--) { c = *s++; if (c == '\n') { if (i) (void) fputs("\\n\\\n", stream); else (void) fputs("\\n", stream); } else if (c == '\\') (void) fputs("\\\\", stream); else if ((c < ' ' && c != '\t') || ((unsigned char)c >= 0x7f && (unsigned char)c < 0xa0)) (void) fprintf(stream, "\\%03o", (unsigned char)c); else (void) putc(c, stream); } (void) putc('\n', stream); return ferror(stream) != 0; } #ifdef DEBUG void PrintTable( NTable table, FILE *file) { XrmBinding bindings[MAXDBDEPTH+1]; XrmQuark quarks[MAXDBDEPTH+1]; EClosureRec closure; XrmQuark empty = NULLQUARK; closure.db = (XrmDatabase)NULL; closure.proc = DumpEntry; closure.closure = (XPointer)file; closure.bindings = bindings; closure.quarks = quarks; closure.mode = XrmEnumAllLevels; if (table->leaf) EnumLTable((LTable)table, &empty, &empty, 0, &closure); else EnumNTable(table, &empty, &empty, 0, &closure); } #endif /* DEBUG */ void XrmPutFileDatabase( XrmDatabase db, _Xconst char *fileName) { FILE *file; XrmQuark empty = NULLQUARK; if (!db) return; if (!(file = fopen(fileName, "w"))) return; if (XrmEnumerateDatabase(db, &empty, &empty, XrmEnumAllLevels, DumpEntry, (XPointer) file)) unlink((char *)fileName); fclose(file); } /* macros used in get/search functions */ /* find entries named ename, leafness leaf, tight or loose, and call get */ #define GTIGHTLOOSE(ename,looseleaf) \ NFIND(ename); \ if (entry) { \ if (leaf == entry->leaf) { \ if (!leaf && !entry->tight && entry->next && \ entry->next->name == q && entry->next->tight && \ entry->next->hasloose && \ looseleaf((LTable)entry->next, names+1, classes+1, closure)) \ return True; \ if ((*get)(entry, names+1, classes+1, closure)) \ return True; \ if (entry->tight && (entry = entry->next) && \ entry->name == q && leaf == entry->leaf && \ (*get)(entry, names+1, classes+1, closure)) \ return True; \ } else if (entry->leaf) { \ if (entry->hasloose && \ looseleaf((LTable)entry, names+1, classes+1, closure)) \ return True; \ if (entry->tight && (entry = entry->next) && \ entry->name == q && entry->hasloose && \ looseleaf((LTable)entry, names+1, classes+1, closure)) \ return True; \ } \ } /* find entries named ename, leafness leaf, loose only, and call get */ #define GLOOSE(ename,looseleaf) \ NFIND(ename); \ if (entry && entry->tight && (entry = entry->next) && entry->name != q) \ entry = (NTable)NULL; \ if (entry) { \ if (leaf == entry->leaf) { \ if ((*get)(entry, names+1, classes+1, closure)) \ return True; \ } else if (entry->leaf && entry->hasloose) { \ if (looseleaf((LTable)entry, names+1, classes+1, closure)) \ return True; \ } \ } /* add tight/loose entry to the search list, return True if list is full */ /*ARGSUSED*/ static Bool AppendLEntry( LTable table, XrmNameList names, XrmClassList classes, register SClosure closure) { /* check for duplicate */ if (closure->idx >= 0 && closure->list[closure->idx] == table) return False; if (closure->idx == closure->limit) return True; /* append it */ closure->idx++; closure->list[closure->idx] = table; return False; } /* add loose entry to the search list, return True if list is full */ /*ARGSUSED*/ static Bool AppendLooseLEntry( LTable table, XrmNameList names, XrmClassList classes, register SClosure closure) { /* check for duplicate */ if (closure->idx >= 0 && closure->list[closure->idx] == table) return False; if (closure->idx >= closure->limit - 1) return True; /* append it */ closure->idx++; closure->list[closure->idx] = LOOSESEARCH; closure->idx++; closure->list[closure->idx] = table; return False; } /* search for a leaf table */ static Bool SearchNEntry( NTable table, XrmNameList names, XrmClassList classes, SClosure closure) { register NTable entry; register XrmQuark q; register unsigned int leaf; Bool (*get)( NTable table, XrmNameList names, XrmClassList classes, SClosure closure); if (names[1]) { get = SearchNEntry; /* recurse */ leaf = 0; } else { get = (getNTableSProcp)AppendLEntry; /* bottom of recursion */ leaf = 1; } GTIGHTLOOSE(*names, AppendLooseLEntry); /* do name, tight and loose */ GTIGHTLOOSE(*classes, AppendLooseLEntry); /* do class, tight and loose */ if (table->hasany) { GTIGHTLOOSE(XrmQANY, AppendLooseLEntry); /* do ANY, tight and loose */ } if (table->hasloose) { while (1) { names++; classes++; if (!*names) break; if (!names[1]) { get = (getNTableSProcp)AppendLEntry; /* bottom of recursion */ leaf = 1; } GLOOSE(*names, AppendLooseLEntry); /* loose names */ GLOOSE(*classes, AppendLooseLEntry); /* loose classes */ if (table->hasany) { GLOOSE(XrmQANY, AppendLooseLEntry); /* loose ANY */ } } } /* now look for matching leaf nodes */ entry = table->next; if (!entry) return False; if (entry->leaf) { if (entry->tight && !table->tight) entry = entry->next; } else { entry = entry->next; if (!entry || !entry->tight) return False; } if (!entry || entry->name != table->name) return False; /* found one */ if (entry->hasloose && AppendLooseLEntry((LTable)entry, names, classes, closure)) return True; if (entry->tight && entry == table->next && (entry = entry->next) && entry->name == table->name && entry->hasloose) return AppendLooseLEntry((LTable)entry, names, classes, closure); return False; } Bool XrmQGetSearchList( XrmDatabase db, XrmNameList names, XrmClassList classes, XrmSearchList searchList, /* RETURN */ int listLength) { register NTable table; SClosureRec closure; if (listLength <= 0) return False; closure.list = (LTable *)searchList; closure.idx = -1; closure.limit = listLength - 2; if (db) { _XLockMutex(&db->linfo); table = db->table; if (*names) { if (table && !table->leaf) { if (SearchNEntry(table, names, classes, &closure)) { _XUnlockMutex(&db->linfo); return False; } } else if (table && table->hasloose && AppendLooseLEntry((LTable)table, names, classes, &closure)) { _XUnlockMutex(&db->linfo); return False; } } else { if (table && !table->leaf) table = table->next; if (table && AppendLEntry((LTable)table, names, classes, &closure)) { _XUnlockMutex(&db->linfo); return False; } } _XUnlockMutex(&db->linfo); } closure.list[closure.idx + 1] = (LTable)NULL; return True; } Bool XrmQGetSearchResource( XrmSearchList searchList, register XrmName name, register XrmClass class, XrmRepresentation *pType, /* RETURN */ XrmValue *pValue) /* RETURN */ { register LTable *list; register LTable table; register VEntry entry = NULL; int flags; /* find tight or loose entry */ #define VTIGHTLOOSE(q) \ entry = LeafHash(table, q); \ while (entry && entry->name != q) \ entry = entry->next; \ if (entry) \ break /* find loose entry */ #define VLOOSE(q) \ entry = LeafHash(table, q); \ while (entry && entry->name != q) \ entry = entry->next; \ if (entry) { \ if (!entry->tight) \ break; \ if ((entry = entry->next) && entry->name == q) \ break; \ } list = (LTable *)searchList; /* figure out which combination of name and class we need to search for */ flags = 0; if (IsResourceQuark(name)) flags = 2; if (IsResourceQuark(class)) flags |= 1; if (!flags) { /* neither name nor class has ever been used to name a resource */ table = (LTable)NULL; } else if (flags == 3) { /* both name and class */ while ((table = *list++)) { if (table != LOOSESEARCH) { VTIGHTLOOSE(name); /* do name, tight and loose */ VTIGHTLOOSE(class); /* do class, tight and loose */ } else { table = *list++; VLOOSE(name); /* do name, loose only */ VLOOSE(class); /* do class, loose only */ } } } else { /* just one of name or class */ if (flags == 1) name = class; while ((table = *list++)) { if (table != LOOSESEARCH) { VTIGHTLOOSE(name); /* tight and loose */ } else { table = *list++; VLOOSE(name); /* loose only */ } } } if (table) { /* found a match */ if (entry->string) { *pType = XrmQString; pValue->addr = StringValue(entry); } else { *pType = RepType(entry); pValue->addr = DataValue(entry); } pValue->size = entry->size; return True; } *pType = NULLQUARK; pValue->addr = (XPointer)NULL; pValue->size = 0; return False; #undef VTIGHTLOOSE #undef VLOOSE } /* look for a tight/loose value */ static Bool GetVEntry( LTable table, XrmNameList names, XrmClassList classes, VClosure closure) { register VEntry entry; register XrmQuark q; /* try name first */ q = *names; entry = LeafHash(table, q); while (entry && entry->name != q) entry = entry->next; if (!entry) { /* not found, try class */ q = *classes; entry = LeafHash(table, q); while (entry && entry->name != q) entry = entry->next; if (!entry) return False; } if (entry->string) { *closure->type = XrmQString; closure->value->addr = StringValue(entry); } else { *closure->type = RepType(entry); closure->value->addr = DataValue(entry); } closure->value->size = entry->size; return True; } /* look for a loose value */ static Bool GetLooseVEntry( LTable table, XrmNameList names, XrmClassList classes, VClosure closure) { register VEntry entry; register XrmQuark q; #define VLOOSE(ename) \ q = ename; \ entry = LeafHash(table, q); \ while (entry && entry->name != q) \ entry = entry->next; \ if (entry && entry->tight && (entry = entry->next) && entry->name != q) \ entry = (VEntry)NULL; /* bump to last component */ while (names[1]) { names++; classes++; } VLOOSE(*names); /* do name, loose only */ if (!entry) { VLOOSE(*classes); /* do class, loose only */ if (!entry) return False; } if (entry->string) { *closure->type = XrmQString; closure->value->addr = StringValue(entry); } else { *closure->type = RepType(entry); closure->value->addr = DataValue(entry); } closure->value->size = entry->size; return True; #undef VLOOSE } /* recursive search for a value */ static Bool GetNEntry( NTable table, XrmNameList names, XrmClassList classes, VClosure closure) { register NTable entry; register XrmQuark q; register unsigned int leaf; Bool (*get)( NTable table, XrmNameList names, XrmClassList classes, VClosure closure); NTable otable; if (names[2]) { get = GetNEntry; /* recurse */ leaf = 0; } else { get = (getNTableVProcp)GetVEntry; /* bottom of recursion */ leaf = 1; } GTIGHTLOOSE(*names, GetLooseVEntry); /* do name, tight and loose */ GTIGHTLOOSE(*classes, GetLooseVEntry); /* do class, tight and loose */ if (table->hasany) { GTIGHTLOOSE(XrmQANY, GetLooseVEntry); /* do ANY, tight and loose */ } if (table->hasloose) { while (1) { names++; classes++; if (!names[1]) break; if (!names[2]) { get = (getNTableVProcp)GetVEntry; /* bottom of recursion */ leaf = 1; } GLOOSE(*names, GetLooseVEntry); /* do name, loose only */ GLOOSE(*classes, GetLooseVEntry); /* do class, loose only */ if (table->hasany) { GLOOSE(XrmQANY, GetLooseVEntry); /* do ANY, loose only */ } } } /* look for matching leaf tables */ otable = table; table = table->next; if (!table) return False; if (table->leaf) { if (table->tight && !otable->tight) table = table->next; } else { table = table->next; if (!table || !table->tight) return False; } if (!table || table->name != otable->name) return False; /* found one */ if (table->hasloose && GetLooseVEntry((LTable)table, names, classes, closure)) return True; if (table->tight && table == otable->next) { table = table->next; if (table && table->name == otable->name && table->hasloose) return GetLooseVEntry((LTable)table, names, classes, closure); } return False; } Bool XrmQGetResource( XrmDatabase db, XrmNameList names, XrmClassList classes, XrmRepresentation *pType, /* RETURN */ XrmValuePtr pValue) /* RETURN */ { register NTable table; VClosureRec closure; if (db && *names) { _XLockMutex(&db->linfo); closure.type = pType; closure.value = pValue; table = db->table; if (names[1]) { if (table && !table->leaf) { if (GetNEntry(table, names, classes, &closure)) { _XUnlockMutex(&db->linfo); return True; } } else if (table && table->hasloose && GetLooseVEntry((LTable)table, names, classes, &closure)) { _XUnlockMutex (&db->linfo); return True; } } else { if (table && !table->leaf) table = table->next; if (table && GetVEntry((LTable)table, names, classes, &closure)) { _XUnlockMutex(&db->linfo); return True; } } _XUnlockMutex(&db->linfo); } *pType = NULLQUARK; pValue->addr = (XPointer)NULL; pValue->size = 0; return False; } Bool XrmGetResource(XrmDatabase db, _Xconst char *name_str, _Xconst char *class_str, XrmString *pType_str, XrmValuePtr pValue) { XrmName names[MAXDBDEPTH+1]; XrmClass classes[MAXDBDEPTH+1]; XrmRepresentation fromType; Bool result; XrmStringToNameList(name_str, names); XrmStringToClassList(class_str, classes); result = XrmQGetResource(db, names, classes, &fromType, pValue); (*pType_str) = XrmQuarkToString(fromType); return result; } /* destroy all values, plus table itself */ static void DestroyLTable( LTable table) { register int i; register VEntry *buckets; register VEntry entry, next; buckets = table->buckets; for (i = table->table.mask; i >= 0; i--, buckets++) { for (next = *buckets; (entry = next); ) { next = entry->next; Xfree(entry); } } Xfree(table->buckets); Xfree(table); } /* destroy all contained tables, plus table itself */ static void DestroyNTable( NTable table) { register int i; register NTable *buckets; register NTable entry, next; buckets = NodeBuckets(table); for (i = table->mask; i >= 0; i--, buckets++) { for (next = *buckets; (entry = next); ) { next = entry->next; if (entry->leaf) DestroyLTable((LTable)entry); else DestroyNTable(entry); } } Xfree(table); } const char * XrmLocaleOfDatabase( XrmDatabase db) { const char* retval; _XLockMutex(&db->linfo); retval = (*db->methods->lcname)(db->mbstate); _XUnlockMutex(&db->linfo); return retval; } void XrmDestroyDatabase( XrmDatabase db) { register NTable table, next; if (db) { _XLockMutex(&db->linfo); for (next = db->table; (table = next); ) { next = table->next; if (table->leaf) DestroyLTable((LTable)table); else DestroyNTable(table); } _XUnlockMutex(&db->linfo); _XFreeMutex(&db->linfo); (*db->methods->destroy)(db->mbstate); Xfree(db); } } False; } if (!entry || entry->name != table->name) return False; /* found one */ if (entry->hasloose && AppendLooseLEntry((LTable)entry, names, classes, closure)) return True; if (entry->tight && entry == table->next && (entry libX11-1.6.3/src/ChkIfEv.c000064401431060000012000000047301247741723500152740ustar00alancstaff00002660200006/* Copyright 1985, 1987, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" /* * Check existing events in queue to find if any match. If so, return. * If not, flush buffer and see if any more events are readable. If one * matches, return. If all else fails, tell the user no events found. */ Bool XCheckIfEvent ( register Display *dpy, register XEvent *event, /* XEvent to be filled in. */ Bool (*predicate)( Display* /* display */, XEvent* /* event */, char* /* arg */ ), /* function to call */ char *arg) { register _XQEvent *prev, *qelt; unsigned long qe_serial = 0; int n; /* time through count */ LockDisplay(dpy); prev = NULL; for (n = 3; --n >= 0;) { for (qelt = prev ? prev->next : dpy->head; qelt; prev = qelt, qelt = qelt->next) { if(qelt->qserial_num > qe_serial && (*predicate)(dpy, &qelt->event, arg)) { *event = qelt->event; _XDeq(dpy, prev, qelt); _XStoreEventCookie(dpy, event); UnlockDisplay(dpy); return True; } } if (prev) qe_serial = prev->qserial_num; switch (n) { case 2: _XEventsQueued(dpy, QueuedAfterReading); break; case 1: _XFlush(dpy); break; } if (prev && prev->qserial_num != qe_serial) /* another thread has snatched this event */ prev = NULL; } UnlockDisplay(dpy); return False; } libX11-1.6.3/src/Cmap.h000064401431060000012000000002301247741723500146710ustar00alancstaff00002660200006 #ifndef _CMAP_H_ #define _CMAP_H_ #include extern void _XcmsDeleteCmapRec( Display *dpy, Colormap cmap); #endif /* _CMAP_H_ */ libX11-1.6.3/src/Flush.c000064401431060000012000000026451247741723500151010ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" /* Flush all buffered output requests. */ /* NOTE: NOT necessary when calling any of the Xlib routines. */ int XFlush (register Display *dpy) { LockDisplay(dpy); _XFlush (dpy); UnlockDisplay(dpy); return 1; } libX11-1.6.3/src/GetFPath.c000064401431060000012000000051401247741723500154530ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include char **XGetFontPath( register Display *dpy, int *npaths) /* RETURN */ { xGetFontPathReply rep; unsigned long nbytes; char **flist = NULL; char *ch = NULL; char *chend; int count = 0; register unsigned i; register int length; register xReq *req; LockDisplay(dpy); GetEmptyReq (GetFontPath, req); (void) _XReply (dpy, (xReply *) &rep, 0, xFalse); if (rep.nPaths) { flist = Xmalloc(rep.nPaths * sizeof (char *)); if (rep.length < (INT_MAX >> 2)) { nbytes = (unsigned long) rep.length << 2; ch = Xmalloc (nbytes + 1); /* +1 to leave room for last null-terminator */ } if ((! flist) || (! ch)) { Xfree(flist); Xfree(ch); _XEatDataWords(dpy, rep.length); UnlockDisplay(dpy); SyncHandle(); return (char **) NULL; } _XReadPad (dpy, ch, nbytes); /* * unpack into null terminated strings. */ chend = ch + (nbytes + 1); length = *ch; for (i = 0; i < rep.nPaths; i++) { if (ch + length < chend) { flist[i] = ch+1; /* skip over length */ ch += length + 1; /* find next length ... */ length = *ch; *ch = '\0'; /* and replace with null-termination */ count++; } else flist[i] = NULL; } } *npaths = count; UnlockDisplay(dpy); SyncHandle(); return (flist); } int XFreeFontPath (char **list) { if (list != NULL) { Xfree (list[0]-1); Xfree (list); } return 1; } libX11-1.6.3/src/SetNrmHint.c000064401431060000012000000101471247741723500160470ustar00alancstaff00002660200006 /*********************************************************** Copyright 1988 by Wyse Technology, Inc., San Jose, Ca, Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts, All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL AND WYSE DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL OR WYSE BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1987, 1988, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include "Xatomtype.h" #include #include void XSetWMSizeHints ( Display *dpy, Window w, XSizeHints *hints, Atom prop) { xPropSizeHints data; memset(&data, 0, sizeof(data)); data.flags = (hints->flags & (USPosition|USSize|PPosition|PSize|PMinSize|PMaxSize| PResizeInc|PAspect|PBaseSize|PWinGravity)); /* * The x, y, width, and height fields are obsolete; but, applications * that want to work with old window managers might set them. */ if (hints->flags & (USPosition|PPosition)) { data.x = hints->x; data.y = hints->y; } if (hints->flags & (USSize|PSize)) { data.width = hints->width; data.height = hints->height; } if (hints->flags & PMinSize) { data.minWidth = hints->min_width; data.minHeight = hints->min_height; } if (hints->flags & PMaxSize) { data.maxWidth = hints->max_width; data.maxHeight = hints->max_height; } if (hints->flags & PResizeInc) { data.widthInc = hints->width_inc; data.heightInc = hints->height_inc; } if (hints->flags & PAspect) { data.minAspectX = hints->min_aspect.x; data.minAspectY = hints->min_aspect.y; data.maxAspectX = hints->max_aspect.x; data.maxAspectY = hints->max_aspect.y; } if (hints->flags & PBaseSize) { data.baseWidth = hints->base_width; data.baseHeight = hints->base_height; } if (hints->flags & PWinGravity) { data.winGravity = hints->win_gravity; } XChangeProperty (dpy, w, prop, XA_WM_SIZE_HINTS, 32, PropModeReplace, (unsigned char *) &data, NumPropSizeElements); } void XSetWMNormalHints ( Display *dpy, Window w, XSizeHints *hints) { XSetWMSizeHints (dpy, w, hints, XA_WM_NORMAL_HINTS); } libX11-1.6.3/src/QuTileShp.c000064401431060000012000000035021247741723500156670ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" Status XQueryBestTile( register Display *dpy, Drawable drawable, unsigned int width, unsigned int height, unsigned int *ret_width, unsigned int *ret_height) { xQueryBestSizeReply rep; register xQueryBestSizeReq *req; LockDisplay(dpy); GetReq(QueryBestSize, req); req->class = TileShape; req->drawable = drawable; req->width = width; req->height = height; if (_XReply (dpy, (xReply *)&rep, 0, xTrue) == 0) { UnlockDisplay(dpy); SyncHandle(); return(0); } *ret_width = rep.width; *ret_height = rep.height; UnlockDisplay(dpy); SyncHandle(); return 1; } ng documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WlibX11-1.6.3/src/GetImage.c000064401431060000012000000072041247741723500154760ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include /* for XDestroyImage */ #include "ImUtil.h" #include #define ROUNDUP(nbytes, pad) (((((nbytes) - 1) + (pad)) / (pad)) * (pad)) static unsigned int Ones( /* HACKMEM 169 */ unsigned long mask) { register unsigned long y; y = (mask >> 1) &033333333333; y = mask - y - ((y >>1) & 033333333333); return ((unsigned int) (((y + (y >> 3)) & 030707070707) % 077)); } XImage *XGetImage ( register Display *dpy, Drawable d, int x, int y, unsigned int width, unsigned int height, unsigned long plane_mask, int format) /* either XYPixmap or ZPixmap */ { xGetImageReply rep; register xGetImageReq *req; char *data; unsigned long nbytes; XImage *image; LockDisplay(dpy); GetReq (GetImage, req); /* * first set up the standard stuff in the request */ req->drawable = d; req->x = x; req->y = y; req->width = width; req->height = height; req->planeMask = plane_mask; req->format = format; if (_XReply (dpy, (xReply *) &rep, 0, xFalse) == 0 || rep.length == 0) { UnlockDisplay(dpy); SyncHandle(); return (XImage *)NULL; } if (rep.length < (INT_MAX >> 2)) { nbytes = (unsigned long)rep.length << 2; data = Xmalloc(nbytes); } else data = NULL; if (! data) { _XEatDataWords(dpy, rep.length); UnlockDisplay(dpy); SyncHandle(); return (XImage *) NULL; } _XReadPad (dpy, data, nbytes); if (format == XYPixmap) image = XCreateImage(dpy, _XVIDtoVisual(dpy, rep.visual), Ones (plane_mask & (((unsigned long)0xFFFFFFFF) >> (32 - rep.depth))), format, 0, data, width, height, dpy->bitmap_pad, 0); else /* format == ZPixmap */ image = XCreateImage (dpy, _XVIDtoVisual(dpy, rep.visual), rep.depth, ZPixmap, 0, data, width, height, _XGetScanlinePad(dpy, (int) rep.depth), 0); if (!image) Xfree(data); UnlockDisplay(dpy); SyncHandle(); return (image); } XImage *XGetSubImage( register Display *dpy, Drawable d, int x, int y, unsigned int width, unsigned int height, unsigned long plane_mask, int format, /* either XYPixmap or ZPixmap */ XImage *dest_image, int dest_x, int dest_y) { XImage *temp_image; temp_image = XGetImage(dpy, d, x, y, width, height, plane_mask, format); if (!temp_image) return (XImage *)NULL; _XSetImage(temp_image, dest_image, dest_x, dest_y); XDestroyImage(temp_image); return (dest_image); } libX11-1.6.3/src/FreeEventData.c000064401431060000012000000026661247741723500165000ustar00alancstaff00002660200006/* * Copyright © 2009 Red Hat, Inc. * * 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: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" void XFreeEventData(Display *dpy, XGenericEventCookie *event) { if (_XIsEventCookie(dpy, (XEvent*)event) && event->data) { XFree(event->data); event->data = NULL; event->cookie = 0; } return; } libX11-1.6.3/src/DisName.c000064401431060000012000000041671247741723500153410ustar00alancstaff00002660200006 /* Copyright 1994, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ /* XDisplayName.c */ /* * Returns the name of the display XOpenDisplay would use. This is better * than just printing the "display" variable in a program because that * could be NULL and/or there could be an environment variable set. * This makes it easier for programmers to provide meaningful error * messages. * * * For example, this is used in XOpenDisplay() as * strncpy( displaybuf, XDisplayName( display ), sizeof(displaybuf) ); * if ( *displaybuf == '\0' ) return( NULL ); * This check is actually unnecessary because the next thing is an index() * call looking for a ':' which will fail and we'll return(NULL). */ /* Written at Waterloo - JMSellens */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include "Xlib.h" char * XDisplayName( _Xconst char *display) { char *d; if ( display != (char *)NULL && *display != '\0' ) return( (char *)display ); if ( (d = getenv( "DISPLAY" )) != (char *)NULL ) return( d ); return( "" ); } libX11-1.6.3/src/ErrDes.c000064401431060000012000000143671247741723500152100ustar00alancstaff00002660200006/* */ /*********************************************************** Copyright 1987, 1988, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include #include "Xresource.h" #include #ifndef ERRORDB #ifndef XERRORDB #define ERRORDB "/usr/lib/X11/XErrorDB" #else #define ERRORDB XERRORDB #endif #endif /* * descriptions of errors in Section 4 of Protocol doc (pp. 350-351); more * verbose descriptions are given in the error database */ static const char _XErrorList[] = /* No error */ "no error\0" /* BadRequest */ "BadRequest\0" /* BadValue */ "BadValue\0" /* BadWindow */ "BadWindow\0" /* BadPixmap */ "BadPixmap\0" /* BadAtom */ "BadAtom\0" /* BadCursor */ "BadCursor\0" /* BadFont */ "BadFont\0" /* BadMatch */ "BadMatch\0" /* BadDrawable */ "BadDrawable\0" /* BadAccess */ "BadAccess\0" /* BadAlloc */ "BadAlloc\0" /* BadColor */ "BadColor\0" /* BadGC */ "BadGC\0" /* BadIDChoice */ "BadIDChoice\0" /* BadName */ "BadName\0" /* BadLength */ "BadLength\0" /* BadImplementation */ "BadImplementation" ; /* offsets into _XErrorList */ static const unsigned char _XErrorOffsets[] = { 0, 9, 20, 29, 39, 49, 57, 67, 75, 84, 96, 106, 115, 124, 130, 142, 150, 160 }; int XGetErrorText( register Display *dpy, register int code, char *buffer, int nbytes) { char buf[150]; register _XExtension *ext; _XExtension *bext = (_XExtension *)NULL; if (nbytes == 0) return 0; if (code <= BadImplementation && code > 0) { snprintf(buf, sizeof(buf), "%d", code); (void) XGetErrorDatabaseText(dpy, "XProtoError", buf, _XErrorList + _XErrorOffsets[code], buffer, nbytes); } else buffer[0] = '\0'; /* call out to any extensions interested */ for (ext = dpy->ext_procs; ext; ext = ext->next) { if (ext->error_string) (*ext->error_string)(dpy, code, &ext->codes, buffer, nbytes); if (ext->codes.first_error && ext->codes.first_error <= code && (!bext || ext->codes.first_error > bext->codes.first_error)) bext = ext; } if (!buffer[0] && bext) { snprintf(buf, sizeof(buf), "%s.%d", bext->name, code - bext->codes.first_error); (void) XGetErrorDatabaseText(dpy, "XProtoError", buf, "", buffer, nbytes); } if (!buffer[0]) snprintf(buffer, nbytes, "%d", code); return 0; } int /*ARGSUSED*/ XGetErrorDatabaseText( Display *dpy, register _Xconst char *name, register _Xconst char *type, _Xconst char *defaultp, char *buffer, int nbytes) { static XrmDatabase db = NULL; XrmString type_str; XrmValue result; char temp[BUFSIZ]; char* tptr; unsigned long tlen; if (nbytes == 0) return 0; if (!db) { /* the Xrm routines expect to be called with the global mutex unlocked. */ XrmDatabase temp_db; int do_destroy; const char *dbname; XrmInitialize(); #ifdef WIN32 dbname = getenv("XERRORDB"); if (!dbname) dbname = ERRORDB; #else dbname = ERRORDB; #endif temp_db = XrmGetFileDatabase(dbname); _XLockMutex(_Xglobal_lock); if (!db) { db = temp_db; do_destroy = 0; } else do_destroy = 1; /* we didn't need to get it after all */ _XUnlockMutex(_Xglobal_lock); if (do_destroy) XrmDestroyDatabase(temp_db); } if (db) { tlen = strlen (name) + strlen (type) + 2; if (tlen <= sizeof(temp)) tptr = temp; else tptr = Xmalloc (tlen); if (tptr) { snprintf(tptr, tlen, "%s.%s", name, type); XrmGetResource(db, tptr, "ErrorType.ErrorNumber", &type_str, &result); if (tptr != temp) Xfree (tptr); } else { result.addr = (XPointer) NULL; } } else result.addr = (XPointer)NULL; if (!result.addr) { result.addr = (XPointer) defaultp; result.size = strlen(defaultp) + 1; } (void) strncpy (buffer, (char *) result.addr, nbytes); if (result.size > nbytes) buffer[nbytes-1] = '\0'; return 0; } libX11-1.6.3/src/xcms/HVCMxVC.c000064401431060000012000000155131247741723500161460ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. TekColor is a * trademark of Tektronix, Inc. The term "TekHVC" designates a particular * color space that is the subject of U.S. Patent No. 4,985,853 (equivalent * foreign patents pending). Permission is hereby granted to use, copy, * modify, sell, and otherwise distribute this software and its * documentation for any purpose and without fee, provided that: * * 1. This copyright, permission, and disclaimer notice is reproduced in * all copies of this software and any modification thereof and in * supporting documentation; * 2. Any color-handling application which displays TekHVC color * cooordinates identifies these as TekHVC color coordinates in any * interface that displays these coordinates and in any associated * documentation; * 3. The term "TekHVC" is always used, and is only used, in association * with the mathematical derivations of the TekHVC Color Space, * including those provided in this file and any equivalent pathways and * mathematical derivations, regardless of digital (e.g., floating point * or integer) representation. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * NAME * TekHVCMxVC.c * * DESCRIPTION * Source for the XcmsTekHVCQueryMaxVC() gamut boundary * querying routine. * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" /* * DEFINES */ #define MIN(x,y) ((x) > (y) ? (y) : (x)) #define MIN3(x,y,z) ((x) > (MIN((y), (z))) ? (MIN((y), (z))) : (x)) #define MAX(x,y) ((x) > (y) ? (x) : (y)) #define MAX3(x,y,z) ((x) > (MAX((y), (z))) ? (x) : (MAX((y), (z)))) #define START_V 40.0 #define START_C 120.0 /************************************************************************ * * * API PRIVATE ROUTINES * * * ************************************************************************/ /* * NAME * _XcmsTekHVCQueryMaxVCRGB - Compute maximum value/chroma. * * SYNOPSIS */ Status _XcmsTekHVCQueryMaxVCRGB( XcmsCCC ccc, XcmsFloat hue, XcmsColor *pColor_return, XcmsRGBi *pRGB_return) /* * DESCRIPTION * Return the maximum chroma for a specified hue, and the * corresponding value. This is computed by a binary search of * all possible chromas. An assumption is made that there are * no local maxima. Use the unrounded Max Chroma because * the difference check can be small. * * NOTE: No local CCC is used because this is a private * routine and all routines that call it are expected * to behave properly, i.e. send a local CCC with * no white adjust function and no gamut compression * function. * * This routine only accepts hue as input and outputs * HVC's and RGBi's. * * RETURNS * XcmsFailure - Failure * XCMS_SUCCUSS - Succeeded * */ { XcmsFloat nSmall, nLarge; XcmsColor tmp; tmp.format = XcmsTekHVCFormat; tmp.spec.TekHVC.H = hue; /* Use some unreachable color on the given hue */ tmp.spec.TekHVC.V = START_V; tmp.spec.TekHVC.C = START_C; /* * Convert from HVC to RGB * * Note that the CIEXYZ to RGBi conversion routine must stuff the * out of bounds RGBi values in tmp when the ccc->gamutCompProc * is NULL. */ if ((_XcmsConvertColorsWithWhitePt(ccc, &tmp, &ccc->pPerScrnInfo->screenWhitePt, 1, XcmsRGBiFormat, (Bool *) NULL) == XcmsFailure) && tmp.format != XcmsRGBiFormat) { return (XcmsFailure); } /* Now pick the smallest RGB */ nSmall = MIN3(tmp.spec.RGBi.red, tmp.spec.RGBi.green, tmp.spec.RGBi.blue); /* Make the smallest RGB equal to zero */ tmp.spec.RGBi.red -= nSmall; tmp.spec.RGBi.green -= nSmall; tmp.spec.RGBi.blue -= nSmall; /* Now pick the largest RGB */ nLarge = MAX3(tmp.spec.RGBi.red, tmp.spec.RGBi.green, tmp.spec.RGBi.blue); /* Scale the RGB values based on the largest one */ tmp.spec.RGBi.red /= nLarge; tmp.spec.RGBi.green /= nLarge; tmp.spec.RGBi.blue /= nLarge; tmp.format = XcmsRGBiFormat; /* If the calling routine wants RGB value give them the ones used. */ if (pRGB_return) { pRGB_return->red = tmp.spec.RGBi.red; pRGB_return->green = tmp.spec.RGBi.green; pRGB_return->blue = tmp.spec.RGBi.blue; } /* Convert from RGBi to HVC */ if (_XcmsConvertColorsWithWhitePt(ccc, &tmp, &ccc->pPerScrnInfo->screenWhitePt, 1, XcmsTekHVCFormat, (Bool *) NULL) == XcmsFailure) { return (XcmsFailure); } /* make sure to return the input hue */ tmp.spec.TekHVC.H = hue; memcpy((char *)pColor_return, (char *)&tmp, sizeof(XcmsColor)); return (XcmsSuccess); } /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * XcmsTekHVCQueryMaxVC - Compute maximum value and chroma. * * SYNOPSIS */ Status XcmsTekHVCQueryMaxVC ( XcmsCCC ccc, XcmsFloat hue, XcmsColor *pColor_return) /* * DESCRIPTION * Return the maximum chroma for the specified hue, and the * corresponding value. * * ASSUMPTIONS * This routine assumes that the white point associated with * the color specification is the Screen White Point. The * Screen White Point will also be associated with the * returned color specification. * * RETURNS * XcmsFailure - Failure * XcmsSuccess - Succeeded * */ { XcmsCCCRec myCCC; /* * Check Arguments */ if (ccc == NULL || pColor_return == NULL) { return(XcmsFailure); } /* * Insure TekHVC installed */ if (XcmsAddColorSpace(&XcmsTekHVCColorSpace) == XcmsFailure) { return(XcmsFailure); } /* Use my own CCC */ memcpy ((char *)&myCCC, (char *)ccc, sizeof(XcmsCCCRec)); myCCC.clientWhitePt.format = XcmsUndefinedFormat; myCCC.gamutCompProc = (XcmsCompressionProc)NULL; while (hue < 0.0) { hue += 360.0; } while (hue >= 360.0) { hue -= 360.0; } return(_XcmsTekHVCQueryMaxVCRGB (&myCCC, hue, pColor_return, (XcmsRGBi *)NULL)); } libX11-1.6.3/src/xcms/SetGetCols.c000064401431060000012000000167751247741723500170170ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * NAME * XcmsSetGet.c * * DESCRIPTION * Source for _XcmsSetGetColors() * * */ /* * EXTERNAL INCLUDES * Include files that must be exported to any package or * program using this package. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" /************************************************************************ * * * API PRIVATE ROUTINES * * * ************************************************************************/ /* * NAME * XcmsSetColor - * * SYNOPSIS */ Status _XcmsSetGetColor( Status (*xColorProc)( Display* /* display */, Colormap /* colormap */, XColor* /* screen_in_out */), Display *dpy, Colormap cmap, XcmsColor *pColors_in_out, XcmsColorFormat result_format, Bool *pCompressed) /* * DESCRIPTION * Routine containing code common to: * XcmsAllocColor * XcmsQueryColor * XcmsStoreColor * * RETURNS * XcmsFailure if failed; * XcmsSuccess if it succeeded without gamut compression; * XcmsSuccessWithCompression if it succeeded with gamut * compression; */ { XcmsCCC ccc; XColor XColors_in_out; Status retval = XcmsSuccess; /* * Argument Checking * 1. Assume xColorProc is correct * 2. Insure ccc not NULL * 3. Assume cmap correct (should be checked by Server) * 4. Insure pColors_in_out valid * 5. Assume method_in is valid (should be checked by Server) */ if (dpy == NULL) { return(XcmsFailure); } if (result_format == XcmsUndefinedFormat) { return(XcmsFailure); } if ( !((*xColorProc == XAllocColor) || (*xColorProc == XStoreColor) || (*xColorProc == XQueryColor)) ) { return(XcmsFailure); } if ((ccc = XcmsCCCOfColormap(dpy, cmap)) == (XcmsCCC)NULL) { return(XcmsFailure); } if (*xColorProc == XQueryColor) { goto Query; } /* * Convert to RGB, adjusting for white point differences if necessary. */ if ((retval = XcmsConvertColors(ccc, pColors_in_out, 1, XcmsRGBFormat, pCompressed)) == XcmsFailure) { return(XcmsFailure); } Query: /* * Convert XcmsColor to XColor structures */ _XcmsRGB_to_XColor(pColors_in_out, &XColors_in_out, 1); /* * Now make appropriate X Call */ if (*xColorProc == XAllocColor) { if ((*xColorProc)(ccc->dpy, cmap, &XColors_in_out) == 0) { return(XcmsFailure); } } else if ((*xColorProc == XQueryColor) || (*xColorProc == XStoreColor)) { /* Note: XQueryColor and XStoreColor do not return any Status */ (*xColorProc)(ccc->dpy, cmap, &XColors_in_out); } else { return(XcmsFailure); } if ((*xColorProc == XStoreColor)) { return(retval); } /* * Now, convert the returned XColor (i.e., rgb) to XcmsColor structures */ _XColor_to_XcmsRGB(ccc, &XColors_in_out, pColors_in_out, 1); /* * Then, convert XcmsColor structures to the original specification * format. Note that we must use NULL instead of passing * pCompressed. */ if (result_format != XcmsRGBFormat) { if (XcmsConvertColors(ccc, pColors_in_out, 1, result_format, (Bool *) NULL) == XcmsFailure) { return(XcmsFailure); } } return(retval); } /* * NAME * XcmsSetColors - * * SYNOPSIS */ Status _XcmsSetGetColors( Status (*xColorProc)( Display* /* display */, Colormap /* colormap */, XColor* /* screen_in_out */, int /* nColors */), Display *dpy, Colormap cmap, XcmsColor *pColors_in_out, int nColors, XcmsColorFormat result_format, Bool *pCompressed) /* * DESCRIPTION * Routine containing code common to: * XcmsQueryColors * XcmsStoreColors * * RETURNS * XcmsFailure if failed; * XcmsSuccess if it succeeded without gamut compression; * XcmsSuccessWithCompression if it succeeded with gamut * compression; */ { XcmsCCC ccc; XColor *pXColors_in_out; Status retval = XcmsSuccess; /* * Argument Checking * 1. Assume xColorProc is correct * 2. Insure ccc not NULL * 3. Assume cmap correct (should be checked by Server) * 4. Insure pColors_in_out valid * 5. Assume method_in is valid (should be checked by Server) * 6. Insure nColors > 0 */ if (dpy == NULL) { return(XcmsFailure); } if (nColors == 0) { return(XcmsSuccess); } if (result_format == XcmsUndefinedFormat) { return(XcmsFailure); } if ( !((*xColorProc == XStoreColors) || (*xColorProc == XQueryColors)) ) { return(XcmsFailure); } if ((ccc = XcmsCCCOfColormap(dpy, cmap)) == (XcmsCCC)NULL) { return(XcmsFailure); } /* * Allocate space for XColors */ if ((pXColors_in_out = Xcalloc(nColors, sizeof(XColor))) == NULL) { return(XcmsFailure); } if (*xColorProc == XQueryColors) { goto Query; } /* * Convert to RGB, adjusting for white point differences if necessary. */ if ((retval = XcmsConvertColors(ccc, pColors_in_out, nColors, XcmsRGBFormat, pCompressed)) == XcmsFailure) { Xfree(pXColors_in_out); return(XcmsFailure); } Query: /* * Convert XcmsColor to XColor structures */ _XcmsRGB_to_XColor(pColors_in_out, pXColors_in_out, nColors); /* * Now make appropriate X Call */ if ((*xColorProc == XQueryColors) || (*xColorProc == XStoreColors)){ /* Note: XQueryColors and XStoreColors do not return any Status */ (*xColorProc)(ccc->dpy, cmap, pXColors_in_out, nColors); } else { Xfree(pXColors_in_out); return(XcmsFailure); } if (*xColorProc == XStoreColors) { Xfree(pXColors_in_out); return(retval); } /* * Now, convert the returned XColor (i.e., rgb) to XcmsColor structures */ _XColor_to_XcmsRGB(ccc, pXColors_in_out, pColors_in_out, nColors); Xfree(pXColors_in_out); /* * Then, convert XcmsColor structures to the original specification * format. Note that we must use NULL instead of passing * pCompressed. */ if (result_format != XcmsRGBFormat) { if (XcmsConvertColors(ccc, pColors_in_out, nColors, result_format, (Bool *) NULL) == XcmsFailure) { return(XcmsFailure); } } return(retval); } /* ### EOF ### */ inglibX11-1.6.3/src/xcms/Cv.h000064401431060000012000000111571247741723500153450ustar00alancstaff00002660200006 #ifndef _CV_H_ #define _CV_H_ /* variables */ extern const char _XcmsCIEXYZ_prefix[]; extern const char _XcmsCIEuvY_prefix[]; extern const char _XcmsCIExyY_prefix[]; extern const char _XcmsCIELab_prefix[]; extern const char _XcmsCIELuv_prefix[]; extern const char _XcmsTekHVC_prefix[]; extern const char _XcmsRGBi_prefix[]; extern const char _XcmsRGB_prefix[]; extern XcmsColorSpace XcmsUNDEFINEDColorSpace; extern XcmsColorSpace XcmsTekHVCColorSpace; extern XcmsColorSpace XcmsCIEXYZColorSpace; extern XcmsColorSpace XcmsCIEuvYColorSpace; extern XcmsColorSpace XcmsCIExyYColorSpace; extern XcmsColorSpace XcmsCIELabColorSpace; extern XcmsColorSpace XcmsCIELuvColorSpace; extern XcmsColorSpace XcmsRGBColorSpace; extern XcmsColorSpace XcmsRGBiColorSpace; extern XcmsColorSpace *_XcmsDIColorSpacesInit[]; extern XcmsColorSpace **_XcmsDIColorSpaces; extern XcmsColorSpace *_XcmsDDColorSpacesInit[]; extern XcmsColorSpace **_XcmsDDColorSpaces; extern XcmsFunctionSet XcmsLinearRGBFunctionSet; extern XcmsFunctionSet *_XcmsSCCFuncSetsInit[]; extern XcmsFunctionSet **_XcmsSCCFuncSets; extern XcmsRegColorSpaceEntry _XcmsRegColorSpaces[]; /* functions */ extern XPointer * _XcmsCopyPointerArray( XPointer *pap); extern void _XcmsFreePointerArray( XPointer *pap); extern XPointer * _XcmsPushPointerArray( XPointer *pap, XPointer p, XPointer *papNoFree); extern Status _XcmsCIEXYZ_ValidSpec( XcmsColor *pColor); extern Status _XcmsCIEuvY_ValidSpec( XcmsColor *pColor); extern int _XcmsTekHVC_CheckModify( XcmsColor *pColor); extern Status _XcmsTekHVCQueryMaxVCRGB( XcmsCCC ccc, XcmsFloat hue, XcmsColor *pColor_return, XcmsRGBi *pRGB_return); extern Status _XcmsCIELabQueryMaxLCRGB( XcmsCCC ccc, XcmsFloat hue, /* hue in radians */ XcmsColor *pColor_return, XcmsRGBi *pRGB_return); extern Status _XcmsConvertColorsWithWhitePt( XcmsCCC ccc, XcmsColor *pColors_in_out, XcmsColor *pWhitePt, unsigned int nColors, XcmsColorFormat newFormat, Bool *pCompressed); extern Status _XcmsDIConvertColors( XcmsCCC ccc, XcmsColor *pColors_in_out, XcmsColor *pWhitePt, unsigned int nColors, XcmsColorFormat newFormat); extern Status _XcmsDDConvertColors( XcmsCCC ccc, XcmsColor *pColors_in_out, unsigned int nColors, XcmsColorFormat newFormat, Bool *pCompressed); extern XcmsColorFormat _XcmsRegFormatOfPrefix( _Xconst char *prefix); extern void _XColor_to_XcmsRGB( XcmsCCC ccc, XColor *pXColors, XcmsColor *pColors, unsigned int nColors); extern Status _XcmsSetGetColor( Status (*xColorProc)( Display* /* display */, Colormap /* colormap */, XColor* /* screen_in_out */), Display *dpy, Colormap cmap, XcmsColor *pColors_in_out, XcmsColorFormat result_format, Bool *pCompressed); extern Status _XcmsSetGetColors( Status (*xColorProc)( Display* /* display */, Colormap /* colormap */, XColor* /* screen_in_out */, int /* nColors */), Display *dpy, Colormap cmap, XcmsColor *pColors_in_out, int nColors, XcmsColorFormat result_format, Bool *pCompressed); extern Status _XcmsCIELuvQueryMaxLCRGB( XcmsCCC ccc, XcmsFloat hue, /* hue in radians */ XcmsColor *pColor_return, XcmsRGBi *pRGB_return); extern XcmsIntensityMap * _XcmsGetIntensityMap( Display *dpy, Visual *visual); extern int _XcmsInitDefaultCCCs( Display *dpy); extern int _XcmsInitScrnInfo( register Display *dpy, int screenNumber); extern XcmsCmapRec * _XcmsCopyCmapRecAndFree( Display *dpy, Colormap src_cmap, Colormap copy_cmap); extern void _XcmsCopyISOLatin1Lowered( char *dst, const char *src); extern int _XcmsEqualWhitePts( XcmsCCC ccc, XcmsColor *pWhitePt1, XcmsColor *pWhitePt2); extern int _XcmsLRGB_InitScrnDefault( Display *dpy, int screenNumber, XcmsPerScrnInfo *pPerScrnInfo); extern void _XcmsFreeIntensityMaps( Display *dpy); extern int _XcmsGetProperty( Display *pDpy, Window w, Atom property, int *pFormat, unsigned long *pNItems, unsigned long *pNBytes, char **pValue); extern unsigned long _XcmsGetElement( int format, char **pValue, unsigned long *pCount); extern void _XcmsUnresolveColor( XcmsCCC ccc, XcmsColor *pColor); extern void _XcmsResolveColor( XcmsCCC ccc, XcmsColor *pXcmsColor); #endif /* _CV_H_ */ libX11-1.6.3/src/xcms/IdOfPr.c000064401431060000012000000056201247741723500161110ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * NAME * XcmsIdOfPr.c * * DESCRIPTION * Source for XcmsFormatOfPrefix() * * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" /* * NAME * XcmsFormatOfPrefix * * SYNOPSIS */ XcmsColorFormat XcmsFormatOfPrefix(char *prefix) /* * DESCRIPTION * Returns the Color Space ID for the specified prefix * if the color space is found in the Color Conversion * Context. * * RETURNS * Color Space ID if found; zero otherwise. */ { XcmsColorSpace **papColorSpaces; char string_buf[64]; char *string_lowered; int len; /* * While copying prefix to string_lowered, convert to lowercase */ if ((len = strlen(prefix)) >= sizeof(string_buf)) { string_lowered = Xmalloc(len+1); } else { string_lowered = string_buf; } _XcmsCopyISOLatin1Lowered(string_lowered, prefix); /* * First try Device-Independent color spaces */ papColorSpaces = _XcmsDIColorSpaces; if (papColorSpaces != NULL) { while (*papColorSpaces != NULL) { if (strcmp((*papColorSpaces)->prefix, string_lowered) == 0) { if (len >= sizeof(string_buf)) Xfree(string_lowered); return((*papColorSpaces)->id); } papColorSpaces++; } } /* * Next try Device-Dependent color spaces */ papColorSpaces = _XcmsDDColorSpaces; if (papColorSpaces != NULL) { while (*papColorSpaces != NULL) { if (strcmp((*papColorSpaces)->prefix, string_lowered) == 0) { if (len >= sizeof(string_buf)) Xfree(string_lowered); return((*papColorSpaces)->id); } papColorSpaces++; } } if (len >= sizeof(string_buf)) Xfree(string_lowered); return(XcmsUndefinedFormat); } e "Cv.h" /* * NAME * XcmsFormatOfPrefix * * SYNOPSIS */ XcmsColorFormat XcmsFormatOfPrefix(char *prefixlibX11-1.6.3/src/xcms/LabMxC.c000064401431060000012000000144511247741723500160760ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of XCMS based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * * NAME * CIELabMxC.c * * DESCRIPTION * Source for the XcmsCIELabQueryMaxC() gamut boundary * querying routine. * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include #include "Cv.h" /* * DEFINES */ #define MAXBISECTCOUNT 100 #define EPS (XcmsFloat)0.001 #define START_CHROMA (XcmsFloat)3.6 #define TOPL (XcmsFloat)100.0 /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * XcmsCIELabQueryMaxC - max chroma for a hue_angle and L_star * * SYNOPSIS */ Status XcmsCIELabQueryMaxC( XcmsCCC ccc, XcmsFloat hue_angle, /* hue angle in degrees */ XcmsFloat L_star, XcmsColor *pColor_return) /* * DESCRIPTION * Return the maximum chroma for a specific hue_angle and L_star. * The returned format is in XcmsCIELabFormat. * * * ASSUMPTIONS * This routine assumes that the white point associated with * the color specification is the Screen White Point. The * Screen White Point will also be associated with the * returned color specification. * * RETURNS * XcmsFailure - Failure * XcmsSuccess - Succeeded * */ { XcmsCCCRec myCCC; XcmsColor tmp; XcmsColor max_lc; XcmsFloat n_L_star, last_L_star, prev_L_star; XcmsFloat hue, lastaStar, lastbStar, /*lastChroma,*/ maxDist, nT, rFactor; XcmsRGBi rgb_saved; int nCount, nMaxCount; /* * Check Arguments */ if (ccc == NULL || pColor_return == NULL) { return(XcmsFailure); } /* Use my own CCC and inherit screen white Pt */ memcpy ((char *)&myCCC, (char *)ccc, sizeof(XcmsCCCRec)); myCCC.clientWhitePt.format = XcmsUndefinedFormat; myCCC.gamutCompProc = (XcmsCompressionProc)NULL;/* no gamut comp func */ while (hue_angle < 0.0) { hue_angle += 360.0; } while (hue_angle >= 360.0) { hue_angle -= 360.0; } hue = radians(hue_angle); tmp.spec.CIELab.L_star = L_star; tmp.spec.CIELab.a_star = XCMS_CIEASTAROFHUE(hue, START_CHROMA); tmp.spec.CIELab.b_star = XCMS_CIEBSTAROFHUE(hue, START_CHROMA); tmp.pixel = pColor_return->pixel; tmp.format = XcmsCIELabFormat; /* Step 1: compute the maximum L_star and chroma for this hue. */ memcpy((char *)&max_lc, (char *)&tmp, sizeof(XcmsColor)); if (_XcmsCIELabQueryMaxLCRGB(&myCCC, hue, &max_lc, &rgb_saved) == XcmsFailure) { return(XcmsFailure); } /* * Step 2: Do a bisection here to compute the maximum chroma * Note the differences between when the point to be found * is above the maximum LC point and when it is below. */ if (L_star <= max_lc.spec.CIELab.L_star) { maxDist = max_lc.spec.CIELab.L_star; } else { maxDist = TOPL - max_lc.spec.CIELab.L_star; } n_L_star = L_star; last_L_star = -1.0; nMaxCount = MAXBISECTCOUNT; rFactor = 1.0; for (nCount = 0; nCount < nMaxCount; nCount++) { prev_L_star = last_L_star; last_L_star = tmp.spec.CIELab.L_star; /* lastChroma = XCMS_CIELAB_PMETRIC_CHROMA(tmp.spec.CIELab.a_star, */ /* tmp.spec.CIELab.b_star); */ lastaStar = tmp.spec.CIELab.a_star; lastbStar = tmp.spec.CIELab.b_star; nT = (n_L_star - max_lc.spec.CIELab.L_star) / maxDist * rFactor; if (nT > 0) { tmp.spec.RGBi.red = rgb_saved.red * (1.0 - nT) + nT; tmp.spec.RGBi.green = rgb_saved.green * (1.0 - nT) + nT; tmp.spec.RGBi.blue = rgb_saved.blue * (1.0 - nT) + nT; } else { tmp.spec.RGBi.red = rgb_saved.red + (rgb_saved.red * nT); tmp.spec.RGBi.green = rgb_saved.green + (rgb_saved.green * nT); tmp.spec.RGBi.blue = rgb_saved.blue + (rgb_saved.blue * nT); } tmp.format = XcmsRGBiFormat; /* convert from RGB to CIELab */ if (_XcmsConvertColorsWithWhitePt(&myCCC, &tmp, ScreenWhitePointOfCCC(&myCCC), 1, XcmsCIELabFormat, (Bool *) NULL) == XcmsFailure) { return(XcmsFailure); } /* * Now check if we've reached the target L_star */ /* printf("result Lstar = %lf\n", tmp.spec.CIELab.L_star); */ if (tmp.spec.CIELab.L_star <= L_star + EPS && tmp.spec.CIELab.L_star >= L_star - EPS) { memcpy((char *)pColor_return, (char *)&tmp, sizeof(XcmsColor)); return(XcmsSuccess); } if (nT > 0) { n_L_star += ((TOPL - n_L_star) * (L_star - tmp.spec.CIELab.L_star)) / (TOPL - L_star); } else { n_L_star *= L_star / tmp.spec.CIELuv.L_star; } if (tmp.spec.CIELab.L_star <= prev_L_star + EPS && tmp.spec.CIELab.L_star >= prev_L_star - EPS) { rFactor *= 0.5; /* selective relaxation employed */ /* printf("rFactor = %lf\n", rFactor); */ } } if (XCMS_FABS(last_L_star - L_star) < XCMS_FABS(tmp.spec.CIELab.L_star - L_star)) { tmp.spec.CIELab.a_star = lastaStar; tmp.spec.CIELab.b_star = lastbStar; /* tmp.spec.CIELab.a_star = XCMS_CIEASTAROFHUE(hue, lastChroma); */ /* tmp.spec.CIELab.b_star = XCMS_CIEBSTAROFHUE(hue, lastChroma); */ } tmp.spec.CIELab.L_star = L_star; memcpy((char *)pColor_return, (char *)&tmp, sizeof(XcmsColor)); return(XcmsSuccess); } libX11-1.6.3/src/xcms/cmsAllCol.c000064401431060000012000000042601247741723500166360ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * NAME * XcmsAllCol.c * * DESCRIPTION * Source for XcmsAllocColor * * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" /* * NAME * XcmsAllocColor - Allocate Color * * SYNOPSIS */ Status XcmsAllocColor( Display *dpy, Colormap colormap, XcmsColor *pXcmsColor_in_out, XcmsColorFormat result_format) /* * DESCRIPTION * Given a device-dependent or device-independent color * specification, XcmsAllocColor will convert it to X RGB * values then use it in a call to XAllocColor. * * RETURNS * XcmsFailure if failed; * XcmsSuccess if it succeeded without gamut compression; * XcmsSuccessWithCompression if it succeeded with gamut * compression; * * Also returns the pixel value of the color cell and a color * specification of the color actually stored. * */ { return(_XcmsSetGetColor(XAllocColor, dpy, colormap, pXcmsColor_in_out, result_format, (Bool *)NULL)); } libX11-1.6.3/src/xcms/QBlack.c000064401431060000012000000045451247741723500161300ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * NAME * XcmsQBlack.c - Query Black * * DESCRIPTION * Routine to obtain a color specification for zero * red, green, and blue intensities. * * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcms.h" /************************************************************************ * * * PUBLIC INTERFACES * * * ************************************************************************/ /* * NAME * XcmsQueryBlack * * SYNOPSIS */ Status XcmsQueryBlack( XcmsCCC ccc, XcmsColorFormat target_format, XcmsColor *pColor_ret) /* * DESCRIPTION * Returns the color specification in the target format for * zero intensity red, green, and blue. * * RETURNS * Returns XcmsSuccess, if failed; otherwise XcmsFailure * */ { XcmsColor tmp; tmp.format = XcmsRGBiFormat; tmp.pixel = 0; tmp.spec.RGBi.red = 0.0; tmp.spec.RGBi.green = 0.0; tmp.spec.RGBi.blue = 0.0; if (XcmsConvertColors(ccc, &tmp, 1, target_format, NULL) != XcmsSuccess) { return(XcmsFailure); } memcpy((char *)pColor_ret, (char *)&tmp, sizeof(XcmsColor)); return(XcmsSuccess); } libX11-1.6.3/src/xcms/HVCGcC.c000064401431060000012000000112341247741723500157610ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. TekColor is a * trademark of Tektronix, Inc. The term "TekHVC" designates a particular * color space that is the subject of U.S. Patent No. 4,985,853 (equivalent * foreign patents pending). Permission is hereby granted to use, copy, * modify, sell, and otherwise distribute this software and its * documentation for any purpose and without fee, provided that: * * 1. This copyright, permission, and disclaimer notice is reproduced in * all copies of this software and any modification thereof and in * supporting documentation; * 2. Any color-handling application which displays TekHVC color * cooordinates identifies these as TekHVC color coordinates in any * interface that displays these coordinates and in any associated * documentation; * 3. The term "TekHVC" is always used, and is only used, in association * with the mathematical derivations of the TekHVC Color Space, * including those provided in this file and any equivalent pathways and * mathematical derivations, regardless of digital (e.g., floating point * or integer) representation. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * NAME * TekHVCGcC.c * * DESCRIPTION * Source for XcmsTekHVCClipC() gamut compression routine. * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * XcmsTekHVCClipC - Reduce the chroma for a hue and value * * SYNOPSIS */ /* ARGSUSED */ Status XcmsTekHVCClipC ( XcmsCCC ccc, XcmsColor *pColors_in_out, unsigned int nColors, unsigned int i, Bool *pCompressed) /* * DESCRIPTION * Reduce the Chroma for a specific hue and value to * to bring the given color into the gamut of the * specified device. As required of gamut compression * functions in Xcms, this routine returns pColor_in_out * in XcmsCIEXYZFormat on successful completion. * * Since this routine works with the value within * pColor_in_out intermediate results may be returned * even though it may be invalid. * * RETURNS * XcmsFailure - Failure * XcmsSuccess - Succeeded * */ { Status retval; XcmsColor *pColor; /* * Color specification passed as input can be assumed to: * 1. Be in XcmsCIEXYZFormat * 2. Already be white point adjusted for the Screen White Point. * This means that the white point now associated with this * color spec is the Screen White Point (even if the * ccc->clientWhitePt differs). */ /* * Insure TekHVC installed */ if (XcmsAddColorSpace(&XcmsTekHVCColorSpace) == XcmsFailure) { return(XcmsFailure); } pColor = pColors_in_out + i; if (ccc->visual->class < StaticColor && FunctionSetOfCCC(ccc) != (XPointer) &XcmsLinearRGBFunctionSet) { /* * GRAY ! */ _XcmsDIConvertColors(ccc, pColor, &ccc->pPerScrnInfo->screenWhitePt, 1, XcmsTekHVCFormat); pColor->spec.TekHVC.H = pColor->spec.TekHVC.C = 0.0; _XcmsDIConvertColors(ccc, pColor, &ccc->pPerScrnInfo->screenWhitePt, 1, XcmsCIEXYZFormat); if (pCompressed) { *(pCompressed + i) = True; } return(XcmsSuccess); } else { if (pColor->format != XcmsTekHVCFormat) { if (_XcmsDIConvertColors(ccc, pColor, &ccc->pPerScrnInfo->screenWhitePt, 1, XcmsTekHVCFormat) == XcmsFailure) { return(XcmsFailure); } } if (XcmsTekHVCQueryMaxC(ccc, pColor->spec.TekHVC.H, pColor->spec.TekHVC.V, pColor) == XcmsFailure) { return(XcmsFailure); } retval = _XcmsDIConvertColors(ccc, pColor, &ccc->pPerScrnInfo->screenWhitePt, 1, XcmsCIEXYZFormat); if (retval != XcmsFailure && pCompressed != NULL) { *(pCompressed + i) = True; } return(retval); } } libX11-1.6.3/src/xcms/CvCols.c000064401431060000012000000635511247741723500161660ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * NAME * XcmsCvCols.c * * DESCRIPTION * Xcms API routine that converts between the * device-independent color spaces. * * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" /* * LOCAL DEFINES */ #define DD_FORMAT 0x01 #define DI_FORMAT 0x02 #define MIX_FORMAT 0x04 #ifndef MAX # define MAX(x,y) ((x) > (y) ? (x) : (y)) #endif /************************************************************************ * * * PRIVATE ROUTINES * * * ************************************************************************/ /* * NAME * EqualCIEXYZ * * SYNOPSIS */ static int EqualCIEXYZ( XcmsColor *p1, XcmsColor *p2) /* * DESCRIPTION * Compares two XcmsColor structures that are in XcmsCIEXYZFormat * * RETURNS * Returns 1 if equal; 0 otherwise. * */ { if (p1->format != XcmsCIEXYZFormat || p2->format != XcmsCIEXYZFormat) { return(0); } if ((p1->spec.CIEXYZ.X != p2->spec.CIEXYZ.X) || (p1->spec.CIEXYZ.Y != p2->spec.CIEXYZ.Y) || (p1->spec.CIEXYZ.Z != p2->spec.CIEXYZ.Z)) { return(0); } return(1); } /* * NAME * XcmsColorSpace * * SYNOPSIS */ static XcmsColorSpace * ColorSpaceOfID( XcmsCCC ccc, XcmsColorFormat id) /* * DESCRIPTION * Returns a pointer to the color space structure * (XcmsColorSpace) associated with the specified color space * ID. * * RETURNS * Pointer to matching XcmsColorSpace structure if found; * otherwise NULL. */ { XcmsColorSpace **papColorSpaces; if (ccc == NULL) { return(NULL); } /* * First try Device-Independent color spaces */ papColorSpaces = _XcmsDIColorSpaces; if (papColorSpaces != NULL) { while (*papColorSpaces != NULL) { if ((*papColorSpaces)->id == id) { return(*papColorSpaces); } papColorSpaces++; } } /* * Next try Device-Dependent color spaces */ papColorSpaces = ((XcmsFunctionSet *)ccc->pPerScrnInfo->functionSet)->DDColorSpaces; if (papColorSpaces != NULL) { while (*papColorSpaces != NULL) { if ((*papColorSpaces)->id == id) { return(*papColorSpaces); } papColorSpaces++; } } return(NULL); } /* * NAME * ValidDIColorSpaceID * * SYNOPSIS */ static int ValidDIColorSpaceID( XcmsColorFormat id) /* * DESCRIPTION * Determines if the specified color space ID is a valid * Device-Independent color space in the specified Color * Conversion Context. * * RETURNS * Returns zero if not valid; otherwise non-zero. */ { XcmsColorSpace **papRec; papRec = _XcmsDIColorSpaces; if (papRec != NULL) { while (*papRec != NULL) { if ((*papRec)->id == id) { return(1); } papRec++; } } return(0); } /* * NAME * ValidDDColorSpaceID * * SYNOPSIS */ static int ValidDDColorSpaceID( XcmsCCC ccc, XcmsColorFormat id) /* * DESCRIPTION * Determines if the specified color space ID is a valid * Device-Dependent color space in the specified Color * Conversion Context. * * RETURNS * Returns zero if not valid; otherwise non-zero. */ { XcmsColorSpace **papRec; if (ccc->pPerScrnInfo->state != XcmsInitNone) { papRec = ((XcmsFunctionSet *)ccc->pPerScrnInfo->functionSet)->DDColorSpaces; while (*papRec != NULL) { if ((*papRec)->id == id) { return(1); } papRec++; } } return(0); } /* * NAME * ConvertMixedColors - Convert XcmsColor structures * * SYNOPSIS */ static Status ConvertMixedColors( XcmsCCC ccc, XcmsColor *pColors_in_out, XcmsColor *pWhitePt, unsigned int nColors, XcmsColorFormat targetFormat, unsigned char format_flag) /* * DESCRIPTION * This routine will only convert the following types of * batches: * DI to DI * DD to DD * DD to CIEXYZ * In other words, it will not convert the following types of * batches: * DI to DD * DD to DI(not CIEXYZ) * * format_flag: * 0x01 : convert Device-Dependent only specifications to the * target format. * 0x02 : convert Device-Independent only specifications to the * target format. * 0x03 : convert all specifications to the target format. * * RETURNS * XcmsFailure if failed, * XcmsSuccess if none of the color specifications were * compressed in the conversion process * XcmsSuccessWithCompression if at least one of the * color specifications were compressed in the * conversion process. * */ { XcmsColor *pColor, *pColors_start; XcmsColorFormat format; Status retval_tmp; Status retval = XcmsSuccess; unsigned int iColors; unsigned int nBatch; /* * Convert array of mixed color specifications in batches of * contiguous formats to the target format */ iColors = 0; while (iColors < nColors) { /* * Find contiguous array of color specifications with the * same format */ pColor = pColors_start = pColors_in_out + iColors; format = pColors_start->format; nBatch = 0; while (iColors < nColors && pColor->format == format) { pColor++; nBatch++; iColors++; } if (format != targetFormat) { /* * Need to convert this batch from current format to target format. */ if (XCMS_DI_ID(format) && (format_flag & DI_FORMAT) && XCMS_DI_ID(targetFormat)) { /* * DI->DI * * Format of interest is Device-Independent, * This batch contains Device-Independent specifications, and * the Target format is Device-Independent. */ retval_tmp = _XcmsDIConvertColors(ccc, pColors_start, pWhitePt, nBatch, targetFormat); } else if (XCMS_DD_ID(format) && (format_flag & DD_FORMAT) && (targetFormat == XcmsCIEXYZFormat)) { /* * DD->CIEXYZ * * Format of interest is Device-Dependent, * This batch contains Device-Dependent specifications, and * the Target format is CIEXYZ. * * Since DD->CIEXYZ we can use NULL instead of pCompressed. */ if ((ccc->whitePtAdjProc != NULL) && !_XcmsEqualWhitePts(ccc, pWhitePt, ScreenWhitePointOfCCC(ccc))) { /* * Need to call WhiteAdjustProc (Screen White Point to * White Point). */ retval_tmp = (*ccc->whitePtAdjProc)(ccc, ScreenWhitePointOfCCC(ccc), pWhitePt, XcmsCIEXYZFormat, pColors_start, nBatch, (Bool *)NULL); } else { retval_tmp = _XcmsDDConvertColors(ccc, pColors_start, nBatch, XcmsCIEXYZFormat, (Bool *)NULL); } } else if (XCMS_DD_ID(format) && (format_flag & DD_FORMAT) && XCMS_DD_ID(targetFormat)) { /* * DD->DD(not CIEXYZ) * * Format of interest is Device-Dependent, * This batch contains Device-Dependent specifications, and * the Target format is Device-Dependent and not CIEXYZ. */ retval_tmp = _XcmsDDConvertColors(ccc, pColors_start, nBatch, targetFormat, (Bool *)NULL); } else { /* * This routine is called for the wrong reason. */ return(XcmsFailure); } if (retval_tmp == XcmsFailure) { return(XcmsFailure); } retval = MAX(retval, retval_tmp); } } return(retval); } /************************************************************************ * * * API PRIVATE ROUTINES * * * ************************************************************************/ /* * NAME * _XcmsEqualWhitePts * * SYNOPSIS */ int _XcmsEqualWhitePts(XcmsCCC ccc, XcmsColor *pWhitePt1, XcmsColor *pWhitePt2) /* * DESCRIPTION * * RETURNS * Returns 0 if not equal; otherwise 1. * */ { XcmsColor tmp1, tmp2; memcpy((char *)&tmp1, (char *)pWhitePt1, sizeof(XcmsColor)); memcpy((char *)&tmp2, (char *)pWhitePt2, sizeof(XcmsColor)); if (tmp1.format != XcmsCIEXYZFormat) { if (_XcmsDIConvertColors(ccc, &tmp1, (XcmsColor *) NULL, 1, XcmsCIEXYZFormat)==0) { return(0); } } if (tmp2.format != XcmsCIEXYZFormat) { if (_XcmsDIConvertColors(ccc, &tmp2, (XcmsColor *) NULL, 1, XcmsCIEXYZFormat)==0) { return(0); } } return (EqualCIEXYZ(&tmp1, &tmp2)); } /* * NAME * _XcmsDIConvertColors - Convert XcmsColor structures * * SYNOPSIS */ Status _XcmsDIConvertColors( XcmsCCC ccc, XcmsColor *pColors_in_out, XcmsColor *pWhitePt, unsigned int nColors, XcmsColorFormat newFormat) /* * DESCRIPTION * Convert XcmsColor structures to another Device-Independent * form. * * Here are some assumptions that this routine makes: * 1. The calling routine has already checked if * pColors_in_out->format == newFormat, therefore * there is no need to check again here. * 2. The calling routine has already checked nColors, * therefore this routine assumes nColors > 0. * 3. The calling routine may want to convert only between * CIExyY <-> CIEXYZ <-> CIEuvY * therefore, this routine allows pWhitePt to equal NULL. * * * RETURNS * XcmsFailure if failed, * XcmsSuccess if succeeded. * */ { XcmsColorSpace *pFrom, *pTo; XcmsDIConversionProc *src_to_CIEXYZ, *src_from_CIEXYZ; XcmsDIConversionProc *dest_to_CIEXYZ, *dest_from_CIEXYZ; XcmsDIConversionProc *to_CIEXYZ_stop, *from_CIEXYZ_start; XcmsDIConversionProc *tmp; /* * Allow pWhitePt to equal NULL. This appropriate when converting * anywhere between: * CIExyY <-> CIEXYZ <-> CIEuvY */ if (pColors_in_out == NULL || !ValidDIColorSpaceID(pColors_in_out->format) || !ValidDIColorSpaceID(newFormat)) { return(XcmsFailure); } /* * Get a handle on the function list for the current specification format */ if ((pFrom = ColorSpaceOfID(ccc, pColors_in_out->format)) == NULL) { return(XcmsFailure); } /* * Get a handle on the function list for the new specification format */ if ((pTo = ColorSpaceOfID(ccc, newFormat)) == NULL) { return(XcmsFailure); } src_to_CIEXYZ = pFrom->to_CIEXYZ; src_from_CIEXYZ = pFrom->from_CIEXYZ; dest_to_CIEXYZ = pTo->to_CIEXYZ; dest_from_CIEXYZ = pTo->from_CIEXYZ; if (pTo->inverse_flag && pFrom->inverse_flag) { /* * Find common function pointers */ for (to_CIEXYZ_stop = src_to_CIEXYZ; *to_CIEXYZ_stop; to_CIEXYZ_stop++){ for (tmp = dest_to_CIEXYZ; *tmp; tmp++) { if (*to_CIEXYZ_stop == *tmp) { goto Continue; } } } Continue: /* * Execute the functions to CIEXYZ, stopping short as necessary */ while (src_to_CIEXYZ != to_CIEXYZ_stop) { if ((*src_to_CIEXYZ++)(ccc, pWhitePt, pColors_in_out, nColors) == XcmsFailure) { return(XcmsFailure); } } /* * Determine where to start on the from_CIEXYZ path. */ from_CIEXYZ_start = dest_from_CIEXYZ; tmp = src_from_CIEXYZ; while ((*from_CIEXYZ_start == *tmp) && (*from_CIEXYZ_start != NULL)) { from_CIEXYZ_start++; tmp++; } } else { /* * The function in at least one of the Color Spaces are not * complementary, i.e., * for an i, 0 <= i < n elements * from_CIEXYZ[i] is not the inverse of to_CIEXYZ[i] * * Execute the functions all the way to CIEXYZ */ while (*src_to_CIEXYZ) { if ((*src_to_CIEXYZ++)(ccc, pWhitePt, pColors_in_out, nColors) == XcmsFailure) { return(XcmsFailure); } } /* * Determine where to start on the from_CIEXYZ path. */ from_CIEXYZ_start = dest_from_CIEXYZ; } /* * Execute the functions from CIEXYZ. */ while (*from_CIEXYZ_start) { if ((*from_CIEXYZ_start++)(ccc, pWhitePt, pColors_in_out, nColors) == XcmsFailure) { return(XcmsFailure); } } return(XcmsSuccess); } /* * NAME * _XcmsDDConvertColors - Convert XcmsColor structures * * SYNOPSIS */ Status _XcmsDDConvertColors( XcmsCCC ccc, XcmsColor *pColors_in_out, unsigned int nColors, XcmsColorFormat newFormat, Bool *pCompressed) /* * DESCRIPTION * Convert XcmsColor structures: * * 1. From CIEXYZ to Device-Dependent formats (typically RGB and * RGBi), * or * 2. Between Device-Dependent formats (typically RGB and RGBi). * * Assumes that these specifications have already been white point * adjusted if necessary from Client White Point to Screen * White Point. Therefore, the white point now associated * with the specifications is the Screen White Point. * * pCompressed may be NULL. If so this indicates that the * calling routine is not interested in knowing exactly which * color was compressed, if any. * * * RETURNS * XcmsFailure if failed, * XcmsSuccess if none of the color specifications were * compressed in the conversion process * XcmsSuccessWithCompression if at least one of the * color specifications were compressed in the * conversion process. * */ { XcmsColorSpace *pFrom, *pTo; XcmsDDConversionProc *src_to_CIEXYZ, *src_from_CIEXYZ; XcmsDDConversionProc *dest_to_CIEXYZ, *dest_from_CIEXYZ; XcmsDDConversionProc *from_CIEXYZ_start, *to_CIEXYZ_stop; XcmsDDConversionProc *tmp; int retval; int hasCompressed = 0; if (ccc == NULL || pColors_in_out == NULL) { return(XcmsFailure); } if (nColors == 0 || pColors_in_out->format == newFormat) { /* do nothing */ return(XcmsSuccess); } if (((XcmsFunctionSet *)ccc->pPerScrnInfo->functionSet) == NULL) { return(XcmsFailure); /* hmm, an internal error? */ } /* * Its ok if pColors_in_out->format == XcmsCIEXYZFormat * or * if newFormat == XcmsCIEXYZFormat */ if ( !( ValidDDColorSpaceID(ccc, pColors_in_out->format) || (pColors_in_out->format == XcmsCIEXYZFormat)) || !(ValidDDColorSpaceID(ccc, newFormat) || newFormat == XcmsCIEXYZFormat)) { return(XcmsFailure); } if ((pFrom = ColorSpaceOfID(ccc, pColors_in_out->format)) == NULL){ return(XcmsFailure); } if ((pTo = ColorSpaceOfID(ccc, newFormat)) == NULL) { return(XcmsFailure); } src_to_CIEXYZ = (XcmsDDConversionProc *)pFrom->to_CIEXYZ; src_from_CIEXYZ = (XcmsDDConversionProc *)pFrom->from_CIEXYZ; dest_to_CIEXYZ = (XcmsDDConversionProc *)pTo->to_CIEXYZ; dest_from_CIEXYZ = (XcmsDDConversionProc *)pTo->from_CIEXYZ; if (pTo->inverse_flag && pFrom->inverse_flag) { /* * Find common function pointers */ for (to_CIEXYZ_stop = src_to_CIEXYZ; *to_CIEXYZ_stop; to_CIEXYZ_stop++){ for (tmp = dest_to_CIEXYZ; *tmp; tmp++) { if (*to_CIEXYZ_stop == *tmp) { goto Continue; } } } Continue: /* * Execute the functions */ while (src_to_CIEXYZ != to_CIEXYZ_stop) { retval = (*src_to_CIEXYZ++)(ccc, pColors_in_out, nColors, pCompressed); if (retval == XcmsFailure) { return(XcmsFailure); } hasCompressed |= (retval == XcmsSuccessWithCompression); } /* * Determine where to start on the from_CIEXYZ path. */ from_CIEXYZ_start = dest_from_CIEXYZ; tmp = src_from_CIEXYZ; while ((*from_CIEXYZ_start == *tmp) && (*from_CIEXYZ_start != NULL)) { from_CIEXYZ_start++; tmp++; } } else { /* * The function in at least one of the Color Spaces are not * complementary, i.e., * for an i, 0 <= i < n elements * from_CIEXYZ[i] is not the inverse of to_CIEXYZ[i] * * Execute the functions all the way to CIEXYZ */ while (*src_to_CIEXYZ) { retval = (*src_to_CIEXYZ++)(ccc, pColors_in_out, nColors, pCompressed); if (retval == XcmsFailure) { return(XcmsFailure); } hasCompressed |= (retval == XcmsSuccessWithCompression); } /* * Determine where to start on the from_CIEXYZ path. */ from_CIEXYZ_start = dest_from_CIEXYZ; } while (*from_CIEXYZ_start) { retval = (*from_CIEXYZ_start++)(ccc, pColors_in_out, nColors, pCompressed); if (retval == XcmsFailure) { return(XcmsFailure); } hasCompressed |= (retval == XcmsSuccessWithCompression); } return(hasCompressed ? XcmsSuccessWithCompression : XcmsSuccess); } /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * XcmsConvertColors - Convert XcmsColor structures * * SYNOPSIS */ Status XcmsConvertColors( XcmsCCC ccc, XcmsColor *pColors_in_out, unsigned int nColors, XcmsColorFormat targetFormat, Bool *pCompressed) /* * DESCRIPTION * Convert XcmsColor structures to another format * * RETURNS * XcmsFailure if failed, * XcmsSuccess if succeeded without gamut compression, * XcmsSuccessWithCompression if succeeded with gamut * compression. * */ { XcmsColor clientWhitePt; XcmsColor Color1; XcmsColor *pColors_tmp; int callWhiteAdjustProc = 0; XcmsColorFormat format; Status retval; unsigned char contents_flag = 0x00; unsigned int iColors; if (ccc == NULL || pColors_in_out == NULL || !(ValidDIColorSpaceID(targetFormat) || ValidDDColorSpaceID(ccc, targetFormat))) { return(XcmsFailure); } /* * Check formats in color specification array */ format = pColors_in_out->format; for (pColors_tmp = pColors_in_out, iColors = nColors; iColors; pColors_tmp++, iColors--) { if (!(ValidDIColorSpaceID(pColors_tmp->format) || ValidDDColorSpaceID(ccc, pColors_tmp->format))) { return(XcmsFailure); } if (XCMS_DI_ID(pColors_tmp->format)) { contents_flag |= DI_FORMAT; } else { contents_flag |= DD_FORMAT; } if (pColors_tmp->format != format) { contents_flag |= MIX_FORMAT; } } /* * Check if we need the Client White Point. */ if ((contents_flag & DI_FORMAT) || XCMS_DI_ID(targetFormat)) { /* To proceed, we need to get the Client White Point */ memcpy((char *)&clientWhitePt, (char *)&ccc->clientWhitePt, sizeof(XcmsColor)); if (clientWhitePt.format == XcmsUndefinedFormat) { /* * Client White Point is undefined, therefore set to the Screen * White Point. * Since Client White Point == Screen White Point, WhiteAdjustProc * is not called. */ memcpy((char *)&clientWhitePt, (char *)&ccc->pPerScrnInfo->screenWhitePt, sizeof(XcmsColor)); } else if ((ccc->whitePtAdjProc != NULL) && !_XcmsEqualWhitePts(ccc, &clientWhitePt, ScreenWhitePointOfCCC(ccc))) { /* * Client White Point != Screen White Point, and WhiteAdjustProc * is not NULL, therefore, will need to call it when * converting between DI and DD specifications. */ callWhiteAdjustProc = 1; } } /* * Make copy of array of color specifications */ if (nColors > 1) { pColors_tmp = Xmalloc(nColors * sizeof(XcmsColor)); } else { pColors_tmp = &Color1; } memcpy((char *)pColors_tmp, (char *)pColors_in_out, nColors * sizeof(XcmsColor)); /* * zero out pCompressed */ if (pCompressed) { bzero((char *)pCompressed, nColors * sizeof(Bool)); } if (contents_flag == DD_FORMAT || contents_flag == DI_FORMAT) { /* * ENTIRE ARRAY IS IN ONE FORMAT. */ if (XCMS_DI_ID(format) && XCMS_DI_ID(targetFormat)) { /* * DI-to-DI only conversion */ retval = _XcmsDIConvertColors(ccc, pColors_tmp, &clientWhitePt, nColors, targetFormat); } else if (XCMS_DD_ID(format) && XCMS_DD_ID(targetFormat)) { /* * DD-to-DD only conversion * Since DD->DD there will be no compressed thus we can * pass NULL instead of pCompressed. */ retval = _XcmsDDConvertColors(ccc, pColors_tmp, nColors, targetFormat, (Bool *)NULL); } else { /* * Otherwise we have: * 1. Device-Independent to Device-Dependent Conversion * OR * 2. Device-Dependent to Device-Independent Conversion * * We need to go from oldFormat -> CIEXYZ -> targetFormat * adjusting for white points as necessary. */ if (XCMS_DI_ID(format)) { /* * 1. Device-Independent to Device-Dependent Conversion */ if (callWhiteAdjustProc) { /* * White Point Adjustment * Client White Point to Screen White Point */ retval = (*ccc->whitePtAdjProc)(ccc, &clientWhitePt, ScreenWhitePointOfCCC(ccc), targetFormat, pColors_tmp, nColors, pCompressed); } else { if (_XcmsDIConvertColors(ccc, pColors_tmp, &clientWhitePt, nColors, XcmsCIEXYZFormat) == XcmsFailure) { goto Failure; } retval = _XcmsDDConvertColors(ccc, pColors_tmp, nColors, targetFormat, pCompressed); } } else { /* * 2. Device-Dependent to Device-Independent Conversion */ if (callWhiteAdjustProc) { /* * White Point Adjustment * Screen White Point to Client White Point */ retval = (*ccc->whitePtAdjProc)(ccc, ScreenWhitePointOfCCC(ccc), &clientWhitePt, targetFormat, pColors_tmp, nColors, pCompressed); } else { /* * Since DD->CIEXYZ, no compression takes place therefore * we can pass NULL instead of pCompressed. */ if (_XcmsDDConvertColors(ccc, pColors_tmp, nColors, XcmsCIEXYZFormat, (Bool *)NULL) == XcmsFailure) { goto Failure; } retval = _XcmsDIConvertColors(ccc, pColors_tmp, &clientWhitePt, nColors, targetFormat); } } } } else { /* * ARRAY HAS MIXED FORMATS. */ if ((contents_flag == (DI_FORMAT | MIX_FORMAT)) && XCMS_DI_ID(targetFormat)) { /* * Convert from DI to DI in batches of contiguous formats * * Because DI->DI, WhiteAdjustProc not called. */ retval = ConvertMixedColors(ccc, pColors_tmp, &clientWhitePt, nColors, targetFormat, (unsigned char)DI_FORMAT); } else if ((contents_flag == (DD_FORMAT | MIX_FORMAT)) && XCMS_DD_ID(targetFormat)) { /* * Convert from DD to DD in batches of contiguous formats * * Because DD->DD, WhiteAdjustProc not called. */ retval = ConvertMixedColors(ccc, pColors_tmp, (XcmsColor *)NULL, nColors, targetFormat, (unsigned char)DD_FORMAT); } else if (XCMS_DI_ID(targetFormat)) { /* * We need to convert from DI-to-DI and DD-to-DI, therefore * 1. convert DD specifications to CIEXYZ, then * 2. convert all in batches to the target DI format. * * Note that ConvertMixedColors will call WhiteAdjustProc * as necessary. */ /* * Convert only DD specifications in batches of contiguous formats * to CIEXYZ * * Since DD->CIEXYZ, ConvertMixedColors will apply WhiteAdjustProc * if required. */ retval = ConvertMixedColors(ccc, pColors_tmp, &clientWhitePt, nColors, XcmsCIEXYZFormat, (unsigned char)DD_FORMAT); /* * Because at this point we may have a mix of DI formats * (e.g., CIEXYZ, CIELuv) we must convert the specs to the * target DI format in batches of contiguous source formats. */ retval = ConvertMixedColors(ccc, pColors_tmp, &clientWhitePt, nColors, targetFormat, (unsigned char)DI_FORMAT); } else { /* * We need to convert from DI-to-DD and DD-to-DD, therefore * 1. convert DI specifications to CIEXYZ, then * 2. convert all to the DD target format. * * This allows white point adjustment and gamut compression * to be applied to all the color specifications in one * swoop if those functions do in fact modify the entire * group of color specifications. */ /* * Convert in batches to CIEXYZ * * If DD->CIEXYZ, ConvertMixedColors will apply WhiteAdjustProc * if required. */ if ((retval = ConvertMixedColors(ccc, pColors_tmp, &clientWhitePt, nColors, XcmsCIEXYZFormat, (unsigned char)(DI_FORMAT | DD_FORMAT))) == XcmsFailure) { goto Failure; } /* * Convert all specifications (now in CIEXYZ format) to * the target DD format. * Since CIEXYZ->DD, compression MAY take place therefore * we must pass pCompressed. * Note that WhiteAdjustProc must be used if necessary. */ if (callWhiteAdjustProc) { /* * White Point Adjustment * Client White Point to Screen White Point */ retval = (*ccc->whitePtAdjProc)(ccc, &clientWhitePt, ScreenWhitePointOfCCC(ccc), targetFormat, pColors_tmp, nColors, pCompressed); } else { retval = _XcmsDDConvertColors(ccc, pColors_tmp, nColors, targetFormat, pCompressed); } } } if (retval != XcmsFailure) { memcpy((char *)pColors_in_out, (char *)pColors_tmp, nColors * sizeof(XcmsColor)); } if (nColors > 1) { Xfree(pColors_tmp); } return(retval); Failure: if (nColors > 1) { Xfree(pColors_tmp); } return(XcmsFailure); } /* * NAME * XcmsRegFormatOfPrefix * * SYNOPSIS */ XcmsColorFormat _XcmsRegFormatOfPrefix( _Xconst char *prefix) /* * DESCRIPTION * Returns a color space ID associated with the specified * X Consortium registered color space prefix. * * RETURNS * The color space ID if found; * otherwise NULL. */ { XcmsRegColorSpaceEntry *pEntry = _XcmsRegColorSpaces; while (pEntry->prefix != NULL) { if (strcmp(prefix, pEntry->prefix) == 0) { return(pEntry->id); } pEntry++; } return(XcmsUndefinedFormat); } r Spaces are not * complementary, i.e., * for an i, 0 <= i < n elements * from_CIEXYZ[i] is not the inverse of to_CIEXYZ[i] * * Execute the flibX11-1.6.3/src/xcms/HVC.c000064401431060000012000000373561247741723500154210ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. TekColor is a * trademark of Tektronix, Inc. The term "TekHVC" designates a particular * color space that is the subject of U.S. Patent No. 4,985,853 (equivalent * foreign patents pending). Permission is hereby granted to use, copy, * modify, sell, and otherwise distribute this software and its * documentation for any purpose and without fee, provided that: * * 1. This copyright, permission, and disclaimer notice is reproduced in * all copies of this software and any modification thereof and in * supporting documentation; * 2. Any color-handling application which displays TekHVC color * cooordinates identifies these as TekHVC color coordinates in any * interface that displays these coordinates and in any associated * documentation; * 3. The term "TekHVC" is always used, and is only used, in association * with the mathematical derivations of the TekHVC Color Space, * including those provided in this file and any equivalent pathways and * mathematical derivations, regardless of digital (e.g., floating point * or integer) representation. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * NAME * TekHVC.c * * DESCRIPTION * This file contains routines that support the TekHVC * color space to include conversions to and from the CIE * XYZ space. * * DOCUMENTATION * "TekColor Color Management System, System Implementor's Manual" */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include #include #include "Cv.h" #include /* * DEFINES */ #define u_BR 0.7127 /* u' Best Red */ #define v_BR 0.4931 /* v' Best Red */ #define EPS 0.001 #define CHROMA_SCALE_FACTOR 7.50725 #ifndef PI # ifdef M_PI # define PI M_PI # else # define PI 3.14159265358979323846264338327950 # endif #endif #ifndef degrees # define degrees(r) ((XcmsFloat)(r) * 180.0 / PI) #endif /* degrees */ #ifndef radians # define radians(d) ((XcmsFloat)(d) * PI / 180.0) #endif /* radians */ /************************************************************************* * Note: The DBL_EPSILON for ANSI is 1e-5 so my checks need to take * this into account. If your DBL_EPSILON is different then * adjust this define. * * Also note that EPS is the error factor in the calculations * This may need to be the same as XMY_DBL_EPSILON in * some implementations. **************************************************************************/ #ifdef DBL_EPSILON # define XMY_DBL_EPSILON DBL_EPSILON #else # define XMY_DBL_EPSILON 0.00001 #endif /* * FORWARD DECLARATIONS */ static int TekHVC_ParseString(register char *spec, XcmsColor *pColor); static Status XcmsTekHVC_ValidSpec(XcmsColor *pColor); /* * LOCAL VARIABLES */ /* * NULL terminated list of functions applied to get from TekHVC to CIEXYZ */ static XcmsConversionProc Fl_TekHVC_to_CIEXYZ[] = { XcmsTekHVCToCIEuvY, XcmsCIEuvYToCIEXYZ, NULL }; /* * NULL terminated list of functions applied to get from CIEXYZ to TekHVC */ static XcmsConversionProc Fl_CIEXYZ_to_TekHVC[] = { XcmsCIEXYZToCIEuvY, XcmsCIEuvYToTekHVC, NULL }; /* * GLOBALS */ /* * TekHVC Color Space */ XcmsColorSpace XcmsTekHVCColorSpace = { _XcmsTekHVC_prefix, /* prefix */ XcmsTekHVCFormat, /* id */ TekHVC_ParseString, /* parseString */ Fl_TekHVC_to_CIEXYZ, /* to_CIEXYZ */ Fl_CIEXYZ_to_TekHVC, /* from_CIEXYZ */ 1 }; /************************************************************************ * * * PRIVATE ROUTINES * * * ************************************************************************/ /* * NAME * TekHVC_ParseString * * SYNOPSIS */ static int TekHVC_ParseString( register char *spec, XcmsColor *pColor) /* * DESCRIPTION * This routines takes a string and attempts to convert * it into a XcmsColor structure with XcmsTekHVCFormat. * The assumed TekHVC string syntax is: * TekHVC:// * Where H, V, and C are in string input format for floats * consisting of: * a. an optional sign * b. a string of numbers possibly containing a decimal point, * c. an optional exponent field containing an 'E' or 'e' * followed by a possibly signed integer string. * * RETURNS * XcmsFailure if invalid; * XcmsSuccess if valid. */ { int n; char *pchar; if ((pchar = strchr(spec, ':')) == NULL) { return(XcmsFailure); } n = (int)(pchar - spec); /* * Check for proper prefix. */ if (strncmp(spec, _XcmsTekHVC_prefix, n) != 0) { return(XcmsFailure); } /* * Attempt to parse the value portion. */ if (sscanf(spec + n + 1, "%lf/%lf/%lf", &pColor->spec.TekHVC.H, &pColor->spec.TekHVC.V, &pColor->spec.TekHVC.C) != 3) { char *s; /* Maybe failed due to locale */ int f; if ((s = strdup(spec))) { for (f = 0; s[f]; ++f) if (s[f] == '.') s[f] = ','; else if (s[f] == ',') s[f] = '.'; if (sscanf(s + n + 1, "%lf/%lf/%lf", &pColor->spec.TekHVC.H, &pColor->spec.TekHVC.V, &pColor->spec.TekHVC.C) != 3) { free(s); return(XcmsFailure); } free(s); } else return(XcmsFailure); } pColor->format = XcmsTekHVCFormat; pColor->pixel = 0; return(XcmsTekHVC_ValidSpec(pColor)); } /* * NAME * ThetaOffset -- compute thetaOffset * * SYNOPSIS */ static int ThetaOffset( XcmsColor *pWhitePt, XcmsFloat *pThetaOffset) /* * DESCRIPTION * This routine computes the theta offset of a given * white point, i.e. XcmsColor. It is used in both this * conversion and the printer conversions. * * RETURNS * 0 if failed. * 1 if succeeded with no modifications. * * ASSUMPTIONS * Assumes: * pWhitePt != NULL * pWhitePt->format == XcmsCIEuvYFormat * */ { double div, slopeuv; if (pWhitePt == NULL || pWhitePt->format != XcmsCIEuvYFormat) { return(0); } if ((div = u_BR - pWhitePt->spec.CIEuvY.u_prime) == 0.0) { return(0); } slopeuv = (v_BR - pWhitePt->spec.CIEuvY.v_prime) / div; *pThetaOffset = degrees(XCMS_ATAN(slopeuv)); return(1); } /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * XcmsTekHVC_ValidSpec() * * SYNOPSIS */ static int XcmsTekHVC_ValidSpec( XcmsColor *pColor) /* * DESCRIPTION * Checks if values in the color specification are valid. * Also brings hue into the range 0.0 <= Hue < 360.0 * * RETURNS * 0 if not valid. * 1 if valid. * */ { if (pColor->format != XcmsTekHVCFormat) { return(XcmsFailure); } if (pColor->spec.TekHVC.V < (0.0 - XMY_DBL_EPSILON) || pColor->spec.TekHVC.V > (100.0 + XMY_DBL_EPSILON) || (pColor->spec.TekHVC.C < 0.0 - XMY_DBL_EPSILON)) { return(XcmsFailure); } if (pColor->spec.TekHVC.V < 0.0) { pColor->spec.TekHVC.V = 0.0 + XMY_DBL_EPSILON; } else if (pColor->spec.TekHVC.V > 100.0) { pColor->spec.TekHVC.V = 100.0 - XMY_DBL_EPSILON; } if (pColor->spec.TekHVC.C < 0.0) { pColor->spec.TekHVC.C = 0.0 - XMY_DBL_EPSILON; } while (pColor->spec.TekHVC.H < 0.0) { pColor->spec.TekHVC.H += 360.0; } while (pColor->spec.TekHVC.H >= 360.0) { pColor->spec.TekHVC.H -= 360.0; } return(XcmsSuccess); } /* * NAME * XcmsTekHVCToCIEuvY - convert TekHVC to CIEuvY * * SYNOPSIS */ Status XcmsTekHVCToCIEuvY( XcmsCCC ccc, XcmsColor *pHVC_WhitePt, XcmsColor *pColors_in_out, unsigned int nColors) /* * DESCRIPTION * Transforms an array of TekHVC color specifications, given * their associated white point, to CIECIEuvY.color * specifications. * * RETURNS * XcmsFailure if failed, XcmsSuccess otherwise. * */ { XcmsFloat thetaOffset; XcmsColor *pColor = pColors_in_out; XcmsColor whitePt; XcmsCIEuvY uvY_return; XcmsFloat tempHue, u, v; XcmsFloat tmpVal; register int i; /* * Check arguments */ if (pHVC_WhitePt == NULL || pColors_in_out == NULL) { return(XcmsFailure); } /* * Make sure white point is in CIEuvY form */ if (pHVC_WhitePt->format != XcmsCIEuvYFormat) { /* Make copy of the white point because we're going to modify it */ memcpy((char *)&whitePt, (char *)pHVC_WhitePt, sizeof(XcmsColor)); if (!_XcmsDIConvertColors(ccc, &whitePt, (XcmsColor *)NULL, 1, XcmsCIEuvYFormat)) { return(XcmsFailure); } pHVC_WhitePt = &whitePt; } /* Make sure it is a white point, i.e., Y == 1.0 */ if (pHVC_WhitePt->spec.CIEuvY.Y != 1.0) { return(XcmsFailure); } /* Get the thetaOffset */ if (!ThetaOffset(pHVC_WhitePt, &thetaOffset)) { return(XcmsFailure); } /* * Now convert each XcmsColor structure to CIEXYZ form */ for (i = 0; i < nColors; i++, pColor++) { /* Make sure original format is TekHVC and is valid */ if (!XcmsTekHVC_ValidSpec(pColor)) { return(XcmsFailure); } if (pColor->spec.TekHVC.V == 0.0 || pColor->spec.TekHVC.V == 100.0) { if (pColor->spec.TekHVC.V == 100.0) { uvY_return.Y = 1.0; } else { /* pColor->spec.TekHVC.V == 0.0 */ uvY_return.Y = 0.0; } uvY_return.u_prime = pHVC_WhitePt->spec.CIEuvY.u_prime; uvY_return.v_prime = pHVC_WhitePt->spec.CIEuvY.v_prime; } else { /* Find the hue based on the white point offset */ tempHue = pColor->spec.TekHVC.H + thetaOffset; while (tempHue < 0.0) { tempHue += 360.0; } while (tempHue >= 360.0) { tempHue -= 360.0; } tempHue = radians(tempHue); /* Calculate u'v' for the obtained hue */ u = (XcmsFloat) ((XCMS_COS(tempHue) * pColor->spec.TekHVC.C) / (pColor->spec.TekHVC.V * (double)CHROMA_SCALE_FACTOR)); v = (XcmsFloat) ((XCMS_SIN(tempHue) * pColor->spec.TekHVC.C) / (pColor->spec.TekHVC.V * (double)CHROMA_SCALE_FACTOR)); /* Based on the white point get the offset from best red */ uvY_return.u_prime = u + pHVC_WhitePt->spec.CIEuvY.u_prime; uvY_return.v_prime = v + pHVC_WhitePt->spec.CIEuvY.v_prime; /* Calculate the Y value based on the L* = V. */ if (pColor->spec.TekHVC.V < 7.99953624) { uvY_return.Y = pColor->spec.TekHVC.V / 903.29; } else { tmpVal = (pColor->spec.TekHVC.V + 16.0) / 116.0; uvY_return.Y = tmpVal * tmpVal * tmpVal; /* tmpVal ** 3 */ } } /* Copy result to pColor */ memcpy((char *)&pColor->spec, (char *)&uvY_return, sizeof(XcmsCIEuvY)); /* Identify that the format is now CIEuvY */ pColor->format = XcmsCIEuvYFormat; } return(XcmsSuccess); } /* * NAME * XcmsCIEuvYToTekHVC - convert CIEuvY to TekHVC * * SYNOPSIS */ Status XcmsCIEuvYToTekHVC( XcmsCCC ccc, XcmsColor *pHVC_WhitePt, XcmsColor *pColors_in_out, unsigned int nColors) /* * DESCRIPTION * Transforms an array of CIECIEuvY.color specifications, given * their assiciated white point, to TekHVC specifications. * * RETURNS * XcmsFailure if failed, XcmsSuccess otherwise. * */ { XcmsFloat theta, L2, u, v, nThetaLow, nThetaHigh; XcmsFloat thetaOffset; XcmsColor *pColor = pColors_in_out; XcmsColor whitePt; XcmsTekHVC HVC_return; register int i; /* * Check arguments */ if (pHVC_WhitePt == NULL || pColors_in_out == NULL) { return(XcmsFailure); } /* * Make sure white point is in CIEuvY form */ if (pHVC_WhitePt->format != XcmsCIEuvYFormat) { /* Make copy of the white point because we're going to modify it */ memcpy((char *)&whitePt, (char *)pHVC_WhitePt, sizeof(XcmsColor)); if (!_XcmsDIConvertColors(ccc, &whitePt, (XcmsColor *)NULL, 1, XcmsCIEuvYFormat)) { return(XcmsFailure); } pHVC_WhitePt = &whitePt; } /* Make sure it is a white point, i.e., Y == 1.0 */ if (pHVC_WhitePt->spec.CIEuvY.Y != 1.0) { return(XcmsFailure); } if (!ThetaOffset(pHVC_WhitePt, &thetaOffset)) { return(XcmsFailure); } /* * Now convert each XcmsColor structure to CIEXYZ form */ for (i = 0; i < nColors; i++, pColor++) { if (!_XcmsCIEuvY_ValidSpec(pColor)) { return(XcmsFailure); } /* Use the white point offset to determine HVC */ u = pColor->spec.CIEuvY.u_prime - pHVC_WhitePt->spec.CIEuvY.u_prime; v = pColor->spec.CIEuvY.v_prime - pHVC_WhitePt->spec.CIEuvY.v_prime; /* Calculate the offset */ if (u == 0.0) { theta = 0.0; } else { theta = v / u; theta = (XcmsFloat) XCMS_ATAN((double)theta); theta = degrees(theta); } nThetaLow = 0.0; nThetaHigh = 360.0; if (u > 0.0 && v > 0.0) { nThetaLow = 0.0; nThetaHigh = 90.0; } else if (u < 0.0 && v > 0.0) { nThetaLow = 90.0; nThetaHigh = 180.0; } else if (u < 0.0 && v < 0.0) { nThetaLow = 180.0; nThetaHigh = 270.0; } else if (u > 0.0 && v < 0.0) { nThetaLow = 270.0; nThetaHigh = 360.0; } while (theta < nThetaLow) { theta += 90.0; } while (theta >= nThetaHigh) { theta -= 90.0; } /* calculate the L value from the given Y */ L2 = (pColor->spec.CIEuvY.Y < 0.008856) ? (pColor->spec.CIEuvY.Y * 903.29) : ((XcmsFloat)(XCMS_CUBEROOT(pColor->spec.CIEuvY.Y) * 116.0) - 16.0); HVC_return.C = L2 * CHROMA_SCALE_FACTOR * XCMS_SQRT((double) ((u * u) + (v * v))); if (HVC_return.C < 0.0) { theta = 0.0; } HVC_return.V = L2; HVC_return.H = theta - thetaOffset; /* * If this is within the error margin let some other routine later * in the chain worry about the slop in the calculations. */ while (HVC_return.H < -EPS) { HVC_return.H += 360.0; } while (HVC_return.H >= 360.0 + EPS) { HVC_return.H -= 360.0; } /* Copy result to pColor */ memcpy((char *)&pColor->spec, (char *)&HVC_return, sizeof(XcmsTekHVC)); /* Identify that the format is now CIEuvY */ pColor->format = XcmsTekHVCFormat; } return(XcmsSuccess); } /* * NAME * _XcmsTekHVC_CheckModify * * SYNOPSIS */ int _XcmsTekHVC_CheckModify( XcmsColor *pColor) /* * DESCRIPTION * Checks if values in the color specification are valid. * If they are not it modifies the values. * Also brings hue into the range 0.0 <= Hue < 360.0 * * RETURNS * 0 if not valid. * 1 if valid. * */ { int n; /* For now only use the TekHVC numbers as inputs */ if (pColor->format != XcmsTekHVCFormat) { return(0); } if (pColor->spec.TekHVC.V < 0.0) { pColor->spec.TekHVC.V = 0.0 + XMY_DBL_EPSILON; } else if (pColor->spec.TekHVC.V > 100.0) { pColor->spec.TekHVC.V = 100.0 - XMY_DBL_EPSILON; } if (pColor->spec.TekHVC.C < 0.0) { pColor->spec.TekHVC.C = 0.0 - XMY_DBL_EPSILON; } if (pColor->spec.TekHVC.H < 0.0) { n = -pColor->spec.TekHVC.H / 360.0; pColor->spec.TekHVC.H += (n + 1) * 360.0; if (pColor->spec.TekHVC.H >= 360.0) pColor->spec.TekHVC.H -= 360.0; } else if (pColor->spec.TekHVC.H >= 360.0) { n = pColor->spec.TekHVC.H / 360.0; pColor->spec.TekHVC.H -= n * 360.0; } return(1); } if (s[f] == '.') s[f] = ','; else if (s[f] == ',') s[f] = '.'; if (sscanf(s + n + 1, "%lf/%lf/%lf", &pColor->spec.TekHVC.H, &pColor->spec.TekHVC.V, &pColor->spec.TekHVC.C) != 3) { libX11-1.6.3/src/xcms/LuvGcC.c000064401431060000012000000073341247741723500161150ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of XCMS based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * NAME * CIELuvGcC.c * * DESCRIPTION * Source for XcmsCIELuvClipuv() gamut compression routine. * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * XcmsCIELuvClipuv - Reduce the chroma for a hue and L* * * SYNOPSIS */ /* ARGSUSED */ Status XcmsCIELuvClipuv ( XcmsCCC ccc, XcmsColor *pColors_in_out, unsigned int nColors, unsigned int i, Bool *pCompressed) /* * DESCRIPTION * Reduce the Chroma for a specific hue and chroma to * to bring the given color into the gamut of the * specified device. As required of gamut compression * functions, this routine returns pColor_in_out * in XcmsCIEXYZFormat on successful completion. * * Since this routine works with the L* within * pColor_in_out intermediate results may be returned * even though it may be invalid. * * RETURNS * XcmsFailure - Failure * XcmsSuccess - Succeeded * */ { Status retval; XcmsColor *pColor; /* * Color specification passed as input can be assumed to: * 1. Be in XcmsCIEXYZFormat * 2. Already be white point adjusted for the Screen White Point. * This means that the white point now associated with this * color spec is the Screen White Point (even if the * ccc->clientWhitePt differs). */ pColor = pColors_in_out + i; if (ccc->visual->class < PseudoColor) { /* * GRAY ! */ _XcmsDIConvertColors(ccc, pColor, ScreenWhitePointOfCCC(ccc), 1, XcmsCIELuvFormat); _XcmsDIConvertColors(ccc, pColor, ScreenWhitePointOfCCC(ccc), 1, XcmsCIEXYZFormat); if (pCompressed) { *(pCompressed + i) = True; } return(XcmsSuccess); } else { if (pColor->format != XcmsCIELuvFormat) { if (_XcmsDIConvertColors(ccc, pColor, &ccc->pPerScrnInfo->screenWhitePt, 1, XcmsCIELuvFormat) == XcmsFailure) { return(XcmsFailure); } } if (XcmsCIELuvQueryMaxC(ccc, degrees(XCMS_CIELUV_PMETRIC_HUE(pColor->spec.CIELuv.u_star, pColor->spec.CIELuv.v_star)), pColor->spec.CIELuv.L_star, pColor) == XcmsFailure) { return(XcmsFailure); } retval = _XcmsDIConvertColors(ccc, pColor, &ccc->pPerScrnInfo->screenWhitePt, 1, XcmsCIEXYZFormat); if (retval != XcmsFailure && pCompressed != NULL) { *(pCompressed + i) = True; } return(retval); } } libX11-1.6.3/src/xcms/HVCGcV.c000064401431060000012000000154661247741723500160170ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. TekColor is a * trademark of Tektronix, Inc. The term "TekHVC" designates a particular * color space that is the subject of U.S. Patent No. 4,985,853 (equivalent * foreign patents pending). Permission is hereby granted to use, copy, * modify, sell, and otherwise distribute this software and its * documentation for any purpose and without fee, provided that: * * 1. This copyright, permission, and disclaimer notice is reproduced in * all copies of this software and any modification thereof and in * supporting documentation; * 2. Any color-handling application which displays TekHVC color * cooordinates identifies these as TekHVC color coordinates in any * interface that displays these coordinates and in any associated * documentation; * 3. The term "TekHVC" is always used, and is only used, in association * with the mathematical derivations of the TekHVC Color Space, * including those provided in this file and any equivalent pathways and * mathematical derivations, regardless of digital (e.g., floating point * or integer) representation. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * NAME * TekHVCGcV.c * * DESCRIPTION * Source for XcmsTekHVCClipV() gamut compression routine. * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * XcmsTekHVCClipV - Return the closest value * * SYNOPSIS */ /* ARGSUSED */ Status XcmsTekHVCClipV ( XcmsCCC ccc, XcmsColor *pColors_in_out, unsigned int nColors, unsigned int i, Bool *pCompressed) /* * DESCRIPTION * Return the closest value for a specific hue and chroma. * This routine takes any color as input and outputs * a CIE XYZ color. * * Since this routine works with the value within * pColor_in_out intermediate results may be returned * even though it may be invalid. * * RETURNS * XcmsFailure - Failure * XcmsSuccess - Succeeded * */ { XcmsColor *pColor; XcmsColor hvc_max; XcmsCCCRec myCCC; Status retval; /* * Insure TekHVC installed */ if (XcmsAddColorSpace(&XcmsTekHVCColorSpace) == XcmsFailure) { return(XcmsFailure); } /* Use my own CCC */ memcpy ((char *)&myCCC, (char *)ccc, sizeof(XcmsCCCRec)); myCCC.clientWhitePt.format = XcmsUndefinedFormat;/* Inherit Screen WP */ myCCC.gamutCompProc = (XcmsCompressionProc)NULL;/* no gamut compression */ /* * Color specification passed as input can be assumed to: * 1. Be in XcmsCIEXYZFormat * 2. Already be white point adjusted for the Screen White Point. * This means that the white point now associated with this * color spec is the Screen White Point (even if the * ccc->clientWhitePt differs). */ pColor = pColors_in_out + i; if (ccc->visual->class < StaticColor && FunctionSetOfCCC(ccc) != (XPointer) &XcmsLinearRGBFunctionSet) { /* * GRAY ! */ return(XcmsFailure); } else { /* Convert from CIEXYZ to TekHVC format */ if (_XcmsDIConvertColors(&myCCC, pColor, &myCCC.pPerScrnInfo->screenWhitePt, 1, XcmsTekHVCFormat) == XcmsFailure) { return(XcmsFailure); } /* check to make sure we have a valid TekHVC number */ if (!_XcmsTekHVC_CheckModify (pColor)) { return (XcmsFailure); } /* Step 1: compute the maximum value and chroma for this hue. */ /* This copy may be overkill but it preserves the pixel etc. */ memcpy((char *)&hvc_max, (char *)pColor, sizeof(XcmsColor)); if (_XcmsTekHVCQueryMaxVCRGB (&myCCC, hvc_max.spec.TekHVC.H, &hvc_max, (XcmsRGBi *)NULL) == XcmsFailure) { return (XcmsFailure); } /* Now check and return the appropriate value */ if (pColor->spec.TekHVC.C == hvc_max.spec.TekHVC.C) { /* When the chroma input is equal to the maximum chroma */ /* merely return the value for that chroma. */ pColor->spec.TekHVC.V = hvc_max.spec.TekHVC.V; if (!_XcmsTekHVC_CheckModify (pColor)) { return (XcmsFailure); } retval = _XcmsDIConvertColors(&myCCC, pColor, &myCCC.pPerScrnInfo->screenWhitePt, 1, XcmsCIEXYZFormat); } else if (pColor->spec.TekHVC.C > hvc_max.spec.TekHVC.C) { /* When the chroma input is greater than the maximum chroma */ /* merely return the value and chroma for the given hue. */ pColor->spec.TekHVC.C = hvc_max.spec.TekHVC.C; pColor->spec.TekHVC.V = hvc_max.spec.TekHVC.V; return (XcmsFailure); } else if (pColor->spec.TekHVC.V < hvc_max.spec.TekHVC.V) { /* When the value input is less than the maximum value point */ /* compute the intersection of the line from 0,0 to max_V, max_C */ /* using the chroma input. */ pColor->spec.TekHVC.V = pColor->spec.TekHVC.C * hvc_max.spec.TekHVC.V / hvc_max.spec.TekHVC.C; if (pColor->spec.TekHVC.V >= hvc_max.spec.TekHVC.V) { pColor->spec.TekHVC.C = hvc_max.spec.TekHVC.C; pColor->spec.TekHVC.V = hvc_max.spec.TekHVC.V; } if (!_XcmsTekHVC_CheckModify (pColor)) { return (XcmsFailure); } retval = _XcmsDIConvertColors(&myCCC, pColor, &myCCC.pPerScrnInfo->screenWhitePt, 1, XcmsCIEXYZFormat); } else { /* When the value input is greater than the maximum value point */ /* use HvcMaxValue to find the maximum value for the given chroma. */ if (pColor->format != XcmsTekHVCFormat) { if (_XcmsDIConvertColors(ccc, pColor, &ccc->pPerScrnInfo->screenWhitePt, 1, XcmsCIEXYZFormat) == XcmsFailure) { return(XcmsFailure); } } if (XcmsTekHVCQueryMaxV(&myCCC, pColor->spec.TekHVC.H, pColor->spec.TekHVC.C, pColor) == XcmsFailure) { return (XcmsFailure); } retval = _XcmsDIConvertColors(&myCCC, pColor, &myCCC.pPerScrnInfo->screenWhitePt, 1, XcmsCIEXYZFormat); } if (retval != XcmsFailure && pCompressed != NULL) { *(pCompressed + i) = True; } return(retval); } } libX11-1.6.3/src/xcms/Xcmsint.h000064401431060000012000000166611247741723500164270ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * DESCRIPTION * Private include file for Color Management System. * (i.e., for API internal use only) * */ #ifndef _XCMSINT_H_ #define _XCMSINT_H_ #include /* * DEFINES */ /* * Private Status Value */ #define _XCMS_NEWNAME -1 /* * Color Space ID's are of XcmsColorFormat type. * * bit 31 * 0 == Device-Independent * 1 == Device-Dependent * * bit 30: * 0 == Registered with X Consortium * 1 == Unregistered */ #define XCMS_DD_ID(id) ((id) & (XcmsColorFormat)0x80000000) #define XCMS_DI_ID(id) (!((id) & (XcmsColorFormat)0x80000000)) #define XCMS_UNREG_ID(id) ((id) & (XcmsColorFormat)0x40000000) #define XCMS_REG_ID(id) (!((id) & (XcmsColorFormat)0x40000000)) #define XCMS_FIRST_REG_DI_ID (XcmsColorFormat)0x00000001 #define XCMS_FIRST_UNREG_DI_ID (XcmsColorFormat)0x40000000 #define XCMS_FIRST_REG_DD_ID (XcmsColorFormat)0x80000000 #define XCMS_FIRST_UNREG_DD_ID (XcmsColorFormat)0xc0000000 /* * TYPEDEFS */ /* * Structure for caching Colormap info. * This is provided for the Xlib modifications to: * XAllocNamedColor() * XLookupColor() * XParseColor() * XStoreNamedColor() */ typedef struct _XcmsCmapRec { Colormap cmapID; Display *dpy; Window windowID; Visual *visual; struct _XcmsCCC *ccc; struct _XcmsCmapRec *pNext; } XcmsCmapRec; /* * Intensity Record (i.e., value / intensity tuple) */ typedef struct _IntensityRec { unsigned short value; XcmsFloat intensity; } IntensityRec; /* * Intensity Table */ typedef struct _IntensityTbl { IntensityRec *pBase; unsigned int nEntries; } IntensityTbl; /* * Structure for storing per-Visual Intensity Tables (aka gamma maps). */ typedef struct _XcmsIntensityMap { VisualID visualID; XPointer screenData; /* pointer to corresponding Screen Color*/ /* Characterization Data */ void (*pFreeScreenData)(XPointer pScreenDataTemp); /* Function that frees a Screen */ /* structure. */ struct _XcmsIntensityMap *pNext; } XcmsIntensityMap; /* * Structure for storing "registered" color space prefix/ID */ typedef struct _XcmsRegColorSpaceEntry { const char *prefix; /* Color Space prefix (e.g., "CIEXYZ:") */ XcmsColorFormat id; /* Color Space ID (e.g., XcmsCIEXYZFormat) */ } XcmsRegColorSpaceEntry; /* * Xcms Per Display (i.e. connection) related data */ typedef struct _XcmsPerDpyInfo { XcmsCCC paDefaultCCC; /* based on default visual of screen */ /* * Pointer to an array of XcmsCCC structures, one for * each screen. */ XcmsCmapRec *pClientCmaps; /* Pointer to linked list of XcmsCmapRec's */ } XcmsPerDpyInfo, *XcmsPerDpyInfoPtr; /* * DEFINES */ #define XDCCC_NUMBER 0x8000000L /* 2**27 per XDCCC */ #ifdef GRAY #define XDCCC_SCREENWHITEPT_ATOM_NAME "XDCCC_GRAY_SCREENWHITEPOINT" #define XDCCC_GRAY_CORRECT_ATOM_NAME "XDCCC_GRAY_CORRECTION" #endif /* GRAY */ #ifndef _ConversionValues typedef struct _ConversionValues { IntensityTbl IntensityTbl; } ConversionValues; #endif #ifdef GRAY typedef struct { IntensityTbl *IntensityTbl; } GRAY_SCCData; #endif /* GRAY */ /* * DEFINES */ #define XDCCC_MATRIX_ATOM_NAME "XDCCC_LINEAR_RGB_MATRICES" #define XDCCC_CORRECT_ATOM_NAME "XDCCC_LINEAR_RGB_CORRECTION" typedef struct { XcmsFloat XYZtoRGBmatrix[3][3]; XcmsFloat RGBtoXYZmatrix[3][3]; IntensityTbl *pRedTbl; IntensityTbl *pGreenTbl; IntensityTbl *pBlueTbl; } LINEAR_RGB_SCCData; /* function prototypes */ extern XcmsCmapRec * _XcmsAddCmapRec( Display *dpy, Colormap cmap, Window windowID, Visual *visual); extern void _XcmsRGB_to_XColor( XcmsColor *pColors, XColor *pXColors, unsigned int nColors); extern Status _XcmsResolveColorString ( XcmsCCC ccc, const char **color_string, XcmsColor *pColor_exact_return, XcmsColorFormat result_format); extern void _XUnresolveColor( XcmsCCC ccc, XColor *pXColor); /* * DESCRIPTION * Include file for defining the math macros used in the * XCMS source. Instead of using math library routines * directly, XCMS uses macros so that based on the * definitions here, vendors and sites can specify exactly * what routine will be called (those from libm.a or their * custom routines). If not defined to math library routines * (e.g., sqrt in libm.a), then the client is not forced to * be linked with -lm. */ #define XCMS_ATAN(x) _XcmsArcTangent(x) #define XCMS_COS(x) _XcmsCosine(x) #define XCMS_CUBEROOT(x) _XcmsCubeRoot(x) #define XCMS_FABS(x) ((x) < 0.0 ? -(x) : (x)) #define XCMS_SIN(x) _XcmsSine(x) #define XCMS_SQRT(x) _XcmsSquareRoot(x) #define XCMS_TAN(x) (XCMS_SIN(x) / XCMS_COS(x)) double _XcmsArcTangent(double a); double _XcmsCosine(double a); double _XcmsCubeRoot(double a); double _XcmsSine(double a); double _XcmsSquareRoot(double a); /* * DEFINES FOR GAMUT COMPRESSION AND QUERY ROUTINES */ #ifndef PI # ifdef M_PI # define PI M_PI # else # define PI 3.14159265358979323846264338327950 # endif /* M_PI */ #endif /* PI */ #ifndef degrees # define degrees(r) ((XcmsFloat)(r) * 180.0 / PI) #endif /* degrees */ #ifndef radians # define radians(d) ((XcmsFloat)(d) * PI / 180.0) #endif /* radians */ #define XCMS_CIEUSTAROFHUE(h,c) \ ((XCMS_COS((h)) == 0.0) ? (XcmsFloat)0.0 : (XcmsFloat) \ ((XcmsFloat)(c) / (XcmsFloat)XCMS_SQRT((XCMS_TAN(h) * XCMS_TAN(h)) + \ (XcmsFloat)1.0))) #define XCMS_CIEVSTAROFHUE(h,c) \ ((XCMS_COS((h)) == 0.0) ? (XcmsFloat)0.0 : (XcmsFloat) \ ((XcmsFloat)(c) / (XcmsFloat)XCMS_SQRT(((XcmsFloat)1.0 / \ (XcmsFloat)(XCMS_TAN(h) * XCMS_TAN(h))) + (XcmsFloat)1.0))) /* this hue is returned in radians */ #define XCMS_CIELUV_PMETRIC_HUE(u,v) \ (((u) != 0.0) ? XCMS_ATAN( (v) / (u)) : ((v >= 0.0) ? PI / 2 : -(PI / 2))) #define XCMS_CIELUV_PMETRIC_CHROMA(u,v) XCMS_SQRT(((u)*(u)) + ((v)*(v))) #define XCMS_CIEASTAROFHUE(h,c) XCMS_CIEUSTAROFHUE((h), (c)) #define XCMS_CIEBSTAROFHUE(h,c) XCMS_CIEVSTAROFHUE((h), (c)) #define XCMS_CIELAB_PMETRIC_HUE(a,b) XCMS_CIELUV_PMETRIC_HUE((a), (b)) #define XCMS_CIELAB_PMETRIC_CHROMA(a,b) XCMS_CIELUV_PMETRIC_CHROMA((a), (b)) #endif /* _XCMSINT_H_ */ *pBase; unsigned int nEntries; } IntensityTbl; /* * Structure forlibX11-1.6.3/src/xcms/cmsColNm.c000064401431060000012000000574501247741723500165110ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * NAME * XcmsColNm.c * * DESCRIPTION * Source for _XcmsLookupColorName(). * * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include #include #include #include #include #define XK_LATIN1 #include #include "Cv.h" /* forwards/locals */ static Status LoadColornameDB(void); /* * LOCAL DEFINES * #define declarations local to this package. */ #ifndef XCMSDB #define XCMSDB XCMSDIR "/Xcms.txt" #endif #ifndef isgraph # define isgraph(c) (isprint((c)) && !isspace((c))) #endif #ifndef XCMSDB_MAXLINELEN # define XCMSDB_MAXLINELEN 256 #endif #define FORMAT_VERSION "0.1" #define START_TOKEN "XCMS_COLORDB_START" #define END_TOKEN "XCMS_COLORDB_END" #define DELIM_CHAR '\t' #define NOT_VISITED 0x0 #define VISITED 0x1 #define CYCLE 0xFFFF #define XcmsDbInitNone -1 #define XcmsDbInitFailure 0 #define XcmsDbInitSuccess 1 /* * LOCAL TYPEDEFS */ typedef struct _XcmsPair { const char *first; const char *second; int flag; } XcmsPair; /* * LOCAL VARIABLES */ static int XcmsColorDbState = XcmsDbInitNone; static int nEntries; static char *strings; static XcmsPair *pairs; static const char whitePtStr[] = "WhitePoint"; /************************************************************************ * * * PRIVATE ROUTINES * * * ************************************************************************/ /* * NAME * _XcmsColorSpaceOfString * * SYNOPSIS */ static XcmsColorSpace * _XcmsColorSpaceOfString( XcmsCCC ccc, const char *color_string) /* * DESCRIPTION * Returns a pointer to the color space structure * (XcmsColorSpace) associated with the specified color string. * * RETURNS * Pointer to matching XcmsColorSpace structure if found; * otherwise NULL. * * CAVEATS * */ { XcmsColorSpace **papColorSpaces; int n; char *pchar; if ((pchar = strchr(color_string, ':')) == NULL) { return(XcmsFailure); } n = (int)(pchar - color_string); if (ccc == NULL) { return(NULL); } /* * First try Device-Independent color spaces */ papColorSpaces = _XcmsDIColorSpaces; if (papColorSpaces != NULL) { while (*papColorSpaces != NULL) { if (strncmp((*papColorSpaces)->prefix, color_string, n) == 0 && !((*papColorSpaces)->prefix)[n]) { return(*papColorSpaces); } papColorSpaces++; } } /* * Next try Device-Dependent color spaces */ papColorSpaces = ((XcmsFunctionSet *)ccc->pPerScrnInfo->functionSet)->DDColorSpaces; if (papColorSpaces != NULL) { while (*papColorSpaces != NULL) { if (strncmp((*papColorSpaces)->prefix, color_string, n) == 0 && !((*papColorSpaces)->prefix)[n]) { return(*papColorSpaces); } papColorSpaces++; } } return(NULL); } /* * NAME * _XcmsParseColorString * * SYNOPSIS */ static int _XcmsParseColorString( XcmsCCC ccc, const char *color_string, XcmsColor *pColor) /* * DESCRIPTION * Assuming color_string contains a numerical string color * specification, attempts to parse a string into an * XcmsColor structure. * * RETURNS * 0 if failed; otherwise non-zero. * * CAVEATS * A color string containing a numerical color specification * must be in ISO Latin-1 encoding! */ { XcmsColorSpace *pColorSpace; char string_buf[64]; char *string_lowered; int len; int res; if (ccc == NULL) { return(0); } /* * While copying color_string to string_lowered, convert to lowercase */ if ((len = strlen(color_string)) >= sizeof(string_buf)) { string_lowered = Xmalloc(len+1); } else { string_lowered = string_buf; } _XcmsCopyISOLatin1Lowered(string_lowered, color_string); if (*string_lowered == '#') { if ((pColorSpace = _XcmsColorSpaceOfString(ccc, "rgb:")) != NULL) { res = (*pColorSpace->parseString)(string_lowered, pColor); if (len >= sizeof(string_buf)) Xfree(string_lowered); return res; } } if ((pColorSpace = _XcmsColorSpaceOfString(ccc, string_lowered)) != NULL) { res = (*pColorSpace->parseString)(string_lowered, pColor); if (len >= sizeof(string_buf)) Xfree(string_lowered); return res; } if (len >= sizeof(string_buf)) Xfree(string_lowered); return(0); } /* * NAME * FirstCmp - Compare color names of pair recs * * SYNOPSIS */ static int FirstCmp(const void *p1, const void *p2) /* * DESCRIPTION * Compares the color names of XcmsColorTuples. * This routine is public to allow access from qsort???. * * RETURNS * 0 if equal; * < 0 if first precedes second, * > 0 if first succeeds second. * */ { return(strcmp(((const XcmsPair *)p1)->first, ((const XcmsPair *)p2)->first)); } /* * NAME * stringSectionSize - determine memory needed for strings * * SYNOPSIS */ static void SetNoVisit(void) /* * DESCRIPTION * * RETURNS * void * */ { int i; XcmsPair *pair = pairs; for (i = 0; i < nEntries; i++, pair++) { if (pair->flag != CYCLE) { pair->flag = NOT_VISITED; } } } /* * NAME * field2 - extract two fields * * SYNOPSIS */ static int field2( char *pBuf, char delim, /* in: field delimiter */ char **p1, /* in/out: pointer to pointer to field 1 */ char **p2) /* in/out: pointer to pointer to field 2 */ /* * DESCRIPTION * Extracts two fields from a "record". * * RETURNS * XcmsSuccess if succeeded, otherwise XcmsFailure. * */ { *p1 = *p2 = NULL; /* Find Field 1 */ while (!isgraph(*pBuf)) { if ((*pBuf == '\n') || (*pBuf == '\0')) { return(XcmsFailure); } if (isspace(*pBuf) || (*pBuf == delim)) { pBuf++; } } *p1 = pBuf; /* Find end of Field 2 */ while (isprint(*pBuf) && (*pBuf != delim)) { pBuf++; } if ((*pBuf == '\n') || (*pBuf == '\0')) { return(XcmsFailure); } if ((*pBuf == ' ') || (*pBuf == delim)) { *pBuf++ = '\0'; /* stuff end of string character */ } else { return(XcmsFailure); } /* Find Field 2 */ while (!isgraph(*pBuf)) { if ((*pBuf == '\n') || (*pBuf == '\0')) { return(XcmsFailure); } if (isspace(*pBuf) || (*pBuf == delim)) { pBuf++; } } *p2 = pBuf; /* Find end of Field 2 */ while (isprint(*pBuf) && (*pBuf != delim)) { pBuf++; } if (*pBuf != '\0') { *pBuf = '\0'; /* stuff end of string character */ } return(XcmsSuccess); } /* * NAME * _XcmsLookupColorName - Lookup DB entry for a color name * * SYNOPSIS */ static Status _XcmsLookupColorName( XcmsCCC ccc, const char **name, XcmsColor *pColor) /* * DESCRIPTION * Searches for an entry in the Device-Independent Color Name * Database for the specified string. * * RETURNS * XcmsFailure if failed to find a matching entry in * the database. * XcmsSuccess if succeeded in converting color name to * XcmsColor. * _XCMS_NEWNAME if succeeded in converting color string (which * is a color name to yet another color name. Note * that the new name is passed back via 'name'. */ { Status retval = 0; char name_lowered_64[64]; char *name_lowered; register int i, j, left, right; int len; const char *tmpName; XcmsPair *pair = NULL; /* * Check state of Database: * XcmsDbInitNone * XcmsDbInitSuccess * XcmsDbInitFailure */ if (XcmsColorDbState == XcmsDbInitFailure) { return(XcmsFailure); } if (XcmsColorDbState == XcmsDbInitNone) { if (!LoadColornameDB()) { return(XcmsFailure); } } SetNoVisit(); /* * While copying name to name_lowered, convert to lowercase */ tmpName = *name; Retry: if ((len = strlen(tmpName)) > 63) { name_lowered = Xmalloc(len+1); } else { name_lowered = name_lowered_64; } _XcmsCopyISOLatin1Lowered(name_lowered, tmpName); /* * Now, remove spaces. */ for (i = 0, j = 0; j < len; j++) { if (!isspace(name_lowered[j])) { name_lowered[i++] = name_lowered[j]; } } name_lowered[i] = '\0'; left = 0; right = nEntries - 1; while (left <= right) { i = (left + right) >> 1; pair = &pairs[i]; j = strcmp(name_lowered, pair->first); if (j < 0) right = i - 1; else if (j > 0) left = i + 1; else { break; } } if (len > 63) Xfree(name_lowered); if (left > right) { if (retval == 2) { if (*name != tmpName) { *name = tmpName; } return(_XCMS_NEWNAME); } return(XcmsFailure); } if (pair->flag == CYCLE) { return(XcmsFailure); } if (pair->flag == VISITED) { pair->flag = CYCLE; return(XcmsFailure); } if (_XcmsParseColorString(ccc, pair->second, pColor) == XcmsSuccess) { /* f2 contains a numerical string specification */ return(XcmsSuccess); } else { /* f2 does not contain a numerical string specification */ tmpName = pair->second; pair->flag = VISITED; retval = 2; goto Retry; } } /* * NAME * RemoveSpaces * * SYNOPSIS */ static int RemoveSpaces( char *pString) /* * DESCRIPTION * Removes spaces from string. * * RETURNS * Void * */ { int i, count = 0; char *cptr; /* REMOVE SPACES */ cptr = pString; for (i = strlen(pString); i; i--, cptr++) { if (!isspace(*cptr)) { *pString++ = *cptr; count++; } } *pString = '\0'; return(count); } /* * NAME * stringSectionSize - determine memory needed for strings * * SYNOPSIS */ static int stringSectionSize( FILE *stream, int *pNumEntries, int *pSectionSize) /* * DESCRIPTION * Determines the amount of memory required to store the * color name strings and also the number of strings. * * RETURNS * XcmsSuccess if succeeded, otherwise XcmsFailure. * */ { char buf[XCMSDB_MAXLINELEN]; char token[XCMSDB_MAXLINELEN]; char token2[XCMSDB_MAXLINELEN]; char *pBuf; char *f1; char *f2; size_t i; unsigned int numEntries = 0; unsigned int sectionSize = 0; *pNumEntries = 0; *pSectionSize = 0; /* * Advance to START_TOKEN * Anything before is just considered as comments. */ while((pBuf = fgets(buf, XCMSDB_MAXLINELEN, stream)) != NULL) { if ((sscanf(buf, "%s %s", token, token2)) && (strcmp(token, START_TOKEN) == 0)) { if (strcmp(token2, FORMAT_VERSION) != 0) { /* text file not in the right format */ return(XcmsFailure); } break; } /* else it was just a blank line or comment */ } if (pBuf == NULL) { return(XcmsFailure); } while((fgets(buf, XCMSDB_MAXLINELEN, stream)) != NULL) { if ((sscanf(buf, "%s", token)) && (strcmp(token, END_TOKEN) == 0)) { break; } if (field2(buf, DELIM_CHAR, &f1, &f2) != XcmsSuccess) { return(XcmsFailure); } numEntries++; if (numEntries >= INT_MAX) return(XcmsFailure); i = strlen(f1); if (i >= INT_MAX - sectionSize) return(XcmsFailure); sectionSize += i + 1; for (; i; i--, f1++) { /* REMOVE SPACES FROM COUNT */ if (isspace(*f1)) { sectionSize--; } } i = strlen(f2); if (i >= INT_MAX - sectionSize) return(XcmsFailure); sectionSize += i + 1; for (; i; i--, f2++) { /* REMOVE SPACES FROM COUNT */ if (isspace(*f2)) { sectionSize--; } } } *pNumEntries = (int) numEntries; *pSectionSize = (int) sectionSize; return(XcmsSuccess); } /* * NAME * ReadColornameDB - Read the Color Name Database * * SYNOPSIS */ static Status ReadColornameDB( FILE *stream, XcmsPair *pRec, char *pString) /* * DESCRIPTION * Loads the Color Name Database from a text file. * * RETURNS * XcmsSuccess if succeeded, otherwise XcmsFailure. * */ { char buf[XCMSDB_MAXLINELEN]; char token[XCMSDB_MAXLINELEN]; char token2[XCMSDB_MAXLINELEN]; char *f1; char *f2; char *pBuf; /* * Advance to START_TOKEN * Anything before is just considered as comments. */ while((pBuf = fgets(buf, XCMSDB_MAXLINELEN, stream)) != NULL) { if ((sscanf(buf, "%s %s", token, token2)) && (strcmp(token, START_TOKEN) == 0)) { if (strcmp(token2, FORMAT_VERSION) != 0) { /* text file not in the right format */ return(XcmsFailure); } break; } /* else it was just a blank line or comment */ } if (pBuf == NULL) { return(XcmsFailure); } /* * Process lines between START_TOKEN to END_TOKEN */ while ((fgets(buf, XCMSDB_MAXLINELEN, stream)) != NULL) { if ((sscanf(buf, "%s", token)) && (strcmp(token, END_TOKEN) == 0)) { /* * Found END_TOKEN so break out of for loop */ break; } /* * Get pairs */ if (field2(buf, DELIM_CHAR, &f1, &f2) != XcmsSuccess) { /* Invalid line */ continue; } /* * Add strings */ /* Left String */ pRec->first = pString; _XcmsCopyISOLatin1Lowered(pString, f1); pString += (1 + RemoveSpaces(pString)); pRec->second = pString; /* Right String */ _XcmsCopyISOLatin1Lowered(pString, f2); pString += RemoveSpaces(pString) + 1; pRec++; } return(XcmsSuccess); } /* * NAME * LoadColornameDB - Load the Color Name Database * * SYNOPSIS */ static Status LoadColornameDB(void) /* * DESCRIPTION * Loads the Color Name Database from a text file. * * RETURNS * XcmsSuccess if succeeded, otherwise XcmsFailure. * */ { int size; FILE *stream; const char *pathname; struct stat txt; int length; /* use and name of this env var is not part of the standard */ /* implementation-dependent feature */ if ((pathname = getenv("XCMSDB")) == NULL) { pathname = XCMSDB; } #ifdef __UNIXOS2__ pathname = __XOS2RedirRoot(pathname); #endif length = strlen(pathname); if ((length == 0) || (length >= (BUFSIZ - 5))){ XcmsColorDbState = XcmsDbInitFailure; return(XcmsFailure); } if (stat(pathname, &txt)) { /* can't stat file */ XcmsColorDbState = XcmsDbInitFailure; return(XcmsFailure); } if ((stream = _XFopenFile (pathname, "r")) == NULL) { /* can't open file */ XcmsColorDbState = XcmsDbInitFailure; return(XcmsFailure); } if (stringSectionSize(stream, &nEntries, &size) != XcmsSuccess || nEntries == 0) { (void) fclose(stream); XcmsColorDbState = XcmsDbInitFailure; return(XcmsFailure); } rewind(stream); strings = Xmalloc(size); pairs = Xcalloc(nEntries, sizeof(XcmsPair)); ReadColornameDB(stream, pairs, strings); (void) fclose(stream); /* * sort the pair recs */ qsort((char *)pairs, nEntries, sizeof(XcmsPair), FirstCmp); XcmsColorDbState = XcmsDbInitSuccess; return(XcmsSuccess); } /************************************************************************ * * * API PRIVATE ROUTINES * * * ************************************************************************/ /* * NAME * _XcmsCopyISOLatin1Lowered * * SYNOPSIS */ void _XcmsCopyISOLatin1Lowered( char *dst, const char *src) /* * DESCRIPTION * ISO Latin-1 case conversion routine * Identical to XmuCopyISOLatin1Lowered() but provided here * to eliminate need to link with libXmu.a. * * IMPLEMENTORS NOTE: * This routine is also used in XcmsFormatOfPrefix. * * RETURNS * Void * */ { register unsigned char *dest; register const unsigned char *source; for (dest = (unsigned char *)dst, source = (const unsigned char *)src; *source; source++, dest++) { if ((*source >= XK_A) && (*source <= XK_Z)) *dest = *source + (XK_a - XK_A); else if ((*source >= XK_Agrave) && (*source <= XK_Odiaeresis)) *dest = *source + (XK_agrave - XK_Agrave); else if ((*source >= XK_Ooblique) && (*source <= XK_Thorn)) *dest = *source + (XK_oslash - XK_Ooblique); else *dest = *source; } *dest = '\0'; } /* * NAME * _XcmsResolveColorString - * * SYNOPSIS */ Status _XcmsResolveColorString ( XcmsCCC ccc, const char **color_string, XcmsColor *pColor_exact_return, XcmsColorFormat result_format) /* * DESCRIPTION * The XcmsLookupColor function finds the color specification * associated with a color name in the Device-Independent Color * Name Database. * RETURNS * XcmsFailure if failed to convert valid color string. * XcmsSuccess if succeeded in converting color string to * XcmsColor. * _XCMS_NEWNAME if failed to parse the string or find it in * the database, or if succeeded in looking it up and * found another name which is not in the database. * Note that the new name is returned in color_string. * * This function returns both the color specification found in the * database (db specification) and the color specification for the * color displayable by the specified screen (screen * specification). The calling routine sets the format for these * returned specifications in the XcmsColor format component. * If XcmsUndefinedFormat, the specification is returned in the * format used to store the color in the database. */ { XcmsColor dbWhitePt; /* whitePt associated with pColor_exact_return*/ /* the screen's white point */ XcmsColor *pClientWhitePt; int retval; const char *strptr = whitePtStr; /* * 0. Check for invalid arguments. */ if (ccc == NULL || (*color_string)[0] == '\0' || pColor_exact_return == NULL) { return(XcmsFailure); } /* * 1. First attempt to parse the string * If successful, then convert the specification to the target format * and return. */ if (_XcmsParseColorString(ccc, *color_string, pColor_exact_return) == 1) { if (result_format != XcmsUndefinedFormat && pColor_exact_return->format != result_format) { /* need to be converted to the target format */ return(XcmsConvertColors(ccc, pColor_exact_return, 1, result_format, (Bool *)NULL)); } else { return(XcmsSuccess); } } /* * 2. Attempt to find it in the DI Color Name Database */ /* * a. Convert String into a XcmsColor structure * Attempt to extract the specification for color_string from the * DI Database (pColor_exact_return). If the DI Database does not * have this entry, then return failure. */ retval = _XcmsLookupColorName(ccc, color_string, pColor_exact_return); if (retval != XcmsSuccess) { /* color_string replaced with a color name, or not found */ return(_XCMS_NEWNAME); } if (pColor_exact_return->format == XcmsUndefinedFormat) { return(XcmsFailure); } /* * b. If result_format not defined, then assume target format * is the exact format. */ if (result_format == XcmsUndefinedFormat) { result_format = pColor_exact_return->format; } if ((ClientWhitePointOfCCC(ccc))->format == XcmsUndefinedFormat) { pClientWhitePt = ScreenWhitePointOfCCC(ccc); } else { pClientWhitePt = ClientWhitePointOfCCC(ccc); } /* * c. Convert to the target format, making adjustments for white * point differences as necessary. */ if (XCMS_DD_ID(pColor_exact_return->format)) { /* * The spec format is Device-Dependent, therefore assume the * its white point is the Screen White Point. */ if (XCMS_DD_ID(result_format)) { /* * Target format is Device-Dependent * Therefore, DD --> DD conversion */ return(_XcmsDDConvertColors(ccc, pColor_exact_return, 1, result_format, (Bool *) NULL)); } else { /* * Target format is Device-Independent * Therefore, DD --> DI conversion */ if (ccc->whitePtAdjProc && !_XcmsEqualWhitePts(ccc, pClientWhitePt, ScreenWhitePointOfCCC(ccc))) { return((*ccc->whitePtAdjProc)(ccc, ScreenWhitePointOfCCC(ccc), pClientWhitePt, result_format, pColor_exact_return, 1, (Bool *) NULL)); } else { if (_XcmsDDConvertColors(ccc, pColor_exact_return, 1, XcmsCIEXYZFormat, (Bool *) NULL) == XcmsFailure) { return(XcmsFailure); } return(_XcmsDIConvertColors(ccc, pColor_exact_return, pClientWhitePt, 1, result_format)); } } } else { /* * The spec format is Device-Independent, therefore attempt * to find a database white point. * * If the Database does not have a white point, then assume the * database white point is the same as the Screen White Point. */ if (_XcmsLookupColorName(ccc, &strptr, &dbWhitePt) != 1) { memcpy((char *)&dbWhitePt, (char *)&ccc->pPerScrnInfo->screenWhitePt, sizeof(XcmsColor)); } if (XCMS_DD_ID(result_format)) { /* * Target format is Device-Dependent * Therefore, DI --> DD conversion */ if (ccc->whitePtAdjProc && !_XcmsEqualWhitePts(ccc, &dbWhitePt, ScreenWhitePointOfCCC(ccc))) { return((*ccc->whitePtAdjProc)(ccc, &dbWhitePt, ScreenWhitePointOfCCC(ccc), result_format, pColor_exact_return, 1, (Bool *)NULL)); } else { if (pColor_exact_return->format != XcmsCIEXYZFormat) { if (_XcmsDIConvertColors(ccc, pColor_exact_return, &dbWhitePt, 1, XcmsCIEXYZFormat) == XcmsFailure) { return(XcmsFailure); } } return (_XcmsDDConvertColors(ccc, pColor_exact_return, 1, result_format, (Bool *)NULL)); } } else { /* * Target format is Device-Independent * Therefore, DI --> DI conversion */ if (ccc->whitePtAdjProc && !_XcmsEqualWhitePts(ccc, &dbWhitePt, pClientWhitePt)) { /* * The calling routine wants to resolve this color * in terms if it's white point (i.e. Client White Point). * Therefore, apply white adjustment for the displacement * between dbWhitePt to clientWhitePt. */ return((*ccc->whitePtAdjProc)(ccc, &dbWhitePt, pClientWhitePt, result_format, pColor_exact_return, 1, (Bool *)NULL)); } else if (_XcmsEqualWhitePts(ccc, &dbWhitePt, pClientWhitePt)) { /* * Can use either dbWhitePt or pClientWhitePt to * convert to the result_format. */ if (pColor_exact_return->format == result_format) { return(XcmsSuccess); } else { return (_XcmsDIConvertColors(ccc, pColor_exact_return, &dbWhitePt, 1, result_format)); } } else { /* * Need to convert to a white point independent color * space (let's choose CIEXYZ) then convert to the * target color space. Why? Lets assume that * pColor_exact_return->format and result format * are white point dependent format (e.g., CIELUV, CIELAB, * TekHVC ... same or any combination). If so, we'll * need to convert the color with dbWhitePt to an absolute * spec (i.e. non-white point dependent) then convert that * absolute value with clientWhitePt to the result_format. */ if (pColor_exact_return->format != XcmsCIEXYZFormat) { if (_XcmsDIConvertColors(ccc, pColor_exact_return, &dbWhitePt, 1, XcmsCIEXYZFormat) == XcmsFailure) { return(XcmsFailure); } } if (result_format == XcmsCIEXYZFormat) { return(XcmsSuccess); } else { return(_XcmsDIConvertColors(ccc, pColor_exact_return, pClientWhitePt, 1, result_format)); } } } } } / pRec->first = pString; _XcmsCopyISOLatin1Lowered(pString, f1); pString += (1 + RemoveSpaces(pString)); pRec->second = pString; /* Right String */ _XcmsCopyISOLatin1Lowered(pString, f2); pString += RemoveSpaclibX11-1.6.3/src/xcms/LuvMxLC.c000064401431060000012000000145071247741723500162640ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of XCMS based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * * NAME * CIELuvMxVC.c * * DESCRIPTION * Source for the XcmsCIELuvQueryMaxLC() gamut boundary * querying routine. * * DOCUMENTATION * "TekColor Color Management System, System Implementor's Manual" * and * Fred W. Billmeyer & Max Saltzman, "Principles of Color * Technology", John Wily & Sons, Inc, 1981. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" /* * DEFINES */ #define MIN(x,y) ((x) > (y) ? (y) : (x)) #define MIN3(x,y,z) ((x) > (MIN((y), (z))) ? (MIN((y), (z))) : (x)) #define MAX(x,y) ((x) > (y) ? (x) : (y)) #define MAX3(x,y,z) ((x) > (MAX((y), (z))) ? (x) : (MAX((y), (z)))) #define START_LSTAR (XcmsFloat)40.0 #define START_CHROMA (XcmsFloat)2.2 /************************************************************************ * * * API PRIVATE ROUTINES * * * ************************************************************************/ /* * NAME * _XcmsCIELuvQueryMaxLCRGB - Compute maximum L* and chroma. * * SYNOPSIS */ Status _XcmsCIELuvQueryMaxLCRGB( XcmsCCC ccc, XcmsFloat hue, /* hue in radians */ XcmsColor *pColor_return, XcmsRGBi *pRGB_return) /* * DESCRIPTION * Return the maximum psychometric chroma for a specified * hue angle(radians), and the corresponding L*. This is computed * by a binary search of all possible chromas. An assumption * is made that there are no local maxima. Use the unrounded * Max psychometric chroma because the difference check can be * small. * * NOTE: No local CCC is used because this is a private * routine and all routines that call it are expected * to behave properly, i.e. send a local CCC with * no white adjust function and no gamut compression * function. * * This routine only accepts hue as input and outputs * Luv and RGBi. * * RETURNS * XcmsFailure - Failure * XcmsSuccess - Succeeded * */ { XcmsFloat nSmall, nLarge; XcmsColor tmp; tmp.format = XcmsCIELuvFormat; /* Use some unreachable color on the given hue angle */ tmp.spec.CIELuv.L_star = START_LSTAR; tmp.spec.CIELuv.u_star = XCMS_CIEUSTAROFHUE(hue, START_CHROMA); tmp.spec.CIELuv.v_star = XCMS_CIEVSTAROFHUE(hue, START_CHROMA); /* * Convert from Luv to RGB * * Note that the CIEXYZ to RGBi conversion routine must stuff the * out of bounds RGBi values in tmp when the ccc->gamutCompProc * is NULL. */ if ((_XcmsConvertColorsWithWhitePt(ccc, &tmp, ScreenWhitePointOfCCC(ccc), (unsigned int)1, XcmsRGBiFormat, (Bool *) NULL) == XcmsFailure) && tmp.format != XcmsRGBiFormat) { return (XcmsFailure); } /* Now pick the smallest RGB */ nSmall = MIN3(tmp.spec.RGBi.red, tmp.spec.RGBi.green, tmp.spec.RGBi.blue); /* Make the smallest RGB equal to zero */ tmp.spec.RGBi.red -= nSmall; tmp.spec.RGBi.green -= nSmall; tmp.spec.RGBi.blue -= nSmall; /* Now pick the largest RGB */ nLarge = MAX3(tmp.spec.RGBi.red, tmp.spec.RGBi.green, tmp.spec.RGBi.blue); /* Scale the RGB values based on the largest one */ tmp.spec.RGBi.red /= nLarge; tmp.spec.RGBi.green /= nLarge; tmp.spec.RGBi.blue /= nLarge; tmp.format = XcmsRGBiFormat; /* If the calling routine wants RGB value give them the ones used. */ if (pRGB_return) { pRGB_return->red = tmp.spec.RGBi.red; pRGB_return->green = tmp.spec.RGBi.green; pRGB_return->blue = tmp.spec.RGBi.blue; } /* Convert from RGBi to Luv */ if (_XcmsConvertColorsWithWhitePt(ccc, &tmp, ScreenWhitePointOfCCC(ccc), 1, XcmsCIELuvFormat, (Bool *) NULL) == XcmsFailure) { return (XcmsFailure); } memcpy((char *)pColor_return, (char *)&tmp, sizeof(XcmsColor)); return (XcmsSuccess); } /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * XcmsCIELuvQueryMaxLC - Compute maximum L* and chroma. * * SYNOPSIS */ Status XcmsCIELuvQueryMaxLC ( XcmsCCC ccc, XcmsFloat hue_angle, /* hue angle in degrees */ XcmsColor *pColor_return) /* * DESCRIPTION * Return the point of maximum chroma for the specified * hue angle. * * ASSUMPTIONS * This routine assumes that the white point associated with * the color specification is the Screen White Point. The * Screen White Point will also be associated with the * returned color specification. * * RETURNS * XcmsFailure - Failure * XcmsSuccess - Succeeded * */ { XcmsCCCRec myCCC; /* * Check Arguments */ if (ccc == NULL || pColor_return == NULL) { return(XcmsFailure); } /* Use my own CCC */ memcpy ((char *)&myCCC, (char *)ccc, sizeof(XcmsCCCRec)); myCCC.clientWhitePt.format = XcmsUndefinedFormat; myCCC.gamutCompProc = (XcmsCompressionProc)NULL; while (hue_angle < 0.0) { hue_angle += 360.0; } while (hue_angle >= 360.0) { hue_angle -= 360.0; } return(_XcmsCIELuvQueryMaxLCRGB (&myCCC, radians(hue_angle), pColor_return, (XcmsRGBi *)NULL)); } libX11-1.6.3/src/xcms/Xcms.txt000064401431060000012000000032731247741723500162770ustar00alancstaff00002660200006/* * (c) Copyright 1990 1991 Tektronix Inc. * All Rights Reserved * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of Tektronix not be used * in advertising or publicity pertaining to distribution of the software * without specific, written prior permission. * * Tektronix disclaims all warranties with regard to this software, including * all implied warranties of merchantability and fitness, in no event shall * Tektronix be liable for any special, indirect or consequential damages or * any damages whatsoever resulting from loss of use, data or profits, * whether in an action of contract, negligence or other tortious action, * arising out of or in connection with the use or performance of this * software. * * * NAME * Xcms.txt * * DESCRIPTION * Sample Color Name Database * */ This device-independent color name database is provided just as an example. There are no claims that these color specifications are or should be bound to the corresponding color name. As you can see, the start of the database is indicated by "XCMS_COLORDB_START". Anything before this is assumed to be comments. The "0.1" indicates the version number of the format/syntax used in this file. The color name is delimited from the color specification by one or more tabs. XCMS_COLORDB_START 0.1 cms red CIEXYZ:0.3811/0.2073/0.0213 cms green CIEXYZ:0.3203/0.6805/0.1430 cms blue CIEXYZ:0.2483/0.1122/1.2417 XCMS_COLORDB_END libX11-1.6.3/src/xcms/LuvWpAj.c000064401431060000012000000056621247741723500163240ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of XCMS based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * NAME * CIELuvWpAj.c * * DESCRIPTION * This file contains routine(s) that support white point * adjustment of color specifications in the CIE CIELuv.color * space. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * XcmsCIELuvWhiteShiftColors * * SYNOPSIS */ Status XcmsCIELuvWhiteShiftColors( XcmsCCC ccc, XcmsColor *pWhitePtFrom, XcmsColor *pWhitePtTo, XcmsColorFormat destSpecFmt, XcmsColor *pColors_in_out, unsigned int nColors, Bool *pCompressed) /* * DESCRIPTION * Adjusts color specifications in an array of XcmsColor * structures for white point differences. * * RETURNS * XcmsFailure if failed, * XcmsSuccess if succeeded without gamut compression, * XcmsSuccessWithCompression if succeeded with * gamut compression. */ { if (pWhitePtFrom == NULL || pWhitePtTo == NULL || pColors_in_out == NULL) { return(XcmsFailure); } /* * Convert to CIELuv using pWhitePtFrom * We can ignore return value for compression because we are converting * to XcmsCIELuvFormat which is device-independent, not device-dependent. */ if (_XcmsConvertColorsWithWhitePt(ccc, pColors_in_out, pWhitePtFrom, nColors, XcmsCIELuvFormat, pCompressed) == XcmsFailure) { return(XcmsFailure); } /* * Convert from CIELuv to destSpecFmt using pWhitePtTo */ return(_XcmsConvertColorsWithWhitePt(ccc, pColors_in_out, pWhitePtTo, nColors, destSpecFmt, pCompressed)); } mission, and disclaimer notice is reproduced in * all copies of this softwarelibX11-1.6.3/src/xcms/LabGcLC.c000064401431060000012000000165161247741723500161630ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of XCMS based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * NAME * CIELabGcLC.c * * DESCRIPTION * Source for XcmsCIELabClipLab() gamut * compression function. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include #include "Cv.h" /* * INTERNALS * Internal defines that need NOT be exported to any package or * program using this package. */ #define MAXBISECTCOUNT 100 /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * XcmsCIELabClipLab - Return the closest L* and chroma * * SYNOPSIS */ /* ARGSUSED */ Status XcmsCIELabClipLab ( XcmsCCC ccc, XcmsColor *pColors_in_out, unsigned int nColors, unsigned int i, Bool *pCompressed) /* * DESCRIPTION * This routine will find the closest L* and chroma * for a specific hue. The color input is converted to * CIE L*u*v* format and returned as CIE XYZ format. * * Since this routine works with the L* within * pColor_in_out intermediate results may be returned * even though it may be invalid. * * RETURNS * XcmsFailure - Failure * XcmsSuccess - Succeeded * */ { Status retval; XcmsCCCRec myCCC; XcmsColor *pColor; XcmsColor Lab_max; XcmsFloat hue, chroma, maxChroma; XcmsFloat Chroma, bestChroma, Lstar, maxLstar, saveLstar; XcmsFloat bestLstar, bestastar, bestbstar; XcmsFloat nT, saveDist, tmpDist; XcmsRGBi rgb_max; int nCount, nMaxCount, nI, nILast; /* Use my own CCC */ memcpy ((char *)&myCCC, (char *)ccc, sizeof(XcmsCCCRec)); myCCC.clientWhitePt.format = XcmsUndefinedFormat;/* inherit screen white */ myCCC.gamutCompProc = (XcmsCompressionProc)NULL;/* no gamut compression func */ /* * Color specification passed as input can be assumed to: * 1. Be in XcmsCIEXYZFormat * 2. Already be white point adjusted for the Screen White Point. * This means that the white point now associated with this * color spec is the Screen White Point (even if the * ccc->clientWhitePt differs). */ pColor = pColors_in_out + i; if (ccc->visual->class < StaticColor) { /* * GRAY ! */ _XcmsDIConvertColors(ccc, pColor, ScreenWhitePointOfCCC(ccc), 1, XcmsCIELabFormat); _XcmsDIConvertColors(ccc, pColor, ScreenWhitePointOfCCC(ccc), 1, XcmsCIEXYZFormat); if (pCompressed) { *(pCompressed + i) = True; } return(XcmsSuccess); } /* Convert from CIEXYZ to CIELab format */ if (_XcmsDIConvertColors(&myCCC, pColor, ScreenWhitePointOfCCC(&myCCC), 1, XcmsCIELabFormat) == XcmsFailure) { return(XcmsFailure); } /* Step 1: compute the maximum L* and chroma for this hue. */ /* This copy may be overkill but it preserves the pixel etc. */ saveLstar = pColor->spec.CIELab.L_star; hue = XCMS_CIELAB_PMETRIC_HUE(pColor->spec.CIELab.a_star, pColor->spec.CIELab.b_star); chroma = XCMS_CIELAB_PMETRIC_CHROMA(pColor->spec.CIELab.a_star, pColor->spec.CIELab.b_star); memcpy((char *)&Lab_max, (char *)pColor, sizeof(XcmsColor)); if (_XcmsCIELabQueryMaxLCRGB (&myCCC, hue, &Lab_max, &rgb_max) == XcmsFailure) { return (XcmsFailure); } maxLstar = Lab_max.spec.CIELab.L_star; /* Now check and return the appropriate L* */ if (saveLstar == maxLstar) { /* When the L* input is equal to the maximum L* */ /* merely return the maximum Lab point. */ memcpy((char *)pColor, (char *)&Lab_max, sizeof(XcmsColor)); retval = _XcmsDIConvertColors(&myCCC, pColor, ScreenWhitePointOfCCC(&myCCC), 1, XcmsCIEXYZFormat); } else { /* return the closest point on the hue leaf. */ /* must do a bisection here to compute the delta e. */ maxChroma = XCMS_CIELAB_PMETRIC_CHROMA(Lab_max.spec.CIELab.a_star, Lab_max.spec.CIELab.b_star); nMaxCount = MAXBISECTCOUNT; nI = nMaxCount / 2; bestLstar = Lstar = pColor->spec.CIELab.L_star; bestastar = pColor->spec.CIELab.a_star; bestbstar = pColor->spec.CIELab.b_star; bestChroma = Chroma = chroma; saveDist = XCMS_SQRT(((Chroma - maxChroma) * (Chroma - maxChroma)) + ((Lstar - maxLstar) * (Lstar - maxLstar))); for (nCount = 0; nCount < nMaxCount; nCount++) { nT = (XcmsFloat) nI / (XcmsFloat) nMaxCount; if (saveLstar > maxLstar) { pColor->spec.RGBi.red = rgb_max.red * (1.0 - nT) + nT; pColor->spec.RGBi.green = rgb_max.green * (1.0 - nT) + nT; pColor->spec.RGBi.blue = rgb_max.blue * (1.0 - nT) + nT; } else { pColor->spec.RGBi.red = rgb_max.red - (rgb_max.red * nT); pColor->spec.RGBi.green = rgb_max.green - (rgb_max.green * nT); pColor->spec.RGBi.blue = rgb_max.blue - (rgb_max.blue * nT); } pColor->format = XcmsRGBiFormat; /* Convert from RGBi to CIE Lab */ if (_XcmsConvertColorsWithWhitePt(&myCCC, pColor, ScreenWhitePointOfCCC(&myCCC), 1, XcmsCIELabFormat, (Bool *) NULL) == XcmsFailure) { return (XcmsFailure); } chroma = XCMS_CIELAB_PMETRIC_CHROMA(pColor->spec.CIELab.a_star, pColor->spec.CIELab.b_star); tmpDist = XCMS_SQRT(((Chroma - chroma) * (Chroma - chroma)) + ((Lstar - pColor->spec.CIELab.L_star) * (Lstar - pColor->spec.CIELab.L_star))); nILast = nI; if (tmpDist > saveDist) { nI /= 2; } else { nI = (nMaxCount + nI) / 2; saveDist = tmpDist; bestLstar = pColor->spec.CIELab.L_star; bestastar = pColor->spec.CIELab.a_star; bestbstar = pColor->spec.CIELab.b_star; bestChroma = chroma; } if (nI == nILast || nI == 0) { break; } } if (bestChroma >= maxChroma) { pColor->spec.CIELab.L_star = maxLstar; pColor->spec.CIELab.a_star = Lab_max.spec.CIELab.a_star; pColor->spec.CIELab.b_star = Lab_max.spec.CIELab.b_star; } else { pColor->spec.CIELab.L_star = bestLstar; pColor->spec.CIELab.a_star = bestastar; pColor->spec.CIELab.b_star = bestbstar; } retval = _XcmsDIConvertColors(&myCCC, pColor, ScreenWhitePointOfCCC(&myCCC), 1, XcmsCIEXYZFormat); if (retval != XcmsFailure && pCompressed != NULL) { *(pCompressed + i) = True; } } return(retval); } libX11-1.6.3/src/xcms/LuvMxC.c000064401431060000012000000145531247741723500161510ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of XCMS based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * * NAME * CIELuvMxC.c * * DESCRIPTION * Source for the XcmsCIELuvQueryMaxC() gamut boundary * querying routine. * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include #include "Cv.h" /* * DEFINES */ #define MAXBISECTCOUNT 100 #define EPS (XcmsFloat)0.001 #define START_CHROMA (XcmsFloat)2.2 #define TOPL (XcmsFloat)100.0 /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * XcmsCIELuvQueryMaxC - max chroma for a hue_angle and L_star * * SYNOPSIS */ Status XcmsCIELuvQueryMaxC( XcmsCCC ccc, XcmsFloat hue_angle, /* hue angle in degrees */ XcmsFloat L_star, XcmsColor *pColor_return) /* * DESCRIPTION * Return the maximum chroma for a specific hue_angle and L_star. * The returned format is in XcmsCIELuvFormat. * * * ASSUMPTIONS * This routine assumes that the white point associated with * the color specification is the Screen White Point. The * Screen White Point will also be associated with the * returned color specification. * * RETURNS * XcmsFailure - Failure * XcmsSuccess - Succeeded * */ { XcmsCCCRec myCCC; XcmsColor tmp; XcmsColor max_lc; XcmsFloat n_L_star, last_L_star, prev_L_star; XcmsFloat hue, lastuStar, lastvStar, /*lastChroma,*/ maxDist, nT, rFactor; XcmsRGBi rgb_saved; int nCount, nMaxCount; /* * Check Arguments */ if (ccc == NULL || pColor_return == NULL) { return(XcmsFailure); } /* Use my own CCC and inherit screen white Pt */ memcpy ((char *)&myCCC, (char *)ccc, sizeof(XcmsCCCRec)); myCCC.clientWhitePt.format = XcmsUndefinedFormat; myCCC.gamutCompProc = (XcmsCompressionProc)NULL;/* no gamut comp func */ while (hue_angle < 0.0) { hue_angle += 360.0; } while (hue_angle >= 360.0) { hue_angle -= 360.0; } hue = radians(hue_angle); tmp.spec.CIELuv.L_star = L_star; tmp.spec.CIELuv.u_star = XCMS_CIEUSTAROFHUE(hue, START_CHROMA); tmp.spec.CIELuv.v_star = XCMS_CIEVSTAROFHUE(hue, START_CHROMA); tmp.pixel = pColor_return->pixel; tmp.format = XcmsCIELuvFormat; /* Step 1: compute the maximum L_star and chroma for this hue. */ memcpy((char *)&max_lc, (char *)&tmp, sizeof(XcmsColor)); if (_XcmsCIELuvQueryMaxLCRGB(&myCCC, hue, &max_lc, &rgb_saved) == XcmsFailure) { return(XcmsFailure); } /* * Step 2: Do a bisection here to compute the maximum chroma * Note the differences between when the point to be found * is above the maximum LC point and when it is below. */ if (L_star <= max_lc.spec.CIELuv.L_star) { maxDist = max_lc.spec.CIELuv.L_star; } else { maxDist = TOPL - max_lc.spec.CIELuv.L_star; } n_L_star = L_star; last_L_star = -1.0; nMaxCount = MAXBISECTCOUNT; rFactor = 1.0; for (nCount = 0; nCount < nMaxCount; nCount++) { prev_L_star = last_L_star; last_L_star = tmp.spec.CIELuv.L_star; /* lastChroma = XCMS_CIELUV_PMETRIC_CHROMA(tmp.spec.CIELuv.u_star, */ /* tmp.spec.CIELuv.v_star); */ lastuStar = tmp.spec.CIELuv.u_star; lastvStar = tmp.spec.CIELuv.v_star; nT = (n_L_star - max_lc.spec.CIELuv.L_star) / maxDist * rFactor; /* printf("(n_L_star, nT) = %lf %lf ", n_L_star, nT); */ if (nT > 0) { tmp.spec.RGBi.red = rgb_saved.red * (1.0 - nT) + nT; tmp.spec.RGBi.green = rgb_saved.green * (1.0 - nT) + nT; tmp.spec.RGBi.blue = rgb_saved.blue * (1.0 - nT) + nT; } else { tmp.spec.RGBi.red = rgb_saved.red + (rgb_saved.red * nT); tmp.spec.RGBi.green = rgb_saved.green + (rgb_saved.green * nT); tmp.spec.RGBi.blue = rgb_saved.blue + (rgb_saved.blue * nT); } tmp.format = XcmsRGBiFormat; /* convert from RGB to CIELuv */ if (_XcmsConvertColorsWithWhitePt(&myCCC, &tmp, ScreenWhitePointOfCCC(&myCCC), 1, XcmsCIELuvFormat, (Bool *) NULL) == XcmsFailure) { return(XcmsFailure); } /* * Now check if we've reached the target L_star */ /* printf("result Lstar = %lf\n", tmp.spec.CIELuv.L_star); */ if (tmp.spec.CIELuv.L_star <= L_star + EPS && tmp.spec.CIELuv.L_star >= L_star - EPS) { memcpy((char *)pColor_return, (char *)&tmp, sizeof(XcmsColor)); return(XcmsSuccess); } if (nT > 0) { n_L_star += ((TOPL - n_L_star) * (L_star - tmp.spec.CIELuv.L_star)) / (TOPL - L_star); } else { n_L_star *= L_star / tmp.spec.CIELuv.L_star; } if (tmp.spec.CIELuv.L_star <= prev_L_star + EPS && tmp.spec.CIELuv.L_star >= prev_L_star - EPS) { rFactor *= 0.5; /* selective relaxation employed */ /* printf("rFactor = %lf\n", rFactor); */ } } if (XCMS_FABS(last_L_star - L_star) < XCMS_FABS(tmp.spec.CIELuv.L_star - L_star)) { tmp.spec.CIELuv.u_star = lastuStar; tmp.spec.CIELuv.v_star = lastvStar; /* tmp.spec.CIELuv.u_star = XCMS_CIEUSTAROFHUE(hue, lastChroma); */ /* tmp.spec.CIELuv.v_star = XCMS_CIEVSTAROFHUE(hue, lastChroma); */ } tmp.spec.CIELuv.L_star = L_star; memcpy((char *)pColor_return, (char *)&tmp, sizeof(XcmsColor)); return(XcmsSuccess); } libX11-1.6.3/src/xcms/Lab.c000064401431060000012000000251401247741723500154630ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of XCMS based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * NAME * CIELab.c * * DESCRIPTION * This file contains routines that support the CIE L*a*b* * color space to include conversions to and from the CIE * XYZ space. These conversions are from Principles of * Color Technology Second Edition, Fred W. Billmeyer, Jr. * and Max Saltzman, John Wiley & Sons, Inc., 1981. * * Note that the range for L* is 0 to 1. */ #ifdef HAVE_CONFIG_H #include #endif #include #include /* sscanf */ #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" /* * DEFINES * Internal definitions that need NOT be exported to any package * or program using this package. */ #ifdef DBL_EPSILON # define XMY_DBL_EPSILON DBL_EPSILON #else # define XMY_DBL_EPSILON 0.00001 #endif #define DIV16BY116 0.137931 /* * FORWARD DECLARATIONS */ static int CIELab_ParseString(register char *spec, XcmsColor *pColor); static Status XcmsCIELab_ValidSpec(XcmsColor *pColor); /* * LOCAL VARIABLES */ /* * NULL terminated list of functions applied to get from CIELab to CIEXYZ */ static XcmsConversionProc Fl_CIELab_to_CIEXYZ[] = { XcmsCIELabToCIEXYZ, NULL }; /* * NULL terminated list of functions applied to get from CIEXYZ to CIELab */ static XcmsConversionProc Fl_CIEXYZ_to_CIELab[] = { XcmsCIEXYZToCIELab, NULL }; /* * GLOBALS */ /* * CIE Lab Color Space */ XcmsColorSpace XcmsCIELabColorSpace = { _XcmsCIELab_prefix, /* prefix */ XcmsCIELabFormat, /* id */ CIELab_ParseString, /* parseString */ Fl_CIELab_to_CIEXYZ, /* to_CIEXYZ */ Fl_CIEXYZ_to_CIELab, /* from_CIEXYZ */ 1 }; /************************************************************************ * * * PRIVATE ROUTINES * * * ************************************************************************/ /* * NAME * CIELab_ParseString * * SYNOPSIS */ static int CIELab_ParseString( register char *spec, XcmsColor *pColor) /* * DESCRIPTION * This routines takes a string and attempts to convert * it into a XcmsColor structure with XcmsCIELabFormat. * The assumed CIELab string syntax is: * CIELab:// * Where L, a, and b are in string input format for floats * consisting of: * a. an optional sign * b. a string of numbers possibly containing a decimal point, * c. an optional exponent field containing an 'E' or 'e' * followed by a possibly signed integer string. * * RETURNS * 0 if failed, non-zero otherwise. */ { int n; char *pchar; if ((pchar = strchr(spec, ':')) == NULL) { return(XcmsFailure); } n = (int)(pchar - spec); /* * Check for proper prefix. */ if (strncmp(spec, _XcmsCIELab_prefix, n) != 0) { return(XcmsFailure); } /* * Attempt to parse the value portion. */ if (sscanf(spec + n + 1, "%lf/%lf/%lf", &pColor->spec.CIELab.L_star, &pColor->spec.CIELab.a_star, &pColor->spec.CIELab.b_star) != 3) { char *s; /* Maybe failed due to locale */ int f; if ((s = strdup(spec))) { for (f = 0; s[f]; ++f) if (s[f] == '.') s[f] = ','; else if (s[f] == ',') s[f] = '.'; if (sscanf(s + n + 1, "%lf/%lf/%lf", &pColor->spec.CIELab.L_star, &pColor->spec.CIELab.a_star, &pColor->spec.CIELab.b_star) != 3) { free(s); return(XcmsFailure); } free(s); } else return(XcmsFailure); } pColor->format = XcmsCIELabFormat; pColor->pixel = 0; return(XcmsCIELab_ValidSpec(pColor)); } /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * XcmsCIELab_ValidSpec * * SYNOPSIS */ static Status XcmsCIELab_ValidSpec( XcmsColor *pColor) /* * DESCRIPTION * Checks if color specification valid for CIE L*a*b*. * * RETURNS * XcmsFailure if invalid, * XcmsSuccess if valid. * */ { if (pColor->format != XcmsCIELabFormat || (pColor->spec.CIELab.L_star < 0.0 - XMY_DBL_EPSILON) || (pColor->spec.CIELab.L_star > 100.0 + XMY_DBL_EPSILON)) { return(XcmsFailure); } return(XcmsSuccess); } /* * NAME * XcmsCIELabToCIEXYZ - convert CIELab to CIEXYZ * * SYNOPSIS */ Status XcmsCIELabToCIEXYZ( XcmsCCC ccc, XcmsColor *pLab_WhitePt, XcmsColor *pColors_in_out, unsigned int nColors) /* * DESCRIPTION * Converts color specifications in an array of XcmsColor * structures from CIELab format to CIEXYZ format. * * WARNING: This routine assumes that Yn = 1.0; * * RETURNS * XcmsFailure if failed, * XcmsSuccess if succeeded. * */ { XcmsCIEXYZ XYZ_return; XcmsFloat tmpFloat, tmpL; XcmsColor whitePt; int i; XcmsColor *pColor = pColors_in_out; /* * Check arguments */ if (pLab_WhitePt == NULL || pColors_in_out == NULL) { return(XcmsFailure); } /* * Make sure white point is in CIEXYZ form, if not, convert it. */ if (pLab_WhitePt->format != XcmsCIEXYZFormat) { /* Make a copy of the white point because we're going to modify it */ memcpy((char *)&whitePt, (char *)pLab_WhitePt, sizeof(XcmsColor)); if (!_XcmsDIConvertColors(ccc, &whitePt, (XcmsColor *)NULL, 1, XcmsCIEXYZFormat)) { return(XcmsFailure); } pLab_WhitePt = &whitePt; } /* * Make sure it is a white point, i.e., Y == 1.0 */ if (pLab_WhitePt->spec.CIEXYZ.Y != 1.0) { return (0); } /* * Now convert each XcmsColor structure to CIEXYZ form */ for (i = 0; i < nColors; i++, pColor++) { /* Make sure original format is CIELab */ if (!XcmsCIELab_ValidSpec(pColor)) { return(XcmsFailure); } /* Calculate Y: assume that Yn = 1.0 */ tmpL = (pColor->spec.CIELab.L_star + 16.0) / 116.0; XYZ_return.Y = tmpL * tmpL * tmpL; if (XYZ_return.Y < 0.008856) { /* Calculate Y: assume that Yn = 1.0 */ tmpL = pColor->spec.CIELab.L_star / 9.03292; /* Calculate X */ XYZ_return.X = pLab_WhitePt->spec.CIEXYZ.X * ((pColor->spec.CIELab.a_star / 3893.5) + tmpL); /* Calculate Y */ XYZ_return.Y = tmpL; /* Calculate Z */ XYZ_return.Z = pLab_WhitePt->spec.CIEXYZ.Z * (tmpL - (pColor->spec.CIELab.b_star / 1557.4)); } else { /* Calculate X */ tmpFloat = tmpL + (pColor->spec.CIELab.a_star / 5.0); XYZ_return.X = pLab_WhitePt->spec.CIEXYZ.X * tmpFloat * tmpFloat * tmpFloat; /* Calculate Z */ tmpFloat = tmpL - (pColor->spec.CIELab.b_star / 2.0); XYZ_return.Z = pLab_WhitePt->spec.CIEXYZ.Z * tmpFloat * tmpFloat * tmpFloat; } memcpy((char *)&pColor->spec.CIEXYZ, (char *)&XYZ_return, sizeof(XcmsCIEXYZ)); pColor->format = XcmsCIEXYZFormat; } return (1); } /* * NAME * XcmsCIEXYZToCIELab - convert CIEXYZ to CIELab * * SYNOPSIS */ Status XcmsCIEXYZToCIELab( XcmsCCC ccc, XcmsColor *pLab_WhitePt, XcmsColor *pColors_in_out, unsigned int nColors) /* * DESCRIPTION * Converts color specifications in an array of XcmsColor * structures from CIEXYZ format to CIELab format. * * WARNING: This routine assumes that Yn = 1.0; * * RETURNS * XcmsFailure if failed, * XcmsSuccess if succeeded. * */ { XcmsCIELab Lab_return; XcmsFloat fX_Xn, fY_Yn, fZ_Zn; XcmsColor whitePt; int i; XcmsColor *pColor = pColors_in_out; /* * Check arguments */ if (pLab_WhitePt == NULL || pColors_in_out == NULL) { return(XcmsFailure); } /* * Make sure white point is in CIEXYZ form, if not, convert it. */ if (pLab_WhitePt->format != XcmsCIEXYZFormat) { /* Make a copy of the white point because we're going to modify it */ memcpy((char *)&whitePt, (char *)pLab_WhitePt, sizeof(XcmsColor)); if (!_XcmsDIConvertColors(ccc, &whitePt, (XcmsColor *)NULL, 1, XcmsCIEXYZFormat)) { return(XcmsFailure); } pLab_WhitePt = &whitePt; } /* * Make sure it is a white point, i.e., Y == 1.0 */ if (pLab_WhitePt->spec.CIEXYZ.Y != 1.0) { return(XcmsFailure); } /* * Now convert each XcmsColor structure to CIEXYZ form */ for (i = 0; i < nColors; i++, pColor++) { /* Make sure original format is CIELab */ if (!_XcmsCIEXYZ_ValidSpec(pColor)) { return(XcmsFailure); } /* Calculate L*: assume Yn = 1.0 */ if (pColor->spec.CIEXYZ.Y < 0.008856) { fY_Yn = (0.07787 * pColor->spec.CIEXYZ.Y) + DIV16BY116; /* note fY_Yn used to compute Lab_return.a below */ Lab_return.L_star = 116.0 * (fY_Yn - DIV16BY116); } else { fY_Yn = (XcmsFloat)XCMS_CUBEROOT(pColor->spec.CIEXYZ.Y); /* note fY_Yn used to compute Lab_return.a_star below */ Lab_return.L_star = (116.0 * fY_Yn) - 16.0; } /* Calculate f(X/Xn) */ if ((fX_Xn = pColor->spec.CIEXYZ.X / pLab_WhitePt->spec.CIEXYZ.X) < 0.008856) { fX_Xn = (0.07787 * fX_Xn) + DIV16BY116; } else { fX_Xn = (XcmsFloat) XCMS_CUBEROOT(fX_Xn); } /* Calculate f(Z/Zn) */ if ((fZ_Zn = pColor->spec.CIEXYZ.Z / pLab_WhitePt->spec.CIEXYZ.Z) < 0.008856) { fZ_Zn = (0.07787 * fZ_Zn) + DIV16BY116; } else { fZ_Zn = (XcmsFloat) XCMS_CUBEROOT(fZ_Zn); } Lab_return.a_star = 5.0 * (fX_Xn - fY_Yn); Lab_return.b_star = 2.0 * (fY_Yn - fZ_Zn); memcpy((char *)&pColor->spec.CIELab, (char *)&Lab_return, sizeof(XcmsCIELab)); pColor->format = XcmsCIELabFormat; } return(XcmsSuccess); } libX11-1.6.3/src/xcms/QGreen.c000064401431060000012000000046071247741723500161530ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * NAME * XcmsQGreen.c - Query Green * * DESCRIPTION * Routine to obtain a color specification for full * green intensity and zero red and blue intensities. * * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcms.h" /************************************************************************ * * * PUBLIC INTERFACES * * * ************************************************************************/ /* * NAME * XcmsQueryGreen * * SYNOPSIS */ Status XcmsQueryGreen( XcmsCCC ccc, XcmsColorFormat target_format, XcmsColor *pColor_ret) /* * DESCRIPTION * Returns the color specification in the target format for * full intensity green and zero intensity red and blue. * * RETURNS * Returns XcmsSuccess, if failed; otherwise XcmsFailure * */ { XcmsColor tmp; tmp.format = XcmsRGBiFormat; tmp.pixel = 0; tmp.spec.RGBi.red = 0.0; tmp.spec.RGBi.green = 1.0; tmp.spec.RGBi.blue = 0.0; if (XcmsConvertColors(ccc, &tmp, 1, target_format, NULL) != XcmsSuccess) { return(XcmsFailure); } memcpy((char *)pColor_ret, (char *)&tmp, sizeof(XcmsColor)); return(XcmsSuccess); } libX11-1.6.3/src/xcms/cmsAllNCol.c000064401431060000012000000127551247741723500167640ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * NAME * XcmsAlNCol.c * * DESCRIPTION * Source for XcmsAllocNamedColor * * */ #ifdef HAVE_CONFIG_H #include #endif #include #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" /* * NAME * XcmsAllocNamedColor - * * SYNOPSIS */ Status XcmsAllocNamedColor ( Display *dpy, Colormap cmap, _Xconst char *colorname, XcmsColor *pColor_scrn_return, XcmsColor *pColor_exact_return, XcmsColorFormat result_format) /* * DESCRIPTION * Finds the color specification associated with the color * name in the Device-Independent Color Name Database, then * converts that color specification to an RGB format. This * RGB value is then used in a call to XAllocColor to allocate * a read-only color cell. * * RETURNS * 0 if failed to parse string or find any entry in the database. * 1 if succeeded in converting color name to XcmsColor. * 2 if succeeded in converting color name to another color name. * */ { long nbytes; xAllocNamedColorReply rep; xAllocNamedColorReq *req; XColor hard_def; XColor exact_def; Status retval1 = 1; Status retval2 = XcmsSuccess; XcmsColor tmpColor; XColor XColor_in_out; XcmsCCC ccc; /* * 0. Check for invalid arguments. */ if (dpy == NULL || colorname[0] == '\0' || pColor_scrn_return == 0 || pColor_exact_return == NULL) { return(XcmsFailure); } if ((ccc = XcmsCCCOfColormap(dpy, cmap)) == (XcmsCCC)NULL) { return(XcmsFailure); } /* * 1. Convert string to a XcmsColor using Xcms and i18n mechanism */ if ((retval1 = _XcmsResolveColorString(ccc, &colorname, &tmpColor, result_format)) == XcmsFailure) { return(XcmsFailure); } if (retval1 == _XCMS_NEWNAME) { goto PassToServer; } memcpy((char *)pColor_exact_return, (char *)&tmpColor, sizeof(XcmsColor)); /* * 2. Convert tmpColor to RGB * Assume pColor_exact_return is now adjusted to Client White Point */ if ((retval2 = XcmsConvertColors(ccc, &tmpColor, 1, XcmsRGBFormat, (Bool *) NULL)) == XcmsFailure) { return(XcmsFailure); } /* * 3. Convert to XColor and call XAllocColor */ _XcmsRGB_to_XColor(&tmpColor, &XColor_in_out, 1); if (XAllocColor(ccc->dpy, cmap, &XColor_in_out) == 0) { return(XcmsFailure); } /* * 4. pColor_scrn_return * * Now convert to the target format. * We can ignore the return value because we're already in a * device-dependent format. */ _XColor_to_XcmsRGB(ccc, &XColor_in_out, pColor_scrn_return, 1); if (result_format != XcmsRGBFormat) { if (result_format == XcmsUndefinedFormat) { result_format = pColor_exact_return->format; } if (XcmsConvertColors(ccc, pColor_scrn_return, 1, result_format, (Bool *) NULL) == XcmsFailure) { return(XcmsFailure); } } return(retval1 > retval2 ? retval1 : retval2); PassToServer: /* * All previous methods failed, so lets pass it to the server * for parsing. */ dpy = ccc->dpy; LockDisplay(dpy); GetReq(AllocNamedColor, req); req->cmap = cmap; nbytes = req->nbytes = strlen(colorname); req->length += (nbytes + 3) >> 2; /* round up to mult of 4 */ _XSend(dpy, colorname, nbytes); /* _XSend is more efficient that Data, since _XReply follows */ if (!_XReply (dpy, (xReply *) &rep, 0, xTrue)) { UnlockDisplay(dpy); SyncHandle(); return (0); } exact_def.red = rep.exactRed; exact_def.green = rep.exactGreen; exact_def.blue = rep.exactBlue; hard_def.red = rep.screenRed; hard_def.green = rep.screenGreen; hard_def.blue = rep.screenBlue; exact_def.pixel = hard_def.pixel = rep.pixel; UnlockDisplay(dpy); SyncHandle(); /* * Now convert to the target format. */ _XColor_to_XcmsRGB(ccc, &exact_def, pColor_exact_return, 1); _XColor_to_XcmsRGB(ccc, &hard_def, pColor_scrn_return, 1); if (result_format != XcmsRGBFormat && result_format != XcmsUndefinedFormat) { if (XcmsConvertColors(ccc, pColor_exact_return, 1, result_format, (Bool *) NULL) == XcmsFailure) { return(XcmsFailure); } if (XcmsConvertColors(ccc, pColor_scrn_return, 1, result_format, (Bool *) NULL) == XcmsFailure) { return(XcmsFailure); } } return(XcmsSuccess); } libX11-1.6.3/src/xcms/HVCMxC.c000064401431060000012000000171261247741723500160220ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. TekColor is a * trademark of Tektronix, Inc. The term "TekHVC" designates a particular * color space that is the subject of U.S. Patent No. 4,985,853 (equivalent * foreign patents pending). Permission is hereby granted to use, copy, * modify, sell, and otherwise distribute this software and its * documentation for any purpose and without fee, provided that: * * 1. This copyright, permission, and disclaimer notice is reproduced in * all copies of this software and any modification thereof and in * supporting documentation; * 2. Any color-handling application which displays TekHVC color * cooordinates identifies these as TekHVC color coordinates in any * interface that displays these coordinates and in any associated * documentation; * 3. The term "TekHVC" is always used, and is only used, in association * with the mathematical derivations of the TekHVC Color Space, * including those provided in this file and any equivalent pathways and * mathematical derivations, regardless of digital (e.g., floating point * or integer) representation. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * NAME * TekHVCMxC.c * * DESCRIPTION * Source for the XcmsTekHVCQueryMaxC() gamut boudary * querying routine. * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include #include "Cv.h" /* * DEFINES */ #define MAXBISECTCOUNT 100 #define EPS 0.001 /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * XcmsTekHVCQueryMaxC - Compute the maximum chroma for a hue and value * * SYNOPSIS */ Status XcmsTekHVCQueryMaxC( XcmsCCC ccc, XcmsFloat hue, XcmsFloat value, XcmsColor *pColor_return) /* * DESCRIPTION * Return the maximum chroma for a specific hue and value. * The returned format is in XcmsTekHVCFormat. * * * ASSUMPTIONS * This routine assumes that the white point associated with * the color specification is the Screen White Point. The * Screen White Point will also be associated with the * returned color specification. * * RETURNS * XcmsFailure - Failure * XcmsSuccess - Succeeded * */ { XcmsCCCRec myCCC; XcmsColor tmp; XcmsColor max_vc; XcmsRGBi rgb_saved; int nCount, nMaxCount; XcmsFloat nValue, savedValue, lastValue, lastChroma, prevValue; XcmsFloat maxDist, nT, rFactor; XcmsFloat ftmp1, ftmp2; /* * Check Arguments */ if (ccc == NULL || pColor_return == NULL) { return(XcmsFailure); } /* * Insure TekHVC installed */ if (XcmsAddColorSpace(&XcmsTekHVCColorSpace) == XcmsFailure) { return(XcmsFailure); } /* Use my own CCC */ memcpy ((char *)&myCCC, (char *)ccc, sizeof(XcmsCCCRec)); myCCC.clientWhitePt.format = XcmsUndefinedFormat; /* inherit screen white Pt */ myCCC.gamutCompProc = (XcmsCompressionProc)NULL;/* no gamut comp func */ tmp.spec.TekHVC.H = hue; tmp.spec.TekHVC.V = value; tmp.spec.TekHVC.C = 100.0; tmp.pixel = pColor_return->pixel; tmp.format = XcmsTekHVCFormat; /* check to make sure we have a valid TekHVC number */ if (!_XcmsTekHVC_CheckModify(&tmp)) { return(XcmsFailure); } /* Step 1: compute the maximum value and chroma for this hue. */ memcpy((char *)&max_vc, (char *)&tmp, sizeof(XcmsColor)); if (_XcmsTekHVCQueryMaxVCRGB(&myCCC, hue, &max_vc, &rgb_saved) == XcmsFailure) { return(XcmsFailure); } /* Step 2: If the value is less than the value for the maximum */ /* value, chroma point then the chroma is on the line */ /* from max_vc to 0,0. */ if (value <= max_vc.spec.TekHVC.V) { tmp.spec.TekHVC.C = value * max_vc.spec.TekHVC.C / max_vc.spec.TekHVC.V; if (_XcmsTekHVC_CheckModify (&tmp)) { memcpy((char *)pColor_return, (char *)&tmp, sizeof(XcmsColor)); return(XcmsSuccess); } else { return(XcmsFailure); } } else { /* must do a bisection here to compute the maximum chroma */ /* save the structure input so that any elements that */ /* are not touched are recopied later in the routine. */ nValue = savedValue = value; lastChroma = -1.0; lastValue = -1.0; nMaxCount = MAXBISECTCOUNT; maxDist = 100.0 - max_vc.spec.TekHVC.V; rFactor = 1.0; for (nCount = 0; nCount < nMaxCount; nCount++) { prevValue = lastValue; lastValue = tmp.spec.TekHVC.V; lastChroma = tmp.spec.TekHVC.C; nT = (nValue - max_vc.spec.TekHVC.V) / maxDist * rFactor; tmp.spec.RGBi.red = rgb_saved.red * (1.0 - nT) + nT; tmp.spec.RGBi.green = rgb_saved.green * (1.0 - nT) + nT; tmp.spec.RGBi.blue = rgb_saved.blue * (1.0 - nT) + nT; tmp.format = XcmsRGBiFormat; /* convert from RGB to HVC */ if (_XcmsConvertColorsWithWhitePt(&myCCC, &tmp, &myCCC.pPerScrnInfo->screenWhitePt, 1, XcmsTekHVCFormat, (Bool *) NULL) == XcmsFailure) { return(XcmsFailure); } /* Now check the return against what is expected */ if (tmp.spec.TekHVC.V <= savedValue + EPS && tmp.spec.TekHVC.V >= savedValue - EPS) { /* make sure to return the input hue */ tmp.spec.TekHVC.H = hue; if (_XcmsTekHVC_CheckModify (&tmp)) { memcpy((char *)pColor_return, (char *)&tmp, sizeof(XcmsColor)); return(XcmsSuccess); } else { return(XcmsFailure); } } nValue += savedValue - tmp.spec.TekHVC.V; if (nValue < max_vc.spec.TekHVC.V) { nValue = max_vc.spec.TekHVC.V; rFactor *= 0.5; /* selective relaxation employed */ } else if (nValue > 100.0) { /* make sure to return the input hue */ tmp.spec.TekHVC.H = hue; /* avoid using fabs */ ftmp1 = lastValue - savedValue; if (ftmp1 < 0.0) ftmp1 = -ftmp1; ftmp2 = tmp.spec.TekHVC.V - savedValue; if (ftmp2 < 0.0) ftmp2 = -ftmp2; if (ftmp1 < ftmp2) { tmp.spec.TekHVC.V = lastValue; tmp.spec.TekHVC.C = lastChroma; } if (_XcmsTekHVC_CheckModify (&tmp)) { memcpy((char *)pColor_return, (char *)&tmp, sizeof(XcmsColor)); return(XcmsSuccess); } else { return(XcmsFailure); } } else if (tmp.spec.TekHVC.V <= prevValue + EPS && tmp.spec.TekHVC.V >= prevValue - EPS) { rFactor *= 0.5; /* selective relaxation employed */ } } if (nCount >= nMaxCount) { /* avoid using fabs */ ftmp1 = lastValue - savedValue; if (ftmp1 < 0.0) ftmp1 = -ftmp1; ftmp2 = tmp.spec.TekHVC.V - savedValue; if (ftmp2 < 0.0) ftmp2 = -ftmp2; if (ftmp1 < ftmp2) { tmp.spec.TekHVC.V = lastValue; tmp.spec.TekHVC.C = lastChroma; } } } /* make sure to return the input hue */ tmp.spec.TekHVC.H = hue; memcpy((char *)pColor_return, (char *)&tmp, sizeof(XcmsColor)); return(XcmsSuccess); } libX11-1.6.3/src/xcms/cmsCmap.c000064401431060000012000000274601247741723500163570ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * NAME * XcmsCmap.c - Client Colormap Management Routines * * DESCRIPTION * Routines that store additional information about * colormaps being used by the X Client. * * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include "Xutil.h" #include "Cmap.h" #include "Cv.h" /* * FORWARD DECLARATIONS */ static void _XcmsFreeClientCmaps(Display *dpy); /************************************************************************ * * * PRIVATE INTERFACES * * * ************************************************************************/ /* * NAME * CmapRecForColormap * * SYNOPSIS */ static XcmsCmapRec * CmapRecForColormap( Display *dpy, Colormap cmap) /* * DESCRIPTION * Find the corresponding XcmsCmapRec for cmap. In not found * this routines attempts to create one. * * RETURNS * Returns NULL if failed; otherwise the address to * the corresponding XcmsCmapRec. * */ { XcmsCmapRec *pRec; int nScrn; int i, j; XVisualInfo visualTemplate; /* Template of the visual we want */ XVisualInfo *visualList; /* List for visuals that match */ int nVisualsMatched; /* Number of visuals that match */ Window tmpWindow; Visual *vp; unsigned long border = 0; _XAsyncHandler async; _XAsyncErrorState async_state; for (pRec = (XcmsCmapRec *)dpy->cms.clientCmaps; pRec != NULL; pRec = pRec->pNext) { if (pRec->cmapID == cmap) { return(pRec); } } /* * Can't find an XcmsCmapRec associated with cmap in our records. * Let's try to see if its a default colormap */ nScrn = ScreenCount(dpy); for (i = 0; i < nScrn; i++) { if (cmap == DefaultColormap(dpy, i)) { /* It is ... lets go ahead and store that info */ if ((pRec = _XcmsAddCmapRec(dpy, cmap, RootWindow(dpy, i), DefaultVisual(dpy, i))) == NULL) { return((XcmsCmapRec *)NULL); } pRec->ccc = XcmsCreateCCC( dpy, i, /* screenNumber */ DefaultVisual(dpy, i), (XcmsColor *)NULL, /* clientWhitePt */ (XcmsCompressionProc)NULL, /* gamutCompProc */ (XPointer)NULL, /* gamutCompClientData */ (XcmsWhiteAdjustProc)NULL, /* whitePtAdjProc */ (XPointer)NULL /* whitePtAdjClientData */ ); return(pRec); } } /* * Nope, its not a default colormap, so it's probably a foreign color map * of which we have no specific details. Let's go through the * rigorous process of finding this colormap: * for each screen * for each screen's visual types * create a window with cmap specified as the colormap * if successful * Add a CmapRec * Create an XcmsCCC * return the CmapRec * else * continue */ async_state.error_code = 0; /* don't care */ async_state.major_opcode = X_CreateWindow; async_state.minor_opcode = 0; for (i = 0; i < nScrn; i++) { visualTemplate.screen = i; visualList = XGetVisualInfo(dpy, VisualScreenMask, &visualTemplate, &nVisualsMatched); if (visualList == NULL) { continue; } /* * Attempt to create a window with cmap */ j = 0; do { vp = (visualList+j)->visual; LockDisplay(dpy); { register xCreateWindowReq *req; GetReq(CreateWindow, req); async_state.min_sequence_number = dpy->request; async_state.max_sequence_number = dpy->request; async_state.error_count = 0; async.next = dpy->async_handlers; async.handler = _XAsyncErrorHandler; async.data = (XPointer)&async_state; dpy->async_handlers = &async; req->parent = RootWindow(dpy, i); req->x = 0; req->y = 0; req->width = 1; req->height = 1; req->borderWidth = 0; req->depth = (visualList+j)->depth; req->class = CopyFromParent; req->visual = vp->visualid; tmpWindow = req->wid = XAllocID(dpy); req->mask = CWBorderPixel | CWColormap; req->length += 2; Data32 (dpy, (long *) &border, 4); Data32 (dpy, (long *) &cmap, 4); } { xGetInputFocusReply rep; register xReq *req; GetEmptyReq(GetInputFocus, req); (void) _XReply (dpy, (xReply *)&rep, 0, xTrue); } DeqAsyncHandler(dpy, &async); UnlockDisplay(dpy); SyncHandle(); } while (async_state.error_count > 0 && ++j < nVisualsMatched); Xfree(visualList); /* * if successful */ if (j < nVisualsMatched) { if ((pRec = _XcmsAddCmapRec(dpy, cmap, tmpWindow, vp)) == NULL) return((XcmsCmapRec *)NULL); pRec->ccc = XcmsCreateCCC( dpy, i, /* screenNumber */ vp, (XcmsColor *)NULL, /* clientWhitePt */ (XcmsCompressionProc)NULL, /* gamutCompProc */ (XPointer)NULL, /* gamutCompClientData */ (XcmsWhiteAdjustProc)NULL, /* whitePtAdjProc */ (XPointer)NULL /* whitePtAdjClientData */ ); XDestroyWindow(dpy, tmpWindow); return(pRec); } } return(NULL); } /************************************************************************ * * * API PRIVATE INTERFACES * * * ************************************************************************/ /* * NAME * _XcmsAddCmapRec * * SYNOPSIS */ XcmsCmapRec * _XcmsAddCmapRec( Display *dpy, Colormap cmap, Window windowID, Visual *visual) /* * DESCRIPTION * Create an XcmsCmapRec for the specified cmap, windowID, * and visual, then adds it to its list of CmapRec's. * * RETURNS * Returns NULL if failed; otherwise the address to * the added XcmsCmapRec. * */ { XcmsCmapRec *pNew; if ((pNew = Xcalloc(1, sizeof(XcmsCmapRec))) == NULL) { return((XcmsCmapRec *)NULL); } pNew->cmapID = cmap; pNew->dpy = dpy; pNew->windowID = windowID; pNew->visual = visual; pNew->pNext = (XcmsCmapRec *)dpy->cms.clientCmaps; dpy->cms.clientCmaps = (XPointer)pNew; dpy->free_funcs->clientCmaps = _XcmsFreeClientCmaps; /* * Note, we don't create the XcmsCCC for pNew->ccc here because * it may require the use of XGetWindowAttributes (a round trip request) * to determine the screen. */ return(pNew); } /* * NAME * _XcmsCopyCmapRecAndFree * * SYNOPSIS */ XcmsCmapRec * _XcmsCopyCmapRecAndFree( Display *dpy, Colormap src_cmap, Colormap copy_cmap) /* * DESCRIPTION * Augments Xlib's XCopyColormapAndFree() to copy * XcmsCmapRecs. * * RETURNS * Returns NULL if failed; otherwise the address to * the copy XcmsCmapRec. * */ { XcmsCmapRec *pRec_src; XcmsCmapRec *pRec_copy; if ((pRec_src = CmapRecForColormap(dpy, src_cmap)) != NULL) { pRec_copy =_XcmsAddCmapRec(dpy, copy_cmap, pRec_src->windowID, pRec_src->visual); if (pRec_copy != NULL && pRec_src->ccc) { pRec_copy->ccc = Xcalloc(1, sizeof(XcmsCCCRec)); memcpy((char *)pRec_copy->ccc, (char *)pRec_src->ccc, sizeof(XcmsCCCRec)); } return(pRec_copy); } return((XcmsCmapRec *)NULL); } /* * NAME * _XcmsDeleteCmapRec * * SYNOPSIS */ void _XcmsDeleteCmapRec( Display *dpy, Colormap cmap) /* * DESCRIPTION * Removes and frees the specified XcmsCmapRec structure * from the linked list of structures. * * RETURNS * void * */ { XcmsCmapRec **pPrevPtr; XcmsCmapRec *pRec; int scr; /* If it is the default cmap for a screen, do not delete it, * because the server will not actually free it */ for (scr = ScreenCount(dpy); --scr >= 0; ) { if (cmap == DefaultColormap(dpy, scr)) return; } /* search for it in the list */ pPrevPtr = (XcmsCmapRec **)&dpy->cms.clientCmaps; while ((pRec = *pPrevPtr) && (pRec->cmapID != cmap)) { pPrevPtr = &pRec->pNext; } if (pRec) { if (pRec->ccc) { XcmsFreeCCC(pRec->ccc); } *pPrevPtr = pRec->pNext; Xfree(pRec); } } /* * NAME * _XcmsFreeClientCmaps * * SYNOPSIS */ static void _XcmsFreeClientCmaps( Display *dpy) /* * DESCRIPTION * Frees all XcmsCmapRec structures in the linked list * and sets dpy->cms.clientCmaps to NULL. * * RETURNS * void * */ { XcmsCmapRec *pRecNext, *pRecFree; pRecNext = (XcmsCmapRec *)dpy->cms.clientCmaps; while (pRecNext != NULL) { pRecFree = pRecNext; pRecNext = pRecNext->pNext; if (pRecFree->ccc) { /* Free the XcmsCCC structure */ XcmsFreeCCC(pRecFree->ccc); } /* Now free the XcmsCmapRec structure */ Xfree(pRecFree); } dpy->cms.clientCmaps = (XPointer)NULL; } /************************************************************************ * * * PUBLIC INTERFACES * * * ************************************************************************/ /* * NAME * XcmsCCCOfColormap * * SYNOPSIS */ XcmsCCC XcmsCCCOfColormap( Display *dpy, Colormap cmap) /* * DESCRIPTION * Finds the XcmsCCC associated with the specified colormap. * * RETURNS * Returns NULL if failed; otherwise the address to * the associated XcmsCCC structure. * */ { XWindowAttributes windowAttr; XcmsCmapRec *pRec; int nScrn = ScreenCount(dpy); int i; if ((pRec = CmapRecForColormap(dpy, cmap)) != NULL) { if (pRec->ccc) { /* XcmsCmapRec already has a XcmsCCC */ return(pRec->ccc); } /* * The XcmsCmapRec does not have a XcmsCCC yet, so let's create * one. But first, we need to know the screen associated with * cmap, so use XGetWindowAttributes() to extract that * information. Unless, of course there is only one screen!! */ if (nScrn == 1) { /* Assume screenNumber == 0 */ return(pRec->ccc = XcmsCreateCCC( dpy, 0, /* screenNumber */ pRec->visual, (XcmsColor *)NULL, /* clientWhitePt */ (XcmsCompressionProc)NULL, /* gamutCompProc */ (XPointer)NULL, /* gamutCompClientData */ (XcmsWhiteAdjustProc)NULL, /* whitePtAdjProc */ (XPointer)NULL /* whitePtAdjClientData */ )); } else { if (XGetWindowAttributes(dpy, pRec->windowID, &windowAttr)) { for (i = 0; i < nScrn; i++) { if (ScreenOfDisplay(dpy, i) == windowAttr.screen) { return(pRec->ccc = XcmsCreateCCC( dpy, i, /* screenNumber */ pRec->visual, (XcmsColor *)NULL, /* clientWhitePt */ (XcmsCompressionProc)NULL, /* gamutCompProc */ (XPointer)NULL, /* gamutCompClientData */ (XcmsWhiteAdjustProc)NULL, /* whitePtAdjProc */ (XPointer)NULL /* whitePtAdjClientData */ )); } } } } } /* * No such cmap */ return(NULL); } XcmsCCC XcmsSetCCCOfColormap( Display *dpy, Colormap cmap, XcmsCCC ccc) { XcmsCCC prev_ccc = NULL; XcmsCmapRec *pRec; pRec = CmapRecForColormap(dpy, cmap); if (pRec) { prev_ccc = pRec->ccc; pRec->ccc = ccc; } return prev_ccc; } libX11-1.6.3/src/xcms/Luv.c000064401431060000012000000235511247741723500155370ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of XCMS based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * NAME * CIELuv.c * * DESCRIPTION * This file contains routines that support the CIE L*u*v* * color space to include conversions to and from the CIE * XYZ space. * * DOCUMENTATION * "TekColor Color Management System, System Implementor's Manual" * and * Fred W. Billmeyer & Max Saltzman, "Principles of Color * Technology", John Wily & Sons, Inc, 1981. */ #ifdef HAVE_CONFIG_H #include #endif #include #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" #include /* sscanf */ /* * FORWARD DECLARATIONS */ static int CIELuv_ParseString(register char *spec, XcmsColor *pColor); static Status XcmsCIELuv_ValidSpec(XcmsColor *pColor); /* * DEFINES * Internal definitions that need NOT be exported to any package * or program using this package. */ #ifdef DBL_EPSILON # define XMY_DBL_EPSILON DBL_EPSILON #else # define XMY_DBL_EPSILON 0.00001 #endif /* * LOCAL VARIABLES */ /* * NULL terminated list of functions applied to get from CIELuv to CIEXYZ */ static XcmsConversionProc Fl_CIELuv_to_CIEXYZ[] = { XcmsCIELuvToCIEuvY, XcmsCIEuvYToCIEXYZ, NULL }; /* * NULL terminated list of functions applied to get from CIEXYZ to CIELuv */ static XcmsConversionProc Fl_CIEXYZ_to_CIELuv[] = { XcmsCIEXYZToCIEuvY, XcmsCIEuvYToCIELuv, NULL }; /* * GLOBALS */ /* * CIE Luv Color Space */ XcmsColorSpace XcmsCIELuvColorSpace = { _XcmsCIELuv_prefix, /* prefix */ XcmsCIELuvFormat, /* id */ CIELuv_ParseString, /* parseString */ Fl_CIELuv_to_CIEXYZ, /* to_CIEXYZ */ Fl_CIEXYZ_to_CIELuv, /* from_CIEXYZ */ 1 }; /************************************************************************ * * * PRIVATE ROUTINES * * * ************************************************************************/ /* * NAME * CIELuv_ParseString * * SYNOPSIS */ static int CIELuv_ParseString( register char *spec, XcmsColor *pColor) /* * DESCRIPTION * This routines takes a string and attempts to convert * it into a XcmsColor structure with XcmsCIELuvFormat. * The assumed CIELuv string syntax is: * CIELuv:// * Where L, u, and v are in string input format for floats * consisting of: * a. an optional sign * b. a string of numbers possibly containing a decimal point, * c. an optional exponent field containing an 'E' or 'e' * followed by a possibly signed integer string. * * RETURNS * 0 if failed, non-zero otherwise. */ { int n; char *pchar; if ((pchar = strchr(spec, ':')) == NULL) { return(XcmsFailure); } n = (int)(pchar - spec); /* * Check for proper prefix. */ if (strncmp(spec, _XcmsCIELuv_prefix, n) != 0) { return(XcmsFailure); } /* * Attempt to parse the value portion. */ if (sscanf(spec + n + 1, "%lf/%lf/%lf", &pColor->spec.CIELuv.L_star, &pColor->spec.CIELuv.u_star, &pColor->spec.CIELuv.v_star) != 3) { char *s; /* Maybe failed due to locale */ int f; if ((s = strdup(spec))) { for (f = 0; s[f]; ++f) if (s[f] == '.') s[f] = ','; else if (s[f] == ',') s[f] = '.'; if (sscanf(s + n + 1, "%lf/%lf/%lf", &pColor->spec.CIELuv.L_star, &pColor->spec.CIELuv.u_star, &pColor->spec.CIELuv.v_star) != 3) { free(s); return(XcmsFailure); } free(s); } else return(XcmsFailure); } pColor->format = XcmsCIELuvFormat; pColor->pixel = 0; return(XcmsCIELuv_ValidSpec(pColor)); } /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * XcmsCIELuv_ValidSpec * * SYNOPSIS */ static Status XcmsCIELuv_ValidSpec( XcmsColor *pColor) /* * DESCRIPTION * Checks if color specification valid for CIE L*u*v*. * * RETURNS * XcmsFailure if invalid, * XcmsSuccess if valid. * */ { if (pColor->format != XcmsCIELuvFormat || (pColor->spec.CIELuv.L_star < 0.0 - XMY_DBL_EPSILON) || (pColor->spec.CIELuv.L_star > 100.0 + XMY_DBL_EPSILON)) { return(XcmsFailure); } return(XcmsSuccess); } /* * NAME * XcmsCIELuvToCIEuvY - convert CIELuv to CIEuvY * * SYNOPSIS */ Status XcmsCIELuvToCIEuvY( XcmsCCC ccc, XcmsColor *pLuv_WhitePt, XcmsColor *pColors_in_out, unsigned int nColors) /* * DESCRIPTION * Converts color specifications in an array of XcmsColor * structures from CIELuv format to CIEuvY format. * * RETURNS * XcmsFailure if failed, * XcmsSuccess if succeeded. * */ { XcmsColor *pColor = pColors_in_out; XcmsColor whitePt; XcmsCIEuvY uvY_return; XcmsFloat tmpVal; register int i; /* * Check arguments */ if (pLuv_WhitePt == NULL || pColors_in_out == NULL) { return(XcmsFailure); } /* * Make sure white point is in CIEuvY form */ if (pLuv_WhitePt->format != XcmsCIEuvYFormat) { /* Make copy of the white point because we're going to modify it */ memcpy((char *)&whitePt, (char *)pLuv_WhitePt, sizeof(XcmsColor)); if (!_XcmsDIConvertColors(ccc, &whitePt, (XcmsColor *)NULL, 1, XcmsCIEuvYFormat)) { return(XcmsFailure); } pLuv_WhitePt = &whitePt; } /* Make sure it is a white point, i.e., Y == 1.0 */ if (pLuv_WhitePt->spec.CIEuvY.Y != 1.0) { return(XcmsFailure); } /* * Now convert each XcmsColor structure to CIEXYZ form */ for (i = 0; i < nColors; i++, pColor++) { /* Make sure original format is CIELuv and is valid */ if (!XcmsCIELuv_ValidSpec(pColor)) { return(XcmsFailure); } if (pColor->spec.CIELuv.L_star < 7.99953624) { uvY_return.Y = pColor->spec.CIELuv.L_star / 903.29; } else { tmpVal = (pColor->spec.CIELuv.L_star + 16.0) / 116.0; uvY_return.Y = tmpVal * tmpVal * tmpVal; /* tmpVal ** 3 */ } if (pColor->spec.CIELuv.L_star == 0.0) { uvY_return.u_prime = pLuv_WhitePt->spec.CIEuvY.u_prime; uvY_return.v_prime = pLuv_WhitePt->spec.CIEuvY.v_prime; } else { tmpVal = 13.0 * (pColor->spec.CIELuv.L_star / 100.0); uvY_return.u_prime = pColor->spec.CIELuv.u_star/tmpVal + pLuv_WhitePt->spec.CIEuvY.u_prime; uvY_return.v_prime = pColor->spec.CIELuv.v_star/tmpVal + pLuv_WhitePt->spec.CIEuvY.v_prime; } /* Copy result to pColor */ memcpy((char *)&pColor->spec, (char *)&uvY_return, sizeof(XcmsCIEuvY)); /* Identify that the format is now CIEuvY */ pColor->format = XcmsCIEuvYFormat; } return(XcmsSuccess); } /* * NAME * XcmsCIEuvYToCIELuv - convert CIEuvY to CIELuv * * SYNOPSIS */ Status XcmsCIEuvYToCIELuv( XcmsCCC ccc, XcmsColor *pLuv_WhitePt, XcmsColor *pColors_in_out, unsigned int nColors) /* * DESCRIPTION * Converts color specifications in an array of XcmsColor * structures from CIEuvY format to CIELab format. * * RETURNS * XcmsFailure if failed, * XcmsSuccess if succeeded. * */ { XcmsColor *pColor = pColors_in_out; XcmsColor whitePt; XcmsCIELuv Luv_return; XcmsFloat tmpVal; register int i; /* * Check arguments */ if (pLuv_WhitePt == NULL || pColors_in_out == NULL) { return(XcmsFailure); } /* * Make sure white point is in CIEuvY form */ if (pLuv_WhitePt->format != XcmsCIEuvYFormat) { /* Make copy of the white point because we're going to modify it */ memcpy((char *)&whitePt, (char *)pLuv_WhitePt, sizeof(XcmsColor)); if (!_XcmsDIConvertColors(ccc, &whitePt, (XcmsColor *)NULL, 1, XcmsCIEuvYFormat)) { return(XcmsFailure); } pLuv_WhitePt = &whitePt; } /* Make sure it is a white point, i.e., Y == 1.0 */ if (pLuv_WhitePt->spec.CIEuvY.Y != 1.0) { return(XcmsFailure); } /* * Now convert each XcmsColor structure to CIEXYZ form */ for (i = 0; i < nColors; i++, pColor++) { if (!_XcmsCIEuvY_ValidSpec(pColor)) { return(XcmsFailure); } /* Now convert the uvY to Luv */ Luv_return.L_star = (pColor->spec.CIEuvY.Y < 0.008856) ? (pColor->spec.CIEuvY.Y * 903.29) : ((XcmsFloat)(XCMS_CUBEROOT(pColor->spec.CIEuvY.Y) * 116.0) - 16.0); tmpVal = 13.0 * (Luv_return.L_star / 100.0); Luv_return.u_star = tmpVal * (pColor->spec.CIEuvY.u_prime - pLuv_WhitePt->spec.CIEuvY.u_prime); Luv_return.v_star = tmpVal * (pColor->spec.CIEuvY.v_prime - pLuv_WhitePt->spec.CIEuvY.v_prime); /* Copy result to pColor */ memcpy((char *)&pColor->spec, (char *)&Luv_return, sizeof(XcmsCIELuv)); /* Identify that the format is now CIEuvY */ pColor->format = XcmsCIELuvFormat; } return(XcmsSuccess); } libX11-1.6.3/src/xcms/HVCMnV.c000064401431060000012000000122351247741723500160270ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. TekColor is a * trademark of Tektronix, Inc. The term "TekHVC" designates a particular * color space that is the subject of U.S. Patent No. 4,985,853 (equivalent * foreign patents pending). Permission is hereby granted to use, copy, * modify, sell, and otherwise distribute this software and its * documentation for any purpose and without fee, provided that: * * 1. This copyright, permission, and disclaimer notice is reproduced in * all copies of this software and any modification thereof and in * supporting documentation; * 2. Any color-handling application which displays TekHVC color * cooordinates identifies these as TekHVC color coordinates in any * interface that displays these coordinates and in any associated * documentation; * 3. The term "TekHVC" is always used, and is only used, in association * with the mathematical derivations of the TekHVC Color Space, * including those provided in this file and any equivalent pathways and * mathematical derivations, regardless of digital (e.g., floating point * or integer) representation. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * NAME * TekHVCMnV.c * * DESCRIPTION * Source for XcmsTekHVCQueryMinV gamut boundary querying routine. * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" /* * DEFINES */ #define EPS 0.001 /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * XcmsTekHVCQueryMinV - Compute minimum value for hue and chroma * * SYNOPSIS */ Status XcmsTekHVCQueryMinV ( XcmsCCC ccc, XcmsFloat hue, XcmsFloat chroma, XcmsColor *pColor_return) /* * DESCRIPTION * Return the minimum value for a specific hue, and the * corresponding chroma. The input color specification * may be in any format, however output is in XcmsTekHVCFormat. * * Since this routine works with the value within * pColor_return intermediate results may be returned * even though it may be invalid. * * ASSUMPTIONS * This routine assumes that the white point associated with * the color specification is the Screen White Point. The * Screen White Point will also be associated with the * returned color specification. * * RETURNS * XcmsFailure - Failure * XcmsSuccess - Succeeded with no modifications * */ { XcmsCCCRec myCCC; XcmsColor tmp; XcmsColor max_vc; /* * Check Arguments */ if (ccc == NULL || pColor_return == NULL) { return(XcmsFailure); } /* * Insure TekHVC installed */ if (XcmsAddColorSpace(&XcmsTekHVCColorSpace) == XcmsFailure) { return(XcmsFailure); } /* Use my own CCC */ memcpy ((char *)&myCCC, (char *)ccc, sizeof(XcmsCCCRec)); myCCC.clientWhitePt.format = XcmsUndefinedFormat;/* inherit screen white pt */ myCCC.gamutCompProc = (XcmsCompressionProc)NULL;/* no gamut comp func */ tmp.spec.TekHVC.H = hue; tmp.spec.TekHVC.V = 100.0; tmp.spec.TekHVC.C = chroma; tmp.pixel = pColor_return->pixel; tmp.format = XcmsTekHVCFormat; /* Check for a valid HVC */ if (!_XcmsTekHVC_CheckModify (&tmp)) { return(XcmsFailure); } /* Step 1: compute the maximum value and chroma for this hue. */ /* This copy may be overkill but it preserves the pixel etc. */ memcpy((char *)&max_vc, (char *)&tmp, sizeof(XcmsColor)); if (_XcmsTekHVCQueryMaxVCRGB (&myCCC, max_vc.spec.TekHVC.H, &max_vc, (XcmsRGBi *)NULL) == XcmsFailure) { return(XcmsFailure); } /* Step 2: find the intersection with the maximum hvc and chroma line. */ if (tmp.spec.TekHVC.C > max_vc.spec.TekHVC.C + EPS) { /* If the chroma is to large then return maximum hvc. */ tmp.spec.TekHVC.C = max_vc.spec.TekHVC.C; tmp.spec.TekHVC.V = max_vc.spec.TekHVC.V; } else { tmp.spec.TekHVC.V = tmp.spec.TekHVC.C * max_vc.spec.TekHVC.V / max_vc.spec.TekHVC.C; if (tmp.spec.TekHVC.V > max_vc.spec.TekHVC.V) { tmp.spec.TekHVC.V = max_vc.spec.TekHVC.V; } else if (tmp.spec.TekHVC.V < 0.0) { tmp.spec.TekHVC.V = tmp.spec.TekHVC.C = 0.0; } } if (_XcmsTekHVC_CheckModify (&tmp)) { memcpy ((char *) pColor_return, (char *) &tmp, sizeof (XcmsColor)); return(XcmsSuccess); } else { return(XcmsFailure); } } libX11-1.6.3/src/xcms/HVCMxV.c000064401431060000012000000177111247741723500160450ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. TekColor is a * trademark of Tektronix, Inc. The term "TekHVC" designates a particular * color space that is the subject of U.S. Patent No. 4,985,853 (equivalent * foreign patents pending). Permission is hereby granted to use, copy, * modify, sell, and otherwise distribute this software and its * documentation for any purpose and without fee, provided that: * * 1. This copyright, permission, and disclaimer notice is reproduced in * all copies of this software and any modification thereof and in * supporting documentation; * 2. Any color-handling application which displays TekHVC color * cooordinates identifies these as TekHVC color coordinates in any * interface that displays these coordinates and in any associated * documentation; * 3. The term "TekHVC" is always used, and is only used, in association * with the mathematical derivations of the TekHVC Color Space, * including those provided in this file and any equivalent pathways and * mathematical derivations, regardless of digital (e.g., floating point * or integer) representation. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * NAME * TekHVCMxV.c * * DESCRIPTION * Source for the XcmsTekHVCQueryMaxV() gamut boundary * querying routine. * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include #include "Cv.h" /* * DEFINES */ #define MAXBISECTCOUNT 100 #define EPS 0.001 /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * XcmsTekHVCQueryMaxV - Compute maximum value for a hue and chroma * * SYNOPSIS */ Status XcmsTekHVCQueryMaxV( XcmsCCC ccc, XcmsFloat hue, XcmsFloat chroma, XcmsColor *pColor_return) /* * DESCRIPTION * Return the maximum value for a specified hue and chroma. * * ASSUMPTIONS * This routine assumes that the white point associated with * the color specification is the Screen White Point. The * Screen White Point will also be associated with the * returned color specification. * * RETURNS * XcmsFailure - Failure * XcmsSuccess - Succeeded with no modifications * */ { XcmsCCCRec myCCC; XcmsColor tmp; XcmsColor max_vc; XcmsRGBi rgb_saved; int nCount, nMaxCount; XcmsFloat nT, nChroma, savedChroma, lastValue, lastChroma, prevChroma; XcmsFloat rFactor; XcmsFloat ftmp1, ftmp2; /* * Check Arguments */ if (ccc == NULL || pColor_return == NULL) { return(XcmsFailure); } /* * Insure TekHVC installed */ if (XcmsAddColorSpace(&XcmsTekHVCColorSpace) == XcmsFailure) { return(XcmsFailure); } /* setup the CCC to use for the conversions. */ memcpy ((char *) &myCCC, (char *) ccc, sizeof(XcmsCCCRec)); myCCC.clientWhitePt.format = XcmsUndefinedFormat; myCCC.gamutCompProc = (XcmsCompressionProc) NULL; tmp.spec.TekHVC.H = hue; tmp.spec.TekHVC.V = 0.0; tmp.spec.TekHVC.C = chroma; tmp.pixel = pColor_return->pixel; tmp.format = XcmsTekHVCFormat; if (!_XcmsTekHVC_CheckModify (&tmp)) { return(XcmsFailure); } /* Step 1: compute the maximum value and chroma for this hue. */ /* This copy may be overkill but it preserves the pixel etc. */ memcpy((char *)&max_vc, (char *)&tmp, sizeof(XcmsColor)); hue = max_vc.spec.TekHVC.H; if (_XcmsTekHVCQueryMaxVCRGB(&myCCC, max_vc.spec.TekHVC.H, &max_vc, &rgb_saved) == XcmsFailure) { return(XcmsFailure); } if (max_vc.spec.TekHVC.C < tmp.spec.TekHVC.C) { /* * If the chroma is greater than the chroma for the * maximum value/chroma point then the value is the * the value for the maximum value, chroma point. * This is an error but it I return the best approximation I can. * Thus the inconsistency. */ tmp.spec.TekHVC.C = max_vc.spec.TekHVC.C; tmp.spec.TekHVC.V = max_vc.spec.TekHVC.V; memcpy ((char *) pColor_return, (char *) &tmp, sizeof (XcmsColor)); return(XcmsSuccess); } else if (max_vc.spec.TekHVC.C == tmp.spec.TekHVC.C) { /* * If the chroma is equal to the chroma for the * maximum value/chroma point then the value is the * the value for the maximum value, chroma point. */ tmp.spec.TekHVC.V = max_vc.spec.TekHVC.V; memcpy ((char *) pColor_return, (char *) &tmp, sizeof (XcmsColor)); return(XcmsSuccess); } else { /* must do a bisection here to compute the maximum value */ /* save the structure input so that any elements that */ /* are not touched are recopied later in the routine. */ nChroma = savedChroma = tmp.spec.TekHVC.C; tmp.spec.TekHVC.C = max_vc.spec.TekHVC.C; tmp.spec.TekHVC.V = max_vc.spec.TekHVC.V; lastChroma = -1.0; lastValue = -1.0; nMaxCount = MAXBISECTCOUNT; rFactor = 1.0; for (nCount = 0; nCount < nMaxCount; nCount++) { prevChroma = lastChroma; lastValue = tmp.spec.TekHVC.V; lastChroma = tmp.spec.TekHVC.C; nT = (1.0 - (nChroma / max_vc.spec.TekHVC.C)) * rFactor; tmp.spec.RGBi.red = rgb_saved.red * (1.0 - nT) + nT; tmp.spec.RGBi.green = rgb_saved.green * (1.0 - nT) + nT; tmp.spec.RGBi.blue = rgb_saved.blue * (1.0 - nT) + nT; tmp.format = XcmsRGBiFormat; /* convert from RGB to HVC */ if (_XcmsConvertColorsWithWhitePt(&myCCC, &tmp, &myCCC.pPerScrnInfo->screenWhitePt, 1, XcmsTekHVCFormat, (Bool *) NULL) == XcmsFailure) { return(XcmsFailure); } /* Now check the return against what is expected */ if (tmp.spec.TekHVC.C <= savedChroma + EPS && tmp.spec.TekHVC.C >= savedChroma - EPS) { tmp.spec.TekHVC.H = hue; /* use the saved hue */ memcpy ((char *) pColor_return, (char *) &tmp, sizeof (XcmsColor)); return(XcmsSuccess); } nChroma += savedChroma - tmp.spec.TekHVC.C; if (nChroma > max_vc.spec.TekHVC.C) { nChroma = max_vc.spec.TekHVC.C; rFactor *= 0.5; /* selective relaxation employed */ } else if (nChroma < 0.0) { /* avoid using fabs */ ftmp1 = lastChroma - savedChroma; if (ftmp1 < 0.0) ftmp1 = -ftmp1; ftmp2 = tmp.spec.TekHVC.C - savedChroma; if (ftmp2 < 0.0) ftmp2 = -ftmp2; if (ftmp1 < ftmp2) { tmp.spec.TekHVC.V = lastValue; tmp.spec.TekHVC.C = lastChroma; } /* make sure to return the input hue */ tmp.spec.TekHVC.H = hue; if (!_XcmsTekHVC_CheckModify(&tmp)) { return(XcmsFailure); } memcpy ((char *) pColor_return, (char *) &tmp, sizeof (XcmsColor)); return(XcmsSuccess); } else if (tmp.spec.TekHVC.C <= prevChroma + EPS && tmp.spec.TekHVC.C >= prevChroma - EPS) { rFactor *= 0.5; /* selective relaxation employed */ } } if (nCount >= nMaxCount) { /* avoid using fabs */ ftmp1 = lastChroma - savedChroma; if (ftmp1 < 0.0) ftmp1 = -ftmp1; ftmp2 = tmp.spec.TekHVC.C - savedChroma; if (ftmp2 < 0.0) ftmp2 = -ftmp2; if (ftmp1 < ftmp2) { tmp.spec.TekHVC.V = lastValue; tmp.spec.TekHVC.C = lastChroma; } } } /* make sure to return the input hue */ tmp.spec.TekHVC.H = hue; memcpy ((char *) pColor_return, (char *) &tmp, sizeof (XcmsColor)); return(XcmsSuccess); } ekHVCMxV.c * * DESCRIPTION * Source for the XcmsTeklibX11-1.6.3/src/xcms/cmsGlobls.c000064401431060000012000000100671247741723500167140ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * NAME * XcmsGlobls.c * * DESCRIPTION * Source file containing Xcms globals * * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" /* * GLOBALS * Variables declared in this package that are allowed * to be used globally. */ /* * Initial array of Device Independent Color Spaces */ XcmsColorSpace *_XcmsDIColorSpacesInit[] = { &XcmsCIEXYZColorSpace, &XcmsCIEuvYColorSpace, &XcmsCIExyYColorSpace, &XcmsCIELabColorSpace, &XcmsCIELuvColorSpace, &XcmsTekHVCColorSpace, &XcmsUNDEFINEDColorSpace, NULL }; /* * Pointer to the array of pointers to XcmsColorSpace structures for * Device-Independent Color Spaces that are currently accessible by * the color management system. End of list is indicated by a NULL pointer. */ XcmsColorSpace **_XcmsDIColorSpaces = _XcmsDIColorSpacesInit; /* * Initial array of Device Dependent Color Spaces */ XcmsColorSpace *_XcmsDDColorSpacesInit[] = { &XcmsRGBColorSpace, &XcmsRGBiColorSpace, NULL }; /* * Pointer to the array of pointers to XcmsColorSpace structures for * Device-Dependent Color Spaces that are currently accessible by * the color management system. End of list is indicated by a NULL pointer. */ XcmsColorSpace **_XcmsDDColorSpaces = &_XcmsDDColorSpacesInit[0]; /* * Initial array of Screen Color Characterization Function Sets */ XcmsFunctionSet *_XcmsSCCFuncSetsInit[] = { &XcmsLinearRGBFunctionSet, #ifdef GRAY &XcmsGrayFunctionSet, #endif /* GRAY */ NULL}; /* * Pointer to the array of pointers to XcmsSCCFuncSet structures * (Screen Color Characterization Function Sets) that are currently * accessible by the color management system. End of list is * indicated by a NULL pointer. */ XcmsFunctionSet **_XcmsSCCFuncSets = _XcmsSCCFuncSetsInit; /* * X Consortium Registered Device-Independent Color Spaces * Note that prefix must be in lowercase. */ const char _XcmsCIEXYZ_prefix[] = "ciexyz"; const char _XcmsCIEuvY_prefix[] = "cieuvy"; const char _XcmsCIExyY_prefix[] = "ciexyy"; const char _XcmsCIELab_prefix[] = "cielab"; const char _XcmsCIELuv_prefix[] = "cieluv"; const char _XcmsTekHVC_prefix[] = "tekhvc"; /* * Registered Device-Dependent Color Spaces */ const char _XcmsRGBi_prefix[] = "rgbi"; const char _XcmsRGB_prefix[] = "rgb"; XcmsRegColorSpaceEntry _XcmsRegColorSpaces[] = { { _XcmsCIEXYZ_prefix, XcmsCIEXYZFormat }, { _XcmsCIEuvY_prefix, XcmsCIEuvYFormat }, { _XcmsCIExyY_prefix, XcmsCIExyYFormat }, { _XcmsCIELab_prefix, XcmsCIELabFormat }, { _XcmsCIELuv_prefix, XcmsCIELuvFormat }, { _XcmsTekHVC_prefix, XcmsTekHVCFormat }, { _XcmsRGB_prefix, XcmsRGBFormat }, { _XcmsRGBi_prefix, XcmsRGBiFormat }, { NULL, 0 } }; libX11-1.6.3/src/xcms/PrOfId.c000064401431060000012000000047641247741723500161210ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * NAME * XcmsPrOfId.c * * DESCRIPTION * Source for XcmsPrefixOfFormat() * * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" /* * NAME * XcmsPrefixOfId * * SYNOPSIS */ char * XcmsPrefixOfFormat( XcmsColorFormat id) /* * DESCRIPTION * Returns the color space prefix for the specified color * space ID if the color space is found in the Color * Conversion Context. * * RETURNS * Returns a color space prefix. * * CAVEATS * Space is allocated for the returned string, therefore, * the application is responsible for freeing (using XFree) * the space. * */ { XcmsColorSpace **papColorSpaces; /* * First try Device-Independent color spaces */ papColorSpaces = _XcmsDIColorSpaces; if (papColorSpaces != NULL) { while (*papColorSpaces != NULL) { if ((*papColorSpaces)->id == id) { return strdup((*papColorSpaces)->prefix); } papColorSpaces++; } } /* * Next try Device-Dependent color spaces */ papColorSpaces = _XcmsDDColorSpaces; if (papColorSpaces != NULL) { while (*papColorSpaces != NULL) { if ((*papColorSpaces)->id == id) { return strdup((*papColorSpaces)->prefix); } papColorSpaces++; } } return(NULL); } libX11-1.6.3/src/xcms/cmsLkCol.c000064401431060000012000000126351247741723500165010ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * NAME * XcmsLkCol.c * * DESCRIPTION * Source for XcmsLookupColor * * */ #ifdef HAVE_CONFIG_H #include #endif #include #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" /* * NAME * XcmsLookupColor - * * SYNOPSIS */ Status XcmsLookupColor ( Display *dpy, Colormap cmap, _Xconst char *colorname, XcmsColor *pColor_exact_return, XcmsColor *pColor_scrn_return, XcmsColorFormat result_format) /* * DESCRIPTION * The XcmsLookupColor function finds the color specification * associated with a color name in the Device-Independent Color * Name Database. * RETURNS * This function returns both the color specification found in the * database (db specification) and the color specification for the * color displayable by the specified screen (screen * specification). The calling routine sets the format for these * returned specifications in the XcmsColor format component. * If XcmsUndefinedFormat, the specification is returned in the * format used to store the color in the database. */ { Status retval1 = XcmsSuccess; Status retval2 = XcmsSuccess; XcmsCCC ccc; register int n; xLookupColorReply reply; register xLookupColorReq *req; XColor def, scr; /* * 0. Check for invalid arguments. */ if (dpy == NULL || colorname[0] == '\0' || pColor_scrn_return == 0 || pColor_exact_return == NULL) { return(XcmsFailure); } if ((ccc = XcmsCCCOfColormap(dpy, cmap)) == (XcmsCCC)NULL) { return(XcmsFailure); } /* * 1. Convert string to a XcmsColor */ if ((retval1 = _XcmsResolveColorString(ccc, &colorname, pColor_exact_return, result_format)) == XcmsFailure) { return(XcmsFailure); } if (retval1 == _XCMS_NEWNAME) { goto PassToServer; } /* * 2. pColor_scrn_return * Assume the pColor_exact_return has already been adjusted to * the Client White Point. * */ /* * Convert to RGB, adjusting for white point differences if necessary. */ memcpy((char *)pColor_scrn_return, (char *)pColor_exact_return, sizeof(XcmsColor)); if (pColor_scrn_return->format == XcmsRGBFormat) { retval2 = XcmsSuccess; } else if ((retval2 = XcmsConvertColors(ccc, pColor_scrn_return, 1, XcmsRGBFormat, (Bool *)NULL)) == XcmsFailure) { return(XcmsFailure); } /* * Then, convert XcmsColor structure to the target specification * format. Note that we must use NULL instead of passing * pCompressed. */ if (result_format == XcmsUndefinedFormat) { result_format = pColor_exact_return->format; } if (result_format == XcmsRGBFormat) { _XcmsUnresolveColor(ccc, pColor_scrn_return); } else { _XcmsResolveColor(ccc, pColor_scrn_return); if (XcmsConvertColors(ccc, pColor_scrn_return, 1, result_format, (Bool *) NULL) == XcmsFailure) { return(XcmsFailure); } } return(retval1 > retval2 ? retval1 : retval2); PassToServer: /* * Xcms and i18n methods failed, so lets pass it to the server * for parsing. */ LockDisplay(dpy); GetReq (LookupColor, req); req->cmap = cmap; req->nbytes = n = strlen(colorname); req->length += (n + 3) >> 2; Data (dpy, colorname, (long)n); if (!_XReply (dpy, (xReply *) &reply, 0, xTrue)) { UnlockDisplay(dpy); SyncHandle(); return (XcmsFailure); } def.red = reply.exactRed; def.green = reply.exactGreen; def.blue = reply.exactBlue; scr.red = reply.screenRed; scr.green = reply.screenGreen; scr.blue = reply.screenBlue; UnlockDisplay(dpy); SyncHandle(); _XColor_to_XcmsRGB(ccc, &def, pColor_exact_return, 1); _XColor_to_XcmsRGB(ccc, &scr, pColor_scrn_return, 1); /* * Then, convert XcmsColor structure to the target specification * format. Note that we must use NULL instead of passing * pCompressed. */ if (result_format != XcmsRGBFormat && result_format != XcmsUndefinedFormat) { if (XcmsConvertColors(ccc, pColor_exact_return, 1, result_format, (Bool *) NULL) == XcmsFailure) { return(XcmsFailure); } if (XcmsConvertColors(ccc, pColor_scrn_return, 1, result_format, (Bool *) NULL) == XcmsFailure) { return(XcmsFailure); } } return(XcmsSuccess); } libX11-1.6.3/src/xcms/OfCCC.c000064401431060000012000000060031247741723500156370ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * NAME * XcmsOfCCC.c - Color Conversion Context Querying Routines * * DESCRIPTION * Routines to query components of a Color Conversion * Context structure. * * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlib.h" #include "Xcms.h" /************************************************************************ * * * PUBLIC INTERFACES * * * ************************************************************************/ /* * NAME * XcmsDisplayOfCCC * * SYNOPSIS */ Display * XcmsDisplayOfCCC( XcmsCCC ccc) /* * DESCRIPTION * Queries the Display of the specified CCC. * * RETURNS * Pointer to the Display. * */ { return(ccc->dpy); } /* * NAME * XcmsVisualOfCCC * * SYNOPSIS */ Visual * XcmsVisualOfCCC( XcmsCCC ccc) /* * DESCRIPTION * Queries the Visual of the specified CCC. * * RETURNS * Pointer to the Visual. * */ { return(ccc->visual); } /* * NAME * XcmsScreenNumberOfCCC * * SYNOPSIS */ int XcmsScreenNumberOfCCC( XcmsCCC ccc) /* * DESCRIPTION * Queries the screen number of the specified CCC. * * RETURNS * screen number. * */ { return(ccc->screenNumber); } /* * NAME * XcmsScreenWhitePointOfCCC * * SYNOPSIS */ XcmsColor * XcmsScreenWhitePointOfCCC( XcmsCCC ccc) /* * DESCRIPTION * Queries the screen white point of the specified CCC. * * RETURNS * Pointer to the XcmsColor containing the screen white point. * */ { return(&ccc->pPerScrnInfo->screenWhitePt); } /* * NAME * XcmsClientWhitePointOfCCC * * SYNOPSIS */ XcmsColor * XcmsClientWhitePointOfCCC( XcmsCCC ccc) /* * DESCRIPTION * Queries the client white point of the specified CCC. * * RETURNS * Pointer to the XcmsColor containing the client white point. * */ { return(&ccc->clientWhitePt); } libX11-1.6.3/src/xcms/LabGcC.c000064401431060000012000000073341247741723500160450ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of XCMS based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * NAME * CIELabGcC.c * * DESCRIPTION * Source for XcmsCIELabClipuv() gamut compression routine. * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * XcmsCIELabClipab - Reduce the chroma for a hue and L* * * SYNOPSIS */ /* ARGSUSED */ Status XcmsCIELabClipab ( XcmsCCC ccc, XcmsColor *pColors_in_out, unsigned int nColors, unsigned int i, Bool *pCompressed) /* * DESCRIPTION * Reduce the Chroma for a specific hue and chroma to * to bring the given color into the gamut of the * specified device. As required of gamut compression * functions, this routine returns pColor_in_out * in XcmsCIEXYZFormat on successful completion. * * Since this routine works with the L* within * pColor_in_out intermediate results may be returned * even though it may be invalid. * * RETURNS * XcmsFailure - Failure * XcmsSuccess - Succeeded * */ { Status retval; XcmsColor *pColor; /* * Color specification passed as input can be assumed to: * 1. Be in XcmsCIEXYZFormat * 2. Already be white point adjusted for the Screen White Point. * This means that the white point now associated with this * color spec is the Screen White Point (even if the * ccc->clientWhitePt differs). */ pColor = pColors_in_out + i; if (ccc->visual->class < PseudoColor) { /* * GRAY ! */ _XcmsDIConvertColors(ccc, pColor, ScreenWhitePointOfCCC(ccc), 1, XcmsCIELabFormat); _XcmsDIConvertColors(ccc, pColor, ScreenWhitePointOfCCC(ccc), 1, XcmsCIEXYZFormat); if (pCompressed) { *(pCompressed + i) = True; } return(XcmsSuccess); } else { if (pColor->format != XcmsCIELabFormat) { if (_XcmsDIConvertColors(ccc, pColor, &ccc->pPerScrnInfo->screenWhitePt, 1, XcmsCIELabFormat) == XcmsFailure) { return(XcmsFailure); } } if (XcmsCIELabQueryMaxC(ccc, degrees(XCMS_CIELAB_PMETRIC_HUE(pColor->spec.CIELab.a_star, pColor->spec.CIELab.b_star)), pColor->spec.CIELab.L_star, pColor) == XcmsFailure) { return(XcmsFailure); } retval = _XcmsDIConvertColors(ccc, pColor, &ccc->pPerScrnInfo->screenWhitePt, 1, XcmsCIEXYZFormat); if (retval != XcmsFailure && pCompressed != NULL) { *(pCompressed + i) = True; } return(retval); } } libX11-1.6.3/src/xcms/cmsInt.c000064401431060000012000000216721247741723500162300ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * NAME * XcmsInt.c - Xcms API utility routines * * DESCRIPTION * Xcms Application Program Interface (API) utility * routines for hanging information directly onto * the Display structure. * * */ #ifdef HAVE_CONFIG_H #include #endif #include #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" #ifndef XCMSCOMPPROC # define XCMSCOMPPROC XcmsTekHVCClipC #endif /* forward/static */ static void _XcmsFreeDefaultCCCs(Display *dpy); /************************************************************************ * * * API PRIVATE ROUTINES * * * ************************************************************************/ /* * NAME * _XcmsCopyPointerArray * * SYNOPSIS */ XPointer * _XcmsCopyPointerArray( XPointer *pap) /* * DESCRIPTION * Copies an array of NULL terminated pointers. * * RETURNS * Returns NULL if failed; otherwise the address to * the copy. * */ { XPointer *newArray; char **tmp; int n; for (tmp = pap, n = 0; *tmp != NULL; tmp++, n++); n++; /* add 1 to include the NULL pointer */ if ((newArray = Xmalloc(n * sizeof(XPointer)))) { memcpy((char *)newArray, (char *)pap, (unsigned)(n * sizeof(XPointer))); } return((XPointer *)newArray); } /* * NAME * _XcmsFreePointerArray * * SYNOPSIS */ void _XcmsFreePointerArray( XPointer *pap) /* * DESCRIPTION * Frees an array of NULL terminated pointers. * * RETURNS * void * */ { Xfree(pap); } /* * NAME * _XcmsPushPointerArray * * SYNOPSIS */ XPointer * _XcmsPushPointerArray( XPointer *pap, XPointer p, XPointer *papNoFree) /* * DESCRIPTION * Places the specified pointer at the head of an array of NULL * terminated pointers. * * RETURNS * Returns NULL if failed; otherwise the address to * the head of the array. * */ { XPointer *newArray; char **tmp; int n; for (tmp = pap, n = 0; *tmp != NULL; tmp++, n++); /* add 2: 1 for the new pointer and another for the NULL pointer */ n += 2; if ((newArray = Xmalloc(n * sizeof(XPointer)))) { memcpy((char *)(newArray+1),(char *)pap, (unsigned)((n-1) * sizeof(XPointer))); *newArray = p; } if (pap != papNoFree) { _XcmsFreePointerArray(pap); } return((XPointer *)newArray); } /* * NAME * _XcmsInitDefaultCCCs * * SYNOPSIS */ int _XcmsInitDefaultCCCs( Display *dpy) /* * DESCRIPTION * Initializes the Xcms per Display Info structure * (XcmsPerDpyInfo). * * RETURNS * Returns 0 if failed; otherwise non-zero. * */ { int nScrn = ScreenCount(dpy); int i; XcmsCCC ccc; if (nScrn <= 0) { return(0); } /* * Create an array of XcmsCCC structures, one for each screen. * They serve as the screen's default CCC. */ if (!(ccc = Xcalloc((unsigned)nScrn, sizeof(XcmsCCCRec)))) { return(0); } dpy->cms.defaultCCCs = (XPointer)ccc; dpy->free_funcs->defaultCCCs = _XcmsFreeDefaultCCCs; for (i = 0; i < nScrn; i++, ccc++) { ccc->dpy = dpy; ccc->screenNumber = i; ccc->visual = DefaultVisual(dpy, i); /* * Used calloc to allocate memory so: * ccc->clientWhitePt->format == XcmsUndefinedFormat * ccc->gamutCompProc == NULL * ccc->whitePtAdjProc == NULL * ccc->pPerScrnInfo = NULL * * Don't need to create XcmsPerScrnInfo and its functionSet and * pScreenData components until the default CCC is accessed. * Note that the XcmsDefaultCCC routine calls _XcmsInitScrnInto * to do this. */ ccc->gamutCompProc = XCMSCOMPPROC; } return(1); } /* * NAME * _XcmsFreeDefaultCCCs - Free Default CCCs and its PerScrnInfo * * SYNOPSIS */ static void _XcmsFreeDefaultCCCs( Display *dpy) /* * DESCRIPTION * This routine frees the default XcmsCCC's associated with * each screen and its associated substructures as neccessary. * * RETURNS * void * * */ { int nScrn = ScreenCount(dpy); XcmsCCC ccc; int i; /* * Free Screen data in each DefaultCCC * Do not use XcmsFreeCCC here because it will not free * DefaultCCC's. */ ccc = (XcmsCCC)dpy->cms.defaultCCCs; for (i = nScrn; i--; ccc++) { /* * Check if XcmsPerScrnInfo exists. * * This is the only place where XcmsPerScrnInfo structures * are freed since there is only one allocated per Screen. * It just so happens that we place its reference in the * default CCC. */ if (ccc->pPerScrnInfo) { /* Check if SCCData exists */ if (ccc->pPerScrnInfo->state != XcmsInitNone && ccc->pPerScrnInfo->screenData) { (*((XcmsFunctionSet *)ccc->pPerScrnInfo->functionSet)->screenFreeProc) (ccc->pPerScrnInfo->screenData); } Xfree(ccc->pPerScrnInfo); } } /* * Free the array of XcmsCCC structures */ Xfree(dpy->cms.defaultCCCs); dpy->cms.defaultCCCs = (XPointer)NULL; } /* * NAME * _XcmsInitScrnInfo * * SYNOPSIS */ int _XcmsInitScrnInfo( register Display *dpy, int screenNumber) /* * DESCRIPTION * Given a display and screen number, this routine attempts * to initialize the Xcms per Screen Info structure * (XcmsPerScrnInfo). * * RETURNS * Returns zero if initialization failed; non-zero otherwise. */ { XcmsFunctionSet **papSCCFuncSet = _XcmsSCCFuncSets; XcmsCCC defaultccc; /* * Check if the XcmsCCC's for each screen has been created. * Really dont need to be created until some routine uses the Xcms * API routines. */ if ((XcmsCCC)dpy->cms.defaultCCCs == NULL) { if (!_XcmsInitDefaultCCCs(dpy)) { return(0); } } defaultccc = (XcmsCCC)dpy->cms.defaultCCCs + screenNumber; /* * For each SCCFuncSet, try its pInitScrnFunc. * If the function succeeds, then we got it! */ if (!defaultccc->pPerScrnInfo) { /* * This is one of two places where XcmsPerScrnInfo structures * are allocated. There is one allocated per Screen that is * shared among visuals that do not have specific intensity * tables. Other XcmsPerScrnInfo structures are created * for the latter (see XcmsCreateCCC). The ones created * here are referenced by the default CCC. */ if (!(defaultccc->pPerScrnInfo = Xcalloc(1, sizeof(XcmsPerScrnInfo)))) { return(0); } defaultccc->pPerScrnInfo->state = XcmsInitNone; } while (*papSCCFuncSet != NULL) { if ((*(*papSCCFuncSet)->screenInitProc)(dpy, screenNumber, defaultccc->pPerScrnInfo)) { defaultccc->pPerScrnInfo->state = XcmsInitSuccess; return(1); } papSCCFuncSet++; } /* * Use Default SCCData */ return(_XcmsLRGB_InitScrnDefault(dpy, screenNumber, defaultccc->pPerScrnInfo)); } /* * NAME * _XcmsFreeIntensityMaps * * SYNOPSIS */ void _XcmsFreeIntensityMaps( Display *dpy) /* * DESCRIPTION * Frees all XcmsIntensityMap structures in the linked list * and sets dpy->cms.perVisualIntensityMaps to NULL. * * RETURNS * void * */ { XcmsIntensityMap *pNext, *pFree; pNext = (XcmsIntensityMap *)dpy->cms.perVisualIntensityMaps; while (pNext != NULL) { pFree = pNext; pNext = pNext->pNext; (*pFree->pFreeScreenData)(pFree->screenData); /* Now free the XcmsIntensityMap structure */ Xfree(pFree); } dpy->cms.perVisualIntensityMaps = (XPointer)NULL; } /* * NAME * _XcmsGetIntensityMap * * SYNOPSIS */ XcmsIntensityMap * _XcmsGetIntensityMap( Display *dpy, Visual *visual) /* * DESCRIPTION * Attempts to return a per-Visual intensity map. * * RETURNS * Pointer to the XcmsIntensityMap structure if found; * otherwise NULL * */ { VisualID targetID = visual->visualid; XcmsIntensityMap *pNext; pNext = (XcmsIntensityMap *)dpy->cms.perVisualIntensityMaps; while (pNext != NULL) { if (targetID == pNext->visualID) { return(pNext); } pNext = pNext->pNext; } return((XcmsIntensityMap *)NULL); } the screen's default CCC. */ if (!(ccc = Xcalloc((unsigned)nlibX11-1.6.3/src/xcms/SetCCC.c000064401431060000012000000064621247741723500160370ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * NAME * XcmsSetCCC.c - Color Conversion Context Setting Routines * * DESCRIPTION * Routines to set components of a Color Conversion * Context structure. * * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcms.h" /************************************************************************ * * * PUBLIC INTERFACES * * * ************************************************************************/ /* * NAME * XcmsSetWhitePoint * * SYNOPSIS */ Status XcmsSetWhitePoint( XcmsCCC ccc, XcmsColor *pColor) /* * DESCRIPTION * Sets the Client White Point in the specified CCC. * * RETURNS * Returns XcmsSuccess if succeeded; otherwise XcmsFailure. * */ { if (pColor == NULL || pColor->format == XcmsUndefinedFormat) { ccc->clientWhitePt.format = XcmsUndefinedFormat; } else if (pColor->format != XcmsCIEXYZFormat && pColor->format != XcmsCIEuvYFormat && pColor->format != XcmsCIExyYFormat) { return(XcmsFailure); } else { memcpy((char *)&ccc->clientWhitePt, (char *)pColor, sizeof(XcmsColor)); } return(XcmsSuccess); } /* * NAME * XcmsSetCompressionProc * * SYNOPSIS */ XcmsCompressionProc XcmsSetCompressionProc( XcmsCCC ccc, XcmsCompressionProc compression_proc, XPointer client_data) /* * DESCRIPTION * Set the specified CCC's compression function and client data. * * RETURNS * Returns the old compression function. * */ { XcmsCompressionProc old = ccc->gamutCompProc; ccc->gamutCompProc = compression_proc; ccc->gamutCompClientData = client_data; return(old); } /* * NAME * XcmsSetWhiteAdjustProc * * SYNOPSIS */ XcmsWhiteAdjustProc XcmsSetWhiteAdjustProc( XcmsCCC ccc, XcmsWhiteAdjustProc white_adjust_proc, XPointer client_data ) /* * DESCRIPTION * Set the specified CCC's white_adjust function and client data. * * RETURNS * Returns the old white_adjust function. * */ { XcmsWhiteAdjustProc old = ccc->whitePtAdjProc; ccc->whitePtAdjProc = white_adjust_proc; ccc->whitePtAdjClientData = client_data; return(old); } libX11-1.6.3/src/xcms/LuvMnL.c000064401431060000012000000151341247741723500161440ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of XCMS based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * NAME * CIELuvMnL.c * * DESCRIPTION * Source for the XcmsCIELuvQueryMinL() gamut boundary * querying routine. * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include #include "Cv.h" /* * DEFINES */ #define MAXBISECTCOUNT 100 #define EPS (XcmsFloat)0.001 #define START_L_STAR (XcmsFloat)40.0 /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * XcmsCIELuvQueryMinL - Compute max Lstar for a hue and chroma * * SYNOPSIS */ Status XcmsCIELuvQueryMinL( XcmsCCC ccc, XcmsFloat hue_angle, /* hue angle in degrees */ XcmsFloat chroma, XcmsColor *pColor_return) /* * DESCRIPTION * Return the maximum Lstar for a specified hue_angle and chroma. * * ASSUMPTIONS * This routine assumes that the white point associated with * the color specification is the Screen White Point. The * Screen White Point will also be associated with the * returned color specification. * * RETURNS * XcmsFailure - Failure * XcmsSuccess - Succeeded with no modifications * */ { XcmsCCCRec myCCC; XcmsColor max_lc, tmp, prev; XcmsFloat max_chroma, tmp_chroma; XcmsFloat hue, nT, nChroma, lastChroma, prevChroma; XcmsFloat rFactor; XcmsRGBi rgb_saved; int nCount, nMaxCount; /* * Check Arguments */ if (ccc == NULL || pColor_return == NULL) { return(XcmsFailure); } /* setup the CCC to use for the conversions. */ memcpy ((char *) &myCCC, (char *) ccc, sizeof(XcmsCCCRec)); myCCC.clientWhitePt.format = XcmsUndefinedFormat; myCCC.gamutCompProc = (XcmsCompressionProc) NULL; while (hue_angle < 0.0) { hue_angle += 360.0; } while (hue_angle >= 360.0) { hue_angle -= 360.0; } hue = radians(hue_angle); tmp.spec.CIELuv.L_star = START_L_STAR; tmp.spec.CIELuv.u_star = XCMS_CIEUSTAROFHUE(hue, chroma); tmp.spec.CIELuv.v_star = XCMS_CIEVSTAROFHUE(hue, chroma); tmp.pixel = pColor_return->pixel; tmp.format = XcmsCIELuvFormat; /* Step 1: Obtain the maximum L_star and chroma for this hue. */ if (_XcmsCIELuvQueryMaxLCRGB(&myCCC, hue, &max_lc, &rgb_saved) == XcmsFailure) { return(XcmsFailure); } max_chroma = XCMS_CIELUV_PMETRIC_CHROMA(max_lc.spec.CIELuv.u_star, max_lc.spec.CIELuv.v_star); if (max_chroma <= chroma) { /* * If the chroma is greater than the chroma for the * maximum L/chroma point then the L_star is the * the L_star for the maximum L_star/chroma point. * This is an error but I return the best approximation I can. * Thus the inconsistency. */ memcpy ((char *) pColor_return, (char *) &max_lc, sizeof (XcmsColor)); return(XcmsSuccess); } /* * If the chroma is equal to the chroma for the * maximum L_star/chroma point then the L_star is the * the L_star for the maximum L* and chroma point. */ /* if (max_chroma == chroma) { * memcpy ((char *) pColor_return, (char *) &max_lc, sizeof (XcmsColor)); * return(XcmsSuccess); * } */ /* must do a bisection here to compute the maximum L* */ /* save the structure input so that any elements that */ /* are not touched are recopied later in the routine. */ nChroma = chroma; tmp_chroma = max_chroma; lastChroma = -1.0; nMaxCount = MAXBISECTCOUNT; rFactor = 1.0; for (nCount = 0; nCount < nMaxCount; nCount++) { prevChroma = lastChroma; lastChroma = tmp_chroma; nT = (nChroma - max_chroma) / max_chroma * rFactor; memcpy ((char *)&prev, (char *)&tmp, sizeof(XcmsColor)); tmp.spec.RGBi.red = rgb_saved.red + (rgb_saved.red * nT); tmp.spec.RGBi.green = rgb_saved.green + (rgb_saved.green * nT); tmp.spec.RGBi.blue = rgb_saved.blue + (rgb_saved.blue * nT); tmp.format = XcmsRGBiFormat; /* convert from RGB to CIELuv */ if (_XcmsConvertColorsWithWhitePt(&myCCC, &tmp, ScreenWhitePointOfCCC(&myCCC), 1, XcmsCIELuvFormat, (Bool *) NULL) == XcmsFailure) { return(XcmsFailure); } /* Now check the return against what is expected */ tmp_chroma = XCMS_CIELUV_PMETRIC_CHROMA(tmp.spec.CIELuv.u_star, tmp.spec.CIELuv.v_star); if (tmp_chroma <= chroma + EPS && tmp_chroma >= chroma - EPS) { /* Found It! */ memcpy ((char *) pColor_return, (char *) &tmp, sizeof (XcmsColor)); return(XcmsSuccess); } nChroma += chroma - tmp_chroma; if (nChroma > max_chroma) { nChroma = max_chroma; rFactor *= 0.5; /* selective relaxation employed */ } else if (nChroma < 0.0) { if (XCMS_FABS(lastChroma - chroma) < XCMS_FABS(tmp_chroma - chroma)) { memcpy ((char *)pColor_return, (char *)&prev, sizeof(XcmsColor)); } else { memcpy ((char *)pColor_return, (char *)&tmp, sizeof(XcmsColor)); } return(XcmsSuccess); } else if (tmp_chroma <= prevChroma + EPS && tmp_chroma >= prevChroma - EPS) { rFactor *= 0.5; /* selective relaxation employed */ } } if (nCount >= nMaxCount) { if (XCMS_FABS(lastChroma - chroma) < XCMS_FABS(tmp_chroma - chroma)) { memcpy ((char *)pColor_return, (char *)&prev, sizeof(XcmsColor)); } else { memcpy ((char *)pColor_return, (char *)&tmp, sizeof(XcmsColor)); } } memcpy ((char *) pColor_return, (char *) &tmp, sizeof (XcmsColor)); return(XcmsSuccess); } libX11-1.6.3/src/xcms/LuvMxL.c000064401431060000012000000151061247741723500161550ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of XCMS based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * NAME * CIELuvMxL.c * * DESCRIPTION * Source for the XcmsCIELuvQueryMaxL() gamut boundary * querying routine. * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include #include "Cv.h" /* * DEFINES */ #define MAXBISECTCOUNT 100 #define EPS (XcmsFloat)0.001 #define START_L_STAR (XcmsFloat)40.0 /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * XcmsCIELuvQueryMaxL - Compute max Lstar for a hue and chroma * * SYNOPSIS */ Status XcmsCIELuvQueryMaxL( XcmsCCC ccc, XcmsFloat hue_angle, /* hue angle in degrees */ XcmsFloat chroma, XcmsColor *pColor_return) /* * DESCRIPTION * Return the maximum Lstar for a specified hue_angle and chroma. * * ASSUMPTIONS * This routine assumes that the white point associated with * the color specification is the Screen White Point. The * Screen White Point will also be associated with the * returned color specification. * * RETURNS * XcmsFailure - Failure * XcmsSuccess - Succeeded with no modifications * */ { XcmsCCCRec myCCC; XcmsColor max_lc, tmp, prev; XcmsFloat max_chroma, tmp_chroma; XcmsFloat hue, nT, nChroma, lastChroma, prevChroma; XcmsFloat rFactor; XcmsRGBi rgb_saved; int nCount, nMaxCount; /* * Check Arguments */ if (ccc == NULL || pColor_return == NULL) { return(XcmsFailure); } /* setup the CCC to use for the conversions. */ memcpy ((char *) &myCCC, (char *) ccc, sizeof(XcmsCCCRec)); myCCC.clientWhitePt.format = XcmsUndefinedFormat; myCCC.gamutCompProc = (XcmsCompressionProc) NULL; while (hue_angle < 0.0) { hue_angle += 360.0; } while (hue_angle >= 360.0) { hue_angle -= 360.0; } hue = radians(hue_angle); tmp.spec.CIELuv.L_star = START_L_STAR; tmp.spec.CIELuv.u_star = XCMS_CIEUSTAROFHUE(hue, chroma); tmp.spec.CIELuv.v_star = XCMS_CIEVSTAROFHUE(hue, chroma); tmp.pixel = pColor_return->pixel; tmp.format = XcmsCIELuvFormat; /* Step 1: Obtain the maximum L_star and chroma for this hue. */ if (_XcmsCIELuvQueryMaxLCRGB(&myCCC, hue, &max_lc, &rgb_saved) == XcmsFailure) { return(XcmsFailure); } max_chroma = XCMS_CIELUV_PMETRIC_CHROMA(max_lc.spec.CIELuv.u_star, max_lc.spec.CIELuv.v_star); if (max_chroma <= chroma) { /* * If the chroma is greater than the chroma for the * maximum L/chroma point then the L_star is the * the L_star for the maximum L_star/chroma point. * This is an error but I return the best approximation I can. * Thus the inconsistency. */ memcpy ((char *) pColor_return, (char *) &max_lc, sizeof (XcmsColor)); return(XcmsSuccess); } /* * If the chroma is equal to the chroma for the * maximum L_star/chroma point then the L_star is the * the L_star for the maximum L* and chroma point. */ /* if (max_chroma == chroma) { * memcpy ((char *) pColor_return, (char *) &max_lc, sizeof (XcmsColor)); * return(XcmsSuccess); * } */ /* must do a bisection here to compute the maximum L* */ /* save the structure input so that any elements that */ /* are not touched are recopied later in the routine. */ nChroma = chroma; tmp_chroma = max_chroma; lastChroma = -1.0; nMaxCount = MAXBISECTCOUNT; rFactor = 1.0; for (nCount = 0; nCount < nMaxCount; nCount++) { prevChroma = lastChroma; lastChroma = tmp_chroma; nT = (1.0 - (nChroma / max_chroma)) * rFactor; memcpy ((char *)&prev, (char *)&tmp, sizeof(XcmsColor)); tmp.spec.RGBi.red = rgb_saved.red * (1.0 - nT) + nT; tmp.spec.RGBi.green = rgb_saved.green * (1.0 - nT) + nT; tmp.spec.RGBi.blue = rgb_saved.blue * (1.0 - nT) + nT; tmp.format = XcmsRGBiFormat; /* convert from RGB to CIELuv */ if (_XcmsConvertColorsWithWhitePt(&myCCC, &tmp, ScreenWhitePointOfCCC(&myCCC), 1, XcmsCIELuvFormat, (Bool *) NULL) == XcmsFailure) { return(XcmsFailure); } /* Now check the return against what is expected */ tmp_chroma = XCMS_CIELUV_PMETRIC_CHROMA(tmp.spec.CIELuv.u_star, tmp.spec.CIELuv.v_star); if (tmp_chroma <= chroma + EPS && tmp_chroma >= chroma - EPS) { /* Found It! */ memcpy ((char *) pColor_return, (char *) &tmp, sizeof (XcmsColor)); return(XcmsSuccess); } nChroma += chroma - tmp_chroma; if (nChroma > max_chroma) { nChroma = max_chroma; rFactor *= 0.5; /* selective relaxation employed */ } else if (nChroma < 0.0) { if (XCMS_FABS(lastChroma - chroma) < XCMS_FABS(tmp_chroma - chroma)) { memcpy ((char *)pColor_return, (char *)&prev, sizeof(XcmsColor)); } else { memcpy ((char *)pColor_return, (char *)&tmp, sizeof(XcmsColor)); } return(XcmsSuccess); } else if (tmp_chroma <= prevChroma + EPS && tmp_chroma >= prevChroma - EPS) { rFactor *= 0.5; /* selective relaxation employed */ } } if (nCount >= nMaxCount) { if (XCMS_FABS(lastChroma - chroma) < XCMS_FABS(tmp_chroma - chroma)) { memcpy ((char *)pColor_return, (char *)&prev, sizeof(XcmsColor)); } else { memcpy ((char *)pColor_return, (char *)&tmp, sizeof(XcmsColor)); } } memcpy ((char *) pColor_return, (char *) &tmp, sizeof (XcmsColor)); return(XcmsSuccess); } ma; XcmsFloat rFactor; XcmsRGBi rgb_saved; int nCount, nMaxCount; /* * Check Arguments */ if (ccc == NULL || pColor_return == NULL) { return(XcmsFailure); } /* setup the CCC to use for the conversions. */ memcpy ((char *) &myCCC, (char *) ccc, sizeof(XcmsCCCRec)); myCCC.clientWhitePt.format = XcmsUndefinedFormat; myCCC.gamutCompProc = (XcmsCompressionProc) NULL; while libX11-1.6.3/src/xcms/HVCWpAj.c000064401431060000012000000074551247741723500162000ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. TekColor is a * trademark of Tektronix, Inc. The term "TekHVC" designates a particular * color space that is the subject of U.S. Patent No. 4,985,853 (equivalent * foreign patents pending). Permission is hereby granted to use, copy, * modify, sell, and otherwise distribute this software and its * documentation for any purpose and without fee, provided that: * * 1. This copyright, permission, and disclaimer notice is reproduced in * all copies of this software and any modification thereof and in * supporting documentation; * 2. Any color-handling application which displays TekHVC color * cooordinates identifies these as TekHVC color coordinates in any * interface that displays these coordinates and in any associated * documentation; * 3. The term "TekHVC" is always used, and is only used, in association * with the mathematical derivations of the TekHVC Color Space, * including those provided in this file and any equivalent pathways and * mathematical derivations, regardless of digital (e.g., floating point * or integer) representation. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * DESCRIPTION * TekHVCWpAj.c * * DESCRIPTION * This file contains routine(s) that support white point * adjustment of color specifications in the TekHVC color * space. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * XcmsTekHVCWhiteShiftColors * * SYNOPSIS */ Status XcmsTekHVCWhiteShiftColors( XcmsCCC ccc, XcmsColor *pWhitePtFrom, XcmsColor *pWhitePtTo, XcmsColorFormat destSpecFmt, XcmsColor *pColors_in_out, unsigned int nColors, Bool *pCompressed) /* * DESCRIPTION * Convert color specifications in an array of XcmsColor structures * for differences in white points. * * RETURNS * XcmsFailure if failed, * XcmsSuccess if succeeded without gamut compression, * XcmsSuccessWithCompression if succeeded with * gamut compression. */ { if (pWhitePtFrom == NULL || pWhitePtTo == NULL || pColors_in_out == NULL) { return(XcmsFailure); } /* * Insure TekHVC installed */ if (XcmsAddColorSpace(&XcmsTekHVCColorSpace) == XcmsFailure) { return(XcmsFailure); } /* * Convert to TekHVC using pWhitePtFrom * We can ignore return value for compression because we are converting * to XcmsTekHVCFormat which is device-independent, not device-dependent. */ if (_XcmsConvertColorsWithWhitePt(ccc, pColors_in_out, pWhitePtFrom, nColors, XcmsTekHVCFormat, pCompressed) == XcmsFailure) { return(XcmsFailure); } /* * Convert from TekHVC to destSpecFmt using pWhitePtTo */ return(_XcmsConvertColorsWithWhitePt(ccc, pColors_in_out, pWhitePtTo, nColors, destSpecFmt, pCompressed)); } libX11-1.6.3/src/xcms/StCol.c000064401431060000012000000046161247741723500160160ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * NAME * XcmsStCol.c * * DESCRIPTION * Source for XcmsStoreColor * * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * XcmsStoreColor - Store Color * * SYNOPSIS */ Status XcmsStoreColor( Display *dpy, Colormap colormap, XcmsColor *pColor_in) /* * DESCRIPTION * Given a device-dependent or device-independent color * specification, this routine will convert it to X RGB * values then use it in a call to XStoreColor. * * RETURNS * XcmsFailure if failed; * XcmsSuccess if it succeeded without gamut compression; * XcmsSuccessWithCompression if it succeeded with gamut * compression; * * Since XStoreColor has no return value this routine * does not return the color specification of the color actually * stored. */ { XcmsColor tmpColor; tmpColor = *pColor_in; return(_XcmsSetGetColor(XStoreColor, dpy, colormap, &tmpColor, XcmsRGBFormat, (Bool *) NULL)); } provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this softwarelibX11-1.6.3/src/xcms/cmsMath.c000064401431060000012000000060461247741723500163650ustar00alancstaff00002660200006 /* Copyright 1990, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ /* * Stephen Gildea, MIT X Consortium, January 1991 */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #ifdef DEBUG #include #endif #include #ifndef DBL_EPSILON #define DBL_EPSILON 1e-6 #endif #ifdef _X_ROOT_STATS int cbrt_loopcount; int sqrt_loopcount; #endif /* Newton's Method: x_n+1 = x_n - ( f(x_n) / f'(x_n) ) */ /* for cube roots, x^3 - a = 0, x_new = x - 1/3 (x - a/x^2) */ double _XcmsCubeRoot(double a) { register double abs_a, cur_guess, delta; #ifdef DEBUG printf("_XcmsCubeRoot passed in %g\n", a); #endif #ifdef _X_ROOT_STATS cbrt_loopcount = 0; #endif if (a == 0.) return 0.; abs_a = a<0. ? -a : a; /* convert to positive to speed loop tests */ /* arbitrary first guess */ if (abs_a > 1.) cur_guess = abs_a/8.; else cur_guess = abs_a*8.; do { #ifdef _X_ROOT_STATS cbrt_loopcount++; #endif delta = (cur_guess - abs_a/(cur_guess*cur_guess))/3.; cur_guess -= delta; if (delta < 0.) delta = -delta; } while (delta >= cur_guess*DBL_EPSILON); if (a < 0.) cur_guess = -cur_guess; #ifdef DEBUG printf("_XcmsCubeRoot returning %g\n", cur_guess); #endif return cur_guess; } /* for square roots, x^2 - a = 0, x_new = x - 1/2 (x - a/x) */ double _XcmsSquareRoot(double a) { register double cur_guess, delta; #ifdef DEBUG printf("_XcmsSquareRoot passed in %g\n", a); #endif #ifdef _X_ROOT_STATS sqrt_loopcount = 0; #endif if (a == 0.) return 0.; if (a < 0.) { /* errno = EDOM; */ return 0.; } /* arbitrary first guess */ if (a > 1.) cur_guess = a/4.; else cur_guess = a*4.; do { #ifdef _X_ROOT_STATS sqrt_loopcount++; #endif delta = (cur_guess - a/cur_guess)/2.; cur_guess -= delta; if (delta < 0.) delta = -delta; } while (delta >= cur_guess*DBL_EPSILON); #ifdef DEBUG printf("_XcmsSquareRoot returning %g\n", cur_guess); #endif return cur_guess; } libX11-1.6.3/src/xcms/Makefile.am000064401431060000012000000050611247741723500166550ustar00alancstaff00002660200006noinst_LTLIBRARIES = libxcms.la AM_CPPFLAGS= \ -I$(top_srcdir)/include \ -I$(top_srcdir)/include/X11 \ -I$(top_builddir)/include \ -I$(top_builddir)/include/X11 \ -I$(top_srcdir)/src/xcms \ -I$(top_srcdir)/src/xkb \ -I$(top_srcdir)/src/xlibi18n \ -I$(top_srcdir)/src \ -D_BSD_SOURCE \ -DXCMSDIR=\"$(X11dir)\" AM_CFLAGS= \ $(X11_CFLAGS) \ $(BIGFONT_CFLAGS) \ $(XMALLOC_ZERO_CFLAGS) \ $(CWARNFLAGS) libxcms_la_SOURCES = \ AddDIC.c \ AddSF.c \ CCC.c \ CvColW.c \ CvCols.c \ Cv.h \ HVC.c \ HVCGcC.c \ HVCGcV.c \ HVCGcVC.c \ HVCMnV.c \ HVCMxC.c \ HVCMxV.c \ HVCMxVC.c \ HVCMxVs.c \ HVCWpAj.c \ IdOfPr.c \ LRGB.c \ Lab.c \ LabGcC.c \ LabGcL.c \ LabGcLC.c \ LabMnL.c \ LabMxC.c \ LabMxL.c \ LabMxLC.c \ LabWpAj.c \ Luv.c \ LuvGcC.c \ LuvGcL.c \ LuvGcLC.c \ LuvMnL.c \ LuvMxC.c \ LuvMxL.c \ LuvMxLC.c \ LuvWpAj.c \ OfCCC.c \ PrOfId.c \ QBlack.c \ QBlue.c \ QGreen.c \ QRed.c \ QWhite.c \ QuCol.c \ QuCols.c \ SetCCC.c \ SetGetCols.c \ StCol.c \ StCols.c \ UNDEFINED.c \ XRGB.c \ XYZ.c \ cmsAllCol.c \ cmsAllNCol.c \ cmsCmap.c \ cmsColNm.c \ cmsGlobls.c \ cmsInt.c \ cmsLkCol.c \ cmsMath.c \ cmsProp.c \ cmsTrig.c \ uvY.c \ xyY.c \ Xcmsint.h X11dir = $(X11_DATADIR) dist_X11_DATA = Xcms.txt if LINT # Check source code with tools like lint & sparse ALL_LINT_FLAGS=$(LINT_FLAGS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) lint: $(LINT) $(ALL_LINT_FLAGS) $(libxcms_la_SOURCES) -lm endif LINT libX11-1.6.3/src/xcms/QWhite.c000064401431060000012000000045451247741723500161740ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * NAME * XcmsQWhite.c - Query White * * DESCRIPTION * Routine to obtain a color specification for full * red, green, and blue intensities. * * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcms.h" /************************************************************************ * * * PUBLIC INTERFACES * * * ************************************************************************/ /* * NAME * XcmsQueryWhite * * SYNOPSIS */ Status XcmsQueryWhite( XcmsCCC ccc, XcmsColorFormat target_format, XcmsColor *pColor_ret) /* * DESCRIPTION * Returns the color specification in the target format for * full intensity red, green, and blue. * * RETURNS * Returns XcmsSuccess, if failed; otherwise XcmsFailure * */ { XcmsColor tmp; tmp.format = XcmsRGBiFormat; tmp.pixel = 0; tmp.spec.RGBi.red = 1.0; tmp.spec.RGBi.green = 1.0; tmp.spec.RGBi.blue = 1.0; if (XcmsConvertColors(ccc, &tmp, 1, target_format, NULL) != XcmsSuccess) { return(XcmsFailure); } memcpy((char *)pColor_ret, (char *)&tmp, sizeof(XcmsColor)); return(XcmsSuccess); } NESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER *libX11-1.6.3/src/xcms/XRGB.c000064401431060000012000000133051247741723500155270ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * NAME * XcmsRtoX.c * * DESCRIPTION * Convert color specifications in XcmsRGB format in one array of * XcmsColor structures to RGB in an array of XColor structures. * * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" /* * LOCAL VARIABLES */ static unsigned short const MASK[17] = { 0x0000, /* 0 bitsPerRGB */ 0x8000, /* 1 bitsPerRGB */ 0xc000, /* 2 bitsPerRGB */ 0xe000, /* 3 bitsPerRGB */ 0xf000, /* 4 bitsPerRGB */ 0xf800, /* 5 bitsPerRGB */ 0xfc00, /* 6 bitsPerRGB */ 0xfe00, /* 7 bitsPerRGB */ 0xff00, /* 8 bitsPerRGB */ 0xff80, /* 9 bitsPerRGB */ 0xffc0, /* 10 bitsPerRGB */ 0xffe0, /* 11 bitsPerRGB */ 0xfff0, /* 12 bitsPerRGB */ 0xfff8, /* 13 bitsPerRGB */ 0xfffc, /* 14 bitsPerRGB */ 0xfffe, /* 15 bitsPerRGB */ 0xffff /* 16 bitsPerRGB */ }; /************************************************************************ * * * API PRIVATE ROUTINES * * * ************************************************************************/ /* * NAME * _XcmsRGB_to_XColor - * * SYNOPSIS */ void _XcmsRGB_to_XColor( XcmsColor *pColors, XColor *pXColors, unsigned int nColors) /* * DESCRIPTION * Translates a color specification in XcmsRGBFormat in a XcmsColor * structure to an XColor structure. * * RETURNS * void. */ { for (; nColors--; pXColors++, pColors++) { pXColors->pixel = pColors->pixel; pXColors->red = pColors->spec.RGB.red; pXColors->green = pColors->spec.RGB.green; pXColors->blue = pColors->spec.RGB.blue; pXColors->flags = (DoRed | DoGreen | DoBlue); } } /* * NAME * _XColor_to_XcmsRGB * * SYNOPSIS */ void _XColor_to_XcmsRGB( XcmsCCC ccc, XColor *pXColors, XcmsColor *pColors, unsigned int nColors) /* * DESCRIPTION * Translates an RGB color specification in an XColor * structure to an XcmsRGB structure. * * IMPORTANT NOTE: Bit replication that may have been caused * with ResolveColor() routine in the X Server is undone * here if requested! For example, if red = 0xcaca and the * bits_per_rgb is 8, then spec.RGB.red will be 0xca00. * * RETURNS * void */ { int bits_per_rgb = ccc->visual->bits_per_rgb; for (; nColors--; pXColors++, pColors++) { pColors->spec.RGB.red = (pXColors->red & MASK[bits_per_rgb]); pColors->spec.RGB.green = (pXColors->green & MASK[bits_per_rgb]); pColors->spec.RGB.blue = (pXColors->blue & MASK[bits_per_rgb]); pColors->format = XcmsRGBFormat; pColors->pixel = pXColors->pixel; } } /* * NAME * _XcmsResolveColor * * SYNOPSIS */ void _XcmsResolveColor( XcmsCCC ccc, XcmsColor *pXcmsColor) /* * DESCRIPTION * Uses the X Server ResolveColor() algorithm to * modify values to closest values supported by hardware. * Old algorithm simply masked low-order bits. The new algorithm * has the effect of replicating significant bits into lower order * bits in order to stretch the hardware value into all 16 bits. * * On a display with N-bit DACs, the "hardware" color is computed as: * * ((unsignedlong)(ClientValue >> (16-N)) * 0xFFFF) / ((1 << N) - 1) * * * RETURNS * void. */ { int shift; int max_color; shift = 16 - ccc->visual->bits_per_rgb; max_color = (1 << ccc->visual->bits_per_rgb) - 1; pXcmsColor->spec.RGB.red = ((unsigned long)(pXcmsColor->spec.RGB.red >> shift) * 0xFFFF) / max_color; pXcmsColor->spec.RGB.green = ((unsigned long)(pXcmsColor->spec.RGB.green >> shift) * 0xFFFF) / max_color; pXcmsColor->spec.RGB.blue = ((unsigned long)(pXcmsColor->spec.RGB.blue >> shift) * 0xFFFF) / max_color; } /* * NAME * _XcmsUnresolveColor * * SYNOPSIS */ void _XcmsUnresolveColor( XcmsCCC ccc, XcmsColor *pColor) /* * DESCRIPTION * Masks out insignificant bits. * * RETURNS * void. * * ASSUMPTIONS * format == XcmsRGBFormat */ { int bits_per_rgb = ccc->visual->bits_per_rgb; pColor->spec.RGB.red &= MASK[bits_per_rgb]; pColor->spec.RGB.green &= MASK[bits_per_rgb]; pColor->spec.RGB.blue &= MASK[bits_per_rgb]; } /* * NAME * _XUnresolveColor * * SYNOPSIS */ void _XUnresolveColor( XcmsCCC ccc, XColor *pXColor) /* * DESCRIPTION * Masks out insignificant bits. * * RETURNS * void. */ { int bits_per_rgb = ccc->visual->bits_per_rgb; pXColor->red &= MASK[bits_per_rgb]; pXColor->green &= MASK[bits_per_rgb]; pXColor->blue &= MASK[bits_per_rgb]; } libX11-1.6.3/src/xcms/AddDIC.c000064401431060000012000000110111247741723500157650ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * NAME * XcmsAddDIC.c * * DESCRIPTION * Source for XcmsAddColorSpace * * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" /* * DEFINES */ #define NextUnregDiCsID(lastid) \ (XCMS_UNREG_ID(lastid) ? ++lastid : XCMS_FIRST_UNREG_DI_ID) #define MAX(x,y) ((x) < (y) ? (y) : (x)) /* * NAME * XcmsAddColorSpace - Add a Device-Independent Color Space * * SYNOPSIS */ Status XcmsAddColorSpace(XcmsColorSpace *pCS) /* * DESCRIPTION * DI Color Spaces are managed on a global basis. * This means that with exception of the provided DI color spaces: * CIEXYZ, CIExyY, CIELab, CIEuvY, CIELuv, and TekHVC * DI color spaces may have different XcmsColorFormat IDs between * clients. So, you must be careful when using XcmsColor * structures between clients! Use the routines XcmsFormatOfPrefix() * and XcmsPrefixOfFormat() appropriately. * * RETURNS * XcmsSuccess if succeeded, otherwise XcmsFailure */ { XcmsColorSpace **papColorSpaces; XcmsColorSpace *ptmpCS; XcmsColorFormat lastID = 0; if ((pCS->id = _XcmsRegFormatOfPrefix(pCS->prefix)) != 0) { if (XCMS_DD_ID(pCS->id)) { /* This is a Device-Dependent Color Space */ return(XcmsFailure); } /* * REGISTERED DI Color Space * then see if the color space has already been added to the * system: * a. If the same ID/prefix and same XcmsColorSpec is found, * then its a duplicate, so return success. * b. If same ID/prefix but different XcmsColorSpec is * found, then add the color space to the front of the * list using the same ID. This allows one to override * an existing DI Color Space. * c. Otherwise none found so just add the color space. */ if ((papColorSpaces = _XcmsDIColorSpaces) != NULL) { while ((ptmpCS = *papColorSpaces++) != NULL) { if (pCS->id == ptmpCS->id) { if (pCS == ptmpCS) { /* a. duplicate*/ return(XcmsSuccess); } /* b. same ID/prefix but different XcmsColorSpace */ break; } } } /* c. None found */ } else { /* * UNREGISTERED DI Color Space * then see if the color space has already been added to the * system: * a. If same prefix and XcmsColorSpec, then * its a duplicate ... return success. * b. If same prefix but different XcmsColorSpec, then * add the color space to the front of the list using * the same ID. This allows one to override an existing * DI Color Space. * c. Otherwise none found so, add the color space using the * next unregistered ID for the connection. */ if ((papColorSpaces = _XcmsDIColorSpaces) != NULL) { while ((ptmpCS = *papColorSpaces++) != NULL) { lastID = MAX(lastID, ptmpCS->id); if (strcmp(pCS->prefix, ptmpCS->prefix) == 0) { if (pCS == ptmpCS) { /* a. duplicate */ return(XcmsSuccess); } /* b. same prefix but different XcmsColorSpec */ pCS->id = ptmpCS->id; goto AddColorSpace; } } } /* c. None found */ pCS->id = NextUnregDiCsID(lastID); } AddColorSpace: if ((papColorSpaces = (XcmsColorSpace **) _XcmsPushPointerArray((XPointer *)_XcmsDIColorSpaces, (XPointer)pCS, (XPointer *)_XcmsDIColorSpacesInit)) == NULL) { return(XcmsFailure); } _XcmsDIColorSpaces = papColorSpaces; return(XcmsSuccess); } libX11-1.6.3/src/xcms/xyY.c000064401431060000012000000232051247741723500155560ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * NAME * CIExyY.c * * DESCRIPTION * This file contains routines that support the CIE xyY * color space to include conversions to and from the CIE * XYZ space. * * DOCUMENTATION * "TekColor Color Management System, System Implementor's Manual" */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" /* * DEFINES */ #define EPS 0.00001 /* some extremely small number */ #ifdef DBL_EPSILON # define XMY_DBL_EPSILON DBL_EPSILON #else # define XMY_DBL_EPSILON 0.00001 #endif /* * FORWARD DECLARATIONS */ static int CIExyY_ParseString(register char *spec, XcmsColor *pColor); static Status XcmsCIExyY_ValidSpec(XcmsColor *pColor); /* * LOCAL VARIABLES */ /* * NULL terminated list of functions applied to get from CIExyY to CIEXYZ */ static XcmsConversionProc Fl_CIExyY_to_CIEXYZ[] = { XcmsCIExyYToCIEXYZ, NULL }; /* * NULL terminated list of functions applied to get from CIEXYZ to CIExyY */ static XcmsConversionProc Fl_CIEXYZ_to_CIExyY[] = { XcmsCIEXYZToCIExyY, NULL }; /* * GLOBALS */ /* * CIE xyY Color Space */ XcmsColorSpace XcmsCIExyYColorSpace = { _XcmsCIExyY_prefix, /* prefix */ XcmsCIExyYFormat, /* id */ CIExyY_ParseString, /* parseString */ Fl_CIExyY_to_CIEXYZ, /* to_CIEXYZ */ Fl_CIEXYZ_to_CIExyY, /* from_CIEXYZ */ 1 }; /************************************************************************ * * * PRIVATE ROUTINES * * * ************************************************************************/ /* * NAME * CIExyY_ParseString * * SYNOPSIS */ static int CIExyY_ParseString( register char *spec, XcmsColor *pColor) /* * DESCRIPTION * This routines takes a string and attempts to convert * it into a XcmsColor structure with XcmsCIExyYFormat. * The assumed CIExyY string syntax is: * CIExyY:// * Where x, y, and Y are in string input format for floats * consisting of: * a. an optional sign * b. a string of numbers possibly containing a decimal point, * c. an optional exponent field containing an 'E' or 'e' * followed by a possibly signed integer string. * * RETURNS * 0 if failed, non-zero otherwise. */ { int n; char *pchar; if ((pchar = strchr(spec, ':')) == NULL) { return(XcmsFailure); } n = (int)(pchar - spec); /* * Check for proper prefix. */ if (strncmp(spec, _XcmsCIExyY_prefix, n) != 0) { return(XcmsFailure); } /* * Attempt to parse the value portion. */ if (sscanf(spec + n + 1, "%lf/%lf/%lf", &pColor->spec.CIExyY.x, &pColor->spec.CIExyY.y, &pColor->spec.CIExyY.Y) != 3) { char *s; /* Maybe failed due to locale */ int f; if ((s = strdup(spec))) { for (f = 0; s[f]; ++f) if (s[f] == '.') s[f] = ','; else if (s[f] == ',') s[f] = '.'; if (sscanf(s + n + 1, "%lf/%lf/%lf", &pColor->spec.CIExyY.x, &pColor->spec.CIExyY.y, &pColor->spec.CIExyY.Y) != 3) { free(s); return(XcmsFailure); } free(s); } else return(XcmsFailure); } pColor->format = XcmsCIExyYFormat; pColor->pixel = 0; return(XcmsCIExyY_ValidSpec(pColor)); } /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * CIExyY_ValidSpec() * * SYNOPSIS */ static Status XcmsCIExyY_ValidSpec( XcmsColor *pColor) /* * DESCRIPTION * Checks a valid CIExyY color specification. * * RETURNS * XcmsFailure if invalid. * XcmsSuccess if valid. * */ { if (pColor->format != XcmsCIExyYFormat || (pColor->spec.CIExyY.x < 0.0 - XMY_DBL_EPSILON) || (pColor->spec.CIExyY.x > 1.0 + XMY_DBL_EPSILON) || (pColor->spec.CIExyY.y < 0.0 - XMY_DBL_EPSILON) || (pColor->spec.CIExyY.y > 1.0 + XMY_DBL_EPSILON) || (pColor->spec.CIExyY.Y < 0.0 - XMY_DBL_EPSILON) || (pColor->spec.CIExyY.Y > 1.0 + XMY_DBL_EPSILON)) { return(XcmsFailure); } return(XcmsSuccess); } /* * NAME * XcmsCIExyYToCIEXYZ - convert CIExyY to CIEXYZ * * SYNOPSIS */ Status XcmsCIExyYToCIEXYZ( XcmsCCC ccc, XcmsColor *pxyY_WhitePt, XcmsColor *pColors_in_out, unsigned int nColors) /* * DESCRIPTION * Converts color specifications in an array of XcmsColor * structures from CIExyY format to CIEXYZ format. * * RETURNS * XcmsFailure if failed, * XcmsSuccess if succeeded. */ { XcmsColor *pColor = pColors_in_out; XcmsColor whitePt; XcmsCIEXYZ XYZ_return; XcmsFloat div; /* temporary storage in case divisor is zero */ XcmsFloat u, v, x, y, z; /* temporary storage */ register int i; /* * Check arguments */ if (pxyY_WhitePt == NULL || pColors_in_out == NULL) { return(XcmsFailure); } /* * Now convert each XcmsColor structure to CIEXYZ form */ for (i = 0; i < nColors; i++, pColor++) { /* Make sure original format is CIExyY and valid */ if (!XcmsCIExyY_ValidSpec(pColor)) { return(XcmsFailure); } if ((div = (-2 * pColor->spec.CIExyY.x) + (12 * pColor->spec.CIExyY.y) + 3) == 0.0) { /* Note that the divisor is zero */ /* This return is abitrary. */ XYZ_return.X = 0; XYZ_return.Y = 0; XYZ_return.Z = 0; } else { /* * Make sure white point is in CIEXYZ form */ if (pxyY_WhitePt->format != XcmsCIEXYZFormat) { /* Make copy of the white point because we're going to modify it */ memcpy((char *)&whitePt, (char *)pxyY_WhitePt, sizeof(XcmsColor)); if (!_XcmsDIConvertColors(ccc, &whitePt, (XcmsColor *)NULL, 1, XcmsCIEXYZFormat)) { return(XcmsFailure); } pxyY_WhitePt = &whitePt; } /* Make sure it is a white point, i.e., Y == 1.0 */ if (pxyY_WhitePt->spec.CIEXYZ.Y != 1.0) { return(XcmsFailure); } /* Convert from xyY to uvY to XYZ */ u = (4 * pColor->spec.CIExyY.x) / div; v = (9 * pColor->spec.CIExyY.y) / div; div = (6.0 * u) - (16.0 * v) + 12.0; if (div == 0.0) { /* Note that the divisor is zero */ /* This return is abitrary. */ if ((div = (6.0 * whitePt.spec.CIEuvY.u_prime) - (16.0 * whitePt.spec.CIEuvY.v_prime) + 12.0) == 0.0) { div = EPS; } x = 9.0 * whitePt.spec.CIEuvY.u_prime / div; y = 4.0 * whitePt.spec.CIEuvY.u_prime / div; } else { /* convert u, v to small xyz */ x = 9.0 * u / div; y = 4.0 * v / div; } z = 1.0 - x - y; if (y == 0.0) y = EPS; /* Have to worry about divide by 0 */ XYZ_return.Y = pColor->spec.CIExyY.Y; XYZ_return.X = x * XYZ_return.Y / y; XYZ_return.Z = z * XYZ_return.Y / y; } /* Copy result to pColor */ memcpy ((char *)&pColor->spec, (char *)&XYZ_return, sizeof(XcmsCIEXYZ)); /* Identify that the format is now CIEXYZ */ pColor->format = XcmsCIEXYZFormat; } return(XcmsSuccess); } /* * NAME * XcmsCIEXYZToCIExyY - convert CIEXYZ to CIExyY * * SYNOPSIS */ /* ARGSUSED */ Status XcmsCIEXYZToCIExyY( XcmsCCC ccc, XcmsColor *pxyY_WhitePt, XcmsColor *pColors_in_out, unsigned int nColors) /* * DESCRIPTION * Converts color specifications in an array of XcmsColor * structures from CIEXYZ format to CIExyY format. * * RETURNS * XcmsFailure if failed, * XcmsSuccess if succeeded. * */ { XcmsColor *pColor = pColors_in_out; XcmsCIExyY xyY_return; XcmsFloat div; /* temporary storage in case divisor is zero */ register int i; /* * Check arguments * pxyY_WhitePt ignored */ if (pColors_in_out == NULL) { return(XcmsFailure); } /* * Now convert each XcmsColor structure to CIEXYZ form */ for (i = 0; i < nColors; i++, pColor++) { if (!_XcmsCIEXYZ_ValidSpec(pColor)) { return(XcmsFailure); } /* Now convert for XYZ to xyY */ if ((div = pColor->spec.CIEXYZ.X + pColor->spec.CIEXYZ.Y + pColor->spec.CIEXYZ.Z) == 0.0) { div = EPS; } xyY_return.x = pColor->spec.CIEXYZ.X / div; xyY_return.y = pColor->spec.CIEXYZ.Y / div; xyY_return.Y = pColor->spec.CIEXYZ.Y; /* Copy result to pColor */ memcpy ((char *)&pColor->spec, (char *)&xyY_return, sizeof(XcmsCIExyY)); /* Identify that the format is now CIEXYZ */ pColor->format = XcmsCIExyYFormat; } return(XcmsSuccess); } Y> * Where x, y, and Y are in string input format for floats * consisting of: * a. an optional sign * b. a string of numbers possibly containing a decimal point, * c. an optional exponent field containing an 'E' or 'e' * followed by a possibly signed integer string. * * RETURNS * 0 if failed, non-zero otherwise. */ { int n; char *pchar; libX11-1.6.3/src/xcms/LabGcL.c000064401431060000012000000132051247741723500160500ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of XCMS based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * NAME * CIELabGcL.c * * DESCRIPTION * Source for XcmsCIELabClipL() gamut compression routine. * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * XcmsCIELabClipL - Return the closest L* * * SYNOPSIS */ /* ARGSUSED */ Status XcmsCIELabClipL ( XcmsCCC ccc, XcmsColor *pColors_in_out, unsigned int nColors, unsigned int i, Bool *pCompressed) /* * DESCRIPTION * Return the closest L* for a specific hue and chroma. * This routine takes any color as input and outputs * a CIE XYZ color. * * Since this routine works with the L* within * pColor_in_out intermediate results may be returned * even though it may be invalid. * * RETURNS * XcmsFailure - Failure * XcmsSuccess - Succeeded * */ { XcmsCCCRec myCCC; XcmsColor *pColor; XcmsColor Lab_max; XcmsFloat hue, chroma, maxChroma; Status retval; /* Use my own CCC */ memcpy ((char *)&myCCC, (char *)ccc, sizeof(XcmsCCCRec)); myCCC.clientWhitePt.format = XcmsUndefinedFormat;/* Inherit Screen WP */ myCCC.gamutCompProc = (XcmsCompressionProc)NULL;/* no gamut compression */ /* * Color specification passed as input can be assumed to: * 1. Be in XcmsCIEXYZFormat * 2. Already be white point adjusted for the Screen White Point. * This means that the white point now associated with this * color spec is the Screen White Point (even if the * ccc->clientWhitePt differs). */ pColor = pColors_in_out + i; if (ccc->visual->class < StaticColor) { /* * GRAY ! */ return(XcmsFailure); } else { /* Convert from CIEXYZ to CIE L*u*v* format */ if (_XcmsDIConvertColors(&myCCC, pColor, ScreenWhitePointOfCCC(&myCCC), 1, XcmsCIELabFormat) == XcmsFailure) { return(XcmsFailure); } hue = XCMS_CIELAB_PMETRIC_HUE(pColor->spec.CIELab.a_star, pColor->spec.CIELab.b_star); chroma = XCMS_CIELAB_PMETRIC_CHROMA(pColor->spec.CIELab.a_star, pColor->spec.CIELab.b_star); /* Step 1: compute the maximum L* and chroma for this hue. */ /* This copy may be overkill but it preserves the pixel etc. */ memcpy((char *)&Lab_max, (char *)pColor, sizeof(XcmsColor)); if (_XcmsCIELabQueryMaxLCRGB (&myCCC, hue, &Lab_max, (XcmsRGBi *)NULL) == XcmsFailure) { return (XcmsFailure); } maxChroma = XCMS_CIELAB_PMETRIC_CHROMA(Lab_max.spec.CIELab.a_star, Lab_max.spec.CIELab.b_star); /* Now check and return the appropriate L* */ if (chroma == maxChroma) { /* When the chroma input is equal to the maximum chroma */ /* merely return the L* for that chroma. */ memcpy((char *)pColor, (char *)&Lab_max, sizeof(XcmsColor)); retval = _XcmsDIConvertColors(&myCCC, pColor, ScreenWhitePointOfCCC(&myCCC), 1, XcmsCIEXYZFormat); } else if (chroma > maxChroma) { /* When the chroma input is greater than the maximum chroma */ /* merely return the L* and chroma for the given hue. */ memcpy((char *)pColor, (char *)&Lab_max, sizeof(XcmsColor)); return (XcmsFailure); } else if (pColor->spec.CIELab.L_star < Lab_max.spec.CIELab.L_star) { /* Find the minimum lightness for the given chroma. */ if (pColor->format != XcmsCIELabFormat) { if (_XcmsDIConvertColors(ccc, pColor, ScreenWhitePointOfCCC(ccc), 1, XcmsCIELabFormat) == XcmsFailure) { return(XcmsFailure); } } if (XcmsCIELabQueryMinL(&myCCC, degrees(hue), chroma, pColor) == XcmsFailure) { return (XcmsFailure); } retval = _XcmsDIConvertColors(&myCCC, pColor, ScreenWhitePointOfCCC(&myCCC), 1, XcmsCIEXYZFormat); } else { /* Find the maximum lightness for the given chroma. */ if (pColor->format != XcmsCIELabFormat) { if (_XcmsDIConvertColors(ccc, pColor, ScreenWhitePointOfCCC(ccc), 1, XcmsCIELabFormat) == XcmsFailure) { return(XcmsFailure); } } if (XcmsCIELabQueryMaxL(&myCCC, degrees(hue), chroma, pColor) == XcmsFailure) { return (XcmsFailure); } retval = _XcmsDIConvertColors(&myCCC, pColor, ScreenWhitePointOfCCC(&myCCC), 1, XcmsCIEXYZFormat); } if (retval != XcmsFailure && pCompressed != NULL) { *(pCompressed + i) = True; } return(retval); } } libX11-1.6.3/src/xcms/QBlue.c000064401431060000012000000046031247741723500157760ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * NAME * XcmsQBlue.c - Query Blue * * DESCRIPTION * Routine to obtain a color specification for full * blue intensity and zero red and green intensities. * * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcms.h" /************************************************************************ * * * PUBLIC INTERFACES * * * ************************************************************************/ /* * NAME * XcmsQueryBlue * * SYNOPSIS */ Status XcmsQueryBlue( XcmsCCC ccc, XcmsColorFormat target_format, XcmsColor *pColor_ret) /* * DESCRIPTION * Returns the color specification in the target format for * full intensity blue and zero intensity red and green. * * RETURNS * Returns XcmsSuccess, if failed; otherwise XcmsFailure * */ { XcmsColor tmp; tmp.format = XcmsRGBiFormat; tmp.pixel = 0; tmp.spec.RGBi.red = 0.0; tmp.spec.RGBi.green = 0.0; tmp.spec.RGBi.blue = 1.0; if (XcmsConvertColors(ccc, &tmp, 1, target_format, NULL) != XcmsSuccess) { return(XcmsFailure); } memcpy((char *)pColor_ret, (char *)&tmp, sizeof(XcmsColor)); return(XcmsSuccess); } libX11-1.6.3/src/xcms/XYZ.c000064401431060000012000000113331247741723500154560ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of XCMS based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * * NAME * CIEXYZ.c * * DESCRIPTION * CIE XYZ Color Space * * */ #ifdef HAVE_CONFIG_H #include #endif #include #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" #include /* sscanf */ /* * DEFINES * Internal definitions that need NOT be exported to any package * or program using this package. */ #ifdef DBL_EPSILON # define XMY_DBL_EPSILON DBL_EPSILON #else # define XMY_DBL_EPSILON 0.00001 #endif /* * FORWARD DECLARATIONS */ static int CIEXYZ_ParseString(register char *spec, XcmsColor *pColor); /* * LOCALS VARIABLES */ static XcmsConversionProc Fl_CIEXYZ_to_CIEXYZ[] = { NULL }; /* * GLOBALS * Variables declared in this package that are allowed * to be used globally. */ /* * CIE XYZ Color Space */ XcmsColorSpace XcmsCIEXYZColorSpace = { _XcmsCIEXYZ_prefix, /* prefix */ XcmsCIEXYZFormat, /* id */ CIEXYZ_ParseString, /* parseString */ Fl_CIEXYZ_to_CIEXYZ, /* to_CIEXYZ */ Fl_CIEXYZ_to_CIEXYZ, /* from_CIEXYZ */ 1 }; /************************************************************************ * * * PRIVATE ROUTINES * * * ************************************************************************/ /* * NAME * CIEXYZ_ParseString * * SYNOPSIS */ static int CIEXYZ_ParseString( register char *spec, XcmsColor *pColor) /* * DESCRIPTION * This routines takes a string and attempts to convert * it into a XcmsColor structure with XcmsCIEXYZFormat. * The assumed CIEXYZ string syntax is: * CIEXYZ:// * Where X, Y, and Z are in string input format for floats * consisting of: * a. an optional sign * b. a string of numbers possibly containing a decimal point, * c. an optional exponent field containing an 'E' or 'e' * followed by a possibly signed integer string. * * RETURNS */ { int n; char *pchar; if ((pchar = strchr(spec, ':')) == NULL) { return(XcmsFailure); } n = (int)(pchar - spec); /* * Check for proper prefix. */ if (strncmp(spec, _XcmsCIEXYZ_prefix, n) != 0) { return(XcmsFailure); } /* * Attempt to parse the value portion. */ if (sscanf(spec + n + 1, "%lf/%lf/%lf", &pColor->spec.CIEXYZ.X, &pColor->spec.CIEXYZ.Y, &pColor->spec.CIEXYZ.Z) != 3) { char *s; /* Maybe failed due to locale */ int f; if ((s = strdup(spec))) { for (f = 0; s[f]; ++f) if (s[f] == '.') s[f] = ','; else if (s[f] == ',') s[f] = '.'; if (sscanf(s + n + 1, "%lf/%lf/%lf", &pColor->spec.CIEXYZ.X, &pColor->spec.CIEXYZ.Y, &pColor->spec.CIEXYZ.Z) != 3) { free(s); return(XcmsFailure); } free(s); } else return(XcmsFailure); } pColor->format = XcmsCIEXYZFormat; pColor->pixel = 0; return(_XcmsCIEXYZ_ValidSpec(pColor)); } /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * XcmsCIELab_ValidSpec * * SYNOPSIS */ Status _XcmsCIEXYZ_ValidSpec( XcmsColor *pColor) /* * DESCRIPTION * Checks if color specification valid for CIE XYZ * * RETURNS * XcmsFailure if invalid, * XcmsSuccess if valid. * */ { if (pColor->format != XcmsCIEXYZFormat || (pColor->spec.CIEXYZ.Y < 0.0 - XMY_DBL_EPSILON) || (pColor->spec.CIEXYZ.Y > 1.0 + XMY_DBL_EPSILON)) { return(XcmsFailure); } return(XcmsSuccess); } libX11-1.6.3/src/xcms/QuCol.c000064401431060000012000000045131247741723500160110ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * NAME * XcmsQuCol.c * * DESCRIPTION * Source for XcmsQueryColors * * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * XcmsQueryColor - Query Color * * SYNOPSIS */ Status XcmsQueryColor( Display *dpy, Colormap colormap, XcmsColor *pXcmsColor_in_out, XcmsColorFormat result_format) /* * DESCRIPTION * This routine uses XQueryColor to obtain the X RGB values * stored in the specified colormap for the specified pixel. * The X RGB values are then converted to the target format as * specified by the format component of the XcmsColor structure. * * RETURNS * XcmsFailure if failed; * XcmsSuccess if it succeeded. * * Returns a color specification of the color stored in the * specified pixel. */ { return(_XcmsSetGetColor(XQueryColor, dpy, colormap, pXcmsColor_in_out, result_format, (Bool *) NULL)); } libX11-1.6.3/src/xcms/CCC.c000064401431060000012000000173041247741723500153600ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * NAME * XcmsCCC.c - Color Conversion Context Routines * * DESCRIPTION * Routines to create, access, and free Color Conversion * Context structures. * * */ /* Copyright 1994, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" /************************************************************************ * * * PUBLIC INTERFACES * * * ************************************************************************/ /* * NAME * XcmsCreateCCC * * SYNOPSIS */ XcmsCCC XcmsCreateCCC( Display *dpy, int screenNumber, Visual *visual, XcmsColor *clientWhitePt, XcmsCompressionProc gamutCompProc, XPointer gamutCompClientData, XcmsWhiteAdjustProc whitePtAdjProc, XPointer whitePtAdjClientData) /* * DESCRIPTION * Given a Display, Screen, Visual, etc., this routine creates * an appropriate Color Conversion Context. * * RETURNS * Returns NULL if failed; otherwise address of the newly * created XcmsCCC. * */ { XcmsCCC pDefaultCCC = XcmsDefaultCCC(dpy, screenNumber); XcmsCCC newccc; XcmsIntensityMap *pIMap; XcmsPerScrnInfo *pNewScrnInfo; if (pDefaultCCC == NULL || !(newccc = Xcalloc(1, sizeof(XcmsCCCRec)))) { return(NULL); } /* * Should inherit the following as result of a memmove(): * dpy * screenNumber * pPerScrnInfo */ memcpy((char *)newccc, (char *)pDefaultCCC, sizeof(XcmsCCCRec)); if (clientWhitePt) { memcpy((char *)&newccc->clientWhitePt, (char *)clientWhitePt, sizeof(XcmsColor)); } if (gamutCompProc) { newccc->gamutCompProc = gamutCompProc; } if (gamutCompClientData) { newccc->gamutCompClientData = gamutCompClientData; } if (whitePtAdjProc) { newccc->whitePtAdjProc = whitePtAdjProc; } if (whitePtAdjClientData) { newccc->whitePtAdjClientData = whitePtAdjClientData; } /* * Now check our list of per-Visual Intensity tables. * If one exists replace the pPerScrnInfo. */ if ((pIMap = _XcmsGetIntensityMap(dpy, visual)) != NULL) { if (!(pNewScrnInfo = Xcalloc(1, sizeof(XcmsPerScrnInfo)))) { Xfree(newccc); return(NULL); } memcpy((char *)pNewScrnInfo, (char *)newccc->pPerScrnInfo, sizeof(XcmsPerScrnInfo)); pNewScrnInfo->screenData = pIMap->screenData; newccc->pPerScrnInfo = pNewScrnInfo; } /* * Set visual component */ newccc->visual = visual; return(newccc); } /* * NAME * XcmsDefaultCCC * * SYNOPSIS */ XcmsCCC XcmsDefaultCCC( Display *dpy, int screenNumber) /* * DESCRIPTION * Given a Display and Screen, this routine creates * returns the Screen's default Color Conversion Context. * Note that a Screen's default CCC is built with the * screen default visual. * * RETURNS * Returns NULL if failed; otherwise address of the * XcmsCCC for the Screen's default CCC. * */ { XcmsCCC ccc; if ((screenNumber < 0) || (screenNumber >= ScreenCount(dpy))) { return((XcmsCCC)NULL); } /* * Check if the XcmsCCC's for each screen has been created */ if ((XcmsCCC)dpy->cms.defaultCCCs == NULL) { if (!_XcmsInitDefaultCCCs(dpy)) { return((XcmsCCC)NULL); } } ccc = (XcmsCCC)dpy->cms.defaultCCCs + screenNumber; if (!ccc->pPerScrnInfo) { /* * Need to create the XcmsPerScrnInfo structure. The * _XcmsInitScrnInfo routine will create the XcmsPerScrnInfo * structure as well as initialize its functionSet and pScreenData * components. */ if (!_XcmsInitScrnInfo(dpy, screenNumber)) { return((XcmsCCC)NULL); } return(ccc); } else { /* * If ccc->pPerScrnInfo->state == XcmsInitSuccess, * then the pPerScrnInfo component has already been initialized * therefore, just return ccc. * If ccc->pPerScrnInfo->state == XcmsInitFailure, * then this means that we already attempted to initialize * the pPerScrnInfo component but failed therefore stuffing * the pPerScrnInfo component with defaults. Just return ccc. * If ccc->pPerScrnInfo->state == XcmsInitNone, * then attempt to initialize the pPerScrnInfo component. */ switch (ccc->pPerScrnInfo->state) { case XcmsInitFailure : /* fall through */ case XcmsInitSuccess : return(ccc); case XcmsInitNone : /* XcmsPerScreenInfo has not been initialized */ if (!_XcmsInitScrnInfo(dpy, screenNumber)) { return((XcmsCCC)NULL); } return(ccc); default : return((XcmsCCC)NULL); } } } /* * NAME * XcmsFreeCCC * * SYNOPSIS */ void XcmsFreeCCC(XcmsCCC ccc) /* * DESCRIPTION * Frees memory associated with a Color Conversion Context * that was created with XcmsCreateCCC(). * * RETURNS * void * */ { if (ccc->dpy->cms.defaultCCCs && ccc == ((XcmsCCC)ccc->dpy->cms.defaultCCCs) + ccc->screenNumber) { /* do not allow clients to free DefaultCCC's */ return; } /* * Note that XcmsPerScrnInfo sub-structures are freed here only if * they are for visuals that have per-Visual intensity tables. * Otherwise the XcmsPerScrnInfo structure is being shared! * For the latter, there is only one allocated per Screen and it just * so happens * that we place its initial reference is placed in the * default CCC. The routine _XcmsFreeDefaultCCCs frees them. */ if (_XcmsGetIntensityMap(ccc->dpy, ccc->visual) != NULL) { Xfree(ccc->pPerScrnInfo); } Xfree(ccc); } libX11-1.6.3/src/xcms/AddSF.c000064401431060000012000000104771247741723500157150ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * NAME * XcmsAddSF.c * * DESCRIPTION * Source for XcmsAddFunctionSet * * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" /* * DEFINES */ #define NextUnregDdCsID(lastid) \ (XCMS_UNREG_ID(lastid) ? ++lastid : XCMS_FIRST_UNREG_DD_ID) #define MIN(x,y) ((x) > (y) ? (y) : (x)) /* * NAME * XcmsAddFunctionSet - Add an Screen Color Characterization * Function Set * * SYNOPSIS */ Status XcmsAddFunctionSet(XcmsFunctionSet *pNewFS) /* * DESCRIPTION * Additional Screen Color Characterization Function Sets are * managed on a global basis. This means that with exception * of the provided DD color spaces: * RGB and RGBi * DD color spaces may have different XcmsColorFormat IDs between * clients. So, you must be careful when using XcmsColorFormat * across clients! Use the routines XcmsFormatOfPrefix() * and XcmsPrefixOfFormat() appropriately. * * RETURNS * XcmsSuccess if succeeded, otherwise XcmsFailure * * CAVEATS * Additional Screen Color Characterization Function Sets * should be added prior to any use of the routine * XcmsCreateCCC(). If not, XcmsCCC structures created * prior to the call of this routines will not have had * a chance to initialize using the added Screen Color * Characterization Function Set. */ { XcmsFunctionSet **papSCCFuncSets = _XcmsSCCFuncSets; XcmsColorSpace **papNewCSs; XcmsColorSpace *pNewCS, **paptmpCS; XcmsColorFormat lastID = 0; if (papSCCFuncSets != NULL) { if ((papNewCSs = pNewFS->DDColorSpaces) == NULL) { /* * Error, new Screen Color Characterization Function Set * missing color spaces */ return(XcmsFailure); } while ((pNewCS = *papNewCSs++) != NULL) { if ((pNewCS->id = _XcmsRegFormatOfPrefix(pNewCS->prefix)) != 0) { if (XCMS_DI_ID(pNewCS->id)) { /* This is a Device-Independent Color Space */ return(XcmsFailure); } /* * REGISTERED DD Color Space * therefore use the registered ID. */ } else { /* * UNREGISTERED DD Color Space * then see if the color space is already in * _XcmsDDColorSpaces. * a. If same prefix, then use the same ID. * b. Otherwise, use a new ID. */ for (paptmpCS = _XcmsDDColorSpaces; *paptmpCS != NULL; paptmpCS++){ lastID = MIN(lastID, (*paptmpCS)->id); if (strcmp(pNewCS->prefix, (*paptmpCS)->prefix) == 0) { pNewCS->id = (*paptmpCS)->id; break; } } if (pNewCS->id == 0) { /* still haven't found one */ pNewCS->id = NextUnregDdCsID(lastID); if ((paptmpCS = (XcmsColorSpace **)_XcmsPushPointerArray( (XPointer *) _XcmsDDColorSpaces, (XPointer) pNewCS, (XPointer *) _XcmsDDColorSpacesInit)) == NULL) { return(XcmsFailure); } _XcmsDDColorSpaces = paptmpCS; } } } } if ((papSCCFuncSets = (XcmsFunctionSet **) _XcmsPushPointerArray((XPointer *) _XcmsSCCFuncSets, (XPointer) pNewFS, (XPointer *)_XcmsSCCFuncSetsInit)) == NULL) { return(XcmsFailure); } _XcmsSCCFuncSets = papSCCFuncSets; return(XcmsSuccess); } libX11-1.6.3/src/xcms/StCols.c000064401431060000012000000060221247741723500161720ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * NAME * XcmsStCols.c * * DESCRIPTION * Source for XcmsStoreColors * * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * XcmsStoreColors - Store Colors * * SYNOPSIS */ Status XcmsStoreColors( Display *dpy, Colormap colormap, XcmsColor *pColors_in, unsigned int nColors, Bool *pCompressed) /* * DESCRIPTION * Given device-dependent or device-independent color * specifications, this routine will convert them to X RGB * values then use it in a call to XStoreColors. * * RETURNS * XcmsFailure if failed; * XcmsSuccess if it succeeded without gamut compression; * XcmsSuccessWithCompression if it succeeded with gamut * compression; * * Since XStoreColors has no return value, this routine * does not return color specifications of the colors actually * stored. */ { XcmsColor Color1; XcmsColor *pColors_tmp; Status retval; /* * Make copy of array of color specifications so we don't * overwrite the contents. */ if (nColors > 1) { pColors_tmp = Xmalloc(nColors * sizeof(XcmsColor)); } else { pColors_tmp = &Color1; } memcpy((char *)pColors_tmp, (char *)pColors_in, nColors * sizeof(XcmsColor)); /* * Call routine to store colors using the copied color structures */ retval = _XcmsSetGetColors (XStoreColors, dpy, colormap, pColors_tmp, nColors, XcmsRGBFormat, pCompressed); /* * Free copies as needed. */ if (nColors > 1) { Xfree(pColors_tmp); } /* * Ah, finally return. */ return(retval); } libX11-1.6.3/src/xcms/QuCols.c000064401431060000012000000045731247741723500162020ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * NAME * XcmsQuCol.c * * DESCRIPTION * Source for XcmsQueryColors * * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * XcmsQueryColors - Query Colors * * SYNOPSIS */ Status XcmsQueryColors( Display *dpy, Colormap colormap, XcmsColor *pXcmsColors_in_out, unsigned int nColors, XcmsColorFormat result_format) /* * DESCRIPTION * This routine uses XQueryColors to obtain the X RGB values * stored in the specified colormap for the specified pixels. * The X RGB values are then converted to the target format as * specified by the format component of the XcmsColor structure. * * RETURNS * XcmsFailure if failed; * XcmsSuccess if it succeeded. * * Returns the color specifications of the colors stored in the * specified pixels. */ { return(_XcmsSetGetColors(XQueryColors, dpy, colormap, pXcmsColors_in_out, nColors, result_format, (Bool *) NULL)); } libX11-1.6.3/src/xcms/LabMxL.c000064401431060000012000000150721247741723500161070ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of XCMS based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * NAME * CIELabMxL.c * * DESCRIPTION * Source for the XcmsCIELabQueryMaxL() gamut boundary * querying routine. * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include #include "Cv.h" /* * DEFINES */ #define MAXBISECTCOUNT 100 #define EPS (XcmsFloat)0.001 #define START_L_STAR (XcmsFloat)40 /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * XcmsCIELabQueryMaxL - Compute max Lstar for a hue and chroma * * SYNOPSIS */ Status XcmsCIELabQueryMaxL( XcmsCCC ccc, XcmsFloat hue_angle, /* hue in degrees */ XcmsFloat chroma, XcmsColor *pColor_return) /* * DESCRIPTION * Return the maximum Lstar for a specified hue_angle and chroma. * * ASSUMPTIONS * This routine assumes that the white point associated with * the color specification is the Screen White Point. The * Screen White Point will also be associated with the * returned color specification. * * RETURNS * XcmsFailure - Failure * XcmsSuccess - Succeeded with no modifications * */ { XcmsCCCRec myCCC; XcmsColor max_lc, tmp, prev; XcmsFloat max_chroma, tmp_chroma; XcmsFloat hue, nT, nChroma, lastChroma, prevChroma; XcmsFloat rFactor; XcmsRGBi rgb_saved; int nCount, nMaxCount; /* * Check Arguments */ if (ccc == NULL || pColor_return == NULL) { return(XcmsFailure); } /* setup the CCC to use for the conversions. */ memcpy ((char *) &myCCC, (char *) ccc, sizeof(XcmsCCCRec)); myCCC.clientWhitePt.format = XcmsUndefinedFormat; myCCC.gamutCompProc = (XcmsCompressionProc) NULL; while (hue_angle < 0.0) { hue_angle += 360.0; } while (hue_angle >= 360.0) { hue_angle -= 360.0; } hue = radians(hue_angle); tmp.spec.CIELab.L_star = START_L_STAR; tmp.spec.CIELab.a_star = XCMS_CIEASTAROFHUE(hue, chroma); tmp.spec.CIELab.b_star = XCMS_CIEBSTAROFHUE(hue, chroma); tmp.pixel = pColor_return->pixel; tmp.format = XcmsCIELabFormat; /* Step 1: Obtain the maximum L_star and chroma for this hue. */ if (_XcmsCIELabQueryMaxLCRGB(&myCCC, hue, &max_lc, &rgb_saved) == XcmsFailure) { return(XcmsFailure); } max_chroma = XCMS_CIELAB_PMETRIC_CHROMA(max_lc.spec.CIELab.a_star, max_lc.spec.CIELab.b_star); if (max_chroma <= chroma) { /* * If the chroma is greater than the chroma for the * maximum L/chroma point then the L_star is the * the L_star for the maximum L_star/chroma point. * This is an error but I return the best approximation I can. * Thus the inconsistency. */ memcpy ((char *) pColor_return, (char *) &max_lc, sizeof (XcmsColor)); return(XcmsSuccess); } /* * If the chroma is equal to the chroma for the * maximum L_star/chroma point then the L_star is the * the L_star for the maximum L* and chroma point. */ /* if (max_chroma == chroma) { * memcpy ((char *) pColor_return, (char *) &max_lc, sizeof (XcmsColor)); * return(XcmsSuccess); * } */ /* must do a bisection here to compute the maximum L* */ /* save the structure input so that any elements that */ /* are not touched are recopied later in the routine. */ nChroma = chroma; tmp_chroma = max_chroma; lastChroma = -1.0; nMaxCount = MAXBISECTCOUNT; rFactor = 1.0; for (nCount = 0; nCount < nMaxCount; nCount++) { prevChroma = lastChroma; lastChroma = tmp_chroma; nT = (1.0 - (nChroma / max_chroma)) * rFactor; memcpy ((char *)&prev, (char *)&tmp, sizeof(XcmsColor)); tmp.spec.RGBi.red = rgb_saved.red * (1.0 - nT) + nT; tmp.spec.RGBi.green = rgb_saved.green * (1.0 - nT) + nT; tmp.spec.RGBi.blue = rgb_saved.blue * (1.0 - nT) + nT; tmp.format = XcmsRGBiFormat; /* convert from RGB to CIELab */ if (_XcmsConvertColorsWithWhitePt(&myCCC, &tmp, ScreenWhitePointOfCCC(&myCCC), 1, XcmsCIELabFormat, (Bool *) NULL) == XcmsFailure) { return(XcmsFailure); } /* Now check the return against what is expected */ tmp_chroma = XCMS_CIELAB_PMETRIC_CHROMA(tmp.spec.CIELab.a_star, tmp.spec.CIELab.b_star); if (tmp_chroma <= chroma + EPS && tmp_chroma >= chroma - EPS) { /* Found It! */ memcpy ((char *) pColor_return, (char *) &tmp, sizeof (XcmsColor)); return(XcmsSuccess); } nChroma += chroma - tmp_chroma; if (nChroma > max_chroma) { nChroma = max_chroma; rFactor *= 0.5; /* selective relaxation employed */ } else if (nChroma < 0.0) { if (XCMS_FABS(lastChroma - chroma) < XCMS_FABS(tmp_chroma - chroma)) { memcpy ((char *)pColor_return, (char *)&prev, sizeof(XcmsColor)); } else { memcpy ((char *)pColor_return, (char *)&tmp, sizeof(XcmsColor)); } return(XcmsSuccess); } else if (tmp_chroma <= prevChroma + EPS && tmp_chroma >= prevChroma - EPS) { rFactor *= 0.5; /* selective relaxation employed */ } } if (nCount >= nMaxCount) { if (XCMS_FABS(lastChroma - chroma) < XCMS_FABS(tmp_chroma - chroma)) { memcpy ((char *)pColor_return, (char *)&prev, sizeof(XcmsColor)); } else { memcpy ((char *)pColor_return, (char *)&tmp, sizeof(XcmsColor)); } } memcpy ((char *) pColor_return, (char *) &tmp, sizeof (XcmsColor)); return(XcmsSuccess); } libX11-1.6.3/src/xcms/LabMnL.c000064401431060000012000000151341247741723500160740ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of XCMS based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * NAME * CIELabMnL.c * * DESCRIPTION * Source for the XcmsCIELabQueryMinL() gamut boundary * querying routine. * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include #include "Cv.h" /* * DEFINES */ #define MAXBISECTCOUNT 100 #define EPS (XcmsFloat)0.001 #define START_L_STAR (XcmsFloat)40.0 /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * XcmsCIELabQueryMinL - Compute max Lstar for a hue and chroma * * SYNOPSIS */ Status XcmsCIELabQueryMinL( XcmsCCC ccc, XcmsFloat hue_angle, /* hue angle in degrees */ XcmsFloat chroma, XcmsColor *pColor_return) /* * DESCRIPTION * Return the maximum Lstar for a specified hue_angle and chroma. * * ASSUMPTIONS * This routine assumes that the white point associated with * the color specification is the Screen White Point. The * Screen White Point will also be associated with the * returned color specification. * * RETURNS * XcmsFailure - Failure * XcmsSuccess - Succeeded with no modifications * */ { XcmsCCCRec myCCC; XcmsColor max_lc, tmp, prev; XcmsFloat max_chroma, tmp_chroma; XcmsFloat hue, nT, nChroma, lastChroma, prevChroma; XcmsFloat rFactor; XcmsRGBi rgb_saved; int nCount, nMaxCount; /* * Check Arguments */ if (ccc == NULL || pColor_return == NULL) { return(XcmsFailure); } /* setup the CCC to use for the conversions. */ memcpy ((char *) &myCCC, (char *) ccc, sizeof(XcmsCCCRec)); myCCC.clientWhitePt.format = XcmsUndefinedFormat; myCCC.gamutCompProc = (XcmsCompressionProc) NULL; while (hue_angle < 0.0) { hue_angle += 360.0; } while (hue_angle >= 360.0) { hue_angle -= 360.0; } hue = radians(hue_angle); tmp.spec.CIELab.L_star = START_L_STAR; tmp.spec.CIELab.a_star = XCMS_CIEASTAROFHUE(hue, chroma); tmp.spec.CIELab.b_star = XCMS_CIEBSTAROFHUE(hue, chroma); tmp.pixel = pColor_return->pixel; tmp.format = XcmsCIELabFormat; /* Step 1: Obtain the maximum L_star and chroma for this hue. */ if (_XcmsCIELabQueryMaxLCRGB(&myCCC, hue, &max_lc, &rgb_saved) == XcmsFailure) { return(XcmsFailure); } max_chroma = XCMS_CIELAB_PMETRIC_CHROMA(max_lc.spec.CIELab.a_star, max_lc.spec.CIELab.b_star); if (max_chroma <= chroma) { /* * If the chroma is greater than the chroma for the * maximum L/chroma point then the L_star is the * the L_star for the maximum L_star/chroma point. * This is an error but I return the best approximation I can. * Thus the inconsistency. */ memcpy ((char *) pColor_return, (char *) &max_lc, sizeof (XcmsColor)); return(XcmsSuccess); } /* * If the chroma is equal to the chroma for the * maximum L_star/chroma point then the L_star is the * the L_star for the maximum L* and chroma point. */ /* if (max_chroma == chroma) { * memcpy ((char *) pColor_return, (char *) &max_lc, sizeof (XcmsColor)); * return(XcmsSuccess); * } */ /* must do a bisection here to compute the maximum L* */ /* save the structure input so that any elements that */ /* are not touched are recopied later in the routine. */ nChroma = chroma; tmp_chroma = max_chroma; lastChroma = -1.0; nMaxCount = MAXBISECTCOUNT; rFactor = 1.0; for (nCount = 0; nCount < nMaxCount; nCount++) { prevChroma = lastChroma; lastChroma = tmp_chroma; nT = (nChroma - max_chroma) / max_chroma * rFactor; memcpy ((char *)&prev, (char *)&tmp, sizeof(XcmsColor)); tmp.spec.RGBi.red = rgb_saved.red + (rgb_saved.red * nT); tmp.spec.RGBi.green = rgb_saved.green + (rgb_saved.green * nT); tmp.spec.RGBi.blue = rgb_saved.blue + (rgb_saved.blue * nT); tmp.format = XcmsRGBiFormat; /* convert from RGB to CIELab */ if (_XcmsConvertColorsWithWhitePt(&myCCC, &tmp, ScreenWhitePointOfCCC(&myCCC), 1, XcmsCIELabFormat, (Bool *) NULL) == XcmsFailure) { return(XcmsFailure); } /* Now check the return against what is expected */ tmp_chroma = XCMS_CIELAB_PMETRIC_CHROMA(tmp.spec.CIELab.a_star, tmp.spec.CIELab.b_star); if (tmp_chroma <= chroma + EPS && tmp_chroma >= chroma - EPS) { /* Found It! */ memcpy ((char *) pColor_return, (char *) &tmp, sizeof (XcmsColor)); return(XcmsSuccess); } nChroma += chroma - tmp_chroma; if (nChroma > max_chroma) { nChroma = max_chroma; rFactor *= 0.5; /* selective relaxation employed */ } else if (nChroma < 0.0) { if (XCMS_FABS(lastChroma - chroma) < XCMS_FABS(tmp_chroma - chroma)) { memcpy ((char *)pColor_return, (char *)&prev, sizeof(XcmsColor)); } else { memcpy ((char *)pColor_return, (char *)&tmp, sizeof(XcmsColor)); } return(XcmsSuccess); } else if (tmp_chroma <= prevChroma + EPS && tmp_chroma >= prevChroma - EPS) { rFactor *= 0.5; /* selective relaxation employed */ } } if (nCount >= nMaxCount) { if (XCMS_FABS(lastChroma - chroma) < XCMS_FABS(tmp_chroma - chroma)) { memcpy ((char *)pColor_return, (char *)&prev, sizeof(XcmsColor)); } else { memcpy ((char *)pColor_return, (char *)&tmp, sizeof(XcmsColor)); } } memcpy ((char *) pColor_return, (char *) &tmp, sizeof (XcmsColor)); return(XcmsSuccess); } libX11-1.6.3/src/xcms/LabMxLC.c000064401431060000012000000145011247741723500162060ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of XCMS based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * * NAME * CIELabMxVC.c * * DESCRIPTION * Source for the XcmsCIELabQueryMaxLC() gamut boundary * querying routine. * * DOCUMENTATION * "TekColor Color Management System, System Implementor's Manual" * and * Fred W. Billmeyer & Max Saltzman, "Principles of Color * Technology", John Wily & Sons, Inc, 1981. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" /* * DEFINES */ #define MIN(x,y) ((x) > (y) ? (y) : (x)) #define MIN3(x,y,z) ((x) > (MIN((y), (z))) ? (MIN((y), (z))) : (x)) #define MAX(x,y) ((x) > (y) ? (x) : (y)) #define MAX3(x,y,z) ((x) > (MAX((y), (z))) ? (x) : (MAX((y), (z)))) #define START_LSTAR (XcmsFloat)40.0 #define START_CHROMA (XcmsFloat)3.6 /************************************************************************ * * * API PRIVATE ROUTINES * * * ************************************************************************/ /* * NAME * _XcmsCIELabQueryMaxLCRGB - Compute maximum L* and chroma. * * SYNOPSIS */ Status _XcmsCIELabQueryMaxLCRGB( XcmsCCC ccc, XcmsFloat hue, /* hue in radians */ XcmsColor *pColor_return, XcmsRGBi *pRGB_return) /* * DESCRIPTION * Return the maximum psychometric chroma for a specified * hue, and the corresponding L*. This is computed * by a binary search of all possible chromas. An assumption * is made that there are no local maxima. Use the unrounded * Max psychometric chroma because the difference check can be * small. * * NOTE: No local CCC is used because this is a private * routine and all routines that call it are expected * to behave properly, i.e. send a local CCC with * no white adjust function and no gamut compression * function. * * This routine only accepts hue in radians as input and outputs * Lab and RGBi. * * RETURNS * XcmsFailure - Failure * XcmsSuccess - Succeeded * */ { XcmsFloat nSmall, nLarge; XcmsColor tmp; tmp.format = XcmsCIELabFormat; /* Use some unreachable color on the given hue */ tmp.spec.CIELab.L_star = START_LSTAR; tmp.spec.CIELab.a_star = XCMS_CIEASTAROFHUE(hue, START_CHROMA); tmp.spec.CIELab.b_star = XCMS_CIEBSTAROFHUE(hue, START_CHROMA); /* * Convert from Lab to RGB * * Note that the CIEXYZ to RGBi conversion routine must stuff the * out of bounds RGBi values in tmp when the ccc->gamutCompProc * is NULL. */ if ((_XcmsConvertColorsWithWhitePt(ccc, &tmp, ScreenWhitePointOfCCC(ccc), (unsigned int)1, XcmsRGBiFormat, (Bool *) NULL) == XcmsFailure) && tmp.format != XcmsRGBiFormat) { return (XcmsFailure); } /* Now pick the smallest RGB */ nSmall = MIN3(tmp.spec.RGBi.red, tmp.spec.RGBi.green, tmp.spec.RGBi.blue); /* Make the smallest RGB equal to zero */ tmp.spec.RGBi.red -= nSmall; tmp.spec.RGBi.green -= nSmall; tmp.spec.RGBi.blue -= nSmall; /* Now pick the largest RGB */ nLarge = MAX3(tmp.spec.RGBi.red, tmp.spec.RGBi.green, tmp.spec.RGBi.blue); /* Scale the RGB values based on the largest one */ tmp.spec.RGBi.red /= nLarge; tmp.spec.RGBi.green /= nLarge; tmp.spec.RGBi.blue /= nLarge; tmp.format = XcmsRGBiFormat; /* If the calling routine wants RGB value give them the ones used. */ if (pRGB_return) { pRGB_return->red = tmp.spec.RGBi.red; pRGB_return->green = tmp.spec.RGBi.green; pRGB_return->blue = tmp.spec.RGBi.blue; } /* Convert from RGBi to Lab */ if (_XcmsConvertColorsWithWhitePt(ccc, &tmp, ScreenWhitePointOfCCC(ccc), 1, XcmsCIELabFormat, (Bool *) NULL) == XcmsFailure) { return (XcmsFailure); } memcpy((char *)pColor_return, (char *)&tmp, sizeof(XcmsColor)); return (XcmsSuccess); } /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * XcmsCIELabQueryMaxLC - Compute maximum L* and chroma. * * SYNOPSIS */ Status XcmsCIELabQueryMaxLC ( XcmsCCC ccc, XcmsFloat hue_angle, /* hue_angle in degrees */ XcmsColor *pColor_return) /* * DESCRIPTION * Return the point of maximum chroma for the specified * hue_angle. * * ASSUMPTIONS * This routine assumes that the white point associated with * the color specification is the Screen White Point. The * Screen White Point will also be associated with the * returned color specification. * * RETURNS * XcmsFailure - Failure * XcmsSuccess - Succeeded * */ { XcmsCCCRec myCCC; /* * Check Arguments */ if (ccc == NULL || pColor_return == NULL) { return(XcmsFailure); } /* Use my own CCC */ memcpy ((char *)&myCCC, (char *)ccc, sizeof(XcmsCCCRec)); myCCC.clientWhitePt.format = XcmsUndefinedFormat; myCCC.gamutCompProc = (XcmsCompressionProc)NULL; while (hue_angle < 0.0) { hue_angle += 360.0; } while (hue_angle >= 360.0) { hue_angle -= 360.0; } return(_XcmsCIELabQueryMaxLCRGB (&myCCC, radians(hue_angle), pColor_return, (XcmsRGBi *)NULL)); } libX11-1.6.3/src/xcms/LabWpAj.c000064401431060000012000000054151247741723500162500ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of XCMS based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * NAME * CIELabWpAj.c * * DESCRIPTION * This file contains routine(s) that support white point * adjustment of color specifications in the CIE L*a*b* color * space. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" /* * EXTERNS */ /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * XcmsCIELabWhiteShiftColors * * SYNOPSIS */ Status XcmsCIELabWhiteShiftColors( XcmsCCC ccc, XcmsColor *pWhitePtFrom, XcmsColor *pWhitePtTo, XcmsColorFormat destSpecFmt, XcmsColor *pColors_in_out, unsigned int nColors, Bool *pCompressed) /* * DESCRIPTION * Adjust color specifications in XcmsColor structures for * differences in white points. * * RETURNS * XcmsFailure if failed, * XcmsSuccess if succeeded without gamut compression, * XcmsSuccessWithCompression if succeeded with gamut * compression. */ { if (pWhitePtFrom == NULL || pWhitePtTo == NULL || pColors_in_out == NULL) { return(0); } /* * Convert to CIELab using pWhitePtFrom */ if (_XcmsConvertColorsWithWhitePt(ccc, pColors_in_out, pWhitePtFrom, nColors, XcmsCIELabFormat, pCompressed) == XcmsFailure) { return(XcmsFailure); } /* * Convert from CIELab to destSpecFmt using pWhitePtTo */ return(_XcmsConvertColorsWithWhitePt(ccc, pColors_in_out, pWhitePtTo, nColors, destSpecFmt, pCompressed)); } libX11-1.6.3/src/xcms/UNDEFINED.c000064401431060000012000000061261247741723500162710ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * * NAME * UNDEFINED.c * * DESCRIPTION * UNDEFINED Color Space * * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" /* * FORWARD DECLARATIONS */ static int DummyParseStringProc( char* /* color_string */, XcmsColor* /* color_return */ ); static Status ReturnZero( XcmsCCC /* ccc */, XcmsColor* /* white_point */, XcmsColor* /* colors */, unsigned int /* ncolors */ ); /* * LOCALS VARIABLES */ static Status (*(Fl_ReturnZero[]))( XcmsCCC /* ccc */, XcmsColor* /* white_point */, XcmsColor* /* colors */, unsigned int /* ncolors */ ) = { ReturnZero, NULL }; /* * GLOBALS * Variables declared in this package that are allowed * to be used globally. */ /* * UNDEFINED Color Space */ XcmsColorSpace XcmsUNDEFINEDColorSpace = { "undefined", /* prefix */ XcmsUndefinedFormat, /* id */ &DummyParseStringProc, /* parseString */ Fl_ReturnZero, /* to_CIEXYZ */ Fl_ReturnZero /* from_CIEXYZ */ }; /************************************************************************ * * * PRIVATE ROUTINES * * * ************************************************************************/ /* * NAME * ReturnZero * * SYNOPSIS */ /* ARGSUSED */ static Status ReturnZero( XcmsCCC ccc /* ccc */, XcmsColor* white /* white_point */, XcmsColor* colors /* colors */, unsigned int ncolors /* ncolors */ ) /* * DESCRIPTION * Does nothing. * * RETURNS * 0 * */ { return(0); } static int DummyParseStringProc( char* color_string /* color_string */, XcmsColor* color_return /* color_return */ ) { return(0); } /* ### EOF ### */ GLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * * NAME * UNDEFINED.c * * DESCRIPTION * UNDEFINED Color Space * * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" /* * FORWARD DECLARATIONS */ static int DummyParseStringProc( char* /* color_string */, XcmsColorlibX11-1.6.3/src/xcms/LuvGcLC.c000064401431060000012000000165061247741723500162320ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of XCMS based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * NAME * CIELuvGcLC.c * * DESCRIPTION * Source for XcmsCIELuvClipLuv() gamut * compression function. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include #include "Cv.h" /* * INTERNALS * Internal defines that need NOT be exported to any package or * program using this package. */ #define MAXBISECTCOUNT 100 /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * XcmsCIELuvClipLuv - Return the closest L* and chroma * * SYNOPSIS */ /* ARGSUSED */ Status XcmsCIELuvClipLuv ( XcmsCCC ccc, XcmsColor *pColors_in_out, unsigned int nColors, unsigned int i, Bool *pCompressed) /* * DESCRIPTION * This routine will find the closest L* and chroma * for a specific hue. The color input is converted to * CIE L*u*v* format and returned as CIE XYZ format. * * Since this routine works with the L* within * pColor_in_out intermediate results may be returned * even though it may be invalid. * * RETURNS * XcmsFailure - Failure * XcmsSuccess - Succeeded * */ { Status retval; XcmsCCCRec myCCC; XcmsColor *pColor; XcmsColor Luv_max; XcmsFloat hue, chroma, maxChroma; XcmsFloat Chroma, bestChroma, Lstar, maxLstar, saveLstar; XcmsFloat bestLstar, bestustar, bestvstar; XcmsFloat nT, saveDist, tmpDist; XcmsRGBi rgb_max; int nCount, nMaxCount, nI, nILast; /* Use my own CCC */ memcpy ((char *)&myCCC, (char *)ccc, sizeof(XcmsCCCRec)); myCCC.clientWhitePt.format = XcmsUndefinedFormat;/* inherit screen white */ myCCC.gamutCompProc = (XcmsCompressionProc)NULL;/* no gamut compression func */ /* * Color specification passed as input can be assumed to: * 1. Be in XcmsCIEXYZFormat * 2. Already be white point adjusted for the Screen White Point. * This means that the white point now associated with this * color spec is the Screen White Point (even if the * ccc->clientWhitePt differs). */ pColor = pColors_in_out + i; if (ccc->visual->class < StaticColor) { /* * GRAY ! */ _XcmsDIConvertColors(ccc, pColor, ScreenWhitePointOfCCC(ccc), 1, XcmsCIELuvFormat); _XcmsDIConvertColors(ccc, pColor, ScreenWhitePointOfCCC(ccc), 1, XcmsCIEXYZFormat); if (pCompressed) { *(pCompressed + i) = True; } return(XcmsSuccess); } /* Convert from CIEXYZ to CIELuv format */ if (_XcmsDIConvertColors(&myCCC, pColor, ScreenWhitePointOfCCC(&myCCC), 1, XcmsCIELuvFormat) == XcmsFailure) { return(XcmsFailure); } /* Step 1: compute the maximum L* and chroma for this hue. */ /* This copy may be overkill but it preserves the pixel etc. */ saveLstar = pColor->spec.CIELuv.L_star; hue = XCMS_CIELUV_PMETRIC_HUE(pColor->spec.CIELuv.u_star, pColor->spec.CIELuv.v_star); chroma = XCMS_CIELUV_PMETRIC_CHROMA(pColor->spec.CIELuv.u_star, pColor->spec.CIELuv.v_star); memcpy((char *)&Luv_max, (char *)pColor, sizeof(XcmsColor)); if (_XcmsCIELuvQueryMaxLCRGB (&myCCC, hue, &Luv_max, &rgb_max) == XcmsFailure) { return (XcmsFailure); } maxLstar = Luv_max.spec.CIELuv.L_star; /* Now check and return the appropriate L* */ if (saveLstar == maxLstar) { /* When the L* input is equal to the maximum L* */ /* merely return the maximum Luv point. */ memcpy((char *)pColor, (char *)&Luv_max, sizeof(XcmsColor)); retval = _XcmsDIConvertColors(&myCCC, pColor, ScreenWhitePointOfCCC(&myCCC), 1, XcmsCIEXYZFormat); } else { /* return the closest point on the hue leaf. */ /* must do a bisection here to compute the delta e. */ maxChroma = XCMS_CIELUV_PMETRIC_CHROMA(Luv_max.spec.CIELuv.u_star, Luv_max.spec.CIELuv.v_star); nMaxCount = MAXBISECTCOUNT; nI = nMaxCount / 2; bestLstar = Lstar = pColor->spec.CIELuv.L_star; bestustar = pColor->spec.CIELuv.u_star; bestvstar = pColor->spec.CIELuv.v_star; bestChroma = Chroma = chroma; saveDist = XCMS_SQRT(((Chroma - maxChroma) * (Chroma - maxChroma)) + ((Lstar - maxLstar) * (Lstar - maxLstar))); for (nCount = 0; nCount < nMaxCount; nCount++) { nT = (XcmsFloat) nI / (XcmsFloat) nMaxCount; if (saveLstar > maxLstar) { pColor->spec.RGBi.red = rgb_max.red * (1.0 - nT) + nT; pColor->spec.RGBi.green = rgb_max.green * (1.0 - nT) + nT; pColor->spec.RGBi.blue = rgb_max.blue * (1.0 - nT) + nT; } else { pColor->spec.RGBi.red = rgb_max.red - (rgb_max.red * nT); pColor->spec.RGBi.green = rgb_max.green - (rgb_max.green * nT); pColor->spec.RGBi.blue = rgb_max.blue - (rgb_max.blue * nT); } pColor->format = XcmsRGBiFormat; /* Convert from RGBi to CIE Luv */ if (_XcmsConvertColorsWithWhitePt(&myCCC, pColor, ScreenWhitePointOfCCC(&myCCC), 1, XcmsCIELuvFormat, (Bool *) NULL) == XcmsFailure) { return (XcmsFailure); } chroma = XCMS_CIELUV_PMETRIC_CHROMA(pColor->spec.CIELuv.u_star, pColor->spec.CIELuv.v_star); tmpDist = XCMS_SQRT(((Chroma - chroma) * (Chroma - chroma)) + ((Lstar - pColor->spec.CIELuv.L_star) * (Lstar - pColor->spec.CIELuv.L_star))); nILast = nI; if (tmpDist > saveDist) { nI /= 2; } else { nI = (nMaxCount + nI) / 2; saveDist = tmpDist; bestLstar = pColor->spec.CIELuv.L_star; bestustar = pColor->spec.CIELuv.u_star; bestvstar = pColor->spec.CIELuv.v_star; bestChroma = chroma; } if (nI == nILast || nI == 0) { break; } } if (bestChroma >= maxChroma) { pColor->spec.CIELuv.L_star = maxLstar; pColor->spec.CIELuv.u_star = Luv_max.spec.CIELuv.u_star; pColor->spec.CIELuv.v_star = Luv_max.spec.CIELuv.v_star; } else { pColor->spec.CIELuv.L_star = bestLstar; pColor->spec.CIELuv.u_star = bestustar; pColor->spec.CIELuv.v_star = bestvstar; } retval = _XcmsDIConvertColors(&myCCC, pColor, ScreenWhitePointOfCCC(&myCCC), 1, XcmsCIEXYZFormat); if (retval != XcmsFailure && pCompressed != NULL) { *(pCompressed + i) = True; } } return(retval); } libX11-1.6.3/src/xcms/cmsTrig.c000064401431060000012000000356721247741723500164100ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. */ /* * It should be pointed out that for simplicity's sake, the * environment parameters are defined as floating point constants, * rather than octal or hexadecimal initializations of allocated * storage areas. This means that the range of allowed numbers * may not exactly match the hardware's capabilities. For example, * if the maximum positive double precision floating point number * is EXACTLY 1.11...E100 and the constant "MAXDOUBLE is * defined to be 1.11E100 then the numbers between 1.11E100 and * 1.11...E100 are considered to be undefined. For most * applications, this will cause no problems. * * An alternate method is to allocate a global static "double" variable, * say "maxdouble", and use a union declaration and initialization * to initialize it with the proper bits for the EXACT maximum value. * This was not done because the only compilers available to the * author did not fully support union initialization features. * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xcmsint.h" /* forward/static */ static double _XcmsModulo(double value, double base); static double _XcmsPolynomial( register int order, double const *coeffs, double x); static double _XcmsModuloF( double val, register double *dp); /* * DEFINES */ #define XCMS_MAXERROR 0.000001 #define XCMS_MAXITER 10000 #define XCMS_PI 3.14159265358979323846264338327950 #define XCMS_TWOPI 6.28318530717958620 #define XCMS_HALFPI 1.57079632679489660 #define XCMS_FOURTHPI 0.785398163397448280 #define XCMS_SIXTHPI 0.523598775598298820 #define XCMS_RADIANS(d) ((d) * XCMS_PI / 180.0) #define XCMS_DEGREES(r) ((r) * 180.0 / XCMS_PI) #ifdef __vax__ #define XCMS_X6_UNDERFLOWS (3.784659e-07) /* X**6 almost underflows*/ #else #define XCMS_X6_UNDERFLOWS (4.209340e-52) /* X**6 almost underflows */ #endif #define XCMS_X16_UNDERFLOWS (5.421010e-20) /* X**16 almost underflows*/ #define XCMS_CHAR_BIT 8 #define XCMS_LONG_MAX 0x7FFFFFFF #define XCMS_DEXPLEN 11 #define XCMS_NBITS(type) (XCMS_CHAR_BIT * (int)sizeof(type)) #define XCMS_FABS(x) ((x) < 0.0 ? -(x) : (x)) /* XCMS_DMAXPOWTWO - largest power of two exactly representable as a double */ #define XCMS_DMAXPOWTWO ((double)(XCMS_LONG_MAX) * \ (1L << ((XCMS_NBITS(double)-XCMS_DEXPLEN) - XCMS_NBITS(int) + 1))) /* * LOCAL VARIABLES */ static double const cos_pcoeffs[] = { 0.12905394659037374438e7, -0.37456703915723204710e6, 0.13432300986539084285e5, -0.11231450823340933092e3 }; static double const cos_qcoeffs[] = { 0.12905394659037373590e7, 0.23467773107245835052e5, 0.20969518196726306286e3, 1.0 }; static double const sin_pcoeffs[] = { 0.20664343336995858240e7, -0.18160398797407332550e6, 0.35999306949636188317e4, -0.20107483294588615719e2 }; static double const sin_qcoeffs[] = { 0.26310659102647698963e7, 0.39270242774649000308e5, 0.27811919481083844087e3, 1.0 }; /* * * FUNCTION * * _XcmsCosine double precision cosine * * KEY WORDS * * cos * machine independent routines * trigonometric functions * math libraries * * DESCRIPTION * * Returns double precision cosine of double precision * floating point argument. * * USAGE * * double _XcmsCosine (x) * double x; * * REFERENCES * * Computer Approximations, J.F. Hart et al, John Wiley & Sons, * 1968, pp. 112-120. * * RESTRICTIONS * * The sin and cos routines are interactive in the sense that * in the process of reducing the argument to the range -PI/4 * to PI/4, each may call the other. Ultimately one or the * other uses a polynomial approximation on the reduced * argument. The sin approximation has a maximum relative error * of 10**(-17.59) and the cos approximation has a maximum * relative error of 10**(-16.18). * * These error bounds assume exact arithmetic * in the polynomial evaluation. Additional rounding and * truncation errors may occur as the argument is reduced * to the range over which the polynomial approximation * is valid, and as the polynomial is evaluated using * finite-precision arithmetic. * * PROGRAMMER * * Fred Fish * * INTERNALS * * Computes cos(x) from: * * (1) Reduce argument x to range -PI to PI. * * (2) If x > PI/2 then call cos recursively * using relation cos(x) = -cos(x - PI). * * (3) If x < -PI/2 then call cos recursively * using relation cos(x) = -cos(x + PI). * * (4) If x > PI/4 then call sin using * relation cos(x) = sin(PI/2 - x). * * (5) If x < -PI/4 then call cos using * relation cos(x) = sin(PI/2 + x). * * (6) If x would cause underflow in approx * evaluation arithmetic then return * sqrt(1.0 - x**2). * * (7) By now x has been reduced to range * -PI/4 to PI/4 and the approximation * from HART pg. 119 can be used: * * cos(x) = ( p(y) / q(y) ) * Where: * * y = x * (4/PI) * * p(y) = SUM [ Pj * (y**(2*j)) ] * over j = {0,1,2,3} * * q(y) = SUM [ Qj * (y**(2*j)) ] * over j = {0,1,2,3} * * P0 = 0.12905394659037374438571854e+7 * P1 = -0.3745670391572320471032359e+6 * P2 = 0.134323009865390842853673e+5 * P3 = -0.112314508233409330923e+3 * Q0 = 0.12905394659037373590295914e+7 * Q1 = 0.234677731072458350524124e+5 * Q2 = 0.2096951819672630628621e+3 * Q3 = 1.0000... * (coefficients from HART table #3843 pg 244) * * * **** NOTE **** The range reduction relations used in * this routine depend on the final approximation being valid * over the negative argument range in addition to the positive * argument range. The particular approximation chosen from * HART satisfies this requirement, although not explicitly * stated in the text. This may not be true of other * approximations given in the reference. * */ double _XcmsCosine(double x) { auto double y; auto double yt2; double retval; if (x < -XCMS_PI || x > XCMS_PI) { x = _XcmsModulo (x, XCMS_TWOPI); if (x > XCMS_PI) { x = x - XCMS_TWOPI; } else if (x < -XCMS_PI) { x = x + XCMS_TWOPI; } } if (x > XCMS_HALFPI) { retval = -(_XcmsCosine (x - XCMS_PI)); } else if (x < -XCMS_HALFPI) { retval = -(_XcmsCosine (x + XCMS_PI)); } else if (x > XCMS_FOURTHPI) { retval = _XcmsSine (XCMS_HALFPI - x); } else if (x < -XCMS_FOURTHPI) { retval = _XcmsSine (XCMS_HALFPI + x); } else if (x < XCMS_X6_UNDERFLOWS && x > -XCMS_X6_UNDERFLOWS) { retval = _XcmsSquareRoot (1.0 - (x * x)); } else { y = x / XCMS_FOURTHPI; yt2 = y * y; retval = _XcmsPolynomial (3, cos_pcoeffs, yt2) / _XcmsPolynomial (3, cos_qcoeffs, yt2); } return (retval); } /* * FUNCTION * * _XcmsModulo double precision modulo * * KEY WORDS * * _XcmsModulo * machine independent routines * math libraries * * DESCRIPTION * * Returns double precision modulo of two double * precision arguments. * * USAGE * * double _XcmsModulo (value, base) * double value; * double base; * * PROGRAMMER * * Fred Fish * */ static double _XcmsModulo(double value, double base) { auto double intpart; value /= base; value = _XcmsModuloF (value, &intpart); value *= base; return(value); } /* * frac = (double) _XcmsModuloF(double val, double *dp) * return fractional part of 'val' * set *dp to integer part of 'val' * * Note -> only compiled for the CA or KA. For the KB/MC, * "math.c" instantiates a copy of the inline function * defined in "math.h". */ static double _XcmsModuloF( double val, register double *dp) { register double abs; /* * Don't use a register for this. The extra precision this results * in on some systems causes problems. */ double ip; /* should check for illegal values here - nan, inf, etc */ abs = XCMS_FABS(val); if (abs >= XCMS_DMAXPOWTWO) { ip = val; } else { ip = abs + XCMS_DMAXPOWTWO; /* dump fraction */ ip -= XCMS_DMAXPOWTWO; /* restore w/o frac */ if (ip > abs) /* if it rounds up */ ip -= 1.0; /* fix it */ ip = XCMS_FABS(ip); } *dp = ip; return (val - ip); /* signed fractional part */ } /* * FUNCTION * * _XcmsPolynomial double precision polynomial evaluation * * KEY WORDS * * poly * machine independent routines * math libraries * * DESCRIPTION * * Evaluates a polynomial and returns double precision * result. Is passed a the order of the polynomial, * a pointer to an array of double precision polynomial * coefficients (in ascending order), and the independent * variable. * * USAGE * * double _XcmsPolynomial (order, coeffs, x) * int order; * double *coeffs; * double x; * * PROGRAMMER * * Fred Fish * * INTERNALS * * Evalates the polynomial using recursion and the form: * * P(x) = P0 + x(P1 + x(P2 +...x(Pn))) * */ static double _XcmsPolynomial( register int order, double const *coeffs, double x) { auto double rtn_value; #if 0 auto double curr_coeff; if (order <= 0) { rtn_value = *coeffs; } else { curr_coeff = *coeffs; /* Bug in Unisoft's compiler. Does not */ coeffs++; /* generate good code for *coeffs++ */ rtn_value = curr_coeff + x * _XcmsPolynomial (--order, coeffs, x); } #else /* ++jrb -- removed tail recursion */ coeffs += order; rtn_value = *coeffs--; while(order-- > 0) rtn_value = *coeffs-- + (x * rtn_value); #endif return(rtn_value); } /* * FUNCTION * * _XcmsSine double precision sine * * KEY WORDS * * sin * machine independent routines * trigonometric functions * math libraries * * DESCRIPTION * * Returns double precision sine of double precision * floating point argument. * * USAGE * * double _XcmsSine (x) * double x; * * REFERENCES * * Computer Approximations, J.F. Hart et al, John Wiley & Sons, * 1968, pp. 112-120. * * RESTRICTIONS * * The sin and cos routines are interactive in the sense that * in the process of reducing the argument to the range -PI/4 * to PI/4, each may call the other. Ultimately one or the * other uses a polynomial approximation on the reduced * argument. The sin approximation has a maximum relative error * of 10**(-17.59) and the cos approximation has a maximum * relative error of 10**(-16.18). * * These error bounds assume exact arithmetic * in the polynomial evaluation. Additional rounding and * truncation errors may occur as the argument is reduced * to the range over which the polynomial approximation * is valid, and as the polynomial is evaluated using * finite-precision arithmetic. * * PROGRAMMER * * Fred Fish * * INTERNALS * * Computes sin(x) from: * * (1) Reduce argument x to range -PI to PI. * * (2) If x > PI/2 then call sin recursively * using relation sin(x) = -sin(x - PI). * * (3) If x < -PI/2 then call sin recursively * using relation sin(x) = -sin(x + PI). * * (4) If x > PI/4 then call cos using * relation sin(x) = cos(PI/2 - x). * * (5) If x < -PI/4 then call cos using * relation sin(x) = -cos(PI/2 + x). * * (6) If x is small enough that polynomial * evaluation would cause underflow * then return x, since sin(x) * approaches x as x approaches zero. * * (7) By now x has been reduced to range * -PI/4 to PI/4 and the approximation * from HART pg. 118 can be used: * * sin(x) = y * ( p(y) / q(y) ) * Where: * * y = x * (4/PI) * * p(y) = SUM [ Pj * (y**(2*j)) ] * over j = {0,1,2,3} * * q(y) = SUM [ Qj * (y**(2*j)) ] * over j = {0,1,2,3} * * P0 = 0.206643433369958582409167054e+7 * P1 = -0.18160398797407332550219213e+6 * P2 = 0.359993069496361883172836e+4 * P3 = -0.2010748329458861571949e+2 * Q0 = 0.263106591026476989637710307e+7 * Q1 = 0.3927024277464900030883986e+5 * Q2 = 0.27811919481083844087953e+3 * Q3 = 1.0000... * (coefficients from HART table #3063 pg 234) * * * **** NOTE **** The range reduction relations used in * this routine depend on the final approximation being valid * over the negative argument range in addition to the positive * argument range. The particular approximation chosen from * HART satisfies this requirement, although not explicitly * stated in the text. This may not be true of other * approximations given in the reference. * */ double _XcmsSine (double x) { double y; double yt2; double retval; if (x < -XCMS_PI || x > XCMS_PI) { x = _XcmsModulo (x, XCMS_TWOPI); if (x > XCMS_PI) { x = x - XCMS_TWOPI; } else if (x < -XCMS_PI) { x = x + XCMS_TWOPI; } } if (x > XCMS_HALFPI) { retval = -(_XcmsSine (x - XCMS_PI)); } else if (x < -XCMS_HALFPI) { retval = -(_XcmsSine (x + XCMS_PI)); } else if (x > XCMS_FOURTHPI) { retval = _XcmsCosine (XCMS_HALFPI - x); } else if (x < -XCMS_FOURTHPI) { retval = -(_XcmsCosine (XCMS_HALFPI + x)); } else if (x < XCMS_X6_UNDERFLOWS && x > -XCMS_X6_UNDERFLOWS) { retval = x; } else { y = x / XCMS_FOURTHPI; yt2 = y * y; retval = y * (_XcmsPolynomial (3, sin_pcoeffs, yt2) / _XcmsPolynomial(3, sin_qcoeffs, yt2)); } return(retval); } /* * NAME * _XcmsArcTangent * * SYNOPSIS */ double _XcmsArcTangent(double x) /* * DESCRIPTION * Computes the arctangent. * This is an implementation of the Gauss algorithm as * described in: * Forman S. Acton, Numerical Methods That Work, * New York, NY, Harper & Row, 1970. * * RETURNS * Returns the arctangent */ { double ai, a1 = 0.0, bi, b1 = 0.0, l, d; double maxerror; int i; if (x == 0.0) { return (0.0); } if (x < 1.0) { maxerror = x * XCMS_MAXERROR; } else { maxerror = XCMS_MAXERROR; } ai = _XcmsSquareRoot( 1.0 / (1.0 + (x * x)) ); bi = 1.0; for (i = 0; i < XCMS_MAXITER; i++) { a1 = (ai + bi) / 2.0; b1 = _XcmsSquareRoot((a1 * bi)); if (a1 == b1) break; d = XCMS_FABS(a1 - b1); if (d < maxerror) break; ai = a1; bi = b1; } l = ((a1 > b1) ? b1 : a1); a1 = _XcmsSquareRoot(1 + (x * x)); return (x / (a1 * l)); } 18). * * These error bounds assume exact arithmetic * in the polynolibX11-1.6.3/src/xcms/cmsProp.c000064401431060000012000000072601247741723500164130ustar00alancstaff00002660200006 /* * * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * NAME * XcmsProp.c * * DESCRIPTION * This utility routines for manipulating properties. * */ #ifdef HAVE_CONFIG_H #include #endif #include #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" /************************************************************************ * * * API PRIVATE ROUTINES * * * ************************************************************************/ /* * NAME * _XcmsGetElement -- get an element value from the property passed * * SYNOPSIS */ unsigned long _XcmsGetElement( int format, char **pValue, unsigned long *pCount) /* * DESCRIPTION * Get the next element from the property and return it. * Also increment the pointer the amount needed. * * Returns * unsigned long */ { unsigned long value; switch (format) { case 32: value = *((unsigned long *)(*pValue)) & 0xFFFFFFFF; *pValue += sizeof(unsigned long); *pCount -= 1; break; case 16: value = *((unsigned short *)(*pValue)); *pValue += sizeof(unsigned short); *pCount -= 1; break; case 8: value = *((unsigned char *) (*pValue)); *pValue += 1; *pCount -= 1; break; default: value = 0; break; } return(value); } /* * NAME * _XcmsGetProperty -- Determine the existance of a property * * SYNOPSIS */ int _XcmsGetProperty( Display *pDpy, Window w, Atom property, int *pFormat, unsigned long *pNItems, unsigned long *pNBytes, char **pValue) /* * DESCRIPTION * * Returns * 0 if property does not exist. * 1 if property exists. */ { char *prop_ret; int format_ret; long len = 6516; unsigned long nitems_ret, after_ret; Atom atom_ret; int xgwp_ret; while (True) { xgwp_ret = XGetWindowProperty (pDpy, w, property, 0, len, False, XA_INTEGER, &atom_ret, &format_ret, &nitems_ret, &after_ret, (unsigned char **)&prop_ret); if (xgwp_ret == Success && after_ret > 0) { len += nitems_ret * (format_ret >> 3); XFree (prop_ret); } else { break; } } if (xgwp_ret != Success || format_ret == 0 || nitems_ret == 0) { /* the property does not exist or is of an unexpected type or getting window property failed */ return(XcmsFailure); } *pFormat = format_ret; *pNItems = nitems_ret; *pNBytes = nitems_ret * (format_ret >> 3); *pValue = prop_ret; return(XcmsSuccess); } libX11-1.6.3/src/xcms/LRGB.c000064401431060000012000001355451247741723500155260ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * NAME * XcmsLRGB.c * * DESCRIPTION * This file contains the conversion routines: * 1. CIE XYZ to RGB intensity * 2. RGB intensity to device RGB * 3. device RGB to RGB intensity * 4. RGB intensity to CIE XYZ * */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" /* * LOCAL DEFINES * #define declarations local to this package. */ #define EPS 0.001 #ifndef MIN #define MIN(x,y) ((x) > (y) ? (y) : (x)) #endif /* MIN */ #ifndef MAX #define MAX(x,y) ((x) > (y) ? (x) : (y)) #endif /* MAX */ #ifndef MIN3 #define MIN3(x,y,z) ((x) > (MIN((y), (z))) ? (MIN((y), (z))) : (x)) #endif /* MIN3 */ #ifndef MAX3 #define MAX3(x,y,z) ((x) > (MAX((y), (z))) ? (x) : (MAX((y), (z)))) #endif /* MAX3 */ /* * LOCAL TYPEDEFS * typedefs local to this package (for use with local vars). * */ /* * FORWARD DECLARATIONS */ static void LINEAR_RGB_FreeSCCData(XPointer pScreenDataTemp); static int LINEAR_RGB_InitSCCData(Display *dpy, int screenNumber, XcmsPerScrnInfo *pPerScrnInfo); static int XcmsLRGB_RGB_ParseString(register char *spec, XcmsColor *pColor); static int XcmsLRGB_RGBi_ParseString(register char *spec, XcmsColor *pColor); static Status _XcmsGetTableType0( IntensityTbl *pTbl, int format, char **pChar, unsigned long *pCount); static Status _XcmsGetTableType1( IntensityTbl *pTbl, int format, char **pChar, unsigned long *pCount); /* * LOCALS VARIABLES * Variables local to this package. * Usage example: * static int ExampleLocalVar; */ static unsigned short const MASK[17] = { 0x0000, /* 0 bitsPerRGB */ 0x8000, /* 1 bitsPerRGB */ 0xc000, /* 2 bitsPerRGB */ 0xe000, /* 3 bitsPerRGB */ 0xf000, /* 4 bitsPerRGB */ 0xf800, /* 5 bitsPerRGB */ 0xfc00, /* 6 bitsPerRGB */ 0xfe00, /* 7 bitsPerRGB */ 0xff00, /* 8 bitsPerRGB */ 0xff80, /* 9 bitsPerRGB */ 0xffc0, /* 10 bitsPerRGB */ 0xffe0, /* 11 bitsPerRGB */ 0xfff0, /* 12 bitsPerRGB */ 0xfff8, /* 13 bitsPerRGB */ 0xfffc, /* 14 bitsPerRGB */ 0xfffe, /* 15 bitsPerRGB */ 0xffff /* 16 bitsPerRGB */ }; /* * A NULL terminated array of function pointers that when applied * in series will convert an XcmsColor structure from XcmsRGBFormat * to XcmsCIEXYZFormat. */ static XcmsConversionProc Fl_RGB_to_CIEXYZ[] = { (XcmsConversionProc)XcmsRGBToRGBi, (XcmsConversionProc)XcmsRGBiToCIEXYZ, NULL }; /* * A NULL terminated array of function pointers that when applied * in series will convert an XcmsColor structure from XcmsCIEXYZFormat * to XcmsRGBFormat. */ static XcmsConversionProc Fl_CIEXYZ_to_RGB[] = { (XcmsConversionProc)XcmsCIEXYZToRGBi, (XcmsConversionProc)XcmsRGBiToRGB, NULL }; /* * A NULL terminated array of function pointers that when applied * in series will convert an XcmsColor structure from XcmsRGBiFormat * to XcmsCIEXYZFormat. */ static XcmsConversionProc Fl_RGBi_to_CIEXYZ[] = { (XcmsConversionProc)XcmsRGBiToCIEXYZ, NULL }; /* * A NULL terminated array of function pointers that when applied * in series will convert an XcmsColor structure from XcmsCIEXYZFormat * to XcmsRGBiFormat. */ static XcmsConversionProc Fl_CIEXYZ_to_RGBi[] = { (XcmsConversionProc)XcmsCIEXYZToRGBi, NULL }; /* * RGBi Color Spaces */ XcmsColorSpace XcmsRGBiColorSpace = { _XcmsRGBi_prefix, /* prefix */ XcmsRGBiFormat, /* id */ XcmsLRGB_RGBi_ParseString, /* parseString */ Fl_RGBi_to_CIEXYZ, /* to_CIEXYZ */ Fl_CIEXYZ_to_RGBi, /* from_CIEXYZ */ 1 }; /* * RGB Color Spaces */ XcmsColorSpace XcmsRGBColorSpace = { _XcmsRGB_prefix, /* prefix */ XcmsRGBFormat, /* id */ XcmsLRGB_RGB_ParseString, /* parseString */ Fl_RGB_to_CIEXYZ, /* to_CIEXYZ */ Fl_CIEXYZ_to_RGB, /* from_CIEXYZ */ 1 }; /* * Device-Independent Color Spaces known to the * LINEAR_RGB Screen Color Characteristics Function Set. */ static XcmsColorSpace *DDColorSpaces[] = { &XcmsRGBColorSpace, &XcmsRGBiColorSpace, NULL }; /* * GLOBALS * Variables declared in this package that are allowed * to be used globally. */ /* * LINEAR_RGB Screen Color Characteristics Function Set. */ XcmsFunctionSet XcmsLinearRGBFunctionSet = { &DDColorSpaces[0], /* pDDColorSpaces */ LINEAR_RGB_InitSCCData, /* pInitScrnFunc */ LINEAR_RGB_FreeSCCData /* pFreeSCCData */ }; /* * DESCRIPTION * Contents of Default SCCData should be replaced if other * data should be used as default. * * */ /* * NAME Tektronix 19" (Sony) CRT * PART_NUMBER 119-2451-00 * MODEL Tek4300, Tek4800 */ static IntensityRec const Default_RGB_RedTuples[] = { /* {unsigned short value, XcmsFloat intensity} */ { 0x0000, 0.000000 }, { 0x0909, 0.000000 }, { 0x0a0a, 0.000936 }, { 0x0f0f, 0.001481 }, { 0x1414, 0.002329 }, { 0x1919, 0.003529 }, { 0x1e1e, 0.005127 }, { 0x2323, 0.007169 }, { 0x2828, 0.009699 }, { 0x2d2d, 0.012759 }, { 0x3232, 0.016392 }, { 0x3737, 0.020637 }, { 0x3c3c, 0.025533 }, { 0x4141, 0.031119 }, { 0x4646, 0.037431 }, { 0x4b4b, 0.044504 }, { 0x5050, 0.052373 }, { 0x5555, 0.061069 }, { 0x5a5a, 0.070624 }, { 0x5f5f, 0.081070 }, { 0x6464, 0.092433 }, { 0x6969, 0.104744 }, { 0x6e6e, 0.118026 }, { 0x7373, 0.132307 }, { 0x7878, 0.147610 }, { 0x7d7d, 0.163958 }, { 0x8282, 0.181371 }, { 0x8787, 0.199871 }, { 0x8c8c, 0.219475 }, { 0x9191, 0.240202 }, { 0x9696, 0.262069 }, { 0x9b9b, 0.285089 }, { 0xa0a0, 0.309278 }, { 0xa5a5, 0.334647 }, { 0xaaaa, 0.361208 }, { 0xafaf, 0.388971 }, { 0xb4b4, 0.417945 }, { 0xb9b9, 0.448138 }, { 0xbebe, 0.479555 }, { 0xc3c3, 0.512202 }, { 0xc8c8, 0.546082 }, { 0xcdcd, 0.581199 }, { 0xd2d2, 0.617552 }, { 0xd7d7, 0.655144 }, { 0xdcdc, 0.693971 }, { 0xe1e1, 0.734031 }, { 0xe6e6, 0.775322 }, { 0xebeb, 0.817837 }, { 0xf0f0, 0.861571 }, { 0xf5f5, 0.906515 }, { 0xfafa, 0.952662 }, { 0xffff, 1.000000 } }; static IntensityRec const Default_RGB_GreenTuples[] = { /* {unsigned short value, XcmsFloat intensity} */ { 0x0000, 0.000000 }, { 0x1313, 0.000000 }, { 0x1414, 0.000832 }, { 0x1919, 0.001998 }, { 0x1e1e, 0.003612 }, { 0x2323, 0.005736 }, { 0x2828, 0.008428 }, { 0x2d2d, 0.011745 }, { 0x3232, 0.015740 }, { 0x3737, 0.020463 }, { 0x3c3c, 0.025960 }, { 0x4141, 0.032275 }, { 0x4646, 0.039449 }, { 0x4b4b, 0.047519 }, { 0x5050, 0.056520 }, { 0x5555, 0.066484 }, { 0x5a5a, 0.077439 }, { 0x5f5f, 0.089409 }, { 0x6464, 0.102418 }, { 0x6969, 0.116485 }, { 0x6e6e, 0.131625 }, { 0x7373, 0.147853 }, { 0x7878, 0.165176 }, { 0x7d7d, 0.183604 }, { 0x8282, 0.203140 }, { 0x8787, 0.223783 }, { 0x8c8c, 0.245533 }, { 0x9191, 0.268384 }, { 0x9696, 0.292327 }, { 0x9b9b, 0.317351 }, { 0xa0a0, 0.343441 }, { 0xa5a5, 0.370580 }, { 0xaaaa, 0.398747 }, { 0xafaf, 0.427919 }, { 0xb4b4, 0.458068 }, { 0xb9b9, 0.489165 }, { 0xbebe, 0.521176 }, { 0xc3c3, 0.554067 }, { 0xc8c8, 0.587797 }, { 0xcdcd, 0.622324 }, { 0xd2d2, 0.657604 }, { 0xd7d7, 0.693588 }, { 0xdcdc, 0.730225 }, { 0xe1e1, 0.767459 }, { 0xe6e6, 0.805235 }, { 0xebeb, 0.843491 }, { 0xf0f0, 0.882164 }, { 0xf5f5, 0.921187 }, { 0xfafa, 0.960490 }, { 0xffff, 1.000000 } }; static IntensityRec const Default_RGB_BlueTuples[] = { /* {unsigned short value, XcmsFloat intensity} */ { 0x0000, 0.000000 }, { 0x0e0e, 0.000000 }, { 0x0f0f, 0.001341 }, { 0x1414, 0.002080 }, { 0x1919, 0.003188 }, { 0x1e1e, 0.004729 }, { 0x2323, 0.006766 }, { 0x2828, 0.009357 }, { 0x2d2d, 0.012559 }, { 0x3232, 0.016424 }, { 0x3737, 0.021004 }, { 0x3c3c, 0.026344 }, { 0x4141, 0.032489 }, { 0x4646, 0.039481 }, { 0x4b4b, 0.047357 }, { 0x5050, 0.056154 }, { 0x5555, 0.065903 }, { 0x5a5a, 0.076634 }, { 0x5f5f, 0.088373 }, { 0x6464, 0.101145 }, { 0x6969, 0.114968 }, { 0x6e6e, 0.129862 }, { 0x7373, 0.145841 }, { 0x7878, 0.162915 }, { 0x7d7d, 0.181095 }, { 0x8282, 0.200386 }, { 0x8787, 0.220791 }, { 0x8c8c, 0.242309 }, { 0x9191, 0.264937 }, { 0x9696, 0.288670 }, { 0x9b9b, 0.313499 }, { 0xa0a0, 0.339410 }, { 0xa5a5, 0.366390 }, { 0xaaaa, 0.394421 }, { 0xafaf, 0.423481 }, { 0xb4b4, 0.453547 }, { 0xb9b9, 0.484592 }, { 0xbebe, 0.516587 }, { 0xc3c3, 0.549498 }, { 0xc8c8, 0.583291 }, { 0xcdcd, 0.617925 }, { 0xd2d2, 0.653361 }, { 0xd7d7, 0.689553 }, { 0xdcdc, 0.726454 }, { 0xe1e1, 0.764013 }, { 0xe6e6, 0.802178 }, { 0xebeb, 0.840891 }, { 0xf0f0, 0.880093 }, { 0xf5f5, 0.919723 }, { 0xfafa, 0.959715 }, { 0xffff, 1.00000 } }; static IntensityTbl Default_RGB_RedTbl = { /* IntensityRec *pBase */ (IntensityRec *) Default_RGB_RedTuples, /* unsigned int nEntries */ 52 }; static IntensityTbl Default_RGB_GreenTbl = { /* IntensityRec *pBase */ (IntensityRec *)Default_RGB_GreenTuples, /* unsigned int nEntries */ 50 }; static IntensityTbl Default_RGB_BlueTbl = { /* IntensityRec *pBase */ (IntensityRec *)Default_RGB_BlueTuples, /* unsigned int nEntries */ 51 }; static LINEAR_RGB_SCCData Default_RGB_SCCData = { /* XcmsFloat XYZtoRGBmatrix[3][3] */ { { 3.48340481253539000, -1.52176374927285200, -0.55923133354049780 }, {-1.07152751306193600, 1.96593795204372400, 0.03673691339553462 }, { 0.06351179790497788, -0.20020501000496480, 0.81070942031648220 } }, /* XcmsFloat RGBtoXYZmatrix[3][3] */ { { 0.38106149108714790, 0.32025712365352110, 0.24834578525933100 }, { 0.20729745115140850, 0.68054638776373240, 0.11215616108485920 }, { 0.02133944350088028, 0.14297193020246480, 1.24172892629665500 } }, /* IntensityTbl *pRedTbl */ &Default_RGB_RedTbl, /* IntensityTbl *pGreenTbl */ &Default_RGB_GreenTbl, /* IntensityTbl *pBlueTbl */ &Default_RGB_BlueTbl }; /************************************************************************ * * * PRIVATE ROUTINES * * * ************************************************************************/ /* * NAME * LINEAR_RGB_InitSCCData() * * SYNOPSIS */ static Status LINEAR_RGB_InitSCCData( Display *dpy, int screenNumber, XcmsPerScrnInfo *pPerScrnInfo) /* * DESCRIPTION * * RETURNS * XcmsFailure if failed. * XcmsSuccess if succeeded. * */ { Atom CorrectAtom = XInternAtom (dpy, XDCCC_CORRECT_ATOM_NAME, True); Atom MatrixAtom = XInternAtom (dpy, XDCCC_MATRIX_ATOM_NAME, True); int format_return, count, cType, nTables; unsigned long nitems, nbytes_return; char *property_return, *pChar; XcmsFloat *pValue; #ifdef ALLDEBUG IntensityRec *pIRec; #endif /* ALLDEBUG */ VisualID visualID; LINEAR_RGB_SCCData *pScreenData, *pScreenDefaultData; XcmsIntensityMap *pNewMap; /* * Allocate memory for pScreenData */ if (!(pScreenData = pScreenDefaultData = (LINEAR_RGB_SCCData *) Xcalloc (1, sizeof(LINEAR_RGB_SCCData)))) { return(XcmsFailure); } /* * 1. Get the XYZ->RGB and RGB->XYZ matrices */ if (MatrixAtom == None || !_XcmsGetProperty (dpy, RootWindow(dpy, screenNumber), MatrixAtom, &format_return, &nitems, &nbytes_return, &property_return) || nitems != 18 || format_return != 32) { /* * As per the XDCCC, there must be 18 data items and each must be * in 32 bits ! */ goto FreeSCCData; } else { /* * RGBtoXYZ and XYZtoRGB matrices */ pValue = (XcmsFloat *) pScreenData; pChar = property_return; for (count = 0; count < 18; count++) { *pValue++ = (long)_XcmsGetElement(format_return, &pChar, &nitems) / (XcmsFloat)XDCCC_NUMBER; } Xfree (property_return); pPerScrnInfo->screenWhitePt.spec.CIEXYZ.X = pScreenData->RGBtoXYZmatrix[0][0] + pScreenData->RGBtoXYZmatrix[0][1] + pScreenData->RGBtoXYZmatrix[0][2]; pPerScrnInfo->screenWhitePt.spec.CIEXYZ.Y = pScreenData->RGBtoXYZmatrix[1][0] + pScreenData->RGBtoXYZmatrix[1][1] + pScreenData->RGBtoXYZmatrix[1][2]; pPerScrnInfo->screenWhitePt.spec.CIEXYZ.Z = pScreenData->RGBtoXYZmatrix[2][0] + pScreenData->RGBtoXYZmatrix[2][1] + pScreenData->RGBtoXYZmatrix[2][2]; /* * Compute the Screen White Point */ if ((pPerScrnInfo->screenWhitePt.spec.CIEXYZ.Y < (1.0 - EPS) ) || (pPerScrnInfo->screenWhitePt.spec.CIEXYZ.Y > (1.0 + EPS))) { goto FreeSCCData; } else { pPerScrnInfo->screenWhitePt.spec.CIEXYZ.Y = 1.0; } pPerScrnInfo->screenWhitePt.format = XcmsCIEXYZFormat; pPerScrnInfo->screenWhitePt.pixel = 0; #ifdef PDEBUG printf ("RGB to XYZ Matrix values:\n"); printf (" %f %f %f\n %f %f %f\n %f %f %f\n", pScreenData->RGBtoXYZmatrix[0][0], pScreenData->RGBtoXYZmatrix[0][1], pScreenData->RGBtoXYZmatrix[0][2], pScreenData->RGBtoXYZmatrix[1][0], pScreenData->RGBtoXYZmatrix[1][1], pScreenData->RGBtoXYZmatrix[1][2], pScreenData->RGBtoXYZmatrix[2][0], pScreenData->RGBtoXYZmatrix[2][1], pScreenData->RGBtoXYZmatrix[2][2]); printf ("XYZ to RGB Matrix values:\n"); printf (" %f %f %f\n %f %f %f\n %f %f %f\n", pScreenData->XYZtoRGBmatrix[0][0], pScreenData->XYZtoRGBmatrix[0][1], pScreenData->XYZtoRGBmatrix[0][2], pScreenData->XYZtoRGBmatrix[1][0], pScreenData->XYZtoRGBmatrix[1][1], pScreenData->XYZtoRGBmatrix[1][2], pScreenData->XYZtoRGBmatrix[2][0], pScreenData->XYZtoRGBmatrix[2][1], pScreenData->XYZtoRGBmatrix[2][2]); printf ("Screen White Pt value: %f %f %f\n", pPerScrnInfo->screenWhitePt.spec.CIEXYZ.X, pPerScrnInfo->screenWhitePt.spec.CIEXYZ.Y, pPerScrnInfo->screenWhitePt.spec.CIEXYZ.Z); #endif /* PDEBUG */ } /* * 2. Get the Intensity Profile */ if (CorrectAtom == None || !_XcmsGetProperty (dpy, RootWindow(dpy, screenNumber), CorrectAtom, &format_return, &nitems, &nbytes_return, &property_return)) { goto FreeSCCData; } pChar = property_return; while (nitems) { switch (format_return) { case 8: /* * Must have at least: * VisualID0 * VisualID1 * VisualID2 * VisualID3 * type * count * length * intensity1 * intensity2 */ if (nitems < 9) { goto Free_property_return; } count = 3; break; case 16: /* * Must have at least: * VisualID0 * VisualID3 * type * count * length * intensity1 * intensity2 */ if (nitems < 7) { goto Free_property_return; } count = 1; break; case 32: /* * Must have at least: * VisualID0 * type * count * length * intensity1 * intensity2 */ if (nitems < 6) { goto Free_property_return; } count = 0; break; default: goto Free_property_return; } /* * Get VisualID */ visualID = _XcmsGetElement(format_return, &pChar, &nitems); while (count--) { visualID = visualID << format_return; visualID |= _XcmsGetElement(format_return, &pChar, &nitems); } if (visualID == 0) { /* * This is a shared intensity table */ pScreenData = pScreenDefaultData; } else { /* * This is a per-Visual intensity table */ if (!(pScreenData = (LINEAR_RGB_SCCData *) Xcalloc (1, sizeof(LINEAR_RGB_SCCData)))) { goto Free_property_return; } /* copy matrices */ memcpy((char *)pScreenData, (char *)pScreenDefaultData, 18 * sizeof(XcmsFloat)); /* Create, initialize, and add map */ if (!(pNewMap = (XcmsIntensityMap *) Xcalloc (1, sizeof(XcmsIntensityMap)))) { Xfree(pScreenData); goto Free_property_return; } pNewMap->visualID = visualID; pNewMap->screenData = (XPointer)pScreenData; pNewMap->pFreeScreenData = LINEAR_RGB_FreeSCCData; pNewMap->pNext = (XcmsIntensityMap *)dpy->cms.perVisualIntensityMaps; dpy->cms.perVisualIntensityMaps = (XPointer)pNewMap; dpy->free_funcs->intensityMaps = _XcmsFreeIntensityMaps; } cType = _XcmsGetElement(format_return, &pChar, &nitems); nTables = _XcmsGetElement(format_return, &pChar, &nitems); if (cType == 0) { /* Red Intensity Table */ if (!(pScreenData->pRedTbl = (IntensityTbl *) Xcalloc (1, sizeof(IntensityTbl)))) { goto Free_property_return; } if (_XcmsGetTableType0(pScreenData->pRedTbl, format_return, &pChar, &nitems) == XcmsFailure) { goto FreeRedTbl; } if (nTables == 1) { /* Green Intensity Table */ pScreenData->pGreenTbl = pScreenData->pRedTbl; /* Blue Intensity Table */ pScreenData->pBlueTbl = pScreenData->pRedTbl; } else { /* Green Intensity Table */ if (!(pScreenData->pGreenTbl = (IntensityTbl *) Xcalloc (1, sizeof(IntensityTbl)))) { goto FreeRedTblElements; } if (_XcmsGetTableType0(pScreenData->pGreenTbl, format_return, &pChar, &nitems) == XcmsFailure) { goto FreeGreenTbl; } /* Blue Intensity Table */ if (!(pScreenData->pBlueTbl = (IntensityTbl *) Xcalloc (1, sizeof(IntensityTbl)))) { goto FreeGreenTblElements; } if (_XcmsGetTableType0(pScreenData->pBlueTbl, format_return, &pChar, &nitems) == XcmsFailure) { goto FreeBlueTbl; } } } else if (cType == 1) { /* Red Intensity Table */ if (!(pScreenData->pRedTbl = (IntensityTbl *) Xcalloc (1, sizeof(IntensityTbl)))) { goto Free_property_return; } if (_XcmsGetTableType1(pScreenData->pRedTbl, format_return, &pChar, &nitems) == XcmsFailure) { goto FreeRedTbl; } if (nTables == 1) { /* Green Intensity Table */ pScreenData->pGreenTbl = pScreenData->pRedTbl; /* Blue Intensity Table */ pScreenData->pBlueTbl = pScreenData->pRedTbl; } else { /* Green Intensity Table */ if (!(pScreenData->pGreenTbl = (IntensityTbl *) Xcalloc (1, sizeof(IntensityTbl)))) { goto FreeRedTblElements; } if (_XcmsGetTableType1(pScreenData->pGreenTbl, format_return, &pChar, &nitems) == XcmsFailure) { goto FreeGreenTbl; } /* Blue Intensity Table */ if (!(pScreenData->pBlueTbl = (IntensityTbl *) Xcalloc (1, sizeof(IntensityTbl)))) { goto FreeGreenTblElements; } if (_XcmsGetTableType1(pScreenData->pBlueTbl, format_return, &pChar, &nitems) == XcmsFailure) { goto FreeBlueTbl; } } } else { goto Free_property_return; } #ifdef ALLDEBUG printf ("Intensity Table RED %d\n", pScreenData->pRedTbl->nEntries); pIRec = (IntensityRec *) pScreenData->pRedTbl->pBase; for (count = 0; count < pScreenData->pRedTbl->nEntries; count++, pIRec++) { printf ("\t0x%4x\t%f\n", pIRec->value, pIRec->intensity); } if (pScreenData->pGreenTbl->pBase != pScreenData->pRedTbl->pBase) { printf ("Intensity Table GREEN %d\n", pScreenData->pGreenTbl->nEntries); pIRec = (IntensityRec *)pScreenData->pGreenTbl->pBase; for (count = 0; count < pScreenData->pGreenTbl->nEntries; count++, pIRec++) { printf ("\t0x%4x\t%f\n", pIRec->value, pIRec->intensity); } } if (pScreenData->pBlueTbl->pBase != pScreenData->pRedTbl->pBase) { printf ("Intensity Table BLUE %d\n", pScreenData->pBlueTbl->nEntries); pIRec = (IntensityRec *) pScreenData->pBlueTbl->pBase; for (count = 0; count < pScreenData->pBlueTbl->nEntries; count++, pIRec++) { printf ("\t0x%4x\t%f\n", pIRec->value, pIRec->intensity); } } #endif /* ALLDEBUG */ } Xfree (property_return); /* Free the old memory and use the new structure created. */ LINEAR_RGB_FreeSCCData(pPerScrnInfo->screenData); pPerScrnInfo->functionSet = (XPointer) &XcmsLinearRGBFunctionSet; pPerScrnInfo->screenData = (XPointer) pScreenData; pPerScrnInfo->state = XcmsInitSuccess; return(XcmsSuccess); FreeBlueTblElements: Xfree(pScreenData->pBlueTbl->pBase); FreeBlueTbl: Xfree(pScreenData->pBlueTbl); FreeGreenTblElements: Xfree(pScreenData->pGreenTbl->pBase); FreeGreenTbl: Xfree(pScreenData->pGreenTbl); FreeRedTblElements: Xfree(pScreenData->pRedTbl->pBase); FreeRedTbl: Xfree(pScreenData->pRedTbl); Free_property_return: Xfree (property_return); FreeSCCData: Xfree(pScreenDefaultData); pPerScrnInfo->state = XcmsInitNone; return(XcmsFailure); } /* * NAME * LINEAR_RGB_FreeSCCData() * * SYNOPSIS */ static void LINEAR_RGB_FreeSCCData( XPointer pScreenDataTemp) /* * DESCRIPTION * * RETURNS * 0 if failed. * 1 if succeeded with no modifications. * */ { LINEAR_RGB_SCCData *pScreenData = (LINEAR_RGB_SCCData *) pScreenDataTemp; if (pScreenData && pScreenData != &Default_RGB_SCCData) { if (pScreenData->pRedTbl) { if (pScreenData->pGreenTbl) { if (pScreenData->pRedTbl->pBase != pScreenData->pGreenTbl->pBase) { if (pScreenData->pGreenTbl->pBase) { Xfree (pScreenData->pGreenTbl->pBase); } } if (pScreenData->pGreenTbl != pScreenData->pRedTbl) { Xfree (pScreenData->pGreenTbl); } } if (pScreenData->pBlueTbl) { if (pScreenData->pRedTbl->pBase != pScreenData->pBlueTbl->pBase) { if (pScreenData->pBlueTbl->pBase) { Xfree (pScreenData->pBlueTbl->pBase); } } if (pScreenData->pBlueTbl != pScreenData->pRedTbl) { Xfree (pScreenData->pBlueTbl); } } if (pScreenData->pRedTbl->pBase) { Xfree (pScreenData->pRedTbl->pBase); } Xfree (pScreenData->pRedTbl); } Xfree (pScreenData); } } /************************************************************************ * * * API PRIVATE ROUTINES * * * ************************************************************************/ /* * NAME * _XcmsGetTableType0 * * SYNOPSIS */ static Status _XcmsGetTableType0( IntensityTbl *pTbl, int format, char **pChar, unsigned long *pCount) /* * DESCRIPTION * * RETURNS * XcmsFailure if failed. * XcmsSuccess if succeeded. * */ { unsigned int nElements; IntensityRec *pIRec; nElements = pTbl->nEntries = _XcmsGetElement(format, pChar, pCount) + 1; if (!(pIRec = pTbl->pBase = (IntensityRec *) Xcalloc (nElements, sizeof(IntensityRec)))) { return(XcmsFailure); } switch (format) { case 8: for (; nElements--; pIRec++) { /* 0xFFFF/0xFF = 0x101 */ pIRec->value = _XcmsGetElement (format, pChar, pCount) * 0x101; pIRec->intensity = _XcmsGetElement (format, pChar, pCount) / (XcmsFloat)255.0; } break; case 16: for (; nElements--; pIRec++) { pIRec->value = _XcmsGetElement (format, pChar, pCount); pIRec->intensity = _XcmsGetElement (format, pChar, pCount) / (XcmsFloat)65535.0; } break; case 32: for (; nElements--; pIRec++) { pIRec->value = _XcmsGetElement (format, pChar, pCount); pIRec->intensity = _XcmsGetElement (format, pChar, pCount) / (XcmsFloat)4294967295.0; } break; default: return(XcmsFailure); } return(XcmsSuccess); } /* * NAME * _XcmsGetTableType1 * * SYNOPSIS */ static Status _XcmsGetTableType1( IntensityTbl *pTbl, int format, char **pChar, unsigned long *pCount) /* * DESCRIPTION * * RETURNS * XcmsFailure if failed. * XcmsSuccess if succeeded. * */ { int count; unsigned int max_index; IntensityRec *pIRec; max_index = _XcmsGetElement(format, pChar, pCount); pTbl->nEntries = max_index + 1; if (!(pIRec = pTbl->pBase = (IntensityRec *) Xcalloc (max_index+1, sizeof(IntensityRec)))) { return(XcmsFailure); } switch (format) { case 8: for (count = 0; count < max_index+1; count++, pIRec++) { pIRec->value = (count * 65535) / max_index; pIRec->intensity = _XcmsGetElement (format, pChar, pCount) / (XcmsFloat)255.0; } break; case 16: for (count = 0; count < max_index+1; count++, pIRec++) { pIRec->value = (count * 65535) / max_index; pIRec->intensity = _XcmsGetElement (format, pChar, pCount) / (XcmsFloat)65535.0; } break; case 32: for (count = 0; count < max_index+1; count++, pIRec++) { pIRec->value = (count * 65535) / max_index; pIRec->intensity = _XcmsGetElement (format, pChar, pCount) / (XcmsFloat)4294967295.0; } break; default: return(XcmsFailure); } return(XcmsSuccess); } /* * NAME * ValueCmp * * SYNOPSIS */ static int _XcmsValueCmp( IntensityRec *p1, IntensityRec *p2) /* * DESCRIPTION * Compares the value component of two IntensityRec * structures. * * RETURNS * 0 if p1->value is equal to p2->value * < 0 if p1->value is less than p2->value * > 0 if p1->value is greater than p2->value * */ { return (p1->value - p2->value); } /* * NAME * IntensityCmp * * SYNOPSIS */ static int _XcmsIntensityCmp( IntensityRec *p1, IntensityRec *p2) /* * DESCRIPTION * Compares the intensity component of two IntensityRec * structures. * * RETURNS * 0 if equal; * < 0 if first precedes second * > 0 if first succeeds second * */ { if (p1->intensity < p2->intensity) { return (-1); } if (p1->intensity > p2->intensity) { return (XcmsSuccess); } return (XcmsFailure); } /* * NAME * ValueInterpolation * * SYNOPSIS */ /* ARGSUSED */ static int _XcmsValueInterpolation( IntensityRec *key, IntensityRec *lo, IntensityRec *hi, IntensityRec *answer, int bitsPerRGB) /* * DESCRIPTION * Based on a given value, performs a linear interpolation * on the intensities between two IntensityRec structures. * Note that the bitsPerRGB parameter is ignored. * * RETURNS * Returns 0 if failed; otherwise non-zero. */ { XcmsFloat ratio; ratio = ((XcmsFloat)key->value - (XcmsFloat)lo->value) / ((XcmsFloat)hi->value - (XcmsFloat)lo->value); answer->value = key->value; answer->intensity = (hi->intensity - lo->intensity) * ratio; answer->intensity += lo->intensity; return (XcmsSuccess); } /* * NAME * IntensityInterpolation * * SYNOPSIS */ static int _XcmsIntensityInterpolation( IntensityRec *key, IntensityRec *lo, IntensityRec *hi, IntensityRec *answer, int bitsPerRGB) /* * DESCRIPTION * Based on a given intensity, performs a linear interpolation * on the values between two IntensityRec structures. * The bitsPerRGB parameter is necessary to perform rounding * to the correct number of significant bits. * * RETURNS * Returns 0 if failed; otherwise non-zero. */ { XcmsFloat ratio; long target, up, down; int shift = 16 - bitsPerRGB; int max_color = (1 << bitsPerRGB) - 1; ratio = (key->intensity - lo->intensity) / (hi->intensity - lo->intensity); answer->intensity = key->intensity; target = hi->value - lo->value; target *= ratio; target += lo->value; /* * Ok now, lets find the closest in respects to bits per RGB */ up = ((target >> shift) * 0xFFFF) / max_color; if (up < target) { down = up; up = (MIN((down >> shift) + 1, max_color) * 0xFFFF) / max_color; } else { down = (MAX((up >> shift) - 1, 0) * 0xFFFF) / max_color; } answer->value = ((up - target) < (target - down) ? up : down); answer->value &= MASK[bitsPerRGB]; return (XcmsSuccess); } typedef int (*comparProcp)( char *p1, char *p2); typedef int (*interpolProcp)( char *key, char *lo, char *hi, char *answer, int bitsPerRGB); /* * NAME * _XcmsTableSearch * * SYNOPSIS */ static int _XcmsTableSearch( char *key, int bitsPerRGB, char *base, unsigned nel, unsigned nKeyPtrSize, int (*compar)( char *p1, char *p2), int (*interpol)( char *key, char *lo, char *hi, char *answer, int bitsPerRGB), char *answer) /* * DESCRIPTION * A binary search through the specificied table. * * RETURNS * Returns 0 if failed; otherwise non-zero. * */ { char *hi, *lo, *mid, *last; int result; last = hi = base + ((nel - 1) * nKeyPtrSize); mid = lo = base; /* use only the significants bits, then scale into 16 bits */ ((IntensityRec *)key)->value = ((unsigned long) (((IntensityRec *)key)->value >> (16 - bitsPerRGB)) * 0xFFFF) / ((1 << bitsPerRGB) - 1); /* Special case so that zero intensity always maps to zero value */ if ((*compar) (key,lo) <= 0) { memcpy (answer, lo, nKeyPtrSize); ((IntensityRec *)answer)->value &= MASK[bitsPerRGB]; return XcmsSuccess; } while (mid != last) { last = mid; mid = lo + (((unsigned)(hi - lo) / nKeyPtrSize) / 2) * nKeyPtrSize; result = (*compar) (key, mid); if (result == 0) { memcpy(answer, mid, nKeyPtrSize); ((IntensityRec *)answer)->value &= MASK[bitsPerRGB]; return (XcmsSuccess); } else if (result < 0) { hi = mid; } else { lo = mid; } } /* * If we got to here, we didn't find a solution, so we * need to apply interpolation. */ return ((*interpol)(key, lo, hi, answer, bitsPerRGB)); } /* * NAME * _XcmsMatVec - multiply a 3 x 3 by a 3 x 1 vector * * SYNOPSIS */ static void _XcmsMatVec( XcmsFloat *pMat, XcmsFloat *pIn, XcmsFloat *pOut) /* * DESCRIPTION * Multiply the passed vector by the passed matrix to return a * vector. Matrix is 3x3, vectors are of length 3. * * RETURNS * void */ { int i, j; for (i = 0; i < 3; i++) { pOut[i] = 0.0; for (j = 0; j < 3; j++) pOut[i] += *(pMat+(i*3)+j) * pIn[j]; } } /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * XcmsLRGB_RGB_ParseString * * SYNOPSIS */ static int XcmsLRGB_RGB_ParseString( register char *spec, XcmsColor *pColor) /* * DESCRIPTION * This routines takes a string and attempts to convert * it into a XcmsColor structure with XcmsRGBFormat. * * RETURNS * 0 if failed, non-zero otherwise. */ { register int n, i; unsigned short r, g, b; char c; char *pchar; unsigned short *pShort; /* * Check for old # format */ if (*spec == '#') { /* * Attempt to parse the value portion. */ spec++; n = strlen(spec); if (n != 3 && n != 6 && n != 9 && n != 12) { return(XcmsFailure); } n /= 3; g = b = 0; do { r = g; g = b; b = 0; for (i = n; --i >= 0; ) { c = *spec++; b <<= 4; if (c >= '0' && c <= '9') b |= c - '0'; /* assume string in lowercase else if (c >= 'A' && c <= 'F') b |= c - ('A' - 10); */ else if (c >= 'a' && c <= 'f') b |= c - ('a' - 10); else return (XcmsFailure); } } while (*spec != '\0'); /* * Succeeded ! */ n <<= 2; n = 16 - n; /* shift instead of scale, to match old broken semantics */ pColor->spec.RGB.red = r << n; pColor->spec.RGB.green = g << n; pColor->spec.RGB.blue = b << n; } else { if ((pchar = strchr(spec, ':')) == NULL) { return(XcmsFailure); } n = (int)(pchar - spec); /* * Check for proper prefix. */ if (strncmp(spec, _XcmsRGB_prefix, n) != 0) { return(XcmsFailure); } /* * Attempt to parse the value portion. */ spec += (n + 1); pShort = &pColor->spec.RGB.red; for (i = 0; i < 3; i++, pShort++, spec++) { n = 0; *pShort = 0; while (*spec != '/' && *spec != '\0') { if (++n > 4) { return(XcmsFailure); } c = *spec++; *pShort <<= 4; if (c >= '0' && c <= '9') *pShort |= c - '0'; /* assume string in lowercase else if (c >= 'A' && c <= 'F') *pShort |= c - ('A' - 10); */ else if (c >= 'a' && c <= 'f') *pShort |= c - ('a' - 10); else return (XcmsFailure); } if (n == 0) return (XcmsFailure); if (n < 4) { *pShort = ((unsigned long)*pShort * 0xFFFF) / ((1 << n*4) - 1); } } } pColor->format = XcmsRGBFormat; pColor->pixel = 0; return (XcmsSuccess); } /* * NAME * XcmsLRGB_RGBi_ParseString * * SYNOPSIS */ static int XcmsLRGB_RGBi_ParseString( register char *spec, XcmsColor *pColor) /* * DESCRIPTION * This routines takes a string and attempts to convert * it into a XcmsColor structure with XcmsRGBiFormat. * The assumed RGBi string syntax is: * RGBi:// * Where r, g, and b are in string input format for floats * consisting of: * a. an optional sign * b. a string of numbers possibly containing a decimal point, * c. an optional exponent field containing an 'E' or 'e' * followed by a possibly signed integer string. * * RETURNS * 0 if failed, non-zero otherwise. */ { int n; char *pchar; if ((pchar = strchr(spec, ':')) == NULL) { return(XcmsFailure); } n = (int)(pchar - spec); /* * Check for proper prefix. */ if (strncmp(spec, _XcmsRGBi_prefix, n) != 0) { return(XcmsFailure); } /* * Attempt to parse the value portion. */ if (sscanf(spec + n + 1, "%lf/%lf/%lf", &pColor->spec.RGBi.red, &pColor->spec.RGBi.green, &pColor->spec.RGBi.blue) != 3) { char *s; /* Maybe failed due to locale */ int f; if ((s = strdup(spec))) { for (f = 0; s[f]; ++f) if (s[f] == '.') s[f] = ','; else if (s[f] == ',') s[f] = '.'; if (sscanf(s + n + 1, "%lf/%lf/%lf", &pColor->spec.RGBi.red, &pColor->spec.RGBi.green, &pColor->spec.RGBi.blue) != 3) { free(s); return(XcmsFailure); } free(s); } else return(XcmsFailure); } /* * Succeeded ! */ pColor->format = XcmsRGBiFormat; pColor->pixel = 0; return (XcmsSuccess); } /* * NAME * XcmsCIEXYZToRGBi - convert CIE XYZ to RGB * * SYNOPSIS */ /* ARGSUSED */ Status XcmsCIEXYZToRGBi( XcmsCCC ccc, XcmsColor *pXcmsColors_in_out,/* pointer to XcmsColors to convert */ unsigned int nColors, /* Number of colors */ Bool *pCompressed) /* pointer to an array of Bool */ /* * DESCRIPTION * Converts color specifications in an array of XcmsColor * structures from RGB format to RGBi format. * * RETURNS * XcmsFailure if failed, * XcmsSuccess if succeeded without gamut compression. * XcmsSuccessWithCompression if succeeded with gamut * compression. */ { LINEAR_RGB_SCCData *pScreenData; XcmsFloat tmp[3]; int hasCompressed = 0; unsigned int i; XcmsColor *pColor = pXcmsColors_in_out; if (ccc == NULL) { return(XcmsFailure); } pScreenData = (LINEAR_RGB_SCCData *)ccc->pPerScrnInfo->screenData; /* * XcmsColors should be White Point Adjusted, if necessary, by now! */ /* * NEW!!! for extended gamut compression * * 1. Need to zero out pCompressed * * 2. Need to save initial address of pColor * * 3. Need to save initial address of pCompressed */ for (i = 0; i < nColors; i++) { /* Make sure format is XcmsCIEXYZFormat */ if (pColor->format != XcmsCIEXYZFormat) { return(XcmsFailure); } /* Multiply [A]-1 * [XYZ] to get RGB intensity */ _XcmsMatVec((XcmsFloat *) pScreenData->XYZtoRGBmatrix, (XcmsFloat *) &pColor->spec, tmp); if ((MIN3 (tmp[0], tmp[1], tmp[2]) < -EPS) || (MAX3 (tmp[0], tmp[1], tmp[2]) > (1.0 + EPS))) { /* * RGBi out of screen's gamut */ if (ccc->gamutCompProc == NULL) { /* * Aha!! Here's that little trick that will allow * gamut compression routines to get the out of bound * RGBi. */ memcpy((char *)&pColor->spec, (char *)tmp, sizeof(tmp)); pColor->format = XcmsRGBiFormat; return(XcmsFailure); } else if ((*ccc->gamutCompProc)(ccc, pXcmsColors_in_out, nColors, i, pCompressed) == 0) { return(XcmsFailure); } /* * The gamut compression function should return colors in CIEXYZ * Also check again to if the new color is within gamut. */ if (pColor->format != XcmsCIEXYZFormat) { return(XcmsFailure); } _XcmsMatVec((XcmsFloat *) pScreenData->XYZtoRGBmatrix, (XcmsFloat *) &pColor->spec, tmp); if ((MIN3 (tmp[0], tmp[1], tmp[2]) < -EPS) || (MAX3 (tmp[0], tmp[1], tmp[2]) > (1.0 + EPS))) { return(XcmsFailure); } hasCompressed++; } memcpy((char *)&pColor->spec, (char *)tmp, sizeof(tmp)); /* These if statements are done to ensure the fudge factor is */ /* is taken into account. */ if (pColor->spec.RGBi.red < 0.0) { pColor->spec.RGBi.red = 0.0; } else if (pColor->spec.RGBi.red > 1.0) { pColor->spec.RGBi.red = 1.0; } if (pColor->spec.RGBi.green < 0.0) { pColor->spec.RGBi.green = 0.0; } else if (pColor->spec.RGBi.green > 1.0) { pColor->spec.RGBi.green = 1.0; } if (pColor->spec.RGBi.blue < 0.0) { pColor->spec.RGBi.blue = 0.0; } else if (pColor->spec.RGBi.blue > 1.0) { pColor->spec.RGBi.blue = 1.0; } (pColor++)->format = XcmsRGBiFormat; } return (hasCompressed ? XcmsSuccessWithCompression : XcmsSuccess); } /* * NAME * LINEAR_RGBi_to_CIEXYZ - convert RGBi to CIEXYZ * * SYNOPSIS */ /* ARGSUSED */ Status XcmsRGBiToCIEXYZ( XcmsCCC ccc, XcmsColor *pXcmsColors_in_out,/* pointer to XcmsColors to convert */ unsigned int nColors, /* Number of colors */ Bool *pCompressed) /* pointer to a bit array */ /* * DESCRIPTION * Converts color specifications in an array of XcmsColor * structures from RGBi format to CIEXYZ format. * * RETURNS * XcmsFailure if failed, * XcmsSuccess if succeeded. */ { LINEAR_RGB_SCCData *pScreenData; XcmsFloat tmp[3]; /* * pCompressed ignored in this function. */ if (ccc == NULL) { return(XcmsFailure); } pScreenData = (LINEAR_RGB_SCCData *)ccc->pPerScrnInfo->screenData; /* * XcmsColors should be White Point Adjusted, if necessary, by now! */ while (nColors--) { /* Multiply [A]-1 * [XYZ] to get RGB intensity */ _XcmsMatVec((XcmsFloat *) pScreenData->RGBtoXYZmatrix, (XcmsFloat *) &pXcmsColors_in_out->spec, tmp); memcpy((char *)&pXcmsColors_in_out->spec, (char *)tmp, sizeof(tmp)); (pXcmsColors_in_out++)->format = XcmsCIEXYZFormat; } return(XcmsSuccess); } /* * NAME * XcmsRGBiToRGB * * SYNOPSIS */ /* ARGSUSED */ Status XcmsRGBiToRGB( XcmsCCC ccc, XcmsColor *pXcmsColors_in_out,/* pointer to XcmsColors to convert */ unsigned int nColors, /* Number of colors */ Bool *pCompressed) /* pointer to a bit array */ /* * DESCRIPTION * Converts color specifications in an array of XcmsColor * structures from RGBi format to RGB format. * * RETURNS * XcmsFailure if failed, * XcmsSuccess if succeeded without gamut compression. * XcmsSuccessWithCompression if succeeded with gamut * compression. */ { LINEAR_RGB_SCCData *pScreenData; XcmsRGB tmpRGB; IntensityRec keyIRec, answerIRec; /* * pCompressed ignored in this function. */ if (ccc == NULL) { return(XcmsFailure); } pScreenData = (LINEAR_RGB_SCCData *)ccc->pPerScrnInfo->screenData; while (nColors--) { /* Make sure format is XcmsRGBiFormat */ if (pXcmsColors_in_out->format != XcmsRGBiFormat) { return(XcmsFailure); } keyIRec.intensity = pXcmsColors_in_out->spec.RGBi.red; if (!_XcmsTableSearch((char *)&keyIRec, ccc->visual->bits_per_rgb, (char *)pScreenData->pRedTbl->pBase, (unsigned)pScreenData->pRedTbl->nEntries, (unsigned)sizeof(IntensityRec), (comparProcp)_XcmsIntensityCmp, (interpolProcp)_XcmsIntensityInterpolation, (char *)&answerIRec)) { return(XcmsFailure); } tmpRGB.red = answerIRec.value; keyIRec.intensity = pXcmsColors_in_out->spec.RGBi.green; if (!_XcmsTableSearch((char *)&keyIRec, ccc->visual->bits_per_rgb, (char *)pScreenData->pGreenTbl->pBase, (unsigned)pScreenData->pGreenTbl->nEntries, (unsigned)sizeof(IntensityRec), (comparProcp)_XcmsIntensityCmp, (interpolProcp)_XcmsIntensityInterpolation, (char *)&answerIRec)) { return(XcmsFailure); } tmpRGB.green = answerIRec.value; keyIRec.intensity = pXcmsColors_in_out->spec.RGBi.blue; if (!_XcmsTableSearch((char *)&keyIRec, ccc->visual->bits_per_rgb, (char *)pScreenData->pBlueTbl->pBase, (unsigned)pScreenData->pBlueTbl->nEntries, (unsigned)sizeof(IntensityRec), (comparProcp)_XcmsIntensityCmp, (interpolProcp)_XcmsIntensityInterpolation, (char *)&answerIRec)) { return(XcmsFailure); } tmpRGB.blue = answerIRec.value; memcpy((char *)&pXcmsColors_in_out->spec, (char *)&tmpRGB, sizeof(XcmsRGB)); (pXcmsColors_in_out++)->format = XcmsRGBFormat; } return(XcmsSuccess); } /* * NAME * XcmsRGBToRGBi * * SYNOPSIS */ /* ARGSUSED */ Status XcmsRGBToRGBi( XcmsCCC ccc, XcmsColor *pXcmsColors_in_out,/* pointer to XcmsColors to convert */ unsigned int nColors, /* Number of colors */ Bool *pCompressed) /* pointer to a bit array */ /* * DESCRIPTION * Converts color specifications in an array of XcmsColor * structures from RGB format to RGBi format. * * RETURNS * XcmsFailure if failed, * XcmsSuccess if succeeded. */ { LINEAR_RGB_SCCData *pScreenData; XcmsRGBi tmpRGBi; IntensityRec keyIRec, answerIRec; /* * pCompressed ignored in this function. */ if (ccc == NULL) { return(XcmsFailure); } pScreenData = (LINEAR_RGB_SCCData *)ccc->pPerScrnInfo->screenData; while (nColors--) { /* Make sure format is XcmsRGBFormat */ if (pXcmsColors_in_out->format != XcmsRGBFormat) { return(XcmsFailure); } keyIRec.value = pXcmsColors_in_out->spec.RGB.red; if (!_XcmsTableSearch((char *)&keyIRec, ccc->visual->bits_per_rgb, (char *)pScreenData->pRedTbl->pBase, (unsigned)pScreenData->pRedTbl->nEntries, (unsigned)sizeof(IntensityRec), (comparProcp)_XcmsValueCmp, (interpolProcp)_XcmsValueInterpolation, (char *)&answerIRec)) { return(XcmsFailure); } tmpRGBi.red = answerIRec.intensity; keyIRec.value = pXcmsColors_in_out->spec.RGB.green; if (!_XcmsTableSearch((char *)&keyIRec, ccc->visual->bits_per_rgb, (char *)pScreenData->pGreenTbl->pBase, (unsigned)pScreenData->pGreenTbl->nEntries, (unsigned)sizeof(IntensityRec), (comparProcp)_XcmsValueCmp, (interpolProcp)_XcmsValueInterpolation, (char *)&answerIRec)) { return(XcmsFailure); } tmpRGBi.green = answerIRec.intensity; keyIRec.value = pXcmsColors_in_out->spec.RGB.blue; if (!_XcmsTableSearch((char *)&keyIRec, ccc->visual->bits_per_rgb, (char *)pScreenData->pBlueTbl->pBase, (unsigned)pScreenData->pBlueTbl->nEntries, (unsigned)sizeof(IntensityRec), (comparProcp)_XcmsValueCmp, (interpolProcp)_XcmsValueInterpolation, (char *)&answerIRec)) { return(XcmsFailure); } tmpRGBi.blue = answerIRec.intensity; memcpy((char *)&pXcmsColors_in_out->spec, (char *)&tmpRGBi, sizeof(XcmsRGBi)); (pXcmsColors_in_out++)->format = XcmsRGBiFormat; } return(XcmsSuccess); } /* * NAME * _XcmsInitScrnDefaultInfo * * SYNOPSIS */ /* ARGSUSED */ int _XcmsLRGB_InitScrnDefault( Display *dpy, int screenNumber, XcmsPerScrnInfo *pPerScrnInfo) /* * DESCRIPTION * Given a display and screen number, this routine attempts * to initialize the Xcms per Screen Info structure * (XcmsPerScrnInfo) with defaults. * * RETURNS * Returns zero if initialization failed; non-zero otherwise. */ { pPerScrnInfo->screenData = (XPointer)&Default_RGB_SCCData; pPerScrnInfo->screenWhitePt.spec.CIEXYZ.X = Default_RGB_SCCData.RGBtoXYZmatrix[0][0] + Default_RGB_SCCData.RGBtoXYZmatrix[0][1] + Default_RGB_SCCData.RGBtoXYZmatrix[0][2]; pPerScrnInfo->screenWhitePt.spec.CIEXYZ.Y = Default_RGB_SCCData.RGBtoXYZmatrix[1][0] + Default_RGB_SCCData.RGBtoXYZmatrix[1][1] + Default_RGB_SCCData.RGBtoXYZmatrix[1][2]; pPerScrnInfo->screenWhitePt.spec.CIEXYZ.Z = Default_RGB_SCCData.RGBtoXYZmatrix[2][0] + Default_RGB_SCCData.RGBtoXYZmatrix[2][1] + Default_RGB_SCCData.RGBtoXYZmatrix[2][2]; if ((pPerScrnInfo->screenWhitePt.spec.CIEXYZ.Y < (1.0 - EPS) ) || (pPerScrnInfo->screenWhitePt.spec.CIEXYZ.Y > (1.0 + EPS))) { pPerScrnInfo->screenData = (XPointer)NULL; pPerScrnInfo->state = XcmsInitNone; return(0); } pPerScrnInfo->screenWhitePt.spec.CIEXYZ.Y = 1.0; pPerScrnInfo->screenWhitePt.format = XcmsCIEXYZFormat; pPerScrnInfo->screenWhitePt.pixel = 0; pPerScrnInfo->functionSet = (XPointer)&XcmsLinearRGBFunctionSet; pPerScrnInfo->state = XcmsInitFailure; /* default initialization */ return(1); } eeded without gamut compression. * XcmsSuccessWithCompression if succeeded with gamut * compression. */ { LINEAR_RGB_SCCData *pScreenData; XclibX11-1.6.3/src/xcms/HVCMxVs.c000064401431060000012000000120151247741723500162200ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. TekColor is a * trademark of Tektronix, Inc. The term "TekHVC" designates a particular * color space that is the subject of U.S. Patent No. 4,985,853 (equivalent * foreign patents pending). Permission is hereby granted to use, copy, * modify, sell, and otherwise distribute this software and its * documentation for any purpose and without fee, provided that: * * 1. This copyright, permission, and disclaimer notice is reproduced in * all copies of this software and any modification thereof and in * supporting documentation; * 2. Any color-handling application which displays TekHVC color * cooordinates identifies these as TekHVC color coordinates in any * interface that displays these coordinates and in any associated * documentation; * 3. The term "TekHVC" is always used, and is only used, in association * with the mathematical derivations of the TekHVC Color Space, * including those provided in this file and any equivalent pathways and * mathematical derivations, regardless of digital (e.g., floating point * or integer) representation. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * NAME * TekHVCMxVs.c * * DESCRIPTION * Source for the XcmsTekHVCQueryMaxVSamples() gamut boundary * querying routine. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * XcmsTekHVCQueryMaxVSamples - Compute a set of value/chroma * pairs. * * SYNOPSIS */ Status XcmsTekHVCQueryMaxVSamples( XcmsCCC ccc, XcmsFloat hue, XcmsColor *pColor_in_out, unsigned int nSamples) /* * DESCRIPTION * Return a set of values and chromas for the input Hue. * This routine will take any color as input. * It returns TekHVC colors. * * Since this routine works with the value within * pColor_in_out intermediate results may be returned * even though it may be invalid. * * ASSUMPTIONS * This routine assumes that the white point associated with * the color specification is the Screen White Point. The * Screen White Point will also be associated with the * returned color specification. * * RETURNS * XcmsFailure - Failure * XcmsSuccess - Succeeded * */ { XcmsCCCRec myCCC; XcmsColor *pHVC; XcmsRGBi rgb_saved; unsigned short nI; XcmsFloat nT; /* * Check Arguments */ if (ccc == NULL || pColor_in_out == NULL || nSamples == 0) { return(XcmsFailure); } /* * Insure TekHVC installed */ if (XcmsAddColorSpace(&XcmsTekHVCColorSpace) == XcmsFailure) { return(XcmsFailure); } /* setup the CCC to use for the conversions. */ memcpy ((char *) &myCCC, (char *) ccc, sizeof(XcmsCCCRec)); myCCC.clientWhitePt.format = XcmsUndefinedFormat; myCCC.gamutCompProc = (XcmsCompressionProc) NULL; /* Step 1: compute the maximum value and chroma for this hue. */ /* save the Hue for use later. */ while (hue < 0.0) { hue += 360.0; } while (hue > 360.0) { hue -= 360.0; } pColor_in_out->spec.TekHVC.H = hue; pColor_in_out->format = XcmsTekHVCFormat; /* Get the maximum value and chroma point for this hue */ if (_XcmsTekHVCQueryMaxVCRGB(&myCCC, pColor_in_out->spec.TekHVC.H, pColor_in_out, (XcmsRGBi *)&rgb_saved) == XcmsFailure) { return (XcmsFailure); } /* Step 2: Convert each of the RGBi's to HVC's */ pHVC = pColor_in_out; for (nI = 0; nI < nSamples; nI++, pHVC++) { nT = (XcmsFloat) nI / (XcmsFloat) nSamples; pHVC->spec.RGBi.red = rgb_saved.red * (1.0 - nT) + nT; pHVC->spec.RGBi.green = rgb_saved.green * (1.0 - nT) + nT; pHVC->spec.RGBi.blue = rgb_saved.blue * (1.0 - nT) + nT; pHVC->format = XcmsRGBiFormat; pHVC->pixel = pColor_in_out->pixel; /* convert from RGB to HVC */ if (_XcmsConvertColorsWithWhitePt(&myCCC, pHVC, &myCCC.pPerScrnInfo->screenWhitePt, 1, XcmsTekHVCFormat, (Bool *) NULL) == XcmsFailure) { return(XcmsFailure); } /* make sure to return the input hue */ pHVC->spec.TekHVC.H = hue; } return(XcmsSuccess); } libX11-1.6.3/src/xcms/CvColW.c000064401431060000012000000100371247741723500161210ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * * NAME * XcmsCvColW.c * * DESCRIPTION * * * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" /************************************************************************ * * * API PRIVATE ROUTINES * * * ************************************************************************/ /* * NAME * _XcmsConvertColorsWithWhitePt - Convert XcmsColor structures * * SYNOPSIS */ Status _XcmsConvertColorsWithWhitePt( XcmsCCC ccc, XcmsColor *pColors_in_out, XcmsColor *pWhitePt, unsigned int nColors, XcmsColorFormat newFormat, Bool *pCompressed) /* * DESCRIPTION * Convert XcmsColor structures between device-independent * and/or device-dependent formats but allowing the calling * routine to specify the white point to be associated * with the color specifications (overriding * ccc->clientWhitePt). * * This routine has been provided for use in white point * adjustment routines. * * RETURNS * XcmsFailure if failed, * XcmsSuccess if succeeded without gamut compression, * XcmsSuccessWithCompression if succeeded with gamut * compression. * */ { if (ccc == NULL || pColors_in_out == NULL || pColors_in_out->format == XcmsUndefinedFormat) { return(XcmsFailure); } if (nColors == 0 || pColors_in_out->format == newFormat) { /* do nothing */ return(XcmsSuccess); } if (XCMS_DI_ID(pColors_in_out->format) && XCMS_DI_ID(newFormat)) { /* * Device-Independent to Device-Independent Conversion */ return(_XcmsDIConvertColors(ccc, pColors_in_out, pWhitePt, nColors, newFormat)); } if (XCMS_DD_ID(pColors_in_out->format) && XCMS_DD_ID(newFormat)) { /* * Device-Dependent to Device-Dependent Conversion */ return(_XcmsDDConvertColors(ccc, pColors_in_out, nColors, newFormat, pCompressed)); } /* * Otherwise we have: * 1. Device-Independent to Device-Dependent Conversion * OR * 2. Device-Dependent to Device-Independent Conversion */ if (XCMS_DI_ID(pColors_in_out->format)) { /* * 1. Device-Independent to Device-Dependent Conversion */ /* First convert to CIEXYZ */ if (_XcmsDIConvertColors(ccc, pColors_in_out, pWhitePt, nColors, XcmsCIEXYZFormat) == XcmsFailure) { return(XcmsFailure); } /* Then convert to DD Format */ return(_XcmsDDConvertColors(ccc, pColors_in_out, nColors, newFormat, pCompressed)); } else { /* * 2. Device-Dependent to Device-Independent Conversion */ /* First convert to CIEXYZ */ if (_XcmsDDConvertColors(ccc, pColors_in_out, nColors, XcmsCIEXYZFormat, pCompressed) == XcmsFailure) { return(XcmsFailure); } /* Then convert to DI Format */ return(_XcmsDIConvertColors(ccc, pColors_in_out, pWhitePt, nColors, newFormat)); } } libX11-1.6.3/src/xcms/QRed.c000064401431060000012000000046001247741723500156160ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * NAME * XcmsQRed.c - Query Red * * DESCRIPTION * Routine to obtain a color specification for full * red intensity and zero green and blue intensities. * * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcms.h" /************************************************************************ * * * PUBLIC INTERFACES * * * ************************************************************************/ /* * NAME * XcmsQueryRed * * SYNOPSIS */ Status XcmsQueryRed( XcmsCCC ccc, XcmsColorFormat target_format, XcmsColor *pColor_ret) /* * DESCRIPTION * Returns the color specification in the target format for * full intensity red and zero intensity green and blue. * * RETURNS * Returns XcmsSuccess, if failed; otherwise XcmsFailure * */ { XcmsColor tmp; tmp.format = XcmsRGBiFormat; tmp.pixel = 0; tmp.spec.RGBi.red = 1.0; tmp.spec.RGBi.green = 0.0; tmp.spec.RGBi.blue = 0.0; if (XcmsConvertColors(ccc, &tmp, 1, target_format, NULL) != XcmsSuccess) { return(XcmsFailure); } memcpy((char *)pColor_ret, (char *)&tmp, sizeof(XcmsColor)); return(XcmsSuccess); } RPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER *libX11-1.6.3/src/xcms/Makefile.in000064401431060000012000000705751247741725600167050ustar00alancstaff00002660200006# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/xcms ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_define_dir.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_X11_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h \ $(top_builddir)/include/X11/XlibConf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libxcms_la_LIBADD = am_libxcms_la_OBJECTS = AddDIC.lo AddSF.lo CCC.lo CvColW.lo CvCols.lo \ HVC.lo HVCGcC.lo HVCGcV.lo HVCGcVC.lo HVCMnV.lo HVCMxC.lo \ HVCMxV.lo HVCMxVC.lo HVCMxVs.lo HVCWpAj.lo IdOfPr.lo LRGB.lo \ Lab.lo LabGcC.lo LabGcL.lo LabGcLC.lo LabMnL.lo LabMxC.lo \ LabMxL.lo LabMxLC.lo LabWpAj.lo Luv.lo LuvGcC.lo LuvGcL.lo \ LuvGcLC.lo LuvMnL.lo LuvMxC.lo LuvMxL.lo LuvMxLC.lo LuvWpAj.lo \ OfCCC.lo PrOfId.lo QBlack.lo QBlue.lo QGreen.lo QRed.lo \ QWhite.lo QuCol.lo QuCols.lo SetCCC.lo SetGetCols.lo StCol.lo \ StCols.lo UNDEFINED.lo XRGB.lo XYZ.lo cmsAllCol.lo \ cmsAllNCol.lo cmsCmap.lo cmsColNm.lo cmsGlobls.lo cmsInt.lo \ cmsLkCol.lo cmsMath.lo cmsProp.lo cmsTrig.lo uvY.lo xyY.lo libxcms_la_OBJECTS = $(am_libxcms_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src -I$(top_builddir)/include/X11 depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libxcms_la_SOURCES) DIST_SOURCES = $(libxcms_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(X11dir)" DATA = $(dist_X11_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASE_CFLAGS = @BASE_CFLAGS@ BIGFONT_CFLAGS = @BIGFONT_CFLAGS@ BIGFONT_LIBS = @BIGFONT_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHANGELOG_CMD = @CHANGELOG_CMD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ FOP = @FOP@ GREP = @GREP@ I18N_MODULE_LIBS = @I18N_MODULE_LIBS@ INSTALL = @INSTALL@ INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ KEYSYMDEFS = @KEYSYMDEFS@ LAUNCHD = @LAUNCHD@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LINT = @LINT@ LINTLIB = @LINTLIB@ LINT_FLAGS = @LINT_FLAGS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MALLOC_ZERO_CFLAGS = @MALLOC_ZERO_CFLAGS@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_SUBSTS = @MAN_SUBSTS@ MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RAWCPP = @RAWCPP@ RAWCPPFLAGS = @RAWCPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRICT_CFLAGS = @STRICT_CFLAGS@ STRIP = @STRIP@ STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ TRADITIONALCPPFLAGS = @TRADITIONALCPPFLAGS@ VERSION = @VERSION@ WCHAR32 = @WCHAR32@ X11_CFLAGS = @X11_CFLAGS@ X11_DATADIR = @X11_DATADIR@ X11_EXTRA_DEPS = @X11_EXTRA_DEPS@ X11_LIBDIR = @X11_LIBDIR@ X11_LIBS = @X11_LIBS@ X11_LOCALEDATADIR = @X11_LOCALEDATADIR@ X11_LOCALEDIR = @X11_LOCALEDIR@ X11_LOCALELIBDIR = @X11_LOCALELIBDIR@ XERRORDB = @XERRORDB@ XKBPROTO_REQUIRES = @XKBPROTO_REQUIRES@ XKEYSYMDB = @XKEYSYMDB@ XLOCALEDATADIR = @XLOCALEDATADIR@ XLOCALEDIR = @XLOCALEDIR@ XLOCALELIBDIR = @XLOCALELIBDIR@ XMALLOC_ZERO_CFLAGS = @XMALLOC_ZERO_CFLAGS@ XMLTO = @XMLTO@ XORG_MAN_PAGE = @XORG_MAN_PAGE@ XORG_SGML_PATH = @XORG_SGML_PATH@ XSLTPROC = @XSLTPROC@ XSL_STYLESHEET = @XSL_STYLESHEET@ XTHREADLIB = @XTHREADLIB@ XTHREAD_CFLAGS = @XTHREAD_CFLAGS@ XTMALLOC_ZERO_CFLAGS = @XTMALLOC_ZERO_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ locales = @locales@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libxcms.la AM_CPPFLAGS = \ -I$(top_srcdir)/include \ -I$(top_srcdir)/include/X11 \ -I$(top_builddir)/include \ -I$(top_builddir)/include/X11 \ -I$(top_srcdir)/src/xcms \ -I$(top_srcdir)/src/xkb \ -I$(top_srcdir)/src/xlibi18n \ -I$(top_srcdir)/src \ -D_BSD_SOURCE \ -DXCMSDIR=\"$(X11dir)\" AM_CFLAGS = \ $(X11_CFLAGS) \ $(BIGFONT_CFLAGS) \ $(XMALLOC_ZERO_CFLAGS) \ $(CWARNFLAGS) libxcms_la_SOURCES = \ AddDIC.c \ AddSF.c \ CCC.c \ CvColW.c \ CvCols.c \ Cv.h \ HVC.c \ HVCGcC.c \ HVCGcV.c \ HVCGcVC.c \ HVCMnV.c \ HVCMxC.c \ HVCMxV.c \ HVCMxVC.c \ HVCMxVs.c \ HVCWpAj.c \ IdOfPr.c \ LRGB.c \ Lab.c \ LabGcC.c \ LabGcL.c \ LabGcLC.c \ LabMnL.c \ LabMxC.c \ LabMxL.c \ LabMxLC.c \ LabWpAj.c \ Luv.c \ LuvGcC.c \ LuvGcL.c \ LuvGcLC.c \ LuvMnL.c \ LuvMxC.c \ LuvMxL.c \ LuvMxLC.c \ LuvWpAj.c \ OfCCC.c \ PrOfId.c \ QBlack.c \ QBlue.c \ QGreen.c \ QRed.c \ QWhite.c \ QuCol.c \ QuCols.c \ SetCCC.c \ SetGetCols.c \ StCol.c \ StCols.c \ UNDEFINED.c \ XRGB.c \ XYZ.c \ cmsAllCol.c \ cmsAllNCol.c \ cmsCmap.c \ cmsColNm.c \ cmsGlobls.c \ cmsInt.c \ cmsLkCol.c \ cmsMath.c \ cmsProp.c \ cmsTrig.c \ uvY.c \ xyY.c \ Xcmsint.h X11dir = $(X11_DATADIR) dist_X11_DATA = Xcms.txt # Check source code with tools like lint & sparse @LINT_TRUE@ALL_LINT_FLAGS = $(LINT_FLAGS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ @LINT_TRUE@ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/xcms/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/xcms/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libxcms.la: $(libxcms_la_OBJECTS) $(libxcms_la_DEPENDENCIES) $(EXTRA_libxcms_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libxcms_la_OBJECTS) $(libxcms_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AddDIC.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AddSF.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CCC.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CvColW.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CvCols.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HVC.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HVCGcC.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HVCGcV.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HVCGcVC.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HVCMnV.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HVCMxC.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HVCMxV.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HVCMxVC.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HVCMxVs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HVCWpAj.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IdOfPr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LRGB.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Lab.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LabGcC.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LabGcL.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LabGcLC.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LabMnL.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LabMxC.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LabMxL.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LabMxLC.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LabWpAj.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Luv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LuvGcC.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LuvGcL.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LuvGcLC.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LuvMnL.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LuvMxC.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LuvMxL.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LuvMxLC.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LuvWpAj.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OfCCC.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PrOfId.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/QBlack.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/QBlue.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/QGreen.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/QRed.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/QWhite.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/QuCol.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/QuCols.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetCCC.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetGetCols.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StCol.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StCols.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UNDEFINED.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XRGB.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XYZ.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsAllCol.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsAllNCol.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsCmap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsColNm.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsGlobls.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsInt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsLkCol.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsMath.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsProp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmsTrig.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uvY.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xyY.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_X11DATA: $(dist_X11_DATA) @$(NORMAL_INSTALL) @list='$(dist_X11_DATA)'; test -n "$(X11dir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(X11dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(X11dir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(X11dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(X11dir)" || exit $$?; \ done uninstall-dist_X11DATA: @$(NORMAL_UNINSTALL) @list='$(dist_X11_DATA)'; test -n "$(X11dir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(X11dir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) installdirs: for dir in "$(DESTDIR)$(X11dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_X11DATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_X11DATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dist_X11DATA install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-dist_X11DATA .PRECIOUS: Makefile @LINT_TRUE@lint: @LINT_TRUE@ $(LINT) $(ALL_LINT_FLAGS) $(libxcms_la_SOURCES) -lm # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: /$(DEPDIR)/LuvMnL.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LuvMxC.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @libX11-1.6.3/src/xcms/HVCGcVC.c000064401431060000012000000212071247741723500161100ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of Xcms based on the TekColor Color Management System. TekColor is a * trademark of Tektronix, Inc. The term "TekHVC" designates a particular * color space that is the subject of U.S. Patent No. 4,985,853 (equivalent * foreign patents pending). Permission is hereby granted to use, copy, * modify, sell, and otherwise distribute this software and its * documentation for any purpose and without fee, provided that: * * 1. This copyright, permission, and disclaimer notice is reproduced in * all copies of this software and any modification thereof and in * supporting documentation; * 2. Any color-handling application which displays TekHVC color * cooordinates identifies these as TekHVC color coordinates in any * interface that displays these coordinates and in any associated * documentation; * 3. The term "TekHVC" is always used, and is only used, in association * with the mathematical derivations of the TekHVC Color Space, * including those provided in this file and any equivalent pathways and * mathematical derivations, regardless of digital (e.g., floating point * or integer) representation. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * NAME * TekHVCGcVC.c * * DESCRIPTION * Source for XcmsTekHVCClipVC() gamut * compression function. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include #include "Cv.h" /* * INTERNALS * Internal defines that need NOT be exported to any package or * program using this package. */ #define MAXBISECTCOUNT 100 /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * XcmsTekHVCClipVC - Return the closest value and chroma * * SYNOPSIS */ /* ARGSUSED */ Status XcmsTekHVCClipVC ( XcmsCCC ccc, XcmsColor *pColors_in_out, unsigned int nColors, unsigned int i, Bool *pCompressed) /* * DESCRIPTION * This routine will find the closest value and chroma * for a specific hue. The color input is converted to * HVC format and returned as CIE XYZ format. * * Since this routine works with the value within * pColor_in_out intermediate results may be returned * even though it may be invalid. * * RETURNS * XcmsFailure - Failure * XcmsSuccess - Succeeded * */ { Status retval; XcmsCCCRec myCCC; XcmsColor *pColor; XcmsColor hvc_max; XcmsRGBi rgb_max; int nCount, nMaxCount, nI, nILast; XcmsFloat Chroma, Value, bestChroma, bestValue, nT, saveDist, tmpDist; /* * Insure TekHVC installed */ if (XcmsAddColorSpace(&XcmsTekHVCColorSpace) == XcmsFailure) { return(XcmsFailure); } /* Use my own CCC */ memcpy ((char *)&myCCC, (char *)ccc, sizeof(XcmsCCCRec)); myCCC.clientWhitePt.format = XcmsUndefinedFormat;/* inherit screen white pt */ myCCC.gamutCompProc = (XcmsCompressionProc)NULL;/* no gamut compression func */ /* * Color specification passed as input can be assumed to: * 1. Be in XcmsCIEXYZFormat * 2. Already be white point adjusted for the Screen White Point. * This means that the white point now associated with this * color spec is the Screen White Point (even if the * ccc->clientWhitePt differs). */ pColor = pColors_in_out + i; if (ccc->visual->class < StaticColor && FunctionSetOfCCC(ccc) != (XPointer) &XcmsLinearRGBFunctionSet) { /* * GRAY ! */ _XcmsDIConvertColors(ccc, pColor, &ccc->pPerScrnInfo->screenWhitePt, 1, XcmsTekHVCFormat); pColor->spec.TekHVC.H = pColor->spec.TekHVC.C = 0.0; _XcmsDIConvertColors(ccc, pColor, &ccc->pPerScrnInfo->screenWhitePt, 1, XcmsCIEXYZFormat); if (pCompressed) { *(pCompressed + i) = True; } return(XcmsSuccess); } else { /* Convert from CIEXYZ to TekHVC format */ if (_XcmsDIConvertColors(&myCCC, pColor, &myCCC.pPerScrnInfo->screenWhitePt, 1, XcmsTekHVCFormat) == XcmsFailure) { return(XcmsFailure); } if (!_XcmsTekHVC_CheckModify(pColor)) { return (XcmsFailure); } /* Step 1: compute the maximum value and chroma for this hue. */ /* This copy may be overkill but it preserves the pixel etc. */ memcpy((char *)&hvc_max, (char *)pColor, sizeof(XcmsColor)); if (_XcmsTekHVCQueryMaxVCRGB (&myCCC, hvc_max.spec.TekHVC.H, &hvc_max, &rgb_max) == XcmsFailure) { return (XcmsFailure); } /* Now check and return the appropriate value */ if (pColor->spec.TekHVC.V == hvc_max.spec.TekHVC.V) { /* When the value input is equal to the maximum value */ /* merely return the chroma for that value. */ pColor->spec.TekHVC.C = hvc_max.spec.TekHVC.C; retval = _XcmsDIConvertColors(&myCCC, pColor, &myCCC.pPerScrnInfo->screenWhitePt, 1, XcmsCIEXYZFormat); } if (pColor->spec.TekHVC.V < hvc_max.spec.TekHVC.V) { /* return the intersection of the perpindicular line through */ /* the value and chroma given and the line from 0,0 and hvc_max. */ Chroma = pColor->spec.TekHVC.C; Value = pColor->spec.TekHVC.V; pColor->spec.TekHVC.C = (Value + (hvc_max.spec.TekHVC.C / hvc_max.spec.TekHVC.V * Chroma)) / ((hvc_max.spec.TekHVC.V / hvc_max.spec.TekHVC.C) + (hvc_max.spec.TekHVC.C / hvc_max.spec.TekHVC.V)); if (pColor->spec.TekHVC.C >= hvc_max.spec.TekHVC.C) { pColor->spec.TekHVC.C = hvc_max.spec.TekHVC.C; pColor->spec.TekHVC.V = hvc_max.spec.TekHVC.V; } else { pColor->spec.TekHVC.V = pColor->spec.TekHVC.C * hvc_max.spec.TekHVC.V / hvc_max.spec.TekHVC.C; } retval = _XcmsDIConvertColors(&myCCC, pColor, &myCCC.pPerScrnInfo->screenWhitePt, 1, XcmsCIEXYZFormat); if (retval != XcmsFailure && pCompressed != NULL) { *(pCompressed + i) = True; } return (retval); } /* return the closest point on the upper part of the hue leaf. */ /* must do a bisection here to compute the delta e. */ nMaxCount = MAXBISECTCOUNT; nI = nMaxCount / 2; bestValue = Value = pColor->spec.TekHVC.V; bestChroma = Chroma = pColor->spec.TekHVC.C; saveDist = (XcmsFloat) XCMS_SQRT ((double) (((Chroma - hvc_max.spec.TekHVC.C) * (Chroma - hvc_max.spec.TekHVC.C)) + ((Value - hvc_max.spec.TekHVC.V) * (Value - hvc_max.spec.TekHVC.V)))); for (nCount = 0; nCount < nMaxCount; nCount++) { nT = (XcmsFloat) nI / (XcmsFloat) nMaxCount; pColor->spec.RGBi.red = rgb_max.red * (1.0 - nT) + nT; pColor->spec.RGBi.green = rgb_max.green * (1.0 - nT) + nT; pColor->spec.RGBi.blue = rgb_max.blue * (1.0 - nT) + nT; pColor->format = XcmsRGBiFormat; /* Convert from RGBi to HVC */ if (_XcmsConvertColorsWithWhitePt(&myCCC, pColor, &myCCC.pPerScrnInfo->screenWhitePt, 1, XcmsTekHVCFormat, (Bool *) NULL) == XcmsFailure) { return (XcmsFailure); } if (!_XcmsTekHVC_CheckModify(pColor)) { return (XcmsFailure); } tmpDist = (XcmsFloat) XCMS_SQRT ((double) (((Chroma - pColor->spec.TekHVC.C) * (Chroma - pColor->spec.TekHVC.C)) + ((Value - pColor->spec.TekHVC.V) * (Value - pColor->spec.TekHVC.V)))); nILast = nI; if (tmpDist > saveDist) { nI /= 2; } else { nI = (nMaxCount + nI) / 2; saveDist = tmpDist; bestValue = pColor->spec.TekHVC.V; bestChroma = pColor->spec.TekHVC.C; } if (nI == nILast || nI == 0) { break; } } if (bestChroma >= hvc_max.spec.TekHVC.C) { pColor->spec.TekHVC.C = hvc_max.spec.TekHVC.C; pColor->spec.TekHVC.V = hvc_max.spec.TekHVC.V; } else { pColor->spec.TekHVC.C = bestChroma; pColor->spec.TekHVC.V = bestValue; } if (!_XcmsTekHVC_CheckModify(pColor)) { return (XcmsFailure); } retval = _XcmsDIConvertColors(&myCCC, pColor, &myCCC.pPerScrnInfo->screenWhitePt, 1, XcmsCIEXYZFormat); if (retval != XcmsFailure && pCompressed != NULL) { *(pCompressed + i) = True; } return(retval); } } libX11-1.6.3/src/xcms/LuvGcL.c000064401431060000012000000132051247741723500161200ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of XCMS based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * NAME * CIELuvGcL.c * * DESCRIPTION * Source for XcmsCIELuvClipL() gamut compression routine. * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * XcmsCIELuvClipL - Return the closest L* * * SYNOPSIS */ /* ARGSUSED */ Status XcmsCIELuvClipL ( XcmsCCC ccc, XcmsColor *pColors_in_out, unsigned int nColors, unsigned int i, Bool *pCompressed) /* * DESCRIPTION * Return the closest L* for a specific hue and chroma. * This routine takes any color as input and outputs * a CIE XYZ color. * * Since this routine works with the L* within * pColor_in_out intermediate results may be returned * even though it may be invalid. * * RETURNS * XcmsFailure - Failure * XcmsSuccess - Succeeded * */ { XcmsCCCRec myCCC; XcmsColor *pColor; XcmsColor Luv_max; XcmsFloat hue, chroma, maxChroma; Status retval; /* Use my own CCC */ memcpy ((char *)&myCCC, (char *)ccc, sizeof(XcmsCCCRec)); myCCC.clientWhitePt.format = XcmsUndefinedFormat;/* Inherit Screen WP */ myCCC.gamutCompProc = (XcmsCompressionProc)NULL;/* no gamut compression */ /* * Color specification passed as input can be assumed to: * 1. Be in XcmsCIEXYZFormat * 2. Already be white point adjusted for the Screen White Point. * This means that the white point now associated with this * color spec is the Screen White Point (even if the * ccc->clientWhitePt differs). */ pColor = pColors_in_out + i; if (ccc->visual->class < StaticColor) { /* * GRAY ! */ return(XcmsFailure); } else { /* Convert from CIEXYZ to CIE L*u*v* format */ if (_XcmsDIConvertColors(&myCCC, pColor, ScreenWhitePointOfCCC(&myCCC), 1, XcmsCIELuvFormat) == XcmsFailure) { return(XcmsFailure); } hue = XCMS_CIELUV_PMETRIC_HUE(pColor->spec.CIELuv.u_star, pColor->spec.CIELuv.v_star); chroma = XCMS_CIELUV_PMETRIC_CHROMA(pColor->spec.CIELuv.u_star, pColor->spec.CIELuv.v_star); /* Step 1: compute the maximum L* and chroma for this hue. */ /* This copy may be overkill but it preserves the pixel etc. */ memcpy((char *)&Luv_max, (char *)pColor, sizeof(XcmsColor)); if (_XcmsCIELuvQueryMaxLCRGB (&myCCC, hue, &Luv_max, (XcmsRGBi *)NULL) == XcmsFailure) { return (XcmsFailure); } maxChroma = XCMS_CIELUV_PMETRIC_CHROMA(Luv_max.spec.CIELuv.u_star, Luv_max.spec.CIELuv.v_star); /* Now check and return the appropriate L* */ if (chroma == maxChroma) { /* When the chroma input is equal to the maximum chroma */ /* merely return the L* for that chroma. */ memcpy((char *)pColor, (char *)&Luv_max, sizeof(XcmsColor)); retval = _XcmsDIConvertColors(&myCCC, pColor, ScreenWhitePointOfCCC(&myCCC), 1, XcmsCIEXYZFormat); } else if (chroma > maxChroma) { /* When the chroma input is greater than the maximum chroma */ /* merely return the L* and chroma for the given hue. */ memcpy((char *)pColor, (char *)&Luv_max, sizeof(XcmsColor)); return (XcmsFailure); } else if (pColor->spec.CIELuv.L_star < Luv_max.spec.CIELuv.L_star) { /* Find the minimum lightness for the given chroma. */ if (pColor->format != XcmsCIELuvFormat) { if (_XcmsDIConvertColors(ccc, pColor, ScreenWhitePointOfCCC(ccc), 1, XcmsCIELuvFormat) == XcmsFailure) { return(XcmsFailure); } } if (XcmsCIELuvQueryMinL(&myCCC, degrees(hue), chroma, pColor) == XcmsFailure) { return (XcmsFailure); } retval = _XcmsDIConvertColors(&myCCC, pColor, ScreenWhitePointOfCCC(&myCCC), 1, XcmsCIEXYZFormat); } else { /* Find the maximum lightness for the given chroma. */ if (pColor->format != XcmsCIELuvFormat) { if (_XcmsDIConvertColors(ccc, pColor, ScreenWhitePointOfCCC(ccc), 1, XcmsCIELuvFormat) == XcmsFailure) { return(XcmsFailure); } } if (XcmsCIELuvQueryMaxL(&myCCC, degrees(hue), chroma, pColor) == XcmsFailure) { return (XcmsFailure); } retval = _XcmsDIConvertColors(&myCCC, pColor, ScreenWhitePointOfCCC(&myCCC), 1, XcmsCIEXYZFormat); } if (retval != XcmsFailure && pCompressed != NULL) { *(pCompressed + i) = True; } return(retval); } } libX11-1.6.3/src/xcms/uvY.c000064401431060000012000000244051247741723500155530ustar00alancstaff00002660200006 /* * Code and supporting documentation (c) Copyright 1990 1991 Tektronix, Inc. * All Rights Reserved * * This file is a component of an X Window System-specific implementation * of XCMS based on the TekColor Color Management System. Permission is * hereby granted to use, copy, modify, sell, and otherwise distribute this * software and its documentation for any purpose and without fee, provided * that this copyright, permission, and disclaimer notice is reproduced in * all copies of this software and in supporting documentation. TekColor * is a trademark of Tektronix, Inc. * * Tektronix makes no representation about the suitability of this software * for any purpose. It is provided "as is" and with all faults. * * TEKTRONIX DISCLAIMS ALL WARRANTIES APPLICABLE TO THIS SOFTWARE, * INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE. IN NO EVENT SHALL TEKTRONIX BE LIABLE FOR ANY * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA, OR PROFITS, WHETHER IN AN ACTION OF * CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR THE PERFORMANCE OF THIS SOFTWARE. * * * NAME * CIEuvy.c * * DESCRIPTION * This file contains routines that support the CIE u'v'Y * color space to include conversions to and from the CIE * XYZ space. * * DOCUMENTATION * "TekColor Color Management System, System Implementor's Manual" */ #ifdef HAVE_CONFIG_H #include #endif #include #include "Xlibint.h" #include "Xcmsint.h" #include "Cv.h" #include /* * FORWARD DECLARATIONS */ static int CIEuvY_ParseString(register char *spec, XcmsColor *pColor); /* * DEFINES * Internal definitions that need NOT be exported to any package * or program using this package. */ #ifdef DBL_EPSILON # define XMY_DBL_EPSILON DBL_EPSILON #else # define XMY_DBL_EPSILON 0.00001 #endif /* * LOCAL VARIABLES */ /* * NULL terminated list of functions applied to get from CIEuvY to CIEXYZ */ static XcmsConversionProc Fl_CIEuvY_to_CIEXYZ[] = { XcmsCIEuvYToCIEXYZ, NULL }; /* * NULL terminated list of functions applied to get from CIEXYZ to CIEuvY */ static XcmsConversionProc Fl_CIEXYZ_to_CIEuvY[] = { XcmsCIEXYZToCIEuvY, NULL }; /* * GLOBALS */ /* * CIE uvY Color Space */ XcmsColorSpace XcmsCIEuvYColorSpace = { _XcmsCIEuvY_prefix, /* prefix */ XcmsCIEuvYFormat, /* id */ CIEuvY_ParseString, /* parseString */ Fl_CIEuvY_to_CIEXYZ, /* to_CIEXYZ */ Fl_CIEXYZ_to_CIEuvY, /* from_CIEXYZ */ 1 }; /************************************************************************ * * * PRIVATE ROUTINES * * * ************************************************************************/ /* * NAME * CIEuvY_ParseString * * SYNOPSIS */ static int CIEuvY_ParseString( register char *spec, XcmsColor *pColor) /* * DESCRIPTION * This routines takes a string and attempts to convert * it into a XcmsColor structure with XcmsCIEuvYFormat. * The assumed CIEuvY string syntax is: * CIEuvY:// * Where u, v, and Y are in string input format for floats * consisting of: * a. an optional sign * b. a string of numbers possibly containing a decimal point, * c. an optional exponent field containing an 'E' or 'e' * followed by a possibly signed integer string. * * RETURNS * 0 if failed, non-zero otherwise. */ { int n; char *pchar; if ((pchar = strchr(spec, ':')) == NULL) { return(XcmsFailure); } n = (int)(pchar - spec); /* * Check for proper prefix. */ if (strncmp(spec, _XcmsCIEuvY_prefix, n) != 0) { return(XcmsFailure); } /* * Attempt to parse the value portion. */ if (sscanf(spec + n + 1, "%lf/%lf/%lf", &pColor->spec.CIEuvY.u_prime, &pColor->spec.CIEuvY.v_prime, &pColor->spec.CIEuvY.Y) != 3) { char *s; /* Maybe failed due to locale */ int f; if ((s = strdup(spec))) { for (f = 0; s[f]; ++f) if (s[f] == '.') s[f] = ','; else if (s[f] == ',') s[f] = '.'; if (sscanf(s + n + 1, "%lf/%lf/%lf", &pColor->spec.CIEuvY.u_prime, &pColor->spec.CIEuvY.v_prime, &pColor->spec.CIEuvY.Y) != 3) { free(s); return(XcmsFailure); } free(s); } else return(XcmsFailure); } pColor->format = XcmsCIEuvYFormat; pColor->pixel = 0; return(_XcmsCIEuvY_ValidSpec(pColor)); } /************************************************************************ * * * PUBLIC ROUTINES * * * ************************************************************************/ /* * NAME * XcmsCIEuvY_ValidSpec * * SYNOPSIS */ Status _XcmsCIEuvY_ValidSpec( XcmsColor *pColor) /* * DESCRIPTION * Checks if color specification valid for CIE u'v'Y. * * RETURNS * XcmsFailure if invalid, * XcmsSuccess if valid. * */ { if (pColor->format != XcmsCIEuvYFormat || (pColor->spec.CIEuvY.Y < 0.0 - XMY_DBL_EPSILON) || (pColor->spec.CIEuvY.Y > 1.0 + XMY_DBL_EPSILON)) { return(XcmsFailure); } return(XcmsSuccess); } /* * NAME * XcmsCIEuvYToCIEXYZ - convert CIEuvY to CIEXYZ * * SYNOPSIS */ Status XcmsCIEuvYToCIEXYZ( XcmsCCC ccc, XcmsColor *puvY_WhitePt, XcmsColor *pColors_in_out, unsigned int nColors) /* * DESCRIPTION * Converts color specifications in an array of XcmsColor * structures from CIEuvY format to CIEXYZ format. * * RETURNS * XcmsFailure if failed, * XcmsSuccess if succeeded. * */ { XcmsCIEXYZ XYZ_return; XcmsColor whitePt; int i; XcmsColor *pColor = pColors_in_out; XcmsFloat div, x, y, z, Y; /* * Check arguments * Postpone checking puvY_WhitePt until it is actually needed * otherwise converting between XYZ and uvY will fail. */ if (pColors_in_out == NULL) { return(XcmsFailure); } /* * Now convert each XcmsColor structure to CIEXYZ form */ for (i = 0; i < nColors; i++, pColor++) { /* Make sure original format is CIEuvY */ if (!_XcmsCIEuvY_ValidSpec(pColor)) { return(XcmsFailure); } /* * Convert to CIEXYZ */ Y = pColor->spec.CIEuvY.Y; /* Convert color u'v' to xyz space */ div = (6.0 * pColor->spec.CIEuvY.u_prime) - (16.0 * pColor->spec.CIEuvY.v_prime) + 12.0; if (div == 0.0) { /* use white point since div == 0 */ if (puvY_WhitePt == NULL ) { return(XcmsFailure); } /* * Make sure white point is in CIEuvY form */ if (puvY_WhitePt->format != XcmsCIEuvYFormat) { /* Make copy of the white point because we're going to modify it */ memcpy((char *)&whitePt, (char *)puvY_WhitePt, sizeof(XcmsColor)); if (!_XcmsDIConvertColors(ccc, &whitePt, (XcmsColor *)NULL, 1, XcmsCIEuvYFormat)) { return(XcmsFailure); } puvY_WhitePt = &whitePt; } /* Make sure it is a white point, i.e., Y == 1.0 */ if (puvY_WhitePt->spec.CIEuvY.Y != 1.0) { return(XcmsFailure); } div = (6.0 * puvY_WhitePt->spec.CIEuvY.u_prime) - (16.0 * puvY_WhitePt->spec.CIEuvY.v_prime) + 12.0; if (div == 0) { /* internal error */ return(XcmsFailure); } x = 9.0 * puvY_WhitePt->spec.CIEuvY.u_prime / div; y = 4.0 * puvY_WhitePt->spec.CIEuvY.v_prime / div; } else { x = 9.0 * pColor->spec.CIEuvY.u_prime / div; y = 4.0 * pColor->spec.CIEuvY.v_prime / div; } z = 1.0 - x - y; /* Convert from xyz to XYZ */ /* Conversion uses color normalized lightness based on Y */ if (y != 0.0) { XYZ_return.X = x * Y / y; } else { XYZ_return.X = x; } XYZ_return.Y = Y; if (y != 0.0) { XYZ_return.Z = z * Y / y; } else { XYZ_return.Z = z; } memcpy((char *)&pColor->spec.CIEXYZ, (char *)&XYZ_return, sizeof(XcmsCIEXYZ)); /* Identify that format is now CIEXYZ */ pColor->format = XcmsCIEXYZFormat; } return(XcmsSuccess); } /* * NAME * XcmsCIEXYZToCIEuvY - convert CIEXYZ to CIEuvY * * SYNOPSIS */ Status XcmsCIEXYZToCIEuvY( XcmsCCC ccc, XcmsColor *puvY_WhitePt, XcmsColor *pColors_in_out, unsigned int nColors) /* * DESCRIPTION * Converts color specifications in an array of XcmsColor * structures from CIEXYZ format to CIEuvY format. * * RETURNS * XcmsFailure if failed, * XcmsSuccess if succeeded. * */ { XcmsCIEuvY uvY_return; XcmsColor whitePt; int i; XcmsColor *pColor = pColors_in_out; XcmsFloat div; /* * Check arguments * Postpone checking puvY_WhitePt until it is actually needed * otherwise converting between XYZ and uvY will fail. */ if (pColors_in_out == NULL) { return(XcmsFailure); } /* * Now convert each XcmsColor structure to CIEuvY form */ for (i = 0; i < nColors; i++, pColor++) { /* Make sure original format is CIEXYZ */ if (!_XcmsCIEXYZ_ValidSpec(pColor)) { return(XcmsFailure); } /* Convert to CIEuvY */ div = pColor->spec.CIEXYZ.X + (15.0 * pColor->spec.CIEXYZ.Y) + (3.0 * pColor->spec.CIEXYZ.Z); if (div == 0.0) { /* Use white point since div == 0.0 */ if (puvY_WhitePt == NULL ) { return(XcmsFailure); } /* * Make sure white point is in CIEuvY form */ if (puvY_WhitePt->format != XcmsCIEuvYFormat) { /* Make copy of the white point because we're going to modify it */ memcpy((char *)&whitePt, (char *)puvY_WhitePt, sizeof(XcmsColor)); if (!_XcmsDIConvertColors(ccc, &whitePt, (XcmsColor *)NULL, 1, XcmsCIEuvYFormat)) { return(XcmsFailure); } puvY_WhitePt = &whitePt; } /* Make sure it is a white point, i.e., Y == 1.0 */ if (puvY_WhitePt->spec.CIEuvY.Y != 1.0) { return(XcmsFailure); } uvY_return.Y = pColor->spec.CIEXYZ.Y; uvY_return.u_prime = puvY_WhitePt->spec.CIEuvY.u_prime; uvY_return.v_prime = puvY_WhitePt->spec.CIEuvY.v_prime; } else { uvY_return.u_prime = 4.0 * pColor->spec.CIEXYZ.X / div; uvY_return.v_prime = 9.0 * pColor->spec.CIEXYZ.Y / div; uvY_return.Y = pColor->spec.CIEXYZ.Y; } memcpy((char *)&pColor->spec.CIEuvY, (char *)&uvY_return, sizeof(XcmsCIEuvY)); /* Identify that format is now CIEuvY */ pColor->format = XcmsCIEuvYFormat; } return(XcmsSuccess); } libX11-1.6.3/src/poly.h000064401431060000012000000253001247741723500150010ustar00alancstaff00002660200006/************************************************************************ Copyright 1987, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ************************************************************************/ /* * This file contains a few macros to help track * the edge of a filled object. The object is assumed * to be filled in scanline order, and thus the * algorithm used is an extension of Bresenham's line * drawing algorithm which assumes that y is always the * major axis. * Since these pieces of code are the same for any filled shape, * it is more convenient to gather the library in one * place, but since these pieces of code are also in * the inner loops of output primitives, procedure call * overhead is out of the question. * See the author for a derivation if needed. */ /* * In scan converting polygons, we want to choose those pixels * which are inside the polygon. Thus, we add .5 to the starting * x coordinate for both left and right edges. Now we choose the * first pixel which is inside the pgon for the left edge and the * first pixel which is outside the pgon for the right edge. * Draw the left pixel, but not the right. * * How to add .5 to the starting x coordinate: * If the edge is moving to the right, then subtract dy from the * error term from the general form of the algorithm. * If the edge is moving to the left, then add dy to the error term. * * The reason for the difference between edges moving to the left * and edges moving to the right is simple: If an edge is moving * to the right, then we want the algorithm to flip immediately. * If it is moving to the left, then we don't want it to flip until * we traverse an entire pixel. */ #define BRESINITPGON(dy, x1, x2, xStart, d, m, m1, incr1, incr2) { \ int dx; /* local storage */ \ \ /* \ * if the edge is horizontal, then it is ignored \ * and assumed not to be processed. Otherwise, do this stuff. \ */ \ if ((dy) != 0) { \ xStart = (x1); \ dx = (x2) - xStart; \ if (dx < 0) { \ m = dx / (dy); \ m1 = m - 1; \ incr1 = -2 * dx + 2 * (dy) * m1; \ incr2 = -2 * dx + 2 * (dy) * m; \ d = 2 * m * (dy) - 2 * dx - 2 * (dy); \ } else { \ m = dx / (dy); \ m1 = m + 1; \ incr1 = 2 * dx - 2 * (dy) * m1; \ incr2 = 2 * dx - 2 * (dy) * m; \ d = -2 * m * (dy) + 2 * dx; \ } \ } \ } #define BRESINCRPGON(d, minval, m, m1, incr1, incr2) { \ if (m1 > 0) { \ if (d > 0) { \ minval += m1; \ d += incr1; \ } \ else { \ minval += m; \ d += incr2; \ } \ } else {\ if (d >= 0) { \ minval += m1; \ d += incr1; \ } \ else { \ minval += m; \ d += incr2; \ } \ } \ } /* * This structure contains all of the information needed * to run the bresenham algorithm. * The variables may be hardcoded into the declarations * instead of using this structure to make use of * register declarations. */ typedef struct { int minor_axis; /* minor axis */ int d; /* decision variable */ int m, m1; /* slope and slope+1 */ int incr1, incr2; /* error increments */ } BRESINFO; #define BRESINITPGONSTRUCT(dmaj, min1, min2, bres) \ BRESINITPGON(dmaj, min1, min2, bres.minor_axis, bres.d, \ bres.m, bres.m1, bres.incr1, bres.incr2) #define BRESINCRPGONSTRUCT(bres) \ BRESINCRPGON(bres.d, bres.minor_axis, bres.m, bres.m1, bres.incr1, bres.incr2) /* * These are the data structures needed to scan * convert regions. Two different scan conversion * methods are available -- the even-odd method, and * the winding number method. * The even-odd rule states that a point is inside * the polygon if a ray drawn from that point in any * direction will pass through an odd number of * path segments. * By the winding number rule, a point is decided * to be inside the polygon if a ray drawn from that * point in any direction passes through a different * number of clockwise and counter-clockwise path * segments. * * These data structures are adapted somewhat from * the algorithm in (Foley/Van Dam) for scan converting * polygons. * The basic algorithm is to start at the top (smallest y) * of the polygon, stepping down to the bottom of * the polygon by incrementing the y coordinate. We * keep a list of edges which the current scanline crosses, * sorted by x. This list is called the Active Edge Table (AET) * As we change the y-coordinate, we update each entry in * in the active edge table to reflect the edges new xcoord. * This list must be sorted at each scanline in case * two edges intersect. * We also keep a data structure known as the Edge Table (ET), * which keeps track of all the edges which the current * scanline has not yet reached. The ET is basically a * list of ScanLineList structures containing a list of * edges which are entered at a given scanline. There is one * ScanLineList per scanline at which an edge is entered. * When we enter a new edge, we move it from the ET to the AET. * * From the AET, we can implement the even-odd rule as in * (Foley/Van Dam). * The winding number rule is a little trickier. We also * keep the EdgeTableEntries in the AET linked by the * nextWETE (winding EdgeTableEntry) link. This allows * the edges to be linked just as before for updating * purposes, but only uses the edges linked by the nextWETE * link as edges representing spans of the polygon to * drawn (as with the even-odd rule). */ /* * for the winding number rule */ #define CLOCKWISE 1 #define COUNTERCLOCKWISE -1 typedef struct _EdgeTableEntry { int ymax; /* ycoord at which we exit this edge. */ BRESINFO bres; /* Bresenham info to run the edge */ struct _EdgeTableEntry *next; /* next in the list */ struct _EdgeTableEntry *back; /* for insertion sort */ struct _EdgeTableEntry *nextWETE; /* for winding num rule */ int ClockWise; /* flag for winding number rule */ } EdgeTableEntry; typedef struct _ScanLineList{ int scanline; /* the scanline represented */ EdgeTableEntry *edgelist; /* header node */ struct _ScanLineList *next; /* next in the list */ } ScanLineList; typedef struct { int ymax; /* ymax for the polygon */ int ymin; /* ymin for the polygon */ ScanLineList scanlines; /* header node */ } EdgeTable; /* * Here is a struct to help with storage allocation * so we can allocate a big chunk at a time, and then take * pieces from this heap when we need to. */ #define SLLSPERBLOCK 25 typedef struct _ScanLineListBlock { ScanLineList SLLs[SLLSPERBLOCK]; struct _ScanLineListBlock *next; } ScanLineListBlock; /* * * a few macros for the inner loops of the fill code where * performance considerations don't allow a procedure call. * * Evaluate the given edge at the given scanline. * If the edge has expired, then we leave it and fix up * the active edge table; otherwise, we increment the * x value to be ready for the next scanline. * The winding number rule is in effect, so we must notify * the caller when the edge has been removed so he * can reorder the Winding Active Edge Table. */ #define EVALUATEEDGEWINDING(pAET, pPrevAET, y, fixWAET) { \ if (pAET->ymax == y) { /* leaving this edge */ \ pPrevAET->next = pAET->next; \ pAET = pPrevAET->next; \ fixWAET = 1; \ if (pAET) \ pAET->back = pPrevAET; \ } \ else { \ BRESINCRPGONSTRUCT(pAET->bres); \ pPrevAET = pAET; \ pAET = pAET->next; \ } \ } /* * Evaluate the given edge at the given scanline. * If the edge has expired, then we leave it and fix up * the active edge table; otherwise, we increment the * x value to be ready for the next scanline. * The even-odd rule is in effect. */ #define EVALUATEEDGEEVENODD(pAET, pPrevAET, y) { \ if (pAET->ymax == y) { /* leaving this edge */ \ pPrevAET->next = pAET->next; \ pAET = pPrevAET->next; \ if (pAET) \ pAET->back = pPrevAET; \ } \ else { \ BRESINCRPGONSTRUCT(pAET->bres); \ pPrevAET = pAET; \ pAET = pAET->next; \ } \ } libX11-1.6.3/src/Font.c000064401431060000012000000505551247741723500147310ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Copyright (c) 2000 The XFree86 Project, Inc. Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OR THE XFREE86 PROJECT 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. Except as contained in this notice, the name of the X Consortium or of the XFree86 Project shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from the X Consortium and the XFree86 Project. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include #if defined(XF86BIGFONT) #define USE_XF86BIGFONT #endif #ifdef USE_XF86BIGFONT #include #ifdef HAS_SHM #include #include #endif #include #include #include #endif #include "Xlcint.h" #include "XlcPubI.h" static XFontStruct *_XQueryFont( Display* /* dpy */, Font /* fid */, unsigned long /* seq */ ); #ifdef USE_XF86BIGFONT /* Private data for this extension. */ typedef struct { XExtCodes *codes; CARD32 serverSignature; CARD32 serverCapabilities; } XF86BigfontCodes; /* Additional bit masks that can be set in serverCapabilities */ #define CAP_VerifiedLocal 256 static XF86BigfontCodes *_XF86BigfontCodes( Display* /* dpy */ ); static XFontStruct *_XF86BigfontQueryFont( Display* /* dpy */, XF86BigfontCodes* /* extcodes */, Font /* fid */, unsigned long /* seq */ ); void _XF86BigfontFreeFontMetrics( XFontStruct* /* fs */ ); #endif /* USE_XF86BIGFONT */ XFontStruct *XLoadQueryFont( register Display *dpy, _Xconst char *name) { XFontStruct *font_result; register long nbytes; Font fid; xOpenFontReq *req; unsigned long seq; #ifdef USE_XF86BIGFONT XF86BigfontCodes *extcodes = _XF86BigfontCodes(dpy); #endif if (_XF86LoadQueryLocaleFont(dpy, name, &font_result, (Font *)0)) return font_result; LockDisplay(dpy); GetReq(OpenFont, req); seq = dpy->request; nbytes = req->nbytes = name ? strlen(name) : 0; req->fid = fid = XAllocID(dpy); req->length += (nbytes+3)>>2; Data (dpy, name, nbytes); font_result = NULL; #ifdef USE_XF86BIGFONT if (extcodes) { font_result = _XF86BigfontQueryFont(dpy, extcodes, fid, seq); seq = 0; } #endif if (!font_result) font_result = _XQueryFont(dpy, fid, seq); UnlockDisplay(dpy); SyncHandle(); return font_result; } XFontStruct *XQueryFont ( register Display *dpy, Font fid) { XFontStruct *font_result; #ifdef USE_XF86BIGFONT XF86BigfontCodes *extcodes = _XF86BigfontCodes(dpy); #endif LockDisplay(dpy); font_result = NULL; #ifdef USE_XF86BIGFONT if (extcodes) { font_result = _XF86BigfontQueryFont(dpy, extcodes, fid, 0L); } #endif if (!font_result) font_result = _XQueryFont(dpy, fid, 0L); UnlockDisplay(dpy); SyncHandle(); return font_result; } int XFreeFont( register Display *dpy, XFontStruct *fs) { register xResourceReq *req; register _XExtension *ext; LockDisplay(dpy); /* call out to any extensions interested */ for (ext = dpy->ext_procs; ext; ext = ext->next) if (ext->free_Font) (*ext->free_Font)(dpy, fs, &ext->codes); GetResReq (CloseFont, fs->fid, req); UnlockDisplay(dpy); SyncHandle(); if (fs->per_char) { #ifdef USE_XF86BIGFONT _XF86BigfontFreeFontMetrics(fs); #else Xfree (fs->per_char); #endif } _XFreeExtData(fs->ext_data); Xfree (fs->properties); Xfree (fs); return 1; } static XFontStruct * _XQueryFont ( register Display *dpy, Font fid, unsigned long seq) { register XFontStruct *fs; unsigned long nbytes; unsigned long reply_left; /* unused data words left in reply buffer */ xQueryFontReply reply; register xResourceReq *req; register _XExtension *ext; _XAsyncHandler async; _XAsyncErrorState async_state; if (seq) { async_state.min_sequence_number = seq; async_state.max_sequence_number = seq; async_state.error_code = BadName; async_state.major_opcode = X_OpenFont; async_state.minor_opcode = 0; async_state.error_count = 0; async.next = dpy->async_handlers; async.handler = _XAsyncErrorHandler; async.data = (XPointer)&async_state; dpy->async_handlers = &async; } GetResReq(QueryFont, fid, req); if (!_XReply (dpy, (xReply *) &reply, ((SIZEOF(xQueryFontReply) - SIZEOF(xReply)) >> 2), xFalse)) { if (seq) DeqAsyncHandler(dpy, &async); return (XFontStruct *)NULL; } if (seq) DeqAsyncHandler(dpy, &async); reply_left = reply.length - ((SIZEOF(xQueryFontReply) - SIZEOF(xReply)) >> 2); if (! (fs = Xmalloc (sizeof (XFontStruct)))) { _XEatDataWords(dpy, reply_left); return (XFontStruct *)NULL; } fs->ext_data = NULL; fs->fid = fid; fs->direction = reply.drawDirection; fs->min_char_or_byte2 = reply.minCharOrByte2; fs->max_char_or_byte2 = reply.maxCharOrByte2; fs->min_byte1 = reply.minByte1; fs->max_byte1 = reply.maxByte1; fs->default_char = reply.defaultChar; fs->all_chars_exist = reply.allCharsExist; fs->ascent = cvtINT16toInt (reply.fontAscent); fs->descent = cvtINT16toInt (reply.fontDescent); /* XXX the next two statements won't work if short isn't 16 bits */ fs->min_bounds = * (XCharStruct *) &reply.minBounds; fs->max_bounds = * (XCharStruct *) &reply.maxBounds; fs->n_properties = reply.nFontProps; /* * if no properties defined for the font, then it is bad * font, but shouldn't try to read nothing. */ fs->properties = NULL; if (fs->n_properties > 0) { /* nFontProps is a CARD16 */ nbytes = reply.nFontProps * SIZEOF(xFontProp); if ((nbytes >> 2) <= reply_left) { size_t pbytes = reply.nFontProps * sizeof(XFontProp); fs->properties = Xmalloc (pbytes); } if (! fs->properties) { Xfree(fs); _XEatDataWords(dpy, reply_left); return (XFontStruct *)NULL; } _XRead32 (dpy, (long *)fs->properties, nbytes); reply_left -= (nbytes >> 2); } /* * If no characters in font, then it is a bad font, but * shouldn't try to read nothing. */ fs->per_char = NULL; if (reply.nCharInfos > 0){ /* nCharInfos is a CARD32 */ if (reply.nCharInfos < (INT_MAX / sizeof(XCharStruct))) { nbytes = reply.nCharInfos * SIZEOF(xCharInfo); if ((nbytes >> 2) <= reply_left) { size_t cibytes = reply.nCharInfos * sizeof(XCharStruct); fs->per_char = Xmalloc (cibytes); } } if (! fs->per_char) { Xfree(fs->properties); Xfree(fs); _XEatDataWords(dpy, reply_left); return (XFontStruct *)NULL; } _XRead16 (dpy, (char *)fs->per_char, nbytes); } /* call out to any extensions interested */ for (ext = dpy->ext_procs; ext; ext = ext->next) if (ext->create_Font) (*ext->create_Font)(dpy, fs, &ext->codes); return fs; } #ifdef USE_XF86BIGFONT /* Magic cookie for finding the right XExtData structure on the display's extension list. */ static int XF86BigfontNumber = 1040697125; static int _XF86BigfontFreeCodes ( XExtData *extension) { /* Don't Xfree(extension->private_data) because it is on the same malloc chunk as extension. */ /* Don't Xfree(extension->private_data->codes) because this is shared with the display's ext_procs list. */ return 0; } static XF86BigfontCodes * _XF86BigfontCodes ( register Display *dpy) { XEDataObject dpy_union; XExtData *pData; XF86BigfontCodes *pCodes; char *envval; dpy_union.display = dpy; /* If the server is known to support the XF86Bigfont extension, * return the extension codes. If the server is known to not support * the extension, don't bother checking again. */ pData = XFindOnExtensionList(XEHeadOfExtensionList(dpy_union), XF86BigfontNumber); if (pData) return (XF86BigfontCodes *) pData->private_data; pData = Xmalloc(sizeof(XExtData) + sizeof(XF86BigfontCodes)); if (!pData) { /* Out of luck. */ return (XF86BigfontCodes *) NULL; } /* See if the server supports the XF86Bigfont extension. */ envval = getenv("XF86BIGFONT_DISABLE"); /* Let the user disable it. */ if (envval != NULL && envval[0] != '\0') pCodes = NULL; else { XExtCodes *codes = XInitExtension(dpy, XF86BIGFONTNAME); if (codes == NULL) pCodes = NULL; else { pCodes = (XF86BigfontCodes *) &pData[1]; pCodes->codes = codes; } } pData->number = XF86BigfontNumber; pData->private_data = (XPointer) pCodes; pData->free_private = _XF86BigfontFreeCodes; XAddToExtensionList(XEHeadOfExtensionList(dpy_union), pData); if (pCodes) { int result; /* See if the server supports the XF86BigfontQueryFont request. */ xXF86BigfontQueryVersionReply reply; register xXF86BigfontQueryVersionReq *req; LockDisplay(dpy); GetReq(XF86BigfontQueryVersion, req); req->reqType = pCodes->codes->major_opcode; req->xf86bigfontReqType = X_XF86BigfontQueryVersion; result = _XReply (dpy, (xReply *) &reply, (SIZEOF(xXF86BigfontQueryVersionReply) - SIZEOF(xReply)) >> 2, xFalse); UnlockDisplay(dpy); SyncHandle(); if(!result) goto ignore_extension; /* No need to provide backward compatibility with version 1.0. It was never widely distributed. */ if (!(reply.majorVersion > 1 || (reply.majorVersion == 1 && reply.minorVersion >= 1))) goto ignore_extension; pCodes->serverSignature = reply.signature; pCodes->serverCapabilities = reply.capabilities; } return pCodes; ignore_extension: /* No need to Xfree(pCodes) or Xfree(pCodes->codes), see _XF86BigfontFreeCodes comment. */ pCodes = (XF86BigfontCodes *) NULL; pData->private_data = (XPointer) pCodes; return pCodes; } static int _XF86BigfontFreeNop ( XExtData *extension) { return 0; } static XFontStruct * _XF86BigfontQueryFont ( register Display *dpy, XF86BigfontCodes *extcodes, Font fid, unsigned long seq) { register XFontStruct *fs; unsigned long nbytes; unsigned long reply_left; /* unused data left in reply buffer */ xXF86BigfontQueryFontReply reply; register xXF86BigfontQueryFontReq *req; register _XExtension *ext; _XAsyncHandler async1; _XAsyncErrorState async1_state; _XAsyncHandler async2; _XAsyncErrorState async2_state; if (seq) { async1_state.min_sequence_number = seq; async1_state.max_sequence_number = seq; async1_state.error_code = BadName; async1_state.major_opcode = X_OpenFont; async1_state.minor_opcode = 0; async1_state.error_count = 0; async1.next = dpy->async_handlers; async1.handler = _XAsyncErrorHandler; async1.data = (XPointer)&async1_state; dpy->async_handlers = &async1; } GetReq(XF86BigfontQueryFont, req); req->reqType = extcodes->codes->major_opcode; req->xf86bigfontReqType = X_XF86BigfontQueryFont; req->id = fid; req->flags = (extcodes->serverCapabilities & XF86Bigfont_CAP_LocalShm ? XF86Bigfont_FLAGS_Shm : 0); /* The function _XQueryFont benefits from a "magic" error handler for BadFont coming from a X_QueryFont request. (See function _XReply.) We have to establish an error handler ourselves. */ async2_state.min_sequence_number = dpy->request; async2_state.max_sequence_number = dpy->request; async2_state.error_code = BadFont; async2_state.major_opcode = extcodes->codes->major_opcode; async2_state.minor_opcode = X_XF86BigfontQueryFont; async2_state.error_count = 0; async2.next = dpy->async_handlers; async2.handler = _XAsyncErrorHandler; async2.data = (XPointer)&async2_state; dpy->async_handlers = &async2; if (!_XReply (dpy, (xReply *) &reply, ((SIZEOF(xXF86BigfontQueryFontReply) - SIZEOF(xReply)) >> 2), xFalse)) { DeqAsyncHandler(dpy, &async2); if (seq) DeqAsyncHandler(dpy, &async1); return (XFontStruct *)NULL; } DeqAsyncHandler(dpy, &async2); if (seq) DeqAsyncHandler(dpy, &async1); reply_left = reply.length - ((SIZEOF(xXF86BigfontQueryFontReply) - SIZEOF(xReply)) >> 2); if (! (fs = Xmalloc (sizeof (XFontStruct)))) { _XEatDataWords(dpy, reply_left); return (XFontStruct *)NULL; } fs->ext_data = NULL; fs->fid = fid; fs->direction = reply.drawDirection; fs->min_char_or_byte2 = reply.minCharOrByte2; fs->max_char_or_byte2 = reply.maxCharOrByte2; fs->min_byte1 = reply.minByte1; fs->max_byte1 = reply.maxByte1; fs->default_char = reply.defaultChar; fs->all_chars_exist = reply.allCharsExist; fs->ascent = cvtINT16toInt (reply.fontAscent); fs->descent = cvtINT16toInt (reply.fontDescent); /* XXX the next two statements won't work if short isn't 16 bits */ fs->min_bounds = * (XCharStruct *) &reply.minBounds; fs->max_bounds = * (XCharStruct *) &reply.maxBounds; fs->n_properties = reply.nFontProps; /* * if no properties defined for the font, then it is bad * font, but shouldn't try to read nothing. */ fs->properties = NULL; if (fs->n_properties > 0) { /* nFontProps is a CARD16 */ nbytes = reply.nFontProps * SIZEOF(xFontProp); if ((nbytes >> 2) <= reply_left) { size_t pbytes = reply.nFontProps * sizeof(XFontProp); fs->properties = Xmalloc (pbytes); } if (! fs->properties) { Xfree(fs); _XEatDataWords(dpy, reply_left); return (XFontStruct *)NULL; } _XRead32 (dpy, (long *)fs->properties, nbytes); reply_left -= (nbytes >> 2); } fs->per_char = NULL; #ifndef LONG64 /* compares each part to half the maximum, which should be far more than any real font needs, so the combined total doesn't overflow either */ if (reply.nUniqCharInfos > ((ULONG_MAX / 2) / SIZEOF(xCharInfo)) || reply.nCharInfos > ((ULONG_MAX / 2) / sizeof(CARD16))) { Xfree(fs->properties); Xfree(fs); _XEatDataWords(dpy, reply_left); return (XFontStruct *)NULL; } #endif if (reply.nCharInfos > 0) { /* fprintf(stderr, "received font metrics, nCharInfos = %d, nUniqCharInfos = %d, shmid = %d\n", reply.nCharInfos, reply.nUniqCharInfos, reply.shmid); */ if (reply.shmid == (CARD32)(-1)) { xCharInfo* pUniqCI; CARD16* pIndex2UniqIndex; int i; nbytes = reply.nUniqCharInfos * SIZEOF(xCharInfo) + (reply.nCharInfos+1)/2 * 2 * sizeof(CARD16); pUniqCI = Xmalloc (nbytes); if (!pUniqCI) { Xfree(fs->properties); Xfree(fs); _XEatDataWords(dpy, reply_left); return (XFontStruct *)NULL; } if (! (fs->per_char = Xmalloc (reply.nCharInfos * sizeof(XCharStruct)))) { Xfree(pUniqCI); Xfree(fs->properties); Xfree(fs); _XEatDataWords(dpy, reply_left); return (XFontStruct *)NULL; } _XRead16 (dpy, (char *) pUniqCI, nbytes); pIndex2UniqIndex = (CARD16*) (pUniqCI + reply.nUniqCharInfos); for (i = 0; i < reply.nCharInfos; i++) { if (pIndex2UniqIndex[i] >= reply.nUniqCharInfos) { fprintf(stderr, "_XF86BigfontQueryFont: server returned wrong data\n"); Xfree(pUniqCI); Xfree(fs->properties); Xfree(fs); return (XFontStruct *)NULL; } /* XXX the next statement won't work if short isn't 16 bits */ fs->per_char[i] = * (XCharStruct *) &pUniqCI[pIndex2UniqIndex[i]]; } Xfree(pUniqCI); } else { #ifdef HAS_SHM XExtData *pData; XEDataObject fs_union; char *addr; pData = Xmalloc(sizeof(XExtData)); if (!pData) { Xfree(fs->properties); Xfree(fs); return (XFontStruct *)NULL; } /* In some cases (e.g. an ssh daemon forwarding an X session to a remote machine) it is possible that the X server thinks we are running on the same machine (because getpeername() and LocalClient() cannot know about the forwarding) but we are not really local. Therefore, when we attach the first shared memory segment, we verify that we are on the same machine as the X server by checking that 1. shmat() succeeds, 2. the segment has a sufficient size, 3. it contains the X server's signature. Then we set the CAP_VerifiedLocal bit to indicate the verification was successful. */ if ((addr = shmat(reply.shmid, NULL, SHM_RDONLY)) == (char *)-1) { if (extcodes->serverCapabilities & CAP_VerifiedLocal) fprintf(stderr, "_XF86BigfontQueryFont: could not attach shm segment\n"); Xfree(pData); Xfree(fs->properties); Xfree(fs); /* Stop requesting shared memory transport from now on. */ extcodes->serverCapabilities &= ~ XF86Bigfont_CAP_LocalShm; return (XFontStruct *)NULL; } if (!(extcodes->serverCapabilities & CAP_VerifiedLocal)) { struct shmid_ds buf; if (!(shmctl(reply.shmid, IPC_STAT, &buf) >= 0 && reply.nCharInfos < (INT_MAX / sizeof(XCharStruct)) && buf.shm_segsz >= reply.shmsegoffset + reply.nCharInfos * sizeof(XCharStruct) + sizeof(CARD32) && *(CARD32 *)(addr + reply.shmsegoffset + reply.nCharInfos * sizeof(XCharStruct)) == extcodes->serverSignature)) { shmdt(addr); Xfree(pData); Xfree(fs->properties); Xfree(fs); /* Stop requesting shared memory transport from now on. */ extcodes->serverCapabilities &= ~ XF86Bigfont_CAP_LocalShm; return (XFontStruct *)NULL; } extcodes->serverCapabilities |= CAP_VerifiedLocal; } pData->number = XF86BigfontNumber; pData->private_data = (XPointer) addr; pData->free_private = _XF86BigfontFreeNop; fs_union.font = fs; XAddToExtensionList(XEHeadOfExtensionList(fs_union), pData); fs->per_char = (XCharStruct *) (addr + reply.shmsegoffset); #else fprintf(stderr, "_XF86BigfontQueryFont: try recompiling libX11 with HasShm, Xserver has shm support\n"); if (fs->properties) Xfree(fs->properties); Xfree(fs); /* Stop requesting shared memory transport from now on. */ extcodes->serverCapabilities &= ~ XF86Bigfont_CAP_LocalShm; return (XFontStruct *)NULL; #endif } } /* call out to any extensions interested */ for (ext = dpy->ext_procs; ext; ext = ext->next) if (ext->create_Font) (*ext->create_Font)(dpy, fs, &ext->codes); return fs; } void _XF86BigfontFreeFontMetrics (XFontStruct *fs) { #ifdef HAS_SHM XExtData *pData; XEDataObject fs_union; fs_union.font = fs; if ((pData = XFindOnExtensionList(XEHeadOfExtensionList(fs_union), XF86BigfontNumber))) shmdt ((char *) pData->private_data); else Xfree (fs->per_char); #else Xfree (fs->per_char); #endif } #endif /* USE_XF86BIGFONT */ int _XF86LoadQueryLocaleFont( Display *dpy, _Xconst char *name, XFontStruct **xfp, Font *fidp) { int l; const char *charset, *p; char buf[256]; XFontStruct *fs; XLCd lcd; if (!name) return 0; l = strlen(name); if (l < 2 || name[l - 1] != '*' || name[l - 2] != '-') return 0; charset = NULL; /* next three lines stolen from _XkbGetCharset() */ lcd = _XlcCurrentLC(); if ((lcd = _XlcCurrentLC()) != 0) charset = XLC_PUBLIC(lcd, encoding_name); if (!charset || (p = strrchr(charset, '-')) == 0 || p == charset || p[1] == 0 || (p[1] == '*' && p[2] == 0)) { /* prefer latin1 if no encoding found */ charset = "ISO8859-1"; p = charset + 7; } if (l - 2 - (p - charset) < 0) return 0; if (_XlcNCompareISOLatin1(name + l - 2 - (p - charset), charset, p - charset)) return 0; if (strlen(p + 1) + l - 1 >= sizeof(buf) - 1) return 0; strcpy(buf, name); strcpy(buf + l - 1, p + 1); fs = XLoadQueryFont(dpy, buf); if (!fs) return 0; if (xfp) { *xfp = fs; if (fidp) *fidp = fs->fid; } else if (fidp) { if (fs->per_char) { #ifdef USE_XF86BIGFONT _XF86BigfontFreeFontMetrics(fs); #else Xfree (fs->per_char); #endif } _XFreeExtData(fs->ext_data); Xfree (fs->properties); *fidp = fs->fid; Xfree (fs); } else { XFreeFont(dpy, fs); } return 1; } data = (XPointer) pCodes; return pCodes; } static int _XF86BigfontFreeNop ( XExtData *extension) { return 0; } static XFontStruct * _libX11-1.6.3/src/LiICmaps.c000064401431060000012000000040561247741723500154570ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" Colormap *XListInstalledColormaps( register Display *dpy, Window win, int *n) /* RETURN */ { unsigned long nbytes; Colormap *cmaps; xListInstalledColormapsReply rep; register xResourceReq *req; LockDisplay(dpy); GetResReq(ListInstalledColormaps, win, req); if(_XReply(dpy, (xReply *) &rep, 0, xFalse) == 0) { UnlockDisplay(dpy); SyncHandle(); *n = 0; return((Colormap *) NULL); } if (rep.nColormaps) { nbytes = rep.nColormaps * sizeof(Colormap); cmaps = Xmalloc(nbytes); if (! cmaps) { _XEatDataWords(dpy, rep.length); UnlockDisplay(dpy); SyncHandle(); return((Colormap *) NULL); } nbytes = rep.nColormaps << 2; _XRead32 (dpy, (long *) cmaps, nbytes); } else cmaps = (Colormap *) NULL; *n = rep.nColormaps; UnlockDisplay(dpy); SyncHandle(); return(cmaps); } libX11-1.6.3/src/BdrWidth.c000064401431060000012000000031451247741723500155230ustar00alancstaff00002660200006 /* Copyright 1994, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XSetWindowBorderWidth( Display *dpy, Window w, unsigned int width) { unsigned long lwidth = width; /* must be CARD32 */ register xConfigureWindowReq *req; LockDisplay(dpy); GetReqExtra(ConfigureWindow, 4, req); req->window = w; req->mask = CWBorderWidth; OneDataCard32 (dpy, NEXTPTR(req,xConfigureWindowReq), lwidth); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/LowerWin.c000064401431060000012000000030771247741723500155660ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XLowerWindow( Display *dpy, Window w) { register xConfigureWindowReq *req; unsigned long val = Below; /* needed for macro */ LockDisplay(dpy); GetReqExtra(ConfigureWindow, 4, req); req->window = w; req->mask = CWStackMode; OneDataCard32 (dpy, NEXTPTR(req,xConfigureWindowReq), val); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/TextToStr.c000064401431060000012000000057501247741723500157400ustar00alancstaff00002660200006/* Copyright 1989, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include /* * XTextPropertyToStringList - set list and count to contain data stored in * null-separated STRING property. */ Status XTextPropertyToStringList ( XTextProperty *tp, char ***list_return, int *count_return) { char **list; /* return value */ int nelements; /* return value */ register char *cp; /* temp variable */ char *start; /* start of thing to copy */ int i, j; /* iterator variables */ int datalen = (int) tp->nitems; /* for convenience */ /* * make sure we understand how to do it */ if (tp->encoding != XA_STRING || tp->format != 8) return False; if (datalen == 0) { *list_return = NULL; *count_return = 0; return True; } /* * walk the list to figure out how many elements there are */ nelements = 1; /* since null-separated */ for (cp = (char *) tp->value, i = datalen; i > 0; cp++, i--) { if (*cp == '\0') nelements++; } /* * allocate list and duplicate */ list = Xmalloc (nelements * sizeof (char *)); if (!list) return False; start = Xmalloc ((datalen + 1) * sizeof (char)); /* for */ if (!start) { Xfree (list); return False; } /* * copy data */ memcpy (start, (char *) tp->value, tp->nitems); start[datalen] = '\0'; /* * walk down list setting value */ for (cp = start, i = datalen + 1, j = 0; i > 0; cp++, i--) { if (*cp == '\0') { list[j] = start; start = (cp + 1); j++; } } /* * append final null pointer and then return data */ *list_return = list; *count_return = nelements; return True; } void XFreeStringList (char **list) { if (list) { if (list[0]) Xfree (list[0]); Xfree (list); list = NULL; } } vertising or otherwise tlibX11-1.6.3/src/CrCmap.c000064401431060000012000000033441247741723500151620ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xcmsint.h" Colormap XCreateColormap( register Display *dpy, Window w, Visual *visual, int alloc) { register xCreateColormapReq *req; Colormap mid; LockDisplay(dpy); GetReq(CreateColormap, req); req->window = w; mid = req->mid = XAllocID(dpy); req->alloc = alloc; if (visual == CopyFromParent) req->visual = CopyFromParent; else req->visual = visual->visualid; UnlockDisplay(dpy); SyncHandle(); #ifdef XCMS _XcmsAddCmapRec(dpy, mid, w, visual); #endif return(mid); } libX11-1.6.3/src/imConv.c000064401431060000012000000237151247741723500152540ustar00alancstaff00002660200006/****************************************************************** Copyright 1991, 1992 by Fuji Xerox Co.,Ltd. Copyright 1993, 1994 by FUJITSU LIMITED Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Fuji Xerox Co.,Ltd. , and that the name of FUJITSU LIMITED not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. Fuji Xerox Co.,Ltd. , and FUJITSU LIMITED makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. FUJI XEROX CO.,LTD. AND FUJITSU LIMITED DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJI XEROX CO.,LTD. AND FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Auther: Kazunori Nishihara, Fuji Xerox Co.,Ltd. kaz@ssdev.ksp.fujixerox.co.jp Modifier: Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ /* 2000 Modifier: Ivan Pascal The XFree86 Project. */ #ifdef HAVE_CONFIG_H #include #endif #include #include "Xlibint.h" #include "Xlcint.h" #include "Ximint.h" #include "XlcPubI.h" #ifdef XKB /* * rather than just call _XLookupString (i.e. the pre-XKB XLookupString) * do this because with XKB the event may have some funky modifiers that * _XLookupString doesn't grok. */ #include "XKBlib.h" #define XLOOKUPSTRING lookup_string #else #define XLOOKUPSTRING XLookupString #endif typedef unsigned int ucs4_t; typedef int (*ucstocsConvProc)( XPointer, unsigned char *, ucs4_t, int ); struct SubstRec { const char encoding_name[8]; const char charset_name[12]; }; static const struct SubstRec SubstTable[] = { {"STRING", "ISO8859-1"}, {"TIS620", "TIS620-0"}, {"UTF-8", "ISO10646-1"} }; #define num_substitute (sizeof SubstTable / sizeof SubstTable[0]) /* * Given the name of a charset, returns the pointer to convertors * from UCS char to specified charset char. * This converter is needed for _XimGetCharCode subroutine. */ XPointer _XimGetLocaleCode ( _Xconst char* encoding_name) { XPointer cvt = _Utf8GetConvByName(encoding_name); if (!cvt && encoding_name) { int i; for (i = 0; i < num_substitute; i++) if (!strcmp(encoding_name, SubstTable[i].encoding_name)) return _Utf8GetConvByName(SubstTable[i].charset_name); } return cvt; } /* * Returns the locale dependent representation of a keysym. * The locale's encoding is passed in form of pointer to UCS convertor. * The resulting multi-byte sequence is placed starting at buf (a buffer * with nbytes bytes, nbytes should be >= 8) and is NUL terminated. * Returns the length of the resulting multi-byte sequence, excluding the * terminating NUL byte. Return 0 if the keysym is not representable in the * locale */ /*ARGSUSED*/ int _XimGetCharCode ( XPointer ucs_conv, KeySym keysym, unsigned char* buf, int nbytes) { int count = 0; ucstocsConvProc cvt = (ucstocsConvProc) ucs_conv; ucs4_t ucs4; if (keysym < 0x80) { buf[0] = (char) keysym; count = 1; } else if (cvt) { ucs4 = KeySymToUcs4(keysym); if (ucs4) count = (*cvt)((XPointer)NULL, buf, ucs4, nbytes); } if (count < 0) count = 0; if (count>nbytes) return nbytes; if (countdisplay); XkbSetXlibControls (event->display, XkbLC_ForceLatin1Lookup, XkbLC_ForceLatin1Lookup); ret = XLookupString(event, (char *)buffer, nbytes, keysym, status); XkbSetXlibControls (event->display, XkbLC_ForceLatin1Lookup, ctrls); return ret; } #endif #define BUF_SIZE (20) int _XimLookupMBText( Xic ic, XKeyEvent* event, char* buffer, int nbytes, KeySym* keysym, XComposeStatus* status) { int count; KeySym symbol; Status dummy; Xim im = (Xim)ic->core.im; XimCommonPrivateRec* private = &im->private.common; unsigned char look[BUF_SIZE]; ucs4_t ucs4; /* force a latin-1 lookup for compatibility */ count = XLOOKUPSTRING(event, (char *)buffer, nbytes, &symbol, status); if (keysym != NULL) *keysym = symbol; if ((nbytes == 0) || (symbol == NoSymbol)) return count; if (count > 1) { memcpy(look, (char *)buffer,count); look[count] = '\0'; if ((count = im->methods->ctstombs(ic->core.im, (char*) look, count, buffer, nbytes, &dummy)) < 0) { count = 0; } } else if ((count == 0) || (count == 1 && (symbol > 0x7f && symbol < 0xff00))) { XPointer from = (XPointer) &ucs4; XPointer to = (XPointer) look; int from_len = 1; int to_len = BUF_SIZE; XPointer args[1]; XlcCharSet charset; args[0] = (XPointer) &charset; ucs4 = (ucs4_t) KeySymToUcs4(symbol); if (!ucs4) return 0; if (_XlcConvert(private->ucstoc_conv, &from, &from_len, &to, &to_len, args, 1 ) != 0) { count = 0; } else { from = (XPointer) look; to = (XPointer) buffer; from_len = BUF_SIZE - to_len; to_len = nbytes; args[0] = (XPointer) charset; if (_XlcConvert(private->cstomb_conv, &from, &from_len, &to, &to_len, args, 1 ) != 0) { count = 0; } else { count = nbytes - to_len; } } } /* FIXME: * we should make sure that if the character is a Latin1 character * and it's on the right side, and we're in a non-Latin1 locale * that this is a valid Latin1 character for this locale. */ return count; } int _XimLookupWCText( Xic ic, XKeyEvent* event, wchar_t* buffer, int nbytes, KeySym* keysym, XComposeStatus* status) { int count; KeySym symbol; Status dummy; Xim im = (Xim)ic->core.im; XimCommonPrivateRec* private = &im->private.common; unsigned char look[BUF_SIZE]; ucs4_t ucs4; /* force a latin-1 lookup for compatibility */ count = XLOOKUPSTRING(event, (char *)look, nbytes, &symbol, status); if (keysym != NULL) *keysym = symbol; if ((nbytes == 0) || (symbol == NoSymbol)) return count; if (count > 1) { if ((count = im->methods->ctstowcs(ic->core.im, (char*) look, count, buffer, nbytes, &dummy)) < 0) { count = 0; } } else if ((count == 0) || (count == 1 && (symbol > 0x7f && symbol < 0xff00))) { XPointer from = (XPointer) &ucs4; XPointer to = (XPointer) look; int from_len = 1; int to_len = BUF_SIZE; XPointer args[1]; XlcCharSet charset; args[0] = (XPointer) &charset; ucs4 = (ucs4_t) KeySymToUcs4(symbol); if (!ucs4) return 0; if (_XlcConvert(private->ucstoc_conv, &from, &from_len, &to, &to_len, args, 1 ) != 0) { count = 0; } else { from = (XPointer) look; to = (XPointer) buffer; from_len = BUF_SIZE - to_len; to_len = nbytes; args[0] = (XPointer) charset; if (_XlcConvert(private->cstowc_conv, &from, &from_len, &to, &to_len, args, 1 ) != 0) { count = 0; } else { count = nbytes - to_len; } } } else /* FIXME: * we should make sure that if the character is a Latin1 character * and it's on the right side, and we're in a non-Latin1 locale * that this is a valid Latin1 character for this locale. */ buffer[0] = look[0]; return count; } int _XimLookupUTF8Text( Xic ic, XKeyEvent* event, char* buffer, int nbytes, KeySym* keysym, XComposeStatus* status) { int count; KeySym symbol; Status dummy; Xim im = (Xim)ic->core.im; XimCommonPrivateRec* private = &im->private.common; unsigned char look[BUF_SIZE]; ucs4_t ucs4; /* force a latin-1 lookup for compatibility */ count = XLOOKUPSTRING(event, (char *)buffer, nbytes, &symbol, status); if (keysym != NULL) *keysym = symbol; if ((nbytes == 0) || (symbol == NoSymbol)) return count; if (count > 1) { memcpy(look, (char *)buffer,count); look[count] = '\0'; if ((count = im->methods->ctstoutf8(ic->core.im, (char*) look, count, buffer, nbytes, &dummy)) < 0) { count = 0; } } else if ((count == 0) || (count == 1 && (symbol > 0x7f && symbol < 0xff00))) { XPointer from = (XPointer) &ucs4; int from_len = 1; XPointer to = (XPointer) buffer; int to_len = nbytes; ucs4 = (ucs4_t) KeySymToUcs4(symbol); if (!ucs4) return 0; if (_XlcConvert(private->ucstoutf8_conv, &from, &from_len, &to, &to_len, NULL, 0) != 0) { count = 0; } else { count = nbytes - to_len; } } /* FIXME: * we should make sure that if the character is a Latin1 character * and it's on the right side, and we're in a non-Latin1 locale * that this is a valid Latin1 character for this locale. */ return count; } count = 0; if (count>nbytes) return nblibX11-1.6.3/src/CrGlCur.c000064401431060000012000000143411247741723500153150ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #ifdef USE_DYNAMIC_XCURSOR #ifdef __UNIXOS2__ #define RTLD_LAZY 1 #define LIBXCURSOR "Xcursor.dll" #endif #include #include #if defined(hpux) #include #else #include #endif #include "Cr.h" #ifdef __CYGWIN__ #define LIBXCURSOR "cygXcursor-1.dll" #endif #if defined(hpux) typedef shl_t XModuleType; #else typedef void *XModuleType; #endif #ifndef LIBXCURSOR #define LIBXCURSOR "libXcursor.so.1" #endif static char libraryName[] = LIBXCURSOR; static XModuleType open_library (void) { char *library = libraryName; char *dot; XModuleType module; for (;;) { #if defined(hpux) module = shl_load(library, BIND_DEFERRED, 0L); #else module = dlopen(library, RTLD_LAZY); #endif if (module) return module; dot = strrchr (library, '.'); if (!dot) break; *dot = '\0'; } return NULL; } static void * fetch_symbol (XModuleType module, const char *under_symbol) { void *result = NULL; const char *symbol = under_symbol + 1; #if defined(hpux) int getsyms_cnt, i; struct shl_symbol *symbols; getsyms_cnt = shl_getsymbols(module, TYPE_PROCEDURE, EXPORT_SYMBOLS, malloc, &symbols); for(i=0; i 0) { free(symbols); } #else result = dlsym (module, symbol); if (!result) result = dlsym (module, under_symbol); #endif return result; } typedef void (*NoticeCreateBitmapFunc) (Display *dpy, Pixmap pid, unsigned int width, unsigned int height); typedef void (*NoticePutBitmapFunc) (Display *dpy, Drawable draw, XImage *image); typedef Cursor (*TryShapeBitmapCursorFunc) (Display *dpy, Pixmap source, Pixmap mask, XColor *foreground, XColor *background, unsigned int x, unsigned int y); typedef Cursor (*TryShapeCursorFunc) (Display *dpy, Font source_font, Font mask_font, unsigned int source_char, unsigned int mask_char, XColor _Xconst *foreground, XColor _Xconst *background); static XModuleType _XcursorModule; static Bool _XcursorModuleTried; #define GetFunc(type,name,ret) {\ static Bool been_here; \ static type staticFunc; \ \ _XLockMutex (_Xglobal_lock); \ if (!been_here) \ { \ been_here = True; \ if (!_XcursorModuleTried) \ { \ _XcursorModuleTried = True; \ _XcursorModule = open_library (); \ } \ if (_XcursorModule) \ staticFunc = (type) fetch_symbol (_XcursorModule, "_" name); \ } \ ret = staticFunc; \ _XUnlockMutex (_Xglobal_lock); \ } static Cursor _XTryShapeCursor (Display *dpy, Font source_font, Font mask_font, unsigned int source_char, unsigned int mask_char, XColor _Xconst *foreground, XColor _Xconst *background) { TryShapeCursorFunc func; GetFunc (TryShapeCursorFunc, "XcursorTryShapeCursor", func); if (func) return (*func) (dpy, source_font, mask_font, source_char, mask_char, foreground, background); return None; } void _XNoticeCreateBitmap (Display *dpy, Pixmap pid, unsigned int width, unsigned int height) { NoticeCreateBitmapFunc func; GetFunc (NoticeCreateBitmapFunc, "XcursorNoticeCreateBitmap", func); if (func) (*func) (dpy, pid, width, height); } void _XNoticePutBitmap (Display *dpy, Drawable draw, XImage *image) { NoticePutBitmapFunc func; GetFunc (NoticePutBitmapFunc, "XcursorNoticePutBitmap", func); if (func) (*func) (dpy, draw, image); } Cursor _XTryShapeBitmapCursor (Display *dpy, Pixmap source, Pixmap mask, XColor *foreground, XColor *background, unsigned int x, unsigned int y) { TryShapeBitmapCursorFunc func; GetFunc (TryShapeBitmapCursorFunc, "XcursorTryShapeBitmapCursor", func); if (func) return (*func) (dpy, source, mask, foreground, background, x, y); return None; } #endif Cursor XCreateGlyphCursor( register Display *dpy, Font source_font, Font mask_font, unsigned int source_char, unsigned int mask_char, XColor _Xconst *foreground, XColor _Xconst *background) { Cursor cid; register xCreateGlyphCursorReq *req; #ifdef USE_DYNAMIC_XCURSOR cid = _XTryShapeCursor (dpy, source_font, mask_font, source_char, mask_char, foreground, background); if (cid) return cid; #endif LockDisplay(dpy); GetReq(CreateGlyphCursor, req); cid = req->cid = XAllocID(dpy); req->source = source_font; req->mask = mask_font; req->sourceChar = source_char; req->maskChar = mask_char; req->foreRed = foreground->red; req->foreGreen = foreground->green; req->foreBlue = foreground->blue; req->backRed = background->red; req->backGreen = background->green; req->backBlue = background->blue; UnlockDisplay(dpy); SyncHandle(); return (cid); } 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. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise tlibX11-1.6.3/src/StName.c000064401431060000012000000033351247741723500152040ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include #include int XStoreName ( register Display *dpy, Window w, _Xconst char *name) { return XChangeProperty(dpy, w, XA_WM_NAME, XA_STRING, 8, PropModeReplace, (_Xconst unsigned char *)name, name ? strlen(name) : 0); } int XSetIconName ( register Display *dpy, Window w, _Xconst char *icon_name) { return XChangeProperty(dpy, w, XA_WM_ICON_NAME, XA_STRING, 8, PropModeReplace, (_Xconst unsigned char *)icon_name, icon_name ? strlen(icon_name) : 0); } libX11-1.6.3/src/Withdraw.c000064401431060000012000000057301247741723500156070ustar00alancstaff00002660200006 /*********************************************************** Copyright 1988 by Wyse Technology, Inc., San Jose, Ca., All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name Wyse not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. WYSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1988, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include /* * This function instructs the window manager to change this window from * NormalState or IconicState to Withdrawn. */ Status XWithdrawWindow ( Display *dpy, Window w, int screen) { XUnmapWindow (dpy, w); { Window root = RootWindow (dpy, screen); XUnmapEvent ev = { .type = UnmapNotify, .event = root, .window = w, .from_configure = False }; return (XSendEvent (dpy, root, False, SubstructureRedirectMask|SubstructureNotifyMask, (XEvent *)&ev)); } } libX11-1.6.3/src/Cursor.c000064401431060000012000000036111247741723500152670ustar00alancstaff00002660200006/* Copyright 1987, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" static XColor _Xconst foreground = { 0, 0, 0, 0 }; /* black */ static XColor _Xconst background = { 0, 65535, 65535, 65535 }; /* white */ Cursor XCreateFontCursor( Display *dpy, unsigned int which) { /* * the cursor font contains the shape glyph followed by the mask * glyph; so character position 0 contains a shape, 1 the mask for 0, * 2 a shape, etc. contains hash define names * for all of these. */ if (dpy->cursor_font == None) { dpy->cursor_font = XLoadFont (dpy, CURSORFONT); if (dpy->cursor_font == None) return None; } return XCreateGlyphCursor (dpy, dpy->cursor_font, dpy->cursor_font, which, which + 1, &foreground, &background); } libX11-1.6.3/src/CrGC.c000064401431060000012000000237741247741723500146040ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Cr.h" static XGCValues const initial_GC = { GXcopy, /* function */ AllPlanes, /* plane_mask */ 0L, /* foreground */ 1L, /* background */ 0, /* line_width */ LineSolid, /* line_style */ CapButt, /* cap_style */ JoinMiter, /* join_style */ FillSolid, /* fill_style */ EvenOddRule,/* fill_rule */ ArcPieSlice,/* arc_mode */ (Pixmap)~0L,/* tile, impossible (unknown) resource */ (Pixmap)~0L,/* stipple, impossible (unknown) resource */ 0, /* ts_x_origin */ 0, /* ts_y_origin */ (Font)~0L, /* font, impossible (unknown) resource */ ClipByChildren, /* subwindow_mode */ True, /* graphics_exposures */ 0, /* clip_x_origin */ 0, /* clip_y_origin */ None, /* clip_mask */ 0, /* dash_offset */ 4 /* dashes (list [4,4]) */ }; static void _XGenerateGCList( register Display *dpy, GC gc, xReq *req); GC XCreateGC ( register Display *dpy, Drawable d, /* Window or Pixmap for which depth matches */ unsigned long valuemask, /* which ones to set initially */ XGCValues *values) /* the values themselves */ { register GC gc; register xCreateGCReq *req; register _XExtension *ext; LockDisplay(dpy); if ((gc = Xmalloc (sizeof(struct _XGC))) == NULL) { UnlockDisplay(dpy); SyncHandle(); return (NULL); } gc->rects = 0; gc->dashes = 0; gc->ext_data = NULL; gc->values = initial_GC; gc->dirty = 0L; valuemask &= (1L << (GCLastBit + 1)) - 1; if (valuemask) _XUpdateGCCache (gc, valuemask, values); GetReq(CreateGC, req); req->drawable = d; req->gc = gc->gid = XAllocID(dpy); if ((req->mask = gc->dirty)) _XGenerateGCList (dpy, gc, (xReq *) req); /* call out to any extensions interested */ for (ext = dpy->ext_procs; ext; ext = ext->next) if (ext->create_GC) (*ext->create_GC)(dpy, gc, &ext->codes); gc->dirty = 0L; /* allow extensions to see dirty bits */ UnlockDisplay(dpy); SyncHandle(); return (gc); } /* * GenerateGCList looks at the GC dirty bits, and appends all the required * long words to the request being generated. */ static void _XGenerateGCList ( register Display *dpy, GC gc, xReq *req) { unsigned long values[32]; register unsigned long *value = values; long nvalues; register XGCValues *gv = &gc->values; register unsigned long dirty = gc->dirty; /* * Note: The order of these tests are critical; the order must be the * same as the GC mask bits in the word. */ if (dirty & GCFunction) *value++ = gv->function; if (dirty & GCPlaneMask) *value++ = gv->plane_mask; if (dirty & GCForeground) *value++ = gv->foreground; if (dirty & GCBackground) *value++ = gv->background; if (dirty & GCLineWidth) *value++ = gv->line_width; if (dirty & GCLineStyle) *value++ = gv->line_style; if (dirty & GCCapStyle) *value++ = gv->cap_style; if (dirty & GCJoinStyle) *value++ = gv->join_style; if (dirty & GCFillStyle) *value++ = gv->fill_style; if (dirty & GCFillRule) *value++ = gv->fill_rule; if (dirty & GCTile) *value++ = gv->tile; if (dirty & GCStipple) *value++ = gv->stipple; if (dirty & GCTileStipXOrigin) *value++ = gv->ts_x_origin; if (dirty & GCTileStipYOrigin) *value++ = gv->ts_y_origin; if (dirty & GCFont) *value++ = gv->font; if (dirty & GCSubwindowMode) *value++ = gv->subwindow_mode; if (dirty & GCGraphicsExposures) *value++ = gv->graphics_exposures; if (dirty & GCClipXOrigin) *value++ = gv->clip_x_origin; if (dirty & GCClipYOrigin) *value++ = gv->clip_y_origin; if (dirty & GCClipMask) *value++ = gv->clip_mask; if (dirty & GCDashOffset) *value++ = gv->dash_offset; if (dirty & GCDashList) *value++ = gv->dashes; if (dirty & GCArcMode) *value++ = gv->arc_mode; req->length += (nvalues = value - values); /* * note: Data is a macro that uses its arguments multiple * times, so "nvalues" is changed in a separate assignment * statement */ nvalues <<= 2; Data32 (dpy, (long *) values, nvalues); } int _XUpdateGCCache ( register GC gc, register unsigned long mask, register XGCValues *attr) { register XGCValues *gv = &gc->values; if (mask & GCFunction) if (gv->function != attr->function) { gv->function = attr->function; gc->dirty |= GCFunction; } if (mask & GCPlaneMask) if (gv->plane_mask != attr->plane_mask) { gv->plane_mask = attr->plane_mask; gc->dirty |= GCPlaneMask; } if (mask & GCForeground) if (gv->foreground != attr->foreground) { gv->foreground = attr->foreground; gc->dirty |= GCForeground; } if (mask & GCBackground) if (gv->background != attr->background) { gv->background = attr->background; gc->dirty |= GCBackground; } if (mask & GCLineWidth) if (gv->line_width != attr->line_width) { gv->line_width = attr->line_width; gc->dirty |= GCLineWidth; } if (mask & GCLineStyle) if (gv->line_style != attr->line_style) { gv->line_style = attr->line_style; gc->dirty |= GCLineStyle; } if (mask & GCCapStyle) if (gv->cap_style != attr->cap_style) { gv->cap_style = attr->cap_style; gc->dirty |= GCCapStyle; } if (mask & GCJoinStyle) if (gv->join_style != attr->join_style) { gv->join_style = attr->join_style; gc->dirty |= GCJoinStyle; } if (mask & GCFillStyle) if (gv->fill_style != attr->fill_style) { gv->fill_style = attr->fill_style; gc->dirty |= GCFillStyle; } if (mask & GCFillRule) if (gv->fill_rule != attr->fill_rule) { gv->fill_rule = attr->fill_rule; gc->dirty |= GCFillRule; } if (mask & GCArcMode) if (gv->arc_mode != attr->arc_mode) { gv->arc_mode = attr->arc_mode; gc->dirty |= GCArcMode; } /* always write through tile change, since client may have changed pixmap contents */ if (mask & GCTile) { gv->tile = attr->tile; gc->dirty |= GCTile; } /* always write through stipple change, since client may have changed pixmap contents */ if (mask & GCStipple) { gv->stipple = attr->stipple; gc->dirty |= GCStipple; } if (mask & GCTileStipXOrigin) if (gv->ts_x_origin != attr->ts_x_origin) { gv->ts_x_origin = attr->ts_x_origin; gc->dirty |= GCTileStipXOrigin; } if (mask & GCTileStipYOrigin) if (gv->ts_y_origin != attr->ts_y_origin) { gv->ts_y_origin = attr->ts_y_origin; gc->dirty |= GCTileStipYOrigin; } if (mask & GCFont) if (gv->font != attr->font) { gv->font = attr->font; gc->dirty |= GCFont; } if (mask & GCSubwindowMode) if (gv->subwindow_mode != attr->subwindow_mode) { gv->subwindow_mode = attr->subwindow_mode; gc->dirty |= GCSubwindowMode; } if (mask & GCGraphicsExposures) if (gv->graphics_exposures != attr->graphics_exposures) { gv->graphics_exposures = attr->graphics_exposures; gc->dirty |= GCGraphicsExposures; } if (mask & GCClipXOrigin) if (gv->clip_x_origin != attr->clip_x_origin) { gv->clip_x_origin = attr->clip_x_origin; gc->dirty |= GCClipXOrigin; } if (mask & GCClipYOrigin) if (gv->clip_y_origin != attr->clip_y_origin) { gv->clip_y_origin = attr->clip_y_origin; gc->dirty |= GCClipYOrigin; } /* always write through mask change, since client may have changed pixmap contents */ if (mask & GCClipMask) { gv->clip_mask = attr->clip_mask; gc->dirty |= GCClipMask; gc->rects = 0; } if (mask & GCDashOffset) if (gv->dash_offset != attr->dash_offset) { gv->dash_offset = attr->dash_offset; gc->dirty |= GCDashOffset; } if (mask & GCDashList) if ((gv->dashes != attr->dashes) || (gc->dashes == True)) { gv->dashes = attr->dashes; gc->dirty |= GCDashList; gc->dashes = 0; } return 0; } /* can only call when display is already locked. */ void _XFlushGCCache( Display *dpy, GC gc) { register xChangeGCReq *req; register _XExtension *ext; if (gc->dirty) { GetReq(ChangeGC, req); req->gc = gc->gid; req->mask = gc->dirty; _XGenerateGCList (dpy, gc, (xReq *) req); /* call out to any extensions interested */ for (ext = dpy->ext_procs; ext; ext = ext->next) if (ext->flush_GC) (*ext->flush_GC)(dpy, gc, &ext->codes); gc->dirty = 0L; /* allow extensions to see dirty bits */ } } void XFlushGC( Display *dpy, GC gc) { FlushGC(dpy, gc); } GContext XGContextFromGC(GC gc) { return (gc->gid); } libX11-1.6.3/src/XlibInt.c000064401431060000012000001501211247741723500153620ustar00alancstaff00002660200006/* Copyright 1985, 1986, 1987, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ /* * XlibInt.c - Internal support routines for the C subroutine * interface library (Xlib) to the X Window System Protocol V11.0. */ #ifdef WIN32 #define _XLIBINT_ #endif #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xprivate.h" #include #include #include #ifdef WIN32 #include #endif #ifdef XTHREADS #include "locking.h" /* these pointers get initialized by XInitThreads */ LockInfoPtr _Xglobal_lock = NULL; void (*_XCreateMutex_fn)(LockInfoPtr) = NULL; /* struct _XCVList *(*_XCreateCVL_fn)() = NULL; */ void (*_XFreeMutex_fn)(LockInfoPtr) = NULL; void (*_XLockMutex_fn)( LockInfoPtr /* lock */ #if defined(XTHREADS_WARN) || defined(XTHREADS_FILE_LINE) , char * /* file */ , int /* line */ #endif ) = NULL; void (*_XUnlockMutex_fn)( LockInfoPtr /* lock */ #if defined(XTHREADS_WARN) || defined(XTHREADS_FILE_LINE) , char * /* file */ , int /* line */ #endif ) = NULL; xthread_t (*_Xthread_self_fn)(void) = NULL; #define XThread_Self() ((*_Xthread_self_fn)()) #endif /* XTHREADS */ #ifdef WIN32 #define ECHECK(err) (WSAGetLastError() == err) #define ESET(val) WSASetLastError(val) #else #ifdef __UNIXOS2__ #define ECHECK(err) (errno == err) #define ESET(val) #else #define ECHECK(err) (errno == err) #define ESET(val) errno = val #endif #endif #ifdef __UNIXOS2__ #include #define MAX_PATH _POSIX_PATH_MAX #endif /* * The following routines are internal routines used by Xlib for protocol * packet transmission and reception. * * _XIOError(Display *) will be called if any sort of system call error occurs. * This is assumed to be a fatal condition, i.e., XIOError should not return. * * _XError(Display *, xError *) will be called whenever an X_Error event is * received. This is not assumed to be a fatal condition, i.e., it is * acceptable for this procedure to return. However, XError should NOT * perform any operations (directly or indirectly) on the DISPLAY. * * Routines declared with a return type of 'Status' return 0 on failure, * and non 0 on success. Routines with no declared return type don't * return anything. Whenever possible routines that create objects return * the object they have created. */ #define POLLFD_CACHE_SIZE 5 /* initialize the struct array passed to poll() below */ Bool _XPollfdCacheInit( Display *dpy) { #ifdef USE_POLL struct pollfd *pfp; pfp = Xmalloc(POLLFD_CACHE_SIZE * sizeof(struct pollfd)); if (!pfp) return False; pfp[0].fd = dpy->fd; pfp[0].events = POLLIN; dpy->filedes = (XPointer)pfp; #endif return True; } void _XPollfdCacheAdd( Display *dpy, int fd) { #ifdef USE_POLL struct pollfd *pfp = (struct pollfd *)dpy->filedes; if (dpy->im_fd_length <= POLLFD_CACHE_SIZE) { pfp[dpy->im_fd_length].fd = fd; pfp[dpy->im_fd_length].events = POLLIN; } #endif } /* ARGSUSED */ void _XPollfdCacheDel( Display *dpy, int fd) /* not used */ { #ifdef USE_POLL struct pollfd *pfp = (struct pollfd *)dpy->filedes; struct _XConnectionInfo *conni; /* just recalculate whole list */ if (dpy->im_fd_length <= POLLFD_CACHE_SIZE) { int loc = 1; for (conni = dpy->im_fd_info; conni; conni=conni->next) { pfp[loc].fd = conni->fd; pfp[loc].events = POLLIN; loc++; } } #endif } static int sync_hazard(Display *dpy) { unsigned long span = dpy->request - dpy->last_request_read; unsigned long hazard = min((dpy->bufmax - dpy->buffer) / SIZEOF(xReq), 65535 - 10); return span >= 65535 - hazard - 10; } static void sync_while_locked(Display *dpy) { #ifdef XTHREADS if (dpy->lock) (*dpy->lock->user_lock_display)(dpy); #endif UnlockDisplay(dpy); SyncHandle(); InternalLockDisplay(dpy, /* don't skip user locks */ 0); #ifdef XTHREADS if (dpy->lock) (*dpy->lock->user_unlock_display)(dpy); #endif } void _XSeqSyncFunction( register Display *dpy) { xGetInputFocusReply rep; register xReq *req; if ((dpy->request - dpy->last_request_read) >= (65535 - BUFSIZE/SIZEOF(xReq))) { GetEmptyReq(GetInputFocus, req); (void) _XReply (dpy, (xReply *)&rep, 0, xTrue); sync_while_locked(dpy); } else if (sync_hazard(dpy)) _XSetPrivSyncFunction(dpy); } /* NOTE: only called if !XTHREADS, or when XInitThreads wasn't called. */ static int _XPrivSyncFunction (Display *dpy) { #ifdef XTHREADS assert(!dpy->lock_fns); #endif assert(dpy->synchandler == _XPrivSyncFunction); assert((dpy->flags & XlibDisplayPrivSync) != 0); dpy->synchandler = dpy->savedsynchandler; dpy->savedsynchandler = NULL; dpy->flags &= ~XlibDisplayPrivSync; if(dpy->synchandler) dpy->synchandler(dpy); _XIDHandler(dpy); _XSeqSyncFunction(dpy); return 0; } void _XSetPrivSyncFunction(Display *dpy) { #ifdef XTHREADS if (dpy->lock_fns) return; #endif if (!(dpy->flags & XlibDisplayPrivSync)) { dpy->savedsynchandler = dpy->synchandler; dpy->synchandler = _XPrivSyncFunction; dpy->flags |= XlibDisplayPrivSync; } } void _XSetSeqSyncFunction(Display *dpy) { if (sync_hazard(dpy)) _XSetPrivSyncFunction (dpy); } #ifdef LONG64 void _XRead32( Display *dpy, register long *data, long len) { register int *buf; register long i; if (len) { (void) _XRead(dpy, (char *)data, len); i = len >> 2; buf = (int *)data + i; data += i; while (--i >= 0) *--data = *--buf; } } #endif /* LONG64 */ /* * The hard part about this is that we only get 16 bits from a reply. * We have three values that will march along, with the following invariant: * dpy->last_request_read <= rep->sequenceNumber <= dpy->request * We have to keep * dpy->request - dpy->last_request_read < 2^16 * or else we won't know for sure what value to use in events. We do this * by forcing syncs when we get close. */ unsigned long _XSetLastRequestRead( register Display *dpy, register xGenericReply *rep) { register unsigned long newseq, lastseq; lastseq = dpy->last_request_read; /* * KeymapNotify has no sequence number, but is always guaranteed * to immediately follow another event, except when generated via * SendEvent (hmmm). */ if ((rep->type & 0x7f) == KeymapNotify) return(lastseq); newseq = (lastseq & ~((unsigned long)0xffff)) | rep->sequenceNumber; if (newseq < lastseq) { newseq += 0x10000; if (newseq > dpy->request) { (void) fprintf (stderr, "Xlib: sequence lost (0x%lx > 0x%lx) in reply type 0x%x!\n", newseq, dpy->request, (unsigned int) rep->type); newseq -= 0x10000; } } dpy->last_request_read = newseq; return(newseq); } /* * Support for internal connections, such as an IM might use. * By Stephen Gildea, X Consortium, September 1993 */ /* _XRegisterInternalConnection * Each IM (or Xlib extension) that opens a file descriptor that Xlib should * include in its select/poll mask must call this function to register the * fd with Xlib. Any XConnectionWatchProc registered by XAddConnectionWatch * will also be called. * * Whenever Xlib detects input available on fd, it will call callback * with call_data to process it. If non-Xlib code calls select/poll * and detects input available, it must call XProcessInternalConnection, * which will call the associated callback. * * Non-Xlib code can learn about these additional fds by calling * XInternalConnectionNumbers or, more typically, by registering * a XConnectionWatchProc with XAddConnectionWatch * to be called when fds are registered or unregistered. * * Returns True if registration succeeded, False if not, typically * because could not allocate memory. * Assumes Display locked when called. */ Status _XRegisterInternalConnection( Display* dpy, int fd, _XInternalConnectionProc callback, XPointer call_data ) { struct _XConnectionInfo *new_conni, **iptr; struct _XConnWatchInfo *watchers; XPointer *wd; new_conni = Xmalloc(sizeof(struct _XConnectionInfo)); if (!new_conni) return 0; new_conni->watch_data = Xmalloc(dpy->watcher_count * sizeof(XPointer)); if (!new_conni->watch_data) { Xfree(new_conni); return 0; } new_conni->fd = fd; new_conni->read_callback = callback; new_conni->call_data = call_data; new_conni->next = NULL; /* link new structure onto end of list */ for (iptr = &dpy->im_fd_info; *iptr; iptr = &(*iptr)->next) ; *iptr = new_conni; dpy->im_fd_length++; _XPollfdCacheAdd(dpy, fd); for (watchers=dpy->conn_watchers, wd=new_conni->watch_data; watchers; watchers=watchers->next, wd++) { *wd = NULL; /* for cleanliness */ (*watchers->fn) (dpy, watchers->client_data, fd, True, wd); } return 1; } /* _XUnregisterInternalConnection * Each IM (or Xlib extension) that closes a file descriptor previously * registered with _XRegisterInternalConnection must call this function. * Any XConnectionWatchProc registered by XAddConnectionWatch * will also be called. * * Assumes Display locked when called. */ void _XUnregisterInternalConnection( Display* dpy, int fd ) { struct _XConnectionInfo *info_list, **prev; struct _XConnWatchInfo *watch; XPointer *wd; for (prev = &dpy->im_fd_info; (info_list = *prev); prev = &info_list->next) { if (info_list->fd == fd) { *prev = info_list->next; dpy->im_fd_length--; for (watch=dpy->conn_watchers, wd=info_list->watch_data; watch; watch=watch->next, wd++) { (*watch->fn) (dpy, watch->client_data, fd, False, wd); } Xfree (info_list->watch_data); Xfree (info_list); break; } } _XPollfdCacheDel(dpy, fd); } /* XInternalConnectionNumbers * Returns an array of fds and an array of corresponding call data. * Typically a XConnectionWatchProc registered with XAddConnectionWatch * will be used instead of this function to discover * additional fds to include in the select/poll mask. * * The list is allocated with Xmalloc and should be freed by the caller * with Xfree; */ Status XInternalConnectionNumbers( Display *dpy, int **fd_return, int *count_return ) { int count; struct _XConnectionInfo *info_list; int *fd_list; LockDisplay(dpy); count = 0; for (info_list=dpy->im_fd_info; info_list; info_list=info_list->next) count++; fd_list = Xmalloc (count * sizeof(int)); if (!fd_list) { UnlockDisplay(dpy); return 0; } count = 0; for (info_list=dpy->im_fd_info; info_list; info_list=info_list->next) { fd_list[count] = info_list->fd; count++; } UnlockDisplay(dpy); *fd_return = fd_list; *count_return = count; return 1; } void _XProcessInternalConnection( Display *dpy, struct _XConnectionInfo *conn_info) { dpy->flags |= XlibDisplayProcConni; UnlockDisplay(dpy); (*conn_info->read_callback) (dpy, conn_info->fd, conn_info->call_data); LockDisplay(dpy); dpy->flags &= ~XlibDisplayProcConni; } /* XProcessInternalConnection * Call the _XInternalConnectionProc registered by _XRegisterInternalConnection * for this fd. * The Display is NOT locked during the call. */ void XProcessInternalConnection( Display* dpy, int fd ) { struct _XConnectionInfo *info_list; LockDisplay(dpy); for (info_list=dpy->im_fd_info; info_list; info_list=info_list->next) { if (info_list->fd == fd) { _XProcessInternalConnection(dpy, info_list); break; } } UnlockDisplay(dpy); } /* XAddConnectionWatch * Register a callback to be called whenever _XRegisterInternalConnection * or _XUnregisterInternalConnection is called. * Callbacks are called with the Display locked. * If any connections are already registered, the callback is immediately * called for each of them. */ Status XAddConnectionWatch( Display* dpy, XConnectionWatchProc callback, XPointer client_data ) { struct _XConnWatchInfo *new_watcher, **wptr; struct _XConnectionInfo *info_list; XPointer *wd_array; LockDisplay(dpy); /* allocate new watch data */ for (info_list=dpy->im_fd_info; info_list; info_list=info_list->next) { wd_array = Xrealloc(info_list->watch_data, (dpy->watcher_count + 1) * sizeof(XPointer)); if (!wd_array) { UnlockDisplay(dpy); return 0; } info_list->watch_data = wd_array; wd_array[dpy->watcher_count] = NULL; /* for cleanliness */ } new_watcher = Xmalloc(sizeof(struct _XConnWatchInfo)); if (!new_watcher) { UnlockDisplay(dpy); return 0; } new_watcher->fn = callback; new_watcher->client_data = client_data; new_watcher->next = NULL; /* link new structure onto end of list */ for (wptr = &dpy->conn_watchers; *wptr; wptr = &(*wptr)->next) ; *wptr = new_watcher; dpy->watcher_count++; /* call new watcher on all currently registered fds */ for (info_list=dpy->im_fd_info; info_list; info_list=info_list->next) { (*callback) (dpy, client_data, info_list->fd, True, info_list->watch_data + dpy->watcher_count - 1); } UnlockDisplay(dpy); return 1; } /* XRemoveConnectionWatch * Unregister a callback registered by XAddConnectionWatch. * Both callback and client_data must match what was passed to * XAddConnectionWatch. */ void XRemoveConnectionWatch( Display* dpy, XConnectionWatchProc callback, XPointer client_data ) { struct _XConnWatchInfo *watch; struct _XConnWatchInfo *previous = NULL; struct _XConnectionInfo *conni; int counter = 0; LockDisplay(dpy); for (watch=dpy->conn_watchers; watch; watch=watch->next) { if (watch->fn == callback && watch->client_data == client_data) { if (previous) previous->next = watch->next; else dpy->conn_watchers = watch->next; Xfree (watch); dpy->watcher_count--; /* remove our watch_data for each connection */ for (conni=dpy->im_fd_info; conni; conni=conni->next) { /* don't bother realloc'ing; these arrays are small anyway */ /* overlapping */ memmove(conni->watch_data+counter, conni->watch_data+counter+1, dpy->watcher_count - counter); } break; } previous = watch; counter++; } UnlockDisplay(dpy); } /* end of internal connections support */ /* Cookie jar implementation dpy->cookiejar is a linked list. _XEnq receives the events but leaves them in the normal EQ. _XStoreEvent returns the cookie event (minus data pointer) and adds it to the cookiejar. _XDeq just removes the entry like any other event but resets the data pointer for cookie events (to avoid double-free, the memory is re-used by Xlib). _XFetchEventCookie (called from XGetEventData) removes a cookie from the jar. _XFreeEventCookies removes all unclaimed cookies from the jar (called by XNextEvent). _XFreeDisplayStructure calls _XFreeEventCookies for each cookie in the normal EQ. */ #include "utlist.h" struct stored_event { XGenericEventCookie ev; struct stored_event *prev; struct stored_event *next; }; Bool _XIsEventCookie(Display *dpy, XEvent *ev) { return (ev->xcookie.type == GenericEvent && dpy->generic_event_vec[ev->xcookie.extension & 0x7F] != NULL); } /** * Free all events in the event list. */ void _XFreeEventCookies(Display *dpy) { struct stored_event **head, *e, *tmp; if (!dpy->cookiejar) return; head = (struct stored_event**)&dpy->cookiejar; DL_FOREACH_SAFE(*head, e, tmp) { if (dpy->cookiejar == e) dpy->cookiejar = NULL; XFree(e->ev.data); XFree(e); } } /** * Add an event to the display's event list. This event must be freed on the * next call to XNextEvent(). */ void _XStoreEventCookie(Display *dpy, XEvent *event) { XGenericEventCookie* cookie = &event->xcookie; struct stored_event **head, *add; if (!_XIsEventCookie(dpy, event)) return; head = (struct stored_event**)(&dpy->cookiejar); add = Xmalloc(sizeof(struct stored_event)); if (!add) { ESET(ENOMEM); _XIOError(dpy); } add->ev = *cookie; DL_APPEND(*head, add); cookie->data = NULL; /* don't return data yet, must be claimed */ } /** * Return the event with the given cookie and remove it from the list. */ Bool _XFetchEventCookie(Display *dpy, XGenericEventCookie* ev) { Bool ret = False; struct stored_event **head, *event; head = (struct stored_event**)&dpy->cookiejar; if (!_XIsEventCookie(dpy, (XEvent*)ev)) return ret; DL_FOREACH(*head, event) { if (event->ev.cookie == ev->cookie && event->ev.extension == ev->extension && event->ev.evtype == ev->evtype) { *ev = event->ev; DL_DELETE(*head, event); Xfree(event); ret = True; break; } } return ret; } Bool _XCopyEventCookie(Display *dpy, XGenericEventCookie *in, XGenericEventCookie *out) { Bool ret = False; int extension; if (!_XIsEventCookie(dpy, (XEvent*)in) || !out) return ret; extension = in->extension & 0x7F; if (!dpy->generic_event_copy_vec[extension]) return ret; ret = ((*dpy->generic_event_copy_vec[extension])(dpy, in, out)); out->cookie = ret ? ++dpy->next_cookie : 0; return ret; } /* * _XEnq - Place event packets on the display's queue. * note that no squishing of move events in V11, since there * is pointer motion hints.... */ void _XEnq( register Display *dpy, register xEvent *event) { register _XQEvent *qelt; int type, extension; if ((qelt = dpy->qfree)) { /* If dpy->qfree is non-NULL do this, else malloc a new one. */ dpy->qfree = qelt->next; } else if ((qelt = Xmalloc(sizeof(_XQEvent))) == NULL) { /* Malloc call failed! */ ESET(ENOMEM); _XIOError(dpy); } qelt->next = NULL; type = event->u.u.type & 0177; extension = ((xGenericEvent*)event)->extension; qelt->event.type = type; /* If an extension has registered a generic_event_vec handler, then * it can handle event cookies. Otherwise, proceed with the normal * event handlers. * * If the generic_event_vec is called, qelt->event is a event cookie * with the data pointer and the "free" pointer set. Data pointer is * some memory allocated by the extension. */ if (type == GenericEvent && dpy->generic_event_vec[extension & 0x7F]) { XGenericEventCookie *cookie = &qelt->event.xcookie; (*dpy->generic_event_vec[extension & 0x7F])(dpy, cookie, event); cookie->cookie = ++dpy->next_cookie; qelt->qserial_num = dpy->next_event_serial_num++; if (dpy->tail) dpy->tail->next = qelt; else dpy->head = qelt; dpy->tail = qelt; dpy->qlen++; } else if ((*dpy->event_vec[type])(dpy, &qelt->event, event)) { qelt->qserial_num = dpy->next_event_serial_num++; if (dpy->tail) dpy->tail->next = qelt; else dpy->head = qelt; dpy->tail = qelt; dpy->qlen++; } else { /* ignored, or stashed away for many-to-one compression */ qelt->next = dpy->qfree; dpy->qfree = qelt; } } /* * _XDeq - Remove event packet from the display's queue. */ void _XDeq( register Display *dpy, register _XQEvent *prev, /* element before qelt */ register _XQEvent *qelt) /* element to be unlinked */ { if (prev) { if ((prev->next = qelt->next) == NULL) dpy->tail = prev; } else { /* no prev, so removing first elt */ if ((dpy->head = qelt->next) == NULL) dpy->tail = NULL; } qelt->qserial_num = 0; qelt->next = dpy->qfree; dpy->qfree = qelt; dpy->qlen--; if (_XIsEventCookie(dpy, &qelt->event)) { XGenericEventCookie* cookie = &qelt->event.xcookie; /* dpy->qfree is re-used, reset memory to avoid double free on * _XFreeDisplayStructure */ cookie->data = NULL; } } /* * EventToWire in separate file in that often not needed. */ /*ARGSUSED*/ Bool _XUnknownWireEvent( register Display *dpy, /* pointer to display structure */ register XEvent *re, /* pointer to where event should be reformatted */ register xEvent *event) /* wire protocol event */ { #ifdef notdef (void) fprintf(stderr, "Xlib: unhandled wire event! event number = %d, display = %x\n.", event->u.u.type, dpy); #endif return(False); } Bool _XUnknownWireEventCookie( Display *dpy, /* pointer to display structure */ XGenericEventCookie *re, /* pointer to where event should be reformatted */ xEvent *event) /* wire protocol event */ { #ifdef notdef fprintf(stderr, "Xlib: unhandled wire cookie event! extension number = %d, display = %x\n.", ((xGenericEvent*)event)->extension, dpy); #endif return(False); } Bool _XUnknownCopyEventCookie( Display *dpy, /* pointer to display structure */ XGenericEventCookie *in, /* source */ XGenericEventCookie *out) /* destination */ { #ifdef notdef fprintf(stderr, "Xlib: unhandled cookie event copy! extension number = %d, display = %x\n.", in->extension, dpy); #endif return(False); } /*ARGSUSED*/ Status _XUnknownNativeEvent( register Display *dpy, /* pointer to display structure */ register XEvent *re, /* pointer to where event should be reformatted */ register xEvent *event) /* wire protocol event */ { #ifdef notdef (void) fprintf(stderr, "Xlib: unhandled native event! event number = %d, display = %x\n.", re->type, dpy); #endif return(0); } /* * reformat a wire event into an XEvent structure of the right type. */ Bool _XWireToEvent( register Display *dpy, /* pointer to display structure */ register XEvent *re, /* pointer to where event should be reformatted */ register xEvent *event) /* wire protocol event */ { re->type = event->u.u.type & 0x7f; ((XAnyEvent *)re)->serial = _XSetLastRequestRead(dpy, (xGenericReply *)event); ((XAnyEvent *)re)->send_event = ((event->u.u.type & 0x80) != 0); ((XAnyEvent *)re)->display = dpy; /* Ignore the leading bit of the event type since it is set when a client sends an event rather than the server. */ switch (event-> u.u.type & 0177) { case KeyPress: case KeyRelease: { register XKeyEvent *ev = (XKeyEvent*) re; ev->root = event->u.keyButtonPointer.root; ev->window = event->u.keyButtonPointer.event; ev->subwindow = event->u.keyButtonPointer.child; ev->time = event->u.keyButtonPointer.time; ev->x = cvtINT16toInt(event->u.keyButtonPointer.eventX); ev->y = cvtINT16toInt(event->u.keyButtonPointer.eventY); ev->x_root = cvtINT16toInt(event->u.keyButtonPointer.rootX); ev->y_root = cvtINT16toInt(event->u.keyButtonPointer.rootY); ev->state = event->u.keyButtonPointer.state; ev->same_screen = event->u.keyButtonPointer.sameScreen; ev->keycode = event->u.u.detail; } break; case ButtonPress: case ButtonRelease: { register XButtonEvent *ev = (XButtonEvent *) re; ev->root = event->u.keyButtonPointer.root; ev->window = event->u.keyButtonPointer.event; ev->subwindow = event->u.keyButtonPointer.child; ev->time = event->u.keyButtonPointer.time; ev->x = cvtINT16toInt(event->u.keyButtonPointer.eventX); ev->y = cvtINT16toInt(event->u.keyButtonPointer.eventY); ev->x_root = cvtINT16toInt(event->u.keyButtonPointer.rootX); ev->y_root = cvtINT16toInt(event->u.keyButtonPointer.rootY); ev->state = event->u.keyButtonPointer.state; ev->same_screen = event->u.keyButtonPointer.sameScreen; ev->button = event->u.u.detail; } break; case MotionNotify: { register XMotionEvent *ev = (XMotionEvent *)re; ev->root = event->u.keyButtonPointer.root; ev->window = event->u.keyButtonPointer.event; ev->subwindow = event->u.keyButtonPointer.child; ev->time = event->u.keyButtonPointer.time; ev->x = cvtINT16toInt(event->u.keyButtonPointer.eventX); ev->y = cvtINT16toInt(event->u.keyButtonPointer.eventY); ev->x_root = cvtINT16toInt(event->u.keyButtonPointer.rootX); ev->y_root = cvtINT16toInt(event->u.keyButtonPointer.rootY); ev->state = event->u.keyButtonPointer.state; ev->same_screen = event->u.keyButtonPointer.sameScreen; ev->is_hint = event->u.u.detail; } break; case EnterNotify: case LeaveNotify: { register XCrossingEvent *ev = (XCrossingEvent *) re; ev->root = event->u.enterLeave.root; ev->window = event->u.enterLeave.event; ev->subwindow = event->u.enterLeave.child; ev->time = event->u.enterLeave.time; ev->x = cvtINT16toInt(event->u.enterLeave.eventX); ev->y = cvtINT16toInt(event->u.enterLeave.eventY); ev->x_root = cvtINT16toInt(event->u.enterLeave.rootX); ev->y_root = cvtINT16toInt(event->u.enterLeave.rootY); ev->state = event->u.enterLeave.state; ev->mode = event->u.enterLeave.mode; ev->same_screen = (event->u.enterLeave.flags & ELFlagSameScreen) && True; ev->focus = (event->u.enterLeave.flags & ELFlagFocus) && True; ev->detail = event->u.u.detail; } break; case FocusIn: case FocusOut: { register XFocusChangeEvent *ev = (XFocusChangeEvent *) re; ev->window = event->u.focus.window; ev->mode = event->u.focus.mode; ev->detail = event->u.u.detail; } break; case KeymapNotify: { register XKeymapEvent *ev = (XKeymapEvent *) re; ev->window = None; memcpy(&ev->key_vector[1], (char *)((xKeymapEvent *) event)->map, sizeof (((xKeymapEvent *) event)->map)); } break; case Expose: { register XExposeEvent *ev = (XExposeEvent *) re; ev->window = event->u.expose.window; ev->x = event->u.expose.x; ev->y = event->u.expose.y; ev->width = event->u.expose.width; ev->height = event->u.expose.height; ev->count = event->u.expose.count; } break; case GraphicsExpose: { register XGraphicsExposeEvent *ev = (XGraphicsExposeEvent *) re; ev->drawable = event->u.graphicsExposure.drawable; ev->x = event->u.graphicsExposure.x; ev->y = event->u.graphicsExposure.y; ev->width = event->u.graphicsExposure.width; ev->height = event->u.graphicsExposure.height; ev->count = event->u.graphicsExposure.count; ev->major_code = event->u.graphicsExposure.majorEvent; ev->minor_code = event->u.graphicsExposure.minorEvent; } break; case NoExpose: { register XNoExposeEvent *ev = (XNoExposeEvent *) re; ev->drawable = event->u.noExposure.drawable; ev->major_code = event->u.noExposure.majorEvent; ev->minor_code = event->u.noExposure.minorEvent; } break; case VisibilityNotify: { register XVisibilityEvent *ev = (XVisibilityEvent *) re; ev->window = event->u.visibility.window; ev->state = event->u.visibility.state; } break; case CreateNotify: { register XCreateWindowEvent *ev = (XCreateWindowEvent *) re; ev->window = event->u.createNotify.window; ev->parent = event->u.createNotify.parent; ev->x = cvtINT16toInt(event->u.createNotify.x); ev->y = cvtINT16toInt(event->u.createNotify.y); ev->width = event->u.createNotify.width; ev->height = event->u.createNotify.height; ev->border_width = event->u.createNotify.borderWidth; ev->override_redirect = event->u.createNotify.override; } break; case DestroyNotify: { register XDestroyWindowEvent *ev = (XDestroyWindowEvent *) re; ev->window = event->u.destroyNotify.window; ev->event = event->u.destroyNotify.event; } break; case UnmapNotify: { register XUnmapEvent *ev = (XUnmapEvent *) re; ev->window = event->u.unmapNotify.window; ev->event = event->u.unmapNotify.event; ev->from_configure = event->u.unmapNotify.fromConfigure; } break; case MapNotify: { register XMapEvent *ev = (XMapEvent *) re; ev->window = event->u.mapNotify.window; ev->event = event->u.mapNotify.event; ev->override_redirect = event->u.mapNotify.override; } break; case MapRequest: { register XMapRequestEvent *ev = (XMapRequestEvent *) re; ev->window = event->u.mapRequest.window; ev->parent = event->u.mapRequest.parent; } break; case ReparentNotify: { register XReparentEvent *ev = (XReparentEvent *) re; ev->event = event->u.reparent.event; ev->window = event->u.reparent.window; ev->parent = event->u.reparent.parent; ev->x = cvtINT16toInt(event->u.reparent.x); ev->y = cvtINT16toInt(event->u.reparent.y); ev->override_redirect = event->u.reparent.override; } break; case ConfigureNotify: { register XConfigureEvent *ev = (XConfigureEvent *) re; ev->event = event->u.configureNotify.event; ev->window = event->u.configureNotify.window; ev->above = event->u.configureNotify.aboveSibling; ev->x = cvtINT16toInt(event->u.configureNotify.x); ev->y = cvtINT16toInt(event->u.configureNotify.y); ev->width = event->u.configureNotify.width; ev->height = event->u.configureNotify.height; ev->border_width = event->u.configureNotify.borderWidth; ev->override_redirect = event->u.configureNotify.override; } break; case ConfigureRequest: { register XConfigureRequestEvent *ev = (XConfigureRequestEvent *) re; ev->window = event->u.configureRequest.window; ev->parent = event->u.configureRequest.parent; ev->above = event->u.configureRequest.sibling; ev->x = cvtINT16toInt(event->u.configureRequest.x); ev->y = cvtINT16toInt(event->u.configureRequest.y); ev->width = event->u.configureRequest.width; ev->height = event->u.configureRequest.height; ev->border_width = event->u.configureRequest.borderWidth; ev->value_mask = event->u.configureRequest.valueMask; ev->detail = event->u.u.detail; } break; case GravityNotify: { register XGravityEvent *ev = (XGravityEvent *) re; ev->window = event->u.gravity.window; ev->event = event->u.gravity.event; ev->x = cvtINT16toInt(event->u.gravity.x); ev->y = cvtINT16toInt(event->u.gravity.y); } break; case ResizeRequest: { register XResizeRequestEvent *ev = (XResizeRequestEvent *) re; ev->window = event->u.resizeRequest.window; ev->width = event->u.resizeRequest.width; ev->height = event->u.resizeRequest.height; } break; case CirculateNotify: { register XCirculateEvent *ev = (XCirculateEvent *) re; ev->window = event->u.circulate.window; ev->event = event->u.circulate.event; ev->place = event->u.circulate.place; } break; case CirculateRequest: { register XCirculateRequestEvent *ev = (XCirculateRequestEvent *) re; ev->window = event->u.circulate.window; ev->parent = event->u.circulate.event; ev->place = event->u.circulate.place; } break; case PropertyNotify: { register XPropertyEvent *ev = (XPropertyEvent *) re; ev->window = event->u.property.window; ev->atom = event->u.property.atom; ev->time = event->u.property.time; ev->state = event->u.property.state; } break; case SelectionClear: { register XSelectionClearEvent *ev = (XSelectionClearEvent *) re; ev->window = event->u.selectionClear.window; ev->selection = event->u.selectionClear.atom; ev->time = event->u.selectionClear.time; } break; case SelectionRequest: { register XSelectionRequestEvent *ev = (XSelectionRequestEvent *) re; ev->owner = event->u.selectionRequest.owner; ev->requestor = event->u.selectionRequest.requestor; ev->selection = event->u.selectionRequest.selection; ev->target = event->u.selectionRequest.target; ev->property = event->u.selectionRequest.property; ev->time = event->u.selectionRequest.time; } break; case SelectionNotify: { register XSelectionEvent *ev = (XSelectionEvent *) re; ev->requestor = event->u.selectionNotify.requestor; ev->selection = event->u.selectionNotify.selection; ev->target = event->u.selectionNotify.target; ev->property = event->u.selectionNotify.property; ev->time = event->u.selectionNotify.time; } break; case ColormapNotify: { register XColormapEvent *ev = (XColormapEvent *) re; ev->window = event->u.colormap.window; ev->colormap = event->u.colormap.colormap; ev->new = event->u.colormap.new; ev->state = event->u.colormap.state; } break; case ClientMessage: { register int i; register XClientMessageEvent *ev = (XClientMessageEvent *) re; ev->window = event->u.clientMessage.window; ev->format = event->u.u.detail; switch (ev->format) { case 8: ev->message_type = event->u.clientMessage.u.b.type; for (i = 0; i < 20; i++) ev->data.b[i] = event->u.clientMessage.u.b.bytes[i]; break; case 16: ev->message_type = event->u.clientMessage.u.s.type; ev->data.s[0] = cvtINT16toShort(event->u.clientMessage.u.s.shorts0); ev->data.s[1] = cvtINT16toShort(event->u.clientMessage.u.s.shorts1); ev->data.s[2] = cvtINT16toShort(event->u.clientMessage.u.s.shorts2); ev->data.s[3] = cvtINT16toShort(event->u.clientMessage.u.s.shorts3); ev->data.s[4] = cvtINT16toShort(event->u.clientMessage.u.s.shorts4); ev->data.s[5] = cvtINT16toShort(event->u.clientMessage.u.s.shorts5); ev->data.s[6] = cvtINT16toShort(event->u.clientMessage.u.s.shorts6); ev->data.s[7] = cvtINT16toShort(event->u.clientMessage.u.s.shorts7); ev->data.s[8] = cvtINT16toShort(event->u.clientMessage.u.s.shorts8); ev->data.s[9] = cvtINT16toShort(event->u.clientMessage.u.s.shorts9); break; case 32: ev->message_type = event->u.clientMessage.u.l.type; ev->data.l[0] = cvtINT32toLong(event->u.clientMessage.u.l.longs0); ev->data.l[1] = cvtINT32toLong(event->u.clientMessage.u.l.longs1); ev->data.l[2] = cvtINT32toLong(event->u.clientMessage.u.l.longs2); ev->data.l[3] = cvtINT32toLong(event->u.clientMessage.u.l.longs3); ev->data.l[4] = cvtINT32toLong(event->u.clientMessage.u.l.longs4); break; default: /* XXX should never occur */ break; } } break; case MappingNotify: { register XMappingEvent *ev = (XMappingEvent *)re; ev->window = 0; ev->first_keycode = event->u.mappingNotify.firstKeyCode; ev->request = event->u.mappingNotify.request; ev->count = event->u.mappingNotify.count; } break; default: return(_XUnknownWireEvent(dpy, re, event)); } return(True); } /* * _XDefaultIOError - Default fatal system error reporting routine. Called * when an X internal system error is encountered. */ int _XDefaultIOError( Display *dpy) { if (ECHECK(EPIPE)) { (void) fprintf (stderr, "X connection to %s broken (explicit kill or server shutdown).\r\n", DisplayString (dpy)); } else { (void) fprintf (stderr, "XIO: fatal IO error %d (%s) on X server \"%s\"\r\n", #ifdef WIN32 WSAGetLastError(), strerror(WSAGetLastError()), #else errno, strerror (errno), #endif DisplayString (dpy)); (void) fprintf (stderr, " after %lu requests (%lu known processed) with %d events remaining.\r\n", NextRequest(dpy) - 1, LastKnownRequestProcessed(dpy), QLength(dpy)); } exit(1); return(0); /* dummy - function should never return */ } static int _XPrintDefaultError( Display *dpy, XErrorEvent *event, FILE *fp) { char buffer[BUFSIZ]; char mesg[BUFSIZ]; char number[32]; const char *mtype = "XlibMessage"; register _XExtension *ext = (_XExtension *)NULL; _XExtension *bext = (_XExtension *)NULL; XGetErrorText(dpy, event->error_code, buffer, BUFSIZ); XGetErrorDatabaseText(dpy, mtype, "XError", "X Error", mesg, BUFSIZ); (void) fprintf(fp, "%s: %s\n ", mesg, buffer); XGetErrorDatabaseText(dpy, mtype, "MajorCode", "Request Major code %d", mesg, BUFSIZ); (void) fprintf(fp, mesg, event->request_code); if (event->request_code < 128) { snprintf(number, sizeof(number), "%d", event->request_code); XGetErrorDatabaseText(dpy, "XRequest", number, "", buffer, BUFSIZ); } else { for (ext = dpy->ext_procs; ext && (ext->codes.major_opcode != event->request_code); ext = ext->next) ; if (ext) { strncpy(buffer, ext->name, BUFSIZ); buffer[BUFSIZ - 1] = '\0'; } else buffer[0] = '\0'; } (void) fprintf(fp, " (%s)\n", buffer); if (event->request_code >= 128) { XGetErrorDatabaseText(dpy, mtype, "MinorCode", "Request Minor code %d", mesg, BUFSIZ); fputs(" ", fp); (void) fprintf(fp, mesg, event->minor_code); if (ext) { snprintf(mesg, sizeof(mesg), "%s.%d", ext->name, event->minor_code); XGetErrorDatabaseText(dpy, "XRequest", mesg, "", buffer, BUFSIZ); (void) fprintf(fp, " (%s)", buffer); } fputs("\n", fp); } if (event->error_code >= 128) { /* kludge, try to find the extension that caused it */ buffer[0] = '\0'; for (ext = dpy->ext_procs; ext; ext = ext->next) { if (ext->error_string) (*ext->error_string)(dpy, event->error_code, &ext->codes, buffer, BUFSIZ); if (buffer[0]) { bext = ext; break; } if (ext->codes.first_error && ext->codes.first_error < (int)event->error_code && (!bext || ext->codes.first_error > bext->codes.first_error)) bext = ext; } if (bext) snprintf(buffer, sizeof(buffer), "%s.%d", bext->name, event->error_code - bext->codes.first_error); else strcpy(buffer, "Value"); XGetErrorDatabaseText(dpy, mtype, buffer, "", mesg, BUFSIZ); if (mesg[0]) { fputs(" ", fp); (void) fprintf(fp, mesg, event->resourceid); fputs("\n", fp); } /* let extensions try to print the values */ for (ext = dpy->ext_procs; ext; ext = ext->next) { if (ext->error_values) (*ext->error_values)(dpy, event, fp); } } else if ((event->error_code == BadWindow) || (event->error_code == BadPixmap) || (event->error_code == BadCursor) || (event->error_code == BadFont) || (event->error_code == BadDrawable) || (event->error_code == BadColor) || (event->error_code == BadGC) || (event->error_code == BadIDChoice) || (event->error_code == BadValue) || (event->error_code == BadAtom)) { if (event->error_code == BadValue) XGetErrorDatabaseText(dpy, mtype, "Value", "Value 0x%x", mesg, BUFSIZ); else if (event->error_code == BadAtom) XGetErrorDatabaseText(dpy, mtype, "AtomID", "AtomID 0x%x", mesg, BUFSIZ); else XGetErrorDatabaseText(dpy, mtype, "ResourceID", "ResourceID 0x%x", mesg, BUFSIZ); fputs(" ", fp); (void) fprintf(fp, mesg, event->resourceid); fputs("\n", fp); } XGetErrorDatabaseText(dpy, mtype, "ErrorSerial", "Error Serial #%d", mesg, BUFSIZ); fputs(" ", fp); (void) fprintf(fp, mesg, event->serial); XGetErrorDatabaseText(dpy, mtype, "CurrentSerial", "Current Serial #%d", mesg, BUFSIZ); fputs("\n ", fp); (void) fprintf(fp, mesg, dpy->request); fputs("\n", fp); if (event->error_code == BadImplementation) return 0; return 1; } int _XDefaultError( Display *dpy, XErrorEvent *event) { if (_XPrintDefaultError (dpy, event, stderr) == 0) return 0; exit(1); /*NOTREACHED*/ } /*ARGSUSED*/ Bool _XDefaultWireError(Display *display, XErrorEvent *he, xError *we) { return True; } /* * _XError - upcall internal or user protocol error handler */ int _XError ( Display *dpy, register xError *rep) { /* * X_Error packet encountered! We need to unpack the error before * giving it to the user. */ XEvent event; /* make it a large event */ register _XAsyncHandler *async, *next; event.xerror.serial = _XSetLastRequestRead(dpy, (xGenericReply *)rep); for (async = dpy->async_handlers; async; async = next) { next = async->next; if ((*async->handler)(dpy, (xReply *)rep, (char *)rep, SIZEOF(xError), async->data)) return 0; } event.xerror.display = dpy; event.xerror.type = X_Error; event.xerror.resourceid = rep->resourceID; event.xerror.error_code = rep->errorCode; event.xerror.request_code = rep->majorCode; event.xerror.minor_code = rep->minorCode; if (dpy->error_vec && !(*dpy->error_vec[rep->errorCode])(dpy, &event.xerror, rep)) return 0; if (_XErrorFunction != NULL) { int rtn_val; #ifdef XTHREADS if (dpy->lock) (*dpy->lock->user_lock_display)(dpy); UnlockDisplay(dpy); #endif rtn_val = (*_XErrorFunction)(dpy, (XErrorEvent *)&event); /* upcall */ #ifdef XTHREADS LockDisplay(dpy); if (dpy->lock) (*dpy->lock->user_unlock_display)(dpy); #endif return rtn_val; } else { return _XDefaultError(dpy, (XErrorEvent *)&event); } } /* * _XIOError - call user connection error handler and exit */ int _XIOError ( Display *dpy) { dpy->flags |= XlibDisplayIOError; #ifdef WIN32 errno = WSAGetLastError(); #endif /* This assumes that the thread calling exit will call any atexit handlers. * If this does not hold, then an alternate solution would involve * registering an atexit handler to take over the lock, which would only * assume that the same thread calls all the atexit handlers. */ #ifdef XTHREADS if (dpy->lock) (*dpy->lock->user_lock_display)(dpy); #endif UnlockDisplay(dpy); if (_XIOErrorFunction != NULL) (*_XIOErrorFunction)(dpy); else _XDefaultIOError(dpy); exit (1); return 0; } /* * This routine can be used to (cheaply) get some memory within a single * Xlib routine for scratch space. A single buffer is reused each time * if possible. To be MT safe, you can only call this between a call to * GetReq* and a call to Data* or _XSend*, or in a context when the thread * is guaranteed to not unlock the display. */ char *_XAllocScratch( register Display *dpy, unsigned long nbytes) { if (nbytes > dpy->scratch_length) { Xfree (dpy->scratch_buffer); dpy->scratch_buffer = Xmalloc(nbytes); if (dpy->scratch_buffer) dpy->scratch_length = nbytes; else dpy->scratch_length = 0; } return (dpy->scratch_buffer); } /* * Scratch space allocator you can call any time, multiple times, and be * MT safe, but you must hand the buffer back with _XFreeTemp. */ char *_XAllocTemp( register Display *dpy, unsigned long nbytes) { char *buf; buf = _XAllocScratch(dpy, nbytes); dpy->scratch_buffer = NULL; dpy->scratch_length = 0; return buf; } void _XFreeTemp( register Display *dpy, char *buf, unsigned long nbytes) { Xfree(dpy->scratch_buffer); dpy->scratch_buffer = buf; dpy->scratch_length = nbytes; } /* * Given a visual id, find the visual structure for this id on this display. */ Visual *_XVIDtoVisual( Display *dpy, VisualID id) { register int i, j, k; register Screen *sp; register Depth *dp; register Visual *vp; for (i = 0; i < dpy->nscreens; i++) { sp = &dpy->screens[i]; for (j = 0; j < sp->ndepths; j++) { dp = &sp->depths[j]; /* if nvisuals == 0 then visuals will be NULL */ for (k = 0; k < dp->nvisuals; k++) { vp = &dp->visuals[k]; if (vp->visualid == id) return (vp); } } } return (NULL); } int XFree (void *data) { Xfree (data); return 1; } #ifdef _XNEEDBCOPYFUNC void _Xbcopy(b1, b2, length) register char *b1, *b2; register length; { if (b1 < b2) { b2 += length; b1 += length; while (length--) *--b2 = *--b1; } else { while (length--) *b2++ = *b1++; } } #endif #ifdef DataRoutineIsProcedure void Data( Display *dpy, _Xconst char *data, long len) { if (dpy->bufptr + (len) <= dpy->bufmax) { memcpy(dpy->bufptr, data, (int)len); dpy->bufptr += ((len) + 3) & ~3; } else { _XSend(dpy, data, len); } } #endif /* DataRoutineIsProcedure */ #ifdef LONG64 int _XData32( Display *dpy, register _Xconst long *data, unsigned len) { register int *buf; register long i; while (len) { buf = (int *)dpy->bufptr; i = dpy->bufmax - (char *)buf; if (!i) { _XFlush(dpy); continue; } if (len < i) i = len; dpy->bufptr = (char *)buf + i; len -= i; i >>= 2; while (--i >= 0) *buf++ = *data++; } return 0; } #endif /* LONG64 */ /* Make sure this produces the same string as DefineLocal/DefineSelf in xdm. * Otherwise, Xau will not be able to find your cookies in the Xauthority file. * * Note: POSIX says that the ``nodename'' member of utsname does _not_ have * to have sufficient information for interfacing to the network, * and so, you may be better off using gethostname (if it exists). */ #if (defined(_POSIX_SOURCE) && !defined(AIXV3) && !defined(__QNX__)) || defined(hpux) || defined(SVR4) #define NEED_UTSNAME #include #else #ifdef HAVE_UNISTD_H #include #endif #endif /* * _XGetHostname - similar to gethostname but allows special processing. */ int _XGetHostname ( char *buf, int maxlen) { int len; #ifdef NEED_UTSNAME struct utsname name; if (maxlen <= 0 || buf == NULL) return 0; uname (&name); len = strlen (name.nodename); if (len >= maxlen) len = maxlen - 1; strncpy (buf, name.nodename, len); buf[len] = '\0'; #else if (maxlen <= 0 || buf == NULL) return 0; buf[0] = '\0'; (void) gethostname (buf, maxlen); buf [maxlen - 1] = '\0'; len = strlen(buf); #endif /* NEED_UTSNAME */ return len; } /* * _XScreenOfWindow - get the Screen of a given window */ Screen *_XScreenOfWindow(Display *dpy, Window w) { register int i; Window root; int x, y; /* dummy variables */ unsigned int width, height, bw, depth; /* dummy variables */ if (XGetGeometry (dpy, w, &root, &x, &y, &width, &height, &bw, &depth) == False) { return NULL; } for (i = 0; i < ScreenCount (dpy); i++) { /* find root from list */ if (root == RootWindow (dpy, i)) { return ScreenOfDisplay (dpy, i); } } return NULL; } /* * WARNING: This implementation's pre-conditions and post-conditions * must remain compatible with the old macro-based implementations of * GetReq, GetReqExtra, GetResReq, and GetEmptyReq. The portions of the * Display structure affected by those macros are part of libX11's * ABI. */ void *_XGetRequest(Display *dpy, CARD8 type, size_t len) { xReq *req; if (dpy->bufptr + len > dpy->bufmax) _XFlush(dpy); /* Request still too large, so do not allow it to overflow. */ if (dpy->bufptr + len > dpy->bufmax) { fprintf(stderr, "Xlib: request %d length %zd would exceed buffer size.\n", type, len); /* Changes failure condition from overflow to NULL dereference. */ return NULL; } if (len % 4) fprintf(stderr, "Xlib: request %d length %zd not a multiple of 4.\n", type, len); dpy->last_req = dpy->bufptr; req = (xReq*)dpy->bufptr; req->reqType = type; req->length = len / 4; dpy->bufptr += len; dpy->request++; return req; } #if defined(WIN32) /* * These functions are intended to be used internally to Xlib only. * These functions will always prefix the path with a DOS drive in the * form ":". As such, these functions are only suitable * for use by Xlib function that supply a root-based path to some * particular file, e.g. /lib/X11/locale/locale.dir will * be converted to "C:/usr/X11R6.3/lib/X11/locale/locale.dir". */ static int access_file (path, pathbuf, len_pathbuf, pathret) char* path; char* pathbuf; int len_pathbuf; char** pathret; { if (access (path, F_OK) == 0) { if (strlen (path) < len_pathbuf) *pathret = pathbuf; else *pathret = Xmalloc (strlen (path) + 1); if (*pathret) { strcpy (*pathret, path); return 1; } } return 0; } static int AccessFile (path, pathbuf, len_pathbuf, pathret) char* path; char* pathbuf; int len_pathbuf; char** pathret; { unsigned long drives; int i, len; char* drive; char buf[MAX_PATH]; char* bufp; /* just try the "raw" name first and see if it works */ if (access_file (path, pathbuf, len_pathbuf, pathret)) return 1; /* try the places set in the environment */ drive = getenv ("_XBASEDRIVE"); #ifdef __UNIXOS2__ if (!drive) drive = getenv ("X11ROOT"); #endif if (!drive) drive = "C:"; len = strlen (drive) + strlen (path); if (len < MAX_PATH) bufp = buf; else bufp = Xmalloc (len + 1); strcpy (bufp, drive); strcat (bufp, path); if (access_file (bufp, pathbuf, len_pathbuf, pathret)) { if (bufp != buf) Xfree (bufp); return 1; } #ifndef __UNIXOS2__ /* one last place to look */ drive = getenv ("HOMEDRIVE"); if (drive) { len = strlen (drive) + strlen (path); if (len < MAX_PATH) bufp = buf; else bufp = Xmalloc (len + 1); strcpy (bufp, drive); strcat (bufp, path); if (access_file (bufp, pathbuf, len_pathbuf, pathret)) { if (bufp != buf) Xfree (bufp); return 1; } } /* tried everywhere else, go fishing */ #define C_DRIVE ('C' - 'A') #define Z_DRIVE ('Z' - 'A') /* does OS/2 (with or with gcc-emx) have getdrives? */ drives = _getdrives (); for (i = C_DRIVE; i <= Z_DRIVE; i++) { /* don't check on A: or B: */ if ((1 << i) & drives) { len = 2 + strlen (path); if (len < MAX_PATH) bufp = buf; else bufp = Xmalloc (len + 1); *bufp = 'A' + i; *(bufp + 1) = ':'; *(bufp + 2) = '\0'; strcat (bufp, path); if (access_file (bufp, pathbuf, len_pathbuf, pathret)) { if (bufp != buf) Xfree (bufp); return 1; } } } #endif return 0; } int _XOpenFile(path, flags) _Xconst char* path; int flags; { char buf[MAX_PATH]; char* bufp = NULL; int ret = -1; UINT olderror = SetErrorMode (SEM_FAILCRITICALERRORS); if (AccessFile (path, buf, MAX_PATH, &bufp)) ret = open (bufp, flags); (void) SetErrorMode (olderror); if (bufp != buf) Xfree (bufp); return ret; } int _XOpenFileMode(path, flags, mode) _Xconst char* path; int flags; mode_t mode; { char buf[MAX_PATH]; char* bufp = NULL; int ret = -1; UINT olderror = SetErrorMode (SEM_FAILCRITICALERRORS); if (AccessFile (path, buf, MAX_PATH, &bufp)) ret = open (bufp, flags, mode); (void) SetErrorMode (olderror); if (bufp != buf) Xfree (bufp); return ret; } void* _XFopenFile(path, mode) _Xconst char* path; _Xconst char* mode; { char buf[MAX_PATH]; char* bufp = NULL; void* ret = NULL; UINT olderror = SetErrorMode (SEM_FAILCRITICALERRORS); if (AccessFile (path, buf, MAX_PATH, &bufp)) ret = fopen (bufp, mode); (void) SetErrorMode (olderror); if (bufp != buf) Xfree (bufp); return ret; } int _XAccessFile(path) _Xconst char* path; { char buf[MAX_PATH]; char* bufp; int ret = -1; UINT olderror = SetErrorMode (SEM_FAILCRITICALERRORS); ret = AccessFile (path, buf, MAX_PATH, &bufp); (void) SetErrorMode (olderror); if (bufp != buf) Xfree (bufp); return ret; } #endif #ifdef WIN32 #undef _Xdebug int _Xdebug = 0; int *_Xdebug_p = &_Xdebug; void (**_XCreateMutex_fn_p)(LockInfoPtr) = &_XCreateMutex_fn; void (**_XFreeMutex_fn_p)(LockInfoPtr) = &_XFreeMutex_fn; void (**_XLockMutex_fn_p)(LockInfoPtr #if defined(XTHREADS_WARN) || defined(XTHREADS_FILE_LINE) , char * /* file */ , int /* line */ #endif ) = &_XLockMutex_fn; void (**_XUnlockMutex_fn_p)(LockInfoPtr #if defined(XTHREADS_WARN) || defined(XTHREADS_FILE_LINE) , char * /* file */ , int /* line */ #endif ) = &_XUnlockMutex_fn; LockInfoPtr *_Xglobal_lock_p = &_Xglobal_lock; #endif n 0; } /* * This routine can be used to (cheaply) get some memory within a single * Xlib routine for scratch space. A single buffer is reused each time * if possible. To be MT safe, you can only call this between a call to * GetReq* and a call to Data* or _XSend*, or in a context when the thread * is guaranteed to not unlock the display. */ char *_XAllocScratch( register Display *dpy, unsigned long nbytes) { if (nblibX11-1.6.3/src/ChActPGb.c000064401431060000012000000030751247741723500153710ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XChangeActivePointerGrab( register Display *dpy, unsigned int event_mask, /* CARD16 */ Cursor curs, Time time) { register xChangeActivePointerGrabReq *req; LockDisplay(dpy); GetReq(ChangeActivePointerGrab, req); req->eventMask = event_mask; req->cursor = curs; req->time = time; UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/xlibi18n/XimTrX.h000064401431060000012000000065311247741723500166540ustar00alancstaff00002660200006/* * Copyright 1992 Oracle and/or its affiliates. All rights reserved. * * 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: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. */ /****************************************************************** Copyright 1992, 1993, 1994 by FUJITSU LIMITED Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of FUJITSU LIMITED not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Hideki Hiura (hhiura@Sun.COM) Sun Microsystems, Inc. Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ #ifndef _XIMTRX_H #define _XIMTRX_H typedef struct _XIntrCallbackRec *XIntrCallbackPtr; typedef struct _XIntrCallbackRec { Bool (*func)( Xim, INT16, XPointer, XPointer ); XPointer call_data; XIntrCallbackPtr next; } XIntrCallbackRec ; typedef struct _XSpecRec { XIntrCallbackPtr intr_cb; Atom imconnectid; Atom improtocolid; Atom immoredataid; Window lib_connect_wid; Window ims_connect_wid; XPointer ev; CARD32 major_code; CARD32 minor_code; CARD32 BoundarySize; } XSpecRec; #define _XIM_PROTOCOL "_XIM_PROTOCOL" #define _XIM_XCONNECT "_XIM_XCONNECT" #define _XIM_MOREDATA "_XIM_MOREDATA" #define MAJOR_TRANSPORT_VERSION 0 #define MINOR_TRANSPORT_VERSION 0 #endif /* _XIMTRX_H */ libX11-1.6.3/src/xlibi18n/XimThai.h000064401431060000012000000070101247741723500170150ustar00alancstaff00002660200006/*********************************************************** Copyright 1993, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. Copyright 1993 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* **++ ** FACILITY: ** ** Xlib ** ** ABSTRACT: ** ** Definition file for Thai specific functions. ** ** MODIFICATION HISTORY: ** **/ #ifndef _XIMTHAI_H_ #define _XIMTHAI_H_ #include /* Classification of characters in TIS620 according to WTT */ #define CTRL 0 /* control chars */ #define NON 1 /* non composibles */ #define CONS 2 /* consonants */ #define LV 3 /* leading vowels */ #define FV1 4 /* following vowels */ #define FV2 5 #define FV3 6 #define BV1 7 /* below vowels */ #define BV2 8 #define BD 9 /* below diacritics */ #define TONE 10 /* tonemarks */ #define AD1 11 /* above diacritics */ #define AD2 12 #define AD3 13 #define AV1 14 /* above vowels */ #define AV2 15 #define AV3 16 /* extended classification */ #define DEAD 17 /* group of non-spacing characters */ /* display levels in display cell */ #define NONDISP 0 /* non displayable */ #define TOP 1 #define ABOVE 2 #define BASE 3 #define BELOW 4 /* Input Sequence Check modes */ #define WTT_ISC1 1 /* WTT default ISC mode */ #define WTT_ISC2 2 /* WTT strict ISC mode */ #define THAICAT_ISC 3 /* THAICAT ISC mode */ #define NOISC 255 /* No ISC */ #endif /* _XIMTHAI_H_ */ libX11-1.6.3/src/xlibi18n/Xaixlcint.h000064401431060000012000000034261247741723500174240ustar00alancstaff00002660200006/* * * Copyright IBM Corporation 1993 * * All Rights Reserved * * License to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of IBM not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS, AND * NONINFRINGEMENT OF THIRD PARTY RIGHTS, IN NO EVENT SHALL * IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * */ /************************************************************************/ /* Xaixlcint.h */ /*----------------------------------------------------------------------*/ /* This file contains Xlcint.h extension for AIX. */ /************************************************************************/ #ifndef _Xaixlcint_h #define _Xaixlcint_h #include "Xlcint.h" #include #define _LC_LDX 11 #define _LC_LDX_R6 (_LC_LDX+1) #define _LC_VERSION_R5 5 #define _LC_VERSION_R6 6 typedef struct _LC_core_ldx_t { _LC_object_t lc_object_header; XLCd (*default_loader)(); Bool sticky; } _XlcCoreObjRec, *_XlcCoreObj; #if _LC_VERSION < 0x40000000 #define __type_id type_id #define __magic magic #define __version version #endif #endif /*_Xaixlcint_h*/ libX11-1.6.3/src/xlibi18n/Makefile.in000064401431060000012000000632071247741725600173630ustar00alancstaff00002660200006# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/xlibi18n ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_define_dir.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h \ $(top_builddir)/include/X11/XlibConf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libi18n_la_DEPENDENCIES = $(IM_LIBS) $(LC_LIBS) $(OM_LIBS) am__libi18n_la_SOURCES_DIST = XlcDL.c XlcSL.c XDefaultIMIF.c \ XDefaultOMIF.c xim_trans.c ICWrap.c IMWrap.c imKStoUCS.c \ lcCT.c lcCharSet.c lcConv.c lcDB.c lcDynamic.c lcFile.c \ lcGeneric.c lcInit.c lcPrTxt.c lcPubWrap.c lcPublic.c lcRM.c \ lcStd.c lcTxtPr.c lcUTF8.c lcUtil.c lcWrap.c mbWMProps.c \ mbWrap.c utf8WMProps.c utf8Wrap.c wcWrap.c Xaixlcint.h \ XimImSw.h XimProto.h XimThai.h XimTrInt.h XimTrX.h XimTrans.h \ Ximint.h XimintL.h XimintP.h XlcGeneric.h XlcPubI.h \ XlcPublic.h Xlcint.h lcUniConv/armscii_8.h lcUniConv/ascii.h \ lcUniConv/big5.h lcUniConv/big5_emacs.h lcUniConv/big5hkscs.h \ lcUniConv/cp1133.h lcUniConv/cp1251.h lcUniConv/cp1255.h \ lcUniConv/cp1256.h lcUniConv/gb2312.h lcUniConv/gbk.h \ lcUniConv/georgian_academy.h lcUniConv/georgian_ps.h \ lcUniConv/iso8859_1.h lcUniConv/iso8859_10.h \ lcUniConv/iso8859_11.h lcUniConv/iso8859_13.h \ lcUniConv/iso8859_14.h lcUniConv/iso8859_15.h \ lcUniConv/iso8859_16.h lcUniConv/iso8859_2.h \ lcUniConv/iso8859_3.h lcUniConv/iso8859_4.h \ lcUniConv/iso8859_5.h lcUniConv/iso8859_6.h \ lcUniConv/iso8859_7.h lcUniConv/iso8859_8.h \ lcUniConv/iso8859_9.h lcUniConv/iso8859_9e.h \ lcUniConv/jisx0201.h lcUniConv/jisx0208.h lcUniConv/jisx0212.h \ lcUniConv/koi8_c.h lcUniConv/koi8_r.h lcUniConv/koi8_u.h \ lcUniConv/ksc5601.h lcUniConv/mulelao.h lcUniConv/tatar_cyr.h \ lcUniConv/tcvn.h lcUniConv/tis620.h lcUniConv/ucs2be.h \ lcUniConv/utf8.h lcUniConv/viscii.h @XLIB_LOADABLE_I18N_TRUE@am__objects_1 = XlcDL.lo XlcSL.lo am_libi18n_la_OBJECTS = $(am__objects_1) XDefaultIMIF.lo \ XDefaultOMIF.lo xim_trans.lo ICWrap.lo IMWrap.lo imKStoUCS.lo \ lcCT.lo lcCharSet.lo lcConv.lo lcDB.lo lcDynamic.lo lcFile.lo \ lcGeneric.lo lcInit.lo lcPrTxt.lo lcPubWrap.lo lcPublic.lo \ lcRM.lo lcStd.lo lcTxtPr.lo lcUTF8.lo lcUtil.lo lcWrap.lo \ mbWMProps.lo mbWrap.lo utf8WMProps.lo utf8Wrap.lo wcWrap.lo libi18n_la_OBJECTS = $(am_libi18n_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src -I$(top_builddir)/include/X11 depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libi18n_la_SOURCES) DIST_SOURCES = $(am__libi18n_la_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASE_CFLAGS = @BASE_CFLAGS@ BIGFONT_CFLAGS = @BIGFONT_CFLAGS@ BIGFONT_LIBS = @BIGFONT_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHANGELOG_CMD = @CHANGELOG_CMD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ FOP = @FOP@ GREP = @GREP@ I18N_MODULE_LIBS = @I18N_MODULE_LIBS@ INSTALL = @INSTALL@ INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ KEYSYMDEFS = @KEYSYMDEFS@ LAUNCHD = @LAUNCHD@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LINT = @LINT@ LINTLIB = @LINTLIB@ LINT_FLAGS = @LINT_FLAGS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MALLOC_ZERO_CFLAGS = @MALLOC_ZERO_CFLAGS@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_SUBSTS = @MAN_SUBSTS@ MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RAWCPP = @RAWCPP@ RAWCPPFLAGS = @RAWCPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRICT_CFLAGS = @STRICT_CFLAGS@ STRIP = @STRIP@ STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ TRADITIONALCPPFLAGS = @TRADITIONALCPPFLAGS@ VERSION = @VERSION@ WCHAR32 = @WCHAR32@ X11_CFLAGS = @X11_CFLAGS@ X11_DATADIR = @X11_DATADIR@ X11_EXTRA_DEPS = @X11_EXTRA_DEPS@ X11_LIBDIR = @X11_LIBDIR@ X11_LIBS = @X11_LIBS@ X11_LOCALEDATADIR = @X11_LOCALEDATADIR@ X11_LOCALEDIR = @X11_LOCALEDIR@ X11_LOCALELIBDIR = @X11_LOCALELIBDIR@ XERRORDB = @XERRORDB@ XKBPROTO_REQUIRES = @XKBPROTO_REQUIRES@ XKEYSYMDB = @XKEYSYMDB@ XLOCALEDATADIR = @XLOCALEDATADIR@ XLOCALEDIR = @XLOCALEDIR@ XLOCALELIBDIR = @XLOCALELIBDIR@ XMALLOC_ZERO_CFLAGS = @XMALLOC_ZERO_CFLAGS@ XMLTO = @XMLTO@ XORG_MAN_PAGE = @XORG_MAN_PAGE@ XORG_SGML_PATH = @XORG_SGML_PATH@ XSLTPROC = @XSLTPROC@ XSL_STYLESHEET = @XSL_STYLESHEET@ XTHREADLIB = @XTHREADLIB@ XTHREAD_CFLAGS = @XTHREAD_CFLAGS@ XTMALLOC_ZERO_CFLAGS = @XTMALLOC_ZERO_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ locales = @locales@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = \ -I$(top_srcdir)/include \ -I$(top_srcdir)/include/X11 \ -I$(top_builddir)/include \ -I$(top_builddir)/include/X11 \ -I$(top_srcdir)/src/xcms \ -I$(top_srcdir)/src/xkb \ -I$(top_srcdir)/src/xlibi18n \ -I$(top_srcdir)/src \ -D_BSD_SOURCE AM_CFLAGS = \ $(X11_CFLAGS) \ $(BIGFONT_CFLAGS) \ $(XMALLOC_ZERO_CFLAGS) \ $(CWARNFLAGS) noinst_LTLIBRARIES = libi18n.la # # Dynamic loading code for i18n modules # @XLIB_LOADABLE_I18N_TRUE@XI18N_DL_SOURCES = \ @XLIB_LOADABLE_I18N_TRUE@ XlcDL.c \ @XLIB_LOADABLE_I18N_TRUE@ XlcSL.c # # Static interfaces to input/output methods # @XLIB_LOADABLE_I18N_FALSE@IM_LIBS = \ @XLIB_LOADABLE_I18N_FALSE@ ${top_builddir}/modules/im/ximcp/libximcp.la @XLIB_LOADABLE_I18N_FALSE@LC_LIBS = \ @XLIB_LOADABLE_I18N_FALSE@ ${top_builddir}/modules/lc/def/libxlcDef.la \ @XLIB_LOADABLE_I18N_FALSE@ ${top_builddir}/modules/lc/gen/libxlibi18n.la \ @XLIB_LOADABLE_I18N_FALSE@ ${top_builddir}/modules/lc/Utf8/libxlcUTF8Load.la @XLIB_LOADABLE_I18N_FALSE@OM_LIBS = \ @XLIB_LOADABLE_I18N_FALSE@ ${top_builddir}/modules/om/generic/libxomGeneric.la libi18n_la_LIBADD = \ $(IM_LIBS) $(LC_LIBS) $(OM_LIBS) libi18n_la_SOURCES = \ $(XI18N_DL_SOURCES) \ XDefaultIMIF.c \ XDefaultOMIF.c \ xim_trans.c\ ICWrap.c\ IMWrap.c\ imKStoUCS.c\ lcCT.c\ lcCharSet.c\ lcConv.c\ lcDB.c\ lcDynamic.c\ lcFile.c\ lcGeneric.c\ lcInit.c\ lcPrTxt.c\ lcPubWrap.c\ lcPublic.c\ lcRM.c\ lcStd.c\ lcTxtPr.c\ lcUTF8.c\ lcUtil.c\ lcWrap.c\ mbWMProps.c\ mbWrap.c\ utf8WMProps.c\ utf8Wrap.c\ wcWrap.c\ Xaixlcint.h\ XimImSw.h\ XimProto.h\ XimThai.h\ XimTrInt.h\ XimTrX.h\ XimTrans.h\ Ximint.h\ XimintL.h\ XimintP.h\ XlcGeneric.h\ XlcPubI.h\ XlcPublic.h\ Xlcint.h\ lcUniConv/armscii_8.h\ lcUniConv/ascii.h\ lcUniConv/big5.h\ lcUniConv/big5_emacs.h\ lcUniConv/big5hkscs.h\ lcUniConv/cp1133.h\ lcUniConv/cp1251.h\ lcUniConv/cp1255.h\ lcUniConv/cp1256.h\ lcUniConv/gb2312.h\ lcUniConv/gbk.h\ lcUniConv/georgian_academy.h\ lcUniConv/georgian_ps.h\ lcUniConv/iso8859_1.h\ lcUniConv/iso8859_10.h\ lcUniConv/iso8859_11.h\ lcUniConv/iso8859_13.h\ lcUniConv/iso8859_14.h\ lcUniConv/iso8859_15.h\ lcUniConv/iso8859_16.h\ lcUniConv/iso8859_2.h\ lcUniConv/iso8859_3.h\ lcUniConv/iso8859_4.h\ lcUniConv/iso8859_5.h\ lcUniConv/iso8859_6.h\ lcUniConv/iso8859_7.h\ lcUniConv/iso8859_8.h\ lcUniConv/iso8859_9.h\ lcUniConv/iso8859_9e.h\ lcUniConv/jisx0201.h\ lcUniConv/jisx0208.h\ lcUniConv/jisx0212.h\ lcUniConv/koi8_c.h\ lcUniConv/koi8_r.h\ lcUniConv/koi8_u.h\ lcUniConv/ksc5601.h\ lcUniConv/mulelao.h\ lcUniConv/tatar_cyr.h\ lcUniConv/tcvn.h\ lcUniConv/tis620.h\ lcUniConv/ucs2be.h\ lcUniConv/utf8.h\ lcUniConv/viscii.h EXTRA_DIST = \ lcUniConv/README \ lcUniConv/COPYRIGHT \ lcUniConv/8bit_tab_to_h.c \ lcUniConv/cjk_tab_to_h.c # Check source code with tools like lint & sparse @LINT_TRUE@ALL_LINT_FLAGS = $(LINT_FLAGS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ @LINT_TRUE@ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/xlibi18n/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/xlibi18n/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libi18n.la: $(libi18n_la_OBJECTS) $(libi18n_la_DEPENDENCIES) $(EXTRA_libi18n_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libi18n_la_OBJECTS) $(libi18n_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ICWrap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IMWrap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XDefaultIMIF.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XDefaultOMIF.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XlcDL.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XlcSL.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imKStoUCS.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcCT.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcCharSet.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcConv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcDB.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcDynamic.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcFile.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcGeneric.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcInit.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcPrTxt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcPubWrap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcPublic.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcRM.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcStd.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcTxtPr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcUTF8.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcUtil.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcWrap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbWMProps.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbWrap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utf8WMProps.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utf8Wrap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wcWrap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xim_trans.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile @LINT_TRUE@lint: @LINT_TRUE@ $(LINT) $(ALL_LINT_FLAGS) $(libi18n_la_SOURCES) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKlibX11-1.6.3/src/xlibi18n/lcStd.c000064401431060000012000000150761247741723500165310ustar00alancstaff00002660200006/* * Copyright 1992, 1993 by TOSHIBA Corp. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of TOSHIBA not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. TOSHIBA make no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * * Author: Katsuhisa Yano TOSHIBA Corp. * mopi@osa.ilab.toshiba.co.jp */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "XlcPubI.h" int _Xlcmbtowc( XLCd lcd, wchar_t *wstr, char *str, int len) { static XLCd last_lcd = NULL; static XlcConv conv = NULL; XPointer from, to; int from_left, to_left; wchar_t tmp_wc; if (lcd == NULL) { lcd = _XlcCurrentLC(); if (lcd == NULL) return -1; } if (str == NULL) return XLC_PUBLIC(lcd, is_state_depend); if (conv && lcd != last_lcd) { _XlcCloseConverter(conv); conv = NULL; } last_lcd = lcd; if (conv == NULL) { conv = _XlcOpenConverter(lcd, XlcNMultiByte, lcd, XlcNWideChar); if (conv == NULL) return -1; } from = (XPointer) str; from_left = len; to = (XPointer) (wstr ? wstr : &tmp_wc); to_left = 1; if (_XlcConvert(conv, &from, &from_left, &to, &to_left, NULL, 0) < 0) return -1; return (len - from_left); } int _Xlcwctomb( XLCd lcd, char *str, wchar_t wc) { static XLCd last_lcd = NULL; static XlcConv conv = NULL; XPointer from, to; int from_left, to_left, length; if (lcd == NULL) { lcd = _XlcCurrentLC(); if (lcd == NULL) return -1; } if (str == NULL) return XLC_PUBLIC(lcd, is_state_depend); if (conv && lcd != last_lcd) { _XlcCloseConverter(conv); conv = NULL; } last_lcd = lcd; if (conv == NULL) { conv = _XlcOpenConverter(lcd, XlcNWideChar, lcd, XlcNMultiByte); if (conv == NULL) return -1; } from = (XPointer) &wc; from_left = 1; to = (XPointer) str; length = to_left = XLC_PUBLIC(lcd, mb_cur_max); if (_XlcConvert(conv, &from, &from_left, &to, &to_left, NULL, 0) < 0) return -1; return (length - to_left); } int _Xlcmbstowcs( XLCd lcd, wchar_t *wstr, char *str, int len) { XlcConv conv; XPointer from, to; int from_left, to_left, ret; if (lcd == NULL) { lcd = _XlcCurrentLC(); if (lcd == NULL) return -1; } conv = _XlcOpenConverter(lcd, XlcNMultiByte, lcd, XlcNWideChar); if (conv == NULL) return -1; from = (XPointer) str; from_left = strlen(str); to = (XPointer) wstr; to_left = len; if (_XlcConvert(conv, &from, &from_left, &to, &to_left, NULL, 0) < 0) ret = -1; else { ret = len - to_left; if (wstr && to_left > 0) wstr[ret] = (wchar_t) 0; } _XlcCloseConverter(conv); return ret; } int _Xlcwcstombs( XLCd lcd, char *str, wchar_t *wstr, int len) { XlcConv conv; XPointer from, to; int from_left, to_left, ret; if (lcd == NULL) { lcd = _XlcCurrentLC(); if (lcd == NULL) return -1; } conv = _XlcOpenConverter(lcd, XlcNWideChar, lcd, XlcNMultiByte); if (conv == NULL) return -1; from = (XPointer) wstr; from_left = _Xwcslen(wstr); to = (XPointer) str; to_left = len; if (_XlcConvert(conv, &from, &from_left, &to, &to_left, NULL, 0) < 0) ret = -1; else { ret = len - to_left; if (str && to_left > 0) str[ret] = '\0'; } _XlcCloseConverter(conv); return ret; } int _Xmbtowc( wchar_t *wstr, char *str, int len ) { return _Xlcmbtowc((XLCd) NULL, wstr, str, len); } int _Xmblen( char *str, int len ) { return _Xmbtowc((wchar_t *) NULL, str, len); } int _Xwctomb( char *str, wchar_t wc) { return _Xlcwctomb((XLCd) NULL, str, wc); } int _Xmbstowcs( wchar_t *wstr, char *str, int len) { return _Xlcmbstowcs((XLCd) NULL, wstr, str, len); } int _Xwcstombs( char *str, wchar_t *wstr, int len) { return _Xlcwcstombs((XLCd) NULL, str, wstr, len); } wchar_t * _Xwcscpy( register wchar_t *wstr1, register wchar_t *wstr2) { wchar_t *wstr_tmp = wstr1; while ((*wstr1++ = *wstr2++)) ; return wstr_tmp; } wchar_t * _Xwcsncpy( register wchar_t *wstr1, register wchar_t *wstr2, register int len) { wchar_t *wstr_tmp = wstr1; while (len-- > 0) if (!(*wstr1++ = *wstr2++)) break; while (len-- > 0) *wstr1++ = (wchar_t) 0; return wstr_tmp; } int _Xwcslen( register wchar_t *wstr) { register wchar_t *wstr_ptr = wstr; while (*wstr_ptr) wstr_ptr++; return wstr_ptr - wstr; } int _Xwcscmp( register wchar_t *wstr1, register wchar_t *wstr2) { for ( ; *wstr1 && *wstr2; wstr1++, wstr2++) if (*wstr1 != *wstr2) break; return *wstr1 - *wstr2; } int _Xwcsncmp( register wchar_t *wstr1, register wchar_t *wstr2, register int len) { for ( ; *wstr1 && *wstr2 && len > 0; wstr1++, wstr2++, len--) if (*wstr1 != *wstr2) break; if (len <= 0) return 0; return *wstr1 - *wstr2; } int _Xlcmbstoutf8( XLCd lcd, char *ustr, const char *str, int len) { XlcConv conv; XPointer from, to; int from_left, to_left, ret; if (lcd == NULL) { lcd = _XlcCurrentLC(); if (lcd == NULL) return -1; } conv = _XlcOpenConverter(lcd, XlcNMultiByte, lcd, XlcNUtf8String); if (conv == NULL) return -1; from = (XPointer) str; from_left = strlen(str); to = (XPointer) ustr; to_left = len; if (_XlcConvert(conv, &from, &from_left, &to, &to_left, NULL, 0) < 0) ret = -1; else { ret = len - to_left; if (ustr && to_left > 0) ustr[ret] = '\0'; } _XlcCloseConverter(conv); return ret; } int _Xmbstoutf8( char *ustr, const char *str, int len) { return _Xlcmbstoutf8((XLCd) NULL, ustr, str, len); } o use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of TOSHIBA not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permlibX11-1.6.3/src/xlibi18n/mbWrap.c000064401431060000012000000116221247741723500167010ustar00alancstaff00002660200006/* Copyright 1991, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ /* * Copyright 1991 by the Open Software Foundation * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of Open Software Foundation * not be used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. Open Software * Foundation makes no representations about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. * * OPEN SOFTWARE FOUNDATION DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS, IN NO EVENT SHALL OPEN SOFTWARE FOUNDATIONN BE * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * M. Collins OSF */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xlcint.h" void XmbDrawText( Display *dpy, Drawable d, GC gc, int x, int y, XmbTextItem *text_items, int nitems) { register XFontSet fs = NULL; register XmbTextItem *p = text_items; register int i = nitems; register int esc; /* ignore leading items with no fontset */ while (i && !p->font_set) { i--; p++; } for (; --i >= 0; p++) { if (p->font_set) fs = p->font_set; x += p->delta; esc = (*fs->methods->mb_draw_string) (dpy, d, fs, gc, x, y, p->chars, p->nchars); if (!esc) esc = fs->methods->mb_escapement (fs, p->chars, p->nchars); x += esc; } } void XmbDrawString( Display *dpy, Drawable d, XFontSet font_set, GC gc, int x, int y, _Xconst char *text, int text_len) { (void)(*font_set->methods->mb_draw_string) (dpy, d, font_set, gc, x, y, text, text_len); } void XmbDrawImageString( Display *dpy, Drawable d, XFontSet font_set, GC gc, int x, int y, _Xconst char *text, int text_len) { (*font_set->methods->mb_draw_image_string) (dpy, d, font_set, gc, x, y, text, text_len); } int XmbTextEscapement( XFontSet font_set, _Xconst char *text, int text_len) { return (*font_set->methods->mb_escapement) (font_set, text, text_len); } int XmbTextExtents( XFontSet font_set, _Xconst char *text, int text_len, XRectangle *overall_ink_extents, XRectangle *overall_logical_extents) { return (*font_set->methods->mb_extents) (font_set, text, text_len, overall_ink_extents, overall_logical_extents); } Status XmbTextPerCharExtents( XFontSet font_set, _Xconst char *text, int text_len, XRectangle *ink_extents_buffer, XRectangle *logical_extents_buffer, int buffer_size, int *num_chars, XRectangle *max_ink_extents, XRectangle *max_logical_extents) { return (*font_set->methods->mb_extents_per_char) (font_set, text, text_len, ink_extents_buffer, logical_extents_buffer, buffer_size, num_chars, max_ink_extents, max_logical_extents); } libX11-1.6.3/src/xlibi18n/ICWrap.c000064401431060000012000000233041247741723500165760ustar00alancstaff00002660200006/* * Copyright 1990, 1991 by OMRON Corporation, NTT Software Corporation, * and Nippon Telegraph and Telephone Corporation * Copyright 1991 by the Open Software Foundation * Copyright 1993 by the FUJITSU LIMITED * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the names of OMRON, NTT Software, NTT, and * Open Software Foundation not be used in advertising or publicity * pertaining to distribution of the software without specific, * written prior permission. OMRON, NTT Software, NTT, and Open Software * Foundation make no representations about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. * * OMRON, NTT SOFTWARE, NTT, AND OPEN SOFTWARE FOUNDATION * DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT * SHALL OMRON, NTT SOFTWARE, NTT, OR OPEN SOFTWARE FOUNDATION BE * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Authors: Li Yuhong OMRON Corporation * Tatsuya Kato NTT Software Corporation * Hiroshi Kuribayashi OMRON Coproration * Muneiyoshi Suzuki Nippon Telegraph and Telephone Co. * * M. Collins OSF * Takashi Fujiwara FUJITSU LIMITED */ /* Copyright 1991, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xlcint.h" static int _XIMNestedListToNestedList( XIMArg *nlist, /* This is the new list */ XIMArg *list) /* The original list */ { register XIMArg *ptr = list; while (ptr->name) { if (!strcmp(ptr->name, XNVaNestedList)) { nlist += _XIMNestedListToNestedList(nlist, (XIMArg *)ptr->value); } else { nlist->name = ptr->name; nlist->value = ptr->value; ptr++; nlist++; } } return ptr - list; } static void _XIMCountNestedList( XIMArg *args, int *total_count) { for (; args->name; args++) { if (!strcmp(args->name, XNVaNestedList)) _XIMCountNestedList((XIMArg *)args->value, total_count); else ++(*total_count); } } static void _XIMCountVaList(va_list var, int *total_count) { char *attr; *total_count = 0; for (attr = va_arg(var, char*); attr; attr = va_arg(var, char*)) { if (!strcmp(attr, XNVaNestedList)) { _XIMCountNestedList(va_arg(var, XIMArg*), total_count); } else { (void)va_arg(var, XIMArg*); ++(*total_count); } } } static void _XIMVaToNestedList(va_list var, int max_count, XIMArg **args_return) { XIMArg *args; char *attr; if (max_count <= 0) { *args_return = (XIMArg *)NULL; return; } args = Xmalloc(((unsigned)max_count + 1) * sizeof(XIMArg)); *args_return = args; if (!args) return; for (attr = va_arg(var, char*); attr; attr = va_arg(var, char*)) { if (!strcmp(attr, XNVaNestedList)) { args += _XIMNestedListToNestedList(args, va_arg(var, XIMArg*)); } else { args->name = attr; args->value = va_arg(var, XPointer); args++; } } args->name = (char*)NULL; } /*ARGSUSED*/ XVaNestedList XVaCreateNestedList(int dummy, ...) { va_list var; XIMArg *args = NULL; int total_count; va_start(var, dummy); _XIMCountVaList(var, &total_count); va_end(var); va_start(var, dummy); _XIMVaToNestedList(var, total_count, &args); va_end(var); return (XVaNestedList)args; } char * XSetIMValues(XIM im, ...) { va_list var; int total_count; XIMArg *args; char *ret; /* * so count the stuff dangling here */ va_start(var, im); _XIMCountVaList(var, &total_count); va_end(var); /* * now package it up so we can send it along */ va_start(var, im); _XIMVaToNestedList(var, total_count, &args); va_end(var); ret = (*im->methods->set_values) (im, args); Xfree(args); return ret; } char * XGetIMValues(XIM im, ...) { va_list var; int total_count; XIMArg *args; char *ret; /* * so count the stuff dangling here */ va_start(var, im); _XIMCountVaList(var, &total_count); va_end(var); /* * now package it up so we can send it along */ va_start(var, im); _XIMVaToNestedList(var, total_count, &args); va_end(var); ret = (*im->methods->get_values) (im, args); Xfree(args); return ret; } /* * Create an input context within the input method, * and return a pointer to the input context. */ XIC XCreateIC(XIM im, ...) { va_list var; int total_count; XIMArg *args; XIC ic; /* * so count the stuff dangling here */ va_start(var, im); _XIMCountVaList(var, &total_count); va_end(var); /* * now package it up so we can send it along */ va_start(var, im); _XIMVaToNestedList(var, total_count, &args); va_end(var); ic = (XIC) (*im->methods->create_ic) (im, args); Xfree(args); if (ic) { ic->core.next = im->core.ic_chain; im->core.ic_chain = ic; } return ic; } /* * Free the input context. */ void XDestroyIC(XIC ic) { XIM im = ic->core.im; XIC *prev; (*ic->methods->destroy) (ic); if (im) { for (prev = &im->core.ic_chain; *prev; prev = &(*prev)->core.next) { if (*prev == ic) { *prev = ic->core.next; break; } } } Xfree (ic); } char * XGetICValues(XIC ic, ...) { va_list var; int total_count; XIMArg *args; char *ret; if (!ic->core.im) return (char *) NULL; /* * so count the stuff dangling here */ va_start(var, ic); _XIMCountVaList(var, &total_count); va_end(var); /* * now package it up so we can send it along */ va_start(var, ic); _XIMVaToNestedList(var, total_count, &args); va_end(var); ret = (*ic->methods->get_values) (ic, args); Xfree(args); return ret; } char * XSetICValues(XIC ic, ...) { va_list var; int total_count; XIMArg *args; char *ret; if (!ic->core.im) return (char *) NULL; /* * so count the stuff dangling here */ va_start(var, ic); _XIMCountVaList(var, &total_count); va_end(var); /* * now package it up so we can send it along */ va_start(var, ic); _XIMVaToNestedList(var, total_count, &args); va_end(var); ret = (*ic->methods->set_values) (ic, args); Xfree(args); return ret; } /* * Require the input manager to focus the focus window attached to the ic * argument. */ void XSetICFocus(XIC ic) { if (ic && ic->core.im) (*ic->methods->set_focus) (ic); } /* * Require the input manager to unfocus the focus window attached to the ic * argument. */ void XUnsetICFocus(XIC ic) { if (ic->core.im) (*ic->methods->unset_focus) (ic); } /* * Return the XIM associated with the input context. */ XIM XIMOfIC(XIC ic) { return ic->core.im; } char * XmbResetIC(XIC ic) { if (ic->core.im) return (*ic->methods->mb_reset)(ic); return (char *)NULL; } wchar_t * XwcResetIC(XIC ic) { if (ic->core.im) return (*ic->methods->wc_reset)(ic); return (wchar_t *)NULL; } char * Xutf8ResetIC(XIC ic) { if (ic->core.im) { if (ic->methods->utf8_reset) return (*ic->methods->utf8_reset)(ic); else if (ic->methods->mb_reset) return (*ic->methods->mb_reset)(ic); } return (char *)NULL; } int XmbLookupString(XIC ic, XKeyEvent *ev, char *buffer, int nbytes, KeySym *keysym, Status *status) { if (ic->core.im) return (*ic->methods->mb_lookup_string) (ic, ev, buffer, nbytes, keysym, status); return XLookupNone; } int XwcLookupString(XIC ic, XKeyEvent *ev, wchar_t *buffer, int nchars, KeySym *keysym, Status *status) { if (ic->core.im) return (*ic->methods->wc_lookup_string) (ic, ev, buffer, nchars, keysym, status); return XLookupNone; } int Xutf8LookupString(XIC ic, XKeyEvent *ev, char *buffer, int nbytes, KeySym *keysym, Status *status) { if (ic->core.im) { if (ic->methods->utf8_lookup_string) return (*ic->methods->utf8_lookup_string) (ic, ev, buffer, nbytes, keysym, status); else if (ic->methods->mb_lookup_string) return (*ic->methods->mb_lookup_string) (ic, ev, buffer, nbytes, keysym, status); } return XLookupNone; } libX11-1.6.3/src/xlibi18n/XimintL.h000064401431060000012000000066141247741723500170470ustar00alancstaff00002660200006/****************************************************************** Copyright 1991, 1992, 1993, 1994 by FUJITSU LIMITED Copyright 1993 by Digital Equipment Corporation Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of FUJITSU LIMITED and Digital Equipment Corporation not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED and Digital Equipment Corporation makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp Modifier: Franky Ling Digital Equipment Corporation frankyling@hgrd01.enet.dec.com ******************************************************************/ #ifndef _XIMINTL_H #define _XIMINTL_H #define COMPOSE_FILE "Compose" /* * Data Structures for Local Processing */ typedef INT32 DTIndex; typedef INT32 DTCharIndex; typedef BITS32 DTModifier; typedef struct _DefTree { DTIndex next; DTIndex succession; /* successive Key Sequence */ /* Key definitions */ DTModifier modifier_mask; DTModifier modifier; KeySym keysym; /* leaf only */ DTCharIndex mb; DTCharIndex wc; /* make from mb */ DTCharIndex utf8; /* make from mb */ KeySym ks; } DefTree; typedef struct _DefTreeBase { DefTree *tree; char *mb; wchar_t *wc; char *utf8; DTIndex treeused, treesize; DTCharIndex mbused, mbsize; DTCharIndex wcused, wcsize; DTCharIndex utf8used, utf8size; } DefTreeBase; typedef struct _XimLocalPrivateRec { /* The first fields are identical with XimCommonPrivateRec. */ XlcConv ctom_conv; XlcConv ctow_conv; XlcConv ctoutf8_conv; XlcConv cstomb_conv; XlcConv cstowc_conv; XlcConv cstoutf8_conv; XlcConv ucstoc_conv; XlcConv ucstoutf8_conv; XIC current_ic; DefTreeBase base; DTIndex top; } XimLocalPrivateRec; typedef struct _XicThaiPart { int comp_state; KeySym keysym; int input_mode; } XicThaiPart; typedef struct _XicLocalPrivateRec { long value_mask; DefTreeBase base; DTIndex context; DTIndex composed; XicThaiPart thai; XIMResourceList ic_resources; unsigned int ic_num_resources; unsigned char brl_pressed, brl_committing, brl_committed; Time brl_release_start; } XicLocalPrivateRec; #endif /* _XIMINTL_H */ t both that copyright notice and this permission notice appear in supporting documentation, and that the name of FUJlibX11-1.6.3/src/xlibi18n/lcDB.c000064401431060000012000000704661247741723500162700ustar00alancstaff00002660200006/* * * Copyright IBM Corporation 1993 * * All Rights Reserved * * License to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of IBM not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS, AND * NONINFRINGEMENT OF THIRD PARTY RIGHTS, IN NO EVENT SHALL * IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * */ /* * (c) Copyright 1995 FUJITSU LIMITED * This is source code modified by FUJITSU LIMITED under the Joint * Development Agreement for the CDE/Motif PST. */ #ifndef NOT_X_ENV #ifdef HAVE_CONFIG_H #include #endif #include #include #include "Xlibint.h" #include "XlcPubI.h" #else /* NOT_X_ENV */ #define Xmalloc malloc #define Xrealloc realloc #define Xfree free #endif /* NOT_X_ENV */ /* specifying NOT_X_ENV allows users to just use the database parsing routine. */ /* For UDC/VW */ #ifndef BUFSIZE #define BUFSIZE 2048 #endif #ifdef COMMENT #ifdef BUFSIZE #undef BUFSIZE #endif #define BUFSIZE 6144 /* 2048*3 */ #endif #include typedef struct _DatabaseRec { char *category; char *name; char **value; int value_num; struct _DatabaseRec *next; } DatabaseRec, *Database; typedef enum { S_NULL, /* outside category */ S_CATEGORY, /* inside category */ S_NAME, /* has name, expecting values */ S_VALUE } ParseState; typedef enum { T_NEWLINE, T_COMMENT, T_SEMICOLON, T_DOUBLE_QUOTE, T_LEFT_BRACE, T_RIGHT_BRACE, T_SPACE, T_TAB, T_BACKSLASH, T_NUMERIC_HEX, T_NUMERIC_DEC, T_NUMERIC_OCT, T_DEFAULT } Token; typedef struct { Token token; /* token id */ int len; /* length of token sequence */ } TokenTable; static int f_newline (const char *str, Token token, Database *db); static int f_comment (const char *str, Token token, Database *db); static int f_semicolon (const char *str, Token token, Database *db); static int f_double_quote (const char *str, Token token, Database *db); static int f_left_brace (const char *str, Token token, Database *db); static int f_right_brace (const char *str, Token token, Database *db); static int f_white (const char *str, Token token, Database *db); static int f_backslash (const char *str, Token token, Database *db); static int f_numeric (const char *str, Token token, Database *db); static int f_default (const char *str, Token token, Database *db); static const TokenTable token_tbl[] = { { T_NEWLINE, 1 }, { T_COMMENT, 1 }, { T_SEMICOLON, 1 }, { T_DOUBLE_QUOTE, 1 }, { T_LEFT_BRACE, 1 }, { T_RIGHT_BRACE, 1 }, { T_SPACE, 1 }, { T_TAB, 1 }, { T_BACKSLASH, 1 }, { T_NUMERIC_HEX, 2 }, { T_NUMERIC_DEC, 2 }, { T_NUMERIC_OCT, 2 }, { T_DEFAULT, 1 } /* any character */ }; #define SYM_CR '\r' #define SYM_NEWLINE '\n' #define SYM_COMMENT '#' #define SYM_SEMICOLON ';' #define SYM_DOUBLE_QUOTE '"' #define SYM_LEFT_BRACE '{' #define SYM_RIGHT_BRACE '}' #define SYM_SPACE ' ' #define SYM_TAB '\t' #define SYM_BACKSLASH '\\' /************************************************************************/ #define MAX_NAME_NEST 64 typedef struct { ParseState pre_state; char *category; char *name[MAX_NAME_NEST]; int nest_depth; char **value; int value_len; int value_num; int bufsize; /* bufMaxSize >= bufsize >= 0 */ int bufMaxSize; /* default : BUFSIZE */ char *buf; } DBParseInfo; static DBParseInfo parse_info; static void init_parse_info (void) { static int allocated /* = 0 */; char *ptr; int size; if (!allocated) { bzero(&parse_info, sizeof(DBParseInfo)); parse_info.buf = Xmalloc(BUFSIZE); parse_info.bufMaxSize = BUFSIZE; allocated = 1; return; } ptr = parse_info.buf; size = parse_info.bufMaxSize; bzero(&parse_info, sizeof(DBParseInfo)); parse_info.buf = ptr; parse_info.bufMaxSize = size; } static void clear_parse_info (void) { int i; char *ptr; int size; parse_info.pre_state = S_NULL; if (parse_info.category != NULL) { Xfree(parse_info.category); } for (i = 0; i <= parse_info.nest_depth; ++i) { if (parse_info.name[i]) { Xfree(parse_info.name[i]); } } if (parse_info.value) { if (*parse_info.value) { Xfree(*parse_info.value); } Xfree(parse_info.value); } ptr = parse_info.buf; size = parse_info.bufMaxSize; bzero(&parse_info, sizeof(DBParseInfo)); parse_info.buf = ptr; parse_info.bufMaxSize = size; } static Bool realloc_parse_info( int len) { char *p; int newsize = BUFSIZE * ((parse_info.bufsize + len)/BUFSIZE + 1); p = Xrealloc(parse_info.buf, newsize); if (p == NULL) return False; parse_info.bufMaxSize = newsize; parse_info.buf = p; return True; } /************************************************************************/ typedef struct _Line { char *str; int cursize; int maxsize; int seq; } Line; static void free_line( Line *line) { if (line->str != NULL) { Xfree(line->str); } bzero(line, sizeof(Line)); } static int realloc_line( Line *line, int size) { char *str = line->str; if (str != NULL) { str = Xrealloc(str, size); } else { str = Xmalloc(size); } if (str == NULL) { /* malloc error */ if (line->str != NULL) { Xfree(line->str); } bzero(line, sizeof(Line)); return 0; } line->str = str; line->maxsize = size; return 1; } #define iswhite(ch) ((ch) == SYM_SPACE || (ch) == SYM_TAB) static void zap_comment( char *str, int *quoted) { char *p = str; #ifdef never *quoted = 0; if (*p == SYM_COMMENT) { int len = strlen(str); if (p[len - 1] == SYM_NEWLINE || p[len - 1] == SYM_CR) { *p++ = SYM_NEWLINE; } *p = '\0'; } #else while (*p) { if (*p == SYM_DOUBLE_QUOTE) { if (p == str || p[-1] != SYM_BACKSLASH) { /* unescaped double quote changes quoted state. */ *quoted = *quoted ? 0 : 1; } } if (*p == SYM_COMMENT && !*quoted) { int pos = p - str; if (pos == 0 || (iswhite(p[-1]) && (pos == 1 || p[-2] != SYM_BACKSLASH))) { int len = strlen(p); if (len > 0 && (p[len - 1] == SYM_NEWLINE || p[len-1] == SYM_CR)) { /* newline is the identifier for finding end of value. therefore, it should not be removed. */ *p++ = SYM_NEWLINE; } *p = '\0'; break; } } ++p; } #endif } static int read_line( FILE *fd, Line *line) { char buf[BUFSIZE], *p; int len; int quoted = 0; /* quoted by double quote? */ char *str; int cur; str = line->str; cur = line->cursize = 0; while ((p = fgets(buf, BUFSIZE, fd)) != NULL) { ++line->seq; zap_comment(p, "ed); /* remove comment line */ len = strlen(p); if (len == 0) { if (cur > 0) { break; } continue; } if (cur + len + 1 > line->maxsize) { /* need to reallocate buffer. */ if (! realloc_line(line, line->maxsize + BUFSIZE)) { return -1; /* realloc error. */ } str = line->str; } strncpy(str + cur, p, len); cur += len; str[cur] = '\0'; #ifdef __UNIXOS2__ /* Take out carriage returns under OS/2 */ if (cur>1) { if (str[cur-2] == '\r' && str[cur-1] == '\n') { str[cur-2] = '\n'; str[cur-1] = '\0'; cur--; } } #endif if (!quoted && cur > 1 && str[cur - 2] == SYM_BACKSLASH && (str[cur - 1] == SYM_NEWLINE || str[cur-1] == SYM_CR)) { /* the line is ended backslash followed by newline. need to concatinate the next line. */ cur -= 2; str[cur] = '\0'; } else if (len < BUFSIZE - 1 || buf[len - 1] == SYM_NEWLINE || buf[len - 1] == SYM_CR) { /* the line is shorter than BUFSIZE. */ break; } } if (quoted) { /* error. still in quoted state. */ return -1; } return line->cursize = cur; } /************************************************************************/ static Token get_token( const char *str) { switch (*str) { case SYM_NEWLINE: case SYM_CR: return T_NEWLINE; case SYM_COMMENT: return T_COMMENT; case SYM_SEMICOLON: return T_SEMICOLON; case SYM_DOUBLE_QUOTE: return T_DOUBLE_QUOTE; case SYM_LEFT_BRACE: return T_LEFT_BRACE; case SYM_RIGHT_BRACE: return T_RIGHT_BRACE; case SYM_SPACE: return T_SPACE; case SYM_TAB: return T_TAB; case SYM_BACKSLASH: switch (str[1]) { case 'x': return T_NUMERIC_HEX; case 'd': return T_NUMERIC_DEC; case 'o': return T_NUMERIC_OCT; } return T_BACKSLASH; default: return T_DEFAULT; } } static int get_word( const char *str, char *word) { const char *p = str; char *w = word; Token token; int token_len; while (*p != '\0') { token = get_token(p); token_len = token_tbl[token].len; if (token == T_BACKSLASH) { p += token_len; if (*p == '\0') break; token = get_token(p); token_len = token_tbl[token].len; } else if (token != T_COMMENT && token != T_DEFAULT) { break; } strncpy(w, p, token_len); p += token_len; w += token_len; } *w = '\0'; return p - str; /* return number of scanned chars */ } static int get_quoted_word( const char *str, char *word) { const char *p = str; char *w = word; Token token; int token_len; if (*p == SYM_DOUBLE_QUOTE) { ++p; } while (*p != '\0') { token = get_token(p); token_len = token_tbl[token].len; if (token == T_DOUBLE_QUOTE) { p += token_len; goto found; } if (token == T_BACKSLASH) { p += token_len; if (*p == '\0') { break; } token = get_token(p); token_len = token_tbl[token].len; } strncpy(w, p, token_len); p += token_len; w += token_len; } /* error. cannot detect next double quote */ return 0; found:; *w = '\0'; return p - str; } /************************************************************************/ static int append_value_list (void) { char **value_list = parse_info.value; char *value; int value_num = parse_info.value_num; int value_len = parse_info.value_len; char *str = parse_info.buf; int len = parse_info.bufsize; char *p; if (len < 1) { return 1; /* return with no error */ } if (value_list == (char **)NULL) { value_list = Xmalloc(sizeof(char *) * 2); *value_list = NULL; } else { char **prev_list = value_list; value_list = (char **) Xrealloc(value_list, sizeof(char *) * (value_num + 2)); if (value_list == NULL) { Xfree(prev_list); } } if (value_list == (char **)NULL) goto err2; value = *value_list; if (value == NULL) { value = Xmalloc(value_len + len + 1); } else { char *prev_value = value; value = Xrealloc(value, value_len + len + 1); if (value == NULL) { Xfree(prev_value); } } if (value == NULL) { goto err1; } if (value != *value_list) { int i; ssize_t delta; delta = value - *value_list; *value_list = value; for (i = 1; i < value_num; ++i) { value_list[i] += delta; } } value_list[value_num] = p = &value[value_len]; value_list[value_num + 1] = NULL; strncpy(p, str, len); p[len] = 0; parse_info.value = value_list; parse_info.value_num = value_num + 1; parse_info.value_len = value_len + len + 1; parse_info.bufsize = 0; return 1; err1: if (value_list) { Xfree((char **)value_list); } if (value) { Xfree(value); } err2: parse_info.value = (char **)NULL; parse_info.value_num = 0; parse_info.value_len = 0; parse_info.bufsize = 0; return 0; } static int construct_name( char *name, int size) { int i; int len = 0; char *p = name; for (i = 0; i <= parse_info.nest_depth; ++i) { len += strlen(parse_info.name[i]) + 1; } if (len >= size) return 0; strcpy(p, parse_info.name[0]); p += strlen(parse_info.name[0]); for (i = 1; i <= parse_info.nest_depth; ++i) { *p++ = '.'; strcpy(p, parse_info.name[i]); p += strlen(parse_info.name[i]); } return *name != '\0'; } static int store_to_database( Database *db) { Database new = (Database)NULL; char name[BUFSIZE]; if (parse_info.pre_state == S_VALUE) { if (! append_value_list()) { goto err; } } if (parse_info.name[parse_info.nest_depth] == NULL) { goto err; } new = Xcalloc(1, sizeof(DatabaseRec)); if (new == (Database)NULL) { goto err; } new->category = strdup(parse_info.category); if (new->category == NULL) { goto err; } if (! construct_name(name, sizeof(name))) { goto err; } new->name = strdup(name); if (new->name == NULL) { goto err; } new->next = *db; new->value = parse_info.value; new->value_num = parse_info.value_num; *db = new; Xfree(parse_info.name[parse_info.nest_depth]); parse_info.name[parse_info.nest_depth] = NULL; parse_info.value = (char **)NULL; parse_info.value_num = 0; parse_info.value_len = 0; return 1; err: if (new) { if (new->category) { Xfree(new->category); } if (new->name) { Xfree(new->name); } Xfree(new); } if (parse_info.value) { if (*parse_info.value) { Xfree(*parse_info.value); } Xfree((char **)parse_info.value); parse_info.value = (char **)NULL; parse_info.value_num = 0; parse_info.value_len = 0; } return 0; } #define END_MARK "END" #define END_MARK_LEN 3 /*strlen(END_MARK)*/ static int check_category_end( const char *str) { const char *p; int len; p = str; if (strncmp(p, END_MARK, END_MARK_LEN)) { return 0; } p += END_MARK_LEN; while (iswhite(*p)) { ++p; } len = strlen(parse_info.category); if (strncmp(p, parse_info.category, len)) { return 0; } p += len; return p - str; } /************************************************************************/ static int f_newline( const char *str, Token token, Database *db) { switch (parse_info.pre_state) { case S_NULL: case S_CATEGORY: break; case S_NAME: return 0; /* no value */ case S_VALUE: if (!store_to_database(db)) return 0; parse_info.pre_state = S_CATEGORY; break; default: return 0; } return token_tbl[token].len; } static int f_comment( const char *str, Token token, Database *db) { /* NOTE: comment is already handled in read_line(), so this function is not necessary. */ const char *p = str; while (*p != SYM_NEWLINE && *p != SYM_CR && *p != '\0') { ++p; /* zap to the end of line */ } return p - str; } static int f_white( const char *str, Token token, Database *db) { const char *p = str; while (iswhite(*p)) { ++p; } return p - str; } static int f_semicolon( const char *str, Token token, Database *db) { switch (parse_info.pre_state) { case S_NULL: case S_CATEGORY: case S_NAME: return 0; case S_VALUE: if (! append_value_list()) return 0; parse_info.pre_state = S_VALUE; break; default: return 0; } return token_tbl[token].len; } static int f_left_brace( const char *str, Token token, Database *db) { switch (parse_info.pre_state) { case S_NULL: case S_CATEGORY: case S_VALUE: return 0; case S_NAME: if (parse_info.name[parse_info.nest_depth] == NULL || parse_info.nest_depth + 1 > MAX_NAME_NEST) return 0; ++parse_info.nest_depth; parse_info.pre_state = S_CATEGORY; break; default: return 0; } return token_tbl[token].len; } static int f_right_brace( const char *str, Token token, Database *db) { if (parse_info.nest_depth < 1) return 0; switch (parse_info.pre_state) { case S_NULL: case S_NAME: return 0; case S_VALUE: if (! store_to_database(db)) return 0; /* fall into next case */ case S_CATEGORY: if (parse_info.name[parse_info.nest_depth] != NULL) { Xfree(parse_info.name[parse_info.nest_depth]); parse_info.name[parse_info.nest_depth] = NULL; } --parse_info.nest_depth; parse_info.pre_state = S_CATEGORY; break; default: return 0; } return token_tbl[token].len; } static int f_double_quote( const char *str, Token token, Database *db) { char word[BUFSIZE]; char* wordp; int len; if ((len = strlen (str)) < sizeof word) wordp = word; else wordp = Xmalloc (len + 1); if (wordp == NULL) return 0; len = 0; switch (parse_info.pre_state) { case S_NULL: case S_CATEGORY: goto err; case S_NAME: case S_VALUE: len = get_quoted_word(str, wordp); if (len < 1) goto err; if ((parse_info.bufsize + (int)strlen(wordp) + 1) >= parse_info.bufMaxSize) { if (realloc_parse_info(strlen(wordp)+1) == False) { goto err; } } strcpy(&parse_info.buf[parse_info.bufsize], wordp); parse_info.bufsize += strlen(wordp); parse_info.pre_state = S_VALUE; break; default: goto err; } if (wordp != word) Xfree (wordp); return len; /* including length of token */ err: if (wordp != word) Xfree (wordp); return 0; } static int f_backslash( const char *str, Token token, Database *db) { return f_default(str, token, db); } static int f_numeric( const char *str, Token token, Database *db) { char word[BUFSIZE]; const char *p; char* wordp; int len; int token_len; if ((len = strlen (str)) < sizeof word) wordp = word; else wordp = Xmalloc (len + 1); if (wordp == NULL) return 0; switch (parse_info.pre_state) { case S_NULL: case S_CATEGORY: goto err; case S_NAME: case S_VALUE: token_len = token_tbl[token].len; p = str + token_len; len = get_word(p, wordp); if (len < 1) goto err; if ((parse_info.bufsize + token_len + (int)strlen(wordp) + 1) >= parse_info.bufMaxSize) { if (realloc_parse_info(token_len + strlen(wordp) + 1) == False) goto err; } strncpy(&parse_info.buf[parse_info.bufsize], str, token_len); strcpy(&parse_info.buf[parse_info.bufsize + token_len], wordp); parse_info.bufsize += token_len + strlen(wordp); parse_info.pre_state = S_VALUE; break; default: goto err; } if (wordp != word) Xfree (wordp); return len + token_len; err: if (wordp != word) Xfree (wordp); return 0; } static int f_default( const char *str, Token token, Database *db) { char word[BUFSIZE], *p; char* wordp; int len; if ((len = strlen (str)) < sizeof word) wordp = word; else wordp = Xmalloc (len + 1); if (wordp == NULL) return 0; len = get_word(str, wordp); if (len < 1) goto err; switch (parse_info.pre_state) { case S_NULL: if (parse_info.category != NULL) goto err; p = strdup(wordp); if (p == NULL) goto err; parse_info.category = p; parse_info.pre_state = S_CATEGORY; break; case S_CATEGORY: if (parse_info.nest_depth == 0) { if (check_category_end(str)) { /* end of category is detected. clear context and zap to end of this line */ clear_parse_info(); len = strlen(str); break; } } p = strdup(wordp); if (p == NULL) goto err; if (parse_info.name[parse_info.nest_depth] != NULL) { Xfree(parse_info.name[parse_info.nest_depth]); } parse_info.name[parse_info.nest_depth] = p; parse_info.pre_state = S_NAME; break; case S_NAME: case S_VALUE: if ((parse_info.bufsize + (int)strlen(wordp) + 1) >= parse_info.bufMaxSize) { if (realloc_parse_info(strlen(wordp) + 1) == False) goto err; } strcpy(&parse_info.buf[parse_info.bufsize], wordp); parse_info.bufsize += strlen(wordp); parse_info.pre_state = S_VALUE; break; default: goto err; } if (wordp != word) Xfree (wordp); return len; err: if (wordp != word) Xfree (wordp); return 0; } /************************************************************************/ #ifdef DEBUG static void PrintDatabase( Database db) { Database p = db; int i = 0, j; printf("***\n*** BEGIN Database\n***\n"); while (p) { printf("%3d: ", i++); printf("%s, %s, ", p->category, p->name); printf("\t[%d: ", p->value_num); for (j = 0; j < p->value_num; ++j) { printf("%s, ", p->value[j]); } printf("]\n"); p = p->next; } printf("***\n*** END Database\n***\n"); } #endif static void DestroyDatabase( Database db) { Database p = db; while (p) { if (p->category != NULL) { Xfree(p->category); } if (p->name != NULL) { Xfree(p->name); } if (p->value != (char **)NULL) { if (*p->value != NULL) { Xfree(*p->value); } Xfree(p->value); } db = p->next; Xfree(p); p = db; } } static int CountDatabase( Database db) { Database p = db; int cnt = 0; while (p) { ++cnt; p = p->next; } return cnt; } static Database CreateDatabase( char *dbfile) { Database db = (Database)NULL; FILE *fd; Line line; char *p; Token token; int len; int error = 0; fd = _XFopenFile(dbfile, "r"); if (fd == (FILE *)NULL) return NULL; bzero(&line, sizeof(Line)); init_parse_info(); do { int rc = read_line(fd, &line); if (rc < 0) { error = 1; break; } else if (rc == 0) { break; } p = line.str; while (*p) { int (*parse_proc)(const char *str, Token token, Database *db) = NULL; token = get_token(p); switch (token_tbl[token].token) { case T_NEWLINE: parse_proc = f_newline; break; case T_COMMENT: parse_proc = f_comment; break; case T_SEMICOLON: parse_proc = f_semicolon; break; case T_DOUBLE_QUOTE: parse_proc = f_double_quote; break; case T_LEFT_BRACE: parse_proc = f_left_brace; break; case T_RIGHT_BRACE: parse_proc = f_right_brace; break; case T_SPACE: case T_TAB: parse_proc = f_white; break; case T_BACKSLASH: parse_proc = f_backslash; break; case T_NUMERIC_HEX: case T_NUMERIC_DEC: case T_NUMERIC_OCT: parse_proc = f_numeric; break; case T_DEFAULT: parse_proc = f_default; break; } len = parse_proc(p, token, &db); if (len < 1) { error = 1; break; } p += len; } } while (!error); if (parse_info.pre_state != S_NULL) { clear_parse_info(); error = 1; } if (error) { #ifdef DEBUG fprintf(stderr, "database format error at line %d.\n", line.seq); #endif DestroyDatabase(db); db = (Database)NULL; } fclose(fd); free_line(&line); #ifdef DEBUG PrintDatabase(db); #endif return db; } /************************************************************************/ #ifndef NOT_X_ENV /* locale framework functions */ typedef struct _XlcDatabaseRec { XrmQuark category_q; XrmQuark name_q; Database db; struct _XlcDatabaseRec *next; } XlcDatabaseRec, *XlcDatabase; typedef struct _XlcDatabaseListRec { XrmQuark name_q; XlcDatabase lc_db; Database database; int ref_count; struct _XlcDatabaseListRec *next; } XlcDatabaseListRec, *XlcDatabaseList; /* database cache list (per file) */ static XlcDatabaseList _db_list = (XlcDatabaseList)NULL; /************************************************************************/ /* _XlcGetResource(lcd, category, class, value, count) */ /*----------------------------------------------------------------------*/ /* This function retrieves XLocale database information. */ /************************************************************************/ void _XlcGetResource( XLCd lcd, const char *category, const char *class, char ***value, int *count) { XLCdPublicMethodsPart *methods = XLC_PUBLIC_METHODS(lcd); (*methods->get_resource)(lcd, category, class, value, count); return; } /************************************************************************/ /* _XlcGetLocaleDataBase(lcd, category, class, value, count) */ /*----------------------------------------------------------------------*/ /* This function retrieves XLocale database information. */ /************************************************************************/ void _XlcGetLocaleDataBase( XLCd lcd, const char *category, const char *name, char ***value, int *count) { XlcDatabase lc_db = (XlcDatabase)XLC_PUBLIC(lcd, xlocale_db); XrmQuark category_q, name_q; category_q = XrmStringToQuark(category); name_q = XrmStringToQuark(name); for (; lc_db->db; ++lc_db) { if (category_q == lc_db->category_q && name_q == lc_db->name_q) { *value = lc_db->db->value; *count = lc_db->db->value_num; return; } } *value = (char **)NULL; *count = 0; } /************************************************************************/ /* _XlcDestroyLocaleDataBase(lcd) */ /*----------------------------------------------------------------------*/ /* This function destroy the XLocale Database that bound to the */ /* specified lcd. If the XLocale Database is refered from some */ /* other lcd, this function just decreases reference count of */ /* the database. If no locale refers the database, this function */ /* remove it from the cache list and free work area. */ /************************************************************************/ void _XlcDestroyLocaleDataBase( XLCd lcd) { XlcDatabase lc_db = (XlcDatabase)XLC_PUBLIC(lcd, xlocale_db); XlcDatabaseList p, prev; for (p = _db_list, prev = (XlcDatabaseList)NULL; p; prev = p, p = p->next) { if (p->lc_db == lc_db) { if ((-- p->ref_count) < 1) { if (p->lc_db != (XlcDatabase)NULL) { Xfree(p->lc_db); } DestroyDatabase(p->database); if (prev == (XlcDatabaseList)NULL) { _db_list = p->next; } else { prev->next = p->next; } Xfree((char*)p); } break; } } XLC_PUBLIC(lcd, xlocale_db) = (XPointer)NULL; } /************************************************************************/ /* _XlcCreateLocaleDataBase(lcd) */ /*----------------------------------------------------------------------*/ /* This function create an XLocale database which correspond to */ /* the specified XLCd. */ /************************************************************************/ XPointer _XlcCreateLocaleDataBase( XLCd lcd) { XlcDatabaseList list, new; Database p, database = (Database)NULL; XlcDatabase lc_db = (XlcDatabase)NULL; XrmQuark name_q; char *name; int i, n; name = _XlcFileName(lcd, "locale"); if (name == NULL) return (XPointer)NULL; #ifndef __UNIXOS2__ name_q = XrmStringToQuark(name); #else name_q = XrmStringToQuark((char*)__XOS2RedirRoot(name)); #endif for (list = _db_list; list; list = list->next) { if (name_q == list->name_q) { list->ref_count++; Xfree (name); return XLC_PUBLIC(lcd, xlocale_db) = (XPointer)list->lc_db; } } database = CreateDatabase(name); if (database == (Database)NULL) { Xfree (name); return (XPointer)NULL; } n = CountDatabase(database); lc_db = Xcalloc(n + 1, sizeof(XlcDatabaseRec)); if (lc_db == (XlcDatabase)NULL) goto err; for (p = database, i = 0; p && i < n; p = p->next, ++i) { lc_db[i].category_q = XrmStringToQuark(p->category); lc_db[i].name_q = XrmStringToQuark(p->name); lc_db[i].db = p; } new = Xmalloc(sizeof(XlcDatabaseListRec)); if (new == (XlcDatabaseList)NULL) { goto err; } new->name_q = name_q; new->lc_db = lc_db; new->database = database; new->ref_count = 1; new->next = _db_list; _db_list = new; Xfree (name); return XLC_PUBLIC(lcd, xlocale_db) = (XPointer)lc_db; err: DestroyDatabase(database); if (lc_db != (XlcDatabase)NULL) { Xfree(lc_db); } Xfree (name); return (XPointer)NULL; } #endif /* NOT_X_ENV */ &parse_info.buf[parse_info.bufsize], str, token_len); strcpy(&parse_info.buf[parse_info.bufsize + token_len], wordp); parse_info.bufsize += token_len + strlen(wordp); parse_info.pre_state = S_VALUE; libX11-1.6.3/src/xlibi18n/wcWrap.c000064401431060000012000000117311247741723500167150ustar00alancstaff00002660200006/* Copyright 1991, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ /* * Copyright 1991 by the Open Software Foundation * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of Open Software Foundation * not be used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. Open Software * Foundation makes no representations about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. * * OPEN SOFTWARE FOUNDATION DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS, IN NO EVENT SHALL OPEN SOFTWARE FOUNDATIONN BE * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * M. Collins OSF */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xlcint.h" void XwcDrawText( Display *dpy, Drawable d, GC gc, int x, int y, XwcTextItem *text_items, int nitems) { register XFontSet fs = NULL; register XwcTextItem *p = text_items; register int i = nitems; register int esc; /* ignore leading items with no fontset */ while (i && !p->font_set) { i--; p++; } for (; --i >= 0; p++) { if (p->font_set) fs = p->font_set; x += p->delta; esc = (*fs->methods->wc_draw_string) (dpy, d, fs, gc, x, y, p->chars, p->nchars); if (!esc) esc = fs->methods->wc_escapement (fs, p->chars, p->nchars); x += esc; } } void XwcDrawString( Display *dpy, Drawable d, XFontSet font_set, GC gc, int x, int y, _Xconst wchar_t *text, int text_len) { (void)(*font_set->methods->wc_draw_string) (dpy, d, font_set, gc, x, y, text, text_len); } void XwcDrawImageString( Display *dpy, Drawable d, XFontSet font_set, GC gc, int x, int y, _Xconst wchar_t *text, int text_len) { (*font_set->methods->wc_draw_image_string) (dpy, d, font_set, gc, x, y, text, text_len); } int XwcTextEscapement( XFontSet font_set, _Xconst wchar_t *text, int text_len) { return (*font_set->methods->wc_escapement) (font_set, text, text_len); } int XwcTextExtents( XFontSet font_set, _Xconst wchar_t *text, int text_len, XRectangle *overall_ink_extents, XRectangle *overall_logical_extents) { return (*font_set->methods->wc_extents) (font_set, text, text_len, overall_ink_extents, overall_logical_extents); } Status XwcTextPerCharExtents( XFontSet font_set, _Xconst wchar_t *text, int text_len, XRectangle *ink_extents_buffer, XRectangle *logical_extents_buffer, int buffer_size, int *num_chars, XRectangle *max_ink_extents, XRectangle *max_logical_extents) { return (*font_set->methods->wc_extents_per_char) (font_set, text, text_len, ink_extents_buffer, logical_extents_buffer, buffer_size, num_chars, max_ink_extents, max_logical_extents); } libX11-1.6.3/src/xlibi18n/lcCT.c000064401431060000012000001171771247741723500163120ustar00alancstaff00002660200006/* * Copyright 1992, 1993 by TOSHIBA Corp. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of TOSHIBA not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. TOSHIBA make no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * * Author: Katsuhisa Yano TOSHIBA Corp. * mopi@osa.ilab.toshiba.co.jp */ /* * Copyright 1995 by FUJITSU LIMITED * This is source code modified by FUJITSU LIMITED under the Joint * Development Agreement for the CDE/Motif PST. * * Modifier: Takanori Tateno FUJITSU LIMITED * */ /* * 2000 * Modifier: Ivan Pascal The XFree86 Project * Modifier: Bruno Haible The XFree86 Project */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "XlcPubI.h" #include #include /* ====================== Built-in Character Sets ====================== */ /* * Static representation of a character set that can be used in Compound Text. */ typedef struct _CTDataRec { const char name[19]; const char ct_sequence[5]; /* Compound Text encoding, ESC sequence */ } CTDataRec, *CTData; static const CTDataRec default_ct_data[] = { /* */ /* X11 registry name MIME name ISO-IR ESC sequence */ /* */ /* Registered character sets with one byte per character */ { "ISO8859-1:GL", /* US-ASCII 6 */ "\033(B" }, { "ISO8859-1:GR", /* ISO-8859-1 100 */ "\033-A" }, { "ISO8859-2:GR", /* ISO-8859-2 101 */ "\033-B" }, { "ISO8859-3:GR", /* ISO-8859-3 109 */ "\033-C" }, { "ISO8859-4:GR", /* ISO-8859-4 110 */ "\033-D" }, { "ISO8859-5:GR", /* ISO-8859-5 144 */ "\033-L" }, { "ISO8859-6:GR", /* ISO-8859-6 127 */ "\033-G" }, { "ISO8859-7:GR", /* ISO-8859-7 126 */ "\033-F" }, { "ISO8859-8:GR", /* ISO-8859-8 138 */ "\033-H" }, { "ISO8859-9:GR", /* ISO-8859-9 148 */ "\033-M" }, { "ISO8859-10:GR", /* ISO-8859-10 157 */ "\033-V" }, { "ISO8859-11:GR", /* ISO-8859-11 166 */ "\033-T" }, { "ISO8859-13:GR", /* ISO-8859-13 179 */ "\033-Y" }, { "ISO8859-14:GR", /* ISO-8859-14 199 */ "\033-_" }, { "ISO8859-15:GR", /* ISO-8859-15 203 */ "\033-b" }, { "ISO8859-16:GR", /* ISO-8859-16 226 */ "\033-f" }, { "JISX0201.1976-0:GL", /* ISO-646-JP 14 */ "\033(J" }, { "JISX0201.1976-0:GR", "\033)I" }, #if 0 { "TIS620-0:GR", /* TIS-620 166 */ "\033-T" }, #endif /* Registered character sets with two byte per character */ { "GB2312.1980-0:GL", /* GB_2312-80 58 */ "\033$(A" }, { "GB2312.1980-0:GR", /* GB_2312-80 58 */ "\033$)A" }, { "JISX0208.1983-0:GL", /* JIS_X0208-1983 87 */ "\033$(B" }, { "JISX0208.1983-0:GR", /* JIS_X0208-1983 87 */ "\033$)B" }, { "JISX0208.1990-0:GL", /* JIS_X0208-1990 168 */ "\033$(B" }, { "JISX0208.1990-0:GR", /* JIS_X0208-1990 168 */ "\033$)B" }, { "JISX0212.1990-0:GL", /* JIS_X0212-1990 159 */ "\033$(D" }, { "JISX0212.1990-0:GR", /* JIS_X0212-1990 159 */ "\033$)D" }, { "KSC5601.1987-0:GL", /* KS_C_5601-1987 149 */ "\033$(C" }, { "KSC5601.1987-0:GR", /* KS_C_5601-1987 149 */ "\033$)C" }, { "CNS11643.1986-1:GL", /* CNS 11643-1992 pl.1 171 */ "\033$(G" }, { "CNS11643.1986-1:GR", /* CNS 11643-1992 pl.1 171 */ "\033$)G" }, { "CNS11643.1986-2:GL", /* CNS 11643-1992 pl.2 172 */ "\033$(H" }, { "CNS11643.1986-2:GR", /* CNS 11643-1992 pl.2 172 */ "\033$)H" }, { "CNS11643.1992-3:GL", /* CNS 11643-1992 pl.3 183 */ "\033$(I" }, { "CNS11643.1992-3:GR", /* CNS 11643-1992 pl.3 183 */ "\033$)I" }, { "CNS11643.1992-4:GL", /* CNS 11643-1992 pl.4 184 */ "\033$(J" }, { "CNS11643.1992-4:GR", /* CNS 11643-1992 pl.4 184 */ "\033$)J" }, { "CNS11643.1992-5:GL", /* CNS 11643-1992 pl.5 185 */ "\033$(K" }, { "CNS11643.1992-5:GR", /* CNS 11643-1992 pl.5 185 */ "\033$)K" }, { "CNS11643.1992-6:GL", /* CNS 11643-1992 pl.6 186 */ "\033$(L" }, { "CNS11643.1992-6:GR", /* CNS 11643-1992 pl.6 186 */ "\033$)L" }, { "CNS11643.1992-7:GL", /* CNS 11643-1992 pl.7 187 */ "\033$(M" }, { "CNS11643.1992-7:GR", /* CNS 11643-1992 pl.7 187 */ "\033$)M" }, /* Registered encodings with a varying number of bytes per character */ { "ISO10646-1", /* UTF-8 196 */ "\033%G" }, /* Encodings without ISO-IR assigned escape sequence must be defined in XLC_LOCALE files, using "\033%/1" or "\033%/2". */ /* Backward compatibility with XFree86 3.x */ #if 1 { "ISO8859-14:GR", "\033%/1" }, { "ISO8859-15:GR", "\033%/1" }, #endif /* For use by utf8 -> ctext */ { "BIG5-0:GLGR", "\033%/2"}, { "BIG5HKSCS-0:GLGR", "\033%/2"}, { "GBK-0:GLGR", "\033%/2"}, /* used by Emacs, but not backed by ISO-IR */ { "BIG5-E0:GL", "\033$(0" }, { "BIG5-E0:GR", "\033$)0" }, { "BIG5-E1:GL", "\033$(1" }, { "BIG5-E1:GR", "\033$)1" }, }; /* We represent UTF-8 as an XlcGLGR charset, not in extended segments. */ #define UTF8_IN_EXTSEQ 0 /* ======================= Parsing ESC Sequences ======================= */ #define XctC0 0x0000 #define XctHT 0x0009 #define XctNL 0x000a #define XctESC 0x001b #define XctGL 0x0020 #define XctC1 0x0080 #define XctCSI 0x009b #define XctGR 0x00a0 #define XctSTX 0x0002 #define XctCntrlFunc 0x0023 #define XctMB 0x0024 #define XctOtherCoding 0x0025 #define XctGL94 0x0028 #define XctGR94 0x0029 #define XctGR96 0x002d #define XctNonStandard 0x002f #define XctIgnoreExt 0x0030 #define XctNotIgnoreExt 0x0031 #define XctLeftToRight 0x0031 #define XctRightToLeft 0x0032 #define XctDirection 0x005d #define XctDirectionEnd 0x005d #define XctGL94MB 0x2428 #define XctGR94MB 0x2429 #define XctExtSeg 0x252f #define XctReturn 0x2540 /* * Parses the header of a Compound Text segment, i.e. the charset designator. * The string starts at *text and has *length bytes. * Return value is one of: * 0 (no valid charset designator), * XctGL94, XctGR94, XctGR96, XctGL94MB, XctGR94MB, * XctLeftToRight, XctRightToLeft, XctDirectionEnd, * XctExtSeg, XctOtherCoding, XctReturn, XctIgnoreExt, XctNotIgnoreExt. * If the return value is not 0, *text is incremented and *length decremented, * to point past the charset designator. If the return value is one of * XctGL94, XctGR94, XctGR96, XctGL94MB, XctGR94MB, * XctExtSeg, XctOtherCoding, XctIgnoreExt, XctNotIgnoreExt, * *final_byte is set to the "final byte" of the charset designator. */ static unsigned int _XlcParseCT( const char **text, int *length, unsigned char *final_byte) { unsigned int ret = 0; unsigned char ch; const unsigned char *str = (const unsigned char *) *text; *final_byte = 0; if (*length < 1) return 0; switch (ch = *str++) { case XctESC: if (*length < 2) return 0; switch (ch = *str++) { case XctOtherCoding: /* % */ if (*length < 3) return 0; ch = *str++; if (ch == XctNonStandard) { /* / */ if (*length < 4) return 0; ret = XctExtSeg; ch = *str++; } else if (ch == '@') { ret = XctReturn; } else { ret = XctOtherCoding; } *final_byte = ch; break; case XctCntrlFunc: /* # */ if (*length < 4) return 0; *final_byte = *str++; switch (*str++) { case XctIgnoreExt: /* 0 */ ret = XctIgnoreExt; break; case XctNotIgnoreExt: /* 1 */ ret = XctNotIgnoreExt; break; default: ret = 0; break; } break; case XctMB: /* $ */ if (*length < 4) return 0; ch = *str++; switch (ch) { case XctGL94: /* ( */ ret = XctGL94MB; break; case XctGR94: /* ) */ ret = XctGR94MB; break; default: ret = 0; break; } *final_byte = *str++; break; case XctGL94: /* ( */ if (*length < 3) return 0; ret = XctGL94; *final_byte = *str++; break; case XctGR94: /* ) */ if (*length < 3) return 0; ret = XctGR94; *final_byte = *str++; break; case XctGR96: /* - */ if (*length < 3) return 0; ret = XctGR96; *final_byte = *str++; break; } break; case XctCSI: /* direction */ if (*length < 2) return 0; switch (*str++) { case XctLeftToRight: if (*length < 3) return 0; if (*str++ == XctDirection) ret = XctLeftToRight; break; case XctRightToLeft: if (*length < 3) return 0; if (*str++ == XctDirection) ret = XctRightToLeft; break; case XctDirectionEnd: ret = XctDirectionEnd; break; } break; } if (ret) { *length -= (const char *) str - *text; *text = (const char *) str; } return ret; } /* * Fills into a freshly created XlcCharSet the fields that can be inferred * from the ESC sequence. These are side, char_size, set_size. * Returns True if the charset can be used with Compound Text. * * Used by _XlcCreateDefaultCharSet. */ Bool _XlcParseCharSet( XlcCharSet charset) { unsigned int type; unsigned char final_byte; const char *ptr = charset->ct_sequence; int length; int char_size; if (*ptr == '\0') return False; length = strlen(ptr); type = _XlcParseCT(&ptr, &length, &final_byte); /* Check for validity and determine char_size. char_size = 0 means varying number of bytes per character. */ switch (type) { case XctGL94: case XctGR94: case XctGR96: char_size = 1; break; case XctGL94MB: case XctGR94MB: char_size = (final_byte < 0x60 ? 2 : final_byte < 0x70 ? 3 : 4); break; case XctExtSeg: char_size = final_byte - '0'; if (!(char_size >= 0 && char_size <= 4)) return False; break; case XctOtherCoding: char_size = 0; break; default: return False; } charset->char_size = char_size; /* Fill in other values. */ switch (type) { case XctGL94: case XctGL94MB: charset->side = XlcGL; charset->set_size = 94; break; case XctGR94: case XctGR94MB: charset->side = XlcGR; charset->set_size = 94; break; case XctGR96: charset->side = XlcGR; charset->set_size = 96; break; case XctExtSeg: case XctOtherCoding: charset->side = XlcGLGR; charset->set_size = 0; break; } return True; } /* =============== Management of the List of Character Sets =============== */ /* * Representation of a character set that can be used for Compound Text, * at run time. * Note: This information is not contained in the XlcCharSet, because * multiple ESC sequences may be used for the same XlcCharSet. */ typedef struct _CTInfoRec { XlcCharSet charset; const char *ct_sequence; /* Compound Text ESC sequence */ unsigned int type; unsigned char final_byte; /* If type == XctExtSeg: */ const char *ext_segment; /* extended segment name, then '\002' */ int ext_segment_len; /* length of above, including final '\002' */ struct _CTInfoRec *next; } CTInfoRec, *CTInfo; /* * List of character sets that can be used for Compound Text, * Includes all that are listed in default_ct_data, but more can be added * at runtime through _XlcAddCT. */ static CTInfo ct_list = NULL; static CTInfo ct_list_end = NULL; /* * Returns a Compound Text info record for an ESC sequence. * The first part of the ESC sequence has already been parsed into 'type' * and 'final_byte'. The remainder starts at 'text', at least 'text_len' * bytes (only used if type == XctExtSeg). */ static CTInfo _XlcGetCTInfo( unsigned int type, unsigned char final_byte, const char *text, int text_len) { CTInfo ct_info; for (ct_info = ct_list; ct_info; ct_info = ct_info->next) if (ct_info->type == type && ct_info->final_byte == final_byte && (type != XctExtSeg || (text_len >= ct_info->ext_segment_len && memcmp(text, ct_info->ext_segment, ct_info->ext_segment_len) == 0))) return ct_info; return (CTInfo) NULL; } /* Returns the Compound Text info for a given XlcCharSet. Returns NULL if none is found. */ static CTInfo _XlcGetCTInfoFromCharSet( XlcCharSet charset) { CTInfo ct_info; for (ct_info = ct_list; ct_info; ct_info = ct_info->next) if (ct_info->charset == charset) return ct_info; return (CTInfo) NULL; } /* Creates a new XlcCharSet, given its name (including side suffix) and Compound Text ESC sequence (normally at most 4 bytes), and makes it eligible for Compound Text processing. */ XlcCharSet _XlcAddCT( const char *name, const char *ct_sequence) { CTInfo ct_info, existing_info; XlcCharSet charset; const char *ct_ptr; int length; unsigned int type; unsigned char final_byte; charset = _XlcGetCharSet(name); if (charset != NULL) { /* Even if the charset already exists, it is OK to register a second Compound Text sequence for it. */ } else { /* Attempt to create the charset. */ charset = _XlcCreateDefaultCharSet(name, ct_sequence); if (charset == NULL) return (XlcCharSet) NULL; _XlcAddCharSet(charset); } /* Allocate a CTinfo record. */ length = strlen(ct_sequence); ct_info = Xmalloc(sizeof(CTInfoRec) + length+1); if (ct_info == NULL) return charset; ct_info->charset = charset; ct_info->ct_sequence = strcpy((char *) (ct_info + 1), ct_sequence); /* Parse the Compound Text sequence. */ ct_ptr = ct_sequence; type = _XlcParseCT(&ct_ptr, &length, &final_byte); ct_info->type = type; ct_info->final_byte = final_byte; switch (type) { case XctGL94: case XctGR94: case XctGR96: case XctGL94MB: case XctGR94MB: case XctOtherCoding: ct_info->ext_segment = NULL; ct_info->ext_segment_len = 0; break; case XctExtSeg: { /* By convention, the extended segment name is the encoding_name in lowercase. */ const char *q = charset->encoding_name; int n = strlen(q); char *p; /* Ensure ct_info->ext_segment_len <= 0x3fff - 6. */ if (n > 0x3fff - 6 - 1) { Xfree(ct_info); return charset; } p = Xmalloc(n+1); if (p == NULL) { Xfree(ct_info); return charset; } ct_info->ext_segment = p; ct_info->ext_segment_len = n+1; for ( ; n > 0; p++, q++, n--) *p = (*q >= 'A' && *q <= 'Z' ? *q - 'A' + 'a' : *q); *p = XctSTX; break; } default: Xfree(ct_info); return (XlcCharSet) NULL; } /* Insert it into the list, if not already present. */ existing_info = _XlcGetCTInfo(type, ct_info->final_byte, ct_info->ext_segment, ct_info->ext_segment_len); if (existing_info == NULL) { /* Insert it at the end. If there are duplicates CTinfo entries for the same XlcCharSet, we want the first (standard) one to override the second (user defined) one. */ ct_info->next = NULL; if (ct_list_end) ct_list_end->next = ct_info; else ct_list = ct_info; ct_list_end = ct_info; } else { if (existing_info->charset != charset /* We have a conflict, with one exception: JISX0208.1983-0 and JISX0208.1990-0 are the same for all practical purposes. */ && !(strncmp(existing_info->charset->name, "JISX0208", 8) == 0 && strncmp(charset->name, "JISX0208", 8) == 0)) { fprintf(stderr, "Xlib: charsets %s and %s have the same CT sequence\n", charset->name, existing_info->charset->name); if (strcmp(charset->ct_sequence, ct_sequence) == 0) charset->ct_sequence = ""; } Xfree(ct_info); } return charset; } /* ========== Converters String <--> CharSet <--> Compound Text ========== */ /* * Structure representing the parse state of a Compound Text string. */ typedef struct _StateRec { XlcCharSet charset; /* The charset of the current segment */ XlcCharSet GL_charset; /* The charset responsible for 0x00..0x7F */ XlcCharSet GR_charset; /* The charset responsible for 0x80..0xFF */ XlcCharSet Other_charset; /* != NULL if currently in an other segment */ int ext_seg_left; /* > 0 if currently in an extended segment */ } StateRec, *State; /* Subroutine for parsing an ESC sequence. */ typedef enum { resOK, /* Charset saved in 'state', sequence skipped */ resNotInList, /* Charset not found, sequence skipped */ resNotCTSeq /* EscSeq not recognized, pointers not changed */ } CheckResult; static CheckResult _XlcCheckCTSequence( State state, const char **ctext, int *ctext_len) { XlcCharSet charset; CTInfo ct_info; const char *tmp_ctext = *ctext; int tmp_ctext_len = *ctext_len; unsigned int type; unsigned char final_byte; int ext_seg_left = 0; /* Check for validity. */ type = _XlcParseCT(&tmp_ctext, &tmp_ctext_len, &final_byte); switch (type) { case XctGL94: case XctGR94: case XctGR96: case XctGL94MB: case XctGR94MB: case XctOtherCoding: *ctext = tmp_ctext; *ctext_len = tmp_ctext_len; break; case XctReturn: *ctext = tmp_ctext; *ctext_len = tmp_ctext_len; state->Other_charset = NULL; return resOK; case XctExtSeg: if (tmp_ctext_len > 2 && (tmp_ctext[0] & 0x80) && (tmp_ctext[0] & 0x80)) { unsigned int msb = tmp_ctext[0] & 0x7f; unsigned int lsb = tmp_ctext[1] & 0x7f; ext_seg_left = (msb << 7) + lsb; if (ext_seg_left <= tmp_ctext_len - 2) { *ctext = tmp_ctext + 2; *ctext_len = tmp_ctext_len - 2; break; } } return resNotCTSeq; default: return resNotCTSeq; } ct_info = _XlcGetCTInfo(type, final_byte, *ctext, ext_seg_left); if (ct_info) { charset = ct_info->charset; state->ext_seg_left = ext_seg_left; if (type == XctExtSeg) { state->charset = charset; /* Skip past the extended segment name and the separator. */ *ctext += ct_info->ext_segment_len; *ctext_len -= ct_info->ext_segment_len; state->ext_seg_left -= ct_info->ext_segment_len; } else if (type == XctOtherCoding) { state->Other_charset = charset; } else { if (charset->side == XlcGL) { state->GL_charset = charset; } else if (charset->side == XlcGR) { state->GR_charset = charset; } else { state->GL_charset = charset; state->GR_charset = charset; } } return resOK; } else { state->ext_seg_left = 0; if (type == XctExtSeg) { /* Skip the entire extended segment. */ *ctext += ext_seg_left; *ctext_len -= ext_seg_left; } return resNotInList; } } static void init_state( XlcConv conv) { State state = (State) conv->state; static XlcCharSet default_GL_charset = NULL; static XlcCharSet default_GR_charset = NULL; if (default_GL_charset == NULL) { default_GL_charset = _XlcGetCharSet("ISO8859-1:GL"); default_GR_charset = _XlcGetCharSet("ISO8859-1:GR"); } /* The initial state is ISO-8859-1 on both sides. */ state->GL_charset = state->charset = default_GL_charset; state->GR_charset = default_GR_charset; state->Other_charset = NULL; state->ext_seg_left = 0; } /* from XlcNCompoundText to XlcNCharSet */ static int cttocs( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { State state = (State) conv->state; XlcCharSet charset = NULL; const char *ctptr; char *bufptr; int ctext_len, buf_len; int unconv_num = 0; ctptr = (const char *) *from; bufptr = (char *) *to; ctext_len = *from_left; buf_len = *to_left; while (ctext_len > 0 && buf_len > 0) { if (state->ext_seg_left == 0) { /* Not in the middle of an extended segment; look at next byte. */ unsigned char ch = *ctptr; XlcCharSet ch_charset; if (ch == XctESC) { CheckResult ret = _XlcCheckCTSequence(state, &ctptr, &ctext_len); if (ret == resOK) /* state has been modified. */ continue; if (ret == resNotInList) { /* XXX Just continue with previous charset. */ unconv_num++; continue; } } else if (ch == XctCSI) { /* XXX Simply ignore the XctLeftToRight, XctRightToLeft, XctDirectionEnd sequences for the moment. */ unsigned char dummy; if (_XlcParseCT(&ctptr, &ctext_len, &dummy)) { unconv_num++; continue; } } /* Find the charset which is responsible for this byte. */ ch_charset = (state->Other_charset != NULL ? state->Other_charset : (ch & 0x80 ? state->GR_charset : state->GL_charset)); /* Set the charset of this run, or continue the current run, or stop the current run. */ if (charset) { if (charset != ch_charset) break; } else { state->charset = charset = ch_charset; } /* We don't want to split a character into multiple pieces. */ if (buf_len < 6) { if (charset->char_size > 0) { if (buf_len < charset->char_size) break; } else { /* char_size == 0 is tricky. The code here is good only for valid UTF-8 input. */ if (charset->ct_sequence[0] == XctESC && charset->ct_sequence[1] == XctOtherCoding && charset->ct_sequence[2] == 'G') { int char_size = (ch < 0xc0 ? 1 : ch < 0xe0 ? 2 : ch < 0xf0 ? 3 : ch < 0xf8 ? 4 : ch < 0xfc ? 5 : 6); if (buf_len < char_size) break; } } } *bufptr++ = *ctptr++; ctext_len--; buf_len--; } else { /* Copy as much as possible from the current extended segment to the buffer. */ int char_size; /* Set the charset of this run, or continue the current run, or stop the current run. */ if (charset) { if (charset != state->charset) break; } else { charset = state->charset; } char_size = charset->char_size; if (state->ext_seg_left <= buf_len || char_size > 0) { int n = (state->ext_seg_left <= buf_len ? state->ext_seg_left : (buf_len / char_size) * char_size); memcpy(bufptr, ctptr, n); ctptr += n; ctext_len -= n; bufptr += n; buf_len -= n; state->ext_seg_left -= n; } else { #if UTF8_IN_EXTSEQ /* char_size == 0 is tricky. The code here is good only for valid UTF-8 input. */ if (strcmp(charset->name, "ISO10646-1") == 0) { unsigned char ch = *ctptr; int char_size = (ch < 0xc0 ? 1 : ch < 0xe0 ? 2 : ch < 0xf0 ? 3 : ch < 0xf8 ? 4 : ch < 0xfc ? 5 : 6); int i; if (buf_len < char_size) break; /* A small loop is faster than calling memcpy. */ for (i = char_size; i > 0; i--) *bufptr++ = *ctptr++; ctext_len -= char_size; buf_len -= char_size; state->ext_seg_left -= char_size; } else #endif { /* Here ctext_len >= state->ext_seg_left > buf_len. We may be splitting a character into multiple pieces. Oh well. */ int n = buf_len; memcpy(bufptr, ctptr, n); ctptr += n; ctext_len -= n; bufptr += n; buf_len -= n; state->ext_seg_left -= n; } } } } /* 'charset' is the charset for the current run. In some cases, 'state->charset' contains the charset for the next run. Therefore, return 'charset'. 'charset' may still be NULL only if no output was produced. */ if (num_args > 0) *((XlcCharSet *) args[0]) = charset; *from_left -= ctptr - *((const char **) from); *from = (XPointer) ctptr; *to_left -= bufptr - *((char **) to); *to = (XPointer) bufptr; return unconv_num; } /* from XlcNCharSet to XlcNCompoundText */ static int cstoct( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { State state = (State) conv->state; XlcSide side; unsigned char min_ch = 0, max_ch = 0; int length, unconv_num; CTInfo ct_info; XlcCharSet charset; const char *csptr; char *ctptr; int csstr_len, ct_len; char *ext_segment_start; int char_size; /* One argument is required, of type XlcCharSet. */ if (num_args < 1) return -1; csptr = *((const char **) from); ctptr = *((char **) to); csstr_len = *from_left; ct_len = *to_left; charset = (XlcCharSet) args[0]; ct_info = _XlcGetCTInfoFromCharSet(charset); if (ct_info == NULL) return -1; side = charset->side; length = strlen(ct_info->ct_sequence); ext_segment_start = NULL; if (ct_info->type == XctOtherCoding) { /* Output the Escape sequence for switching to the charset, and reserve room now for the XctReturn sequence at the end. */ if (ct_len < length + 3) return -1; memcpy(ctptr, ct_info->ct_sequence, length); ctptr += length; ct_len -= length + 3; } else /* Test whether the charset is already active. */ if (((side == XlcGR || side == XlcGLGR) && charset != state->GR_charset) || ((side == XlcGL || side == XlcGLGR) && charset != state->GL_charset)) { /* Output the Escape sequence for switching to the charset. */ if (ct_info->type == XctExtSeg) { if (ct_len < length + 2 + ct_info->ext_segment_len) return -1; memcpy(ctptr, ct_info->ct_sequence, length); ctptr += length; ct_len -= length; ctptr += 2; ct_len -= 2; ext_segment_start = ctptr; /* The size of an extended segment must fit in 14 bits. */ if (ct_len > 0x3fff) ct_len = 0x3fff; memcpy(ctptr, ct_info->ext_segment, ct_info->ext_segment_len); ctptr += ct_info->ext_segment_len; ct_len -= ct_info->ext_segment_len; } else { if (ct_len < length) return -1; memcpy(ctptr, ct_info->ct_sequence, length); ctptr += length; ct_len -= length; } } /* If the charset has side GL or GR, prepare remapping the characters to the correct side. */ if (charset->set_size) { min_ch = 0x20; max_ch = 0x7f; if (charset->set_size == 94) { max_ch--; if (charset->char_size > 1 || side == XlcGR) min_ch++; } } /* Actually copy the contents. */ unconv_num = 0; char_size = charset->char_size; if (char_size == 1) { while (csstr_len > 0 && ct_len > 0) { if (charset->set_size) { /* The CompoundText specification says that the only control characters allowed are 0x09, 0x0a, 0x1b, 0x9b. Therefore here we eliminate other control characters. */ unsigned char ch = *((const unsigned char *) csptr) & 0x7f; if (!((ch >= min_ch && ch <= max_ch) || (side == XlcGL && (ch == 0x00 || ch == 0x09 || ch == 0x0a)) || ((side == XlcGL || side == XlcGR) && (ch == 0x1b)))) { csptr++; csstr_len--; unconv_num++; continue; } } if (side == XlcGL) *ctptr++ = *csptr++ & 0x7f; else if (side == XlcGR) *ctptr++ = *csptr++ | 0x80; else *ctptr++ = *csptr++; csstr_len--; ct_len--; } } else if (char_size > 1) { while (csstr_len >= char_size && ct_len >= char_size) { if (side == XlcGL) { int i; for (i = char_size; i > 0; i--) *ctptr++ = *csptr++ & 0x7f; } else if (side == XlcGR) { int i; for (i = char_size; i > 0; i--) *ctptr++ = *csptr++ | 0x80; } else { int i; for (i = char_size; i > 0; i--) *ctptr++ = *csptr++; } csstr_len -= char_size; ct_len -= char_size; } } else { /* char_size = 0. The code here is good only for valid UTF-8 input. */ if ((charset->ct_sequence[0] == XctESC && charset->ct_sequence[1] == XctOtherCoding && charset->ct_sequence[2] == 'G') #if UTF8_IN_EXTSEQ || strcmp(charset->name, "ISO10646-1") == 0 #endif ) { while (csstr_len > 0 && ct_len > 0) { unsigned char ch = * (const unsigned char *) csptr; int char_size = (ch < 0xc0 ? 1 : ch < 0xe0 ? 2 : ch < 0xf0 ? 3 : ch < 0xf8 ? 4 : ch < 0xfc ? 5 : 6); int i; if (!(csstr_len >= char_size && ct_len >= char_size)) break; for (i = char_size; i > 0; i--) *ctptr++ = *csptr++; csstr_len -= char_size; ct_len -= char_size; } } else { while (csstr_len > 0 && ct_len > 0) { *ctptr++ = *csptr++; csstr_len--; ct_len--; } } } if (ct_info->type == XctOtherCoding) { /* Terminate with an XctReturn sequence. */ ctptr[0] = XctESC; ctptr[1] = XctOtherCoding; ctptr[2] = '@'; ctptr += 3; } else if (ext_segment_start != NULL) { /* Backpatch the extended segment's length. */ int ext_segment_length = ctptr - ext_segment_start; *(ext_segment_start - 2) = (ext_segment_length >> 7) | 0x80; *(ext_segment_start - 1) = (ext_segment_length & 0x7f) | 0x80; } else { if (side == XlcGR || side == XlcGLGR) state->GR_charset = charset; if (side == XlcGL || side == XlcGLGR) state->GL_charset = charset; } *from_left -= csptr - *((const char **) from); *from = (XPointer) csptr; *to_left -= ctptr - *((char **) to); *to = (XPointer) ctptr; return 0; } /* from XlcNString to XlcNCharSet */ static int strtocs( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { State state = (State) conv->state; const char *src; char *dst; unsigned char side; int length; src = (const char *) *from; dst = (char *) *to; length = min(*from_left, *to_left); side = *((const unsigned char *) src) & 0x80; while (side == (*((const unsigned char *) src) & 0x80) && length-- > 0) *dst++ = *src++; *from_left -= src - (const char *) *from; *from = (XPointer) src; *to_left -= dst - (char *) *to; *to = (XPointer) dst; if (num_args > 0) *((XlcCharSet *)args[0]) = (side ? state->GR_charset : state->GL_charset); return 0; } /* from XlcNCharSet to XlcNString */ static int cstostr( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { State state = (State) conv->state; const char *csptr; char *string_ptr; int csstr_len, str_len; unsigned char ch; int unconv_num = 0; /* This converter can only convert from ISO8859-1:GL and ISO8859-1:GR. */ if (num_args < 1 || !((XlcCharSet) args[0] == state->GL_charset || (XlcCharSet) args[0] == state->GR_charset)) return -1; csptr = *((const char **) from); string_ptr = *((char **) to); csstr_len = *from_left; str_len = *to_left; while (csstr_len > 0 && str_len > 0) { ch = *((const unsigned char *) csptr++); csstr_len--; /* Citing ICCCM: "STRING as a type specifies the ISO Latin-1 character set plus the control characters TAB and NEWLINE." */ if ((ch < 0x20 && ch != 0x00 && ch != 0x09 && ch != 0x0a) || (ch >= 0x7f && ch < 0xa0)) { unconv_num++; continue; } *((unsigned char *) string_ptr++) = ch; str_len--; } *from_left -= csptr - *((const char **) from); *from = (XPointer) csptr; *to_left -= string_ptr - *((char **) to); *to = (XPointer) string_ptr; return unconv_num; } static XlcConv create_conv( XlcConvMethods methods) { XlcConv conv; conv = Xmalloc(sizeof(XlcConvRec) + sizeof(StateRec)); if (conv == NULL) return (XlcConv) NULL; conv->state = (XPointer) &conv[1]; conv->methods = methods; init_state(conv); return conv; } static void close_converter( XlcConv conv) { /* conv->state is allocated together with conv, free both at once. */ Xfree(conv); } static XlcConvMethodsRec cttocs_methods = { close_converter, cttocs, init_state }; static XlcConv open_cttocs( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(&cttocs_methods); } static XlcConvMethodsRec cstoct_methods = { close_converter, cstoct, init_state }; static XlcConv open_cstoct( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(&cstoct_methods); } static XlcConvMethodsRec strtocs_methods = { close_converter, strtocs, init_state }; static XlcConv open_strtocs( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(&strtocs_methods); } static XlcConvMethodsRec cstostr_methods = { close_converter, cstostr, init_state }; static XlcConv open_cstostr( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(&cstostr_methods); } /* =========================== Initialization =========================== */ Bool _XlcInitCTInfo(void) { if (ct_list == NULL) { const CTDataRec *ct_data; int num; XlcCharSet charset; /* Initialize ct_list. */ num = sizeof(default_ct_data) / sizeof(CTDataRec); for (ct_data = default_ct_data; num > 0; ct_data++, num--) { charset = _XlcAddCT(ct_data->name, ct_data->ct_sequence); if (charset == NULL) continue; if (strncmp(charset->ct_sequence, "\x1b\x25\x2f", 3) != 0) charset->source = CSsrcStd; else charset->source = CSsrcXLC; } /* Register CompoundText and CharSet converters. */ _XlcSetConverter((XLCd) NULL, XlcNCompoundText, (XLCd) NULL, XlcNCharSet, open_cttocs); _XlcSetConverter((XLCd) NULL, XlcNString, (XLCd) NULL, XlcNCharSet, open_strtocs); _XlcSetConverter((XLCd) NULL, XlcNCharSet, (XLCd) NULL, XlcNCompoundText, open_cstoct); _XlcSetConverter((XLCd) NULL, XlcNCharSet, (XLCd) NULL, XlcNString, open_cstostr); } return True; } strlen(ct_info->ct_sequence); ext_segment_start = NULL; if (ct_info->type == XctOtherCoding) { /* Output the Escape sequence for switching to the charset, and reserve room now for the XctReturn sequence at the end. */ if (ct_len < length + 3) return -1; memcpy(ctptr, ct_info->ct_sequence, length); ctptr += length; libX11-1.6.3/src/xlibi18n/XDefaultOMIF.c000064401431060000012000000721421247741723500176440ustar00alancstaff00002660200006/* Copyright 1985, 1986, 1987, 1991, 1998 The Open Group 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: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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 EVEN IF ADVISED IN ADVANCE OF THE POSSIBILITY OF SUCH DAMAGES. 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 The Open Group. X Window System is a trademark of The Open Group OSF/1, OSF/Motif and Motif are registered trademarks, and OSF, the OSF logo, LBX, X Window System, and Xinerama are trademarks of the Open Group. All other trademarks and registered trademarks mentioned herein are the property of their respective owners. No right, title or interest in or to any trademark, service mark, logo or trade name of Sun Microsystems, Inc. or its licensors is granted. */ /* * Copyright 2000 Oracle and/or its affiliates. All rights reserved. * * 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: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xlcint.h" #include "XlcPublic.h" #include #include #include #define MAXFONTS 100 #define XOM_GENERIC(om) (&((XOMGeneric) om)->gen) #define XOC_GENERIC(font_set) (&((XOCGeneric) font_set)->gen) #define DefineLocalBuf char local_buf[BUFSIZ] #define AllocLocalBuf(length) (length > BUFSIZ ? Xmalloc(length) : local_buf) #define FreeLocalBuf(ptr) if (ptr != local_buf) Xfree(ptr) typedef struct _FontDataRec { char *name; } FontDataRec, *FontData; typedef struct _OMDataRec { int font_data_count; FontData font_data; } OMDataRec, *OMData; typedef struct _XOMGenericPart { OMData data; } XOMGenericPart; typedef struct _XOMGenericRec { XOMMethods methods; XOMCoreRec core; XOMGenericPart gen; } XOMGenericRec, *XOMGeneric; typedef struct _FontSetRec { int id; int font_data_count; FontData font_data; char *font_name; XFontStruct *info; XFontStruct *font; } FontSetRec, *FontSet; typedef struct _XOCGenericPart { XlcConv wcs_to_cs; FontSet font_set; } XOCGenericPart; typedef struct _XOCGenericRec { XOCMethods methods; XOCCoreRec core; XOCGenericPart gen; } XOCGenericRec, *XOCGeneric; static Bool init_fontset( XOC oc) { XOCGenericPart *gen; FontSet font_set; OMData data; data = XOM_GENERIC(oc->core.om)->data; font_set = Xcalloc(1, sizeof(FontSetRec)); if (font_set == NULL) return False; gen = XOC_GENERIC(oc); gen->font_set = font_set; font_set->font_data_count = data->font_data_count; font_set->font_data = data->font_data; return True; } static char * get_prop_name( Display *dpy, XFontStruct *fs) { unsigned long fp; if (XGetFontProperty(fs, XA_FONT, &fp)) return XGetAtomName(dpy, fp); return (char *) NULL; } static FontData check_charset( FontSet font_set, char *font_name) { FontData font_data; char *last; int count; ssize_t length, name_len; name_len = strlen(font_name); last = font_name + name_len; count = font_set->font_data_count; font_data = font_set->font_data; for ( ; count-- > 0; font_data++) { length = strlen(font_data->name); if (length > name_len) return(NULL); if (_XlcCompareISOLatin1(last - length, font_data->name) == 0) return font_data; } return (FontData) NULL; } #if 0 /* Unused */ static int check_fontname( XOC oc, char *name) { Display *dpy = oc->core.om->core.display; XOCGenericPart *gen = XOC_GENERIC(oc); FontData data; FontSet font_set; XFontStruct *fs_list; char **fn_list, *fname, *prop_fname = NULL; int list_num, i; int list2_num; char **fn2_list = NULL; int found_num = 0; fn_list = XListFonts(dpy, name, MAXFONTS, &list_num); if (fn_list == NULL) return found_num; for (i = 0; i < list_num; i++) { fname = fn_list[i]; font_set = gen->font_set; if ((data = check_charset(font_set, fname)) == NULL) { if ((fn2_list = XListFontsWithInfo(dpy, name, MAXFONTS, &list2_num, &fs_list)) && (prop_fname = get_prop_name(dpy, fs_list)) && (data = check_charset(font_set, prop_fname))) fname = prop_fname; } if (data) { font_set->font_name = strdup(fname); if (font_set->font_name) { found_num++; } } if (fn2_list) { XFreeFontInfo(fn2_list, fs_list, list2_num); fn2_list = NULL; if (prop_fname) { Xfree(prop_fname); prop_fname = NULL; } } if (found_num == 1) break; } XFreeFontNames(fn_list); return found_num; } #endif static Bool load_font( XOC oc) { Display *dpy = oc->core.om->core.display; XOCGenericPart *gen = XOC_GENERIC(oc); FontSet font_set = gen->font_set; if (font_set->font_name == NULL) return False; if (font_set->font == NULL) { font_set->font = XLoadQueryFont(dpy, font_set->font_name); if (font_set->font == NULL) return False; } return True; } #if 0 static Bool load_font_info( XOC oc) { Display *dpy = oc->core.om->core.display; XOCGenericPart *gen = XOC_GENERIC(oc); FontSet font_set = gen->font_set; char **fn_list; int fn_num; if (font_set->font_name == NULL) return False; if (font_set->info == NULL) { fn_list = XListFontsWithInfo(dpy, font_set->font_name, 1, &fn_num, &font_set->info); if (font_set->info == NULL) return False; if (fn_num > 0) font_set->info->fid = XLoadFont(dpy, font_set->font_name); if (fn_list) XFreeFontNames(fn_list); } return True; } #endif static void set_fontset_extents( XOC oc) { XRectangle *ink = &oc->core.font_set_extents.max_ink_extent; XRectangle *logical = &oc->core.font_set_extents.max_logical_extent; XFontStruct **font_list, *font; XCharStruct overall; int logical_ascent, logical_descent; font_list = oc->core.font_info.font_struct_list; font = *font_list++; overall = font->max_bounds; overall.lbearing = font->min_bounds.lbearing; logical_ascent = font->ascent; logical_descent = font->descent; ink->x = overall.lbearing; ink->y = -(overall.ascent); ink->width = overall.rbearing - overall.lbearing; ink->height = overall.ascent + overall.descent; logical->x = 0; logical->y = -(logical_ascent); logical->width = overall.width; logical->height = logical_ascent + logical_descent; } static Bool init_core_part( XOC oc) { XOCGenericPart *gen = XOC_GENERIC(oc); FontSet font_set; XFontStruct **font_struct_list; char **font_name_list, *font_name_buf; int count, length; font_set = gen->font_set; count = length = 0; if (font_set->font_name != NULL) { length += strlen(font_set->font_name) + 1; count++; } if (count == 0) return False; font_struct_list = Xmalloc(sizeof(XFontStruct *)); if (font_struct_list == NULL) return False; font_name_list = Xmalloc(sizeof(char *)); if (font_name_list == NULL) goto err; font_name_buf = Xmalloc(length); if (font_name_buf == NULL) goto err; oc->core.font_info.num_font = 1; oc->core.font_info.font_name_list = font_name_list; oc->core.font_info.font_struct_list = font_struct_list; font_set = gen->font_set; if (font_set->font_name != NULL) { font_set->id = 1; if (font_set->font) *font_struct_list++ = font_set->font; else *font_struct_list++ = font_set->info; strcpy(font_name_buf, font_set->font_name); Xfree(font_set->font_name); *font_name_list++ = font_set->font_name = font_name_buf; font_name_buf += strlen(font_name_buf) + 1; } set_fontset_extents(oc); return True; err: Xfree(font_name_list); Xfree(font_struct_list); return False; } static char * get_font_name( XOC oc, char *pattern) { char **list, *name; int count; XFontStruct *fs; Display *dpy = oc->core.om->core.display; list = XListFonts(dpy, pattern, 1, &count); if (list != NULL) { name = strdup(*list); XFreeFontNames(list); } else { fs = XLoadQueryFont(dpy, pattern); if (fs == NULL) return NULL; name = get_prop_name(dpy, fs); XFreeFont(dpy, fs); } return name; } static int parse_fontname( XOC oc) { XOCGenericPart *gen = XOC_GENERIC(oc); FontSet font_set; FontData font_data; char *pattern, *last, buf[BUFSIZ]; int font_data_count, found_num = 0; ssize_t length; int count, num_fields; char *base_name, *font_name, **name_list, **cur_name_list; char *charset_p = NULL; Bool append_charset; /* append_charset flag should be set to True when the XLFD fontname doesn't contain a chaset part. */ name_list = _XParseBaseFontNameList(oc->core.base_name_list, &count); if (name_list == NULL) return -1; cur_name_list = name_list; while (count-- > 0) { pattern = *cur_name_list++; if (pattern == NULL || *pattern == '\0') continue; append_charset = False; if (strchr(pattern, '*') == NULL && (font_name = get_font_name(oc, pattern))) { font_set = gen->font_set; font_data = check_charset(font_set, font_name); if (font_data == NULL) { Display *dpy = oc->core.om->core.display; char **fn_list = NULL, *prop_fname = NULL; int list_num; XFontStruct *fs_list; if ((fn_list = XListFontsWithInfo(dpy, font_name, MAXFONTS, &list_num, &fs_list)) && (prop_fname = get_prop_name(dpy, fs_list)) && (font_data = check_charset(font_set, prop_fname))) { if (fn_list) { XFreeFontInfo(fn_list, fs_list, list_num); fn_list = NULL; } font_name = prop_fname; } } if (font_data == NULL) continue; font_set->font_name = strdup(font_name); Xfree(font_name); if (font_set->font_name == NULL) { goto err; } found_num++; goto found; } /* 1266793 Limit the length of the string copy to prevent stack corruption. strcpy(buf, pattern); */ strncpy(buf, pattern, BUFSIZ); buf[BUFSIZ-1] = '\0'; length = strlen(buf); last = buf + length - 1; for (num_fields = 0, base_name = buf; *base_name != '\0'; base_name++) if (*base_name == '-') num_fields++; if (strchr(pattern, '*') == NULL) { if (num_fields == 12) { append_charset = True; *++last = '-'; last++; } else continue; } else { if (num_fields == 13 || num_fields == 14) { /* * There are 14 fields in an XLFD name -- make certain the * charset (& encoding) is placed in the correct field. */ append_charset = True; last = strrchr (buf, '-'); if (num_fields == 14) { *last = '\0'; last = strrchr (buf, '-'); } last++; } else if (*last == '*') { append_charset = True; if (length > 3 && *(last-3) == '-' && *(last-2) == '*' && *(last-1) == '-') { last -= 2; } *++last = '-'; last++; } else { last = strrchr (buf, '-'); charset_p = last; charset_p = strrchr (buf, '-'); while (*(--charset_p) != '-'); charset_p++; } } font_set = gen->font_set; font_data = font_set->font_data; font_data_count = font_set->font_data_count; for ( ; font_data_count-- > 0; font_data++) { if (append_charset) { /* 1266793 Limit the length of the string copy to prevent stack corruption. strcpy(last, font_data->name); */ strncpy(last, font_data->name, BUFSIZ - length); buf[BUFSIZ-1] = '\0'; } else { if (_XlcCompareISOLatin1(charset_p, font_data->name)) { continue; } } if ((font_set->font_name = get_font_name(oc, buf))) break; } if (font_set->font_name != NULL) { found_num++; goto found; } } found: base_name = strdup(oc->core.base_name_list); if (base_name == NULL) goto err; oc->core.base_name_list = base_name; XFreeStringList(name_list); return found_num; err: XFreeStringList(name_list); return -1; } static Bool set_missing_list( XOC oc) { XOCGenericPart *gen = XOC_GENERIC(oc); FontSet font_set; char **charset_list, *charset_buf; int count, length; font_set = gen->font_set; count = length = 0; if (!font_set->info && !font_set->font) { length += strlen(font_set->font_data->name) + 1; count++; } if (count == 0) return True; charset_list = Xmalloc(sizeof(char *)); if (charset_list == NULL) return False; charset_buf = Xmalloc(length); if (charset_buf == NULL) { Xfree(charset_list); return False; } oc->core.missing_list.charset_list = charset_list; font_set = gen->font_set; if (!font_set->info && !font_set->font) { strcpy(charset_buf, font_set->font_data->name); *charset_list++ = charset_buf; charset_buf += strlen(charset_buf) + 1; } return True; } static Bool create_fontset( XOC oc) { int found_num; if (init_fontset(oc) == False) return False; found_num = parse_fontname(oc); if (found_num <= 0) { if (found_num == 0) set_missing_list(oc); return False; } if (load_font(oc) == False) return False; if (init_core_part(oc) == False) return False; if (set_missing_list(oc) == False) return False; return True; } static void destroy_oc( XOC oc) { Display *dpy = oc->core.om->core.display; XOCGenericPart *gen = XOC_GENERIC(oc); XFontStruct **font_list, *font; Xfree(gen->font_set); Xfree(oc->core.base_name_list); XFreeStringList(oc->core.font_info.font_name_list); if ((font_list = oc->core.font_info.font_struct_list)) { if ((font = *font_list)) { if (font->fid) XFreeFont(dpy, font); else XFreeFontInfo(NULL, font, 1); } Xfree(oc->core.font_info.font_struct_list); } XFreeStringList(oc->core.missing_list.charset_list); #ifdef notdef Xfree(oc->core.res_name); Xfree(oc->core.res_class); #endif Xfree(oc); } static char * set_oc_values( XOC oc, XlcArgList args, int num_args) { if (oc->core.resources == NULL) return NULL; return _XlcSetValues((XPointer) oc, oc->core.resources, oc->core.num_resources, args, num_args, XlcSetMask); } static char * get_oc_values( XOC oc, XlcArgList args, int num_args) { if (oc->core.resources == NULL) return NULL; return _XlcGetValues((XPointer) oc, oc->core.resources, oc->core.num_resources, args, num_args, XlcGetMask); } static Bool wcs_to_mbs( XOC oc, char *to, _Xconst wchar_t *from, int length) { XlcConv conv = XOC_GENERIC(oc)->wcs_to_cs; XLCd lcd; int ret, to_left = length; if (conv == NULL) { lcd = oc->core.om->core.lcd; conv = _XlcOpenConverter(lcd, XlcNWideChar, lcd, XlcNMultiByte); if (conv == NULL) return False; XOC_GENERIC(oc)->wcs_to_cs = conv; } else _XlcResetConverter(conv); ret = _XlcConvert(conv, (XPointer *) &from, &length, (XPointer *) &to, &to_left, NULL, 0); if (ret != 0 || length > 0) return False; return True; } static int _XmbDefaultTextEscapement(XOC oc, _Xconst char *text, int length) { return XTextWidth(*oc->core.font_info.font_struct_list, text, length); } static int _XwcDefaultTextEscapement(XOC oc, _Xconst wchar_t *text, int length) { DefineLocalBuf; char *buf = AllocLocalBuf(length); int ret = 0; if (buf == NULL) return 0; if (wcs_to_mbs(oc, buf, text, length) == False) goto err; ret = _XmbDefaultTextEscapement(oc, buf, length); err: FreeLocalBuf(buf); return ret; } static int _XmbDefaultTextExtents(XOC oc, _Xconst char *text, int length, XRectangle *overall_ink, XRectangle *overall_logical) { int direction, logical_ascent, logical_descent; XCharStruct overall; XTextExtents(*oc->core.font_info.font_struct_list, text, length, &direction, &logical_ascent, &logical_descent, &overall); if (overall_ink) { overall_ink->x = overall.lbearing; overall_ink->y = -(overall.ascent); overall_ink->width = overall.rbearing - overall.lbearing; overall_ink->height = overall.ascent + overall.descent; } if (overall_logical) { overall_logical->x = 0; overall_logical->y = -(logical_ascent); overall_logical->width = overall.width; overall_logical->height = logical_ascent + logical_descent; } return overall.width; } static int _XwcDefaultTextExtents(XOC oc, _Xconst wchar_t *text, int length, XRectangle *overall_ink, XRectangle *overall_logical) { DefineLocalBuf; char *buf = AllocLocalBuf(length); int ret = 0; if (buf == NULL) return 0; if (wcs_to_mbs(oc, buf, text, length) == False) goto err; ret = _XmbDefaultTextExtents(oc, buf, length, overall_ink, overall_logical); err: FreeLocalBuf(buf); return ret; } static Status _XmbDefaultTextPerCharExtents(XOC oc, _Xconst char *text, int length, XRectangle *ink_buf, XRectangle *logical_buf, int buf_size, int *num_chars, XRectangle *overall_ink, XRectangle *overall_logical) { XFontStruct *font = *oc->core.font_info.font_struct_list; XCharStruct *def, *cs, overall; Bool first = True; if (buf_size < length) return 0; bzero((char *) &overall, sizeof(XCharStruct)); *num_chars = 0; CI_GET_DEFAULT_INFO_1D(font, def) while (length-- > 0) { CI_GET_CHAR_INFO_1D(font, *text, def, cs) text++; if (cs == NULL) continue; ink_buf->x = overall.width + cs->lbearing; ink_buf->y = -(cs->ascent); ink_buf->width = cs->rbearing - cs->lbearing; ink_buf->height = cs->ascent + cs->descent; ink_buf++; logical_buf->x = overall.width; logical_buf->y = -(font->ascent); logical_buf->width = cs->width; logical_buf->height = font->ascent + font->descent; logical_buf++; if (first) { overall = *cs; first = False; } else { overall.ascent = max(overall.ascent, cs->ascent); overall.descent = max(overall.descent, cs->descent); overall.lbearing = min(overall.lbearing, overall.width + cs->lbearing); overall.rbearing = max(overall.rbearing, overall.width + cs->rbearing); overall.width += cs->width; } (*num_chars)++; } if (overall_ink) { overall_ink->x = overall.lbearing; overall_ink->y = -(overall.ascent); overall_ink->width = overall.rbearing - overall.lbearing; overall_ink->height = overall.ascent + overall.descent; } if (overall_logical) { overall_logical->x = 0; overall_logical->y = -(font->ascent); overall_logical->width = overall.width; overall_logical->height = font->ascent + font->descent; } return 1; } static Status _XwcDefaultTextPerCharExtents(XOC oc, _Xconst wchar_t *text, int length, XRectangle *ink_buf, XRectangle *logical_buf, int buf_size, int *num_chars, XRectangle *overall_ink, XRectangle *overall_logical) { DefineLocalBuf; char *buf = AllocLocalBuf(length); Status ret = 0; if (buf == NULL) return 0; if (wcs_to_mbs(oc, buf, text, length) == False) goto err; ret = _XmbDefaultTextPerCharExtents(oc, buf, length, ink_buf, logical_buf, buf_size, num_chars, overall_ink, overall_logical); err: FreeLocalBuf(buf); return ret; } static int _XmbDefaultDrawString(Display *dpy, Drawable d, XOC oc, GC gc, int x, int y, _Xconst char *text, int length) { XFontStruct *font = *oc->core.font_info.font_struct_list; XSetFont(dpy, gc, font->fid); XDrawString(dpy, d, gc, x, y, text, length); return XTextWidth(font, text, length); } static int _XwcDefaultDrawString(Display *dpy, Drawable d, XOC oc, GC gc, int x, int y, _Xconst wchar_t *text, int length) { DefineLocalBuf; char *buf = AllocLocalBuf(length); int ret = 0; if (buf == NULL) return 0; if (wcs_to_mbs(oc, buf, text, length) == False) goto err; ret = _XmbDefaultDrawString(dpy, d, oc, gc, x, y, buf, length); err: FreeLocalBuf(buf); return ret; } static void _XmbDefaultDrawImageString(Display *dpy, Drawable d, XOC oc, GC gc, int x, int y, _Xconst char *text, int length) { XSetFont(dpy, gc, (*oc->core.font_info.font_struct_list)->fid); XDrawImageString(dpy, d, gc, x, y, text, length); } static void _XwcDefaultDrawImageString(Display *dpy, Drawable d, XOC oc, GC gc, int x, int y, _Xconst wchar_t *text, int length) { DefineLocalBuf; char *buf = AllocLocalBuf(length); if (buf == NULL) return; if (wcs_to_mbs(oc, buf, text, length) == False) goto err; _XmbDefaultDrawImageString(dpy, d, oc, gc, x, y, buf, length); err: FreeLocalBuf(buf); } static _Xconst XOCMethodsRec oc_default_methods = { destroy_oc, set_oc_values, get_oc_values, _XmbDefaultTextEscapement, _XmbDefaultTextExtents, _XmbDefaultTextPerCharExtents, _XmbDefaultDrawString, _XmbDefaultDrawImageString, _XwcDefaultTextEscapement, _XwcDefaultTextExtents, _XwcDefaultTextPerCharExtents, _XwcDefaultDrawString, _XwcDefaultDrawImageString }; static XlcResource oc_resources[] = { { XNBaseFontName, NULLQUARK, sizeof(char *), XOffsetOf(XOCRec, core.base_name_list), XlcCreateMask | XlcGetMask }, { XNOMAutomatic, NULLQUARK, sizeof(Bool), XOffsetOf(XOCRec, core.om_automatic), XlcGetMask }, { XNMissingCharSet, NULLQUARK, sizeof(XOMCharSetList), XOffsetOf(XOCRec, core.missing_list), XlcGetMask }, { XNDefaultString, NULLQUARK, sizeof(char *), XOffsetOf(XOCRec, core.default_string), XlcGetMask }, { XNOrientation, NULLQUARK, sizeof(XOrientation), XOffsetOf(XOCRec, core.orientation), XlcSetMask | XlcGetMask }, { XNResourceName, NULLQUARK, sizeof(char *), XOffsetOf(XOCRec, core.res_name), XlcSetMask | XlcGetMask }, { XNResourceClass, NULLQUARK, sizeof(char *), XOffsetOf(XOCRec, core.res_class), XlcSetMask | XlcGetMask }, { XNFontInfo, NULLQUARK, sizeof(XOMFontInfo), XOffsetOf(XOCRec, core.font_info), XlcGetMask } }; static XOC create_oc( XOM om, XlcArgList args, int num_args) { XOC oc; oc = Xcalloc(1, sizeof(XOCGenericRec)); if (oc == NULL) return (XOC) NULL; oc->core.om = om; if (oc_resources[0].xrm_name == NULLQUARK) _XlcCompileResourceList(oc_resources, XlcNumber(oc_resources)); if (_XlcSetValues((XPointer) oc, oc_resources, XlcNumber(oc_resources), args, num_args, XlcCreateMask | XlcDefaultMask)) goto err; if (oc->core.base_name_list == NULL) goto err; oc->core.resources = oc_resources; oc->core.num_resources = XlcNumber(oc_resources); if (create_fontset(oc) == False) goto err; oc->methods = (XOCMethods)&oc_default_methods; return oc; err: destroy_oc(oc); return (XOC) NULL; } static Status close_om( XOM om) { XOMGenericPart *gen = XOM_GENERIC(om); OMData data; FontData font_data; int count; if ((data = gen->data)) { if (data->font_data) { for (font_data = data->font_data, count = data->font_data_count; count-- > 0 ; font_data++) { Xfree(font_data->name); } Xfree(data->font_data); } Xfree(gen->data); } Xfree(om->core.res_name); Xfree(om->core.res_class); if (om->core.required_charset.charset_list) XFreeStringList(om->core.required_charset.charset_list); else Xfree((char*)om->core.required_charset.charset_list); Xfree(om->core.orientation_list.orientation); Xfree(om); return 1; } static char * set_om_values( XOM om, XlcArgList args, int num_args) { if (om->core.resources == NULL) return NULL; return _XlcSetValues((XPointer) om, om->core.resources, om->core.num_resources, args, num_args, XlcSetMask); } static char * get_om_values( XOM om, XlcArgList args, int num_args) { if (om->core.resources == NULL) return NULL; return _XlcGetValues((XPointer) om, om->core.resources, om->core.num_resources, args, num_args, XlcGetMask); } static _Xconst XOMMethodsRec methods = { close_om, set_om_values, get_om_values, create_oc }; static XlcResource om_resources[] = { { XNRequiredCharSet, NULLQUARK, sizeof(XOMCharSetList), XOffsetOf(XOMRec, core.required_charset), XlcGetMask }, { XNQueryOrientation, NULLQUARK, sizeof(XOMOrientation), XOffsetOf(XOMRec, core.orientation_list), XlcGetMask }, { XNDirectionalDependentDrawing, NULLQUARK, sizeof(Bool), XOffsetOf(XOMRec, core.directional_dependent), XlcGetMask }, { XNContextualDrawing, NULLQUARK, sizeof(Bool), XOffsetOf(XOMRec, core.contextual_drawing), XlcGetMask } }; static OMData add_data( XOM om) { XOMGenericPart *gen = XOM_GENERIC(om); OMData new; new = Xcalloc(1, sizeof(OMDataRec)); if (new == NULL) return NULL; gen->data = new; return new; } static _Xconst char *supported_charset_list[] = { "ISO8859-1", /* fix for bug4332979 */ "adobe-fontspecific", /* fix for bug4237353: "JISX0201.1976-0" entry should be removed from supported_charset_list because it is not a supported_charset for C locale "JISX0201.1976-0", */ "SUNOLCURSOR-1", "SUNOLGLYPH-1" }; static Bool init_om( XOM om) { XOMGenericPart *gen = XOM_GENERIC(om); OMData data; FontData font_data; char **required_list; XOrientation *orientation; char *bufptr; int i, count, length = 0; count = XlcNumber(supported_charset_list); data = add_data(om); if (data == NULL) return False; font_data = Xcalloc(count, sizeof(FontDataRec)); if (font_data == NULL) return False; data->font_data = font_data; data->font_data_count = count; for (i = 0; i < count; i++, font_data++) { font_data->name = strdup(supported_charset_list[i]); if (font_data->name == NULL) return False; } length += strlen(data->font_data->name) + 1; /* required charset list */ required_list = Xmalloc(sizeof(char *)); if (required_list == NULL) return False; bufptr = Xmalloc(length); if (bufptr == NULL) { Xfree(required_list); return False; } om->core.required_charset.charset_list = required_list; om->core.required_charset.charset_count = 1; /* always 1 */ data = gen->data; strcpy(bufptr, data->font_data->name); *required_list++ = bufptr; bufptr += strlen(bufptr) + 1; /* orientation list */ orientation = Xmalloc(sizeof(XOrientation)); if (orientation == NULL) return False; *orientation = XOMOrientation_LTR_TTB; om->core.orientation_list.orientation = orientation; om->core.orientation_list.num_orientation = 1; /* directional dependent drawing */ om->core.directional_dependent = False; /* contexual drawing */ om->core.contextual_drawing = False; /* context dependent */ om->core.context_dependent = False; return True; } XOM _XDefaultOpenOM(XLCd lcd, Display *dpy, XrmDatabase rdb, _Xconst char *res_name, _Xconst char *res_class) { XOM om; om = Xcalloc(1, sizeof(XOMGenericRec)); if (om == NULL) return (XOM) NULL; om->methods = (XOMMethods)&methods; om->core.lcd = lcd; om->core.display = dpy; om->core.rdb = rdb; if (res_name) { om->core.res_name = strdup(res_name); if (om->core.res_name == NULL) goto err; } if (res_class) { om->core.res_class = strdup(res_class); if (om->core.res_class == NULL) goto err; } if (om_resources[0].xrm_name == NULLQUARK) _XlcCompileResourceList(om_resources, XlcNumber(om_resources)); om->core.resources = om_resources; om->core.num_resources = XlcNumber(om_resources); if (init_om(om) == False) goto err; return om; err: close_om(om); return (XOM) NULL; } earing - cs->lbearing; ink_buf->height = cs->ascent + cs->descent; ink_buf++; logical_buf->x = overall.width; logical_buf->y = -(font->ascent); logical_buf->width = cs->width; logical_buf->height = font->ascent + font->descent; logical_buf++; if (first) { overall = *cs; first = False; } else { overall.ascent = max(overall.ascent, cs->ascent); overall.descent = max(overall.descent,libX11-1.6.3/src/xlibi18n/lcTxtPr.c000064401431060000012000000134001247741723500170450ustar00alancstaff00002660200006/* * Copyright 1992, 1993 by TOSHIBA Corp. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of TOSHIBA not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. TOSHIBA make no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * * Author: Katsuhisa Yano TOSHIBA Corp. * mopi@osa.ilab.toshiba.co.jp */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "XlcPubI.h" #include #include #include static int get_buf_size( Bool is_wide_char, XPointer list, int count) { int length = 0; char **mb_list; wchar_t **wc_list; if (list == NULL) return 0; if (is_wide_char) { wc_list = (wchar_t **) list; for ( ; count-- > 0; wc_list++) { if (*wc_list) length += _Xwcslen(*wc_list) + 1; } length *= 5; /* XXX */ } else { mb_list = (char **) list; for ( ; count-- > 0; mb_list++) { if (*mb_list) length += strlen(*mb_list) + 1; } length *= 3; /* XXX */ } length = (length / BUFSIZ + 1) * BUFSIZ; /* XXX */ return length; } static int _XTextListToTextProperty( XLCd lcd, Display *dpy, const char *from_type, XPointer list, int count, XICCEncodingStyle style, XTextProperty *text_prop) { Atom encoding; XlcConv conv; const char *to_type; char **mb_list = NULL; wchar_t **wc_list = NULL; XPointer from; char *to, *buf, *value; int from_left, to_left, buf_len, nitems, unconv_num = 0, ret, i; Bool is_wide_char = False; if (strcmp(XlcNWideChar, from_type) == 0) is_wide_char = True; buf_len = get_buf_size(is_wide_char, list, count); if ((buf = Xmalloc(buf_len)) == NULL) return XNoMemory; switch (style) { case XStringStyle: case XStdICCTextStyle: encoding = XA_STRING; to_type = XlcNString; break; case XUTF8StringStyle: encoding = XInternAtom(dpy, "UTF8_STRING", False); to_type = XlcNUtf8String; break; case XCompoundTextStyle: encoding = XInternAtom(dpy, "COMPOUND_TEXT", False); to_type = XlcNCompoundText; break; case XTextStyle: encoding = XInternAtom(dpy, XLC_PUBLIC(lcd, encoding_name), False); to_type = XlcNMultiByte; if (is_wide_char == False) { nitems = 0; mb_list = (char **) list; to = buf; for (i = 0; i < count && buf_len > 0; i++) { if (*mb_list) strcpy(to, *mb_list); else *to = '\0'; from_left = (*mb_list ? strlen(*mb_list) : 0) + 1; nitems += from_left; to += from_left; mb_list++; } unconv_num = 0; goto done; } break; default: Xfree(buf); return XConverterNotFound; } if (count < 1) { nitems = 0; goto done; } retry: conv = _XlcOpenConverter(lcd, from_type, lcd, to_type); if (conv == NULL) { Xfree(buf); return XConverterNotFound; } if (is_wide_char) wc_list = (wchar_t **) list; else mb_list = (char **) list; to = buf; to_left = buf_len; unconv_num = 0; for (i = 1; to_left > 0; i++) { if (is_wide_char) { from = (XPointer) *wc_list; from_left = _Xwcslen(*wc_list); wc_list++; } else { from = (XPointer) *mb_list; from_left = (*mb_list ? strlen(*mb_list) : 0); mb_list++; } ret = _XlcConvert(conv, &from, &from_left, (XPointer *) &to, &to_left, NULL, 0); if (ret < 0) continue; if (ret > 0 && style == XStdICCTextStyle && encoding == XA_STRING) { _XlcCloseConverter(conv); encoding = XInternAtom(dpy, "COMPOUND_TEXT", False); to_type = XlcNCompoundText; goto retry; } unconv_num += ret; *to++ = '\0'; to_left--; if (i >= count) break; _XlcResetConverter(conv); } _XlcCloseConverter(conv); nitems = to - buf; done: if (nitems <= 0) nitems = 1; value = Xmalloc(nitems); if (value == NULL) { Xfree(buf); return XNoMemory; } if (nitems == 1) *value = 0; else memcpy(value, buf, nitems); nitems--; Xfree(buf); text_prop->value = (unsigned char *) value; text_prop->encoding = encoding; text_prop->format = 8; text_prop->nitems = nitems; return unconv_num; } int _XmbTextListToTextProperty( XLCd lcd, Display *dpy, char **list, int count, XICCEncodingStyle style, XTextProperty *text_prop) { return _XTextListToTextProperty(lcd, dpy, XlcNMultiByte, (XPointer) list, count, style, text_prop); } int _XwcTextListToTextProperty( XLCd lcd, Display *dpy, wchar_t **list, int count, XICCEncodingStyle style, XTextProperty *text_prop) { return _XTextListToTextProperty(lcd, dpy, XlcNWideChar, (XPointer) list, count, style, text_prop); } int _Xutf8TextListToTextProperty( XLCd lcd, Display *dpy, char **list, int count, XICCEncodingStyle style, XTextProperty *text_prop) { return _XTextListToTextProperty(lcd, dpy, XlcNUtf8String, (XPointer) list, count, style, text_prop); } list++) { if (*mb_list) length += strlen(*mb_list) + 1; } length *= 3; /* XXX */ } length = (length / BUFSIZ + 1) * BUFSIZ; /* XXX */ return length; } static int _XTextListToTextProperty( XLCd lcd, Display *dpy, const chalibX11-1.6.3/src/xlibi18n/lcCharSet.c000064401431060000012000000150561247741723500173260ustar00alancstaff00002660200006/* * Copyright 1992, 1993 by TOSHIBA Corp. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of TOSHIBA not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. TOSHIBA make no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * * Author: Katsuhisa Yano TOSHIBA Corp. * mopi@osa.ilab.toshiba.co.jp */ #ifdef HAVE_CONFIG_H #include #endif #include #include "Xlibint.h" #include "XlcPublic.h" #include "XlcPubI.h" /* The list of all known XlcCharSets. They are identified by their name. */ typedef struct _XlcCharSetListRec { XlcCharSet charset; struct _XlcCharSetListRec *next; } XlcCharSetListRec, *XlcCharSetList; static XlcCharSetList charset_list = NULL; /* Returns the charset with the given name (including side suffix). Returns NULL if not found. */ XlcCharSet _XlcGetCharSet( const char *name) { XlcCharSetList list; XrmQuark xrm_name; xrm_name = XrmStringToQuark(name); for (list = charset_list; list; list = list->next) { if (xrm_name == list->charset->xrm_name) return (XlcCharSet) list->charset; } return (XlcCharSet) NULL; } /* Returns the charset with the given encoding (no side suffix) and responsible for at least the given side (XlcGL or XlcGR). Returns NULL if not found. */ XlcCharSet _XlcGetCharSetWithSide( const char *encoding_name, XlcSide side) { XlcCharSetList list; XrmQuark xrm_encoding_name; xrm_encoding_name = XrmStringToQuark(encoding_name); for (list = charset_list; list; list = list->next) { if (list->charset->xrm_encoding_name == xrm_encoding_name && (list->charset->side == XlcGLGR || list->charset->side == side)) return (XlcCharSet) list->charset; } return (XlcCharSet) NULL; } /* Registers an XlcCharSet in the list of character sets. Returns True if successful. */ Bool _XlcAddCharSet( XlcCharSet charset) { XlcCharSetList list; if (_XlcGetCharSet(charset->name)) return False; list = Xmalloc(sizeof(XlcCharSetListRec)); if (list == NULL) return False; list->charset = charset; list->next = charset_list; charset_list = list; return True; } /* List of resources for XlcCharSet. */ static XlcResource resources[] = { { XlcNName, NULLQUARK, sizeof(char *), XOffsetOf(XlcCharSetRec, name), XlcGetMask }, { XlcNEncodingName, NULLQUARK, sizeof(char *), XOffsetOf(XlcCharSetRec, encoding_name), XlcGetMask }, { XlcNSide, NULLQUARK, sizeof(XlcSide), XOffsetOf(XlcCharSetRec, side), XlcGetMask }, { XlcNCharSize, NULLQUARK, sizeof(int), XOffsetOf(XlcCharSetRec, char_size), XlcGetMask }, { XlcNSetSize, NULLQUARK, sizeof(int), XOffsetOf(XlcCharSetRec, set_size), XlcGetMask }, { XlcNControlSequence, NULLQUARK, sizeof(char *), XOffsetOf(XlcCharSetRec, ct_sequence), XlcGetMask } }; /* Retrieves a number of attributes of an XlcCharSet. Return NULL if successful, otherwise the name of the first argument specifiying a nonexistent attribute. */ static char * get_values( XlcCharSet charset, XlcArgList args, int num_args) { if (resources[0].xrm_name == NULLQUARK) _XlcCompileResourceList(resources, XlcNumber(resources)); return _XlcGetValues((XPointer) charset, resources, XlcNumber(resources), args, num_args, XlcGetMask); } /* Retrieves a number of attributes of an XlcCharSet. Return NULL if successful, otherwise the name of the first argument specifiying a nonexistent attribute. */ char * _XlcGetCSValues(XlcCharSet charset, ...) { va_list var; XlcArgList args; char *ret; int num_args; va_start(var, charset); _XlcCountVaList(var, &num_args); va_end(var); va_start(var, charset); _XlcVaToArgList(var, num_args, &args); va_end(var); if (args == (XlcArgList) NULL) return (char *) NULL; ret = get_values(charset, args, num_args); Xfree(args); return ret; } /* Creates a new XlcCharSet, given its name (including side suffix) and Compound Text ESC sequence (normally at most 4 bytes). */ XlcCharSet _XlcCreateDefaultCharSet( const char *name, const char *ct_sequence) { XlcCharSet charset; int name_len, ct_sequence_len; const char *colon; char *tmp; charset = Xcalloc(1, sizeof(XlcCharSetRec)); if (charset == NULL) return (XlcCharSet) NULL; name_len = strlen(name); ct_sequence_len = strlen(ct_sequence); /* Fill in name and xrm_name. */ tmp = Xmalloc(name_len + 1 + ct_sequence_len + 1); if (tmp == NULL) { Xfree(charset); return (XlcCharSet) NULL; } memcpy(tmp, name, name_len+1); charset->name = tmp; charset->xrm_name = XrmStringToQuark(charset->name); /* Fill in encoding_name and xrm_encoding_name. */ if ((colon = strchr(charset->name, ':')) != NULL) { unsigned int length = colon - charset->name; char *encoding_tmp = Xmalloc(length + 1); if (encoding_tmp == NULL) { Xfree((char *) charset->name); Xfree(charset); return (XlcCharSet) NULL; } memcpy(encoding_tmp, charset->name, length); encoding_tmp[length] = '\0'; charset->encoding_name = encoding_tmp; charset->xrm_encoding_name = XrmStringToQuark(charset->encoding_name); } else { charset->encoding_name = charset->name; charset->xrm_encoding_name = charset->xrm_name; } /* Fill in ct_sequence. */ tmp += name_len + 1; memcpy(tmp, ct_sequence, ct_sequence_len+1); charset->ct_sequence = tmp; /* Fill in side, char_size, set_size. */ if (!_XlcParseCharSet(charset)) /* If ct_sequence is not usable in Compound Text, remove it. */ charset->ct_sequence = ""; return (XlcCharSet) charset; } libX11-1.6.3/src/xlibi18n/Makefile.am000064401431060000012000000054251247741723500173450ustar00alancstaff00002660200006AM_CPPFLAGS= \ -I$(top_srcdir)/include \ -I$(top_srcdir)/include/X11 \ -I$(top_builddir)/include \ -I$(top_builddir)/include/X11 \ -I$(top_srcdir)/src/xcms \ -I$(top_srcdir)/src/xkb \ -I$(top_srcdir)/src/xlibi18n \ -I$(top_srcdir)/src \ -D_BSD_SOURCE AM_CFLAGS= \ $(X11_CFLAGS) \ $(BIGFONT_CFLAGS) \ $(XMALLOC_ZERO_CFLAGS) \ $(CWARNFLAGS) noinst_LTLIBRARIES = libi18n.la # # Dynamic loading code for i18n modules # if XLIB_LOADABLE_I18N XI18N_DL_SOURCES = \ XlcDL.c \ XlcSL.c else # # Static interfaces to input/output methods # IM_LIBS = \ ${top_builddir}/modules/im/ximcp/libximcp.la LC_LIBS = \ ${top_builddir}/modules/lc/def/libxlcDef.la \ ${top_builddir}/modules/lc/gen/libxlibi18n.la \ ${top_builddir}/modules/lc/Utf8/libxlcUTF8Load.la OM_LIBS = \ ${top_builddir}/modules/om/generic/libxomGeneric.la endif libi18n_la_LIBADD = \ $(IM_LIBS) $(LC_LIBS) $(OM_LIBS) libi18n_la_SOURCES = \ $(XI18N_DL_SOURCES) \ XDefaultIMIF.c \ XDefaultOMIF.c \ xim_trans.c\ ICWrap.c\ IMWrap.c\ imKStoUCS.c\ lcCT.c\ lcCharSet.c\ lcConv.c\ lcDB.c\ lcDynamic.c\ lcFile.c\ lcGeneric.c\ lcInit.c\ lcPrTxt.c\ lcPubWrap.c\ lcPublic.c\ lcRM.c\ lcStd.c\ lcTxtPr.c\ lcUTF8.c\ lcUtil.c\ lcWrap.c\ mbWMProps.c\ mbWrap.c\ utf8WMProps.c\ utf8Wrap.c\ wcWrap.c\ Xaixlcint.h\ XimImSw.h\ XimProto.h\ XimThai.h\ XimTrInt.h\ XimTrX.h\ XimTrans.h\ Ximint.h\ XimintL.h\ XimintP.h\ XlcGeneric.h\ XlcPubI.h\ XlcPublic.h\ Xlcint.h\ lcUniConv/armscii_8.h\ lcUniConv/ascii.h\ lcUniConv/big5.h\ lcUniConv/big5_emacs.h\ lcUniConv/big5hkscs.h\ lcUniConv/cp1133.h\ lcUniConv/cp1251.h\ lcUniConv/cp1255.h\ lcUniConv/cp1256.h\ lcUniConv/gb2312.h\ lcUniConv/gbk.h\ lcUniConv/georgian_academy.h\ lcUniConv/georgian_ps.h\ lcUniConv/iso8859_1.h\ lcUniConv/iso8859_10.h\ lcUniConv/iso8859_11.h\ lcUniConv/iso8859_13.h\ lcUniConv/iso8859_14.h\ lcUniConv/iso8859_15.h\ lcUniConv/iso8859_16.h\ lcUniConv/iso8859_2.h\ lcUniConv/iso8859_3.h\ lcUniConv/iso8859_4.h\ lcUniConv/iso8859_5.h\ lcUniConv/iso8859_6.h\ lcUniConv/iso8859_7.h\ lcUniConv/iso8859_8.h\ lcUniConv/iso8859_9.h\ lcUniConv/iso8859_9e.h\ lcUniConv/jisx0201.h\ lcUniConv/jisx0208.h\ lcUniConv/jisx0212.h\ lcUniConv/koi8_c.h\ lcUniConv/koi8_r.h\ lcUniConv/koi8_u.h\ lcUniConv/ksc5601.h\ lcUniConv/mulelao.h\ lcUniConv/tatar_cyr.h\ lcUniConv/tcvn.h\ lcUniConv/tis620.h\ lcUniConv/ucs2be.h\ lcUniConv/utf8.h\ lcUniConv/viscii.h EXTRA_DIST = \ lcUniConv/README \ lcUniConv/COPYRIGHT \ lcUniConv/8bit_tab_to_h.c \ lcUniConv/cjk_tab_to_h.c if LINT # Check source code with tools like lint & sparse ALL_LINT_FLAGS=$(LINT_FLAGS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) lint: $(LINT) $(ALL_LINT_FLAGS) $(libi18n_la_SOURCES) endif LINT libX11-1.6.3/src/xlibi18n/lcInit.c000064401431060000012000000131611247741723500166730ustar00alancstaff00002660200006/* Copyright 1985, 1986, 1987, 1991, 1998 The Open Group 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: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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 EVEN IF ADVISED IN ADVANCE OF THE POSSIBILITY OF SUCH DAMAGES. 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 The Open Group. X Window System is a trademark of The Open Group OSF/1, OSF/Motif and Motif are registered trademarks, and OSF, the OSF logo, LBX, X Window System, and Xinerama are trademarks of the Open Group. All other trademarks and registered trademarks mentioned herein are the property of their respective owners. No right, title or interest in or to any trademark, service mark, logo or trade name of Sun Microsystems, Inc. or its licensors is granted. */ /* * Copyright 2000 Oracle and/or its affiliates. All rights reserved. * * 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: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. */ /* * Copyright 1992, 1993 by TOSHIBA Corp. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of TOSHIBA not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. TOSHIBA make no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * * Author: Katsuhisa Yano TOSHIBA Corp. * mopi@osa.ilab.toshiba.co.jp */ /* * (c) Copyright 1995 FUJITSU LIMITED * This is source code modified by FUJITSU LIMITED under the Joint * Development Agreement for the CDE/Motif PST. * * Modifier: Masayoshi Shimamura FUJITSU LIMITED * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xlcint.h" #ifdef USE_DYNAMIC_LC #undef USE_DEFAULT_LOADER #undef USE_GENERIC_LOADER #undef USE_UTF8_LOADER #else #define USE_GENERIC_LOADER #define USE_DEFAULT_LOADER #define USE_UTF8_LOADER #endif /* * The _XlcInitLoader function initializes the locale object loader list * with vendor specific manner. */ void _XlcInitLoader(void) { #ifdef USE_DYNAMIC_LC _XlcAddLoader(_XlcDynamicLoad, XlcHead); #else /* USE_DYNAMIC_LC */ #ifdef USE_GENERIC_LOADER _XlcAddLoader(_XlcGenericLoader, XlcHead); #endif #ifdef USE_DEFAULT_LOADER _XlcAddLoader(_XlcDefaultLoader, XlcHead); #endif #ifdef USE_UTF8_LOADER _XlcAddLoader(_XlcUtf8Loader, XlcHead); #endif #ifdef USE_DYNAMIC_LOADER _XlcAddLoader(_XlcDynamicLoader, XlcHead); #endif #endif /* USE_DYNAMIC_LC */ } void _XlcDeInitLoader(void) { #ifdef USE_DYNAMIC_LC _XlcRemoveLoader(_XlcDynamicLoad); #else /* USE_DYNAMIC_LC */ #ifdef USE_GENERIC_LOADER _XlcRemoveLoader(_XlcGenericLoader); #endif #ifdef USE_DEFAULT_LOADER _XlcRemoveLoader(_XlcDefaultLoader); #endif #ifdef USE_UTF8_LOADER _XlcRemoveLoader(_XlcUtf8Loader); #endif #ifdef USE_DYNAMIC_LOADER _XlcRemoveLoader(_XlcDynamicLoader); #endif #endif /* USE_DYNAMIC_LC */ } libX11-1.6.3/src/xlibi18n/utf8Wrap.c000064401431060000012000000140651247741723500171750ustar00alancstaff00002660200006/* Copyright 1991, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ /* * Copyright 1991 by the Open Software Foundation * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of Open Software Foundation * not be used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. Open Software * Foundation makes no representations about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. * * OPEN SOFTWARE FOUNDATION DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS, IN NO EVENT SHALL OPEN SOFTWARE FOUNDATIONN BE * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * M. Collins OSF */ /* * Copyright 2000 by Bruno Haible * * Permission to use, copy, modify, distribute, and sell this software * and its documentation for any purpose is hereby granted without fee, * provided that the above copyright notice appear in all copies and * that both that copyright notice and this permission notice appear * in supporting documentation, and that the name of Bruno Haible not * be used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. Bruno Haible * makes no representations about the suitability of this software for * any purpose. It is provided "as is" without express or implied * warranty. * * Bruno Haible DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN * NO EVENT SHALL Bruno Haible BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE * OR PERFORMANCE OF THIS SOFTWARE. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xlcint.h" void Xutf8DrawText( Display *dpy, Drawable d, GC gc, int x, int y, XmbTextItem *text_items, int nitems) { register XFontSet fs = NULL; register XmbTextItem *p = text_items; register int i = nitems; register int esc; /* ignore leading items with no fontset */ while (i && !p->font_set) { i--; p++; } for (; --i >= 0; p++) { if (p->font_set) fs = p->font_set; x += p->delta; esc = (*fs->methods->utf8_draw_string) (dpy, d, fs, gc, x, y, p->chars, p->nchars); if (!esc) esc = fs->methods->utf8_escapement (fs, p->chars, p->nchars); x += esc; } } void Xutf8DrawString( Display *dpy, Drawable d, XFontSet font_set, GC gc, int x, int y, _Xconst char *text, int text_len) { (void)(*font_set->methods->utf8_draw_string) (dpy, d, font_set, gc, x, y, text, text_len); } void Xutf8DrawImageString( Display *dpy, Drawable d, XFontSet font_set, GC gc, int x, int y, _Xconst char *text, int text_len) { (*font_set->methods->utf8_draw_image_string) (dpy, d, font_set, gc, x, y, text, text_len); } int Xutf8TextEscapement( XFontSet font_set, _Xconst char *text, int text_len) { return (*font_set->methods->utf8_escapement) (font_set, text, text_len); } int Xutf8TextExtents( XFontSet font_set, _Xconst char *text, int text_len, XRectangle *overall_ink_extents, XRectangle *overall_logical_extents) { return (*font_set->methods->utf8_extents) (font_set, text, text_len, overall_ink_extents, overall_logical_extents); } Status Xutf8TextPerCharExtents( XFontSet font_set, _Xconst char *text, int text_len, XRectangle *ink_extents_buffer, XRectangle *logical_extents_buffer, int buffer_size, int *num_chars, XRectangle *max_ink_extents, XRectangle *max_logical_extents) { return (*font_set->methods->utf8_extents_per_char) (font_set, text, text_len, ink_extents_buffer, logical_extents_buffer, buffer_size, num_chars, max_ink_extents, max_logical_extents); } libX11-1.6.3/src/xlibi18n/IMWrap.c000064401431060000012000000134361247741723500166150ustar00alancstaff00002660200006/* * Copyright 1991 by the Open Software Foundation * Copyright 1993, 1994 by the Sony Corporation * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the names of Open Software Foundation and * Sony Corporation not be used in advertising or publicity pertaining to * distribution of the software without specific, written prior permission. * Open Software Foundation and Sony Corporation make no * representations about the suitability of this software for any purpose. * It is provided "as is" without express or implied warranty. * * OPEN SOFTWARE FOUNDATION AND SONY CORPORATION DISCLAIM ALL * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL OPEN * SOFTWARE FOUNDATIONN OR SONY CORPORATION BE LIABLE FOR ANY SPECIAL, * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. * * M. Collins OSF * Makoto Wakamatsu Sony Corporation */ /* Copyright 1991, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xlcint.h" /* * Compile the resource name. (resource_name ---> xrm_name) */ void _XIMCompileResourceList(XIMResourceList res, unsigned int num_res) { register unsigned int count; for (count = 0; count < num_res; res++, count++) { res->xrm_name = XrmStringToQuark(res->resource_name); } } void _XCopyToArg(XPointer src, XPointer *dst, unsigned int size) { if (!*dst) { union { long longval; #ifdef LONG64 int intval; #endif short shortval; char charval; char* charptr; XPointer ptr; } u; if (size <= sizeof(XPointer)) { memcpy((char *)&u, (char *)src, (int)size); if (size == sizeof(long)) *dst = (XPointer)u.longval; #ifdef LONG64 else if (size == sizeof(int)) *dst = (XPointer)(long)u.intval; #endif else if (size == sizeof(short)) *dst = (XPointer)(long)u.shortval; else if (size == sizeof(char)) *dst = (XPointer)(long)u.charval; else if (size == sizeof(char*)) *dst = (XPointer)u.charptr; else if (size == sizeof(XPointer)) *dst = (XPointer)u.ptr; else memcpy( (char*)dst, (char*)src, (int)size ); } else { memcpy( (char*)dst, (char*)src, (int)size ); } } else { memcpy( (char*)*dst, (char*)src, (int)size ); } } /* * Connects to an input method matching current locale specification, creates * a XIM object and return a pointer the newly created XIM back to the caller. */ XIM XOpenIM(Display *display, XrmDatabase rdb, char *res_name, char *res_class) { XLCd lcd = _XOpenLC( (char *)NULL ); if( !lcd ) return( (XIM)NULL ); return (*lcd->methods->open_im) (lcd, display, rdb, res_name, res_class); } /* * Close the connection to the input manager, and free the XIM structure */ Status XCloseIM(XIM im) { Status s; XIC ic; XLCd lcd = im->core.lcd; s = (im->methods->close) (im); for (ic = im->core.ic_chain; ic; ic = ic->core.next) ic->core.im = (XIM)NULL; Xfree (im); _XCloseLC (lcd); return (s); } /* * Return the Display associated with the input method. */ Display * XDisplayOfIM(XIM im) { return im->core.display; } /* * Return the Locale associated with the input method. */ char * XLocaleOfIM(XIM im) { return im->core.lcd->core->name; } /* * Register to a input method instantiation callback to prepare the * on-demand input method instantiation. */ Bool XRegisterIMInstantiateCallback( Display *display, XrmDatabase rdb, char *res_name, char *res_class, XIDProc callback, XPointer client_data) { XLCd lcd = _XOpenLC( (char *)NULL ); if( !lcd ) return( False ); return( (*lcd->methods->register_callback)( lcd, display, rdb, res_name, res_class, callback, client_data ) ); } /* * Unregister to a input method instantiation callback. */ Bool XUnregisterIMInstantiateCallback( Display *display, XrmDatabase rdb, char *res_name, char *res_class, XIDProc callback, XPointer client_data) { XLCd lcd = _XlcCurrentLC(); if( !lcd ) return( False ); if( lcd->methods->unregister_callback == NULL ) return( False ); return( (*lcd->methods->unregister_callback)( lcd, display, rdb, res_name, res_class, callback, client_data ) ); } for (count = 0; count < num_res; res++, count++) { res->xrm_name = XrmStringToQuark(res->resource_name); } } void _XCopyToArg(XPointer src, XPointer *dst, unsigned int size) { if (!*dst) { union { long longvlibX11-1.6.3/src/xlibi18n/lcFile.c000064401431060000012000000416221247741723500166520ustar00alancstaff00002660200006/* * * Copyright IBM Corporation 1993 * * All Rights Reserved * * License to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of IBM not be * used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * * IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS, AND * NONINFRINGEMENT OF THIRD PARTY RIGHTS, IN NO EVENT SHALL * IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include "Xlibint.h" #include "XlcPubI.h" #include #include /************************************************************************/ #ifndef HAVE_SETEUID # define seteuid setuid #endif #define iscomment(ch) ((ch) == '#' || (ch) == '\0') #if defined(WIN32) #define isreadable(f) (_XAccessFile(f)) #else #define isreadable(f) ((access((f), R_OK) != -1) ? 1 : 0) #endif #ifndef __UNIXOS2__ #define LC_PATHDELIM ':' #else #define LC_PATHDELIM ';' #endif #define XLC_BUFSIZE 256 #include "pathmax.h" #define NUM_LOCALEDIR 64 /* Splits a NUL terminated line into constituents, at colons and newline characters. Leading whitespace is removed from constituents. The constituents are stored at argv[0..argsize-1]. The number of stored constituents (<= argsize) is returned. The line is destructively modified. */ static int parse_line( char *line, char **argv, int argsize) { int argc = 0; char *p = line; while (argc < argsize) { while (isspace(*p)) { ++p; } if (*p == '\0') { break; } argv[argc++] = p; while (*p != ':' && *p != '\n' && *p != '\0') { ++p; } if (*p == '\0') { break; } *p++ = '\0'; } return argc; } #ifdef __UNIXOS2__ /* fg021216: entries in locale files are separated by colons while under OS/2, path entries are separated by semicolon, so we need two functions */ static int parse_line1( char *line, char **argv, int argsize) { int argc = 0; char *p = line; while (argc < argsize) { while (isspace(*p)) { ++p; } if (*p == '\0') { break; } argv[argc++] = p; while (*p != ';' && *p != '\n' && *p != '\0') { ++p; } if (*p == '\0') { break; } *p++ = '\0'; } return argc; } #elif defined(WIN32) /* this is parse_line but skips drive letters at the beginning of the entry */ static int parse_line1( char *line, char **argv, int argsize) { int argc = 0; char *p = line; while (argc < argsize) { while (isspace(*p)) { ++p; } if (*p == '\0') { break; } argv[argc++] = p; if (isalpha(*p) && p[1] == ':') { p+= 2; /* skip drive letters */ } while (*p != ':' && *p != '\n' && *p != '\0') { ++p; } if (*p == '\0') { break; } *p++ = '\0'; } return argc; } #endif /* __UNIXOS2__ */ /* Splits a colon separated list of directories, and returns the constituent paths (without trailing slash). At most argsize constituents are stored at argv[0..argsize-1]. The number of stored constituents is returned. */ static int _XlcParsePath( char *path, char **argv, int argsize) { char *p = path; int n, i; #if !defined(__UNIXOS2__) && !defined(WIN32) n = parse_line(path, argv, argsize); #else n = parse_line1(path, argv, argsize); #endif for (i = 0; i < n; ++i) { int len; p = argv[i]; len = strlen(p); if (len > 0 && p[len - 1] == '/') { /* eliminate trailing slash */ p[len - 1] = '\0'; } } return n; } #ifndef XLOCALEDIR #define XLOCALEDIR "/usr/lib/X11/locale" #endif void xlocaledir( char *buf, int buf_len) { char *p = buf; int len = 0; #ifndef NO_XLOCALEDIR char *dir; int priv = 1; dir = getenv("XLOCALEDIR"); if (dir) { #ifndef WIN32 /* * Only use the user-supplied path if the process isn't priviledged. */ if (getuid() == geteuid() && getgid() == getegid()) { #if defined(HASSETUGID) priv = issetugid(); #elif defined(HASGETRESUID) { uid_t ruid, euid, suid; gid_t rgid, egid, sgid; if ((getresuid(&ruid, &euid, &suid) == 0) && (getresgid(&rgid, &egid, &sgid) == 0)) priv = (euid != suid) || (egid != sgid); } #else /* * If there are saved ID's the process might still be priviledged * even though the above test succeeded. If issetugid() and * getresgid() aren't available, test this by trying to set * euid to 0. * * Note: this only protects setuid-root clients. It doesn't * protect other setuid or any setgid clients. If this tradeoff * isn't acceptable, set DisableXLocaleDirEnv to YES in host.def. */ unsigned int oldeuid; oldeuid = geteuid(); if (seteuid(0) != 0) { priv = 0; } else { if (seteuid(oldeuid) == -1) { /* XXX ouch, coudn't get back to original uid what can we do ??? */ _exit(127); } priv = 1; } #endif } #else priv = 0; #endif if (!priv) { len = strlen(dir); strncpy(p, dir, buf_len); if (len < buf_len) { p[len++] = LC_PATHDELIM; p += len; } } } #endif /* NO_XLOCALEDIR */ if (len < buf_len) #ifndef __UNIXOS2__ strncpy(p, XLOCALEDIR, buf_len - len); #else strncpy(p,__XOS2RedirRoot(XLOCALEDIR), buf_len - len); #endif buf[buf_len-1] = '\0'; } static void xlocalelibdir( char *buf, int buf_len) { char *p = buf; int len = 0; #ifndef NO_XLOCALEDIR char *dir; int priv = 1; dir = getenv("XLOCALELIBDIR"); if (dir) { #ifndef WIN32 /* * Only use the user-supplied path if the process isn't priviledged. */ if (getuid() == geteuid() && getgid() == getegid()) { #if defined(HASSETUGID) priv = issetugid(); #elif defined(HASGETRESUID) { uid_t ruid, euid, suid; gid_t rgid, egid, sgid; if ((getresuid(&ruid, &euid, &suid) == 0) && (getresgid(&rgid, &egid, &sgid) == 0)) priv = (euid != suid) || (egid != sgid); } #else /* * If there are saved ID's the process might still be priviledged * even though the above test succeeded. If issetugid() and * getresgid() aren't available, test this by trying to set * euid to 0. * * Note: this only protects setuid-root clients. It doesn't * protect other setuid or any setgid clients. If this tradeoff * isn't acceptable, set DisableXLocaleDirEnv to YES in host.def. */ unsigned int oldeuid; oldeuid = geteuid(); if (seteuid(0) != 0) { priv = 0; } else { if (seteuid(oldeuid) == -1) { /* XXX ouch, coudn't get back to original uid what can we do ??? */ _exit(127); } priv = 1; } #endif } #else priv = 0; #endif if (!priv) { len = strlen(dir); strncpy(p, dir, buf_len); if (len < buf_len) { p[len++] = LC_PATHDELIM; p += len; } } } #endif /* NO_XLOCALEDIR */ if (len < buf_len) #ifndef __UNIXOS2__ strncpy(p, XLOCALELIBDIR, buf_len - len); #else strncpy(p,__XOS2RedirRoot(XLOCALELIBDIR), buf_len - len); #endif buf[buf_len-1] = '\0'; } /* Mapping direction */ typedef enum { LtoR, /* Map first field to second field */ RtoL /* Map second field to first field */ } MapDirection; static char * resolve_name( const char *lc_name, char *file_name, MapDirection direction) { FILE *fp; char buf[XLC_BUFSIZE], *name = NULL; fp = _XFopenFile (file_name, "r"); if (fp == NULL) return NULL; while (fgets(buf, XLC_BUFSIZE, fp) != NULL) { char *p = buf; int n; char *args[2], *from, *to; #ifdef __UNIXOS2__ /* Take out CR under OS/2 */ int len; len = strlen(p); if (len > 1) { if (*(p+len-2) == '\r' && *(p+len-1) == '\n') { *(p+len-2) = '\n'; *(p+len-1) = '\0'; } } #endif while (isspace(*p)) { ++p; } if (iscomment(*p)) { continue; } n = parse_line(p, args, 2); /* get first 2 fields */ if (n != 2) { continue; } if (direction == LtoR) { from = args[0], to = args[1]; /* left to right */ } else { from = args[1], to = args[0]; /* right to left */ } if (! strcmp(from, lc_name)) { name = strdup(to); break; } } fclose(fp); return name; } #define c_tolower(ch) ((ch) >= 'A' && (ch) <= 'Z' ? (ch) - 'A' + 'a' : (ch)) static char * lowercase( char *dst, const char *src) { const char *s; char *t; for (s = src, t = dst; *s; ++s, ++t) *t = c_tolower(*s); *t = '\0'; return dst; } /* * normalize_lcname(): remove any '_' and '-' and convert any character * to lower case after the _ part. If result is identical * to argument, free result and * return NULL. */ static char * normalize_lcname (const char *name) { char *p, *ret; const char *tmp = name; p = ret = Xmalloc(strlen(name) + 1); if (!p) return NULL; if (tmp) { while (*tmp && *tmp != '.' && *tmp != '@') *p++ = *tmp++; while (*tmp) { if (*tmp != '-') *p++ = c_tolower(*tmp); tmp++; } } *p = '\0'; if (strcmp(ret, name) == 0) { Xfree(ret); return NULL; } return ret; } /************************************************************************/ char * _XlcFileName( XLCd lcd, const char *category) { char *siname; char cat[XLC_BUFSIZE], dir[XLC_BUFSIZE]; int i, n; char *args[NUM_LOCALEDIR]; char *file_name = NULL; if (lcd == (XLCd)NULL) return NULL; siname = XLC_PUBLIC(lcd, siname); if (category) lowercase(cat, category); else cat[0] = '\0'; xlocaledir(dir,XLC_BUFSIZE); n = _XlcParsePath(dir, args, NUM_LOCALEDIR); for (i = 0; i < n; ++i) { char buf[PATH_MAX], *name; if (args[i] == NULL) continue; name = NULL; if (snprintf(buf, PATH_MAX, "%s/%s.dir", args[i], cat) < PATH_MAX) { name = resolve_name(siname, buf, RtoL); } if (name == NULL) { continue; } if (*name == '/') { /* supposed to be absolute path name */ file_name = name; } else { if (snprintf(buf, PATH_MAX, "%s/%s", args[i], name) < PATH_MAX) file_name = strdup(buf); else file_name = NULL; Xfree(name); } if (file_name && isreadable(file_name)) { break; } Xfree(file_name); file_name = NULL; /* Then, try with next dir */ } return file_name; } /************************************************************************/ #ifndef LOCALE_ALIAS #define LOCALE_ALIAS "locale.alias" #endif int _XlcResolveLocaleName( const char* lc_name, XLCdPublicPart* pub) { char dir[PATH_MAX], buf[PATH_MAX], *name = NULL; char *dst; int i, n, sinamelen; char *args[NUM_LOCALEDIR]; static const char locale_alias[] = LOCALE_ALIAS; char *tmp_siname; char *nlc_name = NULL; xlocaledir (dir, PATH_MAX); n = _XlcParsePath(dir, args, NUM_LOCALEDIR); for (i = 0; i < n; ++i) { if (args[i] == NULL) continue; if (snprintf (buf, PATH_MAX, "%s/%s", args[i], locale_alias) < PATH_MAX) { name = resolve_name (lc_name, buf, LtoR); if (!name) { if (!nlc_name) nlc_name = normalize_lcname(lc_name); if (nlc_name) name = resolve_name (nlc_name, buf, LtoR); } } if (name != NULL) { break; } } Xfree(nlc_name); if (name == NULL) { /* vendor locale name == Xlocale name, no expansion of alias */ pub->siname = strdup (lc_name); } else { pub->siname = name; } sinamelen = strlen (pub->siname); if (sinamelen == 1 && pub->siname[0] == 'C') { pub->language = pub->siname; pub->territory = pub->codeset = NULL; return 1; } /* * pub->siname is in the format _., typical would * be "en_US.ISO8859-1", "en_US.utf8", "ru_RU.KOI-8", or ja_JP.SJIS, * although it could be ja.SJIS too. */ tmp_siname = Xrealloc (pub->siname, 2 * (sinamelen + 1)); if (tmp_siname == NULL) { return 0; } pub->siname = tmp_siname; /* language */ dst = &pub->siname[sinamelen + 1]; strcpy (dst, pub->siname); pub->language = dst; /* territory */ dst = strchr (dst, '_'); if (dst) { *dst = '\0'; pub->territory = ++dst; } else dst = &pub->siname[sinamelen + 1]; /* codeset */ dst = strchr (dst, '.'); if (dst) { *dst = '\0'; pub->codeset = ++dst; } return (pub->siname[0] != '\0') ? 1 : 0; } /************************************************************************/ int _XlcResolveI18NPath(char *buf, int buf_len) { if (buf != NULL) { xlocaledir(buf, buf_len); } return 1; } char * _XlcLocaleDirName(char *dir_name, size_t dir_len, const char *lc_name) { char dir[PATH_MAX], buf[PATH_MAX]; int i, n; char *args[NUM_LOCALEDIR]; static char locale_alias[] = LOCALE_ALIAS; char *target_name = NULL; char *target_dir = NULL; char *nlc_name = NULL; static char* last_dir_name = 0; static size_t last_dir_len = 0; static char* last_lc_name = 0; if (last_lc_name != 0 && strcmp (last_lc_name, lc_name) == 0 && dir_len >= last_dir_len) { strcpy (dir_name, last_dir_name); return dir_name; } xlocaledir (dir, PATH_MAX); n = _XlcParsePath(dir, args, NUM_LOCALEDIR); for (i = 0; i < n; ++i) { char *name = NULL; if (args[i] == NULL) continue; if (snprintf (buf, PATH_MAX, "%s/%s", args[i], locale_alias) < PATH_MAX) { name = resolve_name(lc_name, buf, LtoR); if (!name) { if (!nlc_name) nlc_name = normalize_lcname(lc_name); if (nlc_name) name = resolve_name (nlc_name, buf, LtoR); } } /* look at locale.dir */ target_dir = args[i]; if (snprintf(buf, PATH_MAX, "%s/locale.dir", target_dir) < PATH_MAX) { /* If name is not an alias, use lc_name for locale.dir search */ target_name = resolve_name(name ? name : lc_name, buf, RtoL); } Xfree(name); name = NULL; if (target_name != NULL) { char *p = 0; if ((p = strstr(target_name, "/XLC_LOCALE"))) { *p = '\0'; break; } Xfree(target_name); target_name = NULL; } } Xfree(nlc_name); if (target_name == NULL) /* vendor locale name == Xlocale name, no expansion of alias */ snprintf(dir_name, dir_len, "%s/%s", args[0], lc_name); else snprintf(dir_name, dir_len, "%s/%s", target_dir, target_name); Xfree(target_name); Xfree (last_dir_name); Xfree (last_lc_name); last_dir_len = strlen (dir_name) + 1; last_dir_name = Xmalloc (last_dir_len); strcpy (last_dir_name, dir_name); last_lc_name = strdup (lc_name); return dir_name; } char * _XlcLocaleLibDirName(char *dir_name, size_t dir_len, const char *lc_name) { char dir[PATH_MAX], buf[PATH_MAX]; int i, n; char *args[NUM_LOCALEDIR]; static char locale_alias[] = LOCALE_ALIAS; char *target_name = NULL; char *target_dir = NULL; char *nlc_name = NULL; static char* last_dir_name = 0; static size_t last_dir_len = 0; static char* last_lc_name = 0; if (last_lc_name != 0 && strcmp (last_lc_name, lc_name) == 0 && dir_len >= last_dir_len) { strcpy (dir_name, last_dir_name); return dir_name; } xlocalelibdir (dir, PATH_MAX); n = _XlcParsePath(dir, args, NUM_LOCALEDIR); for (i = 0; i < n; ++i) { char *name = NULL; if (args[i] == NULL) continue; if (snprintf (buf, PATH_MAX, "%s/%s", args[i], locale_alias) < PATH_MAX) { name = resolve_name(lc_name, buf, LtoR); if (!name) { if (!nlc_name) nlc_name = normalize_lcname(lc_name); if (nlc_name) name = resolve_name (nlc_name, buf, LtoR); } } /* look at locale.dir */ target_dir = args[i]; if (snprintf(buf, PATH_MAX, "%s/locale.dir", target_dir) < PATH_MAX) { /* If name is not an alias, use lc_name for locale.dir search */ target_name = resolve_name(name ? name : lc_name, buf, RtoL); } Xfree(name); name = NULL; if (target_name != NULL) { char *p = 0; if ((p = strstr(target_name, "/XLC_LOCALE"))) { *p = '\0'; break; } Xfree(target_name); target_name = NULL; } } Xfree(nlc_name); if (target_name == NULL) /* vendor locale name == Xlocale name, no expansion of alias */ snprintf(dir_name, dir_len, "%s/%s", args[0], lc_name); else snprintf(dir_name, dir_len, "%s/%s", target_dir, target_name); Xfree(target_name); Xfree (last_dir_name); Xfree (last_lc_name); last_dir_len = strlen (dir_name) + 1; last_dir_name = Xmalloc (last_dir_len); strcpy (last_dir_name, dir_name); last_lc_name = strdup (lc_name); return dir_name; } DirEnv to YES in host.def. */ unsigned int oldeuid; oldeuid = geteuid(); if (seteuid(0) !libX11-1.6.3/src/xlibi18n/lcUTF8.c000064401431060000012000001570671247741723500165340ustar00alancstaff00002660200006/****************************************************************** Copyright 1993 by SunSoft, Inc. Copyright 1999-2000 by Bruno Haible Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the names of SunSoft, Inc. and Bruno Haible not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. SunSoft, Inc. and Bruno Haible make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. SunSoft Inc. AND Bruno Haible DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SunSoft, Inc. OR Bruno Haible BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* * This file contains: * * I. Conversion routines CompoundText/CharSet <--> Unicode/UTF-8. * * Used for three purposes: * 1. The UTF-8 locales, see below. * 2. Unicode aware applications for which the use of 8-bit character * sets is an anachronism. * 3. For conversion from keysym to locale encoding. * * II. Conversion files for an UTF-8 locale loader. * Supports: all locales with codeset UTF-8. * How: Provides converters for UTF-8. * Platforms: all systems. * * The loader itself is located in lcUTF8.c. */ /* * The conversion from UTF-8 to CompoundText is realized in a very * conservative way. Recall that CompoundText data is used for inter-client * communication purposes. We distinguish three classes of clients: * - Clients which accept only those pieces of CompoundText which belong to * the character set understood by the current locale. * (Example: clients which are linked to an older X11 library.) * - Clients which accept CompoundText with multiple character sets and parse * it themselves. * (Example: emacs, xemacs.) * - Clients which rely entirely on the X{mb,wc}TextPropertyToTextList * functions for the conversion of CompoundText to their current locale's * multi-byte/wide-character format. * For best interoperation, the UTF-8 to CompoundText conversion proceeds as * follows. For every character, it first tests whether the character is * representable in the current locale's original (non-UTF-8) character set. * If not, it goes through the list of predefined character sets for * CompoundText and tests if the character is representable in that character * set. If so, it encodes the character using its code within that character * set. If not, it uses an UTF-8-in-CompoundText encapsulation. Since * clients of the first and second kind ignore such encapsulated text, * this encapsulation is kept to a minimum and terminated as early as possible. * * In a distant future, when clients of the first and second kind will have * disappeared, we will be able to stuff UTF-8 data directly in CompoundText * without first going through the list of predefined character sets. */ #ifdef HAVE_CONFIG_H #include #endif #include #include "Xlibint.h" #include "XlcPubI.h" #include "XlcGeneric.h" static XlcConv create_conv( XLCd lcd, XlcConvMethods methods) { XlcConv conv; conv = Xmalloc(sizeof(XlcConvRec)); if (conv == (XlcConv) NULL) return (XlcConv) NULL; conv->methods = methods; conv->state = NULL; return conv; } static void close_converter( XlcConv conv) { Xfree(conv); } /* Replacement character for invalid multibyte sequence or wide character. */ #define BAD_WCHAR ((ucs4_t) 0xfffd) #define BAD_CHAR '?' /***************************************************************************/ /* Part I: Conversion routines CompoundText/CharSet <--> Unicode/UTF-8. * * Note that this code works in any locale. We store Unicode values in * `ucs4_t' variables, but don't pass them to the user. * * This code has to support all character sets that are used for CompoundText, * nothing more, nothing less. See the table in lcCT.c. * Since the conversion _to_ CompoundText is likely to need the tables for all * character sets at once, we don't use dynamic loading (of tables or shared * libraries through iconv()). Use a fixed set of tables instead. * * We use statically computed tables, not dynamically allocated arrays, * because it's more memory efficient: Different processes using the same * libX11 shared library share the "text" and read-only "data" sections. */ typedef unsigned int ucs4_t; #define conv_t XlcConv typedef struct _Utf8ConvRec { const char *name; XrmQuark xrm_name; int (* cstowc) (XlcConv, ucs4_t *, unsigned char const *, int); int (* wctocs) (XlcConv, unsigned char *, ucs4_t, int); } Utf8ConvRec, *Utf8Conv; /* * int xxx_cstowc (XlcConv conv, ucs4_t *pwc, unsigned char const *s, int n) * converts the byte sequence starting at s to a wide character. Up to n bytes * are available at s. n is >= 1. * Result is number of bytes consumed (if a wide character was read), * or 0 if invalid, or -1 if n too small. * * int xxx_wctocs (XlcConv conv, unsigned char *r, ucs4_t wc, int n) * converts the wide character wc to the character set xxx, and stores the * result beginning at r. Up to n bytes may be written at r. n is >= 1. * Result is number of bytes written, or 0 if invalid, or -1 if n too small. */ /* Return code if invalid. (xxx_mbtowc, xxx_wctomb) */ #define RET_ILSEQ 0 /* Return code if only a shift sequence of n bytes was read. (xxx_mbtowc) */ #define RET_TOOFEW(n) (-1-(n)) /* Return code if output buffer is too small. (xxx_wctomb, xxx_reset) */ #define RET_TOOSMALL -1 /* * The tables below are bijective. It would be possible to extend the * xxx_wctocs tables to do some transliteration (e.g. U+201C,U+201D -> 0x22) * but *only* with characters not contained in any other table, and *only* * when the current locale is not an UTF-8 locale. */ #include "lcUniConv/utf8.h" #include "lcUniConv/ucs2be.h" #ifdef notused #include "lcUniConv/ascii.h" #endif #include "lcUniConv/iso8859_1.h" #include "lcUniConv/iso8859_2.h" #include "lcUniConv/iso8859_3.h" #include "lcUniConv/iso8859_4.h" #include "lcUniConv/iso8859_5.h" #include "lcUniConv/iso8859_6.h" #include "lcUniConv/iso8859_7.h" #include "lcUniConv/iso8859_8.h" #include "lcUniConv/iso8859_9.h" #include "lcUniConv/iso8859_10.h" #include "lcUniConv/iso8859_11.h" #include "lcUniConv/iso8859_13.h" #include "lcUniConv/iso8859_14.h" #include "lcUniConv/iso8859_15.h" #include "lcUniConv/iso8859_16.h" #include "lcUniConv/iso8859_9e.h" #include "lcUniConv/jisx0201.h" #include "lcUniConv/tis620.h" #include "lcUniConv/koi8_r.h" #include "lcUniConv/koi8_u.h" #include "lcUniConv/koi8_c.h" #include "lcUniConv/armscii_8.h" #include "lcUniConv/cp1133.h" #include "lcUniConv/mulelao.h" #include "lcUniConv/viscii.h" #include "lcUniConv/tcvn.h" #include "lcUniConv/georgian_academy.h" #include "lcUniConv/georgian_ps.h" #include "lcUniConv/cp1251.h" #include "lcUniConv/cp1255.h" #include "lcUniConv/cp1256.h" #include "lcUniConv/tatar_cyr.h" typedef struct { unsigned short indx; /* index into big table */ unsigned short used; /* bitmask of used entries */ } Summary16; #include "lcUniConv/gb2312.h" #include "lcUniConv/jisx0208.h" #include "lcUniConv/jisx0212.h" #include "lcUniConv/ksc5601.h" #include "lcUniConv/big5.h" #include "lcUniConv/big5_emacs.h" #include "lcUniConv/big5hkscs.h" #include "lcUniConv/gbk.h" static Utf8ConvRec all_charsets[] = { /* The ISO10646-1/UTF-8 entry occurs twice, once at the beginning (for lookup speed), once at the end (as a fallback). */ { "ISO10646-1", NULLQUARK, utf8_mbtowc, utf8_wctomb }, { "ISO8859-1", NULLQUARK, iso8859_1_mbtowc, iso8859_1_wctomb }, { "ISO8859-2", NULLQUARK, iso8859_2_mbtowc, iso8859_2_wctomb }, { "ISO8859-3", NULLQUARK, iso8859_3_mbtowc, iso8859_3_wctomb }, { "ISO8859-4", NULLQUARK, iso8859_4_mbtowc, iso8859_4_wctomb }, { "ISO8859-5", NULLQUARK, iso8859_5_mbtowc, iso8859_5_wctomb }, { "ISO8859-6", NULLQUARK, iso8859_6_mbtowc, iso8859_6_wctomb }, { "ISO8859-7", NULLQUARK, iso8859_7_mbtowc, iso8859_7_wctomb }, { "ISO8859-8", NULLQUARK, iso8859_8_mbtowc, iso8859_8_wctomb }, { "ISO8859-9", NULLQUARK, iso8859_9_mbtowc, iso8859_9_wctomb }, { "ISO8859-10", NULLQUARK, iso8859_10_mbtowc, iso8859_10_wctomb }, { "ISO8859-11", NULLQUARK, iso8859_11_mbtowc, iso8859_11_wctomb }, { "ISO8859-13", NULLQUARK, iso8859_13_mbtowc, iso8859_13_wctomb }, { "ISO8859-14", NULLQUARK, iso8859_14_mbtowc, iso8859_14_wctomb }, { "ISO8859-15", NULLQUARK, iso8859_15_mbtowc, iso8859_15_wctomb }, { "ISO8859-16", NULLQUARK, iso8859_16_mbtowc, iso8859_16_wctomb }, { "JISX0201.1976-0", NULLQUARK, jisx0201_mbtowc, jisx0201_wctomb }, { "TIS620-0", NULLQUARK, tis620_mbtowc, tis620_wctomb }, { "GB2312.1980-0", NULLQUARK, gb2312_mbtowc, gb2312_wctomb }, { "JISX0208.1983-0", NULLQUARK, jisx0208_mbtowc, jisx0208_wctomb }, { "JISX0208.1990-0", NULLQUARK, jisx0208_mbtowc, jisx0208_wctomb }, { "JISX0212.1990-0", NULLQUARK, jisx0212_mbtowc, jisx0212_wctomb }, { "KSC5601.1987-0", NULLQUARK, ksc5601_mbtowc, ksc5601_wctomb }, { "KOI8-R", NULLQUARK, koi8_r_mbtowc, koi8_r_wctomb }, { "KOI8-U", NULLQUARK, koi8_u_mbtowc, koi8_u_wctomb }, { "KOI8-C", NULLQUARK, koi8_c_mbtowc, koi8_c_wctomb }, { "TATAR-CYR", NULLQUARK, tatar_cyr_mbtowc, tatar_cyr_wctomb }, { "ARMSCII-8", NULLQUARK, armscii_8_mbtowc, armscii_8_wctomb }, { "IBM-CP1133", NULLQUARK, cp1133_mbtowc, cp1133_wctomb }, { "MULELAO-1", NULLQUARK, mulelao_mbtowc, mulelao_wctomb }, { "VISCII1.1-1", NULLQUARK, viscii_mbtowc, viscii_wctomb }, { "TCVN-5712", NULLQUARK, tcvn_mbtowc, tcvn_wctomb }, { "GEORGIAN-ACADEMY", NULLQUARK, georgian_academy_mbtowc, georgian_academy_wctomb }, { "GEORGIAN-PS", NULLQUARK, georgian_ps_mbtowc, georgian_ps_wctomb }, { "ISO8859-9E", NULLQUARK, iso8859_9e_mbtowc, iso8859_9e_wctomb }, { "MICROSOFT-CP1251", NULLQUARK, cp1251_mbtowc, cp1251_wctomb }, { "MICROSOFT-CP1255", NULLQUARK, cp1255_mbtowc, cp1255_wctomb }, { "MICROSOFT-CP1256", NULLQUARK, cp1256_mbtowc, cp1256_wctomb }, { "BIG5-0", NULLQUARK, big5_mbtowc, big5_wctomb }, { "BIG5-E0", NULLQUARK, big5_0_mbtowc, big5_0_wctomb }, { "BIG5-E1", NULLQUARK, big5_1_mbtowc, big5_1_wctomb }, { "GBK-0", NULLQUARK, gbk_mbtowc, gbk_wctomb }, { "BIG5HKSCS-0", NULLQUARK, big5hkscs_mbtowc, big5hkscs_wctomb }, /* The ISO10646-1/UTF-8 entry occurs twice, once at the beginning (for lookup speed), once at the end (as a fallback). */ { "ISO10646-1", NULLQUARK, utf8_mbtowc, utf8_wctomb }, /* Encoding ISO10646-1 for fonts means UCS2-like encoding so for conversion to FontCharSet we need this record */ { "ISO10646-1", NULLQUARK, ucs2be_mbtowc, ucs2be_wctomb } }; #define charsets_table_size (sizeof(all_charsets)/sizeof(all_charsets[0])) #define all_charsets_count (charsets_table_size - 1) #define ucs2_conv_index (charsets_table_size - 1) static void init_all_charsets (void) { Utf8Conv convptr; int i; for (convptr = all_charsets, i = charsets_table_size; i > 0; convptr++, i--) convptr->xrm_name = XrmStringToQuark(convptr->name); } #define lazy_init_all_charsets() \ do { \ if (all_charsets[0].xrm_name == NULLQUARK) \ init_all_charsets(); \ } while (0) /* from XlcNCharSet to XlcNUtf8String */ static int cstoutf8( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { XlcCharSet charset; const char *name; Utf8Conv convptr; int i; unsigned char const *src; unsigned char const *srcend; unsigned char *dst; unsigned char *dstend; int unconv_num; if (from == NULL || *from == NULL) return 0; if (num_args < 1) return -1; charset = (XlcCharSet) args[0]; name = charset->encoding_name; /* not charset->name because the latter has a ":GL"/":GR" suffix */ for (convptr = all_charsets, i = all_charsets_count-1; i > 0; convptr++, i--) if (!strcmp(convptr->name, name)) break; if (i == 0) return -1; src = (unsigned char const *) *from; srcend = src + *from_left; dst = (unsigned char *) *to; dstend = dst + *to_left; unconv_num = 0; while (src < srcend) { ucs4_t wc; int consumed; int count; consumed = convptr->cstowc(conv, &wc, src, srcend-src); if (consumed == RET_ILSEQ) return -1; if (consumed == RET_TOOFEW(0)) break; count = utf8_wctomb(NULL, dst, wc, dstend-dst); if (count == RET_TOOSMALL) break; if (count == RET_ILSEQ) { count = utf8_wctomb(NULL, dst, BAD_WCHAR, dstend-dst); if (count == RET_TOOSMALL) break; unconv_num++; } src += consumed; dst += count; } *from = (XPointer) src; *from_left = srcend - src; *to = (XPointer) dst; *to_left = dstend - dst; return unconv_num; } static XlcConvMethodsRec methods_cstoutf8 = { close_converter, cstoutf8, NULL }; static XlcConv open_cstoutf8( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { lazy_init_all_charsets(); return create_conv(from_lcd, &methods_cstoutf8); } /* from XlcNUtf8String to XlcNCharSet */ static XlcConv create_tocs_conv( XLCd lcd, XlcConvMethods methods) { XlcConv conv; CodeSet *codeset_list; int codeset_num; int charset_num; int i, j, k; Utf8Conv *preferred; lazy_init_all_charsets(); codeset_list = XLC_GENERIC(lcd, codeset_list); codeset_num = XLC_GENERIC(lcd, codeset_num); charset_num = 0; for (i = 0; i < codeset_num; i++) charset_num += codeset_list[i]->num_charsets; if (charset_num > all_charsets_count-1) charset_num = all_charsets_count-1; conv = Xmalloc(sizeof(XlcConvRec) + (charset_num + 1) * sizeof(Utf8Conv)); if (conv == (XlcConv) NULL) return (XlcConv) NULL; preferred = (Utf8Conv *) ((char *) conv + sizeof(XlcConvRec)); /* Loop through all codesets mentioned in the locale. */ charset_num = 0; for (i = 0; i < codeset_num; i++) { XlcCharSet *charsets = codeset_list[i]->charset_list; int num_charsets = codeset_list[i]->num_charsets; for (j = 0; j < num_charsets; j++) { const char *name = charsets[j]->encoding_name; /* If it wasn't already encountered... */ for (k = charset_num-1; k >= 0; k--) if (!strcmp(preferred[k]->name, name)) break; if (k < 0) { /* Look it up in all_charsets[]. */ for (k = 0; k < all_charsets_count-1; k++) if (!strcmp(all_charsets[k].name, name)) { /* Add it to the preferred set. */ preferred[charset_num++] = &all_charsets[k]; break; } } } } preferred[charset_num] = (Utf8Conv) NULL; conv->methods = methods; conv->state = (XPointer) preferred; return conv; } static void close_tocs_converter( XlcConv conv) { /* conv->state is allocated together with conv, free both at once. */ Xfree(conv); } /* * Converts a Unicode character to an appropriate character set. The NULL * terminated array of preferred character sets is passed as first argument. * If successful, *charsetp is set to the character set that was used, and * *sidep is set to the character set side (XlcGL or XlcGR). */ static int charset_wctocs( Utf8Conv *preferred, Utf8Conv *charsetp, XlcSide *sidep, XlcConv conv, unsigned char *r, ucs4_t wc, int n) { int count; Utf8Conv convptr; int i; for (; *preferred != (Utf8Conv) NULL; preferred++) { convptr = *preferred; count = convptr->wctocs(conv, r, wc, n); if (count == RET_TOOSMALL) return RET_TOOSMALL; if (count != RET_ILSEQ) { *charsetp = convptr; *sidep = (*r < 0x80 ? XlcGL : XlcGR); return count; } } for (convptr = all_charsets+1, i = all_charsets_count-1; i > 0; convptr++, i--) { count = convptr->wctocs(conv, r, wc, n); if (count == RET_TOOSMALL) return RET_TOOSMALL; if (count != RET_ILSEQ) { *charsetp = convptr; *sidep = (*r < 0x80 ? XlcGL : XlcGR); return count; } } return RET_ILSEQ; } static int utf8tocs( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { Utf8Conv *preferred_charsets; XlcCharSet last_charset = NULL; unsigned char const *src; unsigned char const *srcend; unsigned char *dst; unsigned char *dstend; int unconv_num; if (from == NULL || *from == NULL) return 0; preferred_charsets = (Utf8Conv *) conv->state; src = (unsigned char const *) *from; srcend = src + *from_left; dst = (unsigned char *) *to; dstend = dst + *to_left; unconv_num = 0; while (src < srcend && dst < dstend) { Utf8Conv chosen_charset = NULL; XlcSide chosen_side = XlcNONE; ucs4_t wc; int consumed; int count; consumed = utf8_mbtowc(NULL, &wc, src, srcend-src); if (consumed == RET_TOOFEW(0)) break; if (consumed == RET_ILSEQ) { src++; unconv_num++; continue; } count = charset_wctocs(preferred_charsets, &chosen_charset, &chosen_side, conv, dst, wc, dstend-dst); if (count == RET_TOOSMALL) break; if (count == RET_ILSEQ) { src += consumed; unconv_num++; continue; } if (last_charset == NULL) { last_charset = _XlcGetCharSetWithSide(chosen_charset->name, chosen_side); if (last_charset == NULL) { src += consumed; unconv_num++; continue; } } else { if (!(last_charset->xrm_encoding_name == chosen_charset->xrm_name && (last_charset->side == XlcGLGR || last_charset->side == chosen_side))) break; } src += consumed; dst += count; } if (last_charset == NULL) return -1; *from = (XPointer) src; *from_left = srcend - src; *to = (XPointer) dst; *to_left = dstend - dst; if (num_args >= 1) *((XlcCharSet *)args[0]) = last_charset; return unconv_num; } static XlcConvMethodsRec methods_utf8tocs = { close_tocs_converter, utf8tocs, NULL }; static XlcConv open_utf8tocs( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_tocs_conv(from_lcd, &methods_utf8tocs); } /* from XlcNUtf8String to XlcNChar */ static int utf8tocs1( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { Utf8Conv *preferred_charsets; XlcCharSet last_charset = NULL; unsigned char const *src; unsigned char const *srcend; unsigned char *dst; unsigned char *dstend; int unconv_num; if (from == NULL || *from == NULL) return 0; preferred_charsets = (Utf8Conv *) conv->state; src = (unsigned char const *) *from; srcend = src + *from_left; dst = (unsigned char *) *to; dstend = dst + *to_left; unconv_num = 0; while (src < srcend && dst < dstend) { Utf8Conv chosen_charset = NULL; XlcSide chosen_side = XlcNONE; ucs4_t wc; int consumed; int count; consumed = utf8_mbtowc(NULL, &wc, src, srcend-src); if (consumed == RET_TOOFEW(0)) break; if (consumed == RET_ILSEQ) { src++; unconv_num++; continue; } count = charset_wctocs(preferred_charsets, &chosen_charset, &chosen_side, conv, dst, wc, dstend-dst); if (count == RET_TOOSMALL) break; if (count == RET_ILSEQ) { src += consumed; unconv_num++; continue; } if (last_charset == NULL) { last_charset = _XlcGetCharSetWithSide(chosen_charset->name, chosen_side); if (last_charset == NULL) { src += consumed; unconv_num++; continue; } } else { if (!(last_charset->xrm_encoding_name == chosen_charset->xrm_name && (last_charset->side == XlcGLGR || last_charset->side == chosen_side))) break; } src += consumed; dst += count; break; } if (last_charset == NULL) return -1; *from = (XPointer) src; *from_left = srcend - src; *to = (XPointer) dst; *to_left = dstend - dst; if (num_args >= 1) *((XlcCharSet *)args[0]) = last_charset; return unconv_num; } static XlcConvMethodsRec methods_utf8tocs1 = { close_tocs_converter, utf8tocs1, NULL }; static XlcConv open_utf8tocs1( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_tocs_conv(from_lcd, &methods_utf8tocs1); } /* from XlcNUtf8String to XlcNString */ static int utf8tostr( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { unsigned char const *src; unsigned char const *srcend; unsigned char *dst; unsigned char *dstend; int unconv_num; if (from == NULL || *from == NULL) return 0; src = (unsigned char const *) *from; srcend = src + *from_left; dst = (unsigned char *) *to; dstend = dst + *to_left; unconv_num = 0; while (src < srcend) { unsigned char c; ucs4_t wc; int consumed; consumed = utf8_mbtowc(NULL, &wc, src, srcend-src); if (consumed == RET_TOOFEW(0)) break; if (dst == dstend) break; if (consumed == RET_ILSEQ) { consumed = 1; c = BAD_CHAR; unconv_num++; } else { if ((wc & ~(ucs4_t)0xff) != 0) { c = BAD_CHAR; unconv_num++; } else c = (unsigned char) wc; } *dst++ = c; src += consumed; } *from = (XPointer) src; *from_left = srcend - src; *to = (XPointer) dst; *to_left = dstend - dst; return unconv_num; } static XlcConvMethodsRec methods_utf8tostr = { close_converter, utf8tostr, NULL }; static XlcConv open_utf8tostr( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &methods_utf8tostr); } /* from XlcNString to XlcNUtf8String */ static int strtoutf8( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { unsigned char const *src; unsigned char const *srcend; unsigned char *dst; unsigned char *dstend; if (from == NULL || *from == NULL) return 0; src = (unsigned char const *) *from; srcend = src + *from_left; dst = (unsigned char *) *to; dstend = dst + *to_left; while (src < srcend) { int count = utf8_wctomb(NULL, dst, *src, dstend-dst); if (count == RET_TOOSMALL) break; dst += count; src++; } *from = (XPointer) src; *from_left = srcend - src; *to = (XPointer) dst; *to_left = dstend - dst; return 0; } static XlcConvMethodsRec methods_strtoutf8 = { close_converter, strtoutf8, NULL }; static XlcConv open_strtoutf8( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &methods_strtoutf8); } /* Support for the input methods. */ XPointer _Utf8GetConvByName( const char *name) { XrmQuark xrm_name; Utf8Conv convptr; int i; if (name == NULL) return (XPointer) NULL; lazy_init_all_charsets(); xrm_name = XrmStringToQuark(name); for (convptr = all_charsets, i = all_charsets_count-1; i > 0; convptr++, i--) if (convptr->xrm_name == xrm_name) return (XPointer) convptr->wctocs; return (XPointer) NULL; } /* from XlcNUcsChar to XlcNChar, needed for input methods */ static XlcConv create_ucstocs_conv( XLCd lcd, XlcConvMethods methods) { if (XLC_PUBLIC_PART(lcd)->codeset && _XlcCompareISOLatin1(XLC_PUBLIC_PART(lcd)->codeset, "UTF-8") == 0) { XlcConv conv; Utf8Conv *preferred; lazy_init_all_charsets(); conv = Xmalloc(sizeof(XlcConvRec) + 2 * sizeof(Utf8Conv)); if (conv == (XlcConv) NULL) return (XlcConv) NULL; preferred = (Utf8Conv *) ((char *) conv + sizeof(XlcConvRec)); preferred[0] = &all_charsets[0]; /* ISO10646 */ preferred[1] = (Utf8Conv) NULL; conv->methods = methods; conv->state = (XPointer) preferred; return conv; } else { return create_tocs_conv(lcd, methods); } } static int charset_wctocs_exactly( Utf8Conv *preferred, Utf8Conv *charsetp, XlcSide *sidep, XlcConv conv, unsigned char *r, ucs4_t wc, int n) { int count; Utf8Conv convptr; for (; *preferred != (Utf8Conv) NULL; preferred++) { convptr = *preferred; count = convptr->wctocs(conv, r, wc, n); if (count == RET_TOOSMALL) return RET_TOOSMALL; if (count != RET_ILSEQ) { *charsetp = convptr; *sidep = (*r < 0x80 ? XlcGL : XlcGR); return count; } } return RET_ILSEQ; } static int ucstocs1( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { ucs4_t const *src; unsigned char *dst = (unsigned char *) *to; int unconv_num = 0; Utf8Conv *preferred_charsets = (Utf8Conv *) conv->state; Utf8Conv chosen_charset = NULL; XlcSide chosen_side = XlcNONE; XlcCharSet charset = NULL; int count; if (from == NULL || *from == NULL) return 0; src = (ucs4_t const *) *from; count = charset_wctocs_exactly(preferred_charsets, &chosen_charset, &chosen_side, conv, dst, *src, *to_left); if (count < 1) { unconv_num++; count = 0; } else { charset = _XlcGetCharSetWithSide(chosen_charset->name, chosen_side); } if (charset == NULL) return -1; *from = (XPointer) ++src; (*from_left)--; *to = (XPointer) dst; *to_left -= count; if (num_args >= 1) *((XlcCharSet *)args[0]) = charset; return unconv_num; } static XlcConvMethodsRec methods_ucstocs1 = { close_tocs_converter, ucstocs1, NULL }; static XlcConv open_ucstocs1( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_ucstocs_conv(from_lcd, &methods_ucstocs1); } /* from XlcNUcsChar to XlcNUtf8String, needed for input methods */ static int ucstoutf8( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { const ucs4_t *src; const ucs4_t *srcend; unsigned char *dst; unsigned char *dstend; int unconv_num; if (from == NULL || *from == NULL) return 0; src = (const ucs4_t *) *from; srcend = src + *from_left; dst = (unsigned char *) *to; dstend = dst + *to_left; unconv_num = 0; while (src < srcend) { int count = utf8_wctomb(NULL, dst, *src, dstend-dst); if (count == RET_TOOSMALL) break; if (count == RET_ILSEQ) unconv_num++; src++; dst += count; } *from = (XPointer) src; *from_left = srcend - src; *to = (XPointer) dst; *to_left = dstend - dst; return unconv_num; } static XlcConvMethodsRec methods_ucstoutf8 = { close_converter, ucstoutf8, NULL }; static XlcConv open_ucstoutf8( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &methods_ucstoutf8); } /* Registers UTF-8 converters for a non-UTF-8 locale. */ void _XlcAddUtf8Converters( XLCd lcd) { _XlcSetConverter(lcd, XlcNCharSet, lcd, XlcNUtf8String, open_cstoutf8); _XlcSetConverter(lcd, XlcNUtf8String, lcd, XlcNCharSet, open_utf8tocs); _XlcSetConverter(lcd, XlcNUtf8String, lcd, XlcNChar, open_utf8tocs1); _XlcSetConverter(lcd, XlcNString, lcd, XlcNUtf8String, open_strtoutf8); _XlcSetConverter(lcd, XlcNUtf8String, lcd, XlcNString, open_utf8tostr); _XlcSetConverter(lcd, XlcNUcsChar, lcd, XlcNChar, open_ucstocs1); _XlcSetConverter(lcd, XlcNUcsChar, lcd, XlcNUtf8String, open_ucstoutf8); } /***************************************************************************/ /* Part II: UTF-8 locale loader conversion files * * Here we can assume that "multi-byte" is UTF-8 and that `wchar_t' is Unicode. */ /* from XlcNMultiByte to XlcNWideChar */ static int utf8towcs( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { unsigned char const *src; unsigned char const *srcend; wchar_t *dst; wchar_t *dstend; int unconv_num; if (from == NULL || *from == NULL) return 0; src = (unsigned char const *) *from; srcend = src + *from_left; dst = (wchar_t *) *to; dstend = dst + *to_left; unconv_num = 0; while (src < srcend && dst < dstend) { ucs4_t wc; int consumed = utf8_mbtowc(NULL, &wc, src, srcend-src); if (consumed == RET_TOOFEW(0)) break; if (consumed == RET_ILSEQ) { src++; *dst = BAD_WCHAR; unconv_num++; } else { src += consumed; *dst = wc; } dst++; } *from = (XPointer) src; *from_left = srcend - src; *to = (XPointer) dst; *to_left = dstend - dst; return unconv_num; } static XlcConvMethodsRec methods_utf8towcs = { close_converter, utf8towcs, NULL }; static XlcConv open_utf8towcs( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &methods_utf8towcs); } /* from XlcNWideChar to XlcNMultiByte */ static int wcstoutf8( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { wchar_t const *src; wchar_t const *srcend; unsigned char *dst; unsigned char *dstend; int unconv_num; if (from == NULL || *from == NULL) return 0; src = (wchar_t const *) *from; srcend = src + *from_left; dst = (unsigned char *) *to; dstend = dst + *to_left; unconv_num = 0; while (src < srcend) { int count = utf8_wctomb(NULL, dst, *src, dstend-dst); if (count == RET_TOOSMALL) break; if (count == RET_ILSEQ) { count = utf8_wctomb(NULL, dst, BAD_WCHAR, dstend-dst); if (count == RET_TOOSMALL) break; unconv_num++; } dst += count; src++; } *from = (XPointer) src; *from_left = srcend - src; *to = (XPointer) dst; *to_left = dstend - dst; return unconv_num; } static XlcConvMethodsRec methods_wcstoutf8 = { close_converter, wcstoutf8, NULL }; static XlcConv open_wcstoutf8( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &methods_wcstoutf8); } /* from XlcNString to XlcNWideChar */ static int our_strtowcs( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { unsigned char const *src; unsigned char const *srcend; wchar_t *dst; wchar_t *dstend; if (from == NULL || *from == NULL) return 0; src = (unsigned char const *) *from; srcend = src + *from_left; dst = (wchar_t *) *to; dstend = dst + *to_left; while (src < srcend && dst < dstend) *dst++ = (wchar_t) *src++; *from = (XPointer) src; *from_left = srcend - src; *to = (XPointer) dst; *to_left = dstend - dst; return 0; } static XlcConvMethodsRec methods_strtowcs = { close_converter, our_strtowcs, NULL }; static XlcConv open_strtowcs( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &methods_strtowcs); } /* from XlcNWideChar to XlcNString */ static int our_wcstostr( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { wchar_t const *src; wchar_t const *srcend; unsigned char *dst; unsigned char *dstend; int unconv_num; if (from == NULL || *from == NULL) return 0; src = (wchar_t const *) *from; srcend = src + *from_left; dst = (unsigned char *) *to; dstend = dst + *to_left; unconv_num = 0; while (src < srcend && dst < dstend) { unsigned int wc = *src++; if (wc < 0x80) *dst = wc; else { *dst = BAD_CHAR; unconv_num++; } dst++; } *from = (XPointer) src; *from_left = srcend - src; *to = (XPointer) dst; *to_left = dstend - dst; return unconv_num; } static XlcConvMethodsRec methods_wcstostr = { close_converter, our_wcstostr, NULL }; static XlcConv open_wcstostr( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &methods_wcstostr); } /* from XlcNCharSet to XlcNWideChar */ static int cstowcs( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { XlcCharSet charset; const char *name; Utf8Conv convptr; int i; unsigned char const *src; unsigned char const *srcend; wchar_t *dst; wchar_t *dstend; int unconv_num; if (from == NULL || *from == NULL) return 0; if (num_args < 1) return -1; charset = (XlcCharSet) args[0]; name = charset->encoding_name; /* not charset->name because the latter has a ":GL"/":GR" suffix */ for (convptr = all_charsets, i = all_charsets_count-1; i > 0; convptr++, i--) if (!strcmp(convptr->name, name)) break; if (i == 0) return -1; src = (unsigned char const *) *from; srcend = src + *from_left; dst = (wchar_t *) *to; dstend = dst + *to_left; unconv_num = 0; while (src < srcend && dst < dstend) { unsigned int wc; int consumed; consumed = convptr->cstowc(conv, &wc, src, srcend-src); if (consumed == RET_ILSEQ) return -1; if (consumed == RET_TOOFEW(0)) break; *dst++ = wc; src += consumed; } *from = (XPointer) src; *from_left = srcend - src; *to = (XPointer) dst; *to_left = dstend - dst; return unconv_num; } static XlcConvMethodsRec methods_cstowcs = { close_converter, cstowcs, NULL }; static XlcConv open_cstowcs( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { lazy_init_all_charsets(); return create_conv(from_lcd, &methods_cstowcs); } /* from XlcNWideChar to XlcNCharSet */ static int wcstocs( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { Utf8Conv *preferred_charsets; XlcCharSet last_charset = NULL; wchar_t const *src; wchar_t const *srcend; unsigned char *dst; unsigned char *dstend; int unconv_num; if (from == NULL || *from == NULL) return 0; preferred_charsets = (Utf8Conv *) conv->state; src = (wchar_t const *) *from; srcend = src + *from_left; dst = (unsigned char *) *to; dstend = dst + *to_left; unconv_num = 0; while (src < srcend && dst < dstend) { Utf8Conv chosen_charset = NULL; XlcSide chosen_side = XlcNONE; wchar_t wc = *src; int count; count = charset_wctocs(preferred_charsets, &chosen_charset, &chosen_side, conv, dst, wc, dstend-dst); if (count == RET_TOOSMALL) break; if (count == RET_ILSEQ) { src++; unconv_num++; continue; } if (last_charset == NULL) { last_charset = _XlcGetCharSetWithSide(chosen_charset->name, chosen_side); if (last_charset == NULL) { src++; unconv_num++; continue; } } else { if (!(last_charset->xrm_encoding_name == chosen_charset->xrm_name && (last_charset->side == XlcGLGR || last_charset->side == chosen_side))) break; } src++; dst += count; } if (last_charset == NULL) return -1; *from = (XPointer) src; *from_left = srcend - src; *to = (XPointer) dst; *to_left = dstend - dst; if (num_args >= 1) *((XlcCharSet *)args[0]) = last_charset; return unconv_num; } static XlcConvMethodsRec methods_wcstocs = { close_tocs_converter, wcstocs, NULL }; static XlcConv open_wcstocs( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_tocs_conv(from_lcd, &methods_wcstocs); } /* from XlcNWideChar to XlcNChar */ static int wcstocs1( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { Utf8Conv *preferred_charsets; XlcCharSet last_charset = NULL; wchar_t const *src; wchar_t const *srcend; unsigned char *dst; unsigned char *dstend; int unconv_num; if (from == NULL || *from == NULL) return 0; preferred_charsets = (Utf8Conv *) conv->state; src = (wchar_t const *) *from; srcend = src + *from_left; dst = (unsigned char *) *to; dstend = dst + *to_left; unconv_num = 0; while (src < srcend && dst < dstend) { Utf8Conv chosen_charset = NULL; XlcSide chosen_side = XlcNONE; wchar_t wc = *src; int count; count = charset_wctocs(preferred_charsets, &chosen_charset, &chosen_side, conv, dst, wc, dstend-dst); if (count == RET_TOOSMALL) break; if (count == RET_ILSEQ) { src++; unconv_num++; continue; } if (last_charset == NULL) { last_charset = _XlcGetCharSetWithSide(chosen_charset->name, chosen_side); if (last_charset == NULL) { src++; unconv_num++; continue; } } else { if (!(last_charset->xrm_encoding_name == chosen_charset->xrm_name && (last_charset->side == XlcGLGR || last_charset->side == chosen_side))) break; } src++; dst += count; break; } if (last_charset == NULL) return -1; *from = (XPointer) src; *from_left = srcend - src; *to = (XPointer) dst; *to_left = dstend - dst; if (num_args >= 1) *((XlcCharSet *)args[0]) = last_charset; return unconv_num; } static XlcConvMethodsRec methods_wcstocs1 = { close_tocs_converter, wcstocs1, NULL }; static XlcConv open_wcstocs1( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_tocs_conv(from_lcd, &methods_wcstocs1); } /* trivial, no conversion */ static int identity( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { unsigned char const *src; unsigned char const *srcend; unsigned char *dst; unsigned char *dstend; if (from == NULL || *from == NULL) return 0; src = (unsigned char const *) *from; srcend = src + *from_left; dst = (unsigned char *) *to; dstend = dst + *to_left; while (src < srcend && dst < dstend) *dst++ = *src++; *from = (XPointer) src; *from_left = srcend - src; *to = (XPointer) dst; *to_left = dstend - dst; return 0; } static XlcConvMethodsRec methods_identity = { close_converter, identity, NULL }; static XlcConv open_identity( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &methods_identity); } /* from MultiByte/WideChar to FontCharSet. */ /* They really use converters to CharSet * but with different create_conv procedure. */ static XlcConv create_tofontcs_conv( XLCd lcd, XlcConvMethods methods) { XlcConv conv; int i, num, k, count; char **value, buf[20]; Utf8Conv *preferred; lazy_init_all_charsets(); for (i = 0, num = 0;; i++) { snprintf(buf, sizeof(buf), "fs%d.charset.name", i); _XlcGetResource(lcd, "XLC_FONTSET", buf, &value, &count); if (count < 1) { snprintf(buf, sizeof(buf), "fs%d.charset", i); _XlcGetResource(lcd, "XLC_FONTSET", buf, &value, &count); if (count < 1) break; } num += count; } conv = Xmalloc(sizeof(XlcConvRec) + (num + 1) * sizeof(Utf8Conv)); if (conv == (XlcConv) NULL) return (XlcConv) NULL; preferred = (Utf8Conv *) ((char *) conv + sizeof(XlcConvRec)); /* Loop through all fontsets mentioned in the locale. */ for (i = 0, num = 0;; i++) { snprintf(buf, sizeof(buf), "fs%d.charset.name", i); _XlcGetResource(lcd, "XLC_FONTSET", buf, &value, &count); if (count < 1) { snprintf(buf, sizeof(buf), "fs%d.charset", i); _XlcGetResource(lcd, "XLC_FONTSET", buf, &value, &count); if (count < 1) break; } while (count-- > 0) { XlcCharSet charset = _XlcGetCharSet(*value++); const char *name; if (charset == (XlcCharSet) NULL) continue; name = charset->encoding_name; /* If it wasn't already encountered... */ for (k = num - 1; k >= 0; k--) if (!strcmp(preferred[k]->name, name)) break; if (k < 0) { /* For fonts "ISO10646-1" means ucs2, not utf8.*/ if (!strcmp("ISO10646-1", name)) { preferred[num++] = &all_charsets[ucs2_conv_index]; continue; } /* Look it up in all_charsets[]. */ for (k = 0; k < all_charsets_count-1; k++) if (!strcmp(all_charsets[k].name, name)) { /* Add it to the preferred set. */ preferred[num++] = &all_charsets[k]; break; } } } } preferred[num] = (Utf8Conv) NULL; conv->methods = methods; conv->state = (XPointer) preferred; return conv; } static XlcConv open_wcstofcs( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_tofontcs_conv(from_lcd, &methods_wcstocs); } static XlcConv open_utf8tofcs( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_tofontcs_conv(from_lcd, &methods_utf8tocs); } /* ========================== iconv Stuff ================================ */ /* from XlcNCharSet to XlcNMultiByte */ static int iconv_cstombs(XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { XlcCharSet charset; char const *name; Utf8Conv convptr; int i; unsigned char const *src; unsigned char const *srcend; unsigned char *dst; unsigned char *dstend; int unconv_num; if (from == NULL || *from == NULL) return 0; if (num_args < 1) return -1; charset = (XlcCharSet) args[0]; name = charset->encoding_name; /* not charset->name because the latter has a ":GL"/":GR" suffix */ for (convptr = all_charsets, i = all_charsets_count-1; i > 0; convptr++, i--) if (!strcmp(convptr->name, name)) break; if (i == 0) return -1; src = (unsigned char const *) *from; srcend = src + *from_left; dst = (unsigned char *) *to; dstend = dst + *to_left; unconv_num = 0; while (src < srcend) { ucs4_t wc; int consumed; int count; consumed = convptr->cstowc(conv, &wc, src, srcend-src); if (consumed == RET_ILSEQ) return -1; if (consumed == RET_TOOFEW(0)) break; /* Use stdc iconv to convert widechar -> multibyte */ count = wctomb((char *)dst, wc); if (count == 0) break; if (count == -1) { count = wctomb((char *)dst, BAD_WCHAR); if (count == 0) break; unconv_num++; } src += consumed; dst += count; } *from = (XPointer) src; *from_left = srcend - src; *to = (XPointer) dst; *to_left = dstend - dst; return unconv_num; } static XlcConvMethodsRec iconv_cstombs_methods = { close_converter, iconv_cstombs, NULL }; static XlcConv open_iconv_cstombs(XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { lazy_init_all_charsets(); return create_conv(from_lcd, &iconv_cstombs_methods); } static int iconv_mbstocs(XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { Utf8Conv *preferred_charsets; XlcCharSet last_charset = NULL; unsigned char const *src; unsigned char const *srcend; unsigned char *dst; unsigned char *dstend; int unconv_num; if (from == NULL || *from == NULL) return 0; preferred_charsets = (Utf8Conv *) conv->state; src = (unsigned char const *) *from; srcend = src + *from_left; dst = (unsigned char *) *to; dstend = dst + *to_left; unconv_num = 0; while (src < srcend && dst < dstend) { Utf8Conv chosen_charset = NULL; XlcSide chosen_side = XlcNONE; wchar_t wc; int consumed; int count; /* Uses stdc iconv to convert multibyte -> widechar */ consumed = mbtowc(&wc, (const char *)src, srcend-src); if (consumed == 0) break; if (consumed == -1) { src++; unconv_num++; continue; } count = charset_wctocs(preferred_charsets, &chosen_charset, &chosen_side, conv, dst, wc, dstend-dst); if (count == RET_TOOSMALL) break; if (count == RET_ILSEQ) { src += consumed; unconv_num++; continue; } if (last_charset == NULL) { last_charset = _XlcGetCharSetWithSide(chosen_charset->name, chosen_side); if (last_charset == NULL) { src += consumed; unconv_num++; continue; } } else { if (!(last_charset->xrm_encoding_name == chosen_charset->xrm_name && (last_charset->side == XlcGLGR || last_charset->side == chosen_side))) break; } src += consumed; dst += count; } if (last_charset == NULL) return -1; *from = (XPointer) src; *from_left = srcend - src; *to = (XPointer) dst; *to_left = dstend - dst; if (num_args >= 1) *((XlcCharSet *)args[0]) = last_charset; return unconv_num; } static XlcConvMethodsRec iconv_mbstocs_methods = { close_tocs_converter, iconv_mbstocs, NULL }; static XlcConv open_iconv_mbstocs(XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_tocs_conv(from_lcd, &iconv_mbstocs_methods); } /* from XlcNMultiByte to XlcNChar */ static int iconv_mbtocs(XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { Utf8Conv *preferred_charsets; XlcCharSet last_charset = NULL; unsigned char const *src; unsigned char const *srcend; unsigned char *dst; unsigned char *dstend; int unconv_num; if (from == NULL || *from == NULL) return 0; preferred_charsets = (Utf8Conv *) conv->state; src = (unsigned char const *) *from; srcend = src + *from_left; dst = (unsigned char *) *to; dstend = dst + *to_left; unconv_num = 0; while (src < srcend && dst < dstend) { Utf8Conv chosen_charset = NULL; XlcSide chosen_side = XlcNONE; wchar_t wc; int consumed; int count; /* Uses stdc iconv to convert multibyte -> widechar */ consumed = mbtowc(&wc, (const char *)src, srcend-src); if (consumed == 0) break; if (consumed == -1) { src++; unconv_num++; continue; } count = charset_wctocs(preferred_charsets, &chosen_charset, &chosen_side, conv, dst, wc, dstend-dst); if (count == RET_TOOSMALL) break; if (count == RET_ILSEQ) { src += consumed; unconv_num++; continue; } if (last_charset == NULL) { last_charset = _XlcGetCharSetWithSide(chosen_charset->name, chosen_side); if (last_charset == NULL) { src += consumed; unconv_num++; continue; } } else { if (!(last_charset->xrm_encoding_name == chosen_charset->xrm_name && (last_charset->side == XlcGLGR || last_charset->side == chosen_side))) break; } src += consumed; dst += count; } if (last_charset == NULL) return -1; *from = (XPointer) src; *from_left = srcend - src; *to = (XPointer) dst; *to_left = dstend - dst; if (num_args >= 1) *((XlcCharSet *)args[0]) = last_charset; return unconv_num; } static XlcConvMethodsRec iconv_mbtocs_methods = { close_tocs_converter, iconv_mbtocs, NULL }; static XlcConv open_iconv_mbtocs(XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_tocs_conv(from_lcd, &iconv_mbtocs_methods ); } /* from XlcNMultiByte to XlcNString */ static int iconv_mbstostr(XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { unsigned char const *src; unsigned char const *srcend; unsigned char *dst; unsigned char *dstend; int unconv_num; if (from == NULL || *from == NULL) return 0; src = (unsigned char const *) *from; srcend = src + *from_left; dst = (unsigned char *) *to; dstend = dst + *to_left; unconv_num = 0; while (src < srcend) { unsigned char c; wchar_t wc; int consumed; /* Uses stdc iconv to convert multibyte -> widechar */ consumed = mbtowc(&wc, (const char *)src, srcend-src); if (consumed == 0) break; if (dst == dstend) break; if (consumed == -1) { consumed = 1; c = BAD_CHAR; unconv_num++; } else { if ((wc & ~(wchar_t)0xff) != 0) { c = BAD_CHAR; unconv_num++; } else c = (unsigned char) wc; } *dst++ = c; src += consumed; } *from = (XPointer) src; *from_left = srcend - src; *to = (XPointer) dst; *to_left = dstend - dst; return unconv_num; } static XlcConvMethodsRec iconv_mbstostr_methods = { close_converter, iconv_mbstostr, NULL }; static XlcConv open_iconv_mbstostr(XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &iconv_mbstostr_methods); } /* from XlcNString to XlcNMultiByte */ static int iconv_strtombs(XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { unsigned char const *src; unsigned char const *srcend; unsigned char *dst; unsigned char *dstend; if (from == NULL || *from == NULL) return 0; src = (unsigned char const *) *from; srcend = src + *from_left; dst = (unsigned char *) *to; dstend = dst + *to_left; while (src < srcend) { int count = wctomb((char *)dst, *src); if (count < 0) break; dst += count; src++; } *from = (XPointer) src; *from_left = srcend - src; *to = (XPointer) dst; *to_left = dstend - dst; return 0; } static XlcConvMethodsRec iconv_strtombs_methods= { close_converter, iconv_strtombs, NULL }; static XlcConv open_iconv_strtombs(XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &iconv_strtombs_methods); } /***************************************************************************/ /* Part II: An iconv locale loader. * *Here we can assume that "multi-byte" is iconv and that `wchar_t' is Unicode. */ /* from XlcNMultiByte to XlcNWideChar */ static int iconv_mbstowcs(XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { char *src = *((char **) from); wchar_t *dst = *((wchar_t **) to); int src_left = *from_left; int dst_left = *to_left; int length, unconv_num = 0; while (src_left > 0 && dst_left > 0) { length = mbtowc(dst, src, src_left); if (length > 0) { src += length; src_left -= length; if (dst) dst++; dst_left--; } else if (length < 0) { src++; src_left--; unconv_num++; } else { /* null ? */ src++; src_left--; if (dst) *dst++ = L'\0'; dst_left--; } } *from = (XPointer) src; if (dst) *to = (XPointer) dst; *from_left = src_left; *to_left = dst_left; return unconv_num; } static XlcConvMethodsRec iconv_mbstowcs_methods = { close_converter, iconv_mbstowcs, NULL } ; static XlcConv open_iconv_mbstowcs(XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &iconv_mbstowcs_methods); } static int iconv_wcstombs(XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { wchar_t *src = *((wchar_t **) from); char *dst = *((char **) to); int src_left = *from_left; int dst_left = *to_left; int length, unconv_num = 0; while (src_left > 0 && dst_left >= MB_CUR_MAX) { length = wctomb(dst, *src); /* XXX */ if (length > 0) { src++; src_left--; if (dst) dst += length; dst_left -= length; } else if (length < 0) { src++; src_left--; unconv_num++; } } *from = (XPointer) src; if (dst) *to = (XPointer) dst; *from_left = src_left; *to_left = dst_left; return unconv_num; } static XlcConvMethodsRec iconv_wcstombs_methods = { close_converter, iconv_wcstombs, NULL } ; static XlcConv open_iconv_wcstombs(XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &iconv_wcstombs_methods); } static XlcConv open_iconv_mbstofcs( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_tofontcs_conv(from_lcd, &iconv_mbstocs_methods); } /* Registers UTF-8 converters for a UTF-8 locale. */ void _XlcAddUtf8LocaleConverters( XLCd lcd) { /* Register elementary converters. */ _XlcSetConverter(lcd, XlcNMultiByte, lcd, XlcNWideChar, open_utf8towcs); _XlcSetConverter(lcd, XlcNWideChar, lcd, XlcNMultiByte, open_wcstoutf8); _XlcSetConverter(lcd, XlcNWideChar, lcd, XlcNString, open_wcstostr); _XlcSetConverter(lcd, XlcNString, lcd, XlcNWideChar, open_strtowcs); /* Register converters for XlcNCharSet. This implicitly provides * converters from and to XlcNCompoundText. */ _XlcSetConverter(lcd, XlcNCharSet, lcd, XlcNMultiByte, open_cstoutf8); _XlcSetConverter(lcd, XlcNMultiByte, lcd, XlcNCharSet, open_utf8tocs); _XlcSetConverter(lcd, XlcNMultiByte, lcd, XlcNChar, open_utf8tocs1); _XlcSetConverter(lcd, XlcNCharSet, lcd, XlcNWideChar, open_cstowcs); _XlcSetConverter(lcd, XlcNWideChar, lcd, XlcNCharSet, open_wcstocs); _XlcSetConverter(lcd, XlcNWideChar, lcd, XlcNChar, open_wcstocs1); _XlcSetConverter(lcd, XlcNString, lcd, XlcNMultiByte, open_strtoutf8); _XlcSetConverter(lcd, XlcNMultiByte, lcd, XlcNString, open_utf8tostr); _XlcSetConverter(lcd, XlcNUtf8String, lcd, XlcNMultiByte, open_identity); _XlcSetConverter(lcd, XlcNMultiByte, lcd, XlcNUtf8String, open_identity); /* Register converters for XlcNFontCharSet */ _XlcSetConverter(lcd, XlcNMultiByte, lcd, XlcNFontCharSet, open_utf8tofcs); _XlcSetConverter(lcd, XlcNWideChar, lcd, XlcNFontCharSet, open_wcstofcs); } void _XlcAddGB18030LocaleConverters( XLCd lcd) { /* Register elementary converters. */ _XlcSetConverter(lcd, XlcNMultiByte, lcd, XlcNWideChar, open_iconv_mbstowcs); _XlcSetConverter(lcd, XlcNWideChar, lcd, XlcNMultiByte, open_iconv_wcstombs); /* Register converters for XlcNCharSet. This implicitly provides * converters from and to XlcNCompoundText. */ _XlcSetConverter(lcd, XlcNCharSet, lcd, XlcNMultiByte, open_iconv_cstombs); _XlcSetConverter(lcd, XlcNMultiByte, lcd, XlcNCharSet, open_iconv_mbstocs); _XlcSetConverter(lcd, XlcNMultiByte, lcd, XlcNChar, open_iconv_mbtocs); _XlcSetConverter(lcd, XlcNString, lcd, XlcNMultiByte, open_iconv_strtombs); _XlcSetConverter(lcd, XlcNMultiByte, lcd, XlcNString, open_iconv_mbstostr); /* Register converters for XlcNFontCharSet */ _XlcSetConverter(lcd, XlcNMultiByte, lcd, XlcNFontCharSet, open_iconv_mbstofcs); _XlcSetConverter(lcd, XlcNWideChar, lcd, XlcNString, open_wcstostr); _XlcSetConverter(lcd, XlcNString, lcd, XlcNWideChar, open_strtowcs); _XlcSetConverter(lcd, XlcNCharSet, lcd, XlcNWideChar, open_cstowcs); _XlcSetConverter(lcd, XlcNWideChar, lcd, XlcNCharSet, open_wcstocs); _XlcSetConverter(lcd, XlcNWideChar, lcd, XlcNChar, open_wcstocs1); /* Register converters for XlcNFontCharSet */ _XlcSetConverter(lcd, XlcNWideChar, lcd, XlcNFontCharSet, open_wcstofcs); } lcd, &iconv_mbstocs_methods); } /* from XlcNMultiByte to XlcNChar */ static int iconv_mbtocs(XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { Utf8Conv *preferred_charsets; XlcCharSet last_charset = NULL; unsigned char const *src; unsigned char const *srcend; unsigned char *dst; unsigned char *dstend; int unconv_num; if (from == NULL || *from == NULL) returlibX11-1.6.3/src/xlibi18n/XimintP.h000064401431060000012000000235041247741723500170500ustar00alancstaff00002660200006/* * Copyright 1991, 1992 Oracle and/or its affiliates. All rights reserved. * * 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: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. */ /****************************************************************** Copyright 1992, 1993, 1994 by FUJITSU LIMITED Copyright 1993, 1994 by Sony Corporation Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of FUJITSU LIMITED and Sony Corporation not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED and Sony Corporation makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED AND SONY CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU LIMITED OR SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Hideki Hiura (hhiura@Sun.COM) Sun Microsystems, Inc. Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp Makoto Wakamatsu Sony Corporation makoto@sm.sony.co.jp Hiroyuki Miyamoto Digital Equipment Corporation miyamoto@jrd.dec.com ******************************************************************/ #ifndef _XIMINTP_H #define _XIMINTP_H #include "XimProto.h" #include "XlcPublic.h" /* * for protocol layer callback function */ typedef Bool (*XimProtoIntrProc)( Xim, INT16, XPointer, XPointer ); typedef struct _XimProtoIntrRec { XimProtoIntrProc func; CARD16 major_code; CARD16 minor_code; XPointer call_data; struct _XimProtoIntrRec *next; } XimProtoIntrRec; /* * for transport layer methods */ typedef Bool (*XimTransConnectProc)( Xim ); typedef Bool (*XimTransShutdownProc)( Xim ); typedef Bool (*XimTransWriteProc)( Xim, INT16, XPointer ); typedef Bool (*XimTransReadProc)( Xim, XPointer, int, int * ); typedef void (*XimTransFlushProc)( Xim ); typedef Bool (*XimTransRegDispatcher)( Xim, Bool (*)(Xim, INT16, XPointer, XPointer), XPointer ); typedef Bool (*XimTransCallDispatcher)( Xim, INT16, XPointer ); /* * private part of IM */ typedef struct _XimProtoPrivateRec { /* The first fields are identical with XimCommonPrivateRec. */ XlcConv ctom_conv; XlcConv ctow_conv; XlcConv ctoutf8_conv; XlcConv cstomb_conv; XlcConv cstowc_conv; XlcConv cstoutf8_conv; XlcConv ucstoc_conv; XlcConv ucstoutf8_conv; Window im_window; XIMID imid; CARD16 unused; XIMStyles *default_styles; CARD32 *im_onkeylist; CARD32 *im_offkeylist; BITMASK32 flag; BITMASK32 registed_filter_event; EVENTMASK forward_event_mask; EVENTMASK synchronous_event_mask; XimProtoIntrRec *intrproto; XIMResourceList im_inner_resources; unsigned int im_num_inner_resources; XIMResourceList ic_inner_resources; unsigned int ic_num_inner_resources; char *hold_data; int hold_data_len; char *locale_name; CARD16 protocol_major_version; CARD16 protocol_minor_version; XrmQuark *saved_imvalues; int num_saved_imvalues; /* * transport specific */ XimTransConnectProc connect; XimTransShutdownProc shutdown; XimTransWriteProc write; XimTransReadProc read; XimTransFlushProc flush; XimTransRegDispatcher register_dispatcher; XimTransCallDispatcher call_dispatcher; XPointer spec; } XimProtoPrivateRec; /* * bit mask for the flag of XIMPrivateRec */ #define SERVER_CONNECTED (1L) #define DYNAMIC_EVENT_FLOW (1L << 1) #define USE_AUTHORIZATION_FUNC (1L << 2) #ifdef XIM_CONNECTABLE #define DELAYBINDABLE (1L << 3) #define RECONNECTABLE (1L << 4) #endif /* XIM_CONNECTABLE */ #define FABRICATED (1L << 5) #define NEED_SYNC_REPLY (1L << 6) /* * macro for the flag of XIMPrivateRec */ #define IS_SERVER_CONNECTED(im) \ ((((Xim)im))->private.proto.flag & SERVER_CONNECTED) #define MARK_SERVER_CONNECTED(im) \ ((((Xim)im))->private.proto.flag |= SERVER_CONNECTED) #define UNMARK_SERVER_CONNECTED(im) \ ((((Xim)im))->private.proto.flag &= ~SERVER_CONNECTED) #define IS_DYNAMIC_EVENT_FLOW(im) \ (((Xim)im)->private.proto.flag & DYNAMIC_EVENT_FLOW) #define MARK_DYNAMIC_EVENT_FLOW(im) \ (((Xim)im)->private.proto.flag |= DYNAMIC_EVENT_FLOW) #define IS_USE_AUTHORIZATION_FUNC(im) \ (((Xim)im)->private.proto.flag & USE_AUTHORIZATION_FUNC) #define MARK_USE_AUTHORIZATION_FUNC(im) \ (((Xim)im)->private.proto.flag |= USE_AUTHORIZATION_FUNC) #ifdef XIM_CONNECTABLE #define IS_DELAYBINDABLE(im) \ (((Xim)im)->private.proto.flag & DELAYBINDABLE) #define MARK_DELAYBINDABLE(im) \ (((Xim)im)->private.proto.flag |= DELAYBINDABLE) #define IS_RECONNECTABLE(im) \ (((Xim)im)->private.proto.flag & RECONNECTABLE) #define MARK_RECONNECTABLE(im) \ (((Xim)im)->private.proto.flag |= RECONNECTABLE) #define IS_CONNECTABLE(im) \ (((Xim)im)->private.proto.flag & (DELAYBINDABLE|RECONNECTABLE)) #define UNMAKE_CONNECTABLE(im) \ (((Xim)im)->private.proto.flag &= ~(DELAYBINDABLE|RECONNECTABLE)) #endif /* XIM_CONNECTABLE */ #define IS_FABRICATED(im) \ (((Xim)im)->private.proto.flag & FABRICATED) #define MARK_FABRICATED(im) \ (((Xim)im)->private.proto.flag |= FABRICATED) #define UNMARK_FABRICATED(im) \ (((Xim)im)->private.proto.flag &= ~FABRICATED) #define IS_NEED_SYNC_REPLY(im) \ (((Xim)im)->private.proto.flag & NEED_SYNC_REPLY) #define MARK_NEED_SYNC_REPLY(im) \ (((Xim)im)->private.proto.flag |= NEED_SYNC_REPLY) #define UNMARK_NEED_SYNC_REPLY(im) \ (((Xim)im)->private.proto.flag &= ~NEED_SYNC_REPLY) /* * bit mask for the register_filter_event of XIMPrivateRec/XICPrivateRec */ #define KEYPRESS_MASK (1L) #define KEYRELEASE_MASK (1L << 1) #define DESTROYNOTIFY_MASK (1L << 2) typedef struct _XimCommitInfoRec { struct _XimCommitInfoRec *next; char *string; int string_len; KeySym *keysym; int keysym_len; } XimCommitInfoRec, *XimCommitInfo; typedef struct _XimPendingCallback { int major_opcode; Xim im; Xic ic; char *proto; int proto_len; struct _XimPendingCallback *next; } XimPendingCallbackRec, *XimPendingCallback; /* * private part of IC */ typedef struct _XicProtoPrivateRec { XICID icid; /* ICID */ CARD16 dmy; BITMASK32 flag; /* Input Mode */ BITMASK32 registed_filter_event; /* registed filter mask */ EVENTMASK forward_event_mask; /* forward event mask */ EVENTMASK synchronous_event_mask;/* sync event mask */ EVENTMASK filter_event_mask; /* negrect event mask */ EVENTMASK intercept_event_mask; /* deselect event mask */ EVENTMASK select_event_mask; /* select event mask */ char *preedit_font; /* Base font name list */ int preedit_font_length; /* length of base font name */ char *status_font; /* Base font name list */ int status_font_length; /* length of base font name */ XimCommitInfo commit_info; XIMResourceList ic_resources; unsigned int ic_num_resources; XIMResourceList ic_inner_resources; unsigned int ic_num_inner_resources; XrmQuark *saved_icvalues; int num_saved_icvalues; XimPendingCallback pend_cb_que; Bool waitCallback; } XicProtoPrivateRec ; /* * bit mask for the flag of XICPrivateRec */ #define IC_CONNECTED (1L) /* * macro for the flag of XICPrivateRec */ #define IS_IC_CONNECTED(ic) \ (((Xic)ic)->private.proto.flag & IC_CONNECTED) #define MARK_IC_CONNECTED(ic) \ (((Xic)ic)->private.proto.flag |= IC_CONNECTED) #define UNMARK_IC_CONNECTED(ic) \ (((Xic)ic)->private.proto.flag &= ~IC_CONNECTED) /* * macro for the filter_event_mask of XICPrivateRec */ #define IS_NEGLECT_EVENT(ic, mask) \ (((Xic)ic)->private.proto.filter_event_mask & (mask)) /* * macro for the forward_event_mask of XICPrivateRec */ #define IS_FORWARD_EVENT(ic, mask) \ (((Xic)ic)->private.proto.forward_event_mask & (mask)) /* * macro for the synchronous_event_mask of XICPrivateRec */ #define IS_SYNCHRONOUS_EVENT(ic, mask) \ ((((Xic)ic)->private.proto.synchronous_event_mask & (mask)) ? True: False) #define XIM_MAXIMNAMELEN 64 #define XIM_MAXLCNAMELEN 64 #endif /* _XIMINTP_H */ libX11-1.6.3/src/xlibi18n/mbWMProps.c000064401431060000012000000041231247741723500173350ustar00alancstaff00002660200006/* Copyright 1991, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include void XmbSetWMProperties ( Display *dpy, Window w, _Xconst char *windowName, _Xconst char *iconName, char **argv, int argc, XSizeHints *sizeHints, XWMHints *wmHints, XClassHint *classHints) { XTextProperty wname, iname; XTextProperty *wprop = NULL; XTextProperty *iprop = NULL; if (windowName && XmbTextListToTextProperty(dpy, (char**)&windowName, 1, XStdICCTextStyle, &wname) >= Success) wprop = &wname; if (iconName && XmbTextListToTextProperty(dpy, (char**)&iconName, 1, XStdICCTextStyle, &iname) >= Success) iprop = &iname; XSetWMProperties(dpy, w, wprop, iprop, argv, argc, sizeHints, wmHints, classHints); if (wprop) Xfree(wname.value); if (iprop) Xfree(iname.value); /* Note: The WM_LOCALE_NAME property is set by XSetWMProperties. */ } te, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WlibX11-1.6.3/src/xlibi18n/lcPrTxt.c000064401431060000012000000153661247741723500170620ustar00alancstaff00002660200006/* * Copyright 1992, 1993 by TOSHIBA Corp. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of TOSHIBA not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. TOSHIBA make no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * * Author: Katsuhisa Yano TOSHIBA Corp. * mopi@osa.ilab.toshiba.co.jp */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "XlcPubI.h" #include #include static XPointer * alloc_list( Bool is_wide_char, int count, int nitems) { if (is_wide_char) { wchar_t **wstr_list; wstr_list = Xmalloc(count * sizeof(wchar_t *)); if (wstr_list == NULL) return (XPointer *) NULL; *wstr_list = Xmalloc(nitems * sizeof(wchar_t)); if (*wstr_list == NULL) { Xfree(wstr_list); return (XPointer *) NULL; } return (XPointer *) wstr_list; } else { char **str_list; str_list = Xmalloc(count * sizeof(char *)); if (str_list == NULL) return (XPointer *) NULL; *str_list = Xmalloc(nitems); if (*str_list == NULL) { Xfree(str_list); return (XPointer *) NULL; } return (XPointer *) str_list; } } static void copy_list( Bool is_wide_char, XPointer text, XPointer *list, int count) { int length; if (is_wide_char) { wchar_t *wc_text, *wstr, **wstr_list; wc_text = (wchar_t *) text; wstr_list = (wchar_t **) list; for (wstr = *wstr_list; count > 0; count--, wstr_list++) { _Xwcscpy(wstr, wc_text); *wstr_list = wstr; length = _Xwcslen(wstr) + 1; wstr += length; wc_text += length; } } else { char *mb_text, *str, **str_list; mb_text = (char *) text; str_list = (char **) list; for (str = *str_list; count > 0; count--, str_list++) { strcpy(str, mb_text); *str_list = str; length = strlen(str) + 1; str += length; mb_text += length; } } } static int _XTextPropertyToTextList( XLCd lcd, Display *dpy, const XTextProperty *text_prop, const char *to_type, XPointer **list_ret, int *count_ret) { XlcConv conv = NULL; const char *from_type; XPointer from, to, buf; char *str_ptr, *last_ptr; Atom encoding; int from_left, to_left, buf_len, ret, len; int unconv_num, nitems = text_prop->nitems; Bool is_wide_char = False, do_strcpy = False; if (strcmp(XlcNWideChar, to_type) == 0) is_wide_char = True; if (nitems <= 0) { *list_ret = NULL; *count_ret = 0; return Success; } if (text_prop->format != 8) return XConverterNotFound; encoding = text_prop->encoding; if (encoding == XA_STRING) from_type = XlcNString; else if (encoding == XInternAtom(dpy, "UTF8_STRING", False)) from_type = XlcNUtf8String; else if (encoding == XInternAtom(dpy, "COMPOUND_TEXT", False)) from_type = XlcNCompoundText; else if (encoding == XInternAtom(dpy, XLC_PUBLIC(lcd, encoding_name), False)) from_type = XlcNMultiByte; else return XConverterNotFound; if (is_wide_char) { buf_len = (text_prop->nitems + 1) * sizeof(wchar_t);; } else { if (strcmp(to_type, XlcNUtf8String) == 0) buf_len = text_prop->nitems * 6 + 1; else buf_len = text_prop->nitems * XLC_PUBLIC(lcd, mb_cur_max) + 1; } buf = Xmalloc(buf_len); if (buf == NULL) return XNoMemory; to = buf; to_left = buf_len; /* can be XlcNMultiByte to XlcNMultiByte, or XlcNUtf8String to XlcNUtf8String */ if (!strcmp(from_type, to_type)) { do_strcpy = True; } else { conv = _XlcOpenConverter(lcd, from_type, lcd, to_type); if (conv == NULL) { Xfree(buf); return XConverterNotFound; } } last_ptr = str_ptr = (char *) text_prop->value; unconv_num = *count_ret = 0; while (1) { if (nitems == 0 || *str_ptr == 0) { from = (XPointer) last_ptr; from_left = str_ptr - last_ptr; last_ptr = str_ptr; if (do_strcpy) { len = min(from_left, to_left); strncpy(to, from, len); from += len; to += len; from_left -= len; to_left -= len; ret = 0; } else { ret = _XlcConvert(conv, &from, &from_left, &to, &to_left, NULL, 0); } if (ret < 0) continue; unconv_num += ret; (*count_ret)++; if (nitems == 0) break; last_ptr = ++str_ptr; if (is_wide_char) { *((wchar_t *)to) = (wchar_t) 0; to += sizeof(wchar_t); to_left -= sizeof(wchar_t); } else { *((char *)to) = '\0'; to++; to_left--; } if (! do_strcpy) _XlcResetConverter(conv); } else str_ptr++; nitems--; } if (! do_strcpy) _XlcCloseConverter(conv); if (is_wide_char) { *((wchar_t *) to) = (wchar_t) 0; to_left -= sizeof(wchar_t); } else { *((char *) to) = '\0'; to_left--; } *list_ret = alloc_list(is_wide_char, *count_ret, buf_len - to_left); if (*list_ret) copy_list(is_wide_char, buf, *list_ret, *count_ret); Xfree(buf); return unconv_num; } int _XmbTextPropertyToTextList( XLCd lcd, Display *dpy, const XTextProperty *text_prop, char ***list_ret, int *count_ret) { return _XTextPropertyToTextList(lcd, dpy, text_prop, XlcNMultiByte, (XPointer **) list_ret, count_ret); } int _XwcTextPropertyToTextList( XLCd lcd, Display *dpy, const XTextProperty *text_prop, wchar_t ***list_ret, int *count_ret) { return _XTextPropertyToTextList(lcd, dpy, text_prop, XlcNWideChar, (XPointer **) list_ret, count_ret); } int _Xutf8TextPropertyToTextList( XLCd lcd, Display *dpy, const XTextProperty *text_prop, char ***list_ret, int *count_ret) { return _XTextPropertyToTextList(lcd, dpy, text_prop, XlcNUtf8String, (XPointer **) list_ret, count_ret); } void _XwcFreeStringList( XLCd lcd, wchar_t **list) { if (list) { Xfree(*list); Xfree(list); } } libX11-1.6.3/src/xlibi18n/lcPublic.c000064401431060000012000000174171247741723500172160ustar00alancstaff00002660200006/* * Copyright 1992, 1993 by TOSHIBA Corp. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of TOSHIBA not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. TOSHIBA make no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * * Author: Katsuhisa Yano TOSHIBA Corp. * mopi@osa.ilab.toshiba.co.jp */ #ifdef HAVE_CONFIG_H #include #endif #include #include "Xlibint.h" #include "XlcPubI.h" static const char * default_string( XLCd lcd) { return XLC_PUBLIC(lcd, default_string); } static XLCd create (const char *name, XLCdMethods methods); static Bool initialize (XLCd lcd); static void destroy (XLCd lcd); static char *get_values (XLCd lcd, XlcArgList args, int num_args); static XLCdPublicMethodsRec publicMethods = { { destroy, _XlcDefaultMapModifiers, NULL, NULL, _XrmDefaultInitParseInfo, _XmbTextPropertyToTextList, _XwcTextPropertyToTextList, _Xutf8TextPropertyToTextList, _XmbTextListToTextProperty, _XwcTextListToTextProperty, _Xutf8TextListToTextProperty, _XwcFreeStringList, default_string, NULL, NULL }, { NULL, create, initialize, destroy, get_values, _XlcGetLocaleDataBase } }; XLCdMethods _XlcPublicMethods = (XLCdMethods) &publicMethods; static XLCd create( const char *name, XLCdMethods methods) { XLCd lcd; XLCdPublicMethods new; lcd = Xcalloc(1, sizeof(XLCdRec)); if (lcd == NULL) return (XLCd) NULL; lcd->core = Xcalloc(1, sizeof(XLCdPublicRec)); if (lcd->core == NULL) goto err; new = Xmalloc(sizeof(XLCdPublicMethodsRec)); if (new == NULL) goto err; memcpy(new,methods,sizeof(XLCdPublicMethodsRec)); lcd->methods = (XLCdMethods) new; return lcd; err: Xfree(lcd); return (XLCd) NULL; } static Bool load_public( XLCd lcd) { XLCdPublicPart *pub = XLC_PUBLIC_PART(lcd); char **values; const char *str; int num; if(_XlcCreateLocaleDataBase(lcd) == NULL) return False; _XlcGetResource(lcd, "XLC_XLOCALE", "mb_cur_max", &values, &num); if (num > 0) { pub->mb_cur_max = atoi(values[0]); if (pub->mb_cur_max < 1) pub->mb_cur_max = 1; } else pub->mb_cur_max = 1; _XlcGetResource(lcd, "XLC_XLOCALE", "state_depend_encoding", &values, &num); if (num > 0 && !_XlcCompareISOLatin1(values[0], "True")) pub->is_state_depend = True; else pub->is_state_depend = False; _XlcGetResource(lcd, "XLC_XLOCALE", "encoding_name", &values, &num); str = (num > 0) ? values[0] : "STRING"; pub->encoding_name = strdup(str); if (pub->encoding_name == NULL) return False; return True; } static Bool initialize_core( XLCd lcd) { XLCdMethods methods = lcd->methods; XLCdMethods core = &publicMethods.core; if (methods->close == NULL) methods->close = core->close; if (methods->map_modifiers == NULL) methods->map_modifiers = core->map_modifiers; if (methods->open_om == NULL) #ifdef USE_DYNAMIC_LC _XInitDefaultOM(lcd); #else _XInitOM(lcd); #endif if (methods->open_im == NULL) #ifdef USE_DYNAMIC_LC _XInitDefaultIM(lcd); #else _XInitIM(lcd); #endif if (methods->init_parse_info == NULL) methods->init_parse_info = core->init_parse_info; if (methods->mb_text_prop_to_list == NULL) methods->mb_text_prop_to_list = core->mb_text_prop_to_list; if (methods->wc_text_prop_to_list == NULL) methods->wc_text_prop_to_list = core->wc_text_prop_to_list; if (methods->utf8_text_prop_to_list == NULL) methods->utf8_text_prop_to_list = core->utf8_text_prop_to_list; if (methods->mb_text_list_to_prop == NULL) methods->mb_text_list_to_prop = core->mb_text_list_to_prop; if (methods->wc_text_list_to_prop == NULL) methods->wc_text_list_to_prop = core->wc_text_list_to_prop; if (methods->utf8_text_list_to_prop == NULL) methods->utf8_text_list_to_prop = core->utf8_text_list_to_prop; if (methods->wc_free_string_list == NULL) methods->wc_free_string_list = core->wc_free_string_list; if (methods->default_string == NULL) methods->default_string = core->default_string; return True; } static Bool initialize( XLCd lcd) { XLCdPublicMethodsPart *methods = XLC_PUBLIC_METHODS(lcd); XLCdPublicMethodsPart *pub_methods = &publicMethods.pub; XLCdPublicPart *pub = XLC_PUBLIC_PART(lcd); char *name; #if !defined(X_LOCALE) int len; char sinamebuf[256]; char* siname; #endif _XlcInitCTInfo(); if (initialize_core(lcd) == False) return False; name = lcd->core->name; #if !defined(X_LOCALE) /* * _XlMapOSLocaleName will return the same string or a substring * of name, so strlen(name) is okay */ if ((len = strlen(name)) < sizeof sinamebuf) siname = sinamebuf; else siname = Xmalloc (len + 1); if (siname == NULL) return False; name = _XlcMapOSLocaleName(name, siname); #endif /* _XlcResolveLocaleName will lookup the SI's name for the locale */ if (_XlcResolveLocaleName(name, pub) == 0) { #if !defined(X_LOCALE) if (siname != sinamebuf) Xfree (siname); #endif return False; } #if !defined(X_LOCALE) if (siname != sinamebuf) Xfree (siname); #endif if (pub->default_string == NULL) pub->default_string = ""; if (methods->get_values == NULL) methods->get_values = pub_methods->get_values; if (methods->get_resource == NULL) methods->get_resource = pub_methods->get_resource; return load_public(lcd); } static void destroy_core( XLCd lcd) { if (lcd) { if (lcd->core) { Xfree(lcd->core->name); Xfree(lcd->core); } Xfree(lcd->methods); Xfree(lcd); } } static void destroy( XLCd lcd) { XLCdPublicPart *pub = XLC_PUBLIC_PART(lcd); _XlcDestroyLocaleDataBase(lcd); Xfree(pub->siname); Xfree(pub->encoding_name); destroy_core(lcd); } static XlcResource resources[] = { { XlcNCodeset, NULLQUARK, sizeof(char *), XOffsetOf(XLCdPublicRec, pub.codeset), XlcGetMask }, { XlcNDefaultString, NULLQUARK, sizeof(char *), XOffsetOf(XLCdPublicRec, pub.default_string), XlcGetMask }, { XlcNEncodingName, NULLQUARK, sizeof(char *), XOffsetOf(XLCdPublicRec, pub.encoding_name), XlcGetMask }, { XlcNLanguage, NULLQUARK, sizeof(char *), XOffsetOf(XLCdPublicRec, pub.language), XlcGetMask }, { XlcNMbCurMax, NULLQUARK, sizeof(int), XOffsetOf(XLCdPublicRec, pub.mb_cur_max), XlcGetMask }, { XlcNStateDependentEncoding, NULLQUARK, sizeof(Bool), XOffsetOf(XLCdPublicRec, pub.is_state_depend), XlcGetMask }, { XlcNTerritory, NULLQUARK, sizeof(char *), XOffsetOf(XLCdPublicRec, pub.territory), XlcGetMask } }; static char * get_values( XLCd lcd, XlcArgList args, int num_args) { XLCdPublic pub = (XLCdPublic) lcd->core; if (resources[0].xrm_name == NULLQUARK) _XlcCompileResourceList(resources, XlcNumber(resources)); return _XlcGetValues((XPointer) pub, resources, XlcNumber(resources), args, num_args, XlcGetMask); } libX11-1.6.3/src/xlibi18n/XimImSw.h000064401431060000012000000031401247741723500170070ustar00alancstaff00002660200006/****************************************************************** Copyright 1992, 1993 by FUJITSU LIMITED Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of FUJITSU LIMITED not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ #ifndef _XIMIMSW_H #define _XIMIMSW_H typedef struct { Bool (*checkprocessing)( Xim im ); Bool (*im_open)( Xim im ); void (*im_free)( Xim im ); } XimImsportSW; extern XimImsportSW _XimImSportRec[]; #endif /* _XIMIMSW_H */ libX11-1.6.3/src/xlibi18n/imKStoUCS.c000064401431060000012000000513541247741723500172400ustar00alancstaff00002660200006 #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Ximint.h" static unsigned short const keysym_to_unicode_1a1_1ff[] = { 0x0104, 0x02d8, 0x0141, 0x0000, 0x013d, 0x015a, 0x0000, /* 0x01a0-0x01a7 */ 0x0000, 0x0160, 0x015e, 0x0164, 0x0179, 0x0000, 0x017d, 0x017b, /* 0x01a8-0x01af */ 0x0000, 0x0105, 0x02db, 0x0142, 0x0000, 0x013e, 0x015b, 0x02c7, /* 0x01b0-0x01b7 */ 0x0000, 0x0161, 0x015f, 0x0165, 0x017a, 0x02dd, 0x017e, 0x017c, /* 0x01b8-0x01bf */ 0x0154, 0x0000, 0x0000, 0x0102, 0x0000, 0x0139, 0x0106, 0x0000, /* 0x01c0-0x01c7 */ 0x010c, 0x0000, 0x0118, 0x0000, 0x011a, 0x0000, 0x0000, 0x010e, /* 0x01c8-0x01cf */ 0x0110, 0x0143, 0x0147, 0x0000, 0x0000, 0x0150, 0x0000, 0x0000, /* 0x01d0-0x01d7 */ 0x0158, 0x016e, 0x0000, 0x0170, 0x0000, 0x0000, 0x0162, 0x0000, /* 0x01d8-0x01df */ 0x0155, 0x0000, 0x0000, 0x0103, 0x0000, 0x013a, 0x0107, 0x0000, /* 0x01e0-0x01e7 */ 0x010d, 0x0000, 0x0119, 0x0000, 0x011b, 0x0000, 0x0000, 0x010f, /* 0x01e8-0x01ef */ 0x0111, 0x0144, 0x0148, 0x0000, 0x0000, 0x0151, 0x0000, 0x0000, /* 0x01f0-0x01f7 */ 0x0159, 0x016f, 0x0000, 0x0171, 0x0000, 0x0000, 0x0163, 0x02d9 /* 0x01f8-0x01ff */ }; static unsigned short const keysym_to_unicode_2a1_2fe[] = { 0x0126, 0x0000, 0x0000, 0x0000, 0x0000, 0x0124, 0x0000, /* 0x02a0-0x02a7 */ 0x0000, 0x0130, 0x0000, 0x011e, 0x0134, 0x0000, 0x0000, 0x0000, /* 0x02a8-0x02af */ 0x0000, 0x0127, 0x0000, 0x0000, 0x0000, 0x0000, 0x0125, 0x0000, /* 0x02b0-0x02b7 */ 0x0000, 0x0131, 0x0000, 0x011f, 0x0135, 0x0000, 0x0000, 0x0000, /* 0x02b8-0x02bf */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x010a, 0x0108, 0x0000, /* 0x02c0-0x02c7 */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x02c8-0x02cf */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0120, 0x0000, 0x0000, /* 0x02d0-0x02d7 */ 0x011c, 0x0000, 0x0000, 0x0000, 0x0000, 0x016c, 0x015c, 0x0000, /* 0x02d8-0x02df */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x010b, 0x0109, 0x0000, /* 0x02e0-0x02e7 */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x02e8-0x02ef */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0121, 0x0000, 0x0000, /* 0x02f0-0x02f7 */ 0x011d, 0x0000, 0x0000, 0x0000, 0x0000, 0x016d, 0x015d /* 0x02f8-0x02ff */ }; static unsigned short const keysym_to_unicode_3a2_3fe[] = { 0x0138, 0x0156, 0x0000, 0x0128, 0x013b, 0x0000, /* 0x03a0-0x03a7 */ 0x0000, 0x0000, 0x0112, 0x0122, 0x0166, 0x0000, 0x0000, 0x0000, /* 0x03a8-0x03af */ 0x0000, 0x0000, 0x0000, 0x0157, 0x0000, 0x0129, 0x013c, 0x0000, /* 0x03b0-0x03b7 */ 0x0000, 0x0000, 0x0113, 0x0123, 0x0167, 0x014a, 0x0000, 0x014b, /* 0x03b8-0x03bf */ 0x0100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x012e, /* 0x03c0-0x03c7 */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0116, 0x0000, 0x0000, 0x012a, /* 0x03c8-0x03cf */ 0x0000, 0x0145, 0x014c, 0x0136, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x03d0-0x03d7 */ 0x0000, 0x0172, 0x0000, 0x0000, 0x0000, 0x0168, 0x016a, 0x0000, /* 0x03d8-0x03df */ 0x0101, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x012f, /* 0x03e0-0x03e7 */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0117, 0x0000, 0x0000, 0x012b, /* 0x03e8-0x03ef */ 0x0000, 0x0146, 0x014d, 0x0137, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x03f0-0x03f7 */ 0x0000, 0x0173, 0x0000, 0x0000, 0x0000, 0x0169, 0x016b /* 0x03f8-0x03ff */ }; static unsigned short const keysym_to_unicode_4a1_4df[] = { 0x3002, 0x3008, 0x3009, 0x3001, 0x30fb, 0x30f2, 0x30a1, /* 0x04a0-0x04a7 */ 0x30a3, 0x30a5, 0x30a7, 0x30a9, 0x30e3, 0x30e5, 0x30e7, 0x30c3, /* 0x04a8-0x04af */ 0x30fc, 0x30a2, 0x30a4, 0x30a6, 0x30a8, 0x30aa, 0x30ab, 0x30ad, /* 0x04b0-0x04b7 */ 0x30af, 0x30b1, 0x30b3, 0x30b5, 0x30b7, 0x30b9, 0x30bb, 0x30bd, /* 0x04b8-0x04bf */ 0x30bf, 0x30c1, 0x30c4, 0x30c6, 0x30c8, 0x30ca, 0x30cb, 0x30cc, /* 0x04c0-0x04c7 */ 0x30cd, 0x30ce, 0x30cf, 0x30d2, 0x30d5, 0x30d8, 0x30db, 0x30de, /* 0x04c8-0x04cf */ 0x30df, 0x30e0, 0x30e1, 0x30e2, 0x30e4, 0x30e6, 0x30e8, 0x30e9, /* 0x04d0-0x04d7 */ 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ef, 0x30f3, 0x309b, 0x309c /* 0x04d8-0x04df */ }; static unsigned short const keysym_to_unicode_590_5fe[] = { 0x06f0, 0x06f1, 0x06f2, 0x06f3, 0x06f4, 0x06f5, 0x06f6, 0x06f7, /* 0x0590-0x0597 */ 0x06f8, 0x06f9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x0598-0x059f */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x066a, 0x0670, 0x0679, /* 0x05a0-0x05a7 */ 0x067e, 0x0686, 0x0688, 0x0691, 0x060c, 0x0000, 0x06d4, 0x0000, /* 0x05ac-0x05af */ 0x0660, 0x0661, 0x0662, 0x0663, 0x0664, 0x0665, 0x0666, 0x0667, /* 0x05b0-0x05b7 */ 0x0668, 0x0669, 0x0000, 0x061b, 0x0000, 0x0000, 0x0000, 0x061f, /* 0x05b8-0x05bf */ 0x0000, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, /* 0x05c0-0x05c7 */ 0x0628, 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f, /* 0x05c8-0x05cf */ 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637, /* 0x05d0-0x05d7 */ 0x0638, 0x0639, 0x063a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x05d8-0x05df */ 0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647, /* 0x05e0-0x05e7 */ 0x0648, 0x0649, 0x064a, 0x064b, 0x064c, 0x064d, 0x064e, 0x064f, /* 0x05e8-0x05ef */ 0x0650, 0x0651, 0x0652, 0x0653, 0x0654, 0x0655, 0x0698, 0x06a4, /* 0x05f0-0x05f7 */ 0x06a9, 0x06af, 0x06ba, 0x06be, 0x06cc, 0x06d2, 0x06c1 /* 0x05f8-0x05fe */ }; static unsigned short keysym_to_unicode_680_6ff[] = { 0x0492, 0x0496, 0x049a, 0x049c, 0x04a2, 0x04ae, 0x04b0, 0x04b2, /* 0x0680-0x0687 */ 0x04b6, 0x04b8, 0x04ba, 0x0000, 0x04d8, 0x04e2, 0x04e8, 0x04ee, /* 0x0688-0x068f */ 0x0493, 0x0497, 0x049b, 0x049d, 0x04a3, 0x04af, 0x04b1, 0x04b3, /* 0x0690-0x0697 */ 0x04b7, 0x04b9, 0x04bb, 0x0000, 0x04d9, 0x04e3, 0x04e9, 0x04ef, /* 0x0698-0x069f */ 0x0000, 0x0452, 0x0453, 0x0451, 0x0454, 0x0455, 0x0456, 0x0457, /* 0x06a0-0x06a7 */ 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x0491, 0x045e, 0x045f, /* 0x06a8-0x06af */ 0x2116, 0x0402, 0x0403, 0x0401, 0x0404, 0x0405, 0x0406, 0x0407, /* 0x06b0-0x06b7 */ 0x0408, 0x0409, 0x040a, 0x040b, 0x040c, 0x0490, 0x040e, 0x040f, /* 0x06b8-0x06bf */ 0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, /* 0x06c0-0x06c7 */ 0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, /* 0x06c8-0x06cf */ 0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, /* 0x06d0-0x06d7 */ 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a, /* 0x06d8-0x06df */ 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, /* 0x06e0-0x06e7 */ 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, /* 0x06e8-0x06ef */ 0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, /* 0x06f0-0x06f7 */ 0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a /* 0x06f8-0x06ff */ }; static unsigned short const keysym_to_unicode_7a1_7f9[] = { 0x0386, 0x0388, 0x0389, 0x038a, 0x03aa, 0x0000, 0x038c, /* 0x07a0-0x07a7 */ 0x038e, 0x03ab, 0x0000, 0x038f, 0x0000, 0x0000, 0x0385, 0x2015, /* 0x07a8-0x07af */ 0x0000, 0x03ac, 0x03ad, 0x03ae, 0x03af, 0x03ca, 0x0390, 0x03cc, /* 0x07b0-0x07b7 */ 0x03cd, 0x03cb, 0x03b0, 0x03ce, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x07b8-0x07bf */ 0x0000, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, /* 0x07c0-0x07c7 */ 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, /* 0x07c8-0x07cf */ 0x03a0, 0x03a1, 0x03a3, 0x0000, 0x03a4, 0x03a5, 0x03a6, 0x03a7, /* 0x07d0-0x07d7 */ 0x03a8, 0x03a9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x07d8-0x07df */ 0x0000, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, /* 0x07e0-0x07e7 */ 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, /* 0x07e8-0x07ef */ 0x03c0, 0x03c1, 0x03c3, 0x03c2, 0x03c4, 0x03c5, 0x03c6, 0x03c7, /* 0x07f0-0x07f7 */ 0x03c8, 0x03c9 /* 0x07f8-0x07ff */ }; static unsigned short const keysym_to_unicode_8a4_8fe[] = { 0x2320, 0x2321, 0x0000, 0x231c, /* 0x08a0-0x08a7 */ 0x231d, 0x231e, 0x231f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x08a8-0x08af */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x08b0-0x08b7 */ 0x0000, 0x0000, 0x0000, 0x0000, 0x2264, 0x2260, 0x2265, 0x222b, /* 0x08b8-0x08bf */ 0x2234, 0x0000, 0x221e, 0x0000, 0x0000, 0x2207, 0x0000, 0x0000, /* 0x08c0-0x08c7 */ 0x2245, 0x2246, 0x0000, 0x0000, 0x0000, 0x0000, 0x21d2, 0x0000, /* 0x08c8-0x08cf */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x221a, 0x0000, /* 0x08d0-0x08d7 */ 0x0000, 0x0000, 0x2282, 0x2283, 0x2229, 0x222a, 0x2227, 0x2228, /* 0x08d8-0x08df */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x08e0-0x08e7 */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2202, /* 0x08e8-0x08ef */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0192, 0x0000, /* 0x08f0-0x08f7 */ 0x0000, 0x0000, 0x0000, 0x2190, 0x2191, 0x2192, 0x2193 /* 0x08f8-0x08ff */ }; static unsigned short const keysym_to_unicode_9df_9f8[] = { 0x2422, /* 0x09d8-0x09df */ 0x2666, 0x25a6, 0x2409, 0x240c, 0x240d, 0x240a, 0x0000, 0x0000, /* 0x09e0-0x09e7 */ 0x240a, 0x240b, 0x2518, 0x2510, 0x250c, 0x2514, 0x253c, 0x2500, /* 0x09e8-0x09ef */ 0x0000, 0x0000, 0x0000, 0x0000, 0x251c, 0x2524, 0x2534, 0x252c, /* 0x09f0-0x09f7 */ 0x2502 /* 0x09f8-0x09ff */ }; static unsigned short const keysym_to_unicode_aa1_afe[] = { 0x2003, 0x2002, 0x2004, 0x2005, 0x2007, 0x2008, 0x2009, /* 0x0aa0-0x0aa7 */ 0x200a, 0x2014, 0x2013, 0x0000, 0x0000, 0x0000, 0x2026, 0x2025, /* 0x0aa8-0x0aaf */ 0x2153, 0x2154, 0x2155, 0x2156, 0x2157, 0x2158, 0x2159, 0x215a, /* 0x0ab0-0x0ab7 */ 0x2105, 0x0000, 0x0000, 0x2012, 0x2039, 0x2024, 0x203a, 0x0000, /* 0x0ab8-0x0abf */ 0x0000, 0x0000, 0x0000, 0x215b, 0x215c, 0x215d, 0x215e, 0x0000, /* 0x0ac0-0x0ac7 */ 0x0000, 0x2122, 0x2120, 0x0000, 0x25c1, 0x25b7, 0x25cb, 0x25ad, /* 0x0ac8-0x0acf */ 0x2018, 0x2019, 0x201c, 0x201d, 0x211e, 0x2030, 0x2032, 0x2033, /* 0x0ad0-0x0ad7 */ 0x0000, 0x271d, 0x0000, 0x220e, 0x25c2, 0x2023, 0x25cf, 0x25ac, /* 0x0ad8-0x0adf */ 0x25e6, 0x25ab, 0x25ae, 0x25b5, 0x25bf, 0x2606, 0x2022, 0x25aa, /* 0x0ae0-0x0ae7 */ 0x25b4, 0x25be, 0x261a, 0x261b, 0x2663, 0x2666, 0x2665, 0x0000, /* 0x0ae8-0x0aef */ 0x2720, 0x2020, 0x2021, 0x2713, 0x2612, 0x266f, 0x266d, 0x2642, /* 0x0af0-0x0af7 */ 0x2640, 0x2121, 0x2315, 0x2117, 0x2038, 0x201a, 0x201e /* 0x0af8-0x0aff */ }; /* none of the APL keysyms match the Unicode characters */ static unsigned short const keysym_to_unicode_cdf_cfa[] = { 0x2017, /* 0x0cd8-0x0cdf */ 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7, /* 0x0ce0-0x0ce7 */ 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df, /* 0x0ce8-0x0cef */ 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7, /* 0x0cf0-0x0cf7 */ 0x05e8, 0x05e9, 0x05ea /* 0x0cf8-0x0cff */ }; static unsigned short const keysym_to_unicode_da1_df9[] = { 0x0e01, 0x0e02, 0x0e03, 0x0e04, 0x0e05, 0x0e06, 0x0e07, /* 0x0da0-0x0da7 */ 0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f, /* 0x0da8-0x0daf */ 0x0e10, 0x0e11, 0x0e12, 0x0e13, 0x0e14, 0x0e15, 0x0e16, 0x0e17, /* 0x0db0-0x0db7 */ 0x0e18, 0x0e19, 0x0e1a, 0x0e1b, 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f, /* 0x0db8-0x0dbf */ 0x0e20, 0x0e21, 0x0e22, 0x0e23, 0x0e24, 0x0e25, 0x0e26, 0x0e27, /* 0x0dc0-0x0dc7 */ 0x0e28, 0x0e29, 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f, /* 0x0dc8-0x0dcf */ 0x0e30, 0x0e31, 0x0e32, 0x0e33, 0x0e34, 0x0e35, 0x0e36, 0x0e37, /* 0x0dd0-0x0dd7 */ 0x0e38, 0x0e39, 0x0e3a, 0x0000, 0x0000, 0x0000, 0x0e3e, 0x0e3f, /* 0x0dd8-0x0ddf */ 0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47, /* 0x0de0-0x0de7 */ 0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d, 0x0000, 0x0000, /* 0x0de8-0x0def */ 0x0e50, 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57, /* 0x0df0-0x0df7 */ 0x0e58, 0x0e59 /* 0x0df8-0x0dff */ }; static unsigned short const keysym_to_unicode_ea0_eff[] = { 0x0000, 0x1101, 0x1101, 0x11aa, 0x1102, 0x11ac, 0x11ad, 0x1103, /* 0x0ea0-0x0ea7 */ 0x1104, 0x1105, 0x11b0, 0x11b1, 0x11b2, 0x11b3, 0x11b4, 0x11b5, /* 0x0ea8-0x0eaf */ 0x11b6, 0x1106, 0x1107, 0x1108, 0x11b9, 0x1109, 0x110a, 0x110b, /* 0x0eb0-0x0eb7 */ 0x110c, 0x110d, 0x110e, 0x110f, 0x1110, 0x1111, 0x1112, 0x1161, /* 0x0eb8-0x0ebf */ 0x1162, 0x1163, 0x1164, 0x1165, 0x1166, 0x1167, 0x1168, 0x1169, /* 0x0ec0-0x0ec7 */ 0x116a, 0x116b, 0x116c, 0x116d, 0x116e, 0x116f, 0x1170, 0x1171, /* 0x0ec8-0x0ecf */ 0x1172, 0x1173, 0x1174, 0x1175, 0x11a8, 0x11a9, 0x11aa, 0x11ab, /* 0x0ed0-0x0ed7 */ 0x11ac, 0x11ad, 0x11ae, 0x11af, 0x11b0, 0x11b1, 0x11b2, 0x11b3, /* 0x0ed8-0x0edf */ 0x11b4, 0x11b5, 0x11b6, 0x11b7, 0x11b8, 0x11b9, 0x11ba, 0x11bb, /* 0x0ee0-0x0ee7 */ 0x11bc, 0x11bd, 0x11be, 0x11bf, 0x11c0, 0x11c1, 0x11c2, 0x0000, /* 0x0ee8-0x0eef */ 0x0000, 0x0000, 0x1140, 0x0000, 0x0000, 0x1159, 0x119e, 0x0000, /* 0x0ef0-0x0ef7 */ 0x11eb, 0x0000, 0x11f9, 0x0000, 0x0000, 0x0000, 0x0000, 0x20a9, /* 0x0ef8-0x0eff */ }; static unsigned short keysym_to_unicode_12a1_12fe[] = { 0x1e02, 0x1e03, 0x0000, 0x0000, 0x0000, 0x1e0a, 0x0000, /* 0x12a0-0x12a7 */ 0x1e80, 0x0000, 0x1e82, 0x1e0b, 0x1ef2, 0x0000, 0x0000, 0x0000, /* 0x12a8-0x12af */ 0x1e1e, 0x1e1f, 0x0000, 0x0000, 0x1e40, 0x1e41, 0x0000, 0x1e56, /* 0x12b0-0x12b7 */ 0x1e81, 0x1e57, 0x1e83, 0x1e60, 0x1ef3, 0x1e84, 0x1e85, 0x1e61, /* 0x12b8-0x12bf */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x12c0-0x12c7 */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x12c8-0x12cf */ 0x0174, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1e6a, /* 0x12d0-0x12d7 */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0176, 0x0000, /* 0x12d8-0x12df */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x12e0-0x12e7 */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x12e8-0x12ef */ 0x0175, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1e6b, /* 0x12f0-0x12f7 */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0177 /* 0x12f0-0x12ff */ }; static unsigned short const keysym_to_unicode_13bc_13be[] = { 0x0152, 0x0153, 0x0178 /* 0x13b8-0x13bf */ }; static unsigned short keysym_to_unicode_14a1_14ff[] = { 0x2741, 0x00a7, 0x0589, 0x0029, 0x0028, 0x00bb, 0x00ab, /* 0x14a0-0x14a7 */ 0x2014, 0x002e, 0x055d, 0x002c, 0x2013, 0x058a, 0x2026, 0x055c, /* 0x14a8-0x14af */ 0x055b, 0x055e, 0x0531, 0x0561, 0x0532, 0x0562, 0x0533, 0x0563, /* 0x14b0-0x14b7 */ 0x0534, 0x0564, 0x0535, 0x0565, 0x0536, 0x0566, 0x0537, 0x0567, /* 0x14b8-0x14bf */ 0x0538, 0x0568, 0x0539, 0x0569, 0x053a, 0x056a, 0x053b, 0x056b, /* 0x14c0-0x14c7 */ 0x053c, 0x056c, 0x053d, 0x056d, 0x053e, 0x056e, 0x053f, 0x056f, /* 0x14c8-0x14cf */ 0x0540, 0x0570, 0x0541, 0x0571, 0x0542, 0x0572, 0x0543, 0x0573, /* 0x14d0-0x14d7 */ 0x0544, 0x0574, 0x0545, 0x0575, 0x0546, 0x0576, 0x0547, 0x0577, /* 0x14d8-0x14df */ 0x0548, 0x0578, 0x0549, 0x0579, 0x054a, 0x057a, 0x054b, 0x057b, /* 0x14e0-0x14e7 */ 0x054c, 0x057c, 0x054d, 0x057d, 0x054e, 0x057e, 0x054f, 0x057f, /* 0x14e8-0x14ef */ 0x0550, 0x0580, 0x0551, 0x0581, 0x0552, 0x0582, 0x0553, 0x0583, /* 0x14f0-0x14f7 */ 0x0554, 0x0584, 0x0555, 0x0585, 0x0556, 0x0586, 0x2019, 0x0027, /* 0x14f8-0x14ff */ }; static unsigned short keysym_to_unicode_15d0_15f6[] = { 0x10d0, 0x10d1, 0x10d2, 0x10d3, 0x10d4, 0x10d5, 0x10d6, 0x10d7, /* 0x15d0-0x15d7 */ 0x10d8, 0x10d9, 0x10da, 0x10db, 0x10dc, 0x10dd, 0x10de, 0x10df, /* 0x15d8-0x15df */ 0x10e0, 0x10e1, 0x10e2, 0x10e3, 0x10e4, 0x10e5, 0x10e6, 0x10e7, /* 0x15e0-0x15e7 */ 0x10e8, 0x10e9, 0x10ea, 0x10eb, 0x10ec, 0x10ed, 0x10ee, 0x10ef, /* 0x15e8-0x15ef */ 0x10f0, 0x10f1, 0x10f2, 0x10f3, 0x10f4, 0x10f5, 0x10f6 /* 0x15f0-0x15f7 */ }; static unsigned short keysym_to_unicode_16a0_16f6[] = { 0x0000, 0x0000, 0xf0a2, 0x1e8a, 0x0000, 0xf0a5, 0x012c, 0xf0a7, /* 0x16a0-0x16a7 */ 0xf0a8, 0x01b5, 0x01e6, 0x0000, 0x0000, 0x0000, 0x0000, 0x019f, /* 0x16a8-0x16af */ 0x0000, 0x0000, 0xf0b2, 0x1e8b, 0x01d1, 0xf0b5, 0x012d, 0xf0b7, /* 0x16b0-0x16b7 */ 0xf0b8, 0x01b6, 0x01e7, 0x0000, 0x0000, 0x01d2, 0x0000, 0x0275, /* 0x16b8-0x16bf */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x018f, 0x0000, /* 0x16c0-0x16c7 */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x16c8-0x16cf */ 0x0000, 0x1e36, 0xf0d2, 0xf0d3, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x16d0-0x16d7 */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x16d8-0x16df */ 0x0000, 0x1e37, 0xf0e2, 0xf0e3, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x16e0-0x16e7 */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /* 0x16e8-0x16ef */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0259 /* 0x16f0-0x16f6 */ }; static unsigned short const keysym_to_unicode_1e9f_1eff[] = { 0x0303, 0x1ea0, 0x1ea1, 0x1ea2, 0x1ea3, 0x1ea4, 0x1ea5, 0x1ea6, 0x1ea7, /* 0x1ea0-0x1ea7 */ 0x1ea8, 0x1ea9, 0x1eaa, 0x1eab, 0x1eac, 0x1ead, 0x1eae, 0x1eaf, /* 0x1ea8-0x1eaf */ 0x1eb0, 0x1eb1, 0x1eb2, 0x1eb3, 0x1eb4, 0x1eb5, 0x1eb6, 0x1eb7, /* 0x1eb0-0x1eb7 */ 0x1eb8, 0x1eb9, 0x1eba, 0x1ebb, 0x1ebc, 0x1ebd, 0x1ebe, 0x1ebf, /* 0x1eb8-0x1ebf */ 0x1ec0, 0x1ec1, 0x1ec2, 0x1ec3, 0x1ec4, 0x1ec5, 0x1ec6, 0x1ec7, /* 0x1ec0-0x1ec7 */ 0x1ec8, 0x1ec9, 0x1eca, 0x1ecb, 0x1ecc, 0x1ecd, 0x1ece, 0x1ecf, /* 0x1ec8-0x1ecf */ 0x1ed0, 0x1ed1, 0x1ed2, 0x1ed3, 0x1ed4, 0x1ed5, 0x1ed6, 0x1ed7, /* 0x1ed0-0x1ed7 */ 0x1ed8, 0x1ed9, 0x1eda, 0x1edb, 0x1edc, 0x1edd, 0x1ede, 0x1edf, /* 0x1ed8-0x1edf */ 0x1ee0, 0x1ee1, 0x1ee2, 0x1ee3, 0x1ee4, 0x1ee5, 0x1ee6, 0x1ee7, /* 0x1ee0-0x1ee7 */ 0x1ee8, 0x1ee9, 0x1eea, 0x1eeb, 0x1eec, 0x1eed, 0x1eee, 0x1eef, /* 0x1ee8-0x1eef */ 0x1ef0, 0x1ef1, 0x0300, 0x0301, 0x1ef4, 0x1ef5, 0x1ef6, 0x1ef7, /* 0x1ef0-0x1ef7 */ 0x1ef8, 0x1ef9, 0x01a0, 0x01a1, 0x01af, 0x01b0, 0x0309, 0x0323 /* 0x1ef8-0x1eff */ }; static unsigned short const keysym_to_unicode_20a0_20ac[] = { 0x20a0, 0x20a1, 0x20a2, 0x20a3, 0x20a4, 0x20a5, 0x20a6, 0x20a7, /* 0x20a0-0x20a7 */ 0x20a8, 0x20a9, 0x20aa, 0x20ab, 0x20ac /* 0x20a8-0x20af */ }; unsigned int KeySymToUcs4(KeySym keysym) { /* 'Unicode keysym' */ if ((keysym & 0xff000000) == 0x01000000) return (keysym & 0x00ffffff); if (keysym > 0 && keysym < 0x100) return keysym; else if (keysym > 0x1a0 && keysym < 0x200) return keysym_to_unicode_1a1_1ff[keysym - 0x1a1]; else if (keysym > 0x2a0 && keysym < 0x2ff) return keysym_to_unicode_2a1_2fe[keysym - 0x2a1]; else if (keysym > 0x3a1 && keysym < 0x3ff) return keysym_to_unicode_3a2_3fe[keysym - 0x3a2]; else if (keysym > 0x4a0 && keysym < 0x4e0) return keysym_to_unicode_4a1_4df[keysym - 0x4a1]; else if (keysym > 0x589 && keysym < 0x5ff) return keysym_to_unicode_590_5fe[keysym - 0x590]; else if (keysym > 0x67f && keysym < 0x700) return keysym_to_unicode_680_6ff[keysym - 0x680]; else if (keysym > 0x7a0 && keysym < 0x7fa) return keysym_to_unicode_7a1_7f9[keysym - 0x7a1]; else if (keysym > 0x8a3 && keysym < 0x8ff) return keysym_to_unicode_8a4_8fe[keysym - 0x8a4]; else if (keysym > 0x9de && keysym < 0x9f9) return keysym_to_unicode_9df_9f8[keysym - 0x9df]; else if (keysym > 0xaa0 && keysym < 0xaff) return keysym_to_unicode_aa1_afe[keysym - 0xaa1]; else if (keysym > 0xcde && keysym < 0xcfb) return keysym_to_unicode_cdf_cfa[keysym - 0xcdf]; else if (keysym > 0xda0 && keysym < 0xdfa) return keysym_to_unicode_da1_df9[keysym - 0xda1]; else if (keysym > 0xe9f && keysym < 0xf00) return keysym_to_unicode_ea0_eff[keysym - 0xea0]; else if (keysym > 0x12a0 && keysym < 0x12ff) return keysym_to_unicode_12a1_12fe[keysym - 0x12a1]; else if (keysym > 0x13bb && keysym < 0x13bf) return keysym_to_unicode_13bc_13be[keysym - 0x13bc]; else if (keysym > 0x14a0 && keysym < 0x1500) return keysym_to_unicode_14a1_14ff[keysym - 0x14a1]; else if (keysym > 0x15cf && keysym < 0x15f7) return keysym_to_unicode_15d0_15f6[keysym - 0x15d0]; else if (keysym > 0x169f && keysym < 0x16f7) return keysym_to_unicode_16a0_16f6[keysym - 0x16a0]; else if (keysym > 0x1e9e && keysym < 0x1f00) return keysym_to_unicode_1e9f_1eff[keysym - 0x1e9f]; else if (keysym > 0x209f && keysym < 0x20ad) return keysym_to_unicode_20a0_20ac[keysym - 0x20a0]; else return 0; } 0x2017, /* 0x0cd8-0x0cdf */ 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7, /* 0x0ce0-0x0ce7 */ 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df, /* 0x0ce8-0x0cef */ 0x05e0, 0x05e1, 0x05e2, 0x05e3libX11-1.6.3/src/xlibi18n/utf8WMProps.c000064401431060000012000000063431247741723500176330ustar00alancstaff00002660200006/* Copyright 1991, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ /* * Copyright 2000 by Bruno Haible * * Permission to use, copy, modify, distribute, and sell this software * and its documentation for any purpose is hereby granted without fee, * provided that the above copyright notice appear in all copies and * that both that copyright notice and this permission notice appear * in supporting documentation, and that the name of Bruno Haible not * be used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. Bruno Haible * makes no representations about the suitability of this software for * any purpose. It is provided "as is" without express or implied * warranty. * * Bruno Haible DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN * NO EVENT SHALL Bruno Haible BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE * OR PERFORMANCE OF THIS SOFTWARE. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include void Xutf8SetWMProperties ( Display *dpy, Window w, _Xconst char *windowName, _Xconst char *iconName, char **argv, int argc, XSizeHints *sizeHints, XWMHints *wmHints, XClassHint *classHints) { XTextProperty wname, iname; XTextProperty *wprop = NULL; XTextProperty *iprop = NULL; if (windowName && Xutf8TextListToTextProperty(dpy, (char**)&windowName, 1, XStdICCTextStyle, &wname) >= Success) wprop = &wname; if (iconName && Xutf8TextListToTextProperty(dpy, (char**)&iconName, 1, XStdICCTextStyle, &iname) >= Success) iprop = &iname; XSetWMProperties(dpy, w, wprop, iprop, argv, argc, sizeHints, wmHints, classHints); if (wprop) Xfree(wname.value); if (iprop) Xfree(iname.value); /* Note: The WM_LOCALE_NAME property is set by XSetWMProperties. */ } libX11-1.6.3/src/xlibi18n/xim_trans.c000064401431060000012000000024051247741723500174540ustar00alancstaff00002660200006/* * Copyright © 2003 Keith Packard * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of Keith Packard not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. Keith Packard makes no * representations about the suitability of this software for any purpose. It * is provided "as is" without express or implied warranty. * * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #define XIM_t 1 #define TRANS_CLIENT 1 #include libX11-1.6.3/src/xlibi18n/lcPubWrap.c000064401431060000012000000047551247741723500173610ustar00alancstaff00002660200006/* * Copyright 1992, 1993 by TOSHIBA Corp. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of TOSHIBA not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. TOSHIBA make no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * * Author: Katsuhisa Yano TOSHIBA Corp. * mopi@osa.ilab.toshiba.co.jp */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "XlcPubI.h" char * _XGetLCValues(XLCd lcd, ...) { va_list var; XlcArgList args; char *ret; int num_args; XLCdPublicMethodsPart *methods = XLC_PUBLIC_METHODS(lcd); va_start(var, lcd); _XlcCountVaList(var, &num_args); va_end(var); va_start(var, lcd); _XlcVaToArgList(var, num_args, &args); va_end(var); if (args == (XlcArgList) NULL) return (char *) NULL; ret = (*methods->get_values)(lcd, args, num_args); Xfree(args); return ret; } void _XlcDestroyLC( XLCd lcd) { XLCdPublicMethods methods = (XLCdPublicMethods) lcd->methods; (*methods->pub.destroy)(lcd); } XLCd _XlcCreateLC( const char *name, XLCdMethods methods) { XLCdPublicMethods pub_methods = (XLCdPublicMethods) methods; XLCd lcd; lcd = (*pub_methods->pub.create)(name, methods); if (lcd == NULL) return (XLCd) NULL; if (lcd->core->name == NULL) { lcd->core->name = Xmalloc(strlen(name) + 1); if (lcd->core->name == NULL) goto err; strcpy(lcd->core->name, name); } if (lcd->methods == NULL) lcd->methods = methods; if ((*pub_methods->pub.initialize)(lcd) == False) goto err; return lcd; err: _XlcDestroyLC(lcd); return (XLCd) NULL; } libX11-1.6.3/src/xlibi18n/XlcPubI.h000064401431060000012000000150721247741723500167670ustar00alancstaff00002660200006/* * Copyright 1992, 1993 by TOSHIBA Corp. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of TOSHIBA not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. TOSHIBA make no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * * Author: Katsuhisa Yano TOSHIBA Corp. * mopi@osa.ilab.toshiba.co.jp */ #ifndef _XLCPUBLICI_H_ #define _XLCPUBLICI_H_ #include "XlcPublic.h" #define XLC_PUBLIC(lcd, x) (((XLCdPublic) lcd->core)->pub.x) #define XLC_PUBLIC_PART(lcd) (&(((XLCdPublic) lcd->core)->pub)) #define XLC_PUBLIC_METHODS(lcd) (&(((XLCdPublicMethods) lcd->methods)->pub)) /* * XLCd public methods */ typedef struct _XLCdPublicMethodsRec *XLCdPublicMethods; typedef XLCd (*XlcPubCreateProc)( const char* name, XLCdMethods methods ); typedef Bool (*XlcPubInitializeProc)( XLCd lcd ); typedef void (*XlcPubDestroyProc)( XLCd lcd ); typedef char* (*XlcPubGetValuesProc)( XLCd lcd, XlcArgList args, int num_args ); typedef void (*XlcPubGetResourceProc)( XLCd lcd, const char* category, const char* _class, char*** value, int* count ); typedef struct _XLCdPublicMethodsPart { XLCdPublicMethods superclass; XlcPubCreateProc create; XlcPubInitializeProc initialize; XlcPubDestroyProc destroy; XlcPubGetValuesProc get_values; XlcPubGetResourceProc get_resource; } XLCdPublicMethodsPart; typedef struct _XLCdPublicMethodsRec { XLCdMethodsRec core; XLCdPublicMethodsPart pub; } XLCdPublicMethodsRec; /* * XLCd public data */ typedef struct _XLCdPublicPart { char *siname; /* for _XlcMapOSLocaleName() */ char *language; /* language part of locale name */ char *territory; /* territory part of locale name */ char *codeset; /* codeset part of locale name */ char *encoding_name; /* encoding name */ int mb_cur_max; /* ANSI C MB_CUR_MAX */ Bool is_state_depend; /* state-depend encoding */ const char *default_string; /* for XDefaultString() */ XPointer xlocale_db; } XLCdPublicPart; typedef struct _XLCdPublicRec { XLCdCoreRec core; XLCdPublicPart pub; } XLCdPublicRec, *XLCdPublic; extern XLCdMethods _XlcPublicMethods; _XFUNCPROTOBEGIN extern XLCd _XlcCreateLC( const char* name, XLCdMethods methods ); extern void _XlcDestroyLC( XLCd lcd ); /* Fills into a freshly created XlcCharSet the fields that can be inferred from the ESC sequence. These are side, char_size, set_size. */ extern Bool _XlcParseCharSet( XlcCharSet charset ); /* Creates a new XlcCharSet, given its name (including side suffix) and Compound Text ESC sequence (normally at most 4 bytes). */ extern XlcCharSet _XlcCreateDefaultCharSet( const char* name, const char* ct_sequence ); extern XlcCharSet _XlcAddCT( const char* name, const char* ct_sequence ); extern Bool _XlcInitCTInfo (void); extern XrmMethods _XrmDefaultInitParseInfo( XLCd lcd, XPointer* state ); extern int _XmbTextPropertyToTextList( XLCd lcd, Display* dpy, const XTextProperty* text_prop, char*** list_ret, int* count_ret ); extern int _XwcTextPropertyToTextList( XLCd lcd, Display* dpy, const XTextProperty* text_prop, wchar_t*** list_ret, int* count_ret ); extern int _Xutf8TextPropertyToTextList( XLCd lcd, Display* dpy, const XTextProperty* text_prop, char*** list_ret, int* count_ret ); extern int _XmbTextListToTextProperty( XLCd /* lcd */, Display* /* dpy */, char** /* list */, int /* count */, XICCEncodingStyle /* style */, XTextProperty* /* text_prop */ ); extern int _XwcTextListToTextProperty( XLCd /* lcd */, Display* /* dpy */, wchar_t** /* list */, int /* count */, XICCEncodingStyle /* style */, XTextProperty* /* text_prop */ ); extern int _Xutf8TextListToTextProperty( XLCd /* lcd */, Display* /* dpy */, char** /* list */, int /* count */, XICCEncodingStyle /* style */, XTextProperty* /* text_prop */ ); extern void _XwcFreeStringList( XLCd /* lcd */, wchar_t** /* list */ ); extern int _XlcResolveLocaleName( const char* lc_name, XLCdPublicPart* pub ); extern int _XlcResolveI18NPath( char* buf, int buf_len ); extern char *_XlcLocaleLibDirName( char* /* dir_name */, size_t, /* dir_len */ const char* /* lc_name */ ); extern char *_XlcLocaleDirName( char* /* dir_name */, size_t, /* dir_len */ const char* /* lc_name */ ); extern XPointer _XlcCreateLocaleDataBase( XLCd lcd ); extern void _XlcDestroyLocaleDataBase( XLCd lcd ); extern void _XlcGetLocaleDataBase( XLCd /* lcd */, const char* /* category */, const char* /* name */, char*** /* value */, int* /* count */ ); #ifdef __APPLE__ extern char * _Xsetlocale( int category, _Xconst char *name); #endif extern char *_XlcMapOSLocaleName( char *osname, char *siname); extern int _Xmbstoutf8( char *ustr, const char *str, int len); extern int _Xlcmbstoutf8( XLCd lcd, char *ustr, const char *str, int len); extern int _Xmbstowcs( wchar_t *wstr, char *str, int len); extern int _Xlcwcstombs( XLCd lcd, char *str, wchar_t *wstr, int len); extern int _Xlcmbstowcs( XLCd lcd, wchar_t *wstr, char *str, int len); extern int _Xwcstombs( char *str, wchar_t *wstr, int len); extern int _Xlcmbtowc( XLCd lcd, wchar_t *wstr, char *str, int len); extern int _Xlcwctomb( XLCd lcd, char *str, wchar_t wc); extern XPointer _Utf8GetConvByName( const char *name); _XFUNCPROTOEND #endif /* _XLCPUBLICI_H_ */ libX11-1.6.3/src/xlibi18n/XlcGeneric.h000064401431060000012000000105111247741723500174750ustar00alancstaff00002660200006/* * Copyright 1992, 1993 by TOSHIBA Corp. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of TOSHIBA not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. TOSHIBA make no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * * Author: Katsuhisa Yano TOSHIBA Corp. * mopi@osa.ilab.toshiba.co.jp */ /* * Copyright 1995 by FUJITSU LIMITED * This is source code modified by FUJITSU LIMITED under the Joint * Development Agreement for the CDE/Motif PST. * * Modifier: Takanori Tateno FUJITSU LIMITED * */ #ifndef _XLCGENERIC_H_ #define _XLCGENERIC_H_ #include "XlcPubI.h" typedef struct _ByteInfo { unsigned char start,end; } ByteInfoRec, *ByteInfo; typedef struct _ByteInfoList { int M; /* 1 <= M <= length */ int byteinfo_num; ByteInfo byteinfo; } ByteInfoListRec, *ByteInfoList; /* conversion_type values */ #define LOCALCONV 1 #define FILECONV 2 #define FUNCTIONCONV 4 typedef struct _Conversion { unsigned long conversion_type; int conv_num; FontScope convlist; char *cnv_file; XlcConv cnvfunc; } ConversionRec, *Conversion; typedef struct _ExtdSegment { char *name; XlcSide side; FontScope area; int area_num; XlcCharSet charset; } ExtdSegmentRec, *ExtdSegment; typedef struct _SegConvRec { int length; char *source_encoding; XlcCharSet source; char *destination_encoding; XlcCharSet dest; FontScopeRec range; int conv_num; FontScope conv; } SegConvRec, *SegConv; typedef struct _ParseInfoRec *ParseInfo; typedef struct _CodeSetRec { XlcCharSet *charset_list; int num_charsets; int cs_num; XlcSide side; int length; ByteInfoList byteM; Conversion mbconv; Conversion ctconv; ExtdSegment ctextseg; ParseInfo parse_info; unsigned long wc_encoding; Bool string_encoding; } CodeSetRec, *CodeSet; typedef enum { E_GL, /* GL encoding */ E_GR, /* GR encoding */ E_SS, /* single shift */ E_LSL, /* locking shift left */ E_LSR, /* locking shift right */ E_LAST } EncodingType; typedef struct _ParseInfoRec { EncodingType type; char *encoding; CodeSet codeset; } ParseInfoRec; /* * XLCd private data */ #define XLC_GENERIC(lcd, x) (((XLCdGeneric) lcd->core)->gen.x) #define XLC_GENERIC_PART(lcd) (&(((XLCdGeneric) lcd->core)->gen)) typedef struct _XLCdGenericPart { int codeset_num; CodeSet *codeset_list; unsigned char *mb_parse_table; int mb_parse_list_num; ParseInfo *mb_parse_list; unsigned long wc_encode_mask; unsigned long wc_shift_bits; CodeSet initial_state_GL; CodeSet initial_state_GR; int segment_conv_num; /* UDC */ SegConv segment_conv; /* UDC */ Bool use_stdc_env; Bool force_convert_to_mb; } XLCdGenericPart; typedef struct _XLCdGenericRec { XLCdCoreRec core; XLCdPublicPart pub; XLCdGenericPart gen; } XLCdGenericRec, *XLCdGeneric; extern XLCdMethods _XlcGenericMethods; extern FontScope _XlcParse_scopemaps( const char *str, int *size); extern void _XlcDbg_printValue( const char *str, char **value, int num); extern XIM _XDefaultOpenIM( XLCd lcd, Display *dpy, XrmDatabase rdb, char *res_name, char *res_class); #endif /* _XLCGENERIC_H_ */ def struct _Conversion { unsigned long conversion_type; int conv_num; FontScope convlist; char *cnv_file; XlcConv cnvfunc; } ConversionRec, libX11-1.6.3/src/xlibi18n/Xlcint.h000064401431060000012000000570361247741723500167300ustar00alancstaff00002660200006/* Copyright 1991, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ /* * Copyright 1990, 1991 by OMRON Corporation, NTT Software Corporation, * and Nippon Telegraph and Telephone Corporation * Copyright 1991 by the Open Software Foundation * Copyright 1993 by the TOSHIBA Corp. * Copyright 1993, 1994 by Sony Corporation * Copyright 1993, 1994 by the FUJITSU LIMITED * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the names of OMRON, NTT Software, NTT, Open * Software Foundation, and Sony Corporation not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. OMRON, NTT Software, NTT, Open Software * Foundation, and Sony Corporation make no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * OMRON, NTT SOFTWARE, NTT, OPEN SOFTWARE FOUNDATION, AND SONY * CORPORATION DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT * SHALL OMRON, NTT SOFTWARE, NTT, OPEN SOFTWARE FOUNDATION, OR SONY * CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Authors: Li Yuhong OMRON Corporation * Tatsuya Kato NTT Software Corporation * Hiroshi Kuribayashi OMRON Coproration * Muneiyoshi Suzuki Nippon Telegraph and Telephone Co. * * M. Collins OSF * Katsuhisa Yano TOSHIBA Corp. * Makoto Wakamatsu Sony Corporation * Takashi Fujiwara FUJITSU LIMITED */ #ifndef _XLCINT_H_ #define _XLCINT_H_ #ifndef _XP_PRINT_SERVER_ #include #include #include typedef Bool (*XFilterEventProc)( Display* /* display */, Window /* window */, XEvent* /* event */, XPointer /* client_data */ ); typedef struct _XIMFilter { struct _XIMFilter *next; Window window; unsigned long event_mask; int start_type, end_type; XFilterEventProc filter; XPointer client_data; } XFilterEventRec, *XFilterEventList; typedef struct { char *name; XPointer value; } XIMArg; #ifdef offsetof #define XOffsetOf(s_type,field) offsetof(s_type,field) #else #define XOffsetOf(s_type,field) ((unsigned int)&(((s_type*)NULL)->field)) #endif #define XIMNumber(arr) ((unsigned int) (sizeof(arr) / sizeof(arr[0]))) /* * define secondary data structs which are part of Input Methods * and Input Context */ typedef struct { const char *resource_name; /* Resource string */ XrmQuark xrm_name; /* Resource name quark */ int resource_size; /* Size in bytes of data */ long resource_offset; /* Offset from base */ unsigned short mode; /* Read Write Permission */ unsigned short id; /* Input Method Protocol */ } XIMResource, *XIMResourceList; /* * data block describing the visual attributes associated with * an input context */ typedef struct { XRectangle area; XRectangle area_needed; XPoint spot_location; Colormap colormap; Atom std_colormap; unsigned long foreground; unsigned long background; Pixmap background_pixmap; XFontSet fontset; int line_spacing; Cursor cursor; XICCallback start_callback; XICCallback done_callback; XICCallback draw_callback; XICCallback caret_callback; XIMPreeditState preedit_state; XICCallback state_notify_callback; } ICPreeditAttributes, *ICPreeditAttributesPtr; typedef struct { XRectangle area; XRectangle area_needed; Colormap colormap; Atom std_colormap; unsigned long foreground; unsigned long background; Pixmap background_pixmap; XFontSet fontset; int line_spacing; Cursor cursor; XICCallback start_callback; XICCallback done_callback; XICCallback draw_callback; } ICStatusAttributes, *ICStatusAttributesPtr; #endif /* !_XP_PRINT_SERVER_ */ /* * Methods for Xrm parsing */ /* The state is a pointer to an object created by the locale's init_parse_info function (default: _XrmDefaultInitParseInfo). */ /* Sets the state to the initial state. Initiates a sequence of calls to the XmbCharProc. */ typedef void (*XmbInitProc)( XPointer state ); /* Transforms one multibyte character, starting at str, and return a 'char' in the same parsing class (not a wide character!). Returns the number of consumed bytes in *lenp. */ typedef char (*XmbCharProc)( XPointer state, const char * str, int* lenp ); /* Terminates a sequence of calls to the XmbCharProc. */ typedef void (*XmbFinishProc)( XPointer state ); /* Returns the name of the state's locale, as a static string. */ typedef const char* (*XlcNameProc)( XPointer state ); /* Frees the state, which was allocated by the locale's init_parse_info function. */ typedef void (*XrmDestroyProc)( XPointer state ); /* Set of methods for Xrm parsing. */ typedef struct { XmbInitProc mbinit; XmbCharProc mbchar; XmbFinishProc mbfinish; XlcNameProc lcname; XrmDestroyProc destroy; } XrmMethodsRec; typedef const XrmMethodsRec *XrmMethods; #ifndef _XP_PRINT_SERVER_ typedef struct _XLCd *XLCd; /* need forward reference */ /* * define an LC, it's methods, and data. */ typedef void (*XCloseLCProc)( XLCd /* lcd */ ); typedef char* (*XlcMapModifiersProc)( XLCd /* lcd */, _Xconst char* /* user_mods */, _Xconst char* /* prog_mods */ ); typedef XOM (*XOpenOMProc)( XLCd /* lcd */, Display* /* display */, XrmDatabase /* rdb */, _Xconst char* /* res_name */, _Xconst char* /* res_class */ ); typedef XIM (*XOpenIMProc)( XLCd /* lcd */, Display* /* display */, XrmDatabase /* rdb */, char* /* res_name */, char* /* res_class */ ); typedef Bool (*XRegisterIMInstantiateCBProc)( XLCd /* lcd */, Display* /* display */, XrmDatabase /* rdb */, char* /* res_name */, char* /* res_class */, XIDProc /* callback */, XPointer /* client_data */ ); typedef Bool (*XUnregisterIMInstantiateCBProc)( XLCd /* lcd */, Display* /* display */, XrmDatabase /* rdb */, char* /* res_name */, char* /* res_class */, XIDProc /* callback */, XPointer /* client_data */ ); typedef XrmMethods (*XrmInitParseInfoProc)( XLCd /* lcd */, XPointer* /* state */ ); typedef int (*XmbTextPropertyToTextListProc)( XLCd lcd, Display* display, const XTextProperty* text_prop, char*** list_return, int* count_return ); typedef int (*XwcTextPropertyToTextListProc)( XLCd lcd, Display* display, const XTextProperty* text_prop, wchar_t*** list_return, int* count_return ); typedef int (*XmbTextListToTextPropertyProc)( XLCd lcd, Display* display, char** list, int count, XICCEncodingStyle style, XTextProperty* text_prop_return ); typedef int (*XwcTextListToTextPropertyProc)( XLCd lcd, Display* display, wchar_t** list, int count, XICCEncodingStyle style, XTextProperty* text_prop_return ); typedef void (*XwcFreeStringListProc)( XLCd lcd, wchar_t** list ); typedef const char* (*XDefaultStringProc)( XLCd lcd ); typedef struct { XCloseLCProc close; XlcMapModifiersProc map_modifiers; XOpenOMProc open_om; XOpenIMProc open_im; XrmInitParseInfoProc init_parse_info; XmbTextPropertyToTextListProc mb_text_prop_to_list; XwcTextPropertyToTextListProc wc_text_prop_to_list; XmbTextPropertyToTextListProc utf8_text_prop_to_list; XmbTextListToTextPropertyProc mb_text_list_to_prop; XwcTextListToTextPropertyProc wc_text_list_to_prop; XmbTextListToTextPropertyProc utf8_text_list_to_prop; XwcFreeStringListProc wc_free_string_list; XDefaultStringProc default_string; XRegisterIMInstantiateCBProc register_callback; XUnregisterIMInstantiateCBProc unregister_callback; } XLCdMethodsRec, *XLCdMethods; typedef struct { char* name; /* name of this LC */ char* modifiers; /* modifiers of locale */ } XLCdCoreRec, *XLCdCore; typedef struct _XLCd { XLCdMethods methods; /* methods of this LC */ XLCdCore core; /* data of this LC */ XPointer opaque; /* LDX specific data */ } XLCdRec; typedef int XlcPosition; #define XlcHead 0 #define XlcTail -1 typedef struct { char *name; XPointer value; } XlcArg, *XlcArgList; typedef struct _XlcResource { const char *name; XrmQuark xrm_name; int size; int offset; unsigned long mask; } XlcResource, *XlcResourceList; #define XlcCreateMask (1L<<0) #define XlcDefaultMask (1L<<1) #define XlcGetMask (1L<<2) #define XlcSetMask (1L<<3) #define XlcIgnoreMask (1L<<4) #define XlcNumber(arr) (sizeof(arr) / sizeof(arr[0])) typedef Status (*XCloseOMProc)( XOM /* om */ ); typedef char* (*XSetOMValuesProc)( XOM /* om */, XlcArgList /* args */, int /* num_args */ ); typedef char* (*XGetOMValuesProc)( XOM /* om */, XlcArgList /* args */, int /* num_args */ ); typedef XOC (*XCreateOCProc)( XOM /* om */, XlcArgList /* args */, int /* num_args */ ); typedef struct _XOMMethodsRec { XCloseOMProc close; XSetOMValuesProc set_values; XGetOMValuesProc get_values; XCreateOCProc create_oc; } XOMMethodsRec, *XOMMethods; typedef struct _XOMCoreRec { XLCd lcd; /* lcd */ Display *display; /* display */ XrmDatabase rdb; /* database */ char *res_name; /* resource name */ char *res_class; /* resource class */ XOC oc_list; /* xoc list */ XlcResourceList resources; /* xom resources */ int num_resources; /* number of xom resources */ XOMCharSetList required_charset; /* required charset list */ XOMOrientation orientation_list; /* orientation list */ Bool directional_dependent; /* directional-dependent */ Bool contextual_drawing; /* contextual drawing */ Bool context_dependent; /* context-dependent drawing */ } XOMCoreRec, *XOMCore; typedef struct _XOM { XOMMethods methods; XOMCoreRec core; } XOMRec; typedef void (*XDestroyOCProc)( XOC /* oc */ ); typedef char* (*XSetOCValuesProc)( XOC /* oc */, XlcArgList /* args */, int /* num_args */ ); typedef char* (*XGetOCValuesProc)( XOC /* oc */, XlcArgList /* args */, int /* num_args */ ); /* * X Font Sets are an instantiable object, so we define it, the * object itself, a method list and data */ /* * XFontSet object method list */ typedef int (*XmbTextEscapementProc)( XFontSet /* font_set */, _Xconst char* /* text */, int /* text_len */ ); typedef int (*XmbTextExtentsProc)( XFontSet /* font_set */, _Xconst char* /* text */, int /* text_len */, XRectangle* /* overall_ink_extents */, XRectangle* /* overall_logical_extents */ ); typedef Status (*XmbTextPerCharExtentsProc)( XFontSet /* font_set */, _Xconst char* /* text */, int /* text_len */, XRectangle* /* ink_extents_buffer */, XRectangle* /* logical_extents_buffer */, int /* buffer_size */, int* /* num_chars */, XRectangle* /* max_ink_extents */, XRectangle* /* max_logical_extents */ ); typedef int (*XmbDrawStringProc)( Display* /* display */, Drawable /* drawable */, XFontSet /* font_set */, GC /* gc */, int /* x */, int /* y */, _Xconst char* /* text */, int /* text_len */ ); typedef void (*XmbDrawImageStringProc)( Display* /* display */, Drawable /* drawable */, XFontSet /* font_set */, GC /* gc */, int /* x */, int /* y */, _Xconst char* /* text */, int /* text_len */ ); typedef int (*XwcTextEscapementProc)( XFontSet /* font_set */, _Xconst wchar_t* /* text */, int /* text_len */ ); typedef int (*XwcTextExtentsProc)( XFontSet /* font_set */, _Xconst wchar_t* /* text */, int /* text_len */, XRectangle* /* overall_ink_extents */, XRectangle* /* overall_logical_extents */ ); typedef Status (*XwcTextPerCharExtentsProc)( XFontSet /* font_set */, _Xconst wchar_t* /* text */, int /* text_len */, XRectangle* /* ink_extents_buffer */, XRectangle* /* logical_extents_buffer */, int /* buffer_size */, int* /* num_chars */, XRectangle* /* max_ink_extents */, XRectangle* /* max_logical_extents */ ); typedef int (*XwcDrawStringProc)( Display* /* display */, Drawable /* drawable */, XFontSet /* font_set */, GC /* gc */, int /* x */, int /* y */, _Xconst wchar_t* /* text */, int /* text_len */ ); typedef void (*XwcDrawImageStringProc)( Display* /* display */, Drawable /* drawable */, XFontSet /* font_set */, GC /* gc */, int /* x */, int /* y */, _Xconst wchar_t* /* text */, int /* text_len */ ); typedef struct { XDestroyOCProc destroy; XSetOCValuesProc set_values; XGetOCValuesProc get_values; /* multi-byte text drawing methods */ XmbTextEscapementProc mb_escapement; XmbTextExtentsProc mb_extents; XmbTextPerCharExtentsProc mb_extents_per_char; XmbDrawStringProc mb_draw_string; XmbDrawImageStringProc mb_draw_image_string; /* wide character text drawing methods */ XwcTextEscapementProc wc_escapement; XwcTextExtentsProc wc_extents; XwcTextPerCharExtentsProc wc_extents_per_char; XwcDrawStringProc wc_draw_string; XwcDrawImageStringProc wc_draw_image_string; /* UTF-8 text drawing methods */ XmbTextEscapementProc utf8_escapement; XmbTextExtentsProc utf8_extents; XmbTextPerCharExtentsProc utf8_extents_per_char; XmbDrawStringProc utf8_draw_string; XmbDrawImageStringProc utf8_draw_image_string; } XOCMethodsRec, *XOCMethods; /* * XOC independent data */ typedef struct { XOM om; /* XOM */ XOC next; /* next XOC */ XlcResourceList resources; /* xoc resources */ int num_resources; /* number of xoc resources */ char *base_name_list; /* base font name list */ Bool om_automatic; /* OM Automatic */ XOMFontInfo font_info; /* font info */ XFontSetExtents font_set_extents; /* font set extents */ char *default_string; /* default string */ XOMCharSetList missing_list; /* missing charset list */ XOrientation orientation; /* orientation */ char *res_name; /* resource name */ char *res_class; /* resource class */ } XOCCoreRec, *XOCCore; typedef struct _XOC { XOCMethods methods; XOCCoreRec core; } XOCRec; /* * X Input Managers are an instantiable object, so we define it, the * object itself, a method list and data. */ /* * an Input Manager object method list */ typedef struct { Status (*close)( XIM ); char* (*set_values)( XIM, XIMArg* ); char* (*get_values)( XIM, XIMArg* ); XIC (*create_ic)( XIM, XIMArg* ); int (*ctstombs)( XIM, char*, int, char*, int, Status * ); int (*ctstowcs)( XIM, char*, int, wchar_t*, int, Status * ); int (*ctstoutf8)( XIM, char*, int, char*, int, Status * ); } XIMMethodsRec, *XIMMethods; /* * Input Manager LC independent data */ typedef struct { XLCd lcd; /* LC of this input method */ XIC ic_chain; /* list of ICs for this IM */ Display * display; /* display */ XrmDatabase rdb; char * res_name; char * res_class; XIMValuesList *im_values_list; XIMValuesList *ic_values_list; XIMStyles *styles; XIMCallback destroy_callback; char * im_name; /* XIMMODIFIER name */ XIMResourceList im_resources; /* compiled IM resource list */ unsigned int im_num_resources; XIMResourceList ic_resources; /* compiled IC resource list */ unsigned int ic_num_resources; Bool visible_position; } XIMCoreRec, *XIMCore; /* * An X Input Manager (IM). Implementations may need to extend this data * structure to accomodate additional data, state information etc. */ typedef struct _XIM { XIMMethods methods; /* method list of this IM */ XIMCoreRec core; /* data of this IM */ } XIMRec; /* * X Input Contexts (IC) are an instantiable object, so we define it, the * object itself, a method list and data for this object */ /* * Input Context method list */ typedef struct { void (*destroy)( XIC ); void (*set_focus)( XIC ); void (*unset_focus)( XIC ); char* (*set_values)( XIC, XIMArg* ); char* (*get_values)( XIC, XIMArg* ); char* (*mb_reset)( XIC ); wchar_t* (*wc_reset)( XIC ); char* (*utf8_reset)( XIC ); int (*mb_lookup_string)( XIC, XKeyEvent*, char*, int, KeySym*, Status* ); int (*wc_lookup_string)( XIC, XKeyEvent*, wchar_t*, int, KeySym*, Status* ); int (*utf8_lookup_string)( XIC, XKeyEvent*, char*, int, KeySym*, Status* ); } XICMethodsRec, *XICMethods; /* * Input Context LC independent data */ typedef struct { XIM im; /* XIM this IC belongs too */ XIC next; /* linked list of ICs for IM */ Window client_window; /* window IM can use for */ /* display or subwindows */ XIMStyle input_style; /* IM's input style */ Window focus_window; /* where key events go */ unsigned long filter_events; /* event mask from IM */ XICCallback geometry_callback; /* client callback */ char * res_name; char * res_class; XICCallback destroy_callback; XICCallback string_conversion_callback; XIMStringConversionText string_conversion; XIMResetState reset_state; XIMHotKeyTriggers *hotkey; XIMHotKeyState hotkey_state; ICPreeditAttributes preedit_attr; /* visuals of preedit area */ ICStatusAttributes status_attr; /* visuals of status area */ } XICCoreRec, *XICCore; /* * an Input Context. Implementations may need to extend this data * structure to accomodate additional data, state information etc. */ typedef struct _XIC { XICMethods methods; /* method list of this IC */ XICCoreRec core; /* data of this IC */ } XICRec; /* If the argument 'name' is appropriate for this loader, it instantiates an XLCd object with appropriate locale methods and returns it. May return NULL; in this case, the remaining loaders are tried. */ typedef XLCd (*XLCdLoadProc)( const char* name ); _XFUNCPROTOBEGIN extern XLCd _XOpenLC( char* name ); extern void _XCloseLC( XLCd lcd ); extern XLCd _XlcCurrentLC (void); extern Bool _XlcValidModSyntax( const char* mods, const char* const * valid ); extern char *_XlcDefaultMapModifiers( XLCd lcd, _Xconst char* user_mods, _Xconst char* prog_mods ); extern void _XIMCompileResourceList( XIMResourceList /* res */, unsigned int /* num_res */ ); extern void _XCopyToArg( XPointer /* src */, XPointer* /* dst */, unsigned int /* size */ ); extern char ** _XParseBaseFontNameList( char* /* str */, int* /* num */ ); extern XrmMethods _XrmInitParseInfo( XPointer* statep ); extern void _XRegisterFilterByMask( Display* /* dpy */, Window /* window */, unsigned long /* event_mask */, Bool (*)( Display* /* display */, Window /* window */, XEvent* /* event */, XPointer /* client_data */ ) /* filter */, XPointer /* client_data */ ); extern void _XRegisterFilterByType( Display* /* dpy */, Window /* window */, int /* start_type */, int /* end_type */, Bool (*)( Display* /* display */, Window /* window */, XEvent* /* event */, XPointer /* client_data */ ) /* filter */, XPointer /* client_data */ ); extern void _XUnregisterFilter( Display* /* dpy */, Window /* window */, Bool (*)( Display* /* display */, Window /* window */, XEvent* /* event */, XPointer /* client_data */ ) /* filter */, XPointer /* client_data */ ); extern void _XlcCountVaList( va_list var, int* count_return ); extern void _XlcVaToArgList( va_list var, int count, XlcArgList* args_return ); extern void _XlcCopyFromArg( char * src, char * dst, int size ); extern void _XlcCopyToArg( char * src, char ** dst, int size ); extern void _XlcCompileResourceList( XlcResourceList resources, int num_resources ); extern char *_XlcGetValues( XPointer base, XlcResourceList resources, int num_resources, XlcArgList args, int num_args, unsigned long mask ); extern char *_XlcSetValues( XPointer base, XlcResourceList resources, int num_resources, XlcArgList args, int num_args, unsigned long mask ); /* documented in i18n/Framework.PS */ extern void _XlcInitLoader (void); extern void _XlcDeInitLoader (void); /* documented in i18n/Framework.PS */ /* Returns True on success, False on failure. */ extern Bool _XlcAddLoader( XLCdLoadProc proc, XlcPosition position ); /* documented in i18n/Framework.PS */ extern void _XlcRemoveLoader( XLCdLoadProc proc ); /* Registers UTF-8 converters for a non-UTF-8 locale. */ extern void _XlcAddUtf8Converters( XLCd lcd ); /* Registers UTF-8 converters for a UTF-8 locale. */ extern void _XlcAddUtf8LocaleConverters( XLCd lcd ); /* Registers GB18030 converters for a GB18030 locale. */ extern void _XlcAddGB18030LocaleConverters( XLCd lcd ); /* The default locale loader. Assumes an ASCII encoding. */ extern XLCd _XlcDefaultLoader( const char* name ); /* The generic locale loader. Suitable for all encodings except UTF-8. Uses an XLC_LOCALE configuration file. */ extern XLCd _XlcGenericLoader( const char* name ); /* The UTF-8 locale loader. Suitable for UTF-8 encoding. Uses an XLC_LOCALE configuration file. */ extern XLCd _XlcUtf8Loader( const char* name ); extern XLCd _XlcDynamicLoad( const char* name ); /* The old dynamic loader. */ extern XLCd _XlcDynamicLoader( const char* name ); extern Bool _XInitDefaultIM( XLCd lcd ); extern Bool _XInitDefaultOM( XLCd lcd ); extern Bool _XInitDynamicIM( XLCd lcd ); extern Bool _XInitDynamicOM( XLCd lcd ); _XFUNCPROTOEND #endif /* !_XP_PRINT_SERVER_ */ #endif /* _XLCINT_H_ */ )( XFontSet /* font_set */, _Xconst wchar_t* /* text */, int /* text_len */, XRectangle* /* ink_extents_buffer */, XRectangle* /* logical_extents_buffer */, int /* buffer_size */, int* /* num_chars */, XRectangle* /* max_ink_extents */, XRectangle* /* max_logical_extents */ ); typedef int (*XwcDrawStringProc)( Display* /* display */, Drawable /* drawable */, XFontSet /* font_set */, GC /* gc */, int /* x libX11-1.6.3/src/xlibi18n/XimProto.h000064401431060000012000000137611247741723500172450ustar00alancstaff00002660200006/****************************************************************** Copyright 1992, 1993 by FUJITSU LIMITED Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of FUJITSU LIMITED not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ #ifndef _XIMPROTO_H #define _XIMPROTO_H /* * Default Preconnection selection target */ #define XIM_SERVERS "XIM_SERVERS" #define XIM_LOCALES "LOCALES" #define XIM_TRANSPORT "TRANSPORT" /* * categories in XIM_SERVERS */ #define XIM_SERVER_CATEGORY "@server=" #define XIM_LOCAL_CATEGORY "@locale=" #define XIM_TRANSPORT_CATEGORY "@transport=" /* * Xim implementation revision */ #define PROTOCOLMAJORVERSION 1 #define PROTOCOLMINORVERSION 0 /* * Major Protocol number */ #define XIM_CONNECT 1 #define XIM_CONNECT_REPLY 2 #define XIM_DISCONNECT 3 #define XIM_DISCONNECT_REPLY 4 #define XIM_AUTH_REQUIRED 10 #define XIM_AUTH_REPLY 11 #define XIM_AUTH_NEXT 12 #define XIM_AUTH_SETUP 13 #define XIM_AUTH_NG 14 #define XIM_ERROR 20 #define XIM_OPEN 30 #define XIM_OPEN_REPLY 31 #define XIM_CLOSE 32 #define XIM_CLOSE_REPLY 33 #define XIM_REGISTER_TRIGGERKEYS 34 #define XIM_TRIGGER_NOTIFY 35 #define XIM_TRIGGER_NOTIFY_REPLY 36 #define XIM_SET_EVENT_MASK 37 #define XIM_ENCODING_NEGOTIATION 38 #define XIM_ENCODING_NEGOTIATION_REPLY 39 #define XIM_QUERY_EXTENSION 40 #define XIM_QUERY_EXTENSION_REPLY 41 #define XIM_SET_IM_VALUES 42 #define XIM_SET_IM_VALUES_REPLY 43 #define XIM_GET_IM_VALUES 44 #define XIM_GET_IM_VALUES_REPLY 45 #define XIM_CREATE_IC 50 #define XIM_CREATE_IC_REPLY 51 #define XIM_DESTROY_IC 52 #define XIM_DESTROY_IC_REPLY 53 #define XIM_SET_IC_VALUES 54 #define XIM_SET_IC_VALUES_REPLY 55 #define XIM_GET_IC_VALUES 56 #define XIM_GET_IC_VALUES_REPLY 57 #define XIM_SET_IC_FOCUS 58 #define XIM_UNSET_IC_FOCUS 59 #define XIM_FORWARD_EVENT 60 #define XIM_SYNC 61 #define XIM_SYNC_REPLY 62 #define XIM_COMMIT 63 #define XIM_RESET_IC 64 #define XIM_RESET_IC_REPLY 65 #define XIM_GEOMETRY 70 #define XIM_STR_CONVERSION 71 #define XIM_STR_CONVERSION_REPLY 72 #define XIM_PREEDIT_START 73 #define XIM_PREEDIT_START_REPLY 74 #define XIM_PREEDIT_DRAW 75 #define XIM_PREEDIT_CARET 76 #define XIM_PREEDIT_CARET_REPLY 77 #define XIM_PREEDIT_DONE 78 #define XIM_STATUS_START 79 #define XIM_STATUS_DRAW 80 #define XIM_STATUS_DONE 81 #define XIM_PREEDITSTATE 82 /* * values for the flag of XIM_ERROR */ #define XIM_IMID_VALID 0x0001 #define XIM_ICID_VALID 0x0002 /* * XIM Error Code */ #define XIM_BadAlloc 1 #define XIM_BadStyle 2 #define XIM_BadClientWindow 3 #define XIM_BadFocusWindow 4 #define XIM_BadArea 5 #define XIM_BadSpotLocation 6 #define XIM_BadColormap 7 #define XIM_BadAtom 8 #define XIM_BadPixel 9 #define XIM_BadPixmap 10 #define XIM_BadName 11 #define XIM_BadCursor 12 #define XIM_BadProtocol 13 #define XIM_BadForeground 14 #define XIM_BadBackground 15 #define XIM_LocaleNotSupported 16 #define XIM_BadSomething 999 /* * byte order */ #define BIGENDIAN (CARD8)0x42 /* MSB first */ #define LITTLEENDIAN (CARD8)0x6c /* LSB first */ /* * values for the type of XIMATTR & XICATTR */ #define XimType_SeparatorOfNestedList 0 #define XimType_CARD8 1 #define XimType_CARD16 2 #define XimType_CARD32 3 #define XimType_STRING8 4 #define XimType_Window 5 #define XimType_XIMStyles 10 #define XimType_XRectangle 11 #define XimType_XPoint 12 #define XimType_XFontSet 13 #define XimType_XIMOptions 14 #define XimType_XIMHotKeyTriggers 15 #define XimType_XIMHotKeyState 16 #define XimType_XIMStringConversion 17 #define XimType_NEST 0x7fff /* * values for the category of XIM_ENCODING_NEGITIATON_REPLY */ #define XIM_Encoding_NameCategory 0 #define XIM_Encoding_DetailCategory 1 /* * value for the index of XIM_ENCODING_NEGITIATON_REPLY */ #define XIM_Default_Encoding_IDX -1 /* * value for the flag of XIM_FORWARD_EVENT, XIM_COMMIT */ #define XimSYNCHRONUS 0x0001 #define XimLookupChars 0x0002 #define XimLookupKeySym 0x0004 #define XimLookupBoth 0x0006 /* * request packet header size */ #define XIM_HEADER_SIZE \ sizeof(CARD8) /* sizeof mejor-opcode */ \ + sizeof(CARD8) /* sizeof minor-opcode */ \ + sizeof(INT16) /* sizeof length */ /* * Client Message data size */ #define XIM_CM_DATA_SIZE 20 /* * XIM data structure */ typedef CARD16 BITMASK16; typedef CARD32 BITMASK32; typedef CARD32 EVENTMASK; typedef CARD16 XIMID; /* Input Method ID */ typedef CARD16 XICID; /* Input Context ID */ /* * Padding macro */ #define XIM_PAD(length) ((4 - ((length) % 4)) % 4) #define XIM_SET_PAD(ptr, length) \ { \ register int Counter = XIM_PAD((int)length); \ if (Counter) { \ register char *Ptr = (char *)(ptr) + (length); \ length += Counter; \ for (; Counter; --Counter, ++Ptr) \ *Ptr = '\0'; \ } \ } #endif /* _XIMPROTO_H */ 1 #define XIM_SlibX11-1.6.3/src/xlibi18n/XlcSL.c000064401431060000012000000070131247741723500164350ustar00alancstaff00002660200006/* Copyright 1985, 1986, 1987, 1991, 1998 The Open Group 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: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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 EVEN IF ADVISED IN ADVANCE OF THE POSSIBILITY OF SUCH DAMAGES. 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 The Open Group. X Window System is a trademark of The Open Group OSF/1, OSF/Motif and Motif are registered trademarks, and OSF, the OSF logo, LBX, X Window System, and Xinerama are trademarks of the Open Group. All other trademarks and registered trademarks mentioned herein are the property of their respective owners. No right, title or interest in or to any trademark, service mark, logo or trade name of Sun Microsystems, Inc. or its licensors is granted. */ /* * Copyright 2000 Oracle and/or its affiliates. All rights reserved. * * 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: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xlcint.h" extern XIM _XDefaultOpenIM( XLCd, Display *, XrmDatabase, char *, char * ); Bool _XInitDefaultIM(XLCd lcd) { if(lcd == (XLCd)NULL) return False; lcd->methods->open_im = _XDefaultOpenIM; lcd->methods->register_callback = NULL; lcd->methods->unregister_callback = NULL; return True; } extern XOM _XDefaultOpenOM( XLCd, Display*, XrmDatabase, _Xconst char*, _Xconst char* ); Bool _XInitDefaultOM(XLCd lcd) { lcd->methods->open_om = _XDefaultOpenOM; return True; } libX11-1.6.3/src/xlibi18n/XimTrInt.h000064401431060000012000000057241247741723500172020ustar00alancstaff00002660200006/* * Copyright 1992 Oracle and/or its affiliates. All rights reserved. * * 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: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. */ /****************************************************************** Copyright 1993, 1994 by FUJITSU LIMITED Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of FUJITSU LIMITED not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Hideki Hiura (hhiura@Sun.COM) Sun Microsystems, Inc. Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ #ifndef _XIMTRINT_H #define _XIMTRINT_H #include "Ximint.h" typedef struct { const char *transportname; Bool (*config)( Xim, char * ); } TransportSW; extern TransportSW _XimTransportRec[]; /* * Global symbols */ extern Bool _XimXConf( Xim im, char *address ); #if defined(TCPCONN) || defined(UNIXCONN) extern Bool _XimTransConf( Xim im, char *address ); #endif #endif /* _XIMTRINT_H */ NY CLAIM, DAMAGES OR OTHER * LIABILITY, WHElibX11-1.6.3/src/xlibi18n/lcUtil.c000064401431060000012000000045501247741723500167070ustar00alancstaff00002660200006/* * Copyright 1992, 1993 by TOSHIBA Corp. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of TOSHIBA not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. TOSHIBA make no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * * Author: Katsuhisa Yano TOSHIBA Corp. * mopi@osa.ilab.toshiba.co.jp * Bug fixes: Bruno Haible XFree86 Inc. */ #ifdef HAVE_CONFIG_H #include #endif #include #include "XlcPublic.h" /* Don't use here because it is locale dependent. */ #define set_toupper(ch) \ if (ch >= 'a' && ch <= 'z') \ ch = ch - 'a' + 'A'; /* Compares two ISO 8859-1 strings, ignoring case of ASCII letters. Like strcasecmp in an ASCII locale. */ int _XlcCompareISOLatin1( const char *str1, const char *str2) { unsigned char ch1, ch2; for ( ; ; str1++, str2++) { ch1 = *str1; ch2 = *str2; if (ch1 == '\0' || ch2 == '\0') break; set_toupper(ch1); set_toupper(ch2); if (ch1 != ch2) break; } return ch1 - ch2; } /* Compares two ISO 8859-1 strings, at most len bytes of each, ignoring case of ASCII letters. Like strncasecmp in an ASCII locale. */ int _XlcNCompareISOLatin1( const char *str1, const char *str2, int len) { unsigned char ch1, ch2; for ( ; ; str1++, str2++, len--) { if (len == 0) return 0; ch1 = *str1; ch2 = *str2; if (ch1 == '\0' || ch2 == '\0') break; set_toupper(ch1); set_toupper(ch2); if (ch1 != ch2) break; } return ch1 - ch2; } libX11-1.6.3/src/xlibi18n/lcGeneric.c000064401431060000012000000727431247741723500173570ustar00alancstaff00002660200006/* * Copyright 1992, 1993 by TOSHIBA Corp. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of TOSHIBA not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. TOSHIBA make no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * * Author: Katsuhisa Yano TOSHIBA Corp. * mopi@osa.ilab.toshiba.co.jp */ /* * (c) Copyright 1995 FUJITSU LIMITED * This is source code modified by FUJITSU LIMITED under the Joint * Development Agreement for the CDE/Motif PST. */ #ifdef HAVE_CONFIG_H #include #endif #include #include "Xlibint.h" #include "XlcGeneric.h" static XLCd create (const char *name, XLCdMethods methods); static Bool initialize (XLCd lcd); static void destroy (XLCd lcd); static XLCdPublicMethodsRec genericMethods = { { NULL }, /* use default methods */ { NULL, create, initialize, destroy, NULL } }; XLCdMethods _XlcGenericMethods = (XLCdMethods) &genericMethods; static XLCd create( const char *name, XLCdMethods methods) { XLCd lcd; XLCdPublicMethods new; lcd = Xcalloc(1, sizeof(XLCdRec)); if (lcd == NULL) return (XLCd) NULL; lcd->core = Xcalloc(1, sizeof(XLCdGenericRec)); if (lcd->core == NULL) goto err; new = Xmalloc(sizeof(XLCdPublicMethodsRec)); if (new == NULL) goto err; memcpy(new,methods,sizeof(XLCdPublicMethodsRec)); lcd->methods = (XLCdMethods) new; return lcd; err: Xfree(lcd); return (XLCd) NULL; } static Bool string_to_encoding( const char *str, char *encoding) { char *next; long value; int base; while (*str) { if (*str == '\\') { switch (*(str + 1)) { case 'x': case 'X': base = 16; break; default: base = 8; break; } value = strtol(str + 2, &next, base); if (str + 2 != next) { *((unsigned char *) encoding++) = (unsigned char) value; str = next; continue; } } *encoding++ = *str++; } *encoding = '\0'; return True; } static Bool string_to_ulong( const char *str, unsigned long *value) { const char *tmp1 = str; int base; if (*tmp1++ != '\\') { tmp1--; base = 10; } else { switch (*tmp1++) { case 'x': base = 16; break; case 'o': base = 8; break; case 'd': base = 10; break; default: return(False); } } *value = (unsigned long) strtol(tmp1, NULL, base); return(True); } static Bool add_charset( CodeSet codeset, XlcCharSet charset) { XlcCharSet *new_list; int num; if ((num = codeset->num_charsets)) new_list = Xrealloc(codeset->charset_list, (num + 1) * sizeof(XlcCharSet)); else new_list = Xmalloc(sizeof(XlcCharSet)); if (new_list == NULL) return False; new_list[num] = charset; codeset->charset_list = new_list; codeset->num_charsets = num + 1; return True; } static CodeSet add_codeset( XLCdGenericPart *gen) { CodeSet new, *new_list; int num; new = Xcalloc(1, sizeof(CodeSetRec)); if (new == NULL) return NULL; if ((num = gen->codeset_num)) new_list = Xrealloc(gen->codeset_list, (num + 1) * sizeof(CodeSet)); else new_list = Xmalloc(sizeof(CodeSet)); if (new_list == NULL) goto err; new_list[num] = new; gen->codeset_list = new_list; gen->codeset_num = num + 1; return new; err: Xfree(new); return NULL; } static Bool add_parse_list( XLCdGenericPart *gen, EncodingType type, const char *encoding, CodeSet codeset) { ParseInfo new, *new_list; char *str; unsigned char ch; int num; str = strdup(encoding); if (str == NULL) return False; new = Xcalloc(1, sizeof(ParseInfoRec)); if (new == NULL) goto err; if (gen->mb_parse_table == NULL) { gen->mb_parse_table = Xcalloc(1, 256); /* 2^8 */ if (gen->mb_parse_table == NULL) goto err; } if ((num = gen->mb_parse_list_num)) new_list = Xrealloc(gen->mb_parse_list, (num + 2) * sizeof(ParseInfo)); else { new_list = Xmalloc(2 * sizeof(ParseInfo)); } if (new_list == NULL) goto err; new_list[num] = new; new_list[num + 1] = NULL; gen->mb_parse_list = new_list; gen->mb_parse_list_num = num + 1; ch = (unsigned char) *str; if (gen->mb_parse_table[ch] == 0) gen->mb_parse_table[ch] = num + 1; new->type = type; new->encoding = str; new->codeset = codeset; if (codeset->parse_info == NULL) codeset->parse_info = new; return True; err: Xfree(str); Xfree(new); return False; } static void free_charset( XLCd lcd) { XLCdGenericPart *gen = XLC_GENERIC_PART(lcd); ParseInfo *parse_info; int num; Xfree(gen->mb_parse_table); if ((num = gen->mb_parse_list_num) > 0) { for (parse_info = gen->mb_parse_list; num-- > 0; parse_info++) { Xfree((*parse_info)->encoding); Xfree(*parse_info); } Xfree(gen->mb_parse_list); } if ((num = gen->codeset_num) > 0) Xfree(gen->codeset_list); } /* For VW/UDC */ #define FORWARD (unsigned long)'+' #define BACKWARD (unsigned long)'-' static const char * getscope( const char *str, FontScope scp) { unsigned long start = 0; unsigned long end = 0; unsigned long dest = 0; unsigned long shift = 0; unsigned long direction = 0; sscanf(str,"[\\x%lx,\\x%lx]->\\x%lx", &start, &end, &dest); if (dest) { if (dest >= start) { shift = dest - start; direction = FORWARD ; } else { shift = start - dest; direction = BACKWARD; } } scp->start = start ; scp->end = end ; scp->shift = shift ; scp->shift_direction = direction ; /* .......... */ while (*str) { if (*str == ',' && *(str+1) == '[') break; str++; } return str+1; } static int count_scopemap( const char *str) { const char *ptr; int num=0; for (ptr=str; *ptr; ptr++) { if (*ptr == ']') { num++; } } return num; } FontScope _XlcParse_scopemaps( const char *str, int *size) { int num=0,i; FontScope scope,sc_ptr; const char *str_sc; num = count_scopemap(str); scope = Xmalloc(num * sizeof(FontScopeRec)); if (scope == NULL) return NULL; for (i=0, str_sc=str, sc_ptr=scope; i < num; i++, sc_ptr++) { str_sc = getscope(str_sc, sc_ptr); } *size = num; return scope; } void _XlcDbg_printValue( const char *str, char **value, int num) { /* int i; for (i = 0; i < num; i++) fprintf(stderr, "%s value[%d] = %s\n", str, i, value[i]); */ } static void dmpscope( const char* name, FontScope sc, int num) { /* int i; fprintf(stderr, "dmpscope %s\n", name); for (i=0; isource = CSsrcXLC; } return charset; } static void read_charset_define( XLCd lcd, XLCdGenericPart *gen) { int i; char csd[16], cset_name[256]; char name[BUFSIZ]; XlcCharSet charsetd; char **value; int num, new = 0; XlcSide side = XlcUnknown; char *tmp; for (i=0; ; i++) { /* loop start */ charsetd = 0; snprintf(csd, sizeof(csd), "csd%d", i); /* charset_name */ snprintf(name, sizeof(name), "%s.%s", csd, "charset_name"); _XlcGetResource(lcd, "XLC_CHARSET_DEFINE", name, &value, &num); _XlcDbg_printValue(name,value,num); if (num > 0) { /* hackers will get truncated -- C'est la vie */ strncpy(cset_name,value[0], sizeof cset_name - 1); cset_name[(sizeof cset_name) - 1] = '\0'; snprintf(name, sizeof(name), "%s.%s", csd , "side"); _XlcGetResource(lcd, "XLC_CHARSET_DEFINE", name, &value, &num); if (num > 0) { _XlcDbg_printValue(name,value,num); if (!_XlcNCompareISOLatin1(value[0], "none", 4)) { side = XlcGLGR; } else if (!_XlcNCompareISOLatin1(value[0], "GL", 2)) { side = XlcGL; strcat(cset_name,":GL"); } else { side = XlcGR; strcat(cset_name,":GR"); } if (charsetd == NULL && (charsetd = srch_charset_define(cset_name,&new)) == NULL) return; } } else { if (i == 0) continue; else break; } if (new) { tmp = strdup(cset_name); if (tmp == NULL) return; charsetd->name = tmp; } /* side */ charsetd->side = side ; /* length */ snprintf(name, sizeof(name), "%s.%s", csd, "length"); _XlcGetResource(lcd, "XLC_CHARSET_DEFINE", name, &value, &num); if (num > 0) { _XlcDbg_printValue(name,value,num); charsetd->char_size = atoi(value[0]); } /* gc_number */ snprintf(name, sizeof(name), "%s.%s", csd, "gc_number"); _XlcGetResource(lcd, "XLC_CHARSET_DEFINE", name, &value, &num); if (num > 0) { _XlcDbg_printValue(name,value,num); charsetd->set_size = atoi(value[0]); } /* string_encoding */ snprintf(name, sizeof(name), "%s.%s", csd, "string_encoding"); _XlcGetResource(lcd, "XLC_CHARSET_DEFINE", name, &value, &num); if (num > 0) { _XlcDbg_printValue(name,value,num); if (!strcmp("False",value[0])) { charsetd->string_encoding = False; } else { charsetd->string_encoding = True; } } /* sequence */ snprintf(name, sizeof(name), "%s.%s", csd, "sequence"); _XlcGetResource(lcd, "XLC_CHARSET_DEFINE", name, &value, &num); if (num > 0) { _XlcDbg_printValue(name,value,num); /* if (charsetd->ct_sequence) { Xfree(charsetd->ct_sequence); } */ tmp = Xmalloc(strlen(value[0])+1); if (tmp == NULL) return; charsetd->ct_sequence = tmp; string_to_encoding(value[0],tmp); } /* encoding_name */ snprintf(name, sizeof(name), "%s.%s", csd, "encoding_name"); _XlcGetResource(lcd, "XLC_CHARSET_DEFINE", name, &value, &num); if (num > 0) { _XlcDbg_printValue(name,value,num); /* if (charsetd->encoding_name) { Xfree(charsetd->encoding_name); } */ tmp = strdup(value[0]); charsetd->encoding_name = tmp; charsetd->xrm_encoding_name = XrmStringToQuark(tmp); } _XlcAddCT(charsetd->name, charsetd->ct_sequence); } } static SegConv add_conversion( XLCdGenericPart *gen) { SegConv new_list; int num; if ((num = gen->segment_conv_num) > 0) { new_list = Xrealloc(gen->segment_conv, (num + 1) * sizeof(SegConvRec)); } else { new_list = Xmalloc(sizeof(SegConvRec)); } if (new_list == NULL) return NULL; gen->segment_conv = new_list; gen->segment_conv_num = num + 1; return &new_list[num]; } static void read_segmentconversion( XLCd lcd, XLCdGenericPart *gen) { int i; char conv[16]; char name[BUFSIZ]; char **value; int num,new; SegConv conversion; for (i=0 ; ; i++) { /* loop start */ conversion = 0; snprintf(conv, sizeof(conv), "conv%d", i); /* length */ snprintf(name, sizeof(name), "%s.%s", conv, "length"); _XlcGetResource(lcd, "XLC_SEGMENTCONVERSION", name, &value, &num); if (num > 0) { if (conversion == NULL && (conversion = add_conversion(gen)) == NULL) { return; } _XlcDbg_printValue(name,value,num); } else { if (i == 0) continue; else break; } conversion->length = atoi(value[0]); /* source_encoding */ snprintf(name, sizeof(name), "%s.%s", conv, "source_encoding"); _XlcGetResource(lcd, "XLC_SEGMENTCONVERSION", name, &value, &num); if (num > 0) { char *tmp; _XlcDbg_printValue(name,value,num); tmp = strdup(value[0]); if (tmp == NULL) return; conversion->source_encoding = tmp; conversion->source = srch_charset_define(tmp,&new); } /* destination_encoding */ snprintf(name, sizeof(name), "%s.%s", conv, "destination_encoding"); _XlcGetResource(lcd, "XLC_SEGMENTCONVERSION", name, &value, &num); if (num > 0) { char *tmp; _XlcDbg_printValue(name,value,num); tmp = strdup(value[0]); if (tmp == NULL) return; conversion->destination_encoding = tmp; conversion->dest = srch_charset_define(tmp,&new); } /* range */ snprintf(name, sizeof(name), "%s.%s", conv, "range"); _XlcGetResource(lcd, "XLC_SEGMENTCONVERSION", name, &value, &num); if (num > 0) { _XlcDbg_printValue(name,value,num); sscanf(value[0],"\\x%lx,\\x%lx", &(conversion->range.start), &(conversion->range.end)); } /* conversion */ snprintf(name, sizeof(name), "%s.%s", conv, "conversion"); _XlcGetResource(lcd, "XLC_SEGMENTCONVERSION", name, &value, &num); if (num > 0) { _XlcDbg_printValue(name,value,num); conversion->conv = _XlcParse_scopemaps(value[0],&conversion->conv_num); } } /* loop end */ } static ExtdSegment create_ctextseg( char **value, int num) { ExtdSegment ret; char* ptr; char* cset_name = NULL; size_t cset_len; int i,new; FontScope scope; ret = Xmalloc(sizeof(ExtdSegmentRec)); if (ret == NULL) return NULL; ret->name = strdup(value[0]); if (ret->name == NULL) { Xfree (ret); return NULL; } cset_len = strlen(ret->name) + 1; cset_name = Xmalloc (cset_len); if (cset_name == NULL) { Xfree (ret->name); Xfree (ret); return NULL; } if (strchr(value[0],':')) { ptr = strchr(ret->name,':'); *ptr = '\0'; ptr++; if (!_XlcNCompareISOLatin1(ptr, "GL", 2)) { ret->side = XlcGL; snprintf(cset_name, cset_len, "%s:%s", ret->name, "GL"); } else { ret->side = XlcGR; snprintf(cset_name, cset_len, "%s:%s", ret->name, "GR"); } } else { ret->side = XlcGLGR; strcpy(cset_name,ret->name); } ret->area = Xmalloc((num - 1)*sizeof(FontScopeRec)); if (ret->area == NULL) { Xfree (cset_name); Xfree (ret->name); Xfree (ret); return NULL; } ret->area_num = num - 1; scope = ret->area ; for (i = 1; i < num; i++) { sscanf(value[i],"\\x%lx,\\x%lx", &scope[i-1].start, &scope[i-1].end); } ret->charset = srch_charset_define(cset_name,&new); Xfree (cset_name); return ret; } /* For VW/UDC end */ static Bool load_generic( XLCd lcd) { XLCdGenericPart *gen = XLC_GENERIC_PART(lcd); char **value; int num; unsigned long l; int i; int M,ii; XlcCharSet charset; gen->codeset_num = 0; /***** wc_encoding_mask *****/ _XlcGetResource(lcd, "XLC_XLOCALE", "wc_encoding_mask", &value, &num); if (num > 0) { if (string_to_ulong(value[0], &l) == False) goto err; gen->wc_encode_mask = l; } /***** wc_shift_bits *****/ _XlcGetResource(lcd, "XLC_XLOCALE", "wc_shift_bits", &value, &num); if (num > 0) gen->wc_shift_bits = atoi(value[0]); if (gen->wc_shift_bits < 1) gen->wc_shift_bits = 8; /***** use_stdc_env *****/ _XlcGetResource(lcd, "XLC_XLOCALE", "use_stdc_env", &value, &num); if (num > 0 && !_XlcCompareISOLatin1(value[0], "True")) gen->use_stdc_env = True; else gen->use_stdc_env = False; /***** force_convert_to_mb *****/ _XlcGetResource(lcd, "XLC_XLOCALE", "force_convert_to_mb", &value, &num); if (num > 0 && !_XlcCompareISOLatin1(value[0], "True")) gen->force_convert_to_mb = True; else gen->force_convert_to_mb = False; for (i = 0; ; i++) { CodeSetRec *codeset = NULL; char cs[16]; char name[BUFSIZ]; snprintf(cs, sizeof(cs), "cs%d", i); /***** codeset.side *****/ snprintf(name, sizeof(name), "%s.%s", cs , "side"); _XlcGetResource(lcd, "XLC_XLOCALE", name, &value, &num); if (num > 0) { char *tmp; if (codeset == NULL && (codeset = add_codeset(gen)) == NULL) goto err; /* 3.4.1 side */ if (!_XlcNCompareISOLatin1(value[0], "none", 4)) { codeset->side = XlcNONE; } else if (!_XlcNCompareISOLatin1(value[0], "GL", 2)) { codeset->side = XlcGL; } else { codeset->side = XlcGR; } tmp = strrchr(value[0], ':'); if (tmp != NULL && !_XlcCompareISOLatin1(tmp + 1, "Default")) { if (codeset->side == XlcGR) gen->initial_state_GR = codeset; else gen->initial_state_GL = codeset; } } /***** codeset.length *****/ snprintf(name, sizeof(name), "%s.%s", cs , "length"); _XlcGetResource(lcd, "XLC_XLOCALE", name, &value, &num); if (num > 0) { if (codeset == NULL && (codeset = add_codeset(gen)) == NULL) goto err; codeset->length = atoi(value[0]); if (codeset->length < 1) codeset->length = 1; } /***** codeset.mb_encoding *****/ snprintf(name, sizeof(name), "%s.%s", cs, "mb_encoding"); _XlcGetResource(lcd, "XLC_XLOCALE", name, &value, &num); if (num > 0) { static struct { const char *str; EncodingType type; } shifts[] = { {"", E_SS}, {"", E_LSL}, {"", E_LSR}, {0} }; int j; if (codeset == NULL && (codeset = add_codeset(gen)) == NULL) goto err; for ( ; num-- > 0; value++) { char encoding[256]; char *tmp = *value; EncodingType type = E_SS; /* for BC */ for (j = 0; shifts[j].str; j++) { if (!_XlcNCompareISOLatin1(tmp, shifts[j].str, strlen(shifts[j].str))) { type = shifts[j].type; tmp += strlen(shifts[j].str); break; } } if (strlen (tmp) > sizeof encoding || string_to_encoding(tmp, encoding) == False) goto err; add_parse_list(gen, type, encoding, codeset); } } /***** codeset.wc_encoding *****/ snprintf(name, sizeof(name), "%s.%s", cs, "wc_encoding"); _XlcGetResource(lcd, "XLC_XLOCALE", name, &value, &num); if (num > 0) { if (codeset == NULL && (codeset = add_codeset(gen)) == NULL) goto err; if (string_to_ulong(value[0], &l) == False) goto err; codeset->wc_encoding = l; } /***** codeset.ct_encoding *****/ snprintf(name, sizeof(name), "%s.%s", cs, "ct_encoding"); _XlcGetResource(lcd, "XLC_XLOCALE", name, &value, &num); if (num > 0) { char *encoding; if (codeset == NULL && (codeset = add_codeset(gen)) == NULL) goto err; for ( ; num-- > 0; value++) { if (strlen (*value) > sizeof name) goto err; string_to_encoding(*value, name); charset = NULL; if ((encoding = strchr(name, ':')) && (encoding = strchr(encoding + 1, ':'))) { *encoding++ = '\0'; charset = _XlcAddCT(name, encoding); } if (charset == NULL) { charset = _XlcGetCharSet(name); if (charset == NULL && (charset = _XlcCreateDefaultCharSet(name, ""))) { charset->side = codeset->side; charset->char_size = codeset->length; _XlcAddCharSet(charset); } } if (charset) { if (add_charset(codeset, charset) == False) goto err; } } } if (codeset == NULL) break; codeset->cs_num = i; /* For VW/UDC */ /***** 3.4.2 byteM (1 <= M <= length)*****/ for (M=1; M-1 < codeset->length; M++) { unsigned long start,end; ByteInfo tmpb; snprintf(name, sizeof(name),"%s.%s%d",cs,"byte",M); _XlcGetResource(lcd, "XLC_XLOCALE", name, &value, &num); if (M == 1) { if (num < 1) { codeset->byteM = NULL; break ; } codeset->byteM = Xmalloc( (codeset->length)*sizeof(ByteInfoListRec)); if (codeset->byteM == NULL) { goto err; } } if (num > 0) { _XlcDbg_printValue(name,value,num); (codeset->byteM)[M-1].M = M; (codeset->byteM)[M-1].byteinfo_num = num; (codeset->byteM)[M-1].byteinfo = Xmalloc(num * sizeof(ByteInfoRec)); for (ii = 0 ; ii < num ; ii++) { tmpb = (codeset->byteM)[M-1].byteinfo ; /* default 0x00 - 0xff */ sscanf(value[ii],"\\x%lx,\\x%lx",&start,&end); tmpb[ii].start = (unsigned char)start; tmpb[ii].end = (unsigned char)end; } } /* .... */ } /***** codeset.mb_conversion *****/ snprintf(name, sizeof(name), "%s.%s", cs, "mb_conversion"); _XlcGetResource(lcd, "XLC_XLOCALE", name, &value, &num); if (num > 0) { _XlcDbg_printValue(name,value,num); codeset->mbconv = Xmalloc(sizeof(ConversionRec)); codeset->mbconv->convlist = _XlcParse_scopemaps(value[0],&(codeset->mbconv->conv_num)); dmpscope("mb_conv",codeset->mbconv->convlist, codeset->mbconv->conv_num); /* [\x%x,\x%x]->\x%x,... */ } /***** codeset.ct_conversion *****/ snprintf(name, sizeof(name), "%s.%s", cs, "ct_conversion"); _XlcGetResource(lcd, "XLC_XLOCALE", name, &value, &num); if (num > 0) { _XlcDbg_printValue(name,value,num); codeset->ctconv = Xmalloc(sizeof(ConversionRec)); codeset->ctconv->convlist = _XlcParse_scopemaps(value[0],&(codeset->ctconv->conv_num)); dmpscope("ctconv",codeset->ctconv->convlist, codeset->ctconv->conv_num); /* [\x%x,\x%x]->\x%x,... */ } /***** codeset.ct_conversion_file *****/ snprintf(name, sizeof(name), "%s.%s", cs, "ct_conversion_file"); _XlcGetResource(lcd, "XLC_XLOCALE", name, &value, &num); if (num > 0) { _XlcDbg_printValue(name,value,num); /* [\x%x,\x%x]->\x%x,... */ } /***** codeset.ct_extended_segment *****/ snprintf(name, sizeof(name), "%s.%s", cs, "ct_extended_segment"); _XlcGetResource(lcd, "XLC_XLOCALE", name, &value, &num); if (num > 0) { _XlcDbg_printValue(name,value,num); codeset->ctextseg = create_ctextseg(value,num); /* [\x%x,\x%x]->\x%x,... */ } /* For VW/UDC end */ } read_charset_define(lcd,gen); /* For VW/UDC */ read_segmentconversion(lcd,gen); /* For VW/UDC */ if (gen->initial_state_GL == NULL) { CodeSetRec *codeset; for (i = 0; i < gen->codeset_num; i++) { codeset = gen->codeset_list[i]; if (codeset->side == XlcGL) gen->initial_state_GL = codeset; } } if (gen->initial_state_GR == NULL) { CodeSetRec *codeset; for (i = 0; i < gen->codeset_num; i++) { codeset = gen->codeset_list[i]; if (codeset->side == XlcGR) gen->initial_state_GR = codeset; } } for (i = 0; i < gen->codeset_num; i++) { CodeSetRec *codeset = gen->codeset_list[i]; for (ii = 0; ii < codeset->num_charsets; ii++) { charset = codeset->charset_list[ii]; if (! strcmp(charset->encoding_name, "ISO8859-1")) charset->string_encoding = True; if ( charset->string_encoding ) codeset->string_encoding = True; } } return True; err: free_charset(lcd); return False; } #ifdef USE_DYNAMIC_LC /* override the open_om and open_im methods which were set by super_class's initialize method() */ static Bool initialize_core( XLCd lcd) { _XInitDynamicOM(lcd); _XInitDynamicIM(lcd); return True; } #endif static Bool initialize(XLCd lcd) { XLCdPublicMethods superclass = (XLCdPublicMethods) _XlcPublicMethods; XLC_PUBLIC_METHODS(lcd)->superclass = superclass; if (superclass->pub.initialize) { if ((*superclass->pub.initialize)(lcd) == False) return False; } #ifdef USE_DYNAMIC_LC if (initialize_core(lcd) == False) return False; #endif if (load_generic(lcd) == False) return False; return True; } /* VW/UDC start 95.01.08 */ static void freeByteM( CodeSet codeset) { int i; ByteInfoList blst; if (codeset->byteM == NULL) { return ; } blst = codeset->byteM; for (i = 0; i < codeset->length; i++) { if (blst[i].byteinfo) { Xfree(blst[i].byteinfo); blst[i].byteinfo = NULL; } } Xfree(codeset->byteM); codeset->byteM = NULL; } static void freeConversion( CodeSet codeset) { Conversion mbconv,ctconv; if (codeset->mbconv) { mbconv = codeset->mbconv; /* ... */ if (mbconv->convlist) { Xfree(mbconv->convlist); mbconv->convlist = NULL; } Xfree(mbconv); codeset->mbconv = NULL; } if (codeset->ctconv) { ctconv = codeset->ctconv; /* ... */ if (ctconv->convlist) { Xfree(ctconv->convlist); ctconv->convlist = NULL; } Xfree(ctconv); codeset->ctconv = NULL; } } static void freeExtdSegment( CodeSet codeset) { ExtdSegment ctextseg; if (codeset->ctextseg == NULL) { return; } ctextseg = codeset->ctextseg; if (ctextseg->name) { Xfree(ctextseg->name); ctextseg->name = NULL; } if (ctextseg->area) { Xfree(ctextseg->area); ctextseg->area = NULL; } Xfree(codeset->ctextseg); codeset->ctextseg = NULL; } static void freeParseInfo( CodeSet codeset) { ParseInfo parse_info; if (codeset->parse_info == NULL) { return; } parse_info = codeset->parse_info; if (parse_info->encoding) { Xfree(parse_info->encoding); parse_info->encoding = NULL; } Xfree(codeset->parse_info); codeset->parse_info = NULL; } static void destroy_CodeSetList( XLCdGenericPart *gen) { CodeSet *codeset = gen->codeset_list; int i; if (gen->codeset_num == 0) { return; } for (i=0;icodeset_num;i++) { freeByteM(codeset[i]); freeConversion(codeset[i]); freeExtdSegment(codeset[i]); freeParseInfo(codeset[i]); if (codeset[i]->charset_list) { Xfree(codeset[i]->charset_list); codeset[i]->charset_list = NULL; } Xfree(codeset[i]); codeset[i]=NULL; } Xfree(codeset); gen->codeset_list = NULL; } static void destroy_SegConv( XLCdGenericPart *gen) { SegConv seg = gen->segment_conv; int i; if (gen->segment_conv_num == 0) { return; } for (i=0;isegment_conv_num;i++) { if (seg[i].source_encoding) { Xfree(seg[i].source_encoding); seg[i].source_encoding = NULL; } if (seg[i].destination_encoding) { Xfree(seg[i].destination_encoding); seg[i].destination_encoding = NULL; } if (seg[i].conv) { Xfree(seg[i].conv); seg[i].conv = NULL; } } Xfree(seg); gen->segment_conv = NULL; } static void destroy_gen( XLCd lcd) { XLCdGenericPart *gen = XLC_GENERIC_PART(lcd); destroy_SegConv(gen); destroy_CodeSetList(gen); if (gen->mb_parse_table) { Xfree(gen->mb_parse_table); gen->mb_parse_table = NULL; } if (gen->mb_parse_list) { Xfree(gen->mb_parse_list); gen->mb_parse_list = NULL; } } /* VW/UDC end 95.01.08 */ static void destroy( XLCd lcd) { XLCdPublicMethods superclass = XLC_PUBLIC_METHODS(lcd)->superclass; destroy_gen(lcd); /* ADD 1996.01.08 */ if (superclass && superclass->pub.destroy) (*superclass->pub.destroy)(lcd); } (codeset = add_codeset(gen))libX11-1.6.3/src/xlibi18n/XlcDL.c000064401431060000012000000364051247741723500164250ustar00alancstaff00002660200006/* Copyright 1985, 1986, 1987, 1991, 1998 The Open Group 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: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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 EVEN IF ADVISED IN ADVANCE OF THE POSSIBILITY OF SUCH DAMAGES. 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 The Open Group. X Window System is a trademark of The Open Group OSF/1, OSF/Motif and Motif are registered trademarks, and OSF, the OSF logo, LBX, X Window System, and Xinerama are trademarks of the Open Group. All other trademarks and registered trademarks mentioned herein are the property of their respective owners. No right, title or interest in or to any trademark, service mark, logo or trade name of Sun Microsystems, Inc. or its licensors is granted. */ /* * Copyright 2000 Oracle and/or its affiliates. All rights reserved. * * 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: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. */ #ifdef HAVE_CONFIG_H # include #else # if defined(hpux) # define HAVE_DL_H # else # define HAVE_DLFCN_H # endif #endif #include #ifdef HAVE_DL_H #include #endif #ifdef HAVE_DLFCN_H #include #endif #include #include "Xlibint.h" #include "XlcPublic.h" #include "XlcPubI.h" #define XI18N_DLREL 2 #define iscomment(ch) ((ch) == '\0' || (ch) == '#') typedef enum { XLC_OBJECT, XIM_OBJECT, XOM_OBJECT } XI18NDLType; typedef struct { XI18NDLType type; int locale_name_len; char *locale_name; char *dl_name; char *open; char *im_register; char *im_unregister; int dl_release; unsigned int refcount; #if defined(hpux) shl_t dl_module; #else void *dl_module; #endif } XI18NObjectsListRec, *XI18NObjectsList; #define OBJECT_INIT_LEN 8 #define OBJECT_INC_LEN 4 static int lc_len = 0; static XI18NObjectsListRec *xi18n_objects_list = NULL; static int lc_count = 0; static int parse_line(char *line, char **argv, int argsize) { int argc = 0; char *p = line; while (argc < argsize) { while (isspace(*p)) { ++p; } if (iscomment(*p)){ break; } argv[argc++] = p; while (!isspace(*p)) { ++p; } if (iscomment(*p)) { break; } *p++ = '\0'; } return argc; } static char * strdup_with_underscore(const char *symbol) { char *result; if ((result = malloc(strlen(symbol) + 2)) == NULL) return NULL; result[0] = '_'; strcpy(result + 1, symbol); return result; } #ifndef hpux static void * try_both_dlsym (void *handle, char *name) { void *ret; ret = dlsym (handle, name); if (!ret) { name = strdup_with_underscore (name); if (name) { ret = dlsym (handle, name); free (name); } } return ret; } #endif static void resolve_object(char *path, const char *lc_name) { char filename[BUFSIZ]; FILE *fp; char buf[BUFSIZ]; if (lc_len == 0) { /* True only for the 1st time */ lc_len = OBJECT_INIT_LEN; xi18n_objects_list = Xmalloc(sizeof(XI18NObjectsListRec) * lc_len); if (!xi18n_objects_list) return; } snprintf(filename, sizeof(filename), "%s/%s", path, "XI18N_OBJS"); fp = fopen(filename, "r"); if (fp == (FILE *)NULL){ return; } while (fgets(buf, BUFSIZ, fp) != NULL){ char *p = buf; int n; char *args[6]; while (isspace(*p)){ ++p; } if (iscomment(*p)){ continue; } if (lc_count == lc_len) { int new_len = lc_len + OBJECT_INC_LEN; XI18NObjectsListRec *tmp = Xrealloc(xi18n_objects_list, sizeof(XI18NObjectsListRec) * new_len); if (tmp == NULL) goto done; xi18n_objects_list = tmp; lc_len = new_len; } n = parse_line(p, args, 6); if (n == 3 || n == 5) { if (!strcmp(args[0], "XLC")){ xi18n_objects_list[lc_count].type = XLC_OBJECT; } else if (!strcmp(args[0], "XOM")){ xi18n_objects_list[lc_count].type = XOM_OBJECT; } else if (!strcmp(args[0], "XIM")){ xi18n_objects_list[lc_count].type = XIM_OBJECT; } xi18n_objects_list[lc_count].dl_name = strdup(args[1]); xi18n_objects_list[lc_count].open = strdup(args[2]); xi18n_objects_list[lc_count].dl_release = XI18N_DLREL; xi18n_objects_list[lc_count].locale_name = strdup(lc_name); xi18n_objects_list[lc_count].refcount = 0; xi18n_objects_list[lc_count].dl_module = (void*)NULL; if (n == 5) { xi18n_objects_list[lc_count].im_register = strdup(args[3]); xi18n_objects_list[lc_count].im_unregister = strdup(args[4]); } else { xi18n_objects_list[lc_count].im_register = NULL; xi18n_objects_list[lc_count].im_unregister = NULL; } lc_count++; } } done: fclose(fp); } static char* __lc_path(const char *dl_name, const char *lc_dir) { char *path; size_t len; /* * reject this for possible security issue */ if (strstr (dl_name, "../")) return NULL; len = (lc_dir ? strlen(lc_dir) : 0 ) + (dl_name ? strlen(dl_name) : 0) + 10; #if defined POSTLOCALELIBDIR len += (strlen(POSTLOCALELIBDIR) + 1); #endif path = Xmalloc(len + 1); if (strchr(dl_name, '/') != NULL) { char *slash_p; slash_p = strrchr(lc_dir, '/'); *slash_p = '\0'; strcpy(path, lc_dir); strcat(path, "/"); #if defined POSTLOCALELIBDIR strcat(path, POSTLOCALELIBDIR); strcat(path, "/"); #endif strcat(path, dl_name); strcat(path, ".so.2"); *slash_p = '/'; } else { strcpy(path, lc_dir); strcat(path, "/"); #if defined POSTLOCALELIBDIR strcat(path, POSTLOCALELIBDIR); strcat(path, "/"); #endif strcat(path, dl_name); strcat(path, ".so.2"); } return path; } /* We reference count dlopen() and dlclose() of modules; unfortunately, * since XCloseIM, XCloseOM, XlcClose aren't wrapped, but directly * call the close method of the object, we leak a reference count every * time we open then close a module. Fixing this would require * either creating proxy objects or hooks for close_im/close_om * in XLCd */ static Bool open_object( XI18NObjectsList object, char *lc_dir) { char *path; if (object->refcount == 0) { path = __lc_path(object->dl_name, lc_dir); if (!path) return False; #if defined(hpux) object->dl_module = shl_load(path, BIND_DEFERRED, 0L); #else object->dl_module = dlopen(path, RTLD_LAZY); #endif Xfree(path); if (!object->dl_module) return False; } object->refcount++; return True; } static void * fetch_symbol( XI18NObjectsList object, char *symbol) { void *result = NULL; #if defined(hpux) int getsyms_cnt, i; struct shl_symbol *symbols; #endif if (symbol == NULL) return NULL; #if defined(hpux) getsyms_cnt = shl_getsymbols(object->dl_module, TYPE_PROCEDURE, EXPORT_SYMBOLS, malloc, &symbols); for(i=0; i 0) { free(symbols); } #else result = try_both_dlsym(object->dl_module, symbol); #endif return result; } static void close_object(XI18NObjectsList object) { object->refcount--; if (object->refcount == 0) { #if defined(hpux) shl_unload(object->dl_module); #else dlclose(object->dl_module); #endif object->dl_module = NULL; } } typedef XLCd (*dynamicLoadProc)(const char *); XLCd _XlcDynamicLoad(const char *lc_name) { XLCd lcd = (XLCd)NULL; dynamicLoadProc lc_loader = (dynamicLoadProc)NULL; int count; XI18NObjectsList objects_list; char lc_dir[BUFSIZE], lc_lib_dir[BUFSIZE]; if (lc_name == NULL) return (XLCd)NULL; if (_XlcLocaleDirName(lc_dir, BUFSIZE, lc_name) == NULL) return (XLCd)NULL; if (_XlcLocaleLibDirName(lc_lib_dir, BUFSIZE, lc_name) == NULL) return (XLCd)NULL; resolve_object(lc_dir, lc_name); resolve_object(lc_lib_dir, lc_name); objects_list = xi18n_objects_list; count = lc_count; for (; count-- > 0; objects_list++) { if (objects_list->type != XLC_OBJECT || strcmp(objects_list->locale_name, lc_name)) continue; if (!open_object (objects_list, lc_dir) && \ !open_object (objects_list, lc_lib_dir)) continue; lc_loader = (dynamicLoadProc)fetch_symbol (objects_list, objects_list->open); if (!lc_loader) continue; lcd = (*lc_loader)(lc_name); if (lcd != (XLCd)NULL) { break; } close_object (objects_list); } return (XLCd)lcd; } typedef XIM (*dynamicOpenProcp)(XLCd, Display *, XrmDatabase, char *, char *); static XIM _XDynamicOpenIM(XLCd lcd, Display *display, XrmDatabase rdb, char *res_name, char *res_class) { XIM im = (XIM)NULL; char lc_dir[BUFSIZE]; char *lc_name; dynamicOpenProcp im_openIM = (dynamicOpenProcp)NULL; int count; XI18NObjectsList objects_list = xi18n_objects_list; lc_name = lcd->core->name; if (_XlcLocaleLibDirName(lc_dir, BUFSIZE, lc_name) == NULL) return (XIM)0; count = lc_count; for (; count-- > 0; objects_list++) { if (objects_list->type != XIM_OBJECT || strcmp(objects_list->locale_name, lc_name)) continue; if (!open_object (objects_list, lc_dir)) continue; im_openIM = (dynamicOpenProcp)fetch_symbol(objects_list, objects_list->open); if (!im_openIM) continue; im = (*im_openIM)(lcd, display, rdb, res_name, res_class); if (im != (XIM)NULL) { break; } close_object (objects_list); } return (XIM)im; } typedef Bool (*dynamicRegisterCBProcp)( XLCd, Display *, XrmDatabase, char *, char *, XIDProc, XPointer); static Bool _XDynamicRegisterIMInstantiateCallback( XLCd lcd, Display *display, XrmDatabase rdb, char *res_name, char *res_class, XIDProc callback, XPointer client_data) { char lc_dir[BUFSIZE]; char *lc_name; dynamicRegisterCBProcp im_registerIM = (dynamicRegisterCBProcp)NULL; Bool ret_flag = False; int count; XI18NObjectsList objects_list = xi18n_objects_list; #if defined(hpux) int getsyms_cnt, i; struct shl_symbol *symbols; #endif lc_name = lcd->core->name; if (_XlcLocaleLibDirName(lc_dir, BUFSIZE, lc_name) == NULL) return False; count = lc_count; for (; count-- > 0; objects_list++) { if (objects_list->type != XIM_OBJECT || strcmp(objects_list->locale_name, lc_name)) continue; if (!open_object (objects_list, lc_dir)) continue; im_registerIM = (dynamicRegisterCBProcp)fetch_symbol(objects_list, objects_list->im_register); if (!im_registerIM) continue; ret_flag = (*im_registerIM)(lcd, display, rdb, res_name, res_class, callback, client_data); if (ret_flag) break; close_object (objects_list); } return (Bool)ret_flag; } typedef Bool (*dynamicUnregisterProcp)( XLCd, Display *, XrmDatabase, char *, char *, XIDProc, XPointer); static Bool _XDynamicUnRegisterIMInstantiateCallback( XLCd lcd, Display *display, XrmDatabase rdb, char *res_name, char *res_class, XIDProc callback, XPointer client_data) { char lc_dir[BUFSIZE]; const char *lc_name; dynamicUnregisterProcp im_unregisterIM = (dynamicUnregisterProcp)NULL; Bool ret_flag = False; int count; XI18NObjectsList objects_list = xi18n_objects_list; #if defined(hpux) int getsyms_cnt, i; struct shl_symbol *symbols; #endif lc_name = lcd->core->name; if (_XlcLocaleDirName(lc_dir, BUFSIZE, lc_name) == NULL) return False; count = lc_count; for (; count-- > 0; objects_list++) { if (objects_list->type != XIM_OBJECT || strcmp(objects_list->locale_name, lc_name)) continue; if (!objects_list->refcount) /* Must already be opened */ continue; im_unregisterIM = (dynamicUnregisterProcp)fetch_symbol(objects_list, objects_list->im_unregister); if (!im_unregisterIM) continue; ret_flag = (*im_unregisterIM)(lcd, display, rdb, res_name, res_class, callback, client_data); if (ret_flag) { close_object (objects_list); /* opened in RegisterIMInstantiateCallback */ break; } } return (Bool)ret_flag; } Bool _XInitDynamicIM(XLCd lcd) { if(lcd == (XLCd)NULL) return False; lcd->methods->open_im = _XDynamicOpenIM; lcd->methods->register_callback = _XDynamicRegisterIMInstantiateCallback; lcd->methods->unregister_callback = _XDynamicUnRegisterIMInstantiateCallback; return True; } typedef XOM (*dynamicIOpenProcp)( XLCd, Display *, XrmDatabase, _Xconst char *, _Xconst char *); static XOM _XDynamicOpenOM(XLCd lcd, Display *display, XrmDatabase rdb, _Xconst char *res_name, _Xconst char *res_class) { XOM om = (XOM)NULL; int count; char lc_dir[BUFSIZE]; char *lc_name; dynamicIOpenProcp om_openOM = (dynamicIOpenProcp)NULL; XI18NObjectsList objects_list = xi18n_objects_list; #if defined(hpux) int getsyms_cnt, i; struct shl_symbol *symbols; #endif lc_name = lcd->core->name; if (_XlcLocaleLibDirName(lc_dir, BUFSIZE, lc_name) == NULL) return (XOM)0; count = lc_count; for (; count-- > 0; objects_list++) { if (objects_list->type != XOM_OBJECT || strcmp(objects_list->locale_name, lc_name)) continue; if (!open_object (objects_list, lc_dir)) continue; om_openOM = (dynamicIOpenProcp)fetch_symbol(objects_list, objects_list->open); if (!om_openOM) continue; om = (*om_openOM)(lcd, display, rdb, res_name, res_class); if (om != (XOM)NULL) { break; } close_object(objects_list); } return (XOM)om; } Bool _XInitDynamicOM(XLCd lcd) { if(lcd == (XLCd)NULL) return False; lcd->methods->open_om = _XDynamicOpenOM; return True; } libX11-1.6.3/src/xlibi18n/lcConv.c000064401431060000012000000173611247741723500167030ustar00alancstaff00002660200006/* * Copyright 1992, 1993 by TOSHIBA Corp. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of TOSHIBA not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. TOSHIBA make no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * * Author: Katsuhisa Yano TOSHIBA Corp. * mopi@osa.ilab.toshiba.co.jp */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "XlcPubI.h" #include typedef struct _XlcConverterListRec { XLCd from_lcd; const char *from; XrmQuark from_type; XLCd to_lcd; const char *to; XrmQuark to_type; XlcOpenConverterProc converter; struct _XlcConverterListRec *next; } XlcConverterListRec, *XlcConverterList; static XlcConverterList conv_list = NULL; static void close_converter( XlcConv conv) { (*conv->methods->close)(conv); } static XlcConv get_converter( XLCd from_lcd, XrmQuark from_type, XLCd to_lcd, XrmQuark to_type) { XlcConverterList list, prev = NULL; for (list = conv_list; list; list = list->next) { if (list->from_lcd == from_lcd && list->to_lcd == to_lcd && list->from_type == from_type && list->to_type == to_type) { if (prev && prev != conv_list) { /* XXX */ prev->next = list->next; list->next = conv_list; conv_list = list; } return (*list->converter)(from_lcd, list->from, to_lcd, list->to); } prev = list; } return (XlcConv) NULL; } Bool _XlcSetConverter( XLCd from_lcd, const char *from, XLCd to_lcd, const char *to, XlcOpenConverterProc converter) { XlcConverterList list; XrmQuark from_type, to_type; from_type = XrmStringToQuark(from); to_type = XrmStringToQuark(to); for (list = conv_list; list; list = list->next) { if (list->from_lcd == from_lcd && list->to_lcd == to_lcd && list->from_type == from_type && list->to_type == to_type) { list->converter = converter; return True; } } list = Xmalloc(sizeof(XlcConverterListRec)); if (list == NULL) return False; list->from_lcd = from_lcd; list->from = from; list->from_type = from_type; list->to_lcd = to_lcd; list->to = to; list->to_type = to_type; list->converter = converter; list->next = conv_list; conv_list = list; return True; } typedef struct _ConvRec { XlcConv from_conv; XlcConv to_conv; } ConvRec, *Conv; static int indirect_convert( XlcConv lc_conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { Conv conv = (Conv) lc_conv->state; XlcConv from_conv = conv->from_conv; XlcConv to_conv = conv->to_conv; XlcCharSet charset; char buf[BUFSIZ], *cs; XPointer tmp_args[1]; int cs_left, ret, length, unconv_num = 0; if (from == NULL || *from == NULL) { if (from_conv->methods->reset) (*from_conv->methods->reset)(from_conv); if (to_conv->methods->reset) (*to_conv->methods->reset)(to_conv); return 0; } while (*from_left > 0) { cs = buf; cs_left = BUFSIZ; tmp_args[0] = (XPointer) &charset; ret = (*from_conv->methods->convert)(from_conv, from, from_left, &cs, &cs_left, tmp_args, 1); if (ret < 0) break; unconv_num += ret; length = cs - buf; if (length > 0) { cs_left = length; cs = buf; tmp_args[0] = (XPointer) charset; ret = (*to_conv->methods->convert)(to_conv, &cs, &cs_left, to, to_left, tmp_args, 1); if (ret < 0) { unconv_num += length / (charset->char_size > 0 ? charset->char_size : 1); continue; } unconv_num += ret; if (*to_left < 1) break; } } return unconv_num; } static void close_indirect_converter( XlcConv lc_conv) { Conv conv = (Conv) lc_conv->state; if (conv) { if (conv->from_conv) close_converter(conv->from_conv); if (conv->to_conv) close_converter(conv->to_conv); Xfree(conv); } Xfree(lc_conv); } static void reset_indirect_converter( XlcConv lc_conv) { Conv conv = (Conv) lc_conv->state; if (conv) { if (conv->from_conv && conv->from_conv->methods->reset) (*conv->from_conv->methods->reset)(conv->from_conv); if (conv->to_conv && conv->to_conv->methods->reset) (*conv->to_conv->methods->reset)(conv->to_conv); } } static XlcConvMethodsRec conv_methods = { close_indirect_converter, indirect_convert, reset_indirect_converter } ; static XlcConv open_indirect_converter( XLCd from_lcd, const char *from, XLCd to_lcd, const char *to) { XlcConv lc_conv, from_conv, to_conv; Conv conv; XrmQuark from_type, to_type; static XrmQuark QChar, QCharSet, QCTCharSet = (XrmQuark) 0; if (QCTCharSet == (XrmQuark) 0) { QCTCharSet = XrmStringToQuark(XlcNCTCharSet); QCharSet = XrmStringToQuark(XlcNCharSet); QChar = XrmStringToQuark(XlcNChar); } from_type = XrmStringToQuark(from); to_type = XrmStringToQuark(to); if (from_type == QCharSet || from_type == QChar || to_type == QCharSet || to_type == QChar) return (XlcConv) NULL; lc_conv = Xmalloc(sizeof(XlcConvRec)); if (lc_conv == NULL) return (XlcConv) NULL; lc_conv->methods = &conv_methods; lc_conv->state = Xcalloc(1, sizeof(ConvRec)); if (lc_conv->state == NULL) goto err; conv = (Conv) lc_conv->state; from_conv = get_converter(from_lcd, from_type, from_lcd, QCTCharSet); if (from_conv == NULL) from_conv = get_converter(from_lcd, from_type, from_lcd, QCharSet); if (from_conv == NULL) from_conv = get_converter((XLCd)NULL, from_type, (XLCd)NULL, QCharSet); if (from_conv == NULL) from_conv = get_converter(from_lcd, from_type, from_lcd, QChar); if (from_conv == NULL) goto err; conv->from_conv = from_conv; to_conv = get_converter(to_lcd, QCTCharSet, to_lcd, to_type); if (to_conv == NULL) to_conv = get_converter(to_lcd, QCharSet, to_lcd, to_type); if (to_conv == NULL) to_conv = get_converter((XLCd) NULL, QCharSet, (XLCd) NULL, to_type); if (to_conv == NULL) goto err; conv->to_conv = to_conv; return lc_conv; err: close_indirect_converter(lc_conv); return (XlcConv) NULL; } XlcConv _XlcOpenConverter( XLCd from_lcd, const char *from, XLCd to_lcd, const char *to) { XlcConv conv; XrmQuark from_type, to_type; from_type = XrmStringToQuark(from); to_type = XrmStringToQuark(to); if ((conv = get_converter(from_lcd, from_type, to_lcd, to_type))) return conv; return open_indirect_converter(from_lcd, from, to_lcd, to); } void _XlcCloseConverter( XlcConv conv) { close_converter(conv); } int _XlcConvert( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { return (*conv->methods->convert)(conv, from, from_left, to, to_left, args, num_args); } void _XlcResetConverter( XlcConv conv) { if (conv->methods->reset) (*conv->methods->reset)(conv); } libX11-1.6.3/src/xlibi18n/lcWrap.c000064401431060000012000000322641247741723500167060ustar00alancstaff00002660200006/* Copyright 1991, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ /* * Copyright 1991 by the Open Software Foundation * Copyright 1993 by the TOSHIBA Corp. * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the names of Open Software Foundation and TOSHIBA * not be used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. Open Software * Foundation and TOSHIBA make no representations about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. * * OPEN SOFTWARE FOUNDATION AND TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS, IN NO EVENT SHALL OPEN SOFTWARE FOUNDATIONN OR TOSHIBA BE * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * M. Collins OSF * * Katsuhisa Yano TOSHIBA Corp. */ #ifdef HAVE_CONFIG_H #include #endif #include #include "Xlibint.h" #include "Xlcint.h" #include #include #ifdef WIN32 #undef close #endif #include #include "XlcPubI.h" #ifdef XTHREADS LockInfoPtr _Xi18n_lock; #endif char * XSetLocaleModifiers( const char *modifiers) { XLCd lcd = _XlcCurrentLC(); char *user_mods; char *mapped_mods; if (!lcd) return (char *) NULL; if (!modifiers) return lcd->core->modifiers; user_mods = getenv("XMODIFIERS"); mapped_mods = (*lcd->methods->map_modifiers) (lcd, user_mods, modifiers); if (mapped_mods) { Xfree(lcd->core->modifiers); lcd->core->modifiers = mapped_mods; } return mapped_mods; } Bool XSupportsLocale(void) { return _XlcCurrentLC() != (XLCd)NULL; } Bool _XlcValidModSyntax( const char * mods, const char * const *valid_mods) { int i; const char * const *ptr; while (mods && (*mods == '@')) { mods++; if (*mods == '@') break; for (ptr = valid_mods; *ptr; ptr++) { i = strlen(*ptr); if (strncmp(mods, *ptr, i) || ((mods[i] != '=') #ifdef WIN32 && (mods[i] != '#') #endif )) continue; mods = strchr(mods+i+1, '@'); break; } } return !mods || !*mods; } static const char *im_valid[] = {"im", (const char *)NULL}; /*ARGSUSED*/ char * _XlcDefaultMapModifiers( XLCd lcd, const char *user_mods, const char *prog_mods) { int i; char *mods; if (!_XlcValidModSyntax(prog_mods, im_valid)) return (char *)NULL; if (!_XlcValidModSyntax(user_mods, im_valid)) return (char *)NULL; i = strlen(prog_mods) + 1; if (user_mods) i += strlen(user_mods); mods = Xmalloc(i); if (mods) { strcpy(mods, prog_mods); if (user_mods) strcat(mods, user_mods); #ifdef WIN32 { char *s; for (s = mods; (s = strchr(s, '@')); s++) { for (s++; *s && *s != '='; s++) { if (*s == '#') { *s = '='; break; } } } } #endif } return mods; } typedef struct _XLCdListRec { struct _XLCdListRec *next; XLCd lcd; int ref_count; } XLCdListRec, *XLCdList; static XLCdList lcd_list = NULL; typedef struct _XlcLoaderListRec { struct _XlcLoaderListRec *next; XLCdLoadProc proc; } XlcLoaderListRec, *XlcLoaderList; static XlcLoaderList loader_list = NULL; void _XlcRemoveLoader( XLCdLoadProc proc) { XlcLoaderList loader, prev; if (loader_list == NULL) return; prev = loader = loader_list; if (loader->proc == proc) { loader_list = loader->next; Xfree(loader); return; } while ((loader = loader->next)) { if (loader->proc == proc) { prev->next = loader->next; Xfree(loader); return; } prev = loader; } return; } Bool _XlcAddLoader( XLCdLoadProc proc, XlcPosition position) { XlcLoaderList loader, last; _XlcRemoveLoader(proc); /* remove old loader, if exist */ loader = Xmalloc(sizeof(XlcLoaderListRec)); if (loader == NULL) return False; loader->proc = proc; if (loader_list == NULL) position = XlcHead; if (position == XlcHead) { loader->next = loader_list; loader_list = loader; } else { last = loader_list; while (last->next) last = last->next; loader->next = NULL; last->next = loader; } return True; } XLCd _XOpenLC( char *name) { XLCd lcd; XlcLoaderList loader; XLCdList cur; #if !defined(X_LOCALE) int len; char sinamebuf[256]; char* siname = sinamebuf; #endif if (name == NULL) { name = setlocale (LC_CTYPE, (char *)NULL); #if !defined(X_LOCALE) /* * _XlMapOSLocaleName will return the same string or a substring * of name, so strlen(name) is okay */ if ((len = strlen(name)) >= sizeof sinamebuf) { siname = Xmalloc (len + 1); if (siname == NULL) return NULL; } name = _XlcMapOSLocaleName(name, siname); #endif } _XLockMutex(_Xi18n_lock); /* * search for needed lcd, if found return it */ for (cur = lcd_list; cur; cur = cur->next) { if (!strcmp (cur->lcd->core->name, name)) { lcd = cur->lcd; cur->ref_count++; goto found; } } if (!loader_list) _XlcInitLoader(); /* * not there, so try to get and add to list */ for (loader = loader_list; loader; loader = loader->next) { lcd = (*loader->proc)(name); if (lcd) { cur = Xmalloc (sizeof(XLCdListRec)); if (cur) { cur->lcd = lcd; cur->ref_count = 1; cur->next = lcd_list; lcd_list = cur; } else { (*lcd->methods->close)(lcd); lcd = (XLCd) NULL; } goto found; } } lcd = NULL; found: _XUnlockMutex(_Xi18n_lock); #if !defined(X_LOCALE) if (siname != sinamebuf) Xfree(siname); #endif return lcd; } void _XCloseLC( XLCd lcd) { XLCdList cur, *prev; for (prev = &lcd_list; (cur = *prev); prev = &cur->next) { if (cur->lcd == lcd) { if (--cur->ref_count < 1) { (*lcd->methods->close)(lcd); *prev = cur->next; Xfree(cur); } break; } } if(loader_list) { _XlcDeInitLoader(); loader_list = NULL; } } /* * Get the XLCd for the current locale */ XLCd _XlcCurrentLC(void) { XLCd lcd; static XLCd last_lcd = NULL; lcd = _XOpenLC((char *) NULL); if (last_lcd) _XCloseLC(last_lcd); last_lcd = lcd; return lcd; } XrmMethods _XrmInitParseInfo( XPointer *state) { XLCd lcd = _XOpenLC((char *) NULL); if (lcd == (XLCd) NULL) return (XrmMethods) NULL; return (*lcd->methods->init_parse_info)(lcd, state); } int XmbTextPropertyToTextList( Display *dpy, const XTextProperty *text_prop, char ***list_ret, int *count_ret) { XLCd lcd = _XlcCurrentLC(); if (lcd == NULL) return XLocaleNotSupported; return (*lcd->methods->mb_text_prop_to_list)(lcd, dpy, text_prop, list_ret, count_ret); } int XwcTextPropertyToTextList( Display *dpy, const XTextProperty *text_prop, wchar_t ***list_ret, int *count_ret) { XLCd lcd = _XlcCurrentLC(); if (lcd == NULL) return XLocaleNotSupported; return (*lcd->methods->wc_text_prop_to_list)(lcd, dpy, text_prop, list_ret, count_ret); } int Xutf8TextPropertyToTextList( Display *dpy, const XTextProperty *text_prop, char ***list_ret, int *count_ret) { XLCd lcd = _XlcCurrentLC(); if (lcd == NULL) return XLocaleNotSupported; return (*lcd->methods->utf8_text_prop_to_list)(lcd, dpy, text_prop, list_ret, count_ret); } int XmbTextListToTextProperty( Display *dpy, char **list, int count, XICCEncodingStyle style, XTextProperty *text_prop) { XLCd lcd = _XlcCurrentLC(); if (lcd == NULL) return XLocaleNotSupported; return (*lcd->methods->mb_text_list_to_prop)(lcd, dpy, list, count, style, text_prop); } int XwcTextListToTextProperty( Display *dpy, wchar_t **list, int count, XICCEncodingStyle style, XTextProperty *text_prop) { XLCd lcd = _XlcCurrentLC(); if (lcd == NULL) return XLocaleNotSupported; return (*lcd->methods->wc_text_list_to_prop)(lcd, dpy, list, count, style, text_prop); } int Xutf8TextListToTextProperty( Display *dpy, char **list, int count, XICCEncodingStyle style, XTextProperty *text_prop) { XLCd lcd = _XlcCurrentLC(); if (lcd == NULL) return XLocaleNotSupported; return (*lcd->methods->utf8_text_list_to_prop)(lcd, dpy, list, count, style, text_prop); } void XwcFreeStringList( wchar_t **list) { XLCd lcd = _XlcCurrentLC(); if (lcd == NULL) return; (*lcd->methods->wc_free_string_list)(lcd, list); } const char * XDefaultString(void) { XLCd lcd = _XlcCurrentLC(); if (lcd == NULL) return (char *) NULL; return (*lcd->methods->default_string)(lcd); } void _XlcCopyFromArg( char *src, char *dst, int size) { if (size == sizeof(long)) *((long *) dst) = (long) src; #ifdef LONG64 else if (size == sizeof(int)) *((int *) dst) = (int)(long) src; #endif else if (size == sizeof(short)) *((short *) dst) = (short)(long) src; else if (size == sizeof(char)) *((char *) dst) = (char)(long) src; else if (size == sizeof(XPointer)) *((XPointer *) dst) = (XPointer) src; else if (size > sizeof(XPointer)) memcpy(dst, (char *) src, size); else memcpy(dst, (char *) &src, size); } void _XlcCopyToArg( char *src, char **dst, int size) { /* FIXME: On Big Endian machines, this behaves differently than _XCopyToArg. */ if (size == sizeof(long)) *((long *) *dst) = *((long *) src); #ifdef LONG64 else if (size == sizeof(int)) *((int *) *dst) = *((int *) src); #endif else if (size == sizeof(short)) *((short *) *dst) = *((short *) src); else if (size == sizeof(char)) *((char *) *dst) = *((char *) src); else if (size == sizeof(XPointer)) *((XPointer *) *dst) = *((XPointer *) src); else memcpy(*dst, src, size); } void _XlcCountVaList( va_list var, int *count_ret) { int count; for (count = 0; va_arg(var, char *); count++) (void)va_arg(var, XPointer); *count_ret = count; } void _XlcVaToArgList( va_list var, int count, XlcArgList *args_ret) { XlcArgList args; *args_ret = args = Xmalloc(sizeof(XlcArg) * count); if (args == (XlcArgList) NULL) return; for ( ; count-- > 0; args++) { args->name = va_arg(var, char *); args->value = va_arg(var, XPointer); } } void _XlcCompileResourceList( XlcResourceList resources, int num_resources) { for ( ; num_resources-- > 0; resources++) resources->xrm_name = XrmPermStringToQuark(resources->name); } char * _XlcGetValues( XPointer base, XlcResourceList resources, int num_resources, XlcArgList args, int num_args, unsigned long mask) { XlcResourceList res; XrmQuark xrm_name; int count; for ( ; num_args-- > 0; args++) { res = resources; count = num_resources; xrm_name = XrmPermStringToQuark(args->name); for ( ; count-- > 0; res++) { if (xrm_name == res->xrm_name && (mask & res->mask)) { _XlcCopyToArg(base + res->offset, &args->value, res->size); break; } } if (count < 0) return args->name; } return NULL; } char * _XlcSetValues( XPointer base, XlcResourceList resources, int num_resources, XlcArgList args, int num_args, unsigned long mask) { XlcResourceList res; XrmQuark xrm_name; int count; for ( ; num_args-- > 0; args++) { res = resources; count = num_resources; xrm_name = XrmPermStringToQuark(args->name); for ( ; count-- > 0; res++) { if (xrm_name == res->xrm_name && (mask & res->mask)) { _XlcCopyFromArg(args->value, base + res->offset, res->size); break; } } if (count < 0) return args->name; } return NULL; } } Bool XSupportsLocale(void) { return _XlcCurrentLC() != (XLCd)NULL; } Bool _XlcValidModSyntax( const char * mods, const char * const *valid_mods) { int i; const char * const *ptr; while (mods && (*mods == '@')) { mods++; if (*mods == '@') break; for (ptr = valid_mods; *ptr; ptr++) { i = stlibX11-1.6.3/src/xlibi18n/lcDynamic.c000064401431060000012000000044151247741723500173560ustar00alancstaff00002660200006/* Copyright 1996, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ /* * Copyright 1995 by FUJITSU LIMITED * This is source code modified by FUJITSU LIMITED under the Joint * Development Agreement for the CDE/Motif PST. * * Modifier: Takanori Tateno FUJITSU LIMITED * */ /* * A dynamically loaded locale. * Supports: All locale names. * How: Loads $(XLOCALEDIR)/xi18n.so and forwards the request to that library. * Platforms: Only those defining USE_DYNAMIC_LOADER (none known). */ #ifdef USE_DYNAMIC_LOADER #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include "Xlibint.h" #include "Xlcint.h" #ifndef XLOCALEDIR #define XLOCALEDIR "/usr/lib/X11/locale" #endif #define LCLIBNAME "xi18n.so" XLCd _XlcDynamicLoader( const char *name) { char libpath[1024]; XLCdMethods _XlcGenericMethods; XLCd lcd; void *nlshandler; snprintf(libpath, sizeof(libpath), "%s/%s/%s", XLOCALEDIR, name, LCLIBNAME); nlshandler = dlopen(libpath,LAZY); _XlcGenericMethods = (XLCdMethods)dlsym(nlshandler,"genericMethods"); lcd = _XlcCreateLC(name,_XlcGenericMethods); return lcd; } #else typedef int dummy; #endif /* USE_DYNAMIC_LOADER */ libX11-1.6.3/src/xlibi18n/XDefaultIMIF.c000064401431060000012000000272541247741723500176420ustar00alancstaff00002660200006/* Copyright 1985, 1986, 1987, 1991, 1998 The Open Group 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: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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 EVEN IF ADVISED IN ADVANCE OF THE POSSIBILITY OF SUCH DAMAGES. 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 The Open Group. X Window System is a trademark of The Open Group OSF/1, OSF/Motif and Motif are registered trademarks, and OSF, the OSF logo, LBX, X Window System, and Xinerama are trademarks of the Open Group. All other trademarks and registered trademarks mentioned herein are the property of their respective owners. No right, title or interest in or to any trademark, service mark, logo or trade name of Sun Microsystems, Inc. or its licensors is granted. */ /* * Copyright 2000 Oracle and/or its affiliates. All rights reserved. * * 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: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. */ #ifdef HAVE_CONFIG_H #include #endif #include #include "Xlibint.h" #include "Xlcint.h" #include "XlcGeneric.h" #ifndef MAXINT #define MAXINT (~((unsigned int)1 << (8 * sizeof(int)) - 1)) #endif /* !MAXINT */ typedef struct _StaticXIM *StaticXIM; typedef struct _XIMStaticXIMRec { /* for CT => MB,WC converter */ XlcConv ctom_conv; XlcConv ctow_conv; } XIMStaticXIMRec; typedef enum { CREATE_IC = 1, SET_ICVAL = 2, GET_ICVAL = 3 } XICOp_t; typedef struct _StaticXIM { XIMMethods methods; XIMCoreRec core; XIMStaticXIMRec *private; } StaticXIMRec; static Status _CloseIM( XIM ); static char *_SetIMValues( XIM, XIMArg * ); static char *_GetIMValues( XIM, XIMArg* ); static XIC _CreateIC( XIM, XIMArg* ); static _Xconst XIMMethodsRec local_im_methods = { _CloseIM, /* close */ _SetIMValues, /* set_values */ _GetIMValues, /* get_values */ _CreateIC, /* create_ic */ NULL, /* ctstombs */ NULL /* ctstowcs */ }; static void _DestroyIC( XIC ); static void _SetFocus( XIC ); static void _UnsetFocus( XIC ); static char* _SetICValues( XIC, XIMArg * ); static char* _GetICValues( XIC, XIMArg * ); static char *_MbReset( XIC ); static wchar_t *_WcReset( XIC ); static int _MbLookupString( XIC, XKeyEvent *, char *, int, KeySym *, Status * ); static int _WcLookupString( XIC, XKeyEvent *, wchar_t *, int, KeySym *, Status * ); static _Xconst XICMethodsRec local_ic_methods = { _DestroyIC, /* destroy */ _SetFocus, /* set_focus */ _UnsetFocus, /* unset_focus */ _SetICValues, /* set_values */ _GetICValues, /* get_values */ _MbReset, /* mb_reset */ _WcReset, /* wc_reset */ NULL, /* utf8_reset */ /* ??? */ _MbLookupString, /* mb_lookup_string */ _WcLookupString, /* wc_lookup_string */ NULL /* utf8_lookup_string */ /* ??? */ }; XIM _XDefaultOpenIM( XLCd lcd, Display *dpy, XrmDatabase rdb, char *res_name, char *res_class) { StaticXIM im; XIMStaticXIMRec *local_impart; XlcConv ctom_conv, ctow_conv; int i; char *mod; char buf[BUFSIZ]; if (!(ctom_conv = _XlcOpenConverter(lcd, XlcNCompoundText, lcd, XlcNMultiByte))) { return((XIM)NULL); } if (!(ctow_conv = _XlcOpenConverter(lcd, XlcNCompoundText, lcd, XlcNWideChar))) { return((XIM)NULL); } if ((im = Xmalloc(sizeof(StaticXIMRec))) == (StaticXIM)NULL) { return((XIM)NULL); } if ((local_impart = Xmalloc(sizeof(XIMStaticXIMRec))) == (XIMStaticXIMRec *)NULL) { Xfree(im); return((XIM)NULL); } memset(im, 0, sizeof(StaticXIMRec)); memset(local_impart, 0, sizeof(XIMStaticXIMRec)); buf[0] = '\0'; i = 0; if ((lcd->core->modifiers) && (*lcd->core->modifiers)) { #define MODIFIER "@im=" mod = strstr(lcd->core->modifiers, MODIFIER); if (mod) { mod += strlen(MODIFIER); while (*mod && *mod != '@' && i < BUFSIZ - 1) { buf[i++] = *mod++; } buf[i] = '\0'; } } #undef MODIFIER if ((im->core.im_name = Xmalloc(i+1)) == NULL) goto Error2; strcpy(im->core.im_name, buf); im->private = local_impart; im->methods = (XIMMethods)&local_im_methods; im->core.lcd = lcd; im->core.ic_chain = (XIC)NULL; im->core.display = dpy; im->core.rdb = rdb; im->core.res_name = NULL; im->core.res_class = NULL; local_impart->ctom_conv = ctom_conv; local_impart->ctow_conv = ctow_conv; if ((res_name != NULL) && (*res_name != '\0')){ im->core.res_name = strdup(res_name); } if ((res_class != NULL) && (*res_class != '\0')){ im->core.res_class = strdup(res_class); } return (XIM)im; Error2 : Xfree(im->private); Xfree(im->core.im_name); Xfree(im); _XlcCloseConverter(ctom_conv); _XlcCloseConverter(ctow_conv); return(NULL); } static Status _CloseIM(XIM xim) { StaticXIM im = (StaticXIM)xim; _XlcCloseConverter(im->private->ctom_conv); _XlcCloseConverter(im->private->ctow_conv); XFree(im->private); XFree(im->core.im_name); if (im->core.res_name) XFree(im->core.res_name); if (im->core.res_class) XFree(im->core.res_class); return 1; /*bugID 4163122*/ } static char * _SetIMValues( XIM xim, XIMArg *arg) { return(arg->name); /* evil */ } static char * _GetIMValues( XIM xim, XIMArg *values) { XIMArg *p; XIMStyles *styles; for (p = values; p->name != NULL; p++) { if (strcmp(p->name, XNQueryInputStyle) == 0) { styles = Xmalloc(sizeof(XIMStyles)); *(XIMStyles **)p->value = styles; styles->count_styles = 1; styles->supported_styles = Xmalloc(styles->count_styles * sizeof(XIMStyle)); styles->supported_styles[0] = (XIMPreeditNone | XIMStatusNone); } else { break; } } return (p->name); } static char* _SetICValueData(XIC ic, XIMArg *values, XICOp_t mode) { XIMArg *p; char *return_name = NULL; for (p = values; p != NULL && p->name != NULL; p++) { if(strcmp(p->name, XNInputStyle) == 0) { if (mode == CREATE_IC) ic->core.input_style = (XIMStyle)p->value; } else if (strcmp(p->name, XNClientWindow) == 0) { ic->core.client_window = (Window)p->value ; } else if (strcmp(p->name, XNFocusWindow) == 0) { ic->core.focus_window = (Window)p->value ; } else if (strcmp(p->name, XNPreeditAttributes) == 0 || strcmp(p->name, XNStatusAttributes) == 0) { return_name = _SetICValueData(ic, (XIMArg*)p->value, mode); if (return_name) break; } else { return_name = p->name; break; } } return(return_name); } static char* _GetICValueData(XIC ic, XIMArg *values, XICOp_t mode) { XIMArg *p; char *return_name = NULL; for (p = values; p->name != NULL; p++) { if(strcmp(p->name, XNInputStyle) == 0) { *((XIMStyle *)(p->value)) = ic->core.input_style; } else if (strcmp(p->name, XNClientWindow) == 0) { *((Window *)(p->value)) = ic->core.client_window; } else if (strcmp(p->name, XNFocusWindow) == 0) { *((Window *)(p->value)) = ic->core.focus_window; } else if (strcmp(p->name, XNFilterEvents) == 0) { *((unsigned long *)(p->value))= ic->core.filter_events; } else if (strcmp(p->name, XNPreeditAttributes) == 0 || strcmp(p->name, XNStatusAttributes) == 0) { return_name = _GetICValueData(ic, (XIMArg*)p->value, mode); if (return_name) break; } else { return_name = p->name; break; } } return(return_name); } static XIC _CreateIC(XIM im, XIMArg *arg) { XIC ic; if ((ic = Xmalloc(sizeof(XICRec))) == (XIC)NULL) { return ((XIC)NULL); } memset(ic, 0, sizeof(XICRec)); ic->methods = (XICMethods)&local_ic_methods; ic->core.im = im; ic->core.filter_events = KeyPressMask; if (_SetICValueData(ic, arg, CREATE_IC) != NULL) goto err_return; if (!(ic->core.input_style)) goto err_return; return (XIC)ic; err_return: XFree(ic); return ((XIC)NULL); } static void _DestroyIC(XIC ic) { /*BugId4255571. This Xfree() should be removed because XDestroyIC() still need ic after invoking _DestroyIC() and there is a XFree(ic) at the end of XDestroyIC() already. if(ic) XFree(ic); */ } static void _SetFocus(XIC ic) { } static void _UnsetFocus(XIC ic) { } static char* _SetICValues(XIC ic, XIMArg *args) { char *ret = NULL; if (!ic) { return (args->name); } ret = _SetICValueData(ic, args, SET_ICVAL); return(ret); } static char* _GetICValues(XIC ic, XIMArg *args) { char *ret = NULL; if (!ic) { return (args->name); } ret = _GetICValueData(ic, args, GET_ICVAL); return(ret); } static char * _MbReset(XIC xic) { return(NULL); } static wchar_t * _WcReset(XIC xic) { return(NULL); } static int _MbLookupString( XIC xic, XKeyEvent *ev, char * buffer, int bytes, KeySym *keysym, Status *status) { XComposeStatus NotSupportedYet ; int length; length = XLookupString(ev, buffer, bytes, keysym, &NotSupportedYet); if (keysym && *keysym == NoSymbol){ *status = XLookupNone; } else if (length > 0) { *status = XLookupBoth; } else { *status = XLookupKeySym; } return(length); } static int _WcLookupString( XIC xic, XKeyEvent *ev, wchar_t * buffer, int wlen, KeySym *keysym, Status *status) { XComposeStatus NotSupportedYet ; int length; /* In single-byte, mb_len = wc_len */ char *mb_buf = Xmalloc(wlen); length = XLookupString(ev, mb_buf, wlen, keysym, &NotSupportedYet); if (keysym && *keysym == NoSymbol){ *status = XLookupNone; } else if (length > 0) { *status = XLookupBoth; } else { *status = XLookupKeySym; } mbstowcs(buffer, mb_buf, length); XFree(mb_buf); return(length); } libX11-1.6.3/src/xlibi18n/XimTrans.h000064401431060000012000000077611247741723500172340ustar00alancstaff00002660200006/* * Copyright 1992 Oracle and/or its affiliates. All rights reserved. * * 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: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. */ /****************************************************************** Copyright 1992, 1993, 1994 by FUJITSU LIMITED Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of FUJITSU LIMITED not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Hideki Hiura (hhiura@Sun.COM) Sun Microsystems, Inc. Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ #ifndef _XIMTRANS_H #define _XIMTRANS_H typedef struct _TransIntrCallbackRec *TransIntrCallbackPtr; typedef struct _TransIntrCallbackRec { Bool (*func)( Xim, INT16, XPointer, XPointer ); XPointer call_data; TransIntrCallbackPtr next; } TransIntrCallbackRec ; typedef struct { TransIntrCallbackPtr intr_cb; struct _XtransConnInfo *trans_conn; /* transport connection object */ int fd; char *address; Window window; Bool is_putback; } TransSpecRec; /* * Prototypes */ extern Bool _XimTransRegisterDispatcher( Xim im, Bool (*callback)( Xim, INT16, XPointer, XPointer ), XPointer call_data ); extern Bool _XimTransIntrCallback( Xim im, Bool (*callback)( Xim, INT16, XPointer, XPointer ), XPointer call_data ); extern Bool _XimTransCallDispatcher( Xim im, INT16 len, XPointer data ); extern void _XimFreeTransIntrCallback( Xim im ); extern Bool _XimTransFilterWaitEvent( Display *d, Window w, XEvent *ev, XPointer arg ); extern void _XimTransInternalConnection( Display *d, int fd, XPointer arg ); extern Bool _XimTransWrite( Xim im, INT16 len, XPointer data ); extern Bool _XimTransRead( Xim im, XPointer recv_buf, int buf_len, int *ret_len ); extern void _XimTransFlush( Xim im ); #endif /* _XIMTRANS__H */ libX11-1.6.3/src/xlibi18n/XlcPublic.h000064401431060000012000000202431247741723500173420ustar00alancstaff00002660200006/* * Copyright 1992, 1993 by TOSHIBA Corp. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of TOSHIBA not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. TOSHIBA make no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * * Author: Katsuhisa Yano TOSHIBA Corp. * mopi@osa.ilab.toshiba.co.jp */ /* * Copyright 1995 by FUJITSU LIMITED * This is source code modified by FUJITSU LIMITED under the Joint * Development Agreement for the CDE/Motif PST. * * Modifier: Takanori Tateno FUJITSU LIMITED * */ /* * Most of this API is documented in i18n/Framework.PS */ #ifndef _XLCPUBLIC_H_ #define _XLCPUBLIC_H_ #include "Xlcint.h" /* * Character sets. */ /* Every character set has a "side". It denotes the range of byte values for which the character set is responsible. This means that the character set's encoded characters will only assumes bytes within the range, and that the character set can be used simultaneously with another character set responsible for a disjoint range. */ typedef enum { XlcUnknown, XlcC0, /* responsible for values 0x00..0x1F */ XlcGL, /* responsible for values 0x00..0x7F or 0x20..0x7F */ XlcC1, /* responsible for values 0x80..0x9F */ XlcGR, /* responsible for values 0x80..0xFF or 0xA0..0xFF */ XlcGLGR, /* responsible for values 0x00..0xFF */ XlcOther, /* unused */ XlcNONE } XlcSide; /* Data read from XLC_LOCALE files. XXX Apparently superseded by _XUDCGlyphRegion. */ typedef struct _UDCArea { unsigned long start; unsigned long end; } UDCAreaRec, *UDCArea; /* Where the character set comes from. */ typedef enum { CSsrcUndef, /* unused */ CSsrcStd, /* defined in libX11 */ CSsrcXLC /* defined in an XLC_LOCALE file */ } CSSrc; /* These are the supported properties of XlcCharSet. */ #define XlcNCharSize "charSize" #define XlcNControlSequence "controlSequence" #define XlcNEncodingName "encodingName" #define XlcNName "name" #define XlcNSetSize "setSize" #define XlcNSide "side" /* This is the structure of an XlcCharSet. Once allocated, they are never freed. */ typedef struct _XlcCharSetRec { /* Character set name, including side suffix */ const char *name; XrmQuark xrm_name; /* XLFD encoding name, no side suffix */ const char *encoding_name; XrmQuark xrm_encoding_name; /* Range for which the charset is responsible: XlcGL, XlcGR or XlcGLGR */ XlcSide side; /* Number of bytes per character. 0 means a varying number (e.g. UTF-8) */ int char_size; /* Classification of the character set according to ISO-2022 */ int set_size; /* e.g. 94 or 96 */ const char *ct_sequence; /* control sequence of CT */ /* (normally at most 4 bytes) */ /* for UDC */ Bool string_encoding; UDCArea udc_area; int udc_area_num; /* Description source */ CSSrc source; } XlcCharSetRec, *XlcCharSet; _XFUNCPROTOBEGIN /* Returns the charset with the given name (including side suffix). Returns NULL if not found. */ extern XlcCharSet _XlcGetCharSet( const char* name ); /* Returns the charset with the given encoding (no side suffix) and responsible for at least the given side (XlcGL or XlcGR). Returns NULL if not found. */ extern XlcCharSet _XlcGetCharSetWithSide( const char* encoding_name, XlcSide side ); /* Registers an XlcCharSet in the list of character sets. Returns True if successful. */ extern Bool _XlcAddCharSet( XlcCharSet charset ); /* Retrieves a number of attributes of an XlcCharSet. Return NULL if successful, otherwise the name of the first argument specifiying a nonexistent attribute. */ extern char *_XlcGetCSValues( XlcCharSet charset, ... ); _XFUNCPROTOEND #define XlcNCodeset "codeset" #define XlcNDefaultString "defaultString" #define XlcNLanguage "language" #define XlcNMbCurMax "mbCurMax" #define XlcNStateDependentEncoding "stateDependentEncoding" #define XlcNTerritory "territory" typedef struct _FontScope { unsigned long start; unsigned long end; unsigned long shift; unsigned long shift_direction; } FontScopeRec, *FontScope; /* * conversion methods */ typedef struct _XlcConvRec *XlcConv; typedef XlcConv (*XlcOpenConverterProc)( XLCd from_lcd, const char* from_type, XLCd to_lcd, const char* to_type ); typedef void (*XlcCloseConverterProc)( XlcConv /* conv */ ); typedef int (*XlcConvertProc)( XlcConv /* conv */, XPointer* /* from */, int* /* from_left */, XPointer* /* to */, int* /* to_left */, XPointer* /* args */, int /* num_args */ ); typedef void (*XlcResetConverterProc)( XlcConv /* conv */ ); typedef struct _XlcConvMethodsRec{ XlcCloseConverterProc close; XlcConvertProc convert; XlcResetConverterProc reset; } XlcConvMethodsRec, *XlcConvMethods; /* * conversion data */ #define XlcNMultiByte "multiByte" #define XlcNWideChar "wideChar" #define XlcNCompoundText "compoundText" #define XlcNString "string" #define XlcNUtf8String "utf8String" #define XlcNCharSet "charSet" #define XlcNCTCharSet "CTcharSet" #define XlcNFontCharSet "FontCharSet" #define XlcNChar "char" #define XlcNUcsChar "UCSchar" typedef struct _XlcConvRec { XlcConvMethods methods; XPointer state; } XlcConvRec; _XFUNCPROTOBEGIN extern Bool _XInitOM( XLCd /* lcd */ ); extern Bool _XInitIM( XLCd /* lcd */ ); extern XIM _XimOpenIM( XLCd /* lcd */, Display * /* dpy */, XrmDatabase /* rdb */, char * /* res_name */, char * /* res_class */ ); extern char *_XGetLCValues( XLCd /* lcd */, ... ); extern XlcConv _XlcOpenConverter( XLCd from_lcd, const char* from_type, XLCd to_lcd, const char* to_type ); extern void _XlcCloseConverter( XlcConv conv ); extern int _XlcConvert( XlcConv conv, XPointer* from, int* from_left, XPointer* to, int* to_left, XPointer* args, int num_args ); extern void _XlcResetConverter( XlcConv conv ); extern Bool _XlcSetConverter( XLCd from_lcd, const char* from_type, XLCd to_lcd, const char* to_type, XlcOpenConverterProc open_converter ); extern void _XlcGetResource( XLCd lcd, const char* category, const char* _class, char*** value, int* count ); extern char *_XlcFileName( XLCd lcd, const char* category ); extern int _Xwcslen( wchar_t* /* wstr */ ); extern wchar_t *_Xwcscpy( wchar_t* /* wstr1 */, wchar_t* /* wstr2 */ ); extern wchar_t *_Xwcsncpy(wchar_t *wstr1, wchar_t *wstr2, int len); extern int _Xwcscmp(wchar_t *wstr1, wchar_t *wstr2); extern int _Xwcsncmp(wchar_t *wstr1, wchar_t *wstr2, int len); /* Compares two ISO 8859-1 strings, ignoring case of ASCII letters. Like strcasecmp in an ASCII locale. */ extern int _XlcCompareISOLatin1( const char* str1, const char* str2 ); /* Compares two ISO 8859-1 strings, at most len bytes of each, ignoring case of ASCII letters. Like strncasecmp in an ASCII locale. */ extern int _XlcNCompareISOLatin1( const char* str1, const char* str2, int len ); extern XOM _XDefaultOpenOM( XLCd lcd, Display *dpy, XrmDatabase rdb, _Xconst char *res_name, _Xconst char *res_class); _XFUNCPROTOEND #endif /* _XLCPUBLIC_H_ */ pi@osa.ilab.toshiba.co.jp */ /* * Copyright 1995 by FUJITSU LIMITED * This is source code modified by FUJITSU LIMITED under the Joint * Development Agreement for the CDE/Motif PST. * * Modifier: Takanori Tateno FUJITSU LIMITED * */ /* * Most of this API is documented in i18n/Framework.PS */ #ifndef _XLCPUBLIC_H_ #define _XLCPUBLIC_H_ libX11-1.6.3/src/xlibi18n/lcUniConv/iso8859_8.h000064401431060000012000000057121247741723500207400ustar00alancstaff00002660200006 /* * ISO-8859-8 */ static const unsigned short iso8859_8_2uni[96] = { /* 0xa0 */ 0x00a0, 0xfffd, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, 0x00d7, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, /* 0xb0 */ 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, 0x00b8, 0x00b9, 0x00f7, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0xfffd, /* 0xc0 */ 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0xd0 */ 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x2017, /* 0xe0 */ 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7, 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df, /* 0xf0 */ 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7, 0x05e8, 0x05e9, 0x05ea, 0xfffd, 0xfffd, 0x200e, 0x200f, 0xfffd, }; static int iso8859_8_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c = *s; if (c >= 0xa0) { unsigned short wc = iso8859_8_2uni[c-0xa0]; if (wc != 0xfffd) { *pwc = (ucs4_t) wc; return 1; } } else { *pwc = (ucs4_t) c; return 1; } return RET_ILSEQ; } static const unsigned char iso8859_8_page00[88] = { 0xa0, 0x00, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ 0xa8, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ 0xb8, 0xb9, 0x00, 0xbb, 0xbc, 0xbd, 0xbe, 0x00, /* 0xb8-0xbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, /* 0xd0-0xd7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, /* 0xf0-0xf7 */ }; static const unsigned char iso8859_8_page05[32] = { 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xd0-0xd7 */ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xd8-0xdf */ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xe0-0xe7 */ 0xf8, 0xf9, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ }; static const unsigned char iso8859_8_page20[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0xfe, /* 0x08-0x0f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdf, /* 0x10-0x17 */ }; static int iso8859_8_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { unsigned char c = 0; if (wc < 0x00a0) { *r = wc; return 1; } else if (wc >= 0x00a0 && wc < 0x00f8) c = iso8859_8_page00[wc-0x00a0]; else if (wc >= 0x05d0 && wc < 0x05f0) c = iso8859_8_page05[wc-0x05d0]; else if (wc >= 0x2008 && wc < 0x2018) c = iso8859_8_page20[wc-0x2008]; if (c != 0) { *r = c; return 1; } return RET_ILSEQ; } libX11-1.6.3/src/xlibi18n/lcUniConv/tis620.h000064401431060000012000000045761247741723500204170ustar00alancstaff00002660200006 /* * TIS620-0 */ static const unsigned short tis620_2uni[96] = { /* 0xa0 */ 0xfffd, 0x0e01, 0x0e02, 0x0e03, 0x0e04, 0x0e05, 0x0e06, 0x0e07, 0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f, /* 0xb0 */ 0x0e10, 0x0e11, 0x0e12, 0x0e13, 0x0e14, 0x0e15, 0x0e16, 0x0e17, 0x0e18, 0x0e19, 0x0e1a, 0x0e1b, 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f, /* 0xc0 */ 0x0e20, 0x0e21, 0x0e22, 0x0e23, 0x0e24, 0x0e25, 0x0e26, 0x0e27, 0x0e28, 0x0e29, 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f, /* 0xd0 */ 0x0e30, 0x0e31, 0x0e32, 0x0e33, 0x0e34, 0x0e35, 0x0e36, 0x0e37, 0x0e38, 0x0e39, 0x0e3a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x0e3f, /* 0xe0 */ 0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47, 0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d, 0x0e4e, 0x0e4f, /* 0xf0 */ 0x0e50, 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57, 0x0e58, 0x0e59, 0x0e5a, 0x0e5b, 0xfffd, 0xfffd, 0xfffd, 0xfffd, }; static int tis620_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c = *s; if (c < 0x80) { *pwc = (ucs4_t) c; return 1; } else if (c < 0xa0) { } else { unsigned short wc = tis620_2uni[c-0xa0]; if (wc != 0xfffd) { *pwc = (ucs4_t) wc; return 1; } } return RET_ILSEQ; } static const unsigned char tis620_page0e[96] = { 0x00, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0x00-0x07 */ 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0x08-0x0f */ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0x10-0x17 */ 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0x18-0x1f */ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x20-0x27 */ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x28-0x2f */ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x30-0x37 */ 0xd8, 0xd9, 0xda, 0x00, 0x00, 0x00, 0x00, 0xdf, /* 0x38-0x3f */ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x40-0x47 */ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x48-0x4f */ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x50-0x57 */ 0xf8, 0xf9, 0xfa, 0xfb, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ }; static int tis620_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { unsigned char c = 0; if (wc < 0x0080) { *r = wc; return 1; } else if (wc >= 0x0e00 && wc < 0x0e60) c = tis620_page0e[wc-0x0e00]; if (c != 0) { *r = c; return 1; } return RET_ILSEQ; } libX11-1.6.3/src/xlibi18n/lcUniConv/cp1256.h000064401431060000012000000133321247741723500202760ustar00alancstaff00002660200006 /* * CP1256 */ static const unsigned short cp1256_2uni[128] = { /* 0x80 */ 0x20ac, 0x067e, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, 0x02c6, 0x2030, 0x0679, 0x2039, 0x0152, 0x0686, 0x0698, 0x0688, /* 0x90 */ 0x06af, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, 0x06a9, 0x2122, 0x0691, 0x203a, 0x0153, 0x200c, 0x200d, 0x06ba, /* 0xa0 */ 0x00a0, 0x060c, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, 0x06be, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, /* 0xb0 */ 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, 0x00b8, 0x00b9, 0x061b, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x061f, /* 0xc0 */ 0x06c1, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, 0x0628, 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f, /* 0xd0 */ 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x00d7, 0x0637, 0x0638, 0x0639, 0x063a, 0x0640, 0x0641, 0x0642, 0x0643, /* 0xe0 */ 0x00e0, 0x0644, 0x00e2, 0x0645, 0x0646, 0x0647, 0x0648, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x0649, 0x064a, 0x00ee, 0x00ef, /* 0xf0 */ 0x064b, 0x064c, 0x064d, 0x064e, 0x00f4, 0x064f, 0x0650, 0x00f7, 0x0651, 0x00f9, 0x0652, 0x00fb, 0x00fc, 0x200e, 0x200f, 0x06d2, }; static int cp1256_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c = *s; if (c < 0x80) *pwc = (ucs4_t) c; else *pwc = (ucs4_t) cp1256_2uni[c-0x80]; return 1; } static const unsigned char cp1256_page00[96] = { 0xa0, 0x00, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ 0xa8, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ 0xb8, 0xb9, 0x00, 0xbb, 0xbc, 0xbd, 0xbe, 0x00, /* 0xb8-0xbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd7, /* 0xd0-0xd7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ 0xe0, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, 0xe7, /* 0xe0-0xe7 */ 0xe8, 0xe9, 0xea, 0xeb, 0x00, 0x00, 0xee, 0xef, /* 0xe8-0xef */ 0x00, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0xf7, /* 0xf0-0xf7 */ 0x00, 0xf9, 0x00, 0xfb, 0xfc, 0x00, 0x00, 0x00, /* 0xf8-0xff */ }; static const unsigned char cp1256_page01[72] = { 0x00, 0x00, 0x8c, 0x9c, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ }; static const unsigned char cp1256_page06[208] = { 0x00, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, /* 0x08-0x0f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ 0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00, 0xbf, /* 0x18-0x1f */ 0x00, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x20-0x27 */ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x28-0x2f */ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd8, /* 0x30-0x37 */ 0xd9, 0xda, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ 0xdc, 0xdd, 0xde, 0xdf, 0xe1, 0xe3, 0xe4, 0xe5, /* 0x40-0x47 */ 0xe6, 0xec, 0xed, 0xf0, 0xf1, 0xf2, 0xf3, 0xf5, /* 0x48-0x4f */ 0xf6, 0xf8, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ 0x00, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, /* 0x78-0x7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8d, 0x00, /* 0x80-0x87 */ 0x8f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ 0x00, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ 0x8e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ 0x00, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, /* 0xa8-0xaf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0xaa, 0x00, /* 0xb8-0xbf */ 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ }; static const unsigned char cp1256_page20[56] = { 0x00, 0x00, 0x00, 0x00, 0x9d, 0x9e, 0xfd, 0xfe, /* 0x08-0x0f */ 0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */ 0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x18-0x1f */ 0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ 0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ }; static int cp1256_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { unsigned char c = 0; if (wc < 0x0080) { *r = wc; return 1; } else if (wc >= 0x00a0 && wc < 0x0100) c = cp1256_page00[wc-0x00a0]; else if (wc >= 0x0150 && wc < 0x0198) c = cp1256_page01[wc-0x0150]; else if (wc == 0x02c6) c = 0x88; else if (wc >= 0x0608 && wc < 0x06d8) c = cp1256_page06[wc-0x0608]; else if (wc >= 0x2008 && wc < 0x2040) c = cp1256_page20[wc-0x2008]; else if (wc == 0x20ac) c = 0x80; else if (wc == 0x2122) c = 0x99; if (c != 0) { *r = c; return 1; } return RET_ILSEQ; } libX11-1.6.3/src/xlibi18n/lcUniConv/armscii_8.h000064401431060000012000000065111247741723500212350ustar00alancstaff00002660200006 /* * ARMSCII-8 */ static const unsigned short armscii_8_2uni[96] = { /* 0xa0 */ 0x00a0, 0xfffd, 0x0587, 0x0589, 0x0029, 0x0028, 0x00bb, 0x00ab, 0x2014, 0x002e, 0x055d, 0x002c, 0x002d, 0x058a, 0x2026, 0x055c, /* 0xb0 */ 0x055b, 0x055e, 0x0531, 0x0561, 0x0532, 0x0562, 0x0533, 0x0563, 0x0534, 0x0564, 0x0535, 0x0565, 0x0536, 0x0566, 0x0537, 0x0567, /* 0xc0 */ 0x0538, 0x0568, 0x0539, 0x0569, 0x053a, 0x056a, 0x053b, 0x056b, 0x053c, 0x056c, 0x053d, 0x056d, 0x053e, 0x056e, 0x053f, 0x056f, /* 0xd0 */ 0x0540, 0x0570, 0x0541, 0x0571, 0x0542, 0x0572, 0x0543, 0x0573, 0x0544, 0x0574, 0x0545, 0x0575, 0x0546, 0x0576, 0x0547, 0x0577, /* 0xe0 */ 0x0548, 0x0578, 0x0549, 0x0579, 0x054a, 0x057a, 0x054b, 0x057b, 0x054c, 0x057c, 0x054d, 0x057d, 0x054e, 0x057e, 0x054f, 0x057f, /* 0xf0 */ 0x0550, 0x0580, 0x0551, 0x0581, 0x0552, 0x0582, 0x0553, 0x0583, 0x0554, 0x0584, 0x0555, 0x0585, 0x0556, 0x0586, 0x055a, 0xfffd, }; static int armscii_8_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c = *s; if (c < 0xa0) { *pwc = (ucs4_t) c; return 1; } else { unsigned short wc = armscii_8_2uni[c-0xa0]; if (wc != 0xfffd) { *pwc = (ucs4_t) wc; return 1; } } return RET_ILSEQ; } static const unsigned char armscii_8_page00[8] = { 0xa5, 0xa4, 0x2a, 0x2b, 0xab, 0xac, 0xa9, 0x2f, /* 0x28-0x2f */ }; static const unsigned char armscii_8_page00_1[32] = { 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ 0x00, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ }; static const unsigned char armscii_8_page05[96] = { 0x00, 0xb2, 0xb4, 0xb6, 0xb8, 0xba, 0xbc, 0xbe, /* 0x30-0x37 */ 0xc0, 0xc2, 0xc4, 0xc6, 0xc8, 0xca, 0xcc, 0xce, /* 0x38-0x3f */ 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, /* 0x40-0x47 */ 0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xee, /* 0x48-0x4f */ 0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfc, 0x00, /* 0x50-0x57 */ 0x00, 0x00, 0xfe, 0xb0, 0xaf, 0xaa, 0xb1, 0x00, /* 0x58-0x5f */ 0x00, 0xb3, 0xb5, 0xb7, 0xb9, 0xbb, 0xbd, 0xbf, /* 0x60-0x67 */ 0xc1, 0xc3, 0xc5, 0xc7, 0xc9, 0xcb, 0xcd, 0xcf, /* 0x68-0x6f */ 0xd1, 0xd3, 0xd5, 0xd7, 0xd9, 0xdb, 0xdd, 0xdf, /* 0x70-0x77 */ 0xe1, 0xe3, 0xe5, 0xe7, 0xe9, 0xeb, 0xed, 0xef, /* 0x78-0x7f */ 0xf1, 0xf3, 0xf5, 0xf7, 0xf9, 0xfb, 0xfd, 0xa2, /* 0x80-0x87 */ 0x00, 0xa3, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ }; static const unsigned char armscii_8_page20[24] = { 0x00, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00, /* 0x10-0x17 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0x00, /* 0x20-0x27 */ }; static int armscii_8_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { unsigned char c = 0; if (wc < 0x0028) { *r = wc; return 1; } else if (wc >= 0x0028 && wc < 0x0030) c = armscii_8_page00[wc-0x0028]; else if (wc >= 0x0030 && wc < 0x00a0) c = wc; else if (wc >= 0x00a0 && wc < 0x00c0) c = armscii_8_page00_1[wc-0x00a0]; else if (wc >= 0x0530 && wc < 0x0590) c = armscii_8_page05[wc-0x0530]; else if (wc >= 0x2010 && wc < 0x2028) c = armscii_8_page20[wc-0x2010]; if (c != 0) { *r = c; return 1; } return RET_ILSEQ; } libX11-1.6.3/src/xlibi18n/lcUniConv/ksc5601.h000064401431060000012000005522451247741723500204650ustar00alancstaff00002660200006 /* * KSC5601.1987-0 */ static const unsigned short ksc5601_2uni_page21[1115] = { /* 0x21 */ 0x3000, 0x3001, 0x3002, 0x00b7, 0x2025, 0x2026, 0x00a8, 0x3003, 0x00ad, 0x2015, 0x2225, 0xff3c, 0x223c, 0x2018, 0x2019, 0x201c, 0x201d, 0x3014, 0x3015, 0x3008, 0x3009, 0x300a, 0x300b, 0x300c, 0x300d, 0x300e, 0x300f, 0x3010, 0x3011, 0x00b1, 0x00d7, 0x00f7, 0x2260, 0x2264, 0x2265, 0x221e, 0x2234, 0x00b0, 0x2032, 0x2033, 0x2103, 0x212b, 0xffe0, 0xffe1, 0xffe5, 0x2642, 0x2640, 0x2220, 0x22a5, 0x2312, 0x2202, 0x2207, 0x2261, 0x2252, 0x00a7, 0x203b, 0x2606, 0x2605, 0x25cb, 0x25cf, 0x25ce, 0x25c7, 0x25c6, 0x25a1, 0x25a0, 0x25b3, 0x25b2, 0x25bd, 0x25bc, 0x2192, 0x2190, 0x2191, 0x2193, 0x2194, 0x3013, 0x226a, 0x226b, 0x221a, 0x223d, 0x221d, 0x2235, 0x222b, 0x222c, 0x2208, 0x220b, 0x2286, 0x2287, 0x2282, 0x2283, 0x222a, 0x2229, 0x2227, 0x2228, 0xffe2, /* 0x22 */ 0x21d2, 0x21d4, 0x2200, 0x2203, 0x00b4, 0xff5e, 0x02c7, 0x02d8, 0x02dd, 0x02da, 0x02d9, 0x00b8, 0x02db, 0x00a1, 0x00bf, 0x02d0, 0x222e, 0x2211, 0x220f, 0x00a4, 0x2109, 0x2030, 0x25c1, 0x25c0, 0x25b7, 0x25b6, 0x2664, 0x2660, 0x2661, 0x2665, 0x2667, 0x2663, 0x2299, 0x25c8, 0x25a3, 0x25d0, 0x25d1, 0x2592, 0x25a4, 0x25a5, 0x25a8, 0x25a7, 0x25a6, 0x25a9, 0x2668, 0x260f, 0x260e, 0x261c, 0x261e, 0x00b6, 0x2020, 0x2021, 0x2195, 0x2197, 0x2199, 0x2196, 0x2198, 0x266d, 0x2669, 0x266a, 0x266c, 0x327f, 0x321c, 0x2116, 0x33c7, 0x2122, 0x33c2, 0x33d8, 0x2121, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0x23 */ 0xff01, 0xff02, 0xff03, 0xff04, 0xff05, 0xff06, 0xff07, 0xff08, 0xff09, 0xff0a, 0xff0b, 0xff0c, 0xff0d, 0xff0e, 0xff0f, 0xff10, 0xff11, 0xff12, 0xff13, 0xff14, 0xff15, 0xff16, 0xff17, 0xff18, 0xff19, 0xff1a, 0xff1b, 0xff1c, 0xff1d, 0xff1e, 0xff1f, 0xff20, 0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, 0xff28, 0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30, 0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38, 0xff39, 0xff3a, 0xff3b, 0xffe6, 0xff3d, 0xff3e, 0xff3f, 0xff40, 0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 0xff57, 0xff58, 0xff59, 0xff5a, 0xff5b, 0xff5c, 0xff5d, 0xffe3, /* 0x24 */ 0x3131, 0x3132, 0x3133, 0x3134, 0x3135, 0x3136, 0x3137, 0x3138, 0x3139, 0x313a, 0x313b, 0x313c, 0x313d, 0x313e, 0x313f, 0x3140, 0x3141, 0x3142, 0x3143, 0x3144, 0x3145, 0x3146, 0x3147, 0x3148, 0x3149, 0x314a, 0x314b, 0x314c, 0x314d, 0x314e, 0x314f, 0x3150, 0x3151, 0x3152, 0x3153, 0x3154, 0x3155, 0x3156, 0x3157, 0x3158, 0x3159, 0x315a, 0x315b, 0x315c, 0x315d, 0x315e, 0x315f, 0x3160, 0x3161, 0x3162, 0x3163, 0x3164, 0x3165, 0x3166, 0x3167, 0x3168, 0x3169, 0x316a, 0x316b, 0x316c, 0x316d, 0x316e, 0x316f, 0x3170, 0x3171, 0x3172, 0x3173, 0x3174, 0x3175, 0x3176, 0x3177, 0x3178, 0x3179, 0x317a, 0x317b, 0x317c, 0x317d, 0x317e, 0x317f, 0x3180, 0x3181, 0x3182, 0x3183, 0x3184, 0x3185, 0x3186, 0x3187, 0x3188, 0x3189, 0x318a, 0x318b, 0x318c, 0x318d, 0x318e, /* 0x25 */ 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, 0x2178, 0x2179, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, 0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0x26 */ 0x2500, 0x2502, 0x250c, 0x2510, 0x2518, 0x2514, 0x251c, 0x252c, 0x2524, 0x2534, 0x253c, 0x2501, 0x2503, 0x250f, 0x2513, 0x251b, 0x2517, 0x2523, 0x2533, 0x252b, 0x253b, 0x254b, 0x2520, 0x252f, 0x2528, 0x2537, 0x253f, 0x251d, 0x2530, 0x2525, 0x2538, 0x2542, 0x2512, 0x2511, 0x251a, 0x2519, 0x2516, 0x2515, 0x250e, 0x250d, 0x251e, 0x251f, 0x2521, 0x2522, 0x2526, 0x2527, 0x2529, 0x252a, 0x252d, 0x252e, 0x2531, 0x2532, 0x2535, 0x2536, 0x2539, 0x253a, 0x253d, 0x253e, 0x2540, 0x2541, 0x2543, 0x2544, 0x2545, 0x2546, 0x2547, 0x2548, 0x2549, 0x254a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0x27 */ 0x3395, 0x3396, 0x3397, 0x2113, 0x3398, 0x33c4, 0x33a3, 0x33a4, 0x33a5, 0x33a6, 0x3399, 0x339a, 0x339b, 0x339c, 0x339d, 0x339e, 0x339f, 0x33a0, 0x33a1, 0x33a2, 0x33ca, 0x338d, 0x338e, 0x338f, 0x33cf, 0x3388, 0x3389, 0x33c8, 0x33a7, 0x33a8, 0x33b0, 0x33b1, 0x33b2, 0x33b3, 0x33b4, 0x33b5, 0x33b6, 0x33b7, 0x33b8, 0x33b9, 0x3380, 0x3381, 0x3382, 0x3383, 0x3384, 0x33ba, 0x33bb, 0x33bc, 0x33bd, 0x33be, 0x33bf, 0x3390, 0x3391, 0x3392, 0x3393, 0x3394, 0x2126, 0x33c0, 0x33c1, 0x338a, 0x338b, 0x338c, 0x33d6, 0x33c5, 0x33ad, 0x33ae, 0x33af, 0x33db, 0x33a9, 0x33aa, 0x33ab, 0x33ac, 0x33dd, 0x33d0, 0x33d3, 0x33c3, 0x33c9, 0x33dc, 0x33c6, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0x28 */ 0x00c6, 0x00d0, 0x00aa, 0x0126, 0xfffd, 0x0132, 0xfffd, 0x013f, 0x0141, 0x00d8, 0x0152, 0x00ba, 0x00de, 0x0166, 0x014a, 0xfffd, 0x3260, 0x3261, 0x3262, 0x3263, 0x3264, 0x3265, 0x3266, 0x3267, 0x3268, 0x3269, 0x326a, 0x326b, 0x326c, 0x326d, 0x326e, 0x326f, 0x3270, 0x3271, 0x3272, 0x3273, 0x3274, 0x3275, 0x3276, 0x3277, 0x3278, 0x3279, 0x327a, 0x327b, 0x24d0, 0x24d1, 0x24d2, 0x24d3, 0x24d4, 0x24d5, 0x24d6, 0x24d7, 0x24d8, 0x24d9, 0x24da, 0x24db, 0x24dc, 0x24dd, 0x24de, 0x24df, 0x24e0, 0x24e1, 0x24e2, 0x24e3, 0x24e4, 0x24e5, 0x24e6, 0x24e7, 0x24e8, 0x24e9, 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469, 0x246a, 0x246b, 0x246c, 0x246d, 0x246e, 0x00bd, 0x2153, 0x2154, 0x00bc, 0x00be, 0x215b, 0x215c, 0x215d, 0x215e, /* 0x29 */ 0x00e6, 0x0111, 0x00f0, 0x0127, 0x0131, 0x0133, 0x0138, 0x0140, 0x0142, 0x00f8, 0x0153, 0x00df, 0x00fe, 0x0167, 0x014b, 0x0149, 0x3200, 0x3201, 0x3202, 0x3203, 0x3204, 0x3205, 0x3206, 0x3207, 0x3208, 0x3209, 0x320a, 0x320b, 0x320c, 0x320d, 0x320e, 0x320f, 0x3210, 0x3211, 0x3212, 0x3213, 0x3214, 0x3215, 0x3216, 0x3217, 0x3218, 0x3219, 0x321a, 0x321b, 0x249c, 0x249d, 0x249e, 0x249f, 0x24a0, 0x24a1, 0x24a2, 0x24a3, 0x24a4, 0x24a5, 0x24a6, 0x24a7, 0x24a8, 0x24a9, 0x24aa, 0x24ab, 0x24ac, 0x24ad, 0x24ae, 0x24af, 0x24b0, 0x24b1, 0x24b2, 0x24b3, 0x24b4, 0x24b5, 0x2474, 0x2475, 0x2476, 0x2477, 0x2478, 0x2479, 0x247a, 0x247b, 0x247c, 0x247d, 0x247e, 0x247f, 0x2480, 0x2481, 0x2482, 0x00b9, 0x00b2, 0x00b3, 0x2074, 0x207f, 0x2081, 0x2082, 0x2083, 0x2084, /* 0x2a */ 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048, 0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058, 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f, 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, 0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e, 0x306f, 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078, 0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e, 0x307f, 0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088, 0x3089, 0x308a, 0x308b, 0x308c, 0x308d, 0x308e, 0x308f, 0x3090, 0x3091, 0x3092, 0x3093, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0x2b */ 0x30a1, 0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7, 0x30a8, 0x30a9, 0x30aa, 0x30ab, 0x30ac, 0x30ad, 0x30ae, 0x30af, 0x30b0, 0x30b1, 0x30b2, 0x30b3, 0x30b4, 0x30b5, 0x30b6, 0x30b7, 0x30b8, 0x30b9, 0x30ba, 0x30bb, 0x30bc, 0x30bd, 0x30be, 0x30bf, 0x30c0, 0x30c1, 0x30c2, 0x30c3, 0x30c4, 0x30c5, 0x30c6, 0x30c7, 0x30c8, 0x30c9, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf, 0x30d0, 0x30d1, 0x30d2, 0x30d3, 0x30d4, 0x30d5, 0x30d6, 0x30d7, 0x30d8, 0x30d9, 0x30da, 0x30db, 0x30dc, 0x30dd, 0x30de, 0x30df, 0x30e0, 0x30e1, 0x30e2, 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7, 0x30e8, 0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ee, 0x30ef, 0x30f0, 0x30f1, 0x30f2, 0x30f3, 0x30f4, 0x30f5, 0x30f6, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0x2c */ 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, 0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0436, 0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, }; static const unsigned short ksc5601_2uni_page30[2350] = { /* 0x30 */ 0xac00, 0xac01, 0xac04, 0xac07, 0xac08, 0xac09, 0xac0a, 0xac10, 0xac11, 0xac12, 0xac13, 0xac14, 0xac15, 0xac16, 0xac17, 0xac19, 0xac1a, 0xac1b, 0xac1c, 0xac1d, 0xac20, 0xac24, 0xac2c, 0xac2d, 0xac2f, 0xac30, 0xac31, 0xac38, 0xac39, 0xac3c, 0xac40, 0xac4b, 0xac4d, 0xac54, 0xac58, 0xac5c, 0xac70, 0xac71, 0xac74, 0xac77, 0xac78, 0xac7a, 0xac80, 0xac81, 0xac83, 0xac84, 0xac85, 0xac86, 0xac89, 0xac8a, 0xac8b, 0xac8c, 0xac90, 0xac94, 0xac9c, 0xac9d, 0xac9f, 0xaca0, 0xaca1, 0xaca8, 0xaca9, 0xacaa, 0xacac, 0xacaf, 0xacb0, 0xacb8, 0xacb9, 0xacbb, 0xacbc, 0xacbd, 0xacc1, 0xacc4, 0xacc8, 0xaccc, 0xacd5, 0xacd7, 0xace0, 0xace1, 0xace4, 0xace7, 0xace8, 0xacea, 0xacec, 0xacef, 0xacf0, 0xacf1, 0xacf3, 0xacf5, 0xacf6, 0xacfc, 0xacfd, 0xad00, 0xad04, 0xad06, /* 0x31 */ 0xad0c, 0xad0d, 0xad0f, 0xad11, 0xad18, 0xad1c, 0xad20, 0xad29, 0xad2c, 0xad2d, 0xad34, 0xad35, 0xad38, 0xad3c, 0xad44, 0xad45, 0xad47, 0xad49, 0xad50, 0xad54, 0xad58, 0xad61, 0xad63, 0xad6c, 0xad6d, 0xad70, 0xad73, 0xad74, 0xad75, 0xad76, 0xad7b, 0xad7c, 0xad7d, 0xad7f, 0xad81, 0xad82, 0xad88, 0xad89, 0xad8c, 0xad90, 0xad9c, 0xad9d, 0xada4, 0xadb7, 0xadc0, 0xadc1, 0xadc4, 0xadc8, 0xadd0, 0xadd1, 0xadd3, 0xaddc, 0xade0, 0xade4, 0xadf8, 0xadf9, 0xadfc, 0xadff, 0xae00, 0xae01, 0xae08, 0xae09, 0xae0b, 0xae0d, 0xae14, 0xae30, 0xae31, 0xae34, 0xae37, 0xae38, 0xae3a, 0xae40, 0xae41, 0xae43, 0xae45, 0xae46, 0xae4a, 0xae4c, 0xae4d, 0xae4e, 0xae50, 0xae54, 0xae56, 0xae5c, 0xae5d, 0xae5f, 0xae60, 0xae61, 0xae65, 0xae68, 0xae69, 0xae6c, 0xae70, 0xae78, /* 0x32 */ 0xae79, 0xae7b, 0xae7c, 0xae7d, 0xae84, 0xae85, 0xae8c, 0xaebc, 0xaebd, 0xaebe, 0xaec0, 0xaec4, 0xaecc, 0xaecd, 0xaecf, 0xaed0, 0xaed1, 0xaed8, 0xaed9, 0xaedc, 0xaee8, 0xaeeb, 0xaeed, 0xaef4, 0xaef8, 0xaefc, 0xaf07, 0xaf08, 0xaf0d, 0xaf10, 0xaf2c, 0xaf2d, 0xaf30, 0xaf32, 0xaf34, 0xaf3c, 0xaf3d, 0xaf3f, 0xaf41, 0xaf42, 0xaf43, 0xaf48, 0xaf49, 0xaf50, 0xaf5c, 0xaf5d, 0xaf64, 0xaf65, 0xaf79, 0xaf80, 0xaf84, 0xaf88, 0xaf90, 0xaf91, 0xaf95, 0xaf9c, 0xafb8, 0xafb9, 0xafbc, 0xafc0, 0xafc7, 0xafc8, 0xafc9, 0xafcb, 0xafcd, 0xafce, 0xafd4, 0xafdc, 0xafe8, 0xafe9, 0xaff0, 0xaff1, 0xaff4, 0xaff8, 0xb000, 0xb001, 0xb004, 0xb00c, 0xb010, 0xb014, 0xb01c, 0xb01d, 0xb028, 0xb044, 0xb045, 0xb048, 0xb04a, 0xb04c, 0xb04e, 0xb053, 0xb054, 0xb055, 0xb057, 0xb059, /* 0x33 */ 0xb05d, 0xb07c, 0xb07d, 0xb080, 0xb084, 0xb08c, 0xb08d, 0xb08f, 0xb091, 0xb098, 0xb099, 0xb09a, 0xb09c, 0xb09f, 0xb0a0, 0xb0a1, 0xb0a2, 0xb0a8, 0xb0a9, 0xb0ab, 0xb0ac, 0xb0ad, 0xb0ae, 0xb0af, 0xb0b1, 0xb0b3, 0xb0b4, 0xb0b5, 0xb0b8, 0xb0bc, 0xb0c4, 0xb0c5, 0xb0c7, 0xb0c8, 0xb0c9, 0xb0d0, 0xb0d1, 0xb0d4, 0xb0d8, 0xb0e0, 0xb0e5, 0xb108, 0xb109, 0xb10b, 0xb10c, 0xb110, 0xb112, 0xb113, 0xb118, 0xb119, 0xb11b, 0xb11c, 0xb11d, 0xb123, 0xb124, 0xb125, 0xb128, 0xb12c, 0xb134, 0xb135, 0xb137, 0xb138, 0xb139, 0xb140, 0xb141, 0xb144, 0xb148, 0xb150, 0xb151, 0xb154, 0xb155, 0xb158, 0xb15c, 0xb160, 0xb178, 0xb179, 0xb17c, 0xb180, 0xb182, 0xb188, 0xb189, 0xb18b, 0xb18d, 0xb192, 0xb193, 0xb194, 0xb198, 0xb19c, 0xb1a8, 0xb1cc, 0xb1d0, 0xb1d4, 0xb1dc, 0xb1dd, /* 0x34 */ 0xb1df, 0xb1e8, 0xb1e9, 0xb1ec, 0xb1f0, 0xb1f9, 0xb1fb, 0xb1fd, 0xb204, 0xb205, 0xb208, 0xb20b, 0xb20c, 0xb214, 0xb215, 0xb217, 0xb219, 0xb220, 0xb234, 0xb23c, 0xb258, 0xb25c, 0xb260, 0xb268, 0xb269, 0xb274, 0xb275, 0xb27c, 0xb284, 0xb285, 0xb289, 0xb290, 0xb291, 0xb294, 0xb298, 0xb299, 0xb29a, 0xb2a0, 0xb2a1, 0xb2a3, 0xb2a5, 0xb2a6, 0xb2aa, 0xb2ac, 0xb2b0, 0xb2b4, 0xb2c8, 0xb2c9, 0xb2cc, 0xb2d0, 0xb2d2, 0xb2d8, 0xb2d9, 0xb2db, 0xb2dd, 0xb2e2, 0xb2e4, 0xb2e5, 0xb2e6, 0xb2e8, 0xb2eb, 0xb2ec, 0xb2ed, 0xb2ee, 0xb2ef, 0xb2f3, 0xb2f4, 0xb2f5, 0xb2f7, 0xb2f8, 0xb2f9, 0xb2fa, 0xb2fb, 0xb2ff, 0xb300, 0xb301, 0xb304, 0xb308, 0xb310, 0xb311, 0xb313, 0xb314, 0xb315, 0xb31c, 0xb354, 0xb355, 0xb356, 0xb358, 0xb35b, 0xb35c, 0xb35e, 0xb35f, 0xb364, 0xb365, /* 0x35 */ 0xb367, 0xb369, 0xb36b, 0xb36e, 0xb370, 0xb371, 0xb374, 0xb378, 0xb380, 0xb381, 0xb383, 0xb384, 0xb385, 0xb38c, 0xb390, 0xb394, 0xb3a0, 0xb3a1, 0xb3a8, 0xb3ac, 0xb3c4, 0xb3c5, 0xb3c8, 0xb3cb, 0xb3cc, 0xb3ce, 0xb3d0, 0xb3d4, 0xb3d5, 0xb3d7, 0xb3d9, 0xb3db, 0xb3dd, 0xb3e0, 0xb3e4, 0xb3e8, 0xb3fc, 0xb410, 0xb418, 0xb41c, 0xb420, 0xb428, 0xb429, 0xb42b, 0xb434, 0xb450, 0xb451, 0xb454, 0xb458, 0xb460, 0xb461, 0xb463, 0xb465, 0xb46c, 0xb480, 0xb488, 0xb49d, 0xb4a4, 0xb4a8, 0xb4ac, 0xb4b5, 0xb4b7, 0xb4b9, 0xb4c0, 0xb4c4, 0xb4c8, 0xb4d0, 0xb4d5, 0xb4dc, 0xb4dd, 0xb4e0, 0xb4e3, 0xb4e4, 0xb4e6, 0xb4ec, 0xb4ed, 0xb4ef, 0xb4f1, 0xb4f8, 0xb514, 0xb515, 0xb518, 0xb51b, 0xb51c, 0xb524, 0xb525, 0xb527, 0xb528, 0xb529, 0xb52a, 0xb530, 0xb531, 0xb534, 0xb538, /* 0x36 */ 0xb540, 0xb541, 0xb543, 0xb544, 0xb545, 0xb54b, 0xb54c, 0xb54d, 0xb550, 0xb554, 0xb55c, 0xb55d, 0xb55f, 0xb560, 0xb561, 0xb5a0, 0xb5a1, 0xb5a4, 0xb5a8, 0xb5aa, 0xb5ab, 0xb5b0, 0xb5b1, 0xb5b3, 0xb5b4, 0xb5b5, 0xb5bb, 0xb5bc, 0xb5bd, 0xb5c0, 0xb5c4, 0xb5cc, 0xb5cd, 0xb5cf, 0xb5d0, 0xb5d1, 0xb5d8, 0xb5ec, 0xb610, 0xb611, 0xb614, 0xb618, 0xb625, 0xb62c, 0xb634, 0xb648, 0xb664, 0xb668, 0xb69c, 0xb69d, 0xb6a0, 0xb6a4, 0xb6ab, 0xb6ac, 0xb6b1, 0xb6d4, 0xb6f0, 0xb6f4, 0xb6f8, 0xb700, 0xb701, 0xb705, 0xb728, 0xb729, 0xb72c, 0xb72f, 0xb730, 0xb738, 0xb739, 0xb73b, 0xb744, 0xb748, 0xb74c, 0xb754, 0xb755, 0xb760, 0xb764, 0xb768, 0xb770, 0xb771, 0xb773, 0xb775, 0xb77c, 0xb77d, 0xb780, 0xb784, 0xb78c, 0xb78d, 0xb78f, 0xb790, 0xb791, 0xb792, 0xb796, 0xb797, /* 0x37 */ 0xb798, 0xb799, 0xb79c, 0xb7a0, 0xb7a8, 0xb7a9, 0xb7ab, 0xb7ac, 0xb7ad, 0xb7b4, 0xb7b5, 0xb7b8, 0xb7c7, 0xb7c9, 0xb7ec, 0xb7ed, 0xb7f0, 0xb7f4, 0xb7fc, 0xb7fd, 0xb7ff, 0xb800, 0xb801, 0xb807, 0xb808, 0xb809, 0xb80c, 0xb810, 0xb818, 0xb819, 0xb81b, 0xb81d, 0xb824, 0xb825, 0xb828, 0xb82c, 0xb834, 0xb835, 0xb837, 0xb838, 0xb839, 0xb840, 0xb844, 0xb851, 0xb853, 0xb85c, 0xb85d, 0xb860, 0xb864, 0xb86c, 0xb86d, 0xb86f, 0xb871, 0xb878, 0xb87c, 0xb88d, 0xb8a8, 0xb8b0, 0xb8b4, 0xb8b8, 0xb8c0, 0xb8c1, 0xb8c3, 0xb8c5, 0xb8cc, 0xb8d0, 0xb8d4, 0xb8dd, 0xb8df, 0xb8e1, 0xb8e8, 0xb8e9, 0xb8ec, 0xb8f0, 0xb8f8, 0xb8f9, 0xb8fb, 0xb8fd, 0xb904, 0xb918, 0xb920, 0xb93c, 0xb93d, 0xb940, 0xb944, 0xb94c, 0xb94f, 0xb951, 0xb958, 0xb959, 0xb95c, 0xb960, 0xb968, 0xb969, /* 0x38 */ 0xb96b, 0xb96d, 0xb974, 0xb975, 0xb978, 0xb97c, 0xb984, 0xb985, 0xb987, 0xb989, 0xb98a, 0xb98d, 0xb98e, 0xb9ac, 0xb9ad, 0xb9b0, 0xb9b4, 0xb9bc, 0xb9bd, 0xb9bf, 0xb9c1, 0xb9c8, 0xb9c9, 0xb9cc, 0xb9ce, 0xb9cf, 0xb9d0, 0xb9d1, 0xb9d2, 0xb9d8, 0xb9d9, 0xb9db, 0xb9dd, 0xb9de, 0xb9e1, 0xb9e3, 0xb9e4, 0xb9e5, 0xb9e8, 0xb9ec, 0xb9f4, 0xb9f5, 0xb9f7, 0xb9f8, 0xb9f9, 0xb9fa, 0xba00, 0xba01, 0xba08, 0xba15, 0xba38, 0xba39, 0xba3c, 0xba40, 0xba42, 0xba48, 0xba49, 0xba4b, 0xba4d, 0xba4e, 0xba53, 0xba54, 0xba55, 0xba58, 0xba5c, 0xba64, 0xba65, 0xba67, 0xba68, 0xba69, 0xba70, 0xba71, 0xba74, 0xba78, 0xba83, 0xba84, 0xba85, 0xba87, 0xba8c, 0xbaa8, 0xbaa9, 0xbaab, 0xbaac, 0xbab0, 0xbab2, 0xbab8, 0xbab9, 0xbabb, 0xbabd, 0xbac4, 0xbac8, 0xbad8, 0xbad9, 0xbafc, /* 0x39 */ 0xbb00, 0xbb04, 0xbb0d, 0xbb0f, 0xbb11, 0xbb18, 0xbb1c, 0xbb20, 0xbb29, 0xbb2b, 0xbb34, 0xbb35, 0xbb36, 0xbb38, 0xbb3b, 0xbb3c, 0xbb3d, 0xbb3e, 0xbb44, 0xbb45, 0xbb47, 0xbb49, 0xbb4d, 0xbb4f, 0xbb50, 0xbb54, 0xbb58, 0xbb61, 0xbb63, 0xbb6c, 0xbb88, 0xbb8c, 0xbb90, 0xbba4, 0xbba8, 0xbbac, 0xbbb4, 0xbbb7, 0xbbc0, 0xbbc4, 0xbbc8, 0xbbd0, 0xbbd3, 0xbbf8, 0xbbf9, 0xbbfc, 0xbbff, 0xbc00, 0xbc02, 0xbc08, 0xbc09, 0xbc0b, 0xbc0c, 0xbc0d, 0xbc0f, 0xbc11, 0xbc14, 0xbc15, 0xbc16, 0xbc17, 0xbc18, 0xbc1b, 0xbc1c, 0xbc1d, 0xbc1e, 0xbc1f, 0xbc24, 0xbc25, 0xbc27, 0xbc29, 0xbc2d, 0xbc30, 0xbc31, 0xbc34, 0xbc38, 0xbc40, 0xbc41, 0xbc43, 0xbc44, 0xbc45, 0xbc49, 0xbc4c, 0xbc4d, 0xbc50, 0xbc5d, 0xbc84, 0xbc85, 0xbc88, 0xbc8b, 0xbc8c, 0xbc8e, 0xbc94, 0xbc95, 0xbc97, /* 0x3a */ 0xbc99, 0xbc9a, 0xbca0, 0xbca1, 0xbca4, 0xbca7, 0xbca8, 0xbcb0, 0xbcb1, 0xbcb3, 0xbcb4, 0xbcb5, 0xbcbc, 0xbcbd, 0xbcc0, 0xbcc4, 0xbccd, 0xbccf, 0xbcd0, 0xbcd1, 0xbcd5, 0xbcd8, 0xbcdc, 0xbcf4, 0xbcf5, 0xbcf6, 0xbcf8, 0xbcfc, 0xbd04, 0xbd05, 0xbd07, 0xbd09, 0xbd10, 0xbd14, 0xbd24, 0xbd2c, 0xbd40, 0xbd48, 0xbd49, 0xbd4c, 0xbd50, 0xbd58, 0xbd59, 0xbd64, 0xbd68, 0xbd80, 0xbd81, 0xbd84, 0xbd87, 0xbd88, 0xbd89, 0xbd8a, 0xbd90, 0xbd91, 0xbd93, 0xbd95, 0xbd99, 0xbd9a, 0xbd9c, 0xbda4, 0xbdb0, 0xbdb8, 0xbdd4, 0xbdd5, 0xbdd8, 0xbddc, 0xbde9, 0xbdf0, 0xbdf4, 0xbdf8, 0xbe00, 0xbe03, 0xbe05, 0xbe0c, 0xbe0d, 0xbe10, 0xbe14, 0xbe1c, 0xbe1d, 0xbe1f, 0xbe44, 0xbe45, 0xbe48, 0xbe4c, 0xbe4e, 0xbe54, 0xbe55, 0xbe57, 0xbe59, 0xbe5a, 0xbe5b, 0xbe60, 0xbe61, 0xbe64, /* 0x3b */ 0xbe68, 0xbe6a, 0xbe70, 0xbe71, 0xbe73, 0xbe74, 0xbe75, 0xbe7b, 0xbe7c, 0xbe7d, 0xbe80, 0xbe84, 0xbe8c, 0xbe8d, 0xbe8f, 0xbe90, 0xbe91, 0xbe98, 0xbe99, 0xbea8, 0xbed0, 0xbed1, 0xbed4, 0xbed7, 0xbed8, 0xbee0, 0xbee3, 0xbee4, 0xbee5, 0xbeec, 0xbf01, 0xbf08, 0xbf09, 0xbf18, 0xbf19, 0xbf1b, 0xbf1c, 0xbf1d, 0xbf40, 0xbf41, 0xbf44, 0xbf48, 0xbf50, 0xbf51, 0xbf55, 0xbf94, 0xbfb0, 0xbfc5, 0xbfcc, 0xbfcd, 0xbfd0, 0xbfd4, 0xbfdc, 0xbfdf, 0xbfe1, 0xc03c, 0xc051, 0xc058, 0xc05c, 0xc060, 0xc068, 0xc069, 0xc090, 0xc091, 0xc094, 0xc098, 0xc0a0, 0xc0a1, 0xc0a3, 0xc0a5, 0xc0ac, 0xc0ad, 0xc0af, 0xc0b0, 0xc0b3, 0xc0b4, 0xc0b5, 0xc0b6, 0xc0bc, 0xc0bd, 0xc0bf, 0xc0c0, 0xc0c1, 0xc0c5, 0xc0c8, 0xc0c9, 0xc0cc, 0xc0d0, 0xc0d8, 0xc0d9, 0xc0db, 0xc0dc, 0xc0dd, 0xc0e4, /* 0x3c */ 0xc0e5, 0xc0e8, 0xc0ec, 0xc0f4, 0xc0f5, 0xc0f7, 0xc0f9, 0xc100, 0xc104, 0xc108, 0xc110, 0xc115, 0xc11c, 0xc11d, 0xc11e, 0xc11f, 0xc120, 0xc123, 0xc124, 0xc126, 0xc127, 0xc12c, 0xc12d, 0xc12f, 0xc130, 0xc131, 0xc136, 0xc138, 0xc139, 0xc13c, 0xc140, 0xc148, 0xc149, 0xc14b, 0xc14c, 0xc14d, 0xc154, 0xc155, 0xc158, 0xc15c, 0xc164, 0xc165, 0xc167, 0xc168, 0xc169, 0xc170, 0xc174, 0xc178, 0xc185, 0xc18c, 0xc18d, 0xc18e, 0xc190, 0xc194, 0xc196, 0xc19c, 0xc19d, 0xc19f, 0xc1a1, 0xc1a5, 0xc1a8, 0xc1a9, 0xc1ac, 0xc1b0, 0xc1bd, 0xc1c4, 0xc1c8, 0xc1cc, 0xc1d4, 0xc1d7, 0xc1d8, 0xc1e0, 0xc1e4, 0xc1e8, 0xc1f0, 0xc1f1, 0xc1f3, 0xc1fc, 0xc1fd, 0xc200, 0xc204, 0xc20c, 0xc20d, 0xc20f, 0xc211, 0xc218, 0xc219, 0xc21c, 0xc21f, 0xc220, 0xc228, 0xc229, 0xc22b, 0xc22d, /* 0x3d */ 0xc22f, 0xc231, 0xc232, 0xc234, 0xc248, 0xc250, 0xc251, 0xc254, 0xc258, 0xc260, 0xc265, 0xc26c, 0xc26d, 0xc270, 0xc274, 0xc27c, 0xc27d, 0xc27f, 0xc281, 0xc288, 0xc289, 0xc290, 0xc298, 0xc29b, 0xc29d, 0xc2a4, 0xc2a5, 0xc2a8, 0xc2ac, 0xc2ad, 0xc2b4, 0xc2b5, 0xc2b7, 0xc2b9, 0xc2dc, 0xc2dd, 0xc2e0, 0xc2e3, 0xc2e4, 0xc2eb, 0xc2ec, 0xc2ed, 0xc2ef, 0xc2f1, 0xc2f6, 0xc2f8, 0xc2f9, 0xc2fb, 0xc2fc, 0xc300, 0xc308, 0xc309, 0xc30c, 0xc30d, 0xc313, 0xc314, 0xc315, 0xc318, 0xc31c, 0xc324, 0xc325, 0xc328, 0xc329, 0xc345, 0xc368, 0xc369, 0xc36c, 0xc370, 0xc372, 0xc378, 0xc379, 0xc37c, 0xc37d, 0xc384, 0xc388, 0xc38c, 0xc3c0, 0xc3d8, 0xc3d9, 0xc3dc, 0xc3df, 0xc3e0, 0xc3e2, 0xc3e8, 0xc3e9, 0xc3ed, 0xc3f4, 0xc3f5, 0xc3f8, 0xc408, 0xc410, 0xc424, 0xc42c, 0xc430, /* 0x3e */ 0xc434, 0xc43c, 0xc43d, 0xc448, 0xc464, 0xc465, 0xc468, 0xc46c, 0xc474, 0xc475, 0xc479, 0xc480, 0xc494, 0xc49c, 0xc4b8, 0xc4bc, 0xc4e9, 0xc4f0, 0xc4f1, 0xc4f4, 0xc4f8, 0xc4fa, 0xc4ff, 0xc500, 0xc501, 0xc50c, 0xc510, 0xc514, 0xc51c, 0xc528, 0xc529, 0xc52c, 0xc530, 0xc538, 0xc539, 0xc53b, 0xc53d, 0xc544, 0xc545, 0xc548, 0xc549, 0xc54a, 0xc54c, 0xc54d, 0xc54e, 0xc553, 0xc554, 0xc555, 0xc557, 0xc558, 0xc559, 0xc55d, 0xc55e, 0xc560, 0xc561, 0xc564, 0xc568, 0xc570, 0xc571, 0xc573, 0xc574, 0xc575, 0xc57c, 0xc57d, 0xc580, 0xc584, 0xc587, 0xc58c, 0xc58d, 0xc58f, 0xc591, 0xc595, 0xc597, 0xc598, 0xc59c, 0xc5a0, 0xc5a9, 0xc5b4, 0xc5b5, 0xc5b8, 0xc5b9, 0xc5bb, 0xc5bc, 0xc5bd, 0xc5be, 0xc5c4, 0xc5c5, 0xc5c6, 0xc5c7, 0xc5c8, 0xc5c9, 0xc5ca, 0xc5cc, 0xc5ce, /* 0x3f */ 0xc5d0, 0xc5d1, 0xc5d4, 0xc5d8, 0xc5e0, 0xc5e1, 0xc5e3, 0xc5e5, 0xc5ec, 0xc5ed, 0xc5ee, 0xc5f0, 0xc5f4, 0xc5f6, 0xc5f7, 0xc5fc, 0xc5fd, 0xc5fe, 0xc5ff, 0xc600, 0xc601, 0xc605, 0xc606, 0xc607, 0xc608, 0xc60c, 0xc610, 0xc618, 0xc619, 0xc61b, 0xc61c, 0xc624, 0xc625, 0xc628, 0xc62c, 0xc62d, 0xc62e, 0xc630, 0xc633, 0xc634, 0xc635, 0xc637, 0xc639, 0xc63b, 0xc640, 0xc641, 0xc644, 0xc648, 0xc650, 0xc651, 0xc653, 0xc654, 0xc655, 0xc65c, 0xc65d, 0xc660, 0xc66c, 0xc66f, 0xc671, 0xc678, 0xc679, 0xc67c, 0xc680, 0xc688, 0xc689, 0xc68b, 0xc68d, 0xc694, 0xc695, 0xc698, 0xc69c, 0xc6a4, 0xc6a5, 0xc6a7, 0xc6a9, 0xc6b0, 0xc6b1, 0xc6b4, 0xc6b8, 0xc6b9, 0xc6ba, 0xc6c0, 0xc6c1, 0xc6c3, 0xc6c5, 0xc6cc, 0xc6cd, 0xc6d0, 0xc6d4, 0xc6dc, 0xc6dd, 0xc6e0, 0xc6e1, 0xc6e8, /* 0x40 */ 0xc6e9, 0xc6ec, 0xc6f0, 0xc6f8, 0xc6f9, 0xc6fd, 0xc704, 0xc705, 0xc708, 0xc70c, 0xc714, 0xc715, 0xc717, 0xc719, 0xc720, 0xc721, 0xc724, 0xc728, 0xc730, 0xc731, 0xc733, 0xc735, 0xc737, 0xc73c, 0xc73d, 0xc740, 0xc744, 0xc74a, 0xc74c, 0xc74d, 0xc74f, 0xc751, 0xc752, 0xc753, 0xc754, 0xc755, 0xc756, 0xc757, 0xc758, 0xc75c, 0xc760, 0xc768, 0xc76b, 0xc774, 0xc775, 0xc778, 0xc77c, 0xc77d, 0xc77e, 0xc783, 0xc784, 0xc785, 0xc787, 0xc788, 0xc789, 0xc78a, 0xc78e, 0xc790, 0xc791, 0xc794, 0xc796, 0xc797, 0xc798, 0xc79a, 0xc7a0, 0xc7a1, 0xc7a3, 0xc7a4, 0xc7a5, 0xc7a6, 0xc7ac, 0xc7ad, 0xc7b0, 0xc7b4, 0xc7bc, 0xc7bd, 0xc7bf, 0xc7c0, 0xc7c1, 0xc7c8, 0xc7c9, 0xc7cc, 0xc7ce, 0xc7d0, 0xc7d8, 0xc7dd, 0xc7e4, 0xc7e8, 0xc7ec, 0xc800, 0xc801, 0xc804, 0xc808, 0xc80a, /* 0x41 */ 0xc810, 0xc811, 0xc813, 0xc815, 0xc816, 0xc81c, 0xc81d, 0xc820, 0xc824, 0xc82c, 0xc82d, 0xc82f, 0xc831, 0xc838, 0xc83c, 0xc840, 0xc848, 0xc849, 0xc84c, 0xc84d, 0xc854, 0xc870, 0xc871, 0xc874, 0xc878, 0xc87a, 0xc880, 0xc881, 0xc883, 0xc885, 0xc886, 0xc887, 0xc88b, 0xc88c, 0xc88d, 0xc894, 0xc89d, 0xc89f, 0xc8a1, 0xc8a8, 0xc8bc, 0xc8bd, 0xc8c4, 0xc8c8, 0xc8cc, 0xc8d4, 0xc8d5, 0xc8d7, 0xc8d9, 0xc8e0, 0xc8e1, 0xc8e4, 0xc8f5, 0xc8fc, 0xc8fd, 0xc900, 0xc904, 0xc905, 0xc906, 0xc90c, 0xc90d, 0xc90f, 0xc911, 0xc918, 0xc92c, 0xc934, 0xc950, 0xc951, 0xc954, 0xc958, 0xc960, 0xc961, 0xc963, 0xc96c, 0xc970, 0xc974, 0xc97c, 0xc988, 0xc989, 0xc98c, 0xc990, 0xc998, 0xc999, 0xc99b, 0xc99d, 0xc9c0, 0xc9c1, 0xc9c4, 0xc9c7, 0xc9c8, 0xc9ca, 0xc9d0, 0xc9d1, 0xc9d3, /* 0x42 */ 0xc9d5, 0xc9d6, 0xc9d9, 0xc9da, 0xc9dc, 0xc9dd, 0xc9e0, 0xc9e2, 0xc9e4, 0xc9e7, 0xc9ec, 0xc9ed, 0xc9ef, 0xc9f0, 0xc9f1, 0xc9f8, 0xc9f9, 0xc9fc, 0xca00, 0xca08, 0xca09, 0xca0b, 0xca0c, 0xca0d, 0xca14, 0xca18, 0xca29, 0xca4c, 0xca4d, 0xca50, 0xca54, 0xca5c, 0xca5d, 0xca5f, 0xca60, 0xca61, 0xca68, 0xca7d, 0xca84, 0xca98, 0xcabc, 0xcabd, 0xcac0, 0xcac4, 0xcacc, 0xcacd, 0xcacf, 0xcad1, 0xcad3, 0xcad8, 0xcad9, 0xcae0, 0xcaec, 0xcaf4, 0xcb08, 0xcb10, 0xcb14, 0xcb18, 0xcb20, 0xcb21, 0xcb41, 0xcb48, 0xcb49, 0xcb4c, 0xcb50, 0xcb58, 0xcb59, 0xcb5d, 0xcb64, 0xcb78, 0xcb79, 0xcb9c, 0xcbb8, 0xcbd4, 0xcbe4, 0xcbe7, 0xcbe9, 0xcc0c, 0xcc0d, 0xcc10, 0xcc14, 0xcc1c, 0xcc1d, 0xcc21, 0xcc22, 0xcc27, 0xcc28, 0xcc29, 0xcc2c, 0xcc2e, 0xcc30, 0xcc38, 0xcc39, 0xcc3b, /* 0x43 */ 0xcc3c, 0xcc3d, 0xcc3e, 0xcc44, 0xcc45, 0xcc48, 0xcc4c, 0xcc54, 0xcc55, 0xcc57, 0xcc58, 0xcc59, 0xcc60, 0xcc64, 0xcc66, 0xcc68, 0xcc70, 0xcc75, 0xcc98, 0xcc99, 0xcc9c, 0xcca0, 0xcca8, 0xcca9, 0xccab, 0xccac, 0xccad, 0xccb4, 0xccb5, 0xccb8, 0xccbc, 0xccc4, 0xccc5, 0xccc7, 0xccc9, 0xccd0, 0xccd4, 0xcce4, 0xccec, 0xccf0, 0xcd01, 0xcd08, 0xcd09, 0xcd0c, 0xcd10, 0xcd18, 0xcd19, 0xcd1b, 0xcd1d, 0xcd24, 0xcd28, 0xcd2c, 0xcd39, 0xcd5c, 0xcd60, 0xcd64, 0xcd6c, 0xcd6d, 0xcd6f, 0xcd71, 0xcd78, 0xcd88, 0xcd94, 0xcd95, 0xcd98, 0xcd9c, 0xcda4, 0xcda5, 0xcda7, 0xcda9, 0xcdb0, 0xcdc4, 0xcdcc, 0xcdd0, 0xcde8, 0xcdec, 0xcdf0, 0xcdf8, 0xcdf9, 0xcdfb, 0xcdfd, 0xce04, 0xce08, 0xce0c, 0xce14, 0xce19, 0xce20, 0xce21, 0xce24, 0xce28, 0xce30, 0xce31, 0xce33, 0xce35, /* 0x44 */ 0xce58, 0xce59, 0xce5c, 0xce5f, 0xce60, 0xce61, 0xce68, 0xce69, 0xce6b, 0xce6d, 0xce74, 0xce75, 0xce78, 0xce7c, 0xce84, 0xce85, 0xce87, 0xce89, 0xce90, 0xce91, 0xce94, 0xce98, 0xcea0, 0xcea1, 0xcea3, 0xcea4, 0xcea5, 0xceac, 0xcead, 0xcec1, 0xcee4, 0xcee5, 0xcee8, 0xceeb, 0xceec, 0xcef4, 0xcef5, 0xcef7, 0xcef8, 0xcef9, 0xcf00, 0xcf01, 0xcf04, 0xcf08, 0xcf10, 0xcf11, 0xcf13, 0xcf15, 0xcf1c, 0xcf20, 0xcf24, 0xcf2c, 0xcf2d, 0xcf2f, 0xcf30, 0xcf31, 0xcf38, 0xcf54, 0xcf55, 0xcf58, 0xcf5c, 0xcf64, 0xcf65, 0xcf67, 0xcf69, 0xcf70, 0xcf71, 0xcf74, 0xcf78, 0xcf80, 0xcf85, 0xcf8c, 0xcfa1, 0xcfa8, 0xcfb0, 0xcfc4, 0xcfe0, 0xcfe1, 0xcfe4, 0xcfe8, 0xcff0, 0xcff1, 0xcff3, 0xcff5, 0xcffc, 0xd000, 0xd004, 0xd011, 0xd018, 0xd02d, 0xd034, 0xd035, 0xd038, 0xd03c, /* 0x45 */ 0xd044, 0xd045, 0xd047, 0xd049, 0xd050, 0xd054, 0xd058, 0xd060, 0xd06c, 0xd06d, 0xd070, 0xd074, 0xd07c, 0xd07d, 0xd081, 0xd0a4, 0xd0a5, 0xd0a8, 0xd0ac, 0xd0b4, 0xd0b5, 0xd0b7, 0xd0b9, 0xd0c0, 0xd0c1, 0xd0c4, 0xd0c8, 0xd0c9, 0xd0d0, 0xd0d1, 0xd0d3, 0xd0d4, 0xd0d5, 0xd0dc, 0xd0dd, 0xd0e0, 0xd0e4, 0xd0ec, 0xd0ed, 0xd0ef, 0xd0f0, 0xd0f1, 0xd0f8, 0xd10d, 0xd130, 0xd131, 0xd134, 0xd138, 0xd13a, 0xd140, 0xd141, 0xd143, 0xd144, 0xd145, 0xd14c, 0xd14d, 0xd150, 0xd154, 0xd15c, 0xd15d, 0xd15f, 0xd161, 0xd168, 0xd16c, 0xd17c, 0xd184, 0xd188, 0xd1a0, 0xd1a1, 0xd1a4, 0xd1a8, 0xd1b0, 0xd1b1, 0xd1b3, 0xd1b5, 0xd1ba, 0xd1bc, 0xd1c0, 0xd1d8, 0xd1f4, 0xd1f8, 0xd207, 0xd209, 0xd210, 0xd22c, 0xd22d, 0xd230, 0xd234, 0xd23c, 0xd23d, 0xd23f, 0xd241, 0xd248, 0xd25c, /* 0x46 */ 0xd264, 0xd280, 0xd281, 0xd284, 0xd288, 0xd290, 0xd291, 0xd295, 0xd29c, 0xd2a0, 0xd2a4, 0xd2ac, 0xd2b1, 0xd2b8, 0xd2b9, 0xd2bc, 0xd2bf, 0xd2c0, 0xd2c2, 0xd2c8, 0xd2c9, 0xd2cb, 0xd2d4, 0xd2d8, 0xd2dc, 0xd2e4, 0xd2e5, 0xd2f0, 0xd2f1, 0xd2f4, 0xd2f8, 0xd300, 0xd301, 0xd303, 0xd305, 0xd30c, 0xd30d, 0xd30e, 0xd310, 0xd314, 0xd316, 0xd31c, 0xd31d, 0xd31f, 0xd320, 0xd321, 0xd325, 0xd328, 0xd329, 0xd32c, 0xd330, 0xd338, 0xd339, 0xd33b, 0xd33c, 0xd33d, 0xd344, 0xd345, 0xd37c, 0xd37d, 0xd380, 0xd384, 0xd38c, 0xd38d, 0xd38f, 0xd390, 0xd391, 0xd398, 0xd399, 0xd39c, 0xd3a0, 0xd3a8, 0xd3a9, 0xd3ab, 0xd3ad, 0xd3b4, 0xd3b8, 0xd3bc, 0xd3c4, 0xd3c5, 0xd3c8, 0xd3c9, 0xd3d0, 0xd3d8, 0xd3e1, 0xd3e3, 0xd3ec, 0xd3ed, 0xd3f0, 0xd3f4, 0xd3fc, 0xd3fd, 0xd3ff, 0xd401, /* 0x47 */ 0xd408, 0xd41d, 0xd440, 0xd444, 0xd45c, 0xd460, 0xd464, 0xd46d, 0xd46f, 0xd478, 0xd479, 0xd47c, 0xd47f, 0xd480, 0xd482, 0xd488, 0xd489, 0xd48b, 0xd48d, 0xd494, 0xd4a9, 0xd4cc, 0xd4d0, 0xd4d4, 0xd4dc, 0xd4df, 0xd4e8, 0xd4ec, 0xd4f0, 0xd4f8, 0xd4fb, 0xd4fd, 0xd504, 0xd508, 0xd50c, 0xd514, 0xd515, 0xd517, 0xd53c, 0xd53d, 0xd540, 0xd544, 0xd54c, 0xd54d, 0xd54f, 0xd551, 0xd558, 0xd559, 0xd55c, 0xd560, 0xd565, 0xd568, 0xd569, 0xd56b, 0xd56d, 0xd574, 0xd575, 0xd578, 0xd57c, 0xd584, 0xd585, 0xd587, 0xd588, 0xd589, 0xd590, 0xd5a5, 0xd5c8, 0xd5c9, 0xd5cc, 0xd5d0, 0xd5d2, 0xd5d8, 0xd5d9, 0xd5db, 0xd5dd, 0xd5e4, 0xd5e5, 0xd5e8, 0xd5ec, 0xd5f4, 0xd5f5, 0xd5f7, 0xd5f9, 0xd600, 0xd601, 0xd604, 0xd608, 0xd610, 0xd611, 0xd613, 0xd614, 0xd615, 0xd61c, 0xd620, /* 0x48 */ 0xd624, 0xd62d, 0xd638, 0xd639, 0xd63c, 0xd640, 0xd645, 0xd648, 0xd649, 0xd64b, 0xd64d, 0xd651, 0xd654, 0xd655, 0xd658, 0xd65c, 0xd667, 0xd669, 0xd670, 0xd671, 0xd674, 0xd683, 0xd685, 0xd68c, 0xd68d, 0xd690, 0xd694, 0xd69d, 0xd69f, 0xd6a1, 0xd6a8, 0xd6ac, 0xd6b0, 0xd6b9, 0xd6bb, 0xd6c4, 0xd6c5, 0xd6c8, 0xd6cc, 0xd6d1, 0xd6d4, 0xd6d7, 0xd6d9, 0xd6e0, 0xd6e4, 0xd6e8, 0xd6f0, 0xd6f5, 0xd6fc, 0xd6fd, 0xd700, 0xd704, 0xd711, 0xd718, 0xd719, 0xd71c, 0xd720, 0xd728, 0xd729, 0xd72b, 0xd72d, 0xd734, 0xd735, 0xd738, 0xd73c, 0xd744, 0xd747, 0xd749, 0xd750, 0xd751, 0xd754, 0xd756, 0xd757, 0xd758, 0xd759, 0xd760, 0xd761, 0xd763, 0xd765, 0xd769, 0xd76c, 0xd770, 0xd774, 0xd77c, 0xd77d, 0xd781, 0xd788, 0xd789, 0xd78c, 0xd790, 0xd798, 0xd799, 0xd79b, 0xd79d, }; static const unsigned short ksc5601_2uni_page4a[4888] = { /* 0x4a */ 0x4f3d, 0x4f73, 0x5047, 0x50f9, 0x52a0, 0x53ef, 0x5475, 0x54e5, 0x5609, 0x5ac1, 0x5bb6, 0x6687, 0x67b6, 0x67b7, 0x67ef, 0x6b4c, 0x73c2, 0x75c2, 0x7a3c, 0x82db, 0x8304, 0x8857, 0x8888, 0x8a36, 0x8cc8, 0x8dcf, 0x8efb, 0x8fe6, 0x99d5, 0x523b, 0x5374, 0x5404, 0x606a, 0x6164, 0x6bbc, 0x73cf, 0x811a, 0x89ba, 0x89d2, 0x95a3, 0x4f83, 0x520a, 0x58be, 0x5978, 0x59e6, 0x5e72, 0x5e79, 0x61c7, 0x63c0, 0x6746, 0x67ec, 0x687f, 0x6f97, 0x764e, 0x770b, 0x78f5, 0x7a08, 0x7aff, 0x7c21, 0x809d, 0x826e, 0x8271, 0x8aeb, 0x9593, 0x4e6b, 0x559d, 0x66f7, 0x6e34, 0x78a3, 0x7aed, 0x845b, 0x8910, 0x874e, 0x97a8, 0x52d8, 0x574e, 0x582a, 0x5d4c, 0x611f, 0x61be, 0x6221, 0x6562, 0x67d1, 0x6a44, 0x6e1b, 0x7518, 0x75b3, 0x76e3, 0x77b0, 0x7d3a, 0x90af, 0x9451, 0x9452, 0x9f95, /* 0x4b */ 0x5323, 0x5cac, 0x7532, 0x80db, 0x9240, 0x9598, 0x525b, 0x5808, 0x59dc, 0x5ca1, 0x5d17, 0x5eb7, 0x5f3a, 0x5f4a, 0x6177, 0x6c5f, 0x757a, 0x7586, 0x7ce0, 0x7d73, 0x7db1, 0x7f8c, 0x8154, 0x8221, 0x8591, 0x8941, 0x8b1b, 0x92fc, 0x964d, 0x9c47, 0x4ecb, 0x4ef7, 0x500b, 0x51f1, 0x584f, 0x6137, 0x613e, 0x6168, 0x6539, 0x69ea, 0x6f11, 0x75a5, 0x7686, 0x76d6, 0x7b87, 0x82a5, 0x84cb, 0xf900, 0x93a7, 0x958b, 0x5580, 0x5ba2, 0x5751, 0xf901, 0x7cb3, 0x7fb9, 0x91b5, 0x5028, 0x53bb, 0x5c45, 0x5de8, 0x62d2, 0x636e, 0x64da, 0x64e7, 0x6e20, 0x70ac, 0x795b, 0x8ddd, 0x8e1e, 0xf902, 0x907d, 0x9245, 0x92f8, 0x4e7e, 0x4ef6, 0x5065, 0x5dfe, 0x5efa, 0x6106, 0x6957, 0x8171, 0x8654, 0x8e47, 0x9375, 0x9a2b, 0x4e5e, 0x5091, 0x6770, 0x6840, 0x5109, 0x528d, 0x5292, 0x6aa2, /* 0x4c */ 0x77bc, 0x9210, 0x9ed4, 0x52ab, 0x602f, 0x8ff2, 0x5048, 0x61a9, 0x63ed, 0x64ca, 0x683c, 0x6a84, 0x6fc0, 0x8188, 0x89a1, 0x9694, 0x5805, 0x727d, 0x72ac, 0x7504, 0x7d79, 0x7e6d, 0x80a9, 0x898b, 0x8b74, 0x9063, 0x9d51, 0x6289, 0x6c7a, 0x6f54, 0x7d50, 0x7f3a, 0x8a23, 0x517c, 0x614a, 0x7b9d, 0x8b19, 0x9257, 0x938c, 0x4eac, 0x4fd3, 0x501e, 0x50be, 0x5106, 0x52c1, 0x52cd, 0x537f, 0x5770, 0x5883, 0x5e9a, 0x5f91, 0x6176, 0x61ac, 0x64ce, 0x656c, 0x666f, 0x66bb, 0x66f4, 0x6897, 0x6d87, 0x7085, 0x70f1, 0x749f, 0x74a5, 0x74ca, 0x75d9, 0x786c, 0x78ec, 0x7adf, 0x7af6, 0x7d45, 0x7d93, 0x8015, 0x803f, 0x811b, 0x8396, 0x8b66, 0x8f15, 0x9015, 0x93e1, 0x9803, 0x9838, 0x9a5a, 0x9be8, 0x4fc2, 0x5553, 0x583a, 0x5951, 0x5b63, 0x5c46, 0x60b8, 0x6212, 0x6842, 0x68b0, /* 0x4d */ 0x68e8, 0x6eaa, 0x754c, 0x7678, 0x78ce, 0x7a3d, 0x7cfb, 0x7e6b, 0x7e7c, 0x8a08, 0x8aa1, 0x8c3f, 0x968e, 0x9dc4, 0x53e4, 0x53e9, 0x544a, 0x5471, 0x56fa, 0x59d1, 0x5b64, 0x5c3b, 0x5eab, 0x62f7, 0x6537, 0x6545, 0x6572, 0x66a0, 0x67af, 0x69c1, 0x6cbd, 0x75fc, 0x7690, 0x777e, 0x7a3f, 0x7f94, 0x8003, 0x80a1, 0x818f, 0x82e6, 0x82fd, 0x83f0, 0x85c1, 0x8831, 0x88b4, 0x8aa5, 0xf903, 0x8f9c, 0x932e, 0x96c7, 0x9867, 0x9ad8, 0x9f13, 0x54ed, 0x659b, 0x66f2, 0x688f, 0x7a40, 0x8c37, 0x9d60, 0x56f0, 0x5764, 0x5d11, 0x6606, 0x68b1, 0x68cd, 0x6efe, 0x7428, 0x889e, 0x9be4, 0x6c68, 0xf904, 0x9aa8, 0x4f9b, 0x516c, 0x5171, 0x529f, 0x5b54, 0x5de5, 0x6050, 0x606d, 0x62f1, 0x63a7, 0x653b, 0x73d9, 0x7a7a, 0x86a3, 0x8ca2, 0x978f, 0x4e32, 0x5be1, 0x6208, 0x679c, 0x74dc, /* 0x4e */ 0x79d1, 0x83d3, 0x8a87, 0x8ab2, 0x8de8, 0x904e, 0x934b, 0x9846, 0x5ed3, 0x69e8, 0x85ff, 0x90ed, 0xf905, 0x51a0, 0x5b98, 0x5bec, 0x6163, 0x68fa, 0x6b3e, 0x704c, 0x742f, 0x74d8, 0x7ba1, 0x7f50, 0x83c5, 0x89c0, 0x8cab, 0x95dc, 0x9928, 0x522e, 0x605d, 0x62ec, 0x9002, 0x4f8a, 0x5149, 0x5321, 0x58d9, 0x5ee3, 0x66e0, 0x6d38, 0x709a, 0x72c2, 0x73d6, 0x7b50, 0x80f1, 0x945b, 0x5366, 0x639b, 0x7f6b, 0x4e56, 0x5080, 0x584a, 0x58de, 0x602a, 0x6127, 0x62d0, 0x69d0, 0x9b41, 0x5b8f, 0x7d18, 0x80b1, 0x8f5f, 0x4ea4, 0x50d1, 0x54ac, 0x55ac, 0x5b0c, 0x5da0, 0x5de7, 0x652a, 0x654e, 0x6821, 0x6a4b, 0x72e1, 0x768e, 0x77ef, 0x7d5e, 0x7ff9, 0x81a0, 0x854e, 0x86df, 0x8f03, 0x8f4e, 0x90ca, 0x9903, 0x9a55, 0x9bab, 0x4e18, 0x4e45, 0x4e5d, 0x4ec7, 0x4ff1, 0x5177, 0x52fe, /* 0x4f */ 0x5340, 0x53e3, 0x53e5, 0x548e, 0x5614, 0x5775, 0x57a2, 0x5bc7, 0x5d87, 0x5ed0, 0x61fc, 0x62d8, 0x6551, 0x67b8, 0x67e9, 0x69cb, 0x6b50, 0x6bc6, 0x6bec, 0x6c42, 0x6e9d, 0x7078, 0x72d7, 0x7396, 0x7403, 0x77bf, 0x77e9, 0x7a76, 0x7d7f, 0x8009, 0x81fc, 0x8205, 0x820a, 0x82df, 0x8862, 0x8b33, 0x8cfc, 0x8ec0, 0x9011, 0x90b1, 0x9264, 0x92b6, 0x99d2, 0x9a45, 0x9ce9, 0x9dd7, 0x9f9c, 0x570b, 0x5c40, 0x83ca, 0x97a0, 0x97ab, 0x9eb4, 0x541b, 0x7a98, 0x7fa4, 0x88d9, 0x8ecd, 0x90e1, 0x5800, 0x5c48, 0x6398, 0x7a9f, 0x5bae, 0x5f13, 0x7a79, 0x7aae, 0x828e, 0x8eac, 0x5026, 0x5238, 0x52f8, 0x5377, 0x5708, 0x62f3, 0x6372, 0x6b0a, 0x6dc3, 0x7737, 0x53a5, 0x7357, 0x8568, 0x8e76, 0x95d5, 0x673a, 0x6ac3, 0x6f70, 0x8a6d, 0x8ecc, 0x994b, 0xf906, 0x6677, 0x6b78, 0x8cb4, /* 0x50 */ 0x9b3c, 0xf907, 0x53eb, 0x572d, 0x594e, 0x63c6, 0x69fb, 0x73ea, 0x7845, 0x7aba, 0x7ac5, 0x7cfe, 0x8475, 0x898f, 0x8d73, 0x9035, 0x95a8, 0x52fb, 0x5747, 0x7547, 0x7b60, 0x83cc, 0x921e, 0xf908, 0x6a58, 0x514b, 0x524b, 0x5287, 0x621f, 0x68d8, 0x6975, 0x9699, 0x50c5, 0x52a4, 0x52e4, 0x61c3, 0x65a4, 0x6839, 0x69ff, 0x747e, 0x7b4b, 0x82b9, 0x83eb, 0x89b2, 0x8b39, 0x8fd1, 0x9949, 0xf909, 0x4eca, 0x5997, 0x64d2, 0x6611, 0x6a8e, 0x7434, 0x7981, 0x79bd, 0x82a9, 0x887e, 0x887f, 0x895f, 0xf90a, 0x9326, 0x4f0b, 0x53ca, 0x6025, 0x6271, 0x6c72, 0x7d1a, 0x7d66, 0x4e98, 0x5162, 0x77dc, 0x80af, 0x4f01, 0x4f0e, 0x5176, 0x5180, 0x55dc, 0x5668, 0x573b, 0x57fa, 0x57fc, 0x5914, 0x5947, 0x5993, 0x5bc4, 0x5c90, 0x5d0e, 0x5df1, 0x5e7e, 0x5fcc, 0x6280, 0x65d7, 0x65e3, /* 0x51 */ 0x671e, 0x671f, 0x675e, 0x68cb, 0x68c4, 0x6a5f, 0x6b3a, 0x6c23, 0x6c7d, 0x6c82, 0x6dc7, 0x7398, 0x7426, 0x742a, 0x7482, 0x74a3, 0x7578, 0x757f, 0x7881, 0x78ef, 0x7941, 0x7947, 0x7948, 0x797a, 0x7b95, 0x7d00, 0x7dba, 0x7f88, 0x8006, 0x802d, 0x808c, 0x8a18, 0x8b4f, 0x8c48, 0x8d77, 0x9321, 0x9324, 0x98e2, 0x9951, 0x9a0e, 0x9a0f, 0x9a65, 0x9e92, 0x7dca, 0x4f76, 0x5409, 0x62ee, 0x6854, 0x91d1, 0x55ab, 0x513a, 0xf90b, 0xf90c, 0x5a1c, 0x61e6, 0xf90d, 0x62cf, 0x62ff, 0xf90e, 0xf90f, 0xf910, 0xf911, 0xf912, 0xf913, 0x90a3, 0xf914, 0xf915, 0xf916, 0xf917, 0xf918, 0x8afe, 0xf919, 0xf91a, 0xf91b, 0xf91c, 0x6696, 0xf91d, 0x7156, 0xf91e, 0xf91f, 0x96e3, 0xf920, 0x634f, 0x637a, 0x5357, 0xf921, 0x678f, 0x6960, 0x6e73, 0xf922, 0x7537, 0xf923, 0xf924, 0xf925, /* 0x52 */ 0x7d0d, 0xf926, 0xf927, 0x8872, 0x56ca, 0x5a18, 0xf928, 0xf929, 0xf92a, 0xf92b, 0xf92c, 0x4e43, 0xf92d, 0x5167, 0x5948, 0x67f0, 0x8010, 0xf92e, 0x5973, 0x5e74, 0x649a, 0x79ca, 0x5ff5, 0x606c, 0x62c8, 0x637b, 0x5be7, 0x5bd7, 0x52aa, 0xf92f, 0x5974, 0x5f29, 0x6012, 0xf930, 0xf931, 0xf932, 0x7459, 0xf933, 0xf934, 0xf935, 0xf936, 0xf937, 0xf938, 0x99d1, 0xf939, 0xf93a, 0xf93b, 0xf93c, 0xf93d, 0xf93e, 0xf93f, 0xf940, 0xf941, 0xf942, 0xf943, 0x6fc3, 0xf944, 0xf945, 0x81bf, 0x8fb2, 0x60f1, 0xf946, 0xf947, 0x8166, 0xf948, 0xf949, 0x5c3f, 0xf94a, 0xf94b, 0xf94c, 0xf94d, 0xf94e, 0xf94f, 0xf950, 0xf951, 0x5ae9, 0x8a25, 0x677b, 0x7d10, 0xf952, 0xf953, 0xf954, 0xf955, 0xf956, 0xf957, 0x80fd, 0xf958, 0xf959, 0x5c3c, 0x6ce5, 0x533f, 0x6eba, 0x591a, 0x8336, /* 0x53 */ 0x4e39, 0x4eb6, 0x4f46, 0x55ae, 0x5718, 0x58c7, 0x5f56, 0x65b7, 0x65e6, 0x6a80, 0x6bb5, 0x6e4d, 0x77ed, 0x7aef, 0x7c1e, 0x7dde, 0x86cb, 0x8892, 0x9132, 0x935b, 0x64bb, 0x6fbe, 0x737a, 0x75b8, 0x9054, 0x5556, 0x574d, 0x61ba, 0x64d4, 0x66c7, 0x6de1, 0x6e5b, 0x6f6d, 0x6fb9, 0x75f0, 0x8043, 0x81bd, 0x8541, 0x8983, 0x8ac7, 0x8b5a, 0x931f, 0x6c93, 0x7553, 0x7b54, 0x8e0f, 0x905d, 0x5510, 0x5802, 0x5858, 0x5e62, 0x6207, 0x649e, 0x68e0, 0x7576, 0x7cd6, 0x87b3, 0x9ee8, 0x4ee3, 0x5788, 0x576e, 0x5927, 0x5c0d, 0x5cb1, 0x5e36, 0x5f85, 0x6234, 0x64e1, 0x73b3, 0x81fa, 0x888b, 0x8cb8, 0x968a, 0x9edb, 0x5b85, 0x5fb7, 0x60b3, 0x5012, 0x5200, 0x5230, 0x5716, 0x5835, 0x5857, 0x5c0e, 0x5c60, 0x5cf6, 0x5d8b, 0x5ea6, 0x5f92, 0x60bc, 0x6311, 0x6389, 0x6417, 0x6843, /* 0x54 */ 0x68f9, 0x6ac2, 0x6dd8, 0x6e21, 0x6ed4, 0x6fe4, 0x71fe, 0x76dc, 0x7779, 0x79b1, 0x7a3b, 0x8404, 0x89a9, 0x8ced, 0x8df3, 0x8e48, 0x9003, 0x9014, 0x9053, 0x90fd, 0x934d, 0x9676, 0x97dc, 0x6bd2, 0x7006, 0x7258, 0x72a2, 0x7368, 0x7763, 0x79bf, 0x7be4, 0x7e9b, 0x8b80, 0x58a9, 0x60c7, 0x6566, 0x65fd, 0x66be, 0x6c8c, 0x711e, 0x71c9, 0x8c5a, 0x9813, 0x4e6d, 0x7a81, 0x4edd, 0x51ac, 0x51cd, 0x52d5, 0x540c, 0x61a7, 0x6771, 0x6850, 0x68df, 0x6d1e, 0x6f7c, 0x75bc, 0x77b3, 0x7ae5, 0x80f4, 0x8463, 0x9285, 0x515c, 0x6597, 0x675c, 0x6793, 0x75d8, 0x7ac7, 0x8373, 0xf95a, 0x8c46, 0x9017, 0x982d, 0x5c6f, 0x81c0, 0x829a, 0x9041, 0x906f, 0x920d, 0x5f97, 0x5d9d, 0x6a59, 0x71c8, 0x767b, 0x7b49, 0x85e4, 0x8b04, 0x9127, 0x9a30, 0x5587, 0x61f6, 0xf95b, 0x7669, 0x7f85, /* 0x55 */ 0x863f, 0x87ba, 0x88f8, 0x908f, 0xf95c, 0x6d1b, 0x70d9, 0x73de, 0x7d61, 0x843d, 0xf95d, 0x916a, 0x99f1, 0xf95e, 0x4e82, 0x5375, 0x6b04, 0x6b12, 0x703e, 0x721b, 0x862d, 0x9e1e, 0x524c, 0x8fa3, 0x5d50, 0x64e5, 0x652c, 0x6b16, 0x6feb, 0x7c43, 0x7e9c, 0x85cd, 0x8964, 0x89bd, 0x62c9, 0x81d8, 0x881f, 0x5eca, 0x6717, 0x6d6a, 0x72fc, 0x7405, 0x746f, 0x8782, 0x90de, 0x4f86, 0x5d0d, 0x5fa0, 0x840a, 0x51b7, 0x63a0, 0x7565, 0x4eae, 0x5006, 0x5169, 0x51c9, 0x6881, 0x6a11, 0x7cae, 0x7cb1, 0x7ce7, 0x826f, 0x8ad2, 0x8f1b, 0x91cf, 0x4fb6, 0x5137, 0x52f5, 0x5442, 0x5eec, 0x616e, 0x623e, 0x65c5, 0x6ada, 0x6ffe, 0x792a, 0x85dc, 0x8823, 0x95ad, 0x9a62, 0x9a6a, 0x9e97, 0x9ece, 0x529b, 0x66c6, 0x6b77, 0x701d, 0x792b, 0x8f62, 0x9742, 0x6190, 0x6200, 0x6523, 0x6f23, /* 0x56 */ 0x7149, 0x7489, 0x7df4, 0x806f, 0x84ee, 0x8f26, 0x9023, 0x934a, 0x51bd, 0x5217, 0x52a3, 0x6d0c, 0x70c8, 0x88c2, 0x5ec9, 0x6582, 0x6bae, 0x6fc2, 0x7c3e, 0x7375, 0x4ee4, 0x4f36, 0x56f9, 0xf95f, 0x5cba, 0x5dba, 0x601c, 0x73b2, 0x7b2d, 0x7f9a, 0x7fce, 0x8046, 0x901e, 0x9234, 0x96f6, 0x9748, 0x9818, 0x9f61, 0x4f8b, 0x6fa7, 0x79ae, 0x91b4, 0x96b7, 0x52de, 0xf960, 0x6488, 0x64c4, 0x6ad3, 0x6f5e, 0x7018, 0x7210, 0x76e7, 0x8001, 0x8606, 0x865c, 0x8def, 0x8f05, 0x9732, 0x9b6f, 0x9dfa, 0x9e75, 0x788c, 0x797f, 0x7da0, 0x83c9, 0x9304, 0x9e7f, 0x9e93, 0x8ad6, 0x58df, 0x5f04, 0x6727, 0x7027, 0x74cf, 0x7c60, 0x807e, 0x5121, 0x7028, 0x7262, 0x78ca, 0x8cc2, 0x8cda, 0x8cf4, 0x96f7, 0x4e86, 0x50da, 0x5bee, 0x5ed6, 0x6599, 0x71ce, 0x7642, 0x77ad, 0x804a, 0x84fc, /* 0x57 */ 0x907c, 0x9b27, 0x9f8d, 0x58d8, 0x5a41, 0x5c62, 0x6a13, 0x6dda, 0x6f0f, 0x763b, 0x7d2f, 0x7e37, 0x851e, 0x8938, 0x93e4, 0x964b, 0x5289, 0x65d2, 0x67f3, 0x69b4, 0x6d41, 0x6e9c, 0x700f, 0x7409, 0x7460, 0x7559, 0x7624, 0x786b, 0x8b2c, 0x985e, 0x516d, 0x622e, 0x9678, 0x4f96, 0x502b, 0x5d19, 0x6dea, 0x7db8, 0x8f2a, 0x5f8b, 0x6144, 0x6817, 0xf961, 0x9686, 0x52d2, 0x808b, 0x51dc, 0x51cc, 0x695e, 0x7a1c, 0x7dbe, 0x83f1, 0x9675, 0x4fda, 0x5229, 0x5398, 0x540f, 0x550e, 0x5c65, 0x60a7, 0x674e, 0x68a8, 0x6d6c, 0x7281, 0x72f8, 0x7406, 0x7483, 0xf962, 0x75e2, 0x7c6c, 0x7f79, 0x7fb8, 0x8389, 0x88cf, 0x88e1, 0x91cc, 0x91d0, 0x96e2, 0x9bc9, 0x541d, 0x6f7e, 0x71d0, 0x7498, 0x85fa, 0x8eaa, 0x96a3, 0x9c57, 0x9e9f, 0x6797, 0x6dcb, 0x7433, 0x81e8, 0x9716, 0x782c, /* 0x58 */ 0x7acb, 0x7b20, 0x7c92, 0x6469, 0x746a, 0x75f2, 0x78bc, 0x78e8, 0x99ac, 0x9b54, 0x9ebb, 0x5bde, 0x5e55, 0x6f20, 0x819c, 0x83ab, 0x9088, 0x4e07, 0x534d, 0x5a29, 0x5dd2, 0x5f4e, 0x6162, 0x633d, 0x6669, 0x66fc, 0x6eff, 0x6f2b, 0x7063, 0x779e, 0x842c, 0x8513, 0x883b, 0x8f13, 0x9945, 0x9c3b, 0x551c, 0x62b9, 0x672b, 0x6cab, 0x8309, 0x896a, 0x977a, 0x4ea1, 0x5984, 0x5fd8, 0x5fd9, 0x671b, 0x7db2, 0x7f54, 0x8292, 0x832b, 0x83bd, 0x8f1e, 0x9099, 0x57cb, 0x59b9, 0x5a92, 0x5bd0, 0x6627, 0x679a, 0x6885, 0x6bcf, 0x7164, 0x7f75, 0x8cb7, 0x8ce3, 0x9081, 0x9b45, 0x8108, 0x8c8a, 0x964c, 0x9a40, 0x9ea5, 0x5b5f, 0x6c13, 0x731b, 0x76f2, 0x76df, 0x840c, 0x51aa, 0x8993, 0x514d, 0x5195, 0x52c9, 0x68c9, 0x6c94, 0x7704, 0x7720, 0x7dbf, 0x7dec, 0x9762, 0x9eb5, 0x6ec5, /* 0x59 */ 0x8511, 0x51a5, 0x540d, 0x547d, 0x660e, 0x669d, 0x6927, 0x6e9f, 0x76bf, 0x7791, 0x8317, 0x84c2, 0x879f, 0x9169, 0x9298, 0x9cf4, 0x8882, 0x4fae, 0x5192, 0x52df, 0x59c6, 0x5e3d, 0x6155, 0x6478, 0x6479, 0x66ae, 0x67d0, 0x6a21, 0x6bcd, 0x6bdb, 0x725f, 0x7261, 0x7441, 0x7738, 0x77db, 0x8017, 0x82bc, 0x8305, 0x8b00, 0x8b28, 0x8c8c, 0x6728, 0x6c90, 0x7267, 0x76ee, 0x7766, 0x7a46, 0x9da9, 0x6b7f, 0x6c92, 0x5922, 0x6726, 0x8499, 0x536f, 0x5893, 0x5999, 0x5edf, 0x63cf, 0x6634, 0x6773, 0x6e3a, 0x732b, 0x7ad7, 0x82d7, 0x9328, 0x52d9, 0x5deb, 0x61ae, 0x61cb, 0x620a, 0x62c7, 0x64ab, 0x65e0, 0x6959, 0x6b66, 0x6bcb, 0x7121, 0x73f7, 0x755d, 0x7e46, 0x821e, 0x8302, 0x856a, 0x8aa3, 0x8cbf, 0x9727, 0x9d61, 0x58a8, 0x9ed8, 0x5011, 0x520e, 0x543b, 0x554f, 0x6587, /* 0x5a */ 0x6c76, 0x7d0a, 0x7d0b, 0x805e, 0x868a, 0x9580, 0x96ef, 0x52ff, 0x6c95, 0x7269, 0x5473, 0x5a9a, 0x5c3e, 0x5d4b, 0x5f4c, 0x5fae, 0x672a, 0x68b6, 0x6963, 0x6e3c, 0x6e44, 0x7709, 0x7c73, 0x7f8e, 0x8587, 0x8b0e, 0x8ff7, 0x9761, 0x9ef4, 0x5cb7, 0x60b6, 0x610d, 0x61ab, 0x654f, 0x65fb, 0x65fc, 0x6c11, 0x6cef, 0x739f, 0x73c9, 0x7de1, 0x9594, 0x5bc6, 0x871c, 0x8b10, 0x525d, 0x535a, 0x62cd, 0x640f, 0x64b2, 0x6734, 0x6a38, 0x6cca, 0x73c0, 0x749e, 0x7b94, 0x7c95, 0x7e1b, 0x818a, 0x8236, 0x8584, 0x8feb, 0x96f9, 0x99c1, 0x4f34, 0x534a, 0x53cd, 0x53db, 0x62cc, 0x642c, 0x6500, 0x6591, 0x69c3, 0x6cee, 0x6f58, 0x73ed, 0x7554, 0x7622, 0x76e4, 0x76fc, 0x78d0, 0x78fb, 0x792c, 0x7d46, 0x822c, 0x87e0, 0x8fd4, 0x9812, 0x98ef, 0x52c3, 0x62d4, 0x64a5, 0x6e24, 0x6f51, /* 0x5b */ 0x767c, 0x8dcb, 0x91b1, 0x9262, 0x9aee, 0x9b43, 0x5023, 0x508d, 0x574a, 0x59a8, 0x5c28, 0x5e47, 0x5f77, 0x623f, 0x653e, 0x65b9, 0x65c1, 0x6609, 0x678b, 0x699c, 0x6ec2, 0x78c5, 0x7d21, 0x80aa, 0x8180, 0x822b, 0x82b3, 0x84a1, 0x868c, 0x8a2a, 0x8b17, 0x90a6, 0x9632, 0x9f90, 0x500d, 0x4ff3, 0xf963, 0x57f9, 0x5f98, 0x62dc, 0x6392, 0x676f, 0x6e43, 0x7119, 0x76c3, 0x80cc, 0x80da, 0x88f4, 0x88f5, 0x8919, 0x8ce0, 0x8f29, 0x914d, 0x966a, 0x4f2f, 0x4f70, 0x5e1b, 0x67cf, 0x6822, 0x767d, 0x767e, 0x9b44, 0x5e61, 0x6a0a, 0x7169, 0x71d4, 0x756a, 0xf964, 0x7e41, 0x8543, 0x85e9, 0x98dc, 0x4f10, 0x7b4f, 0x7f70, 0x95a5, 0x51e1, 0x5e06, 0x68b5, 0x6c3e, 0x6c4e, 0x6cdb, 0x72af, 0x7bc4, 0x8303, 0x6cd5, 0x743a, 0x50fb, 0x5288, 0x58c1, 0x64d8, 0x6a97, 0x74a7, 0x7656, /* 0x5c */ 0x78a7, 0x8617, 0x95e2, 0x9739, 0xf965, 0x535e, 0x5f01, 0x8b8a, 0x8fa8, 0x8faf, 0x908a, 0x5225, 0x77a5, 0x9c49, 0x9f08, 0x4e19, 0x5002, 0x5175, 0x5c5b, 0x5e77, 0x661e, 0x663a, 0x67c4, 0x68c5, 0x70b3, 0x7501, 0x75c5, 0x79c9, 0x7add, 0x8f27, 0x9920, 0x9a08, 0x4fdd, 0x5821, 0x5831, 0x5bf6, 0x666e, 0x6b65, 0x6d11, 0x6e7a, 0x6f7d, 0x73e4, 0x752b, 0x83e9, 0x88dc, 0x8913, 0x8b5c, 0x8f14, 0x4f0f, 0x50d5, 0x5310, 0x535c, 0x5b93, 0x5fa9, 0x670d, 0x798f, 0x8179, 0x832f, 0x8514, 0x8907, 0x8986, 0x8f39, 0x8f3b, 0x99a5, 0x9c12, 0x672c, 0x4e76, 0x4ff8, 0x5949, 0x5c01, 0x5cef, 0x5cf0, 0x6367, 0x68d2, 0x70fd, 0x71a2, 0x742b, 0x7e2b, 0x84ec, 0x8702, 0x9022, 0x92d2, 0x9cf3, 0x4e0d, 0x4ed8, 0x4fef, 0x5085, 0x5256, 0x526f, 0x5426, 0x5490, 0x57e0, 0x592b, 0x5a66, /* 0x5d */ 0x5b5a, 0x5b75, 0x5bcc, 0x5e9c, 0xf966, 0x6276, 0x6577, 0x65a7, 0x6d6e, 0x6ea5, 0x7236, 0x7b26, 0x7c3f, 0x7f36, 0x8150, 0x8151, 0x819a, 0x8240, 0x8299, 0x83a9, 0x8a03, 0x8ca0, 0x8ce6, 0x8cfb, 0x8d74, 0x8dba, 0x90e8, 0x91dc, 0x961c, 0x9644, 0x99d9, 0x9ce7, 0x5317, 0x5206, 0x5429, 0x5674, 0x58b3, 0x5954, 0x596e, 0x5fff, 0x61a4, 0x626e, 0x6610, 0x6c7e, 0x711a, 0x76c6, 0x7c89, 0x7cde, 0x7d1b, 0x82ac, 0x8cc1, 0x96f0, 0xf967, 0x4f5b, 0x5f17, 0x5f7f, 0x62c2, 0x5d29, 0x670b, 0x68da, 0x787c, 0x7e43, 0x9d6c, 0x4e15, 0x5099, 0x5315, 0x532a, 0x5351, 0x5983, 0x5a62, 0x5e87, 0x60b2, 0x618a, 0x6249, 0x6279, 0x6590, 0x6787, 0x69a7, 0x6bd4, 0x6bd6, 0x6bd7, 0x6bd8, 0x6cb8, 0xf968, 0x7435, 0x75fa, 0x7812, 0x7891, 0x79d5, 0x79d8, 0x7c83, 0x7dcb, 0x7fe1, 0x80a5, /* 0x5e */ 0x813e, 0x81c2, 0x83f2, 0x871a, 0x88e8, 0x8ab9, 0x8b6c, 0x8cbb, 0x9119, 0x975e, 0x98db, 0x9f3b, 0x56ac, 0x5b2a, 0x5f6c, 0x658c, 0x6ab3, 0x6baf, 0x6d5c, 0x6ff1, 0x7015, 0x725d, 0x73ad, 0x8ca7, 0x8cd3, 0x983b, 0x6191, 0x6c37, 0x8058, 0x9a01, 0x4e4d, 0x4e8b, 0x4e9b, 0x4ed5, 0x4f3a, 0x4f3c, 0x4f7f, 0x4fdf, 0x50ff, 0x53f2, 0x53f8, 0x5506, 0x55e3, 0x56db, 0x58eb, 0x5962, 0x5a11, 0x5beb, 0x5bfa, 0x5c04, 0x5df3, 0x5e2b, 0x5f99, 0x601d, 0x6368, 0x659c, 0x65af, 0x67f6, 0x67fb, 0x68ad, 0x6b7b, 0x6c99, 0x6cd7, 0x6e23, 0x7009, 0x7345, 0x7802, 0x793e, 0x7940, 0x7960, 0x79c1, 0x7be9, 0x7d17, 0x7d72, 0x8086, 0x820d, 0x838e, 0x84d1, 0x86c7, 0x88df, 0x8a50, 0x8a5e, 0x8b1d, 0x8cdc, 0x8d66, 0x8fad, 0x90aa, 0x98fc, 0x99df, 0x9e9d, 0x524a, 0xf969, 0x6714, 0xf96a, /* 0x5f */ 0x5098, 0x522a, 0x5c71, 0x6563, 0x6c55, 0x73ca, 0x7523, 0x759d, 0x7b97, 0x849c, 0x9178, 0x9730, 0x4e77, 0x6492, 0x6bba, 0x715e, 0x85a9, 0x4e09, 0xf96b, 0x6749, 0x68ee, 0x6e17, 0x829f, 0x8518, 0x886b, 0x63f7, 0x6f81, 0x9212, 0x98af, 0x4e0a, 0x50b7, 0x50cf, 0x511f, 0x5546, 0x55aa, 0x5617, 0x5b40, 0x5c19, 0x5ce0, 0x5e38, 0x5e8a, 0x5ea0, 0x5ec2, 0x60f3, 0x6851, 0x6a61, 0x6e58, 0x723d, 0x7240, 0x72c0, 0x76f8, 0x7965, 0x7bb1, 0x7fd4, 0x88f3, 0x89f4, 0x8a73, 0x8c61, 0x8cde, 0x971c, 0x585e, 0x74bd, 0x8cfd, 0x55c7, 0xf96c, 0x7a61, 0x7d22, 0x8272, 0x7272, 0x751f, 0x7525, 0xf96d, 0x7b19, 0x5885, 0x58fb, 0x5dbc, 0x5e8f, 0x5eb6, 0x5f90, 0x6055, 0x6292, 0x637f, 0x654d, 0x6691, 0x66d9, 0x66f8, 0x6816, 0x68f2, 0x7280, 0x745e, 0x7b6e, 0x7d6e, 0x7dd6, 0x7f72, /* 0x60 */ 0x80e5, 0x8212, 0x85af, 0x897f, 0x8a93, 0x901d, 0x92e4, 0x9ecd, 0x9f20, 0x5915, 0x596d, 0x5e2d, 0x60dc, 0x6614, 0x6673, 0x6790, 0x6c50, 0x6dc5, 0x6f5f, 0x77f3, 0x78a9, 0x84c6, 0x91cb, 0x932b, 0x4ed9, 0x50ca, 0x5148, 0x5584, 0x5b0b, 0x5ba3, 0x6247, 0x657e, 0x65cb, 0x6e32, 0x717d, 0x7401, 0x7444, 0x7487, 0x74bf, 0x766c, 0x79aa, 0x7dda, 0x7e55, 0x7fa8, 0x817a, 0x81b3, 0x8239, 0x861a, 0x87ec, 0x8a75, 0x8de3, 0x9078, 0x9291, 0x9425, 0x994d, 0x9bae, 0x5368, 0x5c51, 0x6954, 0x6cc4, 0x6d29, 0x6e2b, 0x820c, 0x859b, 0x893b, 0x8a2d, 0x8aaa, 0x96ea, 0x9f67, 0x5261, 0x66b9, 0x6bb2, 0x7e96, 0x87fe, 0x8d0d, 0x9583, 0x965d, 0x651d, 0x6d89, 0x71ee, 0xf96e, 0x57ce, 0x59d3, 0x5bac, 0x6027, 0x60fa, 0x6210, 0x661f, 0x665f, 0x7329, 0x73f9, 0x76db, 0x7701, 0x7b6c, /* 0x61 */ 0x8056, 0x8072, 0x8165, 0x8aa0, 0x9192, 0x4e16, 0x52e2, 0x6b72, 0x6d17, 0x7a05, 0x7b39, 0x7d30, 0xf96f, 0x8cb0, 0x53ec, 0x562f, 0x5851, 0x5bb5, 0x5c0f, 0x5c11, 0x5de2, 0x6240, 0x6383, 0x6414, 0x662d, 0x68b3, 0x6cbc, 0x6d88, 0x6eaf, 0x701f, 0x70a4, 0x71d2, 0x7526, 0x758f, 0x758e, 0x7619, 0x7b11, 0x7be0, 0x7c2b, 0x7d20, 0x7d39, 0x852c, 0x856d, 0x8607, 0x8a34, 0x900d, 0x9061, 0x90b5, 0x92b7, 0x97f6, 0x9a37, 0x4fd7, 0x5c6c, 0x675f, 0x6d91, 0x7c9f, 0x7e8c, 0x8b16, 0x8d16, 0x901f, 0x5b6b, 0x5dfd, 0x640d, 0x84c0, 0x905c, 0x98e1, 0x7387, 0x5b8b, 0x609a, 0x677e, 0x6dde, 0x8a1f, 0x8aa6, 0x9001, 0x980c, 0x5237, 0xf970, 0x7051, 0x788e, 0x9396, 0x8870, 0x91d7, 0x4fee, 0x53d7, 0x55fd, 0x56da, 0x5782, 0x58fd, 0x5ac2, 0x5b88, 0x5cab, 0x5cc0, 0x5e25, 0x6101, /* 0x62 */ 0x620d, 0x624b, 0x6388, 0x641c, 0x6536, 0x6578, 0x6a39, 0x6b8a, 0x6c34, 0x6d19, 0x6f31, 0x71e7, 0x72e9, 0x7378, 0x7407, 0x74b2, 0x7626, 0x7761, 0x79c0, 0x7a57, 0x7aea, 0x7cb9, 0x7d8f, 0x7dac, 0x7e61, 0x7f9e, 0x8129, 0x8331, 0x8490, 0x84da, 0x85ea, 0x8896, 0x8ab0, 0x8b90, 0x8f38, 0x9042, 0x9083, 0x916c, 0x9296, 0x92b9, 0x968b, 0x96a7, 0x96a8, 0x96d6, 0x9700, 0x9808, 0x9996, 0x9ad3, 0x9b1a, 0x53d4, 0x587e, 0x5919, 0x5b70, 0x5bbf, 0x6dd1, 0x6f5a, 0x719f, 0x7421, 0x74b9, 0x8085, 0x83fd, 0x5de1, 0x5f87, 0x5faa, 0x6042, 0x65ec, 0x6812, 0x696f, 0x6a53, 0x6b89, 0x6d35, 0x6df3, 0x73e3, 0x76fe, 0x77ac, 0x7b4d, 0x7d14, 0x8123, 0x821c, 0x8340, 0x84f4, 0x8563, 0x8a62, 0x8ac4, 0x9187, 0x931e, 0x9806, 0x99b4, 0x620c, 0x8853, 0x8ff0, 0x9265, 0x5d07, 0x5d27, /* 0x63 */ 0x5d69, 0x745f, 0x819d, 0x8768, 0x6fd5, 0x62fe, 0x7fd2, 0x8936, 0x8972, 0x4e1e, 0x4e58, 0x50e7, 0x52dd, 0x5347, 0x627f, 0x6607, 0x7e69, 0x8805, 0x965e, 0x4f8d, 0x5319, 0x5636, 0x59cb, 0x5aa4, 0x5c38, 0x5c4e, 0x5c4d, 0x5e02, 0x5f11, 0x6043, 0x65bd, 0x662f, 0x6642, 0x67be, 0x67f4, 0x731c, 0x77e2, 0x793a, 0x7fc5, 0x8494, 0x84cd, 0x8996, 0x8a66, 0x8a69, 0x8ae1, 0x8c55, 0x8c7a, 0x57f4, 0x5bd4, 0x5f0f, 0x606f, 0x62ed, 0x690d, 0x6b96, 0x6e5c, 0x7184, 0x7bd2, 0x8755, 0x8b58, 0x8efe, 0x98df, 0x98fe, 0x4f38, 0x4f81, 0x4fe1, 0x547b, 0x5a20, 0x5bb8, 0x613c, 0x65b0, 0x6668, 0x71fc, 0x7533, 0x795e, 0x7d33, 0x814e, 0x81e3, 0x8398, 0x85aa, 0x85ce, 0x8703, 0x8a0a, 0x8eab, 0x8f9b, 0xf971, 0x8fc5, 0x5931, 0x5ba4, 0x5be6, 0x6089, 0x5be9, 0x5c0b, 0x5fc3, 0x6c81, /* 0x64 */ 0xf972, 0x6df1, 0x700b, 0x751a, 0x82af, 0x8af6, 0x4ec0, 0x5341, 0xf973, 0x96d9, 0x6c0f, 0x4e9e, 0x4fc4, 0x5152, 0x555e, 0x5a25, 0x5ce8, 0x6211, 0x7259, 0x82bd, 0x83aa, 0x86fe, 0x8859, 0x8a1d, 0x963f, 0x96c5, 0x9913, 0x9d09, 0x9d5d, 0x580a, 0x5cb3, 0x5dbd, 0x5e44, 0x60e1, 0x6115, 0x63e1, 0x6a02, 0x6e25, 0x9102, 0x9354, 0x984e, 0x9c10, 0x9f77, 0x5b89, 0x5cb8, 0x6309, 0x664f, 0x6848, 0x773c, 0x96c1, 0x978d, 0x9854, 0x9b9f, 0x65a1, 0x8b01, 0x8ecb, 0x95bc, 0x5535, 0x5ca9, 0x5dd6, 0x5eb5, 0x6697, 0x764c, 0x83f4, 0x95c7, 0x58d3, 0x62bc, 0x72ce, 0x9d28, 0x4ef0, 0x592e, 0x600f, 0x663b, 0x6b83, 0x79e7, 0x9d26, 0x5393, 0x54c0, 0x57c3, 0x5d16, 0x611b, 0x66d6, 0x6daf, 0x788d, 0x827e, 0x9698, 0x9744, 0x5384, 0x627c, 0x6396, 0x6db2, 0x7e0a, 0x814b, 0x984d, /* 0x65 */ 0x6afb, 0x7f4c, 0x9daf, 0x9e1a, 0x4e5f, 0x503b, 0x51b6, 0x591c, 0x60f9, 0x63f6, 0x6930, 0x723a, 0x8036, 0xf974, 0x91ce, 0x5f31, 0xf975, 0xf976, 0x7d04, 0x82e5, 0x846f, 0x84bb, 0x85e5, 0x8e8d, 0xf977, 0x4f6f, 0xf978, 0xf979, 0x58e4, 0x5b43, 0x6059, 0x63da, 0x6518, 0x656d, 0x6698, 0xf97a, 0x694a, 0x6a23, 0x6d0b, 0x7001, 0x716c, 0x75d2, 0x760d, 0x79b3, 0x7a70, 0xf97b, 0x7f8a, 0xf97c, 0x8944, 0xf97d, 0x8b93, 0x91c0, 0x967d, 0xf97e, 0x990a, 0x5704, 0x5fa1, 0x65bc, 0x6f01, 0x7600, 0x79a6, 0x8a9e, 0x99ad, 0x9b5a, 0x9f6c, 0x5104, 0x61b6, 0x6291, 0x6a8d, 0x81c6, 0x5043, 0x5830, 0x5f66, 0x7109, 0x8a00, 0x8afa, 0x5b7c, 0x8616, 0x4ffa, 0x513c, 0x56b4, 0x5944, 0x63a9, 0x6df9, 0x5daa, 0x696d, 0x5186, 0x4e88, 0x4f59, 0xf97f, 0xf980, 0xf981, 0x5982, 0xf982, /* 0x66 */ 0xf983, 0x6b5f, 0x6c5d, 0xf984, 0x74b5, 0x7916, 0xf985, 0x8207, 0x8245, 0x8339, 0x8f3f, 0x8f5d, 0xf986, 0x9918, 0xf987, 0xf988, 0xf989, 0x4ea6, 0xf98a, 0x57df, 0x5f79, 0x6613, 0xf98b, 0xf98c, 0x75ab, 0x7e79, 0x8b6f, 0xf98d, 0x9006, 0x9a5b, 0x56a5, 0x5827, 0x59f8, 0x5a1f, 0x5bb4, 0xf98e, 0x5ef6, 0xf98f, 0xf990, 0x6350, 0x633b, 0xf991, 0x693d, 0x6c87, 0x6cbf, 0x6d8e, 0x6d93, 0x6df5, 0x6f14, 0xf992, 0x70df, 0x7136, 0x7159, 0xf993, 0x71c3, 0x71d5, 0xf994, 0x784f, 0x786f, 0xf995, 0x7b75, 0x7de3, 0xf996, 0x7e2f, 0xf997, 0x884d, 0x8edf, 0xf998, 0xf999, 0xf99a, 0x925b, 0xf99b, 0x9cf6, 0xf99c, 0xf99d, 0xf99e, 0x6085, 0x6d85, 0xf99f, 0x71b1, 0xf9a0, 0xf9a1, 0x95b1, 0x53ad, 0xf9a2, 0xf9a3, 0xf9a4, 0x67d3, 0xf9a5, 0x708e, 0x7130, 0x7430, 0x8276, 0x82d2, /* 0x67 */ 0xf9a6, 0x95bb, 0x9ae5, 0x9e7d, 0x66c4, 0xf9a7, 0x71c1, 0x8449, 0xf9a8, 0xf9a9, 0x584b, 0xf9aa, 0xf9ab, 0x5db8, 0x5f71, 0xf9ac, 0x6620, 0x668e, 0x6979, 0x69ae, 0x6c38, 0x6cf3, 0x6e36, 0x6f41, 0x6fda, 0x701b, 0x702f, 0x7150, 0x71df, 0x7370, 0xf9ad, 0x745b, 0xf9ae, 0x74d4, 0x76c8, 0x7a4e, 0x7e93, 0xf9af, 0xf9b0, 0x82f1, 0x8a60, 0x8fce, 0xf9b1, 0x9348, 0xf9b2, 0x9719, 0xf9b3, 0xf9b4, 0x4e42, 0x502a, 0xf9b5, 0x5208, 0x53e1, 0x66f3, 0x6c6d, 0x6fca, 0x730a, 0x777f, 0x7a62, 0x82ae, 0x85dd, 0x8602, 0xf9b6, 0x88d4, 0x8a63, 0x8b7d, 0x8c6b, 0xf9b7, 0x92b3, 0xf9b8, 0x9713, 0x9810, 0x4e94, 0x4f0d, 0x4fc9, 0x50b2, 0x5348, 0x543e, 0x5433, 0x55da, 0x5862, 0x58ba, 0x5967, 0x5a1b, 0x5be4, 0x609f, 0xf9b9, 0x61ca, 0x6556, 0x65ff, 0x6664, 0x68a7, 0x6c5a, 0x6fb3, /* 0x68 */ 0x70cf, 0x71ac, 0x7352, 0x7b7d, 0x8708, 0x8aa4, 0x9c32, 0x9f07, 0x5c4b, 0x6c83, 0x7344, 0x7389, 0x923a, 0x6eab, 0x7465, 0x761f, 0x7a69, 0x7e15, 0x860a, 0x5140, 0x58c5, 0x64c1, 0x74ee, 0x7515, 0x7670, 0x7fc1, 0x9095, 0x96cd, 0x9954, 0x6e26, 0x74e6, 0x7aa9, 0x7aaa, 0x81e5, 0x86d9, 0x8778, 0x8a1b, 0x5a49, 0x5b8c, 0x5b9b, 0x68a1, 0x6900, 0x6d63, 0x73a9, 0x7413, 0x742c, 0x7897, 0x7de9, 0x7feb, 0x8118, 0x8155, 0x839e, 0x8c4c, 0x962e, 0x9811, 0x66f0, 0x5f80, 0x65fa, 0x6789, 0x6c6a, 0x738b, 0x502d, 0x5a03, 0x6b6a, 0x77ee, 0x5916, 0x5d6c, 0x5dcd, 0x7325, 0x754f, 0xf9ba, 0xf9bb, 0x50e5, 0x51f9, 0x582f, 0x592d, 0x5996, 0x59da, 0x5be5, 0xf9bc, 0xf9bd, 0x5da2, 0x62d7, 0x6416, 0x6493, 0x64fe, 0xf9be, 0x66dc, 0xf9bf, 0x6a48, 0xf9c0, 0x71ff, 0x7464, 0xf9c1, /* 0x69 */ 0x7a88, 0x7aaf, 0x7e47, 0x7e5e, 0x8000, 0x8170, 0xf9c2, 0x87ef, 0x8981, 0x8b20, 0x9059, 0xf9c3, 0x9080, 0x9952, 0x617e, 0x6b32, 0x6d74, 0x7e1f, 0x8925, 0x8fb1, 0x4fd1, 0x50ad, 0x5197, 0x52c7, 0x57c7, 0x5889, 0x5bb9, 0x5eb8, 0x6142, 0x6995, 0x6d8c, 0x6e67, 0x6eb6, 0x7194, 0x7462, 0x7528, 0x752c, 0x8073, 0x8338, 0x84c9, 0x8e0a, 0x9394, 0x93de, 0xf9c4, 0x4e8e, 0x4f51, 0x5076, 0x512a, 0x53c8, 0x53cb, 0x53f3, 0x5b87, 0x5bd3, 0x5c24, 0x611a, 0x6182, 0x65f4, 0x725b, 0x7397, 0x7440, 0x76c2, 0x7950, 0x7991, 0x79b9, 0x7d06, 0x7fbd, 0x828b, 0x85d5, 0x865e, 0x8fc2, 0x9047, 0x90f5, 0x91ea, 0x9685, 0x96e8, 0x96e9, 0x52d6, 0x5f67, 0x65ed, 0x6631, 0x682f, 0x715c, 0x7a36, 0x90c1, 0x980a, 0x4e91, 0xf9c5, 0x6a52, 0x6b9e, 0x6f90, 0x7189, 0x8018, 0x82b8, 0x8553, /* 0x6a */ 0x904b, 0x9695, 0x96f2, 0x97fb, 0x851a, 0x9b31, 0x4e90, 0x718a, 0x96c4, 0x5143, 0x539f, 0x54e1, 0x5713, 0x5712, 0x57a3, 0x5a9b, 0x5ac4, 0x5bc3, 0x6028, 0x613f, 0x63f4, 0x6c85, 0x6d39, 0x6e72, 0x6e90, 0x7230, 0x733f, 0x7457, 0x82d1, 0x8881, 0x8f45, 0x9060, 0xf9c6, 0x9662, 0x9858, 0x9d1b, 0x6708, 0x8d8a, 0x925e, 0x4f4d, 0x5049, 0x50de, 0x5371, 0x570d, 0x59d4, 0x5a01, 0x5c09, 0x6170, 0x6690, 0x6e2d, 0x7232, 0x744b, 0x7def, 0x80c3, 0x840e, 0x8466, 0x853f, 0x875f, 0x885b, 0x8918, 0x8b02, 0x9055, 0x97cb, 0x9b4f, 0x4e73, 0x4f91, 0x5112, 0x516a, 0xf9c7, 0x552f, 0x55a9, 0x5b7a, 0x5ba5, 0x5e7c, 0x5e7d, 0x5ebe, 0x60a0, 0x60df, 0x6108, 0x6109, 0x63c4, 0x6538, 0x6709, 0xf9c8, 0x67d4, 0x67da, 0xf9c9, 0x6961, 0x6962, 0x6cb9, 0x6d27, 0xf9ca, 0x6e38, 0xf9cb, /* 0x6b */ 0x6fe1, 0x7336, 0x7337, 0xf9cc, 0x745c, 0x7531, 0xf9cd, 0x7652, 0xf9ce, 0xf9cf, 0x7dad, 0x81fe, 0x8438, 0x88d5, 0x8a98, 0x8adb, 0x8aed, 0x8e30, 0x8e42, 0x904a, 0x903e, 0x907a, 0x9149, 0x91c9, 0x936e, 0xf9d0, 0xf9d1, 0x5809, 0xf9d2, 0x6bd3, 0x8089, 0x80b2, 0xf9d3, 0xf9d4, 0x5141, 0x596b, 0x5c39, 0xf9d5, 0xf9d6, 0x6f64, 0x73a7, 0x80e4, 0x8d07, 0xf9d7, 0x9217, 0x958f, 0xf9d8, 0xf9d9, 0xf9da, 0xf9db, 0x807f, 0x620e, 0x701c, 0x7d68, 0x878d, 0xf9dc, 0x57a0, 0x6069, 0x6147, 0x6bb7, 0x8abe, 0x9280, 0x96b1, 0x4e59, 0x541f, 0x6deb, 0x852d, 0x9670, 0x97f3, 0x98ee, 0x63d6, 0x6ce3, 0x9091, 0x51dd, 0x61c9, 0x81ba, 0x9df9, 0x4f9d, 0x501a, 0x5100, 0x5b9c, 0x610f, 0x61ff, 0x64ec, 0x6905, 0x6bc5, 0x7591, 0x77e3, 0x7fa9, 0x8264, 0x858f, 0x87fb, 0x8863, 0x8abc, /* 0x6c */ 0x8b70, 0x91ab, 0x4e8c, 0x4ee5, 0x4f0a, 0xf9dd, 0xf9de, 0x5937, 0x59e8, 0xf9df, 0x5df2, 0x5f1b, 0x5f5b, 0x6021, 0xf9e0, 0xf9e1, 0xf9e2, 0xf9e3, 0x723e, 0x73e5, 0xf9e4, 0x7570, 0x75cd, 0xf9e5, 0x79fb, 0xf9e6, 0x800c, 0x8033, 0x8084, 0x82e1, 0x8351, 0xf9e7, 0xf9e8, 0x8cbd, 0x8cb3, 0x9087, 0xf9e9, 0xf9ea, 0x98f4, 0x990c, 0xf9eb, 0xf9ec, 0x7037, 0x76ca, 0x7fca, 0x7fcc, 0x7ffc, 0x8b1a, 0x4eba, 0x4ec1, 0x5203, 0x5370, 0xf9ed, 0x54bd, 0x56e0, 0x59fb, 0x5bc5, 0x5f15, 0x5fcd, 0x6e6e, 0xf9ee, 0xf9ef, 0x7d6a, 0x8335, 0xf9f0, 0x8693, 0x8a8d, 0xf9f1, 0x976d, 0x9777, 0xf9f2, 0xf9f3, 0x4e00, 0x4f5a, 0x4f7e, 0x58f9, 0x65e5, 0x6ea2, 0x9038, 0x93b0, 0x99b9, 0x4efb, 0x58ec, 0x598a, 0x59d9, 0x6041, 0xf9f4, 0xf9f5, 0x7a14, 0xf9f6, 0x834f, 0x8cc3, 0x5165, 0x5344, /* 0x6d */ 0xf9f7, 0xf9f8, 0xf9f9, 0x4ecd, 0x5269, 0x5b55, 0x82bf, 0x4ed4, 0x523a, 0x54a8, 0x59c9, 0x59ff, 0x5b50, 0x5b57, 0x5b5c, 0x6063, 0x6148, 0x6ecb, 0x7099, 0x716e, 0x7386, 0x74f7, 0x75b5, 0x78c1, 0x7d2b, 0x8005, 0x81ea, 0x8328, 0x8517, 0x85c9, 0x8aee, 0x8cc7, 0x96cc, 0x4f5c, 0x52fa, 0x56bc, 0x65ab, 0x6628, 0x707c, 0x70b8, 0x7235, 0x7dbd, 0x828d, 0x914c, 0x96c0, 0x9d72, 0x5b71, 0x68e7, 0x6b98, 0x6f7a, 0x76de, 0x5c91, 0x66ab, 0x6f5b, 0x7bb4, 0x7c2a, 0x8836, 0x96dc, 0x4e08, 0x4ed7, 0x5320, 0x5834, 0x58bb, 0x58ef, 0x596c, 0x5c07, 0x5e33, 0x5e84, 0x5f35, 0x638c, 0x66b2, 0x6756, 0x6a1f, 0x6aa3, 0x6b0c, 0x6f3f, 0x7246, 0xf9fa, 0x7350, 0x748b, 0x7ae0, 0x7ca7, 0x8178, 0x81df, 0x81e7, 0x838a, 0x846c, 0x8523, 0x8594, 0x85cf, 0x88dd, 0x8d13, 0x91ac, 0x9577, /* 0x6e */ 0x969c, 0x518d, 0x54c9, 0x5728, 0x5bb0, 0x624d, 0x6750, 0x683d, 0x6893, 0x6e3d, 0x6ed3, 0x707d, 0x7e21, 0x88c1, 0x8ca1, 0x8f09, 0x9f4b, 0x9f4e, 0x722d, 0x7b8f, 0x8acd, 0x931a, 0x4f47, 0x4f4e, 0x5132, 0x5480, 0x59d0, 0x5e95, 0x62b5, 0x6775, 0x696e, 0x6a17, 0x6cae, 0x6e1a, 0x72d9, 0x732a, 0x75bd, 0x7bb8, 0x7d35, 0x82e7, 0x83f9, 0x8457, 0x85f7, 0x8a5b, 0x8caf, 0x8e87, 0x9019, 0x90b8, 0x96ce, 0x9f5f, 0x52e3, 0x540a, 0x5ae1, 0x5bc2, 0x6458, 0x6575, 0x6ef4, 0x72c4, 0xf9fb, 0x7684, 0x7a4d, 0x7b1b, 0x7c4d, 0x7e3e, 0x7fdf, 0x837b, 0x8b2b, 0x8cca, 0x8d64, 0x8de1, 0x8e5f, 0x8fea, 0x8ff9, 0x9069, 0x93d1, 0x4f43, 0x4f7a, 0x50b3, 0x5168, 0x5178, 0x524d, 0x526a, 0x5861, 0x587c, 0x5960, 0x5c08, 0x5c55, 0x5edb, 0x609b, 0x6230, 0x6813, 0x6bbf, 0x6c08, 0x6fb1, /* 0x6f */ 0x714e, 0x7420, 0x7530, 0x7538, 0x7551, 0x7672, 0x7b4c, 0x7b8b, 0x7bad, 0x7bc6, 0x7e8f, 0x8a6e, 0x8f3e, 0x8f49, 0x923f, 0x9293, 0x9322, 0x942b, 0x96fb, 0x985a, 0x986b, 0x991e, 0x5207, 0x622a, 0x6298, 0x6d59, 0x7664, 0x7aca, 0x7bc0, 0x7d76, 0x5360, 0x5cbe, 0x5e97, 0x6f38, 0x70b9, 0x7c98, 0x9711, 0x9b8e, 0x9ede, 0x63a5, 0x647a, 0x8776, 0x4e01, 0x4e95, 0x4ead, 0x505c, 0x5075, 0x5448, 0x59c3, 0x5b9a, 0x5e40, 0x5ead, 0x5ef7, 0x5f81, 0x60c5, 0x633a, 0x653f, 0x6574, 0x65cc, 0x6676, 0x6678, 0x67fe, 0x6968, 0x6a89, 0x6b63, 0x6c40, 0x6dc0, 0x6de8, 0x6e1f, 0x6e5e, 0x701e, 0x70a1, 0x738e, 0x73fd, 0x753a, 0x775b, 0x7887, 0x798e, 0x7a0b, 0x7a7d, 0x7cbe, 0x7d8e, 0x8247, 0x8a02, 0x8aea, 0x8c9e, 0x912d, 0x914a, 0x91d8, 0x9266, 0x92cc, 0x9320, 0x9706, 0x9756, /* 0x70 */ 0x975c, 0x9802, 0x9f0e, 0x5236, 0x5291, 0x557c, 0x5824, 0x5e1d, 0x5f1f, 0x608c, 0x63d0, 0x68af, 0x6fdf, 0x796d, 0x7b2c, 0x81cd, 0x85ba, 0x88fd, 0x8af8, 0x8e44, 0x918d, 0x9664, 0x969b, 0x973d, 0x984c, 0x9f4a, 0x4fce, 0x5146, 0x51cb, 0x52a9, 0x5632, 0x5f14, 0x5f6b, 0x63aa, 0x64cd, 0x65e9, 0x6641, 0x66fa, 0x66f9, 0x671d, 0x689d, 0x68d7, 0x69fd, 0x6f15, 0x6f6e, 0x7167, 0x71e5, 0x722a, 0x74aa, 0x773a, 0x7956, 0x795a, 0x79df, 0x7a20, 0x7a95, 0x7c97, 0x7cdf, 0x7d44, 0x7e70, 0x8087, 0x85fb, 0x86a4, 0x8a54, 0x8abf, 0x8d99, 0x8e81, 0x9020, 0x906d, 0x91e3, 0x963b, 0x96d5, 0x9ce5, 0x65cf, 0x7c07, 0x8db3, 0x93c3, 0x5b58, 0x5c0a, 0x5352, 0x62d9, 0x731d, 0x5027, 0x5b97, 0x5f9e, 0x60b0, 0x616b, 0x68d5, 0x6dd9, 0x742e, 0x7a2e, 0x7d42, 0x7d9c, 0x7e31, 0x816b, /* 0x71 */ 0x8e2a, 0x8e35, 0x937e, 0x9418, 0x4f50, 0x5750, 0x5de6, 0x5ea7, 0x632b, 0x7f6a, 0x4e3b, 0x4f4f, 0x4f8f, 0x505a, 0x59dd, 0x80c4, 0x546a, 0x5468, 0x55fe, 0x594f, 0x5b99, 0x5dde, 0x5eda, 0x665d, 0x6731, 0x67f1, 0x682a, 0x6ce8, 0x6d32, 0x6e4a, 0x6f8d, 0x70b7, 0x73e0, 0x7587, 0x7c4c, 0x7d02, 0x7d2c, 0x7da2, 0x821f, 0x86db, 0x8a3b, 0x8a85, 0x8d70, 0x8e8a, 0x8f33, 0x9031, 0x914e, 0x9152, 0x9444, 0x99d0, 0x7af9, 0x7ca5, 0x4fca, 0x5101, 0x51c6, 0x57c8, 0x5bef, 0x5cfb, 0x6659, 0x6a3d, 0x6d5a, 0x6e96, 0x6fec, 0x710c, 0x756f, 0x7ae3, 0x8822, 0x9021, 0x9075, 0x96cb, 0x99ff, 0x8301, 0x4e2d, 0x4ef2, 0x8846, 0x91cd, 0x537d, 0x6adb, 0x696b, 0x6c41, 0x847a, 0x589e, 0x618e, 0x66fe, 0x62ef, 0x70dd, 0x7511, 0x75c7, 0x7e52, 0x84b8, 0x8b49, 0x8d08, 0x4e4b, 0x53ea, /* 0x72 */ 0x54ab, 0x5730, 0x5740, 0x5fd7, 0x6301, 0x6307, 0x646f, 0x652f, 0x65e8, 0x667a, 0x679d, 0x67b3, 0x6b62, 0x6c60, 0x6c9a, 0x6f2c, 0x77e5, 0x7825, 0x7949, 0x7957, 0x7d19, 0x80a2, 0x8102, 0x81f3, 0x829d, 0x82b7, 0x8718, 0x8a8c, 0xf9fc, 0x8d04, 0x8dbe, 0x9072, 0x76f4, 0x7a19, 0x7a37, 0x7e54, 0x8077, 0x5507, 0x55d4, 0x5875, 0x632f, 0x6422, 0x6649, 0x664b, 0x686d, 0x699b, 0x6b84, 0x6d25, 0x6eb1, 0x73cd, 0x7468, 0x74a1, 0x755b, 0x75b9, 0x76e1, 0x771e, 0x778b, 0x79e6, 0x7e09, 0x7e1d, 0x81fb, 0x852f, 0x8897, 0x8a3a, 0x8cd1, 0x8eeb, 0x8fb0, 0x9032, 0x93ad, 0x9663, 0x9673, 0x9707, 0x4f84, 0x53f1, 0x59ea, 0x5ac9, 0x5e19, 0x684e, 0x74c6, 0x75be, 0x79e9, 0x7a92, 0x81a3, 0x86ed, 0x8cea, 0x8dcc, 0x8fed, 0x659f, 0x6715, 0xf9fd, 0x57f7, 0x6f57, 0x7ddd, 0x8f2f, /* 0x73 */ 0x93f6, 0x96c6, 0x5fb5, 0x61f2, 0x6f84, 0x4e14, 0x4f98, 0x501f, 0x53c9, 0x55df, 0x5d6f, 0x5dee, 0x6b21, 0x6b64, 0x78cb, 0x7b9a, 0xf9fe, 0x8e49, 0x8eca, 0x906e, 0x6349, 0x643e, 0x7740, 0x7a84, 0x932f, 0x947f, 0x9f6a, 0x64b0, 0x6faf, 0x71e6, 0x74a8, 0x74da, 0x7ac4, 0x7c12, 0x7e82, 0x7cb2, 0x7e98, 0x8b9a, 0x8d0a, 0x947d, 0x9910, 0x994c, 0x5239, 0x5bdf, 0x64e6, 0x672d, 0x7d2e, 0x50ed, 0x53c3, 0x5879, 0x6158, 0x6159, 0x61fa, 0x65ac, 0x7ad9, 0x8b92, 0x8b96, 0x5009, 0x5021, 0x5275, 0x5531, 0x5a3c, 0x5ee0, 0x5f70, 0x6134, 0x655e, 0x660c, 0x6636, 0x66a2, 0x69cd, 0x6ec4, 0x6f32, 0x7316, 0x7621, 0x7a93, 0x8139, 0x8259, 0x83d6, 0x84bc, 0x50b5, 0x57f0, 0x5bc0, 0x5be8, 0x5f69, 0x63a1, 0x7826, 0x7db5, 0x83dc, 0x8521, 0x91c7, 0x91f5, 0x518a, 0x67f5, 0x7b56, /* 0x74 */ 0x8cac, 0x51c4, 0x59bb, 0x60bd, 0x8655, 0x501c, 0xf9ff, 0x5254, 0x5c3a, 0x617d, 0x621a, 0x62d3, 0x64f2, 0x65a5, 0x6ecc, 0x7620, 0x810a, 0x8e60, 0x965f, 0x96bb, 0x4edf, 0x5343, 0x5598, 0x5929, 0x5ddd, 0x64c5, 0x6cc9, 0x6dfa, 0x7394, 0x7a7f, 0x821b, 0x85a6, 0x8ce4, 0x8e10, 0x9077, 0x91e7, 0x95e1, 0x9621, 0x97c6, 0x51f8, 0x54f2, 0x5586, 0x5fb9, 0x64a4, 0x6f88, 0x7db4, 0x8f1f, 0x8f4d, 0x9435, 0x50c9, 0x5c16, 0x6cbe, 0x6dfb, 0x751b, 0x77bb, 0x7c3d, 0x7c64, 0x8a79, 0x8ac2, 0x581e, 0x59be, 0x5e16, 0x6377, 0x7252, 0x758a, 0x776b, 0x8adc, 0x8cbc, 0x8f12, 0x5ef3, 0x6674, 0x6df8, 0x807d, 0x83c1, 0x8acb, 0x9751, 0x9bd6, 0xfa00, 0x5243, 0x66ff, 0x6d95, 0x6eef, 0x7de0, 0x8ae6, 0x902e, 0x905e, 0x9ad4, 0x521d, 0x527f, 0x54e8, 0x6194, 0x6284, 0x62db, 0x68a2, /* 0x75 */ 0x6912, 0x695a, 0x6a35, 0x7092, 0x7126, 0x785d, 0x7901, 0x790e, 0x79d2, 0x7a0d, 0x8096, 0x8278, 0x82d5, 0x8349, 0x8549, 0x8c82, 0x8d85, 0x9162, 0x918b, 0x91ae, 0x4fc3, 0x56d1, 0x71ed, 0x77d7, 0x8700, 0x89f8, 0x5bf8, 0x5fd6, 0x6751, 0x90a8, 0x53e2, 0x585a, 0x5bf5, 0x60a4, 0x6181, 0x6460, 0x7e3d, 0x8070, 0x8525, 0x9283, 0x64ae, 0x50ac, 0x5d14, 0x6700, 0x589c, 0x62bd, 0x63a8, 0x690e, 0x6978, 0x6a1e, 0x6e6b, 0x76ba, 0x79cb, 0x82bb, 0x8429, 0x8acf, 0x8da8, 0x8ffd, 0x9112, 0x914b, 0x919c, 0x9310, 0x9318, 0x939a, 0x96db, 0x9a36, 0x9c0d, 0x4e11, 0x755c, 0x795d, 0x7afa, 0x7b51, 0x7bc9, 0x7e2e, 0x84c4, 0x8e59, 0x8e74, 0x8ef8, 0x9010, 0x6625, 0x693f, 0x7443, 0x51fa, 0x672e, 0x9edc, 0x5145, 0x5fe0, 0x6c96, 0x87f2, 0x885d, 0x8877, 0x60b4, 0x81b5, 0x8403, /* 0x76 */ 0x8d05, 0x53d6, 0x5439, 0x5634, 0x5a36, 0x5c31, 0x708a, 0x7fe0, 0x805a, 0x8106, 0x81ed, 0x8da3, 0x9189, 0x9a5f, 0x9df2, 0x5074, 0x4ec4, 0x53a0, 0x60fb, 0x6e2c, 0x5c64, 0x4f88, 0x5024, 0x55e4, 0x5cd9, 0x5e5f, 0x6065, 0x6894, 0x6cbb, 0x6dc4, 0x71be, 0x75d4, 0x75f4, 0x7661, 0x7a1a, 0x7a49, 0x7dc7, 0x7dfb, 0x7f6e, 0x81f4, 0x86a9, 0x8f1c, 0x96c9, 0x99b3, 0x9f52, 0x5247, 0x52c5, 0x98ed, 0x89aa, 0x4e03, 0x67d2, 0x6f06, 0x4fb5, 0x5be2, 0x6795, 0x6c88, 0x6d78, 0x741b, 0x7827, 0x91dd, 0x937c, 0x87c4, 0x79e4, 0x7a31, 0x5feb, 0x4ed6, 0x54a4, 0x553e, 0x58ae, 0x59a5, 0x60f0, 0x6253, 0x62d6, 0x6736, 0x6955, 0x8235, 0x9640, 0x99b1, 0x99dd, 0x502c, 0x5353, 0x5544, 0x577c, 0xfa01, 0x6258, 0xfa02, 0x64e2, 0x666b, 0x67dd, 0x6fc1, 0x6fef, 0x7422, 0x7438, 0x8a17, /* 0x77 */ 0x9438, 0x5451, 0x5606, 0x5766, 0x5f48, 0x619a, 0x6b4e, 0x7058, 0x70ad, 0x7dbb, 0x8a95, 0x596a, 0x812b, 0x63a2, 0x7708, 0x803d, 0x8caa, 0x5854, 0x642d, 0x69bb, 0x5b95, 0x5e11, 0x6e6f, 0xfa03, 0x8569, 0x514c, 0x53f0, 0x592a, 0x6020, 0x614b, 0x6b86, 0x6c70, 0x6cf0, 0x7b1e, 0x80ce, 0x82d4, 0x8dc6, 0x90b0, 0x98b1, 0xfa04, 0x64c7, 0x6fa4, 0x6491, 0x6504, 0x514e, 0x5410, 0x571f, 0x8a0e, 0x615f, 0x6876, 0xfa05, 0x75db, 0x7b52, 0x7d71, 0x901a, 0x5806, 0x69cc, 0x817f, 0x892a, 0x9000, 0x9839, 0x5078, 0x5957, 0x59ac, 0x6295, 0x900f, 0x9b2a, 0x615d, 0x7279, 0x95d6, 0x5761, 0x5a46, 0x5df4, 0x628a, 0x64ad, 0x64fa, 0x6777, 0x6ce2, 0x6d3e, 0x722c, 0x7436, 0x7834, 0x7f77, 0x82ad, 0x8ddb, 0x9817, 0x5224, 0x5742, 0x677f, 0x7248, 0x74e3, 0x8ca9, 0x8fa6, 0x9211, /* 0x78 */ 0x962a, 0x516b, 0x53ed, 0x634c, 0x4f69, 0x5504, 0x6096, 0x6557, 0x6c9b, 0x6d7f, 0x724c, 0x72fd, 0x7a17, 0x8987, 0x8c9d, 0x5f6d, 0x6f8e, 0x70f9, 0x81a8, 0x610e, 0x4fbf, 0x504f, 0x6241, 0x7247, 0x7bc7, 0x7de8, 0x7fe9, 0x904d, 0x97ad, 0x9a19, 0x8cb6, 0x576a, 0x5e73, 0x67b0, 0x840d, 0x8a55, 0x5420, 0x5b16, 0x5e63, 0x5ee2, 0x5f0a, 0x6583, 0x80ba, 0x853d, 0x9589, 0x965b, 0x4f48, 0x5305, 0x530d, 0x530f, 0x5486, 0x54fa, 0x5703, 0x5e03, 0x6016, 0x629b, 0x62b1, 0x6355, 0xfa06, 0x6ce1, 0x6d66, 0x75b1, 0x7832, 0x80de, 0x812f, 0x82de, 0x8461, 0x84b2, 0x888d, 0x8912, 0x900b, 0x92ea, 0x98fd, 0x9b91, 0x5e45, 0x66b4, 0x66dd, 0x7011, 0x7206, 0xfa07, 0x4ff5, 0x527d, 0x5f6a, 0x6153, 0x6753, 0x6a19, 0x6f02, 0x74e2, 0x7968, 0x8868, 0x8c79, 0x98c7, 0x98c4, 0x9a43, /* 0x79 */ 0x54c1, 0x7a1f, 0x6953, 0x8af7, 0x8c4a, 0x98a8, 0x99ae, 0x5f7c, 0x62ab, 0x75b2, 0x76ae, 0x88ab, 0x907f, 0x9642, 0x5339, 0x5f3c, 0x5fc5, 0x6ccc, 0x73cc, 0x7562, 0x758b, 0x7b46, 0x82fe, 0x999d, 0x4e4f, 0x903c, 0x4e0b, 0x4f55, 0x53a6, 0x590f, 0x5ec8, 0x6630, 0x6cb3, 0x7455, 0x8377, 0x8766, 0x8cc0, 0x9050, 0x971e, 0x9c15, 0x58d1, 0x5b78, 0x8650, 0x8b14, 0x9db4, 0x5bd2, 0x6068, 0x608d, 0x65f1, 0x6c57, 0x6f22, 0x6fa3, 0x701a, 0x7f55, 0x7ff0, 0x9591, 0x9592, 0x9650, 0x97d3, 0x5272, 0x8f44, 0x51fd, 0x542b, 0x54b8, 0x5563, 0x558a, 0x6abb, 0x6db5, 0x7dd8, 0x8266, 0x929c, 0x9677, 0x9e79, 0x5408, 0x54c8, 0x76d2, 0x86e4, 0x95a4, 0x95d4, 0x965c, 0x4ea2, 0x4f09, 0x59ee, 0x5ae6, 0x5df7, 0x6052, 0x6297, 0x676d, 0x6841, 0x6c86, 0x6e2f, 0x7f38, 0x809b, 0x822a, /* 0x7a */ 0xfa08, 0xfa09, 0x9805, 0x4ea5, 0x5055, 0x54b3, 0x5793, 0x595a, 0x5b69, 0x5bb3, 0x61c8, 0x6977, 0x6d77, 0x7023, 0x87f9, 0x89e3, 0x8a72, 0x8ae7, 0x9082, 0x99ed, 0x9ab8, 0x52be, 0x6838, 0x5016, 0x5e78, 0x674f, 0x8347, 0x884c, 0x4eab, 0x5411, 0x56ae, 0x73e6, 0x9115, 0x97ff, 0x9909, 0x9957, 0x9999, 0x5653, 0x589f, 0x865b, 0x8a31, 0x61b2, 0x6af6, 0x737b, 0x8ed2, 0x6b47, 0x96aa, 0x9a57, 0x5955, 0x7200, 0x8d6b, 0x9769, 0x4fd4, 0x5cf4, 0x5f26, 0x61f8, 0x665b, 0x6ceb, 0x70ab, 0x7384, 0x73b9, 0x73fe, 0x7729, 0x774d, 0x7d43, 0x7d62, 0x7e23, 0x8237, 0x8852, 0xfa0a, 0x8ce2, 0x9249, 0x986f, 0x5b51, 0x7a74, 0x8840, 0x9801, 0x5acc, 0x4fe0, 0x5354, 0x593e, 0x5cfd, 0x633e, 0x6d79, 0x72f9, 0x8105, 0x8107, 0x83a2, 0x92cf, 0x9830, 0x4ea8, 0x5144, 0x5211, 0x578b, /* 0x7b */ 0x5f62, 0x6cc2, 0x6ece, 0x7005, 0x7050, 0x70af, 0x7192, 0x73e9, 0x7469, 0x834a, 0x87a2, 0x8861, 0x9008, 0x90a2, 0x93a3, 0x99a8, 0x516e, 0x5f57, 0x60e0, 0x6167, 0x66b3, 0x8559, 0x8e4a, 0x91af, 0x978b, 0x4e4e, 0x4e92, 0x547c, 0x58d5, 0x58fa, 0x597d, 0x5cb5, 0x5f27, 0x6236, 0x6248, 0x660a, 0x6667, 0x6beb, 0x6d69, 0x6dcf, 0x6e56, 0x6ef8, 0x6f94, 0x6fe0, 0x6fe9, 0x705d, 0x72d0, 0x7425, 0x745a, 0x74e0, 0x7693, 0x795c, 0x7cca, 0x7e1e, 0x80e1, 0x82a6, 0x846b, 0x84bf, 0x864e, 0x865f, 0x8774, 0x8b77, 0x8c6a, 0x93ac, 0x9800, 0x9865, 0x60d1, 0x6216, 0x9177, 0x5a5a, 0x660f, 0x6df7, 0x6e3e, 0x743f, 0x9b42, 0x5ffd, 0x60da, 0x7b0f, 0x54c4, 0x5f18, 0x6c5e, 0x6cd3, 0x6d2a, 0x70d8, 0x7d05, 0x8679, 0x8a0c, 0x9d3b, 0x5316, 0x548c, 0x5b05, 0x6a3a, 0x706b, 0x7575, /* 0x7c */ 0x798d, 0x79be, 0x82b1, 0x83ef, 0x8a71, 0x8b41, 0x8ca8, 0x9774, 0xfa0b, 0x64f4, 0x652b, 0x78ba, 0x78bb, 0x7a6b, 0x4e38, 0x559a, 0x5950, 0x5ba6, 0x5e7b, 0x60a3, 0x63db, 0x6b61, 0x6665, 0x6853, 0x6e19, 0x7165, 0x74b0, 0x7d08, 0x9084, 0x9a69, 0x9c25, 0x6d3b, 0x6ed1, 0x733e, 0x8c41, 0x95ca, 0x51f0, 0x5e4c, 0x5fa8, 0x604d, 0x60f6, 0x6130, 0x614c, 0x6643, 0x6644, 0x69a5, 0x6cc1, 0x6e5f, 0x6ec9, 0x6f62, 0x714c, 0x749c, 0x7687, 0x7bc1, 0x7c27, 0x8352, 0x8757, 0x9051, 0x968d, 0x9ec3, 0x532f, 0x56de, 0x5efb, 0x5f8a, 0x6062, 0x6094, 0x61f7, 0x6666, 0x6703, 0x6a9c, 0x6dee, 0x6fae, 0x7070, 0x736a, 0x7e6a, 0x81be, 0x8334, 0x86d4, 0x8aa8, 0x8cc4, 0x5283, 0x7372, 0x5b96, 0x6a6b, 0x9404, 0x54ee, 0x5686, 0x5b5d, 0x6548, 0x6585, 0x66c9, 0x689f, 0x6d8d, 0x6dc6, /* 0x7d */ 0x723b, 0x80b4, 0x9175, 0x9a4d, 0x4faf, 0x5019, 0x539a, 0x540e, 0x543c, 0x5589, 0x55c5, 0x5e3f, 0x5f8c, 0x673d, 0x7166, 0x73dd, 0x9005, 0x52db, 0x52f3, 0x5864, 0x58ce, 0x7104, 0x718f, 0x71fb, 0x85b0, 0x8a13, 0x6688, 0x85a8, 0x55a7, 0x6684, 0x714a, 0x8431, 0x5349, 0x5599, 0x6bc1, 0x5f59, 0x5fbd, 0x63ee, 0x6689, 0x7147, 0x8af1, 0x8f1d, 0x9ebe, 0x4f11, 0x643a, 0x70cb, 0x7566, 0x8667, 0x6064, 0x8b4e, 0x9df8, 0x5147, 0x51f6, 0x5308, 0x6d36, 0x80f8, 0x9ed1, 0x6615, 0x6b23, 0x7098, 0x75d5, 0x5403, 0x5c79, 0x7d07, 0x8a16, 0x6b20, 0x6b3d, 0x6b46, 0x5438, 0x6070, 0x6d3d, 0x7fd5, 0x8208, 0x50d6, 0x51de, 0x559c, 0x566b, 0x56cd, 0x59ec, 0x5b09, 0x5e0c, 0x6199, 0x6198, 0x6231, 0x665e, 0x66e6, 0x7199, 0x71b9, 0x71ba, 0x72a7, 0x79a7, 0x7a00, 0x7fb2, 0x8a70, }; static int ksc5601_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c1 = (s[0] & 0x7F); if ((c1 >= 0x21 && c1 <= 0x2c) || (c1 >= 0x30 && c1 <= 0x48) || (c1 >= 0x4a && c1 <= 0x7d)) { if (n >= 2) { unsigned char c2 = (s[1] & 0x7F); if (c2 >= 0x21 && c2 < 0x7f) { unsigned int i = 94 * (c1 - 0x21) + (c2 - 0x21); unsigned short wc = 0xfffd; if (i < 1410) { if (i < 1115) wc = ksc5601_2uni_page21[i]; } else if (i < 3854) { if (i < 3760) wc = ksc5601_2uni_page30[i-1410]; } else { if (i < 8742) wc = ksc5601_2uni_page4a[i-3854]; } if (wc != 0xfffd) { *pwc = (ucs4_t) wc; return 2; } } return RET_ILSEQ; } return RET_TOOFEW(0); } return RET_ILSEQ; } static const unsigned short ksc5601_2charset[8224] = { 0x222e, 0x2234, 0x2157, 0x2127, 0x2823, 0x2129, 0x2146, 0x213e, 0x2977, 0x2978, 0x2225, 0x2252, 0x2124, 0x222c, 0x2976, 0x282c, 0x2879, 0x2876, 0x287a, 0x222f, 0x2821, 0x2822, 0x213f, 0x282a, 0x282d, 0x292c, 0x2921, 0x2923, 0x2140, 0x292a, 0x292d, 0x2922, 0x2824, 0x2924, 0x2925, 0x2826, 0x2926, 0x2927, 0x2828, 0x2928, 0x2829, 0x2929, 0x2930, 0x282f, 0x292f, 0x282b, 0x292b, 0x282e, 0x292e, 0x2227, 0x2230, 0x2228, 0x222b, 0x222a, 0x222d, 0x2229, 0x2541, 0x2542, 0x2543, 0x2544, 0x2545, 0x2546, 0x2547, 0x2548, 0x2549, 0x254a, 0x254b, 0x254c, 0x254d, 0x254e, 0x254f, 0x2550, 0x2551, 0x2552, 0x2553, 0x2554, 0x2555, 0x2556, 0x2557, 0x2558, 0x2561, 0x2562, 0x2563, 0x2564, 0x2565, 0x2566, 0x2567, 0x2568, 0x2569, 0x256a, 0x256b, 0x256c, 0x256d, 0x256e, 0x256f, 0x2570, 0x2571, 0x2572, 0x2573, 0x2574, 0x2575, 0x2576, 0x2577, 0x2578, 0x2c27, 0x2c21, 0x2c22, 0x2c23, 0x2c24, 0x2c25, 0x2c26, 0x2c28, 0x2c29, 0x2c2a, 0x2c2b, 0x2c2c, 0x2c2d, 0x2c2e, 0x2c2f, 0x2c30, 0x2c31, 0x2c32, 0x2c33, 0x2c34, 0x2c35, 0x2c36, 0x2c37, 0x2c38, 0x2c39, 0x2c3a, 0x2c3b, 0x2c3c, 0x2c3d, 0x2c3e, 0x2c3f, 0x2c40, 0x2c41, 0x2c51, 0x2c52, 0x2c53, 0x2c54, 0x2c55, 0x2c56, 0x2c58, 0x2c59, 0x2c5a, 0x2c5b, 0x2c5c, 0x2c5d, 0x2c5e, 0x2c5f, 0x2c60, 0x2c61, 0x2c62, 0x2c63, 0x2c64, 0x2c65, 0x2c66, 0x2c67, 0x2c68, 0x2c69, 0x2c6a, 0x2c6b, 0x2c6c, 0x2c6d, 0x2c6e, 0x2c6f, 0x2c70, 0x2c71, 0x2c57, 0x212a, 0x212e, 0x212f, 0x2130, 0x2131, 0x2253, 0x2254, 0x2125, 0x2126, 0x2236, 0x2147, 0x2148, 0x2158, 0x2979, 0x297a, 0x297b, 0x297c, 0x297d, 0x297e, 0x2149, 0x2235, 0x2724, 0x2260, 0x2265, 0x2262, 0x2759, 0x214a, 0x2877, 0x2878, 0x287b, 0x287c, 0x287d, 0x287e, 0x2530, 0x2531, 0x2532, 0x2533, 0x2534, 0x2535, 0x2536, 0x2537, 0x2538, 0x2539, 0x2521, 0x2522, 0x2523, 0x2524, 0x2525, 0x2526, 0x2527, 0x2528, 0x2529, 0x252a, 0x2167, 0x2168, 0x2166, 0x2169, 0x216a, 0x2255, 0x2258, 0x2256, 0x2259, 0x2257, 0x2221, 0x2222, 0x2223, 0x2153, 0x2224, 0x2154, 0x2174, 0x2175, 0x2233, 0x2232, 0x216e, 0x2170, 0x2144, 0x2150, 0x212b, 0x217c, 0x217d, 0x217b, 0x217a, 0x2172, 0x2173, 0x2231, 0x2145, 0x2171, 0x212d, 0x216f, 0x2156, 0x2141, 0x2155, 0x2142, 0x2143, 0x216c, 0x216d, 0x2178, 0x2179, 0x2176, 0x2177, 0x2241, 0x2151, 0x2152, 0x2867, 0x2868, 0x2869, 0x286a, 0x286b, 0x286c, 0x286d, 0x286e, 0x286f, 0x2870, 0x2871, 0x2872, 0x2873, 0x2874, 0x2875, 0x2967, 0x2968, 0x2969, 0x296a, 0x296b, 0x296c, 0x296d, 0x296e, 0x296f, 0x2970, 0x2971, 0x2972, 0x2973, 0x2974, 0x2975, 0x294d, 0x294e, 0x294f, 0x2950, 0x2951, 0x2952, 0x2953, 0x2954, 0x2955, 0x2956, 0x2957, 0x2958, 0x2959, 0x295a, 0x295b, 0x295c, 0x295d, 0x295e, 0x295f, 0x2960, 0x2961, 0x2962, 0x2963, 0x2964, 0x2965, 0x2966, 0x284d, 0x284e, 0x284f, 0x2850, 0x2851, 0x2852, 0x2853, 0x2854, 0x2855, 0x2856, 0x2857, 0x2858, 0x2859, 0x285a, 0x285b, 0x285c, 0x285d, 0x285e, 0x285f, 0x2860, 0x2861, 0x2862, 0x2863, 0x2864, 0x2865, 0x2866, 0x2621, 0x262c, 0x2622, 0x262d, 0x2623, 0x2648, 0x2647, 0x262e, 0x2624, 0x2642, 0x2641, 0x262f, 0x2626, 0x2646, 0x2645, 0x2631, 0x2625, 0x2644, 0x2643, 0x2630, 0x2627, 0x263c, 0x2649, 0x264a, 0x2637, 0x264b, 0x264c, 0x2632, 0x2629, 0x263e, 0x264d, 0x264e, 0x2639, 0x264f, 0x2650, 0x2634, 0x2628, 0x2651, 0x2652, 0x2638, 0x263d, 0x2653, 0x2654, 0x2633, 0x262a, 0x2655, 0x2656, 0x263a, 0x263f, 0x2657, 0x2658, 0x2635, 0x262b, 0x2659, 0x265a, 0x263b, 0x265b, 0x265c, 0x2640, 0x265d, 0x265e, 0x265f, 0x2660, 0x2661, 0x2662, 0x2663, 0x2664, 0x2636, 0x2246, 0x2161, 0x2160, 0x2243, 0x2247, 0x2248, 0x224b, 0x224a, 0x2249, 0x224c, 0x2163, 0x2162, 0x223a, 0x2239, 0x2165, 0x2164, 0x2238, 0x2237, 0x215f, 0x215e, 0x2242, 0x215b, 0x215d, 0x215c, 0x2244, 0x2245, 0x215a, 0x2159, 0x224f, 0x224e, 0x2250, 0x2251, 0x214f, 0x214e, 0x223c, 0x223d, 0x2240, 0x223b, 0x223e, 0x223f, 0x224d, 0x225b, 0x225c, 0x225d, 0x225a, 0x2121, 0x2122, 0x2123, 0x2128, 0x2134, 0x2135, 0x2136, 0x2137, 0x2138, 0x2139, 0x213a, 0x213b, 0x213c, 0x213d, 0x216b, 0x2132, 0x2133, 0x2a21, 0x2a22, 0x2a23, 0x2a24, 0x2a25, 0x2a26, 0x2a27, 0x2a28, 0x2a29, 0x2a2a, 0x2a2b, 0x2a2c, 0x2a2d, 0x2a2e, 0x2a2f, 0x2a30, 0x2a31, 0x2a32, 0x2a33, 0x2a34, 0x2a35, 0x2a36, 0x2a37, 0x2a38, 0x2a39, 0x2a3a, 0x2a3b, 0x2a3c, 0x2a3d, 0x2a3e, 0x2a3f, 0x2a40, 0x2a41, 0x2a42, 0x2a43, 0x2a44, 0x2a45, 0x2a46, 0x2a47, 0x2a48, 0x2a49, 0x2a4a, 0x2a4b, 0x2a4c, 0x2a4d, 0x2a4e, 0x2a4f, 0x2a50, 0x2a51, 0x2a52, 0x2a53, 0x2a54, 0x2a55, 0x2a56, 0x2a57, 0x2a58, 0x2a59, 0x2a5a, 0x2a5b, 0x2a5c, 0x2a5d, 0x2a5e, 0x2a5f, 0x2a60, 0x2a61, 0x2a62, 0x2a63, 0x2a64, 0x2a65, 0x2a66, 0x2a67, 0x2a68, 0x2a69, 0x2a6a, 0x2a6b, 0x2a6c, 0x2a6d, 0x2a6e, 0x2a6f, 0x2a70, 0x2a71, 0x2a72, 0x2a73, 0x2b21, 0x2b22, 0x2b23, 0x2b24, 0x2b25, 0x2b26, 0x2b27, 0x2b28, 0x2b29, 0x2b2a, 0x2b2b, 0x2b2c, 0x2b2d, 0x2b2e, 0x2b2f, 0x2b30, 0x2b31, 0x2b32, 0x2b33, 0x2b34, 0x2b35, 0x2b36, 0x2b37, 0x2b38, 0x2b39, 0x2b3a, 0x2b3b, 0x2b3c, 0x2b3d, 0x2b3e, 0x2b3f, 0x2b40, 0x2b41, 0x2b42, 0x2b43, 0x2b44, 0x2b45, 0x2b46, 0x2b47, 0x2b48, 0x2b49, 0x2b4a, 0x2b4b, 0x2b4c, 0x2b4d, 0x2b4e, 0x2b4f, 0x2b50, 0x2b51, 0x2b52, 0x2b53, 0x2b54, 0x2b55, 0x2b56, 0x2b57, 0x2b58, 0x2b59, 0x2b5a, 0x2b5b, 0x2b5c, 0x2b5d, 0x2b5e, 0x2b5f, 0x2b60, 0x2b61, 0x2b62, 0x2b63, 0x2b64, 0x2b65, 0x2b66, 0x2b67, 0x2b68, 0x2b69, 0x2b6a, 0x2b6b, 0x2b6c, 0x2b6d, 0x2b6e, 0x2b6f, 0x2b70, 0x2b71, 0x2b72, 0x2b73, 0x2b74, 0x2b75, 0x2b76, 0x2421, 0x2422, 0x2423, 0x2424, 0x2425, 0x2426, 0x2427, 0x2428, 0x2429, 0x242a, 0x242b, 0x242c, 0x242d, 0x242e, 0x242f, 0x2430, 0x2431, 0x2432, 0x2433, 0x2434, 0x2435, 0x2436, 0x2437, 0x2438, 0x2439, 0x243a, 0x243b, 0x243c, 0x243d, 0x243e, 0x243f, 0x2440, 0x2441, 0x2442, 0x2443, 0x2444, 0x2445, 0x2446, 0x2447, 0x2448, 0x2449, 0x244a, 0x244b, 0x244c, 0x244d, 0x244e, 0x244f, 0x2450, 0x2451, 0x2452, 0x2453, 0x2454, 0x2455, 0x2456, 0x2457, 0x2458, 0x2459, 0x245a, 0x245b, 0x245c, 0x245d, 0x245e, 0x245f, 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469, 0x246a, 0x246b, 0x246c, 0x246d, 0x246e, 0x246f, 0x2470, 0x2471, 0x2472, 0x2473, 0x2474, 0x2475, 0x2476, 0x2477, 0x2478, 0x2479, 0x247a, 0x247b, 0x247c, 0x247d, 0x247e, 0x2931, 0x2932, 0x2933, 0x2934, 0x2935, 0x2936, 0x2937, 0x2938, 0x2939, 0x293a, 0x293b, 0x293c, 0x293d, 0x293e, 0x293f, 0x2940, 0x2941, 0x2942, 0x2943, 0x2944, 0x2945, 0x2946, 0x2947, 0x2948, 0x2949, 0x294a, 0x294b, 0x294c, 0x225f, 0x2831, 0x2832, 0x2833, 0x2834, 0x2835, 0x2836, 0x2837, 0x2838, 0x2839, 0x283a, 0x283b, 0x283c, 0x283d, 0x283e, 0x283f, 0x2840, 0x2841, 0x2842, 0x2843, 0x2844, 0x2845, 0x2846, 0x2847, 0x2848, 0x2849, 0x284a, 0x284b, 0x284c, 0x225e, 0x2749, 0x274a, 0x274b, 0x274c, 0x274d, 0x273a, 0x273b, 0x275c, 0x275d, 0x275e, 0x2736, 0x2737, 0x2738, 0x2754, 0x2755, 0x2756, 0x2757, 0x2758, 0x2721, 0x2722, 0x2723, 0x2725, 0x272b, 0x272c, 0x272d, 0x272e, 0x272f, 0x2730, 0x2731, 0x2732, 0x2733, 0x2734, 0x2727, 0x2728, 0x2729, 0x272a, 0x273d, 0x273e, 0x2765, 0x2766, 0x2767, 0x2768, 0x2761, 0x2762, 0x2763, 0x273f, 0x2740, 0x2741, 0x2742, 0x2743, 0x2744, 0x2745, 0x2746, 0x2747, 0x2748, 0x274e, 0x274f, 0x2750, 0x2751, 0x2752, 0x2753, 0x275a, 0x275b, 0x2263, 0x276c, 0x2726, 0x2760, 0x276f, 0x2261, 0x273c, 0x276d, 0x2735, 0x2739, 0x276a, 0x276b, 0x275f, 0x2264, 0x2764, 0x276e, 0x2769, 0x6c69, 0x6f4b, 0x7652, 0x5832, 0x6d5b, 0x5f32, 0x5f3e, 0x793b, 0x5c74, 0x7564, 0x7326, 0x5d60, 0x6126, 0x4e78, 0x5c30, 0x632a, 0x7169, 0x4d7a, 0x7c2f, 0x5321, 0x712b, 0x6751, 0x522c, 0x4e79, 0x717d, 0x5e3f, 0x7b3a, 0x7939, 0x4e52, 0x632b, 0x6b60, 0x4e7a, 0x4b77, 0x6525, 0x4a61, 0x544c, 0x6a61, 0x5c63, 0x5f2d, 0x4b6b, 0x552f, 0x5675, 0x6578, 0x5e40, 0x6c23, 0x694d, 0x6a27, 0x6976, 0x7b3b, 0x6769, 0x6f4c, 0x5066, 0x5e41, 0x642c, 0x584c, 0x7971, 0x4e5f, 0x7a24, 0x6632, 0x7a7b, 0x7a3d, 0x4c48, 0x6f4d, 0x5555, 0x5322, 0x6c51, 0x6427, 0x6c52, 0x7631, 0x4e7b, 0x5051, 0x4b3f, 0x6d24, 0x6d28, 0x5e42, 0x7662, 0x6d5c, 0x5c75, 0x6039, 0x544e, 0x7435, 0x535b, 0x5635, 0x6c24, 0x6466, 0x716a, 0x4b6c, 0x4b40, 0x6c72, 0x506a, 0x7972, 0x6c25, 0x505f, 0x676a, 0x506b, 0x5c51, 0x5b69, 0x7d4c, 0x5b57, 0x5a61, 0x5636, 0x635f, 0x5e43, 0x5e44, 0x4a21, 0x6e6c, 0x5323, 0x6e37, 0x784f, 0x6a48, 0x6e38, 0x712c, 0x7125, 0x694e, 0x793c, 0x6579, 0x6c6a, 0x5d56, 0x6d42, 0x7825, 0x653a, 0x5b58, 0x4a22, 0x514d, 0x6e6d, 0x6c6b, 0x5e45, 0x6360, 0x4a49, 0x7269, 0x554e, 0x7636, 0x4e42, 0x5647, 0x6334, 0x712d, 0x6a62, 0x5742, 0x7327, 0x4d6a, 0x6b6e, 0x5932, 0x7d25, 0x7655, 0x5562, 0x7835, 0x4c75, 0x7535, 0x642d, 0x676b, 0x7155, 0x703b, 0x6935, 0x4c49, 0x7a55, 0x6154, 0x5756, 0x5c41, 0x5e46, 0x7a6f, 0x6361, 0x6173, 0x5c76, 0x4e7c, 0x5b44, 0x7871, 0x5c64, 0x656f, 0x5c31, 0x5556, 0x735a, 0x4b41, 0x5b43, 0x597a, 0x536e, 0x7a38, 0x7d26, 0x6b6f, 0x7426, 0x4c4a, 0x7328, 0x735b, 0x5b27, 0x7637, 0x4f66, 0x7072, 0x4b5a, 0x6752, 0x5743, 0x7670, 0x685e, 0x6526, 0x6567, 0x4a23, 0x4c27, 0x6a49, 0x7836, 0x7a25, 0x712e, 0x6f4e, 0x4b6d, 0x7630, 0x6f4f, 0x694f, 0x775e, 0x4e53, 0x5c77, 0x5b28, 0x4b78, 0x5f21, 0x5d61, 0x754a, 0x6936, 0x676c, 0x6e6e, 0x7370, 0x5f3f, 0x4c4b, 0x5041, 0x7452, 0x603a, 0x5f40, 0x4e60, 0x5c52, 0x7d6a, 0x5676, 0x6a4a, 0x6869, 0x632c, 0x7350, 0x4a24, 0x5b78, 0x5e47, 0x6b70, 0x7156, 0x6562, 0x4c4c, 0x4b7b, 0x6a63, 0x5f41, 0x566d, 0x6950, 0x6e39, 0x5563, 0x5153, 0x6570, 0x6834, 0x6b43, 0x6a2a, 0x7a7c, 0x7576, 0x703c, 0x7d54, 0x603b, 0x4e43, 0x503a, 0x773a, 0x5873, 0x774d, 0x642e, 0x545f, 0x5067, 0x6c7d, 0x522e, 0x6e6f, 0x5557, 0x6a64, 0x7822, 0x4d6b, 0x573f, 0x7b31, 0x4d6c, 0x5c32, 0x506c, 0x4e7d, 0x6e70, 0x4c42, 0x506d, 0x6577, 0x737c, 0x6e22, 0x5933, 0x5874, 0x6937, 0x4e2e, 0x5922, 0x5871, 0x544f, 0x6527, 0x5552, 0x5629, 0x7422, 0x7157, 0x5558, 0x703d, 0x5750, 0x5450, 0x574f, 0x6b6a, 0x7d6b, 0x5b6d, 0x7c45, 0x4b42, 0x7d55, 0x7448, 0x686a, 0x7573, 0x795e, 0x536f, 0x6c53, 0x5d42, 0x6f37, 0x6754, 0x4a4a, 0x597b, 0x7a7d, 0x562a, 0x7478, 0x7777, 0x5c2c, 0x5757, 0x5f22, 0x4e3e, 0x5370, 0x7024, 0x616c, 0x4f67, 0x734b, 0x6d29, 0x4a3e, 0x746f, 0x764e, 0x5e7b, 0x503b, 0x5537, 0x6e71, 0x7428, 0x5c78, 0x4b27, 0x5a4e, 0x6066, 0x6d25, 0x6e72, 0x5c79, 0x795c, 0x735c, 0x7872, 0x7479, 0x7c71, 0x503c, 0x5b79, 0x5731, 0x4b7c, 0x7025, 0x4b7d, 0x5574, 0x4d6d, 0x4a25, 0x562b, 0x5042, 0x703e, 0x523d, 0x4c24, 0x7a36, 0x4c4d, 0x5a7a, 0x764f, 0x6938, 0x5875, 0x4c4e, 0x574d, 0x5451, 0x696d, 0x4a6b, 0x5962, 0x7d32, 0x632d, 0x564c, 0x5934, 0x6127, 0x6e53, 0x5043, 0x7d33, 0x5564, 0x4f68, 0x6d43, 0x5032, 0x4e7e, 0x5a28, 0x7850, 0x7d56, 0x7851, 0x7852, 0x5c53, 0x5d62, 0x7b79, 0x5d41, 0x6335, 0x6d5d, 0x4e44, 0x4b21, 0x5d63, 0x7c5d, 0x792f, 0x527b, 0x4f21, 0x6428, 0x7436, 0x6c7e, 0x632e, 0x676d, 0x7d41, 0x5a62, 0x5833, 0x5d64, 0x706f, 0x7671, 0x7a70, 0x5175, 0x5a4f, 0x5c54, 0x5c26, 0x6f3f, 0x4e4f, 0x6059, 0x5956, 0x6c54, 0x6a4b, 0x4a3f, 0x5530, 0x4f69, 0x716d, 0x4c4f, 0x6478, 0x646d, 0x5758, 0x7d27, 0x6a2b, 0x7632, 0x4f70, 0x793d, 0x6674, 0x4b5b, 0x7351, 0x6951, 0x7329, 0x5060, 0x6952, 0x5a63, 0x6252, 0x7622, 0x6174, 0x5a64, 0x6755, 0x753f, 0x4f22, 0x4d2f, 0x4f23, 0x4d30, 0x717e, 0x5023, 0x612f, 0x7823, 0x4a26, 0x773b, 0x726a, 0x5e48, 0x6953, 0x5e49, 0x7d5e, 0x4a40, 0x796a, 0x514e, 0x6e54, 0x5452, 0x5923, 0x7d28, 0x5759, 0x774e, 0x7a3e, 0x4f56, 0x5770, 0x6b61, 0x7845, 0x5c7a, 0x5d43, 0x795f, 0x676f, 0x7d65, 0x7623, 0x597c, 0x7d29, 0x676e, 0x5565, 0x6f50, 0x4d31, 0x7722, 0x7132, 0x7131, 0x4d32, 0x5a2b, 0x4a27, 0x6362, 0x7b3c, 0x5924, 0x6e3a, 0x7853, 0x7b7a, 0x4f24, 0x5c7b, 0x7663, 0x6d2a, 0x7221, 0x4e61, 0x7a26, 0x7960, 0x6c56, 0x646e, 0x7921, 0x7b6f, 0x796b, 0x6e23, 0x6a2c, 0x4a28, 0x747a, 0x4d56, 0x7c76, 0x7449, 0x7854, 0x7826, 0x5e4a, 0x7246, 0x575a, 0x5350, 0x5845, 0x6a66, 0x735d, 0x645a, 0x7664, 0x7672, 0x5f42, 0x597d, 0x4c76, 0x533a, 0x642f, 0x7961, 0x7026, 0x4b53, 0x603c, 0x744a, 0x547a, 0x7d2a, 0x7962, 0x7437, 0x7d42, 0x7c30, 0x7d6c, 0x4a62, 0x7d3d, 0x6a67, 0x5f43, 0x5152, 0x4e62, 0x5324, 0x7d2b, 0x5f60, 0x7247, 0x6770, 0x506e, 0x732a, 0x5e4b, 0x7638, 0x6175, 0x7133, 0x7723, 0x4a29, 0x4f25, 0x5f44, 0x6130, 0x703f, 0x7624, 0x6336, 0x7a46, 0x506f, 0x7d6d, 0x5d44, 0x7c77, 0x663f, 0x5e2d, 0x7a3f, 0x6571, 0x6d44, 0x5225, 0x7d6e, 0x7536, 0x6176, 0x5e4c, 0x7c5e, 0x6c57, 0x4d5d, 0x5637, 0x4d33, 0x7855, 0x6558, 0x4f6a, 0x4f50, 0x6a4c, 0x6a2e, 0x6a2d, 0x5371, 0x5325, 0x774f, 0x6e24, 0x5024, 0x7222, 0x5070, 0x7223, 0x7778, 0x5033, 0x5b29, 0x533b, 0x4a6c, 0x7126, 0x4b55, 0x7767, 0x4d5e, 0x7724, 0x7840, 0x535d, 0x4c50, 0x4f26, 0x7673, 0x6177, 0x535c, 0x7a7e, 0x7a27, 0x6b59, 0x4f27, 0x6a2f, 0x646f, 0x6939, 0x7158, 0x5858, 0x6072, 0x6634, 0x5c7c, 0x7371, 0x6350, 0x727b, 0x5b46, 0x5071, 0x5072, 0x4f5c, 0x5351, 0x4c31, 0x7758, 0x4b28, 0x6b3c, 0x643e, 0x745c, 0x5c42, 0x7027, 0x6640, 0x4a6d, 0x686b, 0x6568, 0x5c43, 0x6d5e, 0x5372, 0x4c77, 0x4e54, 0x672b, 0x4b43, 0x6131, 0x7732, 0x5373, 0x5352, 0x7540, 0x5f5d, 0x6e73, 0x6771, 0x7d34, 0x7248, 0x7352, 0x6e74, 0x6253, 0x4c51, 0x5f6a, 0x693a, 0x5957, 0x754d, 0x7172, 0x7a47, 0x5978, 0x5442, 0x7665, 0x5d45, 0x6772, 0x6d5f, 0x4a4b, 0x5b7a, 0x6835, 0x5326, 0x7d35, 0x7949, 0x6462, 0x7b3d, 0x5724, 0x4e45, 0x4e55, 0x5666, 0x653d, 0x5e4d, 0x6c73, 0x6d60, 0x6c6c, 0x7b3e, 0x5f6b, 0x6178, 0x793e, 0x5073, 0x602a, 0x6862, 0x6254, 0x527d, 0x6528, 0x5953, 0x535e, 0x7438, 0x773c, 0x5c7d, 0x686c, 0x6467, 0x6377, 0x6c28, 0x7a71, 0x6572, 0x5074, 0x522f, 0x5c65, 0x5025, 0x7134, 0x7c31, 0x4c78, 0x5d46, 0x7a51, 0x775f, 0x7a28, 0x6e75, 0x5e4e, 0x6773, 0x772c, 0x6b44, 0x6d61, 0x602b, 0x5d47, 0x5233, 0x523f, 0x4a4c, 0x7b3f, 0x657d, 0x5d65, 0x584d, 0x6c74, 0x5075, 0x686d, 0x5052, 0x5958, 0x7666, 0x5b2a, 0x7760, 0x5859, 0x7423, 0x745d, 0x6f51, 0x5935, 0x6d2b, 0x6337, 0x6e3b, 0x4d34, 0x6073, 0x6a4d, 0x6c75, 0x686e, 0x4b29, 0x712f, 0x4a4d, 0x6c29, 0x726b, 0x7d6f, 0x7973, 0x6641, 0x6c58, 0x6d2c, 0x6a4e, 0x685f, 0x5e4f, 0x5226, 0x6774, 0x5156, 0x6642, 0x6363, 0x6430, 0x5834, 0x7625, 0x735e, 0x5725, 0x7768, 0x6846, 0x7b66, 0x5d66, 0x5c7e, 0x585a, 0x5a2c, 0x6a30, 0x6338, 0x4a2a, 0x6179, 0x6a31, 0x726c, 0x7a6e, 0x6e55, 0x7974, 0x526c, 0x7b7b, 0x7d70, 0x603d, 0x4e63, 0x7846, 0x5e2e, 0x5f45, 0x653e, 0x6d2d, 0x7a6a, 0x4d6e, 0x6d26, 0x6d2e, 0x706d, 0x5d21, 0x6d2f, 0x7c78, 0x586b, 0x4c79, 0x4d35, 0x7a29, 0x615d, 0x6255, 0x6d4f, 0x5d22, 0x794a, 0x6a68, 0x656d, 0x536b, 0x6954, 0x617a, 0x644c, 0x6164, 0x6847, 0x4e5b, 0x5c55, 0x7735, 0x7c73, 0x7073, 0x4e2f, 0x7135, 0x6f52, 0x6848, 0x6b71, 0x4b54, 0x603e, 0x6378, 0x6a69, 0x7c32, 0x6074, 0x4f60, 0x6e25, 0x7a2a, 0x6643, 0x6132, 0x4a2b, 0x6364, 0x693b, 0x6256, 0x7372, 0x6e56, 0x6a32, 0x5076, 0x6c59, 0x5a4b, 0x4f28, 0x5d23, 0x585b, 0x794e, 0x6955, 0x6351, 0x523c, 0x582c, 0x734c, 0x4d7b, 0x7656, 0x6775, 0x686f, 0x6379, 0x523b, 0x7373, 0x637b, 0x5e50, 0x4e30, 0x5677, 0x7159, 0x7541, 0x5c44, 0x753b, 0x5e51, 0x5c66, 0x5e52, 0x6d62, 0x6e76, 0x6a4f, 0x706e, 0x637c, 0x535f, 0x5374, 0x6133, 0x6134, 0x7453, 0x5f46, 0x6956, 0x5b2b, 0x7626, 0x6339, 0x6b45, 0x7429, 0x4d36, 0x5279, 0x5a2d, 0x5263, 0x4f51, 0x4b5c, 0x4c7a, 0x4f5d, 0x6829, 0x633b, 0x633a, 0x605a, 0x6e77, 0x5c33, 0x5375, 0x5726, 0x7635, 0x575b, 0x6155, 0x546a, 0x5f23, 0x7d5f, 0x5077, 0x6d54, 0x4b2a, 0x645b, 0x617b, 0x4b22, 0x5360, 0x643f, 0x7b40, 0x5a3e, 0x644d, 0x5639, 0x6f40, 0x617c, 0x7639, 0x5f47, 0x6431, 0x5c67, 0x5c68, 0x7a56, 0x5376, 0x715a, 0x7a72, 0x627d, 0x554f, 0x5078, 0x4d5f, 0x754b, 0x6470, 0x4b2b, 0x5744, 0x627e, 0x5d5a, 0x5a2e, 0x4a6e, 0x5539, 0x6321, 0x6863, 0x732b, 0x4f29, 0x5377, 0x5471, 0x4e64, 0x6872, 0x6575, 0x672e, 0x563a, 0x5f6c, 0x6440, 0x6864, 0x5835, 0x645c, 0x7439, 0x7136, 0x625e, 0x6135, 0x4d6f, 0x7127, 0x4e65, 0x4b5d, 0x5963, 0x732c, 0x5079, 0x6c2b, 0x5e53, 0x7769, 0x7975, 0x615e, 0x4b6e, 0x633c, 0x7856, 0x5b6e, 0x7d71, 0x7736, 0x745e, 0x726d, 0x5b59, 0x7028, 0x617d, 0x5e54, 0x602c, 0x6d63, 0x5361, 0x5f48, 0x5936, 0x7d2c, 0x6f53, 0x6441, 0x786b, 0x5b2c, 0x7c46, 0x582d, 0x763a, 0x5b5f, 0x5353, 0x7847, 0x4a4e, 0x7841, 0x5234, 0x5c34, 0x7a39, 0x4a4f, 0x7c33, 0x6a6a, 0x6a6b, 0x507a, 0x6d64, 0x5d67, 0x5f49, 0x5f6d, 0x6e3c, 0x6f41, 0x4c52, 0x5d24, 0x5f4a, 0x5378, 0x7128, 0x4d37, 0x6f54, 0x645d, 0x5f6e, 0x4b2c, 0x693c, 0x6a6c, 0x5f4b, 0x793f, 0x562f, 0x5546, 0x4f2a, 0x4e29, 0x5678, 0x7137, 0x6e78, 0x5959, 0x735f, 0x7848, 0x4e46, 0x5566, 0x7466, 0x6645, 0x6f55, 0x4b6f, 0x7c5f, 0x5c27, 0x5667, 0x7849, 0x6352, 0x633d, 0x4f61, 0x7040, 0x6c5a, 0x5d57, 0x7b70, 0x6c2c, 0x7029, 0x7a57, 0x7b41, 0x5240, 0x6530, 0x6d65, 0x4b2d, 0x7930, 0x7725, 0x4b2e, 0x5a2f, 0x5836, 0x5327, 0x7b32, 0x7d44, 0x6c2d, 0x7b21, 0x6569, 0x696e, 0x7374, 0x7873, 0x7041, 0x5e2f, 0x7830, 0x7360, 0x672f, 0x5b2d, 0x6635, 0x7928, 0x5d58, 0x6859, 0x6f56, 0x5362, 0x625f, 0x7c60, 0x5748, 0x7d2d, 0x5f6f, 0x4c53, 0x5379, 0x5470, 0x5b47, 0x5e55, 0x7074, 0x5550, 0x6559, 0x7c47, 0x5c56, 0x6260, 0x5a30, 0x7323, 0x536c, 0x744b, 0x7d45, 0x637d, 0x7931, 0x507b, 0x6c5b, 0x753c, 0x7224, 0x584e, 0x584f, 0x7577, 0x7661, 0x5237, 0x7b6c, 0x5d48, 0x6468, 0x5241, 0x7857, 0x563b, 0x5e56, 0x773d, 0x6c2e, 0x5061, 0x6075, 0x6a33, 0x4e56, 0x4c25, 0x6c76, 0x6261, 0x633e, 0x7c48, 0x4d70, 0x7976, 0x5f70, 0x653f, 0x4e3f, 0x7c61, 0x6d30, 0x7d51, 0x763b, 0x794f, 0x6b5a, 0x4a41, 0x5238, 0x4d71, 0x6353, 0x7d66, 0x666d, 0x637a, 0x702a, 0x7950, 0x7c62, 0x7827, 0x6165, 0x6e79, 0x6776, 0x6a6d, 0x7c34, 0x7542, 0x575c, 0x7075, 0x5d68, 0x536d, 0x757c, 0x5a3f, 0x4c7b, 0x537a, 0x7424, 0x6f57, 0x5443, 0x7b63, 0x7b6d, 0x602d, 0x6a6e, 0x7b33, 0x6442, 0x7667, 0x525d, 0x5f4c, 0x7c49, 0x6529, 0x6076, 0x7633, 0x617e, 0x4b70, 0x6a6f, 0x6a70, 0x5a40, 0x7834, 0x6b72, 0x6443, 0x6957, 0x6471, 0x4a6f, 0x4e57, 0x7c4a, 0x7361, 0x4b44, 0x6365, 0x4b45, 0x6a34, 0x693d, 0x5749, 0x6b5b, 0x6d31, 0x4c43, 0x773e, 0x7c4b, 0x7874, 0x5937, 0x7353, 0x7354, 0x7764, 0x7751, 0x5837, 0x4e31, 0x4a42, 0x7b34, 0x4b46, 0x7076, 0x5567, 0x6a50, 0x4c54, 0x4b2f, 0x742a, 0x692f, 0x7543, 0x6958, 0x5d69, 0x7173, 0x557b, 0x5e3b, 0x747b, 0x7d73, 0x7d72, 0x7726, 0x5d49, 0x5453, 0x4c28, 0x5a41, 0x4c55, 0x5964, 0x7a4a, 0x6563, 0x533c, 0x4a70, 0x5044, 0x4a50, 0x7a2b, 0x6b6b, 0x6778, 0x5965, 0x5157, 0x7324, 0x547b, 0x7c63, 0x7a58, 0x7355, 0x4f2b, 0x6b73, 0x557c, 0x5354, 0x4d7c, 0x5966, 0x6279, 0x6221, 0x6b54, 0x6077, 0x6432, 0x4c7c, 0x7b64, 0x742b, 0x503d, 0x4a71, 0x6f38, 0x5740, 0x6e7a, 0x7d74, 0x5363, 0x7b42, 0x5568, 0x5b2e, 0x6136, 0x7837, 0x603f, 0x7b43, 0x5d6a, 0x6222, 0x6e26, 0x7668, 0x7675, 0x5d4a, 0x5062, 0x5d26, 0x5d6b, 0x6479, 0x632f, 0x507c, 0x747c, 0x4c3c, 0x776a, 0x6564, 0x5f71, 0x7761, 0x7977, 0x6f39, 0x7858, 0x7929, 0x7859, 0x6e3d, 0x5846, 0x6463, 0x754e, 0x5d59, 0x5967, 0x5239, 0x5543, 0x5a65, 0x5a50, 0x5159, 0x4e58, 0x4b5e, 0x742c, 0x5a7b, 0x7669, 0x6873, 0x4f2c, 0x7070, 0x747d, 0x5b48, 0x4e40, 0x6354, 0x514f, 0x7175, 0x4d72, 0x4f6b, 0x4d38, 0x6326, 0x515a, 0x7225, 0x7226, 0x644e, 0x537b, 0x7129, 0x7249, 0x6f58, 0x6649, 0x5838, 0x7a73, 0x7335, 0x7824, 0x5173, 0x6648, 0x785a, 0x5c69, 0x5e57, 0x4b5f, 0x4f6c, 0x745f, 0x5174, 0x523a, 0x5f72, 0x6137, 0x6223, 0x537c, 0x6d66, 0x5b49, 0x647a, 0x4f5e, 0x4e50, 0x5553, 0x7375, 0x772e, 0x6f48, 0x4d73, 0x754f, 0x6573, 0x7042, 0x4a51, 0x6a71, 0x5026, 0x595a, 0x702b, 0x6b67, 0x6540, 0x7c35, 0x6444, 0x4c29, 0x7d46, 0x6a35, 0x652a, 0x5f3a, 0x615f, 0x5a51, 0x6138, 0x6874, 0x537d, 0x6224, 0x724a, 0x5a66, 0x7733, 0x7d4d, 0x7336, 0x6e57, 0x7544, 0x5824, 0x7227, 0x5938, 0x5939, 0x6f49, 0x564e, 0x774b, 0x5f2e, 0x6875, 0x5235, 0x5355, 0x744c, 0x5a7c, 0x5968, 0x776b, 0x7549, 0x733c, 0x5a52, 0x5335, 0x6836, 0x564f, 0x743a, 0x7749, 0x4c2a, 0x7043, 0x4c56, 0x5053, 0x533d, 0x5b7b, 0x4b60, 0x5364, 0x7677, 0x553a, 0x734d, 0x4b61, 0x6b74, 0x742d, 0x7c2a, 0x776c, 0x6876, 0x5a67, 0x774c, 0x6541, 0x606e, 0x557d, 0x4e66, 0x7c2b, 0x553b, 0x7228, 0x6225, 0x4d39, 0x6a72, 0x4b47, 0x4d74, 0x5b2f, 0x6f59, 0x4d3a, 0x7c79, 0x5f73, 0x4e67, 0x5a42, 0x4f2d, 0x6779, 0x7828, 0x7362, 0x4a72, 0x5f24, 0x5444, 0x4c57, 0x6542, 0x4d3b, 0x6f5a, 0x6e58, 0x5d27, 0x6226, 0x6040, 0x5630, 0x784a, 0x7c7a, 0x597e, 0x5e30, 0x5d6c, 0x5a68, 0x5460, 0x5679, 0x4d57, 0x5e58, 0x7278, 0x6456, 0x5045, 0x742e, 0x5d28, 0x6d45, 0x7356, 0x5e59, 0x6366, 0x5328, 0x5b30, 0x655a, 0x633f, 0x5b31, 0x5569, 0x6041, 0x6f5b, 0x7069, 0x5732, 0x507d, 0x5969, 0x507e, 0x6c6d, 0x5329, 0x7229, 0x7044, 0x6262, 0x696f, 0x7951, 0x6959, 0x685a, 0x5a43, 0x5a44, 0x5445, 0x677a, 0x4d60, 0x6330, 0x5b32, 0x7b44, 0x7363, 0x5925, 0x7b67, 0x5d4b, 0x5054, 0x6636, 0x602e, 0x7d5a, 0x5c35, 0x6078, 0x6731, 0x7570, 0x585c, 0x6d46, 0x6139, 0x6340, 0x7940, 0x6970, 0x595b, 0x7364, 0x5c36, 0x6469, 0x7045, 0x6341, 0x7c4c, 0x7c4d, 0x724b, 0x724c, 0x644f, 0x715b, 0x7a59, 0x7138, 0x7d75, 0x6079, 0x677b, 0x7c37, 0x7c64, 0x7b45, 0x6367, 0x5839, 0x7678, 0x5c45, 0x4c58, 0x602f, 0x7467, 0x6f5c, 0x4f7c, 0x6f5d, 0x722a, 0x7d3e, 0x4a2c, 0x7d3b, 0x7d47, 0x6732, 0x6a51, 0x5f74, 0x516c, 0x645e, 0x6543, 0x5926, 0x4d3c, 0x7365, 0x6d55, 0x593a, 0x6d67, 0x7b35, 0x786c, 0x6067, 0x4c59, 0x5446, 0x6725, 0x5575, 0x533e, 0x7c7b, 0x6472, 0x5f75, 0x6878, 0x786d, 0x4e47, 0x7d76, 0x6858, 0x4d58, 0x6756, 0x4c5a, 0x4a63, 0x5f76, 0x7047, 0x7046, 0x583a, 0x7174, 0x7470, 0x754c, 0x7c65, 0x6a45, 0x6a73, 0x5d5b, 0x5c57, 0x5e7d, 0x7279, 0x5547, 0x5850, 0x7048, 0x5121, 0x5122, 0x5954, 0x5668, 0x594a, 0x5a31, 0x5847, 0x5c62, 0x734e, 0x7574, 0x7139, 0x5a53, 0x766a, 0x4f75, 0x7d2e, 0x4a52, 0x5f34, 0x575d, 0x7a3a, 0x6e27, 0x753d, 0x7875, 0x6d68, 0x5461, 0x5123, 0x6156, 0x7978, 0x5b4a, 0x4b79, 0x5454, 0x595c, 0x6e3e, 0x776d, 0x526e, 0x6166, 0x7779, 0x5d6d, 0x685b, 0x5b33, 0x5177, 0x6030, 0x5462, 0x7657, 0x5779, 0x585d, 0x4d7d, 0x722b, 0x4d3d, 0x7842, 0x722c, 0x4a2d, 0x4a2e, 0x4f2e, 0x6342, 0x5c37, 0x5b5a, 0x593b, 0x4a73, 0x7653, 0x6678, 0x6a75, 0x6a76, 0x7679, 0x4f2f, 0x4a53, 0x4a2f, 0x5230, 0x713a, 0x5733, 0x6343, 0x737d, 0x5e5a, 0x5e5b, 0x6f5e, 0x6263, 0x6e7b, 0x5f77, 0x574a, 0x4e68, 0x5b5b, 0x713b, 0x6971, 0x7a37, 0x5046, 0x4c2b, 0x6e28, 0x4b7a, 0x7979, 0x4c7d, 0x537e, 0x6450, 0x726e, 0x5455, 0x5f4d, 0x7c38, 0x5150, 0x724d, 0x7752, 0x4a54, 0x5559, 0x585e, 0x4d59, 0x6e29, 0x763c, 0x4c5b, 0x7049, 0x7c7c, 0x6849, 0x747e, 0x677c, 0x575e, 0x5e5c, 0x702c, 0x4c7e, 0x4d61, 0x613a, 0x5b6f, 0x5a32, 0x5125, 0x5c38, 0x5876, 0x5124, 0x4d62, 0x5c6a, 0x7077, 0x704a, 0x503e, 0x5d5c, 0x5456, 0x5356, 0x6d50, 0x4d21, 0x5f35, 0x5f78, 0x5421, 0x4e32, 0x684a, 0x6b75, 0x6355, 0x7550, 0x7521, 0x5927, 0x652b, 0x664b, 0x7571, 0x6545, 0x7923, 0x605b, 0x766b, 0x4b71, 0x596a, 0x7522, 0x5751, 0x5178, 0x6a78, 0x6a79, 0x5a33, 0x6f5f, 0x716f, 0x6576, 0x6e3f, 0x6264, 0x503f, 0x7a2c, 0x7551, 0x6733, 0x693e, 0x724e, 0x5b34, 0x7c4e, 0x5d6e, 0x6734, 0x5734, 0x7734, 0x4d3e, 0x5a69, 0x4f30, 0x7759, 0x7366, 0x4e59, 0x4e2a, 0x4b48, 0x5027, 0x704b, 0x5047, 0x6445, 0x5b60, 0x555a, 0x5727, 0x6e40, 0x7876, 0x7552, 0x6d69, 0x593c, 0x6546, 0x7523, 0x5a54, 0x6227, 0x7b7c, 0x715c, 0x4a74, 0x687a, 0x4e69, 0x6978, 0x6265, 0x5039, 0x5472, 0x5126, 0x5f4e, 0x7c74, 0x532a, 0x4c2c, 0x6f60, 0x6565, 0x5055, 0x5b7c, 0x7c66, 0x4b7e, 0x6d6a, 0x5e31, 0x7963, 0x5422, 0x4f76, 0x5650, 0x556a, 0x716e, 0x7a4b, 0x6521, 0x5531, 0x4f6d, 0x6d6b, 0x5532, 0x553c, 0x7d62, 0x732d, 0x7d5b, 0x6930, 0x5127, 0x7d63, 0x4e33, 0x7d64, 0x7a4e, 0x4a30, 0x7727, 0x4f31, 0x6622, 0x7c36, 0x722d, 0x6f61, 0x732e, 0x5c46, 0x596b, 0x6860, 0x6128, 0x5576, 0x4f7d, 0x5e5d, 0x5951, 0x646a, 0x724f, 0x773f, 0x6266, 0x6228, 0x6356, 0x6d51, 0x6979, 0x5631, 0x5e32, 0x6068, 0x532b, 0x6b5c, 0x5f2f, 0x4a43, 0x6e7c, 0x7d43, 0x6b76, 0x4f32, 0x596c, 0x593d, 0x585f, 0x5438, 0x6b3e, 0x5d6f, 0x5d70, 0x5d71, 0x5d72, 0x593e, 0x7b46, 0x4f33, 0x6e7d, 0x642b, 0x5a45, 0x586c, 0x5128, 0x6229, 0x5e3c, 0x6735, 0x5b70, 0x6f62, 0x7170, 0x4f34, 0x5b71, 0x6031, 0x5f25, 0x7952, 0x677d, 0x6623, 0x7b71, 0x4b30, 0x722e, 0x4d67, 0x685c, 0x6757, 0x7740, 0x5063, 0x5a21, 0x4c3d, 0x5129, 0x5d4c, 0x637e, 0x512a, 0x682a, 0x6a36, 0x797a, 0x664c, 0x7658, 0x5447, 0x594b, 0x5952, 0x534b, 0x5877, 0x5a29, 0x7578, 0x5e5e, 0x722f, 0x7829, 0x5848, 0x6e41, 0x7941, 0x5d73, 0x6a7a, 0x763d, 0x613b, 0x4d3f, 0x7454, 0x664d, 0x7c4f, 0x7b22, 0x605c, 0x743b, 0x5a55, 0x7932, 0x7b72, 0x5b76, 0x5e5f, 0x5b72, 0x785c, 0x776e, 0x6b68, 0x527a, 0x713c, 0x7a5a, 0x5a6a, 0x5a46, 0x7741, 0x6736, 0x6547, 0x562c, 0x5c47, 0x6129, 0x622a, 0x5526, 0x5457, 0x7250, 0x6a7b, 0x605d, 0x7b73, 0x713d, 0x6267, 0x7d57, 0x4e48, 0x6a37, 0x7c40, 0x7d67, 0x776f, 0x5735, 0x6f3a, 0x715d, 0x5e33, 0x684b, 0x785d, 0x7b47, 0x5548, 0x575f, 0x5d29, 0x6931, 0x7a2d, 0x7659, 0x7a74, 0x782a, 0x666e, 0x4c5c, 0x613c, 0x606f, 0x693f, 0x7c7d, 0x664e, 0x6157, 0x664f, 0x7471, 0x6473, 0x647b, 0x7964, 0x6f63, 0x4f6e, 0x763e, 0x6032, 0x7c7e, 0x512b, 0x577a, 0x7b48, 0x6257, 0x5423, 0x7078, 0x5728, 0x6167, 0x533f, 0x6f64, 0x5745, 0x6b62, 0x7c67, 0x6422, 0x6268, 0x6650, 0x7b68, 0x7468, 0x6574, 0x743c, 0x7455, 0x5f36, 0x7c39, 0x6e42, 0x4a75, 0x6f65, 0x4b62, 0x5424, 0x5e60, 0x5a7d, 0x6446, 0x683e, 0x605e, 0x7634, 0x6a52, 0x797b, 0x6042, 0x4a64, 0x6737, 0x6a7d, 0x595d, 0x5a34, 0x6e2a, 0x7b69, 0x5b4b, 0x5a35, 0x713e, 0x532c, 0x7b49, 0x5f4f, 0x5340, 0x6357, 0x6f66, 0x7c50, 0x6940, 0x7553, 0x6c5c, 0x7737, 0x6a38, 0x5179, 0x5c48, 0x6a39, 0x715e, 0x5736, 0x4f35, 0x5928, 0x6c6e, 0x5d2a, 0x4d22, 0x682e, 0x613d, 0x7251, 0x6941, 0x527c, 0x5b35, 0x7367, 0x587e, 0x7c51, 0x6d32, 0x742f, 0x7b23, 0x7c41, 0x6e2b, 0x5425, 0x7472, 0x6e59, 0x7b4a, 0x4d63, 0x583b, 0x655b, 0x7877, 0x7654, 0x5729, 0x4b49, 0x6651, 0x704c, 0x582e, 0x7953, 0x557e, 0x583c, 0x7230, 0x622b, 0x7368, 0x6f42, 0x6d6c, 0x6738, 0x5a7e, 0x4c3e, 0x727c, 0x5a6b, 0x6258, 0x6d56, 0x5651, 0x6033, 0x7c52, 0x6b48, 0x5341, 0x704d, 0x4f77, 0x6d52, 0x5458, 0x5c49, 0x5771, 0x5f3b, 0x7325, 0x744d, 0x713f, 0x7831, 0x697a, 0x7b4b, 0x4a55, 0x7954, 0x774a, 0x5648, 0x7c68, 0x733d, 0x6e7e, 0x677e, 0x5342, 0x5336, 0x4c2d, 0x767a, 0x5632, 0x5258, 0x6758, 0x6325, 0x6739, 0x702d, 0x7b4c, 0x6b21, 0x5426, 0x7b4d, 0x553d, 0x715f, 0x767b, 0x5e34, 0x556b, 0x6548, 0x7b24, 0x5439, 0x5e61, 0x6423, 0x5737, 0x786e, 0x5e35, 0x5652, 0x7955, 0x673a, 0x6b55, 0x5577, 0x6f67, 0x613e, 0x7a2e, 0x5669, 0x566e, 0x673b, 0x6c4b, 0x5533, 0x4e34, 0x7b25, 0x616e, 0x7728, 0x7b4e, 0x583d, 0x7b7d, 0x7c69, 0x4f36, 0x6d47, 0x6e2c, 0x4c5d, 0x7627, 0x667a, 0x7524, 0x7d5c, 0x6d33, 0x4e49, 0x6f68, 0x613f, 0x7a5b, 0x4b63, 0x7729, 0x7b26, 0x5c39, 0x7140, 0x6d48, 0x6f43, 0x562d, 0x7d4e, 0x6821, 0x7b74, 0x5527, 0x7176, 0x6653, 0x4c5e, 0x7832, 0x5c6b, 0x7d36, 0x656a, 0x7160, 0x5b4c, 0x5d4d, 0x5448, 0x596d, 0x7525, 0x667b, 0x6654, 0x7d48, 0x5621, 0x7d3f, 0x7c53, 0x6f21, 0x673c, 0x516e, 0x6655, 0x6972, 0x5f30, 0x5860, 0x7c3a, 0x7d2f, 0x704e, 0x5b61, 0x6549, 0x6d34, 0x6043, 0x6358, 0x697b, 0x6a28, 0x7d37, 0x7b27, 0x6942, 0x7d77, 0x6259, 0x5c6c, 0x6822, 0x6670, 0x7d78, 0x7d79, 0x763f, 0x6727, 0x6657, 0x5473, 0x5449, 0x567a, 0x5772, 0x6140, 0x5b62, 0x6658, 0x673d, 0x704f, 0x733e, 0x622c, 0x7537, 0x6070, 0x7d38, 0x6368, 0x5427, 0x687c, 0x7a52, 0x786f, 0x5653, 0x5534, 0x7050, 0x7770, 0x6e33, 0x6a3a, 0x6a53, 0x6d49, 0x5d2b, 0x652c, 0x7d21, 0x5f50, 0x6c33, 0x5f51, 0x6d6d, 0x7838, 0x777a, 0x782b, 0x7460, 0x543a, 0x6433, 0x695a, 0x5e36, 0x593f, 0x5940, 0x566f, 0x594c, 0x5a2a, 0x5f65, 0x7765, 0x4c32, 0x5f79, 0x5760, 0x543b, 0x7d7a, 0x4c33, 0x5b73, 0x5f52, 0x4e4a, 0x6e5a, 0x6464, 0x7b4f, 0x4f37, 0x6e43, 0x4e6a, 0x622d, 0x5761, 0x7a75, 0x5549, 0x782c, 0x6759, 0x7369, 0x586d, 0x6344, 0x7071, 0x6865, 0x607a, 0x6e44, 0x595e, 0x6b22, 0x6b23, 0x7c42, 0x6a3b, 0x682b, 0x5e62, 0x6d6f, 0x6823, 0x4f71, 0x543c, 0x7c6a, 0x673e, 0x7c72, 0x5634, 0x622e, 0x5337, 0x7a4c, 0x7a5c, 0x6d35, 0x6163, 0x682c, 0x685d, 0x6f69, 0x743d, 0x4f38, 0x695b, 0x512c, 0x5a47, 0x6b49, 0x684c, 0x5e37, 0x563c, 0x5365, 0x7a5d, 0x5a56, 0x4a31, 0x5a48, 0x5f26, 0x7933, 0x7252, 0x4a44, 0x4e4b, 0x4d75, 0x7d30, 0x5528, 0x7141, 0x6269, 0x5c4a, 0x6c34, 0x7a40, 0x7b28, 0x5028, 0x5a6c, 0x596e, 0x607b, 0x6f6a, 0x7a5e, 0x6044, 0x4f39, 0x554a, 0x5762, 0x622f, 0x5738, 0x684d, 0x765a, 0x6f22, 0x625a, 0x767c, 0x7b50, 0x512d, 0x4d64, 0x512e, 0x5c6d, 0x684e, 0x7079, 0x4e35, 0x667c, 0x577b, 0x5056, 0x5d75, 0x7771, 0x767d, 0x5b77, 0x7b6a, 0x695c, 0x5941, 0x7572, 0x6045, 0x6a54, 0x7942, 0x6a3c, 0x5245, 0x7b51, 0x6740, 0x6b25, 0x5f7a, 0x6322, 0x5739, 0x6943, 0x687d, 0x682f, 0x7253, 0x7b29, 0x5825, 0x554b, 0x5048, 0x512f, 0x5763, 0x6046, 0x5622, 0x6d70, 0x5773, 0x7c54, 0x5a57, 0x4c5f, 0x7254, 0x5130, 0x4c60, 0x5b7d, 0x733f, 0x7051, 0x7c3b, 0x6230, 0x6625, 0x625b, 0x5f5e, 0x6047, 0x726f, 0x4c61, 0x566a, 0x6742, 0x4e36, 0x7340, 0x4d7e, 0x7b52, 0x7878, 0x777b, 0x683f, 0x6837, 0x6d36, 0x5c3a, 0x4c34, 0x7177, 0x6838, 0x4a76, 0x6424, 0x7456, 0x5f66, 0x5f27, 0x5f67, 0x6141, 0x6944, 0x5c4b, 0x6945, 0x6f23, 0x6b26, 0x4b23, 0x6369, 0x517b, 0x6f24, 0x6f6b, 0x5034, 0x4d23, 0x6866, 0x6f25, 0x534c, 0x5a6d, 0x573a, 0x7255, 0x7565, 0x596f, 0x7934, 0x5554, 0x7d4f, 0x5b63, 0x7161, 0x6c36, 0x7b7e, 0x5357, 0x5131, 0x4b31, 0x5132, 0x4b32, 0x7142, 0x7461, 0x7935, 0x6143, 0x6142, 0x6b77, 0x5f28, 0x4b4a, 0x6639, 0x785e, 0x792a, 0x4a77, 0x6d37, 0x5338, 0x7256, 0x5459, 0x6e45, 0x7270, 0x4a32, 0x5c3b, 0x7178, 0x6c37, 0x654a, 0x7640, 0x7d5d, 0x5463, 0x4c62, 0x7754, 0x5765, 0x5343, 0x5826, 0x7641, 0x5d76, 0x4d40, 0x655c, 0x654b, 0x6144, 0x6830, 0x7430, 0x736a, 0x5a6e, 0x573b, 0x6231, 0x572a, 0x567b, 0x645f, 0x4a56, 0x6b28, 0x5b7e, 0x7642, 0x6f3b, 0x547d, 0x6048, 0x6839, 0x6f26, 0x4d24, 0x5474, 0x5b21, 0x5b5c, 0x5b5d, 0x6e5c, 0x4b4b, 0x7c55, 0x4e6b, 0x4d41, 0x7b53, 0x792b, 0x7554, 0x5929, 0x695d, 0x5b4d, 0x5d4e, 0x6743, 0x6c4c, 0x796c, 0x4b4c, 0x607c, 0x5428, 0x6d53, 0x586f, 0x7257, 0x4a78, 0x5a6f, 0x5654, 0x594d, 0x586e, 0x7241, 0x5f53, 0x5a70, 0x626a, 0x607d, 0x5878, 0x772f, 0x5a36, 0x4a57, 0x7258, 0x5879, 0x7a5f, 0x4f6f, 0x5942, 0x7052, 0x6451, 0x7337, 0x7a60, 0x6f6c, 0x6232, 0x543d, 0x594e, 0x7462, 0x5429, 0x4d42, 0x675a, 0x7259, 0x592a, 0x583e, 0x5c2d, 0x626b, 0x567c, 0x4a79, 0x545a, 0x7457, 0x4c21, 0x4f3a, 0x7538, 0x5943, 0x5068, 0x6345, 0x6b78, 0x7231, 0x4f3b, 0x532d, 0x6861, 0x4e6c, 0x6034, 0x5e63, 0x5d77, 0x7232, 0x7376, 0x765b, 0x577e, 0x785f, 0x7772, 0x5029, 0x665a, 0x7526, 0x573c, 0x4c63, 0x665b, 0x5d5d, 0x5133, 0x6f6d, 0x565e, 0x6474, 0x616f, 0x5d78, 0x684f, 0x4a65, 0x5c21, 0x6035, 0x7c2c, 0x7c2d, 0x5827, 0x6d38, 0x5b36, 0x5670, 0x732f, 0x4d25, 0x5a71, 0x5828, 0x4c64, 0x5134, 0x4a58, 0x5a72, 0x7527, 0x7528, 0x6626, 0x556c, 0x5578, 0x5a73, 0x6346, 0x5e64, 0x5e65, 0x5135, 0x5136, 0x5137, 0x7233, 0x695e, 0x7053, 0x7234, 0x7054, 0x4b64, 0x7b54, 0x7566, 0x636a, 0x5e66, 0x5f54, 0x7879, 0x702e, 0x5138, 0x565f, 0x5057, 0x7c21, 0x6f6e, 0x5c58, 0x695f, 0x655d, 0x7d7b, 0x6049, 0x5649, 0x542a, 0x654c, 0x6960, 0x5058, 0x7c22, 0x543e, 0x6233, 0x5e67, 0x5c3c, 0x5236, 0x7555, 0x4e21, 0x7529, 0x5d79, 0x5d7a, 0x7055, 0x765f, 0x725a, 0x646b, 0x7271, 0x6c39, 0x7d7c, 0x612a, 0x4a59, 0x6f6f, 0x752a, 0x6c79, 0x782d, 0x7242, 0x7643, 0x5752, 0x7922, 0x7056, 0x707a, 0x7660, 0x6973, 0x7243, 0x542b, 0x4a33, 0x4d26, 0x4d43, 0x4d5a, 0x594f, 0x7644, 0x6e5d, 0x6744, 0x6234, 0x5f62, 0x675b, 0x6831, 0x7c2e, 0x654d, 0x7a6b, 0x4f3c, 0x4f62, 0x4d76, 0x6f70, 0x743e, 0x544d, 0x7338, 0x6921, 0x7272, 0x736b, 0x7057, 0x4f57, 0x4f5f, 0x6840, 0x6841, 0x4f63, 0x6922, 0x502a, 0x7341, 0x502b, 0x5464, 0x6f3c, 0x5821, 0x595f, 0x7357, 0x5c3d, 0x4c65, 0x6d71, 0x7162, 0x545b, 0x6235, 0x4a66, 0x532e, 0x4c66, 0x7153, 0x7567, 0x4a5a, 0x7b6e, 0x6145, 0x5f69, 0x6e5e, 0x7742, 0x5822, 0x5d2c, 0x702f, 0x563d, 0x612b, 0x7936, 0x5475, 0x5049, 0x6f27, 0x626c, 0x5b6a, 0x4e4c, 0x7568, 0x7755, 0x534d, 0x737e, 0x5035, 0x607e, 0x5f7b, 0x665d, 0x6824, 0x4b4d, 0x6f28, 0x6e34, 0x5a58, 0x5139, 0x5f29, 0x7330, 0x4c44, 0x4e37, 0x6f29, 0x5f55, 0x6d57, 0x6e46, 0x6f3d, 0x7c56, 0x5b74, 0x6f2a, 0x7839, 0x7569, 0x6359, 0x6146, 0x543f, 0x5e68, 0x706a, 0x7342, 0x532f, 0x4a5b, 0x7c57, 0x6d58, 0x6147, 0x7458, 0x5633, 0x5d2d, 0x553e, 0x7143, 0x6e5f, 0x566b, 0x7459, 0x5766, 0x5a37, 0x5d7b, 0x5d4f, 0x5823, 0x5a59, 0x7058, 0x6f44, 0x6158, 0x7154, 0x6d72, 0x555b, 0x555c, 0x7344, 0x4b57, 0x6236, 0x6f71, 0x7b55, 0x5358, 0x5d50, 0x7059, 0x4b33, 0x555d, 0x4d27, 0x502c, 0x513a, 0x7144, 0x6533, 0x7b75, 0x6961, 0x7d60, 0x7c3c, 0x5a22, 0x5a23, 0x5221, 0x526f, 0x626d, 0x5e69, 0x4e5c, 0x7235, 0x5064, 0x5d51, 0x6148, 0x5b37, 0x5f63, 0x6d39, 0x7145, 0x734f, 0x572b, 0x612c, 0x636b, 0x6e47, 0x6149, 0x4a7a, 0x707b, 0x7a61, 0x705a, 0x4c67, 0x5a74, 0x4c3f, 0x4e6d, 0x5529, 0x7a62, 0x5065, 0x6b56, 0x6c5f, 0x5f7c, 0x7756, 0x5e6a, 0x4b34, 0x6f3e, 0x4c35, 0x4f3d, 0x6f72, 0x6237, 0x4c68, 0x707c, 0x5660, 0x7146, 0x6238, 0x6b2b, 0x4b35, 0x5851, 0x744e, 0x7377, 0x5746, 0x513b, 0x772a, 0x6d4a, 0x5753, 0x587a, 0x7645, 0x514c, 0x5d7c, 0x5f7d, 0x7965, 0x604a, 0x727d, 0x5330, 0x7473, 0x5a49, 0x665e, 0x783a, 0x6850, 0x587b, 0x6a55, 0x5623, 0x7646, 0x725b, 0x647c, 0x6832, 0x5a5a, 0x725c, 0x7b56, 0x6932, 0x6e2d, 0x7a63, 0x5c6e, 0x756a, 0x6660, 0x707d, 0x572c, 0x7545, 0x6e60, 0x5b65, 0x5d5e, 0x5970, 0x6923, 0x7179, 0x7244, 0x604b, 0x6924, 0x6239, 0x6331, 0x7c6b, 0x4d28, 0x4c36, 0x705b, 0x663a, 0x4d29, 0x7343, 0x6159, 0x6f2b, 0x6745, 0x6069, 0x7345, 0x5440, 0x553f, 0x5d2e, 0x797c, 0x4c40, 0x6522, 0x4e38, 0x5852, 0x7956, 0x712a, 0x4e51, 0x7647, 0x5b6b, 0x5f7e, 0x5861, 0x7773, 0x5767, 0x547e, 0x513c, 0x654f, 0x4b36, 0x5a38, 0x4d44, 0x563e, 0x623a, 0x4f58, 0x604c, 0x6b79, 0x7d7d, 0x5768, 0x4b58, 0x6962, 0x683a, 0x6347, 0x6c4d, 0x6c4e, 0x563f, 0x6327, 0x5f56, 0x7d68, 0x6e61, 0x7628, 0x5d7d, 0x783b, 0x6851, 0x7957, 0x4e6e, 0x6c4f, 0x6925, 0x5655, 0x4d45, 0x6d3a, 0x513d, 0x4f3e, 0x6c3b, 0x5231, 0x4c69, 0x5944, 0x697c, 0x513e, 0x6c3c, 0x652d, 0x7730, 0x4c6a, 0x5344, 0x5640, 0x567d, 0x6121, 0x5e3d, 0x7629, 0x5a24, 0x5624, 0x7546, 0x6122, 0x6946, 0x7245, 0x7469, 0x566c, 0x6b53, 0x6c3d, 0x625c, 0x5e6b, 0x705c, 0x6b3f, 0x574e, 0x513f, 0x752b, 0x797d, 0x4a5c, 0x4d46, 0x7236, 0x5d7e, 0x4c37, 0x5b38, 0x5069, 0x4e5d, 0x6b40, 0x7d22, 0x784b, 0x6a56, 0x7130, 0x5b4e, 0x7743, 0x5b4f, 0x4b24, 0x7860, 0x7b57, 0x6b4a, 0x6021, 0x4e4d, 0x545c, 0x7d58, 0x5276, 0x7237, 0x7a76, 0x762a, 0x7a77, 0x5866, 0x7431, 0x6852, 0x4a45, 0x4c6b, 0x626e, 0x623b, 0x772d, 0x7861, 0x736c, 0x5e21, 0x647d, 0x636c, 0x5d2f, 0x5d30, 0x4b37, 0x6853, 0x6123, 0x5260, 0x707e, 0x6926, 0x4b72, 0x6d73, 0x5c59, 0x604d, 0x775a, 0x5b39, 0x4c2e, 0x5a5b, 0x4d47, 0x5d31, 0x582f, 0x6323, 0x4e6f, 0x7273, 0x7833, 0x604e, 0x757d, 0x6b6c, 0x5345, 0x7c6c, 0x525b, 0x546b, 0x5e22, 0x6566, 0x7030, 0x5544, 0x6d74, 0x636d, 0x6842, 0x6d75, 0x577c, 0x6d3b, 0x762b, 0x7238, 0x7648, 0x5366, 0x725d, 0x4f3f, 0x6b2c, 0x4f40, 0x6628, 0x7d69, 0x4f41, 0x605f, 0x5e6c, 0x6022, 0x743f, 0x626f, 0x5971, 0x7147, 0x4b38, 0x797e, 0x5b3a, 0x5a75, 0x766c, 0x5a5c, 0x7a64, 0x604f, 0x5d32, 0x6629, 0x6f73, 0x736d, 0x6b7a, 0x7966, 0x4a5d, 0x555e, 0x4a5e, 0x5f64, 0x667d, 0x752c, 0x6475, 0x6963, 0x6d4b, 0x4f64, 0x5853, 0x5d33, 0x546c, 0x7239, 0x5f37, 0x4b4e, 0x7b58, 0x5059, 0x5d52, 0x7774, 0x675c, 0x6425, 0x7c23, 0x5b3b, 0x723a, 0x697d, 0x504a, 0x7556, 0x5945, 0x6434, 0x6d27, 0x6a3d, 0x667e, 0x7744, 0x752d, 0x5960, 0x4a34, 0x7862, 0x4f42, 0x6c3e, 0x6534, 0x4d48, 0x6e48, 0x6748, 0x4d49, 0x7937, 0x7168, 0x5972, 0x5b75, 0x4a35, 0x5946, 0x5849, 0x592b, 0x6d3c, 0x5854, 0x5c5a, 0x623c, 0x7c6d, 0x6c60, 0x527e, 0x6947, 0x662a, 0x6270, 0x7a3b, 0x752e, 0x7b2a, 0x6c7b, 0x6c3f, 0x7c58, 0x5465, 0x7943, 0x6e62, 0x5769, 0x6d76, 0x5e6d, 0x4c6c, 0x636e, 0x6854, 0x7a78, 0x5d34, 0x6435, 0x5830, 0x5855, 0x746a, 0x4e39, 0x5661, 0x4f52, 0x5036, 0x4e22, 0x736e, 0x7378, 0x5c4c, 0x504b, 0x7c24, 0x4d4a, 0x5754, 0x5e23, 0x6460, 0x6e49, 0x625d, 0x757e, 0x542c, 0x5551, 0x5870, 0x7843, 0x6a57, 0x7557, 0x583f, 0x7d40, 0x6b2d, 0x552a, 0x6728, 0x6e4a, 0x4a67, 0x7863, 0x545d, 0x6a58, 0x7b59, 0x6d77, 0x6535, 0x502d, 0x7171, 0x623d, 0x6348, 0x5955, 0x5f2a, 0x5b3c, 0x7864, 0x717a, 0x6536, 0x736f, 0x7b5a, 0x6160, 0x592c, 0x756b, 0x6036, 0x6948, 0x4b4f, 0x6349, 0x5e6e, 0x623e, 0x5c6f, 0x5625, 0x6271, 0x567e, 0x5921, 0x5840, 0x5c5b, 0x6d3d, 0x5f38, 0x6a25, 0x572d, 0x7379, 0x6d78, 0x7547, 0x614a, 0x6b63, 0x725e, 0x784c, 0x6a59, 0x5346, 0x5b66, 0x752f, 0x4e70, 0x697e, 0x7b36, 0x6272, 0x4f72, 0x7739, 0x5973, 0x614b, 0x5a5d, 0x5a39, 0x6b7b, 0x4b39, 0x6d79, 0x6060, 0x7440, 0x7d3c, 0x5f31, 0x636f, 0x6023, 0x7d39, 0x7031, 0x4d4b, 0x6d3e, 0x5540, 0x6370, 0x6d7a, 0x6964, 0x556d, 0x675d, 0x5476, 0x6537, 0x5b67, 0x623f, 0x6e4b, 0x5774, 0x705d, 0x4e2b, 0x675e, 0x5656, 0x614c, 0x6833, 0x656e, 0x5c22, 0x6050, 0x5535, 0x5521, 0x7b5b, 0x794b, 0x4b73, 0x7425, 0x7a48, 0x5657, 0x6965, 0x7b5c, 0x7d50, 0x7b76, 0x5a25, 0x5b3d, 0x6c62, 0x4d77, 0x705e, 0x7649, 0x5e6f, 0x5331, 0x7c6e, 0x6843, 0x7148, 0x4e71, 0x796d, 0x7274, 0x6436, 0x7539, 0x5c70, 0x6371, 0x6825, 0x723b, 0x5e24, 0x5a4c, 0x4a69, 0x635a, 0x7c59, 0x6a5a, 0x7944, 0x6324, 0x7b5d, 0x6f4a, 0x6844, 0x554c, 0x6b57, 0x592d, 0x7b2b, 0x5359, 0x5522, 0x765e, 0x5a76, 0x6051, 0x6928, 0x7579, 0x7a2f, 0x6b7c, 0x606a, 0x6332, 0x5545, 0x7163, 0x556e, 0x4d4c, 0x6d59, 0x5841, 0x7a6c, 0x716b, 0x7a3c, 0x6662, 0x7a65, 0x627a, 0x4a36, 0x6437, 0x6a5b, 0x757a, 0x7b2c, 0x4f43, 0x6b7d, 0x787a, 0x5f39, 0x6171, 0x5224, 0x757b, 0x505a, 0x505b, 0x6a3e, 0x5931, 0x4a37, 0x5367, 0x7865, 0x5332, 0x6240, 0x725f, 0x4d65, 0x792c, 0x4d4d, 0x6e2e, 0x562e, 0x576a, 0x6760, 0x6b2e, 0x4f59, 0x5c4d, 0x6d7b, 0x5e70, 0x576b, 0x5e25, 0x5f57, 0x5b50, 0x5b51, 0x5523, 0x7032, 0x5c5c, 0x4a68, 0x7866, 0x5c4e, 0x6a5c, 0x5b52, 0x6933, 0x775b, 0x6328, 0x572e, 0x6061, 0x4b3a, 0x6551, 0x505c, 0x5541, 0x584a, 0x6329, 0x6024, 0x6929, 0x5347, 0x5c5d, 0x782e, 0x4c38, 0x502e, 0x5872, 0x634a, 0x4c2f, 0x542d, 0x7651, 0x504c, 0x4a46, 0x5542, 0x4e3a, 0x4a47, 0x7a30, 0x5f58, 0x753a, 0x656b, 0x6f74, 0x5d35, 0x4d2a, 0x6372, 0x7b77, 0x7750, 0x7d3a, 0x7d61, 0x767e, 0x5140, 0x6845, 0x6438, 0x6168, 0x4c41, 0x526d, 0x5b3e, 0x6062, 0x7a49, 0x614d, 0x4a38, 0x7260, 0x7149, 0x5e71, 0x705f, 0x7844, 0x6e4c, 0x5e72, 0x6749, 0x6273, 0x6761, 0x634b, 0x634c, 0x4f78, 0x6f2c, 0x7d7e, 0x7c25, 0x7a31, 0x5f59, 0x6052, 0x745a, 0x714a, 0x4e23, 0x723c, 0x6c63, 0x6025, 0x772b, 0x6b2f, 0x655e, 0x6124, 0x4d2b, 0x5974, 0x6826, 0x4d4e, 0x6169, 0x7c6f, 0x6063, 0x6241, 0x4e24, 0x5e26, 0x6b7e, 0x6b5d, 0x7060, 0x745b, 0x6274, 0x5348, 0x746b, 0x6e35, 0x7558, 0x555f, 0x5665, 0x6b30, 0x7463, 0x634d, 0x7474, 0x7a32, 0x6f75, 0x4a5f, 0x6b31, 0x6d3f, 0x7d49, 0x6426, 0x7924, 0x7033, 0x656c, 0x5167, 0x5947, 0x6457, 0x6a5d, 0x5477, 0x5a3a, 0x5a4d, 0x794c, 0x615a, 0x5b3f, 0x4c45, 0x6c50, 0x4b3b, 0x5e73, 0x692a, 0x5948, 0x6e63, 0x573d, 0x4f44, 0x504d, 0x7c26, 0x717b, 0x7d52, 0x5141, 0x635b, 0x5349, 0x5c4f, 0x4c6d, 0x5e27, 0x663b, 0x6c21, 0x4c39, 0x7b5e, 0x6762, 0x5441, 0x5c28, 0x6242, 0x7358, 0x6553, 0x7359, 0x7346, 0x4d5b, 0x4d2c, 0x7c43, 0x5467, 0x5142, 0x7925, 0x6855, 0x634e, 0x544a, 0x5f5a, 0x7b5f, 0x6763, 0x787b, 0x634f, 0x7530, 0x5867, 0x5949, 0x782f, 0x6f76, 0x5d36, 0x6e2f, 0x4d78, 0x5e38, 0x7c27, 0x777c, 0x7731, 0x4e3b, 0x7421, 0x6e4d, 0x612e, 0x6c43, 0x4f7e, 0x783f, 0x5862, 0x5368, 0x5e28, 0x7464, 0x6c42, 0x5975, 0x7945, 0x5d53, 0x5671, 0x6c7c, 0x7c70, 0x6d40, 0x4a39, 0x6e64, 0x7261, 0x5e39, 0x5672, 0x5e74, 0x5f5b, 0x5b53, 0x7a67, 0x5863, 0x7441, 0x5d37, 0x7275, 0x542e, 0x5673, 0x5d38, 0x4f45, 0x5f5f, 0x723e, 0x7621, 0x6b4b, 0x717c, 0x7347, 0x606b, 0x6d7c, 0x615b, 0x6e65, 0x5e75, 0x7a53, 0x714b, 0x502f, 0x5d39, 0x5143, 0x7531, 0x6a46, 0x7061, 0x762c, 0x7559, 0x706b, 0x5d3a, 0x723f, 0x7745, 0x5b22, 0x7276, 0x4a3a, 0x7775, 0x4b65, 0x6e66, 0x6053, 0x4e25, 0x5658, 0x542f, 0x6949, 0x534e, 0x7442, 0x4b66, 0x7121, 0x6b32, 0x7122, 0x6b33, 0x7034, 0x4b74, 0x5430, 0x7332, 0x7b37, 0x756c, 0x6e67, 0x7432, 0x756d, 0x4f73, 0x7062, 0x6e4e, 0x714c, 0x6538, 0x5775, 0x6373, 0x4f65, 0x4f46, 0x7333, 0x6458, 0x4f79, 0x4f5a, 0x7a4d, 0x6663, 0x7262, 0x756e, 0x4a3b, 0x635c, 0x4e72, 0x5659, 0x6e30, 0x7465, 0x5842, 0x5c50, 0x4c6e, 0x5560, 0x764a, 0x7d4a, 0x5856, 0x744f, 0x5626, 0x5c3e, 0x5b54, 0x5747, 0x727e, 0x714d, 0x6243, 0x5c5e, 0x5c5f, 0x6f2d, 0x662b, 0x795d, 0x6a3f, 0x6f2e, 0x7450, 0x4e73, 0x662c, 0x4e5e, 0x5579, 0x6374, 0x4d50, 0x5538, 0x777d, 0x5c29, 0x5e76, 0x5c2a, 0x7263, 0x6934, 0x525c, 0x6966, 0x6376, 0x674a, 0x504e, 0x5a77, 0x4a3c, 0x6e68, 0x5a5e, 0x7277, 0x627b, 0x4c26, 0x5a3b, 0x6e69, 0x755a, 0x775c, 0x616a, 0x4e41, 0x5431, 0x7d31, 0x663d, 0x7b2d, 0x7867, 0x614e, 0x7762, 0x756f, 0x4f47, 0x5432, 0x4c6f, 0x5468, 0x6e4f, 0x7757, 0x6026, 0x5641, 0x615c, 0x7063, 0x7164, 0x5c71, 0x5627, 0x7475, 0x714e, 0x7264, 0x5030, 0x6c6f, 0x793a, 0x6b35, 0x546d, 0x6244, 0x6967, 0x6b34, 0x6a21, 0x783c, 0x4e26, 0x7946, 0x7c5a, 0x5433, 0x5339, 0x6a5e, 0x692b, 0x6161, 0x534f, 0x7476, 0x6a40, 0x614f, 0x4c3a, 0x6e6a, 0x7064, 0x7334, 0x546e, 0x7240, 0x7165, 0x7443, 0x6054, 0x6b36, 0x5721, 0x4b68, 0x792d, 0x692d, 0x5864, 0x7a33, 0x6245, 0x7c3d, 0x6c44, 0x5831, 0x5c2b, 0x5524, 0x6b69, 0x683b, 0x5857, 0x7b2e, 0x5161, 0x5b40, 0x753e, 0x5e77, 0x4a7b, 0x7746, 0x4f48, 0x6150, 0x6e50, 0x6974, 0x4e74, 0x554d, 0x4f5b, 0x5d3b, 0x4e2c, 0x6968, 0x5434, 0x6447, 0x755b, 0x7a41, 0x5e29, 0x5478, 0x6f77, 0x5333, 0x6b37, 0x6f78, 0x755c, 0x6d4c, 0x5b55, 0x714f, 0x7150, 0x7532, 0x592e, 0x552c, 0x6246, 0x7d23, 0x7b65, 0x5f2b, 0x6275, 0x762d, 0x7533, 0x7035, 0x6125, 0x755d, 0x6c22, 0x6d7d, 0x7534, 0x7b38, 0x5b23, 0x564a, 0x4b59, 0x6554, 0x737a, 0x6b38, 0x6037, 0x576c, 0x716c, 0x652f, 0x5561, 0x576d, 0x5151, 0x6172, 0x6f79, 0x5d3c, 0x765c, 0x7065, 0x7444, 0x6969, 0x737b, 0x546f, 0x4c22, 0x777e, 0x5f3c, 0x6b4d, 0x5037, 0x5642, 0x682d, 0x6f2f, 0x4b25, 0x4b69, 0x7a68, 0x4c46, 0x6667, 0x6a47, 0x5b24, 0x4f49, 0x627c, 0x6f7a, 0x6b5e, 0x7548, 0x545e, 0x6055, 0x6f30, 0x6247, 0x592f, 0x7967, 0x6765, 0x4f4a, 0x6151, 0x6248, 0x6f7b, 0x7a79, 0x5c72, 0x6027, 0x7868, 0x4b6a, 0x4b3c, 0x5662, 0x755e, 0x755f, 0x6e36, 0x6276, 0x534a, 0x6f7c, 0x5144, 0x6f31, 0x5145, 0x505e, 0x5961, 0x6038, 0x4d51, 0x7339, 0x674c, 0x5628, 0x4e27, 0x5435, 0x6448, 0x5334, 0x6b39, 0x4b75, 0x765d, 0x7123, 0x4c47, 0x694a, 0x6170, 0x7560, 0x7b2f, 0x4b51, 0x7b60, 0x7265, 0x6c70, 0x706c, 0x6e6b, 0x694b, 0x4c70, 0x572f, 0x7321, 0x7c75, 0x7124, 0x6056, 0x6f32, 0x7451, 0x7721, 0x7151, 0x4a7c, 0x4a7d, 0x4e4e, 0x7348, 0x733a, 0x6d7e, 0x5a26, 0x606c, 0x784d, 0x4b52, 0x6b4e, 0x7958, 0x7959, 0x4a60, 0x5a4a, 0x4b26, 0x4a48, 0x796e, 0x5b6c, 0x5031, 0x556f, 0x6673, 0x6722, 0x6459, 0x6461, 0x7c44, 0x796f, 0x4f74, 0x7766, 0x4e3c, 0x7445, 0x5c23, 0x5d3d, 0x7446, 0x7821, 0x6856, 0x5b41, 0x7066, 0x6439, 0x766d, 0x792e, 0x5d3e, 0x5730, 0x5868, 0x4b3d, 0x795a, 0x784e, 0x7970, 0x606d, 0x6333, 0x7433, 0x6a42, 0x7266, 0x7036, 0x5b56, 0x6b64, 0x7267, 0x5755, 0x5436, 0x7968, 0x5741, 0x6555, 0x696a, 0x574c, 0x5369, 0x6249, 0x7c5b, 0x4d2d, 0x4c30, 0x6a22, 0x6476, 0x5040, 0x7037, 0x6e21, 0x5776, 0x624a, 0x624b, 0x7a4f, 0x6b5f, 0x564b, 0x7434, 0x6d4d, 0x6452, 0x6a29, 0x643a, 0x7322, 0x4d52, 0x764b, 0x7166, 0x6d41, 0x683c, 0x6e51, 0x7067, 0x624c, 0x642a, 0x7561, 0x6d5a, 0x576e, 0x5171, 0x696b, 0x696c, 0x6064, 0x5a27, 0x5d54, 0x6a23, 0x5643, 0x5674, 0x5a5f, 0x6f33, 0x624d, 0x6f7d, 0x7268, 0x6f45, 0x6767, 0x577d, 0x674e, 0x5f5c, 0x7947, 0x5976, 0x5f2c, 0x565a, 0x5c24, 0x7038, 0x557a, 0x6477, 0x5644, 0x746c, 0x6f7e, 0x7021, 0x5e2a, 0x5a3c, 0x587c, 0x7a54, 0x6c65, 0x7c28, 0x6c66, 0x584b, 0x7b39, 0x6453, 0x4d79, 0x4f53, 0x4a6a, 0x4f54, 0x783d, 0x7447, 0x6a5f, 0x795b, 0x5437, 0x6b65, 0x6152, 0x6a24, 0x7a42, 0x7b61, 0x7a6d, 0x7022, 0x4c71, 0x7a23, 0x6277, 0x624e, 0x6975, 0x616b, 0x6768, 0x6857, 0x5a78, 0x544b, 0x7776, 0x5645, 0x5469, 0x7a7a, 0x4c72, 0x775d, 0x5e3a, 0x4e28, 0x7039, 0x647e, 0x6449, 0x6454, 0x6a43, 0x6f34, 0x573e, 0x7b62, 0x4d53, 0x6f35, 0x7a69, 0x7926, 0x5f3d, 0x7747, 0x787d, 0x787c, 0x5e2b, 0x5b68, 0x635d, 0x6162, 0x5146, 0x7650, 0x6b66, 0x5a79, 0x6c47, 0x5e78, 0x7869, 0x635e, 0x4e75, 0x7a43, 0x6557, 0x6c48, 0x7349, 0x643b, 0x662e, 0x6f36, 0x5c3f, 0x4e3d, 0x5843, 0x504f, 0x4f7a, 0x734a, 0x6057, 0x5147, 0x692e, 0x683d, 0x7a44, 0x624f, 0x7a45, 0x7938, 0x5c60, 0x7b30, 0x5829, 0x655f, 0x7927, 0x766e, 0x764c, 0x6278, 0x6c71, 0x5a60, 0x7152, 0x524c, 0x4f4b, 0x4a3d, 0x5d3f, 0x766f, 0x5e79, 0x7a34, 0x552d, 0x7167, 0x5e3e, 0x5c40, 0x5148, 0x5149, 0x783e, 0x4b76, 0x5479, 0x7562, 0x6153, 0x5869, 0x787e, 0x4f4c, 0x7d24, 0x4e76, 0x7a50, 0x4c73, 0x663e, 0x762e, 0x5570, 0x514a, 0x7c3e, 0x5571, 0x4d69, 0x7a35, 0x6250, 0x7477, 0x4d54, 0x6723, 0x5b25, 0x6251, 0x5722, 0x7763, 0x6a26, 0x5021, 0x4e5a, 0x7b6b, 0x5b26, 0x5b5e, 0x5865, 0x6a60, 0x582a, 0x6560, 0x565b, 0x6f46, 0x786a, 0x6455, 0x4e77, 0x6058, 0x576f, 0x746d, 0x4d66, 0x4c74, 0x7563, 0x644a, 0x5c61, 0x7948, 0x7c3f, 0x6827, 0x5844, 0x4b3e, 0x5c2e, 0x5777, 0x7068, 0x5d40, 0x4f4d, 0x5c73, 0x5930, 0x6669, 0x643c, 0x6a44, 0x646c, 0x6465, 0x7b78, 0x4c3b, 0x643d, 0x4d5c, 0x5977, 0x5d5f, 0x6d4e, 0x5950, 0x6523, 0x794d, 0x4d2e, 0x4f4e, 0x762f, 0x7d53, 0x6b6d, 0x565c, 0x6524, 0x5536, 0x565d, 0x7969, 0x6724, 0x5663, 0x514b, 0x5664, 0x5572, 0x5e7a, 0x5778, 0x586a, 0x4f55, 0x587d, 0x582b, 0x7d4b, 0x7c5c, 0x6028, 0x5573, 0x7d59, 0x4c23, 0x5979, 0x536a, 0x7575, 0x6f47, 0x535a, 0x5a3d, 0x6828, 0x5c2f, 0x7023, 0x4d55, 0x6029, 0x5e2c, 0x703a, 0x6e31, 0x6e32, 0x764d, 0x6e52, 0x5646, 0x6065, 0x733b, 0x6561, 0x644b, 0x5723, 0x5b42, 0x4a7e, 0x4f4f, 0x3021, 0x3022, 0x3023, 0x3024, 0x3025, 0x3026, 0x3027, 0x3028, 0x3029, 0x302a, 0x302b, 0x302c, 0x302d, 0x302e, 0x302f, 0x3030, 0x3031, 0x3032, 0x3033, 0x3034, 0x3035, 0x3036, 0x3037, 0x3038, 0x3039, 0x303a, 0x303b, 0x303c, 0x303d, 0x303e, 0x303f, 0x3040, 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048, 0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058, 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f, 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, 0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e, 0x306f, 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078, 0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e, 0x3121, 0x3122, 0x3123, 0x3124, 0x3125, 0x3126, 0x3127, 0x3128, 0x3129, 0x312a, 0x312b, 0x312c, 0x312d, 0x312e, 0x312f, 0x3130, 0x3131, 0x3132, 0x3133, 0x3134, 0x3135, 0x3136, 0x3137, 0x3138, 0x3139, 0x313a, 0x313b, 0x313c, 0x313d, 0x313e, 0x313f, 0x3140, 0x3141, 0x3142, 0x3143, 0x3144, 0x3145, 0x3146, 0x3147, 0x3148, 0x3149, 0x314a, 0x314b, 0x314c, 0x314d, 0x314e, 0x314f, 0x3150, 0x3151, 0x3152, 0x3153, 0x3154, 0x3155, 0x3156, 0x3157, 0x3158, 0x3159, 0x315a, 0x315b, 0x315c, 0x315d, 0x315e, 0x315f, 0x3160, 0x3161, 0x3162, 0x3163, 0x3164, 0x3165, 0x3166, 0x3167, 0x3168, 0x3169, 0x316a, 0x316b, 0x316c, 0x316d, 0x316e, 0x316f, 0x3170, 0x3171, 0x3172, 0x3173, 0x3174, 0x3175, 0x3176, 0x3177, 0x3178, 0x3179, 0x317a, 0x317b, 0x317c, 0x317d, 0x317e, 0x3221, 0x3222, 0x3223, 0x3224, 0x3225, 0x3226, 0x3227, 0x3228, 0x3229, 0x322a, 0x322b, 0x322c, 0x322d, 0x322e, 0x322f, 0x3230, 0x3231, 0x3232, 0x3233, 0x3234, 0x3235, 0x3236, 0x3237, 0x3238, 0x3239, 0x323a, 0x323b, 0x323c, 0x323d, 0x323e, 0x323f, 0x3240, 0x3241, 0x3242, 0x3243, 0x3244, 0x3245, 0x3246, 0x3247, 0x3248, 0x3249, 0x324a, 0x324b, 0x324c, 0x324d, 0x324e, 0x324f, 0x3250, 0x3251, 0x3252, 0x3253, 0x3254, 0x3255, 0x3256, 0x3257, 0x3258, 0x3259, 0x325a, 0x325b, 0x325c, 0x325d, 0x325e, 0x325f, 0x3260, 0x3261, 0x3262, 0x3263, 0x3264, 0x3265, 0x3266, 0x3267, 0x3268, 0x3269, 0x326a, 0x326b, 0x326c, 0x326d, 0x326e, 0x326f, 0x3270, 0x3271, 0x3272, 0x3273, 0x3274, 0x3275, 0x3276, 0x3277, 0x3278, 0x3279, 0x327a, 0x327b, 0x327c, 0x327d, 0x327e, 0x3321, 0x3322, 0x3323, 0x3324, 0x3325, 0x3326, 0x3327, 0x3328, 0x3329, 0x332a, 0x332b, 0x332c, 0x332d, 0x332e, 0x332f, 0x3330, 0x3331, 0x3332, 0x3333, 0x3334, 0x3335, 0x3336, 0x3337, 0x3338, 0x3339, 0x333a, 0x333b, 0x333c, 0x333d, 0x333e, 0x333f, 0x3340, 0x3341, 0x3342, 0x3343, 0x3344, 0x3345, 0x3346, 0x3347, 0x3348, 0x3349, 0x334a, 0x334b, 0x334c, 0x334d, 0x334e, 0x334f, 0x3350, 0x3351, 0x3352, 0x3353, 0x3354, 0x3355, 0x3356, 0x3357, 0x3358, 0x3359, 0x335a, 0x335b, 0x335c, 0x335d, 0x335e, 0x335f, 0x3360, 0x3361, 0x3362, 0x3363, 0x3364, 0x3365, 0x3366, 0x3367, 0x3368, 0x3369, 0x336a, 0x336b, 0x336c, 0x336d, 0x336e, 0x336f, 0x3370, 0x3371, 0x3372, 0x3373, 0x3374, 0x3375, 0x3376, 0x3377, 0x3378, 0x3379, 0x337a, 0x337b, 0x337c, 0x337d, 0x337e, 0x3421, 0x3422, 0x3423, 0x3424, 0x3425, 0x3426, 0x3427, 0x3428, 0x3429, 0x342a, 0x342b, 0x342c, 0x342d, 0x342e, 0x342f, 0x3430, 0x3431, 0x3432, 0x3433, 0x3434, 0x3435, 0x3436, 0x3437, 0x3438, 0x3439, 0x343a, 0x343b, 0x343c, 0x343d, 0x343e, 0x343f, 0x3440, 0x3441, 0x3442, 0x3443, 0x3444, 0x3445, 0x3446, 0x3447, 0x3448, 0x3449, 0x344a, 0x344b, 0x344c, 0x344d, 0x344e, 0x344f, 0x3450, 0x3451, 0x3452, 0x3453, 0x3454, 0x3455, 0x3456, 0x3457, 0x3458, 0x3459, 0x345a, 0x345b, 0x345c, 0x345d, 0x345e, 0x345f, 0x3460, 0x3461, 0x3462, 0x3463, 0x3464, 0x3465, 0x3466, 0x3467, 0x3468, 0x3469, 0x346a, 0x346b, 0x346c, 0x346d, 0x346e, 0x346f, 0x3470, 0x3471, 0x3472, 0x3473, 0x3474, 0x3475, 0x3476, 0x3477, 0x3478, 0x3479, 0x347a, 0x347b, 0x347c, 0x347d, 0x347e, 0x3521, 0x3522, 0x3523, 0x3524, 0x3525, 0x3526, 0x3527, 0x3528, 0x3529, 0x352a, 0x352b, 0x352c, 0x352d, 0x352e, 0x352f, 0x3530, 0x3531, 0x3532, 0x3533, 0x3534, 0x3535, 0x3536, 0x3537, 0x3538, 0x3539, 0x353a, 0x353b, 0x353c, 0x353d, 0x353e, 0x353f, 0x3540, 0x3541, 0x3542, 0x3543, 0x3544, 0x3545, 0x3546, 0x3547, 0x3548, 0x3549, 0x354a, 0x354b, 0x354c, 0x354d, 0x354e, 0x354f, 0x3550, 0x3551, 0x3552, 0x3553, 0x3554, 0x3555, 0x3556, 0x3557, 0x3558, 0x3559, 0x355a, 0x355b, 0x355c, 0x355d, 0x355e, 0x355f, 0x3560, 0x3561, 0x3562, 0x3563, 0x3564, 0x3565, 0x3566, 0x3567, 0x3568, 0x3569, 0x356a, 0x356b, 0x356c, 0x356d, 0x356e, 0x356f, 0x3570, 0x3571, 0x3572, 0x3573, 0x3574, 0x3575, 0x3576, 0x3577, 0x3578, 0x3579, 0x357a, 0x357b, 0x357c, 0x357d, 0x357e, 0x3621, 0x3622, 0x3623, 0x3624, 0x3625, 0x3626, 0x3627, 0x3628, 0x3629, 0x362a, 0x362b, 0x362c, 0x362d, 0x362e, 0x362f, 0x3630, 0x3631, 0x3632, 0x3633, 0x3634, 0x3635, 0x3636, 0x3637, 0x3638, 0x3639, 0x363a, 0x363b, 0x363c, 0x363d, 0x363e, 0x363f, 0x3640, 0x3641, 0x3642, 0x3643, 0x3644, 0x3645, 0x3646, 0x3647, 0x3648, 0x3649, 0x364a, 0x364b, 0x364c, 0x364d, 0x364e, 0x364f, 0x3650, 0x3651, 0x3652, 0x3653, 0x3654, 0x3655, 0x3656, 0x3657, 0x3658, 0x3659, 0x365a, 0x365b, 0x365c, 0x365d, 0x365e, 0x365f, 0x3660, 0x3661, 0x3662, 0x3663, 0x3664, 0x3665, 0x3666, 0x3667, 0x3668, 0x3669, 0x366a, 0x366b, 0x366c, 0x366d, 0x366e, 0x366f, 0x3670, 0x3671, 0x3672, 0x3673, 0x3674, 0x3675, 0x3676, 0x3677, 0x3678, 0x3679, 0x367a, 0x367b, 0x367c, 0x367d, 0x367e, 0x3721, 0x3722, 0x3723, 0x3724, 0x3725, 0x3726, 0x3727, 0x3728, 0x3729, 0x372a, 0x372b, 0x372c, 0x372d, 0x372e, 0x372f, 0x3730, 0x3731, 0x3732, 0x3733, 0x3734, 0x3735, 0x3736, 0x3737, 0x3738, 0x3739, 0x373a, 0x373b, 0x373c, 0x373d, 0x373e, 0x373f, 0x3740, 0x3741, 0x3742, 0x3743, 0x3744, 0x3745, 0x3746, 0x3747, 0x3748, 0x3749, 0x374a, 0x374b, 0x374c, 0x374d, 0x374e, 0x374f, 0x3750, 0x3751, 0x3752, 0x3753, 0x3754, 0x3755, 0x3756, 0x3757, 0x3758, 0x3759, 0x375a, 0x375b, 0x375c, 0x375d, 0x375e, 0x375f, 0x3760, 0x3761, 0x3762, 0x3763, 0x3764, 0x3765, 0x3766, 0x3767, 0x3768, 0x3769, 0x376a, 0x376b, 0x376c, 0x376d, 0x376e, 0x376f, 0x3770, 0x3771, 0x3772, 0x3773, 0x3774, 0x3775, 0x3776, 0x3777, 0x3778, 0x3779, 0x377a, 0x377b, 0x377c, 0x377d, 0x377e, 0x3821, 0x3822, 0x3823, 0x3824, 0x3825, 0x3826, 0x3827, 0x3828, 0x3829, 0x382a, 0x382b, 0x382c, 0x382d, 0x382e, 0x382f, 0x3830, 0x3831, 0x3832, 0x3833, 0x3834, 0x3835, 0x3836, 0x3837, 0x3838, 0x3839, 0x383a, 0x383b, 0x383c, 0x383d, 0x383e, 0x383f, 0x3840, 0x3841, 0x3842, 0x3843, 0x3844, 0x3845, 0x3846, 0x3847, 0x3848, 0x3849, 0x384a, 0x384b, 0x384c, 0x384d, 0x384e, 0x384f, 0x3850, 0x3851, 0x3852, 0x3853, 0x3854, 0x3855, 0x3856, 0x3857, 0x3858, 0x3859, 0x385a, 0x385b, 0x385c, 0x385d, 0x385e, 0x385f, 0x3860, 0x3861, 0x3862, 0x3863, 0x3864, 0x3865, 0x3866, 0x3867, 0x3868, 0x3869, 0x386a, 0x386b, 0x386c, 0x386d, 0x386e, 0x386f, 0x3870, 0x3871, 0x3872, 0x3873, 0x3874, 0x3875, 0x3876, 0x3877, 0x3878, 0x3879, 0x387a, 0x387b, 0x387c, 0x387d, 0x387e, 0x3921, 0x3922, 0x3923, 0x3924, 0x3925, 0x3926, 0x3927, 0x3928, 0x3929, 0x392a, 0x392b, 0x392c, 0x392d, 0x392e, 0x392f, 0x3930, 0x3931, 0x3932, 0x3933, 0x3934, 0x3935, 0x3936, 0x3937, 0x3938, 0x3939, 0x393a, 0x393b, 0x393c, 0x393d, 0x393e, 0x393f, 0x3940, 0x3941, 0x3942, 0x3943, 0x3944, 0x3945, 0x3946, 0x3947, 0x3948, 0x3949, 0x394a, 0x394b, 0x394c, 0x394d, 0x394e, 0x394f, 0x3950, 0x3951, 0x3952, 0x3953, 0x3954, 0x3955, 0x3956, 0x3957, 0x3958, 0x3959, 0x395a, 0x395b, 0x395c, 0x395d, 0x395e, 0x395f, 0x3960, 0x3961, 0x3962, 0x3963, 0x3964, 0x3965, 0x3966, 0x3967, 0x3968, 0x3969, 0x396a, 0x396b, 0x396c, 0x396d, 0x396e, 0x396f, 0x3970, 0x3971, 0x3972, 0x3973, 0x3974, 0x3975, 0x3976, 0x3977, 0x3978, 0x3979, 0x397a, 0x397b, 0x397c, 0x397d, 0x397e, 0x3a21, 0x3a22, 0x3a23, 0x3a24, 0x3a25, 0x3a26, 0x3a27, 0x3a28, 0x3a29, 0x3a2a, 0x3a2b, 0x3a2c, 0x3a2d, 0x3a2e, 0x3a2f, 0x3a30, 0x3a31, 0x3a32, 0x3a33, 0x3a34, 0x3a35, 0x3a36, 0x3a37, 0x3a38, 0x3a39, 0x3a3a, 0x3a3b, 0x3a3c, 0x3a3d, 0x3a3e, 0x3a3f, 0x3a40, 0x3a41, 0x3a42, 0x3a43, 0x3a44, 0x3a45, 0x3a46, 0x3a47, 0x3a48, 0x3a49, 0x3a4a, 0x3a4b, 0x3a4c, 0x3a4d, 0x3a4e, 0x3a4f, 0x3a50, 0x3a51, 0x3a52, 0x3a53, 0x3a54, 0x3a55, 0x3a56, 0x3a57, 0x3a58, 0x3a59, 0x3a5a, 0x3a5b, 0x3a5c, 0x3a5d, 0x3a5e, 0x3a5f, 0x3a60, 0x3a61, 0x3a62, 0x3a63, 0x3a64, 0x3a65, 0x3a66, 0x3a67, 0x3a68, 0x3a69, 0x3a6a, 0x3a6b, 0x3a6c, 0x3a6d, 0x3a6e, 0x3a6f, 0x3a70, 0x3a71, 0x3a72, 0x3a73, 0x3a74, 0x3a75, 0x3a76, 0x3a77, 0x3a78, 0x3a79, 0x3a7a, 0x3a7b, 0x3a7c, 0x3a7d, 0x3a7e, 0x3b21, 0x3b22, 0x3b23, 0x3b24, 0x3b25, 0x3b26, 0x3b27, 0x3b28, 0x3b29, 0x3b2a, 0x3b2b, 0x3b2c, 0x3b2d, 0x3b2e, 0x3b2f, 0x3b30, 0x3b31, 0x3b32, 0x3b33, 0x3b34, 0x3b35, 0x3b36, 0x3b37, 0x3b38, 0x3b39, 0x3b3a, 0x3b3b, 0x3b3c, 0x3b3d, 0x3b3e, 0x3b3f, 0x3b40, 0x3b41, 0x3b42, 0x3b43, 0x3b44, 0x3b45, 0x3b46, 0x3b47, 0x3b48, 0x3b49, 0x3b4a, 0x3b4b, 0x3b4c, 0x3b4d, 0x3b4e, 0x3b4f, 0x3b50, 0x3b51, 0x3b52, 0x3b53, 0x3b54, 0x3b55, 0x3b56, 0x3b57, 0x3b58, 0x3b59, 0x3b5a, 0x3b5b, 0x3b5c, 0x3b5d, 0x3b5e, 0x3b5f, 0x3b60, 0x3b61, 0x3b62, 0x3b63, 0x3b64, 0x3b65, 0x3b66, 0x3b67, 0x3b68, 0x3b69, 0x3b6a, 0x3b6b, 0x3b6c, 0x3b6d, 0x3b6e, 0x3b6f, 0x3b70, 0x3b71, 0x3b72, 0x3b73, 0x3b74, 0x3b75, 0x3b76, 0x3b77, 0x3b78, 0x3b79, 0x3b7a, 0x3b7b, 0x3b7c, 0x3b7d, 0x3b7e, 0x3c21, 0x3c22, 0x3c23, 0x3c24, 0x3c25, 0x3c26, 0x3c27, 0x3c28, 0x3c29, 0x3c2a, 0x3c2b, 0x3c2c, 0x3c2d, 0x3c2e, 0x3c2f, 0x3c30, 0x3c31, 0x3c32, 0x3c33, 0x3c34, 0x3c35, 0x3c36, 0x3c37, 0x3c38, 0x3c39, 0x3c3a, 0x3c3b, 0x3c3c, 0x3c3d, 0x3c3e, 0x3c3f, 0x3c40, 0x3c41, 0x3c42, 0x3c43, 0x3c44, 0x3c45, 0x3c46, 0x3c47, 0x3c48, 0x3c49, 0x3c4a, 0x3c4b, 0x3c4c, 0x3c4d, 0x3c4e, 0x3c4f, 0x3c50, 0x3c51, 0x3c52, 0x3c53, 0x3c54, 0x3c55, 0x3c56, 0x3c57, 0x3c58, 0x3c59, 0x3c5a, 0x3c5b, 0x3c5c, 0x3c5d, 0x3c5e, 0x3c5f, 0x3c60, 0x3c61, 0x3c62, 0x3c63, 0x3c64, 0x3c65, 0x3c66, 0x3c67, 0x3c68, 0x3c69, 0x3c6a, 0x3c6b, 0x3c6c, 0x3c6d, 0x3c6e, 0x3c6f, 0x3c70, 0x3c71, 0x3c72, 0x3c73, 0x3c74, 0x3c75, 0x3c76, 0x3c77, 0x3c78, 0x3c79, 0x3c7a, 0x3c7b, 0x3c7c, 0x3c7d, 0x3c7e, 0x3d21, 0x3d22, 0x3d23, 0x3d24, 0x3d25, 0x3d26, 0x3d27, 0x3d28, 0x3d29, 0x3d2a, 0x3d2b, 0x3d2c, 0x3d2d, 0x3d2e, 0x3d2f, 0x3d30, 0x3d31, 0x3d32, 0x3d33, 0x3d34, 0x3d35, 0x3d36, 0x3d37, 0x3d38, 0x3d39, 0x3d3a, 0x3d3b, 0x3d3c, 0x3d3d, 0x3d3e, 0x3d3f, 0x3d40, 0x3d41, 0x3d42, 0x3d43, 0x3d44, 0x3d45, 0x3d46, 0x3d47, 0x3d48, 0x3d49, 0x3d4a, 0x3d4b, 0x3d4c, 0x3d4d, 0x3d4e, 0x3d4f, 0x3d50, 0x3d51, 0x3d52, 0x3d53, 0x3d54, 0x3d55, 0x3d56, 0x3d57, 0x3d58, 0x3d59, 0x3d5a, 0x3d5b, 0x3d5c, 0x3d5d, 0x3d5e, 0x3d5f, 0x3d60, 0x3d61, 0x3d62, 0x3d63, 0x3d64, 0x3d65, 0x3d66, 0x3d67, 0x3d68, 0x3d69, 0x3d6a, 0x3d6b, 0x3d6c, 0x3d6d, 0x3d6e, 0x3d6f, 0x3d70, 0x3d71, 0x3d72, 0x3d73, 0x3d74, 0x3d75, 0x3d76, 0x3d77, 0x3d78, 0x3d79, 0x3d7a, 0x3d7b, 0x3d7c, 0x3d7d, 0x3d7e, 0x3e21, 0x3e22, 0x3e23, 0x3e24, 0x3e25, 0x3e26, 0x3e27, 0x3e28, 0x3e29, 0x3e2a, 0x3e2b, 0x3e2c, 0x3e2d, 0x3e2e, 0x3e2f, 0x3e30, 0x3e31, 0x3e32, 0x3e33, 0x3e34, 0x3e35, 0x3e36, 0x3e37, 0x3e38, 0x3e39, 0x3e3a, 0x3e3b, 0x3e3c, 0x3e3d, 0x3e3e, 0x3e3f, 0x3e40, 0x3e41, 0x3e42, 0x3e43, 0x3e44, 0x3e45, 0x3e46, 0x3e47, 0x3e48, 0x3e49, 0x3e4a, 0x3e4b, 0x3e4c, 0x3e4d, 0x3e4e, 0x3e4f, 0x3e50, 0x3e51, 0x3e52, 0x3e53, 0x3e54, 0x3e55, 0x3e56, 0x3e57, 0x3e58, 0x3e59, 0x3e5a, 0x3e5b, 0x3e5c, 0x3e5d, 0x3e5e, 0x3e5f, 0x3e60, 0x3e61, 0x3e62, 0x3e63, 0x3e64, 0x3e65, 0x3e66, 0x3e67, 0x3e68, 0x3e69, 0x3e6a, 0x3e6b, 0x3e6c, 0x3e6d, 0x3e6e, 0x3e6f, 0x3e70, 0x3e71, 0x3e72, 0x3e73, 0x3e74, 0x3e75, 0x3e76, 0x3e77, 0x3e78, 0x3e79, 0x3e7a, 0x3e7b, 0x3e7c, 0x3e7d, 0x3e7e, 0x3f21, 0x3f22, 0x3f23, 0x3f24, 0x3f25, 0x3f26, 0x3f27, 0x3f28, 0x3f29, 0x3f2a, 0x3f2b, 0x3f2c, 0x3f2d, 0x3f2e, 0x3f2f, 0x3f30, 0x3f31, 0x3f32, 0x3f33, 0x3f34, 0x3f35, 0x3f36, 0x3f37, 0x3f38, 0x3f39, 0x3f3a, 0x3f3b, 0x3f3c, 0x3f3d, 0x3f3e, 0x3f3f, 0x3f40, 0x3f41, 0x3f42, 0x3f43, 0x3f44, 0x3f45, 0x3f46, 0x3f47, 0x3f48, 0x3f49, 0x3f4a, 0x3f4b, 0x3f4c, 0x3f4d, 0x3f4e, 0x3f4f, 0x3f50, 0x3f51, 0x3f52, 0x3f53, 0x3f54, 0x3f55, 0x3f56, 0x3f57, 0x3f58, 0x3f59, 0x3f5a, 0x3f5b, 0x3f5c, 0x3f5d, 0x3f5e, 0x3f5f, 0x3f60, 0x3f61, 0x3f62, 0x3f63, 0x3f64, 0x3f65, 0x3f66, 0x3f67, 0x3f68, 0x3f69, 0x3f6a, 0x3f6b, 0x3f6c, 0x3f6d, 0x3f6e, 0x3f6f, 0x3f70, 0x3f71, 0x3f72, 0x3f73, 0x3f74, 0x3f75, 0x3f76, 0x3f77, 0x3f78, 0x3f79, 0x3f7a, 0x3f7b, 0x3f7c, 0x3f7d, 0x3f7e, 0x4021, 0x4022, 0x4023, 0x4024, 0x4025, 0x4026, 0x4027, 0x4028, 0x4029, 0x402a, 0x402b, 0x402c, 0x402d, 0x402e, 0x402f, 0x4030, 0x4031, 0x4032, 0x4033, 0x4034, 0x4035, 0x4036, 0x4037, 0x4038, 0x4039, 0x403a, 0x403b, 0x403c, 0x403d, 0x403e, 0x403f, 0x4040, 0x4041, 0x4042, 0x4043, 0x4044, 0x4045, 0x4046, 0x4047, 0x4048, 0x4049, 0x404a, 0x404b, 0x404c, 0x404d, 0x404e, 0x404f, 0x4050, 0x4051, 0x4052, 0x4053, 0x4054, 0x4055, 0x4056, 0x4057, 0x4058, 0x4059, 0x405a, 0x405b, 0x405c, 0x405d, 0x405e, 0x405f, 0x4060, 0x4061, 0x4062, 0x4063, 0x4064, 0x4065, 0x4066, 0x4067, 0x4068, 0x4069, 0x406a, 0x406b, 0x406c, 0x406d, 0x406e, 0x406f, 0x4070, 0x4071, 0x4072, 0x4073, 0x4074, 0x4075, 0x4076, 0x4077, 0x4078, 0x4079, 0x407a, 0x407b, 0x407c, 0x407d, 0x407e, 0x4121, 0x4122, 0x4123, 0x4124, 0x4125, 0x4126, 0x4127, 0x4128, 0x4129, 0x412a, 0x412b, 0x412c, 0x412d, 0x412e, 0x412f, 0x4130, 0x4131, 0x4132, 0x4133, 0x4134, 0x4135, 0x4136, 0x4137, 0x4138, 0x4139, 0x413a, 0x413b, 0x413c, 0x413d, 0x413e, 0x413f, 0x4140, 0x4141, 0x4142, 0x4143, 0x4144, 0x4145, 0x4146, 0x4147, 0x4148, 0x4149, 0x414a, 0x414b, 0x414c, 0x414d, 0x414e, 0x414f, 0x4150, 0x4151, 0x4152, 0x4153, 0x4154, 0x4155, 0x4156, 0x4157, 0x4158, 0x4159, 0x415a, 0x415b, 0x415c, 0x415d, 0x415e, 0x415f, 0x4160, 0x4161, 0x4162, 0x4163, 0x4164, 0x4165, 0x4166, 0x4167, 0x4168, 0x4169, 0x416a, 0x416b, 0x416c, 0x416d, 0x416e, 0x416f, 0x4170, 0x4171, 0x4172, 0x4173, 0x4174, 0x4175, 0x4176, 0x4177, 0x4178, 0x4179, 0x417a, 0x417b, 0x417c, 0x417d, 0x417e, 0x4221, 0x4222, 0x4223, 0x4224, 0x4225, 0x4226, 0x4227, 0x4228, 0x4229, 0x422a, 0x422b, 0x422c, 0x422d, 0x422e, 0x422f, 0x4230, 0x4231, 0x4232, 0x4233, 0x4234, 0x4235, 0x4236, 0x4237, 0x4238, 0x4239, 0x423a, 0x423b, 0x423c, 0x423d, 0x423e, 0x423f, 0x4240, 0x4241, 0x4242, 0x4243, 0x4244, 0x4245, 0x4246, 0x4247, 0x4248, 0x4249, 0x424a, 0x424b, 0x424c, 0x424d, 0x424e, 0x424f, 0x4250, 0x4251, 0x4252, 0x4253, 0x4254, 0x4255, 0x4256, 0x4257, 0x4258, 0x4259, 0x425a, 0x425b, 0x425c, 0x425d, 0x425e, 0x425f, 0x4260, 0x4261, 0x4262, 0x4263, 0x4264, 0x4265, 0x4266, 0x4267, 0x4268, 0x4269, 0x426a, 0x426b, 0x426c, 0x426d, 0x426e, 0x426f, 0x4270, 0x4271, 0x4272, 0x4273, 0x4274, 0x4275, 0x4276, 0x4277, 0x4278, 0x4279, 0x427a, 0x427b, 0x427c, 0x427d, 0x427e, 0x4321, 0x4322, 0x4323, 0x4324, 0x4325, 0x4326, 0x4327, 0x4328, 0x4329, 0x432a, 0x432b, 0x432c, 0x432d, 0x432e, 0x432f, 0x4330, 0x4331, 0x4332, 0x4333, 0x4334, 0x4335, 0x4336, 0x4337, 0x4338, 0x4339, 0x433a, 0x433b, 0x433c, 0x433d, 0x433e, 0x433f, 0x4340, 0x4341, 0x4342, 0x4343, 0x4344, 0x4345, 0x4346, 0x4347, 0x4348, 0x4349, 0x434a, 0x434b, 0x434c, 0x434d, 0x434e, 0x434f, 0x4350, 0x4351, 0x4352, 0x4353, 0x4354, 0x4355, 0x4356, 0x4357, 0x4358, 0x4359, 0x435a, 0x435b, 0x435c, 0x435d, 0x435e, 0x435f, 0x4360, 0x4361, 0x4362, 0x4363, 0x4364, 0x4365, 0x4366, 0x4367, 0x4368, 0x4369, 0x436a, 0x436b, 0x436c, 0x436d, 0x436e, 0x436f, 0x4370, 0x4371, 0x4372, 0x4373, 0x4374, 0x4375, 0x4376, 0x4377, 0x4378, 0x4379, 0x437a, 0x437b, 0x437c, 0x437d, 0x437e, 0x4421, 0x4422, 0x4423, 0x4424, 0x4425, 0x4426, 0x4427, 0x4428, 0x4429, 0x442a, 0x442b, 0x442c, 0x442d, 0x442e, 0x442f, 0x4430, 0x4431, 0x4432, 0x4433, 0x4434, 0x4435, 0x4436, 0x4437, 0x4438, 0x4439, 0x443a, 0x443b, 0x443c, 0x443d, 0x443e, 0x443f, 0x4440, 0x4441, 0x4442, 0x4443, 0x4444, 0x4445, 0x4446, 0x4447, 0x4448, 0x4449, 0x444a, 0x444b, 0x444c, 0x444d, 0x444e, 0x444f, 0x4450, 0x4451, 0x4452, 0x4453, 0x4454, 0x4455, 0x4456, 0x4457, 0x4458, 0x4459, 0x445a, 0x445b, 0x445c, 0x445d, 0x445e, 0x445f, 0x4460, 0x4461, 0x4462, 0x4463, 0x4464, 0x4465, 0x4466, 0x4467, 0x4468, 0x4469, 0x446a, 0x446b, 0x446c, 0x446d, 0x446e, 0x446f, 0x4470, 0x4471, 0x4472, 0x4473, 0x4474, 0x4475, 0x4476, 0x4477, 0x4478, 0x4479, 0x447a, 0x447b, 0x447c, 0x447d, 0x447e, 0x4521, 0x4522, 0x4523, 0x4524, 0x4525, 0x4526, 0x4527, 0x4528, 0x4529, 0x452a, 0x452b, 0x452c, 0x452d, 0x452e, 0x452f, 0x4530, 0x4531, 0x4532, 0x4533, 0x4534, 0x4535, 0x4536, 0x4537, 0x4538, 0x4539, 0x453a, 0x453b, 0x453c, 0x453d, 0x453e, 0x453f, 0x4540, 0x4541, 0x4542, 0x4543, 0x4544, 0x4545, 0x4546, 0x4547, 0x4548, 0x4549, 0x454a, 0x454b, 0x454c, 0x454d, 0x454e, 0x454f, 0x4550, 0x4551, 0x4552, 0x4553, 0x4554, 0x4555, 0x4556, 0x4557, 0x4558, 0x4559, 0x455a, 0x455b, 0x455c, 0x455d, 0x455e, 0x455f, 0x4560, 0x4561, 0x4562, 0x4563, 0x4564, 0x4565, 0x4566, 0x4567, 0x4568, 0x4569, 0x456a, 0x456b, 0x456c, 0x456d, 0x456e, 0x456f, 0x4570, 0x4571, 0x4572, 0x4573, 0x4574, 0x4575, 0x4576, 0x4577, 0x4578, 0x4579, 0x457a, 0x457b, 0x457c, 0x457d, 0x457e, 0x4621, 0x4622, 0x4623, 0x4624, 0x4625, 0x4626, 0x4627, 0x4628, 0x4629, 0x462a, 0x462b, 0x462c, 0x462d, 0x462e, 0x462f, 0x4630, 0x4631, 0x4632, 0x4633, 0x4634, 0x4635, 0x4636, 0x4637, 0x4638, 0x4639, 0x463a, 0x463b, 0x463c, 0x463d, 0x463e, 0x463f, 0x4640, 0x4641, 0x4642, 0x4643, 0x4644, 0x4645, 0x4646, 0x4647, 0x4648, 0x4649, 0x464a, 0x464b, 0x464c, 0x464d, 0x464e, 0x464f, 0x4650, 0x4651, 0x4652, 0x4653, 0x4654, 0x4655, 0x4656, 0x4657, 0x4658, 0x4659, 0x465a, 0x465b, 0x465c, 0x465d, 0x465e, 0x465f, 0x4660, 0x4661, 0x4662, 0x4663, 0x4664, 0x4665, 0x4666, 0x4667, 0x4668, 0x4669, 0x466a, 0x466b, 0x466c, 0x466d, 0x466e, 0x466f, 0x4670, 0x4671, 0x4672, 0x4673, 0x4674, 0x4675, 0x4676, 0x4677, 0x4678, 0x4679, 0x467a, 0x467b, 0x467c, 0x467d, 0x467e, 0x4721, 0x4722, 0x4723, 0x4724, 0x4725, 0x4726, 0x4727, 0x4728, 0x4729, 0x472a, 0x472b, 0x472c, 0x472d, 0x472e, 0x472f, 0x4730, 0x4731, 0x4732, 0x4733, 0x4734, 0x4735, 0x4736, 0x4737, 0x4738, 0x4739, 0x473a, 0x473b, 0x473c, 0x473d, 0x473e, 0x473f, 0x4740, 0x4741, 0x4742, 0x4743, 0x4744, 0x4745, 0x4746, 0x4747, 0x4748, 0x4749, 0x474a, 0x474b, 0x474c, 0x474d, 0x474e, 0x474f, 0x4750, 0x4751, 0x4752, 0x4753, 0x4754, 0x4755, 0x4756, 0x4757, 0x4758, 0x4759, 0x475a, 0x475b, 0x475c, 0x475d, 0x475e, 0x475f, 0x4760, 0x4761, 0x4762, 0x4763, 0x4764, 0x4765, 0x4766, 0x4767, 0x4768, 0x4769, 0x476a, 0x476b, 0x476c, 0x476d, 0x476e, 0x476f, 0x4770, 0x4771, 0x4772, 0x4773, 0x4774, 0x4775, 0x4776, 0x4777, 0x4778, 0x4779, 0x477a, 0x477b, 0x477c, 0x477d, 0x477e, 0x4821, 0x4822, 0x4823, 0x4824, 0x4825, 0x4826, 0x4827, 0x4828, 0x4829, 0x482a, 0x482b, 0x482c, 0x482d, 0x482e, 0x482f, 0x4830, 0x4831, 0x4832, 0x4833, 0x4834, 0x4835, 0x4836, 0x4837, 0x4838, 0x4839, 0x483a, 0x483b, 0x483c, 0x483d, 0x483e, 0x483f, 0x4840, 0x4841, 0x4842, 0x4843, 0x4844, 0x4845, 0x4846, 0x4847, 0x4848, 0x4849, 0x484a, 0x484b, 0x484c, 0x484d, 0x484e, 0x484f, 0x4850, 0x4851, 0x4852, 0x4853, 0x4854, 0x4855, 0x4856, 0x4857, 0x4858, 0x4859, 0x485a, 0x485b, 0x485c, 0x485d, 0x485e, 0x485f, 0x4860, 0x4861, 0x4862, 0x4863, 0x4864, 0x4865, 0x4866, 0x4867, 0x4868, 0x4869, 0x486a, 0x486b, 0x486c, 0x486d, 0x486e, 0x486f, 0x4870, 0x4871, 0x4872, 0x4873, 0x4874, 0x4875, 0x4876, 0x4877, 0x4878, 0x4879, 0x487a, 0x487b, 0x487c, 0x487d, 0x487e, 0x4b50, 0x4b56, 0x4b67, 0x4d4f, 0x4d68, 0x4e2d, 0x4f7b, 0x5022, 0x5038, 0x5050, 0x505d, 0x5154, 0x5155, 0x5158, 0x515b, 0x515c, 0x515d, 0x515e, 0x515f, 0x5160, 0x5162, 0x5163, 0x5164, 0x5165, 0x5166, 0x5168, 0x5169, 0x516a, 0x516b, 0x516d, 0x516f, 0x5170, 0x5172, 0x5176, 0x517a, 0x517c, 0x517d, 0x517e, 0x5222, 0x5223, 0x5227, 0x5228, 0x5229, 0x522a, 0x522b, 0x522d, 0x5232, 0x523e, 0x5242, 0x5243, 0x5244, 0x5246, 0x5247, 0x5248, 0x5249, 0x524a, 0x524b, 0x524d, 0x524e, 0x524f, 0x5250, 0x5251, 0x5252, 0x5253, 0x5254, 0x5255, 0x5256, 0x5257, 0x5259, 0x525a, 0x525e, 0x525f, 0x5261, 0x5262, 0x5264, 0x5265, 0x5266, 0x5267, 0x5268, 0x5269, 0x526a, 0x526b, 0x5270, 0x5271, 0x5272, 0x5273, 0x5274, 0x5275, 0x5277, 0x5278, 0x5466, 0x547c, 0x5525, 0x552b, 0x552e, 0x5638, 0x564d, 0x574b, 0x5764, 0x5b45, 0x5b64, 0x5c25, 0x5d25, 0x5d55, 0x5d74, 0x5e7c, 0x5e7e, 0x5f33, 0x5f61, 0x5f68, 0x6071, 0x612d, 0x616d, 0x6375, 0x6421, 0x6429, 0x652e, 0x6531, 0x6532, 0x6539, 0x653b, 0x653c, 0x6544, 0x654e, 0x6550, 0x6552, 0x6556, 0x657a, 0x657b, 0x657c, 0x657e, 0x6621, 0x6624, 0x6627, 0x662d, 0x662f, 0x6630, 0x6631, 0x6633, 0x6637, 0x6638, 0x663c, 0x6644, 0x6646, 0x6647, 0x664a, 0x6652, 0x6656, 0x6659, 0x665c, 0x665f, 0x6661, 0x6664, 0x6665, 0x6666, 0x6668, 0x666a, 0x666b, 0x666c, 0x666f, 0x6671, 0x6672, 0x6675, 0x6676, 0x6677, 0x6679, 0x6721, 0x6726, 0x6729, 0x672a, 0x672c, 0x672d, 0x6730, 0x673f, 0x6741, 0x6746, 0x6747, 0x674b, 0x674d, 0x674f, 0x6750, 0x6753, 0x675f, 0x6764, 0x6766, 0x6777, 0x6867, 0x6868, 0x6870, 0x6871, 0x6877, 0x6879, 0x687b, 0x687e, 0x6927, 0x692c, 0x694c, 0x6977, 0x6a41, 0x6a65, 0x6a74, 0x6a77, 0x6a7c, 0x6a7e, 0x6b24, 0x6b27, 0x6b29, 0x6b2a, 0x6b3a, 0x6b3b, 0x6b3d, 0x6b41, 0x6b42, 0x6b46, 0x6b47, 0x6b4c, 0x6b4f, 0x6b50, 0x6b51, 0x6b52, 0x6b58, 0x6c26, 0x6c27, 0x6c2a, 0x6c2f, 0x6c30, 0x6c31, 0x6c32, 0x6c35, 0x6c38, 0x6c3a, 0x6c40, 0x6c41, 0x6c45, 0x6c46, 0x6c49, 0x6c4a, 0x6c55, 0x6c5d, 0x6c5e, 0x6c61, 0x6c64, 0x6c67, 0x6c68, 0x6c77, 0x6c78, 0x6c7a, 0x6d21, 0x6d22, 0x6d23, 0x6d6e, 0x6e5b, 0x723d, 0x727a, 0x7331, 0x7427, 0x746e, 0x7674, 0x7676, 0x7738, 0x7748, 0x7753, 0x785b, 0x7870, 0x7a21, 0x7a22, 0x7a66, 0x7c29, 0x2321, 0x2322, 0x2323, 0x2324, 0x2325, 0x2326, 0x2327, 0x2328, 0x2329, 0x232a, 0x232b, 0x232c, 0x232d, 0x232e, 0x232f, 0x2330, 0x2331, 0x2332, 0x2333, 0x2334, 0x2335, 0x2336, 0x2337, 0x2338, 0x2339, 0x233a, 0x233b, 0x233c, 0x233d, 0x233e, 0x233f, 0x2340, 0x2341, 0x2342, 0x2343, 0x2344, 0x2345, 0x2346, 0x2347, 0x2348, 0x2349, 0x234a, 0x234b, 0x234c, 0x234d, 0x234e, 0x234f, 0x2350, 0x2351, 0x2352, 0x2353, 0x2354, 0x2355, 0x2356, 0x2357, 0x2358, 0x2359, 0x235a, 0x235b, 0x212c, 0x235d, 0x235e, 0x235f, 0x2360, 0x2361, 0x2362, 0x2363, 0x2364, 0x2365, 0x2366, 0x2367, 0x2368, 0x2369, 0x236a, 0x236b, 0x236c, 0x236d, 0x236e, 0x236f, 0x2370, 0x2371, 0x2372, 0x2373, 0x2374, 0x2375, 0x2376, 0x2377, 0x2378, 0x2379, 0x237a, 0x237b, 0x237c, 0x237d, 0x2226, 0x214b, 0x214c, 0x217e, 0x237e, 0x214d, 0x235c, }; static const Summary16 ksc5601_uni2indx_page00[70] = { /* 0x0000 */ { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x2592 }, { 6, 0xf7df }, { 20, 0x0040 }, { 21, 0xc181 }, { 26, 0x0040 }, { 27, 0x4181 }, /* 0x0100 */ { 31, 0x0000 }, { 31, 0x0002 }, { 32, 0x00c0 }, { 34, 0x810e }, { 39, 0x0e07 }, { 45, 0x000c }, { 47, 0x00c0 }, { 49, 0x0000 }, { 49, 0x0000 }, { 49, 0x0000 }, { 49, 0x0000 }, { 49, 0x0000 }, { 49, 0x0000 }, { 49, 0x0000 }, { 49, 0x0000 }, { 49, 0x0000 }, /* 0x0200 */ { 49, 0x0000 }, { 49, 0x0000 }, { 49, 0x0000 }, { 49, 0x0000 }, { 49, 0x0000 }, { 49, 0x0000 }, { 49, 0x0000 }, { 49, 0x0000 }, { 49, 0x0000 }, { 49, 0x0000 }, { 49, 0x0000 }, { 49, 0x0000 }, { 49, 0x0080 }, { 50, 0x2f01 }, { 56, 0x0000 }, { 56, 0x0000 }, /* 0x0300 */ { 56, 0x0000 }, { 56, 0x0000 }, { 56, 0x0000 }, { 56, 0x0000 }, { 56, 0x0000 }, { 56, 0x0000 }, { 56, 0x0000 }, { 56, 0x0000 }, { 56, 0x0000 }, { 56, 0xfffe }, { 71, 0x03fb }, { 80, 0xfffe }, { 95, 0x03fb }, { 104, 0x0000 }, { 104, 0x0000 }, { 104, 0x0000 }, /* 0x0400 */ { 104, 0x0002 }, { 105, 0xffff }, { 121, 0xffff }, { 137, 0xffff }, { 153, 0xffff }, { 169, 0x0002 }, }; static const Summary16 ksc5601_uni2indx_page20[103] = { /* 0x2000 */ { 170, 0x0000 }, { 170, 0x3320 }, { 175, 0x0063 }, { 179, 0x080d }, { 183, 0x0000 }, { 183, 0x0000 }, { 183, 0x0000 }, { 183, 0x8010 }, { 185, 0x001e }, { 189, 0x0000 }, { 189, 0x0000 }, { 189, 0x0000 }, { 189, 0x0000 }, { 189, 0x0000 }, { 189, 0x0000 }, { 189, 0x0000 }, /* 0x2100 */ { 189, 0x0208 }, { 191, 0x0048 }, { 193, 0x0846 }, { 197, 0x0000 }, { 197, 0x0000 }, { 197, 0x7818 }, { 203, 0x03ff }, { 213, 0x03ff }, { 223, 0x0000 }, { 223, 0x03ff }, { 233, 0x0000 }, { 233, 0x0000 }, { 233, 0x0000 }, { 233, 0x0014 }, { 235, 0x0000 }, { 235, 0x0000 }, /* 0x2200 */ { 235, 0x898d }, { 242, 0x6402 }, { 246, 0x5fa1 }, { 255, 0x3030 }, { 259, 0x0000 }, { 259, 0x0004 }, { 260, 0x0c33 }, { 266, 0x0000 }, { 266, 0x00cc }, { 270, 0x0200 }, { 271, 0x0020 }, { 272, 0x0000 }, { 272, 0x0000 }, { 272, 0x0000 }, { 272, 0x0000 }, { 272, 0x0000 }, /* 0x2300 */ { 272, 0x0000 }, { 272, 0x0004 }, { 273, 0x0000 }, { 273, 0x0000 }, { 273, 0x0000 }, { 273, 0x0000 }, { 273, 0x0000 }, { 273, 0x0000 }, { 273, 0x0000 }, { 273, 0x0000 }, { 273, 0x0000 }, { 273, 0x0000 }, { 273, 0x0000 }, { 273, 0x0000 }, { 273, 0x0000 }, { 273, 0x0000 }, /* 0x2400 */ { 273, 0x0000 }, { 273, 0x0000 }, { 273, 0x0000 }, { 273, 0x0000 }, { 273, 0x0000 }, { 273, 0x0000 }, { 273, 0x7fff }, { 288, 0xfff0 }, { 300, 0x0007 }, { 303, 0xf000 }, { 307, 0xffff }, { 323, 0x003f }, { 329, 0x0000 }, { 329, 0xffff }, { 345, 0x03ff }, { 355, 0x0000 }, /* 0x2500 */ { 355, 0xf00f }, { 363, 0xffff }, { 379, 0xffff }, { 395, 0xffff }, { 411, 0x0fff }, { 423, 0x0000 }, { 423, 0x0000 }, { 423, 0x0000 }, { 423, 0x0000 }, { 423, 0x0004 }, { 424, 0x03fb }, { 433, 0x30cc }, { 439, 0xc9c3 }, { 447, 0x0003 }, { 449, 0x0000 }, { 449, 0x0000 }, /* 0x2600 */ { 449, 0xc060 }, { 453, 0x5000 }, { 455, 0x0000 }, { 455, 0x0000 }, { 455, 0x0005 }, { 457, 0x0000 }, { 457, 0x37bb }, }; static const Summary16 ksc5601_uni2indx_page30[62] = { /* 0x3000 */ { 468, 0xff0f }, { 480, 0x003b }, { 485, 0x0000 }, { 485, 0x0000 }, { 485, 0xfffe }, { 500, 0xffff }, { 516, 0xffff }, { 532, 0xffff }, { 548, 0xffff }, { 564, 0x000f }, { 568, 0xfffe }, { 583, 0xffff }, { 599, 0xffff }, { 615, 0xffff }, { 631, 0xffff }, { 647, 0x007f }, /* 0x3100 */ { 654, 0x0000 }, { 654, 0x0000 }, { 654, 0x0000 }, { 654, 0xfffe }, { 669, 0xffff }, { 685, 0xffff }, { 701, 0xffff }, { 717, 0xffff }, { 733, 0x7fff }, { 748, 0x0000 }, { 748, 0x0000 }, { 748, 0x0000 }, { 748, 0x0000 }, { 748, 0x0000 }, { 748, 0x0000 }, { 748, 0x0000 }, /* 0x3200 */ { 748, 0xffff }, { 764, 0x1fff }, { 777, 0x0000 }, { 777, 0x0000 }, { 777, 0x0000 }, { 777, 0x0000 }, { 777, 0xffff }, { 793, 0x8fff }, { 806, 0x0000 }, { 806, 0x0000 }, { 806, 0x0000 }, { 806, 0x0000 }, { 806, 0x0000 }, { 806, 0x0000 }, { 806, 0x0000 }, { 806, 0x0000 }, /* 0x3300 */ { 806, 0x0000 }, { 806, 0x0000 }, { 806, 0x0000 }, { 806, 0x0000 }, { 806, 0x0000 }, { 806, 0x0000 }, { 806, 0x0000 }, { 806, 0x0000 }, { 806, 0xff1f }, { 819, 0xffff }, { 835, 0xffff }, { 851, 0xffff }, { 867, 0x87ff }, { 879, 0x3949 }, }; static const Summary16 ksc5601_uni2indx_page4e[1306] = { /* 0x4e00 */ { 886, 0x2f8b }, { 895, 0x4372 }, { 902, 0x2000 }, { 903, 0x0b04 }, { 907, 0xe82c }, { 914, 0xe340 }, { 920, 0x2800 }, { 922, 0x40c8 }, { 926, 0x5944 }, { 932, 0x4937 }, { 940, 0x7976 }, { 950, 0x0440 }, { 952, 0x2c93 }, { 959, 0xa3f0 }, { 967, 0x0038 }, { 970, 0x08c5 }, /* 0x4f00 */ { 975, 0xee02 }, { 982, 0x0003 }, { 984, 0x8000 }, { 985, 0x3550 }, { 991, 0xe1c8 }, { 998, 0x1e23 }, { 1005, 0x8200 }, { 1007, 0xc449 }, { 1013, 0xad5a }, { 1022, 0x2942 }, { 1027, 0xc000 }, { 1029, 0x8060 }, { 1032, 0x461c }, { 1038, 0xa49a }, { 1045, 0xc003 }, { 1049, 0x052a }, /* 0x5000 */ { 1054, 0x2a44 }, { 1059, 0xd646 }, { 1067, 0x3dda }, { 1077, 0x0800 }, { 1078, 0x8388 }, { 1083, 0x1420 }, { 1086, 0x0020 }, { 1087, 0x0170 }, { 1091, 0x2021 }, { 1094, 0x0302 }, { 1097, 0x3000 }, { 1099, 0x40ac }, { 1104, 0x8620 }, { 1108, 0x4462 }, { 1113, 0x20a0 }, { 1116, 0x8a00 }, /* 0x5100 */ { 1119, 0x0253 }, { 1124, 0x8004 }, { 1126, 0x0402 }, { 1128, 0x1484 }, { 1132, 0x7bfb }, { 1145, 0x1004 }, { 1147, 0x7fa4 }, { 1157, 0x11e2 }, { 1163, 0x2441 }, { 1167, 0x00a4 }, { 1170, 0x1421 }, { 1174, 0x20c0 }, { 1177, 0x3a50 }, { 1183, 0x7000 }, { 1186, 0x0002 }, { 1187, 0x2743 }, /* 0x5200 */ { 1194, 0x45c9 }, { 1201, 0x2082 }, { 1204, 0x4630 }, { 1209, 0x0fc1 }, { 1216, 0x3c88 }, { 1222, 0x2850 }, { 1226, 0x8602 }, { 1230, 0xa024 }, { 1234, 0x2388 }, { 1239, 0x8806 }, { 1243, 0x0e19 }, { 1249, 0x4000 }, { 1250, 0x22aa }, { 1256, 0xeb64 }, { 1265, 0x001c }, { 1268, 0xcd28 }, /* 0x5300 */ { 1275, 0xa120 }, { 1279, 0x02e1 }, { 1284, 0x840b }, { 1289, 0x8200 }, { 1291, 0x279b }, { 1300, 0x549e }, { 1308, 0x8141 }, { 1312, 0xa0b3 }, { 1319, 0x0010 }, { 1320, 0x8508 }, { 1324, 0x2061 }, { 1328, 0x0800 }, { 1329, 0x2f08 }, { 1335, 0x08d0 }, { 1339, 0xbe3e }, { 1350, 0x010f }, /* 0x5400 */ { 1355, 0xf718 }, { 1364, 0xa803 }, { 1369, 0x0a41 }, { 1373, 0x5b08 }, { 1379, 0x0504 }, { 1382, 0x0002 }, { 1383, 0x0500 }, { 1385, 0x382a }, { 1391, 0x5041 }, { 1395, 0x0001 }, { 1396, 0x1910 }, { 1400, 0x2108 }, { 1403, 0x0313 }, { 1408, 0x0000 }, { 1408, 0x6122 }, { 1413, 0x0404 }, /* 0x5500 */ { 1415, 0x40d0 }, { 1419, 0x1001 }, { 1421, 0x8000 }, { 1422, 0x4022 }, { 1425, 0x8050 }, { 1428, 0x4048 }, { 1431, 0x0008 }, { 1432, 0x1000 }, { 1433, 0x06d1 }, { 1439, 0x3700 }, { 1444, 0x5e80 }, { 1450, 0x0000 }, { 1450, 0x00a0 }, { 1452, 0x9410 }, { 1456, 0x0018 }, { 1458, 0x6000 }, /* 0x5600 */ { 1460, 0x0240 }, { 1462, 0x0090 }, { 1464, 0x8000 }, { 1465, 0x0054 }, { 1468, 0x0000 }, { 1468, 0x0008 }, { 1469, 0x0900 }, { 1471, 0x0010 }, { 1472, 0x0040 }, { 1473, 0x0000 }, { 1473, 0x5020 }, { 1476, 0x1010 }, { 1478, 0x2400 }, { 1480, 0x4c02 }, { 1484, 0x0001 }, { 1485, 0x0601 }, /* 0x5700 */ { 1488, 0x2918 }, { 1493, 0x814c }, { 1498, 0x2100 }, { 1500, 0x0801 }, { 1502, 0x6485 }, { 1508, 0x0003 }, { 1510, 0x4452 }, { 1515, 0x1021 }, { 1518, 0x0904 }, { 1521, 0x0008 }, { 1522, 0x000d }, { 1525, 0x0000 }, { 1525, 0x4988 }, { 1530, 0x8000 }, { 1531, 0x0001 }, { 1532, 0x1691 }, /* 0x5800 */ { 1538, 0x0765 }, { 1545, 0x4000 }, { 1546, 0x8492 }, { 1551, 0x0433 }, { 1556, 0x8c00 }, { 1559, 0x4592 }, { 1565, 0x0016 }, { 1568, 0x5220 }, { 1572, 0x0228 }, { 1575, 0xd008 }, { 1579, 0x4300 }, { 1582, 0x4c08 }, { 1586, 0x40a2 }, { 1590, 0xc32a }, { 1597, 0x9810 }, { 1601, 0x2e00 }, /* 0x5900 */ { 1605, 0x8000 }, { 1606, 0x1670 }, { 1612, 0x6e84 }, { 1619, 0x4082 }, { 1622, 0xc390 }, { 1628, 0x04b3 }, { 1634, 0x7c85 }, { 1642, 0x2118 }, { 1646, 0x041c }, { 1650, 0x02c8 }, { 1654, 0x1120 }, { 1657, 0x4a00 }, { 1660, 0x0a48 }, { 1664, 0x361b }, { 1672, 0x5540 }, { 1677, 0x8900 }, /* 0x5a00 */ { 1680, 0x000a }, { 1682, 0x9902 }, { 1687, 0x0221 }, { 1690, 0x1040 }, { 1692, 0x0242 }, { 1695, 0x0400 }, { 1696, 0x0044 }, { 1698, 0x0000 }, { 1698, 0x0000 }, { 1698, 0x0c04 }, { 1701, 0x0010 }, { 1702, 0x0000 }, { 1702, 0x1216 }, { 1707, 0x0000 }, { 1707, 0x0242 }, { 1710, 0x0000 }, /* 0x5b00 */ { 1710, 0x1a20 }, { 1714, 0x0040 }, { 1715, 0x0400 }, { 1716, 0x0000 }, { 1716, 0x0009 }, { 1718, 0xb5b3 }, { 1728, 0x0a18 }, { 1732, 0x1523 }, { 1738, 0x9ba0 }, { 1745, 0x1fe8 }, { 1754, 0x507c }, { 1761, 0x8379 }, { 1769, 0x10fd }, { 1777, 0xc09d }, { 1784, 0xdbf6 }, { 1796, 0x0560 }, /* 0x5c00 */ { 1800, 0xef92 }, { 1810, 0x0242 }, { 1813, 0x0110 }, { 1815, 0xdf02 }, { 1823, 0x6961 }, { 1830, 0x0822 }, { 1833, 0x9035 }, { 1839, 0x0202 }, { 1841, 0x0000 }, { 1841, 0x0003 }, { 1843, 0x1a02 }, { 1847, 0x45aa }, { 1854, 0x0001 }, { 1855, 0x0200 }, { 1856, 0x8101 }, { 1859, 0x2851 }, /* 0x5d00 */ { 1864, 0x6080 }, { 1867, 0x02d2 }, { 1872, 0x0280 }, { 1874, 0x0000 }, { 1874, 0x1800 }, { 1876, 0x0001 }, { 1877, 0x9200 }, { 1880, 0x0000 }, { 1880, 0x0880 }, { 1882, 0x2000 }, { 1883, 0x0405 }, { 1886, 0x3500 }, { 1890, 0x2000 }, { 1891, 0x6044 }, { 1895, 0x49e6 }, { 1903, 0x609e }, /* 0x5e00 */ { 1910, 0x104c }, { 1914, 0x2a42 }, { 1919, 0x2820 }, { 1922, 0xa148 }, { 1927, 0x10b1 }, { 1932, 0x8020 }, { 1934, 0x000e }, { 1937, 0x7b9c }, { 1947, 0x8490 }, { 1951, 0x14a0 }, { 1955, 0x28c1 }, { 1960, 0x41e0 }, { 1965, 0x0704 }, { 1969, 0x8c49 }, { 1975, 0x100d }, { 1979, 0x0cc8 }, /* 0x5f00 */ { 1984, 0x8412 }, { 1988, 0x89ba }, { 1996, 0x02c0 }, { 1999, 0x1422 }, { 2003, 0x5500 }, { 2007, 0x0ac0 }, { 2011, 0x3ec4 }, { 2019, 0x9283 }, { 2025, 0x1ca3 }, { 2032, 0x4387 }, { 2039, 0x4703 }, { 2045, 0x22a0 }, { 2049, 0x3028 }, { 2053, 0x03c0 }, { 2057, 0x0801 }, { 2059, 0xa020 }, /* 0x6000 */ { 2062, 0x8000 }, { 2063, 0x3044 }, { 2067, 0x85a3 }, { 2074, 0x0000 }, { 2074, 0x200e }, { 2078, 0x2225 }, { 2083, 0xb73c }, { 2093, 0x0001 }, { 2094, 0x3220 }, { 2098, 0x8c50 }, { 2103, 0x0099 }, { 2107, 0x315d }, { 2115, 0x00a0 }, { 2117, 0x9402 }, { 2121, 0x0003 }, { 2123, 0x0e4b }, /* 0x6100 */ { 2130, 0xe342 }, { 2137, 0x8c20 }, { 2141, 0x0080 }, { 2142, 0xd091 }, { 2148, 0x1d94 }, { 2155, 0xa328 }, { 2161, 0x499c }, { 2168, 0x60c1 }, { 2173, 0x4406 }, { 2177, 0x0713 }, { 2183, 0x5a90 }, { 2189, 0x4444 }, { 2193, 0x0f88 }, { 2199, 0x0000 }, { 2199, 0x0040 }, { 2200, 0x95c4 }, /* 0x6200 */ { 2207, 0x7581 }, { 2214, 0x8447 }, { 2220, 0x4402 }, { 2223, 0xc053 }, { 2229, 0x2b83 }, { 2236, 0x0108 }, { 2238, 0x4000 }, { 2239, 0x9242 }, { 2244, 0x0611 }, { 2248, 0x09a6 }, { 2254, 0x0800 }, { 2255, 0x3222 }, { 2260, 0xb384 }, { 2267, 0x1bdd }, { 2277, 0xf000 }, { 2281, 0xc08a }, /* 0x6300 */ { 2286, 0x0282 }, { 2289, 0x0002 }, { 2290, 0x8800 }, { 2292, 0x6c00 }, { 2296, 0x9200 }, { 2299, 0x0021 }, { 2301, 0x4180 }, { 2304, 0x8c84 }, { 2309, 0x1308 }, { 2313, 0x0944 }, { 2317, 0x07a7 }, { 2325, 0x0000 }, { 2325, 0x8051 }, { 2329, 0x0c41 }, { 2333, 0x6002 }, { 2336, 0x00d0 }, /* 0x6400 */ { 2339, 0xa000 }, { 2341, 0x10d0 }, { 2345, 0x3004 }, { 2348, 0x4400 }, { 2350, 0x0000 }, { 2350, 0x0100 }, { 2351, 0x8201 }, { 2354, 0x0700 }, { 2357, 0x0100 }, { 2358, 0x440e }, { 2363, 0x6830 }, { 2368, 0x0805 }, { 2371, 0x64b2 }, { 2378, 0x0514 }, { 2382, 0x10e6 }, { 2388, 0x4414 }, /* 0x6500 */ { 2392, 0x0011 }, { 2394, 0x2100 }, { 2396, 0x9c08 }, { 2401, 0xcbc0 }, { 2408, 0xe120 }, { 2413, 0x40c2 }, { 2417, 0x304c }, { 2422, 0x41b4 }, { 2428, 0x10ac }, { 2433, 0x9a83 }, { 2440, 0x98b2 }, { 2447, 0x3281 }, { 2452, 0x9822 }, { 2457, 0x0084 }, { 2459, 0x3369 }, { 2467, 0xbc12 }, /* 0x6600 */ { 2474, 0xd6c0 }, { 2481, 0xc03b }, { 2488, 0xa1a1 }, { 2494, 0x0c53 }, { 2500, 0x8a1e }, { 2507, 0xea00 }, { 2512, 0xcbf0 }, { 2521, 0x05d8 }, { 2527, 0x4390 }, { 2532, 0x21c3 }, { 2538, 0x4805 }, { 2542, 0x4a1c }, { 2548, 0x02d0 }, { 2552, 0x3240 }, { 2556, 0x0041 }, { 2558, 0xd79d }, /* 0x6700 */ { 2569, 0x2b09 }, { 2575, 0xe8b0 }, { 2582, 0x7dc0 }, { 2590, 0x2452 }, { 2595, 0xc240 }, { 2599, 0xd04b }, { 2606, 0xa000 }, { 2608, 0xc8ab }, { 2616, 0x8a80 }, { 2620, 0x34a9 }, { 2627, 0x8000 }, { 2628, 0x41c9 }, { 2634, 0x8010 }, { 2636, 0x241f }, { 2643, 0x9200 }, { 2646, 0x487b }, /* 0x6800 */ { 2654, 0x0000 }, { 2654, 0x00cc }, { 2658, 0x8406 }, { 2662, 0x3300 }, { 2666, 0x410f }, { 2672, 0x001b }, { 2676, 0x2000 }, { 2677, 0x8040 }, { 2679, 0x8022 }, { 2682, 0xa098 }, { 2687, 0xa186 }, { 2693, 0x006b }, { 2698, 0x2a30 }, { 2703, 0x85a4 }, { 2709, 0x4181 }, { 2713, 0x0604 }, /* 0x6900 */ { 2716, 0x6021 }, { 2720, 0x0004 }, { 2721, 0x0080 }, { 2722, 0xa001 }, { 2725, 0x0400 }, { 2726, 0x46b8 }, { 2733, 0xe90f }, { 2742, 0x03a0 }, { 2746, 0x0000 }, { 2746, 0x1820 }, { 2749, 0x40a0 }, { 2752, 0x0810 }, { 2754, 0x380a }, { 2759, 0x0001 }, { 2760, 0x0500 }, { 2762, 0xa800 }, /* 0x6a00 */ { 2765, 0x0404 }, { 2767, 0xc28a }, { 2773, 0x000a }, { 2775, 0x2720 }, { 2780, 0x0910 }, { 2783, 0x830c }, { 2788, 0x0802 }, { 2790, 0x0000 }, { 2790, 0x6211 }, { 2795, 0x1080 }, { 2797, 0x000c }, { 2799, 0x0808 }, { 2801, 0x000c }, { 2803, 0x0c08 }, { 2806, 0x0000 }, { 2806, 0x0840 }, /* 0x6b00 */ { 2808, 0x1410 }, { 2811, 0x0044 }, { 2813, 0x000b }, { 2816, 0x6404 }, { 2820, 0x50c0 }, { 2824, 0x8001 }, { 2826, 0x047e }, { 2833, 0x8984 }, { 2838, 0x0658 }, { 2843, 0x4140 }, { 2846, 0xc000 }, { 2848, 0x94a4 }, { 2854, 0xa862 }, { 2860, 0x09dc }, { 2867, 0x1800 }, { 2869, 0x0000 }, /* 0x6c00 */ { 2869, 0x8100 }, { 2871, 0x000a }, { 2873, 0x0008 }, { 2874, 0x4190 }, { 2878, 0x4007 }, { 2882, 0xe4a1 }, { 2889, 0x2501 }, { 2893, 0x6445 }, { 2899, 0x11ee }, { 2907, 0x0e7d }, { 2916, 0x4800 }, { 2918, 0xfb08 }, { 2926, 0x1616 }, { 2932, 0x08a8 }, { 2936, 0xc92e }, { 2944, 0x0009 }, /* 0x6d00 */ { 2946, 0x1800 }, { 2948, 0x4a82 }, { 2953, 0x06a0 }, { 2957, 0x6b64 }, { 2965, 0x0002 }, { 2966, 0x1600 }, { 2969, 0x5648 }, { 2975, 0x8390 }, { 2980, 0x73a0 }, { 2987, 0x002a }, { 2990, 0x8000 }, { 2991, 0x0024 }, { 2993, 0x88f9 }, { 3001, 0x4702 }, { 3006, 0x4d02 }, { 3011, 0x0faa }, /* 0x6e00 */ { 3019, 0x0000 }, { 3019, 0x8e80 }, { 3024, 0xb87b }, { 3034, 0x7554 }, { 3042, 0x2418 }, { 3046, 0xd940 }, { 3052, 0xc880 }, { 3056, 0x040c }, { 3059, 0x0000 }, { 3059, 0xb041 }, { 3064, 0x8c24 }, { 3069, 0x0442 }, { 3072, 0x5a34 }, { 3079, 0x001a }, { 3082, 0x8000 }, { 3083, 0xc110 }, /* 0x6f00 */ { 3087, 0x8046 }, { 3091, 0x0032 }, { 3094, 0x180d }, { 3099, 0x8106 }, { 3103, 0x0002 }, { 3104, 0xcd92 }, { 3112, 0x6014 }, { 3116, 0x7401 }, { 3121, 0x6112 }, { 3126, 0x0091 }, { 3129, 0xc098 }, { 3134, 0x420a }, { 3138, 0x040f }, { 3143, 0x8420 }, { 3146, 0x9a13 }, { 3153, 0x4002 }, /* 0x7000 */ { 3155, 0x8a62 }, { 3161, 0xfd22 }, { 3170, 0x8188 }, { 3174, 0x4080 }, { 3176, 0x1000 }, { 3177, 0x2103 }, { 3181, 0x0808 }, { 3183, 0x3101 }, { 3187, 0x4420 }, { 3190, 0x0704 }, { 3194, 0xb812 }, { 3200, 0x0388 }, { 3204, 0x8900 }, { 3207, 0xa300 }, { 3211, 0x0000 }, { 3211, 0x2202 }, /* 0x7100 */ { 3214, 0x1210 }, { 3217, 0x4600 }, { 3220, 0x0042 }, { 3222, 0x0041 }, { 3224, 0x5680 }, { 3229, 0x5241 }, { 3234, 0x52f0 }, { 3241, 0x2000 }, { 3242, 0x8610 }, { 3246, 0x8214 }, { 3250, 0x1004 }, { 3252, 0x4602 }, { 3256, 0x430a }, { 3261, 0x8035 }, { 3266, 0x60e0 }, { 3271, 0xd800 }, /* 0x7200 */ { 3275, 0x0041 }, { 3277, 0x0801 }, { 3279, 0x3400 }, { 3282, 0x6c65 }, { 3290, 0x11c1 }, { 3295, 0xab04 }, { 3301, 0x0286 }, { 3305, 0x2204 }, { 3308, 0x0003 }, { 3310, 0x0000 }, { 3310, 0x9084 }, { 3314, 0x0000 }, { 3314, 0x4015 }, { 3318, 0x0281 }, { 3321, 0x0202 }, { 3323, 0x3300 }, /* 0x7300 */ { 3327, 0x0400 }, { 3328, 0x3840 }, { 3332, 0x0e20 }, { 3336, 0xc0c0 }, { 3340, 0x0030 }, { 3342, 0x0085 }, { 3345, 0x0500 }, { 3347, 0x0d25 }, { 3353, 0x4ad0 }, { 3359, 0x81d0 }, { 3364, 0x2280 }, { 3367, 0x020c }, { 3370, 0xb605 }, { 3377, 0x6240 }, { 3381, 0x2679 }, { 3389, 0x6280 }, /* 0x7400 */ { 3393, 0x02ea }, { 3399, 0x0808 }, { 3401, 0xdd67 }, { 3412, 0x8579 }, { 3420, 0x081b }, { 3425, 0xdea0 }, { 3433, 0x8735 }, { 3441, 0x4000 }, { 3442, 0x0a8c }, { 3447, 0xd100 }, { 3451, 0x05aa }, { 3457, 0xa225 }, { 3463, 0x8440 }, { 3466, 0x1510 }, { 3470, 0x404d }, { 3475, 0x0080 }, /* 0x7500 */ { 3476, 0x0012 }, { 3478, 0x8d22 }, { 3484, 0x1968 }, { 3490, 0x058f }, { 3497, 0x9080 }, { 3500, 0x3a1a }, { 3507, 0x8464 }, { 3512, 0x8561 }, { 3518, 0xccc0 }, { 3524, 0x2002 }, { 3526, 0x0820 }, { 3528, 0x732e }, { 3537, 0x20a4 }, { 3541, 0x0b34 }, { 3547, 0x0004 }, { 3548, 0x1415 }, /* 0x7600 */ { 3553, 0x2001 }, { 3555, 0x8200 }, { 3557, 0x0057 }, { 3562, 0x0800 }, { 3563, 0x5004 }, { 3566, 0x0044 }, { 3568, 0x1212 }, { 3572, 0x7905 }, { 3579, 0x40d0 }, { 3583, 0x0009 }, { 3585, 0x4000 }, { 3586, 0x8400 }, { 3588, 0x054c }, { 3593, 0xd844 }, { 3599, 0x409a }, { 3604, 0x5114 }, /* 0x7700 */ { 3609, 0x0b12 }, { 3614, 0x4000 }, { 3615, 0x0201 }, { 3617, 0x1580 }, { 3621, 0x2001 }, { 3623, 0x0800 }, { 3624, 0x084a }, { 3628, 0xc200 }, { 3631, 0x0800 }, { 3632, 0x4002 }, { 3634, 0x3020 }, { 3637, 0x9809 }, { 3642, 0x0000 }, { 3642, 0x1880 }, { 3645, 0xe22c }, { 3652, 0x0008 }, /* 0x7800 */ { 3653, 0x0004 }, { 3654, 0x0004 }, { 3655, 0x10e0 }, { 3659, 0x0014 }, { 3661, 0x8020 }, { 3663, 0x2000 }, { 3664, 0x9800 }, { 3667, 0x1000 }, { 3668, 0x7082 }, { 3673, 0x0082 }, { 3675, 0x0288 }, { 3678, 0x1c00 }, { 3681, 0x4c22 }, { 3686, 0x0001 }, { 3687, 0x9100 }, { 3690, 0x0820 }, /* 0x7900 */ { 3692, 0x4002 }, { 3694, 0x0040 }, { 3695, 0x1c00 }, { 3698, 0x4400 }, { 3700, 0x0383 }, { 3705, 0x7cc1 }, { 3713, 0x2121 }, { 3717, 0x8400 }, { 3719, 0xe002 }, { 3723, 0x0002 }, { 3724, 0x44c0 }, { 3728, 0xe20a }, { 3734, 0x0e03 }, { 3739, 0x8126 }, { 3744, 0x02d0 }, { 3748, 0x0800 }, /* 0x7a00 */ { 3749, 0x2921 }, { 3754, 0x9690 }, { 3760, 0x4001 }, { 3762, 0xb8c2 }, { 3769, 0x6241 }, { 3774, 0x0080 }, { 3775, 0x0a06 }, { 3779, 0xa651 }, { 3786, 0x0112 }, { 3789, 0x812c }, { 3794, 0xc600 }, { 3798, 0x0400 }, { 3799, 0x0cb0 }, { 3804, 0xa280 }, { 3808, 0xa429 }, { 3814, 0x8640 }, /* 0x7b00 */ { 3818, 0x8000 }, { 3819, 0x4a02 }, { 3823, 0x3041 }, { 3827, 0x0200 }, { 3828, 0xba40 }, { 3834, 0x0057 }, { 3839, 0x5001 }, { 3842, 0x2020 }, { 3844, 0x8880 }, { 3847, 0x24b0 }, { 3852, 0x2002 }, { 3854, 0x0112 }, { 3857, 0x02d3 }, { 3863, 0x0004 }, { 3864, 0x0211 }, { 3867, 0x0000 }, /* 0x7c00 */ { 3867, 0x0080 }, { 3868, 0x4004 }, { 3870, 0x0c82 }, { 3874, 0xe000 }, { 3877, 0x3008 }, { 3880, 0x0000 }, { 3880, 0x1011 }, { 3883, 0x0008 }, { 3884, 0x0208 }, { 3886, 0x81a4 }, { 3891, 0x40a0 }, { 3894, 0x420e }, { 3899, 0x0400 }, { 3900, 0xc040 }, { 3903, 0x0081 }, { 3905, 0x4800 }, /* 0x7d00 */ { 3907, 0x2df5 }, { 3917, 0x0f91 }, { 3924, 0xd807 }, { 3931, 0x0629 }, { 3936, 0x007c }, { 3941, 0x4001 }, { 3943, 0x4546 }, { 3949, 0x824e }, { 3955, 0xc000 }, { 3957, 0x1008 }, { 3959, 0x3005 }, { 3963, 0xed36 }, { 3973, 0x0c80 }, { 3976, 0x6540 }, { 3981, 0x930b }, { 3988, 0x0810 }, /* 0x7e00 */ { 3990, 0x0600 }, { 3992, 0xe820 }, { 3997, 0xc80a }, { 4002, 0x6082 }, { 4006, 0x00ca }, { 4010, 0x4034 }, { 4014, 0x2e02 }, { 4019, 0x1201 }, { 4022, 0x9004 }, { 4025, 0x1948 }, { 4030, 0x0000 }, { 4030, 0x0000 }, { 4030, 0x0000 }, { 4030, 0x0000 }, { 4030, 0x0000 }, { 4030, 0x0000 }, /* 0x7f00 */ { 4030, 0x0000 }, { 4030, 0x0000 }, { 4030, 0x0000 }, { 4030, 0x0540 }, { 4033, 0x1000 }, { 4034, 0x0031 }, { 4037, 0x4c00 }, { 4040, 0x02a5 }, { 4045, 0x5520 }, { 4050, 0x4410 }, { 4053, 0x0310 }, { 4056, 0x2304 }, { 4060, 0x5422 }, { 4065, 0x8034 }, { 4069, 0x0a03 }, { 4073, 0x1201 }, /* 0x8000 */ { 4076, 0x126b }, { 4083, 0x01a1 }, { 4087, 0x2000 }, { 4088, 0xa048 }, { 4092, 0x0448 }, { 4095, 0x4540 }, { 4099, 0x8000 }, { 4100, 0xe08d }, { 4107, 0x1af0 }, { 4114, 0x2840 }, { 4117, 0x8626 }, { 4123, 0x0416 }, { 4127, 0x5018 }, { 4131, 0x4c00 }, { 4134, 0x0032 }, { 4137, 0x2112 }, /* 0x8100 */ { 4141, 0x05e4 }, { 4147, 0x0d00 }, { 4150, 0x8a08 }, { 4154, 0x4200 }, { 4156, 0x4800 }, { 4158, 0x0033 }, { 4162, 0x0860 }, { 4165, 0x8703 }, { 4171, 0x8501 }, { 4175, 0x3400 }, { 4178, 0x0109 }, { 4181, 0xe428 }, { 4187, 0x2045 }, { 4191, 0x8100 }, { 4193, 0x25a8 }, { 4199, 0x5c18 }, /* 0x8200 */ { 4205, 0x35a0 }, { 4211, 0xd804 }, { 4216, 0x1c02 }, { 4220, 0x02e0 }, { 4224, 0x00a1 }, { 4227, 0x0200 }, { 4228, 0xc050 }, { 4232, 0x4146 }, { 4237, 0x6800 }, { 4240, 0xa604 }, { 4245, 0xf260 }, { 4252, 0xbb8a }, { 4261, 0x0000 }, { 4261, 0xc8b6 }, { 4269, 0x00e2 }, { 4273, 0x6002 }, /* 0x8300 */ { 4276, 0x023e }, { 4282, 0x0080 }, { 4283, 0x8900 }, { 4286, 0x0372 }, { 4292, 0x8681 }, { 4297, 0x0006 }, { 4299, 0x0000 }, { 4299, 0x0888 }, { 4302, 0x4600 }, { 4305, 0x4140 }, { 4308, 0x0e04 }, { 4312, 0x2000 }, { 4313, 0x1622 }, { 4318, 0x1048 }, { 4321, 0x8a00 }, { 4324, 0x2217 }, /* 0x8400 */ { 4330, 0x7418 }, { 4336, 0x0000 }, { 4336, 0x1200 }, { 4338, 0x2102 }, { 4341, 0x0200 }, { 4342, 0x0880 }, { 4344, 0x984a }, { 4350, 0x0420 }, { 4352, 0x0000 }, { 4352, 0x1211 }, { 4356, 0x0002 }, { 4357, 0x9904 }, { 4362, 0x2a55 }, { 4369, 0x0402 }, { 4371, 0x5000 }, { 4373, 0x1010 }, /* 0x8500 */ { 4375, 0x0000 }, { 4375, 0x459a }, { 4382, 0xb02a }, { 4388, 0xa000 }, { 4390, 0x420a }, { 4394, 0x0208 }, { 4396, 0x2708 }, { 4401, 0x0000 }, { 4401, 0x8090 }, { 4404, 0x0812 }, { 4407, 0x8740 }, { 4412, 0x0401 }, { 4414, 0xe202 }, { 4419, 0x3020 }, { 4422, 0x0630 }, { 4426, 0x8c80 }, /* 0x8600 */ { 4430, 0x04c4 }, { 4434, 0x04c0 }, { 4437, 0x2000 }, { 4438, 0x8000 }, { 4439, 0x4000 }, { 4440, 0xd831 }, { 4447, 0x0080 }, { 4448, 0x0200 }, { 4449, 0x1400 }, { 4451, 0x0008 }, { 4452, 0x0218 }, { 4455, 0x0000 }, { 4455, 0x0880 }, { 4457, 0x8a10 }, { 4461, 0x2010 }, { 4463, 0x4000 }, /* 0x8700 */ { 4464, 0x010d }, { 4468, 0x1500 }, { 4471, 0x0000 }, { 4471, 0x0000 }, { 4471, 0x4000 }, { 4472, 0x80a0 }, { 4475, 0x0140 }, { 4477, 0x0150 }, { 4480, 0x2004 }, { 4482, 0x8000 }, { 4483, 0x0004 }, { 4484, 0x0408 }, { 4486, 0x0010 }, { 4487, 0x0000 }, { 4487, 0x9001 }, { 4490, 0x4a04 }, /* 0x8800 */ { 4494, 0x0020 }, { 4495, 0x8000 }, { 4496, 0x000c }, { 4498, 0x0842 }, { 4501, 0x3041 }, { 4505, 0x2a8c }, { 4511, 0x090e }, { 4516, 0xc085 }, { 4521, 0x2906 }, { 4526, 0x40c4 }, { 4530, 0x0800 }, { 4531, 0x0010 }, { 4532, 0x8006 }, { 4535, 0xb230 }, { 4541, 0x0102 }, { 4543, 0x2138 }, /* 0x8900 */ { 4548, 0x0080 }, { 4549, 0x030d }, { 4554, 0x0420 }, { 4556, 0x0940 }, { 4559, 0x0012 }, { 4561, 0x8000 }, { 4562, 0x0410 }, { 4564, 0x8004 }, { 4566, 0x88ca }, { 4572, 0x0048 }, { 4574, 0x0602 }, { 4577, 0x2404 }, { 4580, 0x0001 }, { 4581, 0x0004 }, { 4582, 0x0008 }, { 4583, 0x0110 }, /* 0x8a00 */ { 4585, 0x550d }, { 4592, 0xa9c8 }, { 4599, 0x2428 }, { 4603, 0x0c52 }, { 4608, 0x0000 }, { 4608, 0x4831 }, { 4613, 0x624d }, { 4620, 0x022f }, { 4626, 0x30a0 }, { 4630, 0x4128 }, { 4634, 0x057b }, { 4642, 0xd205 }, { 4648, 0xa894 }, { 4654, 0x1844 }, { 4658, 0x6cc2 }, { 4665, 0x45c2 }, /* 0x8b00 */ { 4671, 0x4017 }, { 4676, 0x2ed1 }, { 4684, 0x1901 }, { 4688, 0x0208 }, { 4690, 0xc202 }, { 4694, 0x1500 }, { 4697, 0x9040 }, { 4700, 0x2091 }, { 4704, 0x0401 }, { 4706, 0x044d }, { 4711, 0x0000 }, { 4711, 0x0000 }, { 4711, 0x0000 }, { 4711, 0x0000 }, { 4711, 0x0000 }, { 4711, 0x0000 }, /* 0x8c00 */ { 4711, 0x0000 }, { 4711, 0x0000 }, { 4711, 0x0000 }, { 4711, 0x8080 }, { 4713, 0x1542 }, { 4718, 0x0420 }, { 4720, 0x0c02 }, { 4723, 0x0600 }, { 4725, 0x1404 }, { 4728, 0x6000 }, { 4730, 0x9f87 }, { 4740, 0xb9d9 }, { 4750, 0x059f }, { 4758, 0x540a }, { 4763, 0x245d }, { 4770, 0x3810 }, /* 0x8d00 */ { 4774, 0x25b0 }, { 4780, 0x0048 }, { 4782, 0x0000 }, { 4782, 0x0000 }, { 4782, 0x0000 }, { 4782, 0x0000 }, { 4782, 0x0850 }, { 4785, 0x0099 }, { 4789, 0x0420 }, { 4791, 0x0200 }, { 4792, 0x0108 }, { 4794, 0x4408 }, { 4797, 0x9840 }, { 4801, 0x2800 }, { 4803, 0x810a }, { 4807, 0x0008 }, /* 0x8e00 */ { 4808, 0x8400 }, { 4810, 0x4001 }, { 4812, 0x0400 }, { 4813, 0x0021 }, { 4815, 0x0794 }, { 4821, 0x8200 }, { 4823, 0x0001 }, { 4824, 0x0050 }, { 4826, 0x2482 }, { 4830, 0x0000 }, { 4830, 0x1c00 }, { 4833, 0x0000 }, { 4833, 0x3c01 }, { 4838, 0x8004 }, { 4840, 0x0800 }, { 4841, 0x4900 }, /* 0x8f00 */ { 4844, 0x0228 }, { 4847, 0xf83c }, { 4856, 0x86c0 }, { 4861, 0xcb08 }, { 4867, 0x6230 }, { 4872, 0xa000 }, { 4874, 0x0004 }, { 4875, 0x0000 }, { 4875, 0x0000 }, { 4875, 0x1800 }, { 4877, 0xa148 }, { 4882, 0x0007 }, { 4885, 0x4024 }, { 4888, 0x0012 }, { 4890, 0x2c40 }, { 4894, 0x2285 }, /* 0x9000 */ { 4899, 0xa96f }, { 4909, 0xe6b3 }, { 4919, 0x400f }, { 4924, 0x5126 }, { 4930, 0x6c86 }, { 4937, 0x723b }, { 4946, 0xe20b }, { 4953, 0xb5a4 }, { 4961, 0x859f }, { 4970, 0x0222 }, { 4973, 0x854c }, { 4979, 0x0123 }, { 4983, 0x0402 }, { 4985, 0x4000 }, { 4986, 0x2102 }, { 4989, 0x2020 }, /* 0x9100 */ { 4991, 0x0004 }, { 4992, 0x0224 }, { 4995, 0x2080 }, { 4997, 0x0004 }, { 4998, 0x7e00 }, { 5004, 0x0004 }, { 5005, 0x1604 }, { 5009, 0x01a0 }, { 5012, 0x2a80 }, { 5016, 0x1004 }, { 5018, 0xd800 }, { 5022, 0x0032 }, { 5025, 0xfa81 }, { 5033, 0x3183 }, { 5039, 0x0488 }, { 5042, 0x0020 }, /* 0x9200 */ { 5043, 0x2000 }, { 5044, 0x4087 }, { 5049, 0x0000 }, { 5049, 0x8410 }, { 5052, 0x0221 }, { 5055, 0x4880 }, { 5058, 0x0074 }, { 5062, 0x0000 }, { 5062, 0x0029 }, { 5065, 0x114a }, { 5070, 0x0000 }, { 5070, 0x02c8 }, { 5074, 0x9000 }, { 5076, 0x0004 }, { 5077, 0x0410 }, { 5079, 0x1100 }, /* 0x9300 */ { 5081, 0x0010 }, { 5082, 0xc501 }, { 5087, 0xc957 }, { 5096, 0x0000 }, { 5096, 0x2d00 }, { 5100, 0x0810 }, { 5102, 0x4000 }, { 5103, 0x5020 }, { 5106, 0x1000 }, { 5107, 0x0450 }, { 5110, 0x3088 }, { 5114, 0x0001 }, { 5115, 0x0008 }, { 5116, 0x4002 }, { 5118, 0x0012 }, { 5120, 0x0040 }, /* 0x9400 */ { 5121, 0x0010 }, { 5122, 0x0100 }, { 5123, 0x0820 }, { 5125, 0x0120 }, { 5127, 0x0010 }, { 5128, 0x0806 }, { 5131, 0x0000 }, { 5131, 0xa000 }, { 5133, 0x0000 }, { 5133, 0x0000 }, { 5133, 0x0000 }, { 5133, 0x0000 }, { 5133, 0x0000 }, { 5133, 0x0000 }, { 5133, 0x0000 }, { 5133, 0x0000 }, /* 0x9500 */ { 5133, 0x0000 }, { 5133, 0x0000 }, { 5133, 0x0000 }, { 5133, 0x0000 }, { 5133, 0x0000 }, { 5133, 0x0000 }, { 5133, 0x0000 }, { 5133, 0x0080 }, { 5134, 0x8a09 }, { 5139, 0x011e }, { 5144, 0x2138 }, { 5149, 0x1802 }, { 5152, 0x0480 }, { 5154, 0x1070 }, { 5158, 0x0006 }, { 5160, 0x0000 }, /* 0x9600 */ { 5160, 0x0000 }, { 5160, 0x1000 }, { 5161, 0x4402 }, { 5164, 0x8804 }, { 5167, 0x3815 }, { 5173, 0xf801 }, { 5179, 0x041c }, { 5183, 0x21e9 }, { 5190, 0x6c60 }, { 5196, 0x1b30 }, { 5202, 0x0588 }, { 5206, 0x0882 }, { 5209, 0x7af3 }, { 5220, 0x1a60 }, { 5225, 0x870c }, { 5231, 0x0ac5 }, /* 0x9700 */ { 5237, 0x00c1 }, { 5240, 0x524a }, { 5246, 0x0080 }, { 5247, 0x2205 }, { 5251, 0x0114 }, { 5254, 0x5042 }, { 5258, 0x2206 }, { 5262, 0x0490 }, { 5265, 0xa800 }, { 5268, 0x0000 }, { 5268, 0x2901 }, { 5272, 0x0000 }, { 5272, 0x0840 }, { 5274, 0x1008 }, { 5276, 0x0000 }, { 5276, 0x8848 }, /* 0x9800 */ { 5280, 0x156f }, { 5289, 0x018f }, { 5295, 0x2000 }, { 5296, 0x0b01 }, { 5300, 0x7040 }, { 5304, 0x4510 }, { 5308, 0x88a0 }, { 5312, 0x0000 }, { 5312, 0x0000 }, { 5312, 0x0000 }, { 5312, 0x8100 }, { 5314, 0x0002 }, { 5315, 0x0090 }, { 5317, 0x9800 }, { 5320, 0xe006 }, { 5325, 0x7010 }, /* 0x9900 */ { 5329, 0x1608 }, { 5333, 0x4109 }, { 5337, 0x0101 }, { 5339, 0x0000 }, { 5339, 0x3a20 }, { 5344, 0x0096 }, { 5348, 0x0000 }, { 5348, 0x0000 }, { 5348, 0x0000 }, { 5348, 0x2240 }, { 5351, 0x7120 }, { 5356, 0x021a }, { 5360, 0x0002 }, { 5361, 0xa227 }, { 5368, 0x2000 }, { 5369, 0x8002 }, /* 0x9a00 */ { 5371, 0xc102 }, { 5375, 0x0200 }, { 5376, 0x0800 }, { 5377, 0x00c1 }, { 5380, 0x2029 }, { 5384, 0x8ca0 }, { 5389, 0x0624 }, { 5393, 0x0000 }, { 5393, 0x0000 }, { 5393, 0x0000 }, { 5393, 0x0100 }, { 5394, 0x0100 }, { 5395, 0x0000 }, { 5395, 0x0118 }, { 5398, 0x4020 }, { 5400, 0x0000 }, /* 0x9b00 */ { 5400, 0x0000 }, { 5400, 0x0400 }, { 5401, 0x0480 }, { 5403, 0x1002 }, { 5405, 0x803e }, { 5411, 0x0410 }, { 5413, 0x8000 }, { 5414, 0x0000 }, { 5414, 0x4000 }, { 5415, 0x8002 }, { 5417, 0x4800 }, { 5419, 0x0000 }, { 5419, 0x0200 }, { 5420, 0x0040 }, { 5421, 0x0110 }, { 5423, 0x0000 }, /* 0x9c00 */ { 5423, 0x2000 }, { 5424, 0x0025 }, { 5427, 0x0020 }, { 5428, 0x0804 }, { 5430, 0x0280 }, { 5432, 0x0080 }, { 5433, 0x0000 }, { 5433, 0x0000 }, { 5433, 0x0000 }, { 5433, 0x0000 }, { 5433, 0x0000 }, { 5433, 0x0000 }, { 5433, 0x0000 }, { 5433, 0x0000 }, { 5433, 0x02a0 }, { 5436, 0x0058 }, /* 0x9d00 */ { 5439, 0x0200 }, { 5440, 0x0800 }, { 5441, 0x0140 }, { 5443, 0x0800 }, { 5444, 0x0000 }, { 5444, 0x2002 }, { 5446, 0x1003 }, { 5449, 0x0004 }, { 5450, 0x0000 }, { 5450, 0x0000 }, { 5450, 0x8200 }, { 5452, 0x0010 }, { 5453, 0x0010 }, { 5454, 0x0080 }, { 5455, 0x0000 }, { 5455, 0x0704 }, /* 0x9e00 */ { 5459, 0x0000 }, { 5459, 0x4400 }, { 5461, 0x0000 }, { 5461, 0x0000 }, { 5461, 0x0000 }, { 5461, 0x0000 }, { 5461, 0x0000 }, { 5461, 0xa220 }, { 5465, 0x0000 }, { 5465, 0xa08c }, { 5470, 0x0020 }, { 5471, 0x4830 }, { 5475, 0x6008 }, { 5478, 0x5912 }, { 5484, 0x0100 }, { 5485, 0x0010 }, /* 0x9f00 */ { 5486, 0x4180 }, { 5489, 0x0008 }, { 5490, 0x0001 }, { 5491, 0x0800 }, { 5492, 0x4c00 }, { 5495, 0x8004 }, { 5497, 0x1482 }, { 5501, 0x0080 }, { 5502, 0x2000 }, { 5503, 0x1021 }, }; static const Summary16 ksc5601_uni2indx_pageac[698] = { /* 0xac00 */ { 5506, 0x0793 }, { 5513, 0x3eff }, { 5526, 0xb011 }, { 5531, 0x1303 }, { 5536, 0x2801 }, { 5539, 0x1110 }, { 5542, 0x0000 }, { 5542, 0x0593 }, { 5548, 0x1e7b }, { 5558, 0xb011 }, { 5563, 0x9703 }, { 5570, 0x3b01 }, { 5576, 0x1112 }, { 5580, 0x00a0 }, { 5582, 0x9593 }, { 5590, 0x306b }, /* 0xad00 */ { 5597, 0xb051 }, { 5603, 0x1102 }, { 5606, 0x3201 }, { 5610, 0x1130 }, { 5614, 0x02b0 }, { 5618, 0x0111 }, { 5621, 0x300a }, { 5625, 0xb879 }, { 5634, 0x1306 }, { 5639, 0x3001 }, { 5642, 0x0010 }, { 5643, 0x0080 }, { 5644, 0x0113 }, { 5648, 0x100b }, { 5652, 0x0011 }, { 5654, 0x9300 }, /* 0xae00 */ { 5658, 0x2b03 }, { 5664, 0x0010 }, { 5665, 0x0000 }, { 5665, 0x0593 }, { 5671, 0x746b }, { 5680, 0xb051 }, { 5686, 0x1323 }, { 5692, 0x3b01 }, { 5698, 0x1030 }, { 5701, 0x0000 }, { 5701, 0x0000 }, { 5701, 0x7000 }, { 5704, 0xb011 }, { 5709, 0x1303 }, { 5714, 0x2900 }, { 5717, 0x1110 }, /* 0xaf00 */ { 5720, 0x2180 }, { 5723, 0x0001 }, { 5724, 0x3000 }, { 5726, 0xb015 }, { 5732, 0x030e }, { 5737, 0x3001 }, { 5740, 0x0030 }, { 5742, 0x0200 }, { 5743, 0x0111 }, { 5746, 0x1023 }, { 5750, 0x0000 }, { 5750, 0x1300 }, { 5753, 0x6b81 }, { 5760, 0x1010 }, { 5762, 0x0300 }, { 5764, 0x0113 }, /* 0xb000 */ { 5768, 0x1013 }, { 5772, 0x3011 }, { 5776, 0x0100 }, { 5777, 0x0000 }, { 5777, 0x5530 }, { 5783, 0x22b8 }, { 5789, 0x0000 }, { 5789, 0x3000 }, { 5791, 0xb011 }, { 5796, 0x9702 }, { 5802, 0xfb07 }, { 5812, 0x113a }, { 5818, 0x03b0 }, { 5823, 0x0113 }, { 5827, 0x0021 }, { 5829, 0x0000 }, /* 0xb100 */ { 5829, 0x1b00 }, { 5833, 0x3b0d }, { 5841, 0x1138 }, { 5846, 0x03b0 }, { 5851, 0x0113 }, { 5855, 0x1133 }, { 5861, 0x0001 }, { 5862, 0x1300 }, { 5865, 0x2b05 }, { 5871, 0x111c }, { 5876, 0x0100 }, { 5877, 0x0000 }, { 5877, 0x1000 }, { 5878, 0xb011 }, { 5883, 0x1300 }, { 5886, 0x2a01 }, /* 0xb200 */ { 5890, 0x1930 }, { 5895, 0x02b0 }, { 5899, 0x0001 }, { 5900, 0x1010 }, { 5902, 0x0000 }, { 5902, 0x1100 }, { 5904, 0x0301 }, { 5907, 0x1030 }, { 5910, 0x0230 }, { 5913, 0x0713 }, { 5919, 0x146b }, { 5926, 0x0011 }, { 5928, 0x1300 }, { 5931, 0x2b05 }, { 5937, 0xf974 }, { 5947, 0x8fb8 }, /* 0xb300 */ { 5956, 0x0113 }, { 5960, 0x103b }, { 5966, 0x0000 }, { 5966, 0x0000 }, { 5966, 0x0000 }, { 5966, 0xd970 }, { 5974, 0x4ab0 }, { 5980, 0x0113 }, { 5984, 0x103b }, { 5990, 0x0011 }, { 5992, 0x1103 }, { 5996, 0x0000 }, { 5996, 0x5930 }, { 6002, 0x2ab1 }, { 6009, 0x0111 }, { 6012, 0x1000 }, /* 0xb400 */ { 6013, 0x0000 }, { 6013, 0x1101 }, { 6016, 0x0b01 }, { 6020, 0x0010 }, { 6021, 0x0000 }, { 6021, 0x0113 }, { 6025, 0x102b }, { 6030, 0x0000 }, { 6030, 0x0101 }, { 6032, 0x2000 }, { 6033, 0x1110 }, { 6036, 0x02a0 }, { 6039, 0x0111 }, { 6042, 0x3021 }, { 6046, 0xb059 }, { 6053, 0x0102 }, /* 0xb500 */ { 6055, 0x0000 }, { 6055, 0x1930 }, { 6060, 0x07b0 }, { 6066, 0x0113 }, { 6070, 0x383b }, { 6078, 0xb011 }, { 6083, 0x0003 }, { 6085, 0x0000 }, { 6085, 0x0000 }, { 6085, 0x0000 }, { 6085, 0x0d13 }, { 6091, 0x383b }, { 6099, 0xb011 }, { 6104, 0x0103 }, { 6107, 0x1000 }, { 6108, 0x0000 }, /* 0xb600 */ { 6108, 0x0000 }, { 6108, 0x0113 }, { 6112, 0x1020 }, { 6114, 0x0010 }, { 6115, 0x0100 }, { 6116, 0x0000 }, { 6116, 0x0110 }, { 6118, 0x0000 }, { 6118, 0x0000 }, { 6118, 0x3000 }, { 6120, 0x1811 }, { 6124, 0x0002 }, { 6125, 0x0000 }, { 6125, 0x0010 }, { 6126, 0x0000 }, { 6126, 0x0111 }, /* 0xb700 */ { 6129, 0x0023 }, { 6132, 0x0000 }, { 6132, 0x9300 }, { 6136, 0x0b01 }, { 6140, 0x1110 }, { 6143, 0x0030 }, { 6145, 0x0111 }, { 6148, 0x302b }, { 6154, 0xb011 }, { 6159, 0x13c7 }, { 6167, 0x3b01 }, { 6173, 0x0130 }, { 6176, 0x0280 }, { 6178, 0x0000 }, { 6178, 0x3000 }, { 6180, 0xb011 }, /* 0xb800 */ { 6185, 0x1383 }, { 6191, 0x2b01 }, { 6196, 0x1130 }, { 6200, 0x03b0 }, { 6205, 0x0011 }, { 6207, 0x300a }, { 6211, 0xb011 }, { 6216, 0x1102 }, { 6219, 0x2000 }, { 6220, 0x0000 }, { 6220, 0x0100 }, { 6221, 0x0111 }, { 6224, 0x102b }, { 6229, 0xa011 }, { 6233, 0x1302 }, { 6237, 0x2b01 }, /* 0xb900 */ { 6242, 0x0010 }, { 6243, 0x0100 }, { 6244, 0x0001 }, { 6245, 0x3000 }, { 6247, 0x9011 }, { 6251, 0x1302 }, { 6255, 0x2b01 }, { 6260, 0x1130 }, { 6264, 0x66b0 }, { 6271, 0x0000 }, { 6271, 0x3000 }, { 6273, 0xb011 }, { 6278, 0xd302 }, { 6284, 0x6b07 }, { 6292, 0x113a }, { 6298, 0x07b0 }, /* 0xba00 */ { 6304, 0x0103 }, { 6307, 0x0020 }, { 6308, 0x0000 }, { 6308, 0x1300 }, { 6311, 0x6b05 }, { 6318, 0x1138 }, { 6323, 0x03b0 }, { 6328, 0x0113 }, { 6332, 0x10b8 }, { 6337, 0x0000 }, { 6337, 0x1b00 }, { 6341, 0x2b05 }, { 6347, 0x0110 }, { 6349, 0x0300 }, { 6351, 0x0000 }, { 6351, 0x1000 }, /* 0xbb00 */ { 6352, 0xa011 }, { 6356, 0x1102 }, { 6359, 0x0a01 }, { 6362, 0x7970 }, { 6370, 0xa2b0 }, { 6376, 0x0111 }, { 6379, 0x100a }, { 6382, 0x0000 }, { 6382, 0x1100 }, { 6384, 0x0001 }, { 6385, 0x1110 }, { 6388, 0x0090 }, { 6390, 0x0111 }, { 6393, 0x0009 }, { 6395, 0x0000 }, { 6395, 0x9300 }, /* 0xbc00 */ { 6399, 0xbb05 }, { 6407, 0xf9f2 }, { 6418, 0x22b0 }, { 6423, 0x0113 }, { 6427, 0x323b }, { 6435, 0x2001 }, { 6437, 0x0000 }, { 6437, 0x0000 }, { 6437, 0x5930 }, { 6443, 0x06b0 }, { 6448, 0x0193 }, { 6453, 0x303b }, { 6460, 0xa011 }, { 6464, 0x1123 }, { 6469, 0x0000 }, { 6469, 0x1170 }, /* 0xbd00 */ { 6474, 0x02b0 }, { 6478, 0x0011 }, { 6480, 0x1010 }, { 6482, 0x0000 }, { 6482, 0x1301 }, { 6486, 0x0301 }, { 6489, 0x0110 }, { 6491, 0x0000 }, { 6491, 0x0793 }, { 6498, 0x162b }, { 6505, 0x0010 }, { 6506, 0x0101 }, { 6508, 0x0000 }, { 6508, 0x1130 }, { 6512, 0x0200 }, { 6513, 0x0111 }, /* 0xbe00 */ { 6516, 0x3029 }, { 6521, 0xb011 }, { 6526, 0x0000 }, { 6526, 0x0000 }, { 6526, 0x5130 }, { 6531, 0x0eb0 }, { 6537, 0x0513 }, { 6542, 0x383b }, { 6550, 0xb011 }, { 6555, 0x0303 }, { 6559, 0x0100 }, { 6560, 0x0000 }, { 6560, 0x0000 }, { 6560, 0x0193 }, { 6565, 0x1039 }, { 6570, 0x0000 }, /* 0xbf00 */ { 6570, 0x0302 }, { 6573, 0x3b00 }, { 6578, 0x0000 }, { 6578, 0x0000 }, { 6578, 0x0113 }, { 6582, 0x0023 }, { 6585, 0x0000 }, { 6585, 0x0000 }, { 6585, 0x0000 }, { 6585, 0x0010 }, { 6586, 0x0000 }, { 6586, 0x0001 }, { 6587, 0x3020 }, { 6590, 0x9011 }, { 6594, 0x0002 }, { 6595, 0x0000 }, /* 0xc000 */ { 6595, 0x0000 }, { 6595, 0x0000 }, { 6595, 0x0000 }, { 6595, 0x1000 }, { 6596, 0x0000 }, { 6596, 0x1102 }, { 6599, 0x0301 }, { 6602, 0x0000 }, { 6602, 0x0000 }, { 6602, 0x0113 }, { 6606, 0xb02b }, { 6613, 0xb079 }, { 6621, 0x1323 }, { 6627, 0x3b01 }, { 6633, 0x1130 }, { 6637, 0x02b0 }, /* 0xc100 */ { 6641, 0x0111 }, { 6644, 0xf021 }, { 6650, 0xb0d9 }, { 6658, 0x1343 }, { 6664, 0x3b01 }, { 6670, 0x1130 }, { 6674, 0x03b0 }, { 6679, 0x0111 }, { 6682, 0x7020 }, { 6686, 0xb051 }, { 6692, 0x1322 }, { 6697, 0x2001 }, { 6699, 0x1110 }, { 6702, 0x0190 }, { 6705, 0x0111 }, { 6708, 0x300b }, /* 0xc200 */ { 6713, 0xb011 }, { 6718, 0x9302 }, { 6723, 0xab01 }, { 6729, 0x0016 }, { 6732, 0x0100 }, { 6733, 0x0113 }, { 6737, 0x3021 }, { 6741, 0xb011 }, { 6746, 0x0302 }, { 6749, 0x2901 }, { 6753, 0x3130 }, { 6758, 0x02b0 }, { 6762, 0x0000 }, { 6762, 0x3000 }, { 6764, 0xb819 }, { 6771, 0x1b42 }, /* 0xc300 */ { 6777, 0x3301 }, { 6782, 0x1138 }, { 6787, 0x0330 }, { 6791, 0x0000 }, { 6791, 0x0020 }, { 6792, 0x0000 }, { 6792, 0x1300 }, { 6795, 0x3305 }, { 6801, 0x1110 }, { 6804, 0x0000 }, { 6804, 0x0000 }, { 6804, 0x0000 }, { 6804, 0x0001 }, { 6805, 0x9300 }, { 6809, 0x2305 }, { 6814, 0x0130 }, /* 0xc400 */ { 6817, 0x0100 }, { 6818, 0x0001 }, { 6819, 0x1010 }, { 6821, 0x3011 }, { 6825, 0x0100 }, { 6826, 0x0000 }, { 6826, 0x1130 }, { 6830, 0x0230 }, { 6833, 0x0001 }, { 6834, 0x1010 }, { 6836, 0x0000 }, { 6836, 0x1100 }, { 6838, 0x0000 }, { 6838, 0x0000 }, { 6838, 0x0200 }, { 6839, 0x8513 }, /* 0xc500 */ { 6845, 0x1003 }, { 6848, 0x1011 }, { 6851, 0x1300 }, { 6854, 0x2b01 }, { 6859, 0x7730 }, { 6867, 0x63b8 }, { 6875, 0x0113 }, { 6879, 0x303b }, { 6886, 0xb091 }, { 6892, 0x11a2 }, { 6897, 0x0201 }, { 6899, 0x7b30 }, { 6907, 0x57f0 }, { 6916, 0x0113 }, { 6920, 0x702b }, { 6927, 0xf0d1 }, /* 0xc600 */ { 6935, 0x11e3 }, { 6942, 0x1b01 }, { 6947, 0x7130 }, { 6953, 0x0ab9 }, { 6960, 0x0113 }, { 6964, 0x303b }, { 6971, 0x9001 }, { 6974, 0x1302 }, { 6978, 0x2b01 }, { 6983, 0x1130 }, { 6987, 0x02b0 }, { 6991, 0x0713 }, { 6997, 0x302b }, { 7003, 0x3011 }, { 7007, 0x1303 }, { 7012, 0x2301 }, /* 0xc700 */ { 7016, 0x1130 }, { 7020, 0x02b0 }, { 7024, 0x0113 }, { 7028, 0x30ab }, { 7035, 0xb411 }, { 7041, 0x11fe }, { 7050, 0x0901 }, { 7053, 0x7130 }, { 7059, 0x47b8 }, { 7067, 0x05d3 }, { 7074, 0x307b }, { 7082, 0xb011 }, { 7087, 0x5303 }, { 7093, 0x2101 }, { 7096, 0x1110 }, { 7099, 0x0000 }, /* 0xc800 */ { 7099, 0x0513 }, { 7104, 0x306b }, { 7111, 0xb011 }, { 7116, 0x1102 }, { 7119, 0x3301 }, { 7124, 0x0010 }, { 7125, 0x0000 }, { 7125, 0x0513 }, { 7130, 0x38eb }, { 7139, 0xa010 }, { 7142, 0x0102 }, { 7144, 0x3000 }, { 7146, 0x1110 }, { 7149, 0x02b0 }, { 7153, 0x0013 }, { 7156, 0x3020 }, /* 0xc900 */ { 7159, 0xb071 }, { 7166, 0x0102 }, { 7168, 0x1000 }, { 7169, 0x0010 }, { 7170, 0x0000 }, { 7170, 0x0113 }, { 7174, 0x100b }, { 7178, 0x1011 }, { 7181, 0x1300 }, { 7184, 0x2b01 }, { 7189, 0x0000 }, { 7189, 0x0000 }, { 7189, 0x0593 }, { 7195, 0x366b }, { 7204, 0xb095 }, { 7211, 0x1303 }, /* 0xca00 */ { 7216, 0x3b01 }, { 7222, 0x0110 }, { 7224, 0x0200 }, { 7225, 0x0000 }, { 7225, 0x3000 }, { 7227, 0xb011 }, { 7232, 0x0103 }, { 7235, 0x2000 }, { 7236, 0x0010 }, { 7237, 0x0100 }, { 7238, 0x0000 }, { 7238, 0x3000 }, { 7240, 0xb011 }, { 7245, 0x030a }, { 7249, 0x1001 }, { 7251, 0x0010 }, /* 0xcb00 */ { 7252, 0x0100 }, { 7253, 0x0111 }, { 7256, 0x0003 }, { 7258, 0x0000 }, { 7258, 0x1302 }, { 7262, 0x2301 }, { 7266, 0x0010 }, { 7267, 0x0300 }, { 7269, 0x0000 }, { 7269, 0x1000 }, { 7270, 0x0000 }, { 7270, 0x0100 }, { 7271, 0x0000 }, { 7271, 0x0010 }, { 7272, 0x0290 }, { 7275, 0x0000 }, /* 0xcc00 */ { 7275, 0x3000 }, { 7277, 0x3011 }, { 7281, 0x5386 }, { 7288, 0x7b01 }, { 7295, 0x1130 }, { 7299, 0x03b0 }, { 7304, 0x0151 }, { 7308, 0x0021 }, { 7310, 0x0000 }, { 7310, 0x1300 }, { 7313, 0x3b01 }, { 7319, 0x1130 }, { 7323, 0x02b0 }, { 7327, 0x0011 }, { 7329, 0x1010 }, { 7331, 0x0001 }, /* 0xcd00 */ { 7332, 0x1302 }, { 7336, 0x2b01 }, { 7341, 0x1110 }, { 7344, 0x0200 }, { 7345, 0x0000 }, { 7345, 0x1000 }, { 7346, 0xb011 }, { 7351, 0x0102 }, { 7353, 0x0100 }, { 7354, 0x1130 }, { 7358, 0x02b0 }, { 7362, 0x0001 }, { 7363, 0x1010 }, { 7365, 0x0001 }, { 7366, 0x1100 }, { 7368, 0x2b01 }, /* 0xce00 */ { 7373, 0x1110 }, { 7376, 0x0210 }, { 7378, 0x0113 }, { 7382, 0x002b }, { 7386, 0x0000 }, { 7386, 0x9300 }, { 7390, 0x2b03 }, { 7396, 0x1130 }, { 7400, 0x02b0 }, { 7404, 0x0113 }, { 7408, 0x303b }, { 7415, 0x0000 }, { 7415, 0x0002 }, { 7416, 0x0000 }, { 7416, 0x1930 }, { 7421, 0x03b0 }, /* 0xcf00 */ { 7426, 0x0113 }, { 7430, 0x102b }, { 7435, 0xb011 }, { 7440, 0x0103 }, { 7443, 0x0000 }, { 7443, 0x1130 }, { 7447, 0x02b0 }, { 7451, 0x0113 }, { 7455, 0x1021 }, { 7458, 0x0000 }, { 7458, 0x0102 }, { 7460, 0x0001 }, { 7461, 0x0010 }, { 7462, 0x0000 }, { 7462, 0x0113 }, { 7466, 0x102b }, /* 0xd000 */ { 7471, 0x0011 }, { 7473, 0x0102 }, { 7475, 0x2000 }, { 7476, 0x1130 }, { 7480, 0x02b0 }, { 7484, 0x0111 }, { 7487, 0x3001 }, { 7490, 0x3011 }, { 7494, 0x0002 }, { 7495, 0x0000 }, { 7495, 0x1130 }, { 7499, 0x02b0 }, { 7503, 0x0313 }, { 7508, 0x303b }, { 7515, 0xb011 }, { 7520, 0x0103 }, /* 0xd100 */ { 7523, 0x2000 }, { 7524, 0x0000 }, { 7524, 0x0000 }, { 7524, 0x0513 }, { 7529, 0x303b }, { 7536, 0xb011 }, { 7541, 0x1102 }, { 7544, 0x1000 }, { 7545, 0x0110 }, { 7547, 0x0000 }, { 7547, 0x0113 }, { 7551, 0x142b }, { 7557, 0x0001 }, { 7558, 0x0100 }, { 7559, 0x0000 }, { 7559, 0x0110 }, /* 0xd200 */ { 7561, 0x0280 }, { 7563, 0x0001 }, { 7564, 0x3000 }, { 7566, 0xb011 }, { 7571, 0x0102 }, { 7573, 0x1000 }, { 7574, 0x0010 }, { 7575, 0x0000 }, { 7575, 0x0113 }, { 7579, 0x1023 }, { 7583, 0x1011 }, { 7586, 0x9302 }, { 7591, 0x0b05 }, { 7596, 0x1110 }, { 7599, 0x0030 }, { 7601, 0x0113 }, /* 0xd300 */ { 7605, 0x702b }, { 7612, 0xb051 }, { 7618, 0x1323 }, { 7624, 0x3b01 }, { 7630, 0x0030 }, { 7632, 0x0000 }, { 7632, 0x0000 }, { 7632, 0x3000 }, { 7634, 0xb011 }, { 7639, 0x1303 }, { 7644, 0x2b01 }, { 7649, 0x1110 }, { 7652, 0x0330 }, { 7656, 0x0101 }, { 7658, 0x300a }, { 7662, 0xb011 }, /* 0xd400 */ { 7667, 0x0102 }, { 7669, 0x2000 }, { 7670, 0x0000 }, { 7670, 0x0000 }, { 7670, 0x0011 }, { 7672, 0x1000 }, { 7673, 0xa011 }, { 7677, 0x9300 }, { 7681, 0x2b05 }, { 7687, 0x0010 }, { 7688, 0x0200 }, { 7689, 0x0000 }, { 7689, 0x1000 }, { 7690, 0x9011 }, { 7694, 0x1100 }, { 7696, 0x2901 }, /* 0xd500 */ { 7700, 0x1110 }, { 7703, 0x00b0 }, { 7706, 0x0000 }, { 7706, 0x3000 }, { 7708, 0xb011 }, { 7713, 0x1302 }, { 7717, 0x2b21 }, { 7723, 0x1130 }, { 7727, 0x03b0 }, { 7732, 0x0001 }, { 7733, 0x0020 }, { 7734, 0x0000 }, { 7734, 0x1300 }, { 7737, 0x2b05 }, { 7743, 0x1130 }, { 7747, 0x02b0 }, /* 0xd600 */ { 7751, 0x0113 }, { 7755, 0x103b }, { 7761, 0x2011 }, { 7764, 0x1300 }, { 7767, 0x2b21 }, { 7773, 0x1132 }, { 7778, 0x0280 }, { 7780, 0x0013 }, { 7783, 0x3028 }, { 7787, 0xa011 }, { 7791, 0x1102 }, { 7794, 0x0a01 }, { 7797, 0x1130 }, { 7801, 0x0292 }, { 7805, 0x0111 }, { 7808, 0x3021 }, /* 0xd700 */ { 7812, 0x0011 }, { 7814, 0x1302 }, { 7818, 0x2b01 }, { 7823, 0x1130 }, { 7827, 0x0290 }, { 7830, 0x03d3 }, { 7837, 0x122b }, { 7843, 0x3011 }, { 7847, 0x1302 }, { 7851, 0x2b01 }, }; static const Summary16 ksc5601_uni2indx_pagef9[17] = { /* 0xf900 */ { 7856, 0xffff }, { 7872, 0xffff }, { 7888, 0xffff }, { 7904, 0xffff }, { 7920, 0xffff }, { 7936, 0xffff }, { 7952, 0xffff }, { 7968, 0xffff }, { 7984, 0xffff }, { 8000, 0xffff }, { 8016, 0xffff }, { 8032, 0xffff }, { 8048, 0xffff }, { 8064, 0xffff }, { 8080, 0xffff }, { 8096, 0xffff }, /* 0xfa00 */ { 8112, 0x0fff }, }; static const Summary16 ksc5601_uni2indx_pageff[15] = { /* 0xff00 */ { 8124, 0xfffe }, { 8139, 0xffff }, { 8155, 0xffff }, { 8171, 0xffff }, { 8187, 0xffff }, { 8203, 0x7fff }, { 8218, 0x0000 }, { 8218, 0x0000 }, { 8218, 0x0000 }, { 8218, 0x0000 }, { 8218, 0x0000 }, { 8218, 0x0000 }, { 8218, 0x0000 }, { 8218, 0x0000 }, { 8218, 0x006f }, }; static int ksc5601_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { if (n >= 2) { const Summary16 *summary = NULL; if (wc < 0x0460) summary = &ksc5601_uni2indx_page00[(wc>>4)]; else if (wc >= 0x2000 && wc < 0x2670) /* General Punctuation (2000, 206F) */ summary = &ksc5601_uni2indx_page20[(wc>>4)-0x200]; else if (wc >= 0x3000 && wc < 0x33e0) /* CJK Symbols and Punctuation (3000, 303F) */ summary = &ksc5601_uni2indx_page30[(wc>>4)-0x300]; else if (wc >= 0x4e00 && wc < 0x9fa0) /* CJK Unified Ideographs (4E00, 9FFF) */ summary = &ksc5601_uni2indx_page4e[(wc>>4)-0x4e0]; else if (wc >= 0xac00 && wc < 0xd7a0) /* Hangul Syllables (AC00, D7AF) 11183 */ summary = &ksc5601_uni2indx_pageac[(wc>>4)-0xac0]; else if (wc >= 0xf900 && wc < 0xfa10) /* CJK Compatibility Ideographs (F900, FAFF) */ summary = &ksc5601_uni2indx_pagef9[(wc>>4)-0xf90]; else if (wc >= 0xff00 && wc < 0xfff0) /* Halfwidth and Fullwidth Forms (FF00, FFEF) */ summary = &ksc5601_uni2indx_pageff[(wc>>4)-0xff0]; if (summary) { unsigned short used = summary->used; unsigned int i = wc & 0x0f; if (used & ((unsigned short) 1 << i)) { unsigned short c; /* Keep in `used' only the bits 0..i-1. */ used &= ((unsigned short) 1 << i) - 1; /* Add `summary->indx' and the number of bits set in `used'. */ used = (used & 0x5555) + ((used & 0xaaaa) >> 1); used = (used & 0x3333) + ((used & 0xcccc) >> 2); used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4); used = (used & 0x00ff) + (used >> 8); c = ksc5601_2charset[summary->indx + used]; r[0] = (c >> 8); r[1] = (c & 0xff); return 2; } } return RET_ILSEQ; } return RET_TOOSMALL; } { 6570, 0x0000 }, /* 0xbf00 */ { 6570, 0x0302 }, { 6573, 0x3b00 }, { 6578, 0x0000 }, { 6578, 0x0000 }, { 6578, 0x0113 }, { 6582, 0x0023 }, { 6585, 0x0000 }, { 6585, 0x0000 }, { 6585, 0x0000 }, { 6585, 0x0010 }, { 6586, 0x0000 }, { 6586, 0x0001 }, { 6587, 0x3020 }, { 6590, 0x9011 }, { 6594, 0x0002 }, { 6595, 0x0000 }, /* 0xc000 */ {libX11-1.6.3/src/xlibi18n/lcUniConv/8bit_tab_to_h.c000064401431060000012000000407671247741723500220720ustar00alancstaff00002660200006 /* * Generates an 8-bit character set table from a .TXT table as found on * ftp.unicode.org or from a table containing the 256 Unicode values as * hexadecimal integers. * Examples: * * ./8bit_tab_to_h ISO-8859-1 iso8859_1 < tab8859_1 * ./8bit_tab_to_h ISO-8859-2 iso8859_2 < tab8859_2 * ./8bit_tab_to_h ISO-8859-3 iso8859_3 < tab8859_3 * ./8bit_tab_to_h ISO-8859-4 iso8859_4 < tab8859_4 * ./8bit_tab_to_h ISO-8859-5 iso8859_5 < tab8859_5 * ./8bit_tab_to_h ISO-8859-6 iso8859_6 < tab8859_6 * ./8bit_tab_to_h ISO-8859-7 iso8859_7 < tab8859_7 * ./8bit_tab_to_h ISO-8859-8 iso8859_8 < tab8859_8 * ./8bit_tab_to_h ISO-8859-9 iso8859_9 < tab8859_9 * ./8bit_tab_to_h ISO-8859-10 iso8859_10 < tab8859_10 * ./8bit_tab_to_h ISO-8859-14 iso8859_14 < tab8859_14 * ./8bit_tab_to_h ISO-8859-15 iso8859_15 < tab8859_15 * ./8bit_tab_to_h JISX0201.1976-0 jisx0201 < jis0201 * ./8bit_tab_to_h TIS620-0 tis620 < tabtis620 * ./8bit_tab_to_h KOI8-R koi8_r < tabkoi8_r * ./8bit_tab_to_h KOI8-U koi8_u < tabkoi8_u * ./8bit_tab_to_h ARMSCII-8 armscii_8 < tabarmscii_8 * ./8bit_tab_to_h CP1133 cp1133 < tabibm_cp1133 * ./8bit_tab_to_h MULELAO-1 mulelao < tabmulelao_1 * ./8bit_tab_to_h VISCII1.1-1 viscii1 < tabviscii * ./8bit_tab_to_h TCVN-5712 tcvn < tabtcvn * ./8bit_tab_to_h GEORGIAN-ACADEMY georgian_ac < tabgeorgian_academy * ./8bit_tab_to_h GEORGIAN-PS georgian_ps < tabgeorgian_ps * * ./8bit_tab_to_h ISO-8859-1 iso8859_1 < 8859-1.TXT * ./8bit_tab_to_h ISO-8859-2 iso8859_2 < 8859-2.TXT * ./8bit_tab_to_h ISO-8859-3 iso8859_3 < 8859-3.TXT * ./8bit_tab_to_h ISO-8859-4 iso8859_4 < 8859-4.TXT * ./8bit_tab_to_h ISO-8859-5 iso8859_5 < 8859-5.TXT * ./8bit_tab_to_h ISO-8859-6 iso8859_6 < 8859-6.TXT * ./8bit_tab_to_h ISO-8859-7 iso8859_7 < 8859-7.TXT * ./8bit_tab_to_h ISO-8859-8 iso8859_8 < 8859-8.TXT * ./8bit_tab_to_h ISO-8859-9 iso8859_9 < 8859-9.TXT * ./8bit_tab_to_h ISO-8859-10 iso8859_10 < 8859-10.TXT * ./8bit_tab_to_h ISO-8859-14 iso8859_14 < 8859-14.TXT * ./8bit_tab_to_h ISO-8859-15 iso8859_15 < 8859-15.TXT * ./8bit_tab_to_h JISX0201.1976-0 jisx0201 < JIS0201.TXT * ./8bit_tab_to_h KOI8-R koi8_r < KOI8-R.TXT */ #include #include #include #include int main (int argc, char *argv[]) { const char* charsetname; const char* c_charsetname; const char* filename; const char* directory; int charset2uni[0x100]; if (argc != 3 && argc != 4 && argc != 5) exit(1); charsetname = argv[1]; c_charsetname = argv[2]; if (argc > 3) { filename = argv[3]; } else { char* s = malloc(strlen(c_charsetname)+strlen(".h")+1); strcpy(s,c_charsetname); strcat(s,".h"); filename = s; } directory = (argc > 4 ? argv[4] : ""); fprintf(stderr, "Creating %s%s\n", directory, filename); { int i, c; c = getc(stdin); ungetc(c,stdin); if (c == '#') { /* Read a unicode.org style .TXT file. */ for (i = 0; i < 0x100; i++) charset2uni[i] = 0xfffd; for (;;) { c = getc(stdin); if (c == EOF) break; if (c == '\n' || c == ' ' || c == '\t') continue; if (c == '#') { do { c = getc(stdin); } while (!(c == EOF || c == '\n')); continue; } ungetc(c,stdin); if (scanf("0x%x", &i) != 1 || !(i >= 0 && i < 0x100)) exit(1); do { c = getc(stdin); } while (c == ' ' || c == '\t'); if (c != EOF) ungetc(c,stdin); if (c == '\n' || c == '#') continue; if (scanf("0x%x", &charset2uni[i]) != 1) exit(1); } } else { /* Read a table of hexadecimal Unicode values. */ for (i = 0; i < 0x100; i++) { if (scanf("%x", &charset2uni[i]) != 1) exit(1); if (charset2uni[i] < 0 || charset2uni[i] == 0xffff) charset2uni[i] = 0xfffd; } if (scanf("%x", &i) != EOF) exit(1); } } /* Write the output file. */ { FILE* f; { char* fname = malloc(strlen(directory)+strlen(filename)+1); strcpy(fname,directory); strcat(fname,filename); f = fopen(fname,"w"); if (f == NULL) exit(1); } fprintf(f, "\n"); fprintf(f, "/*\n"); fprintf(f, " * %s\n", charsetname); fprintf(f, " */\n"); fprintf(f, "\n"); { int i, i1, i2, i3; int line[16]; int tableno; struct { int minline; int maxline; } tables[16]; bool some_invalid; bool final_ret_reached; for (i1 = 0; i1 < 16; i1++) { bool all_invalid = true; bool all_identity = true; for (i2 = 0; i2 < 16; i2++) { i = 16*i1+i2; if (charset2uni[i] != 0xfffd) all_invalid = false; if (charset2uni[i] != i) all_identity = false; } if (all_invalid) line[i1] = -2; else if (all_identity) line[i1] = -1; else line[i1] = 0; } tableno = 0; for (i1 = 0; i1 < 16; i1++) { if (line[i1] >= 0) { if (i1 > 0 && tableno > 0 && line[i1-1] == tableno-1) { line[i1] = tableno-1; tables[tableno-1].maxline = i1; } else { tableno++; line[i1] = tableno-1; tables[tableno-1].minline = tables[tableno-1].maxline = i1; } } } some_invalid = false; for (i = 0; i < 0x100; i++) if (charset2uni[i] == 0xfffd) some_invalid = true; if (tableno > 0) { int t; for (t = 0; t < tableno; t++) { fprintf(f, "static const unsigned short %s_2uni", c_charsetname); if (tableno > 1) fprintf(f, "_%d", t+1); fprintf(f, "[%d] = {\n", 16*(tables[t].maxline-tables[t].minline+1)); for (i1 = tables[t].minline; i1 <= tables[t].maxline; i1++) { fprintf(f, " /* 0x%02x */\n", 16*i1); for (i2 = 0; i2 < 2; i2++) { fprintf(f, " "); for (i3 = 0; i3 < 8; i3++) { i = 16*i1+8*i2+i3; fprintf(f, " 0x%04x,", charset2uni[i]); } fprintf(f, "\n"); } } fprintf(f, "};\n"); } fprintf(f, "\n"); } final_ret_reached = false; fprintf(f, "static int\n%s_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)\n", c_charsetname); fprintf(f, "{\n"); fprintf(f, " unsigned char c = *s;\n"); if (some_invalid) { for (i1 = 0; i1 < 16;) { int t = line[i1]; const char* indent; for (i2 = i1; i2 < 16 && line[i2] == t; i2++); indent = (i1 == 0 && i2 == 16 ? " " : " "); if (i1 == 0) { if (i2 == 16) { } else { fprintf(f, " if (c < 0x%02x) {\n", 16*i2); } } else { if (i2 == 16) { fprintf(f, " else {\n"); } else { fprintf(f, " else if (c < 0x%02x) {\n", 16*i2); } } if (t == -2) { final_ret_reached = true; } else if (t == -1) { fprintf(f, "%s*pwc = (ucs4_t) c;\n", indent); fprintf(f, "%sreturn 1;\n", indent); } else { fprintf(f, "%s", indent); some_invalid = false; for (i = 16*i1; i < 16*i2; i++) if (charset2uni[i] == 0xfffd) some_invalid = true; if (some_invalid) fprintf(f, "unsigned short wc = "); else fprintf(f, "*pwc = (ucs4_t) "); fprintf(f, "%s_2uni", c_charsetname); if (tableno > 1) fprintf(f, "_%d", t+1); fprintf(f, "[c"); if (tables[t].minline > 0) fprintf(f, "-0x%02x", 16*tables[t].minline); fprintf(f, "];\n"); if (some_invalid) { fprintf(f, "%sif (wc != 0xfffd) {\n", indent); fprintf(f, "%s *pwc = (ucs4_t) wc;\n", indent); fprintf(f, "%s return 1;\n", indent); fprintf(f, "%s}\n", indent); final_ret_reached = true; } else { fprintf(f, "%sreturn 1;\n", indent); } } if (!(i1 == 0 && i2 == 16)) fprintf(f, " }\n"); i1 = i2; } if (final_ret_reached) fprintf(f, " return RET_ILSEQ;\n"); } else { for (i1 = 0; i1 < 16;) { int t = line[i1]; for (i2 = i1; i2 < 16 && line[i2] == t; i2++); if (i1 == 0) { if (i2 == 16) { fprintf(f, " "); } else { fprintf(f, " if (c < 0x%02x)\n ", 16*i2); } } else { if (i2 == 16) { fprintf(f, " else\n "); } else { fprintf(f, " else if (c < 0x%02x)\n ", 16*i2); } } if (t == -1) fprintf(f, "*pwc = (ucs4_t) c;\n"); else { fprintf(f, "*pwc = (ucs4_t) %s_2uni", c_charsetname); if (tableno > 1) fprintf(f, "_%d", t+1); fprintf(f, "[c"); if (tables[t].minline > 0) fprintf(f, "-0x%02x", 16*tables[t].minline); fprintf(f, "];\n"); } i1 = i2; } fprintf(f, " return 1;\n"); } fprintf(f, "}\n"); } fprintf(f, "\n"); { int uni2charset[0x10000]; bool pages[0x100]; int line[0x2000]; int tableno; struct { int minline; int maxline; int usecount; const char* suffix; } tables[0x2000]; bool need_c; bool fix_0000; int i, j, p, j1, j2, t; for (j = 0; j < 0x10000; j++) uni2charset[j] = 0; for (p = 0; p < 0x100; p++) pages[p] = false; for (i = 0; i < 0x100; i++) { j = charset2uni[i]; if (j != 0xfffd) { uni2charset[j] = i; pages[j>>8] = true; } } for (j1 = 0; j1 < 0x2000; j1++) { bool all_invalid = true; bool all_identity = true; for (j2 = 0; j2 < 8; j2++) { j = 8*j1+j2; if (uni2charset[j] != 0) all_invalid = false; if (uni2charset[j] != j) all_identity = false; } if (all_invalid) line[j1] = -2; else if (all_identity) line[j1] = -1; else line[j1] = 0; } tableno = 0; for (j1 = 0; j1 < 0x2000; j1++) { if (line[j1] >= 0) { if (tableno > 0 && ((j1 > 0 && line[j1-1] == tableno-1) || ((tables[tableno-1].maxline >> 5) == (j1 >> 5) && j1 - tables[tableno-1].maxline <= 8))) { line[j1] = tableno-1; tables[tableno-1].maxline = j1; } else { tableno++; line[j1] = tableno-1; tables[tableno-1].minline = tables[tableno-1].maxline = j1; } } } for (t = 0; t < tableno; t++) { tables[t].usecount = 0; j1 = 8*tables[t].minline; j2 = 8*(tables[t].maxline+1); for (j = j1; j < j2; j++) if (uni2charset[j] != 0) tables[t].usecount++; } for (t = 0, p = -1, i = 0; t < tableno; t++) { if (tables[t].usecount > 1) { char* s; if (p == tables[t].minline >> 5) { s = malloc(5+1); sprintf(s, "%02x_%d", p, ++i); } else { p = tables[t].minline >> 5; s = malloc(2+1); sprintf(s, "%02x", p); } tables[t].suffix = s; } else tables[t].suffix = NULL; } { p = -1; for (t = 0; t < tableno; t++) if (tables[t].usecount > 1) { p = 0; fprintf(f, "static const unsigned char %s_page%s[%d] = {\n", c_charsetname, tables[t].suffix, 8*(tables[t].maxline-tables[t].minline+1)); for (j1 = tables[t].minline; j1 <= tables[t].maxline; j1++) { if ((j1 % 0x20) == 0 && j1 > tables[t].minline) fprintf(f, " /* 0x%04x */\n", 8*j1); fprintf(f, " "); for (j2 = 0; j2 < 8; j2++) { j = 8*j1+j2; fprintf(f, " 0x%02x,", uni2charset[j]); } fprintf(f, " /* 0x%02x-0x%02x */\n", 8*(j1 % 0x20), 8*(j1 % 0x20)+7); } fprintf(f, "};\n"); } if (p >= 0) fprintf(f, "\n"); } need_c = false; for (j1 = 0; j1 < 0x2000;) { t = line[j1]; for (j2 = j1; j2 < 0x2000 && line[j2] == t; j2++); if (t >= 0) j2 = tables[t].maxline+1; if (!(t == -2 || (t == -1 && j1 == 0))) need_c = true; j1 = j2; } fix_0000 = false; fprintf(f, "static int\n%s_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)\n", c_charsetname); fprintf(f, "{\n"); if (need_c) fprintf(f, " unsigned char c = 0;\n"); for (j1 = 0; j1 < 0x2000;) { t = line[j1]; for (j2 = j1; j2 < 0x2000 && line[j2] == t; j2++); if (t >= 0) { if (j1 != tables[t].minline) abort(); if (j2 > tables[t].maxline+1) abort(); j2 = tables[t].maxline+1; } if (t == -2) { } else { if (j1 == 0) fprintf(f, " "); else fprintf(f, " else "); if (t >= 0 && tables[t].usecount == 0) abort(); if (t >= 0 && tables[t].usecount == 1) { if (j2 != j1+1) abort(); for (j = 8*j1; j < 8*j2; j++) if (uni2charset[j] != 0) { fprintf(f, "if (wc == 0x%04x)\n c = 0x%02x;\n", j, uni2charset[j]); break; } } else { if (j1 == 0) { fprintf(f, "if (wc < 0x%04x)", 8*j2); } else { fprintf(f, "if (wc >= 0x%04x && wc < 0x%04x)", 8*j1, 8*j2); } if (t == -1) { if (j1 == 0) /* If wc == 0, the function must return 1, not -1. */ fprintf(f, " {\n *r = wc;\n return 1;\n }\n"); else fprintf(f, "\n c = wc;\n"); } else { fprintf(f, "\n c = %s_page%s[wc", c_charsetname, tables[t].suffix); if (tables[t].minline > 0) fprintf(f, "-0x%04x", 8*j1); fprintf(f, "];\n"); if (j1 == 0 && uni2charset[0] == 0) /* If wc == 0, the function must return 1, not -1. */ fix_0000 = true; } } } j1 = j2; } if (need_c) { if (fix_0000) fprintf(f, " if (c != 0 || wc == 0) {\n"); else fprintf(f, " if (c != 0) {\n"); fprintf(f, " *r = c;\n"); fprintf(f, " return 1;\n"); fprintf(f, " }\n"); } fprintf(f, " return RET_ILSEQ;\n"); fprintf(f, "}\n"); } if (ferror(f) || fclose(f)) exit(1); } #if 0 int i1, i2, i3, i1_min, i1_max, j1, j2; i1_min = 16; i1_max = -1; for (i1 = 0; i1 < 16; i1++) for (i2 = 0; i2 < 16; i2++) if (charset2uni[16*i1+i2] != 0xfffd) { if (i1_min > i1) i1_min = i1; if (i1_max < i1) i1_max = i1; } printf("static const unsigned short %s_2uni[%d] = {\n", name, 16*(i1_max-i1_min+1)); for (i1 = i1_min; i1 <= i1_max; i1++) { printf(" /""* 0x%02x *""/\n", 16*i1); for (i2 = 0; i2 < 2; i2++) { printf(" "); for (i3 = 0; i3 < 8; i3++) { if (i3 > 0) printf(" "); printf("0x%04x,", charset2uni[16*i1+8*i2+i3]); } printf("\n"); } } printf("};\n"); printf("\n"); for (p = 0; p < 0x100; p++) pages[p] = 0; for (i = 0; i < 0x100; i++) if (charset2uni[i] != 0xfffd) pages[charset2uni[i]>>8] = 1; for (p = 0; p < 0x100; p++) if (pages[p]) { int j1_min = 32; int j1_max = -1; for (j1 = 0; j1 < 32; j1++) for (j2 = 0; j2 < 8; j2++) if (uni2charset[256*p+8*j1+j2] != 0) { if (j1_min > j1) j1_min = j1; if (j1_max < j1) j1_max = j1; } printf("static const unsigned char %s_page%02x[%d] = {\n", name, p, 8*(j1_max-j1_min+1)); for (j1 = j1_min; j1 <= j1_max; j1++) { printf(" "); for (j2 = 0; j2 < 8; j2++) printf("0x%02x, ", uni2charset[256*p+8*j1+j2]); printf("/""* 0x%02x-0x%02x *""/\n", 8*j1, 8*j1+7); } printf("};\n"); } printf("\n"); } #endif exit(0); } libX11-1.6.3/src/xlibi18n/lcUniConv/iso8859_2.h000064401431060000012000000073051247741723500207320ustar00alancstaff00002660200006 /* * ISO-8859-2 */ static const unsigned short iso8859_2_2uni[96] = { /* 0xa0 */ 0x00a0, 0x0104, 0x02d8, 0x0141, 0x00a4, 0x013d, 0x015a, 0x00a7, 0x00a8, 0x0160, 0x015e, 0x0164, 0x0179, 0x00ad, 0x017d, 0x017b, /* 0xb0 */ 0x00b0, 0x0105, 0x02db, 0x0142, 0x00b4, 0x013e, 0x015b, 0x02c7, 0x00b8, 0x0161, 0x015f, 0x0165, 0x017a, 0x02dd, 0x017e, 0x017c, /* 0xc0 */ 0x0154, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0139, 0x0106, 0x00c7, 0x010c, 0x00c9, 0x0118, 0x00cb, 0x011a, 0x00cd, 0x00ce, 0x010e, /* 0xd0 */ 0x0110, 0x0143, 0x0147, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x00d7, 0x0158, 0x016e, 0x00da, 0x0170, 0x00dc, 0x00dd, 0x0162, 0x00df, /* 0xe0 */ 0x0155, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x013a, 0x0107, 0x00e7, 0x010d, 0x00e9, 0x0119, 0x00eb, 0x011b, 0x00ed, 0x00ee, 0x010f, /* 0xf0 */ 0x0111, 0x0144, 0x0148, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x00f7, 0x0159, 0x016f, 0x00fa, 0x0171, 0x00fc, 0x00fd, 0x0163, 0x02d9, }; static int iso8859_2_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c = *s; if (c < 0xa0) *pwc = (ucs4_t) c; else *pwc = (ucs4_t) iso8859_2_2uni[c-0xa0]; return 1; } static const unsigned char iso8859_2_page00[224] = { 0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0xa7, /* 0xa0-0xa7 */ 0xa8, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, /* 0xa8-0xaf */ 0xb0, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ 0x00, 0xc1, 0xc2, 0x00, 0xc4, 0x00, 0x00, 0xc7, /* 0xc0-0xc7 */ 0x00, 0xc9, 0x00, 0xcb, 0x00, 0xcd, 0xce, 0x00, /* 0xc8-0xcf */ 0x00, 0x00, 0x00, 0xd3, 0xd4, 0x00, 0xd6, 0xd7, /* 0xd0-0xd7 */ 0x00, 0x00, 0xda, 0x00, 0xdc, 0xdd, 0x00, 0xdf, /* 0xd8-0xdf */ 0x00, 0xe1, 0xe2, 0x00, 0xe4, 0x00, 0x00, 0xe7, /* 0xe0-0xe7 */ 0x00, 0xe9, 0x00, 0xeb, 0x00, 0xed, 0xee, 0x00, /* 0xe8-0xef */ 0x00, 0x00, 0x00, 0xf3, 0xf4, 0x00, 0xf6, 0xf7, /* 0xf0-0xf7 */ 0x00, 0x00, 0xfa, 0x00, 0xfc, 0xfd, 0x00, 0x00, /* 0xf8-0xff */ /* 0x0100 */ 0x00, 0x00, 0xc3, 0xe3, 0xa1, 0xb1, 0xc6, 0xe6, /* 0x00-0x07 */ 0x00, 0x00, 0x00, 0x00, 0xc8, 0xe8, 0xcf, 0xef, /* 0x08-0x0f */ 0xd0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ 0xca, 0xea, 0xcc, 0xec, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ 0x00, 0xc5, 0xe5, 0x00, 0x00, 0xa5, 0xb5, 0x00, /* 0x38-0x3f */ 0x00, 0xa3, 0xb3, 0xd1, 0xf1, 0x00, 0x00, 0xd2, /* 0x40-0x47 */ 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ 0xd5, 0xf5, 0x00, 0x00, 0xc0, 0xe0, 0x00, 0x00, /* 0x50-0x57 */ 0xd8, 0xf8, 0xa6, 0xb6, 0x00, 0x00, 0xaa, 0xba, /* 0x58-0x5f */ 0xa9, 0xb9, 0xde, 0xfe, 0xab, 0xbb, 0x00, 0x00, /* 0x60-0x67 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xf9, /* 0x68-0x6f */ 0xdb, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ 0x00, 0xac, 0xbc, 0xaf, 0xbf, 0xae, 0xbe, 0x00, /* 0x78-0x7f */ }; static const unsigned char iso8859_2_page02[32] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, /* 0xc0-0xc7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ 0xa2, 0xff, 0x00, 0xb2, 0x00, 0xbd, 0x00, 0x00, /* 0xd8-0xdf */ }; static int iso8859_2_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { unsigned char c = 0; if (wc < 0x00a0) { *r = wc; return 1; } else if (wc >= 0x00a0 && wc < 0x0180) c = iso8859_2_page00[wc-0x00a0]; else if (wc >= 0x02c0 && wc < 0x02e0) c = iso8859_2_page02[wc-0x02c0]; if (c != 0) { *r = c; return 1; } return RET_ILSEQ; } 0xd8-0xdf */ 0x00, 0xe1, 0xe2, 0x00, 0xe4, 0x00, 0x00, 0xe7, /* 0xe0-0xe7 */ 0x00, 0xe9, 0x00, 0xeb, 0x00, 0xed, 0xee, 0x00, /* 0xe8-0xef */ 0x00, 0x00, 0x00, 0xf3, 0xf4, 0x00, 0xf6, 0xf7, /* 0xf0-0xf7 */ 0x00, 0x00, 0xfa, 0x00, 0xfc, 0xfd, 0x00, 0x00, /* 0xf8-0xff */ /* 0x0100 */ 0x00, 0x00, 0xc3, 0xelibX11-1.6.3/src/xlibi18n/lcUniConv/iso8859_15.h000064401431060000012000000034661247741723500210220ustar00alancstaff00002660200006 /* * ISO-8859-15 */ static const unsigned short iso8859_15_2uni[32] = { /* 0xa0 */ 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x20ac, 0x00a5, 0x0160, 0x00a7, 0x0161, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, /* 0xb0 */ 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x017d, 0x00b5, 0x00b6, 0x00b7, 0x017e, 0x00b9, 0x00ba, 0x00bb, 0x0152, 0x0153, 0x0178, 0x00bf, }; static int iso8859_15_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c = *s; if (c >= 0xa0 && c < 0xc0) *pwc = (ucs4_t) iso8859_15_2uni[c-0xa0]; else *pwc = (ucs4_t) c; return 1; } static const unsigned char iso8859_15_page00[32] = { 0xa0, 0xa1, 0xa2, 0xa3, 0x00, 0xa5, 0x00, 0xa7, /* 0xa0-0xa7 */ 0x00, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ 0xb0, 0xb1, 0xb2, 0xb3, 0x00, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ 0x00, 0xb9, 0xba, 0xbb, 0x00, 0x00, 0x00, 0xbf, /* 0xb8-0xbf */ }; static const unsigned char iso8859_15_page01[48] = { 0x00, 0x00, 0xbc, 0xbd, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ 0xa6, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ 0xbe, 0x00, 0x00, 0x00, 0x00, 0xb4, 0xb8, 0x00, /* 0x78-0x7f */ }; static int iso8859_15_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { unsigned char c = 0; if (wc < 0x00a0) { *r = wc; return 1; } else if (wc >= 0x00a0 && wc < 0x00c0) c = iso8859_15_page00[wc-0x00a0]; else if (wc >= 0x00c0 && wc < 0x0100) c = wc; else if (wc >= 0x0150 && wc < 0x0180) c = iso8859_15_page01[wc-0x0150]; else if (wc == 0x20ac) c = 0xa4; if (c != 0) { *r = c; return 1; } return RET_ILSEQ; } libX11-1.6.3/src/xlibi18n/lcUniConv/iso8859_14.h000064401431060000012000000105511247741723500210120ustar00alancstaff00002660200006 /* * ISO-8859-14 */ static const unsigned short iso8859_14_2uni[96] = { /* 0xa0 */ 0x00a0, 0x1e02, 0x1e03, 0x00a3, 0x010a, 0x010b, 0x1e0a, 0x00a7, 0x1e80, 0x00a9, 0x1e82, 0x1e0b, 0x1ef2, 0x00ad, 0x00ae, 0x0178, /* 0xb0 */ 0x1e1e, 0x1e1f, 0x0120, 0x0121, 0x1e40, 0x1e41, 0x00b6, 0x1e56, 0x1e81, 0x1e57, 0x1e83, 0x1e60, 0x1ef3, 0x1e84, 0x1e85, 0x1e61, /* 0xc0 */ 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, /* 0xd0 */ 0x0174, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x1e6a, 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x0176, 0x00df, /* 0xe0 */ 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, /* 0xf0 */ 0x0175, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x1e6b, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x0177, 0x00ff, }; static int iso8859_14_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c = *s; if (c >= 0xa0) *pwc = (ucs4_t) iso8859_14_2uni[c-0xa0]; else *pwc = (ucs4_t) c; return 1; } static const unsigned char iso8859_14_page00[96] = { 0xa0, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, 0xa7, /* 0xa0-0xa7 */ 0x00, 0xa9, 0x00, 0x00, 0x00, 0xad, 0xae, 0x00, /* 0xa8-0xaf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb6, 0x00, /* 0xb0-0xb7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ 0x00, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0x00, /* 0xd0-0xd7 */ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0x00, 0xdf, /* 0xd8-0xdf */ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ 0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0x00, /* 0xf0-0xf7 */ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0x00, 0xff, /* 0xf8-0xff */ }; static const unsigned char iso8859_14_page01_0[32] = { 0x00, 0x00, 0xa4, 0xa5, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ 0xb2, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ }; static const unsigned char iso8859_14_page01_1[16] = { 0x00, 0x00, 0x00, 0x00, 0xd0, 0xf0, 0xde, 0xfe, /* 0x70-0x77 */ 0xaf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ }; static const unsigned char iso8859_14_page1e_0[136] = { 0x00, 0x00, 0xa1, 0xa2, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ 0x00, 0x00, 0xa6, 0xab, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xb1, /* 0x18-0x1f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ 0xb4, 0xb5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0xb9, /* 0x50-0x57 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ 0xbb, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ 0x00, 0x00, 0xd7, 0xf7, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ 0xa8, 0xb8, 0xaa, 0xba, 0xbd, 0xbe, 0x00, 0x00, /* 0x80-0x87 */ }; static const unsigned char iso8859_14_page1e_1[8] = { 0x00, 0x00, 0xac, 0xbc, 0x00, 0x00, 0x00, 0x00, /* 0xf0-0xf7 */ }; static int iso8859_14_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { unsigned char c = 0; if (wc < 0x00a0) { *r = wc; return 1; } else if (wc >= 0x00a0 && wc < 0x0100) c = iso8859_14_page00[wc-0x00a0]; else if (wc >= 0x0108 && wc < 0x0128) c = iso8859_14_page01_0[wc-0x0108]; else if (wc >= 0x0170 && wc < 0x0180) c = iso8859_14_page01_1[wc-0x0170]; else if (wc >= 0x1e00 && wc < 0x1e88) c = iso8859_14_page1e_0[wc-0x1e00]; else if (wc >= 0x1ef0 && wc < 0x1ef8) c = iso8859_14_page1e_1[wc-0x1ef0]; if (c != 0) { *r = c; return 1; } return RET_ILSEQ; } libX11-1.6.3/src/xlibi18n/lcUniConv/iso8859_3.h000064401431060000012000000072371247741723500207370ustar00alancstaff00002660200006 /* * ISO-8859-3 */ static const unsigned short iso8859_3_2uni[96] = { /* 0xa0 */ 0x00a0, 0x0126, 0x02d8, 0x00a3, 0x00a4, 0xfffd, 0x0124, 0x00a7, 0x00a8, 0x0130, 0x015e, 0x011e, 0x0134, 0x00ad, 0xfffd, 0x017b, /* 0xb0 */ 0x00b0, 0x0127, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x0125, 0x00b7, 0x00b8, 0x0131, 0x015f, 0x011f, 0x0135, 0x00bd, 0xfffd, 0x017c, /* 0xc0 */ 0x00c0, 0x00c1, 0x00c2, 0xfffd, 0x00c4, 0x010a, 0x0108, 0x00c7, 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, /* 0xd0 */ 0xfffd, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x0120, 0x00d6, 0x00d7, 0x011c, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x016c, 0x015c, 0x00df, /* 0xe0 */ 0x00e0, 0x00e1, 0x00e2, 0xfffd, 0x00e4, 0x010b, 0x0109, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, /* 0xf0 */ 0xfffd, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x0121, 0x00f6, 0x00f7, 0x011d, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x016d, 0x015d, 0x02d9, }; static int iso8859_3_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c = *s; if (c < 0xa0) { *pwc = (ucs4_t) c; return 1; } else { unsigned short wc = iso8859_3_2uni[c-0xa0]; if (wc != 0xfffd) { *pwc = (ucs4_t) wc; return 1; } } return RET_ILSEQ; } static const unsigned char iso8859_3_page00[96] = { 0xa0, 0x00, 0x00, 0xa3, 0xa4, 0x00, 0x00, 0xa7, /* 0xa0-0xa7 */ 0xa8, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, /* 0xa8-0xaf */ 0xb0, 0x00, 0xb2, 0xb3, 0xb4, 0xb5, 0x00, 0xb7, /* 0xb0-0xb7 */ 0xb8, 0x00, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00, /* 0xb8-0xbf */ 0xc0, 0xc1, 0xc2, 0x00, 0xc4, 0x00, 0x00, 0xc7, /* 0xc0-0xc7 */ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ 0x00, 0xd1, 0xd2, 0xd3, 0xd4, 0x00, 0xd6, 0xd7, /* 0xd0-0xd7 */ 0x00, 0xd9, 0xda, 0xdb, 0xdc, 0x00, 0x00, 0xdf, /* 0xd8-0xdf */ 0xe0, 0xe1, 0xe2, 0x00, 0xe4, 0x00, 0x00, 0xe7, /* 0xe0-0xe7 */ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ 0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0x00, 0xf6, 0xf7, /* 0xf0-0xf7 */ 0x00, 0xf9, 0xfa, 0xfb, 0xfc, 0x00, 0x00, 0x00, /* 0xf8-0xff */ }; static const unsigned char iso8859_3_page01[120] = { 0xc6, 0xe6, 0xc5, 0xe5, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ 0x00, 0x00, 0x00, 0x00, 0xd8, 0xf8, 0xab, 0xbb, /* 0x18-0x1f */ 0xd5, 0xf5, 0x00, 0x00, 0xa6, 0xb6, 0xa1, 0xb1, /* 0x20-0x27 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ 0xa9, 0xb9, 0x00, 0x00, 0xac, 0xbc, 0x00, 0x00, /* 0x30-0x37 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ 0x00, 0x00, 0x00, 0x00, 0xde, 0xfe, 0xaa, 0xba, /* 0x58-0x5f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ 0x00, 0x00, 0x00, 0x00, 0xdd, 0xfd, 0x00, 0x00, /* 0x68-0x6f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ 0x00, 0x00, 0x00, 0xaf, 0xbf, 0x00, 0x00, 0x00, /* 0x78-0x7f */ }; static const unsigned char iso8859_3_page02[8] = { 0xa2, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ }; static int iso8859_3_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { unsigned char c = 0; if (wc < 0x00a0) { *r = wc; return 1; } else if (wc >= 0x00a0 && wc < 0x0100) c = iso8859_3_page00[wc-0x00a0]; else if (wc >= 0x0108 && wc < 0x0180) c = iso8859_3_page01[wc-0x0108]; else if (wc >= 0x02d8 && wc < 0x02e0) c = iso8859_3_page02[wc-0x02d8]; if (c != 0) { *r = c; return 1; } return RET_ILSEQ; } libX11-1.6.3/src/xlibi18n/lcUniConv/tatar_cyr.h000064401431060000012000000121251247741723500213450ustar00alancstaff00002660200006 /* * TATAR-CYR */ static const unsigned short tatar_cyr_2uni[128] = { /* 0x80 */ 0x04d8, 0x0403, 0x201a, 0x0453, 0x201e, 0x2026, 0x2020, 0x2021, 0x20ac, 0x2030, 0x04e8, 0x2039, 0x04ae, 0x0496, 0x04a2, 0x04ba, /* 0x90 */ 0x04d9, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, 0x98, 0x2122, 0x04e9, 0x203a, 0x04af, 0x0497, 0x04a3, 0x04bb, /* 0xa0 */ 0x00a0, 0x040e, 0x045e, 0x0408, 0x00a4, 0x0490, 0x00a6, 0x00a7, 0x0401, 0x00a9, 0x0404, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x0407, /* 0xb0 */ 0x00b0, 0x00b1, 0x0406, 0x0456, 0x0491, 0x00b5, 0x00b6, 0x00b7, 0x0451, 0x2116, 0x0454, 0x00bb, 0x0458, 0x0405, 0x0455, 0x0457, /* 0xc0 */ 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, /* 0xd0 */ 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, /* 0xe0 */ 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, /* 0xf0 */ 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, }; static int tatar_cyr_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c = *s; if (c < 0x80) *pwc = (ucs4_t) c; else *pwc = (ucs4_t) tatar_cyr_2uni[c-0x80]; return 1; } static const unsigned char tatar_cyr_page00[32] = { 0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0xa6, 0xa7, /* 0xa0-0xa7 */ 0x00, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0x00, /* 0xa8-0xaf */ 0xb0, 0xb1, 0x00, 0x00, 0x00, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ }; static const unsigned char tatar_cyr_page04[240] = { 0x00, 0xa8, 0x00, 0x81, 0xaa, 0xbd, 0xb2, 0xaf, /* 0x00-0x07 */ 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa1, 0x00, /* 0x08-0x0f */ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x10-0x17 */ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x18-0x1f */ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x20-0x27 */ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0x28-0x2f */ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x30-0x37 */ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x38-0x3f */ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x40-0x47 */ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0x48-0x4f */ 0x00, 0xb8, 0x00, 0x83, 0xba, 0xbe, 0xb3, 0xbf, /* 0x50-0x57 */ 0xbc, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x00, /* 0x58-0x5f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ 0xa5, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x8d, 0x9d, /* 0x90-0x97 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ 0x00, 0x00, 0x8e, 0x9e, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x9c, /* 0xa8-0xaf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ 0x00, 0x00, 0x8f, 0x9f, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ 0x80, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ 0x8a, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ }; static const unsigned char tatar_cyr_page20[48] = { 0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */ 0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x18-0x1f */ 0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ 0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ }; static const unsigned char tatar_cyr_page21[24] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb9, 0x00, /* 0x10-0x17 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ }; static const unsigned char tatar_cyr_page22[1] = { 0xb0, /* 0x16-0x16 */ }; static int tatar_cyr_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { unsigned char c = 0; if (wc < 0x0080) { *r = wc; return 1; } else if (wc >= 0x00a0 && wc < 0x00bc) c = tatar_cyr_page00[wc-0x00a0]; else if (wc >= 0x0400 && wc < 0x04ef) c = tatar_cyr_page04[wc-0x0400]; else if (wc >= 0x2010 && wc < 0x203b) c = tatar_cyr_page20[wc-0x2010]; else if (wc == 0x20ac) c = 0x88; else if (wc >= 0x2110 && wc < 0x2123) c = tatar_cyr_page21[wc-0x2110]; if (c != 0) { *r = c; return 1; } return RET_ILSEQ; } libX11-1.6.3/src/xlibi18n/lcUniConv/iso8859_9.h000064401431060000012000000042411247741723500207350ustar00alancstaff00002660200006 /* * ISO-8859-9 */ static const unsigned short iso8859_9_2uni[48] = { /* 0xd0 */ 0x011e, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0130, 0x015e, 0x00df, /* 0xe0 */ 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, /* 0xf0 */ 0x011f, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0131, 0x015f, 0x00ff, }; static int iso8859_9_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c = *s; if (c >= 0xd0) *pwc = (ucs4_t) iso8859_9_2uni[c-0xd0]; else *pwc = (ucs4_t) c; return 1; } static const unsigned char iso8859_9_page00[48] = { 0x00, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0x00, 0x00, 0xdf, /* 0xd8-0xdf */ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ 0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0x00, 0x00, 0xff, /* 0xf8-0xff */ }; static const unsigned char iso8859_9_page01[72] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xf0, /* 0x18-0x1f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ 0xdd, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xfe, /* 0x58-0x5f */ }; static int iso8859_9_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { unsigned char c = 0; if (wc < 0x00d0) { *r = wc; return 1; } else if (wc >= 0x00d0 && wc < 0x0100) c = iso8859_9_page00[wc-0x00d0]; else if (wc >= 0x0118 && wc < 0x0160) c = iso8859_9_page01[wc-0x0118]; if (c != 0) { *r = c; return 1; } return RET_ILSEQ; } libX11-1.6.3/src/xlibi18n/lcUniConv/big5hkscs.h000064401431060000012000014110631247741723500212440ustar00alancstaff00002660200006 /* * BIG5-HKSCS */ static const unsigned short big5hkscs_2uni_page81[19782] = { /* 0x81 */ 0xeeb8, 0xeeb9, 0xeeba, 0xeebb, 0xeebc, 0xeebd, 0xeebe, 0xeebf, 0xeec0, 0xeec1, 0xeec2, 0xeec3, 0xeec4, 0xeec5, 0xeec6, 0xeec7, 0xeec8, 0xeec9, 0xeeca, 0xeecb, 0xeecc, 0xeecd, 0xeece, 0xeecf, 0xeed0, 0xeed1, 0xeed2, 0xeed3, 0xeed4, 0xeed5, 0xeed6, 0xeed7, 0xeed8, 0xeed9, 0xeeda, 0xeedb, 0xeedc, 0xeedd, 0xeede, 0xeedf, 0xeee0, 0xeee1, 0xeee2, 0xeee3, 0xeee4, 0xeee5, 0xeee6, 0xeee7, 0xeee8, 0xeee9, 0xeeea, 0xeeeb, 0xeeec, 0xeeed, 0xeeee, 0xeeef, 0xeef0, 0xeef1, 0xeef2, 0xeef3, 0xeef4, 0xeef5, 0xeef6, 0xeef7, 0xeef8, 0xeef9, 0xeefa, 0xeefb, 0xeefc, 0xeefd, 0xeefe, 0xeeff, 0xef00, 0xef01, 0xef02, 0xef03, 0xef04, 0xef05, 0xef06, 0xef07, 0xef08, 0xef09, 0xef0a, 0xef0b, 0xef0c, 0xef0d, 0xef0e, 0xef0f, 0xef10, 0xef11, 0xef12, 0xef13, 0xef14, 0xef15, 0xef16, 0xef17, 0xef18, 0xef19, 0xef1a, 0xef1b, 0xef1c, 0xef1d, 0xef1e, 0xef1f, 0xef20, 0xef21, 0xef22, 0xef23, 0xef24, 0xef25, 0xef26, 0xef27, 0xef28, 0xef29, 0xef2a, 0xef2b, 0xef2c, 0xef2d, 0xef2e, 0xef2f, 0xef30, 0xef31, 0xef32, 0xef33, 0xef34, 0xef35, 0xef36, 0xef37, 0xef38, 0xef39, 0xef3a, 0xef3b, 0xef3c, 0xef3d, 0xef3e, 0xef3f, 0xef40, 0xef41, 0xef42, 0xef43, 0xef44, 0xef45, 0xef46, 0xef47, 0xef48, 0xef49, 0xef4a, 0xef4b, 0xef4c, 0xef4d, 0xef4e, 0xef4f, 0xef50, 0xef51, 0xef52, 0xef53, 0xef54, /* 0x82 */ 0xef55, 0xef56, 0xef57, 0xef58, 0xef59, 0xef5a, 0xef5b, 0xef5c, 0xef5d, 0xef5e, 0xef5f, 0xef60, 0xef61, 0xef62, 0xef63, 0xef64, 0xef65, 0xef66, 0xef67, 0xef68, 0xef69, 0xef6a, 0xef6b, 0xef6c, 0xef6d, 0xef6e, 0xef6f, 0xef70, 0xef71, 0xef72, 0xef73, 0xef74, 0xef75, 0xef76, 0xef77, 0xef78, 0xef79, 0xef7a, 0xef7b, 0xef7c, 0xef7d, 0xef7e, 0xef7f, 0xef80, 0xef81, 0xef82, 0xef83, 0xef84, 0xef85, 0xef86, 0xef87, 0xef88, 0xef89, 0xef8a, 0xef8b, 0xef8c, 0xef8d, 0xef8e, 0xef8f, 0xef90, 0xef91, 0xef92, 0xef93, 0xef94, 0xef95, 0xef96, 0xef97, 0xef98, 0xef99, 0xef9a, 0xef9b, 0xef9c, 0xef9d, 0xef9e, 0xef9f, 0xefa0, 0xefa1, 0xefa2, 0xefa3, 0xefa4, 0xefa5, 0xefa6, 0xefa7, 0xefa8, 0xefa9, 0xefaa, 0xefab, 0xefac, 0xefad, 0xefae, 0xefaf, 0xefb0, 0xefb1, 0xefb2, 0xefb3, 0xefb4, 0xefb5, 0xefb6, 0xefb7, 0xefb8, 0xefb9, 0xefba, 0xefbb, 0xefbc, 0xefbd, 0xefbe, 0xefbf, 0xefc0, 0xefc1, 0xefc2, 0xefc3, 0xefc4, 0xefc5, 0xefc6, 0xefc7, 0xefc8, 0xefc9, 0xefca, 0xefcb, 0xefcc, 0xefcd, 0xefce, 0xefcf, 0xefd0, 0xefd1, 0xefd2, 0xefd3, 0xefd4, 0xefd5, 0xefd6, 0xefd7, 0xefd8, 0xefd9, 0xefda, 0xefdb, 0xefdc, 0xefdd, 0xefde, 0xefdf, 0xefe0, 0xefe1, 0xefe2, 0xefe3, 0xefe4, 0xefe5, 0xefe6, 0xefe7, 0xefe8, 0xefe9, 0xefea, 0xefeb, 0xefec, 0xefed, 0xefee, 0xefef, 0xeff0, 0xeff1, /* 0x83 */ 0xeff2, 0xeff3, 0xeff4, 0xeff5, 0xeff6, 0xeff7, 0xeff8, 0xeff9, 0xeffa, 0xeffb, 0xeffc, 0xeffd, 0xeffe, 0xefff, 0xf000, 0xf001, 0xf002, 0xf003, 0xf004, 0xf005, 0xf006, 0xf007, 0xf008, 0xf009, 0xf00a, 0xf00b, 0xf00c, 0xf00d, 0xf00e, 0xf00f, 0xf010, 0xf011, 0xf012, 0xf013, 0xf014, 0xf015, 0xf016, 0xf017, 0xf018, 0xf019, 0xf01a, 0xf01b, 0xf01c, 0xf01d, 0xf01e, 0xf01f, 0xf020, 0xf021, 0xf022, 0xf023, 0xf024, 0xf025, 0xf026, 0xf027, 0xf028, 0xf029, 0xf02a, 0xf02b, 0xf02c, 0xf02d, 0xf02e, 0xf02f, 0xf030, 0xf031, 0xf032, 0xf033, 0xf034, 0xf035, 0xf036, 0xf037, 0xf038, 0xf039, 0xf03a, 0xf03b, 0xf03c, 0xf03d, 0xf03e, 0xf03f, 0xf040, 0xf041, 0xf042, 0xf043, 0xf044, 0xf045, 0xf046, 0xf047, 0xf048, 0xf049, 0xf04a, 0xf04b, 0xf04c, 0xf04d, 0xf04e, 0xf04f, 0xf050, 0xf051, 0xf052, 0xf053, 0xf054, 0xf055, 0xf056, 0xf057, 0xf058, 0xf059, 0xf05a, 0xf05b, 0xf05c, 0xf05d, 0xf05e, 0xf05f, 0xf060, 0xf061, 0xf062, 0xf063, 0xf064, 0xf065, 0xf066, 0xf067, 0xf068, 0xf069, 0xf06a, 0xf06b, 0xf06c, 0xf06d, 0xf06e, 0xf06f, 0xf070, 0xf071, 0xf072, 0xf073, 0xf074, 0xf075, 0xf076, 0xf077, 0xf078, 0xf079, 0xf07a, 0xf07b, 0xf07c, 0xf07d, 0xf07e, 0xf07f, 0xf080, 0xf081, 0xf082, 0xf083, 0xf084, 0xf085, 0xf086, 0xf087, 0xf088, 0xf089, 0xf08a, 0xf08b, 0xf08c, 0xf08d, 0xf08e, /* 0x84 */ 0xf08f, 0xf090, 0xf091, 0xf092, 0xf093, 0xf094, 0xf095, 0xf096, 0xf097, 0xf098, 0xf099, 0xf09a, 0xf09b, 0xf09c, 0xf09d, 0xf09e, 0xf09f, 0xf0a0, 0xf0a1, 0xf0a2, 0xf0a3, 0xf0a4, 0xf0a5, 0xf0a6, 0xf0a7, 0xf0a8, 0xf0a9, 0xf0aa, 0xf0ab, 0xf0ac, 0xf0ad, 0xf0ae, 0xf0af, 0xf0b0, 0xf0b1, 0xf0b2, 0xf0b3, 0xf0b4, 0xf0b5, 0xf0b6, 0xf0b7, 0xf0b8, 0xf0b9, 0xf0ba, 0xf0bb, 0xf0bc, 0xf0bd, 0xf0be, 0xf0bf, 0xf0c0, 0xf0c1, 0xf0c2, 0xf0c3, 0xf0c4, 0xf0c5, 0xf0c6, 0xf0c7, 0xf0c8, 0xf0c9, 0xf0ca, 0xf0cb, 0xf0cc, 0xf0cd, 0xf0ce, 0xf0cf, 0xf0d0, 0xf0d1, 0xf0d2, 0xf0d3, 0xf0d4, 0xf0d5, 0xf0d6, 0xf0d7, 0xf0d8, 0xf0d9, 0xf0da, 0xf0db, 0xf0dc, 0xf0dd, 0xf0de, 0xf0df, 0xf0e0, 0xf0e1, 0xf0e2, 0xf0e3, 0xf0e4, 0xf0e5, 0xf0e6, 0xf0e7, 0xf0e8, 0xf0e9, 0xf0ea, 0xf0eb, 0xf0ec, 0xf0ed, 0xf0ee, 0xf0ef, 0xf0f0, 0xf0f1, 0xf0f2, 0xf0f3, 0xf0f4, 0xf0f5, 0xf0f6, 0xf0f7, 0xf0f8, 0xf0f9, 0xf0fa, 0xf0fb, 0xf0fc, 0xf0fd, 0xf0fe, 0xf0ff, 0xf100, 0xf101, 0xf102, 0xf103, 0xf104, 0xf105, 0xf106, 0xf107, 0xf108, 0xf109, 0xf10a, 0xf10b, 0xf10c, 0xf10d, 0xf10e, 0xf10f, 0xf110, 0xf111, 0xf112, 0xf113, 0xf114, 0xf115, 0xf116, 0xf117, 0xf118, 0xf119, 0xf11a, 0xf11b, 0xf11c, 0xf11d, 0xf11e, 0xf11f, 0xf120, 0xf121, 0xf122, 0xf123, 0xf124, 0xf125, 0xf126, 0xf127, 0xf128, 0xf129, 0xf12a, 0xf12b, /* 0x85 */ 0xf12c, 0xf12d, 0xf12e, 0xf12f, 0xf130, 0xf131, 0xf132, 0xf133, 0xf134, 0xf135, 0xf136, 0xf137, 0xf138, 0xf139, 0xf13a, 0xf13b, 0xf13c, 0xf13d, 0xf13e, 0xf13f, 0xf140, 0xf141, 0xf142, 0xf143, 0xf144, 0xf145, 0xf146, 0xf147, 0xf148, 0xf149, 0xf14a, 0xf14b, 0xf14c, 0xf14d, 0xf14e, 0xf14f, 0xf150, 0xf151, 0xf152, 0xf153, 0xf154, 0xf155, 0xf156, 0xf157, 0xf158, 0xf159, 0xf15a, 0xf15b, 0xf15c, 0xf15d, 0xf15e, 0xf15f, 0xf160, 0xf161, 0xf162, 0xf163, 0xf164, 0xf165, 0xf166, 0xf167, 0xf168, 0xf169, 0xf16a, 0xf16b, 0xf16c, 0xf16d, 0xf16e, 0xf16f, 0xf170, 0xf171, 0xf172, 0xf173, 0xf174, 0xf175, 0xf176, 0xf177, 0xf178, 0xf179, 0xf17a, 0xf17b, 0xf17c, 0xf17d, 0xf17e, 0xf17f, 0xf180, 0xf181, 0xf182, 0xf183, 0xf184, 0xf185, 0xf186, 0xf187, 0xf188, 0xf189, 0xf18a, 0xf18b, 0xf18c, 0xf18d, 0xf18e, 0xf18f, 0xf190, 0xf191, 0xf192, 0xf193, 0xf194, 0xf195, 0xf196, 0xf197, 0xf198, 0xf199, 0xf19a, 0xf19b, 0xf19c, 0xf19d, 0xf19e, 0xf19f, 0xf1a0, 0xf1a1, 0xf1a2, 0xf1a3, 0xf1a4, 0xf1a5, 0xf1a6, 0xf1a7, 0xf1a8, 0xf1a9, 0xf1aa, 0xf1ab, 0xf1ac, 0xf1ad, 0xf1ae, 0xf1af, 0xf1b0, 0xf1b1, 0xf1b2, 0xf1b3, 0xf1b4, 0xf1b5, 0xf1b6, 0xf1b7, 0xf1b8, 0xf1b9, 0xf1ba, 0xf1bb, 0xf1bc, 0xf1bd, 0xf1be, 0xf1bf, 0xf1c0, 0xf1c1, 0xf1c2, 0xf1c3, 0xf1c4, 0xf1c5, 0xf1c6, 0xf1c7, 0xf1c8, /* 0x86 */ 0xf1c9, 0xf1ca, 0xf1cb, 0xf1cc, 0xf1cd, 0xf1ce, 0xf1cf, 0xf1d0, 0xf1d1, 0xf1d2, 0xf1d3, 0xf1d4, 0xf1d5, 0xf1d6, 0xf1d7, 0xf1d8, 0xf1d9, 0xf1da, 0xf1db, 0xf1dc, 0xf1dd, 0xf1de, 0xf1df, 0xf1e0, 0xf1e1, 0xf1e2, 0xf1e3, 0xf1e4, 0xf1e5, 0xf1e6, 0xf1e7, 0xf1e8, 0xf1e9, 0xf1ea, 0xf1eb, 0xf1ec, 0xf1ed, 0xf1ee, 0xf1ef, 0xf1f0, 0xf1f1, 0xf1f2, 0xf1f3, 0xf1f4, 0xf1f5, 0xf1f6, 0xf1f7, 0xf1f8, 0xf1f9, 0xf1fa, 0xf1fb, 0xf1fc, 0xf1fd, 0xf1fe, 0xf1ff, 0xf200, 0xf201, 0xf202, 0xf203, 0xf204, 0xf205, 0xf206, 0xf207, 0xf208, 0xf209, 0xf20a, 0xf20b, 0xf20c, 0xf20d, 0xf20e, 0xf20f, 0xf210, 0xf211, 0xf212, 0xf213, 0xf214, 0xf215, 0xf216, 0xf217, 0xf218, 0xf219, 0xf21a, 0xf21b, 0xf21c, 0xf21d, 0xf21e, 0xf21f, 0xf220, 0xf221, 0xf222, 0xf223, 0xf224, 0xf225, 0xf226, 0xf227, 0xf228, 0xf229, 0xf22a, 0xf22b, 0xf22c, 0xf22d, 0xf22e, 0xf22f, 0xf230, 0xf231, 0xf232, 0xf233, 0xf234, 0xf235, 0xf236, 0xf237, 0xf238, 0xf239, 0xf23a, 0xf23b, 0xf23c, 0xf23d, 0xf23e, 0xf23f, 0xf240, 0xf241, 0xf242, 0xf243, 0xf244, 0xf245, 0xf246, 0xf247, 0xf248, 0xf249, 0xf24a, 0xf24b, 0xf24c, 0xf24d, 0xf24e, 0xf24f, 0xf250, 0xf251, 0xf252, 0xf253, 0xf254, 0xf255, 0xf256, 0xf257, 0xf258, 0xf259, 0xf25a, 0xf25b, 0xf25c, 0xf25d, 0xf25e, 0xf25f, 0xf260, 0xf261, 0xf262, 0xf263, 0xf264, 0xf265, /* 0x87 */ 0xf266, 0xf267, 0xf268, 0xf269, 0xf26a, 0xf26b, 0xf26c, 0xf26d, 0xf26e, 0xf26f, 0xf270, 0xf271, 0xf272, 0xf273, 0xf274, 0xf275, 0xf276, 0xf277, 0xf278, 0xf279, 0xf27a, 0xf27b, 0xf27c, 0xf27d, 0xf27e, 0xf27f, 0xf280, 0xf281, 0xf282, 0xf283, 0xf284, 0xf285, 0xf286, 0xf287, 0xf288, 0xf289, 0xf28a, 0xf28b, 0xf28c, 0xf28d, 0xf28e, 0xf28f, 0xf290, 0xf291, 0xf292, 0xf293, 0xf294, 0xf295, 0xf296, 0xf297, 0xf298, 0xf299, 0xf29a, 0xf29b, 0xf29c, 0xf29d, 0xf29e, 0xf29f, 0xf2a0, 0xf2a1, 0xf2a2, 0xf2a3, 0xf2a4, 0xf2a5, 0xf2a6, 0xf2a7, 0xf2a8, 0xf2a9, 0xf2aa, 0xf2ab, 0xf2ac, 0xf2ad, 0xf2ae, 0xf2af, 0xf2b0, 0xf2b1, 0xf2b2, 0xf2b3, 0xf2b4, 0xf2b5, 0xf2b6, 0xf2b7, 0xf2b8, 0xf2b9, 0xf2ba, 0xf2bb, 0xf2bc, 0xf2bd, 0xf2be, 0xf2bf, 0xf2c0, 0xf2c1, 0xf2c2, 0xf2c3, 0xf2c4, 0xf2c5, 0xf2c6, 0xf2c7, 0xf2c8, 0xf2c9, 0xf2ca, 0xf2cb, 0xf2cc, 0xf2cd, 0xf2ce, 0xf2cf, 0xf2d0, 0xf2d1, 0xf2d2, 0xf2d3, 0xf2d4, 0xf2d5, 0xf2d6, 0xf2d7, 0xf2d8, 0xf2d9, 0xf2da, 0xf2db, 0xf2dc, 0xf2dd, 0xf2de, 0xf2df, 0xf2e0, 0xf2e1, 0xf2e2, 0xf2e3, 0xf2e4, 0xf2e5, 0xf2e6, 0xf2e7, 0xf2e8, 0xf2e9, 0xf2ea, 0xf2eb, 0xf2ec, 0xf2ed, 0xf2ee, 0xf2ef, 0xf2f0, 0xf2f1, 0xf2f2, 0xf2f3, 0xf2f4, 0xf2f5, 0xf2f6, 0xf2f7, 0xf2f8, 0xf2f9, 0xf2fa, 0xf2fb, 0xf2fc, 0xf2fd, 0xf2fe, 0xf2ff, 0xf300, 0xf301, 0xf302, /* 0x88 */ 0xf303, 0xf304, 0xf305, 0xf306, 0xf307, 0xf308, 0xf309, 0xf30a, 0xf30b, 0xf30c, 0xf30d, 0xf30e, 0xf30f, 0xf310, 0xf311, 0xf312, 0xf313, 0xf314, 0xf315, 0xf316, 0xf317, 0xf318, 0x0100, 0x00c1, 0x01cd, 0x00c0, 0x0112, 0x00c9, 0x011a, 0x00c8, 0x014c, 0x00d3, 0x01d1, 0x00d2, 0xf325, 0x1ebe, 0xf327, 0x1ec0, 0x00ca, 0x0101, 0x00e1, 0x01ce, 0x00e0, 0x0251, 0x0113, 0x00e9, 0x011b, 0x00e8, 0x012b, 0x00ed, 0x01d0, 0x00ec, 0x014d, 0x00f3, 0x01d2, 0x00f2, 0x016b, 0x00fa, 0x01d4, 0x00f9, 0x01d6, 0x01d8, 0x01da, 0x01dc, 0x00fc, 0xf344, 0x1ebf, 0xf346, 0x1ec1, 0x00ea, 0x0261, 0xf34a, 0xf34b, 0xf34c, 0xf34d, 0xf34e, 0xf34f, 0xf350, 0xf351, 0xf352, 0xf353, 0xf354, 0xf355, 0xf356, 0xf357, 0xf358, 0xf359, 0xf35a, 0xf35b, 0xf35c, 0xf35d, 0xf35e, 0xf35f, 0xf360, 0xf361, 0xf362, 0xf363, 0xf364, 0xf365, 0xf366, 0xf367, 0xf368, 0xf369, 0xf36a, 0xf36b, 0xf36c, 0xf36d, 0xf36e, 0xf36f, 0xf370, 0xf371, 0xf372, 0xf373, 0xf374, 0xf375, 0xf376, 0xf377, 0xf378, 0xf379, 0xf37a, 0xf37b, 0xf37c, 0xf37d, 0xf37e, 0xf37f, 0xf380, 0xf381, 0xf382, 0xf383, 0xf384, 0xf385, 0xf386, 0xf387, 0xf388, 0xf389, 0xf38a, 0xf38b, 0xf38c, 0xf38d, 0xf38e, 0xf38f, 0xf390, 0xf391, 0xf392, 0xf393, 0xf394, 0xf395, 0xf396, 0xf397, 0xf398, 0xf399, 0xf39a, 0xf39b, 0xf39c, 0xf39d, 0xf39e, 0xf39f, /* 0x89 */ 0xf3a0, 0xf3a1, 0xf3a2, 0x650a, 0xf3a4, 0xf3a5, 0x4e3d, 0x6edd, 0x9d4e, 0x91df, 0xf3aa, 0xf3ab, 0xf3ac, 0x6491, 0x4f1a, 0x4f28, 0x4fa8, 0x5156, 0x5174, 0x519c, 0x51e4, 0x52a1, 0x52a8, 0x533b, 0x534e, 0x53d1, 0x53d8, 0x56e2, 0x58f0, 0x5904, 0x5907, 0x5932, 0x5934, 0x5b66, 0x5b9e, 0x5b9f, 0x5c9a, 0x5e86, 0x603b, 0x6589, 0x67fe, 0x6804, 0x6865, 0x6d4e, 0x70bc, 0x7535, 0x7ea4, 0x7eac, 0x7eba, 0x7ec7, 0x7ecf, 0x7edf, 0x7f06, 0x7f37, 0x827a, 0x82cf, 0x836f, 0x89c6, 0x8bbe, 0x8be2, 0x8f66, 0x8f67, 0x8f6e, 0x7411, 0x7cfc, 0x7dcd, 0x6946, 0x7ac9, 0x5227, 0xf3e5, 0xf3e6, 0xf3e7, 0xf3e8, 0x918c, 0x78b8, 0x915e, 0x80bc, 0xf3ed, 0x8d0b, 0x80f6, 0xf3f0, 0xf3f1, 0xf3f2, 0x809f, 0x9ec7, 0x4ccd, 0x9dc9, 0x9e0c, 0x4c3e, 0xf3f9, 0xf3fa, 0x9e0a, 0xf3fc, 0x35c1, 0xf3fe, 0x6e9a, 0x823e, 0x7519, 0xf402, 0x4911, 0x9a6c, 0x9a8f, 0x9f99, 0x7987, 0xf408, 0xf409, 0xf40a, 0xf40b, 0x4e24, 0x4e81, 0x4e80, 0x4e87, 0x4ebf, 0x4eeb, 0x4f37, 0x344c, 0x4fbd, 0x3e48, 0x5003, 0x5088, 0x347d, 0x3493, 0x34a5, 0x5186, 0x5905, 0x51db, 0x51fc, 0x5205, 0x4e89, 0x5279, 0x5290, 0x5327, 0x35c7, 0x53a9, 0x3551, 0x53b0, 0x3553, 0x53c2, 0x5423, 0x356d, 0x3572, 0x3681, 0x5493, 0x54a3, 0x54b4, 0x54b9, 0x54d0, 0x54ef, 0x5518, 0x5523, 0x5528, 0x3598, 0x553f, 0x35a5, 0x35bf, 0x55d7, 0x35c5, /* 0x8a */ 0xf43d, 0x5525, 0xf43f, 0xf440, 0xf441, 0xf442, 0x5590, 0xf444, 0x39ec, 0xf446, 0x8e46, 0xf448, 0xf449, 0x4053, 0xf44b, 0x777a, 0xf44d, 0x3a34, 0x47d5, 0xf450, 0xf451, 0xf452, 0x64dd, 0xf454, 0xf455, 0xf456, 0xf457, 0x648d, 0x8e7e, 0xf45a, 0xf45b, 0xf45c, 0xf45d, 0xf45e, 0xf45f, 0xf460, 0xf461, 0xf462, 0xf463, 0x47f4, 0xf465, 0xf466, 0x9ab2, 0x3a67, 0xf469, 0x3fed, 0x3506, 0xf46c, 0xf46d, 0xf46e, 0xf46f, 0x9d6e, 0x9815, 0xf472, 0x43d9, 0xf474, 0x64b4, 0x54e3, 0xf477, 0xf478, 0xf479, 0x39fb, 0xf47b, 0xf47c, 0xf47d, 0xf47e, 0x64ea, 0xf480, 0xf481, 0x8e68, 0xf483, 0xf484, 0xf485, 0xf486, 0x480b, 0xf488, 0x3ffa, 0x5873, 0xf48b, 0xf48c, 0xf48d, 0xf48e, 0xf48f, 0xf490, 0xf491, 0x5579, 0x40bb, 0x43ba, 0xf495, 0x4ab4, 0xf497, 0xf498, 0x81aa, 0x98f5, 0xf49b, 0x6379, 0x39fe, 0xf49e, 0x8dc0, 0x56a1, 0x647c, 0x3e43, 0xf4a3, 0xf4a4, 0xf4a5, 0xf4a6, 0xf4a7, 0xf4a8, 0xf4a9, 0xf4aa, 0x3992, 0x3a06, 0xf4ad, 0x3578, 0xf4af, 0xf4b0, 0x5652, 0xf4b2, 0xf4b3, 0xf4b4, 0x34bc, 0x6c3d, 0xf4b7, 0xf4b8, 0xf4b9, 0xf4ba, 0xf4bb, 0xf4bc, 0xf4bd, 0xf4be, 0xf4bf, 0xf4c0, 0xf4c1, 0x7f93, 0xf4c3, 0xf4c4, 0xf4c5, 0x35fb, 0xf4c7, 0xf4c8, 0xf4c9, 0xf4ca, 0x3f93, 0xf4cc, 0xf4cd, 0xf4ce, 0xf4cf, 0xf4d0, 0xf4d1, 0xf4d2, 0xf4d3, 0xf4d4, 0xf4d5, 0x3ff9, 0xf4d7, 0x6432, 0xf4d9, /* 0x8b */ 0xf4da, 0xf4db, 0xf4dc, 0xf4dd, 0xf4de, 0xf4df, 0xf4e0, 0x3a18, 0xf4e2, 0xf4e3, 0xf4e4, 0xf4e5, 0xf4e6, 0xf4e7, 0xf4e8, 0xf4e9, 0x95aa, 0x54cc, 0x82c4, 0x55b9, 0xf4ee, 0xf4ef, 0x9c26, 0x9ab6, 0xf4f2, 0xf4f3, 0x7140, 0x816d, 0x80ec, 0x5c1c, 0xf4f8, 0x8134, 0x3797, 0x535f, 0xf4fc, 0x91b6, 0xf4fe, 0xf4ff, 0xf500, 0xf501, 0x35dd, 0xf503, 0x3609, 0xf505, 0x56af, 0xf507, 0xf508, 0xf509, 0xf50a, 0xf50b, 0xf50c, 0xf50d, 0xf50e, 0xf50f, 0xf510, 0xf511, 0x5a54, 0xf513, 0xf514, 0xf515, 0xf516, 0x579c, 0xf518, 0xf519, 0xf51a, 0xf51b, 0xf51c, 0xf51d, 0x3703, 0xf51f, 0xf520, 0xf521, 0xf522, 0xf523, 0xf524, 0xf525, 0xf526, 0x5899, 0x5268, 0x361a, 0xf52a, 0x7bb2, 0x5b68, 0x4800, 0x4b2c, 0x9f27, 0x49e7, 0x9c1f, 0x9b8d, 0xf533, 0xf534, 0x55fb, 0x35f2, 0x5689, 0x4e28, 0x5902, 0xf53a, 0xf53b, 0x9751, 0xf53d, 0x4e5b, 0x4ebb, 0x353e, 0x5c23, 0x5f51, 0x5fc4, 0x38fa, 0x624c, 0x6535, 0x6b7a, 0x6c35, 0x6c3a, 0x706c, 0x722b, 0x4e2c, 0x72ad, 0xf54e, 0x7f52, 0x793b, 0x7cf9, 0x7f53, 0xf553, 0x34c1, 0xf555, 0xf556, 0x8002, 0x8080, 0xf559, 0xf55a, 0x535d, 0x8864, 0x89c1, 0xf55e, 0x8ba0, 0x8d1d, 0x9485, 0x9578, 0x957f, 0x95e8, 0xf565, 0x97e6, 0x9875, 0x98ce, 0x98de, 0x9963, 0xf56b, 0x9c7c, 0x9e1f, 0x9ec4, 0x6b6f, 0xf907, 0x4e37, 0xf572, 0x961d, 0x6237, 0x94a2, 0xf576, /* 0x8c */ 0x503b, 0x6dfe, 0xf579, 0xf57a, 0x3dc9, 0x888f, 0xf57d, 0x7077, 0x5cf5, 0x4b20, 0xf581, 0x3559, 0xf583, 0x6122, 0xf585, 0x8fa7, 0x91f6, 0x7191, 0x6719, 0x73ba, 0xf58b, 0xf58c, 0x3c8b, 0xf58e, 0x4b10, 0x78e4, 0x7402, 0x51ae, 0xf593, 0x4009, 0x6a63, 0xf596, 0x4223, 0x860f, 0xf599, 0x7a2a, 0xf59b, 0xf59c, 0x9755, 0x704d, 0x5324, 0xf5a0, 0x93f4, 0x76d9, 0xf5a3, 0xf5a4, 0x77dd, 0x4ea3, 0x4ff0, 0x50bc, 0x4e2f, 0x4f17, 0xf5ab, 0x5434, 0x7d8b, 0x5892, 0x58d0, 0xf5b0, 0x5e92, 0x5e99, 0x5fc2, 0xf5b4, 0x658b, 0xf5b6, 0x6919, 0x6a43, 0xf5b9, 0x6cff, 0xf5bb, 0x7200, 0xf5bd, 0x738c, 0x3edb, 0xf5c0, 0x5b15, 0x74b9, 0x8b83, 0xf5c4, 0xf5c5, 0x7a93, 0x7bec, 0x7cc3, 0x7e6c, 0x82f8, 0x8597, 0xf5cc, 0x8890, 0xf5ce, 0x8eb9, 0xf5d0, 0x8fcf, 0x855f, 0x99e0, 0x9221, 0xf5d5, 0xf5d6, 0xf5d7, 0x4071, 0x42a2, 0x5a1a, 0xf5db, 0xf5dc, 0xf5dd, 0x9868, 0x676b, 0x4276, 0x573d, 0xf5e2, 0x85d6, 0xf5e4, 0x82bf, 0xf5e6, 0x4c81, 0xf5e8, 0x5d7b, 0xf5ea, 0xf5eb, 0xf5ec, 0xf5ed, 0x5b96, 0xf5ef, 0xf5f0, 0x7e5b, 0xf5f2, 0xf5f3, 0xf5f4, 0xf5f5, 0xf5f6, 0xf5f7, 0xf5f8, 0xf5f9, 0xf5fa, 0xf5fb, 0xf5fc, 0xf5fd, 0xf5fe, 0xf5ff, 0xf600, 0xf601, 0xf602, 0xf603, 0xf604, 0xf605, 0xf606, 0xf607, 0xf608, 0xf609, 0xf60a, 0xf60b, 0xf60c, 0xf60d, 0xf60e, 0xf60f, 0xf610, 0xf611, 0xf612, 0xf613, /* 0x8d */ 0xf614, 0xf615, 0xf616, 0xf617, 0xf618, 0xf619, 0xf61a, 0xf61b, 0xf61c, 0xf61d, 0xf61e, 0xf61f, 0xf620, 0xf621, 0xf622, 0xf623, 0xf624, 0xf625, 0xf626, 0xf627, 0xf628, 0xf629, 0xf62a, 0xf62b, 0xf62c, 0xf62d, 0xf62e, 0xf62f, 0xf630, 0xf631, 0xf632, 0xf633, 0x5d3e, 0x5d48, 0x5d56, 0x3dfc, 0x380f, 0x5da4, 0x5db9, 0x3820, 0x3838, 0x5e42, 0x5ebd, 0x5f25, 0x5f83, 0x3908, 0x3914, 0x393f, 0x394d, 0x60d7, 0x613d, 0x5ce5, 0x3989, 0x61b7, 0x61b9, 0x61cf, 0x39b8, 0x622c, 0x6290, 0x62e5, 0x6318, 0x39f8, 0x56b1, 0x3a03, 0x63e2, 0x63fb, 0x6407, 0x645a, 0x3a4b, 0x64c0, 0x5d15, 0x5621, 0x9f9f, 0x3a97, 0x6586, 0x3abd, 0x65ff, 0x6653, 0x3af2, 0x6692, 0x3b22, 0x6716, 0x3b42, 0x67a4, 0x6800, 0x3b58, 0x684a, 0x6884, 0x3b72, 0x3b71, 0x3b7b, 0x6909, 0x6943, 0x725c, 0x6964, 0x699f, 0x6985, 0x3bbc, 0x69d6, 0x3bdd, 0x6a65, 0x6a74, 0x6a71, 0x6a82, 0x3bec, 0x6a99, 0x3bf2, 0x6aab, 0x6ab5, 0x6ad4, 0x6af6, 0x6b81, 0x6bc1, 0x6bea, 0x6c75, 0x6caa, 0x3ccb, 0x6d02, 0x6d06, 0x6d26, 0x6d81, 0x3cef, 0x6da4, 0x6db1, 0x6e15, 0x6e18, 0x6e29, 0x6e86, 0xf694, 0x6ebb, 0x6ee2, 0x6eda, 0x9f7f, 0x6ee8, 0x6ee9, 0x6f24, 0x6f34, 0x3d46, 0xf69e, 0x6f81, 0x6fbe, 0x3d6a, 0x3d75, 0x71b7, 0x5c99, 0x3d8a, 0x702c, 0x3d91, 0x7050, 0x7054, 0x706f, 0x707f, 0x7089, 0xf6ad, 0x43c1, 0x35f1, 0xf6b0, /* 0x8e */ 0xe311, 0x57be, 0xe313, 0x713e, 0xe315, 0x364e, 0x69a2, 0xe318, 0x5b74, 0x7a49, 0xe31b, 0xe31c, 0x7a65, 0x7a7d, 0xe31f, 0x7abb, 0x7ab0, 0x7ac2, 0x7ac3, 0x71d1, 0xe325, 0x41ca, 0x7ada, 0x7add, 0x7aea, 0x41ef, 0x54b2, 0xe32c, 0x7b0b, 0x7b55, 0x7b29, 0xe330, 0xe331, 0x7ba2, 0x7b6f, 0x839c, 0xe335, 0xe336, 0x7bd0, 0x8421, 0x7b92, 0x7bb8, 0xe33b, 0x3dad, 0xe33d, 0x8492, 0x7bfa, 0x7c06, 0x7c35, 0xe342, 0x7c44, 0x7c83, 0xe345, 0x7ca6, 0x667d, 0xe348, 0x7cc9, 0x7cc7, 0x7ce6, 0x7c74, 0x7cf3, 0x7cf5, 0x7cce, 0x7e67, 0x451d, 0xe352, 0x7d5d, 0xe354, 0x748d, 0x7d89, 0x7dab, 0x7135, 0x7db3, 0x7dd2, 0xe35b, 0xe35c, 0x7de4, 0x3d13, 0x7df5, 0xe360, 0x7de5, 0xe362, 0x7e1d, 0xe364, 0xe365, 0x7e6e, 0x7e92, 0x432b, 0x946c, 0x7e27, 0x7f40, 0x7f41, 0x7f47, 0x7936, 0xe36f, 0x99e1, 0x7f97, 0xe372, 0x7fa3, 0xe374, 0xe375, 0x455c, 0xe377, 0x4503, 0xe379, 0x7ffa, 0xe37b, 0x8005, 0x8008, 0x801d, 0x8028, 0x802f, 0xe381, 0xe382, 0x803b, 0x803c, 0x8061, 0xe386, 0x4989, 0xe388, 0xe389, 0xe38a, 0x6725, 0x80a7, 0xe38d, 0x8107, 0x811a, 0x58b0, 0xe391, 0x6c7f, 0xe393, 0xe394, 0x64e7, 0xe396, 0x8218, 0xe398, 0x6a53, 0xe39a, 0xe39b, 0x447a, 0x8229, 0xe39e, 0xe39f, 0xe3a0, 0x4ff9, 0xe3a2, 0x84e2, 0x8362, 0xe3a5, 0xe3a6, 0xe3a7, 0xe3a8, 0xe3a9, 0x82aa, 0x691b, 0xe3ac, 0x41db, /* 0x8f */ 0x854b, 0x82d0, 0x831a, 0xe3b1, 0xe3b2, 0x36c1, 0xe3b4, 0xe3b5, 0x827b, 0x82e2, 0x8318, 0xe3b9, 0xe3ba, 0xe3bb, 0xe3bc, 0xe3bd, 0x3dbf, 0x831d, 0x55ec, 0x8385, 0x450b, 0xe3c3, 0x83ac, 0x83c1, 0x83d3, 0x347e, 0xe3c8, 0x6a57, 0x855a, 0x3496, 0xe3cc, 0xe3cd, 0x8458, 0xe3cf, 0x8471, 0x3dd3, 0x44e4, 0x6aa7, 0x844a, 0xe3d5, 0x7958, 0x84a8, 0xe3d8, 0xe3d9, 0xe3da, 0x84de, 0x840f, 0x8391, 0x44a0, 0x8493, 0x84e4, 0xe3e1, 0x4240, 0xe3e3, 0x4543, 0x8534, 0x5af2, 0xe3e7, 0x4527, 0x8573, 0x4516, 0x67bf, 0x8616, 0xe3ed, 0xe3ee, 0x85c1, 0xe3f0, 0x8602, 0xe3f2, 0xe3f3, 0xe3f4, 0x456a, 0x8628, 0x3648, 0xe3f8, 0x53f7, 0xe3fa, 0x867e, 0x8771, 0xe3fd, 0x87ee, 0xe3ff, 0x87b1, 0x87da, 0x880f, 0x5661, 0x866c, 0x6856, 0x460f, 0x8845, 0x8846, 0xe409, 0xe40a, 0xe40b, 0x885e, 0x889c, 0x465b, 0x88b4, 0x88b5, 0x63c1, 0x88c5, 0x7777, 0xe414, 0x8987, 0x898a, 0x89a6, 0x89a9, 0x89a7, 0x89bc, 0xe41b, 0x89e7, 0xe41d, 0xe41e, 0x8a9c, 0x7793, 0x91fe, 0x8a90, 0xe423, 0x7ae9, 0xe425, 0xe426, 0x4713, 0xe428, 0x717c, 0x8b0c, 0x8b1f, 0xe42c, 0xe42d, 0x8b3f, 0x8b4c, 0x8b4d, 0x8aa9, 0xe432, 0x8b90, 0x8b9b, 0x8aaf, 0xe436, 0x4615, 0x884f, 0x8c9b, 0xe43a, 0xe43b, 0xe43c, 0x3725, 0xe43e, 0x8cd6, 0xe440, 0xe441, 0x8d12, 0x8d03, 0xe444, 0x8cdb, 0x705c, 0x8d11, 0xe448, 0x3ed0, 0x8d77, /* 0x90 */ 0x8da9, 0xe44c, 0xe44d, 0xe44e, 0x3b7c, 0xe450, 0xe451, 0x7ae7, 0x8ead, 0x8eb6, 0x8ec3, 0x92d4, 0x8f19, 0x8f2d, 0xe459, 0xe45a, 0x8fa5, 0x9303, 0xe45d, 0xe45e, 0x8fb3, 0x492a, 0xe461, 0xe462, 0xe463, 0x5ef8, 0xe465, 0x8ff9, 0xe467, 0xe468, 0xe469, 0xe46a, 0x3980, 0xe46c, 0x9037, 0xe46e, 0xe46f, 0x9061, 0xe471, 0xe472, 0x90a8, 0xe474, 0x90c4, 0xe476, 0x90ae, 0x90fd, 0x9167, 0x3af0, 0x91a9, 0x91c4, 0x7cac, 0xe47e, 0xe47f, 0x920e, 0x6c9f, 0x9241, 0x9262, 0xe484, 0x92b9, 0xe486, 0xe487, 0xe488, 0xe489, 0xe48a, 0x932c, 0x936b, 0xe48d, 0xe48e, 0x708f, 0x5ac3, 0xe491, 0xe492, 0x4965, 0x9244, 0xe495, 0xe496, 0xe497, 0x9373, 0x945b, 0x8ebc, 0x9585, 0x95a6, 0x9426, 0x95a0, 0x6ff6, 0x42b9, 0xe4a1, 0xe4a2, 0xe4a3, 0xe4a4, 0x49df, 0x6c1c, 0x967b, 0x9696, 0x416c, 0x96a3, 0xe4ab, 0x61da, 0x96b6, 0x78f5, 0xe4af, 0x96bd, 0x53cc, 0x49a1, 0xe4b3, 0xe4b4, 0xe4b5, 0xe4b6, 0xe4b7, 0xe4b8, 0xe4b9, 0xe4ba, 0x9731, 0x8642, 0x9736, 0x4a0f, 0x453d, 0x4585, 0xe4c1, 0x7075, 0x5b41, 0x971b, 0x975c, 0xe4c6, 0x9757, 0x5b4a, 0xe4c9, 0x975f, 0x9425, 0x50d0, 0xe4cd, 0xe4ce, 0x9789, 0x979f, 0x97b1, 0x97be, 0x97c0, 0x97d2, 0x97e0, 0xe4d6, 0x97ee, 0x741c, 0xe4d9, 0x97ff, 0x97f5, 0xe4dc, 0xe4dd, 0x4ad1, 0x9834, 0x9833, 0x984b, 0x9866, 0x3b0e, 0xe4e4, 0x3d51, 0xe4e6, 0xe4e7, /* 0x91 */ 0xe4e8, 0x98ca, 0x98b7, 0x98c8, 0x98c7, 0x4aff, 0xe4ee, 0xe4ef, 0x55b0, 0x98e1, 0x98e6, 0x98ec, 0x9378, 0x9939, 0xe4f6, 0x4b72, 0xe4f8, 0xe4f9, 0x99f5, 0x9a0c, 0x9a3b, 0x9a10, 0x9a58, 0xe4ff, 0x36c4, 0xe501, 0xe502, 0x9ae0, 0x9ae2, 0xe505, 0x9af4, 0x4c0e, 0x9b14, 0x9b2d, 0xe50a, 0x5034, 0x9b34, 0xe50d, 0x38c3, 0xe50f, 0x9b50, 0x9b40, 0xe512, 0x5a45, 0xe514, 0x9b8e, 0xe516, 0x9c02, 0x9bff, 0x9c0c, 0xe51a, 0x9dd4, 0xe51c, 0xe51d, 0xe51e, 0xe51f, 0xe520, 0xe521, 0x9d7e, 0x9d83, 0xe524, 0x9e0e, 0x6888, 0x9dc4, 0xe528, 0xe529, 0xe52a, 0xe52b, 0xe52c, 0x9d39, 0xe52e, 0xe52f, 0x9e90, 0x9e95, 0x9e9e, 0x9ea2, 0x4d34, 0x9eaa, 0x9eaf, 0xe537, 0x9ec1, 0x3b60, 0x39e5, 0x3d1d, 0x4f32, 0x37be, 0xe53e, 0x9f02, 0x9f08, 0x4b96, 0x9424, 0xe543, 0x9f17, 0x9f16, 0x9f39, 0x569f, 0x568a, 0x9f45, 0x99b8, 0xe54b, 0x97f2, 0x847f, 0x9f62, 0x9f69, 0x7adc, 0x9f8e, 0x7216, 0x4bbe, 0xe554, 0xe555, 0x7177, 0xe557, 0xe558, 0xe559, 0x739e, 0xe55b, 0xe55c, 0x799f, 0xe55e, 0xe55f, 0x9369, 0x93f3, 0xe562, 0x92ec, 0x9381, 0x93cb, 0xe566, 0xe567, 0x7217, 0x3eeb, 0x7772, 0x7a43, 0x70d0, 0xe56d, 0xe56e, 0x717e, 0xe570, 0x70a3, 0xe572, 0xe573, 0x3ec7, 0xe575, 0xe576, 0xe577, 0x3722, 0xe579, 0xe57a, 0x36e1, 0xe57c, 0xe57d, 0xe57e, 0x3723, 0xe580, 0x575b, 0xe582, 0xe583, 0xe584, /* 0x92 */ 0xe585, 0xe586, 0x8503, 0xe588, 0x8503, 0x8455, 0xe58b, 0xe58c, 0xe58d, 0xe58e, 0xe58f, 0xe590, 0x44f4, 0xe592, 0xe593, 0xe594, 0x67f9, 0x3733, 0x3c15, 0x3de7, 0x586c, 0xe59a, 0x6810, 0x4057, 0xe59d, 0xe59e, 0xe59f, 0xe5a0, 0xe5a1, 0x54cb, 0x569e, 0xe5a4, 0x5692, 0xe5a6, 0xe5a7, 0xe5a8, 0x93c6, 0xe5aa, 0x939c, 0x4ef8, 0x512b, 0x3819, 0xe5af, 0x4ebc, 0xe5b1, 0xe5b2, 0x4f4b, 0x4f8a, 0xe5b5, 0x5a68, 0xe5b7, 0xe5b8, 0x3999, 0xe5ba, 0xe5bb, 0x3435, 0x4f29, 0xe5be, 0xe5bf, 0xe5c0, 0x8ada, 0xe5c2, 0x4e98, 0x50cd, 0x510d, 0x4fa2, 0x4f03, 0xe5c8, 0xe5c9, 0x4f42, 0x502e, 0x506c, 0x5081, 0x4fcc, 0x4fe5, 0x5058, 0x50fc, 0x5159, 0x515b, 0x515d, 0x515e, 0x6e76, 0xe5d7, 0xe5d8, 0xe5d9, 0x6d72, 0xe5db, 0xe5dc, 0x51a8, 0x51c3, 0xe5df, 0x44dd, 0xe5e1, 0xe5e2, 0xe5e3, 0x8d7a, 0xe5e5, 0xe5e6, 0x5259, 0x52a4, 0xe5e9, 0x52e1, 0x936e, 0x467a, 0x718c, 0xe5ee, 0xe5ef, 0xe5f0, 0xe5f1, 0x69d1, 0xe5f3, 0x7479, 0x3ede, 0x7499, 0x7414, 0x7456, 0x7398, 0x4b8e, 0xe5fb, 0xe5fc, 0x53d0, 0x3584, 0x720f, 0xe600, 0x55b4, 0xe602, 0x54cd, 0xe604, 0x571d, 0x925d, 0x96f4, 0x9366, 0x57dd, 0x578d, 0x577f, 0x363e, 0x58cb, 0x5a99, 0xe60f, 0xe610, 0xe611, 0xe612, 0x5a2c, 0x59b8, 0x928f, 0x5a7e, 0x5acf, 0x5a12, 0xe619, 0xe61a, 0xe61b, 0xe61c, 0x36f5, 0x6d05, 0x7443, 0x5a21, 0xe621, /* 0x93 */ 0x5a81, 0xe623, 0xe624, 0x93e0, 0x748c, 0xe627, 0x7105, 0x4972, 0x9408, 0xe62b, 0x93bd, 0x37a0, 0x5c1e, 0x5c9e, 0x5e5e, 0x5e48, 0xe632, 0xe633, 0xe634, 0x5ecd, 0x5b4f, 0xe637, 0xe638, 0x3701, 0xe63a, 0x36dd, 0xe63c, 0x36d3, 0x812a, 0xe63f, 0xe640, 0xe641, 0xe642, 0x5f0c, 0x5f0e, 0xe645, 0xe646, 0x5a6b, 0xe648, 0x5b44, 0x8614, 0xe64b, 0x8860, 0x607e, 0xe64e, 0xe64f, 0x5fdb, 0x3eb8, 0xe652, 0xe653, 0xe654, 0xe655, 0x61c0, 0xe657, 0xe658, 0xe659, 0x6199, 0x6198, 0x6075, 0xe65d, 0xe65e, 0xe65f, 0xe660, 0x6471, 0xe662, 0xe663, 0x3a29, 0xe665, 0xe666, 0xe667, 0xe668, 0x6337, 0xe66a, 0x64b6, 0x6331, 0x63d1, 0xe66e, 0xe66f, 0x62a4, 0xe671, 0x643b, 0x656b, 0x6972, 0x3bf4, 0xe676, 0xe677, 0xe678, 0xe679, 0x550d, 0xe67b, 0xe67c, 0xe67d, 0x66ce, 0xe67f, 0xe680, 0x3ae0, 0x4190, 0xe683, 0xe684, 0xe685, 0xe686, 0xe687, 0xe688, 0x78ee, 0xe68a, 0xe68b, 0xe68c, 0x3464, 0xe68e, 0xe68f, 0xe690, 0x668e, 0xe692, 0x666b, 0x4b93, 0x6630, 0xe696, 0xe697, 0x6663, 0xe699, 0xe69a, 0x661e, 0xe69c, 0x38d1, 0xe69e, 0xe69f, 0x3b99, 0xe6a1, 0xe6a2, 0x74d0, 0x3b96, 0x678f, 0xe6a6, 0x68b6, 0x681e, 0x3bc4, 0x6abe, 0x3863, 0xe6ac, 0xe6ad, 0x6a33, 0x6a52, 0x6ac9, 0x6b05, 0xe6b2, 0x6511, 0x6898, 0x6a4c, 0x3bd7, 0x6a7a, 0x6b57, 0xe6b9, 0xe6ba, 0x93a0, 0x92f2, 0xe6bd, 0xe6be, /* 0x94 */ 0x9289, 0xe6c0, 0xe6c1, 0x9467, 0x6da5, 0x6f0b, 0xe6c5, 0x6d67, 0xe6c7, 0x3d8f, 0x6e04, 0xe6ca, 0x5a3d, 0x6e0a, 0x5847, 0x6d24, 0x7842, 0x713b, 0xe6d1, 0xe6d2, 0x70f1, 0x7250, 0x7287, 0x7294, 0xe6d7, 0xe6d8, 0x5179, 0xe6da, 0xe6db, 0x747a, 0xe6dd, 0xe6de, 0xe6df, 0xe6e0, 0xe6e1, 0x3f06, 0x3eb1, 0xe6e4, 0xe6e5, 0xe6e6, 0x60a7, 0x3ef3, 0x74cc, 0x743c, 0x9387, 0x7437, 0x449f, 0xe6ee, 0x4551, 0x7583, 0x3f63, 0xe6f2, 0xe6f3, 0x3f58, 0x7555, 0x7673, 0xe6f7, 0x3b19, 0x7468, 0xe6fa, 0xe6fb, 0xe6fc, 0x3afb, 0x3dcd, 0xe6ff, 0x3eff, 0xe701, 0xe702, 0x91fa, 0x5732, 0x9342, 0xe706, 0xe707, 0x50df, 0xe709, 0xe70a, 0x7778, 0xe70c, 0x770e, 0x770f, 0x777b, 0xe710, 0xe711, 0x3a5e, 0xe713, 0x7438, 0x749b, 0x3ebf, 0xe717, 0xe718, 0x40c8, 0xe71a, 0xe71b, 0x9307, 0xe71d, 0x781e, 0x788d, 0x7888, 0x78d2, 0x73d0, 0x7959, 0xe724, 0xe725, 0x410e, 0x799b, 0x8496, 0x79a5, 0x6a2d, 0xe72b, 0x7a3a, 0x79f4, 0x416e, 0xe72f, 0x4132, 0x9235, 0x79f1, 0xe733, 0xe734, 0xe735, 0xe736, 0xe737, 0x3597, 0x556b, 0x3570, 0x36aa, 0xe73c, 0xe73d, 0x7ae2, 0x5a59, 0xe740, 0xe741, 0xe742, 0x5a0d, 0xe744, 0x78f0, 0x5a2a, 0xe747, 0x7afe, 0x41f9, 0x7c5d, 0x7c6d, 0x4211, 0xe74d, 0xe74e, 0xe74f, 0x7ccd, 0xe751, 0xe752, 0x7c8e, 0x7c7c, 0x7cae, 0x6ab2, 0x7ddc, 0x7e07, 0x7dd3, 0x7f4e, 0xe75b, /* 0x95 */ 0xe75c, 0xe75d, 0x7d97, 0xe75f, 0x426a, 0xe761, 0xe762, 0x67d6, 0xe764, 0xe765, 0x57c4, 0xe767, 0xe768, 0xe769, 0x7fdd, 0x7b27, 0xe76c, 0xe76d, 0xe76e, 0x7b0c, 0xe770, 0x99e6, 0x8645, 0x9a63, 0x6a1c, 0xe775, 0x39e2, 0xe777, 0xe778, 0x9a1f, 0xe77a, 0x8480, 0xe77c, 0xe77d, 0x44ea, 0x8137, 0x4402, 0x80c6, 0x8109, 0x8142, 0xe784, 0x98c3, 0xe786, 0x8262, 0x8265, 0xe789, 0x8453, 0xe78b, 0x8610, 0xe78d, 0x5a86, 0x417f, 0xe790, 0x5b2b, 0xe792, 0x5ae4, 0xe794, 0x86a0, 0xe796, 0xe797, 0x882d, 0xe799, 0x5a02, 0x886e, 0x4f45, 0x8887, 0x88bf, 0x88e6, 0x8965, 0x894d, 0xe7a2, 0x8954, 0xe7a4, 0xe7a5, 0xe7a6, 0xe7a7, 0xe7a8, 0xe7a9, 0x3ead, 0x84a3, 0x46f5, 0x46cf, 0x37f2, 0x8a3d, 0x8a1c, 0xe7b1, 0x5f4d, 0x922b, 0xe7b4, 0x65d4, 0x7129, 0x70c4, 0xe7b8, 0x9d6d, 0x8c9f, 0x8ce9, 0xe7bc, 0x599a, 0x77c3, 0x59f0, 0x436e, 0x36d4, 0x8e2a, 0x8ea7, 0xe7c4, 0x8f30, 0x8f4a, 0x42f4, 0x6c58, 0x6fbb, 0xe7ca, 0x489b, 0x6f79, 0x6e8b, 0xe7ce, 0x9be9, 0x36b5, 0xe7d1, 0x90bb, 0x9097, 0x5571, 0x4906, 0x91bb, 0x9404, 0xe7d8, 0x4062, 0xe7da, 0x9427, 0xe7dc, 0xe7dd, 0x84e5, 0x8a2b, 0x9599, 0x95a7, 0x9597, 0x9596, 0xe7e4, 0x7445, 0x3ec2, 0xe7e7, 0xe7e8, 0xe7e9, 0x3ee7, 0xe7eb, 0x968f, 0xe7ed, 0xe7ee, 0xe7ef, 0x3ecc, 0xe7f1, 0xe7f2, 0xe7f3, 0x7412, 0x746b, 0x3efc, 0x9741, 0xe7f8, /* 0x96 */ 0x6847, 0x4a1d, 0xe7fb, 0xe7fc, 0x975d, 0x9368, 0xe7ff, 0xe800, 0xe801, 0xe802, 0x92ba, 0x5b11, 0x8b69, 0x493c, 0x73f9, 0xe808, 0x979b, 0x9771, 0x9938, 0xe80c, 0x5dc1, 0xe80e, 0xe80f, 0x981f, 0xe811, 0x92f6, 0xe813, 0x91e5, 0x44c0, 0xe816, 0xe817, 0xe818, 0x98dc, 0xe81a, 0x3f00, 0x922a, 0x4925, 0x8414, 0x993b, 0x994d, 0xe821, 0x3dfd, 0x999b, 0x4b6f, 0x99aa, 0x9a5c, 0xe827, 0xe828, 0x6a8f, 0x9a21, 0x5afe, 0x9a2f, 0xe82d, 0x4b90, 0xe82f, 0x99bc, 0x4bbd, 0x4b97, 0x937d, 0x5872, 0xe835, 0x5822, 0xe837, 0xe838, 0x7844, 0xe83a, 0xe83b, 0x68c5, 0x3d7d, 0x9458, 0x3927, 0x6150, 0xe841, 0xe842, 0x6107, 0x9c4f, 0x9c53, 0x9c7b, 0x9c35, 0x9c10, 0x9b7f, 0x9bcf, 0xe84b, 0x9b9f, 0xe84d, 0xe84e, 0x9d21, 0x4cae, 0xe851, 0x9e18, 0x4cb0, 0x9d0c, 0xe855, 0xe856, 0xe857, 0xe858, 0x9da5, 0x84bd, 0xe85b, 0xe85c, 0xe85d, 0x85fc, 0x4533, 0xe860, 0xe861, 0xe862, 0x8420, 0x85ee, 0xe865, 0xe866, 0xe867, 0x79e2, 0xe869, 0xe86a, 0x492d, 0xe86c, 0x3d62, 0x93db, 0x92be, 0x9348, 0xe871, 0x78b9, 0x9277, 0x944d, 0x4fe4, 0x3440, 0x9064, 0xe878, 0x783d, 0x7854, 0x78b6, 0x784b, 0xe87d, 0xe87e, 0xe87f, 0x369a, 0x4f72, 0x6fda, 0x6fd9, 0x701e, 0x701e, 0x5414, 0xe887, 0x57bb, 0x58f3, 0x578a, 0x9d16, 0x57d7, 0x7134, 0x34af, 0xe88f, 0x71eb, 0xe891, 0xe892, 0x5b28, 0xe894, 0xe895, /* 0x97 */ 0x610c, 0x5ace, 0x5a0b, 0x42bc, 0xe89a, 0x372c, 0x4b7b, 0xe89d, 0x93bb, 0x93b8, 0xe8a0, 0xe8a1, 0x8472, 0xe8a3, 0xe8a4, 0xe8a5, 0xe8a6, 0xe8a7, 0x5994, 0xe8a9, 0xe8aa, 0x7da8, 0xe8ac, 0xe8ad, 0xe8ae, 0xe8af, 0xe8b0, 0x92e5, 0x73e2, 0x3ee9, 0x74b4, 0xe8b5, 0xe8b6, 0x3ee1, 0xe8b8, 0x6ad8, 0x73f3, 0x73fb, 0x3ed6, 0xe8bd, 0xe8be, 0xe8bf, 0xe8c0, 0xe8c1, 0xe8c2, 0xe8c3, 0x7448, 0xe8c5, 0x70a5, 0xe8c7, 0x9284, 0x73e6, 0x935f, 0xe8cb, 0x9331, 0xe8cd, 0xe8ce, 0x9386, 0xe8d0, 0xe8d1, 0x4935, 0xe8d3, 0x716b, 0xe8d5, 0xe8d6, 0x56a4, 0xe8d8, 0xe8d9, 0xe8da, 0x5502, 0x79c4, 0xe8dd, 0x7dfe, 0xe8df, 0xe8e0, 0xe8e1, 0x452e, 0x9401, 0x370a, 0xe8e5, 0xe8e6, 0x59b0, 0xe8e8, 0xe8e9, 0xe8ea, 0x5aa1, 0x36e2, 0xe8ed, 0x36b0, 0x925f, 0x5a79, 0xe8f1, 0xe8f2, 0x9374, 0x3ccd, 0xe8f5, 0x4a96, 0x398a, 0x50f4, 0x3d69, 0x3d4c, 0xe8fb, 0x7175, 0x42fb, 0xe8fe, 0x6e0f, 0xe900, 0x44eb, 0x6d57, 0xe903, 0x7067, 0x6caf, 0x3cd6, 0xe907, 0xe908, 0x6e02, 0x6f0c, 0x3d6f, 0xe90c, 0x7551, 0x36bc, 0x34c8, 0x4680, 0x3eda, 0x4871, 0x59c4, 0x926e, 0x493e, 0x8f41, 0xe917, 0xe918, 0x5812, 0x57c8, 0x36d6, 0xe91c, 0x70fe, 0xe91e, 0xe91f, 0xe920, 0xe921, 0xe922, 0x68b9, 0x6967, 0xe925, 0xe926, 0xe927, 0xe928, 0xe929, 0xe92a, 0xe92b, 0xe92c, 0x6a1a, 0xe92e, 0xe92f, 0x843e, 0x44df, 0x44ce, /* 0x98 */ 0xe933, 0xe934, 0xe935, 0xe936, 0x6f17, 0xe938, 0x833d, 0xe93a, 0x83ed, 0xe93c, 0xe93d, 0xe93e, 0x5989, 0x5a82, 0xe941, 0x5a61, 0x5a71, 0xe944, 0xe945, 0x372d, 0x59ef, 0xe948, 0x36c7, 0x718e, 0x9390, 0x669a, 0xe94d, 0x5a6e, 0x5a2b, 0xe950, 0x6a2b, 0xe952, 0xe953, 0xe954, 0xe955, 0x711d, 0xe957, 0xe958, 0x4fb0, 0xe95a, 0x5cc2, 0xe95c, 0xe95d, 0xe95e, 0x6a0c, 0xe960, 0xe961, 0x70a6, 0x7133, 0xe964, 0x3da5, 0x6cdf, 0xe967, 0xe968, 0x7e65, 0x59eb, 0x5d2f, 0x3df3, 0x5f5c, 0xe96e, 0xe96f, 0x7da4, 0x8426, 0x5485, 0xe973, 0xe974, 0xe975, 0x577e, 0xe977, 0xe978, 0x3fe5, 0xe97a, 0xe97b, 0x7003, 0xe97d, 0x5d70, 0x738f, 0x7cd3, 0xe981, 0xe982, 0x4fc8, 0x7fe7, 0x72cd, 0x7310, 0xe987, 0x7338, 0x7339, 0xe98a, 0x7341, 0x7348, 0x3ea9, 0xe98e, 0x906c, 0x71f5, 0xe991, 0x73e1, 0x81f6, 0x3eca, 0x770c, 0x3ed1, 0x6ca2, 0x56fd, 0x7419, 0x741e, 0x741f, 0x3ee2, 0x3ef0, 0x3ef4, 0x3efa, 0x74d3, 0x3f0e, 0x3f53, 0x7542, 0x756d, 0x7572, 0x758d, 0x3f7c, 0x75c8, 0x75dc, 0x3fc0, 0x764d, 0x3fd7, 0x7674, 0x3fdc, 0x767a, 0xe9b0, 0x7188, 0x5623, 0x8980, 0x5869, 0x401d, 0x7743, 0x4039, 0x6761, 0x4045, 0x35db, 0x7798, 0x406a, 0x406f, 0x5c5e, 0x77be, 0x77cb, 0x58f2, 0x7818, 0x70b9, 0x781c, 0x40a8, 0x7839, 0x7847, 0x7851, 0x7866, 0x8448, 0xe9cb, 0x7933, 0x6803, 0x7932, 0x4103, /* 0x99 */ 0x4109, 0x7991, 0x7999, 0x8fbb, 0x7a06, 0x8fbc, 0x4167, 0x7a91, 0x41b2, 0x7abc, 0x8279, 0x41c4, 0x7acf, 0x7adb, 0x41cf, 0x4e21, 0x7b62, 0x7b6c, 0x7b7b, 0x7c12, 0x7c1b, 0x4260, 0x427a, 0x7c7b, 0x7c9c, 0x428c, 0x7cb8, 0x4294, 0x7ced, 0x8f93, 0x70c0, 0xe9ef, 0x7dcf, 0x7dd4, 0x7dd0, 0x7dfd, 0x7fae, 0x7fb4, 0x729f, 0x4397, 0x8020, 0x8025, 0x7b39, 0x802e, 0x8031, 0x8054, 0x3dcc, 0x57b4, 0x70a0, 0x80b7, 0x80e9, 0x43ed, 0x810c, 0x732a, 0x810e, 0x8112, 0x7560, 0x8114, 0x4401, 0x3b39, 0x8156, 0x8159, 0x815a, 0x4413, 0x583a, 0x817c, 0x8184, 0x4425, 0x8193, 0x442d, 0x81a5, 0x57ef, 0x81c1, 0x81e4, 0x8254, 0x448f, 0x82a6, 0x8276, 0x82ca, 0x82d8, 0x82ff, 0x44b0, 0x8357, 0x9669, 0x698a, 0x8405, 0x70f5, 0x8464, 0x60e3, 0x8488, 0x4504, 0x84be, 0x84e1, 0x84f8, 0x8510, 0x8538, 0x8552, 0x453b, 0x856f, 0x8570, 0x85e0, 0x4577, 0x8672, 0x8692, 0x86b2, 0x86ef, 0x9645, 0x878b, 0x4606, 0x4617, 0x88ae, 0x88ff, 0x8924, 0x8947, 0x8991, 0xea43, 0x8a29, 0x8a38, 0x8a94, 0x8ab4, 0x8c51, 0x8cd4, 0x8cf2, 0x8d1c, 0x4798, 0x585f, 0x8dc3, 0x47ed, 0x4eee, 0x8e3a, 0x55d8, 0x5754, 0x8e71, 0x55f5, 0x8eb0, 0x4837, 0x8ece, 0x8ee2, 0x8ee4, 0x8eed, 0x8ef2, 0x8fb7, 0x8fc1, 0x8fca, 0x8fcc, 0x9033, 0x99c4, 0x48ad, 0x98e0, 0x9213, 0x491e, 0x9228, 0x9258, 0x926b, 0x92b1, 0x92ae, 0x92bf, /* 0x9a */ 0x92e3, 0x92eb, 0x92f3, 0x92f4, 0x92fd, 0x9343, 0x9384, 0x93ad, 0x4945, 0x4951, 0x9ebf, 0x9417, 0x5301, 0x941d, 0x942d, 0x943e, 0x496a, 0x9454, 0x9479, 0x952d, 0x95a2, 0x49a7, 0x95f4, 0x9633, 0x49e5, 0x67a0, 0x4a24, 0x9740, 0x4a35, 0x97b2, 0x97c2, 0x5654, 0x4ae4, 0x60e8, 0x98b9, 0x4b19, 0x98f1, 0x5844, 0x990e, 0x9919, 0x51b4, 0x991c, 0x9937, 0x9942, 0x995d, 0x9962, 0x4b70, 0x99c5, 0x4b9d, 0x9a3c, 0x9b0f, 0x7a83, 0x9b69, 0x9b81, 0x9bdd, 0x9bf1, 0x9bf4, 0x4c6d, 0x9c20, 0x376f, 0xeaa9, 0x9d49, 0x9c3a, 0x9efe, 0x5650, 0x9d93, 0x9dbd, 0x9dc0, 0x9dfc, 0x94f6, 0x8fb6, 0x9e7b, 0x9eac, 0x9eb1, 0x9ebd, 0x9ec6, 0x94dc, 0x9ee2, 0x9ef1, 0x9ef8, 0x7ac8, 0x9f44, 0xeabf, 0xeac0, 0xeac1, 0x691a, 0x94c3, 0x59ac, 0xeac5, 0x5840, 0x94c1, 0x37b9, 0xeac9, 0xeaca, 0xeacb, 0xeacc, 0x5757, 0x7173, 0xeacf, 0xead0, 0xead1, 0x546a, 0xead3, 0xead4, 0x549e, 0xead6, 0xead7, 0xead8, 0xead9, 0xeada, 0x60e7, 0xeadc, 0x567a, 0xeade, 0xeadf, 0xeae0, 0xeae1, 0xeae2, 0xeae3, 0x6955, 0x9c2f, 0x87a5, 0xeae7, 0xeae8, 0xeae9, 0xeaea, 0xeaeb, 0xeaec, 0x5c20, 0xeaee, 0x5e0b, 0xeaf0, 0xeaf1, 0xeaf2, 0x671e, 0xeaf4, 0xeaf5, 0xeaf6, 0x3647, 0xeaf8, 0xeaf9, 0xeafa, 0xeafb, 0x5364, 0x84ad, 0xeafe, 0xeaff, 0xeb00, 0x8b81, 0xeb02, 0xeb03, 0xeb04, 0xeb05, 0x4e78, 0x70bb, 0xeb08, 0xeb09, /* 0x9b */ 0xeb0a, 0xeb0b, 0xeb0c, 0xeb0d, 0xeb0e, 0xeb0f, 0x62c3, 0xeb11, 0xeb12, 0x7198, 0x6855, 0xeb15, 0x69e9, 0x36c8, 0xeb18, 0xeb19, 0xeb1a, 0xeb1b, 0xeb1c, 0xeb1d, 0x82fd, 0xeb1f, 0xeb20, 0xeb21, 0x89a5, 0xeb23, 0x8fa0, 0xeb25, 0x97b8, 0xeb27, 0x9847, 0x9abd, 0xeb2a, 0xeb2b, 0xeb2c, 0xeb2d, 0xeb2e, 0xeb2f, 0xeb30, 0xeb31, 0xeb32, 0xeb33, 0xeb34, 0xeb35, 0xeb36, 0xeb37, 0xeb38, 0xeb39, 0x5fb1, 0x6648, 0x66bf, 0xeb3d, 0xeb3e, 0xeb3f, 0x7201, 0xeb41, 0x77d7, 0xeb43, 0xeb44, 0x7e87, 0xeb46, 0x58b5, 0x670e, 0x6918, 0xeb4a, 0xeb4b, 0xeb4c, 0xeb4d, 0xeb4e, 0xeb4f, 0xeb50, 0x48d0, 0x4ab8, 0xeb53, 0xeb54, 0xeb55, 0xeb56, 0xeb57, 0xeb58, 0xeb59, 0xeb5a, 0xeb5b, 0x51d2, 0xeb5d, 0x599f, 0xeb5f, 0x3bbe, 0xeb61, 0xeb62, 0xeb63, 0x5788, 0xeb65, 0x399b, 0xeb67, 0xeb68, 0xeb69, 0x3762, 0xeb6b, 0x8b5e, 0xeb6d, 0x99d6, 0xeb6f, 0xeb70, 0xeb71, 0x7209, 0xeb73, 0xeb74, 0x5965, 0xeb76, 0xeb77, 0xeb78, 0x8eda, 0xeb7a, 0x528f, 0x573f, 0x7171, 0xeb7e, 0xeb7f, 0xeb80, 0xeb81, 0x55bc, 0xeb83, 0xeb84, 0xeb85, 0x91d4, 0x3473, 0xeb88, 0xeb89, 0xeb8a, 0x4718, 0xeb8c, 0xeb8d, 0xeb8e, 0xeb8f, 0xeb90, 0x5066, 0x34fb, 0xeb93, 0x60de, 0xeb95, 0x477c, 0xeb97, 0xeb98, 0xeb99, 0xeb9a, 0xeb9b, 0x57a1, 0x7151, 0x6fb6, 0xeb9f, 0xeba0, 0x9056, 0xeba2, 0xeba3, 0x8b62, 0xeba5, 0xeba6, /* 0x9c */ 0x5d5b, 0xeba8, 0x8f36, 0xebaa, 0xebab, 0x8aea, 0xebad, 0xebae, 0xebaf, 0xebb0, 0x4bc0, 0xebb2, 0xebb3, 0xebb4, 0x9465, 0xebb6, 0x6195, 0x5a27, 0xebb9, 0x4fbb, 0x56b9, 0xebbc, 0xebbd, 0x4e6a, 0xebbf, 0x9656, 0x6d8f, 0xebc2, 0x3618, 0x8977, 0xebc5, 0xebc6, 0xebc7, 0xebc8, 0x71df, 0xebca, 0x7b42, 0xebcc, 0xebcd, 0xebce, 0x9104, 0xebd0, 0x7a45, 0x9df0, 0xebd3, 0x9a26, 0xebd5, 0x365f, 0xebd7, 0xebd8, 0x7983, 0xebda, 0xebdb, 0x5d2c, 0xebdd, 0x83cf, 0xebdf, 0x46d0, 0xebe1, 0x753b, 0x8865, 0xebe4, 0x58b6, 0x371c, 0xebe7, 0xebe8, 0xebe9, 0x3c54, 0xebeb, 0xebec, 0x9281, 0xebee, 0xebef, 0x9330, 0xebf1, 0xebf2, 0x6c39, 0x949f, 0xebf5, 0xebf6, 0x8827, 0x88f5, 0xebf9, 0xebfa, 0xebfb, 0x6eb8, 0xebfd, 0xebfe, 0x39a4, 0x36b9, 0x5c10, 0x79e3, 0x453f, 0x66b6, 0xec05, 0xec06, 0x8943, 0xec08, 0xec09, 0x56d6, 0x40df, 0xec0c, 0x39a1, 0xec0e, 0xec0f, 0xec10, 0x71ad, 0x8366, 0xec13, 0xec14, 0x5a67, 0x4cb7, 0xec17, 0xec18, 0xec19, 0xec1a, 0xec1b, 0xec1c, 0xec1d, 0x7b43, 0x797e, 0xec20, 0x6fb5, 0xec22, 0x6a03, 0xec24, 0x53a2, 0xec26, 0x93bf, 0x6836, 0x975d, 0xec2a, 0xec2b, 0xec2c, 0xec2d, 0xec2e, 0xec2f, 0x5d85, 0xec31, 0xec32, 0x5715, 0x9823, 0xec35, 0x5dab, 0xec37, 0x65be, 0x69d5, 0x53d2, 0xec3b, 0xec3c, 0x3c11, 0x6736, 0xec3f, 0xec40, 0xec41, 0xec42, 0xec43, /* 0x9d */ 0xec44, 0xec45, 0xec46, 0xec47, 0xec48, 0xec49, 0x35ca, 0xec4b, 0xec4c, 0x48fa, 0x63e6, 0xec4f, 0x7808, 0x9255, 0xec52, 0x43f2, 0xec54, 0x43df, 0xec56, 0xec57, 0xec58, 0x59f8, 0xec5a, 0x8f0b, 0xec5c, 0xec5d, 0x7b51, 0xec5f, 0xec60, 0x3df7, 0xec62, 0xec63, 0x8fd0, 0x728f, 0x568b, 0xec67, 0xec68, 0xec69, 0xec6a, 0xec6b, 0xec6c, 0xec6d, 0xec6e, 0xec6f, 0xec70, 0xec71, 0xec72, 0xec73, 0x7e9f, 0xec75, 0xec76, 0x4ca4, 0x9547, 0xec79, 0x71a2, 0xec7b, 0x4d91, 0x9012, 0xec7e, 0x4d9c, 0xec80, 0x8fbe, 0x55c1, 0x8fba, 0xec84, 0x8fb9, 0xec86, 0x4509, 0x7e7f, 0x6f56, 0x6ab1, 0x4eea, 0x34e4, 0xec8d, 0xec8e, 0x373a, 0x8e80, 0xec91, 0xec92, 0xec93, 0xec94, 0xec95, 0xec96, 0x3deb, 0xec98, 0xec99, 0xec9a, 0xec9b, 0x4e9a, 0xec9d, 0xec9e, 0x56bf, 0xeca0, 0x8e0e, 0x5b6d, 0xeca3, 0xeca4, 0x63de, 0x62d0, 0xeca7, 0xeca8, 0x6530, 0x562d, 0xecab, 0x541a, 0xecad, 0x3dc6, 0xecaf, 0x4c7d, 0x5622, 0x561e, 0x7f49, 0xecb4, 0x5975, 0xecb6, 0x8770, 0x4e1c, 0xecb9, 0xecba, 0xecbb, 0x8117, 0x9d5e, 0x8d18, 0x763b, 0x9c45, 0x764e, 0x77b9, 0x9345, 0x5432, 0x8148, 0x82f7, 0x5625, 0x8132, 0x8418, 0x80bd, 0x55ea, 0x7962, 0x5643, 0x5416, 0xeccf, 0x35ce, 0x5605, 0x55f1, 0x66f1, 0xecd4, 0x362d, 0x7534, 0x55f0, 0x55ba, 0x5497, 0x5572, 0xecdb, 0xecdc, 0x5ed0, 0xecde, 0xecdf, 0xece0, /* 0x9e */ 0xece1, 0x9eab, 0x7d5a, 0x55de, 0xece5, 0x629d, 0x976d, 0x5494, 0x8ccd, 0x71f6, 0x9176, 0x63fc, 0x63b9, 0x63fe, 0x5569, 0xecf0, 0x9c72, 0xecf2, 0x519a, 0x34df, 0xecf5, 0x51a7, 0x544d, 0x551e, 0x5513, 0x7666, 0x8e2d, 0xecfc, 0x75b1, 0x80b6, 0x8804, 0x8786, 0x88c7, 0x81b6, 0x841c, 0xed04, 0x44ec, 0x7304, 0xed07, 0x5b90, 0x830b, 0xed0a, 0x567b, 0xed0c, 0xed0d, 0xed0e, 0xed0f, 0xed10, 0xed11, 0x9170, 0xed13, 0x9208, 0xed15, 0xed16, 0xed17, 0xed18, 0x7266, 0xed1a, 0x474e, 0xed1c, 0xed1d, 0xed1e, 0x40fa, 0x9c5d, 0x651f, 0xed22, 0x48f3, 0xed24, 0xed25, 0xed26, 0xed27, 0x6062, 0xed29, 0xed2a, 0xed2b, 0xed2c, 0xed2d, 0x71a3, 0x7e8e, 0x9d50, 0x4e1a, 0x4e04, 0x3577, 0x5b0d, 0x6cb2, 0x5367, 0x36ac, 0x39dc, 0x537d, 0x36a5, 0xed3b, 0x589a, 0xed3d, 0x822d, 0x544b, 0x57aa, 0xed41, 0xed42, 0xed43, 0x3a52, 0xed45, 0x7374, 0xed47, 0x4d09, 0x9bed, 0xed4a, 0xed4b, 0x4c5b, 0xed4d, 0xed4e, 0xed4f, 0x845c, 0xed51, 0xed52, 0xed53, 0xed54, 0x632e, 0x7d25, 0xed57, 0xed58, 0x3a2a, 0x9008, 0x52cc, 0x3e74, 0x367a, 0x45e9, 0xed5f, 0x7640, 0x5af0, 0xed62, 0x787a, 0x47b6, 0x58a7, 0x40bf, 0x567c, 0x9b8b, 0x5d74, 0x7654, 0xed6b, 0x9e85, 0x4ce1, 0x75f9, 0x37fb, 0x6119, 0xed71, 0xed72, 0xed73, 0x565d, 0xed75, 0x57a7, 0xed77, 0xed78, 0x5234, 0xed7a, 0x35ad, 0x6c4a, 0x9d7c, /* 0x9f */ 0x7c56, 0x9b39, 0x57de, 0xed81, 0x5c53, 0x64d3, 0xed84, 0xed85, 0xed86, 0x86ad, 0xed88, 0xed89, 0xed8a, 0xed8b, 0xed8c, 0x51fe, 0xed8e, 0x5d8e, 0x9703, 0xed91, 0x9e81, 0x904c, 0x7b1f, 0x9b02, 0x5cd1, 0x7ba3, 0x6268, 0x6335, 0x9aff, 0x7bcf, 0x9b2a, 0x7c7e, 0x9b2e, 0x7c42, 0x7c86, 0x9c15, 0x7bfc, 0x9b09, 0x9f17, 0x9c1b, 0xeda6, 0x9f5a, 0x5573, 0x5bc3, 0x4ffd, 0x9e98, 0x4ff2, 0x5260, 0x3e06, 0x52d1, 0x5767, 0x5056, 0x59b7, 0x5e12, 0x97c8, 0x9dab, 0x8f5c, 0x5469, 0x97b4, 0x9940, 0x97ba, 0x532c, 0x6130, 0x692c, 0x53da, 0x9c0a, 0x9d02, 0x4c3b, 0x9641, 0x6980, 0x50a6, 0x7546, 0xedc6, 0x99da, 0x5273, 0xedc9, 0x9159, 0x9681, 0x915c, 0xedcd, 0x9151, 0xedcf, 0x637f, 0xedd1, 0x6aca, 0x5611, 0x918e, 0x757a, 0x6285, 0xedd7, 0x734f, 0x7c70, 0xedda, 0xeddb, 0xeddc, 0xeddd, 0x76d6, 0x9b9d, 0x4e2a, 0xede1, 0x83be, 0x8842, 0xede4, 0x5c4a, 0x69c0, 0x50ed, 0x577a, 0x521f, 0x5df5, 0x4ece, 0x6c31, 0xeded, 0x4f39, 0x549c, 0x54da, 0x529a, 0x8d82, 0x35fe, 0x5f0c, 0x35f3, 0xedf6, 0x6b52, 0x917c, 0x9fa5, 0x9b97, 0x982e, 0x98b4, 0x9aba, 0x9ea8, 0x9e84, 0x717a, 0x7b14, 0xee02, 0x6bfa, 0x8818, 0x7f78, 0xee06, 0x5620, 0xee08, 0x8e77, 0x9f53, 0xee0b, 0x8dd4, 0x8e4f, 0x9e1c, 0x8e01, 0x6282, 0xee11, 0x8e28, 0x8e75, 0x7ad3, 0xee15, 0x7a3e, 0x78d8, 0x6cea, 0x8a67, 0x7607, /* 0xa0 */ 0xee1b, 0x9f26, 0x6cce, 0x87d6, 0x75c3, 0xee20, 0x7853, 0xee22, 0x8d0c, 0x72e2, 0x7371, 0x8b2d, 0x7302, 0x74f1, 0x8ceb, 0xee2a, 0x862f, 0x5fba, 0x88a0, 0x44b7, 0xee2f, 0xee30, 0xee31, 0xee32, 0x8a7e, 0xee34, 0xee35, 0x60fd, 0x7667, 0x9ad7, 0x9d44, 0x936e, 0x9b8f, 0x87f5, 0xee3d, 0x880f, 0x8cf7, 0x732c, 0x9721, 0x9bb0, 0x35d6, 0x72b2, 0x4c07, 0x7c51, 0x994a, 0xee48, 0x6159, 0x4c04, 0x9e96, 0x617d, 0xee4d, 0x575f, 0x616f, 0x62a6, 0x6239, 0x62ce, 0x3a5c, 0x61e2, 0x53aa, 0xee56, 0x6364, 0x6802, 0x35d2, 0x5d57, 0xee5b, 0x8fda, 0xee5d, 0xee5e, 0x50d9, 0xee60, 0x7906, 0x5332, 0x9638, 0xee64, 0x4065, 0xee66, 0x77fe, 0xee68, 0x7cc2, 0xee6a, 0x7cda, 0x7a2d, 0x8066, 0x8063, 0x7d4d, 0x7505, 0x74f2, 0x8994, 0x821a, 0x670c, 0x8062, 0xee76, 0x805b, 0x74f0, 0x8103, 0x7724, 0x8989, 0xee7c, 0x7553, 0xee7e, 0x87a9, 0x87ce, 0x81c8, 0x878c, 0x8a49, 0x8cad, 0x8b43, 0x772b, 0x74f8, 0x84da, 0x3635, 0x69b2, 0x8da6, 0xee8c, 0x89a9, 0x7468, 0x6db9, 0x87c1, 0xee91, 0x74e7, 0x3ddb, 0x7176, 0x60a4, 0x619c, 0x3cd1, 0x7162, 0x6077, 0xee9a, 0x7f71, 0xee9c, 0x7250, 0x60e9, 0x4b7e, 0x5220, 0x3c18, 0xeea2, 0xeea3, 0xeea4, 0xeea5, 0xeea6, 0xeea7, 0xeea8, 0xeea9, 0xeeaa, 0x5cc1, 0xeeac, 0xeead, 0xeeae, 0xeeaf, 0xeeb0, 0xeeb1, 0x4562, 0x5b1f, 0xeeb4, 0x9f50, 0x9ea6, 0xeeb7, /* 0xa1 */ 0x3000, 0xff0c, 0x3001, 0x3002, 0xff0e, 0x2027, 0xff1b, 0xff1a, 0xff1f, 0xff01, 0xfe30, 0x2026, 0x2025, 0xfe50, 0xfe51, 0xfe52, 0x00b7, 0xfe54, 0xfe55, 0xfe56, 0xfe57, 0xff5c, 0x2013, 0xfe31, 0x2014, 0xfe33, 0x2574, 0xfe34, 0xfe4f, 0xff08, 0xff09, 0xfe35, 0xfe36, 0xff5b, 0xff5d, 0xfe37, 0xfe38, 0x3014, 0x3015, 0xfe39, 0xfe3a, 0x3010, 0x3011, 0xfe3b, 0xfe3c, 0x300a, 0x300b, 0xfe3d, 0xfe3e, 0x3008, 0x3009, 0xfe3f, 0xfe40, 0x300c, 0x300d, 0xfe41, 0xfe42, 0x300e, 0x300f, 0xfe43, 0xfe44, 0xfe59, 0xfe5a, 0xfe5b, 0xfe5c, 0xfe5d, 0xfe5e, 0x2018, 0x2019, 0x201c, 0x201d, 0x301d, 0x301e, 0x2035, 0x2032, 0xff03, 0xff06, 0xff0a, 0x203b, 0x00a7, 0x3003, 0x25cb, 0x25cf, 0x25b3, 0x25b2, 0x25ce, 0x2606, 0x2605, 0x25c7, 0x25c6, 0x25a1, 0x25a0, 0x25bd, 0x25bc, 0x32a3, 0x2105, 0x00af, 0xffe3, 0xff3f, 0x02cd, 0xfe49, 0xfe4a, 0xfe4d, 0xfe4e, 0xfe4b, 0xfe4c, 0xfe5f, 0xfe60, 0xfe61, 0xff0b, 0xff0d, 0x00d7, 0x00f7, 0x00b1, 0x221a, 0xff1c, 0xff1e, 0xff1d, 0x2266, 0x2267, 0x2260, 0x221e, 0x2252, 0x2261, 0xfe62, 0xfe63, 0xfe64, 0xfe65, 0xfe66, 0xff5e, 0x2229, 0x222a, 0x22a5, 0x2220, 0x221f, 0x22bf, 0x33d2, 0x33d1, 0x222b, 0x222e, 0x2235, 0x2234, 0x2640, 0x2642, 0x2295, 0x2299, 0x2191, 0x2193, 0x2190, 0x2192, 0x2196, 0x2197, 0x2199, 0x2198, 0x2225, 0x2223, 0xff0f, /* 0xa2 */ 0xff3c, 0x2215, 0xfe68, 0xff04, 0xffe5, 0x3012, 0xffe0, 0xffe1, 0xff05, 0xff20, 0x2103, 0x2109, 0xfe69, 0xfe6a, 0xfe6b, 0x33d5, 0x339c, 0x339d, 0x339e, 0x33ce, 0x33a1, 0x338e, 0x338f, 0x33c4, 0x00b0, 0x5159, 0x515b, 0x515e, 0x515d, 0x5161, 0x5163, 0x55e7, 0x74e9, 0x7cce, 0x2581, 0x2582, 0x2583, 0x2584, 0x2585, 0x2586, 0x2587, 0x2588, 0x258f, 0x258e, 0x258d, 0x258c, 0x258b, 0x258a, 0x2589, 0x253c, 0x2534, 0x252c, 0x2524, 0x251c, 0x2594, 0x2500, 0x2502, 0x2595, 0x250c, 0x2510, 0x2514, 0x2518, 0x256d, 0x256e, 0x2570, 0x256f, 0x2550, 0x255e, 0x256a, 0x2561, 0x25e2, 0x25e3, 0x25e5, 0x25e4, 0x2571, 0x2572, 0x2573, 0xff10, 0xff11, 0xff12, 0xff13, 0xff14, 0xff15, 0xff16, 0xff17, 0xff18, 0xff19, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, 0x3021, 0x3022, 0x3023, 0x3024, 0x3025, 0x3026, 0x3027, 0x3028, 0x3029, 0x5341, 0x5344, 0x5345, 0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, 0xff28, 0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30, 0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38, 0xff39, 0xff3a, 0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, /* 0xa3 */ 0xff57, 0xff58, 0xff59, 0xff5a, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, 0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, 0x3105, 0x3106, 0x3107, 0x3108, 0x3109, 0x310a, 0x310b, 0x310c, 0x310d, 0x310e, 0x310f, 0x3110, 0x3111, 0x3112, 0x3113, 0x3114, 0x3115, 0x3116, 0x3117, 0x3118, 0x3119, 0x311a, 0x311b, 0x311c, 0x311d, 0x311e, 0x311f, 0x3120, 0x3121, 0x3122, 0x3123, 0x3124, 0x3125, 0x3126, 0x3127, 0x3128, 0x3129, 0x02d9, 0x02c9, 0x02ca, 0x02c7, 0x02cb, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0xa4 */ 0x4e00, 0x4e59, 0x4e01, 0x4e03, 0x4e43, 0x4e5d, 0x4e86, 0x4e8c, 0x4eba, 0x513f, 0x5165, 0x516b, 0x51e0, 0x5200, 0x5201, 0x529b, 0x5315, 0x5341, 0x535c, 0x53c8, 0x4e09, 0x4e0b, 0x4e08, 0x4e0a, 0x4e2b, 0x4e38, 0x51e1, 0x4e45, 0x4e48, 0x4e5f, 0x4e5e, 0x4e8e, 0x4ea1, 0x5140, 0x5203, 0x52fa, 0x5343, 0x53c9, 0x53e3, 0x571f, 0x58eb, 0x5915, 0x5927, 0x5973, 0x5b50, 0x5b51, 0x5b53, 0x5bf8, 0x5c0f, 0x5c22, 0x5c38, 0x5c71, 0x5ddd, 0x5de5, 0x5df1, 0x5df2, 0x5df3, 0x5dfe, 0x5e72, 0x5efe, 0x5f0b, 0x5f13, 0x624d, 0x4e11, 0x4e10, 0x4e0d, 0x4e2d, 0x4e30, 0x4e39, 0x4e4b, 0x5c39, 0x4e88, 0x4e91, 0x4e95, 0x4e92, 0x4e94, 0x4ea2, 0x4ec1, 0x4ec0, 0x4ec3, 0x4ec6, 0x4ec7, 0x4ecd, 0x4eca, 0x4ecb, 0x4ec4, 0x5143, 0x5141, 0x5167, 0x516d, 0x516e, 0x516c, 0x5197, 0x51f6, 0x5206, 0x5207, 0x5208, 0x52fb, 0x52fe, 0x52ff, 0x5316, 0x5339, 0x5348, 0x5347, 0x5345, 0x535e, 0x5384, 0x53cb, 0x53ca, 0x53cd, 0x58ec, 0x5929, 0x592b, 0x592a, 0x592d, 0x5b54, 0x5c11, 0x5c24, 0x5c3a, 0x5c6f, 0x5df4, 0x5e7b, 0x5eff, 0x5f14, 0x5f15, 0x5fc3, 0x6208, 0x6236, 0x624b, 0x624e, 0x652f, 0x6587, 0x6597, 0x65a4, 0x65b9, 0x65e5, 0x66f0, 0x6708, 0x6728, 0x6b20, 0x6b62, 0x6b79, 0x6bcb, 0x6bd4, 0x6bdb, 0x6c0f, 0x6c34, 0x706b, 0x722a, 0x7236, 0x723b, 0x7247, 0x7259, 0x725b, 0x72ac, 0x738b, 0x4e19, /* 0xa5 */ 0x4e16, 0x4e15, 0x4e14, 0x4e18, 0x4e3b, 0x4e4d, 0x4e4f, 0x4e4e, 0x4ee5, 0x4ed8, 0x4ed4, 0x4ed5, 0x4ed6, 0x4ed7, 0x4ee3, 0x4ee4, 0x4ed9, 0x4ede, 0x5145, 0x5144, 0x5189, 0x518a, 0x51ac, 0x51f9, 0x51fa, 0x51f8, 0x520a, 0x52a0, 0x529f, 0x5305, 0x5306, 0x5317, 0x531d, 0x4edf, 0x534a, 0x5349, 0x5361, 0x5360, 0x536f, 0x536e, 0x53bb, 0x53ef, 0x53e4, 0x53f3, 0x53ec, 0x53ee, 0x53e9, 0x53e8, 0x53fc, 0x53f8, 0x53f5, 0x53eb, 0x53e6, 0x53ea, 0x53f2, 0x53f1, 0x53f0, 0x53e5, 0x53ed, 0x53fb, 0x56db, 0x56da, 0x5916, 0x592e, 0x5931, 0x5974, 0x5976, 0x5b55, 0x5b83, 0x5c3c, 0x5de8, 0x5de7, 0x5de6, 0x5e02, 0x5e03, 0x5e73, 0x5e7c, 0x5f01, 0x5f18, 0x5f17, 0x5fc5, 0x620a, 0x6253, 0x6254, 0x6252, 0x6251, 0x65a5, 0x65e6, 0x672e, 0x672c, 0x672a, 0x672b, 0x672d, 0x6b63, 0x6bcd, 0x6c11, 0x6c10, 0x6c38, 0x6c41, 0x6c40, 0x6c3e, 0x72af, 0x7384, 0x7389, 0x74dc, 0x74e6, 0x7518, 0x751f, 0x7528, 0x7529, 0x7530, 0x7531, 0x7532, 0x7533, 0x758b, 0x767d, 0x76ae, 0x76bf, 0x76ee, 0x77db, 0x77e2, 0x77f3, 0x793a, 0x79be, 0x7a74, 0x7acb, 0x4e1e, 0x4e1f, 0x4e52, 0x4e53, 0x4e69, 0x4e99, 0x4ea4, 0x4ea6, 0x4ea5, 0x4eff, 0x4f09, 0x4f19, 0x4f0a, 0x4f15, 0x4f0d, 0x4f10, 0x4f11, 0x4f0f, 0x4ef2, 0x4ef6, 0x4efb, 0x4ef0, 0x4ef3, 0x4efd, 0x4f01, 0x4f0b, 0x5149, 0x5147, 0x5146, 0x5148, 0x5168, /* 0xa6 */ 0x5171, 0x518d, 0x51b0, 0x5217, 0x5211, 0x5212, 0x520e, 0x5216, 0x52a3, 0x5308, 0x5321, 0x5320, 0x5370, 0x5371, 0x5409, 0x540f, 0x540c, 0x540a, 0x5410, 0x5401, 0x540b, 0x5404, 0x5411, 0x540d, 0x5408, 0x5403, 0x540e, 0x5406, 0x5412, 0x56e0, 0x56de, 0x56dd, 0x5733, 0x5730, 0x5728, 0x572d, 0x572c, 0x572f, 0x5729, 0x5919, 0x591a, 0x5937, 0x5938, 0x5984, 0x5978, 0x5983, 0x597d, 0x5979, 0x5982, 0x5981, 0x5b57, 0x5b58, 0x5b87, 0x5b88, 0x5b85, 0x5b89, 0x5bfa, 0x5c16, 0x5c79, 0x5dde, 0x5e06, 0x5e76, 0x5e74, 0x5f0f, 0x5f1b, 0x5fd9, 0x5fd6, 0x620e, 0x620c, 0x620d, 0x6210, 0x6263, 0x625b, 0x6258, 0x6536, 0x65e9, 0x65e8, 0x65ec, 0x65ed, 0x66f2, 0x66f3, 0x6709, 0x673d, 0x6734, 0x6731, 0x6735, 0x6b21, 0x6b64, 0x6b7b, 0x6c16, 0x6c5d, 0x6c57, 0x6c59, 0x6c5f, 0x6c60, 0x6c50, 0x6c55, 0x6c61, 0x6c5b, 0x6c4d, 0x6c4e, 0x7070, 0x725f, 0x725d, 0x767e, 0x7af9, 0x7c73, 0x7cf8, 0x7f36, 0x7f8a, 0x7fbd, 0x8001, 0x8003, 0x800c, 0x8012, 0x8033, 0x807f, 0x8089, 0x808b, 0x808c, 0x81e3, 0x81ea, 0x81f3, 0x81fc, 0x820c, 0x821b, 0x821f, 0x826e, 0x8272, 0x827e, 0x866b, 0x8840, 0x884c, 0x8863, 0x897f, 0x9621, 0x4e32, 0x4ea8, 0x4f4d, 0x4f4f, 0x4f47, 0x4f57, 0x4f5e, 0x4f34, 0x4f5b, 0x4f55, 0x4f30, 0x4f50, 0x4f51, 0x4f3d, 0x4f3a, 0x4f38, 0x4f43, 0x4f54, 0x4f3c, 0x4f46, 0x4f63, /* 0xa7 */ 0x4f5c, 0x4f60, 0x4f2f, 0x4f4e, 0x4f36, 0x4f59, 0x4f5d, 0x4f48, 0x4f5a, 0x514c, 0x514b, 0x514d, 0x5175, 0x51b6, 0x51b7, 0x5225, 0x5224, 0x5229, 0x522a, 0x5228, 0x52ab, 0x52a9, 0x52aa, 0x52ac, 0x5323, 0x5373, 0x5375, 0x541d, 0x542d, 0x541e, 0x543e, 0x5426, 0x544e, 0x5427, 0x5446, 0x5443, 0x5433, 0x5448, 0x5442, 0x541b, 0x5429, 0x544a, 0x5439, 0x543b, 0x5438, 0x542e, 0x5435, 0x5436, 0x5420, 0x543c, 0x5440, 0x5431, 0x542b, 0x541f, 0x542c, 0x56ea, 0x56f0, 0x56e4, 0x56eb, 0x574a, 0x5751, 0x5740, 0x574d, 0x5747, 0x574e, 0x573e, 0x5750, 0x574f, 0x573b, 0x58ef, 0x593e, 0x599d, 0x5992, 0x59a8, 0x599e, 0x59a3, 0x5999, 0x5996, 0x598d, 0x59a4, 0x5993, 0x598a, 0x59a5, 0x5b5d, 0x5b5c, 0x5b5a, 0x5b5b, 0x5b8c, 0x5b8b, 0x5b8f, 0x5c2c, 0x5c40, 0x5c41, 0x5c3f, 0x5c3e, 0x5c90, 0x5c91, 0x5c94, 0x5c8c, 0x5deb, 0x5e0c, 0x5e8f, 0x5e87, 0x5e8a, 0x5ef7, 0x5f04, 0x5f1f, 0x5f64, 0x5f62, 0x5f77, 0x5f79, 0x5fd8, 0x5fcc, 0x5fd7, 0x5fcd, 0x5ff1, 0x5feb, 0x5ff8, 0x5fea, 0x6212, 0x6211, 0x6284, 0x6297, 0x6296, 0x6280, 0x6276, 0x6289, 0x626d, 0x628a, 0x627c, 0x627e, 0x6279, 0x6273, 0x6292, 0x626f, 0x6298, 0x626e, 0x6295, 0x6293, 0x6291, 0x6286, 0x6539, 0x653b, 0x6538, 0x65f1, 0x66f4, 0x675f, 0x674e, 0x674f, 0x6750, 0x6751, 0x675c, 0x6756, 0x675e, 0x6749, 0x6746, 0x6760, /* 0xa8 */ 0x6753, 0x6757, 0x6b65, 0x6bcf, 0x6c42, 0x6c5e, 0x6c99, 0x6c81, 0x6c88, 0x6c89, 0x6c85, 0x6c9b, 0x6c6a, 0x6c7a, 0x6c90, 0x6c70, 0x6c8c, 0x6c68, 0x6c96, 0x6c92, 0x6c7d, 0x6c83, 0x6c72, 0x6c7e, 0x6c74, 0x6c86, 0x6c76, 0x6c8d, 0x6c94, 0x6c98, 0x6c82, 0x7076, 0x707c, 0x707d, 0x7078, 0x7262, 0x7261, 0x7260, 0x72c4, 0x72c2, 0x7396, 0x752c, 0x752b, 0x7537, 0x7538, 0x7682, 0x76ef, 0x77e3, 0x79c1, 0x79c0, 0x79bf, 0x7a76, 0x7cfb, 0x7f55, 0x8096, 0x8093, 0x809d, 0x8098, 0x809b, 0x809a, 0x80b2, 0x826f, 0x8292, 0x828b, 0x828d, 0x898b, 0x89d2, 0x8a00, 0x8c37, 0x8c46, 0x8c55, 0x8c9d, 0x8d64, 0x8d70, 0x8db3, 0x8eab, 0x8eca, 0x8f9b, 0x8fb0, 0x8fc2, 0x8fc6, 0x8fc5, 0x8fc4, 0x5de1, 0x9091, 0x90a2, 0x90aa, 0x90a6, 0x90a3, 0x9149, 0x91c6, 0x91cc, 0x9632, 0x962e, 0x9631, 0x962a, 0x962c, 0x4e26, 0x4e56, 0x4e73, 0x4e8b, 0x4e9b, 0x4e9e, 0x4eab, 0x4eac, 0x4f6f, 0x4f9d, 0x4f8d, 0x4f73, 0x4f7f, 0x4f6c, 0x4f9b, 0x4f8b, 0x4f86, 0x4f83, 0x4f70, 0x4f75, 0x4f88, 0x4f69, 0x4f7b, 0x4f96, 0x4f7e, 0x4f8f, 0x4f91, 0x4f7a, 0x5154, 0x5152, 0x5155, 0x5169, 0x5177, 0x5176, 0x5178, 0x51bd, 0x51fd, 0x523b, 0x5238, 0x5237, 0x523a, 0x5230, 0x522e, 0x5236, 0x5241, 0x52be, 0x52bb, 0x5352, 0x5354, 0x5353, 0x5351, 0x5366, 0x5377, 0x5378, 0x5379, 0x53d6, 0x53d4, 0x53d7, 0x5473, 0x5475, /* 0xa9 */ 0x5496, 0x5478, 0x5495, 0x5480, 0x547b, 0x5477, 0x5484, 0x5492, 0x5486, 0x547c, 0x5490, 0x5471, 0x5476, 0x548c, 0x549a, 0x5462, 0x5468, 0x548b, 0x547d, 0x548e, 0x56fa, 0x5783, 0x5777, 0x576a, 0x5769, 0x5761, 0x5766, 0x5764, 0x577c, 0x591c, 0x5949, 0x5947, 0x5948, 0x5944, 0x5954, 0x59be, 0x59bb, 0x59d4, 0x59b9, 0x59ae, 0x59d1, 0x59c6, 0x59d0, 0x59cd, 0x59cb, 0x59d3, 0x59ca, 0x59af, 0x59b3, 0x59d2, 0x59c5, 0x5b5f, 0x5b64, 0x5b63, 0x5b97, 0x5b9a, 0x5b98, 0x5b9c, 0x5b99, 0x5b9b, 0x5c1a, 0x5c48, 0x5c45, 0x5c46, 0x5cb7, 0x5ca1, 0x5cb8, 0x5ca9, 0x5cab, 0x5cb1, 0x5cb3, 0x5e18, 0x5e1a, 0x5e16, 0x5e15, 0x5e1b, 0x5e11, 0x5e78, 0x5e9a, 0x5e97, 0x5e9c, 0x5e95, 0x5e96, 0x5ef6, 0x5f26, 0x5f27, 0x5f29, 0x5f80, 0x5f81, 0x5f7f, 0x5f7c, 0x5fdd, 0x5fe0, 0x5ffd, 0x5ff5, 0x5fff, 0x600f, 0x6014, 0x602f, 0x6035, 0x6016, 0x602a, 0x6015, 0x6021, 0x6027, 0x6029, 0x602b, 0x601b, 0x6216, 0x6215, 0x623f, 0x623e, 0x6240, 0x627f, 0x62c9, 0x62cc, 0x62c4, 0x62bf, 0x62c2, 0x62b9, 0x62d2, 0x62db, 0x62ab, 0x62d3, 0x62d4, 0x62cb, 0x62c8, 0x62a8, 0x62bd, 0x62bc, 0x62d0, 0x62d9, 0x62c7, 0x62cd, 0x62b5, 0x62da, 0x62b1, 0x62d8, 0x62d6, 0x62d7, 0x62c6, 0x62ac, 0x62ce, 0x653e, 0x65a7, 0x65bc, 0x65fa, 0x6614, 0x6613, 0x660c, 0x6606, 0x6602, 0x660e, 0x6600, 0x660f, 0x6615, 0x660a, /* 0xaa */ 0x6607, 0x670d, 0x670b, 0x676d, 0x678b, 0x6795, 0x6771, 0x679c, 0x6773, 0x6777, 0x6787, 0x679d, 0x6797, 0x676f, 0x6770, 0x677f, 0x6789, 0x677e, 0x6790, 0x6775, 0x679a, 0x6793, 0x677c, 0x676a, 0x6772, 0x6b23, 0x6b66, 0x6b67, 0x6b7f, 0x6c13, 0x6c1b, 0x6ce3, 0x6ce8, 0x6cf3, 0x6cb1, 0x6ccc, 0x6ce5, 0x6cb3, 0x6cbd, 0x6cbe, 0x6cbc, 0x6ce2, 0x6cab, 0x6cd5, 0x6cd3, 0x6cb8, 0x6cc4, 0x6cb9, 0x6cc1, 0x6cae, 0x6cd7, 0x6cc5, 0x6cf1, 0x6cbf, 0x6cbb, 0x6ce1, 0x6cdb, 0x6cca, 0x6cac, 0x6cef, 0x6cdc, 0x6cd6, 0x6ce0, 0x7095, 0x708e, 0x7092, 0x708a, 0x7099, 0x722c, 0x722d, 0x7238, 0x7248, 0x7267, 0x7269, 0x72c0, 0x72ce, 0x72d9, 0x72d7, 0x72d0, 0x73a9, 0x73a8, 0x739f, 0x73ab, 0x73a5, 0x753d, 0x759d, 0x7599, 0x759a, 0x7684, 0x76c2, 0x76f2, 0x76f4, 0x77e5, 0x77fd, 0x793e, 0x7940, 0x7941, 0x79c9, 0x79c8, 0x7a7a, 0x7a79, 0x7afa, 0x7cfe, 0x7f54, 0x7f8c, 0x7f8b, 0x8005, 0x80ba, 0x80a5, 0x80a2, 0x80b1, 0x80a1, 0x80ab, 0x80a9, 0x80b4, 0x80aa, 0x80af, 0x81e5, 0x81fe, 0x820d, 0x82b3, 0x829d, 0x8299, 0x82ad, 0x82bd, 0x829f, 0x82b9, 0x82b1, 0x82ac, 0x82a5, 0x82af, 0x82b8, 0x82a3, 0x82b0, 0x82be, 0x82b7, 0x864e, 0x8671, 0x521d, 0x8868, 0x8ecb, 0x8fce, 0x8fd4, 0x8fd1, 0x90b5, 0x90b8, 0x90b1, 0x90b6, 0x91c7, 0x91d1, 0x9577, 0x9580, 0x961c, 0x9640, 0x963f, 0x963b, 0x9644, /* 0xab */ 0x9642, 0x96b9, 0x96e8, 0x9752, 0x975e, 0x4e9f, 0x4ead, 0x4eae, 0x4fe1, 0x4fb5, 0x4faf, 0x4fbf, 0x4fe0, 0x4fd1, 0x4fcf, 0x4fdd, 0x4fc3, 0x4fb6, 0x4fd8, 0x4fdf, 0x4fca, 0x4fd7, 0x4fae, 0x4fd0, 0x4fc4, 0x4fc2, 0x4fda, 0x4fce, 0x4fde, 0x4fb7, 0x5157, 0x5192, 0x5191, 0x51a0, 0x524e, 0x5243, 0x524a, 0x524d, 0x524c, 0x524b, 0x5247, 0x52c7, 0x52c9, 0x52c3, 0x52c1, 0x530d, 0x5357, 0x537b, 0x539a, 0x53db, 0x54ac, 0x54c0, 0x54a8, 0x54ce, 0x54c9, 0x54b8, 0x54a6, 0x54b3, 0x54c7, 0x54c2, 0x54bd, 0x54aa, 0x54c1, 0x54c4, 0x54c8, 0x54af, 0x54ab, 0x54b1, 0x54bb, 0x54a9, 0x54a7, 0x54bf, 0x56ff, 0x5782, 0x578b, 0x57a0, 0x57a3, 0x57a2, 0x57ce, 0x57ae, 0x5793, 0x5955, 0x5951, 0x594f, 0x594e, 0x5950, 0x59dc, 0x59d8, 0x59ff, 0x59e3, 0x59e8, 0x5a03, 0x59e5, 0x59ea, 0x59da, 0x59e6, 0x5a01, 0x59fb, 0x5b69, 0x5ba3, 0x5ba6, 0x5ba4, 0x5ba2, 0x5ba5, 0x5c01, 0x5c4e, 0x5c4f, 0x5c4d, 0x5c4b, 0x5cd9, 0x5cd2, 0x5df7, 0x5e1d, 0x5e25, 0x5e1f, 0x5e7d, 0x5ea0, 0x5ea6, 0x5efa, 0x5f08, 0x5f2d, 0x5f65, 0x5f88, 0x5f85, 0x5f8a, 0x5f8b, 0x5f87, 0x5f8c, 0x5f89, 0x6012, 0x601d, 0x6020, 0x6025, 0x600e, 0x6028, 0x604d, 0x6070, 0x6068, 0x6062, 0x6046, 0x6043, 0x606c, 0x606b, 0x606a, 0x6064, 0x6241, 0x62dc, 0x6316, 0x6309, 0x62fc, 0x62ed, 0x6301, 0x62ee, 0x62fd, 0x6307, 0x62f1, 0x62f7, /* 0xac */ 0x62ef, 0x62ec, 0x62fe, 0x62f4, 0x6311, 0x6302, 0x653f, 0x6545, 0x65ab, 0x65bd, 0x65e2, 0x6625, 0x662d, 0x6620, 0x6627, 0x662f, 0x661f, 0x6628, 0x6631, 0x6624, 0x66f7, 0x67ff, 0x67d3, 0x67f1, 0x67d4, 0x67d0, 0x67ec, 0x67b6, 0x67af, 0x67f5, 0x67e9, 0x67ef, 0x67c4, 0x67d1, 0x67b4, 0x67da, 0x67e5, 0x67b8, 0x67cf, 0x67de, 0x67f3, 0x67b0, 0x67d9, 0x67e2, 0x67dd, 0x67d2, 0x6b6a, 0x6b83, 0x6b86, 0x6bb5, 0x6bd2, 0x6bd7, 0x6c1f, 0x6cc9, 0x6d0b, 0x6d32, 0x6d2a, 0x6d41, 0x6d25, 0x6d0c, 0x6d31, 0x6d1e, 0x6d17, 0x6d3b, 0x6d3d, 0x6d3e, 0x6d36, 0x6d1b, 0x6cf5, 0x6d39, 0x6d27, 0x6d38, 0x6d29, 0x6d2e, 0x6d35, 0x6d0e, 0x6d2b, 0x70ab, 0x70ba, 0x70b3, 0x70ac, 0x70af, 0x70ad, 0x70b8, 0x70ae, 0x70a4, 0x7230, 0x7272, 0x726f, 0x7274, 0x72e9, 0x72e0, 0x72e1, 0x73b7, 0x73ca, 0x73bb, 0x73b2, 0x73cd, 0x73c0, 0x73b3, 0x751a, 0x752d, 0x754f, 0x754c, 0x754e, 0x754b, 0x75ab, 0x75a4, 0x75a5, 0x75a2, 0x75a3, 0x7678, 0x7686, 0x7687, 0x7688, 0x76c8, 0x76c6, 0x76c3, 0x76c5, 0x7701, 0x76f9, 0x76f8, 0x7709, 0x770b, 0x76fe, 0x76fc, 0x7707, 0x77dc, 0x7802, 0x7814, 0x780c, 0x780d, 0x7946, 0x7949, 0x7948, 0x7947, 0x79b9, 0x79ba, 0x79d1, 0x79d2, 0x79cb, 0x7a7f, 0x7a81, 0x7aff, 0x7afd, 0x7c7d, 0x7d02, 0x7d05, 0x7d00, 0x7d09, 0x7d07, 0x7d04, 0x7d06, 0x7f38, 0x7f8e, 0x7fbf, 0x8004, /* 0xad */ 0x8010, 0x800d, 0x8011, 0x8036, 0x80d6, 0x80e5, 0x80da, 0x80c3, 0x80c4, 0x80cc, 0x80e1, 0x80db, 0x80ce, 0x80de, 0x80e4, 0x80dd, 0x81f4, 0x8222, 0x82e7, 0x8303, 0x8305, 0x82e3, 0x82db, 0x82e6, 0x8304, 0x82e5, 0x8302, 0x8309, 0x82d2, 0x82d7, 0x82f1, 0x8301, 0x82dc, 0x82d4, 0x82d1, 0x82de, 0x82d3, 0x82df, 0x82ef, 0x8306, 0x8650, 0x8679, 0x867b, 0x867a, 0x884d, 0x886b, 0x8981, 0x89d4, 0x8a08, 0x8a02, 0x8a03, 0x8c9e, 0x8ca0, 0x8d74, 0x8d73, 0x8db4, 0x8ecd, 0x8ecc, 0x8ff0, 0x8fe6, 0x8fe2, 0x8fea, 0x8fe5, 0x8fed, 0x8feb, 0x8fe4, 0x8fe8, 0x90ca, 0x90ce, 0x90c1, 0x90c3, 0x914b, 0x914a, 0x91cd, 0x9582, 0x9650, 0x964b, 0x964c, 0x964d, 0x9762, 0x9769, 0x97cb, 0x97ed, 0x97f3, 0x9801, 0x98a8, 0x98db, 0x98df, 0x9996, 0x9999, 0x4e58, 0x4eb3, 0x500c, 0x500d, 0x5023, 0x4fef, 0x5026, 0x5025, 0x4ff8, 0x5029, 0x5016, 0x5006, 0x503c, 0x501f, 0x501a, 0x5012, 0x5011, 0x4ffa, 0x5000, 0x5014, 0x5028, 0x4ff1, 0x5021, 0x500b, 0x5019, 0x5018, 0x4ff3, 0x4fee, 0x502d, 0x502a, 0x4ffe, 0x502b, 0x5009, 0x517c, 0x51a4, 0x51a5, 0x51a2, 0x51cd, 0x51cc, 0x51c6, 0x51cb, 0x5256, 0x525c, 0x5254, 0x525b, 0x525d, 0x532a, 0x537f, 0x539f, 0x539d, 0x53df, 0x54e8, 0x5510, 0x5501, 0x5537, 0x54fc, 0x54e5, 0x54f2, 0x5506, 0x54fa, 0x5514, 0x54e9, 0x54ed, 0x54e1, 0x5509, 0x54ee, 0x54ea, /* 0xae */ 0x54e6, 0x5527, 0x5507, 0x54fd, 0x550f, 0x5703, 0x5704, 0x57c2, 0x57d4, 0x57cb, 0x57c3, 0x5809, 0x590f, 0x5957, 0x5958, 0x595a, 0x5a11, 0x5a18, 0x5a1c, 0x5a1f, 0x5a1b, 0x5a13, 0x59ec, 0x5a20, 0x5a23, 0x5a29, 0x5a25, 0x5a0c, 0x5a09, 0x5b6b, 0x5c58, 0x5bb0, 0x5bb3, 0x5bb6, 0x5bb4, 0x5bae, 0x5bb5, 0x5bb9, 0x5bb8, 0x5c04, 0x5c51, 0x5c55, 0x5c50, 0x5ced, 0x5cfd, 0x5cfb, 0x5cea, 0x5ce8, 0x5cf0, 0x5cf6, 0x5d01, 0x5cf4, 0x5dee, 0x5e2d, 0x5e2b, 0x5eab, 0x5ead, 0x5ea7, 0x5f31, 0x5f92, 0x5f91, 0x5f90, 0x6059, 0x6063, 0x6065, 0x6050, 0x6055, 0x606d, 0x6069, 0x606f, 0x6084, 0x609f, 0x609a, 0x608d, 0x6094, 0x608c, 0x6085, 0x6096, 0x6247, 0x62f3, 0x6308, 0x62ff, 0x634e, 0x633e, 0x632f, 0x6355, 0x6342, 0x6346, 0x634f, 0x6349, 0x633a, 0x6350, 0x633d, 0x632a, 0x632b, 0x6328, 0x634d, 0x634c, 0x6548, 0x6549, 0x6599, 0x65c1, 0x65c5, 0x6642, 0x6649, 0x664f, 0x6643, 0x6652, 0x664c, 0x6645, 0x6641, 0x66f8, 0x6714, 0x6715, 0x6717, 0x6821, 0x6838, 0x6848, 0x6846, 0x6853, 0x6839, 0x6842, 0x6854, 0x6829, 0x68b3, 0x6817, 0x684c, 0x6851, 0x683d, 0x67f4, 0x6850, 0x6840, 0x683c, 0x6843, 0x682a, 0x6845, 0x6813, 0x6818, 0x6841, 0x6b8a, 0x6b89, 0x6bb7, 0x6c23, 0x6c27, 0x6c28, 0x6c26, 0x6c24, 0x6cf0, 0x6d6a, 0x6d95, 0x6d88, 0x6d87, 0x6d66, 0x6d78, 0x6d77, 0x6d59, 0x6d93, /* 0xaf */ 0x6d6c, 0x6d89, 0x6d6e, 0x6d5a, 0x6d74, 0x6d69, 0x6d8c, 0x6d8a, 0x6d79, 0x6d85, 0x6d65, 0x6d94, 0x70ca, 0x70d8, 0x70e4, 0x70d9, 0x70c8, 0x70cf, 0x7239, 0x7279, 0x72fc, 0x72f9, 0x72fd, 0x72f8, 0x72f7, 0x7386, 0x73ed, 0x7409, 0x73ee, 0x73e0, 0x73ea, 0x73de, 0x7554, 0x755d, 0x755c, 0x755a, 0x7559, 0x75be, 0x75c5, 0x75c7, 0x75b2, 0x75b3, 0x75bd, 0x75bc, 0x75b9, 0x75c2, 0x75b8, 0x768b, 0x76b0, 0x76ca, 0x76cd, 0x76ce, 0x7729, 0x771f, 0x7720, 0x7728, 0x77e9, 0x7830, 0x7827, 0x7838, 0x781d, 0x7834, 0x7837, 0x7825, 0x782d, 0x7820, 0x781f, 0x7832, 0x7955, 0x7950, 0x7960, 0x795f, 0x7956, 0x795e, 0x795d, 0x7957, 0x795a, 0x79e4, 0x79e3, 0x79e7, 0x79df, 0x79e6, 0x79e9, 0x79d8, 0x7a84, 0x7a88, 0x7ad9, 0x7b06, 0x7b11, 0x7c89, 0x7d21, 0x7d17, 0x7d0b, 0x7d0a, 0x7d20, 0x7d22, 0x7d14, 0x7d10, 0x7d15, 0x7d1a, 0x7d1c, 0x7d0d, 0x7d19, 0x7d1b, 0x7f3a, 0x7f5f, 0x7f94, 0x7fc5, 0x7fc1, 0x8006, 0x8018, 0x8015, 0x8019, 0x8017, 0x803d, 0x803f, 0x80f1, 0x8102, 0x80f0, 0x8105, 0x80ed, 0x80f4, 0x8106, 0x80f8, 0x80f3, 0x8108, 0x80fd, 0x810a, 0x80fc, 0x80ef, 0x81ed, 0x81ec, 0x8200, 0x8210, 0x822a, 0x822b, 0x8228, 0x822c, 0x82bb, 0x832b, 0x8352, 0x8354, 0x834a, 0x8338, 0x8350, 0x8349, 0x8335, 0x8334, 0x834f, 0x8332, 0x8339, 0x8336, 0x8317, 0x8340, 0x8331, 0x8328, 0x8343, /* 0xb0 */ 0x8654, 0x868a, 0x86aa, 0x8693, 0x86a4, 0x86a9, 0x868c, 0x86a3, 0x869c, 0x8870, 0x8877, 0x8881, 0x8882, 0x887d, 0x8879, 0x8a18, 0x8a10, 0x8a0e, 0x8a0c, 0x8a15, 0x8a0a, 0x8a17, 0x8a13, 0x8a16, 0x8a0f, 0x8a11, 0x8c48, 0x8c7a, 0x8c79, 0x8ca1, 0x8ca2, 0x8d77, 0x8eac, 0x8ed2, 0x8ed4, 0x8ecf, 0x8fb1, 0x9001, 0x9006, 0x8ff7, 0x9000, 0x8ffa, 0x8ff4, 0x9003, 0x8ffd, 0x9005, 0x8ff8, 0x9095, 0x90e1, 0x90dd, 0x90e2, 0x9152, 0x914d, 0x914c, 0x91d8, 0x91dd, 0x91d7, 0x91dc, 0x91d9, 0x9583, 0x9662, 0x9663, 0x9661, 0x965b, 0x965d, 0x9664, 0x9658, 0x965e, 0x96bb, 0x98e2, 0x99ac, 0x9aa8, 0x9ad8, 0x9b25, 0x9b32, 0x9b3c, 0x4e7e, 0x507a, 0x507d, 0x505c, 0x5047, 0x5043, 0x504c, 0x505a, 0x5049, 0x5065, 0x5076, 0x504e, 0x5055, 0x5075, 0x5074, 0x5077, 0x504f, 0x500f, 0x506f, 0x506d, 0x515c, 0x5195, 0x51f0, 0x526a, 0x526f, 0x52d2, 0x52d9, 0x52d8, 0x52d5, 0x5310, 0x530f, 0x5319, 0x533f, 0x5340, 0x533e, 0x53c3, 0x66fc, 0x5546, 0x556a, 0x5566, 0x5544, 0x555e, 0x5561, 0x5543, 0x554a, 0x5531, 0x5556, 0x554f, 0x5555, 0x552f, 0x5564, 0x5538, 0x552e, 0x555c, 0x552c, 0x5563, 0x5533, 0x5541, 0x5557, 0x5708, 0x570b, 0x5709, 0x57df, 0x5805, 0x580a, 0x5806, 0x57e0, 0x57e4, 0x57fa, 0x5802, 0x5835, 0x57f7, 0x57f9, 0x5920, 0x5962, 0x5a36, 0x5a41, 0x5a49, 0x5a66, 0x5a6a, 0x5a40, /* 0xb1 */ 0x5a3c, 0x5a62, 0x5a5a, 0x5a46, 0x5a4a, 0x5b70, 0x5bc7, 0x5bc5, 0x5bc4, 0x5bc2, 0x5bbf, 0x5bc6, 0x5c09, 0x5c08, 0x5c07, 0x5c60, 0x5c5c, 0x5c5d, 0x5d07, 0x5d06, 0x5d0e, 0x5d1b, 0x5d16, 0x5d22, 0x5d11, 0x5d29, 0x5d14, 0x5d19, 0x5d24, 0x5d27, 0x5d17, 0x5de2, 0x5e38, 0x5e36, 0x5e33, 0x5e37, 0x5eb7, 0x5eb8, 0x5eb6, 0x5eb5, 0x5ebe, 0x5f35, 0x5f37, 0x5f57, 0x5f6c, 0x5f69, 0x5f6b, 0x5f97, 0x5f99, 0x5f9e, 0x5f98, 0x5fa1, 0x5fa0, 0x5f9c, 0x607f, 0x60a3, 0x6089, 0x60a0, 0x60a8, 0x60cb, 0x60b4, 0x60e6, 0x60bd, 0x60c5, 0x60bb, 0x60b5, 0x60dc, 0x60bc, 0x60d8, 0x60d5, 0x60c6, 0x60df, 0x60b8, 0x60da, 0x60c7, 0x621a, 0x621b, 0x6248, 0x63a0, 0x63a7, 0x6372, 0x6396, 0x63a2, 0x63a5, 0x6377, 0x6367, 0x6398, 0x63aa, 0x6371, 0x63a9, 0x6389, 0x6383, 0x639b, 0x636b, 0x63a8, 0x6384, 0x6388, 0x6399, 0x63a1, 0x63ac, 0x6392, 0x638f, 0x6380, 0x637b, 0x6369, 0x6368, 0x637a, 0x655d, 0x6556, 0x6551, 0x6559, 0x6557, 0x555f, 0x654f, 0x6558, 0x6555, 0x6554, 0x659c, 0x659b, 0x65ac, 0x65cf, 0x65cb, 0x65cc, 0x65ce, 0x665d, 0x665a, 0x6664, 0x6668, 0x6666, 0x665e, 0x66f9, 0x52d7, 0x671b, 0x6881, 0x68af, 0x68a2, 0x6893, 0x68b5, 0x687f, 0x6876, 0x68b1, 0x68a7, 0x6897, 0x68b0, 0x6883, 0x68c4, 0x68ad, 0x6886, 0x6885, 0x6894, 0x689d, 0x68a8, 0x689f, 0x68a1, 0x6882, 0x6b32, 0x6bba, /* 0xb2 */ 0x6beb, 0x6bec, 0x6c2b, 0x6d8e, 0x6dbc, 0x6df3, 0x6dd9, 0x6db2, 0x6de1, 0x6dcc, 0x6de4, 0x6dfb, 0x6dfa, 0x6e05, 0x6dc7, 0x6dcb, 0x6daf, 0x6dd1, 0x6dae, 0x6dde, 0x6df9, 0x6db8, 0x6df7, 0x6df5, 0x6dc5, 0x6dd2, 0x6e1a, 0x6db5, 0x6dda, 0x6deb, 0x6dd8, 0x6dea, 0x6df1, 0x6dee, 0x6de8, 0x6dc6, 0x6dc4, 0x6daa, 0x6dec, 0x6dbf, 0x6de6, 0x70f9, 0x7109, 0x710a, 0x70fd, 0x70ef, 0x723d, 0x727d, 0x7281, 0x731c, 0x731b, 0x7316, 0x7313, 0x7319, 0x7387, 0x7405, 0x740a, 0x7403, 0x7406, 0x73fe, 0x740d, 0x74e0, 0x74f6, 0x74f7, 0x751c, 0x7522, 0x7565, 0x7566, 0x7562, 0x7570, 0x758f, 0x75d4, 0x75d5, 0x75b5, 0x75ca, 0x75cd, 0x768e, 0x76d4, 0x76d2, 0x76db, 0x7737, 0x773e, 0x773c, 0x7736, 0x7738, 0x773a, 0x786b, 0x7843, 0x784e, 0x7965, 0x7968, 0x796d, 0x79fb, 0x7a92, 0x7a95, 0x7b20, 0x7b28, 0x7b1b, 0x7b2c, 0x7b26, 0x7b19, 0x7b1e, 0x7b2e, 0x7c92, 0x7c97, 0x7c95, 0x7d46, 0x7d43, 0x7d71, 0x7d2e, 0x7d39, 0x7d3c, 0x7d40, 0x7d30, 0x7d33, 0x7d44, 0x7d2f, 0x7d42, 0x7d32, 0x7d31, 0x7f3d, 0x7f9e, 0x7f9a, 0x7fcc, 0x7fce, 0x7fd2, 0x801c, 0x804a, 0x8046, 0x812f, 0x8116, 0x8123, 0x812b, 0x8129, 0x8130, 0x8124, 0x8202, 0x8235, 0x8237, 0x8236, 0x8239, 0x838e, 0x839e, 0x8398, 0x8378, 0x83a2, 0x8396, 0x83bd, 0x83ab, 0x8392, 0x838a, 0x8393, 0x8389, 0x83a0, 0x8377, 0x837b, 0x837c, /* 0xb3 */ 0x8386, 0x83a7, 0x8655, 0x5f6a, 0x86c7, 0x86c0, 0x86b6, 0x86c4, 0x86b5, 0x86c6, 0x86cb, 0x86b1, 0x86af, 0x86c9, 0x8853, 0x889e, 0x8888, 0x88ab, 0x8892, 0x8896, 0x888d, 0x888b, 0x8993, 0x898f, 0x8a2a, 0x8a1d, 0x8a23, 0x8a25, 0x8a31, 0x8a2d, 0x8a1f, 0x8a1b, 0x8a22, 0x8c49, 0x8c5a, 0x8ca9, 0x8cac, 0x8cab, 0x8ca8, 0x8caa, 0x8ca7, 0x8d67, 0x8d66, 0x8dbe, 0x8dba, 0x8edb, 0x8edf, 0x9019, 0x900d, 0x901a, 0x9017, 0x9023, 0x901f, 0x901d, 0x9010, 0x9015, 0x901e, 0x9020, 0x900f, 0x9022, 0x9016, 0x901b, 0x9014, 0x90e8, 0x90ed, 0x90fd, 0x9157, 0x91ce, 0x91f5, 0x91e6, 0x91e3, 0x91e7, 0x91ed, 0x91e9, 0x9589, 0x966a, 0x9675, 0x9673, 0x9678, 0x9670, 0x9674, 0x9676, 0x9677, 0x966c, 0x96c0, 0x96ea, 0x96e9, 0x7ae0, 0x7adf, 0x9802, 0x9803, 0x9b5a, 0x9ce5, 0x9e75, 0x9e7f, 0x9ea5, 0x9ebb, 0x50a2, 0x508d, 0x5085, 0x5099, 0x5091, 0x5080, 0x5096, 0x5098, 0x509a, 0x6700, 0x51f1, 0x5272, 0x5274, 0x5275, 0x5269, 0x52de, 0x52dd, 0x52db, 0x535a, 0x53a5, 0x557b, 0x5580, 0x55a7, 0x557c, 0x558a, 0x559d, 0x5598, 0x5582, 0x559c, 0x55aa, 0x5594, 0x5587, 0x558b, 0x5583, 0x55b3, 0x55ae, 0x559f, 0x553e, 0x55b2, 0x559a, 0x55bb, 0x55ac, 0x55b1, 0x557e, 0x5589, 0x55ab, 0x5599, 0x570d, 0x582f, 0x582a, 0x5834, 0x5824, 0x5830, 0x5831, 0x5821, 0x581d, 0x5820, 0x58f9, 0x58fa, 0x5960, /* 0xb4 */ 0x5a77, 0x5a9a, 0x5a7f, 0x5a92, 0x5a9b, 0x5aa7, 0x5b73, 0x5b71, 0x5bd2, 0x5bcc, 0x5bd3, 0x5bd0, 0x5c0a, 0x5c0b, 0x5c31, 0x5d4c, 0x5d50, 0x5d34, 0x5d47, 0x5dfd, 0x5e45, 0x5e3d, 0x5e40, 0x5e43, 0x5e7e, 0x5eca, 0x5ec1, 0x5ec2, 0x5ec4, 0x5f3c, 0x5f6d, 0x5fa9, 0x5faa, 0x5fa8, 0x60d1, 0x60e1, 0x60b2, 0x60b6, 0x60e0, 0x611c, 0x6123, 0x60fa, 0x6115, 0x60f0, 0x60fb, 0x60f4, 0x6168, 0x60f1, 0x610e, 0x60f6, 0x6109, 0x6100, 0x6112, 0x621f, 0x6249, 0x63a3, 0x638c, 0x63cf, 0x63c0, 0x63e9, 0x63c9, 0x63c6, 0x63cd, 0x63d2, 0x63e3, 0x63d0, 0x63e1, 0x63d6, 0x63ed, 0x63ee, 0x6376, 0x63f4, 0x63ea, 0x63db, 0x6452, 0x63da, 0x63f9, 0x655e, 0x6566, 0x6562, 0x6563, 0x6591, 0x6590, 0x65af, 0x666e, 0x6670, 0x6674, 0x6676, 0x666f, 0x6691, 0x667a, 0x667e, 0x6677, 0x66fe, 0x66ff, 0x671f, 0x671d, 0x68fa, 0x68d5, 0x68e0, 0x68d8, 0x68d7, 0x6905, 0x68df, 0x68f5, 0x68ee, 0x68e7, 0x68f9, 0x68d2, 0x68f2, 0x68e3, 0x68cb, 0x68cd, 0x690d, 0x6912, 0x690e, 0x68c9, 0x68da, 0x696e, 0x68fb, 0x6b3e, 0x6b3a, 0x6b3d, 0x6b98, 0x6b96, 0x6bbc, 0x6bef, 0x6c2e, 0x6c2f, 0x6c2c, 0x6e2f, 0x6e38, 0x6e54, 0x6e21, 0x6e32, 0x6e67, 0x6e4a, 0x6e20, 0x6e25, 0x6e23, 0x6e1b, 0x6e5b, 0x6e58, 0x6e24, 0x6e56, 0x6e6e, 0x6e2d, 0x6e26, 0x6e6f, 0x6e34, 0x6e4d, 0x6e3a, 0x6e2c, 0x6e43, 0x6e1d, 0x6e3e, 0x6ecb, /* 0xb5 */ 0x6e89, 0x6e19, 0x6e4e, 0x6e63, 0x6e44, 0x6e72, 0x6e69, 0x6e5f, 0x7119, 0x711a, 0x7126, 0x7130, 0x7121, 0x7136, 0x716e, 0x711c, 0x724c, 0x7284, 0x7280, 0x7336, 0x7325, 0x7334, 0x7329, 0x743a, 0x742a, 0x7433, 0x7422, 0x7425, 0x7435, 0x7436, 0x7434, 0x742f, 0x741b, 0x7426, 0x7428, 0x7525, 0x7526, 0x756b, 0x756a, 0x75e2, 0x75db, 0x75e3, 0x75d9, 0x75d8, 0x75de, 0x75e0, 0x767b, 0x767c, 0x7696, 0x7693, 0x76b4, 0x76dc, 0x774f, 0x77ed, 0x785d, 0x786c, 0x786f, 0x7a0d, 0x7a08, 0x7a0b, 0x7a05, 0x7a00, 0x7a98, 0x7a97, 0x7a96, 0x7ae5, 0x7ae3, 0x7b49, 0x7b56, 0x7b46, 0x7b50, 0x7b52, 0x7b54, 0x7b4d, 0x7b4b, 0x7b4f, 0x7b51, 0x7c9f, 0x7ca5, 0x7d5e, 0x7d50, 0x7d68, 0x7d55, 0x7d2b, 0x7d6e, 0x7d72, 0x7d61, 0x7d66, 0x7d62, 0x7d70, 0x7d73, 0x5584, 0x7fd4, 0x7fd5, 0x800b, 0x8052, 0x8085, 0x8155, 0x8154, 0x814b, 0x8151, 0x814e, 0x8139, 0x8146, 0x813e, 0x814c, 0x8153, 0x8174, 0x8212, 0x821c, 0x83e9, 0x8403, 0x83f8, 0x840d, 0x83e0, 0x83c5, 0x840b, 0x83c1, 0x83ef, 0x83f1, 0x83f4, 0x8457, 0x840a, 0x83f0, 0x840c, 0x83cc, 0x83fd, 0x83f2, 0x83ca, 0x8438, 0x840e, 0x8404, 0x83dc, 0x8407, 0x83d4, 0x83df, 0x865b, 0x86df, 0x86d9, 0x86ed, 0x86d4, 0x86db, 0x86e4, 0x86d0, 0x86de, 0x8857, 0x88c1, 0x88c2, 0x88b1, 0x8983, 0x8996, 0x8a3b, 0x8a60, 0x8a55, 0x8a5e, 0x8a3c, 0x8a41, /* 0xb6 */ 0x8a54, 0x8a5b, 0x8a50, 0x8a46, 0x8a34, 0x8a3a, 0x8a36, 0x8a56, 0x8c61, 0x8c82, 0x8caf, 0x8cbc, 0x8cb3, 0x8cbd, 0x8cc1, 0x8cbb, 0x8cc0, 0x8cb4, 0x8cb7, 0x8cb6, 0x8cbf, 0x8cb8, 0x8d8a, 0x8d85, 0x8d81, 0x8dce, 0x8ddd, 0x8dcb, 0x8dda, 0x8dd1, 0x8dcc, 0x8ddb, 0x8dc6, 0x8efb, 0x8ef8, 0x8efc, 0x8f9c, 0x902e, 0x9035, 0x9031, 0x9038, 0x9032, 0x9036, 0x9102, 0x90f5, 0x9109, 0x90fe, 0x9163, 0x9165, 0x91cf, 0x9214, 0x9215, 0x9223, 0x9209, 0x921e, 0x920d, 0x9210, 0x9207, 0x9211, 0x9594, 0x958f, 0x958b, 0x9591, 0x9593, 0x9592, 0x958e, 0x968a, 0x968e, 0x968b, 0x967d, 0x9685, 0x9686, 0x968d, 0x9672, 0x9684, 0x96c1, 0x96c5, 0x96c4, 0x96c6, 0x96c7, 0x96ef, 0x96f2, 0x97cc, 0x9805, 0x9806, 0x9808, 0x98e7, 0x98ea, 0x98ef, 0x98e9, 0x98f2, 0x98ed, 0x99ae, 0x99ad, 0x9ec3, 0x9ecd, 0x9ed1, 0x4e82, 0x50ad, 0x50b5, 0x50b2, 0x50b3, 0x50c5, 0x50be, 0x50ac, 0x50b7, 0x50bb, 0x50af, 0x50c7, 0x527f, 0x5277, 0x527d, 0x52df, 0x52e6, 0x52e4, 0x52e2, 0x52e3, 0x532f, 0x55df, 0x55e8, 0x55d3, 0x55e6, 0x55ce, 0x55dc, 0x55c7, 0x55d1, 0x55e3, 0x55e4, 0x55ef, 0x55da, 0x55e1, 0x55c5, 0x55c6, 0x55e5, 0x55c9, 0x5712, 0x5713, 0x585e, 0x5851, 0x5858, 0x5857, 0x585a, 0x5854, 0x586b, 0x584c, 0x586d, 0x584a, 0x5862, 0x5852, 0x584b, 0x5967, 0x5ac1, 0x5ac9, 0x5acc, 0x5abe, 0x5abd, 0x5abc, /* 0xb7 */ 0x5ab3, 0x5ac2, 0x5ab2, 0x5d69, 0x5d6f, 0x5e4c, 0x5e79, 0x5ec9, 0x5ec8, 0x5f12, 0x5f59, 0x5fac, 0x5fae, 0x611a, 0x610f, 0x6148, 0x611f, 0x60f3, 0x611b, 0x60f9, 0x6101, 0x6108, 0x614e, 0x614c, 0x6144, 0x614d, 0x613e, 0x6134, 0x6127, 0x610d, 0x6106, 0x6137, 0x6221, 0x6222, 0x6413, 0x643e, 0x641e, 0x642a, 0x642d, 0x643d, 0x642c, 0x640f, 0x641c, 0x6414, 0x640d, 0x6436, 0x6416, 0x6417, 0x6406, 0x656c, 0x659f, 0x65b0, 0x6697, 0x6689, 0x6687, 0x6688, 0x6696, 0x6684, 0x6698, 0x668d, 0x6703, 0x6994, 0x696d, 0x695a, 0x6977, 0x6960, 0x6954, 0x6975, 0x6930, 0x6982, 0x694a, 0x6968, 0x696b, 0x695e, 0x6953, 0x6979, 0x6986, 0x695d, 0x6963, 0x695b, 0x6b47, 0x6b72, 0x6bc0, 0x6bbf, 0x6bd3, 0x6bfd, 0x6ea2, 0x6eaf, 0x6ed3, 0x6eb6, 0x6ec2, 0x6e90, 0x6e9d, 0x6ec7, 0x6ec5, 0x6ea5, 0x6e98, 0x6ebc, 0x6eba, 0x6eab, 0x6ed1, 0x6e96, 0x6e9c, 0x6ec4, 0x6ed4, 0x6eaa, 0x6ea7, 0x6eb4, 0x714e, 0x7159, 0x7169, 0x7164, 0x7149, 0x7167, 0x715c, 0x716c, 0x7166, 0x714c, 0x7165, 0x715e, 0x7146, 0x7168, 0x7156, 0x723a, 0x7252, 0x7337, 0x7345, 0x733f, 0x733e, 0x746f, 0x745a, 0x7455, 0x745f, 0x745e, 0x7441, 0x743f, 0x7459, 0x745b, 0x745c, 0x7576, 0x7578, 0x7600, 0x75f0, 0x7601, 0x75f2, 0x75f1, 0x75fa, 0x75ff, 0x75f4, 0x75f3, 0x76de, 0x76df, 0x775b, 0x776b, 0x7766, 0x775e, 0x7763, /* 0xb8 */ 0x7779, 0x776a, 0x776c, 0x775c, 0x7765, 0x7768, 0x7762, 0x77ee, 0x788e, 0x78b0, 0x7897, 0x7898, 0x788c, 0x7889, 0x787c, 0x7891, 0x7893, 0x787f, 0x797a, 0x797f, 0x7981, 0x842c, 0x79bd, 0x7a1c, 0x7a1a, 0x7a20, 0x7a14, 0x7a1f, 0x7a1e, 0x7a9f, 0x7aa0, 0x7b77, 0x7bc0, 0x7b60, 0x7b6e, 0x7b67, 0x7cb1, 0x7cb3, 0x7cb5, 0x7d93, 0x7d79, 0x7d91, 0x7d81, 0x7d8f, 0x7d5b, 0x7f6e, 0x7f69, 0x7f6a, 0x7f72, 0x7fa9, 0x7fa8, 0x7fa4, 0x8056, 0x8058, 0x8086, 0x8084, 0x8171, 0x8170, 0x8178, 0x8165, 0x816e, 0x8173, 0x816b, 0x8179, 0x817a, 0x8166, 0x8205, 0x8247, 0x8482, 0x8477, 0x843d, 0x8431, 0x8475, 0x8466, 0x846b, 0x8449, 0x846c, 0x845b, 0x843c, 0x8435, 0x8461, 0x8463, 0x8469, 0x846d, 0x8446, 0x865e, 0x865c, 0x865f, 0x86f9, 0x8713, 0x8708, 0x8707, 0x8700, 0x86fe, 0x86fb, 0x8702, 0x8703, 0x8706, 0x870a, 0x8859, 0x88df, 0x88d4, 0x88d9, 0x88dc, 0x88d8, 0x88dd, 0x88e1, 0x88ca, 0x88d5, 0x88d2, 0x899c, 0x89e3, 0x8a6b, 0x8a72, 0x8a73, 0x8a66, 0x8a69, 0x8a70, 0x8a87, 0x8a7c, 0x8a63, 0x8aa0, 0x8a71, 0x8a85, 0x8a6d, 0x8a62, 0x8a6e, 0x8a6c, 0x8a79, 0x8a7b, 0x8a3e, 0x8a68, 0x8c62, 0x8c8a, 0x8c89, 0x8cca, 0x8cc7, 0x8cc8, 0x8cc4, 0x8cb2, 0x8cc3, 0x8cc2, 0x8cc5, 0x8de1, 0x8ddf, 0x8de8, 0x8def, 0x8df3, 0x8dfa, 0x8dea, 0x8de4, 0x8de6, 0x8eb2, 0x8f03, 0x8f09, 0x8efe, 0x8f0a, /* 0xb9 */ 0x8f9f, 0x8fb2, 0x904b, 0x904a, 0x9053, 0x9042, 0x9054, 0x903c, 0x9055, 0x9050, 0x9047, 0x904f, 0x904e, 0x904d, 0x9051, 0x903e, 0x9041, 0x9112, 0x9117, 0x916c, 0x916a, 0x9169, 0x91c9, 0x9237, 0x9257, 0x9238, 0x923d, 0x9240, 0x923e, 0x925b, 0x924b, 0x9264, 0x9251, 0x9234, 0x9249, 0x924d, 0x9245, 0x9239, 0x923f, 0x925a, 0x9598, 0x9698, 0x9694, 0x9695, 0x96cd, 0x96cb, 0x96c9, 0x96ca, 0x96f7, 0x96fb, 0x96f9, 0x96f6, 0x9756, 0x9774, 0x9776, 0x9810, 0x9811, 0x9813, 0x980a, 0x9812, 0x980c, 0x98fc, 0x98f4, 0x98fd, 0x98fe, 0x99b3, 0x99b1, 0x99b4, 0x9ae1, 0x9ce9, 0x9e82, 0x9f0e, 0x9f13, 0x9f20, 0x50e7, 0x50ee, 0x50e5, 0x50d6, 0x50ed, 0x50da, 0x50d5, 0x50cf, 0x50d1, 0x50f1, 0x50ce, 0x50e9, 0x5162, 0x51f3, 0x5283, 0x5282, 0x5331, 0x53ad, 0x55fe, 0x5600, 0x561b, 0x5617, 0x55fd, 0x5614, 0x5606, 0x5609, 0x560d, 0x560e, 0x55f7, 0x5616, 0x561f, 0x5608, 0x5610, 0x55f6, 0x5718, 0x5716, 0x5875, 0x587e, 0x5883, 0x5893, 0x588a, 0x5879, 0x5885, 0x587d, 0x58fd, 0x5925, 0x5922, 0x5924, 0x596a, 0x5969, 0x5ae1, 0x5ae6, 0x5ae9, 0x5ad7, 0x5ad6, 0x5ad8, 0x5ae3, 0x5b75, 0x5bde, 0x5be7, 0x5be1, 0x5be5, 0x5be6, 0x5be8, 0x5be2, 0x5be4, 0x5bdf, 0x5c0d, 0x5c62, 0x5d84, 0x5d87, 0x5e5b, 0x5e63, 0x5e55, 0x5e57, 0x5e54, 0x5ed3, 0x5ed6, 0x5f0a, 0x5f46, 0x5f70, 0x5fb9, 0x6147, /* 0xba */ 0x613f, 0x614b, 0x6177, 0x6162, 0x6163, 0x615f, 0x615a, 0x6158, 0x6175, 0x622a, 0x6487, 0x6458, 0x6454, 0x64a4, 0x6478, 0x645f, 0x647a, 0x6451, 0x6467, 0x6434, 0x646d, 0x647b, 0x6572, 0x65a1, 0x65d7, 0x65d6, 0x66a2, 0x66a8, 0x669d, 0x699c, 0x69a8, 0x6995, 0x69c1, 0x69ae, 0x69d3, 0x69cb, 0x699b, 0x69b7, 0x69bb, 0x69ab, 0x69b4, 0x69d0, 0x69cd, 0x69ad, 0x69cc, 0x69a6, 0x69c3, 0x69a3, 0x6b49, 0x6b4c, 0x6c33, 0x6f33, 0x6f14, 0x6efe, 0x6f13, 0x6ef4, 0x6f29, 0x6f3e, 0x6f20, 0x6f2c, 0x6f0f, 0x6f02, 0x6f22, 0x6eff, 0x6eef, 0x6f06, 0x6f31, 0x6f38, 0x6f32, 0x6f23, 0x6f15, 0x6f2b, 0x6f2f, 0x6f88, 0x6f2a, 0x6eec, 0x6f01, 0x6ef2, 0x6ecc, 0x6ef7, 0x7194, 0x7199, 0x717d, 0x718a, 0x7184, 0x7192, 0x723e, 0x7292, 0x7296, 0x7344, 0x7350, 0x7464, 0x7463, 0x746a, 0x7470, 0x746d, 0x7504, 0x7591, 0x7627, 0x760d, 0x760b, 0x7609, 0x7613, 0x76e1, 0x76e3, 0x7784, 0x777d, 0x777f, 0x7761, 0x78c1, 0x789f, 0x78a7, 0x78b3, 0x78a9, 0x78a3, 0x798e, 0x798f, 0x798d, 0x7a2e, 0x7a31, 0x7aaa, 0x7aa9, 0x7aed, 0x7aef, 0x7ba1, 0x7b95, 0x7b8b, 0x7b75, 0x7b97, 0x7b9d, 0x7b94, 0x7b8f, 0x7bb8, 0x7b87, 0x7b84, 0x7cb9, 0x7cbd, 0x7cbe, 0x7dbb, 0x7db0, 0x7d9c, 0x7dbd, 0x7dbe, 0x7da0, 0x7dca, 0x7db4, 0x7db2, 0x7db1, 0x7dba, 0x7da2, 0x7dbf, 0x7db5, 0x7db8, 0x7dad, 0x7dd2, 0x7dc7, 0x7dac, /* 0xbb */ 0x7f70, 0x7fe0, 0x7fe1, 0x7fdf, 0x805e, 0x805a, 0x8087, 0x8150, 0x8180, 0x818f, 0x8188, 0x818a, 0x817f, 0x8182, 0x81e7, 0x81fa, 0x8207, 0x8214, 0x821e, 0x824b, 0x84c9, 0x84bf, 0x84c6, 0x84c4, 0x8499, 0x849e, 0x84b2, 0x849c, 0x84cb, 0x84b8, 0x84c0, 0x84d3, 0x8490, 0x84bc, 0x84d1, 0x84ca, 0x873f, 0x871c, 0x873b, 0x8722, 0x8725, 0x8734, 0x8718, 0x8755, 0x8737, 0x8729, 0x88f3, 0x8902, 0x88f4, 0x88f9, 0x88f8, 0x88fd, 0x88e8, 0x891a, 0x88ef, 0x8aa6, 0x8a8c, 0x8a9e, 0x8aa3, 0x8a8d, 0x8aa1, 0x8a93, 0x8aa4, 0x8aaa, 0x8aa5, 0x8aa8, 0x8a98, 0x8a91, 0x8a9a, 0x8aa7, 0x8c6a, 0x8c8d, 0x8c8c, 0x8cd3, 0x8cd1, 0x8cd2, 0x8d6b, 0x8d99, 0x8d95, 0x8dfc, 0x8f14, 0x8f12, 0x8f15, 0x8f13, 0x8fa3, 0x9060, 0x9058, 0x905c, 0x9063, 0x9059, 0x905e, 0x9062, 0x905d, 0x905b, 0x9119, 0x9118, 0x911e, 0x9175, 0x9178, 0x9177, 0x9174, 0x9278, 0x9280, 0x9285, 0x9298, 0x9296, 0x927b, 0x9293, 0x929c, 0x92a8, 0x927c, 0x9291, 0x95a1, 0x95a8, 0x95a9, 0x95a3, 0x95a5, 0x95a4, 0x9699, 0x969c, 0x969b, 0x96cc, 0x96d2, 0x9700, 0x977c, 0x9785, 0x97f6, 0x9817, 0x9818, 0x98af, 0x98b1, 0x9903, 0x9905, 0x990c, 0x9909, 0x99c1, 0x9aaf, 0x9ab0, 0x9ae6, 0x9b41, 0x9b42, 0x9cf4, 0x9cf6, 0x9cf3, 0x9ebc, 0x9f3b, 0x9f4a, 0x5104, 0x5100, 0x50fb, 0x50f5, 0x50f9, 0x5102, 0x5108, 0x5109, 0x5105, 0x51dc, /* 0xbc */ 0x5287, 0x5288, 0x5289, 0x528d, 0x528a, 0x52f0, 0x53b2, 0x562e, 0x563b, 0x5639, 0x5632, 0x563f, 0x5634, 0x5629, 0x5653, 0x564e, 0x5657, 0x5674, 0x5636, 0x562f, 0x5630, 0x5880, 0x589f, 0x589e, 0x58b3, 0x589c, 0x58ae, 0x58a9, 0x58a6, 0x596d, 0x5b09, 0x5afb, 0x5b0b, 0x5af5, 0x5b0c, 0x5b08, 0x5bee, 0x5bec, 0x5be9, 0x5beb, 0x5c64, 0x5c65, 0x5d9d, 0x5d94, 0x5e62, 0x5e5f, 0x5e61, 0x5ee2, 0x5eda, 0x5edf, 0x5edd, 0x5ee3, 0x5ee0, 0x5f48, 0x5f71, 0x5fb7, 0x5fb5, 0x6176, 0x6167, 0x616e, 0x615d, 0x6155, 0x6182, 0x617c, 0x6170, 0x616b, 0x617e, 0x61a7, 0x6190, 0x61ab, 0x618e, 0x61ac, 0x619a, 0x61a4, 0x6194, 0x61ae, 0x622e, 0x6469, 0x646f, 0x6479, 0x649e, 0x64b2, 0x6488, 0x6490, 0x64b0, 0x64a5, 0x6493, 0x6495, 0x64a9, 0x6492, 0x64ae, 0x64ad, 0x64ab, 0x649a, 0x64ac, 0x6499, 0x64a2, 0x64b3, 0x6575, 0x6577, 0x6578, 0x66ae, 0x66ab, 0x66b4, 0x66b1, 0x6a23, 0x6a1f, 0x69e8, 0x6a01, 0x6a1e, 0x6a19, 0x69fd, 0x6a21, 0x6a13, 0x6a0a, 0x69f3, 0x6a02, 0x6a05, 0x69ed, 0x6a11, 0x6b50, 0x6b4e, 0x6ba4, 0x6bc5, 0x6bc6, 0x6f3f, 0x6f7c, 0x6f84, 0x6f51, 0x6f66, 0x6f54, 0x6f86, 0x6f6d, 0x6f5b, 0x6f78, 0x6f6e, 0x6f8e, 0x6f7a, 0x6f70, 0x6f64, 0x6f97, 0x6f58, 0x6ed5, 0x6f6f, 0x6f60, 0x6f5f, 0x719f, 0x71ac, 0x71b1, 0x71a8, 0x7256, 0x729b, 0x734e, 0x7357, 0x7469, 0x748b, 0x7483, /* 0xbd */ 0x747e, 0x7480, 0x757f, 0x7620, 0x7629, 0x761f, 0x7624, 0x7626, 0x7621, 0x7622, 0x769a, 0x76ba, 0x76e4, 0x778e, 0x7787, 0x778c, 0x7791, 0x778b, 0x78cb, 0x78c5, 0x78ba, 0x78ca, 0x78be, 0x78d5, 0x78bc, 0x78d0, 0x7a3f, 0x7a3c, 0x7a40, 0x7a3d, 0x7a37, 0x7a3b, 0x7aaf, 0x7aae, 0x7bad, 0x7bb1, 0x7bc4, 0x7bb4, 0x7bc6, 0x7bc7, 0x7bc1, 0x7ba0, 0x7bcc, 0x7cca, 0x7de0, 0x7df4, 0x7def, 0x7dfb, 0x7dd8, 0x7dec, 0x7ddd, 0x7de8, 0x7de3, 0x7dda, 0x7dde, 0x7de9, 0x7d9e, 0x7dd9, 0x7df2, 0x7df9, 0x7f75, 0x7f77, 0x7faf, 0x7fe9, 0x8026, 0x819b, 0x819c, 0x819d, 0x81a0, 0x819a, 0x8198, 0x8517, 0x853d, 0x851a, 0x84ee, 0x852c, 0x852d, 0x8513, 0x8511, 0x8523, 0x8521, 0x8514, 0x84ec, 0x8525, 0x84ff, 0x8506, 0x8782, 0x8774, 0x8776, 0x8760, 0x8766, 0x8778, 0x8768, 0x8759, 0x8757, 0x874c, 0x8753, 0x885b, 0x885d, 0x8910, 0x8907, 0x8912, 0x8913, 0x8915, 0x890a, 0x8abc, 0x8ad2, 0x8ac7, 0x8ac4, 0x8a95, 0x8acb, 0x8af8, 0x8ab2, 0x8ac9, 0x8ac2, 0x8abf, 0x8ab0, 0x8ad6, 0x8acd, 0x8ab6, 0x8ab9, 0x8adb, 0x8c4c, 0x8c4e, 0x8c6c, 0x8ce0, 0x8cde, 0x8ce6, 0x8ce4, 0x8cec, 0x8ced, 0x8ce2, 0x8ce3, 0x8cdc, 0x8cea, 0x8ce1, 0x8d6d, 0x8d9f, 0x8da3, 0x8e2b, 0x8e10, 0x8e1d, 0x8e22, 0x8e0f, 0x8e29, 0x8e1f, 0x8e21, 0x8e1e, 0x8eba, 0x8f1d, 0x8f1b, 0x8f1f, 0x8f29, 0x8f26, 0x8f2a, 0x8f1c, 0x8f1e, /* 0xbe */ 0x8f25, 0x9069, 0x906e, 0x9068, 0x906d, 0x9077, 0x9130, 0x912d, 0x9127, 0x9131, 0x9187, 0x9189, 0x918b, 0x9183, 0x92c5, 0x92bb, 0x92b7, 0x92ea, 0x92ac, 0x92e4, 0x92c1, 0x92b3, 0x92bc, 0x92d2, 0x92c7, 0x92f0, 0x92b2, 0x95ad, 0x95b1, 0x9704, 0x9706, 0x9707, 0x9709, 0x9760, 0x978d, 0x978b, 0x978f, 0x9821, 0x982b, 0x981c, 0x98b3, 0x990a, 0x9913, 0x9912, 0x9918, 0x99dd, 0x99d0, 0x99df, 0x99db, 0x99d1, 0x99d5, 0x99d2, 0x99d9, 0x9ab7, 0x9aee, 0x9aef, 0x9b27, 0x9b45, 0x9b44, 0x9b77, 0x9b6f, 0x9d06, 0x9d09, 0x9d03, 0x9ea9, 0x9ebe, 0x9ece, 0x58a8, 0x9f52, 0x5112, 0x5118, 0x5114, 0x5110, 0x5115, 0x5180, 0x51aa, 0x51dd, 0x5291, 0x5293, 0x52f3, 0x5659, 0x566b, 0x5679, 0x5669, 0x5664, 0x5678, 0x566a, 0x5668, 0x5665, 0x5671, 0x566f, 0x566c, 0x5662, 0x5676, 0x58c1, 0x58be, 0x58c7, 0x58c5, 0x596e, 0x5b1d, 0x5b34, 0x5b78, 0x5bf0, 0x5c0e, 0x5f4a, 0x61b2, 0x6191, 0x61a9, 0x618a, 0x61cd, 0x61b6, 0x61be, 0x61ca, 0x61c8, 0x6230, 0x64c5, 0x64c1, 0x64cb, 0x64bb, 0x64bc, 0x64da, 0x64c4, 0x64c7, 0x64c2, 0x64cd, 0x64bf, 0x64d2, 0x64d4, 0x64be, 0x6574, 0x66c6, 0x66c9, 0x66b9, 0x66c4, 0x66c7, 0x66b8, 0x6a3d, 0x6a38, 0x6a3a, 0x6a59, 0x6a6b, 0x6a58, 0x6a39, 0x6a44, 0x6a62, 0x6a61, 0x6a4b, 0x6a47, 0x6a35, 0x6a5f, 0x6a48, 0x6b59, 0x6b77, 0x6c05, 0x6fc2, 0x6fb1, 0x6fa1, /* 0xbf */ 0x6fc3, 0x6fa4, 0x6fc1, 0x6fa7, 0x6fb3, 0x6fc0, 0x6fb9, 0x6fb6, 0x6fa6, 0x6fa0, 0x6fb4, 0x71be, 0x71c9, 0x71d0, 0x71d2, 0x71c8, 0x71d5, 0x71b9, 0x71ce, 0x71d9, 0x71dc, 0x71c3, 0x71c4, 0x7368, 0x749c, 0x74a3, 0x7498, 0x749f, 0x749e, 0x74e2, 0x750c, 0x750d, 0x7634, 0x7638, 0x763a, 0x76e7, 0x76e5, 0x77a0, 0x779e, 0x779f, 0x77a5, 0x78e8, 0x78da, 0x78ec, 0x78e7, 0x79a6, 0x7a4d, 0x7a4e, 0x7a46, 0x7a4c, 0x7a4b, 0x7aba, 0x7bd9, 0x7c11, 0x7bc9, 0x7be4, 0x7bdb, 0x7be1, 0x7be9, 0x7be6, 0x7cd5, 0x7cd6, 0x7e0a, 0x7e11, 0x7e08, 0x7e1b, 0x7e23, 0x7e1e, 0x7e1d, 0x7e09, 0x7e10, 0x7f79, 0x7fb2, 0x7ff0, 0x7ff1, 0x7fee, 0x8028, 0x81b3, 0x81a9, 0x81a8, 0x81fb, 0x8208, 0x8258, 0x8259, 0x854a, 0x8559, 0x8548, 0x8568, 0x8569, 0x8543, 0x8549, 0x856d, 0x856a, 0x855e, 0x8783, 0x879f, 0x879e, 0x87a2, 0x878d, 0x8861, 0x892a, 0x8932, 0x8925, 0x892b, 0x8921, 0x89aa, 0x89a6, 0x8ae6, 0x8afa, 0x8aeb, 0x8af1, 0x8b00, 0x8adc, 0x8ae7, 0x8aee, 0x8afe, 0x8b01, 0x8b02, 0x8af7, 0x8aed, 0x8af3, 0x8af6, 0x8afc, 0x8c6b, 0x8c6d, 0x8c93, 0x8cf4, 0x8e44, 0x8e31, 0x8e34, 0x8e42, 0x8e39, 0x8e35, 0x8f3b, 0x8f2f, 0x8f38, 0x8f33, 0x8fa8, 0x8fa6, 0x9075, 0x9074, 0x9078, 0x9072, 0x907c, 0x907a, 0x9134, 0x9192, 0x9320, 0x9336, 0x92f8, 0x9333, 0x932f, 0x9322, 0x92fc, 0x932b, 0x9304, 0x931a, /* 0xc0 */ 0x9310, 0x9326, 0x9321, 0x9315, 0x932e, 0x9319, 0x95bb, 0x96a7, 0x96a8, 0x96aa, 0x96d5, 0x970e, 0x9711, 0x9716, 0x970d, 0x9713, 0x970f, 0x975b, 0x975c, 0x9766, 0x9798, 0x9830, 0x9838, 0x983b, 0x9837, 0x982d, 0x9839, 0x9824, 0x9910, 0x9928, 0x991e, 0x991b, 0x9921, 0x991a, 0x99ed, 0x99e2, 0x99f1, 0x9ab8, 0x9abc, 0x9afb, 0x9aed, 0x9b28, 0x9b91, 0x9d15, 0x9d23, 0x9d26, 0x9d28, 0x9d12, 0x9d1b, 0x9ed8, 0x9ed4, 0x9f8d, 0x9f9c, 0x512a, 0x511f, 0x5121, 0x5132, 0x52f5, 0x568e, 0x5680, 0x5690, 0x5685, 0x5687, 0x568f, 0x58d5, 0x58d3, 0x58d1, 0x58ce, 0x5b30, 0x5b2a, 0x5b24, 0x5b7a, 0x5c37, 0x5c68, 0x5dbc, 0x5dba, 0x5dbd, 0x5db8, 0x5e6b, 0x5f4c, 0x5fbd, 0x61c9, 0x61c2, 0x61c7, 0x61e6, 0x61cb, 0x6232, 0x6234, 0x64ce, 0x64ca, 0x64d8, 0x64e0, 0x64f0, 0x64e6, 0x64ec, 0x64f1, 0x64e2, 0x64ed, 0x6582, 0x6583, 0x66d9, 0x66d6, 0x6a80, 0x6a94, 0x6a84, 0x6aa2, 0x6a9c, 0x6adb, 0x6aa3, 0x6a7e, 0x6a97, 0x6a90, 0x6aa0, 0x6b5c, 0x6bae, 0x6bda, 0x6c08, 0x6fd8, 0x6ff1, 0x6fdf, 0x6fe0, 0x6fdb, 0x6fe4, 0x6feb, 0x6fef, 0x6f80, 0x6fec, 0x6fe1, 0x6fe9, 0x6fd5, 0x6fee, 0x6ff0, 0x71e7, 0x71df, 0x71ee, 0x71e6, 0x71e5, 0x71ed, 0x71ec, 0x71f4, 0x71e0, 0x7235, 0x7246, 0x7370, 0x7372, 0x74a9, 0x74b0, 0x74a6, 0x74a8, 0x7646, 0x7642, 0x764c, 0x76ea, 0x77b3, 0x77aa, 0x77b0, 0x77ac, /* 0xc1 */ 0x77a7, 0x77ad, 0x77ef, 0x78f7, 0x78fa, 0x78f4, 0x78ef, 0x7901, 0x79a7, 0x79aa, 0x7a57, 0x7abf, 0x7c07, 0x7c0d, 0x7bfe, 0x7bf7, 0x7c0c, 0x7be0, 0x7ce0, 0x7cdc, 0x7cde, 0x7ce2, 0x7cdf, 0x7cd9, 0x7cdd, 0x7e2e, 0x7e3e, 0x7e46, 0x7e37, 0x7e32, 0x7e43, 0x7e2b, 0x7e3d, 0x7e31, 0x7e45, 0x7e41, 0x7e34, 0x7e39, 0x7e48, 0x7e35, 0x7e3f, 0x7e2f, 0x7f44, 0x7ff3, 0x7ffc, 0x8071, 0x8072, 0x8070, 0x806f, 0x8073, 0x81c6, 0x81c3, 0x81ba, 0x81c2, 0x81c0, 0x81bf, 0x81bd, 0x81c9, 0x81be, 0x81e8, 0x8209, 0x8271, 0x85aa, 0x8584, 0x857e, 0x859c, 0x8591, 0x8594, 0x85af, 0x859b, 0x8587, 0x85a8, 0x858a, 0x8667, 0x87c0, 0x87d1, 0x87b3, 0x87d2, 0x87c6, 0x87ab, 0x87bb, 0x87ba, 0x87c8, 0x87cb, 0x893b, 0x8936, 0x8944, 0x8938, 0x893d, 0x89ac, 0x8b0e, 0x8b17, 0x8b19, 0x8b1b, 0x8b0a, 0x8b20, 0x8b1d, 0x8b04, 0x8b10, 0x8c41, 0x8c3f, 0x8c73, 0x8cfa, 0x8cfd, 0x8cfc, 0x8cf8, 0x8cfb, 0x8da8, 0x8e49, 0x8e4b, 0x8e48, 0x8e4a, 0x8f44, 0x8f3e, 0x8f42, 0x8f45, 0x8f3f, 0x907f, 0x907d, 0x9084, 0x9081, 0x9082, 0x9080, 0x9139, 0x91a3, 0x919e, 0x919c, 0x934d, 0x9382, 0x9328, 0x9375, 0x934a, 0x9365, 0x934b, 0x9318, 0x937e, 0x936c, 0x935b, 0x9370, 0x935a, 0x9354, 0x95ca, 0x95cb, 0x95cc, 0x95c8, 0x95c6, 0x96b1, 0x96b8, 0x96d6, 0x971c, 0x971e, 0x97a0, 0x97d3, 0x9846, 0x98b6, 0x9935, 0x9a01, /* 0xc2 */ 0x99ff, 0x9bae, 0x9bab, 0x9baa, 0x9bad, 0x9d3b, 0x9d3f, 0x9e8b, 0x9ecf, 0x9ede, 0x9edc, 0x9edd, 0x9edb, 0x9f3e, 0x9f4b, 0x53e2, 0x5695, 0x56ae, 0x58d9, 0x58d8, 0x5b38, 0x5f5d, 0x61e3, 0x6233, 0x64f4, 0x64f2, 0x64fe, 0x6506, 0x64fa, 0x64fb, 0x64f7, 0x65b7, 0x66dc, 0x6726, 0x6ab3, 0x6aac, 0x6ac3, 0x6abb, 0x6ab8, 0x6ac2, 0x6aae, 0x6aaf, 0x6b5f, 0x6b78, 0x6baf, 0x7009, 0x700b, 0x6ffe, 0x7006, 0x6ffa, 0x7011, 0x700f, 0x71fb, 0x71fc, 0x71fe, 0x71f8, 0x7377, 0x7375, 0x74a7, 0x74bf, 0x7515, 0x7656, 0x7658, 0x7652, 0x77bd, 0x77bf, 0x77bb, 0x77bc, 0x790e, 0x79ae, 0x7a61, 0x7a62, 0x7a60, 0x7ac4, 0x7ac5, 0x7c2b, 0x7c27, 0x7c2a, 0x7c1e, 0x7c23, 0x7c21, 0x7ce7, 0x7e54, 0x7e55, 0x7e5e, 0x7e5a, 0x7e61, 0x7e52, 0x7e59, 0x7f48, 0x7ff9, 0x7ffb, 0x8077, 0x8076, 0x81cd, 0x81cf, 0x820a, 0x85cf, 0x85a9, 0x85cd, 0x85d0, 0x85c9, 0x85b0, 0x85ba, 0x85b9, 0x85a6, 0x87ef, 0x87ec, 0x87f2, 0x87e0, 0x8986, 0x89b2, 0x89f4, 0x8b28, 0x8b39, 0x8b2c, 0x8b2b, 0x8c50, 0x8d05, 0x8e59, 0x8e63, 0x8e66, 0x8e64, 0x8e5f, 0x8e55, 0x8ec0, 0x8f49, 0x8f4d, 0x9087, 0x9083, 0x9088, 0x91ab, 0x91ac, 0x91d0, 0x9394, 0x938a, 0x9396, 0x93a2, 0x93b3, 0x93ae, 0x93ac, 0x93b0, 0x9398, 0x939a, 0x9397, 0x95d4, 0x95d6, 0x95d0, 0x95d5, 0x96e2, 0x96dc, 0x96d9, 0x96db, 0x96de, 0x9724, 0x97a3, 0x97a6, /* 0xc3 */ 0x97ad, 0x97f9, 0x984d, 0x984f, 0x984c, 0x984e, 0x9853, 0x98ba, 0x993e, 0x993f, 0x993d, 0x992e, 0x99a5, 0x9a0e, 0x9ac1, 0x9b03, 0x9b06, 0x9b4f, 0x9b4e, 0x9b4d, 0x9bca, 0x9bc9, 0x9bfd, 0x9bc8, 0x9bc0, 0x9d51, 0x9d5d, 0x9d60, 0x9ee0, 0x9f15, 0x9f2c, 0x5133, 0x56a5, 0x58de, 0x58df, 0x58e2, 0x5bf5, 0x9f90, 0x5eec, 0x61f2, 0x61f7, 0x61f6, 0x61f5, 0x6500, 0x650f, 0x66e0, 0x66dd, 0x6ae5, 0x6add, 0x6ada, 0x6ad3, 0x701b, 0x701f, 0x7028, 0x701a, 0x701d, 0x7015, 0x7018, 0x7206, 0x720d, 0x7258, 0x72a2, 0x7378, 0x737a, 0x74bd, 0x74ca, 0x74e3, 0x7587, 0x7586, 0x765f, 0x7661, 0x77c7, 0x7919, 0x79b1, 0x7a6b, 0x7a69, 0x7c3e, 0x7c3f, 0x7c38, 0x7c3d, 0x7c37, 0x7c40, 0x7e6b, 0x7e6d, 0x7e79, 0x7e69, 0x7e6a, 0x7f85, 0x7e73, 0x7fb6, 0x7fb9, 0x7fb8, 0x81d8, 0x85e9, 0x85dd, 0x85ea, 0x85d5, 0x85e4, 0x85e5, 0x85f7, 0x87fb, 0x8805, 0x880d, 0x87f9, 0x87fe, 0x8960, 0x895f, 0x8956, 0x895e, 0x8b41, 0x8b5c, 0x8b58, 0x8b49, 0x8b5a, 0x8b4e, 0x8b4f, 0x8b46, 0x8b59, 0x8d08, 0x8d0a, 0x8e7c, 0x8e72, 0x8e87, 0x8e76, 0x8e6c, 0x8e7a, 0x8e74, 0x8f54, 0x8f4e, 0x8fad, 0x908a, 0x908b, 0x91b1, 0x91ae, 0x93e1, 0x93d1, 0x93df, 0x93c3, 0x93c8, 0x93dc, 0x93dd, 0x93d6, 0x93e2, 0x93cd, 0x93d8, 0x93e4, 0x93d7, 0x93e8, 0x95dc, 0x96b4, 0x96e3, 0x972a, 0x9727, 0x9761, 0x97dc, 0x97fb, 0x985e, /* 0xc4 */ 0x9858, 0x985b, 0x98bc, 0x9945, 0x9949, 0x9a16, 0x9a19, 0x9b0d, 0x9be8, 0x9be7, 0x9bd6, 0x9bdb, 0x9d89, 0x9d61, 0x9d72, 0x9d6a, 0x9d6c, 0x9e92, 0x9e97, 0x9e93, 0x9eb4, 0x52f8, 0x56a8, 0x56b7, 0x56b6, 0x56b4, 0x56bc, 0x58e4, 0x5b40, 0x5b43, 0x5b7d, 0x5bf6, 0x5dc9, 0x61f8, 0x61fa, 0x6518, 0x6514, 0x6519, 0x66e6, 0x6727, 0x6aec, 0x703e, 0x7030, 0x7032, 0x7210, 0x737b, 0x74cf, 0x7662, 0x7665, 0x7926, 0x792a, 0x792c, 0x792b, 0x7ac7, 0x7af6, 0x7c4c, 0x7c43, 0x7c4d, 0x7cef, 0x7cf0, 0x8fae, 0x7e7d, 0x7e7c, 0x7e82, 0x7f4c, 0x8000, 0x81da, 0x8266, 0x85fb, 0x85f9, 0x8611, 0x85fa, 0x8606, 0x860b, 0x8607, 0x860a, 0x8814, 0x8815, 0x8964, 0x89ba, 0x89f8, 0x8b70, 0x8b6c, 0x8b66, 0x8b6f, 0x8b5f, 0x8b6b, 0x8d0f, 0x8d0d, 0x8e89, 0x8e81, 0x8e85, 0x8e82, 0x91b4, 0x91cb, 0x9418, 0x9403, 0x93fd, 0x95e1, 0x9730, 0x98c4, 0x9952, 0x9951, 0x99a8, 0x9a2b, 0x9a30, 0x9a37, 0x9a35, 0x9c13, 0x9c0d, 0x9e79, 0x9eb5, 0x9ee8, 0x9f2f, 0x9f5f, 0x9f63, 0x9f61, 0x5137, 0x5138, 0x56c1, 0x56c0, 0x56c2, 0x5914, 0x5c6c, 0x5dcd, 0x61fc, 0x61fe, 0x651d, 0x651c, 0x6595, 0x66e9, 0x6afb, 0x6b04, 0x6afa, 0x6bb2, 0x704c, 0x721b, 0x72a7, 0x74d6, 0x74d4, 0x7669, 0x77d3, 0x7c50, 0x7e8f, 0x7e8c, 0x7fbc, 0x8617, 0x862d, 0x861a, 0x8823, 0x8822, 0x8821, 0x881f, 0x896a, 0x896c, 0x89bd, 0x8b74, /* 0xc5 */ 0x8b77, 0x8b7d, 0x8d13, 0x8e8a, 0x8e8d, 0x8e8b, 0x8f5f, 0x8faf, 0x91ba, 0x942e, 0x9433, 0x9435, 0x943a, 0x9438, 0x9432, 0x942b, 0x95e2, 0x9738, 0x9739, 0x9732, 0x97ff, 0x9867, 0x9865, 0x9957, 0x9a45, 0x9a43, 0x9a40, 0x9a3e, 0x9acf, 0x9b54, 0x9b51, 0x9c2d, 0x9c25, 0x9daf, 0x9db4, 0x9dc2, 0x9db8, 0x9e9d, 0x9eef, 0x9f19, 0x9f5c, 0x9f66, 0x9f67, 0x513c, 0x513b, 0x56c8, 0x56ca, 0x56c9, 0x5b7f, 0x5dd4, 0x5dd2, 0x5f4e, 0x61ff, 0x6524, 0x6b0a, 0x6b61, 0x7051, 0x7058, 0x7380, 0x74e4, 0x758a, 0x766e, 0x766c, 0x79b3, 0x7c60, 0x7c5f, 0x807e, 0x807d, 0x81df, 0x8972, 0x896f, 0x89fc, 0x8b80, 0x8d16, 0x8d17, 0x8e91, 0x8e93, 0x8f61, 0x9148, 0x9444, 0x9451, 0x9452, 0x973d, 0x973e, 0x97c3, 0x97c1, 0x986b, 0x9955, 0x9a55, 0x9a4d, 0x9ad2, 0x9b1a, 0x9c49, 0x9c31, 0x9c3e, 0x9c3b, 0x9dd3, 0x9dd7, 0x9f34, 0x9f6c, 0x9f6a, 0x9f94, 0x56cc, 0x5dd6, 0x6200, 0x6523, 0x652b, 0x652a, 0x66ec, 0x6b10, 0x74da, 0x7aca, 0x7c64, 0x7c63, 0x7c65, 0x7e93, 0x7e96, 0x7e94, 0x81e2, 0x8638, 0x863f, 0x8831, 0x8b8a, 0x9090, 0x908f, 0x9463, 0x9460, 0x9464, 0x9768, 0x986f, 0x995c, 0x9a5a, 0x9a5b, 0x9a57, 0x9ad3, 0x9ad4, 0x9ad1, 0x9c54, 0x9c57, 0x9c56, 0x9de5, 0x9e9f, 0x9ef4, 0x56d1, 0x58e9, 0x652c, 0x705e, 0x7671, 0x7672, 0x77d7, 0x7f50, 0x7f88, 0x8836, 0x8839, 0x8862, 0x8b93, 0x8b92, /* 0xc6 */ 0x8b96, 0x8277, 0x8d1b, 0x91c0, 0x946a, 0x9742, 0x9748, 0x9744, 0x97c6, 0x9870, 0x9a5f, 0x9b22, 0x9b58, 0x9c5f, 0x9df9, 0x9dfa, 0x9e7c, 0x9e7d, 0x9f07, 0x9f77, 0x9f72, 0x5ef3, 0x6b16, 0x7063, 0x7c6c, 0x7c6e, 0x883b, 0x89c0, 0x8ea1, 0x91c1, 0x9472, 0x9470, 0x9871, 0x995e, 0x9ad6, 0x9b23, 0x9ecc, 0x7064, 0x77da, 0x8b9a, 0x9477, 0x97c9, 0x9a62, 0x9a65, 0x7e9c, 0x8b9c, 0x8eaa, 0x91c5, 0x947d, 0x947e, 0x947c, 0x9c77, 0x9c78, 0x9ef7, 0x8c54, 0x947f, 0x9e1a, 0x7228, 0x9a6a, 0x9b31, 0x9e1b, 0x9e1e, 0x7c72, 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469, 0x2474, 0x2475, 0x2476, 0x2477, 0x2478, 0x2479, 0x247a, 0x247b, 0x247c, 0x247d, 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, 0x2178, 0x2179, 0x4e36, 0x4e3f, 0x4e85, 0x4ea0, 0x5182, 0x5196, 0x51ab, 0x52f9, 0x5338, 0x5369, 0x53b6, 0x590a, 0x5b80, 0x5ddb, 0x2f33, 0x5e7f, 0xf6df, 0x5f50, 0x5f61, 0x6534, 0xf6e3, 0x7592, 0xf6e5, 0x8fb5, 0xf6e7, 0x00a8, 0x02c6, 0x30fd, 0x30fe, 0x309d, 0x309e, 0xf6ee, 0xf6ef, 0x3005, 0x3006, 0x3007, 0x30fc, 0xff3b, 0xff3d, 0x273d, 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048, 0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058, /* 0xc7 */ 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f, 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, 0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e, 0x306f, 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078, 0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e, 0x307f, 0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088, 0x3089, 0x308a, 0x308b, 0x308c, 0x308d, 0x308e, 0x308f, 0x3090, 0x3091, 0x3092, 0x3093, 0x30a1, 0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7, 0x30a8, 0x30a9, 0x30aa, 0x30ab, 0x30ac, 0x30ad, 0x30ae, 0x30af, 0x30b0, 0x30b1, 0x30b2, 0x30b3, 0x30b4, 0x30b5, 0x30b6, 0x30b7, 0x30b8, 0x30b9, 0x30ba, 0x30bb, 0x30bc, 0x30bd, 0x30be, 0x30bf, 0x30c0, 0x30c1, 0x30c2, 0x30c3, 0x30c4, 0x30c5, 0x30c6, 0x30c7, 0x30c8, 0x30c9, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf, 0x30d0, 0x30d1, 0x30d2, 0x30d3, 0x30d4, 0x30d5, 0x30d6, 0x30d7, 0x30d8, 0x30d9, 0x30da, 0x30db, 0x30dc, 0x30dd, 0x30de, 0x30df, 0x30e0, 0x30e1, 0x30e2, 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7, 0x30e8, 0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ee, 0x30ef, 0x30f0, 0x30f1, 0x30f2, 0x30f3, 0x30f4, 0x30f5, 0x30f6, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, 0x0416, 0x0417, 0x0418, 0x0419, 0x041a, /* 0xc8 */ 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0436, 0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, 0x21e7, 0x21b8, 0x21b9, 0xf7e5, 0xf7e6, 0x4e5a, 0xf7e8, 0x5202, 0xf7ea, 0xf7eb, 0x5188, 0xf7ed, 0xf7ee, 0xf7ef, 0xf7f0, 0xf7f1, 0xf7f2, 0xf7f3, 0xf7f4, 0xf7f5, 0xf7f6, 0xf7f7, 0xf7f8, 0xf7f9, 0xf7fa, 0xf7fb, 0xf7fc, 0xf7fd, 0xf7fe, 0xf7ff, 0xf800, 0xf801, 0xf802, 0xf803, 0xf804, 0xf805, 0xf806, 0xf807, 0xf808, 0xf809, 0xf80a, 0xf80b, 0xf80c, 0xf80d, 0xf80e, 0xf80f, 0xf810, 0xf811, 0xf812, 0xf813, 0xf814, 0xf815, 0xf816, 0xffe2, 0xffe4, 0xff07, 0xff02, 0x3231, 0x2116, 0x2121, 0x309b, 0x309c, 0x2e80, 0x2e84, 0x2e86, 0x2e87, 0x2e88, 0x2e8a, 0x2e8c, 0x2e8d, 0x2e95, 0x2e9c, 0x2e9d, 0x2ea5, 0x2ea7, 0x2eaa, 0x2eac, 0x2eae, 0x2eb6, 0x2ebc, 0x2ebe, 0x2ec6, 0x2eca, 0x2ecc, 0x2ecd, 0x2ecf, 0x2ed6, 0x2ed7, 0x2ede, 0x2ee3, 0xf83c, 0xf83d, 0xf83e, 0x0283, 0x0250, 0x025b, 0x0254, 0x0275, 0x0153, 0x00f8, 0x014b, 0x028a, 0x026a, /* 0xc9 */ 0x4e42, 0x4e5c, 0x51f5, 0x531a, 0x5382, 0x4e07, 0x4e0c, 0x4e47, 0x4e8d, 0x56d7, 0xfa0c, 0x5c6e, 0x5f73, 0x4e0f, 0x5187, 0x4e0e, 0x4e2e, 0x4e93, 0x4ec2, 0x4ec9, 0x4ec8, 0x5198, 0x52fc, 0x536c, 0x53b9, 0x5720, 0x5903, 0x592c, 0x5c10, 0x5dff, 0x65e1, 0x6bb3, 0x6bcc, 0x6c14, 0x723f, 0x4e31, 0x4e3c, 0x4ee8, 0x4edc, 0x4ee9, 0x4ee1, 0x4edd, 0x4eda, 0x520c, 0x531c, 0x534c, 0x5722, 0x5723, 0x5917, 0x592f, 0x5b81, 0x5b84, 0x5c12, 0x5c3b, 0x5c74, 0x5c73, 0x5e04, 0x5e80, 0x5e82, 0x5fc9, 0x6209, 0x6250, 0x6c15, 0x6c36, 0x6c43, 0x6c3f, 0x6c3b, 0x72ae, 0x72b0, 0x738a, 0x79b8, 0x808a, 0x961e, 0x4f0e, 0x4f18, 0x4f2c, 0x4ef5, 0x4f14, 0x4ef1, 0x4f00, 0x4ef7, 0x4f08, 0x4f1d, 0x4f02, 0x4f05, 0x4f22, 0x4f13, 0x4f04, 0x4ef4, 0x4f12, 0x51b1, 0x5213, 0x5209, 0x5210, 0x52a6, 0x5322, 0x531f, 0x534d, 0x538a, 0x5407, 0x56e1, 0x56df, 0x572e, 0x572a, 0x5734, 0x593c, 0x5980, 0x597c, 0x5985, 0x597b, 0x597e, 0x5977, 0x597f, 0x5b56, 0x5c15, 0x5c25, 0x5c7c, 0x5c7a, 0x5c7b, 0x5c7e, 0x5ddf, 0x5e75, 0x5e84, 0x5f02, 0x5f1a, 0x5f74, 0x5fd5, 0x5fd4, 0x5fcf, 0x625c, 0x625e, 0x6264, 0x6261, 0x6266, 0x6262, 0x6259, 0x6260, 0x625a, 0x6265, 0x65ef, 0x65ee, 0x673e, 0x6739, 0x6738, 0x673b, 0x673a, 0x673f, 0x673c, 0x6733, 0x6c18, 0x6c46, 0x6c52, 0x6c5c, 0x6c4f, 0x6c4a, 0x6c54, 0x6c4b, /* 0xca */ 0x6c4c, 0x7071, 0x725e, 0x72b4, 0x72b5, 0x738e, 0x752a, 0x767f, 0x7a75, 0x7f51, 0x8278, 0x827c, 0x8280, 0x827d, 0x827f, 0x864d, 0x897e, 0x9099, 0x9097, 0x9098, 0x909b, 0x9094, 0x9622, 0x9624, 0x9620, 0x9623, 0x4f56, 0x4f3b, 0x4f62, 0x4f49, 0x4f53, 0x4f64, 0x4f3e, 0x4f67, 0x4f52, 0x4f5f, 0x4f41, 0x4f58, 0x4f2d, 0x4f33, 0x4f3f, 0x4f61, 0x518f, 0x51b9, 0x521c, 0x521e, 0x5221, 0x52ad, 0x52ae, 0x5309, 0x5363, 0x5372, 0x538e, 0x538f, 0x5430, 0x5437, 0x542a, 0x5454, 0x5445, 0x5419, 0x541c, 0x5425, 0x5418, 0x543d, 0x544f, 0x5441, 0x5428, 0x5424, 0x5447, 0x56ee, 0x56e7, 0x56e5, 0x5741, 0x5745, 0x574c, 0x5749, 0x574b, 0x5752, 0x5906, 0x5940, 0x59a6, 0x5998, 0x59a0, 0x5997, 0x598e, 0x59a2, 0x5990, 0x598f, 0x59a7, 0x59a1, 0x5b8e, 0x5b92, 0x5c28, 0x5c2a, 0x5c8d, 0x5c8f, 0x5c88, 0x5c8b, 0x5c89, 0x5c92, 0x5c8a, 0x5c86, 0x5c93, 0x5c95, 0x5de0, 0x5e0a, 0x5e0e, 0x5e8b, 0x5e89, 0x5e8c, 0x5e88, 0x5e8d, 0x5f05, 0x5f1d, 0x5f78, 0x5f76, 0x5fd2, 0x5fd1, 0x5fd0, 0x5fed, 0x5fe8, 0x5fee, 0x5ff3, 0x5fe1, 0x5fe4, 0x5fe3, 0x5ffa, 0x5fef, 0x5ff7, 0x5ffb, 0x6000, 0x5ff4, 0x623a, 0x6283, 0x628c, 0x628e, 0x628f, 0x6294, 0x6287, 0x6271, 0x627b, 0x627a, 0x6270, 0x6281, 0x6288, 0x6277, 0x627d, 0x6272, 0x6274, 0x6537, 0x65f0, 0x65f4, 0x65f3, 0x65f2, 0x65f5, 0x6745, 0x6747, /* 0xcb */ 0x6759, 0x6755, 0x674c, 0x6748, 0x675d, 0x674d, 0x675a, 0x674b, 0x6bd0, 0x6c19, 0x6c1a, 0x6c78, 0x6c67, 0x6c6b, 0x6c84, 0x6c8b, 0x6c8f, 0x6c71, 0x6c6f, 0x6c69, 0x6c9a, 0x6c6d, 0x6c87, 0x6c95, 0x6c9c, 0x6c66, 0x6c73, 0x6c65, 0x6c7b, 0x6c8e, 0x7074, 0x707a, 0x7263, 0x72bf, 0x72bd, 0x72c3, 0x72c6, 0x72c1, 0x72ba, 0x72c5, 0x7395, 0x7397, 0x7393, 0x7394, 0x7392, 0x753a, 0x7539, 0x7594, 0x7595, 0x7681, 0x793d, 0x8034, 0x8095, 0x8099, 0x8090, 0x8092, 0x809c, 0x8290, 0x828f, 0x8285, 0x828e, 0x8291, 0x8293, 0x828a, 0x8283, 0x8284, 0x8c78, 0x8fc9, 0x8fbf, 0x909f, 0x90a1, 0x90a5, 0x909e, 0x90a7, 0x90a0, 0x9630, 0x9628, 0x962f, 0x962d, 0x4e33, 0x4f98, 0x4f7c, 0x4f85, 0x4f7d, 0x4f80, 0x4f87, 0x4f76, 0x4f74, 0x4f89, 0x4f84, 0x4f77, 0x4f4c, 0x4f97, 0x4f6a, 0x4f9a, 0x4f79, 0x4f81, 0x4f78, 0x4f90, 0x4f9c, 0x4f94, 0x4f9e, 0x4f92, 0x4f82, 0x4f95, 0x4f6b, 0x4f6e, 0x519e, 0x51bc, 0x51be, 0x5235, 0x5232, 0x5233, 0x5246, 0x5231, 0x52bc, 0x530a, 0x530b, 0x533c, 0x5392, 0x5394, 0x5487, 0x547f, 0x5481, 0x5491, 0x5482, 0x5488, 0x546b, 0x547a, 0x547e, 0x5465, 0x546c, 0x5474, 0x5466, 0x548d, 0x546f, 0x5461, 0x5460, 0x5498, 0x5463, 0x5467, 0x5464, 0x56f7, 0x56f9, 0x576f, 0x5772, 0x576d, 0x576b, 0x5771, 0x5770, 0x5776, 0x5780, 0x5775, 0x577b, 0x5773, 0x5774, 0x5762, /* 0xcc */ 0x5768, 0x577d, 0x590c, 0x5945, 0x59b5, 0x59ba, 0x59cf, 0x59ce, 0x59b2, 0x59cc, 0x59c1, 0x59b6, 0x59bc, 0x59c3, 0x59d6, 0x59b1, 0x59bd, 0x59c0, 0x59c8, 0x59b4, 0x59c7, 0x5b62, 0x5b65, 0x5b93, 0x5b95, 0x5c44, 0x5c47, 0x5cae, 0x5ca4, 0x5ca0, 0x5cb5, 0x5caf, 0x5ca8, 0x5cac, 0x5c9f, 0x5ca3, 0x5cad, 0x5ca2, 0x5caa, 0x5ca7, 0x5c9d, 0x5ca5, 0x5cb6, 0x5cb0, 0x5ca6, 0x5e17, 0x5e14, 0x5e19, 0x5f28, 0x5f22, 0x5f23, 0x5f24, 0x5f54, 0x5f82, 0x5f7e, 0x5f7d, 0x5fde, 0x5fe5, 0x602d, 0x6026, 0x6019, 0x6032, 0x600b, 0x6034, 0x600a, 0x6017, 0x6033, 0x601a, 0x601e, 0x602c, 0x6022, 0x600d, 0x6010, 0x602e, 0x6013, 0x6011, 0x600c, 0x6009, 0x601c, 0x6214, 0x623d, 0x62ad, 0x62b4, 0x62d1, 0x62be, 0x62aa, 0x62b6, 0x62ca, 0x62ae, 0x62b3, 0x62af, 0x62bb, 0x62a9, 0x62b0, 0x62b8, 0x653d, 0x65a8, 0x65bb, 0x6609, 0x65fc, 0x6604, 0x6612, 0x6608, 0x65fb, 0x6603, 0x660b, 0x660d, 0x6605, 0x65fd, 0x6611, 0x6610, 0x66f6, 0x670a, 0x6785, 0x676c, 0x678e, 0x6792, 0x6776, 0x677b, 0x6798, 0x6786, 0x6784, 0x6774, 0x678d, 0x678c, 0x677a, 0x679f, 0x6791, 0x6799, 0x6783, 0x677d, 0x6781, 0x6778, 0x6779, 0x6794, 0x6b25, 0x6b80, 0x6b7e, 0x6bde, 0x6c1d, 0x6c93, 0x6cec, 0x6ceb, 0x6cee, 0x6cd9, 0x6cb6, 0x6cd4, 0x6cad, 0x6ce7, 0x6cb7, 0x6cd0, 0x6cc2, 0x6cba, 0x6cc3, 0x6cc6, 0x6ced, 0x6cf2, /* 0xcd */ 0x6cd2, 0x6cdd, 0x6cb4, 0x6c8a, 0x6c9d, 0x6c80, 0x6cde, 0x6cc0, 0x6d30, 0x6ccd, 0x6cc7, 0x6cb0, 0x6cf9, 0x6ccf, 0x6ce9, 0x6cd1, 0x7094, 0x7098, 0x7085, 0x7093, 0x7086, 0x7084, 0x7091, 0x7096, 0x7082, 0x709a, 0x7083, 0x726a, 0x72d6, 0x72cb, 0x72d8, 0x72c9, 0x72dc, 0x72d2, 0x72d4, 0x72da, 0x72cc, 0x72d1, 0x73a4, 0x73a1, 0x73ad, 0x73a6, 0x73a2, 0x73a0, 0x73ac, 0x739d, 0x74dd, 0x74e8, 0x753f, 0x7540, 0x753e, 0x758c, 0x7598, 0x76af, 0x76f3, 0x76f1, 0x76f0, 0x76f5, 0x77f8, 0x77fc, 0x77f9, 0x77fb, 0x77fa, 0x77f7, 0x7942, 0x793f, 0x79c5, 0x7a78, 0x7a7b, 0x7afb, 0x7c75, 0x7cfd, 0x8035, 0x808f, 0x80ae, 0x80a3, 0x80b8, 0x80b5, 0x80ad, 0x8220, 0x82a0, 0x82c0, 0x82ab, 0x829a, 0x8298, 0x829b, 0x82b5, 0x82a7, 0x82ae, 0x82bc, 0x829e, 0x82ba, 0x82b4, 0x82a8, 0x82a1, 0x82a9, 0x82c2, 0x82a4, 0x82c3, 0x82b6, 0x82a2, 0x8670, 0x866f, 0x866d, 0x866e, 0x8c56, 0x8fd2, 0x8fcb, 0x8fd3, 0x8fcd, 0x8fd6, 0x8fd5, 0x8fd7, 0x90b2, 0x90b4, 0x90af, 0x90b3, 0x90b0, 0x9639, 0x963d, 0x963c, 0x963a, 0x9643, 0x4fcd, 0x4fc5, 0x4fd3, 0x4fb2, 0x4fc9, 0x4fcb, 0x4fc1, 0x4fd4, 0x4fdc, 0x4fd9, 0x4fbb, 0x4fb3, 0x4fdb, 0x4fc7, 0x4fd6, 0x4fba, 0x4fc0, 0x4fb9, 0x4fec, 0x5244, 0x5249, 0x52c0, 0x52c2, 0x533d, 0x537c, 0x5397, 0x5396, 0x5399, 0x5398, 0x54ba, 0x54a1, 0x54ad, 0x54a5, 0x54cf, /* 0xce */ 0x54c3, 0x830d, 0x54b7, 0x54ae, 0x54d6, 0x54b6, 0x54c5, 0x54c6, 0x54a0, 0x5470, 0x54bc, 0x54a2, 0x54be, 0x5472, 0x54de, 0x54b0, 0x57b5, 0x579e, 0x579f, 0x57a4, 0x578c, 0x5797, 0x579d, 0x579b, 0x5794, 0x5798, 0x578f, 0x5799, 0x57a5, 0x579a, 0x5795, 0x58f4, 0x590d, 0x5953, 0x59e1, 0x59de, 0x59ee, 0x5a00, 0x59f1, 0x59dd, 0x59fa, 0x59fd, 0x59fc, 0x59f6, 0x59e4, 0x59f2, 0x59f7, 0x59db, 0x59e9, 0x59f3, 0x59f5, 0x59e0, 0x59fe, 0x59f4, 0x59ed, 0x5ba8, 0x5c4c, 0x5cd0, 0x5cd8, 0x5ccc, 0x5cd7, 0x5ccb, 0x5cdb, 0x5cde, 0x5cda, 0x5cc9, 0x5cc7, 0x5cca, 0x5cd6, 0x5cd3, 0x5cd4, 0x5ccf, 0x5cc8, 0x5cc6, 0x5cce, 0x5cdf, 0x5cf8, 0x5df9, 0x5e21, 0x5e22, 0x5e23, 0x5e20, 0x5e24, 0x5eb0, 0x5ea4, 0x5ea2, 0x5e9b, 0x5ea3, 0x5ea5, 0x5f07, 0x5f2e, 0x5f56, 0x5f86, 0x6037, 0x6039, 0x6054, 0x6072, 0x605e, 0x6045, 0x6053, 0x6047, 0x6049, 0x605b, 0x604c, 0x6040, 0x6042, 0x605f, 0x6024, 0x6044, 0x6058, 0x6066, 0x606e, 0x6242, 0x6243, 0x62cf, 0x630d, 0x630b, 0x62f5, 0x630e, 0x6303, 0x62eb, 0x62f9, 0x630f, 0x630c, 0x62f8, 0x62f6, 0x6300, 0x6313, 0x6314, 0x62fa, 0x6315, 0x62fb, 0x62f0, 0x6541, 0x6543, 0x65aa, 0x65bf, 0x6636, 0x6621, 0x6632, 0x6635, 0x661c, 0x6626, 0x6622, 0x6633, 0x662b, 0x663a, 0x661d, 0x6634, 0x6639, 0x662e, 0x670f, 0x6710, 0x67c1, 0x67f2, 0x67c8, 0x67ba, /* 0xcf */ 0x67dc, 0x67bb, 0x67f8, 0x67d8, 0x67c0, 0x67b7, 0x67c5, 0x67eb, 0x67e4, 0x67df, 0x67b5, 0x67cd, 0x67b3, 0x67f7, 0x67f6, 0x67ee, 0x67e3, 0x67c2, 0x67b9, 0x67ce, 0x67e7, 0x67f0, 0x67b2, 0x67fc, 0x67c6, 0x67ed, 0x67cc, 0x67ae, 0x67e6, 0x67db, 0x67fa, 0x67c9, 0x67ca, 0x67c3, 0x67ea, 0x67cb, 0x6b28, 0x6b82, 0x6b84, 0x6bb6, 0x6bd6, 0x6bd8, 0x6be0, 0x6c20, 0x6c21, 0x6d28, 0x6d34, 0x6d2d, 0x6d1f, 0x6d3c, 0x6d3f, 0x6d12, 0x6d0a, 0x6cda, 0x6d33, 0x6d04, 0x6d19, 0x6d3a, 0x6d1a, 0x6d11, 0x6d00, 0x6d1d, 0x6d42, 0x6d01, 0x6d18, 0x6d37, 0x6d03, 0x6d0f, 0x6d40, 0x6d07, 0x6d20, 0x6d2c, 0x6d08, 0x6d22, 0x6d09, 0x6d10, 0x70b7, 0x709f, 0x70be, 0x70b1, 0x70b0, 0x70a1, 0x70b4, 0x70b5, 0x70a9, 0x7241, 0x7249, 0x724a, 0x726c, 0x7270, 0x7273, 0x726e, 0x72ca, 0x72e4, 0x72e8, 0x72eb, 0x72df, 0x72ea, 0x72e6, 0x72e3, 0x7385, 0x73cc, 0x73c2, 0x73c8, 0x73c5, 0x73b9, 0x73b6, 0x73b5, 0x73b4, 0x73eb, 0x73bf, 0x73c7, 0x73be, 0x73c3, 0x73c6, 0x73b8, 0x73cb, 0x74ec, 0x74ee, 0x752e, 0x7547, 0x7548, 0x75a7, 0x75aa, 0x7679, 0x76c4, 0x7708, 0x7703, 0x7704, 0x7705, 0x770a, 0x76f7, 0x76fb, 0x76fa, 0x77e7, 0x77e8, 0x7806, 0x7811, 0x7812, 0x7805, 0x7810, 0x780f, 0x780e, 0x7809, 0x7803, 0x7813, 0x794a, 0x794c, 0x794b, 0x7945, 0x7944, 0x79d5, 0x79cd, 0x79cf, 0x79d6, 0x79ce, 0x7a80, /* 0xd0 */ 0x7a7e, 0x7ad1, 0x7b00, 0x7b01, 0x7c7a, 0x7c78, 0x7c79, 0x7c7f, 0x7c80, 0x7c81, 0x7d03, 0x7d08, 0x7d01, 0x7f58, 0x7f91, 0x7f8d, 0x7fbe, 0x8007, 0x800e, 0x800f, 0x8014, 0x8037, 0x80d8, 0x80c7, 0x80e0, 0x80d1, 0x80c8, 0x80c2, 0x80d0, 0x80c5, 0x80e3, 0x80d9, 0x80dc, 0x80ca, 0x80d5, 0x80c9, 0x80cf, 0x80d7, 0x80e6, 0x80cd, 0x81ff, 0x8221, 0x8294, 0x82d9, 0x82fe, 0x82f9, 0x8307, 0x82e8, 0x8300, 0x82d5, 0x833a, 0x82eb, 0x82d6, 0x82f4, 0x82ec, 0x82e1, 0x82f2, 0x82f5, 0x830c, 0x82fb, 0x82f6, 0x82f0, 0x82ea, 0x82e4, 0x82e0, 0x82fa, 0x82f3, 0x82ed, 0x8677, 0x8674, 0x867c, 0x8673, 0x8841, 0x884e, 0x8867, 0x886a, 0x8869, 0x89d3, 0x8a04, 0x8a07, 0x8d72, 0x8fe3, 0x8fe1, 0x8fee, 0x8fe0, 0x90f1, 0x90bd, 0x90bf, 0x90d5, 0x90c5, 0x90be, 0x90c7, 0x90cb, 0x90c8, 0x91d4, 0x91d3, 0x9654, 0x964f, 0x9651, 0x9653, 0x964a, 0x964e, 0x501e, 0x5005, 0x5007, 0x5013, 0x5022, 0x5030, 0x501b, 0x4ff5, 0x4ff4, 0x5033, 0x5037, 0x502c, 0x4ff6, 0x4ff7, 0x5017, 0x501c, 0x5020, 0x5027, 0x5035, 0x502f, 0x5031, 0x500e, 0x515a, 0x5194, 0x5193, 0x51ca, 0x51c4, 0x51c5, 0x51c8, 0x51ce, 0x5261, 0x525a, 0x5252, 0x525e, 0x525f, 0x5255, 0x5262, 0x52cd, 0x530e, 0x539e, 0x5526, 0x54e2, 0x5517, 0x5512, 0x54e7, 0x54f3, 0x54e4, 0x551a, 0x54ff, 0x5504, 0x5508, 0x54eb, 0x5511, 0x5505, 0x54f1, /* 0xd1 */ 0x550a, 0x54fb, 0x54f7, 0x54f8, 0x54e0, 0x550e, 0x5503, 0x550b, 0x5701, 0x5702, 0x57cc, 0x5832, 0x57d5, 0x57d2, 0x57ba, 0x57c6, 0x57bd, 0x57bc, 0x57b8, 0x57b6, 0x57bf, 0x57c7, 0x57d0, 0x57b9, 0x57c1, 0x590e, 0x594a, 0x5a19, 0x5a16, 0x5a2d, 0x5a2e, 0x5a15, 0x5a0f, 0x5a17, 0x5a0a, 0x5a1e, 0x5a33, 0x5b6c, 0x5ba7, 0x5bad, 0x5bac, 0x5c03, 0x5c56, 0x5c54, 0x5cec, 0x5cff, 0x5cee, 0x5cf1, 0x5cf7, 0x5d00, 0x5cf9, 0x5e29, 0x5e28, 0x5ea8, 0x5eae, 0x5eaa, 0x5eac, 0x5f33, 0x5f30, 0x5f67, 0x605d, 0x605a, 0x6067, 0x6041, 0x60a2, 0x6088, 0x6080, 0x6092, 0x6081, 0x609d, 0x6083, 0x6095, 0x609b, 0x6097, 0x6087, 0x609c, 0x608e, 0x6219, 0x6246, 0x62f2, 0x6310, 0x6356, 0x632c, 0x6344, 0x6345, 0x6336, 0x6343, 0x63e4, 0x6339, 0x634b, 0x634a, 0x633c, 0x6329, 0x6341, 0x6334, 0x6358, 0x6354, 0x6359, 0x632d, 0x6347, 0x6333, 0x635a, 0x6351, 0x6338, 0x6357, 0x6340, 0x6348, 0x654a, 0x6546, 0x65c6, 0x65c3, 0x65c4, 0x65c2, 0x664a, 0x665f, 0x6647, 0x6651, 0x6712, 0x6713, 0x681f, 0x681a, 0x6849, 0x6832, 0x6833, 0x683b, 0x684b, 0x684f, 0x6816, 0x6831, 0x681c, 0x6835, 0x682b, 0x682d, 0x682f, 0x684e, 0x6844, 0x6834, 0x681d, 0x6812, 0x6814, 0x6826, 0x6828, 0x682e, 0x684d, 0x683a, 0x6825, 0x6820, 0x6b2c, 0x6b2f, 0x6b2d, 0x6b31, 0x6b34, 0x6b6d, 0x8082, 0x6b88, 0x6be6, 0x6be4, /* 0xd2 */ 0x6be8, 0x6be3, 0x6be2, 0x6be7, 0x6c25, 0x6d7a, 0x6d63, 0x6d64, 0x6d76, 0x6d0d, 0x6d61, 0x6d92, 0x6d58, 0x6d62, 0x6d6d, 0x6d6f, 0x6d91, 0x6d8d, 0x6def, 0x6d7f, 0x6d86, 0x6d5e, 0x6d67, 0x6d60, 0x6d97, 0x6d70, 0x6d7c, 0x6d5f, 0x6d82, 0x6d98, 0x6d2f, 0x6d68, 0x6d8b, 0x6d7e, 0x6d80, 0x6d84, 0x6d16, 0x6d83, 0x6d7b, 0x6d7d, 0x6d75, 0x6d90, 0x70dc, 0x70d3, 0x70d1, 0x70dd, 0x70cb, 0x7f39, 0x70e2, 0x70d7, 0x70d2, 0x70de, 0x70e0, 0x70d4, 0x70cd, 0x70c5, 0x70c6, 0x70c7, 0x70da, 0x70ce, 0x70e1, 0x7242, 0x7278, 0x7277, 0x7276, 0x7300, 0x72fa, 0x72f4, 0x72fe, 0x72f6, 0x72f3, 0x72fb, 0x7301, 0x73d3, 0x73d9, 0x73e5, 0x73d6, 0x73bc, 0x73e7, 0x73e3, 0x73e9, 0x73dc, 0x73d2, 0x73db, 0x73d4, 0x73dd, 0x73da, 0x73d7, 0x73d8, 0x73e8, 0x74de, 0x74df, 0x74f4, 0x74f5, 0x7521, 0x755b, 0x755f, 0x75b0, 0x75c1, 0x75bb, 0x75c4, 0x75c0, 0x75bf, 0x75b6, 0x75ba, 0x768a, 0x76c9, 0x771d, 0x771b, 0x7710, 0x7713, 0x7712, 0x7723, 0x7711, 0x7715, 0x7719, 0x771a, 0x7722, 0x7727, 0x7823, 0x782c, 0x7822, 0x7835, 0x782f, 0x7828, 0x782e, 0x782b, 0x7821, 0x7829, 0x7833, 0x782a, 0x7831, 0x7954, 0x795b, 0x794f, 0x795c, 0x7953, 0x7952, 0x7951, 0x79eb, 0x79ec, 0x79e0, 0x79ee, 0x79ed, 0x79ea, 0x79dc, 0x79de, 0x79dd, 0x7a86, 0x7a89, 0x7a85, 0x7a8b, 0x7a8c, 0x7a8a, 0x7a87, 0x7ad8, 0x7b10, /* 0xd3 */ 0x7b04, 0x7b13, 0x7b05, 0x7b0f, 0x7b08, 0x7b0a, 0x7b0e, 0x7b09, 0x7b12, 0x7c84, 0x7c91, 0x7c8a, 0x7c8c, 0x7c88, 0x7c8d, 0x7c85, 0x7d1e, 0x7d1d, 0x7d11, 0x7d0e, 0x7d18, 0x7d16, 0x7d13, 0x7d1f, 0x7d12, 0x7d0f, 0x7d0c, 0x7f5c, 0x7f61, 0x7f5e, 0x7f60, 0x7f5d, 0x7f5b, 0x7f96, 0x7f92, 0x7fc3, 0x7fc2, 0x7fc0, 0x8016, 0x803e, 0x8039, 0x80fa, 0x80f2, 0x80f9, 0x80f5, 0x8101, 0x80fb, 0x8100, 0x8201, 0x822f, 0x8225, 0x8333, 0x832d, 0x8344, 0x8319, 0x8351, 0x8325, 0x8356, 0x833f, 0x8341, 0x8326, 0x831c, 0x8322, 0x8342, 0x834e, 0x831b, 0x832a, 0x8308, 0x833c, 0x834d, 0x8316, 0x8324, 0x8320, 0x8337, 0x832f, 0x8329, 0x8347, 0x8345, 0x834c, 0x8353, 0x831e, 0x832c, 0x834b, 0x8327, 0x8348, 0x8653, 0x8652, 0x86a2, 0x86a8, 0x8696, 0x868d, 0x8691, 0x869e, 0x8687, 0x8697, 0x8686, 0x868b, 0x869a, 0x8685, 0x86a5, 0x8699, 0x86a1, 0x86a7, 0x8695, 0x8698, 0x868e, 0x869d, 0x8690, 0x8694, 0x8843, 0x8844, 0x886d, 0x8875, 0x8876, 0x8872, 0x8880, 0x8871, 0x887f, 0x886f, 0x8883, 0x887e, 0x8874, 0x887c, 0x8a12, 0x8c47, 0x8c57, 0x8c7b, 0x8ca4, 0x8ca3, 0x8d76, 0x8d78, 0x8db5, 0x8db7, 0x8db6, 0x8ed1, 0x8ed3, 0x8ffe, 0x8ff5, 0x9002, 0x8fff, 0x8ffb, 0x9004, 0x8ffc, 0x8ff6, 0x90d6, 0x90e0, 0x90d9, 0x90da, 0x90e3, 0x90df, 0x90e5, 0x90d8, 0x90db, 0x90d7, 0x90dc, 0x90e4, 0x9150, /* 0xd4 */ 0x914e, 0x914f, 0x91d5, 0x91e2, 0x91da, 0x965c, 0x965f, 0x96bc, 0x98e3, 0x9adf, 0x9b2f, 0x4e7f, 0x5070, 0x506a, 0x5061, 0x505e, 0x5060, 0x5053, 0x504b, 0x505d, 0x5072, 0x5048, 0x504d, 0x5041, 0x505b, 0x504a, 0x5062, 0x5015, 0x5045, 0x505f, 0x5069, 0x506b, 0x5063, 0x5064, 0x5046, 0x5040, 0x506e, 0x5073, 0x5057, 0x5051, 0x51d0, 0x526b, 0x526d, 0x526c, 0x526e, 0x52d6, 0x52d3, 0x532d, 0x539c, 0x5575, 0x5576, 0x553c, 0x554d, 0x5550, 0x5534, 0x552a, 0x5551, 0x5562, 0x5536, 0x5535, 0x5530, 0x5552, 0x5545, 0x550c, 0x5532, 0x5565, 0x554e, 0x5539, 0x5548, 0x552d, 0x553b, 0x5540, 0x554b, 0x570a, 0x5707, 0x57fb, 0x5814, 0x57e2, 0x57f6, 0x57dc, 0x57f4, 0x5800, 0x57ed, 0x57fd, 0x5808, 0x57f8, 0x580b, 0x57f3, 0x57cf, 0x5807, 0x57ee, 0x57e3, 0x57f2, 0x57e5, 0x57ec, 0x57e1, 0x580e, 0x57fc, 0x5810, 0x57e7, 0x5801, 0x580c, 0x57f1, 0x57e9, 0x57f0, 0x580d, 0x5804, 0x595c, 0x5a60, 0x5a58, 0x5a55, 0x5a67, 0x5a5e, 0x5a38, 0x5a35, 0x5a6d, 0x5a50, 0x5a5f, 0x5a65, 0x5a6c, 0x5a53, 0x5a64, 0x5a57, 0x5a43, 0x5a5d, 0x5a52, 0x5a44, 0x5a5b, 0x5a48, 0x5a8e, 0x5a3e, 0x5a4d, 0x5a39, 0x5a4c, 0x5a70, 0x5a69, 0x5a47, 0x5a51, 0x5a56, 0x5a42, 0x5a5c, 0x5b72, 0x5b6e, 0x5bc1, 0x5bc0, 0x5c59, 0x5d1e, 0x5d0b, 0x5d1d, 0x5d1a, 0x5d20, 0x5d0c, 0x5d28, 0x5d0d, 0x5d26, 0x5d25, 0x5d0f, /* 0xd5 */ 0x5d30, 0x5d12, 0x5d23, 0x5d1f, 0x5d2e, 0x5e3e, 0x5e34, 0x5eb1, 0x5eb4, 0x5eb9, 0x5eb2, 0x5eb3, 0x5f36, 0x5f38, 0x5f9b, 0x5f96, 0x5f9f, 0x608a, 0x6090, 0x6086, 0x60be, 0x60b0, 0x60ba, 0x60d3, 0x60d4, 0x60cf, 0x60e4, 0x60d9, 0x60dd, 0x60c8, 0x60b1, 0x60db, 0x60b7, 0x60ca, 0x60bf, 0x60c3, 0x60cd, 0x60c0, 0x6332, 0x6365, 0x638a, 0x6382, 0x637d, 0x63bd, 0x639e, 0x63ad, 0x639d, 0x6397, 0x63ab, 0x638e, 0x636f, 0x6387, 0x6390, 0x636e, 0x63af, 0x6375, 0x639c, 0x636d, 0x63ae, 0x637c, 0x63a4, 0x633b, 0x639f, 0x6378, 0x6385, 0x6381, 0x6391, 0x638d, 0x6370, 0x6553, 0x65cd, 0x6665, 0x6661, 0x665b, 0x6659, 0x665c, 0x6662, 0x6718, 0x6879, 0x6887, 0x6890, 0x689c, 0x686d, 0x686e, 0x68ae, 0x68ab, 0x6956, 0x686f, 0x68a3, 0x68ac, 0x68a9, 0x6875, 0x6874, 0x68b2, 0x688f, 0x6877, 0x6892, 0x687c, 0x686b, 0x6872, 0x68aa, 0x6880, 0x6871, 0x687e, 0x689b, 0x6896, 0x688b, 0x68a0, 0x6889, 0x68a4, 0x6878, 0x687b, 0x6891, 0x688c, 0x688a, 0x687d, 0x6b36, 0x6b33, 0x6b37, 0x6b38, 0x6b91, 0x6b8f, 0x6b8d, 0x6b8e, 0x6b8c, 0x6c2a, 0x6dc0, 0x6dab, 0x6db4, 0x6db3, 0x6e74, 0x6dac, 0x6de9, 0x6de2, 0x6db7, 0x6df6, 0x6dd4, 0x6e00, 0x6dc8, 0x6de0, 0x6ddf, 0x6dd6, 0x6dbe, 0x6de5, 0x6ddc, 0x6ddd, 0x6ddb, 0x6df4, 0x6dca, 0x6dbd, 0x6ded, 0x6df0, 0x6dba, 0x6dd5, 0x6dc2, 0x6dcf, 0x6dc9, /* 0xd6 */ 0x6dd0, 0x6df2, 0x6dd3, 0x6dfd, 0x6dd7, 0x6dcd, 0x6de3, 0x6dbb, 0x70fa, 0x710d, 0x70f7, 0x7117, 0x70f4, 0x710c, 0x70f0, 0x7104, 0x70f3, 0x7110, 0x70fc, 0x70ff, 0x7106, 0x7113, 0x7100, 0x70f8, 0x70f6, 0x710b, 0x7102, 0x710e, 0x727e, 0x727b, 0x727c, 0x727f, 0x731d, 0x7317, 0x7307, 0x7311, 0x7318, 0x730a, 0x7308, 0x72ff, 0x730f, 0x731e, 0x7388, 0x73f6, 0x73f8, 0x73f5, 0x7404, 0x7401, 0x73fd, 0x7407, 0x7400, 0x73fa, 0x73fc, 0x73ff, 0x740c, 0x740b, 0x73f4, 0x7408, 0x7564, 0x7563, 0x75ce, 0x75d2, 0x75cf, 0x75cb, 0x75cc, 0x75d1, 0x75d0, 0x768f, 0x7689, 0x76d3, 0x7739, 0x772f, 0x772d, 0x7731, 0x7732, 0x7734, 0x7733, 0x773d, 0x7725, 0x773b, 0x7735, 0x7848, 0x7852, 0x7849, 0x784d, 0x784a, 0x784c, 0x7826, 0x7845, 0x7850, 0x7964, 0x7967, 0x7969, 0x796a, 0x7963, 0x796b, 0x7961, 0x79bb, 0x79fa, 0x79f8, 0x79f6, 0x79f7, 0x7a8f, 0x7a94, 0x7a90, 0x7b35, 0x7b47, 0x7b34, 0x7b25, 0x7b30, 0x7b22, 0x7b24, 0x7b33, 0x7b18, 0x7b2a, 0x7b1d, 0x7b31, 0x7b2b, 0x7b2d, 0x7b2f, 0x7b32, 0x7b38, 0x7b1a, 0x7b23, 0x7c94, 0x7c98, 0x7c96, 0x7ca3, 0x7d35, 0x7d3d, 0x7d38, 0x7d36, 0x7d3a, 0x7d45, 0x7d2c, 0x7d29, 0x7d41, 0x7d47, 0x7d3e, 0x7d3f, 0x7d4a, 0x7d3b, 0x7d28, 0x7f63, 0x7f95, 0x7f9c, 0x7f9d, 0x7f9b, 0x7fca, 0x7fcb, 0x7fcd, 0x7fd0, 0x7fd1, 0x7fc7, 0x7fcf, 0x7fc9, 0x801f, /* 0xd7 */ 0x801e, 0x801b, 0x8047, 0x8043, 0x8048, 0x8118, 0x8125, 0x8119, 0x811b, 0x812d, 0x811f, 0x812c, 0x811e, 0x8121, 0x8115, 0x8127, 0x811d, 0x8122, 0x8211, 0x8238, 0x8233, 0x823a, 0x8234, 0x8232, 0x8274, 0x8390, 0x83a3, 0x83a8, 0x838d, 0x837a, 0x8373, 0x83a4, 0x8374, 0x838f, 0x8381, 0x8395, 0x8399, 0x8375, 0x8394, 0x83a9, 0x837d, 0x8383, 0x838c, 0x839d, 0x839b, 0x83aa, 0x838b, 0x837e, 0x83a5, 0x83af, 0x8388, 0x8397, 0x83b0, 0x837f, 0x83a6, 0x8387, 0x83ae, 0x8376, 0x839a, 0x8659, 0x8656, 0x86bf, 0x86b7, 0x86c2, 0x86c1, 0x86c5, 0x86ba, 0x86b0, 0x86c8, 0x86b9, 0x86b3, 0x86b8, 0x86cc, 0x86b4, 0x86bb, 0x86bc, 0x86c3, 0x86bd, 0x86be, 0x8852, 0x8889, 0x8895, 0x88a8, 0x88a2, 0x88aa, 0x889a, 0x8891, 0x88a1, 0x889f, 0x8898, 0x88a7, 0x8899, 0x889b, 0x8897, 0x88a4, 0x88ac, 0x888c, 0x8893, 0x888e, 0x8982, 0x89d6, 0x89d9, 0x89d5, 0x8a30, 0x8a27, 0x8a2c, 0x8a1e, 0x8c39, 0x8c3b, 0x8c5c, 0x8c5d, 0x8c7d, 0x8ca5, 0x8d7d, 0x8d7b, 0x8d79, 0x8dbc, 0x8dc2, 0x8db9, 0x8dbf, 0x8dc1, 0x8ed8, 0x8ede, 0x8edd, 0x8edc, 0x8ed7, 0x8ee0, 0x8ee1, 0x9024, 0x900b, 0x9011, 0x901c, 0x900c, 0x9021, 0x90ef, 0x90ea, 0x90f0, 0x90f4, 0x90f2, 0x90f3, 0x90d4, 0x90eb, 0x90ec, 0x90e9, 0x9156, 0x9158, 0x915a, 0x9153, 0x9155, 0x91ec, 0x91f4, 0x91f1, 0x91f3, 0x91f8, 0x91e4, 0x91f9, 0x91ea, /* 0xd8 */ 0x91eb, 0x91f7, 0x91e8, 0x91ee, 0x957a, 0x9586, 0x9588, 0x967c, 0x966d, 0x966b, 0x9671, 0x966f, 0x96bf, 0x976a, 0x9804, 0x98e5, 0x9997, 0x509b, 0x5095, 0x5094, 0x509e, 0x508b, 0x50a3, 0x5083, 0x508c, 0x508e, 0x509d, 0x5068, 0x509c, 0x5092, 0x5082, 0x5087, 0x515f, 0x51d4, 0x5312, 0x5311, 0x53a4, 0x53a7, 0x5591, 0x55a8, 0x55a5, 0x55ad, 0x5577, 0x5645, 0x55a2, 0x5593, 0x5588, 0x558f, 0x55b5, 0x5581, 0x55a3, 0x5592, 0x55a4, 0x557d, 0x558c, 0x55a6, 0x557f, 0x5595, 0x55a1, 0x558e, 0x570c, 0x5829, 0x5837, 0x5819, 0x581e, 0x5827, 0x5823, 0x5828, 0x57f5, 0x5848, 0x5825, 0x581c, 0x581b, 0x5833, 0x583f, 0x5836, 0x582e, 0x5839, 0x5838, 0x582d, 0x582c, 0x583b, 0x5961, 0x5aaf, 0x5a94, 0x5a9f, 0x5a7a, 0x5aa2, 0x5a9e, 0x5a78, 0x5aa6, 0x5a7c, 0x5aa5, 0x5aac, 0x5a95, 0x5aae, 0x5a37, 0x5a84, 0x5a8a, 0x5a97, 0x5a83, 0x5a8b, 0x5aa9, 0x5a7b, 0x5a7d, 0x5a8c, 0x5a9c, 0x5a8f, 0x5a93, 0x5a9d, 0x5bea, 0x5bcd, 0x5bcb, 0x5bd4, 0x5bd1, 0x5bca, 0x5bce, 0x5c0c, 0x5c30, 0x5d37, 0x5d43, 0x5d6b, 0x5d41, 0x5d4b, 0x5d3f, 0x5d35, 0x5d51, 0x5d4e, 0x5d55, 0x5d33, 0x5d3a, 0x5d52, 0x5d3d, 0x5d31, 0x5d59, 0x5d42, 0x5d39, 0x5d49, 0x5d38, 0x5d3c, 0x5d32, 0x5d36, 0x5d40, 0x5d45, 0x5e44, 0x5e41, 0x5f58, 0x5fa6, 0x5fa5, 0x5fab, 0x60c9, 0x60b9, 0x60cc, 0x60e2, 0x60ce, 0x60c4, 0x6114, /* 0xd9 */ 0x60f2, 0x610a, 0x6116, 0x6105, 0x60f5, 0x6113, 0x60f8, 0x60fc, 0x60fe, 0x60c1, 0x6103, 0x6118, 0x611d, 0x6110, 0x60ff, 0x6104, 0x610b, 0x624a, 0x6394, 0x63b1, 0x63b0, 0x63ce, 0x63e5, 0x63e8, 0x63ef, 0x63c3, 0x649d, 0x63f3, 0x63ca, 0x63e0, 0x63f6, 0x63d5, 0x63f2, 0x63f5, 0x6461, 0x63df, 0x63be, 0x63dd, 0x63dc, 0x63c4, 0x63d8, 0x63d3, 0x63c2, 0x63c7, 0x63cc, 0x63cb, 0x63c8, 0x63f0, 0x63d7, 0x63d9, 0x6532, 0x6567, 0x656a, 0x6564, 0x655c, 0x6568, 0x6565, 0x658c, 0x659d, 0x659e, 0x65ae, 0x65d0, 0x65d2, 0x667c, 0x666c, 0x667b, 0x6680, 0x6671, 0x6679, 0x666a, 0x6672, 0x6701, 0x690c, 0x68d3, 0x6904, 0x68dc, 0x692a, 0x68ec, 0x68ea, 0x68f1, 0x690f, 0x68d6, 0x68f7, 0x68eb, 0x68e4, 0x68f6, 0x6913, 0x6910, 0x68f3, 0x68e1, 0x6907, 0x68cc, 0x6908, 0x6970, 0x68b4, 0x6911, 0x68ef, 0x68c6, 0x6914, 0x68f8, 0x68d0, 0x68fd, 0x68fc, 0x68e8, 0x690b, 0x690a, 0x6917, 0x68ce, 0x68c8, 0x68dd, 0x68de, 0x68e6, 0x68f4, 0x68d1, 0x6906, 0x68d4, 0x68e9, 0x6915, 0x6925, 0x68c7, 0x6b39, 0x6b3b, 0x6b3f, 0x6b3c, 0x6b94, 0x6b97, 0x6b99, 0x6b95, 0x6bbd, 0x6bf0, 0x6bf2, 0x6bf3, 0x6c30, 0x6dfc, 0x6e46, 0x6e47, 0x6e1f, 0x6e49, 0x6e88, 0x6e3c, 0x6e3d, 0x6e45, 0x6e62, 0x6e2b, 0x6e3f, 0x6e41, 0x6e5d, 0x6e73, 0x6e1c, 0x6e33, 0x6e4b, 0x6e40, 0x6e51, 0x6e3b, 0x6e03, 0x6e2e, 0x6e5e, /* 0xda */ 0x6e68, 0x6e5c, 0x6e61, 0x6e31, 0x6e28, 0x6e60, 0x6e71, 0x6e6b, 0x6e39, 0x6e22, 0x6e30, 0x6e53, 0x6e65, 0x6e27, 0x6e78, 0x6e64, 0x6e77, 0x6e55, 0x6e79, 0x6e52, 0x6e66, 0x6e35, 0x6e36, 0x6e5a, 0x7120, 0x711e, 0x712f, 0x70fb, 0x712e, 0x7131, 0x7123, 0x7125, 0x7122, 0x7132, 0x711f, 0x7128, 0x713a, 0x711b, 0x724b, 0x725a, 0x7288, 0x7289, 0x7286, 0x7285, 0x728b, 0x7312, 0x730b, 0x7330, 0x7322, 0x7331, 0x7333, 0x7327, 0x7332, 0x732d, 0x7326, 0x7323, 0x7335, 0x730c, 0x742e, 0x742c, 0x7430, 0x742b, 0x7416, 0x741a, 0x7421, 0x742d, 0x7431, 0x7424, 0x7423, 0x741d, 0x7429, 0x7420, 0x7432, 0x74fb, 0x752f, 0x756f, 0x756c, 0x75e7, 0x75da, 0x75e1, 0x75e6, 0x75dd, 0x75df, 0x75e4, 0x75d7, 0x7695, 0x7692, 0x76da, 0x7746, 0x7747, 0x7744, 0x774d, 0x7745, 0x774a, 0x774e, 0x774b, 0x774c, 0x77de, 0x77ec, 0x7860, 0x7864, 0x7865, 0x785c, 0x786d, 0x7871, 0x786a, 0x786e, 0x7870, 0x7869, 0x7868, 0x785e, 0x7862, 0x7974, 0x7973, 0x7972, 0x7970, 0x7a02, 0x7a0a, 0x7a03, 0x7a0c, 0x7a04, 0x7a99, 0x7ae6, 0x7ae4, 0x7b4a, 0x7b3b, 0x7b44, 0x7b48, 0x7b4c, 0x7b4e, 0x7b40, 0x7b58, 0x7b45, 0x7ca2, 0x7c9e, 0x7ca8, 0x7ca1, 0x7d58, 0x7d6f, 0x7d63, 0x7d53, 0x7d56, 0x7d67, 0x7d6a, 0x7d4f, 0x7d6d, 0x7d5c, 0x7d6b, 0x7d52, 0x7d54, 0x7d69, 0x7d51, 0x7d5f, 0x7d4e, 0x7f3e, 0x7f3f, 0x7f65, /* 0xdb */ 0x7f66, 0x7fa2, 0x7fa0, 0x7fa1, 0x7fd7, 0x8051, 0x804f, 0x8050, 0x80fe, 0x80d4, 0x8143, 0x814a, 0x8152, 0x814f, 0x8147, 0x813d, 0x814d, 0x813a, 0x81e6, 0x81ee, 0x81f7, 0x81f8, 0x81f9, 0x8204, 0x823c, 0x823d, 0x823f, 0x8275, 0x833b, 0x83cf, 0x83f9, 0x8423, 0x83c0, 0x83e8, 0x8412, 0x83e7, 0x83e4, 0x83fc, 0x83f6, 0x8410, 0x83c6, 0x83c8, 0x83eb, 0x83e3, 0x83bf, 0x8401, 0x83dd, 0x83e5, 0x83d8, 0x83ff, 0x83e1, 0x83cb, 0x83ce, 0x83d6, 0x83f5, 0x83c9, 0x8409, 0x840f, 0x83de, 0x8411, 0x8406, 0x83c2, 0x83f3, 0x83d5, 0x83fa, 0x83c7, 0x83d1, 0x83ea, 0x8413, 0x83c3, 0x83ec, 0x83ee, 0x83c4, 0x83fb, 0x83d7, 0x83e2, 0x841b, 0x83db, 0x83fe, 0x86d8, 0x86e2, 0x86e6, 0x86d3, 0x86e3, 0x86da, 0x86ea, 0x86dd, 0x86eb, 0x86dc, 0x86ec, 0x86e9, 0x86d7, 0x86e8, 0x86d1, 0x8848, 0x8856, 0x8855, 0x88ba, 0x88d7, 0x88b9, 0x88b8, 0x88c0, 0x88be, 0x88b6, 0x88bc, 0x88b7, 0x88bd, 0x88b2, 0x8901, 0x88c9, 0x8995, 0x8998, 0x8997, 0x89dd, 0x89da, 0x89db, 0x8a4e, 0x8a4d, 0x8a39, 0x8a59, 0x8a40, 0x8a57, 0x8a58, 0x8a44, 0x8a45, 0x8a52, 0x8a48, 0x8a51, 0x8a4a, 0x8a4c, 0x8a4f, 0x8c5f, 0x8c81, 0x8c80, 0x8cba, 0x8cbe, 0x8cb0, 0x8cb9, 0x8cb5, 0x8d84, 0x8d80, 0x8d89, 0x8dd8, 0x8dd3, 0x8dcd, 0x8dc7, 0x8dd6, 0x8ddc, 0x8dcf, 0x8dd5, 0x8dd9, 0x8dc8, 0x8dd7, 0x8dc5, 0x8eef, 0x8ef7, 0x8efa, /* 0xdc */ 0x8ef9, 0x8ee6, 0x8eee, 0x8ee5, 0x8ef5, 0x8ee7, 0x8ee8, 0x8ef6, 0x8eeb, 0x8ef1, 0x8eec, 0x8ef4, 0x8ee9, 0x902d, 0x9034, 0x902f, 0x9106, 0x912c, 0x9104, 0x90ff, 0x90fc, 0x9108, 0x90f9, 0x90fb, 0x9101, 0x9100, 0x9107, 0x9105, 0x9103, 0x9161, 0x9164, 0x915f, 0x9162, 0x9160, 0x9201, 0x920a, 0x9225, 0x9203, 0x921a, 0x9226, 0x920f, 0x920c, 0x9200, 0x9212, 0x91ff, 0x91fd, 0x9206, 0x9204, 0x9227, 0x9202, 0x921c, 0x9224, 0x9219, 0x9217, 0x9205, 0x9216, 0x957b, 0x958d, 0x958c, 0x9590, 0x9687, 0x967e, 0x9688, 0x9689, 0x9683, 0x9680, 0x96c2, 0x96c8, 0x96c3, 0x96f1, 0x96f0, 0x976c, 0x9770, 0x976e, 0x9807, 0x98a9, 0x98eb, 0x9ce6, 0x9ef9, 0x4e83, 0x4e84, 0x4eb6, 0x50bd, 0x50bf, 0x50c6, 0x50ae, 0x50c4, 0x50ca, 0x50b4, 0x50c8, 0x50c2, 0x50b0, 0x50c1, 0x50ba, 0x50b1, 0x50cb, 0x50c9, 0x50b6, 0x50b8, 0x51d7, 0x527a, 0x5278, 0x527b, 0x527c, 0x55c3, 0x55db, 0x55cc, 0x55d0, 0x55cb, 0x55ca, 0x55dd, 0x55c0, 0x55d4, 0x55c4, 0x55e9, 0x55bf, 0x55d2, 0x558d, 0x55cf, 0x55d5, 0x55e2, 0x55d6, 0x55c8, 0x55f2, 0x55cd, 0x55d9, 0x55c2, 0x5714, 0x5853, 0x5868, 0x5864, 0x584f, 0x584d, 0x5849, 0x586f, 0x5855, 0x584e, 0x585d, 0x5859, 0x5865, 0x585b, 0x583d, 0x5863, 0x5871, 0x58fc, 0x5ac7, 0x5ac4, 0x5acb, 0x5aba, 0x5ab8, 0x5ab1, 0x5ab5, 0x5ab0, 0x5abf, 0x5ac8, 0x5abb, 0x5ac6, /* 0xdd */ 0x5ab7, 0x5ac0, 0x5aca, 0x5ab4, 0x5ab6, 0x5acd, 0x5ab9, 0x5a90, 0x5bd6, 0x5bd8, 0x5bd9, 0x5c1f, 0x5c33, 0x5d71, 0x5d63, 0x5d4a, 0x5d65, 0x5d72, 0x5d6c, 0x5d5e, 0x5d68, 0x5d67, 0x5d62, 0x5df0, 0x5e4f, 0x5e4e, 0x5e4a, 0x5e4d, 0x5e4b, 0x5ec5, 0x5ecc, 0x5ec6, 0x5ecb, 0x5ec7, 0x5f40, 0x5faf, 0x5fad, 0x60f7, 0x6149, 0x614a, 0x612b, 0x6145, 0x6136, 0x6132, 0x612e, 0x6146, 0x612f, 0x614f, 0x6129, 0x6140, 0x6220, 0x9168, 0x6223, 0x6225, 0x6224, 0x63c5, 0x63f1, 0x63eb, 0x6410, 0x6412, 0x6409, 0x6420, 0x6424, 0x6433, 0x6443, 0x641f, 0x6415, 0x6418, 0x6439, 0x6437, 0x6422, 0x6423, 0x640c, 0x6426, 0x6430, 0x6428, 0x6441, 0x6435, 0x642f, 0x640a, 0x641a, 0x6440, 0x6425, 0x6427, 0x640b, 0x63e7, 0x641b, 0x642e, 0x6421, 0x640e, 0x656f, 0x6592, 0x65d3, 0x6686, 0x668c, 0x6695, 0x6690, 0x668b, 0x668a, 0x6699, 0x6694, 0x6678, 0x6720, 0x6966, 0x695f, 0x6938, 0x694e, 0x6962, 0x6971, 0x693f, 0x6945, 0x696a, 0x6939, 0x6942, 0x6957, 0x6959, 0x697a, 0x6948, 0x6949, 0x6935, 0x696c, 0x6933, 0x693d, 0x6965, 0x68f0, 0x6978, 0x6934, 0x6969, 0x6940, 0x696f, 0x6944, 0x6976, 0x6958, 0x6941, 0x6974, 0x694c, 0x693b, 0x694b, 0x6937, 0x695c, 0x694f, 0x6951, 0x6932, 0x6952, 0x692f, 0x697b, 0x693c, 0x6b46, 0x6b45, 0x6b43, 0x6b42, 0x6b48, 0x6b41, 0x6b9b, 0xfa0d, 0x6bfb, 0x6bfc, /* 0xde */ 0x6bf9, 0x6bf7, 0x6bf8, 0x6e9b, 0x6ed6, 0x6ec8, 0x6e8f, 0x6ec0, 0x6e9f, 0x6e93, 0x6e94, 0x6ea0, 0x6eb1, 0x6eb9, 0x6ec6, 0x6ed2, 0x6ebd, 0x6ec1, 0x6e9e, 0x6ec9, 0x6eb7, 0x6eb0, 0x6ecd, 0x6ea6, 0x6ecf, 0x6eb2, 0x6ebe, 0x6ec3, 0x6edc, 0x6ed8, 0x6e99, 0x6e92, 0x6e8e, 0x6e8d, 0x6ea4, 0x6ea1, 0x6ebf, 0x6eb3, 0x6ed0, 0x6eca, 0x6e97, 0x6eae, 0x6ea3, 0x7147, 0x7154, 0x7152, 0x7163, 0x7160, 0x7141, 0x715d, 0x7162, 0x7172, 0x7178, 0x716a, 0x7161, 0x7142, 0x7158, 0x7143, 0x714b, 0x7170, 0x715f, 0x7150, 0x7153, 0x7144, 0x714d, 0x715a, 0x724f, 0x728d, 0x728c, 0x7291, 0x7290, 0x728e, 0x733c, 0x7342, 0x733b, 0x733a, 0x7340, 0x734a, 0x7349, 0x7444, 0x744a, 0x744b, 0x7452, 0x7451, 0x7457, 0x7440, 0x744f, 0x7450, 0x744e, 0x7442, 0x7446, 0x744d, 0x7454, 0x74e1, 0x74ff, 0x74fe, 0x74fd, 0x751d, 0x7579, 0x7577, 0x6983, 0x75ef, 0x760f, 0x7603, 0x75f7, 0x75fe, 0x75fc, 0x75f9, 0x75f8, 0x7610, 0x75fb, 0x75f6, 0x75ed, 0x75f5, 0x75fd, 0x7699, 0x76b5, 0x76dd, 0x7755, 0x775f, 0x7760, 0x7752, 0x7756, 0x775a, 0x7769, 0x7767, 0x7754, 0x7759, 0x776d, 0x77e0, 0x7887, 0x789a, 0x7894, 0x788f, 0x7884, 0x7895, 0x7885, 0x7886, 0x78a1, 0x7883, 0x7879, 0x7899, 0x7880, 0x7896, 0x787b, 0x797c, 0x7982, 0x797d, 0x7979, 0x7a11, 0x7a18, 0x7a19, 0x7a12, 0x7a17, 0x7a15, 0x7a22, 0x7a13, /* 0xdf */ 0x7a1b, 0x7a10, 0x7aa3, 0x7aa2, 0x7a9e, 0x7aeb, 0x7b66, 0x7b64, 0x7b6d, 0x7b74, 0x7b69, 0x7b72, 0x7b65, 0x7b73, 0x7b71, 0x7b70, 0x7b61, 0x7b78, 0x7b76, 0x7b63, 0x7cb2, 0x7cb4, 0x7caf, 0x7d88, 0x7d86, 0x7d80, 0x7d8d, 0x7d7f, 0x7d85, 0x7d7a, 0x7d8e, 0x7d7b, 0x7d83, 0x7d7c, 0x7d8c, 0x7d94, 0x7d84, 0x7d7d, 0x7d92, 0x7f6d, 0x7f6b, 0x7f67, 0x7f68, 0x7f6c, 0x7fa6, 0x7fa5, 0x7fa7, 0x7fdb, 0x7fdc, 0x8021, 0x8164, 0x8160, 0x8177, 0x815c, 0x8169, 0x815b, 0x8162, 0x8172, 0x6721, 0x815e, 0x8176, 0x8167, 0x816f, 0x8144, 0x8161, 0x821d, 0x8249, 0x8244, 0x8240, 0x8242, 0x8245, 0x84f1, 0x843f, 0x8456, 0x8476, 0x8479, 0x848f, 0x848d, 0x8465, 0x8451, 0x8440, 0x8486, 0x8467, 0x8430, 0x844d, 0x847d, 0x845a, 0x8459, 0x8474, 0x8473, 0x845d, 0x8507, 0x845e, 0x8437, 0x843a, 0x8434, 0x847a, 0x8443, 0x8478, 0x8432, 0x8445, 0x8429, 0x83d9, 0x844b, 0x842f, 0x8442, 0x842d, 0x845f, 0x8470, 0x8439, 0x844e, 0x844c, 0x8452, 0x846f, 0x84c5, 0x848e, 0x843b, 0x8447, 0x8436, 0x8433, 0x8468, 0x847e, 0x8444, 0x842b, 0x8460, 0x8454, 0x846e, 0x8450, 0x870b, 0x8704, 0x86f7, 0x870c, 0x86fa, 0x86d6, 0x86f5, 0x874d, 0x86f8, 0x870e, 0x8709, 0x8701, 0x86f6, 0x870d, 0x8705, 0x88d6, 0x88cb, 0x88cd, 0x88ce, 0x88de, 0x88db, 0x88da, 0x88cc, 0x88d0, 0x8985, 0x899b, 0x89df, 0x89e5, 0x89e4, /* 0xe0 */ 0x89e1, 0x89e0, 0x89e2, 0x89dc, 0x89e6, 0x8a76, 0x8a86, 0x8a7f, 0x8a61, 0x8a3f, 0x8a77, 0x8a82, 0x8a84, 0x8a75, 0x8a83, 0x8a81, 0x8a74, 0x8a7a, 0x8c3c, 0x8c4b, 0x8c4a, 0x8c65, 0x8c64, 0x8c66, 0x8c86, 0x8c84, 0x8c85, 0x8ccc, 0x8d68, 0x8d69, 0x8d91, 0x8d8c, 0x8d8e, 0x8d8f, 0x8d8d, 0x8d93, 0x8d94, 0x8d90, 0x8d92, 0x8df0, 0x8de0, 0x8dec, 0x8df1, 0x8dee, 0x8dd0, 0x8de9, 0x8de3, 0x8de2, 0x8de7, 0x8df2, 0x8deb, 0x8df4, 0x8f06, 0x8eff, 0x8f01, 0x8f00, 0x8f05, 0x8f07, 0x8f08, 0x8f02, 0x8f0b, 0x9052, 0x903f, 0x9044, 0x9049, 0x903d, 0x9110, 0x910d, 0x910f, 0x9111, 0x9116, 0x9114, 0x910b, 0x910e, 0x916e, 0x916f, 0x9248, 0x9252, 0x9230, 0x923a, 0x9266, 0x9233, 0x9265, 0x925e, 0x9283, 0x922e, 0x924a, 0x9246, 0x926d, 0x926c, 0x924f, 0x9260, 0x9267, 0x926f, 0x9236, 0x9261, 0x9270, 0x9231, 0x9254, 0x9263, 0x9250, 0x9272, 0x924e, 0x9253, 0x924c, 0x9256, 0x9232, 0x959f, 0x959c, 0x959e, 0x959b, 0x9692, 0x9693, 0x9691, 0x9697, 0x96ce, 0x96fa, 0x96fd, 0x96f8, 0x96f5, 0x9773, 0x9777, 0x9778, 0x9772, 0x980f, 0x980d, 0x980e, 0x98ac, 0x98f6, 0x98f9, 0x99af, 0x99b2, 0x99b0, 0x99b5, 0x9aad, 0x9aab, 0x9b5b, 0x9cea, 0x9ced, 0x9ce7, 0x9e80, 0x9efd, 0x50e6, 0x50d4, 0x50d7, 0x50e8, 0x50f3, 0x50db, 0x50ea, 0x50dd, 0x50e4, 0x50d3, 0x50ec, 0x50f0, 0x50ef, 0x50e3, 0x50e0, /* 0xe1 */ 0x51d8, 0x5280, 0x5281, 0x52e9, 0x52eb, 0x5330, 0x53ac, 0x5627, 0x5615, 0x560c, 0x5612, 0x55fc, 0x560f, 0x561c, 0x5601, 0x5613, 0x5602, 0x55fa, 0x561d, 0x5604, 0x55ff, 0x55f9, 0x5889, 0x587c, 0x5890, 0x5898, 0x5886, 0x5881, 0x587f, 0x5874, 0x588b, 0x587a, 0x5887, 0x5891, 0x588e, 0x5876, 0x5882, 0x5888, 0x587b, 0x5894, 0x588f, 0x58fe, 0x596b, 0x5adc, 0x5aee, 0x5ae5, 0x5ad5, 0x5aea, 0x5ada, 0x5aed, 0x5aeb, 0x5af3, 0x5ae2, 0x5ae0, 0x5adb, 0x5aec, 0x5ade, 0x5add, 0x5ad9, 0x5ae8, 0x5adf, 0x5b77, 0x5be0, 0x5be3, 0x5c63, 0x5d82, 0x5d80, 0x5d7d, 0x5d86, 0x5d7a, 0x5d81, 0x5d77, 0x5d8a, 0x5d89, 0x5d88, 0x5d7e, 0x5d7c, 0x5d8d, 0x5d79, 0x5d7f, 0x5e58, 0x5e59, 0x5e53, 0x5ed8, 0x5ed1, 0x5ed7, 0x5ece, 0x5edc, 0x5ed5, 0x5ed9, 0x5ed2, 0x5ed4, 0x5f44, 0x5f43, 0x5f6f, 0x5fb6, 0x612c, 0x6128, 0x6141, 0x615e, 0x6171, 0x6173, 0x6152, 0x6153, 0x6172, 0x616c, 0x6180, 0x6174, 0x6154, 0x617a, 0x615b, 0x6165, 0x613b, 0x616a, 0x6161, 0x6156, 0x6229, 0x6227, 0x622b, 0x642b, 0x644d, 0x645b, 0x645d, 0x6474, 0x6476, 0x6472, 0x6473, 0x647d, 0x6475, 0x6466, 0x64a6, 0x644e, 0x6482, 0x645e, 0x645c, 0x644b, 0x6453, 0x6460, 0x6450, 0x647f, 0x643f, 0x646c, 0x646b, 0x6459, 0x6465, 0x6477, 0x6573, 0x65a0, 0x66a1, 0x66a0, 0x669f, 0x6705, 0x6704, 0x6722, 0x69b1, 0x69b6, 0x69c9, /* 0xe2 */ 0x69a0, 0x69ce, 0x6996, 0x69b0, 0x69ac, 0x69bc, 0x6991, 0x6999, 0x698e, 0x69a7, 0x698d, 0x69a9, 0x69be, 0x69af, 0x69bf, 0x69c4, 0x69bd, 0x69a4, 0x69d4, 0x69b9, 0x69ca, 0x699a, 0x69cf, 0x69b3, 0x6993, 0x69aa, 0x69a1, 0x699e, 0x69d9, 0x6997, 0x6990, 0x69c2, 0x69b5, 0x69a5, 0x69c6, 0x6b4a, 0x6b4d, 0x6b4b, 0x6b9e, 0x6b9f, 0x6ba0, 0x6bc3, 0x6bc4, 0x6bfe, 0x6ece, 0x6ef5, 0x6ef1, 0x6f03, 0x6f25, 0x6ef8, 0x6f37, 0x6efb, 0x6f2e, 0x6f09, 0x6f4e, 0x6f19, 0x6f1a, 0x6f27, 0x6f18, 0x6f3b, 0x6f12, 0x6eed, 0x6f0a, 0x6f36, 0x6f73, 0x6ef9, 0x6eee, 0x6f2d, 0x6f40, 0x6f30, 0x6f3c, 0x6f35, 0x6eeb, 0x6f07, 0x6f0e, 0x6f43, 0x6f05, 0x6efd, 0x6ef6, 0x6f39, 0x6f1c, 0x6efc, 0x6f3a, 0x6f1f, 0x6f0d, 0x6f1e, 0x6f08, 0x6f21, 0x7187, 0x7190, 0x7189, 0x7180, 0x7185, 0x7182, 0x718f, 0x717b, 0x7186, 0x7181, 0x7197, 0x7244, 0x7253, 0x7297, 0x7295, 0x7293, 0x7343, 0x734d, 0x7351, 0x734c, 0x7462, 0x7473, 0x7471, 0x7475, 0x7472, 0x7467, 0x746e, 0x7500, 0x7502, 0x7503, 0x757d, 0x7590, 0x7616, 0x7608, 0x760c, 0x7615, 0x7611, 0x760a, 0x7614, 0x76b8, 0x7781, 0x777c, 0x7785, 0x7782, 0x776e, 0x7780, 0x776f, 0x777e, 0x7783, 0x78b2, 0x78aa, 0x78b4, 0x78ad, 0x78a8, 0x787e, 0x78ab, 0x789e, 0x78a5, 0x78a0, 0x78ac, 0x78a2, 0x78a4, 0x7998, 0x798a, 0x798b, 0x7996, 0x7995, 0x7994, 0x7993, /* 0xe3 */ 0x7997, 0x7988, 0x7992, 0x7990, 0x7a2b, 0x7a4a, 0x7a30, 0x7a2f, 0x7a28, 0x7a26, 0x7aa8, 0x7aab, 0x7aac, 0x7aee, 0x7b88, 0x7b9c, 0x7b8a, 0x7b91, 0x7b90, 0x7b96, 0x7b8d, 0x7b8c, 0x7b9b, 0x7b8e, 0x7b85, 0x7b98, 0x5284, 0x7b99, 0x7ba4, 0x7b82, 0x7cbb, 0x7cbf, 0x7cbc, 0x7cba, 0x7da7, 0x7db7, 0x7dc2, 0x7da3, 0x7daa, 0x7dc1, 0x7dc0, 0x7dc5, 0x7d9d, 0x7dce, 0x7dc4, 0x7dc6, 0x7dcb, 0x7dcc, 0x7daf, 0x7db9, 0x7d96, 0x7dbc, 0x7d9f, 0x7da6, 0x7dae, 0x7da9, 0x7da1, 0x7dc9, 0x7f73, 0x7fe2, 0x7fe3, 0x7fe5, 0x7fde, 0x8024, 0x805d, 0x805c, 0x8189, 0x8186, 0x8183, 0x8187, 0x818d, 0x818c, 0x818b, 0x8215, 0x8497, 0x84a4, 0x84a1, 0x849f, 0x84ba, 0x84ce, 0x84c2, 0x84ac, 0x84ae, 0x84ab, 0x84b9, 0x84b4, 0x84c1, 0x84cd, 0x84aa, 0x849a, 0x84b1, 0x84d0, 0x849d, 0x84a7, 0x84bb, 0x84a2, 0x8494, 0x84c7, 0x84cc, 0x849b, 0x84a9, 0x84af, 0x84a8, 0x84d6, 0x8498, 0x84b6, 0x84cf, 0x84a0, 0x84d7, 0x84d4, 0x84d2, 0x84db, 0x84b0, 0x8491, 0x8661, 0x8733, 0x8723, 0x8728, 0x876b, 0x8740, 0x872e, 0x871e, 0x8721, 0x8719, 0x871b, 0x8743, 0x872c, 0x8741, 0x873e, 0x8746, 0x8720, 0x8732, 0x872a, 0x872d, 0x873c, 0x8712, 0x873a, 0x8731, 0x8735, 0x8742, 0x8726, 0x8727, 0x8738, 0x8724, 0x871a, 0x8730, 0x8711, 0x88f7, 0x88e7, 0x88f1, 0x88f2, 0x88fa, 0x88fe, 0x88ee, 0x88fc, 0x88f6, 0x88fb, /* 0xe4 */ 0x88f0, 0x88ec, 0x88eb, 0x899d, 0x89a1, 0x899f, 0x899e, 0x89e9, 0x89eb, 0x89e8, 0x8aab, 0x8a99, 0x8a8b, 0x8a92, 0x8a8f, 0x8a96, 0x8c3d, 0x8c68, 0x8c69, 0x8cd5, 0x8ccf, 0x8cd7, 0x8d96, 0x8e09, 0x8e02, 0x8dff, 0x8e0d, 0x8dfd, 0x8e0a, 0x8e03, 0x8e07, 0x8e06, 0x8e05, 0x8dfe, 0x8e00, 0x8e04, 0x8f10, 0x8f11, 0x8f0e, 0x8f0d, 0x9123, 0x911c, 0x9120, 0x9122, 0x911f, 0x911d, 0x911a, 0x9124, 0x9121, 0x911b, 0x917a, 0x9172, 0x9179, 0x9173, 0x92a5, 0x92a4, 0x9276, 0x929b, 0x927a, 0x92a0, 0x9294, 0x92aa, 0x928d, 0x92a6, 0x929a, 0x92ab, 0x9279, 0x9297, 0x927f, 0x92a3, 0x92ee, 0x928e, 0x9282, 0x9295, 0x92a2, 0x927d, 0x9288, 0x92a1, 0x928a, 0x9286, 0x928c, 0x9299, 0x92a7, 0x927e, 0x9287, 0x92a9, 0x929d, 0x928b, 0x922d, 0x969e, 0x96a1, 0x96ff, 0x9758, 0x977d, 0x977a, 0x977e, 0x9783, 0x9780, 0x9782, 0x977b, 0x9784, 0x9781, 0x977f, 0x97ce, 0x97cd, 0x9816, 0x98ad, 0x98ae, 0x9902, 0x9900, 0x9907, 0x999d, 0x999c, 0x99c3, 0x99b9, 0x99bb, 0x99ba, 0x99c2, 0x99bd, 0x99c7, 0x9ab1, 0x9ae3, 0x9ae7, 0x9b3e, 0x9b3f, 0x9b60, 0x9b61, 0x9b5f, 0x9cf1, 0x9cf2, 0x9cf5, 0x9ea7, 0x50ff, 0x5103, 0x5130, 0x50f8, 0x5106, 0x5107, 0x50f6, 0x50fe, 0x510b, 0x510c, 0x50fd, 0x510a, 0x528b, 0x528c, 0x52f1, 0x52ef, 0x5648, 0x5642, 0x564c, 0x5635, 0x5641, 0x564a, 0x5649, 0x5646, 0x5658, /* 0xe5 */ 0x565a, 0x5640, 0x5633, 0x563d, 0x562c, 0x563e, 0x5638, 0x562a, 0x563a, 0x571a, 0x58ab, 0x589d, 0x58b1, 0x58a0, 0x58a3, 0x58af, 0x58ac, 0x58a5, 0x58a1, 0x58ff, 0x5aff, 0x5af4, 0x5afd, 0x5af7, 0x5af6, 0x5b03, 0x5af8, 0x5b02, 0x5af9, 0x5b01, 0x5b07, 0x5b05, 0x5b0f, 0x5c67, 0x5d99, 0x5d97, 0x5d9f, 0x5d92, 0x5da2, 0x5d93, 0x5d95, 0x5da0, 0x5d9c, 0x5da1, 0x5d9a, 0x5d9e, 0x5e69, 0x5e5d, 0x5e60, 0x5e5c, 0x7df3, 0x5edb, 0x5ede, 0x5ee1, 0x5f49, 0x5fb2, 0x618b, 0x6183, 0x6179, 0x61b1, 0x61b0, 0x61a2, 0x6189, 0x619b, 0x6193, 0x61af, 0x61ad, 0x619f, 0x6192, 0x61aa, 0x61a1, 0x618d, 0x6166, 0x61b3, 0x622d, 0x646e, 0x6470, 0x6496, 0x64a0, 0x6485, 0x6497, 0x649c, 0x648f, 0x648b, 0x648a, 0x648c, 0x64a3, 0x649f, 0x6468, 0x64b1, 0x6498, 0x6576, 0x657a, 0x6579, 0x657b, 0x65b2, 0x65b3, 0x66b5, 0x66b0, 0x66a9, 0x66b2, 0x66b7, 0x66aa, 0x66af, 0x6a00, 0x6a06, 0x6a17, 0x69e5, 0x69f8, 0x6a15, 0x69f1, 0x69e4, 0x6a20, 0x69ff, 0x69ec, 0x69e2, 0x6a1b, 0x6a1d, 0x69fe, 0x6a27, 0x69f2, 0x69ee, 0x6a14, 0x69f7, 0x69e7, 0x6a40, 0x6a08, 0x69e6, 0x69fb, 0x6a0d, 0x69fc, 0x69eb, 0x6a09, 0x6a04, 0x6a18, 0x6a25, 0x6a0f, 0x69f6, 0x6a26, 0x6a07, 0x69f4, 0x6a16, 0x6b51, 0x6ba5, 0x6ba3, 0x6ba2, 0x6ba6, 0x6c01, 0x6c00, 0x6bff, 0x6c02, 0x6f41, 0x6f26, 0x6f7e, 0x6f87, 0x6fc6, 0x6f92, /* 0xe6 */ 0x6f8d, 0x6f89, 0x6f8c, 0x6f62, 0x6f4f, 0x6f85, 0x6f5a, 0x6f96, 0x6f76, 0x6f6c, 0x6f82, 0x6f55, 0x6f72, 0x6f52, 0x6f50, 0x6f57, 0x6f94, 0x6f93, 0x6f5d, 0x6f00, 0x6f61, 0x6f6b, 0x6f7d, 0x6f67, 0x6f90, 0x6f53, 0x6f8b, 0x6f69, 0x6f7f, 0x6f95, 0x6f63, 0x6f77, 0x6f6a, 0x6f7b, 0x71b2, 0x71af, 0x719b, 0x71b0, 0x71a0, 0x719a, 0x71a9, 0x71b5, 0x719d, 0x71a5, 0x719e, 0x71a4, 0x71a1, 0x71aa, 0x719c, 0x71a7, 0x71b3, 0x7298, 0x729a, 0x7358, 0x7352, 0x735e, 0x735f, 0x7360, 0x735d, 0x735b, 0x7361, 0x735a, 0x7359, 0x7362, 0x7487, 0x7489, 0x748a, 0x7486, 0x7481, 0x747d, 0x7485, 0x7488, 0x747c, 0x7479, 0x7508, 0x7507, 0x757e, 0x7625, 0x761e, 0x7619, 0x761d, 0x761c, 0x7623, 0x761a, 0x7628, 0x761b, 0x769c, 0x769d, 0x769e, 0x769b, 0x778d, 0x778f, 0x7789, 0x7788, 0x78cd, 0x78bb, 0x78cf, 0x78cc, 0x78d1, 0x78ce, 0x78d4, 0x78c8, 0x78c3, 0x78c4, 0x78c9, 0x799a, 0x79a1, 0x79a0, 0x799c, 0x79a2, 0x799b, 0x6b76, 0x7a39, 0x7ab2, 0x7ab4, 0x7ab3, 0x7bb7, 0x7bcb, 0x7bbe, 0x7bac, 0x7bce, 0x7baf, 0x7bb9, 0x7bca, 0x7bb5, 0x7cc5, 0x7cc8, 0x7ccc, 0x7ccb, 0x7df7, 0x7ddb, 0x7dea, 0x7de7, 0x7dd7, 0x7de1, 0x7e03, 0x7dfa, 0x7de6, 0x7df6, 0x7df1, 0x7df0, 0x7dee, 0x7ddf, 0x7f76, 0x7fac, 0x7fb0, 0x7fad, 0x7fed, 0x7feb, 0x7fea, 0x7fec, 0x7fe6, 0x7fe8, 0x8064, 0x8067, 0x81a3, 0x819f, /* 0xe7 */ 0x819e, 0x8195, 0x81a2, 0x8199, 0x8197, 0x8216, 0x824f, 0x8253, 0x8252, 0x8250, 0x824e, 0x8251, 0x8524, 0x853b, 0x850f, 0x8500, 0x8529, 0x850e, 0x8509, 0x850d, 0x851f, 0x850a, 0x8527, 0x851c, 0x84fb, 0x852b, 0x84fa, 0x8508, 0x850c, 0x84f4, 0x852a, 0x84f2, 0x8515, 0x84f7, 0x84eb, 0x84f3, 0x84fc, 0x8512, 0x84ea, 0x84e9, 0x8516, 0x84fe, 0x8528, 0x851d, 0x852e, 0x8502, 0x84fd, 0x851e, 0x84f6, 0x8531, 0x8526, 0x84e7, 0x84e8, 0x84f0, 0x84ef, 0x84f9, 0x8518, 0x8520, 0x8530, 0x850b, 0x8519, 0x852f, 0x8662, 0x8756, 0x8763, 0x8764, 0x8777, 0x87e1, 0x8773, 0x8758, 0x8754, 0x875b, 0x8752, 0x8761, 0x875a, 0x8751, 0x875e, 0x876d, 0x876a, 0x8750, 0x874e, 0x875f, 0x875d, 0x876f, 0x876c, 0x877a, 0x876e, 0x875c, 0x8765, 0x874f, 0x877b, 0x8775, 0x8762, 0x8767, 0x8769, 0x885a, 0x8905, 0x890c, 0x8914, 0x890b, 0x8917, 0x8918, 0x8919, 0x8906, 0x8916, 0x8911, 0x890e, 0x8909, 0x89a2, 0x89a4, 0x89a3, 0x89ed, 0x89f0, 0x89ec, 0x8acf, 0x8ac6, 0x8ab8, 0x8ad3, 0x8ad1, 0x8ad4, 0x8ad5, 0x8abb, 0x8ad7, 0x8abe, 0x8ac0, 0x8ac5, 0x8ad8, 0x8ac3, 0x8aba, 0x8abd, 0x8ad9, 0x8c3e, 0x8c4d, 0x8c8f, 0x8ce5, 0x8cdf, 0x8cd9, 0x8ce8, 0x8cda, 0x8cdd, 0x8ce7, 0x8da0, 0x8d9c, 0x8da1, 0x8d9b, 0x8e20, 0x8e23, 0x8e25, 0x8e24, 0x8e2e, 0x8e15, 0x8e1b, 0x8e16, 0x8e11, 0x8e19, 0x8e26, 0x8e27, /* 0xe8 */ 0x8e14, 0x8e12, 0x8e18, 0x8e13, 0x8e1c, 0x8e17, 0x8e1a, 0x8f2c, 0x8f24, 0x8f18, 0x8f1a, 0x8f20, 0x8f23, 0x8f16, 0x8f17, 0x9073, 0x9070, 0x906f, 0x9067, 0x906b, 0x912f, 0x912b, 0x9129, 0x912a, 0x9132, 0x9126, 0x912e, 0x9185, 0x9186, 0x918a, 0x9181, 0x9182, 0x9184, 0x9180, 0x92d0, 0x92c3, 0x92c4, 0x92c0, 0x92d9, 0x92b6, 0x92cf, 0x92f1, 0x92df, 0x92d8, 0x92e9, 0x92d7, 0x92dd, 0x92cc, 0x92ef, 0x92c2, 0x92e8, 0x92ca, 0x92c8, 0x92ce, 0x92e6, 0x92cd, 0x92d5, 0x92c9, 0x92e0, 0x92de, 0x92e7, 0x92d1, 0x92d3, 0x92b5, 0x92e1, 0x92c6, 0x92b4, 0x957c, 0x95ac, 0x95ab, 0x95ae, 0x95b0, 0x96a4, 0x96a2, 0x96d3, 0x9705, 0x9708, 0x9702, 0x975a, 0x978a, 0x978e, 0x9788, 0x97d0, 0x97cf, 0x981e, 0x981d, 0x9826, 0x9829, 0x9828, 0x9820, 0x981b, 0x9827, 0x98b2, 0x9908, 0x98fa, 0x9911, 0x9914, 0x9916, 0x9917, 0x9915, 0x99dc, 0x99cd, 0x99cf, 0x99d3, 0x99d4, 0x99ce, 0x99c9, 0x99d6, 0x99d8, 0x99cb, 0x99d7, 0x99cc, 0x9ab3, 0x9aec, 0x9aeb, 0x9af3, 0x9af2, 0x9af1, 0x9b46, 0x9b43, 0x9b67, 0x9b74, 0x9b71, 0x9b66, 0x9b76, 0x9b75, 0x9b70, 0x9b68, 0x9b64, 0x9b6c, 0x9cfc, 0x9cfa, 0x9cfd, 0x9cff, 0x9cf7, 0x9d07, 0x9d00, 0x9cf9, 0x9cfb, 0x9d08, 0x9d05, 0x9d04, 0x9e83, 0x9ed3, 0x9f0f, 0x9f10, 0x511c, 0x5113, 0x5117, 0x511a, 0x5111, 0x51de, 0x5334, 0x53e1, 0x5670, 0x5660, 0x566e, /* 0xe9 */ 0x5673, 0x5666, 0x5663, 0x566d, 0x5672, 0x565e, 0x5677, 0x571c, 0x571b, 0x58c8, 0x58bd, 0x58c9, 0x58bf, 0x58ba, 0x58c2, 0x58bc, 0x58c6, 0x5b17, 0x5b19, 0x5b1b, 0x5b21, 0x5b14, 0x5b13, 0x5b10, 0x5b16, 0x5b28, 0x5b1a, 0x5b20, 0x5b1e, 0x5bef, 0x5dac, 0x5db1, 0x5da9, 0x5da7, 0x5db5, 0x5db0, 0x5dae, 0x5daa, 0x5da8, 0x5db2, 0x5dad, 0x5daf, 0x5db4, 0x5e67, 0x5e68, 0x5e66, 0x5e6f, 0x5ee9, 0x5ee7, 0x5ee6, 0x5ee8, 0x5ee5, 0x5f4b, 0x5fbc, 0x619d, 0x61a8, 0x6196, 0x61c5, 0x61b4, 0x61c6, 0x61c1, 0x61cc, 0x61ba, 0x61bf, 0x61b8, 0x618c, 0x64d7, 0x64d6, 0x64d0, 0x64cf, 0x64c9, 0x64bd, 0x6489, 0x64c3, 0x64db, 0x64f3, 0x64d9, 0x6533, 0x657f, 0x657c, 0x65a2, 0x66c8, 0x66be, 0x66c0, 0x66ca, 0x66cb, 0x66cf, 0x66bd, 0x66bb, 0x66ba, 0x66cc, 0x6723, 0x6a34, 0x6a66, 0x6a49, 0x6a67, 0x6a32, 0x6a68, 0x6a3e, 0x6a5d, 0x6a6d, 0x6a76, 0x6a5b, 0x6a51, 0x6a28, 0x6a5a, 0x6a3b, 0x6a3f, 0x6a41, 0x6a6a, 0x6a64, 0x6a50, 0x6a4f, 0x6a54, 0x6a6f, 0x6a69, 0x6a60, 0x6a3c, 0x6a5e, 0x6a56, 0x6a55, 0x6a4d, 0x6a4e, 0x6a46, 0x6b55, 0x6b54, 0x6b56, 0x6ba7, 0x6baa, 0x6bab, 0x6bc8, 0x6bc7, 0x6c04, 0x6c03, 0x6c06, 0x6fad, 0x6fcb, 0x6fa3, 0x6fc7, 0x6fbc, 0x6fce, 0x6fc8, 0x6f5e, 0x6fc4, 0x6fbd, 0x6f9e, 0x6fca, 0x6fa8, 0x7004, 0x6fa5, 0x6fae, 0x6fba, 0x6fac, 0x6faa, 0x6fcf, 0x6fbf, 0x6fb8, /* 0xea */ 0x6fa2, 0x6fc9, 0x6fab, 0x6fcd, 0x6faf, 0x6fb2, 0x6fb0, 0x71c5, 0x71c2, 0x71bf, 0x71b8, 0x71d6, 0x71c0, 0x71c1, 0x71cb, 0x71d4, 0x71ca, 0x71c7, 0x71cf, 0x71bd, 0x71d8, 0x71bc, 0x71c6, 0x71da, 0x71db, 0x729d, 0x729e, 0x7369, 0x7366, 0x7367, 0x736c, 0x7365, 0x736b, 0x736a, 0x747f, 0x749a, 0x74a0, 0x7494, 0x7492, 0x7495, 0x74a1, 0x750b, 0x7580, 0x762f, 0x762d, 0x7631, 0x763d, 0x7633, 0x763c, 0x7635, 0x7632, 0x7630, 0x76bb, 0x76e6, 0x779a, 0x779d, 0x77a1, 0x779c, 0x779b, 0x77a2, 0x77a3, 0x7795, 0x7799, 0x7797, 0x78dd, 0x78e9, 0x78e5, 0x78ea, 0x78de, 0x78e3, 0x78db, 0x78e1, 0x78e2, 0x78ed, 0x78df, 0x78e0, 0x79a4, 0x7a44, 0x7a48, 0x7a47, 0x7ab6, 0x7ab8, 0x7ab5, 0x7ab1, 0x7ab7, 0x7bde, 0x7be3, 0x7be7, 0x7bdd, 0x7bd5, 0x7be5, 0x7bda, 0x7be8, 0x7bf9, 0x7bd4, 0x7bea, 0x7be2, 0x7bdc, 0x7beb, 0x7bd8, 0x7bdf, 0x7cd2, 0x7cd4, 0x7cd7, 0x7cd0, 0x7cd1, 0x7e12, 0x7e21, 0x7e17, 0x7e0c, 0x7e1f, 0x7e20, 0x7e13, 0x7e0e, 0x7e1c, 0x7e15, 0x7e1a, 0x7e22, 0x7e0b, 0x7e0f, 0x7e16, 0x7e0d, 0x7e14, 0x7e25, 0x7e24, 0x7f43, 0x7f7b, 0x7f7c, 0x7f7a, 0x7fb1, 0x7fef, 0x802a, 0x8029, 0x806c, 0x81b1, 0x81a6, 0x81ae, 0x81b9, 0x81b5, 0x81ab, 0x81b0, 0x81ac, 0x81b4, 0x81b2, 0x81b7, 0x81a7, 0x81f2, 0x8255, 0x8256, 0x8257, 0x8556, 0x8545, 0x856b, 0x854d, 0x8553, 0x8561, 0x8558, /* 0xeb */ 0x8540, 0x8546, 0x8564, 0x8541, 0x8562, 0x8544, 0x8551, 0x8547, 0x8563, 0x853e, 0x855b, 0x8571, 0x854e, 0x856e, 0x8575, 0x8555, 0x8567, 0x8560, 0x858c, 0x8566, 0x855d, 0x8554, 0x8565, 0x856c, 0x8663, 0x8665, 0x8664, 0x879b, 0x878f, 0x8797, 0x8793, 0x8792, 0x8788, 0x8781, 0x8796, 0x8798, 0x8779, 0x8787, 0x87a3, 0x8785, 0x8790, 0x8791, 0x879d, 0x8784, 0x8794, 0x879c, 0x879a, 0x8789, 0x891e, 0x8926, 0x8930, 0x892d, 0x892e, 0x8927, 0x8931, 0x8922, 0x8929, 0x8923, 0x892f, 0x892c, 0x891f, 0x89f1, 0x8ae0, 0x8ae2, 0x8af2, 0x8af4, 0x8af5, 0x8add, 0x8b14, 0x8ae4, 0x8adf, 0x8af0, 0x8ac8, 0x8ade, 0x8ae1, 0x8ae8, 0x8aff, 0x8aef, 0x8afb, 0x8c91, 0x8c92, 0x8c90, 0x8cf5, 0x8cee, 0x8cf1, 0x8cf0, 0x8cf3, 0x8d6c, 0x8d6e, 0x8da5, 0x8da7, 0x8e33, 0x8e3e, 0x8e38, 0x8e40, 0x8e45, 0x8e36, 0x8e3c, 0x8e3d, 0x8e41, 0x8e30, 0x8e3f, 0x8ebd, 0x8f36, 0x8f2e, 0x8f35, 0x8f32, 0x8f39, 0x8f37, 0x8f34, 0x9076, 0x9079, 0x907b, 0x9086, 0x90fa, 0x9133, 0x9135, 0x9136, 0x9193, 0x9190, 0x9191, 0x918d, 0x918f, 0x9327, 0x931e, 0x9308, 0x931f, 0x9306, 0x930f, 0x937a, 0x9338, 0x933c, 0x931b, 0x9323, 0x9312, 0x9301, 0x9346, 0x932d, 0x930e, 0x930d, 0x92cb, 0x931d, 0x92fa, 0x9325, 0x9313, 0x92f9, 0x92f7, 0x9334, 0x9302, 0x9324, 0x92ff, 0x9329, 0x9339, 0x9335, 0x932a, 0x9314, 0x930c, /* 0xec */ 0x930b, 0x92fe, 0x9309, 0x9300, 0x92fb, 0x9316, 0x95bc, 0x95cd, 0x95be, 0x95b9, 0x95ba, 0x95b6, 0x95bf, 0x95b5, 0x95bd, 0x96a9, 0x96d4, 0x970b, 0x9712, 0x9710, 0x9799, 0x9797, 0x9794, 0x97f0, 0x97f8, 0x9835, 0x982f, 0x9832, 0x9924, 0x991f, 0x9927, 0x9929, 0x999e, 0x99ee, 0x99ec, 0x99e5, 0x99e4, 0x99f0, 0x99e3, 0x99ea, 0x99e9, 0x99e7, 0x9ab9, 0x9abf, 0x9ab4, 0x9abb, 0x9af6, 0x9afa, 0x9af9, 0x9af7, 0x9b33, 0x9b80, 0x9b85, 0x9b87, 0x9b7c, 0x9b7e, 0x9b7b, 0x9b82, 0x9b93, 0x9b92, 0x9b90, 0x9b7a, 0x9b95, 0x9b7d, 0x9b88, 0x9d25, 0x9d17, 0x9d20, 0x9d1e, 0x9d14, 0x9d29, 0x9d1d, 0x9d18, 0x9d22, 0x9d10, 0x9d19, 0x9d1f, 0x9e88, 0x9e86, 0x9e87, 0x9eae, 0x9ead, 0x9ed5, 0x9ed6, 0x9efa, 0x9f12, 0x9f3d, 0x5126, 0x5125, 0x5122, 0x5124, 0x5120, 0x5129, 0x52f4, 0x5693, 0x568c, 0x568d, 0x5686, 0x5684, 0x5683, 0x567e, 0x5682, 0x567f, 0x5681, 0x58d6, 0x58d4, 0x58cf, 0x58d2, 0x5b2d, 0x5b25, 0x5b32, 0x5b23, 0x5b2c, 0x5b27, 0x5b26, 0x5b2f, 0x5b2e, 0x5b7b, 0x5bf1, 0x5bf2, 0x5db7, 0x5e6c, 0x5e6a, 0x5fbe, 0x5fbb, 0x61c3, 0x61b5, 0x61bc, 0x61e7, 0x61e0, 0x61e5, 0x61e4, 0x61e8, 0x61de, 0x64ef, 0x64e9, 0x64e3, 0x64eb, 0x64e4, 0x64e8, 0x6581, 0x6580, 0x65b6, 0x65da, 0x66d2, 0x6a8d, 0x6a96, 0x6a81, 0x6aa5, 0x6a89, 0x6a9f, 0x6a9b, 0x6aa1, 0x6a9e, 0x6a87, 0x6a93, 0x6a8e, /* 0xed */ 0x6a95, 0x6a83, 0x6aa8, 0x6aa4, 0x6a91, 0x6a7f, 0x6aa6, 0x6a9a, 0x6a85, 0x6a8c, 0x6a92, 0x6b5b, 0x6bad, 0x6c09, 0x6fcc, 0x6fa9, 0x6ff4, 0x6fd4, 0x6fe3, 0x6fdc, 0x6fed, 0x6fe7, 0x6fe6, 0x6fde, 0x6ff2, 0x6fdd, 0x6fe2, 0x6fe8, 0x71e1, 0x71f1, 0x71e8, 0x71f2, 0x71e4, 0x71f0, 0x71e2, 0x7373, 0x736e, 0x736f, 0x7497, 0x74b2, 0x74ab, 0x7490, 0x74aa, 0x74ad, 0x74b1, 0x74a5, 0x74af, 0x7510, 0x7511, 0x7512, 0x750f, 0x7584, 0x7643, 0x7648, 0x7649, 0x7647, 0x76a4, 0x76e9, 0x77b5, 0x77ab, 0x77b2, 0x77b7, 0x77b6, 0x77b4, 0x77b1, 0x77a8, 0x77f0, 0x78f3, 0x78fd, 0x7902, 0x78fb, 0x78fc, 0x78f2, 0x7905, 0x78f9, 0x78fe, 0x7904, 0x79ab, 0x79a8, 0x7a5c, 0x7a5b, 0x7a56, 0x7a58, 0x7a54, 0x7a5a, 0x7abe, 0x7ac0, 0x7ac1, 0x7c05, 0x7c0f, 0x7bf2, 0x7c00, 0x7bff, 0x7bfb, 0x7c0e, 0x7bf4, 0x7c0b, 0x7bf3, 0x7c02, 0x7c09, 0x7c03, 0x7c01, 0x7bf8, 0x7bfd, 0x7c06, 0x7bf0, 0x7bf1, 0x7c10, 0x7c0a, 0x7ce8, 0x7e2d, 0x7e3c, 0x7e42, 0x7e33, 0x9848, 0x7e38, 0x7e2a, 0x7e49, 0x7e40, 0x7e47, 0x7e29, 0x7e4c, 0x7e30, 0x7e3b, 0x7e36, 0x7e44, 0x7e3a, 0x7f45, 0x7f7f, 0x7f7e, 0x7f7d, 0x7ff4, 0x7ff2, 0x802c, 0x81bb, 0x81c4, 0x81cc, 0x81ca, 0x81c5, 0x81c7, 0x81bc, 0x81e9, 0x825b, 0x825a, 0x825c, 0x8583, 0x8580, 0x858f, 0x85a7, 0x8595, 0x85a0, 0x858b, 0x85a3, 0x857b, 0x85a4, 0x859a, 0x859e, /* 0xee */ 0x8577, 0x857c, 0x8589, 0x85a1, 0x857a, 0x8578, 0x8557, 0x858e, 0x8596, 0x8586, 0x858d, 0x8599, 0x859d, 0x8581, 0x85a2, 0x8582, 0x8588, 0x8585, 0x8579, 0x8576, 0x8598, 0x8590, 0x859f, 0x8668, 0x87be, 0x87aa, 0x87ad, 0x87c5, 0x87b0, 0x87ac, 0x87b9, 0x87b5, 0x87bc, 0x87ae, 0x87c9, 0x87c3, 0x87c2, 0x87cc, 0x87b7, 0x87af, 0x87c4, 0x87ca, 0x87b4, 0x87b6, 0x87bf, 0x87b8, 0x87bd, 0x87de, 0x87b2, 0x8935, 0x8933, 0x893c, 0x893e, 0x8941, 0x8952, 0x8937, 0x8942, 0x89ad, 0x89af, 0x89ae, 0x89f2, 0x89f3, 0x8b1e, 0x8b18, 0x8b16, 0x8b11, 0x8b05, 0x8b0b, 0x8b22, 0x8b0f, 0x8b12, 0x8b15, 0x8b07, 0x8b0d, 0x8b08, 0x8b06, 0x8b1c, 0x8b13, 0x8b1a, 0x8c4f, 0x8c70, 0x8c72, 0x8c71, 0x8c6f, 0x8c95, 0x8c94, 0x8cf9, 0x8d6f, 0x8e4e, 0x8e4d, 0x8e53, 0x8e50, 0x8e4c, 0x8e47, 0x8f43, 0x8f40, 0x9085, 0x907e, 0x9138, 0x919a, 0x91a2, 0x919b, 0x9199, 0x919f, 0x91a1, 0x919d, 0x91a0, 0x93a1, 0x9383, 0x93af, 0x9364, 0x9356, 0x9347, 0x937c, 0x9358, 0x935c, 0x9376, 0x9349, 0x9350, 0x9351, 0x9360, 0x936d, 0x938f, 0x934c, 0x936a, 0x9379, 0x9357, 0x9355, 0x9352, 0x934f, 0x9371, 0x9377, 0x937b, 0x9361, 0x935e, 0x9363, 0x9367, 0x9380, 0x934e, 0x9359, 0x95c7, 0x95c0, 0x95c9, 0x95c3, 0x95c5, 0x95b7, 0x96ae, 0x96b0, 0x96ac, 0x9720, 0x971f, 0x9718, 0x971d, 0x9719, 0x979a, 0x97a1, 0x979c, /* 0xef */ 0x979e, 0x979d, 0x97d5, 0x97d4, 0x97f1, 0x9841, 0x9844, 0x984a, 0x9849, 0x9845, 0x9843, 0x9925, 0x992b, 0x992c, 0x992a, 0x9933, 0x9932, 0x992f, 0x992d, 0x9931, 0x9930, 0x9998, 0x99a3, 0x99a1, 0x9a02, 0x99fa, 0x99f4, 0x99f7, 0x99f9, 0x99f8, 0x99f6, 0x99fb, 0x99fd, 0x99fe, 0x99fc, 0x9a03, 0x9abe, 0x9afe, 0x9afd, 0x9b01, 0x9afc, 0x9b48, 0x9b9a, 0x9ba8, 0x9b9e, 0x9b9b, 0x9ba6, 0x9ba1, 0x9ba5, 0x9ba4, 0x9b86, 0x9ba2, 0x9ba0, 0x9baf, 0x9d33, 0x9d41, 0x9d67, 0x9d36, 0x9d2e, 0x9d2f, 0x9d31, 0x9d38, 0x9d30, 0x9d45, 0x9d42, 0x9d43, 0x9d3e, 0x9d37, 0x9d40, 0x9d3d, 0x7ff5, 0x9d2d, 0x9e8a, 0x9e89, 0x9e8d, 0x9eb0, 0x9ec8, 0x9eda, 0x9efb, 0x9eff, 0x9f24, 0x9f23, 0x9f22, 0x9f54, 0x9fa0, 0x5131, 0x512d, 0x512e, 0x5698, 0x569c, 0x5697, 0x569a, 0x569d, 0x5699, 0x5970, 0x5b3c, 0x5c69, 0x5c6a, 0x5dc0, 0x5e6d, 0x5e6e, 0x61d8, 0x61df, 0x61ed, 0x61ee, 0x61f1, 0x61ea, 0x61f0, 0x61eb, 0x61d6, 0x61e9, 0x64ff, 0x6504, 0x64fd, 0x64f8, 0x6501, 0x6503, 0x64fc, 0x6594, 0x65db, 0x66da, 0x66db, 0x66d8, 0x6ac5, 0x6ab9, 0x6abd, 0x6ae1, 0x6ac6, 0x6aba, 0x6ab6, 0x6ab7, 0x6ac7, 0x6ab4, 0x6aad, 0x6b5e, 0x6bc9, 0x6c0b, 0x7007, 0x700c, 0x700d, 0x7001, 0x7005, 0x7014, 0x700e, 0x6fff, 0x7000, 0x6ffb, 0x7026, 0x6ffc, 0x6ff7, 0x700a, 0x7201, 0x71ff, 0x71f9, 0x7203, 0x71fd, 0x7376, /* 0xf0 */ 0x74b8, 0x74c0, 0x74b5, 0x74c1, 0x74be, 0x74b6, 0x74bb, 0x74c2, 0x7514, 0x7513, 0x765c, 0x7664, 0x7659, 0x7650, 0x7653, 0x7657, 0x765a, 0x76a6, 0x76bd, 0x76ec, 0x77c2, 0x77ba, 0x78ff, 0x790c, 0x7913, 0x7914, 0x7909, 0x7910, 0x7912, 0x7911, 0x79ad, 0x79ac, 0x7a5f, 0x7c1c, 0x7c29, 0x7c19, 0x7c20, 0x7c1f, 0x7c2d, 0x7c1d, 0x7c26, 0x7c28, 0x7c22, 0x7c25, 0x7c30, 0x7e5c, 0x7e50, 0x7e56, 0x7e63, 0x7e58, 0x7e62, 0x7e5f, 0x7e51, 0x7e60, 0x7e57, 0x7e53, 0x7fb5, 0x7fb3, 0x7ff7, 0x7ff8, 0x8075, 0x81d1, 0x81d2, 0x81d0, 0x825f, 0x825e, 0x85b4, 0x85c6, 0x85c0, 0x85c3, 0x85c2, 0x85b3, 0x85b5, 0x85bd, 0x85c7, 0x85c4, 0x85bf, 0x85cb, 0x85ce, 0x85c8, 0x85c5, 0x85b1, 0x85b6, 0x85d2, 0x8624, 0x85b8, 0x85b7, 0x85be, 0x8669, 0x87e7, 0x87e6, 0x87e2, 0x87db, 0x87eb, 0x87ea, 0x87e5, 0x87df, 0x87f3, 0x87e4, 0x87d4, 0x87dc, 0x87d3, 0x87ed, 0x87d8, 0x87e3, 0x87a4, 0x87d7, 0x87d9, 0x8801, 0x87f4, 0x87e8, 0x87dd, 0x8953, 0x894b, 0x894f, 0x894c, 0x8946, 0x8950, 0x8951, 0x8949, 0x8b2a, 0x8b27, 0x8b23, 0x8b33, 0x8b30, 0x8b35, 0x8b47, 0x8b2f, 0x8b3c, 0x8b3e, 0x8b31, 0x8b25, 0x8b37, 0x8b26, 0x8b36, 0x8b2e, 0x8b24, 0x8b3b, 0x8b3d, 0x8b3a, 0x8c42, 0x8c75, 0x8c99, 0x8c98, 0x8c97, 0x8cfe, 0x8d04, 0x8d02, 0x8d00, 0x8e5c, 0x8e62, 0x8e60, 0x8e57, 0x8e56, 0x8e5e, 0x8e65, 0x8e67, /* 0xf1 */ 0x8e5b, 0x8e5a, 0x8e61, 0x8e5d, 0x8e69, 0x8e54, 0x8f46, 0x8f47, 0x8f48, 0x8f4b, 0x9128, 0x913a, 0x913b, 0x913e, 0x91a8, 0x91a5, 0x91a7, 0x91af, 0x91aa, 0x93b5, 0x938c, 0x9392, 0x93b7, 0x939b, 0x939d, 0x9389, 0x93a7, 0x938e, 0x93aa, 0x939e, 0x93a6, 0x9395, 0x9388, 0x9399, 0x939f, 0x938d, 0x93b1, 0x9391, 0x93b2, 0x93a4, 0x93a8, 0x93b4, 0x93a3, 0x93a5, 0x95d2, 0x95d3, 0x95d1, 0x96b3, 0x96d7, 0x96da, 0x5dc2, 0x96df, 0x96d8, 0x96dd, 0x9723, 0x9722, 0x9725, 0x97ac, 0x97ae, 0x97a8, 0x97ab, 0x97a4, 0x97aa, 0x97a2, 0x97a5, 0x97d7, 0x97d9, 0x97d6, 0x97d8, 0x97fa, 0x9850, 0x9851, 0x9852, 0x98b8, 0x9941, 0x993c, 0x993a, 0x9a0f, 0x9a0b, 0x9a09, 0x9a0d, 0x9a04, 0x9a11, 0x9a0a, 0x9a05, 0x9a07, 0x9a06, 0x9ac0, 0x9adc, 0x9b08, 0x9b04, 0x9b05, 0x9b29, 0x9b35, 0x9b4a, 0x9b4c, 0x9b4b, 0x9bc7, 0x9bc6, 0x9bc3, 0x9bbf, 0x9bc1, 0x9bb5, 0x9bb8, 0x9bd3, 0x9bb6, 0x9bc4, 0x9bb9, 0x9bbd, 0x9d5c, 0x9d53, 0x9d4f, 0x9d4a, 0x9d5b, 0x9d4b, 0x9d59, 0x9d56, 0x9d4c, 0x9d57, 0x9d52, 0x9d54, 0x9d5f, 0x9d58, 0x9d5a, 0x9e8e, 0x9e8c, 0x9edf, 0x9f01, 0x9f00, 0x9f16, 0x9f25, 0x9f2b, 0x9f2a, 0x9f29, 0x9f28, 0x9f4c, 0x9f55, 0x5134, 0x5135, 0x5296, 0x52f7, 0x53b4, 0x56ab, 0x56ad, 0x56a6, 0x56a7, 0x56aa, 0x56ac, 0x58da, 0x58dd, 0x58db, 0x5912, 0x5b3d, 0x5b3e, 0x5b3f, 0x5dc3, 0x5e70, /* 0xf2 */ 0x5fbf, 0x61fb, 0x6507, 0x6510, 0x650d, 0x6509, 0x650c, 0x650e, 0x6584, 0x65de, 0x65dd, 0x66de, 0x6ae7, 0x6ae0, 0x6acc, 0x6ad1, 0x6ad9, 0x6acb, 0x6adf, 0x6adc, 0x6ad0, 0x6aeb, 0x6acf, 0x6acd, 0x6ade, 0x6b60, 0x6bb0, 0x6c0c, 0x7019, 0x7027, 0x7020, 0x7016, 0x702b, 0x7021, 0x7022, 0x7023, 0x7029, 0x7017, 0x7024, 0x701c, 0x702a, 0x720c, 0x720a, 0x7207, 0x7202, 0x7205, 0x72a5, 0x72a6, 0x72a4, 0x72a3, 0x72a1, 0x74cb, 0x74c5, 0x74b7, 0x74c3, 0x7516, 0x7660, 0x77c9, 0x77ca, 0x77c4, 0x77f1, 0x791d, 0x791b, 0x7921, 0x791c, 0x7917, 0x791e, 0x79b0, 0x7a67, 0x7a68, 0x7c33, 0x7c3c, 0x7c39, 0x7c2c, 0x7c3b, 0x7cec, 0x7cea, 0x7e76, 0x7e75, 0x7e78, 0x7e70, 0x7e77, 0x7e6f, 0x7e7a, 0x7e72, 0x7e74, 0x7e68, 0x7f4b, 0x7f4a, 0x7f83, 0x7f86, 0x7fb7, 0x7ffd, 0x7ffe, 0x8078, 0x81d7, 0x81d5, 0x8264, 0x8261, 0x8263, 0x85eb, 0x85f1, 0x85ed, 0x85d9, 0x85e1, 0x85e8, 0x85da, 0x85d7, 0x85ec, 0x85f2, 0x85f8, 0x85d8, 0x85df, 0x85e3, 0x85dc, 0x85d1, 0x85f0, 0x85e6, 0x85ef, 0x85de, 0x85e2, 0x8800, 0x87fa, 0x8803, 0x87f6, 0x87f7, 0x8809, 0x880c, 0x880b, 0x8806, 0x87fc, 0x8808, 0x87ff, 0x880a, 0x8802, 0x8962, 0x895a, 0x895b, 0x8957, 0x8961, 0x895c, 0x8958, 0x895d, 0x8959, 0x8988, 0x89b7, 0x89b6, 0x89f6, 0x8b50, 0x8b48, 0x8b4a, 0x8b40, 0x8b53, 0x8b56, 0x8b54, 0x8b4b, 0x8b55, /* 0xf3 */ 0x8b51, 0x8b42, 0x8b52, 0x8b57, 0x8c43, 0x8c77, 0x8c76, 0x8c9a, 0x8d06, 0x8d07, 0x8d09, 0x8dac, 0x8daa, 0x8dad, 0x8dab, 0x8e6d, 0x8e78, 0x8e73, 0x8e6a, 0x8e6f, 0x8e7b, 0x8ec2, 0x8f52, 0x8f51, 0x8f4f, 0x8f50, 0x8f53, 0x8fb4, 0x9140, 0x913f, 0x91b0, 0x91ad, 0x93de, 0x93c7, 0x93cf, 0x93c2, 0x93da, 0x93d0, 0x93f9, 0x93ec, 0x93cc, 0x93d9, 0x93a9, 0x93e6, 0x93ca, 0x93d4, 0x93ee, 0x93e3, 0x93d5, 0x93c4, 0x93ce, 0x93c0, 0x93d2, 0x93e7, 0x957d, 0x95da, 0x95db, 0x96e1, 0x9729, 0x972b, 0x972c, 0x9728, 0x9726, 0x97b3, 0x97b7, 0x97b6, 0x97dd, 0x97de, 0x97df, 0x985c, 0x9859, 0x985d, 0x9857, 0x98bf, 0x98bd, 0x98bb, 0x98be, 0x9948, 0x9947, 0x9943, 0x99a6, 0x99a7, 0x9a1a, 0x9a15, 0x9a25, 0x9a1d, 0x9a24, 0x9a1b, 0x9a22, 0x9a20, 0x9a27, 0x9a23, 0x9a1e, 0x9a1c, 0x9a14, 0x9ac2, 0x9b0b, 0x9b0a, 0x9b0e, 0x9b0c, 0x9b37, 0x9bea, 0x9beb, 0x9be0, 0x9bde, 0x9be4, 0x9be6, 0x9be2, 0x9bf0, 0x9bd4, 0x9bd7, 0x9bec, 0x9bdc, 0x9bd9, 0x9be5, 0x9bd5, 0x9be1, 0x9bda, 0x9d77, 0x9d81, 0x9d8a, 0x9d84, 0x9d88, 0x9d71, 0x9d80, 0x9d78, 0x9d86, 0x9d8b, 0x9d8c, 0x9d7d, 0x9d6b, 0x9d74, 0x9d75, 0x9d70, 0x9d69, 0x9d85, 0x9d73, 0x9d7b, 0x9d82, 0x9d6f, 0x9d79, 0x9d7f, 0x9d87, 0x9d68, 0x9e94, 0x9e91, 0x9ec0, 0x9efc, 0x9f2d, 0x9f40, 0x9f41, 0x9f4d, 0x9f56, 0x9f57, 0x9f58, 0x5337, 0x56b2, /* 0xf4 */ 0x56b5, 0x56b3, 0x58e3, 0x5b45, 0x5dc6, 0x5dc7, 0x5eee, 0x5eef, 0x5fc0, 0x5fc1, 0x61f9, 0x6517, 0x6516, 0x6515, 0x6513, 0x65df, 0x66e8, 0x66e3, 0x66e4, 0x6af3, 0x6af0, 0x6aea, 0x6ae8, 0x6af9, 0x6af1, 0x6aee, 0x6aef, 0x703c, 0x7035, 0x702f, 0x7037, 0x7034, 0x7031, 0x7042, 0x7038, 0x703f, 0x703a, 0x7039, 0x7040, 0x703b, 0x7033, 0x7041, 0x7213, 0x7214, 0x72a8, 0x737d, 0x737c, 0x74ba, 0x76ab, 0x76aa, 0x76be, 0x76ed, 0x77cc, 0x77ce, 0x77cf, 0x77cd, 0x77f2, 0x7925, 0x7923, 0x7927, 0x7928, 0x7924, 0x7929, 0x79b2, 0x7a6e, 0x7a6c, 0x7a6d, 0x7af7, 0x7c49, 0x7c48, 0x7c4a, 0x7c47, 0x7c45, 0x7cee, 0x7e7b, 0x7e7e, 0x7e81, 0x7e80, 0x7fba, 0x7fff, 0x8079, 0x81db, 0x81d9, 0x820b, 0x8268, 0x8269, 0x8622, 0x85ff, 0x8601, 0x85fe, 0x861b, 0x8600, 0x85f6, 0x8604, 0x8609, 0x8605, 0x860c, 0x85fd, 0x8819, 0x8810, 0x8811, 0x8817, 0x8813, 0x8816, 0x8963, 0x8966, 0x89b9, 0x89f7, 0x8b60, 0x8b6a, 0x8b5d, 0x8b68, 0x8b63, 0x8b65, 0x8b67, 0x8b6d, 0x8dae, 0x8e86, 0x8e88, 0x8e84, 0x8f59, 0x8f56, 0x8f57, 0x8f55, 0x8f58, 0x8f5a, 0x908d, 0x9143, 0x9141, 0x91b7, 0x91b5, 0x91b2, 0x91b3, 0x940b, 0x9413, 0x93fb, 0x9420, 0x940f, 0x9414, 0x93fe, 0x9415, 0x9410, 0x9428, 0x9419, 0x940d, 0x93f5, 0x9400, 0x93f7, 0x9407, 0x940e, 0x9416, 0x9412, 0x93fa, 0x9409, 0x93f8, 0x940a, 0x93ff, /* 0xf5 */ 0x93fc, 0x940c, 0x93f6, 0x9411, 0x9406, 0x95de, 0x95e0, 0x95df, 0x972e, 0x972f, 0x97b9, 0x97bb, 0x97fd, 0x97fe, 0x9860, 0x9862, 0x9863, 0x985f, 0x98c1, 0x98c2, 0x9950, 0x994e, 0x9959, 0x994c, 0x994b, 0x9953, 0x9a32, 0x9a34, 0x9a31, 0x9a2c, 0x9a2a, 0x9a36, 0x9a29, 0x9a2e, 0x9a38, 0x9a2d, 0x9ac7, 0x9aca, 0x9ac6, 0x9b10, 0x9b12, 0x9b11, 0x9c0b, 0x9c08, 0x9bf7, 0x9c05, 0x9c12, 0x9bf8, 0x9c40, 0x9c07, 0x9c0e, 0x9c06, 0x9c17, 0x9c14, 0x9c09, 0x9d9f, 0x9d99, 0x9da4, 0x9d9d, 0x9d92, 0x9d98, 0x9d90, 0x9d9b, 0x9da0, 0x9d94, 0x9d9c, 0x9daa, 0x9d97, 0x9da1, 0x9d9a, 0x9da2, 0x9da8, 0x9d9e, 0x9da3, 0x9dbf, 0x9da9, 0x9d96, 0x9da6, 0x9da7, 0x9e99, 0x9e9b, 0x9e9a, 0x9ee5, 0x9ee4, 0x9ee7, 0x9ee6, 0x9f30, 0x9f2e, 0x9f5b, 0x9f60, 0x9f5e, 0x9f5d, 0x9f59, 0x9f91, 0x513a, 0x5139, 0x5298, 0x5297, 0x56c3, 0x56bd, 0x56be, 0x5b48, 0x5b47, 0x5dcb, 0x5dcf, 0x5ef1, 0x61fd, 0x651b, 0x6b02, 0x6afc, 0x6b03, 0x6af8, 0x6b00, 0x7043, 0x7044, 0x704a, 0x7048, 0x7049, 0x7045, 0x7046, 0x721d, 0x721a, 0x7219, 0x737e, 0x7517, 0x766a, 0x77d0, 0x792d, 0x7931, 0x792f, 0x7c54, 0x7c53, 0x7cf2, 0x7e8a, 0x7e87, 0x7e88, 0x7e8b, 0x7e86, 0x7e8d, 0x7f4d, 0x7fbb, 0x8030, 0x81dd, 0x8618, 0x862a, 0x8626, 0x861f, 0x8623, 0x861c, 0x8619, 0x8627, 0x862e, 0x8621, 0x8620, 0x8629, 0x861e, 0x8625, /* 0xf6 */ 0x8829, 0x881d, 0x881b, 0x8820, 0x8824, 0x881c, 0x882b, 0x884a, 0x896d, 0x8969, 0x896e, 0x896b, 0x89fa, 0x8b79, 0x8b78, 0x8b45, 0x8b7a, 0x8b7b, 0x8d10, 0x8d14, 0x8daf, 0x8e8e, 0x8e8c, 0x8f5e, 0x8f5b, 0x8f5d, 0x9146, 0x9144, 0x9145, 0x91b9, 0x943f, 0x943b, 0x9436, 0x9429, 0x943d, 0x943c, 0x9430, 0x9439, 0x942a, 0x9437, 0x942c, 0x9440, 0x9431, 0x95e5, 0x95e4, 0x95e3, 0x9735, 0x973a, 0x97bf, 0x97e1, 0x9864, 0x98c9, 0x98c6, 0x98c0, 0x9958, 0x9956, 0x9a39, 0x9a3d, 0x9a46, 0x9a44, 0x9a42, 0x9a41, 0x9a3a, 0x9a3f, 0x9acd, 0x9b15, 0x9b17, 0x9b18, 0x9b16, 0x9b3a, 0x9b52, 0x9c2b, 0x9c1d, 0x9c1c, 0x9c2c, 0x9c23, 0x9c28, 0x9c29, 0x9c24, 0x9c21, 0x9db7, 0x9db6, 0x9dbc, 0x9dc1, 0x9dc7, 0x9dca, 0x9dcf, 0x9dbe, 0x9dc5, 0x9dc3, 0x9dbb, 0x9db5, 0x9dce, 0x9db9, 0x9dba, 0x9dac, 0x9dc8, 0x9db1, 0x9dad, 0x9dcc, 0x9db3, 0x9dcd, 0x9db2, 0x9e7a, 0x9e9c, 0x9eeb, 0x9eee, 0x9eed, 0x9f1b, 0x9f18, 0x9f1a, 0x9f31, 0x9f4e, 0x9f65, 0x9f64, 0x9f92, 0x4eb9, 0x56c6, 0x56c5, 0x56cb, 0x5971, 0x5b4b, 0x5b4c, 0x5dd5, 0x5dd1, 0x5ef2, 0x6521, 0x6520, 0x6526, 0x6522, 0x6b0b, 0x6b08, 0x6b09, 0x6c0d, 0x7055, 0x7056, 0x7057, 0x7052, 0x721e, 0x721f, 0x72a9, 0x737f, 0x74d8, 0x74d5, 0x74d9, 0x74d7, 0x766d, 0x76ad, 0x7935, 0x79b4, 0x7a70, 0x7a71, 0x7c57, 0x7c5c, 0x7c59, 0x7c5b, 0x7c5a, /* 0xf7 */ 0x7cf4, 0x7cf1, 0x7e91, 0x7f4f, 0x7f87, 0x81de, 0x826b, 0x8634, 0x8635, 0x8633, 0x862c, 0x8632, 0x8636, 0x882c, 0x8828, 0x8826, 0x882a, 0x8825, 0x8971, 0x89bf, 0x89be, 0x89fb, 0x8b7e, 0x8b84, 0x8b82, 0x8b86, 0x8b85, 0x8b7f, 0x8d15, 0x8e95, 0x8e94, 0x8e9a, 0x8e92, 0x8e90, 0x8e96, 0x8e97, 0x8f60, 0x8f62, 0x9147, 0x944c, 0x9450, 0x944a, 0x944b, 0x944f, 0x9447, 0x9445, 0x9448, 0x9449, 0x9446, 0x973f, 0x97e3, 0x986a, 0x9869, 0x98cb, 0x9954, 0x995b, 0x9a4e, 0x9a53, 0x9a54, 0x9a4c, 0x9a4f, 0x9a48, 0x9a4a, 0x9a49, 0x9a52, 0x9a50, 0x9ad0, 0x9b19, 0x9b2b, 0x9b3b, 0x9b56, 0x9b55, 0x9c46, 0x9c48, 0x9c3f, 0x9c44, 0x9c39, 0x9c33, 0x9c41, 0x9c3c, 0x9c37, 0x9c34, 0x9c32, 0x9c3d, 0x9c36, 0x9ddb, 0x9dd2, 0x9dde, 0x9dda, 0x9dcb, 0x9dd0, 0x9ddc, 0x9dd1, 0x9ddf, 0x9de9, 0x9dd9, 0x9dd8, 0x9dd6, 0x9df5, 0x9dd5, 0x9ddd, 0x9eb6, 0x9ef0, 0x9f35, 0x9f33, 0x9f32, 0x9f42, 0x9f6b, 0x9f95, 0x9fa2, 0x513d, 0x5299, 0x58e8, 0x58e7, 0x5972, 0x5b4d, 0x5dd8, 0x882f, 0x5f4f, 0x6201, 0x6203, 0x6204, 0x6529, 0x6525, 0x6596, 0x66eb, 0x6b11, 0x6b12, 0x6b0f, 0x6bca, 0x705b, 0x705a, 0x7222, 0x7382, 0x7381, 0x7383, 0x7670, 0x77d4, 0x7c67, 0x7c66, 0x7e95, 0x826c, 0x863a, 0x8640, 0x8639, 0x863c, 0x8631, 0x863b, 0x863e, 0x8830, 0x8832, 0x882e, 0x8833, 0x8976, 0x8974, 0x8973, 0x89fe, /* 0xf8 */ 0x8b8c, 0x8b8e, 0x8b8b, 0x8b88, 0x8c45, 0x8d19, 0x8e98, 0x8f64, 0x8f63, 0x91bc, 0x9462, 0x9455, 0x945d, 0x9457, 0x945e, 0x97c4, 0x97c5, 0x9800, 0x9a56, 0x9a59, 0x9b1e, 0x9b1f, 0x9b20, 0x9c52, 0x9c58, 0x9c50, 0x9c4a, 0x9c4d, 0x9c4b, 0x9c55, 0x9c59, 0x9c4c, 0x9c4e, 0x9dfb, 0x9df7, 0x9def, 0x9de3, 0x9deb, 0x9df8, 0x9de4, 0x9df6, 0x9de1, 0x9dee, 0x9de6, 0x9df2, 0x9df0, 0x9de2, 0x9dec, 0x9df4, 0x9df3, 0x9de8, 0x9ded, 0x9ec2, 0x9ed0, 0x9ef2, 0x9ef3, 0x9f06, 0x9f1c, 0x9f38, 0x9f37, 0x9f36, 0x9f43, 0x9f4f, 0x9f71, 0x9f70, 0x9f6e, 0x9f6f, 0x56d3, 0x56cd, 0x5b4e, 0x5c6d, 0x652d, 0x66ed, 0x66ee, 0x6b13, 0x705f, 0x7061, 0x705d, 0x7060, 0x7223, 0x74db, 0x74e5, 0x77d5, 0x7938, 0x79b7, 0x79b6, 0x7c6a, 0x7e97, 0x7f89, 0x826d, 0x8643, 0x8838, 0x8837, 0x8835, 0x884b, 0x8b94, 0x8b95, 0x8e9e, 0x8e9f, 0x8ea0, 0x8e9d, 0x91be, 0x91bd, 0x91c2, 0x946b, 0x9468, 0x9469, 0x96e5, 0x9746, 0x9743, 0x9747, 0x97c7, 0x97e5, 0x9a5e, 0x9ad5, 0x9b59, 0x9c63, 0x9c67, 0x9c66, 0x9c62, 0x9c5e, 0x9c60, 0x9e02, 0x9dfe, 0x9e07, 0x9e03, 0x9e06, 0x9e05, 0x9e00, 0x9e01, 0x9e09, 0x9dff, 0x9dfd, 0x9e04, 0x9ea0, 0x9f1e, 0x9f46, 0x9f74, 0x9f75, 0x9f76, 0x56d4, 0x652e, 0x65b8, 0x6b18, 0x6b19, 0x6b17, 0x6b1a, 0x7062, 0x7226, 0x72aa, 0x77d8, 0x77d9, 0x7939, 0x7c69, 0x7c6b, 0x7cf6, 0x7e9a, /* 0xf9 */ 0x7e98, 0x7e9b, 0x7e99, 0x81e0, 0x81e1, 0x8646, 0x8647, 0x8648, 0x8979, 0x897a, 0x897c, 0x897b, 0x89ff, 0x8b98, 0x8b99, 0x8ea5, 0x8ea4, 0x8ea3, 0x946e, 0x946d, 0x946f, 0x9471, 0x9473, 0x9749, 0x9872, 0x995f, 0x9c68, 0x9c6e, 0x9c6d, 0x9e0b, 0x9e0d, 0x9e10, 0x9e0f, 0x9e12, 0x9e11, 0x9ea1, 0x9ef5, 0x9f09, 0x9f47, 0x9f78, 0x9f7b, 0x9f7a, 0x9f79, 0x571e, 0x7066, 0x7c6f, 0x883c, 0x8db2, 0x8ea6, 0x91c3, 0x9474, 0x9478, 0x9476, 0x9475, 0x9a60, 0x9c74, 0x9c73, 0x9c71, 0x9c75, 0x9e14, 0x9e13, 0x9ef6, 0x9f0a, 0x9fa4, 0x7068, 0x7065, 0x7cf7, 0x866a, 0x883e, 0x883d, 0x883f, 0x8b9e, 0x8c9c, 0x8ea9, 0x8ec9, 0x974b, 0x9873, 0x9874, 0x98cc, 0x9961, 0x99ab, 0x9a64, 0x9a66, 0x9a67, 0x9b24, 0x9e15, 0x9e17, 0x9f48, 0x6207, 0x6b1e, 0x7227, 0x864c, 0x8ea8, 0x9482, 0x9480, 0x9481, 0x9a69, 0x9a68, 0x9b2e, 0x9e19, 0x7229, 0x864b, 0x8b9f, 0x9483, 0x9c79, 0x9eb7, 0x7675, 0x9a6b, 0x9c7a, 0x9e1d, 0x7069, 0x706a, 0x9ea4, 0x9f7e, 0x9f49, 0x9f98, 0x7881, 0x92b9, 0x88cf, 0x58bb, 0x6052, 0x7ca7, 0x5afa, 0x2554, 0x2566, 0x2557, 0x2560, 0x256c, 0x2563, 0x255a, 0x2569, 0x255d, 0x2552, 0x2564, 0x2555, 0x255e, 0x256a, 0x2561, 0x2558, 0x2567, 0x255b, 0x2553, 0x2565, 0x2556, 0x255f, 0x256b, 0x2562, 0x2559, 0x2568, 0x255c, 0x2551, 0x2550, 0x256d, 0x256e, 0x2570, 0x256f, 0xffed, /* 0xfa */ 0xe000, 0x92db, 0xe002, 0xe003, 0x854c, 0x42b5, 0x73ef, 0x51b5, 0x3649, 0xe009, 0xe00a, 0x9344, 0xe00c, 0x82ee, 0xe00e, 0x783c, 0x6744, 0x62df, 0xe012, 0xe013, 0xe014, 0xe015, 0xe016, 0x4fab, 0xe018, 0x5008, 0xe01a, 0xe01b, 0xe01c, 0xe01d, 0xe01e, 0x5029, 0xe020, 0x5fa4, 0xe022, 0xe023, 0x6edb, 0xe025, 0x507d, 0x5101, 0x347a, 0x510e, 0x986c, 0x3743, 0x8416, 0xe02d, 0xe02e, 0x5160, 0xe030, 0x516a, 0xe032, 0xe033, 0xe034, 0xe035, 0xe036, 0xe037, 0xe038, 0x5b82, 0x877d, 0xe03b, 0xe03c, 0x51b2, 0x51b8, 0x9d34, 0x51c9, 0x51cf, 0x51d1, 0x3cdc, 0x51d3, 0xe045, 0x51b3, 0x51e2, 0x5342, 0x51ed, 0x83cd, 0x693e, 0xe04c, 0x5f7b, 0x520b, 0x5226, 0x523c, 0x52b5, 0x5257, 0x5294, 0x52b9, 0x52c5, 0x7c15, 0x8542, 0x52e0, 0x860d, 0xe05a, 0x5305, 0xe05c, 0x5549, 0x6ed9, 0xe05f, 0xe060, 0xe061, 0x5333, 0x5344, 0xe064, 0x6ccb, 0xe066, 0x681b, 0x73d5, 0x604a, 0x3eaa, 0x38cc, 0xe06c, 0x71dd, 0x44a2, 0x536d, 0x5374, 0xe071, 0x537e, 0x537f, 0xe074, 0xe075, 0x77e6, 0x5393, 0xe078, 0x53a0, 0x53ab, 0x53ae, 0x73a7, 0xe07d, 0x3f59, 0x739c, 0x53c1, 0x53c5, 0x6c49, 0x4e49, 0x57fe, 0x53d9, 0x3aab, 0xe087, 0x53e0, 0xe089, 0xe08a, 0x53f6, 0xe08c, 0x5413, 0x7079, 0x552b, 0x6657, 0x6d5b, 0x546d, 0xe093, 0xe094, 0x555d, 0x548f, 0x54a4, 0x47a6, 0xe099, 0xe09a, 0x3db4, 0xe09c, /* 0xfb */ 0xe09d, 0xe09e, 0x5547, 0x4ced, 0x542f, 0x7417, 0x5586, 0x55a9, 0x5605, 0xe0a6, 0xe0a7, 0x4552, 0xe0a9, 0x66b3, 0xe0ab, 0x5637, 0x66cd, 0xe0ae, 0x66a4, 0x66ad, 0x564d, 0x564f, 0x78f1, 0x56f1, 0x9787, 0x53fe, 0x5700, 0x56ef, 0x56ed, 0xe0ba, 0x3623, 0xe0bc, 0x5746, 0xe0be, 0x6c6e, 0x708b, 0x5742, 0x36b1, 0xe0c3, 0x57e6, 0xe0c5, 0x5803, 0xe0c7, 0xe0c8, 0x5826, 0xe0ca, 0x585c, 0x58aa, 0x3561, 0x58e0, 0x58dc, 0xe0d0, 0x58fb, 0x5bff, 0x5743, 0xe0d4, 0xe0d5, 0x93d3, 0x35a1, 0x591f, 0x68a6, 0x36c3, 0x6e59, 0xe0dc, 0x5a24, 0x5553, 0xe0df, 0x8505, 0x59c9, 0xe0e2, 0xe0e3, 0xe0e4, 0xe0e5, 0x59d9, 0xe0e7, 0xe0e8, 0xe0e9, 0x6d71, 0xe0eb, 0xe0ec, 0x59f9, 0xe0ee, 0x5aab, 0x5a63, 0x36e6, 0xe0f2, 0x5a77, 0x3708, 0x5a96, 0x7465, 0x5ad3, 0xe0f8, 0xe0f9, 0x3d85, 0xe0fb, 0x3732, 0xe0fd, 0x5e83, 0x52d0, 0x5b76, 0x6588, 0x5b7c, 0xe103, 0x4004, 0x485d, 0xe106, 0x5bd5, 0x6160, 0xe109, 0xe10a, 0xe10b, 0x5bf3, 0x5b9d, 0x4d10, 0x5c05, 0xe110, 0x5c13, 0x73ce, 0x5c14, 0xe114, 0xe115, 0x5c49, 0x48dd, 0x5c85, 0x5ce9, 0x5cef, 0x5d8b, 0xe11c, 0xe11d, 0x5d10, 0x5d18, 0x5d46, 0xe121, 0x5cba, 0x5dd7, 0x82fc, 0x382d, 0xe126, 0xe127, 0xe128, 0x8287, 0x3836, 0x3bc2, 0x5e2e, 0x6a8a, 0x5e75, 0x5e7a, 0xe130, 0xe131, 0x53a6, 0x4eb7, 0x5ed0, 0x53a8, 0xe136, 0x5e09, 0x5ef4, 0xe139, /* 0xfc */ 0x5ef9, 0x5efb, 0x38a0, 0x5efc, 0x683e, 0x941b, 0x5f0d, 0xe141, 0xe142, 0x3ade, 0x48ae, 0xe145, 0x5f3a, 0xe147, 0xe148, 0x5f58, 0xe14a, 0x5f63, 0x97bd, 0xe14d, 0x5f72, 0x9340, 0xe150, 0x5fa7, 0x5db6, 0x3d5f, 0xe154, 0xe155, 0xe156, 0xe157, 0x91d6, 0xe159, 0xe15a, 0x6031, 0x6685, 0xe15d, 0x3963, 0x3dc7, 0x3639, 0x5790, 0xe162, 0x7971, 0x3e40, 0x609e, 0x60a4, 0x60b3, 0xe168, 0xe169, 0xe16a, 0x74a4, 0x50e1, 0x5aa0, 0x6164, 0x8424, 0x6142, 0xe171, 0xe172, 0x6181, 0x51f4, 0xe175, 0x6187, 0x5baa, 0xe178, 0xe179, 0x61d3, 0xe17b, 0xe17c, 0x61d0, 0x3932, 0xe17f, 0xe180, 0x6023, 0x615c, 0x651e, 0x638b, 0xe185, 0x62c5, 0xe187, 0x62d5, 0xe189, 0x636c, 0xe18b, 0x3a17, 0x6438, 0x63f8, 0xe18f, 0xe190, 0x6490, 0x6f8a, 0xe193, 0x9814, 0xe195, 0xe196, 0x64e1, 0x64e5, 0x947b, 0x3a66, 0x643a, 0x3a57, 0x654d, 0x6f16, 0xe19f, 0xe1a0, 0x6585, 0x656d, 0x655f, 0xe1a4, 0x65b5, 0xe1a6, 0x4b37, 0x65d1, 0x40d8, 0xe1aa, 0x65e0, 0x65e3, 0x5fdf, 0xe1ae, 0x6618, 0xe1b0, 0xe1b1, 0x6644, 0xe1b3, 0xe1b4, 0x664b, 0xe1b6, 0x6667, 0xe1b8, 0x6673, 0x6674, 0xe1bb, 0xe1bc, 0xe1bd, 0xe1be, 0xe1bf, 0x77c5, 0xe1c1, 0x99a4, 0x6702, 0xe1c4, 0xe1c5, 0x3b2b, 0x69fa, 0xe1c8, 0x675e, 0x6767, 0x6762, 0xe1cc, 0xe1cd, 0x67d7, 0x44e9, 0x6822, 0x6e50, 0x923c, 0x6801, 0xe1d4, 0xe1d5, 0x685d, /* 0xfd */ 0xe1d7, 0x69e1, 0x6a0b, 0xe1da, 0x6973, 0x68c3, 0xe1dd, 0x6901, 0x6900, 0x3d32, 0x3a01, 0xe1e2, 0x3b80, 0x67ac, 0x6961, 0xe1e6, 0x42fc, 0x6936, 0x6998, 0x3ba1, 0xe1eb, 0x8363, 0x5090, 0x69f9, 0xe1ef, 0xe1f0, 0x6a45, 0xe1f2, 0x6a9d, 0x3bf3, 0x67b1, 0x6ac8, 0xe1f7, 0x3c0d, 0x6b1d, 0xe1fa, 0x60de, 0x6b35, 0x6b74, 0xe1fe, 0x6eb5, 0xe200, 0xe201, 0xe202, 0x3740, 0x5421, 0xe205, 0x6be1, 0xe207, 0x6bdc, 0x6c37, 0xe20a, 0xe20b, 0xe20c, 0x6c5a, 0x8226, 0x6c79, 0xe210, 0x44c5, 0xe212, 0xe213, 0xe214, 0xe215, 0xe216, 0x36e5, 0x3ceb, 0xe219, 0x9b83, 0xe21b, 0xe21c, 0x7f8f, 0x6837, 0xe21f, 0xe220, 0xe221, 0x6d96, 0x6d5c, 0x6e7c, 0x6f04, 0xe226, 0xe227, 0xe228, 0x8533, 0xe22a, 0x51c7, 0x6c9c, 0x6e1d, 0x842e, 0xe22f, 0x6e2f, 0xe231, 0x7453, 0xe233, 0x79cc, 0x6e4f, 0x5a91, 0xe237, 0x6ff8, 0x370d, 0x6f9d, 0xe23b, 0x6efa, 0xe23d, 0xe23e, 0x4555, 0x93f0, 0x6f44, 0x6f5c, 0x3d4e, 0x6f74, 0xe245, 0x3d3b, 0x6f9f, 0xe248, 0x6fd3, 0xe24a, 0xe24b, 0xe24c, 0xe24d, 0xe24e, 0xe24f, 0x51df, 0xe251, 0xe252, 0xe253, 0xe254, 0x704b, 0x707e, 0x70a7, 0x7081, 0x70cc, 0x70d5, 0x70d6, 0x70df, 0x4104, 0x3de8, 0x71b4, 0x7196, 0xe261, 0x712b, 0x7145, 0x5a88, 0x714a, 0x716e, 0x5c9c, 0xe268, 0x714f, 0x9362, 0xe26b, 0x712c, 0xe26d, 0xe26e, 0xe26f, 0x71ba, 0xe271, 0x70bd, 0x720e, /* 0xfe */ 0x9442, 0x7215, 0x5911, 0x9443, 0x7224, 0x9341, 0xe27a, 0x722e, 0x7240, 0xe27d, 0x68bd, 0x7255, 0x7257, 0x3e55, 0xe282, 0x680d, 0x6f3d, 0x7282, 0x732a, 0x732b, 0xe288, 0xe289, 0x48ed, 0xe28b, 0x7328, 0x732e, 0x73cf, 0x73aa, 0xe290, 0xe291, 0x73c9, 0x7449, 0xe294, 0xe295, 0xe296, 0x6623, 0x36c5, 0xe299, 0xe29a, 0xe29b, 0x73f7, 0x7415, 0x6903, 0xe29f, 0x7439, 0xe2a1, 0x3ed7, 0x745c, 0xe2a4, 0x7460, 0xe2a6, 0x7447, 0x73e4, 0x7476, 0x83b9, 0x746c, 0x3730, 0x7474, 0x93f1, 0x6a2c, 0x7482, 0x4953, 0xe2b2, 0xe2b3, 0xe2b4, 0xe2b5, 0x5b46, 0xe2b7, 0xe2b8, 0x74c8, 0xe2ba, 0x750e, 0x74e9, 0x751e, 0xe2be, 0xe2bf, 0x5bd7, 0xe2c1, 0x9385, 0x754d, 0x754a, 0x7567, 0x756e, 0xe2c7, 0x3f04, 0xe2c9, 0x758e, 0x745d, 0x759e, 0x75b4, 0x7602, 0x762c, 0x7651, 0x764f, 0x766f, 0x7676, 0xe2d4, 0x7690, 0x81ef, 0x37f8, 0xe2d8, 0xe2d9, 0x76a1, 0x76a5, 0x76b7, 0x76cc, 0xe2de, 0x8462, 0xe2e0, 0xe2e1, 0xe2e2, 0x771e, 0x7726, 0x7740, 0x64af, 0xe2e7, 0x7758, 0xe2e9, 0x77af, 0xe2eb, 0xe2ec, 0xe2ed, 0x77f4, 0x7809, 0xe2f0, 0xe2f1, 0x68ca, 0x78af, 0x78c7, 0x78d3, 0x96a5, 0x792e, 0xe2f8, 0x78d7, 0x7934, 0x78b1, 0xe2fc, 0x8fb8, 0x8884, 0xe2ff, 0xe300, 0xe301, 0x7986, 0x8900, 0x6902, 0x7980, 0xe306, 0x799d, 0xe308, 0x793c, 0x79a9, 0x6e2a, 0xe30c, 0x3ea8, 0x79c6, 0xe30f, 0x79d4, }; static int big5hkscs_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c1 = s[0]; if ((c1 >= 0x81 && c1 <= 0xfe)) { if (n >= 2) { unsigned char c2 = s[1]; if ((c2 >= 0x40 && c2 < 0x7f) || (c2 >= 0xa1 && c2 < 0xff)) { unsigned int i = 157 * (c1 - 0x81) + (c2 - (c2 >= 0xa1 ? 0x62 : 0x40)); unsigned short wc = 0xfffd; { if (i < 19782) wc = big5hkscs_2uni_page81[i]; } if (wc != 0xfffd) { *pwc = (ucs4_t) wc; return 2; } } return RET_ILSEQ; } return RET_TOOFEW(0); } return RET_ILSEQ; } static const unsigned short big5hkscs_2charset[23202] = { 0xa246, 0xa247, 0xa244, 0xa1b1, 0xc6d8, 0xa1c2, 0xa258, 0xa1d3, 0xa1a6, 0xa367, 0xa150, 0xa14d, 0x8859, 0x8857, 0x885d, 0x885b, 0x8866, 0x8861, 0x885f, 0xa1d1, 0x886a, 0x8868, 0x886f, 0x886d, 0x88a7, 0x8873, 0x8871, 0x8877, 0x8875, 0xa1d2, 0xc8fb, 0x887b, 0x8879, 0x88a2, 0x8856, 0x8867, 0x885a, 0x886c, 0x885c, 0x886e, 0x8870, 0xc8fc, 0x885e, 0x8874, 0xc8fa, 0x8878, 0x8858, 0x8869, 0x8872, 0x8860, 0x8876, 0x887a, 0x887c, 0x887d, 0x887e, 0x88a1, 0xc8f6, 0x886b, 0xc8f8, 0xc8f7, 0x88a8, 0xc8fe, 0xc8f9, 0xc8f5, 0xc8fd, 0xc6d9, 0xa3be, 0xa3bc, 0xa3bd, 0xa3bf, 0xa1c5, 0xa3bb, 0xa1c2, 0xa344, 0xa345, 0xa346, 0xa347, 0xa348, 0xa349, 0xa34a, 0xa34b, 0xa34c, 0xa34d, 0xa34e, 0xa34f, 0xa350, 0xa351, 0xa352, 0xa353, 0xa354, 0xa355, 0xa356, 0xa357, 0xa358, 0xa359, 0xa35a, 0xa35b, 0xa35c, 0xa35d, 0xa35e, 0xa35f, 0xa360, 0xa361, 0xa362, 0xa363, 0xa364, 0xa365, 0xa366, 0xa367, 0xa368, 0xa369, 0xa36a, 0xa36b, 0xa36c, 0xa36d, 0xa36e, 0xa36f, 0xa370, 0xa371, 0xa372, 0xa373, 0xc7f9, 0xc7f3, 0xc7f4, 0xc7f5, 0xc7f6, 0xc7f7, 0xc7f8, 0xc7fa, 0xc7fb, 0xc7fc, 0xc7fd, 0xc7fe, 0xc840, 0xc841, 0xc842, 0xc843, 0xc844, 0xc845, 0xc846, 0xc847, 0xc848, 0xc849, 0xc84a, 0xc84b, 0xc84c, 0xc84d, 0xc84e, 0xc84f, 0xc850, 0xc851, 0xc852, 0xc853, 0xc854, 0xc855, 0xc856, 0xc857, 0xc858, 0xc859, 0xc85a, 0xc85c, 0xc85d, 0xc85e, 0xc85f, 0xc860, 0xc861, 0xc862, 0xc863, 0xc864, 0xc865, 0xc866, 0xc867, 0xc868, 0xc869, 0xc86a, 0xc86b, 0xc86c, 0xc86d, 0xc86e, 0xc86f, 0xc870, 0xc871, 0xc872, 0xc873, 0xc874, 0xc875, 0xc85b, 0x8863, 0x88a4, 0x8865, 0x88a6, 0xa156, 0xa158, 0xa277, 0xa1fc, 0xa1a5, 0xa1a6, 0xa1a7, 0xa1a8, 0xa145, 0xa3bb, 0xa14c, 0xa14b, 0xa145, 0xa1ac, 0xa1b2, 0xa1ab, 0xa1b0, 0xa1c3, 0xa24a, 0xa1c1, 0xa24b, 0xc8d2, 0xc8d3, 0xa2b9, 0xa2ba, 0xa2bb, 0xa2bc, 0xa2bd, 0xa2be, 0xa2bf, 0xa2c0, 0xa2c1, 0xa2c2, 0xc6b5, 0xc6b6, 0xc6b7, 0xc6b8, 0xc6b9, 0xc6ba, 0xc6bb, 0xc6bc, 0xc6bd, 0xc6be, 0xa1f6, 0xa1f4, 0xa1f7, 0xa1f5, 0xa1f8, 0xa1f9, 0xa1fb, 0xa1fa, 0xc877, 0xc878, 0xc876, 0xa241, 0xa242, 0xa258, 0xa1d4, 0xa1db, 0xa1e8, 0xa1e7, 0xa1fd, 0xa1fc, 0xa1e4, 0xa1e5, 0xa1ec, 0xa1ed, 0xa1ef, 0xa1ee, 0xa1dc, 0xa1da, 0xa1dd, 0xa1dd, 0xa1d8, 0xa1d9, 0xa1f2, 0xa1f3, 0xa1e6, 0xa1e9, 0xa15b, 0xc6a1, 0xc6a2, 0xc6a3, 0xc6a4, 0xc6a5, 0xc6a6, 0xc6a7, 0xc6a8, 0xc6a9, 0xc6aa, 0xc6ab, 0xc6ac, 0xc6ad, 0xc6ae, 0xc6af, 0xc6b0, 0xc6b1, 0xc6b2, 0xc6b3, 0xc6b4, 0xa277, 0xa278, 0xa27a, 0xa27b, 0xa27c, 0xa27d, 0xa275, 0xa274, 0xa273, 0xa272, 0xa271, 0xf9f9, 0xf9f8, 0xf9e6, 0xf9ef, 0xf9dd, 0xf9e8, 0xf9f1, 0xf9df, 0xf9ec, 0xf9f5, 0xf9e3, 0xf9ee, 0xf9f7, 0xf9e5, 0xf9e9, 0xf9f2, 0xf9e0, 0xf9eb, 0xf9f4, 0xf9e2, 0xf9e7, 0xf9f0, 0xf9de, 0xf9ed, 0xf9f6, 0xf9e4, 0xf9ea, 0xf9f3, 0xf9e1, 0xf9fa, 0xf9fb, 0xf9fd, 0xf9fc, 0xa2ac, 0xa2ad, 0xa2ae, 0xa15a, 0xa262, 0xa263, 0xa264, 0xa265, 0xa266, 0xa267, 0xa268, 0xa269, 0xa270, 0xa26f, 0xa26e, 0xa26d, 0xa26c, 0xa26b, 0xa26a, 0xf9fe, 0xa276, 0xa279, 0xa1bd, 0xa1bc, 0xa1b6, 0xa1b5, 0xa1bf, 0xa1be, 0xa1bb, 0xa1ba, 0xa1b3, 0xa1b7, 0xa1b4, 0xa2a8, 0xa2a9, 0xa2ab, 0xa2aa, 0xa1b9, 0xa1b8, 0xa1f3, 0xa1f0, 0xa1f2, 0xa1f1, 0xc6e6, 0xc8d6, 0xc8d7, 0xc8d8, 0xc8d9, 0xc8da, 0xc8db, 0xc8dc, 0xc8dd, 0xc8de, 0xc8df, 0xc8e0, 0xc8e1, 0xc8e2, 0xc8e3, 0xc8e4, 0xc8e5, 0xc8e6, 0xc8e7, 0xc8e8, 0xc8e9, 0xc8ea, 0xc8eb, 0xc8ec, 0xc8ed, 0xc8ee, 0xc8ef, 0xc8f0, 0xc8f1, 0xc6cd, 0xa140, 0xa142, 0xa143, 0xa1b2, 0xc6e0, 0xc6e1, 0xc6e2, 0xa171, 0xa172, 0xa16d, 0xa16e, 0xa175, 0xa176, 0xa179, 0xa17a, 0xa169, 0xa16a, 0xa245, 0xa165, 0xa166, 0xa1e3, 0xa1a9, 0xa1aa, 0xa2c3, 0xa2c4, 0xa2c5, 0xa2c6, 0xa2c7, 0xa2c8, 0xa2c9, 0xa2ca, 0xa2cb, 0xa1ca, 0xc6e7, 0xc6e8, 0xc6e9, 0xc6ea, 0xc6eb, 0xc6ec, 0xc6ed, 0xc6ee, 0xc6ef, 0xc6f0, 0xc6f1, 0xc6f2, 0xc6f3, 0xc6f4, 0xc6f5, 0xc6f6, 0xc6f7, 0xc6f8, 0xc6f9, 0xc6fa, 0xc6fb, 0xc6fc, 0xc6fd, 0xc6fe, 0xc740, 0xc741, 0xc742, 0xc743, 0xc744, 0xc745, 0xc746, 0xc747, 0xc748, 0xc749, 0xc74a, 0xc74b, 0xc74c, 0xc74d, 0xc74e, 0xc74f, 0xc750, 0xc751, 0xc752, 0xc753, 0xc754, 0xc755, 0xc756, 0xc757, 0xc758, 0xc759, 0xc75a, 0xc75b, 0xc75c, 0xc75d, 0xc75e, 0xc75f, 0xc760, 0xc761, 0xc762, 0xc763, 0xc764, 0xc765, 0xc766, 0xc767, 0xc768, 0xc769, 0xc76a, 0xc76b, 0xc76c, 0xc76d, 0xc76e, 0xc76f, 0xc770, 0xc771, 0xc772, 0xc773, 0xc774, 0xc775, 0xc776, 0xc777, 0xc778, 0xc779, 0xc77a, 0xc8d4, 0xc8d5, 0xc6dc, 0xc6dd, 0xc77b, 0xc77c, 0xc77d, 0xc77e, 0xc7a1, 0xc7a2, 0xc7a3, 0xc7a4, 0xc7a5, 0xc7a6, 0xc7a7, 0xc7a8, 0xc7a9, 0xc7aa, 0xc7ab, 0xc7ac, 0xc7ad, 0xc7ae, 0xc7af, 0xc7b0, 0xc7b1, 0xc7b2, 0xc7b3, 0xc7b4, 0xc7b5, 0xc7b6, 0xc7b7, 0xc7b8, 0xc7b9, 0xc7ba, 0xc7bb, 0xc7bc, 0xc7bd, 0xc7be, 0xc7bf, 0xc7c0, 0xc7c1, 0xc7c2, 0xc7c3, 0xc7c4, 0xc7c5, 0xc7c6, 0xc7c7, 0xc7c8, 0xc7c9, 0xc7ca, 0xc7cb, 0xc7cc, 0xc7cd, 0xc7ce, 0xc7cf, 0xc7d0, 0xc7d1, 0xc7d2, 0xc7d3, 0xc7d4, 0xc7d5, 0xc7d6, 0xc7d7, 0xc7d8, 0xc7d9, 0xc7da, 0xc7db, 0xc7dc, 0xc7dd, 0xc7de, 0xc7df, 0xc7e0, 0xc7e1, 0xc7e2, 0xc7e3, 0xc7e4, 0xc7e5, 0xc7e6, 0xc7e7, 0xc7e8, 0xc7e9, 0xc7ea, 0xc7eb, 0xc7ec, 0xc7ed, 0xc7ee, 0xc7ef, 0xc7f0, 0xc7f1, 0xc7f2, 0xc6e3, 0xc6da, 0xc6db, 0xa374, 0xa375, 0xa376, 0xa377, 0xa378, 0xa379, 0xa37a, 0xa37b, 0xa37c, 0xa37d, 0xa37e, 0xa3a1, 0xa3a2, 0xa3a3, 0xa3a4, 0xa3a5, 0xa3a6, 0xa3a7, 0xa3a8, 0xa3a9, 0xa3aa, 0xa3ab, 0xa3ac, 0xa3ad, 0xa3ae, 0xa3af, 0xa3b0, 0xa3b1, 0xa3b2, 0xa3b3, 0xa3b4, 0xa3b5, 0xa3b6, 0xa3b7, 0xa3b8, 0xa3b9, 0xa3ba, 0xa440, 0xa447, 0xa454, 0xa57c, 0xa457, 0xa4a4, 0xa455, 0xa5d2, 0xa441, 0xa4fe, 0xa442, 0xa4d1, 0xa661, 0xa448, 0xa440, 0xa447, 0xa454, 0xa57c, 0xa4ad, 0xa4bb, 0xa443, 0xa44b, 0xa445, 0xa451, 0xa4eb, 0xa4f5, 0xa4f4, 0xa4ec, 0xaaf7, 0xa467, 0xa4e9, 0xc8d1, 0xa6b3, 0xaac0, 0xa657, 0xaf53, 0xb05d, 0xafac, 0xb3d2, 0xa54e, 0xa949, 0xbec7, 0xbaca, 0xa5f8, 0xb8ea, 0xa8f3, 0xb2bd, 0xa5f0, 0xa6db, 0xa6dc, 0xa440, 0xa447, 0xa454, 0xa57c, 0xa4ad, 0xa4bb, 0xa443, 0xa44b, 0xa445, 0xa451, 0xa4eb, 0xa4f5, 0xa4f4, 0xa4ec, 0xaaf7, 0xa467, 0xa4e9, 0xaee8, 0xa6b3, 0xaac0, 0xa657, 0xaf53, 0xb05d, 0xafac, 0xb3d2, 0xafb5, 0xa86b, 0xa46b, 0xbe41, 0xc075, 0xa64c, 0xaa60, 0xb6b5, 0xa5f0, 0xbc67, 0xa1c0, 0xa457, 0xa4a4, 0xa455, 0xa5aa, 0xa56b, 0xc2e5, 0xa976, 0xbec7, 0xbaca, 0xa5f8, 0xb8ea, 0xa8f3, 0xa95d, 0xa255, 0xa256, 0xa250, 0xa251, 0xa252, 0xa254, 0xa257, 0xa253, 0xa1eb, 0xa1ea, 0xa24f, 0x9277, 0x96df, 0x89d5, 0x93cd, 0x9bdf, 0xfa68, 0x89da, 0x8f59, 0x89db, 0x8f5d, 0x89dc, 0x96f7, 0x8ada, 0x8bdc, 0x97db, 0x9e53, 0x9daa, 0x9bea, 0x8a6e, 0x8bc8, 0x89e8, 0x89ea, 0x8c4b, 0xfb70, 0x89ed, 0x94dd, 0x89ee, 0x9eb4, 0x8ad3, 0x92db, 0x94db, 0x89f9, 0xfb7a, 0x89fb, 0x9efc, 0x89fc, 0x89bf, 0x89fe, 0x89e6, 0x9d46, 0x9dee, 0xa07e, 0xa068, 0x98e9, 0x8b68, 0x8dfd, 0x8bbe, 0x9fd9, 0x8aeb, 0x9fd7, 0x8b6a, 0x9c5c, 0x8bb1, 0xfb5e, 0x9df3, 0xa0d0, 0xfc66, 0x92e9, 0x9aec, 0x8fab, 0xfa48, 0x8e45, 0x9c6f, 0x9ede, 0x89ef, 0x96e9, 0x9ebb, 0x94de, 0x9eb8, 0x97ba, 0xfb65, 0x95d6, 0x9cbb, 0x97da, 0x8f45, 0xfb7d, 0x9158, 0xfe64, 0x9856, 0x9b4d, 0x935b, 0x95c7, 0x97e7, 0x9359, 0x91f5, 0x97b8, 0xfda2, 0xfbb6, 0x92fa, 0x9357, 0x8ba6, 0xfbb9, 0x97b0, 0xfdc4, 0x9ca1, 0x91f2, 0x91f9, 0x8ff1, 0x9745, 0x9853, 0xfe78, 0xfbc1, 0x9251, 0x9dad, 0xfd6c, 0xfa6b, 0x9bc2, 0x9a7b, 0x8b60, 0x934b, 0x9abd, 0x91b7, 0x95b4, 0xfec5, 0x9ef0, 0x8d64, 0x9269, 0x8d67, 0xfbea, 0xfbef, 0x8d68, 0x93eb, 0xfc42, 0x9166, 0xfacd, 0x93dd, 0x8bcc, 0x8d6d, 0x8d6e, 0x96a8, 0xfca6, 0x8d6f, 0x8d70, 0xfc64, 0x9060, 0x8d74, 0x97c3, 0x8ad0, 0x9274, 0x9bbe, 0x9cc8, 0x9cba, 0x8d78, 0x9eb9, 0x955a, 0x91b4, 0x8a48, 0x8d7d, 0x8a7d, 0x8ac2, 0xfd4a, 0x8da1, 0x8ad1, 0xfcb4, 0x8b47, 0x93a4, 0x9eda, 0x8a51, 0x8da6, 0x9ec5, 0xfcc4, 0xa078, 0x94b5, 0xfcc2, 0x8a6b, 0x8dab, 0xfae8, 0x8dad, 0xfc49, 0x93c1, 0x906f, 0x8db0, 0x947e, 0x90fa, 0x9479, 0x8db2, 0xfcee, 0x997b, 0x8db4, 0x8db7, 0x91b3, 0x8dbb, 0x8dba, 0x8dbc, 0x9044, 0xfd4c, 0x93e4, 0x93e0, 0xfd53, 0x8dc3, 0x9bb8, 0xfbf0, 0x93e9, 0x93f6, 0x8dc5, 0x8dca, 0x8dcc, 0xfd5d, 0x93b5, 0xfd61, 0x9cf8, 0x9252, 0xa0e8, 0x9ca5, 0x8c56, 0x8dd6, 0x97c0, 0xa0de, 0x97d2, 0xfaa5, 0xfda3, 0x8ddb, 0x8eaf, 0x91b5, 0xfd49, 0xfdd1, 0x8deb, 0x97c6, 0xfdce, 0x90fc, 0xfc59, 0x96d6, 0x97c5, 0x8def, 0x97d7, 0x8df0, 0x96a6, 0xfbbf, 0x8df3, 0x9449, 0x8df5, 0x9872, 0x8e6b, 0xfafd, 0x8f50, 0x9dcc, 0xfc65, 0x8c44, 0x996e, 0x94a1, 0x8f63, 0xa0da, 0x9253, 0xfde9, 0x9db5, 0x9879, 0x9d5d, 0x8d63, 0x9669, 0x9f70, 0xfc6a, 0x8ac7, 0x89d7, 0xfe4d, 0x9edd, 0xfefb, 0x98bc, 0xfacc, 0x95b0, 0x9464, 0x936f, 0x94b9, 0x95ec, 0x91ee, 0x98c3, 0x95f6, 0x8ffd, 0x98c5, 0x9766, 0xfe6e, 0x97dd, 0x8caa, 0x92d2, 0x9761, 0x98cb, 0x95f0, 0x975d, 0x91e3, 0x98cc, 0x9469, 0x98cd, 0x98ce, 0x95fc, 0x94a3, 0x9662, 0xfeb6, 0x9463, 0x98d0, 0x98d1, 0x9475, 0xfae0, 0x9472, 0x98d6, 0x8af0, 0x98d9, 0x98db, 0x98dd, 0x98a8, 0x8a6d, 0x8afb, 0x8aae, 0xfbc9, 0x8c5d, 0x98e4, 0x98e6, 0x98e8, 0x8a4d, 0x9257, 0x95df, 0xa0ac, 0x98eb, 0x98ec, 0x8cc3, 0x98f4, 0x8ab8, 0x9ee7, 0x94bc, 0xfcd1, 0x9cc6, 0x9e7e, 0x98fe, 0xfde8, 0x9940, 0x94c9, 0x94d3, 0x9946, 0x90c0, 0x94d1, 0x9573, 0x93c2, 0x9948, 0x994b, 0x8e55, 0x994e, 0x8efe, 0x8e59, 0x94ec, 0x94ef, 0x8c60, 0x8f74, 0x9955, 0x9544, 0x8ccb, 0x9956, 0x9959, 0x995b, 0x8cc4, 0xfa45, 0x90b7, 0x9743, 0x95cd, 0x97c9, 0xfd50, 0x8eb9, 0x95c6, 0x9967, 0x8ab9, 0x8dfc, 0x8a76, 0x9d51, 0x9973, 0x9d4f, 0x997a, 0x9564, 0x99a1, 0x99a5, 0x99a7, 0x8eed, 0x99ad, 0x946e, 0x8f70, 0xfad0, 0x99b3, 0xa053, 0x965c, 0xfd7a, 0x97fe, 0x92bd, 0x97fd, 0x8f64, 0xfcf7, 0x9562, 0x97cd, 0x9e64, 0x924c, 0x8ec9, 0x99bc, 0x9da5, 0x8f54, 0x8f7c, 0x8ea2, 0x8f7a, 0x97ae, 0x96c8, 0x99c3, 0x90d6, 0x9cbe, 0x8f76, 0x9470, 0xfb4b, 0xfdca, 0x8ec7, 0xa0f9, 0x8fa9, 0x99c7, 0x90d7, 0x9edf, 0x99ce, 0x8fba, 0x8feb, 0x99cf, 0x8fc2, 0x92c9, 0x97dc, 0x95b3, 0x9c79, 0x95b2, 0x8fdb, 0x9be3, 0x9e7a, 0x9bee, 0x99de, 0xfafa, 0x9ee5, 0x8a52, 0x99e1, 0x8a67, 0x8bb5, 0x8aac, 0x99e9, 0xfbca, 0x97de, 0x95d1, 0x99f5, 0xfc4a, 0x9ba9, 0xfbdc, 0xfe56, 0x9ea4, 0x9d49, 0x95db, 0x89c5, 0x99f8, 0x9664, 0x9055, 0x96d4, 0x977c, 0x964d, 0x97e1, 0x9a48, 0x9a49, 0xfe7d, 0x90aa, 0x9a50, 0x9347, 0x8ed8, 0x90c9, 0x9a55, 0x90bc, 0x9a58, 0x8bb8, 0x90d5, 0x9641, 0x9a5a, 0x9a5c, 0x97c2, 0x8abb, 0x9baa, 0x90f5, 0x9a60, 0x9145, 0x8c58, 0x9a63, 0x8c49, 0x8bb6, 0xfccf, 0x966b, 0x9a6e, 0x914f, 0x9746, 0xa0e6, 0x92d7, 0x9675, 0x93d4, 0x91bb, 0x9679, 0x9a70, 0x9678, 0x91cd, 0x9c4a, 0xa06f, 0xa06a, 0x915f, 0x9fa5, 0x89ba, 0x9ecd, 0x9a79, 0x9dce, 0x8cd2, 0x9d73, 0x96b9, 0x96bc, 0x9cd1, 0x89b7, 0x9eee, 0xfb43, 0x9ec9, 0xfbd3, 0x91ae, 0x9d78, 0x9d7b, 0xa440, 0xa442, 0xa443, 0x9eb3, 0xc945, 0xa456, 0xa454, 0xa457, 0xa455, 0xc946, 0xa4a3, 0xc94f, 0xc94d, 0xa4a2, 0xa4a1, 0xa542, 0xa541, 0xa540, 0xa543, 0xa4fe, 0x9eb2, 0x9dd6, 0xa5e0, 0xa5e1, 0x994f, 0x89ce, 0xa8c3, 0x8bc0, 0x9fc4, 0xa458, 0x8bd4, 0xa4a4, 0xc950, 0x8c72, 0xa4a5, 0xc963, 0xa6ea, 0xcbb1, 0xc6bf, 0x8bf9, 0xa459, 0xa4a6, 0xa544, 0xc964, 0x8946, 0xc6c0, 0xc940, 0xa444, 0xa45b, 0xc947, 0xa45c, 0xfae5, 0xa4a7, 0xa545, 0xa547, 0xa546, 0xa5e2, 0xa5e3, 0xa8c4, 0xadbc, 0xa441, 0xc87b, 0x8bc6, 0xc941, 0xa445, 0xa45e, 0xa45d, 0xa5e4, 0x9c57, 0xa8c5, 0x9afb, 0xb0ae, 0xd44b, 0x89d0, 0x89cf, 0xb6c3, 0xdcb1, 0xdcb2, 0xc6c1, 0xa446, 0x89d1, 0xa4a9, 0x89e2, 0xa8c6, 0xa447, 0xc948, 0xa45f, 0xa4aa, 0xa4ac, 0xc951, 0xa4ad, 0xa4ab, 0x927e, 0xa5e5, 0x9dba, 0xa8c7, 0xa8c8, 0xab45, 0xc6c2, 0xa460, 0xa4ae, 0x8c6f, 0xa5e6, 0xa5e8, 0xa5e7, 0xa6eb, 0xa8c9, 0xa8ca, 0xab46, 0xab47, 0xadbd, 0xdcb3, 0xfbf8, 0xf6d6, 0xa448, 0x8bc7, 0x926b, 0x89d2, 0xa4b0, 0xa4af, 0xc952, 0xa4b1, 0xa4b7, 0xa4b2, 0xa4b3, 0xc954, 0xc953, 0xa4b5, 0xa4b6, 0xa4b4, 0x9fcf, 0xa54a, 0xa54b, 0xa54c, 0xa54d, 0xa549, 0xa550, 0xc96a, 0xc966, 0xc969, 0xa551, 0xa561, 0xc968, 0xa54e, 0xa54f, 0xa548, 0xc965, 0xc967, 0x9da9, 0x89d3, 0x99e2, 0xa5f5, 0xc9b0, 0xa5f2, 0xa5f6, 0xc9ba, 0xc9ae, 0xa5f3, 0xc9b2, 0x9267, 0xa5f4, 0xa5f7, 0xa5e9, 0xc9b1, 0xa5f8, 0xc9b5, 0x92a4, 0xc9b9, 0xc9b6, 0xc9b3, 0xa5ea, 0xa5ec, 0xa5f9, 0xa5ee, 0xc9ab, 0xa5f1, 0xa5ef, 0xa5f0, 0xc9bb, 0xc9b8, 0xc9af, 0xa5ed, 0x8c73, 0xc9ac, 0xa5eb, 0x894e, 0xc9b4, 0xc9b7, 0x894f, 0x9278, 0xc9ad, 0xca66, 0xa742, 0xa6f4, 0x91b6, 0xca67, 0xa6f1, 0xa744, 0x89d4, 0xa6f9, 0x9fd2, 0xa6f8, 0xca5b, 0xa6fc, 0xa6f7, 0xca60, 0xca68, 0xca64, 0x92a7, 0xa6fa, 0x95a2, 0xa6fd, 0xa6ee, 0xa747, 0xca5d, 0x926e, 0xcbbd, 0xa6ec, 0xa743, 0xa6ed, 0xa6f5, 0xa6f6, 0xca62, 0xca5e, 0xa6fb, 0xa6f3, 0xca5a, 0xa6ef, 0xca65, 0xa745, 0xa748, 0xa6f2, 0xa740, 0xa746, 0xa6f0, 0xca63, 0xa741, 0xca69, 0xca5c, 0xa6fe, 0xca5f, 0xca61, 0xa8d8, 0xcbbf, 0xcbcb, 0xa8d0, 0xcbcc, 0xa8cb, 0xa8d5, 0x96ea, 0xa8ce, 0xcbb9, 0xa8d6, 0xcbb8, 0xcbbc, 0xcbc3, 0xcbc1, 0xa8de, 0xa8d9, 0xcbb3, 0xcbb5, 0xa8db, 0xa8cf, 0xcbb6, 0xcbc2, 0xcbc9, 0xa8d4, 0xcbbb, 0xcbb4, 0xa8d3, 0xcbb7, 0xa8d7, 0xcbba, 0x926f, 0xa8d2, 0xa8cd, 0xa8dc, 0xcbc4, 0xa8dd, 0xcbc8, 0xcbc6, 0xcbca, 0xa8da, 0xcbbe, 0xcbb2, 0xcbc0, 0xa8d1, 0xcbc5, 0xa8cc, 0xcbc7, 0x92a3, 0x8950, 0xfa57, 0xab56, 0xab4a, 0x9866, 0xcde0, 0xcde8, 0xab49, 0xab51, 0xab5d, 0xcdee, 0xcdec, 0xcde7, 0x89d6, 0xab4b, 0xcded, 0xcde3, 0xab59, 0xab50, 0xab58, 0xcdde, 0xcdea, 0x98b2, 0xcde1, 0xab54, 0xcde2, 0x92ab, 0xcddd, 0xab5b, 0xab4e, 0xab57, 0xab4d, 0xcddf, 0xcde4, 0xcdeb, 0xab55, 0xab52, 0xcde6, 0xab5a, 0xcde9, 0xcde5, 0xab4f, 0xab5c, 0xab53, 0xab4c, 0xab48, 0x96de, 0x92ac, 0xcdef, 0xadd7, 0xadc1, 0x8c70, 0xadd1, 0x9f6e, 0xadd6, 0xd0d0, 0xd0cf, 0xd0d4, 0xd0d5, 0xadc4, 0x8ef2, 0xadcd, 0x9f6c, 0xadda, 0xadce, 0x89d8, 0xd0c9, 0xadc7, 0xd0ca, 0xfa59, 0xaddc, 0xadd3, 0xadbe, 0xadbf, 0xd0dd, 0xb0bf, 0xadcc, 0xadcb, 0xd0cb, 0xadcf, 0xd45b, 0xadc6, 0xd0d6, 0xadd5, 0xadd4, 0xadca, 0xd0ce, 0xd0d7, 0xd0c8, 0xadc9, 0xd0d8, 0xadd2, 0xd0cc, 0xadc0, 0xadc3, 0xadc2, 0xd0d9, 0xadd0, 0xadc5, 0xadd9, 0xaddb, 0xd0d3, 0xadd8, 0x92a8, 0xd0db, 0xd0cd, 0xd0dc, 0xd0d1, 0x9163, 0xd0da, 0xd0d2, 0x8c40, 0xadc8, 0xd463, 0xd457, 0xb0b3, 0xd45c, 0xd462, 0xb0b2, 0xd455, 0xb0b6, 0xd459, 0xd452, 0xb0b4, 0xd456, 0xb0b9, 0xb0be, 0xd467, 0xd451, 0xb0ba, 0x9f73, 0xd466, 0x92ad, 0xb0b5, 0xd458, 0xb0b1, 0xd453, 0xd44f, 0xd45d, 0xd450, 0xd44e, 0xd45a, 0xd460, 0xd461, 0xb0b7, 0x9be9, 0xd85b, 0xd45e, 0xd44d, 0xd45f, 0x92a9, 0xb0c1, 0xd464, 0xb0c0, 0xd44c, 0xd454, 0xd465, 0xb0bc, 0xb0bb, 0xb0b8, 0xb0bd, 0xb0af, 0xb0b0, 0xb3c8, 0x92aa, 0xd85e, 0xd857, 0xb3c5, 0xd85f, 0x89d9, 0xd855, 0xd858, 0xb3c4, 0xd859, 0xfd56, 0xb3c7, 0xd85d, 0xd853, 0xd852, 0xb3c9, 0xb3ca, 0xb3c6, 0xb3cb, 0xd851, 0xd85c, 0xd85a, 0xd854, 0xb3c3, 0xd856, 0x9fa8, 0xb6ca, 0xb6c4, 0xdcb7, 0xb6cd, 0xdcbd, 0xdcc0, 0xb6c6, 0xb6c7, 0xdcba, 0xb6c5, 0xdcc3, 0xb6cb, 0xdcc4, 0xdcbf, 0xb6cc, 0x8c71, 0xdcb4, 0xb6c9, 0xdcb5, 0xdcbe, 0xdcbc, 0xdcb8, 0xb6c8, 0xdcb6, 0xb6ce, 0xdcbb, 0xdcc2, 0xdcb9, 0xdcc1, 0x92a1, 0xb9b6, 0xb9b3, 0x90e3, 0xb9b4, 0xe0f9, 0xe0f1, 0xb9b2, 0xb9af, 0xe0f2, 0xa0a6, 0xb9b1, 0xe0f5, 0xe0f7, 0x94ab, 0xe0fe, 0xfc72, 0xe0fd, 0xe0f8, 0xb9ae, 0xe0f0, 0xb9ac, 0xe0f3, 0xb9b7, 0xe0f6, 0xe0fa, 0xb9b0, 0xb9ad, 0xe0fc, 0xe0fb, 0xb9b5, 0xe0f4, 0x97c4, 0xbbf8, 0xe4ec, 0xe4e9, 0xbbf9, 0xbbf7, 0x92ae, 0xe4f0, 0xe4ed, 0xe4e6, 0xbbf6, 0xfa67, 0xbbfa, 0xe4e7, 0xbbf5, 0xbbfd, 0xe4ea, 0xe4eb, 0xbbfb, 0xbbfc, 0xe4f1, 0xe4ee, 0xe4ef, 0x92a2, 0xfa69, 0xbeaa, 0xe8f8, 0xbea7, 0xe8f5, 0xbea9, 0xbeab, 0xe8f6, 0xbea8, 0xe8f7, 0xe8f4, 0xc076, 0xecbd, 0xc077, 0xecbb, 0xecbc, 0xecba, 0xecb9, 0xecbe, 0xc075, 0x9268, 0xefb8, 0xefb9, 0xe4e8, 0xefb7, 0xc078, 0xc35f, 0xf1eb, 0xf1ec, 0xc4d7, 0xc4d8, 0xf5c1, 0xf5c0, 0xc56c, 0xc56b, 0xf7d0, 0xa449, 0xa461, 0xa4b9, 0xa4b8, 0xa553, 0xa552, 0xa5fc, 0xa5fb, 0xa5fd, 0xa5fa, 0xa74a, 0xa749, 0xa74b, 0xa8e0, 0xa8df, 0xa8e1, 0x8951, 0xab5e, 0xa259, 0xd0de, 0xa25a, 0xb0c2, 0xa25c, 0xa25b, 0xd860, 0xfa6f, 0xa25d, 0xb9b8, 0xa25e, 0xa44a, 0xa4ba, 0xa5fe, 0xa8e2, 0xfa71, 0xa44b, 0xa4bd, 0xa4bb, 0xa4bc, 0xa640, 0x8952, 0xa74c, 0xa8e4, 0xa8e3, 0xa8e5, 0x945a, 0xaddd, 0xbeac, 0xc6c3, 0x89dd, 0xc94e, 0xc8a2, 0xa554, 0xa555, 0xa641, 0xca6a, 0xab60, 0xab5f, 0xd0e0, 0xd0df, 0xb0c3, 0xc6c4, 0xa4be, 0xc955, 0x9e52, 0x8953, 0xcbcd, 0xab61, 0xade0, 0xadde, 0xaddf, 0x9e55, 0x92ba, 0xbead, 0xc6c5, 0xa556, 0x8c5b, 0xa642, 0xc9bc, 0xfa7d, 0xfaa8, 0x9a68, 0xfa47, 0xa74d, 0xa74e, 0xfa7e, 0xca6b, 0xcbce, 0xa8e6, 0xcbcf, 0x92bb, 0xd0e2, 0xd0e3, 0xade3, 0xfdb6, 0xd0e4, 0xfaa2, 0xd0e1, 0xade4, 0xade2, 0xade1, 0xd0e5, 0xfaa3, 0xd468, 0xfaa4, 0x9bb4, 0xfaa6, 0xd861, 0xdcc5, 0xe140, 0x89df, 0xbbfe, 0xbeae, 0xe8f9, 0xfddb, 0xa44c, 0xa45a, 0xfaa9, 0x8954, 0xfaab, 0xb0c4, 0xb3cd, 0xb9b9, 0xfc7a, 0xc942, 0xa4bf, 0xa559, 0xa557, 0xa558, 0x89e0, 0xa8e7, 0x9f4f, 0xa44d, 0xa44e, 0xc87d, 0xa462, 0x89e1, 0xa4c0, 0xa4c1, 0xa4c2, 0xc9be, 0xa55a, 0xfab0, 0xc96b, 0xa646, 0xc9bf, 0xa644, 0xa645, 0xc9bd, 0xa647, 0xa643, 0xca6c, 0xaaec, 0xca6d, 0x9fcd, 0xa0e7, 0xca6e, 0xa750, 0xa74f, 0xfab1, 0x89a6, 0xa753, 0xa751, 0xa752, 0xa8ed, 0xa8ec, 0xcbd4, 0xcbd1, 0xcbd2, 0x9efa, 0xcbd0, 0xa8ee, 0xa8ea, 0xa8e9, 0xa8eb, 0xa8e8, 0xfab2, 0xa8ef, 0xab63, 0xcdf0, 0xcbd3, 0xab68, 0xcdf1, 0xab64, 0xab67, 0xab66, 0xab65, 0xab62, 0xd0e8, 0xade7, 0xd0eb, 0xade5, 0xfab4, 0x92c4, 0xd0e7, 0xade8, 0xade6, 0xade9, 0xd0e9, 0xd0ea, 0x9f6f, 0xd0e6, 0xd0ec, 0x8bb0, 0xb3d1, 0xb0c5, 0xd469, 0xd46b, 0xd46a, 0xd46c, 0xb0c6, 0xb3ce, 0x9fac, 0xb3cf, 0xb3d0, 0xb6d0, 0xdcc7, 0x89e3, 0xdcc6, 0xdcc8, 0xdcc9, 0xb6d1, 0xb6cf, 0xe141, 0xe142, 0xb9bb, 0xb9ba, 0xe35a, 0xbc40, 0xbc41, 0xbc42, 0xbc44, 0xe4f2, 0xe4f3, 0xbc43, 0x9bd3, 0x89e4, 0xbeaf, 0xbeb0, 0xfab5, 0xf1ed, 0xf5c3, 0xf5c2, 0xf7d1, 0x9fd5, 0xa44f, 0xa55c, 0xa55b, 0x8955, 0xa648, 0x92c5, 0xc9c0, 0x8956, 0xa755, 0xa756, 0xa754, 0xa757, 0xca6f, 0xca70, 0xfab3, 0xfab6, 0xa8f1, 0xcbd5, 0xa8f0, 0xcdf2, 0xab6c, 0xcdf3, 0xab6b, 0xfab7, 0xab69, 0xab6a, 0x9edc, 0xd0ed, 0xfbc4, 0x9f71, 0xb0c7, 0xd46e, 0xb0ca, 0xd46d, 0xb1e5, 0xb0c9, 0xb0c8, 0xb3d4, 0xb3d3, 0xb3d2, 0xb6d2, 0xfaba, 0x92c7, 0xb6d5, 0xb6d6, 0xb6d4, 0xb6d3, 0xe143, 0xe144, 0xe4f5, 0xbc45, 0xe4f4, 0xbeb1, 0xecbf, 0xc079, 0xf1ee, 0xc455, 0xc6c6, 0xa463, 0xa4c3, 0xc956, 0xa4c4, 0xa4c5, 0x9a4c, 0xa55d, 0xa55e, 0xa649, 0xca71, 0xcbd6, 0xcbd7, 0xab6d, 0xd0ee, 0xb0cc, 0xb0cb, 0xd863, 0xd862, 0xa450, 0xa4c6, 0xa55f, 0xb0cd, 0xc943, 0xc96c, 0xa560, 0xc9c2, 0xa64b, 0xa64a, 0xc9c1, 0xa758, 0x8c68, 0x89e5, 0xadea, 0x9f7d, 0xd46f, 0xb6d7, 0xe145, 0xb9bc, 0xa0a9, 0xfac4, 0xe8fa, 0xf3fd, 0xc6c7, 0xa4c7, 0x8957, 0xcbd8, 0xcdf4, 0xb0d0, 0xb0ce, 0xb0cf, 0xa451, 0xfaaa, 0xa464, 0xa2cd, 0xa4ca, 0xa4c9, 0xa4c8, 0xa563, 0xa562, 0xc96d, 0xc9c3, 0x8958, 0xa8f5, 0xa8f2, 0xa8f4, 0xa8f3, 0xab6e, 0xb3d5, 0xa452, 0x8be3, 0xa4cb, 0x8b61, 0xa565, 0xa564, 0xca72, 0x9af1, 0xa8f6, 0x9eb7, 0xc6c8, 0xc957, 0xfad1, 0xa567, 0xa566, 0xa64c, 0xa64d, 0xca73, 0xa759, 0xfad2, 0xa75a, 0xa8f7, 0xa8f8, 0xa8f9, 0xab6f, 0xcdf5, 0x9eba, 0xfad4, 0xadeb, 0xc944, 0xa4cc, 0xc9c4, 0xca74, 0xca75, 0xcbd9, 0xfad9, 0xcbda, 0xcdf7, 0xcdf6, 0xcdf9, 0xcdf8, 0xab70, 0xd470, 0xaded, 0xd0ef, 0xadec, 0xfadb, 0x9ce0, 0xd864, 0xb3d6, 0xfbf7, 0xd865, 0xfbfa, 0x89e7, 0xa07a, 0xfadc, 0xe146, 0xb9bd, 0xfadd, 0x89e9, 0xbc46, 0xf1ef, 0xc6c9, 0xc958, 0xa568, 0xfae2, 0x89eb, 0xb0d1, 0xfae3, 0xa453, 0xa465, 0xa4ce, 0xa4cd, 0x90c8, 0xa4cf, 0x92da, 0x8959, 0x9cf5, 0xa8fb, 0xa8fa, 0xa8fc, 0x895a, 0xfae7, 0x9fa2, 0xab71, 0xadee, 0xfaea, 0xe8fb, 0xc24f, 0xa466, 0xa56a, 0xa579, 0xa574, 0xa56f, 0xa56e, 0xa575, 0xa573, 0xa56c, 0xa57a, 0xa56d, 0xa569, 0xa578, 0xa577, 0xa576, 0xa56b, 0xa572, 0xfaed, 0x8fad, 0xa571, 0xa57b, 0xa570, 0xfb59, 0xa653, 0xa659, 0xa655, 0xa65b, 0xc9c5, 0xa658, 0xa64e, 0xa651, 0xa654, 0xa650, 0xa657, 0xa65a, 0xa64f, 0xa652, 0xa656, 0xa65c, 0xfaef, 0x96ef, 0x9dec, 0xca7e, 0xca7b, 0x9dca, 0xa767, 0xca7c, 0xa75b, 0xa75d, 0xa775, 0xa770, 0xfd6d, 0x89ec, 0xcaa5, 0xca7d, 0xa75f, 0xa761, 0xcaa4, 0xa768, 0xca78, 0xa774, 0xa776, 0xa75c, 0xa76d, 0xfb44, 0xca76, 0xa773, 0x9de2, 0xa764, 0x8c75, 0xa76e, 0xa76f, 0xca77, 0xa76c, 0xa76a, 0xa76b, 0xa771, 0xcaa1, 0xa75e, 0xa772, 0xcaa3, 0xa766, 0xa763, 0xca7a, 0xa762, 0xcaa6, 0xa765, 0xa769, 0x9ec0, 0x9e56, 0xa760, 0xcaa2, 0xca79, 0xcbeb, 0xcbea, 0xa94f, 0xcbed, 0xcbef, 0xcbe4, 0xcbe7, 0xcbee, 0xa950, 0x9f79, 0x9ac7, 0xcbe1, 0xcbe5, 0xfaf4, 0xcbe9, 0xce49, 0xa94b, 0xce4d, 0xa8fd, 0xcbe6, 0xa8fe, 0xa94c, 0xa945, 0xa941, 0xcbe2, 0xa944, 0xa949, 0xa952, 0xcbe3, 0xcbdc, 0xa943, 0xcbdd, 0xcbdf, 0xa946, 0x98a1, 0xa948, 0xcbdb, 0xcbe0, 0xa951, 0xa94d, 0xcbe8, 0xa953, 0xfaf8, 0xa94a, 0xcbde, 0xa947, 0x89f0, 0x9e47, 0xa942, 0xa940, 0x9df7, 0xcbec, 0xa94e, 0x9fd3, 0x9aca, 0xce48, 0xcdfb, 0xce4b, 0x89f1, 0xfaf9, 0xcdfd, 0xab78, 0xaba8, 0xab74, 0xaba7, 0xab7d, 0xaba4, 0xab72, 0xcdfc, 0xce43, 0xaba3, 0xce4f, 0xaba5, 0x8e5a, 0xab79, 0x89f2, 0xce45, 0xce42, 0xab77, 0x89f3, 0xcdfa, 0xaba6, 0xce4a, 0xab7c, 0xce4c, 0xaba9, 0xab73, 0xab7e, 0xab7b, 0xce40, 0xaba1, 0xce46, 0xce47, 0xab7a, 0xaba2, 0xab76, 0x925d, 0x8b51, 0x92e0, 0xab75, 0xcdfe, 0x89f4, 0xce44, 0x9fd4, 0xce4e, 0xd144, 0xadfb, 0xd0f1, 0x8a79, 0xd0f6, 0xadf4, 0xae40, 0xd0f4, 0xadef, 0xadf9, 0xadfe, 0xd0fb, 0xadfa, 0xadfd, 0x89f5, 0xd0fe, 0xadf5, 0xd0f5, 0xd142, 0xd143, 0xadf7, 0xd141, 0xadf3, 0xae43, 0xd0f8, 0xadf1, 0x97a7, 0xd146, 0xd0f9, 0xd0fd, 0xadf6, 0xae42, 0xd0fa, 0xadfc, 0xd140, 0xd147, 0xd4a1, 0x93ba, 0xd145, 0xae44, 0xadf0, 0xd0fc, 0xd0f3, 0x9e58, 0xadf8, 0xd0f2, 0x89f6, 0xd0f7, 0x9e57, 0x89f7, 0x8a41, 0xd0f0, 0xae41, 0x89f8, 0xd477, 0xfaf1, 0xb0e4, 0xd4a7, 0xb0e2, 0xb0df, 0xd47c, 0xb0db, 0xd4a2, 0xb0e6, 0xd476, 0xd47b, 0xd47a, 0xadf2, 0xb0e1, 0xd4a5, 0xd4a8, 0xd473, 0xb3e8, 0x89fa, 0xd4a9, 0xb0e7, 0xb0d9, 0xb0d6, 0xd47e, 0xb0d3, 0xfb42, 0xd4a6, 0xfabf, 0xb0da, 0xd4aa, 0xd474, 0xd4a4, 0xb0dd, 0xd475, 0xd478, 0xd47d, 0xfba3, 0xb0de, 0xb0dc, 0xb0e8, 0xb0e3, 0xfaf7, 0xb0d7, 0xb1d2, 0xb0d8, 0xd479, 0xb0e5, 0xb0e0, 0xd4a3, 0xb0d5, 0x9e4e, 0xb0d4, 0x94dc, 0x95da, 0x9df8, 0x9f6a, 0xd471, 0xd472, 0xd86a, 0x8ab7, 0xb3d7, 0xb3da, 0xd875, 0xb3ee, 0xd878, 0xb3d8, 0xd871, 0xb3de, 0xb3e4, 0xb5bd, 0xfb46, 0xb3e2, 0xd86e, 0xb3ef, 0xb3db, 0xb3e3, 0xd876, 0xdcd7, 0xd87b, 0xd86f, 0x8a46, 0xd866, 0xd873, 0xd86d, 0xb3e1, 0xd879, 0xb3dd, 0xb3f1, 0xb3ea, 0xb3df, 0xb3dc, 0xb3e7, 0xd87a, 0xd86c, 0xd872, 0xd874, 0xd868, 0xd877, 0xb3d9, 0xd867, 0xfb47, 0xb3e0, 0xb3f0, 0xb3ec, 0xd869, 0xb3e6, 0x9148, 0xb3ed, 0xb3e9, 0xb3e5, 0x92de, 0xd870, 0x8b53, 0x9df6, 0xb3eb, 0x9bda, 0xdcd5, 0xdcd1, 0x9d7e, 0xdce0, 0xdcca, 0xdcd3, 0xb6e5, 0xb6e6, 0xb6de, 0xdcdc, 0xb6e8, 0xdccf, 0xdcce, 0xdccc, 0xdcde, 0xb6dc, 0xdcd8, 0xdccd, 0xb6df, 0xdcd6, 0xb6da, 0xdcd2, 0xdcd9, 0xdcdb, 0x89fd, 0x99e4, 0xdcdf, 0xb6e3, 0xdccb, 0xb6dd, 0xdcd0, 0x9e43, 0xb6d8, 0xb6e4, 0xdcda, 0xb6e0, 0xb6e1, 0xb6e7, 0xb6db, 0xa25f, 0xb6d9, 0xdcd4, 0x9de9, 0x8f52, 0xb6e2, 0x9df5, 0x9df0, 0xdcdd, 0x99e7, 0xb9cd, 0xb9c8, 0xe155, 0xe151, 0x8bbd, 0xe14b, 0xb9c2, 0xb9be, 0xe154, 0xb9bf, 0xe14e, 0xe150, 0xe153, 0x9def, 0xb9c4, 0xb9cb, 0xb9c5, 0xe149, 0xb9c6, 0xb9c7, 0xe14c, 0xb9cc, 0x9fb7, 0xe14a, 0xe14f, 0xb9c3, 0xe148, 0xb9c9, 0xb9c1, 0xb9c0, 0xe14d, 0xe152, 0x9dd0, 0xb9ca, 0x9feb, 0x8da9, 0x9dcf, 0x98e1, 0x9de5, 0xe147, 0xbc4d, 0xe547, 0xe544, 0x9dc8, 0xbc47, 0xbc53, 0xbc54, 0xbc4a, 0xe542, 0xbc4c, 0xe4f9, 0xbc52, 0xfb4f, 0xe546, 0xbc49, 0xe548, 0xbc48, 0xe543, 0xe545, 0xbc4b, 0xe541, 0xe4fa, 0xe4f7, 0x9deb, 0xd86b, 0xe4fd, 0xe4f6, 0xe4fc, 0xe4fb, 0xe4f8, 0xfb54, 0xbc4f, 0xfb55, 0x9aa2, 0x8ad6, 0xbc4e, 0x9a5f, 0xbc50, 0xe4fe, 0xbeb2, 0xe540, 0x9ef5, 0xe945, 0xe8fd, 0x8fb7, 0xbebe, 0xe942, 0xbeb6, 0xbeba, 0xe941, 0xbeb9, 0xbeb5, 0xbeb8, 0xbeb3, 0xbebd, 0xe943, 0xe8fe, 0xbebc, 0xe8fc, 0xbebb, 0xe944, 0xe940, 0xbc51, 0xbebf, 0xe946, 0xbeb7, 0xbeb4, 0x9ad2, 0x9e6a, 0x9ee8, 0xecc6, 0xecc8, 0xc07b, 0xecc9, 0xecc7, 0xecc5, 0xecc4, 0xc07d, 0xecc3, 0xc07e, 0x8bbf, 0x91c2, 0x9d62, 0xecc1, 0xecc2, 0xc07a, 0xc0a1, 0xc07c, 0x9260, 0xecc0, 0xc250, 0xefbc, 0xefba, 0xefbf, 0xefbd, 0xefbb, 0xefbe, 0x925e, 0x91c1, 0x8ac5, 0x97a3, 0xc360, 0xf1f2, 0xf1f3, 0xc456, 0xf1f4, 0xf1f0, 0xf1f5, 0xf1f1, 0xc251, 0x8b6c, 0x8d7e, 0xf3fe, 0xf441, 0xc459, 0xf440, 0xc458, 0xc457, 0x9c54, 0xc45a, 0xf5c5, 0xf5c6, 0x9dbd, 0xc4da, 0xc4d9, 0xc4db, 0xf5c4, 0xf6d8, 0xf6d7, 0xc56d, 0xc56f, 0xc56e, 0xf6d9, 0xc5c8, 0xf8a6, 0xc5f1, 0xf8a5, 0xf8ee, 0x9cc5, 0xc949, 0xa57d, 0xa57c, 0xa65f, 0xa65e, 0xc9c7, 0xa65d, 0xc9c6, 0x895b, 0xa779, 0xcaa9, 0xcaa8, 0xa777, 0xa77a, 0xfb5c, 0xcaa7, 0xfb5b, 0xa778, 0xfb57, 0xcbf0, 0xcbf1, 0xa954, 0x98c7, 0xabaa, 0xfb5a, 0xd148, 0xd149, 0xae45, 0xae46, 0xd4ac, 0xb0e9, 0xb0eb, 0xd4ab, 0xb0ea, 0xd87c, 0xb3f2, 0xb6e9, 0xb6ea, 0xdce1, 0x9cee, 0xb9cf, 0xb9ce, 0xe549, 0xe948, 0xe947, 0x92e2, 0xf96b, 0xa467, 0xc959, 0xc96e, 0xc96f, 0xa662, 0xa666, 0xc9c9, 0xa664, 0xa663, 0xc9c8, 0xa665, 0xa661, 0x94a7, 0xa660, 0xc9ca, 0xa7a6, 0x8ccc, 0xa7a3, 0x9bd4, 0xa77d, 0xcaaa, 0xfb64, 0xfb76, 0xcaab, 0xfb60, 0xa7a1, 0xcaad, 0xa77b, 0xcaae, 0xcaac, 0xa77e, 0xa7a2, 0xa7a5, 0xa7a4, 0xa77c, 0xcaaf, 0x99e5, 0x9ac2, 0x91fb, 0xa073, 0xa959, 0xcbfe, 0xa95b, 0xa95a, 0x9f72, 0xcc40, 0xa958, 0xa957, 0xcbf5, 0xcbf4, 0xcbf2, 0xcbf7, 0xcbf6, 0xcbf3, 0xcbfc, 0xcbfd, 0xcbfa, 0xcbf8, 0xa956, 0x9fcc, 0xcbfb, 0xa95c, 0xcc41, 0x98a5, 0x92e8, 0xcbf9, 0xabab, 0xa955, 0x9bbc, 0x96f3, 0xabac, 0xce54, 0x92e7, 0xce5a, 0xfc67, 0xabb2, 0xce58, 0xce5e, 0xce55, 0xce59, 0xce5b, 0xce5d, 0xce57, 0x8b7d, 0xce56, 0xce51, 0xce52, 0xabad, 0x9bf4, 0xabaf, 0xabae, 0xce53, 0xce5c, 0x9ef7, 0x9ec1, 0xabb1, 0x996f, 0xce50, 0xd153, 0xd152, 0xd157, 0xd14e, 0x96f1, 0xd151, 0xd150, 0x8e41, 0xd154, 0xd158, 0xae47, 0xae4a, 0x954a, 0xd14f, 0xd155, 0x97e6, 0xae49, 0xd14a, 0xabb0, 0xd4ba, 0xd156, 0xd14d, 0xae48, 0xd14c, 0x96f5, 0xd4b1, 0x92e6, 0x9f42, 0xb0ec, 0xb0f0, 0xd4c1, 0xd4af, 0xd4bd, 0xb0f1, 0xd4bf, 0xfb67, 0xd4c5, 0xd4c9, 0xd4c0, 0xd4b4, 0xd4bc, 0x99a9, 0xd4ca, 0xd4c8, 0xd4be, 0xd4b9, 0xd4b2, 0xd8a6, 0xd4b0, 0xb0f5, 0xd4b7, 0xb0f6, 0xb0f2, 0xd4ad, 0xd4c3, 0xd4b5, 0xfae6, 0xd4b3, 0xd4c6, 0xb0f3, 0xfb69, 0xd4cc, 0xb0ed, 0xb0ef, 0xd4bb, 0xd4b6, 0xae4b, 0xb0ee, 0xd4b8, 0xd4c7, 0xd4cb, 0xd4c2, 0xd4c4, 0x97e5, 0xd4ae, 0xd8a1, 0xd8aa, 0xd8a9, 0xb3fa, 0xd8a2, 0xb3fb, 0xb3f9, 0x967d, 0xd8a4, 0xb3f6, 0xd8a8, 0xfb6c, 0xd8a3, 0xd8a5, 0xd87d, 0xb3f4, 0xd8b2, 0xd8b1, 0xd8ae, 0xb3f3, 0xb3f7, 0xb3f8, 0xd14b, 0xd8ab, 0xb3f5, 0xb0f4, 0xd8ad, 0xd87e, 0xd8b0, 0xd8af, 0x99a2, 0xd8b3, 0xdcef, 0xd8ac, 0x9abb, 0x9a65, 0x944e, 0xd8a7, 0xdce7, 0xb6f4, 0xb6f7, 0xb6f2, 0xdce6, 0xdcea, 0xdce5, 0xb6ec, 0xb6f6, 0xdce2, 0xb6f0, 0xdce9, 0xb6ee, 0xb6ed, 0xdcec, 0xb6ef, 0xdcee, 0xfb6e, 0xdceb, 0xb6eb, 0x99df, 0xb6f5, 0xdcf0, 0xdce4, 0xdced, 0xdce3, 0x98e3, 0xb6f1, 0x9254, 0xb6f3, 0xdce8, 0xdcf1, 0x967b, 0x8aaf, 0xe15d, 0xb9d0, 0xe163, 0xb9d5, 0xe15f, 0xe166, 0xe157, 0xb9d7, 0xb9d1, 0xe15c, 0xbc55, 0xe15b, 0xe164, 0xb9d2, 0xb9d6, 0xe15a, 0xe160, 0xe165, 0xe156, 0xb9d4, 0xe15e, 0xe162, 0xe168, 0xe158, 0xe161, 0x8c77, 0xb9d3, 0xe167, 0xe159, 0x8baf, 0x9ebd, 0xbc59, 0xe54b, 0xbc57, 0xbc56, 0xe54d, 0xe552, 0xe54e, 0xe551, 0xbc5c, 0x9ee6, 0xbea5, 0xbc5b, 0xfb6f, 0xe54a, 0xe550, 0xbc5a, 0xe54f, 0x8ee1, 0xe54c, 0xbc58, 0x9b7d, 0x9c7e, 0xe94d, 0xf9d9, 0xe94f, 0xe94a, 0xbec1, 0xe94c, 0xbec0, 0xe94e, 0xbec3, 0xe950, 0xbec2, 0xe949, 0xe94b, 0x92ea, 0xc0a5, 0xeccc, 0x8c78, 0xc0a4, 0xeccd, 0xc0a3, 0xeccb, 0xc0a2, 0xecca, 0xc253, 0xc252, 0xf1f6, 0xf1f8, 0xfb72, 0xf1f7, 0xc361, 0xc362, 0xfb71, 0xc363, 0xf442, 0xc45b, 0xf7d3, 0xf7d2, 0xc5f2, 0xa468, 0xa4d0, 0xa7a7, 0x895c, 0x98f0, 0x96f2, 0xce5f, 0xb3fc, 0xb3fd, 0xfb74, 0xdcf2, 0xb9d8, 0xe169, 0xe553, 0x8bc1, 0xc95a, 0x895d, 0x89de, 0xcab0, 0x895e, 0xc6ca, 0xcc42, 0xce60, 0xd159, 0xae4c, 0xfe42, 0xf1f9, 0xc4dc, 0xa469, 0xa57e, 0xc970, 0xa667, 0xa668, 0xa95d, 0xfb7b, 0xb0f7, 0xb9da, 0xb9db, 0xb9d9, 0xa46a, 0xa4d1, 0xa4d3, 0xa4d2, 0xc95b, 0xa4d4, 0xa5a1, 0xc971, 0xa5a2, 0x895f, 0x8960, 0xa669, 0xa66a, 0xc9cb, 0xa7a8, 0xcab1, 0xa961, 0xcc43, 0xa95f, 0xa960, 0xa95e, 0xd15a, 0xabb6, 0xabb5, 0xabb7, 0xabb4, 0xce61, 0xa962, 0xabb3, 0xae4d, 0xae4e, 0xae4f, 0xd4cd, 0xb3fe, 0xd8b4, 0xb0f8, 0x9bcd, 0xb6f8, 0xb9dd, 0xb9dc, 0xe16a, 0xbc5d, 0xbec4, 0xefc0, 0xf6da, 0xf7d4, 0xa46b, 0xa5a3, 0x9dd3, 0xa5a4, 0xc9d1, 0xa66c, 0xa66f, 0xc9cf, 0xc9cd, 0xa66e, 0xc9d0, 0xc9d2, 0xc9cc, 0xa671, 0xa670, 0xa66d, 0xa66b, 0xc9ce, 0x984c, 0xa7b3, 0xa7b0, 0xcab6, 0xcab9, 0xcab8, 0xa7aa, 0xa7b2, 0x9752, 0xa7af, 0xcab5, 0xcab3, 0xa7ae, 0x95c3, 0xa7a9, 0xa7ac, 0x9bb6, 0xcab4, 0xcabb, 0xcab7, 0xa7ad, 0xa7b1, 0xa7b4, 0xcab2, 0xcaba, 0xa7ab, 0x9ab9, 0xa967, 0xa96f, 0x97b3, 0xcc4f, 0xcc48, 0xa970, 0xcc53, 0xcc44, 0xcc4b, 0x9f74, 0x92f1, 0xa966, 0xcc45, 0xa964, 0xcc4c, 0xcc50, 0xa963, 0xcc51, 0xcc4a, 0xcc4d, 0x97df, 0xa972, 0xa969, 0xcc54, 0xcc52, 0xfba6, 0xa96e, 0xa96c, 0xcc49, 0xa96b, 0xcc47, 0xcc46, 0xa96a, 0xa968, 0xa971, 0xa96d, 0xa965, 0xcc4e, 0xabb9, 0xfbab, 0xabc0, 0xce6f, 0xabb8, 0xce67, 0xce63, 0xce73, 0xce62, 0xabbb, 0xce6c, 0xabbe, 0xabc1, 0xabbc, 0xce70, 0xabbf, 0x9877, 0xae56, 0xce76, 0xce64, 0x9854, 0x95c5, 0xce66, 0xce6d, 0xce71, 0xce75, 0xce72, 0xce6b, 0xce6e, 0x9d55, 0xfbb2, 0xce68, 0xabc3, 0xce6a, 0xce69, 0xce74, 0xabba, 0xce65, 0xabc2, 0x957e, 0xabbd, 0xae5c, 0xd162, 0x9742, 0xae5b, 0x94e6, 0xd160, 0xae50, 0x92f5, 0xae55, 0xd15f, 0xd15c, 0xd161, 0xae51, 0xd15b, 0x8cc5, 0xae54, 0xae52, 0xd163, 0xae53, 0xae57, 0x92fd, 0xae58, 0xfba2, 0xae5a, 0x9c51, 0xae59, 0x94e9, 0x985c, 0x92f0, 0xd15d, 0xd15e, 0xd164, 0xd4d4, 0xb0f9, 0xd8c2, 0xd4d3, 0xd4e6, 0xb140, 0x944c, 0xd4e4, 0xb0fe, 0xb0fa, 0xd4ed, 0xd4dd, 0xd4e0, 0x916b, 0xb143, 0xd4ea, 0xd4e2, 0xb0fb, 0xb144, 0xd4e7, 0xd4e5, 0xd4d6, 0xd4eb, 0xd4df, 0xd4da, 0x8b78, 0xd4d0, 0xd4ec, 0xd4dc, 0xd4cf, 0x94e2, 0xb142, 0xd4e1, 0xd4ee, 0xd4de, 0xd4d2, 0xd4d7, 0xd4ce, 0x984f, 0xb141, 0xfbb5, 0xd4db, 0xd4d8, 0xb0fc, 0xd4d1, 0x9271, 0xd4e9, 0xb0fd, 0x9365, 0xd4d9, 0xd4d5, 0x985b, 0xd4e8, 0x9850, 0xb440, 0xd8bb, 0x97bc, 0xd8b8, 0xd8c9, 0xd8bd, 0xd8ca, 0x92f3, 0xb442, 0x9340, 0x984d, 0xd8c6, 0xd8c3, 0x9572, 0xfdef, 0xd8c4, 0xd8c7, 0xd8cb, 0xd4e3, 0xd8cd, 0xdd47, 0xfdc1, 0xb443, 0xd8ce, 0xd8b6, 0xd8c0, 0xfbba, 0xd8c5, 0x92eb, 0xb441, 0xb444, 0xd8cc, 0xd8cf, 0xd8ba, 0xd8b7, 0xfc73, 0x97b7, 0xd8b9, 0xd8be, 0xd8bc, 0xb445, 0xd8c8, 0xfbb4, 0xd8bf, 0xd8c1, 0xd8b5, 0xdcfa, 0xdcf8, 0xb742, 0xb740, 0xdd43, 0xdcf9, 0xdd44, 0xdd40, 0xdcf7, 0xdd46, 0xdcf6, 0xdcfd, 0xb6fe, 0xb6fd, 0xb6fc, 0xdcfb, 0xdd41, 0xb6f9, 0xb741, 0x90a7, 0xdcf4, 0xdcfe, 0xdcf3, 0xdcfc, 0xb6fa, 0xdd42, 0xdcf5, 0xb6fb, 0xdd45, 0x9741, 0x92f4, 0xfbbc, 0xe16e, 0xb9e2, 0xb9e1, 0xb9e3, 0xe17a, 0xe170, 0xe176, 0xe16b, 0xe179, 0xe178, 0xe17c, 0xe175, 0xb9de, 0xe174, 0xb9e4, 0x9577, 0xe16d, 0xb9df, 0xe17b, 0xb9e0, 0xe16f, 0xe172, 0xe177, 0xe171, 0xe16c, 0x9ee2, 0x8f78, 0xe173, 0xe555, 0xbc61, 0xe558, 0xe557, 0xe55a, 0xe55c, 0xf9dc, 0xbc5f, 0xe556, 0x9672, 0xe554, 0xe55d, 0xe55b, 0xe559, 0xe55f, 0xe55e, 0xbc63, 0xbc5e, 0xbc60, 0xbc62, 0x9eb5, 0xe560, 0xe957, 0x964b, 0xe956, 0xe955, 0x8cac, 0xe958, 0xe951, 0xe952, 0xe95a, 0xe953, 0xbec5, 0xe95c, 0xa0fa, 0xe95b, 0xe954, 0xecd1, 0xc0a8, 0xeccf, 0xecd4, 0xecd3, 0xe959, 0xc0a7, 0x9575, 0xecd2, 0xecce, 0xecd6, 0xecd5, 0xc0a6, 0xecd0, 0xbec6, 0xc254, 0xefc1, 0xf1fa, 0xf1fb, 0xf1fc, 0xc45c, 0x90da, 0xc45d, 0x9367, 0xf443, 0xfea4, 0xf5c8, 0xf5c7, 0x90df, 0xf6db, 0xf6dc, 0xf7d5, 0xf8a7, 0x9354, 0xa46c, 0xa46d, 0xa46e, 0xa4d5, 0xa5a5, 0xc9d3, 0xa672, 0xa673, 0xa7b7, 0xa7b8, 0xa7b6, 0xa7b5, 0xa973, 0xcc55, 0xa975, 0xa974, 0xcc56, 0x8961, 0x8bb4, 0xabc4, 0xae5d, 0xd165, 0x9dc0, 0xd4f0, 0xb145, 0xb447, 0xd4ef, 0xb446, 0x8e48, 0xb9e5, 0xfbc5, 0xe17d, 0xbec7, 0xc0a9, 0xecd7, 0xfbc7, 0xc45e, 0xc570, 0xc6cb, 0xc972, 0xfa79, 0xa5a6, 0xc973, 0xa676, 0xa674, 0xa675, 0xa677, 0xa7ba, 0xa7b9, 0xcabc, 0xa7bb, 0x9e67, 0xcabd, 0xcc57, 0xcc58, 0x8cd9, 0xa976, 0xa978, 0xa97a, 0xa977, 0xa97b, 0xa979, 0xfbd2, 0x8962, 0x8963, 0xabc8, 0xabc5, 0xabc7, 0xabc9, 0xabc6, 0xd166, 0xce77, 0xfc7d, 0xd168, 0xd167, 0xae63, 0xae5f, 0xae60, 0xae62, 0xae64, 0xae61, 0xae66, 0xae65, 0xb14a, 0xd4f2, 0xd4f1, 0xb149, 0x9f6b, 0xb148, 0xb147, 0xb14b, 0xb146, 0xd8d5, 0xd8d2, 0xb449, 0xd8d1, 0xd8d6, 0xb44b, 0xd8d4, 0xb448, 0xb44a, 0xd8d3, 0xfbcc, 0xdd48, 0xfeae, 0xdd49, 0xdd4a, 0xb9e6, 0xb9ee, 0xe17e, 0xb9e8, 0xb9ec, 0xe1a1, 0xb9ed, 0xb9e9, 0xb9ea, 0xb9e7, 0xb9eb, 0xbc66, 0xd8d0, 0xbc67, 0xbc65, 0xbc64, 0xe95d, 0xbec8, 0xecd8, 0xecd9, 0xfbd1, 0xc364, 0xc45f, 0xa46f, 0xa678, 0xfb75, 0xabca, 0xd169, 0xae67, 0xfbd4, 0xb14e, 0xb14d, 0xb14c, 0xb44c, 0xb44d, 0xd8d7, 0xb9ef, 0xbec9, 0xa470, 0xc95c, 0xa4d6, 0xc974, 0xfbd6, 0xfbd8, 0xc9d4, 0xa679, 0xa97c, 0x8b5d, 0x934c, 0xdd4b, 0x9ae2, 0xa471, 0x8bc9, 0xa4d7, 0xc9d5, 0xcabe, 0xcabf, 0xa7bc, 0xd8d8, 0xb44e, 0xdd4c, 0xc0aa, 0xa472, 0xa4a8, 0xa4d8, 0xc975, 0xa5a7, 0xa7c0, 0xa7bf, 0xa7bd, 0xa7be, 0xcc59, 0xa97e, 0xa9a1, 0xcc5a, 0xa97d, 0xfbdb, 0x9fc9, 0xabce, 0xce78, 0xabcd, 0xabcb, 0xabcc, 0xae6a, 0xae68, 0x9f44, 0xd16b, 0xae69, 0xd16a, 0xae5e, 0xd4f3, 0xb150, 0xb151, 0x98ed, 0xb14f, 0xb9f0, 0xe1a2, 0xbc68, 0xbc69, 0xe561, 0xc0ab, 0xefc2, 0xefc3, 0xc4dd, 0xf8a8, 0xc94b, 0xa4d9, 0xa473, 0xc977, 0xc976, 0xa67a, 0xc9d7, 0xc9d8, 0xc9d6, 0xc9d9, 0xfbdd, 0xcac7, 0xcac2, 0xcac4, 0xcac6, 0xcac3, 0xa7c4, 0xcac0, 0xcac1, 0xa7c1, 0xa7c2, 0xcac5, 0xcac8, 0xa7c3, 0xcac9, 0x8df2, 0x8964, 0xfdf2, 0xcc68, 0x934d, 0xcc62, 0xcc5d, 0xa9a3, 0xcc65, 0xcc63, 0xcc5c, 0xcc69, 0xcc6c, 0xcc67, 0xcc60, 0xa9a5, 0xcc66, 0xa9a6, 0xcc61, 0xcc64, 0xcc5b, 0xcc5f, 0xcc6b, 0xa9a7, 0xa9a8, 0xcc5e, 0xcc6a, 0xa9a2, 0xa9a4, 0xfbe7, 0xa0f2, 0x9868, 0xceab, 0xcea4, 0xceaa, 0xcea3, 0xcea5, 0xce7d, 0xce7b, 0xceac, 0xcea9, 0xce79, 0x9f58, 0xabd0, 0xcea7, 0xcea8, 0xcea6, 0xce7c, 0xce7a, 0xabcf, 0xcea2, 0xce7e, 0xcea1, 0xcead, 0x8d73, 0xae6f, 0xfbde, 0xae6e, 0xd16c, 0xae6b, 0xd16e, 0xfbdf, 0xae70, 0xd16f, 0xae73, 0x8c48, 0xae71, 0xd170, 0xceae, 0xd172, 0xae6d, 0xae6c, 0xd16d, 0xd171, 0xae72, 0xb153, 0xb152, 0xd4f5, 0xd4f9, 0xd4fb, 0xb154, 0xd4fe, 0xfbe3, 0xb158, 0xd541, 0xb15a, 0x8da8, 0xb156, 0xb15e, 0xfbe4, 0xb15b, 0xd4f7, 0xb155, 0xd4f6, 0xd4f4, 0xd543, 0xd4f8, 0xb157, 0xd542, 0xb15c, 0xd4fd, 0xd4fc, 0xb15d, 0xd4fa, 0xb159, 0x9c75, 0xd544, 0x9878, 0xd540, 0xd8e7, 0xd8ee, 0xd8e3, 0xb451, 0xd8df, 0xd8ef, 0xd8d9, 0xd8ec, 0xd8ea, 0xd8e4, 0xd8ed, 0xd8e6, 0x8d60, 0xd8de, 0xd8f0, 0xd8dc, 0xd8e9, 0xd8da, 0xd8f1, 0xfbe5, 0xb452, 0x8d61, 0xd8eb, 0xdd4f, 0xd8dd, 0xb44f, 0xd8e1, 0xb450, 0xd8e0, 0xd8e5, 0xd8e2, 0x8d62, 0xa0a1, 0xd8e8, 0x9c40, 0xdd53, 0xdd56, 0xdd4e, 0xdd50, 0xdd55, 0xdd54, 0xb743, 0xd8db, 0xdd52, 0xb744, 0x98ad, 0xdd4d, 0xdd51, 0x9eea, 0xe1a9, 0xe1b0, 0xe1a7, 0x8cd4, 0xe1ae, 0xe1a5, 0xe1ad, 0xe1b1, 0xe1a4, 0xe1a8, 0xe1a3, 0xb9f1, 0x9ceb, 0xe1a6, 0xb9f2, 0xe1ac, 0xe1ab, 0xe1aa, 0xfbe0, 0xe1af, 0x9f51, 0xe565, 0xe567, 0xbc6b, 0xe568, 0xe563, 0xe562, 0xe56c, 0xe56a, 0xbc6a, 0xe56d, 0xe564, 0xe569, 0xe56b, 0xe566, 0x8d65, 0xe961, 0xe966, 0xe960, 0xe965, 0x9cf1, 0xe95e, 0xe968, 0xe964, 0xe969, 0xe963, 0xe95f, 0xe967, 0xe96a, 0xe962, 0xfc58, 0xecda, 0xc0af, 0x8d66, 0xc0ad, 0xc0ac, 0xc0ae, 0xefc4, 0x9654, 0xf172, 0xf1fd, 0xf444, 0xf445, 0xc460, 0xf5c9, 0xc4de, 0xf5ca, 0xf6de, 0xc572, 0xc571, 0xf6dd, 0xc5c9, 0xfbe8, 0xf7d6, 0xc6cc, 0xa474, 0xa67b, 0xc9da, 0xcaca, 0xa8b5, 0xb15f, 0xa475, 0xa5aa, 0xa5a9, 0xa5a8, 0xa7c5, 0xae74, 0xdd57, 0xa476, 0xa477, 0xa478, 0xa4da, 0x9fce, 0xabd1, 0xceaf, 0xb453, 0xa479, 0xc95d, 0xa5ab, 0xa5ac, 0xc978, 0xa67c, 0xfbfc, 0xcacb, 0x9ae4, 0xa7c6, 0xcacc, 0xa9ae, 0x9f75, 0xcc6e, 0xa9ac, 0xa9ab, 0xcc6d, 0xa9a9, 0xcc6f, 0xa9aa, 0xa9ad, 0xabd2, 0xabd4, 0xceb3, 0xceb0, 0xceb1, 0xceb2, 0xceb4, 0xabd3, 0xd174, 0xd173, 0xae76, 0xae75, 0xfbf1, 0xb162, 0xd546, 0xb161, 0xb163, 0xb160, 0xb455, 0xd545, 0xb456, 0xd8f3, 0x8d69, 0xb457, 0xd8f2, 0xb454, 0x934f, 0xdd5a, 0xdd5c, 0xb745, 0xdd5b, 0xdd59, 0xdd58, 0xe1b4, 0xb9f7, 0xb9f5, 0xb9f6, 0xe1b2, 0xe1b3, 0xb9f3, 0xe571, 0xe56f, 0x934e, 0xbc6d, 0xe570, 0xbc6e, 0xbc6c, 0xb9f4, 0xe96d, 0xe96b, 0xe96c, 0xe56e, 0xecdc, 0xc0b0, 0xecdb, 0xefc5, 0xefc6, 0xe96e, 0xf1fe, 0xa47a, 0xa5ad, 0xa67e, 0xc9db, 0xa67d, 0xa9af, 0xb746, 0xfbf4, 0xa4db, 0xa5ae, 0xabd5, 0xb458, 0xc6ce, 0xc979, 0xc97a, 0xfbc3, 0xc9dc, 0x8965, 0xa7c8, 0xcad0, 0xcace, 0xa7c9, 0xcacd, 0xcacf, 0xcad1, 0xa7c7, 0x8c7a, 0xa9b3, 0xa9b4, 0xa9b1, 0x8c7b, 0xa9b0, 0xceb8, 0xa9b2, 0xabd6, 0xceb7, 0xceb9, 0xceb6, 0xceba, 0xabd7, 0xae79, 0xd175, 0xd177, 0xae77, 0xd178, 0xae78, 0xd176, 0xceb5, 0xd547, 0xd54a, 0xd54b, 0xd548, 0xb167, 0xb166, 0xb164, 0xb165, 0xd549, 0x8d6a, 0xb168, 0xb45a, 0xb45b, 0xb45c, 0xdd5d, 0xdd5f, 0xdd61, 0xb748, 0xb747, 0xb459, 0xdd60, 0xdd5e, 0x9353, 0xe1b8, 0x9dfb, 0xe1b6, 0xe1bc, 0xb9f8, 0xe1bd, 0xe1ba, 0xb9f9, 0xe1b7, 0xe1b5, 0xe1bb, 0xbc70, 0xe573, 0xe1b9, 0xbc72, 0xe574, 0xbc71, 0xbc74, 0xe575, 0xbc6f, 0xbc73, 0xe973, 0xe971, 0xe970, 0xe972, 0xe96f, 0xc366, 0xf446, 0xf447, 0xf5cb, 0xf6df, 0xc655, 0xfbfd, 0xa9b5, 0xa7ca, 0x9059, 0xfc40, 0xabd8, 0xfc41, 0xfc43, 0xa47b, 0xa4dc, 0xa5af, 0xc9dd, 0xa7cb, 0xcad2, 0xcebb, 0xabd9, 0xb9fa, 0xa47c, 0x9361, 0xfc46, 0x9362, 0xa6a1, 0xb749, 0xa47d, 0xa4dd, 0xa4de, 0xa5b1, 0xa5b0, 0xc9de, 0xa6a2, 0xcad3, 0xa7cc, 0xcc71, 0xcc72, 0xcc73, 0x8d6b, 0xa9b6, 0xa9b7, 0xcc70, 0xa9b8, 0xabda, 0xcebc, 0xd17a, 0xae7a, 0xd179, 0xb169, 0xd54c, 0xb16a, 0xd54d, 0xfc4c, 0xb45d, 0xdd62, 0xe1bf, 0xe1be, 0xb9fb, 0xbc75, 0xe576, 0xbeca, 0xe974, 0xc0b1, 0x95b8, 0xc573, 0xf7d8, 0xc6d0, 0x8bca, 0xcc74, 0xcebd, 0xb16b, 0xd8f4, 0xb74a, 0x987a, 0xc255, 0xc6d1, 0xa7ce, 0xfc51, 0xa7cd, 0xabdb, 0xd17b, 0xb16d, 0xb343, 0xb16e, 0xb16c, 0xb45e, 0xe1c0, 0xb9fc, 0xbc76, 0xfc54, 0xc94c, 0xc9df, 0xcad5, 0xa7cf, 0xcad4, 0xa7d0, 0xfaaf, 0xa9bc, 0xcc77, 0xcc76, 0xa9bb, 0xa9b9, 0xa9ba, 0xcc75, 0x8d6c, 0xabdd, 0xcebe, 0xabe0, 0xabdc, 0xabe2, 0xabde, 0xabdf, 0xabe1, 0xae7d, 0xae7c, 0xae7b, 0xd54f, 0xb16f, 0xb172, 0xb170, 0xd54e, 0xb175, 0xb171, 0xd550, 0xb174, 0xb173, 0xfa61, 0xd8f6, 0xd8f5, 0xfc57, 0xb461, 0xb45f, 0xb460, 0xd8f7, 0xb74b, 0xdd64, 0xb74c, 0xdd63, 0x9b70, 0xe577, 0xbc78, 0xe1c1, 0xbc77, 0xb9fd, 0xa051, 0xecde, 0xe975, 0xc0b2, 0xecdd, 0xf240, 0xf448, 0xf449, 0x8c7c, 0xa4df, 0x8bcb, 0xa5b2, 0xc97b, 0xa7d2, 0xa7d4, 0xc9e2, 0xcad8, 0xcad7, 0xcad6, 0xc9e1, 0xc9e0, 0xa6a4, 0xa7d3, 0xa7d1, 0xa6a3, 0x936e, 0xa9bd, 0xcc78, 0xfcd5, 0xa9be, 0xcadd, 0xcadf, 0xcade, 0xcc79, 0xcada, 0xa7d8, 0xa7d6, 0xcad9, 0xcadb, 0xcae1, 0xa7d5, 0xcadc, 0xcae5, 0xa9c0, 0xcae2, 0xa7d7, 0xcae0, 0xcae3, 0xa9bf, 0xa9c1, 0xcae4, 0xccaf, 0xcca2, 0xcc7e, 0xccae, 0xcca9, 0xabe7, 0xa9c2, 0xccaa, 0xccad, 0xabe3, 0xccac, 0xa9c3, 0xa9c8, 0xa9c6, 0xcca3, 0xcc7c, 0xcca5, 0xa9cd, 0xccb0, 0xabe4, 0xcca6, 0xabe5, 0xa9c9, 0xcca8, 0xfca9, 0xcecd, 0xabe6, 0xcc7b, 0xa9ca, 0xabe8, 0xa9cb, 0xa9c7, 0xa9cc, 0xcca7, 0xcc7a, 0xccab, 0xa9c4, 0xfc61, 0xcc7d, 0xcca4, 0xcca1, 0xa9c5, 0xcebf, 0xcec0, 0x8966, 0xceca, 0xd1a1, 0xcecb, 0xabee, 0xcece, 0xcec4, 0xabed, 0xcec6, 0xcec7, 0xfacb, 0xcec9, 0xabe9, 0xaea3, 0xf9da, 0xcec5, 0xcec1, 0xaea4, 0xcecf, 0xae7e, 0xd17d, 0xcec8, 0xd17c, 0xcec3, 0xcecc, 0xabec, 0xaea1, 0xabf2, 0xaea2, 0xced0, 0xd17e, 0xabeb, 0xaea6, 0xabf1, 0xabf0, 0xabef, 0xaea5, 0xced1, 0xaea7, 0xabea, 0xcec2, 0x937a, 0xa0e0, 0x936b, 0xb176, 0xd1a4, 0xd1a6, 0xd1a8, 0xaea8, 0xaeae, 0xd553, 0xd1ac, 0xd1a3, 0xb178, 0xd551, 0xaead, 0xaeab, 0xd1ae, 0xd552, 0xd1a5, 0xaeac, 0xd1a9, 0xaeaf, 0xd1ab, 0xaeaa, 0xd1aa, 0xd1ad, 0xd1a7, 0xfc6b, 0xaea9, 0xb179, 0xd1a2, 0xb177, 0xa0dc, 0x9468, 0xb17a, 0xd555, 0xd55e, 0xb464, 0xfc6d, 0xb17c, 0xb1a3, 0xb465, 0xd560, 0xb1aa, 0xd8f9, 0xd556, 0xb1a2, 0xb1a5, 0xb17e, 0xd554, 0xd562, 0xd565, 0xd949, 0xd563, 0xd8fd, 0xb1a1, 0xb1a8, 0xb1ac, 0xd55d, 0xd8f8, 0xd561, 0xb17b, 0xd8fa, 0xd564, 0xd8fc, 0xd559, 0xb462, 0xd557, 0xd558, 0xb1a7, 0x8d71, 0xb1a6, 0xd55b, 0xb1ab, 0xd55f, 0xb1a4, 0xd55c, 0xfd64, 0xb1a9, 0xb466, 0xb463, 0xd8fb, 0x99ba, 0xd55a, 0xb17d, 0x9ad0, 0x9a61, 0xa0e5, 0xb46b, 0xb46f, 0xd940, 0xb751, 0xb46d, 0xd944, 0xb471, 0xdd65, 0xd946, 0xb753, 0xb469, 0xb46c, 0xd947, 0xa05b, 0xd948, 0xd94e, 0xb473, 0xb754, 0xd94a, 0xd94f, 0xd943, 0xb75e, 0x96ac, 0xb755, 0xb472, 0xd941, 0xd950, 0x9740, 0xb75d, 0xb470, 0xb74e, 0xd94d, 0xb474, 0xd945, 0xd8fe, 0xb46a, 0xd942, 0xd94b, 0x9ef1, 0xb74d, 0xb752, 0xb467, 0xd94c, 0xb750, 0x8c4d, 0xb468, 0xb75c, 0xe1c3, 0xdd70, 0xdd68, 0xe1c2, 0xdd6c, 0xdd6e, 0x9f7e, 0xdd6b, 0xb75b, 0xdd6a, 0xb75f, 0xe1d2, 0x8d72, 0xb75a, 0xba40, 0xdd71, 0xe1c4, 0xfc76, 0xb758, 0xdd69, 0xdd6d, 0xb9fe, 0xb74f, 0xdd66, 0xdd67, 0xba41, 0xb757, 0xb759, 0xb756, 0xdd6f, 0x96a9, 0xe1c8, 0xe1c9, 0xe1ce, 0xbc7d, 0xe1d5, 0xba47, 0xa06e, 0xba46, 0xe1d0, 0xfcaa, 0xbc7c, 0xe1c5, 0xba45, 0xfbcd, 0xe1d4, 0xba43, 0xba44, 0xfc74, 0xe1d1, 0xe5aa, 0xbc7a, 0xb46e, 0xe1d3, 0xbca3, 0xe1cb, 0xbc7b, 0xa074, 0xbca2, 0xe1c6, 0xe1ca, 0xe1c7, 0xe1cd, 0xba48, 0xbc79, 0xba42, 0xe57a, 0xe1cf, 0xbca1, 0xa071, 0xbca4, 0xe1cc, 0xfc79, 0xbc7e, 0xe579, 0xfc7c, 0xe57e, 0xbece, 0xe578, 0xe9a3, 0xe5a9, 0xbca8, 0xbca6, 0xbecc, 0xe5a6, 0xe5a2, 0xbcac, 0x9c50, 0xe978, 0x9379, 0x9378, 0xbcaa, 0xe5a1, 0xa0dd, 0xe976, 0xe5a5, 0xe5a8, 0xe57d, 0xbcab, 0xbca5, 0xe977, 0xbecd, 0xe5a7, 0xbca7, 0xbca9, 0xe5a4, 0xbcad, 0xe5a3, 0xe57c, 0xe57b, 0xbecb, 0xe5ab, 0xe97a, 0xece0, 0xbed0, 0x8d75, 0xe9a2, 0x8d76, 0xe97e, 0xece1, 0xbed1, 0xe9a1, 0x9374, 0xe97c, 0xc0b4, 0xecdf, 0xe979, 0xe97b, 0xc0b5, 0xbed3, 0xc0b3, 0xbed2, 0xc0b7, 0xe97d, 0xbecf, 0x8d77, 0xfca5, 0xfca2, 0xefcf, 0xefc7, 0x90c3, 0xece7, 0xefc8, 0xece3, 0xa079, 0xc256, 0xece5, 0xece4, 0xc0b6, 0xece2, 0xece6, 0xefd0, 0xefcc, 0xefce, 0xefc9, 0xefca, 0xefcd, 0xefcb, 0xc367, 0xc36a, 0xc369, 0xc368, 0xc461, 0xf44a, 0xc462, 0xf241, 0xc4df, 0xf5cc, 0xc4e0, 0xc574, 0xc5ca, 0xf7d9, 0xf7da, 0xf7db, 0xf9ba, 0xa4e0, 0xc97c, 0xa5b3, 0xa6a6, 0xa6a7, 0xa6a5, 0xa6a8, 0xa7da, 0xa7d9, 0xccb1, 0xa9cf, 0xa9ce, 0xd1af, 0xb1ad, 0xb1ae, 0xb475, 0xdd72, 0xb760, 0xb761, 0xdd74, 0xdd76, 0xdd75, 0xe1d7, 0xe1d6, 0xba49, 0xe1d8, 0x8d79, 0xe5ac, 0xbcae, 0xbed4, 0xc0b8, 0xc257, 0xc0b9, 0xa4e1, 0x8bfc, 0xa076, 0xcae6, 0xccb2, 0xa9d1, 0xa9d0, 0xa9d2, 0xabf3, 0xced2, 0xced3, 0xd1b0, 0xaeb0, 0xb1af, 0xb476, 0xd951, 0xa4e2, 0x8bcd, 0xa47e, 0xa4e3, 0xc97d, 0xa5b7, 0xa5b6, 0xa5b4, 0xa5b5, 0xa6ab, 0xc9e9, 0xc9eb, 0xa6aa, 0xc9e3, 0xc9e4, 0xc9ea, 0xc9e6, 0xc9e8, 0xa6a9, 0xc9e5, 0xc9ec, 0xc9e7, 0x9f5a, 0xa7e1, 0xa7ea, 0xa7e8, 0xcaf0, 0xcaed, 0xcaf5, 0xa7e6, 0xcaf6, 0xa7df, 0xcaf3, 0xa7e5, 0xcaef, 0xcaee, 0xa7e3, 0xcaf4, 0xa7e4, 0xa9d3, 0xa7de, 0xcaf1, 0x9ff4, 0xcae7, 0xa7db, 0x9fba, 0xa7ee, 0xcaec, 0xcaf2, 0xa7e0, 0xa7e2, 0xcae8, 0xcae9, 0xcaea, 0x8d7a, 0xa7ed, 0xa7e7, 0xa7ec, 0xcaeb, 0xa7eb, 0xa7dd, 0xa7dc, 0xa7e9, 0x9e45, 0x93b0, 0xa075, 0xa9e1, 0xccbe, 0xccb7, 0xa9dc, 0xa9ef, 0xccb3, 0xccba, 0xccbc, 0xccbf, 0xa9ea, 0xccbb, 0xccb4, 0xa9e8, 0xccb8, 0xccc0, 0xa9d9, 0xccbd, 0xa9e3, 0xa9e2, 0xccb6, 0xa9d7, 0xa9d8, 0x9b46, 0xa9d6, 0xfcae, 0xa9ee, 0xa9e6, 0xa9e0, 0xa9d4, 0xccb9, 0xa9df, 0xa9d5, 0xa9e7, 0xa9f0, 0xced4, 0xa9e4, 0xccb5, 0xa9da, 0xa9dd, 0xa9de, 0xfcb0, 0xa9ec, 0xa9ed, 0xa9eb, 0xa9e5, 0xa9e9, 0xa9db, 0xabf4, 0xfa51, 0x8d7b, 0xceda, 0xac41, 0xabf8, 0xabfa, 0xac40, 0xcee6, 0xabfd, 0xd1b1, 0xaeb1, 0xac43, 0xced7, 0xcedf, 0xabfe, 0xcede, 0xcedb, 0xcee3, 0xcee5, 0xabf7, 0xabfb, 0xac42, 0xaeb3, 0xcee0, 0xabf9, 0xac45, 0xced9, 0xabfc, 0xaeb2, 0xabf6, 0xced6, 0xcedd, 0xced5, 0xced8, 0xcedc, 0xd1b2, 0xac44, 0xcee1, 0xcee2, 0xcee4, 0xabf5, 0x8d7c, 0xaec1, 0xd1be, 0xaebf, 0xaec0, 0xd1b4, 0xd1c4, 0x9ed6, 0xaeb6, 0x93ac, 0xd566, 0xd1c6, 0xd1c0, 0x9f5b, 0xd1b7, 0x93a9, 0xd1c9, 0xd1ba, 0xaebc, 0xd57d, 0xd1bd, 0xaebe, 0xaeb5, 0xd1cb, 0xd1bf, 0xaeb8, 0xd1b8, 0xd1b5, 0xd1b6, 0xaeb9, 0xd1c5, 0xd1cc, 0xaebb, 0xd1bc, 0xd1bb, 0xaec3, 0xaec2, 0xaeb4, 0xaeba, 0xaebd, 0xd1c8, 0xd1c2, 0xaeb7, 0xd1b3, 0xd1ca, 0xd1c1, 0xd1c3, 0xd1c7, 0xa07c, 0xd567, 0xb1b7, 0xb1cb, 0xb1ca, 0xb1bf, 0xfcb2, 0xd579, 0xd575, 0xd572, 0xd5a6, 0xb1ba, 0xb1b2, 0xd577, 0xb4a8, 0xb1b6, 0xd5a1, 0x8ac1, 0xb1cc, 0xb1c9, 0xd57b, 0xd56a, 0x9fb4, 0xb1c8, 0xd5a3, 0xd569, 0xb1bd, 0xb1c1, 0xd5a2, 0xd573, 0xb1c2, 0xb1bc, 0xd568, 0xfcac, 0xb478, 0xd5a5, 0xd571, 0xb1c7, 0xd574, 0xd5a4, 0xb1c6, 0xd952, 0xb1b3, 0xd56f, 0xb1b8, 0xb1c3, 0xb1be, 0xd578, 0xd56e, 0xd56c, 0xd57e, 0xb1b0, 0xb1c4, 0xb1b4, 0xb477, 0xd57c, 0xb1b5, 0xb1b1, 0xb1c0, 0xb1bb, 0xb1b9, 0xd570, 0xb1c5, 0xd56d, 0xd57a, 0xd576, 0xd954, 0xd953, 0x9e4c, 0xd56b, 0xd964, 0xb47a, 0x8fc5, 0xd96a, 0xd959, 0xd967, 0xdd77, 0xb47d, 0xd96b, 0xd96e, 0xb47c, 0xd95c, 0xd96d, 0xd96c, 0xb47e, 0xd955, 0xb479, 0xb4a3, 0x93ad, 0xb4a1, 0xd969, 0xd95f, 0xb4a5, 0xd970, 0xd968, 0xd971, 0xb4ad, 0xb4ab, 0xd966, 0xd965, 0x9dc3, 0xd963, 0xd95d, 0xb4a4, 0x8da2, 0xb4a2, 0xd1b9, 0xd956, 0x9d4a, 0xddb7, 0xd957, 0xb47b, 0xb4aa, 0xdd79, 0xb4a6, 0xb4a7, 0xd958, 0xd96f, 0xdd78, 0xd960, 0xd95b, 0xb4a9, 0xd961, 0xd95e, 0xfcb6, 0xb4ae, 0x8da3, 0x9e4b, 0x9e4d, 0xb770, 0x8da4, 0xdd7c, 0xddb1, 0xddb6, 0xddaa, 0xb76c, 0xddbb, 0xb769, 0xdd7a, 0xdd7b, 0xb762, 0xb76b, 0xdda4, 0xb76e, 0xb76f, 0xdda5, 0xddb2, 0xddb8, 0xb76a, 0xb764, 0xdda3, 0xdd7d, 0xddba, 0xdda8, 0xdda9, 0xdd7e, 0xddb4, 0xddab, 0xddb5, 0xddad, 0xb765, 0xe1d9, 0xb768, 0xb766, 0xddb9, 0xddb0, 0xddac, 0x8afd, 0xdda1, 0xba53, 0xddaf, 0xb76d, 0xdda7, 0xfcb5, 0xdda6, 0xfcc3, 0x93b2, 0xb767, 0xb763, 0xe1ee, 0xddb3, 0xddae, 0xdda2, 0xe1e9, 0xe1da, 0xe1e5, 0xe1ec, 0xba51, 0xb4ac, 0xe1ea, 0xba4c, 0xba4b, 0xe1f1, 0x8da5, 0xe1db, 0xe1e8, 0xe1dc, 0xe1e7, 0xba4f, 0xe1eb, 0xd962, 0xe1f2, 0xe1e3, 0xba52, 0xe5ba, 0xbcaf, 0xe1f0, 0xe1ef, 0xba54, 0xe5ad, 0xbcb0, 0xe5ae, 0x93a1, 0xe1df, 0xe1e0, 0xe1dd, 0xe1e2, 0xe1de, 0xe1f3, 0xba4e, 0xbcb1, 0xba50, 0xba55, 0x8ac6, 0xe1e1, 0xe1ed, 0xe1e6, 0xe5b1, 0xba4a, 0xbcb4, 0xe9aa, 0xe5b6, 0xe5b5, 0xe5b7, 0x8a5b, 0xe5b4, 0xbcb5, 0x894d, 0xbcbb, 0xbcb8, 0xbcb9, 0xe5af, 0xe5b2, 0xe5bc, 0xbcc1, 0xbcbf, 0xe5b3, 0xd95a, 0xbcb2, 0xe5b9, 0xe5b0, 0xbcc2, 0xe5b8, 0xba4d, 0xbcb7, 0xe1e4, 0xbcba, 0xbcbe, 0xbcc0, 0xbcbd, 0xbcbc, 0xfed4, 0xbcb6, 0xe5bb, 0xbcb3, 0xbcc3, 0x8a78, 0x93ab, 0xbed8, 0xbed9, 0xe9a9, 0xbee2, 0xbedf, 0x8da7, 0xbed6, 0xbedd, 0xe9ab, 0xbedb, 0xbed5, 0xbedc, 0xe9a8, 0xc0bb, 0xbed7, 0xbede, 0xc0ba, 0xe9a7, 0xe9a6, 0xbee0, 0x9f45, 0xbee1, 0xe9a5, 0xe9a4, 0xc0bc, 0xe9ae, 0xbeda, 0xe9ac, 0x8a56, 0xc0bd, 0xfcbf, 0xc0c2, 0xecea, 0xecec, 0xfcc0, 0xc0bf, 0x8ee6, 0xeced, 0xece9, 0x8aa4, 0xeceb, 0xc0c0, 0xc0c3, 0xece8, 0xc0be, 0xc0c1, 0xc259, 0xe9ad, 0xc258, 0xc25e, 0xefd4, 0xc25c, 0xc25d, 0xefd7, 0xefd3, 0xc25a, 0xefd1, 0xc36b, 0xefd5, 0xefd6, 0xefd2, 0xc25b, 0xf242, 0xf245, 0x8943, 0xf246, 0xf244, 0xf247, 0xc36c, 0xf243, 0x93f3, 0xf44e, 0xc464, 0xf44d, 0xf44c, 0xf44b, 0xc463, 0xc465, 0xf5cd, 0xc4e2, 0xc4e1, 0xfcab, 0x9ea2, 0xf6e1, 0xf6e0, 0xf6e3, 0xc5cb, 0xc575, 0xf7dd, 0xf6e2, 0xf7dc, 0xc5cd, 0xc5cc, 0xc5f3, 0xf8a9, 0xf8ef, 0xa4e4, 0x9dc7, 0xd972, 0xe9af, 0xc6d2, 0x8bce, 0xa6ac, 0xcaf7, 0xa7f1, 0xa7ef, 0xa7f0, 0xccc1, 0xa9f1, 0xac46, 0xcee7, 0xcee8, 0xac47, 0xd1ce, 0xaec4, 0xaec5, 0xd1cd, 0xfcc5, 0xb1d3, 0xb1cf, 0xd5a7, 0xb1d6, 0xb1d5, 0xb1ce, 0xb1d1, 0xb1d4, 0xb1d0, 0xd976, 0xb1cd, 0xb4af, 0xfccb, 0xb4b1, 0xb4b2, 0xd975, 0xd978, 0xb4b0, 0xd973, 0xd977, 0xd974, 0x93b3, 0xb771, 0xfcca, 0xddbc, 0xba56, 0xe1f4, 0xbee3, 0xbcc4, 0xe5bd, 0xbcc5, 0xbcc6, 0xe5bf, 0xe5be, 0xe5c0, 0xe9b1, 0xe9b0, 0xecef, 0xecee, 0xc0c4, 0xc0c5, 0xf248, 0xfcc9, 0x8dac, 0xa4e5, 0xfbc6, 0x8967, 0x8c7e, 0xd979, 0xb4b4, 0xb4b3, 0xddbd, 0xefd8, 0xc4e3, 0xf7de, 0xa4e6, 0xaec6, 0xb1d8, 0xb1d7, 0xd97a, 0xd97b, 0xb772, 0xe1f5, 0xba57, 0xe9b2, 0xa4e7, 0xa5b8, 0xa9f2, 0xccc2, 0xcee9, 0xac48, 0xb1d9, 0xd97c, 0xb4b5, 0xb773, 0xe5c1, 0xe5c2, 0xfccd, 0xecf0, 0xc25f, 0xf8f0, 0xa4e8, 0xccc3, 0xa9f3, 0xac49, 0x9cf3, 0xceea, 0xaec7, 0xd1d2, 0xd1d0, 0xd1d1, 0xaec8, 0xd1cf, 0xb1db, 0xb1dc, 0xd5a8, 0xb1dd, 0xb1da, 0xd97d, 0xfcd0, 0xd97e, 0xddbe, 0x95bb, 0xba59, 0xba58, 0xecf1, 0xefd9, 0xf24a, 0xf249, 0xf44f, 0xfcd3, 0xc95e, 0xac4a, 0xfcd4, 0xa4e9, 0xa5b9, 0xa6ae, 0xa6ad, 0xa6af, 0xa6b0, 0xc9ee, 0xc9ed, 0xcaf8, 0xa7f2, 0xcafb, 0xcafa, 0xcaf9, 0xcafc, 0xa9f4, 0xccc9, 0xccc5, 0xccce, 0x8dae, 0xa9fb, 0xa9f9, 0xccca, 0xccc6, 0xcccd, 0xa9f8, 0xaa40, 0xccc8, 0xccc4, 0xa9fe, 0xcccb, 0xa9f7, 0xcccc, 0xa9fa, 0xa9fc, 0xccd0, 0xcccf, 0xccc7, 0xa9f6, 0xa9f5, 0xa9fd, 0xfcd7, 0xceef, 0xcef5, 0x93db, 0xac50, 0xac4d, 0xceec, 0xcef1, 0xfe63, 0xac53, 0xac4b, 0xcef0, 0xac4e, 0xac51, 0xcef3, 0xac4c, 0xcef8, 0xac4f, 0x93d5, 0xac52, 0xceed, 0xcef2, 0xcef6, 0xceee, 0xceeb, 0xcef7, 0xcef4, 0xaed0, 0xaec9, 0xaecc, 0xfcda, 0xaecf, 0xd1d5, 0x9b71, 0xaeca, 0xd1d3, 0xfcdd, 0xaece, 0xaecb, 0xd1d6, 0xaecd, 0x8daf, 0xfaf2, 0xd5ac, 0xb1df, 0xd5ab, 0xd5ad, 0xb1de, 0xb1e3, 0xd1d4, 0xd5aa, 0xd5ae, 0x93d8, 0xb1e0, 0xd5a9, 0xb1e2, 0xfcdf, 0xb1e1, 0xd9a7, 0x93d3, 0xd9a2, 0xb4b6, 0xb4ba, 0xb4b7, 0xd9a5, 0xd9a8, 0xfce1, 0xb4b8, 0xb4b9, 0xb4be, 0xddc7, 0xd9a6, 0xb4bc, 0xd9a3, 0xd9a1, 0x8e76, 0xb4bd, 0xd9a4, 0xb779, 0xfc62, 0xddbf, 0xb776, 0xb777, 0xb775, 0xddc4, 0xddc3, 0xddc0, 0xb77b, 0x93d1, 0xddc2, 0xb4bb, 0x8db1, 0xddc6, 0xddc1, 0xb778, 0xb774, 0xb77a, 0xddc5, 0x9859, 0xba5c, 0xe1f8, 0xe1f7, 0xe1f6, 0xba5a, 0xfb52, 0xba5b, 0xe5c5, 0xe5c8, 0xbcc8, 0xfb53, 0xbcc7, 0xe5c9, 0xe5c4, 0xbcca, 0xe5c6, 0xfb4d, 0xbcc9, 0xe5c3, 0x9cbf, 0xe5c7, 0xbee9, 0xbee6, 0xe9bb, 0xe9ba, 0xe9b9, 0xe9b4, 0x9b72, 0xe9b5, 0xbee7, 0xbee4, 0xbee8, 0xe9b3, 0xbee5, 0xe9b6, 0xe9b7, 0xe9bc, 0xfb50, 0x93be, 0xe9b8, 0xecf2, 0xc0c7, 0xefdc, 0xc0c6, 0xefda, 0xefdb, 0xc260, 0xc36e, 0xf24b, 0xc36d, 0xf451, 0xf452, 0xc466, 0xf450, 0xc4e4, 0xf7df, 0xc5ce, 0xf8aa, 0xf8ab, 0xa4ea, 0x9df1, 0xa6b1, 0xa6b2, 0xa7f3, 0xccd1, 0xac54, 0xaed1, 0xb1e4, 0xb0d2, 0xb4bf, 0xb4c0, 0xb3cc, 0xd9a9, 0xfceb, 0xb77c, 0xe1fa, 0xe1f9, 0xa4eb, 0xa6b3, 0xccd2, 0xaa42, 0xa0bb, 0xaa41, 0x9b7e, 0xcef9, 0xcefa, 0xd1d7, 0xd1d8, 0xaed2, 0xaed3, 0x8db3, 0xaed4, 0xd5af, 0x8c52, 0xb1e6, 0xb4c2, 0x9ae8, 0xb4c1, 0xddc8, 0xdf7a, 0xe1fb, 0xe9bd, 0x8edc, 0xc261, 0xc467, 0xa4ec, 0xa5bc, 0xa5bd, 0xa5bb, 0xa5be, 0xa5ba, 0xa6b6, 0xc9f6, 0xa6b5, 0xa6b7, 0x9cf9, 0xc9f1, 0xc9f0, 0xc9f3, 0xc9f2, 0xc9f5, 0xa6b4, 0xc9ef, 0xc9f4, 0xfa50, 0xcafd, 0xa7fd, 0xcafe, 0xcb43, 0xa7fc, 0xcb47, 0xcb42, 0xcb45, 0xa7f5, 0xa7f6, 0xa7f7, 0xa7f8, 0xa840, 0xcb41, 0xa7fa, 0xa841, 0xcb40, 0xcb46, 0xa7f9, 0xcb44, 0xa7fb, 0xa7f4, 0xa7fe, 0x98e7, 0xfcf3, 0xfcf2, 0xaa57, 0x8cca, 0xccd4, 0xaa43, 0xaa4d, 0xaa4e, 0xaa46, 0xaa58, 0xaa48, 0xccdc, 0xaa53, 0xccd7, 0xaa49, 0xcce6, 0xcce7, 0xccdf, 0xccd8, 0xaa56, 0xcce4, 0xaa51, 0xaa4f, 0xcce5, 0xcce3, 0xccdb, 0xccd3, 0xccda, 0xaa4a, 0xaa50, 0xaa44, 0xccde, 0xccdd, 0xccd5, 0x93e5, 0xaa52, 0xcce1, 0xccd6, 0xaa55, 0xcce8, 0xaa45, 0xaa4c, 0xccd9, 0xcce2, 0xaa54, 0xaa47, 0xaa4b, 0xcce0, 0x9a59, 0x8db5, 0xfd4d, 0xcf5b, 0xac5c, 0xac69, 0xfd5e, 0xcf56, 0xcf4c, 0xac62, 0xcf4a, 0xac5b, 0xcf45, 0xac65, 0xcf52, 0xcefe, 0xcf41, 0x8f7d, 0xcf44, 0xcefb, 0xcf51, 0xcf61, 0xac60, 0xcf46, 0xcf58, 0xcefd, 0xcf5f, 0xcf60, 0xcf63, 0xcf5a, 0xcf4b, 0xcf53, 0xac66, 0xac59, 0xac61, 0xac6d, 0xac56, 0xac58, 0x9547, 0xfcf6, 0xcf43, 0xac6a, 0xac63, 0xcf5d, 0xcf40, 0xac6c, 0xac67, 0xcf49, 0xac6b, 0xcf50, 0xcf48, 0xac64, 0xcf5c, 0xcf54, 0xac5e, 0xcf62, 0xcf47, 0xac5a, 0xcf59, 0xcf4f, 0xac5f, 0xcf55, 0xac57, 0xcefc, 0xac68, 0xaee3, 0xac5d, 0xcf4e, 0xcf4d, 0xcf42, 0x9250, 0xcf5e, 0xcf57, 0x8968, 0xac55, 0x8db6, 0xfcfb, 0xa07d, 0x98fc, 0x8969, 0xfe4f, 0x9256, 0xd1ec, 0xaeea, 0xd1ed, 0xd1e1, 0xaedf, 0xaeeb, 0xd1da, 0xfac9, 0xd1e3, 0xd1eb, 0x93e8, 0xd1d9, 0xd1f4, 0xaed5, 0xfcf8, 0xd1f3, 0xd1ee, 0xd1ef, 0xaedd, 0xaee8, 0xd1e5, 0xd1e6, 0xd1f0, 0xd1e7, 0xd1e2, 0xd1dc, 0xd1dd, 0xd1ea, 0xd1e4, 0x9ce3, 0xfda9, 0xaed6, 0xaeda, 0xd1f2, 0xd1de, 0xaee6, 0xaee2, 0xfc44, 0xaee5, 0xaeec, 0xaedb, 0xaee7, 0xd1e9, 0xaee9, 0xaed8, 0x9640, 0xaed7, 0xd1db, 0x8db8, 0xd1df, 0xaee0, 0xd1f1, 0xd1e8, 0xd1e0, 0xaee4, 0xaee1, 0xaed9, 0xaedc, 0x9b4a, 0x8fb9, 0xfcfe, 0x896a, 0xd5c4, 0xd5b4, 0xd5b5, 0xd5b9, 0xd5c8, 0xd5c5, 0xd5be, 0xd5bd, 0xb1ed, 0xd5c1, 0xd5d0, 0xd5b0, 0xd5d1, 0xd5c3, 0xd5d5, 0xd5c9, 0xb1ec, 0xd5c7, 0xb1e7, 0xb1fc, 0xb1f2, 0x8db9, 0xb1f6, 0xb1f5, 0xd5b1, 0x917e, 0xd5ce, 0xd5d4, 0xd5cc, 0xd5d3, 0xd5c0, 0xd5b2, 0xd5d2, 0xd5c2, 0xb1ea, 0xb1f7, 0xd5cb, 0xb1f0, 0x93f4, 0xd5ca, 0xd5b3, 0xb1f8, 0xb1fa, 0xd5cd, 0xb1fb, 0xb1e9, 0xd5ba, 0xd5cf, 0xfb7c, 0xb1ef, 0xb1f9, 0xd5bc, 0xd5c6, 0xd5b7, 0xd5bb, 0xb1f4, 0xd5b6, 0xb1e8, 0xb1f1, 0xb1ee, 0xd5bf, 0xaede, 0xd9c0, 0xb1eb, 0x93e7, 0x97ef, 0xfe4a, 0xfd45, 0xb1f3, 0x96a5, 0xd9c3, 0xd9d9, 0xd9ce, 0xb4d6, 0xfee0, 0xb4d1, 0xd9bd, 0xb4d2, 0xd9cd, 0xd9c6, 0xd9d3, 0xb4ce, 0xd9ab, 0xd9d5, 0xb4c4, 0xd9b3, 0xb4c7, 0xb4c6, 0xb4d7, 0xd9ad, 0xd9cf, 0xd9d0, 0xb4c9, 0xb4c5, 0xd9bb, 0xb4d0, 0xd9b6, 0xd9d1, 0xb4cc, 0xd9c9, 0xd9d6, 0xd9b0, 0xd9b5, 0xd9af, 0xb4cb, 0xd9c2, 0xddde, 0xd9b1, 0xb4cf, 0xd9ba, 0xd9d2, 0xb4ca, 0xd9b7, 0xd9b4, 0xd9c5, 0xb4cd, 0xb4c3, 0xb4d9, 0xd9c8, 0xd9c7, 0xfd48, 0xfd47, 0xfef2, 0xfe6a, 0xd9ac, 0xb4c8, 0xd9d4, 0xd9bc, 0xd9be, 0x8dbd, 0xd9cb, 0xd9ca, 0xd9aa, 0xb4d3, 0xb4d5, 0xd9b2, 0xd9b9, 0xd9c1, 0xb4d4, 0xd9b8, 0xd9c4, 0xd9d7, 0xd9cc, 0x9ba1, 0x8ca2, 0x9ab7, 0x8efc, 0xd9d8, 0xd9ae, 0x9fa1, 0xddf2, 0xb7a6, 0xddf0, 0xdddb, 0xdde0, 0xddd9, 0xfd51, 0xddec, 0xddcb, 0xddd2, 0xddea, 0xddf4, 0xdddc, 0xfaad, 0xddcf, 0xdde2, 0xdde7, 0xddd3, 0x8dbe, 0xdde4, 0xddd0, 0x89a4, 0xddd7, 0xddd8, 0xb7a8, 0xddeb, 0xdde9, 0xddcc, 0xddee, 0xddef, 0xddf1, 0xb7ac, 0xb7a4, 0x9ad9, 0xd5b8, 0xddd4, 0xdde6, 0xddd5, 0xb7a1, 0xb7b1, 0xdded, 0xb7af, 0xb7ab, 0xddca, 0xb7a3, 0xfd4e, 0xddcd, 0xb7b0, 0x8dc0, 0xdddd, 0xddc9, 0x97f0, 0xb7a9, 0xdde1, 0xddd1, 0xb7aa, 0xddda, 0xb77e, 0xb4d8, 0xdde3, 0xd9bf, 0xddce, 0x93b4, 0xfd44, 0xdde8, 0xb7a5, 0xdde5, 0xb7a2, 0xdddf, 0xb7ad, 0xddd6, 0xddf3, 0x9fa7, 0xb7a7, 0xdec6, 0x8dc2, 0xb7ae, 0x99b6, 0xe24a, 0xe248, 0xe25e, 0xe246, 0xe258, 0xb77d, 0xba5f, 0xe242, 0xe25d, 0xfd52, 0xe247, 0xe255, 0xba64, 0xba5d, 0xe25b, 0x8dc1, 0xe240, 0xe25a, 0x8e46, 0xba6f, 0xe251, 0xe261, 0xba6d, 0xe249, 0xba5e, 0xe24b, 0xe259, 0xba67, 0xe244, 0xba6b, 0xba61, 0xe24d, 0xe243, 0xe1fc, 0xa0d1, 0xe257, 0xba68, 0xe260, 0xe1fd, 0xba65, 0xe253, 0xba66, 0xe245, 0xe250, 0xe24c, 0xe24e, 0x9fca, 0xba60, 0xe25f, 0xba6e, 0xe24f, 0xe262, 0xe1fe, 0xe254, 0xba63, 0xba6c, 0xba6a, 0xe241, 0xe256, 0xba69, 0x92cf, 0xba62, 0xe252, 0x9cf4, 0x8dc4, 0xe25c, 0xfd41, 0xe5d5, 0xe5d1, 0xe5cd, 0xe5e1, 0xe5de, 0xbccd, 0x9b4c, 0xe5e5, 0xe5d4, 0xbcd8, 0xe5db, 0xe5d0, 0xe5da, 0xbcd5, 0xe5ee, 0xe5eb, 0xe5dd, 0xe5ce, 0xfd57, 0xfcef, 0xe5e2, 0xe5e4, 0xbcd1, 0xe5d8, 0xe5d3, 0xe5ca, 0xbcce, 0xbcd6, 0x9cde, 0xe5e7, 0xbcd7, 0xe5cb, 0xe5ed, 0xe5e0, 0xe5e6, 0xbcd4, 0xfd42, 0x986c, 0xe5e3, 0xe5ea, 0xbcd9, 0xbcd3, 0xe5dc, 0xe5cf, 0xe5ef, 0xe5cc, 0xe5e8, 0xbcd0, 0x97f9, 0xe5d6, 0x9558, 0xe5d7, 0xbccf, 0xbccc, 0xe5d2, 0xbcd2, 0xbccb, 0xe5e9, 0xe5ec, 0xe5d9, 0xe9ca, 0x985e, 0xfe7b, 0x94cd, 0xe9c2, 0x93ee, 0xe9be, 0xbef6, 0xbeeb, 0xbef0, 0xbeec, 0xe9cc, 0xe9d7, 0xbeea, 0xe9c4, 0xe9cd, 0xe5df, 0xe9ce, 0x8ca3, 0xbef1, 0xfd5a, 0xe9dd, 0xbef5, 0xbef8, 0xe9c0, 0xbef4, 0x93f5, 0xe9db, 0xe9dc, 0xe9d2, 0xe9d1, 0xe9c9, 0x93ef, 0x8eea, 0xe9d3, 0xe9da, 0xe9d9, 0x8f5b, 0xbeef, 0xbeed, 0xe9cb, 0xe9c8, 0xe9c5, 0xe9d8, 0xbef7, 0xe9d6, 0xbef3, 0xbef2, 0x8c5e, 0xe9d0, 0x8dc6, 0xe9bf, 0xe9c1, 0xe9c3, 0xe9d5, 0xe9cf, 0xbeee, 0xe9c6, 0xe9d4, 0x8dc8, 0x8dc7, 0xe9c7, 0x93f7, 0xc0cf, 0xed45, 0xc0c8, 0xecf5, 0x8dc9, 0xed41, 0xc0ca, 0xed48, 0xecfc, 0xecf7, 0xfbf2, 0xed49, 0xecf3, 0xecfe, 0x9670, 0xc0d1, 0xed44, 0xed4a, 0xecfd, 0xc0c9, 0xed40, 0xecf4, 0xc0d0, 0x8dcb, 0xed47, 0xecf9, 0xc0cc, 0xfd5c, 0xecfb, 0xecf8, 0xc0d2, 0xecfa, 0xc0cb, 0xc0ce, 0xed43, 0xecf6, 0xed46, 0x8f65, 0xed42, 0x8dcd, 0xc263, 0xefe7, 0xc268, 0xc269, 0x9da8, 0x94f9, 0xc262, 0xefe6, 0x8dce, 0xefe3, 0xefe4, 0xc266, 0xefde, 0xefe2, 0xc265, 0xefdf, 0x93ea, 0xc267, 0xc264, 0xefdd, 0xefe1, 0xefe5, 0xfd5f, 0x93f0, 0x9fb6, 0xf251, 0xf24e, 0xf257, 0xf256, 0xf254, 0xf24f, 0xc372, 0x8dcf, 0x9763, 0xf250, 0xc371, 0xc0cd, 0xf253, 0xc370, 0xf258, 0xf252, 0xf24d, 0xefe0, 0xc36f, 0xf24c, 0xf456, 0xf455, 0xf255, 0xc468, 0xf459, 0xf45a, 0xf454, 0xf458, 0xf453, 0x8dd0, 0xf5d1, 0xf457, 0xc4e7, 0xc4e5, 0xf5cf, 0xf5d2, 0xf5ce, 0xf5d0, 0xc4e6, 0x93f1, 0xf6e5, 0xf6e6, 0xc576, 0xf6e4, 0xf7e2, 0xc5cf, 0xf7e0, 0xf7e1, 0xf8ac, 0xc656, 0xf8f3, 0xf8f1, 0xf8f2, 0xf8f4, 0xfd62, 0xf9bb, 0xa4ed, 0xa6b8, 0xaa59, 0xcce9, 0xcf64, 0xd1f5, 0xd1f7, 0xd1f6, 0xd1f8, 0xb1fd, 0xd5d7, 0xd1f9, 0xfd65, 0xd5d6, 0xd5d8, 0xd5d9, 0xd9da, 0xb4db, 0xd9db, 0xd9dd, 0xb4dc, 0xb4da, 0xd9dc, 0xddfa, 0xddf8, 0xddf7, 0xddf6, 0xddf5, 0xb7b2, 0xddf9, 0xba70, 0xe263, 0xe265, 0xba71, 0xe264, 0xbcdb, 0xbcda, 0xe5f0, 0x9fdb, 0xe9df, 0xe9de, 0xe9e0, 0x93f8, 0xbef9, 0xed4b, 0xc0d3, 0xefe8, 0xc26a, 0xf259, 0xc577, 0xa4ee, 0xa5bf, 0xa6b9, 0xa842, 0xaa5a, 0xaa5b, 0xac6e, 0xd1fa, 0x8bf7, 0xb7b3, 0xfd66, 0xe6d1, 0xbefa, 0xc26b, 0xa4ef, 0x8bcf, 0xa6ba, 0xcceb, 0xaa5c, 0xccea, 0x8dd1, 0xcf65, 0xac6f, 0xcf66, 0xac70, 0xd1fc, 0xaeee, 0xaeed, 0xd5de, 0xd5dc, 0xd5dd, 0xd5db, 0xd5da, 0xd9de, 0xd9e1, 0xb4de, 0xd9df, 0xb4dd, 0xd9e0, 0xddfb, 0xe266, 0xe267, 0xe268, 0xe5f3, 0xe5f2, 0xbcdc, 0xe5f1, 0xe5f4, 0xe9e1, 0xe9e2, 0xe9e3, 0xed4c, 0xc0d4, 0xc26c, 0xf25a, 0xc4e8, 0xc95f, 0xac71, 0xcf67, 0xaeef, 0xb1fe, 0xb4df, 0xd9e2, 0xb7b5, 0xb7b4, 0x8dd2, 0xe269, 0xe26a, 0xbcdd, 0xbcde, 0xe9e5, 0xe9e4, 0xefe9, 0xf7e3, 0xa4f0, 0xc960, 0xa5c0, 0xa843, 0xcb48, 0xac72, 0xb7b6, 0xa4f1, 0xcf68, 0xac73, 0xcf69, 0xc0d5, 0xa4f2, 0xfd71, 0xccec, 0xcf6a, 0xfd6f, 0xd242, 0xd241, 0xd1fe, 0xd1fd, 0xd243, 0xd240, 0x8dd3, 0xb240, 0xb241, 0xb4e0, 0xd9e3, 0xd9e4, 0xd9e5, 0xde41, 0xde42, 0xde40, 0x9fe7, 0xddfd, 0xddfe, 0xb7b7, 0xe26b, 0xe5f7, 0xe5f6, 0xe5f5, 0xe5f8, 0xe9e7, 0xe9e6, 0xbefb, 0xe9e8, 0xc0d6, 0xed4d, 0xefea, 0xf25b, 0xf6e7, 0xa4f3, 0xa5c2, 0xa5c1, 0xaa5d, 0xc961, 0xc97e, 0xa6bb, 0xc9f7, 0xcb49, 0xcb4a, 0xaa5e, 0x90bd, 0xcced, 0xac74, 0xcf6b, 0xcf6c, 0xaef0, 0xaef4, 0xd244, 0xaef3, 0xaef1, 0xaef2, 0xd5df, 0xb242, 0xb4e3, 0xb4e1, 0xb4e2, 0xd9e6, 0x9fd0, 0xba72, 0xa4f4, 0x8bd0, 0xc9a1, 0xfd72, 0xa5c3, 0x9cae, 0x8bd1, 0xc9a4, 0x8adb, 0xa5c6, 0xc9a3, 0xa5c5, 0xa5c4, 0xa844, 0xc9a2, 0xc9f8, 0xfae4, 0xc9fc, 0xc9fe, 0xca40, 0xa6c5, 0xa6c6, 0xc9fb, 0xa6c1, 0xc9f9, 0xc9fd, 0xa6c2, 0xa6bd, 0x95ce, 0xa6be, 0xfd76, 0xa6c4, 0xc9fa, 0xa6bc, 0xa845, 0xa6bf, 0xa6c0, 0xa6c3, 0xcb5b, 0xcb59, 0xcb4c, 0xa851, 0xcb53, 0xa84c, 0xcb4d, 0xcb55, 0xfb62, 0xcb52, 0xa84f, 0xcb51, 0xa856, 0xcb5a, 0xa858, 0x8dd4, 0xa85a, 0xcb4b, 0xfd78, 0xa84d, 0xcb5c, 0xa854, 0xa857, 0x8ee3, 0xcd45, 0xa847, 0xa85e, 0xa855, 0xcb4e, 0xa84a, 0xa859, 0xcb56, 0xa848, 0xa849, 0xcd43, 0xcb4f, 0xa850, 0xa85b, 0xcb5d, 0xcb50, 0xa84e, 0xa853, 0xccee, 0xa85c, 0xcb57, 0xa852, 0xa85d, 0xa846, 0xcb54, 0xa84b, 0xcb58, 0xcd44, 0x9076, 0x98c6, 0x8dd5, 0xaa6a, 0xaa7a, 0xccf5, 0xaa71, 0x97d1, 0xcd4b, 0xaa62, 0x9eb6, 0xaa65, 0xcd42, 0xccf3, 0xccf7, 0xaa6d, 0xaa6f, 0xccfa, 0xaa76, 0xaa68, 0xaa66, 0xaa67, 0xaa75, 0xcd47, 0xaa70, 0xccf9, 0xccfb, 0xaa6e, 0xaa73, 0xccfc, 0xcd4a, 0xac75, 0xaa79, 0xfac7, 0xaa63, 0xcd49, 0xa042, 0xcd4d, 0xccf8, 0xcd4f, 0xcd40, 0xaa6c, 0xccf4, 0xaa6b, 0xaa7d, 0xaa72, 0xccf2, 0xcf75, 0xaa78, 0xaa7c, 0xcd41, 0xcd46, 0x9873, 0xaa7e, 0xaa77, 0xaa69, 0xaa5f, 0xaa64, 0xccf6, 0xaa60, 0xcd4e, 0x9ffc, 0xccf0, 0xccef, 0xccfd, 0xccf1, 0xaa7b, 0xaef5, 0xaa74, 0xccfe, 0xaa61, 0xaca6, 0xcd4c, 0x8ca5, 0xcf7c, 0xcfa1, 0x8dd7, 0xcfa4, 0xcf77, 0x92fb, 0x8dd8, 0xcfa7, 0xcfaa, 0xcfac, 0xcf74, 0xac76, 0xac7b, 0xd249, 0xacad, 0xcfa5, 0xcfad, 0xcf7b, 0xcf73, 0xd264, 0xac7e, 0xcfa2, 0xcf78, 0xcf7a, 0xaca5, 0xcf7d, 0xac7d, 0xcf70, 0xcfa8, 0xcfab, 0x944f, 0xac7a, 0x8dd9, 0xaca8, 0xcf6d, 0xacaa, 0xac78, 0xacae, 0xcfa9, 0xcf6f, 0xacab, 0xd25e, 0xcd48, 0xac7c, 0xac77, 0xcf76, 0xcf6e, 0xacac, 0xaca4, 0xcfa3, 0xaca9, 0xaca7, 0xcf79, 0xaca1, 0xcf71, 0xaca2, 0xaca3, 0xcf72, 0xcfa6, 0xac79, 0xcf7e, 0x896b, 0x97ce, 0xd24c, 0xaefd, 0xaf43, 0xfaf3, 0xfdae, 0xd255, 0xd25b, 0xd257, 0xd24a, 0xd24d, 0xd246, 0xd247, 0xaf4a, 0xaefa, 0xd256, 0xd25f, 0xaf45, 0xaef6, 0xaf40, 0xd24e, 0xaf42, 0xd24f, 0xd259, 0xfbaf, 0x92b7, 0xaf44, 0xd268, 0xd248, 0xaefc, 0xaefb, 0xaf48, 0xd245, 0xd266, 0xd25a, 0xd267, 0xd261, 0xd253, 0xd262, 0x8dda, 0xd25c, 0xd265, 0xd263, 0xaf49, 0xd254, 0xaef9, 0xaef8, 0xaf41, 0xaf47, 0xd260, 0xaf46, 0xd251, 0xb243, 0x9c5a, 0xd269, 0xd250, 0xd24b, 0xaefe, 0xaf4b, 0xaef7, 0xfdad, 0xd258, 0xd25d, 0x8ddc, 0x9444, 0xb265, 0xd5e1, 0xd5e5, 0xb252, 0xb250, 0x8ddd, 0xb247, 0xd5e3, 0xd5e2, 0xb25b, 0xd5e8, 0xb255, 0xa0d6, 0xd5fa, 0xd647, 0xb244, 0xd5f7, 0xd5f0, 0xb267, 0xd5e0, 0xd5fc, 0xb264, 0xb258, 0xb263, 0xb24e, 0xd5ec, 0xd5fe, 0xd5f6, 0xb24f, 0xb249, 0xd645, 0xd5fd, 0xd640, 0xb251, 0xb259, 0xd642, 0xd5ea, 0xd5fb, 0xd5ef, 0xd644, 0xb25e, 0xb246, 0xb25c, 0xd5f4, 0xd5f2, 0xd5f3, 0xb253, 0xd5ee, 0xd5ed, 0xb248, 0xd5e7, 0xd646, 0xb24a, 0xd5f1, 0xb268, 0xb262, 0xd5e6, 0xb25f, 0xb25d, 0xb266, 0xd5f8, 0xb261, 0xd252, 0xd5f9, 0xb260, 0xd641, 0xb245, 0xd5f5, 0xb257, 0xd5e9, 0xb256, 0xb254, 0xb24c, 0xb24b, 0xd9e7, 0xd643, 0x8c41, 0xd5eb, 0x97d5, 0xd9fc, 0x944a, 0xb24d, 0x944d, 0x97cb, 0x8dde, 0x8ddf, 0xb541, 0xb25a, 0xb4ee, 0xd9f6, 0xb4fc, 0xd9ea, 0xb4eb, 0xb4e7, 0xda49, 0xb4ed, 0xb4f1, 0xb4ec, 0xb4f5, 0xda4d, 0xda44, 0x8de0, 0xfef9, 0xd9f1, 0xb4fa, 0xb4f4, 0xd9fd, 0xb4e4, 0xda4a, 0xda43, 0xb4e8, 0xd9f7, 0xb4f7, 0xda55, 0xda56, 0xb4e5, 0xda48, 0xb4f9, 0xd9fb, 0xd9ed, 0xd9ee, 0xb4fd, 0xd9f2, 0xd9f9, 0xd9f3, 0xb4fb, 0xb544, 0xd9ef, 0xd9e8, 0xd9e9, 0xd9eb, 0xb4ea, 0xd9f8, 0xb4f8, 0xb542, 0xfdc0, 0xfcf9, 0xd9fa, 0xda53, 0xda4b, 0xb4e6, 0xda51, 0xb4f2, 0xb4f0, 0xfb7e, 0xda57, 0xb4ef, 0xda41, 0xd9f4, 0xd9fe, 0xb547, 0xda45, 0xda42, 0xd9f0, 0xb543, 0xda4f, 0xda4c, 0xda54, 0xb4e9, 0xda40, 0xb546, 0xda47, 0xb4f3, 0xb4f6, 0xda46, 0xb545, 0xd9f5, 0xd5e4, 0x92b3, 0xda50, 0xda4e, 0xda52, 0xfdaf, 0x8de1, 0xd9ec, 0xb540, 0x95d3, 0xde61, 0xde60, 0xde46, 0xb7bd, 0xde5f, 0xde49, 0xde4a, 0xb7c7, 0xde68, 0xb7c2, 0xde5e, 0x89c1, 0xde43, 0xb7c8, 0xb7be, 0xde52, 0xde48, 0xde4b, 0xde63, 0xb7b8, 0xde6a, 0xde62, 0xb7c1, 0xde57, 0xb7cc, 0xb7cb, 0xb7c5, 0xde69, 0xb7b9, 0xde55, 0xde4c, 0xde59, 0xde65, 0xb7cd, 0xfd68, 0xb7bb, 0xde54, 0x9cb7, 0xde4d, 0xb7c4, 0x8de3, 0xb7c3, 0xde50, 0xde5a, 0xde64, 0xde47, 0xde51, 0xb7bc, 0xde5b, 0xb7c9, 0xb7c0, 0xde4e, 0xb7bf, 0xde45, 0xde53, 0xde67, 0xb4fe, 0xbab0, 0xde56, 0xe26c, 0xde58, 0xde66, 0xb7c6, 0xde4f, 0xb7ba, 0xb7ca, 0xbcf0, 0xde44, 0xde5d, 0xfac0, 0x8de5, 0xfa64, 0xde5c, 0x8947, 0x8de4, 0x8de7, 0x8de8, 0xe2aa, 0xbaad, 0xe27d, 0xe2a4, 0xbaa2, 0xe26e, 0xbaaf, 0xba77, 0xe26d, 0xe2b0, 0xbab1, 0xe271, 0xe2a3, 0xfdc7, 0xe273, 0xe2b3, 0xe2af, 0xba75, 0xbaa1, 0xe653, 0xbaae, 0xba7d, 0xe26f, 0xfdb0, 0xe2ae, 0xbaa3, 0xe2ab, 0xe2b8, 0xe275, 0xe27e, 0x9445, 0x97d6, 0xe2b6, 0xe2ac, 0xba7c, 0xe27c, 0xba76, 0xba74, 0xbaa8, 0xfcc6, 0x9844, 0xe27a, 0xe277, 0xe278, 0xe2b2, 0xe2b7, 0xe2b5, 0xba7a, 0xe2b9, 0xba7e, 0xbaa7, 0x8de9, 0xe270, 0xe5fa, 0xe279, 0xba78, 0xbaac, 0xbaa9, 0xba7b, 0xe2a5, 0xe274, 0xbaaa, 0xe2a7, 0xbaa4, 0xbaa6, 0xba73, 0x8dea, 0xe2a9, 0xe2a1, 0xe272, 0xbaa5, 0xe2b1, 0xe2b4, 0xe27b, 0xe2a8, 0xfe50, 0xba79, 0xbcdf, 0xe2a6, 0xe5f9, 0xe2ad, 0xfdcc, 0xe276, 0xe644, 0xe64e, 0xbce2, 0xe64d, 0xe659, 0xbce4, 0xe64b, 0x9da7, 0xe64f, 0xbcef, 0xe646, 0xbce7, 0xfdcd, 0xe652, 0xe9f0, 0xbcf3, 0xbcf2, 0xe654, 0xe643, 0xe65e, 0xbced, 0xbce3, 0xe657, 0xe65b, 0xe660, 0xe655, 0xe649, 0xbce6, 0xbce9, 0xbcf1, 0xbcec, 0xe64c, 0xe2a2, 0xfdcf, 0xe648, 0xe65f, 0xbce8, 0x95d2, 0xbceb, 0xe661, 0xbce0, 0xe656, 0xe5fb, 0xe65c, 0xc0df, 0x8ded, 0xe64a, 0xbce1, 0xe645, 0xbce5, 0xe5fc, 0xbaab, 0xe641, 0xfcba, 0xe65a, 0xe642, 0xe640, 0xbcea, 0xe658, 0xe5fe, 0xe651, 0xe650, 0xe65d, 0xe647, 0xbcee, 0xfdc5, 0xe9f3, 0xfdd2, 0xbf49, 0xbefe, 0xea40, 0xe9eb, 0xbf41, 0xe9f7, 0xbf48, 0xbf43, 0xe9f5, 0xed4f, 0xe9fb, 0xea42, 0xe9fa, 0xe9e9, 0xe9f8, 0xea44, 0xea46, 0xbefd, 0xea45, 0xbf44, 0xbf4a, 0x9cdc, 0xbf47, 0xe9fe, 0xbf46, 0xe9f9, 0x95cf, 0xe9ed, 0xe9f2, 0x8dee, 0xe9fd, 0xbf45, 0xbf42, 0xbefc, 0xbf40, 0xe9f1, 0xe5fd, 0xe9ec, 0xe9ef, 0xea41, 0xe9f4, 0xe9ea, 0xed4e, 0xea43, 0xe9ee, 0xe9fc, 0xfdd4, 0xed51, 0xc0e3, 0xc0d7, 0x96ec, 0x96eb, 0xc0db, 0xed53, 0xed59, 0xed57, 0xc0d9, 0xc0da, 0xc0e1, 0xed5a, 0xed52, 0xc0dc, 0xed56, 0xed55, 0xed5b, 0xc0e2, 0xc0dd, 0xc0e0, 0xed54, 0xc0e4, 0xc0de, 0xc0e5, 0xc0d8, 0xed58, 0xed50, 0x90b6, 0xeff7, 0xfdc3, 0xc271, 0xeff4, 0xeff6, 0xc26f, 0xeff2, 0xeff3, 0xefee, 0x98ab, 0xe9f6, 0xefef, 0xc270, 0xefeb, 0xc26d, 0xeff8, 0xc26e, 0xefec, 0xefed, 0xeff1, 0xc273, 0xc272, 0xeff0, 0xc378, 0xf25f, 0xf265, 0xc379, 0xf25c, 0xc376, 0xc373, 0xf267, 0xc377, 0x96ee, 0xc374, 0xf25e, 0xf261, 0xf262, 0xf263, 0xf266, 0xeff5, 0xf25d, 0xc375, 0xf264, 0xf268, 0xf260, 0x8df4, 0xf45d, 0xc46a, 0xf460, 0xc46b, 0xf468, 0xf45f, 0xf45c, 0xf45e, 0xf462, 0xf465, 0xf464, 0xf467, 0xf45b, 0xc469, 0xf463, 0xf466, 0xf469, 0xf461, 0xf5d3, 0xf5d4, 0xf5d8, 0xf5d9, 0xf5d6, 0xf5d7, 0xf5d5, 0xfde0, 0xc4e9, 0x8c67, 0x8df6, 0xc578, 0xf6eb, 0x8df7, 0xf6e8, 0xf6e9, 0xf6ea, 0xc579, 0xf7e5, 0xf7e4, 0x8ffa, 0xf8af, 0xc5f4, 0xf8ad, 0xf8b0, 0xf8ae, 0xf8f5, 0xc657, 0xc665, 0xf9a3, 0xf96c, 0x97d0, 0xf9a2, 0xf9d0, 0xf9d1, 0xa4f5, 0x8bd2, 0x8df8, 0xa6c7, 0xca41, 0xcb5e, 0x90d9, 0xa85f, 0x8c47, 0xa862, 0xfaf0, 0xcb5f, 0xa860, 0xa861, 0xfde1, 0x8df9, 0xfde3, 0xcd58, 0xcd5a, 0xcd55, 0xcd52, 0xcd54, 0x8dfa, 0xaaa4, 0xfb63, 0xaaa2, 0x90a6, 0xcd56, 0xaaa3, 0xcd53, 0xcd50, 0xaaa1, 0xcd57, 0xcd51, 0xaaa5, 0xcd59, 0xcfaf, 0x9970, 0xcfb3, 0x91eb, 0xacb7, 0x9770, 0x986f, 0xfde2, 0xcfb6, 0xacaf, 0xacb2, 0xacb4, 0xacb6, 0xacb3, 0xcfb2, 0xcfb1, 0xacb1, 0xcfb4, 0xcfb5, 0xcfae, 0xacb5, 0x98f2, 0xacb0, 0x9afc, 0x896c, 0xfdfd, 0xcfb0, 0x995e, 0x95bd, 0xd277, 0xd278, 0xd279, 0xaf50, 0xaf4c, 0xd26e, 0xfde4, 0xd276, 0xd27b, 0xaf51, 0x91e6, 0xd26c, 0xd272, 0xd26b, 0xd275, 0xfde5, 0xfde6, 0xd271, 0xaf4d, 0xaf4f, 0xd27a, 0xd26a, 0xd26d, 0xd273, 0xfde7, 0xd274, 0xd27c, 0xd270, 0xaf4e, 0xb26d, 0xd64e, 0x9454, 0xd650, 0xd64c, 0x99b8, 0xd658, 0xd64a, 0xd657, 0xb269, 0xd648, 0xda5b, 0xd652, 0xb26c, 0x97e9, 0xd653, 0xd656, 0xd65a, 0xd64f, 0x9346, 0xd654, 0xb26a, 0xb26b, 0xd659, 0xd64d, 0xd649, 0xd65b, 0xd651, 0xd655, 0xd64b, 0xb548, 0xb549, 0xda65, 0xb54f, 0x9863, 0xda59, 0xda62, 0xda58, 0xb54c, 0xda60, 0xda5e, 0xda5f, 0xb54a, 0xda63, 0x95bc, 0xfded, 0xfdf7, 0xda5c, 0xda5a, 0xb54b, 0xda5d, 0xda61, 0x9870, 0x96f6, 0x8ea9, 0xb54d, 0xda64, 0x9451, 0x8e43, 0x8b5a, 0xde70, 0xde77, 0xde79, 0xdea1, 0xfdee, 0xb7da, 0xde6b, 0xb7d2, 0xfdf0, 0xde7a, 0xb7d7, 0xdea2, 0xb7ce, 0xfdf4, 0xde7d, 0x9bf5, 0xde6d, 0xde7e, 0xde6c, 0xb7dc, 0xde78, 0xb7cf, 0xdea3, 0xb7d4, 0xde71, 0xb7d9, 0xde7c, 0xde6f, 0xde76, 0xde72, 0xde6e, 0xb7d1, 0xb7d8, 0xb7d6, 0xb7d3, 0xb7db, 0xb7d0, 0xde75, 0x977e, 0xb7d5, 0xb54e, 0xde7b, 0x9bd5, 0xde73, 0x9ac3, 0x97c8, 0xa0db, 0x91d0, 0xde74, 0x9fe4, 0xe2c1, 0x8fdd, 0xbab4, 0x91e9, 0xe2bd, 0xe2c3, 0xe2bf, 0xbab6, 0xe2be, 0xe2c2, 0xe2ba, 0x98e0, 0xe2bc, 0xbab5, 0x92ca, 0x9857, 0xe2c0, 0xe2bb, 0x8c51, 0xbab7, 0xbab2, 0xfdeb, 0xe2c4, 0x9b49, 0xbab3, 0xe667, 0xe664, 0xe670, 0xe66a, 0xe66c, 0xbcf4, 0xe666, 0xe66e, 0x9d76, 0x9eaf, 0xe66d, 0xe66b, 0xe671, 0xbcf7, 0xe668, 0xe66f, 0xbcf5, 0x9ccc, 0xe663, 0xe665, 0xbcf6, 0xe662, 0xe672, 0xfdea, 0xe669, 0x8df1, 0xea4a, 0xbf51, 0xfdfb, 0xea55, 0xea53, 0xbf4b, 0xea49, 0xea4c, 0xea4d, 0xea48, 0xbf55, 0xbf56, 0xea47, 0xea56, 0xea51, 0xbf4f, 0xbf4c, 0xea50, 0xea4e, 0xbf52, 0xea52, 0xbf4d, 0x8e53, 0xbf4e, 0xea4f, 0xbf50, 0xea4b, 0xea54, 0xbf53, 0xea57, 0xea58, 0xbf54, 0xfacf, 0xc0e7, 0xc0ee, 0xed5c, 0xed62, 0xed60, 0xc0ea, 0xc0e9, 0xc0e6, 0xed5e, 0x96f9, 0xc0ec, 0xc0eb, 0xc0e8, 0xed61, 0xed5d, 0xed5f, 0xc0ed, 0x98bf, 0x9e49, 0xc277, 0xeffb, 0xc274, 0xc275, 0xeffd, 0xc276, 0xeffa, 0x8ca7, 0xeff9, 0xf26c, 0xeffc, 0xf26d, 0xc37a, 0xf26b, 0x9bca, 0xf26a, 0xf269, 0xc37b, 0xfdfe, 0x92dc, 0xc46c, 0xf46a, 0xf46b, 0xfe41, 0x91cc, 0x91e2, 0xf5dc, 0xf5db, 0xc4ea, 0xf5da, 0xf6ec, 0xf6ed, 0xf7e6, 0xf8b1, 0xfe44, 0xf8f6, 0xf9bc, 0xc679, 0xf9c6, 0xa4f6, 0x8bd3, 0xaaa6, 0xaaa7, 0xfe47, 0xacb8, 0xc0ef, 0xa4f7, 0xaaa8, 0xaf52, 0xb7dd, 0xa4f8, 0xb26e, 0xbab8, 0xc962, 0xfe48, 0xcfb7, 0xd27d, 0xe2c5, 0xc0f0, 0xa4f9, 0xaaa9, 0xcfb8, 0xcfb9, 0xda66, 0xb550, 0xdea4, 0x9455, 0xb7de, 0xe2c6, 0xfe4b, 0xbcf8, 0xfe4c, 0xc37c, 0xa4fa, 0xda67, 0xa4fb, 0x8dbf, 0xa6c9, 0xca42, 0xa6c8, 0xa865, 0xa864, 0xa863, 0xcb60, 0x9e78, 0xaaaa, 0xaaab, 0xcd5b, 0xcfba, 0xcfbd, 0xacba, 0xcfbb, 0xacb9, 0xcfbc, 0xacbb, 0xd2a2, 0xd2a1, 0xd27e, 0xaf53, 0xd65d, 0xd65e, 0xb26f, 0xd65c, 0xd65f, 0xb552, 0xb270, 0xfe51, 0xb551, 0xda6b, 0xda6a, 0x9456, 0xda68, 0xda69, 0xda6c, 0xdea6, 0xdea5, 0xdea9, 0x9d61, 0xdea8, 0xdea7, 0xbab9, 0xe2c9, 0x9457, 0xe2c8, 0xbaba, 0xe2c7, 0xe673, 0xe674, 0xbcf9, 0xea59, 0xea5a, 0x9966, 0xf272, 0xc37d, 0xf271, 0xf270, 0xf26e, 0xf26f, 0xc4eb, 0xf46c, 0xf6ee, 0xf8f7, 0xa4fc, 0x8bd5, 0xc9a5, 0xa5c7, 0xc9a6, 0xa069, 0xca43, 0xca44, 0xcb66, 0xcb62, 0xcb61, 0xaaac, 0xcb65, 0xa867, 0xcb63, 0xa866, 0xcb67, 0xcb64, 0xcd5f, 0xcfbe, 0xcd5d, 0xcd64, 0x98b4, 0xaaad, 0xaab0, 0xcd65, 0xcd61, 0xcd62, 0xcd5c, 0xaaaf, 0xcd5e, 0xaaae, 0xcd63, 0xcd60, 0xcfc2, 0xacbd, 0xacbe, 0xa049, 0xcfc5, 0xcfbf, 0xcfc4, 0xcfc0, 0xacbc, 0xcfc3, 0xcfc1, 0xd2a8, 0xd2a5, 0xd2a7, 0xaf58, 0xaf57, 0xaf55, 0xd2a4, 0xd2a9, 0xaf54, 0xaf56, 0xd2a6, 0xd667, 0xd2a3, 0xd2aa, 0xa04c, 0x9e65, 0xd662, 0xd666, 0xd665, 0xda6e, 0xda79, 0xd668, 0x98b5, 0xd663, 0xda6d, 0xb274, 0xb273, 0xd661, 0xd664, 0xb275, 0xb272, 0xb271, 0xd660, 0xd669, 0xda70, 0xda77, 0xb554, 0xda76, 0xda73, 0xfe58, 0xb556, 0x9975, 0xfe53, 0xa065, 0xda75, 0xfe59, 0xda6f, 0xda71, 0xda74, 0xda72, 0xb555, 0xda78, 0xb553, 0xb7df, 0x98b7, 0x98b8, 0xdead, 0xdeac, 0xdeaa, 0xb7e2, 0xb7e1, 0xdeae, 0x98ba, 0xdeab, 0xe2ca, 0xbabb, 0xb7e0, 0x98bb, 0xdeb0, 0xdeaf, 0xe2cd, 0xe2cb, 0xbcfa, 0x9fbc, 0xbabc, 0xe2cc, 0xe676, 0xbcfb, 0xe675, 0xe67e, 0xe67d, 0xe67b, 0xe67a, 0xe677, 0xe678, 0xe679, 0xe67c, 0xe6a1, 0xea5f, 0xea5c, 0xea5d, 0xbf57, 0xea5b, 0xea61, 0xea60, 0xea5e, 0xed64, 0xed65, 0xc0f1, 0xa04a, 0xc0f2, 0xed63, 0x9ec7, 0xc279, 0xeffe, 0xc278, 0xc37e, 0xc3a1, 0xc46d, 0xf46e, 0xf46d, 0xf5dd, 0xf6ef, 0xc57a, 0xf7e8, 0xf7e7, 0xf7e9, 0xa5c8, 0xcfc6, 0xaf59, 0xb276, 0xd66a, 0xa5c9, 0xc9a7, 0xa4fd, 0x8ca9, 0xca45, 0x98ae, 0xcb6c, 0xcb6a, 0xcb6b, 0xcb68, 0xa868, 0xcb69, 0x92d6, 0xfae1, 0xcd6d, 0x91d4, 0xaab3, 0xcd6b, 0xcd67, 0xcd6a, 0xcd66, 0xaab5, 0xcd69, 0xfade, 0xaab2, 0xaab1, 0xfe5b, 0xaab4, 0xcd6c, 0xcd68, 0xacc2, 0xacc5, 0xcfce, 0xcfcd, 0xcfcc, 0xacbf, 0xcfd5, 0xcfcb, 0x8c53, 0xacc1, 0xd2af, 0xcfd2, 0xcfd0, 0xacc4, 0xcfc8, 0xcfd3, 0xcfca, 0xcfd4, 0xcfd1, 0xcfc9, 0xfe5e, 0xacc0, 0xcfd6, 0xcfc7, 0xacc3, 0xfbd7, 0xfe5a, 0x94c5, 0xd2b4, 0xd2ab, 0xd2b6, 0xfaca, 0xd2ae, 0xd2b9, 0xd2ba, 0xd2ac, 0xd2b8, 0xd2b5, 0xd2b3, 0xd2b7, 0xaf5f, 0xaf5d, 0x98c1, 0x975c, 0xd2b1, 0xfe74, 0xd2ad, 0x9773, 0xd2b0, 0xd2bb, 0xd2b2, 0xaf5e, 0xcfcf, 0xaf5a, 0xaf5c, 0xfa46, 0x9764, 0xd678, 0xd66d, 0xd66b, 0xfe68, 0xd66c, 0x964e, 0xd673, 0x9765, 0xd674, 0xd670, 0xb27b, 0xd675, 0xd672, 0xd66f, 0x8c5a, 0xb279, 0xd66e, 0xb277, 0xb27a, 0xd671, 0xd679, 0xaf5b, 0xb278, 0xd677, 0xd676, 0xb27c, 0x89a1, 0x95fa, 0x92d4, 0xfe69, 0xda7e, 0xfb45, 0x98c8, 0xdaa1, 0xb560, 0x90ef, 0xdaa7, 0x98c9, 0x98ca, 0xdaa9, 0xdaa2, 0xb55a, 0xdaa6, 0xdaa5, 0xb55b, 0xb561, 0xb562, 0xdaa8, 0xb558, 0xda7d, 0xda7b, 0xdaa3, 0xda7a, 0xb55f, 0xda7c, 0xdaa4, 0xdaaa, 0xb559, 0xb55e, 0xb55c, 0xb55d, 0x946d, 0x94b7, 0xfe6c, 0xb557, 0x946b, 0xb7e9, 0xdeb7, 0xb7e8, 0xdebb, 0x92fc, 0xdeb1, 0x95eb, 0xdebc, 0xfe73, 0x976e, 0xfe5f, 0xdeb2, 0xdeb3, 0xdebd, 0xdeba, 0xdeb8, 0xdeb9, 0xdeb5, 0xdeb4, 0xfdbd, 0xdebe, 0xb7e5, 0x92d5, 0xdeb6, 0xb7ea, 0xb7e4, 0xb7eb, 0xb7ec, 0xfeb9, 0xb7e7, 0xb7e6, 0xfe71, 0xe2ce, 0xbabe, 0xbabd, 0xfbbb, 0xe2d3, 0x947a, 0xbcfc, 0xbabf, 0x95fb, 0xfe77, 0xbac1, 0xe2d4, 0xb7e3, 0xbac0, 0xe2d0, 0xe2d2, 0xe2cf, 0xfe79, 0xe2d1, 0xfe75, 0xe6ab, 0x945d, 0xe6aa, 0xe6a7, 0xbd40, 0xea62, 0xbd41, 0xe6a6, 0xfe7c, 0xbcfe, 0xe6a8, 0xe6a5, 0xe6a2, 0xe6a9, 0xe6a3, 0xe6a4, 0xbcfd, 0x9344, 0x8ea6, 0xed69, 0xea66, 0xea65, 0xea67, 0xed66, 0xbf5a, 0x92d3, 0xea63, 0x94b8, 0xbf58, 0xbf5c, 0xbf5b, 0xea64, 0xea68, 0xbf59, 0xfc71, 0xed6d, 0xc0f5, 0xc27a, 0xc0f6, 0xc0f3, 0xed6a, 0xed68, 0xed6b, 0xed6e, 0xc0f4, 0xed6c, 0xed67, 0x975e, 0xf042, 0xf045, 0xf275, 0xf040, 0x8cad, 0xf46f, 0xf046, 0xc3a2, 0xf044, 0xc27b, 0xf041, 0xf043, 0xf047, 0xf276, 0xf274, 0xfea7, 0xc3a3, 0xf273, 0x946a, 0xc46e, 0x93e3, 0x98cf, 0xc4ed, 0xf6f1, 0xc4ec, 0xf6f3, 0xf6f0, 0xf6f2, 0xc5d0, 0xf8b2, 0xa5ca, 0xcd6e, 0xd2bc, 0xd2bd, 0xb27d, 0xdebf, 0xbf5d, 0xc3a4, 0xc57b, 0xf8b3, 0xa5cb, 0xa0d9, 0xcd6f, 0xa260, 0xcfd7, 0xcfd8, 0xa0bf, 0xa04d, 0xa0b8, 0xd2be, 0xd2bf, 0xb27e, 0xb2a1, 0xa0ce, 0xdaab, 0xdec2, 0xdec1, 0xdec0, 0xe2d5, 0xe2d6, 0xe2d7, 0xbac2, 0xa0b7, 0xe6ad, 0xe6ac, 0xea69, 0xbf5e, 0xbf5f, 0xfea9, 0xed72, 0xed6f, 0xed70, 0xed71, 0xf049, 0xf048, 0xc27c, 0xf277, 0xf5de, 0xa5cc, 0x89c3, 0xacc6, 0xb2a2, 0xdec3, 0xfeab, 0xa5cd, 0xd2c0, 0xb2a3, 0xb563, 0xb564, 0xa5ce, 0xa5cf, 0xca46, 0xa86a, 0xa869, 0xacc7, 0xcfd9, 0xdaac, 0xa5d0, 0xa5d1, 0xa5d2, 0xa5d3, 0x9df4, 0x896d, 0xa86b, 0xa86c, 0xcb6e, 0xcb6d, 0x9c7b, 0xaab6, 0xcd72, 0xcd70, 0xcd71, 0x98d2, 0x9fa9, 0xcfda, 0xcfdb, 0xfeb2, 0xaccb, 0xacc9, 0xfeb1, 0xacca, 0xacc8, 0x97d9, 0xa0c4, 0xaf60, 0x9476, 0xaf64, 0xaf63, 0xd2c1, 0xaf62, 0xaf61, 0xd2c2, 0x9978, 0xb2a6, 0xd67b, 0xd67a, 0xb2a4, 0xb2a5, 0xfeb3, 0xb566, 0xb565, 0xdaae, 0x98d3, 0xfeb4, 0xdaad, 0xb2a7, 0x98d4, 0xb7ed, 0xdec5, 0xb7ee, 0xdec4, 0x9fb9, 0xe2d8, 0xe6ae, 0xbd42, 0xea6a, 0x9471, 0xed73, 0xc3a6, 0xc3a5, 0xc57c, 0xa5d4, 0xcd73, 0x98d5, 0xfeb8, 0xb2a8, 0xe2d9, 0xbac3, 0xc6d4, 0xcb6f, 0xcb70, 0xcd74, 0xaab8, 0xaab9, 0xaab7, 0xfeba, 0xaccf, 0xacd0, 0xaccd, 0xacce, 0xcfdc, 0xcfdd, 0xaccc, 0xd2c3, 0x9e5c, 0xaf68, 0xaf69, 0xfebb, 0xb2ab, 0xd2c9, 0xaf6e, 0xaf6c, 0xd2ca, 0xd2c5, 0xaf6b, 0xaf6a, 0xaf65, 0xd2c8, 0xd2c7, 0xd2c4, 0xaf6d, 0xa044, 0xd2c6, 0xaf66, 0xaf67, 0x98d7, 0xb2ac, 0xd6a1, 0xd6a2, 0xb2ad, 0xd67c, 0xd67e, 0xd6a4, 0xd6a3, 0xd67d, 0xb2a9, 0xb2aa, 0xdab6, 0xb56b, 0xb56a, 0xdab0, 0xb568, 0x98d8, 0xdab3, 0xb56c, 0xdab4, 0xb56d, 0xdab1, 0xb567, 0xb569, 0xdab5, 0xdab2, 0xdaaf, 0xded2, 0xdec7, 0xb7f0, 0xb7f3, 0xb7f2, 0xb7f7, 0xb7f6, 0xded3, 0xded1, 0xdeca, 0xdece, 0xdecd, 0xb7f4, 0xded0, 0xdecc, 0xded4, 0xdecb, 0xb7f5, 0xb7ef, 0xb7f1, 0xfebc, 0xdec9, 0x9ffe, 0xe2db, 0xbac7, 0xe2df, 0xbac6, 0xe2dc, 0xbac5, 0xdec8, 0xdecf, 0xe2de, 0xbac8, 0xe2e0, 0xe2dd, 0xe2da, 0xe6b1, 0xe6b5, 0xe6b7, 0xe6b3, 0xe6b2, 0xe6b0, 0xbd45, 0xbd43, 0xbd48, 0xbd49, 0xe6b4, 0xbd46, 0xe6af, 0xbd47, 0xbac4, 0xe6b6, 0xbd44, 0xfebd, 0xea6c, 0xea6b, 0xea73, 0xea6d, 0xea72, 0xea6f, 0xbf60, 0xea71, 0xbf61, 0xbf62, 0x9ddd, 0xea70, 0xea6e, 0x9ee1, 0xc0f8, 0xed74, 0xc0f7, 0xed77, 0xed75, 0xed76, 0xc0f9, 0x98da, 0x9ddf, 0xfebf, 0xf04d, 0xfebe, 0xc2a1, 0xf04e, 0x9eeb, 0xc27d, 0xf04f, 0xc27e, 0xf04c, 0xf050, 0xf04a, 0xc3a7, 0xf278, 0xc3a8, 0xc46f, 0xf04b, 0xc470, 0x9e59, 0xa05c, 0xc4ee, 0xf5df, 0xc57e, 0xf6f4, 0xc57d, 0xfec0, 0xf7ea, 0xc5f5, 0xc5f6, 0x9477, 0x98dc, 0xf9cc, 0xfec1, 0xacd1, 0xcfde, 0x98de, 0xb56e, 0xb56f, 0xa5d5, 0xa6ca, 0xca47, 0xcb71, 0xa86d, 0xaaba, 0xacd2, 0xacd3, 0xacd4, 0xd6a6, 0xd2cb, 0xaf6f, 0xb2ae, 0xd6a5, 0xfec3, 0xdab8, 0xb571, 0xdab7, 0xb570, 0xded5, 0xbd4a, 0xe6bb, 0xe6b8, 0xe6b9, 0xe6ba, 0xfec8, 0xed78, 0xfec9, 0xf051, 0xf471, 0xf470, 0xf6f5, 0xa5d6, 0xcd75, 0xaf70, 0xb572, 0xded6, 0xfeca, 0xe2e1, 0xbd4b, 0xea74, 0xf052, 0xf472, 0xa5d7, 0xaabb, 0xacd7, 0xcfdf, 0xacd8, 0xacd6, 0xacd5, 0xd2cc, 0xaf71, 0xfecb, 0xaf72, 0xaf73, 0xb2b0, 0xd6a7, 0xb2af, 0x9fc2, 0x8c6b, 0xdab9, 0xb2b1, 0xb573, 0xded7, 0xb7f8, 0xb7f9, 0xbac9, 0xbaca, 0xbd4c, 0xbf64, 0xea75, 0xbf63, 0xed79, 0xc0fa, 0xf053, 0xf473, 0xa5d8, 0xa86e, 0xcd78, 0xcd77, 0xaabc, 0xcd76, 0xaabd, 0xcd79, 0xcfe5, 0xacdb, 0xacda, 0xcfe7, 0xcfe6, 0xacdf, 0xacde, 0xacd9, 0xcfe1, 0xcfe2, 0xcfe3, 0xace0, 0xcfe0, 0xacdc, 0xcfe4, 0xacdd, 0x98c4, 0x94b0, 0x94b1, 0xd2cf, 0xd2d3, 0xd2d1, 0xd2d0, 0xd2d4, 0xd2d5, 0xd2d6, 0xd2ce, 0xd2cd, 0xfed1, 0xaf75, 0xaf76, 0xd2d7, 0xd2d2, 0xa0c1, 0xd6b0, 0xfed2, 0xd2d8, 0xaf77, 0xaf74, 0xa0cd, 0xd6aa, 0xd6a9, 0xd6ab, 0xd6ac, 0xd6ae, 0xd6ad, 0xd6b2, 0xb2b5, 0xb2b2, 0xb2b6, 0xd6a8, 0xb2b7, 0xd6b1, 0xb2b4, 0xd6af, 0xb2b3, 0xfed3, 0x98e5, 0xdabc, 0xdabe, 0xdaba, 0xdabb, 0xdabf, 0xdac1, 0xdac2, 0xdabd, 0xdac0, 0xb574, 0xdedb, 0xdee0, 0xded8, 0xdedc, 0xfed6, 0xdee1, 0xdedd, 0xb7fa, 0xb843, 0xb7fd, 0xded9, 0xdeda, 0xbace, 0xb846, 0xb7fe, 0xb844, 0xb7fc, 0xdedf, 0xb845, 0xdede, 0xb841, 0xb7fb, 0xb842, 0xdee2, 0xe2e6, 0xe2e8, 0x91e4, 0x8fc7, 0x94ae, 0xb840, 0x8a4f, 0x94b2, 0xe2e3, 0xbacc, 0xe2e9, 0xbacd, 0xe2e7, 0xe2e2, 0xe2e5, 0xe2ea, 0xbacb, 0xe2e4, 0xbd4e, 0xe6bf, 0xe6be, 0xbd51, 0xbd4f, 0xe6bc, 0xbd4d, 0xe6bd, 0xbd50, 0x8fd4, 0xea7d, 0xeaa1, 0x98ea, 0xea7e, 0xea76, 0xea7a, 0xea79, 0xea77, 0xbf66, 0xbf67, 0xbf65, 0xea78, 0xea7b, 0xea7c, 0xbf68, 0xc140, 0xeda3, 0xc0fc, 0xed7b, 0xc0fe, 0xc141, 0xfed8, 0xc0fd, 0xeda2, 0xed7c, 0xc0fb, 0xeda1, 0xed7a, 0xed7e, 0xed7d, 0x9de0, 0xf055, 0xc2a4, 0xc2a5, 0xc2a2, 0x98ee, 0xc2a3, 0xf054, 0x95c4, 0xf27b, 0xfce8, 0xc3a9, 0xf279, 0xf27a, 0x98ef, 0xf474, 0xf477, 0xf475, 0xf476, 0xf5e0, 0xc4ef, 0xf7eb, 0xf8b4, 0xc5f7, 0xf8f8, 0xf8f9, 0xc666, 0xa5d9, 0xace1, 0x8c6e, 0xdac3, 0xdee3, 0xa5da, 0xa86f, 0xaabe, 0xfad8, 0xcfe8, 0xcfe9, 0xaf78, 0xdac4, 0xb575, 0xb847, 0xc142, 0xeda4, 0xf27c, 0xf478, 0xa5db, 0xfedc, 0xcda1, 0xcd7a, 0xcd7c, 0xcd7e, 0xcd7d, 0xcd7b, 0xaabf, 0xa0ae, 0xace2, 0xcff2, 0xcfed, 0xcfea, 0x9d4c, 0xcff1, 0xace4, 0xace5, 0xcff0, 0xcfef, 0xcfee, 0xcfeb, 0xcfec, 0xcff3, 0xace3, 0x98f1, 0x98f3, 0xaf7c, 0x94c1, 0xafa4, 0xafa3, 0xd2e1, 0xd2db, 0xd2d9, 0xafa1, 0xd6b9, 0xaf7a, 0xd2de, 0xd2e2, 0xd2e4, 0xd2e0, 0xd2da, 0xafa2, 0xd2df, 0xd2dd, 0xaf79, 0xd2e5, 0xafa5, 0xd2e3, 0xaf7d, 0xd2dc, 0xaf7e, 0xaf7b, 0x98f5, 0xfa4f, 0x96e2, 0x9450, 0xb2b9, 0x96a2, 0xd6ba, 0x98f6, 0xd6b3, 0xd6b5, 0xd6b7, 0x96e5, 0xd6b8, 0xd6b6, 0xb2ba, 0xd6bb, 0x98f7, 0xd6b4, 0xa046, 0x96e3, 0xdac8, 0xb576, 0xdad0, 0xdac5, 0xdad1, 0xdac6, 0xdac7, 0x98f8, 0xdacf, 0xdace, 0xdacb, 0xb2b8, 0xb577, 0xdac9, 0xdacc, 0xb578, 0xdacd, 0xdaca, 0xdeee, 0x9ee4, 0xdef2, 0xb84e, 0xe2f0, 0xb851, 0xdef0, 0xf9d6, 0xdeed, 0xdee8, 0xdeea, 0xdeeb, 0xdee4, 0x94c3, 0xb84d, 0xb84c, 0x94c2, 0xb848, 0xdee7, 0xb84f, 0xb850, 0xdee6, 0xdee9, 0xdef1, 0xb84a, 0xb84b, 0xdeef, 0xdee5, 0xe2f2, 0xbad0, 0xe2f4, 0xdeec, 0xe2f6, 0xbad4, 0xe2f7, 0xe2f3, 0xbad1, 0xe2ef, 0xbad3, 0xe2ec, 0xe2f1, 0xe2f5, 0xe2ee, 0xfee1, 0xb849, 0xfee9, 0xe2eb, 0xbad2, 0xe2ed, 0x96e4, 0x89ac, 0x96db, 0xbd54, 0xe6c1, 0xbd58, 0xbd56, 0xbacf, 0xe6c8, 0xe6c9, 0xbd53, 0xfee2, 0xe6c7, 0xe6ca, 0xbd55, 0xbd52, 0xe6c3, 0xe6c0, 0xe6c5, 0xe6c2, 0xbd59, 0xe6c4, 0x94c4, 0xfee3, 0xe6c6, 0xbd57, 0xfee7, 0x9ffb, 0xbf6a, 0xeaa8, 0xeaa2, 0xeaa6, 0xeaac, 0xeaad, 0xeaa9, 0xeaaa, 0xeaa7, 0x8c59, 0xeaa4, 0xbf6c, 0xbf69, 0xeaa3, 0xeaa5, 0xbf6b, 0xeaab, 0x93c9, 0xc146, 0x94e8, 0xfb56, 0xedaa, 0xeda5, 0xc145, 0x90c5, 0xc143, 0xedac, 0xc144, 0xeda8, 0xeda9, 0xeda6, 0xedad, 0xf056, 0xc147, 0xeda7, 0xedae, 0xedab, 0xa0a8, 0xf05a, 0xf057, 0xc2a6, 0xf05b, 0xf05d, 0xf05c, 0xf058, 0xf059, 0xf2a3, 0xc3aa, 0xf27e, 0xf2a2, 0xf27d, 0xf2a4, 0xf2a1, 0xf47a, 0xf47d, 0xf479, 0xc471, 0xf47b, 0xf47c, 0xf47e, 0xc472, 0xc474, 0xc473, 0xf5e1, 0xfee5, 0xf5e3, 0xf5e2, 0x98fd, 0x98fb, 0xfee8, 0xf6f6, 0x8ebf, 0xf8b5, 0xf8fa, 0xa5dc, 0x8bd8, 0xfef7, 0xcb72, 0xaac0, 0xcda3, 0xaac1, 0xaac2, 0xcda2, 0xcff8, 0xcff7, 0xace6, 0xace9, 0xace8, 0xace7, 0xcff4, 0xcff6, 0xcff5, 0xd2e8, 0xafa7, 0xd2ec, 0xd2eb, 0xd2ea, 0xd2e6, 0xafa6, 0xafaa, 0xafad, 0x8f68, 0x94c6, 0xafae, 0xd2e7, 0xd2e9, 0xafac, 0xafab, 0xafa9, 0xafa8, 0xd6c2, 0x9dea, 0xd6c0, 0xd6bc, 0xb2bb, 0xd6bd, 0xb2bc, 0xd6be, 0xd6bf, 0xd6c1, 0xb2bd, 0xdad5, 0xfc69, 0xdad4, 0xdad3, 0xdad2, 0xdef6, 0xb852, 0xdef3, 0xdef5, 0x9cda, 0xb853, 0xfef3, 0xb854, 0xdef4, 0x9c72, 0xfef0, 0x89c9, 0xe341, 0xe2f9, 0xe2fa, 0xbad7, 0xbad5, 0xbad6, 0xe343, 0x9941, 0xe342, 0xe2fe, 0xe2fd, 0xe2fc, 0xe2fb, 0xe340, 0xe2f8, 0x9942, 0xe6cb, 0xe6d0, 0xe6ce, 0xfef5, 0x91d7, 0xe6cd, 0xe6cc, 0xe6cf, 0xeaae, 0x94cc, 0xbf6d, 0xc148, 0xedb0, 0xfef8, 0xc149, 0xedaf, 0xf05f, 0xf05e, 0xc2a7, 0xf2a5, 0xc3ab, 0xf4a1, 0xc5a1, 0xf6f7, 0xf8b7, 0xf8b6, 0xc9a8, 0xacea, 0xaceb, 0xd6c3, 0xb856, 0xa5dd, 0xa872, 0xa871, 0xa870, 0x97a8, 0xcda4, 0xfefc, 0xaac4, 0xaac3, 0xacee, 0xfdbf, 0xcffa, 0xcffd, 0xcffb, 0xacec, 0xaced, 0xfefe, 0xcff9, 0xcffc, 0xafb5, 0xd2f3, 0xd2f5, 0xd2f4, 0xafb2, 0xd2ef, 0x96d1, 0xafb0, 0xafaf, 0xafb3, 0xafb1, 0xafb4, 0xd2f2, 0xd2ed, 0xd2ee, 0xd2f1, 0xd2f0, 0x94d5, 0x94d0, 0xd6c6, 0xd6c7, 0xd6c5, 0xd6c4, 0xb2be, 0xb57d, 0xdad6, 0xdad8, 0xdada, 0xb57c, 0x9944, 0xb57a, 0xdad7, 0xb57b, 0xdad9, 0xb579, 0xdf41, 0xdef7, 0xdefa, 0xdefe, 0xb85a, 0xdefc, 0xdefb, 0xdef8, 0xdef9, 0xb858, 0xdf40, 0xb857, 0xb85c, 0xb85b, 0xb859, 0xdefd, 0xe349, 0xe348, 0x8c63, 0xe344, 0xa0b3, 0xbad8, 0xe347, 0xe346, 0xbad9, 0xbd5e, 0xe6d2, 0x94cf, 0xbd5f, 0xbd5b, 0xbd5d, 0x9ffa, 0xbd5a, 0xbd5c, 0x91e5, 0xeaaf, 0x9c6a, 0xbf70, 0xeab1, 0xeab0, 0x8e49, 0xe345, 0xbf72, 0xbf71, 0xbf6e, 0xbf6f, 0xedb5, 0xedb3, 0xc14a, 0xedb4, 0xedb6, 0xedb2, 0xedb1, 0xf060, 0xc2aa, 0xc2a8, 0xc2a9, 0x8e4c, 0xf2a6, 0xf2a7, 0xc3ad, 0xc3ac, 0xf4a3, 0xf4a4, 0xf4a2, 0xf6f8, 0xf6f9, 0xa5de, 0xca48, 0xa873, 0xcda5, 0xaac6, 0xaac5, 0xcda6, 0x8e4d, 0xd040, 0xacef, 0xcffe, 0xacf0, 0x9a73, 0xafb6, 0xd2f8, 0xd2f6, 0xd2fc, 0xafb7, 0xd2f7, 0xd2fb, 0xd2f9, 0xd2fa, 0xd6c8, 0xd6ca, 0x9947, 0xb2bf, 0x8cb1, 0xd6c9, 0xb2c0, 0xb5a2, 0xb5a1, 0xb57e, 0xdadb, 0xdf44, 0xb85d, 0xb85e, 0xdf43, 0xdf42, 0xe34a, 0xbadb, 0xbada, 0xe34b, 0xe34c, 0xbd61, 0xbd60, 0x8e50, 0xeab5, 0xe6d3, 0xe6d5, 0xe6d4, 0xeab4, 0xeab2, 0xeab6, 0xeab3, 0xbf73, 0x8e4f, 0x9949, 0xedb7, 0xc14b, 0xedb8, 0xedb9, 0x8e51, 0x8e52, 0xc2ab, 0xc2ac, 0xc475, 0x9ab2, 0x89a5, 0xc5d1, 0xa5df, 0x994c, 0xd041, 0x9ff8, 0xd2fd, 0xafb8, 0x8e56, 0x994d, 0x91ca, 0x8e57, 0xb3ba, 0xb3b9, 0x94e1, 0xb5a4, 0xdadd, 0xb5a3, 0xdadc, 0x9047, 0x8fd8, 0x8e58, 0xdf45, 0xbadc, 0xe34d, 0xbadd, 0xc476, 0xf4a5, 0xa6cb, 0xaac7, 0xcda7, 0xacf2, 0x94eb, 0xacf1, 0xd042, 0xd043, 0xd340, 0xd342, 0xafb9, 0xd344, 0xd347, 0xd345, 0x8e5c, 0x9553, 0xd346, 0xd343, 0xd2fe, 0xafba, 0xd348, 0xd341, 0x9fe5, 0xd6d3, 0xb2c6, 0xd6dc, 0xb2c3, 0xd6d5, 0xb2c7, 0x9f56, 0xb2c1, 0xd6d0, 0xd6dd, 0xd6d1, 0xd6ce, 0xb2c5, 0x954f, 0xb2c2, 0x8e5e, 0xd6d4, 0xd6d7, 0xb2c4, 0xd6d8, 0xb2c8, 0xd6d9, 0xd6cf, 0xd6d6, 0xd6da, 0xd6d2, 0xd6cd, 0xd6cb, 0xd6db, 0x996a, 0xdadf, 0xdae4, 0x9c64, 0x9cd9, 0xdae0, 0xdae6, 0xb5a7, 0xd6cc, 0xdae1, 0xb5a5, 0xdade, 0xb5ac, 0xdae2, 0xb5ab, 0xdae3, 0xb5ad, 0xb5a8, 0xb5ae, 0xb5a9, 0xb5aa, 0x8e5d, 0xb5a6, 0xdae5, 0xb861, 0xdf50, 0x9950, 0xdf53, 0xdf47, 0xdf4c, 0xdf46, 0xb863, 0xdf4a, 0x9951, 0xdf48, 0xb862, 0x8e62, 0xdf4f, 0xdf4e, 0xdf4b, 0xdf4d, 0xdf49, 0xbae1, 0xdf52, 0xb85f, 0xdf51, 0x9952, 0xe35d, 0xbae8, 0xe358, 0xbae7, 0xe34e, 0xe350, 0xbae0, 0xe355, 0xe354, 0xe357, 0xbae5, 0xe352, 0xe351, 0x8e68, 0xbae4, 0xbadf, 0xe353, 0xbae2, 0xe359, 0xe35b, 0xe356, 0xe34f, 0xbae3, 0xbd69, 0xbade, 0x8e61, 0x9f59, 0xe35c, 0xe6d9, 0xbd62, 0xe6db, 0xbd63, 0x8bb3, 0xbd65, 0xe6de, 0xe6d6, 0xbae6, 0xe6dc, 0xe6d8, 0xb860, 0xbd68, 0xbd64, 0xbd66, 0xbd67, 0xbf76, 0xe6dd, 0xe6d7, 0xbd6a, 0xe6da, 0x9f5d, 0x8e66, 0xeac0, 0xeabb, 0xeac5, 0xbf74, 0xeabd, 0xbf78, 0xeac3, 0xeaba, 0xeab7, 0xeac6, 0xc151, 0xbf79, 0xeac2, 0xeab8, 0xbf77, 0xeabc, 0xbf7b, 0xeab9, 0xeabe, 0xbf7a, 0xeac1, 0xeac4, 0x8cb2, 0xedcb, 0xedcc, 0xedbc, 0xedc3, 0xedc1, 0xc14f, 0xedc8, 0xeabf, 0x8e6e, 0xedbf, 0x9f64, 0xedc9, 0xc14e, 0xedbe, 0xedbd, 0xedc7, 0xedc4, 0xedc6, 0xedba, 0xedca, 0xc14c, 0xedc5, 0xedce, 0xedc2, 0xc150, 0xc14d, 0xedc0, 0xedbb, 0xedcd, 0xbf75, 0x9953, 0xfab8, 0xf063, 0x9954, 0xf061, 0xf067, 0xc2b0, 0xf065, 0xf064, 0xc2b2, 0xf06a, 0xc2b1, 0xf06b, 0xf068, 0xc2ae, 0xf069, 0xf062, 0xc2af, 0xc2ad, 0xf2ab, 0xf066, 0xf06c, 0xf2a8, 0x8e70, 0xc3b2, 0xc3b0, 0xf2aa, 0xf2ac, 0xf2a9, 0xc3b1, 0xc3ae, 0xc3af, 0xc3b3, 0x9f61, 0xc478, 0x8e72, 0xf4aa, 0xf4a9, 0xf4a7, 0xf4a6, 0xf4a8, 0xc477, 0xc479, 0xc4f0, 0xa06b, 0xf5e5, 0xf5e4, 0x9f40, 0xf6fa, 0xf6fc, 0xf6fe, 0xf6fd, 0xf6fb, 0x94ed, 0xc5a3, 0xc5a2, 0xc5d3, 0xc5d2, 0xc5d4, 0xf7ed, 0xf7ec, 0xf8fb, 0xf8b8, 0xf8fc, 0xc658, 0x94ee, 0xc659, 0xf96d, 0x9fbd, 0xc67e, 0xa6cc, 0x8e7b, 0xcda8, 0xd045, 0xd046, 0xd044, 0x9957, 0x94f7, 0xacf3, 0x9f5f, 0xd047, 0xd048, 0xd049, 0x8e73, 0xd349, 0xd34f, 0x9f62, 0xd34d, 0xafbb, 0xd34b, 0xd34c, 0xd34e, 0x94f6, 0xd34a, 0xb2c9, 0xd6de, 0xb2cb, 0xd6e0, 0xb2ca, 0xd6df, 0x9958, 0xdae8, 0xb5af, 0xdaea, 0xdae7, 0xd6e1, 0xb5b0, 0x8e75, 0xf9db, 0xdae9, 0x9072, 0x94f8, 0xdf56, 0xb864, 0xdf54, 0xb865, 0xdf55, 0xb866, 0x995a, 0xbae9, 0xe361, 0xe35e, 0xe360, 0xbaea, 0xbaeb, 0xe35f, 0xa0b0, 0x8cb3, 0xe6df, 0x8e79, 0xe6e0, 0x8e78, 0xbd6b, 0xe6e2, 0xe6e1, 0x94f3, 0xa261, 0xeaca, 0xeacb, 0xeac7, 0x98af, 0xeac8, 0xbf7c, 0xbf7d, 0xeac9, 0xc157, 0xa0b2, 0xc153, 0xc158, 0xc154, 0xc156, 0xc152, 0xc155, 0x8e7a, 0xc2b3, 0xedcf, 0xf2ae, 0xf2ad, 0x995c, 0xf4ab, 0xc47a, 0xc47b, 0xf741, 0xf5e6, 0x8e7c, 0xf740, 0x8e7d, 0xf8fd, 0xf9a4, 0xa6cd, 0x8bd9, 0xa874, 0x89a2, 0xcda9, 0xaac8, 0xacf6, 0xd04c, 0xacf4, 0xd04a, 0xacf9, 0xacf5, 0xacfa, 0xacf8, 0xd04b, 0xacf7, 0xafbf, 0xafbe, 0xd35a, 0xafc7, 0xd353, 0xd359, 0xafc3, 0xd352, 0xd358, 0xd356, 0xafc2, 0xafc4, 0xd355, 0xafbd, 0xd354, 0xafc8, 0xafc5, 0xafc9, 0xafc6, 0xd351, 0xd350, 0xd357, 0xafc0, 0xafbc, 0xafc1, 0x9ed7, 0xd6f0, 0xd6e9, 0xb5b5, 0xd6e8, 0xb2cf, 0xb2d6, 0xb2d3, 0xb2d9, 0xb2d8, 0xb2d4, 0xd6e2, 0xd6e5, 0xd6e4, 0xb2d0, 0xd6e6, 0xd6ef, 0xb2d1, 0xd6e3, 0xd6ec, 0xd6ed, 0xb2d2, 0xd6ea, 0xb2d7, 0xb2cd, 0xb2d5, 0xd6e7, 0xb2cc, 0xd6eb, 0xd6ee, 0xa0b6, 0xdafb, 0xdaf2, 0xb5b2, 0xdaf9, 0xdaf6, 0xdaee, 0xdaf7, 0xb5b4, 0xdaef, 0xdaeb, 0x9e42, 0xb86c, 0xdaf4, 0x8ea4, 0xb5b1, 0xdafa, 0xb5b8, 0xb5ba, 0xdaed, 0xb5b9, 0xdaf0, 0xb5b3, 0xdaf8, 0xdaf1, 0xdaf5, 0xdaf3, 0xb5b6, 0xdaec, 0xb5bb, 0xb2ce, 0xb5b7, 0xb5bc, 0xb868, 0xdf5d, 0xdf5f, 0xdf61, 0xdf65, 0xdf5b, 0xdf59, 0xb86a, 0xdf60, 0xdf64, 0xdf5c, 0xdf58, 0xdf57, 0x8ea7, 0x8c76, 0xdf62, 0xdf5a, 0xdf5e, 0xb86b, 0xb869, 0xdf66, 0xb867, 0xdf63, 0xe372, 0x9542, 0xbaee, 0xe36a, 0xbd78, 0xe374, 0xbaf1, 0xe378, 0xbaf7, 0xe365, 0x987d, 0xe375, 0xe362, 0x9755, 0xe377, 0xe366, 0x8ea8, 0xbafe, 0xbafb, 0xe376, 0xe370, 0xbaed, 0xbaf5, 0xbaf4, 0x8eaa, 0xbaf3, 0xbaf9, 0xe363, 0xbafa, 0xe371, 0xbaf6, 0xbaec, 0xe373, 0xbaef, 0xbaf0, 0xbaf8, 0xe368, 0xe367, 0xe364, 0xe36c, 0xe369, 0xe36d, 0xbafd, 0xe379, 0xbaf2, 0xe36e, 0xe36f, 0x89a3, 0xe36b, 0x9960, 0x9962, 0xbafc, 0x94fc, 0x9961, 0xe6e7, 0xbd70, 0xbd79, 0xbd75, 0xe6e4, 0x94fa, 0xbd72, 0xbd76, 0xe6f0, 0xbd6c, 0xe6e8, 0xbd74, 0x8eae, 0x8eb2, 0xe6eb, 0xe6e6, 0xbd73, 0xbd77, 0xe6e5, 0xbd71, 0xe6ef, 0xbd6e, 0xe6ee, 0xe6ed, 0xbd7a, 0xe572, 0xbd6d, 0x8eb0, 0xe6ec, 0xe6e3, 0xbd7b, 0xe6ea, 0xbd6f, 0x9963, 0x97aa, 0xe6e9, 0x94fb, 0xbfa2, 0xbfa7, 0xbf7e, 0xead8, 0xeacf, 0xeadb, 0xead3, 0xead9, 0xbfa8, 0xbfa1, 0xeacc, 0xead2, 0xeadc, 0xead5, 0xeada, 0xeace, 0xead6, 0xbfa3, 0xead4, 0xbfa6, 0xbfa5, 0xead0, 0xead1, 0xeacd, 0xead7, 0xbfa4, 0xeade, 0xeadd, 0x8ebb, 0xedda, 0xedd6, 0xc15f, 0xedd0, 0xc159, 0xc169, 0xeddc, 0xc161, 0xc15d, 0xedd3, 0xc164, 0xc167, 0xedde, 0xc15c, 0xedd5, 0xc165, 0xede0, 0xeddd, 0xedd1, 0xc160, 0xc15a, 0xc168, 0xedd8, 0xc163, 0xedd2, 0xc15e, 0xeddf, 0xc162, 0xc15b, 0xedd9, 0xc166, 0xedd7, 0xeddb, 0xf06e, 0xf074, 0xc2b9, 0xf077, 0xc2b4, 0xc2b5, 0xf06f, 0xf076, 0xf071, 0xc2ba, 0xc2b7, 0x8cdc, 0xf06d, 0xc2b6, 0xf073, 0xf075, 0xc2b8, 0xf072, 0xf070, 0x9876, 0x8ea1, 0xf2b8, 0xc3b7, 0xc3b8, 0xc3b4, 0x8cb4, 0xc3b5, 0x8eb7, 0xf2b4, 0xf2b2, 0xf2b6, 0xc3ba, 0xf2b7, 0xf2b0, 0xf2af, 0xf2b3, 0xf2b1, 0xc3b6, 0xf2b5, 0xf4ac, 0xc47e, 0xc47d, 0xf4ad, 0x9da6, 0xf4af, 0xf4ae, 0xc4a1, 0xf5eb, 0xf5e8, 0xf5e9, 0xf5e7, 0xf5ea, 0xc4f2, 0xf5ec, 0x9eb0, 0xc4f1, 0xf742, 0x8eb8, 0xc5d5, 0xc5d7, 0xf7ee, 0xc5d6, 0xf8b9, 0xf940, 0xf942, 0xf8fe, 0xf941, 0xc66c, 0x9d70, 0x896e, 0x896f, 0x8970, 0x8971, 0x8972, 0x8973, 0x8974, 0xa6ce, 0x8975, 0xacfb, 0xd26f, 0xafca, 0xb2da, 0xdafc, 0xdafd, 0x8ebc, 0x8ebd, 0xeadf, 0xc16a, 0xede1, 0x8ebe, 0xc2bb, 0x9dd1, 0xf2ba, 0xf2b9, 0xc4a2, 0xf5ed, 0x94fd, 0xf743, 0xc5f8, 0xca49, 0x8bd7, 0x8bda, 0xaac9, 0xa875, 0xd04d, 0xd360, 0xd35b, 0xd35f, 0xd35d, 0xafcb, 0xd35e, 0xd35c, 0xd6f1, 0xdafe, 0xdb40, 0xdf69, 0xdf6a, 0xb86e, 0xb86f, 0xdf68, 0xdf6b, 0xdf67, 0xb86d, 0xbb40, 0xa0e2, 0xb870, 0xe37a, 0xbd7c, 0xe6f1, 0xbd7d, 0x9fe9, 0xbfa9, 0xeae2, 0xeae0, 0xeae1, 0xede4, 0xede3, 0xede2, 0xf2bb, 0xc3b9, 0xf2bc, 0xf744, 0xc5f9, 0xf8ba, 0xa6cf, 0xaacb, 0xaaca, 0xd04f, 0xacfc, 0xfda8, 0xd04e, 0xd362, 0x8ae7, 0xafcc, 0xd6f2, 0xd361, 0x8ec2, 0xb2dc, 0xd6f5, 0xd6f3, 0xd6f4, 0xb2db, 0xdb42, 0xdb43, 0xdb41, 0x8ec4, 0xb873, 0xdf6d, 0xdf6c, 0xdf6e, 0xb872, 0xb871, 0xe6f2, 0xe6f4, 0x9964, 0xbd7e, 0xe6f3, 0xeae3, 0xbfaa, 0xf079, 0x9965, 0xf078, 0xc3bb, 0xf2bd, 0xc3bd, 0xc3bc, 0xf4b0, 0xf5ee, 0xc4f3, 0xa6d0, 0xd050, 0xacfd, 0xd365, 0xafce, 0xd364, 0xd363, 0xafcd, 0xd6fb, 0xd6fd, 0xd6f6, 0xd6f7, 0xb2dd, 0xd6f8, 0xb2de, 0xd6fc, 0xd6f9, 0xd6fa, 0xb2df, 0xb5be, 0xb5bf, 0xdb44, 0xdf6f, 0xdf70, 0x954e, 0xe37e, 0xbb43, 0xbb41, 0xbb42, 0xe37b, 0xe37c, 0xe37d, 0xe6f9, 0x98b3, 0xe6fa, 0xbda1, 0xe6f7, 0xe6f6, 0xe6f8, 0xe6f5, 0xbfad, 0xeae4, 0xbfab, 0xbfac, 0xede6, 0xc16b, 0xede5, 0xefa8, 0xf07a, 0xf07b, 0xc2bc, 0x8ecb, 0xc2bd, 0xc16c, 0xf2be, 0xf2bf, 0xf4b1, 0xc4a3, 0xa6d1, 0x8bdf, 0xa6d2, 0xacfe, 0xaacc, 0xafcf, 0xd051, 0x8ece, 0xb5c0, 0xa6d3, 0xad41, 0xd052, 0xd053, 0xad40, 0xad42, 0xa6d4, 0xd054, 0xafd1, 0xd366, 0xafd3, 0xafd0, 0xafd2, 0xd741, 0xb2e0, 0x8ecf, 0xd740, 0xd6fe, 0x9968, 0xdf71, 0xe3a1, 0x9969, 0xbda2, 0xbfae, 0xeae6, 0xeae5, 0xede7, 0x996b, 0x8ed1, 0xf5ef, 0x996c, 0xa6d5, 0xcb73, 0xcdaa, 0xad43, 0xd055, 0xd368, 0x8ed4, 0x8ed5, 0xafd4, 0xd367, 0xafd5, 0xd743, 0xb2e2, 0xd742, 0xd744, 0xb2e1, 0xdb46, 0xdb47, 0xdb45, 0xb5c1, 0x996d, 0xb874, 0xb875, 0xbb45, 0xa0be, 0xe3a3, 0xe3a2, 0xbb44, 0x8ed6, 0xa0bc, 0xa0b5, 0xe6fb, 0xa0b4, 0xe6fc, 0xeae7, 0xc170, 0xc16f, 0xc16d, 0xc16e, 0xc171, 0xf07c, 0xc2bf, 0xc2be, 0xf2c0, 0xf4b2, 0xc5a5, 0xc5a4, 0xa6d6, 0x8be0, 0xd1fb, 0xb877, 0xb5c2, 0xb876, 0xbb46, 0xa6d7, 0xc9a9, 0xa6d8, 0xa6d9, 0xcdab, 0xcb76, 0xcb77, 0xa877, 0xcb74, 0xa876, 0xa879, 0xcb75, 0xa87b, 0xa87a, 0xcb78, 0xa878, 0x89b5, 0xaad1, 0xaacf, 0xcdad, 0xaace, 0x8edd, 0xaad3, 0xaad5, 0xaad2, 0xcdb0, 0xcdac, 0xaad6, 0xaad0, 0xa87c, 0xaad4, 0xcdaf, 0x9e5d, 0x9971, 0xcdae, 0xaacd, 0x89ae, 0x9de8, 0xd05b, 0xad47, 0xad48, 0xd05d, 0x9565, 0xd057, 0xd05a, 0xd063, 0xd061, 0xad49, 0xd067, 0xad4c, 0xd064, 0xd05c, 0xd059, 0xdb49, 0xd062, 0xad44, 0xd065, 0xd056, 0xd05f, 0xad46, 0xad4b, 0xd060, 0xad4f, 0xad4d, 0xd058, 0xad4a, 0xd05e, 0xad4e, 0xad45, 0xd066, 0x9972, 0x8b5c, 0xafda, 0xafe3, 0xafd8, 0xafd6, 0xd36a, 0xafde, 0xafdb, 0xd36c, 0x89b1, 0xafdd, 0xd36b, 0xd369, 0xd36e, 0xafe2, 0xafe0, 0xdb48, 0xd36f, 0xd36d, 0xafd7, 0xa0c0, 0xafd9, 0xafdc, 0x8edf, 0xafdf, 0x9566, 0xafe1, 0x9974, 0x9976, 0x9977, 0x9979, 0xd74e, 0xb2e4, 0x9dda, 0xd745, 0xd747, 0x8ee0, 0xd748, 0xd750, 0xd74c, 0xd74a, 0xd74d, 0xd751, 0xb2e5, 0xb2e9, 0xd746, 0xd74f, 0xb2e7, 0x935c, 0xb2e6, 0xd74b, 0xd749, 0xb2e3, 0xb2e8, 0x9de6, 0x8b5f, 0x9563, 0xb5c8, 0xdb51, 0xdb4f, 0xb5ca, 0x9567, 0xdb4a, 0xdfa1, 0xb5c9, 0xdb4e, 0x9de3, 0xdb4b, 0xb5c5, 0xb5cb, 0xdb50, 0xb5c7, 0xdb4d, 0xbb47, 0xb5c6, 0xdb4c, 0xb5cc, 0xb5c4, 0xb5c3, 0x997c, 0x997d, 0x997e, 0xdf77, 0xdf75, 0xdf7b, 0xdf73, 0xdfa2, 0xdf78, 0xdf72, 0xb87b, 0xb8a3, 0xdf7d, 0xdf76, 0xb87e, 0x8b5b, 0xb87c, 0xdf7e, 0xb879, 0xb878, 0xdf79, 0xb87d, 0xb5cd, 0xdf7c, 0xdf74, 0xb87a, 0xb8a1, 0xb8a2, 0x99a3, 0xbb4c, 0xbb48, 0xbb4d, 0xe3a6, 0x99a4, 0xe3a5, 0xe3a7, 0xbb4a, 0xe3a4, 0xbb4b, 0xe3aa, 0xe3a9, 0xe3a8, 0xbb49, 0x99a6, 0xe741, 0xe744, 0xbda8, 0xe743, 0xbda7, 0xbda3, 0xbda4, 0xbda5, 0xe740, 0xe6fe, 0xbda6, 0xe742, 0xe6fd, 0x99a8, 0xeae9, 0xeaf3, 0xbfb1, 0xbfb0, 0x8abe, 0xeaed, 0xeaef, 0xeaea, 0xeaee, 0xeae8, 0xeaf1, 0xbfaf, 0xeaf0, 0xeaec, 0x9e61, 0xeaf2, 0xeaeb, 0xc174, 0xede8, 0xedee, 0xc178, 0xc17a, 0xc177, 0xc176, 0x99aa, 0xc175, 0xc173, 0xede9, 0xedec, 0xc172, 0xeded, 0xa0c8, 0xc179, 0xedeb, 0xedea, 0xc2c0, 0xc2c1, 0xf0a1, 0xf07d, 0xf07e, 0xf2c2, 0xf2c1, 0xc3be, 0xf4b4, 0xc4a4, 0xf4b3, 0xf5f0, 0xf745, 0xc5a6, 0xf943, 0xf944, 0xc5d8, 0xa6da, 0x99ab, 0xaad7, 0xdb52, 0xbb4e, 0xc17b, 0xedef, 0xa6db, 0xafe5, 0xafe4, 0xdb53, 0xfec4, 0xeaf4, 0xa6dc, 0xad50, 0x98c2, 0xdb54, 0xdb55, 0xdb56, 0xbb4f, 0xbfb2, 0xa6dd, 0xaad8, 0xd068, 0xafe6, 0xd370, 0xb2ea, 0xdb57, 0xb8a4, 0xbb50, 0xbfb3, 0xc17c, 0xc2c2, 0xf4b5, 0xa6de, 0xaad9, 0xafe7, 0xd752, 0xb5ce, 0xbb51, 0xe3ab, 0xe745, 0x8ee8, 0xa0ba, 0xa6df, 0xb5cf, 0xdfa3, 0xbb52, 0xa6e0, 0xcdb1, 0xd069, 0xad51, 0xd372, 0xfd77, 0xafea, 0x8eee, 0xafe8, 0xafe9, 0xafeb, 0x9ebf, 0xd371, 0xd757, 0xd754, 0xd756, 0xb2eb, 0xb2ed, 0xb2ec, 0xd753, 0xb2ee, 0xd755, 0xdb58, 0xdb59, 0x89c2, 0xdb5a, 0xdfa6, 0xdfa7, 0xdfa5, 0xdfa8, 0xb8a5, 0xdfa4, 0xbb53, 0xe74a, 0xe746, 0xe749, 0xe74b, 0xe748, 0xe747, 0x99ac, 0xeaf5, 0xeaf6, 0xeaf7, 0xbfb4, 0xbfb5, 0xedf1, 0xedf0, 0xedf2, 0xf0a3, 0xf0a2, 0xf2c4, 0x956b, 0xf2c5, 0xf2c3, 0x956c, 0xc4a5, 0xf4b6, 0xf4b7, 0xf746, 0xf7ef, 0xf8bb, 0xa6e1, 0xa87d, 0xc17d, 0xa6e2, 0xd758, 0xdb5b, 0x99af, 0xc641, 0xca4a, 0x994a, 0x8976, 0x8f48, 0xca4b, 0xca4d, 0xa6e3, 0xca4e, 0xca4c, 0xcba2, 0xcba3, 0xcb7b, 0xfbee, 0xcba1, 0xa8a1, 0xa8a2, 0xcb7c, 0xcb7a, 0xcb79, 0xcb7d, 0xa87e, 0xcb7e, 0xd06a, 0xcdb6, 0xaadc, 0xcdb5, 0xcdb7, 0xaadb, 0xcdbc, 0xaadf, 0xcdb2, 0xcdc0, 0xcdc6, 0xaae6, 0xcdc3, 0xaae3, 0x99ae, 0xcdb9, 0xcdbf, 0xcdc1, 0x8efb, 0xcdb4, 0xaae2, 0xaadd, 0xcdba, 0xaae4, 0xaae7, 0xaae1, 0xaada, 0xcdbe, 0xcdb8, 0xcdc5, 0xaae9, 0xaae5, 0xaae0, 0xcdbd, 0xafec, 0xcdbb, 0xaade, 0xaae8, 0x8cd0, 0xcdb3, 0xcdc2, 0xcdc4, 0x8b52, 0x99b0, 0x8977, 0x8f41, 0xad62, 0xad5c, 0xad64, 0xad61, 0xd071, 0xd074, 0xad5d, 0x99b1, 0xd06b, 0xad56, 0xad60, 0xad63, 0xad65, 0xd0a2, 0xd077, 0x8f49, 0xad55, 0xd0a1, 0xad59, 0xad57, 0xad52, 0xd06f, 0xd07e, 0xd073, 0xd076, 0xd0a5, 0xfa4d, 0xad66, 0xd07d, 0xad5e, 0xd078, 0xd0a4, 0xd075, 0xd079, 0xd07c, 0x9de4, 0x8cb5, 0xd06d, 0xd0a3, 0xd07b, 0xfbe9, 0x9b54, 0xd06c, 0x99b2, 0xd070, 0xad5f, 0xad5a, 0xad53, 0xad58, 0xad54, 0xad67, 0xd06e, 0xd3a5, 0xad5b, 0x9e68, 0xd07a, 0xce41, 0xd3a8, 0xaffa, 0x8f4a, 0xd376, 0x8f42, 0xd3a3, 0xd37d, 0x8f51, 0xd3b2, 0xd3aa, 0xd37e, 0xd3a9, 0xd378, 0xd37c, 0xd3b5, 0xaffd, 0xd3ad, 0xd3a4, 0xafed, 0xd3b3, 0xd374, 0xd3ac, 0xaffc, 0xaff7, 0xd373, 0xaff5, 0xaff4, 0xaff9, 0xd3ab, 0xaff1, 0xaff8, 0xd072, 0xdb5c, 0xd3a6, 0x9846, 0xd37a, 0xaffb, 0xd37b, 0xd3a1, 0xaffe, 0xd375, 0xd3af, 0xd3ae, 0xd3b6, 0xaff3, 0xaff0, 0xd3b4, 0xd3b0, 0xd3a7, 0xd3a2, 0xaff6, 0xaff2, 0xd377, 0xafee, 0xd3b1, 0xafef, 0xd379, 0x99b4, 0x8ef5, 0xfd55, 0x9ccd, 0x8978, 0xd75e, 0xd760, 0xd765, 0xd779, 0xb2fc, 0xb2f2, 0xd75d, 0xb2fd, 0xb2fe, 0xd768, 0xd76f, 0xd775, 0xd762, 0xd769, 0x8f53, 0xb340, 0xd777, 0xd772, 0xb2fa, 0xb2f8, 0xd76e, 0xd76a, 0xd75c, 0xb2ef, 0xd761, 0xd759, 0x8f6f, 0xb2f7, 0xb2f9, 0xd766, 0xd763, 0xb2f4, 0xd773, 0xb2f1, 0xd764, 0xd77a, 0xd76c, 0x8e63, 0xd76b, 0xb2f0, 0xb2fb, 0xb2f3, 0xd75a, 0xd75f, 0xd770, 0xd776, 0xb341, 0xd75b, 0xd767, 0xd76d, 0xb2f6, 0x8f56, 0xd778, 0xd771, 0xd774, 0xfe76, 0xb2f5, 0x9fc6, 0xdb6c, 0xdb60, 0xb5d7, 0xdb7d, 0xdba7, 0xdbaa, 0xb5d5, 0xdb68, 0xdba3, 0xdb69, 0xdb77, 0xb5e2, 0xdb73, 0xb5df, 0xfaac, 0xdb74, 0xdb5d, 0xdba4, 0x8f58, 0xb5e8, 0xdba1, 0xdb75, 0xdbac, 0xdb70, 0xdfc8, 0xdbaf, 0xb5e6, 0xdb6e, 0xdb7a, 0xb5e9, 0xb5d4, 0xdb72, 0xdbad, 0xdb6b, 0xdb64, 0xdb6f, 0xdb63, 0xdb61, 0xb5d0, 0xdba5, 0xdb6a, 0xdba8, 0x9848, 0xdba9, 0xb5d8, 0xb5dd, 0xb5d9, 0xb5e1, 0xdb7e, 0xb5da, 0xdb76, 0xdb66, 0xb5d2, 0xdb5e, 0xdba2, 0xdbab, 0xdb65, 0xb5e0, 0xdbb0, 0xdb71, 0xdb6d, 0xb5d1, 0xb5e5, 0x99b7, 0xdb7c, 0xb5e7, 0xdb78, 0xb5dc, 0xb5d6, 0xb5de, 0xb5d3, 0xb5e4, 0xdb79, 0xdb67, 0xdb7b, 0xdb62, 0xdba6, 0x9665, 0xfa6c, 0x9de7, 0xdbae, 0x9e62, 0x96cc, 0x8e67, 0xdb5f, 0xfc75, 0x987e, 0xdfc7, 0xdfdd, 0xb855, 0xdfcc, 0xfdb9, 0xdfca, 0xdfb5, 0xb8a9, 0xdfc5, 0xdfd9, 0xdfc1, 0xb8b1, 0xdfd8, 0xdfbf, 0xb5e3, 0xdfcf, 0xdfc0, 0xdfd6, 0xb8b0, 0xb8a8, 0x97fc, 0xdfaa, 0xdfb2, 0xdfcb, 0xdfc3, 0xdfdc, 0xdfc6, 0xb8b6, 0xdfd7, 0x98f9, 0xb8ad, 0x8f66, 0xdfc9, 0xdfd1, 0xdfb6, 0xdfd0, 0xdfe1, 0xdfb1, 0xdfd2, 0x956e, 0xdfdf, 0x9245, 0xdfab, 0xb5db, 0x8f60, 0xdfb9, 0xdfb8, 0xb8af, 0x9ed1, 0xdfbc, 0xdfbe, 0xdfcd, 0xdfde, 0xb8b2, 0xfecd, 0xb8b3, 0x99b9, 0xdfb0, 0xb8ab, 0xdfb4, 0xdfda, 0xb8b4, 0xb8ac, 0xb8ae, 0xb8b5, 0xdfe0, 0xdfd3, 0xdfce, 0x8f62, 0x974c, 0xdfbb, 0xdfba, 0xb8aa, 0xdfac, 0xb8a7, 0xdfc4, 0xdfad, 0xdfc2, 0xdfb7, 0xdfdb, 0x91c7, 0x955f, 0xb8a6, 0xdfb3, 0x99bb, 0xdfaf, 0xdfd5, 0xdfae, 0xbb60, 0xe3d3, 0x8e6d, 0x8f71, 0xe3c2, 0x94cb, 0xe3ac, 0xe3ca, 0xbb58, 0xe3bb, 0xe3c5, 0xbb5b, 0xe3be, 0xbb59, 0xe3af, 0xe3cd, 0xe3ae, 0xe3c1, 0x95b1, 0xe3ad, 0xe3bf, 0xe3c8, 0xe3c6, 0xe3ba, 0xe3b5, 0xe3b3, 0x9af2, 0xe3b4, 0xe3c7, 0xe3d2, 0xe3bc, 0xbb5a, 0xe3b7, 0xe3cb, 0xbb5d, 0xe3b6, 0xe3b0, 0xe3c0, 0xbb61, 0x96c3, 0x99bd, 0xbb55, 0xbb5e, 0xe3b8, 0xe3b2, 0xbb57, 0xdfd4, 0xbb56, 0xe3c3, 0xbb54, 0xbb63, 0xbb5c, 0xe3c4, 0xe3b9, 0xe3b1, 0xe3cc, 0xe3bd, 0xbb62, 0xe3d0, 0xbb5f, 0xe3cf, 0xe3c9, 0xe3ce, 0xa0cf, 0xe3d1, 0x8f6d, 0x99be, 0x8ef4, 0x8f72, 0x95e4, 0xe773, 0xe774, 0xe767, 0xe766, 0xe762, 0xbdb4, 0xbdac, 0xe776, 0xe775, 0xdfa9, 0xe75f, 0xe763, 0xe75d, 0xe770, 0xe761, 0x99bf, 0xe777, 0xe75a, 0xe758, 0xe764, 0xe76e, 0xe769, 0xbdb6, 0xe74f, 0xe76d, 0x9242, 0xfba5, 0xbdb7, 0xdfbd, 0xe75b, 0xe752, 0xe755, 0xe77b, 0xe75c, 0xe753, 0xe751, 0xe74e, 0x99c0, 0xbdb0, 0xe765, 0xbdaf, 0xbdb3, 0xe760, 0xe768, 0xbda9, 0xe778, 0xe77c, 0xbdab, 0xe757, 0xe76b, 0xe76f, 0xe754, 0xe779, 0xbdb2, 0xbdb1, 0xe74c, 0xbdb5, 0xe772, 0xe756, 0xe76a, 0xe750, 0xe75e, 0xe759, 0xbdad, 0xbdae, 0xe76c, 0xe77d, 0xe77a, 0xe771, 0xfdb4, 0x8f77, 0x99c1, 0xe74d, 0xbdaa, 0xeb49, 0xeb40, 0xeb43, 0xfab9, 0xbfbb, 0xeb45, 0xeaf9, 0xeb41, 0xeb47, 0xbfb8, 0xbfbc, 0xbfb6, 0x8f40, 0xfa44, 0xeafb, 0xeb4c, 0xeb46, 0x99c2, 0xeafc, 0xeb55, 0xeb4f, 0xeaf8, 0xee46, 0xeafe, 0xbfb7, 0x8f5c, 0xeb4a, 0xeb54, 0xbfbf, 0x8cbd, 0xeb51, 0xeafd, 0xeb44, 0xeb48, 0xeb42, 0xeb56, 0xeb53, 0xeb50, 0xbfb9, 0xbfba, 0xbfbe, 0xeafa, 0xeb57, 0xbfbd, 0xeb4d, 0x99c4, 0x99c5, 0xeb4b, 0x8f7b, 0xeb4e, 0xee53, 0xee40, 0xee45, 0xee52, 0xee44, 0xedfb, 0xee41, 0xc1a2, 0xedf4, 0xee4d, 0xee4f, 0xedf3, 0xc1a1, 0xee51, 0xee49, 0xc1a8, 0xee50, 0xee42, 0xc1aa, 0xedf9, 0xeb52, 0xee4a, 0xee47, 0xedf5, 0xee55, 0xc1a4, 0xc1a5, 0xedf7, 0xee48, 0x8cb6, 0xee54, 0xee4b, 0xedfd, 0xc1a7, 0xc1a3, 0xee4c, 0xedfe, 0xee56, 0xedf8, 0xee43, 0xee4e, 0xedfa, 0xedfc, 0xc2cb, 0xedf6, 0xc1a9, 0xc2c4, 0xc17e, 0xc1a6, 0xc2c8, 0xf0b3, 0xf0a9, 0xf0a4, 0xf0aa, 0xf0b4, 0xf0b8, 0xf0b7, 0xc2ca, 0xc2c9, 0xf0ab, 0xf0b9, 0xf0ae, 0xf0a6, 0x8fa3, 0xf0a8, 0xf0a7, 0xf0ad, 0xf0b2, 0xf0a5, 0xf0ac, 0xf0b1, 0xc2c7, 0xf0af, 0xc2c5, 0xf0b0, 0xc2c3, 0xc2c6, 0xf2d5, 0xf0b5, 0xc3c2, 0x8cce, 0xf2cd, 0xf2d1, 0xf2c9, 0xf2cc, 0xf2d4, 0xc3c0, 0xf2d9, 0xf2d2, 0x99c6, 0xf2ca, 0xf2da, 0xf2d3, 0xc3c3, 0xc3c4, 0xf2d7, 0xf2cb, 0xc3bf, 0xc3c1, 0xf2c6, 0xf2ce, 0xf2c8, 0x96cd, 0xf2d8, 0xf2d6, 0xf2c7, 0xf2cf, 0xf4be, 0xc3c5, 0xf2d0, 0xc4a7, 0xc4a9, 0xc4a6, 0x96c7, 0xf4c3, 0xf4bb, 0xf4b9, 0xf4bd, 0xf4ba, 0x8fa5, 0xf4bf, 0xf4c1, 0xc4aa, 0xc4ac, 0xf4c0, 0xc4ad, 0xc4ab, 0xf4c2, 0xfabb, 0x8c61, 0x9570, 0xc4a8, 0x9368, 0x8f7e, 0xc4f4, 0xf5f1, 0xf5f7, 0xc4f6, 0xf4bc, 0xf5f6, 0xf5fd, 0xf5f4, 0xf5fb, 0xf5fa, 0xf4b8, 0xf5f5, 0xf0b6, 0xf5fe, 0xf5f3, 0xf5f8, 0x8faa, 0xf5fc, 0xf5f2, 0xf74a, 0xc4f5, 0xf5f9, 0xa050, 0xf7f4, 0xf74b, 0xf749, 0xf747, 0xf748, 0xf74c, 0xc5d9, 0xf7f2, 0xf7f0, 0xf7f5, 0xf7f3, 0xf7f6, 0xc5da, 0xf7f1, 0x90d3, 0xf8bc, 0x9556, 0xf945, 0xf946, 0xf947, 0xf9c7, 0xf9bd, 0xca4f, 0xaaea, 0xad68, 0xd3b8, 0xd3b7, 0xb040, 0xb342, 0xd77c, 0xd77b, 0xb5ea, 0xb8b8, 0xb8b7, 0xb8b9, 0xe3d4, 0xe77e, 0xeb58, 0xeb5a, 0xeb59, 0xc1ab, 0xee57, 0xf0ba, 0xf9a5, 0xa6e4, 0x8fb8, 0xcdc9, 0xcdca, 0xcdc8, 0xcdc7, 0xaaeb, 0x99c8, 0xd0a9, 0xd0a7, 0xd0a6, 0xad69, 0xad6b, 0xad6a, 0xd0a8, 0x8faf, 0xd3c4, 0xd3c1, 0xd3bf, 0xb041, 0xd3c2, 0xb046, 0xd3bc, 0xd3cb, 0xd3cd, 0xd3bd, 0x99c9, 0xb043, 0xd3ce, 0xd3c9, 0xd3bb, 0xd3c0, 0xd3ca, 0xd3c6, 0xd3c3, 0xb048, 0xd3cc, 0xd3be, 0x9579, 0xd3c7, 0xd3b9, 0xb047, 0xb044, 0xd3c5, 0xd3c8, 0xd3ba, 0xb045, 0xb042, 0x9f49, 0xb34c, 0xd7a5, 0xb34b, 0x99ca, 0xd7a8, 0xd7ab, 0xb348, 0xb346, 0xd77e, 0xd7a9, 0xd7a7, 0xd7a4, 0xd7ac, 0xd7ad, 0xd7af, 0xd7b0, 0xd77d, 0xb345, 0xd7a2, 0xd7a1, 0xd7ae, 0xb347, 0xd7a3, 0xb349, 0xb344, 0xd7a6, 0xb34d, 0xb34a, 0xd7aa, 0xb5f1, 0xdbbf, 0xdbb4, 0xb5ee, 0xdfe7, 0xdbbd, 0xdbb1, 0xb5ec, 0xdbb6, 0xb5ef, 0xdbba, 0xdbb8, 0xb5f2, 0xb5eb, 0xdbb2, 0xdbb5, 0xb5f0, 0xdbb3, 0xdbbe, 0xdbbc, 0xdbb7, 0xdbb9, 0xdbbb, 0xb5ed, 0x99cb, 0xdfe8, 0xdfee, 0xdfe4, 0xdfea, 0xb8ba, 0xdfe6, 0xb8c0, 0xb8bf, 0xb8be, 0xdfed, 0xb8c1, 0xb8c2, 0xdfe3, 0xdff0, 0xb8c3, 0xb8bd, 0xb8bc, 0xdfec, 0xb8c4, 0xdfe2, 0xdfe5, 0xdfef, 0xdfeb, 0xe3f4, 0xe3e9, 0xb8bb, 0xbb6a, 0xe3dd, 0xe3f2, 0xe3de, 0xbb65, 0xe3db, 0xe3e4, 0xe3dc, 0xbb67, 0xe3d6, 0xe3f1, 0xbb68, 0xe3ee, 0xe3ef, 0xe3d7, 0xbb6d, 0xe3e6, 0xe3e0, 0xe3e7, 0xe3da, 0xe3f3, 0xe3eb, 0xe3e5, 0xe3d5, 0xbb69, 0xe3ec, 0xbb6c, 0xe3f0, 0xe3ea, 0xbb66, 0xe3e8, 0xe3e2, 0xbb64, 0xe3d9, 0xe3e1, 0xe3ed, 0xe3df, 0xe3e3, 0xbdc1, 0xdfe9, 0xe7b2, 0xe7bb, 0xe7b1, 0xe7ad, 0xe7aa, 0xbdc2, 0xe7a8, 0xbb6b, 0xe7a1, 0xbdc0, 0xe7a7, 0xbdbf, 0xe7ac, 0xe7a9, 0xe7b9, 0xe7b4, 0xe7ae, 0xe7b3, 0xbdbb, 0xe7ab, 0xe7be, 0xe7a2, 0xe7a3, 0xe7ba, 0xbdbc, 0xe7bf, 0xbdbe, 0xe7c0, 0xe7b0, 0xe3d8, 0xe7b6, 0xe7af, 0xe7b8, 0xe7b5, 0x9dd5, 0x8fb0, 0xe7a6, 0xbdb9, 0xe7bd, 0xbdba, 0xe7a4, 0xbdbd, 0xeb64, 0xe7b7, 0xe7bc, 0xfa7a, 0xeb61, 0xbdb8, 0xbfc0, 0xeb6b, 0xeb67, 0x9e5f, 0xeb65, 0xeb60, 0xeb6f, 0x99cd, 0xa0c9, 0xbfc4, 0xeb5c, 0xeb68, 0xeb69, 0xeb5f, 0xeb5e, 0xeb6c, 0xeb62, 0xeb5d, 0xeb63, 0xeb6e, 0xeb5b, 0xeb6d, 0xeb6a, 0xbfc2, 0xbfc1, 0xbfc3, 0xeb66, 0xf0cb, 0x9adb, 0xa0c6, 0xee59, 0xc1b1, 0xee5d, 0xee5a, 0xee61, 0xee67, 0xee5c, 0x8fb4, 0xee70, 0xc1ae, 0xee6a, 0xee5f, 0xee6b, 0xee66, 0xee6d, 0xee5e, 0xc1b3, 0xc1b2, 0xee60, 0xee6e, 0xee58, 0xee6c, 0xc1ac, 0xa0d7, 0xee64, 0xee63, 0xee68, 0xee5b, 0xc1b0, 0xc1b4, 0xee62, 0xee69, 0xc1b5, 0xee65, 0xa0c7, 0xc1ad, 0xc1af, 0xf0c7, 0xf0c5, 0xa043, 0xf0cc, 0xf0c9, 0xf0cd, 0x8fb5, 0xf0be, 0xf0c6, 0xf0d1, 0xee6f, 0xf0c2, 0xc2cf, 0xe7a5, 0xf0bd, 0xf0ca, 0xf0c4, 0xf0c1, 0xf0bc, 0xf0bb, 0xf0d0, 0xf0c0, 0xf0bf, 0xc2cd, 0xf0c8, 0x8fb2, 0xc2cc, 0xc2ce, 0xf0c3, 0xf0cf, 0xa061, 0xf2de, 0xf2df, 0xc3c9, 0xf2dc, 0xc3c6, 0xf2e4, 0xc3ca, 0xf2e6, 0xf2db, 0xf0ce, 0xf2e8, 0xf2dd, 0x9e5e, 0xc3c7, 0xf2e3, 0xf2e5, 0xf2e0, 0xf2e7, 0xf2e2, 0xf2e1, 0xc3c8, 0x8fb6, 0xf4c5, 0xf4c6, 0xf4c8, 0xc4ae, 0xc4af, 0xf4c9, 0xf4c7, 0x9fe8, 0xf4c4, 0xf642, 0xf645, 0xf641, 0xc4fa, 0xf643, 0xc4f9, 0xc4f8, 0xc4f7, 0xf644, 0xf751, 0xf74f, 0x9cb2, 0xf74e, 0xf640, 0xf750, 0xf646, 0xf74d, 0x957c, 0xf7f9, 0xf7d7, 0xf7f7, 0xc5db, 0xf7f8, 0xf7fa, 0xf8bf, 0xc5fa, 0xf8be, 0xf8bd, 0xc5fb, 0xc65a, 0xf96e, 0xf9a7, 0xf9a6, 0xf9a8, 0xa6e5, 0xd0aa, 0x9fc7, 0xd3cf, 0xd3d0, 0x8fbb, 0x8fbc, 0xdbc0, 0xf647, 0xf8c0, 0xa6e6, 0xad6c, 0xd0ab, 0x8fec, 0xd7b1, 0xb34e, 0xdbc2, 0xdbc1, 0xb5f3, 0xb8c5, 0xe7c1, 0xbdc3, 0xbdc4, 0x8fc0, 0x936a, 0xbfc5, 0xc5fc, 0xa6e7, 0x8be4, 0x9c7c, 0xd0ac, 0xaaed, 0xd0ae, 0xd0ad, 0xad6d, 0xd3d1, 0x95a1, 0xd3d8, 0xb049, 0xd3d6, 0xd3d4, 0xd3db, 0xd3d2, 0xd3d3, 0xb04a, 0xb04e, 0xd3dc, 0xb04d, 0xd3da, 0xd3d7, 0xd3d5, 0xb04b, 0xb04c, 0xd3d9, 0xfeec, 0x95a3, 0xb350, 0xd7b2, 0xb355, 0xd7c2, 0xb354, 0xd7c4, 0x8c45, 0x8cb8, 0xd7b8, 0xb352, 0xd7c3, 0xd7b3, 0xb353, 0xd7bf, 0xd7bb, 0xd7bd, 0xd7b7, 0xd7be, 0x8fc1, 0xb34f, 0xd7ba, 0xa052, 0xd7b9, 0xd7b5, 0xd7c0, 0xd7bc, 0xd7b4, 0xd7b6, 0xb351, 0xd7c1, 0x99d0, 0xb5f6, 0xdbcd, 0x8fc3, 0x8fc4, 0xdbc9, 0xdbcb, 0xdbc6, 0xdbc5, 0xdbc3, 0xdbca, 0xdbcc, 0xdbc8, 0x95a4, 0xdbc7, 0xb5f4, 0xb5f5, 0x8fc6, 0x9e60, 0xdbcf, 0xb8cd, 0xdff2, 0xdff8, 0xdff3, 0xdff4, 0xf9d8, 0xdff9, 0xb8cf, 0xb8c7, 0xb8ce, 0xdff1, 0xdbc4, 0xb8ca, 0xb8c8, 0xdff7, 0xdff6, 0xb8c9, 0xb8cb, 0xdff5, 0xb8c6, 0xb8cc, 0x95a5, 0xe3f6, 0xbb74, 0xe442, 0xe441, 0xe3fb, 0xbb76, 0xe440, 0xe3f7, 0xe3f8, 0xbb6e, 0xbb70, 0x9cb3, 0xe3fd, 0xe3f5, 0xbb72, 0xbb71, 0xe3f9, 0xe3fe, 0xe3fc, 0xbb73, 0xe3fa, 0x99d1, 0xfef1, 0xdbce, 0xbb6f, 0xe7c2, 0xe7c9, 0xbdc6, 0xe7cd, 0xbdca, 0xe7c5, 0xe7c3, 0xe7cc, 0xbdc5, 0xe7cb, 0xbdc7, 0xbdc8, 0xe7c4, 0xbdc9, 0xe7ca, 0xe7c6, 0xe7c7, 0xe7c8, 0xbb75, 0xeb70, 0xeb7c, 0xbfca, 0xeb77, 0xeb79, 0x99d2, 0xbfc8, 0xeb71, 0xeb75, 0xeb78, 0xbfc6, 0xbfc9, 0xeb7b, 0xeb73, 0xeb74, 0xeb7a, 0xeb72, 0xeb76, 0xbfc7, 0xee72, 0xee71, 0xc1b7, 0xee77, 0xc1b9, 0xc1b6, 0xee73, 0xc1ba, 0xee74, 0xee75, 0xee78, 0x9cc2, 0xc1b8, 0xf0d6, 0x99d3, 0xf0d9, 0xf0d3, 0xf0d5, 0x95a7, 0xf0d4, 0xf0d7, 0xf0d8, 0xee76, 0xf0d2, 0x95a9, 0xc3cd, 0xf2ec, 0xf2ef, 0xf2f1, 0xf2ea, 0xf2eb, 0xf2ee, 0xf2f0, 0xc3ce, 0xc3cc, 0xc3cb, 0xf2ed, 0xf2e9, 0xf4ca, 0xc4b0, 0x95a6, 0xf4cb, 0xf649, 0xc4fb, 0xf64b, 0xc4fc, 0xf648, 0xf64a, 0xc5a8, 0xf752, 0xc5a7, 0xf7fd, 0xf7fc, 0xf7fb, 0x9c5d, 0xf948, 0xf949, 0xf94b, 0xf94a, 0xca50, 0xa6e8, 0x98e2, 0xad6e, 0xd7c5, 0xb5f7, 0xdffa, 0xc2d0, 0x8fc9, 0xf2f2, 0xa0c2, 0x8fca, 0xa8a3, 0xb357, 0x99d4, 0xb356, 0xa0b9, 0xdbd0, 0xb5f8, 0xdbd2, 0xdbd1, 0xdffb, 0xb8d0, 0xe443, 0xe446, 0xe445, 0xe444, 0xe7ce, 0xe7d0, 0xe7cf, 0x9b58, 0xbfcc, 0x8fcd, 0xa0d4, 0xbfcb, 0xc1bb, 0xee79, 0xee7b, 0xee7a, 0xc2d1, 0xf2f4, 0xf2f3, 0xf4cc, 0xc4b1, 0x8fce, 0xc4fd, 0xf754, 0xf753, 0xc65b, 0x8be5, 0x8979, 0xa8a4, 0xd0af, 0xad6f, 0xd7c8, 0xd7c6, 0xd7c7, 0xdbd4, 0xdbd5, 0xe043, 0xdbd3, 0xdffc, 0xe041, 0xe040, 0xe042, 0xb8d1, 0xdffe, 0xdffd, 0xe044, 0x8fd0, 0xe449, 0xe447, 0xe448, 0xe7d3, 0xe7d1, 0xe7d2, 0xeb7d, 0xee7c, 0xee7d, 0xc2d2, 0xf2f5, 0xf4cd, 0xc4b2, 0xf64c, 0xf755, 0xc5a9, 0xf7fe, 0xf94c, 0xa8a5, 0xad71, 0xad72, 0xd0b0, 0xd0b1, 0xad70, 0xb054, 0xb052, 0xb051, 0xb058, 0xb050, 0xb059, 0xd3dd, 0xb056, 0xb053, 0xb057, 0xb055, 0xb04f, 0xb35f, 0x95b6, 0xb359, 0xd7cc, 0xb35e, 0xb360, 0xb35a, 0xb35b, 0xd7ca, 0x99d6, 0xb358, 0x95e5, 0xd7cb, 0xb35d, 0xd7c9, 0xb35c, 0xb644, 0xb646, 0x99d7, 0xdbd8, 0xb645, 0xb5f9, 0xb5fd, 0x95b5, 0xb8e4, 0xe049, 0xdbda, 0xb5fe, 0xdbdd, 0xdbde, 0xb643, 0xdbe0, 0xa0ca, 0xdbe2, 0xdbe3, 0xdbd7, 0xdbd6, 0xdbe4, 0xb642, 0xdbe1, 0xdbdf, 0xb640, 0xb5fb, 0xb647, 0xdbdb, 0xdbdc, 0xdbd9, 0xb641, 0xb5fc, 0xb5fa, 0xe048, 0xb8df, 0xb8da, 0xb8d5, 0x9ffd, 0xb8e5, 0xb8d6, 0xb8d2, 0xb8e1, 0xb8de, 0xb8e0, 0xb8d7, 0xb8dc, 0xb8d3, 0xb8d4, 0xe050, 0xe04d, 0xe045, 0xe04a, 0xb8e2, 0xe051, 0xb8e3, 0xb8d9, 0xa058, 0xe047, 0xe04f, 0xe04b, 0xe04e, 0xe04c, 0xb8dd, 0xe046, 0xb8d8, 0xe44c, 0xbb78, 0xbb7b, 0xe44e, 0x8fd6, 0xbba5, 0xe44d, 0xbb7d, 0x99d8, 0xbdcf, 0xe44f, 0xbba4, 0xe44b, 0xbba6, 0x8fd3, 0xbb79, 0xb8db, 0xbb7c, 0xbb7a, 0xbb7e, 0xbba2, 0xbb77, 0xbba7, 0xbba3, 0x8fe5, 0xbba1, 0xe44a, 0x8fe9, 0xbdd6, 0xbdd2, 0x99d9, 0xbdd9, 0xe7d6, 0xbdda, 0xe7e2, 0xe7db, 0xbdcb, 0xe7e3, 0xe7dd, 0xbdd5, 0xe7de, 0xbdd4, 0xe7e1, 0xbdce, 0xe7df, 0xe7d5, 0xbdcd, 0xebaa, 0xbdd3, 0xbdd0, 0xbdd8, 0xe7d4, 0xe7d8, 0xbdcc, 0xe7d7, 0xe7d9, 0xe7da, 0xbdd7, 0xe7dc, 0xe7e0, 0xe7e4, 0x927c, 0xbddb, 0xbfd2, 0xeba5, 0xebab, 0xeba8, 0xeb7e, 0xebac, 0xeba1, 0xeba7, 0xbfcd, 0xbfd3, 0xebad, 0x9c45, 0xbfcf, 0xbfd9, 0xbfd4, 0xebaf, 0xeba9, 0xbfd0, 0xeba2, 0xbfda, 0xeba3, 0xeba4, 0xbfdb, 0xbfd8, 0xbdd1, 0xbfce, 0xebb0, 0xbfdc, 0xbfd5, 0xebae, 0xbfd1, 0xbfd6, 0xbfd7, 0xc1c3, 0xeea4, 0xeead, 0xeeaa, 0xeeac, 0xc1c0, 0xeea5, 0x8fde, 0xeeab, 0xc1bc, 0xeea7, 0xc1c4, 0xeea3, 0xeea8, 0xeeaf, 0xeba6, 0xeea9, 0xeea2, 0xc1bd, 0xeea1, 0xc1be, 0xeeb0, 0xc1bf, 0xeeae, 0xc1c2, 0xee7e, 0x8fdf, 0xc1c1, 0xeea6, 0xf0dc, 0xf0ea, 0xf0e5, 0xf0e7, 0xf0db, 0xc2d3, 0xf0da, 0xc2d6, 0xc2d5, 0xa04b, 0xf0e9, 0xf0e1, 0xf0de, 0xf0e4, 0xf0dd, 0xf0df, 0xf0e8, 0xf0e6, 0xc2d4, 0xf0ed, 0xf0eb, 0xf0e2, 0xf0ec, 0xf0e3, 0x8fe2, 0xf2f9, 0xc3cf, 0xf341, 0xa0cc, 0xf64f, 0xc3d6, 0xf0e0, 0xf2f7, 0xc3d2, 0xf2f8, 0xf2fd, 0x8fe3, 0x8fe4, 0xc3d4, 0xc3d5, 0xf2f6, 0xf340, 0xf342, 0xf2fa, 0xf2fc, 0xf2fe, 0xf2fb, 0xf343, 0xc3d1, 0xc3d7, 0xc3d3, 0xc3d0, 0xf4d0, 0x9bc4, 0xc4b7, 0xf4ce, 0x9bfc, 0xf4d2, 0xf4d3, 0xc4b5, 0xf4d4, 0xf4d1, 0x964c, 0xf4cf, 0xc4b8, 0xc4b4, 0xf4d5, 0xc4b6, 0xc4b3, 0xc4fe, 0xc540, 0xf64e, 0xf64d, 0xf650, 0xf651, 0xc541, 0xf756, 0xf75b, 0xc5aa, 0x9af6, 0xf758, 0x8cae, 0xf757, 0xf75a, 0xf759, 0xf843, 0xc5dc, 0xf842, 0xf840, 0xf841, 0x8fe7, 0xc5fe, 0xc5fd, 0xf8c1, 0xf8c2, 0xc640, 0xf94d, 0xf94e, 0xc667, 0x8fe8, 0xc66d, 0xf9a9, 0xf9c8, 0x8be7, 0x897a, 0x897b, 0xa8a6, 0xd7cd, 0xd7ce, 0xe052, 0xe450, 0xe7e5, 0xc1c6, 0xc1c5, 0xf0ee, 0xf344, 0xf844, 0xa8a7, 0xd3de, 0xb05a, 0xb361, 0xe054, 0xe053, 0xbddc, 0xe7e6, 0xbddd, 0xeeb1, 0xc2d7, 0x99da, 0xc676, 0xa8a8, 0xcdcb, 0xd3df, 0xb362, 0xd7cf, 0xd7d0, 0xdbe5, 0xb648, 0xb8e6, 0xe056, 0xe055, 0xe057, 0xe451, 0xe452, 0xbba8, 0xbfdd, 0xbdde, 0xbfde, 0xeeb5, 0xeeb2, 0xeeb4, 0xeeb3, 0xc1c7, 0xf0ef, 0xf346, 0xf345, 0xcba4, 0xb05c, 0xb05b, 0xd3e0, 0xd7d1, 0xdbe7, 0xdbe6, 0xb649, 0xe059, 0xe05a, 0xe058, 0xb8e8, 0xb8e7, 0xbbaa, 0xbba9, 0xe7e7, 0xebb3, 0xebb1, 0xebb2, 0xbfdf, 0xeeb7, 0xeeb6, 0xf0f2, 0xf0f1, 0xf0f0, 0xf347, 0x8fed, 0xf9aa, 0xa8a9, 0xad73, 0x95c0, 0xad74, 0xb05d, 0xb05e, 0xd3e2, 0xd3e1, 0xd7d2, 0xb368, 0xb366, 0xb363, 0xb367, 0xb365, 0xb364, 0xa0cb, 0xb64a, 0xdbea, 0xb8ed, 0xb64c, 0xb651, 0xdbec, 0xb653, 0xb652, 0xb655, 0xdbeb, 0xdbe8, 0xb64f, 0xb64b, 0xb64d, 0xdbe9, 0xb654, 0xb650, 0xb64e, 0xb8ef, 0xb8ee, 0xb8ec, 0xb8f0, 0xb8ea, 0xb8eb, 0xb8e9, 0xe05b, 0x9e48, 0xe454, 0xbbac, 0xbbad, 0xbbab, 0x99db, 0xe453, 0x8ff3, 0xe455, 0xe7ea, 0xe7ec, 0x8ff9, 0xbde7, 0xe7ed, 0xbde0, 0xe7e9, 0xbddf, 0xbde9, 0xbde5, 0xbde6, 0xbde2, 0xe7e8, 0xbde1, 0xe7ee, 0xe7eb, 0x95c1, 0xbde8, 0xa04e, 0xbde3, 0xbde4, 0xebb5, 0xebb7, 0xebb6, 0x99dc, 0xebb8, 0xbfe0, 0xebb4, 0xa064, 0xc1cb, 0xeeb8, 0xc1c8, 0xc1cc, 0xc1ca, 0xc1c9, 0xf0f3, 0xf0f6, 0xf0f5, 0x8ff7, 0xf0f4, 0xc2d8, 0xf348, 0xf349, 0xc3d8, 0xf34a, 0xc3d9, 0x89b0, 0xa048, 0xc4ba, 0xc4b9, 0xf652, 0x8ffb, 0x8ff6, 0xc542, 0xf653, 0xf75c, 0xc5ab, 0xc5ac, 0x9ddc, 0xf845, 0xc642, 0x99dd, 0x8be8, 0xa8aa, 0xb36a, 0xb369, 0xe05c, 0xe05d, 0xbbae, 0xebb9, 0xbdea, 0xebba, 0xeeb9, 0xa8ab, 0xd0b2, 0xad76, 0xad75, 0xd3e3, 0xb05f, 0xd3e4, 0xd7d5, 0x92c1, 0xd7d4, 0xd7d3, 0xdbee, 0xb658, 0x9fd6, 0xdbed, 0xb657, 0xdbef, 0xb656, 0xe05f, 0xe062, 0xe060, 0xe061, 0xe065, 0xe05e, 0xe066, 0xe063, 0xe064, 0xbbb0, 0xe456, 0xbbaf, 0xe7f2, 0xe7f0, 0xbdeb, 0xe7ef, 0xe7f1, 0xbdec, 0xebbb, 0xa0d2, 0xebbc, 0xc1cd, 0x9040, 0xf34c, 0xf34e, 0xf34b, 0xf34d, 0xf4d6, 0xf654, 0xf96f, 0xa8ac, 0xad77, 0xd3e5, 0xd3e7, 0xd3e6, 0xd7d8, 0xb36c, 0xd7d6, 0xb36b, 0xd7d9, 0x8ac4, 0xd7da, 0xd7d7, 0x99e0, 0xdbfb, 0xb660, 0xdbf3, 0xdbf9, 0xb65b, 0xb65e, 0xdbf2, 0xb659, 0xdbf6, 0xe06c, 0xb65d, 0xdbf1, 0x9ff0, 0xdbf7, 0xdbf4, 0xdbfa, 0xdbf0, 0xdbf8, 0xb65c, 0xb65f, 0xdbf5, 0xb65a, 0xb8f2, 0xe068, 0xb8f1, 0xe06f, 0xe06e, 0xb8f8, 0xb8f9, 0xe070, 0xb8f3, 0xe06d, 0xb8f7, 0xe072, 0xe069, 0xe06b, 0xb8f4, 0xe067, 0xe06a, 0xe071, 0xb8f5, 0xe073, 0xb8f6, 0xbbb1, 0xe45b, 0xe461, 0xe459, 0xe462, 0x9ff3, 0xe458, 0xe45d, 0xe463, 0xe460, 0xe45f, 0xe45e, 0xe457, 0xe45c, 0xe45a, 0x9dbf, 0xbdf1, 0xbdee, 0xe7fb, 0xe841, 0xe843, 0xe840, 0xe7f8, 0xe7fa, 0xe845, 0xe842, 0xe7fc, 0xe846, 0xe7f9, 0xe844, 0xbdef, 0xbdf5, 0xbdf3, 0xe7f3, 0xbdf4, 0xbdf0, 0xe7f4, 0xe7f6, 0xe7f5, 0xe7fd, 0xe7fe, 0x9ff6, 0xbdf2, 0x95c8, 0xbded, 0x9e5a, 0xe7f7, 0xebc6, 0xbfe2, 0xebbd, 0xbfe3, 0xbfe6, 0xebc2, 0xebbf, 0xbfe5, 0x99e3, 0xebc3, 0xebc4, 0xebbe, 0xebc7, 0xebc0, 0xebc5, 0xbfe4, 0xbfe1, 0xebc1, 0x8a4a, 0xeebf, 0xc1d0, 0xc1ce, 0xc1d1, 0xc1cf, 0xeebe, 0xeebb, 0xeeba, 0x9ff1, 0xeebd, 0xeebc, 0xf145, 0xc2de, 0xf0fb, 0xf0fa, 0xc2d9, 0xf141, 0xf140, 0xf0f7, 0xf143, 0xf0fc, 0xc2dd, 0xf0f9, 0xf142, 0xf0f8, 0xc2da, 0xc2dc, 0xf0fd, 0xc2db, 0xf0fe, 0x8aa7, 0xf144, 0xf352, 0xc3de, 0xf34f, 0xf353, 0x99e6, 0xc3db, 0xf351, 0xc3e0, 0x9ff7, 0xc3dd, 0x9fed, 0xf350, 0xc3df, 0xf354, 0xc3da, 0x8a5c, 0x9dae, 0xc4bc, 0xc4be, 0xf4d9, 0xc4bd, 0xf4d7, 0xc3dc, 0xf4d8, 0xc4bb, 0xc543, 0xc545, 0xf656, 0xc544, 0xf655, 0xf761, 0xc5ad, 0xf760, 0xc5ae, 0xf75e, 0xf75d, 0xf762, 0xf763, 0xf846, 0xf75f, 0xf8c6, 0xf8c3, 0xf8c4, 0xf8c5, 0xc65c, 0xf951, 0xf950, 0xf94f, 0xf970, 0x95c9, 0xf9be, 0xf9ab, 0xc66e, 0xa8ad, 0xb060, 0x9048, 0x99e8, 0xb8fa, 0x9049, 0x8cba, 0xbdf6, 0x90b1, 0xebc8, 0xc2df, 0xf355, 0x904a, 0xf9ac, 0xa8ae, 0xaaee, 0xad79, 0xad78, 0x99ea, 0xb063, 0xd3e8, 0xb061, 0xd3e9, 0xb062, 0xd7df, 0xd7db, 0x9bd1, 0xb36d, 0xd7de, 0xd7dd, 0xd7dc, 0xb36e, 0xd7e0, 0xd7e1, 0x99eb, 0x99ec, 0xdc43, 0xdc41, 0xdc45, 0xdc46, 0xdc4c, 0xdc48, 0xdc4a, 0x99ed, 0xdc42, 0xdbfc, 0xdc49, 0x99ee, 0xdc4b, 0xdc44, 0xdc47, 0xdbfd, 0xb662, 0xdc40, 0xdbfe, 0xb661, 0xb663, 0xb8fd, 0xe075, 0xe077, 0xe076, 0xe07b, 0xb8fb, 0xe078, 0xe074, 0xe079, 0xe07a, 0xb8fc, 0xb8fe, 0xe07c, 0xe467, 0xe466, 0xe464, 0xe465, 0xbbb3, 0xbbb5, 0xbbb2, 0xbbb4, 0xe84d, 0xe84e, 0xe849, 0x904c, 0xe84a, 0xbdf8, 0xbdfd, 0xbdf7, 0xbdfe, 0xbdf9, 0xe84b, 0xe84c, 0xe848, 0xbe40, 0xbdfb, 0xbdfa, 0xbdfc, 0xe847, 0x904d, 0xebca, 0xbfe8, 0x95cb, 0xebcc, 0xbfea, 0xebcf, 0xebcb, 0xebc9, 0xebce, 0xbfe9, 0xebcd, 0xbfe7, 0xc1d3, 0xc1d6, 0xeec1, 0x97e2, 0xc1d4, 0xeec0, 0xc1d2, 0xc1d5, 0xf146, 0xf147, 0xf148, 0xc2e0, 0x95cc, 0xf149, 0xc2e1, 0xc3e2, 0xf358, 0xf359, 0xf357, 0xf356, 0xf35a, 0xc3e1, 0xf4dd, 0xf4db, 0xf4dc, 0xf4de, 0xf4da, 0xf4df, 0xf658, 0x9f78, 0xf659, 0xf657, 0xc546, 0xf764, 0xc5af, 0xf765, 0xf848, 0xf847, 0x897c, 0x897d, 0x897e, 0x995d, 0xa8af, 0xb664, 0xb940, 0x9b5a, 0xbbb6, 0x9050, 0xbfec, 0x8c4f, 0xbfeb, 0xc3e3, 0xc47c, 0xc547, 0xa8b0, 0xb064, 0xb941, 0x9054, 0xf35b, 0xc6d6, 0x9aa8, 0x99ef, 0xfeeb, 0x9da3, 0x9da1, 0x9943, 0x9945, 0x9d7d, 0xcba6, 0x99f0, 0xa8b1, 0xa8b4, 0xa8b3, 0xa8b2, 0xcba5, 0x99f1, 0xcdcd, 0x99f2, 0xcdcf, 0xaaef, 0x8cbc, 0x9d60, 0xaaf1, 0xcdcc, 0xcdce, 0xaaf0, 0xcdd1, 0xcdd0, 0xcdd2, 0xa0a3, 0xd0b6, 0xd0b4, 0xad7c, 0xd0b3, 0xada3, 0xad7e, 0xad7b, 0xada4, 0xad7d, 0xada2, 0xada1, 0xd0b5, 0xad7a, 0xb06a, 0xd3eb, 0xd3f1, 0xb067, 0xb06e, 0x905b, 0xb069, 0xd3ee, 0xd3f0, 0xb06c, 0xd3ea, 0xd3ed, 0xb068, 0xb065, 0xd3ec, 0xb06b, 0xd3ef, 0xb06d, 0xb066, 0x9edb, 0xd7e3, 0xd7e6, 0xb370, 0xb37a, 0xb376, 0xd7e4, 0x9d79, 0xb37e, 0xb377, 0xb37c, 0xb372, 0xb36f, 0xb371, 0xb37d, 0xd7e5, 0xb375, 0xb378, 0xb374, 0xb379, 0xd7e7, 0xb37b, 0xb373, 0xd7e2, 0xdc4d, 0xb665, 0xdc4f, 0xb667, 0xb669, 0x99f3, 0xdc4e, 0xb666, 0xb66a, 0x9062, 0xb668, 0xb947, 0xe0a3, 0xb94f, 0xe07e, 0xb950, 0xb945, 0xe0a1, 0xb94a, 0xe0a2, 0xb943, 0xb942, 0x9f55, 0xb94d, 0xb94c, 0xb94b, 0xb949, 0xb94e, 0xe07d, 0xb944, 0xb946, 0xb948, 0x9bf9, 0xbbb8, 0xbbbb, 0xbbbf, 0xbbb9, 0xbbbe, 0xbbbc, 0xbbb7, 0x9065, 0xbbbd, 0xbbba, 0x96e0, 0xe852, 0xbe43, 0xbe41, 0xe853, 0x98be, 0xbe44, 0xbe42, 0xe851, 0xe850, 0xbff0, 0xe84f, 0xbfee, 0xbfed, 0xebd0, 0xbe45, 0xbfef, 0xebd1, 0xbff2, 0xebd2, 0xbff1, 0xc1d8, 0xeec3, 0xc1d7, 0xc1dc, 0xc1da, 0xc1db, 0xc2e3, 0xc1d9, 0xeec2, 0xebd3, 0xc2e2, 0xc2e4, 0xc3e4, 0xc3e5, 0xf4e0, 0xc5de, 0xc5dd, 0xa8b6, 0xca55, 0xb06f, 0xca52, 0xca53, 0xca51, 0xca54, 0xcbaa, 0xcba7, 0xcbac, 0xcba8, 0xa8b7, 0xa8ba, 0xcba9, 0xa8b9, 0xcbab, 0x9068, 0xa8b8, 0x906c, 0xcdd5, 0xcdd7, 0xaaf4, 0xcdd3, 0xcdd6, 0xcdd4, 0xaaf2, 0xaaf5, 0xaaf3, 0x95d8, 0xd0b8, 0xd0bc, 0xd0b9, 0xada7, 0xada8, 0x906a, 0xd0bb, 0xd0bd, 0xd0bf, 0xada5, 0xd0be, 0xada6, 0xd7ee, 0xd0ba, 0xd3f2, 0xd3fb, 0xd3f9, 0xd3f4, 0xd3f5, 0xd3fa, 0xd3fc, 0xb071, 0xd3f7, 0xd3f3, 0xb070, 0xb072, 0xd3f6, 0xd3fd, 0xd3f8, 0xb3a1, 0xd7f1, 0xd7e9, 0xd7ef, 0xd7f0, 0xb3a2, 0xd7e8, 0xd7ea, 0xd0b7, 0xd7ec, 0xd7ed, 0xd7eb, 0xb66c, 0xdc56, 0xebd4, 0xdc57, 0xdc54, 0xb3a3, 0xb66e, 0xdc53, 0xdc59, 0xdc58, 0xb66b, 0xdc5c, 0xdc52, 0xdc5b, 0xdc50, 0xdc5a, 0xdc55, 0xb66d, 0xe0aa, 0xe0a5, 0xe0ab, 0xe0a6, 0xe0a4, 0xe0a7, 0xb951, 0xe0a9, 0xe0a8, 0xb952, 0xbbc1, 0xbbc0, 0xe46e, 0xe471, 0xe469, 0xe46d, 0xbbc2, 0xe46c, 0xe46a, 0xe470, 0xe46b, 0xe468, 0xe46f, 0xe859, 0xbe48, 0xf14a, 0xe856, 0xe857, 0xe855, 0xdc51, 0xbe47, 0xe85a, 0xe854, 0xbe46, 0xbe49, 0xe858, 0xebd5, 0xbff3, 0xebd6, 0xebd7, 0xeec4, 0xc1dd, 0xf14b, 0xf14c, 0xf14d, 0xf35d, 0xf35c, 0xf4e2, 0xf4e1, 0xf65b, 0xf65c, 0xf65a, 0xf766, 0xc5b0, 0xa8bb, 0xadaa, 0xada9, 0xb075, 0xb074, 0xd440, 0xd441, 0xd3fe, 0x9fb2, 0xb073, 0xd7f5, 0xd7f6, 0xd7f2, 0xb3a4, 0xd7f3, 0x9fae, 0xd7f4, 0x9fb0, 0x89ad, 0xdc5f, 0xdc61, 0xdc5d, 0xdc60, 0xb66f, 0xdc5e, 0xb670, 0x906e, 0xdd73, 0xb955, 0xb954, 0xb953, 0xe0ac, 0xe0ad, 0x9e71, 0xe473, 0xe475, 0xbbc6, 0xbbc3, 0x9e4a, 0xbbc5, 0xbbc4, 0xe474, 0xe472, 0x9fdc, 0xe861, 0xe85e, 0xe85f, 0xbe4d, 0xe860, 0xe85b, 0xe85c, 0xbe4a, 0xbe4b, 0xe85d, 0xbe4c, 0x89ab, 0xebdb, 0x9fb8, 0xebdc, 0xebd9, 0xebda, 0xbff4, 0xebd8, 0xeec8, 0xeec5, 0xeec7, 0xc1e0, 0xeecb, 0xc1df, 0xeec9, 0xeecc, 0xeeca, 0xeec6, 0xc1de, 0xf14f, 0xf150, 0xf14e, 0x9070, 0xf152, 0xc2e5, 0xc2e6, 0xf35f, 0xc3e7, 0xf151, 0xf35e, 0xc3e6, 0xf4e5, 0xf4e6, 0xc4bf, 0xf4e4, 0x8b63, 0xf4e3, 0xf65d, 0xc548, 0x95dc, 0xf849, 0xf8c8, 0xf8c7, 0xc643, 0xc65d, 0xf8c9, 0xf971, 0x9071, 0xc66f, 0xa8bc, 0xaaf6, 0xb956, 0xc4c0, 0xa8bd, 0xadab, 0xb3a5, 0xb671, 0xc2e7, 0xaaf7, 0xd0c1, 0xd0c0, 0xd442, 0xfc5e, 0xb078, 0xb076, 0xb07a, 0xd444, 0xb079, 0xb077, 0x8949, 0xd443, 0xb3a8, 0xd7fc, 0x965b, 0xb3a7, 0xb3a9, 0xd842, 0xb3ab, 0xd7fe, 0xd840, 0xd7f7, 0xb3aa, 0xd843, 0xd7f9, 0xd7fa, 0xd7f8, 0xb3a6, 0x8c50, 0xd841, 0xd7fb, 0xd7fd, 0x94a6, 0xdc6d, 0x8fd5, 0xdc6c, 0xdc6a, 0xdc62, 0xdc71, 0xdc65, 0xdc6f, 0xdc76, 0xdc6e, 0xb679, 0x9e73, 0xb675, 0xdc63, 0xdc69, 0xb677, 0x9075, 0xdc68, 0xb678, 0xb67a, 0xdc6b, 0x99f7, 0xb672, 0xb673, 0xdc77, 0xdc75, 0xdc74, 0xdc66, 0xdc72, 0xb676, 0x8cbf, 0xb674, 0xdc73, 0xdc64, 0xdc67, 0xdc70, 0x99f9, 0x9663, 0x95b9, 0xe4ba, 0xe0b7, 0xe0b0, 0xe0c3, 0xe0cc, 0xe0b3, 0xb961, 0x94d4, 0xe0c0, 0xb957, 0xb959, 0xb965, 0xe0b1, 0xfcfa, 0xb95a, 0xb95c, 0xb966, 0xb95b, 0x9077, 0x90ab, 0xb964, 0xe0b9, 0xe0ae, 0xb962, 0xe0b8, 0xb95e, 0xe0ca, 0xb963, 0xe0c8, 0xe0bc, 0xe0c6, 0xb960, 0xe0af, 0xe0c9, 0xe0c4, 0x9d4d, 0xe0cb, 0xb958, 0x99fa, 0xb967, 0xb95d, 0x92e3, 0xe0b5, 0x97bb, 0xe0bd, 0xe0c1, 0x9078, 0xe0c5, 0xb95f, 0xe0b4, 0xe0b2, 0xe0be, 0x99fb, 0xe0bb, 0xe0ba, 0x97e0, 0xe0bf, 0xe0c2, 0xe0c7, 0xe478, 0x96dc, 0xbbc7, 0xe4a4, 0xe47a, 0xbbcc, 0xbbd0, 0xe4ad, 0xe4b5, 0xe4a6, 0xbbc8, 0x9ca8, 0xe4aa, 0xe0b6, 0x9772, 0xbbc9, 0xe4b1, 0xe4b6, 0xe4ae, 0x9440, 0xe4b0, 0xe4b9, 0xe4b2, 0xe47e, 0xe4a9, 0x92f2, 0xbbd1, 0xbbcd, 0xe47c, 0xe4ab, 0xbbcb, 0xe4a5, 0xbbca, 0xe4b3, 0xe4a2, 0xe479, 0xbbce, 0xe4b8, 0xe47b, 0xe4af, 0xe4ac, 0xe4a7, 0xe477, 0xe476, 0xe4a1, 0xe4b4, 0xbbcf, 0xe4b7, 0xe47d, 0xe4a3, 0xbe52, 0x99fd, 0x99fc, 0xbe5a, 0xbe55, 0xe8a4, 0xe8a1, 0xe867, 0xbe50, 0xf9d7, 0x964a, 0xbe4f, 0xbe56, 0x96d8, 0x99fe, 0xe865, 0xbe54, 0xe871, 0xe863, 0xe864, 0xbe4e, 0xe8a3, 0xbe58, 0xe874, 0xe879, 0xe873, 0xebee, 0xe86f, 0xe877, 0xe875, 0xe868, 0xe862, 0xe87d, 0xbe57, 0xe87e, 0x904b, 0xe878, 0xe86d, 0xe86b, 0xe866, 0xfa41, 0xe86e, 0xe87b, 0xe86a, 0xe87a, 0xe8a2, 0x9a40, 0xbe53, 0x975b, 0xe876, 0xe87c, 0xe872, 0xe86c, 0xbe51, 0x9a41, 0x91dd, 0xe4a8, 0xe870, 0xbe59, 0xe869, 0x93fc, 0x9a42, 0x9a43, 0x9659, 0xebf4, 0xbff7, 0xebf3, 0xebf0, 0xec44, 0xbffb, 0x9a44, 0xec41, 0xebf8, 0xec43, 0xebe9, 0xebf6, 0x9051, 0xbffd, 0xebe1, 0x94bf, 0xebdf, 0xec42, 0xec40, 0xebfe, 0xebed, 0xebec, 0xebe2, 0xc040, 0xebe8, 0xebf2, 0xebfd, 0xc043, 0xec45, 0xc1e8, 0xc045, 0xbffe, 0xebe6, 0xebef, 0xebde, 0xebe0, 0xbff5, 0xc042, 0xbffa, 0xebe7, 0xebf7, 0xebf1, 0xc041, 0xebdd, 0xc1e3, 0xebf9, 0xebfc, 0xbffc, 0x90a2, 0xebeb, 0xc044, 0xbff9, 0x9cab, 0x9776, 0xbff8, 0xebf5, 0xebfb, 0xbff6, 0xebe4, 0xebfa, 0xebe5, 0xfc55, 0xfe45, 0x94a8, 0x9a45, 0xfa4b, 0x9de1, 0xebea, 0xeed2, 0x96d9, 0xeed7, 0xc1e5, 0xc1e7, 0xeedd, 0xc1e1, 0xeeec, 0xeee3, 0xeed8, 0xeed9, 0xeee2, 0xc1ee, 0xeee1, 0xeed1, 0xeee0, 0xeed4, 0xeeed, 0xc1ed, 0xc1eb, 0xeed5, 0xeee8, 0x9774, 0xeeda, 0xeee7, 0xfdf5, 0xeee9, 0xeed0, 0xc1e6, 0x92e5, 0xeeea, 0x9645, 0x91da, 0xeede, 0x90a3, 0xc1ea, 0xeedb, 0xa05f, 0xc1ec, 0xeee4, 0x90af, 0x97bf, 0xc1e4, 0xeed6, 0xeee5, 0x914c, 0xeedf, 0xebe3, 0xeee6, 0xeed3, 0x967a, 0xc1e9, 0xeeeb, 0x91de, 0xc1e2, 0xeece, 0x9a46, 0xfeb0, 0x9779, 0x946c, 0xf160, 0xf159, 0xc2e9, 0xf154, 0xf163, 0xf15b, 0xeedc, 0x9858, 0xf165, 0xf155, 0xc2e8, 0xf15f, 0xc2ea, 0xc2f2, 0xc2f0, 0xf161, 0xc2f1, 0xf157, 0x9266, 0xf158, 0xf15d, 0xf162, 0x93fb, 0xeecd, 0xc2eb, 0xf16a, 0xf167, 0xf16b, 0xf15e, 0xf15a, 0xf168, 0xf36a, 0xf15c, 0xc2ee, 0x9a47, 0xc2ed, 0xeecf, 0xc2ef, 0xf164, 0xf166, 0xc2ec, 0xf169, 0xf153, 0xf156, 0x9749, 0x9748, 0x934a, 0x9ce2, 0xf373, 0xf363, 0xc3eb, 0xf371, 0x9264, 0xf361, 0xc3ec, 0xf36c, 0x91df, 0xf368, 0xc3f1, 0xf372, 0xf362, 0xf365, 0xc3e9, 0xf374, 0xfb79, 0xf36d, 0xf370, 0xc3ef, 0xc3f4, 0xc3f2, 0xf369, 0xf364, 0x96d7, 0xc3ed, 0xc3ee, 0xf360, 0xc3ea, 0x9343, 0xc3e8, 0xc3f0, 0xf36f, 0xc3f3, 0xf36b, 0xf375, 0xc3f5, 0xf367, 0xf36e, 0xfdcb, 0xfe7a, 0x91db, 0x8c6a, 0xf4f3, 0xf542, 0xf4f5, 0xf4fc, 0xf366, 0xf4fa, 0xf4e9, 0xf540, 0xc4c3, 0xf4ed, 0xf4fe, 0xf4f4, 0x97af, 0xc4c2, 0x95dd, 0xf544, 0xf4f6, 0x9348, 0xf4fb, 0xf4fd, 0xf4e7, 0xf541, 0xf4f2, 0xf4f7, 0xf4eb, 0xf4ef, 0xf543, 0xf4f9, 0xf4e8, 0xf4ec, 0xf4ee, 0xf4f8, 0x9a4b, 0xc4c1, 0xf4f1, 0xfc45, 0x9a4d, 0xf4ea, 0x91bc, 0x90e2, 0x90b4, 0x95e1, 0xf4f0, 0xf661, 0xf666, 0xc54f, 0xf668, 0x9a4e, 0xc549, 0xf664, 0xf66a, 0xc54e, 0xc54a, 0xc54b, 0xf660, 0xf667, 0xc54d, 0xf665, 0xc54c, 0xf65f, 0xf663, 0xf662, 0x9a4f, 0xf65e, 0xf669, 0xfe40, 0xfe43, 0xc5b1, 0xf76d, 0xf770, 0xf76c, 0xf76e, 0xf76f, 0xf769, 0xf76a, 0xf767, 0x96dd, 0xf76b, 0xf768, 0xc5b2, 0xc5b3, 0x9a51, 0xf84b, 0xf84d, 0x96a7, 0x90b0, 0xf84c, 0xf84e, 0xc5e0, 0xf84a, 0xc5df, 0xc5e1, 0x9c4e, 0x9443, 0xf8cb, 0xf8cc, 0xc644, 0xf8ca, 0x8eba, 0xf953, 0xf952, 0xf954, 0xc65f, 0xf955, 0xc65e, 0xf956, 0xf972, 0xf975, 0xf974, 0xc668, 0xf973, 0x9a52, 0xfcc1, 0xc672, 0xc670, 0xc671, 0xc677, 0xf9c0, 0xf9c1, 0xf9bf, 0xf9c9, 0x8be9, 0x9caf, 0x8bfd, 0x9abc, 0x9ab8, 0x9aae, 0x9aa7, 0x9a53, 0x9d74, 0xaaf8, 0x8bea, 0xd844, 0xdc78, 0xe8a5, 0xf376, 0x8beb, 0xaaf9, 0xadac, 0xb07b, 0x90b2, 0xd845, 0xd846, 0xb3ac, 0xb67d, 0xdc7a, 0xdc79, 0xb6a3, 0xb67c, 0xdc7b, 0xb67e, 0xb6a2, 0xb6a1, 0xb67b, 0x95e9, 0x95e8, 0xb968, 0x95e6, 0xe0d0, 0xe0ce, 0xe0cf, 0xe0cd, 0x90b5, 0xbbd2, 0x9a54, 0xbbd5, 0xbbd7, 0xbbd6, 0x90b3, 0x95e7, 0xbbd3, 0xbbd4, 0x8b50, 0xe8a7, 0xe8a6, 0xbe5b, 0xe8a8, 0xe8a9, 0xbe5c, 0xec4d, 0xec4b, 0xeef3, 0xec49, 0xec4a, 0xc046, 0xec46, 0xec4e, 0xec48, 0xec4c, 0xeeef, 0xeef1, 0xeef2, 0xc1f3, 0xeeee, 0xc1f2, 0xeef0, 0xc1ef, 0xc1f0, 0xc1f1, 0xec47, 0xc2f5, 0xf16e, 0xf16c, 0xf16d, 0xc2f3, 0xc2f6, 0xc2f4, 0xf377, 0xf378, 0xc3f6, 0xf545, 0xf547, 0xf546, 0xc4c4, 0xc550, 0xf66d, 0xf66c, 0xf66b, 0x8bec, 0x9a56, 0xaafa, 0x8bfb, 0xc9aa, 0xca58, 0xa6e9, 0xca56, 0xca59, 0xca57, 0xcbae, 0xa8c1, 0xa8c2, 0xcbb0, 0xa8bf, 0xcbaf, 0xcbad, 0xa8c0, 0xa8be, 0x9a57, 0xa0aa, 0xcdd8, 0xcddb, 0xaafd, 0xcdda, 0xcdd9, 0xaafc, 0xaafb, 0x9fa6, 0xab40, 0xcddc, 0xaafe, 0x99cc, 0xd0c6, 0xadae, 0xadaf, 0xadb0, 0xd0c7, 0xd0c3, 0xadad, 0xd0c4, 0xd0c5, 0xd0c2, 0x9c59, 0xb0a4, 0xb0a1, 0xd445, 0xb0a2, 0xb0a5, 0xd446, 0xb07e, 0xb07c, 0xb07d, 0xb0a3, 0x99b5, 0xb3ad, 0xd849, 0xb3b5, 0xd848, 0xd84b, 0xb3b1, 0xd84a, 0xb6ab, 0xb3af, 0xb3b2, 0xb3ae, 0xb3b3, 0xb3b4, 0xb3b0, 0x90be, 0xd847, 0xb6a7, 0xdc7d, 0xdca3, 0x9faf, 0xdca2, 0xb6ac, 0xb6a8, 0xb6a9, 0xdc7c, 0xdc7e, 0xdca1, 0xb6a4, 0xb6a6, 0xb6aa, 0xb6a5, 0x95f2, 0xe0d3, 0xe0d1, 0xe0d2, 0xb96a, 0xb96b, 0x90bf, 0xe0d4, 0xb969, 0xbbd8, 0xbbda, 0xbbd9, 0xe4bb, 0xe4bc, 0xe8ab, 0x90c1, 0xe8aa, 0xfee4, 0xc047, 0xc048, 0xec4f, 0xc049, 0xeef6, 0xeef4, 0xeef5, 0xc1f4, 0xf16f, 0xc3f7, 0x90c4, 0xc1f5, 0xab41, 0xb0a6, 0xd447, 0x90c7, 0xd84c, 0xb3b6, 0xb6ad, 0xdca4, 0xdca6, 0xb6af, 0xb6ae, 0xb6b0, 0xb6b1, 0xdca5, 0xb96e, 0xb96f, 0xb96d, 0xbbdb, 0xb96c, 0xe0d5, 0xbbdc, 0xe8ac, 0xec50, 0xc04a, 0xc1f6, 0xf170, 0xf174, 0xc2f9, 0xf171, 0xc2fa, 0xc2f8, 0xf175, 0xc2fb, 0xf173, 0xf379, 0xc2f7, 0xc3f8, 0xf8cd, 0xab42, 0xb3b8, 0xb3b7, 0xb6b2, 0xdca8, 0xdca7, 0xb6b3, 0x92e4, 0xe0d9, 0xb973, 0xb970, 0xe0d8, 0xb972, 0xe0d6, 0xb971, 0xe0d7, 0xe4bd, 0xbbdd, 0xe8af, 0x9f52, 0xbe5d, 0xe8ad, 0xbe5e, 0xbe5f, 0xe8ae, 0xbe60, 0xec51, 0xc04e, 0xc04b, 0xc050, 0xec53, 0xc04c, 0xec52, 0xc04f, 0xc04d, 0xeef9, 0xeefb, 0x90db, 0xc1f7, 0xeefa, 0xc1f8, 0xeef8, 0xeef7, 0xa066, 0xf177, 0xf176, 0xc2fc, 0xf178, 0xf37e, 0xc3fa, 0xf37d, 0xf37a, 0xc3f9, 0xf37b, 0xf37c, 0xf548, 0xf549, 0xc4c5, 0x90d2, 0xc553, 0xf66e, 0x90d4, 0xc551, 0xc552, 0xf66f, 0xc5b4, 0xc5b5, 0xf771, 0x9a5b, 0x95fd, 0xc645, 0xf8cf, 0xc647, 0xf8ce, 0xf8d0, 0xc646, 0xf957, 0xf9ad, 0x8bc4, 0xab43, 0x8c66, 0xb974, 0x90de, 0xe4be, 0xe8b0, 0xc051, 0xc052, 0x9ce4, 0xab44, 0x90e1, 0xbe61, 0xc3fb, 0xadb1, 0xc053, 0xc5e2, 0xadb2, 0xd84d, 0xdca9, 0x9e46, 0xdcab, 0xdcaa, 0x9651, 0xe0dd, 0xe0da, 0xb975, 0xb976, 0xe0db, 0xe0dc, 0xe4c0, 0xe4c5, 0xbbde, 0xe4bf, 0xe4c1, 0xe4c8, 0xe4c3, 0xe4c7, 0xe4c4, 0xe4c2, 0xe4c6, 0xbbdf, 0xfb58, 0xe8b3, 0x90e6, 0xe8b1, 0xbe63, 0xbe62, 0xe8b2, 0xbe64, 0xec56, 0xec55, 0xc054, 0xec54, 0xeefc, 0x9650, 0xeefe, 0xef41, 0xef40, 0x90e7, 0xc1f9, 0xeefd, 0xf1a1, 0xc2fd, 0xf17d, 0xf1a2, 0xc2fe, 0xf17b, 0xf17e, 0xf17c, 0xf179, 0xc340, 0xf17a, 0x90e8, 0x9a5d, 0xf3a1, 0x9f7a, 0xf3a3, 0xf3a2, 0x9b5c, 0xf54a, 0x9f7c, 0xf54b, 0xfc52, 0x90e9, 0xf670, 0x90ea, 0xc5b7, 0x9a5e, 0xc5b6, 0xf84f, 0xf850, 0xc648, 0xf8d1, 0x9f76, 0xc669, 0xadb3, 0xb6b4, 0xe4ca, 0xe4c9, 0xe8b5, 0xe8b4, 0x90eb, 0xc1fa, 0xef43, 0xef42, 0xf1a5, 0xf1a3, 0xf1a6, 0xf1a4, 0xc3fc, 0xf3a4, 0xf3a5, 0xf3a6, 0x90ec, 0xf671, 0xf772, 0xf8d2, 0x8bee, 0xadb4, 0x90ee, 0xec57, 0xef44, 0x91c6, 0xadb5, 0x90f2, 0xbbe0, 0xec58, 0xc341, 0xf1a7, 0xc3fd, 0xf54c, 0xf54d, 0xc554, 0xf851, 0xadb6, 0xb3bb, 0xb3bc, 0xd84e, 0xb6b5, 0xb6b6, 0xdcac, 0xb6b7, 0xb97a, 0xb97c, 0xe0df, 0xe0e0, 0xe0de, 0xb977, 0xb978, 0xb97b, 0xb979, 0xfcbc, 0x8a74, 0xe4cb, 0xbbe1, 0xbbe2, 0xe8bc, 0xbe67, 0xe8b7, 0xe8b6, 0x9657, 0xe8bb, 0xbe65, 0x9cef, 0xc05b, 0xe8b8, 0xe8bd, 0xe8ba, 0xe8b9, 0xbe66, 0xc059, 0x9fdf, 0xec5a, 0xc055, 0xec5b, 0x90f7, 0x90f6, 0xec59, 0xc058, 0xc056, 0xc05a, 0xc057, 0xef45, 0xef4a, 0xef46, 0xef49, 0xc1fb, 0x9b5e, 0xedd4, 0xef48, 0xef47, 0x90f8, 0xc344, 0xc342, 0xc345, 0xc343, 0xf1a8, 0xf1a9, 0xf1aa, 0xc346, 0xf3aa, 0xc440, 0xf3a8, 0xc441, 0xf3a7, 0xf3a9, 0xc3fe, 0xf551, 0xf54e, 0xf54f, 0xf550, 0xf672, 0xc556, 0x90f9, 0xc555, 0x8cc9, 0xf774, 0xf773, 0xc5b8, 0xfa6a, 0xc5e3, 0xc649, 0xc660, 0xf958, 0xf9ae, 0xf9af, 0x8bef, 0xadb7, 0xdcad, 0xe0e1, 0xe4cc, 0xe4cd, 0xbbe3, 0xbbe4, 0xe8be, 0xbe68, 0x9fe0, 0xc1fc, 0x9142, 0xf1ab, 0x9a62, 0xc347, 0xf3ad, 0xc442, 0xf3ac, 0xf3ae, 0xf3ab, 0xf675, 0xf552, 0xf553, 0x9569, 0xc4c6, 0xf674, 0x9144, 0x9143, 0xf673, 0x9141, 0xf775, 0xf9b0, 0x8bf0, 0xadb8, 0x9660, 0x8bf1, 0xadb9, 0x99f6, 0x9149, 0xb0a7, 0xd448, 0xd84f, 0x914a, 0xb6b8, 0xb6bb, 0xb6b9, 0xdcae, 0x914b, 0xb6bd, 0xb6ba, 0x9a64, 0xb6bc, 0xb97e, 0x8abf, 0xe0e2, 0xe0e3, 0xe8c0, 0xb97d, 0xb9a1, 0xb9a2, 0xe4cf, 0xe4ce, 0xbbe5, 0xbbe6, 0xe4d0, 0xe8bf, 0xbbe8, 0xbe69, 0xbbe7, 0x9a66, 0xc05c, 0xe8c1, 0xbe6b, 0xbe6a, 0xe8c2, 0xe8c5, 0xe8c3, 0xe8c4, 0xbe6c, 0x9a67, 0xc061, 0xc05f, 0x9a69, 0xc05e, 0xec5d, 0xc060, 0xec5c, 0xef4b, 0xec5e, 0xc05d, 0xec5f, 0xef4e, 0xef4c, 0xef4d, 0xef52, 0xc34b, 0xef51, 0xef54, 0xef53, 0xef50, 0xef4f, 0xc1fd, 0x9a6a, 0x9652, 0x914d, 0xf1ae, 0x9666, 0xf1ad, 0xc34a, 0xc348, 0xc349, 0x9f7b, 0xf1ac, 0x9a6b, 0xf3b1, 0xc443, 0xf3b0, 0xf3af, 0xc444, 0xa06c, 0xf558, 0xf557, 0x9667, 0xf555, 0xf554, 0xc4c8, 0xc4c7, 0xf559, 0xf776, 0xc5b9, 0xf677, 0xc557, 0xf676, 0xf556, 0xf777, 0xc5e4, 0x9a6c, 0xc661, 0xf959, 0xf9b1, 0x9a6d, 0x8bf2, 0xadba, 0xd850, 0xef55, 0xadbb, 0x966a, 0xe4d2, 0xe4d1, 0xec60, 0xef57, 0xef56, 0xfcea, 0xc34c, 0xf3b2, 0xf3b3, 0xc4c9, 0x966c, 0xf9b2, 0xb0a8, 0xb6bf, 0xb6be, 0xe0e4, 0xe0e6, 0xb9a4, 0xe0e5, 0xb9a3, 0xb9a5, 0xe0e7, 0x91c4, 0xe4d4, 0xe4d6, 0xe4d5, 0x9677, 0xe4d8, 0xbbe9, 0xe4d7, 0xe4d3, 0x99f4, 0x9a6f, 0xe4d9, 0xe8cc, 0xe8cf, 0xe8d1, 0xe8c7, 0xe8cb, 0xe8c8, 0xbe6e, 0xbe71, 0xbe73, 0xe8c9, 0xe8ca, 0xbe72, 0xe8cd, 0xe8d0, 0xe8ce, 0xbe74, 0x9fab, 0xbe70, 0xe8c6, 0xbe6d, 0xbe6f, 0x8cbe, 0x8ec1, 0xc063, 0xec66, 0xec64, 0xec63, 0x9555, 0xec69, 0xec68, 0xec67, 0xec62, 0xc062, 0xec61, 0xec65, 0xc064, 0xef5a, 0x9152, 0xef5e, 0xef5b, 0xef5d, 0xef5c, 0xef59, 0xef5f, 0xef62, 0xef60, 0xef61, 0xc240, 0xc1fe, 0xef58, 0xef63, 0xf1b3, 0xf1b6, 0xf1b8, 0xf1b7, 0xf1b1, 0xf1b5, 0xf1b0, 0x9153, 0xf1b2, 0xc34d, 0xf1af, 0x9155, 0xf1b4, 0xf3c0, 0xf3b5, 0xc445, 0xc446, 0xf3b4, 0xf3b9, 0xf3bf, 0xf3b7, 0xf3be, 0x955d, 0xf3bb, 0x9671, 0xf3ba, 0xf3bd, 0xf3b8, 0xf3b6, 0x9c6d, 0xf3bc, 0xf560, 0xf55e, 0xc4ca, 0xf55d, 0xf563, 0xf561, 0x9673, 0xc4cb, 0xf55c, 0xf55a, 0xf55b, 0xc4cd, 0xf55f, 0xc4cc, 0xf562, 0xf678, 0xf67e, 0x9154, 0x9a71, 0xf679, 0xc55b, 0xf6a1, 0xc55a, 0xf67d, 0xf67c, 0xc559, 0xf67b, 0xc558, 0xf67a, 0xf77d, 0xf7a1, 0xf77e, 0xf77b, 0xc5bb, 0xf778, 0xf77c, 0xf7a3, 0xf7a2, 0xf779, 0xf77a, 0xc5ba, 0xf852, 0xc5e7, 0x9156, 0xf853, 0xc5e5, 0xc5e6, 0x966d, 0xf8d3, 0xc64a, 0xf976, 0xc66a, 0x9557, 0xf9b3, 0xc66b, 0xf9b4, 0xf9b5, 0xf9c3, 0xf9c2, 0xc67a, 0xf9cd, 0x89c6, 0x89c7, 0xb0a9, 0xe0e9, 0xe0e8, 0xbbea, 0xbbeb, 0xe4da, 0x8a6a, 0xe8d2, 0xec6c, 0x8b57, 0xbe75, 0xc065, 0xec6a, 0x9fe1, 0xec6d, 0xc066, 0x9b5f, 0xef64, 0xec6b, 0xf1b9, 0xc34e, 0xf3c1, 0xf566, 0xf564, 0xf565, 0xf6a2, 0xc55c, 0xf7a4, 0xc5ea, 0xc5bc, 0xc5e8, 0xc5e9, 0xf8d4, 0xc662, 0xa05d, 0xb0aa, 0xf1ba, 0xd449, 0x915b, 0xb9a6, 0x915c, 0xe4db, 0xbbec, 0xe4dc, 0xe8d4, 0xe8d3, 0xc068, 0xbe76, 0xbe77, 0xe8d7, 0xe8d6, 0xe8d5, 0x915e, 0xec6e, 0xec71, 0xec70, 0xec6f, 0xc067, 0xef68, 0xef66, 0xef65, 0x9f5c, 0xef67, 0x9f57, 0xc34f, 0xf1bc, 0xf1bd, 0xc350, 0xf1bb, 0x9f65, 0xf3c3, 0xf3c2, 0xf3c5, 0xc447, 0xf3c4, 0x9a72, 0xf567, 0xf569, 0xf568, 0x9160, 0xf6a3, 0xf6a6, 0xf6a4, 0xf6a5, 0xf7a5, 0xc5bd, 0xf854, 0xf855, 0xf856, 0xc64b, 0xc663, 0xf9b6, 0xb0ab, 0xbe78, 0xc069, 0xf1be, 0x9f5e, 0xf7a6, 0x9161, 0xf9c4, 0xd44a, 0xc67b, 0xb0ac, 0xec72, 0x9164, 0xf1bf, 0xf3c6, 0x9f41, 0xf6a7, 0xf7a7, 0xb0ad, 0xe4dd, 0xe4de, 0x9169, 0xbbed, 0xbbee, 0xe8d9, 0xbe7a, 0xbe79, 0xe8d8, 0xef69, 0xf1c0, 0xf1c2, 0xf1c1, 0xc353, 0xc352, 0xc351, 0x9168, 0xc55e, 0xf6a8, 0xc55d, 0xf7a9, 0xf7a8, 0xc64c, 0xf8d5, 0xb3bd, 0xe0ea, 0xe4e1, 0xe4df, 0xe4e0, 0xe8e2, 0xe8dd, 0xe8da, 0xe8e1, 0x9a74, 0xe8e3, 0xbe7c, 0xe8e0, 0xe8dc, 0xe8db, 0xe8df, 0xe8de, 0xbe7b, 0xec7d, 0xec78, 0xec76, 0xeca1, 0xec77, 0x96b2, 0xec73, 0x9a75, 0xec79, 0xfda5, 0xec74, 0xef72, 0xec75, 0xeca2, 0x9ee9, 0x8bba, 0x916d, 0xa060, 0xec7c, 0xc06a, 0xec7b, 0xec7a, 0xec7e, 0x9fde, 0xef6a, 0xef6d, 0x9fc3, 0xef6c, 0x96b5, 0xef74, 0xef6f, 0xef73, 0xef71, 0xef70, 0xef6e, 0xef6b, 0xc243, 0xc242, 0xc244, 0xc241, 0xef75, 0xa067, 0xf1c8, 0xf1cb, 0xf1c9, 0xf1cd, 0xf1ce, 0xf1c6, 0xc358, 0xf1c7, 0xf1c5, 0xf1cc, 0xf1c4, 0xf1c3, 0xc357, 0xc355, 0xc354, 0x96b3, 0xf1ca, 0xf3cf, 0xf3d5, 0xc44a, 0xf3d0, 0xf3d3, 0xf3d7, 0xc44b, 0xf3d2, 0x9a76, 0xf3ca, 0xf3c9, 0xf3d6, 0xf3cd, 0xf3cb, 0xf3d4, 0xf3cc, 0xc449, 0xc448, 0x95d5, 0xf3c7, 0xf3c8, 0xf3d1, 0x9eca, 0xf3ce, 0x9a77, 0x9a78, 0xf56c, 0xf56f, 0xc356, 0x9170, 0x916f, 0xf56d, 0xf573, 0xf571, 0xf56b, 0xf576, 0x9fa3, 0xf56a, 0x9171, 0xc4cf, 0xf572, 0x96b1, 0xf56e, 0xc4ce, 0xf575, 0x9f63, 0xf574, 0x9f67, 0xf6ab, 0xf6aa, 0x8bb9, 0x9a7a, 0xf6b1, 0xf6ad, 0xf6b0, 0xc560, 0x8b56, 0xf6ae, 0xf6af, 0xf6a9, 0xf6ac, 0xc55f, 0x9ada, 0xc5bf, 0xf7b4, 0xf7af, 0xf7b3, 0x96b0, 0xf7b6, 0xf7b2, 0xf7ae, 0x9a7e, 0xc5c1, 0xf7b1, 0xf7b5, 0xc5c0, 0xf7ac, 0xf570, 0xf7b0, 0xf7ad, 0x9dde, 0xf7aa, 0xf7ab, 0xc5be, 0xf85a, 0xf85c, 0xf85f, 0xf85b, 0xf860, 0x96ad, 0xf859, 0xf857, 0x96ae, 0xc5eb, 0xf85d, 0xc5ed, 0xc5ec, 0xf858, 0xf85e, 0x9ea1, 0xf8da, 0xc64d, 0xf8db, 0xf8d9, 0xf8d6, 0xf8d8, 0xf8d7, 0xf95a, 0xf95c, 0xf95b, 0xf979, 0x9e50, 0xf978, 0xf977, 0xf97a, 0xc673, 0xc674, 0xf9ca, 0xf9ce, 0x96af, 0x8bf4, 0xb3be, 0xdcaf, 0xe0ed, 0xb9a7, 0xe0eb, 0xe0ec, 0xe4e2, 0xe4e3, 0xbbf1, 0xbbef, 0xe4e4, 0xbbf0, 0xe8e8, 0xe8eb, 0xe8e5, 0xe8ec, 0xe8e4, 0xe8e6, 0xe8e7, 0xe8ea, 0x9fa4, 0xbea1, 0xe8ef, 0xe8ee, 0xbe7d, 0xe8e9, 0xe8ed, 0xbe7e, 0x96bd, 0xecac, 0xc06f, 0xeca7, 0xc06b, 0x96f4, 0xeca4, 0xecaa, 0xecad, 0xc070, 0xeca9, 0xeca6, 0xecae, 0xeca5, 0x96b8, 0xecab, 0xc06c, 0xeca3, 0xc06d, 0xc06e, 0xeca8, 0xefa9, 0xef7a, 0xef7b, 0xef7e, 0xef7c, 0xef76, 0xfaa1, 0xef79, 0xefa5, 0xef7d, 0x91a7, 0xc245, 0xefa7, 0xefa4, 0xc246, 0xefa6, 0xef77, 0xefa2, 0xefa3, 0xa05e, 0xefa1, 0x9a7d, 0xf1d2, 0xf1d4, 0xf1d7, 0x8948, 0xf1d1, 0x9eb1, 0xc359, 0xf1d9, 0xf1d0, 0xf1da, 0xf1d6, 0xf1d8, 0xf1dc, 0xf1d5, 0xf1dd, 0xf1d3, 0xf1cf, 0xc35a, 0x9ddb, 0xf1db, 0xc35b, 0xc44d, 0xef78, 0xf3f1, 0xf3e8, 0xc44f, 0xf3e4, 0xc450, 0x95bf, 0x8a73, 0xf3ed, 0xf3e7, 0xf3dd, 0xc44e, 0xf3ea, 0xf3e5, 0xf3e6, 0xf3d8, 0xf3df, 0xf3ee, 0xf3eb, 0x9efe, 0xf3e3, 0x917a, 0xf3ef, 0xf3de, 0xf3d9, 0xf3ec, 0x917b, 0xf3db, 0xf3e9, 0xf3e0, 0xf3f0, 0xf3dc, 0xc44c, 0xf3da, 0xf3e1, 0xf3e2, 0xf57d, 0xf57b, 0x9aa3, 0xf5a2, 0xf5ae, 0xf5a5, 0xf57c, 0xf578, 0xf5a7, 0xf57e, 0xf5a3, 0xf57a, 0xf5aa, 0xf577, 0xf5a1, 0xf5a6, 0xf5a8, 0xf5ab, 0xf579, 0x96c2, 0xf5af, 0xf5b0, 0xf5a9, 0xf5ad, 0xf5a4, 0x9f77, 0xf6c1, 0xf6c4, 0xc561, 0xf6c3, 0xf6c8, 0xf6c6, 0xc562, 0xf6bd, 0xf6b3, 0xf6b2, 0xc564, 0xf6bf, 0xf6c0, 0xf6bc, 0xf6b4, 0x9aa4, 0xf6b9, 0xf5ac, 0x9aa5, 0xf6b5, 0xc563, 0xf6bb, 0x91a1, 0xf6ba, 0xf6b6, 0xf6c2, 0x89b8, 0xf6b7, 0xf7bb, 0xf6c5, 0xf6c7, 0xf6be, 0xf6b8, 0xf7bc, 0xf7be, 0xf7b8, 0xc5c2, 0x9173, 0xf7c5, 0xf7c3, 0xc5c3, 0xf7c2, 0xf7c1, 0xf7ba, 0xf7b7, 0xf7bd, 0xf7c6, 0xf7b9, 0xf7bf, 0xf869, 0xf86e, 0xf864, 0xf867, 0xc5ee, 0xf86b, 0xf872, 0xf7c0, 0xf865, 0xf86f, 0xf873, 0xf86a, 0xf863, 0xf86d, 0xf86c, 0xf871, 0xf870, 0xf7c4, 0xf868, 0xf862, 0xf866, 0xc64e, 0xc64f, 0xf861, 0x9aa6, 0xf8e6, 0xf8dd, 0xf8e5, 0xf8e2, 0xf8e3, 0xf8dc, 0xf8df, 0xf8e7, 0xf8e1, 0xf8e0, 0xf8de, 0xf8e4, 0x89bd, 0xf95d, 0x89b9, 0xf95e, 0x917d, 0xf960, 0xf95f, 0xf962, 0xf961, 0xf97c, 0xf97b, 0xf9b7, 0xf9b8, 0x96bb, 0xf9c5, 0xc678, 0xc67c, 0x9ff2, 0xf9cf, 0xc67d, 0x8bf5, 0xb3bf, 0xc4d0, 0xf6c9, 0x9aa9, 0xc650, 0xc651, 0xb3c0, 0xe0ee, 0x9f54, 0xb9a8, 0xe8f0, 0x9fe3, 0x9eed, 0xecb0, 0xecb1, 0xecaf, 0xefab, 0xefaa, 0xc247, 0xf1df, 0xefac, 0xf1de, 0x91aa, 0xf3f3, 0xc451, 0xc453, 0xf3f2, 0x91ab, 0xa070, 0xc452, 0x9f6d, 0xf5b1, 0xf5b3, 0xf5b2, 0xf6ca, 0xc565, 0x91ac, 0xc5ef, 0xf8e8, 0xf963, 0x91ad, 0xf9d2, 0xb3c1, 0xa0fd, 0xe4e5, 0x9fe2, 0xbea2, 0x91af, 0x9e41, 0x9aaa, 0xecb3, 0xecb2, 0x91b0, 0xefad, 0x9aab, 0xc454, 0xc4d1, 0xf7c7, 0xf9cb, 0xb3c2, 0xbbf2, 0x9aac, 0xbea3, 0x9a4a, 0xf3f4, 0x91b2, 0xf874, 0xb6c0, 0x8bf6, 0x9aad, 0x89b6, 0xefae, 0xc664, 0xb6c1, 0xbea4, 0xc248, 0xf875, 0xb6c2, 0xe8f1, 0xc072, 0xecb4, 0xecb5, 0xc071, 0xefaf, 0xc24c, 0xc24a, 0xc24b, 0xc249, 0xf1e0, 0xc35c, 0x9aaf, 0xf5b5, 0xf5b4, 0xf5b7, 0xf5b6, 0xc4d2, 0xf6cb, 0xf6cd, 0xf6cc, 0xc566, 0xf7c8, 0x9ab0, 0xf876, 0xf877, 0xc5f0, 0xf964, 0xf97d, 0xc675, 0x9ab1, 0xdcb0, 0xecb6, 0xefb0, 0xf3f5, 0xe0ef, 0x9aa1, 0xefb1, 0xf1e2, 0xf1e1, 0x91b9, 0xf878, 0xc652, 0x91ba, 0xf965, 0xf97e, 0xb9a9, 0xe8f2, 0xe8f3, 0xecb7, 0xb9aa, 0xc35d, 0xf1e3, 0x91be, 0xf6cf, 0xc567, 0xf6d0, 0xf6ce, 0xf879, 0xf8e9, 0xb9ab, 0xefb4, 0xefb3, 0xefb2, 0xf1e4, 0xa041, 0x8bb7, 0xf1e8, 0xf1e7, 0xf1e6, 0xf1e5, 0xc35e, 0xf3f6, 0xf5b9, 0xc4d3, 0xf5b8, 0xf6d1, 0xf7cb, 0xf7ca, 0xc5c4, 0xf7c9, 0xf87c, 0xf87b, 0xf87a, 0x91c0, 0xbbf3, 0xecb8, 0xc24d, 0xf3f7, 0xf3f8, 0xf7cc, 0xf87d, 0x9ab3, 0x91c3, 0xf8ea, 0xf966, 0xf9b9, 0xf9d4, 0xbbf4, 0xc24e, 0xf1e9, 0xf3f9, 0xf6d2, 0xf87e, 0xa0fc, 0xbea6, 0x9fee, 0xefb5, 0xf1ea, 0xf3fa, 0xf3fb, 0xf3fc, 0xf5be, 0x9f69, 0xf5ba, 0xc568, 0xf5bd, 0xf5bc, 0xc4d4, 0xf5bb, 0xc4d6, 0x91c8, 0xc4d5, 0xf6d4, 0xf6d3, 0xc569, 0xc56a, 0x91c9, 0xc5c6, 0xf7cd, 0xc5c5, 0xf8a3, 0xf8a4, 0xf8a2, 0xf8a1, 0xc654, 0xf8eb, 0xf8ec, 0xf8ed, 0xc653, 0xf967, 0xf96a, 0xf969, 0xf968, 0xf9d3, 0x8de6, 0xc073, 0x91cb, 0xc365, 0xf5bf, 0xf6d5, 0xc5c7, 0xf7ce, 0xf9d5, 0x89c8, 0xc074, 0x8daa, 0xefb6, 0xf7cf, 0xf9a1, 0x9fdd, 0xfa40, 0xfa41, 0xfa42, 0xfa43, 0xfa44, 0xfa45, 0xfa46, 0xfa47, 0xfa48, 0xfa49, 0xfa4a, 0xfa4b, 0xfa4c, 0xfa4d, 0xfa4e, 0xfa4f, 0xfa50, 0xfa51, 0xfa52, 0xfa53, 0xfa54, 0xfa55, 0xfa56, 0xfa57, 0xfa58, 0xfa59, 0xfa5a, 0xfa5b, 0xfa5c, 0xfa5d, 0xfa5e, 0xadc5, 0xfa60, 0xfa61, 0xfa62, 0xfa63, 0xfa64, 0xfa65, 0xb0b0, 0xfa67, 0xfa68, 0xfa69, 0xfa6a, 0xfa6b, 0xfa6c, 0xfa6d, 0xfa6e, 0xfa6f, 0xfa70, 0xfa71, 0xfa72, 0xfa73, 0xfa74, 0xfa75, 0xfa76, 0xfa77, 0xfa78, 0xfa79, 0xfa7a, 0xfa7b, 0xfa7c, 0xfa7d, 0xfa7e, 0xfaa1, 0xfaa2, 0xfaa3, 0xfaa4, 0xfaa5, 0xfaa6, 0xfaa7, 0xfaa8, 0xfaa9, 0xfaaa, 0xfaab, 0xfaac, 0xfaad, 0xfaae, 0xfaaf, 0xfab0, 0xfab1, 0xfab2, 0xfab3, 0xfab4, 0xfab5, 0xfab6, 0xfab7, 0xfab8, 0xfab9, 0xfaba, 0xfabb, 0xfabc, 0xa55d, 0xfabe, 0xfabf, 0xfac0, 0xfac1, 0xfac2, 0xfac3, 0xfac4, 0xa2cd, 0xfac6, 0xfac7, 0xfac8, 0xfac9, 0xfaca, 0xfacb, 0xfacc, 0xfacd, 0xface, 0xfacf, 0xfad0, 0xfad1, 0xfad2, 0xfad3, 0xfad4, 0xadeb, 0xfad6, 0xfad7, 0xfad8, 0xfad9, 0xfada, 0xfadb, 0xfadc, 0xfadd, 0xfade, 0xfadf, 0xfae0, 0xfae1, 0xfae2, 0xfae3, 0xfae4, 0xfae5, 0xfae6, 0xfae7, 0xfae8, 0xfae9, 0xfaea, 0xfaeb, 0xfaec, 0xfaed, 0xfaee, 0xfaef, 0xfaf0, 0xfaf1, 0xfaf2, 0xfaf3, 0xfaf4, 0xfaf5, 0xfaf6, 0xfaf7, 0xfaf8, 0xfaf9, 0xfafa, 0xfafb, 0xfafc, 0xfafd, 0xfafe, 0xfb40, 0xfb41, 0xfb42, 0xfb43, 0xfb44, 0xfb45, 0xfb46, 0xfb47, 0x9def, 0xfb49, 0xfb4a, 0xfb4b, 0xfb4c, 0xfb4d, 0xfb4e, 0xfb4f, 0xfb50, 0xfb51, 0xfb52, 0xfb53, 0xfb54, 0xfb55, 0xfb56, 0xfb57, 0xfb58, 0xfb59, 0xfb5a, 0xfb5b, 0xfb5c, 0xfb5d, 0xfb5e, 0xfb5f, 0xfb60, 0xfb61, 0xfb62, 0xfb63, 0xfb64, 0xfb65, 0xfb66, 0xfb67, 0xfb68, 0xfb69, 0xfb6a, 0xfb6b, 0xfb6c, 0xfb6d, 0xfb6e, 0xfb6f, 0xfb70, 0xfb71, 0xfb72, 0xfb73, 0xfb74, 0xfb75, 0xfb76, 0xfb77, 0xfb78, 0xfb79, 0xfb7a, 0xfb7b, 0xfb7c, 0xfb7d, 0xfb7e, 0xfba1, 0xfba2, 0xfba3, 0xfba4, 0xfba5, 0xfba6, 0xfba7, 0xfba8, 0xfba9, 0xfbaa, 0xfbab, 0xfbac, 0xfbad, 0xfbae, 0xfbaf, 0xfbb0, 0xfbb1, 0xfbb2, 0xfbb3, 0xfbb4, 0xfbb5, 0xfbb6, 0xfbb7, 0xb440, 0xfbb9, 0xfbba, 0xfbbb, 0xfbbc, 0xfbbd, 0xfbbe, 0xfbbf, 0xfbc0, 0xfbc1, 0xfbc2, 0xfbc3, 0xfbc4, 0xfbc5, 0xfbc6, 0xfbc7, 0xfbc8, 0xfbc9, 0xfbca, 0xfbcb, 0xfbcc, 0xfbcd, 0xfbce, 0xfbcf, 0xfbd0, 0xfbd1, 0xfbd2, 0xfbd3, 0xfbd4, 0xfbd5, 0xfbd6, 0xfbd7, 0xfbd8, 0xfbd9, 0xfbda, 0xfbdb, 0xfbdc, 0xfbdd, 0xfbde, 0xfbdf, 0xfbe0, 0xfbe1, 0xfbe2, 0xfbe3, 0xfbe4, 0xfbe5, 0xfbe6, 0xfbe7, 0xfbe8, 0xfbe9, 0xfbea, 0xfbeb, 0xfbec, 0xfbed, 0xfbee, 0xfbef, 0xfbf0, 0xfbf1, 0xfbf2, 0xc9db, 0xfbf4, 0xfbf5, 0xfbf6, 0xfbf7, 0xfbf8, 0x9dfb, 0xfbfa, 0xfbfb, 0xfbfc, 0xfbfd, 0xfbfe, 0xfc40, 0xfc41, 0xfc42, 0xfc43, 0xfc44, 0xfc45, 0xfc46, 0xfc47, 0xfc48, 0xfc49, 0xfc4a, 0xfc4b, 0xfc4c, 0xfc4d, 0xfc4e, 0xd8f4, 0xfc50, 0xfc51, 0xfc52, 0xfc53, 0xfc54, 0xfc55, 0xfc56, 0xfc57, 0xfc58, 0xfc59, 0xfc5a, 0xfc5b, 0xfc5c, 0xfc5d, 0xfc5e, 0xfc5f, 0xfc60, 0xfc61, 0xfc62, 0xfc63, 0xfc64, 0xfc65, 0xfc66, 0xfc67, 0xfc68, 0xfc69, 0xfc6a, 0xfc6b, 0xa0dc, 0xfc6d, 0xfc6e, 0xfc6f, 0xfc70, 0xfc71, 0xfc72, 0xfc73, 0xfc74, 0xfc75, 0xfc76, 0xfc77, 0xfc78, 0xfc79, 0xfc7a, 0xfc7b, 0xfc7c, 0xfc7d, 0xfc7e, 0xfca1, 0xfca2, 0xfca3, 0xfca4, 0xfca5, 0xfca6, 0xfca7, 0xfca8, 0xfca9, 0xfcaa, 0xfcab, 0xfcac, 0xfcad, 0xfcae, 0xfcaf, 0xfcb0, 0xfcb1, 0xfcb2, 0xfcb3, 0xfcb4, 0xfcb5, 0xfcb6, 0xfcb7, 0xfcb8, 0xbcb5, 0xfcba, 0xfcbb, 0xfcbc, 0xfcbd, 0xfcbe, 0xfcbf, 0xfcc0, 0xfcc1, 0xfcc2, 0xfcc3, 0xfcc4, 0xfcc5, 0xfcc6, 0xfcc7, 0xfcc8, 0xfcc9, 0xfcca, 0xfccb, 0xfccc, 0xfccd, 0xfcce, 0xfccf, 0xfcd0, 0xfcd1, 0xfcd2, 0xfcd3, 0xfcd4, 0xfcd5, 0xfcd6, 0xfcd7, 0xfcd8, 0xfcd9, 0xfcda, 0xfcdb, 0xfcdc, 0xfcdd, 0xfcde, 0xfcdf, 0xfce0, 0xfce1, 0xb4b8, 0xfce3, 0xfce4, 0xfce5, 0xfce6, 0xfce7, 0xfce8, 0xfce9, 0xfcea, 0xfceb, 0xfcec, 0xfced, 0xfcee, 0xfcef, 0xfcf0, 0xa7fb, 0xfcf2, 0xfcf3, 0xfcf4, 0xfcf5, 0xfcf6, 0xfcf7, 0xfcf8, 0xfcf9, 0xfcfa, 0xfcfb, 0xfcfc, 0xfcfd, 0xfcfe, 0xfd40, 0xfd41, 0xfd42, 0xfd43, 0xfd44, 0xfd45, 0xfd46, 0xfd47, 0xfd48, 0xfd49, 0xfd4a, 0xfd4b, 0xfd4c, 0xfd4d, 0xfd4e, 0xfd4f, 0xfd50, 0xfd51, 0xfd52, 0xfd53, 0xfd54, 0xfd55, 0xfd56, 0xfd57, 0xfd58, 0xfd59, 0xfd5a, 0xfd5b, 0xfd5c, 0xfd5d, 0xfd5e, 0xfd5f, 0xfd60, 0xfd61, 0xfd62, 0xfd63, 0xfd64, 0xfd65, 0xfd66, 0xfd67, 0xfd68, 0xfd69, 0xfd6a, 0xfd6b, 0xfd6c, 0xfd6d, 0xfd6e, 0xfd6f, 0xfd70, 0xfd71, 0xfd72, 0xfd73, 0xfd74, 0xfd75, 0xfd76, 0xfd77, 0xfd78, 0xfd79, 0xfd7a, 0xfd7b, 0xfd7c, 0xfd7d, 0xfd7e, 0xfda1, 0xfda2, 0xfda3, 0xfda4, 0xfda5, 0xfda6, 0xfda7, 0xfda8, 0xfda9, 0xfdaa, 0xfdab, 0xfdac, 0xfdad, 0xfdae, 0xfdaf, 0xfdb0, 0xfdb1, 0xfdb2, 0xfdb3, 0xfdb4, 0xfdb5, 0xfdb6, 0xcb58, 0xb4fc, 0xfdb9, 0xfdba, 0xb4e4, 0xfdbc, 0xfdbd, 0xfdbe, 0xfdbf, 0xfdc0, 0xfdc1, 0xfdc2, 0xfdc3, 0xfdc4, 0xfdc5, 0xfdc6, 0xfdc7, 0xfdc8, 0xfdc9, 0xfdca, 0xfdcb, 0xfdcc, 0xfdcd, 0xfdce, 0xfdcf, 0xfdd0, 0xfdd1, 0xfdd2, 0xfdd3, 0xfdd4, 0xfdd5, 0xfdd6, 0xfdd7, 0xfdd8, 0xfdd9, 0xfdda, 0xfddb, 0xfddc, 0xfddd, 0xfdde, 0xfddf, 0xfde0, 0xfde1, 0xfde2, 0xfde3, 0xfde4, 0xfde5, 0xfde6, 0xfde7, 0xfde8, 0xfde9, 0xfdea, 0xfdeb, 0xfdec, 0xfded, 0xfdee, 0xfdef, 0xfdf0, 0xb54e, 0xfdf2, 0xfdf3, 0xfdf4, 0xfdf5, 0xfdf6, 0xfdf7, 0xfdf8, 0xfdf9, 0xfdfa, 0xfdfb, 0xfdfc, 0xfdfd, 0xfdfe, 0xfe40, 0xfe41, 0xfe42, 0xfe43, 0xfe44, 0xfe45, 0xfe46, 0xfe47, 0xfe48, 0xfe49, 0xfe4a, 0xfe4b, 0xfe4c, 0xfe4d, 0xfe4e, 0xfe4f, 0xfe50, 0xfe51, 0x9975, 0xfe53, 0xfe54, 0xfe55, 0xfe56, 0xfe57, 0xfe58, 0xfe59, 0xfe5a, 0xfe5b, 0xfe5c, 0xfe5d, 0xfe5e, 0xfe5f, 0xfe60, 0xfe61, 0xfe62, 0xfe63, 0xfe64, 0xfe65, 0xfe66, 0xfe67, 0xfe68, 0xfe69, 0xfe6a, 0xfe6b, 0xfe6c, 0xfe6d, 0xfe6e, 0xb7ec, 0xfe70, 0xfe71, 0xfe72, 0xfe73, 0xfe74, 0xfe75, 0xfe76, 0xfe77, 0xfe78, 0xfe79, 0xfe7a, 0xfe7b, 0xfe7c, 0xfe7d, 0xfe7e, 0xfea1, 0xfea2, 0xfea3, 0xfea4, 0xfea5, 0xfea6, 0xfea7, 0xfea8, 0xfea9, 0xa260, 0xfeab, 0xfeac, 0xfead, 0xfeae, 0xfeaf, 0xfeb0, 0xfeb1, 0xfeb2, 0xfeb3, 0xfeb4, 0xfeb5, 0xfeb6, 0xfeb7, 0xfeb8, 0xfeb9, 0xfeba, 0xfebb, 0xfebc, 0xfebd, 0xfebe, 0xfebf, 0xfec0, 0xfec1, 0xfec2, 0xfec3, 0xfec4, 0xfec5, 0xfec6, 0xfec7, 0xfec8, 0xfec9, 0xfeca, 0xfecb, 0xfecc, 0xfecd, 0xfece, 0xfecf, 0xfed0, 0xfed1, 0xfed2, 0xfed3, 0xfed4, 0xfed5, 0xfed6, 0xfed7, 0xfed8, 0xfed9, 0xfeda, 0xfedb, 0xfedc, 0xcff1, 0xfede, 0xfedf, 0xfee0, 0xfee1, 0xfee2, 0xfee3, 0xfee4, 0xfee5, 0xfee6, 0xfee7, 0xfee8, 0xfee9, 0xfeea, 0xfeeb, 0xfeec, 0xfeed, 0xfeee, 0xfeef, 0xfef0, 0xfef1, 0xfef2, 0xfef3, 0xfef4, 0xfef5, 0xfef6, 0xfef7, 0xfef8, 0xfef9, 0xfefa, 0xfefb, 0xfefc, 0xfefd, 0xfefe, 0x8e40, 0x8e41, 0x8e42, 0x8e43, 0x8e44, 0x8e45, 0x8e46, 0x8e47, 0x8e48, 0x8e49, 0x8e4a, 0x8e4b, 0x8e4c, 0x8e4d, 0x8e4e, 0x8e4f, 0x8e50, 0x8e51, 0x8e52, 0x8e53, 0x8e54, 0x8e55, 0x8e56, 0x8e57, 0x8e58, 0x8e59, 0x8e5a, 0x8e5b, 0x8e5c, 0x8e5d, 0x8e5e, 0x8e5f, 0x8e60, 0x8e61, 0x8e62, 0x8e63, 0x8e64, 0x8e65, 0x8e66, 0x8e67, 0x8e68, 0xbae6, 0x8e6a, 0x8e6b, 0x8e6c, 0x8e6d, 0x8e6e, 0xedca, 0x8e70, 0x8e71, 0x8e72, 0x8e73, 0x8e74, 0x8e75, 0x8e76, 0x8e77, 0x8e78, 0x8e79, 0x8e7a, 0x8e7b, 0x8e7c, 0x8e7d, 0xa261, 0x8ea1, 0x8ea2, 0x8ea3, 0x8ea4, 0x8ea5, 0x8ea6, 0x8ea7, 0x8ea8, 0x8ea9, 0x8eaa, 0xbafc, 0x8eac, 0x8ead, 0x8eae, 0x8eaf, 0x8eb0, 0x8eb1, 0x8eb2, 0x8eb3, 0xbfa6, 0x8eb5, 0x8eb6, 0x8eb7, 0x8eb8, 0x8eb9, 0x8eba, 0x8ebb, 0x8ebc, 0x8ebd, 0x8ebe, 0x8ebf, 0x8ec0, 0x8ec1, 0x8ec2, 0x8ec3, 0x8ec4, 0x8ec5, 0x8ec6, 0x8ec7, 0x8ec8, 0x8ec9, 0x8eca, 0x8ecb, 0x8ecc, 0xaacc, 0x8ece, 0x8ecf, 0xbfae, 0x8ed1, 0x8ed2, 0x8ed3, 0x8ed4, 0x8ed5, 0x8ed6, 0x8ed7, 0x8ed8, 0x8ed9, 0x8eda, 0x8edb, 0x8edc, 0x8edd, 0x8ede, 0x8edf, 0x8ee0, 0x8ee1, 0x8ee2, 0x8ee3, 0x8ee4, 0x8ee5, 0x8ee6, 0x8ee7, 0x8ee8, 0x8ee9, 0x8eea, 0x8eeb, 0x8eec, 0x8eed, 0x8eee, 0x8eef, 0x8ef0, 0x8ef1, 0x8ef2, 0x8ef3, 0x8ef4, 0x8ef5, 0x8ef6, 0x8ef7, 0x8ef8, 0x8ef9, 0x8efa, 0x8efb, 0x8efc, 0x8efd, 0x8efe, 0x8f40, 0x8f41, 0x8f42, 0x8f43, 0x8f44, 0x8f45, 0x8f46, 0x8f47, 0x8f48, 0x8f49, 0x8f4a, 0x8f4b, 0x8f4c, 0x8f4d, 0x8f4e, 0x8f4f, 0x8f50, 0x8f51, 0x8f52, 0x8f53, 0x8f54, 0x8f55, 0x8f56, 0xb5d7, 0x8f58, 0x8f59, 0x8f5a, 0x8f5b, 0x8f5c, 0x8f5d, 0x8f5e, 0x8f5f, 0x8f60, 0x8f61, 0x8f62, 0x8f63, 0x8f64, 0x8f65, 0x8f66, 0x8f67, 0x8f68, 0xe3c8, 0x8f6a, 0x8f6b, 0x8f6c, 0x8f6d, 0xdb79, 0x8f6f, 0x8f70, 0x8f71, 0x8f72, 0x8f73, 0x8f74, 0x8f75, 0x8f76, 0x8f77, 0x8f78, 0x8f79, 0x8f7a, 0x8f7b, 0x8f7c, 0x8f7d, 0x8f7e, 0x8fa1, 0x8fa2, 0x8fa3, 0x8fa4, 0x8fa5, 0x8fa6, 0x8fa7, 0x8fa8, 0x8fa9, 0x8faa, 0x8fab, 0x8fac, 0x8fad, 0x8fae, 0x8faf, 0x8fb0, 0x8fb1, 0x8fb2, 0x8fb3, 0x8fb4, 0x8fb5, 0x8fb6, 0x8fb7, 0x8fb8, 0x8fb9, 0x8fba, 0x8fbb, 0x8fbc, 0x8fbd, 0x8fbe, 0x8fbf, 0x8fc0, 0x8fc1, 0x8fc2, 0x8fc3, 0x8fc4, 0x8fc5, 0x8fc6, 0x8fc7, 0x8fc8, 0x8fc9, 0x8fca, 0xbfcc, 0xa0d4, 0x8fcd, 0x8fce, 0x8fcf, 0x8fd0, 0x8fd1, 0x8fd2, 0x8fd3, 0x8fd4, 0x8fd5, 0x8fd6, 0x8fd7, 0x8fd8, 0x8fd9, 0x8fda, 0x8fdb, 0x8fdc, 0x8fdd, 0x8fde, 0x8fdf, 0x8fe0, 0x8fe1, 0x8fe2, 0x8fe3, 0x8fe4, 0x8fe5, 0x8fe6, 0x8fe7, 0x8fe8, 0x8fe9, 0x8fea, 0x8feb, 0x8fec, 0x8fed, 0x8fee, 0x8fef, 0x8ff0, 0x8ff1, 0x8ff2, 0x8ff3, 0x8ff4, 0x8ff5, 0x8ff6, 0x8ff7, 0x8ff8, 0x8ff9, 0x8ffa, 0x8ffb, 0x8ffc, 0x8ffd, 0xb05f, 0x9040, 0x9041, 0x9042, 0x9043, 0x9044, 0x9045, 0x9046, 0x9047, 0x9048, 0x9049, 0x904a, 0x904b, 0x904c, 0x904d, 0x904e, 0x904f, 0x9050, 0x9051, 0x9052, 0x9053, 0x9054, 0x9055, 0x9056, 0x9057, 0x9058, 0x9059, 0x905a, 0x905b, 0x905c, 0x905d, 0x905e, 0x905f, 0x9060, 0x9061, 0x9062, 0x9063, 0x9064, 0x9065, 0x9066, 0x9067, 0x9068, 0x9069, 0x906a, 0x906b, 0x906c, 0xb3a3, 0x906e, 0x906f, 0x9070, 0x9071, 0x9072, 0x9073, 0x9074, 0x9075, 0x9076, 0x9077, 0x9078, 0x9079, 0xf9d7, 0x907b, 0x907c, 0x907d, 0x907e, 0x90a1, 0x90a2, 0x90a3, 0x90a4, 0x90a5, 0x90a6, 0x90a7, 0x90a8, 0x90a9, 0x90aa, 0x90ab, 0x90ac, 0x90ad, 0x90ae, 0x90af, 0x90b0, 0x90b1, 0x90b2, 0x90b3, 0x90b4, 0x90b5, 0x90b6, 0x90b7, 0x90b8, 0x90b9, 0x90ba, 0x90bb, 0x90bc, 0x90bd, 0x90be, 0x90bf, 0x90c0, 0x90c1, 0x90c2, 0x90c3, 0x90c4, 0x90c5, 0x90c6, 0x90c7, 0x90c8, 0x90c9, 0x90ca, 0x90cb, 0x90cc, 0x90cd, 0x90ce, 0x90cf, 0x90d0, 0x90d1, 0x90d2, 0x90d3, 0x90d4, 0x90d5, 0x90d6, 0x90d7, 0x90d8, 0x90d9, 0x90da, 0x90db, 0xc052, 0x90dd, 0x90de, 0x90df, 0x90e0, 0x90e1, 0x90e2, 0x90e3, 0x90e4, 0x90e5, 0x90e6, 0x90e7, 0x90e8, 0x90e9, 0x90ea, 0x90eb, 0x90ec, 0x90ed, 0x90ee, 0x90ef, 0x90f0, 0xc554, 0x90f2, 0x90f3, 0x90f4, 0x90f5, 0x90f6, 0x90f7, 0x90f8, 0x90f9, 0x90fa, 0x90fb, 0x90fc, 0x90fd, 0x90fe, 0x9140, 0x9141, 0x9142, 0x9143, 0x9144, 0x9145, 0x9146, 0x9147, 0x9148, 0x9149, 0x914a, 0x914b, 0x914c, 0x914d, 0x914e, 0x914f, 0x9150, 0x9151, 0x9152, 0x9153, 0x9154, 0x9155, 0x9156, 0x9157, 0x9158, 0x9159, 0x915a, 0x915b, 0x915c, 0x915d, 0x915e, 0x915f, 0x9160, 0x9161, 0x9162, 0x9163, 0x9164, 0x9165, 0x9166, 0x9167, 0x9168, 0x9169, 0x916a, 0x916b, 0x916c, 0x916d, 0x916e, 0x916f, 0x9170, 0x9171, 0x9172, 0x9173, 0x9174, 0x9175, 0x9176, 0x9177, 0x9178, 0x9179, 0x917a, 0x917b, 0x917c, 0x917d, 0x917e, 0x91a1, 0x91a2, 0x91a3, 0x91a4, 0x91a5, 0x91a6, 0x91a7, 0x91a8, 0x91a9, 0x91aa, 0x91ab, 0x91ac, 0x91ad, 0x91ae, 0x91af, 0x91b0, 0x91b1, 0x91b2, 0x91b3, 0x91b4, 0x91b5, 0x91b6, 0x91b7, 0x91b8, 0x91b9, 0x91ba, 0x91bb, 0x91bc, 0x91bd, 0x91be, 0xf1e3, 0x91c0, 0x91c1, 0x91c2, 0x91c3, 0x91c4, 0x91c5, 0x91c6, 0x91c7, 0x91c8, 0x91c9, 0x91ca, 0x91cb, 0x91cc, 0x91cd, 0x91ce, 0x91cf, 0x91d0, 0x91d1, 0x91d2, 0x91d3, 0x91d4, 0x91d5, 0x91d6, 0x91d7, 0x91d8, 0x91d9, 0x91da, 0x91db, 0x91dc, 0x91dd, 0x91de, 0x91df, 0x91e0, 0x91e1, 0x91e2, 0x91e3, 0x91e4, 0x91e5, 0x91e6, 0x91e7, 0x91e8, 0x91e9, 0x91ea, 0x91eb, 0x91ec, 0x91ed, 0x91ee, 0x91ef, 0x91f0, 0x91f1, 0x91f2, 0x91f3, 0x91f4, 0x91f5, 0x91f6, 0x91f7, 0x91f8, 0x91f9, 0x91fa, 0x91fb, 0x91fc, 0x91fd, 0x91fe, 0x9240, 0x9241, 0x9242, 0x9243, 0x9242, 0x9245, 0x9246, 0x9247, 0x9248, 0x9249, 0x924a, 0x924b, 0x924c, 0x924d, 0x924e, 0x924f, 0x9250, 0x9251, 0x9252, 0x9253, 0x9254, 0x9255, 0x9256, 0x9257, 0x9258, 0x9259, 0x925a, 0x925b, 0x925c, 0x925d, 0x925e, 0x925f, 0x9260, 0x9261, 0x9262, 0x9263, 0x9264, 0x9265, 0x9266, 0x9267, 0x9268, 0x9269, 0x926a, 0x926b, 0x926c, 0x926d, 0x926e, 0x926f, 0x9270, 0x9271, 0x9272, 0x9273, 0x9274, 0x9275, 0x9276, 0x9277, 0x9278, 0x9279, 0x927a, 0x927b, 0x927c, 0x927d, 0x927e, 0x92a1, 0x92a2, 0x92a3, 0x92a4, 0x92a5, 0x92a6, 0x92a7, 0x92a8, 0x92a9, 0x92aa, 0x92ab, 0x92ac, 0x92ad, 0x92ae, 0xa259, 0xa25a, 0xa25c, 0xa25b, 0x92b3, 0x92b4, 0x92b5, 0x92b6, 0x92b7, 0x92b8, 0x92b9, 0x92ba, 0x92bb, 0x92bc, 0x92bd, 0x92be, 0x92bf, 0x92c0, 0x92c1, 0x92c2, 0x92c3, 0x92c4, 0x92c5, 0x92c6, 0x92c7, 0xa05f, 0x92c9, 0x92ca, 0x92cb, 0x92cc, 0x92cd, 0x92ce, 0x92cf, 0x92d0, 0xe6ab, 0x92d2, 0x92d3, 0x92d4, 0x92d5, 0x92d6, 0x92d7, 0x92d8, 0x92d9, 0x92da, 0x92db, 0x92dc, 0x92dd, 0x92de, 0x92df, 0x92e0, 0x92e1, 0x92e2, 0x92e3, 0x92e4, 0x92e5, 0x92e6, 0x92e7, 0x92e8, 0x92e9, 0x92ea, 0x92eb, 0x92ec, 0x92ed, 0x92ee, 0x92ef, 0x92f0, 0x92f1, 0x92f2, 0x92f3, 0x92f4, 0x92f5, 0x92f6, 0x92f7, 0x92f8, 0x92f9, 0x92fa, 0x92fb, 0x92fc, 0x92fd, 0x92fe, 0x9340, 0x9341, 0x9342, 0x9343, 0x9344, 0x9345, 0x9346, 0x9347, 0x9348, 0x9349, 0x934a, 0x934b, 0x934c, 0x934d, 0x934e, 0x934f, 0x9350, 0x9351, 0x9352, 0x9353, 0x9354, 0x9355, 0x9356, 0x9357, 0x9358, 0x9359, 0x935a, 0x935b, 0x935c, 0x935d, 0x935e, 0x935f, 0x9360, 0x9361, 0x9362, 0x9363, 0x9364, 0x9365, 0x9366, 0x9367, 0x9368, 0x9369, 0x936a, 0x936b, 0x936c, 0x936d, 0x936e, 0x936f, 0x9370, 0x9371, 0x9372, 0x9373, 0x9374, 0x9375, 0x9376, 0x9377, 0x9378, 0x9379, 0x937a, 0x937b, 0x937c, 0x937d, 0x937e, 0x93a1, 0x93a2, 0x93a3, 0x93a4, 0x93a5, 0x93a6, 0x93a7, 0x93a8, 0x93a9, 0x93aa, 0x93ab, 0x93ac, 0x93ad, 0x93ae, 0x93af, 0x93b0, 0x93b1, 0x93b2, 0x93b3, 0x93b4, 0x93b5, 0x93b6, 0x93b7, 0x93b8, 0x93b9, 0x93ba, 0x93bb, 0x93bc, 0x93bd, 0x93be, 0x93bf, 0x93c0, 0x93c1, 0x93c2, 0x93c3, 0x93c4, 0x93c5, 0x93c6, 0x93c7, 0x93c8, 0x93c9, 0x93ca, 0x93cb, 0x93cc, 0x93cd, 0x93ce, 0x93cf, 0x93d0, 0x93d1, 0x93d2, 0x93d3, 0x93d4, 0x93d5, 0x93d6, 0x93d7, 0x93d8, 0x93d9, 0x93da, 0x93db, 0x93dc, 0x93dd, 0x93de, 0x93df, 0x93e0, 0x93e1, 0x93e2, 0x93e3, 0x93e4, 0x93e5, 0x93e6, 0x93e7, 0x93e8, 0x93e9, 0x93ea, 0x93eb, 0x93ec, 0x93ed, 0x93ee, 0x93ef, 0x93f0, 0x93f1, 0x93f2, 0x93f3, 0x93f4, 0x93f5, 0x93f6, 0x93f7, 0x93f8, 0x93f9, 0x93fa, 0x93fb, 0x93fc, 0x93fd, 0x93fe, 0x9440, 0x9441, 0x9442, 0x9443, 0x9444, 0x9445, 0x9446, 0xd256, 0x9448, 0x9449, 0x944a, 0x944b, 0x944c, 0x944d, 0x944e, 0x944f, 0x9450, 0x9451, 0x9452, 0x9453, 0x9454, 0x9455, 0x9456, 0x9457, 0x9458, 0x9459, 0x945a, 0x945b, 0x945c, 0x945d, 0x945e, 0x945f, 0x9460, 0x9461, 0x9462, 0x9463, 0x9464, 0x9465, 0x9466, 0x9467, 0x9468, 0x9469, 0x946a, 0x946b, 0x946c, 0x946d, 0x946e, 0x946f, 0x9470, 0x9471, 0x9472, 0x9473, 0x9474, 0x9475, 0x9476, 0x9477, 0x9478, 0x9479, 0x947a, 0x947b, 0x947c, 0x947d, 0x947e, 0x94a1, 0x94a2, 0x94a3, 0x94a4, 0x94a5, 0x94a6, 0x94a7, 0x94a8, 0x94a9, 0x94aa, 0x94ab, 0x94ac, 0x94ad, 0x94ae, 0x94af, 0x94b0, 0x94b1, 0x94b2, 0x94b3, 0x94b4, 0x94b5, 0x94b6, 0x94b7, 0x94b8, 0x94b9, 0x94ba, 0x94bb, 0x94bc, 0x94bd, 0x94be, 0x94bf, 0x94c0, 0x94c1, 0x94c2, 0x94c3, 0x94c4, 0x94c5, 0x94c6, 0x94c7, 0x94c8, 0x94c9, 0xe6d0, 0x94cb, 0x94cc, 0x94cd, 0x94ce, 0x94cf, 0x94d0, 0x94d1, 0x94d2, 0x94d3, 0x94d4, 0x94d5, 0x94d6, 0x94d7, 0x94d8, 0x94d9, 0x94da, 0x94db, 0x94dc, 0x94dd, 0x94de, 0x94df, 0x94e0, 0x94e1, 0x94e2, 0x94e3, 0x94e4, 0x94e5, 0x94e6, 0x94e7, 0x94e8, 0x94e9, 0x94ea, 0x94eb, 0x94ec, 0x94ed, 0x94ee, 0x94ef, 0x94f0, 0x94f1, 0x94f2, 0x94f3, 0x94f4, 0x94f5, 0x94f6, 0x94f7, 0x94f8, 0x94f9, 0x94fa, 0x94fb, 0x94fc, 0x94fd, 0x94fe, 0x9540, 0x9541, 0x9542, 0x9543, 0x9544, 0x9545, 0x9546, 0x9547, 0x9548, 0x9549, 0x954a, 0x954b, 0x954c, 0x954d, 0x954e, 0x954f, 0x9550, 0x9551, 0x9552, 0x9553, 0x9554, 0x9555, 0x9556, 0x9557, 0x9558, 0x9559, 0x955a, 0x955b, 0x955c, 0x955d, 0x955e, 0x955f, 0x9560, 0x9561, 0x9562, 0x9563, 0x9564, 0x9565, 0x9566, 0x9567, 0x9568, 0x9569, 0x956a, 0x956b, 0x956c, 0x956d, 0x956e, 0x956f, 0x9570, 0x9571, 0x9572, 0x9573, 0x9574, 0x9575, 0x9576, 0x9577, 0x9578, 0x9579, 0x957a, 0x957b, 0x957c, 0x957d, 0x957e, 0x95a1, 0x95a2, 0x95a3, 0x95a4, 0x95a5, 0x95a6, 0x95a7, 0x95a8, 0x95a9, 0x95aa, 0x95ab, 0x95ac, 0x95ad, 0x95ae, 0x95af, 0x95b0, 0x95b1, 0x95b2, 0x95b3, 0x95b4, 0x95b5, 0x95b6, 0x95b7, 0x95b8, 0x95b9, 0x95ba, 0x95bb, 0x95bc, 0x95bd, 0x95be, 0x95bf, 0x95c0, 0x95c1, 0x95c2, 0x95c3, 0x95c4, 0x95c5, 0x95c6, 0x95c7, 0x95c8, 0x95c9, 0x95ca, 0x95cb, 0x95cc, 0x95cd, 0x95ce, 0x95cf, 0x95d0, 0x95d1, 0x95d2, 0x95d3, 0x95d4, 0x95d5, 0x95d6, 0x95d7, 0x95d8, 0xca52, 0x95da, 0x95db, 0x95dc, 0x95dd, 0x95de, 0x95df, 0x95e0, 0x95e1, 0x95e2, 0x95e3, 0x95e4, 0x95e5, 0x95e6, 0x95e7, 0x95e8, 0x95e9, 0x95ea, 0x95eb, 0x95ec, 0x95ed, 0x95ee, 0x95ef, 0x95f0, 0x95f1, 0x95f2, 0x95f3, 0x95f4, 0x95f5, 0x95f6, 0x95f7, 0x95f8, 0x95f9, 0x95fa, 0x95fb, 0x95fc, 0x95fd, 0x95fe, 0x9640, 0x9641, 0x9642, 0x9643, 0x9ce4, 0x9645, 0x9646, 0x9647, 0x9648, 0x9649, 0x964a, 0x964b, 0x964c, 0x964d, 0x964e, 0x964f, 0x9650, 0x9651, 0x9652, 0x9653, 0x9654, 0x9655, 0x9656, 0x9657, 0x9658, 0x9659, 0x965a, 0x965b, 0x965c, 0x965d, 0x965e, 0x965f, 0x9660, 0x9661, 0x9662, 0x9663, 0x9664, 0x9665, 0x9666, 0x9667, 0x9668, 0x9669, 0x966a, 0x966b, 0x966c, 0x966d, 0x966e, 0x966f, 0x9670, 0x9671, 0x9672, 0x9673, 0x9674, 0x9675, 0x9676, 0x9677, 0x9678, 0x9679, 0x967a, 0x967b, 0x967c, 0x967d, 0x967e, 0x96a1, 0x96a2, 0x96a3, 0x96a4, 0x96a5, 0x96a6, 0x96a7, 0x96a8, 0x96a9, 0x96aa, 0x96ab, 0x96ac, 0x96ad, 0x96ae, 0x96af, 0x96b0, 0x96b1, 0x96b2, 0x96b3, 0x96b4, 0x96b5, 0x96b6, 0x96b7, 0x96b8, 0x96b9, 0x96ba, 0x96bb, 0x96bc, 0x96bd, 0x96be, 0x96bf, 0x96c0, 0x96c1, 0x96c2, 0x96c3, 0x96c4, 0x96c5, 0x96c6, 0x96c7, 0x96c8, 0x96c9, 0x96ca, 0x96cb, 0x96cc, 0x96cd, 0x96ce, 0x96cf, 0x96d0, 0x96d1, 0x96d2, 0x96d3, 0x96d4, 0x96d5, 0x96d6, 0x96d7, 0x96d8, 0x96d9, 0x96da, 0x96db, 0x96dc, 0x96dd, 0x96de, 0x96df, 0x96e0, 0x96e1, 0x96e2, 0x96e3, 0x96e4, 0x96e5, 0x96e6, 0x96e7, 0x96e8, 0x96e9, 0x96ea, 0x96eb, 0x96ec, 0x96ee, 0x96ee, 0x96ef, 0x96f0, 0x96f1, 0x96f2, 0x96f3, 0x96f4, 0x96f5, 0x96f6, 0x96f7, 0x96f8, 0x96f9, 0x96fa, 0x96fb, 0xe959, 0x96fd, 0x96fe, 0x9740, 0x9741, 0x9742, 0x9743, 0x9744, 0x9745, 0x9746, 0x9747, 0x9748, 0x9749, 0x974a, 0x974b, 0x974c, 0x974d, 0x974e, 0x974f, 0x9750, 0x9751, 0x9752, 0x9753, 0x9754, 0x9755, 0x9756, 0x9757, 0x9758, 0x9759, 0x975a, 0x975b, 0x975c, 0x975d, 0x975e, 0x975f, 0x9760, 0x9761, 0x9762, 0x9763, 0x9764, 0x9765, 0x9766, 0x9767, 0x9768, 0x9769, 0x976a, 0x976b, 0x976c, 0x976d, 0x976e, 0x976f, 0x9770, 0x9771, 0x9772, 0x9773, 0x9774, 0x9775, 0x9776, 0x9777, 0x9778, 0x9779, 0x977a, 0x977b, 0x977c, 0x977d, 0x977e, 0x97a1, 0x97a2, 0x97a3, 0x97a4, 0x97a5, 0x97a6, 0x97a7, 0x97a8, 0x97a9, 0x97aa, 0x97ab, 0x97ac, 0x97ad, 0x97ae, 0x97af, 0x97b0, 0x97b1, 0x97b2, 0x97b3, 0x97b4, 0x97b5, 0x97b6, 0x97b7, 0x97b8, 0x97b9, 0x97ba, 0x97bb, 0x97bc, 0x97bd, 0x97be, 0x97bf, 0x97c0, 0x97c1, 0x97c2, 0x97c3, 0x97c4, 0x97c5, 0x97c6, 0x97c7, 0x97c8, 0x97c9, 0x97ca, 0x97cb, 0x97cc, 0x97cd, 0x97ce, 0x97cf, 0x97d0, 0x97d1, 0x97d2, 0x97d3, 0x97d4, 0x97d5, 0x97d6, 0x97d7, 0x97d8, 0x97d9, 0x97da, 0x97db, 0x97dc, 0x97dd, 0x97de, 0x97df, 0x97e0, 0x97e1, 0x97e2, 0x97e3, 0x97e4, 0x97e5, 0x97e6, 0x97e7, 0x97e8, 0x97e9, 0x97ea, 0x97eb, 0x97ec, 0x97ed, 0x97ee, 0x97ef, 0x97f0, 0x97f1, 0x97f2, 0x97f3, 0x97f4, 0x97f5, 0x97f6, 0x97f7, 0x97f8, 0x97f9, 0x97fa, 0x97fb, 0x97fc, 0x97fd, 0x97fe, 0x9840, 0x9841, 0x9842, 0x9843, 0x9844, 0x9845, 0x9846, 0x9847, 0x9848, 0x9849, 0x984a, 0x984b, 0x984c, 0x984d, 0x984e, 0x984f, 0x9850, 0x9851, 0x9852, 0x9853, 0x9854, 0x9855, 0x9856, 0x9857, 0x9858, 0x9859, 0x985a, 0x985b, 0x985c, 0x985d, 0x985e, 0x985f, 0x9860, 0x9861, 0x9862, 0x9863, 0x9864, 0x9865, 0x9866, 0x9867, 0x9868, 0x9869, 0x986a, 0x986b, 0x986c, 0x986d, 0x986e, 0x986f, 0x9870, 0x9871, 0x9872, 0x9873, 0x9874, 0x9875, 0x9876, 0x9877, 0x9878, 0x9879, 0x987a, 0x987b, 0x987c, 0x987d, 0x987e, 0x98a1, 0x98a2, 0x98a3, 0x98a4, 0x98a5, 0x98a6, 0x98a7, 0x98a8, 0x98a9, 0x98aa, 0x98ab, 0x98ac, 0x98ad, 0x98ae, 0x98af, 0x98b0, 0x98b1, 0x98b2, 0x98b3, 0x98b4, 0x98b5, 0x98b6, 0x98b7, 0x98b8, 0x98b9, 0x98ba, 0x98bb, 0x98bc, 0x98bd, 0x98be, 0x98bf, 0x98c0, 0x98c1, 0x98c2, 0x98c3, 0x98c4, 0x98c5, 0x98c6, 0x98c7, 0x98c8, 0x98c9, 0x98ca, 0x98cb, 0x98cc, 0x98cd, 0x98ce, 0x98cf, 0x98d0, 0x98d1, 0x98d2, 0x98d3, 0x98d4, 0x98d5, 0x98d6, 0x98d7, 0x98d8, 0x98d9, 0x98da, 0x98db, 0x98dc, 0x98dd, 0x98de, 0x98df, 0x98e0, 0x98e1, 0x98e2, 0x98e3, 0x98e4, 0x98e5, 0x98e6, 0x98e7, 0x98e8, 0x98e9, 0x98ea, 0x98eb, 0x98ec, 0x98ed, 0x98ee, 0x98ef, 0x98f0, 0x98f1, 0x98f2, 0x98f3, 0x98f4, 0x98f5, 0x98f6, 0x98f7, 0x98f8, 0x98f9, 0x98fa, 0x98fb, 0x98fc, 0x98fd, 0x98fe, 0x9940, 0x9941, 0x9942, 0x9943, 0x9944, 0x9945, 0x9946, 0x9947, 0x9948, 0x9949, 0x994a, 0x994b, 0x994c, 0x994d, 0x994e, 0x994f, 0x9950, 0x9951, 0x9952, 0x9953, 0x9954, 0x9955, 0x9956, 0x9957, 0x9958, 0x9959, 0x995a, 0x995b, 0x995c, 0x995d, 0x995e, 0x995f, 0x9960, 0x9961, 0x9962, 0x9963, 0x9964, 0x9965, 0x9966, 0x9967, 0x9968, 0x9969, 0x996a, 0x996b, 0x996c, 0x996d, 0x996e, 0x996f, 0x9970, 0x9971, 0x9972, 0x9973, 0x9974, 0x9975, 0x9976, 0x9977, 0x9978, 0x9979, 0x997a, 0x997b, 0x997c, 0x997d, 0x997e, 0x99a1, 0x99a2, 0x99a3, 0x99a4, 0x99a5, 0x99a6, 0x99a7, 0x99a8, 0x99a9, 0x99aa, 0x99ab, 0x99ac, 0x99ad, 0x99ae, 0x99af, 0x99b0, 0x99b1, 0x99b2, 0x99b3, 0x99b4, 0x99b5, 0x99b6, 0x99b7, 0x99b8, 0x99b9, 0x99ba, 0x99bb, 0x99bc, 0x99bd, 0x99be, 0x99bf, 0x99c0, 0x99c1, 0x99c2, 0x99c3, 0x99c4, 0x99c5, 0x99c6, 0x99c7, 0x99c8, 0x99c9, 0x99ca, 0x99cb, 0x99cc, 0x99cd, 0x99ce, 0x99cf, 0x99d0, 0x99d1, 0x99d2, 0x99d3, 0x99d4, 0x99d5, 0x99d6, 0x99d7, 0x99d8, 0x99d9, 0x99da, 0x99db, 0x99dc, 0x99dd, 0x99de, 0x99df, 0x99e0, 0x99e1, 0x99e2, 0x99e3, 0x99e4, 0x99e5, 0x99e6, 0x99e7, 0x99e8, 0x99e9, 0x99ea, 0x99eb, 0x99ec, 0x99ed, 0x99ee, 0x99ef, 0x99f0, 0x99f1, 0x99f2, 0x99f3, 0x99f4, 0x99f5, 0x99f6, 0x99f7, 0x99f8, 0x99f9, 0x99fa, 0x99fb, 0x99fc, 0x99fd, 0x99fe, 0x9a40, 0x9a41, 0x9a42, 0x9a43, 0x9a44, 0x9a45, 0x9a46, 0x9a47, 0x9a48, 0x9a49, 0x9a4a, 0x9a4b, 0x9a4c, 0x9a4d, 0x9a4e, 0x9a4f, 0x9a50, 0x9a51, 0x9a52, 0x9a53, 0x9a54, 0x9a55, 0x9a56, 0x9a57, 0x9a58, 0x9a59, 0x9a5a, 0x9a5b, 0x9a5c, 0x9a5d, 0x9a5e, 0x9a5f, 0x9a60, 0x9a61, 0x9a62, 0x9a63, 0x9a64, 0x9a65, 0x9a66, 0x9a67, 0x9a68, 0x9a69, 0x9a6a, 0x9a6b, 0x9a6c, 0x9a6d, 0x9a6e, 0x9a6f, 0x9a70, 0x9a71, 0x9a72, 0x9a73, 0x9a74, 0x9a75, 0x9a76, 0x9a77, 0x9a78, 0x9a79, 0x9a7a, 0x9a7b, 0x9a7c, 0x9a7d, 0x9a7e, 0x9aa1, 0x9aa2, 0x9aa3, 0x9aa4, 0x9aa5, 0x9aa6, 0x9aa7, 0x9aa8, 0x9aa9, 0x9aaa, 0x9aab, 0x9aac, 0x9aad, 0x9aae, 0x9aaf, 0x9ab0, 0x9ab1, 0x9ab2, 0x9ab3, 0x9ab4, 0x9ab5, 0x9ab6, 0x9ab7, 0x9ab8, 0x9ab9, 0x9aba, 0x9abb, 0x9abc, 0x9abd, 0x9abe, 0x9abf, 0x9ac0, 0x9ac1, 0x9ac2, 0x9ac3, 0x9ac4, 0x9ac5, 0x9ac6, 0x9ac7, 0x9ac8, 0x9ac9, 0x9aca, 0x9acb, 0x9acc, 0x9acd, 0x9ace, 0x9acf, 0x9ad0, 0x9ad1, 0x9ad2, 0x9ad3, 0x9ad4, 0x9ad5, 0x9ad6, 0x9ad7, 0x9ad8, 0x9ad9, 0x9ada, 0x9adb, 0x9adc, 0x9add, 0x9ade, 0x9adf, 0x9ae0, 0x9ae1, 0x9ae2, 0x9ae3, 0x9ae4, 0x9ae5, 0x9ae6, 0x9ae7, 0x9ae8, 0x9ae9, 0x9aea, 0x9aeb, 0x9aec, 0x9aed, 0x9aee, 0x9aef, 0x9af0, 0x9af1, 0x9af2, 0x9af3, 0x9af4, 0x9af5, 0x9af6, 0x9af7, 0x9af8, 0x9af9, 0x9afa, 0x9afb, 0x9afc, 0x9afd, 0x9afe, 0x9b40, 0x9b41, 0x9b42, 0x9b43, 0x9b44, 0x9b45, 0x9b46, 0x9b47, 0x9b48, 0x9b49, 0x9b4a, 0x9b4b, 0x9b4c, 0x9b4d, 0x9b4e, 0x9b4f, 0x9b50, 0x9b51, 0x9b52, 0x9b53, 0x9b54, 0x9b55, 0x9b56, 0x9b57, 0x9b58, 0x9b59, 0x9b5a, 0x9b5b, 0x9b5c, 0x9b5d, 0x9b5e, 0x9b5f, 0x9b60, 0x9b61, 0x9b62, 0x9b63, 0x9b64, 0x9b65, 0x9b66, 0x9b67, 0x9b68, 0x9b69, 0x9b6a, 0x9b6b, 0x9b6c, 0x9b6d, 0x9b6e, 0x9b6f, 0x9b70, 0x9b71, 0x9b72, 0x9b73, 0x9b74, 0x9b75, 0xeff9, 0x9b77, 0xc5f7, 0x9b79, 0x9b7a, 0xf5e8, 0x9b7c, 0x9b7d, 0x9b7e, 0x9ba1, 0x9ba2, 0x9ba3, 0x9ba4, 0x9ba5, 0x9ba6, 0x9ba7, 0x9ba8, 0x9ba9, 0x9baa, 0x9bab, 0x9bac, 0x9bad, 0x9bae, 0x9baf, 0x9bb0, 0x9bb1, 0x9bb2, 0x9bb3, 0x9bb4, 0x9bb5, 0x9bb6, 0x9bb7, 0x9bb8, 0x9bb9, 0x9bba, 0x9bbb, 0x9bbc, 0x9bbd, 0x9bbe, 0x9bbf, 0x9bc0, 0x9bc1, 0x9bc2, 0x9bc3, 0x9bc4, 0x9bc5, 0xe8cd, 0x9bc7, 0x9bc8, 0x9bc9, 0x9bca, 0x9bcb, 0x9bcc, 0x9bcd, 0x9bce, 0x9bcf, 0x9bd0, 0x9bd1, 0x9bd2, 0x9bd3, 0x9bd4, 0x9bd5, 0x9bd6, 0x9bd7, 0x9bd8, 0x9bd9, 0x9bda, 0x9bdb, 0x9bdc, 0x9bdd, 0xd0c0, 0x9bdf, 0x9be0, 0x9be1, 0x9be2, 0x9be3, 0x9be4, 0x9be5, 0x9be6, 0x9be7, 0x9be8, 0x9be9, 0x9bea, 0x9beb, 0xfd64, 0x9bed, 0x9bee, 0x9bef, 0x9bf0, 0x9bf1, 0x9bf2, 0x9bf3, 0x9bf4, 0x9bf5, 0xbf47, 0x9bf7, 0x9bf8, 0x9bf9, 0x9bfa, 0x9bfb, 0x9bfc, 0x9bfd, 0x9bfe, 0x9c40, 0x9c41, 0xebc9, 0x9c43, 0x9c44, 0x9c45, 0x9c46, 0x9c47, 0x9c48, 0x9c49, 0x9c4a, 0x9c4b, 0x9c4c, 0x9c4d, 0x9c4e, 0x9c4f, 0x9c50, 0x9c51, 0x9c52, 0xcde7, 0x9c54, 0x9c55, 0x9c56, 0x9c57, 0x9c58, 0x9c59, 0x9c5a, 0x9c5b, 0x9c5c, 0x9c5d, 0x9c5e, 0x9c5f, 0x9c60, 0x9c61, 0xc0e7, 0x9c63, 0x9c64, 0x9c65, 0x9c66, 0x9c67, 0xdc52, 0x9c69, 0x9c6a, 0xf86d, 0x9c6c, 0x9c6d, 0x9c6e, 0x9c6f, 0x9c70, 0x9c71, 0x9c72, 0x9c73, 0x9c74, 0x9c75, 0x9c76, 0xdb5d, 0x9c78, 0x9c79, 0x9c7a, 0x9c7b, 0x9c7c, 0x9c7d, 0x9c7e, 0x9ca1, 0x9ca2, 0x9ca3, 0x9ca4, 0x9ca5, 0x9ca6, 0x9ca7, 0x9ca8, 0x9ca9, 0x9caa, 0x9cab, 0x9cac, 0x9cad, 0x9cae, 0x9caf, 0x9cb0, 0x9cb1, 0x9cb2, 0x9cb3, 0x9cb4, 0x9cb5, 0x9cb6, 0x9cb7, 0x9cb8, 0x9cb9, 0x9cba, 0x9cbb, 0xc95c, 0xafb0, 0x9cbe, 0x9cbf, 0x9cc0, 0x9cc1, 0x9cc2, 0x9cc3, 0x9cc4, 0x9cc5, 0x9cc6, 0x9cc7, 0x9cc8, 0x9cc9, 0x9cca, 0x9ccb, 0x9ccc, 0x9ccd, 0x9cce, 0x9ccf, 0xd4d1, 0x9cd1, 0x9cd2, 0x9cd3, 0x9cd4, 0x9cd5, 0x9cd6, 0x9cd7, 0x9cd8, 0x9cd9, 0x9cda, 0x9cdb, 0x9cdc, 0x9cdd, 0x9cde, 0x9cdf, 0x9ce0, 0x9ce1, 0x9ce2, 0x9ce3, 0x9ce4, 0x9ce5, 0x9ce6, 0x9ce7, 0x9ce8, 0x9ce9, 0x9cea, 0x9ceb, 0x9cec, 0x9ced, 0x9cee, 0x9cef, 0x9cf0, 0x9cf1, 0x9cf2, 0x9cf3, 0x9cf4, 0x9cf5, 0x9cf6, 0x9cf7, 0x9cf8, 0x9cf9, 0x9cfa, 0x9cfb, 0x9cfc, 0x9cfd, 0x9cfe, 0x9d40, 0x9d41, 0x9d42, 0x9d43, 0x9d44, 0x9d45, 0x9d46, 0x9d47, 0x9d48, 0x9d49, 0x9d4a, 0x9d4b, 0x9d4c, 0x9d4d, 0x9d4e, 0x9d4f, 0x9d50, 0x9d51, 0x9d52, 0x9d53, 0x9d54, 0x9d55, 0x9d56, 0xe07c, 0x9d58, 0x9d59, 0xb5ae, 0x9d5b, 0x9d5c, 0x9d5d, 0x9d5e, 0x9d5f, 0x9d60, 0x9d61, 0x9d62, 0x9d63, 0x9d64, 0x9d65, 0x9d66, 0x9d67, 0x9d68, 0x9d69, 0x9d6a, 0x9d6b, 0x9d6c, 0x9d6d, 0x9d6e, 0x9d6f, 0x9d70, 0x9d71, 0x9d72, 0x9d73, 0x9d74, 0x9d75, 0x9d76, 0x9d77, 0x9d78, 0x9d79, 0x9d7a, 0x9d7b, 0x9d7c, 0x9d7d, 0x9d7e, 0x9da1, 0x9da2, 0x9da3, 0x9da4, 0x9da5, 0x9da6, 0x9da7, 0x9da8, 0x9da9, 0x9daa, 0x9dab, 0x9dac, 0x9dad, 0x9dae, 0x9daf, 0x9db0, 0x9db1, 0x9db2, 0x9db3, 0x9db4, 0x9db5, 0x9db6, 0x9db7, 0x9db8, 0x9db9, 0x9dba, 0x9dbb, 0x9dbc, 0x9dbd, 0x9dbe, 0x9dbf, 0x9dc0, 0x9dc1, 0x9dc2, 0x9dc3, 0xa9e4, 0x9dc5, 0x9dc6, 0x9dc7, 0x9dc8, 0x9dc9, 0x9dca, 0x9dcb, 0x9dcc, 0x9dcd, 0x9dce, 0x9dcf, 0x9dd0, 0x9dd1, 0x9dd2, 0x9dd3, 0x9dd4, 0x9dd5, 0x9dd6, 0x9dd7, 0x9dd8, 0x9dd9, 0x9dda, 0x9ddb, 0x9ddc, 0x9ddd, 0x9dde, 0x9ddf, 0x9de0, 0x9de1, 0x9de2, 0x9de3, 0x9de4, 0x9de5, 0x9de6, 0x9de7, 0x9de8, 0x9de9, 0x9dea, 0x9deb, 0x9dec, 0x9ded, 0x9dee, 0x9def, 0x9df0, 0x9df1, 0x9df2, 0x9df3, 0x9df4, 0x9df5, 0x9df6, 0x9df7, 0x9df8, 0x9df9, 0x9dfa, 0x9dfb, 0x9dfc, 0x9dfd, 0x9dfe, 0x9e40, 0x9e41, 0x9e42, 0x9e43, 0x9e44, 0x9e45, 0x9e46, 0x9e47, 0x9e48, 0x9e49, 0x9e4a, 0x9e4b, 0x9e4c, 0x9e4d, 0x9e4e, 0x9e4f, 0x9e50, 0x9e51, 0x9e52, 0x9e53, 0x9e54, 0x9e55, 0x9e56, 0x9e57, 0x9e58, 0x9e59, 0x9e5a, 0x9e5b, 0x9e5c, 0x9e5d, 0x9e5e, 0x9e5f, 0x9e60, 0x9e61, 0x9e62, 0x9e63, 0x9e64, 0x9e65, 0x9e66, 0x9e67, 0x9e68, 0x9e69, 0x9e6a, 0x9e6b, 0x9e6c, 0x9e6d, 0x9e6e, 0x9e6f, 0x9e70, 0x9e71, 0x9e72, 0x9e73, 0x9e74, 0x9e75, 0x9e76, 0x9e77, 0x9e78, 0x9e79, 0x9e7a, 0x9e7b, 0x9e7c, 0x9e7d, 0x9e7e, 0x9ea1, 0x9ea2, 0x9ea3, 0x9ea4, 0x9ea5, 0x9ea6, 0x9ea7, 0x9ea8, 0xabec, 0x9eaa, 0x9eab, 0x9eac, 0x9ead, 0x9eae, 0x9eaf, 0x9eb0, 0x9eb1, 0x9eb2, 0x9eb3, 0x9eb4, 0x9eb5, 0x9eb6, 0x9eb7, 0x9eb8, 0x9eb9, 0x9eba, 0x9ebb, 0x9ebc, 0x9ebd, 0x9ebe, 0x9ebf, 0x9ec0, 0x9ec1, 0x9ec2, 0x9ec3, 0x9ec4, 0x9ec5, 0x9ec6, 0x9ec7, 0x9ec8, 0x9ec9, 0x9eca, 0x9ecb, 0x9ecc, 0x9ecd, 0x9ece, 0x9ecf, 0x9ed0, 0x9ed1, 0x9ed2, 0x9ed3, 0x9ed4, 0x9ed5, 0x9ed6, 0x9ed7, 0x9ed8, 0x9ed9, 0x9eda, 0x9edb, 0x9edc, 0x9edd, 0x9ede, 0x9edf, 0x9ee0, 0x9ee1, 0x9ee2, 0x9ee3, 0x9ee4, 0x9ee5, 0x9ee6, 0x9ee7, 0x9ee8, 0x9ee9, 0x9eea, 0x9eeb, 0x9eec, 0x9eed, 0x9eee, 0xdecd, 0x9ef0, 0x9ef1, 0x9ef2, 0x9ef3, 0x9ef4, 0x9ef5, 0x9ef6, 0x9ef7, 0x9ef8, 0x9ef9, 0x9efa, 0x9efb, 0x9efc, 0xc9fc, 0x9efe, 0x9f40, 0x9f41, 0x9f42, 0x9f43, 0x9f44, 0x9f45, 0x9f46, 0x9f47, 0x9f48, 0x9f49, 0x9f4a, 0x9f4b, 0x9f4c, 0x9f4d, 0x9f4e, 0x9f4f, 0x9f50, 0x9f51, 0x9f52, 0x9f53, 0x9f54, 0x9f55, 0x9f56, 0x9f57, 0x9f58, 0x9f59, 0x9f5a, 0x9f5b, 0x9f5c, 0x9f5d, 0x9f5e, 0x9f5f, 0xf9c4, 0x9f61, 0x9f62, 0x9f63, 0x9f64, 0x9f65, 0x91be, 0x9f67, 0x9f68, 0x9f69, 0x9f6a, 0x9f6b, 0x9f6c, 0x9f6d, 0x9f6e, 0x9f6f, 0x9f70, 0x9f71, 0x9f72, 0x9f73, 0x9f74, 0x9f75, 0x9f76, 0x9f77, 0x9f78, 0x9f79, 0x9f7a, 0x9f7b, 0x9f7c, 0x9f7d, 0x9f7e, 0x9fa1, 0x9fa2, 0x9fa3, 0x9fa4, 0x9fa5, 0x9fa6, 0x9fa7, 0x9fa8, 0x9fa9, 0x9faa, 0x9fab, 0x9fac, 0x9fad, 0x9fae, 0x9faf, 0x9fb0, 0x9fb1, 0x9fb2, 0x9fb3, 0x9fb4, 0x9fb5, 0x9fb6, 0x9fb7, 0x9fb8, 0x9fb9, 0x9fba, 0x9fbb, 0x9fbc, 0x9fbd, 0x9fbe, 0x9fbf, 0x9fc0, 0x9fc1, 0x9fc2, 0x9fc3, 0x9fc4, 0x9fc5, 0x9fc6, 0x9fc7, 0x9fc8, 0x9fc9, 0x9fca, 0xb9b0, 0x9fcc, 0x9fcd, 0x9fce, 0x9fcf, 0x9fd0, 0x9fd1, 0x9fd2, 0x9fd3, 0x9fd4, 0x9fd5, 0x9fd6, 0x9fd7, 0x9361, 0x9fd9, 0x9fda, 0x9fdb, 0x9fdc, 0x9fdd, 0x9fde, 0x9fdf, 0x9fe0, 0x9fe1, 0x9fe2, 0x9fe3, 0x9fe4, 0x9fe5, 0x9fe6, 0x9fe7, 0x9fe8, 0x9fe9, 0x9fea, 0x9feb, 0x9fec, 0x9fed, 0x9fee, 0x9fef, 0x9ff0, 0x9ff1, 0x9ff2, 0x9ff3, 0x9ff4, 0x9ff5, 0x9ff6, 0x9ff7, 0x9ff8, 0x9ff9, 0x9ffa, 0x9ffb, 0x9ffc, 0x9ffd, 0x9ffe, 0xa040, 0xa041, 0xa042, 0xa043, 0xa044, 0xa045, 0xa046, 0xa047, 0xa048, 0xa049, 0xa04a, 0xa04b, 0xa04c, 0xa04d, 0xa04e, 0xa04f, 0xa050, 0xa051, 0xa052, 0xa053, 0xa054, 0xa055, 0xa056, 0xa057, 0xa058, 0xa059, 0xa05a, 0xa05b, 0xa05c, 0xa05d, 0xa05e, 0xa05f, 0xa060, 0xa061, 0xa062, 0x8fb6, 0xa064, 0xa065, 0xa066, 0xa067, 0xa068, 0xa069, 0xa06a, 0xa06b, 0xa06c, 0xa06d, 0xa06e, 0xa06f, 0xa070, 0xa071, 0xa072, 0xa073, 0xa074, 0xa075, 0xa076, 0xa9f0, 0xa078, 0xa079, 0xa07a, 0xa07b, 0xa07c, 0xa07d, 0xa07e, 0xa0a1, 0xa0a2, 0xa0a3, 0xa0a4, 0xa0a5, 0xa0a6, 0xa0a7, 0xa0a8, 0xa0a9, 0xa0aa, 0xa0ab, 0xa0ac, 0xa0ad, 0xa0ae, 0xa0af, 0xa0b0, 0xa0b1, 0xa0b2, 0xa0b3, 0xa0b4, 0xa0b5, 0xa0b6, 0xa0b7, 0xa0b8, 0xa0b9, 0xa0ba, 0xa0bb, 0xa0bc, 0xa0bd, 0xa0be, 0xa0bf, 0xa0c0, 0xa0c1, 0xa0c2, 0xa0c3, 0xa0c4, 0xa0c5, 0xa0c6, 0xa0c7, 0xa0c8, 0xa0c9, 0xa0ca, 0xa0cb, 0xa0cc, 0xa0cd, 0xa0ce, 0xa0cf, 0xa0d0, 0xa0d1, 0xa0d2, 0xa0d3, 0xa0d4, 0x947a, 0xa0d6, 0xa0d7, 0xa0d8, 0xa0d9, 0xa0da, 0xa0db, 0xa0dc, 0xa0dd, 0xa0de, 0xde72, 0xa0e0, 0xa0e1, 0xa0e2, 0xa0e3, 0x9455, 0xa0e5, 0xa0e6, 0xa0e7, 0xa0e8, 0xa0e9, 0xa0ea, 0xa0eb, 0xa0ec, 0xa0ed, 0xa0ee, 0xa0ef, 0xa0f0, 0xa0f1, 0xa0f2, 0xa0f3, 0xa0f4, 0xa0f5, 0xa0f6, 0xa0f7, 0xa0f8, 0xa0f9, 0xa0fa, 0xa0fb, 0xa0fc, 0xa0fd, 0xa0fe, 0x8140, 0x8141, 0x8142, 0x8143, 0x8144, 0x8145, 0x8146, 0x8147, 0x8148, 0x8149, 0x814a, 0x814b, 0x814c, 0x814d, 0x814e, 0x814f, 0x8150, 0x8151, 0x8152, 0x8153, 0x8154, 0x8155, 0x8156, 0x8157, 0x8158, 0x8159, 0x815a, 0x815b, 0x815c, 0x815d, 0x815e, 0x815f, 0x8160, 0x8161, 0x8162, 0x8163, 0x8164, 0x8165, 0x8166, 0x8167, 0x8168, 0x8169, 0x816a, 0x816b, 0x816c, 0x816d, 0x816e, 0x816f, 0x8170, 0x8171, 0x8172, 0x8173, 0x8174, 0x8175, 0x8176, 0x8177, 0x8178, 0x8179, 0x817a, 0x817b, 0x817c, 0x817d, 0x817e, 0x81a1, 0x81a2, 0x81a3, 0x81a4, 0x81a5, 0x81a6, 0x81a7, 0x81a8, 0x81a9, 0x81aa, 0x81ab, 0x81ac, 0x81ad, 0x81ae, 0x81af, 0x81b0, 0x81b1, 0x81b2, 0x81b3, 0x81b4, 0x81b5, 0x81b6, 0x81b7, 0x81b8, 0x81b9, 0x81ba, 0x81bb, 0x81bc, 0x81bd, 0x81be, 0x81bf, 0x81c0, 0x81c1, 0x81c2, 0x81c3, 0x81c4, 0x81c5, 0x81c6, 0x81c7, 0x81c8, 0x81c9, 0x81ca, 0x81cb, 0x81cc, 0x81cd, 0x81ce, 0x81cf, 0x81d0, 0x81d1, 0x81d2, 0x81d3, 0x81d4, 0x81d5, 0x81d6, 0x81d7, 0x81d8, 0x81d9, 0x81da, 0x81db, 0x81dc, 0x81dd, 0x81de, 0x81df, 0x81e0, 0x81e1, 0x81e2, 0x81e3, 0x81e4, 0x81e5, 0x81e6, 0x81e7, 0x81e8, 0x81e9, 0x81ea, 0x81eb, 0x81ec, 0x81ed, 0x81ee, 0x81ef, 0x81f0, 0x81f1, 0x81f2, 0x81f3, 0x81f4, 0x81f5, 0x81f6, 0x81f7, 0x81f8, 0x81f9, 0x81fa, 0x81fb, 0x81fc, 0x81fd, 0x81fe, 0x8240, 0x8241, 0x8242, 0x8243, 0x8244, 0x8245, 0x8246, 0x8247, 0x8248, 0x8249, 0x824a, 0x824b, 0x824c, 0x824d, 0x824e, 0x824f, 0x8250, 0x8251, 0x8252, 0x8253, 0x8254, 0x8255, 0x8256, 0x8257, 0x8258, 0x8259, 0x825a, 0x825b, 0x825c, 0x825d, 0x825e, 0x825f, 0x8260, 0x8261, 0x8262, 0x8263, 0x8264, 0x8265, 0x8266, 0x8267, 0x8268, 0x8269, 0x826a, 0x826b, 0x826c, 0x826d, 0x826e, 0x826f, 0x8270, 0x8271, 0x8272, 0x8273, 0x8274, 0x8275, 0x8276, 0x8277, 0x8278, 0x8279, 0x827a, 0x827b, 0x827c, 0x827d, 0x827e, 0x82a1, 0x82a2, 0x82a3, 0x82a4, 0x82a5, 0x82a6, 0x82a7, 0x82a8, 0x82a9, 0x82aa, 0x82ab, 0x82ac, 0x82ad, 0x82ae, 0x82af, 0x82b0, 0x82b1, 0x82b2, 0x82b3, 0x82b4, 0x82b5, 0x82b6, 0x82b7, 0x82b8, 0x82b9, 0x82ba, 0x82bb, 0x82bc, 0x82bd, 0x82be, 0x82bf, 0x82c0, 0x82c1, 0x82c2, 0x82c3, 0x82c4, 0x82c5, 0x82c6, 0x82c7, 0x82c8, 0x82c9, 0x82ca, 0x82cb, 0x82cc, 0x82cd, 0x82ce, 0x82cf, 0x82d0, 0x82d1, 0x82d2, 0x82d3, 0x82d4, 0x82d5, 0x82d6, 0x82d7, 0x82d8, 0x82d9, 0x82da, 0x82db, 0x82dc, 0x82dd, 0x82de, 0x82df, 0x82e0, 0x82e1, 0x82e2, 0x82e3, 0x82e4, 0x82e5, 0x82e6, 0x82e7, 0x82e8, 0x82e9, 0x82ea, 0x82eb, 0x82ec, 0x82ed, 0x82ee, 0x82ef, 0x82f0, 0x82f1, 0x82f2, 0x82f3, 0x82f4, 0x82f5, 0x82f6, 0x82f7, 0x82f8, 0x82f9, 0x82fa, 0x82fb, 0x82fc, 0x82fd, 0x82fe, 0x8340, 0x8341, 0x8342, 0x8343, 0x8344, 0x8345, 0x8346, 0x8347, 0x8348, 0x8349, 0x834a, 0x834b, 0x834c, 0x834d, 0x834e, 0x834f, 0x8350, 0x8351, 0x8352, 0x8353, 0x8354, 0x8355, 0x8356, 0x8357, 0x8358, 0x8359, 0x835a, 0x835b, 0x835c, 0x835d, 0x835e, 0x835f, 0x8360, 0x8361, 0x8362, 0x8363, 0x8364, 0x8365, 0x8366, 0x8367, 0x8368, 0x8369, 0x836a, 0x836b, 0x836c, 0x836d, 0x836e, 0x836f, 0x8370, 0x8371, 0x8372, 0x8373, 0x8374, 0x8375, 0x8376, 0x8377, 0x8378, 0x8379, 0x837a, 0x837b, 0x837c, 0x837d, 0x837e, 0x83a1, 0x83a2, 0x83a3, 0x83a4, 0x83a5, 0x83a6, 0x83a7, 0x83a8, 0x83a9, 0x83aa, 0x83ab, 0x83ac, 0x83ad, 0x83ae, 0x83af, 0x83b0, 0x83b1, 0x83b2, 0x83b3, 0x83b4, 0x83b5, 0x83b6, 0x83b7, 0x83b8, 0x83b9, 0x83ba, 0x83bb, 0x83bc, 0x83bd, 0x83be, 0x83bf, 0x83c0, 0x83c1, 0x83c2, 0x83c3, 0x83c4, 0x83c5, 0x83c6, 0x83c7, 0x83c8, 0x83c9, 0x83ca, 0x83cb, 0x83cc, 0x83cd, 0x83ce, 0x83cf, 0x83d0, 0x83d1, 0x83d2, 0x83d3, 0x83d4, 0x83d5, 0x83d6, 0x83d7, 0x83d8, 0x83d9, 0x83da, 0x83db, 0x83dc, 0x83dd, 0x83de, 0x83df, 0x83e0, 0x83e1, 0x83e2, 0x83e3, 0x83e4, 0x83e5, 0x83e6, 0x83e7, 0x83e8, 0x83e9, 0x83ea, 0x83eb, 0x83ec, 0x83ed, 0x83ee, 0x83ef, 0x83f0, 0x83f1, 0x83f2, 0x83f3, 0x83f4, 0x83f5, 0x83f6, 0x83f7, 0x83f8, 0x83f9, 0x83fa, 0x83fb, 0x83fc, 0x83fd, 0x83fe, 0x8440, 0x8441, 0x8442, 0x8443, 0x8444, 0x8445, 0x8446, 0x8447, 0x8448, 0x8449, 0x844a, 0x844b, 0x844c, 0x844d, 0x844e, 0x844f, 0x8450, 0x8451, 0x8452, 0x8453, 0x8454, 0x8455, 0x8456, 0x8457, 0x8458, 0x8459, 0x845a, 0x845b, 0x845c, 0x845d, 0x845e, 0x845f, 0x8460, 0x8461, 0x8462, 0x8463, 0x8464, 0x8465, 0x8466, 0x8467, 0x8468, 0x8469, 0x846a, 0x846b, 0x846c, 0x846d, 0x846e, 0x846f, 0x8470, 0x8471, 0x8472, 0x8473, 0x8474, 0x8475, 0x8476, 0x8477, 0x8478, 0x8479, 0x847a, 0x847b, 0x847c, 0x847d, 0x847e, 0x84a1, 0x84a2, 0x84a3, 0x84a4, 0x84a5, 0x84a6, 0x84a7, 0x84a8, 0x84a9, 0x84aa, 0x84ab, 0x84ac, 0x84ad, 0x84ae, 0x84af, 0x84b0, 0x84b1, 0x84b2, 0x84b3, 0x84b4, 0x84b5, 0x84b6, 0x84b7, 0x84b8, 0x84b9, 0x84ba, 0x84bb, 0x84bc, 0x84bd, 0x84be, 0x84bf, 0x84c0, 0x84c1, 0x84c2, 0x84c3, 0x84c4, 0x84c5, 0x84c6, 0x84c7, 0x84c8, 0x84c9, 0x84ca, 0x84cb, 0x84cc, 0x84cd, 0x84ce, 0x84cf, 0x84d0, 0x84d1, 0x84d2, 0x84d3, 0x84d4, 0x84d5, 0x84d6, 0x84d7, 0x84d8, 0x84d9, 0x84da, 0x84db, 0x84dc, 0x84dd, 0x84de, 0x84df, 0x84e0, 0x84e1, 0x84e2, 0x84e3, 0x84e4, 0x84e5, 0x84e6, 0x84e7, 0x84e8, 0x84e9, 0x84ea, 0x84eb, 0x84ec, 0x84ed, 0x84ee, 0x84ef, 0x84f0, 0x84f1, 0x84f2, 0x84f3, 0x84f4, 0x84f5, 0x84f6, 0x84f7, 0x84f8, 0x84f9, 0x84fa, 0x84fb, 0x84fc, 0x84fd, 0x84fe, 0x8540, 0x8541, 0x8542, 0x8543, 0x8544, 0x8545, 0x8546, 0x8547, 0x8548, 0x8549, 0x854a, 0x854b, 0x854c, 0x854d, 0x854e, 0x854f, 0x8550, 0x8551, 0x8552, 0x8553, 0x8554, 0x8555, 0x8556, 0x8557, 0x8558, 0x8559, 0x855a, 0x855b, 0x855c, 0x855d, 0x855e, 0x855f, 0x8560, 0x8561, 0x8562, 0x8563, 0x8564, 0x8565, 0x8566, 0x8567, 0x8568, 0x8569, 0x856a, 0x856b, 0x856c, 0x856d, 0x856e, 0x856f, 0x8570, 0x8571, 0x8572, 0x8573, 0x8574, 0x8575, 0x8576, 0x8577, 0x8578, 0x8579, 0x857a, 0x857b, 0x857c, 0x857d, 0x857e, 0x85a1, 0x85a2, 0x85a3, 0x85a4, 0x85a5, 0x85a6, 0x85a7, 0x85a8, 0x85a9, 0x85aa, 0x85ab, 0x85ac, 0x85ad, 0x85ae, 0x85af, 0x85b0, 0x85b1, 0x85b2, 0x85b3, 0x85b4, 0x85b5, 0x85b6, 0x85b7, 0x85b8, 0x85b9, 0x85ba, 0x85bb, 0x85bc, 0x85bd, 0x85be, 0x85bf, 0x85c0, 0x85c1, 0x85c2, 0x85c3, 0x85c4, 0x85c5, 0x85c6, 0x85c7, 0x85c8, 0x85c9, 0x85ca, 0x85cb, 0x85cc, 0x85cd, 0x85ce, 0x85cf, 0x85d0, 0x85d1, 0x85d2, 0x85d3, 0x85d4, 0x85d5, 0x85d6, 0x85d7, 0x85d8, 0x85d9, 0x85da, 0x85db, 0x85dc, 0x85dd, 0x85de, 0x85df, 0x85e0, 0x85e1, 0x85e2, 0x85e3, 0x85e4, 0x85e5, 0x85e6, 0x85e7, 0x85e8, 0x85e9, 0x85ea, 0x85eb, 0x85ec, 0x85ed, 0x85ee, 0x85ef, 0x85f0, 0x85f1, 0x85f2, 0x85f3, 0x85f4, 0x85f5, 0x85f6, 0x85f7, 0x85f8, 0x85f9, 0x85fa, 0x85fb, 0x85fc, 0x85fd, 0x85fe, 0x8640, 0x8641, 0x8642, 0x8643, 0x8644, 0x8645, 0x8646, 0x8647, 0x8648, 0x8649, 0x864a, 0x864b, 0x864c, 0x864d, 0x864e, 0x864f, 0x8650, 0x8651, 0x8652, 0x8653, 0x8654, 0x8655, 0x8656, 0x8657, 0x8658, 0x8659, 0x865a, 0x865b, 0x865c, 0x865d, 0x865e, 0x865f, 0x8660, 0x8661, 0x8662, 0x8663, 0x8664, 0x8665, 0x8666, 0x8667, 0x8668, 0x8669, 0x866a, 0x866b, 0x866c, 0x866d, 0x866e, 0x866f, 0x8670, 0x8671, 0x8672, 0x8673, 0x8674, 0x8675, 0x8676, 0x8677, 0x8678, 0x8679, 0x867a, 0x867b, 0x867c, 0x867d, 0x867e, 0x86a1, 0x86a2, 0x86a3, 0x86a4, 0x86a5, 0x86a6, 0x86a7, 0x86a8, 0x86a9, 0x86aa, 0x86ab, 0x86ac, 0x86ad, 0x86ae, 0x86af, 0x86b0, 0x86b1, 0x86b2, 0x86b3, 0x86b4, 0x86b5, 0x86b6, 0x86b7, 0x86b8, 0x86b9, 0x86ba, 0x86bb, 0x86bc, 0x86bd, 0x86be, 0x86bf, 0x86c0, 0x86c1, 0x86c2, 0x86c3, 0x86c4, 0x86c5, 0x86c6, 0x86c7, 0x86c8, 0x86c9, 0x86ca, 0x86cb, 0x86cc, 0x86cd, 0x86ce, 0x86cf, 0x86d0, 0x86d1, 0x86d2, 0x86d3, 0x86d4, 0x86d5, 0x86d6, 0x86d7, 0x86d8, 0x86d9, 0x86da, 0x86db, 0x86dc, 0x86dd, 0x86de, 0x86df, 0x86e0, 0x86e1, 0x86e2, 0x86e3, 0x86e4, 0x86e5, 0x86e6, 0x86e7, 0x86e8, 0x86e9, 0x86ea, 0x86eb, 0x86ec, 0x86ed, 0x86ee, 0x86ef, 0x86f0, 0x86f1, 0x86f2, 0x86f3, 0x86f4, 0x86f5, 0x86f6, 0x86f7, 0x86f8, 0x86f9, 0x86fa, 0x86fb, 0x86fc, 0x86fd, 0x86fe, 0x8740, 0x8741, 0x8742, 0x8743, 0x8744, 0x8745, 0x8746, 0x8747, 0x8748, 0x8749, 0x874a, 0x874b, 0x874c, 0x874d, 0x874e, 0x874f, 0x8750, 0x8751, 0x8752, 0x8753, 0x8754, 0x8755, 0x8756, 0x8757, 0x8758, 0x8759, 0x875a, 0x875b, 0x875c, 0x875d, 0x875e, 0x875f, 0x8760, 0x8761, 0x8762, 0x8763, 0x8764, 0x8765, 0x8766, 0x8767, 0x8768, 0x8769, 0x876a, 0x876b, 0x876c, 0x876d, 0x876e, 0x876f, 0x8770, 0x8771, 0x8772, 0x8773, 0x8774, 0x8775, 0x8776, 0x8777, 0x8778, 0x8779, 0x877a, 0x877b, 0x877c, 0x877d, 0x877e, 0x87a1, 0x87a2, 0x87a3, 0x87a4, 0x87a5, 0x87a6, 0x87a7, 0x87a8, 0x87a9, 0x87aa, 0x87ab, 0x87ac, 0x87ad, 0x87ae, 0x87af, 0x87b0, 0x87b1, 0x87b2, 0x87b3, 0x87b4, 0x87b5, 0x87b6, 0x87b7, 0x87b8, 0x87b9, 0x87ba, 0x87bb, 0x87bc, 0x87bd, 0x87be, 0x87bf, 0x87c0, 0x87c1, 0x87c2, 0x87c3, 0x87c4, 0x87c5, 0x87c6, 0x87c7, 0x87c8, 0x87c9, 0x87ca, 0x87cb, 0x87cc, 0x87cd, 0x87ce, 0x87cf, 0x87d0, 0x87d1, 0x87d2, 0x87d3, 0x87d4, 0x87d5, 0x87d6, 0x87d7, 0x87d8, 0x87d9, 0x87da, 0x87db, 0x87dc, 0x87dd, 0x87de, 0x87df, 0x87e0, 0x87e1, 0x87e2, 0x87e3, 0x87e4, 0x87e5, 0x87e6, 0x87e7, 0x87e8, 0x87e9, 0x87ea, 0x87eb, 0x87ec, 0x87ed, 0x87ee, 0x87ef, 0x87f0, 0x87f1, 0x87f2, 0x87f3, 0x87f4, 0x87f5, 0x87f6, 0x87f7, 0x87f8, 0x87f9, 0x87fa, 0x87fb, 0x87fc, 0x87fd, 0x87fe, 0x8840, 0x8841, 0x8842, 0x8843, 0x8844, 0x8845, 0x8846, 0x8847, 0x8848, 0x8849, 0x884a, 0x884b, 0x884c, 0x884d, 0x884e, 0x884f, 0x8850, 0x8851, 0x8852, 0x8853, 0x8854, 0x8855, 0x8856, 0x8857, 0x8858, 0x8859, 0x885a, 0x885b, 0x885c, 0x885d, 0x885e, 0x885f, 0x8860, 0x8861, 0x8862, 0x8863, 0x8864, 0x8865, 0x8866, 0x8867, 0x8868, 0x8869, 0x886a, 0x886b, 0x886c, 0x886d, 0x886e, 0x886f, 0x8870, 0x8871, 0x8872, 0x8873, 0x8874, 0x8875, 0x8876, 0x8877, 0x8878, 0x8879, 0x887a, 0x887b, 0x887c, 0x887d, 0x887e, 0x88a1, 0x88a2, 0x88a3, 0x88a4, 0x88a5, 0x88a6, 0x88a7, 0x88a8, 0x88a9, 0x88aa, 0x88ab, 0x88ac, 0x88ad, 0x88ae, 0x88af, 0x88b0, 0x88b1, 0x88b2, 0x88b3, 0x88b4, 0x88b5, 0x88b6, 0x88b7, 0x88b8, 0x88b9, 0x88ba, 0x88bb, 0x88bc, 0x88bd, 0x88be, 0x88bf, 0x88c0, 0x88c1, 0x88c2, 0x88c3, 0x88c4, 0x88c5, 0x88c6, 0x88c7, 0x88c8, 0x88c9, 0x88ca, 0x88cb, 0x88cc, 0x88cd, 0x88ce, 0x88cf, 0x88d0, 0x88d1, 0x88d2, 0x88d3, 0x88d4, 0x88d5, 0x88d6, 0x88d7, 0x88d8, 0x88d9, 0x88da, 0x88db, 0x88dc, 0x88dd, 0x88de, 0x88df, 0x88e0, 0x88e1, 0x88e2, 0x88e3, 0x88e4, 0x88e5, 0x88e6, 0x88e7, 0x88e8, 0x88e9, 0x88ea, 0x88eb, 0x88ec, 0x88ed, 0x88ee, 0x88ef, 0x88f0, 0x88f1, 0x88f2, 0x88f3, 0x88f4, 0x88f5, 0x88f6, 0x88f7, 0x88f8, 0x88f9, 0x88fa, 0x88fb, 0x88fc, 0x88fd, 0x88fe, 0x8940, 0x8941, 0x8942, 0x8943, 0x8944, 0x8945, 0x8946, 0x8947, 0x8948, 0x8949, 0x894a, 0x894b, 0x894c, 0x894d, 0x894e, 0x894f, 0x8950, 0x8951, 0x8952, 0x8953, 0x8954, 0x8955, 0x8956, 0x8957, 0x8958, 0x8959, 0x895a, 0x895b, 0x895c, 0x895d, 0x895e, 0x895f, 0x8960, 0x8961, 0x8962, 0x8963, 0x8964, 0x8965, 0x8966, 0x8967, 0x8968, 0x8969, 0x896a, 0x896b, 0x896c, 0x896d, 0x896e, 0x896f, 0x8970, 0x8971, 0x8972, 0x8973, 0x8974, 0x8975, 0x8976, 0x8977, 0x8978, 0x8979, 0x897a, 0x897b, 0x897c, 0x897d, 0x897e, 0x89a1, 0x89a2, 0x89a3, 0x89a4, 0x89a5, 0x89a6, 0x89a7, 0x89a8, 0x89a9, 0x89aa, 0x89ab, 0x89ac, 0x89ad, 0x89ae, 0x89af, 0x89b0, 0x89b1, 0x89b2, 0x89b3, 0x89b4, 0x89b5, 0x89b6, 0x89b7, 0x89b8, 0x89b9, 0x89ba, 0x89bb, 0x89bc, 0x89bd, 0x89be, 0x89bf, 0x89c0, 0x89c1, 0x89c2, 0x89c3, 0x89c4, 0x89c5, 0x89c6, 0x89c7, 0x89c8, 0x89c9, 0x89ca, 0x89cb, 0x89cc, 0x89cd, 0x89ce, 0x89cf, 0x89d0, 0x89d1, 0x89d2, 0x89d3, 0x89d4, 0x89d5, 0x89d6, 0x89d7, 0x89d8, 0x89d9, 0x89da, 0x89db, 0x89dc, 0x89dd, 0x89de, 0x89df, 0x89e0, 0x89e1, 0x89e2, 0x89e3, 0x89e4, 0x89e5, 0x89e6, 0x89e7, 0x89e8, 0x89e9, 0x89ea, 0x89eb, 0x89ec, 0x89ed, 0x89ee, 0x89ef, 0x89f0, 0x89f1, 0x89f2, 0x89f3, 0x89f4, 0x89f5, 0x89f6, 0x89f7, 0x89f8, 0x89f9, 0x89fa, 0x89fb, 0x89fc, 0x89fd, 0x89fe, 0x8a40, 0x8a41, 0x8a42, 0x8a43, 0x8a44, 0x8a45, 0x8a46, 0x8a47, 0x8a48, 0x8a49, 0x8a4a, 0x8a4b, 0x8a4c, 0x8a4d, 0x8a4e, 0x8a4f, 0x8a50, 0x8a51, 0x8a52, 0x8a53, 0x8a54, 0x8a55, 0x8a56, 0x8a57, 0x8a58, 0x8a59, 0x8a5a, 0x8a5b, 0x8a5c, 0x8a5d, 0x8a5e, 0x8a5f, 0x8a60, 0x8a61, 0x8a62, 0x8a63, 0x8a64, 0x8a65, 0x8a66, 0x8a67, 0x8a68, 0x8a69, 0x8a6a, 0x8a6b, 0x8a6c, 0x8a6d, 0x8a6e, 0x8a6f, 0x8a70, 0x8a71, 0x8a72, 0x8a73, 0x8a74, 0x8a75, 0x8a76, 0x8a77, 0x8a78, 0x8a79, 0x8a7a, 0x8a7b, 0x8a7c, 0x8a7d, 0x8a7e, 0x8aa1, 0x8aa2, 0x8aa3, 0x8aa4, 0x8aa5, 0x8aa6, 0x8aa7, 0x8aa8, 0x8aa9, 0x8aaa, 0x8aab, 0x8aac, 0x8aad, 0x8aae, 0x8aaf, 0x8ab0, 0x8ab1, 0x8ab2, 0x8ab3, 0x8ab4, 0x8ab5, 0x8ab6, 0x8ab7, 0x8ab8, 0x8ab9, 0x8aba, 0x8abb, 0x8abc, 0x8abd, 0x8abe, 0x8abf, 0x8ac0, 0x8ac1, 0x8ac2, 0x8ac3, 0x8ac4, 0x8ac5, 0x8ac6, 0x8ac7, 0x8ac8, 0x8ac9, 0x8aca, 0x8acb, 0x8acc, 0x8acd, 0x8ace, 0x8acf, 0x8ad0, 0x8ad1, 0x8ad2, 0x8ad3, 0x8ad4, 0x8ad5, 0x8ad6, 0x8ad7, 0x8ad8, 0x8ad9, 0x8ada, 0x8adb, 0x8adc, 0x8add, 0x8ade, 0x8adf, 0x8ae0, 0x8ae1, 0x8ae2, 0x8ae3, 0x8ae4, 0x8ae5, 0x8ae6, 0x8ae7, 0x8ae8, 0x8ae9, 0x8aea, 0x8aeb, 0x8aec, 0x8aed, 0x8aee, 0x8aef, 0x8af0, 0x8af1, 0x8af2, 0x8af3, 0x8af4, 0x8af5, 0x8af6, 0x8af7, 0x8af8, 0x8af9, 0x8afa, 0x8afb, 0x8afc, 0x8afd, 0x8afe, 0x8b40, 0x8b41, 0x8b42, 0x8b43, 0x8b44, 0x8b45, 0x8b46, 0x8b47, 0x8b48, 0x8b49, 0x8b4a, 0x8b4b, 0x8b4c, 0x8b4d, 0x8b4e, 0x8b4f, 0x8b50, 0x8b51, 0x8b52, 0x8b53, 0x8b54, 0x8b55, 0x8b56, 0x8b57, 0x8b58, 0x8b59, 0x8b5a, 0x8b5b, 0x8b5c, 0x8b5d, 0x8b5e, 0x8b5f, 0x8b60, 0x8b61, 0x8b62, 0x8b63, 0x8b64, 0x8b65, 0x8b66, 0x8b67, 0x8b68, 0x8b69, 0x8b6a, 0x8b6b, 0x8b6c, 0x8b6d, 0x8b6e, 0x8b6f, 0x8b70, 0x8b71, 0x8b72, 0x8b73, 0x8b74, 0x8b75, 0x8b76, 0x8b77, 0x8b78, 0x8b79, 0x8b7a, 0x8b7b, 0x8b7c, 0x8b7d, 0x8b7e, 0x8ba1, 0x8ba2, 0x8ba3, 0x8ba4, 0x8ba5, 0x8ba6, 0x8ba7, 0x8ba8, 0x8ba9, 0x8baa, 0x8bab, 0x8bac, 0x8bad, 0x8bae, 0x8baf, 0x8bb0, 0x8bb1, 0x8bb2, 0x8bb3, 0x8bb4, 0x8bb5, 0x8bb6, 0x8bb7, 0x8bb8, 0x8bb9, 0x8bba, 0x8bbb, 0x8bbc, 0x8bbd, 0x8bbe, 0x8bbf, 0x8bc0, 0x8bc1, 0x8bc2, 0x8bc3, 0x8bc4, 0x8bc5, 0x8bc6, 0x8bc7, 0x8bc8, 0x8bc9, 0x8bca, 0x8bcb, 0x8bcc, 0x8bcd, 0x8bce, 0x8bcf, 0x8bd0, 0x8bd1, 0x8bd2, 0x8bd3, 0x8bd4, 0x8bd5, 0x8bd6, 0x8bd7, 0x8bd8, 0x8bd9, 0x8bda, 0x8bdb, 0x8bdc, 0x8bdd, 0x8bde, 0x8bdf, 0x8be0, 0x8be1, 0x8be2, 0x8be3, 0x8be4, 0x8be5, 0x8be6, 0x8be7, 0x8be8, 0x8be9, 0x8bea, 0x8beb, 0x8bec, 0x8bed, 0x8bee, 0x8bef, 0x8bf0, 0x8bf1, 0x8bf2, 0x8bf3, 0x8bf4, 0x8bf5, 0x8bf6, 0x8bf7, 0x8bf8, 0x8bf9, 0x8bfa, 0x8bfb, 0x8bfc, 0x8bfd, 0x8bfe, 0x8c40, 0x8c41, 0x8c42, 0x8c43, 0x8c44, 0x8c45, 0x8c46, 0x8c47, 0x8c48, 0x8c49, 0x8c4a, 0x8c4b, 0x8c4c, 0x8c4d, 0x8c4e, 0x8c4f, 0x8c50, 0x8c51, 0x8c52, 0x8c53, 0x8c54, 0x8c55, 0x8c56, 0x8c57, 0x8c58, 0x8c59, 0x8c5a, 0x8c5b, 0x8c5c, 0x8c5d, 0x8c5e, 0x8c5f, 0x8c60, 0x8c61, 0x8c62, 0x8c63, 0x8c64, 0x8c65, 0x8c66, 0x8c67, 0x8c68, 0x8c69, 0x8c6a, 0x8c6b, 0x8c6c, 0x8c6d, 0x8c6e, 0x8c6f, 0x8c70, 0x8c71, 0x8c72, 0x8c73, 0x8c74, 0x8c75, 0x8c76, 0x8c77, 0x8c78, 0x8c79, 0x8c7a, 0x8c7b, 0x8c7c, 0x8c7d, 0x8c7e, 0x8ca1, 0x8ca2, 0x8ca3, 0x8ca4, 0x8ca5, 0x8ca6, 0x8ca7, 0x8ca8, 0x8ca9, 0x8caa, 0x8cab, 0x8cac, 0x8cad, 0x8cae, 0x8caf, 0x8cb0, 0x8cb1, 0x8cb2, 0x8cb3, 0x8cb4, 0x8cb5, 0x8cb6, 0x8cb7, 0x8cb8, 0x8cb9, 0x8cba, 0x8cbb, 0x8cbc, 0x8cbd, 0x8cbe, 0x8cbf, 0x8cc0, 0x8cc1, 0x8cc2, 0x8cc3, 0x8cc4, 0x8cc5, 0x8cc6, 0x8cc7, 0x8cc8, 0x8cc9, 0x8cca, 0x8ccb, 0x8ccc, 0x8ccd, 0x8cce, 0x8ccf, 0x8cd0, 0x8cd1, 0x8cd2, 0x8cd3, 0x8cd4, 0x8cd5, 0x8cd6, 0x8cd7, 0x8cd8, 0x8cd9, 0x8cda, 0x8cdb, 0x8cdc, 0x8cdd, 0x8cde, 0x8cdf, 0x8ce0, 0x8ce1, 0x8ce2, 0x8ce3, 0x8ce4, 0x8ce5, 0x8ce6, 0x8ce7, 0x8ce8, 0x8ce9, 0x8cea, 0x8ceb, 0x8cec, 0x8ced, 0x8cee, 0x8cef, 0x8cf0, 0x8cf1, 0x8cf2, 0x8cf3, 0x8cf4, 0x8cf5, 0x8cf6, 0x8cf7, 0x8cf8, 0x8cf9, 0x8cfa, 0x8cfb, 0x8cfc, 0x8cfd, 0x8cfe, 0x8d40, 0x8d41, 0x8d42, 0x8d43, 0x8d44, 0x8d45, 0x8d46, 0x8d47, 0x8d48, 0x8d49, 0x8d4a, 0x8d4b, 0x8d4c, 0x8d4d, 0x8d4e, 0x8d4f, 0x8d50, 0x8d51, 0x8d52, 0x8d53, 0x8d54, 0x8d55, 0x8d56, 0x8d57, 0x8d58, 0x8d59, 0x8d5a, 0x8d5b, 0x8d5c, 0x8d5d, 0x8d5e, 0x8d5f, 0x8d60, 0x8d61, 0x8d62, 0x8d63, 0x8d64, 0x8d65, 0x8d66, 0x8d67, 0x8d68, 0x8d69, 0x8d6a, 0x8d6b, 0x8d6c, 0x8d6d, 0x8d6e, 0x8d6f, 0x8d70, 0x8d71, 0x8d72, 0x8d73, 0x8d74, 0x8d75, 0x8d76, 0x8d77, 0x8d78, 0x8d79, 0x8d7a, 0x8d7b, 0x8d7c, 0x8d7d, 0x8d7e, 0x8da1, 0x8da2, 0x8da3, 0x8da4, 0x8da5, 0x8da6, 0x8da7, 0x8da8, 0x8da9, 0x8daa, 0x8dab, 0x8dac, 0x8dad, 0x8dae, 0x8daf, 0x8db0, 0x8db1, 0x8db2, 0x8db3, 0x8db4, 0x8db5, 0x8db6, 0x8db7, 0x8db8, 0x8db9, 0x8dba, 0x8dbb, 0x8dbc, 0x8dbd, 0x8dbe, 0x8dbf, 0x8dc0, 0x8dc1, 0x8dc2, 0x8dc3, 0x8dc4, 0x8dc5, 0x8dc6, 0x8dc7, 0x8dc8, 0x8dc9, 0x8dca, 0x8dcb, 0x8dcc, 0x8dcd, 0x8dce, 0x8dcf, 0x8dd0, 0x8dd1, 0x8dd2, 0x8dd3, 0x8dd4, 0x8dd5, 0x8dd6, 0x8dd7, 0x8dd8, 0x8dd9, 0x8dda, 0x8ddb, 0x8ddc, 0x8ddd, 0x8dde, 0x8ddf, 0x8de0, 0x8de1, 0x8de2, 0x8de3, 0x8de4, 0x8de5, 0x8de6, 0x8de7, 0x8de8, 0x8de9, 0x8dea, 0x8deb, 0x8dec, 0x8ded, 0x8dee, 0x8def, 0x8df0, 0x8df1, 0x8df2, 0x8df3, 0x8df4, 0x8df5, 0x8df6, 0x8df7, 0x8df8, 0x8df9, 0x8dfa, 0x8dfb, 0x8dfc, 0x8dfd, 0x8dfe, 0xc6a1, 0xc6a2, 0xc6a3, 0xc6a4, 0xc6a5, 0xc6a6, 0xc6a7, 0xc6a8, 0xc6a9, 0xc6aa, 0xc6ab, 0xc6ac, 0xc6ad, 0xc6ae, 0xc6af, 0xc6b0, 0xc6b1, 0xc6b2, 0xc6b3, 0xc6b4, 0xc6b5, 0xc6b6, 0xc6b7, 0xc6b8, 0xc6b9, 0xc6ba, 0xc6bb, 0xc6bc, 0xc6bd, 0xc6be, 0xc6bf, 0xc6c0, 0xc6c1, 0xc6c2, 0xc6c3, 0xc6c4, 0xc6c5, 0xc6c6, 0xc6c7, 0xc6c8, 0xc6c9, 0xc6ca, 0xc6cb, 0xc6cc, 0xc6cd, 0xc6ce, 0xc6cf, 0xc6d0, 0xc6d1, 0xc6d2, 0xc6d3, 0xc6d4, 0xc6d5, 0xc6d6, 0xc6d7, 0xc6d8, 0xc6d9, 0xc6da, 0xc6db, 0xc6dc, 0xc6dd, 0xc6de, 0xc6df, 0xc6e0, 0xc6e1, 0xc6e2, 0xc6e3, 0xc6e4, 0xc6e5, 0xc6e6, 0xc6e7, 0xc6e8, 0xc6e9, 0xc6ea, 0xc6eb, 0xc6ec, 0xc6ed, 0xc6ee, 0xc6ef, 0xc6f0, 0xc6f1, 0xc6f2, 0xc6f3, 0xc6f4, 0xc6f5, 0xc6f6, 0xc6f7, 0xc6f8, 0xc6f9, 0xc6fa, 0xc6fb, 0xc6fc, 0xc6fd, 0xc6fe, 0xc740, 0xc741, 0xc742, 0xc743, 0xc744, 0xc745, 0xc746, 0xc747, 0xc748, 0xc749, 0xc74a, 0xc74b, 0xc74c, 0xc74d, 0xc74e, 0xc74f, 0xc750, 0xc751, 0xc752, 0xc753, 0xc754, 0xc755, 0xc756, 0xc757, 0xc758, 0xc759, 0xc75a, 0xc75b, 0xc75c, 0xc75d, 0xc75e, 0xc75f, 0xc760, 0xc761, 0xc762, 0xc763, 0xc764, 0xc765, 0xc766, 0xc767, 0xc768, 0xc769, 0xc76a, 0xc76b, 0xc76c, 0xc76d, 0xc76e, 0xc76f, 0xc770, 0xc771, 0xc772, 0xc773, 0xc774, 0xc775, 0xc776, 0xc777, 0xc778, 0xc779, 0xc77a, 0xc77b, 0xc77c, 0xc77d, 0xc77e, 0xc7a1, 0xc7a2, 0xc7a3, 0xc7a4, 0xc7a5, 0xc7a6, 0xc7a7, 0xc7a8, 0xc7a9, 0xc7aa, 0xc7ab, 0xc7ac, 0xc7ad, 0xc7ae, 0xc7af, 0xc7b0, 0xc7b1, 0xc7b2, 0xc7b3, 0xc7b4, 0xc7b5, 0xc7b6, 0xc7b7, 0xc7b8, 0xc7b9, 0xc7ba, 0xc7bb, 0xc7bc, 0xc7bd, 0xc7be, 0xc7bf, 0xc7c0, 0xc7c1, 0xc7c2, 0xc7c3, 0xc7c4, 0xc7c5, 0xc7c6, 0xc7c7, 0xc7c8, 0xc7c9, 0xc7ca, 0xc7cb, 0xc7cc, 0xc7cd, 0xc7ce, 0xc7cf, 0xc7d0, 0xc7d1, 0xc7d2, 0xc7d3, 0xc7d4, 0xc7d5, 0xc7d6, 0xc7d7, 0xc7d8, 0xc7d9, 0xc7da, 0xc7db, 0xc7dc, 0xc7dd, 0xc7de, 0xc7df, 0xc7e0, 0xc7e1, 0xc7e2, 0xc7e3, 0xc7e4, 0xc7e5, 0xc7e6, 0xc7e7, 0xc7e8, 0xc7e9, 0xc7ea, 0xc7eb, 0xc7ec, 0xc7ed, 0xc7ee, 0xc7ef, 0xc7f0, 0xc7f1, 0xc7f2, 0xc7f3, 0xc7f4, 0xc7f5, 0xc7f6, 0xc7f7, 0xc7f8, 0xc7f9, 0xc7fa, 0xc7fb, 0xc7fc, 0xc7fd, 0xc7fe, 0xc840, 0xc841, 0xc842, 0xc843, 0xc844, 0xc845, 0xc846, 0xc847, 0xc848, 0xc849, 0xc84a, 0xc84b, 0xc84c, 0xc84d, 0xc84e, 0xc84f, 0xc850, 0xc851, 0xc852, 0xc853, 0xc854, 0xc855, 0xc856, 0xc857, 0xc858, 0xc859, 0xc85a, 0xc85b, 0xc85c, 0xc85d, 0xc85e, 0xc85f, 0xc860, 0xc861, 0xc862, 0xc863, 0xc864, 0xc865, 0xc866, 0xc867, 0xc868, 0xc869, 0xc86a, 0xc86b, 0xc86c, 0xc86d, 0xc86e, 0xc86f, 0xc870, 0xc871, 0xc872, 0xc873, 0xc874, 0xc875, 0xc876, 0xc877, 0xc878, 0xc879, 0xc87a, 0xc87b, 0xc87c, 0xc87d, 0xc87e, 0xc8a1, 0xc8a2, 0xc8a3, 0xc8a4, 0xc8a5, 0xc8a6, 0xc8a7, 0xc8a8, 0xc8a9, 0xc8aa, 0xc8ab, 0xc8ac, 0xc8ad, 0xc8ae, 0xc8af, 0xc8b0, 0xc8b1, 0xc8b2, 0xc8b3, 0xc8b4, 0xc8b5, 0xc8b6, 0xc8b7, 0xc8b8, 0xc8b9, 0xc8ba, 0xc8bb, 0xc8bc, 0xc8bd, 0xc8be, 0xc8bf, 0xc8c0, 0xc8c1, 0xc8c2, 0xc8c3, 0xc8c4, 0xc8c5, 0xc8c6, 0xc8c7, 0xc8c8, 0xc8c9, 0xc8ca, 0xc8cb, 0xc8cc, 0xc8cd, 0xc8ce, 0xc8cf, 0xc8d0, 0xc8d1, 0xc8d2, 0xc8d3, 0xc8d4, 0xc8d5, 0xc8d6, 0xc8d7, 0xc8d8, 0xc8d9, 0xc8da, 0xc8db, 0xc8dc, 0xc8dd, 0xc8de, 0xc8df, 0xc8e0, 0xc8e1, 0xc8e2, 0xc8e3, 0xc8e4, 0xc8e5, 0xc8e6, 0xc8e7, 0xc8e8, 0xc8e9, 0xc8ea, 0xc8eb, 0xc8ec, 0xc8ed, 0xc8ee, 0xc8ef, 0xc8f0, 0xc8f1, 0xc8f2, 0xc8f3, 0xc8f4, 0xc8f5, 0xc8f6, 0xc8f7, 0xc8f8, 0xc8f9, 0xc8fa, 0xc8fb, 0xc8fc, 0xc8fd, 0xc8fe, 0xb05a, 0xa7f3, 0xa8ae, 0xb8eb, 0xb7c6, 0xa6ea, 0xa579, 0x8bf8, 0xc074, 0xabb4, 0xaaf7, 0xb3e2, 0xa960, 0xc369, 0xc4ee, 0xc3b9, 0xc5da, 0xc1b3, 0xbb72, 0xc5de, 0xbcd6, 0xaca5, 0xaf4f, 0xaf5f, 0xb8a8, 0xb954, 0xc064, 0xb6c3, 0xa75a, 0xc4e6, 0xc4ea, 0xc4f5, 0xc67d, 0xb450, 0xc0dd, 0xc2c5, 0xc4b0, 0xa9d4, 0xc3be, 0xc4fa, 0xb459, 0xaed4, 0xaef6, 0xaf54, 0xa8d3, 0xa74e, 0xb3d2, 0xbedb, 0xc372, 0xc46c, 0xbf63, 0xa6d1, 0xc4aa, 0xb8b8, 0xb8f4, 0xc553, 0xbe7c, 0xc64f, 0xb84c, 0xb853, 0xbaf1, 0xdb77, 0xbffd, 0xb3c0, 0xbdd7, 0xc362, 0xa7cb, 0xc5a2, 0xc5a4, 0xa863, 0xbd55, 0xb8ef, 0xb970, 0xc253, 0xb9f0, 0xbcd3, 0xb25c, 0xba7c, 0xb2d6, 0xc15c, 0xadae, 0xb0c7, 0xa6d8, 0xbbfe, 0xade2, 0xb857, 0xbaf0, 0xb5d9, 0xb3ae, 0xc5aa, 0xced4, 0xbcd6, 0xbfd5, 0xa4a6, 0xb9e7, 0xabe3, 0xb276, 0xb2a7, 0xa55f, 0xeda8, 0xab4b, 0xb45f, 0xa4a3, 0xaa63, 0xbcc6, 0xafc1, 0xb0d1, 0xb6eb, 0xacd9, 0xb8ad, 0xbba1, 0xb1fe, 0xa8b0, 0xa848, 0xac42, 0xad59, 0xb1b0, 0xb2a4, 0xab47, 0xa8e2, 0xb1e7, 0xc2b3, 0xa87d, 0xbdcc, 0xb671, 0xc079, 0xa766, 0xa46b, 0xc366, 0xaec8, 0xc26f, 0xc472, 0xbe5b, 0xc67a, 0xc452, 0xbea4, 0xa44f, 0xbee4, 0xbefa, 0xf765, 0xa67e, 0xbca6, 0xc5ca, 0xbcbf, 0xbaa7, 0xb7d2, 0xe6a3, 0xbd6d, 0xc170, 0xbdfb, 0xbdac, 0xb373, 0xc1e5, 0xa643, 0xa648, 0xab7c, 0xaf50, 0xb5f5, 0xbba1, 0xb747, 0xa9c0, 0xb1c9, 0xc0d4, 0xc3ae, 0xc279, 0xa54f, 0xcbf1, 0xb9e7, 0xc0ad, 0xccb0, 0xacc2, 0xbcfc, 0xb2dc, 0xb2e2, 0xb961, 0xb973, 0xc646, 0xbbe2, 0xa8d2, 0xc2a7, 0xc4bf, 0xc1f5, 0xb463, 0xa446, 0xb9b1, 0xbc64, 0xa7bf, 0xaec6, 0xbcd6, 0xbf52, 0xc0f8, 0xe764, 0xbff1, 0xc073, 0xb777, 0xa8bf, 0xbc42, 0xccd8, 0xac68, 0xac79, 0xb7c8, 0xaf5b, 0xaf64, 0xb2b8, 0xafc3, 0xc3fe, 0xa4bb, 0xbcae, 0xb3b0, 0xaddb, 0xb15b, 0xb25f, 0xbdfc, 0xabdf, 0xb758, 0xaedf, 0xb276, 0xb6a9, 0xa751, 0xa64f, 0xbc69, 0xa9f6, 0xa7f5, 0xb1f9, 0xaa64, 0xb27a, 0xb567, 0xbfa9, 0xb8cc, 0xa8bd, 0xc2f7, 0xb0ce, 0xb7c4, 0xa75b, 0xbf4d, 0xbf5a, 0xc4a9, 0xc5ec, 0xc5ef, 0xaa4c, 0xb24f, 0xc17b, 0xa5df, 0xb2c1, 0xb2c9, 0xaaac, 0xaaa5, 0xc3d1, 0xa4b0, 0xaff9, 0xa8eb, 0xa4c1, 0xabd7, 0xa9dd, 0xbf7d, 0xa676, 0xac7d, 0xbcc9, 0xbfe7, 0xa6e6, 0xadb0, 0xa8a3, 0xb9f8, 0xc94a, 0xddfc, 0xb6ef, 0xb4b8, 0xe8f9, 0xbdde, 0xaf71, 0xafab, 0xb2bb, 0xbad6, 0xb974, 0xbaeb, 0xa6d0, 0xbdd1, 0xb668, 0xb3a3, 0xb6ba, 0xb97d, 0xc05d, 0xc562, 0xa14a, 0xa157, 0xa159, 0xa15b, 0xa15f, 0xa160, 0xa163, 0xa164, 0xa167, 0xa168, 0xa16b, 0xa16c, 0xa16f, 0xa170, 0xa173, 0xa174, 0xa177, 0xa178, 0xa17b, 0xa17c, 0xa1c6, 0xa1c7, 0xa1ca, 0xa1cb, 0xa1c8, 0xa1c9, 0xa15c, 0xa14d, 0xa14e, 0xa14f, 0xa151, 0xa152, 0xa153, 0xa154, 0xa17d, 0xa17e, 0xa1a1, 0xa1a2, 0xa1a3, 0xa1a4, 0xa1cc, 0xa1cd, 0xa1ce, 0xa1de, 0xa1df, 0xa1e0, 0xa1e1, 0xa1e2, 0xa242, 0xa24c, 0xa24d, 0xa24e, 0xa149, 0xc8d0, 0xa1ad, 0xa243, 0xa248, 0xa1ae, 0xc8cf, 0xa15d, 0xa15e, 0xa1af, 0xa1cf, 0xa141, 0xa1d0, 0xa144, 0xa1fe, 0xa2af, 0xa2b0, 0xa2b1, 0xa2b2, 0xa2b3, 0xa2b4, 0xa2b5, 0xa2b6, 0xa2b7, 0xa2b8, 0xa147, 0xa146, 0xa1d5, 0xa1d7, 0xa1d6, 0xa148, 0xa249, 0xa2cf, 0xa2d0, 0xa2d1, 0xa2d2, 0xa2d3, 0xa2d4, 0xa2d5, 0xa2d6, 0xa2d7, 0xa2d8, 0xa2d9, 0xa2da, 0xa2db, 0xa2dc, 0xa2dd, 0xa2de, 0xa2df, 0xa2e0, 0xa2e1, 0xa2e2, 0xa2e3, 0xa2e4, 0xa2e5, 0xa2e6, 0xa2e7, 0xa2e8, 0xc6e4, 0xa240, 0xc6e5, 0xa173, 0xa1c4, 0xa1a5, 0xa2e9, 0xa2ea, 0xa2eb, 0xa2ec, 0xa2ed, 0xa2ee, 0xa2ef, 0xa2f0, 0xa2f1, 0xa2f2, 0xa2f3, 0xa2f4, 0xa2f5, 0xa2f6, 0xa2f7, 0xa2f8, 0xa2f9, 0xa2fa, 0xa2fb, 0xa2fc, 0xa2fd, 0xa2fe, 0xa340, 0xa341, 0xa342, 0xa343, 0xa161, 0xa155, 0xa162, 0xa1e3, 0xa14e, 0xa246, 0xa247, 0xc8cd, 0xa1c3, 0xc8ce, 0xa244, 0xf9fe, }; static const Summary16 big5hkscs_uni2indx_page00[16] = { /* 0x0000 */ { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x81ac }, { 6, 0x01b3 }, { 12, 0x0703 }, { 17, 0x008c }, { 20, 0x3703 }, { 27, 0x178c }, }; static const Summary16 big5hkscs_uni2indx_page02[29] = { /* 0x0200 */ { 56, 0x0000 }, { 56, 0x0000 }, { 56, 0x0000 }, { 56, 0x0000 }, { 56, 0x0000 }, { 56, 0x0813 }, { 60, 0x0402 }, { 62, 0x0020 }, { 63, 0x0408 }, { 65, 0x0000 }, { 65, 0x0000 }, { 65, 0x0000 }, { 65, 0x2ec0 }, { 71, 0x0200 }, { 72, 0x0000 }, { 72, 0x0000 }, /* 0x0300 */ { 72, 0x0020 }, { 73, 0x0000 }, { 73, 0x0000 }, { 73, 0x0000 }, { 73, 0x0000 }, { 73, 0x0000 }, { 73, 0x0000 }, { 73, 0x0000 }, { 73, 0x0000 }, { 73, 0xfffe }, { 88, 0x03fb }, { 97, 0xfffe }, { 112, 0x03fb }, }; static const Summary16 big5hkscs_uni2indx_page20[44] = { /* 0x2000 */ { 191, 0x0000 }, { 191, 0x3378 }, { 199, 0x00f4 }, { 204, 0x482c }, { 209, 0x0000 }, { 209, 0x0000 }, { 209, 0x0000 }, { 209, 0x0000 }, { 209, 0x0000 }, { 209, 0x0000 }, { 209, 0x0000 }, { 209, 0x0000 }, { 209, 0x0000 }, { 209, 0x0000 }, { 209, 0x0000 }, { 209, 0x0000 }, /* 0x2100 */ { 209, 0x0228 }, { 212, 0x0040 }, { 213, 0x0002 }, { 214, 0x0000 }, { 214, 0x0000 }, { 214, 0x0000 }, { 214, 0x03ff }, { 224, 0x03ff }, { 234, 0x0000 }, { 234, 0x03cf }, { 242, 0x0000 }, { 242, 0x0300 }, { 244, 0x0000 }, { 244, 0x0000 }, { 244, 0x0080 }, { 245, 0x0000 }, /* 0x2200 */ { 245, 0x0000 }, { 245, 0xc560 }, { 251, 0x4e29 }, { 258, 0x0030 }, { 260, 0x0000 }, { 260, 0x0004 }, { 261, 0x00cb }, { 266, 0x0000 }, { 266, 0x0000 }, { 266, 0x0220 }, { 268, 0x0020 }, { 269, 0x8000 }, }; static const Summary16 big5hkscs_uni2indx_page25[21] = { /* 0x2500 */ { 291, 0x1005 }, { 294, 0x1111 }, { 298, 0x1010 }, { 300, 0x1010 }, { 302, 0x0000 }, { 302, 0xffff }, { 318, 0xffff }, { 334, 0x001f }, { 339, 0xfffe }, { 354, 0x0038 }, { 357, 0x0003 }, { 359, 0x300c }, { 363, 0xc8c0 }, { 368, 0x0000 }, { 368, 0x003c }, { 372, 0x0000 }, /* 0x2600 */ { 372, 0x0260 }, { 375, 0x0000 }, { 375, 0x0000 }, { 375, 0x0000 }, { 375, 0x0007 }, }; static const Summary16 big5hkscs_uni2indx_page30[62] = { /* 0x3000 */ { 408, 0xffef }, { 423, 0x7037 }, { 431, 0x03fe }, { 440, 0x0001 }, { 441, 0xfffe }, { 456, 0xffff }, { 472, 0xffff }, { 488, 0xffff }, { 504, 0xffff }, { 520, 0x780f }, { 528, 0xfffe }, { 543, 0xffff }, { 559, 0xffff }, { 575, 0xffff }, { 591, 0xffff }, { 607, 0x707f }, /* 0x3100 */ { 617, 0xffe0 }, { 628, 0xffff }, { 644, 0x03ff }, { 654, 0x0000 }, { 654, 0x0000 }, { 654, 0x0000 }, { 654, 0x0000 }, { 654, 0x0000 }, { 654, 0x0000 }, { 654, 0xfffc }, { 668, 0x0000 }, { 668, 0x0000 }, { 668, 0x0000 }, { 668, 0x0000 }, { 668, 0x0000 }, { 668, 0x0000 }, /* 0x3200 */ { 668, 0x0000 }, { 668, 0x0000 }, { 668, 0xffff }, { 684, 0xffff }, { 700, 0x000f }, { 704, 0x0000 }, { 704, 0x0000 }, { 704, 0x0000 }, { 704, 0xffff }, { 720, 0xffff }, { 736, 0xffff }, { 752, 0x0001 }, { 753, 0x0000 }, { 753, 0x0000 }, { 753, 0x0000 }, { 753, 0x0000 }, /* 0x3300 */ { 753, 0x0000 }, { 753, 0x0000 }, { 753, 0x0000 }, { 753, 0x0000 }, { 753, 0x0000 }, { 753, 0x0000 }, { 753, 0x0000 }, { 753, 0x0000 }, { 753, 0xc000 }, { 755, 0x7000 }, { 758, 0x0002 }, { 759, 0x0000 }, { 759, 0x4010 }, { 761, 0x0026 }, }; static const Summary16 big5hkscs_uni2indx_page4e[1307] = { /* 0x4e00 */ { 1275, 0xff9b }, { 1288, 0xd773 }, { 1299, 0xfd52 }, { 1309, 0xbbcf }, { 1321, 0xebac }, { 1331, 0xff4c }, { 1342, 0x0600 }, { 1344, 0xc108 }, { 1348, 0x7bff }, { 1362, 0xcf3e }, { 1373, 0x797f }, { 1385, 0x9ec8 }, { 1393, 0x6fdf }, { 1406, 0xf7f0 }, { 1417, 0x4f3a }, { 1426, 0xa9ff }, /* 0x4f00 */ { 1438, 0xef3f }, { 1451, 0x27bf }, { 1462, 0xb304 }, { 1468, 0xffdd }, { 1482, 0xfbee }, { 1495, 0xffff }, { 1511, 0xde9f }, { 1523, 0xfffd }, { 1538, 0xafff }, { 1552, 0x7df7 }, { 1565, 0xc904 }, { 1570, 0xaeed }, { 1581, 0xffbf }, { 1596, 0xffdb }, { 1610, 0xd033 }, { 1617, 0x67ff }, /* 0x5000 */ { 1630, 0xfbe9 }, { 1642, 0xdffe }, { 1656, 0xffef }, { 1671, 0x18bb }, { 1679, 0xffeb }, { 1693, 0xfdea }, { 1705, 0xff7f }, { 1720, 0x24fd }, { 1729, 0x79af }, { 1740, 0x7f77 }, { 1753, 0xf04c }, { 1760, 0xfdff }, { 1775, 0xeff6 }, { 1788, 0xaefb }, { 1800, 0xf7fb }, { 1814, 0xfb7b }, /* 0x5100 */ { 1827, 0x7fff }, { 1842, 0x95bf }, { 1853, 0x6e77 }, { 1864, 0xbfbf }, { 1878, 0x3bfb }, { 1890, 0xfef4 }, { 1902, 0x7faf }, { 1915, 0x13f2 }, { 1923, 0xa7c5 }, { 1932, 0x55fe }, { 1943, 0x5db5 }, { 1953, 0x73ff }, { 1966, 0xfff8 }, { 1979, 0xf99f }, { 1991, 0x2017 }, { 1996, 0x777b }, /* 0x5200 */ { 2008, 0x5fef }, { 2021, 0xf0cf }, { 2031, 0x47f3 }, { 2041, 0x1dff }, { 2053, 0x7eda }, { 2064, 0xfef4 }, { 2076, 0xff07 }, { 2087, 0xbfbc }, { 2099, 0xbf9f }, { 2112, 0x8fdb }, { 2123, 0x7f5b }, { 2135, 0x5a20 }, { 2140, 0x32af }, { 2149, 0xebef }, { 2162, 0x8a5f }, { 2171, 0xdfbb }, /* 0x5300 */ { 2184, 0xef62 }, { 2194, 0xb6e7 }, { 2205, 0xb49f }, { 2215, 0xfb9f }, { 2228, 0x77bf }, { 2241, 0xf49e }, { 2251, 0xf2db }, { 2262, 0xfbbf }, { 2276, 0xc414 }, { 2281, 0xf7dc }, { 2293, 0x7ff5 }, { 2306, 0x0a55 }, { 2312, 0x3f2e }, { 2322, 0x8fd7 }, { 2333, 0xff7f }, { 2348, 0x59ef }, /* 0x5400 */ { 2359, 0xffda }, { 2372, 0xff5f }, { 2386, 0xfffb }, { 2401, 0x7bff }, { 2415, 0xedef }, { 2428, 0x0010 }, { 2429, 0xbfff }, { 2444, 0xfdff }, { 2459, 0xf9f7 }, { 2472, 0x55ff }, { 2484, 0xffff }, { 2500, 0xffdf }, { 2515, 0xfbff }, { 2530, 0x4441 }, { 2534, 0xefff }, { 2549, 0xbd8e }, /* 0x5500 */ { 2559, 0xfffe }, { 2574, 0x459f }, { 2583, 0xfde8 }, { 2594, 0xdbff }, { 2608, 0xeffb }, { 2622, 0xf0ef }, { 2633, 0x0e7e }, { 2642, 0xfaee }, { 2654, 0xffdf }, { 2669, 0xb73f }, { 2681, 0x7ffe }, { 2695, 0x9e3f }, { 2706, 0xffff }, { 2722, 0xffff }, { 2738, 0x97fe }, { 2750, 0xfee7 }, /* 0x5600 */ { 2763, 0xf377 }, { 2775, 0xf8ff }, { 2788, 0xf6af }, { 2800, 0xeffd }, { 2814, 0xf76f }, { 2827, 0x679d }, { 2837, 0xff7f }, { 2852, 0xdfdf }, { 2866, 0xfeff }, { 2881, 0xf7ad }, { 2893, 0xfdf2 }, { 2905, 0xf2fe }, { 2917, 0x3f6f }, { 2929, 0xecda }, { 2939, 0xecb7 }, { 2950, 0xa683 }, /* 0x5700 */ { 2957, 0x3f9f }, { 2969, 0xfd7c }, { 2981, 0xf70d }, { 2991, 0xe81d }, { 2999, 0xfeef }, { 3013, 0x8897 }, { 3020, 0xafd6 }, { 3031, 0xfcff }, { 3045, 0xbd0d }, { 3054, 0xffb9 }, { 3067, 0x44bf }, { 3076, 0xff70 }, { 3087, 0xd9de }, { 3098, 0xf0b5 }, { 3107, 0xf2ff }, { 3120, 0x7fff }, /* 0x5800 */ { 3135, 0x7fff }, { 3150, 0x7a15 }, { 3158, 0xf7ff }, { 3173, 0xafff }, { 3187, 0xff91 }, { 3198, 0xffbe }, { 3212, 0xbb3c }, { 3222, 0xfe7e }, { 3235, 0xcfef }, { 3248, 0xf71f }, { 3260, 0xdfeb }, { 3273, 0xfc6b }, { 3284, 0xcbe6 }, { 3294, 0xff7f }, { 3309, 0x9b9d }, { 3319, 0xfe1d }, /* 0x5900 */ { 3330, 0xf4fc }, { 3341, 0x96f6 }, { 3351, 0xfeb5 }, { 3363, 0x5196 }, { 3370, 0xc7b1 }, { 3379, 0x15bb }, { 3388, 0x6ea7 }, { 3398, 0xfbff }, { 3413, 0xe63f }, { 3424, 0xe7dd }, { 3436, 0xd1ff }, { 3448, 0x7fff }, { 3463, 0xfffb }, { 3478, 0x7f5f }, { 3491, 0xff7b }, { 3505, 0xffff }, /* 0x5a00 */ { 3521, 0xbe0f }, { 3531, 0xdfee }, { 3544, 0x7ebb }, { 3556, 0x73e8 }, { 3565, 0x37ff }, { 3578, 0xffff }, { 3594, 0x7fff }, { 3609, 0xff83 }, { 3620, 0xdd5e }, { 3631, 0xfeff }, { 3646, 0xdae7 }, { 3657, 0xffff }, { 3673, 0xffdf }, { 3688, 0xffe8 }, { 3700, 0x7f7f }, { 3714, 0xeffd }, /* 0x5b00 */ { 3728, 0xbbae }, { 3739, 0xeefb }, { 3752, 0xfdfb }, { 3766, 0xf115 }, { 3774, 0xfdfb }, { 3788, 0xbdfb }, { 3801, 0x7b7c }, { 3812, 0xbdff }, { 3826, 0xdbbf }, { 3839, 0xffed }, { 3853, 0x75fc }, { 3864, 0x8379 }, { 3872, 0x7cff }, { 3885, 0xc3ff }, { 3897, 0xdfff }, { 3912, 0x856f }, /* 0x5c00 */ { 3921, 0xffba }, { 3934, 0xd47f }, { 3945, 0x153d }, { 3953, 0xdf8b }, { 3964, 0xfff3 }, { 3978, 0x737b }, { 3989, 0xf7bd }, { 4002, 0x5e1a }, { 4010, 0xbf60 }, { 4019, 0xf63f }, { 4031, 0xffff }, { 4047, 0x05eb }, { 4055, 0xdfc6 }, { 4066, 0xcfdf }, { 4079, 0xf720 }, { 4087, 0xabf3 }, /* 0x5d00 */ { 4098, 0xf8c3 }, { 4107, 0xeff7 }, { 4121, 0xd3fd }, { 4133, 0xf7ff }, { 4148, 0x5fef }, { 4161, 0x4ae7 }, { 4170, 0x9bac }, { 4179, 0xfe97 }, { 4191, 0x6ff7 }, { 4204, 0xf6bc }, { 4215, 0xff97 }, { 4228, 0x37f7 }, { 4240, 0xaacf }, { 4250, 0xe9f6 }, { 4261, 0x49e7 }, { 4270, 0xe2bf }, /* 0x5e00 */ { 4281, 0x5e5c }, { 4290, 0xaff6 }, { 4302, 0x6b3f }, { 4313, 0x61d8 }, { 4320, 0xfd3f }, { 4333, 0xfbb8 }, { 4344, 0xffcf }, { 4358, 0xff7d }, { 4372, 0xbfdd }, { 4385, 0x1ee4 }, { 4393, 0x7dfd }, { 4406, 0x63ff }, { 4418, 0x7ff6 }, { 4431, 0xffff }, { 4447, 0xd3ef }, { 4459, 0xdfde }, /* 0x5f00 */ { 4472, 0xfdb6 }, { 4484, 0xadbc }, { 4494, 0x63fc }, { 4504, 0x15eb }, { 4513, 0xff59 }, { 4525, 0x33d3 }, { 4534, 0xbebe }, { 4546, 0xfbdf }, { 4560, 0x1fef }, { 4572, 0xdbc7 }, { 4583, 0xfff3 }, { 4597, 0xfee6 }, { 4609, 0xb23f }, { 4619, 0xebf7 }, { 4632, 0xed3b }, { 4643, 0xadba }, /* 0x6000 */ { 4653, 0xfe01 }, { 4661, 0x7eff }, { 4675, 0xffff }, { 4691, 0x0abe }, { 4699, 0x36ff }, { 4711, 0xef3d }, { 4723, 0xfffc }, { 4737, 0xc0a5 }, { 4743, 0x77fb }, { 4756, 0xfcf5 }, { 4768, 0x019d }, { 4774, 0xffff }, { 4790, 0xfffb }, { 4805, 0xffba }, { 4818, 0x03df }, { 4827, 0xffff }, /* 0x6100 */ { 4843, 0xfffb }, { 4858, 0xbf7d }, { 4871, 0xdb8c }, { 4880, 0xe8d5 }, { 4889, 0xfff7 }, { 4904, 0xff7d }, { 4918, 0xddff }, { 4932, 0x76ff }, { 4945, 0x7e8f }, { 4956, 0xbf7f }, { 4970, 0xff96 }, { 4982, 0xd7ff }, { 4996, 0xbfef }, { 5010, 0xc549 }, { 5017, 0x6ffd }, { 5030, 0xffe7 }, /* 0x6200 */ { 5044, 0x779b }, { 5055, 0x8e77 }, { 5065, 0x7ebf }, { 5078, 0xe6dd }, { 5089, 0x7fcf }, { 5102, 0x5f1f }, { 5113, 0xe17f }, { 5124, 0xfedf }, { 5138, 0xd7ff }, { 5152, 0x21ff }, { 5162, 0xff50 }, { 5172, 0xfb7b }, { 5185, 0xfffc }, { 5199, 0x9fff }, { 5213, 0xf820 }, { 5219, 0xffff }, /* 0x6300 */ { 5235, 0xfb8f }, { 5247, 0x017b }, { 5254, 0xff00 }, { 5262, 0x7ffe }, { 5276, 0xffff }, { 5292, 0x07f3 }, { 5301, 0xfbb0 }, { 5311, 0xbfe7 }, { 5324, 0xffbf }, { 5339, 0xfbd7 }, { 5352, 0xffbf }, { 5367, 0x6203 }, { 5372, 0xffff }, { 5388, 0xffef }, { 5403, 0xefff }, { 5418, 0x5b7f }, /* 0x6400 */ { 5430, 0xfec0 }, { 5439, 0xddfd }, { 5452, 0xfdff }, { 5467, 0xeffd }, { 5481, 0x680b }, { 5487, 0xff1f }, { 5500, 0xfbe3 }, { 5512, 0xbfff }, { 5527, 0xbfa4 }, { 5537, 0xf7ef }, { 5551, 0xfa7d }, { 5563, 0xf85f }, { 5574, 0xeebf }, { 5587, 0x2fdd }, { 5598, 0xbfff }, { 5613, 0xfd9f }, /* 0x6500 */ { 5626, 0xf6db }, { 5638, 0xfbfb }, { 5652, 0xfe7f }, { 5666, 0xebfd }, { 5679, 0xa76a }, { 5688, 0xf3fa }, { 5700, 0xbdfc }, { 5712, 0x9ffc }, { 5724, 0x1bff }, { 5736, 0xfaf7 }, { 5749, 0xddb7 }, { 5761, 0xfbed }, { 5774, 0xf87e }, { 5785, 0xecdf }, { 5797, 0xf36f }, { 5809, 0xbc3f }, /* 0x6600 */ { 5820, 0xfffd }, { 5835, 0xf13f }, { 5846, 0xe9ff }, { 5859, 0x067f }, { 5868, 0x9fbe }, { 5880, 0xfe8e }, { 5891, 0xddfe }, { 5904, 0x7fdf }, { 5918, 0x7ff1 }, { 5930, 0xa7f7 }, { 5942, 0xef17 }, { 5953, 0xefff }, { 5968, 0xffd1 }, { 5980, 0x7f44 }, { 5989, 0x7b59 }, { 5999, 0xd3df }, /* 0x6700 */ { 6011, 0xff3f }, { 6025, 0xebfd }, { 6038, 0x7def }, { 6051, 0xff7a }, { 6064, 0xfbf0 }, { 6075, 0xf6eb }, { 6087, 0xbc87 }, { 6096, 0xffff }, { 6112, 0xfafa }, { 6124, 0xb7bf }, { 6137, 0xd011 }, { 6142, 0x8fff }, { 6155, 0xff7f }, { 6170, 0xffdf }, { 6185, 0xfefc }, { 6198, 0xd7ff }, /* 0x6800 */ { 6212, 0x201f }, { 6218, 0xfddd }, { 6231, 0xef67 }, { 6243, 0x7ffe }, { 6257, 0xffff }, { 6273, 0x207b }, { 6280, 0xe820 }, { 6285, 0xfbf6 }, { 6298, 0x9fff }, { 6312, 0xb9df }, { 6324, 0xffdf }, { 6339, 0x227f }, { 6348, 0x7ff8 }, { 6360, 0xf5ff }, { 6374, 0xdfdb }, { 6387, 0x3fff }, /* 0x6900 */ { 6401, 0xffff }, { 6417, 0x0fbf }, { 6428, 0x9420 }, { 6432, 0xfbfd }, { 6446, 0xdf7f }, { 6460, 0xfffe }, { 6475, 0xffff }, { 6491, 0x0fff }, { 6503, 0x646d }, { 6511, 0xdffb }, { 6525, 0xffff }, { 6541, 0xfaff }, { 6555, 0xfe5f }, { 6568, 0x027b }, { 6575, 0x7bf6 }, { 6587, 0xffde }, /* 0x6a00 */ { 6601, 0xbfff }, { 6616, 0xfffa }, { 6630, 0x39eb }, { 6640, 0xff3c }, { 6652, 0xfbfb }, { 6666, 0xefff }, { 6681, 0xafff }, { 6695, 0xc452 }, { 6701, 0xf6bf }, { 6714, 0xfeff }, { 6729, 0xf9ff }, { 6743, 0x6ffe }, { 6756, 0xbfec }, { 6768, 0xff1b }, { 6780, 0xdda3 }, { 6790, 0x1f4b }, /* 0x6b00 */ { 6799, 0x8f3d }, { 6809, 0x67cf }, { 6820, 0xb12b }, { 6828, 0xfffe }, { 6843, 0x7fee }, { 6856, 0xdaf7 }, { 6868, 0xa4ff }, { 6879, 0xcfd4 }, { 6889, 0xf75f }, { 6902, 0xcbf2 }, { 6912, 0xecfd }, { 6924, 0xb4ed }, { 6934, 0xbffb }, { 6948, 0x5ddd }, { 6959, 0x9ddf }, { 6971, 0xff8d }, /* 0x6c00 */ { 6983, 0xbb7f }, { 6996, 0xbf7b }, { 7009, 0xddfb }, { 7022, 0xeffb }, { 7036, 0xfe4f }, { 7048, 0xffb5 }, { 7061, 0xefe3 }, { 7073, 0xef7f }, { 7087, 0xffff }, { 7103, 0xbf7d }, { 7116, 0xfc04 }, { 7123, 0xffdf }, { 7138, 0xfeff }, { 7153, 0xfeff }, { 7168, 0xffaf }, { 7182, 0x822f }, /* 0x6d00 */ { 7189, 0xffff }, { 7205, 0xefc7 }, { 7217, 0xfff5 }, { 7231, 0xffff }, { 7247, 0x4007 }, { 7251, 0xdf80 }, { 7259, 0xf7ff }, { 7274, 0xfff7 }, { 7289, 0xffff }, { 7305, 0x01ff }, { 7314, 0xdc30 }, { 7321, 0xffbe }, { 7335, 0xbff5 }, { 7348, 0xffff }, { 7364, 0xff7f }, { 7379, 0x7eff }, /* 0x6e00 */ { 7393, 0x843d }, { 7400, 0xbf20 }, { 7408, 0xffff }, { 7424, 0xff7f }, { 7439, 0xeefb }, { 7452, 0xff7f }, { 7467, 0xcbff }, { 7480, 0x13de }, { 7489, 0xeb40 }, { 7496, 0xffdd }, { 7510, 0xccff }, { 7522, 0xffff }, { 7538, 0xffff }, { 7554, 0x3f7f }, { 7567, 0xfb04 }, { 7575, 0xfff6 }, /* 0x6f00 */ { 7589, 0xffff }, { 7605, 0xd7fc }, { 7617, 0xfeff }, { 7632, 0xffff }, { 7648, 0xc01b }, { 7654, 0xfdff }, { 7669, 0xfedf }, { 7683, 0xffdd }, { 7697, 0x7ff7 }, { 7711, 0xe0fd }, { 7721, 0xffff }, { 7737, 0xff7f }, { 7752, 0xffdf }, { 7767, 0xff38 }, { 7778, 0xfbdf }, { 7792, 0xddd7 }, /* 0x7000 */ { 7804, 0xfefb }, { 7818, 0xfff2 }, { 7831, 0x9fdf }, { 7844, 0xdfbf }, { 7858, 0x3f7f }, { 7871, 0xfdf7 }, { 7885, 0x9fff }, { 7899, 0xf7f3 }, { 7912, 0xce7e }, { 7923, 0x877e }, { 7933, 0xfafb }, { 7946, 0x7fbb }, { 7959, 0xfdf1 }, { 7971, 0xf7ff }, { 7986, 0x8017 }, { 7991, 0xfffb }, /* 0x7100 */ { 8006, 0x7e75 }, { 8017, 0xfe89 }, { 8027, 0xdb6f }, { 8039, 0x4c7f }, { 8049, 0xfeff }, { 8064, 0xf75f }, { 8077, 0x5fff }, { 8091, 0x7def }, { 8104, 0xd7f7 }, { 8117, 0xffd7 }, { 8131, 0xb7bf }, { 8144, 0xf7bf }, { 8158, 0xcfff }, { 8172, 0xbf77 }, { 8185, 0x79f7 }, { 8197, 0xfb77 }, /* 0x7200 */ { 8210, 0xf6ef }, { 8223, 0xeef9 }, { 8235, 0x7fdc }, { 8247, 0xef61 }, { 8257, 0x9fd7 }, { 8269, 0xffed }, { 8283, 0xd6cf }, { 8294, 0xfbdd }, { 8307, 0xfbf7 }, { 8321, 0xedff }, { 8335, 0xf7fe }, { 8349, 0xa435 }, { 8356, 0x7e7f }, { 8369, 0x97d7 }, { 8380, 0x0f5f }, { 8390, 0xffd8 }, /* 0x7300 */ { 8402, 0x9d97 }, { 8412, 0x7bcf }, { 8424, 0x7fec }, { 8436, 0xdfff }, { 8451, 0xf73f }, { 8464, 0xef87 }, { 8475, 0xdfe7 }, { 8488, 0xfdff }, { 8503, 0xdfff }, { 8518, 0xf1fc }, { 8529, 0x3ff7 }, { 8542, 0xdffc }, { 8555, 0xffed }, { 8569, 0x7ffd }, { 8583, 0xefff }, { 8598, 0xfff8 }, /* 0x7400 */ { 8611, 0x3fff }, { 8625, 0xfef6 }, { 8638, 0xff7f }, { 8653, 0x97ff }, { 8666, 0xefff }, { 8681, 0xfeff }, { 8696, 0xffbd }, { 8710, 0xf67f }, { 8723, 0x3fef }, { 8736, 0xdfb5 }, { 8748, 0xaffb }, { 8761, 0xeff7 }, { 8775, 0x9d2f }, { 8785, 0xfff9 }, { 8799, 0x53ff }, { 8811, 0xe9f7 }, /* 0x7500 */ { 8823, 0xf9bd }, { 8835, 0xf7ff }, { 8850, 0xff66 }, { 8862, 0xefbf }, { 8876, 0xfdc5 }, { 8887, 0xbe3a }, { 8897, 0xfcfd }, { 8910, 0xe7c5 }, { 8920, 0xfcd9 }, { 8931, 0x6737 }, { 8941, 0x0cbc }, { 8948, 0xff7f }, { 8963, 0xfdbf }, { 8977, 0xffb7 }, { 8991, 0xa0df }, { 9000, 0xffff }, /* 0x7600 */ { 9016, 0xbf8f }, { 9028, 0xfe7b }, { 9041, 0xb3ff }, { 9054, 0x3d3f }, { 9065, 0xf3cd }, { 9076, 0x97df }, { 9088, 0xf6f7 }, { 9101, 0xff7f }, { 9116, 0xcfd6 }, { 9127, 0x7e6d }, { 9138, 0xec72 }, { 9147, 0xedb1 }, { 9157, 0x777c }, { 9168, 0xfe5c }, { 9179, 0xf6fa }, { 9191, 0x5fbf }, /* 0x7700 */ { 9204, 0xdfba }, { 9216, 0xee2f }, { 9227, 0xabfd }, { 9239, 0x7ffe }, { 9253, 0xfcf9 }, { 9265, 0xdf74 }, { 9276, 0xffef }, { 9291, 0xff84 }, { 9301, 0xfbbf }, { 9315, 0xffaa }, { 9327, 0xbdaf }, { 9339, 0xfeff }, { 9354, 0xfebc }, { 9366, 0x7fb9 }, { 9378, 0xf3ed }, { 9390, 0x7f9f }, /* 0x7800 */ { 9403, 0xf36c }, { 9413, 0xf11f }, { 9423, 0xffef }, { 9438, 0x33bf }, { 9449, 0x7fbc }, { 9461, 0x701f }, { 9469, 0xff75 }, { 9482, 0xde03 }, { 9490, 0xf3fb }, { 9503, 0xc7fa }, { 9514, 0xbfbf }, { 9528, 0x5f5f }, { 9540, 0xffba }, { 9553, 0xedbf }, { 9566, 0xf7bf }, { 9580, 0xfebf }, /* 0x7900 */ { 9594, 0x5276 }, { 9602, 0x7a9f }, { 9613, 0xfffa }, { 9627, 0xff7e }, { 9641, 0x9ff7 }, { 9654, 0xffff }, { 9670, 0x2fbf }, { 9682, 0xf61f }, { 9693, 0xedcf }, { 9705, 0xbfff }, { 9720, 0x7ff7 }, { 9734, 0xefdf }, { 9748, 0xfb73 }, { 9760, 0xf176 }, { 9770, 0x7edd }, { 9782, 0x0dd2 }, /* 0x7a00 */ { 9789, 0x3d7d }, { 9800, 0xdfbf }, { 9814, 0xed45 }, { 9823, 0xfe83 }, { 9833, 0x7ff9 }, { 9846, 0x9dd0 }, { 9854, 0x7ba7 }, { 9865, 0xef73 }, { 9877, 0x9ffb }, { 9890, 0xc3ff }, { 9902, 0xdf0d }, { 9912, 0xddff }, { 9926, 0x8fbf }, { 9938, 0xbf0a }, { 9947, 0xeefd }, { 9960, 0xeec0 }, /* 0x7b00 */ { 9968, 0xdf73 }, { 9980, 0xef1f }, { 9992, 0xfffd }, { 10007, 0x0b3f }, { 10016, 0xfffd }, { 10031, 0x0177 }, { 10038, 0xf2ff }, { 10051, 0x09ff }, { 10061, 0xfdb4 }, { 10072, 0x3bf7 }, { 10084, 0xb01f }, { 10092, 0x43b6 }, { 10100, 0xded3 }, { 10111, 0xff31 }, { 10122, 0x1fff }, { 10135, 0xff9f }, /* 0x7c00 */ { 10149, 0xfeef }, { 10163, 0xfa27 }, { 10173, 0x3fef }, { 10186, 0xfba9 }, { 10197, 0x37bd }, { 10208, 0xbedb }, { 10220, 0xfef9 }, { 10233, 0xff3d }, { 10246, 0x777b }, { 10258, 0xd1f6 }, { 10268, 0xd1ee }, { 10278, 0xff3e }, { 10291, 0x7fac }, { 10302, 0xf6ff }, { 10316, 0xf5c5 }, { 10326, 0x7bff }, /* 0x7d00 */ { 10340, 0xffff }, { 10356, 0xffff }, { 10372, 0xdb27 }, { 10382, 0xff6f }, { 10396, 0xe4ff }, { 10408, 0xfd7f }, { 10422, 0xefce }, { 10434, 0xbe0f }, { 10444, 0xfb7b }, { 10457, 0xf0de }, { 10467, 0xffdf }, { 10482, 0xffbf }, { 10497, 0xfef7 }, { 10511, 0xff9d }, { 10524, 0xd7fb }, { 10537, 0x6eff }, /* 0x7e00 */ { 10550, 0xff88 }, { 10560, 0xfcff }, { 10574, 0xeebf }, { 10587, 0xffff }, { 10603, 0x13ff }, { 10614, 0xdfff }, { 10629, 0xffaf }, { 10643, 0xfffd }, { 10658, 0xfdc7 }, { 10670, 0x9ffe }, { 10683, 0x1010 }, { 10685, 0x0400 }, { 10686, 0x8080 }, { 10688, 0x8000 }, { 10689, 0x0000 }, { 10689, 0x0000 }, /* 0x7f00 */ { 10689, 0x0040 }, { 10690, 0x0000 }, { 10690, 0x0000 }, { 10690, 0xe7c0 }, { 10698, 0xffbb }, { 10712, 0xf93f }, { 10724, 0x7feb }, { 10737, 0xffef }, { 10752, 0xffe8 }, { 10764, 0x7cfe }, { 10776, 0xf3ff }, { 10790, 0xffff }, { 10806, 0xfeaf }, { 10819, 0xf8b7 }, { 10830, 0xffef }, { 10845, 0xffbf }, /* 0x8000 */ { 10860, 0xf9ff }, { 10874, 0xfbf7 }, { 10888, 0xd773 }, { 10899, 0xfafb }, { 10912, 0x85c8 }, { 10918, 0x7d57 }, { 10929, 0x90de }, { 10937, 0xe3ef }, { 10949, 0x9ef5 }, { 10960, 0xbf6d }, { 10972, 0xeeae }, { 10983, 0x35f6 }, { 10993, 0xf7fc }, { 11006, 0x7ff3 }, { 11019, 0xb27b }, { 11029, 0x7f7f }, /* 0x8100 */ { 11043, 0x57ef }, { 11055, 0xeff4 }, { 11067, 0xbebe }, { 11079, 0x6695 }, { 11087, 0xfddc }, { 11099, 0x5e7f }, { 11111, 0xeaf7 }, { 11123, 0x97df }, { 11135, 0xbfdd }, { 11148, 0xffa8 }, { 11159, 0x5fed }, { 11171, 0xfeff }, { 11186, 0xb7ff }, { 11200, 0xefa7 }, { 11212, 0xf7ff }, { 11227, 0xdfdc }, /* 0x8200 */ { 11239, 0x3fb7 }, { 11251, 0xfd77 }, { 11264, 0xbf67 }, { 11276, 0xf7fc }, { 11289, 0xcab5 }, { 11298, 0xdfff }, { 11313, 0xfb7e }, { 11326, 0xfff6 }, { 11340, 0xecb9 }, { 11350, 0xef1f }, { 11362, 0xffff }, { 11378, 0xfffb }, { 11393, 0x841d }, { 11399, 0xdbff }, { 11413, 0xfdff }, { 11428, 0xffff }, /* 0x8300 */ { 11444, 0x3bff }, { 11457, 0x7fc0 }, { 11466, 0xbff5 }, { 11479, 0xbffe }, { 11493, 0xffbf }, { 11508, 0x00df }, { 11515, 0x804c }, { 11519, 0xfdf8 }, { 11531, 0xffea }, { 11544, 0x7fff }, { 11559, 0xdffd }, { 11573, 0xe201 }, { 11578, 0xffff }, { 11594, 0xfbfa }, { 11607, 0xffbf }, { 11622, 0xff7f }, /* 0x8400 */ { 11637, 0xfefa }, { 11650, 0x195f }, { 11659, 0xfa5b }, { 11670, 0xffff }, { 11686, 0x7ffd }, { 11700, 0xffff }, { 11716, 0xfbff }, { 11731, 0xe7ff }, { 11745, 0xe145 }, { 11752, 0xffdf }, { 11767, 0xff9f }, { 11781, 0xff57 }, { 11794, 0xfef7 }, { 11808, 0x4cdf }, { 11818, 0xdfb6 }, { 11830, 0xffdf }, /* 0x8500 */ { 11845, 0xffed }, { 11859, 0xf7ff }, { 11874, 0xfffb }, { 11889, 0x691b }, { 11897, 0x7fff }, { 11912, 0xeffe }, { 11926, 0xffff }, { 11942, 0x5feb }, { 11954, 0xffff }, { 11970, 0xfff3 }, { 11984, 0x87df }, { 11995, 0xe7fb }, { 12008, 0xebff }, { 12022, 0xf7e7 }, { 12035, 0xff7f }, { 12050, 0xffc7 }, /* 0x8600 */ { 12063, 0xbef7 }, { 12076, 0xdfd3 }, { 12088, 0xf7ff }, { 12103, 0xdf7e }, { 12116, 0x79ed }, { 12127, 0xda7d }, { 12138, 0xffbe }, { 12152, 0x5e9f }, { 12163, 0x7ce0 }, { 12171, 0x77ff }, { 12185, 0xa7bf }, { 12197, 0xffff }, { 12213, 0x1bff }, { 12225, 0xffdb }, { 12239, 0xbf5c }, { 12250, 0x4fe0 }, /* 0x8700 */ { 12258, 0x7fff }, { 12273, 0x5f0e }, { 12282, 0x77ff }, { 12296, 0xddbf }, { 12309, 0xf04f }, { 12318, 0xffff }, { 12334, 0xffff }, { 12350, 0x2ffb }, { 12362, 0xbbfe }, { 12375, 0xfddf }, { 12389, 0xfe3c }, { 12400, 0xffff }, { 12416, 0x5f7f }, { 12429, 0xffde }, { 12443, 0xfdff }, { 12458, 0xdefc }, /* 0x8800 */ { 12470, 0xbf7f }, { 12484, 0xbbfb }, { 12497, 0xffff }, { 12513, 0xfbef }, { 12527, 0xfd7f }, { 12541, 0x6eec }, { 12551, 0xefbf }, { 12565, 0xf2f7 }, { 12577, 0xfb9f }, { 12590, 0xdfef }, { 12604, 0x5d97 }, { 12614, 0xf7f6 }, { 12627, 0xfea7 }, { 12639, 0xfff5 }, { 12653, 0xd9c2 }, { 12661, 0xffff }, /* 0x8900 */ { 12677, 0x5ee7 }, { 12688, 0xc7ff }, { 12701, 0xfefe }, { 12715, 0x79ef }, { 12727, 0xbade }, { 12738, 0xffdf }, { 12753, 0xfe7f }, { 12767, 0xdede }, { 12779, 0x8fef }, { 12791, 0xf9fa }, { 12803, 0xf6fe }, { 12816, 0xf6c4 }, { 12825, 0x0043 }, { 12828, 0xbe7c }, { 12839, 0x3bff }, { 12852, 0xdddf }, /* 0x8a00 */ { 12865, 0xd59d }, { 12875, 0xf9ef }, { 12888, 0x3eac }, { 12897, 0xff53 }, { 12909, 0xf773 }, { 12921, 0x4bf7 }, { 12932, 0x7bcf }, { 12944, 0xdeff }, { 12958, 0xb8fe }, { 12969, 0x577f }, { 12981, 0x8ffb }, { 12993, 0xff55 }, { 13005, 0xabfd }, { 13017, 0xfffe }, { 13032, 0xedd7 }, { 13044, 0xddff }, /* 0x8b00 */ { 13058, 0xfdf7 }, { 13072, 0xffff }, { 13088, 0xfdfd }, { 13102, 0xfeeb }, { 13115, 0xffef }, { 13130, 0xf7ff }, { 13145, 0xbfed }, { 13158, 0xef91 }, { 13168, 0x5d7f }, { 13180, 0xdf7d }, { 13193, 0x0001 }, { 13194, 0x4000 }, { 13195, 0x0000 }, { 13195, 0x0000 }, { 13195, 0x0004 }, { 13196, 0x0000 }, /* 0x8c00 */ { 13196, 0x0000 }, { 13196, 0x0000 }, { 13196, 0x0000 }, { 13196, 0xfa80 }, { 13203, 0xffee }, { 13217, 0xb4f3 }, { 13227, 0xbf76 }, { 13239, 0x2fef }, { 13251, 0xb677 }, { 13262, 0xffbf }, { 13277, 0xbfbf }, { 13291, 0xfffd }, { 13306, 0xb5bf }, { 13318, 0xfefe }, { 13332, 0x7fff }, { 13347, 0x7fbf }, /* 0x8d00 */ { 13361, 0xbffd }, { 13375, 0x3bff }, { 13388, 0x0000 }, { 13388, 0x0000 }, { 13388, 0x0000 }, { 13388, 0x0000 }, { 13388, 0xfbd0 }, { 13398, 0x2fdd }, { 13409, 0xf637 }, { 13420, 0x9a7f }, { 13431, 0xffeb }, { 13445, 0xd6fc }, { 13456, 0xf9ef }, { 13469, 0xbffb }, { 13483, 0xdfdf }, { 13497, 0xf41f }, /* 0x8e00 */ { 13507, 0xe6ff }, { 13520, 0xffff }, { 13536, 0x6fff }, { 13550, 0xf77b }, { 13563, 0xfff7 }, { 13578, 0xfef9 }, { 13591, 0xb7ff }, { 13605, 0x5dfe }, { 13617, 0x7ff7 }, { 13631, 0xe5ff }, { 13644, 0x3ffb }, { 13657, 0x3645 }, { 13664, 0xfe0d }, { 13674, 0xfd9e }, { 13686, 0xfbf7 }, { 13700, 0xdff6 }, /* 0x8f00 */ { 13713, 0x6fef }, { 13726, 0xffff }, { 13742, 0xf679 }, { 13753, 0xcbfd }, { 13765, 0xefff }, { 13780, 0xffff }, { 13796, 0x40df }, { 13804, 0x0000 }, { 13804, 0x0000 }, { 13804, 0x9808 }, { 13808, 0xe1e9 }, { 13817, 0xdfff }, { 13832, 0xfe76 }, { 13844, 0x04ff }, { 13853, 0x6d7f }, { 13865, 0xfff1 }, /* 0x9000 */ { 13878, 0xb97f }, { 13890, 0xfef7 }, { 13904, 0xe01f }, { 13912, 0xf1fe }, { 13924, 0xfe96 }, { 13935, 0x7b7f }, { 13948, 0xfb9f }, { 13961, 0xfffd }, { 13976, 0xadff }, { 13989, 0xcbb3 }, { 13999, 0xc5ef }, { 14010, 0xe97f }, { 14022, 0x4dba }, { 14031, 0xbff0 }, { 14042, 0xbf3f }, { 14055, 0xfe3f }, /* 0x9100 */ { 14068, 0xebff }, { 14082, 0xffd7 }, { 14096, 0xffdf }, { 14111, 0xcf7f }, { 14124, 0xfffb }, { 14139, 0xd7ef }, { 14152, 0xd7bf }, { 14165, 0x17fd }, { 14176, 0xfeff }, { 14191, 0xfe0f }, { 14202, 0xffaf }, { 14216, 0x7eff }, { 14230, 0xfaff }, { 14244, 0xb7fb }, { 14257, 0x7ffc }, { 14270, 0xe7fa }, /* 0x9200 */ { 14282, 0xf7ff }, { 14297, 0x56ff }, { 14309, 0x6dfa }, { 14320, 0xf7ff }, { 14335, 0xff73 }, { 14348, 0xedff }, { 14362, 0xf8ff }, { 14375, 0xffc5 }, { 14387, 0xffff }, { 14403, 0x3ffa }, { 14415, 0x5fff }, { 14429, 0xdefe }, { 14442, 0xffff }, { 14458, 0xebbf }, { 14471, 0xdffb }, { 14485, 0xffdf }, /* 0x9300 */ { 14500, 0xfbdf }, { 14514, 0xef7d }, { 14527, 0xffff }, { 14543, 0x137b }, { 14552, 0xffff }, { 14568, 0xdff7 }, { 14582, 0x7fff }, { 14597, 0x7ffb }, { 14611, 0xf7ff }, { 14626, 0xfff7 }, { 14641, 0xf7ff }, { 14656, 0xa9bf }, { 14667, 0xfddd }, { 14680, 0xffff }, { 14696, 0x51df }, { 14706, 0xfffb }, /* 0x9400 */ { 14721, 0xffdb }, { 14735, 0x2bff }, { 14747, 0x7ff1 }, { 14759, 0xffef }, { 14774, 0xbffd }, { 14788, 0x69b7 }, { 14798, 0xffbd }, { 14812, 0xfbff }, { 14827, 0x002f }, { 14832, 0x8000 }, { 14833, 0x0004 }, { 14834, 0x0000 }, { 14834, 0x000a }, { 14836, 0x1000 }, { 14837, 0x0000 }, { 14837, 0x0040 }, /* 0x9500 */ { 14838, 0x0000 }, { 14838, 0x0000 }, { 14838, 0x2000 }, { 14839, 0x0000 }, { 14839, 0x0080 }, { 14840, 0x0000 }, { 14840, 0x0000 }, { 14840, 0xbd80 }, { 14847, 0xfb6d }, { 14859, 0xdbdf }, { 14872, 0x7fff }, { 14887, 0xfee3 }, { 14899, 0x3fe9 }, { 14910, 0xdc7f }, { 14922, 0x013f }, { 14929, 0x0010 }, /* 0x9600 */ { 14930, 0x0000 }, { 14930, 0x7000 }, { 14933, 0xf51f }, { 14944, 0xbf0f }, { 14955, 0xfc3f }, { 14967, 0xf95b }, { 14978, 0xbe1e }, { 14988, 0x79ff }, { 15001, 0xeffb }, { 15015, 0x5bfe }, { 15027, 0x57be }, { 15038, 0xbb5b }, { 15049, 0x7fff }, { 15064, 0xfffc }, { 15078, 0x872e }, { 15086, 0xaff7 }, /* 0x9700 */ { 15099, 0xebfd }, { 15112, 0xfb4f }, { 15124, 0xdfff }, { 15139, 0xe767 }, { 15150, 0x0bdf }, { 15160, 0xfde6 }, { 15172, 0x7747 }, { 15182, 0xfddf }, { 15196, 0xefbf }, { 15210, 0xff90 }, { 15220, 0x7d7f }, { 15233, 0xefde }, { 15246, 0xfbff }, { 15261, 0xf3fd }, { 15274, 0x606b }, { 15281, 0xef6f }, /* 0x9800 */ { 15294, 0xf5ff }, { 15308, 0xf9ff }, { 15322, 0xebdb }, { 15334, 0x0bbd }, { 15343, 0xfffa }, { 15357, 0xfb8f }, { 15369, 0x9ffd }, { 15382, 0x003f }, { 15388, 0x0000 }, { 15388, 0x0000 }, { 15388, 0xf300 }, { 15394, 0xffde }, { 15408, 0x5fdf }, { 15421, 0xd800 }, { 15425, 0xbeef }, { 15438, 0x7676 }, /* 0x9900 */ { 15448, 0x57ad }, { 15458, 0xdfff }, { 15473, 0xffb2 }, { 15485, 0xffaf }, { 15499, 0x7faf }, { 15512, 0xfbff }, { 15527, 0x000e }, { 15530, 0x0000 }, { 15530, 0x0000 }, { 15530, 0x7bc0 }, { 15538, 0xfdfa }, { 15551, 0x3f3f }, { 15563, 0xfabe }, { 15575, 0xbfff }, { 15590, 0x76ff }, { 15603, 0xfff3 }, /* 0x9a00 */ { 15617, 0xfefe }, { 15631, 0xfe73 }, { 15643, 0xfeff }, { 15658, 0xfff7 }, { 15673, 0xf77f }, { 15687, 0xdffd }, { 15701, 0x1ffd }, { 15713, 0x0000 }, { 15713, 0x8000 }, { 15714, 0x0000 }, { 15714, 0xa900 }, { 15718, 0xffdf }, { 15733, 0xa4c7 }, { 15741, 0x91ff }, { 15752, 0xf8cf }, { 15763, 0xfede }, /* 0x9b00 */ { 15776, 0xff7e }, { 15790, 0xc7f7 }, { 15802, 0xefbd }, { 15815, 0xdebe }, { 15827, 0xfd7f }, { 15841, 0x8f77 }, { 15852, 0x93d3 }, { 15861, 0xfcf3 }, { 15873, 0xe9ef }, { 15885, 0xecaf }, { 15896, 0xed77 }, { 15908, 0xa361 }, { 15915, 0x87db }, { 15925, 0x7ef8 }, { 15936, 0x3ff7 }, { 15949, 0xa193 }, /* 0x9c00 */ { 15956, 0x7fe4 }, { 15967, 0xb8bd }, { 15977, 0xbb7b }, { 15989, 0xfefe }, { 16003, 0xff73 }, { 16016, 0xe3fd }, { 16028, 0x61cd }, { 16036, 0x1fbe }, { 16047, 0x0000 }, { 16047, 0x0000 }, { 16047, 0x0000 }, { 16047, 0x0000 }, { 16047, 0x0000 }, { 16047, 0x0000 }, { 16047, 0x26e0 }, { 16053, 0xbefe }, /* 0x9d00 */ { 16066, 0x13fd }, { 16076, 0xebf5 }, { 16088, 0xe36f }, { 16099, 0xebdb }, { 16111, 0xde3f }, { 16123, 0xffdf }, { 16138, 0xff83 }, { 16149, 0xfbbf }, { 16163, 0x1fff }, { 16176, 0xffdd }, { 16190, 0xbfff }, { 16205, 0xfffe }, { 16220, 0xffbf }, { 16235, 0xffff }, { 16251, 0xfb7e }, { 16264, 0xfffd }, /* 0x9e00 */ { 16279, 0xfeff }, { 16294, 0xffbf }, { 16309, 0x0000 }, { 16309, 0x0000 }, { 16309, 0x0000 }, { 16309, 0x0000 }, { 16309, 0x0000 }, { 16309, 0xbe20 }, { 16316, 0x7fff }, { 16331, 0xffff }, { 16347, 0xfff7 }, { 16362, 0xf8f3 }, { 16373, 0xf1df }, { 16385, 0xfd7b }, { 16398, 0xe9f5 }, { 16409, 0xffff }, /* 0x9f00 */ { 16425, 0xc7c7 }, { 16435, 0x5fed }, { 16447, 0xfffd }, { 16462, 0x6bff }, { 16475, 0xffff }, { 16491, 0xfffd }, { 16506, 0xdeff }, { 16520, 0xcff7 }, { 16533, 0x6000 }, { 16535, 0x9337 }, { 16544, 0x0035 }, }; static const Summary16 big5hkscs_uni2indx_pagee0[419] = { /* 0xe000 */ { 16548, 0xffff }, { 16564, 0xffff }, { 16580, 0xffff }, { 16596, 0xffff }, { 16612, 0xffff }, { 16628, 0xffff }, { 16644, 0xffff }, { 16660, 0xffff }, { 16676, 0xffff }, { 16692, 0xffff }, { 16708, 0xffff }, { 16724, 0xffff }, { 16740, 0xffff }, { 16756, 0xffff }, { 16772, 0xffff }, { 16788, 0xffff }, /* 0xe100 */ { 16804, 0xffff }, { 16820, 0xffff }, { 16836, 0xffff }, { 16852, 0xffff }, { 16868, 0xffff }, { 16884, 0xffff }, { 16900, 0xffff }, { 16916, 0xffff }, { 16932, 0xffff }, { 16948, 0xffff }, { 16964, 0xffff }, { 16980, 0xffff }, { 16996, 0xffff }, { 17012, 0xffff }, { 17028, 0xffff }, { 17044, 0xffff }, /* 0xe200 */ { 17060, 0xffff }, { 17076, 0xffff }, { 17092, 0xffff }, { 17108, 0xffff }, { 17124, 0xffff }, { 17140, 0xffff }, { 17156, 0xffff }, { 17172, 0xffff }, { 17188, 0xffff }, { 17204, 0xffff }, { 17220, 0xffff }, { 17236, 0xffff }, { 17252, 0xffff }, { 17268, 0xffff }, { 17284, 0xffff }, { 17300, 0xffff }, /* 0xe300 */ { 17316, 0xffff }, { 17332, 0xffff }, { 17348, 0xffff }, { 17364, 0xffff }, { 17380, 0xffff }, { 17396, 0xffff }, { 17412, 0xffff }, { 17428, 0xffff }, { 17444, 0xffff }, { 17460, 0xffff }, { 17476, 0xffff }, { 17492, 0xffff }, { 17508, 0xffff }, { 17524, 0xffff }, { 17540, 0xffff }, { 17556, 0xffff }, /* 0xe400 */ { 17572, 0xffff }, { 17588, 0xffff }, { 17604, 0xffff }, { 17620, 0xffff }, { 17636, 0xffff }, { 17652, 0xffff }, { 17668, 0xffff }, { 17684, 0xffff }, { 17700, 0xffff }, { 17716, 0xffff }, { 17732, 0xffff }, { 17748, 0xffff }, { 17764, 0xffff }, { 17780, 0xffff }, { 17796, 0xffff }, { 17812, 0xffff }, /* 0xe500 */ { 17828, 0xffff }, { 17844, 0xffff }, { 17860, 0xffff }, { 17876, 0xffff }, { 17892, 0xffff }, { 17908, 0xffff }, { 17924, 0xffff }, { 17940, 0xffff }, { 17956, 0xffff }, { 17972, 0xffff }, { 17988, 0xffff }, { 18004, 0xffff }, { 18020, 0xffff }, { 18036, 0xffff }, { 18052, 0xffff }, { 18068, 0xffff }, /* 0xe600 */ { 18084, 0xffff }, { 18100, 0xffff }, { 18116, 0xffff }, { 18132, 0xffff }, { 18148, 0xffff }, { 18164, 0xffff }, { 18180, 0xffff }, { 18196, 0xffff }, { 18212, 0xffff }, { 18228, 0xffff }, { 18244, 0xffff }, { 18260, 0xffff }, { 18276, 0xffff }, { 18292, 0xffff }, { 18308, 0xffff }, { 18324, 0xffff }, /* 0xe700 */ { 18340, 0xffff }, { 18356, 0xffff }, { 18372, 0xffff }, { 18388, 0xffff }, { 18404, 0xffff }, { 18420, 0xffff }, { 18436, 0xffff }, { 18452, 0xffff }, { 18468, 0xffff }, { 18484, 0xffff }, { 18500, 0xffff }, { 18516, 0xffff }, { 18532, 0xffff }, { 18548, 0xffff }, { 18564, 0xffff }, { 18580, 0xffff }, /* 0xe800 */ { 18596, 0xffff }, { 18612, 0xffff }, { 18628, 0xffff }, { 18644, 0xffff }, { 18660, 0xffff }, { 18676, 0xffff }, { 18692, 0xffff }, { 18708, 0xffff }, { 18724, 0xffff }, { 18740, 0xffff }, { 18756, 0xffff }, { 18772, 0xffff }, { 18788, 0xffff }, { 18804, 0xffff }, { 18820, 0xffff }, { 18836, 0xffff }, /* 0xe900 */ { 18852, 0xffff }, { 18868, 0xffff }, { 18884, 0xffff }, { 18900, 0xffff }, { 18916, 0xffff }, { 18932, 0xffff }, { 18948, 0xffff }, { 18964, 0xffff }, { 18980, 0xffff }, { 18996, 0xffff }, { 19012, 0xffff }, { 19028, 0xffff }, { 19044, 0xffff }, { 19060, 0xffff }, { 19076, 0xffff }, { 19092, 0xffff }, /* 0xea00 */ { 19108, 0xffff }, { 19124, 0xffff }, { 19140, 0xffff }, { 19156, 0xffff }, { 19172, 0xffff }, { 19188, 0xffff }, { 19204, 0xffff }, { 19220, 0xffff }, { 19236, 0xffff }, { 19252, 0xffff }, { 19268, 0xffff }, { 19284, 0xffff }, { 19300, 0xffff }, { 19316, 0xffff }, { 19332, 0xffff }, { 19348, 0xffff }, /* 0xeb00 */ { 19364, 0xffff }, { 19380, 0xffff }, { 19396, 0xffff }, { 19412, 0xffff }, { 19428, 0xffff }, { 19444, 0xffff }, { 19460, 0xffff }, { 19476, 0xffff }, { 19492, 0xffff }, { 19508, 0xffff }, { 19524, 0xffff }, { 19540, 0xffff }, { 19556, 0xffff }, { 19572, 0xffff }, { 19588, 0xffff }, { 19604, 0xffff }, /* 0xec00 */ { 19620, 0xffff }, { 19636, 0xffff }, { 19652, 0xffff }, { 19668, 0xffff }, { 19684, 0xffff }, { 19700, 0xffff }, { 19716, 0xffff }, { 19732, 0xffff }, { 19748, 0xffff }, { 19764, 0xffff }, { 19780, 0xffff }, { 19796, 0xffff }, { 19812, 0xffff }, { 19828, 0xffff }, { 19844, 0xffff }, { 19860, 0xffff }, /* 0xed00 */ { 19876, 0xffff }, { 19892, 0xffff }, { 19908, 0xffff }, { 19924, 0xffff }, { 19940, 0xffff }, { 19956, 0xffff }, { 19972, 0xffff }, { 19988, 0xffff }, { 20004, 0xffff }, { 20020, 0xffff }, { 20036, 0xffff }, { 20052, 0xffff }, { 20068, 0xffff }, { 20084, 0xffff }, { 20100, 0xffff }, { 20116, 0xffff }, /* 0xee00 */ { 20132, 0xffff }, { 20148, 0xffff }, { 20164, 0xffff }, { 20180, 0xffff }, { 20196, 0xffff }, { 20212, 0xffff }, { 20228, 0xffff }, { 20244, 0xffff }, { 20260, 0xffff }, { 20276, 0xffff }, { 20292, 0xffff }, { 20308, 0xffff }, { 20324, 0xffff }, { 20340, 0xffff }, { 20356, 0xffff }, { 20372, 0xffff }, /* 0xef00 */ { 20388, 0xffff }, { 20404, 0xffff }, { 20420, 0xffff }, { 20436, 0xffff }, { 20452, 0xffff }, { 20468, 0xffff }, { 20484, 0xffff }, { 20500, 0xffff }, { 20516, 0xffff }, { 20532, 0xffff }, { 20548, 0xffff }, { 20564, 0xffff }, { 20580, 0xffff }, { 20596, 0xffff }, { 20612, 0xffff }, { 20628, 0xffff }, /* 0xf000 */ { 20644, 0xffff }, { 20660, 0xffff }, { 20676, 0xffff }, { 20692, 0xffff }, { 20708, 0xffff }, { 20724, 0xffff }, { 20740, 0xffff }, { 20756, 0xffff }, { 20772, 0xffff }, { 20788, 0xffff }, { 20804, 0xffff }, { 20820, 0xffff }, { 20836, 0xffff }, { 20852, 0xffff }, { 20868, 0xffff }, { 20884, 0xffff }, /* 0xf100 */ { 20900, 0xffff }, { 20916, 0xffff }, { 20932, 0xffff }, { 20948, 0xffff }, { 20964, 0xffff }, { 20980, 0xffff }, { 20996, 0xffff }, { 21012, 0xffff }, { 21028, 0xffff }, { 21044, 0xffff }, { 21060, 0xffff }, { 21076, 0xffff }, { 21092, 0xffff }, { 21108, 0xffff }, { 21124, 0xffff }, { 21140, 0xffff }, /* 0xf200 */ { 21156, 0xffff }, { 21172, 0xffff }, { 21188, 0xffff }, { 21204, 0xffff }, { 21220, 0xffff }, { 21236, 0xffff }, { 21252, 0xffff }, { 21268, 0xffff }, { 21284, 0xffff }, { 21300, 0xffff }, { 21316, 0xffff }, { 21332, 0xffff }, { 21348, 0xffff }, { 21364, 0xffff }, { 21380, 0xffff }, { 21396, 0xffff }, /* 0xf300 */ { 21412, 0xffff }, { 21428, 0xffff }, { 21444, 0xffff }, { 21460, 0xffff }, { 21476, 0xffff }, { 21492, 0xffff }, { 21508, 0xffff }, { 21524, 0xffff }, { 21540, 0xffff }, { 21556, 0xffff }, { 21572, 0xffff }, { 21588, 0xffff }, { 21604, 0xffff }, { 21620, 0xffff }, { 21636, 0xffff }, { 21652, 0xffff }, /* 0xf400 */ { 21668, 0xffff }, { 21684, 0xffff }, { 21700, 0xffff }, { 21716, 0xffff }, { 21732, 0xffff }, { 21748, 0xffff }, { 21764, 0xffff }, { 21780, 0xffff }, { 21796, 0xffff }, { 21812, 0xffff }, { 21828, 0xffff }, { 21844, 0xffff }, { 21860, 0xffff }, { 21876, 0xffff }, { 21892, 0xffff }, { 21908, 0xffff }, /* 0xf500 */ { 21924, 0xffff }, { 21940, 0xffff }, { 21956, 0xffff }, { 21972, 0xffff }, { 21988, 0xffff }, { 22004, 0xffff }, { 22020, 0xffff }, { 22036, 0xffff }, { 22052, 0xffff }, { 22068, 0xffff }, { 22084, 0xffff }, { 22100, 0xffff }, { 22116, 0xffff }, { 22132, 0xffff }, { 22148, 0xffff }, { 22164, 0xffff }, /* 0xf600 */ { 22180, 0xffff }, { 22196, 0xffff }, { 22212, 0xffff }, { 22228, 0xffff }, { 22244, 0xffff }, { 22260, 0xffff }, { 22276, 0xffff }, { 22292, 0xffff }, { 22308, 0xffff }, { 22324, 0xffff }, { 22340, 0xffff }, { 22356, 0xffff }, { 22372, 0xffff }, { 22388, 0xffff }, { 22404, 0xffff }, { 22420, 0xffff }, /* 0xf700 */ { 22436, 0xffff }, { 22452, 0xffff }, { 22468, 0xffff }, { 22484, 0xffff }, { 22500, 0xffff }, { 22516, 0xffff }, { 22532, 0xffff }, { 22548, 0xffff }, { 22564, 0xffff }, { 22580, 0xffff }, { 22596, 0xffff }, { 22612, 0xffff }, { 22628, 0xffff }, { 22644, 0xffff }, { 22660, 0xffff }, { 22676, 0xffff }, /* 0xf800 */ { 22692, 0xffff }, { 22708, 0xffff }, { 22724, 0xffff }, { 22740, 0xffff }, { 22756, 0x01ff }, { 22765, 0x0000 }, { 22765, 0x0000 }, { 22765, 0x0000 }, { 22765, 0x0000 }, { 22765, 0x0000 }, { 22765, 0x0000 }, { 22765, 0x0000 }, { 22765, 0x0000 }, { 22765, 0x0000 }, { 22765, 0x0000 }, { 22765, 0x0000 }, /* 0xf900 */ { 22765, 0xffff }, { 22781, 0xffff }, { 22797, 0xefff }, { 22812, 0xffff }, { 22828, 0xffff }, { 22844, 0xffff }, { 22860, 0xffff }, { 22876, 0xfdff }, { 22891, 0xffff }, { 22907, 0xffdf }, { 22922, 0xffff }, { 22938, 0xffff }, { 22954, 0xffff }, { 22970, 0xffff }, { 22986, 0xff7f }, { 23001, 0xfffd }, /* 0xfa00 */ { 23016, 0x3fff }, { 23030, 0x7ee5 }, { 23041, 0x3c64 }, }; static const Summary16 big5hkscs_uni2indx_pagefe[31] = { /* 0xfe00 */ { 23048, 0x0000 }, { 23048, 0x0000 }, { 23048, 0x0000 }, { 23048, 0xfffb }, { 23063, 0xfe1f }, { 23075, 0xfef7 }, { 23089, 0x0f7f }, { 23100, 0x0000 }, { 23100, 0x0000 }, { 23100, 0x0000 }, { 23100, 0x0000 }, { 23100, 0x0000 }, { 23100, 0x0000 }, { 23100, 0x0000 }, { 23100, 0x0000 }, { 23100, 0x0000 }, /* 0xff00 */ { 23100, 0xfffe }, { 23115, 0xffff }, { 23131, 0xffff }, { 23147, 0xffff }, { 23163, 0xffff }, { 23179, 0x7fff }, { 23194, 0x0010 }, { 23195, 0x0000 }, { 23195, 0x0000 }, { 23195, 0x0000 }, { 23195, 0x0000 }, { 23195, 0x0000 }, { 23195, 0x0000 }, { 23195, 0x0000 }, { 23195, 0x203f }, }; static int big5hkscs_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { if (n >= 2) { const Summary16 *summary = NULL; if (wc >= 0x0000 && wc < 0x0100) summary = &big5hkscs_uni2indx_page00[(wc>>4)]; else if (wc >= 0x0200 && wc < 0x03d0) summary = &big5hkscs_uni2indx_page02[(wc>>4)-0x020]; else if (wc >= 0x2000 && wc < 0x22c0) summary = &big5hkscs_uni2indx_page20[(wc>>4)-0x200]; else if (wc >= 0x2500 && wc < 0x2650) summary = &big5hkscs_uni2indx_page25[(wc>>4)-0x250]; else if (wc >= 0x3000 && wc < 0x33e0) summary = &big5hkscs_uni2indx_page30[(wc>>4)-0x300]; else if (wc >= 0x4e00 && wc < 0x9fb0) summary = &big5hkscs_uni2indx_page4e[(wc>>4)-0x4e0]; else if (wc >= 0xe000 && wc < 0xfa30) summary = &big5hkscs_uni2indx_pagee0[(wc>>4)-0xe00]; else if (wc >= 0xfe00 && wc < 0xfff0) summary = &big5hkscs_uni2indx_pagefe[(wc>>4)-0xfe0]; if (summary) { unsigned short used = summary->used; unsigned int i = wc & 0x0f; if (used & ((unsigned short) 1 << i)) { unsigned short c; /* Keep in `used' only the bits 0..i-1. */ used &= ((unsigned short) 1 << i) - 1; /* Add `summary->indx' and the number of bits set in `used'. */ used = (used & 0x5555) + ((used & 0xaaaa) >> 1); used = (used & 0x3333) + ((used & 0xcccc) >> 2); used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4); used = (used & 0x00ff) + (used >> 8); c = big5hkscs_2charset[summary->indx + used]; r[0] = (c >> 8); r[1] = (c & 0xff); return 2; } } return RET_ILSEQ; } return RET_TOOSMALL; } fff }, { 17092, 0xffff }, { 17108, 0xffff }, { 17124, 0xffff }, { 17140, 0xffff }, { 17156, 0xffff }, { 17172, 0xffff }, { 17188, 0xffff }, { 17204, 0xffff }, { 17220, 0xffff }, { 17236, 0xffff }, { 17252, 0xffff }, { 17268, 0xffff }, { 17284, 0xffff }, { 17300, 0xffff }, /* 0xe300 */ { 17316, 0xffff }, { 17332, 0xffff }, { 17348, 0xffff }, { 17364, 0xffff }, { 17380, 0xffff }, { 17396, 0xffff }, { 17412, 0xffff }, { 17428, 0xffff }, { 17444, libX11-1.6.3/src/xlibi18n/lcUniConv/cp1255.h000064401431060000012000000106001247741723500202700ustar00alancstaff00002660200006 /* * CP1255 */ static const unsigned short cp1255_2uni[128] = { /* 0x80 */ 0x20ac, 0xfffd, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, 0x02c6, 0x2030, 0xfffd, 0x2039, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0x90 */ 0xfffd, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, 0x02dc, 0x2122, 0xfffd, 0x203a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0xa0 */ 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x20aa, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, 0x00d7, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, /* 0xb0 */ 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, 0x00b8, 0x00b9, 0x00f7, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, /* 0xc0 */ 0x05b0, 0x05b1, 0x05b2, 0x05b3, 0x05b4, 0x05b5, 0x05b6, 0x05b7, 0x05b8, 0x05b9, 0xfffd, 0x05bb, 0x05bc, 0x05bd, 0x05be, 0x05bf, /* 0xd0 */ 0x05c0, 0x05c1, 0x05c2, 0x05c3, 0x05f0, 0x05f1, 0x05f2, 0x05f3, 0x05f4, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0xe0 */ 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7, 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df, /* 0xf0 */ 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7, 0x05e8, 0x05e9, 0x05ea, 0xfffd, 0xfffd, 0x200e, 0x200f, 0xfffd, }; static int cp1255_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c = *s; if (c < 0x80) { *pwc = (ucs4_t) c; return 1; } else { unsigned short wc = cp1255_2uni[c-0x80]; if (wc != 0xfffd) { *pwc = (ucs4_t) wc; return 1; } } return RET_ILSEQ; } static const unsigned char cp1255_page00[88] = { 0xa0, 0xa1, 0xa2, 0xa3, 0x00, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ 0xa8, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ 0xb8, 0xb9, 0x00, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, /* 0xd0-0xd7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, /* 0xf0-0xf7 */ }; static const unsigned char cp1255_page02[32] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, /* 0xc0-0xc7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ }; static const unsigned char cp1255_page05[72] = { 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xb0-0xb7 */ 0xc8, 0xc9, 0x00, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xb8-0xbf */ 0xd0, 0xd1, 0xd2, 0xd3, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xd0-0xd7 */ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xd8-0xdf */ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xe0-0xe7 */ 0xf8, 0xf9, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0x00, 0x00, 0x00, /* 0xf0-0xf7 */ }; static const unsigned char cp1255_page20[56] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0xfe, /* 0x08-0x0f */ 0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */ 0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x18-0x1f */ 0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ 0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ }; static int cp1255_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { unsigned char c = 0; if (wc < 0x0080) { *r = wc; return 1; } else if (wc >= 0x00a0 && wc < 0x00f8) c = cp1255_page00[wc-0x00a0]; else if (wc == 0x0192) c = 0x83; else if (wc >= 0x02c0 && wc < 0x02e0) c = cp1255_page02[wc-0x02c0]; else if (wc >= 0x05b0 && wc < 0x05f8) c = cp1255_page05[wc-0x05b0]; else if (wc >= 0x2008 && wc < 0x2040) c = cp1255_page20[wc-0x2008]; else if (wc == 0x20aa) c = 0xa4; else if (wc == 0x20ac) c = 0x80; else if (wc == 0x2122) c = 0x99; if (c != 0) { *r = c; return 1; } return RET_ILSEQ; } libX11-1.6.3/src/xlibi18n/lcUniConv/koi8_r.h000064401431060000012000000134011247741723500205460ustar00alancstaff00002660200006 /* * KOI8-R */ /* Specification: RFC 1489 */ static const unsigned short koi8_r_2uni[128] = { /* 0x80 */ 0x2500, 0x2502, 0x250c, 0x2510, 0x2514, 0x2518, 0x251c, 0x2524, 0x252c, 0x2534, 0x253c, 0x2580, 0x2584, 0x2588, 0x258c, 0x2590, /* 0x90 */ 0x2591, 0x2592, 0x2593, 0x2320, 0x25a0, 0x2219, 0x221a, 0x2248, 0x2264, 0x2265, 0x00a0, 0x2321, 0x00b0, 0x00b2, 0x00b7, 0x00f7, /* 0xa0 */ 0x2550, 0x2551, 0x2552, 0x0451, 0x2553, 0x2554, 0x2555, 0x2556, 0x2557, 0x2558, 0x2559, 0x255a, 0x255b, 0x255c, 0x255d, 0x255e, /* 0xb0 */ 0x255f, 0x2560, 0x2561, 0x0401, 0x2562, 0x2563, 0x2564, 0x2565, 0x2566, 0x2567, 0x2568, 0x2569, 0x256a, 0x256b, 0x256c, 0x00a9, /* 0xc0 */ 0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, 0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, /* 0xd0 */ 0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a, /* 0xe0 */ 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, /* 0xf0 */ 0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, 0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a, }; static int koi8_r_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c = *s; if (c < 0x80) *pwc = (ucs4_t) c; else *pwc = (ucs4_t) koi8_r_2uni[c-0x80]; return 1; } static const unsigned char koi8_r_page00[88] = { 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ 0x9c, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x00, 0x9e, /* 0xb0-0xb7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, /* 0xf0-0xf7 */ }; static const unsigned char koi8_r_page04[88] = { 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ 0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa, /* 0x10-0x17 */ 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, /* 0x18-0x1f */ 0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe, /* 0x20-0x27 */ 0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1, /* 0x28-0x2f */ 0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda, /* 0x30-0x37 */ 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, /* 0x38-0x3f */ 0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde, /* 0x40-0x47 */ 0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1, /* 0x48-0x4f */ 0x00, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ }; static const unsigned char koi8_r_page22[80] = { 0x00, 0x95, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ 0x97, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ 0x00, 0x00, 0x00, 0x00, 0x98, 0x99, 0x00, 0x00, /* 0x60-0x67 */ }; static const unsigned char koi8_r_page23[8] = { 0x93, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ }; static const unsigned char koi8_r_page25[168] = { 0x80, 0x00, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, /* 0x08-0x0f */ 0x83, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, /* 0x10-0x17 */ 0x85, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, /* 0x18-0x1f */ 0x00, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, /* 0x20-0x27 */ 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, /* 0x28-0x2f */ 0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, /* 0x30-0x37 */ 0x00, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, /* 0x38-0x3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ 0xa0, 0xa1, 0xa2, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, /* 0x50-0x57 */ 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, /* 0x58-0x5f */ 0xb1, 0xb2, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, /* 0x60-0x67 */ 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0x00, 0x00, 0x00, /* 0x68-0x6f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ 0x8b, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, /* 0x80-0x87 */ 0x8d, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, /* 0x88-0x8f */ 0x8f, 0x90, 0x91, 0x92, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ }; static int koi8_r_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { unsigned char c = 0; if (wc < 0x0080) { *r = wc; return 1; } else if (wc >= 0x00a0 && wc < 0x00f8) c = koi8_r_page00[wc-0x00a0]; else if (wc >= 0x0400 && wc < 0x0458) c = koi8_r_page04[wc-0x0400]; else if (wc >= 0x2218 && wc < 0x2268) c = koi8_r_page22[wc-0x2218]; else if (wc >= 0x2320 && wc < 0x2328) c = koi8_r_page23[wc-0x2320]; else if (wc >= 0x2500 && wc < 0x25a8) c = koi8_r_page25[wc-0x2500]; if (c != 0) { *r = c; return 1; } return RET_ILSEQ; } libX11-1.6.3/src/xlibi18n/lcUniConv/iso8859_1.h000064401431060000012000000005051247741723500207240ustar00alancstaff00002660200006 /* * ISO-8859-1 */ static int iso8859_1_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c = *s; *pwc = (ucs4_t) c; return 1; } static int iso8859_1_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { if (wc < 0x0100) { *r = wc; return 1; } return RET_ILSEQ; } libX11-1.6.3/src/xlibi18n/lcUniConv/iso8859_16.h000064401431060000012000000073651247741723500210250ustar00alancstaff00002660200006 /* * ISO-8859-16 */ static const unsigned short iso8859_16_2uni[96] = { /* 0xa0 */ 0x00a0, 0x0104, 0x0105, 0x0141, 0x20ac, 0x201e, 0x0160, 0x00a7, 0x0161, 0x00a9, 0x0218, 0x00ab, 0x0179, 0x00ad, 0x017a, 0x017b, /* 0xb0 */ 0x00b0, 0x00b1, 0x010c, 0x0142, 0x017d, 0x201d, 0x00b6, 0x00b7, 0x017e, 0x010d, 0x0219, 0x00bb, 0x0152, 0x0153, 0x0178, 0x017c, /* 0xc0 */ 0x00c0, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0106, 0x00c6, 0x00c7, 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, /* 0xd0 */ 0x0110, 0x0143, 0x00d2, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x015a, 0x0170, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0118, 0x021a, 0x00df, /* 0xe0 */ 0x00e0, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x0107, 0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, /* 0xf0 */ 0x0111, 0x0144, 0x00f2, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x015b, 0x0171, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0119, 0x021b, 0x00ff, }; static int iso8859_16_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c = *s; if (c < 0xa0) *pwc = (ucs4_t) c; else *pwc = (ucs4_t) iso8859_16_2uni[c-0xa0]; return 1; } static const unsigned char iso8859_16_page00[224] = { 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa7, /* 0xa0-0xa7 */ 0x00, 0xa9, 0x00, 0xab, 0x00, 0xad, 0x00, 0x00, /* 0xa8-0xaf */ 0xb0, 0xb1, 0x00, 0x00, 0x00, 0x00, 0xb6, 0xb7, /* 0xb0-0xb7 */ 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ 0xc0, 0xc1, 0xc2, 0x00, 0xc4, 0x00, 0xc6, 0xc7, /* 0xc0-0xc7 */ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ 0x00, 0x00, 0xd2, 0xd3, 0xd4, 0x00, 0xd6, 0x00, /* 0xd0-0xd7 */ 0x00, 0xd9, 0xda, 0xdb, 0xdc, 0x00, 0x00, 0xdf, /* 0xd8-0xdf */ 0xe0, 0xe1, 0xe2, 0x00, 0xe4, 0x00, 0xe6, 0xe7, /* 0xe0-0xe7 */ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ 0x00, 0x00, 0xf2, 0xf3, 0xf4, 0x00, 0xf6, 0x00, /* 0xf0-0xf7 */ 0x00, 0xf9, 0xfa, 0xfb, 0xfc, 0x00, 0x00, 0xff, /* 0xf8-0xff */ /* 0x0100 */ 0x00, 0x00, 0xc3, 0xe3, 0xa1, 0xa2, 0xc5, 0xe5, /* 0x00-0x07 */ 0x00, 0x00, 0x00, 0x00, 0xb2, 0xb9, 0x00, 0x00, /* 0x08-0x0f */ 0xd0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ 0xdd, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ 0x00, 0xa3, 0xb3, 0xd1, 0xf1, 0x00, 0x00, 0x00, /* 0x40-0x47 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ 0xd5, 0xf5, 0xbc, 0xbd, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ 0x00, 0x00, 0xd7, 0xf7, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ 0xa6, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ 0xd8, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ 0xbe, 0xac, 0xae, 0xaf, 0xbf, 0xb4, 0xb8, 0x00, /* 0x78-0x7f */ }; static const unsigned char iso8859_16_page02[8] = { 0xaa, 0xba, 0xde, 0xfe, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ }; static const unsigned char iso8859_16_page20[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0xb5, 0xa5, 0x00, /* 0x18-0x1f */ }; static int iso8859_16_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { unsigned char c = 0; if (wc < 0x00a0) { *r = wc; return 1; } else if (wc >= 0x00a0 && wc < 0x0180) c = iso8859_16_page00[wc-0x00a0]; else if (wc >= 0x0218 && wc < 0x0220) c = iso8859_16_page02[wc-0x0218]; else if (wc >= 0x2018 && wc < 0x2020) c = iso8859_16_page20[wc-0x2018]; else if (wc == 0x20ac) c = 0xa4; if (c != 0) { *r = c; return 1; } return RET_ILSEQ; } libX11-1.6.3/src/xlibi18n/lcUniConv/iso8859_9e.h000064401431060000012000000077011247741723500211060ustar00alancstaff00002660200006 /* * ISO-8859-9E */ static const unsigned short iso8859_9e_2uni[96] = { /* 0xa0 */ 0x00a0, 0x017d, 0x00a2, 0x00a3, 0x20ac, 0x00a5, 0x012c, 0x00a7, 0x016c, 0x00a9, 0x01e6, 0x00ab, 0x014a, 0x00ad, 0x00ae, 0x01d1, /* 0xb0 */ 0x00b0, 0x017e, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x012d, 0x00b7, 0x016d, 0x00b9, 0x01e7, 0x00bb, 0x014b, 0x00bd, 0x0178, 0x01d2, /* 0xc0 */ 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x018f, 0x00c7, 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, /* 0xd0 */ 0x011e, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00dd, 0x019f, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0130, 0x015e, 0x00df, /* 0xe0 */ 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x0259, 0x00e7, 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, /* 0xf0 */ 0x011f, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00fd, 0x0275, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0131, 0x015f, 0x00ff, }; static int iso8859_9e_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c = *s; if (c >= 0xa0) *pwc = (ucs4_t) iso8859_9e_2uni[c-0xa0]; else *pwc = (ucs4_t) c; return 1; } static const unsigned char iso8859_9e_page00[96] = { 0xa0, 0x00, 0xa2, 0xa3, 0x00, 0xa5, 0x00, 0xa7, /* 0xa0-0xa7 */ 0x00, 0xa9, 0x00, 0xab, 0x00, 0xad, 0xae, 0x00, /* 0xa8-0xaf */ 0xb0, 0x00, 0xb2, 0xb3, 0xb4, 0xb5, 0x00, 0xb7, /* 0xb0-0xb7 */ 0x00, 0xb9, 0x00, 0xbb, 0x00, 0xbd, 0x00, 0x00, /* 0xb8-0xbf */ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0x00, 0xc7, /* 0xc0-0xc7 */ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ 0x00, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0x00, /* 0xd0-0xd7 */ 0x00, 0xd9, 0xda, 0xdb, 0xdc, 0xd7, 0x00, 0xdf, /* 0xd8-0xdf */ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0x00, 0xe7, /* 0xe0-0xe7 */ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ 0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0x00, /* 0xf0-0xf7 */ 0x00, 0xf9, 0xfa, 0xfb, 0xfc, 0xf7, 0x00, 0xff, /* 0xf8-0xff */ }; static const unsigned char iso8859_9e_page01[136] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xf0, /* 0x18-0x1f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ 0x00, 0x00, 0x00, 0x00, 0xa6, 0xb6, 0x00, 0x00, /* 0x28-0x2f */ 0xdd, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ 0x00, 0x00, 0xac, 0xbc, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xfe, /* 0x58-0x5f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ 0x00, 0x00, 0x00, 0x00, 0xa8, 0xb8, 0x00, 0x00, /* 0x68-0x6f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ 0xbe, 0x00, 0x00, 0x00, 0x00, 0xa1, 0xb1, 0x00, /* 0x78-0x7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, /* 0x88-0x8f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, /* 0x98-0x9f */ }; static const unsigned char iso8859_9e_page01_d[24] = { 0x00, 0xaf, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xba, /* 0xe0-0xe7 */ }; static int iso8859_9e_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { unsigned char c = 0; if (wc < 0x00a0) { *r = wc; return 1; } else if (wc >= 0x00a0 && wc < 0x0100) c = iso8859_9e_page00[wc-0x00a0]; else if (wc >= 0x0118 && wc < 0x01a0) c = iso8859_9e_page01[wc-0x0118]; else if (wc >= 0x01d0 && wc < 0x01e8) c = iso8859_9e_page01_d[wc-0x01d0]; else if (wc == 0x0259) c = 0xe6; else if (wc == 0x0275) c = 0xf8; else if (wc == 0x20ac) c = 0xa4; if (c != 0) { *r = c; return 1; } return RET_ILSEQ; } libX11-1.6.3/src/xlibi18n/lcUniConv/cp1133.h000064401431060000012000000053431247741723500202730ustar00alancstaff00002660200006 /* * IBM-CP1133 */ static const unsigned short cp1133_2uni_1[64] = { /* 0xa0 */ 0x00a0, 0x0e81, 0x0e82, 0x0e84, 0x0e87, 0x0e88, 0x0eaa, 0x0e8a, 0x0e8d, 0x0e94, 0x0e95, 0x0e96, 0x0e97, 0x0e99, 0x0e9a, 0x0e9b, /* 0xb0 */ 0x0e9c, 0x0e9d, 0x0e9e, 0x0e9f, 0x0ea1, 0x0ea2, 0x0ea3, 0x0ea5, 0x0ea7, 0x0eab, 0x0ead, 0x0eae, 0xfffd, 0xfffd, 0xfffd, 0x0eaf, /* 0xc0 */ 0x0eb0, 0x0eb2, 0x0eb3, 0x0eb4, 0x0eb5, 0x0eb6, 0x0eb7, 0x0eb8, 0x0eb9, 0x0ebc, 0x0eb1, 0x0ebb, 0x0ebd, 0xfffd, 0xfffd, 0xfffd, /* 0xd0 */ 0x0ec0, 0x0ec1, 0x0ec2, 0x0ec3, 0x0ec4, 0x0ec8, 0x0ec9, 0x0eca, 0x0ecb, 0x0ecc, 0x0ecd, 0x0ec6, 0xfffd, 0x0edc, 0x0edd, 0x20ad, }; static const unsigned short cp1133_2uni_2[16] = { /* 0xf0 */ 0x0ed0, 0x0ed1, 0x0ed2, 0x0ed3, 0x0ed4, 0x0ed5, 0x0ed6, 0x0ed7, 0x0ed8, 0x0ed9, 0xfffd, 0xfffd, 0x00a2, 0x00ac, 0x00a6, 0xfffd, }; static int cp1133_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c = *s; if (c < 0xa0) { *pwc = (ucs4_t) c; return 1; } else if (c < 0xe0) { unsigned short wc = cp1133_2uni_1[c-0xa0]; if (wc != 0xfffd) { *pwc = (ucs4_t) wc; return 1; } } else if (c < 0xf0) { } else { unsigned short wc = cp1133_2uni_2[c-0xf0]; if (wc != 0xfffd) { *pwc = (ucs4_t) wc; return 1; } } return RET_ILSEQ; } static const unsigned char cp1133_page00[16] = { 0xa0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xfe, 0x00, /* 0xa0-0xa7 */ 0x00, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ }; static const unsigned char cp1133_page0e[96] = { 0x00, 0xa1, 0xa2, 0x00, 0xa3, 0x00, 0x00, 0xa4, /* 0x80-0x87 */ 0xa5, 0x00, 0xa7, 0x00, 0x00, 0xa8, 0x00, 0x00, /* 0x88-0x8f */ 0x00, 0x00, 0x00, 0x00, 0xa9, 0xaa, 0xab, 0xac, /* 0x90-0x97 */ 0x00, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, /* 0x98-0x9f */ 0x00, 0xb4, 0xb5, 0xb6, 0x00, 0xb7, 0x00, 0xb8, /* 0xa0-0xa7 */ 0x00, 0x00, 0xa6, 0xb9, 0x00, 0xba, 0xbb, 0xbf, /* 0xa8-0xaf */ 0xc0, 0xca, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, /* 0xb0-0xb7 */ 0xc7, 0xc8, 0x00, 0xcb, 0xc9, 0xcc, 0x00, 0x00, /* 0xb8-0xbf */ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0x00, 0xdb, 0x00, /* 0xc0-0xc7 */ 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0x00, 0x00, /* 0xc8-0xcf */ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xd0-0xd7 */ 0xf8, 0xf9, 0x00, 0x00, 0xdd, 0xde, 0x00, 0x00, /* 0xd8-0xdf */ }; static int cp1133_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { unsigned char c = 0; if (wc < 0x00a0) { *r = wc; return 1; } else if (wc >= 0x00a0 && wc < 0x00b0) c = cp1133_page00[wc-0x00a0]; else if (wc >= 0x0e80 && wc < 0x0ee0) c = cp1133_page0e[wc-0x0e80]; else if (wc == 0x20ad) c = 0xdf; if (c != 0) { *r = c; return 1; } return RET_ILSEQ; } libX11-1.6.3/src/xlibi18n/lcUniConv/README000064401431060000012000000007221247741723500200640ustar00alancstaff00002660200006 The files in this directory are taken from the libiconv-1.1 package. The *.h files were generated from tables (mostly from ftp.unicode.org) using the programs '8bit_tab_to_h.c' and 'cjk_tab_to_h.c'. On some of them, further optimizations were applied by hand. If you find a bug in these files, instead of modifying them in XFree86 and let it diverge from libiconv, please notify the libiconv maintainer (currently ) so he can fix both in synch. libX11-1.6.3/src/xlibi18n/lcUniConv/big5.h000064401431060000012000007757011247741723500202230ustar00alancstaff00002660200006 /* * BIG5 */ static const unsigned short big5_2uni_pagea1[6121] = { /* 0xa1 */ 0x3000, 0xff0c, 0x3001, 0x3002, 0xff0e, 0x2022, 0xff1b, 0xff1a, 0xff1f, 0xff01, 0xfe30, 0x2026, 0x2025, 0xfe50, 0xff64, 0xfe52, 0x00b7, 0xfe54, 0xfe55, 0xfe56, 0xfe57, 0xff5c, 0x2013, 0xfe31, 0x2014, 0xfe33, 0xfffd, 0xfe34, 0xfe4f, 0xff08, 0xff09, 0xfe35, 0xfe36, 0xff5b, 0xff5d, 0xfe37, 0xfe38, 0x3014, 0x3015, 0xfe39, 0xfe3a, 0x3010, 0x3011, 0xfe3b, 0xfe3c, 0x300a, 0x300b, 0xfe3d, 0xfe3e, 0x3008, 0x3009, 0xfe3f, 0xfe40, 0x300c, 0x300d, 0xfe41, 0xfe42, 0x300e, 0x300f, 0xfe43, 0xfe44, 0xfe59, 0xfe5a, 0xfe5b, 0xfe5c, 0xfe5d, 0xfe5e, 0x2018, 0x2019, 0x201c, 0x201d, 0x301d, 0x301e, 0x2035, 0x2032, 0xff03, 0xff06, 0xff0a, 0x203b, 0x00a7, 0x3003, 0x25cb, 0x25cf, 0x25b3, 0x25b2, 0x25ce, 0x2606, 0x2605, 0x25c7, 0x25c6, 0x25a1, 0x25a0, 0x25bd, 0x25bc, 0x32a3, 0x2105, 0x203e, 0xfffd, 0xff3f, 0xfffd, 0xfe49, 0xfe4a, 0xfe4d, 0xfe4e, 0xfe4b, 0xfe4c, 0xfe5f, 0xfe60, 0xfe61, 0xff0b, 0xff0d, 0x00d7, 0x00f7, 0x00b1, 0x221a, 0xff1c, 0xff1e, 0xff1d, 0x2266, 0x2267, 0x2260, 0x221e, 0x2252, 0x2261, 0xfe62, 0xfe63, 0xfe64, 0xfe65, 0xfe66, 0x223c, 0x2229, 0x222a, 0x22a5, 0x2220, 0x221f, 0x22bf, 0x33d2, 0x33d1, 0x222b, 0x222e, 0x2235, 0x2234, 0x2640, 0x2642, 0x2641, 0x2609, 0x2191, 0x2193, 0x2190, 0x2192, 0x2196, 0x2197, 0x2199, 0x2198, 0x2225, 0x2223, 0xfffd, /* 0xa2 */ 0xfffd, 0xff0f, 0xff3c, 0xff04, 0x00a5, 0x3012, 0x00a2, 0x00a3, 0xff05, 0xff20, 0x2103, 0x2109, 0xfe69, 0xfe6a, 0xfe6b, 0x33d5, 0x339c, 0x339d, 0x339e, 0x33ce, 0x33a1, 0x338e, 0x338f, 0x33c4, 0x00b0, 0x5159, 0x515b, 0x515e, 0x515d, 0x5161, 0x5163, 0x55e7, 0x74e9, 0x7cce, 0x2581, 0x2582, 0x2583, 0x2584, 0x2585, 0x2586, 0x2587, 0x2588, 0x258f, 0x258e, 0x258d, 0x258c, 0x258b, 0x258a, 0x2589, 0x253c, 0x2534, 0x252c, 0x2524, 0x251c, 0x2594, 0x2500, 0x2502, 0x2595, 0x250c, 0x2510, 0x2514, 0x2518, 0x256d, 0x256e, 0x2570, 0x256f, 0x2550, 0x255e, 0x256a, 0x2561, 0x25e2, 0x25e3, 0x25e5, 0x25e4, 0x2571, 0x2572, 0x2573, 0xff10, 0xff11, 0xff12, 0xff13, 0xff14, 0xff15, 0xff16, 0xff17, 0xff18, 0xff19, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, 0x3021, 0x3022, 0x3023, 0x3024, 0x3025, 0x3026, 0x3027, 0x3028, 0x3029, 0xfffd, 0x5344, 0xfffd, 0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, 0xff28, 0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30, 0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38, 0xff39, 0xff3a, 0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, /* 0xa3 */ 0xff57, 0xff58, 0xff59, 0xff5a, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, 0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, 0x3105, 0x3106, 0x3107, 0x3108, 0x3109, 0x310a, 0x310b, 0x310c, 0x310d, 0x310e, 0x310f, 0x3110, 0x3111, 0x3112, 0x3113, 0x3114, 0x3115, 0x3116, 0x3117, 0x3118, 0x3119, 0x311a, 0x311b, 0x311c, 0x311d, 0x311e, 0x311f, 0x3120, 0x3121, 0x3122, 0x3123, 0x3124, 0x3125, 0x3126, 0x3127, 0x3128, 0x3129, 0x02d9, 0x02c9, 0x02ca, 0x02c7, 0x02cb, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0xa4 */ 0x4e00, 0x4e59, 0x4e01, 0x4e03, 0x4e43, 0x4e5d, 0x4e86, 0x4e8c, 0x4eba, 0x513f, 0x5165, 0x516b, 0x51e0, 0x5200, 0x5201, 0x529b, 0x5315, 0x5341, 0x535c, 0x53c8, 0x4e09, 0x4e0b, 0x4e08, 0x4e0a, 0x4e2b, 0x4e38, 0x51e1, 0x4e45, 0x4e48, 0x4e5f, 0x4e5e, 0x4e8e, 0x4ea1, 0x5140, 0x5203, 0x52fa, 0x5343, 0x53c9, 0x53e3, 0x571f, 0x58eb, 0x5915, 0x5927, 0x5973, 0x5b50, 0x5b51, 0x5b53, 0x5bf8, 0x5c0f, 0x5c22, 0x5c38, 0x5c71, 0x5ddd, 0x5de5, 0x5df1, 0x5df2, 0x5df3, 0x5dfe, 0x5e72, 0x5efe, 0x5f0b, 0x5f13, 0x624d, 0x4e11, 0x4e10, 0x4e0d, 0x4e2d, 0x4e30, 0x4e39, 0x4e4b, 0x5c39, 0x4e88, 0x4e91, 0x4e95, 0x4e92, 0x4e94, 0x4ea2, 0x4ec1, 0x4ec0, 0x4ec3, 0x4ec6, 0x4ec7, 0x4ecd, 0x4eca, 0x4ecb, 0x4ec4, 0x5143, 0x5141, 0x5167, 0x516d, 0x516e, 0x516c, 0x5197, 0x51f6, 0x5206, 0x5207, 0x5208, 0x52fb, 0x52fe, 0x52ff, 0x5316, 0x5339, 0x5348, 0x5347, 0x5345, 0x535e, 0x5384, 0x53cb, 0x53ca, 0x53cd, 0x58ec, 0x5929, 0x592b, 0x592a, 0x592d, 0x5b54, 0x5c11, 0x5c24, 0x5c3a, 0x5c6f, 0x5df4, 0x5e7b, 0x5eff, 0x5f14, 0x5f15, 0x5fc3, 0x6208, 0x6236, 0x624b, 0x624e, 0x652f, 0x6587, 0x6597, 0x65a4, 0x65b9, 0x65e5, 0x66f0, 0x6708, 0x6728, 0x6b20, 0x6b62, 0x6b79, 0x6bcb, 0x6bd4, 0x6bdb, 0x6c0f, 0x6c34, 0x706b, 0x722a, 0x7236, 0x723b, 0x7247, 0x7259, 0x725b, 0x72ac, 0x738b, 0x4e19, /* 0xa5 */ 0x4e16, 0x4e15, 0x4e14, 0x4e18, 0x4e3b, 0x4e4d, 0x4e4f, 0x4e4e, 0x4ee5, 0x4ed8, 0x4ed4, 0x4ed5, 0x4ed6, 0x4ed7, 0x4ee3, 0x4ee4, 0x4ed9, 0x4ede, 0x5145, 0x5144, 0x5189, 0x518a, 0x51ac, 0x51f9, 0x51fa, 0x51f8, 0x520a, 0x52a0, 0x529f, 0x5305, 0x5306, 0x5317, 0x531d, 0x4edf, 0x534a, 0x5349, 0x5361, 0x5360, 0x536f, 0x536e, 0x53bb, 0x53ef, 0x53e4, 0x53f3, 0x53ec, 0x53ee, 0x53e9, 0x53e8, 0x53fc, 0x53f8, 0x53f5, 0x53eb, 0x53e6, 0x53ea, 0x53f2, 0x53f1, 0x53f0, 0x53e5, 0x53ed, 0x53fb, 0x56db, 0x56da, 0x5916, 0x592e, 0x5931, 0x5974, 0x5976, 0x5b55, 0x5b83, 0x5c3c, 0x5de8, 0x5de7, 0x5de6, 0x5e02, 0x5e03, 0x5e73, 0x5e7c, 0x5f01, 0x5f18, 0x5f17, 0x5fc5, 0x620a, 0x6253, 0x6254, 0x6252, 0x6251, 0x65a5, 0x65e6, 0x672e, 0x672c, 0x672a, 0x672b, 0x672d, 0x6b63, 0x6bcd, 0x6c11, 0x6c10, 0x6c38, 0x6c41, 0x6c40, 0x6c3e, 0x72af, 0x7384, 0x7389, 0x74dc, 0x74e6, 0x7518, 0x751f, 0x7528, 0x7529, 0x7530, 0x7531, 0x7532, 0x7533, 0x758b, 0x767d, 0x76ae, 0x76bf, 0x76ee, 0x77db, 0x77e2, 0x77f3, 0x793a, 0x79be, 0x7a74, 0x7acb, 0x4e1e, 0x4e1f, 0x4e52, 0x4e53, 0x4e69, 0x4e99, 0x4ea4, 0x4ea6, 0x4ea5, 0x4eff, 0x4f09, 0x4f19, 0x4f0a, 0x4f15, 0x4f0d, 0x4f10, 0x4f11, 0x4f0f, 0x4ef2, 0x4ef6, 0x4efb, 0x4ef0, 0x4ef3, 0x4efd, 0x4f01, 0x4f0b, 0x5149, 0x5147, 0x5146, 0x5148, 0x5168, /* 0xa6 */ 0x5171, 0x518d, 0x51b0, 0x5217, 0x5211, 0x5212, 0x520e, 0x5216, 0x52a3, 0x5308, 0x5321, 0x5320, 0x5370, 0x5371, 0x5409, 0x540f, 0x540c, 0x540a, 0x5410, 0x5401, 0x540b, 0x5404, 0x5411, 0x540d, 0x5408, 0x5403, 0x540e, 0x5406, 0x5412, 0x56e0, 0x56de, 0x56dd, 0x5733, 0x5730, 0x5728, 0x572d, 0x572c, 0x572f, 0x5729, 0x5919, 0x591a, 0x5937, 0x5938, 0x5984, 0x5978, 0x5983, 0x597d, 0x5979, 0x5982, 0x5981, 0x5b57, 0x5b58, 0x5b87, 0x5b88, 0x5b85, 0x5b89, 0x5bfa, 0x5c16, 0x5c79, 0x5dde, 0x5e06, 0x5e76, 0x5e74, 0x5f0f, 0x5f1b, 0x5fd9, 0x5fd6, 0x620e, 0x620c, 0x620d, 0x6210, 0x6263, 0x625b, 0x6258, 0x6536, 0x65e9, 0x65e8, 0x65ec, 0x65ed, 0x66f2, 0x66f3, 0x6709, 0x673d, 0x6734, 0x6731, 0x6735, 0x6b21, 0x6b64, 0x6b7b, 0x6c16, 0x6c5d, 0x6c57, 0x6c59, 0x6c5f, 0x6c60, 0x6c50, 0x6c55, 0x6c61, 0x6c5b, 0x6c4d, 0x6c4e, 0x7070, 0x725f, 0x725d, 0x767e, 0x7af9, 0x7c73, 0x7cf8, 0x7f36, 0x7f8a, 0x7fbd, 0x8001, 0x8003, 0x800c, 0x8012, 0x8033, 0x807f, 0x8089, 0x808b, 0x808c, 0x81e3, 0x81ea, 0x81f3, 0x81fc, 0x820c, 0x821b, 0x821f, 0x826e, 0x8272, 0x827e, 0x866b, 0x8840, 0x884c, 0x8863, 0x897f, 0x9621, 0x4e32, 0x4ea8, 0x4f4d, 0x4f4f, 0x4f47, 0x4f57, 0x4f5e, 0x4f34, 0x4f5b, 0x4f55, 0x4f30, 0x4f50, 0x4f51, 0x4f3d, 0x4f3a, 0x4f38, 0x4f43, 0x4f54, 0x4f3c, 0x4f46, 0x4f63, /* 0xa7 */ 0x4f5c, 0x4f60, 0x4f2f, 0x4f4e, 0x4f36, 0x4f59, 0x4f5d, 0x4f48, 0x4f5a, 0x514c, 0x514b, 0x514d, 0x5175, 0x51b6, 0x51b7, 0x5225, 0x5224, 0x5229, 0x522a, 0x5228, 0x52ab, 0x52a9, 0x52aa, 0x52ac, 0x5323, 0x5373, 0x5375, 0x541d, 0x542d, 0x541e, 0x543e, 0x5426, 0x544e, 0x5427, 0x5446, 0x5443, 0x5433, 0x5448, 0x5442, 0x541b, 0x5429, 0x544a, 0x5439, 0x543b, 0x5438, 0x542e, 0x5435, 0x5436, 0x5420, 0x543c, 0x5440, 0x5431, 0x542b, 0x541f, 0x542c, 0x56ea, 0x56f0, 0x56e4, 0x56eb, 0x574a, 0x5751, 0x5740, 0x574d, 0x5747, 0x574e, 0x573e, 0x5750, 0x574f, 0x573b, 0x58ef, 0x593e, 0x599d, 0x5992, 0x59a8, 0x599e, 0x59a3, 0x5999, 0x5996, 0x598d, 0x59a4, 0x5993, 0x598a, 0x59a5, 0x5b5d, 0x5b5c, 0x5b5a, 0x5b5b, 0x5b8c, 0x5b8b, 0x5b8f, 0x5c2c, 0x5c40, 0x5c41, 0x5c3f, 0x5c3e, 0x5c90, 0x5c91, 0x5c94, 0x5c8c, 0x5deb, 0x5e0c, 0x5e8f, 0x5e87, 0x5e8a, 0x5ef7, 0x5f04, 0x5f1f, 0x5f64, 0x5f62, 0x5f77, 0x5f79, 0x5fd8, 0x5fcc, 0x5fd7, 0x5fcd, 0x5ff1, 0x5feb, 0x5ff8, 0x5fea, 0x6212, 0x6211, 0x6284, 0x6297, 0x6296, 0x6280, 0x6276, 0x6289, 0x626d, 0x628a, 0x627c, 0x627e, 0x6279, 0x6273, 0x6292, 0x626f, 0x6298, 0x626e, 0x6295, 0x6293, 0x6291, 0x6286, 0x6539, 0x653b, 0x6538, 0x65f1, 0x66f4, 0x675f, 0x674e, 0x674f, 0x6750, 0x6751, 0x675c, 0x6756, 0x675e, 0x6749, 0x6746, 0x6760, /* 0xa8 */ 0x6753, 0x6757, 0x6b65, 0x6bcf, 0x6c42, 0x6c5e, 0x6c99, 0x6c81, 0x6c88, 0x6c89, 0x6c85, 0x6c9b, 0x6c6a, 0x6c7a, 0x6c90, 0x6c70, 0x6c8c, 0x6c68, 0x6c96, 0x6c92, 0x6c7d, 0x6c83, 0x6c72, 0x6c7e, 0x6c74, 0x6c86, 0x6c76, 0x6c8d, 0x6c94, 0x6c98, 0x6c82, 0x7076, 0x707c, 0x707d, 0x7078, 0x7262, 0x7261, 0x7260, 0x72c4, 0x72c2, 0x7396, 0x752c, 0x752b, 0x7537, 0x7538, 0x7682, 0x76ef, 0x77e3, 0x79c1, 0x79c0, 0x79bf, 0x7a76, 0x7cfb, 0x7f55, 0x8096, 0x8093, 0x809d, 0x8098, 0x809b, 0x809a, 0x80b2, 0x826f, 0x8292, 0x828b, 0x828d, 0x898b, 0x89d2, 0x8a00, 0x8c37, 0x8c46, 0x8c55, 0x8c9d, 0x8d64, 0x8d70, 0x8db3, 0x8eab, 0x8eca, 0x8f9b, 0x8fb0, 0x8fc2, 0x8fc6, 0x8fc5, 0x8fc4, 0x5de1, 0x9091, 0x90a2, 0x90aa, 0x90a6, 0x90a3, 0x9149, 0x91c6, 0x91cc, 0x9632, 0x962e, 0x9631, 0x962a, 0x962c, 0x4e26, 0x4e56, 0x4e73, 0x4e8b, 0x4e9b, 0x4e9e, 0x4eab, 0x4eac, 0x4f6f, 0x4f9d, 0x4f8d, 0x4f73, 0x4f7f, 0x4f6c, 0x4f9b, 0x4f8b, 0x4f86, 0x4f83, 0x4f70, 0x4f75, 0x4f88, 0x4f69, 0x4f7b, 0x4f96, 0x4f7e, 0x4f8f, 0x4f91, 0x4f7a, 0x5154, 0x5152, 0x5155, 0x5169, 0x5177, 0x5176, 0x5178, 0x51bd, 0x51fd, 0x523b, 0x5238, 0x5237, 0x523a, 0x5230, 0x522e, 0x5236, 0x5241, 0x52be, 0x52bb, 0x5352, 0x5354, 0x5353, 0x5351, 0x5366, 0x5377, 0x5378, 0x5379, 0x53d6, 0x53d4, 0x53d7, 0x5473, 0x5475, /* 0xa9 */ 0x5496, 0x5478, 0x5495, 0x5480, 0x547b, 0x5477, 0x5484, 0x5492, 0x5486, 0x547c, 0x5490, 0x5471, 0x5476, 0x548c, 0x549a, 0x5462, 0x5468, 0x548b, 0x547d, 0x548e, 0x56fa, 0x5783, 0x5777, 0x576a, 0x5769, 0x5761, 0x5766, 0x5764, 0x577c, 0x591c, 0x5949, 0x5947, 0x5948, 0x5944, 0x5954, 0x59be, 0x59bb, 0x59d4, 0x59b9, 0x59ae, 0x59d1, 0x59c6, 0x59d0, 0x59cd, 0x59cb, 0x59d3, 0x59ca, 0x59af, 0x59b3, 0x59d2, 0x59c5, 0x5b5f, 0x5b64, 0x5b63, 0x5b97, 0x5b9a, 0x5b98, 0x5b9c, 0x5b99, 0x5b9b, 0x5c1a, 0x5c48, 0x5c45, 0x5c46, 0x5cb7, 0x5ca1, 0x5cb8, 0x5ca9, 0x5cab, 0x5cb1, 0x5cb3, 0x5e18, 0x5e1a, 0x5e16, 0x5e15, 0x5e1b, 0x5e11, 0x5e78, 0x5e9a, 0x5e97, 0x5e9c, 0x5e95, 0x5e96, 0x5ef6, 0x5f26, 0x5f27, 0x5f29, 0x5f80, 0x5f81, 0x5f7f, 0x5f7c, 0x5fdd, 0x5fe0, 0x5ffd, 0x5ff5, 0x5fff, 0x600f, 0x6014, 0x602f, 0x6035, 0x6016, 0x602a, 0x6015, 0x6021, 0x6027, 0x6029, 0x602b, 0x601b, 0x6216, 0x6215, 0x623f, 0x623e, 0x6240, 0x627f, 0x62c9, 0x62cc, 0x62c4, 0x62bf, 0x62c2, 0x62b9, 0x62d2, 0x62db, 0x62ab, 0x62d3, 0x62d4, 0x62cb, 0x62c8, 0x62a8, 0x62bd, 0x62bc, 0x62d0, 0x62d9, 0x62c7, 0x62cd, 0x62b5, 0x62da, 0x62b1, 0x62d8, 0x62d6, 0x62d7, 0x62c6, 0x62ac, 0x62ce, 0x653e, 0x65a7, 0x65bc, 0x65fa, 0x6614, 0x6613, 0x660c, 0x6606, 0x6602, 0x660e, 0x6600, 0x660f, 0x6615, 0x660a, /* 0xaa */ 0x6607, 0x670d, 0x670b, 0x676d, 0x678b, 0x6795, 0x6771, 0x679c, 0x6773, 0x6777, 0x6787, 0x679d, 0x6797, 0x676f, 0x6770, 0x677f, 0x6789, 0x677e, 0x6790, 0x6775, 0x679a, 0x6793, 0x677c, 0x676a, 0x6772, 0x6b23, 0x6b66, 0x6b67, 0x6b7f, 0x6c13, 0x6c1b, 0x6ce3, 0x6ce8, 0x6cf3, 0x6cb1, 0x6ccc, 0x6ce5, 0x6cb3, 0x6cbd, 0x6cbe, 0x6cbc, 0x6ce2, 0x6cab, 0x6cd5, 0x6cd3, 0x6cb8, 0x6cc4, 0x6cb9, 0x6cc1, 0x6cae, 0x6cd7, 0x6cc5, 0x6cf1, 0x6cbf, 0x6cbb, 0x6ce1, 0x6cdb, 0x6cca, 0x6cac, 0x6cef, 0x6cdc, 0x6cd6, 0x6ce0, 0x7095, 0x708e, 0x7092, 0x708a, 0x7099, 0x722c, 0x722d, 0x7238, 0x7248, 0x7267, 0x7269, 0x72c0, 0x72ce, 0x72d9, 0x72d7, 0x72d0, 0x73a9, 0x73a8, 0x739f, 0x73ab, 0x73a5, 0x753d, 0x759d, 0x7599, 0x759a, 0x7684, 0x76c2, 0x76f2, 0x76f4, 0x77e5, 0x77fd, 0x793e, 0x7940, 0x7941, 0x79c9, 0x79c8, 0x7a7a, 0x7a79, 0x7afa, 0x7cfe, 0x7f54, 0x7f8c, 0x7f8b, 0x8005, 0x80ba, 0x80a5, 0x80a2, 0x80b1, 0x80a1, 0x80ab, 0x80a9, 0x80b4, 0x80aa, 0x80af, 0x81e5, 0x81fe, 0x820d, 0x82b3, 0x829d, 0x8299, 0x82ad, 0x82bd, 0x829f, 0x82b9, 0x82b1, 0x82ac, 0x82a5, 0x82af, 0x82b8, 0x82a3, 0x82b0, 0x82be, 0x82b7, 0x864e, 0x8671, 0x521d, 0x8868, 0x8ecb, 0x8fce, 0x8fd4, 0x8fd1, 0x90b5, 0x90b8, 0x90b1, 0x90b6, 0x91c7, 0x91d1, 0x9577, 0x9580, 0x961c, 0x9640, 0x963f, 0x963b, 0x9644, /* 0xab */ 0x9642, 0x96b9, 0x96e8, 0x9752, 0x975e, 0x4e9f, 0x4ead, 0x4eae, 0x4fe1, 0x4fb5, 0x4faf, 0x4fbf, 0x4fe0, 0x4fd1, 0x4fcf, 0x4fdd, 0x4fc3, 0x4fb6, 0x4fd8, 0x4fdf, 0x4fca, 0x4fd7, 0x4fae, 0x4fd0, 0x4fc4, 0x4fc2, 0x4fda, 0x4fce, 0x4fde, 0x4fb7, 0x5157, 0x5192, 0x5191, 0x51a0, 0x524e, 0x5243, 0x524a, 0x524d, 0x524c, 0x524b, 0x5247, 0x52c7, 0x52c9, 0x52c3, 0x52c1, 0x530d, 0x5357, 0x537b, 0x539a, 0x53db, 0x54ac, 0x54c0, 0x54a8, 0x54ce, 0x54c9, 0x54b8, 0x54a6, 0x54b3, 0x54c7, 0x54c2, 0x54bd, 0x54aa, 0x54c1, 0x54c4, 0x54c8, 0x54af, 0x54ab, 0x54b1, 0x54bb, 0x54a9, 0x54a7, 0x54bf, 0x56ff, 0x5782, 0x578b, 0x57a0, 0x57a3, 0x57a2, 0x57ce, 0x57ae, 0x5793, 0x5955, 0x5951, 0x594f, 0x594e, 0x5950, 0x59dc, 0x59d8, 0x59ff, 0x59e3, 0x59e8, 0x5a03, 0x59e5, 0x59ea, 0x59da, 0x59e6, 0x5a01, 0x59fb, 0x5b69, 0x5ba3, 0x5ba6, 0x5ba4, 0x5ba2, 0x5ba5, 0x5c01, 0x5c4e, 0x5c4f, 0x5c4d, 0x5c4b, 0x5cd9, 0x5cd2, 0x5df7, 0x5e1d, 0x5e25, 0x5e1f, 0x5e7d, 0x5ea0, 0x5ea6, 0x5efa, 0x5f08, 0x5f2d, 0x5f65, 0x5f88, 0x5f85, 0x5f8a, 0x5f8b, 0x5f87, 0x5f8c, 0x5f89, 0x6012, 0x601d, 0x6020, 0x6025, 0x600e, 0x6028, 0x604d, 0x6070, 0x6068, 0x6062, 0x6046, 0x6043, 0x606c, 0x606b, 0x606a, 0x6064, 0x6241, 0x62dc, 0x6316, 0x6309, 0x62fc, 0x62ed, 0x6301, 0x62ee, 0x62fd, 0x6307, 0x62f1, 0x62f7, /* 0xac */ 0x62ef, 0x62ec, 0x62fe, 0x62f4, 0x6311, 0x6302, 0x653f, 0x6545, 0x65ab, 0x65bd, 0x65e2, 0x6625, 0x662d, 0x6620, 0x6627, 0x662f, 0x661f, 0x6628, 0x6631, 0x6624, 0x66f7, 0x67ff, 0x67d3, 0x67f1, 0x67d4, 0x67d0, 0x67ec, 0x67b6, 0x67af, 0x67f5, 0x67e9, 0x67ef, 0x67c4, 0x67d1, 0x67b4, 0x67da, 0x67e5, 0x67b8, 0x67cf, 0x67de, 0x67f3, 0x67b0, 0x67d9, 0x67e2, 0x67dd, 0x67d2, 0x6b6a, 0x6b83, 0x6b86, 0x6bb5, 0x6bd2, 0x6bd7, 0x6c1f, 0x6cc9, 0x6d0b, 0x6d32, 0x6d2a, 0x6d41, 0x6d25, 0x6d0c, 0x6d31, 0x6d1e, 0x6d17, 0x6d3b, 0x6d3d, 0x6d3e, 0x6d36, 0x6d1b, 0x6cf5, 0x6d39, 0x6d27, 0x6d38, 0x6d29, 0x6d2e, 0x6d35, 0x6d0e, 0x6d2b, 0x70ab, 0x70ba, 0x70b3, 0x70ac, 0x70af, 0x70ad, 0x70b8, 0x70ae, 0x70a4, 0x7230, 0x7272, 0x726f, 0x7274, 0x72e9, 0x72e0, 0x72e1, 0x73b7, 0x73ca, 0x73bb, 0x73b2, 0x73cd, 0x73c0, 0x73b3, 0x751a, 0x752d, 0x754f, 0x754c, 0x754e, 0x754b, 0x75ab, 0x75a4, 0x75a5, 0x75a2, 0x75a3, 0x7678, 0x7686, 0x7687, 0x7688, 0x76c8, 0x76c6, 0x76c3, 0x76c5, 0x7701, 0x76f9, 0x76f8, 0x7709, 0x770b, 0x76fe, 0x76fc, 0x7707, 0x77dc, 0x7802, 0x7814, 0x780c, 0x780d, 0x7946, 0x7949, 0x7948, 0x7947, 0x79b9, 0x79ba, 0x79d1, 0x79d2, 0x79cb, 0x7a7f, 0x7a81, 0x7aff, 0x7afd, 0x7c7d, 0x7d02, 0x7d05, 0x7d00, 0x7d09, 0x7d07, 0x7d04, 0x7d06, 0x7f38, 0x7f8e, 0x7fbf, 0x8004, /* 0xad */ 0x8010, 0x800d, 0x8011, 0x8036, 0x80d6, 0x80e5, 0x80da, 0x80c3, 0x80c4, 0x80cc, 0x80e1, 0x80db, 0x80ce, 0x80de, 0x80e4, 0x80dd, 0x81f4, 0x8222, 0x82e7, 0x8303, 0x8305, 0x82e3, 0x82db, 0x82e6, 0x8304, 0x82e5, 0x8302, 0x8309, 0x82d2, 0x82d7, 0x82f1, 0x8301, 0x82dc, 0x82d4, 0x82d1, 0x82de, 0x82d3, 0x82df, 0x82ef, 0x8306, 0x8650, 0x8679, 0x867b, 0x867a, 0x884d, 0x886b, 0x8981, 0x89d4, 0x8a08, 0x8a02, 0x8a03, 0x8c9e, 0x8ca0, 0x8d74, 0x8d73, 0x8db4, 0x8ecd, 0x8ecc, 0x8ff0, 0x8fe6, 0x8fe2, 0x8fea, 0x8fe5, 0x8fed, 0x8feb, 0x8fe4, 0x8fe8, 0x90ca, 0x90ce, 0x90c1, 0x90c3, 0x914b, 0x914a, 0x91cd, 0x9582, 0x9650, 0x964b, 0x964c, 0x964d, 0x9762, 0x9769, 0x97cb, 0x97ed, 0x97f3, 0x9801, 0x98a8, 0x98db, 0x98df, 0x9996, 0x9999, 0x4e58, 0x4eb3, 0x500c, 0x500d, 0x5023, 0x4fef, 0x5026, 0x5025, 0x4ff8, 0x5029, 0x5016, 0x5006, 0x503c, 0x501f, 0x501a, 0x5012, 0x5011, 0x4ffa, 0x5000, 0x5014, 0x5028, 0x4ff1, 0x5021, 0x500b, 0x5019, 0x5018, 0x4ff3, 0x4fee, 0x502d, 0x502a, 0x4ffe, 0x502b, 0x5009, 0x517c, 0x51a4, 0x51a5, 0x51a2, 0x51cd, 0x51cc, 0x51c6, 0x51cb, 0x5256, 0x525c, 0x5254, 0x525b, 0x525d, 0x532a, 0x537f, 0x539f, 0x539d, 0x53df, 0x54e8, 0x5510, 0x5501, 0x5537, 0x54fc, 0x54e5, 0x54f2, 0x5506, 0x54fa, 0x5514, 0x54e9, 0x54ed, 0x54e1, 0x5509, 0x54ee, 0x54ea, /* 0xae */ 0x54e6, 0x5527, 0x5507, 0x54fd, 0x550f, 0x5703, 0x5704, 0x57c2, 0x57d4, 0x57cb, 0x57c3, 0x5809, 0x590f, 0x5957, 0x5958, 0x595a, 0x5a11, 0x5a18, 0x5a1c, 0x5a1f, 0x5a1b, 0x5a13, 0x59ec, 0x5a20, 0x5a23, 0x5a29, 0x5a25, 0x5a0c, 0x5a09, 0x5b6b, 0x5c58, 0x5bb0, 0x5bb3, 0x5bb6, 0x5bb4, 0x5bae, 0x5bb5, 0x5bb9, 0x5bb8, 0x5c04, 0x5c51, 0x5c55, 0x5c50, 0x5ced, 0x5cfd, 0x5cfb, 0x5cea, 0x5ce8, 0x5cf0, 0x5cf6, 0x5d01, 0x5cf4, 0x5dee, 0x5e2d, 0x5e2b, 0x5eab, 0x5ead, 0x5ea7, 0x5f31, 0x5f92, 0x5f91, 0x5f90, 0x6059, 0x6063, 0x6065, 0x6050, 0x6055, 0x606d, 0x6069, 0x606f, 0x6084, 0x609f, 0x609a, 0x608d, 0x6094, 0x608c, 0x6085, 0x6096, 0x6247, 0x62f3, 0x6308, 0x62ff, 0x634e, 0x633e, 0x632f, 0x6355, 0x6342, 0x6346, 0x634f, 0x6349, 0x633a, 0x6350, 0x633d, 0x632a, 0x632b, 0x6328, 0x634d, 0x634c, 0x6548, 0x6549, 0x6599, 0x65c1, 0x65c5, 0x6642, 0x6649, 0x664f, 0x6643, 0x6652, 0x664c, 0x6645, 0x6641, 0x66f8, 0x6714, 0x6715, 0x6717, 0x6821, 0x6838, 0x6848, 0x6846, 0x6853, 0x6839, 0x6842, 0x6854, 0x6829, 0x68b3, 0x6817, 0x684c, 0x6851, 0x683d, 0x67f4, 0x6850, 0x6840, 0x683c, 0x6843, 0x682a, 0x6845, 0x6813, 0x6818, 0x6841, 0x6b8a, 0x6b89, 0x6bb7, 0x6c23, 0x6c27, 0x6c28, 0x6c26, 0x6c24, 0x6cf0, 0x6d6a, 0x6d95, 0x6d88, 0x6d87, 0x6d66, 0x6d78, 0x6d77, 0x6d59, 0x6d93, /* 0xaf */ 0x6d6c, 0x6d89, 0x6d6e, 0x6d5a, 0x6d74, 0x6d69, 0x6d8c, 0x6d8a, 0x6d79, 0x6d85, 0x6d65, 0x6d94, 0x70ca, 0x70d8, 0x70e4, 0x70d9, 0x70c8, 0x70cf, 0x7239, 0x7279, 0x72fc, 0x72f9, 0x72fd, 0x72f8, 0x72f7, 0x7386, 0x73ed, 0x7409, 0x73ee, 0x73e0, 0x73ea, 0x73de, 0x7554, 0x755d, 0x755c, 0x755a, 0x7559, 0x75be, 0x75c5, 0x75c7, 0x75b2, 0x75b3, 0x75bd, 0x75bc, 0x75b9, 0x75c2, 0x75b8, 0x768b, 0x76b0, 0x76ca, 0x76cd, 0x76ce, 0x7729, 0x771f, 0x7720, 0x7728, 0x77e9, 0x7830, 0x7827, 0x7838, 0x781d, 0x7834, 0x7837, 0x7825, 0x782d, 0x7820, 0x781f, 0x7832, 0x7955, 0x7950, 0x7960, 0x795f, 0x7956, 0x795e, 0x795d, 0x7957, 0x795a, 0x79e4, 0x79e3, 0x79e7, 0x79df, 0x79e6, 0x79e9, 0x79d8, 0x7a84, 0x7a88, 0x7ad9, 0x7b06, 0x7b11, 0x7c89, 0x7d21, 0x7d17, 0x7d0b, 0x7d0a, 0x7d20, 0x7d22, 0x7d14, 0x7d10, 0x7d15, 0x7d1a, 0x7d1c, 0x7d0d, 0x7d19, 0x7d1b, 0x7f3a, 0x7f5f, 0x7f94, 0x7fc5, 0x7fc1, 0x8006, 0x8018, 0x8015, 0x8019, 0x8017, 0x803d, 0x803f, 0x80f1, 0x8102, 0x80f0, 0x8105, 0x80ed, 0x80f4, 0x8106, 0x80f8, 0x80f3, 0x8108, 0x80fd, 0x810a, 0x80fc, 0x80ef, 0x81ed, 0x81ec, 0x8200, 0x8210, 0x822a, 0x822b, 0x8228, 0x822c, 0x82bb, 0x832b, 0x8352, 0x8354, 0x834a, 0x8338, 0x8350, 0x8349, 0x8335, 0x8334, 0x834f, 0x8332, 0x8339, 0x8336, 0x8317, 0x8340, 0x8331, 0x8328, 0x8343, /* 0xb0 */ 0x8654, 0x868a, 0x86aa, 0x8693, 0x86a4, 0x86a9, 0x868c, 0x86a3, 0x869c, 0x8870, 0x8877, 0x8881, 0x8882, 0x887d, 0x8879, 0x8a18, 0x8a10, 0x8a0e, 0x8a0c, 0x8a15, 0x8a0a, 0x8a17, 0x8a13, 0x8a16, 0x8a0f, 0x8a11, 0x8c48, 0x8c7a, 0x8c79, 0x8ca1, 0x8ca2, 0x8d77, 0x8eac, 0x8ed2, 0x8ed4, 0x8ecf, 0x8fb1, 0x9001, 0x9006, 0x8ff7, 0x9000, 0x8ffa, 0x8ff4, 0x9003, 0x8ffd, 0x9005, 0x8ff8, 0x9095, 0x90e1, 0x90dd, 0x90e2, 0x9152, 0x914d, 0x914c, 0x91d8, 0x91dd, 0x91d7, 0x91dc, 0x91d9, 0x9583, 0x9662, 0x9663, 0x9661, 0x965b, 0x965d, 0x9664, 0x9658, 0x965e, 0x96bb, 0x98e2, 0x99ac, 0x9aa8, 0x9ad8, 0x9b25, 0x9b32, 0x9b3c, 0x4e7e, 0x507a, 0x507d, 0x505c, 0x5047, 0x5043, 0x504c, 0x505a, 0x5049, 0x5065, 0x5076, 0x504e, 0x5055, 0x5075, 0x5074, 0x5077, 0x504f, 0x500f, 0x506f, 0x506d, 0x515c, 0x5195, 0x51f0, 0x526a, 0x526f, 0x52d2, 0x52d9, 0x52d8, 0x52d5, 0x5310, 0x530f, 0x5319, 0x533f, 0x5340, 0x533e, 0x53c3, 0x66fc, 0x5546, 0x556a, 0x5566, 0x5544, 0x555e, 0x5561, 0x5543, 0x554a, 0x5531, 0x5556, 0x554f, 0x5555, 0x552f, 0x5564, 0x5538, 0x552e, 0x555c, 0x552c, 0x5563, 0x5533, 0x5541, 0x5557, 0x5708, 0x570b, 0x5709, 0x57df, 0x5805, 0x580a, 0x5806, 0x57e0, 0x57e4, 0x57fa, 0x5802, 0x5835, 0x57f7, 0x57f9, 0x5920, 0x5962, 0x5a36, 0x5a41, 0x5a49, 0x5a66, 0x5a6a, 0x5a40, /* 0xb1 */ 0x5a3c, 0x5a62, 0x5a5a, 0x5a46, 0x5a4a, 0x5b70, 0x5bc7, 0x5bc5, 0x5bc4, 0x5bc2, 0x5bbf, 0x5bc6, 0x5c09, 0x5c08, 0x5c07, 0x5c60, 0x5c5c, 0x5c5d, 0x5d07, 0x5d06, 0x5d0e, 0x5d1b, 0x5d16, 0x5d22, 0x5d11, 0x5d29, 0x5d14, 0x5d19, 0x5d24, 0x5d27, 0x5d17, 0x5de2, 0x5e38, 0x5e36, 0x5e33, 0x5e37, 0x5eb7, 0x5eb8, 0x5eb6, 0x5eb5, 0x5ebe, 0x5f35, 0x5f37, 0x5f57, 0x5f6c, 0x5f69, 0x5f6b, 0x5f97, 0x5f99, 0x5f9e, 0x5f98, 0x5fa1, 0x5fa0, 0x5f9c, 0x607f, 0x60a3, 0x6089, 0x60a0, 0x60a8, 0x60cb, 0x60b4, 0x60e6, 0x60bd, 0x60c5, 0x60bb, 0x60b5, 0x60dc, 0x60bc, 0x60d8, 0x60d5, 0x60c6, 0x60df, 0x60b8, 0x60da, 0x60c7, 0x621a, 0x621b, 0x6248, 0x63a0, 0x63a7, 0x6372, 0x6396, 0x63a2, 0x63a5, 0x6377, 0x6367, 0x6398, 0x63aa, 0x6371, 0x63a9, 0x6389, 0x6383, 0x639b, 0x636b, 0x63a8, 0x6384, 0x6388, 0x6399, 0x63a1, 0x63ac, 0x6392, 0x638f, 0x6380, 0x637b, 0x6369, 0x6368, 0x637a, 0x655d, 0x6556, 0x6551, 0x6559, 0x6557, 0x555f, 0x654f, 0x6558, 0x6555, 0x6554, 0x659c, 0x659b, 0x65ac, 0x65cf, 0x65cb, 0x65cc, 0x65ce, 0x665d, 0x665a, 0x6664, 0x6668, 0x6666, 0x665e, 0x66f9, 0x52d7, 0x671b, 0x6881, 0x68af, 0x68a2, 0x6893, 0x68b5, 0x687f, 0x6876, 0x68b1, 0x68a7, 0x6897, 0x68b0, 0x6883, 0x68c4, 0x68ad, 0x6886, 0x6885, 0x6894, 0x689d, 0x68a8, 0x689f, 0x68a1, 0x6882, 0x6b32, 0x6bba, /* 0xb2 */ 0x6beb, 0x6bec, 0x6c2b, 0x6d8e, 0x6dbc, 0x6df3, 0x6dd9, 0x6db2, 0x6de1, 0x6dcc, 0x6de4, 0x6dfb, 0x6dfa, 0x6e05, 0x6dc7, 0x6dcb, 0x6daf, 0x6dd1, 0x6dae, 0x6dde, 0x6df9, 0x6db8, 0x6df7, 0x6df5, 0x6dc5, 0x6dd2, 0x6e1a, 0x6db5, 0x6dda, 0x6deb, 0x6dd8, 0x6dea, 0x6df1, 0x6dee, 0x6de8, 0x6dc6, 0x6dc4, 0x6daa, 0x6dec, 0x6dbf, 0x6de6, 0x70f9, 0x7109, 0x710a, 0x70fd, 0x70ef, 0x723d, 0x727d, 0x7281, 0x731c, 0x731b, 0x7316, 0x7313, 0x7319, 0x7387, 0x7405, 0x740a, 0x7403, 0x7406, 0x73fe, 0x740d, 0x74e0, 0x74f6, 0x74f7, 0x751c, 0x7522, 0x7565, 0x7566, 0x7562, 0x7570, 0x758f, 0x75d4, 0x75d5, 0x75b5, 0x75ca, 0x75cd, 0x768e, 0x76d4, 0x76d2, 0x76db, 0x7737, 0x773e, 0x773c, 0x7736, 0x7738, 0x773a, 0x786b, 0x7843, 0x784e, 0x7965, 0x7968, 0x796d, 0x79fb, 0x7a92, 0x7a95, 0x7b20, 0x7b28, 0x7b1b, 0x7b2c, 0x7b26, 0x7b19, 0x7b1e, 0x7b2e, 0x7c92, 0x7c97, 0x7c95, 0x7d46, 0x7d43, 0x7d71, 0x7d2e, 0x7d39, 0x7d3c, 0x7d40, 0x7d30, 0x7d33, 0x7d44, 0x7d2f, 0x7d42, 0x7d32, 0x7d31, 0x7f3d, 0x7f9e, 0x7f9a, 0x7fcc, 0x7fce, 0x7fd2, 0x801c, 0x804a, 0x8046, 0x812f, 0x8116, 0x8123, 0x812b, 0x8129, 0x8130, 0x8124, 0x8202, 0x8235, 0x8237, 0x8236, 0x8239, 0x838e, 0x839e, 0x8398, 0x8378, 0x83a2, 0x8396, 0x83bd, 0x83ab, 0x8392, 0x838a, 0x8393, 0x8389, 0x83a0, 0x8377, 0x837b, 0x837c, /* 0xb3 */ 0x8386, 0x83a7, 0x8655, 0x5f6a, 0x86c7, 0x86c0, 0x86b6, 0x86c4, 0x86b5, 0x86c6, 0x86cb, 0x86b1, 0x86af, 0x86c9, 0x8853, 0x889e, 0x8888, 0x88ab, 0x8892, 0x8896, 0x888d, 0x888b, 0x8993, 0x898f, 0x8a2a, 0x8a1d, 0x8a23, 0x8a25, 0x8a31, 0x8a2d, 0x8a1f, 0x8a1b, 0x8a22, 0x8c49, 0x8c5a, 0x8ca9, 0x8cac, 0x8cab, 0x8ca8, 0x8caa, 0x8ca7, 0x8d67, 0x8d66, 0x8dbe, 0x8dba, 0x8edb, 0x8edf, 0x9019, 0x900d, 0x901a, 0x9017, 0x9023, 0x901f, 0x901d, 0x9010, 0x9015, 0x901e, 0x9020, 0x900f, 0x9022, 0x9016, 0x901b, 0x9014, 0x90e8, 0x90ed, 0x90fd, 0x9157, 0x91ce, 0x91f5, 0x91e6, 0x91e3, 0x91e7, 0x91ed, 0x91e9, 0x9589, 0x966a, 0x9675, 0x9673, 0x9678, 0x9670, 0x9674, 0x9676, 0x9677, 0x966c, 0x96c0, 0x96ea, 0x96e9, 0x7ae0, 0x7adf, 0x9802, 0x9803, 0x9b5a, 0x9ce5, 0x9e75, 0x9e7f, 0x9ea5, 0x9ebb, 0x50a2, 0x508d, 0x5085, 0x5099, 0x5091, 0x5080, 0x5096, 0x5098, 0x509a, 0x6700, 0x51f1, 0x5272, 0x5274, 0x5275, 0x5269, 0x52de, 0x52dd, 0x52db, 0x535a, 0x53a5, 0x557b, 0x5580, 0x55a7, 0x557c, 0x558a, 0x559d, 0x5598, 0x5582, 0x559c, 0x55aa, 0x5594, 0x5587, 0x558b, 0x5583, 0x55b3, 0x55ae, 0x559f, 0x553e, 0x55b2, 0x559a, 0x55bb, 0x55ac, 0x55b1, 0x557e, 0x5589, 0x55ab, 0x5599, 0x570d, 0x582f, 0x582a, 0x5834, 0x5824, 0x5830, 0x5831, 0x5821, 0x581d, 0x5820, 0x58f9, 0x58fa, 0x5960, /* 0xb4 */ 0x5a77, 0x5a9a, 0x5a7f, 0x5a92, 0x5a9b, 0x5aa7, 0x5b73, 0x5b71, 0x5bd2, 0x5bcc, 0x5bd3, 0x5bd0, 0x5c0a, 0x5c0b, 0x5c31, 0x5d4c, 0x5d50, 0x5d34, 0x5d47, 0x5dfd, 0x5e45, 0x5e3d, 0x5e40, 0x5e43, 0x5e7e, 0x5eca, 0x5ec1, 0x5ec2, 0x5ec4, 0x5f3c, 0x5f6d, 0x5fa9, 0x5faa, 0x5fa8, 0x60d1, 0x60e1, 0x60b2, 0x60b6, 0x60e0, 0x611c, 0x6123, 0x60fa, 0x6115, 0x60f0, 0x60fb, 0x60f4, 0x6168, 0x60f1, 0x610e, 0x60f6, 0x6109, 0x6100, 0x6112, 0x621f, 0x6249, 0x63a3, 0x638c, 0x63cf, 0x63c0, 0x63e9, 0x63c9, 0x63c6, 0x63cd, 0x63d2, 0x63e3, 0x63d0, 0x63e1, 0x63d6, 0x63ed, 0x63ee, 0x6376, 0x63f4, 0x63ea, 0x63db, 0x6452, 0x63da, 0x63f9, 0x655e, 0x6566, 0x6562, 0x6563, 0x6591, 0x6590, 0x65af, 0x666e, 0x6670, 0x6674, 0x6676, 0x666f, 0x6691, 0x667a, 0x667e, 0x6677, 0x66fe, 0x66ff, 0x671f, 0x671d, 0x68fa, 0x68d5, 0x68e0, 0x68d8, 0x68d7, 0x6905, 0x68df, 0x68f5, 0x68ee, 0x68e7, 0x68f9, 0x68d2, 0x68f2, 0x68e3, 0x68cb, 0x68cd, 0x690d, 0x6912, 0x690e, 0x68c9, 0x68da, 0x696e, 0x68fb, 0x6b3e, 0x6b3a, 0x6b3d, 0x6b98, 0x6b96, 0x6bbc, 0x6bef, 0x6c2e, 0x6c2f, 0x6c2c, 0x6e2f, 0x6e38, 0x6e54, 0x6e21, 0x6e32, 0x6e67, 0x6e4a, 0x6e20, 0x6e25, 0x6e23, 0x6e1b, 0x6e5b, 0x6e58, 0x6e24, 0x6e56, 0x6e6e, 0x6e2d, 0x6e26, 0x6e6f, 0x6e34, 0x6e4d, 0x6e3a, 0x6e2c, 0x6e43, 0x6e1d, 0x6e3e, 0x6ecb, /* 0xb5 */ 0x6e89, 0x6e19, 0x6e4e, 0x6e63, 0x6e44, 0x6e72, 0x6e69, 0x6e5f, 0x7119, 0x711a, 0x7126, 0x7130, 0x7121, 0x7136, 0x716e, 0x711c, 0x724c, 0x7284, 0x7280, 0x7336, 0x7325, 0x7334, 0x7329, 0x743a, 0x742a, 0x7433, 0x7422, 0x7425, 0x7435, 0x7436, 0x7434, 0x742f, 0x741b, 0x7426, 0x7428, 0x7525, 0x7526, 0x756b, 0x756a, 0x75e2, 0x75db, 0x75e3, 0x75d9, 0x75d8, 0x75de, 0x75e0, 0x767b, 0x767c, 0x7696, 0x7693, 0x76b4, 0x76dc, 0x774f, 0x77ed, 0x785d, 0x786c, 0x786f, 0x7a0d, 0x7a08, 0x7a0b, 0x7a05, 0x7a00, 0x7a98, 0x7a97, 0x7a96, 0x7ae5, 0x7ae3, 0x7b49, 0x7b56, 0x7b46, 0x7b50, 0x7b52, 0x7b54, 0x7b4d, 0x7b4b, 0x7b4f, 0x7b51, 0x7c9f, 0x7ca5, 0x7d5e, 0x7d50, 0x7d68, 0x7d55, 0x7d2b, 0x7d6e, 0x7d72, 0x7d61, 0x7d66, 0x7d62, 0x7d70, 0x7d73, 0x5584, 0x7fd4, 0x7fd5, 0x800b, 0x8052, 0x8085, 0x8155, 0x8154, 0x814b, 0x8151, 0x814e, 0x8139, 0x8146, 0x813e, 0x814c, 0x8153, 0x8174, 0x8212, 0x821c, 0x83e9, 0x8403, 0x83f8, 0x840d, 0x83e0, 0x83c5, 0x840b, 0x83c1, 0x83ef, 0x83f1, 0x83f4, 0x8457, 0x840a, 0x83f0, 0x840c, 0x83cc, 0x83fd, 0x83f2, 0x83ca, 0x8438, 0x840e, 0x8404, 0x83dc, 0x8407, 0x83d4, 0x83df, 0x865b, 0x86df, 0x86d9, 0x86ed, 0x86d4, 0x86db, 0x86e4, 0x86d0, 0x86de, 0x8857, 0x88c1, 0x88c2, 0x88b1, 0x8983, 0x8996, 0x8a3b, 0x8a60, 0x8a55, 0x8a5e, 0x8a3c, 0x8a41, /* 0xb6 */ 0x8a54, 0x8a5b, 0x8a50, 0x8a46, 0x8a34, 0x8a3a, 0x8a36, 0x8a56, 0x8c61, 0x8c82, 0x8caf, 0x8cbc, 0x8cb3, 0x8cbd, 0x8cc1, 0x8cbb, 0x8cc0, 0x8cb4, 0x8cb7, 0x8cb6, 0x8cbf, 0x8cb8, 0x8d8a, 0x8d85, 0x8d81, 0x8dce, 0x8ddd, 0x8dcb, 0x8dda, 0x8dd1, 0x8dcc, 0x8ddb, 0x8dc6, 0x8efb, 0x8ef8, 0x8efc, 0x8f9c, 0x902e, 0x9035, 0x9031, 0x9038, 0x9032, 0x9036, 0x9102, 0x90f5, 0x9109, 0x90fe, 0x9163, 0x9165, 0x91cf, 0x9214, 0x9215, 0x9223, 0x9209, 0x921e, 0x920d, 0x9210, 0x9207, 0x9211, 0x9594, 0x958f, 0x958b, 0x9591, 0x9593, 0x9592, 0x958e, 0x968a, 0x968e, 0x968b, 0x967d, 0x9685, 0x9686, 0x968d, 0x9672, 0x9684, 0x96c1, 0x96c5, 0x96c4, 0x96c6, 0x96c7, 0x96ef, 0x96f2, 0x97cc, 0x9805, 0x9806, 0x9808, 0x98e7, 0x98ea, 0x98ef, 0x98e9, 0x98f2, 0x98ed, 0x99ae, 0x99ad, 0x9ec3, 0x9ecd, 0x9ed1, 0x4e82, 0x50ad, 0x50b5, 0x50b2, 0x50b3, 0x50c5, 0x50be, 0x50ac, 0x50b7, 0x50bb, 0x50af, 0x50c7, 0x527f, 0x5277, 0x527d, 0x52df, 0x52e6, 0x52e4, 0x52e2, 0x52e3, 0x532f, 0x55df, 0x55e8, 0x55d3, 0x55e6, 0x55ce, 0x55dc, 0x55c7, 0x55d1, 0x55e3, 0x55e4, 0x55ef, 0x55da, 0x55e1, 0x55c5, 0x55c6, 0x55e5, 0x55c9, 0x5712, 0x5713, 0x585e, 0x5851, 0x5858, 0x5857, 0x585a, 0x5854, 0x586b, 0x584c, 0x586d, 0x584a, 0x5862, 0x5852, 0x584b, 0x5967, 0x5ac1, 0x5ac9, 0x5acc, 0x5abe, 0x5abd, 0x5abc, /* 0xb7 */ 0x5ab3, 0x5ac2, 0x5ab2, 0x5d69, 0x5d6f, 0x5e4c, 0x5e79, 0x5ec9, 0x5ec8, 0x5f12, 0x5f59, 0x5fac, 0x5fae, 0x611a, 0x610f, 0x6148, 0x611f, 0x60f3, 0x611b, 0x60f9, 0x6101, 0x6108, 0x614e, 0x614c, 0x6144, 0x614d, 0x613e, 0x6134, 0x6127, 0x610d, 0x6106, 0x6137, 0x6221, 0x6222, 0x6413, 0x643e, 0x641e, 0x642a, 0x642d, 0x643d, 0x642c, 0x640f, 0x641c, 0x6414, 0x640d, 0x6436, 0x6416, 0x6417, 0x6406, 0x656c, 0x659f, 0x65b0, 0x6697, 0x6689, 0x6687, 0x6688, 0x6696, 0x6684, 0x6698, 0x668d, 0x6703, 0x6994, 0x696d, 0x695a, 0x6977, 0x6960, 0x6954, 0x6975, 0x6930, 0x6982, 0x694a, 0x6968, 0x696b, 0x695e, 0x6953, 0x6979, 0x6986, 0x695d, 0x6963, 0x695b, 0x6b47, 0x6b72, 0x6bc0, 0x6bbf, 0x6bd3, 0x6bfd, 0x6ea2, 0x6eaf, 0x6ed3, 0x6eb6, 0x6ec2, 0x6e90, 0x6e9d, 0x6ec7, 0x6ec5, 0x6ea5, 0x6e98, 0x6ebc, 0x6eba, 0x6eab, 0x6ed1, 0x6e96, 0x6e9c, 0x6ec4, 0x6ed4, 0x6eaa, 0x6ea7, 0x6eb4, 0x714e, 0x7159, 0x7169, 0x7164, 0x7149, 0x7167, 0x715c, 0x716c, 0x7166, 0x714c, 0x7165, 0x715e, 0x7146, 0x7168, 0x7156, 0x723a, 0x7252, 0x7337, 0x7345, 0x733f, 0x733e, 0x746f, 0x745a, 0x7455, 0x745f, 0x745e, 0x7441, 0x743f, 0x7459, 0x745b, 0x745c, 0x7576, 0x7578, 0x7600, 0x75f0, 0x7601, 0x75f2, 0x75f1, 0x75fa, 0x75ff, 0x75f4, 0x75f3, 0x76de, 0x76df, 0x775b, 0x776b, 0x7766, 0x775e, 0x7763, /* 0xb8 */ 0x7779, 0x776a, 0x776c, 0x775c, 0x7765, 0x7768, 0x7762, 0x77ee, 0x788e, 0x78b0, 0x7897, 0x7898, 0x788c, 0x7889, 0x787c, 0x7891, 0x7893, 0x787f, 0x797a, 0x797f, 0x7981, 0x842c, 0x79bd, 0x7a1c, 0x7a1a, 0x7a20, 0x7a14, 0x7a1f, 0x7a1e, 0x7a9f, 0x7aa0, 0x7b77, 0x7bc0, 0x7b60, 0x7b6e, 0x7b67, 0x7cb1, 0x7cb3, 0x7cb5, 0x7d93, 0x7d79, 0x7d91, 0x7d81, 0x7d8f, 0x7d5b, 0x7f6e, 0x7f69, 0x7f6a, 0x7f72, 0x7fa9, 0x7fa8, 0x7fa4, 0x8056, 0x8058, 0x8086, 0x8084, 0x8171, 0x8170, 0x8178, 0x8165, 0x816e, 0x8173, 0x816b, 0x8179, 0x817a, 0x8166, 0x8205, 0x8247, 0x8482, 0x8477, 0x843d, 0x8431, 0x8475, 0x8466, 0x846b, 0x8449, 0x846c, 0x845b, 0x843c, 0x8435, 0x8461, 0x8463, 0x8469, 0x846d, 0x8446, 0x865e, 0x865c, 0x865f, 0x86f9, 0x8713, 0x8708, 0x8707, 0x8700, 0x86fe, 0x86fb, 0x8702, 0x8703, 0x8706, 0x870a, 0x8859, 0x88df, 0x88d4, 0x88d9, 0x88dc, 0x88d8, 0x88dd, 0x88e1, 0x88ca, 0x88d5, 0x88d2, 0x899c, 0x89e3, 0x8a6b, 0x8a72, 0x8a73, 0x8a66, 0x8a69, 0x8a70, 0x8a87, 0x8a7c, 0x8a63, 0x8aa0, 0x8a71, 0x8a85, 0x8a6d, 0x8a62, 0x8a6e, 0x8a6c, 0x8a79, 0x8a7b, 0x8a3e, 0x8a68, 0x8c62, 0x8c8a, 0x8c89, 0x8cca, 0x8cc7, 0x8cc8, 0x8cc4, 0x8cb2, 0x8cc3, 0x8cc2, 0x8cc5, 0x8de1, 0x8ddf, 0x8de8, 0x8def, 0x8df3, 0x8dfa, 0x8dea, 0x8de4, 0x8de6, 0x8eb2, 0x8f03, 0x8f09, 0x8efe, 0x8f0a, /* 0xb9 */ 0x8f9f, 0x8fb2, 0x904b, 0x904a, 0x9053, 0x9042, 0x9054, 0x903c, 0x9055, 0x9050, 0x9047, 0x904f, 0x904e, 0x904d, 0x9051, 0x903e, 0x9041, 0x9112, 0x9117, 0x916c, 0x916a, 0x9169, 0x91c9, 0x9237, 0x9257, 0x9238, 0x923d, 0x9240, 0x923e, 0x925b, 0x924b, 0x9264, 0x9251, 0x9234, 0x9249, 0x924d, 0x9245, 0x9239, 0x923f, 0x925a, 0x9598, 0x9698, 0x9694, 0x9695, 0x96cd, 0x96cb, 0x96c9, 0x96ca, 0x96f7, 0x96fb, 0x96f9, 0x96f6, 0x9756, 0x9774, 0x9776, 0x9810, 0x9811, 0x9813, 0x980a, 0x9812, 0x980c, 0x98fc, 0x98f4, 0x98fd, 0x98fe, 0x99b3, 0x99b1, 0x99b4, 0x9ae1, 0x9ce9, 0x9e82, 0x9f0e, 0x9f13, 0x9f20, 0x50e7, 0x50ee, 0x50e5, 0x50d6, 0x50ed, 0x50da, 0x50d5, 0x50cf, 0x50d1, 0x50f1, 0x50ce, 0x50e9, 0x5162, 0x51f3, 0x5283, 0x5282, 0x5331, 0x53ad, 0x55fe, 0x5600, 0x561b, 0x5617, 0x55fd, 0x5614, 0x5606, 0x5609, 0x560d, 0x560e, 0x55f7, 0x5616, 0x561f, 0x5608, 0x5610, 0x55f6, 0x5718, 0x5716, 0x5875, 0x587e, 0x5883, 0x5893, 0x588a, 0x5879, 0x5885, 0x587d, 0x58fd, 0x5925, 0x5922, 0x5924, 0x596a, 0x5969, 0x5ae1, 0x5ae6, 0x5ae9, 0x5ad7, 0x5ad6, 0x5ad8, 0x5ae3, 0x5b75, 0x5bde, 0x5be7, 0x5be1, 0x5be5, 0x5be6, 0x5be8, 0x5be2, 0x5be4, 0x5bdf, 0x5c0d, 0x5c62, 0x5d84, 0x5d87, 0x5e5b, 0x5e63, 0x5e55, 0x5e57, 0x5e54, 0x5ed3, 0x5ed6, 0x5f0a, 0x5f46, 0x5f70, 0x5fb9, 0x6147, /* 0xba */ 0x613f, 0x614b, 0x6177, 0x6162, 0x6163, 0x615f, 0x615a, 0x6158, 0x6175, 0x622a, 0x6487, 0x6458, 0x6454, 0x64a4, 0x6478, 0x645f, 0x647a, 0x6451, 0x6467, 0x6434, 0x646d, 0x647b, 0x6572, 0x65a1, 0x65d7, 0x65d6, 0x66a2, 0x66a8, 0x669d, 0x699c, 0x69a8, 0x6995, 0x69c1, 0x69ae, 0x69d3, 0x69cb, 0x699b, 0x69b7, 0x69bb, 0x69ab, 0x69b4, 0x69d0, 0x69cd, 0x69ad, 0x69cc, 0x69a6, 0x69c3, 0x69a3, 0x6b49, 0x6b4c, 0x6c33, 0x6f33, 0x6f14, 0x6efe, 0x6f13, 0x6ef4, 0x6f29, 0x6f3e, 0x6f20, 0x6f2c, 0x6f0f, 0x6f02, 0x6f22, 0x6eff, 0x6eef, 0x6f06, 0x6f31, 0x6f38, 0x6f32, 0x6f23, 0x6f15, 0x6f2b, 0x6f2f, 0x6f88, 0x6f2a, 0x6eec, 0x6f01, 0x6ef2, 0x6ecc, 0x6ef7, 0x7194, 0x7199, 0x717d, 0x718a, 0x7184, 0x7192, 0x723e, 0x7292, 0x7296, 0x7344, 0x7350, 0x7464, 0x7463, 0x746a, 0x7470, 0x746d, 0x7504, 0x7591, 0x7627, 0x760d, 0x760b, 0x7609, 0x7613, 0x76e1, 0x76e3, 0x7784, 0x777d, 0x777f, 0x7761, 0x78c1, 0x789f, 0x78a7, 0x78b3, 0x78a9, 0x78a3, 0x798e, 0x798f, 0x798d, 0x7a2e, 0x7a31, 0x7aaa, 0x7aa9, 0x7aed, 0x7aef, 0x7ba1, 0x7b95, 0x7b8b, 0x7b75, 0x7b97, 0x7b9d, 0x7b94, 0x7b8f, 0x7bb8, 0x7b87, 0x7b84, 0x7cb9, 0x7cbd, 0x7cbe, 0x7dbb, 0x7db0, 0x7d9c, 0x7dbd, 0x7dbe, 0x7da0, 0x7dca, 0x7db4, 0x7db2, 0x7db1, 0x7dba, 0x7da2, 0x7dbf, 0x7db5, 0x7db8, 0x7dad, 0x7dd2, 0x7dc7, 0x7dac, /* 0xbb */ 0x7f70, 0x7fe0, 0x7fe1, 0x7fdf, 0x805e, 0x805a, 0x8087, 0x8150, 0x8180, 0x818f, 0x8188, 0x818a, 0x817f, 0x8182, 0x81e7, 0x81fa, 0x8207, 0x8214, 0x821e, 0x824b, 0x84c9, 0x84bf, 0x84c6, 0x84c4, 0x8499, 0x849e, 0x84b2, 0x849c, 0x84cb, 0x84b8, 0x84c0, 0x84d3, 0x8490, 0x84bc, 0x84d1, 0x84ca, 0x873f, 0x871c, 0x873b, 0x8722, 0x8725, 0x8734, 0x8718, 0x8755, 0x8737, 0x8729, 0x88f3, 0x8902, 0x88f4, 0x88f9, 0x88f8, 0x88fd, 0x88e8, 0x891a, 0x88ef, 0x8aa6, 0x8a8c, 0x8a9e, 0x8aa3, 0x8a8d, 0x8aa1, 0x8a93, 0x8aa4, 0x8aaa, 0x8aa5, 0x8aa8, 0x8a98, 0x8a91, 0x8a9a, 0x8aa7, 0x8c6a, 0x8c8d, 0x8c8c, 0x8cd3, 0x8cd1, 0x8cd2, 0x8d6b, 0x8d99, 0x8d95, 0x8dfc, 0x8f14, 0x8f12, 0x8f15, 0x8f13, 0x8fa3, 0x9060, 0x9058, 0x905c, 0x9063, 0x9059, 0x905e, 0x9062, 0x905d, 0x905b, 0x9119, 0x9118, 0x911e, 0x9175, 0x9178, 0x9177, 0x9174, 0x9278, 0x9280, 0x9285, 0x9298, 0x9296, 0x927b, 0x9293, 0x929c, 0x92a8, 0x927c, 0x9291, 0x95a1, 0x95a8, 0x95a9, 0x95a3, 0x95a5, 0x95a4, 0x9699, 0x969c, 0x969b, 0x96cc, 0x96d2, 0x9700, 0x977c, 0x9785, 0x97f6, 0x9817, 0x9818, 0x98af, 0x98b1, 0x9903, 0x9905, 0x990c, 0x9909, 0x99c1, 0x9aaf, 0x9ab0, 0x9ae6, 0x9b41, 0x9b42, 0x9cf4, 0x9cf6, 0x9cf3, 0x9ebc, 0x9f3b, 0x9f4a, 0x5104, 0x5100, 0x50fb, 0x50f5, 0x50f9, 0x5102, 0x5108, 0x5109, 0x5105, 0x51dc, /* 0xbc */ 0x5287, 0x5288, 0x5289, 0x528d, 0x528a, 0x52f0, 0x53b2, 0x562e, 0x563b, 0x5639, 0x5632, 0x563f, 0x5634, 0x5629, 0x5653, 0x564e, 0x5657, 0x5674, 0x5636, 0x562f, 0x5630, 0x5880, 0x589f, 0x589e, 0x58b3, 0x589c, 0x58ae, 0x58a9, 0x58a6, 0x596d, 0x5b09, 0x5afb, 0x5b0b, 0x5af5, 0x5b0c, 0x5b08, 0x5bee, 0x5bec, 0x5be9, 0x5beb, 0x5c64, 0x5c65, 0x5d9d, 0x5d94, 0x5e62, 0x5e5f, 0x5e61, 0x5ee2, 0x5eda, 0x5edf, 0x5edd, 0x5ee3, 0x5ee0, 0x5f48, 0x5f71, 0x5fb7, 0x5fb5, 0x6176, 0x6167, 0x616e, 0x615d, 0x6155, 0x6182, 0x617c, 0x6170, 0x616b, 0x617e, 0x61a7, 0x6190, 0x61ab, 0x618e, 0x61ac, 0x619a, 0x61a4, 0x6194, 0x61ae, 0x622e, 0x6469, 0x646f, 0x6479, 0x649e, 0x64b2, 0x6488, 0x6490, 0x64b0, 0x64a5, 0x6493, 0x6495, 0x64a9, 0x6492, 0x64ae, 0x64ad, 0x64ab, 0x649a, 0x64ac, 0x6499, 0x64a2, 0x64b3, 0x6575, 0x6577, 0x6578, 0x66ae, 0x66ab, 0x66b4, 0x66b1, 0x6a23, 0x6a1f, 0x69e8, 0x6a01, 0x6a1e, 0x6a19, 0x69fd, 0x6a21, 0x6a13, 0x6a0a, 0x69f3, 0x6a02, 0x6a05, 0x69ed, 0x6a11, 0x6b50, 0x6b4e, 0x6ba4, 0x6bc5, 0x6bc6, 0x6f3f, 0x6f7c, 0x6f84, 0x6f51, 0x6f66, 0x6f54, 0x6f86, 0x6f6d, 0x6f5b, 0x6f78, 0x6f6e, 0x6f8e, 0x6f7a, 0x6f70, 0x6f64, 0x6f97, 0x6f58, 0x6ed5, 0x6f6f, 0x6f60, 0x6f5f, 0x719f, 0x71ac, 0x71b1, 0x71a8, 0x7256, 0x729b, 0x734e, 0x7357, 0x7469, 0x748b, 0x7483, /* 0xbd */ 0x747e, 0x7480, 0x757f, 0x7620, 0x7629, 0x761f, 0x7624, 0x7626, 0x7621, 0x7622, 0x769a, 0x76ba, 0x76e4, 0x778e, 0x7787, 0x778c, 0x7791, 0x778b, 0x78cb, 0x78c5, 0x78ba, 0x78ca, 0x78be, 0x78d5, 0x78bc, 0x78d0, 0x7a3f, 0x7a3c, 0x7a40, 0x7a3d, 0x7a37, 0x7a3b, 0x7aaf, 0x7aae, 0x7bad, 0x7bb1, 0x7bc4, 0x7bb4, 0x7bc6, 0x7bc7, 0x7bc1, 0x7ba0, 0x7bcc, 0x7cca, 0x7de0, 0x7df4, 0x7def, 0x7dfb, 0x7dd8, 0x7dec, 0x7ddd, 0x7de8, 0x7de3, 0x7dda, 0x7dde, 0x7de9, 0x7d9e, 0x7dd9, 0x7df2, 0x7df9, 0x7f75, 0x7f77, 0x7faf, 0x7fe9, 0x8026, 0x819b, 0x819c, 0x819d, 0x81a0, 0x819a, 0x8198, 0x8517, 0x853d, 0x851a, 0x84ee, 0x852c, 0x852d, 0x8513, 0x8511, 0x8523, 0x8521, 0x8514, 0x84ec, 0x8525, 0x84ff, 0x8506, 0x8782, 0x8774, 0x8776, 0x8760, 0x8766, 0x8778, 0x8768, 0x8759, 0x8757, 0x874c, 0x8753, 0x885b, 0x885d, 0x8910, 0x8907, 0x8912, 0x8913, 0x8915, 0x890a, 0x8abc, 0x8ad2, 0x8ac7, 0x8ac4, 0x8a95, 0x8acb, 0x8af8, 0x8ab2, 0x8ac9, 0x8ac2, 0x8abf, 0x8ab0, 0x8ad6, 0x8acd, 0x8ab6, 0x8ab9, 0x8adb, 0x8c4c, 0x8c4e, 0x8c6c, 0x8ce0, 0x8cde, 0x8ce6, 0x8ce4, 0x8cec, 0x8ced, 0x8ce2, 0x8ce3, 0x8cdc, 0x8cea, 0x8ce1, 0x8d6d, 0x8d9f, 0x8da3, 0x8e2b, 0x8e10, 0x8e1d, 0x8e22, 0x8e0f, 0x8e29, 0x8e1f, 0x8e21, 0x8e1e, 0x8eba, 0x8f1d, 0x8f1b, 0x8f1f, 0x8f29, 0x8f26, 0x8f2a, 0x8f1c, 0x8f1e, /* 0xbe */ 0x8f25, 0x9069, 0x906e, 0x9068, 0x906d, 0x9077, 0x9130, 0x912d, 0x9127, 0x9131, 0x9187, 0x9189, 0x918b, 0x9183, 0x92c5, 0x92bb, 0x92b7, 0x92ea, 0x92ac, 0x92e4, 0x92c1, 0x92b3, 0x92bc, 0x92d2, 0x92c7, 0x92f0, 0x92b2, 0x95ad, 0x95b1, 0x9704, 0x9706, 0x9707, 0x9709, 0x9760, 0x978d, 0x978b, 0x978f, 0x9821, 0x982b, 0x981c, 0x98b3, 0x990a, 0x9913, 0x9912, 0x9918, 0x99dd, 0x99d0, 0x99df, 0x99db, 0x99d1, 0x99d5, 0x99d2, 0x99d9, 0x9ab7, 0x9aee, 0x9aef, 0x9b27, 0x9b45, 0x9b44, 0x9b77, 0x9b6f, 0x9d06, 0x9d09, 0x9d03, 0x9ea9, 0x9ebe, 0x9ece, 0x58a8, 0x9f52, 0x5112, 0x5118, 0x5114, 0x5110, 0x5115, 0x5180, 0x51aa, 0x51dd, 0x5291, 0x5293, 0x52f3, 0x5659, 0x566b, 0x5679, 0x5669, 0x5664, 0x5678, 0x566a, 0x5668, 0x5665, 0x5671, 0x566f, 0x566c, 0x5662, 0x5676, 0x58c1, 0x58be, 0x58c7, 0x58c5, 0x596e, 0x5b1d, 0x5b34, 0x5b78, 0x5bf0, 0x5c0e, 0x5f4a, 0x61b2, 0x6191, 0x61a9, 0x618a, 0x61cd, 0x61b6, 0x61be, 0x61ca, 0x61c8, 0x6230, 0x64c5, 0x64c1, 0x64cb, 0x64bb, 0x64bc, 0x64da, 0x64c4, 0x64c7, 0x64c2, 0x64cd, 0x64bf, 0x64d2, 0x64d4, 0x64be, 0x6574, 0x66c6, 0x66c9, 0x66b9, 0x66c4, 0x66c7, 0x66b8, 0x6a3d, 0x6a38, 0x6a3a, 0x6a59, 0x6a6b, 0x6a58, 0x6a39, 0x6a44, 0x6a62, 0x6a61, 0x6a4b, 0x6a47, 0x6a35, 0x6a5f, 0x6a48, 0x6b59, 0x6b77, 0x6c05, 0x6fc2, 0x6fb1, 0x6fa1, /* 0xbf */ 0x6fc3, 0x6fa4, 0x6fc1, 0x6fa7, 0x6fb3, 0x6fc0, 0x6fb9, 0x6fb6, 0x6fa6, 0x6fa0, 0x6fb4, 0x71be, 0x71c9, 0x71d0, 0x71d2, 0x71c8, 0x71d5, 0x71b9, 0x71ce, 0x71d9, 0x71dc, 0x71c3, 0x71c4, 0x7368, 0x749c, 0x74a3, 0x7498, 0x749f, 0x749e, 0x74e2, 0x750c, 0x750d, 0x7634, 0x7638, 0x763a, 0x76e7, 0x76e5, 0x77a0, 0x779e, 0x779f, 0x77a5, 0x78e8, 0x78da, 0x78ec, 0x78e7, 0x79a6, 0x7a4d, 0x7a4e, 0x7a46, 0x7a4c, 0x7a4b, 0x7aba, 0x7bd9, 0x7c11, 0x7bc9, 0x7be4, 0x7bdb, 0x7be1, 0x7be9, 0x7be6, 0x7cd5, 0x7cd6, 0x7e0a, 0x7e11, 0x7e08, 0x7e1b, 0x7e23, 0x7e1e, 0x7e1d, 0x7e09, 0x7e10, 0x7f79, 0x7fb2, 0x7ff0, 0x7ff1, 0x7fee, 0x8028, 0x81b3, 0x81a9, 0x81a8, 0x81fb, 0x8208, 0x8258, 0x8259, 0x854a, 0x8559, 0x8548, 0x8568, 0x8569, 0x8543, 0x8549, 0x856d, 0x856a, 0x855e, 0x8783, 0x879f, 0x879e, 0x87a2, 0x878d, 0x8861, 0x892a, 0x8932, 0x8925, 0x892b, 0x8921, 0x89aa, 0x89a6, 0x8ae6, 0x8afa, 0x8aeb, 0x8af1, 0x8b00, 0x8adc, 0x8ae7, 0x8aee, 0x8afe, 0x8b01, 0x8b02, 0x8af7, 0x8aed, 0x8af3, 0x8af6, 0x8afc, 0x8c6b, 0x8c6d, 0x8c93, 0x8cf4, 0x8e44, 0x8e31, 0x8e34, 0x8e42, 0x8e39, 0x8e35, 0x8f3b, 0x8f2f, 0x8f38, 0x8f33, 0x8fa8, 0x8fa6, 0x9075, 0x9074, 0x9078, 0x9072, 0x907c, 0x907a, 0x9134, 0x9192, 0x9320, 0x9336, 0x92f8, 0x9333, 0x932f, 0x9322, 0x92fc, 0x932b, 0x9304, 0x931a, /* 0xc0 */ 0x9310, 0x9326, 0x9321, 0x9315, 0x932e, 0x9319, 0x95bb, 0x96a7, 0x96a8, 0x96aa, 0x96d5, 0x970e, 0x9711, 0x9716, 0x970d, 0x9713, 0x970f, 0x975b, 0x975c, 0x9766, 0x9798, 0x9830, 0x9838, 0x983b, 0x9837, 0x982d, 0x9839, 0x9824, 0x9910, 0x9928, 0x991e, 0x991b, 0x9921, 0x991a, 0x99ed, 0x99e2, 0x99f1, 0x9ab8, 0x9abc, 0x9afb, 0x9aed, 0x9b28, 0x9b91, 0x9d15, 0x9d23, 0x9d26, 0x9d28, 0x9d12, 0x9d1b, 0x9ed8, 0x9ed4, 0x9f8d, 0x9f9c, 0x512a, 0x511f, 0x5121, 0x5132, 0x52f5, 0x568e, 0x5680, 0x5690, 0x5685, 0x5687, 0x568f, 0x58d5, 0x58d3, 0x58d1, 0x58ce, 0x5b30, 0x5b2a, 0x5b24, 0x5b7a, 0x5c37, 0x5c68, 0x5dbc, 0x5dba, 0x5dbd, 0x5db8, 0x5e6b, 0x5f4c, 0x5fbd, 0x61c9, 0x61c2, 0x61c7, 0x61e6, 0x61cb, 0x6232, 0x6234, 0x64ce, 0x64ca, 0x64d8, 0x64e0, 0x64f0, 0x64e6, 0x64ec, 0x64f1, 0x64e2, 0x64ed, 0x6582, 0x6583, 0x66d9, 0x66d6, 0x6a80, 0x6a94, 0x6a84, 0x6aa2, 0x6a9c, 0x6adb, 0x6aa3, 0x6a7e, 0x6a97, 0x6a90, 0x6aa0, 0x6b5c, 0x6bae, 0x6bda, 0x6c08, 0x6fd8, 0x6ff1, 0x6fdf, 0x6fe0, 0x6fdb, 0x6fe4, 0x6feb, 0x6fef, 0x6f80, 0x6fec, 0x6fe1, 0x6fe9, 0x6fd5, 0x6fee, 0x6ff0, 0x71e7, 0x71df, 0x71ee, 0x71e6, 0x71e5, 0x71ed, 0x71ec, 0x71f4, 0x71e0, 0x7235, 0x7246, 0x7370, 0x7372, 0x74a9, 0x74b0, 0x74a6, 0x74a8, 0x7646, 0x7642, 0x764c, 0x76ea, 0x77b3, 0x77aa, 0x77b0, 0x77ac, /* 0xc1 */ 0x77a7, 0x77ad, 0x77ef, 0x78f7, 0x78fa, 0x78f4, 0x78ef, 0x7901, 0x79a7, 0x79aa, 0x7a57, 0x7abf, 0x7c07, 0x7c0d, 0x7bfe, 0x7bf7, 0x7c0c, 0x7be0, 0x7ce0, 0x7cdc, 0x7cde, 0x7ce2, 0x7cdf, 0x7cd9, 0x7cdd, 0x7e2e, 0x7e3e, 0x7e46, 0x7e37, 0x7e32, 0x7e43, 0x7e2b, 0x7e3d, 0x7e31, 0x7e45, 0x7e41, 0x7e34, 0x7e39, 0x7e48, 0x7e35, 0x7e3f, 0x7e2f, 0x7f44, 0x7ff3, 0x7ffc, 0x8071, 0x8072, 0x8070, 0x806f, 0x8073, 0x81c6, 0x81c3, 0x81ba, 0x81c2, 0x81c0, 0x81bf, 0x81bd, 0x81c9, 0x81be, 0x81e8, 0x8209, 0x8271, 0x85aa, 0x8584, 0x857e, 0x859c, 0x8591, 0x8594, 0x85af, 0x859b, 0x8587, 0x85a8, 0x858a, 0x8667, 0x87c0, 0x87d1, 0x87b3, 0x87d2, 0x87c6, 0x87ab, 0x87bb, 0x87ba, 0x87c8, 0x87cb, 0x893b, 0x8936, 0x8944, 0x8938, 0x893d, 0x89ac, 0x8b0e, 0x8b17, 0x8b19, 0x8b1b, 0x8b0a, 0x8b20, 0x8b1d, 0x8b04, 0x8b10, 0x8c41, 0x8c3f, 0x8c73, 0x8cfa, 0x8cfd, 0x8cfc, 0x8cf8, 0x8cfb, 0x8da8, 0x8e49, 0x8e4b, 0x8e48, 0x8e4a, 0x8f44, 0x8f3e, 0x8f42, 0x8f45, 0x8f3f, 0x907f, 0x907d, 0x9084, 0x9081, 0x9082, 0x9080, 0x9139, 0x91a3, 0x919e, 0x919c, 0x934d, 0x9382, 0x9328, 0x9375, 0x934a, 0x9365, 0x934b, 0x9318, 0x937e, 0x936c, 0x935b, 0x9370, 0x935a, 0x9354, 0x95ca, 0x95cb, 0x95cc, 0x95c8, 0x95c6, 0x96b1, 0x96b8, 0x96d6, 0x971c, 0x971e, 0x97a0, 0x97d3, 0x9846, 0x98b6, 0x9935, 0x9a01, /* 0xc2 */ 0x99ff, 0x9bae, 0x9bab, 0x9baa, 0x9bad, 0x9d3b, 0x9d3f, 0x9e8b, 0x9ecf, 0x9ede, 0x9edc, 0x9edd, 0x9edb, 0x9f3e, 0x9f4b, 0x53e2, 0x5695, 0x56ae, 0x58d9, 0x58d8, 0x5b38, 0x5f5d, 0x61e3, 0x6233, 0x64f4, 0x64f2, 0x64fe, 0x6506, 0x64fa, 0x64fb, 0x64f7, 0x65b7, 0x66dc, 0x6726, 0x6ab3, 0x6aac, 0x6ac3, 0x6abb, 0x6ab8, 0x6ac2, 0x6aae, 0x6aaf, 0x6b5f, 0x6b78, 0x6baf, 0x7009, 0x700b, 0x6ffe, 0x7006, 0x6ffa, 0x7011, 0x700f, 0x71fb, 0x71fc, 0x71fe, 0x71f8, 0x7377, 0x7375, 0x74a7, 0x74bf, 0x7515, 0x7656, 0x7658, 0x7652, 0x77bd, 0x77bf, 0x77bb, 0x77bc, 0x790e, 0x79ae, 0x7a61, 0x7a62, 0x7a60, 0x7ac4, 0x7ac5, 0x7c2b, 0x7c27, 0x7c2a, 0x7c1e, 0x7c23, 0x7c21, 0x7ce7, 0x7e54, 0x7e55, 0x7e5e, 0x7e5a, 0x7e61, 0x7e52, 0x7e59, 0x7f48, 0x7ff9, 0x7ffb, 0x8077, 0x8076, 0x81cd, 0x81cf, 0x820a, 0x85cf, 0x85a9, 0x85cd, 0x85d0, 0x85c9, 0x85b0, 0x85ba, 0x85b9, 0x85a6, 0x87ef, 0x87ec, 0x87f2, 0x87e0, 0x8986, 0x89b2, 0x89f4, 0x8b28, 0x8b39, 0x8b2c, 0x8b2b, 0x8c50, 0x8d05, 0x8e59, 0x8e63, 0x8e66, 0x8e64, 0x8e5f, 0x8e55, 0x8ec0, 0x8f49, 0x8f4d, 0x9087, 0x9083, 0x9088, 0x91ab, 0x91ac, 0x91d0, 0x9394, 0x938a, 0x9396, 0x93a2, 0x93b3, 0x93ae, 0x93ac, 0x93b0, 0x9398, 0x939a, 0x9397, 0x95d4, 0x95d6, 0x95d0, 0x95d5, 0x96e2, 0x96dc, 0x96d9, 0x96db, 0x96de, 0x9724, 0x97a3, 0x97a6, /* 0xc3 */ 0x97ad, 0x97f9, 0x984d, 0x984f, 0x984c, 0x984e, 0x9853, 0x98ba, 0x993e, 0x993f, 0x993d, 0x992e, 0x99a5, 0x9a0e, 0x9ac1, 0x9b03, 0x9b06, 0x9b4f, 0x9b4e, 0x9b4d, 0x9bca, 0x9bc9, 0x9bfd, 0x9bc8, 0x9bc0, 0x9d51, 0x9d5d, 0x9d60, 0x9ee0, 0x9f15, 0x9f2c, 0x5133, 0x56a5, 0x58de, 0x58df, 0x58e2, 0x5bf5, 0x9f90, 0x5eec, 0x61f2, 0x61f7, 0x61f6, 0x61f5, 0x6500, 0x650f, 0x66e0, 0x66dd, 0x6ae5, 0x6add, 0x6ada, 0x6ad3, 0x701b, 0x701f, 0x7028, 0x701a, 0x701d, 0x7015, 0x7018, 0x7206, 0x720d, 0x7258, 0x72a2, 0x7378, 0x737a, 0x74bd, 0x74ca, 0x74e3, 0x7587, 0x7586, 0x765f, 0x7661, 0x77c7, 0x7919, 0x79b1, 0x7a6b, 0x7a69, 0x7c3e, 0x7c3f, 0x7c38, 0x7c3d, 0x7c37, 0x7c40, 0x7e6b, 0x7e6d, 0x7e79, 0x7e69, 0x7e6a, 0x7f85, 0x7e73, 0x7fb6, 0x7fb9, 0x7fb8, 0x81d8, 0x85e9, 0x85dd, 0x85ea, 0x85d5, 0x85e4, 0x85e5, 0x85f7, 0x87fb, 0x8805, 0x880d, 0x87f9, 0x87fe, 0x8960, 0x895f, 0x8956, 0x895e, 0x8b41, 0x8b5c, 0x8b58, 0x8b49, 0x8b5a, 0x8b4e, 0x8b4f, 0x8b46, 0x8b59, 0x8d08, 0x8d0a, 0x8e7c, 0x8e72, 0x8e87, 0x8e76, 0x8e6c, 0x8e7a, 0x8e74, 0x8f54, 0x8f4e, 0x8fad, 0x908a, 0x908b, 0x91b1, 0x91ae, 0x93e1, 0x93d1, 0x93df, 0x93c3, 0x93c8, 0x93dc, 0x93dd, 0x93d6, 0x93e2, 0x93cd, 0x93d8, 0x93e4, 0x93d7, 0x93e8, 0x95dc, 0x96b4, 0x96e3, 0x972a, 0x9727, 0x9761, 0x97dc, 0x97fb, 0x985e, /* 0xc4 */ 0x9858, 0x985b, 0x98bc, 0x9945, 0x9949, 0x9a16, 0x9a19, 0x9b0d, 0x9be8, 0x9be7, 0x9bd6, 0x9bdb, 0x9d89, 0x9d61, 0x9d72, 0x9d6a, 0x9d6c, 0x9e92, 0x9e97, 0x9e93, 0x9eb4, 0x52f8, 0x56a8, 0x56b7, 0x56b6, 0x56b4, 0x56bc, 0x58e4, 0x5b40, 0x5b43, 0x5b7d, 0x5bf6, 0x5dc9, 0x61f8, 0x61fa, 0x6518, 0x6514, 0x6519, 0x66e6, 0x6727, 0x6aec, 0x703e, 0x7030, 0x7032, 0x7210, 0x737b, 0x74cf, 0x7662, 0x7665, 0x7926, 0x792a, 0x792c, 0x792b, 0x7ac7, 0x7af6, 0x7c4c, 0x7c43, 0x7c4d, 0x7cef, 0x7cf0, 0x8fae, 0x7e7d, 0x7e7c, 0x7e82, 0x7f4c, 0x8000, 0x81da, 0x8266, 0x85fb, 0x85f9, 0x8611, 0x85fa, 0x8606, 0x860b, 0x8607, 0x860a, 0x8814, 0x8815, 0x8964, 0x89ba, 0x89f8, 0x8b70, 0x8b6c, 0x8b66, 0x8b6f, 0x8b5f, 0x8b6b, 0x8d0f, 0x8d0d, 0x8e89, 0x8e81, 0x8e85, 0x8e82, 0x91b4, 0x91cb, 0x9418, 0x9403, 0x93fd, 0x95e1, 0x9730, 0x98c4, 0x9952, 0x9951, 0x99a8, 0x9a2b, 0x9a30, 0x9a37, 0x9a35, 0x9c13, 0x9c0d, 0x9e79, 0x9eb5, 0x9ee8, 0x9f2f, 0x9f5f, 0x9f63, 0x9f61, 0x5137, 0x5138, 0x56c1, 0x56c0, 0x56c2, 0x5914, 0x5c6c, 0x5dcd, 0x61fc, 0x61fe, 0x651d, 0x651c, 0x6595, 0x66e9, 0x6afb, 0x6b04, 0x6afa, 0x6bb2, 0x704c, 0x721b, 0x72a7, 0x74d6, 0x74d4, 0x7669, 0x77d3, 0x7c50, 0x7e8f, 0x7e8c, 0x7fbc, 0x8617, 0x862d, 0x861a, 0x8823, 0x8822, 0x8821, 0x881f, 0x896a, 0x896c, 0x89bd, 0x8b74, /* 0xc5 */ 0x8b77, 0x8b7d, 0x8d13, 0x8e8a, 0x8e8d, 0x8e8b, 0x8f5f, 0x8faf, 0x91ba, 0x942e, 0x9433, 0x9435, 0x943a, 0x9438, 0x9432, 0x942b, 0x95e2, 0x9738, 0x9739, 0x9732, 0x97ff, 0x9867, 0x9865, 0x9957, 0x9a45, 0x9a43, 0x9a40, 0x9a3e, 0x9acf, 0x9b54, 0x9b51, 0x9c2d, 0x9c25, 0x9daf, 0x9db4, 0x9dc2, 0x9db8, 0x9e9d, 0x9eef, 0x9f19, 0x9f5c, 0x9f66, 0x9f67, 0x513c, 0x513b, 0x56c8, 0x56ca, 0x56c9, 0x5b7f, 0x5dd4, 0x5dd2, 0x5f4e, 0x61ff, 0x6524, 0x6b0a, 0x6b61, 0x7051, 0x7058, 0x7380, 0x74e4, 0x758a, 0x766e, 0x766c, 0x79b3, 0x7c60, 0x7c5f, 0x807e, 0x807d, 0x81df, 0x8972, 0x896f, 0x89fc, 0x8b80, 0x8d16, 0x8d17, 0x8e91, 0x8e93, 0x8f61, 0x9148, 0x9444, 0x9451, 0x9452, 0x973d, 0x973e, 0x97c3, 0x97c1, 0x986b, 0x9955, 0x9a55, 0x9a4d, 0x9ad2, 0x9b1a, 0x9c49, 0x9c31, 0x9c3e, 0x9c3b, 0x9dd3, 0x9dd7, 0x9f34, 0x9f6c, 0x9f6a, 0x9f94, 0x56cc, 0x5dd6, 0x6200, 0x6523, 0x652b, 0x652a, 0x66ec, 0x6b10, 0x74da, 0x7aca, 0x7c64, 0x7c63, 0x7c65, 0x7e93, 0x7e96, 0x7e94, 0x81e2, 0x8638, 0x863f, 0x8831, 0x8b8a, 0x9090, 0x908f, 0x9463, 0x9460, 0x9464, 0x9768, 0x986f, 0x995c, 0x9a5a, 0x9a5b, 0x9a57, 0x9ad3, 0x9ad4, 0x9ad1, 0x9c54, 0x9c57, 0x9c56, 0x9de5, 0x9e9f, 0x9ef4, 0x56d1, 0x58e9, 0x652c, 0x705e, 0x7671, 0x7672, 0x77d7, 0x7f50, 0x7f88, 0x8836, 0x8839, 0x8862, 0x8b93, 0x8b92, /* 0xc6 */ 0x8b96, 0x8277, 0x8d1b, 0x91c0, 0x946a, 0x9742, 0x9748, 0x9744, 0x97c6, 0x9870, 0x9a5f, 0x9b22, 0x9b58, 0x9c5f, 0x9df9, 0x9dfa, 0x9e7c, 0x9e7d, 0x9f07, 0x9f77, 0x9f72, 0x5ef3, 0x6b16, 0x7063, 0x7c6c, 0x7c6e, 0x883b, 0x89c0, 0x8ea1, 0x91c1, 0x9472, 0x9470, 0x9871, 0x995e, 0x9ad6, 0x9b23, 0x9ecc, 0x7064, 0x77da, 0x8b9a, 0x9477, 0x97c9, 0x9a62, 0x9a65, 0x7e9c, 0x8b9c, 0x8eaa, 0x91c5, 0x947d, 0x947e, 0x947c, 0x9c77, 0x9c78, 0x9ef7, 0x8c54, 0x947f, 0x9e1a, 0x7228, 0x9a6a, 0x9b31, 0x9e1b, 0x9e1e, 0x7c72, 0x30fe, 0x309d, 0x309e, 0x3005, 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048, 0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058, 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f, 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, 0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e, 0x306f, 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078, 0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e, 0x307f, 0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088, 0x3089, 0x308a, 0x308b, 0x308c, 0x308d, 0x308e, 0x308f, 0x3090, 0x3091, 0x3092, 0x3093, 0x30a1, 0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7, /* 0xc7 */ 0x30a8, 0x30a9, 0x30aa, 0x30ab, 0x30ac, 0x30ad, 0x30ae, 0x30af, 0x30b0, 0x30b1, 0x30b2, 0x30b3, 0x30b4, 0x30b5, 0x30b6, 0x30b7, 0x30b8, 0x30b9, 0x30ba, 0x30bb, 0x30bc, 0x30bd, 0x30be, 0x30bf, 0x30c0, 0x30c1, 0x30c2, 0x30c3, 0x30c4, 0x30c5, 0x30c6, 0x30c7, 0x30c8, 0x30c9, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf, 0x30d0, 0x30d1, 0x30d2, 0x30d3, 0x30d4, 0x30d5, 0x30d6, 0x30d7, 0x30d8, 0x30d9, 0x30da, 0x30db, 0x30dc, 0x30dd, 0x30de, 0x30df, 0x30e0, 0x30e1, 0x30e2, 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7, 0x30e8, 0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ee, 0x30ef, 0x30f0, 0x30f1, 0x30f2, 0x30f3, 0x30f4, 0x30f5, 0x30f6, 0x0414, 0x0415, 0x0401, 0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0436, 0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469, 0x2474, 0x2475, 0x2476, 0x2477, 0x2478, 0x2479, 0x247a, 0x247b, 0x247c, 0x247d, }; static const unsigned short big5_2uni_pagec9[7652] = { /* 0xc9 */ 0x4e42, 0x4e5c, 0x51f5, 0x531a, 0x5382, 0x4e07, 0x4e0c, 0x4e47, 0x4e8d, 0x56d7, 0xfa0c, 0x5c6e, 0x5f73, 0x4e0f, 0x5187, 0x4e0e, 0x4e2e, 0x4e93, 0x4ec2, 0x4ec9, 0x4ec8, 0x5198, 0x52fc, 0x536c, 0x53b9, 0x5720, 0x5903, 0x592c, 0x5c10, 0x5dff, 0x65e1, 0x6bb3, 0x6bcc, 0x6c14, 0x723f, 0x4e31, 0x4e3c, 0x4ee8, 0x4edc, 0x4ee9, 0x4ee1, 0x4edd, 0x4eda, 0x520c, 0x531c, 0x534c, 0x5722, 0x5723, 0x5917, 0x592f, 0x5b81, 0x5b84, 0x5c12, 0x5c3b, 0x5c74, 0x5c73, 0x5e04, 0x5e80, 0x5e82, 0x5fc9, 0x6209, 0x6250, 0x6c15, 0x6c36, 0x6c43, 0x6c3f, 0x6c3b, 0x72ae, 0x72b0, 0x738a, 0x79b8, 0x808a, 0x961e, 0x4f0e, 0x4f18, 0x4f2c, 0x4ef5, 0x4f14, 0x4ef1, 0x4f00, 0x4ef7, 0x4f08, 0x4f1d, 0x4f02, 0x4f05, 0x4f22, 0x4f13, 0x4f04, 0x4ef4, 0x4f12, 0x51b1, 0x5213, 0x5209, 0x5210, 0x52a6, 0x5322, 0x531f, 0x534d, 0x538a, 0x5407, 0x56e1, 0x56df, 0x572e, 0x572a, 0x5734, 0x593c, 0x5980, 0x597c, 0x5985, 0x597b, 0x597e, 0x5977, 0x597f, 0x5b56, 0x5c15, 0x5c25, 0x5c7c, 0x5c7a, 0x5c7b, 0x5c7e, 0x5ddf, 0x5e75, 0x5e84, 0x5f02, 0x5f1a, 0x5f74, 0x5fd5, 0x5fd4, 0x5fcf, 0x625c, 0x625e, 0x6264, 0x6261, 0x6266, 0x6262, 0x6259, 0x6260, 0x625a, 0x6265, 0x65ef, 0x65ee, 0x673e, 0x6739, 0x6738, 0x673b, 0x673a, 0x673f, 0x673c, 0x6733, 0x6c18, 0x6c46, 0x6c52, 0x6c5c, 0x6c4f, 0x6c4a, 0x6c54, 0x6c4b, /* 0xca */ 0x6c4c, 0x7071, 0x725e, 0x72b4, 0x72b5, 0x738e, 0x752a, 0x767f, 0x7a75, 0x7f51, 0x8278, 0x827c, 0x8280, 0x827d, 0x827f, 0x864d, 0x897e, 0x9099, 0x9097, 0x9098, 0x909b, 0x9094, 0x9622, 0x9624, 0x9620, 0x9623, 0x4f56, 0x4f3b, 0x4f62, 0x4f49, 0x4f53, 0x4f64, 0x4f3e, 0x4f67, 0x4f52, 0x4f5f, 0x4f41, 0x4f58, 0x4f2d, 0x4f33, 0x4f3f, 0x4f61, 0x518f, 0x51b9, 0x521c, 0x521e, 0x5221, 0x52ad, 0x52ae, 0x5309, 0x5363, 0x5372, 0x538e, 0x538f, 0x5430, 0x5437, 0x542a, 0x5454, 0x5445, 0x5419, 0x541c, 0x5425, 0x5418, 0x543d, 0x544f, 0x5441, 0x5428, 0x5424, 0x5447, 0x56ee, 0x56e7, 0x56e5, 0x5741, 0x5745, 0x574c, 0x5749, 0x574b, 0x5752, 0x5906, 0x5940, 0x59a6, 0x5998, 0x59a0, 0x5997, 0x598e, 0x59a2, 0x5990, 0x598f, 0x59a7, 0x59a1, 0x5b8e, 0x5b92, 0x5c28, 0x5c2a, 0x5c8d, 0x5c8f, 0x5c88, 0x5c8b, 0x5c89, 0x5c92, 0x5c8a, 0x5c86, 0x5c93, 0x5c95, 0x5de0, 0x5e0a, 0x5e0e, 0x5e8b, 0x5e89, 0x5e8c, 0x5e88, 0x5e8d, 0x5f05, 0x5f1d, 0x5f78, 0x5f76, 0x5fd2, 0x5fd1, 0x5fd0, 0x5fed, 0x5fe8, 0x5fee, 0x5ff3, 0x5fe1, 0x5fe4, 0x5fe3, 0x5ffa, 0x5fef, 0x5ff7, 0x5ffb, 0x6000, 0x5ff4, 0x623a, 0x6283, 0x628c, 0x628e, 0x628f, 0x6294, 0x6287, 0x6271, 0x627b, 0x627a, 0x6270, 0x6281, 0x6288, 0x6277, 0x627d, 0x6272, 0x6274, 0x6537, 0x65f0, 0x65f4, 0x65f3, 0x65f2, 0x65f5, 0x6745, 0x6747, /* 0xcb */ 0x6759, 0x6755, 0x674c, 0x6748, 0x675d, 0x674d, 0x675a, 0x674b, 0x6bd0, 0x6c19, 0x6c1a, 0x6c78, 0x6c67, 0x6c6b, 0x6c84, 0x6c8b, 0x6c8f, 0x6c71, 0x6c6f, 0x6c69, 0x6c9a, 0x6c6d, 0x6c87, 0x6c95, 0x6c9c, 0x6c66, 0x6c73, 0x6c65, 0x6c7b, 0x6c8e, 0x7074, 0x707a, 0x7263, 0x72bf, 0x72bd, 0x72c3, 0x72c6, 0x72c1, 0x72ba, 0x72c5, 0x7395, 0x7397, 0x7393, 0x7394, 0x7392, 0x753a, 0x7539, 0x7594, 0x7595, 0x7681, 0x793d, 0x8034, 0x8095, 0x8099, 0x8090, 0x8092, 0x809c, 0x8290, 0x828f, 0x8285, 0x828e, 0x8291, 0x8293, 0x828a, 0x8283, 0x8284, 0x8c78, 0x8fc9, 0x8fbf, 0x909f, 0x90a1, 0x90a5, 0x909e, 0x90a7, 0x90a0, 0x9630, 0x9628, 0x962f, 0x962d, 0x4e33, 0x4f98, 0x4f7c, 0x4f85, 0x4f7d, 0x4f80, 0x4f87, 0x4f76, 0x4f74, 0x4f89, 0x4f84, 0x4f77, 0x4f4c, 0x4f97, 0x4f6a, 0x4f9a, 0x4f79, 0x4f81, 0x4f78, 0x4f90, 0x4f9c, 0x4f94, 0x4f9e, 0x4f92, 0x4f82, 0x4f95, 0x4f6b, 0x4f6e, 0x519e, 0x51bc, 0x51be, 0x5235, 0x5232, 0x5233, 0x5246, 0x5231, 0x52bc, 0x530a, 0x530b, 0x533c, 0x5392, 0x5394, 0x5487, 0x547f, 0x5481, 0x5491, 0x5482, 0x5488, 0x546b, 0x547a, 0x547e, 0x5465, 0x546c, 0x5474, 0x5466, 0x548d, 0x546f, 0x5461, 0x5460, 0x5498, 0x5463, 0x5467, 0x5464, 0x56f7, 0x56f9, 0x576f, 0x5772, 0x576d, 0x576b, 0x5771, 0x5770, 0x5776, 0x5780, 0x5775, 0x577b, 0x5773, 0x5774, 0x5762, /* 0xcc */ 0x5768, 0x577d, 0x590c, 0x5945, 0x59b5, 0x59ba, 0x59cf, 0x59ce, 0x59b2, 0x59cc, 0x59c1, 0x59b6, 0x59bc, 0x59c3, 0x59d6, 0x59b1, 0x59bd, 0x59c0, 0x59c8, 0x59b4, 0x59c7, 0x5b62, 0x5b65, 0x5b93, 0x5b95, 0x5c44, 0x5c47, 0x5cae, 0x5ca4, 0x5ca0, 0x5cb5, 0x5caf, 0x5ca8, 0x5cac, 0x5c9f, 0x5ca3, 0x5cad, 0x5ca2, 0x5caa, 0x5ca7, 0x5c9d, 0x5ca5, 0x5cb6, 0x5cb0, 0x5ca6, 0x5e17, 0x5e14, 0x5e19, 0x5f28, 0x5f22, 0x5f23, 0x5f24, 0x5f54, 0x5f82, 0x5f7e, 0x5f7d, 0x5fde, 0x5fe5, 0x602d, 0x6026, 0x6019, 0x6032, 0x600b, 0x6034, 0x600a, 0x6017, 0x6033, 0x601a, 0x601e, 0x602c, 0x6022, 0x600d, 0x6010, 0x602e, 0x6013, 0x6011, 0x600c, 0x6009, 0x601c, 0x6214, 0x623d, 0x62ad, 0x62b4, 0x62d1, 0x62be, 0x62aa, 0x62b6, 0x62ca, 0x62ae, 0x62b3, 0x62af, 0x62bb, 0x62a9, 0x62b0, 0x62b8, 0x653d, 0x65a8, 0x65bb, 0x6609, 0x65fc, 0x6604, 0x6612, 0x6608, 0x65fb, 0x6603, 0x660b, 0x660d, 0x6605, 0x65fd, 0x6611, 0x6610, 0x66f6, 0x670a, 0x6785, 0x676c, 0x678e, 0x6792, 0x6776, 0x677b, 0x6798, 0x6786, 0x6784, 0x6774, 0x678d, 0x678c, 0x677a, 0x679f, 0x6791, 0x6799, 0x6783, 0x677d, 0x6781, 0x6778, 0x6779, 0x6794, 0x6b25, 0x6b80, 0x6b7e, 0x6bde, 0x6c1d, 0x6c93, 0x6cec, 0x6ceb, 0x6cee, 0x6cd9, 0x6cb6, 0x6cd4, 0x6cad, 0x6ce7, 0x6cb7, 0x6cd0, 0x6cc2, 0x6cba, 0x6cc3, 0x6cc6, 0x6ced, 0x6cf2, /* 0xcd */ 0x6cd2, 0x6cdd, 0x6cb4, 0x6c8a, 0x6c9d, 0x6c80, 0x6cde, 0x6cc0, 0x6d30, 0x6ccd, 0x6cc7, 0x6cb0, 0x6cf9, 0x6ccf, 0x6ce9, 0x6cd1, 0x7094, 0x7098, 0x7085, 0x7093, 0x7086, 0x7084, 0x7091, 0x7096, 0x7082, 0x709a, 0x7083, 0x726a, 0x72d6, 0x72cb, 0x72d8, 0x72c9, 0x72dc, 0x72d2, 0x72d4, 0x72da, 0x72cc, 0x72d1, 0x73a4, 0x73a1, 0x73ad, 0x73a6, 0x73a2, 0x73a0, 0x73ac, 0x739d, 0x74dd, 0x74e8, 0x753f, 0x7540, 0x753e, 0x758c, 0x7598, 0x76af, 0x76f3, 0x76f1, 0x76f0, 0x76f5, 0x77f8, 0x77fc, 0x77f9, 0x77fb, 0x77fa, 0x77f7, 0x7942, 0x793f, 0x79c5, 0x7a78, 0x7a7b, 0x7afb, 0x7c75, 0x7cfd, 0x8035, 0x808f, 0x80ae, 0x80a3, 0x80b8, 0x80b5, 0x80ad, 0x8220, 0x82a0, 0x82c0, 0x82ab, 0x829a, 0x8298, 0x829b, 0x82b5, 0x82a7, 0x82ae, 0x82bc, 0x829e, 0x82ba, 0x82b4, 0x82a8, 0x82a1, 0x82a9, 0x82c2, 0x82a4, 0x82c3, 0x82b6, 0x82a2, 0x8670, 0x866f, 0x866d, 0x866e, 0x8c56, 0x8fd2, 0x8fcb, 0x8fd3, 0x8fcd, 0x8fd6, 0x8fd5, 0x8fd7, 0x90b2, 0x90b4, 0x90af, 0x90b3, 0x90b0, 0x9639, 0x963d, 0x963c, 0x963a, 0x9643, 0x4fcd, 0x4fc5, 0x4fd3, 0x4fb2, 0x4fc9, 0x4fcb, 0x4fc1, 0x4fd4, 0x4fdc, 0x4fd9, 0x4fbb, 0x4fb3, 0x4fdb, 0x4fc7, 0x4fd6, 0x4fba, 0x4fc0, 0x4fb9, 0x4fec, 0x5244, 0x5249, 0x52c0, 0x52c2, 0x533d, 0x537c, 0x5397, 0x5396, 0x5399, 0x5398, 0x54ba, 0x54a1, 0x54ad, 0x54a5, 0x54cf, /* 0xce */ 0x54c3, 0x830d, 0x54b7, 0x54ae, 0x54d6, 0x54b6, 0x54c5, 0x54c6, 0x54a0, 0x5470, 0x54bc, 0x54a2, 0x54be, 0x5472, 0x54de, 0x54b0, 0x57b5, 0x579e, 0x579f, 0x57a4, 0x578c, 0x5797, 0x579d, 0x579b, 0x5794, 0x5798, 0x578f, 0x5799, 0x57a5, 0x579a, 0x5795, 0x58f4, 0x590d, 0x5953, 0x59e1, 0x59de, 0x59ee, 0x5a00, 0x59f1, 0x59dd, 0x59fa, 0x59fd, 0x59fc, 0x59f6, 0x59e4, 0x59f2, 0x59f7, 0x59db, 0x59e9, 0x59f3, 0x59f5, 0x59e0, 0x59fe, 0x59f4, 0x59ed, 0x5ba8, 0x5c4c, 0x5cd0, 0x5cd8, 0x5ccc, 0x5cd7, 0x5ccb, 0x5cdb, 0x5cde, 0x5cda, 0x5cc9, 0x5cc7, 0x5cca, 0x5cd6, 0x5cd3, 0x5cd4, 0x5ccf, 0x5cc8, 0x5cc6, 0x5cce, 0x5cdf, 0x5cf8, 0x5df9, 0x5e21, 0x5e22, 0x5e23, 0x5e20, 0x5e24, 0x5eb0, 0x5ea4, 0x5ea2, 0x5e9b, 0x5ea3, 0x5ea5, 0x5f07, 0x5f2e, 0x5f56, 0x5f86, 0x6037, 0x6039, 0x6054, 0x6072, 0x605e, 0x6045, 0x6053, 0x6047, 0x6049, 0x605b, 0x604c, 0x6040, 0x6042, 0x605f, 0x6024, 0x6044, 0x6058, 0x6066, 0x606e, 0x6242, 0x6243, 0x62cf, 0x630d, 0x630b, 0x62f5, 0x630e, 0x6303, 0x62eb, 0x62f9, 0x630f, 0x630c, 0x62f8, 0x62f6, 0x6300, 0x6313, 0x6314, 0x62fa, 0x6315, 0x62fb, 0x62f0, 0x6541, 0x6543, 0x65aa, 0x65bf, 0x6636, 0x6621, 0x6632, 0x6635, 0x661c, 0x6626, 0x6622, 0x6633, 0x662b, 0x663a, 0x661d, 0x6634, 0x6639, 0x662e, 0x670f, 0x6710, 0x67c1, 0x67f2, 0x67c8, 0x67ba, /* 0xcf */ 0x67dc, 0x67bb, 0x67f8, 0x67d8, 0x67c0, 0x67b7, 0x67c5, 0x67eb, 0x67e4, 0x67df, 0x67b5, 0x67cd, 0x67b3, 0x67f7, 0x67f6, 0x67ee, 0x67e3, 0x67c2, 0x67b9, 0x67ce, 0x67e7, 0x67f0, 0x67b2, 0x67fc, 0x67c6, 0x67ed, 0x67cc, 0x67ae, 0x67e6, 0x67db, 0x67fa, 0x67c9, 0x67ca, 0x67c3, 0x67ea, 0x67cb, 0x6b28, 0x6b82, 0x6b84, 0x6bb6, 0x6bd6, 0x6bd8, 0x6be0, 0x6c20, 0x6c21, 0x6d28, 0x6d34, 0x6d2d, 0x6d1f, 0x6d3c, 0x6d3f, 0x6d12, 0x6d0a, 0x6cda, 0x6d33, 0x6d04, 0x6d19, 0x6d3a, 0x6d1a, 0x6d11, 0x6d00, 0x6d1d, 0x6d42, 0x6d01, 0x6d18, 0x6d37, 0x6d03, 0x6d0f, 0x6d40, 0x6d07, 0x6d20, 0x6d2c, 0x6d08, 0x6d22, 0x6d09, 0x6d10, 0x70b7, 0x709f, 0x70be, 0x70b1, 0x70b0, 0x70a1, 0x70b4, 0x70b5, 0x70a9, 0x7241, 0x7249, 0x724a, 0x726c, 0x7270, 0x7273, 0x726e, 0x72ca, 0x72e4, 0x72e8, 0x72eb, 0x72df, 0x72ea, 0x72e6, 0x72e3, 0x7385, 0x73cc, 0x73c2, 0x73c8, 0x73c5, 0x73b9, 0x73b6, 0x73b5, 0x73b4, 0x73eb, 0x73bf, 0x73c7, 0x73be, 0x73c3, 0x73c6, 0x73b8, 0x73cb, 0x74ec, 0x74ee, 0x752e, 0x7547, 0x7548, 0x75a7, 0x75aa, 0x7679, 0x76c4, 0x7708, 0x7703, 0x7704, 0x7705, 0x770a, 0x76f7, 0x76fb, 0x76fa, 0x77e7, 0x77e8, 0x7806, 0x7811, 0x7812, 0x7805, 0x7810, 0x780f, 0x780e, 0x7809, 0x7803, 0x7813, 0x794a, 0x794c, 0x794b, 0x7945, 0x7944, 0x79d5, 0x79cd, 0x79cf, 0x79d6, 0x79ce, 0x7a80, /* 0xd0 */ 0x7a7e, 0x7ad1, 0x7b00, 0x7b01, 0x7c7a, 0x7c78, 0x7c79, 0x7c7f, 0x7c80, 0x7c81, 0x7d03, 0x7d08, 0x7d01, 0x7f58, 0x7f91, 0x7f8d, 0x7fbe, 0x8007, 0x800e, 0x800f, 0x8014, 0x8037, 0x80d8, 0x80c7, 0x80e0, 0x80d1, 0x80c8, 0x80c2, 0x80d0, 0x80c5, 0x80e3, 0x80d9, 0x80dc, 0x80ca, 0x80d5, 0x80c9, 0x80cf, 0x80d7, 0x80e6, 0x80cd, 0x81ff, 0x8221, 0x8294, 0x82d9, 0x82fe, 0x82f9, 0x8307, 0x82e8, 0x8300, 0x82d5, 0x833a, 0x82eb, 0x82d6, 0x82f4, 0x82ec, 0x82e1, 0x82f2, 0x82f5, 0x830c, 0x82fb, 0x82f6, 0x82f0, 0x82ea, 0x82e4, 0x82e0, 0x82fa, 0x82f3, 0x82ed, 0x8677, 0x8674, 0x867c, 0x8673, 0x8841, 0x884e, 0x8867, 0x886a, 0x8869, 0x89d3, 0x8a04, 0x8a07, 0x8d72, 0x8fe3, 0x8fe1, 0x8fee, 0x8fe0, 0x90f1, 0x90bd, 0x90bf, 0x90d5, 0x90c5, 0x90be, 0x90c7, 0x90cb, 0x90c8, 0x91d4, 0x91d3, 0x9654, 0x964f, 0x9651, 0x9653, 0x964a, 0x964e, 0x501e, 0x5005, 0x5007, 0x5013, 0x5022, 0x5030, 0x501b, 0x4ff5, 0x4ff4, 0x5033, 0x5037, 0x502c, 0x4ff6, 0x4ff7, 0x5017, 0x501c, 0x5020, 0x5027, 0x5035, 0x502f, 0x5031, 0x500e, 0x515a, 0x5194, 0x5193, 0x51ca, 0x51c4, 0x51c5, 0x51c8, 0x51ce, 0x5261, 0x525a, 0x5252, 0x525e, 0x525f, 0x5255, 0x5262, 0x52cd, 0x530e, 0x539e, 0x5526, 0x54e2, 0x5517, 0x5512, 0x54e7, 0x54f3, 0x54e4, 0x551a, 0x54ff, 0x5504, 0x5508, 0x54eb, 0x5511, 0x5505, 0x54f1, /* 0xd1 */ 0x550a, 0x54fb, 0x54f7, 0x54f8, 0x54e0, 0x550e, 0x5503, 0x550b, 0x5701, 0x5702, 0x57cc, 0x5832, 0x57d5, 0x57d2, 0x57ba, 0x57c6, 0x57bd, 0x57bc, 0x57b8, 0x57b6, 0x57bf, 0x57c7, 0x57d0, 0x57b9, 0x57c1, 0x590e, 0x594a, 0x5a19, 0x5a16, 0x5a2d, 0x5a2e, 0x5a15, 0x5a0f, 0x5a17, 0x5a0a, 0x5a1e, 0x5a33, 0x5b6c, 0x5ba7, 0x5bad, 0x5bac, 0x5c03, 0x5c56, 0x5c54, 0x5cec, 0x5cff, 0x5cee, 0x5cf1, 0x5cf7, 0x5d00, 0x5cf9, 0x5e29, 0x5e28, 0x5ea8, 0x5eae, 0x5eaa, 0x5eac, 0x5f33, 0x5f30, 0x5f67, 0x605d, 0x605a, 0x6067, 0x6041, 0x60a2, 0x6088, 0x6080, 0x6092, 0x6081, 0x609d, 0x6083, 0x6095, 0x609b, 0x6097, 0x6087, 0x609c, 0x608e, 0x6219, 0x6246, 0x62f2, 0x6310, 0x6356, 0x632c, 0x6344, 0x6345, 0x6336, 0x6343, 0x63e4, 0x6339, 0x634b, 0x634a, 0x633c, 0x6329, 0x6341, 0x6334, 0x6358, 0x6354, 0x6359, 0x632d, 0x6347, 0x6333, 0x635a, 0x6351, 0x6338, 0x6357, 0x6340, 0x6348, 0x654a, 0x6546, 0x65c6, 0x65c3, 0x65c4, 0x65c2, 0x664a, 0x665f, 0x6647, 0x6651, 0x6712, 0x6713, 0x681f, 0x681a, 0x6849, 0x6832, 0x6833, 0x683b, 0x684b, 0x684f, 0x6816, 0x6831, 0x681c, 0x6835, 0x682b, 0x682d, 0x682f, 0x684e, 0x6844, 0x6834, 0x681d, 0x6812, 0x6814, 0x6826, 0x6828, 0x682e, 0x684d, 0x683a, 0x6825, 0x6820, 0x6b2c, 0x6b2f, 0x6b2d, 0x6b31, 0x6b34, 0x6b6d, 0x8082, 0x6b88, 0x6be6, 0x6be4, /* 0xd2 */ 0x6be8, 0x6be3, 0x6be2, 0x6be7, 0x6c25, 0x6d7a, 0x6d63, 0x6d64, 0x6d76, 0x6d0d, 0x6d61, 0x6d92, 0x6d58, 0x6d62, 0x6d6d, 0x6d6f, 0x6d91, 0x6d8d, 0x6def, 0x6d7f, 0x6d86, 0x6d5e, 0x6d67, 0x6d60, 0x6d97, 0x6d70, 0x6d7c, 0x6d5f, 0x6d82, 0x6d98, 0x6d2f, 0x6d68, 0x6d8b, 0x6d7e, 0x6d80, 0x6d84, 0x6d16, 0x6d83, 0x6d7b, 0x6d7d, 0x6d75, 0x6d90, 0x70dc, 0x70d3, 0x70d1, 0x70dd, 0x70cb, 0x7f39, 0x70e2, 0x70d7, 0x70d2, 0x70de, 0x70e0, 0x70d4, 0x70cd, 0x70c5, 0x70c6, 0x70c7, 0x70da, 0x70ce, 0x70e1, 0x7242, 0x7278, 0x7277, 0x7276, 0x7300, 0x72fa, 0x72f4, 0x72fe, 0x72f6, 0x72f3, 0x72fb, 0x7301, 0x73d3, 0x73d9, 0x73e5, 0x73d6, 0x73bc, 0x73e7, 0x73e3, 0x73e9, 0x73dc, 0x73d2, 0x73db, 0x73d4, 0x73dd, 0x73da, 0x73d7, 0x73d8, 0x73e8, 0x74de, 0x74df, 0x74f4, 0x74f5, 0x7521, 0x755b, 0x755f, 0x75b0, 0x75c1, 0x75bb, 0x75c4, 0x75c0, 0x75bf, 0x75b6, 0x75ba, 0x768a, 0x76c9, 0x771d, 0x771b, 0x7710, 0x7713, 0x7712, 0x7723, 0x7711, 0x7715, 0x7719, 0x771a, 0x7722, 0x7727, 0x7823, 0x782c, 0x7822, 0x7835, 0x782f, 0x7828, 0x782e, 0x782b, 0x7821, 0x7829, 0x7833, 0x782a, 0x7831, 0x7954, 0x795b, 0x794f, 0x795c, 0x7953, 0x7952, 0x7951, 0x79eb, 0x79ec, 0x79e0, 0x79ee, 0x79ed, 0x79ea, 0x79dc, 0x79de, 0x79dd, 0x7a86, 0x7a89, 0x7a85, 0x7a8b, 0x7a8c, 0x7a8a, 0x7a87, 0x7ad8, 0x7b10, /* 0xd3 */ 0x7b04, 0x7b13, 0x7b05, 0x7b0f, 0x7b08, 0x7b0a, 0x7b0e, 0x7b09, 0x7b12, 0x7c84, 0x7c91, 0x7c8a, 0x7c8c, 0x7c88, 0x7c8d, 0x7c85, 0x7d1e, 0x7d1d, 0x7d11, 0x7d0e, 0x7d18, 0x7d16, 0x7d13, 0x7d1f, 0x7d12, 0x7d0f, 0x7d0c, 0x7f5c, 0x7f61, 0x7f5e, 0x7f60, 0x7f5d, 0x7f5b, 0x7f96, 0x7f92, 0x7fc3, 0x7fc2, 0x7fc0, 0x8016, 0x803e, 0x8039, 0x80fa, 0x80f2, 0x80f9, 0x80f5, 0x8101, 0x80fb, 0x8100, 0x8201, 0x822f, 0x8225, 0x8333, 0x832d, 0x8344, 0x8319, 0x8351, 0x8325, 0x8356, 0x833f, 0x8341, 0x8326, 0x831c, 0x8322, 0x8342, 0x834e, 0x831b, 0x832a, 0x8308, 0x833c, 0x834d, 0x8316, 0x8324, 0x8320, 0x8337, 0x832f, 0x8329, 0x8347, 0x8345, 0x834c, 0x8353, 0x831e, 0x832c, 0x834b, 0x8327, 0x8348, 0x8653, 0x8652, 0x86a2, 0x86a8, 0x8696, 0x868d, 0x8691, 0x869e, 0x8687, 0x8697, 0x8686, 0x868b, 0x869a, 0x8685, 0x86a5, 0x8699, 0x86a1, 0x86a7, 0x8695, 0x8698, 0x868e, 0x869d, 0x8690, 0x8694, 0x8843, 0x8844, 0x886d, 0x8875, 0x8876, 0x8872, 0x8880, 0x8871, 0x887f, 0x886f, 0x8883, 0x887e, 0x8874, 0x887c, 0x8a12, 0x8c47, 0x8c57, 0x8c7b, 0x8ca4, 0x8ca3, 0x8d76, 0x8d78, 0x8db5, 0x8db7, 0x8db6, 0x8ed1, 0x8ed3, 0x8ffe, 0x8ff5, 0x9002, 0x8fff, 0x8ffb, 0x9004, 0x8ffc, 0x8ff6, 0x90d6, 0x90e0, 0x90d9, 0x90da, 0x90e3, 0x90df, 0x90e5, 0x90d8, 0x90db, 0x90d7, 0x90dc, 0x90e4, 0x9150, /* 0xd4 */ 0x914e, 0x914f, 0x91d5, 0x91e2, 0x91da, 0x965c, 0x965f, 0x96bc, 0x98e3, 0x9adf, 0x9b2f, 0x4e7f, 0x5070, 0x506a, 0x5061, 0x505e, 0x5060, 0x5053, 0x504b, 0x505d, 0x5072, 0x5048, 0x504d, 0x5041, 0x505b, 0x504a, 0x5062, 0x5015, 0x5045, 0x505f, 0x5069, 0x506b, 0x5063, 0x5064, 0x5046, 0x5040, 0x506e, 0x5073, 0x5057, 0x5051, 0x51d0, 0x526b, 0x526d, 0x526c, 0x526e, 0x52d6, 0x52d3, 0x532d, 0x539c, 0x5575, 0x5576, 0x553c, 0x554d, 0x5550, 0x5534, 0x552a, 0x5551, 0x5562, 0x5536, 0x5535, 0x5530, 0x5552, 0x5545, 0x550c, 0x5532, 0x5565, 0x554e, 0x5539, 0x5548, 0x552d, 0x553b, 0x5540, 0x554b, 0x570a, 0x5707, 0x57fb, 0x5814, 0x57e2, 0x57f6, 0x57dc, 0x57f4, 0x5800, 0x57ed, 0x57fd, 0x5808, 0x57f8, 0x580b, 0x57f3, 0x57cf, 0x5807, 0x57ee, 0x57e3, 0x57f2, 0x57e5, 0x57ec, 0x57e1, 0x580e, 0x57fc, 0x5810, 0x57e7, 0x5801, 0x580c, 0x57f1, 0x57e9, 0x57f0, 0x580d, 0x5804, 0x595c, 0x5a60, 0x5a58, 0x5a55, 0x5a67, 0x5a5e, 0x5a38, 0x5a35, 0x5a6d, 0x5a50, 0x5a5f, 0x5a65, 0x5a6c, 0x5a53, 0x5a64, 0x5a57, 0x5a43, 0x5a5d, 0x5a52, 0x5a44, 0x5a5b, 0x5a48, 0x5a8e, 0x5a3e, 0x5a4d, 0x5a39, 0x5a4c, 0x5a70, 0x5a69, 0x5a47, 0x5a51, 0x5a56, 0x5a42, 0x5a5c, 0x5b72, 0x5b6e, 0x5bc1, 0x5bc0, 0x5c59, 0x5d1e, 0x5d0b, 0x5d1d, 0x5d1a, 0x5d20, 0x5d0c, 0x5d28, 0x5d0d, 0x5d26, 0x5d25, 0x5d0f, /* 0xd5 */ 0x5d30, 0x5d12, 0x5d23, 0x5d1f, 0x5d2e, 0x5e3e, 0x5e34, 0x5eb1, 0x5eb4, 0x5eb9, 0x5eb2, 0x5eb3, 0x5f36, 0x5f38, 0x5f9b, 0x5f96, 0x5f9f, 0x608a, 0x6090, 0x6086, 0x60be, 0x60b0, 0x60ba, 0x60d3, 0x60d4, 0x60cf, 0x60e4, 0x60d9, 0x60dd, 0x60c8, 0x60b1, 0x60db, 0x60b7, 0x60ca, 0x60bf, 0x60c3, 0x60cd, 0x60c0, 0x6332, 0x6365, 0x638a, 0x6382, 0x637d, 0x63bd, 0x639e, 0x63ad, 0x639d, 0x6397, 0x63ab, 0x638e, 0x636f, 0x6387, 0x6390, 0x636e, 0x63af, 0x6375, 0x639c, 0x636d, 0x63ae, 0x637c, 0x63a4, 0x633b, 0x639f, 0x6378, 0x6385, 0x6381, 0x6391, 0x638d, 0x6370, 0x6553, 0x65cd, 0x6665, 0x6661, 0x665b, 0x6659, 0x665c, 0x6662, 0x6718, 0x6879, 0x6887, 0x6890, 0x689c, 0x686d, 0x686e, 0x68ae, 0x68ab, 0x6956, 0x686f, 0x68a3, 0x68ac, 0x68a9, 0x6875, 0x6874, 0x68b2, 0x688f, 0x6877, 0x6892, 0x687c, 0x686b, 0x6872, 0x68aa, 0x6880, 0x6871, 0x687e, 0x689b, 0x6896, 0x688b, 0x68a0, 0x6889, 0x68a4, 0x6878, 0x687b, 0x6891, 0x688c, 0x688a, 0x687d, 0x6b36, 0x6b33, 0x6b37, 0x6b38, 0x6b91, 0x6b8f, 0x6b8d, 0x6b8e, 0x6b8c, 0x6c2a, 0x6dc0, 0x6dab, 0x6db4, 0x6db3, 0x6e74, 0x6dac, 0x6de9, 0x6de2, 0x6db7, 0x6df6, 0x6dd4, 0x6e00, 0x6dc8, 0x6de0, 0x6ddf, 0x6dd6, 0x6dbe, 0x6de5, 0x6ddc, 0x6ddd, 0x6ddb, 0x6df4, 0x6dca, 0x6dbd, 0x6ded, 0x6df0, 0x6dba, 0x6dd5, 0x6dc2, 0x6dcf, 0x6dc9, /* 0xd6 */ 0x6dd0, 0x6df2, 0x6dd3, 0x6dfd, 0x6dd7, 0x6dcd, 0x6de3, 0x6dbb, 0x70fa, 0x710d, 0x70f7, 0x7117, 0x70f4, 0x710c, 0x70f0, 0x7104, 0x70f3, 0x7110, 0x70fc, 0x70ff, 0x7106, 0x7113, 0x7100, 0x70f8, 0x70f6, 0x710b, 0x7102, 0x710e, 0x727e, 0x727b, 0x727c, 0x727f, 0x731d, 0x7317, 0x7307, 0x7311, 0x7318, 0x730a, 0x7308, 0x72ff, 0x730f, 0x731e, 0x7388, 0x73f6, 0x73f8, 0x73f5, 0x7404, 0x7401, 0x73fd, 0x7407, 0x7400, 0x73fa, 0x73fc, 0x73ff, 0x740c, 0x740b, 0x73f4, 0x7408, 0x7564, 0x7563, 0x75ce, 0x75d2, 0x75cf, 0x75cb, 0x75cc, 0x75d1, 0x75d0, 0x768f, 0x7689, 0x76d3, 0x7739, 0x772f, 0x772d, 0x7731, 0x7732, 0x7734, 0x7733, 0x773d, 0x7725, 0x773b, 0x7735, 0x7848, 0x7852, 0x7849, 0x784d, 0x784a, 0x784c, 0x7826, 0x7845, 0x7850, 0x7964, 0x7967, 0x7969, 0x796a, 0x7963, 0x796b, 0x7961, 0x79bb, 0x79fa, 0x79f8, 0x79f6, 0x79f7, 0x7a8f, 0x7a94, 0x7a90, 0x7b35, 0x7b47, 0x7b34, 0x7b25, 0x7b30, 0x7b22, 0x7b24, 0x7b33, 0x7b18, 0x7b2a, 0x7b1d, 0x7b31, 0x7b2b, 0x7b2d, 0x7b2f, 0x7b32, 0x7b38, 0x7b1a, 0x7b23, 0x7c94, 0x7c98, 0x7c96, 0x7ca3, 0x7d35, 0x7d3d, 0x7d38, 0x7d36, 0x7d3a, 0x7d45, 0x7d2c, 0x7d29, 0x7d41, 0x7d47, 0x7d3e, 0x7d3f, 0x7d4a, 0x7d3b, 0x7d28, 0x7f63, 0x7f95, 0x7f9c, 0x7f9d, 0x7f9b, 0x7fca, 0x7fcb, 0x7fcd, 0x7fd0, 0x7fd1, 0x7fc7, 0x7fcf, 0x7fc9, 0x801f, /* 0xd7 */ 0x801e, 0x801b, 0x8047, 0x8043, 0x8048, 0x8118, 0x8125, 0x8119, 0x811b, 0x812d, 0x811f, 0x812c, 0x811e, 0x8121, 0x8115, 0x8127, 0x811d, 0x8122, 0x8211, 0x8238, 0x8233, 0x823a, 0x8234, 0x8232, 0x8274, 0x8390, 0x83a3, 0x83a8, 0x838d, 0x837a, 0x8373, 0x83a4, 0x8374, 0x838f, 0x8381, 0x8395, 0x8399, 0x8375, 0x8394, 0x83a9, 0x837d, 0x8383, 0x838c, 0x839d, 0x839b, 0x83aa, 0x838b, 0x837e, 0x83a5, 0x83af, 0x8388, 0x8397, 0x83b0, 0x837f, 0x83a6, 0x8387, 0x83ae, 0x8376, 0x839a, 0x8659, 0x8656, 0x86bf, 0x86b7, 0x86c2, 0x86c1, 0x86c5, 0x86ba, 0x86b0, 0x86c8, 0x86b9, 0x86b3, 0x86b8, 0x86cc, 0x86b4, 0x86bb, 0x86bc, 0x86c3, 0x86bd, 0x86be, 0x8852, 0x8889, 0x8895, 0x88a8, 0x88a2, 0x88aa, 0x889a, 0x8891, 0x88a1, 0x889f, 0x8898, 0x88a7, 0x8899, 0x889b, 0x8897, 0x88a4, 0x88ac, 0x888c, 0x8893, 0x888e, 0x8982, 0x89d6, 0x89d9, 0x89d5, 0x8a30, 0x8a27, 0x8a2c, 0x8a1e, 0x8c39, 0x8c3b, 0x8c5c, 0x8c5d, 0x8c7d, 0x8ca5, 0x8d7d, 0x8d7b, 0x8d79, 0x8dbc, 0x8dc2, 0x8db9, 0x8dbf, 0x8dc1, 0x8ed8, 0x8ede, 0x8edd, 0x8edc, 0x8ed7, 0x8ee0, 0x8ee1, 0x9024, 0x900b, 0x9011, 0x901c, 0x900c, 0x9021, 0x90ef, 0x90ea, 0x90f0, 0x90f4, 0x90f2, 0x90f3, 0x90d4, 0x90eb, 0x90ec, 0x90e9, 0x9156, 0x9158, 0x915a, 0x9153, 0x9155, 0x91ec, 0x91f4, 0x91f1, 0x91f3, 0x91f8, 0x91e4, 0x91f9, 0x91ea, /* 0xd8 */ 0x91eb, 0x91f7, 0x91e8, 0x91ee, 0x957a, 0x9586, 0x9588, 0x967c, 0x966d, 0x966b, 0x9671, 0x966f, 0x96bf, 0x976a, 0x9804, 0x98e5, 0x9997, 0x509b, 0x5095, 0x5094, 0x509e, 0x508b, 0x50a3, 0x5083, 0x508c, 0x508e, 0x509d, 0x5068, 0x509c, 0x5092, 0x5082, 0x5087, 0x515f, 0x51d4, 0x5312, 0x5311, 0x53a4, 0x53a7, 0x5591, 0x55a8, 0x55a5, 0x55ad, 0x5577, 0x5645, 0x55a2, 0x5593, 0x5588, 0x558f, 0x55b5, 0x5581, 0x55a3, 0x5592, 0x55a4, 0x557d, 0x558c, 0x55a6, 0x557f, 0x5595, 0x55a1, 0x558e, 0x570c, 0x5829, 0x5837, 0x5819, 0x581e, 0x5827, 0x5823, 0x5828, 0x57f5, 0x5848, 0x5825, 0x581c, 0x581b, 0x5833, 0x583f, 0x5836, 0x582e, 0x5839, 0x5838, 0x582d, 0x582c, 0x583b, 0x5961, 0x5aaf, 0x5a94, 0x5a9f, 0x5a7a, 0x5aa2, 0x5a9e, 0x5a78, 0x5aa6, 0x5a7c, 0x5aa5, 0x5aac, 0x5a95, 0x5aae, 0x5a37, 0x5a84, 0x5a8a, 0x5a97, 0x5a83, 0x5a8b, 0x5aa9, 0x5a7b, 0x5a7d, 0x5a8c, 0x5a9c, 0x5a8f, 0x5a93, 0x5a9d, 0x5bea, 0x5bcd, 0x5bcb, 0x5bd4, 0x5bd1, 0x5bca, 0x5bce, 0x5c0c, 0x5c30, 0x5d37, 0x5d43, 0x5d6b, 0x5d41, 0x5d4b, 0x5d3f, 0x5d35, 0x5d51, 0x5d4e, 0x5d55, 0x5d33, 0x5d3a, 0x5d52, 0x5d3d, 0x5d31, 0x5d59, 0x5d42, 0x5d39, 0x5d49, 0x5d38, 0x5d3c, 0x5d32, 0x5d36, 0x5d40, 0x5d45, 0x5e44, 0x5e41, 0x5f58, 0x5fa6, 0x5fa5, 0x5fab, 0x60c9, 0x60b9, 0x60cc, 0x60e2, 0x60ce, 0x60c4, 0x6114, /* 0xd9 */ 0x60f2, 0x610a, 0x6116, 0x6105, 0x60f5, 0x6113, 0x60f8, 0x60fc, 0x60fe, 0x60c1, 0x6103, 0x6118, 0x611d, 0x6110, 0x60ff, 0x6104, 0x610b, 0x624a, 0x6394, 0x63b1, 0x63b0, 0x63ce, 0x63e5, 0x63e8, 0x63ef, 0x63c3, 0x649d, 0x63f3, 0x63ca, 0x63e0, 0x63f6, 0x63d5, 0x63f2, 0x63f5, 0x6461, 0x63df, 0x63be, 0x63dd, 0x63dc, 0x63c4, 0x63d8, 0x63d3, 0x63c2, 0x63c7, 0x63cc, 0x63cb, 0x63c8, 0x63f0, 0x63d7, 0x63d9, 0x6532, 0x6567, 0x656a, 0x6564, 0x655c, 0x6568, 0x6565, 0x658c, 0x659d, 0x659e, 0x65ae, 0x65d0, 0x65d2, 0x667c, 0x666c, 0x667b, 0x6680, 0x6671, 0x6679, 0x666a, 0x6672, 0x6701, 0x690c, 0x68d3, 0x6904, 0x68dc, 0x692a, 0x68ec, 0x68ea, 0x68f1, 0x690f, 0x68d6, 0x68f7, 0x68eb, 0x68e4, 0x68f6, 0x6913, 0x6910, 0x68f3, 0x68e1, 0x6907, 0x68cc, 0x6908, 0x6970, 0x68b4, 0x6911, 0x68ef, 0x68c6, 0x6914, 0x68f8, 0x68d0, 0x68fd, 0x68fc, 0x68e8, 0x690b, 0x690a, 0x6917, 0x68ce, 0x68c8, 0x68dd, 0x68de, 0x68e6, 0x68f4, 0x68d1, 0x6906, 0x68d4, 0x68e9, 0x6915, 0x6925, 0x68c7, 0x6b39, 0x6b3b, 0x6b3f, 0x6b3c, 0x6b94, 0x6b97, 0x6b99, 0x6b95, 0x6bbd, 0x6bf0, 0x6bf2, 0x6bf3, 0x6c30, 0x6dfc, 0x6e46, 0x6e47, 0x6e1f, 0x6e49, 0x6e88, 0x6e3c, 0x6e3d, 0x6e45, 0x6e62, 0x6e2b, 0x6e3f, 0x6e41, 0x6e5d, 0x6e73, 0x6e1c, 0x6e33, 0x6e4b, 0x6e40, 0x6e51, 0x6e3b, 0x6e03, 0x6e2e, 0x6e5e, /* 0xda */ 0x6e68, 0x6e5c, 0x6e61, 0x6e31, 0x6e28, 0x6e60, 0x6e71, 0x6e6b, 0x6e39, 0x6e22, 0x6e30, 0x6e53, 0x6e65, 0x6e27, 0x6e78, 0x6e64, 0x6e77, 0x6e55, 0x6e79, 0x6e52, 0x6e66, 0x6e35, 0x6e36, 0x6e5a, 0x7120, 0x711e, 0x712f, 0x70fb, 0x712e, 0x7131, 0x7123, 0x7125, 0x7122, 0x7132, 0x711f, 0x7128, 0x713a, 0x711b, 0x724b, 0x725a, 0x7288, 0x7289, 0x7286, 0x7285, 0x728b, 0x7312, 0x730b, 0x7330, 0x7322, 0x7331, 0x7333, 0x7327, 0x7332, 0x732d, 0x7326, 0x7323, 0x7335, 0x730c, 0x742e, 0x742c, 0x7430, 0x742b, 0x7416, 0x741a, 0x7421, 0x742d, 0x7431, 0x7424, 0x7423, 0x741d, 0x7429, 0x7420, 0x7432, 0x74fb, 0x752f, 0x756f, 0x756c, 0x75e7, 0x75da, 0x75e1, 0x75e6, 0x75dd, 0x75df, 0x75e4, 0x75d7, 0x7695, 0x7692, 0x76da, 0x7746, 0x7747, 0x7744, 0x774d, 0x7745, 0x774a, 0x774e, 0x774b, 0x774c, 0x77de, 0x77ec, 0x7860, 0x7864, 0x7865, 0x785c, 0x786d, 0x7871, 0x786a, 0x786e, 0x7870, 0x7869, 0x7868, 0x785e, 0x7862, 0x7974, 0x7973, 0x7972, 0x7970, 0x7a02, 0x7a0a, 0x7a03, 0x7a0c, 0x7a04, 0x7a99, 0x7ae6, 0x7ae4, 0x7b4a, 0x7b3b, 0x7b44, 0x7b48, 0x7b4c, 0x7b4e, 0x7b40, 0x7b58, 0x7b45, 0x7ca2, 0x7c9e, 0x7ca8, 0x7ca1, 0x7d58, 0x7d6f, 0x7d63, 0x7d53, 0x7d56, 0x7d67, 0x7d6a, 0x7d4f, 0x7d6d, 0x7d5c, 0x7d6b, 0x7d52, 0x7d54, 0x7d69, 0x7d51, 0x7d5f, 0x7d4e, 0x7f3e, 0x7f3f, 0x7f65, /* 0xdb */ 0x7f66, 0x7fa2, 0x7fa0, 0x7fa1, 0x7fd7, 0x8051, 0x804f, 0x8050, 0x80fe, 0x80d4, 0x8143, 0x814a, 0x8152, 0x814f, 0x8147, 0x813d, 0x814d, 0x813a, 0x81e6, 0x81ee, 0x81f7, 0x81f8, 0x81f9, 0x8204, 0x823c, 0x823d, 0x823f, 0x8275, 0x833b, 0x83cf, 0x83f9, 0x8423, 0x83c0, 0x83e8, 0x8412, 0x83e7, 0x83e4, 0x83fc, 0x83f6, 0x8410, 0x83c6, 0x83c8, 0x83eb, 0x83e3, 0x83bf, 0x8401, 0x83dd, 0x83e5, 0x83d8, 0x83ff, 0x83e1, 0x83cb, 0x83ce, 0x83d6, 0x83f5, 0x83c9, 0x8409, 0x840f, 0x83de, 0x8411, 0x8406, 0x83c2, 0x83f3, 0x83d5, 0x83fa, 0x83c7, 0x83d1, 0x83ea, 0x8413, 0x83c3, 0x83ec, 0x83ee, 0x83c4, 0x83fb, 0x83d7, 0x83e2, 0x841b, 0x83db, 0x83fe, 0x86d8, 0x86e2, 0x86e6, 0x86d3, 0x86e3, 0x86da, 0x86ea, 0x86dd, 0x86eb, 0x86dc, 0x86ec, 0x86e9, 0x86d7, 0x86e8, 0x86d1, 0x8848, 0x8856, 0x8855, 0x88ba, 0x88d7, 0x88b9, 0x88b8, 0x88c0, 0x88be, 0x88b6, 0x88bc, 0x88b7, 0x88bd, 0x88b2, 0x8901, 0x88c9, 0x8995, 0x8998, 0x8997, 0x89dd, 0x89da, 0x89db, 0x8a4e, 0x8a4d, 0x8a39, 0x8a59, 0x8a40, 0x8a57, 0x8a58, 0x8a44, 0x8a45, 0x8a52, 0x8a48, 0x8a51, 0x8a4a, 0x8a4c, 0x8a4f, 0x8c5f, 0x8c81, 0x8c80, 0x8cba, 0x8cbe, 0x8cb0, 0x8cb9, 0x8cb5, 0x8d84, 0x8d80, 0x8d89, 0x8dd8, 0x8dd3, 0x8dcd, 0x8dc7, 0x8dd6, 0x8ddc, 0x8dcf, 0x8dd5, 0x8dd9, 0x8dc8, 0x8dd7, 0x8dc5, 0x8eef, 0x8ef7, 0x8efa, /* 0xdc */ 0x8ef9, 0x8ee6, 0x8eee, 0x8ee5, 0x8ef5, 0x8ee7, 0x8ee8, 0x8ef6, 0x8eeb, 0x8ef1, 0x8eec, 0x8ef4, 0x8ee9, 0x902d, 0x9034, 0x902f, 0x9106, 0x912c, 0x9104, 0x90ff, 0x90fc, 0x9108, 0x90f9, 0x90fb, 0x9101, 0x9100, 0x9107, 0x9105, 0x9103, 0x9161, 0x9164, 0x915f, 0x9162, 0x9160, 0x9201, 0x920a, 0x9225, 0x9203, 0x921a, 0x9226, 0x920f, 0x920c, 0x9200, 0x9212, 0x91ff, 0x91fd, 0x9206, 0x9204, 0x9227, 0x9202, 0x921c, 0x9224, 0x9219, 0x9217, 0x9205, 0x9216, 0x957b, 0x958d, 0x958c, 0x9590, 0x9687, 0x967e, 0x9688, 0x9689, 0x9683, 0x9680, 0x96c2, 0x96c8, 0x96c3, 0x96f1, 0x96f0, 0x976c, 0x9770, 0x976e, 0x9807, 0x98a9, 0x98eb, 0x9ce6, 0x9ef9, 0x4e83, 0x4e84, 0x4eb6, 0x50bd, 0x50bf, 0x50c6, 0x50ae, 0x50c4, 0x50ca, 0x50b4, 0x50c8, 0x50c2, 0x50b0, 0x50c1, 0x50ba, 0x50b1, 0x50cb, 0x50c9, 0x50b6, 0x50b8, 0x51d7, 0x527a, 0x5278, 0x527b, 0x527c, 0x55c3, 0x55db, 0x55cc, 0x55d0, 0x55cb, 0x55ca, 0x55dd, 0x55c0, 0x55d4, 0x55c4, 0x55e9, 0x55bf, 0x55d2, 0x558d, 0x55cf, 0x55d5, 0x55e2, 0x55d6, 0x55c8, 0x55f2, 0x55cd, 0x55d9, 0x55c2, 0x5714, 0x5853, 0x5868, 0x5864, 0x584f, 0x584d, 0x5849, 0x586f, 0x5855, 0x584e, 0x585d, 0x5859, 0x5865, 0x585b, 0x583d, 0x5863, 0x5871, 0x58fc, 0x5ac7, 0x5ac4, 0x5acb, 0x5aba, 0x5ab8, 0x5ab1, 0x5ab5, 0x5ab0, 0x5abf, 0x5ac8, 0x5abb, 0x5ac6, /* 0xdd */ 0x5ab7, 0x5ac0, 0x5aca, 0x5ab4, 0x5ab6, 0x5acd, 0x5ab9, 0x5a90, 0x5bd6, 0x5bd8, 0x5bd9, 0x5c1f, 0x5c33, 0x5d71, 0x5d63, 0x5d4a, 0x5d65, 0x5d72, 0x5d6c, 0x5d5e, 0x5d68, 0x5d67, 0x5d62, 0x5df0, 0x5e4f, 0x5e4e, 0x5e4a, 0x5e4d, 0x5e4b, 0x5ec5, 0x5ecc, 0x5ec6, 0x5ecb, 0x5ec7, 0x5f40, 0x5faf, 0x5fad, 0x60f7, 0x6149, 0x614a, 0x612b, 0x6145, 0x6136, 0x6132, 0x612e, 0x6146, 0x612f, 0x614f, 0x6129, 0x6140, 0x6220, 0x9168, 0x6223, 0x6225, 0x6224, 0x63c5, 0x63f1, 0x63eb, 0x6410, 0x6412, 0x6409, 0x6420, 0x6424, 0x6433, 0x6443, 0x641f, 0x6415, 0x6418, 0x6439, 0x6437, 0x6422, 0x6423, 0x640c, 0x6426, 0x6430, 0x6428, 0x6441, 0x6435, 0x642f, 0x640a, 0x641a, 0x6440, 0x6425, 0x6427, 0x640b, 0x63e7, 0x641b, 0x642e, 0x6421, 0x640e, 0x656f, 0x6592, 0x65d3, 0x6686, 0x668c, 0x6695, 0x6690, 0x668b, 0x668a, 0x6699, 0x6694, 0x6678, 0x6720, 0x6966, 0x695f, 0x6938, 0x694e, 0x6962, 0x6971, 0x693f, 0x6945, 0x696a, 0x6939, 0x6942, 0x6957, 0x6959, 0x697a, 0x6948, 0x6949, 0x6935, 0x696c, 0x6933, 0x693d, 0x6965, 0x68f0, 0x6978, 0x6934, 0x6969, 0x6940, 0x696f, 0x6944, 0x6976, 0x6958, 0x6941, 0x6974, 0x694c, 0x693b, 0x694b, 0x6937, 0x695c, 0x694f, 0x6951, 0x6932, 0x6952, 0x692f, 0x697b, 0x693c, 0x6b46, 0x6b45, 0x6b43, 0x6b42, 0x6b48, 0x6b41, 0x6b9b, 0xfa0d, 0x6bfb, 0x6bfc, /* 0xde */ 0x6bf9, 0x6bf7, 0x6bf8, 0x6e9b, 0x6ed6, 0x6ec8, 0x6e8f, 0x6ec0, 0x6e9f, 0x6e93, 0x6e94, 0x6ea0, 0x6eb1, 0x6eb9, 0x6ec6, 0x6ed2, 0x6ebd, 0x6ec1, 0x6e9e, 0x6ec9, 0x6eb7, 0x6eb0, 0x6ecd, 0x6ea6, 0x6ecf, 0x6eb2, 0x6ebe, 0x6ec3, 0x6edc, 0x6ed8, 0x6e99, 0x6e92, 0x6e8e, 0x6e8d, 0x6ea4, 0x6ea1, 0x6ebf, 0x6eb3, 0x6ed0, 0x6eca, 0x6e97, 0x6eae, 0x6ea3, 0x7147, 0x7154, 0x7152, 0x7163, 0x7160, 0x7141, 0x715d, 0x7162, 0x7172, 0x7178, 0x716a, 0x7161, 0x7142, 0x7158, 0x7143, 0x714b, 0x7170, 0x715f, 0x7150, 0x7153, 0x7144, 0x714d, 0x715a, 0x724f, 0x728d, 0x728c, 0x7291, 0x7290, 0x728e, 0x733c, 0x7342, 0x733b, 0x733a, 0x7340, 0x734a, 0x7349, 0x7444, 0x744a, 0x744b, 0x7452, 0x7451, 0x7457, 0x7440, 0x744f, 0x7450, 0x744e, 0x7442, 0x7446, 0x744d, 0x7454, 0x74e1, 0x74ff, 0x74fe, 0x74fd, 0x751d, 0x7579, 0x7577, 0x6983, 0x75ef, 0x760f, 0x7603, 0x75f7, 0x75fe, 0x75fc, 0x75f9, 0x75f8, 0x7610, 0x75fb, 0x75f6, 0x75ed, 0x75f5, 0x75fd, 0x7699, 0x76b5, 0x76dd, 0x7755, 0x775f, 0x7760, 0x7752, 0x7756, 0x775a, 0x7769, 0x7767, 0x7754, 0x7759, 0x776d, 0x77e0, 0x7887, 0x789a, 0x7894, 0x788f, 0x7884, 0x7895, 0x7885, 0x7886, 0x78a1, 0x7883, 0x7879, 0x7899, 0x7880, 0x7896, 0x787b, 0x797c, 0x7982, 0x797d, 0x7979, 0x7a11, 0x7a18, 0x7a19, 0x7a12, 0x7a17, 0x7a15, 0x7a22, 0x7a13, /* 0xdf */ 0x7a1b, 0x7a10, 0x7aa3, 0x7aa2, 0x7a9e, 0x7aeb, 0x7b66, 0x7b64, 0x7b6d, 0x7b74, 0x7b69, 0x7b72, 0x7b65, 0x7b73, 0x7b71, 0x7b70, 0x7b61, 0x7b78, 0x7b76, 0x7b63, 0x7cb2, 0x7cb4, 0x7caf, 0x7d88, 0x7d86, 0x7d80, 0x7d8d, 0x7d7f, 0x7d85, 0x7d7a, 0x7d8e, 0x7d7b, 0x7d83, 0x7d7c, 0x7d8c, 0x7d94, 0x7d84, 0x7d7d, 0x7d92, 0x7f6d, 0x7f6b, 0x7f67, 0x7f68, 0x7f6c, 0x7fa6, 0x7fa5, 0x7fa7, 0x7fdb, 0x7fdc, 0x8021, 0x8164, 0x8160, 0x8177, 0x815c, 0x8169, 0x815b, 0x8162, 0x8172, 0x6721, 0x815e, 0x8176, 0x8167, 0x816f, 0x8144, 0x8161, 0x821d, 0x8249, 0x8244, 0x8240, 0x8242, 0x8245, 0x84f1, 0x843f, 0x8456, 0x8476, 0x8479, 0x848f, 0x848d, 0x8465, 0x8451, 0x8440, 0x8486, 0x8467, 0x8430, 0x844d, 0x847d, 0x845a, 0x8459, 0x8474, 0x8473, 0x845d, 0x8507, 0x845e, 0x8437, 0x843a, 0x8434, 0x847a, 0x8443, 0x8478, 0x8432, 0x8445, 0x8429, 0x83d9, 0x844b, 0x842f, 0x8442, 0x842d, 0x845f, 0x8470, 0x8439, 0x844e, 0x844c, 0x8452, 0x846f, 0x84c5, 0x848e, 0x843b, 0x8447, 0x8436, 0x8433, 0x8468, 0x847e, 0x8444, 0x842b, 0x8460, 0x8454, 0x846e, 0x8450, 0x870b, 0x8704, 0x86f7, 0x870c, 0x86fa, 0x86d6, 0x86f5, 0x874d, 0x86f8, 0x870e, 0x8709, 0x8701, 0x86f6, 0x870d, 0x8705, 0x88d6, 0x88cb, 0x88cd, 0x88ce, 0x88de, 0x88db, 0x88da, 0x88cc, 0x88d0, 0x8985, 0x899b, 0x89df, 0x89e5, 0x89e4, /* 0xe0 */ 0x89e1, 0x89e0, 0x89e2, 0x89dc, 0x89e6, 0x8a76, 0x8a86, 0x8a7f, 0x8a61, 0x8a3f, 0x8a77, 0x8a82, 0x8a84, 0x8a75, 0x8a83, 0x8a81, 0x8a74, 0x8a7a, 0x8c3c, 0x8c4b, 0x8c4a, 0x8c65, 0x8c64, 0x8c66, 0x8c86, 0x8c84, 0x8c85, 0x8ccc, 0x8d68, 0x8d69, 0x8d91, 0x8d8c, 0x8d8e, 0x8d8f, 0x8d8d, 0x8d93, 0x8d94, 0x8d90, 0x8d92, 0x8df0, 0x8de0, 0x8dec, 0x8df1, 0x8dee, 0x8dd0, 0x8de9, 0x8de3, 0x8de2, 0x8de7, 0x8df2, 0x8deb, 0x8df4, 0x8f06, 0x8eff, 0x8f01, 0x8f00, 0x8f05, 0x8f07, 0x8f08, 0x8f02, 0x8f0b, 0x9052, 0x903f, 0x9044, 0x9049, 0x903d, 0x9110, 0x910d, 0x910f, 0x9111, 0x9116, 0x9114, 0x910b, 0x910e, 0x916e, 0x916f, 0x9248, 0x9252, 0x9230, 0x923a, 0x9266, 0x9233, 0x9265, 0x925e, 0x9283, 0x922e, 0x924a, 0x9246, 0x926d, 0x926c, 0x924f, 0x9260, 0x9267, 0x926f, 0x9236, 0x9261, 0x9270, 0x9231, 0x9254, 0x9263, 0x9250, 0x9272, 0x924e, 0x9253, 0x924c, 0x9256, 0x9232, 0x959f, 0x959c, 0x959e, 0x959b, 0x9692, 0x9693, 0x9691, 0x9697, 0x96ce, 0x96fa, 0x96fd, 0x96f8, 0x96f5, 0x9773, 0x9777, 0x9778, 0x9772, 0x980f, 0x980d, 0x980e, 0x98ac, 0x98f6, 0x98f9, 0x99af, 0x99b2, 0x99b0, 0x99b5, 0x9aad, 0x9aab, 0x9b5b, 0x9cea, 0x9ced, 0x9ce7, 0x9e80, 0x9efd, 0x50e6, 0x50d4, 0x50d7, 0x50e8, 0x50f3, 0x50db, 0x50ea, 0x50dd, 0x50e4, 0x50d3, 0x50ec, 0x50f0, 0x50ef, 0x50e3, 0x50e0, /* 0xe1 */ 0x51d8, 0x5280, 0x5281, 0x52e9, 0x52eb, 0x5330, 0x53ac, 0x5627, 0x5615, 0x560c, 0x5612, 0x55fc, 0x560f, 0x561c, 0x5601, 0x5613, 0x5602, 0x55fa, 0x561d, 0x5604, 0x55ff, 0x55f9, 0x5889, 0x587c, 0x5890, 0x5898, 0x5886, 0x5881, 0x587f, 0x5874, 0x588b, 0x587a, 0x5887, 0x5891, 0x588e, 0x5876, 0x5882, 0x5888, 0x587b, 0x5894, 0x588f, 0x58fe, 0x596b, 0x5adc, 0x5aee, 0x5ae5, 0x5ad5, 0x5aea, 0x5ada, 0x5aed, 0x5aeb, 0x5af3, 0x5ae2, 0x5ae0, 0x5adb, 0x5aec, 0x5ade, 0x5add, 0x5ad9, 0x5ae8, 0x5adf, 0x5b77, 0x5be0, 0x5be3, 0x5c63, 0x5d82, 0x5d80, 0x5d7d, 0x5d86, 0x5d7a, 0x5d81, 0x5d77, 0x5d8a, 0x5d89, 0x5d88, 0x5d7e, 0x5d7c, 0x5d8d, 0x5d79, 0x5d7f, 0x5e58, 0x5e59, 0x5e53, 0x5ed8, 0x5ed1, 0x5ed7, 0x5ece, 0x5edc, 0x5ed5, 0x5ed9, 0x5ed2, 0x5ed4, 0x5f44, 0x5f43, 0x5f6f, 0x5fb6, 0x612c, 0x6128, 0x6141, 0x615e, 0x6171, 0x6173, 0x6152, 0x6153, 0x6172, 0x616c, 0x6180, 0x6174, 0x6154, 0x617a, 0x615b, 0x6165, 0x613b, 0x616a, 0x6161, 0x6156, 0x6229, 0x6227, 0x622b, 0x642b, 0x644d, 0x645b, 0x645d, 0x6474, 0x6476, 0x6472, 0x6473, 0x647d, 0x6475, 0x6466, 0x64a6, 0x644e, 0x6482, 0x645e, 0x645c, 0x644b, 0x6453, 0x6460, 0x6450, 0x647f, 0x643f, 0x646c, 0x646b, 0x6459, 0x6465, 0x6477, 0x6573, 0x65a0, 0x66a1, 0x66a0, 0x669f, 0x6705, 0x6704, 0x6722, 0x69b1, 0x69b6, 0x69c9, /* 0xe2 */ 0x69a0, 0x69ce, 0x6996, 0x69b0, 0x69ac, 0x69bc, 0x6991, 0x6999, 0x698e, 0x69a7, 0x698d, 0x69a9, 0x69be, 0x69af, 0x69bf, 0x69c4, 0x69bd, 0x69a4, 0x69d4, 0x69b9, 0x69ca, 0x699a, 0x69cf, 0x69b3, 0x6993, 0x69aa, 0x69a1, 0x699e, 0x69d9, 0x6997, 0x6990, 0x69c2, 0x69b5, 0x69a5, 0x69c6, 0x6b4a, 0x6b4d, 0x6b4b, 0x6b9e, 0x6b9f, 0x6ba0, 0x6bc3, 0x6bc4, 0x6bfe, 0x6ece, 0x6ef5, 0x6ef1, 0x6f03, 0x6f25, 0x6ef8, 0x6f37, 0x6efb, 0x6f2e, 0x6f09, 0x6f4e, 0x6f19, 0x6f1a, 0x6f27, 0x6f18, 0x6f3b, 0x6f12, 0x6eed, 0x6f0a, 0x6f36, 0x6f73, 0x6ef9, 0x6eee, 0x6f2d, 0x6f40, 0x6f30, 0x6f3c, 0x6f35, 0x6eeb, 0x6f07, 0x6f0e, 0x6f43, 0x6f05, 0x6efd, 0x6ef6, 0x6f39, 0x6f1c, 0x6efc, 0x6f3a, 0x6f1f, 0x6f0d, 0x6f1e, 0x6f08, 0x6f21, 0x7187, 0x7190, 0x7189, 0x7180, 0x7185, 0x7182, 0x718f, 0x717b, 0x7186, 0x7181, 0x7197, 0x7244, 0x7253, 0x7297, 0x7295, 0x7293, 0x7343, 0x734d, 0x7351, 0x734c, 0x7462, 0x7473, 0x7471, 0x7475, 0x7472, 0x7467, 0x746e, 0x7500, 0x7502, 0x7503, 0x757d, 0x7590, 0x7616, 0x7608, 0x760c, 0x7615, 0x7611, 0x760a, 0x7614, 0x76b8, 0x7781, 0x777c, 0x7785, 0x7782, 0x776e, 0x7780, 0x776f, 0x777e, 0x7783, 0x78b2, 0x78aa, 0x78b4, 0x78ad, 0x78a8, 0x787e, 0x78ab, 0x789e, 0x78a5, 0x78a0, 0x78ac, 0x78a2, 0x78a4, 0x7998, 0x798a, 0x798b, 0x7996, 0x7995, 0x7994, 0x7993, /* 0xe3 */ 0x7997, 0x7988, 0x7992, 0x7990, 0x7a2b, 0x7a4a, 0x7a30, 0x7a2f, 0x7a28, 0x7a26, 0x7aa8, 0x7aab, 0x7aac, 0x7aee, 0x7b88, 0x7b9c, 0x7b8a, 0x7b91, 0x7b90, 0x7b96, 0x7b8d, 0x7b8c, 0x7b9b, 0x7b8e, 0x7b85, 0x7b98, 0x5284, 0x7b99, 0x7ba4, 0x7b82, 0x7cbb, 0x7cbf, 0x7cbc, 0x7cba, 0x7da7, 0x7db7, 0x7dc2, 0x7da3, 0x7daa, 0x7dc1, 0x7dc0, 0x7dc5, 0x7d9d, 0x7dce, 0x7dc4, 0x7dc6, 0x7dcb, 0x7dcc, 0x7daf, 0x7db9, 0x7d96, 0x7dbc, 0x7d9f, 0x7da6, 0x7dae, 0x7da9, 0x7da1, 0x7dc9, 0x7f73, 0x7fe2, 0x7fe3, 0x7fe5, 0x7fde, 0x8024, 0x805d, 0x805c, 0x8189, 0x8186, 0x8183, 0x8187, 0x818d, 0x818c, 0x818b, 0x8215, 0x8497, 0x84a4, 0x84a1, 0x849f, 0x84ba, 0x84ce, 0x84c2, 0x84ac, 0x84ae, 0x84ab, 0x84b9, 0x84b4, 0x84c1, 0x84cd, 0x84aa, 0x849a, 0x84b1, 0x84d0, 0x849d, 0x84a7, 0x84bb, 0x84a2, 0x8494, 0x84c7, 0x84cc, 0x849b, 0x84a9, 0x84af, 0x84a8, 0x84d6, 0x8498, 0x84b6, 0x84cf, 0x84a0, 0x84d7, 0x84d4, 0x84d2, 0x84db, 0x84b0, 0x8491, 0x8661, 0x8733, 0x8723, 0x8728, 0x876b, 0x8740, 0x872e, 0x871e, 0x8721, 0x8719, 0x871b, 0x8743, 0x872c, 0x8741, 0x873e, 0x8746, 0x8720, 0x8732, 0x872a, 0x872d, 0x873c, 0x8712, 0x873a, 0x8731, 0x8735, 0x8742, 0x8726, 0x8727, 0x8738, 0x8724, 0x871a, 0x8730, 0x8711, 0x88f7, 0x88e7, 0x88f1, 0x88f2, 0x88fa, 0x88fe, 0x88ee, 0x88fc, 0x88f6, 0x88fb, /* 0xe4 */ 0x88f0, 0x88ec, 0x88eb, 0x899d, 0x89a1, 0x899f, 0x899e, 0x89e9, 0x89eb, 0x89e8, 0x8aab, 0x8a99, 0x8a8b, 0x8a92, 0x8a8f, 0x8a96, 0x8c3d, 0x8c68, 0x8c69, 0x8cd5, 0x8ccf, 0x8cd7, 0x8d96, 0x8e09, 0x8e02, 0x8dff, 0x8e0d, 0x8dfd, 0x8e0a, 0x8e03, 0x8e07, 0x8e06, 0x8e05, 0x8dfe, 0x8e00, 0x8e04, 0x8f10, 0x8f11, 0x8f0e, 0x8f0d, 0x9123, 0x911c, 0x9120, 0x9122, 0x911f, 0x911d, 0x911a, 0x9124, 0x9121, 0x911b, 0x917a, 0x9172, 0x9179, 0x9173, 0x92a5, 0x92a4, 0x9276, 0x929b, 0x927a, 0x92a0, 0x9294, 0x92aa, 0x928d, 0x92a6, 0x929a, 0x92ab, 0x9279, 0x9297, 0x927f, 0x92a3, 0x92ee, 0x928e, 0x9282, 0x9295, 0x92a2, 0x927d, 0x9288, 0x92a1, 0x928a, 0x9286, 0x928c, 0x9299, 0x92a7, 0x927e, 0x9287, 0x92a9, 0x929d, 0x928b, 0x922d, 0x969e, 0x96a1, 0x96ff, 0x9758, 0x977d, 0x977a, 0x977e, 0x9783, 0x9780, 0x9782, 0x977b, 0x9784, 0x9781, 0x977f, 0x97ce, 0x97cd, 0x9816, 0x98ad, 0x98ae, 0x9902, 0x9900, 0x9907, 0x999d, 0x999c, 0x99c3, 0x99b9, 0x99bb, 0x99ba, 0x99c2, 0x99bd, 0x99c7, 0x9ab1, 0x9ae3, 0x9ae7, 0x9b3e, 0x9b3f, 0x9b60, 0x9b61, 0x9b5f, 0x9cf1, 0x9cf2, 0x9cf5, 0x9ea7, 0x50ff, 0x5103, 0x5130, 0x50f8, 0x5106, 0x5107, 0x50f6, 0x50fe, 0x510b, 0x510c, 0x50fd, 0x510a, 0x528b, 0x528c, 0x52f1, 0x52ef, 0x5648, 0x5642, 0x564c, 0x5635, 0x5641, 0x564a, 0x5649, 0x5646, 0x5658, /* 0xe5 */ 0x565a, 0x5640, 0x5633, 0x563d, 0x562c, 0x563e, 0x5638, 0x562a, 0x563a, 0x571a, 0x58ab, 0x589d, 0x58b1, 0x58a0, 0x58a3, 0x58af, 0x58ac, 0x58a5, 0x58a1, 0x58ff, 0x5aff, 0x5af4, 0x5afd, 0x5af7, 0x5af6, 0x5b03, 0x5af8, 0x5b02, 0x5af9, 0x5b01, 0x5b07, 0x5b05, 0x5b0f, 0x5c67, 0x5d99, 0x5d97, 0x5d9f, 0x5d92, 0x5da2, 0x5d93, 0x5d95, 0x5da0, 0x5d9c, 0x5da1, 0x5d9a, 0x5d9e, 0x5e69, 0x5e5d, 0x5e60, 0x5e5c, 0x7df3, 0x5edb, 0x5ede, 0x5ee1, 0x5f49, 0x5fb2, 0x618b, 0x6183, 0x6179, 0x61b1, 0x61b0, 0x61a2, 0x6189, 0x619b, 0x6193, 0x61af, 0x61ad, 0x619f, 0x6192, 0x61aa, 0x61a1, 0x618d, 0x6166, 0x61b3, 0x622d, 0x646e, 0x6470, 0x6496, 0x64a0, 0x6485, 0x6497, 0x649c, 0x648f, 0x648b, 0x648a, 0x648c, 0x64a3, 0x649f, 0x6468, 0x64b1, 0x6498, 0x6576, 0x657a, 0x6579, 0x657b, 0x65b2, 0x65b3, 0x66b5, 0x66b0, 0x66a9, 0x66b2, 0x66b7, 0x66aa, 0x66af, 0x6a00, 0x6a06, 0x6a17, 0x69e5, 0x69f8, 0x6a15, 0x69f1, 0x69e4, 0x6a20, 0x69ff, 0x69ec, 0x69e2, 0x6a1b, 0x6a1d, 0x69fe, 0x6a27, 0x69f2, 0x69ee, 0x6a14, 0x69f7, 0x69e7, 0x6a40, 0x6a08, 0x69e6, 0x69fb, 0x6a0d, 0x69fc, 0x69eb, 0x6a09, 0x6a04, 0x6a18, 0x6a25, 0x6a0f, 0x69f6, 0x6a26, 0x6a07, 0x69f4, 0x6a16, 0x6b51, 0x6ba5, 0x6ba3, 0x6ba2, 0x6ba6, 0x6c01, 0x6c00, 0x6bff, 0x6c02, 0x6f41, 0x6f26, 0x6f7e, 0x6f87, 0x6fc6, 0x6f92, /* 0xe6 */ 0x6f8d, 0x6f89, 0x6f8c, 0x6f62, 0x6f4f, 0x6f85, 0x6f5a, 0x6f96, 0x6f76, 0x6f6c, 0x6f82, 0x6f55, 0x6f72, 0x6f52, 0x6f50, 0x6f57, 0x6f94, 0x6f93, 0x6f5d, 0x6f00, 0x6f61, 0x6f6b, 0x6f7d, 0x6f67, 0x6f90, 0x6f53, 0x6f8b, 0x6f69, 0x6f7f, 0x6f95, 0x6f63, 0x6f77, 0x6f6a, 0x6f7b, 0x71b2, 0x71af, 0x719b, 0x71b0, 0x71a0, 0x719a, 0x71a9, 0x71b5, 0x719d, 0x71a5, 0x719e, 0x71a4, 0x71a1, 0x71aa, 0x719c, 0x71a7, 0x71b3, 0x7298, 0x729a, 0x7358, 0x7352, 0x735e, 0x735f, 0x7360, 0x735d, 0x735b, 0x7361, 0x735a, 0x7359, 0x7362, 0x7487, 0x7489, 0x748a, 0x7486, 0x7481, 0x747d, 0x7485, 0x7488, 0x747c, 0x7479, 0x7508, 0x7507, 0x757e, 0x7625, 0x761e, 0x7619, 0x761d, 0x761c, 0x7623, 0x761a, 0x7628, 0x761b, 0x769c, 0x769d, 0x769e, 0x769b, 0x778d, 0x778f, 0x7789, 0x7788, 0x78cd, 0x78bb, 0x78cf, 0x78cc, 0x78d1, 0x78ce, 0x78d4, 0x78c8, 0x78c3, 0x78c4, 0x78c9, 0x799a, 0x79a1, 0x79a0, 0x799c, 0x79a2, 0x799b, 0x6b76, 0x7a39, 0x7ab2, 0x7ab4, 0x7ab3, 0x7bb7, 0x7bcb, 0x7bbe, 0x7bac, 0x7bce, 0x7baf, 0x7bb9, 0x7bca, 0x7bb5, 0x7cc5, 0x7cc8, 0x7ccc, 0x7ccb, 0x7df7, 0x7ddb, 0x7dea, 0x7de7, 0x7dd7, 0x7de1, 0x7e03, 0x7dfa, 0x7de6, 0x7df6, 0x7df1, 0x7df0, 0x7dee, 0x7ddf, 0x7f76, 0x7fac, 0x7fb0, 0x7fad, 0x7fed, 0x7feb, 0x7fea, 0x7fec, 0x7fe6, 0x7fe8, 0x8064, 0x8067, 0x81a3, 0x819f, /* 0xe7 */ 0x819e, 0x8195, 0x81a2, 0x8199, 0x8197, 0x8216, 0x824f, 0x8253, 0x8252, 0x8250, 0x824e, 0x8251, 0x8524, 0x853b, 0x850f, 0x8500, 0x8529, 0x850e, 0x8509, 0x850d, 0x851f, 0x850a, 0x8527, 0x851c, 0x84fb, 0x852b, 0x84fa, 0x8508, 0x850c, 0x84f4, 0x852a, 0x84f2, 0x8515, 0x84f7, 0x84eb, 0x84f3, 0x84fc, 0x8512, 0x84ea, 0x84e9, 0x8516, 0x84fe, 0x8528, 0x851d, 0x852e, 0x8502, 0x84fd, 0x851e, 0x84f6, 0x8531, 0x8526, 0x84e7, 0x84e8, 0x84f0, 0x84ef, 0x84f9, 0x8518, 0x8520, 0x8530, 0x850b, 0x8519, 0x852f, 0x8662, 0x8756, 0x8763, 0x8764, 0x8777, 0x87e1, 0x8773, 0x8758, 0x8754, 0x875b, 0x8752, 0x8761, 0x875a, 0x8751, 0x875e, 0x876d, 0x876a, 0x8750, 0x874e, 0x875f, 0x875d, 0x876f, 0x876c, 0x877a, 0x876e, 0x875c, 0x8765, 0x874f, 0x877b, 0x8775, 0x8762, 0x8767, 0x8769, 0x885a, 0x8905, 0x890c, 0x8914, 0x890b, 0x8917, 0x8918, 0x8919, 0x8906, 0x8916, 0x8911, 0x890e, 0x8909, 0x89a2, 0x89a4, 0x89a3, 0x89ed, 0x89f0, 0x89ec, 0x8acf, 0x8ac6, 0x8ab8, 0x8ad3, 0x8ad1, 0x8ad4, 0x8ad5, 0x8abb, 0x8ad7, 0x8abe, 0x8ac0, 0x8ac5, 0x8ad8, 0x8ac3, 0x8aba, 0x8abd, 0x8ad9, 0x8c3e, 0x8c4d, 0x8c8f, 0x8ce5, 0x8cdf, 0x8cd9, 0x8ce8, 0x8cda, 0x8cdd, 0x8ce7, 0x8da0, 0x8d9c, 0x8da1, 0x8d9b, 0x8e20, 0x8e23, 0x8e25, 0x8e24, 0x8e2e, 0x8e15, 0x8e1b, 0x8e16, 0x8e11, 0x8e19, 0x8e26, 0x8e27, /* 0xe8 */ 0x8e14, 0x8e12, 0x8e18, 0x8e13, 0x8e1c, 0x8e17, 0x8e1a, 0x8f2c, 0x8f24, 0x8f18, 0x8f1a, 0x8f20, 0x8f23, 0x8f16, 0x8f17, 0x9073, 0x9070, 0x906f, 0x9067, 0x906b, 0x912f, 0x912b, 0x9129, 0x912a, 0x9132, 0x9126, 0x912e, 0x9185, 0x9186, 0x918a, 0x9181, 0x9182, 0x9184, 0x9180, 0x92d0, 0x92c3, 0x92c4, 0x92c0, 0x92d9, 0x92b6, 0x92cf, 0x92f1, 0x92df, 0x92d8, 0x92e9, 0x92d7, 0x92dd, 0x92cc, 0x92ef, 0x92c2, 0x92e8, 0x92ca, 0x92c8, 0x92ce, 0x92e6, 0x92cd, 0x92d5, 0x92c9, 0x92e0, 0x92de, 0x92e7, 0x92d1, 0x92d3, 0x92b5, 0x92e1, 0x92c6, 0x92b4, 0x957c, 0x95ac, 0x95ab, 0x95ae, 0x95b0, 0x96a4, 0x96a2, 0x96d3, 0x9705, 0x9708, 0x9702, 0x975a, 0x978a, 0x978e, 0x9788, 0x97d0, 0x97cf, 0x981e, 0x981d, 0x9826, 0x9829, 0x9828, 0x9820, 0x981b, 0x9827, 0x98b2, 0x9908, 0x98fa, 0x9911, 0x9914, 0x9916, 0x9917, 0x9915, 0x99dc, 0x99cd, 0x99cf, 0x99d3, 0x99d4, 0x99ce, 0x99c9, 0x99d6, 0x99d8, 0x99cb, 0x99d7, 0x99cc, 0x9ab3, 0x9aec, 0x9aeb, 0x9af3, 0x9af2, 0x9af1, 0x9b46, 0x9b43, 0x9b67, 0x9b74, 0x9b71, 0x9b66, 0x9b76, 0x9b75, 0x9b70, 0x9b68, 0x9b64, 0x9b6c, 0x9cfc, 0x9cfa, 0x9cfd, 0x9cff, 0x9cf7, 0x9d07, 0x9d00, 0x9cf9, 0x9cfb, 0x9d08, 0x9d05, 0x9d04, 0x9e83, 0x9ed3, 0x9f0f, 0x9f10, 0x511c, 0x5113, 0x5117, 0x511a, 0x5111, 0x51de, 0x5334, 0x53e1, 0x5670, 0x5660, 0x566e, /* 0xe9 */ 0x5673, 0x5666, 0x5663, 0x566d, 0x5672, 0x565e, 0x5677, 0x571c, 0x571b, 0x58c8, 0x58bd, 0x58c9, 0x58bf, 0x58ba, 0x58c2, 0x58bc, 0x58c6, 0x5b17, 0x5b19, 0x5b1b, 0x5b21, 0x5b14, 0x5b13, 0x5b10, 0x5b16, 0x5b28, 0x5b1a, 0x5b20, 0x5b1e, 0x5bef, 0x5dac, 0x5db1, 0x5da9, 0x5da7, 0x5db5, 0x5db0, 0x5dae, 0x5daa, 0x5da8, 0x5db2, 0x5dad, 0x5daf, 0x5db4, 0x5e67, 0x5e68, 0x5e66, 0x5e6f, 0x5ee9, 0x5ee7, 0x5ee6, 0x5ee8, 0x5ee5, 0x5f4b, 0x5fbc, 0x619d, 0x61a8, 0x6196, 0x61c5, 0x61b4, 0x61c6, 0x61c1, 0x61cc, 0x61ba, 0x61bf, 0x61b8, 0x618c, 0x64d7, 0x64d6, 0x64d0, 0x64cf, 0x64c9, 0x64bd, 0x6489, 0x64c3, 0x64db, 0x64f3, 0x64d9, 0x6533, 0x657f, 0x657c, 0x65a2, 0x66c8, 0x66be, 0x66c0, 0x66ca, 0x66cb, 0x66cf, 0x66bd, 0x66bb, 0x66ba, 0x66cc, 0x6723, 0x6a34, 0x6a66, 0x6a49, 0x6a67, 0x6a32, 0x6a68, 0x6a3e, 0x6a5d, 0x6a6d, 0x6a76, 0x6a5b, 0x6a51, 0x6a28, 0x6a5a, 0x6a3b, 0x6a3f, 0x6a41, 0x6a6a, 0x6a64, 0x6a50, 0x6a4f, 0x6a54, 0x6a6f, 0x6a69, 0x6a60, 0x6a3c, 0x6a5e, 0x6a56, 0x6a55, 0x6a4d, 0x6a4e, 0x6a46, 0x6b55, 0x6b54, 0x6b56, 0x6ba7, 0x6baa, 0x6bab, 0x6bc8, 0x6bc7, 0x6c04, 0x6c03, 0x6c06, 0x6fad, 0x6fcb, 0x6fa3, 0x6fc7, 0x6fbc, 0x6fce, 0x6fc8, 0x6f5e, 0x6fc4, 0x6fbd, 0x6f9e, 0x6fca, 0x6fa8, 0x7004, 0x6fa5, 0x6fae, 0x6fba, 0x6fac, 0x6faa, 0x6fcf, 0x6fbf, 0x6fb8, /* 0xea */ 0x6fa2, 0x6fc9, 0x6fab, 0x6fcd, 0x6faf, 0x6fb2, 0x6fb0, 0x71c5, 0x71c2, 0x71bf, 0x71b8, 0x71d6, 0x71c0, 0x71c1, 0x71cb, 0x71d4, 0x71ca, 0x71c7, 0x71cf, 0x71bd, 0x71d8, 0x71bc, 0x71c6, 0x71da, 0x71db, 0x729d, 0x729e, 0x7369, 0x7366, 0x7367, 0x736c, 0x7365, 0x736b, 0x736a, 0x747f, 0x749a, 0x74a0, 0x7494, 0x7492, 0x7495, 0x74a1, 0x750b, 0x7580, 0x762f, 0x762d, 0x7631, 0x763d, 0x7633, 0x763c, 0x7635, 0x7632, 0x7630, 0x76bb, 0x76e6, 0x779a, 0x779d, 0x77a1, 0x779c, 0x779b, 0x77a2, 0x77a3, 0x7795, 0x7799, 0x7797, 0x78dd, 0x78e9, 0x78e5, 0x78ea, 0x78de, 0x78e3, 0x78db, 0x78e1, 0x78e2, 0x78ed, 0x78df, 0x78e0, 0x79a4, 0x7a44, 0x7a48, 0x7a47, 0x7ab6, 0x7ab8, 0x7ab5, 0x7ab1, 0x7ab7, 0x7bde, 0x7be3, 0x7be7, 0x7bdd, 0x7bd5, 0x7be5, 0x7bda, 0x7be8, 0x7bf9, 0x7bd4, 0x7bea, 0x7be2, 0x7bdc, 0x7beb, 0x7bd8, 0x7bdf, 0x7cd2, 0x7cd4, 0x7cd7, 0x7cd0, 0x7cd1, 0x7e12, 0x7e21, 0x7e17, 0x7e0c, 0x7e1f, 0x7e20, 0x7e13, 0x7e0e, 0x7e1c, 0x7e15, 0x7e1a, 0x7e22, 0x7e0b, 0x7e0f, 0x7e16, 0x7e0d, 0x7e14, 0x7e25, 0x7e24, 0x7f43, 0x7f7b, 0x7f7c, 0x7f7a, 0x7fb1, 0x7fef, 0x802a, 0x8029, 0x806c, 0x81b1, 0x81a6, 0x81ae, 0x81b9, 0x81b5, 0x81ab, 0x81b0, 0x81ac, 0x81b4, 0x81b2, 0x81b7, 0x81a7, 0x81f2, 0x8255, 0x8256, 0x8257, 0x8556, 0x8545, 0x856b, 0x854d, 0x8553, 0x8561, 0x8558, /* 0xeb */ 0x8540, 0x8546, 0x8564, 0x8541, 0x8562, 0x8544, 0x8551, 0x8547, 0x8563, 0x853e, 0x855b, 0x8571, 0x854e, 0x856e, 0x8575, 0x8555, 0x8567, 0x8560, 0x858c, 0x8566, 0x855d, 0x8554, 0x8565, 0x856c, 0x8663, 0x8665, 0x8664, 0x879b, 0x878f, 0x8797, 0x8793, 0x8792, 0x8788, 0x8781, 0x8796, 0x8798, 0x8779, 0x8787, 0x87a3, 0x8785, 0x8790, 0x8791, 0x879d, 0x8784, 0x8794, 0x879c, 0x879a, 0x8789, 0x891e, 0x8926, 0x8930, 0x892d, 0x892e, 0x8927, 0x8931, 0x8922, 0x8929, 0x8923, 0x892f, 0x892c, 0x891f, 0x89f1, 0x8ae0, 0x8ae2, 0x8af2, 0x8af4, 0x8af5, 0x8add, 0x8b14, 0x8ae4, 0x8adf, 0x8af0, 0x8ac8, 0x8ade, 0x8ae1, 0x8ae8, 0x8aff, 0x8aef, 0x8afb, 0x8c91, 0x8c92, 0x8c90, 0x8cf5, 0x8cee, 0x8cf1, 0x8cf0, 0x8cf3, 0x8d6c, 0x8d6e, 0x8da5, 0x8da7, 0x8e33, 0x8e3e, 0x8e38, 0x8e40, 0x8e45, 0x8e36, 0x8e3c, 0x8e3d, 0x8e41, 0x8e30, 0x8e3f, 0x8ebd, 0x8f36, 0x8f2e, 0x8f35, 0x8f32, 0x8f39, 0x8f37, 0x8f34, 0x9076, 0x9079, 0x907b, 0x9086, 0x90fa, 0x9133, 0x9135, 0x9136, 0x9193, 0x9190, 0x9191, 0x918d, 0x918f, 0x9327, 0x931e, 0x9308, 0x931f, 0x9306, 0x930f, 0x937a, 0x9338, 0x933c, 0x931b, 0x9323, 0x9312, 0x9301, 0x9346, 0x932d, 0x930e, 0x930d, 0x92cb, 0x931d, 0x92fa, 0x9325, 0x9313, 0x92f9, 0x92f7, 0x9334, 0x9302, 0x9324, 0x92ff, 0x9329, 0x9339, 0x9335, 0x932a, 0x9314, 0x930c, /* 0xec */ 0x930b, 0x92fe, 0x9309, 0x9300, 0x92fb, 0x9316, 0x95bc, 0x95cd, 0x95be, 0x95b9, 0x95ba, 0x95b6, 0x95bf, 0x95b5, 0x95bd, 0x96a9, 0x96d4, 0x970b, 0x9712, 0x9710, 0x9799, 0x9797, 0x9794, 0x97f0, 0x97f8, 0x9835, 0x982f, 0x9832, 0x9924, 0x991f, 0x9927, 0x9929, 0x999e, 0x99ee, 0x99ec, 0x99e5, 0x99e4, 0x99f0, 0x99e3, 0x99ea, 0x99e9, 0x99e7, 0x9ab9, 0x9abf, 0x9ab4, 0x9abb, 0x9af6, 0x9afa, 0x9af9, 0x9af7, 0x9b33, 0x9b80, 0x9b85, 0x9b87, 0x9b7c, 0x9b7e, 0x9b7b, 0x9b82, 0x9b93, 0x9b92, 0x9b90, 0x9b7a, 0x9b95, 0x9b7d, 0x9b88, 0x9d25, 0x9d17, 0x9d20, 0x9d1e, 0x9d14, 0x9d29, 0x9d1d, 0x9d18, 0x9d22, 0x9d10, 0x9d19, 0x9d1f, 0x9e88, 0x9e86, 0x9e87, 0x9eae, 0x9ead, 0x9ed5, 0x9ed6, 0x9efa, 0x9f12, 0x9f3d, 0x5126, 0x5125, 0x5122, 0x5124, 0x5120, 0x5129, 0x52f4, 0x5693, 0x568c, 0x568d, 0x5686, 0x5684, 0x5683, 0x567e, 0x5682, 0x567f, 0x5681, 0x58d6, 0x58d4, 0x58cf, 0x58d2, 0x5b2d, 0x5b25, 0x5b32, 0x5b23, 0x5b2c, 0x5b27, 0x5b26, 0x5b2f, 0x5b2e, 0x5b7b, 0x5bf1, 0x5bf2, 0x5db7, 0x5e6c, 0x5e6a, 0x5fbe, 0x5fbb, 0x61c3, 0x61b5, 0x61bc, 0x61e7, 0x61e0, 0x61e5, 0x61e4, 0x61e8, 0x61de, 0x64ef, 0x64e9, 0x64e3, 0x64eb, 0x64e4, 0x64e8, 0x6581, 0x6580, 0x65b6, 0x65da, 0x66d2, 0x6a8d, 0x6a96, 0x6a81, 0x6aa5, 0x6a89, 0x6a9f, 0x6a9b, 0x6aa1, 0x6a9e, 0x6a87, 0x6a93, 0x6a8e, /* 0xed */ 0x6a95, 0x6a83, 0x6aa8, 0x6aa4, 0x6a91, 0x6a7f, 0x6aa6, 0x6a9a, 0x6a85, 0x6a8c, 0x6a92, 0x6b5b, 0x6bad, 0x6c09, 0x6fcc, 0x6fa9, 0x6ff4, 0x6fd4, 0x6fe3, 0x6fdc, 0x6fed, 0x6fe7, 0x6fe6, 0x6fde, 0x6ff2, 0x6fdd, 0x6fe2, 0x6fe8, 0x71e1, 0x71f1, 0x71e8, 0x71f2, 0x71e4, 0x71f0, 0x71e2, 0x7373, 0x736e, 0x736f, 0x7497, 0x74b2, 0x74ab, 0x7490, 0x74aa, 0x74ad, 0x74b1, 0x74a5, 0x74af, 0x7510, 0x7511, 0x7512, 0x750f, 0x7584, 0x7643, 0x7648, 0x7649, 0x7647, 0x76a4, 0x76e9, 0x77b5, 0x77ab, 0x77b2, 0x77b7, 0x77b6, 0x77b4, 0x77b1, 0x77a8, 0x77f0, 0x78f3, 0x78fd, 0x7902, 0x78fb, 0x78fc, 0x78f2, 0x7905, 0x78f9, 0x78fe, 0x7904, 0x79ab, 0x79a8, 0x7a5c, 0x7a5b, 0x7a56, 0x7a58, 0x7a54, 0x7a5a, 0x7abe, 0x7ac0, 0x7ac1, 0x7c05, 0x7c0f, 0x7bf2, 0x7c00, 0x7bff, 0x7bfb, 0x7c0e, 0x7bf4, 0x7c0b, 0x7bf3, 0x7c02, 0x7c09, 0x7c03, 0x7c01, 0x7bf8, 0x7bfd, 0x7c06, 0x7bf0, 0x7bf1, 0x7c10, 0x7c0a, 0x7ce8, 0x7e2d, 0x7e3c, 0x7e42, 0x7e33, 0x9848, 0x7e38, 0x7e2a, 0x7e49, 0x7e40, 0x7e47, 0x7e29, 0x7e4c, 0x7e30, 0x7e3b, 0x7e36, 0x7e44, 0x7e3a, 0x7f45, 0x7f7f, 0x7f7e, 0x7f7d, 0x7ff4, 0x7ff2, 0x802c, 0x81bb, 0x81c4, 0x81cc, 0x81ca, 0x81c5, 0x81c7, 0x81bc, 0x81e9, 0x825b, 0x825a, 0x825c, 0x8583, 0x8580, 0x858f, 0x85a7, 0x8595, 0x85a0, 0x858b, 0x85a3, 0x857b, 0x85a4, 0x859a, 0x859e, /* 0xee */ 0x8577, 0x857c, 0x8589, 0x85a1, 0x857a, 0x8578, 0x8557, 0x858e, 0x8596, 0x8586, 0x858d, 0x8599, 0x859d, 0x8581, 0x85a2, 0x8582, 0x8588, 0x8585, 0x8579, 0x8576, 0x8598, 0x8590, 0x859f, 0x8668, 0x87be, 0x87aa, 0x87ad, 0x87c5, 0x87b0, 0x87ac, 0x87b9, 0x87b5, 0x87bc, 0x87ae, 0x87c9, 0x87c3, 0x87c2, 0x87cc, 0x87b7, 0x87af, 0x87c4, 0x87ca, 0x87b4, 0x87b6, 0x87bf, 0x87b8, 0x87bd, 0x87de, 0x87b2, 0x8935, 0x8933, 0x893c, 0x893e, 0x8941, 0x8952, 0x8937, 0x8942, 0x89ad, 0x89af, 0x89ae, 0x89f2, 0x89f3, 0x8b1e, 0x8b18, 0x8b16, 0x8b11, 0x8b05, 0x8b0b, 0x8b22, 0x8b0f, 0x8b12, 0x8b15, 0x8b07, 0x8b0d, 0x8b08, 0x8b06, 0x8b1c, 0x8b13, 0x8b1a, 0x8c4f, 0x8c70, 0x8c72, 0x8c71, 0x8c6f, 0x8c95, 0x8c94, 0x8cf9, 0x8d6f, 0x8e4e, 0x8e4d, 0x8e53, 0x8e50, 0x8e4c, 0x8e47, 0x8f43, 0x8f40, 0x9085, 0x907e, 0x9138, 0x919a, 0x91a2, 0x919b, 0x9199, 0x919f, 0x91a1, 0x919d, 0x91a0, 0x93a1, 0x9383, 0x93af, 0x9364, 0x9356, 0x9347, 0x937c, 0x9358, 0x935c, 0x9376, 0x9349, 0x9350, 0x9351, 0x9360, 0x936d, 0x938f, 0x934c, 0x936a, 0x9379, 0x9357, 0x9355, 0x9352, 0x934f, 0x9371, 0x9377, 0x937b, 0x9361, 0x935e, 0x9363, 0x9367, 0x9380, 0x934e, 0x9359, 0x95c7, 0x95c0, 0x95c9, 0x95c3, 0x95c5, 0x95b7, 0x96ae, 0x96b0, 0x96ac, 0x9720, 0x971f, 0x9718, 0x971d, 0x9719, 0x979a, 0x97a1, 0x979c, /* 0xef */ 0x979e, 0x979d, 0x97d5, 0x97d4, 0x97f1, 0x9841, 0x9844, 0x984a, 0x9849, 0x9845, 0x9843, 0x9925, 0x992b, 0x992c, 0x992a, 0x9933, 0x9932, 0x992f, 0x992d, 0x9931, 0x9930, 0x9998, 0x99a3, 0x99a1, 0x9a02, 0x99fa, 0x99f4, 0x99f7, 0x99f9, 0x99f8, 0x99f6, 0x99fb, 0x99fd, 0x99fe, 0x99fc, 0x9a03, 0x9abe, 0x9afe, 0x9afd, 0x9b01, 0x9afc, 0x9b48, 0x9b9a, 0x9ba8, 0x9b9e, 0x9b9b, 0x9ba6, 0x9ba1, 0x9ba5, 0x9ba4, 0x9b86, 0x9ba2, 0x9ba0, 0x9baf, 0x9d33, 0x9d41, 0x9d67, 0x9d36, 0x9d2e, 0x9d2f, 0x9d31, 0x9d38, 0x9d30, 0x9d45, 0x9d42, 0x9d43, 0x9d3e, 0x9d37, 0x9d40, 0x9d3d, 0x7ff5, 0x9d2d, 0x9e8a, 0x9e89, 0x9e8d, 0x9eb0, 0x9ec8, 0x9eda, 0x9efb, 0x9eff, 0x9f24, 0x9f23, 0x9f22, 0x9f54, 0x9fa0, 0x5131, 0x512d, 0x512e, 0x5698, 0x569c, 0x5697, 0x569a, 0x569d, 0x5699, 0x5970, 0x5b3c, 0x5c69, 0x5c6a, 0x5dc0, 0x5e6d, 0x5e6e, 0x61d8, 0x61df, 0x61ed, 0x61ee, 0x61f1, 0x61ea, 0x61f0, 0x61eb, 0x61d6, 0x61e9, 0x64ff, 0x6504, 0x64fd, 0x64f8, 0x6501, 0x6503, 0x64fc, 0x6594, 0x65db, 0x66da, 0x66db, 0x66d8, 0x6ac5, 0x6ab9, 0x6abd, 0x6ae1, 0x6ac6, 0x6aba, 0x6ab6, 0x6ab7, 0x6ac7, 0x6ab4, 0x6aad, 0x6b5e, 0x6bc9, 0x6c0b, 0x7007, 0x700c, 0x700d, 0x7001, 0x7005, 0x7014, 0x700e, 0x6fff, 0x7000, 0x6ffb, 0x7026, 0x6ffc, 0x6ff7, 0x700a, 0x7201, 0x71ff, 0x71f9, 0x7203, 0x71fd, 0x7376, /* 0xf0 */ 0x74b8, 0x74c0, 0x74b5, 0x74c1, 0x74be, 0x74b6, 0x74bb, 0x74c2, 0x7514, 0x7513, 0x765c, 0x7664, 0x7659, 0x7650, 0x7653, 0x7657, 0x765a, 0x76a6, 0x76bd, 0x76ec, 0x77c2, 0x77ba, 0x78ff, 0x790c, 0x7913, 0x7914, 0x7909, 0x7910, 0x7912, 0x7911, 0x79ad, 0x79ac, 0x7a5f, 0x7c1c, 0x7c29, 0x7c19, 0x7c20, 0x7c1f, 0x7c2d, 0x7c1d, 0x7c26, 0x7c28, 0x7c22, 0x7c25, 0x7c30, 0x7e5c, 0x7e50, 0x7e56, 0x7e63, 0x7e58, 0x7e62, 0x7e5f, 0x7e51, 0x7e60, 0x7e57, 0x7e53, 0x7fb5, 0x7fb3, 0x7ff7, 0x7ff8, 0x8075, 0x81d1, 0x81d2, 0x81d0, 0x825f, 0x825e, 0x85b4, 0x85c6, 0x85c0, 0x85c3, 0x85c2, 0x85b3, 0x85b5, 0x85bd, 0x85c7, 0x85c4, 0x85bf, 0x85cb, 0x85ce, 0x85c8, 0x85c5, 0x85b1, 0x85b6, 0x85d2, 0x8624, 0x85b8, 0x85b7, 0x85be, 0x8669, 0x87e7, 0x87e6, 0x87e2, 0x87db, 0x87eb, 0x87ea, 0x87e5, 0x87df, 0x87f3, 0x87e4, 0x87d4, 0x87dc, 0x87d3, 0x87ed, 0x87d8, 0x87e3, 0x87a4, 0x87d7, 0x87d9, 0x8801, 0x87f4, 0x87e8, 0x87dd, 0x8953, 0x894b, 0x894f, 0x894c, 0x8946, 0x8950, 0x8951, 0x8949, 0x8b2a, 0x8b27, 0x8b23, 0x8b33, 0x8b30, 0x8b35, 0x8b47, 0x8b2f, 0x8b3c, 0x8b3e, 0x8b31, 0x8b25, 0x8b37, 0x8b26, 0x8b36, 0x8b2e, 0x8b24, 0x8b3b, 0x8b3d, 0x8b3a, 0x8c42, 0x8c75, 0x8c99, 0x8c98, 0x8c97, 0x8cfe, 0x8d04, 0x8d02, 0x8d00, 0x8e5c, 0x8e62, 0x8e60, 0x8e57, 0x8e56, 0x8e5e, 0x8e65, 0x8e67, /* 0xf1 */ 0x8e5b, 0x8e5a, 0x8e61, 0x8e5d, 0x8e69, 0x8e54, 0x8f46, 0x8f47, 0x8f48, 0x8f4b, 0x9128, 0x913a, 0x913b, 0x913e, 0x91a8, 0x91a5, 0x91a7, 0x91af, 0x91aa, 0x93b5, 0x938c, 0x9392, 0x93b7, 0x939b, 0x939d, 0x9389, 0x93a7, 0x938e, 0x93aa, 0x939e, 0x93a6, 0x9395, 0x9388, 0x9399, 0x939f, 0x938d, 0x93b1, 0x9391, 0x93b2, 0x93a4, 0x93a8, 0x93b4, 0x93a3, 0x93a5, 0x95d2, 0x95d3, 0x95d1, 0x96b3, 0x96d7, 0x96da, 0x5dc2, 0x96df, 0x96d8, 0x96dd, 0x9723, 0x9722, 0x9725, 0x97ac, 0x97ae, 0x97a8, 0x97ab, 0x97a4, 0x97aa, 0x97a2, 0x97a5, 0x97d7, 0x97d9, 0x97d6, 0x97d8, 0x97fa, 0x9850, 0x9851, 0x9852, 0x98b8, 0x9941, 0x993c, 0x993a, 0x9a0f, 0x9a0b, 0x9a09, 0x9a0d, 0x9a04, 0x9a11, 0x9a0a, 0x9a05, 0x9a07, 0x9a06, 0x9ac0, 0x9adc, 0x9b08, 0x9b04, 0x9b05, 0x9b29, 0x9b35, 0x9b4a, 0x9b4c, 0x9b4b, 0x9bc7, 0x9bc6, 0x9bc3, 0x9bbf, 0x9bc1, 0x9bb5, 0x9bb8, 0x9bd3, 0x9bb6, 0x9bc4, 0x9bb9, 0x9bbd, 0x9d5c, 0x9d53, 0x9d4f, 0x9d4a, 0x9d5b, 0x9d4b, 0x9d59, 0x9d56, 0x9d4c, 0x9d57, 0x9d52, 0x9d54, 0x9d5f, 0x9d58, 0x9d5a, 0x9e8e, 0x9e8c, 0x9edf, 0x9f01, 0x9f00, 0x9f16, 0x9f25, 0x9f2b, 0x9f2a, 0x9f29, 0x9f28, 0x9f4c, 0x9f55, 0x5134, 0x5135, 0x5296, 0x52f7, 0x53b4, 0x56ab, 0x56ad, 0x56a6, 0x56a7, 0x56aa, 0x56ac, 0x58da, 0x58dd, 0x58db, 0x5912, 0x5b3d, 0x5b3e, 0x5b3f, 0x5dc3, 0x5e70, /* 0xf2 */ 0x5fbf, 0x61fb, 0x6507, 0x6510, 0x650d, 0x6509, 0x650c, 0x650e, 0x6584, 0x65de, 0x65dd, 0x66de, 0x6ae7, 0x6ae0, 0x6acc, 0x6ad1, 0x6ad9, 0x6acb, 0x6adf, 0x6adc, 0x6ad0, 0x6aeb, 0x6acf, 0x6acd, 0x6ade, 0x6b60, 0x6bb0, 0x6c0c, 0x7019, 0x7027, 0x7020, 0x7016, 0x702b, 0x7021, 0x7022, 0x7023, 0x7029, 0x7017, 0x7024, 0x701c, 0x702a, 0x720c, 0x720a, 0x7207, 0x7202, 0x7205, 0x72a5, 0x72a6, 0x72a4, 0x72a3, 0x72a1, 0x74cb, 0x74c5, 0x74b7, 0x74c3, 0x7516, 0x7660, 0x77c9, 0x77ca, 0x77c4, 0x77f1, 0x791d, 0x791b, 0x7921, 0x791c, 0x7917, 0x791e, 0x79b0, 0x7a67, 0x7a68, 0x7c33, 0x7c3c, 0x7c39, 0x7c2c, 0x7c3b, 0x7cec, 0x7cea, 0x7e76, 0x7e75, 0x7e78, 0x7e70, 0x7e77, 0x7e6f, 0x7e7a, 0x7e72, 0x7e74, 0x7e68, 0x7f4b, 0x7f4a, 0x7f83, 0x7f86, 0x7fb7, 0x7ffd, 0x7ffe, 0x8078, 0x81d7, 0x81d5, 0x8264, 0x8261, 0x8263, 0x85eb, 0x85f1, 0x85ed, 0x85d9, 0x85e1, 0x85e8, 0x85da, 0x85d7, 0x85ec, 0x85f2, 0x85f8, 0x85d8, 0x85df, 0x85e3, 0x85dc, 0x85d1, 0x85f0, 0x85e6, 0x85ef, 0x85de, 0x85e2, 0x8800, 0x87fa, 0x8803, 0x87f6, 0x87f7, 0x8809, 0x880c, 0x880b, 0x8806, 0x87fc, 0x8808, 0x87ff, 0x880a, 0x8802, 0x8962, 0x895a, 0x895b, 0x8957, 0x8961, 0x895c, 0x8958, 0x895d, 0x8959, 0x8988, 0x89b7, 0x89b6, 0x89f6, 0x8b50, 0x8b48, 0x8b4a, 0x8b40, 0x8b53, 0x8b56, 0x8b54, 0x8b4b, 0x8b55, /* 0xf3 */ 0x8b51, 0x8b42, 0x8b52, 0x8b57, 0x8c43, 0x8c77, 0x8c76, 0x8c9a, 0x8d06, 0x8d07, 0x8d09, 0x8dac, 0x8daa, 0x8dad, 0x8dab, 0x8e6d, 0x8e78, 0x8e73, 0x8e6a, 0x8e6f, 0x8e7b, 0x8ec2, 0x8f52, 0x8f51, 0x8f4f, 0x8f50, 0x8f53, 0x8fb4, 0x9140, 0x913f, 0x91b0, 0x91ad, 0x93de, 0x93c7, 0x93cf, 0x93c2, 0x93da, 0x93d0, 0x93f9, 0x93ec, 0x93cc, 0x93d9, 0x93a9, 0x93e6, 0x93ca, 0x93d4, 0x93ee, 0x93e3, 0x93d5, 0x93c4, 0x93ce, 0x93c0, 0x93d2, 0x93e7, 0x957d, 0x95da, 0x95db, 0x96e1, 0x9729, 0x972b, 0x972c, 0x9728, 0x9726, 0x97b3, 0x97b7, 0x97b6, 0x97dd, 0x97de, 0x97df, 0x985c, 0x9859, 0x985d, 0x9857, 0x98bf, 0x98bd, 0x98bb, 0x98be, 0x9948, 0x9947, 0x9943, 0x99a6, 0x99a7, 0x9a1a, 0x9a15, 0x9a25, 0x9a1d, 0x9a24, 0x9a1b, 0x9a22, 0x9a20, 0x9a27, 0x9a23, 0x9a1e, 0x9a1c, 0x9a14, 0x9ac2, 0x9b0b, 0x9b0a, 0x9b0e, 0x9b0c, 0x9b37, 0x9bea, 0x9beb, 0x9be0, 0x9bde, 0x9be4, 0x9be6, 0x9be2, 0x9bf0, 0x9bd4, 0x9bd7, 0x9bec, 0x9bdc, 0x9bd9, 0x9be5, 0x9bd5, 0x9be1, 0x9bda, 0x9d77, 0x9d81, 0x9d8a, 0x9d84, 0x9d88, 0x9d71, 0x9d80, 0x9d78, 0x9d86, 0x9d8b, 0x9d8c, 0x9d7d, 0x9d6b, 0x9d74, 0x9d75, 0x9d70, 0x9d69, 0x9d85, 0x9d73, 0x9d7b, 0x9d82, 0x9d6f, 0x9d79, 0x9d7f, 0x9d87, 0x9d68, 0x9e94, 0x9e91, 0x9ec0, 0x9efc, 0x9f2d, 0x9f40, 0x9f41, 0x9f4d, 0x9f56, 0x9f57, 0x9f58, 0x5337, 0x56b2, /* 0xf4 */ 0x56b5, 0x56b3, 0x58e3, 0x5b45, 0x5dc6, 0x5dc7, 0x5eee, 0x5eef, 0x5fc0, 0x5fc1, 0x61f9, 0x6517, 0x6516, 0x6515, 0x6513, 0x65df, 0x66e8, 0x66e3, 0x66e4, 0x6af3, 0x6af0, 0x6aea, 0x6ae8, 0x6af9, 0x6af1, 0x6aee, 0x6aef, 0x703c, 0x7035, 0x702f, 0x7037, 0x7034, 0x7031, 0x7042, 0x7038, 0x703f, 0x703a, 0x7039, 0x7040, 0x703b, 0x7033, 0x7041, 0x7213, 0x7214, 0x72a8, 0x737d, 0x737c, 0x74ba, 0x76ab, 0x76aa, 0x76be, 0x76ed, 0x77cc, 0x77ce, 0x77cf, 0x77cd, 0x77f2, 0x7925, 0x7923, 0x7927, 0x7928, 0x7924, 0x7929, 0x79b2, 0x7a6e, 0x7a6c, 0x7a6d, 0x7af7, 0x7c49, 0x7c48, 0x7c4a, 0x7c47, 0x7c45, 0x7cee, 0x7e7b, 0x7e7e, 0x7e81, 0x7e80, 0x7fba, 0x7fff, 0x8079, 0x81db, 0x81d9, 0x820b, 0x8268, 0x8269, 0x8622, 0x85ff, 0x8601, 0x85fe, 0x861b, 0x8600, 0x85f6, 0x8604, 0x8609, 0x8605, 0x860c, 0x85fd, 0x8819, 0x8810, 0x8811, 0x8817, 0x8813, 0x8816, 0x8963, 0x8966, 0x89b9, 0x89f7, 0x8b60, 0x8b6a, 0x8b5d, 0x8b68, 0x8b63, 0x8b65, 0x8b67, 0x8b6d, 0x8dae, 0x8e86, 0x8e88, 0x8e84, 0x8f59, 0x8f56, 0x8f57, 0x8f55, 0x8f58, 0x8f5a, 0x908d, 0x9143, 0x9141, 0x91b7, 0x91b5, 0x91b2, 0x91b3, 0x940b, 0x9413, 0x93fb, 0x9420, 0x940f, 0x9414, 0x93fe, 0x9415, 0x9410, 0x9428, 0x9419, 0x940d, 0x93f5, 0x9400, 0x93f7, 0x9407, 0x940e, 0x9416, 0x9412, 0x93fa, 0x9409, 0x93f8, 0x940a, 0x93ff, /* 0xf5 */ 0x93fc, 0x940c, 0x93f6, 0x9411, 0x9406, 0x95de, 0x95e0, 0x95df, 0x972e, 0x972f, 0x97b9, 0x97bb, 0x97fd, 0x97fe, 0x9860, 0x9862, 0x9863, 0x985f, 0x98c1, 0x98c2, 0x9950, 0x994e, 0x9959, 0x994c, 0x994b, 0x9953, 0x9a32, 0x9a34, 0x9a31, 0x9a2c, 0x9a2a, 0x9a36, 0x9a29, 0x9a2e, 0x9a38, 0x9a2d, 0x9ac7, 0x9aca, 0x9ac6, 0x9b10, 0x9b12, 0x9b11, 0x9c0b, 0x9c08, 0x9bf7, 0x9c05, 0x9c12, 0x9bf8, 0x9c40, 0x9c07, 0x9c0e, 0x9c06, 0x9c17, 0x9c14, 0x9c09, 0x9d9f, 0x9d99, 0x9da4, 0x9d9d, 0x9d92, 0x9d98, 0x9d90, 0x9d9b, 0x9da0, 0x9d94, 0x9d9c, 0x9daa, 0x9d97, 0x9da1, 0x9d9a, 0x9da2, 0x9da8, 0x9d9e, 0x9da3, 0x9dbf, 0x9da9, 0x9d96, 0x9da6, 0x9da7, 0x9e99, 0x9e9b, 0x9e9a, 0x9ee5, 0x9ee4, 0x9ee7, 0x9ee6, 0x9f30, 0x9f2e, 0x9f5b, 0x9f60, 0x9f5e, 0x9f5d, 0x9f59, 0x9f91, 0x513a, 0x5139, 0x5298, 0x5297, 0x56c3, 0x56bd, 0x56be, 0x5b48, 0x5b47, 0x5dcb, 0x5dcf, 0x5ef1, 0x61fd, 0x651b, 0x6b02, 0x6afc, 0x6b03, 0x6af8, 0x6b00, 0x7043, 0x7044, 0x704a, 0x7048, 0x7049, 0x7045, 0x7046, 0x721d, 0x721a, 0x7219, 0x737e, 0x7517, 0x766a, 0x77d0, 0x792d, 0x7931, 0x792f, 0x7c54, 0x7c53, 0x7cf2, 0x7e8a, 0x7e87, 0x7e88, 0x7e8b, 0x7e86, 0x7e8d, 0x7f4d, 0x7fbb, 0x8030, 0x81dd, 0x8618, 0x862a, 0x8626, 0x861f, 0x8623, 0x861c, 0x8619, 0x8627, 0x862e, 0x8621, 0x8620, 0x8629, 0x861e, 0x8625, /* 0xf6 */ 0x8829, 0x881d, 0x881b, 0x8820, 0x8824, 0x881c, 0x882b, 0x884a, 0x896d, 0x8969, 0x896e, 0x896b, 0x89fa, 0x8b79, 0x8b78, 0x8b45, 0x8b7a, 0x8b7b, 0x8d10, 0x8d14, 0x8daf, 0x8e8e, 0x8e8c, 0x8f5e, 0x8f5b, 0x8f5d, 0x9146, 0x9144, 0x9145, 0x91b9, 0x943f, 0x943b, 0x9436, 0x9429, 0x943d, 0x943c, 0x9430, 0x9439, 0x942a, 0x9437, 0x942c, 0x9440, 0x9431, 0x95e5, 0x95e4, 0x95e3, 0x9735, 0x973a, 0x97bf, 0x97e1, 0x9864, 0x98c9, 0x98c6, 0x98c0, 0x9958, 0x9956, 0x9a39, 0x9a3d, 0x9a46, 0x9a44, 0x9a42, 0x9a41, 0x9a3a, 0x9a3f, 0x9acd, 0x9b15, 0x9b17, 0x9b18, 0x9b16, 0x9b3a, 0x9b52, 0x9c2b, 0x9c1d, 0x9c1c, 0x9c2c, 0x9c23, 0x9c28, 0x9c29, 0x9c24, 0x9c21, 0x9db7, 0x9db6, 0x9dbc, 0x9dc1, 0x9dc7, 0x9dca, 0x9dcf, 0x9dbe, 0x9dc5, 0x9dc3, 0x9dbb, 0x9db5, 0x9dce, 0x9db9, 0x9dba, 0x9dac, 0x9dc8, 0x9db1, 0x9dad, 0x9dcc, 0x9db3, 0x9dcd, 0x9db2, 0x9e7a, 0x9e9c, 0x9eeb, 0x9eee, 0x9eed, 0x9f1b, 0x9f18, 0x9f1a, 0x9f31, 0x9f4e, 0x9f65, 0x9f64, 0x9f92, 0x4eb9, 0x56c6, 0x56c5, 0x56cb, 0x5971, 0x5b4b, 0x5b4c, 0x5dd5, 0x5dd1, 0x5ef2, 0x6521, 0x6520, 0x6526, 0x6522, 0x6b0b, 0x6b08, 0x6b09, 0x6c0d, 0x7055, 0x7056, 0x7057, 0x7052, 0x721e, 0x721f, 0x72a9, 0x737f, 0x74d8, 0x74d5, 0x74d9, 0x74d7, 0x766d, 0x76ad, 0x7935, 0x79b4, 0x7a70, 0x7a71, 0x7c57, 0x7c5c, 0x7c59, 0x7c5b, 0x7c5a, /* 0xf7 */ 0x7cf4, 0x7cf1, 0x7e91, 0x7f4f, 0x7f87, 0x81de, 0x826b, 0x8634, 0x8635, 0x8633, 0x862c, 0x8632, 0x8636, 0x882c, 0x8828, 0x8826, 0x882a, 0x8825, 0x8971, 0x89bf, 0x89be, 0x89fb, 0x8b7e, 0x8b84, 0x8b82, 0x8b86, 0x8b85, 0x8b7f, 0x8d15, 0x8e95, 0x8e94, 0x8e9a, 0x8e92, 0x8e90, 0x8e96, 0x8e97, 0x8f60, 0x8f62, 0x9147, 0x944c, 0x9450, 0x944a, 0x944b, 0x944f, 0x9447, 0x9445, 0x9448, 0x9449, 0x9446, 0x973f, 0x97e3, 0x986a, 0x9869, 0x98cb, 0x9954, 0x995b, 0x9a4e, 0x9a53, 0x9a54, 0x9a4c, 0x9a4f, 0x9a48, 0x9a4a, 0x9a49, 0x9a52, 0x9a50, 0x9ad0, 0x9b19, 0x9b2b, 0x9b3b, 0x9b56, 0x9b55, 0x9c46, 0x9c48, 0x9c3f, 0x9c44, 0x9c39, 0x9c33, 0x9c41, 0x9c3c, 0x9c37, 0x9c34, 0x9c32, 0x9c3d, 0x9c36, 0x9ddb, 0x9dd2, 0x9dde, 0x9dda, 0x9dcb, 0x9dd0, 0x9ddc, 0x9dd1, 0x9ddf, 0x9de9, 0x9dd9, 0x9dd8, 0x9dd6, 0x9df5, 0x9dd5, 0x9ddd, 0x9eb6, 0x9ef0, 0x9f35, 0x9f33, 0x9f32, 0x9f42, 0x9f6b, 0x9f95, 0x9fa2, 0x513d, 0x5299, 0x58e8, 0x58e7, 0x5972, 0x5b4d, 0x5dd8, 0x882f, 0x5f4f, 0x6201, 0x6203, 0x6204, 0x6529, 0x6525, 0x6596, 0x66eb, 0x6b11, 0x6b12, 0x6b0f, 0x6bca, 0x705b, 0x705a, 0x7222, 0x7382, 0x7381, 0x7383, 0x7670, 0x77d4, 0x7c67, 0x7c66, 0x7e95, 0x826c, 0x863a, 0x8640, 0x8639, 0x863c, 0x8631, 0x863b, 0x863e, 0x8830, 0x8832, 0x882e, 0x8833, 0x8976, 0x8974, 0x8973, 0x89fe, /* 0xf8 */ 0x8b8c, 0x8b8e, 0x8b8b, 0x8b88, 0x8c45, 0x8d19, 0x8e98, 0x8f64, 0x8f63, 0x91bc, 0x9462, 0x9455, 0x945d, 0x9457, 0x945e, 0x97c4, 0x97c5, 0x9800, 0x9a56, 0x9a59, 0x9b1e, 0x9b1f, 0x9b20, 0x9c52, 0x9c58, 0x9c50, 0x9c4a, 0x9c4d, 0x9c4b, 0x9c55, 0x9c59, 0x9c4c, 0x9c4e, 0x9dfb, 0x9df7, 0x9def, 0x9de3, 0x9deb, 0x9df8, 0x9de4, 0x9df6, 0x9de1, 0x9dee, 0x9de6, 0x9df2, 0x9df0, 0x9de2, 0x9dec, 0x9df4, 0x9df3, 0x9de8, 0x9ded, 0x9ec2, 0x9ed0, 0x9ef2, 0x9ef3, 0x9f06, 0x9f1c, 0x9f38, 0x9f37, 0x9f36, 0x9f43, 0x9f4f, 0x9f71, 0x9f70, 0x9f6e, 0x9f6f, 0x56d3, 0x56cd, 0x5b4e, 0x5c6d, 0x652d, 0x66ed, 0x66ee, 0x6b13, 0x705f, 0x7061, 0x705d, 0x7060, 0x7223, 0x74db, 0x74e5, 0x77d5, 0x7938, 0x79b7, 0x79b6, 0x7c6a, 0x7e97, 0x7f89, 0x826d, 0x8643, 0x8838, 0x8837, 0x8835, 0x884b, 0x8b94, 0x8b95, 0x8e9e, 0x8e9f, 0x8ea0, 0x8e9d, 0x91be, 0x91bd, 0x91c2, 0x946b, 0x9468, 0x9469, 0x96e5, 0x9746, 0x9743, 0x9747, 0x97c7, 0x97e5, 0x9a5e, 0x9ad5, 0x9b59, 0x9c63, 0x9c67, 0x9c66, 0x9c62, 0x9c5e, 0x9c60, 0x9e02, 0x9dfe, 0x9e07, 0x9e03, 0x9e06, 0x9e05, 0x9e00, 0x9e01, 0x9e09, 0x9dff, 0x9dfd, 0x9e04, 0x9ea0, 0x9f1e, 0x9f46, 0x9f74, 0x9f75, 0x9f76, 0x56d4, 0x652e, 0x65b8, 0x6b18, 0x6b19, 0x6b17, 0x6b1a, 0x7062, 0x7226, 0x72aa, 0x77d8, 0x77d9, 0x7939, 0x7c69, 0x7c6b, 0x7cf6, 0x7e9a, /* 0xf9 */ 0x7e98, 0x7e9b, 0x7e99, 0x81e0, 0x81e1, 0x8646, 0x8647, 0x8648, 0x8979, 0x897a, 0x897c, 0x897b, 0x89ff, 0x8b98, 0x8b99, 0x8ea5, 0x8ea4, 0x8ea3, 0x946e, 0x946d, 0x946f, 0x9471, 0x9473, 0x9749, 0x9872, 0x995f, 0x9c68, 0x9c6e, 0x9c6d, 0x9e0b, 0x9e0d, 0x9e10, 0x9e0f, 0x9e12, 0x9e11, 0x9ea1, 0x9ef5, 0x9f09, 0x9f47, 0x9f78, 0x9f7b, 0x9f7a, 0x9f79, 0x571e, 0x7066, 0x7c6f, 0x883c, 0x8db2, 0x8ea6, 0x91c3, 0x9474, 0x9478, 0x9476, 0x9475, 0x9a60, 0x9c74, 0x9c73, 0x9c71, 0x9c75, 0x9e14, 0x9e13, 0x9ef6, 0x9f0a, 0x9fa4, 0x7068, 0x7065, 0x7cf7, 0x866a, 0x883e, 0x883d, 0x883f, 0x8b9e, 0x8c9c, 0x8ea9, 0x8ec9, 0x974b, 0x9873, 0x9874, 0x98cc, 0x9961, 0x99ab, 0x9a64, 0x9a66, 0x9a67, 0x9b24, 0x9e15, 0x9e17, 0x9f48, 0x6207, 0x6b1e, 0x7227, 0x864c, 0x8ea8, 0x9482, 0x9480, 0x9481, 0x9a69, 0x9a68, 0x9b2e, 0x9e19, 0x7229, 0x864b, 0x8b9f, 0x9483, 0x9c79, 0x9eb7, 0x7675, 0x9a6b, 0x9c7a, 0x9e1d, 0x7069, 0x706a, 0x9ea4, 0x9f7e, 0x9f49, 0x9f98, }; static int big5_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c1 = s[0]; if ((c1 >= 0xa1 && c1 <= 0xc7) || (c1 >= 0xc9 && c1 <= 0xf9)) { if (n >= 2) { unsigned char c2 = s[1]; if ((c2 >= 0x40 && c2 < 0x7f) || (c2 >= 0xa1 && c2 < 0xff)) { unsigned int i = 157 * (c1 - 0xa1) + (c2 - (c2 >= 0xa1 ? 0x62 : 0x40)); unsigned short wc = 0xfffd; if (i < 6280) { if (i < 6121) wc = big5_2uni_pagea1[i]; } else { if (i < 13932) wc = big5_2uni_pagec9[i-6280]; } if (wc != 0xfffd) { *pwc = (ucs4_t) wc; return 2; } } return RET_ILSEQ; } return RET_TOOFEW(0); } return RET_ILSEQ; } static const unsigned short big5_2charset[13703] = { 0xa246, 0xa247, 0xa244, 0xa1b1, 0xa258, 0xa1d3, 0xa150, 0xa1d1, 0xa1d2, 0xa3be, 0xa3bc, 0xa3bd, 0xa3bf, 0xa3bb, 0xa344, 0xa345, 0xa346, 0xa347, 0xa348, 0xa349, 0xa34a, 0xa34b, 0xa34c, 0xa34d, 0xa34e, 0xa34f, 0xa350, 0xa351, 0xa352, 0xa353, 0xa354, 0xa355, 0xa356, 0xa357, 0xa358, 0xa359, 0xa35a, 0xa35b, 0xa35c, 0xa35d, 0xa35e, 0xa35f, 0xa360, 0xa361, 0xa362, 0xa363, 0xa364, 0xa365, 0xa366, 0xa367, 0xa368, 0xa369, 0xa36a, 0xa36b, 0xa36c, 0xa36d, 0xa36e, 0xa36f, 0xa370, 0xa371, 0xa372, 0xa373, 0xc7b3, 0xc7b1, 0xc7b2, 0xc7b4, 0xc7b5, 0xc7b6, 0xc7b7, 0xc7b8, 0xc7b9, 0xc7ba, 0xc7bb, 0xc7bc, 0xc7bd, 0xc7be, 0xc7bf, 0xc7c0, 0xc7c1, 0xc7c2, 0xc7c3, 0xc7c4, 0xc7c5, 0xc7c6, 0xc7c7, 0xc7c8, 0xc7c9, 0xc7ca, 0xc7cb, 0xc7cc, 0xc7cd, 0xc7cf, 0xc7d0, 0xc7d1, 0xc7d2, 0xc7d3, 0xc7d4, 0xc7d5, 0xc7d6, 0xc7d7, 0xc7d8, 0xc7d9, 0xc7da, 0xc7db, 0xc7dc, 0xc7dd, 0xc7de, 0xc7df, 0xc7e0, 0xc7e1, 0xc7e2, 0xc7e3, 0xc7e4, 0xc7e5, 0xc7e6, 0xc7e7, 0xc7e8, 0xc7ce, 0xa156, 0xa158, 0xa1a5, 0xa1a6, 0xa1a7, 0xa1a8, 0xa145, 0xa14c, 0xa14b, 0xa1ac, 0xa1ab, 0xa1b0, 0xa1c2, 0xa24a, 0xa1c1, 0xa24b, 0xa2b9, 0xa2ba, 0xa2bb, 0xa2bc, 0xa2bd, 0xa2be, 0xa2bf, 0xa2c0, 0xa2c1, 0xa2c2, 0xa1f6, 0xa1f4, 0xa1f7, 0xa1f5, 0xa1f8, 0xa1f9, 0xa1fb, 0xa1fa, 0xa1d4, 0xa1db, 0xa1e8, 0xa1e7, 0xa1fd, 0xa1fc, 0xa1e4, 0xa1e5, 0xa1ec, 0xa1ed, 0xa1ef, 0xa1ee, 0xa1e3, 0xa1dc, 0xa1da, 0xa1dd, 0xa1d8, 0xa1d9, 0xa1e6, 0xa1e9, 0xc7e9, 0xc7ea, 0xc7eb, 0xc7ec, 0xc7ed, 0xc7ee, 0xc7ef, 0xc7f0, 0xc7f1, 0xc7f2, 0xc7f3, 0xc7f4, 0xc7f5, 0xc7f6, 0xc7f7, 0xc7f8, 0xc7f9, 0xc7fa, 0xc7fb, 0xc7fc, 0xa277, 0xa278, 0xa27a, 0xa27b, 0xa27c, 0xa27d, 0xa275, 0xa274, 0xa273, 0xa272, 0xa271, 0xa2a4, 0xa2a5, 0xa2a7, 0xa2a6, 0xa27e, 0xa2a1, 0xa2a3, 0xa2a2, 0xa2ac, 0xa2ad, 0xa2ae, 0xa262, 0xa263, 0xa264, 0xa265, 0xa266, 0xa267, 0xa268, 0xa269, 0xa270, 0xa26f, 0xa26e, 0xa26d, 0xa26c, 0xa26b, 0xa26a, 0xa276, 0xa279, 0xa1bd, 0xa1bc, 0xa1b6, 0xa1b5, 0xa1bf, 0xa1be, 0xa1bb, 0xa1ba, 0xa1b3, 0xa1b7, 0xa1b4, 0xa2a8, 0xa2a9, 0xa2ab, 0xa2aa, 0xa1b9, 0xa1b8, 0xa1f3, 0xa1f0, 0xa1f2, 0xa1f1, 0xa140, 0xa142, 0xa143, 0xa1b2, 0xc6a4, 0xa171, 0xa172, 0xa16d, 0xa16e, 0xa175, 0xa176, 0xa179, 0xa17a, 0xa169, 0xa16a, 0xa245, 0xa165, 0xa166, 0xa1a9, 0xa1aa, 0xa2c3, 0xa2c4, 0xa2c5, 0xa2c6, 0xa2c7, 0xa2c8, 0xa2c9, 0xa2ca, 0xa2cb, 0xc6a5, 0xc6a6, 0xc6a7, 0xc6a8, 0xc6a9, 0xc6aa, 0xc6ab, 0xc6ac, 0xc6ad, 0xc6ae, 0xc6af, 0xc6b0, 0xc6b1, 0xc6b2, 0xc6b3, 0xc6b4, 0xc6b5, 0xc6b6, 0xc6b7, 0xc6b8, 0xc6b9, 0xc6ba, 0xc6bb, 0xc6bc, 0xc6bd, 0xc6be, 0xc6bf, 0xc6c0, 0xc6c1, 0xc6c2, 0xc6c3, 0xc6c4, 0xc6c5, 0xc6c6, 0xc6c7, 0xc6c8, 0xc6c9, 0xc6ca, 0xc6cb, 0xc6cc, 0xc6cd, 0xc6ce, 0xc6cf, 0xc6d0, 0xc6d1, 0xc6d2, 0xc6d3, 0xc6d4, 0xc6d5, 0xc6d6, 0xc6d7, 0xc6d8, 0xc6d9, 0xc6da, 0xc6db, 0xc6dc, 0xc6dd, 0xc6de, 0xc6df, 0xc6e0, 0xc6e1, 0xc6e2, 0xc6e3, 0xc6e4, 0xc6e5, 0xc6e6, 0xc6e7, 0xc6e8, 0xc6e9, 0xc6ea, 0xc6eb, 0xc6ec, 0xc6ed, 0xc6ee, 0xc6ef, 0xc6f0, 0xc6f1, 0xc6f2, 0xc6f3, 0xc6f4, 0xc6f5, 0xc6f6, 0xc6f7, 0xc6a2, 0xc6a3, 0xc6f8, 0xc6f9, 0xc6fa, 0xc6fb, 0xc6fc, 0xc6fd, 0xc6fe, 0xc740, 0xc741, 0xc742, 0xc743, 0xc744, 0xc745, 0xc746, 0xc747, 0xc748, 0xc749, 0xc74a, 0xc74b, 0xc74c, 0xc74d, 0xc74e, 0xc74f, 0xc750, 0xc751, 0xc752, 0xc753, 0xc754, 0xc755, 0xc756, 0xc757, 0xc758, 0xc759, 0xc75a, 0xc75b, 0xc75c, 0xc75d, 0xc75e, 0xc75f, 0xc760, 0xc761, 0xc762, 0xc763, 0xc764, 0xc765, 0xc766, 0xc767, 0xc768, 0xc769, 0xc76a, 0xc76b, 0xc76c, 0xc76d, 0xc76e, 0xc76f, 0xc770, 0xc771, 0xc772, 0xc773, 0xc774, 0xc775, 0xc776, 0xc777, 0xc778, 0xc779, 0xc77a, 0xc77b, 0xc77c, 0xc77d, 0xc77e, 0xc7a1, 0xc7a2, 0xc7a3, 0xc7a4, 0xc7a5, 0xc7a6, 0xc7a7, 0xc7a8, 0xc7a9, 0xc7aa, 0xc7ab, 0xc7ac, 0xc7ad, 0xc7ae, 0xc7af, 0xc7b0, 0xc6a1, 0xa374, 0xa375, 0xa376, 0xa377, 0xa378, 0xa379, 0xa37a, 0xa37b, 0xa37c, 0xa37d, 0xa37e, 0xa3a1, 0xa3a2, 0xa3a3, 0xa3a4, 0xa3a5, 0xa3a6, 0xa3a7, 0xa3a8, 0xa3a9, 0xa3aa, 0xa3ab, 0xa3ac, 0xa3ad, 0xa3ae, 0xa3af, 0xa3b0, 0xa3b1, 0xa3b2, 0xa3b3, 0xa3b4, 0xa3b5, 0xa3b6, 0xa3b7, 0xa3b8, 0xa3b9, 0xa3ba, 0xa1c0, 0xa255, 0xa256, 0xa250, 0xa251, 0xa252, 0xa254, 0xa257, 0xa253, 0xa1eb, 0xa1ea, 0xa24f, 0xa440, 0xa442, 0xa443, 0xc945, 0xa456, 0xa454, 0xa457, 0xa455, 0xc946, 0xa4a3, 0xc94f, 0xc94d, 0xa4a2, 0xa4a1, 0xa542, 0xa541, 0xa540, 0xa543, 0xa4fe, 0xa5e0, 0xa5e1, 0xa8c3, 0xa458, 0xa4a4, 0xc950, 0xa4a5, 0xc963, 0xa6ea, 0xcbb1, 0xa459, 0xa4a6, 0xa544, 0xc964, 0xc940, 0xa444, 0xa45b, 0xc947, 0xa45c, 0xa4a7, 0xa545, 0xa547, 0xa546, 0xa5e2, 0xa5e3, 0xa8c4, 0xadbc, 0xa441, 0xc941, 0xa445, 0xa45e, 0xa45d, 0xa5e4, 0xa8c5, 0xb0ae, 0xd44b, 0xb6c3, 0xdcb1, 0xdcb2, 0xa446, 0xa4a9, 0xa8c6, 0xa447, 0xc948, 0xa45f, 0xa4aa, 0xa4ac, 0xc951, 0xa4ad, 0xa4ab, 0xa5e5, 0xa8c7, 0xa8c8, 0xab45, 0xa460, 0xa4ae, 0xa5e6, 0xa5e8, 0xa5e7, 0xa6eb, 0xa8c9, 0xa8ca, 0xab46, 0xab47, 0xadbd, 0xdcb3, 0xf6d6, 0xa448, 0xa4b0, 0xa4af, 0xc952, 0xa4b1, 0xa4b7, 0xa4b2, 0xa4b3, 0xc954, 0xc953, 0xa4b5, 0xa4b6, 0xa4b4, 0xa54a, 0xa54b, 0xa54c, 0xa54d, 0xa549, 0xa550, 0xc96a, 0xc966, 0xc969, 0xa551, 0xa561, 0xc968, 0xa54e, 0xa54f, 0xa548, 0xc965, 0xc967, 0xa5f5, 0xc9b0, 0xa5f2, 0xa5f6, 0xc9ba, 0xc9ae, 0xa5f3, 0xc9b2, 0xa5f4, 0xa5f7, 0xa5e9, 0xc9b1, 0xa5f8, 0xc9b5, 0xc9b9, 0xc9b6, 0xc9b3, 0xa5ea, 0xa5ec, 0xa5f9, 0xa5ee, 0xc9ab, 0xa5f1, 0xa5ef, 0xa5f0, 0xc9bb, 0xc9b8, 0xc9af, 0xa5ed, 0xc9ac, 0xa5eb, 0xc9b4, 0xc9b7, 0xc9ad, 0xca66, 0xa742, 0xa6f4, 0xca67, 0xa6f1, 0xa744, 0xa6f9, 0xa6f8, 0xca5b, 0xa6fc, 0xa6f7, 0xca60, 0xca68, 0xca64, 0xa6fa, 0xa6fd, 0xa6ee, 0xa747, 0xca5d, 0xcbbd, 0xa6ec, 0xa743, 0xa6ed, 0xa6f5, 0xa6f6, 0xca62, 0xca5e, 0xa6fb, 0xa6f3, 0xca5a, 0xa6ef, 0xca65, 0xa745, 0xa748, 0xa6f2, 0xa740, 0xa746, 0xa6f0, 0xca63, 0xa741, 0xca69, 0xca5c, 0xa6fe, 0xca5f, 0xca61, 0xa8d8, 0xcbbf, 0xcbcb, 0xa8d0, 0xcbcc, 0xa8cb, 0xa8d5, 0xa8ce, 0xcbb9, 0xa8d6, 0xcbb8, 0xcbbc, 0xcbc3, 0xcbc1, 0xa8de, 0xa8d9, 0xcbb3, 0xcbb5, 0xa8db, 0xa8cf, 0xcbb6, 0xcbc2, 0xcbc9, 0xa8d4, 0xcbbb, 0xcbb4, 0xa8d3, 0xcbb7, 0xa8d7, 0xcbba, 0xa8d2, 0xa8cd, 0xa8dc, 0xcbc4, 0xa8dd, 0xcbc8, 0xcbc6, 0xcbca, 0xa8da, 0xcbbe, 0xcbb2, 0xcbc0, 0xa8d1, 0xcbc5, 0xa8cc, 0xcbc7, 0xab56, 0xab4a, 0xcde0, 0xcde8, 0xab49, 0xab51, 0xab5d, 0xcdee, 0xcdec, 0xcde7, 0xab4b, 0xcded, 0xcde3, 0xab59, 0xab50, 0xab58, 0xcdde, 0xcdea, 0xcde1, 0xab54, 0xcde2, 0xcddd, 0xab5b, 0xab4e, 0xab57, 0xab4d, 0xcddf, 0xcde4, 0xcdeb, 0xab55, 0xab52, 0xcde6, 0xab5a, 0xcde9, 0xcde5, 0xab4f, 0xab5c, 0xab53, 0xab4c, 0xab48, 0xcdef, 0xadd7, 0xadc1, 0xadd1, 0xadd6, 0xd0d0, 0xd0cf, 0xd0d4, 0xd0d5, 0xadc4, 0xadcd, 0xadda, 0xadce, 0xd0c9, 0xadc7, 0xd0ca, 0xaddc, 0xadd3, 0xadbe, 0xadbf, 0xd0dd, 0xb0bf, 0xadcc, 0xadcb, 0xd0cb, 0xadcf, 0xd45b, 0xadc6, 0xd0d6, 0xadd5, 0xadd4, 0xadca, 0xd0ce, 0xd0d7, 0xd0c8, 0xadc9, 0xd0d8, 0xadd2, 0xd0cc, 0xadc0, 0xadc3, 0xadc2, 0xd0d9, 0xadd0, 0xadc5, 0xadd9, 0xaddb, 0xd0d3, 0xadd8, 0xd0db, 0xd0cd, 0xd0dc, 0xd0d1, 0xd0da, 0xd0d2, 0xadc8, 0xd463, 0xd457, 0xb0b3, 0xd45c, 0xd462, 0xb0b2, 0xd455, 0xb0b6, 0xd459, 0xd452, 0xb0b4, 0xd456, 0xb0b9, 0xb0be, 0xd467, 0xd451, 0xb0ba, 0xd466, 0xb0b5, 0xd458, 0xb0b1, 0xd453, 0xd44f, 0xd45d, 0xd450, 0xd44e, 0xd45a, 0xd460, 0xd461, 0xb0b7, 0xd85b, 0xd45e, 0xd44d, 0xd45f, 0xb0c1, 0xd464, 0xb0c0, 0xd44c, 0xd454, 0xd465, 0xb0bc, 0xb0bb, 0xb0b8, 0xb0bd, 0xb0af, 0xb0b0, 0xb3c8, 0xd85e, 0xd857, 0xb3c5, 0xd85f, 0xd855, 0xd858, 0xb3c4, 0xd859, 0xb3c7, 0xd85d, 0xd853, 0xd852, 0xb3c9, 0xb3ca, 0xb3c6, 0xb3cb, 0xd851, 0xd85c, 0xd85a, 0xd854, 0xb3c3, 0xd856, 0xb6ca, 0xb6c4, 0xdcb7, 0xb6cd, 0xdcbd, 0xdcc0, 0xb6c6, 0xb6c7, 0xdcba, 0xb6c5, 0xdcc3, 0xb6cb, 0xdcc4, 0xdcbf, 0xb6cc, 0xdcb4, 0xb6c9, 0xdcb5, 0xdcbe, 0xdcbc, 0xdcb8, 0xb6c8, 0xdcb6, 0xb6ce, 0xdcbb, 0xdcc2, 0xdcb9, 0xdcc1, 0xb9b6, 0xb9b3, 0xb9b4, 0xe0f9, 0xe0f1, 0xb9b2, 0xb9af, 0xe0f2, 0xb9b1, 0xe0f5, 0xe0f7, 0xe0fe, 0xe0fd, 0xe0f8, 0xb9ae, 0xe0f0, 0xb9ac, 0xe0f3, 0xb9b7, 0xe0f6, 0xe0fa, 0xb9b0, 0xb9ad, 0xe0fc, 0xe0fb, 0xb9b5, 0xe0f4, 0xbbf8, 0xe4ec, 0xe4e9, 0xbbf9, 0xbbf7, 0xe4f0, 0xe4ed, 0xe4e6, 0xbbf6, 0xbbfa, 0xe4e7, 0xbbf5, 0xbbfd, 0xe4ea, 0xe4eb, 0xbbfb, 0xbbfc, 0xe4f1, 0xe4ee, 0xe4ef, 0xbeaa, 0xe8f8, 0xbea7, 0xe8f5, 0xbea9, 0xbeab, 0xe8f6, 0xbea8, 0xe8f7, 0xe8f4, 0xc076, 0xecbd, 0xc077, 0xecbb, 0xecbc, 0xecba, 0xecb9, 0xecbe, 0xc075, 0xefb8, 0xefb9, 0xe4e8, 0xefb7, 0xc078, 0xc35f, 0xf1eb, 0xf1ec, 0xc4d7, 0xc4d8, 0xf5c1, 0xf5c0, 0xc56c, 0xc56b, 0xf7d0, 0xa449, 0xa461, 0xa4b9, 0xa4b8, 0xa553, 0xa552, 0xa5fc, 0xa5fb, 0xa5fd, 0xa5fa, 0xa74a, 0xa749, 0xa74b, 0xa8e0, 0xa8df, 0xa8e1, 0xab5e, 0xa259, 0xd0de, 0xa25a, 0xb0c2, 0xa25c, 0xa25b, 0xd860, 0xa25d, 0xb9b8, 0xa25e, 0xa44a, 0xa4ba, 0xa5fe, 0xa8e2, 0xa44b, 0xa4bd, 0xa4bb, 0xa4bc, 0xa640, 0xa74c, 0xa8e4, 0xa8e3, 0xa8e5, 0xaddd, 0xbeac, 0xc94e, 0xa554, 0xa555, 0xa641, 0xca6a, 0xab60, 0xab5f, 0xd0e0, 0xd0df, 0xb0c3, 0xa4be, 0xc955, 0xcbcd, 0xab61, 0xade0, 0xadde, 0xaddf, 0xbead, 0xa556, 0xa642, 0xc9bc, 0xa74d, 0xa74e, 0xca6b, 0xcbce, 0xa8e6, 0xcbcf, 0xd0e2, 0xd0e3, 0xade3, 0xd0e4, 0xd0e1, 0xade4, 0xade2, 0xade1, 0xd0e5, 0xd468, 0xd861, 0xdcc5, 0xe140, 0xbbfe, 0xbeae, 0xe8f9, 0xa44c, 0xa45a, 0xb0c4, 0xb3cd, 0xb9b9, 0xc942, 0xa4bf, 0xa559, 0xa557, 0xa558, 0xa8e7, 0xa44d, 0xa44e, 0xa462, 0xa4c0, 0xa4c1, 0xa4c2, 0xc9be, 0xa55a, 0xc96b, 0xa646, 0xc9bf, 0xa644, 0xa645, 0xc9bd, 0xa647, 0xa643, 0xca6c, 0xaaec, 0xca6d, 0xca6e, 0xa750, 0xa74f, 0xa753, 0xa751, 0xa752, 0xa8ed, 0xa8ec, 0xcbd4, 0xcbd1, 0xcbd2, 0xcbd0, 0xa8ee, 0xa8ea, 0xa8e9, 0xa8eb, 0xa8e8, 0xa8ef, 0xab63, 0xcdf0, 0xcbd3, 0xab68, 0xcdf1, 0xab64, 0xab67, 0xab66, 0xab65, 0xab62, 0xd0e8, 0xade7, 0xd0eb, 0xade5, 0xd0e7, 0xade8, 0xade6, 0xade9, 0xd0e9, 0xd0ea, 0xd0e6, 0xd0ec, 0xb3d1, 0xb0c5, 0xd469, 0xd46b, 0xd46a, 0xd46c, 0xb0c6, 0xb3ce, 0xb3cf, 0xb3d0, 0xb6d0, 0xdcc7, 0xdcc6, 0xdcc8, 0xdcc9, 0xb6d1, 0xb6cf, 0xe141, 0xe142, 0xb9bb, 0xb9ba, 0xe35a, 0xbc40, 0xbc41, 0xbc42, 0xbc44, 0xe4f2, 0xe4f3, 0xbc43, 0xbeaf, 0xbeb0, 0xf1ed, 0xf5c3, 0xf5c2, 0xf7d1, 0xa44f, 0xa55c, 0xa55b, 0xa648, 0xc9c0, 0xa755, 0xa756, 0xa754, 0xa757, 0xca6f, 0xca70, 0xa8f1, 0xcbd5, 0xa8f0, 0xcdf2, 0xab6c, 0xcdf3, 0xab6b, 0xab69, 0xab6a, 0xd0ed, 0xb0c7, 0xd46e, 0xb0ca, 0xd46d, 0xb1e5, 0xb0c9, 0xb0c8, 0xb3d4, 0xb3d3, 0xb3d2, 0xb6d2, 0xb6d5, 0xb6d6, 0xb6d4, 0xb6d3, 0xe143, 0xe144, 0xe4f5, 0xbc45, 0xe4f4, 0xbeb1, 0xecbf, 0xc079, 0xf1ee, 0xc455, 0xa463, 0xa4c3, 0xc956, 0xa4c4, 0xa4c5, 0xa55d, 0xa55e, 0xa649, 0xca71, 0xcbd6, 0xcbd7, 0xab6d, 0xd0ee, 0xb0cc, 0xb0cb, 0xd863, 0xd862, 0xa450, 0xa4c6, 0xa55f, 0xb0cd, 0xc943, 0xc96c, 0xa560, 0xc9c2, 0xa64b, 0xa64a, 0xc9c1, 0xa758, 0xadea, 0xd46f, 0xb6d7, 0xe145, 0xb9bc, 0xe8fa, 0xf3fd, 0xa4c7, 0xcbd8, 0xcdf4, 0xb0d0, 0xb0ce, 0xb0cf, 0xa451, 0xa464, 0xa2cd, 0xa4ca, 0xa4c9, 0xa4c8, 0xa563, 0xa562, 0xc96d, 0xc9c3, 0xa8f5, 0xa8f2, 0xa8f4, 0xa8f3, 0xab6e, 0xb3d5, 0xa452, 0xa4cb, 0xa565, 0xa564, 0xca72, 0xa8f6, 0xc957, 0xa567, 0xa566, 0xa64c, 0xa64d, 0xca73, 0xa759, 0xa75a, 0xa8f7, 0xa8f8, 0xa8f9, 0xab6f, 0xcdf5, 0xadeb, 0xc944, 0xa4cc, 0xc9c4, 0xca74, 0xca75, 0xcbd9, 0xcbda, 0xcdf7, 0xcdf6, 0xcdf9, 0xcdf8, 0xab70, 0xd470, 0xaded, 0xd0ef, 0xadec, 0xd864, 0xb3d6, 0xd865, 0xe146, 0xb9bd, 0xbc46, 0xf1ef, 0xc958, 0xa568, 0xb0d1, 0xa453, 0xa465, 0xa4ce, 0xa4cd, 0xa4cf, 0xa8fb, 0xa8fa, 0xa8fc, 0xab71, 0xadee, 0xe8fb, 0xc24f, 0xa466, 0xa56a, 0xa579, 0xa574, 0xa56f, 0xa56e, 0xa575, 0xa573, 0xa56c, 0xa57a, 0xa56d, 0xa569, 0xa578, 0xa577, 0xa576, 0xa56b, 0xa572, 0xa571, 0xa57b, 0xa570, 0xa653, 0xa659, 0xa655, 0xa65b, 0xc9c5, 0xa658, 0xa64e, 0xa651, 0xa654, 0xa650, 0xa657, 0xa65a, 0xa64f, 0xa652, 0xa656, 0xa65c, 0xca7e, 0xca7b, 0xa767, 0xca7c, 0xa75b, 0xa75d, 0xa775, 0xa770, 0xcaa5, 0xca7d, 0xa75f, 0xa761, 0xcaa4, 0xa768, 0xca78, 0xa774, 0xa776, 0xa75c, 0xa76d, 0xca76, 0xa773, 0xa764, 0xa76e, 0xa76f, 0xca77, 0xa76c, 0xa76a, 0xa76b, 0xa771, 0xcaa1, 0xa75e, 0xa772, 0xcaa3, 0xa766, 0xa763, 0xca7a, 0xa762, 0xcaa6, 0xa765, 0xa769, 0xa760, 0xcaa2, 0xca79, 0xcbeb, 0xcbea, 0xa94f, 0xcbed, 0xcbef, 0xcbe4, 0xcbe7, 0xcbee, 0xa950, 0xcbe1, 0xcbe5, 0xcbe9, 0xce49, 0xa94b, 0xce4d, 0xa8fd, 0xcbe6, 0xa8fe, 0xa94c, 0xa945, 0xa941, 0xcbe2, 0xa944, 0xa949, 0xa952, 0xcbe3, 0xcbdc, 0xa943, 0xcbdd, 0xcbdf, 0xa946, 0xa948, 0xcbdb, 0xcbe0, 0xa951, 0xa94d, 0xcbe8, 0xa953, 0xa94a, 0xcbde, 0xa947, 0xa942, 0xa940, 0xcbec, 0xa94e, 0xce48, 0xcdfb, 0xce4b, 0xcdfd, 0xab78, 0xaba8, 0xab74, 0xaba7, 0xab7d, 0xaba4, 0xab72, 0xcdfc, 0xce43, 0xaba3, 0xce4f, 0xaba5, 0xab79, 0xce45, 0xce42, 0xab77, 0xcdfa, 0xaba6, 0xce4a, 0xab7c, 0xce4c, 0xaba9, 0xab73, 0xab7e, 0xab7b, 0xce40, 0xaba1, 0xce46, 0xce47, 0xab7a, 0xaba2, 0xab76, 0xab75, 0xcdfe, 0xce44, 0xce4e, 0xd144, 0xadfb, 0xd0f1, 0xd0f6, 0xadf4, 0xae40, 0xd0f4, 0xadef, 0xadf9, 0xadfe, 0xd0fb, 0xadfa, 0xadfd, 0xd0fe, 0xadf5, 0xd0f5, 0xd142, 0xd143, 0xadf7, 0xd141, 0xadf3, 0xae43, 0xd0f8, 0xadf1, 0xd146, 0xd0f9, 0xd0fd, 0xadf6, 0xae42, 0xd0fa, 0xadfc, 0xd140, 0xd147, 0xd4a1, 0xd145, 0xae44, 0xadf0, 0xd0fc, 0xd0f3, 0xadf8, 0xd0f2, 0xd0f7, 0xd0f0, 0xae41, 0xd477, 0xb0e4, 0xd4a7, 0xb0e2, 0xb0df, 0xd47c, 0xb0db, 0xd4a2, 0xb0e6, 0xd476, 0xd47b, 0xd47a, 0xadf2, 0xb0e1, 0xd4a5, 0xd4a8, 0xd473, 0xb3e8, 0xd4a9, 0xb0e7, 0xb0d9, 0xb0d6, 0xd47e, 0xb0d3, 0xd4a6, 0xb0da, 0xd4aa, 0xd474, 0xd4a4, 0xb0dd, 0xd475, 0xd478, 0xd47d, 0xb0de, 0xb0dc, 0xb0e8, 0xb0e3, 0xb0d7, 0xb1d2, 0xb0d8, 0xd479, 0xb0e5, 0xb0e0, 0xd4a3, 0xb0d5, 0xb0d4, 0xd471, 0xd472, 0xd86a, 0xb3d7, 0xb3da, 0xd875, 0xb3ee, 0xd878, 0xb3d8, 0xd871, 0xb3de, 0xb3e4, 0xb5bd, 0xb3e2, 0xd86e, 0xb3ef, 0xb3db, 0xb3e3, 0xd876, 0xdcd7, 0xd87b, 0xd86f, 0xd866, 0xd873, 0xd86d, 0xb3e1, 0xd879, 0xb3dd, 0xb3f1, 0xb3ea, 0xb3df, 0xb3dc, 0xb3e7, 0xd87a, 0xd86c, 0xd872, 0xd874, 0xd868, 0xd877, 0xb3d9, 0xd867, 0xb3e0, 0xb3f0, 0xb3ec, 0xd869, 0xb3e6, 0xb3ed, 0xb3e9, 0xb3e5, 0xd870, 0xb3eb, 0xdcd5, 0xdcd1, 0xdce0, 0xdcca, 0xdcd3, 0xb6e5, 0xb6e6, 0xb6de, 0xdcdc, 0xb6e8, 0xdccf, 0xdcce, 0xdccc, 0xdcde, 0xb6dc, 0xdcd8, 0xdccd, 0xb6df, 0xdcd6, 0xb6da, 0xdcd2, 0xdcd9, 0xdcdb, 0xdcdf, 0xb6e3, 0xdccb, 0xb6dd, 0xdcd0, 0xb6d8, 0xb6e4, 0xdcda, 0xb6e0, 0xb6e1, 0xb6e7, 0xb6db, 0xa25f, 0xb6d9, 0xdcd4, 0xb6e2, 0xdcdd, 0xb9cd, 0xb9c8, 0xe155, 0xe151, 0xe14b, 0xb9c2, 0xb9be, 0xe154, 0xb9bf, 0xe14e, 0xe150, 0xe153, 0xb9c4, 0xb9cb, 0xb9c5, 0xe149, 0xb9c6, 0xb9c7, 0xe14c, 0xb9cc, 0xe14a, 0xe14f, 0xb9c3, 0xe148, 0xb9c9, 0xb9c1, 0xb9c0, 0xe14d, 0xe152, 0xb9ca, 0xe147, 0xbc4d, 0xe547, 0xe544, 0xbc47, 0xbc53, 0xbc54, 0xbc4a, 0xe542, 0xbc4c, 0xe4f9, 0xbc52, 0xe546, 0xbc49, 0xe548, 0xbc48, 0xe543, 0xe545, 0xbc4b, 0xe541, 0xe4fa, 0xe4f7, 0xd86b, 0xe4fd, 0xe4f6, 0xe4fc, 0xe4fb, 0xe4f8, 0xbc4f, 0xbc4e, 0xbc50, 0xe4fe, 0xbeb2, 0xe540, 0xe945, 0xe8fd, 0xbebe, 0xe942, 0xbeb6, 0xbeba, 0xe941, 0xbeb9, 0xbeb5, 0xbeb8, 0xbeb3, 0xbebd, 0xe943, 0xe8fe, 0xbebc, 0xe8fc, 0xbebb, 0xe944, 0xe940, 0xbc51, 0xbebf, 0xe946, 0xbeb7, 0xbeb4, 0xecc6, 0xecc8, 0xc07b, 0xecc9, 0xecc7, 0xecc5, 0xecc4, 0xc07d, 0xecc3, 0xc07e, 0xecc1, 0xecc2, 0xc07a, 0xc0a1, 0xc07c, 0xecc0, 0xc250, 0xefbc, 0xefba, 0xefbf, 0xefbd, 0xefbb, 0xefbe, 0xc360, 0xf1f2, 0xf1f3, 0xc456, 0xf1f4, 0xf1f0, 0xf1f5, 0xf1f1, 0xc251, 0xf3fe, 0xf441, 0xc459, 0xf440, 0xc458, 0xc457, 0xc45a, 0xf5c5, 0xf5c6, 0xc4da, 0xc4d9, 0xc4db, 0xf5c4, 0xf6d8, 0xf6d7, 0xc56d, 0xc56f, 0xc56e, 0xf6d9, 0xc5c8, 0xf8a6, 0xc5f1, 0xf8a5, 0xf8ee, 0xc949, 0xa57d, 0xa57c, 0xa65f, 0xa65e, 0xc9c7, 0xa65d, 0xc9c6, 0xa779, 0xcaa9, 0xcaa8, 0xa777, 0xa77a, 0xcaa7, 0xa778, 0xcbf0, 0xcbf1, 0xa954, 0xabaa, 0xd148, 0xd149, 0xae45, 0xae46, 0xd4ac, 0xb0e9, 0xb0eb, 0xd4ab, 0xb0ea, 0xd87c, 0xb3f2, 0xb6e9, 0xb6ea, 0xdce1, 0xb9cf, 0xb9ce, 0xe549, 0xe948, 0xe947, 0xf96b, 0xa467, 0xc959, 0xc96e, 0xc96f, 0xa662, 0xa666, 0xc9c9, 0xa664, 0xa663, 0xc9c8, 0xa665, 0xa661, 0xa660, 0xc9ca, 0xa7a6, 0xa7a3, 0xa77d, 0xcaaa, 0xcaab, 0xa7a1, 0xcaad, 0xa77b, 0xcaae, 0xcaac, 0xa77e, 0xa7a2, 0xa7a5, 0xa7a4, 0xa77c, 0xcaaf, 0xa959, 0xcbfe, 0xa95b, 0xa95a, 0xcc40, 0xa958, 0xa957, 0xcbf5, 0xcbf4, 0xcbf2, 0xcbf7, 0xcbf6, 0xcbf3, 0xcbfc, 0xcbfd, 0xcbfa, 0xcbf8, 0xa956, 0xcbfb, 0xa95c, 0xcc41, 0xcbf9, 0xabab, 0xa955, 0xabac, 0xce54, 0xce5a, 0xabb2, 0xce58, 0xce5e, 0xce55, 0xce59, 0xce5b, 0xce5d, 0xce57, 0xce56, 0xce51, 0xce52, 0xabad, 0xabaf, 0xabae, 0xce53, 0xce5c, 0xabb1, 0xce50, 0xd153, 0xd152, 0xd157, 0xd14e, 0xd151, 0xd150, 0xd154, 0xd158, 0xae47, 0xae4a, 0xd14f, 0xd155, 0xae49, 0xd14a, 0xabb0, 0xd4ba, 0xd156, 0xd14d, 0xae48, 0xd14c, 0xd4b1, 0xb0ec, 0xb0f0, 0xd4c1, 0xd4af, 0xd4bd, 0xb0f1, 0xd4bf, 0xd4c5, 0xd4c9, 0xd4c0, 0xd4b4, 0xd4bc, 0xd4ca, 0xd4c8, 0xd4be, 0xd4b9, 0xd4b2, 0xd8a6, 0xd4b0, 0xb0f5, 0xd4b7, 0xb0f6, 0xb0f2, 0xd4ad, 0xd4c3, 0xd4b5, 0xd4b3, 0xd4c6, 0xb0f3, 0xd4cc, 0xb0ed, 0xb0ef, 0xd4bb, 0xd4b6, 0xae4b, 0xb0ee, 0xd4b8, 0xd4c7, 0xd4cb, 0xd4c2, 0xd4c4, 0xd4ae, 0xd8a1, 0xd8aa, 0xd8a9, 0xb3fa, 0xd8a2, 0xb3fb, 0xb3f9, 0xd8a4, 0xb3f6, 0xd8a8, 0xd8a3, 0xd8a5, 0xd87d, 0xb3f4, 0xd8b2, 0xd8b1, 0xd8ae, 0xb3f3, 0xb3f7, 0xb3f8, 0xd14b, 0xd8ab, 0xb3f5, 0xb0f4, 0xd8ad, 0xd87e, 0xd8b0, 0xd8af, 0xd8b3, 0xdcef, 0xd8ac, 0xd8a7, 0xdce7, 0xb6f4, 0xb6f7, 0xb6f2, 0xdce6, 0xdcea, 0xdce5, 0xb6ec, 0xb6f6, 0xdce2, 0xb6f0, 0xdce9, 0xb6ee, 0xb6ed, 0xdcec, 0xb6ef, 0xdcee, 0xdceb, 0xb6eb, 0xb6f5, 0xdcf0, 0xdce4, 0xdced, 0xdce3, 0xb6f1, 0xb6f3, 0xdce8, 0xdcf1, 0xe15d, 0xb9d0, 0xe163, 0xb9d5, 0xe15f, 0xe166, 0xe157, 0xb9d7, 0xb9d1, 0xe15c, 0xbc55, 0xe15b, 0xe164, 0xb9d2, 0xb9d6, 0xe15a, 0xe160, 0xe165, 0xe156, 0xb9d4, 0xe15e, 0xe162, 0xe168, 0xe158, 0xe161, 0xb9d3, 0xe167, 0xe159, 0xbc59, 0xe54b, 0xbc57, 0xbc56, 0xe54d, 0xe552, 0xe54e, 0xe551, 0xbc5c, 0xbea5, 0xbc5b, 0xe54a, 0xe550, 0xbc5a, 0xe54f, 0xe54c, 0xbc58, 0xe94d, 0xe94f, 0xe94a, 0xbec1, 0xe94c, 0xbec0, 0xe94e, 0xbec3, 0xe950, 0xbec2, 0xe949, 0xe94b, 0xc0a5, 0xeccc, 0xc0a4, 0xeccd, 0xc0a3, 0xeccb, 0xc0a2, 0xecca, 0xc253, 0xc252, 0xf1f6, 0xf1f8, 0xf1f7, 0xc361, 0xc362, 0xc363, 0xf442, 0xc45b, 0xf7d3, 0xf7d2, 0xc5f2, 0xa468, 0xa4d0, 0xa7a7, 0xce5f, 0xb3fc, 0xb3fd, 0xdcf2, 0xb9d8, 0xe169, 0xe553, 0xc95a, 0xcab0, 0xcc42, 0xce60, 0xd159, 0xae4c, 0xf1f9, 0xc4dc, 0xa469, 0xa57e, 0xc970, 0xa667, 0xa668, 0xa95d, 0xb0f7, 0xb9da, 0xb9db, 0xb9d9, 0xa46a, 0xa4d1, 0xa4d3, 0xa4d2, 0xc95b, 0xa4d4, 0xa5a1, 0xc971, 0xa5a2, 0xa669, 0xa66a, 0xc9cb, 0xa7a8, 0xcab1, 0xa961, 0xcc43, 0xa95f, 0xa960, 0xa95e, 0xd15a, 0xabb6, 0xabb5, 0xabb7, 0xabb4, 0xce61, 0xa962, 0xabb3, 0xae4d, 0xae4e, 0xae4f, 0xd4cd, 0xb3fe, 0xd8b4, 0xb0f8, 0xb6f8, 0xb9dd, 0xb9dc, 0xe16a, 0xbc5d, 0xbec4, 0xefc0, 0xf6da, 0xf7d4, 0xa46b, 0xa5a3, 0xa5a4, 0xc9d1, 0xa66c, 0xa66f, 0xc9cf, 0xc9cd, 0xa66e, 0xc9d0, 0xc9d2, 0xc9cc, 0xa671, 0xa670, 0xa66d, 0xa66b, 0xc9ce, 0xa7b3, 0xa7b0, 0xcab6, 0xcab9, 0xcab8, 0xa7aa, 0xa7b2, 0xa7af, 0xcab5, 0xcab3, 0xa7ae, 0xa7a9, 0xa7ac, 0xcab4, 0xcabb, 0xcab7, 0xa7ad, 0xa7b1, 0xa7b4, 0xcab2, 0xcaba, 0xa7ab, 0xa967, 0xa96f, 0xcc4f, 0xcc48, 0xa970, 0xcc53, 0xcc44, 0xcc4b, 0xa966, 0xcc45, 0xa964, 0xcc4c, 0xcc50, 0xa963, 0xcc51, 0xcc4a, 0xcc4d, 0xa972, 0xa969, 0xcc54, 0xcc52, 0xa96e, 0xa96c, 0xcc49, 0xa96b, 0xcc47, 0xcc46, 0xa96a, 0xa968, 0xa971, 0xa96d, 0xa965, 0xcc4e, 0xabb9, 0xabc0, 0xce6f, 0xabb8, 0xce67, 0xce63, 0xce73, 0xce62, 0xabbb, 0xce6c, 0xabbe, 0xabc1, 0xabbc, 0xce70, 0xabbf, 0xae56, 0xce76, 0xce64, 0xce66, 0xce6d, 0xce71, 0xce75, 0xce72, 0xce6b, 0xce6e, 0xce68, 0xabc3, 0xce6a, 0xce69, 0xce74, 0xabba, 0xce65, 0xabc2, 0xabbd, 0xae5c, 0xd162, 0xae5b, 0xd160, 0xae50, 0xae55, 0xd15f, 0xd15c, 0xd161, 0xae51, 0xd15b, 0xae54, 0xae52, 0xd163, 0xae53, 0xae57, 0xae58, 0xae5a, 0xae59, 0xd15d, 0xd15e, 0xd164, 0xd4d4, 0xb0f9, 0xd8c2, 0xd4d3, 0xd4e6, 0xb140, 0xd4e4, 0xb0fe, 0xb0fa, 0xd4ed, 0xd4dd, 0xd4e0, 0xb143, 0xd4ea, 0xd4e2, 0xb0fb, 0xb144, 0xd4e7, 0xd4e5, 0xd4d6, 0xd4eb, 0xd4df, 0xd4da, 0xd4d0, 0xd4ec, 0xd4dc, 0xd4cf, 0xb142, 0xd4e1, 0xd4ee, 0xd4de, 0xd4d2, 0xd4d7, 0xd4ce, 0xb141, 0xd4db, 0xd4d8, 0xb0fc, 0xd4d1, 0xd4e9, 0xb0fd, 0xd4d9, 0xd4d5, 0xd4e8, 0xb440, 0xd8bb, 0xd8b8, 0xd8c9, 0xd8bd, 0xd8ca, 0xb442, 0xd8c6, 0xd8c3, 0xd8c4, 0xd8c7, 0xd8cb, 0xd4e3, 0xd8cd, 0xdd47, 0xb443, 0xd8ce, 0xd8b6, 0xd8c0, 0xd8c5, 0xb441, 0xb444, 0xd8cc, 0xd8cf, 0xd8ba, 0xd8b7, 0xd8b9, 0xd8be, 0xd8bc, 0xb445, 0xd8c8, 0xd8bf, 0xd8c1, 0xd8b5, 0xdcfa, 0xdcf8, 0xb742, 0xb740, 0xdd43, 0xdcf9, 0xdd44, 0xdd40, 0xdcf7, 0xdd46, 0xdcf6, 0xdcfd, 0xb6fe, 0xb6fd, 0xb6fc, 0xdcfb, 0xdd41, 0xb6f9, 0xb741, 0xdcf4, 0xdcfe, 0xdcf3, 0xdcfc, 0xb6fa, 0xdd42, 0xdcf5, 0xb6fb, 0xdd45, 0xe16e, 0xb9e2, 0xb9e1, 0xb9e3, 0xe17a, 0xe170, 0xe176, 0xe16b, 0xe179, 0xe178, 0xe17c, 0xe175, 0xb9de, 0xe174, 0xb9e4, 0xe16d, 0xb9df, 0xe17b, 0xb9e0, 0xe16f, 0xe172, 0xe177, 0xe171, 0xe16c, 0xe173, 0xe555, 0xbc61, 0xe558, 0xe557, 0xe55a, 0xe55c, 0xbc5f, 0xe556, 0xe554, 0xe55d, 0xe55b, 0xe559, 0xe55f, 0xe55e, 0xbc63, 0xbc5e, 0xbc60, 0xbc62, 0xe560, 0xe957, 0xe956, 0xe955, 0xe958, 0xe951, 0xe952, 0xe95a, 0xe953, 0xbec5, 0xe95c, 0xe95b, 0xe954, 0xecd1, 0xc0a8, 0xeccf, 0xecd4, 0xecd3, 0xe959, 0xc0a7, 0xecd2, 0xecce, 0xecd6, 0xecd5, 0xc0a6, 0xecd0, 0xbec6, 0xc254, 0xefc1, 0xf1fa, 0xf1fb, 0xf1fc, 0xc45c, 0xc45d, 0xf443, 0xf5c8, 0xf5c7, 0xf6db, 0xf6dc, 0xf7d5, 0xf8a7, 0xa46c, 0xa46d, 0xa46e, 0xa4d5, 0xa5a5, 0xc9d3, 0xa672, 0xa673, 0xa7b7, 0xa7b8, 0xa7b6, 0xa7b5, 0xa973, 0xcc55, 0xa975, 0xa974, 0xcc56, 0xabc4, 0xae5d, 0xd165, 0xd4f0, 0xb145, 0xb447, 0xd4ef, 0xb446, 0xb9e5, 0xe17d, 0xbec7, 0xc0a9, 0xecd7, 0xc45e, 0xc570, 0xc972, 0xa5a6, 0xc973, 0xa676, 0xa674, 0xa675, 0xa677, 0xa7ba, 0xa7b9, 0xcabc, 0xa7bb, 0xcabd, 0xcc57, 0xcc58, 0xa976, 0xa978, 0xa97a, 0xa977, 0xa97b, 0xa979, 0xabc8, 0xabc5, 0xabc7, 0xabc9, 0xabc6, 0xd166, 0xce77, 0xd168, 0xd167, 0xae63, 0xae5f, 0xae60, 0xae62, 0xae64, 0xae61, 0xae66, 0xae65, 0xb14a, 0xd4f2, 0xd4f1, 0xb149, 0xb148, 0xb147, 0xb14b, 0xb146, 0xd8d5, 0xd8d2, 0xb449, 0xd8d1, 0xd8d6, 0xb44b, 0xd8d4, 0xb448, 0xb44a, 0xd8d3, 0xdd48, 0xdd49, 0xdd4a, 0xb9e6, 0xb9ee, 0xe17e, 0xb9e8, 0xb9ec, 0xe1a1, 0xb9ed, 0xb9e9, 0xb9ea, 0xb9e7, 0xb9eb, 0xbc66, 0xd8d0, 0xbc67, 0xbc65, 0xbc64, 0xe95d, 0xbec8, 0xecd8, 0xecd9, 0xc364, 0xc45f, 0xa46f, 0xa678, 0xabca, 0xd169, 0xae67, 0xb14e, 0xb14d, 0xb14c, 0xb44c, 0xb44d, 0xd8d7, 0xb9ef, 0xbec9, 0xa470, 0xc95c, 0xa4d6, 0xc974, 0xc9d4, 0xa679, 0xa97c, 0xdd4b, 0xa471, 0xa4d7, 0xc9d5, 0xcabe, 0xcabf, 0xa7bc, 0xd8d8, 0xb44e, 0xdd4c, 0xc0aa, 0xa472, 0xa4a8, 0xa4d8, 0xc975, 0xa5a7, 0xa7c0, 0xa7bf, 0xa7bd, 0xa7be, 0xcc59, 0xa97e, 0xa9a1, 0xcc5a, 0xa97d, 0xabce, 0xce78, 0xabcd, 0xabcb, 0xabcc, 0xae6a, 0xae68, 0xd16b, 0xae69, 0xd16a, 0xae5e, 0xd4f3, 0xb150, 0xb151, 0xb14f, 0xb9f0, 0xe1a2, 0xbc68, 0xbc69, 0xe561, 0xc0ab, 0xefc2, 0xefc3, 0xc4dd, 0xf8a8, 0xc94b, 0xa4d9, 0xa473, 0xc977, 0xc976, 0xa67a, 0xc9d7, 0xc9d8, 0xc9d6, 0xc9d9, 0xcac7, 0xcac2, 0xcac4, 0xcac6, 0xcac3, 0xa7c4, 0xcac0, 0xcac1, 0xa7c1, 0xa7c2, 0xcac5, 0xcac8, 0xa7c3, 0xcac9, 0xcc68, 0xcc62, 0xcc5d, 0xa9a3, 0xcc65, 0xcc63, 0xcc5c, 0xcc69, 0xcc6c, 0xcc67, 0xcc60, 0xa9a5, 0xcc66, 0xa9a6, 0xcc61, 0xcc64, 0xcc5b, 0xcc5f, 0xcc6b, 0xa9a7, 0xa9a8, 0xcc5e, 0xcc6a, 0xa9a2, 0xa9a4, 0xceab, 0xcea4, 0xceaa, 0xcea3, 0xcea5, 0xce7d, 0xce7b, 0xceac, 0xcea9, 0xce79, 0xabd0, 0xcea7, 0xcea8, 0xcea6, 0xce7c, 0xce7a, 0xabcf, 0xcea2, 0xce7e, 0xcea1, 0xcead, 0xae6f, 0xae6e, 0xd16c, 0xae6b, 0xd16e, 0xae70, 0xd16f, 0xae73, 0xae71, 0xd170, 0xceae, 0xd172, 0xae6d, 0xae6c, 0xd16d, 0xd171, 0xae72, 0xb153, 0xb152, 0xd4f5, 0xd4f9, 0xd4fb, 0xb154, 0xd4fe, 0xb158, 0xd541, 0xb15a, 0xb156, 0xb15e, 0xb15b, 0xd4f7, 0xb155, 0xd4f6, 0xd4f4, 0xd543, 0xd4f8, 0xb157, 0xd542, 0xb15c, 0xd4fd, 0xd4fc, 0xb15d, 0xd4fa, 0xb159, 0xd544, 0xd540, 0xd8e7, 0xd8ee, 0xd8e3, 0xb451, 0xd8df, 0xd8ef, 0xd8d9, 0xd8ec, 0xd8ea, 0xd8e4, 0xd8ed, 0xd8e6, 0xd8de, 0xd8f0, 0xd8dc, 0xd8e9, 0xd8da, 0xd8f1, 0xb452, 0xd8eb, 0xdd4f, 0xd8dd, 0xb44f, 0xd8e1, 0xb450, 0xd8e0, 0xd8e5, 0xd8e2, 0xd8e8, 0xdd53, 0xdd56, 0xdd4e, 0xdd50, 0xdd55, 0xdd54, 0xb743, 0xd8db, 0xdd52, 0xb744, 0xdd4d, 0xdd51, 0xe1a9, 0xe1b0, 0xe1a7, 0xe1ae, 0xe1a5, 0xe1ad, 0xe1b1, 0xe1a4, 0xe1a8, 0xe1a3, 0xb9f1, 0xe1a6, 0xb9f2, 0xe1ac, 0xe1ab, 0xe1aa, 0xe1af, 0xe565, 0xe567, 0xbc6b, 0xe568, 0xe563, 0xe562, 0xe56c, 0xe56a, 0xbc6a, 0xe56d, 0xe564, 0xe569, 0xe56b, 0xe566, 0xe961, 0xe966, 0xe960, 0xe965, 0xe95e, 0xe968, 0xe964, 0xe969, 0xe963, 0xe95f, 0xe967, 0xe96a, 0xe962, 0xecda, 0xc0af, 0xc0ad, 0xc0ac, 0xc0ae, 0xefc4, 0xf172, 0xf1fd, 0xf444, 0xf445, 0xc460, 0xf5c9, 0xc4de, 0xf5ca, 0xf6de, 0xc572, 0xc571, 0xf6dd, 0xc5c9, 0xf7d6, 0xa474, 0xa67b, 0xc9da, 0xcaca, 0xa8b5, 0xb15f, 0xa475, 0xa5aa, 0xa5a9, 0xa5a8, 0xa7c5, 0xae74, 0xdd57, 0xa476, 0xa477, 0xa478, 0xa4da, 0xabd1, 0xceaf, 0xb453, 0xa479, 0xc95d, 0xa5ab, 0xa5ac, 0xc978, 0xa67c, 0xcacb, 0xa7c6, 0xcacc, 0xa9ae, 0xcc6e, 0xa9ac, 0xa9ab, 0xcc6d, 0xa9a9, 0xcc6f, 0xa9aa, 0xa9ad, 0xabd2, 0xabd4, 0xceb3, 0xceb0, 0xceb1, 0xceb2, 0xceb4, 0xabd3, 0xd174, 0xd173, 0xae76, 0xae75, 0xb162, 0xd546, 0xb161, 0xb163, 0xb160, 0xb455, 0xd545, 0xb456, 0xd8f3, 0xb457, 0xd8f2, 0xb454, 0xdd5a, 0xdd5c, 0xb745, 0xdd5b, 0xdd59, 0xdd58, 0xe1b4, 0xb9f7, 0xb9f5, 0xb9f6, 0xe1b2, 0xe1b3, 0xb9f3, 0xe571, 0xe56f, 0xbc6d, 0xe570, 0xbc6e, 0xbc6c, 0xb9f4, 0xe96d, 0xe96b, 0xe96c, 0xe56e, 0xecdc, 0xc0b0, 0xecdb, 0xefc5, 0xefc6, 0xe96e, 0xf1fe, 0xa47a, 0xa5ad, 0xa67e, 0xc9db, 0xa67d, 0xa9af, 0xb746, 0xa4db, 0xa5ae, 0xabd5, 0xb458, 0xc979, 0xc97a, 0xc9dc, 0xa7c8, 0xcad0, 0xcace, 0xa7c9, 0xcacd, 0xcacf, 0xcad1, 0xa7c7, 0xa9b3, 0xa9b4, 0xa9b1, 0xa9b0, 0xceb8, 0xa9b2, 0xabd6, 0xceb7, 0xceb9, 0xceb6, 0xceba, 0xabd7, 0xae79, 0xd175, 0xd177, 0xae77, 0xd178, 0xae78, 0xd176, 0xceb5, 0xd547, 0xd54a, 0xd54b, 0xd548, 0xb167, 0xb166, 0xb164, 0xb165, 0xd549, 0xb168, 0xb45a, 0xb45b, 0xb45c, 0xdd5d, 0xdd5f, 0xdd61, 0xb748, 0xb747, 0xb459, 0xdd60, 0xdd5e, 0xe1b8, 0xe1b6, 0xe1bc, 0xb9f8, 0xe1bd, 0xe1ba, 0xb9f9, 0xe1b7, 0xe1b5, 0xe1bb, 0xbc70, 0xe573, 0xe1b9, 0xbc72, 0xe574, 0xbc71, 0xbc74, 0xe575, 0xbc6f, 0xbc73, 0xe973, 0xe971, 0xe970, 0xe972, 0xe96f, 0xc366, 0xf446, 0xf447, 0xf5cb, 0xf6df, 0xc655, 0xa9b5, 0xa7ca, 0xabd8, 0xa47b, 0xa4dc, 0xa5af, 0xc9dd, 0xa7cb, 0xcad2, 0xcebb, 0xabd9, 0xb9fa, 0xa47c, 0xa6a1, 0xb749, 0xa47d, 0xa4dd, 0xa4de, 0xa5b1, 0xa5b0, 0xc9de, 0xa6a2, 0xcad3, 0xa7cc, 0xcc71, 0xcc72, 0xcc73, 0xa9b6, 0xa9b7, 0xcc70, 0xa9b8, 0xabda, 0xcebc, 0xd17a, 0xae7a, 0xd179, 0xb169, 0xd54c, 0xb16a, 0xd54d, 0xb45d, 0xdd62, 0xe1bf, 0xe1be, 0xb9fb, 0xbc75, 0xe576, 0xbeca, 0xe974, 0xc0b1, 0xc573, 0xf7d8, 0xcc74, 0xcebd, 0xb16b, 0xd8f4, 0xb74a, 0xc255, 0xa7ce, 0xa7cd, 0xabdb, 0xd17b, 0xb16d, 0xb343, 0xb16e, 0xb16c, 0xb45e, 0xe1c0, 0xb9fc, 0xbc76, 0xc94c, 0xc9df, 0xcad5, 0xa7cf, 0xcad4, 0xa7d0, 0xa9bc, 0xcc77, 0xcc76, 0xa9bb, 0xa9b9, 0xa9ba, 0xcc75, 0xabdd, 0xcebe, 0xabe0, 0xabdc, 0xabe2, 0xabde, 0xabdf, 0xabe1, 0xae7d, 0xae7c, 0xae7b, 0xd54f, 0xb16f, 0xb172, 0xb170, 0xd54e, 0xb175, 0xb171, 0xd550, 0xb174, 0xb173, 0xd8f6, 0xd8f5, 0xb461, 0xb45f, 0xb460, 0xd8f7, 0xb74b, 0xdd64, 0xb74c, 0xdd63, 0xe577, 0xbc78, 0xe1c1, 0xbc77, 0xb9fd, 0xecde, 0xe975, 0xc0b2, 0xecdd, 0xf240, 0xf448, 0xf449, 0xa4df, 0xa5b2, 0xc97b, 0xa7d2, 0xa7d4, 0xc9e2, 0xcad8, 0xcad7, 0xcad6, 0xc9e1, 0xc9e0, 0xa6a4, 0xa7d3, 0xa7d1, 0xa6a3, 0xa9bd, 0xcc78, 0xa9be, 0xcadd, 0xcadf, 0xcade, 0xcc79, 0xcada, 0xa7d8, 0xa7d6, 0xcad9, 0xcadb, 0xcae1, 0xa7d5, 0xcadc, 0xcae5, 0xa9c0, 0xcae2, 0xa7d7, 0xcae0, 0xcae3, 0xa9bf, 0xa9c1, 0xcae4, 0xccaf, 0xcca2, 0xcc7e, 0xccae, 0xcca9, 0xabe7, 0xa9c2, 0xccaa, 0xccad, 0xabe3, 0xccac, 0xa9c3, 0xa9c8, 0xa9c6, 0xcca3, 0xcc7c, 0xcca5, 0xa9cd, 0xccb0, 0xabe4, 0xcca6, 0xabe5, 0xa9c9, 0xcca8, 0xcecd, 0xabe6, 0xcc7b, 0xa9ca, 0xabe8, 0xa9cb, 0xa9c7, 0xa9cc, 0xcca7, 0xcc7a, 0xccab, 0xa9c4, 0xcc7d, 0xcca4, 0xcca1, 0xa9c5, 0xcebf, 0xcec0, 0xceca, 0xd1a1, 0xcecb, 0xabee, 0xcece, 0xcec4, 0xabed, 0xcec6, 0xcec7, 0xcec9, 0xabe9, 0xaea3, 0xcec5, 0xcec1, 0xaea4, 0xcecf, 0xae7e, 0xd17d, 0xcec8, 0xd17c, 0xcec3, 0xcecc, 0xabec, 0xaea1, 0xabf2, 0xaea2, 0xced0, 0xd17e, 0xabeb, 0xaea6, 0xabf1, 0xabf0, 0xabef, 0xaea5, 0xced1, 0xaea7, 0xabea, 0xcec2, 0xb176, 0xd1a4, 0xd1a6, 0xd1a8, 0xaea8, 0xaeae, 0xd553, 0xd1ac, 0xd1a3, 0xb178, 0xd551, 0xaead, 0xaeab, 0xd1ae, 0xd552, 0xd1a5, 0xaeac, 0xd1a9, 0xaeaf, 0xd1ab, 0xaeaa, 0xd1aa, 0xd1ad, 0xd1a7, 0xaea9, 0xb179, 0xd1a2, 0xb177, 0xb17a, 0xd555, 0xd55e, 0xb464, 0xb17c, 0xb1a3, 0xb465, 0xd560, 0xb1aa, 0xd8f9, 0xd556, 0xb1a2, 0xb1a5, 0xb17e, 0xd554, 0xd562, 0xd565, 0xd949, 0xd563, 0xd8fd, 0xb1a1, 0xb1a8, 0xb1ac, 0xd55d, 0xd8f8, 0xd561, 0xb17b, 0xd8fa, 0xd564, 0xd8fc, 0xd559, 0xb462, 0xd557, 0xd558, 0xb1a7, 0xb1a6, 0xd55b, 0xb1ab, 0xd55f, 0xb1a4, 0xd55c, 0xb1a9, 0xb466, 0xb463, 0xd8fb, 0xd55a, 0xb17d, 0xb46b, 0xb46f, 0xd940, 0xb751, 0xb46d, 0xd944, 0xb471, 0xdd65, 0xd946, 0xb753, 0xb469, 0xb46c, 0xd947, 0xd948, 0xd94e, 0xb473, 0xb754, 0xd94a, 0xd94f, 0xd943, 0xb75e, 0xb755, 0xb472, 0xd941, 0xd950, 0xb75d, 0xb470, 0xb74e, 0xd94d, 0xb474, 0xd945, 0xd8fe, 0xb46a, 0xd942, 0xd94b, 0xb74d, 0xb752, 0xb467, 0xd94c, 0xb750, 0xb468, 0xb75c, 0xe1c3, 0xdd70, 0xdd68, 0xe1c2, 0xdd6c, 0xdd6e, 0xdd6b, 0xb75b, 0xdd6a, 0xb75f, 0xe1d2, 0xb75a, 0xba40, 0xdd71, 0xe1c4, 0xb758, 0xdd69, 0xdd6d, 0xb9fe, 0xb74f, 0xdd66, 0xdd67, 0xba41, 0xb757, 0xb759, 0xb756, 0xdd6f, 0xe1c8, 0xe1c9, 0xe1ce, 0xbc7d, 0xe1d5, 0xba47, 0xba46, 0xe1d0, 0xbc7c, 0xe1c5, 0xba45, 0xe1d4, 0xba43, 0xba44, 0xe1d1, 0xe5aa, 0xbc7a, 0xb46e, 0xe1d3, 0xbca3, 0xe1cb, 0xbc7b, 0xbca2, 0xe1c6, 0xe1ca, 0xe1c7, 0xe1cd, 0xba48, 0xbc79, 0xba42, 0xe57a, 0xe1cf, 0xbca1, 0xbca4, 0xe1cc, 0xbc7e, 0xe579, 0xe57e, 0xbece, 0xe578, 0xe9a3, 0xe5a9, 0xbca8, 0xbca6, 0xbecc, 0xe5a6, 0xe5a2, 0xbcac, 0xe978, 0xbcaa, 0xe5a1, 0xe976, 0xe5a5, 0xe5a8, 0xe57d, 0xbcab, 0xbca5, 0xe977, 0xbecd, 0xe5a7, 0xbca7, 0xbca9, 0xe5a4, 0xbcad, 0xe5a3, 0xe57c, 0xe57b, 0xbecb, 0xe5ab, 0xe97a, 0xece0, 0xbed0, 0xe9a2, 0xe97e, 0xece1, 0xbed1, 0xe9a1, 0xe97c, 0xc0b4, 0xecdf, 0xe979, 0xe97b, 0xc0b5, 0xbed3, 0xc0b3, 0xbed2, 0xc0b7, 0xe97d, 0xbecf, 0xefcf, 0xefc7, 0xece7, 0xefc8, 0xece3, 0xc256, 0xece5, 0xece4, 0xc0b6, 0xece2, 0xece6, 0xefd0, 0xefcc, 0xefce, 0xefc9, 0xefca, 0xefcd, 0xefcb, 0xc367, 0xc36a, 0xc369, 0xc368, 0xc461, 0xf44a, 0xc462, 0xf241, 0xc4df, 0xf5cc, 0xc4e0, 0xc574, 0xc5ca, 0xf7d9, 0xf7da, 0xf7db, 0xf9ba, 0xa4e0, 0xc97c, 0xa5b3, 0xa6a6, 0xa6a7, 0xa6a5, 0xa6a8, 0xa7da, 0xa7d9, 0xccb1, 0xa9cf, 0xa9ce, 0xd1af, 0xb1ad, 0xb1ae, 0xb475, 0xdd72, 0xb760, 0xb761, 0xdd74, 0xdd76, 0xdd75, 0xe1d7, 0xe1d6, 0xba49, 0xe1d8, 0xe5ac, 0xbcae, 0xbed4, 0xc0b8, 0xc257, 0xc0b9, 0xa4e1, 0xcae6, 0xccb2, 0xa9d1, 0xa9d0, 0xa9d2, 0xabf3, 0xced2, 0xced3, 0xd1b0, 0xaeb0, 0xb1af, 0xb476, 0xd951, 0xa4e2, 0xa47e, 0xa4e3, 0xc97d, 0xa5b7, 0xa5b6, 0xa5b4, 0xa5b5, 0xa6ab, 0xc9e9, 0xc9eb, 0xa6aa, 0xc9e3, 0xc9e4, 0xc9ea, 0xc9e6, 0xc9e8, 0xa6a9, 0xc9e5, 0xc9ec, 0xc9e7, 0xa7e1, 0xa7ea, 0xa7e8, 0xcaf0, 0xcaed, 0xcaf5, 0xa7e6, 0xcaf6, 0xa7df, 0xcaf3, 0xa7e5, 0xcaef, 0xcaee, 0xa7e3, 0xcaf4, 0xa7e4, 0xa9d3, 0xa7de, 0xcaf1, 0xcae7, 0xa7db, 0xa7ee, 0xcaec, 0xcaf2, 0xa7e0, 0xa7e2, 0xcae8, 0xcae9, 0xcaea, 0xa7ed, 0xa7e7, 0xa7ec, 0xcaeb, 0xa7eb, 0xa7dd, 0xa7dc, 0xa7e9, 0xa9e1, 0xccbe, 0xccb7, 0xa9dc, 0xa9ef, 0xccb3, 0xccba, 0xccbc, 0xccbf, 0xa9ea, 0xccbb, 0xccb4, 0xa9e8, 0xccb8, 0xccc0, 0xa9d9, 0xccbd, 0xa9e3, 0xa9e2, 0xccb6, 0xa9d7, 0xa9d8, 0xa9d6, 0xa9ee, 0xa9e6, 0xa9e0, 0xa9d4, 0xccb9, 0xa9df, 0xa9d5, 0xa9e7, 0xa9f0, 0xced4, 0xa9e4, 0xccb5, 0xa9da, 0xa9dd, 0xa9de, 0xa9ec, 0xa9ed, 0xa9eb, 0xa9e5, 0xa9e9, 0xa9db, 0xabf4, 0xceda, 0xac41, 0xabf8, 0xabfa, 0xac40, 0xcee6, 0xabfd, 0xd1b1, 0xaeb1, 0xac43, 0xced7, 0xcedf, 0xabfe, 0xcede, 0xcedb, 0xcee3, 0xcee5, 0xabf7, 0xabfb, 0xac42, 0xaeb3, 0xcee0, 0xabf9, 0xac45, 0xced9, 0xabfc, 0xaeb2, 0xabf6, 0xced6, 0xcedd, 0xced5, 0xced8, 0xcedc, 0xd1b2, 0xac44, 0xcee1, 0xcee2, 0xcee4, 0xabf5, 0xaec1, 0xd1be, 0xaebf, 0xaec0, 0xd1b4, 0xd1c4, 0xaeb6, 0xd566, 0xd1c6, 0xd1c0, 0xd1b7, 0xd1c9, 0xd1ba, 0xaebc, 0xd57d, 0xd1bd, 0xaebe, 0xaeb5, 0xd1cb, 0xd1bf, 0xaeb8, 0xd1b8, 0xd1b5, 0xd1b6, 0xaeb9, 0xd1c5, 0xd1cc, 0xaebb, 0xd1bc, 0xd1bb, 0xaec3, 0xaec2, 0xaeb4, 0xaeba, 0xaebd, 0xd1c8, 0xd1c2, 0xaeb7, 0xd1b3, 0xd1ca, 0xd1c1, 0xd1c3, 0xd1c7, 0xd567, 0xb1b7, 0xb1cb, 0xb1ca, 0xb1bf, 0xd579, 0xd575, 0xd572, 0xd5a6, 0xb1ba, 0xb1b2, 0xd577, 0xb4a8, 0xb1b6, 0xd5a1, 0xb1cc, 0xb1c9, 0xd57b, 0xd56a, 0xb1c8, 0xd5a3, 0xd569, 0xb1bd, 0xb1c1, 0xd5a2, 0xd573, 0xb1c2, 0xb1bc, 0xd568, 0xb478, 0xd5a5, 0xd571, 0xb1c7, 0xd574, 0xd5a4, 0xb1c6, 0xd952, 0xb1b3, 0xd56f, 0xb1b8, 0xb1c3, 0xb1be, 0xd578, 0xd56e, 0xd56c, 0xd57e, 0xb1b0, 0xb1c4, 0xb1b4, 0xb477, 0xd57c, 0xb1b5, 0xb1b1, 0xb1c0, 0xb1bb, 0xb1b9, 0xd570, 0xb1c5, 0xd56d, 0xd57a, 0xd576, 0xd954, 0xd953, 0xd56b, 0xd964, 0xb47a, 0xd96a, 0xd959, 0xd967, 0xdd77, 0xb47d, 0xd96b, 0xd96e, 0xb47c, 0xd95c, 0xd96d, 0xd96c, 0xb47e, 0xd955, 0xb479, 0xb4a3, 0xb4a1, 0xd969, 0xd95f, 0xb4a5, 0xd970, 0xd968, 0xd971, 0xb4ad, 0xb4ab, 0xd966, 0xd965, 0xd963, 0xd95d, 0xb4a4, 0xb4a2, 0xd1b9, 0xd956, 0xddb7, 0xd957, 0xb47b, 0xb4aa, 0xdd79, 0xb4a6, 0xb4a7, 0xd958, 0xd96f, 0xdd78, 0xd960, 0xd95b, 0xb4a9, 0xd961, 0xd95e, 0xb4ae, 0xb770, 0xdd7c, 0xddb1, 0xddb6, 0xddaa, 0xb76c, 0xddbb, 0xb769, 0xdd7a, 0xdd7b, 0xb762, 0xb76b, 0xdda4, 0xb76e, 0xb76f, 0xdda5, 0xddb2, 0xddb8, 0xb76a, 0xb764, 0xdda3, 0xdd7d, 0xddba, 0xdda8, 0xdda9, 0xdd7e, 0xddb4, 0xddab, 0xddb5, 0xddad, 0xb765, 0xe1d9, 0xb768, 0xb766, 0xddb9, 0xddb0, 0xddac, 0xdda1, 0xba53, 0xddaf, 0xb76d, 0xdda7, 0xdda6, 0xb767, 0xb763, 0xe1ee, 0xddb3, 0xddae, 0xdda2, 0xe1e9, 0xe1da, 0xe1e5, 0xe1ec, 0xba51, 0xb4ac, 0xe1ea, 0xba4c, 0xba4b, 0xe1f1, 0xe1db, 0xe1e8, 0xe1dc, 0xe1e7, 0xba4f, 0xe1eb, 0xd962, 0xe1f2, 0xe1e3, 0xba52, 0xe5ba, 0xbcaf, 0xe1f0, 0xe1ef, 0xba54, 0xe5ad, 0xbcb0, 0xe5ae, 0xe1df, 0xe1e0, 0xe1dd, 0xe1e2, 0xe1de, 0xe1f3, 0xba4e, 0xbcb1, 0xba50, 0xba55, 0xe1e1, 0xe1ed, 0xe1e6, 0xe5b1, 0xba4a, 0xbcb4, 0xe9aa, 0xe5b6, 0xe5b5, 0xe5b7, 0xe5b4, 0xbcb5, 0xbcbb, 0xbcb8, 0xbcb9, 0xe5af, 0xe5b2, 0xe5bc, 0xbcc1, 0xbcbf, 0xe5b3, 0xd95a, 0xbcb2, 0xe5b9, 0xe5b0, 0xbcc2, 0xe5b8, 0xba4d, 0xbcb7, 0xe1e4, 0xbcba, 0xbcbe, 0xbcc0, 0xbcbd, 0xbcbc, 0xbcb6, 0xe5bb, 0xbcb3, 0xbcc3, 0xbed8, 0xbed9, 0xe9a9, 0xbee2, 0xbedf, 0xbed6, 0xbedd, 0xe9ab, 0xbedb, 0xbed5, 0xbedc, 0xe9a8, 0xc0bb, 0xbed7, 0xbede, 0xc0ba, 0xe9a7, 0xe9a6, 0xbee0, 0xbee1, 0xe9a5, 0xe9a4, 0xc0bc, 0xe9ae, 0xbeda, 0xe9ac, 0xc0bd, 0xc0c2, 0xecea, 0xecec, 0xc0bf, 0xeced, 0xece9, 0xeceb, 0xc0c0, 0xc0c3, 0xece8, 0xc0be, 0xc0c1, 0xc259, 0xe9ad, 0xc258, 0xc25e, 0xefd4, 0xc25c, 0xc25d, 0xefd7, 0xefd3, 0xc25a, 0xefd1, 0xc36b, 0xefd5, 0xefd6, 0xefd2, 0xc25b, 0xf242, 0xf245, 0xf246, 0xf244, 0xf247, 0xc36c, 0xf243, 0xf44e, 0xc464, 0xf44d, 0xf44c, 0xf44b, 0xc463, 0xc465, 0xf5cd, 0xc4e2, 0xc4e1, 0xf6e1, 0xf6e0, 0xf6e3, 0xc5cb, 0xc575, 0xf7dd, 0xf6e2, 0xf7dc, 0xc5cd, 0xc5cc, 0xc5f3, 0xf8a9, 0xf8ef, 0xa4e4, 0xd972, 0xe9af, 0xa6ac, 0xcaf7, 0xa7f1, 0xa7ef, 0xa7f0, 0xccc1, 0xa9f1, 0xac46, 0xcee7, 0xcee8, 0xac47, 0xd1ce, 0xaec4, 0xaec5, 0xd1cd, 0xb1d3, 0xb1cf, 0xd5a7, 0xb1d6, 0xb1d5, 0xb1ce, 0xb1d1, 0xb1d4, 0xb1d0, 0xd976, 0xb1cd, 0xb4af, 0xb4b1, 0xb4b2, 0xd975, 0xd978, 0xb4b0, 0xd973, 0xd977, 0xd974, 0xb771, 0xddbc, 0xba56, 0xe1f4, 0xbee3, 0xbcc4, 0xe5bd, 0xbcc5, 0xbcc6, 0xe5bf, 0xe5be, 0xe5c0, 0xe9b1, 0xe9b0, 0xecef, 0xecee, 0xc0c4, 0xc0c5, 0xf248, 0xa4e5, 0xd979, 0xb4b4, 0xb4b3, 0xddbd, 0xefd8, 0xc4e3, 0xf7de, 0xa4e6, 0xaec6, 0xb1d8, 0xb1d7, 0xd97a, 0xd97b, 0xb772, 0xe1f5, 0xba57, 0xe9b2, 0xa4e7, 0xa5b8, 0xa9f2, 0xccc2, 0xcee9, 0xac48, 0xb1d9, 0xd97c, 0xb4b5, 0xb773, 0xe5c1, 0xe5c2, 0xecf0, 0xc25f, 0xf8f0, 0xa4e8, 0xccc3, 0xa9f3, 0xac49, 0xceea, 0xaec7, 0xd1d2, 0xd1d0, 0xd1d1, 0xaec8, 0xd1cf, 0xb1db, 0xb1dc, 0xd5a8, 0xb1dd, 0xb1da, 0xd97d, 0xd97e, 0xddbe, 0xba59, 0xba58, 0xecf1, 0xefd9, 0xf24a, 0xf249, 0xf44f, 0xc95e, 0xac4a, 0xa4e9, 0xa5b9, 0xa6ae, 0xa6ad, 0xa6af, 0xa6b0, 0xc9ee, 0xc9ed, 0xcaf8, 0xa7f2, 0xcafb, 0xcafa, 0xcaf9, 0xcafc, 0xa9f4, 0xccc9, 0xccc5, 0xccce, 0xa9fb, 0xa9f9, 0xccca, 0xccc6, 0xcccd, 0xa9f8, 0xaa40, 0xccc8, 0xccc4, 0xa9fe, 0xcccb, 0xa9f7, 0xcccc, 0xa9fa, 0xa9fc, 0xccd0, 0xcccf, 0xccc7, 0xa9f6, 0xa9f5, 0xa9fd, 0xceef, 0xcef5, 0xac50, 0xac4d, 0xceec, 0xcef1, 0xac53, 0xac4b, 0xcef0, 0xac4e, 0xac51, 0xcef3, 0xac4c, 0xcef8, 0xac4f, 0xac52, 0xceed, 0xcef2, 0xcef6, 0xceee, 0xceeb, 0xcef7, 0xcef4, 0xaed0, 0xaec9, 0xaecc, 0xaecf, 0xd1d5, 0xaeca, 0xd1d3, 0xaece, 0xaecb, 0xd1d6, 0xaecd, 0xd5ac, 0xb1df, 0xd5ab, 0xd5ad, 0xb1de, 0xb1e3, 0xd1d4, 0xd5aa, 0xd5ae, 0xb1e0, 0xd5a9, 0xb1e2, 0xb1e1, 0xd9a7, 0xd9a2, 0xb4b6, 0xb4ba, 0xb4b7, 0xd9a5, 0xd9a8, 0xb4b8, 0xb4b9, 0xb4be, 0xddc7, 0xd9a6, 0xb4bc, 0xd9a3, 0xd9a1, 0xb4bd, 0xd9a4, 0xb779, 0xddbf, 0xb776, 0xb777, 0xb775, 0xddc4, 0xddc3, 0xddc0, 0xb77b, 0xddc2, 0xb4bb, 0xddc6, 0xddc1, 0xb778, 0xb774, 0xb77a, 0xddc5, 0xba5c, 0xe1f8, 0xe1f7, 0xe1f6, 0xba5a, 0xba5b, 0xe5c5, 0xe5c8, 0xbcc8, 0xbcc7, 0xe5c9, 0xe5c4, 0xbcca, 0xe5c6, 0xbcc9, 0xe5c3, 0xe5c7, 0xbee9, 0xbee6, 0xe9bb, 0xe9ba, 0xe9b9, 0xe9b4, 0xe9b5, 0xbee7, 0xbee4, 0xbee8, 0xe9b3, 0xbee5, 0xe9b6, 0xe9b7, 0xe9bc, 0xe9b8, 0xecf2, 0xc0c7, 0xefdc, 0xc0c6, 0xefda, 0xefdb, 0xc260, 0xc36e, 0xf24b, 0xc36d, 0xf451, 0xf452, 0xc466, 0xf450, 0xc4e4, 0xf7df, 0xc5ce, 0xf8aa, 0xf8ab, 0xa4ea, 0xa6b1, 0xa6b2, 0xa7f3, 0xccd1, 0xac54, 0xaed1, 0xb1e4, 0xb0d2, 0xb4bf, 0xb4c0, 0xb3cc, 0xd9a9, 0xb77c, 0xe1fa, 0xe1f9, 0xa4eb, 0xa6b3, 0xccd2, 0xaa42, 0xaa41, 0xcef9, 0xcefa, 0xd1d7, 0xd1d8, 0xaed2, 0xaed3, 0xaed4, 0xd5af, 0xb1e6, 0xb4c2, 0xb4c1, 0xddc8, 0xdf7a, 0xe1fb, 0xe9bd, 0xc261, 0xc467, 0xa4ec, 0xa5bc, 0xa5bd, 0xa5bb, 0xa5be, 0xa5ba, 0xa6b6, 0xc9f6, 0xa6b5, 0xa6b7, 0xc9f1, 0xc9f0, 0xc9f3, 0xc9f2, 0xc9f5, 0xa6b4, 0xc9ef, 0xc9f4, 0xcafd, 0xa7fd, 0xcafe, 0xcb43, 0xa7fc, 0xcb47, 0xcb42, 0xcb45, 0xa7f5, 0xa7f6, 0xa7f7, 0xa7f8, 0xa840, 0xcb41, 0xa7fa, 0xa841, 0xcb40, 0xcb46, 0xa7f9, 0xcb44, 0xa7fb, 0xa7f4, 0xa7fe, 0xaa57, 0xccd4, 0xaa43, 0xaa4d, 0xaa4e, 0xaa46, 0xaa58, 0xaa48, 0xccdc, 0xaa53, 0xccd7, 0xaa49, 0xcce6, 0xcce7, 0xccdf, 0xccd8, 0xaa56, 0xcce4, 0xaa51, 0xaa4f, 0xcce5, 0xcce3, 0xccdb, 0xccd3, 0xccda, 0xaa4a, 0xaa50, 0xaa44, 0xccde, 0xccdd, 0xccd5, 0xaa52, 0xcce1, 0xccd6, 0xaa55, 0xcce8, 0xaa45, 0xaa4c, 0xccd9, 0xcce2, 0xaa54, 0xaa47, 0xaa4b, 0xcce0, 0xcf5b, 0xac5c, 0xac69, 0xcf56, 0xcf4c, 0xac62, 0xcf4a, 0xac5b, 0xcf45, 0xac65, 0xcf52, 0xcefe, 0xcf41, 0xcf44, 0xcefb, 0xcf51, 0xcf61, 0xac60, 0xcf46, 0xcf58, 0xcefd, 0xcf5f, 0xcf60, 0xcf63, 0xcf5a, 0xcf4b, 0xcf53, 0xac66, 0xac59, 0xac61, 0xac6d, 0xac56, 0xac58, 0xcf43, 0xac6a, 0xac63, 0xcf5d, 0xcf40, 0xac6c, 0xac67, 0xcf49, 0xac6b, 0xcf50, 0xcf48, 0xac64, 0xcf5c, 0xcf54, 0xac5e, 0xcf62, 0xcf47, 0xac5a, 0xcf59, 0xcf4f, 0xac5f, 0xcf55, 0xac57, 0xcefc, 0xac68, 0xaee3, 0xac5d, 0xcf4e, 0xcf4d, 0xcf42, 0xcf5e, 0xcf57, 0xac55, 0xd1ec, 0xaeea, 0xd1ed, 0xd1e1, 0xaedf, 0xaeeb, 0xd1da, 0xd1e3, 0xd1eb, 0xd1d9, 0xd1f4, 0xaed5, 0xd1f3, 0xd1ee, 0xd1ef, 0xaedd, 0xaee8, 0xd1e5, 0xd1e6, 0xd1f0, 0xd1e7, 0xd1e2, 0xd1dc, 0xd1dd, 0xd1ea, 0xd1e4, 0xaed6, 0xaeda, 0xd1f2, 0xd1de, 0xaee6, 0xaee2, 0xaee5, 0xaeec, 0xaedb, 0xaee7, 0xd1e9, 0xaee9, 0xaed8, 0xaed7, 0xd1db, 0xd1df, 0xaee0, 0xd1f1, 0xd1e8, 0xd1e0, 0xaee4, 0xaee1, 0xaed9, 0xaedc, 0xd5c4, 0xd5b4, 0xd5b5, 0xd5b9, 0xd5c8, 0xd5c5, 0xd5be, 0xd5bd, 0xb1ed, 0xd5c1, 0xd5d0, 0xd5b0, 0xd5d1, 0xd5c3, 0xd5d5, 0xd5c9, 0xb1ec, 0xd5c7, 0xb1e7, 0xb1fc, 0xb1f2, 0xb1f6, 0xb1f5, 0xd5b1, 0xd5ce, 0xd5d4, 0xd5cc, 0xd5d3, 0xd5c0, 0xd5b2, 0xd5d2, 0xd5c2, 0xb1ea, 0xb1f7, 0xd5cb, 0xb1f0, 0xd5ca, 0xd5b3, 0xb1f8, 0xb1fa, 0xd5cd, 0xb1fb, 0xb1e9, 0xd5ba, 0xd5cf, 0xb1ef, 0xb1f9, 0xd5bc, 0xd5c6, 0xd5b7, 0xd5bb, 0xb1f4, 0xd5b6, 0xb1e8, 0xb1f1, 0xb1ee, 0xd5bf, 0xaede, 0xd9c0, 0xb1eb, 0xb1f3, 0xd9c3, 0xd9d9, 0xd9ce, 0xb4d6, 0xb4d1, 0xd9bd, 0xb4d2, 0xd9cd, 0xd9c6, 0xd9d3, 0xb4ce, 0xd9ab, 0xd9d5, 0xb4c4, 0xd9b3, 0xb4c7, 0xb4c6, 0xb4d7, 0xd9ad, 0xd9cf, 0xd9d0, 0xb4c9, 0xb4c5, 0xd9bb, 0xb4d0, 0xd9b6, 0xd9d1, 0xb4cc, 0xd9c9, 0xd9d6, 0xd9b0, 0xd9b5, 0xd9af, 0xb4cb, 0xd9c2, 0xddde, 0xd9b1, 0xb4cf, 0xd9ba, 0xd9d2, 0xb4ca, 0xd9b7, 0xd9b4, 0xd9c5, 0xb4cd, 0xb4c3, 0xb4d9, 0xd9c8, 0xd9c7, 0xd9ac, 0xb4c8, 0xd9d4, 0xd9bc, 0xd9be, 0xd9cb, 0xd9ca, 0xd9aa, 0xb4d3, 0xb4d5, 0xd9b2, 0xd9b9, 0xd9c1, 0xb4d4, 0xd9b8, 0xd9c4, 0xd9d7, 0xd9cc, 0xd9d8, 0xd9ae, 0xddf2, 0xb7a6, 0xddf0, 0xdddb, 0xdde0, 0xddd9, 0xddec, 0xddcb, 0xddd2, 0xddea, 0xddf4, 0xdddc, 0xddcf, 0xdde2, 0xdde7, 0xddd3, 0xdde4, 0xddd0, 0xddd7, 0xddd8, 0xb7a8, 0xddeb, 0xdde9, 0xddcc, 0xddee, 0xddef, 0xddf1, 0xb7ac, 0xb7a4, 0xd5b8, 0xddd4, 0xdde6, 0xddd5, 0xb7a1, 0xb7b1, 0xdded, 0xb7af, 0xb7ab, 0xddca, 0xb7a3, 0xddcd, 0xb7b0, 0xdddd, 0xddc9, 0xb7a9, 0xdde1, 0xddd1, 0xb7aa, 0xddda, 0xb77e, 0xb4d8, 0xdde3, 0xd9bf, 0xddce, 0xdde8, 0xb7a5, 0xdde5, 0xb7a2, 0xdddf, 0xb7ad, 0xddd6, 0xddf3, 0xb7a7, 0xdec6, 0xb7ae, 0xe24a, 0xe248, 0xe25e, 0xe246, 0xe258, 0xb77d, 0xba5f, 0xe242, 0xe25d, 0xe247, 0xe255, 0xba64, 0xba5d, 0xe25b, 0xe240, 0xe25a, 0xba6f, 0xe251, 0xe261, 0xba6d, 0xe249, 0xba5e, 0xe24b, 0xe259, 0xba67, 0xe244, 0xba6b, 0xba61, 0xe24d, 0xe243, 0xe1fc, 0xe257, 0xba68, 0xe260, 0xe1fd, 0xba65, 0xe253, 0xba66, 0xe245, 0xe250, 0xe24c, 0xe24e, 0xba60, 0xe25f, 0xba6e, 0xe24f, 0xe262, 0xe1fe, 0xe254, 0xba63, 0xba6c, 0xba6a, 0xe241, 0xe256, 0xba69, 0xba62, 0xe252, 0xe25c, 0xe5d5, 0xe5d1, 0xe5cd, 0xe5e1, 0xe5de, 0xbccd, 0xe5e5, 0xe5d4, 0xbcd8, 0xe5db, 0xe5d0, 0xe5da, 0xbcd5, 0xe5ee, 0xe5eb, 0xe5dd, 0xe5ce, 0xe5e2, 0xe5e4, 0xbcd1, 0xe5d8, 0xe5d3, 0xe5ca, 0xbcce, 0xbcd6, 0xe5e7, 0xbcd7, 0xe5cb, 0xe5ed, 0xe5e0, 0xe5e6, 0xbcd4, 0xe5e3, 0xe5ea, 0xbcd9, 0xbcd3, 0xe5dc, 0xe5cf, 0xe5ef, 0xe5cc, 0xe5e8, 0xbcd0, 0xe5d6, 0xe5d7, 0xbccf, 0xbccc, 0xe5d2, 0xbcd2, 0xbccb, 0xe5e9, 0xe5ec, 0xe5d9, 0xe9ca, 0xe9c2, 0xe9be, 0xbef6, 0xbeeb, 0xbef0, 0xbeec, 0xe9cc, 0xe9d7, 0xbeea, 0xe9c4, 0xe9cd, 0xe5df, 0xe9ce, 0xbef1, 0xe9dd, 0xbef5, 0xbef8, 0xe9c0, 0xbef4, 0xe9db, 0xe9dc, 0xe9d2, 0xe9d1, 0xe9c9, 0xe9d3, 0xe9da, 0xe9d9, 0xbeef, 0xbeed, 0xe9cb, 0xe9c8, 0xe9c5, 0xe9d8, 0xbef7, 0xe9d6, 0xbef3, 0xbef2, 0xe9d0, 0xe9bf, 0xe9c1, 0xe9c3, 0xe9d5, 0xe9cf, 0xbeee, 0xe9c6, 0xe9d4, 0xe9c7, 0xc0cf, 0xed45, 0xc0c8, 0xecf5, 0xed41, 0xc0ca, 0xed48, 0xecfc, 0xecf7, 0xed49, 0xecf3, 0xecfe, 0xc0d1, 0xed44, 0xed4a, 0xecfd, 0xc0c9, 0xed40, 0xecf4, 0xc0d0, 0xed47, 0xecf9, 0xc0cc, 0xecfb, 0xecf8, 0xc0d2, 0xecfa, 0xc0cb, 0xc0ce, 0xed43, 0xecf6, 0xed46, 0xed42, 0xc263, 0xefe7, 0xc268, 0xc269, 0xc262, 0xefe6, 0xefe3, 0xefe4, 0xc266, 0xefde, 0xefe2, 0xc265, 0xefdf, 0xc267, 0xc264, 0xefdd, 0xefe1, 0xefe5, 0xf251, 0xf24e, 0xf257, 0xf256, 0xf254, 0xf24f, 0xc372, 0xf250, 0xc371, 0xc0cd, 0xf253, 0xc370, 0xf258, 0xf252, 0xf24d, 0xefe0, 0xc36f, 0xf24c, 0xf456, 0xf455, 0xf255, 0xc468, 0xf459, 0xf45a, 0xf454, 0xf458, 0xf453, 0xf5d1, 0xf457, 0xc4e7, 0xc4e5, 0xf5cf, 0xf5d2, 0xf5ce, 0xf5d0, 0xc4e6, 0xf6e5, 0xf6e6, 0xc576, 0xf6e4, 0xf7e2, 0xc5cf, 0xf7e0, 0xf7e1, 0xf8ac, 0xc656, 0xf8f3, 0xf8f1, 0xf8f2, 0xf8f4, 0xf9bb, 0xa4ed, 0xa6b8, 0xaa59, 0xcce9, 0xcf64, 0xd1f5, 0xd1f7, 0xd1f6, 0xd1f8, 0xb1fd, 0xd5d7, 0xd1f9, 0xd5d6, 0xd5d8, 0xd5d9, 0xd9da, 0xb4db, 0xd9db, 0xd9dd, 0xb4dc, 0xb4da, 0xd9dc, 0xddfa, 0xddf8, 0xddf7, 0xddf6, 0xddf5, 0xb7b2, 0xddf9, 0xba70, 0xe263, 0xe265, 0xba71, 0xe264, 0xbcdb, 0xbcda, 0xe5f0, 0xe9df, 0xe9de, 0xe9e0, 0xbef9, 0xed4b, 0xc0d3, 0xefe8, 0xc26a, 0xf259, 0xc577, 0xa4ee, 0xa5bf, 0xa6b9, 0xa842, 0xaa5a, 0xaa5b, 0xac6e, 0xd1fa, 0xb7b3, 0xe6d1, 0xbefa, 0xc26b, 0xa4ef, 0xa6ba, 0xcceb, 0xaa5c, 0xccea, 0xcf65, 0xac6f, 0xcf66, 0xac70, 0xd1fc, 0xaeee, 0xaeed, 0xd5de, 0xd5dc, 0xd5dd, 0xd5db, 0xd5da, 0xd9de, 0xd9e1, 0xb4de, 0xd9df, 0xb4dd, 0xd9e0, 0xddfb, 0xe266, 0xe267, 0xe268, 0xe5f3, 0xe5f2, 0xbcdc, 0xe5f1, 0xe5f4, 0xe9e1, 0xe9e2, 0xe9e3, 0xed4c, 0xc0d4, 0xc26c, 0xf25a, 0xc4e8, 0xc95f, 0xac71, 0xcf67, 0xaeef, 0xb1fe, 0xb4df, 0xd9e2, 0xb7b5, 0xb7b4, 0xe269, 0xe26a, 0xbcdd, 0xbcde, 0xe9e5, 0xe9e4, 0xefe9, 0xf7e3, 0xa4f0, 0xc960, 0xa5c0, 0xa843, 0xcb48, 0xac72, 0xb7b6, 0xa4f1, 0xcf68, 0xac73, 0xcf69, 0xc0d5, 0xa4f2, 0xccec, 0xcf6a, 0xd242, 0xd241, 0xd1fe, 0xd1fd, 0xd243, 0xd240, 0xb240, 0xb241, 0xb4e0, 0xd9e3, 0xd9e4, 0xd9e5, 0xde41, 0xde42, 0xde40, 0xddfd, 0xddfe, 0xb7b7, 0xe26b, 0xe5f7, 0xe5f6, 0xe5f5, 0xe5f8, 0xe9e7, 0xe9e6, 0xbefb, 0xe9e8, 0xc0d6, 0xed4d, 0xefea, 0xf25b, 0xf6e7, 0xa4f3, 0xa5c2, 0xa5c1, 0xaa5d, 0xc961, 0xc97e, 0xa6bb, 0xc9f7, 0xcb49, 0xcb4a, 0xaa5e, 0xcced, 0xac74, 0xcf6b, 0xcf6c, 0xaef0, 0xaef4, 0xd244, 0xaef3, 0xaef1, 0xaef2, 0xd5df, 0xb242, 0xb4e3, 0xb4e1, 0xb4e2, 0xd9e6, 0xba72, 0xa4f4, 0xc9a1, 0xa5c3, 0xc9a4, 0xa5c6, 0xc9a3, 0xa5c5, 0xa5c4, 0xa844, 0xc9a2, 0xc9f8, 0xc9fc, 0xc9fe, 0xca40, 0xa6c5, 0xa6c6, 0xc9fb, 0xa6c1, 0xc9f9, 0xc9fd, 0xa6c2, 0xa6bd, 0xa6be, 0xa6c4, 0xc9fa, 0xa6bc, 0xa845, 0xa6bf, 0xa6c0, 0xa6c3, 0xcb5b, 0xcb59, 0xcb4c, 0xa851, 0xcb53, 0xa84c, 0xcb4d, 0xcb55, 0xcb52, 0xa84f, 0xcb51, 0xa856, 0xcb5a, 0xa858, 0xa85a, 0xcb4b, 0xa84d, 0xcb5c, 0xa854, 0xa857, 0xcd45, 0xa847, 0xa85e, 0xa855, 0xcb4e, 0xa84a, 0xa859, 0xcb56, 0xa848, 0xa849, 0xcd43, 0xcb4f, 0xa850, 0xa85b, 0xcb5d, 0xcb50, 0xa84e, 0xa853, 0xccee, 0xa85c, 0xcb57, 0xa852, 0xa85d, 0xa846, 0xcb54, 0xa84b, 0xcb58, 0xcd44, 0xaa6a, 0xaa7a, 0xccf5, 0xaa71, 0xcd4b, 0xaa62, 0xaa65, 0xcd42, 0xccf3, 0xccf7, 0xaa6d, 0xaa6f, 0xccfa, 0xaa76, 0xaa68, 0xaa66, 0xaa67, 0xaa75, 0xcd47, 0xaa70, 0xccf9, 0xccfb, 0xaa6e, 0xaa73, 0xccfc, 0xcd4a, 0xac75, 0xaa79, 0xaa63, 0xcd49, 0xcd4d, 0xccf8, 0xcd4f, 0xcd40, 0xaa6c, 0xccf4, 0xaa6b, 0xaa7d, 0xaa72, 0xccf2, 0xcf75, 0xaa78, 0xaa7c, 0xcd41, 0xcd46, 0xaa7e, 0xaa77, 0xaa69, 0xaa5f, 0xaa64, 0xccf6, 0xaa60, 0xcd4e, 0xccf0, 0xccef, 0xccfd, 0xccf1, 0xaa7b, 0xaef5, 0xaa74, 0xccfe, 0xaa61, 0xaca6, 0xcd4c, 0xcf7c, 0xcfa1, 0xcfa4, 0xcf77, 0xcfa7, 0xcfaa, 0xcfac, 0xcf74, 0xac76, 0xac7b, 0xd249, 0xacad, 0xcfa5, 0xcfad, 0xcf7b, 0xcf73, 0xd264, 0xac7e, 0xcfa2, 0xcf78, 0xcf7a, 0xaca5, 0xcf7d, 0xac7d, 0xcf70, 0xcfa8, 0xcfab, 0xac7a, 0xaca8, 0xcf6d, 0xacaa, 0xac78, 0xacae, 0xcfa9, 0xcf6f, 0xacab, 0xd25e, 0xcd48, 0xac7c, 0xac77, 0xcf76, 0xcf6e, 0xacac, 0xaca4, 0xcfa3, 0xaca9, 0xaca7, 0xcf79, 0xaca1, 0xcf71, 0xaca2, 0xaca3, 0xcf72, 0xcfa6, 0xac79, 0xcf7e, 0xd24c, 0xaefd, 0xaf43, 0xd255, 0xd25b, 0xd257, 0xd24a, 0xd24d, 0xd246, 0xd247, 0xaf4a, 0xaefa, 0xd256, 0xd25f, 0xaf45, 0xaef6, 0xaf40, 0xd24e, 0xaf42, 0xd24f, 0xd259, 0xaf44, 0xd268, 0xd248, 0xaefc, 0xaefb, 0xaf48, 0xd245, 0xd266, 0xd25a, 0xd267, 0xd261, 0xd253, 0xd262, 0xd25c, 0xd265, 0xd263, 0xaf49, 0xd254, 0xaef9, 0xaef8, 0xaf41, 0xaf47, 0xd260, 0xaf46, 0xd251, 0xb243, 0xd269, 0xd250, 0xd24b, 0xaefe, 0xaf4b, 0xaef7, 0xd258, 0xd25d, 0xb265, 0xd5e1, 0xd5e5, 0xb252, 0xb250, 0xb247, 0xd5e3, 0xd5e2, 0xb25b, 0xd5e8, 0xb255, 0xd5fa, 0xd647, 0xb244, 0xd5f7, 0xd5f0, 0xb267, 0xd5e0, 0xd5fc, 0xb264, 0xb258, 0xb263, 0xb24e, 0xd5ec, 0xd5fe, 0xd5f6, 0xb24f, 0xb249, 0xd645, 0xd5fd, 0xd640, 0xb251, 0xb259, 0xd642, 0xd5ea, 0xd5fb, 0xd5ef, 0xd644, 0xb25e, 0xb246, 0xb25c, 0xd5f4, 0xd5f2, 0xd5f3, 0xb253, 0xd5ee, 0xd5ed, 0xb248, 0xd5e7, 0xd646, 0xb24a, 0xd5f1, 0xb268, 0xb262, 0xd5e6, 0xb25f, 0xb25d, 0xb266, 0xd5f8, 0xb261, 0xd252, 0xd5f9, 0xb260, 0xd641, 0xb245, 0xd5f5, 0xb257, 0xd5e9, 0xb256, 0xb254, 0xb24c, 0xb24b, 0xd9e7, 0xd643, 0xd5eb, 0xd9fc, 0xb24d, 0xb541, 0xb25a, 0xb4ee, 0xd9f6, 0xb4fc, 0xd9ea, 0xb4eb, 0xb4e7, 0xda49, 0xb4ed, 0xb4f1, 0xb4ec, 0xb4f5, 0xda4d, 0xda44, 0xd9f1, 0xb4fa, 0xb4f4, 0xd9fd, 0xb4e4, 0xda4a, 0xda43, 0xb4e8, 0xd9f7, 0xb4f7, 0xda55, 0xda56, 0xb4e5, 0xda48, 0xb4f9, 0xd9fb, 0xd9ed, 0xd9ee, 0xb4fd, 0xd9f2, 0xd9f9, 0xd9f3, 0xb4fb, 0xb544, 0xd9ef, 0xd9e8, 0xd9e9, 0xd9eb, 0xb4ea, 0xd9f8, 0xb4f8, 0xb542, 0xd9fa, 0xda53, 0xda4b, 0xb4e6, 0xda51, 0xb4f2, 0xb4f0, 0xda57, 0xb4ef, 0xda41, 0xd9f4, 0xd9fe, 0xb547, 0xda45, 0xda42, 0xd9f0, 0xb543, 0xda4f, 0xda4c, 0xda54, 0xb4e9, 0xda40, 0xb546, 0xda47, 0xb4f3, 0xb4f6, 0xda46, 0xb545, 0xd9f5, 0xd5e4, 0xda50, 0xda4e, 0xda52, 0xd9ec, 0xb540, 0xde61, 0xde60, 0xde46, 0xb7bd, 0xde5f, 0xde49, 0xde4a, 0xb7c7, 0xde68, 0xb7c2, 0xde5e, 0xde43, 0xb7c8, 0xb7be, 0xde52, 0xde48, 0xde4b, 0xde63, 0xb7b8, 0xde6a, 0xde62, 0xb7c1, 0xde57, 0xb7cc, 0xb7cb, 0xb7c5, 0xde69, 0xb7b9, 0xde55, 0xde4c, 0xde59, 0xde65, 0xb7cd, 0xb7bb, 0xde54, 0xde4d, 0xb7c4, 0xb7c3, 0xde50, 0xde5a, 0xde64, 0xde47, 0xde51, 0xb7bc, 0xde5b, 0xb7c9, 0xb7c0, 0xde4e, 0xb7bf, 0xde45, 0xde53, 0xde67, 0xb4fe, 0xbab0, 0xde56, 0xe26c, 0xde58, 0xde66, 0xb7c6, 0xde4f, 0xb7ba, 0xb7ca, 0xbcf0, 0xde44, 0xde5d, 0xde5c, 0xe2aa, 0xbaad, 0xe27d, 0xe2a4, 0xbaa2, 0xe26e, 0xbaaf, 0xba77, 0xe26d, 0xe2b0, 0xbab1, 0xe271, 0xe2a3, 0xe273, 0xe2b3, 0xe2af, 0xba75, 0xbaa1, 0xe653, 0xbaae, 0xba7d, 0xe26f, 0xe2ae, 0xbaa3, 0xe2ab, 0xe2b8, 0xe275, 0xe27e, 0xe2b6, 0xe2ac, 0xba7c, 0xe27c, 0xba76, 0xba74, 0xbaa8, 0xe27a, 0xe277, 0xe278, 0xe2b2, 0xe2b7, 0xe2b5, 0xba7a, 0xe2b9, 0xba7e, 0xbaa7, 0xe270, 0xe5fa, 0xe279, 0xba78, 0xbaac, 0xbaa9, 0xba7b, 0xe2a5, 0xe274, 0xbaaa, 0xe2a7, 0xbaa4, 0xbaa6, 0xba73, 0xe2a9, 0xe2a1, 0xe272, 0xbaa5, 0xe2b1, 0xe2b4, 0xe27b, 0xe2a8, 0xba79, 0xbcdf, 0xe2a6, 0xe5f9, 0xe2ad, 0xe276, 0xe644, 0xe64e, 0xbce2, 0xe64d, 0xe659, 0xbce4, 0xe64b, 0xe64f, 0xbcef, 0xe646, 0xbce7, 0xe652, 0xe9f0, 0xbcf3, 0xbcf2, 0xe654, 0xe643, 0xe65e, 0xbced, 0xbce3, 0xe657, 0xe65b, 0xe660, 0xe655, 0xe649, 0xbce6, 0xbce9, 0xbcf1, 0xbcec, 0xe64c, 0xe2a2, 0xe648, 0xe65f, 0xbce8, 0xbceb, 0xe661, 0xbce0, 0xe656, 0xe5fb, 0xe65c, 0xc0df, 0xe64a, 0xbce1, 0xe645, 0xbce5, 0xe5fc, 0xbaab, 0xe641, 0xe65a, 0xe642, 0xe640, 0xbcea, 0xe658, 0xe5fe, 0xe651, 0xe650, 0xe65d, 0xe647, 0xbcee, 0xe9f3, 0xbf49, 0xbefe, 0xea40, 0xe9eb, 0xbf41, 0xe9f7, 0xbf48, 0xbf43, 0xe9f5, 0xed4f, 0xe9fb, 0xea42, 0xe9fa, 0xe9e9, 0xe9f8, 0xea44, 0xea46, 0xbefd, 0xea45, 0xbf44, 0xbf4a, 0xbf47, 0xe9fe, 0xbf46, 0xe9f9, 0xe9ed, 0xe9f2, 0xe9fd, 0xbf45, 0xbf42, 0xbefc, 0xbf40, 0xe9f1, 0xe5fd, 0xe9ec, 0xe9ef, 0xea41, 0xe9f4, 0xe9ea, 0xed4e, 0xea43, 0xe9ee, 0xe9fc, 0xed51, 0xc0e3, 0xc0d7, 0xc0db, 0xed53, 0xed59, 0xed57, 0xc0d9, 0xc0da, 0xc0e1, 0xed5a, 0xed52, 0xc0dc, 0xed56, 0xed55, 0xed5b, 0xc0e2, 0xc0dd, 0xc0e0, 0xed54, 0xc0e4, 0xc0de, 0xc0e5, 0xc0d8, 0xed58, 0xed50, 0xeff7, 0xc271, 0xeff4, 0xeff6, 0xc26f, 0xeff2, 0xeff3, 0xefee, 0xe9f6, 0xefef, 0xc270, 0xefeb, 0xc26d, 0xeff8, 0xc26e, 0xefec, 0xefed, 0xeff1, 0xc273, 0xc272, 0xeff0, 0xc378, 0xf25f, 0xf265, 0xc379, 0xf25c, 0xc376, 0xc373, 0xf267, 0xc377, 0xc374, 0xf25e, 0xf261, 0xf262, 0xf263, 0xf266, 0xeff5, 0xf25d, 0xc375, 0xf264, 0xf268, 0xf260, 0xf45d, 0xc46a, 0xf460, 0xc46b, 0xf468, 0xf45f, 0xf45c, 0xf45e, 0xf462, 0xf465, 0xf464, 0xf467, 0xf45b, 0xc469, 0xf463, 0xf466, 0xf469, 0xf461, 0xf5d3, 0xf5d4, 0xf5d8, 0xf5d9, 0xf5d6, 0xf5d7, 0xf5d5, 0xc4e9, 0xc578, 0xf6eb, 0xf6e8, 0xf6e9, 0xf6ea, 0xc579, 0xf7e5, 0xf7e4, 0xf8af, 0xc5f4, 0xf8ad, 0xf8b0, 0xf8ae, 0xf8f5, 0xc657, 0xc665, 0xf9a3, 0xf96c, 0xf9a2, 0xf9d0, 0xf9d1, 0xa4f5, 0xa6c7, 0xca41, 0xcb5e, 0xa85f, 0xa862, 0xcb5f, 0xa860, 0xa861, 0xcd58, 0xcd5a, 0xcd55, 0xcd52, 0xcd54, 0xaaa4, 0xaaa2, 0xcd56, 0xaaa3, 0xcd53, 0xcd50, 0xaaa1, 0xcd57, 0xcd51, 0xaaa5, 0xcd59, 0xcfaf, 0xcfb3, 0xacb7, 0xcfb6, 0xacaf, 0xacb2, 0xacb4, 0xacb6, 0xacb3, 0xcfb2, 0xcfb1, 0xacb1, 0xcfb4, 0xcfb5, 0xcfae, 0xacb5, 0xacb0, 0xcfb0, 0xd277, 0xd278, 0xd279, 0xaf50, 0xaf4c, 0xd26e, 0xd276, 0xd27b, 0xaf51, 0xd26c, 0xd272, 0xd26b, 0xd275, 0xd271, 0xaf4d, 0xaf4f, 0xd27a, 0xd26a, 0xd26d, 0xd273, 0xd274, 0xd27c, 0xd270, 0xaf4e, 0xb26d, 0xd64e, 0xd650, 0xd64c, 0xd658, 0xd64a, 0xd657, 0xb269, 0xd648, 0xda5b, 0xd652, 0xb26c, 0xd653, 0xd656, 0xd65a, 0xd64f, 0xd654, 0xb26a, 0xb26b, 0xd659, 0xd64d, 0xd649, 0xd65b, 0xd651, 0xd655, 0xd64b, 0xb548, 0xb549, 0xda65, 0xb54f, 0xda59, 0xda62, 0xda58, 0xb54c, 0xda60, 0xda5e, 0xda5f, 0xb54a, 0xda63, 0xda5c, 0xda5a, 0xb54b, 0xda5d, 0xda61, 0xb54d, 0xda64, 0xde70, 0xde77, 0xde79, 0xdea1, 0xb7da, 0xde6b, 0xb7d2, 0xde7a, 0xb7d7, 0xdea2, 0xb7ce, 0xde7d, 0xde6d, 0xde7e, 0xde6c, 0xb7dc, 0xde78, 0xb7cf, 0xdea3, 0xb7d4, 0xde71, 0xb7d9, 0xde7c, 0xde6f, 0xde76, 0xde72, 0xde6e, 0xb7d1, 0xb7d8, 0xb7d6, 0xb7d3, 0xb7db, 0xb7d0, 0xde75, 0xb7d5, 0xb54e, 0xde7b, 0xde73, 0xde74, 0xe2c1, 0xbab4, 0xe2bd, 0xe2c3, 0xe2bf, 0xbab6, 0xe2be, 0xe2c2, 0xe2ba, 0xe2bc, 0xbab5, 0xe2c0, 0xe2bb, 0xbab7, 0xbab2, 0xe2c4, 0xbab3, 0xe667, 0xe664, 0xe670, 0xe66a, 0xe66c, 0xbcf4, 0xe666, 0xe66e, 0xe66d, 0xe66b, 0xe671, 0xbcf7, 0xe668, 0xe66f, 0xbcf5, 0xe663, 0xe665, 0xbcf6, 0xe662, 0xe672, 0xe669, 0xea4a, 0xbf51, 0xea55, 0xea53, 0xbf4b, 0xea49, 0xea4c, 0xea4d, 0xea48, 0xbf55, 0xbf56, 0xea47, 0xea56, 0xea51, 0xbf4f, 0xbf4c, 0xea50, 0xea4e, 0xbf52, 0xea52, 0xbf4d, 0xbf4e, 0xea4f, 0xbf50, 0xea4b, 0xea54, 0xbf53, 0xea57, 0xea58, 0xbf54, 0xc0e7, 0xc0ee, 0xed5c, 0xed62, 0xed60, 0xc0ea, 0xc0e9, 0xc0e6, 0xed5e, 0xc0ec, 0xc0eb, 0xc0e8, 0xed61, 0xed5d, 0xed5f, 0xc0ed, 0xc277, 0xeffb, 0xc274, 0xc275, 0xeffd, 0xc276, 0xeffa, 0xeff9, 0xf26c, 0xeffc, 0xf26d, 0xc37a, 0xf26b, 0xf26a, 0xf269, 0xc37b, 0xc46c, 0xf46a, 0xf46b, 0xf5dc, 0xf5db, 0xc4ea, 0xf5da, 0xf6ec, 0xf6ed, 0xf7e6, 0xf8b1, 0xf8f6, 0xf9bc, 0xc679, 0xf9c6, 0xa4f6, 0xaaa6, 0xaaa7, 0xacb8, 0xc0ef, 0xa4f7, 0xaaa8, 0xaf52, 0xb7dd, 0xa4f8, 0xb26e, 0xbab8, 0xc962, 0xcfb7, 0xd27d, 0xe2c5, 0xc0f0, 0xa4f9, 0xaaa9, 0xcfb8, 0xcfb9, 0xda66, 0xb550, 0xdea4, 0xb7de, 0xe2c6, 0xbcf8, 0xc37c, 0xa4fa, 0xda67, 0xa4fb, 0xa6c9, 0xca42, 0xa6c8, 0xa865, 0xa864, 0xa863, 0xcb60, 0xaaaa, 0xaaab, 0xcd5b, 0xcfba, 0xcfbd, 0xacba, 0xcfbb, 0xacb9, 0xcfbc, 0xacbb, 0xd2a2, 0xd2a1, 0xd27e, 0xaf53, 0xd65d, 0xd65e, 0xb26f, 0xd65c, 0xd65f, 0xb552, 0xb270, 0xb551, 0xda6b, 0xda6a, 0xda68, 0xda69, 0xda6c, 0xdea6, 0xdea5, 0xdea9, 0xdea8, 0xdea7, 0xbab9, 0xe2c9, 0xe2c8, 0xbaba, 0xe2c7, 0xe673, 0xe674, 0xbcf9, 0xea59, 0xea5a, 0xf272, 0xc37d, 0xf271, 0xf270, 0xf26e, 0xf26f, 0xc4eb, 0xf46c, 0xf6ee, 0xf8f7, 0xa4fc, 0xc9a5, 0xa5c7, 0xc9a6, 0xca43, 0xca44, 0xcb66, 0xcb62, 0xcb61, 0xaaac, 0xcb65, 0xa867, 0xcb63, 0xa866, 0xcb67, 0xcb64, 0xcd5f, 0xcfbe, 0xcd5d, 0xcd64, 0xaaad, 0xaab0, 0xcd65, 0xcd61, 0xcd62, 0xcd5c, 0xaaaf, 0xcd5e, 0xaaae, 0xcd63, 0xcd60, 0xcfc2, 0xacbd, 0xacbe, 0xcfc5, 0xcfbf, 0xcfc4, 0xcfc0, 0xacbc, 0xcfc3, 0xcfc1, 0xd2a8, 0xd2a5, 0xd2a7, 0xaf58, 0xaf57, 0xaf55, 0xd2a4, 0xd2a9, 0xaf54, 0xaf56, 0xd2a6, 0xd667, 0xd2a3, 0xd2aa, 0xd662, 0xd666, 0xd665, 0xda6e, 0xda79, 0xd668, 0xd663, 0xda6d, 0xb274, 0xb273, 0xd661, 0xd664, 0xb275, 0xb272, 0xb271, 0xd660, 0xd669, 0xda70, 0xda77, 0xb554, 0xda76, 0xda73, 0xb556, 0xda75, 0xda6f, 0xda71, 0xda74, 0xda72, 0xb555, 0xda78, 0xb553, 0xb7df, 0xdead, 0xdeac, 0xdeaa, 0xb7e2, 0xb7e1, 0xdeae, 0xdeab, 0xe2ca, 0xbabb, 0xb7e0, 0xdeb0, 0xdeaf, 0xe2cd, 0xe2cb, 0xbcfa, 0xbabc, 0xe2cc, 0xe676, 0xbcfb, 0xe675, 0xe67e, 0xe67d, 0xe67b, 0xe67a, 0xe677, 0xe678, 0xe679, 0xe67c, 0xe6a1, 0xea5f, 0xea5c, 0xea5d, 0xbf57, 0xea5b, 0xea61, 0xea60, 0xea5e, 0xed64, 0xed65, 0xc0f1, 0xc0f2, 0xed63, 0xc279, 0xeffe, 0xc278, 0xc37e, 0xc3a1, 0xc46d, 0xf46e, 0xf46d, 0xf5dd, 0xf6ef, 0xc57a, 0xf7e8, 0xf7e7, 0xf7e9, 0xa5c8, 0xcfc6, 0xaf59, 0xb276, 0xd66a, 0xa5c9, 0xc9a7, 0xa4fd, 0xca45, 0xcb6c, 0xcb6a, 0xcb6b, 0xcb68, 0xa868, 0xcb69, 0xcd6d, 0xaab3, 0xcd6b, 0xcd67, 0xcd6a, 0xcd66, 0xaab5, 0xcd69, 0xaab2, 0xaab1, 0xaab4, 0xcd6c, 0xcd68, 0xacc2, 0xacc5, 0xcfce, 0xcfcd, 0xcfcc, 0xacbf, 0xcfd5, 0xcfcb, 0xacc1, 0xd2af, 0xcfd2, 0xcfd0, 0xacc4, 0xcfc8, 0xcfd3, 0xcfca, 0xcfd4, 0xcfd1, 0xcfc9, 0xacc0, 0xcfd6, 0xcfc7, 0xacc3, 0xd2b4, 0xd2ab, 0xd2b6, 0xd2ae, 0xd2b9, 0xd2ba, 0xd2ac, 0xd2b8, 0xd2b5, 0xd2b3, 0xd2b7, 0xaf5f, 0xaf5d, 0xd2b1, 0xd2ad, 0xd2b0, 0xd2bb, 0xd2b2, 0xaf5e, 0xcfcf, 0xaf5a, 0xaf5c, 0xd678, 0xd66d, 0xd66b, 0xd66c, 0xd673, 0xd674, 0xd670, 0xb27b, 0xd675, 0xd672, 0xd66f, 0xb279, 0xd66e, 0xb277, 0xb27a, 0xd671, 0xd679, 0xaf5b, 0xb278, 0xd677, 0xd676, 0xb27c, 0xda7e, 0xdaa1, 0xb560, 0xdaa7, 0xdaa9, 0xdaa2, 0xb55a, 0xdaa6, 0xdaa5, 0xb55b, 0xb561, 0xb562, 0xdaa8, 0xb558, 0xda7d, 0xda7b, 0xdaa3, 0xda7a, 0xb55f, 0xda7c, 0xdaa4, 0xdaaa, 0xb559, 0xb55e, 0xb55c, 0xb55d, 0xb557, 0xb7e9, 0xdeb7, 0xb7e8, 0xdebb, 0xdeb1, 0xdebc, 0xdeb2, 0xdeb3, 0xdebd, 0xdeba, 0xdeb8, 0xdeb9, 0xdeb5, 0xdeb4, 0xdebe, 0xb7e5, 0xdeb6, 0xb7ea, 0xb7e4, 0xb7eb, 0xb7ec, 0xb7e7, 0xb7e6, 0xe2ce, 0xbabe, 0xbabd, 0xe2d3, 0xbcfc, 0xbabf, 0xbac1, 0xe2d4, 0xb7e3, 0xbac0, 0xe2d0, 0xe2d2, 0xe2cf, 0xe2d1, 0xe6ab, 0xe6aa, 0xe6a7, 0xbd40, 0xea62, 0xbd41, 0xe6a6, 0xbcfe, 0xe6a8, 0xe6a5, 0xe6a2, 0xe6a9, 0xe6a3, 0xe6a4, 0xbcfd, 0xed69, 0xea66, 0xea65, 0xea67, 0xed66, 0xbf5a, 0xea63, 0xbf58, 0xbf5c, 0xbf5b, 0xea64, 0xea68, 0xbf59, 0xed6d, 0xc0f5, 0xc27a, 0xc0f6, 0xc0f3, 0xed6a, 0xed68, 0xed6b, 0xed6e, 0xc0f4, 0xed6c, 0xed67, 0xf042, 0xf045, 0xf275, 0xf040, 0xf46f, 0xf046, 0xc3a2, 0xf044, 0xc27b, 0xf041, 0xf043, 0xf047, 0xf276, 0xf274, 0xc3a3, 0xf273, 0xc46e, 0xc4ed, 0xf6f1, 0xc4ec, 0xf6f3, 0xf6f0, 0xf6f2, 0xc5d0, 0xf8b2, 0xa5ca, 0xcd6e, 0xd2bc, 0xd2bd, 0xb27d, 0xdebf, 0xbf5d, 0xc3a4, 0xc57b, 0xf8b3, 0xa5cb, 0xcd6f, 0xa260, 0xcfd7, 0xcfd8, 0xd2be, 0xd2bf, 0xb27e, 0xb2a1, 0xdaab, 0xdec2, 0xdec1, 0xdec0, 0xe2d5, 0xe2d6, 0xe2d7, 0xbac2, 0xe6ad, 0xe6ac, 0xea69, 0xbf5e, 0xbf5f, 0xed72, 0xed6f, 0xed70, 0xed71, 0xf049, 0xf048, 0xc27c, 0xf277, 0xf5de, 0xa5cc, 0xacc6, 0xb2a2, 0xdec3, 0xa5cd, 0xd2c0, 0xb2a3, 0xb563, 0xb564, 0xa5ce, 0xa5cf, 0xca46, 0xa86a, 0xa869, 0xacc7, 0xcfd9, 0xdaac, 0xa5d0, 0xa5d1, 0xa5d2, 0xa5d3, 0xa86b, 0xa86c, 0xcb6e, 0xcb6d, 0xaab6, 0xcd72, 0xcd70, 0xcd71, 0xcfda, 0xcfdb, 0xaccb, 0xacc9, 0xacca, 0xacc8, 0xaf60, 0xaf64, 0xaf63, 0xd2c1, 0xaf62, 0xaf61, 0xd2c2, 0xb2a6, 0xd67b, 0xd67a, 0xb2a4, 0xb2a5, 0xb566, 0xb565, 0xdaae, 0xdaad, 0xb2a7, 0xb7ed, 0xdec5, 0xb7ee, 0xdec4, 0xe2d8, 0xe6ae, 0xbd42, 0xea6a, 0xed73, 0xc3a6, 0xc3a5, 0xc57c, 0xa5d4, 0xcd73, 0xb2a8, 0xe2d9, 0xbac3, 0xcb6f, 0xcb70, 0xcd74, 0xaab8, 0xaab9, 0xaab7, 0xaccf, 0xacd0, 0xaccd, 0xacce, 0xcfdc, 0xcfdd, 0xaccc, 0xd2c3, 0xaf68, 0xaf69, 0xb2ab, 0xd2c9, 0xaf6e, 0xaf6c, 0xd2ca, 0xd2c5, 0xaf6b, 0xaf6a, 0xaf65, 0xd2c8, 0xd2c7, 0xd2c4, 0xaf6d, 0xd2c6, 0xaf66, 0xaf67, 0xb2ac, 0xd6a1, 0xd6a2, 0xb2ad, 0xd67c, 0xd67e, 0xd6a4, 0xd6a3, 0xd67d, 0xb2a9, 0xb2aa, 0xdab6, 0xb56b, 0xb56a, 0xdab0, 0xb568, 0xdab3, 0xb56c, 0xdab4, 0xb56d, 0xdab1, 0xb567, 0xb569, 0xdab5, 0xdab2, 0xdaaf, 0xded2, 0xdec7, 0xb7f0, 0xb7f3, 0xb7f2, 0xb7f7, 0xb7f6, 0xded3, 0xded1, 0xdeca, 0xdece, 0xdecd, 0xb7f4, 0xded0, 0xdecc, 0xded4, 0xdecb, 0xb7f5, 0xb7ef, 0xb7f1, 0xdec9, 0xe2db, 0xbac7, 0xe2df, 0xbac6, 0xe2dc, 0xbac5, 0xdec8, 0xdecf, 0xe2de, 0xbac8, 0xe2e0, 0xe2dd, 0xe2da, 0xe6b1, 0xe6b5, 0xe6b7, 0xe6b3, 0xe6b2, 0xe6b0, 0xbd45, 0xbd43, 0xbd48, 0xbd49, 0xe6b4, 0xbd46, 0xe6af, 0xbd47, 0xbac4, 0xe6b6, 0xbd44, 0xea6c, 0xea6b, 0xea73, 0xea6d, 0xea72, 0xea6f, 0xbf60, 0xea71, 0xbf61, 0xbf62, 0xea70, 0xea6e, 0xc0f8, 0xed74, 0xc0f7, 0xed77, 0xed75, 0xed76, 0xc0f9, 0xf04d, 0xc2a1, 0xf04e, 0xc27d, 0xf04f, 0xc27e, 0xf04c, 0xf050, 0xf04a, 0xc3a7, 0xf278, 0xc3a8, 0xc46f, 0xf04b, 0xc470, 0xc4ee, 0xf5df, 0xc57e, 0xf6f4, 0xc57d, 0xf7ea, 0xc5f5, 0xc5f6, 0xf9cc, 0xacd1, 0xcfde, 0xb56e, 0xb56f, 0xa5d5, 0xa6ca, 0xca47, 0xcb71, 0xa86d, 0xaaba, 0xacd2, 0xacd3, 0xacd4, 0xd6a6, 0xd2cb, 0xaf6f, 0xb2ae, 0xd6a5, 0xdab8, 0xb571, 0xdab7, 0xb570, 0xded5, 0xbd4a, 0xe6bb, 0xe6b8, 0xe6b9, 0xe6ba, 0xed78, 0xf051, 0xf471, 0xf470, 0xf6f5, 0xa5d6, 0xcd75, 0xaf70, 0xb572, 0xded6, 0xe2e1, 0xbd4b, 0xea74, 0xf052, 0xf472, 0xa5d7, 0xaabb, 0xacd7, 0xcfdf, 0xacd8, 0xacd6, 0xacd5, 0xd2cc, 0xaf71, 0xaf72, 0xaf73, 0xb2b0, 0xd6a7, 0xb2af, 0xdab9, 0xb2b1, 0xb573, 0xded7, 0xb7f8, 0xb7f9, 0xbac9, 0xbaca, 0xbd4c, 0xbf64, 0xea75, 0xbf63, 0xed79, 0xc0fa, 0xf053, 0xf473, 0xa5d8, 0xa86e, 0xcd78, 0xcd77, 0xaabc, 0xcd76, 0xaabd, 0xcd79, 0xcfe5, 0xacdb, 0xacda, 0xcfe7, 0xcfe6, 0xacdf, 0xacde, 0xacd9, 0xcfe1, 0xcfe2, 0xcfe3, 0xace0, 0xcfe0, 0xacdc, 0xcfe4, 0xacdd, 0xd2cf, 0xd2d3, 0xd2d1, 0xd2d0, 0xd2d4, 0xd2d5, 0xd2d6, 0xd2ce, 0xd2cd, 0xaf75, 0xaf76, 0xd2d7, 0xd2d2, 0xd6b0, 0xd2d8, 0xaf77, 0xaf74, 0xd6aa, 0xd6a9, 0xd6ab, 0xd6ac, 0xd6ae, 0xd6ad, 0xd6b2, 0xb2b5, 0xb2b2, 0xb2b6, 0xd6a8, 0xb2b7, 0xd6b1, 0xb2b4, 0xd6af, 0xb2b3, 0xdabc, 0xdabe, 0xdaba, 0xdabb, 0xdabf, 0xdac1, 0xdac2, 0xdabd, 0xdac0, 0xb574, 0xdedb, 0xdee0, 0xded8, 0xdedc, 0xdee1, 0xdedd, 0xb7fa, 0xb843, 0xb7fd, 0xded9, 0xdeda, 0xbace, 0xb846, 0xb7fe, 0xb844, 0xb7fc, 0xdedf, 0xb845, 0xdede, 0xb841, 0xb7fb, 0xb842, 0xdee2, 0xe2e6, 0xe2e8, 0xb840, 0xe2e3, 0xbacc, 0xe2e9, 0xbacd, 0xe2e7, 0xe2e2, 0xe2e5, 0xe2ea, 0xbacb, 0xe2e4, 0xbd4e, 0xe6bf, 0xe6be, 0xbd51, 0xbd4f, 0xe6bc, 0xbd4d, 0xe6bd, 0xbd50, 0xea7d, 0xeaa1, 0xea7e, 0xea76, 0xea7a, 0xea79, 0xea77, 0xbf66, 0xbf67, 0xbf65, 0xea78, 0xea7b, 0xea7c, 0xbf68, 0xc140, 0xeda3, 0xc0fc, 0xed7b, 0xc0fe, 0xc141, 0xc0fd, 0xeda2, 0xed7c, 0xc0fb, 0xeda1, 0xed7a, 0xed7e, 0xed7d, 0xf055, 0xc2a4, 0xc2a5, 0xc2a2, 0xc2a3, 0xf054, 0xf27b, 0xc3a9, 0xf279, 0xf27a, 0xf474, 0xf477, 0xf475, 0xf476, 0xf5e0, 0xc4ef, 0xf7eb, 0xf8b4, 0xc5f7, 0xf8f8, 0xf8f9, 0xc666, 0xa5d9, 0xace1, 0xdac3, 0xdee3, 0xa5da, 0xa86f, 0xaabe, 0xcfe8, 0xcfe9, 0xaf78, 0xdac4, 0xb575, 0xb847, 0xc142, 0xeda4, 0xf27c, 0xf478, 0xa5db, 0xcda1, 0xcd7a, 0xcd7c, 0xcd7e, 0xcd7d, 0xcd7b, 0xaabf, 0xace2, 0xcff2, 0xcfed, 0xcfea, 0xcff1, 0xace4, 0xace5, 0xcff0, 0xcfef, 0xcfee, 0xcfeb, 0xcfec, 0xcff3, 0xace3, 0xaf7c, 0xafa4, 0xafa3, 0xd2e1, 0xd2db, 0xd2d9, 0xafa1, 0xd6b9, 0xaf7a, 0xd2de, 0xd2e2, 0xd2e4, 0xd2e0, 0xd2da, 0xafa2, 0xd2df, 0xd2dd, 0xaf79, 0xd2e5, 0xafa5, 0xd2e3, 0xaf7d, 0xd2dc, 0xaf7e, 0xaf7b, 0xb2b9, 0xd6ba, 0xd6b3, 0xd6b5, 0xd6b7, 0xd6b8, 0xd6b6, 0xb2ba, 0xd6bb, 0xd6b4, 0xdac8, 0xb576, 0xdad0, 0xdac5, 0xdad1, 0xdac6, 0xdac7, 0xdacf, 0xdace, 0xdacb, 0xb2b8, 0xb577, 0xdac9, 0xdacc, 0xb578, 0xdacd, 0xdaca, 0xdeee, 0xdef2, 0xb84e, 0xe2f0, 0xb851, 0xdef0, 0xdeed, 0xdee8, 0xdeea, 0xdeeb, 0xdee4, 0xb84d, 0xb84c, 0xb848, 0xdee7, 0xb84f, 0xb850, 0xdee6, 0xdee9, 0xdef1, 0xb84a, 0xb84b, 0xdeef, 0xdee5, 0xe2f2, 0xbad0, 0xe2f4, 0xdeec, 0xe2f6, 0xbad4, 0xe2f7, 0xe2f3, 0xbad1, 0xe2ef, 0xbad3, 0xe2ec, 0xe2f1, 0xe2f5, 0xe2ee, 0xb849, 0xe2eb, 0xbad2, 0xe2ed, 0xbd54, 0xe6c1, 0xbd58, 0xbd56, 0xbacf, 0xe6c8, 0xe6c9, 0xbd53, 0xe6c7, 0xe6ca, 0xbd55, 0xbd52, 0xe6c3, 0xe6c0, 0xe6c5, 0xe6c2, 0xbd59, 0xe6c4, 0xe6c6, 0xbd57, 0xbf6a, 0xeaa8, 0xeaa2, 0xeaa6, 0xeaac, 0xeaad, 0xeaa9, 0xeaaa, 0xeaa7, 0xeaa4, 0xbf6c, 0xbf69, 0xeaa3, 0xeaa5, 0xbf6b, 0xeaab, 0xc146, 0xedaa, 0xeda5, 0xc145, 0xc143, 0xedac, 0xc144, 0xeda8, 0xeda9, 0xeda6, 0xedad, 0xf056, 0xc147, 0xeda7, 0xedae, 0xedab, 0xf05a, 0xf057, 0xc2a6, 0xf05b, 0xf05d, 0xf05c, 0xf058, 0xf059, 0xf2a3, 0xc3aa, 0xf27e, 0xf2a2, 0xf27d, 0xf2a4, 0xf2a1, 0xf47a, 0xf47d, 0xf479, 0xc471, 0xf47b, 0xf47c, 0xf47e, 0xc472, 0xc474, 0xc473, 0xf5e1, 0xf5e3, 0xf5e2, 0xf6f6, 0xf8b5, 0xf8fa, 0xa5dc, 0xcb72, 0xaac0, 0xcda3, 0xaac1, 0xaac2, 0xcda2, 0xcff8, 0xcff7, 0xace6, 0xace9, 0xace8, 0xace7, 0xcff4, 0xcff6, 0xcff5, 0xd2e8, 0xafa7, 0xd2ec, 0xd2eb, 0xd2ea, 0xd2e6, 0xafa6, 0xafaa, 0xafad, 0xafae, 0xd2e7, 0xd2e9, 0xafac, 0xafab, 0xafa9, 0xafa8, 0xd6c2, 0xd6c0, 0xd6bc, 0xb2bb, 0xd6bd, 0xb2bc, 0xd6be, 0xd6bf, 0xd6c1, 0xb2bd, 0xdad5, 0xdad4, 0xdad3, 0xdad2, 0xdef6, 0xb852, 0xdef3, 0xdef5, 0xb853, 0xb854, 0xdef4, 0xe341, 0xe2f9, 0xe2fa, 0xbad7, 0xbad5, 0xbad6, 0xe343, 0xe342, 0xe2fe, 0xe2fd, 0xe2fc, 0xe2fb, 0xe340, 0xe2f8, 0xe6cb, 0xe6d0, 0xe6ce, 0xe6cd, 0xe6cc, 0xe6cf, 0xeaae, 0xbf6d, 0xc148, 0xedb0, 0xc149, 0xedaf, 0xf05f, 0xf05e, 0xc2a7, 0xf2a5, 0xc3ab, 0xf4a1, 0xc5a1, 0xf6f7, 0xf8b7, 0xf8b6, 0xc9a8, 0xacea, 0xaceb, 0xd6c3, 0xb856, 0xa5dd, 0xa872, 0xa871, 0xa870, 0xcda4, 0xaac4, 0xaac3, 0xacee, 0xcffa, 0xcffd, 0xcffb, 0xacec, 0xaced, 0xcff9, 0xcffc, 0xafb5, 0xd2f3, 0xd2f5, 0xd2f4, 0xafb2, 0xd2ef, 0xafb0, 0xafaf, 0xafb3, 0xafb1, 0xafb4, 0xd2f2, 0xd2ed, 0xd2ee, 0xd2f1, 0xd2f0, 0xd6c6, 0xd6c7, 0xd6c5, 0xd6c4, 0xb2be, 0xb57d, 0xdad6, 0xdad8, 0xdada, 0xb57c, 0xb57a, 0xdad7, 0xb57b, 0xdad9, 0xb579, 0xdf41, 0xdef7, 0xdefa, 0xdefe, 0xb85a, 0xdefc, 0xdefb, 0xdef8, 0xdef9, 0xb858, 0xdf40, 0xb857, 0xb85c, 0xb85b, 0xb859, 0xdefd, 0xe349, 0xe348, 0xe344, 0xbad8, 0xe347, 0xe346, 0xbad9, 0xbd5e, 0xe6d2, 0xbd5f, 0xbd5b, 0xbd5d, 0xbd5a, 0xbd5c, 0xeaaf, 0xbf70, 0xeab1, 0xeab0, 0xe345, 0xbf72, 0xbf71, 0xbf6e, 0xbf6f, 0xedb5, 0xedb3, 0xc14a, 0xedb4, 0xedb6, 0xedb2, 0xedb1, 0xf060, 0xc2aa, 0xc2a8, 0xc2a9, 0xf2a6, 0xf2a7, 0xc3ad, 0xc3ac, 0xf4a3, 0xf4a4, 0xf4a2, 0xf6f8, 0xf6f9, 0xa5de, 0xca48, 0xa873, 0xcda5, 0xaac6, 0xaac5, 0xcda6, 0xd040, 0xacef, 0xcffe, 0xacf0, 0xafb6, 0xd2f8, 0xd2f6, 0xd2fc, 0xafb7, 0xd2f7, 0xd2fb, 0xd2f9, 0xd2fa, 0xd6c8, 0xd6ca, 0xb2bf, 0xd6c9, 0xb2c0, 0xb5a2, 0xb5a1, 0xb57e, 0xdadb, 0xdf44, 0xb85d, 0xb85e, 0xdf43, 0xdf42, 0xe34a, 0xbadb, 0xbada, 0xe34b, 0xe34c, 0xbd61, 0xbd60, 0xeab5, 0xe6d3, 0xe6d5, 0xe6d4, 0xeab4, 0xeab2, 0xeab6, 0xeab3, 0xbf73, 0xedb7, 0xc14b, 0xedb8, 0xedb9, 0xc2ab, 0xc2ac, 0xc475, 0xc5d1, 0xa5df, 0xd041, 0xd2fd, 0xafb8, 0xb3ba, 0xb3b9, 0xb5a4, 0xdadd, 0xb5a3, 0xdadc, 0xdf45, 0xbadc, 0xe34d, 0xbadd, 0xc476, 0xf4a5, 0xa6cb, 0xaac7, 0xcda7, 0xacf2, 0xacf1, 0xd042, 0xd043, 0xd340, 0xd342, 0xafb9, 0xd344, 0xd347, 0xd345, 0xd346, 0xd343, 0xd2fe, 0xafba, 0xd348, 0xd341, 0xd6d3, 0xb2c6, 0xd6dc, 0xb2c3, 0xd6d5, 0xb2c7, 0xb2c1, 0xd6d0, 0xd6dd, 0xd6d1, 0xd6ce, 0xb2c5, 0xb2c2, 0xd6d4, 0xd6d7, 0xb2c4, 0xd6d8, 0xb2c8, 0xd6d9, 0xd6cf, 0xd6d6, 0xd6da, 0xd6d2, 0xd6cd, 0xd6cb, 0xd6db, 0xdadf, 0xdae4, 0xdae0, 0xdae6, 0xb5a7, 0xd6cc, 0xdae1, 0xb5a5, 0xdade, 0xb5ac, 0xdae2, 0xb5ab, 0xdae3, 0xb5ad, 0xb5a8, 0xb5ae, 0xb5a9, 0xb5aa, 0xb5a6, 0xdae5, 0xb861, 0xdf50, 0xdf53, 0xdf47, 0xdf4c, 0xdf46, 0xb863, 0xdf4a, 0xdf48, 0xb862, 0xdf4f, 0xdf4e, 0xdf4b, 0xdf4d, 0xdf49, 0xbae1, 0xdf52, 0xb85f, 0xdf51, 0xe35d, 0xbae8, 0xe358, 0xbae7, 0xe34e, 0xe350, 0xbae0, 0xe355, 0xe354, 0xe357, 0xbae5, 0xe352, 0xe351, 0xbae4, 0xbadf, 0xe353, 0xbae2, 0xe359, 0xe35b, 0xe356, 0xe34f, 0xbae3, 0xbd69, 0xbade, 0xe35c, 0xe6d9, 0xbd62, 0xe6db, 0xbd63, 0xbd65, 0xe6de, 0xe6d6, 0xbae6, 0xe6dc, 0xe6d8, 0xb860, 0xbd68, 0xbd64, 0xbd66, 0xbd67, 0xbf76, 0xe6dd, 0xe6d7, 0xbd6a, 0xe6da, 0xeac0, 0xeabb, 0xeac5, 0xbf74, 0xeabd, 0xbf78, 0xeac3, 0xeaba, 0xeab7, 0xeac6, 0xc151, 0xbf79, 0xeac2, 0xeab8, 0xbf77, 0xeabc, 0xbf7b, 0xeab9, 0xeabe, 0xbf7a, 0xeac1, 0xeac4, 0xedcb, 0xedcc, 0xedbc, 0xedc3, 0xedc1, 0xc14f, 0xedc8, 0xeabf, 0xedbf, 0xedc9, 0xc14e, 0xedbe, 0xedbd, 0xedc7, 0xedc4, 0xedc6, 0xedba, 0xedca, 0xc14c, 0xedc5, 0xedce, 0xedc2, 0xc150, 0xc14d, 0xedc0, 0xedbb, 0xedcd, 0xbf75, 0xf063, 0xf061, 0xf067, 0xc2b0, 0xf065, 0xf064, 0xc2b2, 0xf06a, 0xc2b1, 0xf06b, 0xf068, 0xc2ae, 0xf069, 0xf062, 0xc2af, 0xc2ad, 0xf2ab, 0xf066, 0xf06c, 0xf2a8, 0xc3b2, 0xc3b0, 0xf2aa, 0xf2ac, 0xf2a9, 0xc3b1, 0xc3ae, 0xc3af, 0xc3b3, 0xc478, 0xf4aa, 0xf4a9, 0xf4a7, 0xf4a6, 0xf4a8, 0xc477, 0xc479, 0xc4f0, 0xf5e5, 0xf5e4, 0xf6fa, 0xf6fc, 0xf6fe, 0xf6fd, 0xf6fb, 0xc5a3, 0xc5a2, 0xc5d3, 0xc5d2, 0xc5d4, 0xf7ed, 0xf7ec, 0xf8fb, 0xf8b8, 0xf8fc, 0xc658, 0xc659, 0xf96d, 0xc67e, 0xa6cc, 0xcda8, 0xd045, 0xd046, 0xd044, 0xacf3, 0xd047, 0xd048, 0xd049, 0xd349, 0xd34f, 0xd34d, 0xafbb, 0xd34b, 0xd34c, 0xd34e, 0xd34a, 0xb2c9, 0xd6de, 0xb2cb, 0xd6e0, 0xb2ca, 0xd6df, 0xdae8, 0xb5af, 0xdaea, 0xdae7, 0xd6e1, 0xb5b0, 0xdae9, 0xdf56, 0xb864, 0xdf54, 0xb865, 0xdf55, 0xb866, 0xbae9, 0xe361, 0xe35e, 0xe360, 0xbaea, 0xbaeb, 0xe35f, 0xe6df, 0xe6e0, 0xbd6b, 0xe6e2, 0xe6e1, 0xa261, 0xeaca, 0xeacb, 0xeac7, 0xeac8, 0xbf7c, 0xbf7d, 0xeac9, 0xc157, 0xc153, 0xc158, 0xc154, 0xc156, 0xc152, 0xc155, 0xc2b3, 0xedcf, 0xf2ae, 0xf2ad, 0xf4ab, 0xc47a, 0xc47b, 0xf741, 0xf5e6, 0xf740, 0xf8fd, 0xf9a4, 0xa6cd, 0xa874, 0xcda9, 0xaac8, 0xacf6, 0xd04c, 0xacf4, 0xd04a, 0xacf9, 0xacf5, 0xacfa, 0xacf8, 0xd04b, 0xacf7, 0xafbf, 0xafbe, 0xd35a, 0xafc7, 0xd353, 0xd359, 0xafc3, 0xd352, 0xd358, 0xd356, 0xafc2, 0xafc4, 0xd355, 0xafbd, 0xd354, 0xafc8, 0xafc5, 0xafc9, 0xafc6, 0xd351, 0xd350, 0xd357, 0xafc0, 0xafbc, 0xafc1, 0xd6f0, 0xd6e9, 0xb5b5, 0xd6e8, 0xb2cf, 0xb2d6, 0xb2d3, 0xb2d9, 0xb2d8, 0xb2d4, 0xd6e2, 0xd6e5, 0xd6e4, 0xb2d0, 0xd6e6, 0xd6ef, 0xb2d1, 0xd6e3, 0xd6ec, 0xd6ed, 0xb2d2, 0xd6ea, 0xb2d7, 0xb2cd, 0xb2d5, 0xd6e7, 0xb2cc, 0xd6eb, 0xd6ee, 0xdafb, 0xdaf2, 0xb5b2, 0xdaf9, 0xdaf6, 0xdaee, 0xdaf7, 0xb5b4, 0xdaef, 0xdaeb, 0xb86c, 0xdaf4, 0xb5b1, 0xdafa, 0xb5b8, 0xb5ba, 0xdaed, 0xb5b9, 0xdaf0, 0xb5b3, 0xdaf8, 0xdaf1, 0xdaf5, 0xdaf3, 0xb5b6, 0xdaec, 0xb5bb, 0xb2ce, 0xb5b7, 0xb5bc, 0xb868, 0xdf5d, 0xdf5f, 0xdf61, 0xdf65, 0xdf5b, 0xdf59, 0xb86a, 0xdf60, 0xdf64, 0xdf5c, 0xdf58, 0xdf57, 0xdf62, 0xdf5a, 0xdf5e, 0xb86b, 0xb869, 0xdf66, 0xb867, 0xdf63, 0xe372, 0xbaee, 0xe36a, 0xbd78, 0xe374, 0xbaf1, 0xe378, 0xbaf7, 0xe365, 0xe375, 0xe362, 0xe377, 0xe366, 0xbafe, 0xbafb, 0xe376, 0xe370, 0xbaed, 0xbaf5, 0xbaf4, 0xbaf3, 0xbaf9, 0xe363, 0xbafa, 0xe371, 0xbaf6, 0xbaec, 0xe373, 0xbaef, 0xbaf0, 0xbaf8, 0xe368, 0xe367, 0xe364, 0xe36c, 0xe369, 0xe36d, 0xbafd, 0xe379, 0xbaf2, 0xe36e, 0xe36f, 0xe36b, 0xbafc, 0xe6e7, 0xbd70, 0xbd79, 0xbd75, 0xe6e4, 0xbd72, 0xbd76, 0xe6f0, 0xbd6c, 0xe6e8, 0xbd74, 0xe6eb, 0xe6e6, 0xbd73, 0xbd77, 0xe6e5, 0xbd71, 0xe6ef, 0xbd6e, 0xe6ee, 0xe6ed, 0xbd7a, 0xe572, 0xbd6d, 0xe6ec, 0xe6e3, 0xbd7b, 0xe6ea, 0xbd6f, 0xe6e9, 0xbfa2, 0xbfa7, 0xbf7e, 0xead8, 0xeacf, 0xeadb, 0xead3, 0xead9, 0xbfa8, 0xbfa1, 0xeacc, 0xead2, 0xeadc, 0xead5, 0xeada, 0xeace, 0xead6, 0xbfa3, 0xead4, 0xbfa6, 0xbfa5, 0xead0, 0xead1, 0xeacd, 0xead7, 0xbfa4, 0xeade, 0xeadd, 0xedda, 0xedd6, 0xc15f, 0xedd0, 0xc159, 0xc169, 0xeddc, 0xc161, 0xc15d, 0xedd3, 0xc164, 0xc167, 0xedde, 0xc15c, 0xedd5, 0xc165, 0xede0, 0xeddd, 0xedd1, 0xc160, 0xc15a, 0xc168, 0xedd8, 0xc163, 0xedd2, 0xc15e, 0xeddf, 0xc162, 0xc15b, 0xedd9, 0xc166, 0xedd7, 0xeddb, 0xf06e, 0xf074, 0xc2b9, 0xf077, 0xc2b4, 0xc2b5, 0xf06f, 0xf076, 0xf071, 0xc2ba, 0xc2b7, 0xf06d, 0xc2b6, 0xf073, 0xf075, 0xc2b8, 0xf072, 0xf070, 0xf2b8, 0xc3b7, 0xc3b8, 0xc3b4, 0xc3b5, 0xf2b4, 0xf2b2, 0xf2b6, 0xc3ba, 0xf2b7, 0xf2b0, 0xf2af, 0xf2b3, 0xf2b1, 0xc3b6, 0xf2b5, 0xf4ac, 0xc47e, 0xc47d, 0xf4ad, 0xf4af, 0xf4ae, 0xc4a1, 0xf5eb, 0xf5e8, 0xf5e9, 0xf5e7, 0xf5ea, 0xc4f2, 0xf5ec, 0xc4f1, 0xf742, 0xc5d5, 0xc5d7, 0xf7ee, 0xc5d6, 0xf8b9, 0xf940, 0xf942, 0xf8fe, 0xf941, 0xc66c, 0xa6ce, 0xacfb, 0xd26f, 0xafca, 0xb2da, 0xdafc, 0xdafd, 0xeadf, 0xc16a, 0xede1, 0xc2bb, 0xf2ba, 0xf2b9, 0xc4a2, 0xf5ed, 0xf743, 0xc5f8, 0xca49, 0xaac9, 0xa875, 0xd04d, 0xd360, 0xd35b, 0xd35f, 0xd35d, 0xafcb, 0xd35e, 0xd35c, 0xd6f1, 0xdafe, 0xdb40, 0xdf69, 0xdf6a, 0xb86e, 0xb86f, 0xdf68, 0xdf6b, 0xdf67, 0xb86d, 0xbb40, 0xb870, 0xe37a, 0xbd7c, 0xe6f1, 0xbd7d, 0xbfa9, 0xeae2, 0xeae0, 0xeae1, 0xede4, 0xede3, 0xede2, 0xf2bb, 0xc3b9, 0xf2bc, 0xf744, 0xc5f9, 0xf8ba, 0xa6cf, 0xaacb, 0xaaca, 0xd04f, 0xacfc, 0xd04e, 0xd362, 0xafcc, 0xd6f2, 0xd361, 0xb2dc, 0xd6f5, 0xd6f3, 0xd6f4, 0xb2db, 0xdb42, 0xdb43, 0xdb41, 0xb873, 0xdf6d, 0xdf6c, 0xdf6e, 0xb872, 0xb871, 0xe6f2, 0xe6f4, 0xbd7e, 0xe6f3, 0xeae3, 0xbfaa, 0xf079, 0xf078, 0xc3bb, 0xf2bd, 0xc3bd, 0xc3bc, 0xf4b0, 0xf5ee, 0xc4f3, 0xa6d0, 0xd050, 0xacfd, 0xd365, 0xafce, 0xd364, 0xd363, 0xafcd, 0xd6fb, 0xd6fd, 0xd6f6, 0xd6f7, 0xb2dd, 0xd6f8, 0xb2de, 0xd6fc, 0xd6f9, 0xd6fa, 0xb2df, 0xb5be, 0xb5bf, 0xdb44, 0xdf6f, 0xdf70, 0xe37e, 0xbb43, 0xbb41, 0xbb42, 0xe37b, 0xe37c, 0xe37d, 0xe6f9, 0xe6fa, 0xbda1, 0xe6f7, 0xe6f6, 0xe6f8, 0xe6f5, 0xbfad, 0xeae4, 0xbfab, 0xbfac, 0xede6, 0xc16b, 0xede5, 0xefa8, 0xf07a, 0xf07b, 0xc2bc, 0xc2bd, 0xc16c, 0xf2be, 0xf2bf, 0xf4b1, 0xc4a3, 0xa6d1, 0xa6d2, 0xacfe, 0xaacc, 0xafcf, 0xd051, 0xb5c0, 0xa6d3, 0xad41, 0xd052, 0xd053, 0xad40, 0xad42, 0xa6d4, 0xd054, 0xafd1, 0xd366, 0xafd3, 0xafd0, 0xafd2, 0xd741, 0xb2e0, 0xd740, 0xd6fe, 0xdf71, 0xe3a1, 0xbda2, 0xbfae, 0xeae6, 0xeae5, 0xede7, 0xf5ef, 0xa6d5, 0xcb73, 0xcdaa, 0xad43, 0xd055, 0xd368, 0xafd4, 0xd367, 0xafd5, 0xd743, 0xb2e2, 0xd742, 0xd744, 0xb2e1, 0xdb46, 0xdb47, 0xdb45, 0xb5c1, 0xb874, 0xb875, 0xbb45, 0xe3a3, 0xe3a2, 0xbb44, 0xe6fb, 0xe6fc, 0xeae7, 0xc170, 0xc16f, 0xc16d, 0xc16e, 0xc171, 0xf07c, 0xc2bf, 0xc2be, 0xf2c0, 0xf4b2, 0xc5a5, 0xc5a4, 0xa6d6, 0xd1fb, 0xb877, 0xb5c2, 0xb876, 0xbb46, 0xa6d7, 0xc9a9, 0xa6d8, 0xa6d9, 0xcdab, 0xcb76, 0xcb77, 0xa877, 0xcb74, 0xa876, 0xa879, 0xcb75, 0xa87b, 0xa87a, 0xcb78, 0xa878, 0xaad1, 0xaacf, 0xcdad, 0xaace, 0xaad3, 0xaad5, 0xaad2, 0xcdb0, 0xcdac, 0xaad6, 0xaad0, 0xa87c, 0xaad4, 0xcdaf, 0xcdae, 0xaacd, 0xd05b, 0xad47, 0xad48, 0xd05d, 0xd057, 0xd05a, 0xd063, 0xd061, 0xad49, 0xd067, 0xad4c, 0xd064, 0xd05c, 0xd059, 0xdb49, 0xd062, 0xad44, 0xd065, 0xd056, 0xd05f, 0xad46, 0xad4b, 0xd060, 0xad4f, 0xad4d, 0xd058, 0xad4a, 0xd05e, 0xad4e, 0xad45, 0xd066, 0xafda, 0xafe3, 0xafd8, 0xafd6, 0xd36a, 0xafde, 0xafdb, 0xd36c, 0xafdd, 0xd36b, 0xd369, 0xd36e, 0xafe2, 0xafe0, 0xdb48, 0xd36f, 0xd36d, 0xafd7, 0xafd9, 0xafdc, 0xafdf, 0xafe1, 0xd74e, 0xb2e4, 0xd745, 0xd747, 0xd748, 0xd750, 0xd74c, 0xd74a, 0xd74d, 0xd751, 0xb2e5, 0xb2e9, 0xd746, 0xd74f, 0xb2e7, 0xb2e6, 0xd74b, 0xd749, 0xb2e3, 0xb2e8, 0xb5c8, 0xdb51, 0xdb4f, 0xb5ca, 0xdb4a, 0xdfa1, 0xb5c9, 0xdb4e, 0xdb4b, 0xb5c5, 0xb5cb, 0xdb50, 0xb5c7, 0xdb4d, 0xbb47, 0xb5c6, 0xdb4c, 0xb5cc, 0xb5c4, 0xb5c3, 0xdf77, 0xdf75, 0xdf7b, 0xdf73, 0xdfa2, 0xdf78, 0xdf72, 0xb87b, 0xb8a3, 0xdf7d, 0xdf76, 0xb87e, 0xb87c, 0xdf7e, 0xb879, 0xb878, 0xdf79, 0xb87d, 0xb5cd, 0xdf7c, 0xdf74, 0xb87a, 0xb8a1, 0xb8a2, 0xbb4c, 0xbb48, 0xbb4d, 0xe3a6, 0xe3a5, 0xe3a7, 0xbb4a, 0xe3a4, 0xbb4b, 0xe3aa, 0xe3a9, 0xe3a8, 0xbb49, 0xe741, 0xe744, 0xbda8, 0xe743, 0xbda7, 0xbda3, 0xbda4, 0xbda5, 0xe740, 0xe6fe, 0xbda6, 0xe742, 0xe6fd, 0xeae9, 0xeaf3, 0xbfb1, 0xbfb0, 0xeaed, 0xeaef, 0xeaea, 0xeaee, 0xeae8, 0xeaf1, 0xbfaf, 0xeaf0, 0xeaec, 0xeaf2, 0xeaeb, 0xc174, 0xede8, 0xedee, 0xc178, 0xc17a, 0xc177, 0xc176, 0xc175, 0xc173, 0xede9, 0xedec, 0xc172, 0xeded, 0xc179, 0xedeb, 0xedea, 0xc2c0, 0xc2c1, 0xf0a1, 0xf07d, 0xf07e, 0xf2c2, 0xf2c1, 0xc3be, 0xf4b4, 0xc4a4, 0xf4b3, 0xf5f0, 0xf745, 0xc5a6, 0xf943, 0xf944, 0xc5d8, 0xa6da, 0xaad7, 0xdb52, 0xbb4e, 0xc17b, 0xedef, 0xa6db, 0xafe5, 0xafe4, 0xdb53, 0xeaf4, 0xa6dc, 0xad50, 0xdb54, 0xdb55, 0xdb56, 0xbb4f, 0xbfb2, 0xa6dd, 0xaad8, 0xd068, 0xafe6, 0xd370, 0xb2ea, 0xdb57, 0xb8a4, 0xbb50, 0xbfb3, 0xc17c, 0xc2c2, 0xf4b5, 0xa6de, 0xaad9, 0xafe7, 0xd752, 0xb5ce, 0xbb51, 0xe3ab, 0xe745, 0xa6df, 0xb5cf, 0xdfa3, 0xbb52, 0xa6e0, 0xcdb1, 0xd069, 0xad51, 0xd372, 0xafea, 0xafe8, 0xafe9, 0xafeb, 0xd371, 0xd757, 0xd754, 0xd756, 0xb2eb, 0xb2ed, 0xb2ec, 0xd753, 0xb2ee, 0xd755, 0xdb58, 0xdb59, 0xdb5a, 0xdfa6, 0xdfa7, 0xdfa5, 0xdfa8, 0xb8a5, 0xdfa4, 0xbb53, 0xe74a, 0xe746, 0xe749, 0xe74b, 0xe748, 0xe747, 0xeaf5, 0xeaf6, 0xeaf7, 0xbfb4, 0xbfb5, 0xedf1, 0xedf0, 0xedf2, 0xf0a3, 0xf0a2, 0xf2c4, 0xf2c5, 0xf2c3, 0xc4a5, 0xf4b6, 0xf4b7, 0xf746, 0xf7ef, 0xf8bb, 0xa6e1, 0xa87d, 0xc17d, 0xa6e2, 0xd758, 0xdb5b, 0xc641, 0xca4a, 0xca4b, 0xca4d, 0xa6e3, 0xca4e, 0xca4c, 0xcba2, 0xcba3, 0xcb7b, 0xcba1, 0xa8a1, 0xa8a2, 0xcb7c, 0xcb7a, 0xcb79, 0xcb7d, 0xa87e, 0xcb7e, 0xd06a, 0xcdb6, 0xaadc, 0xcdb5, 0xcdb7, 0xaadb, 0xcdbc, 0xaadf, 0xcdb2, 0xcdc0, 0xcdc6, 0xaae6, 0xcdc3, 0xaae3, 0xcdb9, 0xcdbf, 0xcdc1, 0xcdb4, 0xaae2, 0xaadd, 0xcdba, 0xaae4, 0xaae7, 0xaae1, 0xaada, 0xcdbe, 0xcdb8, 0xcdc5, 0xaae9, 0xaae5, 0xaae0, 0xcdbd, 0xafec, 0xcdbb, 0xaade, 0xaae8, 0xcdb3, 0xcdc2, 0xcdc4, 0xad62, 0xad5c, 0xad64, 0xad61, 0xd071, 0xd074, 0xad5d, 0xd06b, 0xad56, 0xad60, 0xad63, 0xad65, 0xd0a2, 0xd077, 0xad55, 0xd0a1, 0xad59, 0xad57, 0xad52, 0xd06f, 0xd07e, 0xd073, 0xd076, 0xd0a5, 0xad66, 0xd07d, 0xad5e, 0xd078, 0xd0a4, 0xd075, 0xd079, 0xd07c, 0xd06d, 0xd0a3, 0xd07b, 0xd06c, 0xd070, 0xad5f, 0xad5a, 0xad53, 0xad58, 0xad54, 0xad67, 0xd06e, 0xd3a5, 0xad5b, 0xd07a, 0xce41, 0xd3a8, 0xaffa, 0xd376, 0xd3a3, 0xd37d, 0xd3b2, 0xd3aa, 0xd37e, 0xd3a9, 0xd378, 0xd37c, 0xd3b5, 0xaffd, 0xd3ad, 0xd3a4, 0xafed, 0xd3b3, 0xd374, 0xd3ac, 0xaffc, 0xaff7, 0xd373, 0xaff5, 0xaff4, 0xaff9, 0xd3ab, 0xaff1, 0xaff8, 0xd072, 0xdb5c, 0xd3a6, 0xd37a, 0xaffb, 0xd37b, 0xd3a1, 0xaffe, 0xd375, 0xd3af, 0xd3ae, 0xd3b6, 0xaff3, 0xaff0, 0xd3b4, 0xd3b0, 0xd3a7, 0xd3a2, 0xaff6, 0xaff2, 0xd377, 0xafee, 0xd3b1, 0xafef, 0xd379, 0xd75e, 0xd760, 0xd765, 0xd779, 0xb2fc, 0xb2f2, 0xd75d, 0xb2fd, 0xb2fe, 0xd768, 0xd76f, 0xd775, 0xd762, 0xd769, 0xb340, 0xd777, 0xd772, 0xb2fa, 0xb2f8, 0xd76e, 0xd76a, 0xd75c, 0xb2ef, 0xd761, 0xd759, 0xb2f7, 0xb2f9, 0xd766, 0xd763, 0xb2f4, 0xd773, 0xb2f1, 0xd764, 0xd77a, 0xd76c, 0xd76b, 0xb2f0, 0xb2fb, 0xb2f3, 0xd75a, 0xd75f, 0xd770, 0xd776, 0xb341, 0xd75b, 0xd767, 0xd76d, 0xb2f6, 0xd778, 0xd771, 0xd774, 0xb2f5, 0xdb6c, 0xdb60, 0xb5d7, 0xdb7d, 0xdba7, 0xdbaa, 0xb5d5, 0xdb68, 0xdba3, 0xdb69, 0xdb77, 0xb5e2, 0xdb73, 0xb5df, 0xdb74, 0xdb5d, 0xdba4, 0xb5e8, 0xdba1, 0xdb75, 0xdbac, 0xdb70, 0xdfc8, 0xdbaf, 0xb5e6, 0xdb6e, 0xdb7a, 0xb5e9, 0xb5d4, 0xdb72, 0xdbad, 0xdb6b, 0xdb64, 0xdb6f, 0xdb63, 0xdb61, 0xb5d0, 0xdba5, 0xdb6a, 0xdba8, 0xdba9, 0xb5d8, 0xb5dd, 0xb5d9, 0xb5e1, 0xdb7e, 0xb5da, 0xdb76, 0xdb66, 0xb5d2, 0xdb5e, 0xdba2, 0xdbab, 0xdb65, 0xb5e0, 0xdbb0, 0xdb71, 0xdb6d, 0xb5d1, 0xb5e5, 0xdb7c, 0xb5e7, 0xdb78, 0xb5dc, 0xb5d6, 0xb5de, 0xb5d3, 0xb5e4, 0xdb79, 0xdb67, 0xdb7b, 0xdb62, 0xdba6, 0xdbae, 0xdb5f, 0xdfc7, 0xdfdd, 0xb855, 0xdfcc, 0xdfca, 0xdfb5, 0xb8a9, 0xdfc5, 0xdfd9, 0xdfc1, 0xb8b1, 0xdfd8, 0xdfbf, 0xb5e3, 0xdfcf, 0xdfc0, 0xdfd6, 0xb8b0, 0xb8a8, 0xdfaa, 0xdfb2, 0xdfcb, 0xdfc3, 0xdfdc, 0xdfc6, 0xb8b6, 0xdfd7, 0xb8ad, 0xdfc9, 0xdfd1, 0xdfb6, 0xdfd0, 0xdfe1, 0xdfb1, 0xdfd2, 0xdfdf, 0xdfab, 0xb5db, 0xdfb9, 0xdfb8, 0xb8af, 0xdfbc, 0xdfbe, 0xdfcd, 0xdfde, 0xb8b2, 0xb8b3, 0xdfb0, 0xb8ab, 0xdfb4, 0xdfda, 0xb8b4, 0xb8ac, 0xb8ae, 0xb8b5, 0xdfe0, 0xdfd3, 0xdfce, 0xdfbb, 0xdfba, 0xb8aa, 0xdfac, 0xb8a7, 0xdfc4, 0xdfad, 0xdfc2, 0xdfb7, 0xdfdb, 0xb8a6, 0xdfb3, 0xdfaf, 0xdfd5, 0xdfae, 0xbb60, 0xe3d3, 0xe3c2, 0xe3ac, 0xe3ca, 0xbb58, 0xe3bb, 0xe3c5, 0xbb5b, 0xe3be, 0xbb59, 0xe3af, 0xe3cd, 0xe3ae, 0xe3c1, 0xe3ad, 0xe3bf, 0xe3c8, 0xe3c6, 0xe3ba, 0xe3b5, 0xe3b3, 0xe3b4, 0xe3c7, 0xe3d2, 0xe3bc, 0xbb5a, 0xe3b7, 0xe3cb, 0xbb5d, 0xe3b6, 0xe3b0, 0xe3c0, 0xbb61, 0xbb55, 0xbb5e, 0xe3b8, 0xe3b2, 0xbb57, 0xdfd4, 0xbb56, 0xe3c3, 0xbb54, 0xbb63, 0xbb5c, 0xe3c4, 0xe3b9, 0xe3b1, 0xe3cc, 0xe3bd, 0xbb62, 0xe3d0, 0xbb5f, 0xe3cf, 0xe3c9, 0xe3ce, 0xe3d1, 0xe773, 0xe774, 0xe767, 0xe766, 0xe762, 0xbdb4, 0xbdac, 0xe776, 0xe775, 0xdfa9, 0xe75f, 0xe763, 0xe75d, 0xe770, 0xe761, 0xe777, 0xe75a, 0xe758, 0xe764, 0xe76e, 0xe769, 0xbdb6, 0xe74f, 0xe76d, 0xbdb7, 0xdfbd, 0xe75b, 0xe752, 0xe755, 0xe77b, 0xe75c, 0xe753, 0xe751, 0xe74e, 0xbdb0, 0xe765, 0xbdaf, 0xbdb3, 0xe760, 0xe768, 0xbda9, 0xe778, 0xe77c, 0xbdab, 0xe757, 0xe76b, 0xe76f, 0xe754, 0xe779, 0xbdb2, 0xbdb1, 0xe74c, 0xbdb5, 0xe772, 0xe756, 0xe76a, 0xe750, 0xe75e, 0xe759, 0xbdad, 0xbdae, 0xe76c, 0xe77d, 0xe77a, 0xe771, 0xe74d, 0xbdaa, 0xeb49, 0xeb40, 0xeb43, 0xbfbb, 0xeb45, 0xeaf9, 0xeb41, 0xeb47, 0xbfb8, 0xbfbc, 0xbfb6, 0xeafb, 0xeb4c, 0xeb46, 0xeafc, 0xeb55, 0xeb4f, 0xeaf8, 0xee46, 0xeafe, 0xbfb7, 0xeb4a, 0xeb54, 0xbfbf, 0xeb51, 0xeafd, 0xeb44, 0xeb48, 0xeb42, 0xeb56, 0xeb53, 0xeb50, 0xbfb9, 0xbfba, 0xbfbe, 0xeafa, 0xeb57, 0xbfbd, 0xeb4d, 0xeb4b, 0xeb4e, 0xee53, 0xee40, 0xee45, 0xee52, 0xee44, 0xedfb, 0xee41, 0xc1a2, 0xedf4, 0xee4d, 0xee4f, 0xedf3, 0xc1a1, 0xee51, 0xee49, 0xc1a8, 0xee50, 0xee42, 0xc1aa, 0xedf9, 0xeb52, 0xee4a, 0xee47, 0xedf5, 0xee55, 0xc1a4, 0xc1a5, 0xedf7, 0xee48, 0xee54, 0xee4b, 0xedfd, 0xc1a7, 0xc1a3, 0xee4c, 0xedfe, 0xee56, 0xedf8, 0xee43, 0xee4e, 0xedfa, 0xedfc, 0xc2cb, 0xedf6, 0xc1a9, 0xc2c4, 0xc17e, 0xc1a6, 0xc2c8, 0xf0b3, 0xf0a9, 0xf0a4, 0xf0aa, 0xf0b4, 0xf0b8, 0xf0b7, 0xc2ca, 0xc2c9, 0xf0ab, 0xf0b9, 0xf0ae, 0xf0a6, 0xf0a8, 0xf0a7, 0xf0ad, 0xf0b2, 0xf0a5, 0xf0ac, 0xf0b1, 0xc2c7, 0xf0af, 0xc2c5, 0xf0b0, 0xc2c3, 0xc2c6, 0xf2d5, 0xf0b5, 0xc3c2, 0xf2cd, 0xf2d1, 0xf2c9, 0xf2cc, 0xf2d4, 0xc3c0, 0xf2d9, 0xf2d2, 0xf2ca, 0xf2da, 0xf2d3, 0xc3c3, 0xc3c4, 0xf2d7, 0xf2cb, 0xc3bf, 0xc3c1, 0xf2c6, 0xf2ce, 0xf2c8, 0xf2d8, 0xf2d6, 0xf2c7, 0xf2cf, 0xf4be, 0xc3c5, 0xf2d0, 0xc4a7, 0xc4a9, 0xc4a6, 0xf4c3, 0xf4bb, 0xf4b9, 0xf4bd, 0xf4ba, 0xf4bf, 0xf4c1, 0xc4aa, 0xc4ac, 0xf4c0, 0xc4ad, 0xc4ab, 0xf4c2, 0xc4a8, 0xc4f4, 0xf5f1, 0xf5f7, 0xc4f6, 0xf4bc, 0xf5f6, 0xf5fd, 0xf5f4, 0xf5fb, 0xf5fa, 0xf4b8, 0xf5f5, 0xf0b6, 0xf5fe, 0xf5f3, 0xf5f8, 0xf5fc, 0xf5f2, 0xf74a, 0xc4f5, 0xf5f9, 0xf7f4, 0xf74b, 0xf749, 0xf747, 0xf748, 0xf74c, 0xc5d9, 0xf7f2, 0xf7f0, 0xf7f5, 0xf7f3, 0xf7f6, 0xc5da, 0xf7f1, 0xf8bc, 0xf945, 0xf946, 0xf947, 0xf9c7, 0xf9bd, 0xca4f, 0xaaea, 0xad68, 0xd3b8, 0xd3b7, 0xb040, 0xb342, 0xd77c, 0xd77b, 0xb5ea, 0xb8b8, 0xb8b7, 0xb8b9, 0xe3d4, 0xe77e, 0xeb58, 0xeb5a, 0xeb59, 0xc1ab, 0xee57, 0xf0ba, 0xf9a5, 0xa6e4, 0xcdc9, 0xcdca, 0xcdc8, 0xcdc7, 0xaaeb, 0xd0a9, 0xd0a7, 0xd0a6, 0xad69, 0xad6b, 0xad6a, 0xd0a8, 0xd3c4, 0xd3c1, 0xd3bf, 0xb041, 0xd3c2, 0xb046, 0xd3bc, 0xd3cb, 0xd3cd, 0xd3bd, 0xb043, 0xd3ce, 0xd3c9, 0xd3bb, 0xd3c0, 0xd3ca, 0xd3c6, 0xd3c3, 0xb048, 0xd3cc, 0xd3be, 0xd3c7, 0xd3b9, 0xb047, 0xb044, 0xd3c5, 0xd3c8, 0xd3ba, 0xb045, 0xb042, 0xb34c, 0xd7a5, 0xb34b, 0xd7a8, 0xd7ab, 0xb348, 0xb346, 0xd77e, 0xd7a9, 0xd7a7, 0xd7a4, 0xd7ac, 0xd7ad, 0xd7af, 0xd7b0, 0xd77d, 0xb345, 0xd7a2, 0xd7a1, 0xd7ae, 0xb347, 0xd7a3, 0xb349, 0xb344, 0xd7a6, 0xb34d, 0xb34a, 0xd7aa, 0xb5f1, 0xdbbf, 0xdbb4, 0xb5ee, 0xdfe7, 0xdbbd, 0xdbb1, 0xb5ec, 0xdbb6, 0xb5ef, 0xdbba, 0xdbb8, 0xb5f2, 0xb5eb, 0xdbb2, 0xdbb5, 0xb5f0, 0xdbb3, 0xdbbe, 0xdbbc, 0xdbb7, 0xdbb9, 0xdbbb, 0xb5ed, 0xdfe8, 0xdfee, 0xdfe4, 0xdfea, 0xb8ba, 0xdfe6, 0xb8c0, 0xb8bf, 0xb8be, 0xdfed, 0xb8c1, 0xb8c2, 0xdfe3, 0xdff0, 0xb8c3, 0xb8bd, 0xb8bc, 0xdfec, 0xb8c4, 0xdfe2, 0xdfe5, 0xdfef, 0xdfeb, 0xe3f4, 0xe3e9, 0xb8bb, 0xbb6a, 0xe3dd, 0xe3f2, 0xe3de, 0xbb65, 0xe3db, 0xe3e4, 0xe3dc, 0xbb67, 0xe3d6, 0xe3f1, 0xbb68, 0xe3ee, 0xe3ef, 0xe3d7, 0xbb6d, 0xe3e6, 0xe3e0, 0xe3e7, 0xe3da, 0xe3f3, 0xe3eb, 0xe3e5, 0xe3d5, 0xbb69, 0xe3ec, 0xbb6c, 0xe3f0, 0xe3ea, 0xbb66, 0xe3e8, 0xe3e2, 0xbb64, 0xe3d9, 0xe3e1, 0xe3ed, 0xe3df, 0xe3e3, 0xbdc1, 0xdfe9, 0xe7b2, 0xe7bb, 0xe7b1, 0xe7ad, 0xe7aa, 0xbdc2, 0xe7a8, 0xbb6b, 0xe7a1, 0xbdc0, 0xe7a7, 0xbdbf, 0xe7ac, 0xe7a9, 0xe7b9, 0xe7b4, 0xe7ae, 0xe7b3, 0xbdbb, 0xe7ab, 0xe7be, 0xe7a2, 0xe7a3, 0xe7ba, 0xbdbc, 0xe7bf, 0xbdbe, 0xe7c0, 0xe7b0, 0xe3d8, 0xe7b6, 0xe7af, 0xe7b8, 0xe7b5, 0xe7a6, 0xbdb9, 0xe7bd, 0xbdba, 0xe7a4, 0xbdbd, 0xeb64, 0xe7b7, 0xe7bc, 0xeb61, 0xbdb8, 0xbfc0, 0xeb6b, 0xeb67, 0xeb65, 0xeb60, 0xeb6f, 0xbfc4, 0xeb5c, 0xeb68, 0xeb69, 0xeb5f, 0xeb5e, 0xeb6c, 0xeb62, 0xeb5d, 0xeb63, 0xeb6e, 0xeb5b, 0xeb6d, 0xeb6a, 0xbfc2, 0xbfc1, 0xbfc3, 0xeb66, 0xf0cb, 0xee59, 0xc1b1, 0xee5d, 0xee5a, 0xee61, 0xee67, 0xee5c, 0xee70, 0xc1ae, 0xee6a, 0xee5f, 0xee6b, 0xee66, 0xee6d, 0xee5e, 0xc1b3, 0xc1b2, 0xee60, 0xee6e, 0xee58, 0xee6c, 0xc1ac, 0xee64, 0xee63, 0xee68, 0xee5b, 0xc1b0, 0xc1b4, 0xee62, 0xee69, 0xc1b5, 0xee65, 0xc1ad, 0xc1af, 0xf0c7, 0xf0c5, 0xf0cc, 0xf0c9, 0xf0cd, 0xf0be, 0xf0c6, 0xf0d1, 0xee6f, 0xf0c2, 0xc2cf, 0xe7a5, 0xf0bd, 0xf0ca, 0xf0c4, 0xf0c1, 0xf0bc, 0xf0bb, 0xf0d0, 0xf0c0, 0xf0bf, 0xc2cd, 0xf0c8, 0xc2cc, 0xc2ce, 0xf0c3, 0xf0cf, 0xf2de, 0xf2df, 0xc3c9, 0xf2dc, 0xc3c6, 0xf2e4, 0xc3ca, 0xf2e6, 0xf2db, 0xf0ce, 0xf2e8, 0xf2dd, 0xc3c7, 0xf2e3, 0xf2e5, 0xf2e0, 0xf2e7, 0xf2e2, 0xf2e1, 0xc3c8, 0xf4c5, 0xf4c6, 0xf4c8, 0xc4ae, 0xc4af, 0xf4c9, 0xf4c7, 0xf4c4, 0xf642, 0xf645, 0xf641, 0xc4fa, 0xf643, 0xc4f9, 0xc4f8, 0xc4f7, 0xf644, 0xf751, 0xf74f, 0xf74e, 0xf640, 0xf750, 0xf646, 0xf74d, 0xf7f9, 0xf7d7, 0xf7f7, 0xc5db, 0xf7f8, 0xf7fa, 0xf8bf, 0xc5fa, 0xf8be, 0xf8bd, 0xc5fb, 0xc65a, 0xf96e, 0xf9a7, 0xf9a6, 0xf9a8, 0xa6e5, 0xd0aa, 0xd3cf, 0xd3d0, 0xdbc0, 0xf647, 0xf8c0, 0xa6e6, 0xad6c, 0xd0ab, 0xd7b1, 0xb34e, 0xdbc2, 0xdbc1, 0xb5f3, 0xb8c5, 0xe7c1, 0xbdc3, 0xbdc4, 0xbfc5, 0xc5fc, 0xa6e7, 0xd0ac, 0xaaed, 0xd0ae, 0xd0ad, 0xad6d, 0xd3d1, 0xd3d8, 0xb049, 0xd3d6, 0xd3d4, 0xd3db, 0xd3d2, 0xd3d3, 0xb04a, 0xb04e, 0xd3dc, 0xb04d, 0xd3da, 0xd3d7, 0xd3d5, 0xb04b, 0xb04c, 0xd3d9, 0xb350, 0xd7b2, 0xb355, 0xd7c2, 0xb354, 0xd7c4, 0xd7b8, 0xb352, 0xd7c3, 0xd7b3, 0xb353, 0xd7bf, 0xd7bb, 0xd7bd, 0xd7b7, 0xd7be, 0xb34f, 0xd7ba, 0xd7b9, 0xd7b5, 0xd7c0, 0xd7bc, 0xd7b4, 0xd7b6, 0xb351, 0xd7c1, 0xb5f6, 0xdbcd, 0xdbc9, 0xdbcb, 0xdbc6, 0xdbc5, 0xdbc3, 0xdbca, 0xdbcc, 0xdbc8, 0xdbc7, 0xb5f4, 0xb5f5, 0xdbcf, 0xb8cd, 0xdff2, 0xdff8, 0xdff3, 0xdff4, 0xdff9, 0xb8cf, 0xb8c7, 0xb8ce, 0xdff1, 0xdbc4, 0xb8ca, 0xb8c8, 0xdff7, 0xdff6, 0xb8c9, 0xb8cb, 0xdff5, 0xb8c6, 0xb8cc, 0xe3f6, 0xbb74, 0xe442, 0xe441, 0xe3fb, 0xbb76, 0xe440, 0xe3f7, 0xe3f8, 0xbb6e, 0xbb70, 0xe3fd, 0xe3f5, 0xbb72, 0xbb71, 0xe3f9, 0xe3fe, 0xe3fc, 0xbb73, 0xe3fa, 0xdbce, 0xbb6f, 0xe7c2, 0xe7c9, 0xbdc6, 0xe7cd, 0xbdca, 0xe7c5, 0xe7c3, 0xe7cc, 0xbdc5, 0xe7cb, 0xbdc7, 0xbdc8, 0xe7c4, 0xbdc9, 0xe7ca, 0xe7c6, 0xe7c7, 0xe7c8, 0xbb75, 0xeb70, 0xeb7c, 0xbfca, 0xeb77, 0xeb79, 0xbfc8, 0xeb71, 0xeb75, 0xeb78, 0xbfc6, 0xbfc9, 0xeb7b, 0xeb73, 0xeb74, 0xeb7a, 0xeb72, 0xeb76, 0xbfc7, 0xee72, 0xee71, 0xc1b7, 0xee77, 0xc1b9, 0xc1b6, 0xee73, 0xc1ba, 0xee74, 0xee75, 0xee78, 0xc1b8, 0xf0d6, 0xf0d9, 0xf0d3, 0xf0d5, 0xf0d4, 0xf0d7, 0xf0d8, 0xee76, 0xf0d2, 0xc3cd, 0xf2ec, 0xf2ef, 0xf2f1, 0xf2ea, 0xf2eb, 0xf2ee, 0xf2f0, 0xc3ce, 0xc3cc, 0xc3cb, 0xf2ed, 0xf2e9, 0xf4ca, 0xc4b0, 0xf4cb, 0xf649, 0xc4fb, 0xf64b, 0xc4fc, 0xf648, 0xf64a, 0xc5a8, 0xf752, 0xc5a7, 0xf7fd, 0xf7fc, 0xf7fb, 0xf948, 0xf949, 0xf94b, 0xf94a, 0xca50, 0xa6e8, 0xad6e, 0xd7c5, 0xb5f7, 0xdffa, 0xc2d0, 0xf2f2, 0xa8a3, 0xb357, 0xb356, 0xdbd0, 0xb5f8, 0xdbd2, 0xdbd1, 0xdffb, 0xb8d0, 0xe443, 0xe446, 0xe445, 0xe444, 0xe7ce, 0xe7d0, 0xe7cf, 0xbfcc, 0xbfcb, 0xc1bb, 0xee79, 0xee7b, 0xee7a, 0xc2d1, 0xf2f4, 0xf2f3, 0xf4cc, 0xc4b1, 0xc4fd, 0xf754, 0xf753, 0xc65b, 0xa8a4, 0xd0af, 0xad6f, 0xd7c8, 0xd7c6, 0xd7c7, 0xdbd4, 0xdbd5, 0xe043, 0xdbd3, 0xdffc, 0xe041, 0xe040, 0xe042, 0xb8d1, 0xdffe, 0xdffd, 0xe044, 0xe449, 0xe447, 0xe448, 0xe7d3, 0xe7d1, 0xe7d2, 0xeb7d, 0xee7c, 0xee7d, 0xc2d2, 0xf2f5, 0xf4cd, 0xc4b2, 0xf64c, 0xf755, 0xc5a9, 0xf7fe, 0xf94c, 0xa8a5, 0xad71, 0xad72, 0xd0b0, 0xd0b1, 0xad70, 0xb054, 0xb052, 0xb051, 0xb058, 0xb050, 0xb059, 0xd3dd, 0xb056, 0xb053, 0xb057, 0xb055, 0xb04f, 0xb35f, 0xb359, 0xd7cc, 0xb35e, 0xb360, 0xb35a, 0xb35b, 0xd7ca, 0xb358, 0xd7cb, 0xb35d, 0xd7c9, 0xb35c, 0xb644, 0xb646, 0xdbd8, 0xb645, 0xb5f9, 0xb5fd, 0xb8e4, 0xe049, 0xdbda, 0xb5fe, 0xdbdd, 0xdbde, 0xb643, 0xdbe0, 0xdbe2, 0xdbe3, 0xdbd7, 0xdbd6, 0xdbe4, 0xb642, 0xdbe1, 0xdbdf, 0xb640, 0xb5fb, 0xb647, 0xdbdb, 0xdbdc, 0xdbd9, 0xb641, 0xb5fc, 0xb5fa, 0xe048, 0xb8df, 0xb8da, 0xb8d5, 0xb8e5, 0xb8d6, 0xb8d2, 0xb8e1, 0xb8de, 0xb8e0, 0xb8d7, 0xb8dc, 0xb8d3, 0xb8d4, 0xe050, 0xe04d, 0xe045, 0xe04a, 0xb8e2, 0xe051, 0xb8e3, 0xb8d9, 0xe047, 0xe04f, 0xe04b, 0xe04e, 0xe04c, 0xb8dd, 0xe046, 0xb8d8, 0xe44c, 0xbb78, 0xbb7b, 0xe44e, 0xbba5, 0xe44d, 0xbb7d, 0xbdcf, 0xe44f, 0xbba4, 0xe44b, 0xbba6, 0xbb79, 0xb8db, 0xbb7c, 0xbb7a, 0xbb7e, 0xbba2, 0xbb77, 0xbba7, 0xbba3, 0xbba1, 0xe44a, 0xbdd6, 0xbdd2, 0xbdd9, 0xe7d6, 0xbdda, 0xe7e2, 0xe7db, 0xbdcb, 0xe7e3, 0xe7dd, 0xbdd5, 0xe7de, 0xbdd4, 0xe7e1, 0xbdce, 0xe7df, 0xe7d5, 0xbdcd, 0xebaa, 0xbdd3, 0xbdd0, 0xbdd8, 0xe7d4, 0xe7d8, 0xbdcc, 0xe7d7, 0xe7d9, 0xe7da, 0xbdd7, 0xe7dc, 0xe7e0, 0xe7e4, 0xbddb, 0xbfd2, 0xeba5, 0xebab, 0xeba8, 0xeb7e, 0xebac, 0xeba1, 0xeba7, 0xbfcd, 0xbfd3, 0xebad, 0xbfcf, 0xbfd9, 0xbfd4, 0xebaf, 0xeba9, 0xbfd0, 0xeba2, 0xbfda, 0xeba3, 0xeba4, 0xbfdb, 0xbfd8, 0xbdd1, 0xbfce, 0xebb0, 0xbfdc, 0xbfd5, 0xebae, 0xbfd1, 0xbfd6, 0xbfd7, 0xc1c3, 0xeea4, 0xeead, 0xeeaa, 0xeeac, 0xc1c0, 0xeea5, 0xeeab, 0xc1bc, 0xeea7, 0xc1c4, 0xeea3, 0xeea8, 0xeeaf, 0xeba6, 0xeea9, 0xeea2, 0xc1bd, 0xeea1, 0xc1be, 0xeeb0, 0xc1bf, 0xeeae, 0xc1c2, 0xee7e, 0xc1c1, 0xeea6, 0xf0dc, 0xf0ea, 0xf0e5, 0xf0e7, 0xf0db, 0xc2d3, 0xf0da, 0xc2d6, 0xc2d5, 0xf0e9, 0xf0e1, 0xf0de, 0xf0e4, 0xf0dd, 0xf0df, 0xf0e8, 0xf0e6, 0xc2d4, 0xf0ed, 0xf0eb, 0xf0e2, 0xf0ec, 0xf0e3, 0xf2f9, 0xc3cf, 0xf341, 0xf64f, 0xc3d6, 0xf0e0, 0xf2f7, 0xc3d2, 0xf2f8, 0xf2fd, 0xc3d4, 0xc3d5, 0xf2f6, 0xf340, 0xf342, 0xf2fa, 0xf2fc, 0xf2fe, 0xf2fb, 0xf343, 0xc3d1, 0xc3d7, 0xc3d3, 0xc3d0, 0xf4d0, 0xc4b7, 0xf4ce, 0xf4d2, 0xf4d3, 0xc4b5, 0xf4d4, 0xf4d1, 0xf4cf, 0xc4b8, 0xc4b4, 0xf4d5, 0xc4b6, 0xc4b3, 0xc4fe, 0xc540, 0xf64e, 0xf64d, 0xf650, 0xf651, 0xc541, 0xf756, 0xf75b, 0xc5aa, 0xf758, 0xf757, 0xf75a, 0xf759, 0xf843, 0xc5dc, 0xf842, 0xf840, 0xf841, 0xc5fe, 0xc5fd, 0xf8c1, 0xf8c2, 0xc640, 0xf94d, 0xf94e, 0xc667, 0xc66d, 0xf9a9, 0xf9c8, 0xa8a6, 0xd7cd, 0xd7ce, 0xe052, 0xe450, 0xe7e5, 0xc1c6, 0xc1c5, 0xf0ee, 0xf344, 0xf844, 0xa8a7, 0xd3de, 0xb05a, 0xb361, 0xe054, 0xe053, 0xbddc, 0xe7e6, 0xbddd, 0xeeb1, 0xc2d7, 0xc676, 0xa8a8, 0xcdcb, 0xd3df, 0xb362, 0xd7cf, 0xd7d0, 0xdbe5, 0xb648, 0xb8e6, 0xe056, 0xe055, 0xe057, 0xe451, 0xe452, 0xbba8, 0xbfdd, 0xbdde, 0xbfde, 0xeeb5, 0xeeb2, 0xeeb4, 0xeeb3, 0xc1c7, 0xf0ef, 0xf346, 0xf345, 0xcba4, 0xb05c, 0xb05b, 0xd3e0, 0xd7d1, 0xdbe7, 0xdbe6, 0xb649, 0xe059, 0xe05a, 0xe058, 0xb8e8, 0xb8e7, 0xbbaa, 0xbba9, 0xe7e7, 0xebb3, 0xebb1, 0xebb2, 0xbfdf, 0xeeb7, 0xeeb6, 0xf0f2, 0xf0f1, 0xf0f0, 0xf347, 0xf9aa, 0xa8a9, 0xad73, 0xad74, 0xb05d, 0xb05e, 0xd3e2, 0xd3e1, 0xd7d2, 0xb368, 0xb366, 0xb363, 0xb367, 0xb365, 0xb364, 0xb64a, 0xdbea, 0xb8ed, 0xb64c, 0xb651, 0xdbec, 0xb653, 0xb652, 0xb655, 0xdbeb, 0xdbe8, 0xb64f, 0xb64b, 0xb64d, 0xdbe9, 0xb654, 0xb650, 0xb64e, 0xb8ef, 0xb8ee, 0xb8ec, 0xb8f0, 0xb8ea, 0xb8eb, 0xb8e9, 0xe05b, 0xe454, 0xbbac, 0xbbad, 0xbbab, 0xe453, 0xe455, 0xe7ea, 0xe7ec, 0xbde7, 0xe7ed, 0xbde0, 0xe7e9, 0xbddf, 0xbde9, 0xbde5, 0xbde6, 0xbde2, 0xe7e8, 0xbde1, 0xe7ee, 0xe7eb, 0xbde8, 0xbde3, 0xbde4, 0xebb5, 0xebb7, 0xebb6, 0xebb8, 0xbfe0, 0xebb4, 0xc1cb, 0xeeb8, 0xc1c8, 0xc1cc, 0xc1ca, 0xc1c9, 0xf0f3, 0xf0f6, 0xf0f5, 0xf0f4, 0xc2d8, 0xf348, 0xf349, 0xc3d8, 0xf34a, 0xc3d9, 0xc4ba, 0xc4b9, 0xf652, 0xc542, 0xf653, 0xf75c, 0xc5ab, 0xc5ac, 0xf845, 0xc642, 0xa8aa, 0xb36a, 0xb369, 0xe05c, 0xe05d, 0xbbae, 0xebb9, 0xbdea, 0xebba, 0xeeb9, 0xa8ab, 0xd0b2, 0xad76, 0xad75, 0xd3e3, 0xb05f, 0xd3e4, 0xd7d5, 0xd7d4, 0xd7d3, 0xdbee, 0xb658, 0xdbed, 0xb657, 0xdbef, 0xb656, 0xe05f, 0xe062, 0xe060, 0xe061, 0xe065, 0xe05e, 0xe066, 0xe063, 0xe064, 0xbbb0, 0xe456, 0xbbaf, 0xe7f2, 0xe7f0, 0xbdeb, 0xe7ef, 0xe7f1, 0xbdec, 0xebbb, 0xebbc, 0xc1cd, 0xf34c, 0xf34e, 0xf34b, 0xf34d, 0xf4d6, 0xf654, 0xf96f, 0xa8ac, 0xad77, 0xd3e5, 0xd3e7, 0xd3e6, 0xd7d8, 0xb36c, 0xd7d6, 0xb36b, 0xd7d9, 0xd7da, 0xd7d7, 0xdbfb, 0xb660, 0xdbf3, 0xdbf9, 0xb65b, 0xb65e, 0xdbf2, 0xb659, 0xdbf6, 0xe06c, 0xb65d, 0xdbf1, 0xdbf7, 0xdbf4, 0xdbfa, 0xdbf0, 0xdbf8, 0xb65c, 0xb65f, 0xdbf5, 0xb65a, 0xb8f2, 0xe068, 0xb8f1, 0xe06f, 0xe06e, 0xb8f8, 0xb8f9, 0xe070, 0xb8f3, 0xe06d, 0xb8f7, 0xe072, 0xe069, 0xe06b, 0xb8f4, 0xe067, 0xe06a, 0xe071, 0xb8f5, 0xe073, 0xb8f6, 0xbbb1, 0xe45b, 0xe461, 0xe459, 0xe462, 0xe458, 0xe45d, 0xe463, 0xe460, 0xe45f, 0xe45e, 0xe457, 0xe45c, 0xe45a, 0xbdf1, 0xbdee, 0xe7fb, 0xe841, 0xe843, 0xe840, 0xe7f8, 0xe7fa, 0xe845, 0xe842, 0xe7fc, 0xe846, 0xe7f9, 0xe844, 0xbdef, 0xbdf5, 0xbdf3, 0xe7f3, 0xbdf4, 0xbdf0, 0xe7f4, 0xe7f6, 0xe7f5, 0xe7fd, 0xe7fe, 0xbdf2, 0xbded, 0xe7f7, 0xebc6, 0xbfe2, 0xebbd, 0xbfe3, 0xbfe6, 0xebc2, 0xebbf, 0xbfe5, 0xebc3, 0xebc4, 0xebbe, 0xebc7, 0xebc0, 0xebc5, 0xbfe4, 0xbfe1, 0xebc1, 0xeebf, 0xc1d0, 0xc1ce, 0xc1d1, 0xc1cf, 0xeebe, 0xeebb, 0xeeba, 0xeebd, 0xeebc, 0xf145, 0xc2de, 0xf0fb, 0xf0fa, 0xc2d9, 0xf141, 0xf140, 0xf0f7, 0xf143, 0xf0fc, 0xc2dd, 0xf0f9, 0xf142, 0xf0f8, 0xc2da, 0xc2dc, 0xf0fd, 0xc2db, 0xf0fe, 0xf144, 0xf352, 0xc3de, 0xf34f, 0xf353, 0xc3db, 0xf351, 0xc3e0, 0xc3dd, 0xf350, 0xc3df, 0xf354, 0xc3da, 0xc4bc, 0xc4be, 0xf4d9, 0xc4bd, 0xf4d7, 0xc3dc, 0xf4d8, 0xc4bb, 0xc543, 0xc545, 0xf656, 0xc544, 0xf655, 0xf761, 0xc5ad, 0xf760, 0xc5ae, 0xf75e, 0xf75d, 0xf762, 0xf763, 0xf846, 0xf75f, 0xf8c6, 0xf8c3, 0xf8c4, 0xf8c5, 0xc65c, 0xf951, 0xf950, 0xf94f, 0xf970, 0xf9be, 0xf9ab, 0xc66e, 0xa8ad, 0xb060, 0xb8fa, 0xbdf6, 0xebc8, 0xc2df, 0xf355, 0xf9ac, 0xa8ae, 0xaaee, 0xad79, 0xad78, 0xb063, 0xd3e8, 0xb061, 0xd3e9, 0xb062, 0xd7df, 0xd7db, 0xb36d, 0xd7de, 0xd7dd, 0xd7dc, 0xb36e, 0xd7e0, 0xd7e1, 0xdc43, 0xdc41, 0xdc45, 0xdc46, 0xdc4c, 0xdc48, 0xdc4a, 0xdc42, 0xdbfc, 0xdc49, 0xdc4b, 0xdc44, 0xdc47, 0xdbfd, 0xb662, 0xdc40, 0xdbfe, 0xb661, 0xb663, 0xb8fd, 0xe075, 0xe077, 0xe076, 0xe07b, 0xb8fb, 0xe078, 0xe074, 0xe079, 0xe07a, 0xb8fc, 0xb8fe, 0xe07c, 0xe467, 0xe466, 0xe464, 0xe465, 0xbbb3, 0xbbb5, 0xbbb2, 0xbbb4, 0xe84d, 0xe84e, 0xe849, 0xe84a, 0xbdf8, 0xbdfd, 0xbdf7, 0xbdfe, 0xbdf9, 0xe84b, 0xe84c, 0xe848, 0xbe40, 0xbdfb, 0xbdfa, 0xbdfc, 0xe847, 0xebca, 0xbfe8, 0xebcc, 0xbfea, 0xebcf, 0xebcb, 0xebc9, 0xebce, 0xbfe9, 0xebcd, 0xbfe7, 0xc1d3, 0xc1d6, 0xeec1, 0xc1d4, 0xeec0, 0xc1d2, 0xc1d5, 0xf146, 0xf147, 0xf148, 0xc2e0, 0xf149, 0xc2e1, 0xc3e2, 0xf358, 0xf359, 0xf357, 0xf356, 0xf35a, 0xc3e1, 0xf4dd, 0xf4db, 0xf4dc, 0xf4de, 0xf4da, 0xf4df, 0xf658, 0xf659, 0xf657, 0xc546, 0xf764, 0xc5af, 0xf765, 0xf848, 0xf847, 0xa8af, 0xb664, 0xb940, 0xbbb6, 0xbfec, 0xbfeb, 0xc3e3, 0xc47c, 0xc547, 0xa8b0, 0xb064, 0xb941, 0xf35b, 0xcba6, 0xa8b1, 0xa8b4, 0xa8b3, 0xa8b2, 0xcba5, 0xcdcd, 0xcdcf, 0xaaef, 0xaaf1, 0xcdcc, 0xcdce, 0xaaf0, 0xcdd1, 0xcdd0, 0xcdd2, 0xd0b6, 0xd0b4, 0xad7c, 0xd0b3, 0xada3, 0xad7e, 0xad7b, 0xada4, 0xad7d, 0xada2, 0xada1, 0xd0b5, 0xad7a, 0xb06a, 0xd3eb, 0xd3f1, 0xb067, 0xb06e, 0xb069, 0xd3ee, 0xd3f0, 0xb06c, 0xd3ea, 0xd3ed, 0xb068, 0xb065, 0xd3ec, 0xb06b, 0xd3ef, 0xb06d, 0xb066, 0xd7e3, 0xd7e6, 0xb370, 0xb37a, 0xb376, 0xd7e4, 0xb37e, 0xb377, 0xb37c, 0xb372, 0xb36f, 0xb371, 0xb37d, 0xd7e5, 0xb375, 0xb378, 0xb374, 0xb379, 0xd7e7, 0xb37b, 0xb373, 0xd7e2, 0xdc4d, 0xb665, 0xdc4f, 0xb667, 0xb669, 0xdc4e, 0xb666, 0xb66a, 0xb668, 0xb947, 0xe0a3, 0xb94f, 0xe07e, 0xb950, 0xb945, 0xe0a1, 0xb94a, 0xe0a2, 0xb943, 0xb942, 0xb94d, 0xb94c, 0xb94b, 0xb949, 0xb94e, 0xe07d, 0xb944, 0xb946, 0xb948, 0xbbb8, 0xbbbb, 0xbbbf, 0xbbb9, 0xbbbe, 0xbbbc, 0xbbb7, 0xbbbd, 0xbbba, 0xe852, 0xbe43, 0xbe41, 0xe853, 0xbe44, 0xbe42, 0xe851, 0xe850, 0xbff0, 0xe84f, 0xbfee, 0xbfed, 0xebd0, 0xbe45, 0xbfef, 0xebd1, 0xbff2, 0xebd2, 0xbff1, 0xc1d8, 0xeec3, 0xc1d7, 0xc1dc, 0xc1da, 0xc1db, 0xc2e3, 0xc1d9, 0xeec2, 0xebd3, 0xc2e2, 0xc2e4, 0xc3e4, 0xc3e5, 0xf4e0, 0xc5de, 0xc5dd, 0xa8b6, 0xca55, 0xb06f, 0xca52, 0xca53, 0xca51, 0xca54, 0xcbaa, 0xcba7, 0xcbac, 0xcba8, 0xa8b7, 0xa8ba, 0xcba9, 0xa8b9, 0xcbab, 0xa8b8, 0xcdd5, 0xcdd7, 0xaaf4, 0xcdd3, 0xcdd6, 0xcdd4, 0xaaf2, 0xaaf5, 0xaaf3, 0xd0b8, 0xd0bc, 0xd0b9, 0xada7, 0xada8, 0xd0bb, 0xd0bd, 0xd0bf, 0xada5, 0xd0be, 0xada6, 0xd7ee, 0xd0ba, 0xd3f2, 0xd3fb, 0xd3f9, 0xd3f4, 0xd3f5, 0xd3fa, 0xd3fc, 0xb071, 0xd3f7, 0xd3f3, 0xb070, 0xb072, 0xd3f6, 0xd3fd, 0xd3f8, 0xb3a1, 0xd7f1, 0xd7e9, 0xd7ef, 0xd7f0, 0xb3a2, 0xd7e8, 0xd7ea, 0xd0b7, 0xd7ec, 0xd7ed, 0xd7eb, 0xb66c, 0xdc56, 0xebd4, 0xdc57, 0xdc54, 0xb3a3, 0xb66e, 0xdc53, 0xdc59, 0xdc58, 0xb66b, 0xdc5c, 0xdc52, 0xdc5b, 0xdc50, 0xdc5a, 0xdc55, 0xb66d, 0xe0aa, 0xe0a5, 0xe0ab, 0xe0a6, 0xe0a4, 0xe0a7, 0xb951, 0xe0a9, 0xe0a8, 0xb952, 0xbbc1, 0xbbc0, 0xe46e, 0xe471, 0xe469, 0xe46d, 0xbbc2, 0xe46c, 0xe46a, 0xe470, 0xe46b, 0xe468, 0xe46f, 0xe859, 0xbe48, 0xf14a, 0xe856, 0xe857, 0xe855, 0xdc51, 0xbe47, 0xe85a, 0xe854, 0xbe46, 0xbe49, 0xe858, 0xebd5, 0xbff3, 0xebd6, 0xebd7, 0xeec4, 0xc1dd, 0xf14b, 0xf14c, 0xf14d, 0xf35d, 0xf35c, 0xf4e2, 0xf4e1, 0xf65b, 0xf65c, 0xf65a, 0xf766, 0xc5b0, 0xa8bb, 0xadaa, 0xada9, 0xb075, 0xb074, 0xd440, 0xd441, 0xd3fe, 0xb073, 0xd7f5, 0xd7f6, 0xd7f2, 0xb3a4, 0xd7f3, 0xd7f4, 0xdc5f, 0xdc61, 0xdc5d, 0xdc60, 0xb66f, 0xdc5e, 0xb670, 0xdd73, 0xb955, 0xb954, 0xb953, 0xe0ac, 0xe0ad, 0xe473, 0xe475, 0xbbc6, 0xbbc3, 0xbbc5, 0xbbc4, 0xe474, 0xe472, 0xe861, 0xe85e, 0xe85f, 0xbe4d, 0xe860, 0xe85b, 0xe85c, 0xbe4a, 0xbe4b, 0xe85d, 0xbe4c, 0xebdb, 0xebdc, 0xebd9, 0xebda, 0xbff4, 0xebd8, 0xeec8, 0xeec5, 0xeec7, 0xc1e0, 0xeecb, 0xc1df, 0xeec9, 0xeecc, 0xeeca, 0xeec6, 0xc1de, 0xf14f, 0xf150, 0xf14e, 0xf152, 0xc2e5, 0xc2e6, 0xf35f, 0xc3e7, 0xf151, 0xf35e, 0xc3e6, 0xf4e5, 0xf4e6, 0xc4bf, 0xf4e4, 0xf4e3, 0xf65d, 0xc548, 0xf849, 0xf8c8, 0xf8c7, 0xc643, 0xc65d, 0xf8c9, 0xf971, 0xc66f, 0xa8bc, 0xaaf6, 0xb956, 0xc4c0, 0xa8bd, 0xadab, 0xb3a5, 0xb671, 0xc2e7, 0xaaf7, 0xd0c1, 0xd0c0, 0xd442, 0xb078, 0xb076, 0xb07a, 0xd444, 0xb079, 0xb077, 0xd443, 0xb3a8, 0xd7fc, 0xb3a7, 0xb3a9, 0xd842, 0xb3ab, 0xd7fe, 0xd840, 0xd7f7, 0xb3aa, 0xd843, 0xd7f9, 0xd7fa, 0xd7f8, 0xb3a6, 0xd841, 0xd7fb, 0xd7fd, 0xdc6d, 0xdc6c, 0xdc6a, 0xdc62, 0xdc71, 0xdc65, 0xdc6f, 0xdc76, 0xdc6e, 0xb679, 0xb675, 0xdc63, 0xdc69, 0xb677, 0xdc68, 0xb678, 0xb67a, 0xdc6b, 0xb672, 0xb673, 0xdc77, 0xdc75, 0xdc74, 0xdc66, 0xdc72, 0xb676, 0xb674, 0xdc73, 0xdc64, 0xdc67, 0xdc70, 0xe4ba, 0xe0b7, 0xe0b0, 0xe0c3, 0xe0cc, 0xe0b3, 0xb961, 0xe0c0, 0xb957, 0xb959, 0xb965, 0xe0b1, 0xb95a, 0xb95c, 0xb966, 0xb95b, 0xb964, 0xe0b9, 0xe0ae, 0xb962, 0xe0b8, 0xb95e, 0xe0ca, 0xb963, 0xe0c8, 0xe0bc, 0xe0c6, 0xb960, 0xe0af, 0xe0c9, 0xe0c4, 0xe0cb, 0xb958, 0xb967, 0xb95d, 0xe0b5, 0xe0bd, 0xe0c1, 0xe0c5, 0xb95f, 0xe0b4, 0xe0b2, 0xe0be, 0xe0bb, 0xe0ba, 0xe0bf, 0xe0c2, 0xe0c7, 0xe478, 0xbbc7, 0xe4a4, 0xe47a, 0xbbcc, 0xbbd0, 0xe4ad, 0xe4b5, 0xe4a6, 0xbbc8, 0xe4aa, 0xe0b6, 0xbbc9, 0xe4b1, 0xe4b6, 0xe4ae, 0xe4b0, 0xe4b9, 0xe4b2, 0xe47e, 0xe4a9, 0xbbd1, 0xbbcd, 0xe47c, 0xe4ab, 0xbbcb, 0xe4a5, 0xbbca, 0xe4b3, 0xe4a2, 0xe479, 0xbbce, 0xe4b8, 0xe47b, 0xe4af, 0xe4ac, 0xe4a7, 0xe477, 0xe476, 0xe4a1, 0xe4b4, 0xbbcf, 0xe4b7, 0xe47d, 0xe4a3, 0xbe52, 0xbe5a, 0xbe55, 0xe8a4, 0xe8a1, 0xe867, 0xbe50, 0xbe4f, 0xbe56, 0xe865, 0xbe54, 0xe871, 0xe863, 0xe864, 0xbe4e, 0xe8a3, 0xbe58, 0xe874, 0xe879, 0xe873, 0xebee, 0xe86f, 0xe877, 0xe875, 0xe868, 0xe862, 0xe87d, 0xbe57, 0xe87e, 0xe878, 0xe86d, 0xe86b, 0xe866, 0xe86e, 0xe87b, 0xe86a, 0xe87a, 0xe8a2, 0xbe53, 0xe876, 0xe87c, 0xe872, 0xe86c, 0xbe51, 0xe4a8, 0xe870, 0xbe59, 0xe869, 0xebf4, 0xbff7, 0xebf3, 0xebf0, 0xec44, 0xbffb, 0xec41, 0xebf8, 0xec43, 0xebe9, 0xebf6, 0xbffd, 0xebe1, 0xebdf, 0xec42, 0xec40, 0xebfe, 0xebed, 0xebec, 0xebe2, 0xc040, 0xebe8, 0xebf2, 0xebfd, 0xc043, 0xec45, 0xc1e8, 0xc045, 0xbffe, 0xebe6, 0xebef, 0xebde, 0xebe0, 0xbff5, 0xc042, 0xbffa, 0xebe7, 0xebf7, 0xebf1, 0xc041, 0xebdd, 0xc1e3, 0xebf9, 0xebfc, 0xbffc, 0xebeb, 0xc044, 0xbff9, 0xbff8, 0xebf5, 0xebfb, 0xbff6, 0xebe4, 0xebfa, 0xebe5, 0xebea, 0xeed2, 0xeed7, 0xc1e5, 0xc1e7, 0xeedd, 0xc1e1, 0xeeec, 0xeee3, 0xeed8, 0xeed9, 0xeee2, 0xc1ee, 0xeee1, 0xeed1, 0xeee0, 0xeed4, 0xeeed, 0xc1ed, 0xc1eb, 0xeed5, 0xeee8, 0xeeda, 0xeee7, 0xeee9, 0xeed0, 0xc1e6, 0xeeea, 0xeede, 0xc1ea, 0xeedb, 0xc1ec, 0xeee4, 0xc1e4, 0xeed6, 0xeee5, 0xeedf, 0xebe3, 0xeee6, 0xeed3, 0xc1e9, 0xeeeb, 0xc1e2, 0xeece, 0xf160, 0xf159, 0xc2e9, 0xf154, 0xf163, 0xf15b, 0xeedc, 0xf165, 0xf155, 0xc2e8, 0xf15f, 0xc2ea, 0xc2f2, 0xc2f0, 0xf161, 0xc2f1, 0xf157, 0xf158, 0xf15d, 0xf162, 0xeecd, 0xc2eb, 0xf16a, 0xf167, 0xf16b, 0xf15e, 0xf15a, 0xf168, 0xf36a, 0xf15c, 0xc2ee, 0xc2ed, 0xeecf, 0xc2ef, 0xf164, 0xf166, 0xc2ec, 0xf169, 0xf153, 0xf156, 0xf373, 0xf363, 0xc3eb, 0xf371, 0xf361, 0xc3ec, 0xf36c, 0xf368, 0xc3f1, 0xf372, 0xf362, 0xf365, 0xc3e9, 0xf374, 0xf36d, 0xf370, 0xc3ef, 0xc3f4, 0xc3f2, 0xf369, 0xf364, 0xc3ed, 0xc3ee, 0xf360, 0xc3ea, 0xc3e8, 0xc3f0, 0xf36f, 0xc3f3, 0xf36b, 0xf375, 0xc3f5, 0xf367, 0xf36e, 0xf4f3, 0xf542, 0xf4f5, 0xf4fc, 0xf366, 0xf4fa, 0xf4e9, 0xf540, 0xc4c3, 0xf4ed, 0xf4fe, 0xf4f4, 0xc4c2, 0xf544, 0xf4f6, 0xf4fb, 0xf4fd, 0xf4e7, 0xf541, 0xf4f2, 0xf4f7, 0xf4eb, 0xf4ef, 0xf543, 0xf4f9, 0xf4e8, 0xf4ec, 0xf4ee, 0xf4f8, 0xc4c1, 0xf4f1, 0xf4ea, 0xf4f0, 0xf661, 0xf666, 0xc54f, 0xf668, 0xc549, 0xf664, 0xf66a, 0xc54e, 0xc54a, 0xc54b, 0xf660, 0xf667, 0xc54d, 0xf665, 0xc54c, 0xf65f, 0xf663, 0xf662, 0xf65e, 0xf669, 0xc5b1, 0xf76d, 0xf770, 0xf76c, 0xf76e, 0xf76f, 0xf769, 0xf76a, 0xf767, 0xf76b, 0xf768, 0xc5b2, 0xc5b3, 0xf84b, 0xf84d, 0xf84c, 0xf84e, 0xc5e0, 0xf84a, 0xc5df, 0xc5e1, 0xf8cb, 0xf8cc, 0xc644, 0xf8ca, 0xf953, 0xf952, 0xf954, 0xc65f, 0xf955, 0xc65e, 0xf956, 0xf972, 0xf975, 0xf974, 0xc668, 0xf973, 0xc672, 0xc670, 0xc671, 0xc677, 0xf9c0, 0xf9c1, 0xf9bf, 0xf9c9, 0xaaf8, 0xd844, 0xdc78, 0xe8a5, 0xf376, 0xaaf9, 0xadac, 0xb07b, 0xd845, 0xd846, 0xb3ac, 0xb67d, 0xdc7a, 0xdc79, 0xb6a3, 0xb67c, 0xdc7b, 0xb67e, 0xb6a2, 0xb6a1, 0xb67b, 0xb968, 0xe0d0, 0xe0ce, 0xe0cf, 0xe0cd, 0xbbd2, 0xbbd5, 0xbbd7, 0xbbd6, 0xbbd3, 0xbbd4, 0xe8a7, 0xe8a6, 0xbe5b, 0xe8a8, 0xe8a9, 0xbe5c, 0xec4d, 0xec4b, 0xeef3, 0xec49, 0xec4a, 0xc046, 0xec46, 0xec4e, 0xec48, 0xec4c, 0xeeef, 0xeef1, 0xeef2, 0xc1f3, 0xeeee, 0xc1f2, 0xeef0, 0xc1ef, 0xc1f0, 0xc1f1, 0xec47, 0xc2f5, 0xf16e, 0xf16c, 0xf16d, 0xc2f3, 0xc2f6, 0xc2f4, 0xf377, 0xf378, 0xc3f6, 0xf545, 0xf547, 0xf546, 0xc4c4, 0xc550, 0xf66d, 0xf66c, 0xf66b, 0xaafa, 0xc9aa, 0xca58, 0xa6e9, 0xca56, 0xca59, 0xca57, 0xcbae, 0xa8c1, 0xa8c2, 0xcbb0, 0xa8bf, 0xcbaf, 0xcbad, 0xa8c0, 0xa8be, 0xcdd8, 0xcddb, 0xaafd, 0xcdda, 0xcdd9, 0xaafc, 0xaafb, 0xab40, 0xcddc, 0xaafe, 0xd0c6, 0xadae, 0xadaf, 0xadb0, 0xd0c7, 0xd0c3, 0xadad, 0xd0c4, 0xd0c5, 0xd0c2, 0xb0a4, 0xb0a1, 0xd445, 0xb0a2, 0xb0a5, 0xd446, 0xb07e, 0xb07c, 0xb07d, 0xb0a3, 0xb3ad, 0xd849, 0xb3b5, 0xd848, 0xd84b, 0xb3b1, 0xd84a, 0xb6ab, 0xb3af, 0xb3b2, 0xb3ae, 0xb3b3, 0xb3b4, 0xb3b0, 0xd847, 0xb6a7, 0xdc7d, 0xdca3, 0xdca2, 0xb6ac, 0xb6a8, 0xb6a9, 0xdc7c, 0xdc7e, 0xdca1, 0xb6a4, 0xb6a6, 0xb6aa, 0xb6a5, 0xe0d3, 0xe0d1, 0xe0d2, 0xb96a, 0xb96b, 0xe0d4, 0xb969, 0xbbd8, 0xbbda, 0xbbd9, 0xe4bb, 0xe4bc, 0xe8ab, 0xe8aa, 0xc047, 0xc048, 0xec4f, 0xc049, 0xeef6, 0xeef4, 0xeef5, 0xc1f4, 0xf16f, 0xc3f7, 0xc1f5, 0xab41, 0xb0a6, 0xd447, 0xd84c, 0xb3b6, 0xb6ad, 0xdca4, 0xdca6, 0xb6af, 0xb6ae, 0xb6b0, 0xb6b1, 0xdca5, 0xb96e, 0xb96f, 0xb96d, 0xbbdb, 0xb96c, 0xe0d5, 0xbbdc, 0xe8ac, 0xec50, 0xc04a, 0xc1f6, 0xf170, 0xf174, 0xc2f9, 0xf171, 0xc2fa, 0xc2f8, 0xf175, 0xc2fb, 0xf173, 0xf379, 0xc2f7, 0xc3f8, 0xf8cd, 0xab42, 0xb3b8, 0xb3b7, 0xb6b2, 0xdca8, 0xdca7, 0xb6b3, 0xe0d9, 0xb973, 0xb970, 0xe0d8, 0xb972, 0xe0d6, 0xb971, 0xe0d7, 0xe4bd, 0xbbdd, 0xe8af, 0xbe5d, 0xe8ad, 0xbe5e, 0xbe5f, 0xe8ae, 0xbe60, 0xec51, 0xc04e, 0xc04b, 0xc050, 0xec53, 0xc04c, 0xec52, 0xc04f, 0xc04d, 0xeef9, 0xeefb, 0xc1f7, 0xeefa, 0xc1f8, 0xeef8, 0xeef7, 0xf177, 0xf176, 0xc2fc, 0xf178, 0xf37e, 0xc3fa, 0xf37d, 0xf37a, 0xc3f9, 0xf37b, 0xf37c, 0xf548, 0xf549, 0xc4c5, 0xc553, 0xf66e, 0xc551, 0xc552, 0xf66f, 0xc5b4, 0xc5b5, 0xf771, 0xc645, 0xf8cf, 0xc647, 0xf8ce, 0xf8d0, 0xc646, 0xf957, 0xf9ad, 0xab43, 0xb974, 0xe4be, 0xe8b0, 0xc051, 0xc052, 0xab44, 0xbe61, 0xc3fb, 0xadb1, 0xc053, 0xc5e2, 0xadb2, 0xd84d, 0xdca9, 0xdcab, 0xdcaa, 0xe0dd, 0xe0da, 0xb975, 0xb976, 0xe0db, 0xe0dc, 0xe4c0, 0xe4c5, 0xbbde, 0xe4bf, 0xe4c1, 0xe4c8, 0xe4c3, 0xe4c7, 0xe4c4, 0xe4c2, 0xe4c6, 0xbbdf, 0xe8b3, 0xe8b1, 0xbe63, 0xbe62, 0xe8b2, 0xbe64, 0xec56, 0xec55, 0xc054, 0xec54, 0xeefc, 0xeefe, 0xef41, 0xef40, 0xc1f9, 0xeefd, 0xf1a1, 0xc2fd, 0xf17d, 0xf1a2, 0xc2fe, 0xf17b, 0xf17e, 0xf17c, 0xf179, 0xc340, 0xf17a, 0xf3a1, 0xf3a3, 0xf3a2, 0xf54a, 0xf54b, 0xf670, 0xc5b7, 0xc5b6, 0xf84f, 0xf850, 0xc648, 0xf8d1, 0xc669, 0xadb3, 0xb6b4, 0xe4ca, 0xe4c9, 0xe8b5, 0xe8b4, 0xc1fa, 0xef43, 0xef42, 0xf1a5, 0xf1a3, 0xf1a6, 0xf1a4, 0xc3fc, 0xf3a4, 0xf3a5, 0xf3a6, 0xf671, 0xf772, 0xf8d2, 0xadb4, 0xec57, 0xef44, 0xadb5, 0xbbe0, 0xec58, 0xc341, 0xf1a7, 0xc3fd, 0xf54c, 0xf54d, 0xc554, 0xf851, 0xadb6, 0xb3bb, 0xb3bc, 0xd84e, 0xb6b5, 0xb6b6, 0xdcac, 0xb6b7, 0xb97a, 0xb97c, 0xe0df, 0xe0e0, 0xe0de, 0xb977, 0xb978, 0xb97b, 0xb979, 0xe4cb, 0xbbe1, 0xbbe2, 0xe8bc, 0xbe67, 0xe8b7, 0xe8b6, 0xe8bb, 0xbe65, 0xc05b, 0xe8b8, 0xe8bd, 0xe8ba, 0xe8b9, 0xbe66, 0xc059, 0xec5a, 0xc055, 0xec5b, 0xec59, 0xc058, 0xc056, 0xc05a, 0xc057, 0xef45, 0xef4a, 0xef46, 0xef49, 0xc1fb, 0xedd4, 0xef48, 0xef47, 0xc344, 0xc342, 0xc345, 0xc343, 0xf1a8, 0xf1a9, 0xf1aa, 0xc346, 0xf3aa, 0xc440, 0xf3a8, 0xc441, 0xf3a7, 0xf3a9, 0xc3fe, 0xf551, 0xf54e, 0xf54f, 0xf550, 0xf672, 0xc556, 0xc555, 0xf774, 0xf773, 0xc5b8, 0xc5e3, 0xc649, 0xc660, 0xf958, 0xf9ae, 0xf9af, 0xadb7, 0xdcad, 0xe0e1, 0xe4cc, 0xe4cd, 0xbbe3, 0xbbe4, 0xe8be, 0xbe68, 0xc1fc, 0xf1ab, 0xc347, 0xf3ad, 0xc442, 0xf3ac, 0xf3ae, 0xf3ab, 0xf675, 0xf552, 0xf553, 0xc4c6, 0xf674, 0xf673, 0xf775, 0xf9b0, 0xadb8, 0xadb9, 0xb0a7, 0xd448, 0xd84f, 0xb6b8, 0xb6bb, 0xb6b9, 0xdcae, 0xb6bd, 0xb6ba, 0xb6bc, 0xb97e, 0xe0e2, 0xe0e3, 0xe8c0, 0xb97d, 0xb9a1, 0xb9a2, 0xe4cf, 0xe4ce, 0xbbe5, 0xbbe6, 0xe4d0, 0xe8bf, 0xbbe8, 0xbe69, 0xbbe7, 0xc05c, 0xe8c1, 0xbe6b, 0xbe6a, 0xe8c2, 0xe8c5, 0xe8c3, 0xe8c4, 0xbe6c, 0xc061, 0xc05f, 0xc05e, 0xec5d, 0xc060, 0xec5c, 0xef4b, 0xec5e, 0xc05d, 0xec5f, 0xef4e, 0xef4c, 0xef4d, 0xef52, 0xc34b, 0xef51, 0xef54, 0xef53, 0xef50, 0xef4f, 0xc1fd, 0xf1ae, 0xf1ad, 0xc34a, 0xc348, 0xc349, 0xf1ac, 0xf3b1, 0xc443, 0xf3b0, 0xf3af, 0xc444, 0xf558, 0xf557, 0xf555, 0xf554, 0xc4c8, 0xc4c7, 0xf559, 0xf776, 0xc5b9, 0xf677, 0xc557, 0xf676, 0xf556, 0xf777, 0xc5e4, 0xc661, 0xf959, 0xf9b1, 0xadba, 0xd850, 0xef55, 0xadbb, 0xe4d2, 0xe4d1, 0xec60, 0xef57, 0xef56, 0xc34c, 0xf3b2, 0xf3b3, 0xc4c9, 0xf9b2, 0xb0a8, 0xb6bf, 0xb6be, 0xe0e4, 0xe0e6, 0xb9a4, 0xe0e5, 0xb9a3, 0xb9a5, 0xe0e7, 0xe4d4, 0xe4d6, 0xe4d5, 0xe4d8, 0xbbe9, 0xe4d7, 0xe4d3, 0xe4d9, 0xe8cc, 0xe8cf, 0xe8d1, 0xe8c7, 0xe8cb, 0xe8c8, 0xbe6e, 0xbe71, 0xbe73, 0xe8c9, 0xe8ca, 0xbe72, 0xe8cd, 0xe8d0, 0xe8ce, 0xbe74, 0xbe70, 0xe8c6, 0xbe6d, 0xbe6f, 0xc063, 0xec66, 0xec64, 0xec63, 0xec69, 0xec68, 0xec67, 0xec62, 0xc062, 0xec61, 0xec65, 0xc064, 0xef5a, 0xef5e, 0xef5b, 0xef5d, 0xef5c, 0xef59, 0xef5f, 0xef62, 0xef60, 0xef61, 0xc240, 0xc1fe, 0xef58, 0xef63, 0xf1b3, 0xf1b6, 0xf1b8, 0xf1b7, 0xf1b1, 0xf1b5, 0xf1b0, 0xf1b2, 0xc34d, 0xf1af, 0xf1b4, 0xf3c0, 0xf3b5, 0xc445, 0xc446, 0xf3b4, 0xf3b9, 0xf3bf, 0xf3b7, 0xf3be, 0xf3bb, 0xf3ba, 0xf3bd, 0xf3b8, 0xf3b6, 0xf3bc, 0xf560, 0xf55e, 0xc4ca, 0xf55d, 0xf563, 0xf561, 0xc4cb, 0xf55c, 0xf55a, 0xf55b, 0xc4cd, 0xf55f, 0xc4cc, 0xf562, 0xf678, 0xf67e, 0xf679, 0xc55b, 0xf6a1, 0xc55a, 0xf67d, 0xf67c, 0xc559, 0xf67b, 0xc558, 0xf67a, 0xf77d, 0xf7a1, 0xf77e, 0xf77b, 0xc5bb, 0xf778, 0xf77c, 0xf7a3, 0xf7a2, 0xf779, 0xf77a, 0xc5ba, 0xf852, 0xc5e7, 0xf853, 0xc5e5, 0xc5e6, 0xf8d3, 0xc64a, 0xf976, 0xc66a, 0xf9b3, 0xc66b, 0xf9b4, 0xf9b5, 0xf9c3, 0xf9c2, 0xc67a, 0xf9cd, 0xb0a9, 0xe0e9, 0xe0e8, 0xbbea, 0xbbeb, 0xe4da, 0xe8d2, 0xec6c, 0xbe75, 0xc065, 0xec6a, 0xec6d, 0xc066, 0xef64, 0xec6b, 0xf1b9, 0xc34e, 0xf3c1, 0xf566, 0xf564, 0xf565, 0xf6a2, 0xc55c, 0xf7a4, 0xc5ea, 0xc5bc, 0xc5e8, 0xc5e9, 0xf8d4, 0xc662, 0xb0aa, 0xf1ba, 0xd449, 0xb9a6, 0xe4db, 0xbbec, 0xe4dc, 0xe8d4, 0xe8d3, 0xc068, 0xbe76, 0xbe77, 0xe8d7, 0xe8d6, 0xe8d5, 0xec6e, 0xec71, 0xec70, 0xec6f, 0xc067, 0xef68, 0xef66, 0xef65, 0xef67, 0xc34f, 0xf1bc, 0xf1bd, 0xc350, 0xf1bb, 0xf3c3, 0xf3c2, 0xf3c5, 0xc447, 0xf3c4, 0xf567, 0xf569, 0xf568, 0xf6a3, 0xf6a6, 0xf6a4, 0xf6a5, 0xf7a5, 0xc5bd, 0xf854, 0xf855, 0xf856, 0xc64b, 0xc663, 0xf9b6, 0xb0ab, 0xbe78, 0xc069, 0xf1be, 0xf7a6, 0xf9c4, 0xd44a, 0xc67b, 0xb0ac, 0xec72, 0xf1bf, 0xf3c6, 0xf6a7, 0xf7a7, 0xb0ad, 0xe4dd, 0xe4de, 0xbbed, 0xbbee, 0xe8d9, 0xbe7a, 0xbe79, 0xe8d8, 0xef69, 0xf1c0, 0xf1c2, 0xf1c1, 0xc353, 0xc352, 0xc351, 0xc55e, 0xf6a8, 0xc55d, 0xf7a9, 0xf7a8, 0xc64c, 0xf8d5, 0xb3bd, 0xe0ea, 0xe4e1, 0xe4df, 0xe4e0, 0xe8e2, 0xe8dd, 0xe8da, 0xe8e1, 0xe8e3, 0xbe7c, 0xe8e0, 0xe8dc, 0xe8db, 0xe8df, 0xe8de, 0xbe7b, 0xec7d, 0xec78, 0xec76, 0xeca1, 0xec77, 0xec73, 0xec79, 0xec74, 0xef72, 0xec75, 0xeca2, 0xec7c, 0xc06a, 0xec7b, 0xec7a, 0xec7e, 0xef6a, 0xef6d, 0xef6c, 0xef74, 0xef6f, 0xef73, 0xef71, 0xef70, 0xef6e, 0xef6b, 0xc243, 0xc242, 0xc244, 0xc241, 0xef75, 0xf1c8, 0xf1cb, 0xf1c9, 0xf1cd, 0xf1ce, 0xf1c6, 0xc358, 0xf1c7, 0xf1c5, 0xf1cc, 0xf1c4, 0xf1c3, 0xc357, 0xc355, 0xc354, 0xf1ca, 0xf3cf, 0xf3d5, 0xc44a, 0xf3d0, 0xf3d3, 0xf3d7, 0xc44b, 0xf3d2, 0xf3ca, 0xf3c9, 0xf3d6, 0xf3cd, 0xf3cb, 0xf3d4, 0xf3cc, 0xc449, 0xc448, 0xf3c7, 0xf3c8, 0xf3d1, 0xf3ce, 0xf56c, 0xf56f, 0xc356, 0xf56d, 0xf573, 0xf571, 0xf56b, 0xf576, 0xf56a, 0xc4cf, 0xf572, 0xf56e, 0xc4ce, 0xf575, 0xf574, 0xf6ab, 0xf6aa, 0xf6b1, 0xf6ad, 0xf6b0, 0xc560, 0xf6ae, 0xf6af, 0xf6a9, 0xf6ac, 0xc55f, 0xc5bf, 0xf7b4, 0xf7af, 0xf7b3, 0xf7b6, 0xf7b2, 0xf7ae, 0xc5c1, 0xf7b1, 0xf7b5, 0xc5c0, 0xf7ac, 0xf570, 0xf7b0, 0xf7ad, 0xf7aa, 0xf7ab, 0xc5be, 0xf85a, 0xf85c, 0xf85f, 0xf85b, 0xf860, 0xf859, 0xf857, 0xc5eb, 0xf85d, 0xc5ed, 0xc5ec, 0xf858, 0xf85e, 0xf8da, 0xc64d, 0xf8db, 0xf8d9, 0xf8d6, 0xf8d8, 0xf8d7, 0xf95a, 0xf95c, 0xf95b, 0xf979, 0xf978, 0xf977, 0xf97a, 0xc673, 0xc674, 0xf9ca, 0xf9ce, 0xb3be, 0xdcaf, 0xe0ed, 0xb9a7, 0xe0eb, 0xe0ec, 0xe4e2, 0xe4e3, 0xbbf1, 0xbbef, 0xe4e4, 0xbbf0, 0xe8e8, 0xe8eb, 0xe8e5, 0xe8ec, 0xe8e4, 0xe8e6, 0xe8e7, 0xe8ea, 0xbea1, 0xe8ef, 0xe8ee, 0xbe7d, 0xe8e9, 0xe8ed, 0xbe7e, 0xecac, 0xc06f, 0xeca7, 0xc06b, 0xeca4, 0xecaa, 0xecad, 0xc070, 0xeca9, 0xeca6, 0xecae, 0xeca5, 0xecab, 0xc06c, 0xeca3, 0xc06d, 0xc06e, 0xeca8, 0xefa9, 0xef7a, 0xef7b, 0xef7e, 0xef7c, 0xef76, 0xef79, 0xefa5, 0xef7d, 0xc245, 0xefa7, 0xefa4, 0xc246, 0xefa6, 0xef77, 0xefa2, 0xefa3, 0xefa1, 0xf1d2, 0xf1d4, 0xf1d7, 0xf1d1, 0xc359, 0xf1d9, 0xf1d0, 0xf1da, 0xf1d6, 0xf1d8, 0xf1dc, 0xf1d5, 0xf1dd, 0xf1d3, 0xf1cf, 0xc35a, 0xf1db, 0xc35b, 0xc44d, 0xef78, 0xf3f1, 0xf3e8, 0xc44f, 0xf3e4, 0xc450, 0xf3ed, 0xf3e7, 0xf3dd, 0xc44e, 0xf3ea, 0xf3e5, 0xf3e6, 0xf3d8, 0xf3df, 0xf3ee, 0xf3eb, 0xf3e3, 0xf3ef, 0xf3de, 0xf3d9, 0xf3ec, 0xf3db, 0xf3e9, 0xf3e0, 0xf3f0, 0xf3dc, 0xc44c, 0xf3da, 0xf3e1, 0xf3e2, 0xf57d, 0xf57b, 0xf5a2, 0xf5ae, 0xf5a5, 0xf57c, 0xf578, 0xf5a7, 0xf57e, 0xf5a3, 0xf57a, 0xf5aa, 0xf577, 0xf5a1, 0xf5a6, 0xf5a8, 0xf5ab, 0xf579, 0xf5af, 0xf5b0, 0xf5a9, 0xf5ad, 0xf5a4, 0xf6c1, 0xf6c4, 0xc561, 0xf6c3, 0xf6c8, 0xf6c6, 0xc562, 0xf6bd, 0xf6b3, 0xf6b2, 0xc564, 0xf6bf, 0xf6c0, 0xf6bc, 0xf6b4, 0xf6b9, 0xf5ac, 0xf6b5, 0xc563, 0xf6bb, 0xf6ba, 0xf6b6, 0xf6c2, 0xf6b7, 0xf7bb, 0xf6c5, 0xf6c7, 0xf6be, 0xf6b8, 0xf7bc, 0xf7be, 0xf7b8, 0xc5c2, 0xf7c5, 0xf7c3, 0xc5c3, 0xf7c2, 0xf7c1, 0xf7ba, 0xf7b7, 0xf7bd, 0xf7c6, 0xf7b9, 0xf7bf, 0xf869, 0xf86e, 0xf864, 0xf867, 0xc5ee, 0xf86b, 0xf872, 0xf7c0, 0xf865, 0xf86f, 0xf873, 0xf86a, 0xf863, 0xf86d, 0xf86c, 0xf871, 0xf870, 0xf7c4, 0xf868, 0xf862, 0xf866, 0xc64e, 0xc64f, 0xf861, 0xf8e6, 0xf8dd, 0xf8e5, 0xf8e2, 0xf8e3, 0xf8dc, 0xf8df, 0xf8e7, 0xf8e1, 0xf8e0, 0xf8de, 0xf8e4, 0xf95d, 0xf95e, 0xf960, 0xf95f, 0xf962, 0xf961, 0xf97c, 0xf97b, 0xf9b7, 0xf9b8, 0xf9c5, 0xc678, 0xc67c, 0xf9cf, 0xc67d, 0xb3bf, 0xc4d0, 0xf6c9, 0xc650, 0xc651, 0xb3c0, 0xe0ee, 0xb9a8, 0xe8f0, 0xecb0, 0xecb1, 0xecaf, 0xefab, 0xefaa, 0xc247, 0xf1df, 0xefac, 0xf1de, 0xf3f3, 0xc451, 0xc453, 0xf3f2, 0xc452, 0xf5b1, 0xf5b3, 0xf5b2, 0xf6ca, 0xc565, 0xc5ef, 0xf8e8, 0xf963, 0xf9d2, 0xb3c1, 0xe4e5, 0xbea2, 0xecb3, 0xecb2, 0xefad, 0xc454, 0xc4d1, 0xf7c7, 0xf9cb, 0xb3c2, 0xbbf2, 0xbea3, 0xf3f4, 0xf874, 0xb6c0, 0xefae, 0xc664, 0xb6c1, 0xbea4, 0xc248, 0xf875, 0xb6c2, 0xe8f1, 0xc072, 0xecb4, 0xecb5, 0xc071, 0xefaf, 0xc24c, 0xc24a, 0xc24b, 0xc249, 0xf1e0, 0xc35c, 0xf5b5, 0xf5b4, 0xf5b7, 0xf5b6, 0xc4d2, 0xf6cb, 0xf6cd, 0xf6cc, 0xc566, 0xf7c8, 0xf876, 0xf877, 0xc5f0, 0xf964, 0xf97d, 0xc675, 0xdcb0, 0xecb6, 0xefb0, 0xf3f5, 0xe0ef, 0xefb1, 0xf1e2, 0xf1e1, 0xf878, 0xc652, 0xf965, 0xf97e, 0xb9a9, 0xe8f2, 0xe8f3, 0xecb7, 0xb9aa, 0xc35d, 0xf1e3, 0xf6cf, 0xc567, 0xf6d0, 0xf6ce, 0xf879, 0xf8e9, 0xb9ab, 0xefb4, 0xefb3, 0xefb2, 0xf1e4, 0xf1e8, 0xf1e7, 0xf1e6, 0xf1e5, 0xc35e, 0xf3f6, 0xf5b9, 0xc4d3, 0xf5b8, 0xf6d1, 0xf7cb, 0xf7ca, 0xc5c4, 0xf7c9, 0xf87c, 0xf87b, 0xf87a, 0xbbf3, 0xecb8, 0xc24d, 0xf3f7, 0xf3f8, 0xf7cc, 0xf87d, 0xf8ea, 0xf966, 0xf9b9, 0xf9d4, 0xbbf4, 0xc24e, 0xf1e9, 0xf3f9, 0xf6d2, 0xf87e, 0xbea6, 0xefb5, 0xf1ea, 0xf3fa, 0xf3fb, 0xf3fc, 0xf5be, 0xf5ba, 0xc568, 0xf5bd, 0xf5bc, 0xc4d4, 0xf5bb, 0xc4d6, 0xc4d5, 0xf6d4, 0xf6d3, 0xc569, 0xc56a, 0xc5c6, 0xf7cd, 0xc5c5, 0xf8a3, 0xf8a4, 0xf8a2, 0xf8a1, 0xc654, 0xf8eb, 0xf8ec, 0xf8ed, 0xc653, 0xf967, 0xf96a, 0xf969, 0xf968, 0xf9d3, 0xc073, 0xc365, 0xf5bf, 0xf6d5, 0xc5c7, 0xf7ce, 0xf9d5, 0xc074, 0xefb6, 0xf7cf, 0xf9a1, 0xc94a, 0xddfc, 0xa14a, 0xa157, 0xa159, 0xa15b, 0xa15f, 0xa160, 0xa163, 0xa164, 0xa167, 0xa168, 0xa16b, 0xa16c, 0xa16f, 0xa170, 0xa173, 0xa174, 0xa177, 0xa178, 0xa17b, 0xa17c, 0xa1c6, 0xa1c7, 0xa1ca, 0xa1cb, 0xa1c8, 0xa1c9, 0xa15c, 0xa14d, 0xa14f, 0xa151, 0xa152, 0xa153, 0xa154, 0xa17d, 0xa17e, 0xa1a1, 0xa1a2, 0xa1a3, 0xa1a4, 0xa1cc, 0xa1cd, 0xa1ce, 0xa1de, 0xa1df, 0xa1e0, 0xa1e1, 0xa1e2, 0xa24c, 0xa24d, 0xa24e, 0xa149, 0xa1ad, 0xa243, 0xa248, 0xa1ae, 0xa15d, 0xa15e, 0xa1af, 0xa1cf, 0xa141, 0xa1d0, 0xa144, 0xa241, 0xa2af, 0xa2b0, 0xa2b1, 0xa2b2, 0xa2b3, 0xa2b4, 0xa2b5, 0xa2b6, 0xa2b7, 0xa2b8, 0xa147, 0xa146, 0xa1d5, 0xa1d7, 0xa1d6, 0xa148, 0xa249, 0xa2cf, 0xa2d0, 0xa2d1, 0xa2d2, 0xa2d3, 0xa2d4, 0xa2d5, 0xa2d6, 0xa2d7, 0xa2d8, 0xa2d9, 0xa2da, 0xa2db, 0xa2dc, 0xa2dd, 0xa2de, 0xa2df, 0xa2e0, 0xa2e1, 0xa2e2, 0xa2e3, 0xa2e4, 0xa2e5, 0xa2e6, 0xa2e7, 0xa2e8, 0xa242, 0xa1c4, 0xa2e9, 0xa2ea, 0xa2eb, 0xa2ec, 0xa2ed, 0xa2ee, 0xa2ef, 0xa2f0, 0xa2f1, 0xa2f2, 0xa2f3, 0xa2f4, 0xa2f5, 0xa2f6, 0xa2f7, 0xa2f8, 0xa2f9, 0xa2fa, 0xa2fb, 0xa2fc, 0xa2fd, 0xa2fe, 0xa340, 0xa341, 0xa342, 0xa343, 0xa161, 0xa155, 0xa162, 0xa14e, }; static const Summary16 big5_uni2indx_page00[16] = { /* 0x0000 */ { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x00ac }, { 4, 0x0083 }, { 7, 0x0000 }, { 7, 0x0080 }, { 8, 0x0000 }, { 8, 0x0080 }, }; static const Summary16 big5_uni2indx_page02[38] = { /* 0x0200 */ { 9, 0x0000 }, { 9, 0x0000 }, { 9, 0x0000 }, { 9, 0x0000 }, { 9, 0x0000 }, { 9, 0x0000 }, { 9, 0x0000 }, { 9, 0x0000 }, { 9, 0x0000 }, { 9, 0x0000 }, { 9, 0x0000 }, { 9, 0x0000 }, { 9, 0x0e80 }, { 13, 0x0200 }, { 14, 0x0000 }, { 14, 0x0000 }, /* 0x0300 */ { 14, 0x0000 }, { 14, 0x0000 }, { 14, 0x0000 }, { 14, 0x0000 }, { 14, 0x0000 }, { 14, 0x0000 }, { 14, 0x0000 }, { 14, 0x0000 }, { 14, 0x0000 }, { 14, 0xfffe }, { 29, 0x03fb }, { 38, 0xfffe }, { 53, 0x03fb }, { 62, 0x0000 }, { 62, 0x0000 }, { 62, 0x0000 }, /* 0x0400 */ { 62, 0x0002 }, { 63, 0x1ff0 }, { 72, 0xfff8 }, { 85, 0xffff }, { 101, 0xffff }, { 117, 0x0002 }, }; static const Summary16 big5_uni2indx_page20[44] = { /* 0x2000 */ { 118, 0x0000 }, { 118, 0x3318 }, { 124, 0x0064 }, { 127, 0x4824 }, { 131, 0x0000 }, { 131, 0x0000 }, { 131, 0x0000 }, { 131, 0x0000 }, { 131, 0x0000 }, { 131, 0x0000 }, { 131, 0x0000 }, { 131, 0x0000 }, { 131, 0x0000 }, { 131, 0x0000 }, { 131, 0x0000 }, { 131, 0x0000 }, /* 0x2100 */ { 131, 0x0228 }, { 134, 0x0000 }, { 134, 0x0000 }, { 134, 0x0000 }, { 134, 0x0000 }, { 134, 0x0000 }, { 134, 0x03ff }, { 144, 0x0000 }, { 144, 0x0000 }, { 144, 0x03cf }, { 152, 0x0000 }, { 152, 0x0000 }, { 152, 0x0000 }, { 152, 0x0000 }, { 152, 0x0000 }, { 152, 0x0000 }, /* 0x2200 */ { 152, 0x0000 }, { 152, 0xc400 }, { 155, 0x4e29 }, { 162, 0x1030 }, { 165, 0x0000 }, { 165, 0x0004 }, { 166, 0x00c3 }, { 170, 0x0000 }, { 170, 0x0000 }, { 170, 0x0000 }, { 170, 0x0020 }, { 171, 0x8000 }, }; static const Summary16 big5_uni2indx_page24[37] = { /* 0x2400 */ { 172, 0x0000 }, { 172, 0x0000 }, { 172, 0x0000 }, { 172, 0x0000 }, { 172, 0x0000 }, { 172, 0x0000 }, { 172, 0x03ff }, { 182, 0x3ff0 }, { 192, 0x0000 }, { 192, 0x0000 }, { 192, 0x0000 }, { 192, 0x0000 }, { 192, 0x0000 }, { 192, 0x0000 }, { 192, 0x0000 }, { 192, 0x0000 }, /* 0x2500 */ { 192, 0x1005 }, { 195, 0x1111 }, { 199, 0x1010 }, { 201, 0x1010 }, { 203, 0x0000 }, { 203, 0x4001 }, { 205, 0xe402 }, { 210, 0x000f }, { 214, 0xfffe }, { 229, 0x0030 }, { 231, 0x0003 }, { 233, 0x300c }, { 237, 0xc8c0 }, { 242, 0x0000 }, { 242, 0x003c }, { 246, 0x0000 }, /* 0x2600 */ { 246, 0x0260 }, { 249, 0x0000 }, { 249, 0x0000 }, { 249, 0x0000 }, { 249, 0x0007 }, }; static const Summary16 big5_uni2indx_page30[62] = { /* 0x3000 */ { 252, 0xff2f }, { 265, 0x6037 }, { 272, 0x03fe }, { 281, 0x0000 }, { 281, 0xfffe }, { 296, 0xffff }, { 312, 0xffff }, { 328, 0xffff }, { 344, 0xffff }, { 360, 0x600f }, { 366, 0xfffe }, { 381, 0xffff }, { 397, 0xffff }, { 413, 0xffff }, { 429, 0xffff }, { 445, 0x407f }, /* 0x3100 */ { 453, 0xffe0 }, { 464, 0xffff }, { 480, 0x03ff }, { 490, 0x0000 }, { 490, 0x0000 }, { 490, 0x0000 }, { 490, 0x0000 }, { 490, 0x0000 }, { 490, 0x0000 }, { 490, 0x0000 }, { 490, 0x0000 }, { 490, 0x0000 }, { 490, 0x0000 }, { 490, 0x0000 }, { 490, 0x0000 }, { 490, 0x0000 }, /* 0x3200 */ { 490, 0x0000 }, { 490, 0x0000 }, { 490, 0x0000 }, { 490, 0x0000 }, { 490, 0x0000 }, { 490, 0x0000 }, { 490, 0x0000 }, { 490, 0x0000 }, { 490, 0x0000 }, { 490, 0x0000 }, { 490, 0x0008 }, { 491, 0x0000 }, { 491, 0x0000 }, { 491, 0x0000 }, { 491, 0x0000 }, { 491, 0x0000 }, /* 0x3300 */ { 491, 0x0000 }, { 491, 0x0000 }, { 491, 0x0000 }, { 491, 0x0000 }, { 491, 0x0000 }, { 491, 0x0000 }, { 491, 0x0000 }, { 491, 0x0000 }, { 491, 0xc000 }, { 493, 0x7000 }, { 496, 0x0002 }, { 497, 0x0000 }, { 497, 0x4010 }, { 499, 0x0026 }, }; static const Summary16 big5_uni2indx_page4e[1307] = { /* 0x4e00 */ { 502, 0xff8b }, { 514, 0xc373 }, { 523, 0x6840 }, { 527, 0x1b0f }, { 535, 0xe9ac }, { 544, 0xf34c }, { 553, 0x0200 }, { 554, 0xc008 }, { 557, 0x795c }, { 566, 0xca3e }, { 575, 0x7976 }, { 585, 0x0648 }, { 589, 0x2fdf }, { 601, 0xf7f0 }, { 612, 0x033a }, { 618, 0xa8ff }, /* 0x4f00 */ { 629, 0xef37 }, { 641, 0x233f }, { 650, 0xb004 }, { 654, 0xfd59 }, { 665, 0xf3ca }, { 675, 0xffff }, { 691, 0xde9f }, { 703, 0xfff9 }, { 717, 0xabff }, { 730, 0x7df7 }, { 743, 0xc000 }, { 745, 0x8eec }, { 754, 0xeebf }, { 767, 0xffdb }, { 781, 0xd003 }, { 786, 0x45fa }, /* 0x5000 */ { 795, 0xfae1 }, { 805, 0xdffe }, { 819, 0xbfef }, { 833, 0x10ab }, { 839, 0xffeb }, { 853, 0xfcaa }, { 863, 0xef3f }, { 876, 0x24fd }, { 885, 0x78ad }, { 894, 0x7f76 }, { 906, 0xf00c }, { 912, 0xedff }, { 926, 0xcff6 }, { 938, 0x2cfa }, { 947, 0xf7f9 }, { 960, 0xeb6b }, /* 0x5100 */ { 971, 0x1ffd }, { 983, 0x95bf }, { 994, 0x6677 }, { 1004, 0xbfbf }, { 1018, 0x3bfb }, { 1030, 0xfeb4 }, { 1041, 0x7bae }, { 1052, 0x11e2 }, { 1058, 0xa681 }, { 1064, 0x41be }, { 1072, 0x1435 }, { 1078, 0x72c3 }, { 1086, 0x7d70 }, { 1095, 0x7191 }, { 1102, 0x0003 }, { 1104, 0x276b }, /* 0x5200 */ { 1113, 0x57cb }, { 1123, 0x70cf }, { 1132, 0x4732 }, { 1139, 0x0def }, { 1149, 0x7eda }, { 1160, 0xfc74 }, { 1170, 0xfe06 }, { 1179, 0xbdb4 }, { 1189, 0x3f9f }, { 1201, 0x8bca }, { 1209, 0x7e49 }, { 1218, 0x5800 }, { 1221, 0x228f }, { 1228, 0xebec }, { 1239, 0x8a5c }, { 1246, 0xddbb }, /* 0x5300 */ { 1258, 0xef60 }, { 1267, 0xb6e7 }, { 1278, 0xa40f }, { 1285, 0xf293 }, { 1294, 0x37bb }, { 1305, 0x549e }, { 1313, 0xd04b }, { 1320, 0x9baf }, { 1331, 0xc414 }, { 1336, 0xf7d4 }, { 1347, 0x30b0 }, { 1352, 0x0a14 }, { 1356, 0x2f08 }, { 1362, 0x88d0 }, { 1367, 0xff7e }, { 1381, 0x192f }, /* 0x5400 */ { 1389, 0xffda }, { 1402, 0xfb07 }, { 1412, 0x7ff1 }, { 1424, 0x7beb }, { 1436, 0xc5ef }, { 1447, 0x0010 }, { 1448, 0x99ff }, { 1460, 0xfdff }, { 1475, 0x79d7 }, { 1486, 0x0567 }, { 1493, 0xffe7 }, { 1507, 0xfdcb }, { 1519, 0xc3ff }, { 1531, 0x4040 }, { 1533, 0x6ff7 }, { 1546, 0xbd8e }, /* 0x5500 */ { 1556, 0xdffa }, { 1569, 0x0497 }, { 1575, 0xf4c0 }, { 1582, 0x5bff }, { 1595, 0xed7b }, { 1607, 0xd0e7 }, { 1616, 0x047e }, { 1623, 0xf8e0 }, { 1631, 0xff9f }, { 1645, 0xb73e }, { 1656, 0x7dfe }, { 1669, 0x882e }, { 1675, 0xfffd }, { 1690, 0xbe7f }, { 1703, 0x83fe }, { 1713, 0xf6c4 }, /* 0x5600 */ { 1722, 0xf357 }, { 1733, 0xb8fd }, { 1744, 0xd680 }, { 1750, 0xef7d }, { 1763, 0x5767 }, { 1773, 0x4788 }, { 1779, 0xff7d }, { 1793, 0xc3df }, { 1804, 0xf0ff }, { 1816, 0x37a9 }, { 1825, 0x7de0 }, { 1834, 0x70fc }, { 1843, 0x3f6f }, { 1855, 0xec9a }, { 1864, 0x4cb3 }, { 1872, 0x8681 }, /* 0x5700 */ { 1877, 0x3f9e }, { 1888, 0xdd5c }, { 1898, 0xf70d }, { 1908, 0x4819 }, { 1913, 0xfea3 }, { 1924, 0x0007 }, { 1927, 0xaf56 }, { 1937, 0x38ff }, { 1948, 0x980d }, { 1954, 0xefb8 }, { 1965, 0x403d }, { 1971, 0xb760 }, { 1979, 0xd8ce }, { 1988, 0x9035 }, { 1994, 0x72bf }, { 2005, 0x3fff }, /* 0x5800 */ { 2019, 0x7ff7 }, { 2033, 0x7a11 }, { 2040, 0xf7bb }, { 2053, 0xabff }, { 2066, 0xff00 }, { 2074, 0x6fbe }, { 2086, 0xa93c }, { 2094, 0xfe72 }, { 2105, 0xcfef }, { 2118, 0xf11b }, { 2127, 0xdb6b }, { 2138, 0xf40a }, { 2145, 0xc3e6 }, { 2154, 0xef7e }, { 2167, 0x9b9c }, { 2176, 0xf610 }, /* 0x5900 */ { 2183, 0xf048 }, { 2189, 0x16f4 }, { 2197, 0xfeb5 }, { 2209, 0x5182 }, { 2214, 0xc7b1 }, { 2223, 0x15bb }, { 2232, 0x6e87 }, { 2241, 0xfbdf }, { 2255, 0xe43f }, { 2265, 0x63cd }, { 2274, 0xc1ff }, { 2285, 0x7e7e }, { 2297, 0xfdeb }, { 2310, 0x7d5f }, { 2322, 0x777b }, { 2334, 0xfcfe }, /* 0x5a00 */ { 2347, 0x960b }, { 2354, 0xdbea }, { 2365, 0x6229 }, { 2371, 0x53e8 }, { 2379, 0x37df }, { 2391, 0xfdef }, { 2405, 0x36f5 }, { 2415, 0xbd81 }, { 2423, 0xdc18 }, { 2430, 0xfcbd }, { 2442, 0xd2e4 }, { 2450, 0xffff }, { 2466, 0x3fd7 }, { 2478, 0xffe0 }, { 2489, 0x7f6f }, { 2502, 0xabf8 }, /* 0x5b00 */ { 2512, 0x9bae }, { 2522, 0x6ed9 }, { 2532, 0xf5fb }, { 2545, 0xf115 }, { 2553, 0x79a9 }, { 2562, 0xbdfb }, { 2575, 0x5a3c }, { 2583, 0xadaf }, { 2594, 0xdbba }, { 2605, 0x1fac }, { 2614, 0x71fc }, { 2624, 0x8379 }, { 2632, 0x7cf7 }, { 2644, 0xc35f }, { 2654, 0xdfff }, { 2669, 0x0567 }, /* 0x5c00 */ { 2676, 0xff9a }, { 2688, 0x8467 }, { 2695, 0x1534 }, { 2701, 0xdf8b }, { 2712, 0xf9f3 }, { 2724, 0x3373 }, { 2733, 0xf7bd }, { 2746, 0x5e1a }, { 2754, 0xbf40 }, { 2762, 0xa03f }, { 2770, 0xffff }, { 2786, 0x01eb }, { 2793, 0xdfc0 }, { 2802, 0xcfdd }, { 2814, 0x7500 }, { 2819, 0xabd3 }, /* 0x5d00 */ { 2829, 0xf8c3 }, { 2838, 0xeed6 }, { 2849, 0x43fd }, { 2859, 0xb7ff }, { 2873, 0x5eaf }, { 2884, 0x4227 }, { 2890, 0x9bac }, { 2899, 0xf686 }, { 2908, 0x27d7 }, { 2918, 0xf6bc }, { 2929, 0xf787 }, { 2940, 0x35b7 }, { 2950, 0xaacd }, { 2959, 0xe176 }, { 2968, 0x49e7 }, { 2977, 0xe29f }, /* 0x5e00 */ { 2987, 0x545c }, { 2994, 0xaff2 }, { 3005, 0x2b3f }, { 3015, 0x61d8 }, { 3022, 0xfc3b }, { 3033, 0xbbb8 }, { 3043, 0xffcf }, { 3057, 0x7b7d }, { 3069, 0xbf95 }, { 3080, 0x1ce0 }, { 3086, 0x7dfd }, { 3099, 0x43ff }, { 3110, 0x5ff6 }, { 3122, 0xfffe }, { 3137, 0xd3ef }, { 3149, 0xc4ce }, /* 0x5f00 */ { 3157, 0x8db6 }, { 3166, 0xadbc }, { 3176, 0x63dc }, { 3185, 0x11eb }, { 3193, 0xdf59 }, { 3204, 0x23d0 }, { 3210, 0xbeb4 }, { 3220, 0xf3db }, { 3232, 0x1fe7 }, { 3243, 0xdbc7 }, { 3254, 0xff63 }, { 3266, 0xfae4 }, { 3276, 0xb22b }, { 3284, 0x63f7 }, { 3295, 0xed3b }, { 3306, 0xadba }, /* 0x6000 */ { 3316, 0xfe01 }, { 3324, 0x7eff }, { 3338, 0xfff7 }, { 3353, 0x02bc }, { 3359, 0x32ff }, { 3370, 0xef39 }, { 3381, 0xfffc }, { 3395, 0x8005 }, { 3398, 0x77fb }, { 3411, 0xbcf5 }, { 3422, 0x010d }, { 3426, 0xfff7 }, { 3441, 0xfffb }, { 3456, 0xbf3a }, { 3467, 0x0057 }, { 3472, 0xdfff }, /* 0x6100 */ { 3487, 0xef7b }, { 3500, 0xbd7d }, { 3512, 0xdb88 }, { 3520, 0xc8d4 }, { 3527, 0xfff3 }, { 3541, 0xed7c }, { 3552, 0x5dee }, { 3563, 0x56ff }, { 3575, 0x7e0d }, { 3584, 0xac5f }, { 3594, 0xff96 }, { 3606, 0xd57f }, { 3618, 0x3fee }, { 3630, 0xc140 }, { 3634, 0x6ff9 }, { 3646, 0xffe7 }, /* 0x6200 */ { 3660, 0x779b }, { 3671, 0x8e77 }, { 3681, 0x6ebf }, { 3693, 0xe45d }, { 3702, 0x6fcf }, { 3714, 0x5f1f }, { 3725, 0xe07f }, { 3735, 0xfedf }, { 3749, 0xd7db }, { 3761, 0x01fe }, { 3769, 0xff00 }, { 3777, 0xfb7b }, { 3790, 0xffd4 }, { 3802, 0x1fdf }, { 3814, 0xf800 }, { 3819, 0xffff }, /* 0x6300 */ { 3835, 0xfb8f }, { 3847, 0x007b }, { 3853, 0xbf00 }, { 3860, 0x7f5c }, { 3871, 0xffff }, { 3887, 0x07f3 }, { 3896, 0xeba0 }, { 3904, 0x3de7 }, { 3915, 0xf7bf }, { 3929, 0xfbd7 }, { 3942, 0xffbf }, { 3957, 0x6003 }, { 3961, 0xfffd }, { 3976, 0xbfed }, { 3989, 0xefbb }, { 4002, 0x027f }, /* 0x6400 */ { 4010, 0xfe40 }, { 4018, 0xddfd }, { 4031, 0xfdff }, { 4046, 0xe2f9 }, { 4056, 0x680b }, { 4062, 0xfb1f }, { 4074, 0xfbe3 }, { 4086, 0xaffd }, { 4099, 0x9fa4 }, { 4108, 0xf7ed }, { 4121, 0x7a7d }, { 4132, 0xf80f }, { 4141, 0xeebe }, { 4153, 0x0fd5 }, { 4162, 0xbb5d }, { 4173, 0xfd9f }, /* 0x6500 */ { 4186, 0xf2db }, { 4197, 0x3bf9 }, { 4208, 0xfe7f }, { 4222, 0xebcc }, { 4232, 0x876a }, { 4240, 0x73fa }, { 4251, 0x95fc }, { 4261, 0x9ffc }, { 4273, 0x109f }, { 4280, 0xfaf7 }, { 4293, 0xddb7 }, { 4305, 0xbbcd }, { 4316, 0xf87e }, { 4327, 0xeccd }, { 4337, 0xf366 }, { 4347, 0x3c3f }, /* 0x6600 */ { 4357, 0xfffd }, { 4372, 0xb03f }, { 4381, 0xe9f7 }, { 4393, 0x067e }, { 4401, 0x96ae }, { 4410, 0xfe06 }, { 4419, 0xd576 }, { 4429, 0x5fd7 }, { 4441, 0x3fd1 }, { 4451, 0xa3f3 }, { 4461, 0xcf07 }, { 4470, 0x6fb7 }, { 4482, 0x9fd1 }, { 4492, 0x7f44 }, { 4501, 0x7b59 }, { 4511, 0xd3dd }, /* 0x6700 */ { 4522, 0xaf3b }, { 4533, 0xa9bd }, { 4543, 0x7dcf }, { 4555, 0xff3a }, { 4567, 0xfbe0 }, { 4577, 0xf6eb }, { 4589, 0xb401 }, { 4594, 0xffff }, { 4610, 0x7afa }, { 4621, 0xb7bf }, { 4634, 0xc000 }, { 4636, 0x0ffd }, { 4647, 0xff7f }, { 4662, 0xff1f }, { 4675, 0xfefc }, { 4688, 0x95ff }, /* 0x6800 */ { 4700, 0x0000 }, { 4700, 0xb5dc }, { 4710, 0xef63 }, { 4721, 0x3f3e }, { 4732, 0xfb7f }, { 4746, 0x001b }, { 4750, 0xe800 }, { 4754, 0xfbf6 }, { 4767, 0x9eef }, { 4779, 0xb8df }, { 4790, 0xff9f }, { 4804, 0x003f }, { 4810, 0x7bd0 }, { 4819, 0xf5ff }, { 4833, 0xdfdb }, { 4846, 0x3fff }, /* 0x6900 */ { 4860, 0xfdf0 }, { 4871, 0x00bf }, { 4878, 0x8420 }, { 4881, 0xbbbd }, { 4893, 0xdf37 }, { 4905, 0xffde }, { 4919, 0xff6d }, { 4932, 0x0ff3 }, { 4942, 0x604c }, { 4947, 0x5efb }, { 4959, 0xfffb }, { 4974, 0xfafb }, { 4987, 0xfe5e }, { 4999, 0x0219 }, { 5003, 0x79f4 }, { 5013, 0xf9de }, /* 0x6a00 */ { 5025, 0xa7f7 }, { 5037, 0xebfa }, { 5049, 0x01eb }, { 5056, 0xff34 }, { 5067, 0xebd3 }, { 5078, 0xef73 }, { 5090, 0xafd7 }, { 5102, 0xc040 }, { 5105, 0x72bb }, { 5115, 0xdcff }, { 5128, 0xf17f }, { 5140, 0x2fd8 }, { 5149, 0xb8ec }, { 5158, 0xfe0b }, { 5168, 0xdda3 }, { 5178, 0x1f0b }, /* 0x6b00 */ { 5186, 0x8f1d }, { 5195, 0x47cf }, { 5205, 0xb12b }, { 5213, 0xffde }, { 5227, 0x7fee }, { 5240, 0xda73 }, { 5250, 0x24ff }, { 5260, 0xcbc4 }, { 5268, 0xf75d }, { 5280, 0xcbf2 }, { 5290, 0xecfd }, { 5302, 0xb4ed }, { 5312, 0xbff9 }, { 5325, 0x4ddd }, { 5335, 0x99dd }, { 5345, 0xfb8d }, /* 0x6c00 */ { 5356, 0xbb7f }, { 5369, 0xaf7b }, { 5381, 0xddfb }, { 5394, 0xc959 }, { 5402, 0xfc4f }, { 5413, 0xfab5 }, { 5424, 0xafe3 }, { 5435, 0x6d5f }, { 5446, 0xffff }, { 5462, 0x3f7d }, { 5474, 0x7800 }, { 5478, 0xffdb }, { 5492, 0xb6ff }, { 5505, 0x7eff }, { 5519, 0xfbaf }, { 5532, 0x022f }, /* 0x6d00 */ { 5538, 0xff9b }, { 5551, 0xefc7 }, { 5563, 0xffa5 }, { 5575, 0xffff }, { 5591, 0x0007 }, { 5594, 0xc700 }, { 5599, 0xf7ff }, { 5614, 0xfff1 }, { 5627, 0x7ffd }, { 5641, 0x01bf }, { 5649, 0xdc00 }, { 5654, 0xfdbc }, { 5666, 0xbff5 }, { 5679, 0xffff }, { 5695, 0xff7f }, { 5710, 0x3eff }, /* 0x6e00 */ { 5723, 0x0029 }, { 5726, 0xbe00 }, { 5732, 0xf9ff }, { 5746, 0xff7f }, { 5761, 0x6efb }, { 5773, 0xfd7e }, { 5786, 0xcbff }, { 5799, 0x039e }, { 5806, 0xe300 }, { 5811, 0xfbdd }, { 5824, 0xccff }, { 5836, 0xf6df }, { 5849, 0xffff }, { 5865, 0x117f }, { 5874, 0xf800 }, { 5879, 0xfbf6 }, /* 0x6f00 */ { 5892, 0xe7ef }, { 5905, 0xd73c }, { 5915, 0xfeef }, { 5929, 0xdfef }, { 5943, 0xc00b }, { 5948, 0xedbf }, { 5961, 0xfedf }, { 5975, 0xfdcd }, { 5987, 0x7bf5 }, { 5999, 0x40fd }, { 6007, 0xffff }, { 6023, 0xb75f }, { 6035, 0xffdf }, { 6050, 0xf930 }, { 6058, 0xfbdf }, { 6072, 0xdc97 }, /* 0x7000 */ { 6082, 0xfef3 }, { 6095, 0xbff2 }, { 6107, 0x8fdf }, { 6119, 0xdfbf }, { 6133, 0x177f }, { 6144, 0xede6 }, { 6155, 0x0f7f }, { 6166, 0x3553 }, { 6174, 0x447c }, { 6181, 0x877e }, { 6191, 0xfa12 }, { 6199, 0x45bb }, { 6208, 0xede0 }, { 6217, 0x779e }, { 6228, 0x8017 }, { 6233, 0xbfd9 }, /* 0x7100 */ { 6245, 0x7e55 }, { 6255, 0xde89 }, { 6264, 0xc16f }, { 6273, 0x0447 }, { 6278, 0x7ade }, { 6289, 0xf75d }, { 6301, 0x57ff }, { 6314, 0x2905 }, { 6319, 0x86f7 }, { 6329, 0xfe95 }, { 6340, 0x97b3 }, { 6350, 0xf32f }, { 6361, 0xcfff }, { 6375, 0x9f75 }, { 6386, 0x71f7 }, { 6397, 0xfb17 }, /* 0x7200 */ { 6408, 0x34ee }, { 6417, 0xee19 }, { 6426, 0x37cc }, { 6435, 0xef61 }, { 6445, 0x9fd6 }, { 6456, 0xef4c }, { 6466, 0xd68f }, { 6476, 0xfbdd }, { 6489, 0x7b73 }, { 6500, 0x6def }, { 6512, 0xd7fe }, { 6525, 0xa431 }, { 6531, 0x5e7f }, { 6543, 0x97d7 }, { 6554, 0x0f5b }, { 6563, 0xffd8 }, /* 0x7300 */ { 6575, 0x9d83 }, { 6583, 0x7bce }, { 6594, 0x22ec }, { 6601, 0xdcff }, { 6614, 0x763d }, { 6624, 0xef87 }, { 6635, 0xdfe7 }, { 6648, 0xfded }, { 6661, 0x4fff }, { 6674, 0xa0fc }, { 6682, 0x3b77 }, { 6693, 0xdbfc }, { 6705, 0x3ded }, { 6716, 0x7fdc }, { 6728, 0x6fa9 }, { 6738, 0xf570 }, /* 0x7400 */ { 6747, 0x3ffb }, { 6760, 0x2c40 }, { 6764, 0xff7f }, { 6779, 0x847f }, { 6788, 0xec57 }, { 6798, 0xdeb7 }, { 6810, 0xe69c }, { 6819, 0xf22f }, { 6829, 0x0feb }, { 6839, 0xd5b5 }, { 6849, 0xafeb }, { 6861, 0xede7 }, { 6873, 0x8c2f }, { 6881, 0xfff0 }, { 6893, 0x537f }, { 6904, 0xe8f0 }, /* 0x7500 */ { 6912, 0xb99d }, { 6922, 0xb5ff }, { 6935, 0xff66 }, { 6947, 0xe78f }, { 6958, 0xd981 }, { 6965, 0xbe10 }, { 6972, 0x9c7c }, { 6981, 0xe3c1 }, { 6989, 0x9cd1 }, { 6997, 0x2733 }, { 7005, 0x0cbc }, { 7012, 0xff6d }, { 7025, 0xfcb7 }, { 7037, 0xefb7 }, { 7050, 0xa0df }, { 7059, 0xffff }, /* 0x7600 */ { 7075, 0xbf0b }, { 7085, 0xfe7b }, { 7098, 0xa3ff }, { 7110, 0x353f }, { 7120, 0x13cc }, { 7127, 0x97cd }, { 7137, 0x7637 }, { 7147, 0xfb27 }, { 7158, 0xcfd6 }, { 7169, 0x7e6c }, { 7179, 0xec50 }, { 7186, 0xed31 }, { 7195, 0x677c }, { 7205, 0xfc1c }, { 7214, 0xf6fa }, { 7226, 0x5fbf }, /* 0x7700 */ { 7239, 0x0fba }, { 7248, 0xae2f }, { 7258, 0xa3ad }, { 7267, 0x7ffe }, { 7281, 0xfcf0 }, { 7291, 0xde74 }, { 7301, 0xffef }, { 7316, 0xf200 }, { 7321, 0xfbbf }, { 7335, 0xfea2 }, { 7345, 0x3daf }, { 7356, 0xbcff }, { 7369, 0xf694 }, { 7378, 0x5fb9 }, { 7389, 0xf3ad }, { 7400, 0x3f8f }, /* 0x7800 */ { 7411, 0xf26c }, { 7420, 0xa01f }, { 7427, 0xffef }, { 7442, 0x01bf }, { 7450, 0x7728 }, { 7458, 0x7005 }, { 7463, 0xff35 }, { 7475, 0xda03 }, { 7482, 0xd2f9 }, { 7492, 0xc7fa }, { 7503, 0x3fbf }, { 7516, 0x5c1d }, { 7524, 0xff3a }, { 7536, 0xec33 }, { 7545, 0xb7af }, { 7557, 0xfe9c }, /* 0x7900 */ { 7568, 0x5236 }, { 7575, 0x7a9f }, { 7586, 0xbffa }, { 7599, 0xe722 }, { 7607, 0x9ff7 }, { 7620, 0xfcff }, { 7634, 0x2fbb }, { 7645, 0xb61d }, { 7654, 0xed06 }, { 7662, 0x1dfd }, { 7673, 0x7dd7 }, { 7685, 0xefdf }, { 7699, 0xeb23 }, { 7708, 0xf166 }, { 7717, 0x7ed9 }, { 7728, 0x0dc0 }, /* 0x7a00 */ { 7733, 0x3d3d }, { 7743, 0xdfbf }, { 7757, 0xc945 }, { 7764, 0xba83 }, { 7772, 0x7dd1 }, { 7782, 0x9dd0 }, { 7790, 0x7b87 }, { 7800, 0xcf73 }, { 7811, 0x9ff3 }, { 7823, 0xc3f5 }, { 7833, 0xdf0d }, { 7843, 0xc5fe }, { 7854, 0x0cb3 }, { 7861, 0x8302 }, { 7865, 0xe879 }, { 7874, 0xaec0 }, /* 0x7b00 */ { 7881, 0xc773 }, { 7891, 0x6f0f }, { 7901, 0xfd7d }, { 7914, 0x093f }, { 7922, 0xfff1 }, { 7935, 0x0157 }, { 7941, 0x62fb }, { 7951, 0x01ff }, { 7960, 0xfdb4 }, { 7971, 0x3bf3 }, { 7982, 0xb013 }, { 7988, 0x43b2 }, { 7995, 0x5ed3 }, { 8005, 0xff30 }, { 8015, 0x0fff }, { 8027, 0xeb9f }, /* 0x7c00 */ { 8039, 0xfeef }, { 8053, 0xf203 }, { 8060, 0x3fef }, { 8073, 0xfb89 }, { 8083, 0x37a9 }, { 8092, 0x9e99 }, { 8101, 0xdef9 }, { 8113, 0xa72c }, { 8121, 0x3733 }, { 8130, 0xc1f6 }, { 8139, 0x812e }, { 8145, 0xfe3e }, { 8157, 0x5d20 }, { 8163, 0xf2f7 }, { 8175, 0xd585 }, { 8183, 0x69d7 }, /* 0x7d00 */ { 8193, 0xffff }, { 8209, 0xffff }, { 8225, 0xdb07 }, { 8234, 0xff6f }, { 8248, 0xc4ff }, { 8259, 0xd97f }, { 8271, 0xefce }, { 8283, 0xbe0f }, { 8293, 0xf17b }, { 8304, 0xf05e }, { 8313, 0xf6cf }, { 8325, 0xffb7 }, { 8339, 0x5ef7 }, { 8351, 0xef84 }, { 8360, 0xd7cb }, { 8371, 0x0edf }, /* 0x7e00 */ { 8381, 0xff08 }, { 8390, 0xfcff }, { 8404, 0xee3f }, { 8416, 0xffff }, { 8432, 0x13ff }, { 8443, 0xd7ff }, { 8457, 0xaf0f }, { 8467, 0x7ffd }, { 8481, 0xbdc7 }, { 8492, 0x1ffa }, { 8503, 0x0000 }, { 8503, 0x0000 }, { 8503, 0x0000 }, { 8503, 0x0000 }, { 8503, 0x0000 }, { 8503, 0x0000 }, /* 0x7f00 */ { 8503, 0x0000 }, { 8503, 0x0000 }, { 8503, 0x0000 }, { 8503, 0xe740 }, { 8510, 0xbd38 }, { 8519, 0xf933 }, { 8529, 0x7feb }, { 8542, 0xfeed }, { 8555, 0x7fe8 }, { 8566, 0x7c76 }, { 8576, 0xb3f7 }, { 8588, 0xffef }, { 8603, 0xfeaf }, { 8616, 0xd8b7 }, { 8626, 0xff6f }, { 8640, 0xfbbf }, /* 0x8000 */ { 8654, 0xf8fb }, { 8666, 0xdbf7 }, { 8679, 0x1752 }, { 8686, 0xe2f9 }, { 8696, 0x85c8 }, { 8702, 0x7547 }, { 8711, 0x9090 }, { 8715, 0xe3ef }, { 8727, 0x9ef4 }, { 8737, 0x3f6d }, { 8748, 0xee2e }, { 8758, 0x0536 }, { 8764, 0xf7bc }, { 8776, 0x7ff3 }, { 8789, 0xa07b }, { 8797, 0x7f3f }, /* 0x8100 */ { 8810, 0x0567 }, { 8817, 0xeb60 }, { 8825, 0xbabe }, { 8836, 0x6601 }, { 8841, 0xfcd8 }, { 8851, 0x583f }, { 8860, 0xcaf7 }, { 8871, 0x87df }, { 8882, 0xbfcd }, { 8894, 0xffa0 }, { 8904, 0x5bcd }, { 8914, 0xfebf }, { 8928, 0xb6fd }, { 8940, 0xefa7 }, { 8952, 0x77ef }, { 8965, 0xdf9c }, /* 0x8200 */ { 8976, 0x3fb7 }, { 8988, 0xf877 }, { 8999, 0x9d27 }, { 9008, 0xb7fc }, { 9020, 0xcab5 }, { 9029, 0xdfef }, { 9043, 0xfb5a }, { 9054, 0xf1b6 }, { 9064, 0xec39 }, { 9073, 0xef1f }, { 9085, 0xfbbf }, { 9099, 0x7ffb }, { 9113, 0x000d }, { 9116, 0xdafe }, { 9128, 0xbdfb }, { 9141, 0x4e7f }, /* 0x8300 */ { 9152, 0x33ff }, { 9164, 0x5ac0 }, { 9170, 0xbff5 }, { 9183, 0x9ffe }, { 9196, 0xffbf }, { 9211, 0x005f }, { 9217, 0x0000 }, { 9217, 0xfdf8 }, { 9229, 0xffca }, { 9241, 0x6ffd }, { 9254, 0xcffd }, { 9267, 0xa001 }, { 9270, 0xdfff }, { 9285, 0xfbf2 }, { 9297, 0xdfbf }, { 9311, 0xff7f }, /* 0x8400 */ { 9326, 0xfeda }, { 9338, 0x080f }, { 9343, 0xba08 }, { 9349, 0xbfff }, { 9364, 0x7afd }, { 9376, 0xeed7 }, { 9388, 0xfbeb }, { 9401, 0x67f9 }, { 9412, 0xe044 }, { 9417, 0xff93 }, { 9429, 0xdf97 }, { 9441, 0x9f57 }, { 9452, 0xfef7 }, { 9466, 0x08df }, { 9474, 0xdf80 }, { 9482, 0xfedf }, /* 0x8500 */ { 9496, 0xffc5 }, { 9508, 0xf7fe }, { 9522, 0xfffb }, { 9537, 0x6803 }, { 9542, 0x67fb }, { 9554, 0x6bfa }, { 9565, 0x7fff }, { 9580, 0x5fe2 }, { 9590, 0xffff }, { 9606, 0xff73 }, { 9619, 0x87df }, { 9630, 0xe7fb }, { 9643, 0xebfd }, { 9656, 0xf7a7 }, { 9668, 0xbf7e }, { 9681, 0xefc7 }, /* 0x8600 */ { 9693, 0x1ef3 }, { 9703, 0xdf82 }, { 9712, 0x76ff }, { 9725, 0xdf7e }, { 9738, 0x79c9 }, { 9747, 0xda7d }, { 9758, 0xefbe }, { 9771, 0x1e9b }, { 9780, 0x7ce0 }, { 9788, 0x77fb }, { 9801, 0x87be }, { 9811, 0xfffb }, { 9826, 0x1bff }, { 9838, 0xffdb }, { 9852, 0x3f5c }, { 9862, 0x4fe0 }, /* 0x8700 */ { 9870, 0x7fff }, { 9885, 0x5f0e }, { 9894, 0x77ff }, { 9908, 0xddbf }, { 9921, 0xf04f }, { 9930, 0xffff }, { 9946, 0xffff }, { 9962, 0x0ff8 }, { 9971, 0xa3be }, { 9981, 0xfddf }, { 9995, 0xfc1c }, { 10004, 0xfffd }, { 10019, 0x1f7d }, { 10030, 0xfb9e }, { 10042, 0xbdff }, { 10056, 0xdedc }, /* 0x8800 */ { 10067, 0x3f6f }, { 10079, 0xbafb }, { 10091, 0xdf7f }, { 10105, 0xfbef }, { 10119, 0x7d1b }, { 10129, 0x2eec }, { 10138, 0xaf8e }, { 10148, 0xf2f7 }, { 10160, 0x7b0f }, { 10170, 0xcfee }, { 10182, 0x1d96 }, { 10190, 0x77c6 }, { 10200, 0x7e07 }, { 10209, 0xfff5 }, { 10223, 0xd982 }, { 10230, 0x7fdf }, /* 0x8900 */ { 10244, 0x5ee6 }, { 10254, 0xc7ff }, { 10267, 0xfeee }, { 10280, 0x79ef }, { 10292, 0x9a56 }, { 10300, 0xffcf }, { 10314, 0xfe5f }, { 10327, 0xde5e }, { 10338, 0x896e }, { 10346, 0xf9e8 }, { 10356, 0xf45e }, { 10366, 0xe6c4 }, { 10374, 0x0001 }, { 10375, 0xbe7c }, { 10386, 0x3b7f }, { 10398, 0xdddf }, /* 0x8a00 */ { 10411, 0xd59d }, { 10421, 0xe9ef }, { 10433, 0x34ac }, { 10440, 0xde53 }, { 10450, 0xf573 }, { 10461, 0x4bf7 }, { 10472, 0x7b4f }, { 10483, 0x9eff }, { 10496, 0xb8fe }, { 10507, 0x476e }, { 10516, 0x0dfb }, { 10526, 0xff45 }, { 10537, 0xabfd }, { 10549, 0xfbfe }, { 10563, 0xe9d7 }, { 10574, 0xddff }, /* 0x8b00 */ { 10588, 0xedf7 }, { 10601, 0x7fff }, { 10616, 0xddfd }, { 10629, 0x7eeb }, { 10641, 0xcfe7 }, { 10653, 0xb7ff }, { 10667, 0xbde9 }, { 10678, 0xef91 }, { 10688, 0x5d75 }, { 10698, 0xd77c }, { 10709, 0x0000 }, { 10709, 0x0000 }, { 10709, 0x0000 }, { 10709, 0x0000 }, { 10709, 0x0000 }, { 10709, 0x0000 }, /* 0x8c00 */ { 10709, 0x0000 }, { 10709, 0x0000 }, { 10709, 0x0000 }, { 10709, 0xfa80 }, { 10716, 0xffee }, { 10730, 0xb4f1 }, { 10739, 0xbf76 }, { 10751, 0x2fef }, { 10763, 0xb677 }, { 10774, 0x77bf }, { 10787, 0x9fbf }, { 10800, 0xfffd }, { 10815, 0x95bf }, { 10826, 0xf6ae }, { 10837, 0x75ff }, { 10850, 0x7f3b }, /* 0x8d00 */ { 10862, 0xa7f5 }, { 10873, 0x0af9 }, { 10881, 0x0000 }, { 10881, 0x0000 }, { 10881, 0x0000 }, { 10881, 0x0000 }, { 10881, 0xfbd0 }, { 10891, 0x2bdd }, { 10901, 0xf633 }, { 10911, 0x9a7f }, { 10922, 0xfdab }, { 10934, 0xd6fc }, { 10945, 0xf9e6 }, { 10956, 0xbfeb }, { 10969, 0xdfdf }, { 10983, 0xf41f }, /* 0x8e00 */ { 10993, 0xa6fd }, { 11004, 0xffff }, { 11020, 0x4aff }, { 11031, 0xf37b }, { 11043, 0x7fb7 }, { 11056, 0xfef9 }, { 11069, 0xb6ff }, { 11082, 0x1d5c }, { 11090, 0x7ff6 }, { 11103, 0xe5ff }, { 11116, 0x1f7b }, { 11127, 0x2404 }, { 11130, 0xbe05 }, { 11138, 0xf99e }, { 11149, 0xdbe3 }, { 11160, 0xdff2 }, /* 0x8f00 */ { 11172, 0x6fef }, { 11185, 0xfdff }, { 11200, 0xd679 }, { 11210, 0xcbfc }, { 11221, 0xebfd }, { 11234, 0xefff }, { 11249, 0x001f }, { 11254, 0x0000 }, { 11254, 0x0000 }, { 11254, 0x9800 }, { 11257, 0xe148 }, { 11263, 0x8017 }, { 11268, 0x6a74 }, { 11276, 0x00fe }, { 11283, 0x6d7f }, { 11295, 0xfdf1 }, /* 0x9000 */ { 11307, 0xb87f }, { 11318, 0xfef3 }, { 11331, 0xe01f }, { 11339, 0xf176 }, { 11349, 0xee96 }, { 11359, 0x7b3f }, { 11371, 0xeb8d }, { 11381, 0xfffd }, { 11396, 0xadff }, { 11409, 0xcbb3 }, { 11419, 0x84ef }, { 11428, 0xe17f }, { 11439, 0x4daa }, { 11447, 0xbff0 }, { 11458, 0xbf3f }, { 11471, 0xfe3f }, /* 0x9100 */ { 11484, 0xebff }, { 11498, 0xffd7 }, { 11512, 0xffdf }, { 11527, 0xcf7f }, { 11540, 0xfffb }, { 11555, 0x85ed }, { 11564, 0xd73f }, { 11576, 0x07bc }, { 11584, 0xaeff }, { 11597, 0xfe0f }, { 11608, 0xfdaf }, { 11621, 0x76bf }, { 11633, 0xfaef }, { 11646, 0x37bb }, { 11657, 0x7fdc }, { 11669, 0xa3ba }, /* 0x9200 */ { 11678, 0xb6ff }, { 11691, 0x56f7 }, { 11702, 0x60f8 }, { 11709, 0xe7df }, { 11722, 0xff61 }, { 11733, 0x4cdf }, { 11743, 0xb0fb }, { 11753, 0xff45 }, { 11764, 0x7ded }, { 11776, 0x3ffa }, { 11788, 0x1fff }, { 11801, 0x18fc }, { 11809, 0xffff }, { 11825, 0xe3af }, { 11836, 0xc7d3 }, { 11846, 0xdf83 }, /* 0x9300 */ { 11856, 0xfb57 }, { 11868, 0xef7d }, { 11881, 0xefff }, { 11896, 0x1378 }, { 11903, 0xfec0 }, { 11912, 0x5ff7 }, { 11925, 0x34bb }, { 11934, 0x5ee3 }, { 11944, 0xf70d }, { 11954, 0xeff6 }, { 11967, 0xd7fe }, { 11980, 0x00bf }, { 11987, 0xf59d }, { 11998, 0xf7f7 }, { 12012, 0x51de }, { 12021, 0xffe0 }, /* 0x9400 */ { 12032, 0xfec9 }, { 12043, 0x037f }, { 12052, 0x5f01 }, { 12059, 0xbfef }, { 12073, 0x9ff1 }, { 12084, 0x60a7 }, { 12091, 0xef1d }, { 12102, 0xf1ff }, { 12115, 0x000f }, { 12119, 0x0000 }, { 12119, 0x0000 }, { 12119, 0x0000 }, { 12119, 0x0000 }, { 12119, 0x0000 }, { 12119, 0x0000 }, { 12119, 0x0000 }, /* 0x9500 */ { 12119, 0x0000 }, { 12119, 0x0000 }, { 12119, 0x0000 }, { 12119, 0x0000 }, { 12119, 0x0000 }, { 12119, 0x0000 }, { 12119, 0x0000 }, { 12119, 0x3c80 }, { 12124, 0xfb4d }, { 12135, 0xd91f }, { 12145, 0x7b3a }, { 12155, 0xfee3 }, { 12167, 0x3fe9 }, { 12178, 0xdc7f }, { 12190, 0x003f }, { 12196, 0x0000 }, /* 0x9600 */ { 12196, 0x0000 }, { 12196, 0x5000 }, { 12198, 0xf51f }, { 12209, 0xbe07 }, { 12218, 0xfc1d }, { 12228, 0xf91b }, { 12238, 0xbc1e }, { 12247, 0x71ff }, { 12259, 0x6ff9 }, { 12271, 0x5bbe }, { 12282, 0x5796 }, { 12291, 0x9b1b }, { 12300, 0x7fff }, { 12315, 0xfffc }, { 12329, 0x872e }, { 12337, 0xafe7 }, /* 0x9700 */ { 12349, 0xebf5 }, { 12361, 0xf34f }, { 12372, 0xdffd }, { 12386, 0xe725 }, { 12395, 0x0bdc }, { 12403, 0x5d44 }, { 12410, 0x5747 }, { 12419, 0xfddd }, { 12432, 0xed3f }, { 12444, 0x7790 }, { 12452, 0x7d7f }, { 12465, 0x8ac8 }, { 12471, 0xfafa }, { 12483, 0xf3f9 }, { 12495, 0x202a }, { 12499, 0xef4b }, /* 0x9800 */ { 12510, 0xf5ff }, { 12524, 0x79cf }, { 12535, 0xabd3 }, { 12545, 0x0ba5 }, { 12552, 0xf77a }, { 12564, 0xfb8f }, { 12576, 0x8ebd }, { 12586, 0x001f }, { 12591, 0x0000 }, { 12591, 0x0000 }, { 12591, 0xf300 }, { 12597, 0xfd4e }, { 12608, 0x1a57 }, { 12616, 0x8800 }, { 12618, 0xaeac }, { 12627, 0x7654 }, /* 0x9900 */ { 12635, 0x17ad }, { 12644, 0xcdff }, { 12657, 0xffb2 }, { 12669, 0xf42f }, { 12679, 0x5baa }, { 12688, 0xdbff }, { 12702, 0x0002 }, { 12703, 0x0000 }, { 12703, 0x0000 }, { 12703, 0x73c0 }, { 12710, 0xf9ea }, { 12721, 0x2e3f }, { 12731, 0xfa8e }, { 12741, 0xbbff }, { 12755, 0x76bc }, { 12765, 0xffd3 }, /* 0x9a00 */ { 12778, 0xeefe }, { 12791, 0x7e72 }, { 12801, 0x7ebd }, { 12813, 0xe7f7 }, { 12826, 0xf77f }, { 12840, 0xcefd }, { 12852, 0x0ff5 }, { 12862, 0x0000 }, { 12862, 0x0000 }, { 12862, 0x0000 }, { 12862, 0xa900 }, { 12866, 0xdb9b }, { 12877, 0xa4c7 }, { 12885, 0x917f }, { 12895, 0xf8ca }, { 12904, 0x7ece }, /* 0x9b00 */ { 12915, 0x7d7a }, { 12926, 0xc7e7 }, { 12937, 0xcbbd }, { 12948, 0xdcae }, { 12958, 0xfd7e }, { 12971, 0x8f76 }, { 12981, 0x91d3 }, { 12989, 0x7cf3 }, { 13000, 0x01e5 }, { 13006, 0x4c2f }, { 13014, 0xed77 }, { 13026, 0xa360 }, { 13032, 0x07db }, { 13041, 0x5ef8 }, { 13051, 0x1df7 }, { 13062, 0x2181 }, /* 0x9c00 */ { 13066, 0x6be0 }, { 13074, 0x309c }, { 13080, 0x3b3a }, { 13089, 0xfade }, { 13101, 0x7f53 }, { 13112, 0xc3f5 }, { 13122, 0x61cd }, { 13130, 0x07ba }, { 13138, 0x0000 }, { 13138, 0x0000 }, { 13138, 0x0000 }, { 13138, 0x0000 }, { 13138, 0x0000 }, { 13138, 0x0000 }, { 13138, 0x26e0 }, { 13144, 0xbefe }, /* 0x9d00 */ { 13157, 0x03f9 }, { 13165, 0xebb5 }, { 13176, 0xe36d }, { 13186, 0xe9cb }, { 13196, 0x9c2f }, { 13205, 0xbfde }, { 13218, 0x9f83 }, { 13227, 0xabbf }, { 13239, 0x1ff7 }, { 13251, 0xffd5 }, { 13264, 0xb7df }, { 13277, 0xdffe }, { 13291, 0xfdae }, { 13303, 0xffef }, { 13318, 0xfb7e }, { 13331, 0xeffd }, /* 0x9e00 */ { 13345, 0xaaff }, { 13357, 0x6ebf }, { 13369, 0x0000 }, { 13369, 0x0000 }, { 13369, 0x0000 }, { 13369, 0x0000 }, { 13369, 0x0000 }, { 13369, 0xb620 }, { 13375, 0x7fcd }, { 13387, 0xbe9e }, { 13398, 0x62b3 }, { 13406, 0x58f1 }, { 13414, 0xf10d }, { 13422, 0xfd7b }, { 13435, 0xe9f1 }, { 13445, 0xbefd }, /* 0x9f00 */ { 13458, 0xc6c3 }, { 13466, 0x5f6d }, { 13477, 0xff3d }, { 13490, 0x69ff }, { 13502, 0xffcf }, { 13516, 0xfbf4 }, { 13528, 0xdcfb }, { 13540, 0x4ff7 }, { 13552, 0x2000 }, { 13553, 0x1137 }, { 13560, 0x0015 }, }; static const Summary16 big5_uni2indx_pagefa[1] = { /* 0xfa00 */ { 13563, 0x3000 }, }; static const Summary16 big5_uni2indx_pagefe[23] = { /* 0xfe00 */ { 13565, 0x0000 }, { 13565, 0x0000 }, { 13565, 0x0000 }, { 13565, 0xfffb }, { 13580, 0xfe1f }, { 13592, 0xfef5 }, { 13605, 0x0e7f }, { 13615, 0x0000 }, { 13615, 0x0000 }, { 13615, 0x0000 }, { 13615, 0x0000 }, { 13615, 0x0000 }, { 13615, 0x0000 }, { 13615, 0x0000 }, { 13615, 0x0000 }, { 13615, 0x0000 }, /* 0xff00 */ { 13615, 0xff7a }, { 13628, 0xffff }, { 13644, 0xffff }, { 13660, 0x97ff }, { 13673, 0xfffe }, { 13688, 0x3fff }, { 13702, 0x0010 }, }; static int big5_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { if (n >= 2) { const Summary16 *summary = NULL; if (wc < 0x0100) summary = &big5_uni2indx_page00[(wc>>4)]; else if (wc >= 0x0200 && wc < 0x0460) summary = &big5_uni2indx_page02[(wc>>4)-0x020]; else if (wc >= 0x2000 && wc < 0x22c0) summary = &big5_uni2indx_page20[(wc>>4)-0x200]; else if (wc >= 0x2400 && wc < 0x2650) summary = &big5_uni2indx_page24[(wc>>4)-0x240]; else if (wc >= 0x3000 && wc < 0x33e0) summary = &big5_uni2indx_page30[(wc>>4)-0x300]; else if (wc >= 0x4e00 && wc < 0x9fb0) summary = &big5_uni2indx_page4e[(wc>>4)-0x4e0]; else if (wc >= 0xfa00 && wc < 0xfa10) summary = &big5_uni2indx_pagefa[(wc>>4)-0xfa0]; else if (wc >= 0xfe00 && wc < 0xff70) summary = &big5_uni2indx_pagefe[(wc>>4)-0xfe0]; if (summary) { unsigned short used = summary->used; unsigned int i = wc & 0x0f; if (used & ((unsigned short) 1 << i)) { unsigned short c; /* Keep in `used' only the bits 0..i-1. */ used &= ((unsigned short) 1 << i) - 1; /* Add `summary->indx' and the number of bits set in `used'. */ used = (used & 0x5555) + ((used & 0xaaaa) >> 1); used = (used & 0x3333) + ((used & 0xcccc) >> 2); used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4); used = (used & 0x00ff) + (used >> 8); c = big5_2charset[summary->indx + used]; r[0] = (c >> 8); r[1] = (c & 0xff); return 2; } } return RET_ILSEQ; } return RET_TOOSMALL; } 9894, 0x77ff }, { 9908, 0xddbf }, { 9921, 0xf04f }, { 9930, 0libX11-1.6.3/src/xlibi18n/lcUniConv/big5_emacs.h000064401431060000012000000110721247741723500213530ustar00alancstaff00002660200006 /* * BIG5-0 and BIG5-1 */ /* BIG5 with its 13494 characters doesn't fit in a single 94x94 or 96x96 block. Therefore Emacs/Mule developers, in a typically Japanese way of thinking, have developed an alternative encoding of BIG5 in two 94x94 planes, very similar to the SHIFT_JIS encoding for JISX0208. Conversion between BIG5 codes (s1,s2) and BIG5-0 codes (c1,c2): Example. (s1,s2) = 0xA140, (c1,c2) = 0x2121. 0xA1 <= s1 <= 0xC7, 0x40 <= s2 <= 0x7E || 0xA1 <= s2 <= 0xFE, 0x21 <= c1 <= 0x62, 0x21 <= c2 <= 0x7E. Invariant: 157*(s1-0xA1) + (s2 < 0x80 ? s2-0x40 : s2-0x62) = 94*(c1-0x21)+(c2-0x21) Conversion (s1,s2) -> (c1,c2): t := 157*(s1-0xA1) + (s2 < 0x80 ? s2-0x40 : s2-0x62) c1 := (t div 94) + 0x21 c2 := (t mod 94) + 0x21 Conversion (c1,c2) -> (s1,s2): t := 94*(c1-0x21)+(c2-0x21) t2 := t mod 157 s1 := (t div 157) + 0xA1 s2 := (t2 < 0x3F ? t2+0x40 : t2+0x62) Conversion between BIG5 codes (s1,s2) and BIG5-1 codes (c1,c2): Example. (s1,s2) = 0xC940, (c1,c2) = 0x2121. 0xC9 <= s1 <= 0xF9, 0x40 <= s2 <= 0x7E || 0xA1 <= s2 <= 0xFE, 0x21 <= c1 <= 0x72, 0x21 <= c2 <= 0x7E. Invariant: 157*(s1-0xC9) + (s2 < 0x80 ? s2-0x40 : s2-0x62) = 94*(c1-0x21)+(c2-0x21) Conversion (s1,s2) -> (c1,c2): t := 157*(s1-0xC9) + (s2 < 0x80 ? s2-0x40 : s2-0x62) c1 := (t div 94) + 0x21 c2 := (t mod 94) + 0x21 Conversion (c1,c2) -> (s1,s2): t := 94*(c1-0x21)+(c2-0x21) t2 := t mod 157 s1 := (t div 157) + 0xC9 s2 := (t2 < 0x3F ? t2+0x40 : t2+0x62) */ static int big5_0_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c1 = s[0]; if (c1 >= 0x21 && c1 <= 0x62) { if (n >= 2) { unsigned char c2 = s[1]; if (c2 >= 0x21 && c2 <= 0x7e) { unsigned int i = 94 * (c1 - 0x21) + (c2 - 0x21); if (0) { /* Unoptimized. */ unsigned char buf[2]; buf[0] = (i / 157) + 0xa1; i = i % 157; buf[1] = i + (i < 0x3f ? 0x40 : 0x62); return big5_mbtowc(conv,pwc,buf,2); } else { /* Inline the implementation of big5_mbtowc. */ if (i < 6121) { unsigned short wc = big5_2uni_pagea1[i]; if (wc != 0xfffd) { *pwc = (ucs4_t) wc; return 2; } } } } return RET_ILSEQ; } return RET_TOOFEW(0); } return RET_ILSEQ; } static int big5_1_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c1 = s[0]; if (c1 >= 0x21 && c1 <= 0x72) { if (n >= 2) { unsigned char c2 = s[1]; if (c2 >= 0x21 && c2 <= 0x7e) { unsigned int i = 94 * (c1 - 0x21) + (c2 - 0x21); if (0) { /* Unoptimized. */ unsigned char buf[2]; buf[0] = (i / 157) + 0xc9; i = i % 157; buf[1] = i + (i < 0x3f ? 0x40 : 0x62); return big5_mbtowc(conv,pwc,buf,2); } else { /* Inline the implementation of big5_mbtowc. */ if (i < 7652) { unsigned short wc = big5_2uni_pagec9[i]; if (wc != 0xfffd) { *pwc = (ucs4_t) wc; return 2; } } } } return RET_ILSEQ; } return RET_TOOFEW(0); } return RET_ILSEQ; } static int big5_0_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { if (n >= 2) { unsigned char buf[2]; int ret = big5_wctomb(conv,buf,wc,2); if (ret != RET_ILSEQ) { unsigned char s1, s2; if (ret != 2) abort(); s1 = buf[0]; s2 = buf[1]; if (!(s1 >= 0xa1)) abort(); if (!((s2 >= 0x40 && s2 <= 0x7e) || (s2 >= 0xa1 && s2 <= 0xfe))) abort(); if (s1 < 0xc9) { unsigned int t = 157 * (s1 - 0xa1) + s2 - (s2 < 0x80 ? 0x40 : 0x62); r[0] = (t / 94) + 0x21; r[1] = (t % 94) + 0x21; return 2; } } return RET_ILSEQ; } return RET_TOOSMALL; } static int big5_1_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { if (n >= 2) { unsigned char buf[2]; int ret = big5_wctomb(conv,buf,wc,2); if (ret != RET_ILSEQ) { unsigned char s1, s2; if (ret != 2) abort(); s1 = buf[0]; s2 = buf[1]; if (!(s1 <= 0xf9)) abort(); if (!((s2 >= 0x40 && s2 <= 0x7e) || (s2 >= 0xa1 && s2 <= 0xfe))) abort(); if (s1 >= 0xc9) { unsigned int t = 157 * (s1 - 0xc9) + s2 - (s2 < 0x80 ? 0x40 : 0x62); r[0] = (t / 94) + 0x21; r[1] = (t % 94) + 0x21; return 2; } } return RET_ILSEQ; } return RET_TOOSMALL; } libX11-1.6.3/src/xlibi18n/lcUniConv/georgian_academy.h000064401431060000012000000062111247741723500226320ustar00alancstaff00002660200006 /* * GEORGIAN-ACADEMY */ static const unsigned short georgian_academy_2uni[32] = { /* 0x80 */ 0x0080, 0x0081, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, 0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, 0x008d, 0x008e, 0x008f, /* 0x90 */ 0x0090, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, 0x02dc, 0x2122, 0x0161, 0x203a, 0x0153, 0x009d, 0x009e, 0x0178, }; static int georgian_academy_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c = *s; if (c >= 0x80 && c < 0xa0) *pwc = (ucs4_t) georgian_academy_2uni[c-0x80]; else if (c >= 0xc0 && c < 0xe7) *pwc = (ucs4_t) c + 0x1010; else *pwc = (ucs4_t) c; return 1; } static const unsigned char georgian_academy_page00[32] = { 0x80, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x9d, 0x9e, 0x00, /* 0x98-0x9f */ }; static const unsigned char georgian_academy_page01[72] = { 0x00, 0x00, 0x8c, 0x9c, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ 0x8a, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ 0x9f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ }; static const unsigned char georgian_academy_page02[32] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, /* 0xc0-0xc7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ }; static const unsigned char georgian_academy_page20[48] = { 0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */ 0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x18-0x1f */ 0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ 0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ }; static int georgian_academy_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { unsigned char c = 0; if (wc < 0x0080) { *r = wc; return 1; } else if (wc >= 0x0080 && wc < 0x00a0) c = georgian_academy_page00[wc-0x0080]; else if ((wc >= 0x00a0 && wc < 0x00c0) || (wc >= 0x00e7 && wc < 0x0100)) c = wc; else if (wc >= 0x0150 && wc < 0x0198) c = georgian_academy_page01[wc-0x0150]; else if (wc >= 0x02c0 && wc < 0x02e0) c = georgian_academy_page02[wc-0x02c0]; else if (wc >= 0x10d0 && wc < 0x10f7) c = wc-0x1010; else if (wc >= 0x2010 && wc < 0x2040) c = georgian_academy_page20[wc-0x2010]; else if (wc == 0x2122) c = 0x99; if (c != 0) { *r = c; return 1; } return RET_ILSEQ; } libX11-1.6.3/src/xlibi18n/lcUniConv/ucs2be.h000064401431060000012000000011351247741723500205370ustar00alancstaff00002660200006/* * UCS-2BE = UCS-2 big endian */ static int ucs2be_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { if (n >= 2) { if (s[0] >= 0xd8 && s[0] < 0xe0) { return RET_ILSEQ; } else { *pwc = (s[0] << 8) + s[1]; return 2; } } return RET_TOOFEW(0); } static int ucs2be_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { if (wc < 0x10000 && !(wc >= 0xd800 && wc < 0xe000)) { if (n >= 2) { r[0] = (unsigned char) (wc >> 8); r[1] = (unsigned char) wc; return 2; } else return RET_TOOSMALL; } return RET_ILSEQ; } libX11-1.6.3/src/xlibi18n/lcUniConv/utf8.h000064401431060000012000000060371247741723500202500ustar00alancstaff00002660200006 /* * UTF-8 */ /* Specification: RFC 2279 */ static int utf8_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c = s[0]; if (c < 0x80) { *pwc = c; return 1; } else if (c < 0xc2) { return RET_ILSEQ; } else if (c < 0xe0) { if (n < 2) return RET_TOOFEW(0); if (!((s[1] ^ 0x80) < 0x40)) return RET_ILSEQ; *pwc = ((ucs4_t) (c & 0x1f) << 6) | (ucs4_t) (s[1] ^ 0x80); return 2; } else if (c < 0xf0) { if (n < 3) return RET_TOOFEW(0); if (!((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 && (c >= 0xe1 || s[1] >= 0xa0))) return RET_ILSEQ; *pwc = ((ucs4_t) (c & 0x0f) << 12) | ((ucs4_t) (s[1] ^ 0x80) << 6) | (ucs4_t) (s[2] ^ 0x80); return 3; } else if (c < 0xf8) { if (n < 4) return RET_TOOFEW(0); if (!((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 && (s[3] ^ 0x80) < 0x40 && (c >= 0xf1 || s[1] >= 0x90))) return RET_ILSEQ; *pwc = ((ucs4_t) (c & 0x07) << 18) | ((ucs4_t) (s[1] ^ 0x80) << 12) | ((ucs4_t) (s[2] ^ 0x80) << 6) | (ucs4_t) (s[3] ^ 0x80); return 4; } else if (c < 0xfc) { if (n < 5) return RET_TOOFEW(0); if (!((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40 && (c >= 0xf9 || s[1] >= 0x88))) return RET_ILSEQ; *pwc = ((ucs4_t) (c & 0x03) << 24) | ((ucs4_t) (s[1] ^ 0x80) << 18) | ((ucs4_t) (s[2] ^ 0x80) << 12) | ((ucs4_t) (s[3] ^ 0x80) << 6) | (ucs4_t) (s[4] ^ 0x80); return 5; } else if (c < 0xfe) { if (n < 6) return RET_TOOFEW(0); if (!((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40 && (s[5] ^ 0x80) < 0x40 && (c >= 0xfd || s[1] >= 0x84))) return RET_ILSEQ; *pwc = ((ucs4_t) (c & 0x01) << 30) | ((ucs4_t) (s[1] ^ 0x80) << 24) | ((ucs4_t) (s[2] ^ 0x80) << 18) | ((ucs4_t) (s[3] ^ 0x80) << 12) | ((ucs4_t) (s[4] ^ 0x80) << 6) | (ucs4_t) (s[5] ^ 0x80); return 6; } else return RET_ILSEQ; } static int utf8_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) /* n == 0 is acceptable */ { int count; if (wc < 0x80) count = 1; else if (wc < 0x800) count = 2; else if (wc < 0x10000) count = 3; else if (wc < 0x200000) count = 4; else if (wc < 0x4000000) count = 5; else if (wc <= 0x7fffffff) count = 6; else return RET_ILSEQ; if (n < count) return RET_TOOSMALL; switch (count) { /* note: code falls through cases! */ case 6: r[5] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0x4000000; case 5: r[4] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0x200000; case 4: r[3] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0x10000; case 3: r[2] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0x800; case 2: r[1] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0xc0; case 1: r[0] = wc; } return count; } libX11-1.6.3/src/xlibi18n/lcUniConv/georgian_ps.h000064401431060000012000000076161247741723500216630ustar00alancstaff00002660200006 /* * GEORGIAN-PS */ static const unsigned short georgian_ps_2uni_1[32] = { /* 0x80 */ 0x0080, 0x0081, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, 0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, 0x008d, 0x008e, 0x008f, /* 0x90 */ 0x0090, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, 0x02dc, 0x2122, 0x0161, 0x203a, 0x0153, 0x009d, 0x009e, 0x0178, }; static const unsigned short georgian_ps_2uni_2[39] = { /* 0xc0 */ 0x10d0, 0x10d1, 0x10d2, 0x10d3, 0x10d4, 0x10d5, 0x10d6, 0x10f1, 0x10d7, 0x10d8, 0x10d9, 0x10da, 0x10db, 0x10dc, 0x10f2, 0x10dd, /* 0xd0 */ 0x10de, 0x10df, 0x10e0, 0x10e1, 0x10e2, 0x10f3, 0x10e3, 0x10e4, 0x10e5, 0x10e6, 0x10e7, 0x10e8, 0x10e9, 0x10ea, 0x10eb, 0x10ec, /* 0xe0 */ 0x10ed, 0x10ee, 0x10f4, 0x10ef, 0x10f0, 0x10f5, }; static int georgian_ps_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c = *s; if (c >= 0x80 && c < 0xa0) *pwc = (ucs4_t) georgian_ps_2uni_1[c-0x80]; else if (c >= 0xc0 && c < 0xe6) *pwc = (ucs4_t) georgian_ps_2uni_2[c-0xc0]; else *pwc = (ucs4_t) c; return 1; } static const unsigned char georgian_ps_page00[32] = { 0x80, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x9d, 0x9e, 0x00, /* 0x98-0x9f */ }; static const unsigned char georgian_ps_page01[72] = { 0x00, 0x00, 0x8c, 0x9c, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ 0x8a, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ 0x9f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ }; static const unsigned char georgian_ps_page02[32] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, /* 0xc0-0xc7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ }; static const unsigned char georgian_ps_page10[40] = { 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc8, /* 0xd0-0xd7 */ 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xcf, 0xd0, 0xd1, /* 0xd8-0xdf */ 0xd2, 0xd3, 0xd4, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, /* 0xe0-0xe7 */ 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe3, /* 0xe8-0xef */ 0xe4, 0xc7, 0xce, 0xd5, 0xe2, 0xe5, 0x00, 0x00, /* 0xf0-0xf7 */ }; static const unsigned char georgian_ps_page20[48] = { 0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */ 0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x18-0x1f */ 0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ 0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ }; static int georgian_ps_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { unsigned char c = 0; if (wc < 0x0080) { *r = wc; return 1; } else if (wc >= 0x0080 && wc < 0x00a0) c = georgian_ps_page00[wc-0x0080]; else if ((wc >= 0x00a0 && wc < 0x00c0) || (wc >= 0x00e6 && wc < 0x0100)) c = wc; else if (wc >= 0x0150 && wc < 0x0198) c = georgian_ps_page01[wc-0x0150]; else if (wc >= 0x02c0 && wc < 0x02e0) c = georgian_ps_page02[wc-0x02c0]; else if (wc >= 0x10d0 && wc < 0x10f8) c = georgian_ps_page10[wc-0x10d0]; else if (wc >= 0x2010 && wc < 0x2040) c = georgian_ps_page20[wc-0x2010]; else if (wc == 0x2122) c = 0x99; if (c != 0) { *r = c; return 1; } return RET_ILSEQ; } libX11-1.6.3/src/xlibi18n/lcUniConv/iso8859_4.h000064401431060000012000000073051247741723500207340ustar00alancstaff00002660200006 /* * ISO-8859-4 */ static const unsigned short iso8859_4_2uni[96] = { /* 0xa0 */ 0x00a0, 0x0104, 0x0138, 0x0156, 0x00a4, 0x0128, 0x013b, 0x00a7, 0x00a8, 0x0160, 0x0112, 0x0122, 0x0166, 0x00ad, 0x017d, 0x00af, /* 0xb0 */ 0x00b0, 0x0105, 0x02db, 0x0157, 0x00b4, 0x0129, 0x013c, 0x02c7, 0x00b8, 0x0161, 0x0113, 0x0123, 0x0167, 0x014a, 0x017e, 0x014b, /* 0xc0 */ 0x0100, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x012e, 0x010c, 0x00c9, 0x0118, 0x00cb, 0x0116, 0x00cd, 0x00ce, 0x012a, /* 0xd0 */ 0x0110, 0x0145, 0x014c, 0x0136, 0x00d4, 0x00d5, 0x00d6, 0x00d7, 0x00d8, 0x0172, 0x00da, 0x00db, 0x00dc, 0x0168, 0x016a, 0x00df, /* 0xe0 */ 0x0101, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x012f, 0x010d, 0x00e9, 0x0119, 0x00eb, 0x0117, 0x00ed, 0x00ee, 0x012b, /* 0xf0 */ 0x0111, 0x0146, 0x014d, 0x0137, 0x00f4, 0x00f5, 0x00f6, 0x00f7, 0x00f8, 0x0173, 0x00fa, 0x00fb, 0x00fc, 0x0169, 0x016b, 0x02d9, }; static int iso8859_4_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c = *s; if (c < 0xa0) *pwc = (ucs4_t) c; else *pwc = (ucs4_t) iso8859_4_2uni[c-0xa0]; return 1; } static const unsigned char iso8859_4_page00[224] = { 0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0xa7, /* 0xa0-0xa7 */ 0xa8, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0xaf, /* 0xa8-0xaf */ 0xb0, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ 0x00, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0x00, /* 0xc0-0xc7 */ 0x00, 0xc9, 0x00, 0xcb, 0x00, 0xcd, 0xce, 0x00, /* 0xc8-0xcf */ 0x00, 0x00, 0x00, 0x00, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ 0xd8, 0x00, 0xda, 0xdb, 0xdc, 0x00, 0x00, 0xdf, /* 0xd8-0xdf */ 0x00, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0x00, /* 0xe0-0xe7 */ 0x00, 0xe9, 0x00, 0xeb, 0x00, 0xed, 0xee, 0x00, /* 0xe8-0xef */ 0x00, 0x00, 0x00, 0x00, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ 0xf8, 0x00, 0xfa, 0xfb, 0xfc, 0x00, 0x00, 0x00, /* 0xf8-0xff */ /* 0x0100 */ 0xc0, 0xe0, 0x00, 0x00, 0xa1, 0xb1, 0x00, 0x00, /* 0x00-0x07 */ 0x00, 0x00, 0x00, 0x00, 0xc8, 0xe8, 0x00, 0x00, /* 0x08-0x0f */ 0xd0, 0xf0, 0xaa, 0xba, 0x00, 0x00, 0xcc, 0xec, /* 0x10-0x17 */ 0xca, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ 0x00, 0x00, 0xab, 0xbb, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ 0xa5, 0xb5, 0xcf, 0xef, 0x00, 0x00, 0xc7, 0xe7, /* 0x28-0x2f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd3, 0xf3, /* 0x30-0x37 */ 0xa2, 0x00, 0x00, 0xa6, 0xb6, 0x00, 0x00, 0x00, /* 0x38-0x3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0xd1, 0xf1, 0x00, /* 0x40-0x47 */ 0x00, 0x00, 0xbd, 0xbf, 0xd2, 0xf2, 0x00, 0x00, /* 0x48-0x4f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa3, 0xb3, /* 0x50-0x57 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ 0xa9, 0xb9, 0x00, 0x00, 0x00, 0x00, 0xac, 0xbc, /* 0x60-0x67 */ 0xdd, 0xfd, 0xde, 0xfe, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ 0x00, 0x00, 0xd9, 0xf9, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0xbe, 0x00, /* 0x78-0x7f */ }; static const unsigned char iso8859_4_page02[32] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, /* 0xc0-0xc7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ 0x00, 0xff, 0x00, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ }; static int iso8859_4_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { unsigned char c = 0; if (wc < 0x00a0) { *r = wc; return 1; } else if (wc >= 0x00a0 && wc < 0x0180) c = iso8859_4_page00[wc-0x00a0]; else if (wc >= 0x02c0 && wc < 0x02e0) c = iso8859_4_page02[wc-0x02c0]; if (c != 0) { *r = c; return 1; } return RET_ILSEQ; } libX11-1.6.3/src/xlibi18n/lcUniConv/iso8859_13.h000064401431060000012000000070071247741723500210130ustar00alancstaff00002660200006 /* * ISO-8859-13 */ static const unsigned short iso8859_13_2uni[96] = { /* 0xa0 */ 0x00a0, 0x201d, 0x00a2, 0x00a3, 0x00a4, 0x201e, 0x00a6, 0x00a7, 0x00d8, 0x00a9, 0x0156, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00c6, /* 0xb0 */ 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x201c, 0x00b5, 0x00b6, 0x00b7, 0x00f8, 0x00b9, 0x0157, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00e6, /* 0xc0 */ 0x0104, 0x012e, 0x0100, 0x0106, 0x00c4, 0x00c5, 0x0118, 0x0112, 0x010c, 0x00c9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012a, 0x013b, /* 0xd0 */ 0x0160, 0x0143, 0x0145, 0x00d3, 0x014c, 0x00d5, 0x00d6, 0x00d7, 0x0172, 0x0141, 0x015a, 0x016a, 0x00dc, 0x017b, 0x017d, 0x00df, /* 0xe0 */ 0x0105, 0x012f, 0x0101, 0x0107, 0x00e4, 0x00e5, 0x0119, 0x0113, 0x010d, 0x00e9, 0x017a, 0x0117, 0x0123, 0x0137, 0x012b, 0x013c, /* 0xf0 */ 0x0161, 0x0144, 0x0146, 0x00f3, 0x014d, 0x00f5, 0x00f6, 0x00f7, 0x0173, 0x0142, 0x015b, 0x016b, 0x00fc, 0x017c, 0x017e, 0x2019, }; static int iso8859_13_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c = *s; if (c < 0xa0) *pwc = (ucs4_t) c; else *pwc = (ucs4_t) iso8859_13_2uni[c-0xa0]; return 1; } static const unsigned char iso8859_13_page00[224] = { 0xa0, 0x00, 0xa2, 0xa3, 0xa4, 0x00, 0xa6, 0xa7, /* 0xa0-0xa7 */ 0x00, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0x00, /* 0xa8-0xaf */ 0xb0, 0xb1, 0xb2, 0xb3, 0x00, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ 0x00, 0xb9, 0x00, 0xbb, 0xbc, 0xbd, 0xbe, 0x00, /* 0xb8-0xbf */ 0x00, 0x00, 0x00, 0x00, 0xc4, 0xc5, 0xaf, 0x00, /* 0xc0-0xc7 */ 0x00, 0xc9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ 0x00, 0x00, 0x00, 0xd3, 0x00, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ 0xa8, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0xdf, /* 0xd8-0xdf */ 0x00, 0x00, 0x00, 0x00, 0xe4, 0xe5, 0xbf, 0x00, /* 0xe0-0xe7 */ 0x00, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ 0x00, 0x00, 0x00, 0xf3, 0x00, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ 0xb8, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, /* 0xf8-0xff */ /* 0x0100 */ 0xc2, 0xe2, 0x00, 0x00, 0xc0, 0xe0, 0xc3, 0xe3, /* 0x00-0x07 */ 0x00, 0x00, 0x00, 0x00, 0xc8, 0xe8, 0x00, 0x00, /* 0x08-0x0f */ 0x00, 0x00, 0xc7, 0xe7, 0x00, 0x00, 0xcb, 0xeb, /* 0x10-0x17 */ 0xc6, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ 0x00, 0x00, 0xcc, 0xec, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ 0x00, 0x00, 0xce, 0xee, 0x00, 0x00, 0xc1, 0xe1, /* 0x28-0x2f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcd, 0xed, /* 0x30-0x37 */ 0x00, 0x00, 0x00, 0xcf, 0xef, 0x00, 0x00, 0x00, /* 0x38-0x3f */ 0x00, 0xd9, 0xf9, 0xd1, 0xf1, 0xd2, 0xf2, 0x00, /* 0x40-0x47 */ 0x00, 0x00, 0x00, 0x00, 0xd4, 0xf4, 0x00, 0x00, /* 0x48-0x4f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xba, /* 0x50-0x57 */ 0x00, 0x00, 0xda, 0xfa, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ 0xd0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ 0x00, 0x00, 0xdb, 0xfb, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ 0x00, 0x00, 0xd8, 0xf8, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ 0x00, 0xca, 0xea, 0xdd, 0xfd, 0xde, 0xfe, 0x00, /* 0x78-0x7f */ }; static const unsigned char iso8859_13_page20[8] = { 0x00, 0xff, 0x00, 0x00, 0xb4, 0xa1, 0xa5, 0x00, /* 0x18-0x1f */ }; static int iso8859_13_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { unsigned char c = 0; if (wc < 0x00a0) { *r = wc; return 1; } else if (wc >= 0x00a0 && wc < 0x0180) c = iso8859_13_page00[wc-0x00a0]; else if (wc >= 0x2018 && wc < 0x2020) c = iso8859_13_page20[wc-0x2018]; if (c != 0) { *r = c; return 1; } return RET_ILSEQ; } libX11-1.6.3/src/xlibi18n/lcUniConv/jisx0201.h000064401431060000012000000014521247741723500206360ustar00alancstaff00002660200006 /* * JISX0201.1976-0 */ static int jisx0201_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c = *s; if (c < 0x80) { if (c == 0x5c) *pwc = (ucs4_t) 0x00a5; else if (c == 0x7e) *pwc = (ucs4_t) 0x203e; else *pwc = (ucs4_t) c; return 1; } else { if (c >= 0xa1 && c < 0xe0) { *pwc = (ucs4_t) c + 0xfec0; return 1; } } return RET_ILSEQ; } static int jisx0201_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { if (wc < 0x0080 && !(wc == 0x005c || wc == 0x007e)) { *r = wc; return 1; } if (wc == 0x00a5) { *r = 0x5c; return 1; } if (wc == 0x203e) { *r = 0x7e; return 1; } if (wc >= 0xff61 && wc < 0xffa0) { *r = wc - 0xfec0; return 1; } return RET_ILSEQ; } libX11-1.6.3/src/xlibi18n/lcUniConv/koi8_c.h000064401431060000012000000100711247741723500205270ustar00alancstaff00002660200006 /* * KOI8-C */ static const unsigned short koi8_c_2uni[128] = { /* 0x80 */ 0x0493, 0x0497, 0x049b, 0x049d, 0x04a3, 0x04af, 0x04b1, 0x04b3, 0x04b7, 0x04b9, 0x04bb, 0x2580, 0x04d9, 0x04e3, 0x04e9, 0x04ef, /* 0x90 */ 0x0492, 0x0496, 0x049a, 0x049c, 0x04a2, 0x04ae, 0x04b0, 0x04b2, 0x04b6, 0x04b8, 0x04ba, 0x2321, 0x04d8, 0x04e2, 0x04e8, 0x04ee, /* 0xa0 */ 0x00a0, 0x0452, 0x0453, 0x0451, 0x0454, 0x0455, 0x0456, 0x0457, 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x0491, 0x045e, 0x045f, /* 0xb0 */ 0x2116, 0x0402, 0x0403, 0x0401, 0x0404, 0x0405, 0x0406, 0x0407, 0x0486, 0x0409, 0x040a, 0x040b, 0x040c, 0x0490, 0x040e, 0x040f, /* 0xc0 */ 0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, 0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, /* 0xd0 */ 0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a, /* 0xe0 */ 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, /* 0xf0 */ 0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, 0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a, }; static int koi8_c_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c = *s; if (c < 0x80) *pwc = (ucs4_t) c; else *pwc = (ucs4_t) koi8_c_2uni[c-0x80]; return 1; } static const unsigned char koi8_c_page00[1] = { 0xa0, /* 0xa0-0xa7 */ }; static const unsigned char koi8_c_page04[240] = { 0x00, 0xb3, 0xb1, 0xb2, 0xb4, 0xb5, 0xb6, 0xb7, /* 0x00-0x07 */ 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0x00, 0xbe, 0xbf, /* 0x08-0x0f */ 0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa, /* 0x10-0x17 */ 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, /* 0x18-0x1f */ 0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe, /* 0x20-0x27 */ 0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1, /* 0x28-0x2f */ 0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda, /* 0x30-0x37 */ 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, /* 0x38-0x3f */ 0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde, /* 0x40-0x47 */ 0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1, /* 0x48-0x4f */ 0x00, 0xa3, 0xa1, 0xa2, 0xa4, 0xa5, 0xa6, 0xa7, /* 0x50-0x57 */ 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0x00, 0xae, 0xaf, /* 0x58-0x5f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ 0xbd, 0xad, 0x90, 0x80, 0x00, 0x00, 0x91, 0x81, /* 0x90-0x97 */ 0x00, 0x00, 0x92, 0x82, 0x93, 0x83, 0x00, 0x00, /* 0x98-0x9f */ 0x00, 0x00, 0x94, 0x84, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0x85, /* 0xa8-0xaf */ 0x96, 0x86, 0x97, 0x87, 0x00, 0x00, 0x98, 0x88, /* 0xb0-0xb7 */ 0x99, 0x89, 0x9a, 0x8a, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ 0x9c, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ 0x00, 0x00, 0x9d, 0x8d, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ 0x9e, 0x8e, 0x00, 0x00, 0x00, 0x00, 0x9f, 0x8f, /* 0xe8-0xef */ }; static const unsigned char koi8_c_page22[1] = { 0xb0, /* 0x16-0x16 */ }; static int koi8_c_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { unsigned char c = 0; if (wc < 0x0080) { *r = wc; return 1; } else if (wc >= 0x00a0 && wc < 0x00a1) c = koi8_c_page00[wc-0x00a0]; else if (wc >= 0x0400 && wc < 0x04ef) c = koi8_c_page04[wc-0x0400]; else if (wc >= 0x2216 && wc < 0x2217) c = koi8_c_page22[wc-0x2216]; if (c != 0) { *r = c; return 1; } return RET_ILSEQ; } libX11-1.6.3/src/xlibi18n/lcUniConv/gbk.h000064401431060000012000015110601247741723500201230ustar00alancstaff00002660200006 /* * GBK-0 */ static const unsigned short gbk_2uni_page81[23766] = { /* 0x81 */ 0x4e02, 0x4e04, 0x4e05, 0x4e06, 0x4e0f, 0x4e12, 0x4e17, 0x4e1f, 0x4e20, 0x4e21, 0x4e23, 0x4e26, 0x4e29, 0x4e2e, 0x4e2f, 0x4e31, 0x4e33, 0x4e35, 0x4e37, 0x4e3c, 0x4e40, 0x4e41, 0x4e42, 0x4e44, 0x4e46, 0x4e4a, 0x4e51, 0x4e55, 0x4e57, 0x4e5a, 0x4e5b, 0x4e62, 0x4e63, 0x4e64, 0x4e65, 0x4e67, 0x4e68, 0x4e6a, 0x4e6b, 0x4e6c, 0x4e6d, 0x4e6e, 0x4e6f, 0x4e72, 0x4e74, 0x4e75, 0x4e76, 0x4e77, 0x4e78, 0x4e79, 0x4e7a, 0x4e7b, 0x4e7c, 0x4e7d, 0x4e7f, 0x4e80, 0x4e81, 0x4e82, 0x4e83, 0x4e84, 0x4e85, 0x4e87, 0x4e8a, 0x4e90, 0x4e96, 0x4e97, 0x4e99, 0x4e9c, 0x4e9d, 0x4e9e, 0x4ea3, 0x4eaa, 0x4eaf, 0x4eb0, 0x4eb1, 0x4eb4, 0x4eb6, 0x4eb7, 0x4eb8, 0x4eb9, 0x4ebc, 0x4ebd, 0x4ebe, 0x4ec8, 0x4ecc, 0x4ecf, 0x4ed0, 0x4ed2, 0x4eda, 0x4edb, 0x4edc, 0x4ee0, 0x4ee2, 0x4ee6, 0x4ee7, 0x4ee9, 0x4eed, 0x4eee, 0x4eef, 0x4ef1, 0x4ef4, 0x4ef8, 0x4ef9, 0x4efa, 0x4efc, 0x4efe, 0x4f00, 0x4f02, 0x4f03, 0x4f04, 0x4f05, 0x4f06, 0x4f07, 0x4f08, 0x4f0b, 0x4f0c, 0x4f12, 0x4f13, 0x4f14, 0x4f15, 0x4f16, 0x4f1c, 0x4f1d, 0x4f21, 0x4f23, 0x4f28, 0x4f29, 0x4f2c, 0x4f2d, 0x4f2e, 0x4f31, 0x4f33, 0x4f35, 0x4f37, 0x4f39, 0x4f3b, 0x4f3e, 0x4f3f, 0x4f40, 0x4f41, 0x4f42, 0x4f44, 0x4f45, 0x4f47, 0x4f48, 0x4f49, 0x4f4a, 0x4f4b, 0x4f4c, 0x4f52, 0x4f54, 0x4f56, 0x4f61, 0x4f62, 0x4f66, 0x4f68, 0x4f6a, 0x4f6b, 0x4f6d, 0x4f6e, 0x4f71, 0x4f72, 0x4f75, 0x4f77, 0x4f78, 0x4f79, 0x4f7a, 0x4f7d, 0x4f80, 0x4f81, 0x4f82, 0x4f85, 0x4f86, 0x4f87, 0x4f8a, 0x4f8c, 0x4f8e, 0x4f90, 0x4f92, 0x4f93, 0x4f95, 0x4f96, 0x4f98, 0x4f99, 0x4f9a, 0x4f9c, 0x4f9e, 0x4f9f, 0x4fa1, 0x4fa2, /* 0x82 */ 0x4fa4, 0x4fab, 0x4fad, 0x4fb0, 0x4fb1, 0x4fb2, 0x4fb3, 0x4fb4, 0x4fb6, 0x4fb7, 0x4fb8, 0x4fb9, 0x4fba, 0x4fbb, 0x4fbc, 0x4fbd, 0x4fbe, 0x4fc0, 0x4fc1, 0x4fc2, 0x4fc6, 0x4fc7, 0x4fc8, 0x4fc9, 0x4fcb, 0x4fcc, 0x4fcd, 0x4fd2, 0x4fd3, 0x4fd4, 0x4fd5, 0x4fd6, 0x4fd9, 0x4fdb, 0x4fe0, 0x4fe2, 0x4fe4, 0x4fe5, 0x4fe7, 0x4feb, 0x4fec, 0x4ff0, 0x4ff2, 0x4ff4, 0x4ff5, 0x4ff6, 0x4ff7, 0x4ff9, 0x4ffb, 0x4ffc, 0x4ffd, 0x4fff, 0x5000, 0x5001, 0x5002, 0x5003, 0x5004, 0x5005, 0x5006, 0x5007, 0x5008, 0x5009, 0x500a, 0x500b, 0x500e, 0x5010, 0x5011, 0x5013, 0x5015, 0x5016, 0x5017, 0x501b, 0x501d, 0x501e, 0x5020, 0x5022, 0x5023, 0x5024, 0x5027, 0x502b, 0x502f, 0x5030, 0x5031, 0x5032, 0x5033, 0x5034, 0x5035, 0x5036, 0x5037, 0x5038, 0x5039, 0x503b, 0x503d, 0x503f, 0x5040, 0x5041, 0x5042, 0x5044, 0x5045, 0x5046, 0x5049, 0x504a, 0x504b, 0x504d, 0x5050, 0x5051, 0x5052, 0x5053, 0x5054, 0x5056, 0x5057, 0x5058, 0x5059, 0x505b, 0x505d, 0x505e, 0x505f, 0x5060, 0x5061, 0x5062, 0x5063, 0x5064, 0x5066, 0x5067, 0x5068, 0x5069, 0x506a, 0x506b, 0x506d, 0x506e, 0x506f, 0x5070, 0x5071, 0x5072, 0x5073, 0x5074, 0x5075, 0x5078, 0x5079, 0x507a, 0x507c, 0x507d, 0x5081, 0x5082, 0x5083, 0x5084, 0x5086, 0x5087, 0x5089, 0x508a, 0x508b, 0x508c, 0x508e, 0x508f, 0x5090, 0x5091, 0x5092, 0x5093, 0x5094, 0x5095, 0x5096, 0x5097, 0x5098, 0x5099, 0x509a, 0x509b, 0x509c, 0x509d, 0x509e, 0x509f, 0x50a0, 0x50a1, 0x50a2, 0x50a4, 0x50a6, 0x50aa, 0x50ab, 0x50ad, 0x50ae, 0x50af, 0x50b0, 0x50b1, 0x50b3, 0x50b4, 0x50b5, 0x50b6, 0x50b7, 0x50b8, 0x50b9, 0x50bc, /* 0x83 */ 0x50bd, 0x50be, 0x50bf, 0x50c0, 0x50c1, 0x50c2, 0x50c3, 0x50c4, 0x50c5, 0x50c6, 0x50c7, 0x50c8, 0x50c9, 0x50ca, 0x50cb, 0x50cc, 0x50cd, 0x50ce, 0x50d0, 0x50d1, 0x50d2, 0x50d3, 0x50d4, 0x50d5, 0x50d7, 0x50d8, 0x50d9, 0x50db, 0x50dc, 0x50dd, 0x50de, 0x50df, 0x50e0, 0x50e1, 0x50e2, 0x50e3, 0x50e4, 0x50e5, 0x50e8, 0x50e9, 0x50ea, 0x50eb, 0x50ef, 0x50f0, 0x50f1, 0x50f2, 0x50f4, 0x50f6, 0x50f7, 0x50f8, 0x50f9, 0x50fa, 0x50fc, 0x50fd, 0x50fe, 0x50ff, 0x5100, 0x5101, 0x5102, 0x5103, 0x5104, 0x5105, 0x5108, 0x5109, 0x510a, 0x510c, 0x510d, 0x510e, 0x510f, 0x5110, 0x5111, 0x5113, 0x5114, 0x5115, 0x5116, 0x5117, 0x5118, 0x5119, 0x511a, 0x511b, 0x511c, 0x511d, 0x511e, 0x511f, 0x5120, 0x5122, 0x5123, 0x5124, 0x5125, 0x5126, 0x5127, 0x5128, 0x5129, 0x512a, 0x512b, 0x512c, 0x512d, 0x512e, 0x512f, 0x5130, 0x5131, 0x5132, 0x5133, 0x5134, 0x5135, 0x5136, 0x5137, 0x5138, 0x5139, 0x513a, 0x513b, 0x513c, 0x513d, 0x513e, 0x5142, 0x5147, 0x514a, 0x514c, 0x514e, 0x514f, 0x5150, 0x5152, 0x5153, 0x5157, 0x5158, 0x5159, 0x515b, 0x515d, 0x515e, 0x515f, 0x5160, 0x5161, 0x5163, 0x5164, 0x5166, 0x5167, 0x5169, 0x516a, 0x516f, 0x5172, 0x517a, 0x517e, 0x517f, 0x5183, 0x5184, 0x5186, 0x5187, 0x518a, 0x518b, 0x518e, 0x518f, 0x5190, 0x5191, 0x5193, 0x5194, 0x5198, 0x519a, 0x519d, 0x519e, 0x519f, 0x51a1, 0x51a3, 0x51a6, 0x51a7, 0x51a8, 0x51a9, 0x51aa, 0x51ad, 0x51ae, 0x51b4, 0x51b8, 0x51b9, 0x51ba, 0x51be, 0x51bf, 0x51c1, 0x51c2, 0x51c3, 0x51c5, 0x51c8, 0x51ca, 0x51cd, 0x51ce, 0x51d0, 0x51d2, 0x51d3, 0x51d4, 0x51d5, 0x51d6, 0x51d7, /* 0x84 */ 0x51d8, 0x51d9, 0x51da, 0x51dc, 0x51de, 0x51df, 0x51e2, 0x51e3, 0x51e5, 0x51e6, 0x51e7, 0x51e8, 0x51e9, 0x51ea, 0x51ec, 0x51ee, 0x51f1, 0x51f2, 0x51f4, 0x51f7, 0x51fe, 0x5204, 0x5205, 0x5209, 0x520b, 0x520c, 0x520f, 0x5210, 0x5213, 0x5214, 0x5215, 0x521c, 0x521e, 0x521f, 0x5221, 0x5222, 0x5223, 0x5225, 0x5226, 0x5227, 0x522a, 0x522c, 0x522f, 0x5231, 0x5232, 0x5234, 0x5235, 0x523c, 0x523e, 0x5244, 0x5245, 0x5246, 0x5247, 0x5248, 0x5249, 0x524b, 0x524e, 0x524f, 0x5252, 0x5253, 0x5255, 0x5257, 0x5258, 0x5259, 0x525a, 0x525b, 0x525d, 0x525f, 0x5260, 0x5262, 0x5263, 0x5264, 0x5266, 0x5268, 0x526b, 0x526c, 0x526d, 0x526e, 0x5270, 0x5271, 0x5273, 0x5274, 0x5275, 0x5276, 0x5277, 0x5278, 0x5279, 0x527a, 0x527b, 0x527c, 0x527e, 0x5280, 0x5283, 0x5284, 0x5285, 0x5286, 0x5287, 0x5289, 0x528a, 0x528b, 0x528c, 0x528d, 0x528e, 0x528f, 0x5291, 0x5292, 0x5294, 0x5295, 0x5296, 0x5297, 0x5298, 0x5299, 0x529a, 0x529c, 0x52a4, 0x52a5, 0x52a6, 0x52a7, 0x52ae, 0x52af, 0x52b0, 0x52b4, 0x52b5, 0x52b6, 0x52b7, 0x52b8, 0x52b9, 0x52ba, 0x52bb, 0x52bc, 0x52bd, 0x52c0, 0x52c1, 0x52c2, 0x52c4, 0x52c5, 0x52c6, 0x52c8, 0x52ca, 0x52cc, 0x52cd, 0x52ce, 0x52cf, 0x52d1, 0x52d3, 0x52d4, 0x52d5, 0x52d7, 0x52d9, 0x52da, 0x52db, 0x52dc, 0x52dd, 0x52de, 0x52e0, 0x52e1, 0x52e2, 0x52e3, 0x52e5, 0x52e6, 0x52e7, 0x52e8, 0x52e9, 0x52ea, 0x52eb, 0x52ec, 0x52ed, 0x52ee, 0x52ef, 0x52f1, 0x52f2, 0x52f3, 0x52f4, 0x52f5, 0x52f6, 0x52f7, 0x52f8, 0x52fb, 0x52fc, 0x52fd, 0x5301, 0x5302, 0x5303, 0x5304, 0x5307, 0x5309, 0x530a, 0x530b, 0x530c, 0x530e, /* 0x85 */ 0x5311, 0x5312, 0x5313, 0x5314, 0x5318, 0x531b, 0x531c, 0x531e, 0x531f, 0x5322, 0x5324, 0x5325, 0x5327, 0x5328, 0x5329, 0x532b, 0x532c, 0x532d, 0x532f, 0x5330, 0x5331, 0x5332, 0x5333, 0x5334, 0x5335, 0x5336, 0x5337, 0x5338, 0x533c, 0x533d, 0x5340, 0x5342, 0x5344, 0x5346, 0x534b, 0x534c, 0x534d, 0x5350, 0x5354, 0x5358, 0x5359, 0x535b, 0x535d, 0x5365, 0x5368, 0x536a, 0x536c, 0x536d, 0x5372, 0x5376, 0x5379, 0x537b, 0x537c, 0x537d, 0x537e, 0x5380, 0x5381, 0x5383, 0x5387, 0x5388, 0x538a, 0x538e, 0x538f, 0x5390, 0x5391, 0x5392, 0x5393, 0x5394, 0x5396, 0x5397, 0x5399, 0x539b, 0x539c, 0x539e, 0x53a0, 0x53a1, 0x53a4, 0x53a7, 0x53aa, 0x53ab, 0x53ac, 0x53ad, 0x53af, 0x53b0, 0x53b1, 0x53b2, 0x53b3, 0x53b4, 0x53b5, 0x53b7, 0x53b8, 0x53b9, 0x53ba, 0x53bc, 0x53bd, 0x53be, 0x53c0, 0x53c3, 0x53c4, 0x53c5, 0x53c6, 0x53c7, 0x53ce, 0x53cf, 0x53d0, 0x53d2, 0x53d3, 0x53d5, 0x53da, 0x53dc, 0x53dd, 0x53de, 0x53e1, 0x53e2, 0x53e7, 0x53f4, 0x53fa, 0x53fe, 0x53ff, 0x5400, 0x5402, 0x5405, 0x5407, 0x540b, 0x5414, 0x5418, 0x5419, 0x541a, 0x541c, 0x5422, 0x5424, 0x5425, 0x542a, 0x5430, 0x5433, 0x5436, 0x5437, 0x543a, 0x543d, 0x543f, 0x5441, 0x5442, 0x5444, 0x5445, 0x5447, 0x5449, 0x544c, 0x544d, 0x544e, 0x544f, 0x5451, 0x545a, 0x545d, 0x545e, 0x545f, 0x5460, 0x5461, 0x5463, 0x5465, 0x5467, 0x5469, 0x546a, 0x546b, 0x546c, 0x546d, 0x546e, 0x546f, 0x5470, 0x5474, 0x5479, 0x547a, 0x547e, 0x547f, 0x5481, 0x5483, 0x5485, 0x5487, 0x5488, 0x5489, 0x548a, 0x548d, 0x5491, 0x5493, 0x5497, 0x5498, 0x549c, 0x549e, 0x549f, 0x54a0, 0x54a1, /* 0x86 */ 0x54a2, 0x54a5, 0x54ae, 0x54b0, 0x54b2, 0x54b5, 0x54b6, 0x54b7, 0x54b9, 0x54ba, 0x54bc, 0x54be, 0x54c3, 0x54c5, 0x54ca, 0x54cb, 0x54d6, 0x54d8, 0x54db, 0x54e0, 0x54e1, 0x54e2, 0x54e3, 0x54e4, 0x54eb, 0x54ec, 0x54ef, 0x54f0, 0x54f1, 0x54f4, 0x54f5, 0x54f6, 0x54f7, 0x54f8, 0x54f9, 0x54fb, 0x54fe, 0x5500, 0x5502, 0x5503, 0x5504, 0x5505, 0x5508, 0x550a, 0x550b, 0x550c, 0x550d, 0x550e, 0x5512, 0x5513, 0x5515, 0x5516, 0x5517, 0x5518, 0x5519, 0x551a, 0x551c, 0x551d, 0x551e, 0x551f, 0x5521, 0x5525, 0x5526, 0x5528, 0x5529, 0x552b, 0x552d, 0x5532, 0x5534, 0x5535, 0x5536, 0x5538, 0x5539, 0x553a, 0x553b, 0x553d, 0x5540, 0x5542, 0x5545, 0x5547, 0x5548, 0x554b, 0x554c, 0x554d, 0x554e, 0x554f, 0x5551, 0x5552, 0x5553, 0x5554, 0x5557, 0x5558, 0x5559, 0x555a, 0x555b, 0x555d, 0x555e, 0x555f, 0x5560, 0x5562, 0x5563, 0x5568, 0x5569, 0x556b, 0x556f, 0x5570, 0x5571, 0x5572, 0x5573, 0x5574, 0x5579, 0x557a, 0x557d, 0x557f, 0x5585, 0x5586, 0x558c, 0x558d, 0x558e, 0x5590, 0x5592, 0x5593, 0x5595, 0x5596, 0x5597, 0x559a, 0x559b, 0x559e, 0x55a0, 0x55a1, 0x55a2, 0x55a3, 0x55a4, 0x55a5, 0x55a6, 0x55a8, 0x55a9, 0x55aa, 0x55ab, 0x55ac, 0x55ad, 0x55ae, 0x55af, 0x55b0, 0x55b2, 0x55b4, 0x55b6, 0x55b8, 0x55ba, 0x55bc, 0x55bf, 0x55c0, 0x55c1, 0x55c2, 0x55c3, 0x55c6, 0x55c7, 0x55c8, 0x55ca, 0x55cb, 0x55ce, 0x55cf, 0x55d0, 0x55d5, 0x55d7, 0x55d8, 0x55d9, 0x55da, 0x55db, 0x55de, 0x55e0, 0x55e2, 0x55e7, 0x55e9, 0x55ed, 0x55ee, 0x55f0, 0x55f1, 0x55f4, 0x55f6, 0x55f8, 0x55f9, 0x55fa, 0x55fb, 0x55fc, 0x55ff, 0x5602, 0x5603, 0x5604, 0x5605, /* 0x87 */ 0x5606, 0x5607, 0x560a, 0x560b, 0x560d, 0x5610, 0x5611, 0x5612, 0x5613, 0x5614, 0x5615, 0x5616, 0x5617, 0x5619, 0x561a, 0x561c, 0x561d, 0x5620, 0x5621, 0x5622, 0x5625, 0x5626, 0x5628, 0x5629, 0x562a, 0x562b, 0x562e, 0x562f, 0x5630, 0x5633, 0x5635, 0x5637, 0x5638, 0x563a, 0x563c, 0x563d, 0x563e, 0x5640, 0x5641, 0x5642, 0x5643, 0x5644, 0x5645, 0x5646, 0x5647, 0x5648, 0x5649, 0x564a, 0x564b, 0x564f, 0x5650, 0x5651, 0x5652, 0x5653, 0x5655, 0x5656, 0x565a, 0x565b, 0x565d, 0x565e, 0x565f, 0x5660, 0x5661, 0x5663, 0x5665, 0x5666, 0x5667, 0x566d, 0x566e, 0x566f, 0x5670, 0x5672, 0x5673, 0x5674, 0x5675, 0x5677, 0x5678, 0x5679, 0x567a, 0x567d, 0x567e, 0x567f, 0x5680, 0x5681, 0x5682, 0x5683, 0x5684, 0x5687, 0x5688, 0x5689, 0x568a, 0x568b, 0x568c, 0x568d, 0x5690, 0x5691, 0x5692, 0x5694, 0x5695, 0x5696, 0x5697, 0x5698, 0x5699, 0x569a, 0x569b, 0x569c, 0x569d, 0x569e, 0x569f, 0x56a0, 0x56a1, 0x56a2, 0x56a4, 0x56a5, 0x56a6, 0x56a7, 0x56a8, 0x56a9, 0x56aa, 0x56ab, 0x56ac, 0x56ad, 0x56ae, 0x56b0, 0x56b1, 0x56b2, 0x56b3, 0x56b4, 0x56b5, 0x56b6, 0x56b8, 0x56b9, 0x56ba, 0x56bb, 0x56bd, 0x56be, 0x56bf, 0x56c0, 0x56c1, 0x56c2, 0x56c3, 0x56c4, 0x56c5, 0x56c6, 0x56c7, 0x56c8, 0x56c9, 0x56cb, 0x56cc, 0x56cd, 0x56ce, 0x56cf, 0x56d0, 0x56d1, 0x56d2, 0x56d3, 0x56d5, 0x56d6, 0x56d8, 0x56d9, 0x56dc, 0x56e3, 0x56e5, 0x56e6, 0x56e7, 0x56e8, 0x56e9, 0x56ea, 0x56ec, 0x56ee, 0x56ef, 0x56f2, 0x56f3, 0x56f6, 0x56f7, 0x56f8, 0x56fb, 0x56fc, 0x5700, 0x5701, 0x5702, 0x5705, 0x5707, 0x570b, 0x570c, 0x570d, 0x570e, 0x570f, 0x5710, 0x5711, /* 0x88 */ 0x5712, 0x5713, 0x5714, 0x5715, 0x5716, 0x5717, 0x5718, 0x5719, 0x571a, 0x571b, 0x571d, 0x571e, 0x5720, 0x5721, 0x5722, 0x5724, 0x5725, 0x5726, 0x5727, 0x572b, 0x5731, 0x5732, 0x5734, 0x5735, 0x5736, 0x5737, 0x5738, 0x573c, 0x573d, 0x573f, 0x5741, 0x5743, 0x5744, 0x5745, 0x5746, 0x5748, 0x5749, 0x574b, 0x5752, 0x5753, 0x5754, 0x5755, 0x5756, 0x5758, 0x5759, 0x5762, 0x5763, 0x5765, 0x5767, 0x576c, 0x576e, 0x5770, 0x5771, 0x5772, 0x5774, 0x5775, 0x5778, 0x5779, 0x577a, 0x577d, 0x577e, 0x577f, 0x5780, 0x5781, 0x5787, 0x5788, 0x5789, 0x578a, 0x578d, 0x578e, 0x578f, 0x5790, 0x5791, 0x5794, 0x5795, 0x5796, 0x5797, 0x5798, 0x5799, 0x579a, 0x579c, 0x579d, 0x579e, 0x579f, 0x57a5, 0x57a8, 0x57aa, 0x57ac, 0x57af, 0x57b0, 0x57b1, 0x57b3, 0x57b5, 0x57b6, 0x57b7, 0x57b9, 0x57ba, 0x57bb, 0x57bc, 0x57bd, 0x57be, 0x57bf, 0x57c0, 0x57c1, 0x57c4, 0x57c5, 0x57c6, 0x57c7, 0x57c8, 0x57c9, 0x57ca, 0x57cc, 0x57cd, 0x57d0, 0x57d1, 0x57d3, 0x57d6, 0x57d7, 0x57db, 0x57dc, 0x57de, 0x57e1, 0x57e2, 0x57e3, 0x57e5, 0x57e6, 0x57e7, 0x57e8, 0x57e9, 0x57ea, 0x57eb, 0x57ec, 0x57ee, 0x57f0, 0x57f1, 0x57f2, 0x57f3, 0x57f5, 0x57f6, 0x57f7, 0x57fb, 0x57fc, 0x57fe, 0x57ff, 0x5801, 0x5803, 0x5804, 0x5805, 0x5808, 0x5809, 0x580a, 0x580c, 0x580e, 0x580f, 0x5810, 0x5812, 0x5813, 0x5814, 0x5816, 0x5817, 0x5818, 0x581a, 0x581b, 0x581c, 0x581d, 0x581f, 0x5822, 0x5823, 0x5825, 0x5826, 0x5827, 0x5828, 0x5829, 0x582b, 0x582c, 0x582d, 0x582e, 0x582f, 0x5831, 0x5832, 0x5833, 0x5834, 0x5836, 0x5837, 0x5838, 0x5839, 0x583a, 0x583b, 0x583c, 0x583d, /* 0x89 */ 0x583e, 0x583f, 0x5840, 0x5841, 0x5842, 0x5843, 0x5845, 0x5846, 0x5847, 0x5848, 0x5849, 0x584a, 0x584b, 0x584e, 0x584f, 0x5850, 0x5852, 0x5853, 0x5855, 0x5856, 0x5857, 0x5859, 0x585a, 0x585b, 0x585c, 0x585d, 0x585f, 0x5860, 0x5861, 0x5862, 0x5863, 0x5864, 0x5866, 0x5867, 0x5868, 0x5869, 0x586a, 0x586d, 0x586e, 0x586f, 0x5870, 0x5871, 0x5872, 0x5873, 0x5874, 0x5875, 0x5876, 0x5877, 0x5878, 0x5879, 0x587a, 0x587b, 0x587c, 0x587d, 0x587f, 0x5882, 0x5884, 0x5886, 0x5887, 0x5888, 0x588a, 0x588b, 0x588c, 0x588d, 0x588e, 0x588f, 0x5890, 0x5891, 0x5894, 0x5895, 0x5896, 0x5897, 0x5898, 0x589b, 0x589c, 0x589d, 0x58a0, 0x58a1, 0x58a2, 0x58a3, 0x58a4, 0x58a5, 0x58a6, 0x58a7, 0x58aa, 0x58ab, 0x58ac, 0x58ad, 0x58ae, 0x58af, 0x58b0, 0x58b1, 0x58b2, 0x58b3, 0x58b4, 0x58b5, 0x58b6, 0x58b7, 0x58b8, 0x58b9, 0x58ba, 0x58bb, 0x58bd, 0x58be, 0x58bf, 0x58c0, 0x58c2, 0x58c3, 0x58c4, 0x58c6, 0x58c7, 0x58c8, 0x58c9, 0x58ca, 0x58cb, 0x58cc, 0x58cd, 0x58ce, 0x58cf, 0x58d0, 0x58d2, 0x58d3, 0x58d4, 0x58d6, 0x58d7, 0x58d8, 0x58d9, 0x58da, 0x58db, 0x58dc, 0x58dd, 0x58de, 0x58df, 0x58e0, 0x58e1, 0x58e2, 0x58e3, 0x58e5, 0x58e6, 0x58e7, 0x58e8, 0x58e9, 0x58ea, 0x58ed, 0x58ef, 0x58f1, 0x58f2, 0x58f4, 0x58f5, 0x58f7, 0x58f8, 0x58fa, 0x58fb, 0x58fc, 0x58fd, 0x58fe, 0x58ff, 0x5900, 0x5901, 0x5903, 0x5905, 0x5906, 0x5908, 0x5909, 0x590a, 0x590b, 0x590c, 0x590e, 0x5910, 0x5911, 0x5912, 0x5913, 0x5917, 0x5918, 0x591b, 0x591d, 0x591e, 0x5920, 0x5921, 0x5922, 0x5923, 0x5926, 0x5928, 0x592c, 0x5930, 0x5932, 0x5933, 0x5935, 0x5936, 0x593b, /* 0x8a */ 0x593d, 0x593e, 0x593f, 0x5940, 0x5943, 0x5945, 0x5946, 0x594a, 0x594c, 0x594d, 0x5950, 0x5952, 0x5953, 0x5959, 0x595b, 0x595c, 0x595d, 0x595e, 0x595f, 0x5961, 0x5963, 0x5964, 0x5966, 0x5967, 0x5968, 0x5969, 0x596a, 0x596b, 0x596c, 0x596d, 0x596e, 0x596f, 0x5970, 0x5971, 0x5972, 0x5975, 0x5977, 0x597a, 0x597b, 0x597c, 0x597e, 0x597f, 0x5980, 0x5985, 0x5989, 0x598b, 0x598c, 0x598e, 0x598f, 0x5990, 0x5991, 0x5994, 0x5995, 0x5998, 0x599a, 0x599b, 0x599c, 0x599d, 0x599f, 0x59a0, 0x59a1, 0x59a2, 0x59a6, 0x59a7, 0x59ac, 0x59ad, 0x59b0, 0x59b1, 0x59b3, 0x59b4, 0x59b5, 0x59b6, 0x59b7, 0x59b8, 0x59ba, 0x59bc, 0x59bd, 0x59bf, 0x59c0, 0x59c1, 0x59c2, 0x59c3, 0x59c4, 0x59c5, 0x59c7, 0x59c8, 0x59c9, 0x59cc, 0x59cd, 0x59ce, 0x59cf, 0x59d5, 0x59d6, 0x59d9, 0x59db, 0x59de, 0x59df, 0x59e0, 0x59e1, 0x59e2, 0x59e4, 0x59e6, 0x59e7, 0x59e9, 0x59ea, 0x59eb, 0x59ed, 0x59ee, 0x59ef, 0x59f0, 0x59f1, 0x59f2, 0x59f3, 0x59f4, 0x59f5, 0x59f6, 0x59f7, 0x59f8, 0x59fa, 0x59fc, 0x59fd, 0x59fe, 0x5a00, 0x5a02, 0x5a0a, 0x5a0b, 0x5a0d, 0x5a0e, 0x5a0f, 0x5a10, 0x5a12, 0x5a14, 0x5a15, 0x5a16, 0x5a17, 0x5a19, 0x5a1a, 0x5a1b, 0x5a1d, 0x5a1e, 0x5a21, 0x5a22, 0x5a24, 0x5a26, 0x5a27, 0x5a28, 0x5a2a, 0x5a2b, 0x5a2c, 0x5a2d, 0x5a2e, 0x5a2f, 0x5a30, 0x5a33, 0x5a35, 0x5a37, 0x5a38, 0x5a39, 0x5a3a, 0x5a3b, 0x5a3d, 0x5a3e, 0x5a3f, 0x5a41, 0x5a42, 0x5a43, 0x5a44, 0x5a45, 0x5a47, 0x5a48, 0x5a4b, 0x5a4c, 0x5a4d, 0x5a4e, 0x5a4f, 0x5a50, 0x5a51, 0x5a52, 0x5a53, 0x5a54, 0x5a56, 0x5a57, 0x5a58, 0x5a59, 0x5a5b, 0x5a5c, 0x5a5d, 0x5a5e, 0x5a5f, 0x5a60, /* 0x8b */ 0x5a61, 0x5a63, 0x5a64, 0x5a65, 0x5a66, 0x5a68, 0x5a69, 0x5a6b, 0x5a6c, 0x5a6d, 0x5a6e, 0x5a6f, 0x5a70, 0x5a71, 0x5a72, 0x5a73, 0x5a78, 0x5a79, 0x5a7b, 0x5a7c, 0x5a7d, 0x5a7e, 0x5a80, 0x5a81, 0x5a82, 0x5a83, 0x5a84, 0x5a85, 0x5a86, 0x5a87, 0x5a88, 0x5a89, 0x5a8a, 0x5a8b, 0x5a8c, 0x5a8d, 0x5a8e, 0x5a8f, 0x5a90, 0x5a91, 0x5a93, 0x5a94, 0x5a95, 0x5a96, 0x5a97, 0x5a98, 0x5a99, 0x5a9c, 0x5a9d, 0x5a9e, 0x5a9f, 0x5aa0, 0x5aa1, 0x5aa2, 0x5aa3, 0x5aa4, 0x5aa5, 0x5aa6, 0x5aa7, 0x5aa8, 0x5aa9, 0x5aab, 0x5aac, 0x5aad, 0x5aae, 0x5aaf, 0x5ab0, 0x5ab1, 0x5ab4, 0x5ab6, 0x5ab7, 0x5ab9, 0x5aba, 0x5abb, 0x5abc, 0x5abd, 0x5abf, 0x5ac0, 0x5ac3, 0x5ac4, 0x5ac5, 0x5ac6, 0x5ac7, 0x5ac8, 0x5aca, 0x5acb, 0x5acd, 0x5ace, 0x5acf, 0x5ad0, 0x5ad1, 0x5ad3, 0x5ad5, 0x5ad7, 0x5ad9, 0x5ada, 0x5adb, 0x5add, 0x5ade, 0x5adf, 0x5ae2, 0x5ae4, 0x5ae5, 0x5ae7, 0x5ae8, 0x5aea, 0x5aec, 0x5aed, 0x5aee, 0x5aef, 0x5af0, 0x5af2, 0x5af3, 0x5af4, 0x5af5, 0x5af6, 0x5af7, 0x5af8, 0x5af9, 0x5afa, 0x5afb, 0x5afc, 0x5afd, 0x5afe, 0x5aff, 0x5b00, 0x5b01, 0x5b02, 0x5b03, 0x5b04, 0x5b05, 0x5b06, 0x5b07, 0x5b08, 0x5b0a, 0x5b0b, 0x5b0c, 0x5b0d, 0x5b0e, 0x5b0f, 0x5b10, 0x5b11, 0x5b12, 0x5b13, 0x5b14, 0x5b15, 0x5b18, 0x5b19, 0x5b1a, 0x5b1b, 0x5b1c, 0x5b1d, 0x5b1e, 0x5b1f, 0x5b20, 0x5b21, 0x5b22, 0x5b23, 0x5b24, 0x5b25, 0x5b26, 0x5b27, 0x5b28, 0x5b29, 0x5b2a, 0x5b2b, 0x5b2c, 0x5b2d, 0x5b2e, 0x5b2f, 0x5b30, 0x5b31, 0x5b33, 0x5b35, 0x5b36, 0x5b38, 0x5b39, 0x5b3a, 0x5b3b, 0x5b3c, 0x5b3d, 0x5b3e, 0x5b3f, 0x5b41, 0x5b42, 0x5b43, 0x5b44, 0x5b45, 0x5b46, 0x5b47, /* 0x8c */ 0x5b48, 0x5b49, 0x5b4a, 0x5b4b, 0x5b4c, 0x5b4d, 0x5b4e, 0x5b4f, 0x5b52, 0x5b56, 0x5b5e, 0x5b60, 0x5b61, 0x5b67, 0x5b68, 0x5b6b, 0x5b6d, 0x5b6e, 0x5b6f, 0x5b72, 0x5b74, 0x5b76, 0x5b77, 0x5b78, 0x5b79, 0x5b7b, 0x5b7c, 0x5b7e, 0x5b7f, 0x5b82, 0x5b86, 0x5b8a, 0x5b8d, 0x5b8e, 0x5b90, 0x5b91, 0x5b92, 0x5b94, 0x5b96, 0x5b9f, 0x5ba7, 0x5ba8, 0x5ba9, 0x5bac, 0x5bad, 0x5bae, 0x5baf, 0x5bb1, 0x5bb2, 0x5bb7, 0x5bba, 0x5bbb, 0x5bbc, 0x5bc0, 0x5bc1, 0x5bc3, 0x5bc8, 0x5bc9, 0x5bca, 0x5bcb, 0x5bcd, 0x5bce, 0x5bcf, 0x5bd1, 0x5bd4, 0x5bd5, 0x5bd6, 0x5bd7, 0x5bd8, 0x5bd9, 0x5bda, 0x5bdb, 0x5bdc, 0x5be0, 0x5be2, 0x5be3, 0x5be6, 0x5be7, 0x5be9, 0x5bea, 0x5beb, 0x5bec, 0x5bed, 0x5bef, 0x5bf1, 0x5bf2, 0x5bf3, 0x5bf4, 0x5bf5, 0x5bf6, 0x5bf7, 0x5bfd, 0x5bfe, 0x5c00, 0x5c02, 0x5c03, 0x5c05, 0x5c07, 0x5c08, 0x5c0b, 0x5c0c, 0x5c0d, 0x5c0e, 0x5c10, 0x5c12, 0x5c13, 0x5c17, 0x5c19, 0x5c1b, 0x5c1e, 0x5c1f, 0x5c20, 0x5c21, 0x5c23, 0x5c26, 0x5c28, 0x5c29, 0x5c2a, 0x5c2b, 0x5c2d, 0x5c2e, 0x5c2f, 0x5c30, 0x5c32, 0x5c33, 0x5c35, 0x5c36, 0x5c37, 0x5c43, 0x5c44, 0x5c46, 0x5c47, 0x5c4c, 0x5c4d, 0x5c52, 0x5c53, 0x5c54, 0x5c56, 0x5c57, 0x5c58, 0x5c5a, 0x5c5b, 0x5c5c, 0x5c5d, 0x5c5f, 0x5c62, 0x5c64, 0x5c67, 0x5c68, 0x5c69, 0x5c6a, 0x5c6b, 0x5c6c, 0x5c6d, 0x5c70, 0x5c72, 0x5c73, 0x5c74, 0x5c75, 0x5c76, 0x5c77, 0x5c78, 0x5c7b, 0x5c7c, 0x5c7d, 0x5c7e, 0x5c80, 0x5c83, 0x5c84, 0x5c85, 0x5c86, 0x5c87, 0x5c89, 0x5c8a, 0x5c8b, 0x5c8e, 0x5c8f, 0x5c92, 0x5c93, 0x5c95, 0x5c9d, 0x5c9e, 0x5c9f, 0x5ca0, 0x5ca1, 0x5ca4, 0x5ca5, 0x5ca6, 0x5ca7, 0x5ca8, /* 0x8d */ 0x5caa, 0x5cae, 0x5caf, 0x5cb0, 0x5cb2, 0x5cb4, 0x5cb6, 0x5cb9, 0x5cba, 0x5cbb, 0x5cbc, 0x5cbe, 0x5cc0, 0x5cc2, 0x5cc3, 0x5cc5, 0x5cc6, 0x5cc7, 0x5cc8, 0x5cc9, 0x5cca, 0x5ccc, 0x5ccd, 0x5cce, 0x5ccf, 0x5cd0, 0x5cd1, 0x5cd3, 0x5cd4, 0x5cd5, 0x5cd6, 0x5cd7, 0x5cd8, 0x5cda, 0x5cdb, 0x5cdc, 0x5cdd, 0x5cde, 0x5cdf, 0x5ce0, 0x5ce2, 0x5ce3, 0x5ce7, 0x5ce9, 0x5ceb, 0x5cec, 0x5cee, 0x5cef, 0x5cf1, 0x5cf2, 0x5cf3, 0x5cf4, 0x5cf5, 0x5cf6, 0x5cf7, 0x5cf8, 0x5cf9, 0x5cfa, 0x5cfc, 0x5cfd, 0x5cfe, 0x5cff, 0x5d00, 0x5d01, 0x5d04, 0x5d05, 0x5d08, 0x5d09, 0x5d0a, 0x5d0b, 0x5d0c, 0x5d0d, 0x5d0f, 0x5d10, 0x5d11, 0x5d12, 0x5d13, 0x5d15, 0x5d17, 0x5d18, 0x5d19, 0x5d1a, 0x5d1c, 0x5d1d, 0x5d1f, 0x5d20, 0x5d21, 0x5d22, 0x5d23, 0x5d25, 0x5d28, 0x5d2a, 0x5d2b, 0x5d2c, 0x5d2f, 0x5d30, 0x5d31, 0x5d32, 0x5d33, 0x5d35, 0x5d36, 0x5d37, 0x5d38, 0x5d39, 0x5d3a, 0x5d3b, 0x5d3c, 0x5d3f, 0x5d40, 0x5d41, 0x5d42, 0x5d43, 0x5d44, 0x5d45, 0x5d46, 0x5d48, 0x5d49, 0x5d4d, 0x5d4e, 0x5d4f, 0x5d50, 0x5d51, 0x5d52, 0x5d53, 0x5d54, 0x5d55, 0x5d56, 0x5d57, 0x5d59, 0x5d5a, 0x5d5c, 0x5d5e, 0x5d5f, 0x5d60, 0x5d61, 0x5d62, 0x5d63, 0x5d64, 0x5d65, 0x5d66, 0x5d67, 0x5d68, 0x5d6a, 0x5d6d, 0x5d6e, 0x5d70, 0x5d71, 0x5d72, 0x5d73, 0x5d75, 0x5d76, 0x5d77, 0x5d78, 0x5d79, 0x5d7a, 0x5d7b, 0x5d7c, 0x5d7d, 0x5d7e, 0x5d7f, 0x5d80, 0x5d81, 0x5d83, 0x5d84, 0x5d85, 0x5d86, 0x5d87, 0x5d88, 0x5d89, 0x5d8a, 0x5d8b, 0x5d8c, 0x5d8d, 0x5d8e, 0x5d8f, 0x5d90, 0x5d91, 0x5d92, 0x5d93, 0x5d94, 0x5d95, 0x5d96, 0x5d97, 0x5d98, 0x5d9a, 0x5d9b, 0x5d9c, 0x5d9e, 0x5d9f, 0x5da0, /* 0x8e */ 0x5da1, 0x5da2, 0x5da3, 0x5da4, 0x5da5, 0x5da6, 0x5da7, 0x5da8, 0x5da9, 0x5daa, 0x5dab, 0x5dac, 0x5dad, 0x5dae, 0x5daf, 0x5db0, 0x5db1, 0x5db2, 0x5db3, 0x5db4, 0x5db5, 0x5db6, 0x5db8, 0x5db9, 0x5dba, 0x5dbb, 0x5dbc, 0x5dbd, 0x5dbe, 0x5dbf, 0x5dc0, 0x5dc1, 0x5dc2, 0x5dc3, 0x5dc4, 0x5dc6, 0x5dc7, 0x5dc8, 0x5dc9, 0x5dca, 0x5dcb, 0x5dcc, 0x5dce, 0x5dcf, 0x5dd0, 0x5dd1, 0x5dd2, 0x5dd3, 0x5dd4, 0x5dd5, 0x5dd6, 0x5dd7, 0x5dd8, 0x5dd9, 0x5dda, 0x5ddc, 0x5ddf, 0x5de0, 0x5de3, 0x5de4, 0x5dea, 0x5dec, 0x5ded, 0x5df0, 0x5df5, 0x5df6, 0x5df8, 0x5df9, 0x5dfa, 0x5dfb, 0x5dfc, 0x5dff, 0x5e00, 0x5e04, 0x5e07, 0x5e09, 0x5e0a, 0x5e0b, 0x5e0d, 0x5e0e, 0x5e12, 0x5e13, 0x5e17, 0x5e1e, 0x5e1f, 0x5e20, 0x5e21, 0x5e22, 0x5e23, 0x5e24, 0x5e25, 0x5e28, 0x5e29, 0x5e2a, 0x5e2b, 0x5e2c, 0x5e2f, 0x5e30, 0x5e32, 0x5e33, 0x5e34, 0x5e35, 0x5e36, 0x5e39, 0x5e3a, 0x5e3e, 0x5e3f, 0x5e40, 0x5e41, 0x5e43, 0x5e46, 0x5e47, 0x5e48, 0x5e49, 0x5e4a, 0x5e4b, 0x5e4d, 0x5e4e, 0x5e4f, 0x5e50, 0x5e51, 0x5e52, 0x5e53, 0x5e56, 0x5e57, 0x5e58, 0x5e59, 0x5e5a, 0x5e5c, 0x5e5d, 0x5e5f, 0x5e60, 0x5e63, 0x5e64, 0x5e65, 0x5e66, 0x5e67, 0x5e68, 0x5e69, 0x5e6a, 0x5e6b, 0x5e6c, 0x5e6d, 0x5e6e, 0x5e6f, 0x5e70, 0x5e71, 0x5e75, 0x5e77, 0x5e79, 0x5e7e, 0x5e81, 0x5e82, 0x5e83, 0x5e85, 0x5e88, 0x5e89, 0x5e8c, 0x5e8d, 0x5e8e, 0x5e92, 0x5e98, 0x5e9b, 0x5e9d, 0x5ea1, 0x5ea2, 0x5ea3, 0x5ea4, 0x5ea8, 0x5ea9, 0x5eaa, 0x5eab, 0x5eac, 0x5eae, 0x5eaf, 0x5eb0, 0x5eb1, 0x5eb2, 0x5eb4, 0x5eba, 0x5ebb, 0x5ebc, 0x5ebd, 0x5ebf, 0x5ec0, 0x5ec1, 0x5ec2, 0x5ec3, 0x5ec4, 0x5ec5, /* 0x8f */ 0x5ec6, 0x5ec7, 0x5ec8, 0x5ecb, 0x5ecc, 0x5ecd, 0x5ece, 0x5ecf, 0x5ed0, 0x5ed4, 0x5ed5, 0x5ed7, 0x5ed8, 0x5ed9, 0x5eda, 0x5edc, 0x5edd, 0x5ede, 0x5edf, 0x5ee0, 0x5ee1, 0x5ee2, 0x5ee3, 0x5ee4, 0x5ee5, 0x5ee6, 0x5ee7, 0x5ee9, 0x5eeb, 0x5eec, 0x5eed, 0x5eee, 0x5eef, 0x5ef0, 0x5ef1, 0x5ef2, 0x5ef3, 0x5ef5, 0x5ef8, 0x5ef9, 0x5efb, 0x5efc, 0x5efd, 0x5f05, 0x5f06, 0x5f07, 0x5f09, 0x5f0c, 0x5f0d, 0x5f0e, 0x5f10, 0x5f12, 0x5f14, 0x5f16, 0x5f19, 0x5f1a, 0x5f1c, 0x5f1d, 0x5f1e, 0x5f21, 0x5f22, 0x5f23, 0x5f24, 0x5f28, 0x5f2b, 0x5f2c, 0x5f2e, 0x5f30, 0x5f32, 0x5f33, 0x5f34, 0x5f35, 0x5f36, 0x5f37, 0x5f38, 0x5f3b, 0x5f3d, 0x5f3e, 0x5f3f, 0x5f41, 0x5f42, 0x5f43, 0x5f44, 0x5f45, 0x5f46, 0x5f47, 0x5f48, 0x5f49, 0x5f4a, 0x5f4b, 0x5f4c, 0x5f4d, 0x5f4e, 0x5f4f, 0x5f51, 0x5f54, 0x5f59, 0x5f5a, 0x5f5b, 0x5f5c, 0x5f5e, 0x5f5f, 0x5f60, 0x5f63, 0x5f65, 0x5f67, 0x5f68, 0x5f6b, 0x5f6e, 0x5f6f, 0x5f72, 0x5f74, 0x5f75, 0x5f76, 0x5f78, 0x5f7a, 0x5f7d, 0x5f7e, 0x5f7f, 0x5f83, 0x5f86, 0x5f8d, 0x5f8e, 0x5f8f, 0x5f91, 0x5f93, 0x5f94, 0x5f96, 0x5f9a, 0x5f9b, 0x5f9d, 0x5f9e, 0x5f9f, 0x5fa0, 0x5fa2, 0x5fa3, 0x5fa4, 0x5fa5, 0x5fa6, 0x5fa7, 0x5fa9, 0x5fab, 0x5fac, 0x5faf, 0x5fb0, 0x5fb1, 0x5fb2, 0x5fb3, 0x5fb4, 0x5fb6, 0x5fb8, 0x5fb9, 0x5fba, 0x5fbb, 0x5fbe, 0x5fbf, 0x5fc0, 0x5fc1, 0x5fc2, 0x5fc7, 0x5fc8, 0x5fca, 0x5fcb, 0x5fce, 0x5fd3, 0x5fd4, 0x5fd5, 0x5fda, 0x5fdb, 0x5fdc, 0x5fde, 0x5fdf, 0x5fe2, 0x5fe3, 0x5fe5, 0x5fe6, 0x5fe8, 0x5fe9, 0x5fec, 0x5fef, 0x5ff0, 0x5ff2, 0x5ff3, 0x5ff4, 0x5ff6, 0x5ff7, 0x5ff9, 0x5ffa, 0x5ffc, 0x6007, /* 0x90 */ 0x6008, 0x6009, 0x600b, 0x600c, 0x6010, 0x6011, 0x6013, 0x6017, 0x6018, 0x601a, 0x601e, 0x601f, 0x6022, 0x6023, 0x6024, 0x602c, 0x602d, 0x602e, 0x6030, 0x6031, 0x6032, 0x6033, 0x6034, 0x6036, 0x6037, 0x6038, 0x6039, 0x603a, 0x603d, 0x603e, 0x6040, 0x6044, 0x6045, 0x6046, 0x6047, 0x6048, 0x6049, 0x604a, 0x604c, 0x604e, 0x604f, 0x6051, 0x6053, 0x6054, 0x6056, 0x6057, 0x6058, 0x605b, 0x605c, 0x605e, 0x605f, 0x6060, 0x6061, 0x6065, 0x6066, 0x606e, 0x6071, 0x6072, 0x6074, 0x6075, 0x6077, 0x607e, 0x6080, 0x6081, 0x6082, 0x6085, 0x6086, 0x6087, 0x6088, 0x608a, 0x608b, 0x608e, 0x608f, 0x6090, 0x6091, 0x6093, 0x6095, 0x6097, 0x6098, 0x6099, 0x609c, 0x609e, 0x60a1, 0x60a2, 0x60a4, 0x60a5, 0x60a7, 0x60a9, 0x60aa, 0x60ae, 0x60b0, 0x60b3, 0x60b5, 0x60b6, 0x60b7, 0x60b9, 0x60ba, 0x60bd, 0x60be, 0x60bf, 0x60c0, 0x60c1, 0x60c2, 0x60c3, 0x60c4, 0x60c7, 0x60c8, 0x60c9, 0x60cc, 0x60cd, 0x60ce, 0x60cf, 0x60d0, 0x60d2, 0x60d3, 0x60d4, 0x60d6, 0x60d7, 0x60d9, 0x60db, 0x60de, 0x60e1, 0x60e2, 0x60e3, 0x60e4, 0x60e5, 0x60ea, 0x60f1, 0x60f2, 0x60f5, 0x60f7, 0x60f8, 0x60fb, 0x60fc, 0x60fd, 0x60fe, 0x60ff, 0x6102, 0x6103, 0x6104, 0x6105, 0x6107, 0x610a, 0x610b, 0x610c, 0x6110, 0x6111, 0x6112, 0x6113, 0x6114, 0x6116, 0x6117, 0x6118, 0x6119, 0x611b, 0x611c, 0x611d, 0x611e, 0x6121, 0x6122, 0x6125, 0x6128, 0x6129, 0x612a, 0x612c, 0x612d, 0x612e, 0x612f, 0x6130, 0x6131, 0x6132, 0x6133, 0x6134, 0x6135, 0x6136, 0x6137, 0x6138, 0x6139, 0x613a, 0x613b, 0x613c, 0x613d, 0x613e, 0x6140, 0x6141, 0x6142, 0x6143, 0x6144, 0x6145, 0x6146, /* 0x91 */ 0x6147, 0x6149, 0x614b, 0x614d, 0x614f, 0x6150, 0x6152, 0x6153, 0x6154, 0x6156, 0x6157, 0x6158, 0x6159, 0x615a, 0x615b, 0x615c, 0x615e, 0x615f, 0x6160, 0x6161, 0x6163, 0x6164, 0x6165, 0x6166, 0x6169, 0x616a, 0x616b, 0x616c, 0x616d, 0x616e, 0x616f, 0x6171, 0x6172, 0x6173, 0x6174, 0x6176, 0x6178, 0x6179, 0x617a, 0x617b, 0x617c, 0x617d, 0x617e, 0x617f, 0x6180, 0x6181, 0x6182, 0x6183, 0x6184, 0x6185, 0x6186, 0x6187, 0x6188, 0x6189, 0x618a, 0x618c, 0x618d, 0x618f, 0x6190, 0x6191, 0x6192, 0x6193, 0x6195, 0x6196, 0x6197, 0x6198, 0x6199, 0x619a, 0x619b, 0x619c, 0x619e, 0x619f, 0x61a0, 0x61a1, 0x61a2, 0x61a3, 0x61a4, 0x61a5, 0x61a6, 0x61aa, 0x61ab, 0x61ad, 0x61ae, 0x61af, 0x61b0, 0x61b1, 0x61b2, 0x61b3, 0x61b4, 0x61b5, 0x61b6, 0x61b8, 0x61b9, 0x61ba, 0x61bb, 0x61bc, 0x61bd, 0x61bf, 0x61c0, 0x61c1, 0x61c3, 0x61c4, 0x61c5, 0x61c6, 0x61c7, 0x61c9, 0x61cc, 0x61cd, 0x61ce, 0x61cf, 0x61d0, 0x61d3, 0x61d5, 0x61d6, 0x61d7, 0x61d8, 0x61d9, 0x61da, 0x61db, 0x61dc, 0x61dd, 0x61de, 0x61df, 0x61e0, 0x61e1, 0x61e2, 0x61e3, 0x61e4, 0x61e5, 0x61e7, 0x61e8, 0x61e9, 0x61ea, 0x61eb, 0x61ec, 0x61ed, 0x61ee, 0x61ef, 0x61f0, 0x61f1, 0x61f2, 0x61f3, 0x61f4, 0x61f6, 0x61f7, 0x61f8, 0x61f9, 0x61fa, 0x61fb, 0x61fc, 0x61fd, 0x61fe, 0x6200, 0x6201, 0x6202, 0x6203, 0x6204, 0x6205, 0x6207, 0x6209, 0x6213, 0x6214, 0x6219, 0x621c, 0x621d, 0x621e, 0x6220, 0x6223, 0x6226, 0x6227, 0x6228, 0x6229, 0x622b, 0x622d, 0x622f, 0x6230, 0x6231, 0x6232, 0x6235, 0x6236, 0x6238, 0x6239, 0x623a, 0x623b, 0x623c, 0x6242, 0x6244, 0x6245, 0x6246, 0x624a, /* 0x92 */ 0x624f, 0x6250, 0x6255, 0x6256, 0x6257, 0x6259, 0x625a, 0x625c, 0x625d, 0x625e, 0x625f, 0x6260, 0x6261, 0x6262, 0x6264, 0x6265, 0x6268, 0x6271, 0x6272, 0x6274, 0x6275, 0x6277, 0x6278, 0x627a, 0x627b, 0x627d, 0x6281, 0x6282, 0x6283, 0x6285, 0x6286, 0x6287, 0x6288, 0x628b, 0x628c, 0x628d, 0x628e, 0x628f, 0x6290, 0x6294, 0x6299, 0x629c, 0x629d, 0x629e, 0x62a3, 0x62a6, 0x62a7, 0x62a9, 0x62aa, 0x62ad, 0x62ae, 0x62af, 0x62b0, 0x62b2, 0x62b3, 0x62b4, 0x62b6, 0x62b7, 0x62b8, 0x62ba, 0x62be, 0x62c0, 0x62c1, 0x62c3, 0x62cb, 0x62cf, 0x62d1, 0x62d5, 0x62dd, 0x62de, 0x62e0, 0x62e1, 0x62e4, 0x62ea, 0x62eb, 0x62f0, 0x62f2, 0x62f5, 0x62f8, 0x62f9, 0x62fa, 0x62fb, 0x6300, 0x6303, 0x6304, 0x6305, 0x6306, 0x630a, 0x630b, 0x630c, 0x630d, 0x630f, 0x6310, 0x6312, 0x6313, 0x6314, 0x6315, 0x6317, 0x6318, 0x6319, 0x631c, 0x6326, 0x6327, 0x6329, 0x632c, 0x632d, 0x632e, 0x6330, 0x6331, 0x6333, 0x6334, 0x6335, 0x6336, 0x6337, 0x6338, 0x633b, 0x633c, 0x633e, 0x633f, 0x6340, 0x6341, 0x6344, 0x6347, 0x6348, 0x634a, 0x6351, 0x6352, 0x6353, 0x6354, 0x6356, 0x6357, 0x6358, 0x6359, 0x635a, 0x635b, 0x635c, 0x635d, 0x6360, 0x6364, 0x6365, 0x6366, 0x6368, 0x636a, 0x636b, 0x636c, 0x636f, 0x6370, 0x6372, 0x6373, 0x6374, 0x6375, 0x6378, 0x6379, 0x637c, 0x637d, 0x637e, 0x637f, 0x6381, 0x6383, 0x6384, 0x6385, 0x6386, 0x638b, 0x638d, 0x6391, 0x6393, 0x6394, 0x6395, 0x6397, 0x6399, 0x639a, 0x639b, 0x639c, 0x639d, 0x639e, 0x639f, 0x63a1, 0x63a4, 0x63a6, 0x63ab, 0x63af, 0x63b1, 0x63b2, 0x63b5, 0x63b6, 0x63b9, 0x63bb, 0x63bd, 0x63bf, 0x63c0, /* 0x93 */ 0x63c1, 0x63c2, 0x63c3, 0x63c5, 0x63c7, 0x63c8, 0x63ca, 0x63cb, 0x63cc, 0x63d1, 0x63d3, 0x63d4, 0x63d5, 0x63d7, 0x63d8, 0x63d9, 0x63da, 0x63db, 0x63dc, 0x63dd, 0x63df, 0x63e2, 0x63e4, 0x63e5, 0x63e6, 0x63e7, 0x63e8, 0x63eb, 0x63ec, 0x63ee, 0x63ef, 0x63f0, 0x63f1, 0x63f3, 0x63f5, 0x63f7, 0x63f9, 0x63fa, 0x63fb, 0x63fc, 0x63fe, 0x6403, 0x6404, 0x6406, 0x6407, 0x6408, 0x6409, 0x640a, 0x640d, 0x640e, 0x6411, 0x6412, 0x6415, 0x6416, 0x6417, 0x6418, 0x6419, 0x641a, 0x641d, 0x641f, 0x6422, 0x6423, 0x6424, 0x6425, 0x6427, 0x6428, 0x6429, 0x642b, 0x642e, 0x642f, 0x6430, 0x6431, 0x6432, 0x6433, 0x6435, 0x6436, 0x6437, 0x6438, 0x6439, 0x643b, 0x643c, 0x643e, 0x6440, 0x6442, 0x6443, 0x6449, 0x644b, 0x644c, 0x644d, 0x644e, 0x644f, 0x6450, 0x6451, 0x6453, 0x6455, 0x6456, 0x6457, 0x6459, 0x645a, 0x645b, 0x645c, 0x645d, 0x645f, 0x6460, 0x6461, 0x6462, 0x6463, 0x6464, 0x6465, 0x6466, 0x6468, 0x646a, 0x646b, 0x646c, 0x646e, 0x646f, 0x6470, 0x6471, 0x6472, 0x6473, 0x6474, 0x6475, 0x6476, 0x6477, 0x647b, 0x647c, 0x647d, 0x647e, 0x647f, 0x6480, 0x6481, 0x6483, 0x6486, 0x6488, 0x6489, 0x648a, 0x648b, 0x648c, 0x648d, 0x648e, 0x648f, 0x6490, 0x6493, 0x6494, 0x6497, 0x6498, 0x649a, 0x649b, 0x649c, 0x649d, 0x649f, 0x64a0, 0x64a1, 0x64a2, 0x64a3, 0x64a5, 0x64a6, 0x64a7, 0x64a8, 0x64aa, 0x64ab, 0x64af, 0x64b1, 0x64b2, 0x64b3, 0x64b4, 0x64b6, 0x64b9, 0x64bb, 0x64bd, 0x64be, 0x64bf, 0x64c1, 0x64c3, 0x64c4, 0x64c6, 0x64c7, 0x64c8, 0x64c9, 0x64ca, 0x64cb, 0x64cc, 0x64cf, 0x64d1, 0x64d3, 0x64d4, 0x64d5, 0x64d6, 0x64d9, 0x64da, /* 0x94 */ 0x64db, 0x64dc, 0x64dd, 0x64df, 0x64e0, 0x64e1, 0x64e3, 0x64e5, 0x64e7, 0x64e8, 0x64e9, 0x64ea, 0x64eb, 0x64ec, 0x64ed, 0x64ee, 0x64ef, 0x64f0, 0x64f1, 0x64f2, 0x64f3, 0x64f4, 0x64f5, 0x64f6, 0x64f7, 0x64f8, 0x64f9, 0x64fa, 0x64fb, 0x64fc, 0x64fd, 0x64fe, 0x64ff, 0x6501, 0x6502, 0x6503, 0x6504, 0x6505, 0x6506, 0x6507, 0x6508, 0x650a, 0x650b, 0x650c, 0x650d, 0x650e, 0x650f, 0x6510, 0x6511, 0x6513, 0x6514, 0x6515, 0x6516, 0x6517, 0x6519, 0x651a, 0x651b, 0x651c, 0x651d, 0x651e, 0x651f, 0x6520, 0x6521, 0x6522, 0x6523, 0x6524, 0x6526, 0x6527, 0x6528, 0x6529, 0x652a, 0x652c, 0x652d, 0x6530, 0x6531, 0x6532, 0x6533, 0x6537, 0x653a, 0x653c, 0x653d, 0x6540, 0x6541, 0x6542, 0x6543, 0x6544, 0x6546, 0x6547, 0x654a, 0x654b, 0x654d, 0x654e, 0x6550, 0x6552, 0x6553, 0x6554, 0x6557, 0x6558, 0x655a, 0x655c, 0x655f, 0x6560, 0x6561, 0x6564, 0x6565, 0x6567, 0x6568, 0x6569, 0x656a, 0x656d, 0x656e, 0x656f, 0x6571, 0x6573, 0x6575, 0x6576, 0x6578, 0x6579, 0x657a, 0x657b, 0x657c, 0x657d, 0x657e, 0x657f, 0x6580, 0x6581, 0x6582, 0x6583, 0x6584, 0x6585, 0x6586, 0x6588, 0x6589, 0x658a, 0x658d, 0x658e, 0x658f, 0x6592, 0x6594, 0x6595, 0x6596, 0x6598, 0x659a, 0x659d, 0x659e, 0x65a0, 0x65a2, 0x65a3, 0x65a6, 0x65a8, 0x65aa, 0x65ac, 0x65ae, 0x65b1, 0x65b2, 0x65b3, 0x65b4, 0x65b5, 0x65b6, 0x65b7, 0x65b8, 0x65ba, 0x65bb, 0x65be, 0x65bf, 0x65c0, 0x65c2, 0x65c7, 0x65c8, 0x65c9, 0x65ca, 0x65cd, 0x65d0, 0x65d1, 0x65d3, 0x65d4, 0x65d5, 0x65d8, 0x65d9, 0x65da, 0x65db, 0x65dc, 0x65dd, 0x65de, 0x65df, 0x65e1, 0x65e3, 0x65e4, 0x65ea, 0x65eb, /* 0x95 */ 0x65f2, 0x65f3, 0x65f4, 0x65f5, 0x65f8, 0x65f9, 0x65fb, 0x65fc, 0x65fd, 0x65fe, 0x65ff, 0x6601, 0x6604, 0x6605, 0x6607, 0x6608, 0x6609, 0x660b, 0x660d, 0x6610, 0x6611, 0x6612, 0x6616, 0x6617, 0x6618, 0x661a, 0x661b, 0x661c, 0x661e, 0x6621, 0x6622, 0x6623, 0x6624, 0x6626, 0x6629, 0x662a, 0x662b, 0x662c, 0x662e, 0x6630, 0x6632, 0x6633, 0x6637, 0x6638, 0x6639, 0x663a, 0x663b, 0x663d, 0x663f, 0x6640, 0x6642, 0x6644, 0x6645, 0x6646, 0x6647, 0x6648, 0x6649, 0x664a, 0x664d, 0x664e, 0x6650, 0x6651, 0x6658, 0x6659, 0x665b, 0x665c, 0x665d, 0x665e, 0x6660, 0x6662, 0x6663, 0x6665, 0x6667, 0x6669, 0x666a, 0x666b, 0x666c, 0x666d, 0x6671, 0x6672, 0x6673, 0x6675, 0x6678, 0x6679, 0x667b, 0x667c, 0x667d, 0x667f, 0x6680, 0x6681, 0x6683, 0x6685, 0x6686, 0x6688, 0x6689, 0x668a, 0x668b, 0x668d, 0x668e, 0x668f, 0x6690, 0x6692, 0x6693, 0x6694, 0x6695, 0x6698, 0x6699, 0x669a, 0x669b, 0x669c, 0x669e, 0x669f, 0x66a0, 0x66a1, 0x66a2, 0x66a3, 0x66a4, 0x66a5, 0x66a6, 0x66a9, 0x66aa, 0x66ab, 0x66ac, 0x66ad, 0x66af, 0x66b0, 0x66b1, 0x66b2, 0x66b3, 0x66b5, 0x66b6, 0x66b7, 0x66b8, 0x66ba, 0x66bb, 0x66bc, 0x66bd, 0x66bf, 0x66c0, 0x66c1, 0x66c2, 0x66c3, 0x66c4, 0x66c5, 0x66c6, 0x66c7, 0x66c8, 0x66c9, 0x66ca, 0x66cb, 0x66cc, 0x66cd, 0x66ce, 0x66cf, 0x66d0, 0x66d1, 0x66d2, 0x66d3, 0x66d4, 0x66d5, 0x66d6, 0x66d7, 0x66d8, 0x66da, 0x66de, 0x66df, 0x66e0, 0x66e1, 0x66e2, 0x66e3, 0x66e4, 0x66e5, 0x66e7, 0x66e8, 0x66ea, 0x66eb, 0x66ec, 0x66ed, 0x66ee, 0x66ef, 0x66f1, 0x66f5, 0x66f6, 0x66f8, 0x66fa, 0x66fb, 0x66fd, 0x6701, 0x6702, 0x6703, /* 0x96 */ 0x6704, 0x6705, 0x6706, 0x6707, 0x670c, 0x670e, 0x670f, 0x6711, 0x6712, 0x6713, 0x6716, 0x6718, 0x6719, 0x671a, 0x671c, 0x671e, 0x6720, 0x6721, 0x6722, 0x6723, 0x6724, 0x6725, 0x6727, 0x6729, 0x672e, 0x6730, 0x6732, 0x6733, 0x6736, 0x6737, 0x6738, 0x6739, 0x673b, 0x673c, 0x673e, 0x673f, 0x6741, 0x6744, 0x6745, 0x6747, 0x674a, 0x674b, 0x674d, 0x6752, 0x6754, 0x6755, 0x6757, 0x6758, 0x6759, 0x675a, 0x675b, 0x675d, 0x6762, 0x6763, 0x6764, 0x6766, 0x6767, 0x676b, 0x676c, 0x676e, 0x6771, 0x6774, 0x6776, 0x6778, 0x6779, 0x677a, 0x677b, 0x677d, 0x6780, 0x6782, 0x6783, 0x6785, 0x6786, 0x6788, 0x678a, 0x678c, 0x678d, 0x678e, 0x678f, 0x6791, 0x6792, 0x6793, 0x6794, 0x6796, 0x6799, 0x679b, 0x679f, 0x67a0, 0x67a1, 0x67a4, 0x67a6, 0x67a9, 0x67ac, 0x67ae, 0x67b1, 0x67b2, 0x67b4, 0x67b9, 0x67ba, 0x67bb, 0x67bc, 0x67bd, 0x67be, 0x67bf, 0x67c0, 0x67c2, 0x67c5, 0x67c6, 0x67c7, 0x67c8, 0x67c9, 0x67ca, 0x67cb, 0x67cc, 0x67cd, 0x67ce, 0x67d5, 0x67d6, 0x67d7, 0x67db, 0x67df, 0x67e1, 0x67e3, 0x67e4, 0x67e6, 0x67e7, 0x67e8, 0x67ea, 0x67eb, 0x67ed, 0x67ee, 0x67f2, 0x67f5, 0x67f6, 0x67f7, 0x67f8, 0x67f9, 0x67fa, 0x67fb, 0x67fc, 0x67fe, 0x6801, 0x6802, 0x6803, 0x6804, 0x6806, 0x680d, 0x6810, 0x6812, 0x6814, 0x6815, 0x6818, 0x6819, 0x681a, 0x681b, 0x681c, 0x681e, 0x681f, 0x6820, 0x6822, 0x6823, 0x6824, 0x6825, 0x6826, 0x6827, 0x6828, 0x682b, 0x682c, 0x682d, 0x682e, 0x682f, 0x6830, 0x6831, 0x6834, 0x6835, 0x6836, 0x683a, 0x683b, 0x683f, 0x6847, 0x684b, 0x684d, 0x684f, 0x6852, 0x6856, 0x6857, 0x6858, 0x6859, 0x685a, 0x685b, /* 0x97 */ 0x685c, 0x685d, 0x685e, 0x685f, 0x686a, 0x686c, 0x686d, 0x686e, 0x686f, 0x6870, 0x6871, 0x6872, 0x6873, 0x6875, 0x6878, 0x6879, 0x687a, 0x687b, 0x687c, 0x687d, 0x687e, 0x687f, 0x6880, 0x6882, 0x6884, 0x6887, 0x6888, 0x6889, 0x688a, 0x688b, 0x688c, 0x688d, 0x688e, 0x6890, 0x6891, 0x6892, 0x6894, 0x6895, 0x6896, 0x6898, 0x6899, 0x689a, 0x689b, 0x689c, 0x689d, 0x689e, 0x689f, 0x68a0, 0x68a1, 0x68a3, 0x68a4, 0x68a5, 0x68a9, 0x68aa, 0x68ab, 0x68ac, 0x68ae, 0x68b1, 0x68b2, 0x68b4, 0x68b6, 0x68b7, 0x68b8, 0x68b9, 0x68ba, 0x68bb, 0x68bc, 0x68bd, 0x68be, 0x68bf, 0x68c1, 0x68c3, 0x68c4, 0x68c5, 0x68c6, 0x68c7, 0x68c8, 0x68ca, 0x68cc, 0x68ce, 0x68cf, 0x68d0, 0x68d1, 0x68d3, 0x68d4, 0x68d6, 0x68d7, 0x68d9, 0x68db, 0x68dc, 0x68dd, 0x68de, 0x68df, 0x68e1, 0x68e2, 0x68e4, 0x68e5, 0x68e6, 0x68e7, 0x68e8, 0x68e9, 0x68ea, 0x68eb, 0x68ec, 0x68ed, 0x68ef, 0x68f2, 0x68f3, 0x68f4, 0x68f6, 0x68f7, 0x68f8, 0x68fb, 0x68fd, 0x68fe, 0x68ff, 0x6900, 0x6902, 0x6903, 0x6904, 0x6906, 0x6907, 0x6908, 0x6909, 0x690a, 0x690c, 0x690f, 0x6911, 0x6913, 0x6914, 0x6915, 0x6916, 0x6917, 0x6918, 0x6919, 0x691a, 0x691b, 0x691c, 0x691d, 0x691e, 0x6921, 0x6922, 0x6923, 0x6925, 0x6926, 0x6927, 0x6928, 0x6929, 0x692a, 0x692b, 0x692c, 0x692e, 0x692f, 0x6931, 0x6932, 0x6933, 0x6935, 0x6936, 0x6937, 0x6938, 0x693a, 0x693b, 0x693c, 0x693e, 0x6940, 0x6941, 0x6943, 0x6944, 0x6945, 0x6946, 0x6947, 0x6948, 0x6949, 0x694a, 0x694b, 0x694c, 0x694d, 0x694e, 0x694f, 0x6950, 0x6951, 0x6952, 0x6953, 0x6955, 0x6956, 0x6958, 0x6959, 0x695b, 0x695c, 0x695f, /* 0x98 */ 0x6961, 0x6962, 0x6964, 0x6965, 0x6967, 0x6968, 0x6969, 0x696a, 0x696c, 0x696d, 0x696f, 0x6970, 0x6972, 0x6973, 0x6974, 0x6975, 0x6976, 0x697a, 0x697b, 0x697d, 0x697e, 0x697f, 0x6981, 0x6983, 0x6985, 0x698a, 0x698b, 0x698c, 0x698e, 0x698f, 0x6990, 0x6991, 0x6992, 0x6993, 0x6996, 0x6997, 0x6999, 0x699a, 0x699d, 0x699e, 0x699f, 0x69a0, 0x69a1, 0x69a2, 0x69a3, 0x69a4, 0x69a5, 0x69a6, 0x69a9, 0x69aa, 0x69ac, 0x69ae, 0x69af, 0x69b0, 0x69b2, 0x69b3, 0x69b5, 0x69b6, 0x69b8, 0x69b9, 0x69ba, 0x69bc, 0x69bd, 0x69be, 0x69bf, 0x69c0, 0x69c2, 0x69c3, 0x69c4, 0x69c5, 0x69c6, 0x69c7, 0x69c8, 0x69c9, 0x69cb, 0x69cd, 0x69cf, 0x69d1, 0x69d2, 0x69d3, 0x69d5, 0x69d6, 0x69d7, 0x69d8, 0x69d9, 0x69da, 0x69dc, 0x69dd, 0x69de, 0x69e1, 0x69e2, 0x69e3, 0x69e4, 0x69e5, 0x69e6, 0x69e7, 0x69e8, 0x69e9, 0x69ea, 0x69eb, 0x69ec, 0x69ee, 0x69ef, 0x69f0, 0x69f1, 0x69f3, 0x69f4, 0x69f5, 0x69f6, 0x69f7, 0x69f8, 0x69f9, 0x69fa, 0x69fb, 0x69fc, 0x69fe, 0x6a00, 0x6a01, 0x6a02, 0x6a03, 0x6a04, 0x6a05, 0x6a06, 0x6a07, 0x6a08, 0x6a09, 0x6a0b, 0x6a0c, 0x6a0d, 0x6a0e, 0x6a0f, 0x6a10, 0x6a11, 0x6a12, 0x6a13, 0x6a14, 0x6a15, 0x6a16, 0x6a19, 0x6a1a, 0x6a1b, 0x6a1c, 0x6a1d, 0x6a1e, 0x6a20, 0x6a22, 0x6a23, 0x6a24, 0x6a25, 0x6a26, 0x6a27, 0x6a29, 0x6a2b, 0x6a2c, 0x6a2d, 0x6a2e, 0x6a30, 0x6a32, 0x6a33, 0x6a34, 0x6a36, 0x6a37, 0x6a38, 0x6a39, 0x6a3a, 0x6a3b, 0x6a3c, 0x6a3f, 0x6a40, 0x6a41, 0x6a42, 0x6a43, 0x6a45, 0x6a46, 0x6a48, 0x6a49, 0x6a4a, 0x6a4b, 0x6a4c, 0x6a4d, 0x6a4e, 0x6a4f, 0x6a51, 0x6a52, 0x6a53, 0x6a54, 0x6a55, 0x6a56, 0x6a57, 0x6a5a, /* 0x99 */ 0x6a5c, 0x6a5d, 0x6a5e, 0x6a5f, 0x6a60, 0x6a62, 0x6a63, 0x6a64, 0x6a66, 0x6a67, 0x6a68, 0x6a69, 0x6a6a, 0x6a6b, 0x6a6c, 0x6a6d, 0x6a6e, 0x6a6f, 0x6a70, 0x6a72, 0x6a73, 0x6a74, 0x6a75, 0x6a76, 0x6a77, 0x6a78, 0x6a7a, 0x6a7b, 0x6a7d, 0x6a7e, 0x6a7f, 0x6a81, 0x6a82, 0x6a83, 0x6a85, 0x6a86, 0x6a87, 0x6a88, 0x6a89, 0x6a8a, 0x6a8b, 0x6a8c, 0x6a8d, 0x6a8f, 0x6a92, 0x6a93, 0x6a94, 0x6a95, 0x6a96, 0x6a98, 0x6a99, 0x6a9a, 0x6a9b, 0x6a9c, 0x6a9d, 0x6a9e, 0x6a9f, 0x6aa1, 0x6aa2, 0x6aa3, 0x6aa4, 0x6aa5, 0x6aa6, 0x6aa7, 0x6aa8, 0x6aaa, 0x6aad, 0x6aae, 0x6aaf, 0x6ab0, 0x6ab1, 0x6ab2, 0x6ab3, 0x6ab4, 0x6ab5, 0x6ab6, 0x6ab7, 0x6ab8, 0x6ab9, 0x6aba, 0x6abb, 0x6abc, 0x6abd, 0x6abe, 0x6abf, 0x6ac0, 0x6ac1, 0x6ac2, 0x6ac3, 0x6ac4, 0x6ac5, 0x6ac6, 0x6ac7, 0x6ac8, 0x6ac9, 0x6aca, 0x6acb, 0x6acc, 0x6acd, 0x6ace, 0x6acf, 0x6ad0, 0x6ad1, 0x6ad2, 0x6ad3, 0x6ad4, 0x6ad5, 0x6ad6, 0x6ad7, 0x6ad8, 0x6ad9, 0x6ada, 0x6adb, 0x6adc, 0x6add, 0x6ade, 0x6adf, 0x6ae0, 0x6ae1, 0x6ae2, 0x6ae3, 0x6ae4, 0x6ae5, 0x6ae6, 0x6ae7, 0x6ae8, 0x6ae9, 0x6aea, 0x6aeb, 0x6aec, 0x6aed, 0x6aee, 0x6aef, 0x6af0, 0x6af1, 0x6af2, 0x6af3, 0x6af4, 0x6af5, 0x6af6, 0x6af7, 0x6af8, 0x6af9, 0x6afa, 0x6afb, 0x6afc, 0x6afd, 0x6afe, 0x6aff, 0x6b00, 0x6b01, 0x6b02, 0x6b03, 0x6b04, 0x6b05, 0x6b06, 0x6b07, 0x6b08, 0x6b09, 0x6b0a, 0x6b0b, 0x6b0c, 0x6b0d, 0x6b0e, 0x6b0f, 0x6b10, 0x6b11, 0x6b12, 0x6b13, 0x6b14, 0x6b15, 0x6b16, 0x6b17, 0x6b18, 0x6b19, 0x6b1a, 0x6b1b, 0x6b1c, 0x6b1d, 0x6b1e, 0x6b1f, 0x6b25, 0x6b26, 0x6b28, 0x6b29, 0x6b2a, 0x6b2b, 0x6b2c, 0x6b2d, 0x6b2e, /* 0x9a */ 0x6b2f, 0x6b30, 0x6b31, 0x6b33, 0x6b34, 0x6b35, 0x6b36, 0x6b38, 0x6b3b, 0x6b3c, 0x6b3d, 0x6b3f, 0x6b40, 0x6b41, 0x6b42, 0x6b44, 0x6b45, 0x6b48, 0x6b4a, 0x6b4b, 0x6b4d, 0x6b4e, 0x6b4f, 0x6b50, 0x6b51, 0x6b52, 0x6b53, 0x6b54, 0x6b55, 0x6b56, 0x6b57, 0x6b58, 0x6b5a, 0x6b5b, 0x6b5c, 0x6b5d, 0x6b5e, 0x6b5f, 0x6b60, 0x6b61, 0x6b68, 0x6b69, 0x6b6b, 0x6b6c, 0x6b6d, 0x6b6e, 0x6b6f, 0x6b70, 0x6b71, 0x6b72, 0x6b73, 0x6b74, 0x6b75, 0x6b76, 0x6b77, 0x6b78, 0x6b7a, 0x6b7d, 0x6b7e, 0x6b7f, 0x6b80, 0x6b85, 0x6b88, 0x6b8c, 0x6b8e, 0x6b8f, 0x6b90, 0x6b91, 0x6b94, 0x6b95, 0x6b97, 0x6b98, 0x6b99, 0x6b9c, 0x6b9d, 0x6b9e, 0x6b9f, 0x6ba0, 0x6ba2, 0x6ba3, 0x6ba4, 0x6ba5, 0x6ba6, 0x6ba7, 0x6ba8, 0x6ba9, 0x6bab, 0x6bac, 0x6bad, 0x6bae, 0x6baf, 0x6bb0, 0x6bb1, 0x6bb2, 0x6bb6, 0x6bb8, 0x6bb9, 0x6bba, 0x6bbb, 0x6bbc, 0x6bbd, 0x6bbe, 0x6bc0, 0x6bc3, 0x6bc4, 0x6bc6, 0x6bc7, 0x6bc8, 0x6bc9, 0x6bca, 0x6bcc, 0x6bce, 0x6bd0, 0x6bd1, 0x6bd8, 0x6bda, 0x6bdc, 0x6bdd, 0x6bde, 0x6bdf, 0x6be0, 0x6be2, 0x6be3, 0x6be4, 0x6be5, 0x6be6, 0x6be7, 0x6be8, 0x6be9, 0x6bec, 0x6bed, 0x6bee, 0x6bf0, 0x6bf1, 0x6bf2, 0x6bf4, 0x6bf6, 0x6bf7, 0x6bf8, 0x6bfa, 0x6bfb, 0x6bfc, 0x6bfe, 0x6bff, 0x6c00, 0x6c01, 0x6c02, 0x6c03, 0x6c04, 0x6c08, 0x6c09, 0x6c0a, 0x6c0b, 0x6c0c, 0x6c0e, 0x6c12, 0x6c17, 0x6c1c, 0x6c1d, 0x6c1e, 0x6c20, 0x6c23, 0x6c25, 0x6c2b, 0x6c2c, 0x6c2d, 0x6c31, 0x6c33, 0x6c36, 0x6c37, 0x6c39, 0x6c3a, 0x6c3b, 0x6c3c, 0x6c3e, 0x6c3f, 0x6c43, 0x6c44, 0x6c45, 0x6c48, 0x6c4b, 0x6c4c, 0x6c4d, 0x6c4e, 0x6c4f, 0x6c51, 0x6c52, 0x6c53, 0x6c56, 0x6c58, /* 0x9b */ 0x6c59, 0x6c5a, 0x6c62, 0x6c63, 0x6c65, 0x6c66, 0x6c67, 0x6c6b, 0x6c6c, 0x6c6d, 0x6c6e, 0x6c6f, 0x6c71, 0x6c73, 0x6c75, 0x6c77, 0x6c78, 0x6c7a, 0x6c7b, 0x6c7c, 0x6c7f, 0x6c80, 0x6c84, 0x6c87, 0x6c8a, 0x6c8b, 0x6c8d, 0x6c8e, 0x6c91, 0x6c92, 0x6c95, 0x6c96, 0x6c97, 0x6c98, 0x6c9a, 0x6c9c, 0x6c9d, 0x6c9e, 0x6ca0, 0x6ca2, 0x6ca8, 0x6cac, 0x6caf, 0x6cb0, 0x6cb4, 0x6cb5, 0x6cb6, 0x6cb7, 0x6cba, 0x6cc0, 0x6cc1, 0x6cc2, 0x6cc3, 0x6cc6, 0x6cc7, 0x6cc8, 0x6ccb, 0x6ccd, 0x6cce, 0x6ccf, 0x6cd1, 0x6cd2, 0x6cd8, 0x6cd9, 0x6cda, 0x6cdc, 0x6cdd, 0x6cdf, 0x6ce4, 0x6ce6, 0x6ce7, 0x6ce9, 0x6cec, 0x6ced, 0x6cf2, 0x6cf4, 0x6cf9, 0x6cff, 0x6d00, 0x6d02, 0x6d03, 0x6d05, 0x6d06, 0x6d08, 0x6d09, 0x6d0a, 0x6d0d, 0x6d0f, 0x6d10, 0x6d11, 0x6d13, 0x6d14, 0x6d15, 0x6d16, 0x6d18, 0x6d1c, 0x6d1d, 0x6d1f, 0x6d20, 0x6d21, 0x6d22, 0x6d23, 0x6d24, 0x6d26, 0x6d28, 0x6d29, 0x6d2c, 0x6d2d, 0x6d2f, 0x6d30, 0x6d34, 0x6d36, 0x6d37, 0x6d38, 0x6d3a, 0x6d3f, 0x6d40, 0x6d42, 0x6d44, 0x6d49, 0x6d4c, 0x6d50, 0x6d55, 0x6d56, 0x6d57, 0x6d58, 0x6d5b, 0x6d5d, 0x6d5f, 0x6d61, 0x6d62, 0x6d64, 0x6d65, 0x6d67, 0x6d68, 0x6d6b, 0x6d6c, 0x6d6d, 0x6d70, 0x6d71, 0x6d72, 0x6d73, 0x6d75, 0x6d76, 0x6d79, 0x6d7a, 0x6d7b, 0x6d7d, 0x6d7e, 0x6d7f, 0x6d80, 0x6d81, 0x6d83, 0x6d84, 0x6d86, 0x6d87, 0x6d8a, 0x6d8b, 0x6d8d, 0x6d8f, 0x6d90, 0x6d92, 0x6d96, 0x6d97, 0x6d98, 0x6d99, 0x6d9a, 0x6d9c, 0x6da2, 0x6da5, 0x6dac, 0x6dad, 0x6db0, 0x6db1, 0x6db3, 0x6db4, 0x6db6, 0x6db7, 0x6db9, 0x6dba, 0x6dbb, 0x6dbc, 0x6dbd, 0x6dbe, 0x6dc1, 0x6dc2, 0x6dc3, 0x6dc8, 0x6dc9, 0x6dca, /* 0x9c */ 0x6dcd, 0x6dce, 0x6dcf, 0x6dd0, 0x6dd2, 0x6dd3, 0x6dd4, 0x6dd5, 0x6dd7, 0x6dda, 0x6ddb, 0x6ddc, 0x6ddf, 0x6de2, 0x6de3, 0x6de5, 0x6de7, 0x6de8, 0x6de9, 0x6dea, 0x6ded, 0x6def, 0x6df0, 0x6df2, 0x6df4, 0x6df5, 0x6df6, 0x6df8, 0x6dfa, 0x6dfd, 0x6dfe, 0x6dff, 0x6e00, 0x6e01, 0x6e02, 0x6e03, 0x6e04, 0x6e06, 0x6e07, 0x6e08, 0x6e09, 0x6e0b, 0x6e0f, 0x6e12, 0x6e13, 0x6e15, 0x6e18, 0x6e19, 0x6e1b, 0x6e1c, 0x6e1e, 0x6e1f, 0x6e22, 0x6e26, 0x6e27, 0x6e28, 0x6e2a, 0x6e2c, 0x6e2e, 0x6e30, 0x6e31, 0x6e33, 0x6e35, 0x6e36, 0x6e37, 0x6e39, 0x6e3b, 0x6e3c, 0x6e3d, 0x6e3e, 0x6e3f, 0x6e40, 0x6e41, 0x6e42, 0x6e45, 0x6e46, 0x6e47, 0x6e48, 0x6e49, 0x6e4a, 0x6e4b, 0x6e4c, 0x6e4f, 0x6e50, 0x6e51, 0x6e52, 0x6e55, 0x6e57, 0x6e59, 0x6e5a, 0x6e5c, 0x6e5d, 0x6e5e, 0x6e60, 0x6e61, 0x6e62, 0x6e63, 0x6e64, 0x6e65, 0x6e66, 0x6e67, 0x6e68, 0x6e69, 0x6e6a, 0x6e6c, 0x6e6d, 0x6e6f, 0x6e70, 0x6e71, 0x6e72, 0x6e73, 0x6e74, 0x6e75, 0x6e76, 0x6e77, 0x6e78, 0x6e79, 0x6e7a, 0x6e7b, 0x6e7c, 0x6e7d, 0x6e80, 0x6e81, 0x6e82, 0x6e84, 0x6e87, 0x6e88, 0x6e8a, 0x6e8b, 0x6e8c, 0x6e8d, 0x6e8e, 0x6e91, 0x6e92, 0x6e93, 0x6e94, 0x6e95, 0x6e96, 0x6e97, 0x6e99, 0x6e9a, 0x6e9b, 0x6e9d, 0x6e9e, 0x6ea0, 0x6ea1, 0x6ea3, 0x6ea4, 0x6ea6, 0x6ea8, 0x6ea9, 0x6eab, 0x6eac, 0x6ead, 0x6eae, 0x6eb0, 0x6eb3, 0x6eb5, 0x6eb8, 0x6eb9, 0x6ebc, 0x6ebe, 0x6ebf, 0x6ec0, 0x6ec3, 0x6ec4, 0x6ec5, 0x6ec6, 0x6ec8, 0x6ec9, 0x6eca, 0x6ecc, 0x6ecd, 0x6ece, 0x6ed0, 0x6ed2, 0x6ed6, 0x6ed8, 0x6ed9, 0x6edb, 0x6edc, 0x6edd, 0x6ee3, 0x6ee7, 0x6eea, 0x6eeb, 0x6eec, 0x6eed, 0x6eee, 0x6eef, /* 0x9d */ 0x6ef0, 0x6ef1, 0x6ef2, 0x6ef3, 0x6ef5, 0x6ef6, 0x6ef7, 0x6ef8, 0x6efa, 0x6efb, 0x6efc, 0x6efd, 0x6efe, 0x6eff, 0x6f00, 0x6f01, 0x6f03, 0x6f04, 0x6f05, 0x6f07, 0x6f08, 0x6f0a, 0x6f0b, 0x6f0c, 0x6f0d, 0x6f0e, 0x6f10, 0x6f11, 0x6f12, 0x6f16, 0x6f17, 0x6f18, 0x6f19, 0x6f1a, 0x6f1b, 0x6f1c, 0x6f1d, 0x6f1e, 0x6f1f, 0x6f21, 0x6f22, 0x6f23, 0x6f25, 0x6f26, 0x6f27, 0x6f28, 0x6f2c, 0x6f2e, 0x6f30, 0x6f32, 0x6f34, 0x6f35, 0x6f37, 0x6f38, 0x6f39, 0x6f3a, 0x6f3b, 0x6f3c, 0x6f3d, 0x6f3f, 0x6f40, 0x6f41, 0x6f42, 0x6f43, 0x6f44, 0x6f45, 0x6f48, 0x6f49, 0x6f4a, 0x6f4c, 0x6f4e, 0x6f4f, 0x6f50, 0x6f51, 0x6f52, 0x6f53, 0x6f54, 0x6f55, 0x6f56, 0x6f57, 0x6f59, 0x6f5a, 0x6f5b, 0x6f5d, 0x6f5f, 0x6f60, 0x6f61, 0x6f63, 0x6f64, 0x6f65, 0x6f67, 0x6f68, 0x6f69, 0x6f6a, 0x6f6b, 0x6f6c, 0x6f6f, 0x6f70, 0x6f71, 0x6f73, 0x6f75, 0x6f76, 0x6f77, 0x6f79, 0x6f7b, 0x6f7d, 0x6f7e, 0x6f7f, 0x6f80, 0x6f81, 0x6f82, 0x6f83, 0x6f85, 0x6f86, 0x6f87, 0x6f8a, 0x6f8b, 0x6f8f, 0x6f90, 0x6f91, 0x6f92, 0x6f93, 0x6f94, 0x6f95, 0x6f96, 0x6f97, 0x6f98, 0x6f99, 0x6f9a, 0x6f9b, 0x6f9d, 0x6f9e, 0x6f9f, 0x6fa0, 0x6fa2, 0x6fa3, 0x6fa4, 0x6fa5, 0x6fa6, 0x6fa8, 0x6fa9, 0x6faa, 0x6fab, 0x6fac, 0x6fad, 0x6fae, 0x6faf, 0x6fb0, 0x6fb1, 0x6fb2, 0x6fb4, 0x6fb5, 0x6fb7, 0x6fb8, 0x6fba, 0x6fbb, 0x6fbc, 0x6fbd, 0x6fbe, 0x6fbf, 0x6fc1, 0x6fc3, 0x6fc4, 0x6fc5, 0x6fc6, 0x6fc7, 0x6fc8, 0x6fca, 0x6fcb, 0x6fcc, 0x6fcd, 0x6fce, 0x6fcf, 0x6fd0, 0x6fd3, 0x6fd4, 0x6fd5, 0x6fd6, 0x6fd7, 0x6fd8, 0x6fd9, 0x6fda, 0x6fdb, 0x6fdc, 0x6fdd, 0x6fdf, 0x6fe2, 0x6fe3, 0x6fe4, 0x6fe5, /* 0x9e */ 0x6fe6, 0x6fe7, 0x6fe8, 0x6fe9, 0x6fea, 0x6feb, 0x6fec, 0x6fed, 0x6ff0, 0x6ff1, 0x6ff2, 0x6ff3, 0x6ff4, 0x6ff5, 0x6ff6, 0x6ff7, 0x6ff8, 0x6ff9, 0x6ffa, 0x6ffb, 0x6ffc, 0x6ffd, 0x6ffe, 0x6fff, 0x7000, 0x7001, 0x7002, 0x7003, 0x7004, 0x7005, 0x7006, 0x7007, 0x7008, 0x7009, 0x700a, 0x700b, 0x700c, 0x700d, 0x700e, 0x700f, 0x7010, 0x7012, 0x7013, 0x7014, 0x7015, 0x7016, 0x7017, 0x7018, 0x7019, 0x701c, 0x701d, 0x701e, 0x701f, 0x7020, 0x7021, 0x7022, 0x7024, 0x7025, 0x7026, 0x7027, 0x7028, 0x7029, 0x702a, 0x702b, 0x702c, 0x702d, 0x702e, 0x702f, 0x7030, 0x7031, 0x7032, 0x7033, 0x7034, 0x7036, 0x7037, 0x7038, 0x703a, 0x703b, 0x703c, 0x703d, 0x703e, 0x703f, 0x7040, 0x7041, 0x7042, 0x7043, 0x7044, 0x7045, 0x7046, 0x7047, 0x7048, 0x7049, 0x704a, 0x704b, 0x704d, 0x704e, 0x7050, 0x7051, 0x7052, 0x7053, 0x7054, 0x7055, 0x7056, 0x7057, 0x7058, 0x7059, 0x705a, 0x705b, 0x705c, 0x705d, 0x705f, 0x7060, 0x7061, 0x7062, 0x7063, 0x7064, 0x7065, 0x7066, 0x7067, 0x7068, 0x7069, 0x706a, 0x706e, 0x7071, 0x7072, 0x7073, 0x7074, 0x7077, 0x7079, 0x707a, 0x707b, 0x707d, 0x7081, 0x7082, 0x7083, 0x7084, 0x7086, 0x7087, 0x7088, 0x708b, 0x708c, 0x708d, 0x708f, 0x7090, 0x7091, 0x7093, 0x7097, 0x7098, 0x709a, 0x709b, 0x709e, 0x709f, 0x70a0, 0x70a1, 0x70a2, 0x70a3, 0x70a4, 0x70a5, 0x70a6, 0x70a7, 0x70a8, 0x70a9, 0x70aa, 0x70b0, 0x70b2, 0x70b4, 0x70b5, 0x70b6, 0x70ba, 0x70be, 0x70bf, 0x70c4, 0x70c5, 0x70c6, 0x70c7, 0x70c9, 0x70cb, 0x70cc, 0x70cd, 0x70ce, 0x70cf, 0x70d0, 0x70d1, 0x70d2, 0x70d3, 0x70d4, 0x70d5, 0x70d6, 0x70d7, 0x70da, /* 0x9f */ 0x70dc, 0x70dd, 0x70de, 0x70e0, 0x70e1, 0x70e2, 0x70e3, 0x70e5, 0x70ea, 0x70ee, 0x70f0, 0x70f1, 0x70f2, 0x70f3, 0x70f4, 0x70f5, 0x70f6, 0x70f8, 0x70fa, 0x70fb, 0x70fc, 0x70fe, 0x70ff, 0x7100, 0x7101, 0x7102, 0x7103, 0x7104, 0x7105, 0x7106, 0x7107, 0x7108, 0x710b, 0x710c, 0x710d, 0x710e, 0x710f, 0x7111, 0x7112, 0x7114, 0x7117, 0x711b, 0x711c, 0x711d, 0x711e, 0x711f, 0x7120, 0x7121, 0x7122, 0x7123, 0x7124, 0x7125, 0x7127, 0x7128, 0x7129, 0x712a, 0x712b, 0x712c, 0x712d, 0x712e, 0x7132, 0x7133, 0x7134, 0x7135, 0x7137, 0x7138, 0x7139, 0x713a, 0x713b, 0x713c, 0x713d, 0x713e, 0x713f, 0x7140, 0x7141, 0x7142, 0x7143, 0x7144, 0x7146, 0x7147, 0x7148, 0x7149, 0x714b, 0x714d, 0x714f, 0x7150, 0x7151, 0x7152, 0x7153, 0x7154, 0x7155, 0x7156, 0x7157, 0x7158, 0x7159, 0x715a, 0x715b, 0x715d, 0x715f, 0x7160, 0x7161, 0x7162, 0x7163, 0x7165, 0x7169, 0x716a, 0x716b, 0x716c, 0x716d, 0x716f, 0x7170, 0x7171, 0x7174, 0x7175, 0x7176, 0x7177, 0x7179, 0x717b, 0x717c, 0x717e, 0x717f, 0x7180, 0x7181, 0x7182, 0x7183, 0x7185, 0x7186, 0x7187, 0x7188, 0x7189, 0x718b, 0x718c, 0x718d, 0x718e, 0x7190, 0x7191, 0x7192, 0x7193, 0x7195, 0x7196, 0x7197, 0x719a, 0x719b, 0x719c, 0x719d, 0x719e, 0x71a1, 0x71a2, 0x71a3, 0x71a4, 0x71a5, 0x71a6, 0x71a7, 0x71a9, 0x71aa, 0x71ab, 0x71ad, 0x71ae, 0x71af, 0x71b0, 0x71b1, 0x71b2, 0x71b4, 0x71b6, 0x71b7, 0x71b8, 0x71ba, 0x71bb, 0x71bc, 0x71bd, 0x71be, 0x71bf, 0x71c0, 0x71c1, 0x71c2, 0x71c4, 0x71c5, 0x71c6, 0x71c7, 0x71c8, 0x71c9, 0x71ca, 0x71cb, 0x71cc, 0x71cd, 0x71cf, 0x71d0, 0x71d1, 0x71d2, 0x71d3, /* 0xa0 */ 0x71d6, 0x71d7, 0x71d8, 0x71d9, 0x71da, 0x71db, 0x71dc, 0x71dd, 0x71de, 0x71df, 0x71e1, 0x71e2, 0x71e3, 0x71e4, 0x71e6, 0x71e8, 0x71e9, 0x71ea, 0x71eb, 0x71ec, 0x71ed, 0x71ef, 0x71f0, 0x71f1, 0x71f2, 0x71f3, 0x71f4, 0x71f5, 0x71f6, 0x71f7, 0x71f8, 0x71fa, 0x71fb, 0x71fc, 0x71fd, 0x71fe, 0x71ff, 0x7200, 0x7201, 0x7202, 0x7203, 0x7204, 0x7205, 0x7207, 0x7208, 0x7209, 0x720a, 0x720b, 0x720c, 0x720d, 0x720e, 0x720f, 0x7210, 0x7211, 0x7212, 0x7213, 0x7214, 0x7215, 0x7216, 0x7217, 0x7218, 0x7219, 0x721a, 0x721b, 0x721c, 0x721e, 0x721f, 0x7220, 0x7221, 0x7222, 0x7223, 0x7224, 0x7225, 0x7226, 0x7227, 0x7229, 0x722b, 0x722d, 0x722e, 0x722f, 0x7232, 0x7233, 0x7234, 0x723a, 0x723c, 0x723e, 0x7240, 0x7241, 0x7242, 0x7243, 0x7244, 0x7245, 0x7246, 0x7249, 0x724a, 0x724b, 0x724e, 0x724f, 0x7250, 0x7251, 0x7253, 0x7254, 0x7255, 0x7257, 0x7258, 0x725a, 0x725c, 0x725e, 0x7260, 0x7263, 0x7264, 0x7265, 0x7268, 0x726a, 0x726b, 0x726c, 0x726d, 0x7270, 0x7271, 0x7273, 0x7274, 0x7276, 0x7277, 0x7278, 0x727b, 0x727c, 0x727d, 0x7282, 0x7283, 0x7285, 0x7286, 0x7287, 0x7288, 0x7289, 0x728c, 0x728e, 0x7290, 0x7291, 0x7293, 0x7294, 0x7295, 0x7296, 0x7297, 0x7298, 0x7299, 0x729a, 0x729b, 0x729c, 0x729d, 0x729e, 0x72a0, 0x72a1, 0x72a2, 0x72a3, 0x72a4, 0x72a5, 0x72a6, 0x72a7, 0x72a8, 0x72a9, 0x72aa, 0x72ab, 0x72ae, 0x72b1, 0x72b2, 0x72b3, 0x72b5, 0x72ba, 0x72bb, 0x72bc, 0x72bd, 0x72be, 0x72bf, 0x72c0, 0x72c5, 0x72c6, 0x72c7, 0x72c9, 0x72ca, 0x72cb, 0x72cc, 0x72cf, 0x72d1, 0x72d3, 0x72d4, 0x72d5, 0x72d6, 0x72d8, 0x72da, 0x72db, /* 0xa1 */ 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x3000, 0x3001, 0x3002, 0x00b7, 0x02c9, 0x02c7, 0x00a8, 0x3003, 0x3005, 0x2014, 0xff5e, 0x2016, 0x2026, 0x2018, 0x2019, 0x201c, 0x201d, 0x3014, 0x3015, 0x3008, 0x3009, 0x300a, 0x300b, 0x300c, 0x300d, 0x300e, 0x300f, 0x3016, 0x3017, 0x3010, 0x3011, 0x00b1, 0x00d7, 0x00f7, 0x2236, 0x2227, 0x2228, 0x2211, 0x220f, 0x222a, 0x2229, 0x2208, 0x2237, 0x221a, 0x22a5, 0x2225, 0x2220, 0x2312, 0x2299, 0x222b, 0x222e, 0x2261, 0x224c, 0x2248, 0x223d, 0x221d, 0x2260, 0x226e, 0x226f, 0x2264, 0x2265, 0x221e, 0x2235, 0x2234, 0x2642, 0x2640, 0x00b0, 0x2032, 0x2033, 0x2103, 0xff04, 0x00a4, 0xffe0, 0xffe1, 0x2030, 0x00a7, 0x2116, 0x2606, 0x2605, 0x25cb, 0x25cf, 0x25ce, 0x25c7, 0x25c6, 0x25a1, 0x25a0, 0x25b3, 0x25b2, 0x203b, 0x2192, 0x2190, 0x2191, 0x2193, 0x3013, /* 0xa2 */ 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, 0x2178, 0x2179, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x2488, 0x2489, 0x248a, 0x248b, 0x248c, 0x248d, 0x248e, 0x248f, 0x2490, 0x2491, 0x2492, 0x2493, 0x2494, 0x2495, 0x2496, 0x2497, 0x2498, 0x2499, 0x249a, 0x249b, 0x2474, 0x2475, 0x2476, 0x2477, 0x2478, 0x2479, 0x247a, 0x247b, 0x247c, 0x247d, 0x247e, 0x247f, 0x2480, 0x2481, 0x2482, 0x2483, 0x2484, 0x2485, 0x2486, 0x2487, 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469, 0xfffd, 0xfffd, 0x3220, 0x3221, 0x3222, 0x3223, 0x3224, 0x3225, 0x3226, 0x3227, 0x3228, 0x3229, 0xfffd, 0xfffd, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, 0x216a, 0x216b, 0xfffd, 0xfffd, /* 0xa3 */ 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xff01, 0xff02, 0xff03, 0xffe5, 0xff05, 0xff06, 0xff07, 0xff08, 0xff09, 0xff0a, 0xff0b, 0xff0c, 0xff0d, 0xff0e, 0xff0f, 0xff10, 0xff11, 0xff12, 0xff13, 0xff14, 0xff15, 0xff16, 0xff17, 0xff18, 0xff19, 0xff1a, 0xff1b, 0xff1c, 0xff1d, 0xff1e, 0xff1f, 0xff20, 0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, 0xff28, 0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30, 0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38, 0xff39, 0xff3a, 0xff3b, 0xff3c, 0xff3d, 0xff3e, 0xff3f, 0xff40, 0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 0xff57, 0xff58, 0xff59, 0xff5a, 0xff5b, 0xff5c, 0xff5d, 0xffe3, /* 0xa4 */ 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048, 0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058, 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f, 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, 0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e, 0x306f, 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078, 0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e, 0x307f, 0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088, 0x3089, 0x308a, 0x308b, 0x308c, 0x308d, 0x308e, 0x308f, 0x3090, 0x3091, 0x3092, 0x3093, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0xa5 */ 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x30a1, 0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7, 0x30a8, 0x30a9, 0x30aa, 0x30ab, 0x30ac, 0x30ad, 0x30ae, 0x30af, 0x30b0, 0x30b1, 0x30b2, 0x30b3, 0x30b4, 0x30b5, 0x30b6, 0x30b7, 0x30b8, 0x30b9, 0x30ba, 0x30bb, 0x30bc, 0x30bd, 0x30be, 0x30bf, 0x30c0, 0x30c1, 0x30c2, 0x30c3, 0x30c4, 0x30c5, 0x30c6, 0x30c7, 0x30c8, 0x30c9, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf, 0x30d0, 0x30d1, 0x30d2, 0x30d3, 0x30d4, 0x30d5, 0x30d6, 0x30d7, 0x30d8, 0x30d9, 0x30da, 0x30db, 0x30dc, 0x30dd, 0x30de, 0x30df, 0x30e0, 0x30e1, 0x30e2, 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7, 0x30e8, 0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ee, 0x30ef, 0x30f0, 0x30f1, 0x30f2, 0x30f3, 0x30f4, 0x30f5, 0x30f6, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0xa6 */ 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, 0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfe35, 0xfe36, 0xfe39, 0xfe3a, 0xfe3f, 0xfe40, 0xfe3d, 0xfe3e, 0xfe41, 0xfe42, 0xfe43, 0xfe44, 0xfffd, 0xfffd, 0xfe3b, 0xfe3c, 0xfe37, 0xfe38, 0xfe31, 0xfffd, 0xfe33, 0xfe34, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0xa7 */ 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, 0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0436, 0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0xa8 */ 0x02ca, 0x02cb, 0x02d9, 0x2013, 0x2015, 0x2025, 0x2035, 0x2105, 0x2109, 0x2196, 0x2197, 0x2198, 0x2199, 0x2215, 0x221f, 0x2223, 0x2252, 0x2266, 0x2267, 0x22bf, 0x2550, 0x2551, 0x2552, 0x2553, 0x2554, 0x2555, 0x2556, 0x2557, 0x2558, 0x2559, 0x255a, 0x255b, 0x255c, 0x255d, 0x255e, 0x255f, 0x2560, 0x2561, 0x2562, 0x2563, 0x2564, 0x2565, 0x2566, 0x2567, 0x2568, 0x2569, 0x256a, 0x256b, 0x256c, 0x256d, 0x256e, 0x256f, 0x2570, 0x2571, 0x2572, 0x2573, 0x2581, 0x2582, 0x2583, 0x2584, 0x2585, 0x2586, 0x2587, 0x2588, 0x2589, 0x258a, 0x258b, 0x258c, 0x258d, 0x258e, 0x258f, 0x2593, 0x2594, 0x2595, 0x25bc, 0x25bd, 0x25e2, 0x25e3, 0x25e4, 0x25e5, 0x2609, 0x2295, 0x3012, 0x301d, 0x301e, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x0101, 0x00e1, 0x01ce, 0x00e0, 0x0113, 0x00e9, 0x011b, 0x00e8, 0x012b, 0x00ed, 0x01d0, 0x00ec, 0x014d, 0x00f3, 0x01d2, 0x00f2, 0x016b, 0x00fa, 0x01d4, 0x00f9, 0x01d6, 0x01d8, 0x01da, 0x01dc, 0x00fc, 0x00ea, 0x0251, 0xfffd, 0x0144, 0x0148, 0xfffd, 0x0261, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x3105, 0x3106, 0x3107, 0x3108, 0x3109, 0x310a, 0x310b, 0x310c, 0x310d, 0x310e, 0x310f, 0x3110, 0x3111, 0x3112, 0x3113, 0x3114, 0x3115, 0x3116, 0x3117, 0x3118, 0x3119, 0x311a, 0x311b, 0x311c, 0x311d, 0x311e, 0x311f, 0x3120, 0x3121, 0x3122, 0x3123, 0x3124, 0x3125, 0x3126, 0x3127, 0x3128, 0x3129, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0xa9 */ 0x3021, 0x3022, 0x3023, 0x3024, 0x3025, 0x3026, 0x3027, 0x3028, 0x3029, 0x32a3, 0x338e, 0x338f, 0x339c, 0x339d, 0x339e, 0x33a1, 0x33c4, 0x33ce, 0x33d1, 0x33d2, 0x33d5, 0xfe30, 0xffe2, 0xffe4, 0xfffd, 0x2121, 0x3231, 0xfffd, 0x2010, 0xfffd, 0xfffd, 0xfffd, 0x30fc, 0x309b, 0x309c, 0x30fd, 0x30fe, 0x3006, 0x309d, 0x309e, 0xfe49, 0xfe4a, 0xfe4b, 0xfe4c, 0xfe4d, 0xfe4e, 0xfe4f, 0xfe50, 0xfe51, 0xfe52, 0xfe54, 0xfe55, 0xfe56, 0xfe57, 0xfe59, 0xfe5a, 0xfe5b, 0xfe5c, 0xfe5d, 0xfe5e, 0xfe5f, 0xfe60, 0xfe61, 0xfe62, 0xfe63, 0xfe64, 0xfe65, 0xfe66, 0xfe68, 0xfe69, 0xfe6a, 0xfe6b, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x3007, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x2500, 0x2501, 0x2502, 0x2503, 0x2504, 0x2505, 0x2506, 0x2507, 0x2508, 0x2509, 0x250a, 0x250b, 0x250c, 0x250d, 0x250e, 0x250f, 0x2510, 0x2511, 0x2512, 0x2513, 0x2514, 0x2515, 0x2516, 0x2517, 0x2518, 0x2519, 0x251a, 0x251b, 0x251c, 0x251d, 0x251e, 0x251f, 0x2520, 0x2521, 0x2522, 0x2523, 0x2524, 0x2525, 0x2526, 0x2527, 0x2528, 0x2529, 0x252a, 0x252b, 0x252c, 0x252d, 0x252e, 0x252f, 0x2530, 0x2531, 0x2532, 0x2533, 0x2534, 0x2535, 0x2536, 0x2537, 0x2538, 0x2539, 0x253a, 0x253b, 0x253c, 0x253d, 0x253e, 0x253f, 0x2540, 0x2541, 0x2542, 0x2543, 0x2544, 0x2545, 0x2546, 0x2547, 0x2548, 0x2549, 0x254a, 0x254b, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0xaa */ 0x72dc, 0x72dd, 0x72df, 0x72e2, 0x72e3, 0x72e4, 0x72e5, 0x72e6, 0x72e7, 0x72ea, 0x72eb, 0x72f5, 0x72f6, 0x72f9, 0x72fd, 0x72fe, 0x72ff, 0x7300, 0x7302, 0x7304, 0x7305, 0x7306, 0x7307, 0x7308, 0x7309, 0x730b, 0x730c, 0x730d, 0x730f, 0x7310, 0x7311, 0x7312, 0x7314, 0x7318, 0x7319, 0x731a, 0x731f, 0x7320, 0x7323, 0x7324, 0x7326, 0x7327, 0x7328, 0x732d, 0x732f, 0x7330, 0x7332, 0x7333, 0x7335, 0x7336, 0x733a, 0x733b, 0x733c, 0x733d, 0x7340, 0x7341, 0x7342, 0x7343, 0x7344, 0x7345, 0x7346, 0x7347, 0x7348, 0x7349, 0x734a, 0x734b, 0x734c, 0x734e, 0x734f, 0x7351, 0x7353, 0x7354, 0x7355, 0x7356, 0x7358, 0x7359, 0x735a, 0x735b, 0x735c, 0x735d, 0x735e, 0x735f, 0x7361, 0x7362, 0x7363, 0x7364, 0x7365, 0x7366, 0x7367, 0x7368, 0x7369, 0x736a, 0x736b, 0x736e, 0x7370, 0x7371, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0xab */ 0x7372, 0x7373, 0x7374, 0x7375, 0x7376, 0x7377, 0x7378, 0x7379, 0x737a, 0x737b, 0x737c, 0x737d, 0x737f, 0x7380, 0x7381, 0x7382, 0x7383, 0x7385, 0x7386, 0x7388, 0x738a, 0x738c, 0x738d, 0x738f, 0x7390, 0x7392, 0x7393, 0x7394, 0x7395, 0x7397, 0x7398, 0x7399, 0x739a, 0x739c, 0x739d, 0x739e, 0x73a0, 0x73a1, 0x73a3, 0x73a4, 0x73a5, 0x73a6, 0x73a7, 0x73a8, 0x73aa, 0x73ac, 0x73ad, 0x73b1, 0x73b4, 0x73b5, 0x73b6, 0x73b8, 0x73b9, 0x73bc, 0x73bd, 0x73be, 0x73bf, 0x73c1, 0x73c3, 0x73c4, 0x73c5, 0x73c6, 0x73c7, 0x73cb, 0x73cc, 0x73ce, 0x73d2, 0x73d3, 0x73d4, 0x73d5, 0x73d6, 0x73d7, 0x73d8, 0x73da, 0x73db, 0x73dc, 0x73dd, 0x73df, 0x73e1, 0x73e2, 0x73e3, 0x73e4, 0x73e6, 0x73e8, 0x73ea, 0x73eb, 0x73ec, 0x73ee, 0x73ef, 0x73f0, 0x73f1, 0x73f3, 0x73f4, 0x73f5, 0x73f6, 0x73f7, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0xac */ 0x73f8, 0x73f9, 0x73fa, 0x73fb, 0x73fc, 0x73fd, 0x73fe, 0x73ff, 0x7400, 0x7401, 0x7402, 0x7404, 0x7407, 0x7408, 0x740b, 0x740c, 0x740d, 0x740e, 0x7411, 0x7412, 0x7413, 0x7414, 0x7415, 0x7416, 0x7417, 0x7418, 0x7419, 0x741c, 0x741d, 0x741e, 0x741f, 0x7420, 0x7421, 0x7423, 0x7424, 0x7427, 0x7429, 0x742b, 0x742d, 0x742f, 0x7431, 0x7432, 0x7437, 0x7438, 0x7439, 0x743a, 0x743b, 0x743d, 0x743e, 0x743f, 0x7440, 0x7442, 0x7443, 0x7444, 0x7445, 0x7446, 0x7447, 0x7448, 0x7449, 0x744a, 0x744b, 0x744c, 0x744d, 0x744e, 0x744f, 0x7450, 0x7451, 0x7452, 0x7453, 0x7454, 0x7456, 0x7458, 0x745d, 0x7460, 0x7461, 0x7462, 0x7463, 0x7464, 0x7465, 0x7466, 0x7467, 0x7468, 0x7469, 0x746a, 0x746b, 0x746c, 0x746e, 0x746f, 0x7471, 0x7472, 0x7473, 0x7474, 0x7475, 0x7478, 0x7479, 0x747a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0xad */ 0x747b, 0x747c, 0x747d, 0x747f, 0x7482, 0x7484, 0x7485, 0x7486, 0x7488, 0x7489, 0x748a, 0x748c, 0x748d, 0x748f, 0x7491, 0x7492, 0x7493, 0x7494, 0x7495, 0x7496, 0x7497, 0x7498, 0x7499, 0x749a, 0x749b, 0x749d, 0x749f, 0x74a0, 0x74a1, 0x74a2, 0x74a3, 0x74a4, 0x74a5, 0x74a6, 0x74aa, 0x74ab, 0x74ac, 0x74ad, 0x74ae, 0x74af, 0x74b0, 0x74b1, 0x74b2, 0x74b3, 0x74b4, 0x74b5, 0x74b6, 0x74b7, 0x74b8, 0x74b9, 0x74bb, 0x74bc, 0x74bd, 0x74be, 0x74bf, 0x74c0, 0x74c1, 0x74c2, 0x74c3, 0x74c4, 0x74c5, 0x74c6, 0x74c7, 0x74c8, 0x74c9, 0x74ca, 0x74cb, 0x74cc, 0x74cd, 0x74ce, 0x74cf, 0x74d0, 0x74d1, 0x74d3, 0x74d4, 0x74d5, 0x74d6, 0x74d7, 0x74d8, 0x74d9, 0x74da, 0x74db, 0x74dd, 0x74df, 0x74e1, 0x74e5, 0x74e7, 0x74e8, 0x74e9, 0x74ea, 0x74eb, 0x74ec, 0x74ed, 0x74f0, 0x74f1, 0x74f2, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0xae */ 0x74f3, 0x74f5, 0x74f8, 0x74f9, 0x74fa, 0x74fb, 0x74fc, 0x74fd, 0x74fe, 0x7500, 0x7501, 0x7502, 0x7503, 0x7505, 0x7506, 0x7507, 0x7508, 0x7509, 0x750a, 0x750b, 0x750c, 0x750e, 0x7510, 0x7512, 0x7514, 0x7515, 0x7516, 0x7517, 0x751b, 0x751d, 0x751e, 0x7520, 0x7521, 0x7522, 0x7523, 0x7524, 0x7526, 0x7527, 0x752a, 0x752e, 0x7534, 0x7536, 0x7539, 0x753c, 0x753d, 0x753f, 0x7541, 0x7542, 0x7543, 0x7544, 0x7546, 0x7547, 0x7549, 0x754a, 0x754d, 0x7550, 0x7551, 0x7552, 0x7553, 0x7555, 0x7556, 0x7557, 0x7558, 0x755d, 0x755e, 0x755f, 0x7560, 0x7561, 0x7562, 0x7563, 0x7564, 0x7567, 0x7568, 0x7569, 0x756b, 0x756c, 0x756d, 0x756e, 0x756f, 0x7570, 0x7571, 0x7573, 0x7575, 0x7576, 0x7577, 0x757a, 0x757b, 0x757c, 0x757d, 0x757e, 0x7580, 0x7581, 0x7582, 0x7584, 0x7585, 0x7587, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0xaf */ 0x7588, 0x7589, 0x758a, 0x758c, 0x758d, 0x758e, 0x7590, 0x7593, 0x7595, 0x7598, 0x759b, 0x759c, 0x759e, 0x75a2, 0x75a6, 0x75a7, 0x75a8, 0x75a9, 0x75aa, 0x75ad, 0x75b6, 0x75b7, 0x75ba, 0x75bb, 0x75bf, 0x75c0, 0x75c1, 0x75c6, 0x75cb, 0x75cc, 0x75ce, 0x75cf, 0x75d0, 0x75d1, 0x75d3, 0x75d7, 0x75d9, 0x75da, 0x75dc, 0x75dd, 0x75df, 0x75e0, 0x75e1, 0x75e5, 0x75e9, 0x75ec, 0x75ed, 0x75ee, 0x75ef, 0x75f2, 0x75f3, 0x75f5, 0x75f6, 0x75f7, 0x75f8, 0x75fa, 0x75fb, 0x75fd, 0x75fe, 0x7602, 0x7604, 0x7606, 0x7607, 0x7608, 0x7609, 0x760b, 0x760d, 0x760e, 0x760f, 0x7611, 0x7612, 0x7613, 0x7614, 0x7616, 0x761a, 0x761c, 0x761d, 0x761e, 0x7621, 0x7623, 0x7627, 0x7628, 0x762c, 0x762e, 0x762f, 0x7631, 0x7632, 0x7636, 0x7637, 0x7639, 0x763a, 0x763b, 0x763d, 0x7641, 0x7642, 0x7644, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0xb0 */ 0x7645, 0x7646, 0x7647, 0x7648, 0x7649, 0x764a, 0x764b, 0x764e, 0x764f, 0x7650, 0x7651, 0x7652, 0x7653, 0x7655, 0x7657, 0x7658, 0x7659, 0x765a, 0x765b, 0x765d, 0x765f, 0x7660, 0x7661, 0x7662, 0x7664, 0x7665, 0x7666, 0x7667, 0x7668, 0x7669, 0x766a, 0x766c, 0x766d, 0x766e, 0x7670, 0x7671, 0x7672, 0x7673, 0x7674, 0x7675, 0x7676, 0x7677, 0x7679, 0x767a, 0x767c, 0x767f, 0x7680, 0x7681, 0x7683, 0x7685, 0x7689, 0x768a, 0x768c, 0x768d, 0x768f, 0x7690, 0x7692, 0x7694, 0x7695, 0x7697, 0x7698, 0x769a, 0x769b, 0x769c, 0x769d, 0x769e, 0x769f, 0x76a0, 0x76a1, 0x76a2, 0x76a3, 0x76a5, 0x76a6, 0x76a7, 0x76a8, 0x76a9, 0x76aa, 0x76ab, 0x76ac, 0x76ad, 0x76af, 0x76b0, 0x76b3, 0x76b5, 0x76b6, 0x76b7, 0x76b8, 0x76b9, 0x76ba, 0x76bb, 0x76bc, 0x76bd, 0x76be, 0x76c0, 0x76c1, 0x76c3, 0x554a, 0x963f, 0x57c3, 0x6328, 0x54ce, 0x5509, 0x54c0, 0x7691, 0x764c, 0x853c, 0x77ee, 0x827e, 0x788d, 0x7231, 0x9698, 0x978d, 0x6c28, 0x5b89, 0x4ffa, 0x6309, 0x6697, 0x5cb8, 0x80fa, 0x6848, 0x80ae, 0x6602, 0x76ce, 0x51f9, 0x6556, 0x71ac, 0x7ff1, 0x8884, 0x50b2, 0x5965, 0x61ca, 0x6fb3, 0x82ad, 0x634c, 0x6252, 0x53ed, 0x5427, 0x7b06, 0x516b, 0x75a4, 0x5df4, 0x62d4, 0x8dcb, 0x9776, 0x628a, 0x8019, 0x575d, 0x9738, 0x7f62, 0x7238, 0x767d, 0x67cf, 0x767e, 0x6446, 0x4f70, 0x8d25, 0x62dc, 0x7a17, 0x6591, 0x73ed, 0x642c, 0x6273, 0x822c, 0x9881, 0x677f, 0x7248, 0x626e, 0x62cc, 0x4f34, 0x74e3, 0x534a, 0x529e, 0x7eca, 0x90a6, 0x5e2e, 0x6886, 0x699c, 0x8180, 0x7ed1, 0x68d2, 0x78c5, 0x868c, 0x9551, 0x508d, 0x8c24, 0x82de, 0x80de, 0x5305, 0x8912, 0x5265, /* 0xb1 */ 0x76c4, 0x76c7, 0x76c9, 0x76cb, 0x76cc, 0x76d3, 0x76d5, 0x76d9, 0x76da, 0x76dc, 0x76dd, 0x76de, 0x76e0, 0x76e1, 0x76e2, 0x76e3, 0x76e4, 0x76e6, 0x76e7, 0x76e8, 0x76e9, 0x76ea, 0x76eb, 0x76ec, 0x76ed, 0x76f0, 0x76f3, 0x76f5, 0x76f6, 0x76f7, 0x76fa, 0x76fb, 0x76fd, 0x76ff, 0x7700, 0x7702, 0x7703, 0x7705, 0x7706, 0x770a, 0x770c, 0x770e, 0x770f, 0x7710, 0x7711, 0x7712, 0x7713, 0x7714, 0x7715, 0x7716, 0x7717, 0x7718, 0x771b, 0x771c, 0x771d, 0x771e, 0x7721, 0x7723, 0x7724, 0x7725, 0x7727, 0x772a, 0x772b, 0x772c, 0x772e, 0x7730, 0x7731, 0x7732, 0x7733, 0x7734, 0x7739, 0x773b, 0x773d, 0x773e, 0x773f, 0x7742, 0x7744, 0x7745, 0x7746, 0x7748, 0x7749, 0x774a, 0x774b, 0x774c, 0x774d, 0x774e, 0x774f, 0x7752, 0x7753, 0x7754, 0x7755, 0x7756, 0x7757, 0x7758, 0x7759, 0x775c, 0x8584, 0x96f9, 0x4fdd, 0x5821, 0x9971, 0x5b9d, 0x62b1, 0x62a5, 0x66b4, 0x8c79, 0x9c8d, 0x7206, 0x676f, 0x7891, 0x60b2, 0x5351, 0x5317, 0x8f88, 0x80cc, 0x8d1d, 0x94a1, 0x500d, 0x72c8, 0x5907, 0x60eb, 0x7119, 0x88ab, 0x5954, 0x82ef, 0x672c, 0x7b28, 0x5d29, 0x7ef7, 0x752d, 0x6cf5, 0x8e66, 0x8ff8, 0x903c, 0x9f3b, 0x6bd4, 0x9119, 0x7b14, 0x5f7c, 0x78a7, 0x84d6, 0x853d, 0x6bd5, 0x6bd9, 0x6bd6, 0x5e01, 0x5e87, 0x75f9, 0x95ed, 0x655d, 0x5f0a, 0x5fc5, 0x8f9f, 0x58c1, 0x81c2, 0x907f, 0x965b, 0x97ad, 0x8fb9, 0x7f16, 0x8d2c, 0x6241, 0x4fbf, 0x53d8, 0x535e, 0x8fa8, 0x8fa9, 0x8fab, 0x904d, 0x6807, 0x5f6a, 0x8198, 0x8868, 0x9cd6, 0x618b, 0x522b, 0x762a, 0x5f6c, 0x658c, 0x6fd2, 0x6ee8, 0x5bbe, 0x6448, 0x5175, 0x51b0, 0x67c4, 0x4e19, 0x79c9, 0x997c, 0x70b3, /* 0xb2 */ 0x775d, 0x775e, 0x775f, 0x7760, 0x7764, 0x7767, 0x7769, 0x776a, 0x776d, 0x776e, 0x776f, 0x7770, 0x7771, 0x7772, 0x7773, 0x7774, 0x7775, 0x7776, 0x7777, 0x7778, 0x777a, 0x777b, 0x777c, 0x7781, 0x7782, 0x7783, 0x7786, 0x7787, 0x7788, 0x7789, 0x778a, 0x778b, 0x778f, 0x7790, 0x7793, 0x7794, 0x7795, 0x7796, 0x7797, 0x7798, 0x7799, 0x779a, 0x779b, 0x779c, 0x779d, 0x779e, 0x77a1, 0x77a3, 0x77a4, 0x77a6, 0x77a8, 0x77ab, 0x77ad, 0x77ae, 0x77af, 0x77b1, 0x77b2, 0x77b4, 0x77b6, 0x77b7, 0x77b8, 0x77b9, 0x77ba, 0x77bc, 0x77be, 0x77c0, 0x77c1, 0x77c2, 0x77c3, 0x77c4, 0x77c5, 0x77c6, 0x77c7, 0x77c8, 0x77c9, 0x77ca, 0x77cb, 0x77cc, 0x77ce, 0x77cf, 0x77d0, 0x77d1, 0x77d2, 0x77d3, 0x77d4, 0x77d5, 0x77d6, 0x77d8, 0x77d9, 0x77da, 0x77dd, 0x77de, 0x77df, 0x77e0, 0x77e1, 0x77e4, 0x75c5, 0x5e76, 0x73bb, 0x83e0, 0x64ad, 0x62e8, 0x94b5, 0x6ce2, 0x535a, 0x52c3, 0x640f, 0x94c2, 0x7b94, 0x4f2f, 0x5e1b, 0x8236, 0x8116, 0x818a, 0x6e24, 0x6cca, 0x9a73, 0x6355, 0x535c, 0x54fa, 0x8865, 0x57e0, 0x4e0d, 0x5e03, 0x6b65, 0x7c3f, 0x90e8, 0x6016, 0x64e6, 0x731c, 0x88c1, 0x6750, 0x624d, 0x8d22, 0x776c, 0x8e29, 0x91c7, 0x5f69, 0x83dc, 0x8521, 0x9910, 0x53c2, 0x8695, 0x6b8b, 0x60ed, 0x60e8, 0x707f, 0x82cd, 0x8231, 0x4ed3, 0x6ca7, 0x85cf, 0x64cd, 0x7cd9, 0x69fd, 0x66f9, 0x8349, 0x5395, 0x7b56, 0x4fa7, 0x518c, 0x6d4b, 0x5c42, 0x8e6d, 0x63d2, 0x53c9, 0x832c, 0x8336, 0x67e5, 0x78b4, 0x643d, 0x5bdf, 0x5c94, 0x5dee, 0x8be7, 0x62c6, 0x67f4, 0x8c7a, 0x6400, 0x63ba, 0x8749, 0x998b, 0x8c17, 0x7f20, 0x94f2, 0x4ea7, 0x9610, 0x98a4, 0x660c, 0x7316, /* 0xb3 */ 0x77e6, 0x77e8, 0x77ea, 0x77ef, 0x77f0, 0x77f1, 0x77f2, 0x77f4, 0x77f5, 0x77f7, 0x77f9, 0x77fa, 0x77fb, 0x77fc, 0x7803, 0x7804, 0x7805, 0x7806, 0x7807, 0x7808, 0x780a, 0x780b, 0x780e, 0x780f, 0x7810, 0x7813, 0x7815, 0x7819, 0x781b, 0x781e, 0x7820, 0x7821, 0x7822, 0x7824, 0x7828, 0x782a, 0x782b, 0x782e, 0x782f, 0x7831, 0x7832, 0x7833, 0x7835, 0x7836, 0x783d, 0x783f, 0x7841, 0x7842, 0x7843, 0x7844, 0x7846, 0x7848, 0x7849, 0x784a, 0x784b, 0x784d, 0x784f, 0x7851, 0x7853, 0x7854, 0x7858, 0x7859, 0x785a, 0x785b, 0x785c, 0x785e, 0x785f, 0x7860, 0x7861, 0x7862, 0x7863, 0x7864, 0x7865, 0x7866, 0x7867, 0x7868, 0x7869, 0x786f, 0x7870, 0x7871, 0x7872, 0x7873, 0x7874, 0x7875, 0x7876, 0x7878, 0x7879, 0x787a, 0x787b, 0x787d, 0x787e, 0x787f, 0x7880, 0x7881, 0x7882, 0x7883, 0x573a, 0x5c1d, 0x5e38, 0x957f, 0x507f, 0x80a0, 0x5382, 0x655e, 0x7545, 0x5531, 0x5021, 0x8d85, 0x6284, 0x949e, 0x671d, 0x5632, 0x6f6e, 0x5de2, 0x5435, 0x7092, 0x8f66, 0x626f, 0x64a4, 0x63a3, 0x5f7b, 0x6f88, 0x90f4, 0x81e3, 0x8fb0, 0x5c18, 0x6668, 0x5ff1, 0x6c89, 0x9648, 0x8d81, 0x886c, 0x6491, 0x79f0, 0x57ce, 0x6a59, 0x6210, 0x5448, 0x4e58, 0x7a0b, 0x60e9, 0x6f84, 0x8bda, 0x627f, 0x901e, 0x9a8b, 0x79e4, 0x5403, 0x75f4, 0x6301, 0x5319, 0x6c60, 0x8fdf, 0x5f1b, 0x9a70, 0x803b, 0x9f7f, 0x4f88, 0x5c3a, 0x8d64, 0x7fc5, 0x65a5, 0x70bd, 0x5145, 0x51b2, 0x866b, 0x5d07, 0x5ba0, 0x62bd, 0x916c, 0x7574, 0x8e0c, 0x7a20, 0x6101, 0x7b79, 0x4ec7, 0x7ef8, 0x7785, 0x4e11, 0x81ed, 0x521d, 0x51fa, 0x6a71, 0x53a8, 0x8e87, 0x9504, 0x96cf, 0x6ec1, 0x9664, 0x695a, /* 0xb4 */ 0x7884, 0x7885, 0x7886, 0x7888, 0x788a, 0x788b, 0x788f, 0x7890, 0x7892, 0x7894, 0x7895, 0x7896, 0x7899, 0x789d, 0x789e, 0x78a0, 0x78a2, 0x78a4, 0x78a6, 0x78a8, 0x78a9, 0x78aa, 0x78ab, 0x78ac, 0x78ad, 0x78ae, 0x78af, 0x78b5, 0x78b6, 0x78b7, 0x78b8, 0x78ba, 0x78bb, 0x78bc, 0x78bd, 0x78bf, 0x78c0, 0x78c2, 0x78c3, 0x78c4, 0x78c6, 0x78c7, 0x78c8, 0x78cc, 0x78cd, 0x78ce, 0x78cf, 0x78d1, 0x78d2, 0x78d3, 0x78d6, 0x78d7, 0x78d8, 0x78da, 0x78db, 0x78dc, 0x78dd, 0x78de, 0x78df, 0x78e0, 0x78e1, 0x78e2, 0x78e3, 0x78e4, 0x78e5, 0x78e6, 0x78e7, 0x78e9, 0x78ea, 0x78eb, 0x78ed, 0x78ee, 0x78ef, 0x78f0, 0x78f1, 0x78f3, 0x78f5, 0x78f6, 0x78f8, 0x78f9, 0x78fb, 0x78fc, 0x78fd, 0x78fe, 0x78ff, 0x7900, 0x7902, 0x7903, 0x7904, 0x7906, 0x7907, 0x7908, 0x7909, 0x790a, 0x790b, 0x790c, 0x7840, 0x50a8, 0x77d7, 0x6410, 0x89e6, 0x5904, 0x63e3, 0x5ddd, 0x7a7f, 0x693d, 0x4f20, 0x8239, 0x5598, 0x4e32, 0x75ae, 0x7a97, 0x5e62, 0x5e8a, 0x95ef, 0x521b, 0x5439, 0x708a, 0x6376, 0x9524, 0x5782, 0x6625, 0x693f, 0x9187, 0x5507, 0x6df3, 0x7eaf, 0x8822, 0x6233, 0x7ef0, 0x75b5, 0x8328, 0x78c1, 0x96cc, 0x8f9e, 0x6148, 0x74f7, 0x8bcd, 0x6b64, 0x523a, 0x8d50, 0x6b21, 0x806a, 0x8471, 0x56f1, 0x5306, 0x4ece, 0x4e1b, 0x51d1, 0x7c97, 0x918b, 0x7c07, 0x4fc3, 0x8e7f, 0x7be1, 0x7a9c, 0x6467, 0x5d14, 0x50ac, 0x8106, 0x7601, 0x7cb9, 0x6dec, 0x7fe0, 0x6751, 0x5b58, 0x5bf8, 0x78cb, 0x64ae, 0x6413, 0x63aa, 0x632b, 0x9519, 0x642d, 0x8fbe, 0x7b54, 0x7629, 0x6253, 0x5927, 0x5446, 0x6b79, 0x50a3, 0x6234, 0x5e26, 0x6b86, 0x4ee3, 0x8d37, 0x888b, 0x5f85, 0x902e, /* 0xb5 */ 0x790d, 0x790e, 0x790f, 0x7910, 0x7911, 0x7912, 0x7914, 0x7915, 0x7916, 0x7917, 0x7918, 0x7919, 0x791a, 0x791b, 0x791c, 0x791d, 0x791f, 0x7920, 0x7921, 0x7922, 0x7923, 0x7925, 0x7926, 0x7927, 0x7928, 0x7929, 0x792a, 0x792b, 0x792c, 0x792d, 0x792e, 0x792f, 0x7930, 0x7931, 0x7932, 0x7933, 0x7935, 0x7936, 0x7937, 0x7938, 0x7939, 0x793d, 0x793f, 0x7942, 0x7943, 0x7944, 0x7945, 0x7947, 0x794a, 0x794b, 0x794c, 0x794d, 0x794e, 0x794f, 0x7950, 0x7951, 0x7952, 0x7954, 0x7955, 0x7958, 0x7959, 0x7961, 0x7963, 0x7964, 0x7966, 0x7969, 0x796a, 0x796b, 0x796c, 0x796e, 0x7970, 0x7971, 0x7972, 0x7973, 0x7974, 0x7975, 0x7976, 0x7979, 0x797b, 0x797c, 0x797d, 0x797e, 0x797f, 0x7982, 0x7983, 0x7986, 0x7987, 0x7988, 0x7989, 0x798b, 0x798c, 0x798d, 0x798e, 0x7990, 0x7991, 0x7992, 0x6020, 0x803d, 0x62c5, 0x4e39, 0x5355, 0x90f8, 0x63b8, 0x80c6, 0x65e6, 0x6c2e, 0x4f46, 0x60ee, 0x6de1, 0x8bde, 0x5f39, 0x86cb, 0x5f53, 0x6321, 0x515a, 0x8361, 0x6863, 0x5200, 0x6363, 0x8e48, 0x5012, 0x5c9b, 0x7977, 0x5bfc, 0x5230, 0x7a3b, 0x60bc, 0x9053, 0x76d7, 0x5fb7, 0x5f97, 0x7684, 0x8e6c, 0x706f, 0x767b, 0x7b49, 0x77aa, 0x51f3, 0x9093, 0x5824, 0x4f4e, 0x6ef4, 0x8fea, 0x654c, 0x7b1b, 0x72c4, 0x6da4, 0x7fdf, 0x5ae1, 0x62b5, 0x5e95, 0x5730, 0x8482, 0x7b2c, 0x5e1d, 0x5f1f, 0x9012, 0x7f14, 0x98a0, 0x6382, 0x6ec7, 0x7898, 0x70b9, 0x5178, 0x975b, 0x57ab, 0x7535, 0x4f43, 0x7538, 0x5e97, 0x60e6, 0x5960, 0x6dc0, 0x6bbf, 0x7889, 0x53fc, 0x96d5, 0x51cb, 0x5201, 0x6389, 0x540a, 0x9493, 0x8c03, 0x8dcc, 0x7239, 0x789f, 0x8776, 0x8fed, 0x8c0d, 0x53e0, /* 0xb6 */ 0x7993, 0x7994, 0x7995, 0x7996, 0x7997, 0x7998, 0x7999, 0x799b, 0x799c, 0x799d, 0x799e, 0x799f, 0x79a0, 0x79a1, 0x79a2, 0x79a3, 0x79a4, 0x79a5, 0x79a6, 0x79a8, 0x79a9, 0x79aa, 0x79ab, 0x79ac, 0x79ad, 0x79ae, 0x79af, 0x79b0, 0x79b1, 0x79b2, 0x79b4, 0x79b5, 0x79b6, 0x79b7, 0x79b8, 0x79bc, 0x79bf, 0x79c2, 0x79c4, 0x79c5, 0x79c7, 0x79c8, 0x79ca, 0x79cc, 0x79ce, 0x79cf, 0x79d0, 0x79d3, 0x79d4, 0x79d6, 0x79d7, 0x79d9, 0x79da, 0x79db, 0x79dc, 0x79dd, 0x79de, 0x79e0, 0x79e1, 0x79e2, 0x79e5, 0x79e8, 0x79ea, 0x79ec, 0x79ee, 0x79f1, 0x79f2, 0x79f3, 0x79f4, 0x79f5, 0x79f6, 0x79f7, 0x79f9, 0x79fa, 0x79fc, 0x79fe, 0x79ff, 0x7a01, 0x7a04, 0x7a05, 0x7a07, 0x7a08, 0x7a09, 0x7a0a, 0x7a0c, 0x7a0f, 0x7a10, 0x7a11, 0x7a12, 0x7a13, 0x7a15, 0x7a16, 0x7a18, 0x7a19, 0x7a1b, 0x7a1c, 0x4e01, 0x76ef, 0x53ee, 0x9489, 0x9876, 0x9f0e, 0x952d, 0x5b9a, 0x8ba2, 0x4e22, 0x4e1c, 0x51ac, 0x8463, 0x61c2, 0x52a8, 0x680b, 0x4f97, 0x606b, 0x51bb, 0x6d1e, 0x515c, 0x6296, 0x6597, 0x9661, 0x8c46, 0x9017, 0x75d8, 0x90fd, 0x7763, 0x6bd2, 0x728a, 0x72ec, 0x8bfb, 0x5835, 0x7779, 0x8d4c, 0x675c, 0x9540, 0x809a, 0x5ea6, 0x6e21, 0x5992, 0x7aef, 0x77ed, 0x953b, 0x6bb5, 0x65ad, 0x7f0e, 0x5806, 0x5151, 0x961f, 0x5bf9, 0x58a9, 0x5428, 0x8e72, 0x6566, 0x987f, 0x56e4, 0x949d, 0x76fe, 0x9041, 0x6387, 0x54c6, 0x591a, 0x593a, 0x579b, 0x8eb2, 0x6735, 0x8dfa, 0x8235, 0x5241, 0x60f0, 0x5815, 0x86fe, 0x5ce8, 0x9e45, 0x4fc4, 0x989d, 0x8bb9, 0x5a25, 0x6076, 0x5384, 0x627c, 0x904f, 0x9102, 0x997f, 0x6069, 0x800c, 0x513f, 0x8033, 0x5c14, 0x9975, 0x6d31, 0x4e8c, /* 0xb7 */ 0x7a1d, 0x7a1f, 0x7a21, 0x7a22, 0x7a24, 0x7a25, 0x7a26, 0x7a27, 0x7a28, 0x7a29, 0x7a2a, 0x7a2b, 0x7a2c, 0x7a2d, 0x7a2e, 0x7a2f, 0x7a30, 0x7a31, 0x7a32, 0x7a34, 0x7a35, 0x7a36, 0x7a38, 0x7a3a, 0x7a3e, 0x7a40, 0x7a41, 0x7a42, 0x7a43, 0x7a44, 0x7a45, 0x7a47, 0x7a48, 0x7a49, 0x7a4a, 0x7a4b, 0x7a4c, 0x7a4d, 0x7a4e, 0x7a4f, 0x7a50, 0x7a52, 0x7a53, 0x7a54, 0x7a55, 0x7a56, 0x7a58, 0x7a59, 0x7a5a, 0x7a5b, 0x7a5c, 0x7a5d, 0x7a5e, 0x7a5f, 0x7a60, 0x7a61, 0x7a62, 0x7a63, 0x7a64, 0x7a65, 0x7a66, 0x7a67, 0x7a68, 0x7a69, 0x7a6a, 0x7a6b, 0x7a6c, 0x7a6d, 0x7a6e, 0x7a6f, 0x7a71, 0x7a72, 0x7a73, 0x7a75, 0x7a7b, 0x7a7c, 0x7a7d, 0x7a7e, 0x7a82, 0x7a85, 0x7a87, 0x7a89, 0x7a8a, 0x7a8b, 0x7a8c, 0x7a8e, 0x7a8f, 0x7a90, 0x7a93, 0x7a94, 0x7a99, 0x7a9a, 0x7a9b, 0x7a9e, 0x7aa1, 0x7aa2, 0x8d30, 0x53d1, 0x7f5a, 0x7b4f, 0x4f10, 0x4e4f, 0x9600, 0x6cd5, 0x73d0, 0x85e9, 0x5e06, 0x756a, 0x7ffb, 0x6a0a, 0x77fe, 0x9492, 0x7e41, 0x51e1, 0x70e6, 0x53cd, 0x8fd4, 0x8303, 0x8d29, 0x72af, 0x996d, 0x6cdb, 0x574a, 0x82b3, 0x65b9, 0x80aa, 0x623f, 0x9632, 0x59a8, 0x4eff, 0x8bbf, 0x7eba, 0x653e, 0x83f2, 0x975e, 0x5561, 0x98de, 0x80a5, 0x532a, 0x8bfd, 0x5420, 0x80ba, 0x5e9f, 0x6cb8, 0x8d39, 0x82ac, 0x915a, 0x5429, 0x6c1b, 0x5206, 0x7eb7, 0x575f, 0x711a, 0x6c7e, 0x7c89, 0x594b, 0x4efd, 0x5fff, 0x6124, 0x7caa, 0x4e30, 0x5c01, 0x67ab, 0x8702, 0x5cf0, 0x950b, 0x98ce, 0x75af, 0x70fd, 0x9022, 0x51af, 0x7f1d, 0x8bbd, 0x5949, 0x51e4, 0x4f5b, 0x5426, 0x592b, 0x6577, 0x80a4, 0x5b75, 0x6276, 0x62c2, 0x8f90, 0x5e45, 0x6c1f, 0x7b26, 0x4f0f, 0x4fd8, 0x670d, /* 0xb8 */ 0x7aa3, 0x7aa4, 0x7aa7, 0x7aa9, 0x7aaa, 0x7aab, 0x7aae, 0x7aaf, 0x7ab0, 0x7ab1, 0x7ab2, 0x7ab4, 0x7ab5, 0x7ab6, 0x7ab7, 0x7ab8, 0x7ab9, 0x7aba, 0x7abb, 0x7abc, 0x7abd, 0x7abe, 0x7ac0, 0x7ac1, 0x7ac2, 0x7ac3, 0x7ac4, 0x7ac5, 0x7ac6, 0x7ac7, 0x7ac8, 0x7ac9, 0x7aca, 0x7acc, 0x7acd, 0x7ace, 0x7acf, 0x7ad0, 0x7ad1, 0x7ad2, 0x7ad3, 0x7ad4, 0x7ad5, 0x7ad7, 0x7ad8, 0x7ada, 0x7adb, 0x7adc, 0x7add, 0x7ae1, 0x7ae2, 0x7ae4, 0x7ae7, 0x7ae8, 0x7ae9, 0x7aea, 0x7aeb, 0x7aec, 0x7aee, 0x7af0, 0x7af1, 0x7af2, 0x7af3, 0x7af4, 0x7af5, 0x7af6, 0x7af7, 0x7af8, 0x7afb, 0x7afc, 0x7afe, 0x7b00, 0x7b01, 0x7b02, 0x7b05, 0x7b07, 0x7b09, 0x7b0c, 0x7b0d, 0x7b0e, 0x7b10, 0x7b12, 0x7b13, 0x7b16, 0x7b17, 0x7b18, 0x7b1a, 0x7b1c, 0x7b1d, 0x7b1f, 0x7b21, 0x7b22, 0x7b23, 0x7b27, 0x7b29, 0x7b2d, 0x6d6e, 0x6daa, 0x798f, 0x88b1, 0x5f17, 0x752b, 0x629a, 0x8f85, 0x4fef, 0x91dc, 0x65a7, 0x812f, 0x8151, 0x5e9c, 0x8150, 0x8d74, 0x526f, 0x8986, 0x8d4b, 0x590d, 0x5085, 0x4ed8, 0x961c, 0x7236, 0x8179, 0x8d1f, 0x5bcc, 0x8ba3, 0x9644, 0x5987, 0x7f1a, 0x5490, 0x5676, 0x560e, 0x8be5, 0x6539, 0x6982, 0x9499, 0x76d6, 0x6e89, 0x5e72, 0x7518, 0x6746, 0x67d1, 0x7aff, 0x809d, 0x8d76, 0x611f, 0x79c6, 0x6562, 0x8d63, 0x5188, 0x521a, 0x94a2, 0x7f38, 0x809b, 0x7eb2, 0x5c97, 0x6e2f, 0x6760, 0x7bd9, 0x768b, 0x9ad8, 0x818f, 0x7f94, 0x7cd5, 0x641e, 0x9550, 0x7a3f, 0x544a, 0x54e5, 0x6b4c, 0x6401, 0x6208, 0x9e3d, 0x80f3, 0x7599, 0x5272, 0x9769, 0x845b, 0x683c, 0x86e4, 0x9601, 0x9694, 0x94ec, 0x4e2a, 0x5404, 0x7ed9, 0x6839, 0x8ddf, 0x8015, 0x66f4, 0x5e9a, 0x7fb9, /* 0xb9 */ 0x7b2f, 0x7b30, 0x7b32, 0x7b34, 0x7b35, 0x7b36, 0x7b37, 0x7b39, 0x7b3b, 0x7b3d, 0x7b3f, 0x7b40, 0x7b41, 0x7b42, 0x7b43, 0x7b44, 0x7b46, 0x7b48, 0x7b4a, 0x7b4d, 0x7b4e, 0x7b53, 0x7b55, 0x7b57, 0x7b59, 0x7b5c, 0x7b5e, 0x7b5f, 0x7b61, 0x7b63, 0x7b64, 0x7b65, 0x7b66, 0x7b67, 0x7b68, 0x7b69, 0x7b6a, 0x7b6b, 0x7b6c, 0x7b6d, 0x7b6f, 0x7b70, 0x7b73, 0x7b74, 0x7b76, 0x7b78, 0x7b7a, 0x7b7c, 0x7b7d, 0x7b7f, 0x7b81, 0x7b82, 0x7b83, 0x7b84, 0x7b86, 0x7b87, 0x7b88, 0x7b89, 0x7b8a, 0x7b8b, 0x7b8c, 0x7b8e, 0x7b8f, 0x7b91, 0x7b92, 0x7b93, 0x7b96, 0x7b98, 0x7b99, 0x7b9a, 0x7b9b, 0x7b9e, 0x7b9f, 0x7ba0, 0x7ba3, 0x7ba4, 0x7ba5, 0x7bae, 0x7baf, 0x7bb0, 0x7bb2, 0x7bb3, 0x7bb5, 0x7bb6, 0x7bb7, 0x7bb9, 0x7bba, 0x7bbb, 0x7bbc, 0x7bbd, 0x7bbe, 0x7bbf, 0x7bc0, 0x7bc2, 0x7bc3, 0x7bc4, 0x57c2, 0x803f, 0x6897, 0x5de5, 0x653b, 0x529f, 0x606d, 0x9f9a, 0x4f9b, 0x8eac, 0x516c, 0x5bab, 0x5f13, 0x5de9, 0x6c5e, 0x62f1, 0x8d21, 0x5171, 0x94a9, 0x52fe, 0x6c9f, 0x82df, 0x72d7, 0x57a2, 0x6784, 0x8d2d, 0x591f, 0x8f9c, 0x83c7, 0x5495, 0x7b8d, 0x4f30, 0x6cbd, 0x5b64, 0x59d1, 0x9f13, 0x53e4, 0x86ca, 0x9aa8, 0x8c37, 0x80a1, 0x6545, 0x987e, 0x56fa, 0x96c7, 0x522e, 0x74dc, 0x5250, 0x5be1, 0x6302, 0x8902, 0x4e56, 0x62d0, 0x602a, 0x68fa, 0x5173, 0x5b98, 0x51a0, 0x89c2, 0x7ba1, 0x9986, 0x7f50, 0x60ef, 0x704c, 0x8d2f, 0x5149, 0x5e7f, 0x901b, 0x7470, 0x89c4, 0x572d, 0x7845, 0x5f52, 0x9f9f, 0x95fa, 0x8f68, 0x9b3c, 0x8be1, 0x7678, 0x6842, 0x67dc, 0x8dea, 0x8d35, 0x523d, 0x8f8a, 0x6eda, 0x68cd, 0x9505, 0x90ed, 0x56fd, 0x679c, 0x88f9, 0x8fc7, 0x54c8, /* 0xba */ 0x7bc5, 0x7bc8, 0x7bc9, 0x7bca, 0x7bcb, 0x7bcd, 0x7bce, 0x7bcf, 0x7bd0, 0x7bd2, 0x7bd4, 0x7bd5, 0x7bd6, 0x7bd7, 0x7bd8, 0x7bdb, 0x7bdc, 0x7bde, 0x7bdf, 0x7be0, 0x7be2, 0x7be3, 0x7be4, 0x7be7, 0x7be8, 0x7be9, 0x7beb, 0x7bec, 0x7bed, 0x7bef, 0x7bf0, 0x7bf2, 0x7bf3, 0x7bf4, 0x7bf5, 0x7bf6, 0x7bf8, 0x7bf9, 0x7bfa, 0x7bfb, 0x7bfd, 0x7bff, 0x7c00, 0x7c01, 0x7c02, 0x7c03, 0x7c04, 0x7c05, 0x7c06, 0x7c08, 0x7c09, 0x7c0a, 0x7c0d, 0x7c0e, 0x7c10, 0x7c11, 0x7c12, 0x7c13, 0x7c14, 0x7c15, 0x7c17, 0x7c18, 0x7c19, 0x7c1a, 0x7c1b, 0x7c1c, 0x7c1d, 0x7c1e, 0x7c20, 0x7c21, 0x7c22, 0x7c23, 0x7c24, 0x7c25, 0x7c28, 0x7c29, 0x7c2b, 0x7c2c, 0x7c2d, 0x7c2e, 0x7c2f, 0x7c30, 0x7c31, 0x7c32, 0x7c33, 0x7c34, 0x7c35, 0x7c36, 0x7c37, 0x7c39, 0x7c3a, 0x7c3b, 0x7c3c, 0x7c3d, 0x7c3e, 0x7c42, 0x9ab8, 0x5b69, 0x6d77, 0x6c26, 0x4ea5, 0x5bb3, 0x9a87, 0x9163, 0x61a8, 0x90af, 0x97e9, 0x542b, 0x6db5, 0x5bd2, 0x51fd, 0x558a, 0x7f55, 0x7ff0, 0x64bc, 0x634d, 0x65f1, 0x61be, 0x608d, 0x710a, 0x6c57, 0x6c49, 0x592f, 0x676d, 0x822a, 0x58d5, 0x568e, 0x8c6a, 0x6beb, 0x90dd, 0x597d, 0x8017, 0x53f7, 0x6d69, 0x5475, 0x559d, 0x8377, 0x83cf, 0x6838, 0x79be, 0x548c, 0x4f55, 0x5408, 0x76d2, 0x8c89, 0x9602, 0x6cb3, 0x6db8, 0x8d6b, 0x8910, 0x9e64, 0x8d3a, 0x563f, 0x9ed1, 0x75d5, 0x5f88, 0x72e0, 0x6068, 0x54fc, 0x4ea8, 0x6a2a, 0x8861, 0x6052, 0x8f70, 0x54c4, 0x70d8, 0x8679, 0x9e3f, 0x6d2a, 0x5b8f, 0x5f18, 0x7ea2, 0x5589, 0x4faf, 0x7334, 0x543c, 0x539a, 0x5019, 0x540e, 0x547c, 0x4e4e, 0x5ffd, 0x745a, 0x58f6, 0x846b, 0x80e1, 0x8774, 0x72d0, 0x7cca, 0x6e56, /* 0xbb */ 0x7c43, 0x7c44, 0x7c45, 0x7c46, 0x7c47, 0x7c48, 0x7c49, 0x7c4a, 0x7c4b, 0x7c4c, 0x7c4e, 0x7c4f, 0x7c50, 0x7c51, 0x7c52, 0x7c53, 0x7c54, 0x7c55, 0x7c56, 0x7c57, 0x7c58, 0x7c59, 0x7c5a, 0x7c5b, 0x7c5c, 0x7c5d, 0x7c5e, 0x7c5f, 0x7c60, 0x7c61, 0x7c62, 0x7c63, 0x7c64, 0x7c65, 0x7c66, 0x7c67, 0x7c68, 0x7c69, 0x7c6a, 0x7c6b, 0x7c6c, 0x7c6d, 0x7c6e, 0x7c6f, 0x7c70, 0x7c71, 0x7c72, 0x7c75, 0x7c76, 0x7c77, 0x7c78, 0x7c79, 0x7c7a, 0x7c7e, 0x7c7f, 0x7c80, 0x7c81, 0x7c82, 0x7c83, 0x7c84, 0x7c85, 0x7c86, 0x7c87, 0x7c88, 0x7c8a, 0x7c8b, 0x7c8c, 0x7c8d, 0x7c8e, 0x7c8f, 0x7c90, 0x7c93, 0x7c94, 0x7c96, 0x7c99, 0x7c9a, 0x7c9b, 0x7ca0, 0x7ca1, 0x7ca3, 0x7ca6, 0x7ca7, 0x7ca8, 0x7ca9, 0x7cab, 0x7cac, 0x7cad, 0x7caf, 0x7cb0, 0x7cb4, 0x7cb5, 0x7cb6, 0x7cb7, 0x7cb8, 0x7cba, 0x7cbb, 0x5f27, 0x864e, 0x552c, 0x62a4, 0x4e92, 0x6caa, 0x6237, 0x82b1, 0x54d7, 0x534e, 0x733e, 0x6ed1, 0x753b, 0x5212, 0x5316, 0x8bdd, 0x69d0, 0x5f8a, 0x6000, 0x6dee, 0x574f, 0x6b22, 0x73af, 0x6853, 0x8fd8, 0x7f13, 0x6362, 0x60a3, 0x5524, 0x75ea, 0x8c62, 0x7115, 0x6da3, 0x5ba6, 0x5e7b, 0x8352, 0x614c, 0x9ec4, 0x78fa, 0x8757, 0x7c27, 0x7687, 0x51f0, 0x60f6, 0x714c, 0x6643, 0x5e4c, 0x604d, 0x8c0e, 0x7070, 0x6325, 0x8f89, 0x5fbd, 0x6062, 0x86d4, 0x56de, 0x6bc1, 0x6094, 0x6167, 0x5349, 0x60e0, 0x6666, 0x8d3f, 0x79fd, 0x4f1a, 0x70e9, 0x6c47, 0x8bb3, 0x8bf2, 0x7ed8, 0x8364, 0x660f, 0x5a5a, 0x9b42, 0x6d51, 0x6df7, 0x8c41, 0x6d3b, 0x4f19, 0x706b, 0x83b7, 0x6216, 0x60d1, 0x970d, 0x8d27, 0x7978, 0x51fb, 0x573e, 0x57fa, 0x673a, 0x7578, 0x7a3d, 0x79ef, 0x7b95, /* 0xbc */ 0x7cbf, 0x7cc0, 0x7cc2, 0x7cc3, 0x7cc4, 0x7cc6, 0x7cc9, 0x7ccb, 0x7cce, 0x7ccf, 0x7cd0, 0x7cd1, 0x7cd2, 0x7cd3, 0x7cd4, 0x7cd8, 0x7cda, 0x7cdb, 0x7cdd, 0x7cde, 0x7ce1, 0x7ce2, 0x7ce3, 0x7ce4, 0x7ce5, 0x7ce6, 0x7ce7, 0x7ce9, 0x7cea, 0x7ceb, 0x7cec, 0x7ced, 0x7cee, 0x7cf0, 0x7cf1, 0x7cf2, 0x7cf3, 0x7cf4, 0x7cf5, 0x7cf6, 0x7cf7, 0x7cf9, 0x7cfa, 0x7cfc, 0x7cfd, 0x7cfe, 0x7cff, 0x7d00, 0x7d01, 0x7d02, 0x7d03, 0x7d04, 0x7d05, 0x7d06, 0x7d07, 0x7d08, 0x7d09, 0x7d0b, 0x7d0c, 0x7d0d, 0x7d0e, 0x7d0f, 0x7d10, 0x7d11, 0x7d12, 0x7d13, 0x7d14, 0x7d15, 0x7d16, 0x7d17, 0x7d18, 0x7d19, 0x7d1a, 0x7d1b, 0x7d1c, 0x7d1d, 0x7d1e, 0x7d1f, 0x7d21, 0x7d23, 0x7d24, 0x7d25, 0x7d26, 0x7d28, 0x7d29, 0x7d2a, 0x7d2c, 0x7d2d, 0x7d2e, 0x7d30, 0x7d31, 0x7d32, 0x7d33, 0x7d34, 0x7d35, 0x7d36, 0x808c, 0x9965, 0x8ff9, 0x6fc0, 0x8ba5, 0x9e21, 0x59ec, 0x7ee9, 0x7f09, 0x5409, 0x6781, 0x68d8, 0x8f91, 0x7c4d, 0x96c6, 0x53ca, 0x6025, 0x75be, 0x6c72, 0x5373, 0x5ac9, 0x7ea7, 0x6324, 0x51e0, 0x810a, 0x5df1, 0x84df, 0x6280, 0x5180, 0x5b63, 0x4f0e, 0x796d, 0x5242, 0x60b8, 0x6d4e, 0x5bc4, 0x5bc2, 0x8ba1, 0x8bb0, 0x65e2, 0x5fcc, 0x9645, 0x5993, 0x7ee7, 0x7eaa, 0x5609, 0x67b7, 0x5939, 0x4f73, 0x5bb6, 0x52a0, 0x835a, 0x988a, 0x8d3e, 0x7532, 0x94be, 0x5047, 0x7a3c, 0x4ef7, 0x67b6, 0x9a7e, 0x5ac1, 0x6b7c, 0x76d1, 0x575a, 0x5c16, 0x7b3a, 0x95f4, 0x714e, 0x517c, 0x80a9, 0x8270, 0x5978, 0x7f04, 0x8327, 0x68c0, 0x67ec, 0x78b1, 0x7877, 0x62e3, 0x6361, 0x7b80, 0x4fed, 0x526a, 0x51cf, 0x8350, 0x69db, 0x9274, 0x8df5, 0x8d31, 0x89c1, 0x952e, 0x7bad, 0x4ef6, /* 0xbd */ 0x7d37, 0x7d38, 0x7d39, 0x7d3a, 0x7d3b, 0x7d3c, 0x7d3d, 0x7d3e, 0x7d3f, 0x7d40, 0x7d41, 0x7d42, 0x7d43, 0x7d44, 0x7d45, 0x7d46, 0x7d47, 0x7d48, 0x7d49, 0x7d4a, 0x7d4b, 0x7d4c, 0x7d4d, 0x7d4e, 0x7d4f, 0x7d50, 0x7d51, 0x7d52, 0x7d53, 0x7d54, 0x7d55, 0x7d56, 0x7d57, 0x7d58, 0x7d59, 0x7d5a, 0x7d5b, 0x7d5c, 0x7d5d, 0x7d5e, 0x7d5f, 0x7d60, 0x7d61, 0x7d62, 0x7d63, 0x7d64, 0x7d65, 0x7d66, 0x7d67, 0x7d68, 0x7d69, 0x7d6a, 0x7d6b, 0x7d6c, 0x7d6d, 0x7d6f, 0x7d70, 0x7d71, 0x7d72, 0x7d73, 0x7d74, 0x7d75, 0x7d76, 0x7d78, 0x7d79, 0x7d7a, 0x7d7b, 0x7d7c, 0x7d7d, 0x7d7e, 0x7d7f, 0x7d80, 0x7d81, 0x7d82, 0x7d83, 0x7d84, 0x7d85, 0x7d86, 0x7d87, 0x7d88, 0x7d89, 0x7d8a, 0x7d8b, 0x7d8c, 0x7d8d, 0x7d8e, 0x7d8f, 0x7d90, 0x7d91, 0x7d92, 0x7d93, 0x7d94, 0x7d95, 0x7d96, 0x7d97, 0x7d98, 0x5065, 0x8230, 0x5251, 0x996f, 0x6e10, 0x6e85, 0x6da7, 0x5efa, 0x50f5, 0x59dc, 0x5c06, 0x6d46, 0x6c5f, 0x7586, 0x848b, 0x6868, 0x5956, 0x8bb2, 0x5320, 0x9171, 0x964d, 0x8549, 0x6912, 0x7901, 0x7126, 0x80f6, 0x4ea4, 0x90ca, 0x6d47, 0x9a84, 0x5a07, 0x56bc, 0x6405, 0x94f0, 0x77eb, 0x4fa5, 0x811a, 0x72e1, 0x89d2, 0x997a, 0x7f34, 0x7ede, 0x527f, 0x6559, 0x9175, 0x8f7f, 0x8f83, 0x53eb, 0x7a96, 0x63ed, 0x63a5, 0x7686, 0x79f8, 0x8857, 0x9636, 0x622a, 0x52ab, 0x8282, 0x6854, 0x6770, 0x6377, 0x776b, 0x7aed, 0x6d01, 0x7ed3, 0x89e3, 0x59d0, 0x6212, 0x85c9, 0x82a5, 0x754c, 0x501f, 0x4ecb, 0x75a5, 0x8beb, 0x5c4a, 0x5dfe, 0x7b4b, 0x65a4, 0x91d1, 0x4eca, 0x6d25, 0x895f, 0x7d27, 0x9526, 0x4ec5, 0x8c28, 0x8fdb, 0x9773, 0x664b, 0x7981, 0x8fd1, 0x70ec, 0x6d78, /* 0xbe */ 0x7d99, 0x7d9a, 0x7d9b, 0x7d9c, 0x7d9d, 0x7d9e, 0x7d9f, 0x7da0, 0x7da1, 0x7da2, 0x7da3, 0x7da4, 0x7da5, 0x7da7, 0x7da8, 0x7da9, 0x7daa, 0x7dab, 0x7dac, 0x7dad, 0x7daf, 0x7db0, 0x7db1, 0x7db2, 0x7db3, 0x7db4, 0x7db5, 0x7db6, 0x7db7, 0x7db8, 0x7db9, 0x7dba, 0x7dbb, 0x7dbc, 0x7dbd, 0x7dbe, 0x7dbf, 0x7dc0, 0x7dc1, 0x7dc2, 0x7dc3, 0x7dc4, 0x7dc5, 0x7dc6, 0x7dc7, 0x7dc8, 0x7dc9, 0x7dca, 0x7dcb, 0x7dcc, 0x7dcd, 0x7dce, 0x7dcf, 0x7dd0, 0x7dd1, 0x7dd2, 0x7dd3, 0x7dd4, 0x7dd5, 0x7dd6, 0x7dd7, 0x7dd8, 0x7dd9, 0x7dda, 0x7ddb, 0x7ddc, 0x7ddd, 0x7dde, 0x7ddf, 0x7de0, 0x7de1, 0x7de2, 0x7de3, 0x7de4, 0x7de5, 0x7de6, 0x7de7, 0x7de8, 0x7de9, 0x7dea, 0x7deb, 0x7dec, 0x7ded, 0x7dee, 0x7def, 0x7df0, 0x7df1, 0x7df2, 0x7df3, 0x7df4, 0x7df5, 0x7df6, 0x7df7, 0x7df8, 0x7df9, 0x7dfa, 0x5c3d, 0x52b2, 0x8346, 0x5162, 0x830e, 0x775b, 0x6676, 0x9cb8, 0x4eac, 0x60ca, 0x7cbe, 0x7cb3, 0x7ecf, 0x4e95, 0x8b66, 0x666f, 0x9888, 0x9759, 0x5883, 0x656c, 0x955c, 0x5f84, 0x75c9, 0x9756, 0x7adf, 0x7ade, 0x51c0, 0x70af, 0x7a98, 0x63ea, 0x7a76, 0x7ea0, 0x7396, 0x97ed, 0x4e45, 0x7078, 0x4e5d, 0x9152, 0x53a9, 0x6551, 0x65e7, 0x81fc, 0x8205, 0x548e, 0x5c31, 0x759a, 0x97a0, 0x62d8, 0x72d9, 0x75bd, 0x5c45, 0x9a79, 0x83ca, 0x5c40, 0x5480, 0x77e9, 0x4e3e, 0x6cae, 0x805a, 0x62d2, 0x636e, 0x5de8, 0x5177, 0x8ddd, 0x8e1e, 0x952f, 0x4ff1, 0x53e5, 0x60e7, 0x70ac, 0x5267, 0x6350, 0x9e43, 0x5a1f, 0x5026, 0x7737, 0x5377, 0x7ee2, 0x6485, 0x652b, 0x6289, 0x6398, 0x5014, 0x7235, 0x89c9, 0x51b3, 0x8bc0, 0x7edd, 0x5747, 0x83cc, 0x94a7, 0x519b, 0x541b, 0x5cfb, /* 0xbf */ 0x7dfb, 0x7dfc, 0x7dfd, 0x7dfe, 0x7dff, 0x7e00, 0x7e01, 0x7e02, 0x7e03, 0x7e04, 0x7e05, 0x7e06, 0x7e07, 0x7e08, 0x7e09, 0x7e0a, 0x7e0b, 0x7e0c, 0x7e0d, 0x7e0e, 0x7e0f, 0x7e10, 0x7e11, 0x7e12, 0x7e13, 0x7e14, 0x7e15, 0x7e16, 0x7e17, 0x7e18, 0x7e19, 0x7e1a, 0x7e1b, 0x7e1c, 0x7e1d, 0x7e1e, 0x7e1f, 0x7e20, 0x7e21, 0x7e22, 0x7e23, 0x7e24, 0x7e25, 0x7e26, 0x7e27, 0x7e28, 0x7e29, 0x7e2a, 0x7e2b, 0x7e2c, 0x7e2d, 0x7e2e, 0x7e2f, 0x7e30, 0x7e31, 0x7e32, 0x7e33, 0x7e34, 0x7e35, 0x7e36, 0x7e37, 0x7e38, 0x7e39, 0x7e3a, 0x7e3c, 0x7e3d, 0x7e3e, 0x7e3f, 0x7e40, 0x7e42, 0x7e43, 0x7e44, 0x7e45, 0x7e46, 0x7e48, 0x7e49, 0x7e4a, 0x7e4b, 0x7e4c, 0x7e4d, 0x7e4e, 0x7e4f, 0x7e50, 0x7e51, 0x7e52, 0x7e53, 0x7e54, 0x7e55, 0x7e56, 0x7e57, 0x7e58, 0x7e59, 0x7e5a, 0x7e5b, 0x7e5c, 0x7e5d, 0x4fca, 0x7ae3, 0x6d5a, 0x90e1, 0x9a8f, 0x5580, 0x5496, 0x5361, 0x54af, 0x5f00, 0x63e9, 0x6977, 0x51ef, 0x6168, 0x520a, 0x582a, 0x52d8, 0x574e, 0x780d, 0x770b, 0x5eb7, 0x6177, 0x7ce0, 0x625b, 0x6297, 0x4ea2, 0x7095, 0x8003, 0x62f7, 0x70e4, 0x9760, 0x5777, 0x82db, 0x67ef, 0x68f5, 0x78d5, 0x9897, 0x79d1, 0x58f3, 0x54b3, 0x53ef, 0x6e34, 0x514b, 0x523b, 0x5ba2, 0x8bfe, 0x80af, 0x5543, 0x57a6, 0x6073, 0x5751, 0x542d, 0x7a7a, 0x6050, 0x5b54, 0x63a7, 0x62a0, 0x53e3, 0x6263, 0x5bc7, 0x67af, 0x54ed, 0x7a9f, 0x82e6, 0x9177, 0x5e93, 0x88e4, 0x5938, 0x57ae, 0x630e, 0x8de8, 0x80ef, 0x5757, 0x7b77, 0x4fa9, 0x5feb, 0x5bbd, 0x6b3e, 0x5321, 0x7b50, 0x72c2, 0x6846, 0x77ff, 0x7736, 0x65f7, 0x51b5, 0x4e8f, 0x76d4, 0x5cbf, 0x7aa5, 0x8475, 0x594e, 0x9b41, 0x5080, /* 0xc0 */ 0x7e5e, 0x7e5f, 0x7e60, 0x7e61, 0x7e62, 0x7e63, 0x7e64, 0x7e65, 0x7e66, 0x7e67, 0x7e68, 0x7e69, 0x7e6a, 0x7e6b, 0x7e6c, 0x7e6d, 0x7e6e, 0x7e6f, 0x7e70, 0x7e71, 0x7e72, 0x7e73, 0x7e74, 0x7e75, 0x7e76, 0x7e77, 0x7e78, 0x7e79, 0x7e7a, 0x7e7b, 0x7e7c, 0x7e7d, 0x7e7e, 0x7e7f, 0x7e80, 0x7e81, 0x7e83, 0x7e84, 0x7e85, 0x7e86, 0x7e87, 0x7e88, 0x7e89, 0x7e8a, 0x7e8b, 0x7e8c, 0x7e8d, 0x7e8e, 0x7e8f, 0x7e90, 0x7e91, 0x7e92, 0x7e93, 0x7e94, 0x7e95, 0x7e96, 0x7e97, 0x7e98, 0x7e99, 0x7e9a, 0x7e9c, 0x7e9d, 0x7e9e, 0x7eae, 0x7eb4, 0x7ebb, 0x7ebc, 0x7ed6, 0x7ee4, 0x7eec, 0x7ef9, 0x7f0a, 0x7f10, 0x7f1e, 0x7f37, 0x7f39, 0x7f3b, 0x7f3c, 0x7f3d, 0x7f3e, 0x7f3f, 0x7f40, 0x7f41, 0x7f43, 0x7f46, 0x7f47, 0x7f48, 0x7f49, 0x7f4a, 0x7f4b, 0x7f4c, 0x7f4d, 0x7f4e, 0x7f4f, 0x7f52, 0x7f53, 0x9988, 0x6127, 0x6e83, 0x5764, 0x6606, 0x6346, 0x56f0, 0x62ec, 0x6269, 0x5ed3, 0x9614, 0x5783, 0x62c9, 0x5587, 0x8721, 0x814a, 0x8fa3, 0x5566, 0x83b1, 0x6765, 0x8d56, 0x84dd, 0x5a6a, 0x680f, 0x62e6, 0x7bee, 0x9611, 0x5170, 0x6f9c, 0x8c30, 0x63fd, 0x89c8, 0x61d2, 0x7f06, 0x70c2, 0x6ee5, 0x7405, 0x6994, 0x72fc, 0x5eca, 0x90ce, 0x6717, 0x6d6a, 0x635e, 0x52b3, 0x7262, 0x8001, 0x4f6c, 0x59e5, 0x916a, 0x70d9, 0x6d9d, 0x52d2, 0x4e50, 0x96f7, 0x956d, 0x857e, 0x78ca, 0x7d2f, 0x5121, 0x5792, 0x64c2, 0x808b, 0x7c7b, 0x6cea, 0x68f1, 0x695e, 0x51b7, 0x5398, 0x68a8, 0x7281, 0x9ece, 0x7bf1, 0x72f8, 0x79bb, 0x6f13, 0x7406, 0x674e, 0x91cc, 0x9ca4, 0x793c, 0x8389, 0x8354, 0x540f, 0x6817, 0x4e3d, 0x5389, 0x52b1, 0x783e, 0x5386, 0x5229, 0x5088, 0x4f8b, 0x4fd0, /* 0xc1 */ 0x7f56, 0x7f59, 0x7f5b, 0x7f5c, 0x7f5d, 0x7f5e, 0x7f60, 0x7f63, 0x7f64, 0x7f65, 0x7f66, 0x7f67, 0x7f6b, 0x7f6c, 0x7f6d, 0x7f6f, 0x7f70, 0x7f73, 0x7f75, 0x7f76, 0x7f77, 0x7f78, 0x7f7a, 0x7f7b, 0x7f7c, 0x7f7d, 0x7f7f, 0x7f80, 0x7f82, 0x7f83, 0x7f84, 0x7f85, 0x7f86, 0x7f87, 0x7f88, 0x7f89, 0x7f8b, 0x7f8d, 0x7f8f, 0x7f90, 0x7f91, 0x7f92, 0x7f93, 0x7f95, 0x7f96, 0x7f97, 0x7f98, 0x7f99, 0x7f9b, 0x7f9c, 0x7fa0, 0x7fa2, 0x7fa3, 0x7fa5, 0x7fa6, 0x7fa8, 0x7fa9, 0x7faa, 0x7fab, 0x7fac, 0x7fad, 0x7fae, 0x7fb1, 0x7fb3, 0x7fb4, 0x7fb5, 0x7fb6, 0x7fb7, 0x7fba, 0x7fbb, 0x7fbe, 0x7fc0, 0x7fc2, 0x7fc3, 0x7fc4, 0x7fc6, 0x7fc7, 0x7fc8, 0x7fc9, 0x7fcb, 0x7fcd, 0x7fcf, 0x7fd0, 0x7fd1, 0x7fd2, 0x7fd3, 0x7fd6, 0x7fd7, 0x7fd9, 0x7fda, 0x7fdb, 0x7fdc, 0x7fdd, 0x7fde, 0x7fe2, 0x7fe3, 0x75e2, 0x7acb, 0x7c92, 0x6ca5, 0x96b6, 0x529b, 0x7483, 0x54e9, 0x4fe9, 0x8054, 0x83b2, 0x8fde, 0x9570, 0x5ec9, 0x601c, 0x6d9f, 0x5e18, 0x655b, 0x8138, 0x94fe, 0x604b, 0x70bc, 0x7ec3, 0x7cae, 0x51c9, 0x6881, 0x7cb1, 0x826f, 0x4e24, 0x8f86, 0x91cf, 0x667e, 0x4eae, 0x8c05, 0x64a9, 0x804a, 0x50da, 0x7597, 0x71ce, 0x5be5, 0x8fbd, 0x6f66, 0x4e86, 0x6482, 0x9563, 0x5ed6, 0x6599, 0x5217, 0x88c2, 0x70c8, 0x52a3, 0x730e, 0x7433, 0x6797, 0x78f7, 0x9716, 0x4e34, 0x90bb, 0x9cde, 0x6dcb, 0x51db, 0x8d41, 0x541d, 0x62ce, 0x73b2, 0x83f1, 0x96f6, 0x9f84, 0x94c3, 0x4f36, 0x7f9a, 0x51cc, 0x7075, 0x9675, 0x5cad, 0x9886, 0x53e6, 0x4ee4, 0x6e9c, 0x7409, 0x69b4, 0x786b, 0x998f, 0x7559, 0x5218, 0x7624, 0x6d41, 0x67f3, 0x516d, 0x9f99, 0x804b, 0x5499, 0x7b3c, 0x7abf, /* 0xc2 */ 0x7fe4, 0x7fe7, 0x7fe8, 0x7fea, 0x7feb, 0x7fec, 0x7fed, 0x7fef, 0x7ff2, 0x7ff4, 0x7ff5, 0x7ff6, 0x7ff7, 0x7ff8, 0x7ff9, 0x7ffa, 0x7ffd, 0x7ffe, 0x7fff, 0x8002, 0x8007, 0x8008, 0x8009, 0x800a, 0x800e, 0x800f, 0x8011, 0x8013, 0x801a, 0x801b, 0x801d, 0x801e, 0x801f, 0x8021, 0x8023, 0x8024, 0x802b, 0x802c, 0x802d, 0x802e, 0x802f, 0x8030, 0x8032, 0x8034, 0x8039, 0x803a, 0x803c, 0x803e, 0x8040, 0x8041, 0x8044, 0x8045, 0x8047, 0x8048, 0x8049, 0x804e, 0x804f, 0x8050, 0x8051, 0x8053, 0x8055, 0x8056, 0x8057, 0x8059, 0x805b, 0x805c, 0x805d, 0x805e, 0x805f, 0x8060, 0x8061, 0x8062, 0x8063, 0x8064, 0x8065, 0x8066, 0x8067, 0x8068, 0x806b, 0x806c, 0x806d, 0x806e, 0x806f, 0x8070, 0x8072, 0x8073, 0x8074, 0x8075, 0x8076, 0x8077, 0x8078, 0x8079, 0x807a, 0x807b, 0x807c, 0x807d, 0x9686, 0x5784, 0x62e2, 0x9647, 0x697c, 0x5a04, 0x6402, 0x7bd3, 0x6f0f, 0x964b, 0x82a6, 0x5362, 0x9885, 0x5e90, 0x7089, 0x63b3, 0x5364, 0x864f, 0x9c81, 0x9e93, 0x788c, 0x9732, 0x8def, 0x8d42, 0x9e7f, 0x6f5e, 0x7984, 0x5f55, 0x9646, 0x622e, 0x9a74, 0x5415, 0x94dd, 0x4fa3, 0x65c5, 0x5c65, 0x5c61, 0x7f15, 0x8651, 0x6c2f, 0x5f8b, 0x7387, 0x6ee4, 0x7eff, 0x5ce6, 0x631b, 0x5b6a, 0x6ee6, 0x5375, 0x4e71, 0x63a0, 0x7565, 0x62a1, 0x8f6e, 0x4f26, 0x4ed1, 0x6ca6, 0x7eb6, 0x8bba, 0x841d, 0x87ba, 0x7f57, 0x903b, 0x9523, 0x7ba9, 0x9aa1, 0x88f8, 0x843d, 0x6d1b, 0x9a86, 0x7edc, 0x5988, 0x9ebb, 0x739b, 0x7801, 0x8682, 0x9a6c, 0x9a82, 0x561b, 0x5417, 0x57cb, 0x4e70, 0x9ea6, 0x5356, 0x8fc8, 0x8109, 0x7792, 0x9992, 0x86ee, 0x6ee1, 0x8513, 0x66fc, 0x6162, 0x6f2b, /* 0xc3 */ 0x807e, 0x8081, 0x8082, 0x8085, 0x8088, 0x808a, 0x808d, 0x808e, 0x808f, 0x8090, 0x8091, 0x8092, 0x8094, 0x8095, 0x8097, 0x8099, 0x809e, 0x80a3, 0x80a6, 0x80a7, 0x80a8, 0x80ac, 0x80b0, 0x80b3, 0x80b5, 0x80b6, 0x80b8, 0x80b9, 0x80bb, 0x80c5, 0x80c7, 0x80c8, 0x80c9, 0x80ca, 0x80cb, 0x80cf, 0x80d0, 0x80d1, 0x80d2, 0x80d3, 0x80d4, 0x80d5, 0x80d8, 0x80df, 0x80e0, 0x80e2, 0x80e3, 0x80e6, 0x80ee, 0x80f5, 0x80f7, 0x80f9, 0x80fb, 0x80fe, 0x80ff, 0x8100, 0x8101, 0x8103, 0x8104, 0x8105, 0x8107, 0x8108, 0x810b, 0x810c, 0x8115, 0x8117, 0x8119, 0x811b, 0x811c, 0x811d, 0x811f, 0x8120, 0x8121, 0x8122, 0x8123, 0x8124, 0x8125, 0x8126, 0x8127, 0x8128, 0x8129, 0x812a, 0x812b, 0x812d, 0x812e, 0x8130, 0x8133, 0x8134, 0x8135, 0x8137, 0x8139, 0x813a, 0x813b, 0x813c, 0x813d, 0x813f, 0x8c29, 0x8292, 0x832b, 0x76f2, 0x6c13, 0x5fd9, 0x83bd, 0x732b, 0x8305, 0x951a, 0x6bdb, 0x77db, 0x94c6, 0x536f, 0x8302, 0x5192, 0x5e3d, 0x8c8c, 0x8d38, 0x4e48, 0x73ab, 0x679a, 0x6885, 0x9176, 0x9709, 0x7164, 0x6ca1, 0x7709, 0x5a92, 0x9541, 0x6bcf, 0x7f8e, 0x6627, 0x5bd0, 0x59b9, 0x5a9a, 0x95e8, 0x95f7, 0x4eec, 0x840c, 0x8499, 0x6aac, 0x76df, 0x9530, 0x731b, 0x68a6, 0x5b5f, 0x772f, 0x919a, 0x9761, 0x7cdc, 0x8ff7, 0x8c1c, 0x5f25, 0x7c73, 0x79d8, 0x89c5, 0x6ccc, 0x871c, 0x5bc6, 0x5e42, 0x68c9, 0x7720, 0x7ef5, 0x5195, 0x514d, 0x52c9, 0x5a29, 0x7f05, 0x9762, 0x82d7, 0x63cf, 0x7784, 0x85d0, 0x79d2, 0x6e3a, 0x5e99, 0x5999, 0x8511, 0x706d, 0x6c11, 0x62bf, 0x76bf, 0x654f, 0x60af, 0x95fd, 0x660e, 0x879f, 0x9e23, 0x94ed, 0x540d, 0x547d, 0x8c2c, 0x6478, /* 0xc4 */ 0x8140, 0x8141, 0x8142, 0x8143, 0x8144, 0x8145, 0x8147, 0x8149, 0x814d, 0x814e, 0x814f, 0x8152, 0x8156, 0x8157, 0x8158, 0x815b, 0x815c, 0x815d, 0x815e, 0x815f, 0x8161, 0x8162, 0x8163, 0x8164, 0x8166, 0x8168, 0x816a, 0x816b, 0x816c, 0x816f, 0x8172, 0x8173, 0x8175, 0x8176, 0x8177, 0x8178, 0x8181, 0x8183, 0x8184, 0x8185, 0x8186, 0x8187, 0x8189, 0x818b, 0x818c, 0x818d, 0x818e, 0x8190, 0x8192, 0x8193, 0x8194, 0x8195, 0x8196, 0x8197, 0x8199, 0x819a, 0x819e, 0x819f, 0x81a0, 0x81a1, 0x81a2, 0x81a4, 0x81a5, 0x81a7, 0x81a9, 0x81ab, 0x81ac, 0x81ad, 0x81ae, 0x81af, 0x81b0, 0x81b1, 0x81b2, 0x81b4, 0x81b5, 0x81b6, 0x81b7, 0x81b8, 0x81b9, 0x81bc, 0x81bd, 0x81be, 0x81bf, 0x81c4, 0x81c5, 0x81c7, 0x81c8, 0x81c9, 0x81cb, 0x81cd, 0x81ce, 0x81cf, 0x81d0, 0x81d1, 0x81d2, 0x81d3, 0x6479, 0x8611, 0x6a21, 0x819c, 0x78e8, 0x6469, 0x9b54, 0x62b9, 0x672b, 0x83ab, 0x58a8, 0x9ed8, 0x6cab, 0x6f20, 0x5bde, 0x964c, 0x8c0b, 0x725f, 0x67d0, 0x62c7, 0x7261, 0x4ea9, 0x59c6, 0x6bcd, 0x5893, 0x66ae, 0x5e55, 0x52df, 0x6155, 0x6728, 0x76ee, 0x7766, 0x7267, 0x7a46, 0x62ff, 0x54ea, 0x5450, 0x94a0, 0x90a3, 0x5a1c, 0x7eb3, 0x6c16, 0x4e43, 0x5976, 0x8010, 0x5948, 0x5357, 0x7537, 0x96be, 0x56ca, 0x6320, 0x8111, 0x607c, 0x95f9, 0x6dd6, 0x5462, 0x9981, 0x5185, 0x5ae9, 0x80fd, 0x59ae, 0x9713, 0x502a, 0x6ce5, 0x5c3c, 0x62df, 0x4f60, 0x533f, 0x817b, 0x9006, 0x6eba, 0x852b, 0x62c8, 0x5e74, 0x78be, 0x64b5, 0x637b, 0x5ff5, 0x5a18, 0x917f, 0x9e1f, 0x5c3f, 0x634f, 0x8042, 0x5b7d, 0x556e, 0x954a, 0x954d, 0x6d85, 0x60a8, 0x67e0, 0x72de, 0x51dd, 0x5b81, /* 0xc5 */ 0x81d4, 0x81d5, 0x81d6, 0x81d7, 0x81d8, 0x81d9, 0x81da, 0x81db, 0x81dc, 0x81dd, 0x81de, 0x81df, 0x81e0, 0x81e1, 0x81e2, 0x81e4, 0x81e5, 0x81e6, 0x81e8, 0x81e9, 0x81eb, 0x81ee, 0x81ef, 0x81f0, 0x81f1, 0x81f2, 0x81f5, 0x81f6, 0x81f7, 0x81f8, 0x81f9, 0x81fa, 0x81fd, 0x81ff, 0x8203, 0x8207, 0x8208, 0x8209, 0x820a, 0x820b, 0x820e, 0x820f, 0x8211, 0x8213, 0x8215, 0x8216, 0x8217, 0x8218, 0x8219, 0x821a, 0x821d, 0x8220, 0x8224, 0x8225, 0x8226, 0x8227, 0x8229, 0x822e, 0x8232, 0x823a, 0x823c, 0x823d, 0x823f, 0x8240, 0x8241, 0x8242, 0x8243, 0x8245, 0x8246, 0x8248, 0x824a, 0x824c, 0x824d, 0x824e, 0x8250, 0x8251, 0x8252, 0x8253, 0x8254, 0x8255, 0x8256, 0x8257, 0x8259, 0x825b, 0x825c, 0x825d, 0x825e, 0x8260, 0x8261, 0x8262, 0x8263, 0x8264, 0x8265, 0x8266, 0x8267, 0x8269, 0x62e7, 0x6cde, 0x725b, 0x626d, 0x94ae, 0x7ebd, 0x8113, 0x6d53, 0x519c, 0x5f04, 0x5974, 0x52aa, 0x6012, 0x5973, 0x6696, 0x8650, 0x759f, 0x632a, 0x61e6, 0x7cef, 0x8bfa, 0x54e6, 0x6b27, 0x9e25, 0x6bb4, 0x85d5, 0x5455, 0x5076, 0x6ca4, 0x556a, 0x8db4, 0x722c, 0x5e15, 0x6015, 0x7436, 0x62cd, 0x6392, 0x724c, 0x5f98, 0x6e43, 0x6d3e, 0x6500, 0x6f58, 0x76d8, 0x78d0, 0x76fc, 0x7554, 0x5224, 0x53db, 0x4e53, 0x5e9e, 0x65c1, 0x802a, 0x80d6, 0x629b, 0x5486, 0x5228, 0x70ae, 0x888d, 0x8dd1, 0x6ce1, 0x5478, 0x80da, 0x57f9, 0x88f4, 0x8d54, 0x966a, 0x914d, 0x4f69, 0x6c9b, 0x55b7, 0x76c6, 0x7830, 0x62a8, 0x70f9, 0x6f8e, 0x5f6d, 0x84ec, 0x68da, 0x787c, 0x7bf7, 0x81a8, 0x670b, 0x9e4f, 0x6367, 0x78b0, 0x576f, 0x7812, 0x9739, 0x6279, 0x62ab, 0x5288, 0x7435, 0x6bd7, /* 0xc6 */ 0x826a, 0x826b, 0x826c, 0x826d, 0x8271, 0x8275, 0x8276, 0x8277, 0x8278, 0x827b, 0x827c, 0x8280, 0x8281, 0x8283, 0x8285, 0x8286, 0x8287, 0x8289, 0x828c, 0x8290, 0x8293, 0x8294, 0x8295, 0x8296, 0x829a, 0x829b, 0x829e, 0x82a0, 0x82a2, 0x82a3, 0x82a7, 0x82b2, 0x82b5, 0x82b6, 0x82ba, 0x82bb, 0x82bc, 0x82bf, 0x82c0, 0x82c2, 0x82c3, 0x82c5, 0x82c6, 0x82c9, 0x82d0, 0x82d6, 0x82d9, 0x82da, 0x82dd, 0x82e2, 0x82e7, 0x82e8, 0x82e9, 0x82ea, 0x82ec, 0x82ed, 0x82ee, 0x82f0, 0x82f2, 0x82f3, 0x82f5, 0x82f6, 0x82f8, 0x82fa, 0x82fc, 0x82fd, 0x82fe, 0x82ff, 0x8300, 0x830a, 0x830b, 0x830d, 0x8310, 0x8312, 0x8313, 0x8316, 0x8318, 0x8319, 0x831d, 0x831e, 0x831f, 0x8320, 0x8321, 0x8322, 0x8323, 0x8324, 0x8325, 0x8326, 0x8329, 0x832a, 0x832e, 0x8330, 0x8332, 0x8337, 0x833b, 0x833d, 0x5564, 0x813e, 0x75b2, 0x76ae, 0x5339, 0x75de, 0x50fb, 0x5c41, 0x8b6c, 0x7bc7, 0x504f, 0x7247, 0x9a97, 0x98d8, 0x6f02, 0x74e2, 0x7968, 0x6487, 0x77a5, 0x62fc, 0x9891, 0x8d2b, 0x54c1, 0x8058, 0x4e52, 0x576a, 0x82f9, 0x840d, 0x5e73, 0x51ed, 0x74f6, 0x8bc4, 0x5c4f, 0x5761, 0x6cfc, 0x9887, 0x5a46, 0x7834, 0x9b44, 0x8feb, 0x7c95, 0x5256, 0x6251, 0x94fa, 0x4ec6, 0x8386, 0x8461, 0x83e9, 0x84b2, 0x57d4, 0x6734, 0x5703, 0x666e, 0x6d66, 0x8c31, 0x66dd, 0x7011, 0x671f, 0x6b3a, 0x6816, 0x621a, 0x59bb, 0x4e03, 0x51c4, 0x6f06, 0x67d2, 0x6c8f, 0x5176, 0x68cb, 0x5947, 0x6b67, 0x7566, 0x5d0e, 0x8110, 0x9f50, 0x65d7, 0x7948, 0x7941, 0x9a91, 0x8d77, 0x5c82, 0x4e5e, 0x4f01, 0x542f, 0x5951, 0x780c, 0x5668, 0x6c14, 0x8fc4, 0x5f03, 0x6c7d, 0x6ce3, 0x8bab, 0x6390, /* 0xc7 */ 0x833e, 0x833f, 0x8341, 0x8342, 0x8344, 0x8345, 0x8348, 0x834a, 0x834b, 0x834c, 0x834d, 0x834e, 0x8353, 0x8355, 0x8356, 0x8357, 0x8358, 0x8359, 0x835d, 0x8362, 0x8370, 0x8371, 0x8372, 0x8373, 0x8374, 0x8375, 0x8376, 0x8379, 0x837a, 0x837e, 0x837f, 0x8380, 0x8381, 0x8382, 0x8383, 0x8384, 0x8387, 0x8388, 0x838a, 0x838b, 0x838c, 0x838d, 0x838f, 0x8390, 0x8391, 0x8394, 0x8395, 0x8396, 0x8397, 0x8399, 0x839a, 0x839d, 0x839f, 0x83a1, 0x83a2, 0x83a3, 0x83a4, 0x83a5, 0x83a6, 0x83a7, 0x83ac, 0x83ad, 0x83ae, 0x83af, 0x83b5, 0x83bb, 0x83be, 0x83bf, 0x83c2, 0x83c3, 0x83c4, 0x83c6, 0x83c8, 0x83c9, 0x83cb, 0x83cd, 0x83ce, 0x83d0, 0x83d1, 0x83d2, 0x83d3, 0x83d5, 0x83d7, 0x83d9, 0x83da, 0x83db, 0x83de, 0x83e2, 0x83e3, 0x83e4, 0x83e6, 0x83e7, 0x83e8, 0x83eb, 0x83ec, 0x83ed, 0x6070, 0x6d3d, 0x7275, 0x6266, 0x948e, 0x94c5, 0x5343, 0x8fc1, 0x7b7e, 0x4edf, 0x8c26, 0x4e7e, 0x9ed4, 0x94b1, 0x94b3, 0x524d, 0x6f5c, 0x9063, 0x6d45, 0x8c34, 0x5811, 0x5d4c, 0x6b20, 0x6b49, 0x67aa, 0x545b, 0x8154, 0x7f8c, 0x5899, 0x8537, 0x5f3a, 0x62a2, 0x6a47, 0x9539, 0x6572, 0x6084, 0x6865, 0x77a7, 0x4e54, 0x4fa8, 0x5de7, 0x9798, 0x64ac, 0x7fd8, 0x5ced, 0x4fcf, 0x7a8d, 0x5207, 0x8304, 0x4e14, 0x602f, 0x7a83, 0x94a6, 0x4fb5, 0x4eb2, 0x79e6, 0x7434, 0x52e4, 0x82b9, 0x64d2, 0x79bd, 0x5bdd, 0x6c81, 0x9752, 0x8f7b, 0x6c22, 0x503e, 0x537f, 0x6e05, 0x64ce, 0x6674, 0x6c30, 0x60c5, 0x9877, 0x8bf7, 0x5e86, 0x743c, 0x7a77, 0x79cb, 0x4e18, 0x90b1, 0x7403, 0x6c42, 0x56da, 0x914b, 0x6cc5, 0x8d8b, 0x533a, 0x86c6, 0x66f2, 0x8eaf, 0x5c48, 0x9a71, 0x6e20, /* 0xc8 */ 0x83ee, 0x83ef, 0x83f3, 0x83f4, 0x83f5, 0x83f6, 0x83f7, 0x83fa, 0x83fb, 0x83fc, 0x83fe, 0x83ff, 0x8400, 0x8402, 0x8405, 0x8407, 0x8408, 0x8409, 0x840a, 0x8410, 0x8412, 0x8413, 0x8414, 0x8415, 0x8416, 0x8417, 0x8419, 0x841a, 0x841b, 0x841e, 0x841f, 0x8420, 0x8421, 0x8422, 0x8423, 0x8429, 0x842a, 0x842b, 0x842c, 0x842d, 0x842e, 0x842f, 0x8430, 0x8432, 0x8433, 0x8434, 0x8435, 0x8436, 0x8437, 0x8439, 0x843a, 0x843b, 0x843e, 0x843f, 0x8440, 0x8441, 0x8442, 0x8443, 0x8444, 0x8445, 0x8447, 0x8448, 0x8449, 0x844a, 0x844b, 0x844c, 0x844d, 0x844e, 0x844f, 0x8450, 0x8452, 0x8453, 0x8454, 0x8455, 0x8456, 0x8458, 0x845d, 0x845e, 0x845f, 0x8460, 0x8462, 0x8464, 0x8465, 0x8466, 0x8467, 0x8468, 0x846a, 0x846e, 0x846f, 0x8470, 0x8472, 0x8474, 0x8477, 0x8479, 0x847b, 0x847c, 0x53d6, 0x5a36, 0x9f8b, 0x8da3, 0x53bb, 0x5708, 0x98a7, 0x6743, 0x919b, 0x6cc9, 0x5168, 0x75ca, 0x62f3, 0x72ac, 0x5238, 0x529d, 0x7f3a, 0x7094, 0x7638, 0x5374, 0x9e4a, 0x69b7, 0x786e, 0x96c0, 0x88d9, 0x7fa4, 0x7136, 0x71c3, 0x5189, 0x67d3, 0x74e4, 0x58e4, 0x6518, 0x56b7, 0x8ba9, 0x9976, 0x6270, 0x7ed5, 0x60f9, 0x70ed, 0x58ec, 0x4ec1, 0x4eba, 0x5fcd, 0x97e7, 0x4efb, 0x8ba4, 0x5203, 0x598a, 0x7eab, 0x6254, 0x4ecd, 0x65e5, 0x620e, 0x8338, 0x84c9, 0x8363, 0x878d, 0x7194, 0x6eb6, 0x5bb9, 0x7ed2, 0x5197, 0x63c9, 0x67d4, 0x8089, 0x8339, 0x8815, 0x5112, 0x5b7a, 0x5982, 0x8fb1, 0x4e73, 0x6c5d, 0x5165, 0x8925, 0x8f6f, 0x962e, 0x854a, 0x745e, 0x9510, 0x95f0, 0x6da6, 0x82e5, 0x5f31, 0x6492, 0x6d12, 0x8428, 0x816e, 0x9cc3, 0x585e, 0x8d5b, 0x4e09, 0x53c1, /* 0xc9 */ 0x847d, 0x847e, 0x847f, 0x8480, 0x8481, 0x8483, 0x8484, 0x8485, 0x8486, 0x848a, 0x848d, 0x848f, 0x8490, 0x8491, 0x8492, 0x8493, 0x8494, 0x8495, 0x8496, 0x8498, 0x849a, 0x849b, 0x849d, 0x849e, 0x849f, 0x84a0, 0x84a2, 0x84a3, 0x84a4, 0x84a5, 0x84a6, 0x84a7, 0x84a8, 0x84a9, 0x84aa, 0x84ab, 0x84ac, 0x84ad, 0x84ae, 0x84b0, 0x84b1, 0x84b3, 0x84b5, 0x84b6, 0x84b7, 0x84bb, 0x84bc, 0x84be, 0x84c0, 0x84c2, 0x84c3, 0x84c5, 0x84c6, 0x84c7, 0x84c8, 0x84cb, 0x84cc, 0x84ce, 0x84cf, 0x84d2, 0x84d4, 0x84d5, 0x84d7, 0x84d8, 0x84d9, 0x84da, 0x84db, 0x84dc, 0x84de, 0x84e1, 0x84e2, 0x84e4, 0x84e7, 0x84e8, 0x84e9, 0x84ea, 0x84eb, 0x84ed, 0x84ee, 0x84ef, 0x84f1, 0x84f2, 0x84f3, 0x84f4, 0x84f5, 0x84f6, 0x84f7, 0x84f8, 0x84f9, 0x84fa, 0x84fb, 0x84fd, 0x84fe, 0x8500, 0x8501, 0x8502, 0x4f1e, 0x6563, 0x6851, 0x55d3, 0x4e27, 0x6414, 0x9a9a, 0x626b, 0x5ac2, 0x745f, 0x8272, 0x6da9, 0x68ee, 0x50e7, 0x838e, 0x7802, 0x6740, 0x5239, 0x6c99, 0x7eb1, 0x50bb, 0x5565, 0x715e, 0x7b5b, 0x6652, 0x73ca, 0x82eb, 0x6749, 0x5c71, 0x5220, 0x717d, 0x886b, 0x95ea, 0x9655, 0x64c5, 0x8d61, 0x81b3, 0x5584, 0x6c55, 0x6247, 0x7f2e, 0x5892, 0x4f24, 0x5546, 0x8d4f, 0x664c, 0x4e0a, 0x5c1a, 0x88f3, 0x68a2, 0x634e, 0x7a0d, 0x70e7, 0x828d, 0x52fa, 0x97f6, 0x5c11, 0x54e8, 0x90b5, 0x7ecd, 0x5962, 0x8d4a, 0x86c7, 0x820c, 0x820d, 0x8d66, 0x6444, 0x5c04, 0x6151, 0x6d89, 0x793e, 0x8bbe, 0x7837, 0x7533, 0x547b, 0x4f38, 0x8eab, 0x6df1, 0x5a20, 0x7ec5, 0x795e, 0x6c88, 0x5ba1, 0x5a76, 0x751a, 0x80be, 0x614e, 0x6e17, 0x58f0, 0x751f, 0x7525, 0x7272, 0x5347, 0x7ef3, /* 0xca */ 0x8503, 0x8504, 0x8505, 0x8506, 0x8507, 0x8508, 0x8509, 0x850a, 0x850b, 0x850d, 0x850e, 0x850f, 0x8510, 0x8512, 0x8514, 0x8515, 0x8516, 0x8518, 0x8519, 0x851b, 0x851c, 0x851d, 0x851e, 0x8520, 0x8522, 0x8523, 0x8524, 0x8525, 0x8526, 0x8527, 0x8528, 0x8529, 0x852a, 0x852d, 0x852e, 0x852f, 0x8530, 0x8531, 0x8532, 0x8533, 0x8534, 0x8535, 0x8536, 0x853e, 0x853f, 0x8540, 0x8541, 0x8542, 0x8544, 0x8545, 0x8546, 0x8547, 0x854b, 0x854c, 0x854d, 0x854e, 0x854f, 0x8550, 0x8551, 0x8552, 0x8553, 0x8554, 0x8555, 0x8557, 0x8558, 0x855a, 0x855b, 0x855c, 0x855d, 0x855f, 0x8560, 0x8561, 0x8562, 0x8563, 0x8565, 0x8566, 0x8567, 0x8569, 0x856a, 0x856b, 0x856c, 0x856d, 0x856e, 0x856f, 0x8570, 0x8571, 0x8573, 0x8575, 0x8576, 0x8577, 0x8578, 0x857c, 0x857d, 0x857f, 0x8580, 0x8581, 0x7701, 0x76db, 0x5269, 0x80dc, 0x5723, 0x5e08, 0x5931, 0x72ee, 0x65bd, 0x6e7f, 0x8bd7, 0x5c38, 0x8671, 0x5341, 0x77f3, 0x62fe, 0x65f6, 0x4ec0, 0x98df, 0x8680, 0x5b9e, 0x8bc6, 0x53f2, 0x77e2, 0x4f7f, 0x5c4e, 0x9a76, 0x59cb, 0x5f0f, 0x793a, 0x58eb, 0x4e16, 0x67ff, 0x4e8b, 0x62ed, 0x8a93, 0x901d, 0x52bf, 0x662f, 0x55dc, 0x566c, 0x9002, 0x4ed5, 0x4f8d, 0x91ca, 0x9970, 0x6c0f, 0x5e02, 0x6043, 0x5ba4, 0x89c6, 0x8bd5, 0x6536, 0x624b, 0x9996, 0x5b88, 0x5bff, 0x6388, 0x552e, 0x53d7, 0x7626, 0x517d, 0x852c, 0x67a2, 0x68b3, 0x6b8a, 0x6292, 0x8f93, 0x53d4, 0x8212, 0x6dd1, 0x758f, 0x4e66, 0x8d4e, 0x5b70, 0x719f, 0x85af, 0x6691, 0x66d9, 0x7f72, 0x8700, 0x9ecd, 0x9f20, 0x5c5e, 0x672f, 0x8ff0, 0x6811, 0x675f, 0x620d, 0x7ad6, 0x5885, 0x5eb6, 0x6570, 0x6f31, /* 0xcb */ 0x8582, 0x8583, 0x8586, 0x8588, 0x8589, 0x858a, 0x858b, 0x858c, 0x858d, 0x858e, 0x8590, 0x8591, 0x8592, 0x8593, 0x8594, 0x8595, 0x8596, 0x8597, 0x8598, 0x8599, 0x859a, 0x859d, 0x859e, 0x859f, 0x85a0, 0x85a1, 0x85a2, 0x85a3, 0x85a5, 0x85a6, 0x85a7, 0x85a9, 0x85ab, 0x85ac, 0x85ad, 0x85b1, 0x85b2, 0x85b3, 0x85b4, 0x85b5, 0x85b6, 0x85b8, 0x85ba, 0x85bb, 0x85bc, 0x85bd, 0x85be, 0x85bf, 0x85c0, 0x85c2, 0x85c3, 0x85c4, 0x85c5, 0x85c6, 0x85c7, 0x85c8, 0x85ca, 0x85cb, 0x85cc, 0x85cd, 0x85ce, 0x85d1, 0x85d2, 0x85d4, 0x85d6, 0x85d7, 0x85d8, 0x85d9, 0x85da, 0x85db, 0x85dd, 0x85de, 0x85df, 0x85e0, 0x85e1, 0x85e2, 0x85e3, 0x85e5, 0x85e6, 0x85e7, 0x85e8, 0x85ea, 0x85eb, 0x85ec, 0x85ed, 0x85ee, 0x85ef, 0x85f0, 0x85f1, 0x85f2, 0x85f3, 0x85f4, 0x85f5, 0x85f6, 0x85f7, 0x85f8, 0x6055, 0x5237, 0x800d, 0x6454, 0x8870, 0x7529, 0x5e05, 0x6813, 0x62f4, 0x971c, 0x53cc, 0x723d, 0x8c01, 0x6c34, 0x7761, 0x7a0e, 0x542e, 0x77ac, 0x987a, 0x821c, 0x8bf4, 0x7855, 0x6714, 0x70c1, 0x65af, 0x6495, 0x5636, 0x601d, 0x79c1, 0x53f8, 0x4e1d, 0x6b7b, 0x8086, 0x5bfa, 0x55e3, 0x56db, 0x4f3a, 0x4f3c, 0x9972, 0x5df3, 0x677e, 0x8038, 0x6002, 0x9882, 0x9001, 0x5b8b, 0x8bbc, 0x8bf5, 0x641c, 0x8258, 0x64de, 0x55fd, 0x82cf, 0x9165, 0x4fd7, 0x7d20, 0x901f, 0x7c9f, 0x50f3, 0x5851, 0x6eaf, 0x5bbf, 0x8bc9, 0x8083, 0x9178, 0x849c, 0x7b97, 0x867d, 0x968b, 0x968f, 0x7ee5, 0x9ad3, 0x788e, 0x5c81, 0x7a57, 0x9042, 0x96a7, 0x795f, 0x5b59, 0x635f, 0x7b0b, 0x84d1, 0x68ad, 0x5506, 0x7f29, 0x7410, 0x7d22, 0x9501, 0x6240, 0x584c, 0x4ed6, 0x5b83, 0x5979, 0x5854, /* 0xcc */ 0x85f9, 0x85fa, 0x85fc, 0x85fd, 0x85fe, 0x8600, 0x8601, 0x8602, 0x8603, 0x8604, 0x8606, 0x8607, 0x8608, 0x8609, 0x860a, 0x860b, 0x860c, 0x860d, 0x860e, 0x860f, 0x8610, 0x8612, 0x8613, 0x8614, 0x8615, 0x8617, 0x8618, 0x8619, 0x861a, 0x861b, 0x861c, 0x861d, 0x861e, 0x861f, 0x8620, 0x8621, 0x8622, 0x8623, 0x8624, 0x8625, 0x8626, 0x8628, 0x862a, 0x862b, 0x862c, 0x862d, 0x862e, 0x862f, 0x8630, 0x8631, 0x8632, 0x8633, 0x8634, 0x8635, 0x8636, 0x8637, 0x8639, 0x863a, 0x863b, 0x863d, 0x863e, 0x863f, 0x8640, 0x8641, 0x8642, 0x8643, 0x8644, 0x8645, 0x8646, 0x8647, 0x8648, 0x8649, 0x864a, 0x864b, 0x864c, 0x8652, 0x8653, 0x8655, 0x8656, 0x8657, 0x8658, 0x8659, 0x865b, 0x865c, 0x865d, 0x865f, 0x8660, 0x8661, 0x8663, 0x8664, 0x8665, 0x8666, 0x8667, 0x8668, 0x8669, 0x866a, 0x736d, 0x631e, 0x8e4b, 0x8e0f, 0x80ce, 0x82d4, 0x62ac, 0x53f0, 0x6cf0, 0x915e, 0x592a, 0x6001, 0x6c70, 0x574d, 0x644a, 0x8d2a, 0x762b, 0x6ee9, 0x575b, 0x6a80, 0x75f0, 0x6f6d, 0x8c2d, 0x8c08, 0x5766, 0x6bef, 0x8892, 0x78b3, 0x63a2, 0x53f9, 0x70ad, 0x6c64, 0x5858, 0x642a, 0x5802, 0x68e0, 0x819b, 0x5510, 0x7cd6, 0x5018, 0x8eba, 0x6dcc, 0x8d9f, 0x70eb, 0x638f, 0x6d9b, 0x6ed4, 0x7ee6, 0x8404, 0x6843, 0x9003, 0x6dd8, 0x9676, 0x8ba8, 0x5957, 0x7279, 0x85e4, 0x817e, 0x75bc, 0x8a8a, 0x68af, 0x5254, 0x8e22, 0x9511, 0x63d0, 0x9898, 0x8e44, 0x557c, 0x4f53, 0x66ff, 0x568f, 0x60d5, 0x6d95, 0x5243, 0x5c49, 0x5929, 0x6dfb, 0x586b, 0x7530, 0x751c, 0x606c, 0x8214, 0x8146, 0x6311, 0x6761, 0x8fe2, 0x773a, 0x8df3, 0x8d34, 0x94c1, 0x5e16, 0x5385, 0x542c, 0x70c3, /* 0xcd */ 0x866d, 0x866f, 0x8670, 0x8672, 0x8673, 0x8674, 0x8675, 0x8676, 0x8677, 0x8678, 0x8683, 0x8684, 0x8685, 0x8686, 0x8687, 0x8688, 0x8689, 0x868e, 0x868f, 0x8690, 0x8691, 0x8692, 0x8694, 0x8696, 0x8697, 0x8698, 0x8699, 0x869a, 0x869b, 0x869e, 0x869f, 0x86a0, 0x86a1, 0x86a2, 0x86a5, 0x86a6, 0x86ab, 0x86ad, 0x86ae, 0x86b2, 0x86b3, 0x86b7, 0x86b8, 0x86b9, 0x86bb, 0x86bc, 0x86bd, 0x86be, 0x86bf, 0x86c1, 0x86c2, 0x86c3, 0x86c5, 0x86c8, 0x86cc, 0x86cd, 0x86d2, 0x86d3, 0x86d5, 0x86d6, 0x86d7, 0x86da, 0x86dc, 0x86dd, 0x86e0, 0x86e1, 0x86e2, 0x86e3, 0x86e5, 0x86e6, 0x86e7, 0x86e8, 0x86ea, 0x86eb, 0x86ec, 0x86ef, 0x86f5, 0x86f6, 0x86f7, 0x86fa, 0x86fb, 0x86fc, 0x86fd, 0x86ff, 0x8701, 0x8704, 0x8705, 0x8706, 0x870b, 0x870c, 0x870e, 0x870f, 0x8710, 0x8711, 0x8714, 0x8716, 0x6c40, 0x5ef7, 0x505c, 0x4ead, 0x5ead, 0x633a, 0x8247, 0x901a, 0x6850, 0x916e, 0x77b3, 0x540c, 0x94dc, 0x5f64, 0x7ae5, 0x6876, 0x6345, 0x7b52, 0x7edf, 0x75db, 0x5077, 0x6295, 0x5934, 0x900f, 0x51f8, 0x79c3, 0x7a81, 0x56fe, 0x5f92, 0x9014, 0x6d82, 0x5c60, 0x571f, 0x5410, 0x5154, 0x6e4d, 0x56e2, 0x63a8, 0x9893, 0x817f, 0x8715, 0x892a, 0x9000, 0x541e, 0x5c6f, 0x81c0, 0x62d6, 0x6258, 0x8131, 0x9e35, 0x9640, 0x9a6e, 0x9a7c, 0x692d, 0x59a5, 0x62d3, 0x553e, 0x6316, 0x54c7, 0x86d9, 0x6d3c, 0x5a03, 0x74e6, 0x889c, 0x6b6a, 0x5916, 0x8c4c, 0x5f2f, 0x6e7e, 0x73a9, 0x987d, 0x4e38, 0x70f7, 0x5b8c, 0x7897, 0x633d, 0x665a, 0x7696, 0x60cb, 0x5b9b, 0x5a49, 0x4e07, 0x8155, 0x6c6a, 0x738b, 0x4ea1, 0x6789, 0x7f51, 0x5f80, 0x65fa, 0x671b, 0x5fd8, 0x5984, 0x5a01, /* 0xce */ 0x8719, 0x871b, 0x871d, 0x871f, 0x8720, 0x8724, 0x8726, 0x8727, 0x8728, 0x872a, 0x872b, 0x872c, 0x872d, 0x872f, 0x8730, 0x8732, 0x8733, 0x8735, 0x8736, 0x8738, 0x8739, 0x873a, 0x873c, 0x873d, 0x8740, 0x8741, 0x8742, 0x8743, 0x8744, 0x8745, 0x8746, 0x874a, 0x874b, 0x874d, 0x874f, 0x8750, 0x8751, 0x8752, 0x8754, 0x8755, 0x8756, 0x8758, 0x875a, 0x875b, 0x875c, 0x875d, 0x875e, 0x875f, 0x8761, 0x8762, 0x8766, 0x8767, 0x8768, 0x8769, 0x876a, 0x876b, 0x876c, 0x876d, 0x876f, 0x8771, 0x8772, 0x8773, 0x8775, 0x8777, 0x8778, 0x8779, 0x877a, 0x877f, 0x8780, 0x8781, 0x8784, 0x8786, 0x8787, 0x8789, 0x878a, 0x878c, 0x878e, 0x878f, 0x8790, 0x8791, 0x8792, 0x8794, 0x8795, 0x8796, 0x8798, 0x8799, 0x879a, 0x879b, 0x879c, 0x879d, 0x879e, 0x87a0, 0x87a1, 0x87a2, 0x87a3, 0x87a4, 0x5dcd, 0x5fae, 0x5371, 0x97e6, 0x8fdd, 0x6845, 0x56f4, 0x552f, 0x60df, 0x4e3a, 0x6f4d, 0x7ef4, 0x82c7, 0x840e, 0x59d4, 0x4f1f, 0x4f2a, 0x5c3e, 0x7eac, 0x672a, 0x851a, 0x5473, 0x754f, 0x80c3, 0x5582, 0x9b4f, 0x4f4d, 0x6e2d, 0x8c13, 0x5c09, 0x6170, 0x536b, 0x761f, 0x6e29, 0x868a, 0x6587, 0x95fb, 0x7eb9, 0x543b, 0x7a33, 0x7d0a, 0x95ee, 0x55e1, 0x7fc1, 0x74ee, 0x631d, 0x8717, 0x6da1, 0x7a9d, 0x6211, 0x65a1, 0x5367, 0x63e1, 0x6c83, 0x5deb, 0x545c, 0x94a8, 0x4e4c, 0x6c61, 0x8bec, 0x5c4b, 0x65e0, 0x829c, 0x68a7, 0x543e, 0x5434, 0x6bcb, 0x6b66, 0x4e94, 0x6342, 0x5348, 0x821e, 0x4f0d, 0x4fae, 0x575e, 0x620a, 0x96fe, 0x6664, 0x7269, 0x52ff, 0x52a1, 0x609f, 0x8bef, 0x6614, 0x7199, 0x6790, 0x897f, 0x7852, 0x77fd, 0x6670, 0x563b, 0x5438, 0x9521, 0x727a, /* 0xcf */ 0x87a5, 0x87a6, 0x87a7, 0x87a9, 0x87aa, 0x87ae, 0x87b0, 0x87b1, 0x87b2, 0x87b4, 0x87b6, 0x87b7, 0x87b8, 0x87b9, 0x87bb, 0x87bc, 0x87be, 0x87bf, 0x87c1, 0x87c2, 0x87c3, 0x87c4, 0x87c5, 0x87c7, 0x87c8, 0x87c9, 0x87cc, 0x87cd, 0x87ce, 0x87cf, 0x87d0, 0x87d4, 0x87d5, 0x87d6, 0x87d7, 0x87d8, 0x87d9, 0x87da, 0x87dc, 0x87dd, 0x87de, 0x87df, 0x87e1, 0x87e2, 0x87e3, 0x87e4, 0x87e6, 0x87e7, 0x87e8, 0x87e9, 0x87eb, 0x87ec, 0x87ed, 0x87ef, 0x87f0, 0x87f1, 0x87f2, 0x87f3, 0x87f4, 0x87f5, 0x87f6, 0x87f7, 0x87f8, 0x87fa, 0x87fb, 0x87fc, 0x87fd, 0x87ff, 0x8800, 0x8801, 0x8802, 0x8804, 0x8805, 0x8806, 0x8807, 0x8808, 0x8809, 0x880b, 0x880c, 0x880d, 0x880e, 0x880f, 0x8810, 0x8811, 0x8812, 0x8814, 0x8817, 0x8818, 0x8819, 0x881a, 0x881c, 0x881d, 0x881e, 0x881f, 0x8820, 0x8823, 0x7a00, 0x606f, 0x5e0c, 0x6089, 0x819d, 0x5915, 0x60dc, 0x7184, 0x70ef, 0x6eaa, 0x6c50, 0x7280, 0x6a84, 0x88ad, 0x5e2d, 0x4e60, 0x5ab3, 0x559c, 0x94e3, 0x6d17, 0x7cfb, 0x9699, 0x620f, 0x7ec6, 0x778e, 0x867e, 0x5323, 0x971e, 0x8f96, 0x6687, 0x5ce1, 0x4fa0, 0x72ed, 0x4e0b, 0x53a6, 0x590f, 0x5413, 0x6380, 0x9528, 0x5148, 0x4ed9, 0x9c9c, 0x7ea4, 0x54b8, 0x8d24, 0x8854, 0x8237, 0x95f2, 0x6d8e, 0x5f26, 0x5acc, 0x663e, 0x9669, 0x73b0, 0x732e, 0x53bf, 0x817a, 0x9985, 0x7fa1, 0x5baa, 0x9677, 0x9650, 0x7ebf, 0x76f8, 0x53a2, 0x9576, 0x9999, 0x7bb1, 0x8944, 0x6e58, 0x4e61, 0x7fd4, 0x7965, 0x8be6, 0x60f3, 0x54cd, 0x4eab, 0x9879, 0x5df7, 0x6a61, 0x50cf, 0x5411, 0x8c61, 0x8427, 0x785d, 0x9704, 0x524a, 0x54ee, 0x56a3, 0x9500, 0x6d88, 0x5bb5, 0x6dc6, 0x6653, /* 0xd0 */ 0x8824, 0x8825, 0x8826, 0x8827, 0x8828, 0x8829, 0x882a, 0x882b, 0x882c, 0x882d, 0x882e, 0x882f, 0x8830, 0x8831, 0x8833, 0x8834, 0x8835, 0x8836, 0x8837, 0x8838, 0x883a, 0x883b, 0x883d, 0x883e, 0x883f, 0x8841, 0x8842, 0x8843, 0x8846, 0x8847, 0x8848, 0x8849, 0x884a, 0x884b, 0x884e, 0x884f, 0x8850, 0x8851, 0x8852, 0x8853, 0x8855, 0x8856, 0x8858, 0x885a, 0x885b, 0x885c, 0x885d, 0x885e, 0x885f, 0x8860, 0x8866, 0x8867, 0x886a, 0x886d, 0x886f, 0x8871, 0x8873, 0x8874, 0x8875, 0x8876, 0x8878, 0x8879, 0x887a, 0x887b, 0x887c, 0x8880, 0x8883, 0x8886, 0x8887, 0x8889, 0x888a, 0x888c, 0x888e, 0x888f, 0x8890, 0x8891, 0x8893, 0x8894, 0x8895, 0x8897, 0x8898, 0x8899, 0x889a, 0x889b, 0x889d, 0x889e, 0x889f, 0x88a0, 0x88a1, 0x88a3, 0x88a5, 0x88a6, 0x88a7, 0x88a8, 0x88a9, 0x88aa, 0x5c0f, 0x5b5d, 0x6821, 0x8096, 0x5578, 0x7b11, 0x6548, 0x6954, 0x4e9b, 0x6b47, 0x874e, 0x978b, 0x534f, 0x631f, 0x643a, 0x90aa, 0x659c, 0x80c1, 0x8c10, 0x5199, 0x68b0, 0x5378, 0x87f9, 0x61c8, 0x6cc4, 0x6cfb, 0x8c22, 0x5c51, 0x85aa, 0x82af, 0x950c, 0x6b23, 0x8f9b, 0x65b0, 0x5ffb, 0x5fc3, 0x4fe1, 0x8845, 0x661f, 0x8165, 0x7329, 0x60fa, 0x5174, 0x5211, 0x578b, 0x5f62, 0x90a2, 0x884c, 0x9192, 0x5e78, 0x674f, 0x6027, 0x59d3, 0x5144, 0x51f6, 0x80f8, 0x5308, 0x6c79, 0x96c4, 0x718a, 0x4f11, 0x4fee, 0x7f9e, 0x673d, 0x55c5, 0x9508, 0x79c0, 0x8896, 0x7ee3, 0x589f, 0x620c, 0x9700, 0x865a, 0x5618, 0x987b, 0x5f90, 0x8bb8, 0x84c4, 0x9157, 0x53d9, 0x65ed, 0x5e8f, 0x755c, 0x6064, 0x7d6e, 0x5a7f, 0x7eea, 0x7eed, 0x8f69, 0x55a7, 0x5ba3, 0x60ac, 0x65cb, 0x7384, /* 0xd1 */ 0x88ac, 0x88ae, 0x88af, 0x88b0, 0x88b2, 0x88b3, 0x88b4, 0x88b5, 0x88b6, 0x88b8, 0x88b9, 0x88ba, 0x88bb, 0x88bd, 0x88be, 0x88bf, 0x88c0, 0x88c3, 0x88c4, 0x88c7, 0x88c8, 0x88ca, 0x88cb, 0x88cc, 0x88cd, 0x88cf, 0x88d0, 0x88d1, 0x88d3, 0x88d6, 0x88d7, 0x88da, 0x88db, 0x88dc, 0x88dd, 0x88de, 0x88e0, 0x88e1, 0x88e6, 0x88e7, 0x88e9, 0x88ea, 0x88eb, 0x88ec, 0x88ed, 0x88ee, 0x88ef, 0x88f2, 0x88f5, 0x88f6, 0x88f7, 0x88fa, 0x88fb, 0x88fd, 0x88ff, 0x8900, 0x8901, 0x8903, 0x8904, 0x8905, 0x8906, 0x8907, 0x8908, 0x8909, 0x890b, 0x890c, 0x890d, 0x890e, 0x890f, 0x8911, 0x8914, 0x8915, 0x8916, 0x8917, 0x8918, 0x891c, 0x891d, 0x891e, 0x891f, 0x8920, 0x8922, 0x8923, 0x8924, 0x8926, 0x8927, 0x8928, 0x8929, 0x892c, 0x892d, 0x892e, 0x892f, 0x8931, 0x8932, 0x8933, 0x8935, 0x8937, 0x9009, 0x7663, 0x7729, 0x7eda, 0x9774, 0x859b, 0x5b66, 0x7a74, 0x96ea, 0x8840, 0x52cb, 0x718f, 0x5faa, 0x65ec, 0x8be2, 0x5bfb, 0x9a6f, 0x5de1, 0x6b89, 0x6c5b, 0x8bad, 0x8baf, 0x900a, 0x8fc5, 0x538b, 0x62bc, 0x9e26, 0x9e2d, 0x5440, 0x4e2b, 0x82bd, 0x7259, 0x869c, 0x5d16, 0x8859, 0x6daf, 0x96c5, 0x54d1, 0x4e9a, 0x8bb6, 0x7109, 0x54bd, 0x9609, 0x70df, 0x6df9, 0x76d0, 0x4e25, 0x7814, 0x8712, 0x5ca9, 0x5ef6, 0x8a00, 0x989c, 0x960e, 0x708e, 0x6cbf, 0x5944, 0x63a9, 0x773c, 0x884d, 0x6f14, 0x8273, 0x5830, 0x71d5, 0x538c, 0x781a, 0x96c1, 0x5501, 0x5f66, 0x7130, 0x5bb4, 0x8c1a, 0x9a8c, 0x6b83, 0x592e, 0x9e2f, 0x79e7, 0x6768, 0x626c, 0x4f6f, 0x75a1, 0x7f8a, 0x6d0b, 0x9633, 0x6c27, 0x4ef0, 0x75d2, 0x517b, 0x6837, 0x6f3e, 0x9080, 0x8170, 0x5996, 0x7476, /* 0xd2 */ 0x8938, 0x8939, 0x893a, 0x893b, 0x893c, 0x893d, 0x893e, 0x893f, 0x8940, 0x8942, 0x8943, 0x8945, 0x8946, 0x8947, 0x8948, 0x8949, 0x894a, 0x894b, 0x894c, 0x894d, 0x894e, 0x894f, 0x8950, 0x8951, 0x8952, 0x8953, 0x8954, 0x8955, 0x8956, 0x8957, 0x8958, 0x8959, 0x895a, 0x895b, 0x895c, 0x895d, 0x8960, 0x8961, 0x8962, 0x8963, 0x8964, 0x8965, 0x8967, 0x8968, 0x8969, 0x896a, 0x896b, 0x896c, 0x896d, 0x896e, 0x896f, 0x8970, 0x8971, 0x8972, 0x8973, 0x8974, 0x8975, 0x8976, 0x8977, 0x8978, 0x8979, 0x897a, 0x897c, 0x897d, 0x897e, 0x8980, 0x8982, 0x8984, 0x8985, 0x8987, 0x8988, 0x8989, 0x898a, 0x898b, 0x898c, 0x898d, 0x898e, 0x898f, 0x8990, 0x8991, 0x8992, 0x8993, 0x8994, 0x8995, 0x8996, 0x8997, 0x8998, 0x8999, 0x899a, 0x899b, 0x899c, 0x899d, 0x899e, 0x899f, 0x89a0, 0x89a1, 0x6447, 0x5c27, 0x9065, 0x7a91, 0x8c23, 0x59da, 0x54ac, 0x8200, 0x836f, 0x8981, 0x8000, 0x6930, 0x564e, 0x8036, 0x7237, 0x91ce, 0x51b6, 0x4e5f, 0x9875, 0x6396, 0x4e1a, 0x53f6, 0x66f3, 0x814b, 0x591c, 0x6db2, 0x4e00, 0x58f9, 0x533b, 0x63d6, 0x94f1, 0x4f9d, 0x4f0a, 0x8863, 0x9890, 0x5937, 0x9057, 0x79fb, 0x4eea, 0x80f0, 0x7591, 0x6c82, 0x5b9c, 0x59e8, 0x5f5d, 0x6905, 0x8681, 0x501a, 0x5df2, 0x4e59, 0x77e3, 0x4ee5, 0x827a, 0x6291, 0x6613, 0x9091, 0x5c79, 0x4ebf, 0x5f79, 0x81c6, 0x9038, 0x8084, 0x75ab, 0x4ea6, 0x88d4, 0x610f, 0x6bc5, 0x5fc6, 0x4e49, 0x76ca, 0x6ea2, 0x8be3, 0x8bae, 0x8c0a, 0x8bd1, 0x5f02, 0x7ffc, 0x7fcc, 0x7ece, 0x8335, 0x836b, 0x56e0, 0x6bb7, 0x97f3, 0x9634, 0x59fb, 0x541f, 0x94f6, 0x6deb, 0x5bc5, 0x996e, 0x5c39, 0x5f15, 0x9690, /* 0xd3 */ 0x89a2, 0x89a3, 0x89a4, 0x89a5, 0x89a6, 0x89a7, 0x89a8, 0x89a9, 0x89aa, 0x89ab, 0x89ac, 0x89ad, 0x89ae, 0x89af, 0x89b0, 0x89b1, 0x89b2, 0x89b3, 0x89b4, 0x89b5, 0x89b6, 0x89b7, 0x89b8, 0x89b9, 0x89ba, 0x89bb, 0x89bc, 0x89bd, 0x89be, 0x89bf, 0x89c0, 0x89c3, 0x89cd, 0x89d3, 0x89d4, 0x89d5, 0x89d7, 0x89d8, 0x89d9, 0x89db, 0x89dd, 0x89df, 0x89e0, 0x89e1, 0x89e2, 0x89e4, 0x89e7, 0x89e8, 0x89e9, 0x89ea, 0x89ec, 0x89ed, 0x89ee, 0x89f0, 0x89f1, 0x89f2, 0x89f4, 0x89f5, 0x89f6, 0x89f7, 0x89f8, 0x89f9, 0x89fa, 0x89fb, 0x89fc, 0x89fd, 0x89fe, 0x89ff, 0x8a01, 0x8a02, 0x8a03, 0x8a04, 0x8a05, 0x8a06, 0x8a08, 0x8a09, 0x8a0a, 0x8a0b, 0x8a0c, 0x8a0d, 0x8a0e, 0x8a0f, 0x8a10, 0x8a11, 0x8a12, 0x8a13, 0x8a14, 0x8a15, 0x8a16, 0x8a17, 0x8a18, 0x8a19, 0x8a1a, 0x8a1b, 0x8a1c, 0x8a1d, 0x5370, 0x82f1, 0x6a31, 0x5a74, 0x9e70, 0x5e94, 0x7f28, 0x83b9, 0x8424, 0x8425, 0x8367, 0x8747, 0x8fce, 0x8d62, 0x76c8, 0x5f71, 0x9896, 0x786c, 0x6620, 0x54df, 0x62e5, 0x4f63, 0x81c3, 0x75c8, 0x5eb8, 0x96cd, 0x8e0a, 0x86f9, 0x548f, 0x6cf3, 0x6d8c, 0x6c38, 0x607f, 0x52c7, 0x7528, 0x5e7d, 0x4f18, 0x60a0, 0x5fe7, 0x5c24, 0x7531, 0x90ae, 0x94c0, 0x72b9, 0x6cb9, 0x6e38, 0x9149, 0x6709, 0x53cb, 0x53f3, 0x4f51, 0x91c9, 0x8bf1, 0x53c8, 0x5e7c, 0x8fc2, 0x6de4, 0x4e8e, 0x76c2, 0x6986, 0x865e, 0x611a, 0x8206, 0x4f59, 0x4fde, 0x903e, 0x9c7c, 0x6109, 0x6e1d, 0x6e14, 0x9685, 0x4e88, 0x5a31, 0x96e8, 0x4e0e, 0x5c7f, 0x79b9, 0x5b87, 0x8bed, 0x7fbd, 0x7389, 0x57df, 0x828b, 0x90c1, 0x5401, 0x9047, 0x55bb, 0x5cea, 0x5fa1, 0x6108, 0x6b32, 0x72f1, 0x80b2, 0x8a89, /* 0xd4 */ 0x8a1e, 0x8a1f, 0x8a20, 0x8a21, 0x8a22, 0x8a23, 0x8a24, 0x8a25, 0x8a26, 0x8a27, 0x8a28, 0x8a29, 0x8a2a, 0x8a2b, 0x8a2c, 0x8a2d, 0x8a2e, 0x8a2f, 0x8a30, 0x8a31, 0x8a32, 0x8a33, 0x8a34, 0x8a35, 0x8a36, 0x8a37, 0x8a38, 0x8a39, 0x8a3a, 0x8a3b, 0x8a3c, 0x8a3d, 0x8a3f, 0x8a40, 0x8a41, 0x8a42, 0x8a43, 0x8a44, 0x8a45, 0x8a46, 0x8a47, 0x8a49, 0x8a4a, 0x8a4b, 0x8a4c, 0x8a4d, 0x8a4e, 0x8a4f, 0x8a50, 0x8a51, 0x8a52, 0x8a53, 0x8a54, 0x8a55, 0x8a56, 0x8a57, 0x8a58, 0x8a59, 0x8a5a, 0x8a5b, 0x8a5c, 0x8a5d, 0x8a5e, 0x8a5f, 0x8a60, 0x8a61, 0x8a62, 0x8a63, 0x8a64, 0x8a65, 0x8a66, 0x8a67, 0x8a68, 0x8a69, 0x8a6a, 0x8a6b, 0x8a6c, 0x8a6d, 0x8a6e, 0x8a6f, 0x8a70, 0x8a71, 0x8a72, 0x8a73, 0x8a74, 0x8a75, 0x8a76, 0x8a77, 0x8a78, 0x8a7a, 0x8a7b, 0x8a7c, 0x8a7d, 0x8a7e, 0x8a7f, 0x8a80, 0x6d74, 0x5bd3, 0x88d5, 0x9884, 0x8c6b, 0x9a6d, 0x9e33, 0x6e0a, 0x51a4, 0x5143, 0x57a3, 0x8881, 0x539f, 0x63f4, 0x8f95, 0x56ed, 0x5458, 0x5706, 0x733f, 0x6e90, 0x7f18, 0x8fdc, 0x82d1, 0x613f, 0x6028, 0x9662, 0x66f0, 0x7ea6, 0x8d8a, 0x8dc3, 0x94a5, 0x5cb3, 0x7ca4, 0x6708, 0x60a6, 0x9605, 0x8018, 0x4e91, 0x90e7, 0x5300, 0x9668, 0x5141, 0x8fd0, 0x8574, 0x915d, 0x6655, 0x97f5, 0x5b55, 0x531d, 0x7838, 0x6742, 0x683d, 0x54c9, 0x707e, 0x5bb0, 0x8f7d, 0x518d, 0x5728, 0x54b1, 0x6512, 0x6682, 0x8d5e, 0x8d43, 0x810f, 0x846c, 0x906d, 0x7cdf, 0x51ff, 0x85fb, 0x67a3, 0x65e9, 0x6fa1, 0x86a4, 0x8e81, 0x566a, 0x9020, 0x7682, 0x7076, 0x71e5, 0x8d23, 0x62e9, 0x5219, 0x6cfd, 0x8d3c, 0x600e, 0x589e, 0x618e, 0x66fe, 0x8d60, 0x624e, 0x55b3, 0x6e23, 0x672d, 0x8f67, /* 0xd5 */ 0x8a81, 0x8a82, 0x8a83, 0x8a84, 0x8a85, 0x8a86, 0x8a87, 0x8a88, 0x8a8b, 0x8a8c, 0x8a8d, 0x8a8e, 0x8a8f, 0x8a90, 0x8a91, 0x8a92, 0x8a94, 0x8a95, 0x8a96, 0x8a97, 0x8a98, 0x8a99, 0x8a9a, 0x8a9b, 0x8a9c, 0x8a9d, 0x8a9e, 0x8a9f, 0x8aa0, 0x8aa1, 0x8aa2, 0x8aa3, 0x8aa4, 0x8aa5, 0x8aa6, 0x8aa7, 0x8aa8, 0x8aa9, 0x8aaa, 0x8aab, 0x8aac, 0x8aad, 0x8aae, 0x8aaf, 0x8ab0, 0x8ab1, 0x8ab2, 0x8ab3, 0x8ab4, 0x8ab5, 0x8ab6, 0x8ab7, 0x8ab8, 0x8ab9, 0x8aba, 0x8abb, 0x8abc, 0x8abd, 0x8abe, 0x8abf, 0x8ac0, 0x8ac1, 0x8ac2, 0x8ac3, 0x8ac4, 0x8ac5, 0x8ac6, 0x8ac7, 0x8ac8, 0x8ac9, 0x8aca, 0x8acb, 0x8acc, 0x8acd, 0x8ace, 0x8acf, 0x8ad0, 0x8ad1, 0x8ad2, 0x8ad3, 0x8ad4, 0x8ad5, 0x8ad6, 0x8ad7, 0x8ad8, 0x8ad9, 0x8ada, 0x8adb, 0x8adc, 0x8add, 0x8ade, 0x8adf, 0x8ae0, 0x8ae1, 0x8ae2, 0x8ae3, 0x94e1, 0x95f8, 0x7728, 0x6805, 0x69a8, 0x548b, 0x4e4d, 0x70b8, 0x8bc8, 0x6458, 0x658b, 0x5b85, 0x7a84, 0x503a, 0x5be8, 0x77bb, 0x6be1, 0x8a79, 0x7c98, 0x6cbe, 0x76cf, 0x65a9, 0x8f97, 0x5d2d, 0x5c55, 0x8638, 0x6808, 0x5360, 0x6218, 0x7ad9, 0x6e5b, 0x7efd, 0x6a1f, 0x7ae0, 0x5f70, 0x6f33, 0x5f20, 0x638c, 0x6da8, 0x6756, 0x4e08, 0x5e10, 0x8d26, 0x4ed7, 0x80c0, 0x7634, 0x969c, 0x62db, 0x662d, 0x627e, 0x6cbc, 0x8d75, 0x7167, 0x7f69, 0x5146, 0x8087, 0x53ec, 0x906e, 0x6298, 0x54f2, 0x86f0, 0x8f99, 0x8005, 0x9517, 0x8517, 0x8fd9, 0x6d59, 0x73cd, 0x659f, 0x771f, 0x7504, 0x7827, 0x81fb, 0x8d1e, 0x9488, 0x4fa6, 0x6795, 0x75b9, 0x8bca, 0x9707, 0x632f, 0x9547, 0x9635, 0x84b8, 0x6323, 0x7741, 0x5f81, 0x72f0, 0x4e89, 0x6014, 0x6574, 0x62ef, 0x6b63, 0x653f, /* 0xd6 */ 0x8ae4, 0x8ae5, 0x8ae6, 0x8ae7, 0x8ae8, 0x8ae9, 0x8aea, 0x8aeb, 0x8aec, 0x8aed, 0x8aee, 0x8aef, 0x8af0, 0x8af1, 0x8af2, 0x8af3, 0x8af4, 0x8af5, 0x8af6, 0x8af7, 0x8af8, 0x8af9, 0x8afa, 0x8afb, 0x8afc, 0x8afd, 0x8afe, 0x8aff, 0x8b00, 0x8b01, 0x8b02, 0x8b03, 0x8b04, 0x8b05, 0x8b06, 0x8b08, 0x8b09, 0x8b0a, 0x8b0b, 0x8b0c, 0x8b0d, 0x8b0e, 0x8b0f, 0x8b10, 0x8b11, 0x8b12, 0x8b13, 0x8b14, 0x8b15, 0x8b16, 0x8b17, 0x8b18, 0x8b19, 0x8b1a, 0x8b1b, 0x8b1c, 0x8b1d, 0x8b1e, 0x8b1f, 0x8b20, 0x8b21, 0x8b22, 0x8b23, 0x8b24, 0x8b25, 0x8b27, 0x8b28, 0x8b29, 0x8b2a, 0x8b2b, 0x8b2c, 0x8b2d, 0x8b2e, 0x8b2f, 0x8b30, 0x8b31, 0x8b32, 0x8b33, 0x8b34, 0x8b35, 0x8b36, 0x8b37, 0x8b38, 0x8b39, 0x8b3a, 0x8b3b, 0x8b3c, 0x8b3d, 0x8b3e, 0x8b3f, 0x8b40, 0x8b41, 0x8b42, 0x8b43, 0x8b44, 0x8b45, 0x5e27, 0x75c7, 0x90d1, 0x8bc1, 0x829d, 0x679d, 0x652f, 0x5431, 0x8718, 0x77e5, 0x80a2, 0x8102, 0x6c41, 0x4e4b, 0x7ec7, 0x804c, 0x76f4, 0x690d, 0x6b96, 0x6267, 0x503c, 0x4f84, 0x5740, 0x6307, 0x6b62, 0x8dbe, 0x53ea, 0x65e8, 0x7eb8, 0x5fd7, 0x631a, 0x63b7, 0x81f3, 0x81f4, 0x7f6e, 0x5e1c, 0x5cd9, 0x5236, 0x667a, 0x79e9, 0x7a1a, 0x8d28, 0x7099, 0x75d4, 0x6ede, 0x6cbb, 0x7a92, 0x4e2d, 0x76c5, 0x5fe0, 0x949f, 0x8877, 0x7ec8, 0x79cd, 0x80bf, 0x91cd, 0x4ef2, 0x4f17, 0x821f, 0x5468, 0x5dde, 0x6d32, 0x8bcc, 0x7ca5, 0x8f74, 0x8098, 0x5e1a, 0x5492, 0x76b1, 0x5b99, 0x663c, 0x9aa4, 0x73e0, 0x682a, 0x86db, 0x6731, 0x732a, 0x8bf8, 0x8bdb, 0x9010, 0x7af9, 0x70db, 0x716e, 0x62c4, 0x77a9, 0x5631, 0x4e3b, 0x8457, 0x67f1, 0x52a9, 0x86c0, 0x8d2e, 0x94f8, 0x7b51, /* 0xd7 */ 0x8b46, 0x8b47, 0x8b48, 0x8b49, 0x8b4a, 0x8b4b, 0x8b4c, 0x8b4d, 0x8b4e, 0x8b4f, 0x8b50, 0x8b51, 0x8b52, 0x8b53, 0x8b54, 0x8b55, 0x8b56, 0x8b57, 0x8b58, 0x8b59, 0x8b5a, 0x8b5b, 0x8b5c, 0x8b5d, 0x8b5e, 0x8b5f, 0x8b60, 0x8b61, 0x8b62, 0x8b63, 0x8b64, 0x8b65, 0x8b67, 0x8b68, 0x8b69, 0x8b6a, 0x8b6b, 0x8b6d, 0x8b6e, 0x8b6f, 0x8b70, 0x8b71, 0x8b72, 0x8b73, 0x8b74, 0x8b75, 0x8b76, 0x8b77, 0x8b78, 0x8b79, 0x8b7a, 0x8b7b, 0x8b7c, 0x8b7d, 0x8b7e, 0x8b7f, 0x8b80, 0x8b81, 0x8b82, 0x8b83, 0x8b84, 0x8b85, 0x8b86, 0x8b87, 0x8b88, 0x8b89, 0x8b8a, 0x8b8b, 0x8b8c, 0x8b8d, 0x8b8e, 0x8b8f, 0x8b90, 0x8b91, 0x8b92, 0x8b93, 0x8b94, 0x8b95, 0x8b96, 0x8b97, 0x8b98, 0x8b99, 0x8b9a, 0x8b9b, 0x8b9c, 0x8b9d, 0x8b9e, 0x8b9f, 0x8bac, 0x8bb1, 0x8bbb, 0x8bc7, 0x8bd0, 0x8bea, 0x8c09, 0x8c1e, 0x4f4f, 0x6ce8, 0x795d, 0x9a7b, 0x6293, 0x722a, 0x62fd, 0x4e13, 0x7816, 0x8f6c, 0x64b0, 0x8d5a, 0x7bc6, 0x6869, 0x5e84, 0x88c5, 0x5986, 0x649e, 0x58ee, 0x72b6, 0x690e, 0x9525, 0x8ffd, 0x8d58, 0x5760, 0x7f00, 0x8c06, 0x51c6, 0x6349, 0x62d9, 0x5353, 0x684c, 0x7422, 0x8301, 0x914c, 0x5544, 0x7740, 0x707c, 0x6d4a, 0x5179, 0x54a8, 0x8d44, 0x59ff, 0x6ecb, 0x6dc4, 0x5b5c, 0x7d2b, 0x4ed4, 0x7c7d, 0x6ed3, 0x5b50, 0x81ea, 0x6e0d, 0x5b57, 0x9b03, 0x68d5, 0x8e2a, 0x5b97, 0x7efc, 0x603b, 0x7eb5, 0x90b9, 0x8d70, 0x594f, 0x63cd, 0x79df, 0x8db3, 0x5352, 0x65cf, 0x7956, 0x8bc5, 0x963b, 0x7ec4, 0x94bb, 0x7e82, 0x5634, 0x9189, 0x6700, 0x7f6a, 0x5c0a, 0x9075, 0x6628, 0x5de6, 0x4f50, 0x67de, 0x505a, 0x4f5c, 0x5750, 0x5ea7, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0xd8 */ 0x8c38, 0x8c39, 0x8c3a, 0x8c3b, 0x8c3c, 0x8c3d, 0x8c3e, 0x8c3f, 0x8c40, 0x8c42, 0x8c43, 0x8c44, 0x8c45, 0x8c48, 0x8c4a, 0x8c4b, 0x8c4d, 0x8c4e, 0x8c4f, 0x8c50, 0x8c51, 0x8c52, 0x8c53, 0x8c54, 0x8c56, 0x8c57, 0x8c58, 0x8c59, 0x8c5b, 0x8c5c, 0x8c5d, 0x8c5e, 0x8c5f, 0x8c60, 0x8c63, 0x8c64, 0x8c65, 0x8c66, 0x8c67, 0x8c68, 0x8c69, 0x8c6c, 0x8c6d, 0x8c6e, 0x8c6f, 0x8c70, 0x8c71, 0x8c72, 0x8c74, 0x8c75, 0x8c76, 0x8c77, 0x8c7b, 0x8c7c, 0x8c7d, 0x8c7e, 0x8c7f, 0x8c80, 0x8c81, 0x8c83, 0x8c84, 0x8c86, 0x8c87, 0x8c88, 0x8c8b, 0x8c8d, 0x8c8e, 0x8c8f, 0x8c90, 0x8c91, 0x8c92, 0x8c93, 0x8c95, 0x8c96, 0x8c97, 0x8c99, 0x8c9a, 0x8c9b, 0x8c9c, 0x8c9d, 0x8c9e, 0x8c9f, 0x8ca0, 0x8ca1, 0x8ca2, 0x8ca3, 0x8ca4, 0x8ca5, 0x8ca6, 0x8ca7, 0x8ca8, 0x8ca9, 0x8caa, 0x8cab, 0x8cac, 0x8cad, 0x4e8d, 0x4e0c, 0x5140, 0x4e10, 0x5eff, 0x5345, 0x4e15, 0x4e98, 0x4e1e, 0x9b32, 0x5b6c, 0x5669, 0x4e28, 0x79ba, 0x4e3f, 0x5315, 0x4e47, 0x592d, 0x723b, 0x536e, 0x6c10, 0x56df, 0x80e4, 0x9997, 0x6bd3, 0x777e, 0x9f17, 0x4e36, 0x4e9f, 0x9f10, 0x4e5c, 0x4e69, 0x4e93, 0x8288, 0x5b5b, 0x556c, 0x560f, 0x4ec4, 0x538d, 0x539d, 0x53a3, 0x53a5, 0x53ae, 0x9765, 0x8d5d, 0x531a, 0x53f5, 0x5326, 0x532e, 0x533e, 0x8d5c, 0x5366, 0x5363, 0x5202, 0x5208, 0x520e, 0x522d, 0x5233, 0x523f, 0x5240, 0x524c, 0x525e, 0x5261, 0x525c, 0x84af, 0x527d, 0x5282, 0x5281, 0x5290, 0x5293, 0x5182, 0x7f54, 0x4ebb, 0x4ec3, 0x4ec9, 0x4ec2, 0x4ee8, 0x4ee1, 0x4eeb, 0x4ede, 0x4f1b, 0x4ef3, 0x4f22, 0x4f64, 0x4ef5, 0x4f25, 0x4f27, 0x4f09, 0x4f2b, 0x4f5e, 0x4f67, 0x6538, 0x4f5a, 0x4f5d, /* 0xd9 */ 0x8cae, 0x8caf, 0x8cb0, 0x8cb1, 0x8cb2, 0x8cb3, 0x8cb4, 0x8cb5, 0x8cb6, 0x8cb7, 0x8cb8, 0x8cb9, 0x8cba, 0x8cbb, 0x8cbc, 0x8cbd, 0x8cbe, 0x8cbf, 0x8cc0, 0x8cc1, 0x8cc2, 0x8cc3, 0x8cc4, 0x8cc5, 0x8cc6, 0x8cc7, 0x8cc8, 0x8cc9, 0x8cca, 0x8ccb, 0x8ccc, 0x8ccd, 0x8cce, 0x8ccf, 0x8cd0, 0x8cd1, 0x8cd2, 0x8cd3, 0x8cd4, 0x8cd5, 0x8cd6, 0x8cd7, 0x8cd8, 0x8cd9, 0x8cda, 0x8cdb, 0x8cdc, 0x8cdd, 0x8cde, 0x8cdf, 0x8ce0, 0x8ce1, 0x8ce2, 0x8ce3, 0x8ce4, 0x8ce5, 0x8ce6, 0x8ce7, 0x8ce8, 0x8ce9, 0x8cea, 0x8ceb, 0x8cec, 0x8ced, 0x8cee, 0x8cef, 0x8cf0, 0x8cf1, 0x8cf2, 0x8cf3, 0x8cf4, 0x8cf5, 0x8cf6, 0x8cf7, 0x8cf8, 0x8cf9, 0x8cfa, 0x8cfb, 0x8cfc, 0x8cfd, 0x8cfe, 0x8cff, 0x8d00, 0x8d01, 0x8d02, 0x8d03, 0x8d04, 0x8d05, 0x8d06, 0x8d07, 0x8d08, 0x8d09, 0x8d0a, 0x8d0b, 0x8d0c, 0x8d0d, 0x4f5f, 0x4f57, 0x4f32, 0x4f3d, 0x4f76, 0x4f74, 0x4f91, 0x4f89, 0x4f83, 0x4f8f, 0x4f7e, 0x4f7b, 0x4faa, 0x4f7c, 0x4fac, 0x4f94, 0x4fe6, 0x4fe8, 0x4fea, 0x4fc5, 0x4fda, 0x4fe3, 0x4fdc, 0x4fd1, 0x4fdf, 0x4ff8, 0x5029, 0x504c, 0x4ff3, 0x502c, 0x500f, 0x502e, 0x502d, 0x4ffe, 0x501c, 0x500c, 0x5025, 0x5028, 0x507e, 0x5043, 0x5055, 0x5048, 0x504e, 0x506c, 0x507b, 0x50a5, 0x50a7, 0x50a9, 0x50ba, 0x50d6, 0x5106, 0x50ed, 0x50ec, 0x50e6, 0x50ee, 0x5107, 0x510b, 0x4edd, 0x6c3d, 0x4f58, 0x4f65, 0x4fce, 0x9fa0, 0x6c46, 0x7c74, 0x516e, 0x5dfd, 0x9ec9, 0x9998, 0x5181, 0x5914, 0x52f9, 0x530d, 0x8a07, 0x5310, 0x51eb, 0x5919, 0x5155, 0x4ea0, 0x5156, 0x4eb3, 0x886e, 0x88a4, 0x4eb5, 0x8114, 0x88d2, 0x7980, 0x5b34, 0x8803, 0x7fb8, 0x51ab, 0x51b1, 0x51bd, 0x51bc, /* 0xda */ 0x8d0e, 0x8d0f, 0x8d10, 0x8d11, 0x8d12, 0x8d13, 0x8d14, 0x8d15, 0x8d16, 0x8d17, 0x8d18, 0x8d19, 0x8d1a, 0x8d1b, 0x8d1c, 0x8d20, 0x8d51, 0x8d52, 0x8d57, 0x8d5f, 0x8d65, 0x8d68, 0x8d69, 0x8d6a, 0x8d6c, 0x8d6e, 0x8d6f, 0x8d71, 0x8d72, 0x8d78, 0x8d79, 0x8d7a, 0x8d7b, 0x8d7c, 0x8d7d, 0x8d7e, 0x8d7f, 0x8d80, 0x8d82, 0x8d83, 0x8d86, 0x8d87, 0x8d88, 0x8d89, 0x8d8c, 0x8d8d, 0x8d8e, 0x8d8f, 0x8d90, 0x8d92, 0x8d93, 0x8d95, 0x8d96, 0x8d97, 0x8d98, 0x8d99, 0x8d9a, 0x8d9b, 0x8d9c, 0x8d9d, 0x8d9e, 0x8da0, 0x8da1, 0x8da2, 0x8da4, 0x8da5, 0x8da6, 0x8da7, 0x8da8, 0x8da9, 0x8daa, 0x8dab, 0x8dac, 0x8dad, 0x8dae, 0x8daf, 0x8db0, 0x8db2, 0x8db6, 0x8db7, 0x8db9, 0x8dbb, 0x8dbd, 0x8dc0, 0x8dc1, 0x8dc2, 0x8dc5, 0x8dc7, 0x8dc8, 0x8dc9, 0x8dca, 0x8dcd, 0x8dd0, 0x8dd2, 0x8dd3, 0x8dd4, 0x51c7, 0x5196, 0x51a2, 0x51a5, 0x8ba0, 0x8ba6, 0x8ba7, 0x8baa, 0x8bb4, 0x8bb5, 0x8bb7, 0x8bc2, 0x8bc3, 0x8bcb, 0x8bcf, 0x8bce, 0x8bd2, 0x8bd3, 0x8bd4, 0x8bd6, 0x8bd8, 0x8bd9, 0x8bdc, 0x8bdf, 0x8be0, 0x8be4, 0x8be8, 0x8be9, 0x8bee, 0x8bf0, 0x8bf3, 0x8bf6, 0x8bf9, 0x8bfc, 0x8bff, 0x8c00, 0x8c02, 0x8c04, 0x8c07, 0x8c0c, 0x8c0f, 0x8c11, 0x8c12, 0x8c14, 0x8c15, 0x8c16, 0x8c19, 0x8c1b, 0x8c18, 0x8c1d, 0x8c1f, 0x8c20, 0x8c21, 0x8c25, 0x8c27, 0x8c2a, 0x8c2b, 0x8c2e, 0x8c2f, 0x8c32, 0x8c33, 0x8c35, 0x8c36, 0x5369, 0x537a, 0x961d, 0x9622, 0x9621, 0x9631, 0x962a, 0x963d, 0x963c, 0x9642, 0x9649, 0x9654, 0x965f, 0x9667, 0x966c, 0x9672, 0x9674, 0x9688, 0x968d, 0x9697, 0x96b0, 0x9097, 0x909b, 0x909d, 0x9099, 0x90ac, 0x90a1, 0x90b4, 0x90b3, 0x90b6, 0x90ba, /* 0xdb */ 0x8dd5, 0x8dd8, 0x8dd9, 0x8ddc, 0x8de0, 0x8de1, 0x8de2, 0x8de5, 0x8de6, 0x8de7, 0x8de9, 0x8ded, 0x8dee, 0x8df0, 0x8df1, 0x8df2, 0x8df4, 0x8df6, 0x8dfc, 0x8dfe, 0x8dff, 0x8e00, 0x8e01, 0x8e02, 0x8e03, 0x8e04, 0x8e06, 0x8e07, 0x8e08, 0x8e0b, 0x8e0d, 0x8e0e, 0x8e10, 0x8e11, 0x8e12, 0x8e13, 0x8e15, 0x8e16, 0x8e17, 0x8e18, 0x8e19, 0x8e1a, 0x8e1b, 0x8e1c, 0x8e20, 0x8e21, 0x8e24, 0x8e25, 0x8e26, 0x8e27, 0x8e28, 0x8e2b, 0x8e2d, 0x8e30, 0x8e32, 0x8e33, 0x8e34, 0x8e36, 0x8e37, 0x8e38, 0x8e3b, 0x8e3c, 0x8e3e, 0x8e3f, 0x8e43, 0x8e45, 0x8e46, 0x8e4c, 0x8e4d, 0x8e4e, 0x8e4f, 0x8e50, 0x8e53, 0x8e54, 0x8e55, 0x8e56, 0x8e57, 0x8e58, 0x8e5a, 0x8e5b, 0x8e5c, 0x8e5d, 0x8e5e, 0x8e5f, 0x8e60, 0x8e61, 0x8e62, 0x8e63, 0x8e64, 0x8e65, 0x8e67, 0x8e68, 0x8e6a, 0x8e6b, 0x8e6e, 0x8e71, 0x90b8, 0x90b0, 0x90cf, 0x90c5, 0x90be, 0x90d0, 0x90c4, 0x90c7, 0x90d3, 0x90e6, 0x90e2, 0x90dc, 0x90d7, 0x90db, 0x90eb, 0x90ef, 0x90fe, 0x9104, 0x9122, 0x911e, 0x9123, 0x9131, 0x912f, 0x9139, 0x9143, 0x9146, 0x520d, 0x5942, 0x52a2, 0x52ac, 0x52ad, 0x52be, 0x54ff, 0x52d0, 0x52d6, 0x52f0, 0x53df, 0x71ee, 0x77cd, 0x5ef4, 0x51f5, 0x51fc, 0x9b2f, 0x53b6, 0x5f01, 0x755a, 0x5def, 0x574c, 0x57a9, 0x57a1, 0x587e, 0x58bc, 0x58c5, 0x58d1, 0x5729, 0x572c, 0x572a, 0x5733, 0x5739, 0x572e, 0x572f, 0x575c, 0x573b, 0x5742, 0x5769, 0x5785, 0x576b, 0x5786, 0x577c, 0x577b, 0x5768, 0x576d, 0x5776, 0x5773, 0x57ad, 0x57a4, 0x578c, 0x57b2, 0x57cf, 0x57a7, 0x57b4, 0x5793, 0x57a0, 0x57d5, 0x57d8, 0x57da, 0x57d9, 0x57d2, 0x57b8, 0x57f4, 0x57ef, 0x57f8, 0x57e4, 0x57dd, /* 0xdc */ 0x8e73, 0x8e75, 0x8e77, 0x8e78, 0x8e79, 0x8e7a, 0x8e7b, 0x8e7d, 0x8e7e, 0x8e80, 0x8e82, 0x8e83, 0x8e84, 0x8e86, 0x8e88, 0x8e89, 0x8e8a, 0x8e8b, 0x8e8c, 0x8e8d, 0x8e8e, 0x8e91, 0x8e92, 0x8e93, 0x8e95, 0x8e96, 0x8e97, 0x8e98, 0x8e99, 0x8e9a, 0x8e9b, 0x8e9d, 0x8e9f, 0x8ea0, 0x8ea1, 0x8ea2, 0x8ea3, 0x8ea4, 0x8ea5, 0x8ea6, 0x8ea7, 0x8ea8, 0x8ea9, 0x8eaa, 0x8ead, 0x8eae, 0x8eb0, 0x8eb1, 0x8eb3, 0x8eb4, 0x8eb5, 0x8eb6, 0x8eb7, 0x8eb8, 0x8eb9, 0x8ebb, 0x8ebc, 0x8ebd, 0x8ebe, 0x8ebf, 0x8ec0, 0x8ec1, 0x8ec2, 0x8ec3, 0x8ec4, 0x8ec5, 0x8ec6, 0x8ec7, 0x8ec8, 0x8ec9, 0x8eca, 0x8ecb, 0x8ecc, 0x8ecd, 0x8ecf, 0x8ed0, 0x8ed1, 0x8ed2, 0x8ed3, 0x8ed4, 0x8ed5, 0x8ed6, 0x8ed7, 0x8ed8, 0x8ed9, 0x8eda, 0x8edb, 0x8edc, 0x8edd, 0x8ede, 0x8edf, 0x8ee0, 0x8ee1, 0x8ee2, 0x8ee3, 0x8ee4, 0x580b, 0x580d, 0x57fd, 0x57ed, 0x5800, 0x581e, 0x5819, 0x5844, 0x5820, 0x5865, 0x586c, 0x5881, 0x5889, 0x589a, 0x5880, 0x99a8, 0x9f19, 0x61ff, 0x8279, 0x827d, 0x827f, 0x828f, 0x828a, 0x82a8, 0x8284, 0x828e, 0x8291, 0x8297, 0x8299, 0x82ab, 0x82b8, 0x82be, 0x82b0, 0x82c8, 0x82ca, 0x82e3, 0x8298, 0x82b7, 0x82ae, 0x82cb, 0x82cc, 0x82c1, 0x82a9, 0x82b4, 0x82a1, 0x82aa, 0x829f, 0x82c4, 0x82ce, 0x82a4, 0x82e1, 0x8309, 0x82f7, 0x82e4, 0x830f, 0x8307, 0x82dc, 0x82f4, 0x82d2, 0x82d8, 0x830c, 0x82fb, 0x82d3, 0x8311, 0x831a, 0x8306, 0x8314, 0x8315, 0x82e0, 0x82d5, 0x831c, 0x8351, 0x835b, 0x835c, 0x8308, 0x8392, 0x833c, 0x8334, 0x8331, 0x839b, 0x835e, 0x832f, 0x834f, 0x8347, 0x8343, 0x835f, 0x8340, 0x8317, 0x8360, 0x832d, 0x833a, 0x8333, 0x8366, 0x8365, /* 0xdd */ 0x8ee5, 0x8ee6, 0x8ee7, 0x8ee8, 0x8ee9, 0x8eea, 0x8eeb, 0x8eec, 0x8eed, 0x8eee, 0x8eef, 0x8ef0, 0x8ef1, 0x8ef2, 0x8ef3, 0x8ef4, 0x8ef5, 0x8ef6, 0x8ef7, 0x8ef8, 0x8ef9, 0x8efa, 0x8efb, 0x8efc, 0x8efd, 0x8efe, 0x8eff, 0x8f00, 0x8f01, 0x8f02, 0x8f03, 0x8f04, 0x8f05, 0x8f06, 0x8f07, 0x8f08, 0x8f09, 0x8f0a, 0x8f0b, 0x8f0c, 0x8f0d, 0x8f0e, 0x8f0f, 0x8f10, 0x8f11, 0x8f12, 0x8f13, 0x8f14, 0x8f15, 0x8f16, 0x8f17, 0x8f18, 0x8f19, 0x8f1a, 0x8f1b, 0x8f1c, 0x8f1d, 0x8f1e, 0x8f1f, 0x8f20, 0x8f21, 0x8f22, 0x8f23, 0x8f24, 0x8f25, 0x8f26, 0x8f27, 0x8f28, 0x8f29, 0x8f2a, 0x8f2b, 0x8f2c, 0x8f2d, 0x8f2e, 0x8f2f, 0x8f30, 0x8f31, 0x8f32, 0x8f33, 0x8f34, 0x8f35, 0x8f36, 0x8f37, 0x8f38, 0x8f39, 0x8f3a, 0x8f3b, 0x8f3c, 0x8f3d, 0x8f3e, 0x8f3f, 0x8f40, 0x8f41, 0x8f42, 0x8f43, 0x8f44, 0x8368, 0x831b, 0x8369, 0x836c, 0x836a, 0x836d, 0x836e, 0x83b0, 0x8378, 0x83b3, 0x83b4, 0x83a0, 0x83aa, 0x8393, 0x839c, 0x8385, 0x837c, 0x83b6, 0x83a9, 0x837d, 0x83b8, 0x837b, 0x8398, 0x839e, 0x83a8, 0x83ba, 0x83bc, 0x83c1, 0x8401, 0x83e5, 0x83d8, 0x5807, 0x8418, 0x840b, 0x83dd, 0x83fd, 0x83d6, 0x841c, 0x8438, 0x8411, 0x8406, 0x83d4, 0x83df, 0x840f, 0x8403, 0x83f8, 0x83f9, 0x83ea, 0x83c5, 0x83c0, 0x8426, 0x83f0, 0x83e1, 0x845c, 0x8451, 0x845a, 0x8459, 0x8473, 0x8487, 0x8488, 0x847a, 0x8489, 0x8478, 0x843c, 0x8446, 0x8469, 0x8476, 0x848c, 0x848e, 0x8431, 0x846d, 0x84c1, 0x84cd, 0x84d0, 0x84e6, 0x84bd, 0x84d3, 0x84ca, 0x84bf, 0x84ba, 0x84e0, 0x84a1, 0x84b9, 0x84b4, 0x8497, 0x84e5, 0x84e3, 0x850c, 0x750d, 0x8538, 0x84f0, 0x8539, 0x851f, 0x853a, /* 0xde */ 0x8f45, 0x8f46, 0x8f47, 0x8f48, 0x8f49, 0x8f4a, 0x8f4b, 0x8f4c, 0x8f4d, 0x8f4e, 0x8f4f, 0x8f50, 0x8f51, 0x8f52, 0x8f53, 0x8f54, 0x8f55, 0x8f56, 0x8f57, 0x8f58, 0x8f59, 0x8f5a, 0x8f5b, 0x8f5c, 0x8f5d, 0x8f5e, 0x8f5f, 0x8f60, 0x8f61, 0x8f62, 0x8f63, 0x8f64, 0x8f65, 0x8f6a, 0x8f80, 0x8f8c, 0x8f92, 0x8f9d, 0x8fa0, 0x8fa1, 0x8fa2, 0x8fa4, 0x8fa5, 0x8fa6, 0x8fa7, 0x8faa, 0x8fac, 0x8fad, 0x8fae, 0x8faf, 0x8fb2, 0x8fb3, 0x8fb4, 0x8fb5, 0x8fb7, 0x8fb8, 0x8fba, 0x8fbb, 0x8fbc, 0x8fbf, 0x8fc0, 0x8fc3, 0x8fc6, 0x8fc9, 0x8fca, 0x8fcb, 0x8fcc, 0x8fcd, 0x8fcf, 0x8fd2, 0x8fd6, 0x8fd7, 0x8fda, 0x8fe0, 0x8fe1, 0x8fe3, 0x8fe7, 0x8fec, 0x8fef, 0x8ff1, 0x8ff2, 0x8ff4, 0x8ff5, 0x8ff6, 0x8ffa, 0x8ffb, 0x8ffc, 0x8ffe, 0x8fff, 0x9007, 0x9008, 0x900c, 0x900e, 0x9013, 0x9015, 0x9018, 0x8556, 0x853b, 0x84ff, 0x84fc, 0x8559, 0x8548, 0x8568, 0x8564, 0x855e, 0x857a, 0x77a2, 0x8543, 0x8572, 0x857b, 0x85a4, 0x85a8, 0x8587, 0x858f, 0x8579, 0x85ae, 0x859c, 0x8585, 0x85b9, 0x85b7, 0x85b0, 0x85d3, 0x85c1, 0x85dc, 0x85ff, 0x8627, 0x8605, 0x8629, 0x8616, 0x863c, 0x5efe, 0x5f08, 0x593c, 0x5941, 0x8037, 0x5955, 0x595a, 0x5958, 0x530f, 0x5c22, 0x5c25, 0x5c2c, 0x5c34, 0x624c, 0x626a, 0x629f, 0x62bb, 0x62ca, 0x62da, 0x62d7, 0x62ee, 0x6322, 0x62f6, 0x6339, 0x634b, 0x6343, 0x63ad, 0x63f6, 0x6371, 0x637a, 0x638e, 0x63b4, 0x636d, 0x63ac, 0x638a, 0x6369, 0x63ae, 0x63bc, 0x63f2, 0x63f8, 0x63e0, 0x63ff, 0x63c4, 0x63de, 0x63ce, 0x6452, 0x63c6, 0x63be, 0x6445, 0x6441, 0x640b, 0x641b, 0x6420, 0x640c, 0x6426, 0x6421, 0x645e, 0x6484, 0x646d, 0x6496, /* 0xdf */ 0x9019, 0x901c, 0x9023, 0x9024, 0x9025, 0x9027, 0x9028, 0x9029, 0x902a, 0x902b, 0x902c, 0x9030, 0x9031, 0x9032, 0x9033, 0x9034, 0x9037, 0x9039, 0x903a, 0x903d, 0x903f, 0x9040, 0x9043, 0x9045, 0x9046, 0x9048, 0x9049, 0x904a, 0x904b, 0x904c, 0x904e, 0x9054, 0x9055, 0x9056, 0x9059, 0x905a, 0x905c, 0x905d, 0x905e, 0x905f, 0x9060, 0x9061, 0x9064, 0x9066, 0x9067, 0x9069, 0x906a, 0x906b, 0x906c, 0x906f, 0x9070, 0x9071, 0x9072, 0x9073, 0x9076, 0x9077, 0x9078, 0x9079, 0x907a, 0x907b, 0x907c, 0x907e, 0x9081, 0x9084, 0x9085, 0x9086, 0x9087, 0x9089, 0x908a, 0x908c, 0x908d, 0x908e, 0x908f, 0x9090, 0x9092, 0x9094, 0x9096, 0x9098, 0x909a, 0x909c, 0x909e, 0x909f, 0x90a0, 0x90a4, 0x90a5, 0x90a7, 0x90a8, 0x90a9, 0x90ab, 0x90ad, 0x90b2, 0x90b7, 0x90bc, 0x90bd, 0x90bf, 0x90c0, 0x647a, 0x64b7, 0x64b8, 0x6499, 0x64ba, 0x64c0, 0x64d0, 0x64d7, 0x64e4, 0x64e2, 0x6509, 0x6525, 0x652e, 0x5f0b, 0x5fd2, 0x7519, 0x5f11, 0x535f, 0x53f1, 0x53fd, 0x53e9, 0x53e8, 0x53fb, 0x5412, 0x5416, 0x5406, 0x544b, 0x5452, 0x5453, 0x5454, 0x5456, 0x5443, 0x5421, 0x5457, 0x5459, 0x5423, 0x5432, 0x5482, 0x5494, 0x5477, 0x5471, 0x5464, 0x549a, 0x549b, 0x5484, 0x5476, 0x5466, 0x549d, 0x54d0, 0x54ad, 0x54c2, 0x54b4, 0x54d2, 0x54a7, 0x54a6, 0x54d3, 0x54d4, 0x5472, 0x54a3, 0x54d5, 0x54bb, 0x54bf, 0x54cc, 0x54d9, 0x54da, 0x54dc, 0x54a9, 0x54aa, 0x54a4, 0x54dd, 0x54cf, 0x54de, 0x551b, 0x54e7, 0x5520, 0x54fd, 0x5514, 0x54f3, 0x5522, 0x5523, 0x550f, 0x5511, 0x5527, 0x552a, 0x5567, 0x558f, 0x55b5, 0x5549, 0x556d, 0x5541, 0x5555, 0x553f, 0x5550, 0x553c, /* 0xe0 */ 0x90c2, 0x90c3, 0x90c6, 0x90c8, 0x90c9, 0x90cb, 0x90cc, 0x90cd, 0x90d2, 0x90d4, 0x90d5, 0x90d6, 0x90d8, 0x90d9, 0x90da, 0x90de, 0x90df, 0x90e0, 0x90e3, 0x90e4, 0x90e5, 0x90e9, 0x90ea, 0x90ec, 0x90ee, 0x90f0, 0x90f1, 0x90f2, 0x90f3, 0x90f5, 0x90f6, 0x90f7, 0x90f9, 0x90fa, 0x90fb, 0x90fc, 0x90ff, 0x9100, 0x9101, 0x9103, 0x9105, 0x9106, 0x9107, 0x9108, 0x9109, 0x910a, 0x910b, 0x910c, 0x910d, 0x910e, 0x910f, 0x9110, 0x9111, 0x9112, 0x9113, 0x9114, 0x9115, 0x9116, 0x9117, 0x9118, 0x911a, 0x911b, 0x911c, 0x911d, 0x911f, 0x9120, 0x9121, 0x9124, 0x9125, 0x9126, 0x9127, 0x9128, 0x9129, 0x912a, 0x912b, 0x912c, 0x912d, 0x912e, 0x9130, 0x9132, 0x9133, 0x9134, 0x9135, 0x9136, 0x9137, 0x9138, 0x913a, 0x913b, 0x913c, 0x913d, 0x913e, 0x913f, 0x9140, 0x9141, 0x9142, 0x9144, 0x5537, 0x5556, 0x5575, 0x5576, 0x5577, 0x5533, 0x5530, 0x555c, 0x558b, 0x55d2, 0x5583, 0x55b1, 0x55b9, 0x5588, 0x5581, 0x559f, 0x557e, 0x55d6, 0x5591, 0x557b, 0x55df, 0x55bd, 0x55be, 0x5594, 0x5599, 0x55ea, 0x55f7, 0x55c9, 0x561f, 0x55d1, 0x55eb, 0x55ec, 0x55d4, 0x55e6, 0x55dd, 0x55c4, 0x55ef, 0x55e5, 0x55f2, 0x55f3, 0x55cc, 0x55cd, 0x55e8, 0x55f5, 0x55e4, 0x8f94, 0x561e, 0x5608, 0x560c, 0x5601, 0x5624, 0x5623, 0x55fe, 0x5600, 0x5627, 0x562d, 0x5658, 0x5639, 0x5657, 0x562c, 0x564d, 0x5662, 0x5659, 0x565c, 0x564c, 0x5654, 0x5686, 0x5664, 0x5671, 0x566b, 0x567b, 0x567c, 0x5685, 0x5693, 0x56af, 0x56d4, 0x56d7, 0x56dd, 0x56e1, 0x56f5, 0x56eb, 0x56f9, 0x56ff, 0x5704, 0x570a, 0x5709, 0x571c, 0x5e0f, 0x5e19, 0x5e14, 0x5e11, 0x5e31, 0x5e3b, 0x5e3c, /* 0xe1 */ 0x9145, 0x9147, 0x9148, 0x9151, 0x9153, 0x9154, 0x9155, 0x9156, 0x9158, 0x9159, 0x915b, 0x915c, 0x915f, 0x9160, 0x9166, 0x9167, 0x9168, 0x916b, 0x916d, 0x9173, 0x917a, 0x917b, 0x917c, 0x9180, 0x9181, 0x9182, 0x9183, 0x9184, 0x9186, 0x9188, 0x918a, 0x918e, 0x918f, 0x9193, 0x9194, 0x9195, 0x9196, 0x9197, 0x9198, 0x9199, 0x919c, 0x919d, 0x919e, 0x919f, 0x91a0, 0x91a1, 0x91a4, 0x91a5, 0x91a6, 0x91a7, 0x91a8, 0x91a9, 0x91ab, 0x91ac, 0x91b0, 0x91b1, 0x91b2, 0x91b3, 0x91b6, 0x91b7, 0x91b8, 0x91b9, 0x91bb, 0x91bc, 0x91bd, 0x91be, 0x91bf, 0x91c0, 0x91c1, 0x91c2, 0x91c3, 0x91c4, 0x91c5, 0x91c6, 0x91c8, 0x91cb, 0x91d0, 0x91d2, 0x91d3, 0x91d4, 0x91d5, 0x91d6, 0x91d7, 0x91d8, 0x91d9, 0x91da, 0x91db, 0x91dd, 0x91de, 0x91df, 0x91e0, 0x91e1, 0x91e2, 0x91e3, 0x91e4, 0x91e5, 0x5e37, 0x5e44, 0x5e54, 0x5e5b, 0x5e5e, 0x5e61, 0x5c8c, 0x5c7a, 0x5c8d, 0x5c90, 0x5c96, 0x5c88, 0x5c98, 0x5c99, 0x5c91, 0x5c9a, 0x5c9c, 0x5cb5, 0x5ca2, 0x5cbd, 0x5cac, 0x5cab, 0x5cb1, 0x5ca3, 0x5cc1, 0x5cb7, 0x5cc4, 0x5cd2, 0x5ce4, 0x5ccb, 0x5ce5, 0x5d02, 0x5d03, 0x5d27, 0x5d26, 0x5d2e, 0x5d24, 0x5d1e, 0x5d06, 0x5d1b, 0x5d58, 0x5d3e, 0x5d34, 0x5d3d, 0x5d6c, 0x5d5b, 0x5d6f, 0x5d5d, 0x5d6b, 0x5d4b, 0x5d4a, 0x5d69, 0x5d74, 0x5d82, 0x5d99, 0x5d9d, 0x8c73, 0x5db7, 0x5dc5, 0x5f73, 0x5f77, 0x5f82, 0x5f87, 0x5f89, 0x5f8c, 0x5f95, 0x5f99, 0x5f9c, 0x5fa8, 0x5fad, 0x5fb5, 0x5fbc, 0x8862, 0x5f61, 0x72ad, 0x72b0, 0x72b4, 0x72b7, 0x72b8, 0x72c3, 0x72c1, 0x72ce, 0x72cd, 0x72d2, 0x72e8, 0x72ef, 0x72e9, 0x72f2, 0x72f4, 0x72f7, 0x7301, 0x72f3, 0x7303, 0x72fa, /* 0xe2 */ 0x91e6, 0x91e7, 0x91e8, 0x91e9, 0x91ea, 0x91eb, 0x91ec, 0x91ed, 0x91ee, 0x91ef, 0x91f0, 0x91f1, 0x91f2, 0x91f3, 0x91f4, 0x91f5, 0x91f6, 0x91f7, 0x91f8, 0x91f9, 0x91fa, 0x91fb, 0x91fc, 0x91fd, 0x91fe, 0x91ff, 0x9200, 0x9201, 0x9202, 0x9203, 0x9204, 0x9205, 0x9206, 0x9207, 0x9208, 0x9209, 0x920a, 0x920b, 0x920c, 0x920d, 0x920e, 0x920f, 0x9210, 0x9211, 0x9212, 0x9213, 0x9214, 0x9215, 0x9216, 0x9217, 0x9218, 0x9219, 0x921a, 0x921b, 0x921c, 0x921d, 0x921e, 0x921f, 0x9220, 0x9221, 0x9222, 0x9223, 0x9224, 0x9225, 0x9226, 0x9227, 0x9228, 0x9229, 0x922a, 0x922b, 0x922c, 0x922d, 0x922e, 0x922f, 0x9230, 0x9231, 0x9232, 0x9233, 0x9234, 0x9235, 0x9236, 0x9237, 0x9238, 0x9239, 0x923a, 0x923b, 0x923c, 0x923d, 0x923e, 0x923f, 0x9240, 0x9241, 0x9242, 0x9243, 0x9244, 0x9245, 0x72fb, 0x7317, 0x7313, 0x7321, 0x730a, 0x731e, 0x731d, 0x7315, 0x7322, 0x7339, 0x7325, 0x732c, 0x7338, 0x7331, 0x7350, 0x734d, 0x7357, 0x7360, 0x736c, 0x736f, 0x737e, 0x821b, 0x5925, 0x98e7, 0x5924, 0x5902, 0x9963, 0x9967, 0x9968, 0x9969, 0x996a, 0x996b, 0x996c, 0x9974, 0x9977, 0x997d, 0x9980, 0x9984, 0x9987, 0x998a, 0x998d, 0x9990, 0x9991, 0x9993, 0x9994, 0x9995, 0x5e80, 0x5e91, 0x5e8b, 0x5e96, 0x5ea5, 0x5ea0, 0x5eb9, 0x5eb5, 0x5ebe, 0x5eb3, 0x8d53, 0x5ed2, 0x5ed1, 0x5edb, 0x5ee8, 0x5eea, 0x81ba, 0x5fc4, 0x5fc9, 0x5fd6, 0x5fcf, 0x6003, 0x5fee, 0x6004, 0x5fe1, 0x5fe4, 0x5ffe, 0x6005, 0x6006, 0x5fea, 0x5fed, 0x5ff8, 0x6019, 0x6035, 0x6026, 0x601b, 0x600f, 0x600d, 0x6029, 0x602b, 0x600a, 0x603f, 0x6021, 0x6078, 0x6079, 0x607b, 0x607a, 0x6042, /* 0xe3 */ 0x9246, 0x9247, 0x9248, 0x9249, 0x924a, 0x924b, 0x924c, 0x924d, 0x924e, 0x924f, 0x9250, 0x9251, 0x9252, 0x9253, 0x9254, 0x9255, 0x9256, 0x9257, 0x9258, 0x9259, 0x925a, 0x925b, 0x925c, 0x925d, 0x925e, 0x925f, 0x9260, 0x9261, 0x9262, 0x9263, 0x9264, 0x9265, 0x9266, 0x9267, 0x9268, 0x9269, 0x926a, 0x926b, 0x926c, 0x926d, 0x926e, 0x926f, 0x9270, 0x9271, 0x9272, 0x9273, 0x9275, 0x9276, 0x9277, 0x9278, 0x9279, 0x927a, 0x927b, 0x927c, 0x927d, 0x927e, 0x927f, 0x9280, 0x9281, 0x9282, 0x9283, 0x9284, 0x9285, 0x9286, 0x9287, 0x9288, 0x9289, 0x928a, 0x928b, 0x928c, 0x928d, 0x928f, 0x9290, 0x9291, 0x9292, 0x9293, 0x9294, 0x9295, 0x9296, 0x9297, 0x9298, 0x9299, 0x929a, 0x929b, 0x929c, 0x929d, 0x929e, 0x929f, 0x92a0, 0x92a1, 0x92a2, 0x92a3, 0x92a4, 0x92a5, 0x92a6, 0x92a7, 0x606a, 0x607d, 0x6096, 0x609a, 0x60ad, 0x609d, 0x6083, 0x6092, 0x608c, 0x609b, 0x60ec, 0x60bb, 0x60b1, 0x60dd, 0x60d8, 0x60c6, 0x60da, 0x60b4, 0x6120, 0x6126, 0x6115, 0x6123, 0x60f4, 0x6100, 0x610e, 0x612b, 0x614a, 0x6175, 0x61ac, 0x6194, 0x61a7, 0x61b7, 0x61d4, 0x61f5, 0x5fdd, 0x96b3, 0x95e9, 0x95eb, 0x95f1, 0x95f3, 0x95f5, 0x95f6, 0x95fc, 0x95fe, 0x9603, 0x9604, 0x9606, 0x9608, 0x960a, 0x960b, 0x960c, 0x960d, 0x960f, 0x9612, 0x9615, 0x9616, 0x9617, 0x9619, 0x961a, 0x4e2c, 0x723f, 0x6215, 0x6c35, 0x6c54, 0x6c5c, 0x6c4a, 0x6ca3, 0x6c85, 0x6c90, 0x6c94, 0x6c8c, 0x6c68, 0x6c69, 0x6c74, 0x6c76, 0x6c86, 0x6ca9, 0x6cd0, 0x6cd4, 0x6cad, 0x6cf7, 0x6cf8, 0x6cf1, 0x6cd7, 0x6cb2, 0x6ce0, 0x6cd6, 0x6cfa, 0x6ceb, 0x6cee, 0x6cb1, 0x6cd3, 0x6cef, 0x6cfe, /* 0xe4 */ 0x92a8, 0x92a9, 0x92aa, 0x92ab, 0x92ac, 0x92ad, 0x92af, 0x92b0, 0x92b1, 0x92b2, 0x92b3, 0x92b4, 0x92b5, 0x92b6, 0x92b7, 0x92b8, 0x92b9, 0x92ba, 0x92bb, 0x92bc, 0x92bd, 0x92be, 0x92bf, 0x92c0, 0x92c1, 0x92c2, 0x92c3, 0x92c4, 0x92c5, 0x92c6, 0x92c7, 0x92c9, 0x92ca, 0x92cb, 0x92cc, 0x92cd, 0x92ce, 0x92cf, 0x92d0, 0x92d1, 0x92d2, 0x92d3, 0x92d4, 0x92d5, 0x92d6, 0x92d7, 0x92d8, 0x92d9, 0x92da, 0x92db, 0x92dc, 0x92dd, 0x92de, 0x92df, 0x92e0, 0x92e1, 0x92e2, 0x92e3, 0x92e4, 0x92e5, 0x92e6, 0x92e7, 0x92e8, 0x92e9, 0x92ea, 0x92eb, 0x92ec, 0x92ed, 0x92ee, 0x92ef, 0x92f0, 0x92f1, 0x92f2, 0x92f3, 0x92f4, 0x92f5, 0x92f6, 0x92f7, 0x92f8, 0x92f9, 0x92fa, 0x92fb, 0x92fc, 0x92fd, 0x92fe, 0x92ff, 0x9300, 0x9301, 0x9302, 0x9303, 0x9304, 0x9305, 0x9306, 0x9307, 0x9308, 0x9309, 0x6d39, 0x6d27, 0x6d0c, 0x6d43, 0x6d48, 0x6d07, 0x6d04, 0x6d19, 0x6d0e, 0x6d2b, 0x6d4d, 0x6d2e, 0x6d35, 0x6d1a, 0x6d4f, 0x6d52, 0x6d54, 0x6d33, 0x6d91, 0x6d6f, 0x6d9e, 0x6da0, 0x6d5e, 0x6d93, 0x6d94, 0x6d5c, 0x6d60, 0x6d7c, 0x6d63, 0x6e1a, 0x6dc7, 0x6dc5, 0x6dde, 0x6e0e, 0x6dbf, 0x6de0, 0x6e11, 0x6de6, 0x6ddd, 0x6dd9, 0x6e16, 0x6dab, 0x6e0c, 0x6dae, 0x6e2b, 0x6e6e, 0x6e4e, 0x6e6b, 0x6eb2, 0x6e5f, 0x6e86, 0x6e53, 0x6e54, 0x6e32, 0x6e25, 0x6e44, 0x6edf, 0x6eb1, 0x6e98, 0x6ee0, 0x6f2d, 0x6ee2, 0x6ea5, 0x6ea7, 0x6ebd, 0x6ebb, 0x6eb7, 0x6ed7, 0x6eb4, 0x6ecf, 0x6e8f, 0x6ec2, 0x6e9f, 0x6f62, 0x6f46, 0x6f47, 0x6f24, 0x6f15, 0x6ef9, 0x6f2f, 0x6f36, 0x6f4b, 0x6f74, 0x6f2a, 0x6f09, 0x6f29, 0x6f89, 0x6f8d, 0x6f8c, 0x6f78, 0x6f72, 0x6f7c, 0x6f7a, 0x6fd1, /* 0xe5 */ 0x930a, 0x930b, 0x930c, 0x930d, 0x930e, 0x930f, 0x9310, 0x9311, 0x9312, 0x9313, 0x9314, 0x9315, 0x9316, 0x9317, 0x9318, 0x9319, 0x931a, 0x931b, 0x931c, 0x931d, 0x931e, 0x931f, 0x9320, 0x9321, 0x9322, 0x9323, 0x9324, 0x9325, 0x9326, 0x9327, 0x9328, 0x9329, 0x932a, 0x932b, 0x932c, 0x932d, 0x932e, 0x932f, 0x9330, 0x9331, 0x9332, 0x9333, 0x9334, 0x9335, 0x9336, 0x9337, 0x9338, 0x9339, 0x933a, 0x933b, 0x933c, 0x933d, 0x933f, 0x9340, 0x9341, 0x9342, 0x9343, 0x9344, 0x9345, 0x9346, 0x9347, 0x9348, 0x9349, 0x934a, 0x934b, 0x934c, 0x934d, 0x934e, 0x934f, 0x9350, 0x9351, 0x9352, 0x9353, 0x9354, 0x9355, 0x9356, 0x9357, 0x9358, 0x9359, 0x935a, 0x935b, 0x935c, 0x935d, 0x935e, 0x935f, 0x9360, 0x9361, 0x9362, 0x9363, 0x9364, 0x9365, 0x9366, 0x9367, 0x9368, 0x9369, 0x936b, 0x6fc9, 0x6fa7, 0x6fb9, 0x6fb6, 0x6fc2, 0x6fe1, 0x6fee, 0x6fde, 0x6fe0, 0x6fef, 0x701a, 0x7023, 0x701b, 0x7039, 0x7035, 0x704f, 0x705e, 0x5b80, 0x5b84, 0x5b95, 0x5b93, 0x5ba5, 0x5bb8, 0x752f, 0x9a9e, 0x6434, 0x5be4, 0x5bee, 0x8930, 0x5bf0, 0x8e47, 0x8b07, 0x8fb6, 0x8fd3, 0x8fd5, 0x8fe5, 0x8fee, 0x8fe4, 0x8fe9, 0x8fe6, 0x8ff3, 0x8fe8, 0x9005, 0x9004, 0x900b, 0x9026, 0x9011, 0x900d, 0x9016, 0x9021, 0x9035, 0x9036, 0x902d, 0x902f, 0x9044, 0x9051, 0x9052, 0x9050, 0x9068, 0x9058, 0x9062, 0x905b, 0x66b9, 0x9074, 0x907d, 0x9082, 0x9088, 0x9083, 0x908b, 0x5f50, 0x5f57, 0x5f56, 0x5f58, 0x5c3b, 0x54ab, 0x5c50, 0x5c59, 0x5b71, 0x5c63, 0x5c66, 0x7fbc, 0x5f2a, 0x5f29, 0x5f2d, 0x8274, 0x5f3c, 0x9b3b, 0x5c6e, 0x5981, 0x5983, 0x598d, 0x59a9, 0x59aa, 0x59a3, /* 0xe6 */ 0x936c, 0x936d, 0x936e, 0x936f, 0x9370, 0x9371, 0x9372, 0x9373, 0x9374, 0x9375, 0x9376, 0x9377, 0x9378, 0x9379, 0x937a, 0x937b, 0x937c, 0x937d, 0x937e, 0x937f, 0x9380, 0x9381, 0x9382, 0x9383, 0x9384, 0x9385, 0x9386, 0x9387, 0x9388, 0x9389, 0x938a, 0x938b, 0x938c, 0x938d, 0x938e, 0x9390, 0x9391, 0x9392, 0x9393, 0x9394, 0x9395, 0x9396, 0x9397, 0x9398, 0x9399, 0x939a, 0x939b, 0x939c, 0x939d, 0x939e, 0x939f, 0x93a0, 0x93a1, 0x93a2, 0x93a3, 0x93a4, 0x93a5, 0x93a6, 0x93a7, 0x93a8, 0x93a9, 0x93aa, 0x93ab, 0x93ac, 0x93ad, 0x93ae, 0x93af, 0x93b0, 0x93b1, 0x93b2, 0x93b3, 0x93b4, 0x93b5, 0x93b6, 0x93b7, 0x93b8, 0x93b9, 0x93ba, 0x93bb, 0x93bc, 0x93bd, 0x93be, 0x93bf, 0x93c0, 0x93c1, 0x93c2, 0x93c3, 0x93c4, 0x93c5, 0x93c6, 0x93c7, 0x93c8, 0x93c9, 0x93cb, 0x93cc, 0x93cd, 0x5997, 0x59ca, 0x59ab, 0x599e, 0x59a4, 0x59d2, 0x59b2, 0x59af, 0x59d7, 0x59be, 0x5a05, 0x5a06, 0x59dd, 0x5a08, 0x59e3, 0x59d8, 0x59f9, 0x5a0c, 0x5a09, 0x5a32, 0x5a34, 0x5a11, 0x5a23, 0x5a13, 0x5a40, 0x5a67, 0x5a4a, 0x5a55, 0x5a3c, 0x5a62, 0x5a75, 0x80ec, 0x5aaa, 0x5a9b, 0x5a77, 0x5a7a, 0x5abe, 0x5aeb, 0x5ab2, 0x5ad2, 0x5ad4, 0x5ab8, 0x5ae0, 0x5ae3, 0x5af1, 0x5ad6, 0x5ae6, 0x5ad8, 0x5adc, 0x5b09, 0x5b17, 0x5b16, 0x5b32, 0x5b37, 0x5b40, 0x5c15, 0x5c1c, 0x5b5a, 0x5b65, 0x5b73, 0x5b51, 0x5b53, 0x5b62, 0x9a75, 0x9a77, 0x9a78, 0x9a7a, 0x9a7f, 0x9a7d, 0x9a80, 0x9a81, 0x9a85, 0x9a88, 0x9a8a, 0x9a90, 0x9a92, 0x9a93, 0x9a96, 0x9a98, 0x9a9b, 0x9a9c, 0x9a9d, 0x9a9f, 0x9aa0, 0x9aa2, 0x9aa3, 0x9aa5, 0x9aa7, 0x7e9f, 0x7ea1, 0x7ea3, 0x7ea5, 0x7ea8, 0x7ea9, /* 0xe7 */ 0x93ce, 0x93cf, 0x93d0, 0x93d1, 0x93d2, 0x93d3, 0x93d4, 0x93d5, 0x93d7, 0x93d8, 0x93d9, 0x93da, 0x93db, 0x93dc, 0x93dd, 0x93de, 0x93df, 0x93e0, 0x93e1, 0x93e2, 0x93e3, 0x93e4, 0x93e5, 0x93e6, 0x93e7, 0x93e8, 0x93e9, 0x93ea, 0x93eb, 0x93ec, 0x93ed, 0x93ee, 0x93ef, 0x93f0, 0x93f1, 0x93f2, 0x93f3, 0x93f4, 0x93f5, 0x93f6, 0x93f7, 0x93f8, 0x93f9, 0x93fa, 0x93fb, 0x93fc, 0x93fd, 0x93fe, 0x93ff, 0x9400, 0x9401, 0x9402, 0x9403, 0x9404, 0x9405, 0x9406, 0x9407, 0x9408, 0x9409, 0x940a, 0x940b, 0x940c, 0x940d, 0x940e, 0x940f, 0x9410, 0x9411, 0x9412, 0x9413, 0x9414, 0x9415, 0x9416, 0x9417, 0x9418, 0x9419, 0x941a, 0x941b, 0x941c, 0x941d, 0x941e, 0x941f, 0x9420, 0x9421, 0x9422, 0x9423, 0x9424, 0x9425, 0x9426, 0x9427, 0x9428, 0x9429, 0x942a, 0x942b, 0x942c, 0x942d, 0x942e, 0x7ead, 0x7eb0, 0x7ebe, 0x7ec0, 0x7ec1, 0x7ec2, 0x7ec9, 0x7ecb, 0x7ecc, 0x7ed0, 0x7ed4, 0x7ed7, 0x7edb, 0x7ee0, 0x7ee1, 0x7ee8, 0x7eeb, 0x7eee, 0x7eef, 0x7ef1, 0x7ef2, 0x7f0d, 0x7ef6, 0x7efa, 0x7efb, 0x7efe, 0x7f01, 0x7f02, 0x7f03, 0x7f07, 0x7f08, 0x7f0b, 0x7f0c, 0x7f0f, 0x7f11, 0x7f12, 0x7f17, 0x7f19, 0x7f1c, 0x7f1b, 0x7f1f, 0x7f21, 0x7f22, 0x7f23, 0x7f24, 0x7f25, 0x7f26, 0x7f27, 0x7f2a, 0x7f2b, 0x7f2c, 0x7f2d, 0x7f2f, 0x7f30, 0x7f31, 0x7f32, 0x7f33, 0x7f35, 0x5e7a, 0x757f, 0x5ddb, 0x753e, 0x9095, 0x738e, 0x7391, 0x73ae, 0x73a2, 0x739f, 0x73cf, 0x73c2, 0x73d1, 0x73b7, 0x73b3, 0x73c0, 0x73c9, 0x73c8, 0x73e5, 0x73d9, 0x987c, 0x740a, 0x73e9, 0x73e7, 0x73de, 0x73ba, 0x73f2, 0x740f, 0x742a, 0x745b, 0x7426, 0x7425, 0x7428, 0x7430, 0x742e, 0x742c, /* 0xe8 */ 0x942f, 0x9430, 0x9431, 0x9432, 0x9433, 0x9434, 0x9435, 0x9436, 0x9437, 0x9438, 0x9439, 0x943a, 0x943b, 0x943c, 0x943d, 0x943f, 0x9440, 0x9441, 0x9442, 0x9443, 0x9444, 0x9445, 0x9446, 0x9447, 0x9448, 0x9449, 0x944a, 0x944b, 0x944c, 0x944d, 0x944e, 0x944f, 0x9450, 0x9451, 0x9452, 0x9453, 0x9454, 0x9455, 0x9456, 0x9457, 0x9458, 0x9459, 0x945a, 0x945b, 0x945c, 0x945d, 0x945e, 0x945f, 0x9460, 0x9461, 0x9462, 0x9463, 0x9464, 0x9465, 0x9466, 0x9467, 0x9468, 0x9469, 0x946a, 0x946c, 0x946d, 0x946e, 0x946f, 0x9470, 0x9471, 0x9472, 0x9473, 0x9474, 0x9475, 0x9476, 0x9477, 0x9478, 0x9479, 0x947a, 0x947b, 0x947c, 0x947d, 0x947e, 0x947f, 0x9480, 0x9481, 0x9482, 0x9483, 0x9484, 0x9491, 0x9496, 0x9498, 0x94c7, 0x94cf, 0x94d3, 0x94d4, 0x94da, 0x94e6, 0x94fb, 0x951c, 0x9520, 0x741b, 0x741a, 0x7441, 0x745c, 0x7457, 0x7455, 0x7459, 0x7477, 0x746d, 0x747e, 0x749c, 0x748e, 0x7480, 0x7481, 0x7487, 0x748b, 0x749e, 0x74a8, 0x74a9, 0x7490, 0x74a7, 0x74d2, 0x74ba, 0x97ea, 0x97eb, 0x97ec, 0x674c, 0x6753, 0x675e, 0x6748, 0x6769, 0x67a5, 0x6787, 0x676a, 0x6773, 0x6798, 0x67a7, 0x6775, 0x67a8, 0x679e, 0x67ad, 0x678b, 0x6777, 0x677c, 0x67f0, 0x6809, 0x67d8, 0x680a, 0x67e9, 0x67b0, 0x680c, 0x67d9, 0x67b5, 0x67da, 0x67b3, 0x67dd, 0x6800, 0x67c3, 0x67b8, 0x67e2, 0x680e, 0x67c1, 0x67fd, 0x6832, 0x6833, 0x6860, 0x6861, 0x684e, 0x6862, 0x6844, 0x6864, 0x6883, 0x681d, 0x6855, 0x6866, 0x6841, 0x6867, 0x6840, 0x683e, 0x684a, 0x6849, 0x6829, 0x68b5, 0x688f, 0x6874, 0x6877, 0x6893, 0x686b, 0x68c2, 0x696e, 0x68fc, 0x691f, 0x6920, 0x68f9, /* 0xe9 */ 0x9527, 0x9533, 0x953d, 0x9543, 0x9548, 0x954b, 0x9555, 0x955a, 0x9560, 0x956e, 0x9574, 0x9575, 0x9577, 0x9578, 0x9579, 0x957a, 0x957b, 0x957c, 0x957d, 0x957e, 0x9580, 0x9581, 0x9582, 0x9583, 0x9584, 0x9585, 0x9586, 0x9587, 0x9588, 0x9589, 0x958a, 0x958b, 0x958c, 0x958d, 0x958e, 0x958f, 0x9590, 0x9591, 0x9592, 0x9593, 0x9594, 0x9595, 0x9596, 0x9597, 0x9598, 0x9599, 0x959a, 0x959b, 0x959c, 0x959d, 0x959e, 0x959f, 0x95a0, 0x95a1, 0x95a2, 0x95a3, 0x95a4, 0x95a5, 0x95a6, 0x95a7, 0x95a8, 0x95a9, 0x95aa, 0x95ab, 0x95ac, 0x95ad, 0x95ae, 0x95af, 0x95b0, 0x95b1, 0x95b2, 0x95b3, 0x95b4, 0x95b5, 0x95b6, 0x95b7, 0x95b8, 0x95b9, 0x95ba, 0x95bb, 0x95bc, 0x95bd, 0x95be, 0x95bf, 0x95c0, 0x95c1, 0x95c2, 0x95c3, 0x95c4, 0x95c5, 0x95c6, 0x95c7, 0x95c8, 0x95c9, 0x95ca, 0x95cb, 0x6924, 0x68f0, 0x690b, 0x6901, 0x6957, 0x68e3, 0x6910, 0x6971, 0x6939, 0x6960, 0x6942, 0x695d, 0x6984, 0x696b, 0x6980, 0x6998, 0x6978, 0x6934, 0x69cc, 0x6987, 0x6988, 0x69ce, 0x6989, 0x6966, 0x6963, 0x6979, 0x699b, 0x69a7, 0x69bb, 0x69ab, 0x69ad, 0x69d4, 0x69b1, 0x69c1, 0x69ca, 0x69df, 0x6995, 0x69e0, 0x698d, 0x69ff, 0x6a2f, 0x69ed, 0x6a17, 0x6a18, 0x6a65, 0x69f2, 0x6a44, 0x6a3e, 0x6aa0, 0x6a50, 0x6a5b, 0x6a35, 0x6a8e, 0x6a79, 0x6a3d, 0x6a28, 0x6a58, 0x6a7c, 0x6a91, 0x6a90, 0x6aa9, 0x6a97, 0x6aab, 0x7337, 0x7352, 0x6b81, 0x6b82, 0x6b87, 0x6b84, 0x6b92, 0x6b93, 0x6b8d, 0x6b9a, 0x6b9b, 0x6ba1, 0x6baa, 0x8f6b, 0x8f6d, 0x8f71, 0x8f72, 0x8f73, 0x8f75, 0x8f76, 0x8f78, 0x8f77, 0x8f79, 0x8f7a, 0x8f7c, 0x8f7e, 0x8f81, 0x8f82, 0x8f84, 0x8f87, 0x8f8b, /* 0xea */ 0x95cc, 0x95cd, 0x95ce, 0x95cf, 0x95d0, 0x95d1, 0x95d2, 0x95d3, 0x95d4, 0x95d5, 0x95d6, 0x95d7, 0x95d8, 0x95d9, 0x95da, 0x95db, 0x95dc, 0x95dd, 0x95de, 0x95df, 0x95e0, 0x95e1, 0x95e2, 0x95e3, 0x95e4, 0x95e5, 0x95e6, 0x95e7, 0x95ec, 0x95ff, 0x9607, 0x9613, 0x9618, 0x961b, 0x961e, 0x9620, 0x9623, 0x9624, 0x9625, 0x9626, 0x9627, 0x9628, 0x9629, 0x962b, 0x962c, 0x962d, 0x962f, 0x9630, 0x9637, 0x9638, 0x9639, 0x963a, 0x963e, 0x9641, 0x9643, 0x964a, 0x964e, 0x964f, 0x9651, 0x9652, 0x9653, 0x9656, 0x9657, 0x9658, 0x9659, 0x965a, 0x965c, 0x965d, 0x965e, 0x9660, 0x9663, 0x9665, 0x9666, 0x966b, 0x966d, 0x966e, 0x966f, 0x9670, 0x9671, 0x9673, 0x9678, 0x9679, 0x967a, 0x967b, 0x967c, 0x967d, 0x967e, 0x967f, 0x9680, 0x9681, 0x9682, 0x9683, 0x9684, 0x9687, 0x9689, 0x968a, 0x8f8d, 0x8f8e, 0x8f8f, 0x8f98, 0x8f9a, 0x8ece, 0x620b, 0x6217, 0x621b, 0x621f, 0x6222, 0x6221, 0x6225, 0x6224, 0x622c, 0x81e7, 0x74ef, 0x74f4, 0x74ff, 0x750f, 0x7511, 0x7513, 0x6534, 0x65ee, 0x65ef, 0x65f0, 0x660a, 0x6619, 0x6772, 0x6603, 0x6615, 0x6600, 0x7085, 0x66f7, 0x661d, 0x6634, 0x6631, 0x6636, 0x6635, 0x8006, 0x665f, 0x6654, 0x6641, 0x664f, 0x6656, 0x6661, 0x6657, 0x6677, 0x6684, 0x668c, 0x66a7, 0x669d, 0x66be, 0x66db, 0x66dc, 0x66e6, 0x66e9, 0x8d32, 0x8d33, 0x8d36, 0x8d3b, 0x8d3d, 0x8d40, 0x8d45, 0x8d46, 0x8d48, 0x8d49, 0x8d47, 0x8d4d, 0x8d55, 0x8d59, 0x89c7, 0x89ca, 0x89cb, 0x89cc, 0x89ce, 0x89cf, 0x89d0, 0x89d1, 0x726e, 0x729f, 0x725d, 0x7266, 0x726f, 0x727e, 0x727f, 0x7284, 0x728b, 0x728d, 0x728f, 0x7292, 0x6308, 0x6332, 0x63b0, /* 0xeb */ 0x968c, 0x968e, 0x9691, 0x9692, 0x9693, 0x9695, 0x9696, 0x969a, 0x969b, 0x969d, 0x969e, 0x969f, 0x96a0, 0x96a1, 0x96a2, 0x96a3, 0x96a4, 0x96a5, 0x96a6, 0x96a8, 0x96a9, 0x96aa, 0x96ab, 0x96ac, 0x96ad, 0x96ae, 0x96af, 0x96b1, 0x96b2, 0x96b4, 0x96b5, 0x96b7, 0x96b8, 0x96ba, 0x96bb, 0x96bf, 0x96c2, 0x96c3, 0x96c8, 0x96ca, 0x96cb, 0x96d0, 0x96d1, 0x96d3, 0x96d4, 0x96d6, 0x96d7, 0x96d8, 0x96d9, 0x96da, 0x96db, 0x96dc, 0x96dd, 0x96de, 0x96df, 0x96e1, 0x96e2, 0x96e3, 0x96e4, 0x96e5, 0x96e6, 0x96e7, 0x96eb, 0x96ec, 0x96ed, 0x96ee, 0x96f0, 0x96f1, 0x96f2, 0x96f4, 0x96f5, 0x96f8, 0x96fa, 0x96fb, 0x96fc, 0x96fd, 0x96ff, 0x9702, 0x9703, 0x9705, 0x970a, 0x970b, 0x970c, 0x9710, 0x9711, 0x9712, 0x9714, 0x9715, 0x9717, 0x9718, 0x9719, 0x971a, 0x971b, 0x971d, 0x971f, 0x9720, 0x643f, 0x64d8, 0x8004, 0x6bea, 0x6bf3, 0x6bfd, 0x6bf5, 0x6bf9, 0x6c05, 0x6c07, 0x6c06, 0x6c0d, 0x6c15, 0x6c18, 0x6c19, 0x6c1a, 0x6c21, 0x6c29, 0x6c24, 0x6c2a, 0x6c32, 0x6535, 0x6555, 0x656b, 0x724d, 0x7252, 0x7256, 0x7230, 0x8662, 0x5216, 0x809f, 0x809c, 0x8093, 0x80bc, 0x670a, 0x80bd, 0x80b1, 0x80ab, 0x80ad, 0x80b4, 0x80b7, 0x80e7, 0x80e8, 0x80e9, 0x80ea, 0x80db, 0x80c2, 0x80c4, 0x80d9, 0x80cd, 0x80d7, 0x6710, 0x80dd, 0x80eb, 0x80f1, 0x80f4, 0x80ed, 0x810d, 0x810e, 0x80f2, 0x80fc, 0x6715, 0x8112, 0x8c5a, 0x8136, 0x811e, 0x812c, 0x8118, 0x8132, 0x8148, 0x814c, 0x8153, 0x8174, 0x8159, 0x815a, 0x8171, 0x8160, 0x8169, 0x817c, 0x817d, 0x816d, 0x8167, 0x584d, 0x5ab5, 0x8188, 0x8182, 0x8191, 0x6ed5, 0x81a3, 0x81aa, 0x81cc, 0x6726, 0x81ca, 0x81bb, /* 0xec */ 0x9721, 0x9722, 0x9723, 0x9724, 0x9725, 0x9726, 0x9727, 0x9728, 0x9729, 0x972b, 0x972c, 0x972e, 0x972f, 0x9731, 0x9733, 0x9734, 0x9735, 0x9736, 0x9737, 0x973a, 0x973b, 0x973c, 0x973d, 0x973f, 0x9740, 0x9741, 0x9742, 0x9743, 0x9744, 0x9745, 0x9746, 0x9747, 0x9748, 0x9749, 0x974a, 0x974b, 0x974c, 0x974d, 0x974e, 0x974f, 0x9750, 0x9751, 0x9754, 0x9755, 0x9757, 0x9758, 0x975a, 0x975c, 0x975d, 0x975f, 0x9763, 0x9764, 0x9766, 0x9767, 0x9768, 0x976a, 0x976b, 0x976c, 0x976d, 0x976e, 0x976f, 0x9770, 0x9771, 0x9772, 0x9775, 0x9777, 0x9778, 0x9779, 0x977a, 0x977b, 0x977d, 0x977e, 0x977f, 0x9780, 0x9781, 0x9782, 0x9783, 0x9784, 0x9786, 0x9787, 0x9788, 0x9789, 0x978a, 0x978c, 0x978e, 0x978f, 0x9790, 0x9793, 0x9795, 0x9796, 0x9797, 0x9799, 0x979a, 0x979b, 0x979c, 0x979d, 0x81c1, 0x81a6, 0x6b24, 0x6b37, 0x6b39, 0x6b43, 0x6b46, 0x6b59, 0x98d1, 0x98d2, 0x98d3, 0x98d5, 0x98d9, 0x98da, 0x6bb3, 0x5f40, 0x6bc2, 0x89f3, 0x6590, 0x9f51, 0x6593, 0x65bc, 0x65c6, 0x65c4, 0x65c3, 0x65cc, 0x65ce, 0x65d2, 0x65d6, 0x7080, 0x709c, 0x7096, 0x709d, 0x70bb, 0x70c0, 0x70b7, 0x70ab, 0x70b1, 0x70e8, 0x70ca, 0x7110, 0x7113, 0x7116, 0x712f, 0x7131, 0x7173, 0x715c, 0x7168, 0x7145, 0x7172, 0x714a, 0x7178, 0x717a, 0x7198, 0x71b3, 0x71b5, 0x71a8, 0x71a0, 0x71e0, 0x71d4, 0x71e7, 0x71f9, 0x721d, 0x7228, 0x706c, 0x7118, 0x7166, 0x71b9, 0x623e, 0x623d, 0x6243, 0x6248, 0x6249, 0x793b, 0x7940, 0x7946, 0x7949, 0x795b, 0x795c, 0x7953, 0x795a, 0x7962, 0x7957, 0x7960, 0x796f, 0x7967, 0x797a, 0x7985, 0x798a, 0x799a, 0x79a7, 0x79b3, 0x5fd1, 0x5fd0, /* 0xed */ 0x979e, 0x979f, 0x97a1, 0x97a2, 0x97a4, 0x97a5, 0x97a6, 0x97a7, 0x97a8, 0x97a9, 0x97aa, 0x97ac, 0x97ae, 0x97b0, 0x97b1, 0x97b3, 0x97b5, 0x97b6, 0x97b7, 0x97b8, 0x97b9, 0x97ba, 0x97bb, 0x97bc, 0x97bd, 0x97be, 0x97bf, 0x97c0, 0x97c1, 0x97c2, 0x97c3, 0x97c4, 0x97c5, 0x97c6, 0x97c7, 0x97c8, 0x97c9, 0x97ca, 0x97cb, 0x97cc, 0x97cd, 0x97ce, 0x97cf, 0x97d0, 0x97d1, 0x97d2, 0x97d3, 0x97d4, 0x97d5, 0x97d6, 0x97d7, 0x97d8, 0x97d9, 0x97da, 0x97db, 0x97dc, 0x97dd, 0x97de, 0x97df, 0x97e0, 0x97e1, 0x97e2, 0x97e3, 0x97e4, 0x97e5, 0x97e8, 0x97ee, 0x97ef, 0x97f0, 0x97f1, 0x97f2, 0x97f4, 0x97f7, 0x97f8, 0x97f9, 0x97fa, 0x97fb, 0x97fc, 0x97fd, 0x97fe, 0x97ff, 0x9800, 0x9801, 0x9802, 0x9803, 0x9804, 0x9805, 0x9806, 0x9807, 0x9808, 0x9809, 0x980a, 0x980b, 0x980c, 0x980d, 0x980e, 0x603c, 0x605d, 0x605a, 0x6067, 0x6041, 0x6059, 0x6063, 0x60ab, 0x6106, 0x610d, 0x615d, 0x61a9, 0x619d, 0x61cb, 0x61d1, 0x6206, 0x8080, 0x807f, 0x6c93, 0x6cf6, 0x6dfc, 0x77f6, 0x77f8, 0x7800, 0x7809, 0x7817, 0x7818, 0x7811, 0x65ab, 0x782d, 0x781c, 0x781d, 0x7839, 0x783a, 0x783b, 0x781f, 0x783c, 0x7825, 0x782c, 0x7823, 0x7829, 0x784e, 0x786d, 0x7856, 0x7857, 0x7826, 0x7850, 0x7847, 0x784c, 0x786a, 0x789b, 0x7893, 0x789a, 0x7887, 0x789c, 0x78a1, 0x78a3, 0x78b2, 0x78b9, 0x78a5, 0x78d4, 0x78d9, 0x78c9, 0x78ec, 0x78f2, 0x7905, 0x78f4, 0x7913, 0x7924, 0x791e, 0x7934, 0x9f9b, 0x9ef9, 0x9efb, 0x9efc, 0x76f1, 0x7704, 0x770d, 0x76f9, 0x7707, 0x7708, 0x771a, 0x7722, 0x7719, 0x772d, 0x7726, 0x7735, 0x7738, 0x7750, 0x7751, 0x7747, 0x7743, 0x775a, 0x7768, /* 0xee */ 0x980f, 0x9810, 0x9811, 0x9812, 0x9813, 0x9814, 0x9815, 0x9816, 0x9817, 0x9818, 0x9819, 0x981a, 0x981b, 0x981c, 0x981d, 0x981e, 0x981f, 0x9820, 0x9821, 0x9822, 0x9823, 0x9824, 0x9825, 0x9826, 0x9827, 0x9828, 0x9829, 0x982a, 0x982b, 0x982c, 0x982d, 0x982e, 0x982f, 0x9830, 0x9831, 0x9832, 0x9833, 0x9834, 0x9835, 0x9836, 0x9837, 0x9838, 0x9839, 0x983a, 0x983b, 0x983c, 0x983d, 0x983e, 0x983f, 0x9840, 0x9841, 0x9842, 0x9843, 0x9844, 0x9845, 0x9846, 0x9847, 0x9848, 0x9849, 0x984a, 0x984b, 0x984c, 0x984d, 0x984e, 0x984f, 0x9850, 0x9851, 0x9852, 0x9853, 0x9854, 0x9855, 0x9856, 0x9857, 0x9858, 0x9859, 0x985a, 0x985b, 0x985c, 0x985d, 0x985e, 0x985f, 0x9860, 0x9861, 0x9862, 0x9863, 0x9864, 0x9865, 0x9866, 0x9867, 0x9868, 0x9869, 0x986a, 0x986b, 0x986c, 0x986d, 0x986e, 0x7762, 0x7765, 0x777f, 0x778d, 0x777d, 0x7780, 0x778c, 0x7791, 0x779f, 0x77a0, 0x77b0, 0x77b5, 0x77bd, 0x753a, 0x7540, 0x754e, 0x754b, 0x7548, 0x755b, 0x7572, 0x7579, 0x7583, 0x7f58, 0x7f61, 0x7f5f, 0x8a48, 0x7f68, 0x7f74, 0x7f71, 0x7f79, 0x7f81, 0x7f7e, 0x76cd, 0x76e5, 0x8832, 0x9485, 0x9486, 0x9487, 0x948b, 0x948a, 0x948c, 0x948d, 0x948f, 0x9490, 0x9494, 0x9497, 0x9495, 0x949a, 0x949b, 0x949c, 0x94a3, 0x94a4, 0x94ab, 0x94aa, 0x94ad, 0x94ac, 0x94af, 0x94b0, 0x94b2, 0x94b4, 0x94b6, 0x94b7, 0x94b8, 0x94b9, 0x94ba, 0x94bc, 0x94bd, 0x94bf, 0x94c4, 0x94c8, 0x94c9, 0x94ca, 0x94cb, 0x94cc, 0x94cd, 0x94ce, 0x94d0, 0x94d1, 0x94d2, 0x94d5, 0x94d6, 0x94d7, 0x94d9, 0x94d8, 0x94db, 0x94de, 0x94df, 0x94e0, 0x94e2, 0x94e4, 0x94e5, 0x94e7, 0x94e8, 0x94ea, /* 0xef */ 0x986f, 0x9870, 0x9871, 0x9872, 0x9873, 0x9874, 0x988b, 0x988e, 0x9892, 0x9895, 0x9899, 0x98a3, 0x98a8, 0x98a9, 0x98aa, 0x98ab, 0x98ac, 0x98ad, 0x98ae, 0x98af, 0x98b0, 0x98b1, 0x98b2, 0x98b3, 0x98b4, 0x98b5, 0x98b6, 0x98b7, 0x98b8, 0x98b9, 0x98ba, 0x98bb, 0x98bc, 0x98bd, 0x98be, 0x98bf, 0x98c0, 0x98c1, 0x98c2, 0x98c3, 0x98c4, 0x98c5, 0x98c6, 0x98c7, 0x98c8, 0x98c9, 0x98ca, 0x98cb, 0x98cc, 0x98cd, 0x98cf, 0x98d0, 0x98d4, 0x98d6, 0x98d7, 0x98db, 0x98dc, 0x98dd, 0x98e0, 0x98e1, 0x98e2, 0x98e3, 0x98e4, 0x98e5, 0x98e6, 0x98e9, 0x98ea, 0x98eb, 0x98ec, 0x98ed, 0x98ee, 0x98ef, 0x98f0, 0x98f1, 0x98f2, 0x98f3, 0x98f4, 0x98f5, 0x98f6, 0x98f7, 0x98f8, 0x98f9, 0x98fa, 0x98fb, 0x98fc, 0x98fd, 0x98fe, 0x98ff, 0x9900, 0x9901, 0x9902, 0x9903, 0x9904, 0x9905, 0x9906, 0x9907, 0x94e9, 0x94eb, 0x94ee, 0x94ef, 0x94f3, 0x94f4, 0x94f5, 0x94f7, 0x94f9, 0x94fc, 0x94fd, 0x94ff, 0x9503, 0x9502, 0x9506, 0x9507, 0x9509, 0x950a, 0x950d, 0x950e, 0x950f, 0x9512, 0x9513, 0x9514, 0x9515, 0x9516, 0x9518, 0x951b, 0x951d, 0x951e, 0x951f, 0x9522, 0x952a, 0x952b, 0x9529, 0x952c, 0x9531, 0x9532, 0x9534, 0x9536, 0x9537, 0x9538, 0x953c, 0x953e, 0x953f, 0x9542, 0x9535, 0x9544, 0x9545, 0x9546, 0x9549, 0x954c, 0x954e, 0x954f, 0x9552, 0x9553, 0x9554, 0x9556, 0x9557, 0x9558, 0x9559, 0x955b, 0x955e, 0x955f, 0x955d, 0x9561, 0x9562, 0x9564, 0x9565, 0x9566, 0x9567, 0x9568, 0x9569, 0x956a, 0x956b, 0x956c, 0x956f, 0x9571, 0x9572, 0x9573, 0x953a, 0x77e7, 0x77ec, 0x96c9, 0x79d5, 0x79ed, 0x79e3, 0x79eb, 0x7a06, 0x5d47, 0x7a03, 0x7a02, 0x7a1e, 0x7a14, /* 0xf0 */ 0x9908, 0x9909, 0x990a, 0x990b, 0x990c, 0x990e, 0x990f, 0x9911, 0x9912, 0x9913, 0x9914, 0x9915, 0x9916, 0x9917, 0x9918, 0x9919, 0x991a, 0x991b, 0x991c, 0x991d, 0x991e, 0x991f, 0x9920, 0x9921, 0x9922, 0x9923, 0x9924, 0x9925, 0x9926, 0x9927, 0x9928, 0x9929, 0x992a, 0x992b, 0x992c, 0x992d, 0x992f, 0x9930, 0x9931, 0x9932, 0x9933, 0x9934, 0x9935, 0x9936, 0x9937, 0x9938, 0x9939, 0x993a, 0x993b, 0x993c, 0x993d, 0x993e, 0x993f, 0x9940, 0x9941, 0x9942, 0x9943, 0x9944, 0x9945, 0x9946, 0x9947, 0x9948, 0x9949, 0x994a, 0x994b, 0x994c, 0x994d, 0x994e, 0x994f, 0x9950, 0x9951, 0x9952, 0x9953, 0x9956, 0x9957, 0x9958, 0x9959, 0x995a, 0x995b, 0x995c, 0x995d, 0x995e, 0x995f, 0x9960, 0x9961, 0x9962, 0x9964, 0x9966, 0x9973, 0x9978, 0x9979, 0x997b, 0x997e, 0x9982, 0x9983, 0x9989, 0x7a39, 0x7a37, 0x7a51, 0x9ecf, 0x99a5, 0x7a70, 0x7688, 0x768e, 0x7693, 0x7699, 0x76a4, 0x74de, 0x74e0, 0x752c, 0x9e20, 0x9e22, 0x9e28, 0x9e29, 0x9e2a, 0x9e2b, 0x9e2c, 0x9e32, 0x9e31, 0x9e36, 0x9e38, 0x9e37, 0x9e39, 0x9e3a, 0x9e3e, 0x9e41, 0x9e42, 0x9e44, 0x9e46, 0x9e47, 0x9e48, 0x9e49, 0x9e4b, 0x9e4c, 0x9e4e, 0x9e51, 0x9e55, 0x9e57, 0x9e5a, 0x9e5b, 0x9e5c, 0x9e5e, 0x9e63, 0x9e66, 0x9e67, 0x9e68, 0x9e69, 0x9e6a, 0x9e6b, 0x9e6c, 0x9e71, 0x9e6d, 0x9e73, 0x7592, 0x7594, 0x7596, 0x75a0, 0x759d, 0x75ac, 0x75a3, 0x75b3, 0x75b4, 0x75b8, 0x75c4, 0x75b1, 0x75b0, 0x75c3, 0x75c2, 0x75d6, 0x75cd, 0x75e3, 0x75e8, 0x75e6, 0x75e4, 0x75eb, 0x75e7, 0x7603, 0x75f1, 0x75fc, 0x75ff, 0x7610, 0x7600, 0x7605, 0x760c, 0x7617, 0x760a, 0x7625, 0x7618, 0x7615, 0x7619, /* 0xf1 */ 0x998c, 0x998e, 0x999a, 0x999b, 0x999c, 0x999d, 0x999e, 0x999f, 0x99a0, 0x99a1, 0x99a2, 0x99a3, 0x99a4, 0x99a6, 0x99a7, 0x99a9, 0x99aa, 0x99ab, 0x99ac, 0x99ad, 0x99ae, 0x99af, 0x99b0, 0x99b1, 0x99b2, 0x99b3, 0x99b4, 0x99b5, 0x99b6, 0x99b7, 0x99b8, 0x99b9, 0x99ba, 0x99bb, 0x99bc, 0x99bd, 0x99be, 0x99bf, 0x99c0, 0x99c1, 0x99c2, 0x99c3, 0x99c4, 0x99c5, 0x99c6, 0x99c7, 0x99c8, 0x99c9, 0x99ca, 0x99cb, 0x99cc, 0x99cd, 0x99ce, 0x99cf, 0x99d0, 0x99d1, 0x99d2, 0x99d3, 0x99d4, 0x99d5, 0x99d6, 0x99d7, 0x99d8, 0x99d9, 0x99da, 0x99db, 0x99dc, 0x99dd, 0x99de, 0x99df, 0x99e0, 0x99e1, 0x99e2, 0x99e3, 0x99e4, 0x99e5, 0x99e6, 0x99e7, 0x99e8, 0x99e9, 0x99ea, 0x99eb, 0x99ec, 0x99ed, 0x99ee, 0x99ef, 0x99f0, 0x99f1, 0x99f2, 0x99f3, 0x99f4, 0x99f5, 0x99f6, 0x99f7, 0x99f8, 0x99f9, 0x761b, 0x763c, 0x7622, 0x7620, 0x7640, 0x762d, 0x7630, 0x763f, 0x7635, 0x7643, 0x763e, 0x7633, 0x764d, 0x765e, 0x7654, 0x765c, 0x7656, 0x766b, 0x766f, 0x7fca, 0x7ae6, 0x7a78, 0x7a79, 0x7a80, 0x7a86, 0x7a88, 0x7a95, 0x7aa6, 0x7aa0, 0x7aac, 0x7aa8, 0x7aad, 0x7ab3, 0x8864, 0x8869, 0x8872, 0x887d, 0x887f, 0x8882, 0x88a2, 0x88c6, 0x88b7, 0x88bc, 0x88c9, 0x88e2, 0x88ce, 0x88e3, 0x88e5, 0x88f1, 0x891a, 0x88fc, 0x88e8, 0x88fe, 0x88f0, 0x8921, 0x8919, 0x8913, 0x891b, 0x890a, 0x8934, 0x892b, 0x8936, 0x8941, 0x8966, 0x897b, 0x758b, 0x80e5, 0x76b2, 0x76b4, 0x77dc, 0x8012, 0x8014, 0x8016, 0x801c, 0x8020, 0x8022, 0x8025, 0x8026, 0x8027, 0x8029, 0x8028, 0x8031, 0x800b, 0x8035, 0x8043, 0x8046, 0x804d, 0x8052, 0x8069, 0x8071, 0x8983, 0x9878, 0x9880, 0x9883, /* 0xf2 */ 0x99fa, 0x99fb, 0x99fc, 0x99fd, 0x99fe, 0x99ff, 0x9a00, 0x9a01, 0x9a02, 0x9a03, 0x9a04, 0x9a05, 0x9a06, 0x9a07, 0x9a08, 0x9a09, 0x9a0a, 0x9a0b, 0x9a0c, 0x9a0d, 0x9a0e, 0x9a0f, 0x9a10, 0x9a11, 0x9a12, 0x9a13, 0x9a14, 0x9a15, 0x9a16, 0x9a17, 0x9a18, 0x9a19, 0x9a1a, 0x9a1b, 0x9a1c, 0x9a1d, 0x9a1e, 0x9a1f, 0x9a20, 0x9a21, 0x9a22, 0x9a23, 0x9a24, 0x9a25, 0x9a26, 0x9a27, 0x9a28, 0x9a29, 0x9a2a, 0x9a2b, 0x9a2c, 0x9a2d, 0x9a2e, 0x9a2f, 0x9a30, 0x9a31, 0x9a32, 0x9a33, 0x9a34, 0x9a35, 0x9a36, 0x9a37, 0x9a38, 0x9a39, 0x9a3a, 0x9a3b, 0x9a3c, 0x9a3d, 0x9a3e, 0x9a3f, 0x9a40, 0x9a41, 0x9a42, 0x9a43, 0x9a44, 0x9a45, 0x9a46, 0x9a47, 0x9a48, 0x9a49, 0x9a4a, 0x9a4b, 0x9a4c, 0x9a4d, 0x9a4e, 0x9a4f, 0x9a50, 0x9a51, 0x9a52, 0x9a53, 0x9a54, 0x9a55, 0x9a56, 0x9a57, 0x9a58, 0x9a59, 0x9889, 0x988c, 0x988d, 0x988f, 0x9894, 0x989a, 0x989b, 0x989e, 0x989f, 0x98a1, 0x98a2, 0x98a5, 0x98a6, 0x864d, 0x8654, 0x866c, 0x866e, 0x867f, 0x867a, 0x867c, 0x867b, 0x86a8, 0x868d, 0x868b, 0x86ac, 0x869d, 0x86a7, 0x86a3, 0x86aa, 0x8693, 0x86a9, 0x86b6, 0x86c4, 0x86b5, 0x86ce, 0x86b0, 0x86ba, 0x86b1, 0x86af, 0x86c9, 0x86cf, 0x86b4, 0x86e9, 0x86f1, 0x86f2, 0x86ed, 0x86f3, 0x86d0, 0x8713, 0x86de, 0x86f4, 0x86df, 0x86d8, 0x86d1, 0x8703, 0x8707, 0x86f8, 0x8708, 0x870a, 0x870d, 0x8709, 0x8723, 0x873b, 0x871e, 0x8725, 0x872e, 0x871a, 0x873e, 0x8748, 0x8734, 0x8731, 0x8729, 0x8737, 0x873f, 0x8782, 0x8722, 0x877d, 0x877e, 0x877b, 0x8760, 0x8770, 0x874c, 0x876e, 0x878b, 0x8753, 0x8763, 0x877c, 0x8764, 0x8759, 0x8765, 0x8793, 0x87af, 0x87a8, 0x87d2, /* 0xf3 */ 0x9a5a, 0x9a5b, 0x9a5c, 0x9a5d, 0x9a5e, 0x9a5f, 0x9a60, 0x9a61, 0x9a62, 0x9a63, 0x9a64, 0x9a65, 0x9a66, 0x9a67, 0x9a68, 0x9a69, 0x9a6a, 0x9a6b, 0x9a72, 0x9a83, 0x9a89, 0x9a8d, 0x9a8e, 0x9a94, 0x9a95, 0x9a99, 0x9aa6, 0x9aa9, 0x9aaa, 0x9aab, 0x9aac, 0x9aad, 0x9aae, 0x9aaf, 0x9ab2, 0x9ab3, 0x9ab4, 0x9ab5, 0x9ab9, 0x9abb, 0x9abd, 0x9abe, 0x9abf, 0x9ac3, 0x9ac4, 0x9ac6, 0x9ac7, 0x9ac8, 0x9ac9, 0x9aca, 0x9acd, 0x9ace, 0x9acf, 0x9ad0, 0x9ad2, 0x9ad4, 0x9ad5, 0x9ad6, 0x9ad7, 0x9ad9, 0x9ada, 0x9adb, 0x9adc, 0x9add, 0x9ade, 0x9ae0, 0x9ae2, 0x9ae3, 0x9ae4, 0x9ae5, 0x9ae7, 0x9ae8, 0x9ae9, 0x9aea, 0x9aec, 0x9aee, 0x9af0, 0x9af1, 0x9af2, 0x9af3, 0x9af4, 0x9af5, 0x9af6, 0x9af7, 0x9af8, 0x9afa, 0x9afc, 0x9afd, 0x9afe, 0x9aff, 0x9b00, 0x9b01, 0x9b02, 0x9b04, 0x9b05, 0x9b06, 0x87c6, 0x8788, 0x8785, 0x87ad, 0x8797, 0x8783, 0x87ab, 0x87e5, 0x87ac, 0x87b5, 0x87b3, 0x87cb, 0x87d3, 0x87bd, 0x87d1, 0x87c0, 0x87ca, 0x87db, 0x87ea, 0x87e0, 0x87ee, 0x8816, 0x8813, 0x87fe, 0x880a, 0x881b, 0x8821, 0x8839, 0x883c, 0x7f36, 0x7f42, 0x7f44, 0x7f45, 0x8210, 0x7afa, 0x7afd, 0x7b08, 0x7b03, 0x7b04, 0x7b15, 0x7b0a, 0x7b2b, 0x7b0f, 0x7b47, 0x7b38, 0x7b2a, 0x7b19, 0x7b2e, 0x7b31, 0x7b20, 0x7b25, 0x7b24, 0x7b33, 0x7b3e, 0x7b1e, 0x7b58, 0x7b5a, 0x7b45, 0x7b75, 0x7b4c, 0x7b5d, 0x7b60, 0x7b6e, 0x7b7b, 0x7b62, 0x7b72, 0x7b71, 0x7b90, 0x7ba6, 0x7ba7, 0x7bb8, 0x7bac, 0x7b9d, 0x7ba8, 0x7b85, 0x7baa, 0x7b9c, 0x7ba2, 0x7bab, 0x7bb4, 0x7bd1, 0x7bc1, 0x7bcc, 0x7bdd, 0x7bda, 0x7be5, 0x7be6, 0x7bea, 0x7c0c, 0x7bfe, 0x7bfc, 0x7c0f, 0x7c16, 0x7c0b, /* 0xf4 */ 0x9b07, 0x9b09, 0x9b0a, 0x9b0b, 0x9b0c, 0x9b0d, 0x9b0e, 0x9b10, 0x9b11, 0x9b12, 0x9b14, 0x9b15, 0x9b16, 0x9b17, 0x9b18, 0x9b19, 0x9b1a, 0x9b1b, 0x9b1c, 0x9b1d, 0x9b1e, 0x9b20, 0x9b21, 0x9b22, 0x9b24, 0x9b25, 0x9b26, 0x9b27, 0x9b28, 0x9b29, 0x9b2a, 0x9b2b, 0x9b2c, 0x9b2d, 0x9b2e, 0x9b30, 0x9b31, 0x9b33, 0x9b34, 0x9b35, 0x9b36, 0x9b37, 0x9b38, 0x9b39, 0x9b3a, 0x9b3d, 0x9b3e, 0x9b3f, 0x9b40, 0x9b46, 0x9b4a, 0x9b4b, 0x9b4c, 0x9b4e, 0x9b50, 0x9b52, 0x9b53, 0x9b55, 0x9b56, 0x9b57, 0x9b58, 0x9b59, 0x9b5a, 0x9b5b, 0x9b5c, 0x9b5d, 0x9b5e, 0x9b5f, 0x9b60, 0x9b61, 0x9b62, 0x9b63, 0x9b64, 0x9b65, 0x9b66, 0x9b67, 0x9b68, 0x9b69, 0x9b6a, 0x9b6b, 0x9b6c, 0x9b6d, 0x9b6e, 0x9b6f, 0x9b70, 0x9b71, 0x9b72, 0x9b73, 0x9b74, 0x9b75, 0x9b76, 0x9b77, 0x9b78, 0x9b79, 0x9b7a, 0x9b7b, 0x7c1f, 0x7c2a, 0x7c26, 0x7c38, 0x7c41, 0x7c40, 0x81fe, 0x8201, 0x8202, 0x8204, 0x81ec, 0x8844, 0x8221, 0x8222, 0x8223, 0x822d, 0x822f, 0x8228, 0x822b, 0x8238, 0x823b, 0x8233, 0x8234, 0x823e, 0x8244, 0x8249, 0x824b, 0x824f, 0x825a, 0x825f, 0x8268, 0x887e, 0x8885, 0x8888, 0x88d8, 0x88df, 0x895e, 0x7f9d, 0x7f9f, 0x7fa7, 0x7faf, 0x7fb0, 0x7fb2, 0x7c7c, 0x6549, 0x7c91, 0x7c9d, 0x7c9c, 0x7c9e, 0x7ca2, 0x7cb2, 0x7cbc, 0x7cbd, 0x7cc1, 0x7cc7, 0x7ccc, 0x7ccd, 0x7cc8, 0x7cc5, 0x7cd7, 0x7ce8, 0x826e, 0x66a8, 0x7fbf, 0x7fce, 0x7fd5, 0x7fe5, 0x7fe1, 0x7fe6, 0x7fe9, 0x7fee, 0x7ff3, 0x7cf8, 0x7d77, 0x7da6, 0x7dae, 0x7e47, 0x7e9b, 0x9eb8, 0x9eb4, 0x8d73, 0x8d84, 0x8d94, 0x8d91, 0x8db1, 0x8d67, 0x8d6d, 0x8c47, 0x8c49, 0x914a, 0x9150, 0x914e, 0x914f, 0x9164, /* 0xf5 */ 0x9b7c, 0x9b7d, 0x9b7e, 0x9b7f, 0x9b80, 0x9b81, 0x9b82, 0x9b83, 0x9b84, 0x9b85, 0x9b86, 0x9b87, 0x9b88, 0x9b89, 0x9b8a, 0x9b8b, 0x9b8c, 0x9b8d, 0x9b8e, 0x9b8f, 0x9b90, 0x9b91, 0x9b92, 0x9b93, 0x9b94, 0x9b95, 0x9b96, 0x9b97, 0x9b98, 0x9b99, 0x9b9a, 0x9b9b, 0x9b9c, 0x9b9d, 0x9b9e, 0x9b9f, 0x9ba0, 0x9ba1, 0x9ba2, 0x9ba3, 0x9ba4, 0x9ba5, 0x9ba6, 0x9ba7, 0x9ba8, 0x9ba9, 0x9baa, 0x9bab, 0x9bac, 0x9bad, 0x9bae, 0x9baf, 0x9bb0, 0x9bb1, 0x9bb2, 0x9bb3, 0x9bb4, 0x9bb5, 0x9bb6, 0x9bb7, 0x9bb8, 0x9bb9, 0x9bba, 0x9bbb, 0x9bbc, 0x9bbd, 0x9bbe, 0x9bbf, 0x9bc0, 0x9bc1, 0x9bc2, 0x9bc3, 0x9bc4, 0x9bc5, 0x9bc6, 0x9bc7, 0x9bc8, 0x9bc9, 0x9bca, 0x9bcb, 0x9bcc, 0x9bcd, 0x9bce, 0x9bcf, 0x9bd0, 0x9bd1, 0x9bd2, 0x9bd3, 0x9bd4, 0x9bd5, 0x9bd6, 0x9bd7, 0x9bd8, 0x9bd9, 0x9bda, 0x9bdb, 0x9162, 0x9161, 0x9170, 0x9169, 0x916f, 0x917d, 0x917e, 0x9172, 0x9174, 0x9179, 0x918c, 0x9185, 0x9190, 0x918d, 0x9191, 0x91a2, 0x91a3, 0x91aa, 0x91ad, 0x91ae, 0x91af, 0x91b5, 0x91b4, 0x91ba, 0x8c55, 0x9e7e, 0x8db8, 0x8deb, 0x8e05, 0x8e59, 0x8e69, 0x8db5, 0x8dbf, 0x8dbc, 0x8dba, 0x8dc4, 0x8dd6, 0x8dd7, 0x8dda, 0x8dde, 0x8dce, 0x8dcf, 0x8ddb, 0x8dc6, 0x8dec, 0x8df7, 0x8df8, 0x8de3, 0x8df9, 0x8dfb, 0x8de4, 0x8e09, 0x8dfd, 0x8e14, 0x8e1d, 0x8e1f, 0x8e2c, 0x8e2e, 0x8e23, 0x8e2f, 0x8e3a, 0x8e40, 0x8e39, 0x8e35, 0x8e3d, 0x8e31, 0x8e49, 0x8e41, 0x8e42, 0x8e51, 0x8e52, 0x8e4a, 0x8e70, 0x8e76, 0x8e7c, 0x8e6f, 0x8e74, 0x8e85, 0x8e8f, 0x8e94, 0x8e90, 0x8e9c, 0x8e9e, 0x8c78, 0x8c82, 0x8c8a, 0x8c85, 0x8c98, 0x8c94, 0x659b, 0x89d6, 0x89de, 0x89da, 0x89dc, /* 0xf6 */ 0x9bdc, 0x9bdd, 0x9bde, 0x9bdf, 0x9be0, 0x9be1, 0x9be2, 0x9be3, 0x9be4, 0x9be5, 0x9be6, 0x9be7, 0x9be8, 0x9be9, 0x9bea, 0x9beb, 0x9bec, 0x9bed, 0x9bee, 0x9bef, 0x9bf0, 0x9bf1, 0x9bf2, 0x9bf3, 0x9bf4, 0x9bf5, 0x9bf6, 0x9bf7, 0x9bf8, 0x9bf9, 0x9bfa, 0x9bfb, 0x9bfc, 0x9bfd, 0x9bfe, 0x9bff, 0x9c00, 0x9c01, 0x9c02, 0x9c03, 0x9c04, 0x9c05, 0x9c06, 0x9c07, 0x9c08, 0x9c09, 0x9c0a, 0x9c0b, 0x9c0c, 0x9c0d, 0x9c0e, 0x9c0f, 0x9c10, 0x9c11, 0x9c12, 0x9c13, 0x9c14, 0x9c15, 0x9c16, 0x9c17, 0x9c18, 0x9c19, 0x9c1a, 0x9c1b, 0x9c1c, 0x9c1d, 0x9c1e, 0x9c1f, 0x9c20, 0x9c21, 0x9c22, 0x9c23, 0x9c24, 0x9c25, 0x9c26, 0x9c27, 0x9c28, 0x9c29, 0x9c2a, 0x9c2b, 0x9c2c, 0x9c2d, 0x9c2e, 0x9c2f, 0x9c30, 0x9c31, 0x9c32, 0x9c33, 0x9c34, 0x9c35, 0x9c36, 0x9c37, 0x9c38, 0x9c39, 0x9c3a, 0x9c3b, 0x89e5, 0x89eb, 0x89ef, 0x8a3e, 0x8b26, 0x9753, 0x96e9, 0x96f3, 0x96ef, 0x9706, 0x9701, 0x9708, 0x970f, 0x970e, 0x972a, 0x972d, 0x9730, 0x973e, 0x9f80, 0x9f83, 0x9f85, 0x9f86, 0x9f87, 0x9f88, 0x9f89, 0x9f8a, 0x9f8c, 0x9efe, 0x9f0b, 0x9f0d, 0x96b9, 0x96bc, 0x96bd, 0x96ce, 0x96d2, 0x77bf, 0x96e0, 0x928e, 0x92ae, 0x92c8, 0x933e, 0x936a, 0x93ca, 0x938f, 0x943e, 0x946b, 0x9c7f, 0x9c82, 0x9c85, 0x9c86, 0x9c87, 0x9c88, 0x7a23, 0x9c8b, 0x9c8e, 0x9c90, 0x9c91, 0x9c92, 0x9c94, 0x9c95, 0x9c9a, 0x9c9b, 0x9c9e, 0x9c9f, 0x9ca0, 0x9ca1, 0x9ca2, 0x9ca3, 0x9ca5, 0x9ca6, 0x9ca7, 0x9ca8, 0x9ca9, 0x9cab, 0x9cad, 0x9cae, 0x9cb0, 0x9cb1, 0x9cb2, 0x9cb3, 0x9cb4, 0x9cb5, 0x9cb6, 0x9cb7, 0x9cba, 0x9cbb, 0x9cbc, 0x9cbd, 0x9cc4, 0x9cc5, 0x9cc6, 0x9cc7, 0x9cca, 0x9ccb, /* 0xf7 */ 0x9c3c, 0x9c3d, 0x9c3e, 0x9c3f, 0x9c40, 0x9c41, 0x9c42, 0x9c43, 0x9c44, 0x9c45, 0x9c46, 0x9c47, 0x9c48, 0x9c49, 0x9c4a, 0x9c4b, 0x9c4c, 0x9c4d, 0x9c4e, 0x9c4f, 0x9c50, 0x9c51, 0x9c52, 0x9c53, 0x9c54, 0x9c55, 0x9c56, 0x9c57, 0x9c58, 0x9c59, 0x9c5a, 0x9c5b, 0x9c5c, 0x9c5d, 0x9c5e, 0x9c5f, 0x9c60, 0x9c61, 0x9c62, 0x9c63, 0x9c64, 0x9c65, 0x9c66, 0x9c67, 0x9c68, 0x9c69, 0x9c6a, 0x9c6b, 0x9c6c, 0x9c6d, 0x9c6e, 0x9c6f, 0x9c70, 0x9c71, 0x9c72, 0x9c73, 0x9c74, 0x9c75, 0x9c76, 0x9c77, 0x9c78, 0x9c79, 0x9c7a, 0x9c7b, 0x9c7d, 0x9c7e, 0x9c80, 0x9c83, 0x9c84, 0x9c89, 0x9c8a, 0x9c8c, 0x9c8f, 0x9c93, 0x9c96, 0x9c97, 0x9c98, 0x9c99, 0x9c9d, 0x9caa, 0x9cac, 0x9caf, 0x9cb9, 0x9cbe, 0x9cbf, 0x9cc0, 0x9cc1, 0x9cc2, 0x9cc8, 0x9cc9, 0x9cd1, 0x9cd2, 0x9cda, 0x9cdb, 0x9ce0, 0x9ce1, 0x9ccc, 0x9ccd, 0x9cce, 0x9ccf, 0x9cd0, 0x9cd3, 0x9cd4, 0x9cd5, 0x9cd7, 0x9cd8, 0x9cd9, 0x9cdc, 0x9cdd, 0x9cdf, 0x9ce2, 0x977c, 0x9785, 0x9791, 0x9792, 0x9794, 0x97af, 0x97ab, 0x97a3, 0x97b2, 0x97b4, 0x9ab1, 0x9ab0, 0x9ab7, 0x9e58, 0x9ab6, 0x9aba, 0x9abc, 0x9ac1, 0x9ac0, 0x9ac5, 0x9ac2, 0x9acb, 0x9acc, 0x9ad1, 0x9b45, 0x9b43, 0x9b47, 0x9b49, 0x9b48, 0x9b4d, 0x9b51, 0x98e8, 0x990d, 0x992e, 0x9955, 0x9954, 0x9adf, 0x9ae1, 0x9ae6, 0x9aef, 0x9aeb, 0x9afb, 0x9aed, 0x9af9, 0x9b08, 0x9b0f, 0x9b13, 0x9b1f, 0x9b23, 0x9ebd, 0x9ebe, 0x7e3b, 0x9e82, 0x9e87, 0x9e88, 0x9e8b, 0x9e92, 0x93d6, 0x9e9d, 0x9e9f, 0x9edb, 0x9edc, 0x9edd, 0x9ee0, 0x9edf, 0x9ee2, 0x9ee9, 0x9ee7, 0x9ee5, 0x9eea, 0x9eef, 0x9f22, 0x9f2c, 0x9f2f, 0x9f39, 0x9f37, 0x9f3d, 0x9f3e, 0x9f44, /* 0xf8 */ 0x9ce3, 0x9ce4, 0x9ce5, 0x9ce6, 0x9ce7, 0x9ce8, 0x9ce9, 0x9cea, 0x9ceb, 0x9cec, 0x9ced, 0x9cee, 0x9cef, 0x9cf0, 0x9cf1, 0x9cf2, 0x9cf3, 0x9cf4, 0x9cf5, 0x9cf6, 0x9cf7, 0x9cf8, 0x9cf9, 0x9cfa, 0x9cfb, 0x9cfc, 0x9cfd, 0x9cfe, 0x9cff, 0x9d00, 0x9d01, 0x9d02, 0x9d03, 0x9d04, 0x9d05, 0x9d06, 0x9d07, 0x9d08, 0x9d09, 0x9d0a, 0x9d0b, 0x9d0c, 0x9d0d, 0x9d0e, 0x9d0f, 0x9d10, 0x9d11, 0x9d12, 0x9d13, 0x9d14, 0x9d15, 0x9d16, 0x9d17, 0x9d18, 0x9d19, 0x9d1a, 0x9d1b, 0x9d1c, 0x9d1d, 0x9d1e, 0x9d1f, 0x9d20, 0x9d21, 0x9d22, 0x9d23, 0x9d24, 0x9d25, 0x9d26, 0x9d27, 0x9d28, 0x9d29, 0x9d2a, 0x9d2b, 0x9d2c, 0x9d2d, 0x9d2e, 0x9d2f, 0x9d30, 0x9d31, 0x9d32, 0x9d33, 0x9d34, 0x9d35, 0x9d36, 0x9d37, 0x9d38, 0x9d39, 0x9d3a, 0x9d3b, 0x9d3c, 0x9d3d, 0x9d3e, 0x9d3f, 0x9d40, 0x9d41, 0x9d42, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0xf9 */ 0x9d43, 0x9d44, 0x9d45, 0x9d46, 0x9d47, 0x9d48, 0x9d49, 0x9d4a, 0x9d4b, 0x9d4c, 0x9d4d, 0x9d4e, 0x9d4f, 0x9d50, 0x9d51, 0x9d52, 0x9d53, 0x9d54, 0x9d55, 0x9d56, 0x9d57, 0x9d58, 0x9d59, 0x9d5a, 0x9d5b, 0x9d5c, 0x9d5d, 0x9d5e, 0x9d5f, 0x9d60, 0x9d61, 0x9d62, 0x9d63, 0x9d64, 0x9d65, 0x9d66, 0x9d67, 0x9d68, 0x9d69, 0x9d6a, 0x9d6b, 0x9d6c, 0x9d6d, 0x9d6e, 0x9d6f, 0x9d70, 0x9d71, 0x9d72, 0x9d73, 0x9d74, 0x9d75, 0x9d76, 0x9d77, 0x9d78, 0x9d79, 0x9d7a, 0x9d7b, 0x9d7c, 0x9d7d, 0x9d7e, 0x9d7f, 0x9d80, 0x9d81, 0x9d82, 0x9d83, 0x9d84, 0x9d85, 0x9d86, 0x9d87, 0x9d88, 0x9d89, 0x9d8a, 0x9d8b, 0x9d8c, 0x9d8d, 0x9d8e, 0x9d8f, 0x9d90, 0x9d91, 0x9d92, 0x9d93, 0x9d94, 0x9d95, 0x9d96, 0x9d97, 0x9d98, 0x9d99, 0x9d9a, 0x9d9b, 0x9d9c, 0x9d9d, 0x9d9e, 0x9d9f, 0x9da0, 0x9da1, 0x9da2, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0xfa */ 0x9da3, 0x9da4, 0x9da5, 0x9da6, 0x9da7, 0x9da8, 0x9da9, 0x9daa, 0x9dab, 0x9dac, 0x9dad, 0x9dae, 0x9daf, 0x9db0, 0x9db1, 0x9db2, 0x9db3, 0x9db4, 0x9db5, 0x9db6, 0x9db7, 0x9db8, 0x9db9, 0x9dba, 0x9dbb, 0x9dbc, 0x9dbd, 0x9dbe, 0x9dbf, 0x9dc0, 0x9dc1, 0x9dc2, 0x9dc3, 0x9dc4, 0x9dc5, 0x9dc6, 0x9dc7, 0x9dc8, 0x9dc9, 0x9dca, 0x9dcb, 0x9dcc, 0x9dcd, 0x9dce, 0x9dcf, 0x9dd0, 0x9dd1, 0x9dd2, 0x9dd3, 0x9dd4, 0x9dd5, 0x9dd6, 0x9dd7, 0x9dd8, 0x9dd9, 0x9dda, 0x9ddb, 0x9ddc, 0x9ddd, 0x9dde, 0x9ddf, 0x9de0, 0x9de1, 0x9de2, 0x9de3, 0x9de4, 0x9de5, 0x9de6, 0x9de7, 0x9de8, 0x9de9, 0x9dea, 0x9deb, 0x9dec, 0x9ded, 0x9dee, 0x9def, 0x9df0, 0x9df1, 0x9df2, 0x9df3, 0x9df4, 0x9df5, 0x9df6, 0x9df7, 0x9df8, 0x9df9, 0x9dfa, 0x9dfb, 0x9dfc, 0x9dfd, 0x9dfe, 0x9dff, 0x9e00, 0x9e01, 0x9e02, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0xfb */ 0x9e03, 0x9e04, 0x9e05, 0x9e06, 0x9e07, 0x9e08, 0x9e09, 0x9e0a, 0x9e0b, 0x9e0c, 0x9e0d, 0x9e0e, 0x9e0f, 0x9e10, 0x9e11, 0x9e12, 0x9e13, 0x9e14, 0x9e15, 0x9e16, 0x9e17, 0x9e18, 0x9e19, 0x9e1a, 0x9e1b, 0x9e1c, 0x9e1d, 0x9e1e, 0x9e24, 0x9e27, 0x9e2e, 0x9e30, 0x9e34, 0x9e3b, 0x9e3c, 0x9e40, 0x9e4d, 0x9e50, 0x9e52, 0x9e53, 0x9e54, 0x9e56, 0x9e59, 0x9e5d, 0x9e5f, 0x9e60, 0x9e61, 0x9e62, 0x9e65, 0x9e6e, 0x9e6f, 0x9e72, 0x9e74, 0x9e75, 0x9e76, 0x9e77, 0x9e78, 0x9e79, 0x9e7a, 0x9e7b, 0x9e7c, 0x9e7d, 0x9e80, 0x9e81, 0x9e83, 0x9e84, 0x9e85, 0x9e86, 0x9e89, 0x9e8a, 0x9e8c, 0x9e8d, 0x9e8e, 0x9e8f, 0x9e90, 0x9e91, 0x9e94, 0x9e95, 0x9e96, 0x9e97, 0x9e98, 0x9e99, 0x9e9a, 0x9e9b, 0x9e9c, 0x9e9e, 0x9ea0, 0x9ea1, 0x9ea2, 0x9ea3, 0x9ea4, 0x9ea5, 0x9ea7, 0x9ea8, 0x9ea9, 0x9eaa, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0xfc */ 0x9eab, 0x9eac, 0x9ead, 0x9eae, 0x9eaf, 0x9eb0, 0x9eb1, 0x9eb2, 0x9eb3, 0x9eb5, 0x9eb6, 0x9eb7, 0x9eb9, 0x9eba, 0x9ebc, 0x9ebf, 0x9ec0, 0x9ec1, 0x9ec2, 0x9ec3, 0x9ec5, 0x9ec6, 0x9ec7, 0x9ec8, 0x9eca, 0x9ecb, 0x9ecc, 0x9ed0, 0x9ed2, 0x9ed3, 0x9ed5, 0x9ed6, 0x9ed7, 0x9ed9, 0x9eda, 0x9ede, 0x9ee1, 0x9ee3, 0x9ee4, 0x9ee6, 0x9ee8, 0x9eeb, 0x9eec, 0x9eed, 0x9eee, 0x9ef0, 0x9ef1, 0x9ef2, 0x9ef3, 0x9ef4, 0x9ef5, 0x9ef6, 0x9ef7, 0x9ef8, 0x9efa, 0x9efd, 0x9eff, 0x9f00, 0x9f01, 0x9f02, 0x9f03, 0x9f04, 0x9f05, 0x9f06, 0x9f07, 0x9f08, 0x9f09, 0x9f0a, 0x9f0c, 0x9f0f, 0x9f11, 0x9f12, 0x9f14, 0x9f15, 0x9f16, 0x9f18, 0x9f1a, 0x9f1b, 0x9f1c, 0x9f1d, 0x9f1e, 0x9f1f, 0x9f21, 0x9f23, 0x9f24, 0x9f25, 0x9f26, 0x9f27, 0x9f28, 0x9f29, 0x9f2a, 0x9f2b, 0x9f2d, 0x9f2e, 0x9f30, 0x9f31, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0xfd */ 0x9f32, 0x9f33, 0x9f34, 0x9f35, 0x9f36, 0x9f38, 0x9f3a, 0x9f3c, 0x9f3f, 0x9f40, 0x9f41, 0x9f42, 0x9f43, 0x9f45, 0x9f46, 0x9f47, 0x9f48, 0x9f49, 0x9f4a, 0x9f4b, 0x9f4c, 0x9f4d, 0x9f4e, 0x9f4f, 0x9f52, 0x9f53, 0x9f54, 0x9f55, 0x9f56, 0x9f57, 0x9f58, 0x9f59, 0x9f5a, 0x9f5b, 0x9f5c, 0x9f5d, 0x9f5e, 0x9f5f, 0x9f60, 0x9f61, 0x9f62, 0x9f63, 0x9f64, 0x9f65, 0x9f66, 0x9f67, 0x9f68, 0x9f69, 0x9f6a, 0x9f6b, 0x9f6c, 0x9f6d, 0x9f6e, 0x9f6f, 0x9f70, 0x9f71, 0x9f72, 0x9f73, 0x9f74, 0x9f75, 0x9f76, 0x9f77, 0x9f78, 0x9f79, 0x9f7a, 0x9f7b, 0x9f7c, 0x9f7d, 0x9f7e, 0x9f81, 0x9f82, 0x9f8d, 0x9f8e, 0x9f8f, 0x9f90, 0x9f91, 0x9f92, 0x9f93, 0x9f94, 0x9f95, 0x9f96, 0x9f97, 0x9f98, 0x9f9c, 0x9f9d, 0x9f9e, 0x9fa1, 0x9fa2, 0x9fa3, 0x9fa4, 0x9fa5, 0xf92c, 0xf979, 0xf995, 0xf9e7, 0xf9f1, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0xfe */ 0xfa0c, 0xfa0d, 0xfa0e, 0xfa0f, 0xfa11, 0xfa13, 0xfa14, 0xfa18, 0xfa1f, 0xfa20, 0xfa21, 0xfa23, 0xfa24, 0xfa27, 0xfa28, 0xfa29, }; static int gbk_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c1 = s[0]; if ((c1 >= 0x81 && c1 <= 0xfe)) { if (n >= 2) { unsigned char c2 = s[1]; if ((c2 >= 0x40 && c2 < 0x7f) || (c2 >= 0x80 && c2 < 0xff)) { unsigned int i = 190 * (c1 - 0x81) + (c2 - (c2 >= 0x80 ? 0x41 : 0x40)); unsigned short wc = 0xfffd; { if (i < 23766) wc = gbk_2uni_page81[i]; } if (wc != 0xfffd) { *pwc = (ucs4_t) wc; return 2; } } return RET_ILSEQ; } return RET_TOOFEW(0); } return RET_ILSEQ; } static const unsigned short gbk_page00[208] = { 0x0000, 0x0000, 0x0000, 0x0000, 0xa1e8, 0x0000, 0x0000, 0xa1ec, /*0xa0-0xa7*/ 0xa1a7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xa8-0xaf*/ 0xa1e3, 0xa1c0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa1a4, /*0xb0-0xb7*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xb8-0xbf*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xc0-0xc7*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xc8-0xcf*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa1c1, /*0xd0-0xd7*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xd8-0xdf*/ 0xa8a4, 0xa8a2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xe0-0xe7*/ 0xa8a8, 0xa8a6, 0xa8ba, 0x0000, 0xa8ac, 0xa8aa, 0x0000, 0x0000, /*0xe8-0xef*/ 0x0000, 0x0000, 0xa8b0, 0xa8ae, 0x0000, 0x0000, 0x0000, 0xa1c2, /*0xf0-0xf7*/ 0x0000, 0xa8b4, 0xa8b2, 0x0000, 0xa8b9, 0x0000, 0x0000, 0x0000, /*0xf8-0xff*/ /* 0x0100 */ 0x0000, 0xa8a1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x00-0x07*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x08-0x0f*/ 0x0000, 0x0000, 0x0000, 0xa8a5, 0x0000, 0x0000, 0x0000, 0x0000, /*0x10-0x17*/ 0x0000, 0x0000, 0x0000, 0xa8a7, 0x0000, 0x0000, 0x0000, 0x0000, /*0x18-0x1f*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x20-0x27*/ 0x0000, 0x0000, 0x0000, 0xa8a9, 0x0000, 0x0000, 0x0000, 0x0000, /*0x28-0x2f*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x30-0x37*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x38-0x3f*/ 0x0000, 0x0000, 0x0000, 0x0000, 0xa8bd, 0x0000, 0x0000, 0x0000, /*0x40-0x47*/ 0xa8be, 0x0000, 0x0000, 0x0000, 0x0000, 0xa8ad, 0x0000, 0x0000, /*0x48-0x4f*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x50-0x57*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x58-0x5f*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x60-0x67*/ 0x0000, 0x0000, 0x0000, 0xa8b1, 0x0000, 0x0000, 0x0000, 0x0000, /*0x68-0x6f*/ }; static const unsigned short gbk_page01[24] = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa8a3, 0x0000, /*0xc8-0xcf*/ 0xa8ab, 0x0000, 0xa8af, 0x0000, 0xa8b3, 0x0000, 0xa8b5, 0x0000, /*0xd0-0xd7*/ 0xa8b6, 0x0000, 0xa8b7, 0x0000, 0xa8b8, 0x0000, 0x0000, 0x0000, /*0xd8-0xdf*/ }; static const unsigned short gbk_page02a[24] = { 0x0000, 0xa8bb, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x50-0x57*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x58-0x5f*/ 0x0000, 0xa8c0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x60-0x67*/ }; static const unsigned short gbk_page02b[32] = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa1a6, /*0xc0-0xc7*/ 0x0000, 0xa1a5, 0xa840, 0xa841, 0x0000, 0x0000, 0x0000, 0x0000, /*0xc8-0xcf*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xd0-0xd7*/ 0x0000, 0xa842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xd8-0xdf*/ }; static const unsigned short gbk_page03[64] = { 0x0000, 0xa6a1, 0xa6a2, 0xa6a3, 0xa6a4, 0xa6a5, 0xa6a6, 0xa6a7, /*0x90-0x97*/ 0xa6a8, 0xa6a9, 0xa6aa, 0xa6ab, 0xa6ac, 0xa6ad, 0xa6ae, 0xa6af, /*0x98-0x9f*/ 0xa6b0, 0xa6b1, 0x0000, 0xa6b2, 0xa6b3, 0xa6b4, 0xa6b5, 0xa6b6, /*0xa0-0xa7*/ 0xa6b7, 0xa6b8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xa8-0xaf*/ 0x0000, 0xa6c1, 0xa6c2, 0xa6c3, 0xa6c4, 0xa6c5, 0xa6c6, 0xa6c7, /*0xb0-0xb7*/ 0xa6c8, 0xa6c9, 0xa6ca, 0xa6cb, 0xa6cc, 0xa6cd, 0xa6ce, 0xa6cf, /*0xb8-0xbf*/ 0xa6d0, 0xa6d1, 0x0000, 0xa6d2, 0xa6d3, 0xa6d4, 0xa6d5, 0xa6d6, /*0xc0-0xc7*/ 0xa6d7, 0xa6d8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xc8-0xcf*/ }; static const unsigned short gbk_page04[88] = { 0x0000, 0xa7a7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x00-0x07*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x08-0x0f*/ 0xa7a1, 0xa7a2, 0xa7a3, 0xa7a4, 0xa7a5, 0xa7a6, 0xa7a8, 0xa7a9, /*0x10-0x17*/ 0xa7aa, 0xa7ab, 0xa7ac, 0xa7ad, 0xa7ae, 0xa7af, 0xa7b0, 0xa7b1, /*0x18-0x1f*/ 0xa7b2, 0xa7b3, 0xa7b4, 0xa7b5, 0xa7b6, 0xa7b7, 0xa7b8, 0xa7b9, /*0x20-0x27*/ 0xa7ba, 0xa7bb, 0xa7bc, 0xa7bd, 0xa7be, 0xa7bf, 0xa7c0, 0xa7c1, /*0x28-0x2f*/ 0xa7d1, 0xa7d2, 0xa7d3, 0xa7d4, 0xa7d5, 0xa7d6, 0xa7d8, 0xa7d9, /*0x30-0x37*/ 0xa7da, 0xa7db, 0xa7dc, 0xa7dd, 0xa7de, 0xa7df, 0xa7e0, 0xa7e1, /*0x38-0x3f*/ 0xa7e2, 0xa7e3, 0xa7e4, 0xa7e5, 0xa7e6, 0xa7e7, 0xa7e8, 0xa7e9, /*0x40-0x47*/ 0xa7ea, 0xa7eb, 0xa7ec, 0xa7ed, 0xa7ee, 0xa7ef, 0xa7f0, 0xa7f1, /*0x48-0x4f*/ 0x0000, 0xa7d7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x50-0x57*/ }; static const unsigned short gbk_page20[48] = { 0xa95c, 0x0000, 0x0000, 0xa843, 0xa1aa, 0xa844, 0xa1ac, 0x0000, /*0x10-0x17*/ 0xa1ae, 0xa1af, 0x0000, 0x0000, 0xa1b0, 0xa1b1, 0x0000, 0x0000, /*0x18-0x1f*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa845, 0xa1ad, 0x0000, /*0x20-0x27*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x28-0x2f*/ 0xa1eb, 0x0000, 0xa1e4, 0xa1e5, 0x0000, 0xa846, 0x0000, 0x0000, /*0x30-0x37*/ 0x0000, 0x0000, 0x0000, 0xa1f9, 0x0000, 0x0000, 0x0000, 0x0000, /*0x38-0x3f*/ }; static const unsigned short gbk_page21[160] = { 0x0000, 0x0000, 0x0000, 0xa1e6, 0x0000, 0xa847, 0x0000, 0x0000, /*0x00-0x07*/ 0x0000, 0xa848, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x08-0x0f*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa1ed, 0x0000, /*0x10-0x17*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x18-0x1f*/ 0x0000, 0xa959, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x20-0x27*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x28-0x2f*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x30-0x37*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x38-0x3f*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x40-0x47*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x48-0x4f*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x50-0x57*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x58-0x5f*/ 0xa2f1, 0xa2f2, 0xa2f3, 0xa2f4, 0xa2f5, 0xa2f6, 0xa2f7, 0xa2f8, /*0x60-0x67*/ 0xa2f9, 0xa2fa, 0xa2fb, 0xa2fc, 0x0000, 0x0000, 0x0000, 0x0000, /*0x68-0x6f*/ 0xa2a1, 0xa2a2, 0xa2a3, 0xa2a4, 0xa2a5, 0xa2a6, 0xa2a7, 0xa2a8, /*0x70-0x77*/ 0xa2a9, 0xa2aa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x78-0x7f*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x80-0x87*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x88-0x8f*/ 0xa1fb, 0xa1fc, 0xa1fa, 0xa1fd, 0x0000, 0x0000, 0xa849, 0xa84a, /*0x90-0x97*/ 0xa84b, 0xa84c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x98-0x9f*/ }; static const unsigned short gbk_page22[184] = { 0xa1ca, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa1c7, /*0x08-0x0f*/ 0x0000, 0xa1c6, 0x0000, 0x0000, 0x0000, 0xa84d, 0x0000, 0x0000, /*0x10-0x17*/ 0x0000, 0x0000, 0xa1cc, 0x0000, 0x0000, 0xa1d8, 0xa1de, 0xa84e, /*0x18-0x1f*/ 0xa1cf, 0x0000, 0x0000, 0xa84f, 0x0000, 0xa1ce, 0x0000, 0xa1c4, /*0x20-0x27*/ 0xa1c5, 0xa1c9, 0xa1c8, 0xa1d2, 0x0000, 0x0000, 0xa1d3, 0x0000, /*0x28-0x2f*/ 0x0000, 0x0000, 0x0000, 0x0000, 0xa1e0, 0xa1df, 0xa1c3, 0xa1cb, /*0x30-0x37*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa1d7, 0x0000, 0x0000, /*0x38-0x3f*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x40-0x47*/ 0xa1d6, 0x0000, 0x0000, 0x0000, 0xa1d5, 0x0000, 0x0000, 0x0000, /*0x48-0x4f*/ 0x0000, 0x0000, 0xa850, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x50-0x57*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x58-0x5f*/ 0xa1d9, 0xa1d4, 0x0000, 0x0000, 0xa1dc, 0xa1dd, 0xa851, 0xa852, /*0x60-0x67*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa1da, 0xa1db, /*0x68-0x6f*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x70-0x77*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x78-0x7f*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x80-0x87*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x88-0x8f*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa892, 0x0000, 0x0000, /*0x90-0x97*/ 0x0000, 0xa1d1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x98-0x9f*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa1cd, 0x0000, 0x0000, /*0xa0-0xa7*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xa8-0xaf*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xb0-0xb7*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa853, /*0xb8-0xbf*/ }; static const unsigned short gbk_page24[64] = { 0xa2d9, 0xa2da, 0xa2db, 0xa2dc, 0xa2dd, 0xa2de, 0xa2df, 0xa2e0, /*0x60-0x67*/ 0xa2e1, 0xa2e2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x68-0x6f*/ 0x0000, 0x0000, 0x0000, 0x0000, 0xa2c5, 0xa2c6, 0xa2c7, 0xa2c8, /*0x70-0x77*/ 0xa2c9, 0xa2ca, 0xa2cb, 0xa2cc, 0xa2cd, 0xa2ce, 0xa2cf, 0xa2d0, /*0x78-0x7f*/ 0xa2d1, 0xa2d2, 0xa2d3, 0xa2d4, 0xa2d5, 0xa2d6, 0xa2d7, 0xa2d8, /*0x80-0x87*/ 0xa2b1, 0xa2b2, 0xa2b3, 0xa2b4, 0xa2b5, 0xa2b6, 0xa2b7, 0xa2b8, /*0x88-0x8f*/ 0xa2b9, 0xa2ba, 0xa2bb, 0xa2bc, 0xa2bd, 0xa2be, 0xa2bf, 0xa2c0, /*0x90-0x97*/ 0xa2c1, 0xa2c2, 0xa2c3, 0xa2c4, 0x0000, 0x0000, 0x0000, 0x0000, /*0x98-0x9f*/ }; static const unsigned short gbk_page25[232] = { 0xa9a4, 0xa9a5, 0xa9a6, 0xa9a7, 0xa9a8, 0xa9a9, 0xa9aa, 0xa9ab, /*0x00-0x07*/ 0xa9ac, 0xa9ad, 0xa9ae, 0xa9af, 0xa9b0, 0xa9b1, 0xa9b2, 0xa9b3, /*0x08-0x0f*/ 0xa9b4, 0xa9b5, 0xa9b6, 0xa9b7, 0xa9b8, 0xa9b9, 0xa9ba, 0xa9bb, /*0x10-0x17*/ 0xa9bc, 0xa9bd, 0xa9be, 0xa9bf, 0xa9c0, 0xa9c1, 0xa9c2, 0xa9c3, /*0x18-0x1f*/ 0xa9c4, 0xa9c5, 0xa9c6, 0xa9c7, 0xa9c8, 0xa9c9, 0xa9ca, 0xa9cb, /*0x20-0x27*/ 0xa9cc, 0xa9cd, 0xa9ce, 0xa9cf, 0xa9d0, 0xa9d1, 0xa9d2, 0xa9d3, /*0x28-0x2f*/ 0xa9d4, 0xa9d5, 0xa9d6, 0xa9d7, 0xa9d8, 0xa9d9, 0xa9da, 0xa9db, /*0x30-0x37*/ 0xa9dc, 0xa9dd, 0xa9de, 0xa9df, 0xa9e0, 0xa9e1, 0xa9e2, 0xa9e3, /*0x38-0x3f*/ 0xa9e4, 0xa9e5, 0xa9e6, 0xa9e7, 0xa9e8, 0xa9e9, 0xa9ea, 0xa9eb, /*0x40-0x47*/ 0xa9ec, 0xa9ed, 0xa9ee, 0xa9ef, 0x0000, 0x0000, 0x0000, 0x0000, /*0x48-0x4f*/ 0xa854, 0xa855, 0xa856, 0xa857, 0xa858, 0xa859, 0xa85a, 0xa85b, /*0x50-0x57*/ 0xa85c, 0xa85d, 0xa85e, 0xa85f, 0xa860, 0xa861, 0xa862, 0xa863, /*0x58-0x5f*/ 0xa864, 0xa865, 0xa866, 0xa867, 0xa868, 0xa869, 0xa86a, 0xa86b, /*0x60-0x67*/ 0xa86c, 0xa86d, 0xa86e, 0xa86f, 0xa870, 0xa871, 0xa872, 0xa873, /*0x68-0x6f*/ 0xa874, 0xa875, 0xa876, 0xa877, 0x0000, 0x0000, 0x0000, 0x0000, /*0x70-0x77*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x78-0x7f*/ 0x0000, 0xa878, 0xa879, 0xa87a, 0xa87b, 0xa87c, 0xa87d, 0xa87e, /*0x80-0x87*/ 0xa880, 0xa881, 0xa882, 0xa883, 0xa884, 0xa885, 0xa886, 0xa887, /*0x88-0x8f*/ 0x0000, 0x0000, 0x0000, 0xa888, 0xa889, 0xa88a, 0x0000, 0x0000, /*0x90-0x97*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x98-0x9f*/ 0xa1f6, 0xa1f5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xa0-0xa7*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xa8-0xaf*/ 0x0000, 0x0000, 0xa1f8, 0xa1f7, 0x0000, 0x0000, 0x0000, 0x0000, /*0xb0-0xb7*/ 0x0000, 0x0000, 0x0000, 0x0000, 0xa88b, 0xa88c, 0x0000, 0x0000, /*0xb8-0xbf*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa1f4, 0xa1f3, /*0xc0-0xc7*/ 0x0000, 0x0000, 0x0000, 0xa1f0, 0x0000, 0x0000, 0xa1f2, 0xa1f1, /*0xc8-0xcf*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xd0-0xd7*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xd8-0xdf*/ 0x0000, 0x0000, 0xa88d, 0xa88e, 0xa88f, 0xa890, 0x0000, 0x0000, /*0xe0-0xe7*/ }; static const unsigned short gbk_page26[72] = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa1ef, 0xa1ee, 0x0000, /*0x00-0x07*/ 0x0000, 0xa891, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x08-0x0f*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x10-0x17*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x18-0x1f*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x20-0x27*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x28-0x2f*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x30-0x37*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x38-0x3f*/ 0xa1e2, 0x0000, 0xa1e1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x40-0x47*/ }; static const unsigned short gbk_page30[304] = { 0xa1a1, 0xa1a2, 0xa1a3, 0xa1a8, 0x0000, 0xa1a9, 0xa965, 0xa996, /*0x00-0x07*/ 0xa1b4, 0xa1b5, 0xa1b6, 0xa1b7, 0xa1b8, 0xa1b9, 0xa1ba, 0xa1bb, /*0x08-0x0f*/ 0xa1be, 0xa1bf, 0xa893, 0xa1fe, 0xa1b2, 0xa1b3, 0xa1bc, 0xa1bd, /*0x10-0x17*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa894, 0xa895, 0x0000, /*0x18-0x1f*/ 0x0000, 0xa940, 0xa941, 0xa942, 0xa943, 0xa944, 0xa945, 0xa946, /*0x20-0x27*/ 0xa947, 0xa948, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x28-0x2f*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x30-0x37*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x38-0x3f*/ 0x0000, 0xa4a1, 0xa4a2, 0xa4a3, 0xa4a4, 0xa4a5, 0xa4a6, 0xa4a7, /*0x40-0x47*/ 0xa4a8, 0xa4a9, 0xa4aa, 0xa4ab, 0xa4ac, 0xa4ad, 0xa4ae, 0xa4af, /*0x48-0x4f*/ 0xa4b0, 0xa4b1, 0xa4b2, 0xa4b3, 0xa4b4, 0xa4b5, 0xa4b6, 0xa4b7, /*0x50-0x57*/ 0xa4b8, 0xa4b9, 0xa4ba, 0xa4bb, 0xa4bc, 0xa4bd, 0xa4be, 0xa4bf, /*0x58-0x5f*/ 0xa4c0, 0xa4c1, 0xa4c2, 0xa4c3, 0xa4c4, 0xa4c5, 0xa4c6, 0xa4c7, /*0x60-0x67*/ 0xa4c8, 0xa4c9, 0xa4ca, 0xa4cb, 0xa4cc, 0xa4cd, 0xa4ce, 0xa4cf, /*0x68-0x6f*/ 0xa4d0, 0xa4d1, 0xa4d2, 0xa4d3, 0xa4d4, 0xa4d5, 0xa4d6, 0xa4d7, /*0x70-0x77*/ 0xa4d8, 0xa4d9, 0xa4da, 0xa4db, 0xa4dc, 0xa4dd, 0xa4de, 0xa4df, /*0x78-0x7f*/ 0xa4e0, 0xa4e1, 0xa4e2, 0xa4e3, 0xa4e4, 0xa4e5, 0xa4e6, 0xa4e7, /*0x80-0x87*/ 0xa4e8, 0xa4e9, 0xa4ea, 0xa4eb, 0xa4ec, 0xa4ed, 0xa4ee, 0xa4ef, /*0x88-0x8f*/ 0xa4f0, 0xa4f1, 0xa4f2, 0xa4f3, 0x0000, 0x0000, 0x0000, 0x0000, /*0x90-0x97*/ 0x0000, 0x0000, 0x0000, 0xa961, 0xa962, 0xa966, 0xa967, 0x0000, /*0x98-0x9f*/ 0x0000, 0xa5a1, 0xa5a2, 0xa5a3, 0xa5a4, 0xa5a5, 0xa5a6, 0xa5a7, /*0xa0-0xa7*/ 0xa5a8, 0xa5a9, 0xa5aa, 0xa5ab, 0xa5ac, 0xa5ad, 0xa5ae, 0xa5af, /*0xa8-0xaf*/ 0xa5b0, 0xa5b1, 0xa5b2, 0xa5b3, 0xa5b4, 0xa5b5, 0xa5b6, 0xa5b7, /*0xb0-0xb7*/ 0xa5b8, 0xa5b9, 0xa5ba, 0xa5bb, 0xa5bc, 0xa5bd, 0xa5be, 0xa5bf, /*0xb8-0xbf*/ 0xa5c0, 0xa5c1, 0xa5c2, 0xa5c3, 0xa5c4, 0xa5c5, 0xa5c6, 0xa5c7, /*0xc0-0xc7*/ 0xa5c8, 0xa5c9, 0xa5ca, 0xa5cb, 0xa5cc, 0xa5cd, 0xa5ce, 0xa5cf, /*0xc8-0xcf*/ 0xa5d0, 0xa5d1, 0xa5d2, 0xa5d3, 0xa5d4, 0xa5d5, 0xa5d6, 0xa5d7, /*0xd0-0xd7*/ 0xa5d8, 0xa5d9, 0xa5da, 0xa5db, 0xa5dc, 0xa5dd, 0xa5de, 0xa5df, /*0xd8-0xdf*/ 0xa5e0, 0xa5e1, 0xa5e2, 0xa5e3, 0xa5e4, 0xa5e5, 0xa5e6, 0xa5e7, /*0xe0-0xe7*/ 0xa5e8, 0xa5e9, 0xa5ea, 0xa5eb, 0xa5ec, 0xa5ed, 0xa5ee, 0xa5ef, /*0xe8-0xef*/ 0xa5f0, 0xa5f1, 0xa5f2, 0xa5f3, 0xa5f4, 0xa5f5, 0xa5f6, 0x0000, /*0xf0-0xf7*/ 0x0000, 0x0000, 0x0000, 0x0000, 0xa960, 0xa963, 0xa964, 0x0000, /*0xf8-0xff*/ /* 0x3100 */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa8c5, 0xa8c6, 0xa8c7, /*0x00-0x07*/ 0xa8c8, 0xa8c9, 0xa8ca, 0xa8cb, 0xa8cc, 0xa8cd, 0xa8ce, 0xa8cf, /*0x08-0x0f*/ 0xa8d0, 0xa8d1, 0xa8d2, 0xa8d3, 0xa8d4, 0xa8d5, 0xa8d6, 0xa8d7, /*0x10-0x17*/ 0xa8d8, 0xa8d9, 0xa8da, 0xa8db, 0xa8dc, 0xa8dd, 0xa8de, 0xa8df, /*0x18-0x1f*/ 0xa8e0, 0xa8e1, 0xa8e2, 0xa8e3, 0xa8e4, 0xa8e5, 0xa8e6, 0xa8e7, /*0x20-0x27*/ 0xa8e8, 0xa8e9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x28-0x2f*/ }; static const unsigned short gbk_page32[24] = { 0xa2e5, 0xa2e6, 0xa2e7, 0xa2e8, 0xa2e9, 0xa2ea, 0xa2eb, 0xa2ec, /*0x20-0x27*/ 0xa2ed, 0xa2ee, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x28-0x2f*/ 0x0000, 0xa95a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x30-0x37*/ }; static const unsigned short gbk_page33[80] = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa94a, 0xa94b, /*0x88-0x8f*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x90-0x97*/ 0x0000, 0x0000, 0x0000, 0x0000, 0xa94c, 0xa94d, 0xa94e, 0x0000, /*0x98-0x9f*/ 0x0000, 0xa94f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xa0-0xa7*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xa8-0xaf*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xb0-0xb7*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xb8-0xbf*/ 0x0000, 0x0000, 0x0000, 0x0000, 0xa950, 0x0000, 0x0000, 0x0000, /*0xc0-0xc7*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa951, 0x0000, /*0xc8-0xcf*/ 0x0000, 0xa952, 0xa953, 0x0000, 0x0000, 0xa954, 0x0000, 0x0000, /*0xd0-0xd7*/ }; static const unsigned short gbk_page4e[20904] = { 0xd2bb, 0xb6a1, 0x8140, 0xc6df, 0x8141, 0x8142, 0x8143, 0xcdf2, /*0x00-0x07*/ 0xd5c9, 0xc8fd, 0xc9cf, 0xcfc2, 0xd8a2, 0xb2bb, 0xd3eb, 0x8144, /*0x08-0x0f*/ 0xd8a4, 0xb3f3, 0x8145, 0xd7a8, 0xc7d2, 0xd8a7, 0xcac0, 0x8146, /*0x10-0x17*/ 0xc7f0, 0xb1fb, 0xd2b5, 0xb4d4, 0xb6ab, 0xcbbf, 0xd8a9, 0x8147, /*0x18-0x1f*/ 0x8148, 0x8149, 0xb6aa, 0x814a, 0xc1bd, 0xd1cf, 0x814b, 0xc9a5, /*0x20-0x27*/ 0xd8ad, 0x814c, 0xb8f6, 0xd1be, 0xe3dc, 0xd6d0, 0x814d, 0x814e, /*0x28-0x2f*/ 0xb7e1, 0x814f, 0xb4ae, 0x8150, 0xc1d9, 0x8151, 0xd8bc, 0x8152, /*0x30-0x37*/ 0xcde8, 0xb5a4, 0xceaa, 0xd6f7, 0x8153, 0xc0f6, 0xbed9, 0xd8af, /*0x38-0x3f*/ 0x8154, 0x8155, 0x8156, 0xc4cb, 0x8157, 0xbec3, 0x8158, 0xd8b1, /*0x40-0x47*/ 0xc3b4, 0xd2e5, 0x8159, 0xd6ae, 0xceda, 0xd5a7, 0xbaf5, 0xb7a6, /*0x48-0x4f*/ 0xc0d6, 0x815a, 0xc6b9, 0xc5d2, 0xc7c7, 0x815b, 0xb9d4, 0x815c, /*0x50-0x57*/ 0xb3cb, 0xd2d2, 0x815d, 0x815e, 0xd8bf, 0xbec5, 0xc6f2, 0xd2b2, /*0x58-0x5f*/ 0xcfb0, 0xcfe7, 0x815f, 0x8160, 0x8161, 0x8162, 0xcae9, 0x8163, /*0x60-0x67*/ 0x8164, 0xd8c0, 0x8165, 0x8166, 0x8167, 0x8168, 0x8169, 0x816a, /*0x68-0x6f*/ 0xc2f2, 0xc2d2, 0x816b, 0xc8e9, 0x816c, 0x816d, 0x816e, 0x816f, /*0x70-0x77*/ 0x8170, 0x8171, 0x8172, 0x8173, 0x8174, 0x8175, 0xc7ac, 0x8176, /*0x78-0x7f*/ 0x8177, 0x8178, 0x8179, 0x817a, 0x817b, 0x817c, 0xc1cb, 0x817d, /*0x80-0x87*/ 0xd3e8, 0xd5f9, 0x817e, 0xcac2, 0xb6fe, 0xd8a1, 0xd3da, 0xbff7, /*0x88-0x8f*/ 0x8180, 0xd4c6, 0xbba5, 0xd8c1, 0xcee5, 0xbeae, 0x8181, 0x8182, /*0x90-0x97*/ 0xd8a8, 0x8183, 0xd1c7, 0xd0a9, 0x8184, 0x8185, 0x8186, 0xd8bd, /*0x98-0x9f*/ 0xd9ef, 0xcdf6, 0xbfba, 0x8187, 0xbdbb, 0xbaa5, 0xd2e0, 0xb2fa, /*0xa0-0xa7*/ 0xbae0, 0xc4b6, 0x8188, 0xcfed, 0xbea9, 0xcda4, 0xc1c1, 0x8189, /*0xa8-0xaf*/ 0x818a, 0x818b, 0xc7d7, 0xd9f1, 0x818c, 0xd9f4, 0x818d, 0x818e, /*0xb0-0xb7*/ 0x818f, 0x8190, 0xc8cb, 0xd8e9, 0x8191, 0x8192, 0x8193, 0xd2da, /*0xb8-0xbf*/ 0xcab2, 0xc8ca, 0xd8ec, 0xd8ea, 0xd8c6, 0xbdf6, 0xc6cd, 0xb3f0, /*0xc0-0xc7*/ 0x8194, 0xd8eb, 0xbdf1, 0xbde9, 0x8195, 0xc8d4, 0xb4d3, 0x8196, /*0xc8-0xcf*/ 0x8197, 0xc2d8, 0x8198, 0xb2d6, 0xd7d0, 0xcacb, 0xcbfb, 0xd5cc, /*0xd0-0xd7*/ 0xb8b6, 0xcfc9, 0x8199, 0x819a, 0x819b, 0xd9da, 0xd8f0, 0xc7aa, /*0xd8-0xdf*/ 0x819c, 0xd8ee, 0x819d, 0xb4fa, 0xc1ee, 0xd2d4, 0x819e, 0x819f, /*0xe0-0xe7*/ 0xd8ed, 0x81a0, 0xd2c7, 0xd8ef, 0xc3c7, 0x81a1, 0x81a2, 0x81a3, /*0xe8-0xef*/ 0xd1f6, 0x81a4, 0xd6d9, 0xd8f2, 0x81a5, 0xd8f5, 0xbcfe, 0xbcdb, /*0xf0-0xf7*/ 0x81a6, 0x81a7, 0x81a8, 0xc8ce, 0x81a9, 0xb7dd, 0x81aa, 0xb7c2, /*0xf8-0xff*/ /* 0x4f00 */ 0x81ab, 0xc6f3, 0x81ac, 0x81ad, 0x81ae, 0x81af, 0x81b0, 0x81b1, /*0x00-0x07*/ 0x81b2, 0xd8f8, 0xd2c1, 0x81b3, 0x81b4, 0xcee9, 0xbcbf, 0xb7fc, /*0x08-0x0f*/ 0xb7a5, 0xd0dd, 0x81b5, 0x81b6, 0x81b7, 0x81b8, 0x81b9, 0xd6da, /*0x10-0x17*/ 0xd3c5, 0xbbef, 0xbbe1, 0xd8f1, 0x81ba, 0x81bb, 0xc9a1, 0xceb0, /*0x18-0x1f*/ 0xb4ab, 0x81bc, 0xd8f3, 0x81bd, 0xc9cb, 0xd8f6, 0xc2d7, 0xd8f7, /*0x20-0x27*/ 0x81be, 0x81bf, 0xceb1, 0xd8f9, 0x81c0, 0x81c1, 0x81c2, 0xb2ae, /*0x28-0x2f*/ 0xb9c0, 0x81c3, 0xd9a3, 0x81c4, 0xb0e9, 0x81c5, 0xc1e6, 0x81c6, /*0x30-0x37*/ 0xc9ec, 0x81c7, 0xcbc5, 0x81c8, 0xcbc6, 0xd9a4, 0x81c9, 0x81ca, /*0x38-0x3f*/ 0x81cb, 0x81cc, 0x81cd, 0xb5e8, 0x81ce, 0x81cf, 0xb5ab, 0x81d0, /*0x40-0x47*/ 0x81d1, 0x81d2, 0x81d3, 0x81d4, 0x81d5, 0xcebb, 0xb5cd, 0xd7a1, /*0x48-0x4f*/ 0xd7f4, 0xd3d3, 0x81d6, 0xcce5, 0x81d7, 0xbace, 0x81d8, 0xd9a2, /*0x50-0x57*/ 0xd9dc, 0xd3e0, 0xd8fd, 0xb7f0, 0xd7f7, 0xd8fe, 0xd8fa, 0xd9a1, /*0x58-0x5f*/ 0xc4e3, 0x81d9, 0x81da, 0xd3b6, 0xd8f4, 0xd9dd, 0x81db, 0xd8fb, /*0x60-0x67*/ 0x81dc, 0xc5e5, 0x81dd, 0x81de, 0xc0d0, 0x81df, 0x81e0, 0xd1f0, /*0x68-0x6f*/ 0xb0db, 0x81e1, 0x81e2, 0xbcd1, 0xd9a6, 0x81e3, 0xd9a5, 0x81e4, /*0x70-0x77*/ 0x81e5, 0x81e6, 0x81e7, 0xd9ac, 0xd9ae, 0x81e8, 0xd9ab, 0xcab9, /*0x78-0x7f*/ 0x81e9, 0x81ea, 0x81eb, 0xd9a9, 0xd6b6, 0x81ec, 0x81ed, 0x81ee, /*0x80-0x87*/ 0xb3de, 0xd9a8, 0x81ef, 0xc0fd, 0x81f0, 0xcacc, 0x81f1, 0xd9aa, /*0x88-0x8f*/ 0x81f2, 0xd9a7, 0x81f3, 0x81f4, 0xd9b0, 0x81f5, 0x81f6, 0xb6b1, /*0x90-0x97*/ 0x81f7, 0x81f8, 0x81f9, 0xb9a9, 0x81fa, 0xd2c0, 0x81fb, 0x81fc, /*0x98-0x9f*/ 0xcfc0, 0x81fd, 0x81fe, 0xc2c2, 0x8240, 0xbdc4, 0xd5ec, 0xb2e0, /*0xa0-0xa7*/ 0xc7c8, 0xbfeb, 0xd9ad, 0x8241, 0xd9af, 0x8242, 0xceea, 0xbaee, /*0xa8-0xaf*/ 0x8243, 0x8244, 0x8245, 0x8246, 0x8247, 0xc7d6, 0x8248, 0x8249, /*0xb0-0xb7*/ 0x824a, 0x824b, 0x824c, 0x824d, 0x824e, 0x824f, 0x8250, 0xb1e3, /*0xb8-0xbf*/ 0x8251, 0x8252, 0x8253, 0xb4d9, 0xb6ed, 0xd9b4, 0x8254, 0x8255, /*0xc0-0xc7*/ 0x8256, 0x8257, 0xbfa1, 0x8258, 0x8259, 0x825a, 0xd9de, 0xc7ce, /*0xc8-0xcf*/ 0xc0fe, 0xd9b8, 0x825b, 0x825c, 0x825d, 0x825e, 0x825f, 0xcbd7, /*0xd0-0xd7*/ 0xb7fd, 0x8260, 0xd9b5, 0x8261, 0xd9b7, 0xb1a3, 0xd3e1, 0xd9b9, /*0xd8-0xdf*/ 0x8262, 0xd0c5, 0x8263, 0xd9b6, 0x8264, 0x8265, 0xd9b1, 0x8266, /*0xe0-0xe7*/ 0xd9b2, 0xc1a9, 0xd9b3, 0x8267, 0x8268, 0xbcf3, 0xd0de, 0xb8a9, /*0xe8-0xef*/ 0x8269, 0xbee3, 0x826a, 0xd9bd, 0x826b, 0x826c, 0x826d, 0x826e, /*0xf0-0xf7*/ 0xd9ba, 0x826f, 0xb0b3, 0x8270, 0x8271, 0x8272, 0xd9c2, 0x8273, /*0xf8-0xff*/ /* 0x5000 */ 0x8274, 0x8275, 0x8276, 0x8277, 0x8278, 0x8279, 0x827a, 0x827b, /*0x00-0x07*/ 0x827c, 0x827d, 0x827e, 0x8280, 0xd9c4, 0xb1b6, 0x8281, 0xd9bf, /*0x08-0x0f*/ 0x8282, 0x8283, 0xb5b9, 0x8284, 0xbef3, 0x8285, 0x8286, 0x8287, /*0x10-0x17*/ 0xccc8, 0xbaf2, 0xd2d0, 0x8288, 0xd9c3, 0x8289, 0x828a, 0xbde8, /*0x18-0x1f*/ 0x828b, 0xb3ab, 0x828c, 0x828d, 0x828e, 0xd9c5, 0xbeeb, 0x828f, /*0x20-0x27*/ 0xd9c6, 0xd9bb, 0xc4df, 0x8290, 0xd9be, 0xd9c1, 0xd9c0, 0x8291, /*0x28-0x2f*/ 0x8292, 0x8293, 0x8294, 0x8295, 0x8296, 0x8297, 0x8298, 0x8299, /*0x30-0x37*/ 0x829a, 0x829b, 0xd5ae, 0x829c, 0xd6b5, 0x829d, 0xc7e3, 0x829e, /*0x38-0x3f*/ 0x829f, 0x82a0, 0x82a1, 0xd9c8, 0x82a2, 0x82a3, 0x82a4, 0xbcd9, /*0x40-0x47*/ 0xd9ca, 0x82a5, 0x82a6, 0x82a7, 0xd9bc, 0x82a8, 0xd9cb, 0xc6ab, /*0x48-0x4f*/ 0x82a9, 0x82aa, 0x82ab, 0x82ac, 0x82ad, 0xd9c9, 0x82ae, 0x82af, /*0x50-0x57*/ 0x82b0, 0x82b1, 0xd7f6, 0x82b2, 0xcda3, 0x82b3, 0x82b4, 0x82b5, /*0x58-0x5f*/ 0x82b6, 0x82b7, 0x82b8, 0x82b9, 0x82ba, 0xbda1, 0x82bb, 0x82bc, /*0x60-0x67*/ 0x82bd, 0x82be, 0x82bf, 0x82c0, 0xd9cc, 0x82c1, 0x82c2, 0x82c3, /*0x68-0x6f*/ 0x82c4, 0x82c5, 0x82c6, 0x82c7, 0x82c8, 0x82c9, 0xc5bc, 0xcdb5, /*0x70-0x77*/ 0x82ca, 0x82cb, 0x82cc, 0xd9cd, 0x82cd, 0x82ce, 0xd9c7, 0xb3a5, /*0x78-0x7f*/ 0xbffe, 0x82cf, 0x82d0, 0x82d1, 0x82d2, 0xb8b5, 0x82d3, 0x82d4, /*0x80-0x87*/ 0xc0fc, 0x82d5, 0x82d6, 0x82d7, 0x82d8, 0xb0f8, 0x82d9, 0x82da, /*0x88-0x8f*/ 0x82db, 0x82dc, 0x82dd, 0x82de, 0x82df, 0x82e0, 0x82e1, 0x82e2, /*0x90-0x97*/ 0x82e3, 0x82e4, 0x82e5, 0x82e6, 0x82e7, 0x82e8, 0x82e9, 0x82ea, /*0x98-0x9f*/ 0x82eb, 0x82ec, 0x82ed, 0xb4f6, 0x82ee, 0xd9ce, 0x82ef, 0xd9cf, /*0xa0-0xa7*/ 0xb4a2, 0xd9d0, 0x82f0, 0x82f1, 0xb4df, 0x82f2, 0x82f3, 0x82f4, /*0xa8-0xaf*/ 0x82f5, 0x82f6, 0xb0c1, 0x82f7, 0x82f8, 0x82f9, 0x82fa, 0x82fb, /*0xb0-0xb7*/ 0x82fc, 0x82fd, 0xd9d1, 0xc9b5, 0x82fe, 0x8340, 0x8341, 0x8342, /*0xb8-0xbf*/ 0x8343, 0x8344, 0x8345, 0x8346, 0x8347, 0x8348, 0x8349, 0x834a, /*0xc0-0xc7*/ 0x834b, 0x834c, 0x834d, 0x834e, 0x834f, 0x8350, 0x8351, 0xcff1, /*0xc8-0xcf*/ 0x8352, 0x8353, 0x8354, 0x8355, 0x8356, 0x8357, 0xd9d2, 0x8358, /*0xd0-0xd7*/ 0x8359, 0x835a, 0xc1c5, 0x835b, 0x835c, 0x835d, 0x835e, 0x835f, /*0xd8-0xdf*/ 0x8360, 0x8361, 0x8362, 0x8363, 0x8364, 0x8365, 0xd9d6, 0xc9ae, /*0xe0-0xe7*/ 0x8366, 0x8367, 0x8368, 0x8369, 0xd9d5, 0xd9d4, 0xd9d7, 0x836a, /*0xe8-0xef*/ 0x836b, 0x836c, 0x836d, 0xcbdb, 0x836e, 0xbda9, 0x836f, 0x8370, /*0xf0-0xf7*/ 0x8371, 0x8372, 0x8373, 0xc6a7, 0x8374, 0x8375, 0x8376, 0x8377, /*0xf8-0xff*/ /* 0x5100 */ 0x8378, 0x8379, 0x837a, 0x837b, 0x837c, 0x837d, 0xd9d3, 0xd9d8, /*0x00-0x07*/ 0x837e, 0x8380, 0x8381, 0xd9d9, 0x8382, 0x8383, 0x8384, 0x8385, /*0x08-0x0f*/ 0x8386, 0x8387, 0xc8e5, 0x8388, 0x8389, 0x838a, 0x838b, 0x838c, /*0x10-0x17*/ 0x838d, 0x838e, 0x838f, 0x8390, 0x8391, 0x8392, 0x8393, 0x8394, /*0x18-0x1f*/ 0x8395, 0xc0dc, 0x8396, 0x8397, 0x8398, 0x8399, 0x839a, 0x839b, /*0x20-0x27*/ 0x839c, 0x839d, 0x839e, 0x839f, 0x83a0, 0x83a1, 0x83a2, 0x83a3, /*0x28-0x2f*/ 0x83a4, 0x83a5, 0x83a6, 0x83a7, 0x83a8, 0x83a9, 0x83aa, 0x83ab, /*0x30-0x37*/ 0x83ac, 0x83ad, 0x83ae, 0x83af, 0x83b0, 0x83b1, 0x83b2, 0xb6f9, /*0x38-0x3f*/ 0xd8a3, 0xd4ca, 0x83b3, 0xd4aa, 0xd0d6, 0xb3e4, 0xd5d7, 0x83b4, /*0x40-0x47*/ 0xcfc8, 0xb9e2, 0x83b5, 0xbfcb, 0x83b6, 0xc3e2, 0x83b7, 0x83b8, /*0x48-0x4f*/ 0x83b9, 0xb6d2, 0x83ba, 0x83bb, 0xcdc3, 0xd9ee, 0xd9f0, 0x83bc, /*0x50-0x57*/ 0x83bd, 0x83be, 0xb5b3, 0x83bf, 0xb6b5, 0x83c0, 0x83c1, 0x83c2, /*0x58-0x5f*/ 0x83c3, 0x83c4, 0xbea4, 0x83c5, 0x83c6, 0xc8eb, 0x83c7, 0x83c8, /*0x60-0x67*/ 0xc8ab, 0x83c9, 0x83ca, 0xb0cb, 0xb9ab, 0xc1f9, 0xd9e2, 0x83cb, /*0x68-0x6f*/ 0xc0bc, 0xb9b2, 0x83cc, 0xb9d8, 0xd0cb, 0xb1f8, 0xc6e4, 0xbedf, /*0x70-0x77*/ 0xb5e4, 0xd7c8, 0x83cd, 0xd1f8, 0xbce6, 0xcade, 0x83ce, 0x83cf, /*0x78-0x7f*/ 0xbcbd, 0xd9e6, 0xd8e7, 0x83d0, 0x83d1, 0xc4da, 0x83d2, 0x83d3, /*0x80-0x87*/ 0xb8d4, 0xc8bd, 0x83d4, 0x83d5, 0xb2e1, 0xd4d9, 0x83d6, 0x83d7, /*0x88-0x8f*/ 0x83d8, 0x83d9, 0xc3b0, 0x83da, 0x83db, 0xc3e1, 0xdaa2, 0xc8df, /*0x90-0x97*/ 0x83dc, 0xd0b4, 0x83dd, 0xbefc, 0xc5a9, 0x83de, 0x83df, 0x83e0, /*0x98-0x9f*/ 0xb9da, 0x83e1, 0xdaa3, 0x83e2, 0xd4a9, 0xdaa4, 0x83e3, 0x83e4, /*0xa0-0xa7*/ 0x83e5, 0x83e6, 0x83e7, 0xd9fb, 0xb6ac, 0x83e8, 0x83e9, 0xb7eb, /*0xa8-0xaf*/ 0xb1f9, 0xd9fc, 0xb3e5, 0xbef6, 0x83ea, 0xbff6, 0xd2b1, 0xc0e4, /*0xb0-0xb7*/ 0x83eb, 0x83ec, 0x83ed, 0xb6b3, 0xd9fe, 0xd9fd, 0x83ee, 0x83ef, /*0xb8-0xbf*/ 0xbebb, 0x83f0, 0x83f1, 0x83f2, 0xc6e0, 0x83f3, 0xd7bc, 0xdaa1, /*0xc0-0xc7*/ 0x83f4, 0xc1b9, 0x83f5, 0xb5f2, 0xc1e8, 0x83f6, 0x83f7, 0xbcf5, /*0xc8-0xcf*/ 0x83f8, 0xb4d5, 0x83f9, 0x83fa, 0x83fb, 0x83fc, 0x83fd, 0x83fe, /*0xd0-0xd7*/ 0x8440, 0x8441, 0x8442, 0xc1dd, 0x8443, 0xc4fd, 0x8444, 0x8445, /*0xd8-0xdf*/ 0xbcb8, 0xb7b2, 0x8446, 0x8447, 0xb7ef, 0x8448, 0x8449, 0x844a, /*0xe0-0xe7*/ 0x844b, 0x844c, 0x844d, 0xd9ec, 0x844e, 0xc6be, 0x844f, 0xbfad, /*0xe8-0xef*/ 0xbbcb, 0x8450, 0x8451, 0xb5ca, 0x8452, 0xdbc9, 0xd0d7, 0x8453, /*0xf0-0xf7*/ 0xcdb9, 0xb0bc, 0xb3f6, 0xbbf7, 0xdbca, 0xbaaf, 0x8454, 0xd4e4, /*0xf8-0xff*/ /* 0x5200 */ 0xb5b6, 0xb5f3, 0xd8d6, 0xc8d0, 0x8455, 0x8456, 0xb7d6, 0xc7d0, /*0x00-0x07*/ 0xd8d7, 0x8457, 0xbfaf, 0x8458, 0x8459, 0xdbbb, 0xd8d8, 0x845a, /*0x08-0x0f*/ 0x845b, 0xd0cc, 0xbbae, 0x845c, 0x845d, 0x845e, 0xebbe, 0xc1d0, /*0x10-0x17*/ 0xc1f5, 0xd4f2, 0xb8d5, 0xb4b4, 0x845f, 0xb3f5, 0x8460, 0x8461, /*0x18-0x1f*/ 0xc9be, 0x8462, 0x8463, 0x8464, 0xc5d0, 0x8465, 0x8466, 0x8467, /*0x20-0x27*/ 0xc5d9, 0xc0fb, 0x8468, 0xb1f0, 0x8469, 0xd8d9, 0xb9ce, 0x846a, /*0x28-0x2f*/ 0xb5bd, 0x846b, 0x846c, 0xd8da, 0x846d, 0x846e, 0xd6c6, 0xcba2, /*0x30-0x37*/ 0xc8af, 0xc9b2, 0xb4cc, 0xbfcc, 0x846f, 0xb9f4, 0x8470, 0xd8db, /*0x38-0x3f*/ 0xd8dc, 0xb6e7, 0xbcc1, 0xccea, 0x8471, 0x8472, 0x8473, 0x8474, /*0x40-0x47*/ 0x8475, 0x8476, 0xcff7, 0x8477, 0xd8dd, 0xc7b0, 0x8478, 0x8479, /*0x48-0x4f*/ 0xb9d0, 0xbda3, 0x847a, 0x847b, 0xccde, 0x847c, 0xc6ca, 0x847d, /*0x50-0x57*/ 0x847e, 0x8480, 0x8481, 0x8482, 0xd8e0, 0x8483, 0xd8de, 0x8484, /*0x58-0x5f*/ 0x8485, 0xd8df, 0x8486, 0x8487, 0x8488, 0xb0fe, 0x8489, 0xbee7, /*0x60-0x67*/ 0x848a, 0xcaa3, 0xbcf4, 0x848b, 0x848c, 0x848d, 0x848e, 0xb8b1, /*0x68-0x6f*/ 0x848f, 0x8490, 0xb8ee, 0x8491, 0x8492, 0x8493, 0x8494, 0x8495, /*0x70-0x77*/ 0x8496, 0x8497, 0x8498, 0x8499, 0x849a, 0xd8e2, 0x849b, 0xbdcb, /*0x78-0x7f*/ 0x849c, 0xd8e4, 0xd8e3, 0x849d, 0x849e, 0x849f, 0x84a0, 0x84a1, /*0x80-0x87*/ 0xc5fc, 0x84a2, 0x84a3, 0x84a4, 0x84a5, 0x84a6, 0x84a7, 0x84a8, /*0x88-0x8f*/ 0xd8e5, 0x84a9, 0x84aa, 0xd8e6, 0x84ab, 0x84ac, 0x84ad, 0x84ae, /*0x90-0x97*/ 0x84af, 0x84b0, 0x84b1, 0xc1a6, 0x84b2, 0xc8b0, 0xb0ec, 0xb9a6, /*0x98-0x9f*/ 0xbcd3, 0xcef1, 0xdbbd, 0xc1d3, 0x84b3, 0x84b4, 0x84b5, 0x84b6, /*0xa0-0xa7*/ 0xb6af, 0xd6fa, 0xc5ac, 0xbdd9, 0xdbbe, 0xdbbf, 0x84b7, 0x84b8, /*0xa8-0xaf*/ 0x84b9, 0xc0f8, 0xbea2, 0xc0cd, 0x84ba, 0x84bb, 0x84bc, 0x84bd, /*0xb0-0xb7*/ 0x84be, 0x84bf, 0x84c0, 0x84c1, 0x84c2, 0x84c3, 0xdbc0, 0xcac6, /*0xb8-0xbf*/ 0x84c4, 0x84c5, 0x84c6, 0xb2aa, 0x84c7, 0x84c8, 0x84c9, 0xd3c2, /*0xc0-0xc7*/ 0x84ca, 0xc3e3, 0x84cb, 0xd1ab, 0x84cc, 0x84cd, 0x84ce, 0x84cf, /*0xc8-0xcf*/ 0xdbc2, 0x84d0, 0xc0d5, 0x84d1, 0x84d2, 0x84d3, 0xdbc3, 0x84d4, /*0xd0-0xd7*/ 0xbfb1, 0x84d5, 0x84d6, 0x84d7, 0x84d8, 0x84d9, 0x84da, 0xc4bc, /*0xd8-0xdf*/ 0x84db, 0x84dc, 0x84dd, 0x84de, 0xc7da, 0x84df, 0x84e0, 0x84e1, /*0xe0-0xe7*/ 0x84e2, 0x84e3, 0x84e4, 0x84e5, 0x84e6, 0x84e7, 0x84e8, 0x84e9, /*0xe8-0xef*/ 0xdbc4, 0x84ea, 0x84eb, 0x84ec, 0x84ed, 0x84ee, 0x84ef, 0x84f0, /*0xf0-0xf7*/ 0x84f1, 0xd9e8, 0xc9d7, 0x84f2, 0x84f3, 0x84f4, 0xb9b4, 0xcef0, /*0xf8-0xff*/ /* 0x5300 */ 0xd4c8, 0x84f5, 0x84f6, 0x84f7, 0x84f8, 0xb0fc, 0xb4d2, 0x84f9, /*0x00-0x07*/ 0xd0d9, 0x84fa, 0x84fb, 0x84fc, 0x84fd, 0xd9e9, 0x84fe, 0xdecb, /*0x08-0x0f*/ 0xd9eb, 0x8540, 0x8541, 0x8542, 0x8543, 0xd8b0, 0xbbaf, 0xb1b1, /*0x10-0x17*/ 0x8544, 0xb3d7, 0xd8ce, 0x8545, 0x8546, 0xd4d1, 0x8547, 0x8548, /*0x18-0x1f*/ 0xbdb3, 0xbfef, 0x8549, 0xcfbb, 0x854a, 0x854b, 0xd8d0, 0x854c, /*0x20-0x27*/ 0x854d, 0x854e, 0xb7cb, 0x854f, 0x8550, 0x8551, 0xd8d1, 0x8552, /*0x28-0x2f*/ 0x8553, 0x8554, 0x8555, 0x8556, 0x8557, 0x8558, 0x8559, 0x855a, /*0x30-0x37*/ 0x855b, 0xc6a5, 0xc7f8, 0xd2bd, 0x855c, 0x855d, 0xd8d2, 0xc4e4, /*0x38-0x3f*/ 0x855e, 0xcaae, 0x855f, 0xc7a7, 0x8560, 0xd8a6, 0x8561, 0xc9fd, /*0x40-0x47*/ 0xcee7, 0xbbdc, 0xb0eb, 0x8562, 0x8563, 0x8564, 0xbbaa, 0xd0ad, /*0x48-0x4f*/ 0x8565, 0xb1b0, 0xd7e4, 0xd7bf, 0x8566, 0xb5a5, 0xc2f4, 0xc4cf, /*0x50-0x57*/ 0x8567, 0x8568, 0xb2a9, 0x8569, 0xb2b7, 0x856a, 0xb1e5, 0xdfb2, /*0x58-0x5f*/ 0xd5bc, 0xbfa8, 0xc2ac, 0xd8d5, 0xc2b1, 0x856b, 0xd8d4, 0xced4, /*0x60-0x67*/ 0x856c, 0xdae0, 0x856d, 0xcec0, 0x856e, 0x856f, 0xd8b4, 0xc3ae, /*0x68-0x6f*/ 0xd3a1, 0xcea3, 0x8570, 0xbcb4, 0xc8b4, 0xc2d1, 0x8571, 0xbeed, /*0x70-0x77*/ 0xd0b6, 0x8572, 0xdae1, 0x8573, 0x8574, 0x8575, 0x8576, 0xc7e4, /*0x78-0x7f*/ 0x8577, 0x8578, 0xb3a7, 0x8579, 0xb6f2, 0xccfc, 0xc0fa, 0x857a, /*0x80-0x87*/ 0x857b, 0xc0f7, 0x857c, 0xd1b9, 0xd1e1, 0xd8c7, 0x857d, 0x857e, /*0x88-0x8f*/ 0x8580, 0x8581, 0x8582, 0x8583, 0x8584, 0xb2de, 0x8585, 0x8586, /*0x90-0x97*/ 0xc0e5, 0x8587, 0xbaf1, 0x8588, 0x8589, 0xd8c8, 0x858a, 0xd4ad, /*0x98-0x9f*/ 0x858b, 0x858c, 0xcfe1, 0xd8c9, 0x858d, 0xd8ca, 0xcfc3, 0x858e, /*0xa0-0xa7*/ 0xb3f8, 0xbec7, 0x858f, 0x8590, 0x8591, 0x8592, 0xd8cb, 0x8593, /*0xa8-0xaf*/ 0x8594, 0x8595, 0x8596, 0x8597, 0x8598, 0x8599, 0xdbcc, 0x859a, /*0xb0-0xb7*/ 0x859b, 0x859c, 0x859d, 0xc8a5, 0x859e, 0x859f, 0x85a0, 0xcfd8, /*0xb8-0xbf*/ 0x85a1, 0xc8fe, 0xb2ce, 0x85a2, 0x85a3, 0x85a4, 0x85a5, 0x85a6, /*0xc0-0xc7*/ 0xd3d6, 0xb2e6, 0xbcb0, 0xd3d1, 0xcbab, 0xb7b4, 0x85a7, 0x85a8, /*0xc8-0xcf*/ 0x85a9, 0xb7a2, 0x85aa, 0x85ab, 0xcae5, 0x85ac, 0xc8a1, 0xcadc, /*0xd0-0xd7*/ 0xb1e4, 0xd0f0, 0x85ad, 0xc5d1, 0x85ae, 0x85af, 0x85b0, 0xdbc5, /*0xd8-0xdf*/ 0xb5fe, 0x85b1, 0x85b2, 0xbfda, 0xb9c5, 0xbee4, 0xc1ed, 0x85b3, /*0xe0-0xe7*/ 0xdfb6, 0xdfb5, 0xd6bb, 0xbdd0, 0xd5d9, 0xb0c8, 0xb6a3, 0xbfc9, /*0xe8-0xef*/ 0xcca8, 0xdfb3, 0xcab7, 0xd3d2, 0x85b4, 0xd8cf, 0xd2b6, 0xbac5, /*0xf0-0xf7*/ 0xcbbe, 0xccbe, 0x85b5, 0xdfb7, 0xb5f0, 0xdfb4, 0x85b6, 0x85b7, /*0xf8-0xff*/ /* 0x5400 */ 0x85b8, 0xd3f5, 0x85b9, 0xb3d4, 0xb8f7, 0x85ba, 0xdfba, 0x85bb, /*0x00-0x07*/ 0xbacf, 0xbcaa, 0xb5f5, 0x85bc, 0xcdac, 0xc3fb, 0xbaf3, 0xc0f4, /*0x08-0x0f*/ 0xcdc2, 0xcff2, 0xdfb8, 0xcfc5, 0x85bd, 0xc2c0, 0xdfb9, 0xc2f0, /*0x10-0x17*/ 0x85be, 0x85bf, 0x85c0, 0xbefd, 0x85c1, 0xc1df, 0xcdcc, 0xd2f7, /*0x18-0x1f*/ 0xb7cd, 0xdfc1, 0x85c2, 0xdfc4, 0x85c3, 0x85c4, 0xb7f1, 0xb0c9, /*0x20-0x27*/ 0xb6d6, 0xb7d4, 0x85c5, 0xbaac, 0xccfd, 0xbfd4, 0xcbb1, 0xc6f4, /*0x28-0x2f*/ 0x85c6, 0xd6a8, 0xdfc5, 0x85c7, 0xcee2, 0xb3b3, 0x85c8, 0x85c9, /*0x30-0x37*/ 0xcefc, 0xb4b5, 0x85ca, 0xcec7, 0xbaf0, 0x85cb, 0xcee1, 0x85cc, /*0x38-0x3f*/ 0xd1bd, 0x85cd, 0x85ce, 0xdfc0, 0x85cf, 0x85d0, 0xb4f4, 0x85d1, /*0x40-0x47*/ 0xb3ca, 0x85d2, 0xb8e6, 0xdfbb, 0x85d3, 0x85d4, 0x85d5, 0x85d6, /*0x48-0x4f*/ 0xc4c5, 0x85d7, 0xdfbc, 0xdfbd, 0xdfbe, 0xc5bb, 0xdfbf, 0xdfc2, /*0x50-0x57*/ 0xd4b1, 0xdfc3, 0x85d8, 0xc7ba, 0xced8, 0x85d9, 0x85da, 0x85db, /*0x58-0x5f*/ 0x85dc, 0x85dd, 0xc4d8, 0x85de, 0xdfca, 0x85df, 0xdfcf, 0x85e0, /*0x60-0x67*/ 0xd6dc, 0x85e1, 0x85e2, 0x85e3, 0x85e4, 0x85e5, 0x85e6, 0x85e7, /*0x68-0x6f*/ 0x85e8, 0xdfc9, 0xdfda, 0xceb6, 0x85e9, 0xbac7, 0xdfce, 0xdfc8, /*0x70-0x77*/ 0xc5de, 0x85ea, 0x85eb, 0xc9eb, 0xbaf4, 0xc3fc, 0x85ec, 0x85ed, /*0x78-0x7f*/ 0xbed7, 0x85ee, 0xdfc6, 0x85ef, 0xdfcd, 0x85f0, 0xc5d8, 0x85f1, /*0x80-0x87*/ 0x85f2, 0x85f3, 0x85f4, 0xd5a6, 0xbacd, 0x85f5, 0xbecc, 0xd3bd, /*0x88-0x8f*/ 0xb8c0, 0x85f6, 0xd6e4, 0x85f7, 0xdfc7, 0xb9be, 0xbfa7, 0x85f8, /*0x90-0x97*/ 0x85f9, 0xc1fc, 0xdfcb, 0xdfcc, 0x85fa, 0xdfd0, 0x85fb, 0x85fc, /*0x98-0x9f*/ 0x85fd, 0x85fe, 0x8640, 0xdfdb, 0xdfe5, 0x8641, 0xdfd7, 0xdfd6, /*0xa0-0xa7*/ 0xd7c9, 0xdfe3, 0xdfe4, 0xe5eb, 0xd2a7, 0xdfd2, 0x8642, 0xbfa9, /*0xa8-0xaf*/ 0x8643, 0xd4db, 0x8644, 0xbfc8, 0xdfd4, 0x8645, 0x8646, 0x8647, /*0xb0-0xb7*/ 0xcfcc, 0x8648, 0x8649, 0xdfdd, 0x864a, 0xd1ca, 0x864b, 0xdfde, /*0xb8-0xbf*/ 0xb0a7, 0xc6b7, 0xdfd3, 0x864c, 0xbae5, 0x864d, 0xb6df, 0xcddb, /*0xc0-0xc7*/ 0xb9fe, 0xd4d5, 0x864e, 0x864f, 0xdfdf, 0xcfec, 0xb0a5, 0xdfe7, /*0xc8-0xcf*/ 0xdfd1, 0xd1c6, 0xdfd5, 0xdfd8, 0xdfd9, 0xdfdc, 0x8650, 0xbba9, /*0xd0-0xd7*/ 0x8651, 0xdfe0, 0xdfe1, 0x8652, 0xdfe2, 0xdfe6, 0xdfe8, 0xd3b4, /*0xd8-0xdf*/ 0x8653, 0x8654, 0x8655, 0x8656, 0x8657, 0xb8e7, 0xc5b6, 0xdfea, /*0xe0-0xe7*/ 0xc9da, 0xc1a8, 0xc4c4, 0x8658, 0x8659, 0xbfde, 0xcff8, 0x865a, /*0xe8-0xef*/ 0x865b, 0x865c, 0xd5dc, 0xdfee, 0x865d, 0x865e, 0x865f, 0x8660, /*0xf0-0xf7*/ 0x8661, 0x8662, 0xb2b8, 0x8663, 0xbadf, 0xdfec, 0x8664, 0xdbc1, /*0xf8-0xff*/ /* 0x5500 */ 0x8665, 0xd1e4, 0x8666, 0x8667, 0x8668, 0x8669, 0xcbf4, 0xb4bd, /*0x00-0x07*/ 0x866a, 0xb0a6, 0x866b, 0x866c, 0x866d, 0x866e, 0x866f, 0xdff1, /*0x08-0x0f*/ 0xccc6, 0xdff2, 0x8670, 0x8671, 0xdfed, 0x8672, 0x8673, 0x8674, /*0x10-0x17*/ 0x8675, 0x8676, 0x8677, 0xdfe9, 0x8678, 0x8679, 0x867a, 0x867b, /*0x18-0x1f*/ 0xdfeb, 0x867c, 0xdfef, 0xdff0, 0xbbbd, 0x867d, 0x867e, 0xdff3, /*0x20-0x27*/ 0x8680, 0x8681, 0xdff4, 0x8682, 0xbba3, 0x8683, 0xcadb, 0xcea8, /*0x28-0x2f*/ 0xe0a7, 0xb3aa, 0x8684, 0xe0a6, 0x8685, 0x8686, 0x8687, 0xe0a1, /*0x30-0x37*/ 0x8688, 0x8689, 0x868a, 0x868b, 0xdffe, 0x868c, 0xcdd9, 0xdffc, /*0x38-0x3f*/ 0x868d, 0xdffa, 0x868e, 0xbfd0, 0xd7c4, 0x868f, 0xc9cc, 0x8690, /*0x40-0x47*/ 0x8691, 0xdff8, 0xb0a1, 0x8692, 0x8693, 0x8694, 0x8695, 0x8696, /*0x48-0x4f*/ 0xdffd, 0x8697, 0x8698, 0x8699, 0x869a, 0xdffb, 0xe0a2, 0x869b, /*0x50-0x57*/ 0x869c, 0x869d, 0x869e, 0x869f, 0xe0a8, 0x86a0, 0x86a1, 0x86a2, /*0x58-0x5f*/ 0x86a3, 0xb7c8, 0x86a4, 0x86a5, 0xc6a1, 0xc9b6, 0xc0b2, 0xdff5, /*0x60-0x67*/ 0x86a6, 0x86a7, 0xc5be, 0x86a8, 0xd8c4, 0xdff9, 0xc4f6, 0x86a9, /*0x68-0x6f*/ 0x86aa, 0x86ab, 0x86ac, 0x86ad, 0x86ae, 0xe0a3, 0xe0a4, 0xe0a5, /*0x70-0x77*/ 0xd0a5, 0x86af, 0x86b0, 0xe0b4, 0xcce4, 0x86b1, 0xe0b1, 0x86b2, /*0x78-0x7f*/ 0xbfa6, 0xe0af, 0xceb9, 0xe0ab, 0xc9c6, 0x86b3, 0x86b4, 0xc0ae, /*0x80-0x87*/ 0xe0ae, 0xbaed, 0xbab0, 0xe0a9, 0x86b5, 0x86b6, 0x86b7, 0xdff6, /*0x88-0x8f*/ 0x86b8, 0xe0b3, 0x86b9, 0x86ba, 0xe0b8, 0x86bb, 0x86bc, 0x86bd, /*0x90-0x97*/ 0xb4ad, 0xe0b9, 0x86be, 0x86bf, 0xcfb2, 0xbac8, 0x86c0, 0xe0b0, /*0x98-0x9f*/ 0x86c1, 0x86c2, 0x86c3, 0x86c4, 0x86c5, 0x86c6, 0x86c7, 0xd0fa, /*0xa0-0xa7*/ 0x86c8, 0x86c9, 0x86ca, 0x86cb, 0x86cc, 0x86cd, 0x86ce, 0x86cf, /*0xa8-0xaf*/ 0x86d0, 0xe0ac, 0x86d1, 0xd4fb, 0x86d2, 0xdff7, 0x86d3, 0xc5e7, /*0xb0-0xb7*/ 0x86d4, 0xe0ad, 0x86d5, 0xd3f7, 0x86d6, 0xe0b6, 0xe0b7, 0x86d7, /*0xb8-0xbf*/ 0x86d8, 0x86d9, 0x86da, 0x86db, 0xe0c4, 0xd0e1, 0x86dc, 0x86dd, /*0xc0-0xc7*/ 0x86de, 0xe0bc, 0x86df, 0x86e0, 0xe0c9, 0xe0ca, 0x86e1, 0x86e2, /*0xc8-0xcf*/ 0x86e3, 0xe0be, 0xe0aa, 0xc9a4, 0xe0c1, 0x86e4, 0xe0b2, 0x86e5, /*0xd0-0xd7*/ 0x86e6, 0x86e7, 0x86e8, 0x86e9, 0xcac8, 0xe0c3, 0x86ea, 0xe0b5, /*0xd8-0xdf*/ 0x86eb, 0xcecb, 0x86ec, 0xcbc3, 0xe0cd, 0xe0c6, 0xe0c2, 0x86ed, /*0xe0-0xe7*/ 0xe0cb, 0x86ee, 0xe0ba, 0xe0bf, 0xe0c0, 0x86ef, 0x86f0, 0xe0c5, /*0xe8-0xef*/ 0x86f1, 0x86f2, 0xe0c7, 0xe0c8, 0x86f3, 0xe0cc, 0x86f4, 0xe0bb, /*0xf0-0xf7*/ 0x86f5, 0x86f6, 0x86f7, 0x86f8, 0x86f9, 0xcbd4, 0xe0d5, 0x86fa, /*0xf8-0xff*/ /* 0x5600 */ 0xe0d6, 0xe0d2, 0x86fb, 0x86fc, 0x86fd, 0x86fe, 0x8740, 0x8741, /*0x00-0x07*/ 0xe0d0, 0xbcce, 0x8742, 0x8743, 0xe0d1, 0x8744, 0xb8c2, 0xd8c5, /*0x08-0x0f*/ 0x8745, 0x8746, 0x8747, 0x8748, 0x8749, 0x874a, 0x874b, 0x874c, /*0x10-0x17*/ 0xd0ea, 0x874d, 0x874e, 0xc2ef, 0x874f, 0x8750, 0xe0cf, 0xe0bd, /*0x18-0x1f*/ 0x8751, 0x8752, 0x8753, 0xe0d4, 0xe0d3, 0x8754, 0x8755, 0xe0d7, /*0x20-0x27*/ 0x8756, 0x8757, 0x8758, 0x8759, 0xe0dc, 0xe0d8, 0x875a, 0x875b, /*0x28-0x2f*/ 0x875c, 0xd6f6, 0xb3b0, 0x875d, 0xd7ec, 0x875e, 0xcbbb, 0x875f, /*0x30-0x37*/ 0x8760, 0xe0da, 0x8761, 0xcefb, 0x8762, 0x8763, 0x8764, 0xbad9, /*0x38-0x3f*/ 0x8765, 0x8766, 0x8767, 0x8768, 0x8769, 0x876a, 0x876b, 0x876c, /*0x40-0x47*/ 0x876d, 0x876e, 0x876f, 0x8770, 0xe0e1, 0xe0dd, 0xd2ad, 0x8771, /*0x48-0x4f*/ 0x8772, 0x8773, 0x8774, 0x8775, 0xe0e2, 0x8776, 0x8777, 0xe0db, /*0x50-0x57*/ 0xe0d9, 0xe0df, 0x8778, 0x8779, 0xe0e0, 0x877a, 0x877b, 0x877c, /*0x58-0x5f*/ 0x877d, 0x877e, 0xe0de, 0x8780, 0xe0e4, 0x8781, 0x8782, 0x8783, /*0x60-0x67*/ 0xc6f7, 0xd8ac, 0xd4eb, 0xe0e6, 0xcac9, 0x8784, 0x8785, 0x8786, /*0x68-0x6f*/ 0x8787, 0xe0e5, 0x8788, 0x8789, 0x878a, 0x878b, 0xb8c1, 0x878c, /*0x70-0x77*/ 0x878d, 0x878e, 0x878f, 0xe0e7, 0xe0e8, 0x8790, 0x8791, 0x8792, /*0x78-0x7f*/ 0x8793, 0x8794, 0x8795, 0x8796, 0x8797, 0xe0e9, 0xe0e3, 0x8798, /*0x80-0x87*/ 0x8799, 0x879a, 0x879b, 0x879c, 0x879d, 0x879e, 0xbabf, 0xcce7, /*0x88-0x8f*/ 0x879f, 0x87a0, 0x87a1, 0xe0ea, 0x87a2, 0x87a3, 0x87a4, 0x87a5, /*0x90-0x97*/ 0x87a6, 0x87a7, 0x87a8, 0x87a9, 0x87aa, 0x87ab, 0x87ac, 0x87ad, /*0x98-0x9f*/ 0x87ae, 0x87af, 0x87b0, 0xcff9, 0x87b1, 0x87b2, 0x87b3, 0x87b4, /*0xa0-0xa7*/ 0x87b5, 0x87b6, 0x87b7, 0x87b8, 0x87b9, 0x87ba, 0x87bb, 0xe0eb, /*0xa8-0xaf*/ 0x87bc, 0x87bd, 0x87be, 0x87bf, 0x87c0, 0x87c1, 0x87c2, 0xc8c2, /*0xb0-0xb7*/ 0x87c3, 0x87c4, 0x87c5, 0x87c6, 0xbdc0, 0x87c7, 0x87c8, 0x87c9, /*0xb8-0xbf*/ 0x87ca, 0x87cb, 0x87cc, 0x87cd, 0x87ce, 0x87cf, 0x87d0, 0x87d1, /*0xc0-0xc7*/ 0x87d2, 0x87d3, 0xc4d2, 0x87d4, 0x87d5, 0x87d6, 0x87d7, 0x87d8, /*0xc8-0xcf*/ 0x87d9, 0x87da, 0x87db, 0x87dc, 0xe0ec, 0x87dd, 0x87de, 0xe0ed, /*0xd0-0xd7*/ 0x87df, 0x87e0, 0xc7f4, 0xcbc4, 0x87e1, 0xe0ee, 0xbbd8, 0xd8b6, /*0xd8-0xdf*/ 0xd2f2, 0xe0ef, 0xcdc5, 0x87e2, 0xb6da, 0x87e3, 0x87e4, 0x87e5, /*0xe0-0xe7*/ 0x87e6, 0x87e7, 0x87e8, 0xe0f1, 0x87e9, 0xd4b0, 0x87ea, 0x87eb, /*0xe8-0xef*/ 0xc0a7, 0xb4d1, 0x87ec, 0x87ed, 0xcea7, 0xe0f0, 0x87ee, 0x87ef, /*0xf0-0xf7*/ 0x87f0, 0xe0f2, 0xb9cc, 0x87f1, 0x87f2, 0xb9fa, 0xcdbc, 0xe0f3, /*0xf8-0xff*/ /* 0x5700 */ 0x87f3, 0x87f4, 0x87f5, 0xc6d4, 0xe0f4, 0x87f6, 0xd4b2, 0x87f7, /*0x00-0x07*/ 0xc8a6, 0xe0f6, 0xe0f5, 0x87f8, 0x87f9, 0x87fa, 0x87fb, 0x87fc, /*0x08-0x0f*/ 0x87fd, 0x87fe, 0x8840, 0x8841, 0x8842, 0x8843, 0x8844, 0x8845, /*0x10-0x17*/ 0x8846, 0x8847, 0x8848, 0x8849, 0xe0f7, 0x884a, 0x884b, 0xcdc1, /*0x18-0x1f*/ 0x884c, 0x884d, 0x884e, 0xcaa5, 0x884f, 0x8850, 0x8851, 0x8852, /*0x20-0x27*/ 0xd4da, 0xdbd7, 0xdbd9, 0x8853, 0xdbd8, 0xb9e7, 0xdbdc, 0xdbdd, /*0x28-0x2f*/ 0xb5d8, 0x8854, 0x8855, 0xdbda, 0x8856, 0x8857, 0x8858, 0x8859, /*0x30-0x37*/ 0x885a, 0xdbdb, 0xb3a1, 0xdbdf, 0x885b, 0x885c, 0xbbf8, 0x885d, /*0x38-0x3f*/ 0xd6b7, 0x885e, 0xdbe0, 0x885f, 0x8860, 0x8861, 0x8862, 0xbef9, /*0x40-0x47*/ 0x8863, 0x8864, 0xb7bb, 0x8865, 0xdbd0, 0xccae, 0xbfb2, 0xbbb5, /*0x48-0x4f*/ 0xd7f8, 0xbfd3, 0x8866, 0x8867, 0x8868, 0x8869, 0x886a, 0xbfe9, /*0x50-0x57*/ 0x886b, 0x886c, 0xbce1, 0xccb3, 0xdbde, 0xb0d3, 0xceeb, 0xb7d8, /*0x58-0x5f*/ 0xd7b9, 0xc6c2, 0x886d, 0x886e, 0xc0a4, 0x886f, 0xccb9, 0x8870, /*0x60-0x67*/ 0xdbe7, 0xdbe1, 0xc6ba, 0xdbe3, 0x8871, 0xdbe8, 0x8872, 0xc5f7, /*0x68-0x6f*/ 0x8873, 0x8874, 0x8875, 0xdbea, 0x8876, 0x8877, 0xdbe9, 0xbfc0, /*0x70-0x77*/ 0x8878, 0x8879, 0x887a, 0xdbe6, 0xdbe5, 0x887b, 0x887c, 0x887d, /*0x78-0x7f*/ 0x887e, 0x8880, 0xb4b9, 0xc0ac, 0xc2a2, 0xdbe2, 0xdbe4, 0x8881, /*0x80-0x87*/ 0x8882, 0x8883, 0x8884, 0xd0cd, 0xdbed, 0x8885, 0x8886, 0x8887, /*0x88-0x8f*/ 0x8888, 0x8889, 0xc0dd, 0xdbf2, 0x888a, 0x888b, 0x888c, 0x888d, /*0x90-0x97*/ 0x888e, 0x888f, 0x8890, 0xb6e2, 0x8891, 0x8892, 0x8893, 0x8894, /*0x98-0x9f*/ 0xdbf3, 0xdbd2, 0xb9b8, 0xd4ab, 0xdbec, 0x8895, 0xbfd1, 0xdbf0, /*0xa0-0xa7*/ 0x8896, 0xdbd1, 0x8897, 0xb5e6, 0x8898, 0xdbeb, 0xbfe5, 0x8899, /*0xa8-0xaf*/ 0x889a, 0x889b, 0xdbee, 0x889c, 0xdbf1, 0x889d, 0x889e, 0x889f, /*0xb0-0xb7*/ 0xdbf9, 0x88a0, 0x88a1, 0x88a2, 0x88a3, 0x88a4, 0x88a5, 0x88a6, /*0xb8-0xbf*/ 0x88a7, 0x88a8, 0xb9a1, 0xb0a3, 0x88a9, 0x88aa, 0x88ab, 0x88ac, /*0xc0-0xc7*/ 0x88ad, 0x88ae, 0x88af, 0xc2f1, 0x88b0, 0x88b1, 0xb3c7, 0xdbef, /*0xc8-0xcf*/ 0x88b2, 0x88b3, 0xdbf8, 0x88b4, 0xc6d2, 0xdbf4, 0x88b5, 0x88b6, /*0xd0-0xd7*/ 0xdbf5, 0xdbf7, 0xdbf6, 0x88b7, 0x88b8, 0xdbfe, 0x88b9, 0xd3f2, /*0xd8-0xdf*/ 0xb2ba, 0x88ba, 0x88bb, 0x88bc, 0xdbfd, 0x88bd, 0x88be, 0x88bf, /*0xe0-0xe7*/ 0x88c0, 0x88c1, 0x88c2, 0x88c3, 0x88c4, 0xdca4, 0x88c5, 0xdbfb, /*0xe8-0xef*/ 0x88c6, 0x88c7, 0x88c8, 0x88c9, 0xdbfa, 0x88ca, 0x88cb, 0x88cc, /*0xf0-0xf7*/ 0xdbfc, 0xc5e0, 0xbbf9, 0x88cd, 0x88ce, 0xdca3, 0x88cf, 0x88d0, /*0xf8-0xff*/ /* 0x5800 */ 0xdca5, 0x88d1, 0xccc3, 0x88d2, 0x88d3, 0x88d4, 0xb6d1, 0xddc0, /*0x00-0x07*/ 0x88d5, 0x88d6, 0x88d7, 0xdca1, 0x88d8, 0xdca2, 0x88d9, 0x88da, /*0x08-0x0f*/ 0x88db, 0xc7b5, 0x88dc, 0x88dd, 0x88de, 0xb6e9, 0x88df, 0x88e0, /*0x10-0x17*/ 0x88e1, 0xdca7, 0x88e2, 0x88e3, 0x88e4, 0x88e5, 0xdca6, 0x88e6, /*0x18-0x1f*/ 0xdca9, 0xb1a4, 0x88e7, 0x88e8, 0xb5cc, 0x88e9, 0x88ea, 0x88eb, /*0x20-0x27*/ 0x88ec, 0x88ed, 0xbfb0, 0x88ee, 0x88ef, 0x88f0, 0x88f1, 0x88f2, /*0x28-0x2f*/ 0xd1df, 0x88f3, 0x88f4, 0x88f5, 0x88f6, 0xb6c2, 0x88f7, 0x88f8, /*0x30-0x37*/ 0x88f9, 0x88fa, 0x88fb, 0x88fc, 0x88fd, 0x88fe, 0x8940, 0x8941, /*0x38-0x3f*/ 0x8942, 0x8943, 0x8944, 0x8945, 0xdca8, 0x8946, 0x8947, 0x8948, /*0x40-0x47*/ 0x8949, 0x894a, 0x894b, 0x894c, 0xcbfa, 0xebf3, 0x894d, 0x894e, /*0x48-0x4f*/ 0x894f, 0xcbdc, 0x8950, 0x8951, 0xcbfe, 0x8952, 0x8953, 0x8954, /*0x50-0x57*/ 0xccc1, 0x8955, 0x8956, 0x8957, 0x8958, 0x8959, 0xc8fb, 0x895a, /*0x58-0x5f*/ 0x895b, 0x895c, 0x895d, 0x895e, 0x895f, 0xdcaa, 0x8960, 0x8961, /*0x60-0x67*/ 0x8962, 0x8963, 0x8964, 0xccee, 0xdcab, 0x8965, 0x8966, 0x8967, /*0x68-0x6f*/ 0x8968, 0x8969, 0x896a, 0x896b, 0x896c, 0x896d, 0x896e, 0x896f, /*0x70-0x77*/ 0x8970, 0x8971, 0x8972, 0x8973, 0x8974, 0x8975, 0xdbd3, 0x8976, /*0x78-0x7f*/ 0xdcaf, 0xdcac, 0x8977, 0xbeb3, 0x8978, 0xcafb, 0x8979, 0x897a, /*0x80-0x87*/ 0x897b, 0xdcad, 0x897c, 0x897d, 0x897e, 0x8980, 0x8981, 0x8982, /*0x88-0x8f*/ 0x8983, 0x8984, 0xc9ca, 0xc4b9, 0x8985, 0x8986, 0x8987, 0x8988, /*0x90-0x97*/ 0x8989, 0xc7bd, 0xdcae, 0x898a, 0x898b, 0x898c, 0xd4f6, 0xd0e6, /*0x98-0x9f*/ 0x898d, 0x898e, 0x898f, 0x8990, 0x8991, 0x8992, 0x8993, 0x8994, /*0xa0-0xa7*/ 0xc4ab, 0xb6d5, 0x8995, 0x8996, 0x8997, 0x8998, 0x8999, 0x899a, /*0xa8-0xaf*/ 0x899b, 0x899c, 0x899d, 0x899e, 0x899f, 0x89a0, 0x89a1, 0x89a2, /*0xb0-0xb7*/ 0x89a3, 0x89a4, 0x89a5, 0x89a6, 0xdbd4, 0x89a7, 0x89a8, 0x89a9, /*0xb8-0xbf*/ 0x89aa, 0xb1da, 0x89ab, 0x89ac, 0x89ad, 0xdbd5, 0x89ae, 0x89af, /*0xc0-0xc7*/ 0x89b0, 0x89b1, 0x89b2, 0x89b3, 0x89b4, 0x89b5, 0x89b6, 0x89b7, /*0xc8-0xcf*/ 0x89b8, 0xdbd6, 0x89b9, 0x89ba, 0x89bb, 0xbabe, 0x89bc, 0x89bd, /*0xd0-0xd7*/ 0x89be, 0x89bf, 0x89c0, 0x89c1, 0x89c2, 0x89c3, 0x89c4, 0x89c5, /*0xd8-0xdf*/ 0x89c6, 0x89c7, 0x89c8, 0x89c9, 0xc8c0, 0x89ca, 0x89cb, 0x89cc, /*0xe0-0xe7*/ 0x89cd, 0x89ce, 0x89cf, 0xcabf, 0xc8c9, 0x89d0, 0xd7b3, 0x89d1, /*0xe8-0xef*/ 0xc9f9, 0x89d2, 0x89d3, 0xbfc7, 0x89d4, 0x89d5, 0xbaf8, 0x89d6, /*0xf0-0xf7*/ 0x89d7, 0xd2bc, 0x89d8, 0x89d9, 0x89da, 0x89db, 0x89dc, 0x89dd, /*0xf8-0xff*/ /* 0x5900 */ 0x89de, 0x89df, 0xe2ba, 0x89e0, 0xb4a6, 0x89e1, 0x89e2, 0xb1b8, /*0x00-0x07*/ 0x89e3, 0x89e4, 0x89e5, 0x89e6, 0x89e7, 0xb8b4, 0x89e8, 0xcfc4, /*0x08-0x0f*/ 0x89e9, 0x89ea, 0x89eb, 0x89ec, 0xd9e7, 0xcfa6, 0xcde2, 0x89ed, /*0x10-0x17*/ 0x89ee, 0xd9ed, 0xb6e0, 0x89ef, 0xd2b9, 0x89f0, 0x89f1, 0xb9bb, /*0x18-0x1f*/ 0x89f2, 0x89f3, 0x89f4, 0x89f5, 0xe2b9, 0xe2b7, 0x89f6, 0xb4f3, /*0x20-0x27*/ 0x89f7, 0xccec, 0xccab, 0xb7f2, 0x89f8, 0xd8b2, 0xd1eb, 0xbabb, /*0x28-0x2f*/ 0x89f9, 0xcaa7, 0x89fa, 0x89fb, 0xcdb7, 0x89fc, 0x89fd, 0xd2c4, /*0x30-0x37*/ 0xbfe4, 0xbcd0, 0xb6e1, 0x89fe, 0xdec5, 0x8a40, 0x8a41, 0x8a42, /*0x38-0x3f*/ 0x8a43, 0xdec6, 0xdbbc, 0x8a44, 0xd1d9, 0x8a45, 0x8a46, 0xc6e6, /*0x40-0x47*/ 0xc4ce, 0xb7ee, 0x8a47, 0xb7dc, 0x8a48, 0x8a49, 0xbffc, 0xd7e0, /*0x48-0x4f*/ 0x8a4a, 0xc6f5, 0x8a4b, 0x8a4c, 0xb1bc, 0xdec8, 0xbdb1, 0xccd7, /*0x50-0x57*/ 0xdeca, 0x8a4d, 0xdec9, 0x8a4e, 0x8a4f, 0x8a50, 0x8a51, 0x8a52, /*0x58-0x5f*/ 0xb5ec, 0x8a53, 0xc9dd, 0x8a54, 0x8a55, 0xb0c2, 0x8a56, 0x8a57, /*0x60-0x67*/ 0x8a58, 0x8a59, 0x8a5a, 0x8a5b, 0x8a5c, 0x8a5d, 0x8a5e, 0x8a5f, /*0x68-0x6f*/ 0x8a60, 0x8a61, 0x8a62, 0xc5ae, 0xc5ab, 0x8a63, 0xc4cc, 0x8a64, /*0x70-0x77*/ 0xbce9, 0xcbfd, 0x8a65, 0x8a66, 0x8a67, 0xbac3, 0x8a68, 0x8a69, /*0x78-0x7f*/ 0x8a6a, 0xe5f9, 0xc8e7, 0xe5fa, 0xcdfd, 0x8a6b, 0xd7b1, 0xb8be, /*0x80-0x87*/ 0xc2e8, 0x8a6c, 0xc8d1, 0x8a6d, 0x8a6e, 0xe5fb, 0x8a6f, 0x8a70, /*0x88-0x8f*/ 0x8a71, 0x8a72, 0xb6ca, 0xbccb, 0x8a73, 0x8a74, 0xd1fd, 0xe6a1, /*0x90-0x97*/ 0x8a75, 0xc3ee, 0x8a76, 0x8a77, 0x8a78, 0x8a79, 0xe6a4, 0x8a7a, /*0x98-0x9f*/ 0x8a7b, 0x8a7c, 0x8a7d, 0xe5fe, 0xe6a5, 0xcdd7, 0x8a7e, 0x8a80, /*0xa0-0xa7*/ 0xb7c1, 0xe5fc, 0xe5fd, 0xe6a3, 0x8a81, 0x8a82, 0xc4dd, 0xe6a8, /*0xa8-0xaf*/ 0x8a83, 0x8a84, 0xe6a7, 0x8a85, 0x8a86, 0x8a87, 0x8a88, 0x8a89, /*0xb0-0xb7*/ 0x8a8a, 0xc3c3, 0x8a8b, 0xc6de, 0x8a8c, 0x8a8d, 0xe6aa, 0x8a8e, /*0xb8-0xbf*/ 0x8a8f, 0x8a90, 0x8a91, 0x8a92, 0x8a93, 0x8a94, 0xc4b7, 0x8a95, /*0xc0-0xc7*/ 0x8a96, 0x8a97, 0xe6a2, 0xcabc, 0x8a98, 0x8a99, 0x8a9a, 0x8a9b, /*0xc8-0xcf*/ 0xbde3, 0xb9c3, 0xe6a6, 0xd0d5, 0xceaf, 0x8a9c, 0x8a9d, 0xe6a9, /*0xd0-0xd7*/ 0xe6b0, 0x8a9e, 0xd2a6, 0x8a9f, 0xbdaa, 0xe6ad, 0x8aa0, 0x8aa1, /*0xd8-0xdf*/ 0x8aa2, 0x8aa3, 0x8aa4, 0xe6af, 0x8aa5, 0xc0d1, 0x8aa6, 0x8aa7, /*0xe0-0xe7*/ 0xd2cc, 0x8aa8, 0x8aa9, 0x8aaa, 0xbca7, 0x8aab, 0x8aac, 0x8aad, /*0xe8-0xef*/ 0x8aae, 0x8aaf, 0x8ab0, 0x8ab1, 0x8ab2, 0x8ab3, 0x8ab4, 0x8ab5, /*0xf0-0xf7*/ 0x8ab6, 0xe6b1, 0x8ab7, 0xd2f6, 0x8ab8, 0x8ab9, 0x8aba, 0xd7cb, /*0xf8-0xff*/ /* 0x5a00 */ 0x8abb, 0xcdfe, 0x8abc, 0xcdde, 0xc2a6, 0xe6ab, 0xe6ac, 0xbdbf, /*0x00-0x07*/ 0xe6ae, 0xe6b3, 0x8abd, 0x8abe, 0xe6b2, 0x8abf, 0x8ac0, 0x8ac1, /*0x08-0x0f*/ 0x8ac2, 0xe6b6, 0x8ac3, 0xe6b8, 0x8ac4, 0x8ac5, 0x8ac6, 0x8ac7, /*0x10-0x17*/ 0xc4ef, 0x8ac8, 0x8ac9, 0x8aca, 0xc4c8, 0x8acb, 0x8acc, 0xbeea, /*0x18-0x1f*/ 0xc9ef, 0x8acd, 0x8ace, 0xe6b7, 0x8acf, 0xb6f0, 0x8ad0, 0x8ad1, /*0x20-0x27*/ 0x8ad2, 0xc3e4, 0x8ad3, 0x8ad4, 0x8ad5, 0x8ad6, 0x8ad7, 0x8ad8, /*0x28-0x2f*/ 0x8ad9, 0xd3e9, 0xe6b4, 0x8ada, 0xe6b5, 0x8adb, 0xc8a2, 0x8adc, /*0x30-0x37*/ 0x8add, 0x8ade, 0x8adf, 0x8ae0, 0xe6bd, 0x8ae1, 0x8ae2, 0x8ae3, /*0x38-0x3f*/ 0xe6b9, 0x8ae4, 0x8ae5, 0x8ae6, 0x8ae7, 0x8ae8, 0xc6c5, 0x8ae9, /*0x40-0x47*/ 0x8aea, 0xcdf1, 0xe6bb, 0x8aeb, 0x8aec, 0x8aed, 0x8aee, 0x8aef, /*0x48-0x4f*/ 0x8af0, 0x8af1, 0x8af2, 0x8af3, 0x8af4, 0xe6bc, 0x8af5, 0x8af6, /*0x50-0x57*/ 0x8af7, 0x8af8, 0xbbe9, 0x8af9, 0x8afa, 0x8afb, 0x8afc, 0x8afd, /*0x58-0x5f*/ 0x8afe, 0x8b40, 0xe6be, 0x8b41, 0x8b42, 0x8b43, 0x8b44, 0xe6ba, /*0x60-0x67*/ 0x8b45, 0x8b46, 0xc0b7, 0x8b47, 0x8b48, 0x8b49, 0x8b4a, 0x8b4b, /*0x68-0x6f*/ 0x8b4c, 0x8b4d, 0x8b4e, 0x8b4f, 0xd3a4, 0xe6bf, 0xc9f4, 0xe6c3, /*0x70-0x77*/ 0x8b50, 0x8b51, 0xe6c4, 0x8b52, 0x8b53, 0x8b54, 0x8b55, 0xd0f6, /*0x78-0x7f*/ 0x8b56, 0x8b57, 0x8b58, 0x8b59, 0x8b5a, 0x8b5b, 0x8b5c, 0x8b5d, /*0x80-0x87*/ 0x8b5e, 0x8b5f, 0x8b60, 0x8b61, 0x8b62, 0x8b63, 0x8b64, 0x8b65, /*0x88-0x8f*/ 0x8b66, 0x8b67, 0xc3bd, 0x8b68, 0x8b69, 0x8b6a, 0x8b6b, 0x8b6c, /*0x90-0x97*/ 0x8b6d, 0x8b6e, 0xc3c4, 0xe6c2, 0x8b6f, 0x8b70, 0x8b71, 0x8b72, /*0x98-0x9f*/ 0x8b73, 0x8b74, 0x8b75, 0x8b76, 0x8b77, 0x8b78, 0x8b79, 0x8b7a, /*0xa0-0xa7*/ 0x8b7b, 0x8b7c, 0xe6c1, 0x8b7d, 0x8b7e, 0x8b80, 0x8b81, 0x8b82, /*0xa8-0xaf*/ 0x8b83, 0x8b84, 0xe6c7, 0xcfb1, 0x8b85, 0xebf4, 0x8b86, 0x8b87, /*0xb0-0xb7*/ 0xe6ca, 0x8b88, 0x8b89, 0x8b8a, 0x8b8b, 0x8b8c, 0xe6c5, 0x8b8d, /*0xb8-0xbf*/ 0x8b8e, 0xbcde, 0xc9a9, 0x8b8f, 0x8b90, 0x8b91, 0x8b92, 0x8b93, /*0xc0-0xc7*/ 0x8b94, 0xbcb5, 0x8b95, 0x8b96, 0xcfd3, 0x8b97, 0x8b98, 0x8b99, /*0xc8-0xcf*/ 0x8b9a, 0x8b9b, 0xe6c8, 0x8b9c, 0xe6c9, 0x8b9d, 0xe6ce, 0x8b9e, /*0xd0-0xd7*/ 0xe6d0, 0x8b9f, 0x8ba0, 0x8ba1, 0xe6d1, 0x8ba2, 0x8ba3, 0x8ba4, /*0xd8-0xdf*/ 0xe6cb, 0xb5d5, 0x8ba5, 0xe6cc, 0x8ba6, 0x8ba7, 0xe6cf, 0x8ba8, /*0xe0-0xe7*/ 0x8ba9, 0xc4db, 0x8baa, 0xe6c6, 0x8bab, 0x8bac, 0x8bad, 0x8bae, /*0xe8-0xef*/ 0x8baf, 0xe6cd, 0x8bb0, 0x8bb1, 0x8bb2, 0x8bb3, 0x8bb4, 0x8bb5, /*0xf0-0xf7*/ 0x8bb6, 0x8bb7, 0x8bb8, 0x8bb9, 0x8bba, 0x8bbb, 0x8bbc, 0x8bbd, /*0xf8-0xff*/ /* 0x5b00 */ 0x8bbe, 0x8bbf, 0x8bc0, 0x8bc1, 0x8bc2, 0x8bc3, 0x8bc4, 0x8bc5, /*0x00-0x07*/ 0x8bc6, 0xe6d2, 0x8bc7, 0x8bc8, 0x8bc9, 0x8bca, 0x8bcb, 0x8bcc, /*0x08-0x0f*/ 0x8bcd, 0x8bce, 0x8bcf, 0x8bd0, 0x8bd1, 0x8bd2, 0xe6d4, 0xe6d3, /*0x10-0x17*/ 0x8bd3, 0x8bd4, 0x8bd5, 0x8bd6, 0x8bd7, 0x8bd8, 0x8bd9, 0x8bda, /*0x18-0x1f*/ 0x8bdb, 0x8bdc, 0x8bdd, 0x8bde, 0x8bdf, 0x8be0, 0x8be1, 0x8be2, /*0x20-0x27*/ 0x8be3, 0x8be4, 0x8be5, 0x8be6, 0x8be7, 0x8be8, 0x8be9, 0x8bea, /*0x28-0x2f*/ 0x8beb, 0x8bec, 0xe6d5, 0x8bed, 0xd9f8, 0x8bee, 0x8bef, 0xe6d6, /*0x30-0x37*/ 0x8bf0, 0x8bf1, 0x8bf2, 0x8bf3, 0x8bf4, 0x8bf5, 0x8bf6, 0x8bf7, /*0x38-0x3f*/ 0xe6d7, 0x8bf8, 0x8bf9, 0x8bfa, 0x8bfb, 0x8bfc, 0x8bfd, 0x8bfe, /*0x40-0x47*/ 0x8c40, 0x8c41, 0x8c42, 0x8c43, 0x8c44, 0x8c45, 0x8c46, 0x8c47, /*0x48-0x4f*/ 0xd7d3, 0xe6dd, 0x8c48, 0xe6de, 0xbfd7, 0xd4d0, 0x8c49, 0xd7d6, /*0x50-0x57*/ 0xb4e6, 0xcbef, 0xe6da, 0xd8c3, 0xd7ce, 0xd0a2, 0x8c4a, 0xc3cf, /*0x58-0x5f*/ 0x8c4b, 0x8c4c, 0xe6df, 0xbcbe, 0xb9c2, 0xe6db, 0xd1a7, 0x8c4d, /*0x60-0x67*/ 0x8c4e, 0xbaa2, 0xc2cf, 0x8c4f, 0xd8ab, 0x8c50, 0x8c51, 0x8c52, /*0x68-0x6f*/ 0xcaeb, 0xe5ee, 0x8c53, 0xe6dc, 0x8c54, 0xb7f5, 0x8c55, 0x8c56, /*0x70-0x77*/ 0x8c57, 0x8c58, 0xc8e6, 0x8c59, 0x8c5a, 0xc4f5, 0x8c5b, 0x8c5c, /*0x78-0x7f*/ 0xe5b2, 0xc4fe, 0x8c5d, 0xcbfc, 0xe5b3, 0xd5ac, 0x8c5e, 0xd3ee, /*0x80-0x87*/ 0xcad8, 0xb0b2, 0x8c5f, 0xcbce, 0xcdea, 0x8c60, 0x8c61, 0xbaea, /*0x88-0x8f*/ 0x8c62, 0x8c63, 0x8c64, 0xe5b5, 0x8c65, 0xe5b4, 0x8c66, 0xd7da, /*0x90-0x97*/ 0xb9d9, 0xd6e6, 0xb6a8, 0xcdf0, 0xd2cb, 0xb1a6, 0xcab5, 0x8c67, /*0x98-0x9f*/ 0xb3e8, 0xc9f3, 0xbfcd, 0xd0fb, 0xcad2, 0xe5b6, 0xbbc2, 0x8c68, /*0xa0-0xa7*/ 0x8c69, 0x8c6a, 0xcfdc, 0xb9ac, 0x8c6b, 0x8c6c, 0x8c6d, 0x8c6e, /*0xa8-0xaf*/ 0xd4d7, 0x8c6f, 0x8c70, 0xbaa6, 0xd1e7, 0xcffc, 0xbcd2, 0x8c71, /*0xb0-0xb7*/ 0xe5b7, 0xc8dd, 0x8c72, 0x8c73, 0x8c74, 0xbfed, 0xb1f6, 0xcbde, /*0xb8-0xbf*/ 0x8c75, 0x8c76, 0xbcc5, 0x8c77, 0xbcc4, 0xd2fa, 0xc3dc, 0xbfdc, /*0xc0-0xc7*/ 0x8c78, 0x8c79, 0x8c7a, 0x8c7b, 0xb8bb, 0x8c7c, 0x8c7d, 0x8c7e, /*0xc8-0xcf*/ 0xc3c2, 0x8c80, 0xbaae, 0xd4a2, 0x8c81, 0x8c82, 0x8c83, 0x8c84, /*0xd0-0xd7*/ 0x8c85, 0x8c86, 0x8c87, 0x8c88, 0x8c89, 0xc7de, 0xc4af, 0xb2ec, /*0xd8-0xdf*/ 0x8c8a, 0xb9d1, 0x8c8b, 0x8c8c, 0xe5bb, 0xc1c8, 0x8c8d, 0x8c8e, /*0xe0-0xe7*/ 0xd5af, 0x8c8f, 0x8c90, 0x8c91, 0x8c92, 0x8c93, 0xe5bc, 0x8c94, /*0xe8-0xef*/ 0xe5be, 0x8c95, 0x8c96, 0x8c97, 0x8c98, 0x8c99, 0x8c9a, 0x8c9b, /*0xf0-0xf7*/ 0xb4e7, 0xb6d4, 0xcbc2, 0xd1b0, 0xb5bc, 0x8c9c, 0x8c9d, 0xcad9, /*0xf8-0xff*/ /* 0x5c00 */ 0x8c9e, 0xb7e2, 0x8c9f, 0x8ca0, 0xc9e4, 0x8ca1, 0xbdab, 0x8ca2, /*0x00-0x07*/ 0x8ca3, 0xcebe, 0xd7f0, 0x8ca4, 0x8ca5, 0x8ca6, 0x8ca7, 0xd0a1, /*0x08-0x0f*/ 0x8ca8, 0xc9d9, 0x8ca9, 0x8caa, 0xb6fb, 0xe6d8, 0xbce2, 0x8cab, /*0x10-0x17*/ 0xb3be, 0x8cac, 0xc9d0, 0x8cad, 0xe6d9, 0xb3a2, 0x8cae, 0x8caf, /*0x18-0x1f*/ 0x8cb0, 0x8cb1, 0xdecc, 0x8cb2, 0xd3c8, 0xdecd, 0x8cb3, 0xd2a2, /*0x20-0x27*/ 0x8cb4, 0x8cb5, 0x8cb6, 0x8cb7, 0xdece, 0x8cb8, 0x8cb9, 0x8cba, /*0x28-0x2f*/ 0x8cbb, 0xbecd, 0x8cbc, 0x8cbd, 0xdecf, 0x8cbe, 0x8cbf, 0x8cc0, /*0x30-0x37*/ 0xcaac, 0xd2fc, 0xb3df, 0xe5ea, 0xc4e1, 0xbea1, 0xceb2, 0xc4f2, /*0x38-0x3f*/ 0xbed6, 0xc6a8, 0xb2e3, 0x8cc1, 0x8cc2, 0xbed3, 0x8cc3, 0x8cc4, /*0x40-0x47*/ 0xc7fc, 0xcceb, 0xbdec, 0xcedd, 0x8cc5, 0x8cc6, 0xcaba, 0xc6c1, /*0x48-0x4f*/ 0xe5ec, 0xd0bc, 0x8cc7, 0x8cc8, 0x8cc9, 0xd5b9, 0x8cca, 0x8ccb, /*0x50-0x57*/ 0x8ccc, 0xe5ed, 0x8ccd, 0x8cce, 0x8ccf, 0x8cd0, 0xcaf4, 0x8cd1, /*0x58-0x5f*/ 0xcdc0, 0xc2c5, 0x8cd2, 0xe5ef, 0x8cd3, 0xc2c4, 0xe5f0, 0x8cd4, /*0x60-0x67*/ 0x8cd5, 0x8cd6, 0x8cd7, 0x8cd8, 0x8cd9, 0x8cda, 0xe5f8, 0xcdcd, /*0x68-0x6f*/ 0x8cdb, 0xc9bd, 0x8cdc, 0x8cdd, 0x8cde, 0x8cdf, 0x8ce0, 0x8ce1, /*0x70-0x77*/ 0x8ce2, 0xd2d9, 0xe1a8, 0x8ce3, 0x8ce4, 0x8ce5, 0x8ce6, 0xd3ec, /*0x78-0x7f*/ 0x8ce7, 0xcbea, 0xc6f1, 0x8ce8, 0x8ce9, 0x8cea, 0x8ceb, 0x8cec, /*0x80-0x87*/ 0xe1ac, 0x8ced, 0x8cee, 0x8cef, 0xe1a7, 0xe1a9, 0x8cf0, 0x8cf1, /*0x88-0x8f*/ 0xe1aa, 0xe1af, 0x8cf2, 0x8cf3, 0xb2ed, 0x8cf4, 0xe1ab, 0xb8da, /*0x90-0x97*/ 0xe1ad, 0xe1ae, 0xe1b0, 0xb5ba, 0xe1b1, 0x8cf5, 0x8cf6, 0x8cf7, /*0x98-0x9f*/ 0x8cf8, 0x8cf9, 0xe1b3, 0xe1b8, 0x8cfa, 0x8cfb, 0x8cfc, 0x8cfd, /*0xa0-0xa7*/ 0x8cfe, 0xd1d2, 0x8d40, 0xe1b6, 0xe1b5, 0xc1eb, 0x8d41, 0x8d42, /*0xa8-0xaf*/ 0x8d43, 0xe1b7, 0x8d44, 0xd4c0, 0x8d45, 0xe1b2, 0x8d46, 0xe1ba, /*0xb0-0xb7*/ 0xb0b6, 0x8d47, 0x8d48, 0x8d49, 0x8d4a, 0xe1b4, 0x8d4b, 0xbff9, /*0xb8-0xbf*/ 0x8d4c, 0xe1b9, 0x8d4d, 0x8d4e, 0xe1bb, 0x8d4f, 0x8d50, 0x8d51, /*0xc0-0xc7*/ 0x8d52, 0x8d53, 0x8d54, 0xe1be, 0x8d55, 0x8d56, 0x8d57, 0x8d58, /*0xc8-0xcf*/ 0x8d59, 0x8d5a, 0xe1bc, 0x8d5b, 0x8d5c, 0x8d5d, 0x8d5e, 0x8d5f, /*0xd0-0xd7*/ 0x8d60, 0xd6c5, 0x8d61, 0x8d62, 0x8d63, 0x8d64, 0x8d65, 0x8d66, /*0xd8-0xdf*/ 0x8d67, 0xcfbf, 0x8d68, 0x8d69, 0xe1bd, 0xe1bf, 0xc2cd, 0x8d6a, /*0xe0-0xe7*/ 0xb6eb, 0x8d6b, 0xd3f8, 0x8d6c, 0x8d6d, 0xc7cd, 0x8d6e, 0x8d6f, /*0xe8-0xef*/ 0xb7e5, 0x8d70, 0x8d71, 0x8d72, 0x8d73, 0x8d74, 0x8d75, 0x8d76, /*0xf0-0xf7*/ 0x8d77, 0x8d78, 0x8d79, 0xbefe, 0x8d7a, 0x8d7b, 0x8d7c, 0x8d7d, /*0xf8-0xff*/ /* 0x5d00 */ 0x8d7e, 0x8d80, 0xe1c0, 0xe1c1, 0x8d81, 0x8d82, 0xe1c7, 0xb3e7, /*0x00-0x07*/ 0x8d83, 0x8d84, 0x8d85, 0x8d86, 0x8d87, 0x8d88, 0xc6e9, 0x8d89, /*0x08-0x0f*/ 0x8d8a, 0x8d8b, 0x8d8c, 0x8d8d, 0xb4de, 0x8d8e, 0xd1c2, 0x8d8f, /*0x10-0x17*/ 0x8d90, 0x8d91, 0x8d92, 0xe1c8, 0x8d93, 0x8d94, 0xe1c6, 0x8d95, /*0x18-0x1f*/ 0x8d96, 0x8d97, 0x8d98, 0x8d99, 0xe1c5, 0x8d9a, 0xe1c3, 0xe1c2, /*0x20-0x27*/ 0x8d9b, 0xb1c0, 0x8d9c, 0x8d9d, 0x8d9e, 0xd5b8, 0xe1c4, 0x8d9f, /*0x28-0x2f*/ 0x8da0, 0x8da1, 0x8da2, 0x8da3, 0xe1cb, 0x8da4, 0x8da5, 0x8da6, /*0x30-0x37*/ 0x8da7, 0x8da8, 0x8da9, 0x8daa, 0x8dab, 0xe1cc, 0xe1ca, 0x8dac, /*0x38-0x3f*/ 0x8dad, 0x8dae, 0x8daf, 0x8db0, 0x8db1, 0x8db2, 0x8db3, 0xeffa, /*0x40-0x47*/ 0x8db4, 0x8db5, 0xe1d3, 0xe1d2, 0xc7b6, 0x8db6, 0x8db7, 0x8db8, /*0x48-0x4f*/ 0x8db9, 0x8dba, 0x8dbb, 0x8dbc, 0x8dbd, 0x8dbe, 0x8dbf, 0x8dc0, /*0x50-0x57*/ 0xe1c9, 0x8dc1, 0x8dc2, 0xe1ce, 0x8dc3, 0xe1d0, 0x8dc4, 0x8dc5, /*0x58-0x5f*/ 0x8dc6, 0x8dc7, 0x8dc8, 0x8dc9, 0x8dca, 0x8dcb, 0x8dcc, 0x8dcd, /*0x60-0x67*/ 0x8dce, 0xe1d4, 0x8dcf, 0xe1d1, 0xe1cd, 0x8dd0, 0x8dd1, 0xe1cf, /*0x68-0x6f*/ 0x8dd2, 0x8dd3, 0x8dd4, 0x8dd5, 0xe1d5, 0x8dd6, 0x8dd7, 0x8dd8, /*0x70-0x77*/ 0x8dd9, 0x8dda, 0x8ddb, 0x8ddc, 0x8ddd, 0x8dde, 0x8ddf, 0x8de0, /*0x78-0x7f*/ 0x8de1, 0x8de2, 0xe1d6, 0x8de3, 0x8de4, 0x8de5, 0x8de6, 0x8de7, /*0x80-0x87*/ 0x8de8, 0x8de9, 0x8dea, 0x8deb, 0x8dec, 0x8ded, 0x8dee, 0x8def, /*0x88-0x8f*/ 0x8df0, 0x8df1, 0x8df2, 0x8df3, 0x8df4, 0x8df5, 0x8df6, 0x8df7, /*0x90-0x97*/ 0x8df8, 0xe1d7, 0x8df9, 0x8dfa, 0x8dfb, 0xe1d8, 0x8dfc, 0x8dfd, /*0x98-0x9f*/ 0x8dfe, 0x8e40, 0x8e41, 0x8e42, 0x8e43, 0x8e44, 0x8e45, 0x8e46, /*0xa0-0xa7*/ 0x8e47, 0x8e48, 0x8e49, 0x8e4a, 0x8e4b, 0x8e4c, 0x8e4d, 0x8e4e, /*0xa8-0xaf*/ 0x8e4f, 0x8e50, 0x8e51, 0x8e52, 0x8e53, 0x8e54, 0x8e55, 0xe1da, /*0xb0-0xb7*/ 0x8e56, 0x8e57, 0x8e58, 0x8e59, 0x8e5a, 0x8e5b, 0x8e5c, 0x8e5d, /*0xb8-0xbf*/ 0x8e5e, 0x8e5f, 0x8e60, 0x8e61, 0x8e62, 0xe1db, 0x8e63, 0x8e64, /*0xc0-0xc7*/ 0x8e65, 0x8e66, 0x8e67, 0x8e68, 0x8e69, 0xcea1, 0x8e6a, 0x8e6b, /*0xc8-0xcf*/ 0x8e6c, 0x8e6d, 0x8e6e, 0x8e6f, 0x8e70, 0x8e71, 0x8e72, 0x8e73, /*0xd0-0xd7*/ 0x8e74, 0x8e75, 0x8e76, 0xe7dd, 0x8e77, 0xb4a8, 0xd6dd, 0x8e78, /*0xd8-0xdf*/ 0x8e79, 0xd1b2, 0xb3b2, 0x8e7a, 0x8e7b, 0xb9a4, 0xd7f3, 0xc7c9, /*0xe0-0xe7*/ 0xbede, 0xb9ae, 0x8e7c, 0xced7, 0x8e7d, 0x8e7e, 0xb2ee, 0xdbcf, /*0xe8-0xef*/ 0x8e80, 0xbcba, 0xd2d1, 0xcbc8, 0xb0cd, 0x8e81, 0x8e82, 0xcfef, /*0xf0-0xf7*/ 0x8e83, 0x8e84, 0x8e85, 0x8e86, 0x8e87, 0xd9e3, 0xbded, 0x8e88, /*0xf8-0xff*/ /* 0x5e00 */ 0x8e89, 0xb1d2, 0xcad0, 0xb2bc, 0x8e8a, 0xcba7, 0xb7ab, 0x8e8b, /*0x00-0x07*/ 0xcaa6, 0x8e8c, 0x8e8d, 0x8e8e, 0xcfa3, 0x8e8f, 0x8e90, 0xe0f8, /*0x08-0x0f*/ 0xd5ca, 0xe0fb, 0x8e91, 0x8e92, 0xe0fa, 0xc5c1, 0xccfb, 0x8e93, /*0x10-0x17*/ 0xc1b1, 0xe0f9, 0xd6e3, 0xb2af, 0xd6c4, 0xb5db, 0x8e94, 0x8e95, /*0x18-0x1f*/ 0x8e96, 0x8e97, 0x8e98, 0x8e99, 0x8e9a, 0x8e9b, 0xb4f8, 0xd6a1, /*0x20-0x27*/ 0x8e9c, 0x8e9d, 0x8e9e, 0x8e9f, 0x8ea0, 0xcfaf, 0xb0ef, 0x8ea1, /*0x28-0x2f*/ 0x8ea2, 0xe0fc, 0x8ea3, 0x8ea4, 0x8ea5, 0x8ea6, 0x8ea7, 0xe1a1, /*0x30-0x37*/ 0xb3a3, 0x8ea8, 0x8ea9, 0xe0fd, 0xe0fe, 0xc3b1, 0x8eaa, 0x8eab, /*0x38-0x3f*/ 0x8eac, 0x8ead, 0xc3dd, 0x8eae, 0xe1a2, 0xb7f9, 0x8eaf, 0x8eb0, /*0x40-0x47*/ 0x8eb1, 0x8eb2, 0x8eb3, 0x8eb4, 0xbbcf, 0x8eb5, 0x8eb6, 0x8eb7, /*0x48-0x4f*/ 0x8eb8, 0x8eb9, 0x8eba, 0x8ebb, 0xe1a3, 0xc4bb, 0x8ebc, 0x8ebd, /*0x50-0x57*/ 0x8ebe, 0x8ebf, 0x8ec0, 0xe1a4, 0x8ec1, 0x8ec2, 0xe1a5, 0x8ec3, /*0x58-0x5f*/ 0x8ec4, 0xe1a6, 0xb4b1, 0x8ec5, 0x8ec6, 0x8ec7, 0x8ec8, 0x8ec9, /*0x60-0x67*/ 0x8eca, 0x8ecb, 0x8ecc, 0x8ecd, 0x8ece, 0x8ecf, 0x8ed0, 0x8ed1, /*0x68-0x6f*/ 0x8ed2, 0x8ed3, 0xb8c9, 0xc6bd, 0xc4ea, 0x8ed4, 0xb2a2, 0x8ed5, /*0x70-0x77*/ 0xd0d2, 0x8ed6, 0xe7db, 0xbbc3, 0xd3d7, 0xd3c4, 0x8ed7, 0xb9e3, /*0x78-0x7f*/ 0xe2cf, 0x8ed8, 0x8ed9, 0x8eda, 0xd7af, 0x8edb, 0xc7ec, 0xb1d3, /*0x80-0x87*/ 0x8edc, 0x8edd, 0xb4b2, 0xe2d1, 0x8ede, 0x8edf, 0x8ee0, 0xd0f2, /*0x88-0x8f*/ 0xc2ae, 0xe2d0, 0x8ee1, 0xbfe2, 0xd3a6, 0xb5d7, 0xe2d2, 0xb5ea, /*0x90-0x97*/ 0x8ee2, 0xc3ed, 0xb8fd, 0x8ee3, 0xb8ae, 0x8ee4, 0xc5d3, 0xb7cf, /*0x98-0x9f*/ 0xe2d4, 0x8ee5, 0x8ee6, 0x8ee7, 0x8ee8, 0xe2d3, 0xb6c8, 0xd7f9, /*0xa0-0xa7*/ 0x8ee9, 0x8eea, 0x8eeb, 0x8eec, 0x8eed, 0xcda5, 0x8eee, 0x8eef, /*0xa8-0xaf*/ 0x8ef0, 0x8ef1, 0x8ef2, 0xe2d8, 0x8ef3, 0xe2d6, 0xcafc, 0xbfb5, /*0xb0-0xb7*/ 0xd3b9, 0xe2d5, 0x8ef4, 0x8ef5, 0x8ef6, 0x8ef7, 0xe2d7, 0x8ef8, /*0xb8-0xbf*/ 0x8ef9, 0x8efa, 0x8efb, 0x8efc, 0x8efd, 0x8efe, 0x8f40, 0x8f41, /*0xc0-0xc7*/ 0x8f42, 0xc1ae, 0xc0c8, 0x8f43, 0x8f44, 0x8f45, 0x8f46, 0x8f47, /*0xc8-0xcf*/ 0x8f48, 0xe2db, 0xe2da, 0xc0aa, 0x8f49, 0x8f4a, 0xc1ce, 0x8f4b, /*0xd0-0xd7*/ 0x8f4c, 0x8f4d, 0x8f4e, 0xe2dc, 0x8f4f, 0x8f50, 0x8f51, 0x8f52, /*0xd8-0xdf*/ 0x8f53, 0x8f54, 0x8f55, 0x8f56, 0x8f57, 0x8f58, 0x8f59, 0x8f5a, /*0xe0-0xe7*/ 0xe2dd, 0x8f5b, 0xe2de, 0x8f5c, 0x8f5d, 0x8f5e, 0x8f5f, 0x8f60, /*0xe8-0xef*/ 0x8f61, 0x8f62, 0x8f63, 0x8f64, 0xdbc8, 0x8f65, 0xd1d3, 0xcda2, /*0xf0-0xf7*/ 0x8f66, 0x8f67, 0xbda8, 0x8f68, 0x8f69, 0x8f6a, 0xdec3, 0xd8a5, /*0xf8-0xff*/ /* 0x5f00 */ 0xbfaa, 0xdbcd, 0xd2ec, 0xc6fa, 0xc5aa, 0x8f6b, 0x8f6c, 0x8f6d, /*0x00-0x07*/ 0xdec4, 0x8f6e, 0xb1d7, 0xdfae, 0x8f6f, 0x8f70, 0x8f71, 0xcabd, /*0x08-0x0f*/ 0x8f72, 0xdfb1, 0x8f73, 0xb9ad, 0x8f74, 0xd2fd, 0x8f75, 0xb8a5, /*0x10-0x17*/ 0xbaeb, 0x8f76, 0x8f77, 0xb3da, 0x8f78, 0x8f79, 0x8f7a, 0xb5dc, /*0x18-0x1f*/ 0xd5c5, 0x8f7b, 0x8f7c, 0x8f7d, 0x8f7e, 0xc3d6, 0xcfd2, 0xbba1, /*0x20-0x27*/ 0x8f80, 0xe5f3, 0xe5f2, 0x8f81, 0x8f82, 0xe5f4, 0x8f83, 0xcde4, /*0x28-0x2f*/ 0x8f84, 0xc8f5, 0x8f85, 0x8f86, 0x8f87, 0x8f88, 0x8f89, 0x8f8a, /*0x30-0x37*/ 0x8f8b, 0xb5af, 0xc7bf, 0x8f8c, 0xe5f6, 0x8f8d, 0x8f8e, 0x8f8f, /*0x38-0x3f*/ 0xecb0, 0x8f90, 0x8f91, 0x8f92, 0x8f93, 0x8f94, 0x8f95, 0x8f96, /*0x40-0x47*/ 0x8f97, 0x8f98, 0x8f99, 0x8f9a, 0x8f9b, 0x8f9c, 0x8f9d, 0x8f9e, /*0x48-0x4f*/ 0xe5e6, 0x8f9f, 0xb9e9, 0xb5b1, 0x8fa0, 0xc2bc, 0xe5e8, 0xe5e7, /*0x50-0x57*/ 0xe5e9, 0x8fa1, 0x8fa2, 0x8fa3, 0x8fa4, 0xd2cd, 0x8fa5, 0x8fa6, /*0x58-0x5f*/ 0x8fa7, 0xe1ea, 0xd0ce, 0x8fa8, 0xcdae, 0x8fa9, 0xd1e5, 0x8faa, /*0x60-0x67*/ 0x8fab, 0xb2ca, 0xb1eb, 0x8fac, 0xb1f2, 0xc5ed, 0x8fad, 0x8fae, /*0x68-0x6f*/ 0xd5c3, 0xd3b0, 0x8faf, 0xe1dc, 0x8fb0, 0x8fb1, 0x8fb2, 0xe1dd, /*0x70-0x77*/ 0x8fb3, 0xd2db, 0x8fb4, 0xb3b9, 0xb1cb, 0x8fb5, 0x8fb6, 0x8fb7, /*0x78-0x7f*/ 0xcdf9, 0xd5f7, 0xe1de, 0x8fb8, 0xbeb6, 0xb4fd, 0x8fb9, 0xe1df, /*0x80-0x87*/ 0xbadc, 0xe1e0, 0xbbb2, 0xc2c9, 0xe1e1, 0x8fba, 0x8fbb, 0x8fbc, /*0x88-0x8f*/ 0xd0ec, 0x8fbd, 0xcdbd, 0x8fbe, 0x8fbf, 0xe1e2, 0x8fc0, 0xb5c3, /*0x90-0x97*/ 0xc5c7, 0xe1e3, 0x8fc1, 0x8fc2, 0xe1e4, 0x8fc3, 0x8fc4, 0x8fc5, /*0x98-0x9f*/ 0x8fc6, 0xd3f9, 0x8fc7, 0x8fc8, 0x8fc9, 0x8fca, 0x8fcb, 0x8fcc, /*0xa0-0xa7*/ 0xe1e5, 0x8fcd, 0xd1ad, 0x8fce, 0x8fcf, 0xe1e6, 0xcea2, 0x8fd0, /*0xa8-0xaf*/ 0x8fd1, 0x8fd2, 0x8fd3, 0x8fd4, 0x8fd5, 0xe1e7, 0x8fd6, 0xb5c2, /*0xb0-0xb7*/ 0x8fd7, 0x8fd8, 0x8fd9, 0x8fda, 0xe1e8, 0xbbd5, 0x8fdb, 0x8fdc, /*0xb8-0xbf*/ 0x8fdd, 0x8fde, 0x8fdf, 0xd0c4, 0xe2e0, 0xb1d8, 0xd2e4, 0x8fe0, /*0xc0-0xc7*/ 0x8fe1, 0xe2e1, 0x8fe2, 0x8fe3, 0xbcc9, 0xc8cc, 0x8fe4, 0xe2e3, /*0xc8-0xcf*/ 0xecfe, 0xecfd, 0xdfaf, 0x8fe5, 0x8fe6, 0x8fe7, 0xe2e2, 0xd6be, /*0xd0-0xd7*/ 0xcdfc, 0xc3a6, 0x8fe8, 0x8fe9, 0x8fea, 0xe3c3, 0x8feb, 0x8fec, /*0xd8-0xdf*/ 0xd6d2, 0xe2e7, 0x8fed, 0x8fee, 0xe2e8, 0x8fef, 0x8ff0, 0xd3c7, /*0xe0-0xe7*/ 0x8ff1, 0x8ff2, 0xe2ec, 0xbfec, 0x8ff3, 0xe2ed, 0xe2e5, 0x8ff4, /*0xe8-0xef*/ 0x8ff5, 0xb3c0, 0x8ff6, 0x8ff7, 0x8ff8, 0xc4ee, 0x8ff9, 0x8ffa, /*0xf0-0xf7*/ 0xe2ee, 0x8ffb, 0x8ffc, 0xd0c3, 0x8ffd, 0xbaf6, 0xe2e9, 0xb7de, /*0xf8-0xff*/ /* 0x6000 */ 0xbbb3, 0xccac, 0xcbcb, 0xe2e4, 0xe2e6, 0xe2ea, 0xe2eb, 0x8ffe, /*0x00-0x07*/ 0x9040, 0x9041, 0xe2f7, 0x9042, 0x9043, 0xe2f4, 0xd4f5, 0xe2f3, /*0x08-0x0f*/ 0x9044, 0x9045, 0xc5ad, 0x9046, 0xd5fa, 0xc5c2, 0xb2c0, 0x9047, /*0x10-0x17*/ 0x9048, 0xe2ef, 0x9049, 0xe2f2, 0xc1af, 0xcbbc, 0x904a, 0x904b, /*0x18-0x1f*/ 0xb5a1, 0xe2f9, 0x904c, 0x904d, 0x904e, 0xbcb1, 0xe2f1, 0xd0d4, /*0x20-0x27*/ 0xd4b9, 0xe2f5, 0xb9d6, 0xe2f6, 0x904f, 0x9050, 0x9051, 0xc7d3, /*0x28-0x2f*/ 0x9052, 0x9053, 0x9054, 0x9055, 0x9056, 0xe2f0, 0x9057, 0x9058, /*0x30-0x37*/ 0x9059, 0x905a, 0x905b, 0xd7dc, 0xeda1, 0x905c, 0x905d, 0xe2f8, /*0x38-0x3f*/ 0x905e, 0xeda5, 0xe2fe, 0xcad1, 0x905f, 0x9060, 0x9061, 0x9062, /*0x40-0x47*/ 0x9063, 0x9064, 0x9065, 0xc1b5, 0x9066, 0xbbd0, 0x9067, 0x9068, /*0x48-0x4f*/ 0xbfd6, 0x9069, 0xbae3, 0x906a, 0x906b, 0xcba1, 0x906c, 0x906d, /*0x50-0x57*/ 0x906e, 0xeda6, 0xeda3, 0x906f, 0x9070, 0xeda2, 0x9071, 0x9072, /*0x58-0x5f*/ 0x9073, 0x9074, 0xbbd6, 0xeda7, 0xd0f4, 0x9075, 0x9076, 0xeda4, /*0x60-0x67*/ 0xbade, 0xb6f7, 0xe3a1, 0xb6b2, 0xccf1, 0xb9a7, 0x9077, 0xcfa2, /*0x68-0x6f*/ 0xc7a1, 0x9078, 0x9079, 0xbfd2, 0x907a, 0x907b, 0xb6f1, 0x907c, /*0x70-0x77*/ 0xe2fa, 0xe2fb, 0xe2fd, 0xe2fc, 0xc4d5, 0xe3a2, 0x907d, 0xd3c1, /*0x78-0x7f*/ 0x907e, 0x9080, 0x9081, 0xe3a7, 0xc7c4, 0x9082, 0x9083, 0x9084, /*0x80-0x87*/ 0x9085, 0xcfa4, 0x9086, 0x9087, 0xe3a9, 0xbab7, 0x9088, 0x9089, /*0x88-0x8f*/ 0x908a, 0x908b, 0xe3a8, 0x908c, 0xbbda, 0x908d, 0xe3a3, 0x908e, /*0x90-0x97*/ 0x908f, 0x9090, 0xe3a4, 0xe3aa, 0x9091, 0xe3a6, 0x9092, 0xcef2, /*0x98-0x9f*/ 0xd3c6, 0x9093, 0x9094, 0xbbbc, 0x9095, 0x9096, 0xd4c3, 0x9097, /*0xa0-0xa7*/ 0xc4fa, 0x9098, 0x9099, 0xeda8, 0xd0fc, 0xe3a5, 0x909a, 0xc3f5, /*0xa8-0xaf*/ 0x909b, 0xe3ad, 0xb1af, 0x909c, 0xe3b2, 0x909d, 0x909e, 0x909f, /*0xb0-0xb7*/ 0xbcc2, 0x90a0, 0x90a1, 0xe3ac, 0xb5bf, 0x90a2, 0x90a3, 0x90a4, /*0xb8-0xbf*/ 0x90a5, 0x90a6, 0x90a7, 0x90a8, 0x90a9, 0xc7e9, 0xe3b0, 0x90aa, /*0xc0-0xc7*/ 0x90ab, 0x90ac, 0xbeaa, 0xcdef, 0x90ad, 0x90ae, 0x90af, 0x90b0, /*0xc8-0xcf*/ 0x90b1, 0xbbf3, 0x90b2, 0x90b3, 0x90b4, 0xcce8, 0x90b5, 0x90b6, /*0xd0-0xd7*/ 0xe3af, 0x90b7, 0xe3b1, 0x90b8, 0xcfa7, 0xe3ae, 0x90b9, 0xcea9, /*0xd8-0xdf*/ 0xbbdd, 0x90ba, 0x90bb, 0x90bc, 0x90bd, 0x90be, 0xb5eb, 0xbee5, /*0xe0-0xe7*/ 0xb2d2, 0xb3cd, 0x90bf, 0xb1b9, 0xe3ab, 0xb2d1, 0xb5ac, 0xb9df, /*0xe8-0xef*/ 0xb6e8, 0x90c0, 0x90c1, 0xcfeb, 0xe3b7, 0x90c2, 0xbbcc, 0x90c3, /*0xf0-0xf7*/ 0x90c4, 0xc8c7, 0xd0ca, 0x90c5, 0x90c6, 0x90c7, 0x90c8, 0x90c9, /*0xf8-0xff*/ /* 0x6100 */ 0xe3b8, 0xb3ee, 0x90ca, 0x90cb, 0x90cc, 0x90cd, 0xeda9, 0x90ce, /*0x00-0x07*/ 0xd3fa, 0xd3e4, 0x90cf, 0x90d0, 0x90d1, 0xedaa, 0xe3b9, 0xd2e2, /*0x08-0x0f*/ 0x90d2, 0x90d3, 0x90d4, 0x90d5, 0x90d6, 0xe3b5, 0x90d7, 0x90d8, /*0x10-0x17*/ 0x90d9, 0x90da, 0xd3de, 0x90db, 0x90dc, 0x90dd, 0x90de, 0xb8d0, /*0x18-0x1f*/ 0xe3b3, 0x90df, 0x90e0, 0xe3b6, 0xb7df, 0x90e1, 0xe3b4, 0xc0a2, /*0x20-0x27*/ 0x90e2, 0x90e3, 0x90e4, 0xe3ba, 0x90e5, 0x90e6, 0x90e7, 0x90e8, /*0x28-0x2f*/ 0x90e9, 0x90ea, 0x90eb, 0x90ec, 0x90ed, 0x90ee, 0x90ef, 0x90f0, /*0x30-0x37*/ 0x90f1, 0x90f2, 0x90f3, 0x90f4, 0x90f5, 0x90f6, 0x90f7, 0xd4b8, /*0x38-0x3f*/ 0x90f8, 0x90f9, 0x90fa, 0x90fb, 0x90fc, 0x90fd, 0x90fe, 0x9140, /*0x40-0x47*/ 0xb4c8, 0x9141, 0xe3bb, 0x9142, 0xbbc5, 0x9143, 0xc9f7, 0x9144, /*0x48-0x4f*/ 0x9145, 0xc9e5, 0x9146, 0x9147, 0x9148, 0xc4bd, 0x9149, 0x914a, /*0x50-0x57*/ 0x914b, 0x914c, 0x914d, 0x914e, 0x914f, 0xedab, 0x9150, 0x9151, /*0x58-0x5f*/ 0x9152, 0x9153, 0xc2fd, 0x9154, 0x9155, 0x9156, 0x9157, 0xbbdb, /*0x60-0x67*/ 0xbfae, 0x9158, 0x9159, 0x915a, 0x915b, 0x915c, 0x915d, 0x915e, /*0x68-0x6f*/ 0xcebf, 0x915f, 0x9160, 0x9161, 0x9162, 0xe3bc, 0x9163, 0xbfb6, /*0x70-0x77*/ 0x9164, 0x9165, 0x9166, 0x9167, 0x9168, 0x9169, 0x916a, 0x916b, /*0x78-0x7f*/ 0x916c, 0x916d, 0x916e, 0x916f, 0x9170, 0x9171, 0x9172, 0x9173, /*0x80-0x87*/ 0x9174, 0x9175, 0x9176, 0xb1ef, 0x9177, 0x9178, 0xd4f7, 0x9179, /*0x88-0x8f*/ 0x917a, 0x917b, 0x917c, 0x917d, 0xe3be, 0x917e, 0x9180, 0x9181, /*0x90-0x97*/ 0x9182, 0x9183, 0x9184, 0x9185, 0x9186, 0xedad, 0x9187, 0x9188, /*0x98-0x9f*/ 0x9189, 0x918a, 0x918b, 0x918c, 0x918d, 0x918e, 0x918f, 0xe3bf, /*0xa0-0xa7*/ 0xbaa9, 0xedac, 0x9190, 0x9191, 0xe3bd, 0x9192, 0x9193, 0x9194, /*0xa8-0xaf*/ 0x9195, 0x9196, 0x9197, 0x9198, 0x9199, 0x919a, 0x919b, 0xe3c0, /*0xb0-0xb7*/ 0x919c, 0x919d, 0x919e, 0x919f, 0x91a0, 0x91a1, 0xbab6, 0x91a2, /*0xb8-0xbf*/ 0x91a3, 0x91a4, 0xb6ae, 0x91a5, 0x91a6, 0x91a7, 0x91a8, 0x91a9, /*0xc0-0xc7*/ 0xd0b8, 0x91aa, 0xb0c3, 0xedae, 0x91ab, 0x91ac, 0x91ad, 0x91ae, /*0xc8-0xcf*/ 0x91af, 0xedaf, 0xc0c1, 0x91b0, 0xe3c1, 0x91b1, 0x91b2, 0x91b3, /*0xd0-0xd7*/ 0x91b4, 0x91b5, 0x91b6, 0x91b7, 0x91b8, 0x91b9, 0x91ba, 0x91bb, /*0xd8-0xdf*/ 0x91bc, 0x91bd, 0x91be, 0x91bf, 0x91c0, 0x91c1, 0xc5b3, 0x91c2, /*0xe0-0xe7*/ 0x91c3, 0x91c4, 0x91c5, 0x91c6, 0x91c7, 0x91c8, 0x91c9, 0x91ca, /*0xe8-0xef*/ 0x91cb, 0x91cc, 0x91cd, 0x91ce, 0x91cf, 0xe3c2, 0x91d0, 0x91d1, /*0xf0-0xf7*/ 0x91d2, 0x91d3, 0x91d4, 0x91d5, 0x91d6, 0x91d7, 0x91d8, 0xdcb2, /*0xf8-0xff*/ /* 0x6200 */ 0x91d9, 0x91da, 0x91db, 0x91dc, 0x91dd, 0x91de, 0xedb0, 0x91df, /*0x00-0x07*/ 0xb8ea, 0x91e0, 0xceec, 0xeaa7, 0xd0e7, 0xcaf9, 0xc8d6, 0xcfb7, /*0x08-0x0f*/ 0xb3c9, 0xced2, 0xbde4, 0x91e1, 0x91e2, 0xe3de, 0xbbf2, 0xeaa8, /*0x10-0x17*/ 0xd5bd, 0x91e3, 0xc6dd, 0xeaa9, 0x91e4, 0x91e5, 0x91e6, 0xeaaa, /*0x18-0x1f*/ 0x91e7, 0xeaac, 0xeaab, 0x91e8, 0xeaae, 0xeaad, 0x91e9, 0x91ea, /*0x20-0x27*/ 0x91eb, 0x91ec, 0xbdd8, 0x91ed, 0xeaaf, 0x91ee, 0xc2be, 0x91ef, /*0x28-0x2f*/ 0x91f0, 0x91f1, 0x91f2, 0xb4c1, 0xb4f7, 0x91f3, 0x91f4, 0xbba7, /*0x30-0x37*/ 0x91f5, 0x91f6, 0x91f7, 0x91f8, 0x91f9, 0xece6, 0xece5, 0xb7bf, /*0x38-0x3f*/ 0xcbf9, 0xb1e2, 0x91fa, 0xece7, 0x91fb, 0x91fc, 0x91fd, 0xc9c8, /*0x40-0x47*/ 0xece8, 0xece9, 0x91fe, 0xcad6, 0xded0, 0xb2c5, 0xd4fa, 0x9240, /*0x48-0x4f*/ 0x9241, 0xc6cb, 0xb0c7, 0xb4f2, 0xc8d3, 0x9242, 0x9243, 0x9244, /*0x50-0x57*/ 0xcdd0, 0x9245, 0x9246, 0xbfb8, 0x9247, 0x9248, 0x9249, 0x924a, /*0x58-0x5f*/ 0x924b, 0x924c, 0x924d, 0xbfdb, 0x924e, 0x924f, 0xc7a4, 0xd6b4, /*0x60-0x67*/ 0x9250, 0xc0a9, 0xded1, 0xc9a8, 0xd1ef, 0xc5a4, 0xb0e7, 0xb3b6, /*0x68-0x6f*/ 0xc8c5, 0x9251, 0x9252, 0xb0e2, 0x9253, 0x9254, 0xb7f6, 0x9255, /*0x70-0x77*/ 0x9256, 0xc5fa, 0x9257, 0x9258, 0xb6f3, 0x9259, 0xd5d2, 0xb3d0, /*0x78-0x7f*/ 0xbcbc, 0x925a, 0x925b, 0x925c, 0xb3ad, 0x925d, 0x925e, 0x925f, /*0x80-0x87*/ 0x9260, 0xbef1, 0xb0d1, 0x9261, 0x9262, 0x9263, 0x9264, 0x9265, /*0x88-0x8f*/ 0x9266, 0xd2d6, 0xcae3, 0xd7a5, 0x9267, 0xcdb6, 0xb6b6, 0xbfb9, /*0x90-0x97*/ 0xd5db, 0x9268, 0xb8a7, 0xc5d7, 0x9269, 0x926a, 0x926b, 0xded2, /*0x98-0x9f*/ 0xbfd9, 0xc2d5, 0xc7c0, 0x926c, 0xbba4, 0xb1a8, 0x926d, 0x926e, /*0xa0-0xa7*/ 0xc5ea, 0x926f, 0x9270, 0xc5fb, 0xcca7, 0x9271, 0x9272, 0x9273, /*0xa8-0xaf*/ 0x9274, 0xb1a7, 0x9275, 0x9276, 0x9277, 0xb5d6, 0x9278, 0x9279, /*0xb0-0xb7*/ 0x927a, 0xc4a8, 0x927b, 0xded3, 0xd1ba, 0xb3e9, 0x927c, 0xc3f2, /*0xb8-0xbf*/ 0x927d, 0x927e, 0xb7f7, 0x9280, 0xd6f4, 0xb5a3, 0xb2f0, 0xc4b4, /*0xc0-0xc7*/ 0xc4e9, 0xc0ad, 0xded4, 0x9281, 0xb0e8, 0xc5c4, 0xc1e0, 0x9282, /*0xc8-0xcf*/ 0xb9d5, 0x9283, 0xbedc, 0xcdd8, 0xb0ce, 0x9284, 0xcdcf, 0xded6, /*0xd0-0xd7*/ 0xbed0, 0xd7be, 0xded5, 0xd5d0, 0xb0dd, 0x9285, 0x9286, 0xc4e2, /*0xd8-0xdf*/ 0x9287, 0x9288, 0xc2a3, 0xbcf0, 0x9289, 0xd3b5, 0xc0b9, 0xc5a1, /*0xe0-0xe7*/ 0xb2a6, 0xd4f1, 0x928a, 0x928b, 0xc0a8, 0xcac3, 0xded7, 0xd5fc, /*0xe8-0xef*/ 0x928c, 0xb9b0, 0x928d, 0xc8ad, 0xcba9, 0x928e, 0xded9, 0xbfbd, /*0xf0-0xf7*/ 0x928f, 0x9290, 0x9291, 0x9292, 0xc6b4, 0xd7a7, 0xcab0, 0xc4c3, /*0xf8-0xff*/ /* 0x6300 */ 0x9293, 0xb3d6, 0xb9d2, 0x9294, 0x9295, 0x9296, 0x9297, 0xd6b8, /*0x00-0x07*/ 0xeafc, 0xb0b4, 0x9298, 0x9299, 0x929a, 0x929b, 0xbfe6, 0x929c, /*0x08-0x0f*/ 0x929d, 0xccf4, 0x929e, 0x929f, 0x92a0, 0x92a1, 0xcdda, 0x92a2, /*0x10-0x17*/ 0x92a3, 0x92a4, 0xd6bf, 0xc2ce, 0x92a5, 0xcece, 0xcca2, 0xd0ae, /*0x18-0x1f*/ 0xc4d3, 0xb5b2, 0xded8, 0xd5f5, 0xbcb7, 0xbbd3, 0x92a6, 0x92a7, /*0x20-0x27*/ 0xb0a4, 0x92a8, 0xc5b2, 0xb4ec, 0x92a9, 0x92aa, 0x92ab, 0xd5f1, /*0x28-0x2f*/ 0x92ac, 0x92ad, 0xeafd, 0x92ae, 0x92af, 0x92b0, 0x92b1, 0x92b2, /*0x30-0x37*/ 0x92b3, 0xdeda, 0xcda6, 0x92b4, 0x92b5, 0xcdec, 0x92b6, 0x92b7, /*0x38-0x3f*/ 0x92b8, 0x92b9, 0xcee6, 0xdedc, 0x92ba, 0xcdb1, 0xc0a6, 0x92bb, /*0x40-0x47*/ 0x92bc, 0xd7bd, 0x92bd, 0xdedb, 0xb0c6, 0xbab4, 0xc9d3, 0xc4f3, /*0x48-0x4f*/ 0xbee8, 0x92be, 0x92bf, 0x92c0, 0x92c1, 0xb2b6, 0x92c2, 0x92c3, /*0x50-0x57*/ 0x92c4, 0x92c5, 0x92c6, 0x92c7, 0x92c8, 0x92c9, 0xc0cc, 0xcbf0, /*0x58-0x5f*/ 0x92ca, 0xbcf1, 0xbbbb, 0xb5b7, 0x92cb, 0x92cc, 0x92cd, 0xc5f5, /*0x60-0x67*/ 0x92ce, 0xdee6, 0x92cf, 0x92d0, 0x92d1, 0xdee3, 0xbedd, 0x92d2, /*0x68-0x6f*/ 0x92d3, 0xdedf, 0x92d4, 0x92d5, 0x92d6, 0x92d7, 0xb4b7, 0xbddd, /*0x70-0x77*/ 0x92d8, 0x92d9, 0xdee0, 0xc4ed, 0x92da, 0x92db, 0x92dc, 0x92dd, /*0x78-0x7f*/ 0xcfc6, 0x92de, 0xb5e0, 0x92df, 0x92e0, 0x92e1, 0x92e2, 0xb6de, /*0x80-0x87*/ 0xcada, 0xb5f4, 0xdee5, 0x92e3, 0xd5c6, 0x92e4, 0xdee1, 0xcccd, /*0x88-0x8f*/ 0xc6fe, 0x92e5, 0xc5c5, 0x92e6, 0x92e7, 0x92e8, 0xd2b4, 0x92e9, /*0x90-0x97*/ 0xbef2, 0x92ea, 0x92eb, 0x92ec, 0x92ed, 0x92ee, 0x92ef, 0x92f0, /*0x98-0x9f*/ 0xc2d3, 0x92f1, 0xccbd, 0xb3b8, 0x92f2, 0xbdd3, 0x92f3, 0xbfd8, /*0xa0-0xa7*/ 0xcdc6, 0xd1da, 0xb4eb, 0x92f4, 0xdee4, 0xdedd, 0xdee7, 0x92f5, /*0xa8-0xaf*/ 0xeafe, 0x92f6, 0x92f7, 0xc2b0, 0xdee2, 0x92f8, 0x92f9, 0xd6c0, /*0xb0-0xb7*/ 0xb5a7, 0x92fa, 0xb2f4, 0x92fb, 0xdee8, 0x92fc, 0xdef2, 0x92fd, /*0xb8-0xbf*/ 0x92fe, 0x9340, 0x9341, 0x9342, 0xdeed, 0x9343, 0xdef1, 0x9344, /*0xc0-0xc7*/ 0x9345, 0xc8e0, 0x9346, 0x9347, 0x9348, 0xd7e1, 0xdeef, 0xc3e8, /*0xc8-0xcf*/ 0xcce1, 0x9349, 0xb2e5, 0x934a, 0x934b, 0x934c, 0xd2be, 0x934d, /*0xd0-0xd7*/ 0x934e, 0x934f, 0x9350, 0x9351, 0x9352, 0x9353, 0xdeee, 0x9354, /*0xd8-0xdf*/ 0xdeeb, 0xced5, 0x9355, 0xb4a7, 0x9356, 0x9357, 0x9358, 0x9359, /*0xe0-0xe7*/ 0x935a, 0xbfab, 0xbebe, 0x935b, 0x935c, 0xbdd2, 0x935d, 0x935e, /*0xe8-0xef*/ 0x935f, 0x9360, 0xdee9, 0x9361, 0xd4ae, 0x9362, 0xdede, 0x9363, /*0xf0-0xf7*/ 0xdeea, 0x9364, 0x9365, 0x9366, 0x9367, 0xc0bf, 0x9368, 0xdeec, /*0xf8-0xff*/ /* 0x6400 */ 0xb2f3, 0xb8e9, 0xc2a7, 0x9369, 0x936a, 0xbdc1, 0x936b, 0x936c, /*0x00-0x07*/ 0x936d, 0x936e, 0x936f, 0xdef5, 0xdef8, 0x9370, 0x9371, 0xb2ab, /*0x08-0x0f*/ 0xb4a4, 0x9372, 0x9373, 0xb4ea, 0xc9a6, 0x9374, 0x9375, 0x9376, /*0x10-0x17*/ 0x9377, 0x9378, 0x9379, 0xdef6, 0xcbd1, 0x937a, 0xb8e3, 0x937b, /*0x18-0x1f*/ 0xdef7, 0xdefa, 0x937c, 0x937d, 0x937e, 0x9380, 0xdef9, 0x9381, /*0x20-0x27*/ 0x9382, 0x9383, 0xccc2, 0x9384, 0xb0e1, 0xb4ee, 0x9385, 0x9386, /*0x28-0x2f*/ 0x9387, 0x9388, 0x9389, 0x938a, 0xe5ba, 0x938b, 0x938c, 0x938d, /*0x30-0x37*/ 0x938e, 0x938f, 0xd0af, 0x9390, 0x9391, 0xb2eb, 0x9392, 0xeba1, /*0x38-0x3f*/ 0x9393, 0xdef4, 0x9394, 0x9395, 0xc9e3, 0xdef3, 0xb0da, 0xd2a1, /*0x40-0x47*/ 0xb1f7, 0x9396, 0xccaf, 0x9397, 0x9398, 0x9399, 0x939a, 0x939b, /*0x48-0x4f*/ 0x939c, 0x939d, 0xdef0, 0x939e, 0xcba4, 0x939f, 0x93a0, 0x93a1, /*0x50-0x57*/ 0xd5aa, 0x93a2, 0x93a3, 0x93a4, 0x93a5, 0x93a6, 0xdefb, 0x93a7, /*0x58-0x5f*/ 0x93a8, 0x93a9, 0x93aa, 0x93ab, 0x93ac, 0x93ad, 0x93ae, 0xb4dd, /*0x60-0x67*/ 0x93af, 0xc4a6, 0x93b0, 0x93b1, 0x93b2, 0xdefd, 0x93b3, 0x93b4, /*0x68-0x6f*/ 0x93b5, 0x93b6, 0x93b7, 0x93b8, 0x93b9, 0x93ba, 0x93bb, 0x93bc, /*0x70-0x77*/ 0xc3fe, 0xc4a1, 0xdfa1, 0x93bd, 0x93be, 0x93bf, 0x93c0, 0x93c1, /*0x78-0x7f*/ 0x93c2, 0x93c3, 0xc1cc, 0x93c4, 0xdefc, 0xbeef, 0x93c5, 0xc6b2, /*0x80-0x87*/ 0x93c6, 0x93c7, 0x93c8, 0x93c9, 0x93ca, 0x93cb, 0x93cc, 0x93cd, /*0x88-0x8f*/ 0x93ce, 0xb3c5, 0xc8f6, 0x93cf, 0x93d0, 0xcbba, 0xdefe, 0x93d1, /*0x90-0x97*/ 0x93d2, 0xdfa4, 0x93d3, 0x93d4, 0x93d5, 0x93d6, 0xd7b2, 0x93d7, /*0x98-0x9f*/ 0x93d8, 0x93d9, 0x93da, 0x93db, 0xb3b7, 0x93dc, 0x93dd, 0x93de, /*0xa0-0xa7*/ 0x93df, 0xc1c3, 0x93e0, 0x93e1, 0xc7cb, 0xb2a5, 0xb4e9, 0x93e2, /*0xa8-0xaf*/ 0xd7ab, 0x93e3, 0x93e4, 0x93e5, 0x93e6, 0xc4ec, 0x93e7, 0xdfa2, /*0xb0-0xb7*/ 0xdfa3, 0x93e8, 0xdfa5, 0x93e9, 0xbab3, 0x93ea, 0x93eb, 0x93ec, /*0xb8-0xbf*/ 0xdfa6, 0x93ed, 0xc0de, 0x93ee, 0x93ef, 0xc9c3, 0x93f0, 0x93f1, /*0xc0-0xc7*/ 0x93f2, 0x93f3, 0x93f4, 0x93f5, 0x93f6, 0xb2d9, 0xc7e6, 0x93f7, /*0xc8-0xcf*/ 0xdfa7, 0x93f8, 0xc7dc, 0x93f9, 0x93fa, 0x93fb, 0x93fc, 0xdfa8, /*0xd0-0xd7*/ 0xeba2, 0x93fd, 0x93fe, 0x9440, 0x9441, 0x9442, 0xcbd3, 0x9443, /*0xd8-0xdf*/ 0x9444, 0x9445, 0xdfaa, 0x9446, 0xdfa9, 0x9447, 0xb2c1, 0x9448, /*0xe0-0xe7*/ 0x9449, 0x944a, 0x944b, 0x944c, 0x944d, 0x944e, 0x944f, 0x9450, /*0xe8-0xef*/ 0x9451, 0x9452, 0x9453, 0x9454, 0x9455, 0x9456, 0x9457, 0x9458, /*0xf0-0xf7*/ 0x9459, 0x945a, 0x945b, 0x945c, 0x945d, 0x945e, 0x945f, 0x9460, /*0xf8-0xff*/ /* 0x6500 */ 0xc5ca, 0x9461, 0x9462, 0x9463, 0x9464, 0x9465, 0x9466, 0x9467, /*0x00-0x07*/ 0x9468, 0xdfab, 0x9469, 0x946a, 0x946b, 0x946c, 0x946d, 0x946e, /*0x08-0x0f*/ 0x946f, 0x9470, 0xd4dc, 0x9471, 0x9472, 0x9473, 0x9474, 0x9475, /*0x10-0x17*/ 0xc8c1, 0x9476, 0x9477, 0x9478, 0x9479, 0x947a, 0x947b, 0x947c, /*0x18-0x1f*/ 0x947d, 0x947e, 0x9480, 0x9481, 0x9482, 0xdfac, 0x9483, 0x9484, /*0x20-0x27*/ 0x9485, 0x9486, 0x9487, 0xbef0, 0x9488, 0x9489, 0xdfad, 0xd6a7, /*0x28-0x2f*/ 0x948a, 0x948b, 0x948c, 0x948d, 0xeab7, 0xebb6, 0xcad5, 0x948e, /*0x30-0x37*/ 0xd8fc, 0xb8c4, 0x948f, 0xb9a5, 0x9490, 0x9491, 0xb7c5, 0xd5fe, /*0x38-0x3f*/ 0x9492, 0x9493, 0x9494, 0x9495, 0x9496, 0xb9ca, 0x9497, 0x9498, /*0x40-0x47*/ 0xd0a7, 0xf4cd, 0x9499, 0x949a, 0xb5d0, 0x949b, 0x949c, 0xc3f4, /*0x48-0x4f*/ 0x949d, 0xbec8, 0x949e, 0x949f, 0x94a0, 0xebb7, 0xb0bd, 0x94a1, /*0x50-0x57*/ 0x94a2, 0xbdcc, 0x94a3, 0xc1b2, 0x94a4, 0xb1d6, 0xb3a8, 0x94a5, /*0x58-0x5f*/ 0x94a6, 0x94a7, 0xb8d2, 0xc9a2, 0x94a8, 0x94a9, 0xb6d8, 0x94aa, /*0x60-0x67*/ 0x94ab, 0x94ac, 0x94ad, 0xebb8, 0xbeb4, 0x94ae, 0x94af, 0x94b0, /*0x68-0x6f*/ 0xcafd, 0x94b1, 0xc7c3, 0x94b2, 0xd5fb, 0x94b3, 0x94b4, 0xb7f3, /*0x70-0x77*/ 0x94b5, 0x94b6, 0x94b7, 0x94b8, 0x94b9, 0x94ba, 0x94bb, 0x94bc, /*0x78-0x7f*/ 0x94bd, 0x94be, 0x94bf, 0x94c0, 0x94c1, 0x94c2, 0x94c3, 0xcec4, /*0x80-0x87*/ 0x94c4, 0x94c5, 0x94c6, 0xd5ab, 0xb1f3, 0x94c7, 0x94c8, 0x94c9, /*0x88-0x8f*/ 0xecb3, 0xb0df, 0x94ca, 0xecb5, 0x94cb, 0x94cc, 0x94cd, 0xb6b7, /*0x90-0x97*/ 0x94ce, 0xc1cf, 0x94cf, 0xf5fa, 0xd0b1, 0x94d0, 0x94d1, 0xd5e5, /*0x98-0x9f*/ 0x94d2, 0xced3, 0x94d3, 0x94d4, 0xbdef, 0xb3e2, 0x94d5, 0xb8ab, /*0xa0-0xa7*/ 0x94d6, 0xd5b6, 0x94d7, 0xedbd, 0x94d8, 0xb6cf, 0x94d9, 0xcbb9, /*0xa8-0xaf*/ 0xd0c2, 0x94da, 0x94db, 0x94dc, 0x94dd, 0x94de, 0x94df, 0x94e0, /*0xb0-0xb7*/ 0x94e1, 0xb7bd, 0x94e2, 0x94e3, 0xecb6, 0xcaa9, 0x94e4, 0x94e5, /*0xb8-0xbf*/ 0x94e6, 0xc5d4, 0x94e7, 0xecb9, 0xecb8, 0xc2c3, 0xecb7, 0x94e8, /*0xc0-0xc7*/ 0x94e9, 0x94ea, 0x94eb, 0xd0fd, 0xecba, 0x94ec, 0xecbb, 0xd7e5, /*0xc8-0xcf*/ 0x94ed, 0x94ee, 0xecbc, 0x94ef, 0x94f0, 0x94f1, 0xecbd, 0xc6ec, /*0xd0-0xd7*/ 0x94f2, 0x94f3, 0x94f4, 0x94f5, 0x94f6, 0x94f7, 0x94f8, 0x94f9, /*0xd8-0xdf*/ 0xcede, 0x94fa, 0xbcc8, 0x94fb, 0x94fc, 0xc8d5, 0xb5a9, 0xbec9, /*0xe0-0xe7*/ 0xd6bc, 0xd4e7, 0x94fd, 0x94fe, 0xd1ae, 0xd0f1, 0xeab8, 0xeab9, /*0xe8-0xef*/ 0xeaba, 0xbab5, 0x9540, 0x9541, 0x9542, 0x9543, 0xcab1, 0xbff5, /*0xf0-0xf7*/ 0x9544, 0x9545, 0xcdfa, 0x9546, 0x9547, 0x9548, 0x9549, 0x954a, /*0xf8-0xff*/ /* 0x6600 */ 0xeac0, 0x954b, 0xb0ba, 0xeabe, 0x954c, 0x954d, 0xc0a5, 0x954e, /*0x00-0x07*/ 0x954f, 0x9550, 0xeabb, 0x9551, 0xb2fd, 0x9552, 0xc3f7, 0xbbe8, /*0x08-0x0f*/ 0x9553, 0x9554, 0x9555, 0xd2d7, 0xcef4, 0xeabf, 0x9556, 0x9557, /*0x10-0x17*/ 0x9558, 0xeabc, 0x9559, 0x955a, 0x955b, 0xeac3, 0x955c, 0xd0c7, /*0x18-0x1f*/ 0xd3b3, 0x955d, 0x955e, 0x955f, 0x9560, 0xb4ba, 0x9561, 0xc3c1, /*0x20-0x27*/ 0xd7f2, 0x9562, 0x9563, 0x9564, 0x9565, 0xd5d1, 0x9566, 0xcac7, /*0x28-0x2f*/ 0x9567, 0xeac5, 0x9568, 0x9569, 0xeac4, 0xeac7, 0xeac6, 0x956a, /*0x30-0x37*/ 0x956b, 0x956c, 0x956d, 0x956e, 0xd6e7, 0x956f, 0xcfd4, 0x9570, /*0x38-0x3f*/ 0x9571, 0xeacb, 0x9572, 0xbbce, 0x9573, 0x9574, 0x9575, 0x9576, /*0x40-0x47*/ 0x9577, 0x9578, 0x9579, 0xbdfa, 0xc9ce, 0x957a, 0x957b, 0xeacc, /*0x48-0x4f*/ 0x957c, 0x957d, 0xc9b9, 0xcffe, 0xeaca, 0xd4ce, 0xeacd, 0xeacf, /*0x50-0x57*/ 0x957e, 0x9580, 0xcded, 0x9581, 0x9582, 0x9583, 0x9584, 0xeac9, /*0x58-0x5f*/ 0x9585, 0xeace, 0x9586, 0x9587, 0xceee, 0x9588, 0xbbde, 0x9589, /*0x60-0x67*/ 0xb3bf, 0x958a, 0x958b, 0x958c, 0x958d, 0x958e, 0xc6d5, 0xbeb0, /*0x68-0x6f*/ 0xcefa, 0x958f, 0x9590, 0x9591, 0xc7e7, 0x9592, 0xbea7, 0xead0, /*0x70-0x77*/ 0x9593, 0x9594, 0xd6c7, 0x9595, 0x9596, 0x9597, 0xc1c0, 0x9598, /*0x78-0x7f*/ 0x9599, 0x959a, 0xd4dd, 0x959b, 0xead1, 0x959c, 0x959d, 0xcfbe, /*0x80-0x87*/ 0x959e, 0x959f, 0x95a0, 0x95a1, 0xead2, 0x95a2, 0x95a3, 0x95a4, /*0x88-0x8f*/ 0x95a5, 0xcaee, 0x95a6, 0x95a7, 0x95a8, 0x95a9, 0xc5af, 0xb0b5, /*0x90-0x97*/ 0x95aa, 0x95ab, 0x95ac, 0x95ad, 0x95ae, 0xead4, 0x95af, 0x95b0, /*0x98-0x9f*/ 0x95b1, 0x95b2, 0x95b3, 0x95b4, 0x95b5, 0x95b6, 0x95b7, 0xead3, /*0xa0-0xa7*/ 0xf4df, 0x95b8, 0x95b9, 0x95ba, 0x95bb, 0x95bc, 0xc4ba, 0x95bd, /*0xa8-0xaf*/ 0x95be, 0x95bf, 0x95c0, 0x95c1, 0xb1a9, 0x95c2, 0x95c3, 0x95c4, /*0xb0-0xb7*/ 0x95c5, 0xe5df, 0x95c6, 0x95c7, 0x95c8, 0x95c9, 0xead5, 0x95ca, /*0xb8-0xbf*/ 0x95cb, 0x95cc, 0x95cd, 0x95ce, 0x95cf, 0x95d0, 0x95d1, 0x95d2, /*0xc0-0xc7*/ 0x95d3, 0x95d4, 0x95d5, 0x95d6, 0x95d7, 0x95d8, 0x95d9, 0x95da, /*0xc8-0xcf*/ 0x95db, 0x95dc, 0x95dd, 0x95de, 0x95df, 0x95e0, 0x95e1, 0x95e2, /*0xd0-0xd7*/ 0x95e3, 0xcaef, 0x95e4, 0xead6, 0xead7, 0xc6d8, 0x95e5, 0x95e6, /*0xd8-0xdf*/ 0x95e7, 0x95e8, 0x95e9, 0x95ea, 0x95eb, 0x95ec, 0xead8, 0x95ed, /*0xe0-0xe7*/ 0x95ee, 0xead9, 0x95ef, 0x95f0, 0x95f1, 0x95f2, 0x95f3, 0x95f4, /*0xe8-0xef*/ 0xd4bb, 0x95f5, 0xc7fa, 0xd2b7, 0xb8fc, 0x95f6, 0x95f7, 0xeac2, /*0xf0-0xf7*/ 0x95f8, 0xb2dc, 0x95f9, 0x95fa, 0xc2fc, 0x95fb, 0xd4f8, 0xcce6, /*0xf8-0xff*/ /* 0x6700 */ 0xd7ee, 0x95fc, 0x95fd, 0x95fe, 0x9640, 0x9641, 0x9642, 0x9643, /*0x00-0x07*/ 0xd4c2, 0xd3d0, 0xebc3, 0xc5f3, 0x9644, 0xb7fe, 0x9645, 0x9646, /*0x08-0x0f*/ 0xebd4, 0x9647, 0x9648, 0x9649, 0xcbb7, 0xebde, 0x964a, 0xc0ca, /*0x10-0x17*/ 0x964b, 0x964c, 0x964d, 0xcdfb, 0x964e, 0xb3af, 0x964f, 0xc6da, /*0x18-0x1f*/ 0x9650, 0x9651, 0x9652, 0x9653, 0x9654, 0x9655, 0xebfc, 0x9656, /*0x20-0x27*/ 0xc4be, 0x9657, 0xceb4, 0xc4a9, 0xb1be, 0xd4fd, 0x9658, 0xcaf5, /*0x28-0x2f*/ 0x9659, 0xd6ec, 0x965a, 0x965b, 0xc6d3, 0xb6e4, 0x965c, 0x965d, /*0x30-0x37*/ 0x965e, 0x965f, 0xbbfa, 0x9660, 0x9661, 0xd0e0, 0x9662, 0x9663, /*0x38-0x3f*/ 0xc9b1, 0x9664, 0xd4d3, 0xc8a8, 0x9665, 0x9666, 0xb8cb, 0x9667, /*0x40-0x47*/ 0xe8be, 0xc9bc, 0x9668, 0x9669, 0xe8bb, 0x966a, 0xc0ee, 0xd0d3, /*0x48-0x4f*/ 0xb2c4, 0xb4e5, 0x966b, 0xe8bc, 0x966c, 0x966d, 0xd5c8, 0x966e, /*0x50-0x57*/ 0x966f, 0x9670, 0x9671, 0x9672, 0xb6c5, 0x9673, 0xe8bd, 0xcaf8, /*0x58-0x5f*/ 0xb8dc, 0xccf5, 0x9674, 0x9675, 0x9676, 0xc0b4, 0x9677, 0x9678, /*0x60-0x67*/ 0xd1ee, 0xe8bf, 0xe8c2, 0x9679, 0x967a, 0xbabc, 0x967b, 0xb1ad, /*0x68-0x6f*/ 0xbddc, 0x967c, 0xeabd, 0xe8c3, 0x967d, 0xe8c6, 0x967e, 0xe8cb, /*0x70-0x77*/ 0x9680, 0x9681, 0x9682, 0x9683, 0xe8cc, 0x9684, 0xcbc9, 0xb0e5, /*0x78-0x7f*/ 0x9685, 0xbcab, 0x9686, 0x9687, 0xb9b9, 0x9688, 0x9689, 0xe8c1, /*0x80-0x87*/ 0x968a, 0xcdf7, 0x968b, 0xe8ca, 0x968c, 0x968d, 0x968e, 0x968f, /*0x88-0x8f*/ 0xcef6, 0x9690, 0x9691, 0x9692, 0x9693, 0xd5ed, 0x9694, 0xc1d6, /*0x90-0x97*/ 0xe8c4, 0x9695, 0xc3b6, 0x9696, 0xb9fb, 0xd6a6, 0xe8c8, 0x9697, /*0x98-0x9f*/ 0x9698, 0x9699, 0xcae0, 0xd4e6, 0x969a, 0xe8c0, 0x969b, 0xe8c5, /*0xa0-0xa7*/ 0xe8c7, 0x969c, 0xc7b9, 0xb7e3, 0x969d, 0xe8c9, 0x969e, 0xbfdd, /*0xa8-0xaf*/ 0xe8d2, 0x969f, 0x96a0, 0xe8d7, 0x96a1, 0xe8d5, 0xbcdc, 0xbccf, /*0xb0-0xb7*/ 0xe8db, 0x96a2, 0x96a3, 0x96a4, 0x96a5, 0x96a6, 0x96a7, 0x96a8, /*0xb8-0xbf*/ 0x96a9, 0xe8de, 0x96aa, 0xe8da, 0xb1fa, 0x96ab, 0x96ac, 0x96ad, /*0xc0-0xc7*/ 0x96ae, 0x96af, 0x96b0, 0x96b1, 0x96b2, 0x96b3, 0x96b4, 0xb0d8, /*0xc8-0xcf*/ 0xc4b3, 0xb8cc, 0xc6e2, 0xc8be, 0xc8e1, 0x96b5, 0x96b6, 0x96b7, /*0xd0-0xd7*/ 0xe8cf, 0xe8d4, 0xe8d6, 0x96b8, 0xb9f1, 0xe8d8, 0xd7f5, 0x96b9, /*0xd8-0xdf*/ 0xc4fb, 0x96ba, 0xe8dc, 0x96bb, 0x96bc, 0xb2e9, 0x96bd, 0x96be, /*0xe0-0xe7*/ 0x96bf, 0xe8d1, 0x96c0, 0x96c1, 0xbced, 0x96c2, 0x96c3, 0xbfc2, /*0xe8-0xef*/ 0xe8cd, 0xd6f9, 0x96c4, 0xc1f8, 0xb2f1, 0x96c5, 0x96c6, 0x96c7, /*0xf0-0xf7*/ 0x96c8, 0x96c9, 0x96ca, 0x96cb, 0x96cc, 0xe8df, 0x96cd, 0xcac1, /*0xf8-0xff*/ /* 0x6800 */ 0xe8d9, 0x96ce, 0x96cf, 0x96d0, 0x96d1, 0xd5a4, 0x96d2, 0xb1ea, /*0x00-0x07*/ 0xd5bb, 0xe8ce, 0xe8d0, 0xb6b0, 0xe8d3, 0x96d3, 0xe8dd, 0xc0b8, /*0x08-0x0f*/ 0x96d4, 0xcaf7, 0x96d5, 0xcba8, 0x96d6, 0x96d7, 0xc6dc, 0xc0f5, /*0x10-0x17*/ 0x96d8, 0x96d9, 0x96da, 0x96db, 0x96dc, 0xe8e9, 0x96dd, 0x96de, /*0x18-0x1f*/ 0x96df, 0xd0a3, 0x96e0, 0x96e1, 0x96e2, 0x96e3, 0x96e4, 0x96e5, /*0x20-0x27*/ 0x96e6, 0xe8f2, 0xd6ea, 0x96e7, 0x96e8, 0x96e9, 0x96ea, 0x96eb, /*0x28-0x2f*/ 0x96ec, 0x96ed, 0xe8e0, 0xe8e1, 0x96ee, 0x96ef, 0x96f0, 0xd1f9, /*0x30-0x37*/ 0xbacb, 0xb8f9, 0x96f1, 0x96f2, 0xb8f1, 0xd4d4, 0xe8ef, 0x96f3, /*0x38-0x3f*/ 0xe8ee, 0xe8ec, 0xb9f0, 0xccd2, 0xe8e6, 0xcea6, 0xbff2, 0x96f4, /*0x40-0x47*/ 0xb0b8, 0xe8f1, 0xe8f0, 0x96f5, 0xd7c0, 0x96f6, 0xe8e4, 0x96f7, /*0x48-0x4f*/ 0xcda9, 0xc9a3, 0x96f8, 0xbbb8, 0xbddb, 0xe8ea, 0x96f9, 0x96fa, /*0x50-0x57*/ 0x96fb, 0x96fc, 0x96fd, 0x96fe, 0x9740, 0x9741, 0x9742, 0x9743, /*0x58-0x5f*/ 0xe8e2, 0xe8e3, 0xe8e5, 0xb5b5, 0xe8e7, 0xc7c5, 0xe8eb, 0xe8ed, /*0x60-0x67*/ 0xbdb0, 0xd7ae, 0x9744, 0xe8f8, 0x9745, 0x9746, 0x9747, 0x9748, /*0x68-0x6f*/ 0x9749, 0x974a, 0x974b, 0x974c, 0xe8f5, 0x974d, 0xcdb0, 0xe8f6, /*0x70-0x77*/ 0x974e, 0x974f, 0x9750, 0x9751, 0x9752, 0x9753, 0x9754, 0x9755, /*0x78-0x7f*/ 0x9756, 0xc1ba, 0x9757, 0xe8e8, 0x9758, 0xc3b7, 0xb0f0, 0x9759, /*0x80-0x87*/ 0x975a, 0x975b, 0x975c, 0x975d, 0x975e, 0x975f, 0x9760, 0xe8f4, /*0x88-0x8f*/ 0x9761, 0x9762, 0x9763, 0xe8f7, 0x9764, 0x9765, 0x9766, 0xb9a3, /*0x90-0x97*/ 0x9767, 0x9768, 0x9769, 0x976a, 0x976b, 0x976c, 0x976d, 0x976e, /*0x98-0x9f*/ 0x976f, 0x9770, 0xc9d2, 0x9771, 0x9772, 0x9773, 0xc3ce, 0xcee0, /*0xa0-0xa7*/ 0xc0e6, 0x9774, 0x9775, 0x9776, 0x9777, 0xcbf3, 0x9778, 0xccdd, /*0xa8-0xaf*/ 0xd0b5, 0x9779, 0x977a, 0xcae1, 0x977b, 0xe8f3, 0x977c, 0x977d, /*0xb0-0xb7*/ 0x977e, 0x9780, 0x9781, 0x9782, 0x9783, 0x9784, 0x9785, 0x9786, /*0xb8-0xbf*/ 0xbcec, 0x9787, 0xe8f9, 0x9788, 0x9789, 0x978a, 0x978b, 0x978c, /*0xc0-0xc7*/ 0x978d, 0xc3de, 0x978e, 0xc6e5, 0x978f, 0xb9f7, 0x9790, 0x9791, /*0xc8-0xcf*/ 0x9792, 0x9793, 0xb0f4, 0x9794, 0x9795, 0xd7d8, 0x9796, 0x9797, /*0xd0-0xd7*/ 0xbcac, 0x9798, 0xc5ef, 0x9799, 0x979a, 0x979b, 0x979c, 0x979d, /*0xd8-0xdf*/ 0xccc4, 0x979e, 0x979f, 0xe9a6, 0x97a0, 0x97a1, 0x97a2, 0x97a3, /*0xe0-0xe7*/ 0x97a4, 0x97a5, 0x97a6, 0x97a7, 0x97a8, 0x97a9, 0xc9ad, 0x97aa, /*0xe8-0xef*/ 0xe9a2, 0xc0e2, 0x97ab, 0x97ac, 0x97ad, 0xbfc3, 0x97ae, 0x97af, /*0xf0-0xf7*/ 0x97b0, 0xe8fe, 0xb9d7, 0x97b1, 0xe8fb, 0x97b2, 0x97b3, 0x97b4, /*0xf8-0xff*/ /* 0x6900 */ 0x97b5, 0xe9a4, 0x97b6, 0x97b7, 0x97b8, 0xd2ce, 0x97b9, 0x97ba, /*0x00-0x07*/ 0x97bb, 0x97bc, 0x97bd, 0xe9a3, 0x97be, 0xd6b2, 0xd7b5, 0x97bf, /*0x08-0x0f*/ 0xe9a7, 0x97c0, 0xbdb7, 0x97c1, 0x97c2, 0x97c3, 0x97c4, 0x97c5, /*0x10-0x17*/ 0x97c6, 0x97c7, 0x97c8, 0x97c9, 0x97ca, 0x97cb, 0x97cc, 0xe8fc, /*0x18-0x1f*/ 0xe8fd, 0x97cd, 0x97ce, 0x97cf, 0xe9a1, 0x97d0, 0x97d1, 0x97d2, /*0x20-0x27*/ 0x97d3, 0x97d4, 0x97d5, 0x97d6, 0x97d7, 0xcdd6, 0x97d8, 0x97d9, /*0x28-0x2f*/ 0xd2ac, 0x97da, 0x97db, 0x97dc, 0xe9b2, 0x97dd, 0x97de, 0x97df, /*0x30-0x37*/ 0x97e0, 0xe9a9, 0x97e1, 0x97e2, 0x97e3, 0xb4aa, 0x97e4, 0xb4bb, /*0x38-0x3f*/ 0x97e5, 0x97e6, 0xe9ab, 0x97e7, 0x97e8, 0x97e9, 0x97ea, 0x97eb, /*0x40-0x47*/ 0x97ec, 0x97ed, 0x97ee, 0x97ef, 0x97f0, 0x97f1, 0x97f2, 0x97f3, /*0x48-0x4f*/ 0x97f4, 0x97f5, 0x97f6, 0x97f7, 0xd0a8, 0x97f8, 0x97f9, 0xe9a5, /*0x50-0x57*/ 0x97fa, 0x97fb, 0xb3fe, 0x97fc, 0x97fd, 0xe9ac, 0xc0e3, 0x97fe, /*0x58-0x5f*/ 0xe9aa, 0x9840, 0x9841, 0xe9b9, 0x9842, 0x9843, 0xe9b8, 0x9844, /*0x60-0x67*/ 0x9845, 0x9846, 0x9847, 0xe9ae, 0x9848, 0x9849, 0xe8fa, 0x984a, /*0x68-0x6f*/ 0x984b, 0xe9a8, 0x984c, 0x984d, 0x984e, 0x984f, 0x9850, 0xbfac, /*0x70-0x77*/ 0xe9b1, 0xe9ba, 0x9851, 0x9852, 0xc2a5, 0x9853, 0x9854, 0x9855, /*0x78-0x7f*/ 0xe9af, 0x9856, 0xb8c5, 0x9857, 0xe9ad, 0x9858, 0xd3dc, 0xe9b4, /*0x80-0x87*/ 0xe9b5, 0xe9b7, 0x9859, 0x985a, 0x985b, 0xe9c7, 0x985c, 0x985d, /*0x88-0x8f*/ 0x985e, 0x985f, 0x9860, 0x9861, 0xc0c6, 0xe9c5, 0x9862, 0x9863, /*0x90-0x97*/ 0xe9b0, 0x9864, 0x9865, 0xe9bb, 0xb0f1, 0x9866, 0x9867, 0x9868, /*0x98-0x9f*/ 0x9869, 0x986a, 0x986b, 0x986c, 0x986d, 0x986e, 0x986f, 0xe9bc, /*0xa0-0xa7*/ 0xd5a5, 0x9870, 0x9871, 0xe9be, 0x9872, 0xe9bf, 0x9873, 0x9874, /*0xa8-0xaf*/ 0x9875, 0xe9c1, 0x9876, 0x9877, 0xc1f1, 0x9878, 0x9879, 0xc8b6, /*0xb0-0xb7*/ 0x987a, 0x987b, 0x987c, 0xe9bd, 0x987d, 0x987e, 0x9880, 0x9881, /*0xb8-0xbf*/ 0x9882, 0xe9c2, 0x9883, 0x9884, 0x9885, 0x9886, 0x9887, 0x9888, /*0xc0-0xc7*/ 0x9889, 0x988a, 0xe9c3, 0x988b, 0xe9b3, 0x988c, 0xe9b6, 0x988d, /*0xc8-0xcf*/ 0xbbb1, 0x988e, 0x988f, 0x9890, 0xe9c0, 0x9891, 0x9892, 0x9893, /*0xd0-0xd7*/ 0x9894, 0x9895, 0x9896, 0xbcf7, 0x9897, 0x9898, 0x9899, 0xe9c4, /*0xd8-0xdf*/ 0xe9c6, 0x989a, 0x989b, 0x989c, 0x989d, 0x989e, 0x989f, 0x98a0, /*0xe0-0xe7*/ 0x98a1, 0x98a2, 0x98a3, 0x98a4, 0x98a5, 0xe9ca, 0x98a6, 0x98a7, /*0xe8-0xef*/ 0x98a8, 0x98a9, 0xe9ce, 0x98aa, 0x98ab, 0x98ac, 0x98ad, 0x98ae, /*0xf0-0xf7*/ 0x98af, 0x98b0, 0x98b1, 0x98b2, 0x98b3, 0xb2db, 0x98b4, 0xe9c8, /*0xf8-0xff*/ /* 0x6a00 */ 0x98b5, 0x98b6, 0x98b7, 0x98b8, 0x98b9, 0x98ba, 0x98bb, 0x98bc, /*0x00-0x07*/ 0x98bd, 0x98be, 0xb7ae, 0x98bf, 0x98c0, 0x98c1, 0x98c2, 0x98c3, /*0x08-0x0f*/ 0x98c4, 0x98c5, 0x98c6, 0x98c7, 0x98c8, 0x98c9, 0x98ca, 0xe9cb, /*0x10-0x17*/ 0xe9cc, 0x98cb, 0x98cc, 0x98cd, 0x98ce, 0x98cf, 0x98d0, 0xd5c1, /*0x18-0x1f*/ 0x98d1, 0xc4a3, 0x98d2, 0x98d3, 0x98d4, 0x98d5, 0x98d6, 0x98d7, /*0x20-0x27*/ 0xe9d8, 0x98d8, 0xbae1, 0x98d9, 0x98da, 0x98db, 0x98dc, 0xe9c9, /*0x28-0x2f*/ 0x98dd, 0xd3a3, 0x98de, 0x98df, 0x98e0, 0xe9d4, 0x98e1, 0x98e2, /*0x30-0x37*/ 0x98e3, 0x98e4, 0x98e5, 0x98e6, 0x98e7, 0xe9d7, 0xe9d0, 0x98e8, /*0x38-0x3f*/ 0x98e9, 0x98ea, 0x98eb, 0x98ec, 0xe9cf, 0x98ed, 0x98ee, 0xc7c1, /*0x40-0x47*/ 0x98ef, 0x98f0, 0x98f1, 0x98f2, 0x98f3, 0x98f4, 0x98f5, 0x98f6, /*0x48-0x4f*/ 0xe9d2, 0x98f7, 0x98f8, 0x98f9, 0x98fa, 0x98fb, 0x98fc, 0x98fd, /*0x50-0x57*/ 0xe9d9, 0xb3c8, 0x98fe, 0xe9d3, 0x9940, 0x9941, 0x9942, 0x9943, /*0x58-0x5f*/ 0x9944, 0xcff0, 0x9945, 0x9946, 0x9947, 0xe9cd, 0x9948, 0x9949, /*0x60-0x67*/ 0x994a, 0x994b, 0x994c, 0x994d, 0x994e, 0x994f, 0x9950, 0x9951, /*0x68-0x6f*/ 0x9952, 0xb3f7, 0x9953, 0x9954, 0x9955, 0x9956, 0x9957, 0x9958, /*0x70-0x77*/ 0x9959, 0xe9d6, 0x995a, 0x995b, 0xe9da, 0x995c, 0x995d, 0x995e, /*0x78-0x7f*/ 0xccb4, 0x995f, 0x9960, 0x9961, 0xcfad, 0x9962, 0x9963, 0x9964, /*0x80-0x87*/ 0x9965, 0x9966, 0x9967, 0x9968, 0x9969, 0x996a, 0xe9d5, 0x996b, /*0x88-0x8f*/ 0xe9dc, 0xe9db, 0x996c, 0x996d, 0x996e, 0x996f, 0x9970, 0xe9de, /*0x90-0x97*/ 0x9971, 0x9972, 0x9973, 0x9974, 0x9975, 0x9976, 0x9977, 0x9978, /*0x98-0x9f*/ 0xe9d1, 0x9979, 0x997a, 0x997b, 0x997c, 0x997d, 0x997e, 0x9980, /*0xa0-0xa7*/ 0x9981, 0xe9dd, 0x9982, 0xe9df, 0xc3ca, 0x9983, 0x9984, 0x9985, /*0xa8-0xaf*/ 0x9986, 0x9987, 0x9988, 0x9989, 0x998a, 0x998b, 0x998c, 0x998d, /*0xb0-0xb7*/ 0x998e, 0x998f, 0x9990, 0x9991, 0x9992, 0x9993, 0x9994, 0x9995, /*0xb8-0xbf*/ 0x9996, 0x9997, 0x9998, 0x9999, 0x999a, 0x999b, 0x999c, 0x999d, /*0xc0-0xc7*/ 0x999e, 0x999f, 0x99a0, 0x99a1, 0x99a2, 0x99a3, 0x99a4, 0x99a5, /*0xc8-0xcf*/ 0x99a6, 0x99a7, 0x99a8, 0x99a9, 0x99aa, 0x99ab, 0x99ac, 0x99ad, /*0xd0-0xd7*/ 0x99ae, 0x99af, 0x99b0, 0x99b1, 0x99b2, 0x99b3, 0x99b4, 0x99b5, /*0xd8-0xdf*/ 0x99b6, 0x99b7, 0x99b8, 0x99b9, 0x99ba, 0x99bb, 0x99bc, 0x99bd, /*0xe0-0xe7*/ 0x99be, 0x99bf, 0x99c0, 0x99c1, 0x99c2, 0x99c3, 0x99c4, 0x99c5, /*0xe8-0xef*/ 0x99c6, 0x99c7, 0x99c8, 0x99c9, 0x99ca, 0x99cb, 0x99cc, 0x99cd, /*0xf0-0xf7*/ 0x99ce, 0x99cf, 0x99d0, 0x99d1, 0x99d2, 0x99d3, 0x99d4, 0x99d5, /*0xf8-0xff*/ /* 0x6b00 */ 0x99d6, 0x99d7, 0x99d8, 0x99d9, 0x99da, 0x99db, 0x99dc, 0x99dd, /*0x00-0x07*/ 0x99de, 0x99df, 0x99e0, 0x99e1, 0x99e2, 0x99e3, 0x99e4, 0x99e5, /*0x08-0x0f*/ 0x99e6, 0x99e7, 0x99e8, 0x99e9, 0x99ea, 0x99eb, 0x99ec, 0x99ed, /*0x10-0x17*/ 0x99ee, 0x99ef, 0x99f0, 0x99f1, 0x99f2, 0x99f3, 0x99f4, 0x99f5, /*0x18-0x1f*/ 0xc7b7, 0xb4ce, 0xbbb6, 0xd0c0, 0xeca3, 0x99f6, 0x99f7, 0xc5b7, /*0x20-0x27*/ 0x99f8, 0x99f9, 0x99fa, 0x99fb, 0x99fc, 0x99fd, 0x99fe, 0x9a40, /*0x28-0x2f*/ 0x9a41, 0x9a42, 0xd3fb, 0x9a43, 0x9a44, 0x9a45, 0x9a46, 0xeca4, /*0x30-0x37*/ 0x9a47, 0xeca5, 0xc6db, 0x9a48, 0x9a49, 0x9a4a, 0xbfee, 0x9a4b, /*0x38-0x3f*/ 0x9a4c, 0x9a4d, 0x9a4e, 0xeca6, 0x9a4f, 0x9a50, 0xeca7, 0xd0aa, /*0x40-0x47*/ 0x9a51, 0xc7b8, 0x9a52, 0x9a53, 0xb8e8, 0x9a54, 0x9a55, 0x9a56, /*0x48-0x4f*/ 0x9a57, 0x9a58, 0x9a59, 0x9a5a, 0x9a5b, 0x9a5c, 0x9a5d, 0x9a5e, /*0x50-0x57*/ 0x9a5f, 0xeca8, 0x9a60, 0x9a61, 0x9a62, 0x9a63, 0x9a64, 0x9a65, /*0x58-0x5f*/ 0x9a66, 0x9a67, 0xd6b9, 0xd5fd, 0xb4cb, 0xb2bd, 0xcee4, 0xc6e7, /*0x60-0x67*/ 0x9a68, 0x9a69, 0xcde1, 0x9a6a, 0x9a6b, 0x9a6c, 0x9a6d, 0x9a6e, /*0x68-0x6f*/ 0x9a6f, 0x9a70, 0x9a71, 0x9a72, 0x9a73, 0x9a74, 0x9a75, 0x9a76, /*0x70-0x77*/ 0x9a77, 0xb4f5, 0x9a78, 0xcbc0, 0xbcdf, 0x9a79, 0x9a7a, 0x9a7b, /*0x78-0x7f*/ 0x9a7c, 0xe9e2, 0xe9e3, 0xd1ea, 0xe9e5, 0x9a7d, 0xb4f9, 0xe9e4, /*0x80-0x87*/ 0x9a7e, 0xd1b3, 0xcae2, 0xb2d0, 0x9a80, 0xe9e8, 0x9a81, 0x9a82, /*0x88-0x8f*/ 0x9a83, 0x9a84, 0xe9e6, 0xe9e7, 0x9a85, 0x9a86, 0xd6b3, 0x9a87, /*0x90-0x97*/ 0x9a88, 0x9a89, 0xe9e9, 0xe9ea, 0x9a8a, 0x9a8b, 0x9a8c, 0x9a8d, /*0x98-0x9f*/ 0x9a8e, 0xe9eb, 0x9a8f, 0x9a90, 0x9a91, 0x9a92, 0x9a93, 0x9a94, /*0xa0-0xa7*/ 0x9a95, 0x9a96, 0xe9ec, 0x9a97, 0x9a98, 0x9a99, 0x9a9a, 0x9a9b, /*0xa8-0xaf*/ 0x9a9c, 0x9a9d, 0x9a9e, 0xecaf, 0xc5b9, 0xb6ce, 0x9a9f, 0xd2f3, /*0xb0-0xb7*/ 0x9aa0, 0x9aa1, 0x9aa2, 0x9aa3, 0x9aa4, 0x9aa5, 0x9aa6, 0xb5ee, /*0xb8-0xbf*/ 0x9aa7, 0xbbd9, 0xecb1, 0x9aa8, 0x9aa9, 0xd2e3, 0x9aaa, 0x9aab, /*0xc0-0xc7*/ 0x9aac, 0x9aad, 0x9aae, 0xcee3, 0x9aaf, 0xc4b8, 0x9ab0, 0xc3bf, /*0xc8-0xcf*/ 0x9ab1, 0x9ab2, 0xb6be, 0xd8b9, 0xb1c8, 0xb1cf, 0xb1d1, 0xc5fe, /*0xd0-0xd7*/ 0x9ab3, 0xb1d0, 0x9ab4, 0xc3ab, 0x9ab5, 0x9ab6, 0x9ab7, 0x9ab8, /*0xd8-0xdf*/ 0x9ab9, 0xd5b1, 0x9aba, 0x9abb, 0x9abc, 0x9abd, 0x9abe, 0x9abf, /*0xe0-0xe7*/ 0x9ac0, 0x9ac1, 0xeba4, 0xbac1, 0x9ac2, 0x9ac3, 0x9ac4, 0xccba, /*0xe8-0xef*/ 0x9ac5, 0x9ac6, 0x9ac7, 0xeba5, 0x9ac8, 0xeba7, 0x9ac9, 0x9aca, /*0xf0-0xf7*/ 0x9acb, 0xeba8, 0x9acc, 0x9acd, 0x9ace, 0xeba6, 0x9acf, 0x9ad0, /*0xf8-0xff*/ /* 0x6c00 */ 0x9ad1, 0x9ad2, 0x9ad3, 0x9ad4, 0x9ad5, 0xeba9, 0xebab, 0xebaa, /*0x00-0x07*/ 0x9ad6, 0x9ad7, 0x9ad8, 0x9ad9, 0x9ada, 0xebac, 0x9adb, 0xcacf, /*0x08-0x0f*/ 0xd8b5, 0xc3f1, 0x9adc, 0xc3a5, 0xc6f8, 0xebad, 0xc4ca, 0x9add, /*0x10-0x17*/ 0xebae, 0xebaf, 0xebb0, 0xb7d5, 0x9ade, 0x9adf, 0x9ae0, 0xb7fa, /*0x18-0x1f*/ 0x9ae1, 0xebb1, 0xc7e2, 0x9ae2, 0xebb3, 0x9ae3, 0xbaa4, 0xd1f5, /*0x20-0x27*/ 0xb0b1, 0xebb2, 0xebb4, 0x9ae4, 0x9ae5, 0x9ae6, 0xb5aa, 0xc2c8, /*0x28-0x2f*/ 0xc7e8, 0x9ae7, 0xebb5, 0x9ae8, 0xcbae, 0xe3df, 0x9ae9, 0x9aea, /*0x30-0x37*/ 0xd3c0, 0x9aeb, 0x9aec, 0x9aed, 0x9aee, 0xd9db, 0x9aef, 0x9af0, /*0x38-0x3f*/ 0xcda1, 0xd6ad, 0xc7f3, 0x9af1, 0x9af2, 0x9af3, 0xd9e0, 0xbbe3, /*0x40-0x47*/ 0x9af4, 0xbaba, 0xe3e2, 0x9af5, 0x9af6, 0x9af7, 0x9af8, 0x9af9, /*0x48-0x4f*/ 0xcfab, 0x9afa, 0x9afb, 0x9afc, 0xe3e0, 0xc9c7, 0x9afd, 0xbab9, /*0x50-0x57*/ 0x9afe, 0x9b40, 0x9b41, 0xd1b4, 0xe3e1, 0xc8ea, 0xb9af, 0xbdad, /*0x58-0x5f*/ 0xb3d8, 0xcedb, 0x9b42, 0x9b43, 0xccc0, 0x9b44, 0x9b45, 0x9b46, /*0x60-0x67*/ 0xe3e8, 0xe3e9, 0xcdf4, 0x9b47, 0x9b48, 0x9b49, 0x9b4a, 0x9b4b, /*0x68-0x6f*/ 0xccad, 0x9b4c, 0xbcb3, 0x9b4d, 0xe3ea, 0x9b4e, 0xe3eb, 0x9b4f, /*0x70-0x77*/ 0x9b50, 0xd0da, 0x9b51, 0x9b52, 0x9b53, 0xc6fb, 0xb7da, 0x9b54, /*0x78-0x7f*/ 0x9b55, 0xc7df, 0xd2ca, 0xced6, 0x9b56, 0xe3e4, 0xe3ec, 0x9b57, /*0x80-0x87*/ 0xc9f2, 0xb3c1, 0x9b58, 0x9b59, 0xe3e7, 0x9b5a, 0x9b5b, 0xc6e3, /*0x88-0x8f*/ 0xe3e5, 0x9b5c, 0x9b5d, 0xedb3, 0xe3e6, 0x9b5e, 0x9b5f, 0x9b60, /*0x90-0x97*/ 0x9b61, 0xc9b3, 0x9b62, 0xc5e6, 0x9b63, 0x9b64, 0x9b65, 0xb9b5, /*0x98-0x9f*/ 0x9b66, 0xc3bb, 0x9b67, 0xe3e3, 0xc5bd, 0xc1a4, 0xc2d9, 0xb2d7, /*0xa0-0xa7*/ 0x9b68, 0xe3ed, 0xbba6, 0xc4ad, 0x9b69, 0xe3f0, 0xbeda, 0x9b6a, /*0xa8-0xaf*/ 0x9b6b, 0xe3fb, 0xe3f5, 0xbad3, 0x9b6c, 0x9b6d, 0x9b6e, 0x9b6f, /*0xb0-0xb7*/ 0xb7d0, 0xd3cd, 0x9b70, 0xd6ce, 0xd5d3, 0xb9c1, 0xd5b4, 0xd1d8, /*0xb8-0xbf*/ 0x9b71, 0x9b72, 0x9b73, 0x9b74, 0xd0b9, 0xc7f6, 0x9b75, 0x9b76, /*0xc0-0xc7*/ 0x9b77, 0xc8aa, 0xb2b4, 0x9b78, 0xc3da, 0x9b79, 0x9b7a, 0x9b7b, /*0xc8-0xcf*/ 0xe3ee, 0x9b7c, 0x9b7d, 0xe3fc, 0xe3ef, 0xb7a8, 0xe3f7, 0xe3f4, /*0xd0-0xd7*/ 0x9b7e, 0x9b80, 0x9b81, 0xb7ba, 0x9b82, 0x9b83, 0xc5a2, 0x9b84, /*0xd8-0xdf*/ 0xe3f6, 0xc5dd, 0xb2a8, 0xc6fc, 0x9b85, 0xc4e0, 0x9b86, 0x9b87, /*0xe0-0xe7*/ 0xd7a2, 0x9b88, 0xc0e1, 0xe3f9, 0x9b89, 0x9b8a, 0xe3fa, 0xe3fd, /*0xe8-0xef*/ 0xcca9, 0xe3f3, 0x9b8b, 0xd3be, 0x9b8c, 0xb1c3, 0xedb4, 0xe3f1, /*0xf0-0xf7*/ 0xe3f2, 0x9b8d, 0xe3f8, 0xd0ba, 0xc6c3, 0xd4f3, 0xe3fe, 0x9b8e, /*0xf8-0xff*/ /* 0x6d00 */ 0x9b8f, 0xbde0, 0x9b90, 0x9b91, 0xe4a7, 0x9b92, 0x9b93, 0xe4a6, /*0x00-0x07*/ 0x9b94, 0x9b95, 0x9b96, 0xd1f3, 0xe4a3, 0x9b97, 0xe4a9, 0x9b98, /*0x08-0x0f*/ 0x9b99, 0x9b9a, 0xc8f7, 0x9b9b, 0x9b9c, 0x9b9d, 0x9b9e, 0xcfb4, /*0x10-0x17*/ 0x9b9f, 0xe4a8, 0xe4ae, 0xc2e5, 0x9ba0, 0x9ba1, 0xb6b4, 0x9ba2, /*0x18-0x1f*/ 0x9ba3, 0x9ba4, 0x9ba5, 0x9ba6, 0x9ba7, 0xbdf2, 0x9ba8, 0xe4a2, /*0x20-0x27*/ 0x9ba9, 0x9baa, 0xbae9, 0xe4aa, 0x9bab, 0x9bac, 0xe4ac, 0x9bad, /*0x28-0x2f*/ 0x9bae, 0xb6fd, 0xd6de, 0xe4b2, 0x9baf, 0xe4ad, 0x9bb0, 0x9bb1, /*0x30-0x37*/ 0x9bb2, 0xe4a1, 0x9bb3, 0xbbee, 0xcddd, 0xc7a2, 0xc5c9, 0x9bb4, /*0x38-0x3f*/ 0x9bb5, 0xc1f7, 0x9bb6, 0xe4a4, 0x9bb7, 0xc7b3, 0xbdac, 0xbdbd, /*0x40-0x47*/ 0xe4a5, 0x9bb8, 0xd7c7, 0xb2e2, 0x9bb9, 0xe4ab, 0xbcc3, 0xe4af, /*0x48-0x4f*/ 0x9bba, 0xbbeb, 0xe4b0, 0xc5a8, 0xe4b1, 0x9bbb, 0x9bbc, 0x9bbd, /*0x50-0x57*/ 0x9bbe, 0xd5e3, 0xbfa3, 0x9bbf, 0xe4ba, 0x9bc0, 0xe4b7, 0x9bc1, /*0x58-0x5f*/ 0xe4bb, 0x9bc2, 0x9bc3, 0xe4bd, 0x9bc4, 0x9bc5, 0xc6d6, 0x9bc6, /*0x60-0x67*/ 0x9bc7, 0xbac6, 0xc0cb, 0x9bc8, 0x9bc9, 0x9bca, 0xb8a1, 0xe4b4, /*0x68-0x6f*/ 0x9bcb, 0x9bcc, 0x9bcd, 0x9bce, 0xd4a1, 0x9bcf, 0x9bd0, 0xbaa3, /*0x70-0x77*/ 0xbdfe, 0x9bd1, 0x9bd2, 0x9bd3, 0xe4bc, 0x9bd4, 0x9bd5, 0x9bd6, /*0x78-0x7f*/ 0x9bd7, 0x9bd8, 0xcdbf, 0x9bd9, 0x9bda, 0xc4f9, 0x9bdb, 0x9bdc, /*0x80-0x87*/ 0xcffb, 0xc9e6, 0x9bdd, 0x9bde, 0xd3bf, 0x9bdf, 0xcfd1, 0x9be0, /*0x88-0x8f*/ 0x9be1, 0xe4b3, 0x9be2, 0xe4b8, 0xe4b9, 0xcce9, 0x9be3, 0x9be4, /*0x90-0x97*/ 0x9be5, 0x9be6, 0x9be7, 0xccce, 0x9be8, 0xc0d4, 0xe4b5, 0xc1b0, /*0x98-0x9f*/ 0xe4b6, 0xced0, 0x9be9, 0xbbc1, 0xb5d3, 0x9bea, 0xc8f3, 0xbda7, /*0xa0-0xa7*/ 0xd5c7, 0xc9ac, 0xb8a2, 0xe4ca, 0x9beb, 0x9bec, 0xe4cc, 0xd1c4, /*0xa8-0xaf*/ 0x9bed, 0x9bee, 0xd2ba, 0x9bef, 0x9bf0, 0xbaad, 0x9bf1, 0x9bf2, /*0xb0-0xb7*/ 0xbad4, 0x9bf3, 0x9bf4, 0x9bf5, 0x9bf6, 0x9bf7, 0x9bf8, 0xe4c3, /*0xb8-0xbf*/ 0xb5ed, 0x9bf9, 0x9bfa, 0x9bfb, 0xd7cd, 0xe4c0, 0xcffd, 0xe4bf, /*0xc0-0xc7*/ 0x9bfc, 0x9bfd, 0x9bfe, 0xc1dc, 0xccca, 0x9c40, 0x9c41, 0x9c42, /*0xc8-0xcf*/ 0x9c43, 0xcae7, 0x9c44, 0x9c45, 0x9c46, 0x9c47, 0xc4d7, 0x9c48, /*0xd0-0xd7*/ 0xccd4, 0xe4c8, 0x9c49, 0x9c4a, 0x9c4b, 0xe4c7, 0xe4c1, 0x9c4c, /*0xd8-0xdf*/ 0xe4c4, 0xb5ad, 0x9c4d, 0x9c4e, 0xd3d9, 0x9c4f, 0xe4c6, 0x9c50, /*0xe0-0xe7*/ 0x9c51, 0x9c52, 0x9c53, 0xd2f9, 0xb4e3, 0x9c54, 0xbbb4, 0x9c55, /*0xe8-0xef*/ 0x9c56, 0xc9ee, 0x9c57, 0xb4be, 0x9c58, 0x9c59, 0x9c5a, 0xbbec, /*0xf0-0xf7*/ 0x9c5b, 0xd1cd, 0x9c5c, 0xcced, 0xedb5, 0x9c5d, 0x9c5e, 0x9c5f, /*0xf8-0xff*/ /* 0x6e00 */ 0x9c60, 0x9c61, 0x9c62, 0x9c63, 0x9c64, 0xc7e5, 0x9c65, 0x9c66, /*0x00-0x07*/ 0x9c67, 0x9c68, 0xd4a8, 0x9c69, 0xe4cb, 0xd7d5, 0xe4c2, 0x9c6a, /*0x08-0x0f*/ 0xbda5, 0xe4c5, 0x9c6b, 0x9c6c, 0xd3e6, 0x9c6d, 0xe4c9, 0xc9f8, /*0x10-0x17*/ 0x9c6e, 0x9c6f, 0xe4be, 0x9c70, 0x9c71, 0xd3e5, 0x9c72, 0x9c73, /*0x18-0x1f*/ 0xc7fe, 0xb6c9, 0x9c74, 0xd4fc, 0xb2b3, 0xe4d7, 0x9c75, 0x9c76, /*0x20-0x27*/ 0x9c77, 0xcec2, 0x9c78, 0xe4cd, 0x9c79, 0xcebc, 0x9c7a, 0xb8db, /*0x28-0x2f*/ 0x9c7b, 0x9c7c, 0xe4d6, 0x9c7d, 0xbfca, 0x9c7e, 0x9c80, 0x9c81, /*0x30-0x37*/ 0xd3ce, 0x9c82, 0xc3ec, 0x9c83, 0x9c84, 0x9c85, 0x9c86, 0x9c87, /*0x38-0x3f*/ 0x9c88, 0x9c89, 0x9c8a, 0xc5c8, 0xe4d8, 0x9c8b, 0x9c8c, 0x9c8d, /*0x40-0x47*/ 0x9c8e, 0x9c8f, 0x9c90, 0x9c91, 0x9c92, 0xcdc4, 0xe4cf, 0x9c93, /*0x48-0x4f*/ 0x9c94, 0x9c95, 0x9c96, 0xe4d4, 0xe4d5, 0x9c97, 0xbafe, 0x9c98, /*0x50-0x57*/ 0xcfe6, 0x9c99, 0x9c9a, 0xd5bf, 0x9c9b, 0x9c9c, 0x9c9d, 0xe4d2, /*0x58-0x5f*/ 0x9c9e, 0x9c9f, 0x9ca0, 0x9ca1, 0x9ca2, 0x9ca3, 0x9ca4, 0x9ca5, /*0x60-0x67*/ 0x9ca6, 0x9ca7, 0x9ca8, 0xe4d0, 0x9ca9, 0x9caa, 0xe4ce, 0x9cab, /*0x68-0x6f*/ 0x9cac, 0x9cad, 0x9cae, 0x9caf, 0x9cb0, 0x9cb1, 0x9cb2, 0x9cb3, /*0x70-0x77*/ 0x9cb4, 0x9cb5, 0x9cb6, 0x9cb7, 0x9cb8, 0x9cb9, 0xcde5, 0xcaaa, /*0x78-0x7f*/ 0x9cba, 0x9cbb, 0x9cbc, 0xc0a3, 0x9cbd, 0xbda6, 0xe4d3, 0x9cbe, /*0x80-0x87*/ 0x9cbf, 0xb8c8, 0x9cc0, 0x9cc1, 0x9cc2, 0x9cc3, 0x9cc4, 0xe4e7, /*0x88-0x8f*/ 0xd4b4, 0x9cc5, 0x9cc6, 0x9cc7, 0x9cc8, 0x9cc9, 0x9cca, 0x9ccb, /*0x90-0x97*/ 0xe4db, 0x9ccc, 0x9ccd, 0x9cce, 0xc1ef, 0x9ccf, 0x9cd0, 0xe4e9, /*0x98-0x9f*/ 0x9cd1, 0x9cd2, 0xd2e7, 0x9cd3, 0x9cd4, 0xe4df, 0x9cd5, 0xe4e0, /*0xa0-0xa7*/ 0x9cd6, 0x9cd7, 0xcfaa, 0x9cd8, 0x9cd9, 0x9cda, 0x9cdb, 0xcbdd, /*0xa8-0xaf*/ 0x9cdc, 0xe4da, 0xe4d1, 0x9cdd, 0xe4e5, 0x9cde, 0xc8dc, 0xe4e3, /*0xb0-0xb7*/ 0x9cdf, 0x9ce0, 0xc4e7, 0xe4e2, 0x9ce1, 0xe4e1, 0x9ce2, 0x9ce3, /*0xb8-0xbf*/ 0x9ce4, 0xb3fc, 0xe4e8, 0x9ce5, 0x9ce6, 0x9ce7, 0x9ce8, 0xb5e1, /*0xc0-0xc7*/ 0x9ce9, 0x9cea, 0x9ceb, 0xd7cc, 0x9cec, 0x9ced, 0x9cee, 0xe4e6, /*0xc8-0xcf*/ 0x9cef, 0xbbac, 0x9cf0, 0xd7d2, 0xcccf, 0xebf8, 0x9cf1, 0xe4e4, /*0xd0-0xd7*/ 0x9cf2, 0x9cf3, 0xb9f6, 0x9cf4, 0x9cf5, 0x9cf6, 0xd6cd, 0xe4d9, /*0xd8-0xdf*/ 0xe4dc, 0xc2fa, 0xe4de, 0x9cf7, 0xc2cb, 0xc0c4, 0xc2d0, 0x9cf8, /*0xe0-0xe7*/ 0xb1f5, 0xccb2, 0x9cf9, 0x9cfa, 0x9cfb, 0x9cfc, 0x9cfd, 0x9cfe, /*0xe8-0xef*/ 0x9d40, 0x9d41, 0x9d42, 0x9d43, 0xb5ce, 0x9d44, 0x9d45, 0x9d46, /*0xf0-0xf7*/ 0x9d47, 0xe4ef, 0x9d48, 0x9d49, 0x9d4a, 0x9d4b, 0x9d4c, 0x9d4d, /*0xf8-0xff*/ /* 0x6f00 */ 0x9d4e, 0x9d4f, 0xc6af, 0x9d50, 0x9d51, 0x9d52, 0xc6e1, 0x9d53, /*0x00-0x07*/ 0x9d54, 0xe4f5, 0x9d55, 0x9d56, 0x9d57, 0x9d58, 0x9d59, 0xc2a9, /*0x08-0x0f*/ 0x9d5a, 0x9d5b, 0x9d5c, 0xc0ec, 0xd1dd, 0xe4ee, 0x9d5d, 0x9d5e, /*0x10-0x17*/ 0x9d5f, 0x9d60, 0x9d61, 0x9d62, 0x9d63, 0x9d64, 0x9d65, 0x9d66, /*0x18-0x1f*/ 0xc4ae, 0x9d67, 0x9d68, 0x9d69, 0xe4ed, 0x9d6a, 0x9d6b, 0x9d6c, /*0x20-0x27*/ 0x9d6d, 0xe4f6, 0xe4f4, 0xc2fe, 0x9d6e, 0xe4dd, 0x9d6f, 0xe4f0, /*0x28-0x2f*/ 0x9d70, 0xcafe, 0x9d71, 0xd5c4, 0x9d72, 0x9d73, 0xe4f1, 0x9d74, /*0x30-0x37*/ 0x9d75, 0x9d76, 0x9d77, 0x9d78, 0x9d79, 0x9d7a, 0xd1fa, 0x9d7b, /*0x38-0x3f*/ 0x9d7c, 0x9d7d, 0x9d7e, 0x9d80, 0x9d81, 0x9d82, 0xe4eb, 0xe4ec, /*0x40-0x47*/ 0x9d83, 0x9d84, 0x9d85, 0xe4f2, 0x9d86, 0xceab, 0x9d87, 0x9d88, /*0x48-0x4f*/ 0x9d89, 0x9d8a, 0x9d8b, 0x9d8c, 0x9d8d, 0x9d8e, 0x9d8f, 0x9d90, /*0x50-0x57*/ 0xc5cb, 0x9d91, 0x9d92, 0x9d93, 0xc7b1, 0x9d94, 0xc2ba, 0x9d95, /*0x58-0x5f*/ 0x9d96, 0x9d97, 0xe4ea, 0x9d98, 0x9d99, 0x9d9a, 0xc1ca, 0x9d9b, /*0x60-0x67*/ 0x9d9c, 0x9d9d, 0x9d9e, 0x9d9f, 0x9da0, 0xccb6, 0xb3b1, 0x9da1, /*0x68-0x6f*/ 0x9da2, 0x9da3, 0xe4fb, 0x9da4, 0xe4f3, 0x9da5, 0x9da6, 0x9da7, /*0x70-0x77*/ 0xe4fa, 0x9da8, 0xe4fd, 0x9da9, 0xe4fc, 0x9daa, 0x9dab, 0x9dac, /*0x78-0x7f*/ 0x9dad, 0x9dae, 0x9daf, 0x9db0, 0xb3ce, 0x9db1, 0x9db2, 0x9db3, /*0x80-0x87*/ 0xb3ba, 0xe4f7, 0x9db4, 0x9db5, 0xe4f9, 0xe4f8, 0xc5ec, 0x9db6, /*0x88-0x8f*/ 0x9db7, 0x9db8, 0x9db9, 0x9dba, 0x9dbb, 0x9dbc, 0x9dbd, 0x9dbe, /*0x90-0x97*/ 0x9dbf, 0x9dc0, 0x9dc1, 0x9dc2, 0xc0bd, 0x9dc3, 0x9dc4, 0x9dc5, /*0x98-0x9f*/ 0x9dc6, 0xd4e8, 0x9dc7, 0x9dc8, 0x9dc9, 0x9dca, 0x9dcb, 0xe5a2, /*0xa0-0xa7*/ 0x9dcc, 0x9dcd, 0x9dce, 0x9dcf, 0x9dd0, 0x9dd1, 0x9dd2, 0x9dd3, /*0xa8-0xaf*/ 0x9dd4, 0x9dd5, 0x9dd6, 0xb0c4, 0x9dd7, 0x9dd8, 0xe5a4, 0x9dd9, /*0xb0-0xb7*/ 0x9dda, 0xe5a3, 0x9ddb, 0x9ddc, 0x9ddd, 0x9dde, 0x9ddf, 0x9de0, /*0xb8-0xbf*/ 0xbca4, 0x9de1, 0xe5a5, 0x9de2, 0x9de3, 0x9de4, 0x9de5, 0x9de6, /*0xc0-0xc7*/ 0x9de7, 0xe5a1, 0x9de8, 0x9de9, 0x9dea, 0x9deb, 0x9dec, 0x9ded, /*0xc8-0xcf*/ 0x9dee, 0xe4fe, 0xb1f4, 0x9def, 0x9df0, 0x9df1, 0x9df2, 0x9df3, /*0xd0-0xd7*/ 0x9df4, 0x9df5, 0x9df6, 0x9df7, 0x9df8, 0x9df9, 0xe5a8, 0x9dfa, /*0xd8-0xdf*/ 0xe5a9, 0xe5a6, 0x9dfb, 0x9dfc, 0x9dfd, 0x9dfe, 0x9e40, 0x9e41, /*0xe0-0xe7*/ 0x9e42, 0x9e43, 0x9e44, 0x9e45, 0x9e46, 0x9e47, 0xe5a7, 0xe5aa, /*0xe8-0xef*/ 0x9e48, 0x9e49, 0x9e4a, 0x9e4b, 0x9e4c, 0x9e4d, 0x9e4e, 0x9e4f, /*0xf0-0xf7*/ 0x9e50, 0x9e51, 0x9e52, 0x9e53, 0x9e54, 0x9e55, 0x9e56, 0x9e57, /*0xf8-0xff*/ /* 0x7000 */ 0x9e58, 0x9e59, 0x9e5a, 0x9e5b, 0x9e5c, 0x9e5d, 0x9e5e, 0x9e5f, /*0x00-0x07*/ 0x9e60, 0x9e61, 0x9e62, 0x9e63, 0x9e64, 0x9e65, 0x9e66, 0x9e67, /*0x08-0x0f*/ 0x9e68, 0xc6d9, 0x9e69, 0x9e6a, 0x9e6b, 0x9e6c, 0x9e6d, 0x9e6e, /*0x10-0x17*/ 0x9e6f, 0x9e70, 0xe5ab, 0xe5ad, 0x9e71, 0x9e72, 0x9e73, 0x9e74, /*0x18-0x1f*/ 0x9e75, 0x9e76, 0x9e77, 0xe5ac, 0x9e78, 0x9e79, 0x9e7a, 0x9e7b, /*0x20-0x27*/ 0x9e7c, 0x9e7d, 0x9e7e, 0x9e80, 0x9e81, 0x9e82, 0x9e83, 0x9e84, /*0x28-0x2f*/ 0x9e85, 0x9e86, 0x9e87, 0x9e88, 0x9e89, 0xe5af, 0x9e8a, 0x9e8b, /*0x30-0x37*/ 0x9e8c, 0xe5ae, 0x9e8d, 0x9e8e, 0x9e8f, 0x9e90, 0x9e91, 0x9e92, /*0x38-0x3f*/ 0x9e93, 0x9e94, 0x9e95, 0x9e96, 0x9e97, 0x9e98, 0x9e99, 0x9e9a, /*0x40-0x47*/ 0x9e9b, 0x9e9c, 0x9e9d, 0x9e9e, 0xb9e0, 0x9e9f, 0x9ea0, 0xe5b0, /*0x48-0x4f*/ 0x9ea1, 0x9ea2, 0x9ea3, 0x9ea4, 0x9ea5, 0x9ea6, 0x9ea7, 0x9ea8, /*0x50-0x57*/ 0x9ea9, 0x9eaa, 0x9eab, 0x9eac, 0x9ead, 0x9eae, 0xe5b1, 0x9eaf, /*0x58-0x5f*/ 0x9eb0, 0x9eb1, 0x9eb2, 0x9eb3, 0x9eb4, 0x9eb5, 0x9eb6, 0x9eb7, /*0x60-0x67*/ 0x9eb8, 0x9eb9, 0x9eba, 0xbbf0, 0xece1, 0xc3f0, 0x9ebb, 0xb5c6, /*0x68-0x6f*/ 0xbbd2, 0x9ebc, 0x9ebd, 0x9ebe, 0x9ebf, 0xc1e9, 0xd4ee, 0x9ec0, /*0x70-0x77*/ 0xbec4, 0x9ec1, 0x9ec2, 0x9ec3, 0xd7c6, 0x9ec4, 0xd4d6, 0xb2d3, /*0x78-0x7f*/ 0xecbe, 0x9ec5, 0x9ec6, 0x9ec7, 0x9ec8, 0xeac1, 0x9ec9, 0x9eca, /*0x80-0x87*/ 0x9ecb, 0xc2af, 0xb4b6, 0x9ecc, 0x9ecd, 0x9ece, 0xd1d7, 0x9ecf, /*0x88-0x8f*/ 0x9ed0, 0x9ed1, 0xb3b4, 0x9ed2, 0xc8b2, 0xbfbb, 0xecc0, 0x9ed3, /*0x90-0x97*/ 0x9ed4, 0xd6cb, 0x9ed5, 0x9ed6, 0xecbf, 0xecc1, 0x9ed7, 0x9ed8, /*0x98-0x9f*/ 0x9ed9, 0x9eda, 0x9edb, 0x9edc, 0x9edd, 0x9ede, 0x9edf, 0x9ee0, /*0xa0-0xa7*/ 0x9ee1, 0x9ee2, 0x9ee3, 0xecc5, 0xbee6, 0xccbf, 0xc5da, 0xbebc, /*0xa8-0xaf*/ 0x9ee4, 0xecc6, 0x9ee5, 0xb1fe, 0x9ee6, 0x9ee7, 0x9ee8, 0xecc4, /*0xb0-0xb7*/ 0xd5a8, 0xb5e3, 0x9ee9, 0xecc2, 0xc1b6, 0xb3e3, 0x9eea, 0x9eeb, /*0xb8-0xbf*/ 0xecc3, 0xcbb8, 0xc0c3, 0xccfe, 0x9eec, 0x9eed, 0x9eee, 0x9eef, /*0xc0-0xc7*/ 0xc1d2, 0x9ef0, 0xecc8, 0x9ef1, 0x9ef2, 0x9ef3, 0x9ef4, 0x9ef5, /*0xc8-0xcf*/ 0x9ef6, 0x9ef7, 0x9ef8, 0x9ef9, 0x9efa, 0x9efb, 0x9efc, 0x9efd, /*0xd0-0xd7*/ 0xbae6, 0xc0d3, 0x9efe, 0xd6f2, 0x9f40, 0x9f41, 0x9f42, 0xd1cc, /*0xd8-0xdf*/ 0x9f43, 0x9f44, 0x9f45, 0x9f46, 0xbfbe, 0x9f47, 0xb7b3, 0xc9d5, /*0xe0-0xe7*/ 0xecc7, 0xbbe2, 0x9f48, 0xcccc, 0xbdfd, 0xc8c8, 0x9f49, 0xcfa9, /*0xe8-0xef*/ 0x9f4a, 0x9f4b, 0x9f4c, 0x9f4d, 0x9f4e, 0x9f4f, 0x9f50, 0xcde9, /*0xf0-0xf7*/ 0x9f51, 0xc5eb, 0x9f52, 0x9f53, 0x9f54, 0xb7e9, 0x9f55, 0x9f56, /*0xf8-0xff*/ /* 0x7100 */ 0x9f57, 0x9f58, 0x9f59, 0x9f5a, 0x9f5b, 0x9f5c, 0x9f5d, 0x9f5e, /*0x00-0x07*/ 0x9f5f, 0xd1c9, 0xbab8, 0x9f60, 0x9f61, 0x9f62, 0x9f63, 0x9f64, /*0x08-0x0f*/ 0xecc9, 0x9f65, 0x9f66, 0xecca, 0x9f67, 0xbbc0, 0xeccb, 0x9f68, /*0x10-0x17*/ 0xece2, 0xb1ba, 0xb7d9, 0x9f69, 0x9f6a, 0x9f6b, 0x9f6c, 0x9f6d, /*0x18-0x1f*/ 0x9f6e, 0x9f6f, 0x9f70, 0x9f71, 0x9f72, 0x9f73, 0xbdb9, 0x9f74, /*0x20-0x27*/ 0x9f75, 0x9f76, 0x9f77, 0x9f78, 0x9f79, 0x9f7a, 0x9f7b, 0xeccc, /*0x28-0x2f*/ 0xd1e6, 0xeccd, 0x9f7c, 0x9f7d, 0x9f7e, 0x9f80, 0xc8bb, 0x9f81, /*0x30-0x37*/ 0x9f82, 0x9f83, 0x9f84, 0x9f85, 0x9f86, 0x9f87, 0x9f88, 0x9f89, /*0x38-0x3f*/ 0x9f8a, 0x9f8b, 0x9f8c, 0x9f8d, 0x9f8e, 0xecd1, 0x9f8f, 0x9f90, /*0x40-0x47*/ 0x9f91, 0x9f92, 0xecd3, 0x9f93, 0xbbcd, 0x9f94, 0xbce5, 0x9f95, /*0x48-0x4f*/ 0x9f96, 0x9f97, 0x9f98, 0x9f99, 0x9f9a, 0x9f9b, 0x9f9c, 0x9f9d, /*0x50-0x57*/ 0x9f9e, 0x9f9f, 0x9fa0, 0x9fa1, 0xeccf, 0x9fa2, 0xc9b7, 0x9fa3, /*0x58-0x5f*/ 0x9fa4, 0x9fa5, 0x9fa6, 0x9fa7, 0xc3ba, 0x9fa8, 0xece3, 0xd5d5, /*0x60-0x67*/ 0xecd0, 0x9fa9, 0x9faa, 0x9fab, 0x9fac, 0x9fad, 0xd6f3, 0x9fae, /*0x68-0x6f*/ 0x9faf, 0x9fb0, 0xecd2, 0xecce, 0x9fb1, 0x9fb2, 0x9fb3, 0x9fb4, /*0x70-0x77*/ 0xecd4, 0x9fb5, 0xecd5, 0x9fb6, 0x9fb7, 0xc9bf, 0x9fb8, 0x9fb9, /*0x78-0x7f*/ 0x9fba, 0x9fbb, 0x9fbc, 0x9fbd, 0xcfa8, 0x9fbe, 0x9fbf, 0x9fc0, /*0x80-0x87*/ 0x9fc1, 0x9fc2, 0xd0dc, 0x9fc3, 0x9fc4, 0x9fc5, 0x9fc6, 0xd1ac, /*0x88-0x8f*/ 0x9fc7, 0x9fc8, 0x9fc9, 0x9fca, 0xc8db, 0x9fcb, 0x9fcc, 0x9fcd, /*0x90-0x97*/ 0xecd6, 0xcef5, 0x9fce, 0x9fcf, 0x9fd0, 0x9fd1, 0x9fd2, 0xcaec, /*0x98-0x9f*/ 0xecda, 0x9fd3, 0x9fd4, 0x9fd5, 0x9fd6, 0x9fd7, 0x9fd8, 0x9fd9, /*0xa0-0xa7*/ 0xecd9, 0x9fda, 0x9fdb, 0x9fdc, 0xb0be, 0x9fdd, 0x9fde, 0x9fdf, /*0xa8-0xaf*/ 0x9fe0, 0x9fe1, 0x9fe2, 0xecd7, 0x9fe3, 0xecd8, 0x9fe4, 0x9fe5, /*0xb0-0xb7*/ 0x9fe6, 0xece4, 0x9fe7, 0x9fe8, 0x9fe9, 0x9fea, 0x9feb, 0x9fec, /*0xb8-0xbf*/ 0x9fed, 0x9fee, 0x9fef, 0xc8bc, 0x9ff0, 0x9ff1, 0x9ff2, 0x9ff3, /*0xc0-0xc7*/ 0x9ff4, 0x9ff5, 0x9ff6, 0x9ff7, 0x9ff8, 0x9ff9, 0xc1c7, 0x9ffa, /*0xc8-0xcf*/ 0x9ffb, 0x9ffc, 0x9ffd, 0x9ffe, 0xecdc, 0xd1e0, 0xa040, 0xa041, /*0xd0-0xd7*/ 0xa042, 0xa043, 0xa044, 0xa045, 0xa046, 0xa047, 0xa048, 0xa049, /*0xd8-0xdf*/ 0xecdb, 0xa04a, 0xa04b, 0xa04c, 0xa04d, 0xd4ef, 0xa04e, 0xecdd, /*0xe0-0xe7*/ 0xa04f, 0xa050, 0xa051, 0xa052, 0xa053, 0xa054, 0xdbc6, 0xa055, /*0xe8-0xef*/ 0xa056, 0xa057, 0xa058, 0xa059, 0xa05a, 0xa05b, 0xa05c, 0xa05d, /*0xf0-0xf7*/ 0xa05e, 0xecde, 0xa05f, 0xa060, 0xa061, 0xa062, 0xa063, 0xa064, /*0xf8-0xff*/ /* 0x7200 */ 0xa065, 0xa066, 0xa067, 0xa068, 0xa069, 0xa06a, 0xb1ac, 0xa06b, /*0x00-0x07*/ 0xa06c, 0xa06d, 0xa06e, 0xa06f, 0xa070, 0xa071, 0xa072, 0xa073, /*0x08-0x0f*/ 0xa074, 0xa075, 0xa076, 0xa077, 0xa078, 0xa079, 0xa07a, 0xa07b, /*0x10-0x17*/ 0xa07c, 0xa07d, 0xa07e, 0xa080, 0xa081, 0xecdf, 0xa082, 0xa083, /*0x18-0x1f*/ 0xa084, 0xa085, 0xa086, 0xa087, 0xa088, 0xa089, 0xa08a, 0xa08b, /*0x20-0x27*/ 0xece0, 0xa08c, 0xd7a6, 0xa08d, 0xc5c0, 0xa08e, 0xa08f, 0xa090, /*0x28-0x2f*/ 0xebbc, 0xb0ae, 0xa091, 0xa092, 0xa093, 0xbef4, 0xb8b8, 0xd2af, /*0x30-0x37*/ 0xb0d6, 0xb5f9, 0xa094, 0xd8b3, 0xa095, 0xcbac, 0xa096, 0xe3dd, /*0x38-0x3f*/ 0xa097, 0xa098, 0xa099, 0xa09a, 0xa09b, 0xa09c, 0xa09d, 0xc6ac, /*0x40-0x47*/ 0xb0e6, 0xa09e, 0xa09f, 0xa0a0, 0xc5c6, 0xebb9, 0xa0a1, 0xa0a2, /*0x48-0x4f*/ 0xa0a3, 0xa0a4, 0xebba, 0xa0a5, 0xa0a6, 0xa0a7, 0xebbb, 0xa0a8, /*0x50-0x57*/ 0xa0a9, 0xd1c0, 0xa0aa, 0xc5a3, 0xa0ab, 0xeaf2, 0xa0ac, 0xc4b2, /*0x58-0x5f*/ 0xa0ad, 0xc4b5, 0xc0ce, 0xa0ae, 0xa0af, 0xa0b0, 0xeaf3, 0xc4c1, /*0x60-0x67*/ 0xa0b1, 0xceef, 0xa0b2, 0xa0b3, 0xa0b4, 0xa0b5, 0xeaf0, 0xeaf4, /*0x68-0x6f*/ 0xa0b6, 0xa0b7, 0xc9fc, 0xa0b8, 0xa0b9, 0xc7a3, 0xa0ba, 0xa0bb, /*0x70-0x77*/ 0xa0bc, 0xccd8, 0xcefe, 0xa0bd, 0xa0be, 0xa0bf, 0xeaf5, 0xeaf6, /*0x78-0x7f*/ 0xcfac, 0xc0e7, 0xa0c0, 0xa0c1, 0xeaf7, 0xa0c2, 0xa0c3, 0xa0c4, /*0x80-0x87*/ 0xa0c5, 0xa0c6, 0xb6bf, 0xeaf8, 0xa0c7, 0xeaf9, 0xa0c8, 0xeafa, /*0x88-0x8f*/ 0xa0c9, 0xa0ca, 0xeafb, 0xa0cb, 0xa0cc, 0xa0cd, 0xa0ce, 0xa0cf, /*0x90-0x97*/ 0xa0d0, 0xa0d1, 0xa0d2, 0xa0d3, 0xa0d4, 0xa0d5, 0xa0d6, 0xeaf1, /*0x98-0x9f*/ 0xa0d7, 0xa0d8, 0xa0d9, 0xa0da, 0xa0db, 0xa0dc, 0xa0dd, 0xa0de, /*0xa0-0xa7*/ 0xa0df, 0xa0e0, 0xa0e1, 0xa0e2, 0xc8ae, 0xe1eb, 0xa0e3, 0xb7b8, /*0xa8-0xaf*/ 0xe1ec, 0xa0e4, 0xa0e5, 0xa0e6, 0xe1ed, 0xa0e7, 0xd7b4, 0xe1ee, /*0xb0-0xb7*/ 0xe1ef, 0xd3cc, 0xa0e8, 0xa0e9, 0xa0ea, 0xa0eb, 0xa0ec, 0xa0ed, /*0xb8-0xbf*/ 0xa0ee, 0xe1f1, 0xbff1, 0xe1f0, 0xb5d2, 0xa0ef, 0xa0f0, 0xa0f1, /*0xc0-0xc7*/ 0xb1b7, 0xa0f2, 0xa0f3, 0xa0f4, 0xa0f5, 0xe1f3, 0xe1f2, 0xa0f6, /*0xc8-0xcf*/ 0xbafc, 0xa0f7, 0xe1f4, 0xa0f8, 0xa0f9, 0xa0fa, 0xa0fb, 0xb9b7, /*0xd0-0xd7*/ 0xa0fc, 0xbed1, 0xa0fd, 0xa0fe, 0xaa40, 0xaa41, 0xc4fc, 0xaa42, /*0xd8-0xdf*/ 0xbadd, 0xbdc6, 0xaa43, 0xaa44, 0xaa45, 0xaa46, 0xaa47, 0xaa48, /*0xe0-0xe7*/ 0xe1f5, 0xe1f7, 0xaa49, 0xaa4a, 0xb6c0, 0xcfc1, 0xcaa8, 0xe1f6, /*0xe8-0xef*/ 0xd5f8, 0xd3fc, 0xe1f8, 0xe1fc, 0xe1f9, 0xaa4b, 0xaa4c, 0xe1fa, /*0xf0-0xf7*/ 0xc0ea, 0xaa4d, 0xe1fe, 0xe2a1, 0xc0c7, 0xaa4e, 0xaa4f, 0xaa50, /*0xf8-0xff*/ /* 0x7300 */ 0xaa51, 0xe1fb, 0xaa52, 0xe1fd, 0xaa53, 0xaa54, 0xaa55, 0xaa56, /*0x00-0x07*/ 0xaa57, 0xaa58, 0xe2a5, 0xaa59, 0xaa5a, 0xaa5b, 0xc1d4, 0xaa5c, /*0x08-0x0f*/ 0xaa5d, 0xaa5e, 0xaa5f, 0xe2a3, 0xaa60, 0xe2a8, 0xb2fe, 0xe2a2, /*0x10-0x17*/ 0xaa61, 0xaa62, 0xaa63, 0xc3cd, 0xb2c2, 0xe2a7, 0xe2a6, 0xaa64, /*0x18-0x1f*/ 0xaa65, 0xe2a4, 0xe2a9, 0xaa66, 0xaa67, 0xe2ab, 0xaa68, 0xaa69, /*0x20-0x27*/ 0xaa6a, 0xd0c9, 0xd6ed, 0xc3a8, 0xe2ac, 0xaa6b, 0xcfd7, 0xaa6c, /*0x28-0x2f*/ 0xaa6d, 0xe2ae, 0xaa6e, 0xaa6f, 0xbaef, 0xaa70, 0xaa71, 0xe9e0, /*0x30-0x37*/ 0xe2ad, 0xe2aa, 0xaa72, 0xaa73, 0xaa74, 0xaa75, 0xbbab, 0xd4b3, /*0x38-0x3f*/ 0xaa76, 0xaa77, 0xaa78, 0xaa79, 0xaa7a, 0xaa7b, 0xaa7c, 0xaa7d, /*0x40-0x47*/ 0xaa7e, 0xaa80, 0xaa81, 0xaa82, 0xaa83, 0xe2b0, 0xaa84, 0xaa85, /*0x48-0x4f*/ 0xe2af, 0xaa86, 0xe9e1, 0xaa87, 0xaa88, 0xaa89, 0xaa8a, 0xe2b1, /*0x50-0x57*/ 0xaa8b, 0xaa8c, 0xaa8d, 0xaa8e, 0xaa8f, 0xaa90, 0xaa91, 0xaa92, /*0x58-0x5f*/ 0xe2b2, 0xaa93, 0xaa94, 0xaa95, 0xaa96, 0xaa97, 0xaa98, 0xaa99, /*0x60-0x67*/ 0xaa9a, 0xaa9b, 0xaa9c, 0xaa9d, 0xe2b3, 0xcca1, 0xaa9e, 0xe2b4, /*0x68-0x6f*/ 0xaa9f, 0xaaa0, 0xab40, 0xab41, 0xab42, 0xab43, 0xab44, 0xab45, /*0x70-0x77*/ 0xab46, 0xab47, 0xab48, 0xab49, 0xab4a, 0xab4b, 0xe2b5, 0xab4c, /*0x78-0x7f*/ 0xab4d, 0xab4e, 0xab4f, 0xab50, 0xd0fe, 0xab51, 0xab52, 0xc2ca, /*0x80-0x87*/ 0xab53, 0xd3f1, 0xab54, 0xcdf5, 0xab55, 0xab56, 0xe7e0, 0xab57, /*0x88-0x8f*/ 0xab58, 0xe7e1, 0xab59, 0xab5a, 0xab5b, 0xab5c, 0xbec1, 0xab5d, /*0x90-0x97*/ 0xab5e, 0xab5f, 0xab60, 0xc2ea, 0xab61, 0xab62, 0xab63, 0xe7e4, /*0x98-0x9f*/ 0xab64, 0xab65, 0xe7e3, 0xab66, 0xab67, 0xab68, 0xab69, 0xab6a, /*0xa0-0xa7*/ 0xab6b, 0xcde6, 0xab6c, 0xc3b5, 0xab6d, 0xab6e, 0xe7e2, 0xbbb7, /*0xa8-0xaf*/ 0xcfd6, 0xab6f, 0xc1e1, 0xe7e9, 0xab70, 0xab71, 0xab72, 0xe7e8, /*0xb0-0xb7*/ 0xab73, 0xab74, 0xe7f4, 0xb2a3, 0xab75, 0xab76, 0xab77, 0xab78, /*0xb8-0xbf*/ 0xe7ea, 0xab79, 0xe7e6, 0xab7a, 0xab7b, 0xab7c, 0xab7d, 0xab7e, /*0xc0-0xc7*/ 0xe7ec, 0xe7eb, 0xc9ba, 0xab80, 0xab81, 0xd5e4, 0xab82, 0xe7e5, /*0xc8-0xcf*/ 0xb7a9, 0xe7e7, 0xab83, 0xab84, 0xab85, 0xab86, 0xab87, 0xab88, /*0xd0-0xd7*/ 0xab89, 0xe7ee, 0xab8a, 0xab8b, 0xab8c, 0xab8d, 0xe7f3, 0xab8e, /*0xd8-0xdf*/ 0xd6e9, 0xab8f, 0xab90, 0xab91, 0xab92, 0xe7ed, 0xab93, 0xe7f2, /*0xe0-0xe7*/ 0xab94, 0xe7f1, 0xab95, 0xab96, 0xab97, 0xb0e0, 0xab98, 0xab99, /*0xe8-0xef*/ 0xab9a, 0xab9b, 0xe7f5, 0xab9c, 0xab9d, 0xab9e, 0xab9f, 0xaba0, /*0xf0-0xf7*/ 0xac40, 0xac41, 0xac42, 0xac43, 0xac44, 0xac45, 0xac46, 0xac47, /*0xf8-0xff*/ /* 0x7400 */ 0xac48, 0xac49, 0xac4a, 0xc7f2, 0xac4b, 0xc0c5, 0xc0ed, 0xac4c, /*0x00-0x07*/ 0xac4d, 0xc1f0, 0xe7f0, 0xac4e, 0xac4f, 0xac50, 0xac51, 0xe7f6, /*0x08-0x0f*/ 0xcbf6, 0xac52, 0xac53, 0xac54, 0xac55, 0xac56, 0xac57, 0xac58, /*0x10-0x17*/ 0xac59, 0xac5a, 0xe8a2, 0xe8a1, 0xac5b, 0xac5c, 0xac5d, 0xac5e, /*0x18-0x1f*/ 0xac5f, 0xac60, 0xd7c1, 0xac61, 0xac62, 0xe7fa, 0xe7f9, 0xac63, /*0x20-0x27*/ 0xe7fb, 0xac64, 0xe7f7, 0xac65, 0xe7fe, 0xac66, 0xe7fd, 0xac67, /*0x28-0x2f*/ 0xe7fc, 0xac68, 0xac69, 0xc1d5, 0xc7d9, 0xc5fd, 0xc5c3, 0xac6a, /*0x30-0x37*/ 0xac6b, 0xac6c, 0xac6d, 0xac6e, 0xc7ed, 0xac6f, 0xac70, 0xac71, /*0x38-0x3f*/ 0xac72, 0xe8a3, 0xac73, 0xac74, 0xac75, 0xac76, 0xac77, 0xac78, /*0x40-0x47*/ 0xac79, 0xac7a, 0xac7b, 0xac7c, 0xac7d, 0xac7e, 0xac80, 0xac81, /*0x48-0x4f*/ 0xac82, 0xac83, 0xac84, 0xac85, 0xac86, 0xe8a6, 0xac87, 0xe8a5, /*0x50-0x57*/ 0xac88, 0xe8a7, 0xbaf7, 0xe7f8, 0xe8a4, 0xac89, 0xc8f0, 0xc9aa, /*0x58-0x5f*/ 0xac8a, 0xac8b, 0xac8c, 0xac8d, 0xac8e, 0xac8f, 0xac90, 0xac91, /*0x60-0x67*/ 0xac92, 0xac93, 0xac94, 0xac95, 0xac96, 0xe8a9, 0xac97, 0xac98, /*0x68-0x6f*/ 0xb9e5, 0xac99, 0xac9a, 0xac9b, 0xac9c, 0xac9d, 0xd1fe, 0xe8a8, /*0x70-0x77*/ 0xac9e, 0xac9f, 0xaca0, 0xad40, 0xad41, 0xad42, 0xe8aa, 0xad43, /*0x78-0x7f*/ 0xe8ad, 0xe8ae, 0xad44, 0xc1a7, 0xad45, 0xad46, 0xad47, 0xe8af, /*0x80-0x87*/ 0xad48, 0xad49, 0xad4a, 0xe8b0, 0xad4b, 0xad4c, 0xe8ac, 0xad4d, /*0x88-0x8f*/ 0xe8b4, 0xad4e, 0xad4f, 0xad50, 0xad51, 0xad52, 0xad53, 0xad54, /*0x90-0x97*/ 0xad55, 0xad56, 0xad57, 0xad58, 0xe8ab, 0xad59, 0xe8b1, 0xad5a, /*0x98-0x9f*/ 0xad5b, 0xad5c, 0xad5d, 0xad5e, 0xad5f, 0xad60, 0xad61, 0xe8b5, /*0xa0-0xa7*/ 0xe8b2, 0xe8b3, 0xad62, 0xad63, 0xad64, 0xad65, 0xad66, 0xad67, /*0xa8-0xaf*/ 0xad68, 0xad69, 0xad6a, 0xad6b, 0xad6c, 0xad6d, 0xad6e, 0xad6f, /*0xb0-0xb7*/ 0xad70, 0xad71, 0xe8b7, 0xad72, 0xad73, 0xad74, 0xad75, 0xad76, /*0xb8-0xbf*/ 0xad77, 0xad78, 0xad79, 0xad7a, 0xad7b, 0xad7c, 0xad7d, 0xad7e, /*0xc0-0xc7*/ 0xad80, 0xad81, 0xad82, 0xad83, 0xad84, 0xad85, 0xad86, 0xad87, /*0xc8-0xcf*/ 0xad88, 0xad89, 0xe8b6, 0xad8a, 0xad8b, 0xad8c, 0xad8d, 0xad8e, /*0xd0-0xd7*/ 0xad8f, 0xad90, 0xad91, 0xad92, 0xb9cf, 0xad93, 0xf0ac, 0xad94, /*0xd8-0xdf*/ 0xf0ad, 0xad95, 0xc6b0, 0xb0ea, 0xc8bf, 0xad96, 0xcddf, 0xad97, /*0xe0-0xe7*/ 0xad98, 0xad99, 0xad9a, 0xad9b, 0xad9c, 0xad9d, 0xcecd, 0xeab1, /*0xe8-0xef*/ 0xad9e, 0xad9f, 0xada0, 0xae40, 0xeab2, 0xae41, 0xc6bf, 0xb4c9, /*0xf0-0xf7*/ 0xae42, 0xae43, 0xae44, 0xae45, 0xae46, 0xae47, 0xae48, 0xeab3, /*0xf8-0xff*/ /* 0x7500 */ 0xae49, 0xae4a, 0xae4b, 0xae4c, 0xd5e7, 0xae4d, 0xae4e, 0xae4f, /*0x00-0x07*/ 0xae50, 0xae51, 0xae52, 0xae53, 0xae54, 0xddf9, 0xae55, 0xeab4, /*0x08-0x0f*/ 0xae56, 0xeab5, 0xae57, 0xeab6, 0xae58, 0xae59, 0xae5a, 0xae5b, /*0x10-0x17*/ 0xb8ca, 0xdfb0, 0xc9f5, 0xae5c, 0xccf0, 0xae5d, 0xae5e, 0xc9fa, /*0x18-0x1f*/ 0xae5f, 0xae60, 0xae61, 0xae62, 0xae63, 0xc9fb, 0xae64, 0xae65, /*0x20-0x27*/ 0xd3c3, 0xcba6, 0xae66, 0xb8a6, 0xf0ae, 0xb1c2, 0xae67, 0xe5b8, /*0x28-0x2f*/ 0xccef, 0xd3c9, 0xbcd7, 0xc9ea, 0xae68, 0xb5e7, 0xae69, 0xc4d0, /*0x30-0x37*/ 0xb5e9, 0xae6a, 0xeeae, 0xbbad, 0xae6b, 0xae6c, 0xe7de, 0xae6d, /*0x38-0x3f*/ 0xeeaf, 0xae6e, 0xae6f, 0xae70, 0xae71, 0xb3a9, 0xae72, 0xae73, /*0x40-0x47*/ 0xeeb2, 0xae74, 0xae75, 0xeeb1, 0xbde7, 0xae76, 0xeeb0, 0xceb7, /*0x48-0x4f*/ 0xae77, 0xae78, 0xae79, 0xae7a, 0xc5cf, 0xae7b, 0xae7c, 0xae7d, /*0x50-0x57*/ 0xae7e, 0xc1f4, 0xdbce, 0xeeb3, 0xd0f3, 0xae80, 0xae81, 0xae82, /*0x58-0x5f*/ 0xae83, 0xae84, 0xae85, 0xae86, 0xae87, 0xc2d4, 0xc6e8, 0xae88, /*0x60-0x67*/ 0xae89, 0xae8a, 0xb7ac, 0xae8b, 0xae8c, 0xae8d, 0xae8e, 0xae8f, /*0x68-0x6f*/ 0xae90, 0xae91, 0xeeb4, 0xae92, 0xb3eb, 0xae93, 0xae94, 0xae95, /*0x70-0x77*/ 0xbbfb, 0xeeb5, 0xae96, 0xae97, 0xae98, 0xae99, 0xae9a, 0xe7dc, /*0x78-0x7f*/ 0xae9b, 0xae9c, 0xae9d, 0xeeb6, 0xae9e, 0xae9f, 0xbdae, 0xaea0, /*0x80-0x87*/ 0xaf40, 0xaf41, 0xaf42, 0xf1e2, 0xaf43, 0xaf44, 0xaf45, 0xcae8, /*0x88-0x8f*/ 0xaf46, 0xd2c9, 0xf0da, 0xaf47, 0xf0db, 0xaf48, 0xf0dc, 0xc1c6, /*0x90-0x97*/ 0xaf49, 0xb8ed, 0xbece, 0xaf4a, 0xaf4b, 0xf0de, 0xaf4c, 0xc5b1, /*0x98-0x9f*/ 0xf0dd, 0xd1f1, 0xaf4d, 0xf0e0, 0xb0cc, 0xbdea, 0xaf4e, 0xaf4f, /*0xa0-0xa7*/ 0xaf50, 0xaf51, 0xaf52, 0xd2df, 0xf0df, 0xaf53, 0xb4af, 0xb7e8, /*0xa8-0xaf*/ 0xf0e6, 0xf0e5, 0xc6a3, 0xf0e1, 0xf0e2, 0xb4c3, 0xaf54, 0xaf55, /*0xb0-0xb7*/ 0xf0e3, 0xd5ee, 0xaf56, 0xaf57, 0xccdb, 0xbed2, 0xbcb2, 0xaf58, /*0xb8-0xbf*/ 0xaf59, 0xaf5a, 0xf0e8, 0xf0e7, 0xf0e4, 0xb2a1, 0xaf5b, 0xd6a2, /*0xc0-0xc7*/ 0xd3b8, 0xbeb7, 0xc8ac, 0xaf5c, 0xaf5d, 0xf0ea, 0xaf5e, 0xaf5f, /*0xc8-0xcf*/ 0xaf60, 0xaf61, 0xd1f7, 0xaf62, 0xd6cc, 0xbadb, 0xf0e9, 0xaf63, /*0xd0-0xd7*/ 0xb6bb, 0xaf64, 0xaf65, 0xcdb4, 0xaf66, 0xaf67, 0xc6a6, 0xaf68, /*0xd8-0xdf*/ 0xaf69, 0xaf6a, 0xc1a1, 0xf0eb, 0xf0ee, 0xaf6b, 0xf0ed, 0xf0f0, /*0xe0-0xe7*/ 0xf0ec, 0xaf6c, 0xbbbe, 0xf0ef, 0xaf6d, 0xaf6e, 0xaf6f, 0xaf70, /*0xe8-0xef*/ 0xccb5, 0xf0f2, 0xaf71, 0xaf72, 0xb3d5, 0xaf73, 0xaf74, 0xaf75, /*0xf0-0xf7*/ 0xaf76, 0xb1d4, 0xaf77, 0xaf78, 0xf0f3, 0xaf79, 0xaf7a, 0xf0f4, /*0xf8-0xff*/ /* 0x7600 */ 0xf0f6, 0xb4e1, 0xaf7b, 0xf0f1, 0xaf7c, 0xf0f7, 0xaf7d, 0xaf7e, /*0x00-0x07*/ 0xaf80, 0xaf81, 0xf0fa, 0xaf82, 0xf0f8, 0xaf83, 0xaf84, 0xaf85, /*0x08-0x0f*/ 0xf0f5, 0xaf86, 0xaf87, 0xaf88, 0xaf89, 0xf0fd, 0xaf8a, 0xf0f9, /*0x10-0x17*/ 0xf0fc, 0xf0fe, 0xaf8b, 0xf1a1, 0xaf8c, 0xaf8d, 0xaf8e, 0xcec1, /*0x18-0x1f*/ 0xf1a4, 0xaf8f, 0xf1a3, 0xaf90, 0xc1f6, 0xf0fb, 0xcadd, 0xaf91, /*0x20-0x27*/ 0xaf92, 0xb4f1, 0xb1f1, 0xccb1, 0xaf93, 0xf1a6, 0xaf94, 0xaf95, /*0x28-0x2f*/ 0xf1a7, 0xaf96, 0xaf97, 0xf1ac, 0xd5ce, 0xf1a9, 0xaf98, 0xaf99, /*0x30-0x37*/ 0xc8b3, 0xaf9a, 0xaf9b, 0xaf9c, 0xf1a2, 0xaf9d, 0xf1ab, 0xf1a8, /*0x38-0x3f*/ 0xf1a5, 0xaf9e, 0xaf9f, 0xf1aa, 0xafa0, 0xb040, 0xb041, 0xb042, /*0x40-0x47*/ 0xb043, 0xb044, 0xb045, 0xb046, 0xb0a9, 0xf1ad, 0xb047, 0xb048, /*0x48-0x4f*/ 0xb049, 0xb04a, 0xb04b, 0xb04c, 0xf1af, 0xb04d, 0xf1b1, 0xb04e, /*0x50-0x57*/ 0xb04f, 0xb050, 0xb051, 0xb052, 0xf1b0, 0xb053, 0xf1ae, 0xb054, /*0x58-0x5f*/ 0xb055, 0xb056, 0xb057, 0xd1a2, 0xb058, 0xb059, 0xb05a, 0xb05b, /*0x60-0x67*/ 0xb05c, 0xb05d, 0xb05e, 0xf1b2, 0xb05f, 0xb060, 0xb061, 0xf1b3, /*0x68-0x6f*/ 0xb062, 0xb063, 0xb064, 0xb065, 0xb066, 0xb067, 0xb068, 0xb069, /*0x70-0x77*/ 0xb9ef, 0xb06a, 0xb06b, 0xb5c7, 0xb06c, 0xb0d7, 0xb0d9, 0xb06d, /*0x78-0x7f*/ 0xb06e, 0xb06f, 0xd4ed, 0xb070, 0xb5c4, 0xb071, 0xbdd4, 0xbbca, /*0x80-0x87*/ 0xf0a7, 0xb072, 0xb073, 0xb8de, 0xb074, 0xb075, 0xf0a8, 0xb076, /*0x88-0x8f*/ 0xb077, 0xb0a8, 0xb078, 0xf0a9, 0xb079, 0xb07a, 0xcdee, 0xb07b, /*0x90-0x97*/ 0xb07c, 0xf0aa, 0xb07d, 0xb07e, 0xb080, 0xb081, 0xb082, 0xb083, /*0x98-0x9f*/ 0xb084, 0xb085, 0xb086, 0xb087, 0xf0ab, 0xb088, 0xb089, 0xb08a, /*0xa0-0xa7*/ 0xb08b, 0xb08c, 0xb08d, 0xb08e, 0xb08f, 0xb090, 0xc6a4, 0xb091, /*0xa8-0xaf*/ 0xb092, 0xd6e5, 0xf1e4, 0xb093, 0xf1e5, 0xb094, 0xb095, 0xb096, /*0xb0-0xb7*/ 0xb097, 0xb098, 0xb099, 0xb09a, 0xb09b, 0xb09c, 0xb09d, 0xc3f3, /*0xb8-0xbf*/ 0xb09e, 0xb09f, 0xd3db, 0xb0a0, 0xb140, 0xd6d1, 0xc5e8, 0xb141, /*0xc0-0xc7*/ 0xd3af, 0xb142, 0xd2e6, 0xb143, 0xb144, 0xeec1, 0xb0bb, 0xd5b5, /*0xc8-0xcf*/ 0xd1ce, 0xbce0, 0xbad0, 0xb145, 0xbff8, 0xb146, 0xb8c7, 0xb5c1, /*0xd0-0xd7*/ 0xc5cc, 0xb147, 0xb148, 0xcaa2, 0xb149, 0xb14a, 0xb14b, 0xc3cb, /*0xd8-0xdf*/ 0xb14c, 0xb14d, 0xb14e, 0xb14f, 0xb150, 0xeec2, 0xb151, 0xb152, /*0xe0-0xe7*/ 0xb153, 0xb154, 0xb155, 0xb156, 0xb157, 0xb158, 0xc4bf, 0xb6a2, /*0xe8-0xef*/ 0xb159, 0xedec, 0xc3a4, 0xb15a, 0xd6b1, 0xb15b, 0xb15c, 0xb15d, /*0xf0-0xf7*/ 0xcfe0, 0xedef, 0xb15e, 0xb15f, 0xc5ce, 0xb160, 0xb6dc, 0xb161, /*0xf8-0xff*/ /* 0x7700 */ 0xb162, 0xcaa1, 0xb163, 0xb164, 0xeded, 0xb165, 0xb166, 0xedf0, /*0x00-0x07*/ 0xedf1, 0xc3bc, 0xb167, 0xbfb4, 0xb168, 0xedee, 0xb169, 0xb16a, /*0x08-0x0f*/ 0xb16b, 0xb16c, 0xb16d, 0xb16e, 0xb16f, 0xb170, 0xb171, 0xb172, /*0x10-0x17*/ 0xb173, 0xedf4, 0xedf2, 0xb174, 0xb175, 0xb176, 0xb177, 0xd5e6, /*0x18-0x1f*/ 0xc3df, 0xb178, 0xedf3, 0xb179, 0xb17a, 0xb17b, 0xedf6, 0xb17c, /*0x20-0x27*/ 0xd5a3, 0xd1a3, 0xb17d, 0xb17e, 0xb180, 0xedf5, 0xb181, 0xc3d0, /*0x28-0x2f*/ 0xb182, 0xb183, 0xb184, 0xb185, 0xb186, 0xedf7, 0xbff4, 0xbeec, /*0x30-0x37*/ 0xedf8, 0xb187, 0xccf7, 0xb188, 0xd1db, 0xb189, 0xb18a, 0xb18b, /*0x38-0x3f*/ 0xd7c5, 0xd5f6, 0xb18c, 0xedfc, 0xb18d, 0xb18e, 0xb18f, 0xedfb, /*0x40-0x47*/ 0xb190, 0xb191, 0xb192, 0xb193, 0xb194, 0xb195, 0xb196, 0xb197, /*0x48-0x4f*/ 0xedf9, 0xedfa, 0xb198, 0xb199, 0xb19a, 0xb19b, 0xb19c, 0xb19d, /*0x50-0x57*/ 0xb19e, 0xb19f, 0xedfd, 0xbea6, 0xb1a0, 0xb240, 0xb241, 0xb242, /*0x58-0x5f*/ 0xb243, 0xcbaf, 0xeea1, 0xb6bd, 0xb244, 0xeea2, 0xc4c0, 0xb245, /*0x60-0x67*/ 0xedfe, 0xb246, 0xb247, 0xbdde, 0xb2c7, 0xb248, 0xb249, 0xb24a, /*0x68-0x6f*/ 0xb24b, 0xb24c, 0xb24d, 0xb24e, 0xb24f, 0xb250, 0xb251, 0xb252, /*0x70-0x77*/ 0xb253, 0xb6c3, 0xb254, 0xb255, 0xb256, 0xeea5, 0xd8ba, 0xeea3, /*0x78-0x7f*/ 0xeea6, 0xb257, 0xb258, 0xb259, 0xc3e9, 0xb3f2, 0xb25a, 0xb25b, /*0x80-0x87*/ 0xb25c, 0xb25d, 0xb25e, 0xb25f, 0xeea7, 0xeea4, 0xcfb9, 0xb260, /*0x88-0x8f*/ 0xb261, 0xeea8, 0xc2f7, 0xb262, 0xb263, 0xb264, 0xb265, 0xb266, /*0x90-0x97*/ 0xb267, 0xb268, 0xb269, 0xb26a, 0xb26b, 0xb26c, 0xb26d, 0xeea9, /*0x98-0x9f*/ 0xeeaa, 0xb26e, 0xdeab, 0xb26f, 0xb270, 0xc6b3, 0xb271, 0xc7c6, /*0xa0-0xa7*/ 0xb272, 0xd6f5, 0xb5c9, 0xb273, 0xcbb2, 0xb274, 0xb275, 0xb276, /*0xa8-0xaf*/ 0xeeab, 0xb277, 0xb278, 0xcdab, 0xb279, 0xeeac, 0xb27a, 0xb27b, /*0xb0-0xb7*/ 0xb27c, 0xb27d, 0xb27e, 0xd5b0, 0xb280, 0xeead, 0xb281, 0xf6c4, /*0xb8-0xbf*/ 0xb282, 0xb283, 0xb284, 0xb285, 0xb286, 0xb287, 0xb288, 0xb289, /*0xc0-0xc7*/ 0xb28a, 0xb28b, 0xb28c, 0xb28d, 0xb28e, 0xdbc7, 0xb28f, 0xb290, /*0xc8-0xcf*/ 0xb291, 0xb292, 0xb293, 0xb294, 0xb295, 0xb296, 0xb297, 0xb4a3, /*0xd0-0xd7*/ 0xb298, 0xb299, 0xb29a, 0xc3ac, 0xf1e6, 0xb29b, 0xb29c, 0xb29d, /*0xd8-0xdf*/ 0xb29e, 0xb29f, 0xcab8, 0xd2d3, 0xb2a0, 0xd6aa, 0xb340, 0xeff2, /*0xe0-0xe7*/ 0xb341, 0xbed8, 0xb342, 0xbdc3, 0xeff3, 0xb6cc, 0xb0ab, 0xb343, /*0xe8-0xef*/ 0xb344, 0xb345, 0xb346, 0xcaaf, 0xb347, 0xb348, 0xedb6, 0xb349, /*0xf0-0xf7*/ 0xedb7, 0xb34a, 0xb34b, 0xb34c, 0xb34d, 0xcef9, 0xb7af, 0xbff3, /*0xf8-0xff*/ /* 0x7800 */ 0xedb8, 0xc2eb, 0xc9b0, 0xb34e, 0xb34f, 0xb350, 0xb351, 0xb352, /*0x00-0x07*/ 0xb353, 0xedb9, 0xb354, 0xb355, 0xc6f6, 0xbfb3, 0xb356, 0xb357, /*0x08-0x0f*/ 0xb358, 0xedbc, 0xc5f8, 0xb359, 0xd1d0, 0xb35a, 0xd7a9, 0xedba, /*0x10-0x17*/ 0xedbb, 0xb35b, 0xd1e2, 0xb35c, 0xedbf, 0xedc0, 0xb35d, 0xedc4, /*0x18-0x1f*/ 0xb35e, 0xb35f, 0xb360, 0xedc8, 0xb361, 0xedc6, 0xedce, 0xd5e8, /*0x20-0x27*/ 0xb362, 0xedc9, 0xb363, 0xb364, 0xedc7, 0xedbe, 0xb365, 0xb366, /*0x28-0x2f*/ 0xc5e9, 0xb367, 0xb368, 0xb369, 0xc6c6, 0xb36a, 0xb36b, 0xc9e9, /*0x30-0x37*/ 0xd4d2, 0xedc1, 0xedc2, 0xedc3, 0xedc5, 0xb36c, 0xc0f9, 0xb36d, /*0x38-0x3f*/ 0xb4a1, 0xb36e, 0xb36f, 0xb370, 0xb371, 0xb9e8, 0xb372, 0xedd0, /*0x40-0x47*/ 0xb373, 0xb374, 0xb375, 0xb376, 0xedd1, 0xb377, 0xedca, 0xb378, /*0x48-0x4f*/ 0xedcf, 0xb379, 0xcef8, 0xb37a, 0xb37b, 0xcbb6, 0xedcc, 0xedcd, /*0x50-0x57*/ 0xb37c, 0xb37d, 0xb37e, 0xb380, 0xb381, 0xcff5, 0xb382, 0xb383, /*0x58-0x5f*/ 0xb384, 0xb385, 0xb386, 0xb387, 0xb388, 0xb389, 0xb38a, 0xb38b, /*0x60-0x67*/ 0xb38c, 0xb38d, 0xedd2, 0xc1f2, 0xd3b2, 0xedcb, 0xc8b7, 0xb38e, /*0x68-0x6f*/ 0xb38f, 0xb390, 0xb391, 0xb392, 0xb393, 0xb394, 0xb395, 0xbcef, /*0x70-0x77*/ 0xb396, 0xb397, 0xb398, 0xb399, 0xc5f0, 0xb39a, 0xb39b, 0xb39c, /*0x78-0x7f*/ 0xb39d, 0xb39e, 0xb39f, 0xb3a0, 0xb440, 0xb441, 0xb442, 0xedd6, /*0x80-0x87*/ 0xb443, 0xb5ef, 0xb444, 0xb445, 0xc2b5, 0xb0ad, 0xcbe9, 0xb446, /*0x88-0x8f*/ 0xb447, 0xb1ae, 0xb448, 0xedd4, 0xb449, 0xb44a, 0xb44b, 0xcdeb, /*0x90-0x97*/ 0xb5e2, 0xb44c, 0xedd5, 0xedd3, 0xedd7, 0xb44d, 0xb44e, 0xb5fa, /*0x98-0x9f*/ 0xb44f, 0xedd8, 0xb450, 0xedd9, 0xb451, 0xeddc, 0xb452, 0xb1cc, /*0xa0-0xa7*/ 0xb453, 0xb454, 0xb455, 0xb456, 0xb457, 0xb458, 0xb459, 0xb45a, /*0xa8-0xaf*/ 0xc5f6, 0xbcee, 0xedda, 0xccbc, 0xb2ea, 0xb45b, 0xb45c, 0xb45d, /*0xb0-0xb7*/ 0xb45e, 0xeddb, 0xb45f, 0xb460, 0xb461, 0xb462, 0xc4eb, 0xb463, /*0xb8-0xbf*/ 0xb464, 0xb4c5, 0xb465, 0xb466, 0xb467, 0xb0f5, 0xb468, 0xb469, /*0xc0-0xc7*/ 0xb46a, 0xeddf, 0xc0da, 0xb4e8, 0xb46b, 0xb46c, 0xb46d, 0xb46e, /*0xc8-0xcf*/ 0xc5cd, 0xb46f, 0xb470, 0xb471, 0xeddd, 0xbfc4, 0xb472, 0xb473, /*0xd0-0xd7*/ 0xb474, 0xedde, 0xb475, 0xb476, 0xb477, 0xb478, 0xb479, 0xb47a, /*0xd8-0xdf*/ 0xb47b, 0xb47c, 0xb47d, 0xb47e, 0xb480, 0xb481, 0xb482, 0xb483, /*0xe0-0xe7*/ 0xc4a5, 0xb484, 0xb485, 0xb486, 0xede0, 0xb487, 0xb488, 0xb489, /*0xe8-0xef*/ 0xb48a, 0xb48b, 0xede1, 0xb48c, 0xede3, 0xb48d, 0xb48e, 0xc1d7, /*0xf0-0xf7*/ 0xb48f, 0xb490, 0xbbc7, 0xb491, 0xb492, 0xb493, 0xb494, 0xb495, /*0xf8-0xff*/ /* 0x7900 */ 0xb496, 0xbdb8, 0xb497, 0xb498, 0xb499, 0xede2, 0xb49a, 0xb49b, /*0x00-0x07*/ 0xb49c, 0xb49d, 0xb49e, 0xb49f, 0xb4a0, 0xb540, 0xb541, 0xb542, /*0x08-0x0f*/ 0xb543, 0xb544, 0xb545, 0xede4, 0xb546, 0xb547, 0xb548, 0xb549, /*0x10-0x17*/ 0xb54a, 0xb54b, 0xb54c, 0xb54d, 0xb54e, 0xb54f, 0xede6, 0xb550, /*0x18-0x1f*/ 0xb551, 0xb552, 0xb553, 0xb554, 0xede5, 0xb555, 0xb556, 0xb557, /*0x20-0x27*/ 0xb558, 0xb559, 0xb55a, 0xb55b, 0xb55c, 0xb55d, 0xb55e, 0xb55f, /*0x28-0x2f*/ 0xb560, 0xb561, 0xb562, 0xb563, 0xede7, 0xb564, 0xb565, 0xb566, /*0x30-0x37*/ 0xb567, 0xb568, 0xcabe, 0xecea, 0xc0f1, 0xb569, 0xc9e7, 0xb56a, /*0x38-0x3f*/ 0xeceb, 0xc6ee, 0xb56b, 0xb56c, 0xb56d, 0xb56e, 0xecec, 0xb56f, /*0x40-0x47*/ 0xc6ed, 0xeced, 0xb570, 0xb571, 0xb572, 0xb573, 0xb574, 0xb575, /*0x48-0x4f*/ 0xb576, 0xb577, 0xb578, 0xecf0, 0xb579, 0xb57a, 0xd7e6, 0xecf3, /*0x50-0x57*/ 0xb57b, 0xb57c, 0xecf1, 0xecee, 0xecef, 0xd7a3, 0xc9f1, 0xcbee, /*0x58-0x5f*/ 0xecf4, 0xb57d, 0xecf2, 0xb57e, 0xb580, 0xcfe9, 0xb581, 0xecf6, /*0x60-0x67*/ 0xc6b1, 0xb582, 0xb583, 0xb584, 0xb585, 0xbcc0, 0xb586, 0xecf5, /*0x68-0x6f*/ 0xb587, 0xb588, 0xb589, 0xb58a, 0xb58b, 0xb58c, 0xb58d, 0xb5bb, /*0x70-0x77*/ 0xbbf6, 0xb58e, 0xecf7, 0xb58f, 0xb590, 0xb591, 0xb592, 0xb593, /*0x78-0x7f*/ 0xd9f7, 0xbdfb, 0xb594, 0xb595, 0xc2bb, 0xecf8, 0xb596, 0xb597, /*0x80-0x87*/ 0xb598, 0xb599, 0xecf9, 0xb59a, 0xb59b, 0xb59c, 0xb59d, 0xb8a3, /*0x88-0x8f*/ 0xb59e, 0xb59f, 0xb5a0, 0xb640, 0xb641, 0xb642, 0xb643, 0xb644, /*0x90-0x97*/ 0xb645, 0xb646, 0xecfa, 0xb647, 0xb648, 0xb649, 0xb64a, 0xb64b, /*0x98-0x9f*/ 0xb64c, 0xb64d, 0xb64e, 0xb64f, 0xb650, 0xb651, 0xb652, 0xecfb, /*0xa0-0xa7*/ 0xb653, 0xb654, 0xb655, 0xb656, 0xb657, 0xb658, 0xb659, 0xb65a, /*0xa8-0xaf*/ 0xb65b, 0xb65c, 0xb65d, 0xecfc, 0xb65e, 0xb65f, 0xb660, 0xb661, /*0xb0-0xb7*/ 0xb662, 0xd3ed, 0xd8ae, 0xc0eb, 0xb663, 0xc7dd, 0xbacc, 0xb664, /*0xb8-0xbf*/ 0xd0e3, 0xcbbd, 0xb665, 0xcdba, 0xb666, 0xb667, 0xb8d1, 0xb668, /*0xc0-0xc7*/ 0xb669, 0xb1fc, 0xb66a, 0xc7ef, 0xb66b, 0xd6d6, 0xb66c, 0xb66d, /*0xc8-0xcf*/ 0xb66e, 0xbfc6, 0xc3eb, 0xb66f, 0xb670, 0xeff5, 0xb671, 0xb672, /*0xd0-0xd7*/ 0xc3d8, 0xb673, 0xb674, 0xb675, 0xb676, 0xb677, 0xb678, 0xd7e2, /*0xd8-0xdf*/ 0xb679, 0xb67a, 0xb67b, 0xeff7, 0xb3d3, 0xb67c, 0xc7d8, 0xd1ed, /*0xe0-0xe7*/ 0xb67d, 0xd6c8, 0xb67e, 0xeff8, 0xb680, 0xeff6, 0xb681, 0xbbfd, /*0xe8-0xef*/ 0xb3c6, 0xb682, 0xb683, 0xb684, 0xb685, 0xb686, 0xb687, 0xb688, /*0xf0-0xf7*/ 0xbdd5, 0xb689, 0xb68a, 0xd2c6, 0xb68b, 0xbbe0, 0xb68c, 0xb68d, /*0xf8-0xff*/ /* 0x7a00 */ 0xcfa1, 0xb68e, 0xeffc, 0xeffb, 0xb68f, 0xb690, 0xeff9, 0xb691, /*0x00-0x07*/ 0xb692, 0xb693, 0xb694, 0xb3cc, 0xb695, 0xc9d4, 0xcbb0, 0xb696, /*0x08-0x0f*/ 0xb697, 0xb698, 0xb699, 0xb69a, 0xeffe, 0xb69b, 0xb69c, 0xb0de, /*0x10-0x17*/ 0xb69d, 0xb69e, 0xd6c9, 0xb69f, 0xb6a0, 0xb740, 0xeffd, 0xb741, /*0x18-0x1f*/ 0xb3ed, 0xb742, 0xb743, 0xf6d5, 0xb744, 0xb745, 0xb746, 0xb747, /*0x20-0x27*/ 0xb748, 0xb749, 0xb74a, 0xb74b, 0xb74c, 0xb74d, 0xb74e, 0xb74f, /*0x28-0x2f*/ 0xb750, 0xb751, 0xb752, 0xcec8, 0xb753, 0xb754, 0xb755, 0xf0a2, /*0x30-0x37*/ 0xb756, 0xf0a1, 0xb757, 0xb5be, 0xbcda, 0xbbfc, 0xb758, 0xb8e5, /*0x38-0x3f*/ 0xb759, 0xb75a, 0xb75b, 0xb75c, 0xb75d, 0xb75e, 0xc4c2, 0xb75f, /*0x40-0x47*/ 0xb760, 0xb761, 0xb762, 0xb763, 0xb764, 0xb765, 0xb766, 0xb767, /*0x48-0x4f*/ 0xb768, 0xf0a3, 0xb769, 0xb76a, 0xb76b, 0xb76c, 0xb76d, 0xcbeb, /*0x50-0x57*/ 0xb76e, 0xb76f, 0xb770, 0xb771, 0xb772, 0xb773, 0xb774, 0xb775, /*0x58-0x5f*/ 0xb776, 0xb777, 0xb778, 0xb779, 0xb77a, 0xb77b, 0xb77c, 0xb77d, /*0x60-0x67*/ 0xb77e, 0xb780, 0xb781, 0xb782, 0xb783, 0xb784, 0xb785, 0xb786, /*0x68-0x6f*/ 0xf0a6, 0xb787, 0xb788, 0xb789, 0xd1a8, 0xb78a, 0xbebf, 0xc7ee, /*0x70-0x77*/ 0xf1b6, 0xf1b7, 0xbfd5, 0xb78b, 0xb78c, 0xb78d, 0xb78e, 0xb4a9, /*0x78-0x7f*/ 0xf1b8, 0xcdbb, 0xb78f, 0xc7d4, 0xd5ad, 0xb790, 0xf1b9, 0xb791, /*0x80-0x87*/ 0xf1ba, 0xb792, 0xb793, 0xb794, 0xb795, 0xc7cf, 0xb796, 0xb797, /*0x88-0x8f*/ 0xb798, 0xd2a4, 0xd6cf, 0xb799, 0xb79a, 0xf1bb, 0xbdd1, 0xb4b0, /*0x90-0x97*/ 0xbebd, 0xb79b, 0xb79c, 0xb79d, 0xb4dc, 0xced1, 0xb79e, 0xbfdf, /*0x98-0x9f*/ 0xf1bd, 0xb79f, 0xb7a0, 0xb840, 0xb841, 0xbffa, 0xf1bc, 0xb842, /*0xa0-0xa7*/ 0xf1bf, 0xb843, 0xb844, 0xb845, 0xf1be, 0xf1c0, 0xb846, 0xb847, /*0xa8-0xaf*/ 0xb848, 0xb849, 0xb84a, 0xf1c1, 0xb84b, 0xb84c, 0xb84d, 0xb84e, /*0xb0-0xb7*/ 0xb84f, 0xb850, 0xb851, 0xb852, 0xb853, 0xb854, 0xb855, 0xc1fe, /*0xb8-0xbf*/ 0xb856, 0xb857, 0xb858, 0xb859, 0xb85a, 0xb85b, 0xb85c, 0xb85d, /*0xc0-0xc7*/ 0xb85e, 0xb85f, 0xb860, 0xc1a2, 0xb861, 0xb862, 0xb863, 0xb864, /*0xc8-0xcf*/ 0xb865, 0xb866, 0xb867, 0xb868, 0xb869, 0xb86a, 0xcafa, 0xb86b, /*0xd0-0xd7*/ 0xb86c, 0xd5be, 0xb86d, 0xb86e, 0xb86f, 0xb870, 0xbeba, 0xbeb9, /*0xd8-0xdf*/ 0xd5c2, 0xb871, 0xb872, 0xbfa2, 0xb873, 0xcdaf, 0xf1b5, 0xb874, /*0xe0-0xe7*/ 0xb875, 0xb876, 0xb877, 0xb878, 0xb879, 0xbddf, 0xb87a, 0xb6cb, /*0xe8-0xef*/ 0xb87b, 0xb87c, 0xb87d, 0xb87e, 0xb880, 0xb881, 0xb882, 0xb883, /*0xf0-0xf7*/ 0xb884, 0xd6f1, 0xf3c3, 0xb885, 0xb886, 0xf3c4, 0xb887, 0xb8cd, /*0xf8-0xff*/ /* 0x7b00 */ 0xb888, 0xb889, 0xb88a, 0xf3c6, 0xf3c7, 0xb88b, 0xb0ca, 0xb88c, /*0x00-0x07*/ 0xf3c5, 0xb88d, 0xf3c9, 0xcbf1, 0xb88e, 0xb88f, 0xb890, 0xf3cb, /*0x08-0x0f*/ 0xb891, 0xd0a6, 0xb892, 0xb893, 0xb1ca, 0xf3c8, 0xb894, 0xb895, /*0x10-0x17*/ 0xb896, 0xf3cf, 0xb897, 0xb5d1, 0xb898, 0xb899, 0xf3d7, 0xb89a, /*0x18-0x1f*/ 0xf3d2, 0xb89b, 0xb89c, 0xb89d, 0xf3d4, 0xf3d3, 0xb7fb, 0xb89e, /*0x20-0x27*/ 0xb1bf, 0xb89f, 0xf3ce, 0xf3ca, 0xb5da, 0xb8a0, 0xf3d0, 0xb940, /*0x28-0x2f*/ 0xb941, 0xf3d1, 0xb942, 0xf3d5, 0xb943, 0xb944, 0xb945, 0xb946, /*0x30-0x37*/ 0xf3cd, 0xb947, 0xbce3, 0xb948, 0xc1fd, 0xb949, 0xf3d6, 0xb94a, /*0x38-0x3f*/ 0xb94b, 0xb94c, 0xb94d, 0xb94e, 0xb94f, 0xf3da, 0xb950, 0xf3cc, /*0x40-0x47*/ 0xb951, 0xb5c8, 0xb952, 0xbdee, 0xf3dc, 0xb953, 0xb954, 0xb7a4, /*0x48-0x4f*/ 0xbff0, 0xd6fe, 0xcdb2, 0xb955, 0xb4f0, 0xb956, 0xb2df, 0xb957, /*0x50-0x57*/ 0xf3d8, 0xb958, 0xf3d9, 0xc9b8, 0xb959, 0xf3dd, 0xb95a, 0xb95b, /*0x58-0x5f*/ 0xf3de, 0xb95c, 0xf3e1, 0xb95d, 0xb95e, 0xb95f, 0xb960, 0xb961, /*0x60-0x67*/ 0xb962, 0xb963, 0xb964, 0xb965, 0xb966, 0xb967, 0xf3df, 0xb968, /*0x68-0x6f*/ 0xb969, 0xf3e3, 0xf3e2, 0xb96a, 0xb96b, 0xf3db, 0xb96c, 0xbfea, /*0x70-0x77*/ 0xb96d, 0xb3ef, 0xb96e, 0xf3e0, 0xb96f, 0xb970, 0xc7a9, 0xb971, /*0x78-0x7f*/ 0xbcf2, 0xb972, 0xb973, 0xb974, 0xb975, 0xf3eb, 0xb976, 0xb977, /*0x80-0x87*/ 0xb978, 0xb979, 0xb97a, 0xb97b, 0xb97c, 0xb9bf, 0xb97d, 0xb97e, /*0x88-0x8f*/ 0xf3e4, 0xb980, 0xb981, 0xb982, 0xb2ad, 0xbbfe, 0xb983, 0xcbe3, /*0x90-0x97*/ 0xb984, 0xb985, 0xb986, 0xb987, 0xf3ed, 0xf3e9, 0xb988, 0xb989, /*0x98-0x9f*/ 0xb98a, 0xb9dc, 0xf3ee, 0xb98b, 0xb98c, 0xb98d, 0xf3e5, 0xf3e6, /*0xa0-0xa7*/ 0xf3ea, 0xc2e1, 0xf3ec, 0xf3ef, 0xf3e8, 0xbcfd, 0xb98e, 0xb98f, /*0xa8-0xaf*/ 0xb990, 0xcfe4, 0xb991, 0xb992, 0xf3f0, 0xb993, 0xb994, 0xb995, /*0xb0-0xb7*/ 0xf3e7, 0xb996, 0xb997, 0xb998, 0xb999, 0xb99a, 0xb99b, 0xb99c, /*0xb8-0xbf*/ 0xb99d, 0xf3f2, 0xb99e, 0xb99f, 0xb9a0, 0xba40, 0xd7ad, 0xc6aa, /*0xc0-0xc7*/ 0xba41, 0xba42, 0xba43, 0xba44, 0xf3f3, 0xba45, 0xba46, 0xba47, /*0xc8-0xcf*/ 0xba48, 0xf3f1, 0xba49, 0xc2a8, 0xba4a, 0xba4b, 0xba4c, 0xba4d, /*0xd0-0xd7*/ 0xba4e, 0xb8dd, 0xf3f5, 0xba4f, 0xba50, 0xf3f4, 0xba51, 0xba52, /*0xd8-0xdf*/ 0xba53, 0xb4db, 0xba54, 0xba55, 0xba56, 0xf3f6, 0xf3f7, 0xba57, /*0xe0-0xe7*/ 0xba58, 0xba59, 0xf3f8, 0xba5a, 0xba5b, 0xba5c, 0xc0ba, 0xba5d, /*0xe8-0xef*/ 0xba5e, 0xc0e9, 0xba5f, 0xba60, 0xba61, 0xba62, 0xba63, 0xc5f1, /*0xf0-0xf7*/ 0xba64, 0xba65, 0xba66, 0xba67, 0xf3fb, 0xba68, 0xf3fa, 0xba69, /*0xf8-0xff*/ /* 0x7c00 */ 0xba6a, 0xba6b, 0xba6c, 0xba6d, 0xba6e, 0xba6f, 0xba70, 0xb4d8, /*0x00-0x07*/ 0xba71, 0xba72, 0xba73, 0xf3fe, 0xf3f9, 0xba74, 0xba75, 0xf3fc, /*0x08-0x0f*/ 0xba76, 0xba77, 0xba78, 0xba79, 0xba7a, 0xba7b, 0xf3fd, 0xba7c, /*0x10-0x17*/ 0xba7d, 0xba7e, 0xba80, 0xba81, 0xba82, 0xba83, 0xba84, 0xf4a1, /*0x18-0x1f*/ 0xba85, 0xba86, 0xba87, 0xba88, 0xba89, 0xba8a, 0xf4a3, 0xbbc9, /*0x20-0x27*/ 0xba8b, 0xba8c, 0xf4a2, 0xba8d, 0xba8e, 0xba8f, 0xba90, 0xba91, /*0x28-0x2f*/ 0xba92, 0xba93, 0xba94, 0xba95, 0xba96, 0xba97, 0xba98, 0xba99, /*0x30-0x37*/ 0xf4a4, 0xba9a, 0xba9b, 0xba9c, 0xba9d, 0xba9e, 0xba9f, 0xb2be, /*0x38-0x3f*/ 0xf4a6, 0xf4a5, 0xbaa0, 0xbb40, 0xbb41, 0xbb42, 0xbb43, 0xbb44, /*0x40-0x47*/ 0xbb45, 0xbb46, 0xbb47, 0xbb48, 0xbb49, 0xbcae, 0xbb4a, 0xbb4b, /*0x48-0x4f*/ 0xbb4c, 0xbb4d, 0xbb4e, 0xbb4f, 0xbb50, 0xbb51, 0xbb52, 0xbb53, /*0x50-0x57*/ 0xbb54, 0xbb55, 0xbb56, 0xbb57, 0xbb58, 0xbb59, 0xbb5a, 0xbb5b, /*0x58-0x5f*/ 0xbb5c, 0xbb5d, 0xbb5e, 0xbb5f, 0xbb60, 0xbb61, 0xbb62, 0xbb63, /*0x60-0x67*/ 0xbb64, 0xbb65, 0xbb66, 0xbb67, 0xbb68, 0xbb69, 0xbb6a, 0xbb6b, /*0x68-0x6f*/ 0xbb6c, 0xbb6d, 0xbb6e, 0xc3d7, 0xd9e1, 0xbb6f, 0xbb70, 0xbb71, /*0x70-0x77*/ 0xbb72, 0xbb73, 0xbb74, 0xc0e0, 0xf4cc, 0xd7d1, 0xbb75, 0xbb76, /*0x78-0x7f*/ 0xbb77, 0xbb78, 0xbb79, 0xbb7a, 0xbb7b, 0xbb7c, 0xbb7d, 0xbb7e, /*0x80-0x87*/ 0xbb80, 0xb7db, 0xbb81, 0xbb82, 0xbb83, 0xbb84, 0xbb85, 0xbb86, /*0x88-0x8f*/ 0xbb87, 0xf4ce, 0xc1a3, 0xbb88, 0xbb89, 0xc6c9, 0xbb8a, 0xb4d6, /*0x90-0x97*/ 0xd5b3, 0xbb8b, 0xbb8c, 0xbb8d, 0xf4d0, 0xf4cf, 0xf4d1, 0xcbda, /*0x98-0x9f*/ 0xbb8e, 0xbb8f, 0xf4d2, 0xbb90, 0xd4c1, 0xd6e0, 0xbb91, 0xbb92, /*0xa0-0xa7*/ 0xbb93, 0xbb94, 0xb7e0, 0xbb95, 0xbb96, 0xbb97, 0xc1b8, 0xbb98, /*0xa8-0xaf*/ 0xbb99, 0xc1bb, 0xf4d3, 0xbeac, 0xbb9a, 0xbb9b, 0xbb9c, 0xbb9d, /*0xb0-0xb7*/ 0xbb9e, 0xb4e2, 0xbb9f, 0xbba0, 0xf4d4, 0xf4d5, 0xbeab, 0xbc40, /*0xb8-0xbf*/ 0xbc41, 0xf4d6, 0xbc42, 0xbc43, 0xbc44, 0xf4db, 0xbc45, 0xf4d7, /*0xc0-0xc7*/ 0xf4da, 0xbc46, 0xbafd, 0xbc47, 0xf4d8, 0xf4d9, 0xbc48, 0xbc49, /*0xc8-0xcf*/ 0xbc4a, 0xbc4b, 0xbc4c, 0xbc4d, 0xbc4e, 0xb8e2, 0xccc7, 0xf4dc, /*0xd0-0xd7*/ 0xbc4f, 0xb2da, 0xbc50, 0xbc51, 0xc3d3, 0xbc52, 0xbc53, 0xd4e3, /*0xd8-0xdf*/ 0xbfb7, 0xbc54, 0xbc55, 0xbc56, 0xbc57, 0xbc58, 0xbc59, 0xbc5a, /*0xe0-0xe7*/ 0xf4dd, 0xbc5b, 0xbc5c, 0xbc5d, 0xbc5e, 0xbc5f, 0xbc60, 0xc5b4, /*0xe8-0xef*/ 0xbc61, 0xbc62, 0xbc63, 0xbc64, 0xbc65, 0xbc66, 0xbc67, 0xbc68, /*0xf0-0xf7*/ 0xf4e9, 0xbc69, 0xbc6a, 0xcfb5, 0xbc6b, 0xbc6c, 0xbc6d, 0xbc6e, /*0xf8-0xff*/ /* 0x7d00 */ 0xbc6f, 0xbc70, 0xbc71, 0xbc72, 0xbc73, 0xbc74, 0xbc75, 0xbc76, /*0x00-0x07*/ 0xbc77, 0xbc78, 0xcec9, 0xbc79, 0xbc7a, 0xbc7b, 0xbc7c, 0xbc7d, /*0x08-0x0f*/ 0xbc7e, 0xbc80, 0xbc81, 0xbc82, 0xbc83, 0xbc84, 0xbc85, 0xbc86, /*0x10-0x17*/ 0xbc87, 0xbc88, 0xbc89, 0xbc8a, 0xbc8b, 0xbc8c, 0xbc8d, 0xbc8e, /*0x18-0x1f*/ 0xcbd8, 0xbc8f, 0xcbf7, 0xbc90, 0xbc91, 0xbc92, 0xbc93, 0xbdf4, /*0x20-0x27*/ 0xbc94, 0xbc95, 0xbc96, 0xd7cf, 0xbc97, 0xbc98, 0xbc99, 0xc0db, /*0x28-0x2f*/ 0xbc9a, 0xbc9b, 0xbc9c, 0xbc9d, 0xbc9e, 0xbc9f, 0xbca0, 0xbd40, /*0x30-0x37*/ 0xbd41, 0xbd42, 0xbd43, 0xbd44, 0xbd45, 0xbd46, 0xbd47, 0xbd48, /*0x38-0x3f*/ 0xbd49, 0xbd4a, 0xbd4b, 0xbd4c, 0xbd4d, 0xbd4e, 0xbd4f, 0xbd50, /*0x40-0x47*/ 0xbd51, 0xbd52, 0xbd53, 0xbd54, 0xbd55, 0xbd56, 0xbd57, 0xbd58, /*0x48-0x4f*/ 0xbd59, 0xbd5a, 0xbd5b, 0xbd5c, 0xbd5d, 0xbd5e, 0xbd5f, 0xbd60, /*0x50-0x57*/ 0xbd61, 0xbd62, 0xbd63, 0xbd64, 0xbd65, 0xbd66, 0xbd67, 0xbd68, /*0x58-0x5f*/ 0xbd69, 0xbd6a, 0xbd6b, 0xbd6c, 0xbd6d, 0xbd6e, 0xbd6f, 0xbd70, /*0x60-0x67*/ 0xbd71, 0xbd72, 0xbd73, 0xbd74, 0xbd75, 0xbd76, 0xd0f5, 0xbd77, /*0x68-0x6f*/ 0xbd78, 0xbd79, 0xbd7a, 0xbd7b, 0xbd7c, 0xbd7d, 0xbd7e, 0xf4ea, /*0x70-0x77*/ 0xbd80, 0xbd81, 0xbd82, 0xbd83, 0xbd84, 0xbd85, 0xbd86, 0xbd87, /*0x78-0x7f*/ 0xbd88, 0xbd89, 0xbd8a, 0xbd8b, 0xbd8c, 0xbd8d, 0xbd8e, 0xbd8f, /*0x80-0x87*/ 0xbd90, 0xbd91, 0xbd92, 0xbd93, 0xbd94, 0xbd95, 0xbd96, 0xbd97, /*0x88-0x8f*/ 0xbd98, 0xbd99, 0xbd9a, 0xbd9b, 0xbd9c, 0xbd9d, 0xbd9e, 0xbd9f, /*0x90-0x97*/ 0xbda0, 0xbe40, 0xbe41, 0xbe42, 0xbe43, 0xbe44, 0xbe45, 0xbe46, /*0x98-0x9f*/ 0xbe47, 0xbe48, 0xbe49, 0xbe4a, 0xbe4b, 0xbe4c, 0xf4eb, 0xbe4d, /*0xa0-0xa7*/ 0xbe4e, 0xbe4f, 0xbe50, 0xbe51, 0xbe52, 0xbe53, 0xf4ec, 0xbe54, /*0xa8-0xaf*/ 0xbe55, 0xbe56, 0xbe57, 0xbe58, 0xbe59, 0xbe5a, 0xbe5b, 0xbe5c, /*0xb0-0xb7*/ 0xbe5d, 0xbe5e, 0xbe5f, 0xbe60, 0xbe61, 0xbe62, 0xbe63, 0xbe64, /*0xb8-0xbf*/ 0xbe65, 0xbe66, 0xbe67, 0xbe68, 0xbe69, 0xbe6a, 0xbe6b, 0xbe6c, /*0xc0-0xc7*/ 0xbe6d, 0xbe6e, 0xbe6f, 0xbe70, 0xbe71, 0xbe72, 0xbe73, 0xbe74, /*0xc8-0xcf*/ 0xbe75, 0xbe76, 0xbe77, 0xbe78, 0xbe79, 0xbe7a, 0xbe7b, 0xbe7c, /*0xd0-0xd7*/ 0xbe7d, 0xbe7e, 0xbe80, 0xbe81, 0xbe82, 0xbe83, 0xbe84, 0xbe85, /*0xd8-0xdf*/ 0xbe86, 0xbe87, 0xbe88, 0xbe89, 0xbe8a, 0xbe8b, 0xbe8c, 0xbe8d, /*0xe0-0xe7*/ 0xbe8e, 0xbe8f, 0xbe90, 0xbe91, 0xbe92, 0xbe93, 0xbe94, 0xbe95, /*0xe8-0xef*/ 0xbe96, 0xbe97, 0xbe98, 0xbe99, 0xbe9a, 0xbe9b, 0xbe9c, 0xbe9d, /*0xf0-0xf7*/ 0xbe9e, 0xbe9f, 0xbea0, 0xbf40, 0xbf41, 0xbf42, 0xbf43, 0xbf44, /*0xf8-0xff*/ /* 0x7e00 */ 0xbf45, 0xbf46, 0xbf47, 0xbf48, 0xbf49, 0xbf4a, 0xbf4b, 0xbf4c, /*0x00-0x07*/ 0xbf4d, 0xbf4e, 0xbf4f, 0xbf50, 0xbf51, 0xbf52, 0xbf53, 0xbf54, /*0x08-0x0f*/ 0xbf55, 0xbf56, 0xbf57, 0xbf58, 0xbf59, 0xbf5a, 0xbf5b, 0xbf5c, /*0x10-0x17*/ 0xbf5d, 0xbf5e, 0xbf5f, 0xbf60, 0xbf61, 0xbf62, 0xbf63, 0xbf64, /*0x18-0x1f*/ 0xbf65, 0xbf66, 0xbf67, 0xbf68, 0xbf69, 0xbf6a, 0xbf6b, 0xbf6c, /*0x20-0x27*/ 0xbf6d, 0xbf6e, 0xbf6f, 0xbf70, 0xbf71, 0xbf72, 0xbf73, 0xbf74, /*0x28-0x2f*/ 0xbf75, 0xbf76, 0xbf77, 0xbf78, 0xbf79, 0xbf7a, 0xbf7b, 0xbf7c, /*0x30-0x37*/ 0xbf7d, 0xbf7e, 0xbf80, 0xf7e3, 0xbf81, 0xbf82, 0xbf83, 0xbf84, /*0x38-0x3f*/ 0xbf85, 0xb7b1, 0xbf86, 0xbf87, 0xbf88, 0xbf89, 0xbf8a, 0xf4ed, /*0x40-0x47*/ 0xbf8b, 0xbf8c, 0xbf8d, 0xbf8e, 0xbf8f, 0xbf90, 0xbf91, 0xbf92, /*0x48-0x4f*/ 0xbf93, 0xbf94, 0xbf95, 0xbf96, 0xbf97, 0xbf98, 0xbf99, 0xbf9a, /*0x50-0x57*/ 0xbf9b, 0xbf9c, 0xbf9d, 0xbf9e, 0xbf9f, 0xbfa0, 0xc040, 0xc041, /*0x58-0x5f*/ 0xc042, 0xc043, 0xc044, 0xc045, 0xc046, 0xc047, 0xc048, 0xc049, /*0x60-0x67*/ 0xc04a, 0xc04b, 0xc04c, 0xc04d, 0xc04e, 0xc04f, 0xc050, 0xc051, /*0x68-0x6f*/ 0xc052, 0xc053, 0xc054, 0xc055, 0xc056, 0xc057, 0xc058, 0xc059, /*0x70-0x77*/ 0xc05a, 0xc05b, 0xc05c, 0xc05d, 0xc05e, 0xc05f, 0xc060, 0xc061, /*0x78-0x7f*/ 0xc062, 0xc063, 0xd7eb, 0xc064, 0xc065, 0xc066, 0xc067, 0xc068, /*0x80-0x87*/ 0xc069, 0xc06a, 0xc06b, 0xc06c, 0xc06d, 0xc06e, 0xc06f, 0xc070, /*0x88-0x8f*/ 0xc071, 0xc072, 0xc073, 0xc074, 0xc075, 0xc076, 0xc077, 0xc078, /*0x90-0x97*/ 0xc079, 0xc07a, 0xc07b, 0xf4ee, 0xc07c, 0xc07d, 0xc07e, 0xe6f9, /*0x98-0x9f*/ 0xbec0, 0xe6fa, 0xbaec, 0xe6fb, 0xcfcb, 0xe6fc, 0xd4bc, 0xbcb6, /*0xa0-0xa7*/ 0xe6fd, 0xe6fe, 0xbccd, 0xc8d2, 0xceb3, 0xe7a1, 0xc080, 0xb4bf, /*0xa8-0xaf*/ 0xe7a2, 0xc9b4, 0xb8d9, 0xc4c9, 0xc081, 0xd7dd, 0xc2da, 0xb7d7, /*0xb0-0xb7*/ 0xd6bd, 0xcec6, 0xb7c4, 0xc082, 0xc083, 0xc5a6, 0xe7a3, 0xcfdf, /*0xb8-0xbf*/ 0xe7a4, 0xe7a5, 0xe7a6, 0xc1b7, 0xd7e9, 0xc9f0, 0xcfb8, 0xd6af, /*0xc0-0xc7*/ 0xd6d5, 0xe7a7, 0xb0ed, 0xe7a8, 0xe7a9, 0xc9dc, 0xd2ef, 0xbead, /*0xc8-0xcf*/ 0xe7aa, 0xb0f3, 0xc8de, 0xbde1, 0xe7ab, 0xc8c6, 0xc084, 0xe7ac, /*0xd0-0xd7*/ 0xbbe6, 0xb8f8, 0xd1a4, 0xe7ad, 0xc2e7, 0xbef8, 0xbdca, 0xcdb3, /*0xd8-0xdf*/ 0xe7ae, 0xe7af, 0xbeee, 0xd0e5, 0xc085, 0xcbe7, 0xccd0, 0xbccc, /*0xe0-0xe7*/ 0xe7b0, 0xbca8, 0xd0f7, 0xe7b1, 0xc086, 0xd0f8, 0xe7b2, 0xe7b3, /*0xe8-0xef*/ 0xb4c2, 0xe7b4, 0xe7b5, 0xc9fe, 0xceac, 0xc3e0, 0xe7b7, 0xb1c1, /*0xf0-0xf7*/ 0xb3f1, 0xc087, 0xe7b8, 0xe7b9, 0xd7db, 0xd5c0, 0xe7ba, 0xc2cc, /*0xf8-0xff*/ /* 0x7f00 */ 0xd7ba, 0xe7bb, 0xe7bc, 0xe7bd, 0xbcea, 0xc3e5, 0xc0c2, 0xe7be, /*0x00-0x07*/ 0xe7bf, 0xbca9, 0xc088, 0xe7c0, 0xe7c1, 0xe7b6, 0xb6d0, 0xe7c2, /*0x08-0x0f*/ 0xc089, 0xe7c3, 0xe7c4, 0xbbba, 0xb5de, 0xc2c6, 0xb1e0, 0xe7c5, /*0x10-0x17*/ 0xd4b5, 0xe7c6, 0xb8bf, 0xe7c8, 0xe7c7, 0xb7ec, 0xc08a, 0xe7c9, /*0x18-0x1f*/ 0xb2f8, 0xe7ca, 0xe7cb, 0xe7cc, 0xe7cd, 0xe7ce, 0xe7cf, 0xe7d0, /*0x20-0x27*/ 0xd3a7, 0xcbf5, 0xe7d1, 0xe7d2, 0xe7d3, 0xe7d4, 0xc9c9, 0xe7d5, /*0x28-0x2f*/ 0xe7d6, 0xe7d7, 0xe7d8, 0xe7d9, 0xbdc9, 0xe7da, 0xf3be, 0xc08b, /*0x30-0x37*/ 0xb8d7, 0xc08c, 0xc8b1, 0xc08d, 0xc08e, 0xc08f, 0xc090, 0xc091, /*0x38-0x3f*/ 0xc092, 0xc093, 0xf3bf, 0xc094, 0xf3c0, 0xf3c1, 0xc095, 0xc096, /*0x40-0x47*/ 0xc097, 0xc098, 0xc099, 0xc09a, 0xc09b, 0xc09c, 0xc09d, 0xc09e, /*0x48-0x4f*/ 0xb9de, 0xcdf8, 0xc09f, 0xc0a0, 0xd8e8, 0xbab1, 0xc140, 0xc2de, /*0x50-0x57*/ 0xeeb7, 0xc141, 0xb7a3, 0xc142, 0xc143, 0xc144, 0xc145, 0xeeb9, /*0x58-0x5f*/ 0xc146, 0xeeb8, 0xb0d5, 0xc147, 0xc148, 0xc149, 0xc14a, 0xc14b, /*0x60-0x67*/ 0xeebb, 0xd5d6, 0xd7ef, 0xc14c, 0xc14d, 0xc14e, 0xd6c3, 0xc14f, /*0x68-0x6f*/ 0xc150, 0xeebd, 0xcaf0, 0xc151, 0xeebc, 0xc152, 0xc153, 0xc154, /*0x70-0x77*/ 0xc155, 0xeebe, 0xc156, 0xc157, 0xc158, 0xc159, 0xeec0, 0xc15a, /*0x78-0x7f*/ 0xc15b, 0xeebf, 0xc15c, 0xc15d, 0xc15e, 0xc15f, 0xc160, 0xc161, /*0x80-0x87*/ 0xc162, 0xc163, 0xd1f2, 0xc164, 0xc7bc, 0xc165, 0xc3c0, 0xc166, /*0x88-0x8f*/ 0xc167, 0xc168, 0xc169, 0xc16a, 0xb8e1, 0xc16b, 0xc16c, 0xc16d, /*0x90-0x97*/ 0xc16e, 0xc16f, 0xc1e7, 0xc170, 0xc171, 0xf4c6, 0xd0df, 0xf4c7, /*0x98-0x9f*/ 0xc172, 0xcfdb, 0xc173, 0xc174, 0xc8ba, 0xc175, 0xc176, 0xf4c8, /*0xa0-0xa7*/ 0xc177, 0xc178, 0xc179, 0xc17a, 0xc17b, 0xc17c, 0xc17d, 0xf4c9, /*0xa8-0xaf*/ 0xf4ca, 0xc17e, 0xf4cb, 0xc180, 0xc181, 0xc182, 0xc183, 0xc184, /*0xb0-0xb7*/ 0xd9fa, 0xb8fe, 0xc185, 0xc186, 0xe5f1, 0xd3f0, 0xc187, 0xf4e0, /*0xb8-0xbf*/ 0xc188, 0xcecc, 0xc189, 0xc18a, 0xc18b, 0xb3e1, 0xc18c, 0xc18d, /*0xc0-0xc7*/ 0xc18e, 0xc18f, 0xf1b4, 0xc190, 0xd2ee, 0xc191, 0xf4e1, 0xc192, /*0xc8-0xcf*/ 0xc193, 0xc194, 0xc195, 0xc196, 0xcfe8, 0xf4e2, 0xc197, 0xc198, /*0xd0-0xd7*/ 0xc7cc, 0xc199, 0xc19a, 0xc19b, 0xc19c, 0xc19d, 0xc19e, 0xb5d4, /*0xd8-0xdf*/ 0xb4e4, 0xf4e4, 0xc19f, 0xc1a0, 0xc240, 0xf4e3, 0xf4e5, 0xc241, /*0xe0-0xe7*/ 0xc242, 0xf4e6, 0xc243, 0xc244, 0xc245, 0xc246, 0xf4e7, 0xc247, /*0xe8-0xef*/ 0xbab2, 0xb0bf, 0xc248, 0xf4e8, 0xc249, 0xc24a, 0xc24b, 0xc24c, /*0xf0-0xf7*/ 0xc24d, 0xc24e, 0xc24f, 0xb7ad, 0xd2ed, 0xc250, 0xc251, 0xc252, /*0xf8-0xff*/ /* 0x8000 */ 0xd2ab, 0xc0cf, 0xc253, 0xbfbc, 0xeba3, 0xd5df, 0xeac8, 0xc254, /*0x00-0x07*/ 0xc255, 0xc256, 0xc257, 0xf1f3, 0xb6f8, 0xcba3, 0xc258, 0xc259, /*0x08-0x0f*/ 0xc4cd, 0xc25a, 0xf1e7, 0xc25b, 0xf1e8, 0xb8fb, 0xf1e9, 0xbac4, /*0x10-0x17*/ 0xd4c5, 0xb0d2, 0xc25c, 0xc25d, 0xf1ea, 0xc25e, 0xc25f, 0xc260, /*0x18-0x1f*/ 0xf1eb, 0xc261, 0xf1ec, 0xc262, 0xc263, 0xf1ed, 0xf1ee, 0xf1ef, /*0x20-0x27*/ 0xf1f1, 0xf1f0, 0xc5d5, 0xc264, 0xc265, 0xc266, 0xc267, 0xc268, /*0x28-0x2f*/ 0xc269, 0xf1f2, 0xc26a, 0xb6fa, 0xc26b, 0xf1f4, 0xd2ae, 0xdec7, /*0x30-0x37*/ 0xcbca, 0xc26c, 0xc26d, 0xb3dc, 0xc26e, 0xb5a2, 0xc26f, 0xb9a2, /*0x38-0x3f*/ 0xc270, 0xc271, 0xc4f4, 0xf1f5, 0xc272, 0xc273, 0xf1f6, 0xc274, /*0x40-0x47*/ 0xc275, 0xc276, 0xc1c4, 0xc1fb, 0xd6b0, 0xf1f7, 0xc277, 0xc278, /*0x48-0x4f*/ 0xc279, 0xc27a, 0xf1f8, 0xc27b, 0xc1aa, 0xc27c, 0xc27d, 0xc27e, /*0x50-0x57*/ 0xc6b8, 0xc280, 0xbedb, 0xc281, 0xc282, 0xc283, 0xc284, 0xc285, /*0x58-0x5f*/ 0xc286, 0xc287, 0xc288, 0xc289, 0xc28a, 0xc28b, 0xc28c, 0xc28d, /*0x60-0x67*/ 0xc28e, 0xf1f9, 0xb4cf, 0xc28f, 0xc290, 0xc291, 0xc292, 0xc293, /*0x68-0x6f*/ 0xc294, 0xf1fa, 0xc295, 0xc296, 0xc297, 0xc298, 0xc299, 0xc29a, /*0x70-0x77*/ 0xc29b, 0xc29c, 0xc29d, 0xc29e, 0xc29f, 0xc2a0, 0xc340, 0xedb2, /*0x78-0x7f*/ 0xedb1, 0xc341, 0xc342, 0xcbe0, 0xd2de, 0xc343, 0xcbc1, 0xd5d8, /*0x80-0x87*/ 0xc344, 0xc8e2, 0xc345, 0xc0df, 0xbca1, 0xc346, 0xc347, 0xc348, /*0x88-0x8f*/ 0xc349, 0xc34a, 0xc34b, 0xebc1, 0xc34c, 0xc34d, 0xd0a4, 0xc34e, /*0x90-0x97*/ 0xd6e2, 0xc34f, 0xb6c7, 0xb8d8, 0xebc0, 0xb8ce, 0xc350, 0xebbf, /*0x98-0x9f*/ 0xb3a6, 0xb9c9, 0xd6ab, 0xc351, 0xb7f4, 0xb7ca, 0xc352, 0xc353, /*0xa0-0xa7*/ 0xc354, 0xbce7, 0xb7be, 0xebc6, 0xc355, 0xebc7, 0xb0b9, 0xbfcf, /*0xa8-0xaf*/ 0xc356, 0xebc5, 0xd3fd, 0xc357, 0xebc8, 0xc358, 0xc359, 0xebc9, /*0xb0-0xb7*/ 0xc35a, 0xc35b, 0xb7ce, 0xc35c, 0xebc2, 0xebc4, 0xc9f6, 0xd6d7, /*0xb8-0xbf*/ 0xd5cd, 0xd0b2, 0xebcf, 0xceb8, 0xebd0, 0xc35d, 0xb5a8, 0xc35e, /*0xc0-0xc7*/ 0xc35f, 0xc360, 0xc361, 0xc362, 0xb1b3, 0xebd2, 0xcca5, 0xc363, /*0xc8-0xcf*/ 0xc364, 0xc365, 0xc366, 0xc367, 0xc368, 0xc369, 0xc5d6, 0xebd3, /*0xd0-0xd7*/ 0xc36a, 0xebd1, 0xc5df, 0xebce, 0xcaa4, 0xebd5, 0xb0fb, 0xc36b, /*0xd8-0xdf*/ 0xc36c, 0xbafa, 0xc36d, 0xc36e, 0xd8b7, 0xf1e3, 0xc36f, 0xebca, /*0xe0-0xe7*/ 0xebcb, 0xebcc, 0xebcd, 0xebd6, 0xe6c0, 0xebd9, 0xc370, 0xbfe8, /*0xe8-0xef*/ 0xd2c8, 0xebd7, 0xebdc, 0xb8ec, 0xebd8, 0xc371, 0xbdba, 0xc372, /*0xf0-0xf7*/ 0xd0d8, 0xc373, 0xb0b7, 0xc374, 0xebdd, 0xc4dc, 0xc375, 0xc376, /*0xf8-0xff*/ /* 0x8100 */ 0xc377, 0xc378, 0xd6ac, 0xc379, 0xc37a, 0xc37b, 0xb4e0, 0xc37c, /*0x00-0x07*/ 0xc37d, 0xc2f6, 0xbcb9, 0xc37e, 0xc380, 0xebda, 0xebdb, 0xd4e0, /*0x08-0x0f*/ 0xc6ea, 0xc4d4, 0xebdf, 0xc5a7, 0xd9f5, 0xc381, 0xb2b1, 0xc382, /*0x10-0x17*/ 0xebe4, 0xc383, 0xbdc5, 0xc384, 0xc385, 0xc386, 0xebe2, 0xc387, /*0x18-0x1f*/ 0xc388, 0xc389, 0xc38a, 0xc38b, 0xc38c, 0xc38d, 0xc38e, 0xc38f, /*0x20-0x27*/ 0xc390, 0xc391, 0xc392, 0xc393, 0xebe3, 0xc394, 0xc395, 0xb8ac, /*0x28-0x2f*/ 0xc396, 0xcdd1, 0xebe5, 0xc397, 0xc398, 0xc399, 0xebe1, 0xc39a, /*0x30-0x37*/ 0xc1b3, 0xc39b, 0xc39c, 0xc39d, 0xc39e, 0xc39f, 0xc6a2, 0xc3a0, /*0x38-0x3f*/ 0xc440, 0xc441, 0xc442, 0xc443, 0xc444, 0xc445, 0xccf3, 0xc446, /*0x40-0x47*/ 0xebe6, 0xc447, 0xc0b0, 0xd2b8, 0xebe7, 0xc448, 0xc449, 0xc44a, /*0x48-0x4f*/ 0xb8af, 0xb8ad, 0xc44b, 0xebe8, 0xc7bb, 0xcdf3, 0xc44c, 0xc44d, /*0x50-0x57*/ 0xc44e, 0xebea, 0xebeb, 0xc44f, 0xc450, 0xc451, 0xc452, 0xc453, /*0x58-0x5f*/ 0xebed, 0xc454, 0xc455, 0xc456, 0xc457, 0xd0c8, 0xc458, 0xebf2, /*0x60-0x67*/ 0xc459, 0xebee, 0xc45a, 0xc45b, 0xc45c, 0xebf1, 0xc8f9, 0xc45d, /*0x68-0x6f*/ 0xd1fc, 0xebec, 0xc45e, 0xc45f, 0xebe9, 0xc460, 0xc461, 0xc462, /*0x70-0x77*/ 0xc463, 0xb8b9, 0xcfd9, 0xc4e5, 0xebef, 0xebf0, 0xccda, 0xcdc8, /*0x78-0x7f*/ 0xb0f2, 0xc464, 0xebf6, 0xc465, 0xc466, 0xc467, 0xc468, 0xc469, /*0x80-0x87*/ 0xebf5, 0xc46a, 0xb2b2, 0xc46b, 0xc46c, 0xc46d, 0xc46e, 0xb8e0, /*0x88-0x8f*/ 0xc46f, 0xebf7, 0xc470, 0xc471, 0xc472, 0xc473, 0xc474, 0xc475, /*0x90-0x97*/ 0xb1ec, 0xc476, 0xc477, 0xccc5, 0xc4a4, 0xcfa5, 0xc478, 0xc479, /*0x98-0x9f*/ 0xc47a, 0xc47b, 0xc47c, 0xebf9, 0xc47d, 0xc47e, 0xeca2, 0xc480, /*0xa0-0xa7*/ 0xc5f2, 0xc481, 0xebfa, 0xc482, 0xc483, 0xc484, 0xc485, 0xc486, /*0xa8-0xaf*/ 0xc487, 0xc488, 0xc489, 0xc9c5, 0xc48a, 0xc48b, 0xc48c, 0xc48d, /*0xb0-0xb7*/ 0xc48e, 0xc48f, 0xe2df, 0xebfe, 0xc490, 0xc491, 0xc492, 0xc493, /*0xb8-0xbf*/ 0xcdce, 0xeca1, 0xb1db, 0xd3b7, 0xc494, 0xc495, 0xd2dc, 0xc496, /*0xc0-0xc7*/ 0xc497, 0xc498, 0xebfd, 0xc499, 0xebfb, 0xc49a, 0xc49b, 0xc49c, /*0xc8-0xcf*/ 0xc49d, 0xc49e, 0xc49f, 0xc4a0, 0xc540, 0xc541, 0xc542, 0xc543, /*0xd0-0xd7*/ 0xc544, 0xc545, 0xc546, 0xc547, 0xc548, 0xc549, 0xc54a, 0xc54b, /*0xd8-0xdf*/ 0xc54c, 0xc54d, 0xc54e, 0xb3bc, 0xc54f, 0xc550, 0xc551, 0xeab0, /*0xe0-0xe7*/ 0xc552, 0xc553, 0xd7d4, 0xc554, 0xf4ab, 0xb3f4, 0xc555, 0xc556, /*0xe8-0xef*/ 0xc557, 0xc558, 0xc559, 0xd6c1, 0xd6c2, 0xc55a, 0xc55b, 0xc55c, /*0xf0-0xf7*/ 0xc55d, 0xc55e, 0xc55f, 0xd5e9, 0xbeca, 0xc560, 0xf4a7, 0xc561, /*0xf8-0xff*/ /* 0x8200 */ 0xd2a8, 0xf4a8, 0xf4a9, 0xc562, 0xf4aa, 0xbecb, 0xd3df, 0xc563, /*0x00-0x07*/ 0xc564, 0xc565, 0xc566, 0xc567, 0xc9e0, 0xc9e1, 0xc568, 0xc569, /*0x08-0x0f*/ 0xf3c2, 0xc56a, 0xcae6, 0xc56b, 0xccf2, 0xc56c, 0xc56d, 0xc56e, /*0x10-0x17*/ 0xc56f, 0xc570, 0xc571, 0xe2b6, 0xcbb4, 0xc572, 0xcee8, 0xd6db, /*0x18-0x1f*/ 0xc573, 0xf4ad, 0xf4ae, 0xf4af, 0xc574, 0xc575, 0xc576, 0xc577, /*0x20-0x27*/ 0xf4b2, 0xc578, 0xbabd, 0xf4b3, 0xb0e3, 0xf4b0, 0xc579, 0xf4b1, /*0x28-0x2f*/ 0xbda2, 0xb2d5, 0xc57a, 0xf4b6, 0xf4b7, 0xb6e6, 0xb2b0, 0xcfcf, /*0x30-0x37*/ 0xf4b4, 0xb4ac, 0xc57b, 0xf4b5, 0xc57c, 0xc57d, 0xf4b8, 0xc57e, /*0x38-0x3f*/ 0xc580, 0xc581, 0xc582, 0xc583, 0xf4b9, 0xc584, 0xc585, 0xcda7, /*0x40-0x47*/ 0xc586, 0xf4ba, 0xc587, 0xf4bb, 0xc588, 0xc589, 0xc58a, 0xf4bc, /*0x48-0x4f*/ 0xc58b, 0xc58c, 0xc58d, 0xc58e, 0xc58f, 0xc590, 0xc591, 0xc592, /*0x50-0x57*/ 0xcbd2, 0xc593, 0xf4bd, 0xc594, 0xc595, 0xc596, 0xc597, 0xf4be, /*0x58-0x5f*/ 0xc598, 0xc599, 0xc59a, 0xc59b, 0xc59c, 0xc59d, 0xc59e, 0xc59f, /*0x60-0x67*/ 0xf4bf, 0xc5a0, 0xc640, 0xc641, 0xc642, 0xc643, 0xf4de, 0xc1bc, /*0x68-0x6f*/ 0xbce8, 0xc644, 0xc9ab, 0xd1de, 0xe5f5, 0xc645, 0xc646, 0xc647, /*0x70-0x77*/ 0xc648, 0xdcb3, 0xd2d5, 0xc649, 0xc64a, 0xdcb4, 0xb0ac, 0xdcb5, /*0x78-0x7f*/ 0xc64b, 0xc64c, 0xbdda, 0xc64d, 0xdcb9, 0xc64e, 0xc64f, 0xc650, /*0x80-0x87*/ 0xd8c2, 0xc651, 0xdcb7, 0xd3f3, 0xc652, 0xc9d6, 0xdcba, 0xdcb6, /*0x88-0x8f*/ 0xc653, 0xdcbb, 0xc3a2, 0xc654, 0xc655, 0xc656, 0xc657, 0xdcbc, /*0x90-0x97*/ 0xdcc5, 0xdcbd, 0xc658, 0xc659, 0xcedf, 0xd6a5, 0xc65a, 0xdccf, /*0x98-0x9f*/ 0xc65b, 0xdccd, 0xc65c, 0xc65d, 0xdcd2, 0xbde6, 0xc2ab, 0xc65e, /*0xa0-0xa7*/ 0xdcb8, 0xdccb, 0xdcce, 0xdcbe, 0xb7d2, 0xb0c5, 0xdcc7, 0xd0be, /*0xa8-0xaf*/ 0xdcc1, 0xbba8, 0xc65f, 0xb7bc, 0xdccc, 0xc660, 0xc661, 0xdcc6, /*0xb0-0xb7*/ 0xdcbf, 0xc7db, 0xc662, 0xc663, 0xc664, 0xd1bf, 0xdcc0, 0xc665, /*0xb8-0xbf*/ 0xc666, 0xdcca, 0xc667, 0xc668, 0xdcd0, 0xc669, 0xc66a, 0xcead, /*0xc0-0xc7*/ 0xdcc2, 0xc66b, 0xdcc3, 0xdcc8, 0xdcc9, 0xb2d4, 0xdcd1, 0xcbd5, /*0xc8-0xcf*/ 0xc66c, 0xd4b7, 0xdcdb, 0xdcdf, 0xcca6, 0xdce6, 0xc66d, 0xc3e7, /*0xd0-0xd7*/ 0xdcdc, 0xc66e, 0xc66f, 0xbfc1, 0xdcd9, 0xc670, 0xb0fa, 0xb9b6, /*0xd8-0xdf*/ 0xdce5, 0xdcd3, 0xc671, 0xdcc4, 0xdcd6, 0xc8f4, 0xbfe0, 0xc672, /*0xe0-0xe7*/ 0xc673, 0xc674, 0xc675, 0xc9bb, 0xc676, 0xc677, 0xc678, 0xb1bd, /*0xe8-0xef*/ 0xc679, 0xd3a2, 0xc67a, 0xc67b, 0xdcda, 0xc67c, 0xc67d, 0xdcd5, /*0xf0-0xf7*/ 0xc67e, 0xc6bb, 0xc680, 0xdcde, 0xc681, 0xc682, 0xc683, 0xc684, /*0xf8-0xff*/ /* 0x8300 */ 0xc685, 0xd7c2, 0xc3af, 0xb7b6, 0xc7d1, 0xc3a9, 0xdce2, 0xdcd8, /*0x00-0x07*/ 0xdceb, 0xdcd4, 0xc686, 0xc687, 0xdcdd, 0xc688, 0xbea5, 0xdcd7, /*0x08-0x0f*/ 0xc689, 0xdce0, 0xc68a, 0xc68b, 0xdce3, 0xdce4, 0xc68c, 0xdcf8, /*0x10-0x17*/ 0xc68d, 0xc68e, 0xdce1, 0xdda2, 0xdce7, 0xc68f, 0xc690, 0xc691, /*0x18-0x1f*/ 0xc692, 0xc693, 0xc694, 0xc695, 0xc696, 0xc697, 0xc698, 0xbceb, /*0x20-0x27*/ 0xb4c4, 0xc699, 0xc69a, 0xc3a3, 0xb2e7, 0xdcfa, 0xc69b, 0xdcf2, /*0x28-0x2f*/ 0xc69c, 0xdcef, 0xc69d, 0xdcfc, 0xdcee, 0xd2f0, 0xb2e8, 0xc69e, /*0x30-0x37*/ 0xc8d7, 0xc8e3, 0xdcfb, 0xc69f, 0xdced, 0xc6a0, 0xc740, 0xc741, /*0x38-0x3f*/ 0xdcf7, 0xc742, 0xc743, 0xdcf5, 0xc744, 0xc745, 0xbea3, 0xdcf4, /*0x40-0x47*/ 0xc746, 0xb2dd, 0xc747, 0xc748, 0xc749, 0xc74a, 0xc74b, 0xdcf3, /*0x48-0x4f*/ 0xbcf6, 0xdce8, 0xbbc4, 0xc74c, 0xc0f3, 0xc74d, 0xc74e, 0xc74f, /*0x50-0x57*/ 0xc750, 0xc751, 0xbcd4, 0xdce9, 0xdcea, 0xc752, 0xdcf1, 0xdcf6, /*0x58-0x5f*/ 0xdcf9, 0xb5b4, 0xc753, 0xc8d9, 0xbbe7, 0xdcfe, 0xdcfd, 0xd3ab, /*0x60-0x67*/ 0xdda1, 0xdda3, 0xdda5, 0xd2f1, 0xdda4, 0xdda6, 0xdda7, 0xd2a9, /*0x68-0x6f*/ 0xc754, 0xc755, 0xc756, 0xc757, 0xc758, 0xc759, 0xc75a, 0xbac9, /*0x70-0x77*/ 0xdda9, 0xc75b, 0xc75c, 0xddb6, 0xddb1, 0xddb4, 0xc75d, 0xc75e, /*0x78-0x7f*/ 0xc75f, 0xc760, 0xc761, 0xc762, 0xc763, 0xddb0, 0xc6ce, 0xc764, /*0x80-0x87*/ 0xc765, 0xc0f2, 0xc766, 0xc767, 0xc768, 0xc769, 0xc9af, 0xc76a, /*0x88-0x8f*/ 0xc76b, 0xc76c, 0xdcec, 0xddae, 0xc76d, 0xc76e, 0xc76f, 0xc770, /*0x90-0x97*/ 0xddb7, 0xc771, 0xc772, 0xdcf0, 0xddaf, 0xc773, 0xddb8, 0xc774, /*0x98-0x9f*/ 0xddac, 0xc775, 0xc776, 0xc777, 0xc778, 0xc779, 0xc77a, 0xc77b, /*0xa0-0xa7*/ 0xddb9, 0xddb3, 0xddad, 0xc4aa, 0xc77c, 0xc77d, 0xc77e, 0xc780, /*0xa8-0xaf*/ 0xdda8, 0xc0b3, 0xc1ab, 0xddaa, 0xddab, 0xc781, 0xddb2, 0xbbf1, /*0xb0-0xb7*/ 0xddb5, 0xd3a8, 0xddba, 0xc782, 0xddbb, 0xc3a7, 0xc783, 0xc784, /*0xb8-0xbf*/ 0xddd2, 0xddbc, 0xc785, 0xc786, 0xc787, 0xddd1, 0xc788, 0xb9bd, /*0xc0-0xc7*/ 0xc789, 0xc78a, 0xbed5, 0xc78b, 0xbefa, 0xc78c, 0xc78d, 0xbaca, /*0xc8-0xcf*/ 0xc78e, 0xc78f, 0xc790, 0xc791, 0xddca, 0xc792, 0xddc5, 0xc793, /*0xd0-0xd7*/ 0xddbf, 0xc794, 0xc795, 0xc796, 0xb2cb, 0xddc3, 0xc797, 0xddcb, /*0xd8-0xdf*/ 0xb2a4, 0xddd5, 0xc798, 0xc799, 0xc79a, 0xddbe, 0xc79b, 0xc79c, /*0xe0-0xe7*/ 0xc79d, 0xc6d0, 0xddd0, 0xc79e, 0xc79f, 0xc7a0, 0xc840, 0xc841, /*0xe8-0xef*/ 0xddd4, 0xc1e2, 0xb7c6, 0xc842, 0xc843, 0xc844, 0xc845, 0xc846, /*0xf0-0xf7*/ 0xddce, 0xddcf, 0xc847, 0xc848, 0xc849, 0xddc4, 0xc84a, 0xc84b, /*0xf8-0xff*/ /* 0x8400 */ 0xc84c, 0xddbd, 0xc84d, 0xddcd, 0xccd1, 0xc84e, 0xddc9, 0xc84f, /*0x00-0x07*/ 0xc850, 0xc851, 0xc852, 0xddc2, 0xc3c8, 0xc6bc, 0xceae, 0xddcc, /*0x08-0x0f*/ 0xc853, 0xddc8, 0xc854, 0xc855, 0xc856, 0xc857, 0xc858, 0xc859, /*0x10-0x17*/ 0xddc1, 0xc85a, 0xc85b, 0xc85c, 0xddc6, 0xc2dc, 0xc85d, 0xc85e, /*0x18-0x1f*/ 0xc85f, 0xc860, 0xc861, 0xc862, 0xd3a9, 0xd3aa, 0xddd3, 0xcff4, /*0x20-0x27*/ 0xc8f8, 0xc863, 0xc864, 0xc865, 0xc866, 0xc867, 0xc868, 0xc869, /*0x28-0x2f*/ 0xc86a, 0xdde6, 0xc86b, 0xc86c, 0xc86d, 0xc86e, 0xc86f, 0xc870, /*0x30-0x37*/ 0xddc7, 0xc871, 0xc872, 0xc873, 0xdde0, 0xc2e4, 0xc874, 0xc875, /*0x38-0x3f*/ 0xc876, 0xc877, 0xc878, 0xc879, 0xc87a, 0xc87b, 0xdde1, 0xc87c, /*0x40-0x47*/ 0xc87d, 0xc87e, 0xc880, 0xc881, 0xc882, 0xc883, 0xc884, 0xc885, /*0x48-0x4f*/ 0xc886, 0xddd7, 0xc887, 0xc888, 0xc889, 0xc88a, 0xc88b, 0xd6f8, /*0x50-0x57*/ 0xc88c, 0xddd9, 0xddd8, 0xb8f0, 0xddd6, 0xc88d, 0xc88e, 0xc88f, /*0x58-0x5f*/ 0xc890, 0xc6cf, 0xc891, 0xb6ad, 0xc892, 0xc893, 0xc894, 0xc895, /*0x60-0x67*/ 0xc896, 0xdde2, 0xc897, 0xbaf9, 0xd4e1, 0xdde7, 0xc898, 0xc899, /*0x68-0x6f*/ 0xc89a, 0xb4d0, 0xc89b, 0xddda, 0xc89c, 0xbffb, 0xdde3, 0xc89d, /*0x70-0x77*/ 0xdddf, 0xc89e, 0xdddd, 0xc89f, 0xc8a0, 0xc940, 0xc941, 0xc942, /*0x78-0x7f*/ 0xc943, 0xc944, 0xb5d9, 0xc945, 0xc946, 0xc947, 0xc948, 0xdddb, /*0x80-0x87*/ 0xdddc, 0xddde, 0xc949, 0xbdaf, 0xdde4, 0xc94a, 0xdde5, 0xc94b, /*0x88-0x8f*/ 0xc94c, 0xc94d, 0xc94e, 0xc94f, 0xc950, 0xc951, 0xc952, 0xddf5, /*0x90-0x97*/ 0xc953, 0xc3c9, 0xc954, 0xc955, 0xcbe2, 0xc956, 0xc957, 0xc958, /*0x98-0x9f*/ 0xc959, 0xddf2, 0xc95a, 0xc95b, 0xc95c, 0xc95d, 0xc95e, 0xc95f, /*0xa0-0xa7*/ 0xc960, 0xc961, 0xc962, 0xc963, 0xc964, 0xc965, 0xc966, 0xd8e1, /*0xa8-0xaf*/ 0xc967, 0xc968, 0xc6d1, 0xc969, 0xddf4, 0xc96a, 0xc96b, 0xc96c, /*0xb0-0xb7*/ 0xd5f4, 0xddf3, 0xddf0, 0xc96d, 0xc96e, 0xddec, 0xc96f, 0xddef, /*0xb8-0xbf*/ 0xc970, 0xdde8, 0xc971, 0xc972, 0xd0ee, 0xc973, 0xc974, 0xc975, /*0xc0-0xc7*/ 0xc976, 0xc8d8, 0xddee, 0xc977, 0xc978, 0xdde9, 0xc979, 0xc97a, /*0xc8-0xcf*/ 0xddea, 0xcbf2, 0xc97b, 0xdded, 0xc97c, 0xc97d, 0xb1cd, 0xc97e, /*0xd0-0xd7*/ 0xc980, 0xc981, 0xc982, 0xc983, 0xc984, 0xc0b6, 0xc985, 0xbcbb, /*0xd8-0xdf*/ 0xddf1, 0xc986, 0xc987, 0xddf7, 0xc988, 0xddf6, 0xddeb, 0xc989, /*0xe0-0xe7*/ 0xc98a, 0xc98b, 0xc98c, 0xc98d, 0xc5ee, 0xc98e, 0xc98f, 0xc990, /*0xe8-0xef*/ 0xddfb, 0xc991, 0xc992, 0xc993, 0xc994, 0xc995, 0xc996, 0xc997, /*0xf0-0xf7*/ 0xc998, 0xc999, 0xc99a, 0xc99b, 0xdea4, 0xc99c, 0xc99d, 0xdea3, /*0xf8-0xff*/ /* 0x8500 */ 0xc99e, 0xc99f, 0xc9a0, 0xca40, 0xca41, 0xca42, 0xca43, 0xca44, /*0x00-0x07*/ 0xca45, 0xca46, 0xca47, 0xca48, 0xddf8, 0xca49, 0xca4a, 0xca4b, /*0x08-0x0f*/ 0xca4c, 0xc3ef, 0xca4d, 0xc2fb, 0xca4e, 0xca4f, 0xca50, 0xd5e1, /*0x10-0x17*/ 0xca51, 0xca52, 0xceb5, 0xca53, 0xca54, 0xca55, 0xca56, 0xddfd, /*0x18-0x1f*/ 0xca57, 0xb2cc, 0xca58, 0xca59, 0xca5a, 0xca5b, 0xca5c, 0xca5d, /*0x20-0x27*/ 0xca5e, 0xca5f, 0xca60, 0xc4e8, 0xcadf, 0xca61, 0xca62, 0xca63, /*0x28-0x2f*/ 0xca64, 0xca65, 0xca66, 0xca67, 0xca68, 0xca69, 0xca6a, 0xc7be, /*0x30-0x37*/ 0xddfa, 0xddfc, 0xddfe, 0xdea2, 0xb0aa, 0xb1ce, 0xca6b, 0xca6c, /*0x38-0x3f*/ 0xca6d, 0xca6e, 0xca6f, 0xdeac, 0xca70, 0xca71, 0xca72, 0xca73, /*0x40-0x47*/ 0xdea6, 0xbdb6, 0xc8ef, 0xca74, 0xca75, 0xca76, 0xca77, 0xca78, /*0x48-0x4f*/ 0xca79, 0xca7a, 0xca7b, 0xca7c, 0xca7d, 0xca7e, 0xdea1, 0xca80, /*0x50-0x57*/ 0xca81, 0xdea5, 0xca82, 0xca83, 0xca84, 0xca85, 0xdea9, 0xca86, /*0x58-0x5f*/ 0xca87, 0xca88, 0xca89, 0xca8a, 0xdea8, 0xca8b, 0xca8c, 0xca8d, /*0x60-0x67*/ 0xdea7, 0xca8e, 0xca8f, 0xca90, 0xca91, 0xca92, 0xca93, 0xca94, /*0x68-0x6f*/ 0xca95, 0xca96, 0xdead, 0xca97, 0xd4cc, 0xca98, 0xca99, 0xca9a, /*0x70-0x77*/ 0xca9b, 0xdeb3, 0xdeaa, 0xdeae, 0xca9c, 0xca9d, 0xc0d9, 0xca9e, /*0x78-0x7f*/ 0xca9f, 0xcaa0, 0xcb40, 0xcb41, 0xb1a1, 0xdeb6, 0xcb42, 0xdeb1, /*0x80-0x87*/ 0xcb43, 0xcb44, 0xcb45, 0xcb46, 0xcb47, 0xcb48, 0xcb49, 0xdeb2, /*0x88-0x8f*/ 0xcb4a, 0xcb4b, 0xcb4c, 0xcb4d, 0xcb4e, 0xcb4f, 0xcb50, 0xcb51, /*0x90-0x97*/ 0xcb52, 0xcb53, 0xcb54, 0xd1a6, 0xdeb5, 0xcb55, 0xcb56, 0xcb57, /*0x98-0x9f*/ 0xcb58, 0xcb59, 0xcb5a, 0xcb5b, 0xdeaf, 0xcb5c, 0xcb5d, 0xcb5e, /*0xa0-0xa7*/ 0xdeb0, 0xcb5f, 0xd0bd, 0xcb60, 0xcb61, 0xcb62, 0xdeb4, 0xcaed, /*0xa8-0xaf*/ 0xdeb9, 0xcb63, 0xcb64, 0xcb65, 0xcb66, 0xcb67, 0xcb68, 0xdeb8, /*0xb0-0xb7*/ 0xcb69, 0xdeb7, 0xcb6a, 0xcb6b, 0xcb6c, 0xcb6d, 0xcb6e, 0xcb6f, /*0xb8-0xbf*/ 0xcb70, 0xdebb, 0xcb71, 0xcb72, 0xcb73, 0xcb74, 0xcb75, 0xcb76, /*0xc0-0xc7*/ 0xcb77, 0xbde5, 0xcb78, 0xcb79, 0xcb7a, 0xcb7b, 0xcb7c, 0xb2d8, /*0xc8-0xcf*/ 0xc3ea, 0xcb7d, 0xcb7e, 0xdeba, 0xcb80, 0xc5ba, 0xcb81, 0xcb82, /*0xd0-0xd7*/ 0xcb83, 0xcb84, 0xcb85, 0xcb86, 0xdebc, 0xcb87, 0xcb88, 0xcb89, /*0xd8-0xdf*/ 0xcb8a, 0xcb8b, 0xcb8c, 0xcb8d, 0xccd9, 0xcb8e, 0xcb8f, 0xcb90, /*0xe0-0xe7*/ 0xcb91, 0xb7aa, 0xcb92, 0xcb93, 0xcb94, 0xcb95, 0xcb96, 0xcb97, /*0xe8-0xef*/ 0xcb98, 0xcb99, 0xcb9a, 0xcb9b, 0xcb9c, 0xcb9d, 0xcb9e, 0xcb9f, /*0xf0-0xf7*/ 0xcba0, 0xcc40, 0xcc41, 0xd4e5, 0xcc42, 0xcc43, 0xcc44, 0xdebd, /*0xf8-0xff*/ /* 0x8600 */ 0xcc45, 0xcc46, 0xcc47, 0xcc48, 0xcc49, 0xdebf, 0xcc4a, 0xcc4b, /*0x00-0x07*/ 0xcc4c, 0xcc4d, 0xcc4e, 0xcc4f, 0xcc50, 0xcc51, 0xcc52, 0xcc53, /*0x08-0x0f*/ 0xcc54, 0xc4a2, 0xcc55, 0xcc56, 0xcc57, 0xcc58, 0xdec1, 0xcc59, /*0x10-0x17*/ 0xcc5a, 0xcc5b, 0xcc5c, 0xcc5d, 0xcc5e, 0xcc5f, 0xcc60, 0xcc61, /*0x18-0x1f*/ 0xcc62, 0xcc63, 0xcc64, 0xcc65, 0xcc66, 0xcc67, 0xcc68, 0xdebe, /*0x20-0x27*/ 0xcc69, 0xdec0, 0xcc6a, 0xcc6b, 0xcc6c, 0xcc6d, 0xcc6e, 0xcc6f, /*0x28-0x2f*/ 0xcc70, 0xcc71, 0xcc72, 0xcc73, 0xcc74, 0xcc75, 0xcc76, 0xcc77, /*0x30-0x37*/ 0xd5ba, 0xcc78, 0xcc79, 0xcc7a, 0xdec2, 0xcc7b, 0xcc7c, 0xcc7d, /*0x38-0x3f*/ 0xcc7e, 0xcc80, 0xcc81, 0xcc82, 0xcc83, 0xcc84, 0xcc85, 0xcc86, /*0x40-0x47*/ 0xcc87, 0xcc88, 0xcc89, 0xcc8a, 0xcc8b, 0xf2ae, 0xbba2, 0xc2b2, /*0x48-0x4f*/ 0xc5b0, 0xc2c7, 0xcc8c, 0xcc8d, 0xf2af, 0xcc8e, 0xcc8f, 0xcc90, /*0x50-0x57*/ 0xcc91, 0xcc92, 0xd0e9, 0xcc93, 0xcc94, 0xcc95, 0xd3dd, 0xcc96, /*0x58-0x5f*/ 0xcc97, 0xcc98, 0xebbd, 0xcc99, 0xcc9a, 0xcc9b, 0xcc9c, 0xcc9d, /*0x60-0x67*/ 0xcc9e, 0xcc9f, 0xcca0, 0xb3e6, 0xf2b0, 0xcd40, 0xf2b1, 0xcd41, /*0x68-0x6f*/ 0xcd42, 0xcaad, 0xcd43, 0xcd44, 0xcd45, 0xcd46, 0xcd47, 0xcd48, /*0x70-0x77*/ 0xcd49, 0xbae7, 0xf2b3, 0xf2b5, 0xf2b4, 0xcbe4, 0xcfba, 0xf2b2, /*0x78-0x7f*/ 0xcab4, 0xd2cf, 0xc2ec, 0xcd4a, 0xcd4b, 0xcd4c, 0xcd4d, 0xcd4e, /*0x80-0x87*/ 0xcd4f, 0xcd50, 0xcec3, 0xf2b8, 0xb0f6, 0xf2b7, 0xcd51, 0xcd52, /*0x88-0x8f*/ 0xcd53, 0xcd54, 0xcd55, 0xf2be, 0xcd56, 0xb2cf, 0xcd57, 0xcd58, /*0x90-0x97*/ 0xcd59, 0xcd5a, 0xcd5b, 0xcd5c, 0xd1c1, 0xf2ba, 0xcd5d, 0xcd5e, /*0x98-0x9f*/ 0xcd5f, 0xcd60, 0xcd61, 0xf2bc, 0xd4e9, 0xcd62, 0xcd63, 0xf2bb, /*0xa0-0xa7*/ 0xf2b6, 0xf2bf, 0xf2bd, 0xcd64, 0xf2b9, 0xcd65, 0xcd66, 0xf2c7, /*0xa8-0xaf*/ 0xf2c4, 0xf2c6, 0xcd67, 0xcd68, 0xf2ca, 0xf2c2, 0xf2c0, 0xcd69, /*0xb0-0xb7*/ 0xcd6a, 0xcd6b, 0xf2c5, 0xcd6c, 0xcd6d, 0xcd6e, 0xcd6f, 0xcd70, /*0xb8-0xbf*/ 0xd6fb, 0xcd71, 0xcd72, 0xcd73, 0xf2c1, 0xcd74, 0xc7f9, 0xc9df, /*0xc0-0xc7*/ 0xcd75, 0xf2c8, 0xb9c6, 0xb5b0, 0xcd76, 0xcd77, 0xf2c3, 0xf2c9, /*0xc8-0xcf*/ 0xf2d0, 0xf2d6, 0xcd78, 0xcd79, 0xbbd7, 0xcd7a, 0xcd7b, 0xcd7c, /*0xd0-0xd7*/ 0xf2d5, 0xcddc, 0xcd7d, 0xd6eb, 0xcd7e, 0xcd80, 0xf2d2, 0xf2d4, /*0xd8-0xdf*/ 0xcd81, 0xcd82, 0xcd83, 0xcd84, 0xb8f2, 0xcd85, 0xcd86, 0xcd87, /*0xe0-0xe7*/ 0xcd88, 0xf2cb, 0xcd89, 0xcd8a, 0xcd8b, 0xf2ce, 0xc2f9, 0xcd8c, /*0xe8-0xef*/ 0xd5dd, 0xf2cc, 0xf2cd, 0xf2cf, 0xf2d3, 0xcd8d, 0xcd8e, 0xcd8f, /*0xf0-0xf7*/ 0xf2d9, 0xd3bc, 0xcd90, 0xcd91, 0xcd92, 0xcd93, 0xb6ea, 0xcd94, /*0xf8-0xff*/ /* 0x8700 */ 0xcaf1, 0xcd95, 0xb7e4, 0xf2d7, 0xcd96, 0xcd97, 0xcd98, 0xf2d8, /*0x00-0x07*/ 0xf2da, 0xf2dd, 0xf2db, 0xcd99, 0xcd9a, 0xf2dc, 0xcd9b, 0xcd9c, /*0x08-0x0f*/ 0xcd9d, 0xcd9e, 0xd1d1, 0xf2d1, 0xcd9f, 0xcdc9, 0xcda0, 0xcecf, /*0x10-0x17*/ 0xd6a9, 0xce40, 0xf2e3, 0xce41, 0xc3db, 0xce42, 0xf2e0, 0xce43, /*0x18-0x1f*/ 0xce44, 0xc0af, 0xf2ec, 0xf2de, 0xce45, 0xf2e1, 0xce46, 0xce47, /*0x20-0x27*/ 0xce48, 0xf2e8, 0xce49, 0xce4a, 0xce4b, 0xce4c, 0xf2e2, 0xce4d, /*0x28-0x2f*/ 0xce4e, 0xf2e7, 0xce4f, 0xce50, 0xf2e6, 0xce51, 0xce52, 0xf2e9, /*0x30-0x37*/ 0xce53, 0xce54, 0xce55, 0xf2df, 0xce56, 0xce57, 0xf2e4, 0xf2ea, /*0x38-0x3f*/ 0xce58, 0xce59, 0xce5a, 0xce5b, 0xce5c, 0xce5d, 0xce5e, 0xd3ac, /*0x40-0x47*/ 0xf2e5, 0xb2f5, 0xce5f, 0xce60, 0xf2f2, 0xce61, 0xd0ab, 0xce62, /*0x48-0x4f*/ 0xce63, 0xce64, 0xce65, 0xf2f5, 0xce66, 0xce67, 0xce68, 0xbbc8, /*0x50-0x57*/ 0xce69, 0xf2f9, 0xce6a, 0xce6b, 0xce6c, 0xce6d, 0xce6e, 0xce6f, /*0x58-0x5f*/ 0xf2f0, 0xce70, 0xce71, 0xf2f6, 0xf2f8, 0xf2fa, 0xce72, 0xce73, /*0x60-0x67*/ 0xce74, 0xce75, 0xce76, 0xce77, 0xce78, 0xce79, 0xf2f3, 0xce7a, /*0x68-0x6f*/ 0xf2f1, 0xce7b, 0xce7c, 0xce7d, 0xbafb, 0xce7e, 0xb5fb, 0xce80, /*0x70-0x77*/ 0xce81, 0xce82, 0xce83, 0xf2ef, 0xf2f7, 0xf2ed, 0xf2ee, 0xce84, /*0x78-0x7f*/ 0xce85, 0xce86, 0xf2eb, 0xf3a6, 0xce87, 0xf3a3, 0xce88, 0xce89, /*0x80-0x87*/ 0xf3a2, 0xce8a, 0xce8b, 0xf2f4, 0xce8c, 0xc8da, 0xce8d, 0xce8e, /*0x88-0x8f*/ 0xce8f, 0xce90, 0xce91, 0xf2fb, 0xce92, 0xce93, 0xce94, 0xf3a5, /*0x90-0x97*/ 0xce95, 0xce96, 0xce97, 0xce98, 0xce99, 0xce9a, 0xce9b, 0xc3f8, /*0x98-0x9f*/ 0xce9c, 0xce9d, 0xce9e, 0xce9f, 0xcea0, 0xcf40, 0xcf41, 0xcf42, /*0xa0-0xa7*/ 0xf2fd, 0xcf43, 0xcf44, 0xf3a7, 0xf3a9, 0xf3a4, 0xcf45, 0xf2fc, /*0xa8-0xaf*/ 0xcf46, 0xcf47, 0xcf48, 0xf3ab, 0xcf49, 0xf3aa, 0xcf4a, 0xcf4b, /*0xb0-0xb7*/ 0xcf4c, 0xcf4d, 0xc2dd, 0xcf4e, 0xcf4f, 0xf3ae, 0xcf50, 0xcf51, /*0xb8-0xbf*/ 0xf3b0, 0xcf52, 0xcf53, 0xcf54, 0xcf55, 0xcf56, 0xf3a1, 0xcf57, /*0xc0-0xc7*/ 0xcf58, 0xcf59, 0xf3b1, 0xf3ac, 0xcf5a, 0xcf5b, 0xcf5c, 0xcf5d, /*0xc8-0xcf*/ 0xcf5e, 0xf3af, 0xf2fe, 0xf3ad, 0xcf5f, 0xcf60, 0xcf61, 0xcf62, /*0xd0-0xd7*/ 0xcf63, 0xcf64, 0xcf65, 0xf3b2, 0xcf66, 0xcf67, 0xcf68, 0xcf69, /*0xd8-0xdf*/ 0xf3b4, 0xcf6a, 0xcf6b, 0xcf6c, 0xcf6d, 0xf3a8, 0xcf6e, 0xcf6f, /*0xe0-0xe7*/ 0xcf70, 0xcf71, 0xf3b3, 0xcf72, 0xcf73, 0xcf74, 0xf3b5, 0xcf75, /*0xe8-0xef*/ 0xcf76, 0xcf77, 0xcf78, 0xcf79, 0xcf7a, 0xcf7b, 0xcf7c, 0xcf7d, /*0xf0-0xf7*/ 0xcf7e, 0xd0b7, 0xcf80, 0xcf81, 0xcf82, 0xcf83, 0xf3b8, 0xcf84, /*0xf8-0xff*/ /* 0x8800 */ 0xcf85, 0xcf86, 0xcf87, 0xd9f9, 0xcf88, 0xcf89, 0xcf8a, 0xcf8b, /*0x00-0x07*/ 0xcf8c, 0xcf8d, 0xf3b9, 0xcf8e, 0xcf8f, 0xcf90, 0xcf91, 0xcf92, /*0x08-0x0f*/ 0xcf93, 0xcf94, 0xcf95, 0xf3b7, 0xcf96, 0xc8e4, 0xf3b6, 0xcf97, /*0x10-0x17*/ 0xcf98, 0xcf99, 0xcf9a, 0xf3ba, 0xcf9b, 0xcf9c, 0xcf9d, 0xcf9e, /*0x18-0x1f*/ 0xcf9f, 0xf3bb, 0xb4c0, 0xcfa0, 0xd040, 0xd041, 0xd042, 0xd043, /*0x20-0x27*/ 0xd044, 0xd045, 0xd046, 0xd047, 0xd048, 0xd049, 0xd04a, 0xd04b, /*0x28-0x2f*/ 0xd04c, 0xd04d, 0xeec3, 0xd04e, 0xd04f, 0xd050, 0xd051, 0xd052, /*0x30-0x37*/ 0xd053, 0xf3bc, 0xd054, 0xd055, 0xf3bd, 0xd056, 0xd057, 0xd058, /*0x38-0x3f*/ 0xd1aa, 0xd059, 0xd05a, 0xd05b, 0xf4ac, 0xd0c6, 0xd05c, 0xd05d, /*0x40-0x47*/ 0xd05e, 0xd05f, 0xd060, 0xd061, 0xd0d0, 0xd1dc, 0xd062, 0xd063, /*0x48-0x4f*/ 0xd064, 0xd065, 0xd066, 0xd067, 0xcfce, 0xd068, 0xd069, 0xbdd6, /*0x50-0x57*/ 0xd06a, 0xd1c3, 0xd06b, 0xd06c, 0xd06d, 0xd06e, 0xd06f, 0xd070, /*0x58-0x5f*/ 0xd071, 0xbae2, 0xe1e9, 0xd2c2, 0xf1c2, 0xb2b9, 0xd072, 0xd073, /*0x60-0x67*/ 0xb1ed, 0xf1c3, 0xd074, 0xc9c0, 0xb3c4, 0xd075, 0xd9f2, 0xd076, /*0x68-0x6f*/ 0xcba5, 0xd077, 0xf1c4, 0xd078, 0xd079, 0xd07a, 0xd07b, 0xd6d4, /*0x70-0x77*/ 0xd07c, 0xd07d, 0xd07e, 0xd080, 0xd081, 0xf1c5, 0xf4c0, 0xf1c6, /*0x78-0x7f*/ 0xd082, 0xd4ac, 0xf1c7, 0xd083, 0xb0c0, 0xf4c1, 0xd084, 0xd085, /*0x80-0x87*/ 0xf4c2, 0xd086, 0xd087, 0xb4fc, 0xd088, 0xc5db, 0xd089, 0xd08a, /*0x88-0x8f*/ 0xd08b, 0xd08c, 0xccbb, 0xd08d, 0xd08e, 0xd08f, 0xd0e4, 0xd090, /*0x90-0x97*/ 0xd091, 0xd092, 0xd093, 0xd094, 0xcde0, 0xd095, 0xd096, 0xd097, /*0x98-0x9f*/ 0xd098, 0xd099, 0xf1c8, 0xd09a, 0xd9f3, 0xd09b, 0xd09c, 0xd09d, /*0xa0-0xa7*/ 0xd09e, 0xd09f, 0xd0a0, 0xb1bb, 0xd140, 0xcfae, 0xd141, 0xd142, /*0xa8-0xaf*/ 0xd143, 0xb8a4, 0xd144, 0xd145, 0xd146, 0xd147, 0xd148, 0xf1ca, /*0xb0-0xb7*/ 0xd149, 0xd14a, 0xd14b, 0xd14c, 0xf1cb, 0xd14d, 0xd14e, 0xd14f, /*0xb8-0xbf*/ 0xd150, 0xb2c3, 0xc1d1, 0xd151, 0xd152, 0xd7b0, 0xf1c9, 0xd153, /*0xc0-0xc7*/ 0xd154, 0xf1cc, 0xd155, 0xd156, 0xd157, 0xd158, 0xf1ce, 0xd159, /*0xc8-0xcf*/ 0xd15a, 0xd15b, 0xd9f6, 0xd15c, 0xd2e1, 0xd4a3, 0xd15d, 0xd15e, /*0xd0-0xd7*/ 0xf4c3, 0xc8b9, 0xd15f, 0xd160, 0xd161, 0xd162, 0xd163, 0xf4c4, /*0xd8-0xdf*/ 0xd164, 0xd165, 0xf1cd, 0xf1cf, 0xbfe3, 0xf1d0, 0xd166, 0xd167, /*0xe0-0xe7*/ 0xf1d4, 0xd168, 0xd169, 0xd16a, 0xd16b, 0xd16c, 0xd16d, 0xd16e, /*0xe8-0xef*/ 0xf1d6, 0xf1d1, 0xd16f, 0xc9d1, 0xc5e1, 0xd170, 0xd171, 0xd172, /*0xf0-0xf7*/ 0xc2e3, 0xb9fc, 0xd173, 0xd174, 0xf1d3, 0xd175, 0xf1d5, 0xd176, /*0xf8-0xff*/ /* 0x8900 */ 0xd177, 0xd178, 0xb9d3, 0xd179, 0xd17a, 0xd17b, 0xd17c, 0xd17d, /*0x00-0x07*/ 0xd17e, 0xd180, 0xf1db, 0xd181, 0xd182, 0xd183, 0xd184, 0xd185, /*0x08-0x0f*/ 0xbad6, 0xd186, 0xb0fd, 0xf1d9, 0xd187, 0xd188, 0xd189, 0xd18a, /*0x10-0x17*/ 0xd18b, 0xf1d8, 0xf1d2, 0xf1da, 0xd18c, 0xd18d, 0xd18e, 0xd18f, /*0x18-0x1f*/ 0xd190, 0xf1d7, 0xd191, 0xd192, 0xd193, 0xc8ec, 0xd194, 0xd195, /*0x20-0x27*/ 0xd196, 0xd197, 0xcdca, 0xf1dd, 0xd198, 0xd199, 0xd19a, 0xd19b, /*0x28-0x2f*/ 0xe5bd, 0xd19c, 0xd19d, 0xd19e, 0xf1dc, 0xd19f, 0xf1de, 0xd1a0, /*0x30-0x37*/ 0xd240, 0xd241, 0xd242, 0xd243, 0xd244, 0xd245, 0xd246, 0xd247, /*0x38-0x3f*/ 0xd248, 0xf1df, 0xd249, 0xd24a, 0xcfe5, 0xd24b, 0xd24c, 0xd24d, /*0x40-0x47*/ 0xd24e, 0xd24f, 0xd250, 0xd251, 0xd252, 0xd253, 0xd254, 0xd255, /*0x48-0x4f*/ 0xd256, 0xd257, 0xd258, 0xd259, 0xd25a, 0xd25b, 0xd25c, 0xd25d, /*0x50-0x57*/ 0xd25e, 0xd25f, 0xd260, 0xd261, 0xd262, 0xd263, 0xf4c5, 0xbdf3, /*0x58-0x5f*/ 0xd264, 0xd265, 0xd266, 0xd267, 0xd268, 0xd269, 0xf1e0, 0xd26a, /*0x60-0x67*/ 0xd26b, 0xd26c, 0xd26d, 0xd26e, 0xd26f, 0xd270, 0xd271, 0xd272, /*0x68-0x6f*/ 0xd273, 0xd274, 0xd275, 0xd276, 0xd277, 0xd278, 0xd279, 0xd27a, /*0x70-0x77*/ 0xd27b, 0xd27c, 0xd27d, 0xf1e1, 0xd27e, 0xd280, 0xd281, 0xcef7, /*0x78-0x7f*/ 0xd282, 0xd2aa, 0xd283, 0xf1fb, 0xd284, 0xd285, 0xb8b2, 0xd286, /*0x80-0x87*/ 0xd287, 0xd288, 0xd289, 0xd28a, 0xd28b, 0xd28c, 0xd28d, 0xd28e, /*0x88-0x8f*/ 0xd28f, 0xd290, 0xd291, 0xd292, 0xd293, 0xd294, 0xd295, 0xd296, /*0x90-0x97*/ 0xd297, 0xd298, 0xd299, 0xd29a, 0xd29b, 0xd29c, 0xd29d, 0xd29e, /*0x98-0x9f*/ 0xd29f, 0xd2a0, 0xd340, 0xd341, 0xd342, 0xd343, 0xd344, 0xd345, /*0xa0-0xa7*/ 0xd346, 0xd347, 0xd348, 0xd349, 0xd34a, 0xd34b, 0xd34c, 0xd34d, /*0xa8-0xaf*/ 0xd34e, 0xd34f, 0xd350, 0xd351, 0xd352, 0xd353, 0xd354, 0xd355, /*0xb0-0xb7*/ 0xd356, 0xd357, 0xd358, 0xd359, 0xd35a, 0xd35b, 0xd35c, 0xd35d, /*0xb8-0xbf*/ 0xd35e, 0xbcfb, 0xb9db, 0xd35f, 0xb9e6, 0xc3d9, 0xcad3, 0xeae8, /*0xc0-0xc7*/ 0xc0c0, 0xbef5, 0xeae9, 0xeaea, 0xeaeb, 0xd360, 0xeaec, 0xeaed, /*0xc8-0xcf*/ 0xeaee, 0xeaef, 0xbdc7, 0xd361, 0xd362, 0xd363, 0xf5fb, 0xd364, /*0xd0-0xd7*/ 0xd365, 0xd366, 0xf5fd, 0xd367, 0xf5fe, 0xd368, 0xf5fc, 0xd369, /*0xd8-0xdf*/ 0xd36a, 0xd36b, 0xd36c, 0xbde2, 0xd36d, 0xf6a1, 0xb4a5, 0xd36e, /*0xe0-0xe7*/ 0xd36f, 0xd370, 0xd371, 0xf6a2, 0xd372, 0xd373, 0xd374, 0xf6a3, /*0xe8-0xef*/ 0xd375, 0xd376, 0xd377, 0xecb2, 0xd378, 0xd379, 0xd37a, 0xd37b, /*0xf0-0xf7*/ 0xd37c, 0xd37d, 0xd37e, 0xd380, 0xd381, 0xd382, 0xd383, 0xd384, /*0xf8-0xff*/ /* 0x8a00 */ 0xd1d4, 0xd385, 0xd386, 0xd387, 0xd388, 0xd389, 0xd38a, 0xd9ea, /*0x00-0x07*/ 0xd38b, 0xd38c, 0xd38d, 0xd38e, 0xd38f, 0xd390, 0xd391, 0xd392, /*0x08-0x0f*/ 0xd393, 0xd394, 0xd395, 0xd396, 0xd397, 0xd398, 0xd399, 0xd39a, /*0x10-0x17*/ 0xd39b, 0xd39c, 0xd39d, 0xd39e, 0xd39f, 0xd3a0, 0xd440, 0xd441, /*0x18-0x1f*/ 0xd442, 0xd443, 0xd444, 0xd445, 0xd446, 0xd447, 0xd448, 0xd449, /*0x20-0x27*/ 0xd44a, 0xd44b, 0xd44c, 0xd44d, 0xd44e, 0xd44f, 0xd450, 0xd451, /*0x28-0x2f*/ 0xd452, 0xd453, 0xd454, 0xd455, 0xd456, 0xd457, 0xd458, 0xd459, /*0x30-0x37*/ 0xd45a, 0xd45b, 0xd45c, 0xd45d, 0xd45e, 0xd45f, 0xf6a4, 0xd460, /*0x38-0x3f*/ 0xd461, 0xd462, 0xd463, 0xd464, 0xd465, 0xd466, 0xd467, 0xd468, /*0x40-0x47*/ 0xeeba, 0xd469, 0xd46a, 0xd46b, 0xd46c, 0xd46d, 0xd46e, 0xd46f, /*0x48-0x4f*/ 0xd470, 0xd471, 0xd472, 0xd473, 0xd474, 0xd475, 0xd476, 0xd477, /*0x50-0x57*/ 0xd478, 0xd479, 0xd47a, 0xd47b, 0xd47c, 0xd47d, 0xd47e, 0xd480, /*0x58-0x5f*/ 0xd481, 0xd482, 0xd483, 0xd484, 0xd485, 0xd486, 0xd487, 0xd488, /*0x60-0x67*/ 0xd489, 0xd48a, 0xd48b, 0xd48c, 0xd48d, 0xd48e, 0xd48f, 0xd490, /*0x68-0x6f*/ 0xd491, 0xd492, 0xd493, 0xd494, 0xd495, 0xd496, 0xd497, 0xd498, /*0x70-0x77*/ 0xd499, 0xd5b2, 0xd49a, 0xd49b, 0xd49c, 0xd49d, 0xd49e, 0xd49f, /*0x78-0x7f*/ 0xd4a0, 0xd540, 0xd541, 0xd542, 0xd543, 0xd544, 0xd545, 0xd546, /*0x80-0x87*/ 0xd547, 0xd3fe, 0xccdc, 0xd548, 0xd549, 0xd54a, 0xd54b, 0xd54c, /*0x88-0x8f*/ 0xd54d, 0xd54e, 0xd54f, 0xcac4, 0xd550, 0xd551, 0xd552, 0xd553, /*0x90-0x97*/ 0xd554, 0xd555, 0xd556, 0xd557, 0xd558, 0xd559, 0xd55a, 0xd55b, /*0x98-0x9f*/ 0xd55c, 0xd55d, 0xd55e, 0xd55f, 0xd560, 0xd561, 0xd562, 0xd563, /*0xa0-0xa7*/ 0xd564, 0xd565, 0xd566, 0xd567, 0xd568, 0xd569, 0xd56a, 0xd56b, /*0xa8-0xaf*/ 0xd56c, 0xd56d, 0xd56e, 0xd56f, 0xd570, 0xd571, 0xd572, 0xd573, /*0xb0-0xb7*/ 0xd574, 0xd575, 0xd576, 0xd577, 0xd578, 0xd579, 0xd57a, 0xd57b, /*0xb8-0xbf*/ 0xd57c, 0xd57d, 0xd57e, 0xd580, 0xd581, 0xd582, 0xd583, 0xd584, /*0xc0-0xc7*/ 0xd585, 0xd586, 0xd587, 0xd588, 0xd589, 0xd58a, 0xd58b, 0xd58c, /*0xc8-0xcf*/ 0xd58d, 0xd58e, 0xd58f, 0xd590, 0xd591, 0xd592, 0xd593, 0xd594, /*0xd0-0xd7*/ 0xd595, 0xd596, 0xd597, 0xd598, 0xd599, 0xd59a, 0xd59b, 0xd59c, /*0xd8-0xdf*/ 0xd59d, 0xd59e, 0xd59f, 0xd5a0, 0xd640, 0xd641, 0xd642, 0xd643, /*0xe0-0xe7*/ 0xd644, 0xd645, 0xd646, 0xd647, 0xd648, 0xd649, 0xd64a, 0xd64b, /*0xe8-0xef*/ 0xd64c, 0xd64d, 0xd64e, 0xd64f, 0xd650, 0xd651, 0xd652, 0xd653, /*0xf0-0xf7*/ 0xd654, 0xd655, 0xd656, 0xd657, 0xd658, 0xd659, 0xd65a, 0xd65b, /*0xf8-0xff*/ /* 0x8b00 */ 0xd65c, 0xd65d, 0xd65e, 0xd65f, 0xd660, 0xd661, 0xd662, 0xe5c0, /*0x00-0x07*/ 0xd663, 0xd664, 0xd665, 0xd666, 0xd667, 0xd668, 0xd669, 0xd66a, /*0x08-0x0f*/ 0xd66b, 0xd66c, 0xd66d, 0xd66e, 0xd66f, 0xd670, 0xd671, 0xd672, /*0x10-0x17*/ 0xd673, 0xd674, 0xd675, 0xd676, 0xd677, 0xd678, 0xd679, 0xd67a, /*0x18-0x1f*/ 0xd67b, 0xd67c, 0xd67d, 0xd67e, 0xd680, 0xd681, 0xf6a5, 0xd682, /*0x20-0x27*/ 0xd683, 0xd684, 0xd685, 0xd686, 0xd687, 0xd688, 0xd689, 0xd68a, /*0x28-0x2f*/ 0xd68b, 0xd68c, 0xd68d, 0xd68e, 0xd68f, 0xd690, 0xd691, 0xd692, /*0x30-0x37*/ 0xd693, 0xd694, 0xd695, 0xd696, 0xd697, 0xd698, 0xd699, 0xd69a, /*0x38-0x3f*/ 0xd69b, 0xd69c, 0xd69d, 0xd69e, 0xd69f, 0xd6a0, 0xd740, 0xd741, /*0x40-0x47*/ 0xd742, 0xd743, 0xd744, 0xd745, 0xd746, 0xd747, 0xd748, 0xd749, /*0x48-0x4f*/ 0xd74a, 0xd74b, 0xd74c, 0xd74d, 0xd74e, 0xd74f, 0xd750, 0xd751, /*0x50-0x57*/ 0xd752, 0xd753, 0xd754, 0xd755, 0xd756, 0xd757, 0xd758, 0xd759, /*0x58-0x5f*/ 0xd75a, 0xd75b, 0xd75c, 0xd75d, 0xd75e, 0xd75f, 0xbeaf, 0xd760, /*0x60-0x67*/ 0xd761, 0xd762, 0xd763, 0xd764, 0xc6a9, 0xd765, 0xd766, 0xd767, /*0x68-0x6f*/ 0xd768, 0xd769, 0xd76a, 0xd76b, 0xd76c, 0xd76d, 0xd76e, 0xd76f, /*0x70-0x77*/ 0xd770, 0xd771, 0xd772, 0xd773, 0xd774, 0xd775, 0xd776, 0xd777, /*0x78-0x7f*/ 0xd778, 0xd779, 0xd77a, 0xd77b, 0xd77c, 0xd77d, 0xd77e, 0xd780, /*0x80-0x87*/ 0xd781, 0xd782, 0xd783, 0xd784, 0xd785, 0xd786, 0xd787, 0xd788, /*0x88-0x8f*/ 0xd789, 0xd78a, 0xd78b, 0xd78c, 0xd78d, 0xd78e, 0xd78f, 0xd790, /*0x90-0x97*/ 0xd791, 0xd792, 0xd793, 0xd794, 0xd795, 0xd796, 0xd797, 0xd798, /*0x98-0x9f*/ 0xdaa5, 0xbcc6, 0xb6a9, 0xb8bc, 0xc8cf, 0xbca5, 0xdaa6, 0xdaa7, /*0xa0-0xa7*/ 0xccd6, 0xc8c3, 0xdaa8, 0xc6fd, 0xd799, 0xd1b5, 0xd2e9, 0xd1b6, /*0xa8-0xaf*/ 0xbcc7, 0xd79a, 0xbdb2, 0xbbe4, 0xdaa9, 0xdaaa, 0xd1c8, 0xdaab, /*0xb0-0xb7*/ 0xd0ed, 0xb6ef, 0xc2db, 0xd79b, 0xcbcf, 0xb7ed, 0xc9e8, 0xb7c3, /*0xb8-0xbf*/ 0xbef7, 0xd6a4, 0xdaac, 0xdaad, 0xc6c0, 0xd7e7, 0xcab6, 0xd79c, /*0xc0-0xc7*/ 0xd5a9, 0xcbdf, 0xd5ef, 0xdaae, 0xd6df, 0xb4ca, 0xdab0, 0xdaaf, /*0xc8-0xcf*/ 0xd79d, 0xd2eb, 0xdab1, 0xdab2, 0xdab3, 0xcad4, 0xdab4, 0xcaab, /*0xd0-0xd7*/ 0xdab5, 0xdab6, 0xb3cf, 0xd6ef, 0xdab7, 0xbbb0, 0xb5ae, 0xdab8, /*0xd8-0xdf*/ 0xdab9, 0xb9ee, 0xd1af, 0xd2e8, 0xdaba, 0xb8c3, 0xcfea, 0xb2ef, /*0xe0-0xe7*/ 0xdabb, 0xdabc, 0xd79e, 0xbdeb, 0xcedc, 0xd3ef, 0xdabd, 0xcef3, /*0xe8-0xef*/ 0xdabe, 0xd3d5, 0xbbe5, 0xdabf, 0xcbb5, 0xcbd0, 0xdac0, 0xc7eb, /*0xf0-0xf7*/ 0xd6ee, 0xdac1, 0xc5b5, 0xb6c1, 0xdac2, 0xb7cc, 0xbfce, 0xdac3, /*0xf8-0xff*/ /* 0x8c00 */ 0xdac4, 0xcbad, 0xdac5, 0xb5f7, 0xdac6, 0xc1c2, 0xd7bb, 0xdac7, /*0x00-0x07*/ 0xccb8, 0xd79f, 0xd2ea, 0xc4b1, 0xdac8, 0xb5fd, 0xbbd1, 0xdac9, /*0x08-0x0f*/ 0xd0b3, 0xdaca, 0xdacb, 0xcebd, 0xdacc, 0xdacd, 0xdace, 0xb2f7, /*0x10-0x17*/ 0xdad1, 0xdacf, 0xd1e8, 0xdad0, 0xc3d5, 0xdad2, 0xd7a0, 0xdad3, /*0x18-0x1f*/ 0xdad4, 0xdad5, 0xd0bb, 0xd2a5, 0xb0f9, 0xdad6, 0xc7ab, 0xdad7, /*0x20-0x27*/ 0xbdf7, 0xc3a1, 0xdad8, 0xdad9, 0xc3fd, 0xccb7, 0xdada, 0xdadb, /*0x28-0x2f*/ 0xc0be, 0xc6d7, 0xdadc, 0xdadd, 0xc7b4, 0xdade, 0xdadf, 0xb9c8, /*0x30-0x37*/ 0xd840, 0xd841, 0xd842, 0xd843, 0xd844, 0xd845, 0xd846, 0xd847, /*0x38-0x3f*/ 0xd848, 0xbbed, 0xd849, 0xd84a, 0xd84b, 0xd84c, 0xb6b9, 0xf4f8, /*0x40-0x47*/ 0xd84d, 0xf4f9, 0xd84e, 0xd84f, 0xcde3, 0xd850, 0xd851, 0xd852, /*0x48-0x4f*/ 0xd853, 0xd854, 0xd855, 0xd856, 0xd857, 0xf5b9, 0xd858, 0xd859, /*0x50-0x57*/ 0xd85a, 0xd85b, 0xebe0, 0xd85c, 0xd85d, 0xd85e, 0xd85f, 0xd860, /*0x58-0x5f*/ 0xd861, 0xcff3, 0xbbbf, 0xd862, 0xd863, 0xd864, 0xd865, 0xd866, /*0x60-0x67*/ 0xd867, 0xd868, 0xbac0, 0xd4a5, 0xd869, 0xd86a, 0xd86b, 0xd86c, /*0x68-0x6f*/ 0xd86d, 0xd86e, 0xd86f, 0xe1d9, 0xd870, 0xd871, 0xd872, 0xd873, /*0x70-0x77*/ 0xf5f4, 0xb1aa, 0xb2f2, 0xd874, 0xd875, 0xd876, 0xd877, 0xd878, /*0x78-0x7f*/ 0xd879, 0xd87a, 0xf5f5, 0xd87b, 0xd87c, 0xf5f7, 0xd87d, 0xd87e, /*0x80-0x87*/ 0xd880, 0xbad1, 0xf5f6, 0xd881, 0xc3b2, 0xd882, 0xd883, 0xd884, /*0x88-0x8f*/ 0xd885, 0xd886, 0xd887, 0xd888, 0xf5f9, 0xd889, 0xd88a, 0xd88b, /*0x90-0x97*/ 0xf5f8, 0xd88c, 0xd88d, 0xd88e, 0xd88f, 0xd890, 0xd891, 0xd892, /*0x98-0x9f*/ 0xd893, 0xd894, 0xd895, 0xd896, 0xd897, 0xd898, 0xd899, 0xd89a, /*0xa0-0xa7*/ 0xd89b, 0xd89c, 0xd89d, 0xd89e, 0xd89f, 0xd8a0, 0xd940, 0xd941, /*0xa8-0xaf*/ 0xd942, 0xd943, 0xd944, 0xd945, 0xd946, 0xd947, 0xd948, 0xd949, /*0xb0-0xb7*/ 0xd94a, 0xd94b, 0xd94c, 0xd94d, 0xd94e, 0xd94f, 0xd950, 0xd951, /*0xb8-0xbf*/ 0xd952, 0xd953, 0xd954, 0xd955, 0xd956, 0xd957, 0xd958, 0xd959, /*0xc0-0xc7*/ 0xd95a, 0xd95b, 0xd95c, 0xd95d, 0xd95e, 0xd95f, 0xd960, 0xd961, /*0xc8-0xcf*/ 0xd962, 0xd963, 0xd964, 0xd965, 0xd966, 0xd967, 0xd968, 0xd969, /*0xd0-0xd7*/ 0xd96a, 0xd96b, 0xd96c, 0xd96d, 0xd96e, 0xd96f, 0xd970, 0xd971, /*0xd8-0xdf*/ 0xd972, 0xd973, 0xd974, 0xd975, 0xd976, 0xd977, 0xd978, 0xd979, /*0xe0-0xe7*/ 0xd97a, 0xd97b, 0xd97c, 0xd97d, 0xd97e, 0xd980, 0xd981, 0xd982, /*0xe8-0xef*/ 0xd983, 0xd984, 0xd985, 0xd986, 0xd987, 0xd988, 0xd989, 0xd98a, /*0xf0-0xf7*/ 0xd98b, 0xd98c, 0xd98d, 0xd98e, 0xd98f, 0xd990, 0xd991, 0xd992, /*0xf8-0xff*/ /* 0x8d00 */ 0xd993, 0xd994, 0xd995, 0xd996, 0xd997, 0xd998, 0xd999, 0xd99a, /*0x00-0x07*/ 0xd99b, 0xd99c, 0xd99d, 0xd99e, 0xd99f, 0xd9a0, 0xda40, 0xda41, /*0x08-0x0f*/ 0xda42, 0xda43, 0xda44, 0xda45, 0xda46, 0xda47, 0xda48, 0xda49, /*0x10-0x17*/ 0xda4a, 0xda4b, 0xda4c, 0xda4d, 0xda4e, 0xb1b4, 0xd5ea, 0xb8ba, /*0x18-0x1f*/ 0xda4f, 0xb9b1, 0xb2c6, 0xd4f0, 0xcfcd, 0xb0dc, 0xd5cb, 0xbbf5, /*0x20-0x27*/ 0xd6ca, 0xb7b7, 0xccb0, 0xc6b6, 0xb1e1, 0xb9ba, 0xd6fc, 0xb9e1, /*0x28-0x2f*/ 0xb7a1, 0xbcfa, 0xeada, 0xeadb, 0xccf9, 0xb9f3, 0xeadc, 0xb4fb, /*0x30-0x37*/ 0xc3b3, 0xb7d1, 0xbad8, 0xeadd, 0xd4f4, 0xeade, 0xbcd6, 0xbbdf, /*0x38-0x3f*/ 0xeadf, 0xc1de, 0xc2b8, 0xd4df, 0xd7ca, 0xeae0, 0xeae1, 0xeae4, /*0x40-0x47*/ 0xeae2, 0xeae3, 0xc9de, 0xb8b3, 0xb6c4, 0xeae5, 0xcaea, 0xc9cd, /*0x48-0x4f*/ 0xb4cd, 0xda50, 0xda51, 0xe2d9, 0xc5e2, 0xeae6, 0xc0b5, 0xda52, /*0x50-0x57*/ 0xd7b8, 0xeae7, 0xd7ac, 0xc8fc, 0xd8d3, 0xd8cd, 0xd4de, 0xda53, /*0x58-0x5f*/ 0xd4f9, 0xc9c4, 0xd3ae, 0xb8d3, 0xb3e0, 0xda54, 0xc9e2, 0xf4f6, /*0x60-0x67*/ 0xda55, 0xda56, 0xda57, 0xbad5, 0xda58, 0xf4f7, 0xda59, 0xda5a, /*0x68-0x6f*/ 0xd7df, 0xda5b, 0xda5c, 0xf4f1, 0xb8b0, 0xd5d4, 0xb8cf, 0xc6f0, /*0x70-0x77*/ 0xda5d, 0xda5e, 0xda5f, 0xda60, 0xda61, 0xda62, 0xda63, 0xda64, /*0x78-0x7f*/ 0xda65, 0xb3c3, 0xda66, 0xda67, 0xf4f2, 0xb3ac, 0xda68, 0xda69, /*0x80-0x87*/ 0xda6a, 0xda6b, 0xd4bd, 0xc7f7, 0xda6c, 0xda6d, 0xda6e, 0xda6f, /*0x88-0x8f*/ 0xda70, 0xf4f4, 0xda71, 0xda72, 0xf4f3, 0xda73, 0xda74, 0xda75, /*0x90-0x97*/ 0xda76, 0xda77, 0xda78, 0xda79, 0xda7a, 0xda7b, 0xda7c, 0xcccb, /*0x98-0x9f*/ 0xda7d, 0xda7e, 0xda80, 0xc8a4, 0xda81, 0xda82, 0xda83, 0xda84, /*0xa0-0xa7*/ 0xda85, 0xda86, 0xda87, 0xda88, 0xda89, 0xda8a, 0xda8b, 0xda8c, /*0xa8-0xaf*/ 0xda8d, 0xf4f5, 0xda8e, 0xd7e3, 0xc5bf, 0xf5c0, 0xda8f, 0xda90, /*0xb0-0xb7*/ 0xf5bb, 0xda91, 0xf5c3, 0xda92, 0xf5c2, 0xda93, 0xd6ba, 0xf5c1, /*0xb8-0xbf*/ 0xda94, 0xda95, 0xda96, 0xd4be, 0xf5c4, 0xda97, 0xf5cc, 0xda98, /*0xc0-0xc7*/ 0xda99, 0xda9a, 0xda9b, 0xb0cf, 0xb5f8, 0xda9c, 0xf5c9, 0xf5ca, /*0xc8-0xcf*/ 0xda9d, 0xc5dc, 0xda9e, 0xda9f, 0xdaa0, 0xdb40, 0xf5c5, 0xf5c6, /*0xd0-0xd7*/ 0xdb41, 0xdb42, 0xf5c7, 0xf5cb, 0xdb43, 0xbee0, 0xf5c8, 0xb8fa, /*0xd8-0xdf*/ 0xdb44, 0xdb45, 0xdb46, 0xf5d0, 0xf5d3, 0xdb47, 0xdb48, 0xdb49, /*0xe0-0xe7*/ 0xbfe7, 0xdb4a, 0xb9f2, 0xf5bc, 0xf5cd, 0xdb4b, 0xdb4c, 0xc2b7, /*0xe8-0xef*/ 0xdb4d, 0xdb4e, 0xdb4f, 0xccf8, 0xdb50, 0xbcf9, 0xdb51, 0xf5ce, /*0xf0-0xf7*/ 0xf5cf, 0xf5d1, 0xb6e5, 0xf5d2, 0xdb52, 0xf5d5, 0xdb53, 0xdb54, /*0xf8-0xff*/ /* 0x8e00 */ 0xdb55, 0xdb56, 0xdb57, 0xdb58, 0xdb59, 0xf5bd, 0xdb5a, 0xdb5b, /*0x00-0x07*/ 0xdb5c, 0xf5d4, 0xd3bb, 0xdb5d, 0xb3ec, 0xdb5e, 0xdb5f, 0xcca4, /*0x08-0x0f*/ 0xdb60, 0xdb61, 0xdb62, 0xdb63, 0xf5d6, 0xdb64, 0xdb65, 0xdb66, /*0x10-0x17*/ 0xdb67, 0xdb68, 0xdb69, 0xdb6a, 0xdb6b, 0xf5d7, 0xbee1, 0xf5d8, /*0x18-0x1f*/ 0xdb6c, 0xdb6d, 0xccdf, 0xf5db, 0xdb6e, 0xdb6f, 0xdb70, 0xdb71, /*0x20-0x27*/ 0xdb72, 0xb2c8, 0xd7d9, 0xdb73, 0xf5d9, 0xdb74, 0xf5da, 0xf5dc, /*0x28-0x2f*/ 0xdb75, 0xf5e2, 0xdb76, 0xdb77, 0xdb78, 0xf5e0, 0xdb79, 0xdb7a, /*0x30-0x37*/ 0xdb7b, 0xf5df, 0xf5dd, 0xdb7c, 0xdb7d, 0xf5e1, 0xdb7e, 0xdb80, /*0x38-0x3f*/ 0xf5de, 0xf5e4, 0xf5e5, 0xdb81, 0xcce3, 0xdb82, 0xdb83, 0xe5bf, /*0x40-0x47*/ 0xb5b8, 0xf5e3, 0xf5e8, 0xcca3, 0xdb84, 0xdb85, 0xdb86, 0xdb87, /*0x48-0x4f*/ 0xdb88, 0xf5e6, 0xf5e7, 0xdb89, 0xdb8a, 0xdb8b, 0xdb8c, 0xdb8d, /*0x50-0x57*/ 0xdb8e, 0xf5be, 0xdb8f, 0xdb90, 0xdb91, 0xdb92, 0xdb93, 0xdb94, /*0x58-0x5f*/ 0xdb95, 0xdb96, 0xdb97, 0xdb98, 0xdb99, 0xdb9a, 0xb1c4, 0xdb9b, /*0x60-0x67*/ 0xdb9c, 0xf5bf, 0xdb9d, 0xdb9e, 0xb5c5, 0xb2e4, 0xdb9f, 0xf5ec, /*0x68-0x6f*/ 0xf5e9, 0xdba0, 0xb6d7, 0xdc40, 0xf5ed, 0xdc41, 0xf5ea, 0xdc42, /*0x70-0x77*/ 0xdc43, 0xdc44, 0xdc45, 0xdc46, 0xf5eb, 0xdc47, 0xdc48, 0xb4da, /*0x78-0x7f*/ 0xdc49, 0xd4ea, 0xdc4a, 0xdc4b, 0xdc4c, 0xf5ee, 0xdc4d, 0xb3f9, /*0x80-0x87*/ 0xdc4e, 0xdc4f, 0xdc50, 0xdc51, 0xdc52, 0xdc53, 0xdc54, 0xf5ef, /*0x88-0x8f*/ 0xf5f1, 0xdc55, 0xdc56, 0xdc57, 0xf5f0, 0xdc58, 0xdc59, 0xdc5a, /*0x90-0x97*/ 0xdc5b, 0xdc5c, 0xdc5d, 0xdc5e, 0xf5f2, 0xdc5f, 0xf5f3, 0xdc60, /*0x98-0x9f*/ 0xdc61, 0xdc62, 0xdc63, 0xdc64, 0xdc65, 0xdc66, 0xdc67, 0xdc68, /*0xa0-0xa7*/ 0xdc69, 0xdc6a, 0xdc6b, 0xc9ed, 0xb9aa, 0xdc6c, 0xdc6d, 0xc7fb, /*0xa8-0xaf*/ 0xdc6e, 0xdc6f, 0xb6e3, 0xdc70, 0xdc71, 0xdc72, 0xdc73, 0xdc74, /*0xb0-0xb7*/ 0xdc75, 0xdc76, 0xccc9, 0xdc77, 0xdc78, 0xdc79, 0xdc7a, 0xdc7b, /*0xb8-0xbf*/ 0xdc7c, 0xdc7d, 0xdc7e, 0xdc80, 0xdc81, 0xdc82, 0xdc83, 0xdc84, /*0xc0-0xc7*/ 0xdc85, 0xdc86, 0xdc87, 0xdc88, 0xdc89, 0xdc8a, 0xeaa6, 0xdc8b, /*0xc8-0xcf*/ 0xdc8c, 0xdc8d, 0xdc8e, 0xdc8f, 0xdc90, 0xdc91, 0xdc92, 0xdc93, /*0xd0-0xd7*/ 0xdc94, 0xdc95, 0xdc96, 0xdc97, 0xdc98, 0xdc99, 0xdc9a, 0xdc9b, /*0xd8-0xdf*/ 0xdc9c, 0xdc9d, 0xdc9e, 0xdc9f, 0xdca0, 0xdd40, 0xdd41, 0xdd42, /*0xe0-0xe7*/ 0xdd43, 0xdd44, 0xdd45, 0xdd46, 0xdd47, 0xdd48, 0xdd49, 0xdd4a, /*0xe8-0xef*/ 0xdd4b, 0xdd4c, 0xdd4d, 0xdd4e, 0xdd4f, 0xdd50, 0xdd51, 0xdd52, /*0xf0-0xf7*/ 0xdd53, 0xdd54, 0xdd55, 0xdd56, 0xdd57, 0xdd58, 0xdd59, 0xdd5a, /*0xf8-0xff*/ /* 0x8f00 */ 0xdd5b, 0xdd5c, 0xdd5d, 0xdd5e, 0xdd5f, 0xdd60, 0xdd61, 0xdd62, /*0x00-0x07*/ 0xdd63, 0xdd64, 0xdd65, 0xdd66, 0xdd67, 0xdd68, 0xdd69, 0xdd6a, /*0x08-0x0f*/ 0xdd6b, 0xdd6c, 0xdd6d, 0xdd6e, 0xdd6f, 0xdd70, 0xdd71, 0xdd72, /*0x10-0x17*/ 0xdd73, 0xdd74, 0xdd75, 0xdd76, 0xdd77, 0xdd78, 0xdd79, 0xdd7a, /*0x18-0x1f*/ 0xdd7b, 0xdd7c, 0xdd7d, 0xdd7e, 0xdd80, 0xdd81, 0xdd82, 0xdd83, /*0x20-0x27*/ 0xdd84, 0xdd85, 0xdd86, 0xdd87, 0xdd88, 0xdd89, 0xdd8a, 0xdd8b, /*0x28-0x2f*/ 0xdd8c, 0xdd8d, 0xdd8e, 0xdd8f, 0xdd90, 0xdd91, 0xdd92, 0xdd93, /*0x30-0x37*/ 0xdd94, 0xdd95, 0xdd96, 0xdd97, 0xdd98, 0xdd99, 0xdd9a, 0xdd9b, /*0x38-0x3f*/ 0xdd9c, 0xdd9d, 0xdd9e, 0xdd9f, 0xdda0, 0xde40, 0xde41, 0xde42, /*0x40-0x47*/ 0xde43, 0xde44, 0xde45, 0xde46, 0xde47, 0xde48, 0xde49, 0xde4a, /*0x48-0x4f*/ 0xde4b, 0xde4c, 0xde4d, 0xde4e, 0xde4f, 0xde50, 0xde51, 0xde52, /*0x50-0x57*/ 0xde53, 0xde54, 0xde55, 0xde56, 0xde57, 0xde58, 0xde59, 0xde5a, /*0x58-0x5f*/ 0xde5b, 0xde5c, 0xde5d, 0xde5e, 0xde5f, 0xde60, 0xb3b5, 0xd4fe, /*0x60-0x67*/ 0xb9ec, 0xd0f9, 0xde61, 0xe9ed, 0xd7aa, 0xe9ee, 0xc2d6, 0xc8ed, /*0x68-0x6f*/ 0xbae4, 0xe9ef, 0xe9f0, 0xe9f1, 0xd6e1, 0xe9f2, 0xe9f3, 0xe9f5, /*0x70-0x77*/ 0xe9f4, 0xe9f6, 0xe9f7, 0xc7e1, 0xe9f8, 0xd4d8, 0xe9f9, 0xbdce, /*0x78-0x7f*/ 0xde62, 0xe9fa, 0xe9fb, 0xbdcf, 0xe9fc, 0xb8a8, 0xc1be, 0xe9fd, /*0x80-0x87*/ 0xb1b2, 0xbbd4, 0xb9f5, 0xe9fe, 0xde63, 0xeaa1, 0xeaa2, 0xeaa3, /*0x88-0x8f*/ 0xb7f8, 0xbcad, 0xde64, 0xcae4, 0xe0ce, 0xd4af, 0xcfbd, 0xd5b7, /*0x90-0x97*/ 0xeaa4, 0xd5de, 0xeaa5, 0xd0c1, 0xb9bc, 0xde65, 0xb4c7, 0xb1d9, /*0x98-0x9f*/ 0xde66, 0xde67, 0xde68, 0xc0b1, 0xde69, 0xde6a, 0xde6b, 0xde6c, /*0xa0-0xa7*/ 0xb1e6, 0xb1e7, 0xde6d, 0xb1e8, 0xde6e, 0xde6f, 0xde70, 0xde71, /*0xa8-0xaf*/ 0xb3bd, 0xc8e8, 0xde72, 0xde73, 0xde74, 0xde75, 0xe5c1, 0xde76, /*0xb0-0xb7*/ 0xde77, 0xb1df, 0xde78, 0xde79, 0xde7a, 0xc1c9, 0xb4ef, 0xde7b, /*0xb8-0xbf*/ 0xde7c, 0xc7a8, 0xd3d8, 0xde7d, 0xc6f9, 0xd1b8, 0xde7e, 0xb9fd, /*0xc0-0xc7*/ 0xc2f5, 0xde80, 0xde81, 0xde82, 0xde83, 0xde84, 0xd3ad, 0xde85, /*0xc8-0xcf*/ 0xd4cb, 0xbdfc, 0xde86, 0xe5c2, 0xb7b5, 0xe5c3, 0xde87, 0xde88, /*0xd0-0xd7*/ 0xbbb9, 0xd5e2, 0xde89, 0xbdf8, 0xd4b6, 0xcea5, 0xc1ac, 0xb3d9, /*0xd8-0xdf*/ 0xde8a, 0xde8b, 0xccf6, 0xde8c, 0xe5c6, 0xe5c4, 0xe5c8, 0xde8d, /*0xe0-0xe7*/ 0xe5ca, 0xe5c7, 0xb5cf, 0xc6c8, 0xde8e, 0xb5fc, 0xe5c5, 0xde8f, /*0xe8-0xef*/ 0xcaf6, 0xde90, 0xde91, 0xe5c9, 0xde92, 0xde93, 0xde94, 0xc3d4, /*0xf0-0xf7*/ 0xb1c5, 0xbca3, 0xde95, 0xde96, 0xde97, 0xd7b7, 0xde98, 0xde99, /*0xf8-0xff*/ /* 0x9000 */ 0xcdcb, 0xcbcd, 0xcaca, 0xccd3, 0xe5cc, 0xe5cb, 0xc4e6, 0xde9a, /*0x00-0x07*/ 0xde9b, 0xd1a1, 0xd1b7, 0xe5cd, 0xde9c, 0xe5d0, 0xde9d, 0xcdb8, /*0x08-0x0f*/ 0xd6f0, 0xe5cf, 0xb5dd, 0xde9e, 0xcdbe, 0xde9f, 0xe5d1, 0xb6ba, /*0x10-0x17*/ 0xdea0, 0xdf40, 0xcda8, 0xb9e4, 0xdf41, 0xcac5, 0xb3d1, 0xcbd9, /*0x18-0x1f*/ 0xd4ec, 0xe5d2, 0xb7ea, 0xdf42, 0xdf43, 0xdf44, 0xe5ce, 0xdf45, /*0x20-0x27*/ 0xdf46, 0xdf47, 0xdf48, 0xdf49, 0xdf4a, 0xe5d5, 0xb4fe, 0xe5d6, /*0x28-0x2f*/ 0xdf4b, 0xdf4c, 0xdf4d, 0xdf4e, 0xdf4f, 0xe5d3, 0xe5d4, 0xdf50, /*0x30-0x37*/ 0xd2dd, 0xdf51, 0xdf52, 0xc2df, 0xb1c6, 0xdf53, 0xd3e2, 0xdf54, /*0x38-0x3f*/ 0xdf55, 0xb6dd, 0xcbec, 0xdf56, 0xe5d7, 0xdf57, 0xdf58, 0xd3f6, /*0x40-0x47*/ 0xdf59, 0xdf5a, 0xdf5b, 0xdf5c, 0xdf5d, 0xb1e9, 0xdf5e, 0xb6f4, /*0x48-0x4f*/ 0xe5da, 0xe5d8, 0xe5d9, 0xb5c0, 0xdf5f, 0xdf60, 0xdf61, 0xd2c5, /*0x50-0x57*/ 0xe5dc, 0xdf62, 0xdf63, 0xe5de, 0xdf64, 0xdf65, 0xdf66, 0xdf67, /*0x58-0x5f*/ 0xdf68, 0xdf69, 0xe5dd, 0xc7b2, 0xdf6a, 0xd2a3, 0xdf6b, 0xdf6c, /*0x60-0x67*/ 0xe5db, 0xdf6d, 0xdf6e, 0xdf6f, 0xdf70, 0xd4e2, 0xd5da, 0xdf71, /*0x68-0x6f*/ 0xdf72, 0xdf73, 0xdf74, 0xdf75, 0xe5e0, 0xd7f1, 0xdf76, 0xdf77, /*0x70-0x77*/ 0xdf78, 0xdf79, 0xdf7a, 0xdf7b, 0xdf7c, 0xe5e1, 0xdf7d, 0xb1dc, /*0x78-0x7f*/ 0xd1fb, 0xdf7e, 0xe5e2, 0xe5e4, 0xdf80, 0xdf81, 0xdf82, 0xdf83, /*0x80-0x87*/ 0xe5e3, 0xdf84, 0xdf85, 0xe5e5, 0xdf86, 0xdf87, 0xdf88, 0xdf89, /*0x88-0x8f*/ 0xdf8a, 0xd2d8, 0xdf8b, 0xb5cb, 0xdf8c, 0xe7df, 0xdf8d, 0xdaf5, /*0x90-0x97*/ 0xdf8e, 0xdaf8, 0xdf8f, 0xdaf6, 0xdf90, 0xdaf7, 0xdf91, 0xdf92, /*0x98-0x9f*/ 0xdf93, 0xdafa, 0xd0cf, 0xc4c7, 0xdf94, 0xdf95, 0xb0ee, 0xdf96, /*0xa0-0xa7*/ 0xdf97, 0xdf98, 0xd0b0, 0xdf99, 0xdaf9, 0xdf9a, 0xd3ca, 0xbaaa, /*0xa8-0xaf*/ 0xdba2, 0xc7f1, 0xdf9b, 0xdafc, 0xdafb, 0xc9db, 0xdafd, 0xdf9c, /*0xb0-0xb7*/ 0xdba1, 0xd7de, 0xdafe, 0xc1da, 0xdf9d, 0xdf9e, 0xdba5, 0xdf9f, /*0xb8-0xbf*/ 0xdfa0, 0xd3f4, 0xe040, 0xe041, 0xdba7, 0xdba4, 0xe042, 0xdba8, /*0xc0-0xc7*/ 0xe043, 0xe044, 0xbdbc, 0xe045, 0xe046, 0xe047, 0xc0c9, 0xdba3, /*0xc8-0xcf*/ 0xdba6, 0xd6a3, 0xe048, 0xdba9, 0xe049, 0xe04a, 0xe04b, 0xdbad, /*0xd0-0xd7*/ 0xe04c, 0xe04d, 0xe04e, 0xdbae, 0xdbac, 0xbac2, 0xe04f, 0xe050, /*0xd8-0xdf*/ 0xe051, 0xbfa4, 0xdbab, 0xe052, 0xe053, 0xe054, 0xdbaa, 0xd4c7, /*0xe0-0xe7*/ 0xb2bf, 0xe055, 0xe056, 0xdbaf, 0xe057, 0xb9f9, 0xe058, 0xdbb0, /*0xe8-0xef*/ 0xe059, 0xe05a, 0xe05b, 0xe05c, 0xb3bb, 0xe05d, 0xe05e, 0xe05f, /*0xf0-0xf7*/ 0xb5a6, 0xe060, 0xe061, 0xe062, 0xe063, 0xb6bc, 0xdbb1, 0xe064, /*0xf8-0xff*/ /* 0x9100 */ 0xe065, 0xe066, 0xb6f5, 0xe067, 0xdbb2, 0xe068, 0xe069, 0xe06a, /*0x00-0x07*/ 0xe06b, 0xe06c, 0xe06d, 0xe06e, 0xe06f, 0xe070, 0xe071, 0xe072, /*0x08-0x0f*/ 0xe073, 0xe074, 0xe075, 0xe076, 0xe077, 0xe078, 0xe079, 0xe07a, /*0x10-0x17*/ 0xe07b, 0xb1c9, 0xe07c, 0xe07d, 0xe07e, 0xe080, 0xdbb4, 0xe081, /*0x18-0x1f*/ 0xe082, 0xe083, 0xdbb3, 0xdbb5, 0xe084, 0xe085, 0xe086, 0xe087, /*0x20-0x27*/ 0xe088, 0xe089, 0xe08a, 0xe08b, 0xe08c, 0xe08d, 0xe08e, 0xdbb7, /*0x28-0x2f*/ 0xe08f, 0xdbb6, 0xe090, 0xe091, 0xe092, 0xe093, 0xe094, 0xe095, /*0x30-0x37*/ 0xe096, 0xdbb8, 0xe097, 0xe098, 0xe099, 0xe09a, 0xe09b, 0xe09c, /*0x38-0x3f*/ 0xe09d, 0xe09e, 0xe09f, 0xdbb9, 0xe0a0, 0xe140, 0xdbba, 0xe141, /*0x40-0x47*/ 0xe142, 0xd3cf, 0xf4fa, 0xc7f5, 0xd7c3, 0xc5e4, 0xf4fc, 0xf4fd, /*0x48-0x4f*/ 0xf4fb, 0xe143, 0xbec6, 0xe144, 0xe145, 0xe146, 0xe147, 0xd0ef, /*0x50-0x57*/ 0xe148, 0xe149, 0xb7d3, 0xe14a, 0xe14b, 0xd4cd, 0xccaa, 0xe14c, /*0x58-0x5f*/ 0xe14d, 0xf5a2, 0xf5a1, 0xbaa8, 0xf4fe, 0xcbd6, 0xe14e, 0xe14f, /*0x60-0x67*/ 0xe150, 0xf5a4, 0xc0d2, 0xe151, 0xb3ea, 0xe152, 0xcdaa, 0xf5a5, /*0x68-0x6f*/ 0xf5a3, 0xbdb4, 0xf5a8, 0xe153, 0xf5a9, 0xbdcd, 0xc3b8, 0xbfe1, /*0x70-0x77*/ 0xcbe1, 0xf5aa, 0xe154, 0xe155, 0xe156, 0xf5a6, 0xf5a7, 0xc4f0, /*0x78-0x7f*/ 0xe157, 0xe158, 0xe159, 0xe15a, 0xe15b, 0xf5ac, 0xe15c, 0xb4bc, /*0x80-0x87*/ 0xe15d, 0xd7ed, 0xe15e, 0xb4d7, 0xf5ab, 0xf5ae, 0xe15f, 0xe160, /*0x88-0x8f*/ 0xf5ad, 0xf5af, 0xd0d1, 0xe161, 0xe162, 0xe163, 0xe164, 0xe165, /*0x90-0x97*/ 0xe166, 0xe167, 0xc3d1, 0xc8a9, 0xe168, 0xe169, 0xe16a, 0xe16b, /*0x98-0x9f*/ 0xe16c, 0xe16d, 0xf5b0, 0xf5b1, 0xe16e, 0xe16f, 0xe170, 0xe171, /*0xa0-0xa7*/ 0xe172, 0xe173, 0xf5b2, 0xe174, 0xe175, 0xf5b3, 0xf5b4, 0xf5b5, /*0xa8-0xaf*/ 0xe176, 0xe177, 0xe178, 0xe179, 0xf5b7, 0xf5b6, 0xe17a, 0xe17b, /*0xb0-0xb7*/ 0xe17c, 0xe17d, 0xf5b8, 0xe17e, 0xe180, 0xe181, 0xe182, 0xe183, /*0xb8-0xbf*/ 0xe184, 0xe185, 0xe186, 0xe187, 0xe188, 0xe189, 0xe18a, 0xb2c9, /*0xc0-0xc7*/ 0xe18b, 0xd3d4, 0xcacd, 0xe18c, 0xc0ef, 0xd6d8, 0xd2b0, 0xc1bf, /*0xc8-0xcf*/ 0xe18d, 0xbdf0, 0xe18e, 0xe18f, 0xe190, 0xe191, 0xe192, 0xe193, /*0xd0-0xd7*/ 0xe194, 0xe195, 0xe196, 0xe197, 0xb8aa, 0xe198, 0xe199, 0xe19a, /*0xd8-0xdf*/ 0xe19b, 0xe19c, 0xe19d, 0xe19e, 0xe19f, 0xe1a0, 0xe240, 0xe241, /*0xe0-0xe7*/ 0xe242, 0xe243, 0xe244, 0xe245, 0xe246, 0xe247, 0xe248, 0xe249, /*0xe8-0xef*/ 0xe24a, 0xe24b, 0xe24c, 0xe24d, 0xe24e, 0xe24f, 0xe250, 0xe251, /*0xf0-0xf7*/ 0xe252, 0xe253, 0xe254, 0xe255, 0xe256, 0xe257, 0xe258, 0xe259, /*0xf8-0xff*/ /* 0x9200 */ 0xe25a, 0xe25b, 0xe25c, 0xe25d, 0xe25e, 0xe25f, 0xe260, 0xe261, /*0x00-0x07*/ 0xe262, 0xe263, 0xe264, 0xe265, 0xe266, 0xe267, 0xe268, 0xe269, /*0x08-0x0f*/ 0xe26a, 0xe26b, 0xe26c, 0xe26d, 0xe26e, 0xe26f, 0xe270, 0xe271, /*0x10-0x17*/ 0xe272, 0xe273, 0xe274, 0xe275, 0xe276, 0xe277, 0xe278, 0xe279, /*0x18-0x1f*/ 0xe27a, 0xe27b, 0xe27c, 0xe27d, 0xe27e, 0xe280, 0xe281, 0xe282, /*0x20-0x27*/ 0xe283, 0xe284, 0xe285, 0xe286, 0xe287, 0xe288, 0xe289, 0xe28a, /*0x28-0x2f*/ 0xe28b, 0xe28c, 0xe28d, 0xe28e, 0xe28f, 0xe290, 0xe291, 0xe292, /*0x30-0x37*/ 0xe293, 0xe294, 0xe295, 0xe296, 0xe297, 0xe298, 0xe299, 0xe29a, /*0x38-0x3f*/ 0xe29b, 0xe29c, 0xe29d, 0xe29e, 0xe29f, 0xe2a0, 0xe340, 0xe341, /*0x40-0x47*/ 0xe342, 0xe343, 0xe344, 0xe345, 0xe346, 0xe347, 0xe348, 0xe349, /*0x48-0x4f*/ 0xe34a, 0xe34b, 0xe34c, 0xe34d, 0xe34e, 0xe34f, 0xe350, 0xe351, /*0x50-0x57*/ 0xe352, 0xe353, 0xe354, 0xe355, 0xe356, 0xe357, 0xe358, 0xe359, /*0x58-0x5f*/ 0xe35a, 0xe35b, 0xe35c, 0xe35d, 0xe35e, 0xe35f, 0xe360, 0xe361, /*0x60-0x67*/ 0xe362, 0xe363, 0xe364, 0xe365, 0xe366, 0xe367, 0xe368, 0xe369, /*0x68-0x6f*/ 0xe36a, 0xe36b, 0xe36c, 0xe36d, 0xbcf8, 0xe36e, 0xe36f, 0xe370, /*0x70-0x77*/ 0xe371, 0xe372, 0xe373, 0xe374, 0xe375, 0xe376, 0xe377, 0xe378, /*0x78-0x7f*/ 0xe379, 0xe37a, 0xe37b, 0xe37c, 0xe37d, 0xe37e, 0xe380, 0xe381, /*0x80-0x87*/ 0xe382, 0xe383, 0xe384, 0xe385, 0xe386, 0xe387, 0xf6c6, 0xe388, /*0x88-0x8f*/ 0xe389, 0xe38a, 0xe38b, 0xe38c, 0xe38d, 0xe38e, 0xe38f, 0xe390, /*0x90-0x97*/ 0xe391, 0xe392, 0xe393, 0xe394, 0xe395, 0xe396, 0xe397, 0xe398, /*0x98-0x9f*/ 0xe399, 0xe39a, 0xe39b, 0xe39c, 0xe39d, 0xe39e, 0xe39f, 0xe3a0, /*0xa0-0xa7*/ 0xe440, 0xe441, 0xe442, 0xe443, 0xe444, 0xe445, 0xf6c7, 0xe446, /*0xa8-0xaf*/ 0xe447, 0xe448, 0xe449, 0xe44a, 0xe44b, 0xe44c, 0xe44d, 0xe44e, /*0xb0-0xb7*/ 0xe44f, 0xe450, 0xe451, 0xe452, 0xe453, 0xe454, 0xe455, 0xe456, /*0xb8-0xbf*/ 0xe457, 0xe458, 0xe459, 0xe45a, 0xe45b, 0xe45c, 0xe45d, 0xe45e, /*0xc0-0xc7*/ 0xf6c8, 0xe45f, 0xe460, 0xe461, 0xe462, 0xe463, 0xe464, 0xe465, /*0xc8-0xcf*/ 0xe466, 0xe467, 0xe468, 0xe469, 0xe46a, 0xe46b, 0xe46c, 0xe46d, /*0xd0-0xd7*/ 0xe46e, 0xe46f, 0xe470, 0xe471, 0xe472, 0xe473, 0xe474, 0xe475, /*0xd8-0xdf*/ 0xe476, 0xe477, 0xe478, 0xe479, 0xe47a, 0xe47b, 0xe47c, 0xe47d, /*0xe0-0xe7*/ 0xe47e, 0xe480, 0xe481, 0xe482, 0xe483, 0xe484, 0xe485, 0xe486, /*0xe8-0xef*/ 0xe487, 0xe488, 0xe489, 0xe48a, 0xe48b, 0xe48c, 0xe48d, 0xe48e, /*0xf0-0xf7*/ 0xe48f, 0xe490, 0xe491, 0xe492, 0xe493, 0xe494, 0xe495, 0xe496, /*0xf8-0xff*/ /* 0x9300 */ 0xe497, 0xe498, 0xe499, 0xe49a, 0xe49b, 0xe49c, 0xe49d, 0xe49e, /*0x00-0x07*/ 0xe49f, 0xe4a0, 0xe540, 0xe541, 0xe542, 0xe543, 0xe544, 0xe545, /*0x08-0x0f*/ 0xe546, 0xe547, 0xe548, 0xe549, 0xe54a, 0xe54b, 0xe54c, 0xe54d, /*0x10-0x17*/ 0xe54e, 0xe54f, 0xe550, 0xe551, 0xe552, 0xe553, 0xe554, 0xe555, /*0x18-0x1f*/ 0xe556, 0xe557, 0xe558, 0xe559, 0xe55a, 0xe55b, 0xe55c, 0xe55d, /*0x20-0x27*/ 0xe55e, 0xe55f, 0xe560, 0xe561, 0xe562, 0xe563, 0xe564, 0xe565, /*0x28-0x2f*/ 0xe566, 0xe567, 0xe568, 0xe569, 0xe56a, 0xe56b, 0xe56c, 0xe56d, /*0x30-0x37*/ 0xe56e, 0xe56f, 0xe570, 0xe571, 0xe572, 0xe573, 0xf6c9, 0xe574, /*0x38-0x3f*/ 0xe575, 0xe576, 0xe577, 0xe578, 0xe579, 0xe57a, 0xe57b, 0xe57c, /*0x40-0x47*/ 0xe57d, 0xe57e, 0xe580, 0xe581, 0xe582, 0xe583, 0xe584, 0xe585, /*0x48-0x4f*/ 0xe586, 0xe587, 0xe588, 0xe589, 0xe58a, 0xe58b, 0xe58c, 0xe58d, /*0x50-0x57*/ 0xe58e, 0xe58f, 0xe590, 0xe591, 0xe592, 0xe593, 0xe594, 0xe595, /*0x58-0x5f*/ 0xe596, 0xe597, 0xe598, 0xe599, 0xe59a, 0xe59b, 0xe59c, 0xe59d, /*0x60-0x67*/ 0xe59e, 0xe59f, 0xf6ca, 0xe5a0, 0xe640, 0xe641, 0xe642, 0xe643, /*0x68-0x6f*/ 0xe644, 0xe645, 0xe646, 0xe647, 0xe648, 0xe649, 0xe64a, 0xe64b, /*0x70-0x77*/ 0xe64c, 0xe64d, 0xe64e, 0xe64f, 0xe650, 0xe651, 0xe652, 0xe653, /*0x78-0x7f*/ 0xe654, 0xe655, 0xe656, 0xe657, 0xe658, 0xe659, 0xe65a, 0xe65b, /*0x80-0x87*/ 0xe65c, 0xe65d, 0xe65e, 0xe65f, 0xe660, 0xe661, 0xe662, 0xf6cc, /*0x88-0x8f*/ 0xe663, 0xe664, 0xe665, 0xe666, 0xe667, 0xe668, 0xe669, 0xe66a, /*0x90-0x97*/ 0xe66b, 0xe66c, 0xe66d, 0xe66e, 0xe66f, 0xe670, 0xe671, 0xe672, /*0x98-0x9f*/ 0xe673, 0xe674, 0xe675, 0xe676, 0xe677, 0xe678, 0xe679, 0xe67a, /*0xa0-0xa7*/ 0xe67b, 0xe67c, 0xe67d, 0xe67e, 0xe680, 0xe681, 0xe682, 0xe683, /*0xa8-0xaf*/ 0xe684, 0xe685, 0xe686, 0xe687, 0xe688, 0xe689, 0xe68a, 0xe68b, /*0xb0-0xb7*/ 0xe68c, 0xe68d, 0xe68e, 0xe68f, 0xe690, 0xe691, 0xe692, 0xe693, /*0xb8-0xbf*/ 0xe694, 0xe695, 0xe696, 0xe697, 0xe698, 0xe699, 0xe69a, 0xe69b, /*0xc0-0xc7*/ 0xe69c, 0xe69d, 0xf6cb, 0xe69e, 0xe69f, 0xe6a0, 0xe740, 0xe741, /*0xc8-0xcf*/ 0xe742, 0xe743, 0xe744, 0xe745, 0xe746, 0xe747, 0xf7e9, 0xe748, /*0xd0-0xd7*/ 0xe749, 0xe74a, 0xe74b, 0xe74c, 0xe74d, 0xe74e, 0xe74f, 0xe750, /*0xd8-0xdf*/ 0xe751, 0xe752, 0xe753, 0xe754, 0xe755, 0xe756, 0xe757, 0xe758, /*0xe0-0xe7*/ 0xe759, 0xe75a, 0xe75b, 0xe75c, 0xe75d, 0xe75e, 0xe75f, 0xe760, /*0xe8-0xef*/ 0xe761, 0xe762, 0xe763, 0xe764, 0xe765, 0xe766, 0xe767, 0xe768, /*0xf0-0xf7*/ 0xe769, 0xe76a, 0xe76b, 0xe76c, 0xe76d, 0xe76e, 0xe76f, 0xe770, /*0xf8-0xff*/ /* 0x9400 */ 0xe771, 0xe772, 0xe773, 0xe774, 0xe775, 0xe776, 0xe777, 0xe778, /*0x00-0x07*/ 0xe779, 0xe77a, 0xe77b, 0xe77c, 0xe77d, 0xe77e, 0xe780, 0xe781, /*0x08-0x0f*/ 0xe782, 0xe783, 0xe784, 0xe785, 0xe786, 0xe787, 0xe788, 0xe789, /*0x10-0x17*/ 0xe78a, 0xe78b, 0xe78c, 0xe78d, 0xe78e, 0xe78f, 0xe790, 0xe791, /*0x18-0x1f*/ 0xe792, 0xe793, 0xe794, 0xe795, 0xe796, 0xe797, 0xe798, 0xe799, /*0x20-0x27*/ 0xe79a, 0xe79b, 0xe79c, 0xe79d, 0xe79e, 0xe79f, 0xe7a0, 0xe840, /*0x28-0x2f*/ 0xe841, 0xe842, 0xe843, 0xe844, 0xe845, 0xe846, 0xe847, 0xe848, /*0x30-0x37*/ 0xe849, 0xe84a, 0xe84b, 0xe84c, 0xe84d, 0xe84e, 0xf6cd, 0xe84f, /*0x38-0x3f*/ 0xe850, 0xe851, 0xe852, 0xe853, 0xe854, 0xe855, 0xe856, 0xe857, /*0x40-0x47*/ 0xe858, 0xe859, 0xe85a, 0xe85b, 0xe85c, 0xe85d, 0xe85e, 0xe85f, /*0x48-0x4f*/ 0xe860, 0xe861, 0xe862, 0xe863, 0xe864, 0xe865, 0xe866, 0xe867, /*0x50-0x57*/ 0xe868, 0xe869, 0xe86a, 0xe86b, 0xe86c, 0xe86d, 0xe86e, 0xe86f, /*0x58-0x5f*/ 0xe870, 0xe871, 0xe872, 0xe873, 0xe874, 0xe875, 0xe876, 0xe877, /*0x60-0x67*/ 0xe878, 0xe879, 0xe87a, 0xf6ce, 0xe87b, 0xe87c, 0xe87d, 0xe87e, /*0x68-0x6f*/ 0xe880, 0xe881, 0xe882, 0xe883, 0xe884, 0xe885, 0xe886, 0xe887, /*0x70-0x77*/ 0xe888, 0xe889, 0xe88a, 0xe88b, 0xe88c, 0xe88d, 0xe88e, 0xe88f, /*0x78-0x7f*/ 0xe890, 0xe891, 0xe892, 0xe893, 0xe894, 0xeec4, 0xeec5, 0xeec6, /*0x80-0x87*/ 0xd5eb, 0xb6a4, 0xeec8, 0xeec7, 0xeec9, 0xeeca, 0xc7a5, 0xeecb, /*0x88-0x8f*/ 0xeecc, 0xe895, 0xb7b0, 0xb5f6, 0xeecd, 0xeecf, 0xe896, 0xeece, /*0x90-0x97*/ 0xe897, 0xb8c6, 0xeed0, 0xeed1, 0xeed2, 0xb6db, 0xb3ae, 0xd6d3, /*0x98-0x9f*/ 0xc4c6, 0xb1b5, 0xb8d6, 0xeed3, 0xeed4, 0xd4bf, 0xc7d5, 0xbefb, /*0xa0-0xa7*/ 0xced9, 0xb9b3, 0xeed6, 0xeed5, 0xeed8, 0xeed7, 0xc5a5, 0xeed9, /*0xa8-0xaf*/ 0xeeda, 0xc7ae, 0xeedb, 0xc7af, 0xeedc, 0xb2a7, 0xeedd, 0xeede, /*0xb0-0xb7*/ 0xeedf, 0xeee0, 0xeee1, 0xd7ea, 0xeee2, 0xeee3, 0xbcd8, 0xeee4, /*0xb8-0xbf*/ 0xd3cb, 0xccfa, 0xb2ac, 0xc1e5, 0xeee5, 0xc7a6, 0xc3ad, 0xe898, /*0xc0-0xc7*/ 0xeee6, 0xeee7, 0xeee8, 0xeee9, 0xeeea, 0xeeeb, 0xeeec, 0xe899, /*0xc8-0xcf*/ 0xeeed, 0xeeee, 0xeeef, 0xe89a, 0xe89b, 0xeef0, 0xeef1, 0xeef2, /*0xd0-0xd7*/ 0xeef4, 0xeef3, 0xe89c, 0xeef5, 0xcdad, 0xc2c1, 0xeef6, 0xeef7, /*0xd8-0xdf*/ 0xeef8, 0xd5a1, 0xeef9, 0xcfb3, 0xeefa, 0xeefb, 0xe89d, 0xeefc, /*0xe0-0xe7*/ 0xeefd, 0xefa1, 0xeefe, 0xefa2, 0xb8f5, 0xc3fa, 0xefa3, 0xefa4, /*0xe8-0xef*/ 0xbdc2, 0xd2bf, 0xb2f9, 0xefa5, 0xefa6, 0xefa7, 0xd2f8, 0xefa8, /*0xf0-0xf7*/ 0xd6fd, 0xefa9, 0xc6cc, 0xe89e, 0xefaa, 0xefab, 0xc1b4, 0xefac, /*0xf8-0xff*/ /* 0x9500 */ 0xcffa, 0xcbf8, 0xefae, 0xefad, 0xb3fa, 0xb9f8, 0xefaf, 0xefb0, /*0x00-0x07*/ 0xd0e2, 0xefb1, 0xefb2, 0xb7e6, 0xd0bf, 0xefb3, 0xefb4, 0xefb5, /*0x08-0x0f*/ 0xc8f1, 0xcce0, 0xefb6, 0xefb7, 0xefb8, 0xefb9, 0xefba, 0xd5e0, /*0x10-0x17*/ 0xefbb, 0xb4ed, 0xc3aa, 0xefbc, 0xe89f, 0xefbd, 0xefbe, 0xefbf, /*0x18-0x1f*/ 0xe8a0, 0xcefd, 0xefc0, 0xc2e0, 0xb4b8, 0xd7b6, 0xbdf5, 0xe940, /*0x20-0x27*/ 0xcfc7, 0xefc3, 0xefc1, 0xefc2, 0xefc4, 0xb6a7, 0xbcfc, 0xbee2, /*0x28-0x2f*/ 0xc3cc, 0xefc5, 0xefc6, 0xe941, 0xefc7, 0xefcf, 0xefc8, 0xefc9, /*0x30-0x37*/ 0xefca, 0xc7c2, 0xeff1, 0xb6cd, 0xefcb, 0xe942, 0xefcc, 0xefcd, /*0x38-0x3f*/ 0xb6c6, 0xc3be, 0xefce, 0xe943, 0xefd0, 0xefd1, 0xefd2, 0xd5f2, /*0x40-0x47*/ 0xe944, 0xefd3, 0xc4f7, 0xe945, 0xefd4, 0xc4f8, 0xefd5, 0xefd6, /*0x48-0x4f*/ 0xb8e4, 0xb0f7, 0xefd7, 0xefd8, 0xefd9, 0xe946, 0xefda, 0xefdb, /*0x50-0x57*/ 0xefdc, 0xefdd, 0xe947, 0xefde, 0xbeb5, 0xefe1, 0xefdf, 0xefe0, /*0x58-0x5f*/ 0xe948, 0xefe2, 0xefe3, 0xc1cd, 0xefe4, 0xefe5, 0xefe6, 0xefe7, /*0x60-0x67*/ 0xefe8, 0xefe9, 0xefea, 0xefeb, 0xefec, 0xc0d8, 0xe949, 0xefed, /*0x68-0x6f*/ 0xc1ad, 0xefee, 0xefef, 0xeff0, 0xe94a, 0xe94b, 0xcfe2, 0xe94c, /*0x70-0x77*/ 0xe94d, 0xe94e, 0xe94f, 0xe950, 0xe951, 0xe952, 0xe953, 0xb3a4, /*0x78-0x7f*/ 0xe954, 0xe955, 0xe956, 0xe957, 0xe958, 0xe959, 0xe95a, 0xe95b, /*0x80-0x87*/ 0xe95c, 0xe95d, 0xe95e, 0xe95f, 0xe960, 0xe961, 0xe962, 0xe963, /*0x88-0x8f*/ 0xe964, 0xe965, 0xe966, 0xe967, 0xe968, 0xe969, 0xe96a, 0xe96b, /*0x90-0x97*/ 0xe96c, 0xe96d, 0xe96e, 0xe96f, 0xe970, 0xe971, 0xe972, 0xe973, /*0x98-0x9f*/ 0xe974, 0xe975, 0xe976, 0xe977, 0xe978, 0xe979, 0xe97a, 0xe97b, /*0xa0-0xa7*/ 0xe97c, 0xe97d, 0xe97e, 0xe980, 0xe981, 0xe982, 0xe983, 0xe984, /*0xa8-0xaf*/ 0xe985, 0xe986, 0xe987, 0xe988, 0xe989, 0xe98a, 0xe98b, 0xe98c, /*0xb0-0xb7*/ 0xe98d, 0xe98e, 0xe98f, 0xe990, 0xe991, 0xe992, 0xe993, 0xe994, /*0xb8-0xbf*/ 0xe995, 0xe996, 0xe997, 0xe998, 0xe999, 0xe99a, 0xe99b, 0xe99c, /*0xc0-0xc7*/ 0xe99d, 0xe99e, 0xe99f, 0xe9a0, 0xea40, 0xea41, 0xea42, 0xea43, /*0xc8-0xcf*/ 0xea44, 0xea45, 0xea46, 0xea47, 0xea48, 0xea49, 0xea4a, 0xea4b, /*0xd0-0xd7*/ 0xea4c, 0xea4d, 0xea4e, 0xea4f, 0xea50, 0xea51, 0xea52, 0xea53, /*0xd8-0xdf*/ 0xea54, 0xea55, 0xea56, 0xea57, 0xea58, 0xea59, 0xea5a, 0xea5b, /*0xe0-0xe7*/ 0xc3c5, 0xe3c5, 0xc9c1, 0xe3c6, 0xea5c, 0xb1d5, 0xceca, 0xb4b3, /*0xe8-0xef*/ 0xc8f2, 0xe3c7, 0xcfd0, 0xe3c8, 0xbce4, 0xe3c9, 0xe3ca, 0xc3c6, /*0xf0-0xf7*/ 0xd5a2, 0xc4d6, 0xb9eb, 0xcec5, 0xe3cb, 0xc3f6, 0xe3cc, 0xea5d, /*0xf8-0xff*/ /* 0x9600 */ 0xb7a7, 0xb8f3, 0xbad2, 0xe3cd, 0xe3ce, 0xd4c4, 0xe3cf, 0xea5e, /*0x00-0x07*/ 0xe3d0, 0xd1cb, 0xe3d1, 0xe3d2, 0xe3d3, 0xe3d4, 0xd1d6, 0xe3d5, /*0x08-0x0f*/ 0xb2fb, 0xc0bb, 0xe3d6, 0xea5f, 0xc0ab, 0xe3d7, 0xe3d8, 0xe3d9, /*0x10-0x17*/ 0xea60, 0xe3da, 0xe3db, 0xea61, 0xb8b7, 0xdae2, 0xea62, 0xb6d3, /*0x18-0x1f*/ 0xea63, 0xdae4, 0xdae3, 0xea64, 0xea65, 0xea66, 0xea67, 0xea68, /*0x20-0x27*/ 0xea69, 0xea6a, 0xdae6, 0xea6b, 0xea6c, 0xea6d, 0xc8ee, 0xea6e, /*0x28-0x2f*/ 0xea6f, 0xdae5, 0xb7c0, 0xd1f4, 0xd2f5, 0xd5f3, 0xbdd7, 0xea70, /*0x30-0x37*/ 0xea71, 0xea72, 0xea73, 0xd7e8, 0xdae8, 0xdae7, 0xea74, 0xb0a2, /*0x38-0x3f*/ 0xcdd3, 0xea75, 0xdae9, 0xea76, 0xb8bd, 0xbcca, 0xc2bd, 0xc2a4, /*0x40-0x47*/ 0xb3c2, 0xdaea, 0xea77, 0xc2aa, 0xc4b0, 0xbdb5, 0xea78, 0xea79, /*0x48-0x4f*/ 0xcfde, 0xea7a, 0xea7b, 0xea7c, 0xdaeb, 0xc9c2, 0xea7d, 0xea7e, /*0x50-0x57*/ 0xea80, 0xea81, 0xea82, 0xb1dd, 0xea83, 0xea84, 0xea85, 0xdaec, /*0x58-0x5f*/ 0xea86, 0xb6b8, 0xd4ba, 0xea87, 0xb3fd, 0xea88, 0xea89, 0xdaed, /*0x60-0x67*/ 0xd4c9, 0xcfd5, 0xc5e3, 0xea8a, 0xdaee, 0xea8b, 0xea8c, 0xea8d, /*0x68-0x6f*/ 0xea8e, 0xea8f, 0xdaef, 0xea90, 0xdaf0, 0xc1ea, 0xccd5, 0xcfdd, /*0x70-0x77*/ 0xea91, 0xea92, 0xea93, 0xea94, 0xea95, 0xea96, 0xea97, 0xea98, /*0x78-0x7f*/ 0xea99, 0xea9a, 0xea9b, 0xea9c, 0xea9d, 0xd3e7, 0xc2a1, 0xea9e, /*0x80-0x87*/ 0xdaf1, 0xea9f, 0xeaa0, 0xcbe5, 0xeb40, 0xdaf2, 0xeb41, 0xcbe6, /*0x88-0x8f*/ 0xd2fe, 0xeb42, 0xeb43, 0xeb44, 0xb8f4, 0xeb45, 0xeb46, 0xdaf3, /*0x90-0x97*/ 0xb0af, 0xcfb6, 0xeb47, 0xeb48, 0xd5cf, 0xeb49, 0xeb4a, 0xeb4b, /*0x98-0x9f*/ 0xeb4c, 0xeb4d, 0xeb4e, 0xeb4f, 0xeb50, 0xeb51, 0xeb52, 0xcbed, /*0xa0-0xa7*/ 0xeb53, 0xeb54, 0xeb55, 0xeb56, 0xeb57, 0xeb58, 0xeb59, 0xeb5a, /*0xa8-0xaf*/ 0xdaf4, 0xeb5b, 0xeb5c, 0xe3c4, 0xeb5d, 0xeb5e, 0xc1a5, 0xeb5f, /*0xb0-0xb7*/ 0xeb60, 0xf6bf, 0xeb61, 0xeb62, 0xf6c0, 0xf6c1, 0xc4d1, 0xeb63, /*0xb8-0xbf*/ 0xc8b8, 0xd1e3, 0xeb64, 0xeb65, 0xd0db, 0xd1c5, 0xbcaf, 0xb9cd, /*0xc0-0xc7*/ 0xeb66, 0xeff4, 0xeb67, 0xeb68, 0xb4c6, 0xd3ba, 0xf6c2, 0xb3fb, /*0xc8-0xcf*/ 0xeb69, 0xeb6a, 0xf6c3, 0xeb6b, 0xeb6c, 0xb5f1, 0xeb6d, 0xeb6e, /*0xd0-0xd7*/ 0xeb6f, 0xeb70, 0xeb71, 0xeb72, 0xeb73, 0xeb74, 0xeb75, 0xeb76, /*0xd8-0xdf*/ 0xf6c5, 0xeb77, 0xeb78, 0xeb79, 0xeb7a, 0xeb7b, 0xeb7c, 0xeb7d, /*0xe0-0xe7*/ 0xd3ea, 0xf6a7, 0xd1a9, 0xeb7e, 0xeb80, 0xeb81, 0xeb82, 0xf6a9, /*0xe8-0xef*/ 0xeb83, 0xeb84, 0xeb85, 0xf6a8, 0xeb86, 0xeb87, 0xc1e3, 0xc0d7, /*0xf0-0xf7*/ 0xeb88, 0xb1a2, 0xeb89, 0xeb8a, 0xeb8b, 0xeb8c, 0xceed, 0xeb8d, /*0xf8-0xff*/ /* 0x9700 */ 0xd0e8, 0xf6ab, 0xeb8e, 0xeb8f, 0xcff6, 0xeb90, 0xf6aa, 0xd5f0, /*0x00-0x07*/ 0xf6ac, 0xc3b9, 0xeb91, 0xeb92, 0xeb93, 0xbbf4, 0xf6ae, 0xf6ad, /*0x08-0x0f*/ 0xeb94, 0xeb95, 0xeb96, 0xc4de, 0xeb97, 0xeb98, 0xc1d8, 0xeb99, /*0x10-0x17*/ 0xeb9a, 0xeb9b, 0xeb9c, 0xeb9d, 0xcbaa, 0xeb9e, 0xcfbc, 0xeb9f, /*0x18-0x1f*/ 0xeba0, 0xec40, 0xec41, 0xec42, 0xec43, 0xec44, 0xec45, 0xec46, /*0x20-0x27*/ 0xec47, 0xec48, 0xf6af, 0xec49, 0xec4a, 0xf6b0, 0xec4b, 0xec4c, /*0x28-0x2f*/ 0xf6b1, 0xec4d, 0xc2b6, 0xec4e, 0xec4f, 0xec50, 0xec51, 0xec52, /*0x30-0x37*/ 0xb0d4, 0xc5f9, 0xec53, 0xec54, 0xec55, 0xec56, 0xf6b2, 0xec57, /*0x38-0x3f*/ 0xec58, 0xec59, 0xec5a, 0xec5b, 0xec5c, 0xec5d, 0xec5e, 0xec5f, /*0x40-0x47*/ 0xec60, 0xec61, 0xec62, 0xec63, 0xec64, 0xec65, 0xec66, 0xec67, /*0x48-0x4f*/ 0xec68, 0xec69, 0xc7e0, 0xf6a6, 0xec6a, 0xec6b, 0xbeb8, 0xec6c, /*0x50-0x57*/ 0xec6d, 0xbeb2, 0xec6e, 0xb5e5, 0xec6f, 0xec70, 0xb7c7, 0xec71, /*0x58-0x5f*/ 0xbfbf, 0xc3d2, 0xc3e6, 0xec72, 0xec73, 0xd8cc, 0xec74, 0xec75, /*0x60-0x67*/ 0xec76, 0xb8ef, 0xec77, 0xec78, 0xec79, 0xec7a, 0xec7b, 0xec7c, /*0x68-0x6f*/ 0xec7d, 0xec7e, 0xec80, 0xbdf9, 0xd1a5, 0xec81, 0xb0d0, 0xec82, /*0x70-0x77*/ 0xec83, 0xec84, 0xec85, 0xec86, 0xf7b0, 0xec87, 0xec88, 0xec89, /*0x78-0x7f*/ 0xec8a, 0xec8b, 0xec8c, 0xec8d, 0xec8e, 0xf7b1, 0xec8f, 0xec90, /*0x80-0x87*/ 0xec91, 0xec92, 0xec93, 0xd0ac, 0xec94, 0xb0b0, 0xec95, 0xec96, /*0x88-0x8f*/ 0xec97, 0xf7b2, 0xf7b3, 0xec98, 0xf7b4, 0xec99, 0xec9a, 0xec9b, /*0x90-0x97*/ 0xc7ca, 0xec9c, 0xec9d, 0xec9e, 0xec9f, 0xeca0, 0xed40, 0xed41, /*0x98-0x9f*/ 0xbecf, 0xed42, 0xed43, 0xf7b7, 0xed44, 0xed45, 0xed46, 0xed47, /*0xa0-0xa7*/ 0xed48, 0xed49, 0xed4a, 0xf7b6, 0xed4b, 0xb1de, 0xed4c, 0xf7b5, /*0xa8-0xaf*/ 0xed4d, 0xed4e, 0xf7b8, 0xed4f, 0xf7b9, 0xed50, 0xed51, 0xed52, /*0xb0-0xb7*/ 0xed53, 0xed54, 0xed55, 0xed56, 0xed57, 0xed58, 0xed59, 0xed5a, /*0xb8-0xbf*/ 0xed5b, 0xed5c, 0xed5d, 0xed5e, 0xed5f, 0xed60, 0xed61, 0xed62, /*0xc0-0xc7*/ 0xed63, 0xed64, 0xed65, 0xed66, 0xed67, 0xed68, 0xed69, 0xed6a, /*0xc8-0xcf*/ 0xed6b, 0xed6c, 0xed6d, 0xed6e, 0xed6f, 0xed70, 0xed71, 0xed72, /*0xd0-0xd7*/ 0xed73, 0xed74, 0xed75, 0xed76, 0xed77, 0xed78, 0xed79, 0xed7a, /*0xd8-0xdf*/ 0xed7b, 0xed7c, 0xed7d, 0xed7e, 0xed80, 0xed81, 0xcea4, 0xc8cd, /*0xe0-0xe7*/ 0xed82, 0xbaab, 0xe8b8, 0xe8b9, 0xe8ba, 0xbec2, 0xed83, 0xed84, /*0xe8-0xef*/ 0xed85, 0xed86, 0xed87, 0xd2f4, 0xed88, 0xd4cf, 0xc9d8, 0xed89, /*0xf0-0xf7*/ 0xed8a, 0xed8b, 0xed8c, 0xed8d, 0xed8e, 0xed8f, 0xed90, 0xed91, /*0xf8-0xff*/ /* 0x9800 */ 0xed92, 0xed93, 0xed94, 0xed95, 0xed96, 0xed97, 0xed98, 0xed99, /*0x00-0x07*/ 0xed9a, 0xed9b, 0xed9c, 0xed9d, 0xed9e, 0xed9f, 0xeda0, 0xee40, /*0x08-0x0f*/ 0xee41, 0xee42, 0xee43, 0xee44, 0xee45, 0xee46, 0xee47, 0xee48, /*0x10-0x17*/ 0xee49, 0xee4a, 0xee4b, 0xee4c, 0xee4d, 0xee4e, 0xee4f, 0xee50, /*0x18-0x1f*/ 0xee51, 0xee52, 0xee53, 0xee54, 0xee55, 0xee56, 0xee57, 0xee58, /*0x20-0x27*/ 0xee59, 0xee5a, 0xee5b, 0xee5c, 0xee5d, 0xee5e, 0xee5f, 0xee60, /*0x28-0x2f*/ 0xee61, 0xee62, 0xee63, 0xee64, 0xee65, 0xee66, 0xee67, 0xee68, /*0x30-0x37*/ 0xee69, 0xee6a, 0xee6b, 0xee6c, 0xee6d, 0xee6e, 0xee6f, 0xee70, /*0x38-0x3f*/ 0xee71, 0xee72, 0xee73, 0xee74, 0xee75, 0xee76, 0xee77, 0xee78, /*0x40-0x47*/ 0xee79, 0xee7a, 0xee7b, 0xee7c, 0xee7d, 0xee7e, 0xee80, 0xee81, /*0x48-0x4f*/ 0xee82, 0xee83, 0xee84, 0xee85, 0xee86, 0xee87, 0xee88, 0xee89, /*0x50-0x57*/ 0xee8a, 0xee8b, 0xee8c, 0xee8d, 0xee8e, 0xee8f, 0xee90, 0xee91, /*0x58-0x5f*/ 0xee92, 0xee93, 0xee94, 0xee95, 0xee96, 0xee97, 0xee98, 0xee99, /*0x60-0x67*/ 0xee9a, 0xee9b, 0xee9c, 0xee9d, 0xee9e, 0xee9f, 0xeea0, 0xef40, /*0x68-0x6f*/ 0xef41, 0xef42, 0xef43, 0xef44, 0xef45, 0xd2b3, 0xb6a5, 0xc7ea, /*0x70-0x77*/ 0xf1fc, 0xcfee, 0xcbb3, 0xd0eb, 0xe7ef, 0xcde7, 0xb9cb, 0xb6d9, /*0x78-0x7f*/ 0xf1fd, 0xb0e4, 0xcbcc, 0xf1fe, 0xd4a4, 0xc2ad, 0xc1ec, 0xc6c4, /*0x80-0x87*/ 0xbeb1, 0xf2a1, 0xbcd5, 0xef46, 0xf2a2, 0xf2a3, 0xef47, 0xf2a4, /*0x88-0x8f*/ 0xd2c3, 0xc6b5, 0xef48, 0xcdc7, 0xf2a5, 0xef49, 0xd3b1, 0xbfc5, /*0x90-0x97*/ 0xcce2, 0xef4a, 0xf2a6, 0xf2a7, 0xd1d5, 0xb6ee, 0xf2a8, 0xf2a9, /*0x98-0x9f*/ 0xb5df, 0xf2aa, 0xf2ab, 0xef4b, 0xb2fc, 0xf2ac, 0xf2ad, 0xc8a7, /*0xa0-0xa7*/ 0xef4c, 0xef4d, 0xef4e, 0xef4f, 0xef50, 0xef51, 0xef52, 0xef53, /*0xa8-0xaf*/ 0xef54, 0xef55, 0xef56, 0xef57, 0xef58, 0xef59, 0xef5a, 0xef5b, /*0xb0-0xb7*/ 0xef5c, 0xef5d, 0xef5e, 0xef5f, 0xef60, 0xef61, 0xef62, 0xef63, /*0xb8-0xbf*/ 0xef64, 0xef65, 0xef66, 0xef67, 0xef68, 0xef69, 0xef6a, 0xef6b, /*0xc0-0xc7*/ 0xef6c, 0xef6d, 0xef6e, 0xef6f, 0xef70, 0xef71, 0xb7e7, 0xef72, /*0xc8-0xcf*/ 0xef73, 0xeca9, 0xecaa, 0xecab, 0xef74, 0xecac, 0xef75, 0xef76, /*0xd0-0xd7*/ 0xc6ae, 0xecad, 0xecae, 0xef77, 0xef78, 0xef79, 0xb7c9, 0xcab3, /*0xd8-0xdf*/ 0xef7a, 0xef7b, 0xef7c, 0xef7d, 0xef7e, 0xef80, 0xef81, 0xe2b8, /*0xe0-0xe7*/ 0xf7cf, 0xef82, 0xef83, 0xef84, 0xef85, 0xef86, 0xef87, 0xef88, /*0xe8-0xef*/ 0xef89, 0xef8a, 0xef8b, 0xef8c, 0xef8d, 0xef8e, 0xef8f, 0xef90, /*0xf0-0xf7*/ 0xef91, 0xef92, 0xef93, 0xef94, 0xef95, 0xef96, 0xef97, 0xef98, /*0xf8-0xff*/ /* 0x9900 */ 0xef99, 0xef9a, 0xef9b, 0xef9c, 0xef9d, 0xef9e, 0xef9f, 0xefa0, /*0x00-0x07*/ 0xf040, 0xf041, 0xf042, 0xf043, 0xf044, 0xf7d0, 0xf045, 0xf046, /*0x08-0x0f*/ 0xb2cd, 0xf047, 0xf048, 0xf049, 0xf04a, 0xf04b, 0xf04c, 0xf04d, /*0x10-0x17*/ 0xf04e, 0xf04f, 0xf050, 0xf051, 0xf052, 0xf053, 0xf054, 0xf055, /*0x18-0x1f*/ 0xf056, 0xf057, 0xf058, 0xf059, 0xf05a, 0xf05b, 0xf05c, 0xf05d, /*0x20-0x27*/ 0xf05e, 0xf05f, 0xf060, 0xf061, 0xf062, 0xf063, 0xf7d1, 0xf064, /*0x28-0x2f*/ 0xf065, 0xf066, 0xf067, 0xf068, 0xf069, 0xf06a, 0xf06b, 0xf06c, /*0x30-0x37*/ 0xf06d, 0xf06e, 0xf06f, 0xf070, 0xf071, 0xf072, 0xf073, 0xf074, /*0x38-0x3f*/ 0xf075, 0xf076, 0xf077, 0xf078, 0xf079, 0xf07a, 0xf07b, 0xf07c, /*0x40-0x47*/ 0xf07d, 0xf07e, 0xf080, 0xf081, 0xf082, 0xf083, 0xf084, 0xf085, /*0x48-0x4f*/ 0xf086, 0xf087, 0xf088, 0xf089, 0xf7d3, 0xf7d2, 0xf08a, 0xf08b, /*0x50-0x57*/ 0xf08c, 0xf08d, 0xf08e, 0xf08f, 0xf090, 0xf091, 0xf092, 0xf093, /*0x58-0x5f*/ 0xf094, 0xf095, 0xf096, 0xe2bb, 0xf097, 0xbca2, 0xf098, 0xe2bc, /*0x60-0x67*/ 0xe2bd, 0xe2be, 0xe2bf, 0xe2c0, 0xe2c1, 0xb7b9, 0xd2fb, 0xbda4, /*0x68-0x6f*/ 0xcace, 0xb1a5, 0xcbc7, 0xf099, 0xe2c2, 0xb6fc, 0xc8c4, 0xe2c3, /*0x70-0x77*/ 0xf09a, 0xf09b, 0xbdc8, 0xf09c, 0xb1fd, 0xe2c4, 0xf09d, 0xb6f6, /*0x78-0x7f*/ 0xe2c5, 0xc4d9, 0xf09e, 0xf09f, 0xe2c6, 0xcfda, 0xb9dd, 0xe2c7, /*0x80-0x87*/ 0xc0a1, 0xf0a0, 0xe2c8, 0xb2f6, 0xf140, 0xe2c9, 0xf141, 0xc1f3, /*0x88-0x8f*/ 0xe2ca, 0xe2cb, 0xc2f8, 0xe2cc, 0xe2cd, 0xe2ce, 0xcad7, 0xd8b8, /*0x90-0x97*/ 0xd9e5, 0xcfe3, 0xf142, 0xf143, 0xf144, 0xf145, 0xf146, 0xf147, /*0x98-0x9f*/ 0xf148, 0xf149, 0xf14a, 0xf14b, 0xf14c, 0xf0a5, 0xf14d, 0xf14e, /*0xa0-0xa7*/ 0xdcb0, 0xf14f, 0xf150, 0xf151, 0xf152, 0xf153, 0xf154, 0xf155, /*0xa8-0xaf*/ 0xf156, 0xf157, 0xf158, 0xf159, 0xf15a, 0xf15b, 0xf15c, 0xf15d, /*0xb0-0xb7*/ 0xf15e, 0xf15f, 0xf160, 0xf161, 0xf162, 0xf163, 0xf164, 0xf165, /*0xb8-0xbf*/ 0xf166, 0xf167, 0xf168, 0xf169, 0xf16a, 0xf16b, 0xf16c, 0xf16d, /*0xc0-0xc7*/ 0xf16e, 0xf16f, 0xf170, 0xf171, 0xf172, 0xf173, 0xf174, 0xf175, /*0xc8-0xcf*/ 0xf176, 0xf177, 0xf178, 0xf179, 0xf17a, 0xf17b, 0xf17c, 0xf17d, /*0xd0-0xd7*/ 0xf17e, 0xf180, 0xf181, 0xf182, 0xf183, 0xf184, 0xf185, 0xf186, /*0xd8-0xdf*/ 0xf187, 0xf188, 0xf189, 0xf18a, 0xf18b, 0xf18c, 0xf18d, 0xf18e, /*0xe0-0xe7*/ 0xf18f, 0xf190, 0xf191, 0xf192, 0xf193, 0xf194, 0xf195, 0xf196, /*0xe8-0xef*/ 0xf197, 0xf198, 0xf199, 0xf19a, 0xf19b, 0xf19c, 0xf19d, 0xf19e, /*0xf0-0xf7*/ 0xf19f, 0xf1a0, 0xf240, 0xf241, 0xf242, 0xf243, 0xf244, 0xf245, /*0xf8-0xff*/ /* 0x9a00 */ 0xf246, 0xf247, 0xf248, 0xf249, 0xf24a, 0xf24b, 0xf24c, 0xf24d, /*0x00-0x07*/ 0xf24e, 0xf24f, 0xf250, 0xf251, 0xf252, 0xf253, 0xf254, 0xf255, /*0x08-0x0f*/ 0xf256, 0xf257, 0xf258, 0xf259, 0xf25a, 0xf25b, 0xf25c, 0xf25d, /*0x10-0x17*/ 0xf25e, 0xf25f, 0xf260, 0xf261, 0xf262, 0xf263, 0xf264, 0xf265, /*0x18-0x1f*/ 0xf266, 0xf267, 0xf268, 0xf269, 0xf26a, 0xf26b, 0xf26c, 0xf26d, /*0x20-0x27*/ 0xf26e, 0xf26f, 0xf270, 0xf271, 0xf272, 0xf273, 0xf274, 0xf275, /*0x28-0x2f*/ 0xf276, 0xf277, 0xf278, 0xf279, 0xf27a, 0xf27b, 0xf27c, 0xf27d, /*0x30-0x37*/ 0xf27e, 0xf280, 0xf281, 0xf282, 0xf283, 0xf284, 0xf285, 0xf286, /*0x38-0x3f*/ 0xf287, 0xf288, 0xf289, 0xf28a, 0xf28b, 0xf28c, 0xf28d, 0xf28e, /*0x40-0x47*/ 0xf28f, 0xf290, 0xf291, 0xf292, 0xf293, 0xf294, 0xf295, 0xf296, /*0x48-0x4f*/ 0xf297, 0xf298, 0xf299, 0xf29a, 0xf29b, 0xf29c, 0xf29d, 0xf29e, /*0x50-0x57*/ 0xf29f, 0xf2a0, 0xf340, 0xf341, 0xf342, 0xf343, 0xf344, 0xf345, /*0x58-0x5f*/ 0xf346, 0xf347, 0xf348, 0xf349, 0xf34a, 0xf34b, 0xf34c, 0xf34d, /*0x60-0x67*/ 0xf34e, 0xf34f, 0xf350, 0xf351, 0xc2ed, 0xd4a6, 0xcdd4, 0xd1b1, /*0x68-0x6f*/ 0xb3db, 0xc7fd, 0xf352, 0xb2b5, 0xc2bf, 0xe6e0, 0xcabb, 0xe6e1, /*0x70-0x77*/ 0xe6e2, 0xbed4, 0xe6e3, 0xd7a4, 0xcdd5, 0xe6e5, 0xbcdd, 0xe6e4, /*0x78-0x7f*/ 0xe6e6, 0xe6e7, 0xc2ee, 0xf353, 0xbdbe, 0xe6e8, 0xc2e6, 0xbaa7, /*0x80-0x87*/ 0xe6e9, 0xf354, 0xe6ea, 0xb3d2, 0xd1e9, 0xf355, 0xf356, 0xbfa5, /*0x88-0x8f*/ 0xe6eb, 0xc6ef, 0xe6ec, 0xe6ed, 0xf357, 0xf358, 0xe6ee, 0xc6ad, /*0x90-0x97*/ 0xe6ef, 0xf359, 0xc9a7, 0xe6f0, 0xe6f1, 0xe6f2, 0xe5b9, 0xe6f3, /*0x98-0x9f*/ 0xe6f4, 0xc2e2, 0xe6f5, 0xe6f6, 0xd6e8, 0xe6f7, 0xf35a, 0xe6f8, /*0xa0-0xa7*/ 0xb9c7, 0xf35b, 0xf35c, 0xf35d, 0xf35e, 0xf35f, 0xf360, 0xf361, /*0xa8-0xaf*/ 0xf7bb, 0xf7ba, 0xf362, 0xf363, 0xf364, 0xf365, 0xf7be, 0xf7bc, /*0xb0-0xb7*/ 0xbaa1, 0xf366, 0xf7bf, 0xf367, 0xf7c0, 0xf368, 0xf369, 0xf36a, /*0xb8-0xbf*/ 0xf7c2, 0xf7c1, 0xf7c4, 0xf36b, 0xf36c, 0xf7c3, 0xf36d, 0xf36e, /*0xc0-0xc7*/ 0xf36f, 0xf370, 0xf371, 0xf7c5, 0xf7c6, 0xf372, 0xf373, 0xf374, /*0xc8-0xcf*/ 0xf375, 0xf7c7, 0xf376, 0xcbe8, 0xf377, 0xf378, 0xf379, 0xf37a, /*0xd0-0xd7*/ 0xb8df, 0xf37b, 0xf37c, 0xf37d, 0xf37e, 0xf380, 0xf381, 0xf7d4, /*0xd8-0xdf*/ 0xf382, 0xf7d5, 0xf383, 0xf384, 0xf385, 0xf386, 0xf7d6, 0xf387, /*0xe0-0xe7*/ 0xf388, 0xf389, 0xf38a, 0xf7d8, 0xf38b, 0xf7da, 0xf38c, 0xf7d7, /*0xe8-0xef*/ 0xf38d, 0xf38e, 0xf38f, 0xf390, 0xf391, 0xf392, 0xf393, 0xf394, /*0xf0-0xf7*/ 0xf395, 0xf7db, 0xf396, 0xf7d9, 0xf397, 0xf398, 0xf399, 0xf39a, /*0xf8-0xff*/ /* 0x9b00 */ 0xf39b, 0xf39c, 0xf39d, 0xd7d7, 0xf39e, 0xf39f, 0xf3a0, 0xf440, /*0x00-0x07*/ 0xf7dc, 0xf441, 0xf442, 0xf443, 0xf444, 0xf445, 0xf446, 0xf7dd, /*0x08-0x0f*/ 0xf447, 0xf448, 0xf449, 0xf7de, 0xf44a, 0xf44b, 0xf44c, 0xf44d, /*0x10-0x17*/ 0xf44e, 0xf44f, 0xf450, 0xf451, 0xf452, 0xf453, 0xf454, 0xf7df, /*0x18-0x1f*/ 0xf455, 0xf456, 0xf457, 0xf7e0, 0xf458, 0xf459, 0xf45a, 0xf45b, /*0x20-0x27*/ 0xf45c, 0xf45d, 0xf45e, 0xf45f, 0xf460, 0xf461, 0xf462, 0xdbcb, /*0x28-0x2f*/ 0xf463, 0xf464, 0xd8aa, 0xf465, 0xf466, 0xf467, 0xf468, 0xf469, /*0x30-0x37*/ 0xf46a, 0xf46b, 0xf46c, 0xe5f7, 0xb9ed, 0xf46d, 0xf46e, 0xf46f, /*0x38-0x3f*/ 0xf470, 0xbffd, 0xbbea, 0xf7c9, 0xc6c7, 0xf7c8, 0xf471, 0xf7ca, /*0x40-0x47*/ 0xf7cc, 0xf7cb, 0xf472, 0xf473, 0xf474, 0xf7cd, 0xf475, 0xceba, /*0x48-0x4f*/ 0xf476, 0xf7ce, 0xf477, 0xf478, 0xc4a7, 0xf479, 0xf47a, 0xf47b, /*0x50-0x57*/ 0xf47c, 0xf47d, 0xf47e, 0xf480, 0xf481, 0xf482, 0xf483, 0xf484, /*0x58-0x5f*/ 0xf485, 0xf486, 0xf487, 0xf488, 0xf489, 0xf48a, 0xf48b, 0xf48c, /*0x60-0x67*/ 0xf48d, 0xf48e, 0xf48f, 0xf490, 0xf491, 0xf492, 0xf493, 0xf494, /*0x68-0x6f*/ 0xf495, 0xf496, 0xf497, 0xf498, 0xf499, 0xf49a, 0xf49b, 0xf49c, /*0x70-0x77*/ 0xf49d, 0xf49e, 0xf49f, 0xf4a0, 0xf540, 0xf541, 0xf542, 0xf543, /*0x78-0x7f*/ 0xf544, 0xf545, 0xf546, 0xf547, 0xf548, 0xf549, 0xf54a, 0xf54b, /*0x80-0x87*/ 0xf54c, 0xf54d, 0xf54e, 0xf54f, 0xf550, 0xf551, 0xf552, 0xf553, /*0x88-0x8f*/ 0xf554, 0xf555, 0xf556, 0xf557, 0xf558, 0xf559, 0xf55a, 0xf55b, /*0x90-0x97*/ 0xf55c, 0xf55d, 0xf55e, 0xf55f, 0xf560, 0xf561, 0xf562, 0xf563, /*0x98-0x9f*/ 0xf564, 0xf565, 0xf566, 0xf567, 0xf568, 0xf569, 0xf56a, 0xf56b, /*0xa0-0xa7*/ 0xf56c, 0xf56d, 0xf56e, 0xf56f, 0xf570, 0xf571, 0xf572, 0xf573, /*0xa8-0xaf*/ 0xf574, 0xf575, 0xf576, 0xf577, 0xf578, 0xf579, 0xf57a, 0xf57b, /*0xb0-0xb7*/ 0xf57c, 0xf57d, 0xf57e, 0xf580, 0xf581, 0xf582, 0xf583, 0xf584, /*0xb8-0xbf*/ 0xf585, 0xf586, 0xf587, 0xf588, 0xf589, 0xf58a, 0xf58b, 0xf58c, /*0xc0-0xc7*/ 0xf58d, 0xf58e, 0xf58f, 0xf590, 0xf591, 0xf592, 0xf593, 0xf594, /*0xc8-0xcf*/ 0xf595, 0xf596, 0xf597, 0xf598, 0xf599, 0xf59a, 0xf59b, 0xf59c, /*0xd0-0xd7*/ 0xf59d, 0xf59e, 0xf59f, 0xf5a0, 0xf640, 0xf641, 0xf642, 0xf643, /*0xd8-0xdf*/ 0xf644, 0xf645, 0xf646, 0xf647, 0xf648, 0xf649, 0xf64a, 0xf64b, /*0xe0-0xe7*/ 0xf64c, 0xf64d, 0xf64e, 0xf64f, 0xf650, 0xf651, 0xf652, 0xf653, /*0xe8-0xef*/ 0xf654, 0xf655, 0xf656, 0xf657, 0xf658, 0xf659, 0xf65a, 0xf65b, /*0xf0-0xf7*/ 0xf65c, 0xf65d, 0xf65e, 0xf65f, 0xf660, 0xf661, 0xf662, 0xf663, /*0xf8-0xff*/ /* 0x9c00 */ 0xf664, 0xf665, 0xf666, 0xf667, 0xf668, 0xf669, 0xf66a, 0xf66b, /*0x00-0x07*/ 0xf66c, 0xf66d, 0xf66e, 0xf66f, 0xf670, 0xf671, 0xf672, 0xf673, /*0x08-0x0f*/ 0xf674, 0xf675, 0xf676, 0xf677, 0xf678, 0xf679, 0xf67a, 0xf67b, /*0x10-0x17*/ 0xf67c, 0xf67d, 0xf67e, 0xf680, 0xf681, 0xf682, 0xf683, 0xf684, /*0x18-0x1f*/ 0xf685, 0xf686, 0xf687, 0xf688, 0xf689, 0xf68a, 0xf68b, 0xf68c, /*0x20-0x27*/ 0xf68d, 0xf68e, 0xf68f, 0xf690, 0xf691, 0xf692, 0xf693, 0xf694, /*0x28-0x2f*/ 0xf695, 0xf696, 0xf697, 0xf698, 0xf699, 0xf69a, 0xf69b, 0xf69c, /*0x30-0x37*/ 0xf69d, 0xf69e, 0xf69f, 0xf6a0, 0xf740, 0xf741, 0xf742, 0xf743, /*0x38-0x3f*/ 0xf744, 0xf745, 0xf746, 0xf747, 0xf748, 0xf749, 0xf74a, 0xf74b, /*0x40-0x47*/ 0xf74c, 0xf74d, 0xf74e, 0xf74f, 0xf750, 0xf751, 0xf752, 0xf753, /*0x48-0x4f*/ 0xf754, 0xf755, 0xf756, 0xf757, 0xf758, 0xf759, 0xf75a, 0xf75b, /*0x50-0x57*/ 0xf75c, 0xf75d, 0xf75e, 0xf75f, 0xf760, 0xf761, 0xf762, 0xf763, /*0x58-0x5f*/ 0xf764, 0xf765, 0xf766, 0xf767, 0xf768, 0xf769, 0xf76a, 0xf76b, /*0x60-0x67*/ 0xf76c, 0xf76d, 0xf76e, 0xf76f, 0xf770, 0xf771, 0xf772, 0xf773, /*0x68-0x6f*/ 0xf774, 0xf775, 0xf776, 0xf777, 0xf778, 0xf779, 0xf77a, 0xf77b, /*0x70-0x77*/ 0xf77c, 0xf77d, 0xf77e, 0xf780, 0xd3e3, 0xf781, 0xf782, 0xf6cf, /*0x78-0x7f*/ 0xf783, 0xc2b3, 0xf6d0, 0xf784, 0xf785, 0xf6d1, 0xf6d2, 0xf6d3, /*0x80-0x87*/ 0xf6d4, 0xf786, 0xf787, 0xf6d6, 0xf788, 0xb1ab, 0xf6d7, 0xf789, /*0x88-0x8f*/ 0xf6d8, 0xf6d9, 0xf6da, 0xf78a, 0xf6db, 0xf6dc, 0xf78b, 0xf78c, /*0x90-0x97*/ 0xf78d, 0xf78e, 0xf6dd, 0xf6de, 0xcfca, 0xf78f, 0xf6df, 0xf6e0, /*0x98-0x9f*/ 0xf6e1, 0xf6e2, 0xf6e3, 0xf6e4, 0xc0f0, 0xf6e5, 0xf6e6, 0xf6e7, /*0xa0-0xa7*/ 0xf6e8, 0xf6e9, 0xf790, 0xf6ea, 0xf791, 0xf6eb, 0xf6ec, 0xf792, /*0xa8-0xaf*/ 0xf6ed, 0xf6ee, 0xf6ef, 0xf6f0, 0xf6f1, 0xf6f2, 0xf6f3, 0xf6f4, /*0xb0-0xb7*/ 0xbea8, 0xf793, 0xf6f5, 0xf6f6, 0xf6f7, 0xf6f8, 0xf794, 0xf795, /*0xb8-0xbf*/ 0xf796, 0xf797, 0xf798, 0xc8fa, 0xf6f9, 0xf6fa, 0xf6fb, 0xf6fc, /*0xc0-0xc7*/ 0xf799, 0xf79a, 0xf6fd, 0xf6fe, 0xf7a1, 0xf7a2, 0xf7a3, 0xf7a4, /*0xc8-0xcf*/ 0xf7a5, 0xf79b, 0xf79c, 0xf7a6, 0xf7a7, 0xf7a8, 0xb1ee, 0xf7a9, /*0xd0-0xd7*/ 0xf7aa, 0xf7ab, 0xf79d, 0xf79e, 0xf7ac, 0xf7ad, 0xc1db, 0xf7ae, /*0xd8-0xdf*/ 0xf79f, 0xf7a0, 0xf7af, 0xf840, 0xf841, 0xf842, 0xf843, 0xf844, /*0xe0-0xe7*/ 0xf845, 0xf846, 0xf847, 0xf848, 0xf849, 0xf84a, 0xf84b, 0xf84c, /*0xe8-0xef*/ 0xf84d, 0xf84e, 0xf84f, 0xf850, 0xf851, 0xf852, 0xf853, 0xf854, /*0xf0-0xf7*/ 0xf855, 0xf856, 0xf857, 0xf858, 0xf859, 0xf85a, 0xf85b, 0xf85c, /*0xf8-0xff*/ /* 0x9d00 */ 0xf85d, 0xf85e, 0xf85f, 0xf860, 0xf861, 0xf862, 0xf863, 0xf864, /*0x00-0x07*/ 0xf865, 0xf866, 0xf867, 0xf868, 0xf869, 0xf86a, 0xf86b, 0xf86c, /*0x08-0x0f*/ 0xf86d, 0xf86e, 0xf86f, 0xf870, 0xf871, 0xf872, 0xf873, 0xf874, /*0x10-0x17*/ 0xf875, 0xf876, 0xf877, 0xf878, 0xf879, 0xf87a, 0xf87b, 0xf87c, /*0x18-0x1f*/ 0xf87d, 0xf87e, 0xf880, 0xf881, 0xf882, 0xf883, 0xf884, 0xf885, /*0x20-0x27*/ 0xf886, 0xf887, 0xf888, 0xf889, 0xf88a, 0xf88b, 0xf88c, 0xf88d, /*0x28-0x2f*/ 0xf88e, 0xf88f, 0xf890, 0xf891, 0xf892, 0xf893, 0xf894, 0xf895, /*0x30-0x37*/ 0xf896, 0xf897, 0xf898, 0xf899, 0xf89a, 0xf89b, 0xf89c, 0xf89d, /*0x38-0x3f*/ 0xf89e, 0xf89f, 0xf8a0, 0xf940, 0xf941, 0xf942, 0xf943, 0xf944, /*0x40-0x47*/ 0xf945, 0xf946, 0xf947, 0xf948, 0xf949, 0xf94a, 0xf94b, 0xf94c, /*0x48-0x4f*/ 0xf94d, 0xf94e, 0xf94f, 0xf950, 0xf951, 0xf952, 0xf953, 0xf954, /*0x50-0x57*/ 0xf955, 0xf956, 0xf957, 0xf958, 0xf959, 0xf95a, 0xf95b, 0xf95c, /*0x58-0x5f*/ 0xf95d, 0xf95e, 0xf95f, 0xf960, 0xf961, 0xf962, 0xf963, 0xf964, /*0x60-0x67*/ 0xf965, 0xf966, 0xf967, 0xf968, 0xf969, 0xf96a, 0xf96b, 0xf96c, /*0x68-0x6f*/ 0xf96d, 0xf96e, 0xf96f, 0xf970, 0xf971, 0xf972, 0xf973, 0xf974, /*0x70-0x77*/ 0xf975, 0xf976, 0xf977, 0xf978, 0xf979, 0xf97a, 0xf97b, 0xf97c, /*0x78-0x7f*/ 0xf97d, 0xf97e, 0xf980, 0xf981, 0xf982, 0xf983, 0xf984, 0xf985, /*0x80-0x87*/ 0xf986, 0xf987, 0xf988, 0xf989, 0xf98a, 0xf98b, 0xf98c, 0xf98d, /*0x88-0x8f*/ 0xf98e, 0xf98f, 0xf990, 0xf991, 0xf992, 0xf993, 0xf994, 0xf995, /*0x90-0x97*/ 0xf996, 0xf997, 0xf998, 0xf999, 0xf99a, 0xf99b, 0xf99c, 0xf99d, /*0x98-0x9f*/ 0xf99e, 0xf99f, 0xf9a0, 0xfa40, 0xfa41, 0xfa42, 0xfa43, 0xfa44, /*0xa0-0xa7*/ 0xfa45, 0xfa46, 0xfa47, 0xfa48, 0xfa49, 0xfa4a, 0xfa4b, 0xfa4c, /*0xa8-0xaf*/ 0xfa4d, 0xfa4e, 0xfa4f, 0xfa50, 0xfa51, 0xfa52, 0xfa53, 0xfa54, /*0xb0-0xb7*/ 0xfa55, 0xfa56, 0xfa57, 0xfa58, 0xfa59, 0xfa5a, 0xfa5b, 0xfa5c, /*0xb8-0xbf*/ 0xfa5d, 0xfa5e, 0xfa5f, 0xfa60, 0xfa61, 0xfa62, 0xfa63, 0xfa64, /*0xc0-0xc7*/ 0xfa65, 0xfa66, 0xfa67, 0xfa68, 0xfa69, 0xfa6a, 0xfa6b, 0xfa6c, /*0xc8-0xcf*/ 0xfa6d, 0xfa6e, 0xfa6f, 0xfa70, 0xfa71, 0xfa72, 0xfa73, 0xfa74, /*0xd0-0xd7*/ 0xfa75, 0xfa76, 0xfa77, 0xfa78, 0xfa79, 0xfa7a, 0xfa7b, 0xfa7c, /*0xd8-0xdf*/ 0xfa7d, 0xfa7e, 0xfa80, 0xfa81, 0xfa82, 0xfa83, 0xfa84, 0xfa85, /*0xe0-0xe7*/ 0xfa86, 0xfa87, 0xfa88, 0xfa89, 0xfa8a, 0xfa8b, 0xfa8c, 0xfa8d, /*0xe8-0xef*/ 0xfa8e, 0xfa8f, 0xfa90, 0xfa91, 0xfa92, 0xfa93, 0xfa94, 0xfa95, /*0xf0-0xf7*/ 0xfa96, 0xfa97, 0xfa98, 0xfa99, 0xfa9a, 0xfa9b, 0xfa9c, 0xfa9d, /*0xf8-0xff*/ /* 0x9e00 */ 0xfa9e, 0xfa9f, 0xfaa0, 0xfb40, 0xfb41, 0xfb42, 0xfb43, 0xfb44, /*0x00-0x07*/ 0xfb45, 0xfb46, 0xfb47, 0xfb48, 0xfb49, 0xfb4a, 0xfb4b, 0xfb4c, /*0x08-0x0f*/ 0xfb4d, 0xfb4e, 0xfb4f, 0xfb50, 0xfb51, 0xfb52, 0xfb53, 0xfb54, /*0x10-0x17*/ 0xfb55, 0xfb56, 0xfb57, 0xfb58, 0xfb59, 0xfb5a, 0xfb5b, 0xc4f1, /*0x18-0x1f*/ 0xf0af, 0xbca6, 0xf0b0, 0xc3f9, 0xfb5c, 0xc5b8, 0xd1bb, 0xfb5d, /*0x20-0x27*/ 0xf0b1, 0xf0b2, 0xf0b3, 0xf0b4, 0xf0b5, 0xd1bc, 0xfb5e, 0xd1ec, /*0x28-0x2f*/ 0xfb5f, 0xf0b7, 0xf0b6, 0xd4a7, 0xfb60, 0xcdd2, 0xf0b8, 0xf0ba, /*0x30-0x37*/ 0xf0b9, 0xf0bb, 0xf0bc, 0xfb61, 0xfb62, 0xb8eb, 0xf0bd, 0xbae8, /*0x38-0x3f*/ 0xfb63, 0xf0be, 0xf0bf, 0xbee9, 0xf0c0, 0xb6ec, 0xf0c1, 0xf0c2, /*0x40-0x47*/ 0xf0c3, 0xf0c4, 0xc8b5, 0xf0c5, 0xf0c6, 0xfb64, 0xf0c7, 0xc5f4, /*0x48-0x4f*/ 0xfb65, 0xf0c8, 0xfb66, 0xfb67, 0xfb68, 0xf0c9, 0xfb69, 0xf0ca, /*0x50-0x57*/ 0xf7bd, 0xfb6a, 0xf0cb, 0xf0cc, 0xf0cd, 0xfb6b, 0xf0ce, 0xfb6c, /*0x58-0x5f*/ 0xfb6d, 0xfb6e, 0xfb6f, 0xf0cf, 0xbad7, 0xfb70, 0xf0d0, 0xf0d1, /*0x60-0x67*/ 0xf0d2, 0xf0d3, 0xf0d4, 0xf0d5, 0xf0d6, 0xf0d8, 0xfb71, 0xfb72, /*0x68-0x6f*/ 0xd3a5, 0xf0d7, 0xfb73, 0xf0d9, 0xfb74, 0xfb75, 0xfb76, 0xfb77, /*0x70-0x77*/ 0xfb78, 0xfb79, 0xfb7a, 0xfb7b, 0xfb7c, 0xfb7d, 0xf5ba, 0xc2b9, /*0x78-0x7f*/ 0xfb7e, 0xfb80, 0xf7e4, 0xfb81, 0xfb82, 0xfb83, 0xfb84, 0xf7e5, /*0x80-0x87*/ 0xf7e6, 0xfb85, 0xfb86, 0xf7e7, 0xfb87, 0xfb88, 0xfb89, 0xfb8a, /*0x88-0x8f*/ 0xfb8b, 0xfb8c, 0xf7e8, 0xc2b4, 0xfb8d, 0xfb8e, 0xfb8f, 0xfb90, /*0x90-0x97*/ 0xfb91, 0xfb92, 0xfb93, 0xfb94, 0xfb95, 0xf7ea, 0xfb96, 0xf7eb, /*0x98-0x9f*/ 0xfb97, 0xfb98, 0xfb99, 0xfb9a, 0xfb9b, 0xfb9c, 0xc2f3, 0xfb9d, /*0xa0-0xa7*/ 0xfb9e, 0xfb9f, 0xfba0, 0xfc40, 0xfc41, 0xfc42, 0xfc43, 0xfc44, /*0xa8-0xaf*/ 0xfc45, 0xfc46, 0xfc47, 0xfc48, 0xf4f0, 0xfc49, 0xfc4a, 0xfc4b, /*0xb0-0xb7*/ 0xf4ef, 0xfc4c, 0xfc4d, 0xc2e9, 0xfc4e, 0xf7e1, 0xf7e2, 0xfc4f, /*0xb8-0xbf*/ 0xfc50, 0xfc51, 0xfc52, 0xfc53, 0xbbc6, 0xfc54, 0xfc55, 0xfc56, /*0xc0-0xc7*/ 0xfc57, 0xd9e4, 0xfc58, 0xfc59, 0xfc5a, 0xcaf2, 0xc0e8, 0xf0a4, /*0xc8-0xcf*/ 0xfc5b, 0xbada, 0xfc5c, 0xfc5d, 0xc7ad, 0xfc5e, 0xfc5f, 0xfc60, /*0xd0-0xd7*/ 0xc4ac, 0xfc61, 0xfc62, 0xf7ec, 0xf7ed, 0xf7ee, 0xfc63, 0xf7f0, /*0xd8-0xdf*/ 0xf7ef, 0xfc64, 0xf7f1, 0xfc65, 0xfc66, 0xf7f4, 0xfc67, 0xf7f3, /*0xe0-0xe7*/ 0xfc68, 0xf7f2, 0xf7f5, 0xfc69, 0xfc6a, 0xfc6b, 0xfc6c, 0xf7f6, /*0xe8-0xef*/ 0xfc6d, 0xfc6e, 0xfc6f, 0xfc70, 0xfc71, 0xfc72, 0xfc73, 0xfc74, /*0xf0-0xf7*/ 0xfc75, 0xede9, 0xfc76, 0xedea, 0xedeb, 0xfc77, 0xf6bc, 0xfc78, /*0xf8-0xff*/ /* 0x9f00 */ 0xfc79, 0xfc7a, 0xfc7b, 0xfc7c, 0xfc7d, 0xfc7e, 0xfc80, 0xfc81, /*0x00-0x07*/ 0xfc82, 0xfc83, 0xfc84, 0xf6bd, 0xfc85, 0xf6be, 0xb6a6, 0xfc86, /*0x08-0x0f*/ 0xd8be, 0xfc87, 0xfc88, 0xb9c4, 0xfc89, 0xfc8a, 0xfc8b, 0xd8bb, /*0x10-0x17*/ 0xfc8c, 0xdcb1, 0xfc8d, 0xfc8e, 0xfc8f, 0xfc90, 0xfc91, 0xfc92, /*0x18-0x1f*/ 0xcaf3, 0xfc93, 0xf7f7, 0xfc94, 0xfc95, 0xfc96, 0xfc97, 0xfc98, /*0x20-0x27*/ 0xfc99, 0xfc9a, 0xfc9b, 0xfc9c, 0xf7f8, 0xfc9d, 0xfc9e, 0xf7f9, /*0x28-0x2f*/ 0xfc9f, 0xfca0, 0xfd40, 0xfd41, 0xfd42, 0xfd43, 0xfd44, 0xf7fb, /*0x30-0x37*/ 0xfd45, 0xf7fa, 0xfd46, 0xb1c7, 0xfd47, 0xf7fc, 0xf7fd, 0xfd48, /*0x38-0x3f*/ 0xfd49, 0xfd4a, 0xfd4b, 0xfd4c, 0xf7fe, 0xfd4d, 0xfd4e, 0xfd4f, /*0x40-0x47*/ 0xfd50, 0xfd51, 0xfd52, 0xfd53, 0xfd54, 0xfd55, 0xfd56, 0xfd57, /*0x48-0x4f*/ 0xc6eb, 0xecb4, 0xfd58, 0xfd59, 0xfd5a, 0xfd5b, 0xfd5c, 0xfd5d, /*0x50-0x57*/ 0xfd5e, 0xfd5f, 0xfd60, 0xfd61, 0xfd62, 0xfd63, 0xfd64, 0xfd65, /*0x58-0x5f*/ 0xfd66, 0xfd67, 0xfd68, 0xfd69, 0xfd6a, 0xfd6b, 0xfd6c, 0xfd6d, /*0x60-0x67*/ 0xfd6e, 0xfd6f, 0xfd70, 0xfd71, 0xfd72, 0xfd73, 0xfd74, 0xfd75, /*0x68-0x6f*/ 0xfd76, 0xfd77, 0xfd78, 0xfd79, 0xfd7a, 0xfd7b, 0xfd7c, 0xfd7d, /*0x70-0x77*/ 0xfd7e, 0xfd80, 0xfd81, 0xfd82, 0xfd83, 0xfd84, 0xfd85, 0xb3dd, /*0x78-0x7f*/ 0xf6b3, 0xfd86, 0xfd87, 0xf6b4, 0xc1e4, 0xf6b5, 0xf6b6, 0xf6b7, /*0x80-0x87*/ 0xf6b8, 0xf6b9, 0xf6ba, 0xc8a3, 0xf6bb, 0xfd88, 0xfd89, 0xfd8a, /*0x88-0x8f*/ 0xfd8b, 0xfd8c, 0xfd8d, 0xfd8e, 0xfd8f, 0xfd90, 0xfd91, 0xfd92, /*0x90-0x97*/ 0xfd93, 0xc1fa, 0xb9a8, 0xede8, 0xfd94, 0xfd95, 0xfd96, 0xb9ea, /*0x98-0x9f*/ 0xd9df, 0xfd97, 0xfd98, 0xfd99, 0xfd9a, 0xfd9b, 0x0000, 0x0000, /*0xa0-0xa7*/ }; static const unsigned short gbk_pagef9a[32] = { 0x0000, 0xfd9d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x78-0x7f*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x80-0x87*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x88-0x8f*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfd9e, 0x0000, 0x0000, /*0x90-0x97*/ }; static const unsigned short gbk_pagef9b[24] = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfd9f, /*0xe0-0xe7*/ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xe8-0xef*/ 0x0000, 0xfda0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0xf0-0xf7*/ }; static const unsigned short gbk_pagefa[40] = { 0x0000, 0x0000, 0x0000, 0x0000, 0xfe40, 0xfe41, 0xfe42, 0xfe43, /*0x08-0x0f*/ 0x0000, 0xfe44, 0x0000, 0xfe45, 0xfe46, 0x0000, 0x0000, 0x0000, /*0x10-0x17*/ 0xfe47, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xfe48, /*0x18-0x1f*/ 0xfe49, 0xfe4a, 0x0000, 0xfe4b, 0xfe4c, 0x0000, 0x0000, 0xfe4d, /*0x20-0x27*/ 0xfe4e, 0xfe4f, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, /*0x28-0x2f*/ }; static const unsigned short gbk_pagefe[64] = { 0xa955, 0xa6f2, 0x0000, 0xa6f4, 0xa6f5, 0xa6e0, 0xa6e1, 0xa6f0, /*0x30-0x37*/ 0xa6f1, 0xa6e2, 0xa6e3, 0xa6ee, 0xa6ef, 0xa6e6, 0xa6e7, 0xa6e4, /*0x38-0x3f*/ 0xa6e5, 0xa6e8, 0xa6e9, 0xa6ea, 0xa6eb, 0x0000, 0x0000, 0x0000, /*0x40-0x47*/ 0x0000, 0xa968, 0xa969, 0xa96a, 0xa96b, 0xa96c, 0xa96d, 0xa96e, /*0x48-0x4f*/ 0xa96f, 0xa970, 0xa971, 0x0000, 0xa972, 0xa973, 0xa974, 0xa975, /*0x50-0x57*/ 0x0000, 0xa976, 0xa977, 0xa978, 0xa979, 0xa97a, 0xa97b, 0xa97c, /*0x58-0x5f*/ 0xa97d, 0xa97e, 0xa980, 0xa981, 0xa982, 0xa983, 0xa984, 0x0000, /*0x60-0x67*/ 0xa985, 0xa986, 0xa987, 0xa988, 0x0000, 0x0000, 0x0000, 0x0000, /*0x68-0x6f*/ }; static const unsigned short gbk_pageffa[96] = { 0x0000, 0xa3a1, 0xa3a2, 0xa3a3, 0xa1e7, 0xa3a5, 0xa3a6, 0xa3a7, /*0x00-0x07*/ 0xa3a8, 0xa3a9, 0xa3aa, 0xa3ab, 0xa3ac, 0xa3ad, 0xa3ae, 0xa3af, /*0x08-0x0f*/ 0xa3b0, 0xa3b1, 0xa3b2, 0xa3b3, 0xa3b4, 0xa3b5, 0xa3b6, 0xa3b7, /*0x10-0x17*/ 0xa3b8, 0xa3b9, 0xa3ba, 0xa3bb, 0xa3bc, 0xa3bd, 0xa3be, 0xa3bf, /*0x18-0x1f*/ 0xa3c0, 0xa3c1, 0xa3c2, 0xa3c3, 0xa3c4, 0xa3c5, 0xa3c6, 0xa3c7, /*0x20-0x27*/ 0xa3c8, 0xa3c9, 0xa3ca, 0xa3cb, 0xa3cc, 0xa3cd, 0xa3ce, 0xa3cf, /*0x28-0x2f*/ 0xa3d0, 0xa3d1, 0xa3d2, 0xa3d3, 0xa3d4, 0xa3d5, 0xa3d6, 0xa3d7, /*0x30-0x37*/ 0xa3d8, 0xa3d9, 0xa3da, 0xa3db, 0xa3dc, 0xa3dd, 0xa3de, 0xa3df, /*0x38-0x3f*/ 0xa3e0, 0xa3e1, 0xa3e2, 0xa3e3, 0xa3e4, 0xa3e5, 0xa3e6, 0xa3e7, /*0x40-0x47*/ 0xa3e8, 0xa3e9, 0xa3ea, 0xa3eb, 0xa3ec, 0xa3ed, 0xa3ee, 0xa3ef, /*0x48-0x4f*/ 0xa3f0, 0xa3f1, 0xa3f2, 0xa3f3, 0xa3f4, 0xa3f5, 0xa3f6, 0xa3f7, /*0x50-0x57*/ 0xa3f8, 0xa3f9, 0xa3fa, 0xa3fb, 0xa3fc, 0xa3fd, 0xa1ab, 0x0000, /*0x58-0x5f*/ }; static const unsigned short gbk_pageffb[8] = { 0xa1e9, 0xa1ea, 0xa956, 0xa3fe, 0xa957, 0xa3a4, 0x0000, 0x0000, /*0xe0-0xe7*/ }; static int gbk_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { if (n >= 2) { unsigned short c = 0; if (wc >= 0x00a0 && wc < 0x0170) c = gbk_page00[wc-0x00a0]; else if (wc >= 0x01c8 && wc < 0x01e0) c = gbk_page01[wc-0x01c8]; else if (wc >= 0x0250 && wc < 0x0268) c = gbk_page02a[wc-0x0250]; else if (wc >= 0x02c0 && wc < 0x02e0) c = gbk_page02b[wc-0x02c0]; else if (wc >= 0x0390 && wc < 0x03d0) c = gbk_page03[wc-0x0390]; else if (wc >= 0x0400 && wc < 0x0458) c = gbk_page04[wc-0x0400]; else if (wc >= 0x2010 && wc < 0x2040) c = gbk_page20[wc-0x2010]; else if (wc >= 0x2100 && wc < 0x21a0) c = gbk_page21[wc-0x2100]; else if (wc >= 0x2208 && wc < 0x22c0) c = gbk_page22[wc-0x2208]; else if (wc == 0x2312) c = 0xa1d0; else if (wc >= 0x2460 && wc < 0x24a0) c = gbk_page24[wc-0x2460]; else if (wc >= 0x2500 && wc < 0x25e8) c = gbk_page25[wc-0x2500]; else if (wc >= 0x2600 && wc < 0x2648) c = gbk_page26[wc-0x2600]; else if (wc >= 0x3000 && wc < 0x3130) c = gbk_page30[wc-0x3000]; else if (wc >= 0x3220 && wc < 0x3238) c = gbk_page32[wc-0x3220]; else if (wc == 0x32a3) c = 0xa949; else if (wc >= 0x3388 && wc < 0x33d8) c = gbk_page33[wc-0x3388]; else if (wc >= 0x4e00 && wc < 0x9fa8) c = gbk_page4e[wc-0x4e00]; else if (wc == 0xf92c) c = 0xfd9c; else if (wc >= 0xf978 && wc < 0xf998) c = gbk_pagef9a[wc-0xf978]; else if (wc >= 0xf9e0 && wc < 0xf9f8) c = gbk_pagef9b[wc-0xf9e0]; else if (wc >= 0xfa08 && wc < 0xfa30) c = gbk_pagefa[wc-0xfa08]; else if (wc >= 0xfe30 && wc < 0xfe70) c = gbk_pagefe[wc-0xfe30]; else if (wc >= 0xff00 && wc < 0xff60) c = gbk_pageffa[wc-0xff00]; else if (wc >= 0xffe0 && wc < 0xffe8) c = gbk_pageffb[wc-0xffe0]; if (c != 0) { r[0] = (c >> 8); r[1] = (c & 0xff); return 2; } return RET_ILSEQ; } return RET_TOOSMALL; } f99c, 0xf99d, /*0x98-0x9f*/ 0xf99e, 0xf99f, 0xf9a0, 0xfa40, 0xfa41, 0xfa42, 0xfa43, 0xfa44, /*0xa0-0xa7*/ 0xfa45, 0xfa46, 0xfa47, 0xfa48, 0xfa49, 0xfa4a, 0xfa4b, 0xfa4c, /*0xa8-0xaf*/ 0xfa4d, 0xfa4e, 0xfa4f, 0xfa50, 0xfa51, 0xfa52, 0xfa53, 0xfa54, /*0xb0-0xb7*/ 0xfa55, 0xfa56, 0xfa57, 0xfa58, 0xfa59, 0xfa5a, 0xfa5b, 0xfa5c, /*0xb8-0xbf*/ 0xfa5d, 0xfa5e, 0xfa5f, 0xfa60, 0xfa61, 0xfa62, 0xfa63, 0xfa64, /*0xc0-0xc7*/ 0xfa65, 0xfa66, 0xfa67, 0xfa68, 0xlibX11-1.6.3/src/xlibi18n/lcUniConv/ascii.h000064401431060000012000000005461247741723500204510ustar00alancstaff00002660200006 /* * ASCII */ static int ascii_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c = *s; if (c < 0x80) { *pwc = (ucs4_t) c; return 1; } return RET_ILSEQ; } static int ascii_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { if (wc < 0x0080) { *r = wc; return 1; } return RET_ILSEQ; } libX11-1.6.3/src/xlibi18n/lcUniConv/iso8859_5.h000064401431060000012000000050701247741723500207320ustar00alancstaff00002660200006 /* * ISO-8859-5 */ static const unsigned short iso8859_5_2uni[96] = { /* 0xa0 */ 0x00a0, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, 0x0408, 0x0409, 0x040a, 0x040b, 0x040c, 0x00ad, 0x040e, 0x040f, /* 0xb0 */ 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, /* 0xc0 */ 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, /* 0xd0 */ 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, /* 0xe0 */ 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, /* 0xf0 */ 0x2116, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x00a7, 0x045e, 0x045f, }; static int iso8859_5_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c = *s; if (c < 0xa0) *pwc = (ucs4_t) c; else *pwc = (ucs4_t) iso8859_5_2uni[c-0xa0]; return 1; } static const unsigned char iso8859_5_page00[16] = { 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, /* 0xa0-0xa7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, /* 0xa8-0xaf */ }; static const unsigned char iso8859_5_page04[96] = { 0x00, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0x00-0x07 */ 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0x00, 0xae, 0xaf, /* 0x08-0x0f */ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0x10-0x17 */ 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0x18-0x1f */ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x20-0x27 */ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x28-0x2f */ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x30-0x37 */ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0x38-0x3f */ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x40-0x47 */ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x48-0x4f */ 0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x50-0x57 */ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0x00, 0xfe, 0xff, /* 0x58-0x5f */ }; static int iso8859_5_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { unsigned char c = 0; if (wc < 0x00a0) { *r = wc; return 1; } else if (wc >= 0x00a0 && wc < 0x00b0) c = iso8859_5_page00[wc-0x00a0]; else if (wc >= 0x0400 && wc < 0x0460) c = iso8859_5_page04[wc-0x0400]; else if (wc == 0x2116) c = 0xf0; if (c != 0) { *r = c; return 1; } return RET_ILSEQ; } libX11-1.6.3/src/xlibi18n/lcUniConv/COPYRIGHT000064401431060000012000000034401247741723500204770ustar00alancstaff00002660200006This notice applies to the files in this directory. They are taken from the libiconv-1.1 package, which is covered by the LGPL license. The files in this directory have been placed under the following copyright, with permission from the Free Software Foundation. Copyright (c) 1999-2000 Free Software Foundation, Inc. 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: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 FREE SOFTWARE FOUNDATION 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. Except as contained in this notice, the name of the Free Software Foundation shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from the Free Software Foundation. Notes: 1. This copyright applies only to the files in this directory, and not to the remaining files in libiconv. 2. The Free Software Foundation does not encourage the use of the above license for newly written software. libX11-1.6.3/src/xlibi18n/lcUniConv/mulelao.h000064401431060000012000000046211247741723500210150ustar00alancstaff00002660200006 /* * MULELAO-1 */ static const unsigned short mulelao_2uni[96] = { /* 0xa0 */ 0x00a0, 0x0e81, 0x0e82, 0xfffd, 0x0e84, 0xfffd, 0xfffd, 0x0e87, 0x0e88, 0xfffd, 0x0e8a, 0xfffd, 0xfffd, 0x0e8d, 0xfffd, 0xfffd, /* 0xb0 */ 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x0e94, 0x0e95, 0x0e96, 0x0e97, 0xfffd, 0x0e99, 0x0e9a, 0x0e9b, 0x0e9c, 0x0e9d, 0x0e9e, 0x0e9f, /* 0xc0 */ 0xfffd, 0x0ea1, 0x0ea2, 0x0ea3, 0xfffd, 0x0ea5, 0xfffd, 0x0ea7, 0xfffd, 0xfffd, 0x0eaa, 0x0eab, 0xfffd, 0x0ead, 0x0eae, 0x0eaf, /* 0xd0 */ 0x0eb0, 0x0eb1, 0x0eb2, 0x0eb3, 0x0eb4, 0x0eb5, 0x0eb6, 0x0eb7, 0x0eb8, 0x0eb9, 0xfffd, 0x0ebb, 0x0ebc, 0x0ebd, 0xfffd, 0xfffd, /* 0xe0 */ 0x0ec0, 0x0ec1, 0x0ec2, 0x0ec3, 0x0ec4, 0xfffd, 0x0ec6, 0xfffd, 0x0ec8, 0x0ec9, 0x0eca, 0x0ecb, 0x0ecc, 0x0ecd, 0xfffd, 0xfffd, /* 0xf0 */ 0x0ed0, 0x0ed1, 0x0ed2, 0x0ed3, 0x0ed4, 0x0ed5, 0x0ed6, 0x0ed7, 0x0ed8, 0x0ed9, 0xfffd, 0xfffd, 0x0edc, 0x0edd, 0xfffd, 0xfffd, }; static int mulelao_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c = *s; if (c < 0xa0) { *pwc = (ucs4_t) c; return 1; } else { unsigned short wc = mulelao_2uni[c-0xa0]; if (wc != 0xfffd) { *pwc = (ucs4_t) wc; return 1; } } return RET_ILSEQ; } static const unsigned char mulelao_page0e[96] = { 0x00, 0xa1, 0xa2, 0x00, 0xa4, 0x00, 0x00, 0xa7, /* 0x80-0x87 */ 0xa8, 0x00, 0xaa, 0x00, 0x00, 0xad, 0x00, 0x00, /* 0x88-0x8f */ 0x00, 0x00, 0x00, 0x00, 0xb4, 0xb5, 0xb6, 0xb7, /* 0x90-0x97 */ 0x00, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0x98-0x9f */ 0x00, 0xc1, 0xc2, 0xc3, 0x00, 0xc5, 0x00, 0xc7, /* 0xa0-0xa7 */ 0x00, 0x00, 0xca, 0xcb, 0x00, 0xcd, 0xce, 0xcf, /* 0xa8-0xaf */ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xb0-0xb7 */ 0xd8, 0xd9, 0x00, 0xdb, 0xdc, 0xdd, 0x00, 0x00, /* 0xb8-0xbf */ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0x00, 0xe6, 0x00, /* 0xc0-0xc7 */ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0x00, 0x00, /* 0xc8-0xcf */ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xd0-0xd7 */ 0xf8, 0xf9, 0x00, 0x00, 0xfc, 0xfd, 0x00, 0x00, /* 0xd8-0xdf */ }; static int mulelao_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { unsigned char c = 0; if (wc < 0x00a0) { *r = wc; return 1; } else if (wc == 0x00a0) c = 0xa0; else if (wc >= 0x0e80 && wc < 0x0ee0) c = mulelao_page0e[wc-0x0e80]; if (c != 0) { *r = c; return 1; } return RET_ILSEQ; } x0ea3, 0xfffd, 0x0ea5, 0xfffd, 0x0ea7, 0xfffd, 0xfffd, 0x0eaa, 0x0eab, 0xfffd, 0x0ead, 0x0eae, 0x0eaf, /* 0libX11-1.6.3/src/xlibi18n/lcUniConv/cp1251.h000064401431060000012000000101301247741723500202620ustar00alancstaff00002660200006 /* * CP1251 */ static const unsigned short cp1251_2uni[128] = { /* 0x80 */ 0x0402, 0x0403, 0x201a, 0x0453, 0x201e, 0x2026, 0x2020, 0x2021, 0x20ac, 0x2030, 0x0409, 0x2039, 0x040a, 0x040c, 0x040b, 0x040f, /* 0x90 */ 0x0452, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, 0xfffd, 0x2122, 0x0459, 0x203a, 0x045a, 0x045c, 0x045b, 0x045f, /* 0xa0 */ 0x00a0, 0x040e, 0x045e, 0x0408, 0x00a4, 0x0490, 0x00a6, 0x00a7, 0x0401, 0x00a9, 0x0404, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x0407, /* 0xb0 */ 0x00b0, 0x00b1, 0x0406, 0x0456, 0x0491, 0x00b5, 0x00b6, 0x00b7, 0x0451, 0x2116, 0x0454, 0x00bb, 0x0458, 0x0405, 0x0455, 0x0457, /* 0xc0 */ 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, /* 0xd0 */ 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, /* 0xe0 */ 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, /* 0xf0 */ 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, }; static int cp1251_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c = *s; if (c < 0x80) { *pwc = (ucs4_t) c; return 1; } else { unsigned short wc = cp1251_2uni[c-0x80]; if (wc != 0xfffd) { *pwc = (ucs4_t) wc; return 1; } } return RET_ILSEQ; } static const unsigned char cp1251_page00[32] = { 0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0xa6, 0xa7, /* 0xa0-0xa7 */ 0x00, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0x00, /* 0xa8-0xaf */ 0xb0, 0xb1, 0x00, 0x00, 0x00, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ }; static const unsigned char cp1251_page04[152] = { 0x00, 0xa8, 0x80, 0x81, 0xaa, 0xbd, 0xb2, 0xaf, /* 0x00-0x07 */ 0xa3, 0x8a, 0x8c, 0x8e, 0x8d, 0x00, 0xa1, 0x8f, /* 0x08-0x0f */ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x10-0x17 */ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x18-0x1f */ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x20-0x27 */ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0x28-0x2f */ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x30-0x37 */ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x38-0x3f */ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x40-0x47 */ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0x48-0x4f */ 0x00, 0xb8, 0x90, 0x83, 0xba, 0xbe, 0xb3, 0xbf, /* 0x50-0x57 */ 0xbc, 0x9a, 0x9c, 0x9e, 0x9d, 0x00, 0xa2, 0x9f, /* 0x58-0x5f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ 0xa5, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ }; static const unsigned char cp1251_page20[48] = { 0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */ 0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x18-0x1f */ 0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ 0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ }; static int cp1251_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { unsigned char c = 0; if (wc < 0x0080) { *r = wc; return 1; } else if (wc >= 0x00a0 && wc < 0x00c0) c = cp1251_page00[wc-0x00a0]; else if (wc >= 0x0400 && wc < 0x0498) c = cp1251_page04[wc-0x0400]; else if (wc >= 0x2010 && wc < 0x2040) c = cp1251_page20[wc-0x2010]; else if (wc == 0x20ac) c = 0x88; else if (wc == 0x2116) c = 0xb9; else if (wc == 0x2122) c = 0x99; if (c != 0) { *r = c; return 1; } return RET_ILSEQ; } libX11-1.6.3/src/xlibi18n/lcUniConv/jisx0212.h000064401431060000012000004033171247741723500206460ustar00alancstaff00002660200006 /* * JISX0212.1990-0 */ static const unsigned short jisx0212_2uni_page22[81] = { /* 0x22 */ 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x02d8, 0x02c7, 0x00b8, 0x02d9, 0x02dd, 0x00af, 0x02db, 0x02da, 0x007e, 0x0384, 0x0385, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x00a1, 0x00a6, 0x00bf, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x00ba, 0x00aa, 0x00a9, 0x00ae, 0x2122, 0x00a4, 0x2116, }; static const unsigned short jisx0212_2uni_page26[188] = { /* 0x26 */ 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x0386, 0x0388, 0x0389, 0x038a, 0x03aa, 0xfffd, 0x038c, 0xfffd, 0x038e, 0x03ab, 0xfffd, 0x038f, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x03ac, 0x03ad, 0x03ae, 0x03af, 0x03ca, 0x0390, 0x03cc, 0x03c2, 0x03cd, 0x03cb, 0x03b0, 0x03ce, 0xfffd, 0xfffd, /* 0x27 */ 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, 0x0408, 0x0409, 0x040a, 0x040b, 0x040c, 0x040e, 0x040f, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x045e, 0x045f, }; static const unsigned short jisx0212_2uni_page29[275] = { /* 0x29 */ 0x00c6, 0x0110, 0xfffd, 0x0126, 0xfffd, 0x0132, 0xfffd, 0x0141, 0x013f, 0xfffd, 0x014a, 0x00d8, 0x0152, 0xfffd, 0x0166, 0x00de, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x00e6, 0x0111, 0x00f0, 0x0127, 0x0131, 0x0133, 0x0138, 0x0142, 0x0140, 0x0149, 0x014b, 0x00f8, 0x0153, 0x00df, 0x0167, 0x00fe, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0x2a */ 0x00c1, 0x00c0, 0x00c4, 0x00c2, 0x0102, 0x01cd, 0x0100, 0x0104, 0x00c5, 0x00c3, 0x0106, 0x0108, 0x010c, 0x00c7, 0x010a, 0x010e, 0x00c9, 0x00c8, 0x00cb, 0x00ca, 0x011a, 0x0116, 0x0112, 0x0118, 0xfffd, 0x011c, 0x011e, 0x0122, 0x0120, 0x0124, 0x00cd, 0x00cc, 0x00cf, 0x00ce, 0x01cf, 0x0130, 0x012a, 0x012e, 0x0128, 0x0134, 0x0136, 0x0139, 0x013d, 0x013b, 0x0143, 0x0147, 0x0145, 0x00d1, 0x00d3, 0x00d2, 0x00d6, 0x00d4, 0x01d1, 0x0150, 0x014c, 0x00d5, 0x0154, 0x0158, 0x0156, 0x015a, 0x015c, 0x0160, 0x015e, 0x0164, 0x0162, 0x00da, 0x00d9, 0x00dc, 0x00db, 0x016c, 0x01d3, 0x0170, 0x016a, 0x0172, 0x016e, 0x0168, 0x01d7, 0x01db, 0x01d9, 0x01d5, 0x0174, 0x00dd, 0x0178, 0x0176, 0x0179, 0x017d, 0x017b, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0x2b */ 0x00e1, 0x00e0, 0x00e4, 0x00e2, 0x0103, 0x01ce, 0x0101, 0x0105, 0x00e5, 0x00e3, 0x0107, 0x0109, 0x010d, 0x00e7, 0x010b, 0x010f, 0x00e9, 0x00e8, 0x00eb, 0x00ea, 0x011b, 0x0117, 0x0113, 0x0119, 0x01f5, 0x011d, 0x011f, 0xfffd, 0x0121, 0x0125, 0x00ed, 0x00ec, 0x00ef, 0x00ee, 0x01d0, 0xfffd, 0x012b, 0x012f, 0x0129, 0x0135, 0x0137, 0x013a, 0x013e, 0x013c, 0x0144, 0x0148, 0x0146, 0x00f1, 0x00f3, 0x00f2, 0x00f6, 0x00f4, 0x01d2, 0x0151, 0x014d, 0x00f5, 0x0155, 0x0159, 0x0157, 0x015b, 0x015d, 0x0161, 0x015f, 0x0165, 0x0163, 0x00fa, 0x00f9, 0x00fc, 0x00fb, 0x016d, 0x01d4, 0x0171, 0x016b, 0x0173, 0x016f, 0x0169, 0x01d8, 0x01dc, 0x01da, 0x01d6, 0x0175, 0x00fd, 0x00ff, 0x0177, 0x017a, 0x017e, 0x017c, }; static const unsigned short jisx0212_2uni_page30[5801] = { /* 0x30 */ 0x4e02, 0x4e04, 0x4e05, 0x4e0c, 0x4e12, 0x4e1f, 0x4e23, 0x4e24, 0x4e28, 0x4e2b, 0x4e2e, 0x4e2f, 0x4e30, 0x4e35, 0x4e40, 0x4e41, 0x4e44, 0x4e47, 0x4e51, 0x4e5a, 0x4e5c, 0x4e63, 0x4e68, 0x4e69, 0x4e74, 0x4e75, 0x4e79, 0x4e7f, 0x4e8d, 0x4e96, 0x4e97, 0x4e9d, 0x4eaf, 0x4eb9, 0x4ec3, 0x4ed0, 0x4eda, 0x4edb, 0x4ee0, 0x4ee1, 0x4ee2, 0x4ee8, 0x4eef, 0x4ef1, 0x4ef3, 0x4ef5, 0x4efd, 0x4efe, 0x4eff, 0x4f00, 0x4f02, 0x4f03, 0x4f08, 0x4f0b, 0x4f0c, 0x4f12, 0x4f15, 0x4f16, 0x4f17, 0x4f19, 0x4f2e, 0x4f31, 0x4f60, 0x4f33, 0x4f35, 0x4f37, 0x4f39, 0x4f3b, 0x4f3e, 0x4f40, 0x4f42, 0x4f48, 0x4f49, 0x4f4b, 0x4f4c, 0x4f52, 0x4f54, 0x4f56, 0x4f58, 0x4f5f, 0x4f63, 0x4f6a, 0x4f6c, 0x4f6e, 0x4f71, 0x4f77, 0x4f78, 0x4f79, 0x4f7a, 0x4f7d, 0x4f7e, 0x4f81, 0x4f82, 0x4f84, /* 0x31 */ 0x4f85, 0x4f89, 0x4f8a, 0x4f8c, 0x4f8e, 0x4f90, 0x4f92, 0x4f93, 0x4f94, 0x4f97, 0x4f99, 0x4f9a, 0x4f9e, 0x4f9f, 0x4fb2, 0x4fb7, 0x4fb9, 0x4fbb, 0x4fbc, 0x4fbd, 0x4fbe, 0x4fc0, 0x4fc1, 0x4fc5, 0x4fc6, 0x4fc8, 0x4fc9, 0x4fcb, 0x4fcc, 0x4fcd, 0x4fcf, 0x4fd2, 0x4fdc, 0x4fe0, 0x4fe2, 0x4ff0, 0x4ff2, 0x4ffc, 0x4ffd, 0x4fff, 0x5000, 0x5001, 0x5004, 0x5007, 0x500a, 0x500c, 0x500e, 0x5010, 0x5013, 0x5017, 0x5018, 0x501b, 0x501c, 0x501d, 0x501e, 0x5022, 0x5027, 0x502e, 0x5030, 0x5032, 0x5033, 0x5035, 0x5040, 0x5041, 0x5042, 0x5045, 0x5046, 0x504a, 0x504c, 0x504e, 0x5051, 0x5052, 0x5053, 0x5057, 0x5059, 0x505f, 0x5060, 0x5062, 0x5063, 0x5066, 0x5067, 0x506a, 0x506d, 0x5070, 0x5071, 0x503b, 0x5081, 0x5083, 0x5084, 0x5086, 0x508a, 0x508e, 0x508f, 0x5090, /* 0x32 */ 0x5092, 0x5093, 0x5094, 0x5096, 0x509b, 0x509c, 0x509e, 0x509f, 0x50a0, 0x50a1, 0x50a2, 0x50aa, 0x50af, 0x50b0, 0x50b9, 0x50ba, 0x50bd, 0x50c0, 0x50c3, 0x50c4, 0x50c7, 0x50cc, 0x50ce, 0x50d0, 0x50d3, 0x50d4, 0x50d8, 0x50dc, 0x50dd, 0x50df, 0x50e2, 0x50e4, 0x50e6, 0x50e8, 0x50e9, 0x50ef, 0x50f1, 0x50f6, 0x50fa, 0x50fe, 0x5103, 0x5106, 0x5107, 0x5108, 0x510b, 0x510c, 0x510d, 0x510e, 0x50f2, 0x5110, 0x5117, 0x5119, 0x511b, 0x511c, 0x511d, 0x511e, 0x5123, 0x5127, 0x5128, 0x512c, 0x512d, 0x512f, 0x5131, 0x5133, 0x5134, 0x5135, 0x5138, 0x5139, 0x5142, 0x514a, 0x514f, 0x5153, 0x5155, 0x5157, 0x5158, 0x515f, 0x5164, 0x5166, 0x517e, 0x5183, 0x5184, 0x518b, 0x518e, 0x5198, 0x519d, 0x51a1, 0x51a3, 0x51ad, 0x51b8, 0x51ba, 0x51bc, 0x51be, 0x51bf, 0x51c2, /* 0x33 */ 0x51c8, 0x51cf, 0x51d1, 0x51d2, 0x51d3, 0x51d5, 0x51d8, 0x51de, 0x51e2, 0x51e5, 0x51ee, 0x51f2, 0x51f3, 0x51f4, 0x51f7, 0x5201, 0x5202, 0x5205, 0x5212, 0x5213, 0x5215, 0x5216, 0x5218, 0x5222, 0x5228, 0x5231, 0x5232, 0x5235, 0x523c, 0x5245, 0x5249, 0x5255, 0x5257, 0x5258, 0x525a, 0x525c, 0x525f, 0x5260, 0x5261, 0x5266, 0x526e, 0x5277, 0x5278, 0x5279, 0x5280, 0x5282, 0x5285, 0x528a, 0x528c, 0x5293, 0x5295, 0x5296, 0x5297, 0x5298, 0x529a, 0x529c, 0x52a4, 0x52a5, 0x52a6, 0x52a7, 0x52af, 0x52b0, 0x52b6, 0x52b7, 0x52b8, 0x52ba, 0x52bb, 0x52bd, 0x52c0, 0x52c4, 0x52c6, 0x52c8, 0x52cc, 0x52cf, 0x52d1, 0x52d4, 0x52d6, 0x52db, 0x52dc, 0x52e1, 0x52e5, 0x52e8, 0x52e9, 0x52ea, 0x52ec, 0x52f0, 0x52f1, 0x52f4, 0x52f6, 0x52f7, 0x5300, 0x5303, 0x530a, 0x530b, /* 0x34 */ 0x530c, 0x5311, 0x5313, 0x5318, 0x531b, 0x531c, 0x531e, 0x531f, 0x5325, 0x5327, 0x5328, 0x5329, 0x532b, 0x532c, 0x532d, 0x5330, 0x5332, 0x5335, 0x533c, 0x533d, 0x533e, 0x5342, 0x534c, 0x534b, 0x5359, 0x535b, 0x5361, 0x5363, 0x5365, 0x536c, 0x536d, 0x5372, 0x5379, 0x537e, 0x5383, 0x5387, 0x5388, 0x538e, 0x5393, 0x5394, 0x5399, 0x539d, 0x53a1, 0x53a4, 0x53aa, 0x53ab, 0x53af, 0x53b2, 0x53b4, 0x53b5, 0x53b7, 0x53b8, 0x53ba, 0x53bd, 0x53c0, 0x53c5, 0x53cf, 0x53d2, 0x53d3, 0x53d5, 0x53da, 0x53dd, 0x53de, 0x53e0, 0x53e6, 0x53e7, 0x53f5, 0x5402, 0x5413, 0x541a, 0x5421, 0x5427, 0x5428, 0x542a, 0x542f, 0x5431, 0x5434, 0x5435, 0x5443, 0x5444, 0x5447, 0x544d, 0x544f, 0x545e, 0x5462, 0x5464, 0x5466, 0x5467, 0x5469, 0x546b, 0x546d, 0x546e, 0x5474, 0x547f, /* 0x35 */ 0x5481, 0x5483, 0x5485, 0x5488, 0x5489, 0x548d, 0x5491, 0x5495, 0x5496, 0x549c, 0x549f, 0x54a1, 0x54a6, 0x54a7, 0x54a9, 0x54aa, 0x54ad, 0x54ae, 0x54b1, 0x54b7, 0x54b9, 0x54ba, 0x54bb, 0x54bf, 0x54c6, 0x54ca, 0x54cd, 0x54ce, 0x54e0, 0x54ea, 0x54ec, 0x54ef, 0x54f6, 0x54fc, 0x54fe, 0x54ff, 0x5500, 0x5501, 0x5505, 0x5508, 0x5509, 0x550c, 0x550d, 0x550e, 0x5515, 0x552a, 0x552b, 0x5532, 0x5535, 0x5536, 0x553b, 0x553c, 0x553d, 0x5541, 0x5547, 0x5549, 0x554a, 0x554d, 0x5550, 0x5551, 0x5558, 0x555a, 0x555b, 0x555e, 0x5560, 0x5561, 0x5564, 0x5566, 0x557f, 0x5581, 0x5582, 0x5586, 0x5588, 0x558e, 0x558f, 0x5591, 0x5592, 0x5593, 0x5594, 0x5597, 0x55a3, 0x55a4, 0x55ad, 0x55b2, 0x55bf, 0x55c1, 0x55c3, 0x55c6, 0x55c9, 0x55cb, 0x55cc, 0x55ce, 0x55d1, 0x55d2, /* 0x36 */ 0x55d3, 0x55d7, 0x55d8, 0x55db, 0x55de, 0x55e2, 0x55e9, 0x55f6, 0x55ff, 0x5605, 0x5608, 0x560a, 0x560d, 0x560e, 0x560f, 0x5610, 0x5611, 0x5612, 0x5619, 0x562c, 0x5630, 0x5633, 0x5635, 0x5637, 0x5639, 0x563b, 0x563c, 0x563d, 0x563f, 0x5640, 0x5641, 0x5643, 0x5644, 0x5646, 0x5649, 0x564b, 0x564d, 0x564f, 0x5654, 0x565e, 0x5660, 0x5661, 0x5662, 0x5663, 0x5666, 0x5669, 0x566d, 0x566f, 0x5671, 0x5672, 0x5675, 0x5684, 0x5685, 0x5688, 0x568b, 0x568c, 0x5695, 0x5699, 0x569a, 0x569d, 0x569e, 0x569f, 0x56a6, 0x56a7, 0x56a8, 0x56a9, 0x56ab, 0x56ac, 0x56ad, 0x56b1, 0x56b3, 0x56b7, 0x56be, 0x56c5, 0x56c9, 0x56ca, 0x56cb, 0x56cf, 0x56d0, 0x56cc, 0x56cd, 0x56d9, 0x56dc, 0x56dd, 0x56df, 0x56e1, 0x56e4, 0x56e5, 0x56e6, 0x56e7, 0x56e8, 0x56f1, 0x56eb, 0x56ed, /* 0x37 */ 0x56f6, 0x56f7, 0x5701, 0x5702, 0x5707, 0x570a, 0x570c, 0x5711, 0x5715, 0x571a, 0x571b, 0x571d, 0x5720, 0x5722, 0x5723, 0x5724, 0x5725, 0x5729, 0x572a, 0x572c, 0x572e, 0x572f, 0x5733, 0x5734, 0x573d, 0x573e, 0x573f, 0x5745, 0x5746, 0x574c, 0x574d, 0x5752, 0x5762, 0x5765, 0x5767, 0x5768, 0x576b, 0x576d, 0x576e, 0x576f, 0x5770, 0x5771, 0x5773, 0x5774, 0x5775, 0x5777, 0x5779, 0x577a, 0x577b, 0x577c, 0x577e, 0x5781, 0x5783, 0x578c, 0x5794, 0x5797, 0x5799, 0x579a, 0x579c, 0x579d, 0x579e, 0x579f, 0x57a1, 0x5795, 0x57a7, 0x57a8, 0x57a9, 0x57ac, 0x57b8, 0x57bd, 0x57c7, 0x57c8, 0x57cc, 0x57cf, 0x57d5, 0x57dd, 0x57de, 0x57e4, 0x57e6, 0x57e7, 0x57e9, 0x57ed, 0x57f0, 0x57f5, 0x57f6, 0x57f8, 0x57fd, 0x57fe, 0x57ff, 0x5803, 0x5804, 0x5808, 0x5809, 0x57e1, /* 0x38 */ 0x580c, 0x580d, 0x581b, 0x581e, 0x581f, 0x5820, 0x5826, 0x5827, 0x582d, 0x5832, 0x5839, 0x583f, 0x5849, 0x584c, 0x584d, 0x584f, 0x5850, 0x5855, 0x585f, 0x5861, 0x5864, 0x5867, 0x5868, 0x5878, 0x587c, 0x587f, 0x5880, 0x5881, 0x5887, 0x5888, 0x5889, 0x588a, 0x588c, 0x588d, 0x588f, 0x5890, 0x5894, 0x5896, 0x589d, 0x58a0, 0x58a1, 0x58a2, 0x58a6, 0x58a9, 0x58b1, 0x58b2, 0x58c4, 0x58bc, 0x58c2, 0x58c8, 0x58cd, 0x58ce, 0x58d0, 0x58d2, 0x58d4, 0x58d6, 0x58da, 0x58dd, 0x58e1, 0x58e2, 0x58e9, 0x58f3, 0x5905, 0x5906, 0x590b, 0x590c, 0x5912, 0x5913, 0x5914, 0x8641, 0x591d, 0x5921, 0x5923, 0x5924, 0x5928, 0x592f, 0x5930, 0x5933, 0x5935, 0x5936, 0x593f, 0x5943, 0x5946, 0x5952, 0x5953, 0x5959, 0x595b, 0x595d, 0x595e, 0x595f, 0x5961, 0x5963, 0x596b, 0x596d, /* 0x39 */ 0x596f, 0x5972, 0x5975, 0x5976, 0x5979, 0x597b, 0x597c, 0x598b, 0x598c, 0x598e, 0x5992, 0x5995, 0x5997, 0x599f, 0x59a4, 0x59a7, 0x59ad, 0x59ae, 0x59af, 0x59b0, 0x59b3, 0x59b7, 0x59ba, 0x59bc, 0x59c1, 0x59c3, 0x59c4, 0x59c8, 0x59ca, 0x59cd, 0x59d2, 0x59dd, 0x59de, 0x59df, 0x59e3, 0x59e4, 0x59e7, 0x59ee, 0x59ef, 0x59f1, 0x59f2, 0x59f4, 0x59f7, 0x5a00, 0x5a04, 0x5a0c, 0x5a0d, 0x5a0e, 0x5a12, 0x5a13, 0x5a1e, 0x5a23, 0x5a24, 0x5a27, 0x5a28, 0x5a2a, 0x5a2d, 0x5a30, 0x5a44, 0x5a45, 0x5a47, 0x5a48, 0x5a4c, 0x5a50, 0x5a55, 0x5a5e, 0x5a63, 0x5a65, 0x5a67, 0x5a6d, 0x5a77, 0x5a7a, 0x5a7b, 0x5a7e, 0x5a8b, 0x5a90, 0x5a93, 0x5a96, 0x5a99, 0x5a9c, 0x5a9e, 0x5a9f, 0x5aa0, 0x5aa2, 0x5aa7, 0x5aac, 0x5ab1, 0x5ab2, 0x5ab3, 0x5ab5, 0x5ab8, 0x5aba, 0x5abb, 0x5abf, /* 0x3a */ 0x5ac4, 0x5ac6, 0x5ac8, 0x5acf, 0x5ada, 0x5adc, 0x5ae0, 0x5ae5, 0x5aea, 0x5aee, 0x5af5, 0x5af6, 0x5afd, 0x5b00, 0x5b01, 0x5b08, 0x5b17, 0x5b34, 0x5b19, 0x5b1b, 0x5b1d, 0x5b21, 0x5b25, 0x5b2d, 0x5b38, 0x5b41, 0x5b4b, 0x5b4c, 0x5b52, 0x5b56, 0x5b5e, 0x5b68, 0x5b6e, 0x5b6f, 0x5b7c, 0x5b7d, 0x5b7e, 0x5b7f, 0x5b81, 0x5b84, 0x5b86, 0x5b8a, 0x5b8e, 0x5b90, 0x5b91, 0x5b93, 0x5b94, 0x5b96, 0x5ba8, 0x5ba9, 0x5bac, 0x5bad, 0x5baf, 0x5bb1, 0x5bb2, 0x5bb7, 0x5bba, 0x5bbc, 0x5bc0, 0x5bc1, 0x5bcd, 0x5bcf, 0x5bd6, 0x5bd7, 0x5bd8, 0x5bd9, 0x5bda, 0x5be0, 0x5bef, 0x5bf1, 0x5bf4, 0x5bfd, 0x5c0c, 0x5c17, 0x5c1e, 0x5c1f, 0x5c23, 0x5c26, 0x5c29, 0x5c2b, 0x5c2c, 0x5c2e, 0x5c30, 0x5c32, 0x5c35, 0x5c36, 0x5c59, 0x5c5a, 0x5c5c, 0x5c62, 0x5c63, 0x5c67, 0x5c68, 0x5c69, /* 0x3b */ 0x5c6d, 0x5c70, 0x5c74, 0x5c75, 0x5c7a, 0x5c7b, 0x5c7c, 0x5c7d, 0x5c87, 0x5c88, 0x5c8a, 0x5c8f, 0x5c92, 0x5c9d, 0x5c9f, 0x5ca0, 0x5ca2, 0x5ca3, 0x5ca6, 0x5caa, 0x5cb2, 0x5cb4, 0x5cb5, 0x5cba, 0x5cc9, 0x5ccb, 0x5cd2, 0x5cdd, 0x5cd7, 0x5cee, 0x5cf1, 0x5cf2, 0x5cf4, 0x5d01, 0x5d06, 0x5d0d, 0x5d12, 0x5d2b, 0x5d23, 0x5d24, 0x5d26, 0x5d27, 0x5d31, 0x5d34, 0x5d39, 0x5d3d, 0x5d3f, 0x5d42, 0x5d43, 0x5d46, 0x5d48, 0x5d55, 0x5d51, 0x5d59, 0x5d4a, 0x5d5f, 0x5d60, 0x5d61, 0x5d62, 0x5d64, 0x5d6a, 0x5d6d, 0x5d70, 0x5d79, 0x5d7a, 0x5d7e, 0x5d7f, 0x5d81, 0x5d83, 0x5d88, 0x5d8a, 0x5d92, 0x5d93, 0x5d94, 0x5d95, 0x5d99, 0x5d9b, 0x5d9f, 0x5da0, 0x5da7, 0x5dab, 0x5db0, 0x5db4, 0x5db8, 0x5db9, 0x5dc3, 0x5dc7, 0x5dcb, 0x5dd0, 0x5dce, 0x5dd8, 0x5dd9, 0x5de0, 0x5de4, /* 0x3c */ 0x5de9, 0x5df8, 0x5df9, 0x5e00, 0x5e07, 0x5e0d, 0x5e12, 0x5e14, 0x5e15, 0x5e18, 0x5e1f, 0x5e20, 0x5e2e, 0x5e28, 0x5e32, 0x5e35, 0x5e3e, 0x5e4b, 0x5e50, 0x5e49, 0x5e51, 0x5e56, 0x5e58, 0x5e5b, 0x5e5c, 0x5e5e, 0x5e68, 0x5e6a, 0x5e6b, 0x5e6c, 0x5e6d, 0x5e6e, 0x5e70, 0x5e80, 0x5e8b, 0x5e8e, 0x5ea2, 0x5ea4, 0x5ea5, 0x5ea8, 0x5eaa, 0x5eac, 0x5eb1, 0x5eb3, 0x5ebd, 0x5ebe, 0x5ebf, 0x5ec6, 0x5ecc, 0x5ecb, 0x5ece, 0x5ed1, 0x5ed2, 0x5ed4, 0x5ed5, 0x5edc, 0x5ede, 0x5ee5, 0x5eeb, 0x5f02, 0x5f06, 0x5f07, 0x5f08, 0x5f0e, 0x5f19, 0x5f1c, 0x5f1d, 0x5f21, 0x5f22, 0x5f23, 0x5f24, 0x5f28, 0x5f2b, 0x5f2c, 0x5f2e, 0x5f30, 0x5f34, 0x5f36, 0x5f3b, 0x5f3d, 0x5f3f, 0x5f40, 0x5f44, 0x5f45, 0x5f47, 0x5f4d, 0x5f50, 0x5f54, 0x5f58, 0x5f5b, 0x5f60, 0x5f63, 0x5f64, 0x5f67, /* 0x3d */ 0x5f6f, 0x5f72, 0x5f74, 0x5f75, 0x5f78, 0x5f7a, 0x5f7d, 0x5f7e, 0x5f89, 0x5f8d, 0x5f8f, 0x5f96, 0x5f9c, 0x5f9d, 0x5fa2, 0x5fa7, 0x5fab, 0x5fa4, 0x5fac, 0x5faf, 0x5fb0, 0x5fb1, 0x5fb8, 0x5fc4, 0x5fc7, 0x5fc8, 0x5fc9, 0x5fcb, 0x5fd0, 0x5fd1, 0x5fd2, 0x5fd3, 0x5fd4, 0x5fde, 0x5fe1, 0x5fe2, 0x5fe8, 0x5fe9, 0x5fea, 0x5fec, 0x5fed, 0x5fee, 0x5fef, 0x5ff2, 0x5ff3, 0x5ff6, 0x5ffa, 0x5ffc, 0x6007, 0x600a, 0x600d, 0x6013, 0x6014, 0x6017, 0x6018, 0x601a, 0x601f, 0x6024, 0x602d, 0x6033, 0x6035, 0x6040, 0x6047, 0x6048, 0x6049, 0x604c, 0x6051, 0x6054, 0x6056, 0x6057, 0x605d, 0x6061, 0x6067, 0x6071, 0x607e, 0x607f, 0x6082, 0x6086, 0x6088, 0x608a, 0x608e, 0x6091, 0x6093, 0x6095, 0x6098, 0x609d, 0x609e, 0x60a2, 0x60a4, 0x60a5, 0x60a8, 0x60b0, 0x60b1, 0x60b7, /* 0x3e */ 0x60bb, 0x60be, 0x60c2, 0x60c4, 0x60c8, 0x60c9, 0x60ca, 0x60cb, 0x60ce, 0x60cf, 0x60d4, 0x60d5, 0x60d9, 0x60db, 0x60dd, 0x60de, 0x60e2, 0x60e5, 0x60f2, 0x60f5, 0x60f8, 0x60fc, 0x60fd, 0x6102, 0x6107, 0x610a, 0x610c, 0x6110, 0x6111, 0x6112, 0x6113, 0x6114, 0x6116, 0x6117, 0x6119, 0x611c, 0x611e, 0x6122, 0x612a, 0x612b, 0x6130, 0x6131, 0x6135, 0x6136, 0x6137, 0x6139, 0x6141, 0x6145, 0x6146, 0x6149, 0x615e, 0x6160, 0x616c, 0x6172, 0x6178, 0x617b, 0x617c, 0x617f, 0x6180, 0x6181, 0x6183, 0x6184, 0x618b, 0x618d, 0x6192, 0x6193, 0x6197, 0x6198, 0x619c, 0x619d, 0x619f, 0x61a0, 0x61a5, 0x61a8, 0x61aa, 0x61ad, 0x61b8, 0x61b9, 0x61bc, 0x61c0, 0x61c1, 0x61c2, 0x61ce, 0x61cf, 0x61d5, 0x61dc, 0x61dd, 0x61de, 0x61df, 0x61e1, 0x61e2, 0x61e7, 0x61e9, 0x61e5, /* 0x3f */ 0x61ec, 0x61ed, 0x61ef, 0x6201, 0x6203, 0x6204, 0x6207, 0x6213, 0x6215, 0x621c, 0x6220, 0x6222, 0x6223, 0x6227, 0x6229, 0x622b, 0x6239, 0x623d, 0x6242, 0x6243, 0x6244, 0x6246, 0x624c, 0x6250, 0x6251, 0x6252, 0x6254, 0x6256, 0x625a, 0x625c, 0x6264, 0x626d, 0x626f, 0x6273, 0x627a, 0x627d, 0x628d, 0x628e, 0x628f, 0x6290, 0x62a6, 0x62a8, 0x62b3, 0x62b6, 0x62b7, 0x62ba, 0x62be, 0x62bf, 0x62c4, 0x62ce, 0x62d5, 0x62d6, 0x62da, 0x62ea, 0x62f2, 0x62f4, 0x62fc, 0x62fd, 0x6303, 0x6304, 0x630a, 0x630b, 0x630d, 0x6310, 0x6313, 0x6316, 0x6318, 0x6329, 0x632a, 0x632d, 0x6335, 0x6336, 0x6339, 0x633c, 0x6341, 0x6342, 0x6343, 0x6344, 0x6346, 0x634a, 0x634b, 0x634e, 0x6352, 0x6353, 0x6354, 0x6358, 0x635b, 0x6365, 0x6366, 0x636c, 0x636d, 0x6371, 0x6374, 0x6375, /* 0x40 */ 0x6378, 0x637c, 0x637d, 0x637f, 0x6382, 0x6384, 0x6387, 0x638a, 0x6390, 0x6394, 0x6395, 0x6399, 0x639a, 0x639e, 0x63a4, 0x63a6, 0x63ad, 0x63ae, 0x63af, 0x63bd, 0x63c1, 0x63c5, 0x63c8, 0x63ce, 0x63d1, 0x63d3, 0x63d4, 0x63d5, 0x63dc, 0x63e0, 0x63e5, 0x63ea, 0x63ec, 0x63f2, 0x63f3, 0x63f5, 0x63f8, 0x63f9, 0x6409, 0x640a, 0x6410, 0x6412, 0x6414, 0x6418, 0x641e, 0x6420, 0x6422, 0x6424, 0x6425, 0x6429, 0x642a, 0x642f, 0x6430, 0x6435, 0x643d, 0x643f, 0x644b, 0x644f, 0x6451, 0x6452, 0x6453, 0x6454, 0x645a, 0x645b, 0x645c, 0x645d, 0x645f, 0x6460, 0x6461, 0x6463, 0x646d, 0x6473, 0x6474, 0x647b, 0x647d, 0x6485, 0x6487, 0x648f, 0x6490, 0x6491, 0x6498, 0x6499, 0x649b, 0x649d, 0x649f, 0x64a1, 0x64a3, 0x64a6, 0x64a8, 0x64ac, 0x64b3, 0x64bd, 0x64be, 0x64bf, /* 0x41 */ 0x64c4, 0x64c9, 0x64ca, 0x64cb, 0x64cc, 0x64ce, 0x64d0, 0x64d1, 0x64d5, 0x64d7, 0x64e4, 0x64e5, 0x64e9, 0x64ea, 0x64ed, 0x64f0, 0x64f5, 0x64f7, 0x64fb, 0x64ff, 0x6501, 0x6504, 0x6508, 0x6509, 0x650a, 0x650f, 0x6513, 0x6514, 0x6516, 0x6519, 0x651b, 0x651e, 0x651f, 0x6522, 0x6526, 0x6529, 0x652e, 0x6531, 0x653a, 0x653c, 0x653d, 0x6543, 0x6547, 0x6549, 0x6550, 0x6552, 0x6554, 0x655f, 0x6560, 0x6567, 0x656b, 0x657a, 0x657d, 0x6581, 0x6585, 0x658a, 0x6592, 0x6595, 0x6598, 0x659d, 0x65a0, 0x65a3, 0x65a6, 0x65ae, 0x65b2, 0x65b3, 0x65b4, 0x65bf, 0x65c2, 0x65c8, 0x65c9, 0x65ce, 0x65d0, 0x65d4, 0x65d6, 0x65d8, 0x65df, 0x65f0, 0x65f2, 0x65f4, 0x65f5, 0x65f9, 0x65fe, 0x65ff, 0x6600, 0x6604, 0x6608, 0x6609, 0x660d, 0x6611, 0x6612, 0x6615, 0x6616, 0x661d, /* 0x42 */ 0x661e, 0x6621, 0x6622, 0x6623, 0x6624, 0x6626, 0x6629, 0x662a, 0x662b, 0x662c, 0x662e, 0x6630, 0x6631, 0x6633, 0x6639, 0x6637, 0x6640, 0x6645, 0x6646, 0x664a, 0x664c, 0x6651, 0x664e, 0x6657, 0x6658, 0x6659, 0x665b, 0x665c, 0x6660, 0x6661, 0x66fb, 0x666a, 0x666b, 0x666c, 0x667e, 0x6673, 0x6675, 0x667f, 0x6677, 0x6678, 0x6679, 0x667b, 0x6680, 0x667c, 0x668b, 0x668c, 0x668d, 0x6690, 0x6692, 0x6699, 0x669a, 0x669b, 0x669c, 0x669f, 0x66a0, 0x66a4, 0x66ad, 0x66b1, 0x66b2, 0x66b5, 0x66bb, 0x66bf, 0x66c0, 0x66c2, 0x66c3, 0x66c8, 0x66cc, 0x66ce, 0x66cf, 0x66d4, 0x66db, 0x66df, 0x66e8, 0x66eb, 0x66ec, 0x66ee, 0x66fa, 0x6705, 0x6707, 0x670e, 0x6713, 0x6719, 0x671c, 0x6720, 0x6722, 0x6733, 0x673e, 0x6745, 0x6747, 0x6748, 0x674c, 0x6754, 0x6755, 0x675d, /* 0x43 */ 0x6766, 0x676c, 0x676e, 0x6774, 0x6776, 0x677b, 0x6781, 0x6784, 0x678e, 0x678f, 0x6791, 0x6793, 0x6796, 0x6798, 0x6799, 0x679b, 0x67b0, 0x67b1, 0x67b2, 0x67b5, 0x67bb, 0x67bc, 0x67bd, 0x67f9, 0x67c0, 0x67c2, 0x67c3, 0x67c5, 0x67c8, 0x67c9, 0x67d2, 0x67d7, 0x67d9, 0x67dc, 0x67e1, 0x67e6, 0x67f0, 0x67f2, 0x67f6, 0x67f7, 0x6852, 0x6814, 0x6819, 0x681d, 0x681f, 0x6828, 0x6827, 0x682c, 0x682d, 0x682f, 0x6830, 0x6831, 0x6833, 0x683b, 0x683f, 0x6844, 0x6845, 0x684a, 0x684c, 0x6855, 0x6857, 0x6858, 0x685b, 0x686b, 0x686e, 0x686f, 0x6870, 0x6871, 0x6872, 0x6875, 0x6879, 0x687a, 0x687b, 0x687c, 0x6882, 0x6884, 0x6886, 0x6888, 0x6896, 0x6898, 0x689a, 0x689c, 0x68a1, 0x68a3, 0x68a5, 0x68a9, 0x68aa, 0x68ae, 0x68b2, 0x68bb, 0x68c5, 0x68c8, 0x68cc, 0x68cf, /* 0x44 */ 0x68d0, 0x68d1, 0x68d3, 0x68d6, 0x68d9, 0x68dc, 0x68dd, 0x68e5, 0x68e8, 0x68ea, 0x68eb, 0x68ec, 0x68ed, 0x68f0, 0x68f1, 0x68f5, 0x68f6, 0x68fb, 0x68fc, 0x68fd, 0x6906, 0x6909, 0x690a, 0x6910, 0x6911, 0x6913, 0x6916, 0x6917, 0x6931, 0x6933, 0x6935, 0x6938, 0x693b, 0x6942, 0x6945, 0x6949, 0x694e, 0x6957, 0x695b, 0x6963, 0x6964, 0x6965, 0x6966, 0x6968, 0x6969, 0x696c, 0x6970, 0x6971, 0x6972, 0x697a, 0x697b, 0x697f, 0x6980, 0x698d, 0x6992, 0x6996, 0x6998, 0x69a1, 0x69a5, 0x69a6, 0x69a8, 0x69ab, 0x69ad, 0x69af, 0x69b7, 0x69b8, 0x69ba, 0x69bc, 0x69c5, 0x69c8, 0x69d1, 0x69d6, 0x69d7, 0x69e2, 0x69e5, 0x69ee, 0x69ef, 0x69f1, 0x69f3, 0x69f5, 0x69fe, 0x6a00, 0x6a01, 0x6a03, 0x6a0f, 0x6a11, 0x6a15, 0x6a1a, 0x6a1d, 0x6a20, 0x6a24, 0x6a28, 0x6a30, 0x6a32, /* 0x45 */ 0x6a34, 0x6a37, 0x6a3b, 0x6a3e, 0x6a3f, 0x6a45, 0x6a46, 0x6a49, 0x6a4a, 0x6a4e, 0x6a50, 0x6a51, 0x6a52, 0x6a55, 0x6a56, 0x6a5b, 0x6a64, 0x6a67, 0x6a6a, 0x6a71, 0x6a73, 0x6a7e, 0x6a81, 0x6a83, 0x6a86, 0x6a87, 0x6a89, 0x6a8b, 0x6a91, 0x6a9b, 0x6a9d, 0x6a9e, 0x6a9f, 0x6aa5, 0x6aab, 0x6aaf, 0x6ab0, 0x6ab1, 0x6ab4, 0x6abd, 0x6abe, 0x6abf, 0x6ac6, 0x6ac9, 0x6ac8, 0x6acc, 0x6ad0, 0x6ad4, 0x6ad5, 0x6ad6, 0x6adc, 0x6add, 0x6ae4, 0x6ae7, 0x6aec, 0x6af0, 0x6af1, 0x6af2, 0x6afc, 0x6afd, 0x6b02, 0x6b03, 0x6b06, 0x6b07, 0x6b09, 0x6b0f, 0x6b10, 0x6b11, 0x6b17, 0x6b1b, 0x6b1e, 0x6b24, 0x6b28, 0x6b2b, 0x6b2c, 0x6b2f, 0x6b35, 0x6b36, 0x6b3b, 0x6b3f, 0x6b46, 0x6b4a, 0x6b4d, 0x6b52, 0x6b56, 0x6b58, 0x6b5d, 0x6b60, 0x6b67, 0x6b6b, 0x6b6e, 0x6b70, 0x6b75, 0x6b7d, /* 0x46 */ 0x6b7e, 0x6b82, 0x6b85, 0x6b97, 0x6b9b, 0x6b9f, 0x6ba0, 0x6ba2, 0x6ba3, 0x6ba8, 0x6ba9, 0x6bac, 0x6bad, 0x6bae, 0x6bb0, 0x6bb8, 0x6bb9, 0x6bbd, 0x6bbe, 0x6bc3, 0x6bc4, 0x6bc9, 0x6bcc, 0x6bd6, 0x6bda, 0x6be1, 0x6be3, 0x6be6, 0x6be7, 0x6bee, 0x6bf1, 0x6bf7, 0x6bf9, 0x6bff, 0x6c02, 0x6c04, 0x6c05, 0x6c09, 0x6c0d, 0x6c0e, 0x6c10, 0x6c12, 0x6c19, 0x6c1f, 0x6c26, 0x6c27, 0x6c28, 0x6c2c, 0x6c2e, 0x6c33, 0x6c35, 0x6c36, 0x6c3a, 0x6c3b, 0x6c3f, 0x6c4a, 0x6c4b, 0x6c4d, 0x6c4f, 0x6c52, 0x6c54, 0x6c59, 0x6c5b, 0x6c5c, 0x6c6b, 0x6c6d, 0x6c6f, 0x6c74, 0x6c76, 0x6c78, 0x6c79, 0x6c7b, 0x6c85, 0x6c86, 0x6c87, 0x6c89, 0x6c94, 0x6c95, 0x6c97, 0x6c98, 0x6c9c, 0x6c9f, 0x6cb0, 0x6cb2, 0x6cb4, 0x6cc2, 0x6cc6, 0x6ccd, 0x6ccf, 0x6cd0, 0x6cd1, 0x6cd2, 0x6cd4, 0x6cd6, /* 0x47 */ 0x6cda, 0x6cdc, 0x6ce0, 0x6ce7, 0x6ce9, 0x6ceb, 0x6cec, 0x6cee, 0x6cf2, 0x6cf4, 0x6d04, 0x6d07, 0x6d0a, 0x6d0e, 0x6d0f, 0x6d11, 0x6d13, 0x6d1a, 0x6d26, 0x6d27, 0x6d28, 0x6c67, 0x6d2e, 0x6d2f, 0x6d31, 0x6d39, 0x6d3c, 0x6d3f, 0x6d57, 0x6d5e, 0x6d5f, 0x6d61, 0x6d65, 0x6d67, 0x6d6f, 0x6d70, 0x6d7c, 0x6d82, 0x6d87, 0x6d91, 0x6d92, 0x6d94, 0x6d96, 0x6d97, 0x6d98, 0x6daa, 0x6dac, 0x6db4, 0x6db7, 0x6db9, 0x6dbd, 0x6dbf, 0x6dc4, 0x6dc8, 0x6dca, 0x6dce, 0x6dcf, 0x6dd6, 0x6ddb, 0x6ddd, 0x6ddf, 0x6de0, 0x6de2, 0x6de5, 0x6de9, 0x6def, 0x6df0, 0x6df4, 0x6df6, 0x6dfc, 0x6e00, 0x6e04, 0x6e1e, 0x6e22, 0x6e27, 0x6e32, 0x6e36, 0x6e39, 0x6e3b, 0x6e3c, 0x6e44, 0x6e45, 0x6e48, 0x6e49, 0x6e4b, 0x6e4f, 0x6e51, 0x6e52, 0x6e53, 0x6e54, 0x6e57, 0x6e5c, 0x6e5d, 0x6e5e, /* 0x48 */ 0x6e62, 0x6e63, 0x6e68, 0x6e73, 0x6e7b, 0x6e7d, 0x6e8d, 0x6e93, 0x6e99, 0x6ea0, 0x6ea7, 0x6ead, 0x6eae, 0x6eb1, 0x6eb3, 0x6ebb, 0x6ebf, 0x6ec0, 0x6ec1, 0x6ec3, 0x6ec7, 0x6ec8, 0x6eca, 0x6ecd, 0x6ece, 0x6ecf, 0x6eeb, 0x6eed, 0x6eee, 0x6ef9, 0x6efb, 0x6efd, 0x6f04, 0x6f08, 0x6f0a, 0x6f0c, 0x6f0d, 0x6f16, 0x6f18, 0x6f1a, 0x6f1b, 0x6f26, 0x6f29, 0x6f2a, 0x6f2f, 0x6f30, 0x6f33, 0x6f36, 0x6f3b, 0x6f3c, 0x6f2d, 0x6f4f, 0x6f51, 0x6f52, 0x6f53, 0x6f57, 0x6f59, 0x6f5a, 0x6f5d, 0x6f5e, 0x6f61, 0x6f62, 0x6f68, 0x6f6c, 0x6f7d, 0x6f7e, 0x6f83, 0x6f87, 0x6f88, 0x6f8b, 0x6f8c, 0x6f8d, 0x6f90, 0x6f92, 0x6f93, 0x6f94, 0x6f96, 0x6f9a, 0x6f9f, 0x6fa0, 0x6fa5, 0x6fa6, 0x6fa7, 0x6fa8, 0x6fae, 0x6faf, 0x6fb0, 0x6fb5, 0x6fb6, 0x6fbc, 0x6fc5, 0x6fc7, 0x6fc8, 0x6fca, /* 0x49 */ 0x6fda, 0x6fde, 0x6fe8, 0x6fe9, 0x6ff0, 0x6ff5, 0x6ff9, 0x6ffc, 0x6ffd, 0x7000, 0x7005, 0x7006, 0x7007, 0x700d, 0x7017, 0x7020, 0x7023, 0x702f, 0x7034, 0x7037, 0x7039, 0x703c, 0x7043, 0x7044, 0x7048, 0x7049, 0x704a, 0x704b, 0x7054, 0x7055, 0x705d, 0x705e, 0x704e, 0x7064, 0x7065, 0x706c, 0x706e, 0x7075, 0x7076, 0x707e, 0x7081, 0x7085, 0x7086, 0x7094, 0x7095, 0x7096, 0x7097, 0x7098, 0x709b, 0x70a4, 0x70ab, 0x70b0, 0x70b1, 0x70b4, 0x70b7, 0x70ca, 0x70d1, 0x70d3, 0x70d4, 0x70d5, 0x70d6, 0x70d8, 0x70dc, 0x70e4, 0x70fa, 0x7103, 0x7104, 0x7105, 0x7106, 0x7107, 0x710b, 0x710c, 0x710f, 0x711e, 0x7120, 0x712b, 0x712d, 0x712f, 0x7130, 0x7131, 0x7138, 0x7141, 0x7145, 0x7146, 0x7147, 0x714a, 0x714b, 0x7150, 0x7152, 0x7157, 0x715a, 0x715c, 0x715e, 0x7160, /* 0x4a */ 0x7168, 0x7179, 0x7180, 0x7185, 0x7187, 0x718c, 0x7192, 0x719a, 0x719b, 0x71a0, 0x71a2, 0x71af, 0x71b0, 0x71b2, 0x71b3, 0x71ba, 0x71bf, 0x71c0, 0x71c1, 0x71c4, 0x71cb, 0x71cc, 0x71d3, 0x71d6, 0x71d9, 0x71da, 0x71dc, 0x71f8, 0x71fe, 0x7200, 0x7207, 0x7208, 0x7209, 0x7213, 0x7217, 0x721a, 0x721d, 0x721f, 0x7224, 0x722b, 0x722f, 0x7234, 0x7238, 0x7239, 0x7241, 0x7242, 0x7243, 0x7245, 0x724e, 0x724f, 0x7250, 0x7253, 0x7255, 0x7256, 0x725a, 0x725c, 0x725e, 0x7260, 0x7263, 0x7268, 0x726b, 0x726e, 0x726f, 0x7271, 0x7277, 0x7278, 0x727b, 0x727c, 0x727f, 0x7284, 0x7289, 0x728d, 0x728e, 0x7293, 0x729b, 0x72a8, 0x72ad, 0x72ae, 0x72b1, 0x72b4, 0x72be, 0x72c1, 0x72c7, 0x72c9, 0x72cc, 0x72d5, 0x72d6, 0x72d8, 0x72df, 0x72e5, 0x72f3, 0x72f4, 0x72fa, 0x72fb, /* 0x4b */ 0x72fe, 0x7302, 0x7304, 0x7305, 0x7307, 0x730b, 0x730d, 0x7312, 0x7313, 0x7318, 0x7319, 0x731e, 0x7322, 0x7324, 0x7327, 0x7328, 0x732c, 0x7331, 0x7332, 0x7335, 0x733a, 0x733b, 0x733d, 0x7343, 0x734d, 0x7350, 0x7352, 0x7356, 0x7358, 0x735d, 0x735e, 0x735f, 0x7360, 0x7366, 0x7367, 0x7369, 0x736b, 0x736c, 0x736e, 0x736f, 0x7371, 0x7377, 0x7379, 0x737c, 0x7380, 0x7381, 0x7383, 0x7385, 0x7386, 0x738e, 0x7390, 0x7393, 0x7395, 0x7397, 0x7398, 0x739c, 0x739e, 0x739f, 0x73a0, 0x73a2, 0x73a5, 0x73a6, 0x73aa, 0x73ab, 0x73ad, 0x73b5, 0x73b7, 0x73b9, 0x73bc, 0x73bd, 0x73bf, 0x73c5, 0x73c6, 0x73c9, 0x73cb, 0x73cc, 0x73cf, 0x73d2, 0x73d3, 0x73d6, 0x73d9, 0x73dd, 0x73e1, 0x73e3, 0x73e6, 0x73e7, 0x73e9, 0x73f4, 0x73f5, 0x73f7, 0x73f9, 0x73fa, 0x73fb, 0x73fd, /* 0x4c */ 0x73ff, 0x7400, 0x7401, 0x7404, 0x7407, 0x740a, 0x7411, 0x741a, 0x741b, 0x7424, 0x7426, 0x7428, 0x7429, 0x742a, 0x742b, 0x742c, 0x742d, 0x742e, 0x742f, 0x7430, 0x7431, 0x7439, 0x7440, 0x7443, 0x7444, 0x7446, 0x7447, 0x744b, 0x744d, 0x7451, 0x7452, 0x7457, 0x745d, 0x7462, 0x7466, 0x7467, 0x7468, 0x746b, 0x746d, 0x746e, 0x7471, 0x7472, 0x7480, 0x7481, 0x7485, 0x7486, 0x7487, 0x7489, 0x748f, 0x7490, 0x7491, 0x7492, 0x7498, 0x7499, 0x749a, 0x749c, 0x749f, 0x74a0, 0x74a1, 0x74a3, 0x74a6, 0x74a8, 0x74a9, 0x74aa, 0x74ab, 0x74ae, 0x74af, 0x74b1, 0x74b2, 0x74b5, 0x74b9, 0x74bb, 0x74bf, 0x74c8, 0x74c9, 0x74cc, 0x74d0, 0x74d3, 0x74d8, 0x74da, 0x74db, 0x74de, 0x74df, 0x74e4, 0x74e8, 0x74ea, 0x74eb, 0x74ef, 0x74f4, 0x74fa, 0x74fb, 0x74fc, 0x74ff, 0x7506, /* 0x4d */ 0x7512, 0x7516, 0x7517, 0x7520, 0x7521, 0x7524, 0x7527, 0x7529, 0x752a, 0x752f, 0x7536, 0x7539, 0x753d, 0x753e, 0x753f, 0x7540, 0x7543, 0x7547, 0x7548, 0x754e, 0x7550, 0x7552, 0x7557, 0x755e, 0x755f, 0x7561, 0x756f, 0x7571, 0x7579, 0x757a, 0x757b, 0x757c, 0x757d, 0x757e, 0x7581, 0x7585, 0x7590, 0x7592, 0x7593, 0x7595, 0x7599, 0x759c, 0x75a2, 0x75a4, 0x75b4, 0x75ba, 0x75bf, 0x75c0, 0x75c1, 0x75c4, 0x75c6, 0x75cc, 0x75ce, 0x75cf, 0x75d7, 0x75dc, 0x75df, 0x75e0, 0x75e1, 0x75e4, 0x75e7, 0x75ec, 0x75ee, 0x75ef, 0x75f1, 0x75f9, 0x7600, 0x7602, 0x7603, 0x7604, 0x7607, 0x7608, 0x760a, 0x760c, 0x760f, 0x7612, 0x7613, 0x7615, 0x7616, 0x7619, 0x761b, 0x761c, 0x761d, 0x761e, 0x7623, 0x7625, 0x7626, 0x7629, 0x762d, 0x7632, 0x7633, 0x7635, 0x7638, 0x7639, /* 0x4e */ 0x763a, 0x763c, 0x764a, 0x7640, 0x7641, 0x7643, 0x7644, 0x7645, 0x7649, 0x764b, 0x7655, 0x7659, 0x765f, 0x7664, 0x7665, 0x766d, 0x766e, 0x766f, 0x7671, 0x7674, 0x7681, 0x7685, 0x768c, 0x768d, 0x7695, 0x769b, 0x769c, 0x769d, 0x769f, 0x76a0, 0x76a2, 0x76a3, 0x76a4, 0x76a5, 0x76a6, 0x76a7, 0x76a8, 0x76aa, 0x76ad, 0x76bd, 0x76c1, 0x76c5, 0x76c9, 0x76cb, 0x76cc, 0x76ce, 0x76d4, 0x76d9, 0x76e0, 0x76e6, 0x76e8, 0x76ec, 0x76f0, 0x76f1, 0x76f6, 0x76f9, 0x76fc, 0x7700, 0x7706, 0x770a, 0x770e, 0x7712, 0x7714, 0x7715, 0x7717, 0x7719, 0x771a, 0x771c, 0x7722, 0x7728, 0x772d, 0x772e, 0x772f, 0x7734, 0x7735, 0x7736, 0x7739, 0x773d, 0x773e, 0x7742, 0x7745, 0x7746, 0x774a, 0x774d, 0x774e, 0x774f, 0x7752, 0x7756, 0x7757, 0x775c, 0x775e, 0x775f, 0x7760, 0x7762, /* 0x4f */ 0x7764, 0x7767, 0x776a, 0x776c, 0x7770, 0x7772, 0x7773, 0x7774, 0x777a, 0x777d, 0x7780, 0x7784, 0x778c, 0x778d, 0x7794, 0x7795, 0x7796, 0x779a, 0x779f, 0x77a2, 0x77a7, 0x77aa, 0x77ae, 0x77af, 0x77b1, 0x77b5, 0x77be, 0x77c3, 0x77c9, 0x77d1, 0x77d2, 0x77d5, 0x77d9, 0x77de, 0x77df, 0x77e0, 0x77e4, 0x77e6, 0x77ea, 0x77ec, 0x77f0, 0x77f1, 0x77f4, 0x77f8, 0x77fb, 0x7805, 0x7806, 0x7809, 0x780d, 0x780e, 0x7811, 0x781d, 0x7821, 0x7822, 0x7823, 0x782d, 0x782e, 0x7830, 0x7835, 0x7837, 0x7843, 0x7844, 0x7847, 0x7848, 0x784c, 0x784e, 0x7852, 0x785c, 0x785e, 0x7860, 0x7861, 0x7863, 0x7864, 0x7868, 0x786a, 0x786e, 0x787a, 0x787e, 0x788a, 0x788f, 0x7894, 0x7898, 0x78a1, 0x789d, 0x789e, 0x789f, 0x78a4, 0x78a8, 0x78ac, 0x78ad, 0x78b0, 0x78b1, 0x78b2, 0x78b3, /* 0x50 */ 0x78bb, 0x78bd, 0x78bf, 0x78c7, 0x78c8, 0x78c9, 0x78cc, 0x78ce, 0x78d2, 0x78d3, 0x78d5, 0x78d6, 0x78e4, 0x78db, 0x78df, 0x78e0, 0x78e1, 0x78e6, 0x78ea, 0x78f2, 0x78f3, 0x7900, 0x78f6, 0x78f7, 0x78fa, 0x78fb, 0x78ff, 0x7906, 0x790c, 0x7910, 0x791a, 0x791c, 0x791e, 0x791f, 0x7920, 0x7925, 0x7927, 0x7929, 0x792d, 0x7931, 0x7934, 0x7935, 0x793b, 0x793d, 0x793f, 0x7944, 0x7945, 0x7946, 0x794a, 0x794b, 0x794f, 0x7951, 0x7954, 0x7958, 0x795b, 0x795c, 0x7967, 0x7969, 0x796b, 0x7972, 0x7979, 0x797b, 0x797c, 0x797e, 0x798b, 0x798c, 0x7991, 0x7993, 0x7994, 0x7995, 0x7996, 0x7998, 0x799b, 0x799c, 0x79a1, 0x79a8, 0x79a9, 0x79ab, 0x79af, 0x79b1, 0x79b4, 0x79b8, 0x79bb, 0x79c2, 0x79c4, 0x79c7, 0x79c8, 0x79ca, 0x79cf, 0x79d4, 0x79d6, 0x79da, 0x79dd, 0x79de, /* 0x51 */ 0x79e0, 0x79e2, 0x79e5, 0x79ea, 0x79eb, 0x79ed, 0x79f1, 0x79f8, 0x79fc, 0x7a02, 0x7a03, 0x7a07, 0x7a09, 0x7a0a, 0x7a0c, 0x7a11, 0x7a15, 0x7a1b, 0x7a1e, 0x7a21, 0x7a27, 0x7a2b, 0x7a2d, 0x7a2f, 0x7a30, 0x7a34, 0x7a35, 0x7a38, 0x7a39, 0x7a3a, 0x7a44, 0x7a45, 0x7a47, 0x7a48, 0x7a4c, 0x7a55, 0x7a56, 0x7a59, 0x7a5c, 0x7a5d, 0x7a5f, 0x7a60, 0x7a65, 0x7a67, 0x7a6a, 0x7a6d, 0x7a75, 0x7a78, 0x7a7e, 0x7a80, 0x7a82, 0x7a85, 0x7a86, 0x7a8a, 0x7a8b, 0x7a90, 0x7a91, 0x7a94, 0x7a9e, 0x7aa0, 0x7aa3, 0x7aac, 0x7ab3, 0x7ab5, 0x7ab9, 0x7abb, 0x7abc, 0x7ac6, 0x7ac9, 0x7acc, 0x7ace, 0x7ad1, 0x7adb, 0x7ae8, 0x7ae9, 0x7aeb, 0x7aec, 0x7af1, 0x7af4, 0x7afb, 0x7afd, 0x7afe, 0x7b07, 0x7b14, 0x7b1f, 0x7b23, 0x7b27, 0x7b29, 0x7b2a, 0x7b2b, 0x7b2d, 0x7b2e, 0x7b2f, 0x7b30, /* 0x52 */ 0x7b31, 0x7b34, 0x7b3d, 0x7b3f, 0x7b40, 0x7b41, 0x7b47, 0x7b4e, 0x7b55, 0x7b60, 0x7b64, 0x7b66, 0x7b69, 0x7b6a, 0x7b6d, 0x7b6f, 0x7b72, 0x7b73, 0x7b77, 0x7b84, 0x7b89, 0x7b8e, 0x7b90, 0x7b91, 0x7b96, 0x7b9b, 0x7b9e, 0x7ba0, 0x7ba5, 0x7bac, 0x7baf, 0x7bb0, 0x7bb2, 0x7bb5, 0x7bb6, 0x7bba, 0x7bbb, 0x7bbc, 0x7bbd, 0x7bc2, 0x7bc5, 0x7bc8, 0x7bca, 0x7bd4, 0x7bd6, 0x7bd7, 0x7bd9, 0x7bda, 0x7bdb, 0x7be8, 0x7bea, 0x7bf2, 0x7bf4, 0x7bf5, 0x7bf8, 0x7bf9, 0x7bfa, 0x7bfc, 0x7bfe, 0x7c01, 0x7c02, 0x7c03, 0x7c04, 0x7c06, 0x7c09, 0x7c0b, 0x7c0c, 0x7c0e, 0x7c0f, 0x7c19, 0x7c1b, 0x7c20, 0x7c25, 0x7c26, 0x7c28, 0x7c2c, 0x7c31, 0x7c33, 0x7c34, 0x7c36, 0x7c39, 0x7c3a, 0x7c46, 0x7c4a, 0x7c55, 0x7c51, 0x7c52, 0x7c53, 0x7c59, 0x7c5a, 0x7c5b, 0x7c5c, 0x7c5d, 0x7c5e, /* 0x53 */ 0x7c61, 0x7c63, 0x7c67, 0x7c69, 0x7c6d, 0x7c6e, 0x7c70, 0x7c72, 0x7c79, 0x7c7c, 0x7c7d, 0x7c86, 0x7c87, 0x7c8f, 0x7c94, 0x7c9e, 0x7ca0, 0x7ca6, 0x7cb0, 0x7cb6, 0x7cb7, 0x7cba, 0x7cbb, 0x7cbc, 0x7cbf, 0x7cc4, 0x7cc7, 0x7cc8, 0x7cc9, 0x7ccd, 0x7ccf, 0x7cd3, 0x7cd4, 0x7cd5, 0x7cd7, 0x7cd9, 0x7cda, 0x7cdd, 0x7ce6, 0x7ce9, 0x7ceb, 0x7cf5, 0x7d03, 0x7d07, 0x7d08, 0x7d09, 0x7d0f, 0x7d11, 0x7d12, 0x7d13, 0x7d16, 0x7d1d, 0x7d1e, 0x7d23, 0x7d26, 0x7d2a, 0x7d2d, 0x7d31, 0x7d3c, 0x7d3d, 0x7d3e, 0x7d40, 0x7d41, 0x7d47, 0x7d48, 0x7d4d, 0x7d51, 0x7d53, 0x7d57, 0x7d59, 0x7d5a, 0x7d5c, 0x7d5d, 0x7d65, 0x7d67, 0x7d6a, 0x7d70, 0x7d78, 0x7d7a, 0x7d7b, 0x7d7f, 0x7d81, 0x7d82, 0x7d83, 0x7d85, 0x7d86, 0x7d88, 0x7d8b, 0x7d8c, 0x7d8d, 0x7d91, 0x7d96, 0x7d97, 0x7d9d, /* 0x54 */ 0x7d9e, 0x7da6, 0x7da7, 0x7daa, 0x7db3, 0x7db6, 0x7db7, 0x7db9, 0x7dc2, 0x7dc3, 0x7dc4, 0x7dc5, 0x7dc6, 0x7dcc, 0x7dcd, 0x7dce, 0x7dd7, 0x7dd9, 0x7e00, 0x7de2, 0x7de5, 0x7de6, 0x7dea, 0x7deb, 0x7ded, 0x7df1, 0x7df5, 0x7df6, 0x7df9, 0x7dfa, 0x7e08, 0x7e10, 0x7e11, 0x7e15, 0x7e17, 0x7e1c, 0x7e1d, 0x7e20, 0x7e27, 0x7e28, 0x7e2c, 0x7e2d, 0x7e2f, 0x7e33, 0x7e36, 0x7e3f, 0x7e44, 0x7e45, 0x7e47, 0x7e4e, 0x7e50, 0x7e52, 0x7e58, 0x7e5f, 0x7e61, 0x7e62, 0x7e65, 0x7e6b, 0x7e6e, 0x7e6f, 0x7e73, 0x7e78, 0x7e7e, 0x7e81, 0x7e86, 0x7e87, 0x7e8a, 0x7e8d, 0x7e91, 0x7e95, 0x7e98, 0x7e9a, 0x7e9d, 0x7e9e, 0x7f3c, 0x7f3b, 0x7f3d, 0x7f3e, 0x7f3f, 0x7f43, 0x7f44, 0x7f47, 0x7f4f, 0x7f52, 0x7f53, 0x7f5b, 0x7f5c, 0x7f5d, 0x7f61, 0x7f63, 0x7f64, 0x7f65, 0x7f66, 0x7f6d, /* 0x55 */ 0x7f71, 0x7f7d, 0x7f7e, 0x7f7f, 0x7f80, 0x7f8b, 0x7f8d, 0x7f8f, 0x7f90, 0x7f91, 0x7f96, 0x7f97, 0x7f9c, 0x7fa1, 0x7fa2, 0x7fa6, 0x7faa, 0x7fad, 0x7fb4, 0x7fbc, 0x7fbf, 0x7fc0, 0x7fc3, 0x7fc8, 0x7fce, 0x7fcf, 0x7fdb, 0x7fdf, 0x7fe3, 0x7fe5, 0x7fe8, 0x7fec, 0x7fee, 0x7fef, 0x7ff2, 0x7ffa, 0x7ffd, 0x7ffe, 0x7fff, 0x8007, 0x8008, 0x800a, 0x800d, 0x800e, 0x800f, 0x8011, 0x8013, 0x8014, 0x8016, 0x801d, 0x801e, 0x801f, 0x8020, 0x8024, 0x8026, 0x802c, 0x802e, 0x8030, 0x8034, 0x8035, 0x8037, 0x8039, 0x803a, 0x803c, 0x803e, 0x8040, 0x8044, 0x8060, 0x8064, 0x8066, 0x806d, 0x8071, 0x8075, 0x8081, 0x8088, 0x808e, 0x809c, 0x809e, 0x80a6, 0x80a7, 0x80ab, 0x80b8, 0x80b9, 0x80c8, 0x80cd, 0x80cf, 0x80d2, 0x80d4, 0x80d5, 0x80d7, 0x80d8, 0x80e0, 0x80ed, 0x80ee, /* 0x56 */ 0x80f0, 0x80f2, 0x80f3, 0x80f6, 0x80f9, 0x80fa, 0x80fe, 0x8103, 0x810b, 0x8116, 0x8117, 0x8118, 0x811c, 0x811e, 0x8120, 0x8124, 0x8127, 0x812c, 0x8130, 0x8135, 0x813a, 0x813c, 0x8145, 0x8147, 0x814a, 0x814c, 0x8152, 0x8157, 0x8160, 0x8161, 0x8167, 0x8168, 0x8169, 0x816d, 0x816f, 0x8177, 0x8181, 0x8190, 0x8184, 0x8185, 0x8186, 0x818b, 0x818e, 0x8196, 0x8198, 0x819b, 0x819e, 0x81a2, 0x81ae, 0x81b2, 0x81b4, 0x81bb, 0x81cb, 0x81c3, 0x81c5, 0x81ca, 0x81ce, 0x81cf, 0x81d5, 0x81d7, 0x81db, 0x81dd, 0x81de, 0x81e1, 0x81e4, 0x81eb, 0x81ec, 0x81f0, 0x81f1, 0x81f2, 0x81f5, 0x81f6, 0x81f8, 0x81f9, 0x81fd, 0x81ff, 0x8200, 0x8203, 0x820f, 0x8213, 0x8214, 0x8219, 0x821a, 0x821d, 0x8221, 0x8222, 0x8228, 0x8232, 0x8234, 0x823a, 0x8243, 0x8244, 0x8245, 0x8246, /* 0x57 */ 0x824b, 0x824e, 0x824f, 0x8251, 0x8256, 0x825c, 0x8260, 0x8263, 0x8267, 0x826d, 0x8274, 0x827b, 0x827d, 0x827f, 0x8280, 0x8281, 0x8283, 0x8284, 0x8287, 0x8289, 0x828a, 0x828e, 0x8291, 0x8294, 0x8296, 0x8298, 0x829a, 0x829b, 0x82a0, 0x82a1, 0x82a3, 0x82a4, 0x82a7, 0x82a8, 0x82a9, 0x82aa, 0x82ae, 0x82b0, 0x82b2, 0x82b4, 0x82b7, 0x82ba, 0x82bc, 0x82be, 0x82bf, 0x82c6, 0x82d0, 0x82d5, 0x82da, 0x82e0, 0x82e2, 0x82e4, 0x82e8, 0x82ea, 0x82ed, 0x82ef, 0x82f6, 0x82f7, 0x82fd, 0x82fe, 0x8300, 0x8301, 0x8307, 0x8308, 0x830a, 0x830b, 0x8354, 0x831b, 0x831d, 0x831e, 0x831f, 0x8321, 0x8322, 0x832c, 0x832d, 0x832e, 0x8330, 0x8333, 0x8337, 0x833a, 0x833c, 0x833d, 0x8342, 0x8343, 0x8344, 0x8347, 0x834d, 0x834e, 0x8351, 0x8355, 0x8356, 0x8357, 0x8370, 0x8378, /* 0x58 */ 0x837d, 0x837f, 0x8380, 0x8382, 0x8384, 0x8386, 0x838d, 0x8392, 0x8394, 0x8395, 0x8398, 0x8399, 0x839b, 0x839c, 0x839d, 0x83a6, 0x83a7, 0x83a9, 0x83ac, 0x83be, 0x83bf, 0x83c0, 0x83c7, 0x83c9, 0x83cf, 0x83d0, 0x83d1, 0x83d4, 0x83dd, 0x8353, 0x83e8, 0x83ea, 0x83f6, 0x83f8, 0x83f9, 0x83fc, 0x8401, 0x8406, 0x840a, 0x840f, 0x8411, 0x8415, 0x8419, 0x83ad, 0x842f, 0x8439, 0x8445, 0x8447, 0x8448, 0x844a, 0x844d, 0x844f, 0x8451, 0x8452, 0x8456, 0x8458, 0x8459, 0x845a, 0x845c, 0x8460, 0x8464, 0x8465, 0x8467, 0x846a, 0x8470, 0x8473, 0x8474, 0x8476, 0x8478, 0x847c, 0x847d, 0x8481, 0x8485, 0x8492, 0x8493, 0x8495, 0x849e, 0x84a6, 0x84a8, 0x84a9, 0x84aa, 0x84af, 0x84b1, 0x84b4, 0x84ba, 0x84bd, 0x84be, 0x84c0, 0x84c2, 0x84c7, 0x84c8, 0x84cc, 0x84cf, 0x84d3, /* 0x59 */ 0x84dc, 0x84e7, 0x84ea, 0x84ef, 0x84f0, 0x84f1, 0x84f2, 0x84f7, 0x8532, 0x84fa, 0x84fb, 0x84fd, 0x8502, 0x8503, 0x8507, 0x850c, 0x850e, 0x8510, 0x851c, 0x851e, 0x8522, 0x8523, 0x8524, 0x8525, 0x8527, 0x852a, 0x852b, 0x852f, 0x8533, 0x8534, 0x8536, 0x853f, 0x8546, 0x854f, 0x8550, 0x8551, 0x8552, 0x8553, 0x8556, 0x8559, 0x855c, 0x855d, 0x855e, 0x855f, 0x8560, 0x8561, 0x8562, 0x8564, 0x856b, 0x856f, 0x8579, 0x857a, 0x857b, 0x857d, 0x857f, 0x8581, 0x8585, 0x8586, 0x8589, 0x858b, 0x858c, 0x858f, 0x8593, 0x8598, 0x859d, 0x859f, 0x85a0, 0x85a2, 0x85a5, 0x85a7, 0x85b4, 0x85b6, 0x85b7, 0x85b8, 0x85bc, 0x85bd, 0x85be, 0x85bf, 0x85c2, 0x85c7, 0x85ca, 0x85cb, 0x85ce, 0x85ad, 0x85d8, 0x85da, 0x85df, 0x85e0, 0x85e6, 0x85e8, 0x85ed, 0x85f3, 0x85f6, 0x85fc, /* 0x5a */ 0x85ff, 0x8600, 0x8604, 0x8605, 0x860d, 0x860e, 0x8610, 0x8611, 0x8612, 0x8618, 0x8619, 0x861b, 0x861e, 0x8621, 0x8627, 0x8629, 0x8636, 0x8638, 0x863a, 0x863c, 0x863d, 0x8640, 0x8642, 0x8646, 0x8652, 0x8653, 0x8656, 0x8657, 0x8658, 0x8659, 0x865d, 0x8660, 0x8661, 0x8662, 0x8663, 0x8664, 0x8669, 0x866c, 0x866f, 0x8675, 0x8676, 0x8677, 0x867a, 0x868d, 0x8691, 0x8696, 0x8698, 0x869a, 0x869c, 0x86a1, 0x86a6, 0x86a7, 0x86a8, 0x86ad, 0x86b1, 0x86b3, 0x86b4, 0x86b5, 0x86b7, 0x86b8, 0x86b9, 0x86bf, 0x86c0, 0x86c1, 0x86c3, 0x86c5, 0x86d1, 0x86d2, 0x86d5, 0x86d7, 0x86da, 0x86dc, 0x86e0, 0x86e3, 0x86e5, 0x86e7, 0x8688, 0x86fa, 0x86fc, 0x86fd, 0x8704, 0x8705, 0x8707, 0x870b, 0x870e, 0x870f, 0x8710, 0x8713, 0x8714, 0x8719, 0x871e, 0x871f, 0x8721, 0x8723, /* 0x5b */ 0x8728, 0x872e, 0x872f, 0x8731, 0x8732, 0x8739, 0x873a, 0x873c, 0x873d, 0x873e, 0x8740, 0x8743, 0x8745, 0x874d, 0x8758, 0x875d, 0x8761, 0x8764, 0x8765, 0x876f, 0x8771, 0x8772, 0x877b, 0x8783, 0x8784, 0x8785, 0x8786, 0x8787, 0x8788, 0x8789, 0x878b, 0x878c, 0x8790, 0x8793, 0x8795, 0x8797, 0x8798, 0x8799, 0x879e, 0x87a0, 0x87a3, 0x87a7, 0x87ac, 0x87ad, 0x87ae, 0x87b1, 0x87b5, 0x87be, 0x87bf, 0x87c1, 0x87c8, 0x87c9, 0x87ca, 0x87ce, 0x87d5, 0x87d6, 0x87d9, 0x87da, 0x87dc, 0x87df, 0x87e2, 0x87e3, 0x87e4, 0x87ea, 0x87eb, 0x87ed, 0x87f1, 0x87f3, 0x87f8, 0x87fa, 0x87ff, 0x8801, 0x8803, 0x8806, 0x8809, 0x880a, 0x880b, 0x8810, 0x8819, 0x8812, 0x8813, 0x8814, 0x8818, 0x881a, 0x881b, 0x881c, 0x881e, 0x881f, 0x8828, 0x882d, 0x882e, 0x8830, 0x8832, 0x8835, /* 0x5c */ 0x883a, 0x883c, 0x8841, 0x8843, 0x8845, 0x8848, 0x8849, 0x884a, 0x884b, 0x884e, 0x8851, 0x8855, 0x8856, 0x8858, 0x885a, 0x885c, 0x885f, 0x8860, 0x8864, 0x8869, 0x8871, 0x8879, 0x887b, 0x8880, 0x8898, 0x889a, 0x889b, 0x889c, 0x889f, 0x88a0, 0x88a8, 0x88aa, 0x88ba, 0x88bd, 0x88be, 0x88c0, 0x88ca, 0x88cb, 0x88cc, 0x88cd, 0x88ce, 0x88d1, 0x88d2, 0x88d3, 0x88db, 0x88de, 0x88e7, 0x88ef, 0x88f0, 0x88f1, 0x88f5, 0x88f7, 0x8901, 0x8906, 0x890d, 0x890e, 0x890f, 0x8915, 0x8916, 0x8918, 0x8919, 0x891a, 0x891c, 0x8920, 0x8926, 0x8927, 0x8928, 0x8930, 0x8931, 0x8932, 0x8935, 0x8939, 0x893a, 0x893e, 0x8940, 0x8942, 0x8945, 0x8946, 0x8949, 0x894f, 0x8952, 0x8957, 0x895a, 0x895b, 0x895c, 0x8961, 0x8962, 0x8963, 0x896b, 0x896e, 0x8970, 0x8973, 0x8975, 0x897a, /* 0x5d */ 0x897b, 0x897c, 0x897d, 0x8989, 0x898d, 0x8990, 0x8994, 0x8995, 0x899b, 0x899c, 0x899f, 0x89a0, 0x89a5, 0x89b0, 0x89b4, 0x89b5, 0x89b6, 0x89b7, 0x89bc, 0x89d4, 0x89d5, 0x89d6, 0x89d7, 0x89d8, 0x89e5, 0x89e9, 0x89eb, 0x89ed, 0x89f1, 0x89f3, 0x89f6, 0x89f9, 0x89fd, 0x89ff, 0x8a04, 0x8a05, 0x8a07, 0x8a0f, 0x8a11, 0x8a12, 0x8a14, 0x8a15, 0x8a1e, 0x8a20, 0x8a22, 0x8a24, 0x8a26, 0x8a2b, 0x8a2c, 0x8a2f, 0x8a35, 0x8a37, 0x8a3d, 0x8a3e, 0x8a40, 0x8a43, 0x8a45, 0x8a47, 0x8a49, 0x8a4d, 0x8a4e, 0x8a53, 0x8a56, 0x8a57, 0x8a58, 0x8a5c, 0x8a5d, 0x8a61, 0x8a65, 0x8a67, 0x8a75, 0x8a76, 0x8a77, 0x8a79, 0x8a7a, 0x8a7b, 0x8a7e, 0x8a7f, 0x8a80, 0x8a83, 0x8a86, 0x8a8b, 0x8a8f, 0x8a90, 0x8a92, 0x8a96, 0x8a97, 0x8a99, 0x8a9f, 0x8aa7, 0x8aa9, 0x8aae, 0x8aaf, 0x8ab3, /* 0x5e */ 0x8ab6, 0x8ab7, 0x8abb, 0x8abe, 0x8ac3, 0x8ac6, 0x8ac8, 0x8ac9, 0x8aca, 0x8ad1, 0x8ad3, 0x8ad4, 0x8ad5, 0x8ad7, 0x8add, 0x8adf, 0x8aec, 0x8af0, 0x8af4, 0x8af5, 0x8af6, 0x8afc, 0x8aff, 0x8b05, 0x8b06, 0x8b0b, 0x8b11, 0x8b1c, 0x8b1e, 0x8b1f, 0x8b0a, 0x8b2d, 0x8b30, 0x8b37, 0x8b3c, 0x8b42, 0x8b43, 0x8b44, 0x8b45, 0x8b46, 0x8b48, 0x8b52, 0x8b53, 0x8b54, 0x8b59, 0x8b4d, 0x8b5e, 0x8b63, 0x8b6d, 0x8b76, 0x8b78, 0x8b79, 0x8b7c, 0x8b7e, 0x8b81, 0x8b84, 0x8b85, 0x8b8b, 0x8b8d, 0x8b8f, 0x8b94, 0x8b95, 0x8b9c, 0x8b9e, 0x8b9f, 0x8c38, 0x8c39, 0x8c3d, 0x8c3e, 0x8c45, 0x8c47, 0x8c49, 0x8c4b, 0x8c4f, 0x8c51, 0x8c53, 0x8c54, 0x8c57, 0x8c58, 0x8c5b, 0x8c5d, 0x8c59, 0x8c63, 0x8c64, 0x8c66, 0x8c68, 0x8c69, 0x8c6d, 0x8c73, 0x8c75, 0x8c76, 0x8c7b, 0x8c7e, 0x8c86, /* 0x5f */ 0x8c87, 0x8c8b, 0x8c90, 0x8c92, 0x8c93, 0x8c99, 0x8c9b, 0x8c9c, 0x8ca4, 0x8cb9, 0x8cba, 0x8cc5, 0x8cc6, 0x8cc9, 0x8ccb, 0x8ccf, 0x8cd6, 0x8cd5, 0x8cd9, 0x8cdd, 0x8ce1, 0x8ce8, 0x8cec, 0x8cef, 0x8cf0, 0x8cf2, 0x8cf5, 0x8cf7, 0x8cf8, 0x8cfe, 0x8cff, 0x8d01, 0x8d03, 0x8d09, 0x8d12, 0x8d17, 0x8d1b, 0x8d65, 0x8d69, 0x8d6c, 0x8d6e, 0x8d7f, 0x8d82, 0x8d84, 0x8d88, 0x8d8d, 0x8d90, 0x8d91, 0x8d95, 0x8d9e, 0x8d9f, 0x8da0, 0x8da6, 0x8dab, 0x8dac, 0x8daf, 0x8db2, 0x8db5, 0x8db7, 0x8db9, 0x8dbb, 0x8dc0, 0x8dc5, 0x8dc6, 0x8dc7, 0x8dc8, 0x8dca, 0x8dce, 0x8dd1, 0x8dd4, 0x8dd5, 0x8dd7, 0x8dd9, 0x8de4, 0x8de5, 0x8de7, 0x8dec, 0x8df0, 0x8dbc, 0x8df1, 0x8df2, 0x8df4, 0x8dfd, 0x8e01, 0x8e04, 0x8e05, 0x8e06, 0x8e0b, 0x8e11, 0x8e14, 0x8e16, 0x8e20, 0x8e21, 0x8e22, /* 0x60 */ 0x8e23, 0x8e26, 0x8e27, 0x8e31, 0x8e33, 0x8e36, 0x8e37, 0x8e38, 0x8e39, 0x8e3d, 0x8e40, 0x8e41, 0x8e4b, 0x8e4d, 0x8e4e, 0x8e4f, 0x8e54, 0x8e5b, 0x8e5c, 0x8e5d, 0x8e5e, 0x8e61, 0x8e62, 0x8e69, 0x8e6c, 0x8e6d, 0x8e6f, 0x8e70, 0x8e71, 0x8e79, 0x8e7a, 0x8e7b, 0x8e82, 0x8e83, 0x8e89, 0x8e90, 0x8e92, 0x8e95, 0x8e9a, 0x8e9b, 0x8e9d, 0x8e9e, 0x8ea2, 0x8ea7, 0x8ea9, 0x8ead, 0x8eae, 0x8eb3, 0x8eb5, 0x8eba, 0x8ebb, 0x8ec0, 0x8ec1, 0x8ec3, 0x8ec4, 0x8ec7, 0x8ecf, 0x8ed1, 0x8ed4, 0x8edc, 0x8ee8, 0x8eee, 0x8ef0, 0x8ef1, 0x8ef7, 0x8ef9, 0x8efa, 0x8eed, 0x8f00, 0x8f02, 0x8f07, 0x8f08, 0x8f0f, 0x8f10, 0x8f16, 0x8f17, 0x8f18, 0x8f1e, 0x8f20, 0x8f21, 0x8f23, 0x8f25, 0x8f27, 0x8f28, 0x8f2c, 0x8f2d, 0x8f2e, 0x8f34, 0x8f35, 0x8f36, 0x8f37, 0x8f3a, 0x8f40, 0x8f41, /* 0x61 */ 0x8f43, 0x8f47, 0x8f4f, 0x8f51, 0x8f52, 0x8f53, 0x8f54, 0x8f55, 0x8f58, 0x8f5d, 0x8f5e, 0x8f65, 0x8f9d, 0x8fa0, 0x8fa1, 0x8fa4, 0x8fa5, 0x8fa6, 0x8fb5, 0x8fb6, 0x8fb8, 0x8fbe, 0x8fc0, 0x8fc1, 0x8fc6, 0x8fca, 0x8fcb, 0x8fcd, 0x8fd0, 0x8fd2, 0x8fd3, 0x8fd5, 0x8fe0, 0x8fe3, 0x8fe4, 0x8fe8, 0x8fee, 0x8ff1, 0x8ff5, 0x8ff6, 0x8ffb, 0x8ffe, 0x9002, 0x9004, 0x9008, 0x900c, 0x9018, 0x901b, 0x9028, 0x9029, 0x902f, 0x902a, 0x902c, 0x902d, 0x9033, 0x9034, 0x9037, 0x903f, 0x9043, 0x9044, 0x904c, 0x905b, 0x905d, 0x9062, 0x9066, 0x9067, 0x906c, 0x9070, 0x9074, 0x9079, 0x9085, 0x9088, 0x908b, 0x908c, 0x908e, 0x9090, 0x9095, 0x9097, 0x9098, 0x9099, 0x909b, 0x90a0, 0x90a1, 0x90a2, 0x90a5, 0x90b0, 0x90b2, 0x90b3, 0x90b4, 0x90b6, 0x90bd, 0x90cc, 0x90be, 0x90c3, /* 0x62 */ 0x90c4, 0x90c5, 0x90c7, 0x90c8, 0x90d5, 0x90d7, 0x90d8, 0x90d9, 0x90dc, 0x90dd, 0x90df, 0x90e5, 0x90d2, 0x90f6, 0x90eb, 0x90ef, 0x90f0, 0x90f4, 0x90fe, 0x90ff, 0x9100, 0x9104, 0x9105, 0x9106, 0x9108, 0x910d, 0x9110, 0x9114, 0x9116, 0x9117, 0x9118, 0x911a, 0x911c, 0x911e, 0x9120, 0x9125, 0x9122, 0x9123, 0x9127, 0x9129, 0x912e, 0x912f, 0x9131, 0x9134, 0x9136, 0x9137, 0x9139, 0x913a, 0x913c, 0x913d, 0x9143, 0x9147, 0x9148, 0x914f, 0x9153, 0x9157, 0x9159, 0x915a, 0x915b, 0x9161, 0x9164, 0x9167, 0x916d, 0x9174, 0x9179, 0x917a, 0x917b, 0x9181, 0x9183, 0x9185, 0x9186, 0x918a, 0x918e, 0x9191, 0x9193, 0x9194, 0x9195, 0x9198, 0x919e, 0x91a1, 0x91a6, 0x91a8, 0x91ac, 0x91ad, 0x91ae, 0x91b0, 0x91b1, 0x91b2, 0x91b3, 0x91b6, 0x91bb, 0x91bc, 0x91bd, 0x91bf, /* 0x63 */ 0x91c2, 0x91c3, 0x91c5, 0x91d3, 0x91d4, 0x91d7, 0x91d9, 0x91da, 0x91de, 0x91e4, 0x91e5, 0x91e9, 0x91ea, 0x91ec, 0x91ed, 0x91ee, 0x91ef, 0x91f0, 0x91f1, 0x91f7, 0x91f9, 0x91fb, 0x91fd, 0x9200, 0x9201, 0x9204, 0x9205, 0x9206, 0x9207, 0x9209, 0x920a, 0x920c, 0x9210, 0x9212, 0x9213, 0x9216, 0x9218, 0x921c, 0x921d, 0x9223, 0x9224, 0x9225, 0x9226, 0x9228, 0x922e, 0x922f, 0x9230, 0x9233, 0x9235, 0x9236, 0x9238, 0x9239, 0x923a, 0x923c, 0x923e, 0x9240, 0x9242, 0x9243, 0x9246, 0x9247, 0x924a, 0x924d, 0x924e, 0x924f, 0x9251, 0x9258, 0x9259, 0x925c, 0x925d, 0x9260, 0x9261, 0x9265, 0x9267, 0x9268, 0x9269, 0x926e, 0x926f, 0x9270, 0x9275, 0x9276, 0x9277, 0x9278, 0x9279, 0x927b, 0x927c, 0x927d, 0x927f, 0x9288, 0x9289, 0x928a, 0x928d, 0x928e, 0x9292, 0x9297, /* 0x64 */ 0x9299, 0x929f, 0x92a0, 0x92a4, 0x92a5, 0x92a7, 0x92a8, 0x92ab, 0x92af, 0x92b2, 0x92b6, 0x92b8, 0x92ba, 0x92bb, 0x92bc, 0x92bd, 0x92bf, 0x92c0, 0x92c1, 0x92c2, 0x92c3, 0x92c5, 0x92c6, 0x92c7, 0x92c8, 0x92cb, 0x92cc, 0x92cd, 0x92ce, 0x92d0, 0x92d3, 0x92d5, 0x92d7, 0x92d8, 0x92d9, 0x92dc, 0x92dd, 0x92df, 0x92e0, 0x92e1, 0x92e3, 0x92e5, 0x92e7, 0x92e8, 0x92ec, 0x92ee, 0x92f0, 0x92f9, 0x92fb, 0x92ff, 0x9300, 0x9302, 0x9308, 0x930d, 0x9311, 0x9314, 0x9315, 0x931c, 0x931d, 0x931e, 0x931f, 0x9321, 0x9324, 0x9325, 0x9327, 0x9329, 0x932a, 0x9333, 0x9334, 0x9336, 0x9337, 0x9347, 0x9348, 0x9349, 0x9350, 0x9351, 0x9352, 0x9355, 0x9357, 0x9358, 0x935a, 0x935e, 0x9364, 0x9365, 0x9367, 0x9369, 0x936a, 0x936d, 0x936f, 0x9370, 0x9371, 0x9373, 0x9374, 0x9376, /* 0x65 */ 0x937a, 0x937d, 0x937f, 0x9380, 0x9381, 0x9382, 0x9388, 0x938a, 0x938b, 0x938d, 0x938f, 0x9392, 0x9395, 0x9398, 0x939b, 0x939e, 0x93a1, 0x93a3, 0x93a4, 0x93a6, 0x93a8, 0x93ab, 0x93b4, 0x93b5, 0x93b6, 0x93ba, 0x93a9, 0x93c1, 0x93c4, 0x93c5, 0x93c6, 0x93c7, 0x93c9, 0x93ca, 0x93cb, 0x93cc, 0x93cd, 0x93d3, 0x93d9, 0x93dc, 0x93de, 0x93df, 0x93e2, 0x93e6, 0x93e7, 0x93f9, 0x93f7, 0x93f8, 0x93fa, 0x93fb, 0x93fd, 0x9401, 0x9402, 0x9404, 0x9408, 0x9409, 0x940d, 0x940e, 0x940f, 0x9415, 0x9416, 0x9417, 0x941f, 0x942e, 0x942f, 0x9431, 0x9432, 0x9433, 0x9434, 0x943b, 0x943f, 0x943d, 0x9443, 0x9445, 0x9448, 0x944a, 0x944c, 0x9455, 0x9459, 0x945c, 0x945f, 0x9461, 0x9463, 0x9468, 0x946b, 0x946d, 0x946e, 0x946f, 0x9471, 0x9472, 0x9484, 0x9483, 0x9578, 0x9579, /* 0x66 */ 0x957e, 0x9584, 0x9588, 0x958c, 0x958d, 0x958e, 0x959d, 0x959e, 0x959f, 0x95a1, 0x95a6, 0x95a9, 0x95ab, 0x95ac, 0x95b4, 0x95b6, 0x95ba, 0x95bd, 0x95bf, 0x95c6, 0x95c8, 0x95c9, 0x95cb, 0x95d0, 0x95d1, 0x95d2, 0x95d3, 0x95d9, 0x95da, 0x95dd, 0x95de, 0x95df, 0x95e0, 0x95e4, 0x95e6, 0x961d, 0x961e, 0x9622, 0x9624, 0x9625, 0x9626, 0x962c, 0x9631, 0x9633, 0x9637, 0x9638, 0x9639, 0x963a, 0x963c, 0x963d, 0x9641, 0x9652, 0x9654, 0x9656, 0x9657, 0x9658, 0x9661, 0x966e, 0x9674, 0x967b, 0x967c, 0x967e, 0x967f, 0x9681, 0x9682, 0x9683, 0x9684, 0x9689, 0x9691, 0x9696, 0x969a, 0x969d, 0x969f, 0x96a4, 0x96a5, 0x96a6, 0x96a9, 0x96ae, 0x96af, 0x96b3, 0x96ba, 0x96ca, 0x96d2, 0x5db2, 0x96d8, 0x96da, 0x96dd, 0x96de, 0x96df, 0x96e9, 0x96ef, 0x96f1, 0x96fa, 0x9702, /* 0x67 */ 0x9703, 0x9705, 0x9709, 0x971a, 0x971b, 0x971d, 0x9721, 0x9722, 0x9723, 0x9728, 0x9731, 0x9733, 0x9741, 0x9743, 0x974a, 0x974e, 0x974f, 0x9755, 0x9757, 0x9758, 0x975a, 0x975b, 0x9763, 0x9767, 0x976a, 0x976e, 0x9773, 0x9776, 0x9777, 0x9778, 0x977b, 0x977d, 0x977f, 0x9780, 0x9789, 0x9795, 0x9796, 0x9797, 0x9799, 0x979a, 0x979e, 0x979f, 0x97a2, 0x97ac, 0x97ae, 0x97b1, 0x97b2, 0x97b5, 0x97b6, 0x97b8, 0x97b9, 0x97ba, 0x97bc, 0x97be, 0x97bf, 0x97c1, 0x97c4, 0x97c5, 0x97c7, 0x97c9, 0x97ca, 0x97cc, 0x97cd, 0x97ce, 0x97d0, 0x97d1, 0x97d4, 0x97d7, 0x97d8, 0x97d9, 0x97dd, 0x97de, 0x97e0, 0x97db, 0x97e1, 0x97e4, 0x97ef, 0x97f1, 0x97f4, 0x97f7, 0x97f8, 0x97fa, 0x9807, 0x980a, 0x9819, 0x980d, 0x980e, 0x9814, 0x9816, 0x981c, 0x981e, 0x9820, 0x9823, 0x9826, /* 0x68 */ 0x982b, 0x982e, 0x982f, 0x9830, 0x9832, 0x9833, 0x9835, 0x9825, 0x983e, 0x9844, 0x9847, 0x984a, 0x9851, 0x9852, 0x9853, 0x9856, 0x9857, 0x9859, 0x985a, 0x9862, 0x9863, 0x9865, 0x9866, 0x986a, 0x986c, 0x98ab, 0x98ad, 0x98ae, 0x98b0, 0x98b4, 0x98b7, 0x98b8, 0x98ba, 0x98bb, 0x98bf, 0x98c2, 0x98c5, 0x98c8, 0x98cc, 0x98e1, 0x98e3, 0x98e5, 0x98e6, 0x98e7, 0x98ea, 0x98f3, 0x98f6, 0x9902, 0x9907, 0x9908, 0x9911, 0x9915, 0x9916, 0x9917, 0x991a, 0x991b, 0x991c, 0x991f, 0x9922, 0x9926, 0x9927, 0x992b, 0x9931, 0x9932, 0x9933, 0x9934, 0x9935, 0x9939, 0x993a, 0x993b, 0x993c, 0x9940, 0x9941, 0x9946, 0x9947, 0x9948, 0x994d, 0x994e, 0x9954, 0x9958, 0x9959, 0x995b, 0x995c, 0x995e, 0x995f, 0x9960, 0x999b, 0x999d, 0x999f, 0x99a6, 0x99b0, 0x99b1, 0x99b2, 0x99b5, /* 0x69 */ 0x99b9, 0x99ba, 0x99bd, 0x99bf, 0x99c3, 0x99c9, 0x99d3, 0x99d4, 0x99d9, 0x99da, 0x99dc, 0x99de, 0x99e7, 0x99ea, 0x99eb, 0x99ec, 0x99f0, 0x99f4, 0x99f5, 0x99f9, 0x99fd, 0x99fe, 0x9a02, 0x9a03, 0x9a04, 0x9a0b, 0x9a0c, 0x9a10, 0x9a11, 0x9a16, 0x9a1e, 0x9a20, 0x9a22, 0x9a23, 0x9a24, 0x9a27, 0x9a2d, 0x9a2e, 0x9a33, 0x9a35, 0x9a36, 0x9a38, 0x9a47, 0x9a41, 0x9a44, 0x9a4a, 0x9a4b, 0x9a4c, 0x9a4e, 0x9a51, 0x9a54, 0x9a56, 0x9a5d, 0x9aaa, 0x9aac, 0x9aae, 0x9aaf, 0x9ab2, 0x9ab4, 0x9ab5, 0x9ab6, 0x9ab9, 0x9abb, 0x9abe, 0x9abf, 0x9ac1, 0x9ac3, 0x9ac6, 0x9ac8, 0x9ace, 0x9ad0, 0x9ad2, 0x9ad5, 0x9ad6, 0x9ad7, 0x9adb, 0x9adc, 0x9ae0, 0x9ae4, 0x9ae5, 0x9ae7, 0x9ae9, 0x9aec, 0x9af2, 0x9af3, 0x9af5, 0x9af9, 0x9afa, 0x9afd, 0x9aff, 0x9b00, 0x9b01, 0x9b02, 0x9b03, /* 0x6a */ 0x9b04, 0x9b05, 0x9b08, 0x9b09, 0x9b0b, 0x9b0c, 0x9b0d, 0x9b0e, 0x9b10, 0x9b12, 0x9b16, 0x9b19, 0x9b1b, 0x9b1c, 0x9b20, 0x9b26, 0x9b2b, 0x9b2d, 0x9b33, 0x9b34, 0x9b35, 0x9b37, 0x9b39, 0x9b3a, 0x9b3d, 0x9b48, 0x9b4b, 0x9b4c, 0x9b55, 0x9b56, 0x9b57, 0x9b5b, 0x9b5e, 0x9b61, 0x9b63, 0x9b65, 0x9b66, 0x9b68, 0x9b6a, 0x9b6b, 0x9b6c, 0x9b6d, 0x9b6e, 0x9b73, 0x9b75, 0x9b77, 0x9b78, 0x9b79, 0x9b7f, 0x9b80, 0x9b84, 0x9b85, 0x9b86, 0x9b87, 0x9b89, 0x9b8a, 0x9b8b, 0x9b8d, 0x9b8f, 0x9b90, 0x9b94, 0x9b9a, 0x9b9d, 0x9b9e, 0x9ba6, 0x9ba7, 0x9ba9, 0x9bac, 0x9bb0, 0x9bb1, 0x9bb2, 0x9bb7, 0x9bb8, 0x9bbb, 0x9bbc, 0x9bbe, 0x9bbf, 0x9bc1, 0x9bc7, 0x9bc8, 0x9bce, 0x9bd0, 0x9bd7, 0x9bd8, 0x9bdd, 0x9bdf, 0x9be5, 0x9be7, 0x9bea, 0x9beb, 0x9bef, 0x9bf3, 0x9bf7, 0x9bf8, /* 0x6b */ 0x9bf9, 0x9bfa, 0x9bfd, 0x9bff, 0x9c00, 0x9c02, 0x9c0b, 0x9c0f, 0x9c11, 0x9c16, 0x9c18, 0x9c19, 0x9c1a, 0x9c1c, 0x9c1e, 0x9c22, 0x9c23, 0x9c26, 0x9c27, 0x9c28, 0x9c29, 0x9c2a, 0x9c31, 0x9c35, 0x9c36, 0x9c37, 0x9c3d, 0x9c41, 0x9c43, 0x9c44, 0x9c45, 0x9c49, 0x9c4a, 0x9c4e, 0x9c4f, 0x9c50, 0x9c53, 0x9c54, 0x9c56, 0x9c58, 0x9c5b, 0x9c5d, 0x9c5e, 0x9c5f, 0x9c63, 0x9c69, 0x9c6a, 0x9c5c, 0x9c6b, 0x9c68, 0x9c6e, 0x9c70, 0x9c72, 0x9c75, 0x9c77, 0x9c7b, 0x9ce6, 0x9cf2, 0x9cf7, 0x9cf9, 0x9d0b, 0x9d02, 0x9d11, 0x9d17, 0x9d18, 0x9d1c, 0x9d1d, 0x9d1e, 0x9d2f, 0x9d30, 0x9d32, 0x9d33, 0x9d34, 0x9d3a, 0x9d3c, 0x9d45, 0x9d3d, 0x9d42, 0x9d43, 0x9d47, 0x9d4a, 0x9d53, 0x9d54, 0x9d5f, 0x9d63, 0x9d62, 0x9d65, 0x9d69, 0x9d6a, 0x9d6b, 0x9d70, 0x9d76, 0x9d77, 0x9d7b, /* 0x6c */ 0x9d7c, 0x9d7e, 0x9d83, 0x9d84, 0x9d86, 0x9d8a, 0x9d8d, 0x9d8e, 0x9d92, 0x9d93, 0x9d95, 0x9d96, 0x9d97, 0x9d98, 0x9da1, 0x9daa, 0x9dac, 0x9dae, 0x9db1, 0x9db5, 0x9db9, 0x9dbc, 0x9dbf, 0x9dc3, 0x9dc7, 0x9dc9, 0x9dca, 0x9dd4, 0x9dd5, 0x9dd6, 0x9dd7, 0x9dda, 0x9dde, 0x9ddf, 0x9de0, 0x9de5, 0x9de7, 0x9de9, 0x9deb, 0x9dee, 0x9df0, 0x9df3, 0x9df4, 0x9dfe, 0x9e0a, 0x9e02, 0x9e07, 0x9e0e, 0x9e10, 0x9e11, 0x9e12, 0x9e15, 0x9e16, 0x9e19, 0x9e1c, 0x9e1d, 0x9e7a, 0x9e7b, 0x9e7c, 0x9e80, 0x9e82, 0x9e83, 0x9e84, 0x9e85, 0x9e87, 0x9e8e, 0x9e8f, 0x9e96, 0x9e98, 0x9e9b, 0x9e9e, 0x9ea4, 0x9ea8, 0x9eac, 0x9eae, 0x9eaf, 0x9eb0, 0x9eb3, 0x9eb4, 0x9eb5, 0x9ec6, 0x9ec8, 0x9ecb, 0x9ed5, 0x9edf, 0x9ee4, 0x9ee7, 0x9eec, 0x9eed, 0x9eee, 0x9ef0, 0x9ef1, 0x9ef2, 0x9ef5, /* 0x6d */ 0x9ef8, 0x9eff, 0x9f02, 0x9f03, 0x9f09, 0x9f0f, 0x9f10, 0x9f11, 0x9f12, 0x9f14, 0x9f16, 0x9f17, 0x9f19, 0x9f1a, 0x9f1b, 0x9f1f, 0x9f22, 0x9f26, 0x9f2a, 0x9f2b, 0x9f2f, 0x9f31, 0x9f32, 0x9f34, 0x9f37, 0x9f39, 0x9f3a, 0x9f3c, 0x9f3d, 0x9f3f, 0x9f41, 0x9f43, 0x9f44, 0x9f45, 0x9f46, 0x9f47, 0x9f53, 0x9f55, 0x9f56, 0x9f57, 0x9f58, 0x9f5a, 0x9f5d, 0x9f5e, 0x9f68, 0x9f69, 0x9f6d, 0x9f6e, 0x9f6f, 0x9f70, 0x9f71, 0x9f73, 0x9f75, 0x9f7a, 0x9f7d, 0x9f8f, 0x9f90, 0x9f91, 0x9f92, 0x9f94, 0x9f96, 0x9f97, 0x9f9e, 0x9fa1, 0x9fa2, 0x9fa3, 0x9fa5, }; static int jisx0212_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c1 = (s[0] & 0x7F); if ((c1 == 0x22) || (c1 >= 0x26 && c1 <= 0x27) || (c1 >= 0x29 && c1 <= 0x2b) || (c1 >= 0x30 && c1 <= 0x6d)) { if (n >= 2) { unsigned char c2 = (s[1] & 0x7F); if (c2 >= 0x21 && c2 < 0x7f) { unsigned int i = 94 * (c1 - 0x21) + (c2 - 0x21); unsigned short wc = 0xfffd; if (i < 470) { if (i < 175) wc = jisx0212_2uni_page22[i-94]; } else if (i < 752) { if (i < 658) wc = jisx0212_2uni_page26[i-470]; } else if (i < 1410) { if (i < 1027) wc = jisx0212_2uni_page29[i-752]; } else { if (i < 7211) wc = jisx0212_2uni_page30[i-1410]; } if (wc != 0xfffd) { *pwc = (ucs4_t) wc; return 2; } } return RET_ILSEQ; } return RET_TOOFEW(0); } return RET_ILSEQ; } static const unsigned short jisx0212_2charset[6067] = { 0x2237, 0x2242, 0x2270, 0x2243, 0x226d, 0x226c, 0x226e, 0x2234, 0x2231, 0x226b, 0x2244, 0x2a22, 0x2a21, 0x2a24, 0x2a2a, 0x2a23, 0x2a29, 0x2921, 0x2a2e, 0x2a32, 0x2a31, 0x2a34, 0x2a33, 0x2a40, 0x2a3f, 0x2a42, 0x2a41, 0x2a50, 0x2a52, 0x2a51, 0x2a54, 0x2a58, 0x2a53, 0x292c, 0x2a63, 0x2a62, 0x2a65, 0x2a64, 0x2a72, 0x2930, 0x294e, 0x2b22, 0x2b21, 0x2b24, 0x2b2a, 0x2b23, 0x2b29, 0x2941, 0x2b2e, 0x2b32, 0x2b31, 0x2b34, 0x2b33, 0x2b40, 0x2b3f, 0x2b42, 0x2b41, 0x2943, 0x2b50, 0x2b52, 0x2b51, 0x2b54, 0x2b58, 0x2b53, 0x294c, 0x2b63, 0x2b62, 0x2b65, 0x2b64, 0x2b72, 0x2950, 0x2b73, 0x2a27, 0x2b27, 0x2a25, 0x2b25, 0x2a28, 0x2b28, 0x2a2b, 0x2b2b, 0x2a2c, 0x2b2c, 0x2a2f, 0x2b2f, 0x2a2d, 0x2b2d, 0x2a30, 0x2b30, 0x2922, 0x2942, 0x2a37, 0x2b37, 0x2a36, 0x2b36, 0x2a38, 0x2b38, 0x2a35, 0x2b35, 0x2a3a, 0x2b3a, 0x2a3b, 0x2b3b, 0x2a3d, 0x2b3d, 0x2a3c, 0x2a3e, 0x2b3e, 0x2924, 0x2944, 0x2a47, 0x2b47, 0x2a45, 0x2b45, 0x2a46, 0x2b46, 0x2a44, 0x2945, 0x2926, 0x2946, 0x2a48, 0x2b48, 0x2a49, 0x2b49, 0x2947, 0x2a4a, 0x2b4a, 0x2a4c, 0x2b4c, 0x2a4b, 0x2b4b, 0x2929, 0x2949, 0x2928, 0x2948, 0x2a4d, 0x2b4d, 0x2a4f, 0x2b4f, 0x2a4e, 0x2b4e, 0x294a, 0x292b, 0x294b, 0x2a57, 0x2b57, 0x2a56, 0x2b56, 0x292d, 0x294d, 0x2a59, 0x2b59, 0x2a5b, 0x2b5b, 0x2a5a, 0x2b5a, 0x2a5c, 0x2b5c, 0x2a5d, 0x2b5d, 0x2a5f, 0x2b5f, 0x2a5e, 0x2b5e, 0x2a61, 0x2b61, 0x2a60, 0x2b60, 0x292f, 0x294f, 0x2a6c, 0x2b6c, 0x2a69, 0x2b69, 0x2a66, 0x2b66, 0x2a6b, 0x2b6b, 0x2a68, 0x2b68, 0x2a6a, 0x2b6a, 0x2a71, 0x2b71, 0x2a74, 0x2b74, 0x2a73, 0x2a75, 0x2b75, 0x2a77, 0x2b77, 0x2a76, 0x2b76, 0x2a26, 0x2b26, 0x2a43, 0x2b43, 0x2a55, 0x2b55, 0x2a67, 0x2b67, 0x2a70, 0x2b70, 0x2a6d, 0x2b6d, 0x2a6f, 0x2b6f, 0x2a6e, 0x2b6e, 0x2b39, 0x2230, 0x222f, 0x2232, 0x2236, 0x2235, 0x2233, 0x2238, 0x2239, 0x2661, 0x2662, 0x2663, 0x2664, 0x2667, 0x2669, 0x266c, 0x2676, 0x2665, 0x266a, 0x2671, 0x2672, 0x2673, 0x2674, 0x267b, 0x2678, 0x2675, 0x267a, 0x2677, 0x2679, 0x267c, 0x2742, 0x2743, 0x2744, 0x2745, 0x2746, 0x2747, 0x2748, 0x2749, 0x274a, 0x274b, 0x274c, 0x274d, 0x274e, 0x2772, 0x2773, 0x2774, 0x2775, 0x2776, 0x2777, 0x2778, 0x2779, 0x277a, 0x277b, 0x277c, 0x277d, 0x277e, 0x2271, 0x226f, 0x3021, 0x3022, 0x3023, 0x3024, 0x3025, 0x3026, 0x3027, 0x3028, 0x3029, 0x302a, 0x302b, 0x302c, 0x302d, 0x302e, 0x302f, 0x3030, 0x3031, 0x3032, 0x3033, 0x3034, 0x3035, 0x3036, 0x3037, 0x3038, 0x3039, 0x303a, 0x303b, 0x303c, 0x303d, 0x303e, 0x303f, 0x3040, 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048, 0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058, 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, 0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e, 0x306f, 0x3070, 0x305f, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078, 0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e, 0x3121, 0x3122, 0x3123, 0x3124, 0x3125, 0x3126, 0x3127, 0x3128, 0x3129, 0x312a, 0x312b, 0x312c, 0x312d, 0x312e, 0x312f, 0x3130, 0x3131, 0x3132, 0x3133, 0x3134, 0x3135, 0x3136, 0x3137, 0x3138, 0x3139, 0x313a, 0x313b, 0x313c, 0x313d, 0x313e, 0x313f, 0x3140, 0x3141, 0x3142, 0x3143, 0x3144, 0x3145, 0x3146, 0x3147, 0x3148, 0x3149, 0x314a, 0x314b, 0x314c, 0x314d, 0x314e, 0x314f, 0x3150, 0x3151, 0x3152, 0x3153, 0x3154, 0x3155, 0x3156, 0x3157, 0x3158, 0x3159, 0x315a, 0x315b, 0x315c, 0x315d, 0x315e, 0x3176, 0x315f, 0x3160, 0x3161, 0x3162, 0x3163, 0x3164, 0x3165, 0x3166, 0x3167, 0x3168, 0x3169, 0x316a, 0x316b, 0x316c, 0x316d, 0x316e, 0x316f, 0x3170, 0x3171, 0x3172, 0x3173, 0x3174, 0x3175, 0x3177, 0x3178, 0x3179, 0x317a, 0x317b, 0x317c, 0x317d, 0x317e, 0x3221, 0x3222, 0x3223, 0x3224, 0x3225, 0x3226, 0x3227, 0x3228, 0x3229, 0x322a, 0x322b, 0x322c, 0x322d, 0x322e, 0x322f, 0x3230, 0x3231, 0x3232, 0x3233, 0x3234, 0x3235, 0x3236, 0x3237, 0x3238, 0x3239, 0x323a, 0x323b, 0x323c, 0x323d, 0x323e, 0x323f, 0x3240, 0x3241, 0x3242, 0x3243, 0x3244, 0x3245, 0x3251, 0x3246, 0x3247, 0x3248, 0x3249, 0x324a, 0x324b, 0x324c, 0x324d, 0x324e, 0x324f, 0x3250, 0x3252, 0x3253, 0x3254, 0x3255, 0x3256, 0x3257, 0x3258, 0x3259, 0x325a, 0x325b, 0x325c, 0x325d, 0x325e, 0x325f, 0x3260, 0x3261, 0x3262, 0x3263, 0x3264, 0x3265, 0x3266, 0x3267, 0x3268, 0x3269, 0x326a, 0x326b, 0x326c, 0x326d, 0x326e, 0x326f, 0x3270, 0x3271, 0x3272, 0x3273, 0x3274, 0x3275, 0x3276, 0x3277, 0x3278, 0x3279, 0x327a, 0x327b, 0x327c, 0x327d, 0x327e, 0x3321, 0x3322, 0x3323, 0x3324, 0x3325, 0x3326, 0x3327, 0x3328, 0x3329, 0x332a, 0x332b, 0x332c, 0x332d, 0x332e, 0x332f, 0x3330, 0x3331, 0x3332, 0x3333, 0x3334, 0x3335, 0x3336, 0x3337, 0x3338, 0x3339, 0x333a, 0x333b, 0x333c, 0x333d, 0x333e, 0x333f, 0x3340, 0x3341, 0x3342, 0x3343, 0x3344, 0x3345, 0x3346, 0x3347, 0x3348, 0x3349, 0x334a, 0x334b, 0x334c, 0x334d, 0x334e, 0x334f, 0x3350, 0x3351, 0x3352, 0x3353, 0x3354, 0x3355, 0x3356, 0x3357, 0x3358, 0x3359, 0x335a, 0x335b, 0x335c, 0x335d, 0x335e, 0x335f, 0x3360, 0x3361, 0x3362, 0x3363, 0x3364, 0x3365, 0x3366, 0x3367, 0x3368, 0x3369, 0x336a, 0x336b, 0x336c, 0x336d, 0x336e, 0x336f, 0x3370, 0x3371, 0x3372, 0x3373, 0x3374, 0x3375, 0x3376, 0x3377, 0x3378, 0x3379, 0x337a, 0x337b, 0x337c, 0x337d, 0x337e, 0x3421, 0x3422, 0x3423, 0x3424, 0x3425, 0x3426, 0x3427, 0x3428, 0x3429, 0x342a, 0x342b, 0x342c, 0x342d, 0x342e, 0x342f, 0x3430, 0x3431, 0x3432, 0x3433, 0x3434, 0x3435, 0x3436, 0x3438, 0x3437, 0x3439, 0x343a, 0x343b, 0x343c, 0x343d, 0x343e, 0x343f, 0x3440, 0x3441, 0x3442, 0x3443, 0x3444, 0x3445, 0x3446, 0x3447, 0x3448, 0x3449, 0x344a, 0x344b, 0x344c, 0x344d, 0x344e, 0x344f, 0x3450, 0x3451, 0x3452, 0x3453, 0x3454, 0x3455, 0x3456, 0x3457, 0x3458, 0x3459, 0x345a, 0x345b, 0x345c, 0x345d, 0x345e, 0x345f, 0x3460, 0x3461, 0x3462, 0x3463, 0x3464, 0x3465, 0x3466, 0x3467, 0x3468, 0x3469, 0x346a, 0x346b, 0x346c, 0x346d, 0x346e, 0x346f, 0x3470, 0x3471, 0x3472, 0x3473, 0x3474, 0x3475, 0x3476, 0x3477, 0x3478, 0x3479, 0x347a, 0x347b, 0x347c, 0x347d, 0x347e, 0x3521, 0x3522, 0x3523, 0x3524, 0x3525, 0x3526, 0x3527, 0x3528, 0x3529, 0x352a, 0x352b, 0x352c, 0x352d, 0x352e, 0x352f, 0x3530, 0x3531, 0x3532, 0x3533, 0x3534, 0x3535, 0x3536, 0x3537, 0x3538, 0x3539, 0x353a, 0x353b, 0x353c, 0x353d, 0x353e, 0x353f, 0x3540, 0x3541, 0x3542, 0x3543, 0x3544, 0x3545, 0x3546, 0x3547, 0x3548, 0x3549, 0x354a, 0x354b, 0x354c, 0x354d, 0x354e, 0x354f, 0x3550, 0x3551, 0x3552, 0x3553, 0x3554, 0x3555, 0x3556, 0x3557, 0x3558, 0x3559, 0x355a, 0x355b, 0x355c, 0x355d, 0x355e, 0x355f, 0x3560, 0x3561, 0x3562, 0x3563, 0x3564, 0x3565, 0x3566, 0x3567, 0x3568, 0x3569, 0x356a, 0x356b, 0x356c, 0x356d, 0x356e, 0x356f, 0x3570, 0x3571, 0x3572, 0x3573, 0x3574, 0x3575, 0x3576, 0x3577, 0x3578, 0x3579, 0x357a, 0x357b, 0x357c, 0x357d, 0x357e, 0x3621, 0x3622, 0x3623, 0x3624, 0x3625, 0x3626, 0x3627, 0x3628, 0x3629, 0x362a, 0x362b, 0x362c, 0x362d, 0x362e, 0x362f, 0x3630, 0x3631, 0x3632, 0x3633, 0x3634, 0x3635, 0x3636, 0x3637, 0x3638, 0x3639, 0x363a, 0x363b, 0x363c, 0x363d, 0x363e, 0x363f, 0x3640, 0x3641, 0x3642, 0x3643, 0x3644, 0x3645, 0x3646, 0x3647, 0x3648, 0x3649, 0x364a, 0x364b, 0x364c, 0x364d, 0x364e, 0x364f, 0x3650, 0x3651, 0x3652, 0x3653, 0x3654, 0x3655, 0x3656, 0x3657, 0x3658, 0x3659, 0x365a, 0x365b, 0x365c, 0x365d, 0x365e, 0x365f, 0x3660, 0x3661, 0x3662, 0x3663, 0x3664, 0x3665, 0x3666, 0x3667, 0x3668, 0x3669, 0x366a, 0x366b, 0x366c, 0x366d, 0x3670, 0x3671, 0x366e, 0x366f, 0x3672, 0x3673, 0x3674, 0x3675, 0x3676, 0x3677, 0x3678, 0x3679, 0x367a, 0x367b, 0x367d, 0x367e, 0x367c, 0x3721, 0x3722, 0x3723, 0x3724, 0x3725, 0x3726, 0x3727, 0x3728, 0x3729, 0x372a, 0x372b, 0x372c, 0x372d, 0x372e, 0x372f, 0x3730, 0x3731, 0x3732, 0x3733, 0x3734, 0x3735, 0x3736, 0x3737, 0x3738, 0x3739, 0x373a, 0x373b, 0x373c, 0x373d, 0x373e, 0x373f, 0x3740, 0x3741, 0x3742, 0x3743, 0x3744, 0x3745, 0x3746, 0x3747, 0x3748, 0x3749, 0x374a, 0x374b, 0x374c, 0x374d, 0x374e, 0x374f, 0x3750, 0x3751, 0x3752, 0x3753, 0x3754, 0x3755, 0x3756, 0x3757, 0x3760, 0x3758, 0x3759, 0x375a, 0x375b, 0x375c, 0x375d, 0x375e, 0x375f, 0x3761, 0x3762, 0x3763, 0x3764, 0x3765, 0x3766, 0x3767, 0x3768, 0x3769, 0x376a, 0x376b, 0x376c, 0x376d, 0x377e, 0x376e, 0x376f, 0x3770, 0x3771, 0x3772, 0x3773, 0x3774, 0x3775, 0x3776, 0x3777, 0x3778, 0x3779, 0x377a, 0x377b, 0x377c, 0x377d, 0x3821, 0x3822, 0x3823, 0x3824, 0x3825, 0x3826, 0x3827, 0x3828, 0x3829, 0x382a, 0x382b, 0x382c, 0x382d, 0x382e, 0x382f, 0x3830, 0x3831, 0x3832, 0x3833, 0x3834, 0x3835, 0x3836, 0x3837, 0x3838, 0x3839, 0x383a, 0x383b, 0x383c, 0x383d, 0x383e, 0x383f, 0x3840, 0x3841, 0x3842, 0x3843, 0x3844, 0x3845, 0x3846, 0x3847, 0x3848, 0x3849, 0x384a, 0x384b, 0x384c, 0x384d, 0x384e, 0x3850, 0x3851, 0x384f, 0x3852, 0x3853, 0x3854, 0x3855, 0x3856, 0x3857, 0x3858, 0x3859, 0x385a, 0x385b, 0x385c, 0x385d, 0x385e, 0x385f, 0x3860, 0x3861, 0x3862, 0x3863, 0x3864, 0x3865, 0x3867, 0x3868, 0x3869, 0x386a, 0x386b, 0x386c, 0x386d, 0x386e, 0x386f, 0x3870, 0x3871, 0x3872, 0x3873, 0x3874, 0x3875, 0x3876, 0x3877, 0x3878, 0x3879, 0x387a, 0x387b, 0x387c, 0x387d, 0x387e, 0x3921, 0x3922, 0x3923, 0x3924, 0x3925, 0x3926, 0x3927, 0x3928, 0x3929, 0x392a, 0x392b, 0x392c, 0x392d, 0x392e, 0x392f, 0x3930, 0x3931, 0x3932, 0x3933, 0x3934, 0x3935, 0x3936, 0x3937, 0x3938, 0x3939, 0x393a, 0x393b, 0x393c, 0x393d, 0x393e, 0x393f, 0x3940, 0x3941, 0x3942, 0x3943, 0x3944, 0x3945, 0x3946, 0x3947, 0x3948, 0x3949, 0x394a, 0x394b, 0x394c, 0x394d, 0x394e, 0x394f, 0x3950, 0x3951, 0x3952, 0x3953, 0x3954, 0x3955, 0x3956, 0x3957, 0x3958, 0x3959, 0x395a, 0x395b, 0x395c, 0x395d, 0x395e, 0x395f, 0x3960, 0x3961, 0x3962, 0x3963, 0x3964, 0x3965, 0x3966, 0x3967, 0x3968, 0x3969, 0x396a, 0x396b, 0x396c, 0x396d, 0x396e, 0x396f, 0x3970, 0x3971, 0x3972, 0x3973, 0x3974, 0x3975, 0x3976, 0x3977, 0x3978, 0x3979, 0x397a, 0x397b, 0x397c, 0x397d, 0x397e, 0x3a21, 0x3a22, 0x3a23, 0x3a24, 0x3a25, 0x3a26, 0x3a27, 0x3a28, 0x3a29, 0x3a2a, 0x3a2b, 0x3a2c, 0x3a2d, 0x3a2e, 0x3a2f, 0x3a30, 0x3a31, 0x3a33, 0x3a34, 0x3a35, 0x3a36, 0x3a37, 0x3a38, 0x3a32, 0x3a39, 0x3a3a, 0x3a3b, 0x3a3c, 0x3a3d, 0x3a3e, 0x3a3f, 0x3a40, 0x3a41, 0x3a42, 0x3a43, 0x3a44, 0x3a45, 0x3a46, 0x3a47, 0x3a48, 0x3a49, 0x3a4a, 0x3a4b, 0x3a4c, 0x3a4d, 0x3a4e, 0x3a4f, 0x3a50, 0x3a51, 0x3a52, 0x3a53, 0x3a54, 0x3a55, 0x3a56, 0x3a57, 0x3a58, 0x3a59, 0x3a5a, 0x3a5b, 0x3a5c, 0x3a5d, 0x3a5e, 0x3a5f, 0x3a60, 0x3a61, 0x3a62, 0x3a63, 0x3a64, 0x3a65, 0x3a66, 0x3a67, 0x3a68, 0x3a69, 0x3a6a, 0x3a6b, 0x3a6c, 0x3a6d, 0x3a6e, 0x3a6f, 0x3a70, 0x3a71, 0x3a72, 0x3a73, 0x3a74, 0x3a75, 0x3a76, 0x3a77, 0x3a78, 0x3a79, 0x3a7a, 0x3a7b, 0x3a7c, 0x3a7d, 0x3a7e, 0x3b21, 0x3b22, 0x3b23, 0x3b24, 0x3b25, 0x3b26, 0x3b27, 0x3b28, 0x3b29, 0x3b2a, 0x3b2b, 0x3b2c, 0x3b2d, 0x3b2e, 0x3b2f, 0x3b30, 0x3b31, 0x3b32, 0x3b33, 0x3b34, 0x3b35, 0x3b36, 0x3b37, 0x3b38, 0x3b39, 0x3b3a, 0x3b3b, 0x3b3d, 0x3b3c, 0x3b3e, 0x3b3f, 0x3b40, 0x3b41, 0x3b42, 0x3b43, 0x3b44, 0x3b45, 0x3b47, 0x3b48, 0x3b49, 0x3b4a, 0x3b46, 0x3b4b, 0x3b4c, 0x3b4d, 0x3b4e, 0x3b4f, 0x3b50, 0x3b51, 0x3b52, 0x3b53, 0x3b57, 0x3b55, 0x3b54, 0x3b56, 0x3b58, 0x3b59, 0x3b5a, 0x3b5b, 0x3b5c, 0x3b5d, 0x3b5e, 0x3b5f, 0x3b60, 0x3b61, 0x3b62, 0x3b63, 0x3b64, 0x3b65, 0x3b66, 0x3b67, 0x3b68, 0x3b69, 0x3b6a, 0x3b6b, 0x3b6c, 0x3b6d, 0x3b6e, 0x3b6f, 0x3b70, 0x3b71, 0x3b72, 0x6674, 0x3b73, 0x3b74, 0x3b75, 0x3b76, 0x3b77, 0x3b78, 0x3b7a, 0x3b79, 0x3b7b, 0x3b7c, 0x3b7d, 0x3b7e, 0x3c21, 0x3c22, 0x3c23, 0x3c24, 0x3c25, 0x3c26, 0x3c27, 0x3c28, 0x3c29, 0x3c2a, 0x3c2b, 0x3c2c, 0x3c2e, 0x3c2d, 0x3c2f, 0x3c30, 0x3c31, 0x3c34, 0x3c32, 0x3c33, 0x3c35, 0x3c36, 0x3c37, 0x3c38, 0x3c39, 0x3c3a, 0x3c3b, 0x3c3c, 0x3c3d, 0x3c3e, 0x3c3f, 0x3c40, 0x3c41, 0x3c42, 0x3c43, 0x3c44, 0x3c45, 0x3c46, 0x3c47, 0x3c48, 0x3c49, 0x3c4a, 0x3c4b, 0x3c4c, 0x3c4d, 0x3c4e, 0x3c4f, 0x3c50, 0x3c52, 0x3c51, 0x3c53, 0x3c54, 0x3c55, 0x3c56, 0x3c57, 0x3c58, 0x3c59, 0x3c5a, 0x3c5b, 0x3c5c, 0x3c5d, 0x3c5e, 0x3c5f, 0x3c60, 0x3c61, 0x3c62, 0x3c63, 0x3c64, 0x3c65, 0x3c66, 0x3c67, 0x3c68, 0x3c69, 0x3c6a, 0x3c6b, 0x3c6c, 0x3c6d, 0x3c6e, 0x3c6f, 0x3c70, 0x3c71, 0x3c72, 0x3c73, 0x3c74, 0x3c75, 0x3c76, 0x3c77, 0x3c78, 0x3c79, 0x3c7a, 0x3c7b, 0x3c7c, 0x3c7d, 0x3c7e, 0x3d21, 0x3d22, 0x3d23, 0x3d24, 0x3d25, 0x3d26, 0x3d27, 0x3d28, 0x3d29, 0x3d2a, 0x3d2b, 0x3d2c, 0x3d2d, 0x3d2e, 0x3d2f, 0x3d32, 0x3d30, 0x3d31, 0x3d33, 0x3d34, 0x3d35, 0x3d36, 0x3d37, 0x3d38, 0x3d39, 0x3d3a, 0x3d3b, 0x3d3c, 0x3d3d, 0x3d3e, 0x3d3f, 0x3d40, 0x3d41, 0x3d42, 0x3d43, 0x3d44, 0x3d45, 0x3d46, 0x3d47, 0x3d48, 0x3d49, 0x3d4a, 0x3d4b, 0x3d4c, 0x3d4d, 0x3d4e, 0x3d4f, 0x3d50, 0x3d51, 0x3d52, 0x3d53, 0x3d54, 0x3d55, 0x3d56, 0x3d57, 0x3d58, 0x3d59, 0x3d5a, 0x3d5b, 0x3d5c, 0x3d5d, 0x3d5e, 0x3d5f, 0x3d60, 0x3d61, 0x3d62, 0x3d63, 0x3d64, 0x3d65, 0x3d66, 0x3d67, 0x3d68, 0x3d69, 0x3d6a, 0x3d6b, 0x3d6c, 0x3d6d, 0x3d6e, 0x3d6f, 0x3d70, 0x3d71, 0x3d72, 0x3d73, 0x3d74, 0x3d75, 0x3d76, 0x3d77, 0x3d78, 0x3d79, 0x3d7a, 0x3d7b, 0x3d7c, 0x3d7d, 0x3d7e, 0x3e21, 0x3e22, 0x3e23, 0x3e24, 0x3e25, 0x3e26, 0x3e27, 0x3e28, 0x3e29, 0x3e2a, 0x3e2b, 0x3e2c, 0x3e2d, 0x3e2e, 0x3e2f, 0x3e30, 0x3e31, 0x3e32, 0x3e33, 0x3e34, 0x3e35, 0x3e36, 0x3e37, 0x3e38, 0x3e39, 0x3e3a, 0x3e3b, 0x3e3c, 0x3e3d, 0x3e3e, 0x3e3f, 0x3e40, 0x3e41, 0x3e42, 0x3e43, 0x3e44, 0x3e45, 0x3e46, 0x3e47, 0x3e48, 0x3e49, 0x3e4a, 0x3e4b, 0x3e4c, 0x3e4d, 0x3e4e, 0x3e4f, 0x3e50, 0x3e51, 0x3e52, 0x3e53, 0x3e54, 0x3e55, 0x3e56, 0x3e57, 0x3e58, 0x3e59, 0x3e5a, 0x3e5b, 0x3e5c, 0x3e5d, 0x3e5e, 0x3e5f, 0x3e60, 0x3e61, 0x3e62, 0x3e63, 0x3e64, 0x3e65, 0x3e66, 0x3e67, 0x3e68, 0x3e69, 0x3e6a, 0x3e6b, 0x3e6c, 0x3e6d, 0x3e6e, 0x3e6f, 0x3e70, 0x3e71, 0x3e72, 0x3e73, 0x3e74, 0x3e75, 0x3e76, 0x3e77, 0x3e78, 0x3e79, 0x3e7a, 0x3e7b, 0x3e7e, 0x3e7c, 0x3e7d, 0x3f21, 0x3f22, 0x3f23, 0x3f24, 0x3f25, 0x3f26, 0x3f27, 0x3f28, 0x3f29, 0x3f2a, 0x3f2b, 0x3f2c, 0x3f2d, 0x3f2e, 0x3f2f, 0x3f30, 0x3f31, 0x3f32, 0x3f33, 0x3f34, 0x3f35, 0x3f36, 0x3f37, 0x3f38, 0x3f39, 0x3f3a, 0x3f3b, 0x3f3c, 0x3f3d, 0x3f3e, 0x3f3f, 0x3f40, 0x3f41, 0x3f42, 0x3f43, 0x3f44, 0x3f45, 0x3f46, 0x3f47, 0x3f48, 0x3f49, 0x3f4a, 0x3f4b, 0x3f4c, 0x3f4d, 0x3f4e, 0x3f4f, 0x3f50, 0x3f51, 0x3f52, 0x3f53, 0x3f54, 0x3f55, 0x3f56, 0x3f57, 0x3f58, 0x3f59, 0x3f5a, 0x3f5b, 0x3f5c, 0x3f5d, 0x3f5e, 0x3f5f, 0x3f60, 0x3f61, 0x3f62, 0x3f63, 0x3f64, 0x3f65, 0x3f66, 0x3f67, 0x3f68, 0x3f69, 0x3f6a, 0x3f6b, 0x3f6c, 0x3f6d, 0x3f6e, 0x3f6f, 0x3f70, 0x3f71, 0x3f72, 0x3f73, 0x3f74, 0x3f75, 0x3f76, 0x3f77, 0x3f78, 0x3f79, 0x3f7a, 0x3f7b, 0x3f7c, 0x3f7d, 0x3f7e, 0x4021, 0x4022, 0x4023, 0x4024, 0x4025, 0x4026, 0x4027, 0x4028, 0x4029, 0x402a, 0x402b, 0x402c, 0x402d, 0x402e, 0x402f, 0x4030, 0x4031, 0x4032, 0x4033, 0x4034, 0x4035, 0x4036, 0x4037, 0x4038, 0x4039, 0x403a, 0x403b, 0x403c, 0x403d, 0x403e, 0x403f, 0x4040, 0x4041, 0x4042, 0x4043, 0x4044, 0x4045, 0x4046, 0x4047, 0x4048, 0x4049, 0x404a, 0x404b, 0x404c, 0x404d, 0x404e, 0x404f, 0x4050, 0x4051, 0x4052, 0x4053, 0x4054, 0x4055, 0x4056, 0x4057, 0x4058, 0x4059, 0x405a, 0x405b, 0x405c, 0x405d, 0x405e, 0x405f, 0x4060, 0x4061, 0x4062, 0x4063, 0x4064, 0x4065, 0x4066, 0x4067, 0x4068, 0x4069, 0x406a, 0x406b, 0x406c, 0x406d, 0x406e, 0x406f, 0x4070, 0x4071, 0x4072, 0x4073, 0x4074, 0x4075, 0x4076, 0x4077, 0x4078, 0x4079, 0x407a, 0x407b, 0x407c, 0x407d, 0x407e, 0x4121, 0x4122, 0x4123, 0x4124, 0x4125, 0x4126, 0x4127, 0x4128, 0x4129, 0x412a, 0x412b, 0x412c, 0x412d, 0x412e, 0x412f, 0x4130, 0x4131, 0x4132, 0x4133, 0x4134, 0x4135, 0x4136, 0x4137, 0x4138, 0x4139, 0x413a, 0x413b, 0x413c, 0x413d, 0x413e, 0x413f, 0x4140, 0x4141, 0x4142, 0x4143, 0x4144, 0x4145, 0x4146, 0x4147, 0x4148, 0x4149, 0x414a, 0x414b, 0x414c, 0x414d, 0x414e, 0x414f, 0x4150, 0x4151, 0x4152, 0x4153, 0x4154, 0x4155, 0x4156, 0x4157, 0x4158, 0x4159, 0x415a, 0x415b, 0x415c, 0x415d, 0x415e, 0x415f, 0x4160, 0x4161, 0x4162, 0x4163, 0x4164, 0x4165, 0x4166, 0x4167, 0x4168, 0x4169, 0x416a, 0x416b, 0x416c, 0x416d, 0x416e, 0x416f, 0x4170, 0x4171, 0x4172, 0x4173, 0x4174, 0x4175, 0x4176, 0x4177, 0x4178, 0x4179, 0x417a, 0x417b, 0x417c, 0x417d, 0x417e, 0x4221, 0x4222, 0x4223, 0x4224, 0x4225, 0x4226, 0x4227, 0x4228, 0x4229, 0x422a, 0x422b, 0x422c, 0x422d, 0x422e, 0x4230, 0x422f, 0x4231, 0x4232, 0x4233, 0x4234, 0x4235, 0x4237, 0x4236, 0x4238, 0x4239, 0x423a, 0x423b, 0x423c, 0x423d, 0x423e, 0x4240, 0x4241, 0x4242, 0x4244, 0x4245, 0x4247, 0x4248, 0x4249, 0x424a, 0x424c, 0x4243, 0x4246, 0x424b, 0x424d, 0x424e, 0x424f, 0x4250, 0x4251, 0x4252, 0x4253, 0x4254, 0x4255, 0x4256, 0x4257, 0x4258, 0x4259, 0x425a, 0x425b, 0x425c, 0x425d, 0x425e, 0x425f, 0x4260, 0x4261, 0x4262, 0x4263, 0x4264, 0x4265, 0x4266, 0x4267, 0x4268, 0x4269, 0x426a, 0x426b, 0x426c, 0x426d, 0x423f, 0x426e, 0x426f, 0x4270, 0x4271, 0x4272, 0x4273, 0x4274, 0x4275, 0x4276, 0x4277, 0x4278, 0x4279, 0x427a, 0x427b, 0x427c, 0x427d, 0x427e, 0x4321, 0x4322, 0x4323, 0x4324, 0x4325, 0x4326, 0x4327, 0x4328, 0x4329, 0x432a, 0x432b, 0x432c, 0x432d, 0x432e, 0x432f, 0x4330, 0x4331, 0x4332, 0x4333, 0x4334, 0x4335, 0x4336, 0x4337, 0x4339, 0x433a, 0x433b, 0x433c, 0x433d, 0x433e, 0x433f, 0x4340, 0x4341, 0x4342, 0x4343, 0x4344, 0x4345, 0x4346, 0x4347, 0x4348, 0x4338, 0x434a, 0x434b, 0x434c, 0x434d, 0x434f, 0x434e, 0x4350, 0x4351, 0x4352, 0x4353, 0x4354, 0x4355, 0x4356, 0x4357, 0x4358, 0x4359, 0x435a, 0x435b, 0x4349, 0x435c, 0x435d, 0x435e, 0x435f, 0x4360, 0x4361, 0x4362, 0x4363, 0x4364, 0x4365, 0x4366, 0x4367, 0x4368, 0x4369, 0x436a, 0x436b, 0x436c, 0x436d, 0x436e, 0x436f, 0x4370, 0x4371, 0x4372, 0x4373, 0x4374, 0x4375, 0x4376, 0x4377, 0x4378, 0x4379, 0x437a, 0x437b, 0x437c, 0x437d, 0x437e, 0x4421, 0x4422, 0x4423, 0x4424, 0x4425, 0x4426, 0x4427, 0x4428, 0x4429, 0x442a, 0x442b, 0x442c, 0x442d, 0x442e, 0x442f, 0x4430, 0x4431, 0x4432, 0x4433, 0x4434, 0x4435, 0x4436, 0x4437, 0x4438, 0x4439, 0x443a, 0x443b, 0x443c, 0x443d, 0x443e, 0x443f, 0x4440, 0x4441, 0x4442, 0x4443, 0x4444, 0x4445, 0x4446, 0x4447, 0x4448, 0x4449, 0x444a, 0x444b, 0x444c, 0x444d, 0x444e, 0x444f, 0x4450, 0x4451, 0x4452, 0x4453, 0x4454, 0x4455, 0x4456, 0x4457, 0x4458, 0x4459, 0x445a, 0x445b, 0x445c, 0x445d, 0x445e, 0x445f, 0x4460, 0x4461, 0x4462, 0x4463, 0x4464, 0x4465, 0x4466, 0x4467, 0x4468, 0x4469, 0x446a, 0x446b, 0x446c, 0x446d, 0x446e, 0x446f, 0x4470, 0x4471, 0x4472, 0x4473, 0x4474, 0x4475, 0x4476, 0x4477, 0x4478, 0x4479, 0x447a, 0x447b, 0x447c, 0x447d, 0x447e, 0x4521, 0x4522, 0x4523, 0x4524, 0x4525, 0x4526, 0x4527, 0x4528, 0x4529, 0x452a, 0x452b, 0x452c, 0x452d, 0x452e, 0x452f, 0x4530, 0x4531, 0x4532, 0x4533, 0x4534, 0x4535, 0x4536, 0x4537, 0x4538, 0x4539, 0x453a, 0x453b, 0x453c, 0x453d, 0x453e, 0x453f, 0x4540, 0x4541, 0x4542, 0x4543, 0x4544, 0x4545, 0x4546, 0x4547, 0x4548, 0x4549, 0x454a, 0x454b, 0x454d, 0x454c, 0x454e, 0x454f, 0x4550, 0x4551, 0x4552, 0x4553, 0x4554, 0x4555, 0x4556, 0x4557, 0x4558, 0x4559, 0x455a, 0x455b, 0x455c, 0x455d, 0x455e, 0x455f, 0x4560, 0x4561, 0x4562, 0x4563, 0x4564, 0x4565, 0x4566, 0x4567, 0x4568, 0x4569, 0x456a, 0x456b, 0x456c, 0x456d, 0x456e, 0x456f, 0x4570, 0x4571, 0x4572, 0x4573, 0x4574, 0x4575, 0x4576, 0x4577, 0x4578, 0x4579, 0x457a, 0x457b, 0x457c, 0x457d, 0x457e, 0x4621, 0x4622, 0x4623, 0x4624, 0x4625, 0x4626, 0x4627, 0x4628, 0x4629, 0x462a, 0x462b, 0x462c, 0x462d, 0x462e, 0x462f, 0x4630, 0x4631, 0x4632, 0x4633, 0x4634, 0x4635, 0x4636, 0x4637, 0x4638, 0x4639, 0x463a, 0x463b, 0x463c, 0x463d, 0x463e, 0x463f, 0x4640, 0x4641, 0x4642, 0x4643, 0x4644, 0x4645, 0x4646, 0x4647, 0x4648, 0x4649, 0x464a, 0x464b, 0x464c, 0x464d, 0x464e, 0x464f, 0x4650, 0x4651, 0x4652, 0x4653, 0x4654, 0x4655, 0x4656, 0x4657, 0x4658, 0x4659, 0x465a, 0x465b, 0x465c, 0x465d, 0x465e, 0x465f, 0x4660, 0x4736, 0x4661, 0x4662, 0x4663, 0x4664, 0x4665, 0x4666, 0x4667, 0x4668, 0x4669, 0x466a, 0x466b, 0x466c, 0x466d, 0x466e, 0x466f, 0x4670, 0x4671, 0x4672, 0x4673, 0x4674, 0x4675, 0x4676, 0x4677, 0x4678, 0x4679, 0x467a, 0x467b, 0x467c, 0x467d, 0x467e, 0x4721, 0x4722, 0x4723, 0x4724, 0x4725, 0x4726, 0x4727, 0x4728, 0x4729, 0x472a, 0x472b, 0x472c, 0x472d, 0x472e, 0x472f, 0x4730, 0x4731, 0x4732, 0x4733, 0x4734, 0x4735, 0x4737, 0x4738, 0x4739, 0x473a, 0x473b, 0x473c, 0x473d, 0x473e, 0x473f, 0x4740, 0x4741, 0x4742, 0x4743, 0x4744, 0x4745, 0x4746, 0x4747, 0x4748, 0x4749, 0x474a, 0x474b, 0x474c, 0x474d, 0x474e, 0x474f, 0x4750, 0x4751, 0x4752, 0x4753, 0x4754, 0x4755, 0x4756, 0x4757, 0x4758, 0x4759, 0x475a, 0x475b, 0x475c, 0x475d, 0x475e, 0x475f, 0x4760, 0x4761, 0x4762, 0x4763, 0x4764, 0x4765, 0x4766, 0x4767, 0x4768, 0x4769, 0x476a, 0x476b, 0x476c, 0x476d, 0x476e, 0x476f, 0x4770, 0x4771, 0x4772, 0x4773, 0x4774, 0x4775, 0x4776, 0x4777, 0x4778, 0x4779, 0x477a, 0x477b, 0x477c, 0x477d, 0x477e, 0x4821, 0x4822, 0x4823, 0x4824, 0x4825, 0x4826, 0x4827, 0x4828, 0x4829, 0x482a, 0x482b, 0x482c, 0x482d, 0x482e, 0x482f, 0x4830, 0x4831, 0x4832, 0x4833, 0x4834, 0x4835, 0x4836, 0x4837, 0x4838, 0x4839, 0x483a, 0x483b, 0x483c, 0x483d, 0x483e, 0x483f, 0x4840, 0x4841, 0x4842, 0x4843, 0x4844, 0x4845, 0x4846, 0x4847, 0x4848, 0x4849, 0x484a, 0x484b, 0x484c, 0x4853, 0x484d, 0x484e, 0x484f, 0x4850, 0x4851, 0x4852, 0x4854, 0x4855, 0x4856, 0x4857, 0x4858, 0x4859, 0x485a, 0x485b, 0x485c, 0x485d, 0x485e, 0x485f, 0x4860, 0x4861, 0x4862, 0x4863, 0x4864, 0x4865, 0x4866, 0x4867, 0x4868, 0x4869, 0x486a, 0x486b, 0x486c, 0x486d, 0x486e, 0x486f, 0x4870, 0x4871, 0x4872, 0x4873, 0x4874, 0x4875, 0x4876, 0x4877, 0x4878, 0x4879, 0x487a, 0x487b, 0x487c, 0x487d, 0x487e, 0x4921, 0x4922, 0x4923, 0x4924, 0x4925, 0x4926, 0x4927, 0x4928, 0x4929, 0x492a, 0x492b, 0x492c, 0x492d, 0x492e, 0x492f, 0x4930, 0x4931, 0x4932, 0x4933, 0x4934, 0x4935, 0x4936, 0x4937, 0x4938, 0x4939, 0x493a, 0x493b, 0x493c, 0x4941, 0x493d, 0x493e, 0x493f, 0x4940, 0x4942, 0x4943, 0x4944, 0x4945, 0x4946, 0x4947, 0x4948, 0x4949, 0x494a, 0x494b, 0x494c, 0x494d, 0x494e, 0x494f, 0x4950, 0x4951, 0x4952, 0x4953, 0x4954, 0x4955, 0x4956, 0x4957, 0x4958, 0x4959, 0x495a, 0x495b, 0x495c, 0x495d, 0x495e, 0x495f, 0x4960, 0x4961, 0x4962, 0x4963, 0x4964, 0x4965, 0x4966, 0x4967, 0x4968, 0x4969, 0x496a, 0x496b, 0x496c, 0x496d, 0x496e, 0x496f, 0x4970, 0x4971, 0x4972, 0x4973, 0x4974, 0x4975, 0x4976, 0x4977, 0x4978, 0x4979, 0x497a, 0x497b, 0x497c, 0x497d, 0x497e, 0x4a21, 0x4a22, 0x4a23, 0x4a24, 0x4a25, 0x4a26, 0x4a27, 0x4a28, 0x4a29, 0x4a2a, 0x4a2b, 0x4a2c, 0x4a2d, 0x4a2e, 0x4a2f, 0x4a30, 0x4a31, 0x4a32, 0x4a33, 0x4a34, 0x4a35, 0x4a36, 0x4a37, 0x4a38, 0x4a39, 0x4a3a, 0x4a3b, 0x4a3c, 0x4a3d, 0x4a3e, 0x4a3f, 0x4a40, 0x4a41, 0x4a42, 0x4a43, 0x4a44, 0x4a45, 0x4a46, 0x4a47, 0x4a48, 0x4a49, 0x4a4a, 0x4a4b, 0x4a4c, 0x4a4d, 0x4a4e, 0x4a4f, 0x4a50, 0x4a51, 0x4a52, 0x4a53, 0x4a54, 0x4a55, 0x4a56, 0x4a57, 0x4a58, 0x4a59, 0x4a5a, 0x4a5b, 0x4a5c, 0x4a5d, 0x4a5e, 0x4a5f, 0x4a60, 0x4a61, 0x4a62, 0x4a63, 0x4a64, 0x4a65, 0x4a66, 0x4a67, 0x4a68, 0x4a69, 0x4a6a, 0x4a6b, 0x4a6c, 0x4a6d, 0x4a6e, 0x4a6f, 0x4a70, 0x4a71, 0x4a72, 0x4a73, 0x4a74, 0x4a75, 0x4a76, 0x4a77, 0x4a78, 0x4a79, 0x4a7a, 0x4a7b, 0x4a7c, 0x4a7d, 0x4a7e, 0x4b21, 0x4b22, 0x4b23, 0x4b24, 0x4b25, 0x4b26, 0x4b27, 0x4b28, 0x4b29, 0x4b2a, 0x4b2b, 0x4b2c, 0x4b2d, 0x4b2e, 0x4b2f, 0x4b30, 0x4b31, 0x4b32, 0x4b33, 0x4b34, 0x4b35, 0x4b36, 0x4b37, 0x4b38, 0x4b39, 0x4b3a, 0x4b3b, 0x4b3c, 0x4b3d, 0x4b3e, 0x4b3f, 0x4b40, 0x4b41, 0x4b42, 0x4b43, 0x4b44, 0x4b45, 0x4b46, 0x4b47, 0x4b48, 0x4b49, 0x4b4a, 0x4b4b, 0x4b4c, 0x4b4d, 0x4b4e, 0x4b4f, 0x4b50, 0x4b51, 0x4b52, 0x4b53, 0x4b54, 0x4b55, 0x4b56, 0x4b57, 0x4b58, 0x4b59, 0x4b5a, 0x4b5b, 0x4b5c, 0x4b5d, 0x4b5e, 0x4b5f, 0x4b60, 0x4b61, 0x4b62, 0x4b63, 0x4b64, 0x4b65, 0x4b66, 0x4b67, 0x4b68, 0x4b69, 0x4b6a, 0x4b6b, 0x4b6c, 0x4b6d, 0x4b6e, 0x4b6f, 0x4b70, 0x4b71, 0x4b72, 0x4b73, 0x4b74, 0x4b75, 0x4b76, 0x4b77, 0x4b78, 0x4b79, 0x4b7a, 0x4b7b, 0x4b7c, 0x4b7d, 0x4b7e, 0x4c21, 0x4c22, 0x4c23, 0x4c24, 0x4c25, 0x4c26, 0x4c27, 0x4c28, 0x4c29, 0x4c2a, 0x4c2b, 0x4c2c, 0x4c2d, 0x4c2e, 0x4c2f, 0x4c30, 0x4c31, 0x4c32, 0x4c33, 0x4c34, 0x4c35, 0x4c36, 0x4c37, 0x4c38, 0x4c39, 0x4c3a, 0x4c3b, 0x4c3c, 0x4c3d, 0x4c3e, 0x4c3f, 0x4c40, 0x4c41, 0x4c42, 0x4c43, 0x4c44, 0x4c45, 0x4c46, 0x4c47, 0x4c48, 0x4c49, 0x4c4a, 0x4c4b, 0x4c4c, 0x4c4d, 0x4c4e, 0x4c4f, 0x4c50, 0x4c51, 0x4c52, 0x4c53, 0x4c54, 0x4c55, 0x4c56, 0x4c57, 0x4c58, 0x4c59, 0x4c5a, 0x4c5b, 0x4c5c, 0x4c5d, 0x4c5e, 0x4c5f, 0x4c60, 0x4c61, 0x4c62, 0x4c63, 0x4c64, 0x4c65, 0x4c66, 0x4c67, 0x4c68, 0x4c69, 0x4c6a, 0x4c6b, 0x4c6c, 0x4c6d, 0x4c6e, 0x4c6f, 0x4c70, 0x4c71, 0x4c72, 0x4c73, 0x4c74, 0x4c75, 0x4c76, 0x4c77, 0x4c78, 0x4c79, 0x4c7a, 0x4c7b, 0x4c7c, 0x4c7d, 0x4c7e, 0x4d21, 0x4d22, 0x4d23, 0x4d24, 0x4d25, 0x4d26, 0x4d27, 0x4d28, 0x4d29, 0x4d2a, 0x4d2b, 0x4d2c, 0x4d2d, 0x4d2e, 0x4d2f, 0x4d30, 0x4d31, 0x4d32, 0x4d33, 0x4d34, 0x4d35, 0x4d36, 0x4d37, 0x4d38, 0x4d39, 0x4d3a, 0x4d3b, 0x4d3c, 0x4d3d, 0x4d3e, 0x4d3f, 0x4d40, 0x4d41, 0x4d42, 0x4d43, 0x4d44, 0x4d45, 0x4d46, 0x4d47, 0x4d48, 0x4d49, 0x4d4a, 0x4d4b, 0x4d4c, 0x4d4d, 0x4d4e, 0x4d4f, 0x4d50, 0x4d51, 0x4d52, 0x4d53, 0x4d54, 0x4d55, 0x4d56, 0x4d57, 0x4d58, 0x4d59, 0x4d5a, 0x4d5b, 0x4d5c, 0x4d5d, 0x4d5e, 0x4d5f, 0x4d60, 0x4d61, 0x4d62, 0x4d63, 0x4d64, 0x4d65, 0x4d66, 0x4d67, 0x4d68, 0x4d69, 0x4d6a, 0x4d6b, 0x4d6c, 0x4d6d, 0x4d6e, 0x4d6f, 0x4d70, 0x4d71, 0x4d72, 0x4d73, 0x4d74, 0x4d75, 0x4d76, 0x4d77, 0x4d78, 0x4d79, 0x4d7a, 0x4d7b, 0x4d7c, 0x4d7d, 0x4d7e, 0x4e21, 0x4e22, 0x4e24, 0x4e25, 0x4e26, 0x4e27, 0x4e28, 0x4e29, 0x4e23, 0x4e2a, 0x4e2b, 0x4e2c, 0x4e2d, 0x4e2e, 0x4e2f, 0x4e30, 0x4e31, 0x4e32, 0x4e33, 0x4e34, 0x4e35, 0x4e36, 0x4e37, 0x4e38, 0x4e39, 0x4e3a, 0x4e3b, 0x4e3c, 0x4e3d, 0x4e3e, 0x4e3f, 0x4e40, 0x4e41, 0x4e42, 0x4e43, 0x4e44, 0x4e45, 0x4e46, 0x4e47, 0x4e48, 0x4e49, 0x4e4a, 0x4e4b, 0x4e4c, 0x4e4d, 0x4e4e, 0x4e4f, 0x4e50, 0x4e51, 0x4e52, 0x4e53, 0x4e54, 0x4e55, 0x4e56, 0x4e57, 0x4e58, 0x4e59, 0x4e5a, 0x4e5b, 0x4e5c, 0x4e5d, 0x4e5e, 0x4e5f, 0x4e60, 0x4e61, 0x4e62, 0x4e63, 0x4e64, 0x4e65, 0x4e66, 0x4e67, 0x4e68, 0x4e69, 0x4e6a, 0x4e6b, 0x4e6c, 0x4e6d, 0x4e6e, 0x4e6f, 0x4e70, 0x4e71, 0x4e72, 0x4e73, 0x4e74, 0x4e75, 0x4e76, 0x4e77, 0x4e78, 0x4e79, 0x4e7a, 0x4e7b, 0x4e7c, 0x4e7d, 0x4e7e, 0x4f21, 0x4f22, 0x4f23, 0x4f24, 0x4f25, 0x4f26, 0x4f27, 0x4f28, 0x4f29, 0x4f2a, 0x4f2b, 0x4f2c, 0x4f2d, 0x4f2e, 0x4f2f, 0x4f30, 0x4f31, 0x4f32, 0x4f33, 0x4f34, 0x4f35, 0x4f36, 0x4f37, 0x4f38, 0x4f39, 0x4f3a, 0x4f3b, 0x4f3c, 0x4f3d, 0x4f3e, 0x4f3f, 0x4f40, 0x4f41, 0x4f42, 0x4f43, 0x4f44, 0x4f45, 0x4f46, 0x4f47, 0x4f48, 0x4f49, 0x4f4a, 0x4f4b, 0x4f4c, 0x4f4d, 0x4f4e, 0x4f4f, 0x4f50, 0x4f51, 0x4f52, 0x4f53, 0x4f54, 0x4f55, 0x4f56, 0x4f57, 0x4f58, 0x4f59, 0x4f5a, 0x4f5b, 0x4f5c, 0x4f5d, 0x4f5e, 0x4f5f, 0x4f60, 0x4f61, 0x4f62, 0x4f63, 0x4f64, 0x4f65, 0x4f66, 0x4f67, 0x4f68, 0x4f69, 0x4f6a, 0x4f6b, 0x4f6c, 0x4f6d, 0x4f6e, 0x4f6f, 0x4f70, 0x4f71, 0x4f72, 0x4f74, 0x4f75, 0x4f76, 0x4f73, 0x4f77, 0x4f78, 0x4f79, 0x4f7a, 0x4f7b, 0x4f7c, 0x4f7d, 0x4f7e, 0x5021, 0x5022, 0x5023, 0x5024, 0x5025, 0x5026, 0x5027, 0x5028, 0x5029, 0x502a, 0x502b, 0x502c, 0x502e, 0x502f, 0x5030, 0x5031, 0x502d, 0x5032, 0x5033, 0x5034, 0x5035, 0x5037, 0x5038, 0x5039, 0x503a, 0x503b, 0x5036, 0x503c, 0x503d, 0x503e, 0x503f, 0x5040, 0x5041, 0x5042, 0x5043, 0x5044, 0x5045, 0x5046, 0x5047, 0x5048, 0x5049, 0x504a, 0x504b, 0x504c, 0x504d, 0x504e, 0x504f, 0x5050, 0x5051, 0x5052, 0x5053, 0x5054, 0x5055, 0x5056, 0x5057, 0x5058, 0x5059, 0x505a, 0x505b, 0x505c, 0x505d, 0x505e, 0x505f, 0x5060, 0x5061, 0x5062, 0x5063, 0x5064, 0x5065, 0x5066, 0x5067, 0x5068, 0x5069, 0x506a, 0x506b, 0x506c, 0x506d, 0x506e, 0x506f, 0x5070, 0x5071, 0x5072, 0x5073, 0x5074, 0x5075, 0x5076, 0x5077, 0x5078, 0x5079, 0x507a, 0x507b, 0x507c, 0x507d, 0x507e, 0x5121, 0x5122, 0x5123, 0x5124, 0x5125, 0x5126, 0x5127, 0x5128, 0x5129, 0x512a, 0x512b, 0x512c, 0x512d, 0x512e, 0x512f, 0x5130, 0x5131, 0x5132, 0x5133, 0x5134, 0x5135, 0x5136, 0x5137, 0x5138, 0x5139, 0x513a, 0x513b, 0x513c, 0x513d, 0x513e, 0x513f, 0x5140, 0x5141, 0x5142, 0x5143, 0x5144, 0x5145, 0x5146, 0x5147, 0x5148, 0x5149, 0x514a, 0x514b, 0x514c, 0x514d, 0x514e, 0x514f, 0x5150, 0x5151, 0x5152, 0x5153, 0x5154, 0x5155, 0x5156, 0x5157, 0x5158, 0x5159, 0x515a, 0x515b, 0x515c, 0x515d, 0x515e, 0x515f, 0x5160, 0x5161, 0x5162, 0x5163, 0x5164, 0x5165, 0x5166, 0x5167, 0x5168, 0x5169, 0x516a, 0x516b, 0x516c, 0x516d, 0x516e, 0x516f, 0x5170, 0x5171, 0x5172, 0x5173, 0x5174, 0x5175, 0x5176, 0x5177, 0x5178, 0x5179, 0x517a, 0x517b, 0x517c, 0x517d, 0x517e, 0x5221, 0x5222, 0x5223, 0x5224, 0x5225, 0x5226, 0x5227, 0x5228, 0x5229, 0x522a, 0x522b, 0x522c, 0x522d, 0x522e, 0x522f, 0x5230, 0x5231, 0x5232, 0x5233, 0x5234, 0x5235, 0x5236, 0x5237, 0x5238, 0x5239, 0x523a, 0x523b, 0x523c, 0x523d, 0x523e, 0x523f, 0x5240, 0x5241, 0x5242, 0x5243, 0x5244, 0x5245, 0x5246, 0x5247, 0x5248, 0x5249, 0x524a, 0x524b, 0x524c, 0x524d, 0x524e, 0x524f, 0x5250, 0x5251, 0x5252, 0x5253, 0x5254, 0x5255, 0x5256, 0x5257, 0x5258, 0x5259, 0x525a, 0x525b, 0x525c, 0x525d, 0x525e, 0x525f, 0x5260, 0x5261, 0x5262, 0x5263, 0x5264, 0x5265, 0x5266, 0x5267, 0x5268, 0x5269, 0x526a, 0x526b, 0x526c, 0x526d, 0x526e, 0x526f, 0x5270, 0x5271, 0x5272, 0x5273, 0x5274, 0x5276, 0x5277, 0x5278, 0x5275, 0x5279, 0x527a, 0x527b, 0x527c, 0x527d, 0x527e, 0x5321, 0x5322, 0x5323, 0x5324, 0x5325, 0x5326, 0x5327, 0x5328, 0x5329, 0x532a, 0x532b, 0x532c, 0x532d, 0x532e, 0x532f, 0x5330, 0x5331, 0x5332, 0x5333, 0x5334, 0x5335, 0x5336, 0x5337, 0x5338, 0x5339, 0x533a, 0x533b, 0x533c, 0x533d, 0x533e, 0x533f, 0x5340, 0x5341, 0x5342, 0x5343, 0x5344, 0x5345, 0x5346, 0x5347, 0x5348, 0x5349, 0x534a, 0x534b, 0x534c, 0x534d, 0x534e, 0x534f, 0x5350, 0x5351, 0x5352, 0x5353, 0x5354, 0x5355, 0x5356, 0x5357, 0x5358, 0x5359, 0x535a, 0x535b, 0x535c, 0x535d, 0x535e, 0x535f, 0x5360, 0x5361, 0x5362, 0x5363, 0x5364, 0x5365, 0x5366, 0x5367, 0x5368, 0x5369, 0x536a, 0x536b, 0x536c, 0x536d, 0x536e, 0x536f, 0x5370, 0x5371, 0x5372, 0x5373, 0x5374, 0x5375, 0x5376, 0x5377, 0x5378, 0x5379, 0x537a, 0x537b, 0x537c, 0x537d, 0x537e, 0x5421, 0x5422, 0x5423, 0x5424, 0x5425, 0x5426, 0x5427, 0x5428, 0x5429, 0x542a, 0x542b, 0x542c, 0x542d, 0x542e, 0x542f, 0x5430, 0x5431, 0x5432, 0x5434, 0x5435, 0x5436, 0x5437, 0x5438, 0x5439, 0x543a, 0x543b, 0x543c, 0x543d, 0x543e, 0x5433, 0x543f, 0x5440, 0x5441, 0x5442, 0x5443, 0x5444, 0x5445, 0x5446, 0x5447, 0x5448, 0x5449, 0x544a, 0x544b, 0x544c, 0x544d, 0x544e, 0x544f, 0x5450, 0x5451, 0x5452, 0x5453, 0x5454, 0x5455, 0x5456, 0x5457, 0x5458, 0x5459, 0x545a, 0x545b, 0x545c, 0x545d, 0x545e, 0x545f, 0x5460, 0x5461, 0x5462, 0x5463, 0x5464, 0x5465, 0x5466, 0x5467, 0x5468, 0x5469, 0x546a, 0x546c, 0x546b, 0x546d, 0x546e, 0x546f, 0x5470, 0x5471, 0x5472, 0x5473, 0x5474, 0x5475, 0x5476, 0x5477, 0x5478, 0x5479, 0x547a, 0x547b, 0x547c, 0x547d, 0x547e, 0x5521, 0x5522, 0x5523, 0x5524, 0x5525, 0x5526, 0x5527, 0x5528, 0x5529, 0x552a, 0x552b, 0x552c, 0x552d, 0x552e, 0x552f, 0x5530, 0x5531, 0x5532, 0x5533, 0x5534, 0x5535, 0x5536, 0x5537, 0x5538, 0x5539, 0x553a, 0x553b, 0x553c, 0x553d, 0x553e, 0x553f, 0x5540, 0x5541, 0x5542, 0x5543, 0x5544, 0x5545, 0x5546, 0x5547, 0x5548, 0x5549, 0x554a, 0x554b, 0x554c, 0x554d, 0x554e, 0x554f, 0x5550, 0x5551, 0x5552, 0x5553, 0x5554, 0x5555, 0x5556, 0x5557, 0x5558, 0x5559, 0x555a, 0x555b, 0x555c, 0x555d, 0x555e, 0x555f, 0x5560, 0x5561, 0x5562, 0x5563, 0x5564, 0x5565, 0x5566, 0x5567, 0x5568, 0x5569, 0x556a, 0x556b, 0x556c, 0x556d, 0x556e, 0x556f, 0x5570, 0x5571, 0x5572, 0x5573, 0x5574, 0x5575, 0x5576, 0x5577, 0x5578, 0x5579, 0x557a, 0x557b, 0x557c, 0x557d, 0x557e, 0x5621, 0x5622, 0x5623, 0x5624, 0x5625, 0x5626, 0x5627, 0x5628, 0x5629, 0x562a, 0x562b, 0x562c, 0x562d, 0x562e, 0x562f, 0x5630, 0x5631, 0x5632, 0x5633, 0x5634, 0x5635, 0x5636, 0x5637, 0x5638, 0x5639, 0x563a, 0x563b, 0x563c, 0x563d, 0x563e, 0x563f, 0x5640, 0x5641, 0x5642, 0x5643, 0x5644, 0x5645, 0x5647, 0x5648, 0x5649, 0x564a, 0x564b, 0x5646, 0x564c, 0x564d, 0x564e, 0x564f, 0x5650, 0x5651, 0x5652, 0x5653, 0x5654, 0x5656, 0x5657, 0x5658, 0x5655, 0x5659, 0x565a, 0x565b, 0x565c, 0x565d, 0x565e, 0x565f, 0x5660, 0x5661, 0x5662, 0x5663, 0x5664, 0x5665, 0x5666, 0x5667, 0x5668, 0x5669, 0x566a, 0x566b, 0x566c, 0x566d, 0x566e, 0x566f, 0x5670, 0x5671, 0x5672, 0x5673, 0x5674, 0x5675, 0x5676, 0x5677, 0x5678, 0x5679, 0x567a, 0x567b, 0x567c, 0x567d, 0x567e, 0x5721, 0x5722, 0x5723, 0x5724, 0x5725, 0x5726, 0x5727, 0x5728, 0x5729, 0x572a, 0x572b, 0x572c, 0x572d, 0x572e, 0x572f, 0x5730, 0x5731, 0x5732, 0x5733, 0x5734, 0x5735, 0x5736, 0x5737, 0x5738, 0x5739, 0x573a, 0x573b, 0x573c, 0x573d, 0x573e, 0x573f, 0x5740, 0x5741, 0x5742, 0x5743, 0x5744, 0x5745, 0x5746, 0x5747, 0x5748, 0x5749, 0x574a, 0x574b, 0x574c, 0x574d, 0x574e, 0x574f, 0x5750, 0x5751, 0x5752, 0x5753, 0x5754, 0x5755, 0x5756, 0x5757, 0x5758, 0x5759, 0x575a, 0x575b, 0x575c, 0x575d, 0x575e, 0x575f, 0x5760, 0x5761, 0x5762, 0x5764, 0x5765, 0x5766, 0x5767, 0x5768, 0x5769, 0x576a, 0x576b, 0x576c, 0x576d, 0x576e, 0x576f, 0x5770, 0x5771, 0x5772, 0x5773, 0x5774, 0x5775, 0x5776, 0x5777, 0x5778, 0x5779, 0x583e, 0x5763, 0x577a, 0x577b, 0x577c, 0x577d, 0x577e, 0x5821, 0x5822, 0x5823, 0x5824, 0x5825, 0x5826, 0x5827, 0x5828, 0x5829, 0x582a, 0x582b, 0x582c, 0x582d, 0x582e, 0x582f, 0x5830, 0x5831, 0x5832, 0x5833, 0x584c, 0x5834, 0x5835, 0x5836, 0x5837, 0x5838, 0x5839, 0x583a, 0x583b, 0x583c, 0x583d, 0x583f, 0x5840, 0x5841, 0x5842, 0x5843, 0x5844, 0x5845, 0x5846, 0x5847, 0x5848, 0x5849, 0x584a, 0x584b, 0x584d, 0x584e, 0x584f, 0x5850, 0x5851, 0x5852, 0x5853, 0x5854, 0x5855, 0x5856, 0x5857, 0x5858, 0x5859, 0x585a, 0x585b, 0x585c, 0x585d, 0x585e, 0x585f, 0x5860, 0x5861, 0x5862, 0x5863, 0x5864, 0x5865, 0x5866, 0x5867, 0x5868, 0x5869, 0x586a, 0x586b, 0x586c, 0x586d, 0x586e, 0x586f, 0x5870, 0x5871, 0x5872, 0x5873, 0x5874, 0x5875, 0x5876, 0x5877, 0x5878, 0x5879, 0x587a, 0x587b, 0x587c, 0x587d, 0x587e, 0x5921, 0x5922, 0x5923, 0x5924, 0x5925, 0x5926, 0x5927, 0x5928, 0x592a, 0x592b, 0x592c, 0x592d, 0x592e, 0x592f, 0x5930, 0x5931, 0x5932, 0x5933, 0x5934, 0x5935, 0x5936, 0x5937, 0x5938, 0x5939, 0x593a, 0x593b, 0x593c, 0x5929, 0x593d, 0x593e, 0x593f, 0x5940, 0x5941, 0x5942, 0x5943, 0x5944, 0x5945, 0x5946, 0x5947, 0x5948, 0x5949, 0x594a, 0x594b, 0x594c, 0x594d, 0x594e, 0x594f, 0x5950, 0x5951, 0x5952, 0x5953, 0x5954, 0x5955, 0x5956, 0x5957, 0x5958, 0x5959, 0x595a, 0x595b, 0x595c, 0x595d, 0x595e, 0x595f, 0x5960, 0x5961, 0x5962, 0x5963, 0x5964, 0x5965, 0x5966, 0x5974, 0x5967, 0x5968, 0x5969, 0x596a, 0x596b, 0x596c, 0x596d, 0x596e, 0x596f, 0x5970, 0x5971, 0x5972, 0x5973, 0x5975, 0x5976, 0x5977, 0x5978, 0x5979, 0x597a, 0x597b, 0x597c, 0x597d, 0x597e, 0x5a21, 0x5a22, 0x5a23, 0x5a24, 0x5a25, 0x5a26, 0x5a27, 0x5a28, 0x5a29, 0x5a2a, 0x5a2b, 0x5a2c, 0x5a2d, 0x5a2e, 0x5a2f, 0x5a30, 0x5a31, 0x5a32, 0x5a33, 0x5a34, 0x5a35, 0x5a36, 0x3866, 0x5a37, 0x5a38, 0x5a39, 0x5a3a, 0x5a3b, 0x5a3c, 0x5a3d, 0x5a3e, 0x5a3f, 0x5a40, 0x5a41, 0x5a42, 0x5a43, 0x5a44, 0x5a45, 0x5a46, 0x5a47, 0x5a48, 0x5a49, 0x5a4a, 0x5a4b, 0x5a6d, 0x5a4c, 0x5a4d, 0x5a4e, 0x5a4f, 0x5a50, 0x5a51, 0x5a52, 0x5a53, 0x5a54, 0x5a55, 0x5a56, 0x5a57, 0x5a58, 0x5a59, 0x5a5a, 0x5a5b, 0x5a5c, 0x5a5d, 0x5a5e, 0x5a5f, 0x5a60, 0x5a61, 0x5a62, 0x5a63, 0x5a64, 0x5a65, 0x5a66, 0x5a67, 0x5a68, 0x5a69, 0x5a6a, 0x5a6b, 0x5a6c, 0x5a6e, 0x5a6f, 0x5a70, 0x5a71, 0x5a72, 0x5a73, 0x5a74, 0x5a75, 0x5a76, 0x5a77, 0x5a78, 0x5a79, 0x5a7a, 0x5a7b, 0x5a7c, 0x5a7d, 0x5a7e, 0x5b21, 0x5b22, 0x5b23, 0x5b24, 0x5b25, 0x5b26, 0x5b27, 0x5b28, 0x5b29, 0x5b2a, 0x5b2b, 0x5b2c, 0x5b2d, 0x5b2e, 0x5b2f, 0x5b30, 0x5b31, 0x5b32, 0x5b33, 0x5b34, 0x5b35, 0x5b36, 0x5b37, 0x5b38, 0x5b39, 0x5b3a, 0x5b3b, 0x5b3c, 0x5b3d, 0x5b3e, 0x5b3f, 0x5b40, 0x5b41, 0x5b42, 0x5b43, 0x5b44, 0x5b45, 0x5b46, 0x5b47, 0x5b48, 0x5b49, 0x5b4a, 0x5b4b, 0x5b4c, 0x5b4d, 0x5b4e, 0x5b4f, 0x5b50, 0x5b51, 0x5b52, 0x5b53, 0x5b54, 0x5b55, 0x5b56, 0x5b57, 0x5b58, 0x5b59, 0x5b5a, 0x5b5b, 0x5b5c, 0x5b5d, 0x5b5e, 0x5b5f, 0x5b60, 0x5b61, 0x5b62, 0x5b63, 0x5b64, 0x5b65, 0x5b66, 0x5b67, 0x5b68, 0x5b69, 0x5b6a, 0x5b6b, 0x5b6c, 0x5b6d, 0x5b6e, 0x5b70, 0x5b71, 0x5b72, 0x5b73, 0x5b6f, 0x5b74, 0x5b75, 0x5b76, 0x5b77, 0x5b78, 0x5b79, 0x5b7a, 0x5b7b, 0x5b7c, 0x5b7d, 0x5b7e, 0x5c21, 0x5c22, 0x5c23, 0x5c24, 0x5c25, 0x5c26, 0x5c27, 0x5c28, 0x5c29, 0x5c2a, 0x5c2b, 0x5c2c, 0x5c2d, 0x5c2e, 0x5c2f, 0x5c30, 0x5c31, 0x5c32, 0x5c33, 0x5c34, 0x5c35, 0x5c36, 0x5c37, 0x5c38, 0x5c39, 0x5c3a, 0x5c3b, 0x5c3c, 0x5c3d, 0x5c3e, 0x5c3f, 0x5c40, 0x5c41, 0x5c42, 0x5c43, 0x5c44, 0x5c45, 0x5c46, 0x5c47, 0x5c48, 0x5c49, 0x5c4a, 0x5c4b, 0x5c4c, 0x5c4d, 0x5c4e, 0x5c4f, 0x5c50, 0x5c51, 0x5c52, 0x5c53, 0x5c54, 0x5c55, 0x5c56, 0x5c57, 0x5c58, 0x5c59, 0x5c5a, 0x5c5b, 0x5c5c, 0x5c5d, 0x5c5e, 0x5c5f, 0x5c60, 0x5c61, 0x5c62, 0x5c63, 0x5c64, 0x5c65, 0x5c66, 0x5c67, 0x5c68, 0x5c69, 0x5c6a, 0x5c6b, 0x5c6c, 0x5c6d, 0x5c6e, 0x5c6f, 0x5c70, 0x5c71, 0x5c72, 0x5c73, 0x5c74, 0x5c75, 0x5c76, 0x5c77, 0x5c78, 0x5c79, 0x5c7a, 0x5c7b, 0x5c7c, 0x5c7d, 0x5c7e, 0x5d21, 0x5d22, 0x5d23, 0x5d24, 0x5d25, 0x5d26, 0x5d27, 0x5d28, 0x5d29, 0x5d2a, 0x5d2b, 0x5d2c, 0x5d2d, 0x5d2e, 0x5d2f, 0x5d30, 0x5d31, 0x5d32, 0x5d33, 0x5d34, 0x5d35, 0x5d36, 0x5d37, 0x5d38, 0x5d39, 0x5d3a, 0x5d3b, 0x5d3c, 0x5d3d, 0x5d3e, 0x5d3f, 0x5d40, 0x5d41, 0x5d42, 0x5d43, 0x5d44, 0x5d45, 0x5d46, 0x5d47, 0x5d48, 0x5d49, 0x5d4a, 0x5d4b, 0x5d4c, 0x5d4d, 0x5d4e, 0x5d4f, 0x5d50, 0x5d51, 0x5d52, 0x5d53, 0x5d54, 0x5d55, 0x5d56, 0x5d57, 0x5d58, 0x5d59, 0x5d5a, 0x5d5b, 0x5d5c, 0x5d5d, 0x5d5e, 0x5d5f, 0x5d60, 0x5d61, 0x5d62, 0x5d63, 0x5d64, 0x5d65, 0x5d66, 0x5d67, 0x5d68, 0x5d69, 0x5d6a, 0x5d6b, 0x5d6c, 0x5d6d, 0x5d6e, 0x5d6f, 0x5d70, 0x5d71, 0x5d72, 0x5d73, 0x5d74, 0x5d75, 0x5d76, 0x5d77, 0x5d78, 0x5d79, 0x5d7a, 0x5d7b, 0x5d7c, 0x5d7d, 0x5d7e, 0x5e21, 0x5e22, 0x5e23, 0x5e24, 0x5e25, 0x5e26, 0x5e27, 0x5e28, 0x5e29, 0x5e2a, 0x5e2b, 0x5e2c, 0x5e2d, 0x5e2e, 0x5e2f, 0x5e30, 0x5e31, 0x5e32, 0x5e33, 0x5e34, 0x5e35, 0x5e36, 0x5e37, 0x5e38, 0x5e39, 0x5e3f, 0x5e3a, 0x5e3b, 0x5e3c, 0x5e3d, 0x5e3e, 0x5e40, 0x5e41, 0x5e42, 0x5e43, 0x5e44, 0x5e45, 0x5e46, 0x5e47, 0x5e48, 0x5e49, 0x5e4e, 0x5e4a, 0x5e4b, 0x5e4c, 0x5e4d, 0x5e4f, 0x5e50, 0x5e51, 0x5e52, 0x5e53, 0x5e54, 0x5e55, 0x5e56, 0x5e57, 0x5e58, 0x5e59, 0x5e5a, 0x5e5b, 0x5e5c, 0x5e5d, 0x5e5e, 0x5e5f, 0x5e60, 0x5e61, 0x5e62, 0x5e63, 0x5e64, 0x5e65, 0x5e66, 0x5e67, 0x5e68, 0x5e69, 0x5e6a, 0x5e6b, 0x5e6c, 0x5e6d, 0x5e6e, 0x5e6f, 0x5e72, 0x5e70, 0x5e71, 0x5e73, 0x5e74, 0x5e75, 0x5e76, 0x5e77, 0x5e78, 0x5e79, 0x5e7a, 0x5e7b, 0x5e7c, 0x5e7d, 0x5e7e, 0x5f21, 0x5f22, 0x5f23, 0x5f24, 0x5f25, 0x5f26, 0x5f27, 0x5f28, 0x5f29, 0x5f2a, 0x5f2b, 0x5f2c, 0x5f2d, 0x5f2e, 0x5f2f, 0x5f30, 0x5f32, 0x5f31, 0x5f33, 0x5f34, 0x5f35, 0x5f36, 0x5f37, 0x5f38, 0x5f39, 0x5f3a, 0x5f3b, 0x5f3c, 0x5f3d, 0x5f3e, 0x5f3f, 0x5f40, 0x5f41, 0x5f42, 0x5f43, 0x5f44, 0x5f45, 0x5f46, 0x5f47, 0x5f48, 0x5f49, 0x5f4a, 0x5f4b, 0x5f4c, 0x5f4d, 0x5f4e, 0x5f4f, 0x5f50, 0x5f51, 0x5f52, 0x5f53, 0x5f54, 0x5f55, 0x5f56, 0x5f57, 0x5f58, 0x5f59, 0x5f5a, 0x5f5b, 0x5f5c, 0x5f5d, 0x5f6f, 0x5f5e, 0x5f5f, 0x5f60, 0x5f61, 0x5f62, 0x5f63, 0x5f64, 0x5f65, 0x5f66, 0x5f67, 0x5f68, 0x5f69, 0x5f6a, 0x5f6b, 0x5f6c, 0x5f6d, 0x5f6e, 0x5f70, 0x5f71, 0x5f72, 0x5f73, 0x5f74, 0x5f75, 0x5f76, 0x5f77, 0x5f78, 0x5f79, 0x5f7a, 0x5f7b, 0x5f7c, 0x5f7d, 0x5f7e, 0x6021, 0x6022, 0x6023, 0x6024, 0x6025, 0x6026, 0x6027, 0x6028, 0x6029, 0x602a, 0x602b, 0x602c, 0x602d, 0x602e, 0x602f, 0x6030, 0x6031, 0x6032, 0x6033, 0x6034, 0x6035, 0x6036, 0x6037, 0x6038, 0x6039, 0x603a, 0x603b, 0x603c, 0x603d, 0x603e, 0x603f, 0x6040, 0x6041, 0x6042, 0x6043, 0x6044, 0x6045, 0x6046, 0x6047, 0x6048, 0x6049, 0x604a, 0x604b, 0x604c, 0x604d, 0x604e, 0x604f, 0x6050, 0x6051, 0x6052, 0x6053, 0x6054, 0x6055, 0x6056, 0x6057, 0x6058, 0x6059, 0x605a, 0x605b, 0x605c, 0x605d, 0x6064, 0x605e, 0x605f, 0x6060, 0x6061, 0x6062, 0x6063, 0x6065, 0x6066, 0x6067, 0x6068, 0x6069, 0x606a, 0x606b, 0x606c, 0x606d, 0x606e, 0x606f, 0x6070, 0x6071, 0x6072, 0x6073, 0x6074, 0x6075, 0x6076, 0x6077, 0x6078, 0x6079, 0x607a, 0x607b, 0x607c, 0x607d, 0x607e, 0x6121, 0x6122, 0x6123, 0x6124, 0x6125, 0x6126, 0x6127, 0x6128, 0x6129, 0x612a, 0x612b, 0x612c, 0x612d, 0x612e, 0x612f, 0x6130, 0x6131, 0x6132, 0x6133, 0x6134, 0x6135, 0x6136, 0x6137, 0x6138, 0x6139, 0x613a, 0x613b, 0x613c, 0x613d, 0x613e, 0x613f, 0x6140, 0x6141, 0x6142, 0x6143, 0x6144, 0x6145, 0x6146, 0x6147, 0x6148, 0x6149, 0x614a, 0x614b, 0x614c, 0x614d, 0x614e, 0x614f, 0x6150, 0x6151, 0x6152, 0x6154, 0x6155, 0x6156, 0x6153, 0x6157, 0x6158, 0x6159, 0x615a, 0x615b, 0x615c, 0x615d, 0x615e, 0x615f, 0x6160, 0x6161, 0x6162, 0x6163, 0x6164, 0x6165, 0x6166, 0x6167, 0x6168, 0x6169, 0x616a, 0x616b, 0x616c, 0x616d, 0x616e, 0x616f, 0x6170, 0x6171, 0x6172, 0x6173, 0x6174, 0x6175, 0x6176, 0x6177, 0x6178, 0x6179, 0x617a, 0x617b, 0x617d, 0x617e, 0x6221, 0x6222, 0x6223, 0x6224, 0x617c, 0x622d, 0x6225, 0x6226, 0x6227, 0x6228, 0x6229, 0x622a, 0x622b, 0x622c, 0x622f, 0x6230, 0x6231, 0x6232, 0x622e, 0x6233, 0x6234, 0x6235, 0x6236, 0x6237, 0x6238, 0x6239, 0x623a, 0x623b, 0x623c, 0x623d, 0x623e, 0x623f, 0x6240, 0x6241, 0x6242, 0x6243, 0x6245, 0x6246, 0x6244, 0x6247, 0x6248, 0x6249, 0x624a, 0x624b, 0x624c, 0x624d, 0x624e, 0x624f, 0x6250, 0x6251, 0x6252, 0x6253, 0x6254, 0x6255, 0x6256, 0x6257, 0x6258, 0x6259, 0x625a, 0x625b, 0x625c, 0x625d, 0x625e, 0x625f, 0x6260, 0x6261, 0x6262, 0x6263, 0x6264, 0x6265, 0x6266, 0x6267, 0x6268, 0x6269, 0x626a, 0x626b, 0x626c, 0x626d, 0x626e, 0x626f, 0x6270, 0x6271, 0x6272, 0x6273, 0x6274, 0x6275, 0x6276, 0x6277, 0x6278, 0x6279, 0x627a, 0x627b, 0x627c, 0x627d, 0x627e, 0x6321, 0x6322, 0x6323, 0x6324, 0x6325, 0x6326, 0x6327, 0x6328, 0x6329, 0x632a, 0x632b, 0x632c, 0x632d, 0x632e, 0x632f, 0x6330, 0x6331, 0x6332, 0x6333, 0x6334, 0x6335, 0x6336, 0x6337, 0x6338, 0x6339, 0x633a, 0x633b, 0x633c, 0x633d, 0x633e, 0x633f, 0x6340, 0x6341, 0x6342, 0x6343, 0x6344, 0x6345, 0x6346, 0x6347, 0x6348, 0x6349, 0x634a, 0x634b, 0x634c, 0x634d, 0x634e, 0x634f, 0x6350, 0x6351, 0x6352, 0x6353, 0x6354, 0x6355, 0x6356, 0x6357, 0x6358, 0x6359, 0x635a, 0x635b, 0x635c, 0x635d, 0x635e, 0x635f, 0x6360, 0x6361, 0x6362, 0x6363, 0x6364, 0x6365, 0x6366, 0x6367, 0x6368, 0x6369, 0x636a, 0x636b, 0x636c, 0x636d, 0x636e, 0x636f, 0x6370, 0x6371, 0x6372, 0x6373, 0x6374, 0x6375, 0x6376, 0x6377, 0x6378, 0x6379, 0x637a, 0x637b, 0x637c, 0x637d, 0x637e, 0x6421, 0x6422, 0x6423, 0x6424, 0x6425, 0x6426, 0x6427, 0x6428, 0x6429, 0x642a, 0x642b, 0x642c, 0x642d, 0x642e, 0x642f, 0x6430, 0x6431, 0x6432, 0x6433, 0x6434, 0x6435, 0x6436, 0x6437, 0x6438, 0x6439, 0x643a, 0x643b, 0x643c, 0x643d, 0x643e, 0x643f, 0x6440, 0x6441, 0x6442, 0x6443, 0x6444, 0x6445, 0x6446, 0x6447, 0x6448, 0x6449, 0x644a, 0x644b, 0x644c, 0x644d, 0x644e, 0x644f, 0x6450, 0x6451, 0x6452, 0x6453, 0x6454, 0x6455, 0x6456, 0x6457, 0x6458, 0x6459, 0x645a, 0x645b, 0x645c, 0x645d, 0x645e, 0x645f, 0x6460, 0x6461, 0x6462, 0x6463, 0x6464, 0x6465, 0x6466, 0x6467, 0x6468, 0x6469, 0x646a, 0x646b, 0x646c, 0x646d, 0x646e, 0x646f, 0x6470, 0x6471, 0x6472, 0x6473, 0x6474, 0x6475, 0x6476, 0x6477, 0x6478, 0x6479, 0x647a, 0x647b, 0x647c, 0x647d, 0x647e, 0x6521, 0x6522, 0x6523, 0x6524, 0x6525, 0x6526, 0x6527, 0x6528, 0x6529, 0x652a, 0x652b, 0x652c, 0x652d, 0x652e, 0x652f, 0x6530, 0x6531, 0x6532, 0x6533, 0x6534, 0x6535, 0x653b, 0x6536, 0x6537, 0x6538, 0x6539, 0x653a, 0x653c, 0x653d, 0x653e, 0x653f, 0x6540, 0x6541, 0x6542, 0x6543, 0x6544, 0x6545, 0x6546, 0x6547, 0x6548, 0x6549, 0x654a, 0x654b, 0x654c, 0x654d, 0x654f, 0x6550, 0x654e, 0x6551, 0x6552, 0x6553, 0x6554, 0x6555, 0x6556, 0x6557, 0x6558, 0x6559, 0x655a, 0x655b, 0x655c, 0x655d, 0x655e, 0x655f, 0x6560, 0x6561, 0x6562, 0x6563, 0x6564, 0x6565, 0x6566, 0x6568, 0x6567, 0x6569, 0x656a, 0x656b, 0x656c, 0x656d, 0x656e, 0x656f, 0x6570, 0x6571, 0x6572, 0x6573, 0x6574, 0x6575, 0x6576, 0x6577, 0x6578, 0x6579, 0x657a, 0x657c, 0x657b, 0x657d, 0x657e, 0x6621, 0x6622, 0x6623, 0x6624, 0x6625, 0x6626, 0x6627, 0x6628, 0x6629, 0x662a, 0x662b, 0x662c, 0x662d, 0x662e, 0x662f, 0x6630, 0x6631, 0x6632, 0x6633, 0x6634, 0x6635, 0x6636, 0x6637, 0x6638, 0x6639, 0x663a, 0x663b, 0x663c, 0x663d, 0x663e, 0x663f, 0x6640, 0x6641, 0x6642, 0x6643, 0x6644, 0x6645, 0x6646, 0x6647, 0x6648, 0x6649, 0x664a, 0x664b, 0x664c, 0x664d, 0x664e, 0x664f, 0x6650, 0x6651, 0x6652, 0x6653, 0x6654, 0x6655, 0x6656, 0x6657, 0x6658, 0x6659, 0x665a, 0x665b, 0x665c, 0x665d, 0x665e, 0x665f, 0x6660, 0x6661, 0x6662, 0x6663, 0x6664, 0x6665, 0x6666, 0x6667, 0x6668, 0x6669, 0x666a, 0x666b, 0x666c, 0x666d, 0x666e, 0x666f, 0x6670, 0x6671, 0x6672, 0x6673, 0x6675, 0x6676, 0x6677, 0x6678, 0x6679, 0x667a, 0x667b, 0x667c, 0x667d, 0x667e, 0x6721, 0x6722, 0x6723, 0x6724, 0x6725, 0x6726, 0x6727, 0x6728, 0x6729, 0x672a, 0x672b, 0x672c, 0x672d, 0x672e, 0x672f, 0x6730, 0x6731, 0x6732, 0x6733, 0x6734, 0x6735, 0x6736, 0x6737, 0x6738, 0x6739, 0x673a, 0x673b, 0x673c, 0x673d, 0x673e, 0x673f, 0x6740, 0x6741, 0x6742, 0x6743, 0x6744, 0x6745, 0x6746, 0x6747, 0x6748, 0x6749, 0x674a, 0x674b, 0x674c, 0x674d, 0x674e, 0x674f, 0x6750, 0x6751, 0x6752, 0x6753, 0x6754, 0x6755, 0x6756, 0x6757, 0x6758, 0x6759, 0x675a, 0x675b, 0x675c, 0x675d, 0x675e, 0x675f, 0x6760, 0x6761, 0x6762, 0x6763, 0x6764, 0x6765, 0x6766, 0x676a, 0x6767, 0x6768, 0x6769, 0x676b, 0x676c, 0x676d, 0x676e, 0x676f, 0x6770, 0x6771, 0x6772, 0x6773, 0x6774, 0x6776, 0x6777, 0x6778, 0x6779, 0x6775, 0x677a, 0x677b, 0x677c, 0x677d, 0x6828, 0x677e, 0x6821, 0x6822, 0x6823, 0x6824, 0x6825, 0x6826, 0x6827, 0x6829, 0x682a, 0x682b, 0x682c, 0x682d, 0x682e, 0x682f, 0x6830, 0x6831, 0x6832, 0x6833, 0x6834, 0x6835, 0x6836, 0x6837, 0x6838, 0x6839, 0x683a, 0x683b, 0x683c, 0x683d, 0x683e, 0x683f, 0x6840, 0x6841, 0x6842, 0x6843, 0x6844, 0x6845, 0x6846, 0x6847, 0x6848, 0x6849, 0x684a, 0x684b, 0x684c, 0x684d, 0x684e, 0x684f, 0x6850, 0x6851, 0x6852, 0x6853, 0x6854, 0x6855, 0x6856, 0x6857, 0x6858, 0x6859, 0x685a, 0x685b, 0x685c, 0x685d, 0x685e, 0x685f, 0x6860, 0x6861, 0x6862, 0x6863, 0x6864, 0x6865, 0x6866, 0x6867, 0x6868, 0x6869, 0x686a, 0x686b, 0x686c, 0x686d, 0x686e, 0x686f, 0x6870, 0x6871, 0x6872, 0x6873, 0x6874, 0x6875, 0x6876, 0x6877, 0x6878, 0x6879, 0x687a, 0x687b, 0x687c, 0x687d, 0x687e, 0x6921, 0x6922, 0x6923, 0x6924, 0x6925, 0x6926, 0x6927, 0x6928, 0x6929, 0x692a, 0x692b, 0x692c, 0x692d, 0x692e, 0x692f, 0x6930, 0x6931, 0x6932, 0x6933, 0x6934, 0x6935, 0x6936, 0x6937, 0x6938, 0x6939, 0x693a, 0x693b, 0x693c, 0x693d, 0x693e, 0x693f, 0x6940, 0x6941, 0x6942, 0x6943, 0x6944, 0x6945, 0x6946, 0x6947, 0x6948, 0x6949, 0x694a, 0x694c, 0x694d, 0x694b, 0x694e, 0x694f, 0x6950, 0x6951, 0x6952, 0x6953, 0x6954, 0x6955, 0x6956, 0x6957, 0x6958, 0x6959, 0x695a, 0x695b, 0x695c, 0x695d, 0x695e, 0x695f, 0x6960, 0x6961, 0x6962, 0x6963, 0x6964, 0x6965, 0x6966, 0x6967, 0x6968, 0x6969, 0x696a, 0x696b, 0x696c, 0x696d, 0x696e, 0x696f, 0x6970, 0x6971, 0x6972, 0x6973, 0x6974, 0x6975, 0x6976, 0x6977, 0x6978, 0x6979, 0x697a, 0x697b, 0x697c, 0x697d, 0x697e, 0x6a21, 0x6a22, 0x6a23, 0x6a24, 0x6a25, 0x6a26, 0x6a27, 0x6a28, 0x6a29, 0x6a2a, 0x6a2b, 0x6a2c, 0x6a2d, 0x6a2e, 0x6a2f, 0x6a30, 0x6a31, 0x6a32, 0x6a33, 0x6a34, 0x6a35, 0x6a36, 0x6a37, 0x6a38, 0x6a39, 0x6a3a, 0x6a3b, 0x6a3c, 0x6a3d, 0x6a3e, 0x6a3f, 0x6a40, 0x6a41, 0x6a42, 0x6a43, 0x6a44, 0x6a45, 0x6a46, 0x6a47, 0x6a48, 0x6a49, 0x6a4a, 0x6a4b, 0x6a4c, 0x6a4d, 0x6a4e, 0x6a4f, 0x6a50, 0x6a51, 0x6a52, 0x6a53, 0x6a54, 0x6a55, 0x6a56, 0x6a57, 0x6a58, 0x6a59, 0x6a5a, 0x6a5b, 0x6a5c, 0x6a5d, 0x6a5e, 0x6a5f, 0x6a60, 0x6a61, 0x6a62, 0x6a63, 0x6a64, 0x6a65, 0x6a66, 0x6a67, 0x6a68, 0x6a69, 0x6a6a, 0x6a6b, 0x6a6c, 0x6a6d, 0x6a6e, 0x6a6f, 0x6a70, 0x6a71, 0x6a72, 0x6a73, 0x6a74, 0x6a75, 0x6a76, 0x6a77, 0x6a78, 0x6a79, 0x6a7a, 0x6a7b, 0x6a7c, 0x6a7d, 0x6a7e, 0x6b21, 0x6b22, 0x6b23, 0x6b24, 0x6b25, 0x6b26, 0x6b27, 0x6b28, 0x6b29, 0x6b2a, 0x6b2b, 0x6b2c, 0x6b2d, 0x6b2e, 0x6b2f, 0x6b30, 0x6b31, 0x6b32, 0x6b33, 0x6b34, 0x6b35, 0x6b36, 0x6b37, 0x6b38, 0x6b39, 0x6b3a, 0x6b3b, 0x6b3c, 0x6b3d, 0x6b3e, 0x6b3f, 0x6b40, 0x6b41, 0x6b42, 0x6b43, 0x6b44, 0x6b45, 0x6b46, 0x6b47, 0x6b48, 0x6b49, 0x6b50, 0x6b4a, 0x6b4b, 0x6b4c, 0x6b4d, 0x6b52, 0x6b4e, 0x6b4f, 0x6b51, 0x6b53, 0x6b54, 0x6b55, 0x6b56, 0x6b57, 0x6b58, 0x6b59, 0x6b5a, 0x6b5b, 0x6b5c, 0x6b5e, 0x6b5d, 0x6b5f, 0x6b60, 0x6b61, 0x6b62, 0x6b63, 0x6b64, 0x6b65, 0x6b66, 0x6b67, 0x6b68, 0x6b69, 0x6b6a, 0x6b6b, 0x6b6d, 0x6b6e, 0x6b6f, 0x6b6c, 0x6b70, 0x6b71, 0x6b72, 0x6b73, 0x6b74, 0x6b76, 0x6b75, 0x6b77, 0x6b78, 0x6b79, 0x6b7a, 0x6b7b, 0x6b7c, 0x6b7d, 0x6b7e, 0x6c21, 0x6c22, 0x6c23, 0x6c24, 0x6c25, 0x6c26, 0x6c27, 0x6c28, 0x6c29, 0x6c2a, 0x6c2b, 0x6c2c, 0x6c2d, 0x6c2e, 0x6c2f, 0x6c30, 0x6c31, 0x6c32, 0x6c33, 0x6c34, 0x6c35, 0x6c36, 0x6c37, 0x6c38, 0x6c39, 0x6c3a, 0x6c3b, 0x6c3c, 0x6c3d, 0x6c3e, 0x6c3f, 0x6c40, 0x6c41, 0x6c42, 0x6c43, 0x6c44, 0x6c45, 0x6c46, 0x6c47, 0x6c48, 0x6c49, 0x6c4a, 0x6c4b, 0x6c4c, 0x6c4e, 0x6c4f, 0x6c4d, 0x6c50, 0x6c51, 0x6c52, 0x6c53, 0x6c54, 0x6c55, 0x6c56, 0x6c57, 0x6c58, 0x6c59, 0x6c5a, 0x6c5b, 0x6c5c, 0x6c5d, 0x6c5e, 0x6c5f, 0x6c60, 0x6c61, 0x6c62, 0x6c63, 0x6c64, 0x6c65, 0x6c66, 0x6c67, 0x6c68, 0x6c69, 0x6c6a, 0x6c6b, 0x6c6c, 0x6c6d, 0x6c6e, 0x6c6f, 0x6c70, 0x6c71, 0x6c72, 0x6c73, 0x6c74, 0x6c75, 0x6c76, 0x6c77, 0x6c78, 0x6c79, 0x6c7a, 0x6c7b, 0x6c7c, 0x6c7d, 0x6c7e, 0x6d21, 0x6d22, 0x6d23, 0x6d24, 0x6d25, 0x6d26, 0x6d27, 0x6d28, 0x6d29, 0x6d2a, 0x6d2b, 0x6d2c, 0x6d2d, 0x6d2e, 0x6d2f, 0x6d30, 0x6d31, 0x6d32, 0x6d33, 0x6d34, 0x6d35, 0x6d36, 0x6d37, 0x6d38, 0x6d39, 0x6d3a, 0x6d3b, 0x6d3c, 0x6d3d, 0x6d3e, 0x6d3f, 0x6d40, 0x6d41, 0x6d42, 0x6d43, 0x6d44, 0x6d45, 0x6d46, 0x6d47, 0x6d48, 0x6d49, 0x6d4a, 0x6d4b, 0x6d4c, 0x6d4d, 0x6d4e, 0x6d4f, 0x6d50, 0x6d51, 0x6d52, 0x6d53, 0x6d54, 0x6d55, 0x6d56, 0x6d57, 0x6d58, 0x6d59, 0x6d5a, 0x6d5b, 0x6d5c, 0x6d5d, 0x6d5e, 0x6d5f, 0x6d60, 0x6d61, 0x6d62, 0x6d63, }; static const Summary16 jisx0212_uni2indx_page00[70] = { /* 0x0000 */ { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x4000 }, { 1, 0x0000 }, { 1, 0x0000 }, { 1, 0xc652 }, { 8, 0x8500 }, { 11, 0xffff }, { 27, 0xff7e }, { 41, 0xffff }, { 57, 0xff7f }, /* 0x0100 */ { 72, 0xffff }, { 88, 0xffcf }, { 102, 0xcff7 }, { 115, 0xffff }, { 131, 0x3fff }, { 145, 0xffff }, { 161, 0xffff }, { 177, 0x7fff }, { 192, 0x0000 }, { 192, 0x0000 }, { 192, 0x0000 }, { 192, 0x0000 }, { 192, 0xe000 }, { 195, 0x1fff }, { 208, 0x0000 }, { 208, 0x0020 }, /* 0x0200 */ { 209, 0x0000 }, { 209, 0x0000 }, { 209, 0x0000 }, { 209, 0x0000 }, { 209, 0x0000 }, { 209, 0x0000 }, { 209, 0x0000 }, { 209, 0x0000 }, { 209, 0x0000 }, { 209, 0x0000 }, { 209, 0x0000 }, { 209, 0x0000 }, { 209, 0x0080 }, { 210, 0x2f00 }, { 215, 0x0000 }, { 215, 0x0000 }, /* 0x0300 */ { 215, 0x0000 }, { 215, 0x0000 }, { 215, 0x0000 }, { 215, 0x0000 }, { 215, 0x0000 }, { 215, 0x0000 }, { 215, 0x0000 }, { 215, 0x0000 }, { 215, 0xd770 }, { 224, 0x0001 }, { 225, 0xfc00 }, { 231, 0x0001 }, { 232, 0x7c04 }, { 238, 0x0000 }, { 238, 0x0000 }, { 238, 0x0000 }, /* 0x0400 */ { 238, 0xdffc }, { 251, 0x0000 }, { 251, 0x0000 }, { 251, 0x0000 }, { 251, 0x0000 }, { 251, 0xdffc }, }; static const Summary16 jisx0212_uni2indx_page21[3] = { /* 0x2100 */ { 264, 0x0000 }, { 264, 0x0040 }, { 265, 0x0004 }, }; static const Summary16 jisx0212_uni2indx_page4e[1307] = { /* 0x4e00 */ { 266, 0x1034 }, { 270, 0x8004 }, { 272, 0xc918 }, { 278, 0x0021 }, { 280, 0x0093 }, { 284, 0x1402 }, { 287, 0x0308 }, { 290, 0x8230 }, { 294, 0x2000 }, { 295, 0x20c0 }, { 298, 0x8000 }, { 299, 0x0200 }, { 300, 0x0008 }, { 301, 0x0c01 }, { 304, 0x8107 }, { 309, 0xe02a }, /* 0x4f00 */ { 315, 0x190d }, { 321, 0x02e4 }, { 326, 0x4000 }, { 327, 0x4aaa }, { 334, 0x1b05 }, { 340, 0x8154 }, { 345, 0x5409 }, { 350, 0x6782 }, { 357, 0x5636 }, { 365, 0xc69d }, { 374, 0x0000 }, { 374, 0x7a84 }, { 381, 0xbb63 }, { 391, 0x1004 }, { 393, 0x0005 }, { 395, 0xb005 }, /* 0x5000 */ { 400, 0x5493 }, { 407, 0x7989 }, { 415, 0x4084 }, { 418, 0x082d }, { 423, 0x5467 }, { 431, 0x828e }, { 437, 0x24cd }, { 444, 0x0003 }, { 446, 0xc45a }, { 453, 0xd85d }, { 462, 0x8407 }, { 467, 0x2601 }, { 471, 0x5099 }, { 477, 0xb119 }, { 484, 0x8354 }, { 490, 0x4446 }, /* 0x5100 */ { 495, 0x79c8 }, { 503, 0x7a81 }, { 510, 0xb188 }, { 516, 0x033a }, { 522, 0x8404 }, { 525, 0x81a8 }, { 530, 0x0050 }, { 532, 0x4000 }, { 533, 0x4818 }, { 537, 0x2100 }, { 539, 0x200a }, { 542, 0xd500 }, { 547, 0x8104 }, { 550, 0x412e }, { 556, 0x4024 }, { 559, 0x009c }, /* 0x5200 */ { 563, 0x0026 }, { 566, 0x016c }, { 571, 0x0104 }, { 573, 0x1026 }, { 577, 0x0220 }, { 579, 0x95a0 }, { 585, 0x4043 }, { 589, 0x0380 }, { 592, 0x1425 }, { 597, 0x15e8 }, { 604, 0x80f0 }, { 609, 0x2dc1 }, { 616, 0x9151 }, { 622, 0x1852 }, { 627, 0x1722 }, { 633, 0x00d3 }, /* 0x5300 */ { 638, 0x1c09 }, { 643, 0xd90a }, { 650, 0x3ba0 }, { 657, 0x7025 }, { 663, 0x1804 }, { 666, 0x0a00 }, { 668, 0x302a }, { 673, 0x4204 }, { 676, 0x4188 }, { 680, 0x2218 }, { 684, 0x8c12 }, { 689, 0x25b4 }, { 696, 0x8021 }, { 699, 0x642c }, { 705, 0x00c1 }, { 708, 0x0020 }, /* 0x5400 */ { 709, 0x0004 }, { 710, 0x0408 }, { 712, 0x8582 }, { 717, 0x0032 }, { 720, 0xa098 }, { 725, 0x4000 }, { 726, 0x6ad4 }, { 734, 0x8010 }, { 736, 0x232a }, { 742, 0x9062 }, { 747, 0x66c2 }, { 754, 0x8e82 }, { 760, 0x6440 }, { 764, 0x0000 }, { 764, 0x9401 }, { 768, 0xd040 }, /* 0x5500 */ { 772, 0x7323 }, { 780, 0x0020 }, { 781, 0x0c00 }, { 783, 0x3864 }, { 789, 0x2682 }, { 794, 0x4d03 }, { 800, 0x0053 }, { 804, 0x8000 }, { 805, 0xc146 }, { 811, 0x009e }, { 816, 0x2018 }, { 819, 0x8004 }, { 821, 0x5a4a }, { 828, 0x498e }, { 835, 0x0204 }, { 837, 0x8040 }, /* 0x5600 */ { 839, 0xe520 }, { 845, 0x0207 }, { 849, 0x1000 }, { 850, 0xbaa9 }, { 859, 0xaa5b }, { 868, 0x4010 }, { 870, 0xa24f }, { 878, 0x0026 }, { 881, 0x1930 }, { 886, 0xe620 }, { 892, 0x3bc0 }, { 899, 0x408a }, { 903, 0xbe20 }, { 910, 0xb201 }, { 915, 0x29f2 }, { 923, 0x00c2 }, /* 0x5700 */ { 926, 0x1486 }, { 931, 0x2c22 }, { 936, 0xd63d }, { 946, 0xe018 }, { 951, 0x3060 }, { 955, 0x0004 }, { 956, 0xe9a4 }, { 964, 0x5ebb }, { 975, 0x100a }, { 978, 0xf6b0 }, { 987, 0x1382 }, { 992, 0x2100 }, { 994, 0x9180 }, { 998, 0x6020 }, { 1001, 0x22d2 }, { 1007, 0xe161 }, /* 0x5800 */ { 1014, 0x3318 }, { 1020, 0xc800 }, { 1023, 0x20c1 }, { 1027, 0x8204 }, { 1030, 0xb200 }, { 1034, 0x8021 }, { 1037, 0x0192 }, { 1041, 0x9100 }, { 1044, 0xb783 }, { 1053, 0x2051 }, { 1057, 0x0247 }, { 1062, 0x1006 }, { 1065, 0x6114 }, { 1070, 0x2455 }, { 1076, 0x0206 }, { 1079, 0x0008 }, /* 0x5900 */ { 1080, 0x1860 }, { 1084, 0x201c }, { 1088, 0x811a }, { 1093, 0x8069 }, { 1098, 0x0048 }, { 1100, 0xea0c }, { 1107, 0xa80a }, { 1112, 0x1a64 }, { 1118, 0x5800 }, { 1121, 0x80a4 }, { 1125, 0xe090 }, { 1130, 0x1489 }, { 1135, 0x251a }, { 1141, 0xe004 }, { 1145, 0xc098 }, { 1150, 0x0096 }, /* 0x5a00 */ { 1154, 0x7011 }, { 1159, 0x400c }, { 1162, 0x2598 }, { 1168, 0x0001 }, { 1169, 0x11b0 }, { 1174, 0x4021 }, { 1177, 0x20a8 }, { 1181, 0x4c80 }, { 1185, 0x0800 }, { 1186, 0xd249 }, { 1193, 0x1085 }, { 1197, 0x8d2e }, { 1205, 0x8150 }, { 1209, 0x1400 }, { 1211, 0x4421 }, { 1215, 0x2060 }, /* 0x5b00 */ { 1218, 0x0103 }, { 1221, 0x2a80 }, { 1225, 0x2022 }, { 1228, 0x0110 }, { 1230, 0x1802 }, { 1233, 0x4044 }, { 1236, 0xc100 }, { 1239, 0xf000 }, { 1243, 0x4452 }, { 1248, 0x005b }, { 1253, 0xb300 }, { 1258, 0x1486 }, { 1263, 0xa003 }, { 1267, 0x07c0 }, { 1272, 0x8001 }, { 1274, 0x2012 }, /* 0x5c00 */ { 1277, 0x1000 }, { 1278, 0xc080 }, { 1281, 0x5a48 }, { 1287, 0x0065 }, { 1291, 0x0000 }, { 1291, 0x1600 }, { 1294, 0x238c }, { 1300, 0x3c31 }, { 1307, 0x8580 }, { 1311, 0xa004 }, { 1314, 0x044d }, { 1319, 0x0434 }, { 1323, 0x0a00 }, { 1325, 0x2084 }, { 1328, 0x4000 }, { 1329, 0x0016 }, /* 0x5d00 */ { 1332, 0x2042 }, { 1335, 0x0004 }, { 1336, 0x08d8 }, { 1341, 0xa212 }, { 1346, 0x054c }, { 1351, 0x8222 }, { 1355, 0x2417 }, { 1361, 0xc601 }, { 1366, 0x050a }, { 1370, 0x8a3c }, { 1377, 0x0881 }, { 1380, 0x0315 }, { 1385, 0x4888 }, { 1389, 0x0301 }, { 1392, 0x0211 }, { 1395, 0x0300 }, /* 0x5e00 */ { 1397, 0x2081 }, { 1400, 0x8134 }, { 1405, 0x4101 }, { 1408, 0x4024 }, { 1411, 0x0a00 }, { 1413, 0x5943 }, { 1420, 0x7d00 }, { 1426, 0x0001 }, { 1427, 0x4801 }, { 1430, 0x0000 }, { 1430, 0x1534 }, { 1436, 0xe00a }, { 1441, 0x5840 }, { 1445, 0x5036 }, { 1451, 0x0820 }, { 1453, 0x0000 }, /* 0x5f00 */ { 1453, 0x41c4 }, { 1458, 0x3200 }, { 1461, 0x591e }, { 1469, 0xa851 }, { 1475, 0x20b1 }, { 1480, 0x0911 }, { 1484, 0x8099 }, { 1489, 0x6534 }, { 1496, 0xa200 }, { 1499, 0x3040 }, { 1502, 0x9894 }, { 1508, 0x0103 }, { 1511, 0x0b90 }, { 1516, 0x401f }, { 1522, 0xf706 }, { 1531, 0x144c }, /* 0x6000 */ { 1536, 0x2480 }, { 1539, 0x8598 }, { 1545, 0x2010 }, { 1547, 0x0028 }, { 1549, 0x1381 }, { 1554, 0x20d2 }, { 1559, 0x0082 }, { 1561, 0xc002 }, { 1564, 0x4544 }, { 1569, 0x612a }, { 1575, 0x0134 }, { 1579, 0x4883 }, { 1584, 0xcf14 }, { 1592, 0x6a30 }, { 1598, 0x0024 }, { 1600, 0x3124 }, /* 0x6100 */ { 1605, 0x1484 }, { 1609, 0x52df }, { 1619, 0x0c04 }, { 1622, 0x02e3 }, { 1628, 0x0262 }, { 1632, 0x4000 }, { 1633, 0x1001 }, { 1635, 0x9904 }, { 1640, 0x281b }, { 1646, 0xb18c }, { 1653, 0x2521 }, { 1658, 0x1300 }, { 1661, 0xc007 }, { 1666, 0xf020 }, { 1671, 0xb2a6 }, { 1679, 0x0000 }, /* 0x6200 */ { 1679, 0x009a }, { 1683, 0x1028 }, { 1686, 0x0a8d }, { 1692, 0x2200 }, { 1694, 0x105c }, { 1699, 0x1457 }, { 1706, 0xa010 }, { 1709, 0x2408 }, { 1712, 0xe000 }, { 1715, 0x0001 }, { 1716, 0x0140 }, { 1718, 0xc4c8 }, { 1724, 0x4010 }, { 1726, 0x0460 }, { 1729, 0x0400 }, { 1730, 0x3014 }, /* 0x6300 */ { 1734, 0x2c18 }, { 1739, 0x0149 }, { 1743, 0x2600 }, { 1746, 0x1260 }, { 1750, 0x4c5e }, { 1758, 0x091c }, { 1763, 0x3060 }, { 1767, 0xb132 }, { 1774, 0x0494 }, { 1778, 0x4631 }, { 1784, 0xe050 }, { 1789, 0x2000 }, { 1790, 0x4122 }, { 1794, 0x103a }, { 1799, 0x1421 }, { 1803, 0x032c }, /* 0x6400 */ { 1808, 0x0600 }, { 1810, 0x4115 }, { 1815, 0x8635 }, { 1822, 0xa021 }, { 1826, 0x8800 }, { 1828, 0xbc1e }, { 1837, 0x200b }, { 1841, 0x2818 }, { 1845, 0x80a0 }, { 1848, 0xab03 }, { 1855, 0x114a }, { 1860, 0xe008 }, { 1864, 0x5e10 }, { 1870, 0x00a3 }, { 1874, 0x2630 }, { 1879, 0x88a1 }, /* 0x6500 */ { 1884, 0x8712 }, { 1890, 0xca58 }, { 1897, 0x4244 }, { 1901, 0x3402 }, { 1905, 0x0288 }, { 1908, 0x8015 }, { 1912, 0x0881 }, { 1915, 0x2400 }, { 1917, 0x0422 }, { 1920, 0x2124 }, { 1924, 0x4049 }, { 1928, 0x801c }, { 1932, 0x4304 }, { 1936, 0x8151 }, { 1941, 0x0000 }, { 1941, 0xc235 }, /* 0x6600 */ { 1948, 0x2311 }, { 1953, 0x6066 }, { 1959, 0x5e5e }, { 1969, 0x028b }, { 1974, 0x5461 }, { 1980, 0x1b82 }, { 1986, 0x1c03 }, { 1991, 0xdba8 }, { 2000, 0x3801 }, { 2004, 0x9e05 }, { 2011, 0x2011 }, { 2014, 0x8826 }, { 2019, 0xd10d }, { 2026, 0x8810 }, { 2029, 0x5900 }, { 2033, 0x0c00 }, /* 0x6700 */ { 2035, 0x40a0 }, { 2038, 0x1208 }, { 2041, 0x0005 }, { 2043, 0x4008 }, { 2045, 0x11a0 }, { 2049, 0x2030 }, { 2052, 0x5040 }, { 2055, 0x0850 }, { 2058, 0xc012 }, { 2062, 0x0b4a }, { 2068, 0x0000 }, { 2068, 0x3827 }, { 2075, 0x032d }, { 2081, 0x1284 }, { 2085, 0x0042 }, { 2087, 0x02c5 }, /* 0x6800 */ { 2092, 0x0000 }, { 2092, 0xa210 }, { 2096, 0xb180 }, { 2101, 0x880b }, { 2106, 0x1430 }, { 2110, 0x09a4 }, { 2115, 0xc800 }, { 2118, 0x1e27 }, { 2126, 0x0154 }, { 2130, 0x1540 }, { 2134, 0x462a }, { 2140, 0x0804 }, { 2142, 0x9120 }, { 2146, 0x324b }, { 2153, 0x3d20 }, { 2159, 0x3863 }, /* 0x6900 */ { 2166, 0x0640 }, { 2169, 0x00cb }, { 2174, 0x0000 }, { 2174, 0x092a }, { 2179, 0x4224 }, { 2183, 0x0880 }, { 2185, 0x1378 }, { 2192, 0x8c07 }, { 2198, 0x2001 }, { 2200, 0x0144 }, { 2203, 0xa962 }, { 2210, 0x1580 }, { 2214, 0x0120 }, { 2216, 0x00c2 }, { 2219, 0xc024 }, { 2223, 0x402a }, /* 0x6a00 */ { 2227, 0x800b }, { 2231, 0x2422 }, { 2235, 0x0111 }, { 2238, 0xc895 }, { 2245, 0x4660 }, { 2250, 0x0867 }, { 2256, 0x0490 }, { 2259, 0x400a }, { 2262, 0x0aca }, { 2268, 0xe802 }, { 2273, 0x8820 }, { 2276, 0xe013 }, { 2282, 0x1340 }, { 2286, 0x3071 }, { 2292, 0x1090 }, { 2295, 0x3007 }, /* 0x6b00 */ { 2300, 0x82cc }, { 2306, 0x4883 }, { 2311, 0x9910 }, { 2316, 0x8860 }, { 2320, 0x2440 }, { 2323, 0x2144 }, { 2327, 0x4881 }, { 2331, 0x6021 }, { 2335, 0x0024 }, { 2337, 0x8880 }, { 2340, 0x730d }, { 2348, 0x6301 }, { 2353, 0x1218 }, { 2357, 0x0440 }, { 2359, 0x40ca }, { 2364, 0x8282 }, /* 0x6c00 */ { 2368, 0x6234 }, { 2374, 0x8205 }, { 2378, 0x51c0 }, { 2383, 0x8c68 }, { 2389, 0xac00 }, { 2393, 0x1a14 }, { 2398, 0xa880 }, { 2402, 0x0b50 }, { 2407, 0x02e0 }, { 2411, 0x91b0 }, { 2417, 0x0000 }, { 2417, 0x0015 }, { 2420, 0xa044 }, { 2424, 0x1457 }, { 2431, 0x5a81 }, { 2437, 0x0014 }, /* 0x6d00 */ { 2439, 0xc490 }, { 2444, 0x040a }, { 2447, 0xc1c0 }, { 2452, 0x9202 }, { 2456, 0x0000 }, { 2456, 0xc080 }, { 2459, 0x80a2 }, { 2463, 0x1001 }, { 2465, 0x0084 }, { 2467, 0x01d6 }, { 2473, 0x1400 }, { 2475, 0xa290 }, { 2480, 0xc510 }, { 2485, 0xa840 }, { 2489, 0x8225 }, { 2494, 0x1051 }, /* 0x6e00 */ { 2498, 0x0011 }, { 2500, 0x4000 }, { 2501, 0x0084 }, { 2503, 0x1a44 }, { 2508, 0x8b30 }, { 2514, 0x709e }, { 2522, 0x010c }, { 2525, 0x2808 }, { 2528, 0x2000 }, { 2529, 0x0208 }, { 2531, 0x6081 }, { 2535, 0x880a }, { 2539, 0xe58b }, { 2548, 0x0000 }, { 2548, 0x6800 }, { 2551, 0x2a00 }, /* 0x6f00 */ { 2554, 0x3510 }, { 2559, 0x0d40 }, { 2563, 0xa640 }, { 2568, 0x1849 }, { 2573, 0x8000 }, { 2574, 0x668e }, { 2582, 0x1106 }, { 2586, 0x6000 }, { 2588, 0x3988 }, { 2594, 0x845d }, { 2601, 0xc1e1 }, { 2608, 0x1061 }, { 2612, 0x05a0 }, { 2616, 0x4400 }, { 2618, 0x0300 }, { 2620, 0x3221 }, /* 0x7000 */ { 2625, 0x20e1 }, { 2630, 0x0080 }, { 2631, 0x8009 }, { 2634, 0x1290 }, { 2638, 0x4f18 }, { 2645, 0x6030 }, { 2649, 0x5030 }, { 2653, 0x4060 }, { 2656, 0x0062 }, { 2659, 0x09f0 }, { 2665, 0x0810 }, { 2667, 0x0093 }, { 2671, 0x0400 }, { 2672, 0x117a }, { 2679, 0x0010 }, { 2680, 0x0400 }, /* 0x7100 */ { 2681, 0x98f8 }, { 2689, 0x4000 }, { 2690, 0xa801 }, { 2694, 0x0103 }, { 2697, 0x0ce2 }, { 2703, 0x5485 }, { 2709, 0x0101 }, { 2711, 0x0200 }, { 2712, 0x10a1 }, { 2716, 0x0c04 }, { 2719, 0x8005 }, { 2722, 0x840d }, { 2727, 0x1813 }, { 2732, 0x1648 }, { 2737, 0x0000 }, { 2737, 0x4100 }, /* 0x7200 */ { 2739, 0x0381 }, { 2743, 0xa488 }, { 2748, 0x8810 }, { 2751, 0x0310 }, { 2754, 0xc02e }, { 2760, 0x5469 }, { 2767, 0xc909 }, { 2773, 0x9982 }, { 2779, 0x6210 }, { 2783, 0x0808 }, { 2785, 0x6100 }, { 2788, 0x4012 }, { 2791, 0x1282 }, { 2795, 0x8160 }, { 2799, 0x0020 }, { 2800, 0x4c18 }, /* 0x7300 */ { 2805, 0x28b4 }, { 2811, 0x430c }, { 2816, 0x1194 }, { 2821, 0x2c26 }, { 2827, 0x2008 }, { 2829, 0xe145 }, { 2836, 0xdac1 }, { 2844, 0x1282 }, { 2848, 0x406b }, { 2854, 0xd1a9 }, { 2862, 0x2c65 }, { 2869, 0xb2a0 }, { 2875, 0x9a60 }, { 2881, 0x224c }, { 2886, 0x02ca }, { 2891, 0xaeb0 }, /* 0x7400 */ { 2899, 0x0493 }, { 2904, 0x0c02 }, { 2907, 0xff50 }, { 2917, 0x0203 }, { 2920, 0x28d9 }, { 2927, 0x2086 }, { 2931, 0x69c4 }, { 2938, 0x0006 }, { 2940, 0x82e3 }, { 2947, 0x9707 }, { 2955, 0xcf4b }, { 2965, 0x8a26 }, { 2971, 0x1300 }, { 2974, 0xcd09 }, { 2981, 0x8d10 }, { 2986, 0x9c10 }, /* 0x7500 */ { 2991, 0x0040 }, { 2992, 0x00c4 }, { 2995, 0x8693 }, { 3002, 0xe240 }, { 3007, 0x4189 }, { 3012, 0xc085 }, { 3017, 0x8002 }, { 3019, 0x7e02 }, { 3026, 0x0022 }, { 3028, 0x122d }, { 3034, 0x0014 }, { 3036, 0x8410 }, { 3039, 0xd053 }, { 3046, 0x9080 }, { 3049, 0xd093 }, { 3056, 0x0202 }, /* 0x7600 */ { 3058, 0x959d }, { 3067, 0x7a6c }, { 3076, 0x2268 }, { 3081, 0x172c }, { 3088, 0x0e3b }, { 3096, 0x8220 }, { 3099, 0xe030 }, { 3104, 0x0012 }, { 3106, 0x3022 }, { 3110, 0xb820 }, { 3115, 0x25fd }, { 3125, 0x2000 }, { 3126, 0x5a22 }, { 3132, 0x0210 }, { 3134, 0x1141 }, { 3138, 0x1243 }, /* 0x7700 */ { 3143, 0x4441 }, { 3147, 0x16b4 }, { 3154, 0xe104 }, { 3159, 0x6270 }, { 3165, 0xe464 }, { 3172, 0xd0c4 }, { 3178, 0x1495 }, { 3184, 0x241d }, { 3190, 0x3011 }, { 3194, 0x8470 }, { 3199, 0xc484 }, { 3204, 0x4022 }, { 3207, 0x0208 }, { 3209, 0xc226 }, { 3215, 0x1451 }, { 3220, 0x0913 }, /* 0x7800 */ { 3225, 0x6260 }, { 3230, 0x2002 }, { 3232, 0x600e }, { 3237, 0x00a1 }, { 3240, 0x5198 }, { 3246, 0x5004 }, { 3249, 0x451b }, { 3256, 0x4400 }, { 3258, 0x8400 }, { 3260, 0xe110 }, { 3265, 0x3112 }, { 3270, 0xa80f }, { 3277, 0x5380 }, { 3282, 0x886c }, { 3288, 0x0453 }, { 3293, 0x8ccc }, /* 0x7900 */ { 3300, 0x1041 }, { 3303, 0xd401 }, { 3308, 0x22a1 }, { 3313, 0xa832 }, { 3319, 0x8c70 }, { 3325, 0x1912 }, { 3330, 0x0a80 }, { 3333, 0x5a04 }, { 3338, 0x1800 }, { 3340, 0x197a }, { 3348, 0x8b02 }, { 3353, 0x0912 }, { 3357, 0x8594 }, { 3363, 0x6450 }, { 3368, 0x2c25 }, { 3374, 0x1102 }, /* 0x7a00 */ { 3377, 0x168c }, { 3383, 0x4822 }, { 3387, 0xa882 }, { 3392, 0x0731 }, { 3398, 0x11b0 }, { 3403, 0xb260 }, { 3409, 0x24a1 }, { 3414, 0x4120 }, { 3417, 0x0c65 }, { 3423, 0x4013 }, { 3427, 0x1009 }, { 3430, 0x1a28 }, { 3435, 0x5240 }, { 3439, 0x0802 }, { 3441, 0x1b00 }, { 3445, 0x6812 }, /* 0x7b00 */ { 3450, 0x0080 }, { 3451, 0x8010 }, { 3453, 0xee88 }, { 3461, 0xa013 }, { 3466, 0x4083 }, { 3470, 0x0020 }, { 3471, 0xa651 }, { 3478, 0x008c }, { 3481, 0x4210 }, { 3484, 0x4843 }, { 3489, 0x9021 }, { 3493, 0x3c65 }, { 3501, 0x0524 }, { 3505, 0x0ed0 }, { 3511, 0x0500 }, { 3513, 0x5734 }, /* 0x7c00 */ { 3521, 0xda5e }, { 3531, 0x0a00 }, { 3533, 0x1161 }, { 3538, 0x065a }, { 3544, 0x0440 }, { 3546, 0x7e2e }, { 3556, 0x628a }, { 3562, 0x3205 }, { 3567, 0x80c0 }, { 3570, 0x4010 }, { 3572, 0x0041 }, { 3574, 0x9cc1 }, { 3581, 0xa390 }, { 3587, 0x26b8 }, { 3594, 0x0a40 }, { 3597, 0x0020 }, /* 0x7d00 */ { 3598, 0x8388 }, { 3603, 0x604e }, { 3609, 0x2448 }, { 3613, 0x7002 }, { 3617, 0x2183 }, { 3622, 0x368a }, { 3629, 0x04a0 }, { 3632, 0x8d01 }, { 3637, 0x396e }, { 3646, 0x60c2 }, { 3651, 0x04c0 }, { 3654, 0x02c8 }, { 3658, 0x707c }, { 3666, 0x0280 }, { 3668, 0x2c64 }, { 3674, 0x0662 }, /* 0x7e00 */ { 3679, 0x0101 }, { 3681, 0x30a3 }, { 3687, 0xb181 }, { 3693, 0x8048 }, { 3696, 0x40b0 }, { 3700, 0x8105 }, { 3704, 0xc826 }, { 3710, 0x4108 }, { 3713, 0x24c2 }, { 3718, 0x6522 }, { 3724, 0x0000 }, { 3724, 0x0000 }, { 3724, 0x0000 }, { 3724, 0x0000 }, { 3724, 0x0000 }, { 3724, 0x0000 }, /* 0x7f00 */ { 3724, 0x0000 }, { 3724, 0x0000 }, { 3724, 0x0000 }, { 3724, 0xf800 }, { 3729, 0x8098 }, { 3733, 0x380c }, { 3738, 0x207a }, { 3744, 0xe002 }, { 3748, 0xa801 }, { 3752, 0x10c3 }, { 3757, 0x2446 }, { 3762, 0x9010 }, { 3765, 0xc109 }, { 3770, 0x8800 }, { 3772, 0xd128 }, { 3778, 0xe404 }, /* 0x8000 */ { 3783, 0xe580 }, { 3789, 0xe05a }, { 3796, 0x5051 }, { 3801, 0x56b1 }, { 3809, 0x0011 }, { 3811, 0x0000 }, { 3811, 0x2051 }, { 3815, 0x0022 }, { 3817, 0x4102 }, { 3820, 0x5000 }, { 3822, 0x08c0 }, { 3825, 0x0300 }, { 3827, 0xa100 }, { 3830, 0x01b4 }, { 3835, 0x6001 }, { 3838, 0x464d }, /* 0x8100 */ { 3845, 0x0808 }, { 3847, 0x51c0 }, { 3852, 0x1091 }, { 3856, 0x1421 }, { 3860, 0x14a0 }, { 3864, 0x0084 }, { 3866, 0xa383 }, { 3873, 0x0080 }, { 3874, 0x4872 }, { 3880, 0x4941 }, { 3885, 0x4004 }, { 3887, 0x0814 }, { 3890, 0xcc28 }, { 3896, 0x68a0 }, { 3901, 0x1812 }, { 3905, 0xa367 }, /* 0x8200 */ { 3914, 0x8009 }, { 3917, 0x2618 }, { 3922, 0x0106 }, { 3925, 0x0414 }, { 3928, 0xc878 }, { 3935, 0x1042 }, { 3938, 0x2089 }, { 3942, 0xa810 }, { 3946, 0x469b }, { 3954, 0x0d52 }, { 3960, 0x479b }, { 3969, 0xd495 }, { 3977, 0x0040 }, { 3978, 0x0421 }, { 3981, 0xa515 }, { 3988, 0x60c0 }, /* 0x8300 */ { 3992, 0x0d83 }, { 3998, 0xe800 }, { 4002, 0x7006 }, { 4007, 0x3489 }, { 4013, 0x609c }, { 4019, 0x00fa }, { 4025, 0x0000 }, { 4025, 0xa101 }, { 4029, 0x2055 }, { 4034, 0x3b34 }, { 4042, 0x32c0 }, { 4047, 0xc000 }, { 4049, 0x8281 }, { 4053, 0x2013 }, { 4057, 0x0500 }, { 4059, 0x1340 }, /* 0x8400 */ { 4063, 0x8442 }, { 4067, 0x0222 }, { 4070, 0x8000 }, { 4071, 0x0200 }, { 4072, 0xa5a0 }, { 4078, 0x1746 }, { 4085, 0x04b1 }, { 4090, 0x3159 }, { 4097, 0x0022 }, { 4099, 0x402c }, { 4103, 0x8740 }, { 4108, 0x6412 }, { 4113, 0x9185 }, { 4119, 0x1008 }, { 4121, 0x8480 }, { 4124, 0x2c87 }, /* 0x8500 */ { 4131, 0x508c }, { 4136, 0x5001 }, { 4139, 0x8cbc }, { 4147, 0x805c }, { 4152, 0x8040 }, { 4154, 0xf24f }, { 4164, 0x8817 }, { 4170, 0xae00 }, { 4175, 0x9a62 }, { 4182, 0xa108 }, { 4186, 0x20a5 }, { 4191, 0xf1d0 }, { 4199, 0x4c84 }, { 4204, 0x8500 }, { 4207, 0x2141 }, { 4211, 0x9048 }, /* 0x8600 */ { 4215, 0x6031 }, { 4220, 0x4b07 }, { 4227, 0x0282 }, { 4230, 0x3540 }, { 4235, 0x0047 }, { 4239, 0x23cc }, { 4246, 0x921f }, { 4254, 0x04e0 }, { 4258, 0x2100 }, { 4260, 0x1542 }, { 4265, 0x21c2 }, { 4270, 0x83ba }, { 4278, 0x002b }, { 4282, 0x14a6 }, { 4288, 0x00a9 }, { 4292, 0x3400 }, /* 0x8700 */ { 4295, 0xc8b0 }, { 4301, 0xc219 }, { 4307, 0xc10a }, { 4312, 0x7606 }, { 4319, 0x2029 }, { 4323, 0x2100 }, { 4325, 0x8032 }, { 4329, 0x0806 }, { 4332, 0x1bf8 }, { 4341, 0x43a9 }, { 4348, 0x7089 }, { 4354, 0xc022 }, { 4358, 0x4702 }, { 4363, 0x9660 }, { 4369, 0x2c1c }, { 4375, 0x850a }, /* 0x8800 */ { 4380, 0x0e4a }, { 4386, 0xdf1d }, { 4397, 0x6100 }, { 4400, 0x1425 }, { 4405, 0x4f2a }, { 4413, 0x9562 }, { 4420, 0x0211 }, { 4423, 0x0a02 }, { 4426, 0x0001 }, { 4427, 0x9d00 }, { 4432, 0x0501 }, { 4435, 0x6400 }, { 4438, 0x7c01 }, { 4444, 0x480e }, { 4449, 0x8080 }, { 4451, 0x00a3 }, /* 0x8900 */ { 4455, 0xe042 }, { 4460, 0x1760 }, { 4466, 0x01c1 }, { 4470, 0x4627 }, { 4477, 0x8265 }, { 4483, 0x1c84 }, { 4488, 0x480e }, { 4493, 0x3c29 }, { 4500, 0x2200 }, { 4502, 0x9831 }, { 4508, 0x0021 }, { 4510, 0x10f1 }, { 4516, 0x0000 }, { 4516, 0x01f0 }, { 4521, 0x2a20 }, { 4525, 0xa24a }, /* 0x8a00 */ { 4531, 0x80b0 }, { 4535, 0x4036 }, { 4540, 0x9855 }, { 4547, 0x60a0 }, { 4551, 0x62a9 }, { 4558, 0x31c8 }, { 4564, 0x00a2 }, { 4567, 0xcee0 }, { 4575, 0x8849 }, { 4580, 0x82c5 }, { 4586, 0xc280 }, { 4590, 0x48c8 }, { 4595, 0x0748 }, { 4600, 0xa0ba }, { 4607, 0x1000 }, { 4608, 0x9071 }, /* 0x8b00 */ { 4614, 0x0c60 }, { 4618, 0xd002 }, { 4622, 0x2000 }, { 4623, 0x1081 }, { 4626, 0x217c }, { 4633, 0x421c }, { 4638, 0x2008 }, { 4640, 0x5340 }, { 4645, 0xa832 }, { 4651, 0xd030 }, { 4656, 0x0000 }, { 4656, 0x0000 }, { 4656, 0x0000 }, { 4656, 0x0000 }, { 4656, 0x0000 }, { 4656, 0x0000 }, /* 0x8c00 */ { 4656, 0x0000 }, { 4656, 0x0000 }, { 4656, 0x0000 }, { 4656, 0x6300 }, { 4660, 0x8aa0 }, { 4665, 0x2b9a }, { 4673, 0x2358 }, { 4679, 0x4868 }, { 4684, 0x08c0 }, { 4687, 0x1a0d }, { 4693, 0x0010 }, { 4694, 0x0600 }, { 4696, 0x8a60 }, { 4701, 0x2260 }, { 4705, 0x9102 }, { 4709, 0xc1a5 }, /* 0x8d00 */ { 4716, 0x020a }, { 4719, 0x0884 }, { 4722, 0x0000 }, { 4722, 0x0000 }, { 4722, 0x0000 }, { 4722, 0x0000 }, { 4722, 0x5220 }, { 4726, 0x8000 }, { 4727, 0x2114 }, { 4731, 0xc023 }, { 4736, 0x9841 }, { 4741, 0x1aa4 }, { 4747, 0x45e1 }, { 4754, 0x02b2 }, { 4759, 0x10b0 }, { 4763, 0x2017 }, /* 0x8e00 */ { 4768, 0x0872 }, { 4773, 0x0052 }, { 4776, 0x00cf }, { 4782, 0x23ca }, { 4789, 0xe803 }, { 4795, 0x7810 }, { 4800, 0xb206 }, { 4806, 0x0e03 }, { 4811, 0x020c }, { 4814, 0x6c25 }, { 4821, 0x6284 }, { 4826, 0x0c28 }, { 4830, 0x809b }, { 4836, 0x1012 }, { 4839, 0x6100 }, { 4842, 0x0683 }, /* 0x8f00 */ { 4847, 0x8185 }, { 4852, 0x41c1 }, { 4857, 0x71ab }, { 4866, 0x04f0 }, { 4871, 0x808b }, { 4876, 0x613e }, { 4884, 0x0020 }, { 4885, 0x0000 }, { 4885, 0x0000 }, { 4885, 0x2000 }, { 4886, 0x0073 }, { 4891, 0x4160 }, { 4895, 0x2c43 }, { 4901, 0x002d }, { 4905, 0x4119 }, { 4910, 0x4862 }, /* 0x9000 */ { 4915, 0x1114 }, { 4919, 0x0900 }, { 4921, 0xb700 }, { 4927, 0x8098 }, { 4931, 0x1018 }, { 4934, 0x2800 }, { 4936, 0x10c4 }, { 4940, 0x0211 }, { 4943, 0x5920 }, { 4948, 0x0ba1 }, { 4954, 0x0027 }, { 4958, 0x605d }, { 4965, 0x11b8 }, { 4971, 0xb3a4 }, { 4979, 0x8820 }, { 4982, 0xc051 }, /* 0x9100 */ { 4987, 0x2171 }, { 4993, 0x55d1 }, { 5001, 0xc2ad }, { 5009, 0x36d2 }, { 5017, 0x8188 }, { 5021, 0x0e88 }, { 5026, 0x2092 }, { 5030, 0x0e10 }, { 5034, 0x446a }, { 5040, 0x413a }, { 5046, 0x7142 }, { 5052, 0xb84f }, { 5061, 0x002c }, { 5064, 0x4698 }, { 5070, 0xf630 }, { 5078, 0x2a83 }, /* 0x9200 */ { 5084, 0x16f3 }, { 5093, 0x314d }, { 5100, 0xc178 }, { 5107, 0x5769 }, { 5116, 0xe4cd }, { 5125, 0x3302 }, { 5130, 0xc3a3 }, { 5138, 0xbbe1 }, { 5148, 0x6700 }, { 5153, 0x8284 }, { 5157, 0x89b1 }, { 5164, 0xbd44 }, { 5172, 0x79ef }, { 5184, 0xb3a9 }, { 5193, 0x51ab }, { 5201, 0x8a01 }, /* 0x9300 */ { 5205, 0x2105 }, { 5209, 0xf032 }, { 5216, 0x06b2 }, { 5222, 0x00d8 }, { 5226, 0x0380 }, { 5229, 0x45a7 }, { 5237, 0xa6b0 }, { 5244, 0xa45b }, { 5252, 0xad07 }, { 5260, 0x4924 }, { 5265, 0x0b5a }, { 5272, 0x0470 }, { 5276, 0x3ef2 }, { 5286, 0xd208 }, { 5291, 0x00c4 }, { 5294, 0x2f80 }, /* 0x9400 */ { 5300, 0xe316 }, { 5308, 0x80e0 }, { 5312, 0xc000 }, { 5314, 0xa81e }, { 5321, 0x1528 }, { 5326, 0x9220 }, { 5330, 0xe90a }, { 5337, 0x0006 }, { 5339, 0x0018 }, { 5341, 0x0000 }, { 5341, 0x0000 }, { 5341, 0x0000 }, { 5341, 0x0000 }, { 5341, 0x0000 }, { 5341, 0x0000 }, { 5341, 0x0000 }, /* 0x9500 */ { 5341, 0x0000 }, { 5341, 0x0000 }, { 5341, 0x0000 }, { 5341, 0x0000 }, { 5341, 0x0000 }, { 5341, 0x0000 }, { 5341, 0x0000 }, { 5341, 0x4300 }, { 5344, 0x7110 }, { 5349, 0xe000 }, { 5352, 0x1a42 }, { 5357, 0xa450 }, { 5362, 0x0b40 }, { 5366, 0xe60f }, { 5375, 0x0051 }, { 5378, 0x0000 }, /* 0x9600 */ { 5378, 0x0000 }, { 5378, 0x6000 }, { 5380, 0x1074 }, { 5385, 0x378a }, { 5393, 0x0002 }, { 5394, 0x01d4 }, { 5399, 0x4002 }, { 5401, 0xd810 }, { 5406, 0x021e }, { 5411, 0xa442 }, { 5416, 0xc270 }, { 5422, 0x0408 }, { 5424, 0x0400 }, { 5425, 0xe504 }, { 5431, 0x8200 }, { 5433, 0x0402 }, /* 0x9700 */ { 5435, 0x022c }, { 5439, 0x2c00 }, { 5442, 0x010e }, { 5446, 0x000a }, { 5448, 0xc40a }, { 5453, 0x0da0 }, { 5458, 0x4488 }, { 5462, 0xa9c8 }, { 5469, 0x0201 }, { 5471, 0xc6e0 }, { 5478, 0x5004 }, { 5481, 0xd766 }, { 5491, 0x76b2 }, { 5500, 0x6b93 }, { 5509, 0x8013 }, { 5513, 0x0592 }, /* 0x9800 */ { 5518, 0x6480 }, { 5522, 0x5250 }, { 5527, 0xc869 }, { 5534, 0x402d }, { 5539, 0x0490 }, { 5542, 0x06ce }, { 5549, 0x146c }, { 5555, 0x0000 }, { 5555, 0x0000 }, { 5555, 0x0000 }, { 5555, 0x6800 }, { 5558, 0x8d91 }, { 5565, 0x1124 }, { 5569, 0x0000 }, { 5569, 0x04ea }, { 5575, 0x0048 }, /* 0x9900 */ { 5577, 0x0184 }, { 5580, 0x9ce2 }, { 5588, 0x08c4 }, { 5592, 0x1e3e }, { 5601, 0x61c3 }, { 5608, 0xdb10 }, { 5615, 0x0001 }, { 5616, 0x0000 }, { 5616, 0x0000 }, { 5616, 0xa800 }, { 5619, 0x0040 }, { 5620, 0xa627 }, { 5628, 0x0208 }, { 5630, 0x5618 }, { 5636, 0x1c80 }, { 5640, 0x6231 }, /* 0x9a00 */ { 5646, 0x181c }, { 5651, 0x4043 }, { 5655, 0x609d }, { 5662, 0x0168 }, { 5666, 0x5c92 }, { 5673, 0x2052 }, { 5677, 0x0000 }, { 5677, 0x0000 }, { 5677, 0x0000 }, { 5677, 0x0000 }, { 5677, 0xd400 }, { 5681, 0xca74 }, { 5689, 0x414a }, { 5694, 0x18e5 }, { 5701, 0x12b1 }, { 5707, 0xa62c }, /* 0x9b00 */ { 5714, 0x7b3f }, { 5726, 0x1a45 }, { 5732, 0x2841 }, { 5736, 0x26b8 }, { 5743, 0x1900 }, { 5746, 0x48e0 }, { 5751, 0x7d6a }, { 5761, 0x83a8 }, { 5767, 0xaef1 }, { 5777, 0x6411 }, { 5782, 0x12c0 }, { 5786, 0xd987 }, { 5795, 0x4182 }, { 5799, 0xa181 }, { 5804, 0x8ca0 }, { 5809, 0xa788 }, /* 0x9c00 */ { 5816, 0x8805 }, { 5820, 0x5742 }, { 5827, 0x07cc }, { 5834, 0x20e2 }, { 5839, 0xc63a }, { 5847, 0xf959 }, { 5857, 0x4f08 }, { 5863, 0x08a5 }, { 5868, 0x0000 }, { 5868, 0x0000 }, { 5868, 0x0000 }, { 5868, 0x0000 }, { 5868, 0x0000 }, { 5868, 0x0000 }, { 5868, 0x0040 }, { 5869, 0x0284 }, /* 0x9d00 */ { 5872, 0x0804 }, { 5874, 0x7182 }, { 5880, 0x8000 }, { 5881, 0x341d }, { 5888, 0x04ac }, { 5893, 0x8018 }, { 5896, 0x0e2c }, { 5902, 0x58c1 }, { 5908, 0x6458 }, { 5914, 0x01ec }, { 5920, 0x5402 }, { 5924, 0x9222 }, { 5929, 0x0688 }, { 5933, 0xc4f0 }, { 5940, 0x4aa1 }, { 5946, 0x4019 }, /* 0x9e00 */ { 5950, 0x4484 }, { 5954, 0x3267 }, { 5962, 0x0000 }, { 5962, 0x0000 }, { 5962, 0x0000 }, { 5962, 0x0000 }, { 5962, 0x0000 }, { 5962, 0x1c00 }, { 5965, 0xc0bd }, { 5973, 0x4940 }, { 5977, 0xd110 }, { 5982, 0x0039 }, { 5986, 0x0940 }, { 5989, 0x8020 }, { 5991, 0x7090 }, { 5996, 0x8127 }, /* 0x9f00 */ { 6002, 0x820c }, { 6006, 0x8ed7 }, { 6016, 0x8c44 }, { 6021, 0xb696 }, { 6030, 0x00fa }, { 6036, 0x65e8 }, { 6044, 0xe300 }, { 6049, 0x242b }, { 6055, 0x8000 }, { 6056, 0x40d7 }, { 6063, 0x002e }, }; static int jisx0212_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { if (n >= 2) { const Summary16 *summary = NULL; if (wc < 0x0460) summary = &jisx0212_uni2indx_page00[(wc>>4)]; else if (wc >= 0x2100 && wc < 0x2130) summary = &jisx0212_uni2indx_page21[(wc>>4)-0x210]; else if (wc >= 0x4e00 && wc < 0x9fb0) summary = &jisx0212_uni2indx_page4e[(wc>>4)-0x4e0]; if (summary) { unsigned short used = summary->used; unsigned int i = wc & 0x0f; if (used & ((unsigned short) 1 << i)) { unsigned short c; /* Keep in `used' only the bits 0..i-1. */ used &= ((unsigned short) 1 << i) - 1; /* Add `summary->indx' and the number of bits set in `used'. */ used = (used & 0x5555) + ((used & 0xaaaa) >> 1); used = (used & 0x3333) + ((used & 0xcccc) >> 2); used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4); used = (used & 0x00ff) + (used >> 8); c = jisx0212_2charset[summary->indx + used]; r[0] = (c >> 8); r[1] = (c & 0xff); return 2; } } return RET_ILSEQ; } return RET_TOOSMALL; } }, { 3942, 0xa810 }, { 3946, 0x469b }, { 3954, 0x0d52 }, { 3960, 0x479b }, { 3969, 0xd495 }, { 3977, 0x0040 }, { 3978, 0x0421 }, { 3981, 0xa515 }, { 3988, 0x60c0 }, /* 0x8300 */ { 3992, 0x0d83 }, { 3998, 0xe800 }, { 4002, 0x7006 }, { 4007, 0x3489 }, { 4013, 0x609c }, { 4019, 0x00fa }, { 4025, 0libX11-1.6.3/src/xlibi18n/lcUniConv/jisx0208.h000064401431060000012000004376671247741723500206720ustar00alancstaff00002660200006 /* * JISX0208.1990-0 */ static const unsigned short jisx0208_2uni_page21[690] = { /* 0x21 */ 0x3000, 0x3001, 0x3002, 0xff0c, 0xff0e, 0x30fb, 0xff1a, 0xff1b, 0xff1f, 0xff01, 0x309b, 0x309c, 0x00b4, 0xff40, 0x00a8, 0xff3e, 0xffe3, 0xff3f, 0x30fd, 0x30fe, 0x309d, 0x309e, 0x3003, 0x4edd, 0x3005, 0x3006, 0x3007, 0x30fc, 0x2015, 0x2010, 0xff0f, 0xff3c, 0x301c, 0x2016, 0xff5c, 0x2026, 0x2025, 0x2018, 0x2019, 0x201c, 0x201d, 0xff08, 0xff09, 0x3014, 0x3015, 0xff3b, 0xff3d, 0xff5b, 0xff5d, 0x3008, 0x3009, 0x300a, 0x300b, 0x300c, 0x300d, 0x300e, 0x300f, 0x3010, 0x3011, 0xff0b, 0x2212, 0x00b1, 0x00d7, 0x00f7, 0xff1d, 0x2260, 0xff1c, 0xff1e, 0x2266, 0x2267, 0x221e, 0x2234, 0x2642, 0x2640, 0x00b0, 0x2032, 0x2033, 0x2103, 0xffe5, 0xff04, 0x00a2, 0x00a3, 0xff05, 0xff03, 0xff06, 0xff0a, 0xff20, 0x00a7, 0x2606, 0x2605, 0x25cb, 0x25cf, 0x25ce, 0x25c7, /* 0x22 */ 0x25c6, 0x25a1, 0x25a0, 0x25b3, 0x25b2, 0x25bd, 0x25bc, 0x203b, 0x3012, 0x2192, 0x2190, 0x2191, 0x2193, 0x3013, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x2208, 0x220b, 0x2286, 0x2287, 0x2282, 0x2283, 0x222a, 0x2229, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x2227, 0x2228, 0x00ac, 0x21d2, 0x21d4, 0x2200, 0x2203, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x2220, 0x22a5, 0x2312, 0x2202, 0x2207, 0x2261, 0x2252, 0x226a, 0x226b, 0x221a, 0x223d, 0x221d, 0x2235, 0x222b, 0x222c, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x212b, 0x2030, 0x266f, 0x266d, 0x266a, 0x2020, 0x2021, 0x00b6, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x25ef, /* 0x23 */ 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xff10, 0xff11, 0xff12, 0xff13, 0xff14, 0xff15, 0xff16, 0xff17, 0xff18, 0xff19, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, 0xff28, 0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30, 0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38, 0xff39, 0xff3a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 0xff57, 0xff58, 0xff59, 0xff5a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0x24 */ 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048, 0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058, 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f, 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, 0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e, 0x306f, 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078, 0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e, 0x307f, 0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088, 0x3089, 0x308a, 0x308b, 0x308c, 0x308d, 0x308e, 0x308f, 0x3090, 0x3091, 0x3092, 0x3093, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0x25 */ 0x30a1, 0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7, 0x30a8, 0x30a9, 0x30aa, 0x30ab, 0x30ac, 0x30ad, 0x30ae, 0x30af, 0x30b0, 0x30b1, 0x30b2, 0x30b3, 0x30b4, 0x30b5, 0x30b6, 0x30b7, 0x30b8, 0x30b9, 0x30ba, 0x30bb, 0x30bc, 0x30bd, 0x30be, 0x30bf, 0x30c0, 0x30c1, 0x30c2, 0x30c3, 0x30c4, 0x30c5, 0x30c6, 0x30c7, 0x30c8, 0x30c9, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf, 0x30d0, 0x30d1, 0x30d2, 0x30d3, 0x30d4, 0x30d5, 0x30d6, 0x30d7, 0x30d8, 0x30d9, 0x30da, 0x30db, 0x30dc, 0x30dd, 0x30de, 0x30df, 0x30e0, 0x30e1, 0x30e2, 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7, 0x30e8, 0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ee, 0x30ef, 0x30f0, 0x30f1, 0x30f2, 0x30f3, 0x30f4, 0x30f5, 0x30f6, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0x26 */ 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, 0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0x27 */ 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, 0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0436, 0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0x28 */ 0x2500, 0x2502, 0x250c, 0x2510, 0x2518, 0x2514, 0x251c, 0x252c, 0x2524, 0x2534, 0x253c, 0x2501, 0x2503, 0x250f, 0x2513, 0x251b, 0x2517, 0x2523, 0x2533, 0x252b, 0x253b, 0x254b, 0x2520, 0x252f, 0x2528, 0x2537, 0x253f, 0x251d, 0x2530, 0x2525, 0x2538, 0x2542, }; static const unsigned short jisx0208_2uni_page30[6398] = { /* 0x30 */ 0x4e9c, 0x5516, 0x5a03, 0x963f, 0x54c0, 0x611b, 0x6328, 0x59f6, 0x9022, 0x8475, 0x831c, 0x7a50, 0x60aa, 0x63e1, 0x6e25, 0x65ed, 0x8466, 0x82a6, 0x9bf5, 0x6893, 0x5727, 0x65a1, 0x6271, 0x5b9b, 0x59d0, 0x867b, 0x98f4, 0x7d62, 0x7dbe, 0x9b8e, 0x6216, 0x7c9f, 0x88b7, 0x5b89, 0x5eb5, 0x6309, 0x6697, 0x6848, 0x95c7, 0x978d, 0x674f, 0x4ee5, 0x4f0a, 0x4f4d, 0x4f9d, 0x5049, 0x56f2, 0x5937, 0x59d4, 0x5a01, 0x5c09, 0x60df, 0x610f, 0x6170, 0x6613, 0x6905, 0x70ba, 0x754f, 0x7570, 0x79fb, 0x7dad, 0x7def, 0x80c3, 0x840e, 0x8863, 0x8b02, 0x9055, 0x907a, 0x533b, 0x4e95, 0x4ea5, 0x57df, 0x80b2, 0x90c1, 0x78ef, 0x4e00, 0x58f1, 0x6ea2, 0x9038, 0x7a32, 0x8328, 0x828b, 0x9c2f, 0x5141, 0x5370, 0x54bd, 0x54e1, 0x56e0, 0x59fb, 0x5f15, 0x98f2, 0x6deb, 0x80e4, 0x852d, /* 0x31 */ 0x9662, 0x9670, 0x96a0, 0x97fb, 0x540b, 0x53f3, 0x5b87, 0x70cf, 0x7fbd, 0x8fc2, 0x96e8, 0x536f, 0x9d5c, 0x7aba, 0x4e11, 0x7893, 0x81fc, 0x6e26, 0x5618, 0x5504, 0x6b1d, 0x851a, 0x9c3b, 0x59e5, 0x53a9, 0x6d66, 0x74dc, 0x958f, 0x5642, 0x4e91, 0x904b, 0x96f2, 0x834f, 0x990c, 0x53e1, 0x55b6, 0x5b30, 0x5f71, 0x6620, 0x66f3, 0x6804, 0x6c38, 0x6cf3, 0x6d29, 0x745b, 0x76c8, 0x7a4e, 0x9834, 0x82f1, 0x885b, 0x8a60, 0x92ed, 0x6db2, 0x75ab, 0x76ca, 0x99c5, 0x60a6, 0x8b01, 0x8d8a, 0x95b2, 0x698e, 0x53ad, 0x5186, 0x5712, 0x5830, 0x5944, 0x5bb4, 0x5ef6, 0x6028, 0x63a9, 0x63f4, 0x6cbf, 0x6f14, 0x708e, 0x7114, 0x7159, 0x71d5, 0x733f, 0x7e01, 0x8276, 0x82d1, 0x8597, 0x9060, 0x925b, 0x9d1b, 0x5869, 0x65bc, 0x6c5a, 0x7525, 0x51f9, 0x592e, 0x5965, 0x5f80, 0x5fdc, /* 0x32 */ 0x62bc, 0x65fa, 0x6a2a, 0x6b27, 0x6bb4, 0x738b, 0x7fc1, 0x8956, 0x9d2c, 0x9d0e, 0x9ec4, 0x5ca1, 0x6c96, 0x837b, 0x5104, 0x5c4b, 0x61b6, 0x81c6, 0x6876, 0x7261, 0x4e59, 0x4ffa, 0x5378, 0x6069, 0x6e29, 0x7a4f, 0x97f3, 0x4e0b, 0x5316, 0x4eee, 0x4f55, 0x4f3d, 0x4fa1, 0x4f73, 0x52a0, 0x53ef, 0x5609, 0x590f, 0x5ac1, 0x5bb6, 0x5be1, 0x79d1, 0x6687, 0x679c, 0x67b6, 0x6b4c, 0x6cb3, 0x706b, 0x73c2, 0x798d, 0x79be, 0x7a3c, 0x7b87, 0x82b1, 0x82db, 0x8304, 0x8377, 0x83ef, 0x83d3, 0x8766, 0x8ab2, 0x5629, 0x8ca8, 0x8fe6, 0x904e, 0x971e, 0x868a, 0x4fc4, 0x5ce8, 0x6211, 0x7259, 0x753b, 0x81e5, 0x82bd, 0x86fe, 0x8cc0, 0x96c5, 0x9913, 0x99d5, 0x4ecb, 0x4f1a, 0x89e3, 0x56de, 0x584a, 0x58ca, 0x5efb, 0x5feb, 0x602a, 0x6094, 0x6062, 0x61d0, 0x6212, 0x62d0, 0x6539, /* 0x33 */ 0x9b41, 0x6666, 0x68b0, 0x6d77, 0x7070, 0x754c, 0x7686, 0x7d75, 0x82a5, 0x87f9, 0x958b, 0x968e, 0x8c9d, 0x51f1, 0x52be, 0x5916, 0x54b3, 0x5bb3, 0x5d16, 0x6168, 0x6982, 0x6daf, 0x788d, 0x84cb, 0x8857, 0x8a72, 0x93a7, 0x9ab8, 0x6d6c, 0x99a8, 0x86d9, 0x57a3, 0x67ff, 0x86ce, 0x920e, 0x5283, 0x5687, 0x5404, 0x5ed3, 0x62e1, 0x64b9, 0x683c, 0x6838, 0x6bbb, 0x7372, 0x78ba, 0x7a6b, 0x899a, 0x89d2, 0x8d6b, 0x8f03, 0x90ed, 0x95a3, 0x9694, 0x9769, 0x5b66, 0x5cb3, 0x697d, 0x984d, 0x984e, 0x639b, 0x7b20, 0x6a2b, 0x6a7f, 0x68b6, 0x9c0d, 0x6f5f, 0x5272, 0x559d, 0x6070, 0x62ec, 0x6d3b, 0x6e07, 0x6ed1, 0x845b, 0x8910, 0x8f44, 0x4e14, 0x9c39, 0x53f6, 0x691b, 0x6a3a, 0x9784, 0x682a, 0x515c, 0x7ac3, 0x84b2, 0x91dc, 0x938c, 0x565b, 0x9d28, 0x6822, 0x8305, 0x8431, /* 0x34 */ 0x7ca5, 0x5208, 0x82c5, 0x74e6, 0x4e7e, 0x4f83, 0x51a0, 0x5bd2, 0x520a, 0x52d8, 0x52e7, 0x5dfb, 0x559a, 0x582a, 0x59e6, 0x5b8c, 0x5b98, 0x5bdb, 0x5e72, 0x5e79, 0x60a3, 0x611f, 0x6163, 0x61be, 0x63db, 0x6562, 0x67d1, 0x6853, 0x68fa, 0x6b3e, 0x6b53, 0x6c57, 0x6f22, 0x6f97, 0x6f45, 0x74b0, 0x7518, 0x76e3, 0x770b, 0x7aff, 0x7ba1, 0x7c21, 0x7de9, 0x7f36, 0x7ff0, 0x809d, 0x8266, 0x839e, 0x89b3, 0x8acc, 0x8cab, 0x9084, 0x9451, 0x9593, 0x9591, 0x95a2, 0x9665, 0x97d3, 0x9928, 0x8218, 0x4e38, 0x542b, 0x5cb8, 0x5dcc, 0x73a9, 0x764c, 0x773c, 0x5ca9, 0x7feb, 0x8d0b, 0x96c1, 0x9811, 0x9854, 0x9858, 0x4f01, 0x4f0e, 0x5371, 0x559c, 0x5668, 0x57fa, 0x5947, 0x5b09, 0x5bc4, 0x5c90, 0x5e0c, 0x5e7e, 0x5fcc, 0x63ee, 0x673a, 0x65d7, 0x65e2, 0x671f, 0x68cb, 0x68c4, /* 0x35 */ 0x6a5f, 0x5e30, 0x6bc5, 0x6c17, 0x6c7d, 0x757f, 0x7948, 0x5b63, 0x7a00, 0x7d00, 0x5fbd, 0x898f, 0x8a18, 0x8cb4, 0x8d77, 0x8ecc, 0x8f1d, 0x98e2, 0x9a0e, 0x9b3c, 0x4e80, 0x507d, 0x5100, 0x5993, 0x5b9c, 0x622f, 0x6280, 0x64ec, 0x6b3a, 0x72a0, 0x7591, 0x7947, 0x7fa9, 0x87fb, 0x8abc, 0x8b70, 0x63ac, 0x83ca, 0x97a0, 0x5409, 0x5403, 0x55ab, 0x6854, 0x6a58, 0x8a70, 0x7827, 0x6775, 0x9ecd, 0x5374, 0x5ba2, 0x811a, 0x8650, 0x9006, 0x4e18, 0x4e45, 0x4ec7, 0x4f11, 0x53ca, 0x5438, 0x5bae, 0x5f13, 0x6025, 0x6551, 0x673d, 0x6c42, 0x6c72, 0x6ce3, 0x7078, 0x7403, 0x7a76, 0x7aae, 0x7b08, 0x7d1a, 0x7cfe, 0x7d66, 0x65e7, 0x725b, 0x53bb, 0x5c45, 0x5de8, 0x62d2, 0x62e0, 0x6319, 0x6e20, 0x865a, 0x8a31, 0x8ddd, 0x92f8, 0x6f01, 0x79a6, 0x9b5a, 0x4ea8, 0x4eab, 0x4eac, /* 0x36 */ 0x4f9b, 0x4fa0, 0x50d1, 0x5147, 0x7af6, 0x5171, 0x51f6, 0x5354, 0x5321, 0x537f, 0x53eb, 0x55ac, 0x5883, 0x5ce1, 0x5f37, 0x5f4a, 0x602f, 0x6050, 0x606d, 0x631f, 0x6559, 0x6a4b, 0x6cc1, 0x72c2, 0x72ed, 0x77ef, 0x80f8, 0x8105, 0x8208, 0x854e, 0x90f7, 0x93e1, 0x97ff, 0x9957, 0x9a5a, 0x4ef0, 0x51dd, 0x5c2d, 0x6681, 0x696d, 0x5c40, 0x66f2, 0x6975, 0x7389, 0x6850, 0x7c81, 0x50c5, 0x52e4, 0x5747, 0x5dfe, 0x9326, 0x65a4, 0x6b23, 0x6b3d, 0x7434, 0x7981, 0x79bd, 0x7b4b, 0x7dca, 0x82b9, 0x83cc, 0x887f, 0x895f, 0x8b39, 0x8fd1, 0x91d1, 0x541f, 0x9280, 0x4e5d, 0x5036, 0x53e5, 0x533a, 0x72d7, 0x7396, 0x77e9, 0x82e6, 0x8eaf, 0x99c6, 0x99c8, 0x99d2, 0x5177, 0x611a, 0x865e, 0x55b0, 0x7a7a, 0x5076, 0x5bd3, 0x9047, 0x9685, 0x4e32, 0x6adb, 0x91e7, 0x5c51, 0x5c48, /* 0x37 */ 0x6398, 0x7a9f, 0x6c93, 0x9774, 0x8f61, 0x7aaa, 0x718a, 0x9688, 0x7c82, 0x6817, 0x7e70, 0x6851, 0x936c, 0x52f2, 0x541b, 0x85ab, 0x8a13, 0x7fa4, 0x8ecd, 0x90e1, 0x5366, 0x8888, 0x7941, 0x4fc2, 0x50be, 0x5211, 0x5144, 0x5553, 0x572d, 0x73ea, 0x578b, 0x5951, 0x5f62, 0x5f84, 0x6075, 0x6176, 0x6167, 0x61a9, 0x63b2, 0x643a, 0x656c, 0x666f, 0x6842, 0x6e13, 0x7566, 0x7a3d, 0x7cfb, 0x7d4c, 0x7d99, 0x7e4b, 0x7f6b, 0x830e, 0x834a, 0x86cd, 0x8a08, 0x8a63, 0x8b66, 0x8efd, 0x981a, 0x9d8f, 0x82b8, 0x8fce, 0x9be8, 0x5287, 0x621f, 0x6483, 0x6fc0, 0x9699, 0x6841, 0x5091, 0x6b20, 0x6c7a, 0x6f54, 0x7a74, 0x7d50, 0x8840, 0x8a23, 0x6708, 0x4ef6, 0x5039, 0x5026, 0x5065, 0x517c, 0x5238, 0x5263, 0x55a7, 0x570f, 0x5805, 0x5acc, 0x5efa, 0x61b2, 0x61f8, 0x62f3, 0x6372, /* 0x38 */ 0x691c, 0x6a29, 0x727d, 0x72ac, 0x732e, 0x7814, 0x786f, 0x7d79, 0x770c, 0x80a9, 0x898b, 0x8b19, 0x8ce2, 0x8ed2, 0x9063, 0x9375, 0x967a, 0x9855, 0x9a13, 0x9e78, 0x5143, 0x539f, 0x53b3, 0x5e7b, 0x5f26, 0x6e1b, 0x6e90, 0x7384, 0x73fe, 0x7d43, 0x8237, 0x8a00, 0x8afa, 0x9650, 0x4e4e, 0x500b, 0x53e4, 0x547c, 0x56fa, 0x59d1, 0x5b64, 0x5df1, 0x5eab, 0x5f27, 0x6238, 0x6545, 0x67af, 0x6e56, 0x72d0, 0x7cca, 0x88b4, 0x80a1, 0x80e1, 0x83f0, 0x864e, 0x8a87, 0x8de8, 0x9237, 0x96c7, 0x9867, 0x9f13, 0x4e94, 0x4e92, 0x4f0d, 0x5348, 0x5449, 0x543e, 0x5a2f, 0x5f8c, 0x5fa1, 0x609f, 0x68a7, 0x6a8e, 0x745a, 0x7881, 0x8a9e, 0x8aa4, 0x8b77, 0x9190, 0x4e5e, 0x9bc9, 0x4ea4, 0x4f7c, 0x4faf, 0x5019, 0x5016, 0x5149, 0x516c, 0x529f, 0x52b9, 0x52fe, 0x539a, 0x53e3, 0x5411, /* 0x39 */ 0x540e, 0x5589, 0x5751, 0x57a2, 0x597d, 0x5b54, 0x5b5d, 0x5b8f, 0x5de5, 0x5de7, 0x5df7, 0x5e78, 0x5e83, 0x5e9a, 0x5eb7, 0x5f18, 0x6052, 0x614c, 0x6297, 0x62d8, 0x63a7, 0x653b, 0x6602, 0x6643, 0x66f4, 0x676d, 0x6821, 0x6897, 0x69cb, 0x6c5f, 0x6d2a, 0x6d69, 0x6e2f, 0x6e9d, 0x7532, 0x7687, 0x786c, 0x7a3f, 0x7ce0, 0x7d05, 0x7d18, 0x7d5e, 0x7db1, 0x8015, 0x8003, 0x80af, 0x80b1, 0x8154, 0x818f, 0x822a, 0x8352, 0x884c, 0x8861, 0x8b1b, 0x8ca2, 0x8cfc, 0x90ca, 0x9175, 0x9271, 0x783f, 0x92fc, 0x95a4, 0x964d, 0x9805, 0x9999, 0x9ad8, 0x9d3b, 0x525b, 0x52ab, 0x53f7, 0x5408, 0x58d5, 0x62f7, 0x6fe0, 0x8c6a, 0x8f5f, 0x9eb9, 0x514b, 0x523b, 0x544a, 0x56fd, 0x7a40, 0x9177, 0x9d60, 0x9ed2, 0x7344, 0x6f09, 0x8170, 0x7511, 0x5ffd, 0x60da, 0x9aa8, 0x72db, 0x8fbc, /* 0x3a */ 0x6b64, 0x9803, 0x4eca, 0x56f0, 0x5764, 0x58be, 0x5a5a, 0x6068, 0x61c7, 0x660f, 0x6606, 0x6839, 0x68b1, 0x6df7, 0x75d5, 0x7d3a, 0x826e, 0x9b42, 0x4e9b, 0x4f50, 0x53c9, 0x5506, 0x5d6f, 0x5de6, 0x5dee, 0x67fb, 0x6c99, 0x7473, 0x7802, 0x8a50, 0x9396, 0x88df, 0x5750, 0x5ea7, 0x632b, 0x50b5, 0x50ac, 0x518d, 0x6700, 0x54c9, 0x585e, 0x59bb, 0x5bb0, 0x5f69, 0x624d, 0x63a1, 0x683d, 0x6b73, 0x6e08, 0x707d, 0x91c7, 0x7280, 0x7815, 0x7826, 0x796d, 0x658e, 0x7d30, 0x83dc, 0x88c1, 0x8f09, 0x969b, 0x5264, 0x5728, 0x6750, 0x7f6a, 0x8ca1, 0x51b4, 0x5742, 0x962a, 0x583a, 0x698a, 0x80b4, 0x54b2, 0x5d0e, 0x57fc, 0x7895, 0x9dfa, 0x4f5c, 0x524a, 0x548b, 0x643e, 0x6628, 0x6714, 0x67f5, 0x7a84, 0x7b56, 0x7d22, 0x932f, 0x685c, 0x9bad, 0x7b39, 0x5319, 0x518a, 0x5237, /* 0x3b */ 0x5bdf, 0x62f6, 0x64ae, 0x64e6, 0x672d, 0x6bba, 0x85a9, 0x96d1, 0x7690, 0x9bd6, 0x634c, 0x9306, 0x9bab, 0x76bf, 0x6652, 0x4e09, 0x5098, 0x53c2, 0x5c71, 0x60e8, 0x6492, 0x6563, 0x685f, 0x71e6, 0x73ca, 0x7523, 0x7b97, 0x7e82, 0x8695, 0x8b83, 0x8cdb, 0x9178, 0x9910, 0x65ac, 0x66ab, 0x6b8b, 0x4ed5, 0x4ed4, 0x4f3a, 0x4f7f, 0x523a, 0x53f8, 0x53f2, 0x55e3, 0x56db, 0x58eb, 0x59cb, 0x59c9, 0x59ff, 0x5b50, 0x5c4d, 0x5e02, 0x5e2b, 0x5fd7, 0x601d, 0x6307, 0x652f, 0x5b5c, 0x65af, 0x65bd, 0x65e8, 0x679d, 0x6b62, 0x6b7b, 0x6c0f, 0x7345, 0x7949, 0x79c1, 0x7cf8, 0x7d19, 0x7d2b, 0x80a2, 0x8102, 0x81f3, 0x8996, 0x8a5e, 0x8a69, 0x8a66, 0x8a8c, 0x8aee, 0x8cc7, 0x8cdc, 0x96cc, 0x98fc, 0x6b6f, 0x4e8b, 0x4f3c, 0x4f8d, 0x5150, 0x5b57, 0x5bfa, 0x6148, 0x6301, 0x6642, /* 0x3c */ 0x6b21, 0x6ecb, 0x6cbb, 0x723e, 0x74bd, 0x75d4, 0x78c1, 0x793a, 0x800c, 0x8033, 0x81ea, 0x8494, 0x8f9e, 0x6c50, 0x9e7f, 0x5f0f, 0x8b58, 0x9d2b, 0x7afa, 0x8ef8, 0x5b8d, 0x96eb, 0x4e03, 0x53f1, 0x57f7, 0x5931, 0x5ac9, 0x5ba4, 0x6089, 0x6e7f, 0x6f06, 0x75be, 0x8cea, 0x5b9f, 0x8500, 0x7be0, 0x5072, 0x67f4, 0x829d, 0x5c61, 0x854a, 0x7e1e, 0x820e, 0x5199, 0x5c04, 0x6368, 0x8d66, 0x659c, 0x716e, 0x793e, 0x7d17, 0x8005, 0x8b1d, 0x8eca, 0x906e, 0x86c7, 0x90aa, 0x501f, 0x52fa, 0x5c3a, 0x6753, 0x707c, 0x7235, 0x914c, 0x91c8, 0x932b, 0x82e5, 0x5bc2, 0x5f31, 0x60f9, 0x4e3b, 0x53d6, 0x5b88, 0x624b, 0x6731, 0x6b8a, 0x72e9, 0x73e0, 0x7a2e, 0x816b, 0x8da3, 0x9152, 0x9996, 0x5112, 0x53d7, 0x546a, 0x5bff, 0x6388, 0x6a39, 0x7dac, 0x9700, 0x56da, 0x53ce, 0x5468, /* 0x3d */ 0x5b97, 0x5c31, 0x5dde, 0x4fee, 0x6101, 0x62fe, 0x6d32, 0x79c0, 0x79cb, 0x7d42, 0x7e4d, 0x7fd2, 0x81ed, 0x821f, 0x8490, 0x8846, 0x8972, 0x8b90, 0x8e74, 0x8f2f, 0x9031, 0x914b, 0x916c, 0x96c6, 0x919c, 0x4ec0, 0x4f4f, 0x5145, 0x5341, 0x5f93, 0x620e, 0x67d4, 0x6c41, 0x6e0b, 0x7363, 0x7e26, 0x91cd, 0x9283, 0x53d4, 0x5919, 0x5bbf, 0x6dd1, 0x795d, 0x7e2e, 0x7c9b, 0x587e, 0x719f, 0x51fa, 0x8853, 0x8ff0, 0x4fca, 0x5cfb, 0x6625, 0x77ac, 0x7ae3, 0x821c, 0x99ff, 0x51c6, 0x5faa, 0x65ec, 0x696f, 0x6b89, 0x6df3, 0x6e96, 0x6f64, 0x76fe, 0x7d14, 0x5de1, 0x9075, 0x9187, 0x9806, 0x51e6, 0x521d, 0x6240, 0x6691, 0x66d9, 0x6e1a, 0x5eb6, 0x7dd2, 0x7f72, 0x66f8, 0x85af, 0x85f7, 0x8af8, 0x52a9, 0x53d9, 0x5973, 0x5e8f, 0x5f90, 0x6055, 0x92e4, 0x9664, 0x50b7, 0x511f, /* 0x3e */ 0x52dd, 0x5320, 0x5347, 0x53ec, 0x54e8, 0x5546, 0x5531, 0x5617, 0x5968, 0x59be, 0x5a3c, 0x5bb5, 0x5c06, 0x5c0f, 0x5c11, 0x5c1a, 0x5e84, 0x5e8a, 0x5ee0, 0x5f70, 0x627f, 0x6284, 0x62db, 0x638c, 0x6377, 0x6607, 0x660c, 0x662d, 0x6676, 0x677e, 0x68a2, 0x6a1f, 0x6a35, 0x6cbc, 0x6d88, 0x6e09, 0x6e58, 0x713c, 0x7126, 0x7167, 0x75c7, 0x7701, 0x785d, 0x7901, 0x7965, 0x79f0, 0x7ae0, 0x7b11, 0x7ca7, 0x7d39, 0x8096, 0x83d6, 0x848b, 0x8549, 0x885d, 0x88f3, 0x8a1f, 0x8a3c, 0x8a54, 0x8a73, 0x8c61, 0x8cde, 0x91a4, 0x9266, 0x937e, 0x9418, 0x969c, 0x9798, 0x4e0a, 0x4e08, 0x4e1e, 0x4e57, 0x5197, 0x5270, 0x57ce, 0x5834, 0x58cc, 0x5b22, 0x5e38, 0x60c5, 0x64fe, 0x6761, 0x6756, 0x6d44, 0x72b6, 0x7573, 0x7a63, 0x84b8, 0x8b72, 0x91b8, 0x9320, 0x5631, 0x57f4, 0x98fe, /* 0x3f */ 0x62ed, 0x690d, 0x6b96, 0x71ed, 0x7e54, 0x8077, 0x8272, 0x89e6, 0x98df, 0x8755, 0x8fb1, 0x5c3b, 0x4f38, 0x4fe1, 0x4fb5, 0x5507, 0x5a20, 0x5bdd, 0x5be9, 0x5fc3, 0x614e, 0x632f, 0x65b0, 0x664b, 0x68ee, 0x699b, 0x6d78, 0x6df1, 0x7533, 0x75b9, 0x771f, 0x795e, 0x79e6, 0x7d33, 0x81e3, 0x82af, 0x85aa, 0x89aa, 0x8a3a, 0x8eab, 0x8f9b, 0x9032, 0x91dd, 0x9707, 0x4eba, 0x4ec1, 0x5203, 0x5875, 0x58ec, 0x5c0b, 0x751a, 0x5c3d, 0x814e, 0x8a0a, 0x8fc5, 0x9663, 0x976d, 0x7b25, 0x8acf, 0x9808, 0x9162, 0x56f3, 0x53a8, 0x9017, 0x5439, 0x5782, 0x5e25, 0x63a8, 0x6c34, 0x708a, 0x7761, 0x7c8b, 0x7fe0, 0x8870, 0x9042, 0x9154, 0x9310, 0x9318, 0x968f, 0x745e, 0x9ac4, 0x5d07, 0x5d69, 0x6570, 0x67a2, 0x8da8, 0x96db, 0x636e, 0x6749, 0x6919, 0x83c5, 0x9817, 0x96c0, 0x88fe, /* 0x40 */ 0x6f84, 0x647a, 0x5bf8, 0x4e16, 0x702c, 0x755d, 0x662f, 0x51c4, 0x5236, 0x52e2, 0x59d3, 0x5f81, 0x6027, 0x6210, 0x653f, 0x6574, 0x661f, 0x6674, 0x68f2, 0x6816, 0x6b63, 0x6e05, 0x7272, 0x751f, 0x76db, 0x7cbe, 0x8056, 0x58f0, 0x88fd, 0x897f, 0x8aa0, 0x8a93, 0x8acb, 0x901d, 0x9192, 0x9752, 0x9759, 0x6589, 0x7a0e, 0x8106, 0x96bb, 0x5e2d, 0x60dc, 0x621a, 0x65a5, 0x6614, 0x6790, 0x77f3, 0x7a4d, 0x7c4d, 0x7e3e, 0x810a, 0x8cac, 0x8d64, 0x8de1, 0x8e5f, 0x78a9, 0x5207, 0x62d9, 0x63a5, 0x6442, 0x6298, 0x8a2d, 0x7a83, 0x7bc0, 0x8aac, 0x96ea, 0x7d76, 0x820c, 0x8749, 0x4ed9, 0x5148, 0x5343, 0x5360, 0x5ba3, 0x5c02, 0x5c16, 0x5ddd, 0x6226, 0x6247, 0x64b0, 0x6813, 0x6834, 0x6cc9, 0x6d45, 0x6d17, 0x67d3, 0x6f5c, 0x714e, 0x717d, 0x65cb, 0x7a7f, 0x7bad, 0x7dda, /* 0x41 */ 0x7e4a, 0x7fa8, 0x817a, 0x821b, 0x8239, 0x85a6, 0x8a6e, 0x8cce, 0x8df5, 0x9078, 0x9077, 0x92ad, 0x9291, 0x9583, 0x9bae, 0x524d, 0x5584, 0x6f38, 0x7136, 0x5168, 0x7985, 0x7e55, 0x81b3, 0x7cce, 0x564c, 0x5851, 0x5ca8, 0x63aa, 0x66fe, 0x66fd, 0x695a, 0x72d9, 0x758f, 0x758e, 0x790e, 0x7956, 0x79df, 0x7c97, 0x7d20, 0x7d44, 0x8607, 0x8a34, 0x963b, 0x9061, 0x9f20, 0x50e7, 0x5275, 0x53cc, 0x53e2, 0x5009, 0x55aa, 0x58ee, 0x594f, 0x723d, 0x5b8b, 0x5c64, 0x531d, 0x60e3, 0x60f3, 0x635c, 0x6383, 0x633f, 0x63bb, 0x64cd, 0x65e9, 0x66f9, 0x5de3, 0x69cd, 0x69fd, 0x6f15, 0x71e5, 0x4e89, 0x75e9, 0x76f8, 0x7a93, 0x7cdf, 0x7dcf, 0x7d9c, 0x8061, 0x8349, 0x8358, 0x846c, 0x84bc, 0x85fb, 0x88c5, 0x8d70, 0x9001, 0x906d, 0x9397, 0x971c, 0x9a12, 0x50cf, 0x5897, 0x618e, /* 0x42 */ 0x81d3, 0x8535, 0x8d08, 0x9020, 0x4fc3, 0x5074, 0x5247, 0x5373, 0x606f, 0x6349, 0x675f, 0x6e2c, 0x8db3, 0x901f, 0x4fd7, 0x5c5e, 0x8cca, 0x65cf, 0x7d9a, 0x5352, 0x8896, 0x5176, 0x63c3, 0x5b58, 0x5b6b, 0x5c0a, 0x640d, 0x6751, 0x905c, 0x4ed6, 0x591a, 0x592a, 0x6c70, 0x8a51, 0x553e, 0x5815, 0x59a5, 0x60f0, 0x6253, 0x67c1, 0x8235, 0x6955, 0x9640, 0x99c4, 0x9a28, 0x4f53, 0x5806, 0x5bfe, 0x8010, 0x5cb1, 0x5e2f, 0x5f85, 0x6020, 0x614b, 0x6234, 0x66ff, 0x6cf0, 0x6ede, 0x80ce, 0x817f, 0x82d4, 0x888b, 0x8cb8, 0x9000, 0x902e, 0x968a, 0x9edb, 0x9bdb, 0x4ee3, 0x53f0, 0x5927, 0x7b2c, 0x918d, 0x984c, 0x9df9, 0x6edd, 0x7027, 0x5353, 0x5544, 0x5b85, 0x6258, 0x629e, 0x62d3, 0x6ca2, 0x6fef, 0x7422, 0x8a17, 0x9438, 0x6fc1, 0x8afe, 0x8338, 0x51e7, 0x86f8, 0x53ea, /* 0x43 */ 0x53e9, 0x4f46, 0x9054, 0x8fb0, 0x596a, 0x8131, 0x5dfd, 0x7aea, 0x8fbf, 0x68da, 0x8c37, 0x72f8, 0x9c48, 0x6a3d, 0x8ab0, 0x4e39, 0x5358, 0x5606, 0x5766, 0x62c5, 0x63a2, 0x65e6, 0x6b4e, 0x6de1, 0x6e5b, 0x70ad, 0x77ed, 0x7aef, 0x7baa, 0x7dbb, 0x803d, 0x80c6, 0x86cb, 0x8a95, 0x935b, 0x56e3, 0x58c7, 0x5f3e, 0x65ad, 0x6696, 0x6a80, 0x6bb5, 0x7537, 0x8ac7, 0x5024, 0x77e5, 0x5730, 0x5f1b, 0x6065, 0x667a, 0x6c60, 0x75f4, 0x7a1a, 0x7f6e, 0x81f4, 0x8718, 0x9045, 0x99b3, 0x7bc9, 0x755c, 0x7af9, 0x7b51, 0x84c4, 0x9010, 0x79e9, 0x7a92, 0x8336, 0x5ae1, 0x7740, 0x4e2d, 0x4ef2, 0x5b99, 0x5fe0, 0x62bd, 0x663c, 0x67f1, 0x6ce8, 0x866b, 0x8877, 0x8a3b, 0x914e, 0x92f3, 0x99d0, 0x6a17, 0x7026, 0x732a, 0x82e7, 0x8457, 0x8caf, 0x4e01, 0x5146, 0x51cb, 0x558b, 0x5bf5, /* 0x44 */ 0x5e16, 0x5e33, 0x5e81, 0x5f14, 0x5f35, 0x5f6b, 0x5fb4, 0x61f2, 0x6311, 0x66a2, 0x671d, 0x6f6e, 0x7252, 0x753a, 0x773a, 0x8074, 0x8139, 0x8178, 0x8776, 0x8abf, 0x8adc, 0x8d85, 0x8df3, 0x929a, 0x9577, 0x9802, 0x9ce5, 0x52c5, 0x6357, 0x76f4, 0x6715, 0x6c88, 0x73cd, 0x8cc3, 0x93ae, 0x9673, 0x6d25, 0x589c, 0x690e, 0x69cc, 0x8ffd, 0x939a, 0x75db, 0x901a, 0x585a, 0x6802, 0x63b4, 0x69fb, 0x4f43, 0x6f2c, 0x67d8, 0x8fbb, 0x8526, 0x7db4, 0x9354, 0x693f, 0x6f70, 0x576a, 0x58f7, 0x5b2c, 0x7d2c, 0x722a, 0x540a, 0x91e3, 0x9db4, 0x4ead, 0x4f4e, 0x505c, 0x5075, 0x5243, 0x8c9e, 0x5448, 0x5824, 0x5b9a, 0x5e1d, 0x5e95, 0x5ead, 0x5ef7, 0x5f1f, 0x608c, 0x62b5, 0x633a, 0x63d0, 0x68af, 0x6c40, 0x7887, 0x798e, 0x7a0b, 0x7de0, 0x8247, 0x8a02, 0x8ae6, 0x8e44, 0x9013, /* 0x45 */ 0x90b8, 0x912d, 0x91d8, 0x9f0e, 0x6ce5, 0x6458, 0x64e2, 0x6575, 0x6ef4, 0x7684, 0x7b1b, 0x9069, 0x93d1, 0x6eba, 0x54f2, 0x5fb9, 0x64a4, 0x8f4d, 0x8fed, 0x9244, 0x5178, 0x586b, 0x5929, 0x5c55, 0x5e97, 0x6dfb, 0x7e8f, 0x751c, 0x8cbc, 0x8ee2, 0x985b, 0x70b9, 0x4f1d, 0x6bbf, 0x6fb1, 0x7530, 0x96fb, 0x514e, 0x5410, 0x5835, 0x5857, 0x59ac, 0x5c60, 0x5f92, 0x6597, 0x675c, 0x6e21, 0x767b, 0x83df, 0x8ced, 0x9014, 0x90fd, 0x934d, 0x7825, 0x783a, 0x52aa, 0x5ea6, 0x571f, 0x5974, 0x6012, 0x5012, 0x515a, 0x51ac, 0x51cd, 0x5200, 0x5510, 0x5854, 0x5858, 0x5957, 0x5b95, 0x5cf6, 0x5d8b, 0x60bc, 0x6295, 0x642d, 0x6771, 0x6843, 0x68bc, 0x68df, 0x76d7, 0x6dd8, 0x6e6f, 0x6d9b, 0x706f, 0x71c8, 0x5f53, 0x75d8, 0x7977, 0x7b49, 0x7b54, 0x7b52, 0x7cd6, 0x7d71, 0x5230, /* 0x46 */ 0x8463, 0x8569, 0x85e4, 0x8a0e, 0x8b04, 0x8c46, 0x8e0f, 0x9003, 0x900f, 0x9419, 0x9676, 0x982d, 0x9a30, 0x95d8, 0x50cd, 0x52d5, 0x540c, 0x5802, 0x5c0e, 0x61a7, 0x649e, 0x6d1e, 0x77b3, 0x7ae5, 0x80f4, 0x8404, 0x9053, 0x9285, 0x5ce0, 0x9d07, 0x533f, 0x5f97, 0x5fb3, 0x6d9c, 0x7279, 0x7763, 0x79bf, 0x7be4, 0x6bd2, 0x72ec, 0x8aad, 0x6803, 0x6a61, 0x51f8, 0x7a81, 0x6934, 0x5c4a, 0x9cf6, 0x82eb, 0x5bc5, 0x9149, 0x701e, 0x5678, 0x5c6f, 0x60c7, 0x6566, 0x6c8c, 0x8c5a, 0x9041, 0x9813, 0x5451, 0x66c7, 0x920d, 0x5948, 0x90a3, 0x5185, 0x4e4d, 0x51ea, 0x8599, 0x8b0e, 0x7058, 0x637a, 0x934b, 0x6962, 0x99b4, 0x7e04, 0x7577, 0x5357, 0x6960, 0x8edf, 0x96e3, 0x6c5d, 0x4e8c, 0x5c3c, 0x5f10, 0x8fe9, 0x5302, 0x8cd1, 0x8089, 0x8679, 0x5eff, 0x65e5, 0x4e73, 0x5165, /* 0x47 */ 0x5982, 0x5c3f, 0x97ee, 0x4efb, 0x598a, 0x5fcd, 0x8a8d, 0x6fe1, 0x79b0, 0x7962, 0x5be7, 0x8471, 0x732b, 0x71b1, 0x5e74, 0x5ff5, 0x637b, 0x649a, 0x71c3, 0x7c98, 0x4e43, 0x5efc, 0x4e4b, 0x57dc, 0x56a2, 0x60a9, 0x6fc3, 0x7d0d, 0x80fd, 0x8133, 0x81bf, 0x8fb2, 0x8997, 0x86a4, 0x5df4, 0x628a, 0x64ad, 0x8987, 0x6777, 0x6ce2, 0x6d3e, 0x7436, 0x7834, 0x5a46, 0x7f75, 0x82ad, 0x99ac, 0x4ff3, 0x5ec3, 0x62dd, 0x6392, 0x6557, 0x676f, 0x76c3, 0x724c, 0x80cc, 0x80ba, 0x8f29, 0x914d, 0x500d, 0x57f9, 0x5a92, 0x6885, 0x6973, 0x7164, 0x72fd, 0x8cb7, 0x58f2, 0x8ce0, 0x966a, 0x9019, 0x877f, 0x79e4, 0x77e7, 0x8429, 0x4f2f, 0x5265, 0x535a, 0x62cd, 0x67cf, 0x6cca, 0x767d, 0x7b94, 0x7c95, 0x8236, 0x8584, 0x8feb, 0x66dd, 0x6f20, 0x7206, 0x7e1b, 0x83ab, 0x99c1, 0x9ea6, /* 0x48 */ 0x51fd, 0x7bb1, 0x7872, 0x7bb8, 0x8087, 0x7b48, 0x6ae8, 0x5e61, 0x808c, 0x7551, 0x7560, 0x516b, 0x9262, 0x6e8c, 0x767a, 0x9197, 0x9aea, 0x4f10, 0x7f70, 0x629c, 0x7b4f, 0x95a5, 0x9ce9, 0x567a, 0x5859, 0x86e4, 0x96bc, 0x4f34, 0x5224, 0x534a, 0x53cd, 0x53db, 0x5e06, 0x642c, 0x6591, 0x677f, 0x6c3e, 0x6c4e, 0x7248, 0x72af, 0x73ed, 0x7554, 0x7e41, 0x822c, 0x85e9, 0x8ca9, 0x7bc4, 0x91c6, 0x7169, 0x9812, 0x98ef, 0x633d, 0x6669, 0x756a, 0x76e4, 0x78d0, 0x8543, 0x86ee, 0x532a, 0x5351, 0x5426, 0x5983, 0x5e87, 0x5f7c, 0x60b2, 0x6249, 0x6279, 0x62ab, 0x6590, 0x6bd4, 0x6ccc, 0x75b2, 0x76ae, 0x7891, 0x79d8, 0x7dcb, 0x7f77, 0x80a5, 0x88ab, 0x8ab9, 0x8cbb, 0x907f, 0x975e, 0x98db, 0x6a0b, 0x7c38, 0x5099, 0x5c3e, 0x5fae, 0x6787, 0x6bd8, 0x7435, 0x7709, 0x7f8e, /* 0x49 */ 0x9f3b, 0x67ca, 0x7a17, 0x5339, 0x758b, 0x9aed, 0x5f66, 0x819d, 0x83f1, 0x8098, 0x5f3c, 0x5fc5, 0x7562, 0x7b46, 0x903c, 0x6867, 0x59eb, 0x5a9b, 0x7d10, 0x767e, 0x8b2c, 0x4ff5, 0x5f6a, 0x6a19, 0x6c37, 0x6f02, 0x74e2, 0x7968, 0x8868, 0x8a55, 0x8c79, 0x5edf, 0x63cf, 0x75c5, 0x79d2, 0x82d7, 0x9328, 0x92f2, 0x849c, 0x86ed, 0x9c2d, 0x54c1, 0x5f6c, 0x658c, 0x6d5c, 0x7015, 0x8ca7, 0x8cd3, 0x983b, 0x654f, 0x74f6, 0x4e0d, 0x4ed8, 0x57e0, 0x592b, 0x5a66, 0x5bcc, 0x51a8, 0x5e03, 0x5e9c, 0x6016, 0x6276, 0x6577, 0x65a7, 0x666e, 0x6d6e, 0x7236, 0x7b26, 0x8150, 0x819a, 0x8299, 0x8b5c, 0x8ca0, 0x8ce6, 0x8d74, 0x961c, 0x9644, 0x4fae, 0x64ab, 0x6b66, 0x821e, 0x8461, 0x856a, 0x90e8, 0x5c01, 0x6953, 0x98a8, 0x847a, 0x8557, 0x4f0f, 0x526f, 0x5fa9, 0x5e45, 0x670d, /* 0x4a */ 0x798f, 0x8179, 0x8907, 0x8986, 0x6df5, 0x5f17, 0x6255, 0x6cb8, 0x4ecf, 0x7269, 0x9b92, 0x5206, 0x543b, 0x5674, 0x58b3, 0x61a4, 0x626e, 0x711a, 0x596e, 0x7c89, 0x7cde, 0x7d1b, 0x96f0, 0x6587, 0x805e, 0x4e19, 0x4f75, 0x5175, 0x5840, 0x5e63, 0x5e73, 0x5f0a, 0x67c4, 0x4e26, 0x853d, 0x9589, 0x965b, 0x7c73, 0x9801, 0x50fb, 0x58c1, 0x7656, 0x78a7, 0x5225, 0x77a5, 0x8511, 0x7b86, 0x504f, 0x5909, 0x7247, 0x7bc7, 0x7de8, 0x8fba, 0x8fd4, 0x904d, 0x4fbf, 0x52c9, 0x5a29, 0x5f01, 0x97ad, 0x4fdd, 0x8217, 0x92ea, 0x5703, 0x6355, 0x6b69, 0x752b, 0x88dc, 0x8f14, 0x7a42, 0x52df, 0x5893, 0x6155, 0x620a, 0x66ae, 0x6bcd, 0x7c3f, 0x83e9, 0x5023, 0x4ff8, 0x5305, 0x5446, 0x5831, 0x5949, 0x5b9d, 0x5cf0, 0x5cef, 0x5d29, 0x5e96, 0x62b1, 0x6367, 0x653e, 0x65b9, 0x670b, /* 0x4b */ 0x6cd5, 0x6ce1, 0x70f9, 0x7832, 0x7e2b, 0x80de, 0x82b3, 0x840c, 0x84ec, 0x8702, 0x8912, 0x8a2a, 0x8c4a, 0x90a6, 0x92d2, 0x98fd, 0x9cf3, 0x9d6c, 0x4e4f, 0x4ea1, 0x508d, 0x5256, 0x574a, 0x59a8, 0x5e3d, 0x5fd8, 0x5fd9, 0x623f, 0x66b4, 0x671b, 0x67d0, 0x68d2, 0x5192, 0x7d21, 0x80aa, 0x81a8, 0x8b00, 0x8c8c, 0x8cbf, 0x927e, 0x9632, 0x5420, 0x982c, 0x5317, 0x50d5, 0x535c, 0x58a8, 0x64b2, 0x6734, 0x7267, 0x7766, 0x7a46, 0x91e6, 0x52c3, 0x6ca1, 0x6b86, 0x5800, 0x5e4c, 0x5954, 0x672c, 0x7ffb, 0x51e1, 0x76c6, 0x6469, 0x78e8, 0x9b54, 0x9ebb, 0x57cb, 0x59b9, 0x6627, 0x679a, 0x6bce, 0x54e9, 0x69d9, 0x5e55, 0x819c, 0x6795, 0x9baa, 0x67fe, 0x9c52, 0x685d, 0x4ea6, 0x4fe3, 0x53c8, 0x62b9, 0x672b, 0x6cab, 0x8fc4, 0x4fad, 0x7e6d, 0x9ebf, 0x4e07, 0x6162, 0x6e80, /* 0x4c */ 0x6f2b, 0x8513, 0x5473, 0x672a, 0x9b45, 0x5df3, 0x7b95, 0x5cac, 0x5bc6, 0x871c, 0x6e4a, 0x84d1, 0x7a14, 0x8108, 0x5999, 0x7c8d, 0x6c11, 0x7720, 0x52d9, 0x5922, 0x7121, 0x725f, 0x77db, 0x9727, 0x9d61, 0x690b, 0x5a7f, 0x5a18, 0x51a5, 0x540d, 0x547d, 0x660e, 0x76df, 0x8ff7, 0x9298, 0x9cf4, 0x59ea, 0x725d, 0x6ec5, 0x514d, 0x68c9, 0x7dbf, 0x7dec, 0x9762, 0x9eba, 0x6478, 0x6a21, 0x8302, 0x5984, 0x5b5f, 0x6bdb, 0x731b, 0x76f2, 0x7db2, 0x8017, 0x8499, 0x5132, 0x6728, 0x9ed9, 0x76ee, 0x6762, 0x52ff, 0x9905, 0x5c24, 0x623b, 0x7c7e, 0x8cb0, 0x554f, 0x60b6, 0x7d0b, 0x9580, 0x5301, 0x4e5f, 0x51b6, 0x591c, 0x723a, 0x8036, 0x91ce, 0x5f25, 0x77e2, 0x5384, 0x5f79, 0x7d04, 0x85ac, 0x8a33, 0x8e8d, 0x9756, 0x67f3, 0x85ae, 0x9453, 0x6109, 0x6108, 0x6cb9, 0x7652, /* 0x4d */ 0x8aed, 0x8f38, 0x552f, 0x4f51, 0x512a, 0x52c7, 0x53cb, 0x5ba5, 0x5e7d, 0x60a0, 0x6182, 0x63d6, 0x6709, 0x67da, 0x6e67, 0x6d8c, 0x7336, 0x7337, 0x7531, 0x7950, 0x88d5, 0x8a98, 0x904a, 0x9091, 0x90f5, 0x96c4, 0x878d, 0x5915, 0x4e88, 0x4f59, 0x4e0e, 0x8a89, 0x8f3f, 0x9810, 0x50ad, 0x5e7c, 0x5996, 0x5bb9, 0x5eb8, 0x63da, 0x63fa, 0x64c1, 0x66dc, 0x694a, 0x69d8, 0x6d0b, 0x6eb6, 0x7194, 0x7528, 0x7aaf, 0x7f8a, 0x8000, 0x8449, 0x84c9, 0x8981, 0x8b21, 0x8e0a, 0x9065, 0x967d, 0x990a, 0x617e, 0x6291, 0x6b32, 0x6c83, 0x6d74, 0x7fcc, 0x7ffc, 0x6dc0, 0x7f85, 0x87ba, 0x88f8, 0x6765, 0x83b1, 0x983c, 0x96f7, 0x6d1b, 0x7d61, 0x843d, 0x916a, 0x4e71, 0x5375, 0x5d50, 0x6b04, 0x6feb, 0x85cd, 0x862d, 0x89a7, 0x5229, 0x540f, 0x5c65, 0x674e, 0x68a8, 0x7406, 0x7483, /* 0x4e */ 0x75e2, 0x88cf, 0x88e1, 0x91cc, 0x96e2, 0x9678, 0x5f8b, 0x7387, 0x7acb, 0x844e, 0x63a0, 0x7565, 0x5289, 0x6d41, 0x6e9c, 0x7409, 0x7559, 0x786b, 0x7c92, 0x9686, 0x7adc, 0x9f8d, 0x4fb6, 0x616e, 0x65c5, 0x865c, 0x4e86, 0x4eae, 0x50da, 0x4e21, 0x51cc, 0x5bee, 0x6599, 0x6881, 0x6dbc, 0x731f, 0x7642, 0x77ad, 0x7a1c, 0x7ce7, 0x826f, 0x8ad2, 0x907c, 0x91cf, 0x9675, 0x9818, 0x529b, 0x7dd1, 0x502b, 0x5398, 0x6797, 0x6dcb, 0x71d0, 0x7433, 0x81e8, 0x8f2a, 0x96a3, 0x9c57, 0x9e9f, 0x7460, 0x5841, 0x6d99, 0x7d2f, 0x985e, 0x4ee4, 0x4f36, 0x4f8b, 0x51b7, 0x52b1, 0x5dba, 0x601c, 0x73b2, 0x793c, 0x82d3, 0x9234, 0x96b7, 0x96f6, 0x970a, 0x9e97, 0x9f62, 0x66a6, 0x6b74, 0x5217, 0x52a3, 0x70c8, 0x88c2, 0x5ec9, 0x604b, 0x6190, 0x6f23, 0x7149, 0x7c3e, 0x7df4, 0x806f, /* 0x4f */ 0x84ee, 0x9023, 0x932c, 0x5442, 0x9b6f, 0x6ad3, 0x7089, 0x8cc2, 0x8def, 0x9732, 0x52b4, 0x5a41, 0x5eca, 0x5f04, 0x6717, 0x697c, 0x6994, 0x6d6a, 0x6f0f, 0x7262, 0x72fc, 0x7bed, 0x8001, 0x807e, 0x874b, 0x90ce, 0x516d, 0x9e93, 0x7984, 0x808b, 0x9332, 0x8ad6, 0x502d, 0x548c, 0x8a71, 0x6b6a, 0x8cc4, 0x8107, 0x60d1, 0x67a0, 0x9df2, 0x4e99, 0x4e98, 0x9c10, 0x8a6b, 0x85c1, 0x8568, 0x6900, 0x6e7e, 0x7897, 0x8155, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0x50 */ 0x5f0c, 0x4e10, 0x4e15, 0x4e2a, 0x4e31, 0x4e36, 0x4e3c, 0x4e3f, 0x4e42, 0x4e56, 0x4e58, 0x4e82, 0x4e85, 0x8c6b, 0x4e8a, 0x8212, 0x5f0d, 0x4e8e, 0x4e9e, 0x4e9f, 0x4ea0, 0x4ea2, 0x4eb0, 0x4eb3, 0x4eb6, 0x4ece, 0x4ecd, 0x4ec4, 0x4ec6, 0x4ec2, 0x4ed7, 0x4ede, 0x4eed, 0x4edf, 0x4ef7, 0x4f09, 0x4f5a, 0x4f30, 0x4f5b, 0x4f5d, 0x4f57, 0x4f47, 0x4f76, 0x4f88, 0x4f8f, 0x4f98, 0x4f7b, 0x4f69, 0x4f70, 0x4f91, 0x4f6f, 0x4f86, 0x4f96, 0x5118, 0x4fd4, 0x4fdf, 0x4fce, 0x4fd8, 0x4fdb, 0x4fd1, 0x4fda, 0x4fd0, 0x4fe4, 0x4fe5, 0x501a, 0x5028, 0x5014, 0x502a, 0x5025, 0x5005, 0x4f1c, 0x4ff6, 0x5021, 0x5029, 0x502c, 0x4ffe, 0x4fef, 0x5011, 0x5006, 0x5043, 0x5047, 0x6703, 0x5055, 0x5050, 0x5048, 0x505a, 0x5056, 0x506c, 0x5078, 0x5080, 0x509a, 0x5085, 0x50b4, 0x50b2, /* 0x51 */ 0x50c9, 0x50ca, 0x50b3, 0x50c2, 0x50d6, 0x50de, 0x50e5, 0x50ed, 0x50e3, 0x50ee, 0x50f9, 0x50f5, 0x5109, 0x5101, 0x5102, 0x5116, 0x5115, 0x5114, 0x511a, 0x5121, 0x513a, 0x5137, 0x513c, 0x513b, 0x513f, 0x5140, 0x5152, 0x514c, 0x5154, 0x5162, 0x7af8, 0x5169, 0x516a, 0x516e, 0x5180, 0x5182, 0x56d8, 0x518c, 0x5189, 0x518f, 0x5191, 0x5193, 0x5195, 0x5196, 0x51a4, 0x51a6, 0x51a2, 0x51a9, 0x51aa, 0x51ab, 0x51b3, 0x51b1, 0x51b2, 0x51b0, 0x51b5, 0x51bd, 0x51c5, 0x51c9, 0x51db, 0x51e0, 0x8655, 0x51e9, 0x51ed, 0x51f0, 0x51f5, 0x51fe, 0x5204, 0x520b, 0x5214, 0x520e, 0x5227, 0x522a, 0x522e, 0x5233, 0x5239, 0x524f, 0x5244, 0x524b, 0x524c, 0x525e, 0x5254, 0x526a, 0x5274, 0x5269, 0x5273, 0x527f, 0x527d, 0x528d, 0x5294, 0x5292, 0x5271, 0x5288, 0x5291, 0x8fa8, /* 0x52 */ 0x8fa7, 0x52ac, 0x52ad, 0x52bc, 0x52b5, 0x52c1, 0x52cd, 0x52d7, 0x52de, 0x52e3, 0x52e6, 0x98ed, 0x52e0, 0x52f3, 0x52f5, 0x52f8, 0x52f9, 0x5306, 0x5308, 0x7538, 0x530d, 0x5310, 0x530f, 0x5315, 0x531a, 0x5323, 0x532f, 0x5331, 0x5333, 0x5338, 0x5340, 0x5346, 0x5345, 0x4e17, 0x5349, 0x534d, 0x51d6, 0x535e, 0x5369, 0x536e, 0x5918, 0x537b, 0x5377, 0x5382, 0x5396, 0x53a0, 0x53a6, 0x53a5, 0x53ae, 0x53b0, 0x53b6, 0x53c3, 0x7c12, 0x96d9, 0x53df, 0x66fc, 0x71ee, 0x53ee, 0x53e8, 0x53ed, 0x53fa, 0x5401, 0x543d, 0x5440, 0x542c, 0x542d, 0x543c, 0x542e, 0x5436, 0x5429, 0x541d, 0x544e, 0x548f, 0x5475, 0x548e, 0x545f, 0x5471, 0x5477, 0x5470, 0x5492, 0x547b, 0x5480, 0x5476, 0x5484, 0x5490, 0x5486, 0x54c7, 0x54a2, 0x54b8, 0x54a5, 0x54ac, 0x54c4, 0x54c8, 0x54a8, /* 0x53 */ 0x54ab, 0x54c2, 0x54a4, 0x54be, 0x54bc, 0x54d8, 0x54e5, 0x54e6, 0x550f, 0x5514, 0x54fd, 0x54ee, 0x54ed, 0x54fa, 0x54e2, 0x5539, 0x5540, 0x5563, 0x554c, 0x552e, 0x555c, 0x5545, 0x5556, 0x5557, 0x5538, 0x5533, 0x555d, 0x5599, 0x5580, 0x54af, 0x558a, 0x559f, 0x557b, 0x557e, 0x5598, 0x559e, 0x55ae, 0x557c, 0x5583, 0x55a9, 0x5587, 0x55a8, 0x55da, 0x55c5, 0x55df, 0x55c4, 0x55dc, 0x55e4, 0x55d4, 0x5614, 0x55f7, 0x5616, 0x55fe, 0x55fd, 0x561b, 0x55f9, 0x564e, 0x5650, 0x71df, 0x5634, 0x5636, 0x5632, 0x5638, 0x566b, 0x5664, 0x562f, 0x566c, 0x566a, 0x5686, 0x5680, 0x568a, 0x56a0, 0x5694, 0x568f, 0x56a5, 0x56ae, 0x56b6, 0x56b4, 0x56c2, 0x56bc, 0x56c1, 0x56c3, 0x56c0, 0x56c8, 0x56ce, 0x56d1, 0x56d3, 0x56d7, 0x56ee, 0x56f9, 0x5700, 0x56ff, 0x5704, 0x5709, /* 0x54 */ 0x5708, 0x570b, 0x570d, 0x5713, 0x5718, 0x5716, 0x55c7, 0x571c, 0x5726, 0x5737, 0x5738, 0x574e, 0x573b, 0x5740, 0x574f, 0x5769, 0x57c0, 0x5788, 0x5761, 0x577f, 0x5789, 0x5793, 0x57a0, 0x57b3, 0x57a4, 0x57aa, 0x57b0, 0x57c3, 0x57c6, 0x57d4, 0x57d2, 0x57d3, 0x580a, 0x57d6, 0x57e3, 0x580b, 0x5819, 0x581d, 0x5872, 0x5821, 0x5862, 0x584b, 0x5870, 0x6bc0, 0x5852, 0x583d, 0x5879, 0x5885, 0x58b9, 0x589f, 0x58ab, 0x58ba, 0x58de, 0x58bb, 0x58b8, 0x58ae, 0x58c5, 0x58d3, 0x58d1, 0x58d7, 0x58d9, 0x58d8, 0x58e5, 0x58dc, 0x58e4, 0x58df, 0x58ef, 0x58fa, 0x58f9, 0x58fb, 0x58fc, 0x58fd, 0x5902, 0x590a, 0x5910, 0x591b, 0x68a6, 0x5925, 0x592c, 0x592d, 0x5932, 0x5938, 0x593e, 0x7ad2, 0x5955, 0x5950, 0x594e, 0x595a, 0x5958, 0x5962, 0x5960, 0x5967, 0x596c, 0x5969, /* 0x55 */ 0x5978, 0x5981, 0x599d, 0x4f5e, 0x4fab, 0x59a3, 0x59b2, 0x59c6, 0x59e8, 0x59dc, 0x598d, 0x59d9, 0x59da, 0x5a25, 0x5a1f, 0x5a11, 0x5a1c, 0x5a09, 0x5a1a, 0x5a40, 0x5a6c, 0x5a49, 0x5a35, 0x5a36, 0x5a62, 0x5a6a, 0x5a9a, 0x5abc, 0x5abe, 0x5acb, 0x5ac2, 0x5abd, 0x5ae3, 0x5ad7, 0x5ae6, 0x5ae9, 0x5ad6, 0x5afa, 0x5afb, 0x5b0c, 0x5b0b, 0x5b16, 0x5b32, 0x5ad0, 0x5b2a, 0x5b36, 0x5b3e, 0x5b43, 0x5b45, 0x5b40, 0x5b51, 0x5b55, 0x5b5a, 0x5b5b, 0x5b65, 0x5b69, 0x5b70, 0x5b73, 0x5b75, 0x5b78, 0x6588, 0x5b7a, 0x5b80, 0x5b83, 0x5ba6, 0x5bb8, 0x5bc3, 0x5bc7, 0x5bc9, 0x5bd4, 0x5bd0, 0x5be4, 0x5be6, 0x5be2, 0x5bde, 0x5be5, 0x5beb, 0x5bf0, 0x5bf6, 0x5bf3, 0x5c05, 0x5c07, 0x5c08, 0x5c0d, 0x5c13, 0x5c20, 0x5c22, 0x5c28, 0x5c38, 0x5c39, 0x5c41, 0x5c46, 0x5c4e, 0x5c53, /* 0x56 */ 0x5c50, 0x5c4f, 0x5b71, 0x5c6c, 0x5c6e, 0x4e62, 0x5c76, 0x5c79, 0x5c8c, 0x5c91, 0x5c94, 0x599b, 0x5cab, 0x5cbb, 0x5cb6, 0x5cbc, 0x5cb7, 0x5cc5, 0x5cbe, 0x5cc7, 0x5cd9, 0x5ce9, 0x5cfd, 0x5cfa, 0x5ced, 0x5d8c, 0x5cea, 0x5d0b, 0x5d15, 0x5d17, 0x5d5c, 0x5d1f, 0x5d1b, 0x5d11, 0x5d14, 0x5d22, 0x5d1a, 0x5d19, 0x5d18, 0x5d4c, 0x5d52, 0x5d4e, 0x5d4b, 0x5d6c, 0x5d73, 0x5d76, 0x5d87, 0x5d84, 0x5d82, 0x5da2, 0x5d9d, 0x5dac, 0x5dae, 0x5dbd, 0x5d90, 0x5db7, 0x5dbc, 0x5dc9, 0x5dcd, 0x5dd3, 0x5dd2, 0x5dd6, 0x5ddb, 0x5deb, 0x5df2, 0x5df5, 0x5e0b, 0x5e1a, 0x5e19, 0x5e11, 0x5e1b, 0x5e36, 0x5e37, 0x5e44, 0x5e43, 0x5e40, 0x5e4e, 0x5e57, 0x5e54, 0x5e5f, 0x5e62, 0x5e64, 0x5e47, 0x5e75, 0x5e76, 0x5e7a, 0x9ebc, 0x5e7f, 0x5ea0, 0x5ec1, 0x5ec2, 0x5ec8, 0x5ed0, 0x5ecf, /* 0x57 */ 0x5ed6, 0x5ee3, 0x5edd, 0x5eda, 0x5edb, 0x5ee2, 0x5ee1, 0x5ee8, 0x5ee9, 0x5eec, 0x5ef1, 0x5ef3, 0x5ef0, 0x5ef4, 0x5ef8, 0x5efe, 0x5f03, 0x5f09, 0x5f5d, 0x5f5c, 0x5f0b, 0x5f11, 0x5f16, 0x5f29, 0x5f2d, 0x5f38, 0x5f41, 0x5f48, 0x5f4c, 0x5f4e, 0x5f2f, 0x5f51, 0x5f56, 0x5f57, 0x5f59, 0x5f61, 0x5f6d, 0x5f73, 0x5f77, 0x5f83, 0x5f82, 0x5f7f, 0x5f8a, 0x5f88, 0x5f91, 0x5f87, 0x5f9e, 0x5f99, 0x5f98, 0x5fa0, 0x5fa8, 0x5fad, 0x5fbc, 0x5fd6, 0x5ffb, 0x5fe4, 0x5ff8, 0x5ff1, 0x5fdd, 0x60b3, 0x5fff, 0x6021, 0x6060, 0x6019, 0x6010, 0x6029, 0x600e, 0x6031, 0x601b, 0x6015, 0x602b, 0x6026, 0x600f, 0x603a, 0x605a, 0x6041, 0x606a, 0x6077, 0x605f, 0x604a, 0x6046, 0x604d, 0x6063, 0x6043, 0x6064, 0x6042, 0x606c, 0x606b, 0x6059, 0x6081, 0x608d, 0x60e7, 0x6083, 0x609a, /* 0x58 */ 0x6084, 0x609b, 0x6096, 0x6097, 0x6092, 0x60a7, 0x608b, 0x60e1, 0x60b8, 0x60e0, 0x60d3, 0x60b4, 0x5ff0, 0x60bd, 0x60c6, 0x60b5, 0x60d8, 0x614d, 0x6115, 0x6106, 0x60f6, 0x60f7, 0x6100, 0x60f4, 0x60fa, 0x6103, 0x6121, 0x60fb, 0x60f1, 0x610d, 0x610e, 0x6147, 0x613e, 0x6128, 0x6127, 0x614a, 0x613f, 0x613c, 0x612c, 0x6134, 0x613d, 0x6142, 0x6144, 0x6173, 0x6177, 0x6158, 0x6159, 0x615a, 0x616b, 0x6174, 0x616f, 0x6165, 0x6171, 0x615f, 0x615d, 0x6153, 0x6175, 0x6199, 0x6196, 0x6187, 0x61ac, 0x6194, 0x619a, 0x618a, 0x6191, 0x61ab, 0x61ae, 0x61cc, 0x61ca, 0x61c9, 0x61f7, 0x61c8, 0x61c3, 0x61c6, 0x61ba, 0x61cb, 0x7f79, 0x61cd, 0x61e6, 0x61e3, 0x61f6, 0x61fa, 0x61f4, 0x61ff, 0x61fd, 0x61fc, 0x61fe, 0x6200, 0x6208, 0x6209, 0x620d, 0x620c, 0x6214, 0x621b, /* 0x59 */ 0x621e, 0x6221, 0x622a, 0x622e, 0x6230, 0x6232, 0x6233, 0x6241, 0x624e, 0x625e, 0x6263, 0x625b, 0x6260, 0x6268, 0x627c, 0x6282, 0x6289, 0x627e, 0x6292, 0x6293, 0x6296, 0x62d4, 0x6283, 0x6294, 0x62d7, 0x62d1, 0x62bb, 0x62cf, 0x62ff, 0x62c6, 0x64d4, 0x62c8, 0x62dc, 0x62cc, 0x62ca, 0x62c2, 0x62c7, 0x629b, 0x62c9, 0x630c, 0x62ee, 0x62f1, 0x6327, 0x6302, 0x6308, 0x62ef, 0x62f5, 0x6350, 0x633e, 0x634d, 0x641c, 0x634f, 0x6396, 0x638e, 0x6380, 0x63ab, 0x6376, 0x63a3, 0x638f, 0x6389, 0x639f, 0x63b5, 0x636b, 0x6369, 0x63be, 0x63e9, 0x63c0, 0x63c6, 0x63e3, 0x63c9, 0x63d2, 0x63f6, 0x63c4, 0x6416, 0x6434, 0x6406, 0x6413, 0x6426, 0x6436, 0x651d, 0x6417, 0x6428, 0x640f, 0x6467, 0x646f, 0x6476, 0x644e, 0x652a, 0x6495, 0x6493, 0x64a5, 0x64a9, 0x6488, 0x64bc, /* 0x5a */ 0x64da, 0x64d2, 0x64c5, 0x64c7, 0x64bb, 0x64d8, 0x64c2, 0x64f1, 0x64e7, 0x8209, 0x64e0, 0x64e1, 0x62ac, 0x64e3, 0x64ef, 0x652c, 0x64f6, 0x64f4, 0x64f2, 0x64fa, 0x6500, 0x64fd, 0x6518, 0x651c, 0x6505, 0x6524, 0x6523, 0x652b, 0x6534, 0x6535, 0x6537, 0x6536, 0x6538, 0x754b, 0x6548, 0x6556, 0x6555, 0x654d, 0x6558, 0x655e, 0x655d, 0x6572, 0x6578, 0x6582, 0x6583, 0x8b8a, 0x659b, 0x659f, 0x65ab, 0x65b7, 0x65c3, 0x65c6, 0x65c1, 0x65c4, 0x65cc, 0x65d2, 0x65db, 0x65d9, 0x65e0, 0x65e1, 0x65f1, 0x6772, 0x660a, 0x6603, 0x65fb, 0x6773, 0x6635, 0x6636, 0x6634, 0x661c, 0x664f, 0x6644, 0x6649, 0x6641, 0x665e, 0x665d, 0x6664, 0x6667, 0x6668, 0x665f, 0x6662, 0x6670, 0x6683, 0x6688, 0x668e, 0x6689, 0x6684, 0x6698, 0x669d, 0x66c1, 0x66b9, 0x66c9, 0x66be, 0x66bc, /* 0x5b */ 0x66c4, 0x66b8, 0x66d6, 0x66da, 0x66e0, 0x663f, 0x66e6, 0x66e9, 0x66f0, 0x66f5, 0x66f7, 0x670f, 0x6716, 0x671e, 0x6726, 0x6727, 0x9738, 0x672e, 0x673f, 0x6736, 0x6741, 0x6738, 0x6737, 0x6746, 0x675e, 0x6760, 0x6759, 0x6763, 0x6764, 0x6789, 0x6770, 0x67a9, 0x677c, 0x676a, 0x678c, 0x678b, 0x67a6, 0x67a1, 0x6785, 0x67b7, 0x67ef, 0x67b4, 0x67ec, 0x67b3, 0x67e9, 0x67b8, 0x67e4, 0x67de, 0x67dd, 0x67e2, 0x67ee, 0x67b9, 0x67ce, 0x67c6, 0x67e7, 0x6a9c, 0x681e, 0x6846, 0x6829, 0x6840, 0x684d, 0x6832, 0x684e, 0x68b3, 0x682b, 0x6859, 0x6863, 0x6877, 0x687f, 0x689f, 0x688f, 0x68ad, 0x6894, 0x689d, 0x689b, 0x6883, 0x6aae, 0x68b9, 0x6874, 0x68b5, 0x68a0, 0x68ba, 0x690f, 0x688d, 0x687e, 0x6901, 0x68ca, 0x6908, 0x68d8, 0x6922, 0x6926, 0x68e1, 0x690c, 0x68cd, /* 0x5c */ 0x68d4, 0x68e7, 0x68d5, 0x6936, 0x6912, 0x6904, 0x68d7, 0x68e3, 0x6925, 0x68f9, 0x68e0, 0x68ef, 0x6928, 0x692a, 0x691a, 0x6923, 0x6921, 0x68c6, 0x6979, 0x6977, 0x695c, 0x6978, 0x696b, 0x6954, 0x697e, 0x696e, 0x6939, 0x6974, 0x693d, 0x6959, 0x6930, 0x6961, 0x695e, 0x695d, 0x6981, 0x696a, 0x69b2, 0x69ae, 0x69d0, 0x69bf, 0x69c1, 0x69d3, 0x69be, 0x69ce, 0x5be8, 0x69ca, 0x69dd, 0x69bb, 0x69c3, 0x69a7, 0x6a2e, 0x6991, 0x69a0, 0x699c, 0x6995, 0x69b4, 0x69de, 0x69e8, 0x6a02, 0x6a1b, 0x69ff, 0x6b0a, 0x69f9, 0x69f2, 0x69e7, 0x6a05, 0x69b1, 0x6a1e, 0x69ed, 0x6a14, 0x69eb, 0x6a0a, 0x6a12, 0x6ac1, 0x6a23, 0x6a13, 0x6a44, 0x6a0c, 0x6a72, 0x6a36, 0x6a78, 0x6a47, 0x6a62, 0x6a59, 0x6a66, 0x6a48, 0x6a38, 0x6a22, 0x6a90, 0x6a8d, 0x6aa0, 0x6a84, 0x6aa2, 0x6aa3, /* 0x5d */ 0x6a97, 0x8617, 0x6abb, 0x6ac3, 0x6ac2, 0x6ab8, 0x6ab3, 0x6aac, 0x6ade, 0x6ad1, 0x6adf, 0x6aaa, 0x6ada, 0x6aea, 0x6afb, 0x6b05, 0x8616, 0x6afa, 0x6b12, 0x6b16, 0x9b31, 0x6b1f, 0x6b38, 0x6b37, 0x76dc, 0x6b39, 0x98ee, 0x6b47, 0x6b43, 0x6b49, 0x6b50, 0x6b59, 0x6b54, 0x6b5b, 0x6b5f, 0x6b61, 0x6b78, 0x6b79, 0x6b7f, 0x6b80, 0x6b84, 0x6b83, 0x6b8d, 0x6b98, 0x6b95, 0x6b9e, 0x6ba4, 0x6baa, 0x6bab, 0x6baf, 0x6bb2, 0x6bb1, 0x6bb3, 0x6bb7, 0x6bbc, 0x6bc6, 0x6bcb, 0x6bd3, 0x6bdf, 0x6bec, 0x6beb, 0x6bf3, 0x6bef, 0x9ebe, 0x6c08, 0x6c13, 0x6c14, 0x6c1b, 0x6c24, 0x6c23, 0x6c5e, 0x6c55, 0x6c62, 0x6c6a, 0x6c82, 0x6c8d, 0x6c9a, 0x6c81, 0x6c9b, 0x6c7e, 0x6c68, 0x6c73, 0x6c92, 0x6c90, 0x6cc4, 0x6cf1, 0x6cd3, 0x6cbd, 0x6cd7, 0x6cc5, 0x6cdd, 0x6cae, 0x6cb1, 0x6cbe, /* 0x5e */ 0x6cba, 0x6cdb, 0x6cef, 0x6cd9, 0x6cea, 0x6d1f, 0x884d, 0x6d36, 0x6d2b, 0x6d3d, 0x6d38, 0x6d19, 0x6d35, 0x6d33, 0x6d12, 0x6d0c, 0x6d63, 0x6d93, 0x6d64, 0x6d5a, 0x6d79, 0x6d59, 0x6d8e, 0x6d95, 0x6fe4, 0x6d85, 0x6df9, 0x6e15, 0x6e0a, 0x6db5, 0x6dc7, 0x6de6, 0x6db8, 0x6dc6, 0x6dec, 0x6dde, 0x6dcc, 0x6de8, 0x6dd2, 0x6dc5, 0x6dfa, 0x6dd9, 0x6de4, 0x6dd5, 0x6dea, 0x6dee, 0x6e2d, 0x6e6e, 0x6e2e, 0x6e19, 0x6e72, 0x6e5f, 0x6e3e, 0x6e23, 0x6e6b, 0x6e2b, 0x6e76, 0x6e4d, 0x6e1f, 0x6e43, 0x6e3a, 0x6e4e, 0x6e24, 0x6eff, 0x6e1d, 0x6e38, 0x6e82, 0x6eaa, 0x6e98, 0x6ec9, 0x6eb7, 0x6ed3, 0x6ebd, 0x6eaf, 0x6ec4, 0x6eb2, 0x6ed4, 0x6ed5, 0x6e8f, 0x6ea5, 0x6ec2, 0x6e9f, 0x6f41, 0x6f11, 0x704c, 0x6eec, 0x6ef8, 0x6efe, 0x6f3f, 0x6ef2, 0x6f31, 0x6eef, 0x6f32, 0x6ecc, /* 0x5f */ 0x6f3e, 0x6f13, 0x6ef7, 0x6f86, 0x6f7a, 0x6f78, 0x6f81, 0x6f80, 0x6f6f, 0x6f5b, 0x6ff3, 0x6f6d, 0x6f82, 0x6f7c, 0x6f58, 0x6f8e, 0x6f91, 0x6fc2, 0x6f66, 0x6fb3, 0x6fa3, 0x6fa1, 0x6fa4, 0x6fb9, 0x6fc6, 0x6faa, 0x6fdf, 0x6fd5, 0x6fec, 0x6fd4, 0x6fd8, 0x6ff1, 0x6fee, 0x6fdb, 0x7009, 0x700b, 0x6ffa, 0x7011, 0x7001, 0x700f, 0x6ffe, 0x701b, 0x701a, 0x6f74, 0x701d, 0x7018, 0x701f, 0x7030, 0x703e, 0x7032, 0x7051, 0x7063, 0x7099, 0x7092, 0x70af, 0x70f1, 0x70ac, 0x70b8, 0x70b3, 0x70ae, 0x70df, 0x70cb, 0x70dd, 0x70d9, 0x7109, 0x70fd, 0x711c, 0x7119, 0x7165, 0x7155, 0x7188, 0x7166, 0x7162, 0x714c, 0x7156, 0x716c, 0x718f, 0x71fb, 0x7184, 0x7195, 0x71a8, 0x71ac, 0x71d7, 0x71b9, 0x71be, 0x71d2, 0x71c9, 0x71d4, 0x71ce, 0x71e0, 0x71ec, 0x71e7, 0x71f5, 0x71fc, /* 0x60 */ 0x71f9, 0x71ff, 0x720d, 0x7210, 0x721b, 0x7228, 0x722d, 0x722c, 0x7230, 0x7232, 0x723b, 0x723c, 0x723f, 0x7240, 0x7246, 0x724b, 0x7258, 0x7274, 0x727e, 0x7282, 0x7281, 0x7287, 0x7292, 0x7296, 0x72a2, 0x72a7, 0x72b9, 0x72b2, 0x72c3, 0x72c6, 0x72c4, 0x72ce, 0x72d2, 0x72e2, 0x72e0, 0x72e1, 0x72f9, 0x72f7, 0x500f, 0x7317, 0x730a, 0x731c, 0x7316, 0x731d, 0x7334, 0x732f, 0x7329, 0x7325, 0x733e, 0x734e, 0x734f, 0x9ed8, 0x7357, 0x736a, 0x7368, 0x7370, 0x7378, 0x7375, 0x737b, 0x737a, 0x73c8, 0x73b3, 0x73ce, 0x73bb, 0x73c0, 0x73e5, 0x73ee, 0x73de, 0x74a2, 0x7405, 0x746f, 0x7425, 0x73f8, 0x7432, 0x743a, 0x7455, 0x743f, 0x745f, 0x7459, 0x7441, 0x745c, 0x7469, 0x7470, 0x7463, 0x746a, 0x7476, 0x747e, 0x748b, 0x749e, 0x74a7, 0x74ca, 0x74cf, 0x74d4, 0x73f1, /* 0x61 */ 0x74e0, 0x74e3, 0x74e7, 0x74e9, 0x74ee, 0x74f2, 0x74f0, 0x74f1, 0x74f8, 0x74f7, 0x7504, 0x7503, 0x7505, 0x750c, 0x750e, 0x750d, 0x7515, 0x7513, 0x751e, 0x7526, 0x752c, 0x753c, 0x7544, 0x754d, 0x754a, 0x7549, 0x755b, 0x7546, 0x755a, 0x7569, 0x7564, 0x7567, 0x756b, 0x756d, 0x7578, 0x7576, 0x7586, 0x7587, 0x7574, 0x758a, 0x7589, 0x7582, 0x7594, 0x759a, 0x759d, 0x75a5, 0x75a3, 0x75c2, 0x75b3, 0x75c3, 0x75b5, 0x75bd, 0x75b8, 0x75bc, 0x75b1, 0x75cd, 0x75ca, 0x75d2, 0x75d9, 0x75e3, 0x75de, 0x75fe, 0x75ff, 0x75fc, 0x7601, 0x75f0, 0x75fa, 0x75f2, 0x75f3, 0x760b, 0x760d, 0x7609, 0x761f, 0x7627, 0x7620, 0x7621, 0x7622, 0x7624, 0x7634, 0x7630, 0x763b, 0x7647, 0x7648, 0x7646, 0x765c, 0x7658, 0x7661, 0x7662, 0x7668, 0x7669, 0x766a, 0x7667, 0x766c, 0x7670, /* 0x62 */ 0x7672, 0x7676, 0x7678, 0x767c, 0x7680, 0x7683, 0x7688, 0x768b, 0x768e, 0x7696, 0x7693, 0x7699, 0x769a, 0x76b0, 0x76b4, 0x76b8, 0x76b9, 0x76ba, 0x76c2, 0x76cd, 0x76d6, 0x76d2, 0x76de, 0x76e1, 0x76e5, 0x76e7, 0x76ea, 0x862f, 0x76fb, 0x7708, 0x7707, 0x7704, 0x7729, 0x7724, 0x771e, 0x7725, 0x7726, 0x771b, 0x7737, 0x7738, 0x7747, 0x775a, 0x7768, 0x776b, 0x775b, 0x7765, 0x777f, 0x777e, 0x7779, 0x778e, 0x778b, 0x7791, 0x77a0, 0x779e, 0x77b0, 0x77b6, 0x77b9, 0x77bf, 0x77bc, 0x77bd, 0x77bb, 0x77c7, 0x77cd, 0x77d7, 0x77da, 0x77dc, 0x77e3, 0x77ee, 0x77fc, 0x780c, 0x7812, 0x7926, 0x7820, 0x792a, 0x7845, 0x788e, 0x7874, 0x7886, 0x787c, 0x789a, 0x788c, 0x78a3, 0x78b5, 0x78aa, 0x78af, 0x78d1, 0x78c6, 0x78cb, 0x78d4, 0x78be, 0x78bc, 0x78c5, 0x78ca, 0x78ec, /* 0x63 */ 0x78e7, 0x78da, 0x78fd, 0x78f4, 0x7907, 0x7912, 0x7911, 0x7919, 0x792c, 0x792b, 0x7940, 0x7960, 0x7957, 0x795f, 0x795a, 0x7955, 0x7953, 0x797a, 0x797f, 0x798a, 0x799d, 0x79a7, 0x9f4b, 0x79aa, 0x79ae, 0x79b3, 0x79b9, 0x79ba, 0x79c9, 0x79d5, 0x79e7, 0x79ec, 0x79e1, 0x79e3, 0x7a08, 0x7a0d, 0x7a18, 0x7a19, 0x7a20, 0x7a1f, 0x7980, 0x7a31, 0x7a3b, 0x7a3e, 0x7a37, 0x7a43, 0x7a57, 0x7a49, 0x7a61, 0x7a62, 0x7a69, 0x9f9d, 0x7a70, 0x7a79, 0x7a7d, 0x7a88, 0x7a97, 0x7a95, 0x7a98, 0x7a96, 0x7aa9, 0x7ac8, 0x7ab0, 0x7ab6, 0x7ac5, 0x7ac4, 0x7abf, 0x9083, 0x7ac7, 0x7aca, 0x7acd, 0x7acf, 0x7ad5, 0x7ad3, 0x7ad9, 0x7ada, 0x7add, 0x7ae1, 0x7ae2, 0x7ae6, 0x7aed, 0x7af0, 0x7b02, 0x7b0f, 0x7b0a, 0x7b06, 0x7b33, 0x7b18, 0x7b19, 0x7b1e, 0x7b35, 0x7b28, 0x7b36, 0x7b50, /* 0x64 */ 0x7b7a, 0x7b04, 0x7b4d, 0x7b0b, 0x7b4c, 0x7b45, 0x7b75, 0x7b65, 0x7b74, 0x7b67, 0x7b70, 0x7b71, 0x7b6c, 0x7b6e, 0x7b9d, 0x7b98, 0x7b9f, 0x7b8d, 0x7b9c, 0x7b9a, 0x7b8b, 0x7b92, 0x7b8f, 0x7b5d, 0x7b99, 0x7bcb, 0x7bc1, 0x7bcc, 0x7bcf, 0x7bb4, 0x7bc6, 0x7bdd, 0x7be9, 0x7c11, 0x7c14, 0x7be6, 0x7be5, 0x7c60, 0x7c00, 0x7c07, 0x7c13, 0x7bf3, 0x7bf7, 0x7c17, 0x7c0d, 0x7bf6, 0x7c23, 0x7c27, 0x7c2a, 0x7c1f, 0x7c37, 0x7c2b, 0x7c3d, 0x7c4c, 0x7c43, 0x7c54, 0x7c4f, 0x7c40, 0x7c50, 0x7c58, 0x7c5f, 0x7c64, 0x7c56, 0x7c65, 0x7c6c, 0x7c75, 0x7c83, 0x7c90, 0x7ca4, 0x7cad, 0x7ca2, 0x7cab, 0x7ca1, 0x7ca8, 0x7cb3, 0x7cb2, 0x7cb1, 0x7cae, 0x7cb9, 0x7cbd, 0x7cc0, 0x7cc5, 0x7cc2, 0x7cd8, 0x7cd2, 0x7cdc, 0x7ce2, 0x9b3b, 0x7cef, 0x7cf2, 0x7cf4, 0x7cf6, 0x7cfa, 0x7d06, /* 0x65 */ 0x7d02, 0x7d1c, 0x7d15, 0x7d0a, 0x7d45, 0x7d4b, 0x7d2e, 0x7d32, 0x7d3f, 0x7d35, 0x7d46, 0x7d73, 0x7d56, 0x7d4e, 0x7d72, 0x7d68, 0x7d6e, 0x7d4f, 0x7d63, 0x7d93, 0x7d89, 0x7d5b, 0x7d8f, 0x7d7d, 0x7d9b, 0x7dba, 0x7dae, 0x7da3, 0x7db5, 0x7dc7, 0x7dbd, 0x7dab, 0x7e3d, 0x7da2, 0x7daf, 0x7ddc, 0x7db8, 0x7d9f, 0x7db0, 0x7dd8, 0x7ddd, 0x7de4, 0x7dde, 0x7dfb, 0x7df2, 0x7de1, 0x7e05, 0x7e0a, 0x7e23, 0x7e21, 0x7e12, 0x7e31, 0x7e1f, 0x7e09, 0x7e0b, 0x7e22, 0x7e46, 0x7e66, 0x7e3b, 0x7e35, 0x7e39, 0x7e43, 0x7e37, 0x7e32, 0x7e3a, 0x7e67, 0x7e5d, 0x7e56, 0x7e5e, 0x7e59, 0x7e5a, 0x7e79, 0x7e6a, 0x7e69, 0x7e7c, 0x7e7b, 0x7e83, 0x7dd5, 0x7e7d, 0x8fae, 0x7e7f, 0x7e88, 0x7e89, 0x7e8c, 0x7e92, 0x7e90, 0x7e93, 0x7e94, 0x7e96, 0x7e8e, 0x7e9b, 0x7e9c, 0x7f38, 0x7f3a, /* 0x66 */ 0x7f45, 0x7f4c, 0x7f4d, 0x7f4e, 0x7f50, 0x7f51, 0x7f55, 0x7f54, 0x7f58, 0x7f5f, 0x7f60, 0x7f68, 0x7f69, 0x7f67, 0x7f78, 0x7f82, 0x7f86, 0x7f83, 0x7f88, 0x7f87, 0x7f8c, 0x7f94, 0x7f9e, 0x7f9d, 0x7f9a, 0x7fa3, 0x7faf, 0x7fb2, 0x7fb9, 0x7fae, 0x7fb6, 0x7fb8, 0x8b71, 0x7fc5, 0x7fc6, 0x7fca, 0x7fd5, 0x7fd4, 0x7fe1, 0x7fe6, 0x7fe9, 0x7ff3, 0x7ff9, 0x98dc, 0x8006, 0x8004, 0x800b, 0x8012, 0x8018, 0x8019, 0x801c, 0x8021, 0x8028, 0x803f, 0x803b, 0x804a, 0x8046, 0x8052, 0x8058, 0x805a, 0x805f, 0x8062, 0x8068, 0x8073, 0x8072, 0x8070, 0x8076, 0x8079, 0x807d, 0x807f, 0x8084, 0x8086, 0x8085, 0x809b, 0x8093, 0x809a, 0x80ad, 0x5190, 0x80ac, 0x80db, 0x80e5, 0x80d9, 0x80dd, 0x80c4, 0x80da, 0x80d6, 0x8109, 0x80ef, 0x80f1, 0x811b, 0x8129, 0x8123, 0x812f, 0x814b, /* 0x67 */ 0x968b, 0x8146, 0x813e, 0x8153, 0x8151, 0x80fc, 0x8171, 0x816e, 0x8165, 0x8166, 0x8174, 0x8183, 0x8188, 0x818a, 0x8180, 0x8182, 0x81a0, 0x8195, 0x81a4, 0x81a3, 0x815f, 0x8193, 0x81a9, 0x81b0, 0x81b5, 0x81be, 0x81b8, 0x81bd, 0x81c0, 0x81c2, 0x81ba, 0x81c9, 0x81cd, 0x81d1, 0x81d9, 0x81d8, 0x81c8, 0x81da, 0x81df, 0x81e0, 0x81e7, 0x81fa, 0x81fb, 0x81fe, 0x8201, 0x8202, 0x8205, 0x8207, 0x820a, 0x820d, 0x8210, 0x8216, 0x8229, 0x822b, 0x8238, 0x8233, 0x8240, 0x8259, 0x8258, 0x825d, 0x825a, 0x825f, 0x8264, 0x8262, 0x8268, 0x826a, 0x826b, 0x822e, 0x8271, 0x8277, 0x8278, 0x827e, 0x828d, 0x8292, 0x82ab, 0x829f, 0x82bb, 0x82ac, 0x82e1, 0x82e3, 0x82df, 0x82d2, 0x82f4, 0x82f3, 0x82fa, 0x8393, 0x8303, 0x82fb, 0x82f9, 0x82de, 0x8306, 0x82dc, 0x8309, 0x82d9, /* 0x68 */ 0x8335, 0x8334, 0x8316, 0x8332, 0x8331, 0x8340, 0x8339, 0x8350, 0x8345, 0x832f, 0x832b, 0x8317, 0x8318, 0x8385, 0x839a, 0x83aa, 0x839f, 0x83a2, 0x8396, 0x8323, 0x838e, 0x8387, 0x838a, 0x837c, 0x83b5, 0x8373, 0x8375, 0x83a0, 0x8389, 0x83a8, 0x83f4, 0x8413, 0x83eb, 0x83ce, 0x83fd, 0x8403, 0x83d8, 0x840b, 0x83c1, 0x83f7, 0x8407, 0x83e0, 0x83f2, 0x840d, 0x8422, 0x8420, 0x83bd, 0x8438, 0x8506, 0x83fb, 0x846d, 0x842a, 0x843c, 0x855a, 0x8484, 0x8477, 0x846b, 0x84ad, 0x846e, 0x8482, 0x8469, 0x8446, 0x842c, 0x846f, 0x8479, 0x8435, 0x84ca, 0x8462, 0x84b9, 0x84bf, 0x849f, 0x84d9, 0x84cd, 0x84bb, 0x84da, 0x84d0, 0x84c1, 0x84c6, 0x84d6, 0x84a1, 0x8521, 0x84ff, 0x84f4, 0x8517, 0x8518, 0x852c, 0x851f, 0x8515, 0x8514, 0x84fc, 0x8540, 0x8563, 0x8558, 0x8548, /* 0x69 */ 0x8541, 0x8602, 0x854b, 0x8555, 0x8580, 0x85a4, 0x8588, 0x8591, 0x858a, 0x85a8, 0x856d, 0x8594, 0x859b, 0x85ea, 0x8587, 0x859c, 0x8577, 0x857e, 0x8590, 0x85c9, 0x85ba, 0x85cf, 0x85b9, 0x85d0, 0x85d5, 0x85dd, 0x85e5, 0x85dc, 0x85f9, 0x860a, 0x8613, 0x860b, 0x85fe, 0x85fa, 0x8606, 0x8622, 0x861a, 0x8630, 0x863f, 0x864d, 0x4e55, 0x8654, 0x865f, 0x8667, 0x8671, 0x8693, 0x86a3, 0x86a9, 0x86aa, 0x868b, 0x868c, 0x86b6, 0x86af, 0x86c4, 0x86c6, 0x86b0, 0x86c9, 0x8823, 0x86ab, 0x86d4, 0x86de, 0x86e9, 0x86ec, 0x86df, 0x86db, 0x86ef, 0x8712, 0x8706, 0x8708, 0x8700, 0x8703, 0x86fb, 0x8711, 0x8709, 0x870d, 0x86f9, 0x870a, 0x8734, 0x873f, 0x8737, 0x873b, 0x8725, 0x8729, 0x871a, 0x8760, 0x875f, 0x8778, 0x874c, 0x874e, 0x8774, 0x8757, 0x8768, 0x876e, 0x8759, /* 0x6a */ 0x8753, 0x8763, 0x876a, 0x8805, 0x87a2, 0x879f, 0x8782, 0x87af, 0x87cb, 0x87bd, 0x87c0, 0x87d0, 0x96d6, 0x87ab, 0x87c4, 0x87b3, 0x87c7, 0x87c6, 0x87bb, 0x87ef, 0x87f2, 0x87e0, 0x880f, 0x880d, 0x87fe, 0x87f6, 0x87f7, 0x880e, 0x87d2, 0x8811, 0x8816, 0x8815, 0x8822, 0x8821, 0x8831, 0x8836, 0x8839, 0x8827, 0x883b, 0x8844, 0x8842, 0x8852, 0x8859, 0x885e, 0x8862, 0x886b, 0x8881, 0x887e, 0x889e, 0x8875, 0x887d, 0x88b5, 0x8872, 0x8882, 0x8897, 0x8892, 0x88ae, 0x8899, 0x88a2, 0x888d, 0x88a4, 0x88b0, 0x88bf, 0x88b1, 0x88c3, 0x88c4, 0x88d4, 0x88d8, 0x88d9, 0x88dd, 0x88f9, 0x8902, 0x88fc, 0x88f4, 0x88e8, 0x88f2, 0x8904, 0x890c, 0x890a, 0x8913, 0x8943, 0x891e, 0x8925, 0x892a, 0x892b, 0x8941, 0x8944, 0x893b, 0x8936, 0x8938, 0x894c, 0x891d, 0x8960, 0x895e, /* 0x6b */ 0x8966, 0x8964, 0x896d, 0x896a, 0x896f, 0x8974, 0x8977, 0x897e, 0x8983, 0x8988, 0x898a, 0x8993, 0x8998, 0x89a1, 0x89a9, 0x89a6, 0x89ac, 0x89af, 0x89b2, 0x89ba, 0x89bd, 0x89bf, 0x89c0, 0x89da, 0x89dc, 0x89dd, 0x89e7, 0x89f4, 0x89f8, 0x8a03, 0x8a16, 0x8a10, 0x8a0c, 0x8a1b, 0x8a1d, 0x8a25, 0x8a36, 0x8a41, 0x8a5b, 0x8a52, 0x8a46, 0x8a48, 0x8a7c, 0x8a6d, 0x8a6c, 0x8a62, 0x8a85, 0x8a82, 0x8a84, 0x8aa8, 0x8aa1, 0x8a91, 0x8aa5, 0x8aa6, 0x8a9a, 0x8aa3, 0x8ac4, 0x8acd, 0x8ac2, 0x8ada, 0x8aeb, 0x8af3, 0x8ae7, 0x8ae4, 0x8af1, 0x8b14, 0x8ae0, 0x8ae2, 0x8af7, 0x8ade, 0x8adb, 0x8b0c, 0x8b07, 0x8b1a, 0x8ae1, 0x8b16, 0x8b10, 0x8b17, 0x8b20, 0x8b33, 0x97ab, 0x8b26, 0x8b2b, 0x8b3e, 0x8b28, 0x8b41, 0x8b4c, 0x8b4f, 0x8b4e, 0x8b49, 0x8b56, 0x8b5b, 0x8b5a, 0x8b6b, /* 0x6c */ 0x8b5f, 0x8b6c, 0x8b6f, 0x8b74, 0x8b7d, 0x8b80, 0x8b8c, 0x8b8e, 0x8b92, 0x8b93, 0x8b96, 0x8b99, 0x8b9a, 0x8c3a, 0x8c41, 0x8c3f, 0x8c48, 0x8c4c, 0x8c4e, 0x8c50, 0x8c55, 0x8c62, 0x8c6c, 0x8c78, 0x8c7a, 0x8c82, 0x8c89, 0x8c85, 0x8c8a, 0x8c8d, 0x8c8e, 0x8c94, 0x8c7c, 0x8c98, 0x621d, 0x8cad, 0x8caa, 0x8cbd, 0x8cb2, 0x8cb3, 0x8cae, 0x8cb6, 0x8cc8, 0x8cc1, 0x8ce4, 0x8ce3, 0x8cda, 0x8cfd, 0x8cfa, 0x8cfb, 0x8d04, 0x8d05, 0x8d0a, 0x8d07, 0x8d0f, 0x8d0d, 0x8d10, 0x9f4e, 0x8d13, 0x8ccd, 0x8d14, 0x8d16, 0x8d67, 0x8d6d, 0x8d71, 0x8d73, 0x8d81, 0x8d99, 0x8dc2, 0x8dbe, 0x8dba, 0x8dcf, 0x8dda, 0x8dd6, 0x8dcc, 0x8ddb, 0x8dcb, 0x8dea, 0x8deb, 0x8ddf, 0x8de3, 0x8dfc, 0x8e08, 0x8e09, 0x8dff, 0x8e1d, 0x8e1e, 0x8e10, 0x8e1f, 0x8e42, 0x8e35, 0x8e30, 0x8e34, 0x8e4a, /* 0x6d */ 0x8e47, 0x8e49, 0x8e4c, 0x8e50, 0x8e48, 0x8e59, 0x8e64, 0x8e60, 0x8e2a, 0x8e63, 0x8e55, 0x8e76, 0x8e72, 0x8e7c, 0x8e81, 0x8e87, 0x8e85, 0x8e84, 0x8e8b, 0x8e8a, 0x8e93, 0x8e91, 0x8e94, 0x8e99, 0x8eaa, 0x8ea1, 0x8eac, 0x8eb0, 0x8ec6, 0x8eb1, 0x8ebe, 0x8ec5, 0x8ec8, 0x8ecb, 0x8edb, 0x8ee3, 0x8efc, 0x8efb, 0x8eeb, 0x8efe, 0x8f0a, 0x8f05, 0x8f15, 0x8f12, 0x8f19, 0x8f13, 0x8f1c, 0x8f1f, 0x8f1b, 0x8f0c, 0x8f26, 0x8f33, 0x8f3b, 0x8f39, 0x8f45, 0x8f42, 0x8f3e, 0x8f4c, 0x8f49, 0x8f46, 0x8f4e, 0x8f57, 0x8f5c, 0x8f62, 0x8f63, 0x8f64, 0x8f9c, 0x8f9f, 0x8fa3, 0x8fad, 0x8faf, 0x8fb7, 0x8fda, 0x8fe5, 0x8fe2, 0x8fea, 0x8fef, 0x9087, 0x8ff4, 0x9005, 0x8ff9, 0x8ffa, 0x9011, 0x9015, 0x9021, 0x900d, 0x901e, 0x9016, 0x900b, 0x9027, 0x9036, 0x9035, 0x9039, 0x8ff8, /* 0x6e */ 0x904f, 0x9050, 0x9051, 0x9052, 0x900e, 0x9049, 0x903e, 0x9056, 0x9058, 0x905e, 0x9068, 0x906f, 0x9076, 0x96a8, 0x9072, 0x9082, 0x907d, 0x9081, 0x9080, 0x908a, 0x9089, 0x908f, 0x90a8, 0x90af, 0x90b1, 0x90b5, 0x90e2, 0x90e4, 0x6248, 0x90db, 0x9102, 0x9112, 0x9119, 0x9132, 0x9130, 0x914a, 0x9156, 0x9158, 0x9163, 0x9165, 0x9169, 0x9173, 0x9172, 0x918b, 0x9189, 0x9182, 0x91a2, 0x91ab, 0x91af, 0x91aa, 0x91b5, 0x91b4, 0x91ba, 0x91c0, 0x91c1, 0x91c9, 0x91cb, 0x91d0, 0x91d6, 0x91df, 0x91e1, 0x91db, 0x91fc, 0x91f5, 0x91f6, 0x921e, 0x91ff, 0x9214, 0x922c, 0x9215, 0x9211, 0x925e, 0x9257, 0x9245, 0x9249, 0x9264, 0x9248, 0x9295, 0x923f, 0x924b, 0x9250, 0x929c, 0x9296, 0x9293, 0x929b, 0x925a, 0x92cf, 0x92b9, 0x92b7, 0x92e9, 0x930f, 0x92fa, 0x9344, 0x932e, /* 0x6f */ 0x9319, 0x9322, 0x931a, 0x9323, 0x933a, 0x9335, 0x933b, 0x935c, 0x9360, 0x937c, 0x936e, 0x9356, 0x93b0, 0x93ac, 0x93ad, 0x9394, 0x93b9, 0x93d6, 0x93d7, 0x93e8, 0x93e5, 0x93d8, 0x93c3, 0x93dd, 0x93d0, 0x93c8, 0x93e4, 0x941a, 0x9414, 0x9413, 0x9403, 0x9407, 0x9410, 0x9436, 0x942b, 0x9435, 0x9421, 0x943a, 0x9441, 0x9452, 0x9444, 0x945b, 0x9460, 0x9462, 0x945e, 0x946a, 0x9229, 0x9470, 0x9475, 0x9477, 0x947d, 0x945a, 0x947c, 0x947e, 0x9481, 0x947f, 0x9582, 0x9587, 0x958a, 0x9594, 0x9596, 0x9598, 0x9599, 0x95a0, 0x95a8, 0x95a7, 0x95ad, 0x95bc, 0x95bb, 0x95b9, 0x95be, 0x95ca, 0x6ff6, 0x95c3, 0x95cd, 0x95cc, 0x95d5, 0x95d4, 0x95d6, 0x95dc, 0x95e1, 0x95e5, 0x95e2, 0x9621, 0x9628, 0x962e, 0x962f, 0x9642, 0x964c, 0x964f, 0x964b, 0x9677, 0x965c, 0x965e, /* 0x70 */ 0x965d, 0x965f, 0x9666, 0x9672, 0x966c, 0x968d, 0x9698, 0x9695, 0x9697, 0x96aa, 0x96a7, 0x96b1, 0x96b2, 0x96b0, 0x96b4, 0x96b6, 0x96b8, 0x96b9, 0x96ce, 0x96cb, 0x96c9, 0x96cd, 0x894d, 0x96dc, 0x970d, 0x96d5, 0x96f9, 0x9704, 0x9706, 0x9708, 0x9713, 0x970e, 0x9711, 0x970f, 0x9716, 0x9719, 0x9724, 0x972a, 0x9730, 0x9739, 0x973d, 0x973e, 0x9744, 0x9746, 0x9748, 0x9742, 0x9749, 0x975c, 0x9760, 0x9764, 0x9766, 0x9768, 0x52d2, 0x976b, 0x9771, 0x9779, 0x9785, 0x977c, 0x9781, 0x977a, 0x9786, 0x978b, 0x978f, 0x9790, 0x979c, 0x97a8, 0x97a6, 0x97a3, 0x97b3, 0x97b4, 0x97c3, 0x97c6, 0x97c8, 0x97cb, 0x97dc, 0x97ed, 0x9f4f, 0x97f2, 0x7adf, 0x97f6, 0x97f5, 0x980f, 0x980c, 0x9838, 0x9824, 0x9821, 0x9837, 0x983d, 0x9846, 0x984f, 0x984b, 0x986b, 0x986f, 0x9870, /* 0x71 */ 0x9871, 0x9874, 0x9873, 0x98aa, 0x98af, 0x98b1, 0x98b6, 0x98c4, 0x98c3, 0x98c6, 0x98e9, 0x98eb, 0x9903, 0x9909, 0x9912, 0x9914, 0x9918, 0x9921, 0x991d, 0x991e, 0x9924, 0x9920, 0x992c, 0x992e, 0x993d, 0x993e, 0x9942, 0x9949, 0x9945, 0x9950, 0x994b, 0x9951, 0x9952, 0x994c, 0x9955, 0x9997, 0x9998, 0x99a5, 0x99ad, 0x99ae, 0x99bc, 0x99df, 0x99db, 0x99dd, 0x99d8, 0x99d1, 0x99ed, 0x99ee, 0x99f1, 0x99f2, 0x99fb, 0x99f8, 0x9a01, 0x9a0f, 0x9a05, 0x99e2, 0x9a19, 0x9a2b, 0x9a37, 0x9a45, 0x9a42, 0x9a40, 0x9a43, 0x9a3e, 0x9a55, 0x9a4d, 0x9a5b, 0x9a57, 0x9a5f, 0x9a62, 0x9a65, 0x9a64, 0x9a69, 0x9a6b, 0x9a6a, 0x9aad, 0x9ab0, 0x9abc, 0x9ac0, 0x9acf, 0x9ad1, 0x9ad3, 0x9ad4, 0x9ade, 0x9adf, 0x9ae2, 0x9ae3, 0x9ae6, 0x9aef, 0x9aeb, 0x9aee, 0x9af4, 0x9af1, 0x9af7, /* 0x72 */ 0x9afb, 0x9b06, 0x9b18, 0x9b1a, 0x9b1f, 0x9b22, 0x9b23, 0x9b25, 0x9b27, 0x9b28, 0x9b29, 0x9b2a, 0x9b2e, 0x9b2f, 0x9b32, 0x9b44, 0x9b43, 0x9b4f, 0x9b4d, 0x9b4e, 0x9b51, 0x9b58, 0x9b74, 0x9b93, 0x9b83, 0x9b91, 0x9b96, 0x9b97, 0x9b9f, 0x9ba0, 0x9ba8, 0x9bb4, 0x9bc0, 0x9bca, 0x9bb9, 0x9bc6, 0x9bcf, 0x9bd1, 0x9bd2, 0x9be3, 0x9be2, 0x9be4, 0x9bd4, 0x9be1, 0x9c3a, 0x9bf2, 0x9bf1, 0x9bf0, 0x9c15, 0x9c14, 0x9c09, 0x9c13, 0x9c0c, 0x9c06, 0x9c08, 0x9c12, 0x9c0a, 0x9c04, 0x9c2e, 0x9c1b, 0x9c25, 0x9c24, 0x9c21, 0x9c30, 0x9c47, 0x9c32, 0x9c46, 0x9c3e, 0x9c5a, 0x9c60, 0x9c67, 0x9c76, 0x9c78, 0x9ce7, 0x9cec, 0x9cf0, 0x9d09, 0x9d08, 0x9ceb, 0x9d03, 0x9d06, 0x9d2a, 0x9d26, 0x9daf, 0x9d23, 0x9d1f, 0x9d44, 0x9d15, 0x9d12, 0x9d41, 0x9d3f, 0x9d3e, 0x9d46, 0x9d48, /* 0x73 */ 0x9d5d, 0x9d5e, 0x9d64, 0x9d51, 0x9d50, 0x9d59, 0x9d72, 0x9d89, 0x9d87, 0x9dab, 0x9d6f, 0x9d7a, 0x9d9a, 0x9da4, 0x9da9, 0x9db2, 0x9dc4, 0x9dc1, 0x9dbb, 0x9db8, 0x9dba, 0x9dc6, 0x9dcf, 0x9dc2, 0x9dd9, 0x9dd3, 0x9df8, 0x9de6, 0x9ded, 0x9def, 0x9dfd, 0x9e1a, 0x9e1b, 0x9e1e, 0x9e75, 0x9e79, 0x9e7d, 0x9e81, 0x9e88, 0x9e8b, 0x9e8c, 0x9e92, 0x9e95, 0x9e91, 0x9e9d, 0x9ea5, 0x9ea9, 0x9eb8, 0x9eaa, 0x9ead, 0x9761, 0x9ecc, 0x9ece, 0x9ecf, 0x9ed0, 0x9ed4, 0x9edc, 0x9ede, 0x9edd, 0x9ee0, 0x9ee5, 0x9ee8, 0x9eef, 0x9ef4, 0x9ef6, 0x9ef7, 0x9ef9, 0x9efb, 0x9efc, 0x9efd, 0x9f07, 0x9f08, 0x76b7, 0x9f15, 0x9f21, 0x9f2c, 0x9f3e, 0x9f4a, 0x9f52, 0x9f54, 0x9f63, 0x9f5f, 0x9f60, 0x9f61, 0x9f66, 0x9f67, 0x9f6c, 0x9f6a, 0x9f77, 0x9f72, 0x9f76, 0x9f95, 0x9f9c, 0x9fa0, /* 0x74 */ 0x582f, 0x69c7, 0x9059, 0x7464, 0x51dc, 0x7199, }; static int jisx0208_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c1 = (s[0] & 0x7F); if ((c1 >= 0x21 && c1 <= 0x28) || (c1 >= 0x30 && c1 <= 0x74)) { if (n >= 2) { unsigned char c2 = (s[1] & 0x7F); if (c2 >= 0x21 && c2 < 0x7f) { unsigned int i = 94 * (c1 - 0x21) + (c2 - 0x21); unsigned short wc = 0xfffd; if (i < 1410) { if (i < 690) wc = jisx0208_2uni_page21[i]; } else { if (i < 7808) wc = jisx0208_2uni_page30[i-1410]; } if (wc != 0xfffd) { *pwc = (ucs4_t) wc; return 2; } } return RET_ILSEQ; } return RET_TOOFEW(0); } return RET_ILSEQ; } static const unsigned short jisx0208_2charset[6879] = { 0x2140, 0x2171, 0x2172, 0x2178, 0x212f, 0x224c, 0x216b, 0x215e, 0x212d, 0x2279, 0x215f, 0x2160, 0x2621, 0x2622, 0x2623, 0x2624, 0x2625, 0x2626, 0x2627, 0x2628, 0x2629, 0x262a, 0x262b, 0x262c, 0x262d, 0x262e, 0x262f, 0x2630, 0x2631, 0x2632, 0x2633, 0x2634, 0x2635, 0x2636, 0x2637, 0x2638, 0x2641, 0x2642, 0x2643, 0x2644, 0x2645, 0x2646, 0x2647, 0x2648, 0x2649, 0x264a, 0x264b, 0x264c, 0x264d, 0x264e, 0x264f, 0x2650, 0x2651, 0x2652, 0x2653, 0x2654, 0x2655, 0x2656, 0x2657, 0x2658, 0x2727, 0x2721, 0x2722, 0x2723, 0x2724, 0x2725, 0x2726, 0x2728, 0x2729, 0x272a, 0x272b, 0x272c, 0x272d, 0x272e, 0x272f, 0x2730, 0x2731, 0x2732, 0x2733, 0x2734, 0x2735, 0x2736, 0x2737, 0x2738, 0x2739, 0x273a, 0x273b, 0x273c, 0x273d, 0x273e, 0x273f, 0x2740, 0x2741, 0x2751, 0x2752, 0x2753, 0x2754, 0x2755, 0x2756, 0x2758, 0x2759, 0x275a, 0x275b, 0x275c, 0x275d, 0x275e, 0x275f, 0x2760, 0x2761, 0x2762, 0x2763, 0x2764, 0x2765, 0x2766, 0x2767, 0x2768, 0x2769, 0x276a, 0x276b, 0x276c, 0x276d, 0x276e, 0x276f, 0x2770, 0x2771, 0x2757, 0x213e, 0x213d, 0x2142, 0x2146, 0x2147, 0x2148, 0x2149, 0x2277, 0x2278, 0x2145, 0x2144, 0x2273, 0x216c, 0x216d, 0x2228, 0x216e, 0x2272, 0x222b, 0x222c, 0x222a, 0x222d, 0x224d, 0x224e, 0x224f, 0x225f, 0x2250, 0x2260, 0x223a, 0x223b, 0x215d, 0x2265, 0x2267, 0x2167, 0x225c, 0x224a, 0x224b, 0x2241, 0x2240, 0x2269, 0x226a, 0x2168, 0x2268, 0x2266, 0x2262, 0x2162, 0x2261, 0x2165, 0x2166, 0x2263, 0x2264, 0x223e, 0x223f, 0x223c, 0x223d, 0x225d, 0x225e, 0x2821, 0x282c, 0x2822, 0x282d, 0x2823, 0x282e, 0x2824, 0x282f, 0x2826, 0x2831, 0x2825, 0x2830, 0x2827, 0x283c, 0x2837, 0x2832, 0x2829, 0x283e, 0x2839, 0x2834, 0x2828, 0x2838, 0x283d, 0x2833, 0x282a, 0x283a, 0x283f, 0x2835, 0x282b, 0x283b, 0x2840, 0x2836, 0x2223, 0x2222, 0x2225, 0x2224, 0x2227, 0x2226, 0x2221, 0x217e, 0x217b, 0x217d, 0x217c, 0x227e, 0x217a, 0x2179, 0x216a, 0x2169, 0x2276, 0x2275, 0x2274, 0x2121, 0x2122, 0x2123, 0x2137, 0x2139, 0x213a, 0x213b, 0x2152, 0x2153, 0x2154, 0x2155, 0x2156, 0x2157, 0x2158, 0x2159, 0x215a, 0x215b, 0x2229, 0x222e, 0x214c, 0x214d, 0x2141, 0x2421, 0x2422, 0x2423, 0x2424, 0x2425, 0x2426, 0x2427, 0x2428, 0x2429, 0x242a, 0x242b, 0x242c, 0x242d, 0x242e, 0x242f, 0x2430, 0x2431, 0x2432, 0x2433, 0x2434, 0x2435, 0x2436, 0x2437, 0x2438, 0x2439, 0x243a, 0x243b, 0x243c, 0x243d, 0x243e, 0x243f, 0x2440, 0x2441, 0x2442, 0x2443, 0x2444, 0x2445, 0x2446, 0x2447, 0x2448, 0x2449, 0x244a, 0x244b, 0x244c, 0x244d, 0x244e, 0x244f, 0x2450, 0x2451, 0x2452, 0x2453, 0x2454, 0x2455, 0x2456, 0x2457, 0x2458, 0x2459, 0x245a, 0x245b, 0x245c, 0x245d, 0x245e, 0x245f, 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469, 0x246a, 0x246b, 0x246c, 0x246d, 0x246e, 0x246f, 0x2470, 0x2471, 0x2472, 0x2473, 0x212b, 0x212c, 0x2135, 0x2136, 0x2521, 0x2522, 0x2523, 0x2524, 0x2525, 0x2526, 0x2527, 0x2528, 0x2529, 0x252a, 0x252b, 0x252c, 0x252d, 0x252e, 0x252f, 0x2530, 0x2531, 0x2532, 0x2533, 0x2534, 0x2535, 0x2536, 0x2537, 0x2538, 0x2539, 0x253a, 0x253b, 0x253c, 0x253d, 0x253e, 0x253f, 0x2540, 0x2541, 0x2542, 0x2543, 0x2544, 0x2545, 0x2546, 0x2547, 0x2548, 0x2549, 0x254a, 0x254b, 0x254c, 0x254d, 0x254e, 0x254f, 0x2550, 0x2551, 0x2552, 0x2553, 0x2554, 0x2555, 0x2556, 0x2557, 0x2558, 0x2559, 0x255a, 0x255b, 0x255c, 0x255d, 0x255e, 0x255f, 0x2560, 0x2561, 0x2562, 0x2563, 0x2564, 0x2565, 0x2566, 0x2567, 0x2568, 0x2569, 0x256a, 0x256b, 0x256c, 0x256d, 0x256e, 0x256f, 0x2570, 0x2571, 0x2572, 0x2573, 0x2574, 0x2575, 0x2576, 0x2126, 0x213c, 0x2133, 0x2134, 0x306c, 0x437a, 0x3c37, 0x4b7c, 0x3e66, 0x3b30, 0x3e65, 0x323c, 0x4954, 0x4d3f, 0x5022, 0x312f, 0x336e, 0x5023, 0x4024, 0x5242, 0x3556, 0x4a3a, 0x3e67, 0x4e3e, 0x4a42, 0x5024, 0x4366, 0x5025, 0x367a, 0x5026, 0x345d, 0x4330, 0x3c67, 0x5027, 0x5028, 0x5029, 0x4735, 0x3557, 0x4737, 0x4663, 0x3843, 0x4b33, 0x6949, 0x502a, 0x3e68, 0x502b, 0x3235, 0x3665, 0x3870, 0x4c69, 0x5626, 0x4d70, 0x467d, 0x3425, 0x3535, 0x502c, 0x502d, 0x4e3b, 0x4d3d, 0x4168, 0x502f, 0x3b76, 0x4673, 0x5032, 0x313e, 0x385f, 0x385e, 0x3066, 0x4f4b, 0x4f4a, 0x3a33, 0x3021, 0x5033, 0x5034, 0x5035, 0x4b34, 0x5036, 0x3872, 0x3067, 0x4b72, 0x357c, 0x357d, 0x357e, 0x4462, 0x4e3c, 0x5037, 0x5038, 0x5039, 0x3f4d, 0x3d3a, 0x3f4e, 0x503e, 0x503c, 0x503d, 0x3558, 0x3a23, 0x3270, 0x503b, 0x503a, 0x4a29, 0x3b46, 0x3b45, 0x423e, 0x503f, 0x4955, 0x4067, 0x2138, 0x5040, 0x5042, 0x4265, 0x4e61, 0x304a, 0x5041, 0x323e, 0x3644, 0x4367, 0x376f, 0x5043, 0x4724, 0x346b, 0x5044, 0x304b, 0x3860, 0x346c, 0x497a, 0x4832, 0x3559, 0x3271, 0x5067, 0x4541, 0x476c, 0x5046, 0x483c, 0x4e62, 0x3f2d, 0x3b47, 0x3b77, 0x3240, 0x4451, 0x4322, 0x504a, 0x304c, 0x4463, 0x3d3b, 0x3a34, 0x4d24, 0x424e, 0x323f, 0x5049, 0x4d3e, 0x5045, 0x5047, 0x3a6e, 0x5048, 0x5524, 0x5050, 0x5053, 0x5051, 0x3242, 0x4a3b, 0x504b, 0x504f, 0x3873, 0x3b48, 0x3426, 0x5054, 0x504c, 0x4e63, 0x3b78, 0x504d, 0x5052, 0x5055, 0x504e, 0x3621, 0x304d, 0x3622, 0x3241, 0x5525, 0x4b79, 0x496e, 0x3874, 0x3f2f, 0x4e37, 0x4a58, 0x3738, 0x4225, 0x3264, 0x3d53, 0x5059, 0x505e, 0x505c, 0x5057, 0x422f, 0x505a, 0x505d, 0x505b, 0x4a5d, 0x5058, 0x3f2e, 0x4b73, 0x505f, 0x5060, 0x3d24, 0x506d, 0x4750, 0x4936, 0x5068, 0x4a70, 0x3236, 0x506c, 0x5066, 0x506f, 0x4152, 0x3844, 0x475c, 0x6047, 0x506e, 0x455d, 0x5063, 0x3876, 0x3875, 0x5061, 0x3c5a, 0x5069, 0x4a6f, 0x434d, 0x5065, 0x3771, 0x5062, 0x506a, 0x5064, 0x4e51, 0x506b, 0x4f41, 0x3666, 0x3770, 0x5070, 0x5071, 0x5075, 0x304e, 0x4a50, 0x5074, 0x5073, 0x5077, 0x5076, 0x4464, 0x3772, 0x5078, 0x3c45, 0x4226, 0x4465, 0x3676, 0x5079, 0x3536, 0x507a, 0x507c, 0x4b35, 0x3766, 0x3b31, 0x4877, 0x507b, 0x3a45, 0x4d43, 0x507e, 0x5123, 0x507d, 0x3a44, 0x3d7d, 0x3739, 0x5124, 0x364f, 0x5121, 0x5122, 0x462f, 0x417c, 0x3623, 0x4b4d, 0x5125, 0x4e3d, 0x5126, 0x5129, 0x5127, 0x414e, 0x5128, 0x512a, 0x512c, 0x512b, 0x4a48, 0x3537, 0x512e, 0x512f, 0x322f, 0x512d, 0x3c74, 0x5132, 0x5131, 0x5130, 0x5056, 0x5133, 0x3d7e, 0x5134, 0x4d25, 0x4c59, 0x5136, 0x5135, 0x5138, 0x5137, 0x5139, 0x513a, 0x3074, 0x3835, 0x373b, 0x3d3c, 0x437b, 0x3624, 0x4068, 0x3877, 0x396e, 0x513c, 0x4c48, 0x4546, 0x3b79, 0x513b, 0x513d, 0x455e, 0x3375, 0x513e, 0x467e, 0x4134, 0x5140, 0x5141, 0x482c, 0x3878, 0x4f3b, 0x5142, 0x3626, 0x4a3c, 0x4236, 0x3671, 0x4535, 0x3773, 0x5143, 0x5144, 0x4662, 0x315f, 0x5147, 0x3a7d, 0x5146, 0x3a46, 0x5148, 0x666e, 0x5149, 0x4b41, 0x514a, 0x514b, 0x514c, 0x3e69, 0x3c4c, 0x3427, 0x514f, 0x514d, 0x4c3d, 0x514e, 0x495a, 0x5150, 0x5151, 0x5152, 0x455f, 0x5156, 0x5154, 0x5155, 0x5153, 0x3a63, 0x5157, 0x4c6a, 0x4e64, 0x5158, 0x4028, 0x5159, 0x3d5a, 0x515a, 0x437c, 0x4e3f, 0x4560, 0x5245, 0x515b, 0x7425, 0x3645, 0x515c, 0x4b5e, 0x3d68, 0x427c, 0x515e, 0x4664, 0x515f, 0x5160, 0x332e, 0x5161, 0x3627, 0x464c, 0x317a, 0x3d50, 0x4821, 0x5162, 0x4561, 0x3f4f, 0x5163, 0x4a2c, 0x405a, 0x3422, 0x3429, 0x5164, 0x5166, 0x373a, 0x5165, 0x4e73, 0x3d69, 0x483d, 0x4a4c, 0x5167, 0x4d78, 0x5168, 0x5169, 0x457e, 0x516a, 0x4029, 0x3a7e, 0x3774, 0x516b, 0x3b49, 0x396f, 0x4466, 0x516d, 0x4227, 0x3a6f, 0x516e, 0x516f, 0x4130, 0x516c, 0x5171, 0x4b36, 0x3964, 0x5170, 0x3775, 0x3a5e, 0x476d, 0x5174, 0x5172, 0x497b, 0x3e6a, 0x517b, 0x3364, 0x5175, 0x5173, 0x414f, 0x5177, 0x5176, 0x3344, 0x3760, 0x517c, 0x4e2d, 0x5178, 0x517d, 0x517a, 0x5179, 0x4e4f, 0x3879, 0x3243, 0x4e74, 0x3d75, 0x4558, 0x3965, 0x5222, 0x5223, 0x4e65, 0x4f2b, 0x5225, 0x387a, 0x5224, 0x332f, 0x5226, 0x4b56, 0x443c, 0x4d26, 0x4a59, 0x5227, 0x7055, 0x4630, 0x5228, 0x342a, 0x4c33, 0x3e21, 0x5229, 0x4a67, 0x522d, 0x402a, 0x522a, 0x3650, 0x522b, 0x342b, 0x372e, 0x522e, 0x522f, 0x5230, 0x5231, 0x3c5b, 0x387b, 0x4c5e, 0x4c68, 0x4677, 0x4a71, 0x5232, 0x5233, 0x5235, 0x5237, 0x5236, 0x5238, 0x323d, 0x4b4c, 0x3a7c, 0x5239, 0x4159, 0x3e22, 0x3629, 0x523a, 0x485b, 0x523b, 0x523c, 0x523d, 0x523e, 0x4924, 0x3668, 0x3065, 0x463f, 0x523f, 0x3d3d, 0x4069, 0x5241, 0x5240, 0x3e23, 0x3861, 0x5243, 0x483e, 0x5244, 0x485c, 0x4234, 0x426e, 0x3628, 0x466e, 0x4331, 0x476e, 0x4b4e, 0x5246, 0x406a, 0x3735, 0x5247, 0x5248, 0x312c, 0x3075, 0x346d, 0x4228, 0x3551, 0x4d71, 0x524b, 0x3237, 0x524a, 0x362a, 0x524c, 0x4c71, 0x524d, 0x4e52, 0x387c, 0x3836, 0x524e, 0x5250, 0x524f, 0x3f5f, 0x3139, 0x315e, 0x5251, 0x5252, 0x3837, 0x5253, 0x356e, 0x3b32, 0x5254, 0x4b74, 0x3a35, 0x355a, 0x4d27, 0x4150, 0x483f, 0x3c7d, 0x3d47, 0x3c68, 0x3c75, 0x3d76, 0x4840, 0x5257, 0x3143, 0x4151, 0x387d, 0x3845, 0x3667, 0x525b, 0x4321, 0x427e, 0x362b, 0x3e24, 0x525c, 0x525a, 0x3244, 0x4266, 0x3c38, 0x3b4b, 0x3126, 0x3370, 0x3966, 0x3b4a, 0x525d, 0x525e, 0x3549, 0x3346, 0x3967, 0x3548, 0x445f, 0x3125, 0x4631, 0x4c3e, 0x3921, 0x4d79, 0x4547, 0x387e, 0x372f, 0x5267, 0x3663, 0x4b4a, 0x485d, 0x5266, 0x345e, 0x5261, 0x5262, 0x5264, 0x5265, 0x355b, 0x3f61, 0x4a2d, 0x5263, 0x525f, 0x3863, 0x5260, 0x4f24, 0x4a72, 0x4468, 0x3862, 0x3970, 0x5268, 0x465d, 0x526c, 0x3c7e, 0x3c76, 0x526f, 0x526d, 0x4c23, 0x526a, 0x5273, 0x526e, 0x5271, 0x3846, 0x4c3f, 0x5272, 0x5274, 0x5276, 0x3a70, 0x4f42, 0x526b, 0x5269, 0x5275, 0x5270, 0x5278, 0x5323, 0x527a, 0x527e, 0x5321, 0x527b, 0x533e, 0x3a69, 0x3331, 0x5279, 0x5325, 0x3076, 0x5324, 0x3025, 0x494a, 0x5322, 0x527c, 0x5277, 0x527d, 0x3a48, 0x5326, 0x3077, 0x532f, 0x5327, 0x5328, 0x3e25, 0x4b69, 0x532d, 0x532c, 0x452f, 0x532e, 0x532b, 0x3134, 0x3a36, 0x3f30, 0x5329, 0x4562, 0x532a, 0x3022, 0x5334, 0x4d23, 0x3e27, 0x533a, 0x5339, 0x5330, 0x4243, 0x5331, 0x426f, 0x5336, 0x3e26, 0x5333, 0x4c64, 0x373c, 0x5337, 0x5338, 0x5335, 0x533b, 0x5332, 0x5341, 0x5346, 0x5342, 0x533d, 0x5347, 0x4131, 0x5349, 0x3922, 0x533f, 0x437d, 0x5343, 0x533c, 0x342d, 0x346e, 0x3365, 0x5344, 0x5340, 0x3776, 0x534a, 0x5348, 0x4153, 0x354a, 0x362c, 0x5345, 0x3674, 0x3144, 0x534e, 0x534c, 0x5427, 0x5351, 0x534b, 0x534f, 0x534d, 0x3b4c, 0x5350, 0x5353, 0x5358, 0x5356, 0x5355, 0x4332, 0x3245, 0x5352, 0x5354, 0x3e28, 0x3133, 0x5357, 0x325e, 0x5362, 0x3e7c, 0x535e, 0x535c, 0x535d, 0x535f, 0x313d, 0x4139, 0x5359, 0x535a, 0x337a, 0x5361, 0x346f, 0x5364, 0x5360, 0x5363, 0x4a2e, 0x4655, 0x4838, 0x5366, 0x5365, 0x3345, 0x5367, 0x536a, 0x5369, 0x5368, 0x4739, 0x536b, 0x536c, 0x536e, 0x536d, 0x5370, 0x5373, 0x5371, 0x536f, 0x5372, 0x5374, 0x5375, 0x5376, 0x5377, 0x5378, 0x5145, 0x3c7c, 0x3b4d, 0x3273, 0x3078, 0x4344, 0x5379, 0x3a24, 0x304f, 0x3f5e, 0x537a, 0x3847, 0x3971, 0x537c, 0x537b, 0x4a60, 0x537d, 0x5421, 0x537e, 0x5422, 0x5423, 0x3777, 0x3160, 0x5424, 0x5426, 0x5425, 0x5428, 0x455a, 0x5429, 0x3035, 0x3a5f, 0x373d, 0x434f, 0x542a, 0x542b, 0x542d, 0x542e, 0x3a64, 0x3651, 0x4b37, 0x542c, 0x542f, 0x3a41, 0x3923, 0x5433, 0x3a25, 0x4333, 0x5430, 0x445a, 0x5434, 0x3f62, 0x5432, 0x5435, 0x373f, 0x5436, 0x5437, 0x3924, 0x3340, 0x5439, 0x543a, 0x543b, 0x5438, 0x5431, 0x543c, 0x543d, 0x4b64, 0x3e6b, 0x543f, 0x5440, 0x543e, 0x5442, 0x4738, 0x3068, 0x4956, 0x5443, 0x3e7d, 0x3c39, 0x475d, 0x3470, 0x3a6b, 0x4b59, 0x4632, 0x3778, 0x424f, 0x5441, 0x5444, 0x4244, 0x5445, 0x5446, 0x5448, 0x4469, 0x342e, 0x7421, 0x3161, 0x4a73, 0x3e6c, 0x4548, 0x3a66, 0x544e, 0x4a3d, 0x4e5d, 0x3274, 0x544a, 0x413a, 0x544d, 0x4563, 0x4549, 0x4564, 0x4839, 0x444d, 0x3a49, 0x5449, 0x3176, 0x4536, 0x544b, 0x5447, 0x3f50, 0x544f, 0x3d4e, 0x362d, 0x5450, 0x4a68, 0x417d, 0x4446, 0x5452, 0x4b4f, 0x5453, 0x5458, 0x4a2f, 0x5457, 0x5451, 0x5454, 0x5456, 0x3a26, 0x4a49, 0x5459, 0x4345, 0x3275, 0x3e6d, 0x545b, 0x545a, 0x3968, 0x545c, 0x545e, 0x545d, 0x5460, 0x5455, 0x5462, 0x5461, 0x545f, 0x3b4e, 0x3f51, 0x4154, 0x5463, 0x403c, 0x306d, 0x4764, 0x445b, 0x5465, 0x5464, 0x5466, 0x5467, 0x5468, 0x5469, 0x4a51, 0x546a, 0x3246, 0x546b, 0x4d3c, 0x3330, 0x5249, 0x3d48, 0x423f, 0x546c, 0x4c6b, 0x4c34, 0x546e, 0x4267, 0x4537, 0x4240, 0x4957, 0x546f, 0x5470, 0x317b, 0x3c3a, 0x5471, 0x3050, 0x5472, 0x5473, 0x3162, 0x3471, 0x4660, 0x4a74, 0x5477, 0x4155, 0x5476, 0x3740, 0x4b5b, 0x5475, 0x4565, 0x5479, 0x5478, 0x547b, 0x547a, 0x317c, 0x547c, 0x3e29, 0x547e, 0x4325, 0x547d, 0x4a33, 0x3d77, 0x455b, 0x5521, 0x3925, 0x5522, 0x4721, 0x485e, 0x4c51, 0x4725, 0x552b, 0x3538, 0x4d45, 0x4c2f, 0x562c, 0x5523, 0x5526, 0x4245, 0x4b38, 0x454a, 0x5527, 0x4b65, 0x3a4a, 0x3e2a, 0x5528, 0x3b50, 0x3b4f, 0x3039, 0x3848, 0x402b, 0x3051, 0x552c, 0x552d, 0x552a, 0x3138, 0x342f, 0x5529, 0x4c45, 0x4931, 0x3028, 0x3079, 0x3b51, 0x3052, 0x3023, 0x5532, 0x5530, 0x4c3c, 0x5533, 0x5531, 0x552f, 0x3f31, 0x552e, 0x4a5a, 0x3864, 0x5537, 0x5538, 0x3e2b, 0x5534, 0x4f2c, 0x474c, 0x5536, 0x3a27, 0x5539, 0x4958, 0x553a, 0x5535, 0x4c3b, 0x475e, 0x553b, 0x4932, 0x553c, 0x5540, 0x553d, 0x3247, 0x553f, 0x3c3b, 0x553e, 0x3779, 0x554c, 0x5545, 0x5542, 0x4364, 0x5541, 0x5543, 0x5544, 0x5546, 0x5547, 0x3472, 0x5549, 0x5548, 0x554a, 0x3e6e, 0x554d, 0x445c, 0x3145, 0x554b, 0x554e, 0x554f, 0x5552, 0x5550, 0x5551, 0x3b52, 0x5553, 0x3926, 0x5554, 0x3b7a, 0x4238, 0x5555, 0x5556, 0x3b5a, 0x3927, 0x4c52, 0x3528, 0x3849, 0x5557, 0x3358, 0x5558, 0x4239, 0x5559, 0x5623, 0x555a, 0x555b, 0x555c, 0x555e, 0x555f, 0x5560, 0x4270, 0x3127, 0x3c69, 0x3042, 0x4157, 0x3430, 0x3c35, 0x3928, 0x4566, 0x3d21, 0x3431, 0x4368, 0x446a, 0x3038, 0x3539, 0x4a75, 0x3c42, 0x3552, 0x406b, 0x3c3c, 0x4d28, 0x5561, 0x355c, 0x3a4b, 0x3332, 0x3163, 0x3e2c, 0x3248, 0x5562, 0x4d46, 0x3d49, 0x3c64, 0x5563, 0x3473, 0x4652, 0x4c29, 0x5564, 0x5565, 0x4959, 0x5567, 0x3428, 0x3677, 0x5566, 0x3432, 0x3f32, 0x556b, 0x3b21, 0x3249, 0x556a, 0x5568, 0x556c, 0x5569, 0x472b, 0x5c4d, 0x3f33, 0x556d, 0x4e40, 0x556e, 0x5570, 0x437e, 0x556f, 0x4023, 0x3b7b, 0x4250, 0x3c77, 0x4975, 0x406c, 0x3c4d, 0x5571, 0x3e2d, 0x5572, 0x5573, 0x3053, 0x423a, 0x3f52, 0x5574, 0x4633, 0x3e2e, 0x3e2f, 0x5575, 0x406d, 0x3e30, 0x5576, 0x5577, 0x4c60, 0x5578, 0x3646, 0x3d22, 0x5579, 0x557a, 0x3c5c, 0x3f2c, 0x4674, 0x3f54, 0x4878, 0x4722, 0x3649, 0x557b, 0x356f, 0x557c, 0x367e, 0x464f, 0x3230, 0x3b53, 0x557d, 0x5622, 0x5621, 0x367d, 0x557e, 0x4538, 0x4230, 0x454b, 0x3c48, 0x4158, 0x4d7a, 0x5624, 0x5625, 0x4656, 0x3b33, 0x5627, 0x5628, 0x5629, 0x3474, 0x562a, 0x562b, 0x322c, 0x413b, 0x3464, 0x562d, 0x4c28, 0x4252, 0x3359, 0x562f, 0x5631, 0x345f, 0x562e, 0x5630, 0x5633, 0x5632, 0x5634, 0x5635, 0x463d, 0x362e, 0x3265, 0x5636, 0x563b, 0x5639, 0x4a77, 0x4a76, 0x4567, 0x5638, 0x3d54, 0x5637, 0x3f72, 0x563c, 0x3a6a, 0x5642, 0x5643, 0x563d, 0x3333, 0x563e, 0x5647, 0x5646, 0x5645, 0x5641, 0x5640, 0x5644, 0x4a78, 0x564b, 0x5648, 0x564a, 0x4d72, 0x5649, 0x563f, 0x3f73, 0x564c, 0x3a37, 0x564d, 0x564e, 0x5651, 0x5650, 0x564f, 0x4568, 0x563a, 0x5657, 0x5653, 0x5652, 0x5654, 0x5655, 0x5658, 0x4e66, 0x5659, 0x5656, 0x565a, 0x3460, 0x565b, 0x565d, 0x565c, 0x565e, 0x565f, 0x406e, 0x3d23, 0x3d64, 0x4163, 0x3929, 0x3a38, 0x392a, 0x3570, 0x5660, 0x3a39, 0x384a, 0x5661, 0x4c26, 0x4743, 0x5662, 0x392b, 0x342c, 0x4327, 0x3652, 0x3b54, 0x495b, 0x4841, 0x5663, 0x3475, 0x5666, 0x4421, 0x5665, 0x5664, 0x5667, 0x446b, 0x3f63, 0x3b55, 0x404a, 0x4253, 0x3522, 0x4422, 0x5668, 0x5669, 0x3e6f, 0x4b39, 0x566c, 0x566b, 0x566a, 0x497d, 0x5673, 0x4b5a, 0x566d, 0x566f, 0x4b6b, 0x566e, 0x5670, 0x4828, 0x5671, 0x4a3e, 0x5672, 0x3433, 0x4a3f, 0x472f, 0x5674, 0x5675, 0x392c, 0x3434, 0x5676, 0x3838, 0x4d44, 0x4d29, 0x3476, 0x5678, 0x4423, 0x392d, 0x3e31, 0x485f, 0x3e32, 0x3d78, 0x446c, 0x4a79, 0x4539, 0x392e, 0x495c, 0x5679, 0x4559, 0x3a42, 0x384b, 0x446d, 0x3043, 0x3d6e, 0x392f, 0x4d47, 0x567a, 0x567b, 0x4751, 0x567c, 0x4e77, 0x4f2d, 0x567e, 0x567d, 0x3347, 0x5721, 0x5724, 0x5725, 0x5723, 0x4940, 0x3e33, 0x5727, 0x5726, 0x5722, 0x5728, 0x5729, 0x572a, 0x572d, 0x572b, 0x572c, 0x572e, 0x3164, 0x446e, 0x572f, 0x377a, 0x3276, 0x4736, 0x5730, 0x467b, 0x4a5b, 0x5731, 0x4f2e, 0x5732, 0x4a40, 0x5735, 0x5021, 0x5031, 0x3c30, 0x4675, 0x5736, 0x355d, 0x4424, 0x307a, 0x5737, 0x4a26, 0x3930, 0x4350, 0x446f, 0x4c6f, 0x3839, 0x384c, 0x5738, 0x5739, 0x573f, 0x3c65, 0x4425, 0x362f, 0x573a, 0x492b, 0x4346, 0x573b, 0x573c, 0x3630, 0x573d, 0x573e, 0x5740, 0x4576, 0x5741, 0x5742, 0x5743, 0x5734, 0x5733, 0x5744, 0x3741, 0x4927, 0x3a4c, 0x4937, 0x4426, 0x494b, 0x5745, 0x3e34, 0x3146, 0x5746, 0x5747, 0x4c72, 0x4860, 0x574a, 0x317d, 0x402c, 0x5749, 0x5748, 0x3742, 0x4254, 0x574e, 0x574c, 0x574b, 0x4e27, 0x3865, 0x3d79, 0x574d, 0x454c, 0x3d3e, 0x4640, 0x5751, 0x5750, 0x574f, 0x5752, 0x3866, 0x5753, 0x497c, 0x3d5b, 0x5754, 0x4879, 0x4641, 0x4427, 0x4530, 0x5755, 0x352b, 0x3f34, 0x492c, 0x3477, 0x4726, 0x5756, 0x3b56, 0x4b3a, 0x4b3b, 0x317e, 0x575b, 0x4369, 0x5758, 0x3277, 0x582d, 0x575a, 0x4730, 0x5759, 0x5757, 0x397a, 0x575d, 0x5763, 0x5769, 0x5761, 0x455c, 0x5766, 0x495d, 0x5760, 0x5765, 0x4e67, 0x3b57, 0x4255, 0x575e, 0x355e, 0x5768, 0x402d, 0x3165, 0x5762, 0x3278, 0x5767, 0x3631, 0x5764, 0x576a, 0x576c, 0x5776, 0x5774, 0x5771, 0x5770, 0x4e78, 0x5772, 0x3632, 0x3931, 0x3d7a, 0x5779, 0x576b, 0x576f, 0x575f, 0x327a, 0x5773, 0x5775, 0x4351, 0x3a28, 0x3238, 0x576d, 0x5778, 0x5777, 0x3633, 0x4229, 0x3366, 0x3743, 0x576e, 0x577a, 0x577d, 0x5821, 0x3c3d, 0x5827, 0x4470, 0x577b, 0x5825, 0x3279, 0x5823, 0x5824, 0x577e, 0x5822, 0x3867, 0x4d2a, 0x3435, 0x3159, 0x5826, 0x473a, 0x302d, 0x4861, 0x575c, 0x582c, 0x5830, 0x4c65, 0x5829, 0x4569, 0x582e, 0x3e70, 0x582f, 0x4657, 0x4f47, 0x582b, 0x5831, 0x397b, 0x404b, 0x3054, 0x582a, 0x5828, 0x415a, 0x577c, 0x3b34, 0x4246, 0x583d, 0x415b, 0x5838, 0x5835, 0x5836, 0x3c66, 0x5839, 0x583c, 0x5837, 0x3d25, 0x583a, 0x5834, 0x4c7c, 0x4c7b, 0x583e, 0x583f, 0x3055, 0x5833, 0x3672, 0x3026, 0x3436, 0x583b, 0x5843, 0x5842, 0x5847, 0x5848, 0x5846, 0x5849, 0x5841, 0x5845, 0x584a, 0x584b, 0x5840, 0x3b7c, 0x5844, 0x4256, 0x3932, 0x5832, 0x3f35, 0x5858, 0x4a69, 0x584e, 0x584f, 0x5850, 0x5857, 0x5856, 0x4b7d, 0x3437, 0x5854, 0x3745, 0x3334, 0x5851, 0x4e38, 0x5853, 0x3056, 0x5855, 0x584c, 0x5852, 0x5859, 0x3744, 0x584d, 0x4d5d, 0x4d2b, 0x585c, 0x5860, 0x417e, 0x4e79, 0x5861, 0x585e, 0x585b, 0x585a, 0x585f, 0x4a30, 0x4634, 0x3746, 0x5862, 0x585d, 0x5863, 0x377b, 0x3231, 0x586b, 0x3438, 0x5869, 0x586a, 0x3a29, 0x5868, 0x5866, 0x5865, 0x586c, 0x5864, 0x586e, 0x327b, 0x5870, 0x586f, 0x4428, 0x5873, 0x5871, 0x5867, 0x377c, 0x5872, 0x5876, 0x5875, 0x5877, 0x5874, 0x5878, 0x5879, 0x587a, 0x4a6a, 0x587c, 0x587b, 0x3d3f, 0x402e, 0x3266, 0x327c, 0x587d, 0x303f, 0x404c, 0x587e, 0x6c43, 0x5921, 0x3761, 0x5922, 0x406f, 0x5923, 0x5924, 0x353a, 0x5925, 0x5926, 0x5927, 0x4257, 0x384d, 0x4c61, 0x4b3c, 0x3d6a, 0x5928, 0x4070, 0x6e3d, 0x4862, 0x3c6a, 0x3a4d, 0x5929, 0x4247, 0x4a27, 0x4271, 0x592c, 0x592a, 0x592d, 0x592b, 0x592e, 0x4a31, 0x3037, 0x495e, 0x4863, 0x592f, 0x5932, 0x3e35, 0x353b, 0x5930, 0x5937, 0x3e36, 0x5931, 0x4744, 0x4d5e, 0x5933, 0x5934, 0x5938, 0x456a, 0x5935, 0x3933, 0x405e, 0x5946, 0x4834, 0x4272, 0x4864, 0x5a2d, 0x4a7a, 0x4471, 0x4b75, 0x593b, 0x3221, 0x436a, 0x5944, 0x4334, 0x593e, 0x5945, 0x5940, 0x5947, 0x5943, 0x5942, 0x476f, 0x593c, 0x327d, 0x593a, 0x3571, 0x4273, 0x5936, 0x5939, 0x3934, 0x405b, 0x3e37, 0x5941, 0x4752, 0x3572, 0x3348, 0x3367, 0x3f21, 0x5949, 0x594e, 0x594a, 0x377d, 0x594f, 0x3b22, 0x3969, 0x3d26, 0x593d, 0x3b7d, 0x594c, 0x3b58, 0x594d, 0x3044, 0x5948, 0x4429, 0x3573, 0x3634, 0x594b, 0x3027, 0x3a43, 0x3f36, 0x4472, 0x4854, 0x5951, 0x415e, 0x422a, 0x3b2b, 0x5952, 0x5954, 0x5950, 0x4a61, 0x443d, 0x415c, 0x4a7b, 0x3c4e, 0x5960, 0x595f, 0x3f78, 0x377e, 0x5959, 0x3e39, 0x4668, 0x4731, 0x5957, 0x415d, 0x3c78, 0x595c, 0x3e38, 0x5956, 0x595b, 0x4753, 0x5955, 0x3721, 0x335d, 0x595d, 0x4e2b, 0x3a4e, 0x4335, 0x595a, 0x405c, 0x3935, 0x3f64, 0x3166, 0x413c, 0x5958, 0x3545, 0x3747, 0x444f, 0x595e, 0x415f, 0x5961, 0x5963, 0x4237, 0x5969, 0x5964, 0x5966, 0x4941, 0x4473, 0x5967, 0x4d2c, 0x4d48, 0x3439, 0x302e, 0x5965, 0x5962, 0x3478, 0x3167, 0x5968, 0x4d49, 0x596c, 0x423b, 0x5973, 0x596d, 0x596a, 0x5971, 0x5953, 0x596e, 0x5972, 0x4842, 0x456b, 0x596b, 0x596f, 0x3748, 0x3a71, 0x405d, 0x5977, 0x4526, 0x5974, 0x4b60, 0x5975, 0x5976, 0x4c4e, 0x4022, 0x3762, 0x597d, 0x3b35, 0x597a, 0x5979, 0x4732, 0x4635, 0x4531, 0x597b, 0x597c, 0x496f, 0x4745, 0x3b23, 0x4071, 0x4b50, 0x3349, 0x5a25, 0x597e, 0x4d4a, 0x5a27, 0x5a23, 0x5a24, 0x4160, 0x5a22, 0x593f, 0x5a26, 0x5a21, 0x5a2b, 0x5a2c, 0x4527, 0x5a2e, 0x3b24, 0x5a29, 0x353c, 0x5a2f, 0x5a28, 0x5a33, 0x5a32, 0x5a31, 0x5a34, 0x5a36, 0x3e71, 0x5a35, 0x5a39, 0x5a37, 0x5a38, 0x5970, 0x5a3b, 0x5a3a, 0x5978, 0x5a3c, 0x5a30, 0x3b59, 0x5a3d, 0x5a3e, 0x5a40, 0x5a3f, 0x5a41, 0x327e, 0x3936, 0x4a7c, 0x402f, 0x384e, 0x5a43, 0x5a46, 0x4952, 0x355f, 0x5a45, 0x5a44, 0x4754, 0x5a47, 0x3635, 0x5a49, 0x5a48, 0x343a, 0x3b36, 0x4658, 0x3749, 0x3f74, 0x5a4a, 0x4030, 0x4528, 0x495f, 0x5a4b, 0x5a4c, 0x5a4d, 0x4a38, 0x555d, 0x4046, 0x494c, 0x3a58, 0x4865, 0x4843, 0x454d, 0x4e41, 0x5a4f, 0x3c50, 0x5a50, 0x3036, 0x3654, 0x404d, 0x4960, 0x5a51, 0x3b42, 0x4347, 0x3b5b, 0x3f37, 0x5a52, 0x4a7d, 0x3177, 0x3b5c, 0x5a55, 0x5a53, 0x5a56, 0x4e39, 0x5a54, 0x407b, 0x5a57, 0x4232, 0x5a58, 0x347a, 0x5a5a, 0x5a59, 0x5a5b, 0x5a5c, 0x347b, 0x467c, 0x4336, 0x356c, 0x3b5d, 0x4161, 0x3d5c, 0x3030, 0x5a5d, 0x3222, 0x5a61, 0x3937, 0x5a60, 0x3a2b, 0x3e3a, 0x5a5f, 0x3e3b, 0x4c40, 0x3a2a, 0x3057, 0x404e, 0x5a66, 0x4031, 0x3147, 0x3d55, 0x4b66, 0x3a72, 0x3e3c, 0x4027, 0x5a65, 0x5a63, 0x5a64, 0x436b, 0x5b26, 0x5a6a, 0x3b7e, 0x3938, 0x5a68, 0x5a69, 0x3f38, 0x5a67, 0x3b2f, 0x5a6c, 0x5a6b, 0x5a70, 0x5a71, 0x5a6d, 0x3322, 0x5a6e, 0x5a6f, 0x4855, 0x4961, 0x374a, 0x5a72, 0x4032, 0x3e3d, 0x4352, 0x3647, 0x5a73, 0x5a77, 0x324b, 0x5a74, 0x5a76, 0x5a75, 0x3d6b, 0x4348, 0x3045, 0x5a78, 0x5a79, 0x442a, 0x4e71, 0x3b43, 0x4a6b, 0x4b3d, 0x5b22, 0x5a7b, 0x5a7e, 0x5a7d, 0x5a7a, 0x5b21, 0x465e, 0x5a7c, 0x5b23, 0x3d6c, 0x5b24, 0x4d4b, 0x4778, 0x5b25, 0x5b27, 0x5b28, 0x5b29, 0x364a, 0x3148, 0x3939, 0x5b2a, 0x5b2b, 0x3d71, 0x4162, 0x5258, 0x413e, 0x413d, 0x4258, 0x3a47, 0x5072, 0x376e, 0x4d2d, 0x4a7e, 0x497e, 0x5b2c, 0x3a73, 0x443f, 0x5b2d, 0x4f2f, 0x4b3e, 0x442b, 0x5b2e, 0x347c, 0x5b2f, 0x5b30, 0x4c5a, 0x4c24, 0x4b76, 0x4b5c, 0x3b25, 0x5b32, 0x3c6b, 0x4b51, 0x5b34, 0x5b37, 0x5b36, 0x3479, 0x3560, 0x5b33, 0x5b35, 0x5b38, 0x3f79, 0x4d7b, 0x3049, 0x3a60, 0x423c, 0x3c5d, 0x3e73, 0x5b3b, 0x454e, 0x5b39, 0x422b, 0x5b3a, 0x3e72, 0x4c5d, 0x5b3c, 0x5b3d, 0x4d68, 0x5b42, 0x393a, 0x4755, 0x5b3f, 0x456c, 0x5a5e, 0x5a62, 0x354f, 0x4747, 0x5b41, 0x3e3e, 0x4844, 0x5b47, 0x487a, 0x5b3e, 0x5b44, 0x5b43, 0x404f, 0x4b6d, 0x4e53, 0x4b67, 0x324c, 0x3b5e, 0x4f48, 0x5b46, 0x3f75, 0x5b45, 0x5b40, 0x384f, 0x5b4c, 0x5b4a, 0x324d, 0x5b48, 0x5b4e, 0x5b54, 0x4248, 0x4a41, 0x5b56, 0x4922, 0x5b55, 0x4770, 0x4b3f, 0x343b, 0x4077, 0x3d40, 0x4453, 0x4d2e, 0x5b51, 0x5b50, 0x5b52, 0x5b4f, 0x5b57, 0x5b4d, 0x5b4b, 0x5b53, 0x5b49, 0x436c, 0x4c78, 0x3c46, 0x3a74, 0x3a3a, 0x4b6f, 0x3341, 0x444e, 0x464a, 0x3149, 0x4072, 0x4034, 0x372a, 0x5b59, 0x393b, 0x337c, 0x5b5b, 0x3374, 0x5b61, 0x5b5e, 0x4073, 0x334b, 0x3a2c, 0x334a, 0x3a4f, 0x5b5c, 0x3765, 0x374b, 0x456d, 0x5b5a, 0x3046, 0x5b5d, 0x5b5f, 0x364d, 0x372c, 0x343c, 0x354b, 0x5b62, 0x3a79, 0x4b71, 0x3b37, 0x5b63, 0x4930, 0x5b6f, 0x3233, 0x5b64, 0x5b75, 0x5b65, 0x4e42, 0x5b6c, 0x475f, 0x5b74, 0x5b67, 0x3034, 0x5b69, 0x393c, 0x5b6b, 0x5b6a, 0x5b66, 0x5b71, 0x3e3f, 0x546d, 0x3868, 0x4d7c, 0x5b68, 0x4474, 0x3323, 0x3a2d, 0x5b60, 0x5b70, 0x3361, 0x5b6e, 0x5b72, 0x456e, 0x347e, 0x5c32, 0x4c49, 0x5b77, 0x347d, 0x5b7e, 0x4b40, 0x5c21, 0x5c23, 0x5c27, 0x5b79, 0x432a, 0x456f, 0x5c2b, 0x5b7c, 0x5c28, 0x5c22, 0x3f39, 0x5c2c, 0x4033, 0x5c2a, 0x343d, 0x4f50, 0x5b76, 0x5c26, 0x3058, 0x5b78, 0x4c3a, 0x5b7d, 0x3f22, 0x4447, 0x5b73, 0x5c25, 0x3f7a, 0x5c2f, 0x3371, 0x3821, 0x5c31, 0x5b7a, 0x5c30, 0x5c29, 0x5b7b, 0x5c2d, 0x5c2e, 0x5c3f, 0x464e, 0x5c24, 0x5c3b, 0x5c3d, 0x4458, 0x4d4c, 0x4976, 0x5c38, 0x424a, 0x5c3e, 0x413f, 0x5c35, 0x5c42, 0x5c41, 0x466f, 0x5c40, 0x466a, 0x5c44, 0x5c37, 0x3648, 0x5c3a, 0x3d5d, 0x4760, 0x5c3c, 0x364b, 0x5c34, 0x5c36, 0x5c33, 0x4f30, 0x335a, 0x5c39, 0x5c43, 0x3335, 0x3a67, 0x315d, 0x5c54, 0x4f31, 0x5c57, 0x3f3a, 0x5c56, 0x5c55, 0x5c52, 0x5c46, 0x5c63, 0x5c45, 0x5c58, 0x5c50, 0x5c4b, 0x5c48, 0x5c49, 0x5c51, 0x7422, 0x5c4e, 0x393d, 0x4448, 0x4164, 0x5c4c, 0x5c47, 0x5c4a, 0x4d4d, 0x4b6a, 0x5c4f, 0x5c59, 0x5c61, 0x5c5a, 0x5c67, 0x5c65, 0x5c60, 0x5c5f, 0x4450, 0x4165, 0x5c5d, 0x5c5b, 0x5c62, 0x5c68, 0x4875, 0x5c6e, 0x5c69, 0x5c6c, 0x5c66, 0x4374, 0x4938, 0x5c5c, 0x5c64, 0x3e40, 0x4c4f, 0x5c78, 0x5c6b, 0x3822, 0x3223, 0x335f, 0x5c53, 0x3e41, 0x5c70, 0x5c77, 0x3c79, 0x3372, 0x432e, 0x5c6d, 0x5c72, 0x5c76, 0x3636, 0x354c, 0x5c74, 0x3521, 0x464b, 0x5c73, 0x5c75, 0x5c6f, 0x5c71, 0x3360, 0x4349, 0x5c7c, 0x5c7a, 0x3869, 0x5c79, 0x5d21, 0x5b58, 0x5c7b, 0x5c7d, 0x5c7e, 0x5d2c, 0x5d28, 0x5b6d, 0x5d27, 0x5d26, 0x5d23, 0x5c6a, 0x5d25, 0x5d24, 0x5d2a, 0x4f26, 0x5d2d, 0x367b, 0x5d29, 0x5d2b, 0x4827, 0x5d2e, 0x5d32, 0x5d2f, 0x4d73, 0x5d30, 0x5c5e, 0x5d33, 0x5d34, 0x3135, 0x5d36, 0x3767, 0x3c21, 0x3655, 0x3224, 0x4d5f, 0x5d38, 0x5d37, 0x5d3a, 0x353d, 0x3656, 0x343e, 0x5d3d, 0x5d3c, 0x5d3e, 0x324e, 0x4337, 0x5d3f, 0x343f, 0x5d41, 0x5d40, 0x5d42, 0x5d43, 0x5d44, 0x3b5f, 0x4035, 0x3a21, 0x4970, 0x4a62, 0x4f44, 0x3b75, 0x3a50, 0x4e72, 0x5d45, 0x5d46, 0x3b60, 0x5d47, 0x5d48, 0x5d4a, 0x5d49, 0x4b58, 0x3d5e, 0x3c6c, 0x3b44, 0x5d4b, 0x5d4d, 0x3f23, 0x5d4c, 0x5d4e, 0x5d4f, 0x5d50, 0x5d51, 0x5d52, 0x5d54, 0x5d53, 0x5d55, 0x3225, 0x434a, 0x5d56, 0x3b26, 0x334c, 0x5d57, 0x4542, 0x544c, 0x3523, 0x5d58, 0x5d59, 0x4a6c, 0x4b68, 0x4647, 0x5d5a, 0x4866, 0x487b, 0x4c53, 0x5d5b, 0x5d5d, 0x5d5c, 0x5d5f, 0x5d5e, 0x5d61, 0x3b61, 0x4c31, 0x5d62, 0x5d63, 0x3524, 0x5d64, 0x5d66, 0x5d65, 0x3f65, 0x4939, 0x314a, 0x4845, 0x4475, 0x3d41, 0x3561, 0x4846, 0x3c2e, 0x5d68, 0x3440, 0x3178, 0x4672, 0x5d67, 0x393e, 0x4353, 0x5d69, 0x5d71, 0x5d6a, 0x4241, 0x3562, 0x5d72, 0x3768, 0x3525, 0x5d70, 0x5d6e, 0x5d6b, 0x4d60, 0x4440, 0x4659, 0x5d6c, 0x5d74, 0x5d73, 0x3723, 0x322d, 0x3a3b, 0x5d6d, 0x5d6f, 0x4b57, 0x4274, 0x4b77, 0x5d7c, 0x5d7d, 0x324f, 0x4a28, 0x4c7d, 0x5e21, 0x3c23, 0x3e42, 0x5d78, 0x5d7e, 0x3168, 0x3637, 0x5d75, 0x5d7a, 0x4074, 0x4771, 0x4867, 0x5d77, 0x4b21, 0x5d79, 0x5e24, 0x5e22, 0x5d7b, 0x4b22, 0x4748, 0x3563, 0x4525, 0x436d, 0x5e25, 0x5e23, 0x4259, 0x5d76, 0x314b, 0x4d4e, 0x5e30, 0x5e2f, 0x4076, 0x5e2c, 0x4d6c, 0x4636, 0x5e26, 0x4445, 0x314c, 0x393f, 0x5e29, 0x3d27, 0x5e2e, 0x5e2d, 0x5e28, 0x5e2b, 0x3368, 0x5e2a, 0x4749, 0x4e2e, 0x3e74, 0x4075, 0x5e36, 0x5e34, 0x494d, 0x5e31, 0x5e33, 0x313a, 0x3940, 0x4f32, 0x333d, 0x4962, 0x4d61, 0x3324, 0x3f3b, 0x5e35, 0x5e3a, 0x3e43, 0x4d30, 0x5e37, 0x5e32, 0x5e38, 0x4e5e, 0x4573, 0x4642, 0x3336, 0x3155, 0x5e3e, 0x5e41, 0x4e43, 0x4d64, 0x5e48, 0x5e42, 0x5e3f, 0x4e54, 0x5e45, 0x3d4a, 0x5e47, 0x5e4c, 0x4571, 0x5e4a, 0x5e44, 0x4338, 0x5e4b, 0x5e40, 0x5e46, 0x5e4d, 0x307c, 0x5e43, 0x5e4e, 0x3f3c, 0x3d5f, 0x4a25, 0x3a2e, 0x5e3b, 0x5e49, 0x453a, 0x4036, 0x3369, 0x3a51, 0x3e44, 0x5e3d, 0x3d42, 0x374c, 0x5e3c, 0x5e52, 0x3d6d, 0x383a, 0x5e61, 0x5e5b, 0x3574, 0x454f, 0x5e56, 0x5e5f, 0x302f, 0x3132, 0x3239, 0x5e58, 0x422c, 0x5e4f, 0x5e51, 0x3941, 0x5e62, 0x5e5d, 0x5e55, 0x5e5c, 0x4c2b, 0x5e5a, 0x5e5e, 0x3850, 0x3e45, 0x4339, 0x5e54, 0x4d2f, 0x5e57, 0x5e50, 0x4572, 0x5e53, 0x5e59, 0x4f51, 0x3c3e, 0x4b7e, 0x5e63, 0x482e, 0x5e6f, 0x383b, 0x3d60, 0x5e65, 0x4e2f, 0x3942, 0x5e72, 0x306e, 0x5e70, 0x5e64, 0x5e6a, 0x5e6c, 0x4d4f, 0x5e67, 0x452e, 0x5e69, 0x5e71, 0x5e6b, 0x4c47, 0x5e66, 0x3c22, 0x5e7e, 0x336a, 0x5e68, 0x5e6d, 0x5e6e, 0x426c, 0x425a, 0x5e76, 0x5e7c, 0x5e7a, 0x4529, 0x5f23, 0x5e77, 0x5e78, 0x5e60, 0x3579, 0x493a, 0x3c3f, 0x3977, 0x4f33, 0x5e74, 0x5f22, 0x3169, 0x4166, 0x4779, 0x3441, 0x4e7a, 0x4c21, 0x4452, 0x5e7b, 0x5e7d, 0x4132, 0x5f21, 0x5e79, 0x5e73, 0x3443, 0x3769, 0x5f2f, 0x5f2a, 0x4078, 0x3363, 0x3d61, 0x5f33, 0x5f2c, 0x442c, 0x5f29, 0x4459, 0x5f4c, 0x5f26, 0x5f25, 0x5f2e, 0x5f28, 0x5f27, 0x5f2d, 0x4021, 0x5f24, 0x5f30, 0x5f31, 0x3442, 0x5f36, 0x5f35, 0x5f37, 0x5f3a, 0x4543, 0x5f34, 0x5f38, 0x3763, 0x4279, 0x5f32, 0x473b, 0x5f39, 0x5f3e, 0x5f3c, 0x5f3f, 0x5f42, 0x5f3b, 0x396a, 0x4728, 0x5e39, 0x4d74, 0x5f3d, 0x5f41, 0x4275, 0x5f40, 0x5f2b, 0x6f69, 0x5f45, 0x5f49, 0x5f47, 0x5f43, 0x5f44, 0x5f48, 0x5f46, 0x494e, 0x5f4e, 0x5f4b, 0x5f4a, 0x5f4d, 0x4654, 0x5f4f, 0x4375, 0x426d, 0x4025, 0x5f50, 0x5f52, 0x5f51, 0x5e75, 0x5f53, 0x4667, 0x5f54, 0x3250, 0x4574, 0x3325, 0x3564, 0x3c5e, 0x3a52, 0x4f27, 0x3f66, 0x316a, 0x5f56, 0x5f55, 0x5f59, 0x433a, 0x5f5c, 0x5f57, 0x5f5b, 0x5f5a, 0x4540, 0x3059, 0x4e75, 0x5f5e, 0x3128, 0x5f60, 0x5f5f, 0x5f5d, 0x5f58, 0x4b23, 0x5f62, 0x5f61, 0x316b, 0x5f64, 0x4a32, 0x5f63, 0x4c35, 0x3e47, 0x4133, 0x3e46, 0x4e7b, 0x5f6a, 0x4079, 0x5f66, 0x5f6b, 0x316c, 0x5f69, 0x4761, 0x5f65, 0x5f68, 0x3e48, 0x4851, 0x5f6c, 0x3c51, 0x407a, 0x5f6f, 0x5f67, 0x3727, 0x5f6d, 0x4d50, 0x5f70, 0x7426, 0x3d4f, 0x5f71, 0x5f72, 0x472e, 0x5f74, 0x5f75, 0x4733, 0x4575, 0x5f77, 0x5f79, 0x4e55, 0x5f76, 0x5f78, 0x316d, 0x5f73, 0x535b, 0x5f7a, 0x4167, 0x3b38, 0x5f7c, 0x5f7b, 0x3f24, 0x5259, 0x5f7d, 0x6021, 0x5f6e, 0x5f7e, 0x6022, 0x477a, 0x6023, 0x6024, 0x6025, 0x6026, 0x445e, 0x6028, 0x6027, 0x6029, 0x602a, 0x3c5f, 0x4963, 0x4c6c, 0x602b, 0x602c, 0x4156, 0x3c24, 0x602d, 0x602e, 0x602f, 0x4a52, 0x4847, 0x6030, 0x4757, 0x442d, 0x6031, 0x3267, 0x356d, 0x4c46, 0x4c36, 0x3234, 0x4f34, 0x4b52, 0x4a2a, 0x4037, 0x6032, 0x4643, 0x3823, 0x6033, 0x3a54, 0x6035, 0x6034, 0x6036, 0x6037, 0x6038, 0x353e, 0x6039, 0x603a, 0x3824, 0x4848, 0x603c, 0x3e75, 0x603b, 0x3638, 0x603d, 0x603f, 0x603e, 0x6040, 0x3851, 0x6041, 0x3669, 0x4140, 0x397d, 0x6043, 0x6044, 0x6042, 0x3c6d, 0x4648, 0x3639, 0x6046, 0x432c, 0x6045, 0x4f35, 0x4762, 0x6049, 0x604b, 0x6048, 0x4c54, 0x604a, 0x604c, 0x4e44, 0x6050, 0x604f, 0x4376, 0x472d, 0x3825, 0x604e, 0x604d, 0x4d31, 0x4d32, 0x6051, 0x316e, 0x3976, 0x3b62, 0x6052, 0x6053, 0x6055, 0x3d43, 0x6057, 0x6056, 0x6058, 0x334d, 0x605a, 0x6059, 0x605c, 0x605b, 0x383c, 0x4e28, 0x364c, 0x3226, 0x366a, 0x3461, 0x4e68, 0x605e, 0x6060, 0x6061, 0x3251, 0x605d, 0x3b39, 0x4441, 0x605f, 0x6064, 0x3c6e, 0x6062, 0x373e, 0x4849, 0x6063, 0x607e, 0x6069, 0x383d, 0x3565, 0x6066, 0x4d7d, 0x4e30, 0x4276, 0x6068, 0x606a, 0x4e56, 0x3657, 0x487c, 0x474a, 0x606b, 0x606d, 0x6070, 0x606c, 0x606f, 0x386a, 0x314d, 0x6071, 0x3f70, 0x606e, 0x4e5c, 0x6074, 0x7424, 0x6072, 0x6075, 0x6067, 0x6073, 0x3a3c, 0x6076, 0x6077, 0x4d7e, 0x6078, 0x6079, 0x6065, 0x607a, 0x3444, 0x3c25, 0x607b, 0x607c, 0x607d, 0x313b, 0x6121, 0x493b, 0x6122, 0x3424, 0x6123, 0x6124, 0x6125, 0x6127, 0x6128, 0x6126, 0x4953, 0x612a, 0x6129, 0x612c, 0x612b, 0x612d, 0x612e, 0x6130, 0x612f, 0x3979, 0x6132, 0x6131, 0x3445, 0x3f53, 0x453c, 0x6133, 0x4038, 0x3b3a, 0x3179, 0x6134, 0x4d51, 0x4a63, 0x6135, 0x4544, 0x4d33, 0x3943, 0x3f3d, 0x434b, 0x5234, 0x442e, 0x3268, 0x6136, 0x6137, 0x613c, 0x613a, 0x6139, 0x5a42, 0x3326, 0x6138, 0x305a, 0x482a, 0x484a, 0x4e31, 0x613d, 0x613b, 0x435c, 0x4026, 0x482b, 0x492d, 0x613f, 0x4e2c, 0x374d, 0x6140, 0x613e, 0x4856, 0x6141, 0x6142, 0x305b, 0x3e76, 0x6147, 0x6144, 0x466d, 0x6143, 0x3526, 0x614a, 0x6145, 0x6146, 0x6149, 0x6148, 0x4925, 0x4142, 0x4141, 0x353f, 0x614b, 0x614c, 0x614d, 0x614f, 0x614e, 0x3156, 0x6157, 0x4868, 0x6151, 0x6153, 0x6155, 0x3f3e, 0x6156, 0x6154, 0x3c40, 0x6150, 0x6152, 0x4942, 0x3e49, 0x6159, 0x6158, 0x615a, 0x3c26, 0x3a2f, 0x4577, 0x615b, 0x444b, 0x615d, 0x4e21, 0x615c, 0x4169, 0x6162, 0x6164, 0x6165, 0x4354, 0x6163, 0x6160, 0x615e, 0x615f, 0x6161, 0x6168, 0x6166, 0x6167, 0x6169, 0x616b, 0x616c, 0x616d, 0x616e, 0x616a, 0x6170, 0x616f, 0x6171, 0x4e45, 0x6174, 0x6172, 0x6173, 0x3462, 0x4c7e, 0x4a4a, 0x6176, 0x6175, 0x6177, 0x6178, 0x617c, 0x6179, 0x617a, 0x617b, 0x617d, 0x617e, 0x6221, 0x6222, 0x6223, 0x482f, 0x4550, 0x6224, 0x4772, 0x4934, 0x6225, 0x6226, 0x452a, 0x3327, 0x3944, 0x6227, 0x6228, 0x6229, 0x3b29, 0x622b, 0x622a, 0x622c, 0x622d, 0x4869, 0x622e, 0x622f, 0x7369, 0x6230, 0x6231, 0x6232, 0x3b2e, 0x6233, 0x4756, 0x4b5f, 0x314e, 0x3157, 0x6234, 0x6236, 0x6235, 0x4570, 0x4039, 0x5d39, 0x6237, 0x4c41, 0x6238, 0x3446, 0x4857, 0x6239, 0x623a, 0x623b, 0x4c5c, 0x4c55, 0x443e, 0x416a, 0x623d, 0x3d62, 0x3e4a, 0x6240, 0x623f, 0x623e, 0x487d, 0x3447, 0x3829, 0x6246, 0x6243, 0x3f3f, 0x4c32, 0x6242, 0x6244, 0x6245, 0x6241, 0x6247, 0x6248, 0x442f, 0x3463, 0x4365, 0x6249, 0x624a, 0x624d, 0x3f67, 0x4644, 0x624e, 0x4b53, 0x624b, 0x624c, 0x6251, 0x6250, 0x624f, 0x6253, 0x6252, 0x6254, 0x6256, 0x6255, 0x4a4d, 0x3d56, 0x4e46, 0x6257, 0x4637, 0x6258, 0x6259, 0x625d, 0x625b, 0x625c, 0x625a, 0x625e, 0x625f, 0x6260, 0x6261, 0x4c37, 0x6262, 0x4c70, 0x6263, 0x434e, 0x476a, 0x366b, 0x433b, 0x6264, 0x363a, 0x4050, 0x6265, 0x3a3d, 0x6266, 0x6267, 0x3826, 0x3a55, 0x6269, 0x4556, 0x3a56, 0x354e, 0x4b24, 0x474b, 0x4557, 0x395c, 0x626b, 0x3e4b, 0x4e32, 0x3945, 0x3827, 0x4823, 0x626d, 0x626f, 0x386b, 0x626e, 0x4476, 0x6271, 0x3337, 0x626c, 0x486a, 0x3130, 0x3a6c, 0x4f52, 0x6270, 0x6272, 0x4a4b, 0x4059, 0x6274, 0x6275, 0x6273, 0x334e, 0x627b, 0x627a, 0x3c27, 0x627c, 0x6277, 0x627d, 0x6278, 0x4858, 0x6276, 0x6279, 0x6322, 0x6321, 0x4b61, 0x627e, 0x306b, 0x6324, 0x6323, 0x3e4c, 0x6325, 0x4143, 0x6327, 0x6326, 0x6328, 0x6268, 0x626a, 0x632a, 0x6329, 0x3c28, 0x4e69, 0x3c52, 0x632b, 0x3737, 0x3540, 0x3527, 0x3b63, 0x4d34, 0x6331, 0x6330, 0x4144, 0x632d, 0x632f, 0x3d4b, 0x3f40, 0x632e, 0x632c, 0x472a, 0x3e4d, 0x493c, 0x3a57, 0x4578, 0x6332, 0x6333, 0x6349, 0x3658, 0x4f3d, 0x4135, 0x6334, 0x3252, 0x4477, 0x4a21, 0x6335, 0x357a, 0x6336, 0x6338, 0x6339, 0x4729, 0x633a, 0x633b, 0x633c, 0x3659, 0x3253, 0x4645, 0x3d28, 0x3b64, 0x633d, 0x3d29, 0x324a, 0x4943, 0x633e, 0x486b, 0x4145, 0x6341, 0x6342, 0x4769, 0x3f41, 0x633f, 0x4361, 0x6340, 0x3e4e, 0x305c, 0x3529, 0x6343, 0x4478, 0x6344, 0x4047, 0x4c2d, 0x4923, 0x6345, 0x6346, 0x4355, 0x4e47, 0x6348, 0x6347, 0x3c6f, 0x634a, 0x3070, 0x634d, 0x634b, 0x3254, 0x374e, 0x634c, 0x3946, 0x3972, 0x4a66, 0x634e, 0x4b54, 0x6350, 0x4051, 0x314f, 0x323a, 0x302c, 0x634f, 0x6351, 0x6352, 0x3e77, 0x6353, 0x334f, 0x6355, 0x376a, 0x3566, 0x6356, 0x3675, 0x6357, 0x407c, 0x464d, 0x4060, 0x3a75, 0x6358, 0x4362, 0x416b, 0x635a, 0x635c, 0x6359, 0x635b, 0x3722, 0x635d, 0x3726, 0x3567, 0x4d52, 0x635f, 0x6360, 0x312e, 0x6363, 0x3376, 0x6362, 0x6361, 0x6365, 0x635e, 0x6366, 0x4e29, 0x6367, 0x6368, 0x5474, 0x636a, 0x6369, 0x636b, 0x636c, 0x4e35, 0x636d, 0x706f, 0x3e4f, 0x636e, 0x636f, 0x3d57, 0x4638, 0x6370, 0x4328, 0x6371, 0x433c, 0x6372, 0x3625, 0x513f, 0x435d, 0x3c33, 0x3448, 0x6373, 0x6422, 0x6376, 0x3568, 0x6375, 0x6424, 0x6374, 0x3e50, 0x6378, 0x6379, 0x452b, 0x637a, 0x335e, 0x3f5a, 0x4964, 0x637c, 0x4268, 0x6377, 0x637b, 0x637d, 0x3a7b, 0x6426, 0x492e, 0x4826, 0x4579, 0x365a, 0x6425, 0x6423, 0x4835, 0x637e, 0x435e, 0x457b, 0x457a, 0x3a76, 0x6438, 0x6428, 0x642a, 0x642d, 0x642e, 0x642b, 0x642c, 0x6429, 0x6427, 0x6421, 0x4a4f, 0x3255, 0x6435, 0x6432, 0x6437, 0x6436, 0x4773, 0x4c27, 0x3b3b, 0x6430, 0x6439, 0x6434, 0x6433, 0x642f, 0x6431, 0x3449, 0x433d, 0x407d, 0x4822, 0x643e, 0x4824, 0x4061, 0x643b, 0x484f, 0x643f, 0x4a53, 0x435b, 0x643a, 0x643c, 0x643d, 0x6440, 0x3c44, 0x4646, 0x6445, 0x6444, 0x6441, 0x4f36, 0x644a, 0x644e, 0x644b, 0x6447, 0x6448, 0x644d, 0x6442, 0x5255, 0x6449, 0x6443, 0x644c, 0x6452, 0x344a, 0x644f, 0x6450, 0x6451, 0x6454, 0x6453, 0x4876, 0x6455, 0x4e7c, 0x4a6d, 0x645a, 0x6457, 0x6456, 0x4052, 0x6459, 0x645b, 0x6458, 0x645f, 0x645c, 0x645d, 0x6446, 0x645e, 0x6460, 0x6461, 0x4a46, 0x6462, 0x4c62, 0x364e, 0x3729, 0x6463, 0x4a34, 0x3f68, 0x4c30, 0x6464, 0x4e33, 0x4774, 0x4146, 0x4734, 0x3d4d, 0x3040, 0x6469, 0x6467, 0x6465, 0x3421, 0x3e51, 0x646a, 0x6468, 0x6466, 0x646e, 0x646d, 0x646c, 0x646b, 0x646f, 0x6470, 0x403a, 0x6471, 0x6473, 0x6472, 0x3852, 0x4138, 0x6475, 0x457c, 0x6474, 0x6476, 0x4a35, 0x416c, 0x3947, 0x6477, 0x4e48, 0x6479, 0x647a, 0x647b, 0x647c, 0x3b65, 0x647d, 0x374f, 0x356a, 0x352a, 0x6521, 0x4c73, 0x3948, 0x647e, 0x6524, 0x4c66, 0x473c, 0x4933, 0x3d63, 0x6523, 0x3c53, 0x3949, 0x3b66, 0x3569, 0x4a36, 0x6522, 0x4147, 0x4b42, 0x3a77, 0x3b67, 0x445d, 0x6527, 0x4e5f, 0x3a59, 0x6528, 0x3f42, 0x652a, 0x3e52, 0x3a30, 0x6529, 0x3d2a, 0x383e, 0x4148, 0x6525, 0x652b, 0x6526, 0x3750, 0x652e, 0x6532, 0x376b, 0x652d, 0x6536, 0x394a, 0x4d6d, 0x303c, 0x6533, 0x356b, 0x6530, 0x6531, 0x457d, 0x652f, 0x652c, 0x3328, 0x4064, 0x3828, 0x6538, 0x6535, 0x6537, 0x6534, 0x3751, 0x4233, 0x6539, 0x416e, 0x6546, 0x6542, 0x653c, 0x6540, 0x3c7a, 0x305d, 0x653b, 0x6543, 0x6547, 0x394b, 0x4c56, 0x4456, 0x653d, 0x6545, 0x653a, 0x433e, 0x653f, 0x303d, 0x4c4a, 0x653e, 0x365b, 0x486c, 0x416d, 0x4e50, 0x3d6f, 0x656e, 0x6548, 0x407e, 0x6544, 0x6549, 0x654b, 0x4479, 0x654e, 0x654a, 0x4a54, 0x344b, 0x4c4b, 0x305e, 0x654d, 0x4e7d, 0x654c, 0x316f, 0x466c, 0x654f, 0x6556, 0x6550, 0x6557, 0x6553, 0x477b, 0x3c4a, 0x6555, 0x6552, 0x6558, 0x6551, 0x3d44, 0x4b25, 0x3d4c, 0x6554, 0x6560, 0x655c, 0x655f, 0x655d, 0x6561, 0x655b, 0x6541, 0x4053, 0x484b, 0x655e, 0x6559, 0x4121, 0x3752, 0x3d2b, 0x3f25, 0x4136, 0x6564, 0x6566, 0x6567, 0x6563, 0x6565, 0x655a, 0x6562, 0x656a, 0x6569, 0x4b7a, 0x372b, 0x6568, 0x656c, 0x656b, 0x656f, 0x6571, 0x3b3c, 0x656d, 0x6572, 0x6573, 0x6574, 0x657a, 0x453b, 0x6576, 0x6575, 0x6577, 0x6578, 0x6579, 0x657b, 0x657c, 0x344c, 0x657d, 0x657e, 0x6621, 0x6622, 0x6623, 0x6624, 0x6625, 0x6626, 0x6628, 0x6627, 0x6629, 0x662a, 0x662b, 0x662e, 0x662c, 0x662d, 0x3a61, 0x3753, 0x4356, 0x4833, 0x3d70, 0x474d, 0x486d, 0x662f, 0x586d, 0x6630, 0x6632, 0x4d65, 0x6631, 0x6634, 0x6633, 0x4d53, 0x6635, 0x487e, 0x6636, 0x6639, 0x6638, 0x6637, 0x663a, 0x3732, 0x4122, 0x3541, 0x663e, 0x663b, 0x663c, 0x663f, 0x6640, 0x663d, 0x3129, 0x3227, 0x6642, 0x6643, 0x6644, 0x4d62, 0x3d2c, 0x6646, 0x6645, 0x3f69, 0x6647, 0x6648, 0x6649, 0x3465, 0x344d, 0x664a, 0x664b, 0x4b5d, 0x4d63, 0x4d54, 0x4f37, 0x394d, 0x664e, 0x3c54, 0x664d, 0x664f, 0x3c29, 0x4251, 0x6650, 0x394c, 0x4c57, 0x6651, 0x6652, 0x6653, 0x6654, 0x6655, 0x3c2a, 0x4c6d, 0x6657, 0x433f, 0x6656, 0x6659, 0x6658, 0x665a, 0x403b, 0x665b, 0x665c, 0x4a39, 0x665d, 0x416f, 0x665e, 0x665f, 0x4e7e, 0x6662, 0x6661, 0x6660, 0x4430, 0x6663, 0x3f26, 0x6664, 0x6665, 0x4f38, 0x6666, 0x6667, 0x6669, 0x6668, 0x4825, 0x4679, 0x4f3e, 0x4829, 0x666b, 0x3e53, 0x492a, 0x666c, 0x666a, 0x344e, 0x3854, 0x3b68, 0x486e, 0x382a, 0x4b43, 0x666f, 0x666d, 0x394e, 0x394f, 0x3069, 0x3a68, 0x4759, 0x305f, 0x6674, 0x4340, 0x4758, 0x425b, 0x6676, 0x6672, 0x6675, 0x6670, 0x6673, 0x4b26, 0x3855, 0x307d, 0x6671, 0x6678, 0x6679, 0x4639, 0x363b, 0x6726, 0x473d, 0x3b69, 0x363c, 0x4048, 0x4f46, 0x4c2e, 0x6677, 0x4054, 0x3553, 0x667a, 0x667c, 0x667b, 0x667d, 0x4326, 0x473e, 0x4431, 0x6723, 0x6722, 0x667e, 0x3f55, 0x4965, 0x6725, 0x6724, 0x3950, 0x4f53, 0x6735, 0x6729, 0x672a, 0x3c70, 0x6728, 0x3978, 0x6727, 0x672b, 0x4432, 0x4a22, 0x4123, 0x425c, 0x672f, 0x6730, 0x672c, 0x672d, 0x672e, 0x3951, 0x6736, 0x6732, 0x4966, 0x4b6c, 0x4928, 0x6731, 0x6734, 0x6733, 0x4b44, 0x6737, 0x6738, 0x4137, 0x6739, 0x673b, 0x673f, 0x673c, 0x673a, 0x473f, 0x673d, 0x673e, 0x3232, 0x6745, 0x6740, 0x6741, 0x6742, 0x4221, 0x6744, 0x6743, 0x6746, 0x6747, 0x6748, 0x3f43, 0x3269, 0x6749, 0x4e57, 0x3c2b, 0x3d2d, 0x3b6a, 0x4357, 0x674a, 0x674b, 0x3131, 0x674c, 0x674d, 0x674e, 0x674f, 0x6750, 0x363d, 0x5a2a, 0x6751, 0x4065, 0x6752, 0x3c4b, 0x6753, 0x5030, 0x6754, 0x4a5e, 0x345c, 0x4124, 0x3d58, 0x4971, 0x3d2e, 0x6755, 0x3952, 0x6756, 0x484c, 0x6764, 0x6758, 0x4249, 0x4775, 0x383f, 0x6757, 0x4125, 0x6759, 0x447a, 0x675b, 0x675a, 0x675d, 0x675c, 0x675e, 0x6760, 0x675f, 0x344f, 0x6761, 0x6762, 0x6763, 0x3a31, 0x4e49, 0x6765, 0x3f27, 0x3170, 0x6766, 0x6767, 0x6768, 0x3072, 0x6769, 0x676a, 0x4967, 0x3c47, 0x676c, 0x3329, 0x3032, 0x676b, 0x676e, 0x474e, 0x3f44, 0x3256, 0x4b27, 0x375d, 0x365c, 0x676d, 0x326a, 0x3423, 0x3171, 0x6772, 0x4e6a, 0x425d, 0x4944, 0x677e, 0x3257, 0x677c, 0x677a, 0x6771, 0x676f, 0x6770, 0x3c63, 0x366c, 0x4377, 0x4651, 0x3151, 0x6774, 0x6773, 0x6779, 0x6775, 0x6778, 0x4c50, 0x6777, 0x3258, 0x337d, 0x677b, 0x677d, 0x3754, 0x6823, 0x682c, 0x682d, 0x302b, 0x6834, 0x3071, 0x682b, 0x682a, 0x6825, 0x6824, 0x6822, 0x6821, 0x4363, 0x427b, 0x6827, 0x6826, 0x6829, 0x4170, 0x3755, 0x3141, 0x6828, 0x3953, 0x4171, 0x683a, 0x683b, 0x3259, 0x322e, 0x6838, 0x682e, 0x6836, 0x683d, 0x6837, 0x6835, 0x6776, 0x6833, 0x682f, 0x3450, 0x6831, 0x683c, 0x6832, 0x683e, 0x6830, 0x477c, 0x4d69, 0x6839, 0x684f, 0x6847, 0x3f7b, 0x3546, 0x365d, 0x6842, 0x325b, 0x3e54, 0x6845, 0x3a5a, 0x4551, 0x684a, 0x4a6e, 0x6841, 0x325a, 0x3856, 0x4929, 0x684b, 0x683f, 0x6848, 0x6852, 0x6843, 0x6844, 0x463a, 0x6849, 0x6846, 0x4b28, 0x684c, 0x3060, 0x6840, 0x684e, 0x684d, 0x476b, 0x6854, 0x685f, 0x337e, 0x6862, 0x6850, 0x6855, 0x4d6e, 0x685e, 0x4d55, 0x4e2a, 0x4378, 0x336b, 0x4972, 0x6864, 0x4621, 0x3031, 0x685d, 0x6859, 0x4172, 0x6853, 0x685b, 0x6860, 0x472c, 0x302a, 0x6858, 0x6861, 0x4978, 0x685c, 0x6857, 0x3e55, 0x3d2f, 0x3c2c, 0x4c58, 0x4947, 0x6867, 0x6870, 0x685a, 0x3377, 0x3e78, 0x6865, 0x686a, 0x4173, 0x6866, 0x686d, 0x435f, 0x686e, 0x4d56, 0x6863, 0x3338, 0x6869, 0x686c, 0x4c2c, 0x686f, 0x6868, 0x686b, 0x4b29, 0x4f21, 0x6873, 0x687a, 0x6872, 0x3c43, 0x6851, 0x4a4e, 0x4c22, 0x6879, 0x6878, 0x6874, 0x6875, 0x3136, 0x6877, 0x6871, 0x4455, 0x6876, 0x307e, 0x4222, 0x4a43, 0x687b, 0x6921, 0x4859, 0x687e, 0x3e56, 0x3c49, 0x6923, 0x363e, 0x6924, 0x4979, 0x687d, 0x6856, 0x687c, 0x4f4f, 0x4622, 0x4973, 0x692b, 0x6931, 0x6932, 0x6925, 0x4776, 0x692f, 0x6927, 0x6929, 0x6933, 0x6928, 0x692c, 0x3172, 0x4665, 0x692d, 0x6930, 0x6926, 0x4126, 0x692a, 0x3b27, 0x3f45, 0x3730, 0x4c74, 0x4c79, 0x3d72, 0x6937, 0x6935, 0x4f4e, 0x6934, 0x4d75, 0x6936, 0x6938, 0x6939, 0x693c, 0x693a, 0x4623, 0x693b, 0x484d, 0x692e, 0x3d73, 0x693d, 0x6942, 0x4174, 0x6941, 0x6922, 0x6943, 0x4149, 0x693e, 0x6940, 0x693f, 0x5d31, 0x5d22, 0x6945, 0x6944, 0x4d76, 0x623c, 0x6946, 0x6947, 0x6948, 0x3857, 0x3554, 0x694a, 0x515d, 0x3575, 0x4e3a, 0x3673, 0x694b, 0x694c, 0x436e, 0x694d, 0x467a, 0x303a, 0x3263, 0x6952, 0x6953, 0x694e, 0x3b3d, 0x694f, 0x4742, 0x6950, 0x6951, 0x695b, 0x6955, 0x6958, 0x6954, 0x6956, 0x6957, 0x3c58, 0x6959, 0x4341, 0x3756, 0x3342, 0x695c, 0x333f, 0x6961, 0x695d, 0x6960, 0x483a, 0x695e, 0x695f, 0x4948, 0x485a, 0x6962, 0x427d, 0x696c, 0x6968, 0x326b, 0x6966, 0x4b2a, 0x6967, 0x6964, 0x6965, 0x696a, 0x696d, 0x696b, 0x6969, 0x6963, 0x4358, 0x6974, 0x4c2a, 0x6972, 0x6973, 0x696e, 0x6970, 0x6971, 0x696f, 0x4066, 0x4f39, 0x6978, 0x6979, 0x6a21, 0x3f2a, 0x697b, 0x697e, 0x6976, 0x6975, 0x6a22, 0x325c, 0x697c, 0x6a23, 0x697d, 0x697a, 0x4433, 0x6977, 0x4768, 0x6a27, 0x4d3b, 0x6a26, 0x6a25, 0x6a2e, 0x6a28, 0x6a30, 0x4d66, 0x6a33, 0x6a2a, 0x6a2b, 0x6a2f, 0x6a32, 0x6a31, 0x6a29, 0x6a2c, 0x6a3d, 0x6a36, 0x6a34, 0x6a35, 0x6a3a, 0x6a3b, 0x332a, 0x3542, 0x6a39, 0x6a24, 0x6a38, 0x6a3c, 0x6a37, 0x6a3e, 0x6a40, 0x6a3f, 0x6a42, 0x6a41, 0x695a, 0x6a46, 0x6a43, 0x6a44, 0x6a45, 0x6a47, 0x376c, 0x6a49, 0x6a48, 0x3d30, 0x3954, 0x5e27, 0x6a4a, 0x3d51, 0x3339, 0x6a4b, 0x3152, 0x3e57, 0x6a4c, 0x3955, 0x6a4d, 0x3061, 0x493d, 0x6a4e, 0x3f6a, 0x6a55, 0x6a52, 0x436f, 0x6a53, 0x6a50, 0x365e, 0x6a4f, 0x6a56, 0x3736, 0x425e, 0x6a5c, 0x6a58, 0x4235, 0x6a57, 0x6a5a, 0x6a51, 0x6a5b, 0x6a5d, 0x486f, 0x6a59, 0x6a5e, 0x6a60, 0x3853, 0x6a54, 0x3041, 0x6a5f, 0x3a5b, 0x4e76, 0x6a61, 0x6a62, 0x4175, 0x4e22, 0x6a63, 0x4d35, 0x6a64, 0x6a65, 0x4a64, 0x6a66, 0x3a40, 0x4e23, 0x6a6b, 0x6a6c, 0x3e58, 0x6a6a, 0x4d67, 0x6a67, 0x6a69, 0x403d, 0x3f7e, 0x6a68, 0x6a6d, 0x4a23, 0x6a6f, 0x6a6e, 0x336c, 0x4b2b, 0x6a70, 0x6a7c, 0x6a72, 0x6a73, 0x6a74, 0x6a75, 0x6a79, 0x6a7a, 0x6a78, 0x6a76, 0x6a71, 0x6a77, 0x6a7b, 0x7037, 0x3228, 0x6a7e, 0x365f, 0x6a7d, 0x6b22, 0x6b21, 0x6b24, 0x6b23, 0x6b25, 0x3d31, 0x6b26, 0x6b27, 0x6b28, 0x403e, 0x4d57, 0x6b29, 0x4a24, 0x4746, 0x6b2a, 0x6b2b, 0x382b, 0x352c, 0x6b2c, 0x3b6b, 0x4741, 0x6b2d, 0x3350, 0x6b2e, 0x6b30, 0x4d77, 0x6b2f, 0x3f46, 0x6b31, 0x6b32, 0x6b33, 0x3451, 0x6b34, 0x6b35, 0x6b36, 0x6b37, 0x3351, 0x6b38, 0x6b39, 0x6b3a, 0x3272, 0x3f28, 0x6b3b, 0x6b3c, 0x6b3d, 0x3840, 0x447b, 0x6b3e, 0x3757, 0x3f56, 0x6b41, 0x4624, 0x6b40, 0x3731, 0x6b3f, 0x4277, 0x352d, 0x6b42, 0x6b43, 0x3e59, 0x376d, 0x6b44, 0x4b2c, 0x405f, 0x3576, 0x4c75, 0x414a, 0x6b45, 0x3f47, 0x4370, 0x3e5a, 0x6b46, 0x6b49, 0x6b4a, 0x3a3e, 0x4242, 0x6b48, 0x3e5b, 0x493e, 0x6b47, 0x3b6c, 0x3153, 0x6b4e, 0x3758, 0x3b6e, 0x3b6d, 0x4f4d, 0x6b4d, 0x6b4c, 0x4127, 0x354d, 0x4f43, 0x333a, 0x3e5c, 0x6b4b, 0x6b50, 0x6b51, 0x6b4f, 0x3858, 0x4d40, 0x3b6f, 0x4727, 0x6b54, 0x4040, 0x4342, 0x4d36, 0x6b57, 0x386c, 0x403f, 0x6b53, 0x6b58, 0x386d, 0x6b55, 0x6b56, 0x6b52, 0x4062, 0x4649, 0x432f, 0x325d, 0x4870, 0x3543, 0x4434, 0x6b5b, 0x6b59, 0x434c, 0x4041, 0x3452, 0x6b5a, 0x3f5b, 0x4e4a, 0x4f40, 0x6b5c, 0x6b67, 0x4435, 0x6b66, 0x6b63, 0x6b6b, 0x6b64, 0x6b60, 0x447c, 0x6b5f, 0x6b5d, 0x4d21, 0x3b70, 0x6b61, 0x6b5e, 0x6b65, 0x3d74, 0x3841, 0x427a, 0x4b45, 0x315a, 0x3062, 0x4625, 0x6b69, 0x6b68, 0x4666, 0x6b6d, 0x6b62, 0x6b6c, 0x6b6e, 0x382c, 0x6b6a, 0x3956, 0x3c55, 0x6b6f, 0x4d58, 0x6b72, 0x6b75, 0x6b73, 0x4935, 0x6b70, 0x3660, 0x6b74, 0x6b76, 0x6b7a, 0x6b77, 0x6b79, 0x6b78, 0x6b7b, 0x3c31, 0x6b7d, 0x6b7c, 0x4968, 0x6c21, 0x3759, 0x6b7e, 0x6c22, 0x6c23, 0x3544, 0x6641, 0x3e79, 0x6c24, 0x386e, 0x6c25, 0x6c26, 0x3b3e, 0x5a4e, 0x6c27, 0x6c28, 0x3d32, 0x6c29, 0x6c2a, 0x6c2b, 0x6c2c, 0x6c2d, 0x432b, 0x6c2e, 0x6c30, 0x6c2f, 0x4626, 0x6c31, 0x4b2d, 0x6c32, 0x6c33, 0x6c34, 0x6c35, 0x465a, 0x3e5d, 0x6c36, 0x396b, 0x502e, 0x6c37, 0x6c38, 0x493f, 0x6c39, 0x6c41, 0x6c3a, 0x6c3c, 0x6c3b, 0x6c3d, 0x4b46, 0x6c3e, 0x6c3f, 0x6c40, 0x6c42, 0x332d, 0x4467, 0x4969, 0x3a62, 0x3957, 0x494f, 0x325f, 0x484e, 0x6c45, 0x3453, 0x4055, 0x6c44, 0x6c49, 0x4379, 0x4c63, 0x6c47, 0x6c48, 0x352e, 0x6c4a, 0x4763, 0x425f, 0x4871, 0x453d, 0x6c46, 0x4b47, 0x326c, 0x6c4c, 0x4f28, 0x4442, 0x4f45, 0x3b71, 0x6c4b, 0x4231, 0x6c5c, 0x4128, 0x4678, 0x4950, 0x6c4f, 0x3b3f, 0x3b72, 0x3e5e, 0x4765, 0x382d, 0x6c4e, 0x6c4d, 0x496a, 0x3c41, 0x4552, 0x6c51, 0x6c52, 0x3958, 0x6c50, 0x6c53, 0x6c54, 0x6c56, 0x4223, 0x6c55, 0x3466, 0x6c58, 0x6c57, 0x6c59, 0x6c5b, 0x6c5d, 0x6c5e, 0x4056, 0x3c4f, 0x6c5f, 0x3352, 0x6c60, 0x4176, 0x6c61, 0x6c62, 0x496b, 0x352f, 0x6c63, 0x4436, 0x315b, 0x6c64, 0x3c71, 0x3f76, 0x422d, 0x6c67, 0x6c66, 0x6c65, 0x6c6d, 0x6c6b, 0x6c68, 0x6c6a, 0x6c69, 0x6c6c, 0x3577, 0x6c70, 0x4057, 0x6c71, 0x3859, 0x6c6e, 0x6c6f, 0x4f29, 0x4437, 0x4129, 0x6c72, 0x6c75, 0x6c73, 0x6c74, 0x4d59, 0x4627, 0x6c78, 0x6c76, 0x6c77, 0x6c79, 0x6d29, 0x6c7c, 0x6c7d, 0x6c7b, 0x6c7a, 0x447d, 0x6d21, 0x6d25, 0x6d22, 0x6c7e, 0x6d23, 0x6d24, 0x6d2b, 0x6d26, 0x4058, 0x6d28, 0x6d2a, 0x6d27, 0x6d2d, 0x3d33, 0x6d2c, 0x6d2e, 0x6d2f, 0x6d32, 0x6d31, 0x6d30, 0x6d34, 0x6d33, 0x4c76, 0x6d36, 0x6d35, 0x6d37, 0x6d38, 0x6d3a, 0x6d39, 0x3f48, 0x6d3b, 0x366d, 0x6d3c, 0x6d3e, 0x6d3f, 0x6d40, 0x6d3d, 0x6d41, 0x3c56, 0x6d42, 0x3530, 0x3733, 0x382e, 0x6d43, 0x4670, 0x453e, 0x6d44, 0x6d47, 0x3c34, 0x6d46, 0x6d45, 0x375a, 0x6d48, 0x3353, 0x6d4a, 0x3a5c, 0x6d49, 0x6d52, 0x6d4c, 0x6d4e, 0x4a65, 0x6d4b, 0x6d4d, 0x6d51, 0x6d4f, 0x3531, 0x6d50, 0x6d53, 0x475a, 0x4e58, 0x3d34, 0x6d54, 0x4d22, 0x6d56, 0x6d55, 0x6d59, 0x4d41, 0x6d58, 0x336d, 0x6d57, 0x6d5c, 0x6d5b, 0x6d5a, 0x4532, 0x6d5d, 0x6d5e, 0x6d5f, 0x396c, 0x3725, 0x6d60, 0x6d61, 0x6d62, 0x3f49, 0x6d63, 0x3c2d, 0x6d64, 0x6d65, 0x5221, 0x517e, 0x6d66, 0x6570, 0x6d67, 0x4324, 0x3f2b, 0x4740, 0x6d68, 0x4a55, 0x4454, 0x397e, 0x4329, 0x312a, 0x4b78, 0x3f57, 0x375e, 0x3661, 0x4a56, 0x6d69, 0x6d6b, 0x6d6a, 0x3260, 0x4676, 0x6d6c, 0x4777, 0x4533, 0x6d6d, 0x3d52, 0x6d6f, 0x4c42, 0x6d7e, 0x6d71, 0x6d72, 0x4449, 0x4260, 0x4177, 0x4628, 0x6d70, 0x3555, 0x6d79, 0x6d76, 0x6e25, 0x4629, 0x4360, 0x6d73, 0x447e, 0x4553, 0x6d74, 0x6d78, 0x3f60, 0x4767, 0x444c, 0x4042, 0x6d77, 0x422e, 0x4224, 0x6d75, 0x3029, 0x4f22, 0x6d7a, 0x4261, 0x3d35, 0x3f4a, 0x6d7c, 0x6d7b, 0x306f, 0x6d7d, 0x492f, 0x6e27, 0x465b, 0x3f6b, 0x4359, 0x3678, 0x6e26, 0x4d37, 0x313f, 0x4a57, 0x3261, 0x6e21, 0x6e22, 0x6e23, 0x6e24, 0x463b, 0x4323, 0x3063, 0x6e28, 0x6e29, 0x7423, 0x423d, 0x6e2a, 0x3173, 0x414c, 0x382f, 0x4d5a, 0x6e2b, 0x452c, 0x4178, 0x3c57, 0x6e2c, 0x6e2f, 0x3d65, 0x6e2d, 0x412b, 0x412a, 0x3064, 0x4e4b, 0x6e31, 0x4872, 0x6e33, 0x6e32, 0x6e30, 0x6364, 0x3454, 0x6d6e, 0x6e35, 0x6e34, 0x6e36, 0x4d38, 0x4661, 0x4b2e, 0x6e37, 0x3c59, 0x6e38, 0x6e39, 0x6e3a, 0x4521, 0x306a, 0x3959, 0x4f3a, 0x6e3e, 0x3734, 0x6e3b, 0x6e3c, 0x4974, 0x3354, 0x4d39, 0x363f, 0x4554, 0x6e3f, 0x6e40, 0x6e41, 0x4522, 0x6e43, 0x6e42, 0x4653, 0x6e44, 0x3d36, 0x3c60, 0x475b, 0x4371, 0x3c72, 0x3f6c, 0x6e45, 0x6e46, 0x3f5d, 0x6e47, 0x6e48, 0x6e49, 0x4d6f, 0x3d37, 0x6e4b, 0x6e4a, 0x395a, 0x3973, 0x3b40, 0x6e4e, 0x3d66, 0x6e4d, 0x6e4c, 0x4269, 0x386f, 0x4043, 0x4830, 0x3d39, 0x6e4f, 0x3e5f, 0x6e52, 0x6e50, 0x6e51, 0x6e54, 0x6e53, 0x3e7a, 0x6e55, 0x6e56, 0x6e57, 0x4850, 0x3a53, 0x3c61, 0x6e58, 0x6e59, 0x4e24, 0x3d45, 0x4c6e, 0x4e4c, 0x6e5a, 0x3662, 0x6e5b, 0x4523, 0x6e5e, 0x3378, 0x3f4b, 0x6e5c, 0x6e5d, 0x4460, 0x4b55, 0x367c, 0x6e60, 0x6e61, 0x6e5f, 0x6e63, 0x465f, 0x3343, 0x6e67, 0x6e64, 0x6e66, 0x6e62, 0x6f4f, 0x6e65, 0x4e6b, 0x385a, 0x6e6f, 0x4534, 0x6e6a, 0x6e6d, 0x6e6b, 0x6e70, 0x6e71, 0x6e69, 0x6e76, 0x3174, 0x6e68, 0x482d, 0x6e6c, 0x3e60, 0x395b, 0x4b48, 0x3664, 0x3d46, 0x463c, 0x412d, 0x6e74, 0x6e6e, 0x6e73, 0x4c43, 0x4438, 0x6e75, 0x6e72, 0x412c, 0x6e79, 0x6e78, 0x6e77, 0x4b2f, 0x3d7b, 0x6e7a, 0x4a5f, 0x3154, 0x4946, 0x4372, 0x3578, 0x6e7c, 0x395d, 0x3b2c, 0x6e7b, 0x3f6d, 0x3f6e, 0x6f21, 0x6f23, 0x3e7b, 0x6f22, 0x6f24, 0x3653, 0x4945, 0x3c62, 0x4f23, 0x6e7e, 0x3a78, 0x4f3f, 0x6f26, 0x6f25, 0x6f27, 0x6e7d, 0x4669, 0x4555, 0x4457, 0x6f2c, 0x4343, 0x6f28, 0x6f29, 0x372d, 0x6f2b, 0x3830, 0x6f2a, 0x3e61, 0x3379, 0x6f30, 0x3a3f, 0x4179, 0x444a, 0x333b, 0x6f2e, 0x6f2f, 0x4443, 0x6f2d, 0x6f31, 0x6f37, 0x6f3a, 0x6f39, 0x452d, 0x6f32, 0x6f33, 0x6f36, 0x6f38, 0x3640, 0x6f3b, 0x6f35, 0x6f34, 0x6f3f, 0x6f40, 0x6f41, 0x6f3e, 0x6f3d, 0x3e62, 0x462a, 0x6f3c, 0x6f45, 0x6f43, 0x6f44, 0x6f42, 0x4278, 0x6f46, 0x6f47, 0x6f49, 0x3455, 0x6f48, 0x4c7a, 0x6f54, 0x6f4a, 0x6f4d, 0x6f4b, 0x6f4c, 0x6f4e, 0x6f50, 0x6f51, 0x6f52, 0x6f55, 0x6f53, 0x6f56, 0x6f58, 0x6f57, 0x4439, 0x4c67, 0x6f59, 0x412e, 0x6f5a, 0x4a44, 0x6f5b, 0x332b, 0x313c, 0x3457, 0x3456, 0x6f5c, 0x6f5d, 0x6f5e, 0x6f5f, 0x6f60, 0x3458, 0x3355, 0x395e, 0x4836, 0x6f62, 0x6f61, 0x6f63, 0x315c, 0x6f66, 0x6f65, 0x6f64, 0x6f67, 0x6f6a, 0x3047, 0x6f68, 0x6f6c, 0x6f6b, 0x6f6e, 0x6f6d, 0x6f6f, 0x462e, 0x6f70, 0x6f71, 0x6f73, 0x6f72, 0x496c, 0x6f74, 0x6f75, 0x3a65, 0x6f76, 0x6f77, 0x4b49, 0x414b, 0x3024, 0x424b, 0x6f78, 0x496d, 0x6f7b, 0x6f79, 0x395f, 0x6f7a, 0x3842, 0x4a45, 0x6f7d, 0x7021, 0x6f7e, 0x7022, 0x3121, 0x3f58, 0x3d7c, 0x3459, 0x7023, 0x4766, 0x7025, 0x3122, 0x7024, 0x4444, 0x4e4d, 0x462b, 0x6f7c, 0x4e26, 0x3831, 0x4d5b, 0x3679, 0x4e34, 0x3728, 0x4262, 0x6721, 0x7026, 0x332c, 0x3f6f, 0x3356, 0x7028, 0x7029, 0x7027, 0x3764, 0x3a5d, 0x3e63, 0x3123, 0x4e59, 0x702b, 0x6e2e, 0x702a, 0x702e, 0x702c, 0x702d, 0x702f, 0x7030, 0x4e6c, 0x7031, 0x7032, 0x4049, 0x483b, 0x3f7d, 0x3467, 0x4d3a, 0x326d, 0x3d38, 0x385b, 0x7035, 0x7034, 0x3b73, 0x7036, 0x7033, 0x3b28, 0x703a, 0x6a2d, 0x5256, 0x3f77, 0x7038, 0x4e25, 0x4671, 0x312b, 0x4063, 0x3c36, 0x4a37, 0x3140, 0x4e6d, 0x4d6b, 0x703b, 0x4545, 0x3c7b, 0x703c, 0x703d, 0x3f4c, 0x703e, 0x4e6e, 0x7039, 0x7040, 0x7042, 0x7041, 0x703f, 0x7043, 0x7044, 0x417a, 0x3262, 0x7045, 0x4c38, 0x7046, 0x7047, 0x4f2a, 0x5b31, 0x7048, 0x7049, 0x704a, 0x704e, 0x704b, 0x704c, 0x704d, 0x704f, 0x4044, 0x4c77, 0x4045, 0x7050, 0x4873, 0x7051, 0x7353, 0x4c4c, 0x7052, 0x7053, 0x7054, 0x3357, 0x7056, 0x3f59, 0x7057, 0x3724, 0x7058, 0x705c, 0x705a, 0x705b, 0x3373, 0x7059, 0x705d, 0x705e, 0x3048, 0x705f, 0x7060, 0x3e64, 0x7061, 0x3547, 0x7064, 0x7063, 0x7062, 0x6b71, 0x4a5c, 0x7065, 0x7066, 0x7067, 0x7068, 0x7069, 0x706a, 0x345a, 0x706b, 0x706c, 0x4723, 0x706e, 0x323b, 0x7071, 0x7070, 0x3124, 0x3641, 0x4a47, 0x443a, 0x3a22, 0x3960, 0x3d67, 0x3f5c, 0x7073, 0x7072, 0x4d42, 0x3468, 0x4852, 0x465c, 0x3f7c, 0x4e4e, 0x375b, 0x7076, 0x7075, 0x4b4b, 0x462c, 0x3150, 0x7077, 0x7074, 0x4951, 0x4d6a, 0x7078, 0x7079, 0x707b, 0x426a, 0x335b, 0x335c, 0x707a, 0x3469, 0x3832, 0x346a, 0x453f, 0x4e60, 0x385c, 0x707c, 0x707d, 0x707e, 0x7121, 0x7123, 0x7122, 0x4977, 0x7124, 0x7125, 0x7126, 0x7127, 0x7129, 0x7128, 0x712a, 0x4874, 0x664c, 0x3f29, 0x3532, 0x712b, 0x712c, 0x522c, 0x5d3b, 0x4853, 0x307b, 0x303b, 0x3b74, 0x4b30, 0x3e7e, 0x712d, 0x4c5f, 0x712e, 0x4d5c, 0x3142, 0x3b41, 0x712f, 0x326e, 0x7130, 0x7131, 0x7133, 0x7134, 0x7136, 0x7132, 0x7135, 0x345b, 0x7137, 0x7138, 0x7139, 0x713a, 0x713b, 0x713d, 0x713c, 0x713f, 0x7142, 0x713e, 0x7140, 0x7141, 0x7143, 0x3642, 0x3c73, 0x7144, 0x7145, 0x3961, 0x7146, 0x333e, 0x474f, 0x7147, 0x7148, 0x435a, 0x466b, 0x7149, 0x477d, 0x424c, 0x3158, 0x366e, 0x366f, 0x4373, 0x714e, 0x3670, 0x326f, 0x714d, 0x714b, 0x714c, 0x714a, 0x7158, 0x714f, 0x7150, 0x7151, 0x7152, 0x7154, 0x7153, 0x3d59, 0x7155, 0x7157, 0x3533, 0x7156, 0x417b, 0x3833, 0x7159, 0x424d, 0x715a, 0x462d, 0x715b, 0x7160, 0x715e, 0x715d, 0x715f, 0x715c, 0x7162, 0x7161, 0x7164, 0x3643, 0x7163, 0x7165, 0x7166, 0x7168, 0x7167, 0x7169, 0x716b, 0x716a, 0x397c, 0x716c, 0x716d, 0x333c, 0x716e, 0x716f, 0x3f71, 0x7170, 0x7171, 0x7172, 0x7173, 0x3962, 0x7174, 0x7175, 0x7176, 0x7177, 0x7178, 0x4831, 0x717a, 0x4926, 0x717b, 0x7179, 0x717d, 0x717c, 0x717e, 0x7221, 0x7222, 0x7223, 0x7224, 0x7225, 0x7226, 0x7227, 0x7228, 0x7229, 0x722a, 0x722b, 0x722c, 0x722d, 0x722e, 0x5d35, 0x722f, 0x6478, 0x3534, 0x3321, 0x3a32, 0x7231, 0x7230, 0x4c25, 0x7233, 0x7234, 0x7232, 0x7235, 0x4b62, 0x7236, 0x357b, 0x4f25, 0x7237, 0x7239, 0x303e, 0x723a, 0x4a2b, 0x7238, 0x723b, 0x723c, 0x723d, 0x723e, 0x723f, 0x4b6e, 0x3b2d, 0x3a7a, 0x412f, 0x7240, 0x7243, 0x7241, 0x7244, 0x3871, 0x7242, 0x7245, 0x7246, 0x7247, 0x724b, 0x3b2a, 0x4264, 0x724c, 0x7249, 0x7248, 0x724a, 0x375f, 0x7250, 0x724f, 0x724e, 0x3033, 0x725a, 0x7256, 0x7257, 0x7253, 0x7259, 0x7255, 0x3362, 0x4f4c, 0x7258, 0x7254, 0x7252, 0x7251, 0x725c, 0x725f, 0x725e, 0x725d, 0x4949, 0x725b, 0x3073, 0x7260, 0x7262, 0x336f, 0x724d, 0x3137, 0x7264, 0x7263, 0x7261, 0x432d, 0x4b70, 0x4e5a, 0x7265, 0x7266, 0x7267, 0x7268, 0x7269, 0x443b, 0x726a, 0x4837, 0x726f, 0x726b, 0x726c, 0x4b31, 0x4c44, 0x4650, 0x7270, 0x7271, 0x463e, 0x726e, 0x726d, 0x322a, 0x7279, 0x7278, 0x3175, 0x7276, 0x7275, 0x7273, 0x337b, 0x7272, 0x3c32, 0x3229, 0x3963, 0x727c, 0x727b, 0x727a, 0x7277, 0x727d, 0x727e, 0x7325, 0x7324, 0x7326, 0x312d, 0x7321, 0x7322, 0x3974, 0x4c39, 0x7323, 0x4b32, 0x732b, 0x7327, 0x732c, 0x7329, 0x7328, 0x375c, 0x732d, 0x732e, 0x732f, 0x732a, 0x7274, 0x7330, 0x4461, 0x7334, 0x7335, 0x7333, 0x7332, 0x7338, 0x7331, 0x7336, 0x7337, 0x733a, 0x7339, 0x733c, 0x733d, 0x733e, 0x4f49, 0x733b, 0x426b, 0x3a6d, 0x733f, 0x7340, 0x7341, 0x7342, 0x7343, 0x3834, 0x7344, 0x7345, 0x3c2f, 0x7346, 0x7347, 0x7348, 0x7349, 0x734c, 0x734a, 0x4f3c, 0x734b, 0x4e6f, 0x734d, 0x4e5b, 0x734e, 0x477e, 0x734f, 0x7351, 0x7352, 0x7350, 0x396d, 0x4c4d, 0x4b63, 0x5677, 0x5d60, 0x4b7b, 0x322b, 0x7354, 0x3550, 0x7355, 0x7356, 0x7357, 0x3975, 0x7358, 0x6054, 0x4c5b, 0x4263, 0x7359, 0x735b, 0x735a, 0x735c, 0x735d, 0x735e, 0x735f, 0x7360, 0x7361, 0x7362, 0x7363, 0x7364, 0x7365, 0x7366, 0x7367, 0x7368, 0x4524, 0x385d, 0x736a, 0x414d, 0x736b, 0x736c, 0x4921, 0x736d, 0x736e, 0x6337, 0x6c5a, 0x706d, 0x736f, 0x7370, 0x7372, 0x7373, 0x7374, 0x4e70, 0x7371, 0x7375, 0x7376, 0x7378, 0x7377, 0x737a, 0x737b, 0x7379, 0x4e36, 0x737c, 0x737d, 0x6354, 0x737e, 0x212a, 0x2174, 0x2170, 0x2173, 0x2175, 0x214a, 0x214b, 0x2176, 0x215c, 0x2124, 0x2125, 0x213f, 0x2330, 0x2331, 0x2332, 0x2333, 0x2334, 0x2335, 0x2336, 0x2337, 0x2338, 0x2339, 0x2127, 0x2128, 0x2163, 0x2161, 0x2164, 0x2129, 0x2177, 0x2341, 0x2342, 0x2343, 0x2344, 0x2345, 0x2346, 0x2347, 0x2348, 0x2349, 0x234a, 0x234b, 0x234c, 0x234d, 0x234e, 0x234f, 0x2350, 0x2351, 0x2352, 0x2353, 0x2354, 0x2355, 0x2356, 0x2357, 0x2358, 0x2359, 0x235a, 0x214e, 0x214f, 0x2130, 0x2132, 0x212e, 0x2361, 0x2362, 0x2363, 0x2364, 0x2365, 0x2366, 0x2367, 0x2368, 0x2369, 0x236a, 0x236b, 0x236c, 0x236d, 0x236e, 0x236f, 0x2370, 0x2371, 0x2372, 0x2373, 0x2374, 0x2375, 0x2376, 0x2377, 0x2378, 0x2379, 0x237a, 0x2150, 0x2143, 0x2151, 0x2131, 0x216f, }; static const Summary16 jisx0208_uni2indx_page00[16] = { /* 0x0000 */ { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x1000 }, { 1, 0x0000 }, { 1, 0x0000 }, { 1, 0x0000 }, { 1, 0x0000 }, { 1, 0x118c }, { 6, 0x0053 }, { 10, 0x0000 }, { 10, 0x0080 }, { 11, 0x0000 }, { 11, 0x0080 }, }; static const Summary16 jisx0208_uni2indx_page03[22] = { /* 0x0300 */ { 12, 0x0000 }, { 12, 0x0000 }, { 12, 0x0000 }, { 12, 0x0000 }, { 12, 0x0000 }, { 12, 0x0000 }, { 12, 0x0000 }, { 12, 0x0000 }, { 12, 0x0000 }, { 12, 0xfffe }, { 27, 0x03fb }, { 36, 0xfffe }, { 51, 0x03fb }, { 60, 0x0000 }, { 60, 0x0000 }, { 60, 0x0000 }, /* 0x0400 */ { 60, 0x0002 }, { 61, 0xffff }, { 77, 0xffff }, { 93, 0xffff }, { 109, 0xffff }, { 125, 0x0002 }, }; static const Summary16 jisx0208_uni2indx_page20[50] = { /* 0x2000 */ { 126, 0x0000 }, { 126, 0x3361 }, { 133, 0x0063 }, { 137, 0x080d }, { 141, 0x0000 }, { 141, 0x0000 }, { 141, 0x0000 }, { 141, 0x0000 }, { 141, 0x0000 }, { 141, 0x0000 }, { 141, 0x0000 }, { 141, 0x0000 }, { 141, 0x0000 }, { 141, 0x0000 }, { 141, 0x0000 }, { 141, 0x0000 }, /* 0x2100 */ { 141, 0x0008 }, { 142, 0x0000 }, { 142, 0x0800 }, { 143, 0x0000 }, { 143, 0x0000 }, { 143, 0x0000 }, { 143, 0x0000 }, { 143, 0x0000 }, { 143, 0x0000 }, { 143, 0x000f }, { 147, 0x0000 }, { 147, 0x0000 }, { 147, 0x0000 }, { 147, 0x0014 }, { 149, 0x0000 }, { 149, 0x0000 }, /* 0x2200 */ { 149, 0x098d }, { 155, 0x6404 }, { 159, 0x1f81 }, { 166, 0x2030 }, { 169, 0x0000 }, { 169, 0x0004 }, { 170, 0x0cc3 }, { 176, 0x0000 }, { 176, 0x00cc }, { 180, 0x0000 }, { 180, 0x0020 }, { 181, 0x0000 }, { 181, 0x0000 }, { 181, 0x0000 }, { 181, 0x0000 }, { 181, 0x0000 }, /* 0x2300 */ { 181, 0x0000 }, { 181, 0x0004 }, }; static const Summary16 jisx0208_uni2indx_page25[23] = { /* 0x2500 */ { 182, 0x900f }, { 188, 0x3999 }, { 196, 0x9939 }, { 204, 0x9999 }, { 212, 0x0804 }, { 214, 0x0000 }, { 214, 0x0000 }, { 214, 0x0000 }, { 214, 0x0000 }, { 214, 0x0000 }, { 214, 0x0003 }, { 216, 0x300c }, { 220, 0xc8c0 }, { 225, 0x0000 }, { 225, 0x8000 }, { 226, 0x0000 }, /* 0x2600 */ { 226, 0x0060 }, { 228, 0x0000 }, { 228, 0x0000 }, { 228, 0x0000 }, { 228, 0x0005 }, { 230, 0x0000 }, { 230, 0xa400 }, }; static const Summary16 jisx0208_uni2indx_page30[16] = { /* 0x3000 */ { 233, 0xffef }, { 248, 0x103f }, { 255, 0x0000 }, { 255, 0x0000 }, { 255, 0xfffe }, { 270, 0xffff }, { 286, 0xffff }, { 302, 0xffff }, { 318, 0xffff }, { 334, 0x780f }, { 342, 0xfffe }, { 357, 0xffff }, { 373, 0xffff }, { 389, 0xffff }, { 405, 0xffff }, { 421, 0x787f }, }; static const Summary16 jisx0208_uni2indx_page4e[1307] = { /* 0x4e00 */ { 432, 0x6f8b }, { 442, 0x43f3 }, { 451, 0x2442 }, { 455, 0x9b46 }, { 463, 0xe82c }, { 470, 0xe3e0 }, { 478, 0x0004 }, { 479, 0x400a }, { 482, 0x5f65 }, { 492, 0xdb36 }, { 502, 0x7977 }, { 513, 0x0449 }, { 517, 0xecd7 }, { 528, 0xe3f0 }, { 537, 0x6038 }, { 542, 0x08c5 }, /* 0x4f00 */ { 547, 0xe602 }, { 553, 0x3403 }, { 558, 0x8000 }, { 559, 0x3551 }, { 566, 0xe0c8 }, { 572, 0x7eab }, { 583, 0x8200 }, { 585, 0x9869 }, { 592, 0xa948 }, { 598, 0x2942 }, { 603, 0xe803 }, { 609, 0x8060 }, { 612, 0x441c }, { 617, 0xad93 }, { 626, 0xc03a }, { 632, 0x4568 }, /* 0x5000 */ { 638, 0xaa60 }, { 644, 0x8656 }, { 651, 0x3f7a }, { 662, 0x0240 }, { 664, 0x8388 }, { 669, 0x1461 }, { 674, 0x1020 }, { 676, 0x2174 }, { 682, 0x2021 }, { 685, 0x0702 }, { 689, 0x3000 }, { 691, 0x40bc }, { 697, 0xa624 }, { 703, 0x4462 }, { 708, 0x60a8 }, { 713, 0x0a20 }, /* 0x5100 */ { 716, 0x0217 }, { 721, 0x8574 }, { 728, 0x0402 }, { 730, 0x9c84 }, { 736, 0x7bfb }, { 749, 0x1415 }, { 754, 0x7f24 }, { 763, 0x11e2 }, { 769, 0xb665 }, { 778, 0x02ef }, { 786, 0x1f75 }, { 796, 0x20ff }, { 805, 0x3a70 }, { 812, 0x3840 }, { 816, 0x26c3 }, { 823, 0x6763 }, /* 0x5200 */ { 832, 0x4dd9 }, { 841, 0x2092 }, { 845, 0x46b0 }, { 851, 0x0fc9 }, { 859, 0xbc98 }, { 867, 0x4850 }, { 871, 0x8638 }, { 877, 0xa03f }, { 885, 0x2388 }, { 890, 0x8816 }, { 895, 0x3e09 }, { 902, 0x5232 }, { 908, 0x22aa }, { 914, 0xe3a4 }, { 922, 0x00dd }, { 928, 0xc72c }, /* 0x5300 */ { 936, 0xa166 }, { 943, 0x26e1 }, { 950, 0x840b }, { 955, 0x8f0a }, { 962, 0x27eb }, { 972, 0x559e }, { 981, 0xc241 }, { 986, 0x89bb }, { 995, 0x0014 }, { 997, 0x8540 }, { 1001, 0x6361 }, { 1008, 0x0849 }, { 1012, 0x7f0c }, { 1021, 0x8ad0 }, { 1027, 0xff3e }, { 1040, 0x05cf }, /* 0x5400 */ { 1048, 0xff1a }, { 1059, 0xa803 }, { 1064, 0x7a41 }, { 1071, 0x7b40 }, { 1078, 0x4745 }, { 1085, 0x8002 }, { 1087, 0x0500 }, { 1089, 0x38eb }, { 1098, 0xd851 }, { 1105, 0x0005 }, { 1107, 0x9934 }, { 1114, 0x710c }, { 1120, 0x0397 }, { 1127, 0x0100 }, { 1128, 0x6366 }, { 1136, 0x2404 }, /* 0x5500 */ { 1139, 0x80d0 }, { 1143, 0x0051 }, { 1146, 0xc000 }, { 1148, 0x430a }, { 1153, 0x9071 }, { 1159, 0x30c8 }, { 1164, 0x0008 }, { 1165, 0x5800 }, { 1168, 0x0e99 }, { 1175, 0xf700 }, { 1182, 0x5f80 }, { 1189, 0x0041 }, { 1191, 0x00b0 }, { 1194, 0x9410 }, { 1198, 0x0018 }, { 1200, 0x6280 }, /* 0x5600 */ { 1204, 0x0240 }, { 1206, 0x09d0 }, { 1211, 0x8200 }, { 1213, 0x0156 }, { 1218, 0x5004 }, { 1221, 0x0801 }, { 1223, 0x1d10 }, { 1228, 0x0510 }, { 1231, 0x84c1 }, { 1236, 0x0010 }, { 1237, 0x4025 }, { 1241, 0x1050 }, { 1244, 0x410f }, { 1250, 0x4d8a }, { 1257, 0x4009 }, { 1260, 0xa60d }, /* 0x5700 */ { 1267, 0xab19 }, { 1275, 0x914c }, { 1281, 0x21c0 }, { 1285, 0x0981 }, { 1289, 0xc485 }, { 1295, 0x0003 }, { 1297, 0x0652 }, { 1302, 0x8000 }, { 1303, 0x0b04 }, { 1307, 0x0008 }, { 1308, 0x041d }, { 1313, 0x0009 }, { 1315, 0x4849 }, { 1320, 0x905c }, { 1326, 0x0009 }, { 1328, 0x1690 }, /* 0x5800 */ { 1333, 0x0c65 }, { 1339, 0x2220 }, { 1342, 0x8412 }, { 1346, 0x2433 }, { 1352, 0x0c03 }, { 1356, 0x4796 }, { 1364, 0x0a04 }, { 1367, 0x4225 }, { 1372, 0x0028 }, { 1374, 0x9088 }, { 1378, 0x4900 }, { 1381, 0x4f08 }, { 1387, 0x14a2 }, { 1392, 0xd3aa }, { 1401, 0xd830 }, { 1407, 0x3e87 }, /* 0x5900 */ { 1416, 0x8604 }, { 1420, 0x1f61 }, { 1428, 0x7ea4 }, { 1437, 0x4186 }, { 1442, 0xc390 }, { 1448, 0x05b3 }, { 1455, 0x57a5 }, { 1464, 0x2118 }, { 1468, 0x241e }, { 1474, 0x2a48 }, { 1479, 0x1128 }, { 1483, 0x4a04 }, { 1487, 0x0a40 }, { 1490, 0x161b }, { 1497, 0x0d60 }, { 1502, 0x8840 }, /* 0x5a00 */ { 1505, 0x020a }, { 1508, 0x9502 }, { 1513, 0x8221 }, { 1517, 0x1060 }, { 1520, 0x0243 }, { 1524, 0x0400 }, { 1525, 0x1444 }, { 1529, 0x8000 }, { 1530, 0x0000 }, { 1530, 0x0c04 }, { 1533, 0x0000 }, { 1533, 0x7000 }, { 1536, 0x1a06 }, { 1541, 0x00c1 }, { 1544, 0x024a }, { 1548, 0x0c00 }, /* 0x5b00 */ { 1550, 0x1a00 }, { 1553, 0x0040 }, { 1554, 0x1404 }, { 1557, 0x4045 }, { 1561, 0x0029 }, { 1564, 0xbdb3 }, { 1575, 0x0a78 }, { 1581, 0x052b }, { 1587, 0xbba9 }, { 1597, 0xbfa0 }, { 1606, 0x407c }, { 1612, 0x8379 }, { 1620, 0x12fc }, { 1628, 0xe81d }, { 1636, 0x4bf6 }, { 1646, 0xc569 }, /* 0x5c00 */ { 1654, 0xeff6 }, { 1667, 0x044a }, { 1671, 0x2115 }, { 1676, 0xff02 }, { 1685, 0xed63 }, { 1695, 0x402b }, { 1700, 0xd033 }, { 1707, 0x0242 }, { 1710, 0x1000 }, { 1711, 0x0013 }, { 1714, 0x1b02 }, { 1719, 0x59ca }, { 1727, 0x00a0 }, { 1729, 0x0200 }, { 1730, 0xa703 }, { 1737, 0x2c41 }, /* 0x5d00 */ { 1742, 0x4880 }, { 1745, 0x8ff2 }, { 1755, 0x0204 }, { 1757, 0x0000 }, { 1757, 0x5800 }, { 1760, 0x1005 }, { 1763, 0x9200 }, { 1766, 0x0048 }, { 1768, 0x1894 }, { 1773, 0x2001 }, { 1775, 0x5004 }, { 1778, 0x3480 }, { 1782, 0x3200 }, { 1785, 0x684c }, { 1791, 0x49ea }, { 1799, 0x68be }, /* 0x5e00 */ { 1808, 0x184c }, { 1813, 0x2e42 }, { 1819, 0xa820 }, { 1823, 0x21c9 }, { 1829, 0x50b9 }, { 1836, 0x80b0 }, { 1840, 0x001e }, { 1844, 0xff7c }, { 1857, 0x849a }, { 1863, 0x14e0 }, { 1868, 0x28c1 }, { 1873, 0x01e0 }, { 1877, 0x870e }, { 1884, 0xac49 }, { 1891, 0x130f }, { 1898, 0xdddb }, /* 0x5f00 */ { 1910, 0xbe1a }, { 1919, 0x89fb }, { 1929, 0xa2e0 }, { 1935, 0x51a2 }, { 1941, 0x5502 }, { 1946, 0x32ca }, { 1953, 0x3e46 }, { 1961, 0x928b }, { 1968, 0x1dbf }, { 1979, 0x438f }, { 1987, 0x6703 }, { 1994, 0x3218 }, { 1999, 0x3028 }, { 2003, 0x33c0 }, { 2009, 0x0811 }, { 2012, 0xa923 }, /* 0x6000 */ { 2019, 0xc000 }, { 2021, 0x3a65 }, { 2029, 0x8fe3 }, { 2039, 0x0402 }, { 2041, 0x2c4e }, { 2048, 0x8625 }, { 2054, 0xbf3d }, { 2066, 0x00a1 }, { 2069, 0x3a1a }, { 2076, 0x8cd4 }, { 2083, 0x06c9 }, { 2089, 0x317c }, { 2097, 0x00e0 }, { 2100, 0x950a }, { 2106, 0x018b }, { 2111, 0x0edb }, /* 0x6100 */ { 2120, 0xe34b }, { 2129, 0x8c20 }, { 2133, 0x1182 }, { 2137, 0xf010 }, { 2142, 0x7d94 }, { 2151, 0xa728 }, { 2158, 0xc9ac }, { 2166, 0x40fb }, { 2174, 0x4484 }, { 2178, 0x0653 }, { 2184, 0x5a90 }, { 2190, 0x4444 }, { 2194, 0x3fc8 }, { 2203, 0x0001 }, { 2204, 0x0048 }, { 2206, 0xf5d4 }, /* 0x6200 */ { 2216, 0x7701 }, { 2223, 0xec57 }, { 2233, 0xc442 }, { 2238, 0x891d }, { 2245, 0x6b83 }, { 2253, 0x4928 }, { 2258, 0x4109 }, { 2262, 0xd242 }, { 2268, 0x061d }, { 2274, 0x59fe }, { 2285, 0x1800 }, { 2287, 0x3a22 }, { 2293, 0xb7e4 }, { 2303, 0x3b9f }, { 2314, 0xf003 }, { 2320, 0xc0ea }, /* 0x6300 */ { 2327, 0x1386 }, { 2333, 0x8202 }, { 2336, 0x8980 }, { 2340, 0xe400 }, { 2344, 0xb200 }, { 2348, 0x10a1 }, { 2352, 0x4b80 }, { 2357, 0x0cc4 }, { 2362, 0xd309 }, { 2369, 0x8944 }, { 2374, 0x1faf }, { 2385, 0x4834 }, { 2390, 0x8259 }, { 2396, 0x0c45 }, { 2401, 0x420a }, { 2405, 0x0450 }, /* 0x6400 */ { 2408, 0xa040 }, { 2411, 0x10c8 }, { 2415, 0x3140 }, { 2419, 0x4450 }, { 2423, 0x4004 }, { 2425, 0x0100 }, { 2426, 0x8280 }, { 2429, 0x0540 }, { 2432, 0x0108 }, { 2434, 0x442c }, { 2439, 0x6a30 }, { 2445, 0x1a05 }, { 2450, 0x20a6 }, { 2455, 0x0514 }, { 2459, 0x90cf }, { 2467, 0x6456 }, /* 0x6500 */ { 2474, 0x0021 }, { 2476, 0x3100 }, { 2479, 0x9c18 }, { 2485, 0xcbf0 }, { 2494, 0xa120 }, { 2498, 0x63e2 }, { 2506, 0x104c }, { 2510, 0x01b5 }, { 2516, 0x538c }, { 2523, 0x9a83 }, { 2530, 0xb8b2 }, { 2538, 0x3281 }, { 2543, 0x987a }, { 2551, 0x0a84 }, { 2555, 0x33e7 }, { 2565, 0x0c02 }, /* 0x6600 */ { 2568, 0xd4cc }, { 2576, 0x9018 }, { 2580, 0xa1a1 }, { 2586, 0x9070 }, { 2591, 0x8a1e }, { 2598, 0xe004 }, { 2602, 0xc3d4 }, { 2610, 0x0451 }, { 2614, 0x439a }, { 2621, 0x21c2 }, { 2626, 0x4844 }, { 2630, 0x5310 }, { 2635, 0x0292 }, { 2639, 0x3640 }, { 2644, 0x0241 }, { 2647, 0xf3bd }, /* 0x6700 */ { 2659, 0xab09 }, { 2666, 0xe8f0 }, { 2674, 0x7dc0 }, { 2682, 0xa5d2 }, { 2690, 0xc242 }, { 2695, 0xd24b }, { 2703, 0xa43f }, { 2712, 0xd0af }, { 2721, 0x1aa0 }, { 2726, 0x34a1 }, { 2732, 0x8247 }, { 2738, 0x03d8 }, { 2744, 0xc452 }, { 2750, 0x651b }, { 2758, 0xd294 }, { 2765, 0xc83a }, /* 0x6800 */ { 2772, 0x001c }, { 2775, 0x40c8 }, { 2779, 0x0e06 }, { 2784, 0x3314 }, { 2790, 0x614f }, { 2798, 0xb21b }, { 2806, 0x0088 }, { 2808, 0xc0d0 }, { 2813, 0xa02a }, { 2818, 0xa898 }, { 2824, 0xa1c5 }, { 2831, 0x166b }, { 2839, 0x2e50 }, { 2845, 0x85b4 }, { 2852, 0xc08b }, { 2858, 0x0604 }, /* 0x6900 */ { 2861, 0xf933 }, { 2871, 0x1e04 }, { 2876, 0x056e }, { 2883, 0xa251 }, { 2889, 0x0400 }, { 2890, 0x7638 }, { 2898, 0xec07 }, { 2906, 0x73b8 }, { 2915, 0x4406 }, { 2919, 0x1832 }, { 2924, 0x4081 }, { 2927, 0xc816 }, { 2933, 0x7c8a }, { 2941, 0x6309 }, { 2947, 0x2980 }, { 2951, 0xaa04 }, /* 0x6a00 */ { 2956, 0x1c24 }, { 2961, 0xca9c }, { 2969, 0x4e0e }, { 2976, 0x2760 }, { 2982, 0x0990 }, { 2986, 0x8300 }, { 2989, 0x0046 }, { 2992, 0x8104 }, { 2995, 0x6011 }, { 2999, 0x1081 }, { 3002, 0x540d }, { 3008, 0x0908 }, { 3011, 0x000e }, { 3014, 0xcc0a }, { 3020, 0x0500 }, { 3022, 0x0c00 }, /* 0x6b00 */ { 3024, 0x0430 }, { 3027, 0xa044 }, { 3031, 0x008b }, { 3035, 0x6784 }, { 3042, 0x5288 }, { 3047, 0x8a19 }, { 3053, 0x865e }, { 3061, 0x8b18 }, { 3067, 0x2e59 }, { 3075, 0x4160 }, { 3079, 0x8c10 }, { 3083, 0x9cbe }, { 3093, 0x6861 }, { 3099, 0x891c }, { 3105, 0x9800 }, { 3108, 0x0008 }, /* 0x6c00 */ { 3109, 0x8100 }, { 3111, 0x089a }, { 3116, 0x0018 }, { 3118, 0x4190 }, { 3122, 0x4007 }, { 3126, 0xe4a1 }, { 3133, 0x0505 }, { 3137, 0x640d }, { 3143, 0x310e }, { 3149, 0x0e4d }, { 3156, 0x4806 }, { 3160, 0xff0a }, { 3170, 0x1632 }, { 3176, 0x2aa8 }, { 3182, 0x852e }, { 3189, 0x000b }, /* 0x6d00 */ { 3192, 0x1800 }, { 3194, 0xca84 }, { 3200, 0x0e20 }, { 3204, 0x696c }, { 3212, 0x0032 }, { 3215, 0x1600 }, { 3218, 0x5658 }, { 3225, 0x0390 }, { 3229, 0x5120 }, { 3233, 0x1a28 }, { 3238, 0x8000 }, { 3239, 0x1124 }, { 3243, 0x18e1 }, { 3249, 0x4326 }, { 3255, 0x5d52 }, { 3263, 0x0eaa }, /* 0x6e00 */ { 3270, 0x0fa0 }, { 3276, 0xae28 }, { 3283, 0xfa7b }, { 3295, 0x4500 }, { 3298, 0x6408 }, { 3302, 0x8940 }, { 3306, 0xc880 }, { 3310, 0xc044 }, { 3314, 0x9005 }, { 3318, 0xb141 }, { 3324, 0x8424 }, { 3328, 0x24c4 }, { 3333, 0x1a34 }, { 3339, 0x603a }, { 3345, 0x9000 }, { 3347, 0xc194 }, /* 0x6f00 */ { 3353, 0x8246 }, { 3358, 0x003a }, { 3362, 0x180d }, { 3367, 0xc106 }, { 3372, 0x0022 }, { 3374, 0x9910 }, { 3379, 0xe050 }, { 3384, 0x1511 }, { 3389, 0x4057 }, { 3395, 0x0082 }, { 3397, 0x041a }, { 3401, 0x020a }, { 3404, 0x004f }, { 3409, 0x8930 }, { 3414, 0xd813 }, { 3421, 0x444a }, /* 0x7000 */ { 3426, 0x8a02 }, { 3430, 0xed22 }, { 3438, 0x10c0 }, { 3441, 0x4005 }, { 3444, 0x1000 }, { 3445, 0x0102 }, { 3447, 0x8808 }, { 3450, 0x3101 }, { 3454, 0x4600 }, { 3457, 0x0204 }, { 3459, 0xf000 }, { 3463, 0x0708 }, { 3467, 0x8900 }, { 3470, 0xa200 }, { 3473, 0x0000 }, { 3473, 0x2202 }, /* 0x7100 */ { 3476, 0x0200 }, { 3477, 0x1610 }, { 3481, 0x0042 }, { 3483, 0x1040 }, { 3485, 0x5200 }, { 3488, 0x0260 }, { 3491, 0x52f4 }, { 3499, 0x2000 }, { 3500, 0x8510 }, { 3504, 0x8230 }, { 3508, 0x1100 }, { 3510, 0x4202 }, { 3513, 0x4308 }, { 3517, 0x80b5 }, { 3523, 0x70e1 }, { 3530, 0x9a20 }, /* 0x7200 */ { 3535, 0x2040 }, { 3537, 0x0801 }, { 3539, 0x3500 }, { 3543, 0xfc65 }, { 3553, 0x19c1 }, { 3559, 0xab04 }, { 3565, 0x0286 }, { 3569, 0x6214 }, { 3574, 0x0087 }, { 3578, 0x0044 }, { 3580, 0x9085 }, { 3585, 0x0244 }, { 3588, 0x405c }, { 3593, 0x0a85 }, { 3598, 0x3207 }, { 3604, 0x3380 }, /* 0x7300 */ { 3609, 0x0400 }, { 3610, 0xb8c0 }, { 3616, 0xce20 }, { 3622, 0xc0d0 }, { 3627, 0xc030 }, { 3631, 0x0080 }, { 3632, 0x0508 }, { 3635, 0x0d25 }, { 3641, 0x0a90 }, { 3645, 0x0040 }, { 3646, 0x0200 }, { 3647, 0x080c }, { 3650, 0x6505 }, { 3656, 0x4000 }, { 3657, 0x6421 }, { 3662, 0x4102 }, /* 0x7400 */ { 3665, 0x0268 }, { 3669, 0x0000 }, { 3669, 0x0024 }, { 3671, 0x847c }, { 3678, 0x0002 }, { 3679, 0xde20 }, { 3686, 0x8619 }, { 3692, 0x4049 }, { 3696, 0x0808 }, { 3698, 0x4000 }, { 3699, 0x0084 }, { 3701, 0x2001 }, { 3703, 0x8400 }, { 3705, 0x1010 }, { 3707, 0x42cd }, { 3714, 0x01c7 }, /* 0x7500 */ { 3720, 0x7038 }, { 3726, 0xd52a }, { 3734, 0x1968 }, { 3740, 0x1d8f }, { 3749, 0xbe50 }, { 3757, 0x3e12 }, { 3764, 0x2ef5 }, { 3774, 0x81d9 }, { 3781, 0xcec4 }, { 3789, 0x2412 }, { 3793, 0x0828 }, { 3796, 0x732e }, { 3805, 0x24ac }, { 3811, 0x4b34 }, { 3818, 0x020c }, { 3821, 0xd41d }, /* 0x7600 */ { 3829, 0x2a02 }, { 3833, 0x8000 }, { 3834, 0x0097 }, { 3839, 0x0811 }, { 3842, 0x11c4 }, { 3847, 0x1144 }, { 3851, 0x1786 }, { 3858, 0x7d45 }, { 3867, 0x49d9 }, { 3875, 0x0649 }, { 3880, 0x4000 }, { 3881, 0x8791 }, { 3888, 0x254c }, { 3894, 0xd8c4 }, { 3901, 0x44ba }, { 3908, 0x4914 }, /* 0x7700 */ { 3913, 0x1b92 }, { 3920, 0xc800 }, { 3923, 0x0271 }, { 3928, 0x1580 }, { 3932, 0x0081 }, { 3934, 0x0c00 }, { 3936, 0x096a }, { 3942, 0xc200 }, { 3945, 0x4800 }, { 3947, 0x4002 }, { 3949, 0x3021 }, { 3953, 0xba49 }, { 3961, 0x2080 }, { 3963, 0x1c80 }, { 3967, 0xe2ac }, { 3975, 0x1008 }, /* 0x7800 */ { 3977, 0x1004 }, { 3979, 0x0034 }, { 3982, 0x00e1 }, { 3986, 0x8414 }, { 3990, 0x0020 }, { 3991, 0x2000 }, { 3992, 0x9800 }, { 3995, 0x1014 }, { 3998, 0x70c2 }, { 4004, 0x04aa }, { 4009, 0x8688 }, { 4014, 0x5420 }, { 4018, 0x0c62 }, { 4023, 0x0413 }, { 4027, 0x9180 }, { 4031, 0x2010 }, /* 0x7900 */ { 4033, 0x4082 }, { 4036, 0x0206 }, { 4039, 0x1c40 }, { 4043, 0x5400 }, { 4046, 0x0383 }, { 4051, 0xe4e9 }, { 4060, 0x2125 }, { 4065, 0x8480 }, { 4068, 0xe433 }, { 4076, 0x2000 }, { 4077, 0x44c0 }, { 4081, 0xe609 }, { 4088, 0x0a03 }, { 4092, 0x8126 }, { 4097, 0x12da }, { 4104, 0x0801 }, /* 0x7a00 */ { 4106, 0x6901 }, { 4111, 0x9790 }, { 4118, 0x4001 }, { 4120, 0xf886 }, { 4128, 0xe24d }, { 4136, 0x0081 }, { 4138, 0x0a0e }, { 4143, 0xa651 }, { 4150, 0x011a }, { 4154, 0x81ec }, { 4161, 0xc600 }, { 4165, 0x8441 }, { 4169, 0xadb8 }, { 4178, 0xb62c }, { 4186, 0xa46f }, { 4195, 0x8741 }, /* 0x7b00 */ { 4201, 0x8d54 }, { 4208, 0x4b02 }, { 4213, 0x1161 }, { 4218, 0x0268 }, { 4222, 0xbb60 }, { 4230, 0x2057 }, { 4236, 0x50a0 }, { 4240, 0x0433 }, { 4245, 0xa8c0 }, { 4250, 0xb7b4 }, { 4260, 0x2402 }, { 4263, 0x0112 }, { 4266, 0x9ad3 }, { 4275, 0x2000 }, { 4276, 0x2271 }, { 4282, 0x00c8 }, /* 0x7c00 */ { 4285, 0x2081 }, { 4288, 0x809e }, { 4294, 0x0c8a }, { 4299, 0xe180 }, { 4304, 0xb009 }, { 4309, 0x8151 }, { 4314, 0x1031 }, { 4318, 0x4028 }, { 4321, 0x2a0e }, { 4327, 0x89a5 }, { 4334, 0x69b6 }, { 4343, 0x620e }, { 4349, 0x4425 }, { 4354, 0xd144 }, { 4360, 0x8085 }, { 4364, 0x4d54 }, /* 0x7d00 */ { 4371, 0x2c75 }, { 4379, 0x1fb1 }, { 4388, 0xd807 }, { 4395, 0x862d }, { 4402, 0xd87c }, { 4411, 0x4841 }, { 4415, 0x414e }, { 4421, 0x226e }, { 4428, 0x8200 }, { 4430, 0x9e08 }, { 4436, 0xf80c }, { 4443, 0xed37 }, { 4454, 0x8c80 }, { 4458, 0x7526 }, { 4466, 0x9313 }, { 4473, 0x0814 }, /* 0x7e00 */ { 4476, 0x0e32 }, { 4482, 0xc804 }, { 4486, 0x484e }, { 4492, 0x6ea6 }, { 4501, 0x2c4a }, { 4507, 0x6670 }, { 4514, 0x26c0 }, { 4519, 0xba01 }, { 4525, 0xd30c }, { 4532, 0x185d }, { 4539, 0x0000 }, { 4539, 0x0000 }, { 4539, 0x0000 }, { 4539, 0x0000 }, { 4539, 0x0000 }, { 4539, 0x0000 }, /* 0x7f00 */ { 4539, 0x0000 }, { 4539, 0x0000 }, { 4539, 0x0000 }, { 4539, 0x0540 }, { 4542, 0x7020 }, { 4546, 0x8133 }, { 4552, 0x4f81 }, { 4559, 0x03a5 }, { 4565, 0x55ec }, { 4574, 0x6410 }, { 4578, 0xc318 }, { 4584, 0x2344 }, { 4589, 0x1462 }, { 4594, 0x0034 }, { 4597, 0x0a43 }, { 4602, 0x1a09 }, /* 0x8000 */ { 4607, 0x187b }, { 4615, 0x13a5 }, { 4622, 0x0102 }, { 4624, 0xa848 }, { 4629, 0x0440 }, { 4631, 0xc544 }, { 4637, 0x8106 }, { 4641, 0xe2dd }, { 4651, 0x1af0 }, { 4658, 0x2d48 }, { 4664, 0xb626 }, { 4672, 0x0416 }, { 4676, 0x5058 }, { 4681, 0x6e40 }, { 4687, 0x8032 }, { 4691, 0x3112 }, /* 0x8100 */ { 4696, 0x07e4 }, { 4703, 0x0c00 }, { 4705, 0x8208 }, { 4708, 0x420a }, { 4712, 0x4840 }, { 4715, 0x803b }, { 4721, 0x4860 }, { 4725, 0x8713 }, { 4732, 0x850d }, { 4738, 0x3428 }, { 4743, 0x0319 }, { 4748, 0xe529 }, { 4756, 0x2345 }, { 4762, 0x870a }, { 4768, 0x25a9 }, { 4775, 0x5c18 }, /* 0x8200 */ { 4781, 0x77a6 }, { 4791, 0xd9c5 }, { 4800, 0x5e00 }, { 4805, 0x03e8 }, { 4811, 0x0081 }, { 4813, 0xa700 }, { 4818, 0xcd54 }, { 4826, 0x41c6 }, { 4832, 0x2800 }, { 4834, 0xa204 }, { 4838, 0xb860 }, { 4844, 0x2b0a }, { 4850, 0x0020 }, { 4851, 0xda9e }, { 4861, 0x08ea }, { 4867, 0x0e1a }, /* 0x8300 */ { 4873, 0x427c }, { 4880, 0x11c0 }, { 4884, 0x8908 }, { 4888, 0x0376 }, { 4895, 0x8621 }, { 4900, 0x0105 }, { 4903, 0x0000 }, { 4903, 0x18a8 }, { 4908, 0x46a0 }, { 4913, 0xc448 }, { 4918, 0x0d05 }, { 4923, 0x2022 }, { 4926, 0x5422 }, { 4931, 0x9148 }, { 4936, 0x8a01 }, { 4940, 0x2897 }, /* 0x8400 */ { 4947, 0x7898 }, { 4954, 0x0008 }, { 4955, 0x1605 }, { 4960, 0x3122 }, { 4965, 0x4240 }, { 4968, 0x0880 }, { 4970, 0xfa4e }, { 4980, 0x06a2 }, { 4985, 0x0814 }, { 4988, 0x9211 }, { 4993, 0x2002 }, { 4995, 0x9b04 }, { 5001, 0x2e52 }, { 5008, 0x0643 }, { 5013, 0x5000 }, { 5015, 0x9010 }, /* 0x8500 */ { 5018, 0x0041 }, { 5020, 0x85ba }, { 5028, 0x3042 }, { 5032, 0x2020 }, { 5034, 0x4f0b }, { 5042, 0x05a0 }, { 5046, 0x2708 }, { 5051, 0x4080 }, { 5053, 0x0591 }, { 5058, 0x1a93 }, { 5065, 0xdf50 }, { 5074, 0x0600 }, { 5076, 0xa202 }, { 5080, 0x3021 }, { 5084, 0x0630 }, { 5088, 0x4e80 }, /* 0x8600 */ { 5093, 0x0cc4 }, { 5098, 0x04c8 }, { 5102, 0xa004 }, { 5105, 0x8001 }, { 5107, 0x6000 }, { 5109, 0xd431 }, { 5116, 0x0880 }, { 5118, 0x0a02 }, { 5121, 0x1c00 }, { 5124, 0x0028 }, { 5126, 0x8e18 }, { 5132, 0x0041 }, { 5134, 0x6ad0 }, { 5141, 0xca10 }, { 5146, 0xf210 }, { 5152, 0x4b00 }, /* 0x8700 */ { 5156, 0x274d }, { 5164, 0x1506 }, { 5169, 0x0220 }, { 5171, 0x8890 }, { 5175, 0x5a00 }, { 5179, 0x82a8 }, { 5184, 0x4549 }, { 5190, 0x8150 }, { 5194, 0x2004 }, { 5196, 0x8000 }, { 5197, 0x8804 }, { 5200, 0x2c08 }, { 5204, 0x08d1 }, { 5209, 0x0005 }, { 5211, 0x8001 }, { 5213, 0x4ac4 }, /* 0x8800 */ { 5219, 0xe020 }, { 5223, 0x0062 }, { 5226, 0x008e }, { 5230, 0x0a42 }, { 5234, 0x3055 }, { 5240, 0x6a8c }, { 5247, 0x090e }, { 5252, 0xe0a5 }, { 5259, 0x2906 }, { 5264, 0x42c4 }, { 5269, 0x4814 }, { 5273, 0x80b3 }, { 5279, 0x803e }, { 5285, 0xb330 }, { 5292, 0x0102 }, { 5294, 0x731c }, /* 0x8900 */ { 5302, 0x1494 }, { 5307, 0x600d }, { 5312, 0x0c20 }, { 5315, 0x0940 }, { 5318, 0x301a }, { 5323, 0xc040 }, { 5326, 0xa451 }, { 5332, 0xc094 }, { 5337, 0x8dca }, { 5345, 0x05c8 }, { 5350, 0x96c2 }, { 5357, 0xa40c }, { 5362, 0x0001 }, { 5363, 0x3404 }, { 5367, 0x00c8 }, { 5370, 0x0110 }, /* 0x8a00 */ { 5372, 0x550d }, { 5379, 0xa9c9 }, { 5387, 0x2428 }, { 5391, 0x1c5a }, { 5398, 0x0142 }, { 5401, 0x4837 }, { 5408, 0x7a4d }, { 5417, 0x100f }, { 5422, 0x32b4 }, { 5429, 0x452a }, { 5435, 0x317b }, { 5444, 0x9205 }, { 5449, 0xb894 }, { 5456, 0x5c44 }, { 5462, 0x68d7 }, { 5471, 0x458a }, /* 0x8b00 */ { 5477, 0x5097 }, { 5484, 0x2ed1 }, { 5492, 0x1943 }, { 5498, 0x4208 }, { 5501, 0xd202 }, { 5506, 0x9d40 }, { 5512, 0x9840 }, { 5516, 0x2097 }, { 5522, 0x5409 }, { 5527, 0x064d }, { 5533, 0x0000 }, { 5533, 0x0000 }, { 5533, 0x0000 }, { 5533, 0x0000 }, { 5533, 0x0000 }, { 5533, 0x0000 }, /* 0x8c00 */ { 5533, 0x0000 }, { 5533, 0x0000 }, { 5533, 0x0000 }, { 5533, 0x8480 }, { 5536, 0x5542 }, { 5542, 0x0421 }, { 5545, 0x1c06 }, { 5550, 0x1700 }, { 5554, 0x7624 }, { 5561, 0x6110 }, { 5565, 0xff87 }, { 5577, 0xb9dd }, { 5588, 0x659f }, { 5598, 0x5c0a }, { 5604, 0x245d }, { 5611, 0x3c00 }, /* 0x8d00 */ { 5615, 0xadb0 }, { 5623, 0x0059 }, { 5627, 0x0000 }, { 5627, 0x0000 }, { 5627, 0x0000 }, { 5627, 0x0000 }, { 5627, 0x28d0 }, { 5632, 0x009b }, { 5637, 0x0422 }, { 5640, 0x0200 }, { 5641, 0x0108 }, { 5643, 0x4408 }, { 5646, 0x9804 }, { 5650, 0xac40 }, { 5655, 0x8d0a }, { 5661, 0x9028 }, /* 0x8e00 */ { 5665, 0x8700 }, { 5669, 0xe001 }, { 5673, 0x0400 }, { 5674, 0x0031 }, { 5677, 0x1794 }, { 5684, 0x8221 }, { 5688, 0x0019 }, { 5691, 0x1054 }, { 5695, 0x2cb2 }, { 5702, 0x021a }, { 5706, 0x9c02 }, { 5711, 0x4003 }, { 5714, 0x3d60 }, { 5721, 0x8804 }, { 5724, 0x080c }, { 5727, 0x7900 }, /* 0x8f00 */ { 5732, 0x1628 }, { 5737, 0xba3c }, { 5746, 0x8640 }, { 5750, 0xcb08 }, { 5756, 0x7274 }, { 5764, 0x9080 }, { 5767, 0x001e }, { 5771, 0x0000 }, { 5771, 0x0000 }, { 5771, 0xd800 }, { 5775, 0xe188 }, { 5781, 0x9c87 }, { 5789, 0x4034 }, { 5793, 0x0412 }, { 5796, 0xae64 }, { 5804, 0x2791 }, /* 0x9000 */ { 5811, 0xe86b }, { 5820, 0xe6fb }, { 5832, 0x408f }, { 5838, 0x5366 }, { 5846, 0xeea6 }, { 5856, 0x537f }, { 5867, 0xe32b }, { 5876, 0xb5e4 }, { 5885, 0x869f }, { 5894, 0x0002 }, { 5895, 0x8548 }, { 5900, 0x0122 }, { 5903, 0x4402 }, { 5906, 0x0800 }, { 5907, 0x2116 }, { 5912, 0x20a0 }, /* 0x9100 */ { 5915, 0x0004 }, { 5916, 0x0204 }, { 5918, 0x2000 }, { 5919, 0x0005 }, { 5921, 0x7e00 }, { 5927, 0x0154 }, { 5931, 0x162c }, { 5937, 0x01ac }, { 5942, 0x2a84 }, { 5947, 0x1085 }, { 5951, 0x8c14 }, { 5956, 0x0530 }, { 5960, 0xfbc3 }, { 5971, 0xb943 }, { 5979, 0x00ca }, { 5983, 0x9060 }, /* 0x9200 */ { 5987, 0x6000 }, { 5989, 0x4032 }, { 5993, 0x1200 }, { 5995, 0x8090 }, { 5998, 0x0b30 }, { 6003, 0x4c81 }, { 6008, 0x0054 }, { 6011, 0x4002 }, { 6013, 0x0029 }, { 6016, 0x1d6a }, { 6024, 0x2000 }, { 6025, 0x0280 }, { 6027, 0x8000 }, { 6028, 0x0004 }, { 6029, 0x2610 }, { 6033, 0x150c }, /* 0x9300 */ { 6038, 0x8040 }, { 6040, 0x0701 }, { 6044, 0xd94d }, { 6053, 0x0c24 }, { 6057, 0x2810 }, { 6060, 0x1850 }, { 6064, 0x5001 }, { 6067, 0x5020 }, { 6070, 0x1000 }, { 6071, 0x04d0 }, { 6075, 0x7080 }, { 6079, 0x0201 }, { 6081, 0x0108 }, { 6083, 0x21c3 }, { 6089, 0x0132 }, { 6093, 0x0000 }, /* 0x9400 */ { 6093, 0x0088 }, { 6095, 0x0719 }, { 6101, 0x0802 }, { 6103, 0x0560 }, { 6107, 0x0012 }, { 6109, 0x4c0e }, { 6115, 0x0405 }, { 6118, 0xf0a1 }, { 6125, 0x0002 }, { 6126, 0x0000 }, { 6126, 0x0000 }, { 6126, 0x0000 }, { 6126, 0x0000 }, { 6126, 0x0000 }, { 6126, 0x0000 }, { 6126, 0x0000 }, /* 0x9500 */ { 6126, 0x0000 }, { 6126, 0x0000 }, { 6126, 0x0000 }, { 6126, 0x0000 }, { 6126, 0x0000 }, { 6126, 0x0000 }, { 6126, 0x0000 }, { 6126, 0x0080 }, { 6127, 0x8e8d }, { 6135, 0x035a }, { 6141, 0x21bd }, { 6149, 0x5a04 }, { 6154, 0x3488 }, { 6159, 0x1170 }, { 6164, 0x0026 }, { 6167, 0x0000 }, /* 0x9600 */ { 6167, 0x0000 }, { 6167, 0x1000 }, { 6168, 0xc502 }, { 6173, 0x8804 }, { 6176, 0xb815 }, { 6183, 0xf801 }, { 6189, 0x147c }, { 6196, 0x25ed }, { 6205, 0xed60 }, { 6213, 0x1bb0 }, { 6220, 0x0589 }, { 6225, 0x1bd7 }, { 6235, 0x7af3 }, { 6246, 0x1a62 }, { 6252, 0x0d0c }, { 6257, 0x0ac5 }, /* 0x9700 */ { 6263, 0xe5d1 }, { 6272, 0x524a }, { 6278, 0x0490 }, { 6281, 0x6305 }, { 6287, 0x0354 }, { 6292, 0x5244 }, { 6297, 0x2b57 }, { 6306, 0x1612 }, { 6311, 0xa872 }, { 6318, 0x1101 }, { 6321, 0x2949 }, { 6327, 0x0018 }, { 6329, 0x0948 }, { 6333, 0x1008 }, { 6335, 0x6000 }, { 6337, 0x886c }, /* 0x9800 */ { 6343, 0x916e }, { 6351, 0x058f }, { 6358, 0x3012 }, { 6362, 0x3990 }, { 6368, 0xf840 }, { 6374, 0x4930 }, { 6379, 0x8880 }, { 6382, 0x001b }, { 6386, 0x0000 }, { 6386, 0x0000 }, { 6386, 0x8500 }, { 6389, 0x0042 }, { 6391, 0x0058 }, { 6394, 0x9800 }, { 6397, 0xea04 }, { 6403, 0x7014 }, /* 0x9900 */ { 6408, 0x1628 }, { 6413, 0x611d }, { 6420, 0x5113 }, { 6426, 0x6000 }, { 6428, 0x1a24 }, { 6433, 0x00a7 }, { 6438, 0x0000 }, { 6438, 0x0000 }, { 6438, 0x0000 }, { 6438, 0x03c0 }, { 6442, 0x7120 }, { 6447, 0x1018 }, { 6450, 0x0172 }, { 6455, 0xa927 }, { 6463, 0x6004 }, { 6466, 0x8906 }, /* 0x9a00 */ { 6471, 0xc022 }, { 6475, 0x020c }, { 6478, 0x0900 }, { 6480, 0x4081 }, { 6483, 0x202d }, { 6488, 0x8ca0 }, { 6493, 0x0e34 }, { 6499, 0x0000 }, { 6499, 0x0000 }, { 6499, 0x0000 }, { 6499, 0x2100 }, { 6501, 0x1101 }, { 6504, 0x8011 }, { 6507, 0xc11a }, { 6513, 0xec4c }, { 6521, 0x0892 }, /* 0x9b00 */ { 6525, 0x0040 }, { 6526, 0x8500 }, { 6529, 0xc7ac }, { 6538, 0x1806 }, { 6542, 0xe03e }, { 6550, 0x0512 }, { 6554, 0x8000 }, { 6555, 0x0010 }, { 6556, 0x4008 }, { 6558, 0x80ce }, { 6564, 0x6d01 }, { 6570, 0x0210 }, { 6572, 0x8641 }, { 6577, 0x0856 }, { 6582, 0x011e }, { 6587, 0x0027 }, /* 0x9c00 */ { 6591, 0x3750 }, { 6598, 0x083d }, { 6604, 0xe032 }, { 6610, 0x4e05 }, { 6616, 0x01c0 }, { 6619, 0x0484 }, { 6622, 0x0081 }, { 6624, 0x0140 }, { 6626, 0x0000 }, { 6626, 0x0000 }, { 6626, 0x0000 }, { 6626, 0x0000 }, { 6626, 0x0000 }, { 6626, 0x0000 }, { 6626, 0x1aa0 }, { 6631, 0x0059 }, /* 0x9d00 */ { 6635, 0x43c8 }, { 6641, 0x8824 }, { 6645, 0x1d48 }, { 6651, 0xc800 }, { 6654, 0x0152 }, { 6658, 0x7203 }, { 6664, 0x9013 }, { 6669, 0x0404 }, { 6671, 0x8280 }, { 6674, 0x0400 }, { 6675, 0x8a10 }, { 6679, 0x0d14 }, { 6684, 0x8056 }, { 6689, 0x0208 }, { 6691, 0xa040 }, { 6694, 0x2704 }, /* 0x9e00 */ { 6699, 0x0000 }, { 6699, 0x4c00 }, { 6702, 0x0000 }, { 6702, 0x0000 }, { 6702, 0x0000 }, { 6702, 0x0000 }, { 6702, 0x0000 }, { 6702, 0xa320 }, { 6707, 0x1902 }, { 6711, 0xa0ae }, { 6718, 0x2660 }, { 6723, 0xdf00 }, { 6730, 0xf010 }, { 6735, 0x7b15 }, { 6744, 0x8121 }, { 6748, 0x3ad0 }, /* 0x9f00 */ { 6755, 0x4180 }, { 6758, 0x0028 }, { 6760, 0x1003 }, { 6763, 0x4800 }, { 6765, 0xcc00 }, { 6769, 0x8014 }, { 6772, 0x14cf }, { 6780, 0x00c4 }, { 6783, 0x2000 }, { 6784, 0x3020 }, { 6787, 0x0001 }, }; static const Summary16 jisx0208_uni2indx_pageff[15] = { /* 0xff00 */ { 6788, 0xdf7a }, { 6800, 0xffff }, { 6816, 0xffff }, { 6832, 0xefff }, { 6847, 0xffff }, { 6863, 0x3fff }, { 6877, 0x0000 }, { 6877, 0x0000 }, { 6877, 0x0000 }, { 6877, 0x0000 }, { 6877, 0x0000 }, { 6877, 0x0000 }, { 6877, 0x0000 }, { 6877, 0x0000 }, { 6877, 0x0028 }, }; static int jisx0208_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { if (n >= 2) { const Summary16 *summary = NULL; if (wc < 0x0100) summary = &jisx0208_uni2indx_page00[(wc>>4)]; else if (wc >= 0x0300 && wc < 0x0460) summary = &jisx0208_uni2indx_page03[(wc>>4)-0x030]; else if (wc >= 0x2000 && wc < 0x2320) summary = &jisx0208_uni2indx_page20[(wc>>4)-0x200]; else if (wc >= 0x2500 && wc < 0x2670) summary = &jisx0208_uni2indx_page25[(wc>>4)-0x250]; else if (wc >= 0x3000 && wc < 0x3100) summary = &jisx0208_uni2indx_page30[(wc>>4)-0x300]; else if (wc >= 0x4e00 && wc < 0x9fb0) summary = &jisx0208_uni2indx_page4e[(wc>>4)-0x4e0]; else if (wc >= 0xff00 && wc < 0xfff0) summary = &jisx0208_uni2indx_pageff[(wc>>4)-0xff0]; if (summary) { unsigned short used = summary->used; unsigned int i = wc & 0x0f; if (used & ((unsigned short) 1 << i)) { unsigned short c; /* Keep in `used' only the bits 0..i-1. */ used &= ((unsigned short) 1 << i) - 1; /* Add `summary->indx' and the number of bits set in `used'. */ used = (used & 0x5555) + ((used & 0xaaaa) >> 1); used = (used & 0x3333) + ((used & 0xcccc) >> 2); used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4); used = (used & 0x00ff) + (used >> 8); c = jisx0208_2charset[summary->indx + used]; r[0] = (c >> 8); r[1] = (c & 0xff); return 2; } } return RET_ILSEQ; } return RET_TOOSMALL; } }, { 5013, 0x5000 }, { 5015, 0x9010 }, /* 0x8500 */ { 5018, 0x0041 },libX11-1.6.3/src/xlibi18n/lcUniConv/iso8859_7.h000064401431060000012000000056071247741723500207420ustar00alancstaff00002660200006 /* * ISO-8859-7 */ static const unsigned short iso8859_7_2uni[96] = { /* 0xa0 */ 0x00a0, 0x2018, 0x2019, 0x00a3, 0xfffd, 0xfffd, 0x00a6, 0x00a7, 0x00a8, 0x00a9, 0xfffd, 0x00ab, 0x00ac, 0x00ad, 0xfffd, 0x2015, /* 0xb0 */ 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x0384, 0x0385, 0x0386, 0x00b7, 0x0388, 0x0389, 0x038a, 0x00bb, 0x038c, 0x00bd, 0x038e, 0x038f, /* 0xc0 */ 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, /* 0xd0 */ 0x03a0, 0x03a1, 0xfffd, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x03ac, 0x03ad, 0x03ae, 0x03af, /* 0xe0 */ 0x03b0, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, /* 0xf0 */ 0x03c0, 0x03c1, 0x03c2, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, 0x03ca, 0x03cb, 0x03cc, 0x03cd, 0x03ce, 0xfffd, }; static int iso8859_7_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c = *s; if (c < 0xa0) { *pwc = (ucs4_t) c; return 1; } else { unsigned short wc = iso8859_7_2uni[c-0xa0]; if (wc != 0xfffd) { *pwc = (ucs4_t) wc; return 1; } } return RET_ILSEQ; } static const unsigned char iso8859_7_page00[32] = { 0xa0, 0x00, 0x00, 0xa3, 0x00, 0x00, 0xa6, 0xa7, /* 0xa0-0xa7 */ 0xa8, 0xa9, 0x00, 0xab, 0xac, 0xad, 0x00, 0x00, /* 0xa8-0xaf */ 0xb0, 0xb1, 0xb2, 0xb3, 0x00, 0x00, 0x00, 0xb7, /* 0xb0-0xb7 */ 0x00, 0x00, 0x00, 0xbb, 0x00, 0xbd, 0x00, 0x00, /* 0xb8-0xbf */ }; static const unsigned char iso8859_7_page03[80] = { 0x00, 0x00, 0x00, 0x00, 0xb4, 0xb5, 0xb6, 0x00, /* 0x80-0x87 */ 0xb8, 0xb9, 0xba, 0x00, 0xbc, 0x00, 0xbe, 0xbf, /* 0x88-0x8f */ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x90-0x97 */ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x98-0x9f */ 0xd0, 0xd1, 0x00, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xa0-0xa7 */ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xa8-0xaf */ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xb0-0xb7 */ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xb8-0xbf */ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xc0-0xc7 */ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0x00, /* 0xc8-0xcf */ }; static const unsigned char iso8859_7_page20[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00, /* 0x10-0x17 */ 0xa1, 0xa2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ }; static int iso8859_7_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { unsigned char c = 0; if (wc < 0x00a0) { *r = wc; return 1; } else if (wc >= 0x00a0 && wc < 0x00c0) c = iso8859_7_page00[wc-0x00a0]; else if (wc >= 0x0380 && wc < 0x03d0) c = iso8859_7_page03[wc-0x0380]; else if (wc >= 0x2010 && wc < 0x2020) c = iso8859_7_page20[wc-0x2010]; if (c != 0) { *r = c; return 1; } return RET_ILSEQ; } libX11-1.6.3/src/xlibi18n/lcUniConv/iso8859_10.h000064401431060000012000000065471247741723500210200ustar00alancstaff00002660200006 /* * ISO-8859-10 */ static const unsigned short iso8859_10_2uni[96] = { /* 0xa0 */ 0x00a0, 0x0104, 0x0112, 0x0122, 0x012a, 0x0128, 0x0136, 0x00a7, 0x013b, 0x0110, 0x0160, 0x0166, 0x017d, 0x00ad, 0x016a, 0x014a, /* 0xb0 */ 0x00b0, 0x0105, 0x0113, 0x0123, 0x012b, 0x0129, 0x0137, 0x00b7, 0x013c, 0x0111, 0x0161, 0x0167, 0x017e, 0x2015, 0x016b, 0x014b, /* 0xc0 */ 0x0100, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x012e, 0x010c, 0x00c9, 0x0118, 0x00cb, 0x0116, 0x00cd, 0x00ce, 0x00cf, /* 0xd0 */ 0x00d0, 0x0145, 0x014c, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x0168, 0x00d8, 0x0172, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, /* 0xe0 */ 0x0101, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x012f, 0x010d, 0x00e9, 0x0119, 0x00eb, 0x0117, 0x00ed, 0x00ee, 0x00ef, /* 0xf0 */ 0x00f0, 0x0146, 0x014d, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x0169, 0x00f8, 0x0173, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x0138, }; static int iso8859_10_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c = *s; if (c < 0xa0) *pwc = (ucs4_t) c; else *pwc = (ucs4_t) iso8859_10_2uni[c-0xa0]; return 1; } static const unsigned char iso8859_10_page00[224] = { 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa7, /* 0xa0-0xa7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, /* 0xa8-0xaf */ 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, /* 0xb0-0xb7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ 0x00, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0x00, /* 0xc0-0xc7 */ 0x00, 0xc9, 0x00, 0xcb, 0x00, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ 0xd0, 0x00, 0x00, 0xd3, 0xd4, 0xd5, 0xd6, 0x00, /* 0xd0-0xd7 */ 0xd8, 0x00, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ 0x00, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0x00, /* 0xe0-0xe7 */ 0x00, 0xe9, 0x00, 0xeb, 0x00, 0xed, 0xee, 0xef, /* 0xe8-0xef */ 0xf0, 0x00, 0x00, 0xf3, 0xf4, 0xf5, 0xf6, 0x00, /* 0xf0-0xf7 */ 0xf8, 0x00, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0x00, /* 0xf8-0xff */ /* 0x0100 */ 0xc0, 0xe0, 0x00, 0x00, 0xa1, 0xb1, 0x00, 0x00, /* 0x00-0x07 */ 0x00, 0x00, 0x00, 0x00, 0xc8, 0xe8, 0x00, 0x00, /* 0x08-0x0f */ 0xa9, 0xb9, 0xa2, 0xb2, 0x00, 0x00, 0xcc, 0xec, /* 0x10-0x17 */ 0xca, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ 0x00, 0x00, 0xa3, 0xb3, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ 0xa5, 0xb5, 0xa4, 0xb4, 0x00, 0x00, 0xc7, 0xe7, /* 0x28-0x2f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, 0xb6, /* 0x30-0x37 */ 0xff, 0x00, 0x00, 0xa8, 0xb8, 0x00, 0x00, 0x00, /* 0x38-0x3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0xd1, 0xf1, 0x00, /* 0x40-0x47 */ 0x00, 0x00, 0xaf, 0xbf, 0xd2, 0xf2, 0x00, 0x00, /* 0x48-0x4f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ 0xaa, 0xba, 0x00, 0x00, 0x00, 0x00, 0xab, 0xbb, /* 0x60-0x67 */ 0xd7, 0xf7, 0xae, 0xbe, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ 0x00, 0x00, 0xd9, 0xf9, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0xac, 0xbc, 0x00, /* 0x78-0x7f */ }; static int iso8859_10_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { unsigned char c = 0; if (wc < 0x00a0) { *r = wc; return 1; } else if (wc >= 0x00a0 && wc < 0x0180) c = iso8859_10_page00[wc-0x00a0]; else if (wc == 0x2015) c = 0xbd; if (c != 0) { *r = c; return 1; } return RET_ILSEQ; } libX11-1.6.3/src/xlibi18n/lcUniConv/tcvn.h000064401431060000012000000134511247741723500203320ustar00alancstaff00002660200006 /* * TCVN-5712 */ static const unsigned short tcvn_2uni_1[32] = { /* 0x00 */ 0x0000, 0x00da, 0x1ee4, 0x0003, 0x1eea, 0x1eec, 0x1eee, 0x0007, 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, /* 0x10 */ 0x0010, 0x1ee8, 0x1ef0, 0x1ef2, 0x1ef6, 0x1ef8, 0x00dd, 0x1ef4, 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, }; static const unsigned short tcvn_2uni_2[128] = { /* 0x80 */ 0x00c0, 0x1ea2, 0x00c3, 0x00c1, 0x1ea0, 0x1eb6, 0x1eac, 0x00c8, 0x1eba, 0x1ebc, 0x00c9, 0x1eb8, 0x1ec6, 0x00cc, 0x1ec8, 0x0128, /* 0x90 */ 0x00cd, 0x1eca, 0x00d2, 0x1ece, 0x00d5, 0x00d3, 0x1ecc, 0x1ed8, 0x1edc, 0x1ede, 0x1ee0, 0x1eda, 0x1ee2, 0x00d9, 0x1ee6, 0x0168, /* 0xa0 */ 0x00a0, 0x0102, 0x00c2, 0x00ca, 0x00d4, 0x01a0, 0x01af, 0x0110, 0x0103, 0x00e2, 0x00ea, 0x00f4, 0x01a1, 0x01b0, 0x0111, 0x1eb0, /* 0xb0 */ 0x0300, 0x0309, 0x0303, 0x0301, 0x0323, 0x00e0, 0x1ea3, 0x00e3, 0x00e1, 0x1ea1, 0x1eb2, 0x1eb1, 0x1eb3, 0x1eb5, 0x1eaf, 0x1eb4, /* 0xc0 */ 0x1eae, 0x1ea6, 0x1ea8, 0x1eaa, 0x1ea4, 0x1ec0, 0x1eb7, 0x1ea7, 0x1ea9, 0x1eab, 0x1ea5, 0x1ead, 0x00e8, 0x1ec2, 0x1ebb, 0x1ebd, /* 0xd0 */ 0x00e9, 0x1eb9, 0x1ec1, 0x1ec3, 0x1ec5, 0x1ebf, 0x1ec7, 0x00ec, 0x1ec9, 0x1ec4, 0x1ebe, 0x1ed2, 0x0129, 0x00ed, 0x1ecb, 0x00f2, /* 0xe0 */ 0x1ed4, 0x1ecf, 0x00f5, 0x00f3, 0x1ecd, 0x1ed3, 0x1ed5, 0x1ed7, 0x1ed1, 0x1ed9, 0x1edd, 0x1edf, 0x1ee1, 0x1edb, 0x1ee3, 0x00f9, /* 0xf0 */ 0x1ed6, 0x1ee7, 0x0169, 0x00fa, 0x1ee5, 0x1eeb, 0x1eed, 0x1eef, 0x1ee9, 0x1ef1, 0x1ef3, 0x1ef7, 0x1ef9, 0x00fd, 0x1ef5, 0x1ed0, }; static int tcvn_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c = *s; if (c < 0x20) *pwc = (ucs4_t) tcvn_2uni_1[c]; else if (c < 0x80) *pwc = (ucs4_t) c; else *pwc = (ucs4_t) tcvn_2uni_2[c-0x80]; return 1; } static const unsigned char tcvn_page00[96+184] = { 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ 0x80, 0x83, 0xa2, 0x82, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ 0x87, 0x8a, 0xa3, 0x00, 0x8d, 0x90, 0x00, 0x00, /* 0xc8-0xcf */ 0x00, 0x00, 0x92, 0x95, 0xa4, 0x94, 0x00, 0x00, /* 0xd0-0xd7 */ 0x00, 0x9d, 0x01, 0x00, 0x00, 0x16, 0x00, 0x00, /* 0xd8-0xdf */ 0xb5, 0xb8, 0xa9, 0xb7, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ 0xcc, 0xd0, 0xaa, 0x00, 0xd7, 0xdd, 0x00, 0x00, /* 0xe8-0xef */ 0x00, 0x00, 0xdf, 0xe3, 0xab, 0xe2, 0x00, 0x00, /* 0xf0-0xf7 */ 0x00, 0xef, 0xf3, 0x00, 0x00, 0xfd, 0x00, 0x00, /* 0xf8-0xff */ /* 0x0100 */ 0x00, 0x00, 0xa1, 0xa8, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ 0xa7, 0xae, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ 0x8f, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ 0x9f, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ 0xa5, 0xac, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, /* 0xa8-0xaf */ 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ }; static const unsigned char tcvn_page03[40] = { 0xb0, 0xb3, 0x00, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ 0x00, 0xb1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ }; static const unsigned char tcvn_page1e[96] = { 0x84, 0xb9, 0x81, 0xb6, 0xc4, 0xca, 0xc1, 0xc7, /* 0xa0-0xa7 */ 0xc2, 0xc8, 0xc3, 0xc9, 0x86, 0xcb, 0xc0, 0xbe, /* 0xa8-0xaf */ 0xaf, 0xbb, 0xba, 0xbc, 0xbf, 0xbd, 0x85, 0xc6, /* 0xb0-0xb7 */ 0x8b, 0xd1, 0x88, 0xce, 0x89, 0xcf, 0xda, 0xd5, /* 0xb8-0xbf */ 0xc5, 0xd2, 0xcd, 0xd3, 0xd9, 0xd4, 0x8c, 0xd6, /* 0xc0-0xc7 */ 0x8e, 0xd8, 0x91, 0xde, 0x96, 0xe4, 0x93, 0xe1, /* 0xc8-0xcf */ 0xff, 0xe8, 0xdb, 0xe5, 0xe0, 0xe6, 0xf0, 0xe7, /* 0xd0-0xd7 */ 0x97, 0xe9, 0x9b, 0xed, 0x98, 0xea, 0x99, 0xeb, /* 0xd8-0xdf */ 0x9a, 0xec, 0x9c, 0xee, 0x02, 0xf4, 0x9e, 0xf1, /* 0xe0-0xe7 */ 0x11, 0xf8, 0x04, 0xf5, 0x05, 0xf6, 0x06, 0xf7, /* 0xe8-0xef */ 0x12, 0xf9, 0x13, 0xfa, 0x17, 0xfe, 0x14, 0xfb, /* 0xf0-0xf7 */ 0x15, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf8-0xff */ }; static int tcvn_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { unsigned char c = 0; if (wc < 0x0080 && (wc >= 0x0020 || (0x00fe0076 & (1 << wc)) == 0)) { *r = wc; return 1; } else if (wc >= 0x00a0 && wc < 0x01b8) c = tcvn_page00[wc-0x00a0]; else if (wc >= 0x0300 && wc < 0x0328) c = tcvn_page03[wc-0x0300]; else if (wc >= 0x1ea0 && wc < 0x1f00) c = tcvn_page1e[wc-0x1ea0]; if (c != 0) { *r = c; return 1; } return RET_ILSEQ; } libX11-1.6.3/src/xlibi18n/lcUniConv/viscii.h000064401431060000012000000122221247741723500206410ustar00alancstaff00002660200006 /* * VISCII1.1-1 */ /* Specification: RFC 1456 */ static const unsigned short viscii_2uni_1[32] = { /* 0x00 */ 0x0000, 0x0001, 0x1eb2, 0x0003, 0x0004, 0x1eb4, 0x1eaa, 0x0007, 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, /* 0x10 */ 0x0010, 0x0011, 0x0012, 0x0013, 0x1ef6, 0x0015, 0x0016, 0x0017, 0x0018, 0x1ef8, 0x001a, 0x001b, 0x001c, 0x001d, 0x1ef4, 0x001f, }; static const unsigned short viscii_2uni_2[128] = { /* 0x80 */ 0x1ea0, 0x1eae, 0x1eb0, 0x1eb6, 0x1ea4, 0x1ea6, 0x1ea8, 0x1eac, 0x1ebc, 0x1eb8, 0x1ebe, 0x1ec0, 0x1ec2, 0x1ec4, 0x1ec6, 0x1ed0, /* 0x90 */ 0x1ed2, 0x1ed4, 0x1ed6, 0x1ed8, 0x1ee2, 0x1eda, 0x1edc, 0x1ede, 0x1eca, 0x1ece, 0x1ecc, 0x1ec8, 0x1ee6, 0x0168, 0x1ee4, 0x1ef2, /* 0xa0 */ 0x00d5, 0x1eaf, 0x1eb1, 0x1eb7, 0x1ea5, 0x1ea7, 0x1ea9, 0x1ead, 0x1ebd, 0x1eb9, 0x1ebf, 0x1ec1, 0x1ec3, 0x1ec5, 0x1ec7, 0x1ed1, /* 0xb0 */ 0x1ed3, 0x1ed5, 0x1ed7, 0x1ee0, 0x01a0, 0x1ed9, 0x1edd, 0x1edf, 0x1ecb, 0x1ef0, 0x1ee8, 0x1eea, 0x1eec, 0x01a1, 0x1edb, 0x01af, /* 0xc0 */ 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x1ea2, 0x0102, 0x1eb3, 0x1eb5, 0x00c8, 0x00c9, 0x00ca, 0x1eba, 0x00cc, 0x00cd, 0x0128, 0x1ef3, /* 0xd0 */ 0x0110, 0x1ee9, 0x00d2, 0x00d3, 0x00d4, 0x1ea1, 0x1ef7, 0x1eeb, 0x1eed, 0x00d9, 0x00da, 0x1ef9, 0x1ef5, 0x00dd, 0x1ee1, 0x01b0, /* 0xe0 */ 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x1ea3, 0x0103, 0x1eef, 0x1eab, 0x00e8, 0x00e9, 0x00ea, 0x1ebb, 0x00ec, 0x00ed, 0x0129, 0x1ec9, /* 0xf0 */ 0x0111, 0x1ef1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x1ecf, 0x1ecd, 0x1ee5, 0x00f9, 0x00fa, 0x0169, 0x1ee7, 0x00fd, 0x1ee3, 0x1eee, }; static int viscii_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c = *s; if (c < 0x20) *pwc = (ucs4_t) viscii_2uni_1[c]; else if (c < 0x80) *pwc = (ucs4_t) c; else *pwc = (ucs4_t) viscii_2uni_2[c-0x80]; return 1; } static const unsigned char viscii_page00[64+184] = { 0xc0, 0xc1, 0xc2, 0xc3, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ 0xc8, 0xc9, 0xca, 0x00, 0xcc, 0xcd, 0x00, 0x00, /* 0xc8-0xcf */ 0x00, 0x00, 0xd2, 0xd3, 0xd4, 0xa0, 0x00, 0x00, /* 0xd0-0xd7 */ 0x00, 0xd9, 0xda, 0x00, 0x00, 0xdd, 0x00, 0x00, /* 0xd8-0xdf */ 0xe0, 0xe1, 0xe2, 0xe3, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ 0xe8, 0xe9, 0xea, 0x00, 0xec, 0xed, 0x00, 0x00, /* 0xe8-0xef */ 0x00, 0x00, 0xf2, 0xf3, 0xf4, 0xf5, 0x00, 0x00, /* 0xf0-0xf7 */ 0x00, 0xf9, 0xfa, 0x00, 0x00, 0xfd, 0x00, 0x00, /* 0xf8-0xff */ /* 0x0100 */ 0x00, 0x00, 0xc5, 0xe5, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ 0xd0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ 0xce, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ 0x9d, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ 0xb4, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, /* 0xa8-0xaf */ 0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ }; static const unsigned char viscii_page1e[96] = { 0x80, 0xd5, 0xc4, 0xe4, 0x84, 0xa4, 0x85, 0xa5, /* 0xa0-0xa7 */ 0x86, 0xa6, 0x06, 0xe7, 0x87, 0xa7, 0x81, 0xa1, /* 0xa8-0xaf */ 0x82, 0xa2, 0x02, 0xc6, 0x05, 0xc7, 0x83, 0xa3, /* 0xb0-0xb7 */ 0x89, 0xa9, 0xcb, 0xeb, 0x88, 0xa8, 0x8a, 0xaa, /* 0xb8-0xbf */ 0x8b, 0xab, 0x8c, 0xac, 0x8d, 0xad, 0x8e, 0xae, /* 0xc0-0xc7 */ 0x9b, 0xef, 0x98, 0xb8, 0x9a, 0xf7, 0x99, 0xf6, /* 0xc8-0xcf */ 0x8f, 0xaf, 0x90, 0xb0, 0x91, 0xb1, 0x92, 0xb2, /* 0xd0-0xd7 */ 0x93, 0xb5, 0x95, 0xbe, 0x96, 0xb6, 0x97, 0xb7, /* 0xd8-0xdf */ 0xb3, 0xde, 0x94, 0xfe, 0x9e, 0xf8, 0x9c, 0xfc, /* 0xe0-0xe7 */ 0xba, 0xd1, 0xbb, 0xd7, 0xbc, 0xd8, 0xff, 0xe6, /* 0xe8-0xef */ 0xb9, 0xf1, 0x9f, 0xcf, 0x1e, 0xdc, 0x14, 0xd6, /* 0xf0-0xf7 */ 0x19, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf8-0xff */ }; static int viscii_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { unsigned char c = 0; if (wc < 0x0080 && (wc >= 0x0020 || (0x42100064 & (1 << wc)) == 0)) { *r = wc; return 1; } else if (wc >= 0x00c0 && wc < 0x01b8) c = viscii_page00[wc-0x00c0]; else if (wc >= 0x1ea0 && wc < 0x1f00) c = viscii_page1e[wc-0x1ea0]; if (c != 0) { *r = c; return 1; } return RET_ILSEQ; } 0003, 0x0004, 0x1eb4, 0x1eaa, 0x0007, 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, /* 0x10 */ 0x0010, 0x0011, 0x0012, 0x0013, 0x1ef6, 0x0015, 0x0016, 0x0017, 0x0018, 0x1ef8, 0x001a, 0x001b, 0x001c, 0x001d, 0x1ef4, 0x001f, }; static const unsigned short viscii_2uni_2[128] = { /* 0x80 */ 0x1ea0, 0x1eae, 0x1eb0, 0x1eb6, 0x1ea4, 0x1ea6, libX11-1.6.3/src/xlibi18n/lcUniConv/iso8859_11.h000064401431060000012000000046501247741723500210120ustar00alancstaff00002660200006 /* * ISO8859-11 */ static const unsigned short iso8859_11_2uni[96] = { /* 0xa0 */ 0x00a0, 0x0e01, 0x0e02, 0x0e03, 0x0e04, 0x0e05, 0x0e06, 0x0e07, 0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f, /* 0xb0 */ 0x0e10, 0x0e11, 0x0e12, 0x0e13, 0x0e14, 0x0e15, 0x0e16, 0x0e17, 0x0e18, 0x0e19, 0x0e1a, 0x0e1b, 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f, /* 0xc0 */ 0x0e20, 0x0e21, 0x0e22, 0x0e23, 0x0e24, 0x0e25, 0x0e26, 0x0e27, 0x0e28, 0x0e29, 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f, /* 0xd0 */ 0x0e30, 0x0e31, 0x0e32, 0x0e33, 0x0e34, 0x0e35, 0x0e36, 0x0e37, 0x0e38, 0x0e39, 0x0e3a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x0e3f, /* 0xe0 */ 0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47, 0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d, 0x0e4e, 0x0e4f, /* 0xf0 */ 0x0e50, 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57, 0x0e58, 0x0e59, 0x0e5a, 0x0e5b, 0xfffd, 0xfffd, 0xfffd, 0xfffd, }; static int iso8859_11_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c = *s; if (c < 0x80) { *pwc = (ucs4_t) c; return 1; } else if (c < 0xa0) { } else { unsigned short wc = iso8859_11_2uni[c-0xa0]; if (wc != 0xfffd) { *pwc = (ucs4_t) wc; return 1; } } return RET_ILSEQ; } static const unsigned char iso8859_11_page0e[96] = { 0x00, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0x00-0x07 */ 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0x08-0x0f */ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0x10-0x17 */ 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0x18-0x1f */ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x20-0x27 */ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x28-0x2f */ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x30-0x37 */ 0xd8, 0xd9, 0xda, 0x00, 0x00, 0x00, 0x00, 0xdf, /* 0x38-0x3f */ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x40-0x47 */ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x48-0x4f */ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x50-0x57 */ 0xf8, 0xf9, 0xfa, 0xfb, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ }; static int iso8859_11_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { unsigned char c = 0; if (wc < 0x0080 || wc == 0x00a0) { *r = wc; return 1; } else if (wc >= 0x0e00 && wc < 0x0e60) c = iso8859_11_page0e[wc-0x0e00]; if (c != 0) { *r = c; return 1; } return RET_ILSEQ; } libX11-1.6.3/src/xlibi18n/lcUniConv/iso8859_6.h000064401431060000012000000047731247741723500207440ustar00alancstaff00002660200006 /* * ISO-8859-6 */ static const unsigned short iso8859_6_2uni[96] = { /* 0xa0 */ 0x00a0, 0xfffd, 0xfffd, 0xfffd, 0x00a4, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x060c, 0x00ad, 0xfffd, 0xfffd, /* 0xb0 */ 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x061b, 0xfffd, 0xfffd, 0xfffd, 0x061f, /* 0xc0 */ 0xfffd, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, 0x0628, 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f, /* 0xd0 */ 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637, 0x0638, 0x0639, 0x063a, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0xe0 */ 0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647, 0x0648, 0x0649, 0x064a, 0x064b, 0x064c, 0x064d, 0x064e, 0x064f, /* 0xf0 */ 0x0650, 0x0651, 0x0652, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, }; static int iso8859_6_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c = *s; if (c < 0xa0) { *pwc = (ucs4_t) c; return 1; } else { unsigned short wc = iso8859_6_2uni[c-0xa0]; if (wc != 0xfffd) { *pwc = (ucs4_t) wc; return 1; } } return RET_ILSEQ; } static const unsigned char iso8859_6_page00[16] = { 0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, /* 0xa8-0xaf */ }; static const unsigned char iso8859_6_page06[80] = { 0x00, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, /* 0x08-0x0f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0xbf, /* 0x18-0x1f */ 0x00, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x20-0x27 */ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x28-0x2f */ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x30-0x37 */ 0xd8, 0xd9, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x40-0x47 */ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x48-0x4f */ 0xf0, 0xf1, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ }; static int iso8859_6_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { unsigned char c = 0; if (wc < 0x00a0) { *r = wc; return 1; } else if (wc >= 0x00a0 && wc < 0x00b0) c = iso8859_6_page00[wc-0x00a0]; else if (wc >= 0x0608 && wc < 0x0658) c = iso8859_6_page06[wc-0x0608]; if (c != 0) { *r = c; return 1; } return RET_ILSEQ; } libX11-1.6.3/src/xlibi18n/lcUniConv/gb2312.h000064401431060000012000004632231247741723500202660ustar00alancstaff00002660200006 /* * GB2312.1980-0 */ static const unsigned short gb2312_2uni_page21[831] = { /* 0x21 */ 0x3000, 0x3001, 0x3002, 0x30fb, 0x02c9, 0x02c7, 0x00a8, 0x3003, 0x3005, 0x2015, 0xff5e, 0x2016, 0x2026, 0x2018, 0x2019, 0x201c, 0x201d, 0x3014, 0x3015, 0x3008, 0x3009, 0x300a, 0x300b, 0x300c, 0x300d, 0x300e, 0x300f, 0x3016, 0x3017, 0x3010, 0x3011, 0x00b1, 0x00d7, 0x00f7, 0x2236, 0x2227, 0x2228, 0x2211, 0x220f, 0x222a, 0x2229, 0x2208, 0x2237, 0x221a, 0x22a5, 0x2225, 0x2220, 0x2312, 0x2299, 0x222b, 0x222e, 0x2261, 0x224c, 0x2248, 0x223d, 0x221d, 0x2260, 0x226e, 0x226f, 0x2264, 0x2265, 0x221e, 0x2235, 0x2234, 0x2642, 0x2640, 0x00b0, 0x2032, 0x2033, 0x2103, 0xff04, 0x00a4, 0xffe0, 0xffe1, 0x2030, 0x00a7, 0x2116, 0x2606, 0x2605, 0x25cb, 0x25cf, 0x25ce, 0x25c7, 0x25c6, 0x25a1, 0x25a0, 0x25b3, 0x25b2, 0x203b, 0x2192, 0x2190, 0x2191, 0x2193, 0x3013, /* 0x22 */ 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x2488, 0x2489, 0x248a, 0x248b, 0x248c, 0x248d, 0x248e, 0x248f, 0x2490, 0x2491, 0x2492, 0x2493, 0x2494, 0x2495, 0x2496, 0x2497, 0x2498, 0x2499, 0x249a, 0x249b, 0x2474, 0x2475, 0x2476, 0x2477, 0x2478, 0x2479, 0x247a, 0x247b, 0x247c, 0x247d, 0x247e, 0x247f, 0x2480, 0x2481, 0x2482, 0x2483, 0x2484, 0x2485, 0x2486, 0x2487, 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469, 0xfffd, 0xfffd, 0x3220, 0x3221, 0x3222, 0x3223, 0x3224, 0x3225, 0x3226, 0x3227, 0x3228, 0x3229, 0xfffd, 0xfffd, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164, 0x2165, 0x2166, 0x2167, 0x2168, 0x2169, 0x216a, 0x216b, 0xfffd, 0xfffd, /* 0x23 */ 0xff01, 0xff02, 0xff03, 0xffe5, 0xff05, 0xff06, 0xff07, 0xff08, 0xff09, 0xff0a, 0xff0b, 0xff0c, 0xff0d, 0xff0e, 0xff0f, 0xff10, 0xff11, 0xff12, 0xff13, 0xff14, 0xff15, 0xff16, 0xff17, 0xff18, 0xff19, 0xff1a, 0xff1b, 0xff1c, 0xff1d, 0xff1e, 0xff1f, 0xff20, 0xff21, 0xff22, 0xff23, 0xff24, 0xff25, 0xff26, 0xff27, 0xff28, 0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e, 0xff2f, 0xff30, 0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37, 0xff38, 0xff39, 0xff3a, 0xff3b, 0xff3c, 0xff3d, 0xff3e, 0xff3f, 0xff40, 0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 0xff57, 0xff58, 0xff59, 0xff5a, 0xff5b, 0xff5c, 0xff5d, 0xffe3, /* 0x24 */ 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048, 0x3049, 0x304a, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058, 0x3059, 0x305a, 0x305b, 0x305c, 0x305d, 0x305e, 0x305f, 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, 0x3069, 0x306a, 0x306b, 0x306c, 0x306d, 0x306e, 0x306f, 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078, 0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e, 0x307f, 0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088, 0x3089, 0x308a, 0x308b, 0x308c, 0x308d, 0x308e, 0x308f, 0x3090, 0x3091, 0x3092, 0x3093, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0x25 */ 0x30a1, 0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7, 0x30a8, 0x30a9, 0x30aa, 0x30ab, 0x30ac, 0x30ad, 0x30ae, 0x30af, 0x30b0, 0x30b1, 0x30b2, 0x30b3, 0x30b4, 0x30b5, 0x30b6, 0x30b7, 0x30b8, 0x30b9, 0x30ba, 0x30bb, 0x30bc, 0x30bd, 0x30be, 0x30bf, 0x30c0, 0x30c1, 0x30c2, 0x30c3, 0x30c4, 0x30c5, 0x30c6, 0x30c7, 0x30c8, 0x30c9, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf, 0x30d0, 0x30d1, 0x30d2, 0x30d3, 0x30d4, 0x30d5, 0x30d6, 0x30d7, 0x30d8, 0x30d9, 0x30da, 0x30db, 0x30dc, 0x30dd, 0x30de, 0x30df, 0x30e0, 0x30e1, 0x30e2, 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7, 0x30e8, 0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ee, 0x30ef, 0x30f0, 0x30f1, 0x30f2, 0x30f3, 0x30f4, 0x30f5, 0x30f6, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0x26 */ 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, 0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0x27 */ 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, 0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0436, 0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0x28 */ 0x0101, 0x00e1, 0x01ce, 0x00e0, 0x0113, 0x00e9, 0x011b, 0x00e8, 0x012b, 0x00ed, 0x01d0, 0x00ec, 0x014d, 0x00f3, 0x01d2, 0x00f2, 0x016b, 0x00fa, 0x01d4, 0x00f9, 0x01d6, 0x01d8, 0x01da, 0x01dc, 0x00fc, 0x00ea, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x3105, 0x3106, 0x3107, 0x3108, 0x3109, 0x310a, 0x310b, 0x310c, 0x310d, 0x310e, 0x310f, 0x3110, 0x3111, 0x3112, 0x3113, 0x3114, 0x3115, 0x3116, 0x3117, 0x3118, 0x3119, 0x311a, 0x311b, 0x311c, 0x311d, 0x311e, 0x311f, 0x3120, 0x3121, 0x3122, 0x3123, 0x3124, 0x3125, 0x3126, 0x3127, 0x3128, 0x3129, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0x29 */ 0xfffd, 0xfffd, 0xfffd, 0x2500, 0x2501, 0x2502, 0x2503, 0x2504, 0x2505, 0x2506, 0x2507, 0x2508, 0x2509, 0x250a, 0x250b, 0x250c, 0x250d, 0x250e, 0x250f, 0x2510, 0x2511, 0x2512, 0x2513, 0x2514, 0x2515, 0x2516, 0x2517, 0x2518, 0x2519, 0x251a, 0x251b, 0x251c, 0x251d, 0x251e, 0x251f, 0x2520, 0x2521, 0x2522, 0x2523, 0x2524, 0x2525, 0x2526, 0x2527, 0x2528, 0x2529, 0x252a, 0x252b, 0x252c, 0x252d, 0x252e, 0x252f, 0x2530, 0x2531, 0x2532, 0x2533, 0x2534, 0x2535, 0x2536, 0x2537, 0x2538, 0x2539, 0x253a, 0x253b, 0x253c, 0x253d, 0x253e, 0x253f, 0x2540, 0x2541, 0x2542, 0x2543, 0x2544, 0x2545, 0x2546, 0x2547, 0x2548, 0x2549, 0x254a, 0x254b, }; static const unsigned short gb2312_2uni_page30[6768] = { /* 0x30 */ 0x554a, 0x963f, 0x57c3, 0x6328, 0x54ce, 0x5509, 0x54c0, 0x7691, 0x764c, 0x853c, 0x77ee, 0x827e, 0x788d, 0x7231, 0x9698, 0x978d, 0x6c28, 0x5b89, 0x4ffa, 0x6309, 0x6697, 0x5cb8, 0x80fa, 0x6848, 0x80ae, 0x6602, 0x76ce, 0x51f9, 0x6556, 0x71ac, 0x7ff1, 0x8884, 0x50b2, 0x5965, 0x61ca, 0x6fb3, 0x82ad, 0x634c, 0x6252, 0x53ed, 0x5427, 0x7b06, 0x516b, 0x75a4, 0x5df4, 0x62d4, 0x8dcb, 0x9776, 0x628a, 0x8019, 0x575d, 0x9738, 0x7f62, 0x7238, 0x767d, 0x67cf, 0x767e, 0x6446, 0x4f70, 0x8d25, 0x62dc, 0x7a17, 0x6591, 0x73ed, 0x642c, 0x6273, 0x822c, 0x9881, 0x677f, 0x7248, 0x626e, 0x62cc, 0x4f34, 0x74e3, 0x534a, 0x529e, 0x7eca, 0x90a6, 0x5e2e, 0x6886, 0x699c, 0x8180, 0x7ed1, 0x68d2, 0x78c5, 0x868c, 0x9551, 0x508d, 0x8c24, 0x82de, 0x80de, 0x5305, 0x8912, 0x5265, /* 0x31 */ 0x8584, 0x96f9, 0x4fdd, 0x5821, 0x9971, 0x5b9d, 0x62b1, 0x62a5, 0x66b4, 0x8c79, 0x9c8d, 0x7206, 0x676f, 0x7891, 0x60b2, 0x5351, 0x5317, 0x8f88, 0x80cc, 0x8d1d, 0x94a1, 0x500d, 0x72c8, 0x5907, 0x60eb, 0x7119, 0x88ab, 0x5954, 0x82ef, 0x672c, 0x7b28, 0x5d29, 0x7ef7, 0x752d, 0x6cf5, 0x8e66, 0x8ff8, 0x903c, 0x9f3b, 0x6bd4, 0x9119, 0x7b14, 0x5f7c, 0x78a7, 0x84d6, 0x853d, 0x6bd5, 0x6bd9, 0x6bd6, 0x5e01, 0x5e87, 0x75f9, 0x95ed, 0x655d, 0x5f0a, 0x5fc5, 0x8f9f, 0x58c1, 0x81c2, 0x907f, 0x965b, 0x97ad, 0x8fb9, 0x7f16, 0x8d2c, 0x6241, 0x4fbf, 0x53d8, 0x535e, 0x8fa8, 0x8fa9, 0x8fab, 0x904d, 0x6807, 0x5f6a, 0x8198, 0x8868, 0x9cd6, 0x618b, 0x522b, 0x762a, 0x5f6c, 0x658c, 0x6fd2, 0x6ee8, 0x5bbe, 0x6448, 0x5175, 0x51b0, 0x67c4, 0x4e19, 0x79c9, 0x997c, 0x70b3, /* 0x32 */ 0x75c5, 0x5e76, 0x73bb, 0x83e0, 0x64ad, 0x62e8, 0x94b5, 0x6ce2, 0x535a, 0x52c3, 0x640f, 0x94c2, 0x7b94, 0x4f2f, 0x5e1b, 0x8236, 0x8116, 0x818a, 0x6e24, 0x6cca, 0x9a73, 0x6355, 0x535c, 0x54fa, 0x8865, 0x57e0, 0x4e0d, 0x5e03, 0x6b65, 0x7c3f, 0x90e8, 0x6016, 0x64e6, 0x731c, 0x88c1, 0x6750, 0x624d, 0x8d22, 0x776c, 0x8e29, 0x91c7, 0x5f69, 0x83dc, 0x8521, 0x9910, 0x53c2, 0x8695, 0x6b8b, 0x60ed, 0x60e8, 0x707f, 0x82cd, 0x8231, 0x4ed3, 0x6ca7, 0x85cf, 0x64cd, 0x7cd9, 0x69fd, 0x66f9, 0x8349, 0x5395, 0x7b56, 0x4fa7, 0x518c, 0x6d4b, 0x5c42, 0x8e6d, 0x63d2, 0x53c9, 0x832c, 0x8336, 0x67e5, 0x78b4, 0x643d, 0x5bdf, 0x5c94, 0x5dee, 0x8be7, 0x62c6, 0x67f4, 0x8c7a, 0x6400, 0x63ba, 0x8749, 0x998b, 0x8c17, 0x7f20, 0x94f2, 0x4ea7, 0x9610, 0x98a4, 0x660c, 0x7316, /* 0x33 */ 0x573a, 0x5c1d, 0x5e38, 0x957f, 0x507f, 0x80a0, 0x5382, 0x655e, 0x7545, 0x5531, 0x5021, 0x8d85, 0x6284, 0x949e, 0x671d, 0x5632, 0x6f6e, 0x5de2, 0x5435, 0x7092, 0x8f66, 0x626f, 0x64a4, 0x63a3, 0x5f7b, 0x6f88, 0x90f4, 0x81e3, 0x8fb0, 0x5c18, 0x6668, 0x5ff1, 0x6c89, 0x9648, 0x8d81, 0x886c, 0x6491, 0x79f0, 0x57ce, 0x6a59, 0x6210, 0x5448, 0x4e58, 0x7a0b, 0x60e9, 0x6f84, 0x8bda, 0x627f, 0x901e, 0x9a8b, 0x79e4, 0x5403, 0x75f4, 0x6301, 0x5319, 0x6c60, 0x8fdf, 0x5f1b, 0x9a70, 0x803b, 0x9f7f, 0x4f88, 0x5c3a, 0x8d64, 0x7fc5, 0x65a5, 0x70bd, 0x5145, 0x51b2, 0x866b, 0x5d07, 0x5ba0, 0x62bd, 0x916c, 0x7574, 0x8e0c, 0x7a20, 0x6101, 0x7b79, 0x4ec7, 0x7ef8, 0x7785, 0x4e11, 0x81ed, 0x521d, 0x51fa, 0x6a71, 0x53a8, 0x8e87, 0x9504, 0x96cf, 0x6ec1, 0x9664, 0x695a, /* 0x34 */ 0x7840, 0x50a8, 0x77d7, 0x6410, 0x89e6, 0x5904, 0x63e3, 0x5ddd, 0x7a7f, 0x693d, 0x4f20, 0x8239, 0x5598, 0x4e32, 0x75ae, 0x7a97, 0x5e62, 0x5e8a, 0x95ef, 0x521b, 0x5439, 0x708a, 0x6376, 0x9524, 0x5782, 0x6625, 0x693f, 0x9187, 0x5507, 0x6df3, 0x7eaf, 0x8822, 0x6233, 0x7ef0, 0x75b5, 0x8328, 0x78c1, 0x96cc, 0x8f9e, 0x6148, 0x74f7, 0x8bcd, 0x6b64, 0x523a, 0x8d50, 0x6b21, 0x806a, 0x8471, 0x56f1, 0x5306, 0x4ece, 0x4e1b, 0x51d1, 0x7c97, 0x918b, 0x7c07, 0x4fc3, 0x8e7f, 0x7be1, 0x7a9c, 0x6467, 0x5d14, 0x50ac, 0x8106, 0x7601, 0x7cb9, 0x6dec, 0x7fe0, 0x6751, 0x5b58, 0x5bf8, 0x78cb, 0x64ae, 0x6413, 0x63aa, 0x632b, 0x9519, 0x642d, 0x8fbe, 0x7b54, 0x7629, 0x6253, 0x5927, 0x5446, 0x6b79, 0x50a3, 0x6234, 0x5e26, 0x6b86, 0x4ee3, 0x8d37, 0x888b, 0x5f85, 0x902e, /* 0x35 */ 0x6020, 0x803d, 0x62c5, 0x4e39, 0x5355, 0x90f8, 0x63b8, 0x80c6, 0x65e6, 0x6c2e, 0x4f46, 0x60ee, 0x6de1, 0x8bde, 0x5f39, 0x86cb, 0x5f53, 0x6321, 0x515a, 0x8361, 0x6863, 0x5200, 0x6363, 0x8e48, 0x5012, 0x5c9b, 0x7977, 0x5bfc, 0x5230, 0x7a3b, 0x60bc, 0x9053, 0x76d7, 0x5fb7, 0x5f97, 0x7684, 0x8e6c, 0x706f, 0x767b, 0x7b49, 0x77aa, 0x51f3, 0x9093, 0x5824, 0x4f4e, 0x6ef4, 0x8fea, 0x654c, 0x7b1b, 0x72c4, 0x6da4, 0x7fdf, 0x5ae1, 0x62b5, 0x5e95, 0x5730, 0x8482, 0x7b2c, 0x5e1d, 0x5f1f, 0x9012, 0x7f14, 0x98a0, 0x6382, 0x6ec7, 0x7898, 0x70b9, 0x5178, 0x975b, 0x57ab, 0x7535, 0x4f43, 0x7538, 0x5e97, 0x60e6, 0x5960, 0x6dc0, 0x6bbf, 0x7889, 0x53fc, 0x96d5, 0x51cb, 0x5201, 0x6389, 0x540a, 0x9493, 0x8c03, 0x8dcc, 0x7239, 0x789f, 0x8776, 0x8fed, 0x8c0d, 0x53e0, /* 0x36 */ 0x4e01, 0x76ef, 0x53ee, 0x9489, 0x9876, 0x9f0e, 0x952d, 0x5b9a, 0x8ba2, 0x4e22, 0x4e1c, 0x51ac, 0x8463, 0x61c2, 0x52a8, 0x680b, 0x4f97, 0x606b, 0x51bb, 0x6d1e, 0x515c, 0x6296, 0x6597, 0x9661, 0x8c46, 0x9017, 0x75d8, 0x90fd, 0x7763, 0x6bd2, 0x728a, 0x72ec, 0x8bfb, 0x5835, 0x7779, 0x8d4c, 0x675c, 0x9540, 0x809a, 0x5ea6, 0x6e21, 0x5992, 0x7aef, 0x77ed, 0x953b, 0x6bb5, 0x65ad, 0x7f0e, 0x5806, 0x5151, 0x961f, 0x5bf9, 0x58a9, 0x5428, 0x8e72, 0x6566, 0x987f, 0x56e4, 0x949d, 0x76fe, 0x9041, 0x6387, 0x54c6, 0x591a, 0x593a, 0x579b, 0x8eb2, 0x6735, 0x8dfa, 0x8235, 0x5241, 0x60f0, 0x5815, 0x86fe, 0x5ce8, 0x9e45, 0x4fc4, 0x989d, 0x8bb9, 0x5a25, 0x6076, 0x5384, 0x627c, 0x904f, 0x9102, 0x997f, 0x6069, 0x800c, 0x513f, 0x8033, 0x5c14, 0x9975, 0x6d31, 0x4e8c, /* 0x37 */ 0x8d30, 0x53d1, 0x7f5a, 0x7b4f, 0x4f10, 0x4e4f, 0x9600, 0x6cd5, 0x73d0, 0x85e9, 0x5e06, 0x756a, 0x7ffb, 0x6a0a, 0x77fe, 0x9492, 0x7e41, 0x51e1, 0x70e6, 0x53cd, 0x8fd4, 0x8303, 0x8d29, 0x72af, 0x996d, 0x6cdb, 0x574a, 0x82b3, 0x65b9, 0x80aa, 0x623f, 0x9632, 0x59a8, 0x4eff, 0x8bbf, 0x7eba, 0x653e, 0x83f2, 0x975e, 0x5561, 0x98de, 0x80a5, 0x532a, 0x8bfd, 0x5420, 0x80ba, 0x5e9f, 0x6cb8, 0x8d39, 0x82ac, 0x915a, 0x5429, 0x6c1b, 0x5206, 0x7eb7, 0x575f, 0x711a, 0x6c7e, 0x7c89, 0x594b, 0x4efd, 0x5fff, 0x6124, 0x7caa, 0x4e30, 0x5c01, 0x67ab, 0x8702, 0x5cf0, 0x950b, 0x98ce, 0x75af, 0x70fd, 0x9022, 0x51af, 0x7f1d, 0x8bbd, 0x5949, 0x51e4, 0x4f5b, 0x5426, 0x592b, 0x6577, 0x80a4, 0x5b75, 0x6276, 0x62c2, 0x8f90, 0x5e45, 0x6c1f, 0x7b26, 0x4f0f, 0x4fd8, 0x670d, /* 0x38 */ 0x6d6e, 0x6daa, 0x798f, 0x88b1, 0x5f17, 0x752b, 0x629a, 0x8f85, 0x4fef, 0x91dc, 0x65a7, 0x812f, 0x8151, 0x5e9c, 0x8150, 0x8d74, 0x526f, 0x8986, 0x8d4b, 0x590d, 0x5085, 0x4ed8, 0x961c, 0x7236, 0x8179, 0x8d1f, 0x5bcc, 0x8ba3, 0x9644, 0x5987, 0x7f1a, 0x5490, 0x5676, 0x560e, 0x8be5, 0x6539, 0x6982, 0x9499, 0x76d6, 0x6e89, 0x5e72, 0x7518, 0x6746, 0x67d1, 0x7aff, 0x809d, 0x8d76, 0x611f, 0x79c6, 0x6562, 0x8d63, 0x5188, 0x521a, 0x94a2, 0x7f38, 0x809b, 0x7eb2, 0x5c97, 0x6e2f, 0x6760, 0x7bd9, 0x768b, 0x9ad8, 0x818f, 0x7f94, 0x7cd5, 0x641e, 0x9550, 0x7a3f, 0x544a, 0x54e5, 0x6b4c, 0x6401, 0x6208, 0x9e3d, 0x80f3, 0x7599, 0x5272, 0x9769, 0x845b, 0x683c, 0x86e4, 0x9601, 0x9694, 0x94ec, 0x4e2a, 0x5404, 0x7ed9, 0x6839, 0x8ddf, 0x8015, 0x66f4, 0x5e9a, 0x7fb9, /* 0x39 */ 0x57c2, 0x803f, 0x6897, 0x5de5, 0x653b, 0x529f, 0x606d, 0x9f9a, 0x4f9b, 0x8eac, 0x516c, 0x5bab, 0x5f13, 0x5de9, 0x6c5e, 0x62f1, 0x8d21, 0x5171, 0x94a9, 0x52fe, 0x6c9f, 0x82df, 0x72d7, 0x57a2, 0x6784, 0x8d2d, 0x591f, 0x8f9c, 0x83c7, 0x5495, 0x7b8d, 0x4f30, 0x6cbd, 0x5b64, 0x59d1, 0x9f13, 0x53e4, 0x86ca, 0x9aa8, 0x8c37, 0x80a1, 0x6545, 0x987e, 0x56fa, 0x96c7, 0x522e, 0x74dc, 0x5250, 0x5be1, 0x6302, 0x8902, 0x4e56, 0x62d0, 0x602a, 0x68fa, 0x5173, 0x5b98, 0x51a0, 0x89c2, 0x7ba1, 0x9986, 0x7f50, 0x60ef, 0x704c, 0x8d2f, 0x5149, 0x5e7f, 0x901b, 0x7470, 0x89c4, 0x572d, 0x7845, 0x5f52, 0x9f9f, 0x95fa, 0x8f68, 0x9b3c, 0x8be1, 0x7678, 0x6842, 0x67dc, 0x8dea, 0x8d35, 0x523d, 0x8f8a, 0x6eda, 0x68cd, 0x9505, 0x90ed, 0x56fd, 0x679c, 0x88f9, 0x8fc7, 0x54c8, /* 0x3a */ 0x9ab8, 0x5b69, 0x6d77, 0x6c26, 0x4ea5, 0x5bb3, 0x9a87, 0x9163, 0x61a8, 0x90af, 0x97e9, 0x542b, 0x6db5, 0x5bd2, 0x51fd, 0x558a, 0x7f55, 0x7ff0, 0x64bc, 0x634d, 0x65f1, 0x61be, 0x608d, 0x710a, 0x6c57, 0x6c49, 0x592f, 0x676d, 0x822a, 0x58d5, 0x568e, 0x8c6a, 0x6beb, 0x90dd, 0x597d, 0x8017, 0x53f7, 0x6d69, 0x5475, 0x559d, 0x8377, 0x83cf, 0x6838, 0x79be, 0x548c, 0x4f55, 0x5408, 0x76d2, 0x8c89, 0x9602, 0x6cb3, 0x6db8, 0x8d6b, 0x8910, 0x9e64, 0x8d3a, 0x563f, 0x9ed1, 0x75d5, 0x5f88, 0x72e0, 0x6068, 0x54fc, 0x4ea8, 0x6a2a, 0x8861, 0x6052, 0x8f70, 0x54c4, 0x70d8, 0x8679, 0x9e3f, 0x6d2a, 0x5b8f, 0x5f18, 0x7ea2, 0x5589, 0x4faf, 0x7334, 0x543c, 0x539a, 0x5019, 0x540e, 0x547c, 0x4e4e, 0x5ffd, 0x745a, 0x58f6, 0x846b, 0x80e1, 0x8774, 0x72d0, 0x7cca, 0x6e56, /* 0x3b */ 0x5f27, 0x864e, 0x552c, 0x62a4, 0x4e92, 0x6caa, 0x6237, 0x82b1, 0x54d7, 0x534e, 0x733e, 0x6ed1, 0x753b, 0x5212, 0x5316, 0x8bdd, 0x69d0, 0x5f8a, 0x6000, 0x6dee, 0x574f, 0x6b22, 0x73af, 0x6853, 0x8fd8, 0x7f13, 0x6362, 0x60a3, 0x5524, 0x75ea, 0x8c62, 0x7115, 0x6da3, 0x5ba6, 0x5e7b, 0x8352, 0x614c, 0x9ec4, 0x78fa, 0x8757, 0x7c27, 0x7687, 0x51f0, 0x60f6, 0x714c, 0x6643, 0x5e4c, 0x604d, 0x8c0e, 0x7070, 0x6325, 0x8f89, 0x5fbd, 0x6062, 0x86d4, 0x56de, 0x6bc1, 0x6094, 0x6167, 0x5349, 0x60e0, 0x6666, 0x8d3f, 0x79fd, 0x4f1a, 0x70e9, 0x6c47, 0x8bb3, 0x8bf2, 0x7ed8, 0x8364, 0x660f, 0x5a5a, 0x9b42, 0x6d51, 0x6df7, 0x8c41, 0x6d3b, 0x4f19, 0x706b, 0x83b7, 0x6216, 0x60d1, 0x970d, 0x8d27, 0x7978, 0x51fb, 0x573e, 0x57fa, 0x673a, 0x7578, 0x7a3d, 0x79ef, 0x7b95, /* 0x3c */ 0x808c, 0x9965, 0x8ff9, 0x6fc0, 0x8ba5, 0x9e21, 0x59ec, 0x7ee9, 0x7f09, 0x5409, 0x6781, 0x68d8, 0x8f91, 0x7c4d, 0x96c6, 0x53ca, 0x6025, 0x75be, 0x6c72, 0x5373, 0x5ac9, 0x7ea7, 0x6324, 0x51e0, 0x810a, 0x5df1, 0x84df, 0x6280, 0x5180, 0x5b63, 0x4f0e, 0x796d, 0x5242, 0x60b8, 0x6d4e, 0x5bc4, 0x5bc2, 0x8ba1, 0x8bb0, 0x65e2, 0x5fcc, 0x9645, 0x5993, 0x7ee7, 0x7eaa, 0x5609, 0x67b7, 0x5939, 0x4f73, 0x5bb6, 0x52a0, 0x835a, 0x988a, 0x8d3e, 0x7532, 0x94be, 0x5047, 0x7a3c, 0x4ef7, 0x67b6, 0x9a7e, 0x5ac1, 0x6b7c, 0x76d1, 0x575a, 0x5c16, 0x7b3a, 0x95f4, 0x714e, 0x517c, 0x80a9, 0x8270, 0x5978, 0x7f04, 0x8327, 0x68c0, 0x67ec, 0x78b1, 0x7877, 0x62e3, 0x6361, 0x7b80, 0x4fed, 0x526a, 0x51cf, 0x8350, 0x69db, 0x9274, 0x8df5, 0x8d31, 0x89c1, 0x952e, 0x7bad, 0x4ef6, /* 0x3d */ 0x5065, 0x8230, 0x5251, 0x996f, 0x6e10, 0x6e85, 0x6da7, 0x5efa, 0x50f5, 0x59dc, 0x5c06, 0x6d46, 0x6c5f, 0x7586, 0x848b, 0x6868, 0x5956, 0x8bb2, 0x5320, 0x9171, 0x964d, 0x8549, 0x6912, 0x7901, 0x7126, 0x80f6, 0x4ea4, 0x90ca, 0x6d47, 0x9a84, 0x5a07, 0x56bc, 0x6405, 0x94f0, 0x77eb, 0x4fa5, 0x811a, 0x72e1, 0x89d2, 0x997a, 0x7f34, 0x7ede, 0x527f, 0x6559, 0x9175, 0x8f7f, 0x8f83, 0x53eb, 0x7a96, 0x63ed, 0x63a5, 0x7686, 0x79f8, 0x8857, 0x9636, 0x622a, 0x52ab, 0x8282, 0x6854, 0x6770, 0x6377, 0x776b, 0x7aed, 0x6d01, 0x7ed3, 0x89e3, 0x59d0, 0x6212, 0x85c9, 0x82a5, 0x754c, 0x501f, 0x4ecb, 0x75a5, 0x8beb, 0x5c4a, 0x5dfe, 0x7b4b, 0x65a4, 0x91d1, 0x4eca, 0x6d25, 0x895f, 0x7d27, 0x9526, 0x4ec5, 0x8c28, 0x8fdb, 0x9773, 0x664b, 0x7981, 0x8fd1, 0x70ec, 0x6d78, /* 0x3e */ 0x5c3d, 0x52b2, 0x8346, 0x5162, 0x830e, 0x775b, 0x6676, 0x9cb8, 0x4eac, 0x60ca, 0x7cbe, 0x7cb3, 0x7ecf, 0x4e95, 0x8b66, 0x666f, 0x9888, 0x9759, 0x5883, 0x656c, 0x955c, 0x5f84, 0x75c9, 0x9756, 0x7adf, 0x7ade, 0x51c0, 0x70af, 0x7a98, 0x63ea, 0x7a76, 0x7ea0, 0x7396, 0x97ed, 0x4e45, 0x7078, 0x4e5d, 0x9152, 0x53a9, 0x6551, 0x65e7, 0x81fc, 0x8205, 0x548e, 0x5c31, 0x759a, 0x97a0, 0x62d8, 0x72d9, 0x75bd, 0x5c45, 0x9a79, 0x83ca, 0x5c40, 0x5480, 0x77e9, 0x4e3e, 0x6cae, 0x805a, 0x62d2, 0x636e, 0x5de8, 0x5177, 0x8ddd, 0x8e1e, 0x952f, 0x4ff1, 0x53e5, 0x60e7, 0x70ac, 0x5267, 0x6350, 0x9e43, 0x5a1f, 0x5026, 0x7737, 0x5377, 0x7ee2, 0x6485, 0x652b, 0x6289, 0x6398, 0x5014, 0x7235, 0x89c9, 0x51b3, 0x8bc0, 0x7edd, 0x5747, 0x83cc, 0x94a7, 0x519b, 0x541b, 0x5cfb, /* 0x3f */ 0x4fca, 0x7ae3, 0x6d5a, 0x90e1, 0x9a8f, 0x5580, 0x5496, 0x5361, 0x54af, 0x5f00, 0x63e9, 0x6977, 0x51ef, 0x6168, 0x520a, 0x582a, 0x52d8, 0x574e, 0x780d, 0x770b, 0x5eb7, 0x6177, 0x7ce0, 0x625b, 0x6297, 0x4ea2, 0x7095, 0x8003, 0x62f7, 0x70e4, 0x9760, 0x5777, 0x82db, 0x67ef, 0x68f5, 0x78d5, 0x9897, 0x79d1, 0x58f3, 0x54b3, 0x53ef, 0x6e34, 0x514b, 0x523b, 0x5ba2, 0x8bfe, 0x80af, 0x5543, 0x57a6, 0x6073, 0x5751, 0x542d, 0x7a7a, 0x6050, 0x5b54, 0x63a7, 0x62a0, 0x53e3, 0x6263, 0x5bc7, 0x67af, 0x54ed, 0x7a9f, 0x82e6, 0x9177, 0x5e93, 0x88e4, 0x5938, 0x57ae, 0x630e, 0x8de8, 0x80ef, 0x5757, 0x7b77, 0x4fa9, 0x5feb, 0x5bbd, 0x6b3e, 0x5321, 0x7b50, 0x72c2, 0x6846, 0x77ff, 0x7736, 0x65f7, 0x51b5, 0x4e8f, 0x76d4, 0x5cbf, 0x7aa5, 0x8475, 0x594e, 0x9b41, 0x5080, /* 0x40 */ 0x9988, 0x6127, 0x6e83, 0x5764, 0x6606, 0x6346, 0x56f0, 0x62ec, 0x6269, 0x5ed3, 0x9614, 0x5783, 0x62c9, 0x5587, 0x8721, 0x814a, 0x8fa3, 0x5566, 0x83b1, 0x6765, 0x8d56, 0x84dd, 0x5a6a, 0x680f, 0x62e6, 0x7bee, 0x9611, 0x5170, 0x6f9c, 0x8c30, 0x63fd, 0x89c8, 0x61d2, 0x7f06, 0x70c2, 0x6ee5, 0x7405, 0x6994, 0x72fc, 0x5eca, 0x90ce, 0x6717, 0x6d6a, 0x635e, 0x52b3, 0x7262, 0x8001, 0x4f6c, 0x59e5, 0x916a, 0x70d9, 0x6d9d, 0x52d2, 0x4e50, 0x96f7, 0x956d, 0x857e, 0x78ca, 0x7d2f, 0x5121, 0x5792, 0x64c2, 0x808b, 0x7c7b, 0x6cea, 0x68f1, 0x695e, 0x51b7, 0x5398, 0x68a8, 0x7281, 0x9ece, 0x7bf1, 0x72f8, 0x79bb, 0x6f13, 0x7406, 0x674e, 0x91cc, 0x9ca4, 0x793c, 0x8389, 0x8354, 0x540f, 0x6817, 0x4e3d, 0x5389, 0x52b1, 0x783e, 0x5386, 0x5229, 0x5088, 0x4f8b, 0x4fd0, /* 0x41 */ 0x75e2, 0x7acb, 0x7c92, 0x6ca5, 0x96b6, 0x529b, 0x7483, 0x54e9, 0x4fe9, 0x8054, 0x83b2, 0x8fde, 0x9570, 0x5ec9, 0x601c, 0x6d9f, 0x5e18, 0x655b, 0x8138, 0x94fe, 0x604b, 0x70bc, 0x7ec3, 0x7cae, 0x51c9, 0x6881, 0x7cb1, 0x826f, 0x4e24, 0x8f86, 0x91cf, 0x667e, 0x4eae, 0x8c05, 0x64a9, 0x804a, 0x50da, 0x7597, 0x71ce, 0x5be5, 0x8fbd, 0x6f66, 0x4e86, 0x6482, 0x9563, 0x5ed6, 0x6599, 0x5217, 0x88c2, 0x70c8, 0x52a3, 0x730e, 0x7433, 0x6797, 0x78f7, 0x9716, 0x4e34, 0x90bb, 0x9cde, 0x6dcb, 0x51db, 0x8d41, 0x541d, 0x62ce, 0x73b2, 0x83f1, 0x96f6, 0x9f84, 0x94c3, 0x4f36, 0x7f9a, 0x51cc, 0x7075, 0x9675, 0x5cad, 0x9886, 0x53e6, 0x4ee4, 0x6e9c, 0x7409, 0x69b4, 0x786b, 0x998f, 0x7559, 0x5218, 0x7624, 0x6d41, 0x67f3, 0x516d, 0x9f99, 0x804b, 0x5499, 0x7b3c, 0x7abf, /* 0x42 */ 0x9686, 0x5784, 0x62e2, 0x9647, 0x697c, 0x5a04, 0x6402, 0x7bd3, 0x6f0f, 0x964b, 0x82a6, 0x5362, 0x9885, 0x5e90, 0x7089, 0x63b3, 0x5364, 0x864f, 0x9c81, 0x9e93, 0x788c, 0x9732, 0x8def, 0x8d42, 0x9e7f, 0x6f5e, 0x7984, 0x5f55, 0x9646, 0x622e, 0x9a74, 0x5415, 0x94dd, 0x4fa3, 0x65c5, 0x5c65, 0x5c61, 0x7f15, 0x8651, 0x6c2f, 0x5f8b, 0x7387, 0x6ee4, 0x7eff, 0x5ce6, 0x631b, 0x5b6a, 0x6ee6, 0x5375, 0x4e71, 0x63a0, 0x7565, 0x62a1, 0x8f6e, 0x4f26, 0x4ed1, 0x6ca6, 0x7eb6, 0x8bba, 0x841d, 0x87ba, 0x7f57, 0x903b, 0x9523, 0x7ba9, 0x9aa1, 0x88f8, 0x843d, 0x6d1b, 0x9a86, 0x7edc, 0x5988, 0x9ebb, 0x739b, 0x7801, 0x8682, 0x9a6c, 0x9a82, 0x561b, 0x5417, 0x57cb, 0x4e70, 0x9ea6, 0x5356, 0x8fc8, 0x8109, 0x7792, 0x9992, 0x86ee, 0x6ee1, 0x8513, 0x66fc, 0x6162, 0x6f2b, /* 0x43 */ 0x8c29, 0x8292, 0x832b, 0x76f2, 0x6c13, 0x5fd9, 0x83bd, 0x732b, 0x8305, 0x951a, 0x6bdb, 0x77db, 0x94c6, 0x536f, 0x8302, 0x5192, 0x5e3d, 0x8c8c, 0x8d38, 0x4e48, 0x73ab, 0x679a, 0x6885, 0x9176, 0x9709, 0x7164, 0x6ca1, 0x7709, 0x5a92, 0x9541, 0x6bcf, 0x7f8e, 0x6627, 0x5bd0, 0x59b9, 0x5a9a, 0x95e8, 0x95f7, 0x4eec, 0x840c, 0x8499, 0x6aac, 0x76df, 0x9530, 0x731b, 0x68a6, 0x5b5f, 0x772f, 0x919a, 0x9761, 0x7cdc, 0x8ff7, 0x8c1c, 0x5f25, 0x7c73, 0x79d8, 0x89c5, 0x6ccc, 0x871c, 0x5bc6, 0x5e42, 0x68c9, 0x7720, 0x7ef5, 0x5195, 0x514d, 0x52c9, 0x5a29, 0x7f05, 0x9762, 0x82d7, 0x63cf, 0x7784, 0x85d0, 0x79d2, 0x6e3a, 0x5e99, 0x5999, 0x8511, 0x706d, 0x6c11, 0x62bf, 0x76bf, 0x654f, 0x60af, 0x95fd, 0x660e, 0x879f, 0x9e23, 0x94ed, 0x540d, 0x547d, 0x8c2c, 0x6478, /* 0x44 */ 0x6479, 0x8611, 0x6a21, 0x819c, 0x78e8, 0x6469, 0x9b54, 0x62b9, 0x672b, 0x83ab, 0x58a8, 0x9ed8, 0x6cab, 0x6f20, 0x5bde, 0x964c, 0x8c0b, 0x725f, 0x67d0, 0x62c7, 0x7261, 0x4ea9, 0x59c6, 0x6bcd, 0x5893, 0x66ae, 0x5e55, 0x52df, 0x6155, 0x6728, 0x76ee, 0x7766, 0x7267, 0x7a46, 0x62ff, 0x54ea, 0x5450, 0x94a0, 0x90a3, 0x5a1c, 0x7eb3, 0x6c16, 0x4e43, 0x5976, 0x8010, 0x5948, 0x5357, 0x7537, 0x96be, 0x56ca, 0x6320, 0x8111, 0x607c, 0x95f9, 0x6dd6, 0x5462, 0x9981, 0x5185, 0x5ae9, 0x80fd, 0x59ae, 0x9713, 0x502a, 0x6ce5, 0x5c3c, 0x62df, 0x4f60, 0x533f, 0x817b, 0x9006, 0x6eba, 0x852b, 0x62c8, 0x5e74, 0x78be, 0x64b5, 0x637b, 0x5ff5, 0x5a18, 0x917f, 0x9e1f, 0x5c3f, 0x634f, 0x8042, 0x5b7d, 0x556e, 0x954a, 0x954d, 0x6d85, 0x60a8, 0x67e0, 0x72de, 0x51dd, 0x5b81, /* 0x45 */ 0x62e7, 0x6cde, 0x725b, 0x626d, 0x94ae, 0x7ebd, 0x8113, 0x6d53, 0x519c, 0x5f04, 0x5974, 0x52aa, 0x6012, 0x5973, 0x6696, 0x8650, 0x759f, 0x632a, 0x61e6, 0x7cef, 0x8bfa, 0x54e6, 0x6b27, 0x9e25, 0x6bb4, 0x85d5, 0x5455, 0x5076, 0x6ca4, 0x556a, 0x8db4, 0x722c, 0x5e15, 0x6015, 0x7436, 0x62cd, 0x6392, 0x724c, 0x5f98, 0x6e43, 0x6d3e, 0x6500, 0x6f58, 0x76d8, 0x78d0, 0x76fc, 0x7554, 0x5224, 0x53db, 0x4e53, 0x5e9e, 0x65c1, 0x802a, 0x80d6, 0x629b, 0x5486, 0x5228, 0x70ae, 0x888d, 0x8dd1, 0x6ce1, 0x5478, 0x80da, 0x57f9, 0x88f4, 0x8d54, 0x966a, 0x914d, 0x4f69, 0x6c9b, 0x55b7, 0x76c6, 0x7830, 0x62a8, 0x70f9, 0x6f8e, 0x5f6d, 0x84ec, 0x68da, 0x787c, 0x7bf7, 0x81a8, 0x670b, 0x9e4f, 0x6367, 0x78b0, 0x576f, 0x7812, 0x9739, 0x6279, 0x62ab, 0x5288, 0x7435, 0x6bd7, /* 0x46 */ 0x5564, 0x813e, 0x75b2, 0x76ae, 0x5339, 0x75de, 0x50fb, 0x5c41, 0x8b6c, 0x7bc7, 0x504f, 0x7247, 0x9a97, 0x98d8, 0x6f02, 0x74e2, 0x7968, 0x6487, 0x77a5, 0x62fc, 0x9891, 0x8d2b, 0x54c1, 0x8058, 0x4e52, 0x576a, 0x82f9, 0x840d, 0x5e73, 0x51ed, 0x74f6, 0x8bc4, 0x5c4f, 0x5761, 0x6cfc, 0x9887, 0x5a46, 0x7834, 0x9b44, 0x8feb, 0x7c95, 0x5256, 0x6251, 0x94fa, 0x4ec6, 0x8386, 0x8461, 0x83e9, 0x84b2, 0x57d4, 0x6734, 0x5703, 0x666e, 0x6d66, 0x8c31, 0x66dd, 0x7011, 0x671f, 0x6b3a, 0x6816, 0x621a, 0x59bb, 0x4e03, 0x51c4, 0x6f06, 0x67d2, 0x6c8f, 0x5176, 0x68cb, 0x5947, 0x6b67, 0x7566, 0x5d0e, 0x8110, 0x9f50, 0x65d7, 0x7948, 0x7941, 0x9a91, 0x8d77, 0x5c82, 0x4e5e, 0x4f01, 0x542f, 0x5951, 0x780c, 0x5668, 0x6c14, 0x8fc4, 0x5f03, 0x6c7d, 0x6ce3, 0x8bab, 0x6390, /* 0x47 */ 0x6070, 0x6d3d, 0x7275, 0x6266, 0x948e, 0x94c5, 0x5343, 0x8fc1, 0x7b7e, 0x4edf, 0x8c26, 0x4e7e, 0x9ed4, 0x94b1, 0x94b3, 0x524d, 0x6f5c, 0x9063, 0x6d45, 0x8c34, 0x5811, 0x5d4c, 0x6b20, 0x6b49, 0x67aa, 0x545b, 0x8154, 0x7f8c, 0x5899, 0x8537, 0x5f3a, 0x62a2, 0x6a47, 0x9539, 0x6572, 0x6084, 0x6865, 0x77a7, 0x4e54, 0x4fa8, 0x5de7, 0x9798, 0x64ac, 0x7fd8, 0x5ced, 0x4fcf, 0x7a8d, 0x5207, 0x8304, 0x4e14, 0x602f, 0x7a83, 0x94a6, 0x4fb5, 0x4eb2, 0x79e6, 0x7434, 0x52e4, 0x82b9, 0x64d2, 0x79bd, 0x5bdd, 0x6c81, 0x9752, 0x8f7b, 0x6c22, 0x503e, 0x537f, 0x6e05, 0x64ce, 0x6674, 0x6c30, 0x60c5, 0x9877, 0x8bf7, 0x5e86, 0x743c, 0x7a77, 0x79cb, 0x4e18, 0x90b1, 0x7403, 0x6c42, 0x56da, 0x914b, 0x6cc5, 0x8d8b, 0x533a, 0x86c6, 0x66f2, 0x8eaf, 0x5c48, 0x9a71, 0x6e20, /* 0x48 */ 0x53d6, 0x5a36, 0x9f8b, 0x8da3, 0x53bb, 0x5708, 0x98a7, 0x6743, 0x919b, 0x6cc9, 0x5168, 0x75ca, 0x62f3, 0x72ac, 0x5238, 0x529d, 0x7f3a, 0x7094, 0x7638, 0x5374, 0x9e4a, 0x69b7, 0x786e, 0x96c0, 0x88d9, 0x7fa4, 0x7136, 0x71c3, 0x5189, 0x67d3, 0x74e4, 0x58e4, 0x6518, 0x56b7, 0x8ba9, 0x9976, 0x6270, 0x7ed5, 0x60f9, 0x70ed, 0x58ec, 0x4ec1, 0x4eba, 0x5fcd, 0x97e7, 0x4efb, 0x8ba4, 0x5203, 0x598a, 0x7eab, 0x6254, 0x4ecd, 0x65e5, 0x620e, 0x8338, 0x84c9, 0x8363, 0x878d, 0x7194, 0x6eb6, 0x5bb9, 0x7ed2, 0x5197, 0x63c9, 0x67d4, 0x8089, 0x8339, 0x8815, 0x5112, 0x5b7a, 0x5982, 0x8fb1, 0x4e73, 0x6c5d, 0x5165, 0x8925, 0x8f6f, 0x962e, 0x854a, 0x745e, 0x9510, 0x95f0, 0x6da6, 0x82e5, 0x5f31, 0x6492, 0x6d12, 0x8428, 0x816e, 0x9cc3, 0x585e, 0x8d5b, 0x4e09, 0x53c1, /* 0x49 */ 0x4f1e, 0x6563, 0x6851, 0x55d3, 0x4e27, 0x6414, 0x9a9a, 0x626b, 0x5ac2, 0x745f, 0x8272, 0x6da9, 0x68ee, 0x50e7, 0x838e, 0x7802, 0x6740, 0x5239, 0x6c99, 0x7eb1, 0x50bb, 0x5565, 0x715e, 0x7b5b, 0x6652, 0x73ca, 0x82eb, 0x6749, 0x5c71, 0x5220, 0x717d, 0x886b, 0x95ea, 0x9655, 0x64c5, 0x8d61, 0x81b3, 0x5584, 0x6c55, 0x6247, 0x7f2e, 0x5892, 0x4f24, 0x5546, 0x8d4f, 0x664c, 0x4e0a, 0x5c1a, 0x88f3, 0x68a2, 0x634e, 0x7a0d, 0x70e7, 0x828d, 0x52fa, 0x97f6, 0x5c11, 0x54e8, 0x90b5, 0x7ecd, 0x5962, 0x8d4a, 0x86c7, 0x820c, 0x820d, 0x8d66, 0x6444, 0x5c04, 0x6151, 0x6d89, 0x793e, 0x8bbe, 0x7837, 0x7533, 0x547b, 0x4f38, 0x8eab, 0x6df1, 0x5a20, 0x7ec5, 0x795e, 0x6c88, 0x5ba1, 0x5a76, 0x751a, 0x80be, 0x614e, 0x6e17, 0x58f0, 0x751f, 0x7525, 0x7272, 0x5347, 0x7ef3, /* 0x4a */ 0x7701, 0x76db, 0x5269, 0x80dc, 0x5723, 0x5e08, 0x5931, 0x72ee, 0x65bd, 0x6e7f, 0x8bd7, 0x5c38, 0x8671, 0x5341, 0x77f3, 0x62fe, 0x65f6, 0x4ec0, 0x98df, 0x8680, 0x5b9e, 0x8bc6, 0x53f2, 0x77e2, 0x4f7f, 0x5c4e, 0x9a76, 0x59cb, 0x5f0f, 0x793a, 0x58eb, 0x4e16, 0x67ff, 0x4e8b, 0x62ed, 0x8a93, 0x901d, 0x52bf, 0x662f, 0x55dc, 0x566c, 0x9002, 0x4ed5, 0x4f8d, 0x91ca, 0x9970, 0x6c0f, 0x5e02, 0x6043, 0x5ba4, 0x89c6, 0x8bd5, 0x6536, 0x624b, 0x9996, 0x5b88, 0x5bff, 0x6388, 0x552e, 0x53d7, 0x7626, 0x517d, 0x852c, 0x67a2, 0x68b3, 0x6b8a, 0x6292, 0x8f93, 0x53d4, 0x8212, 0x6dd1, 0x758f, 0x4e66, 0x8d4e, 0x5b70, 0x719f, 0x85af, 0x6691, 0x66d9, 0x7f72, 0x8700, 0x9ecd, 0x9f20, 0x5c5e, 0x672f, 0x8ff0, 0x6811, 0x675f, 0x620d, 0x7ad6, 0x5885, 0x5eb6, 0x6570, 0x6f31, /* 0x4b */ 0x6055, 0x5237, 0x800d, 0x6454, 0x8870, 0x7529, 0x5e05, 0x6813, 0x62f4, 0x971c, 0x53cc, 0x723d, 0x8c01, 0x6c34, 0x7761, 0x7a0e, 0x542e, 0x77ac, 0x987a, 0x821c, 0x8bf4, 0x7855, 0x6714, 0x70c1, 0x65af, 0x6495, 0x5636, 0x601d, 0x79c1, 0x53f8, 0x4e1d, 0x6b7b, 0x8086, 0x5bfa, 0x55e3, 0x56db, 0x4f3a, 0x4f3c, 0x9972, 0x5df3, 0x677e, 0x8038, 0x6002, 0x9882, 0x9001, 0x5b8b, 0x8bbc, 0x8bf5, 0x641c, 0x8258, 0x64de, 0x55fd, 0x82cf, 0x9165, 0x4fd7, 0x7d20, 0x901f, 0x7c9f, 0x50f3, 0x5851, 0x6eaf, 0x5bbf, 0x8bc9, 0x8083, 0x9178, 0x849c, 0x7b97, 0x867d, 0x968b, 0x968f, 0x7ee5, 0x9ad3, 0x788e, 0x5c81, 0x7a57, 0x9042, 0x96a7, 0x795f, 0x5b59, 0x635f, 0x7b0b, 0x84d1, 0x68ad, 0x5506, 0x7f29, 0x7410, 0x7d22, 0x9501, 0x6240, 0x584c, 0x4ed6, 0x5b83, 0x5979, 0x5854, /* 0x4c */ 0x736d, 0x631e, 0x8e4b, 0x8e0f, 0x80ce, 0x82d4, 0x62ac, 0x53f0, 0x6cf0, 0x915e, 0x592a, 0x6001, 0x6c70, 0x574d, 0x644a, 0x8d2a, 0x762b, 0x6ee9, 0x575b, 0x6a80, 0x75f0, 0x6f6d, 0x8c2d, 0x8c08, 0x5766, 0x6bef, 0x8892, 0x78b3, 0x63a2, 0x53f9, 0x70ad, 0x6c64, 0x5858, 0x642a, 0x5802, 0x68e0, 0x819b, 0x5510, 0x7cd6, 0x5018, 0x8eba, 0x6dcc, 0x8d9f, 0x70eb, 0x638f, 0x6d9b, 0x6ed4, 0x7ee6, 0x8404, 0x6843, 0x9003, 0x6dd8, 0x9676, 0x8ba8, 0x5957, 0x7279, 0x85e4, 0x817e, 0x75bc, 0x8a8a, 0x68af, 0x5254, 0x8e22, 0x9511, 0x63d0, 0x9898, 0x8e44, 0x557c, 0x4f53, 0x66ff, 0x568f, 0x60d5, 0x6d95, 0x5243, 0x5c49, 0x5929, 0x6dfb, 0x586b, 0x7530, 0x751c, 0x606c, 0x8214, 0x8146, 0x6311, 0x6761, 0x8fe2, 0x773a, 0x8df3, 0x8d34, 0x94c1, 0x5e16, 0x5385, 0x542c, 0x70c3, /* 0x4d */ 0x6c40, 0x5ef7, 0x505c, 0x4ead, 0x5ead, 0x633a, 0x8247, 0x901a, 0x6850, 0x916e, 0x77b3, 0x540c, 0x94dc, 0x5f64, 0x7ae5, 0x6876, 0x6345, 0x7b52, 0x7edf, 0x75db, 0x5077, 0x6295, 0x5934, 0x900f, 0x51f8, 0x79c3, 0x7a81, 0x56fe, 0x5f92, 0x9014, 0x6d82, 0x5c60, 0x571f, 0x5410, 0x5154, 0x6e4d, 0x56e2, 0x63a8, 0x9893, 0x817f, 0x8715, 0x892a, 0x9000, 0x541e, 0x5c6f, 0x81c0, 0x62d6, 0x6258, 0x8131, 0x9e35, 0x9640, 0x9a6e, 0x9a7c, 0x692d, 0x59a5, 0x62d3, 0x553e, 0x6316, 0x54c7, 0x86d9, 0x6d3c, 0x5a03, 0x74e6, 0x889c, 0x6b6a, 0x5916, 0x8c4c, 0x5f2f, 0x6e7e, 0x73a9, 0x987d, 0x4e38, 0x70f7, 0x5b8c, 0x7897, 0x633d, 0x665a, 0x7696, 0x60cb, 0x5b9b, 0x5a49, 0x4e07, 0x8155, 0x6c6a, 0x738b, 0x4ea1, 0x6789, 0x7f51, 0x5f80, 0x65fa, 0x671b, 0x5fd8, 0x5984, 0x5a01, /* 0x4e */ 0x5dcd, 0x5fae, 0x5371, 0x97e6, 0x8fdd, 0x6845, 0x56f4, 0x552f, 0x60df, 0x4e3a, 0x6f4d, 0x7ef4, 0x82c7, 0x840e, 0x59d4, 0x4f1f, 0x4f2a, 0x5c3e, 0x7eac, 0x672a, 0x851a, 0x5473, 0x754f, 0x80c3, 0x5582, 0x9b4f, 0x4f4d, 0x6e2d, 0x8c13, 0x5c09, 0x6170, 0x536b, 0x761f, 0x6e29, 0x868a, 0x6587, 0x95fb, 0x7eb9, 0x543b, 0x7a33, 0x7d0a, 0x95ee, 0x55e1, 0x7fc1, 0x74ee, 0x631d, 0x8717, 0x6da1, 0x7a9d, 0x6211, 0x65a1, 0x5367, 0x63e1, 0x6c83, 0x5deb, 0x545c, 0x94a8, 0x4e4c, 0x6c61, 0x8bec, 0x5c4b, 0x65e0, 0x829c, 0x68a7, 0x543e, 0x5434, 0x6bcb, 0x6b66, 0x4e94, 0x6342, 0x5348, 0x821e, 0x4f0d, 0x4fae, 0x575e, 0x620a, 0x96fe, 0x6664, 0x7269, 0x52ff, 0x52a1, 0x609f, 0x8bef, 0x6614, 0x7199, 0x6790, 0x897f, 0x7852, 0x77fd, 0x6670, 0x563b, 0x5438, 0x9521, 0x727a, /* 0x4f */ 0x7a00, 0x606f, 0x5e0c, 0x6089, 0x819d, 0x5915, 0x60dc, 0x7184, 0x70ef, 0x6eaa, 0x6c50, 0x7280, 0x6a84, 0x88ad, 0x5e2d, 0x4e60, 0x5ab3, 0x559c, 0x94e3, 0x6d17, 0x7cfb, 0x9699, 0x620f, 0x7ec6, 0x778e, 0x867e, 0x5323, 0x971e, 0x8f96, 0x6687, 0x5ce1, 0x4fa0, 0x72ed, 0x4e0b, 0x53a6, 0x590f, 0x5413, 0x6380, 0x9528, 0x5148, 0x4ed9, 0x9c9c, 0x7ea4, 0x54b8, 0x8d24, 0x8854, 0x8237, 0x95f2, 0x6d8e, 0x5f26, 0x5acc, 0x663e, 0x9669, 0x73b0, 0x732e, 0x53bf, 0x817a, 0x9985, 0x7fa1, 0x5baa, 0x9677, 0x9650, 0x7ebf, 0x76f8, 0x53a2, 0x9576, 0x9999, 0x7bb1, 0x8944, 0x6e58, 0x4e61, 0x7fd4, 0x7965, 0x8be6, 0x60f3, 0x54cd, 0x4eab, 0x9879, 0x5df7, 0x6a61, 0x50cf, 0x5411, 0x8c61, 0x8427, 0x785d, 0x9704, 0x524a, 0x54ee, 0x56a3, 0x9500, 0x6d88, 0x5bb5, 0x6dc6, 0x6653, /* 0x50 */ 0x5c0f, 0x5b5d, 0x6821, 0x8096, 0x5578, 0x7b11, 0x6548, 0x6954, 0x4e9b, 0x6b47, 0x874e, 0x978b, 0x534f, 0x631f, 0x643a, 0x90aa, 0x659c, 0x80c1, 0x8c10, 0x5199, 0x68b0, 0x5378, 0x87f9, 0x61c8, 0x6cc4, 0x6cfb, 0x8c22, 0x5c51, 0x85aa, 0x82af, 0x950c, 0x6b23, 0x8f9b, 0x65b0, 0x5ffb, 0x5fc3, 0x4fe1, 0x8845, 0x661f, 0x8165, 0x7329, 0x60fa, 0x5174, 0x5211, 0x578b, 0x5f62, 0x90a2, 0x884c, 0x9192, 0x5e78, 0x674f, 0x6027, 0x59d3, 0x5144, 0x51f6, 0x80f8, 0x5308, 0x6c79, 0x96c4, 0x718a, 0x4f11, 0x4fee, 0x7f9e, 0x673d, 0x55c5, 0x9508, 0x79c0, 0x8896, 0x7ee3, 0x589f, 0x620c, 0x9700, 0x865a, 0x5618, 0x987b, 0x5f90, 0x8bb8, 0x84c4, 0x9157, 0x53d9, 0x65ed, 0x5e8f, 0x755c, 0x6064, 0x7d6e, 0x5a7f, 0x7eea, 0x7eed, 0x8f69, 0x55a7, 0x5ba3, 0x60ac, 0x65cb, 0x7384, /* 0x51 */ 0x9009, 0x7663, 0x7729, 0x7eda, 0x9774, 0x859b, 0x5b66, 0x7a74, 0x96ea, 0x8840, 0x52cb, 0x718f, 0x5faa, 0x65ec, 0x8be2, 0x5bfb, 0x9a6f, 0x5de1, 0x6b89, 0x6c5b, 0x8bad, 0x8baf, 0x900a, 0x8fc5, 0x538b, 0x62bc, 0x9e26, 0x9e2d, 0x5440, 0x4e2b, 0x82bd, 0x7259, 0x869c, 0x5d16, 0x8859, 0x6daf, 0x96c5, 0x54d1, 0x4e9a, 0x8bb6, 0x7109, 0x54bd, 0x9609, 0x70df, 0x6df9, 0x76d0, 0x4e25, 0x7814, 0x8712, 0x5ca9, 0x5ef6, 0x8a00, 0x989c, 0x960e, 0x708e, 0x6cbf, 0x5944, 0x63a9, 0x773c, 0x884d, 0x6f14, 0x8273, 0x5830, 0x71d5, 0x538c, 0x781a, 0x96c1, 0x5501, 0x5f66, 0x7130, 0x5bb4, 0x8c1a, 0x9a8c, 0x6b83, 0x592e, 0x9e2f, 0x79e7, 0x6768, 0x626c, 0x4f6f, 0x75a1, 0x7f8a, 0x6d0b, 0x9633, 0x6c27, 0x4ef0, 0x75d2, 0x517b, 0x6837, 0x6f3e, 0x9080, 0x8170, 0x5996, 0x7476, /* 0x52 */ 0x6447, 0x5c27, 0x9065, 0x7a91, 0x8c23, 0x59da, 0x54ac, 0x8200, 0x836f, 0x8981, 0x8000, 0x6930, 0x564e, 0x8036, 0x7237, 0x91ce, 0x51b6, 0x4e5f, 0x9875, 0x6396, 0x4e1a, 0x53f6, 0x66f3, 0x814b, 0x591c, 0x6db2, 0x4e00, 0x58f9, 0x533b, 0x63d6, 0x94f1, 0x4f9d, 0x4f0a, 0x8863, 0x9890, 0x5937, 0x9057, 0x79fb, 0x4eea, 0x80f0, 0x7591, 0x6c82, 0x5b9c, 0x59e8, 0x5f5d, 0x6905, 0x8681, 0x501a, 0x5df2, 0x4e59, 0x77e3, 0x4ee5, 0x827a, 0x6291, 0x6613, 0x9091, 0x5c79, 0x4ebf, 0x5f79, 0x81c6, 0x9038, 0x8084, 0x75ab, 0x4ea6, 0x88d4, 0x610f, 0x6bc5, 0x5fc6, 0x4e49, 0x76ca, 0x6ea2, 0x8be3, 0x8bae, 0x8c0a, 0x8bd1, 0x5f02, 0x7ffc, 0x7fcc, 0x7ece, 0x8335, 0x836b, 0x56e0, 0x6bb7, 0x97f3, 0x9634, 0x59fb, 0x541f, 0x94f6, 0x6deb, 0x5bc5, 0x996e, 0x5c39, 0x5f15, 0x9690, /* 0x53 */ 0x5370, 0x82f1, 0x6a31, 0x5a74, 0x9e70, 0x5e94, 0x7f28, 0x83b9, 0x8424, 0x8425, 0x8367, 0x8747, 0x8fce, 0x8d62, 0x76c8, 0x5f71, 0x9896, 0x786c, 0x6620, 0x54df, 0x62e5, 0x4f63, 0x81c3, 0x75c8, 0x5eb8, 0x96cd, 0x8e0a, 0x86f9, 0x548f, 0x6cf3, 0x6d8c, 0x6c38, 0x607f, 0x52c7, 0x7528, 0x5e7d, 0x4f18, 0x60a0, 0x5fe7, 0x5c24, 0x7531, 0x90ae, 0x94c0, 0x72b9, 0x6cb9, 0x6e38, 0x9149, 0x6709, 0x53cb, 0x53f3, 0x4f51, 0x91c9, 0x8bf1, 0x53c8, 0x5e7c, 0x8fc2, 0x6de4, 0x4e8e, 0x76c2, 0x6986, 0x865e, 0x611a, 0x8206, 0x4f59, 0x4fde, 0x903e, 0x9c7c, 0x6109, 0x6e1d, 0x6e14, 0x9685, 0x4e88, 0x5a31, 0x96e8, 0x4e0e, 0x5c7f, 0x79b9, 0x5b87, 0x8bed, 0x7fbd, 0x7389, 0x57df, 0x828b, 0x90c1, 0x5401, 0x9047, 0x55bb, 0x5cea, 0x5fa1, 0x6108, 0x6b32, 0x72f1, 0x80b2, 0x8a89, /* 0x54 */ 0x6d74, 0x5bd3, 0x88d5, 0x9884, 0x8c6b, 0x9a6d, 0x9e33, 0x6e0a, 0x51a4, 0x5143, 0x57a3, 0x8881, 0x539f, 0x63f4, 0x8f95, 0x56ed, 0x5458, 0x5706, 0x733f, 0x6e90, 0x7f18, 0x8fdc, 0x82d1, 0x613f, 0x6028, 0x9662, 0x66f0, 0x7ea6, 0x8d8a, 0x8dc3, 0x94a5, 0x5cb3, 0x7ca4, 0x6708, 0x60a6, 0x9605, 0x8018, 0x4e91, 0x90e7, 0x5300, 0x9668, 0x5141, 0x8fd0, 0x8574, 0x915d, 0x6655, 0x97f5, 0x5b55, 0x531d, 0x7838, 0x6742, 0x683d, 0x54c9, 0x707e, 0x5bb0, 0x8f7d, 0x518d, 0x5728, 0x54b1, 0x6512, 0x6682, 0x8d5e, 0x8d43, 0x810f, 0x846c, 0x906d, 0x7cdf, 0x51ff, 0x85fb, 0x67a3, 0x65e9, 0x6fa1, 0x86a4, 0x8e81, 0x566a, 0x9020, 0x7682, 0x7076, 0x71e5, 0x8d23, 0x62e9, 0x5219, 0x6cfd, 0x8d3c, 0x600e, 0x589e, 0x618e, 0x66fe, 0x8d60, 0x624e, 0x55b3, 0x6e23, 0x672d, 0x8f67, /* 0x55 */ 0x94e1, 0x95f8, 0x7728, 0x6805, 0x69a8, 0x548b, 0x4e4d, 0x70b8, 0x8bc8, 0x6458, 0x658b, 0x5b85, 0x7a84, 0x503a, 0x5be8, 0x77bb, 0x6be1, 0x8a79, 0x7c98, 0x6cbe, 0x76cf, 0x65a9, 0x8f97, 0x5d2d, 0x5c55, 0x8638, 0x6808, 0x5360, 0x6218, 0x7ad9, 0x6e5b, 0x7efd, 0x6a1f, 0x7ae0, 0x5f70, 0x6f33, 0x5f20, 0x638c, 0x6da8, 0x6756, 0x4e08, 0x5e10, 0x8d26, 0x4ed7, 0x80c0, 0x7634, 0x969c, 0x62db, 0x662d, 0x627e, 0x6cbc, 0x8d75, 0x7167, 0x7f69, 0x5146, 0x8087, 0x53ec, 0x906e, 0x6298, 0x54f2, 0x86f0, 0x8f99, 0x8005, 0x9517, 0x8517, 0x8fd9, 0x6d59, 0x73cd, 0x659f, 0x771f, 0x7504, 0x7827, 0x81fb, 0x8d1e, 0x9488, 0x4fa6, 0x6795, 0x75b9, 0x8bca, 0x9707, 0x632f, 0x9547, 0x9635, 0x84b8, 0x6323, 0x7741, 0x5f81, 0x72f0, 0x4e89, 0x6014, 0x6574, 0x62ef, 0x6b63, 0x653f, /* 0x56 */ 0x5e27, 0x75c7, 0x90d1, 0x8bc1, 0x829d, 0x679d, 0x652f, 0x5431, 0x8718, 0x77e5, 0x80a2, 0x8102, 0x6c41, 0x4e4b, 0x7ec7, 0x804c, 0x76f4, 0x690d, 0x6b96, 0x6267, 0x503c, 0x4f84, 0x5740, 0x6307, 0x6b62, 0x8dbe, 0x53ea, 0x65e8, 0x7eb8, 0x5fd7, 0x631a, 0x63b7, 0x81f3, 0x81f4, 0x7f6e, 0x5e1c, 0x5cd9, 0x5236, 0x667a, 0x79e9, 0x7a1a, 0x8d28, 0x7099, 0x75d4, 0x6ede, 0x6cbb, 0x7a92, 0x4e2d, 0x76c5, 0x5fe0, 0x949f, 0x8877, 0x7ec8, 0x79cd, 0x80bf, 0x91cd, 0x4ef2, 0x4f17, 0x821f, 0x5468, 0x5dde, 0x6d32, 0x8bcc, 0x7ca5, 0x8f74, 0x8098, 0x5e1a, 0x5492, 0x76b1, 0x5b99, 0x663c, 0x9aa4, 0x73e0, 0x682a, 0x86db, 0x6731, 0x732a, 0x8bf8, 0x8bdb, 0x9010, 0x7af9, 0x70db, 0x716e, 0x62c4, 0x77a9, 0x5631, 0x4e3b, 0x8457, 0x67f1, 0x52a9, 0x86c0, 0x8d2e, 0x94f8, 0x7b51, /* 0x57 */ 0x4f4f, 0x6ce8, 0x795d, 0x9a7b, 0x6293, 0x722a, 0x62fd, 0x4e13, 0x7816, 0x8f6c, 0x64b0, 0x8d5a, 0x7bc6, 0x6869, 0x5e84, 0x88c5, 0x5986, 0x649e, 0x58ee, 0x72b6, 0x690e, 0x9525, 0x8ffd, 0x8d58, 0x5760, 0x7f00, 0x8c06, 0x51c6, 0x6349, 0x62d9, 0x5353, 0x684c, 0x7422, 0x8301, 0x914c, 0x5544, 0x7740, 0x707c, 0x6d4a, 0x5179, 0x54a8, 0x8d44, 0x59ff, 0x6ecb, 0x6dc4, 0x5b5c, 0x7d2b, 0x4ed4, 0x7c7d, 0x6ed3, 0x5b50, 0x81ea, 0x6e0d, 0x5b57, 0x9b03, 0x68d5, 0x8e2a, 0x5b97, 0x7efc, 0x603b, 0x7eb5, 0x90b9, 0x8d70, 0x594f, 0x63cd, 0x79df, 0x8db3, 0x5352, 0x65cf, 0x7956, 0x8bc5, 0x963b, 0x7ec4, 0x94bb, 0x7e82, 0x5634, 0x9189, 0x6700, 0x7f6a, 0x5c0a, 0x9075, 0x6628, 0x5de6, 0x4f50, 0x67de, 0x505a, 0x4f5c, 0x5750, 0x5ea7, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, /* 0x58 */ 0x4e8d, 0x4e0c, 0x5140, 0x4e10, 0x5eff, 0x5345, 0x4e15, 0x4e98, 0x4e1e, 0x9b32, 0x5b6c, 0x5669, 0x4e28, 0x79ba, 0x4e3f, 0x5315, 0x4e47, 0x592d, 0x723b, 0x536e, 0x6c10, 0x56df, 0x80e4, 0x9997, 0x6bd3, 0x777e, 0x9f17, 0x4e36, 0x4e9f, 0x9f10, 0x4e5c, 0x4e69, 0x4e93, 0x8288, 0x5b5b, 0x556c, 0x560f, 0x4ec4, 0x538d, 0x539d, 0x53a3, 0x53a5, 0x53ae, 0x9765, 0x8d5d, 0x531a, 0x53f5, 0x5326, 0x532e, 0x533e, 0x8d5c, 0x5366, 0x5363, 0x5202, 0x5208, 0x520e, 0x522d, 0x5233, 0x523f, 0x5240, 0x524c, 0x525e, 0x5261, 0x525c, 0x84af, 0x527d, 0x5282, 0x5281, 0x5290, 0x5293, 0x5182, 0x7f54, 0x4ebb, 0x4ec3, 0x4ec9, 0x4ec2, 0x4ee8, 0x4ee1, 0x4eeb, 0x4ede, 0x4f1b, 0x4ef3, 0x4f22, 0x4f64, 0x4ef5, 0x4f25, 0x4f27, 0x4f09, 0x4f2b, 0x4f5e, 0x4f67, 0x6538, 0x4f5a, 0x4f5d, /* 0x59 */ 0x4f5f, 0x4f57, 0x4f32, 0x4f3d, 0x4f76, 0x4f74, 0x4f91, 0x4f89, 0x4f83, 0x4f8f, 0x4f7e, 0x4f7b, 0x4faa, 0x4f7c, 0x4fac, 0x4f94, 0x4fe6, 0x4fe8, 0x4fea, 0x4fc5, 0x4fda, 0x4fe3, 0x4fdc, 0x4fd1, 0x4fdf, 0x4ff8, 0x5029, 0x504c, 0x4ff3, 0x502c, 0x500f, 0x502e, 0x502d, 0x4ffe, 0x501c, 0x500c, 0x5025, 0x5028, 0x507e, 0x5043, 0x5055, 0x5048, 0x504e, 0x506c, 0x507b, 0x50a5, 0x50a7, 0x50a9, 0x50ba, 0x50d6, 0x5106, 0x50ed, 0x50ec, 0x50e6, 0x50ee, 0x5107, 0x510b, 0x4edd, 0x6c3d, 0x4f58, 0x4f65, 0x4fce, 0x9fa0, 0x6c46, 0x7c74, 0x516e, 0x5dfd, 0x9ec9, 0x9998, 0x5181, 0x5914, 0x52f9, 0x530d, 0x8a07, 0x5310, 0x51eb, 0x5919, 0x5155, 0x4ea0, 0x5156, 0x4eb3, 0x886e, 0x88a4, 0x4eb5, 0x8114, 0x88d2, 0x7980, 0x5b34, 0x8803, 0x7fb8, 0x51ab, 0x51b1, 0x51bd, 0x51bc, /* 0x5a */ 0x51c7, 0x5196, 0x51a2, 0x51a5, 0x8ba0, 0x8ba6, 0x8ba7, 0x8baa, 0x8bb4, 0x8bb5, 0x8bb7, 0x8bc2, 0x8bc3, 0x8bcb, 0x8bcf, 0x8bce, 0x8bd2, 0x8bd3, 0x8bd4, 0x8bd6, 0x8bd8, 0x8bd9, 0x8bdc, 0x8bdf, 0x8be0, 0x8be4, 0x8be8, 0x8be9, 0x8bee, 0x8bf0, 0x8bf3, 0x8bf6, 0x8bf9, 0x8bfc, 0x8bff, 0x8c00, 0x8c02, 0x8c04, 0x8c07, 0x8c0c, 0x8c0f, 0x8c11, 0x8c12, 0x8c14, 0x8c15, 0x8c16, 0x8c19, 0x8c1b, 0x8c18, 0x8c1d, 0x8c1f, 0x8c20, 0x8c21, 0x8c25, 0x8c27, 0x8c2a, 0x8c2b, 0x8c2e, 0x8c2f, 0x8c32, 0x8c33, 0x8c35, 0x8c36, 0x5369, 0x537a, 0x961d, 0x9622, 0x9621, 0x9631, 0x962a, 0x963d, 0x963c, 0x9642, 0x9649, 0x9654, 0x965f, 0x9667, 0x966c, 0x9672, 0x9674, 0x9688, 0x968d, 0x9697, 0x96b0, 0x9097, 0x909b, 0x909d, 0x9099, 0x90ac, 0x90a1, 0x90b4, 0x90b3, 0x90b6, 0x90ba, /* 0x5b */ 0x90b8, 0x90b0, 0x90cf, 0x90c5, 0x90be, 0x90d0, 0x90c4, 0x90c7, 0x90d3, 0x90e6, 0x90e2, 0x90dc, 0x90d7, 0x90db, 0x90eb, 0x90ef, 0x90fe, 0x9104, 0x9122, 0x911e, 0x9123, 0x9131, 0x912f, 0x9139, 0x9143, 0x9146, 0x520d, 0x5942, 0x52a2, 0x52ac, 0x52ad, 0x52be, 0x54ff, 0x52d0, 0x52d6, 0x52f0, 0x53df, 0x71ee, 0x77cd, 0x5ef4, 0x51f5, 0x51fc, 0x9b2f, 0x53b6, 0x5f01, 0x755a, 0x5def, 0x574c, 0x57a9, 0x57a1, 0x587e, 0x58bc, 0x58c5, 0x58d1, 0x5729, 0x572c, 0x572a, 0x5733, 0x5739, 0x572e, 0x572f, 0x575c, 0x573b, 0x5742, 0x5769, 0x5785, 0x576b, 0x5786, 0x577c, 0x577b, 0x5768, 0x576d, 0x5776, 0x5773, 0x57ad, 0x57a4, 0x578c, 0x57b2, 0x57cf, 0x57a7, 0x57b4, 0x5793, 0x57a0, 0x57d5, 0x57d8, 0x57da, 0x57d9, 0x57d2, 0x57b8, 0x57f4, 0x57ef, 0x57f8, 0x57e4, 0x57dd, /* 0x5c */ 0x580b, 0x580d, 0x57fd, 0x57ed, 0x5800, 0x581e, 0x5819, 0x5844, 0x5820, 0x5865, 0x586c, 0x5881, 0x5889, 0x589a, 0x5880, 0x99a8, 0x9f19, 0x61ff, 0x8279, 0x827d, 0x827f, 0x828f, 0x828a, 0x82a8, 0x8284, 0x828e, 0x8291, 0x8297, 0x8299, 0x82ab, 0x82b8, 0x82be, 0x82b0, 0x82c8, 0x82ca, 0x82e3, 0x8298, 0x82b7, 0x82ae, 0x82cb, 0x82cc, 0x82c1, 0x82a9, 0x82b4, 0x82a1, 0x82aa, 0x829f, 0x82c4, 0x82ce, 0x82a4, 0x82e1, 0x8309, 0x82f7, 0x82e4, 0x830f, 0x8307, 0x82dc, 0x82f4, 0x82d2, 0x82d8, 0x830c, 0x82fb, 0x82d3, 0x8311, 0x831a, 0x8306, 0x8314, 0x8315, 0x82e0, 0x82d5, 0x831c, 0x8351, 0x835b, 0x835c, 0x8308, 0x8392, 0x833c, 0x8334, 0x8331, 0x839b, 0x835e, 0x832f, 0x834f, 0x8347, 0x8343, 0x835f, 0x8340, 0x8317, 0x8360, 0x832d, 0x833a, 0x8333, 0x8366, 0x8365, /* 0x5d */ 0x8368, 0x831b, 0x8369, 0x836c, 0x836a, 0x836d, 0x836e, 0x83b0, 0x8378, 0x83b3, 0x83b4, 0x83a0, 0x83aa, 0x8393, 0x839c, 0x8385, 0x837c, 0x83b6, 0x83a9, 0x837d, 0x83b8, 0x837b, 0x8398, 0x839e, 0x83a8, 0x83ba, 0x83bc, 0x83c1, 0x8401, 0x83e5, 0x83d8, 0x5807, 0x8418, 0x840b, 0x83dd, 0x83fd, 0x83d6, 0x841c, 0x8438, 0x8411, 0x8406, 0x83d4, 0x83df, 0x840f, 0x8403, 0x83f8, 0x83f9, 0x83ea, 0x83c5, 0x83c0, 0x8426, 0x83f0, 0x83e1, 0x845c, 0x8451, 0x845a, 0x8459, 0x8473, 0x8487, 0x8488, 0x847a, 0x8489, 0x8478, 0x843c, 0x8446, 0x8469, 0x8476, 0x848c, 0x848e, 0x8431, 0x846d, 0x84c1, 0x84cd, 0x84d0, 0x84e6, 0x84bd, 0x84d3, 0x84ca, 0x84bf, 0x84ba, 0x84e0, 0x84a1, 0x84b9, 0x84b4, 0x8497, 0x84e5, 0x84e3, 0x850c, 0x750d, 0x8538, 0x84f0, 0x8539, 0x851f, 0x853a, /* 0x5e */ 0x8556, 0x853b, 0x84ff, 0x84fc, 0x8559, 0x8548, 0x8568, 0x8564, 0x855e, 0x857a, 0x77a2, 0x8543, 0x8572, 0x857b, 0x85a4, 0x85a8, 0x8587, 0x858f, 0x8579, 0x85ae, 0x859c, 0x8585, 0x85b9, 0x85b7, 0x85b0, 0x85d3, 0x85c1, 0x85dc, 0x85ff, 0x8627, 0x8605, 0x8629, 0x8616, 0x863c, 0x5efe, 0x5f08, 0x593c, 0x5941, 0x8037, 0x5955, 0x595a, 0x5958, 0x530f, 0x5c22, 0x5c25, 0x5c2c, 0x5c34, 0x624c, 0x626a, 0x629f, 0x62bb, 0x62ca, 0x62da, 0x62d7, 0x62ee, 0x6322, 0x62f6, 0x6339, 0x634b, 0x6343, 0x63ad, 0x63f6, 0x6371, 0x637a, 0x638e, 0x63b4, 0x636d, 0x63ac, 0x638a, 0x6369, 0x63ae, 0x63bc, 0x63f2, 0x63f8, 0x63e0, 0x63ff, 0x63c4, 0x63de, 0x63ce, 0x6452, 0x63c6, 0x63be, 0x6445, 0x6441, 0x640b, 0x641b, 0x6420, 0x640c, 0x6426, 0x6421, 0x645e, 0x6484, 0x646d, 0x6496, /* 0x5f */ 0x647a, 0x64b7, 0x64b8, 0x6499, 0x64ba, 0x64c0, 0x64d0, 0x64d7, 0x64e4, 0x64e2, 0x6509, 0x6525, 0x652e, 0x5f0b, 0x5fd2, 0x7519, 0x5f11, 0x535f, 0x53f1, 0x53fd, 0x53e9, 0x53e8, 0x53fb, 0x5412, 0x5416, 0x5406, 0x544b, 0x5452, 0x5453, 0x5454, 0x5456, 0x5443, 0x5421, 0x5457, 0x5459, 0x5423, 0x5432, 0x5482, 0x5494, 0x5477, 0x5471, 0x5464, 0x549a, 0x549b, 0x5484, 0x5476, 0x5466, 0x549d, 0x54d0, 0x54ad, 0x54c2, 0x54b4, 0x54d2, 0x54a7, 0x54a6, 0x54d3, 0x54d4, 0x5472, 0x54a3, 0x54d5, 0x54bb, 0x54bf, 0x54cc, 0x54d9, 0x54da, 0x54dc, 0x54a9, 0x54aa, 0x54a4, 0x54dd, 0x54cf, 0x54de, 0x551b, 0x54e7, 0x5520, 0x54fd, 0x5514, 0x54f3, 0x5522, 0x5523, 0x550f, 0x5511, 0x5527, 0x552a, 0x5567, 0x558f, 0x55b5, 0x5549, 0x556d, 0x5541, 0x5555, 0x553f, 0x5550, 0x553c, /* 0x60 */ 0x5537, 0x5556, 0x5575, 0x5576, 0x5577, 0x5533, 0x5530, 0x555c, 0x558b, 0x55d2, 0x5583, 0x55b1, 0x55b9, 0x5588, 0x5581, 0x559f, 0x557e, 0x55d6, 0x5591, 0x557b, 0x55df, 0x55bd, 0x55be, 0x5594, 0x5599, 0x55ea, 0x55f7, 0x55c9, 0x561f, 0x55d1, 0x55eb, 0x55ec, 0x55d4, 0x55e6, 0x55dd, 0x55c4, 0x55ef, 0x55e5, 0x55f2, 0x55f3, 0x55cc, 0x55cd, 0x55e8, 0x55f5, 0x55e4, 0x8f94, 0x561e, 0x5608, 0x560c, 0x5601, 0x5624, 0x5623, 0x55fe, 0x5600, 0x5627, 0x562d, 0x5658, 0x5639, 0x5657, 0x562c, 0x564d, 0x5662, 0x5659, 0x565c, 0x564c, 0x5654, 0x5686, 0x5664, 0x5671, 0x566b, 0x567b, 0x567c, 0x5685, 0x5693, 0x56af, 0x56d4, 0x56d7, 0x56dd, 0x56e1, 0x56f5, 0x56eb, 0x56f9, 0x56ff, 0x5704, 0x570a, 0x5709, 0x571c, 0x5e0f, 0x5e19, 0x5e14, 0x5e11, 0x5e31, 0x5e3b, 0x5e3c, /* 0x61 */ 0x5e37, 0x5e44, 0x5e54, 0x5e5b, 0x5e5e, 0x5e61, 0x5c8c, 0x5c7a, 0x5c8d, 0x5c90, 0x5c96, 0x5c88, 0x5c98, 0x5c99, 0x5c91, 0x5c9a, 0x5c9c, 0x5cb5, 0x5ca2, 0x5cbd, 0x5cac, 0x5cab, 0x5cb1, 0x5ca3, 0x5cc1, 0x5cb7, 0x5cc4, 0x5cd2, 0x5ce4, 0x5ccb, 0x5ce5, 0x5d02, 0x5d03, 0x5d27, 0x5d26, 0x5d2e, 0x5d24, 0x5d1e, 0x5d06, 0x5d1b, 0x5d58, 0x5d3e, 0x5d34, 0x5d3d, 0x5d6c, 0x5d5b, 0x5d6f, 0x5d5d, 0x5d6b, 0x5d4b, 0x5d4a, 0x5d69, 0x5d74, 0x5d82, 0x5d99, 0x5d9d, 0x8c73, 0x5db7, 0x5dc5, 0x5f73, 0x5f77, 0x5f82, 0x5f87, 0x5f89, 0x5f8c, 0x5f95, 0x5f99, 0x5f9c, 0x5fa8, 0x5fad, 0x5fb5, 0x5fbc, 0x8862, 0x5f61, 0x72ad, 0x72b0, 0x72b4, 0x72b7, 0x72b8, 0x72c3, 0x72c1, 0x72ce, 0x72cd, 0x72d2, 0x72e8, 0x72ef, 0x72e9, 0x72f2, 0x72f4, 0x72f7, 0x7301, 0x72f3, 0x7303, 0x72fa, /* 0x62 */ 0x72fb, 0x7317, 0x7313, 0x7321, 0x730a, 0x731e, 0x731d, 0x7315, 0x7322, 0x7339, 0x7325, 0x732c, 0x7338, 0x7331, 0x7350, 0x734d, 0x7357, 0x7360, 0x736c, 0x736f, 0x737e, 0x821b, 0x5925, 0x98e7, 0x5924, 0x5902, 0x9963, 0x9967, 0x9968, 0x9969, 0x996a, 0x996b, 0x996c, 0x9974, 0x9977, 0x997d, 0x9980, 0x9984, 0x9987, 0x998a, 0x998d, 0x9990, 0x9991, 0x9993, 0x9994, 0x9995, 0x5e80, 0x5e91, 0x5e8b, 0x5e96, 0x5ea5, 0x5ea0, 0x5eb9, 0x5eb5, 0x5ebe, 0x5eb3, 0x8d53, 0x5ed2, 0x5ed1, 0x5edb, 0x5ee8, 0x5eea, 0x81ba, 0x5fc4, 0x5fc9, 0x5fd6, 0x5fcf, 0x6003, 0x5fee, 0x6004, 0x5fe1, 0x5fe4, 0x5ffe, 0x6005, 0x6006, 0x5fea, 0x5fed, 0x5ff8, 0x6019, 0x6035, 0x6026, 0x601b, 0x600f, 0x600d, 0x6029, 0x602b, 0x600a, 0x603f, 0x6021, 0x6078, 0x6079, 0x607b, 0x607a, 0x6042, /* 0x63 */ 0x606a, 0x607d, 0x6096, 0x609a, 0x60ad, 0x609d, 0x6083, 0x6092, 0x608c, 0x609b, 0x60ec, 0x60bb, 0x60b1, 0x60dd, 0x60d8, 0x60c6, 0x60da, 0x60b4, 0x6120, 0x6126, 0x6115, 0x6123, 0x60f4, 0x6100, 0x610e, 0x612b, 0x614a, 0x6175, 0x61ac, 0x6194, 0x61a7, 0x61b7, 0x61d4, 0x61f5, 0x5fdd, 0x96b3, 0x95e9, 0x95eb, 0x95f1, 0x95f3, 0x95f5, 0x95f6, 0x95fc, 0x95fe, 0x9603, 0x9604, 0x9606, 0x9608, 0x960a, 0x960b, 0x960c, 0x960d, 0x960f, 0x9612, 0x9615, 0x9616, 0x9617, 0x9619, 0x961a, 0x4e2c, 0x723f, 0x6215, 0x6c35, 0x6c54, 0x6c5c, 0x6c4a, 0x6ca3, 0x6c85, 0x6c90, 0x6c94, 0x6c8c, 0x6c68, 0x6c69, 0x6c74, 0x6c76, 0x6c86, 0x6ca9, 0x6cd0, 0x6cd4, 0x6cad, 0x6cf7, 0x6cf8, 0x6cf1, 0x6cd7, 0x6cb2, 0x6ce0, 0x6cd6, 0x6cfa, 0x6ceb, 0x6cee, 0x6cb1, 0x6cd3, 0x6cef, 0x6cfe, /* 0x64 */ 0x6d39, 0x6d27, 0x6d0c, 0x6d43, 0x6d48, 0x6d07, 0x6d04, 0x6d19, 0x6d0e, 0x6d2b, 0x6d4d, 0x6d2e, 0x6d35, 0x6d1a, 0x6d4f, 0x6d52, 0x6d54, 0x6d33, 0x6d91, 0x6d6f, 0x6d9e, 0x6da0, 0x6d5e, 0x6d93, 0x6d94, 0x6d5c, 0x6d60, 0x6d7c, 0x6d63, 0x6e1a, 0x6dc7, 0x6dc5, 0x6dde, 0x6e0e, 0x6dbf, 0x6de0, 0x6e11, 0x6de6, 0x6ddd, 0x6dd9, 0x6e16, 0x6dab, 0x6e0c, 0x6dae, 0x6e2b, 0x6e6e, 0x6e4e, 0x6e6b, 0x6eb2, 0x6e5f, 0x6e86, 0x6e53, 0x6e54, 0x6e32, 0x6e25, 0x6e44, 0x6edf, 0x6eb1, 0x6e98, 0x6ee0, 0x6f2d, 0x6ee2, 0x6ea5, 0x6ea7, 0x6ebd, 0x6ebb, 0x6eb7, 0x6ed7, 0x6eb4, 0x6ecf, 0x6e8f, 0x6ec2, 0x6e9f, 0x6f62, 0x6f46, 0x6f47, 0x6f24, 0x6f15, 0x6ef9, 0x6f2f, 0x6f36, 0x6f4b, 0x6f74, 0x6f2a, 0x6f09, 0x6f29, 0x6f89, 0x6f8d, 0x6f8c, 0x6f78, 0x6f72, 0x6f7c, 0x6f7a, 0x6fd1, /* 0x65 */ 0x6fc9, 0x6fa7, 0x6fb9, 0x6fb6, 0x6fc2, 0x6fe1, 0x6fee, 0x6fde, 0x6fe0, 0x6fef, 0x701a, 0x7023, 0x701b, 0x7039, 0x7035, 0x704f, 0x705e, 0x5b80, 0x5b84, 0x5b95, 0x5b93, 0x5ba5, 0x5bb8, 0x752f, 0x9a9e, 0x6434, 0x5be4, 0x5bee, 0x8930, 0x5bf0, 0x8e47, 0x8b07, 0x8fb6, 0x8fd3, 0x8fd5, 0x8fe5, 0x8fee, 0x8fe4, 0x8fe9, 0x8fe6, 0x8ff3, 0x8fe8, 0x9005, 0x9004, 0x900b, 0x9026, 0x9011, 0x900d, 0x9016, 0x9021, 0x9035, 0x9036, 0x902d, 0x902f, 0x9044, 0x9051, 0x9052, 0x9050, 0x9068, 0x9058, 0x9062, 0x905b, 0x66b9, 0x9074, 0x907d, 0x9082, 0x9088, 0x9083, 0x908b, 0x5f50, 0x5f57, 0x5f56, 0x5f58, 0x5c3b, 0x54ab, 0x5c50, 0x5c59, 0x5b71, 0x5c63, 0x5c66, 0x7fbc, 0x5f2a, 0x5f29, 0x5f2d, 0x8274, 0x5f3c, 0x9b3b, 0x5c6e, 0x5981, 0x5983, 0x598d, 0x59a9, 0x59aa, 0x59a3, /* 0x66 */ 0x5997, 0x59ca, 0x59ab, 0x599e, 0x59a4, 0x59d2, 0x59b2, 0x59af, 0x59d7, 0x59be, 0x5a05, 0x5a06, 0x59dd, 0x5a08, 0x59e3, 0x59d8, 0x59f9, 0x5a0c, 0x5a09, 0x5a32, 0x5a34, 0x5a11, 0x5a23, 0x5a13, 0x5a40, 0x5a67, 0x5a4a, 0x5a55, 0x5a3c, 0x5a62, 0x5a75, 0x80ec, 0x5aaa, 0x5a9b, 0x5a77, 0x5a7a, 0x5abe, 0x5aeb, 0x5ab2, 0x5ad2, 0x5ad4, 0x5ab8, 0x5ae0, 0x5ae3, 0x5af1, 0x5ad6, 0x5ae6, 0x5ad8, 0x5adc, 0x5b09, 0x5b17, 0x5b16, 0x5b32, 0x5b37, 0x5b40, 0x5c15, 0x5c1c, 0x5b5a, 0x5b65, 0x5b73, 0x5b51, 0x5b53, 0x5b62, 0x9a75, 0x9a77, 0x9a78, 0x9a7a, 0x9a7f, 0x9a7d, 0x9a80, 0x9a81, 0x9a85, 0x9a88, 0x9a8a, 0x9a90, 0x9a92, 0x9a93, 0x9a96, 0x9a98, 0x9a9b, 0x9a9c, 0x9a9d, 0x9a9f, 0x9aa0, 0x9aa2, 0x9aa3, 0x9aa5, 0x9aa7, 0x7e9f, 0x7ea1, 0x7ea3, 0x7ea5, 0x7ea8, 0x7ea9, /* 0x67 */ 0x7ead, 0x7eb0, 0x7ebe, 0x7ec0, 0x7ec1, 0x7ec2, 0x7ec9, 0x7ecb, 0x7ecc, 0x7ed0, 0x7ed4, 0x7ed7, 0x7edb, 0x7ee0, 0x7ee1, 0x7ee8, 0x7eeb, 0x7eee, 0x7eef, 0x7ef1, 0x7ef2, 0x7f0d, 0x7ef6, 0x7efa, 0x7efb, 0x7efe, 0x7f01, 0x7f02, 0x7f03, 0x7f07, 0x7f08, 0x7f0b, 0x7f0c, 0x7f0f, 0x7f11, 0x7f12, 0x7f17, 0x7f19, 0x7f1c, 0x7f1b, 0x7f1f, 0x7f21, 0x7f22, 0x7f23, 0x7f24, 0x7f25, 0x7f26, 0x7f27, 0x7f2a, 0x7f2b, 0x7f2c, 0x7f2d, 0x7f2f, 0x7f30, 0x7f31, 0x7f32, 0x7f33, 0x7f35, 0x5e7a, 0x757f, 0x5ddb, 0x753e, 0x9095, 0x738e, 0x7391, 0x73ae, 0x73a2, 0x739f, 0x73cf, 0x73c2, 0x73d1, 0x73b7, 0x73b3, 0x73c0, 0x73c9, 0x73c8, 0x73e5, 0x73d9, 0x987c, 0x740a, 0x73e9, 0x73e7, 0x73de, 0x73ba, 0x73f2, 0x740f, 0x742a, 0x745b, 0x7426, 0x7425, 0x7428, 0x7430, 0x742e, 0x742c, /* 0x68 */ 0x741b, 0x741a, 0x7441, 0x745c, 0x7457, 0x7455, 0x7459, 0x7477, 0x746d, 0x747e, 0x749c, 0x748e, 0x7480, 0x7481, 0x7487, 0x748b, 0x749e, 0x74a8, 0x74a9, 0x7490, 0x74a7, 0x74d2, 0x74ba, 0x97ea, 0x97eb, 0x97ec, 0x674c, 0x6753, 0x675e, 0x6748, 0x6769, 0x67a5, 0x6787, 0x676a, 0x6773, 0x6798, 0x67a7, 0x6775, 0x67a8, 0x679e, 0x67ad, 0x678b, 0x6777, 0x677c, 0x67f0, 0x6809, 0x67d8, 0x680a, 0x67e9, 0x67b0, 0x680c, 0x67d9, 0x67b5, 0x67da, 0x67b3, 0x67dd, 0x6800, 0x67c3, 0x67b8, 0x67e2, 0x680e, 0x67c1, 0x67fd, 0x6832, 0x6833, 0x6860, 0x6861, 0x684e, 0x6862, 0x6844, 0x6864, 0x6883, 0x681d, 0x6855, 0x6866, 0x6841, 0x6867, 0x6840, 0x683e, 0x684a, 0x6849, 0x6829, 0x68b5, 0x688f, 0x6874, 0x6877, 0x6893, 0x686b, 0x68c2, 0x696e, 0x68fc, 0x691f, 0x6920, 0x68f9, /* 0x69 */ 0x6924, 0x68f0, 0x690b, 0x6901, 0x6957, 0x68e3, 0x6910, 0x6971, 0x6939, 0x6960, 0x6942, 0x695d, 0x6984, 0x696b, 0x6980, 0x6998, 0x6978, 0x6934, 0x69cc, 0x6987, 0x6988, 0x69ce, 0x6989, 0x6966, 0x6963, 0x6979, 0x699b, 0x69a7, 0x69bb, 0x69ab, 0x69ad, 0x69d4, 0x69b1, 0x69c1, 0x69ca, 0x69df, 0x6995, 0x69e0, 0x698d, 0x69ff, 0x6a2f, 0x69ed, 0x6a17, 0x6a18, 0x6a65, 0x69f2, 0x6a44, 0x6a3e, 0x6aa0, 0x6a50, 0x6a5b, 0x6a35, 0x6a8e, 0x6a79, 0x6a3d, 0x6a28, 0x6a58, 0x6a7c, 0x6a91, 0x6a90, 0x6aa9, 0x6a97, 0x6aab, 0x7337, 0x7352, 0x6b81, 0x6b82, 0x6b87, 0x6b84, 0x6b92, 0x6b93, 0x6b8d, 0x6b9a, 0x6b9b, 0x6ba1, 0x6baa, 0x8f6b, 0x8f6d, 0x8f71, 0x8f72, 0x8f73, 0x8f75, 0x8f76, 0x8f78, 0x8f77, 0x8f79, 0x8f7a, 0x8f7c, 0x8f7e, 0x8f81, 0x8f82, 0x8f84, 0x8f87, 0x8f8b, /* 0x6a */ 0x8f8d, 0x8f8e, 0x8f8f, 0x8f98, 0x8f9a, 0x8ece, 0x620b, 0x6217, 0x621b, 0x621f, 0x6222, 0x6221, 0x6225, 0x6224, 0x622c, 0x81e7, 0x74ef, 0x74f4, 0x74ff, 0x750f, 0x7511, 0x7513, 0x6534, 0x65ee, 0x65ef, 0x65f0, 0x660a, 0x6619, 0x6772, 0x6603, 0x6615, 0x6600, 0x7085, 0x66f7, 0x661d, 0x6634, 0x6631, 0x6636, 0x6635, 0x8006, 0x665f, 0x6654, 0x6641, 0x664f, 0x6656, 0x6661, 0x6657, 0x6677, 0x6684, 0x668c, 0x66a7, 0x669d, 0x66be, 0x66db, 0x66dc, 0x66e6, 0x66e9, 0x8d32, 0x8d33, 0x8d36, 0x8d3b, 0x8d3d, 0x8d40, 0x8d45, 0x8d46, 0x8d48, 0x8d49, 0x8d47, 0x8d4d, 0x8d55, 0x8d59, 0x89c7, 0x89ca, 0x89cb, 0x89cc, 0x89ce, 0x89cf, 0x89d0, 0x89d1, 0x726e, 0x729f, 0x725d, 0x7266, 0x726f, 0x727e, 0x727f, 0x7284, 0x728b, 0x728d, 0x728f, 0x7292, 0x6308, 0x6332, 0x63b0, /* 0x6b */ 0x643f, 0x64d8, 0x8004, 0x6bea, 0x6bf3, 0x6bfd, 0x6bf5, 0x6bf9, 0x6c05, 0x6c07, 0x6c06, 0x6c0d, 0x6c15, 0x6c18, 0x6c19, 0x6c1a, 0x6c21, 0x6c29, 0x6c24, 0x6c2a, 0x6c32, 0x6535, 0x6555, 0x656b, 0x724d, 0x7252, 0x7256, 0x7230, 0x8662, 0x5216, 0x809f, 0x809c, 0x8093, 0x80bc, 0x670a, 0x80bd, 0x80b1, 0x80ab, 0x80ad, 0x80b4, 0x80b7, 0x80e7, 0x80e8, 0x80e9, 0x80ea, 0x80db, 0x80c2, 0x80c4, 0x80d9, 0x80cd, 0x80d7, 0x6710, 0x80dd, 0x80eb, 0x80f1, 0x80f4, 0x80ed, 0x810d, 0x810e, 0x80f2, 0x80fc, 0x6715, 0x8112, 0x8c5a, 0x8136, 0x811e, 0x812c, 0x8118, 0x8132, 0x8148, 0x814c, 0x8153, 0x8174, 0x8159, 0x815a, 0x8171, 0x8160, 0x8169, 0x817c, 0x817d, 0x816d, 0x8167, 0x584d, 0x5ab5, 0x8188, 0x8182, 0x8191, 0x6ed5, 0x81a3, 0x81aa, 0x81cc, 0x6726, 0x81ca, 0x81bb, /* 0x6c */ 0x81c1, 0x81a6, 0x6b24, 0x6b37, 0x6b39, 0x6b43, 0x6b46, 0x6b59, 0x98d1, 0x98d2, 0x98d3, 0x98d5, 0x98d9, 0x98da, 0x6bb3, 0x5f40, 0x6bc2, 0x89f3, 0x6590, 0x9f51, 0x6593, 0x65bc, 0x65c6, 0x65c4, 0x65c3, 0x65cc, 0x65ce, 0x65d2, 0x65d6, 0x7080, 0x709c, 0x7096, 0x709d, 0x70bb, 0x70c0, 0x70b7, 0x70ab, 0x70b1, 0x70e8, 0x70ca, 0x7110, 0x7113, 0x7116, 0x712f, 0x7131, 0x7173, 0x715c, 0x7168, 0x7145, 0x7172, 0x714a, 0x7178, 0x717a, 0x7198, 0x71b3, 0x71b5, 0x71a8, 0x71a0, 0x71e0, 0x71d4, 0x71e7, 0x71f9, 0x721d, 0x7228, 0x706c, 0x7118, 0x7166, 0x71b9, 0x623e, 0x623d, 0x6243, 0x6248, 0x6249, 0x793b, 0x7940, 0x7946, 0x7949, 0x795b, 0x795c, 0x7953, 0x795a, 0x7962, 0x7957, 0x7960, 0x796f, 0x7967, 0x797a, 0x7985, 0x798a, 0x799a, 0x79a7, 0x79b3, 0x5fd1, 0x5fd0, /* 0x6d */ 0x603c, 0x605d, 0x605a, 0x6067, 0x6041, 0x6059, 0x6063, 0x60ab, 0x6106, 0x610d, 0x615d, 0x61a9, 0x619d, 0x61cb, 0x61d1, 0x6206, 0x8080, 0x807f, 0x6c93, 0x6cf6, 0x6dfc, 0x77f6, 0x77f8, 0x7800, 0x7809, 0x7817, 0x7818, 0x7811, 0x65ab, 0x782d, 0x781c, 0x781d, 0x7839, 0x783a, 0x783b, 0x781f, 0x783c, 0x7825, 0x782c, 0x7823, 0x7829, 0x784e, 0x786d, 0x7856, 0x7857, 0x7826, 0x7850, 0x7847, 0x784c, 0x786a, 0x789b, 0x7893, 0x789a, 0x7887, 0x789c, 0x78a1, 0x78a3, 0x78b2, 0x78b9, 0x78a5, 0x78d4, 0x78d9, 0x78c9, 0x78ec, 0x78f2, 0x7905, 0x78f4, 0x7913, 0x7924, 0x791e, 0x7934, 0x9f9b, 0x9ef9, 0x9efb, 0x9efc, 0x76f1, 0x7704, 0x770d, 0x76f9, 0x7707, 0x7708, 0x771a, 0x7722, 0x7719, 0x772d, 0x7726, 0x7735, 0x7738, 0x7750, 0x7751, 0x7747, 0x7743, 0x775a, 0x7768, /* 0x6e */ 0x7762, 0x7765, 0x777f, 0x778d, 0x777d, 0x7780, 0x778c, 0x7791, 0x779f, 0x77a0, 0x77b0, 0x77b5, 0x77bd, 0x753a, 0x7540, 0x754e, 0x754b, 0x7548, 0x755b, 0x7572, 0x7579, 0x7583, 0x7f58, 0x7f61, 0x7f5f, 0x8a48, 0x7f68, 0x7f74, 0x7f71, 0x7f79, 0x7f81, 0x7f7e, 0x76cd, 0x76e5, 0x8832, 0x9485, 0x9486, 0x9487, 0x948b, 0x948a, 0x948c, 0x948d, 0x948f, 0x9490, 0x9494, 0x9497, 0x9495, 0x949a, 0x949b, 0x949c, 0x94a3, 0x94a4, 0x94ab, 0x94aa, 0x94ad, 0x94ac, 0x94af, 0x94b0, 0x94b2, 0x94b4, 0x94b6, 0x94b7, 0x94b8, 0x94b9, 0x94ba, 0x94bc, 0x94bd, 0x94bf, 0x94c4, 0x94c8, 0x94c9, 0x94ca, 0x94cb, 0x94cc, 0x94cd, 0x94ce, 0x94d0, 0x94d1, 0x94d2, 0x94d5, 0x94d6, 0x94d7, 0x94d9, 0x94d8, 0x94db, 0x94de, 0x94df, 0x94e0, 0x94e2, 0x94e4, 0x94e5, 0x94e7, 0x94e8, 0x94ea, /* 0x6f */ 0x94e9, 0x94eb, 0x94ee, 0x94ef, 0x94f3, 0x94f4, 0x94f5, 0x94f7, 0x94f9, 0x94fc, 0x94fd, 0x94ff, 0x9503, 0x9502, 0x9506, 0x9507, 0x9509, 0x950a, 0x950d, 0x950e, 0x950f, 0x9512, 0x9513, 0x9514, 0x9515, 0x9516, 0x9518, 0x951b, 0x951d, 0x951e, 0x951f, 0x9522, 0x952a, 0x952b, 0x9529, 0x952c, 0x9531, 0x9532, 0x9534, 0x9536, 0x9537, 0x9538, 0x953c, 0x953e, 0x953f, 0x9542, 0x9535, 0x9544, 0x9545, 0x9546, 0x9549, 0x954c, 0x954e, 0x954f, 0x9552, 0x9553, 0x9554, 0x9556, 0x9557, 0x9558, 0x9559, 0x955b, 0x955e, 0x955f, 0x955d, 0x9561, 0x9562, 0x9564, 0x9565, 0x9566, 0x9567, 0x9568, 0x9569, 0x956a, 0x956b, 0x956c, 0x956f, 0x9571, 0x9572, 0x9573, 0x953a, 0x77e7, 0x77ec, 0x96c9, 0x79d5, 0x79ed, 0x79e3, 0x79eb, 0x7a06, 0x5d47, 0x7a03, 0x7a02, 0x7a1e, 0x7a14, /* 0x70 */ 0x7a39, 0x7a37, 0x7a51, 0x9ecf, 0x99a5, 0x7a70, 0x7688, 0x768e, 0x7693, 0x7699, 0x76a4, 0x74de, 0x74e0, 0x752c, 0x9e20, 0x9e22, 0x9e28, 0x9e29, 0x9e2a, 0x9e2b, 0x9e2c, 0x9e32, 0x9e31, 0x9e36, 0x9e38, 0x9e37, 0x9e39, 0x9e3a, 0x9e3e, 0x9e41, 0x9e42, 0x9e44, 0x9e46, 0x9e47, 0x9e48, 0x9e49, 0x9e4b, 0x9e4c, 0x9e4e, 0x9e51, 0x9e55, 0x9e57, 0x9e5a, 0x9e5b, 0x9e5c, 0x9e5e, 0x9e63, 0x9e66, 0x9e67, 0x9e68, 0x9e69, 0x9e6a, 0x9e6b, 0x9e6c, 0x9e71, 0x9e6d, 0x9e73, 0x7592, 0x7594, 0x7596, 0x75a0, 0x759d, 0x75ac, 0x75a3, 0x75b3, 0x75b4, 0x75b8, 0x75c4, 0x75b1, 0x75b0, 0x75c3, 0x75c2, 0x75d6, 0x75cd, 0x75e3, 0x75e8, 0x75e6, 0x75e4, 0x75eb, 0x75e7, 0x7603, 0x75f1, 0x75fc, 0x75ff, 0x7610, 0x7600, 0x7605, 0x760c, 0x7617, 0x760a, 0x7625, 0x7618, 0x7615, 0x7619, /* 0x71 */ 0x761b, 0x763c, 0x7622, 0x7620, 0x7640, 0x762d, 0x7630, 0x763f, 0x7635, 0x7643, 0x763e, 0x7633, 0x764d, 0x765e, 0x7654, 0x765c, 0x7656, 0x766b, 0x766f, 0x7fca, 0x7ae6, 0x7a78, 0x7a79, 0x7a80, 0x7a86, 0x7a88, 0x7a95, 0x7aa6, 0x7aa0, 0x7aac, 0x7aa8, 0x7aad, 0x7ab3, 0x8864, 0x8869, 0x8872, 0x887d, 0x887f, 0x8882, 0x88a2, 0x88c6, 0x88b7, 0x88bc, 0x88c9, 0x88e2, 0x88ce, 0x88e3, 0x88e5, 0x88f1, 0x891a, 0x88fc, 0x88e8, 0x88fe, 0x88f0, 0x8921, 0x8919, 0x8913, 0x891b, 0x890a, 0x8934, 0x892b, 0x8936, 0x8941, 0x8966, 0x897b, 0x758b, 0x80e5, 0x76b2, 0x76b4, 0x77dc, 0x8012, 0x8014, 0x8016, 0x801c, 0x8020, 0x8022, 0x8025, 0x8026, 0x8027, 0x8029, 0x8028, 0x8031, 0x800b, 0x8035, 0x8043, 0x8046, 0x804d, 0x8052, 0x8069, 0x8071, 0x8983, 0x9878, 0x9880, 0x9883, /* 0x72 */ 0x9889, 0x988c, 0x988d, 0x988f, 0x9894, 0x989a, 0x989b, 0x989e, 0x989f, 0x98a1, 0x98a2, 0x98a5, 0x98a6, 0x864d, 0x8654, 0x866c, 0x866e, 0x867f, 0x867a, 0x867c, 0x867b, 0x86a8, 0x868d, 0x868b, 0x86ac, 0x869d, 0x86a7, 0x86a3, 0x86aa, 0x8693, 0x86a9, 0x86b6, 0x86c4, 0x86b5, 0x86ce, 0x86b0, 0x86ba, 0x86b1, 0x86af, 0x86c9, 0x86cf, 0x86b4, 0x86e9, 0x86f1, 0x86f2, 0x86ed, 0x86f3, 0x86d0, 0x8713, 0x86de, 0x86f4, 0x86df, 0x86d8, 0x86d1, 0x8703, 0x8707, 0x86f8, 0x8708, 0x870a, 0x870d, 0x8709, 0x8723, 0x873b, 0x871e, 0x8725, 0x872e, 0x871a, 0x873e, 0x8748, 0x8734, 0x8731, 0x8729, 0x8737, 0x873f, 0x8782, 0x8722, 0x877d, 0x877e, 0x877b, 0x8760, 0x8770, 0x874c, 0x876e, 0x878b, 0x8753, 0x8763, 0x877c, 0x8764, 0x8759, 0x8765, 0x8793, 0x87af, 0x87a8, 0x87d2, /* 0x73 */ 0x87c6, 0x8788, 0x8785, 0x87ad, 0x8797, 0x8783, 0x87ab, 0x87e5, 0x87ac, 0x87b5, 0x87b3, 0x87cb, 0x87d3, 0x87bd, 0x87d1, 0x87c0, 0x87ca, 0x87db, 0x87ea, 0x87e0, 0x87ee, 0x8816, 0x8813, 0x87fe, 0x880a, 0x881b, 0x8821, 0x8839, 0x883c, 0x7f36, 0x7f42, 0x7f44, 0x7f45, 0x8210, 0x7afa, 0x7afd, 0x7b08, 0x7b03, 0x7b04, 0x7b15, 0x7b0a, 0x7b2b, 0x7b0f, 0x7b47, 0x7b38, 0x7b2a, 0x7b19, 0x7b2e, 0x7b31, 0x7b20, 0x7b25, 0x7b24, 0x7b33, 0x7b3e, 0x7b1e, 0x7b58, 0x7b5a, 0x7b45, 0x7b75, 0x7b4c, 0x7b5d, 0x7b60, 0x7b6e, 0x7b7b, 0x7b62, 0x7b72, 0x7b71, 0x7b90, 0x7ba6, 0x7ba7, 0x7bb8, 0x7bac, 0x7b9d, 0x7ba8, 0x7b85, 0x7baa, 0x7b9c, 0x7ba2, 0x7bab, 0x7bb4, 0x7bd1, 0x7bc1, 0x7bcc, 0x7bdd, 0x7bda, 0x7be5, 0x7be6, 0x7bea, 0x7c0c, 0x7bfe, 0x7bfc, 0x7c0f, 0x7c16, 0x7c0b, /* 0x74 */ 0x7c1f, 0x7c2a, 0x7c26, 0x7c38, 0x7c41, 0x7c40, 0x81fe, 0x8201, 0x8202, 0x8204, 0x81ec, 0x8844, 0x8221, 0x8222, 0x8223, 0x822d, 0x822f, 0x8228, 0x822b, 0x8238, 0x823b, 0x8233, 0x8234, 0x823e, 0x8244, 0x8249, 0x824b, 0x824f, 0x825a, 0x825f, 0x8268, 0x887e, 0x8885, 0x8888, 0x88d8, 0x88df, 0x895e, 0x7f9d, 0x7f9f, 0x7fa7, 0x7faf, 0x7fb0, 0x7fb2, 0x7c7c, 0x6549, 0x7c91, 0x7c9d, 0x7c9c, 0x7c9e, 0x7ca2, 0x7cb2, 0x7cbc, 0x7cbd, 0x7cc1, 0x7cc7, 0x7ccc, 0x7ccd, 0x7cc8, 0x7cc5, 0x7cd7, 0x7ce8, 0x826e, 0x66a8, 0x7fbf, 0x7fce, 0x7fd5, 0x7fe5, 0x7fe1, 0x7fe6, 0x7fe9, 0x7fee, 0x7ff3, 0x7cf8, 0x7d77, 0x7da6, 0x7dae, 0x7e47, 0x7e9b, 0x9eb8, 0x9eb4, 0x8d73, 0x8d84, 0x8d94, 0x8d91, 0x8db1, 0x8d67, 0x8d6d, 0x8c47, 0x8c49, 0x914a, 0x9150, 0x914e, 0x914f, 0x9164, /* 0x75 */ 0x9162, 0x9161, 0x9170, 0x9169, 0x916f, 0x917d, 0x917e, 0x9172, 0x9174, 0x9179, 0x918c, 0x9185, 0x9190, 0x918d, 0x9191, 0x91a2, 0x91a3, 0x91aa, 0x91ad, 0x91ae, 0x91af, 0x91b5, 0x91b4, 0x91ba, 0x8c55, 0x9e7e, 0x8db8, 0x8deb, 0x8e05, 0x8e59, 0x8e69, 0x8db5, 0x8dbf, 0x8dbc, 0x8dba, 0x8dc4, 0x8dd6, 0x8dd7, 0x8dda, 0x8dde, 0x8dce, 0x8dcf, 0x8ddb, 0x8dc6, 0x8dec, 0x8df7, 0x8df8, 0x8de3, 0x8df9, 0x8dfb, 0x8de4, 0x8e09, 0x8dfd, 0x8e14, 0x8e1d, 0x8e1f, 0x8e2c, 0x8e2e, 0x8e23, 0x8e2f, 0x8e3a, 0x8e40, 0x8e39, 0x8e35, 0x8e3d, 0x8e31, 0x8e49, 0x8e41, 0x8e42, 0x8e51, 0x8e52, 0x8e4a, 0x8e70, 0x8e76, 0x8e7c, 0x8e6f, 0x8e74, 0x8e85, 0x8e8f, 0x8e94, 0x8e90, 0x8e9c, 0x8e9e, 0x8c78, 0x8c82, 0x8c8a, 0x8c85, 0x8c98, 0x8c94, 0x659b, 0x89d6, 0x89de, 0x89da, 0x89dc, /* 0x76 */ 0x89e5, 0x89eb, 0x89ef, 0x8a3e, 0x8b26, 0x9753, 0x96e9, 0x96f3, 0x96ef, 0x9706, 0x9701, 0x9708, 0x970f, 0x970e, 0x972a, 0x972d, 0x9730, 0x973e, 0x9f80, 0x9f83, 0x9f85, 0x9f86, 0x9f87, 0x9f88, 0x9f89, 0x9f8a, 0x9f8c, 0x9efe, 0x9f0b, 0x9f0d, 0x96b9, 0x96bc, 0x96bd, 0x96ce, 0x96d2, 0x77bf, 0x96e0, 0x928e, 0x92ae, 0x92c8, 0x933e, 0x936a, 0x93ca, 0x938f, 0x943e, 0x946b, 0x9c7f, 0x9c82, 0x9c85, 0x9c86, 0x9c87, 0x9c88, 0x7a23, 0x9c8b, 0x9c8e, 0x9c90, 0x9c91, 0x9c92, 0x9c94, 0x9c95, 0x9c9a, 0x9c9b, 0x9c9e, 0x9c9f, 0x9ca0, 0x9ca1, 0x9ca2, 0x9ca3, 0x9ca5, 0x9ca6, 0x9ca7, 0x9ca8, 0x9ca9, 0x9cab, 0x9cad, 0x9cae, 0x9cb0, 0x9cb1, 0x9cb2, 0x9cb3, 0x9cb4, 0x9cb5, 0x9cb6, 0x9cb7, 0x9cba, 0x9cbb, 0x9cbc, 0x9cbd, 0x9cc4, 0x9cc5, 0x9cc6, 0x9cc7, 0x9cca, 0x9ccb, /* 0x77 */ 0x9ccc, 0x9ccd, 0x9cce, 0x9ccf, 0x9cd0, 0x9cd3, 0x9cd4, 0x9cd5, 0x9cd7, 0x9cd8, 0x9cd9, 0x9cdc, 0x9cdd, 0x9cdf, 0x9ce2, 0x977c, 0x9785, 0x9791, 0x9792, 0x9794, 0x97af, 0x97ab, 0x97a3, 0x97b2, 0x97b4, 0x9ab1, 0x9ab0, 0x9ab7, 0x9e58, 0x9ab6, 0x9aba, 0x9abc, 0x9ac1, 0x9ac0, 0x9ac5, 0x9ac2, 0x9acb, 0x9acc, 0x9ad1, 0x9b45, 0x9b43, 0x9b47, 0x9b49, 0x9b48, 0x9b4d, 0x9b51, 0x98e8, 0x990d, 0x992e, 0x9955, 0x9954, 0x9adf, 0x9ae1, 0x9ae6, 0x9aef, 0x9aeb, 0x9afb, 0x9aed, 0x9af9, 0x9b08, 0x9b0f, 0x9b13, 0x9b1f, 0x9b23, 0x9ebd, 0x9ebe, 0x7e3b, 0x9e82, 0x9e87, 0x9e88, 0x9e8b, 0x9e92, 0x93d6, 0x9e9d, 0x9e9f, 0x9edb, 0x9edc, 0x9edd, 0x9ee0, 0x9edf, 0x9ee2, 0x9ee9, 0x9ee7, 0x9ee5, 0x9eea, 0x9eef, 0x9f22, 0x9f2c, 0x9f2f, 0x9f39, 0x9f37, 0x9f3d, 0x9f3e, 0x9f44, }; static int gb2312_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c1 = (s[0] & 0x7F); if ((c1 >= 0x21 && c1 <= 0x29) || (c1 >= 0x30 && c1 <= 0x77)) { if (n >= 2) { unsigned char c2 = (s[1] & 0x7F); if (c2 >= 0x21 && c2 < 0x7f) { unsigned int i = 94 * (c1 - 0x21) + (c2 - 0x21); unsigned short wc = 0xfffd; if (i < 1410) { if (i < 831) wc = gb2312_2uni_page21[i]; } else { if (i < 8178) wc = gb2312_2uni_page30[i-1410]; } if (wc != 0xfffd) { *pwc = (ucs4_t) wc; return 2; } } return RET_ILSEQ; } return RET_TOOFEW(0); } return RET_ILSEQ; } static const unsigned short gb2312_2charset[7445] = { 0x2168, 0x216c, 0x2127, 0x2163, 0x2140, 0x2141, 0x2824, 0x2822, 0x2828, 0x2826, 0x283a, 0x282c, 0x282a, 0x2830, 0x282e, 0x2142, 0x2834, 0x2832, 0x2839, 0x2821, 0x2825, 0x2827, 0x2829, 0x282d, 0x2831, 0x2823, 0x282b, 0x282f, 0x2833, 0x2835, 0x2836, 0x2837, 0x2838, 0x2126, 0x2125, 0x2621, 0x2622, 0x2623, 0x2624, 0x2625, 0x2626, 0x2627, 0x2628, 0x2629, 0x262a, 0x262b, 0x262c, 0x262d, 0x262e, 0x262f, 0x2630, 0x2631, 0x2632, 0x2633, 0x2634, 0x2635, 0x2636, 0x2637, 0x2638, 0x2641, 0x2642, 0x2643, 0x2644, 0x2645, 0x2646, 0x2647, 0x2648, 0x2649, 0x264a, 0x264b, 0x264c, 0x264d, 0x264e, 0x264f, 0x2650, 0x2651, 0x2652, 0x2653, 0x2654, 0x2655, 0x2656, 0x2657, 0x2658, 0x2727, 0x2721, 0x2722, 0x2723, 0x2724, 0x2725, 0x2726, 0x2728, 0x2729, 0x272a, 0x272b, 0x272c, 0x272d, 0x272e, 0x272f, 0x2730, 0x2731, 0x2732, 0x2733, 0x2734, 0x2735, 0x2736, 0x2737, 0x2738, 0x2739, 0x273a, 0x273b, 0x273c, 0x273d, 0x273e, 0x273f, 0x2740, 0x2741, 0x2751, 0x2752, 0x2753, 0x2754, 0x2755, 0x2756, 0x2758, 0x2759, 0x275a, 0x275b, 0x275c, 0x275d, 0x275e, 0x275f, 0x2760, 0x2761, 0x2762, 0x2763, 0x2764, 0x2765, 0x2766, 0x2767, 0x2768, 0x2769, 0x276a, 0x276b, 0x276c, 0x276d, 0x276e, 0x276f, 0x2770, 0x2771, 0x2757, 0x212a, 0x212c, 0x212e, 0x212f, 0x2130, 0x2131, 0x212d, 0x216b, 0x2164, 0x2165, 0x2179, 0x2166, 0x216d, 0x2271, 0x2272, 0x2273, 0x2274, 0x2275, 0x2276, 0x2277, 0x2278, 0x2279, 0x227a, 0x227b, 0x227c, 0x217b, 0x217c, 0x217a, 0x217d, 0x214a, 0x2147, 0x2146, 0x214c, 0x2158, 0x215e, 0x214f, 0x214e, 0x2144, 0x2145, 0x2149, 0x2148, 0x2152, 0x2153, 0x2160, 0x215f, 0x2143, 0x214b, 0x2157, 0x2156, 0x2155, 0x2159, 0x2154, 0x215c, 0x215d, 0x215a, 0x215b, 0x2151, 0x214d, 0x2150, 0x2259, 0x225a, 0x225b, 0x225c, 0x225d, 0x225e, 0x225f, 0x2260, 0x2261, 0x2262, 0x2245, 0x2246, 0x2247, 0x2248, 0x2249, 0x224a, 0x224b, 0x224c, 0x224d, 0x224e, 0x224f, 0x2250, 0x2251, 0x2252, 0x2253, 0x2254, 0x2255, 0x2256, 0x2257, 0x2258, 0x2231, 0x2232, 0x2233, 0x2234, 0x2235, 0x2236, 0x2237, 0x2238, 0x2239, 0x223a, 0x223b, 0x223c, 0x223d, 0x223e, 0x223f, 0x2240, 0x2241, 0x2242, 0x2243, 0x2244, 0x2924, 0x2925, 0x2926, 0x2927, 0x2928, 0x2929, 0x292a, 0x292b, 0x292c, 0x292d, 0x292e, 0x292f, 0x2930, 0x2931, 0x2932, 0x2933, 0x2934, 0x2935, 0x2936, 0x2937, 0x2938, 0x2939, 0x293a, 0x293b, 0x293c, 0x293d, 0x293e, 0x293f, 0x2940, 0x2941, 0x2942, 0x2943, 0x2944, 0x2945, 0x2946, 0x2947, 0x2948, 0x2949, 0x294a, 0x294b, 0x294c, 0x294d, 0x294e, 0x294f, 0x2950, 0x2951, 0x2952, 0x2953, 0x2954, 0x2955, 0x2956, 0x2957, 0x2958, 0x2959, 0x295a, 0x295b, 0x295c, 0x295d, 0x295e, 0x295f, 0x2960, 0x2961, 0x2962, 0x2963, 0x2964, 0x2965, 0x2966, 0x2967, 0x2968, 0x2969, 0x296a, 0x296b, 0x296c, 0x296d, 0x296e, 0x296f, 0x2176, 0x2175, 0x2178, 0x2177, 0x2174, 0x2173, 0x2170, 0x2172, 0x2171, 0x216f, 0x216e, 0x2162, 0x2161, 0x2121, 0x2122, 0x2123, 0x2128, 0x2129, 0x2134, 0x2135, 0x2136, 0x2137, 0x2138, 0x2139, 0x213a, 0x213b, 0x213e, 0x213f, 0x217e, 0x2132, 0x2133, 0x213c, 0x213d, 0x2421, 0x2422, 0x2423, 0x2424, 0x2425, 0x2426, 0x2427, 0x2428, 0x2429, 0x242a, 0x242b, 0x242c, 0x242d, 0x242e, 0x242f, 0x2430, 0x2431, 0x2432, 0x2433, 0x2434, 0x2435, 0x2436, 0x2437, 0x2438, 0x2439, 0x243a, 0x243b, 0x243c, 0x243d, 0x243e, 0x243f, 0x2440, 0x2441, 0x2442, 0x2443, 0x2444, 0x2445, 0x2446, 0x2447, 0x2448, 0x2449, 0x244a, 0x244b, 0x244c, 0x244d, 0x244e, 0x244f, 0x2450, 0x2451, 0x2452, 0x2453, 0x2454, 0x2455, 0x2456, 0x2457, 0x2458, 0x2459, 0x245a, 0x245b, 0x245c, 0x245d, 0x245e, 0x245f, 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469, 0x246a, 0x246b, 0x246c, 0x246d, 0x246e, 0x246f, 0x2470, 0x2471, 0x2472, 0x2473, 0x2521, 0x2522, 0x2523, 0x2524, 0x2525, 0x2526, 0x2527, 0x2528, 0x2529, 0x252a, 0x252b, 0x252c, 0x252d, 0x252e, 0x252f, 0x2530, 0x2531, 0x2532, 0x2533, 0x2534, 0x2535, 0x2536, 0x2537, 0x2538, 0x2539, 0x253a, 0x253b, 0x253c, 0x253d, 0x253e, 0x253f, 0x2540, 0x2541, 0x2542, 0x2543, 0x2544, 0x2545, 0x2546, 0x2547, 0x2548, 0x2549, 0x254a, 0x254b, 0x254c, 0x254d, 0x254e, 0x254f, 0x2550, 0x2551, 0x2552, 0x2553, 0x2554, 0x2555, 0x2556, 0x2557, 0x2558, 0x2559, 0x255a, 0x255b, 0x255c, 0x255d, 0x255e, 0x255f, 0x2560, 0x2561, 0x2562, 0x2563, 0x2564, 0x2565, 0x2566, 0x2567, 0x2568, 0x2569, 0x256a, 0x256b, 0x256c, 0x256d, 0x256e, 0x256f, 0x2570, 0x2571, 0x2572, 0x2573, 0x2574, 0x2575, 0x2576, 0x2124, 0x2845, 0x2846, 0x2847, 0x2848, 0x2849, 0x284a, 0x284b, 0x284c, 0x284d, 0x284e, 0x284f, 0x2850, 0x2851, 0x2852, 0x2853, 0x2854, 0x2855, 0x2856, 0x2857, 0x2858, 0x2859, 0x285a, 0x285b, 0x285c, 0x285d, 0x285e, 0x285f, 0x2860, 0x2861, 0x2862, 0x2863, 0x2864, 0x2865, 0x2866, 0x2867, 0x2868, 0x2869, 0x2265, 0x2266, 0x2267, 0x2268, 0x2269, 0x226a, 0x226b, 0x226c, 0x226d, 0x226e, 0x523b, 0x3621, 0x465f, 0x4d72, 0x5549, 0x487d, 0x494f, 0x4f42, 0x5822, 0x323b, 0x536b, 0x5824, 0x3373, 0x5728, 0x4752, 0x5827, 0x4a40, 0x4770, 0x317b, 0x5235, 0x3454, 0x362b, 0x4b3f, 0x5829, 0x362a, 0x413d, 0x514f, 0x4925, 0x582d, 0x3876, 0x513e, 0x635c, 0x5650, 0x3761, 0x342e, 0x4159, 0x583c, 0x4d68, 0x3524, 0x4e2a, 0x5677, 0x4076, 0x3e59, 0x582f, 0x444b, 0x3e43, 0x5831, 0x4334, 0x5265, 0x562e, 0x4e5a, 0x5527, 0x3a75, 0x3726, 0x4056, 0x4639, 0x4552, 0x4747, 0x3954, 0x334b, 0x5252, 0x583f, 0x3e45, 0x4672, 0x5232, 0x4f30, 0x4f67, 0x4a69, 0x5840, 0x4272, 0x4252, 0x4869, 0x472c, 0x414b, 0x5368, 0x5579, 0x4a42, 0x367e, 0x5821, 0x535a, 0x3f77, 0x5446, 0x3b25, 0x5841, 0x4e65, 0x3e2e, 0x5828, 0x5147, 0x5029, 0x583d, 0x596f, 0x4d76, 0x3f3a, 0x3d3b, 0x3a25, 0x5260, 0x327a, 0x3a60, 0x4436, 0x4f6d, 0x3e29, 0x4d24, 0x4141, 0x4757, 0x5971, 0x5974, 0x484b, 0x5869, 0x525a, 0x4a32, 0x484a, 0x586c, 0x586a, 0x5846, 0x3d76, 0x464d, 0x3370, 0x586b, 0x3d71, 0x3d69, 0x4854, 0x3453, 0x4258, 0x3256, 0x5750, 0x4a4b, 0x4b7b, 0x554c, 0x3836, 0x4f49, 0x595a, 0x5870, 0x472a, 0x586e, 0x347a, 0x416e, 0x5254, 0x586d, 0x5247, 0x586f, 0x4347, 0x5176, 0x5659, 0x5872, 0x5875, 0x3c7e, 0x3c5b, 0x484e, 0x375d, 0x3742, 0x4673, 0x5878, 0x5241, 0x4e69, 0x3c3f, 0x377c, 0x3725, 0x505d, 0x565a, 0x5345, 0x3b6f, 0x3b61, 0x5871, 0x4921, 0x4e30, 0x342b, 0x5873, 0x494b, 0x5876, 0x4257, 0x5877, 0x4e31, 0x5879, 0x322e, 0x3940, 0x5923, 0x3069, 0x4166, 0x496c, 0x4b45, 0x4b46, 0x5924, 0x3568, 0x352b, 0x4e3b, 0x354d, 0x5721, 0x5774, 0x5353, 0x4c65, 0x3a4e, 0x5922, 0x595c, 0x5360, 0x587d, 0x3770, 0x5777, 0x587e, 0x587a, 0x5921, 0x4463, 0x5336, 0x5874, 0x595d, 0x587b, 0x4565, 0x4050, 0x5170, 0x305b, 0x3c51, 0x5926, 0x5925, 0x592c, 0x592e, 0x592b, 0x4a39, 0x5929, 0x5636, 0x335e, 0x5928, 0x407d, 0x4a4c, 0x592a, 0x5927, 0x5930, 0x3631, 0x3929, 0x5240, 0x4f40, 0x4242, 0x3d44, 0x556c, 0x3260, 0x4748, 0x3f6b, 0x592d, 0x592f, 0x4e6a, 0x3a6e, 0x4756, 0x3163, 0x3459, 0x366d, 0x5934, 0x3f21, 0x595e, 0x474e, 0x407e, 0x5938, 0x4b57, 0x377d, 0x5935, 0x5937, 0x3123, 0x5361, 0x5939, 0x5045, 0x5936, 0x5931, 0x5932, 0x4129, 0x5933, 0x3c73, 0x505e, 0x3829, 0x3e63, 0x593d, 0x593a, 0x3033, 0x5942, 0x5944, 0x3136, 0x593f, 0x3539, 0x3e73, 0x4c48, 0x3a72, 0x5250, 0x5943, 0x3d68, 0x332b, 0x5945, 0x3e6b, 0x5946, 0x593b, 0x445f, 0x593e, 0x5941, 0x5940, 0x552e, 0x5635, 0x4763, 0x5948, 0x3c59, 0x594a, 0x593c, 0x594b, 0x462b, 0x5949, 0x5776, 0x4d23, 0x3d21, 0x594c, 0x453c, 0x4d35, 0x594d, 0x5947, 0x3325, 0x3f7e, 0x3835, 0x407c, 0x3078, 0x3476, 0x594e, 0x594f, 0x3422, 0x5950, 0x345f, 0x3041, 0x5951, 0x4935, 0x4f71, 0x5952, 0x4145, 0x5956, 0x492e, 0x5955, 0x5954, 0x5957, 0x4b5b, 0x3d29, 0x4627, 0x5953, 0x5958, 0x5959, 0x4865, 0x405c, 0x3679, 0x5823, 0x544a, 0x542a, 0x5056, 0x3364, 0x5557, 0x4f48, 0x3962, 0x3f4b, 0x4362, 0x3652, 0x4d43, 0x596e, 0x5970, 0x3533, 0x3635, 0x3e24, 0x486b, 0x482b, 0x304b, 0x392b, 0x4179, 0x5962, 0x403c, 0x3932, 0x3958, 0x504b, 0x3178, 0x4664, 0x3e5f, 0x3564, 0x5748, 0x5178, 0x3c66, 0x4a5e, 0x3c3d, 0x5966, 0x5867, 0x445a, 0x3854, 0x483d, 0x3261, 0x5459, 0x4330, 0x4361, 0x5a22, 0x485f, 0x5034, 0x3e7c, 0x4529, 0x395a, 0x5a23, 0x5429, 0x5a24, 0x597b, 0x362c, 0x376b, 0x3179, 0x597c, 0x3365, 0x3e76, 0x3f76, 0x5231, 0x4064, 0x3633, 0x597e, 0x597d, 0x3e3b, 0x4660, 0x573c, 0x5a21, 0x4139, 0x3572, 0x4168, 0x3c75, 0x3455, 0x415d, 0x447d, 0x3c38, 0x3732, 0x376f, 0x596c, 0x463e, 0x3f2d, 0x3b4b, 0x354a, 0x5b49, 0x5057, 0x4d39, 0x303c, 0x3376, 0x3b77, 0x5b4a, 0x3a2f, 0x5464, 0x3536, 0x3573, 0x5856, 0x4850, 0x3756, 0x4750, 0x5857, 0x3f2f, 0x5b3b, 0x5858, 0x504c, 0x3b2e, 0x6b3e, 0x4150, 0x4175, 0x5472, 0x3855, 0x3434, 0x3375, 0x493e, 0x4550, 0x4559, 0x407b, 0x3170, 0x5859, 0x394e, 0x353d, 0x585a, 0x5646, 0x4b22, 0x482f, 0x4932, 0x344c, 0x3f4c, 0x3974, 0x585b, 0x585c, 0x3667, 0x3c41, 0x4c6a, 0x4f77, 0x585d, 0x4730, 0x3950, 0x3d23, 0x4c5e, 0x464a, 0x5860, 0x585e, 0x585f, 0x307e, 0x3e67, 0x4a23, 0x3c74, 0x3831, 0x386e, 0x5862, 0x3d4b, 0x5864, 0x5863, 0x457c, 0x5865, 0x5866, 0x4126, 0x4830, 0x306c, 0x3926, 0x3c53, 0x4e71, 0x5b3d, 0x4153, 0x362f, 0x567a, 0x452c, 0x3d59, 0x5b3e, 0x5b3f, 0x4078, 0x3e22, 0x404d, 0x5b40, 0x4a46, 0x322a, 0x5342, 0x4363, 0x512b, 0x5b42, 0x4055, 0x5b43, 0x3f31, 0x443c, 0x475a, 0x5b44, 0x5968, 0x4957, 0x3934, 0x4e70, 0x5448, 0x307c, 0x3452, 0x5059, 0x5969, 0x5e4b, 0x596b, 0x5830, 0x3b2f, 0x3131, 0x3357, 0x584e, 0x5451, 0x3d33, 0x3f6f, 0x4f3b, 0x5850, 0x374b, 0x5851, 0x4625, 0x4778, 0x523d, 0x5852, 0x4464, 0x4a2e, 0x4727, 0x5826, 0x497d, 0x4e67, 0x3b5c, 0x306b, 0x3b2a, 0x502d, 0x3130, 0x5764, 0x573f, 0x3525, 0x4274, 0x444f, 0x3229, 0x3237, 0x3165, 0x5f32, 0x553c, 0x3f28, 0x422c, 0x5855, 0x4231, 0x5854, 0x4e54, 0x5a60, 0x4e40, 0x5834, 0x432e, 0x5321, 0x4e23, 0x3c34, 0x4834, 0x4251, 0x3e6d, 0x5036, 0x5a61, 0x4764, 0x3327, 0x3672, 0x4c7c, 0x407a, 0x4077, 0x5139, 0x5161, 0x5847, 0x325e, 0x4065, 0x3a71, 0x5848, 0x542d, 0x4f61, 0x5849, 0x584a, 0x4f43, 0x3378, 0x3e47, 0x584b, 0x5b4c, 0x4825, 0x4f58, 0x487e, 0x324e, 0x5356, 0x3266, 0x3c30, 0x5351, 0x4b2b, 0x3734, 0x3722, 0x4a65, 0x4821, 0x4a5c, 0x3164, 0x5070, 0x4551, 0x5b45, 0x357e, 0x3f5a, 0x3945, 0x3e64, 0x416d, 0x5f36, 0x5f35, 0x563b, 0x3d50, 0x5559, 0x3048, 0x3623, 0x3f49, 0x4c28, 0x5f33, 0x4a37, 0x5352, 0x584f, 0x5236, 0x3a45, 0x4b3e, 0x4c3e, 0x5f37, 0x3570, 0x5f34, 0x5375, 0x3354, 0x3877, 0x5f3a, 0x3a4f, 0x3c2a, 0x3575, 0x4d2c, 0x437b, 0x3a73, 0x4074, 0x4d42, 0x4f72, 0x5f38, 0x4f45, 0x4240, 0x5f39, 0x4270, 0x3e7d, 0x415f, 0x4d4c, 0x5277, 0x374d, 0x5f41, 0x5f44, 0x3771, 0x3049, 0x3656, 0x3754, 0x3a2c, 0x4c7d, 0x3f54, 0x4b31, 0x4674, 0x5628, 0x5f45, 0x4e62, 0x3333, 0x4e7c, 0x3435, 0x4e47, 0x3a70, 0x4e61, 0x513d, 0x5f40, 0x3474, 0x334a, 0x3866, 0x5f3b, 0x4445, 0x5f3c, 0x5f3d, 0x5f3e, 0x453b, 0x5f3f, 0x5f42, 0x5431, 0x5f43, 0x473a, 0x4e58, 0x4458, 0x5f4a, 0x5f4f, 0x565c, 0x5f49, 0x5f5a, 0x4e36, 0x3a47, 0x5f4e, 0x5f48, 0x455e, 0x496b, 0x3a74, 0x437c, 0x3e57, 0x5f46, 0x5f4d, 0x4558, 0x5526, 0x3a4d, 0x3e4c, 0x533d, 0x3840, 0x5664, 0x5f47, 0x393e, 0x3f27, 0x417c, 0x5f4b, 0x5f4c, 0x5f50, 0x5f5b, 0x5f65, 0x5f57, 0x5f56, 0x5749, 0x5f63, 0x5f64, 0x656b, 0x5227, 0x5f52, 0x3f29, 0x545b, 0x3f48, 0x5f54, 0x4f4c, 0x5f5d, 0x514a, 0x5f5e, 0x3027, 0x4637, 0x5f53, 0x3a65, 0x365f, 0x4d5b, 0x397e, 0x5455, 0x5f5f, 0x4f6c, 0x3025, 0x5f67, 0x5f51, 0x5146, 0x5f55, 0x5f58, 0x5f59, 0x5f5c, 0x3b29, 0x5f60, 0x5f61, 0x5f62, 0x5f66, 0x5f68, 0x5334, 0x3867, 0x4536, 0x5f6a, 0x495a, 0x4128, 0x4444, 0x3f5e, 0x4f78, 0x555c, 0x5f6e, 0x3238, 0x3a5f, 0x5f6c, 0x5b41, 0x5164, 0x4b74, 0x343d, 0x3026, 0x5f71, 0x4c46, 0x5f72, 0x5f6d, 0x5f69, 0x5f6b, 0x5f6f, 0x5f70, 0x3b3d, 0x5f73, 0x5f74, 0x3b23, 0x4a5b, 0x4e28, 0x6027, 0x332a, 0x6026, 0x6021, 0x5f7e, 0x4d59, 0x5f7c, 0x5f7a, 0x3f50, 0x5744, 0x494c, 0x5f78, 0x3021, 0x5f7d, 0x5f7b, 0x6022, 0x6028, 0x3748, 0x4621, 0x4936, 0x4032, 0x5f75, 0x453e, 0x5844, 0x5f79, 0x4476, 0x6023, 0x6024, 0x6025, 0x5025, 0x6034, 0x4c64, 0x6031, 0x3f26, 0x602f, 0x4e39, 0x602b, 0x4946, 0x402e, 0x602e, 0x3a6d, 0x3a30, 0x6029, 0x5f76, 0x6033, 0x6038, 0x342d, 0x6039, 0x4f32, 0x3a48, 0x6030, 0x507a, 0x602c, 0x547b, 0x5f77, 0x4567, 0x602d, 0x5377, 0x6036, 0x6037, 0x6044, 0x5061, 0x603c, 0x6049, 0x604a, 0x603e, 0x602a, 0x4924, 0x6041, 0x6032, 0x4a48, 0x6043, 0x6035, 0x4e4b, 0x4b43, 0x604d, 0x6046, 0x6042, 0x604b, 0x603a, 0x603f, 0x6040, 0x6045, 0x6047, 0x6048, 0x604c, 0x603b, 0x4b54, 0x6055, 0x6056, 0x6052, 0x6050, 0x3c4e, 0x6051, 0x3842, 0x5845, 0x506a, 0x426f, 0x604f, 0x603d, 0x6054, 0x6053, 0x6057, 0x605c, 0x6058, 0x5676, 0x3330, 0x576c, 0x4b3b, 0x605a, 0x4e7b, 0x3a59, 0x6061, 0x605d, 0x522d, 0x6062, 0x605b, 0x6059, 0x605f, 0x6060, 0x605e, 0x6064, 0x4677, 0x582c, 0x546b, 0x6066, 0x4a49, 0x6065, 0x3841, 0x6067, 0x6068, 0x6069, 0x6063, 0x3a3f, 0x4c67, 0x606a, 0x4f79, 0x606b, 0x4842, 0x3d40, 0x4452, 0x606c, 0x606d, 0x4774, 0x4b44, 0x606e, 0x3b58, 0x5836, 0x5272, 0x606f, 0x4d45, 0x365a, 0x6071, 0x5430, 0x4027, 0x3451, 0x4e27, 0x6070, 0x6072, 0x394c, 0x397a, 0x4d3c, 0x6073, 0x4654, 0x6074, 0x5432, 0x4826, 0x6076, 0x6075, 0x6077, 0x4d41, 0x4a25, 0x545a, 0x5b57, 0x5b59, 0x5b58, 0x3967, 0x5b5c, 0x5b5d, 0x3558, 0x5b5a, 0x5b5b, 0x3321, 0x5b5f, 0x3b78, 0x5637, 0x5b60, 0x3e79, 0x373b, 0x5b50, 0x4c2e, 0x3f32, 0x3b35, 0x5778, 0x3f53, 0x3f69, 0x3c61, 0x4c33, 0x5b5e, 0x3053, 0x4e6b, 0x3758, 0x5739, 0x4642, 0x4024, 0x4c39, 0x5b67, 0x5b61, 0x463a, 0x5b63, 0x5b68, 0x4577, 0x5b6a, 0x5b69, 0x3f40, 0x5b66, 0x5b65, 0x3439, 0x402c, 0x4222, 0x5b62, 0x5b64, 0x504d, 0x5b6d, 0x405d, 0x5b72, 0x3662, 0x5b73, 0x5b52, 0x3938, 0x542b, 0x5b6c, 0x3f51, 0x5b70, 0x5b51, 0x3566, 0x5b6b, 0x3f65, 0x5b6e, 0x5b71, 0x5b79, 0x3921, 0x3023, 0x4271, 0x3347, 0x5b6f, 0x5b78, 0x4652, 0x5b74, 0x5b75, 0x5b77, 0x5b76, 0x5b7e, 0x5372, 0x323a, 0x5b7d, 0x5c24, 0x5b7b, 0x5b7a, 0x5b7c, 0x4560, 0x3b79, 0x5c23, 0x5c25, 0x4c43, 0x3651, 0x5d40, 0x5c21, 0x5c22, 0x4735, 0x3669, 0x5c27, 0x5c26, 0x5c29, 0x3124, 0x354c, 0x3f30, 0x515f, 0x3642, 0x5c28, 0x4b7a, 0x6b73, 0x4b5c, 0x4b7e, 0x4c41, 0x487b, 0x5c2a, 0x4c6e, 0x5c2b, 0x5b53, 0x5c2f, 0x5c2c, 0x3e33, 0x4a7b, 0x5c2d, 0x494a, 0x4439, 0x473d, 0x5c2e, 0x5476, 0x5066, 0x442b, 0x3655, 0x5b54, 0x315a, 0x5b55, 0x5b56, 0x3a3e, 0x4840, 0x4a3f, 0x4849, 0x5733, 0x4979, 0x3f47, 0x3a78, 0x523c, 0x623a, 0x3426, 0x3138, 0x3834, 0x4f44, 0x5967, 0x4f26, 0x4d62, 0x596d, 0x3660, 0x5239, 0x393b, 0x6239, 0x6237, 0x3473, 0x4c6c, 0x4c2b, 0x3772, 0x5832, 0x516b, 0x3a3b, 0x4a27, 0x4d37, 0x5244, 0x3f64, 0x3c50, 0x3661, 0x5e45, 0x5e46, 0x5b3c, 0x5159, 0x4666, 0x444e, 0x376e, 0x375c, 0x3f7c, 0x5760, 0x4675, 0x313c, 0x5e48, 0x3d31, 0x4c57, 0x5e4a, 0x5e49, 0x356c, 0x495d, 0x3042, 0x452e, 0x452b, 0x444c, 0x3c69, 0x4b7d, 0x3a43, 0x6579, 0x4867, 0x657a, 0x4d7d, 0x5731, 0x383e, 0x4268, 0x4851, 0x657b, 0x364a, 0x3c4b, 0x517d, 0x6621, 0x436e, 0x6624, 0x657e, 0x6625, 0x4d57, 0x3741, 0x657c, 0x657d, 0x6623, 0x445d, 0x6628, 0x6627, 0x4343, 0x465e, 0x662a, 0x4437, 0x6622, 0x4a3c, 0x3d63, 0x3943, 0x6626, 0x5055, 0x4e2f, 0x6629, 0x6630, 0x5226, 0x3d2a, 0x662d, 0x662f, 0x4051, 0x524c, 0x3c27, 0x6631, 0x5276, 0x574b, 0x4d7e, 0x4d5e, 0x4226, 0x662b, 0x662c, 0x3d3f, 0x662e, 0x6633, 0x6632, 0x6636, 0x6638, 0x446f, 0x4448, 0x3e6a, 0x496f, 0x6637, 0x3670, 0x4364, 0x5369, 0x6634, 0x6635, 0x4822, 0x663d, 0x6639, 0x4645, 0x4d71, 0x663b, 0x663c, 0x3b69, 0x663e, 0x663a, 0x4037, 0x5324, 0x663f, 0x4974, 0x6643, 0x6644, 0x5076, 0x433d, 0x4344, 0x6642, 0x6641, 0x6647, 0x4f31, 0x6b74, 0x664a, 0x6645, 0x3c5e, 0x4929, 0x3c35, 0x4f53, 0x6648, 0x6649, 0x664e, 0x6650, 0x6651, 0x664b, 0x3555, 0x664c, 0x664f, 0x445b, 0x6646, 0x664d, 0x6652, 0x6654, 0x6653, 0x6655, 0x5978, 0x6656, 0x6657, 0x5753, 0x665d, 0x665e, 0x3f57, 0x5450, 0x5756, 0x3466, 0x4b6f, 0x665a, 0x5843, 0x574e, 0x5022, 0x434f, 0x665f, 0x3c3e, 0x3942, 0x665b, 0x5127, 0x3a22, 0x424f, 0x582b, 0x4a6b, 0x656e, 0x665c, 0x3775, 0x4866, 0x4475, 0x6532, 0x447e, 0x4b7c, 0x6533, 0x552c, 0x536e, 0x4a58, 0x3032, 0x4b4e, 0x4d6a, 0x3a6a, 0x6535, 0x6534, 0x575a, 0x3959, 0x5666, 0x3628, 0x4d70, 0x524b, 0x3126, 0x4a35, 0x3368, 0x4973, 0x3f4d, 0x507b, 0x4a52, 0x6536, 0x3b42, 0x4f5c, 0x392c, 0x5457, 0x3a26, 0x5167, 0x4f7c, 0x3c52, 0x6537, 0x485d, 0x3f6d, 0x3176, 0x4b5e, 0x3c45, 0x3c44, 0x527a, 0x435c, 0x3f5c, 0x383b, 0x4342, 0x3a2e, 0x5422, 0x475e, 0x442f, 0x326c, 0x3951, 0x653b, 0x4148, 0x552f, 0x653c, 0x653e, 0x3467, 0x3654, 0x4b42, 0x5130, 0x353c, 0x4a59, 0x3762, 0x4964, 0x3d2b, 0x4e3e, 0x5770, 0x5021, 0x4959, 0x367b, 0x6658, 0x3c62, 0x333e, 0x4950, 0x6659, 0x3322, 0x5e4c, 0x5348, 0x5e4d, 0x5222, 0x5e4e, 0x3e4d, 0x5e4f, 0x4a2c, 0x527c, 0x335f, 0x656a, 0x4461, 0x3e21, 0x4e32, 0x4472, 0x3e56, 0x4628, 0x3263, 0x3e53, 0x477c, 0x4c6b, 0x3d6c, 0x4e5d, 0x4a3a, 0x4641, 0x656c, 0x503c, 0x5539, 0x656d, 0x4a74, 0x4d40, 0x4245, 0x656f, 0x4244, 0x6570, 0x6578, 0x4d4d, 0x493d, 0x5259, 0x6128, 0x536c, 0x4b6a, 0x4671, 0x612c, 0x6127, 0x6129, 0x612a, 0x612f, 0x326d, 0x612b, 0x385a, 0x612d, 0x612e, 0x6130, 0x353a, 0x6131, 0x6133, 0x6138, 0x5152, 0x6136, 0x6135, 0x416b, 0x6137, 0x5440, 0x6132, 0x613a, 0x3036, 0x6134, 0x3f79, 0x6139, 0x613b, 0x613e, 0x613c, 0x5645, 0x4f3f, 0x613d, 0x613f, 0x424d, 0x366b, 0x5378, 0x474d, 0x3765, 0x3e7e, 0x6140, 0x6141, 0x6147, 0x3367, 0x4669, 0x345e, 0x5142, 0x6148, 0x6146, 0x6145, 0x6143, 0x6142, 0x3140, 0x5538, 0x6144, 0x614b, 0x614c, 0x614a, 0x6f7a, 0x6153, 0x6152, 0x4736, 0x6149, 0x614e, 0x6150, 0x6154, 0x6151, 0x614d, 0x614f, 0x6155, 0x6156, 0x6157, 0x6158, 0x615a, 0x615b, 0x4e21, 0x675d, 0x3428, 0x565d, 0x5132, 0x3332, 0x3924, 0x5773, 0x4749, 0x3e5e, 0x392e, 0x4e57, 0x326e, 0x5b4f, 0x3c3a, 0x5251, 0x4b48, 0x304d, 0x4f6f, 0x5963, 0x3d6d, 0x3152, 0x4a50, 0x323c, 0x4b27, 0x372b, 0x4a26, 0x4f23, 0x6078, 0x554a, 0x607b, 0x607a, 0x4541, 0x4c7b, 0x4131, 0x6079, 0x5663, 0x322f, 0x5644, 0x355b, 0x3478, 0x5621, 0x4f2f, 0x306f, 0x607c, 0x6121, 0x3323, 0x607d, 0x607e, 0x4331, 0x435d, 0x6122, 0x3779, 0x3b4f, 0x6123, 0x443b, 0x6124, 0x6125, 0x6126, 0x3431, 0x3849, 0x463d, 0x446a, 0x3222, 0x5052, 0x675b, 0x3b43, 0x5357, 0x5344, 0x3963, 0x624f, 0x572f, 0x476c, 0x3153, 0x3432, 0x6251, 0x5072, 0x422e, 0x6250, 0x3f62, 0x5326, 0x3557, 0x6252, 0x356a, 0x436d, 0x387d, 0x382e, 0x4553, 0x374f, 0x6254, 0x6253, 0x3648, 0x5779, 0x4d25, 0x6258, 0x6256, 0x4a7c, 0x3f35, 0x5339, 0x6255, 0x6257, 0x412e, 0x4048, 0x625b, 0x625a, 0x402a, 0x414e, 0x625c, 0x625d, 0x625e, 0x5b48, 0x5153, 0x4d22, 0x3d28, 0x5e43, 0x5825, 0x3f2a, 0x5b4d, 0x526c, 0x467a, 0x452a, 0x5e44, 0x3157, 0x5f2e, 0x4a3d, 0x5f31, 0x392d, 0x527d, 0x3825, 0x3a6b, 0x335a, 0x355c, 0x5545, 0x4356, 0x4f52, 0x3b21, 0x6573, 0x6572, 0x6574, 0x4d64, 0x4875, 0x352f, 0x473f, 0x6576, 0x6c30, 0x6566, 0x3969, 0x3531, 0x423c, 0x6568, 0x6567, 0x6569, 0x524d, 0x616a, 0x504e, 0x4d2e, 0x5165, 0x324a, 0x316b, 0x3172, 0x456d, 0x5543, 0x5330, 0x615c, 0x615d, 0x525b, 0x3339, 0x314b, 0x4d79, 0x5577, 0x615e, 0x3e36, 0x347d, 0x615f, 0x3a5c, 0x6160, 0x3b32, 0x4249, 0x6161, 0x506c, 0x4d3d, 0x6162, 0x3543, 0x4547, 0x6163, 0x6164, 0x5379, 0x6165, 0x512d, 0x6166, 0x4e22, 0x6167, 0x3542, 0x6168, 0x3b55, 0x5044, 0x6260, 0x3158, 0x5264, 0x6261, 0x3c49, 0x484c, 0x6263, 0x6c7e, 0x6c7d, 0x5f2f, 0x6262, 0x563e, 0x4d7c, 0x4326, 0x6343, 0x5652, 0x6267, 0x6268, 0x5347, 0x626c, 0x3f6c, 0x626d, 0x6265, 0x3340, 0x446e, 0x626e, 0x5043, 0x3a76, 0x6269, 0x375e, 0x3b33, 0x4c2c, 0x4b4b, 0x6264, 0x6266, 0x626a, 0x626b, 0x6277, 0x6274, 0x5475, 0x6273, 0x452d, 0x557a, 0x4542, 0x3240, 0x626f, 0x6272, 0x412f, 0x4b3c, 0x3521, 0x6279, 0x3c31, 0x6271, 0x5054, 0x5439, 0x6275, 0x3956, 0x6276, 0x4753, 0x6270, 0x575c, 0x6d21, 0x6278, 0x6d25, 0x627e, 0x4a51, 0x4135, 0x3b50, 0x3f56, 0x3a63, 0x4b21, 0x6d26, 0x6d23, 0x6d22, 0x3b56, 0x6d27, 0x5074, 0x6d24, 0x3a5e, 0x3677, 0x6321, 0x3632, 0x4c71, 0x3927, 0x4f22, 0x4721, 0x3f52, 0x3671, 0x627a, 0x627b, 0x627d, 0x627c, 0x4455, 0x6322, 0x5341, 0x6327, 0x4744, 0x4f24, 0x6329, 0x3a37, 0x6328, 0x3b5a, 0x6323, 0x6324, 0x632a, 0x6326, 0x4e72, 0x5346, 0x3b3c, 0x5443, 0x447a, 0x6d28, 0x507c, 0x6325, 0x4375, 0x632d, 0x312f, 0x6332, 0x3c42, 0x632c, 0x353f, 0x4769, 0x6330, 0x3e2a, 0x4d6f, 0x3b73, 0x4c68, 0x632f, 0x6331, 0x4f27, 0x632e, 0x4e29, 0x3b5d, 0x356b, 0x3e65, 0x3252, 0x334d, 0x3139, 0x632b, 0x3251, 0x352c, 0x395f, 0x3668, 0x4f6b, 0x6337, 0x3b4c, 0x4847, 0x504a, 0x6338, 0x336e, 0x6d29, 0x537a, 0x5364, 0x6d2a, 0x6339, 0x5262, 0x6335, 0x535e, 0x3850, 0x6333, 0x6336, 0x375f, 0x6334, 0x4022, 0x633a, 0x5438, 0x3448, 0x633b, 0x3b45, 0x4977, 0x4965, 0x443d, 0x6d2b, 0x427d, 0x3b5b, 0x3f2e, 0x4e3f, 0x633c, 0x3f36, 0x316f, 0x5477, 0x633e, 0x6d2d, 0x633f, 0x3a29, 0x6d2c, 0x633d, 0x6340, 0x3a36, 0x362e, 0x5038, 0x3043, 0x6d2e, 0x6d2f, 0x4041, 0x6341, 0x4533, 0x6342, 0x5c32, 0x6d30, 0x386a, 0x4e6c, 0x6a27, 0x5067, 0x4a79, 0x4856, 0x4f37, 0x3349, 0x4e52, 0x3d64, 0x635e, 0x3b72, 0x6a28, 0x553d, 0x465d, 0x6a29, 0x6a2a, 0x6a2c, 0x6a2b, 0x6a2e, 0x6a2d, 0x3d58, 0x6a2f, 0x423e, 0x3441, 0x3477, 0x3b27, 0x6c66, 0x6c65, 0x373f, 0x4b79, 0x3162, 0x6c67, 0x4948, 0x6c68, 0x6c69, 0x4a56, 0x5e50, 0x3245, 0x547a, 0x464b, 0x3047, 0x3472, 0x4853, 0x4d50, 0x3f38, 0x3f5b, 0x4724, 0x5634, 0x4029, 0x5e51, 0x4928, 0x516f, 0x4524, 0x3067, 0x3336, 0x4845, 0x3062, 0x3776, 0x457a, 0x3673, 0x5552, 0x3350, 0x3c3c, 0x332d, 0x3e71, 0x3051, 0x5256, 0x4a63, 0x5725, 0x4d36, 0x3636, 0x3f39, 0x555b, 0x3827, 0x4557, 0x5e52, 0x3f59, 0x4255, 0x4740, 0x3b24, 0x3128, 0x456a, 0x457b, 0x4c27, 0x3127, 0x3556, 0x4428, 0x5e53, 0x513a, 0x3369, 0x4372, 0x3777, 0x5674, 0x3523, 0x3270, 0x4434, 0x4469, 0x402d, 0x5e54, 0x3068, 0x4544, 0x4160, 0x3955, 0x3e5c, 0x4d58, 0x304e, 0x4d4f, 0x5e56, 0x3e50, 0x573e, 0x5e55, 0x5550, 0x305d, 0x4462, 0x4223, 0x3c70, 0x5335, 0x4039, 0x4521, 0x3226, 0x5471, 0x4028, 0x4a43, 0x5e57, 0x557c, 0x3930, 0x482d, 0x4b29, 0x5e59, 0x3f3d, 0x4634, 0x5727, 0x4a30, 0x4443, 0x3356, 0x3952, 0x5638, 0x6a7c, 0x3034, 0x3f66, 0x4c74, 0x4d5a, 0x563f, 0x424e, 0x4e4e, 0x4c22, 0x502e, 0x4453, 0x3532, 0x5e58, 0x5575, 0x3c37, 0x3b53, 0x3024, 0x4532, 0x346c, 0x5571, 0x6a7d, 0x5e5a, 0x4d26, 0x4d6c, 0x4e66, 0x5e5c, 0x4d31, 0x4026, 0x573d, 0x5e5b, 0x3046, 0x3a34, 0x4953, 0x4473, 0x3e68, 0x3236, 0x404c, 0x4b70, 0x3c71, 0x3b3b, 0x3537, 0x4575, 0x5e66, 0x5e63, 0x3e5d, 0x5e5f, 0x3437, 0x3d5d, 0x5e60, 0x446d, 0x4f46, 0x3560, 0x365e, 0x4a5a, 0x3574, 0x5e65, 0x5546, 0x5e61, 0x4c4d, 0x467e, 0x4545, 0x5234, 0x3e72, 0x4253, 0x4c3d, 0x3338, 0x3d53, 0x3f58, 0x4d46, 0x515a, 0x346b, 0x5e64, 0x5e5d, 0x5e67, 0x6a7e, 0x4230, 0x5e62, 0x5640, 0x3527, 0x3274, 0x5e68, 0x5e72, 0x5e6d, 0x5e71, 0x4860, 0x5761, 0x5e6f, 0x4368, 0x4c61, 0x3265, 0x523e, 0x5e6e, 0x5e6b, 0x4e55, 0x3427, 0x3f2b, 0x3e3e, 0x3d52, 0x5e69, 0x542e, 0x5e5e, 0x5e6a, 0x403f, 0x5e6c, 0x3273, 0x3869, 0x4227, 0x3d41, 0x5e75, 0x5e78, 0x322b, 0x3424, 0x346a, 0x4926, 0x5e76, 0x4b51, 0x3863, 0x5e77, 0x5e7a, 0x5e79, 0x4c42, 0x3061, 0x346e, 0x653a, 0x502f, 0x326b, 0x6b21, 0x5e74, 0x4963, 0x5e73, 0x305a, 0x5221, 0x3177, 0x4c2f, 0x5e70, 0x4b24, 0x552a, 0x5e7b, 0x345d, 0x4426, 0x5e7d, 0x437e, 0x4421, 0x5f21, 0x414c, 0x5e7c, 0x3e6f, 0x4632, 0x3345, 0x4876, 0x4b3a, 0x5e7e, 0x5f24, 0x5732, 0x3337, 0x4143, 0x474b, 0x3225, 0x3469, 0x572b, 0x446c, 0x5f22, 0x5f23, 0x5f25, 0x3a33, 0x5f26, 0x405e, 0x4943, 0x3259, 0x4766, 0x5f27, 0x475c, 0x5f28, 0x6b22, 0x4b53, 0x5f2a, 0x5f29, 0x3241, 0x454a, 0x5f2b, 0x545c, 0x4841, 0x5f2c, 0x3e70, 0x5f2d, 0x5627, 0x6a37, 0x6b36, 0x4a55, 0x587c, 0x3844, 0x3925, 0x3745, 0x557e, 0x394a, 0x5027, 0x744d, 0x3550, 0x4374, 0x3e48, 0x6b37, 0x303d, 0x3d4c, 0x4132, 0x3156, 0x3328, 0x3852, 0x4922, 0x3658, 0x6b38, 0x3e34, 0x4a7d, 0x4743, 0x557b, 0x3773, 0x4e44, 0x552b, 0x3173, 0x6c33, 0x305f, 0x6c35, 0x3637, 0x414f, 0x757a, 0x5031, 0x5565, 0x4e53, 0x3d6f, 0x3362, 0x382b, 0x5536, 0x6d3d, 0x364f, 0x4b39, 0x5042, 0x373d, 0x6c36, 0x4a29, 0x4554, 0x6c39, 0x6c38, 0x4243, 0x6c37, 0x507d, 0x6c3a, 0x6c3b, 0x5765, 0x6c3c, 0x6c3d, 0x466c, 0x4e5e, 0x3c48, 0x4855, 0x3529, 0x3e49, 0x563c, 0x5467, 0x512e, 0x5071, 0x6a38, 0x6a39, 0x6a3a, 0x3a35, 0x4a31, 0x3f75, 0x4d7a, 0x6a40, 0x303a, 0x6a3e, 0x4025, 0x6a3b, 0x327d, 0x4377, 0x3b68, 0x5257, 0x4e74, 0x6a3f, 0x6a3c, 0x6a43, 0x5047, 0x5333, 0x343a, 0x4341, 0x5772, 0x5551, 0x4a47, 0x6a45, 0x6a44, 0x6a47, 0x6a46, 0x5667, 0x4f54, 0x6a4b, 0x3b4e, 0x3d7a, 0x494e, 0x6a4c, 0x4939, 0x4f7e, 0x6a4a, 0x544e, 0x6a4d, 0x6a4f, 0x4d6d, 0x6a49, 0x6a4e, 0x4e6e, 0x3b5e, 0x333f, 0x4655, 0x3e30, 0x4e7a, 0x4767, 0x3e27, 0x6a50, 0x5647, 0x4140, 0x545d, 0x6a51, 0x4f3e, 0x6a52, 0x4a6e, 0x452f, 0x3035, 0x6a54, 0x6a53, 0x745f, 0x443a, 0x3129, 0x655f, 0x6a55, 0x4a6f, 0x6a56, 0x6a57, 0x4658, 0x6a58, 0x6a59, 0x543b, 0x477a, 0x5237, 0x387c, 0x6a42, 0x325c, 0x427c, 0x5478, 0x4c66, 0x576e, 0x5442, 0x5350, 0x6b43, 0x4573, 0x377e, 0x6b54, 0x4b37, 0x6b5e, 0x404a, 0x4d7b, 0x332f, 0x465a, 0x6b7c, 0x443e, 0x4e34, 0x4429, 0x313e, 0x547d, 0x4a75, 0x566c, 0x4653, 0x3664, 0x3b7a, 0x5060, 0x4931, 0x5453, 0x4828, 0x384b, 0x683e, 0x493c, 0x683b, 0x406e, 0x5053, 0x3244, 0x3465, 0x683c, 0x5548, 0x3645, 0x683d, 0x4a78, 0x385c, 0x4c75, 0x4034, 0x516e, 0x683f, 0x6842, 0x3a3c, 0x312d, 0x3d5c, 0x6a3d, 0x6843, 0x6846, 0x684b, 0x684c, 0x4b49, 0x3065, 0x3c2b, 0x3939, 0x6841, 0x4d77, 0x684a, 0x4e76, 0x556d, 0x4156, 0x6844, 0x4336, 0x397b, 0x5626, 0x6848, 0x4a60, 0x5466, 0x6840, 0x6845, 0x6847, 0x4739, 0x3763, 0x6849, 0x3f5d, 0x6852, 0x6857, 0x6855, 0x3c5c, 0x3c4f, 0x685b, 0x685e, 0x685a, 0x317a, 0x3058, 0x4433, 0x384c, 0x4662, 0x483e, 0x4861, 0x684f, 0x6854, 0x6856, 0x3971, 0x6858, 0x5775, 0x447b, 0x685c, 0x3269, 0x6851, 0x3c6d, 0x3f42, 0x684d, 0x5679, 0x4178, 0x3271, 0x685f, 0x4a41, 0x6859, 0x5524, 0x316a, 0x553b, 0x684e, 0x6850, 0x3630, 0x6853, 0x685d, 0x4038, 0x4a77, 0x4b28, 0x465c, 0x4075, 0x6869, 0x5023, 0x6872, 0x566a, 0x6860, 0x6861, 0x5179, 0x3a4b, 0x3879, 0x3871, 0x5454, 0x686f, 0x686e, 0x686c, 0x3970, 0x4c52, 0x6866, 0x4e26, 0x3f72, 0x3038, 0x6871, 0x6870, 0x5740, 0x6864, 0x4d29, 0x4923, 0x3b38, 0x3d5b, 0x686a, 0x6862, 0x6863, 0x6865, 0x3535, 0x6867, 0x4745, 0x686b, 0x686d, 0x3d30, 0x572e, 0x6878, 0x6875, 0x4d30, 0x6876, 0x413a, 0x6868, 0x4337, 0x3070, 0x6874, 0x6877, 0x3923, 0x4952, 0x434e, 0x4e60, 0x4066, 0x4b73, 0x4c5d, 0x5035, 0x4a61, 0x6873, 0x3c6c, 0x6879, 0x435e, 0x4665, 0x3977, 0x3074, 0x5758, 0x3c2c, 0x456f, 0x4c44, 0x6926, 0x492d, 0x6922, 0x4062, 0x3f43, 0x687e, 0x3957, 0x687b, 0x6924, 0x524e, 0x6923, 0x5632, 0x5735, 0x6927, 0x3d37, 0x687c, 0x687d, 0x6921, 0x4d56, 0x522c, 0x6932, 0x6929, 0x342a, 0x343b, 0x692b, 0x5028, 0x6925, 0x337e, 0x692c, 0x4063, 0x692a, 0x6939, 0x6938, 0x692e, 0x687a, 0x6928, 0x3f2c, 0x6931, 0x693a, 0x4225, 0x692f, 0x3845, 0x692d, 0x535c, 0x6934, 0x6935, 0x6937, 0x6947, 0x4046, 0x6945, 0x6930, 0x693b, 0x3071, 0x693c, 0x5525, 0x693e, 0x693f, 0x6941, 0x4171, 0x4836, 0x693d, 0x6942, 0x6943, 0x6933, 0x6936, 0x3b31, 0x6940, 0x3c77, 0x6944, 0x6946, 0x694a, 0x694e, 0x325b, 0x6948, 0x372e, 0x694b, 0x694c, 0x5541, 0x4423, 0x6958, 0x3a61, 0x6949, 0x5323, 0x6954, 0x6957, 0x6950, 0x694f, 0x4741, 0x6952, 0x6959, 0x3348, 0x6953, 0x4f70, 0x694d, 0x3377, 0x6956, 0x695a, 0x4c34, 0x4f2d, 0x6955, 0x695c, 0x695b, 0x695e, 0x6951, 0x695d, 0x695f, 0x434a, 0x4737, 0x344e, 0x3b36, 0x5040, 0x6c23, 0x4537, 0x537b, 0x6c24, 0x6c25, 0x465b, 0x3f6e, 0x6c26, 0x6c27, 0x502a, 0x4738, 0x3868, 0x6c28, 0x5639, 0x557d, 0x344b, 0x323d, 0x4e64, 0x4667, 0x4d61, 0x3475, 0x4b40, 0x3c5f, 0x6962, 0x6963, 0x516a, 0x6965, 0x3479, 0x6964, 0x5133, 0x4a62, 0x3250, 0x6968, 0x6966, 0x6967, 0x5633, 0x6969, 0x696a, 0x696b, 0x696c, 0x6c2f, 0x4539, 0x364e, 0x5273, 0x356e, 0x3b59, 0x6c31, 0x5263, 0x4e63, 0x4438, 0x433f, 0x363e, 0x5839, 0x3148, 0x314f, 0x3151, 0x457e, 0x3150, 0x432b, 0x5531, 0x6b24, 0x3a41, 0x4c3a, 0x6b25, 0x6b27, 0x6b28, 0x6b26, 0x6b29, 0x6b2b, 0x6b2a, 0x6b2c, 0x4a4f, 0x5835, 0x4371, 0x4325, 0x4678, 0x6b2d, 0x444a, 0x6b2e, 0x6b2f, 0x6b30, 0x3755, 0x377a, 0x6b31, 0x4762, 0x6b33, 0x3a24, 0x5175, 0x3031, 0x6b32, 0x6b34, 0x352a, 0x4248, 0x4768, 0x6b35, 0x4b2e, 0x635f, 0x5340, 0x595b, 0x4d21, 0x562d, 0x4773, 0x5960, 0x3b63, 0x3a3a, 0x6362, 0x4f2b, 0x6360, 0x4947, 0x3a39, 0x5134, 0x6361, 0x486a, 0x392f, 0x3d2d, 0x3358, 0x4e5b, 0x4c40, 0x6368, 0x6369, 0x4d74, 0x4c2d, 0x3c33, 0x636a, 0x636b, 0x505a, 0x467b, 0x375a, 0x475f, 0x524a, 0x4e56, 0x6364, 0x636c, 0x4972, 0x3341, 0x6367, 0x4663, 0x6365, 0x6d33, 0x6366, 0x4933, 0x4566, 0x3935, 0x433b, 0x6363, 0x453d, 0x4124, 0x4259, 0x3257, 0x636d, 0x3b26, 0x442d, 0x6370, 0x3e5a, 0x637b, 0x6375, 0x3a53, 0x3750, 0x534d, 0x564e, 0x5553, 0x3941, 0x5534, 0x5158, 0x5039, 0x4776, 0x482a, 0x3234, 0x435a, 0x636e, 0x637c, 0x636f, 0x3728, 0x6377, 0x6374, 0x373a, 0x4522, 0x6376, 0x455d, 0x3228, 0x467c, 0x4460, 0x5722, 0x4061, 0x6379, 0x637a, 0x637d, 0x4c29, 0x6373, 0x533e, 0x3143, 0x6d34, 0x6371, 0x6372, 0x6378, 0x503a, 0x4643, 0x5473, 0x637e, 0x3d60, 0x6427, 0x6426, 0x5173, 0x6423, 0x6429, 0x4877, 0x4f34, 0x6428, 0x642e, 0x4265, 0x3634, 0x3d72, 0x6422, 0x3a69, 0x642a, 0x642c, 0x367d, 0x565e, 0x6432, 0x642d, 0x6421, 0x3b6e, 0x4d5d, 0x4722, 0x4549, 0x4177, 0x6424, 0x4733, 0x3d2c, 0x3d3d, 0x6425, 0x5747, 0x3262, 0x642b, 0x3c43, 0x642f, 0x3b6b, 0x6430, 0x4528, 0x6431, 0x5563, 0x3f23, 0x643a, 0x6437, 0x643b, 0x643d, 0x4656, 0x3a46, 0x404b, 0x3821, 0x6434, 0x5421, 0x3a23, 0x3d7e, 0x643c, 0x4d3f, 0x4479, 0x4f7b, 0x4966, 0x533f, 0x4f51, 0x6433, 0x6438, 0x6439, 0x4c69, 0x4c4e, 0x4054, 0x6435, 0x4130, 0x6436, 0x4e50, 0x3b41, 0x3553, 0x4873, 0x3d27, 0x5547, 0x492c, 0x3822, 0x644a, 0x644c, 0x5144, 0x523a, 0x3a2d, 0x3a54, 0x6443, 0x356d, 0x574d, 0x6440, 0x4f7d, 0x643f, 0x415c, 0x4c4a, 0x4a67, 0x4457, 0x4c54, 0x6448, 0x6447, 0x6441, 0x6444, 0x352d, 0x5359, 0x6446, 0x5279, 0x3463, 0x3b34, 0x496e, 0x343e, 0x3b6c, 0x514d, 0x4c6d, 0x6d35, 0x4765, 0x5428, 0x644b, 0x5755, 0x6442, 0x3d25, 0x6445, 0x5366, 0x6449, 0x4978, 0x643e, 0x5365, 0x477e, 0x3649, 0x547c, 0x3233, 0x6457, 0x4e42, 0x644d, 0x4e3c, 0x385b, 0x6456, 0x3f4a, 0x534e, 0x436c, 0x4548, 0x6458, 0x4d44, 0x644f, 0x6454, 0x6455, 0x3a7e, 0x4f66, 0x553f, 0x6452, 0x6450, 0x644e, 0x4d65, 0x4a2a, 0x4023, 0x3d26, 0x6453, 0x3848, 0x6467, 0x5434, 0x645b, 0x416f, 0x6469, 0x5267, 0x645f, 0x6460, 0x4f2a, 0x4b5d, 0x645a, 0x6451, 0x6465, 0x485c, 0x6463, 0x4467, 0x6462, 0x6461, 0x337c, 0x6468, 0x3561, 0x574c, 0x6466, 0x3b2c, 0x5752, 0x4c4f, 0x6b78, 0x6464, 0x3976, 0x564d, 0x6459, 0x645c, 0x427a, 0x645e, 0x424b, 0x4044, 0x4250, 0x3175, 0x4c32, 0x354e, 0x646f, 0x462f, 0x4661, 0x6475, 0x4229, 0x406c, 0x515d, 0x646e, 0x442e, 0x646d, 0x6476, 0x6474, 0x427e, 0x645d, 0x6470, 0x4a7e, 0x5544, 0x6471, 0x517a, 0x646b, 0x646c, 0x6472, 0x4e2b, 0x454b, 0x4731, 0x423a, 0x646a, 0x414a, 0x4c36, 0x3331, 0x647b, 0x6473, 0x647a, 0x647d, 0x647c, 0x334e, 0x333a, 0x6477, 0x6479, 0x6478, 0x456c, 0x403d, 0x5468, 0x6522, 0x3044, 0x6524, 0x6523, 0x3c24, 0x6525, 0x6521, 0x647e, 0x3174, 0x6528, 0x6529, 0x6526, 0x6527, 0x652a, 0x4659, 0x652b, 0x652d, 0x652c, 0x652f, 0x652e, 0x3960, 0x6530, 0x6531, 0x3b70, 0x6c61, 0x4370, 0x3546, 0x3b52, 0x4169, 0x546e, 0x3e44, 0x5746, 0x5456, 0x3253, 0x6c3e, 0x6a41, 0x422f, 0x3436, 0x5157, 0x3334, 0x4832, 0x3f3b, 0x6c40, 0x564b, 0x6c3f, 0x6c41, 0x6c45, 0x3e66, 0x4c3f, 0x455a, 0x3e3c, 0x6c46, 0x317e, 0x6c44, 0x5528, 0x3563, 0x6c42, 0x4136, 0x3363, 0x6c43, 0x4b38, 0x4043, 0x4c7e, 0x4152, 0x6c48, 0x3a66, 0x4053, 0x5672, 0x514c, 0x3f3e, 0x3733, 0x4955, 0x6c47, 0x3b62, 0x4c4c, 0x3d7d, 0x4848, 0x4f29, 0x4d69, 0x456b, 0x3769, 0x5149, 0x3a38, 0x6c49, 0x6c4a, 0x3b40, 0x6c4b, 0x6c62, 0x313a, 0x3759, 0x3d39, 0x6c4c, 0x5166, 0x6c4d, 0x483b, 0x6c51, 0x6c53, 0x3b4d, 0x3c65, 0x6c4f, 0x4937, 0x433a, 0x6c63, 0x5555, 0x6c50, 0x5673, 0x6c52, 0x6c4e, 0x6c54, 0x6c55, 0x493f, 0x4f28, 0x505c, 0x512c, 0x485b, 0x6c56, 0x4e75, 0x4a6c, 0x6c5a, 0x6c59, 0x303e, 0x6c57, 0x6c58, 0x6c64, 0x483c, 0x4147, 0x6c5c, 0x5160, 0x6c5b, 0x546f, 0x6c5d, 0x5b46, 0x6c5e, 0x312c, 0x6c5f, 0x6c60, 0x5726, 0x4540, 0x6b3c, 0x302e, 0x3e74, 0x3838, 0x522f, 0x3056, 0x3579, 0x5833, 0x4b2c, 0x635d, 0x462c, 0x3066, 0x4546, 0x6b39, 0x6b3a, 0x6b3b, 0x5140, 0x4523, 0x6a72, 0x4432, 0x4435, 0x404e, 0x6a73, 0x4441, 0x4e6f, 0x6a70, 0x6a74, 0x497c, 0x4723, 0x4c58, 0x4e7e, 0x6a75, 0x6a76, 0x4f2c, 0x4067, 0x6a77, 0x363f, 0x6a78, 0x6a79, 0x6a7a, 0x6a7b, 0x6a71, 0x482e, 0x616b, 0x3738, 0x616c, 0x616d, 0x5734, 0x616e, 0x616f, 0x534c, 0x6171, 0x3f71, 0x6170, 0x3552, 0x3137, 0x6173, 0x6172, 0x3a7c, 0x6174, 0x3937, 0x3e51, 0x447c, 0x3a5d, 0x3d46, 0x6175, 0x6177, 0x3640, 0x4f41, 0x4a28, 0x6176, 0x5578, 0x537c, 0x6178, 0x617c, 0x6179, 0x617a, 0x406a, 0x617e, 0x6221, 0x4047, 0x617b, 0x617d, 0x6225, 0x4154, 0x6223, 0x6228, 0x327e, 0x6222, 0x434d, 0x3242, 0x6227, 0x6226, 0x6224, 0x6229, 0x622b, 0x5049, 0x566d, 0x4328, 0x622c, 0x4f57, 0x622e, 0x3a6f, 0x6960, 0x622d, 0x622a, 0x3b2b, 0x5433, 0x6230, 0x622f, 0x6961, 0x6231, 0x6232, 0x6233, 0x4c21, 0x6234, 0x6235, 0x507e, 0x424a, 0x5371, 0x4d75, 0x6760, 0x6761, 0x3e41, 0x426a, 0x6764, 0x6763, 0x4d66, 0x4335, 0x6762, 0x3b37, 0x4f56, 0x4161, 0x6769, 0x6768, 0x6774, 0x3223, 0x676a, 0x6766, 0x676c, 0x676b, 0x493a, 0x5564, 0x6765, 0x3729, 0x6767, 0x676e, 0x6773, 0x5669, 0x676d, 0x6772, 0x6771, 0x3060, 0x6775, 0x4772, 0x4045, 0x406d, 0x4170, 0x6770, 0x6776, 0x4b76, 0x6822, 0x6821, 0x5741, 0x677a, 0x6779, 0x677b, 0x6777, 0x677e, 0x677d, 0x677c, 0x4155, 0x4759, 0x457d, 0x4543, 0x476d, 0x6823, 0x6826, 0x6825, 0x6827, 0x3a77, 0x6778, 0x6824, 0x4870, 0x492a, 0x6829, 0x3965, 0x517e, 0x6828, 0x682a, 0x682d, 0x682e, 0x4127, 0x682f, 0x6830, 0x682c, 0x6834, 0x682b, 0x6831, 0x6835, 0x6832, 0x6833, 0x6837, 0x6836, 0x394f, 0x702c, 0x702d, 0x4630, 0x306a, 0x483f, 0x4d5f, 0x4e4d, 0x6a31, 0x6a32, 0x463f, 0x3449, 0x6a33, 0x5567, 0x5d79, 0x6a34, 0x6a35, 0x6a36, 0x384a, 0x5f30, 0x4975, 0x4c70, 0x497a, 0x497b, 0x5343, 0x4b26, 0x3826, 0x702e, 0x3142, 0x6538, 0x4c6f, 0x5349, 0x3c57, 0x496a, 0x3567, 0x4450, 0x3569, 0x6e2e, 0x3b2d, 0x675e, 0x6e2f, 0x3329, 0x6e32, 0x6e31, 0x3d67, 0x6e30, 0x4e37, 0x454f, 0x4174, 0x5b4e, 0x6e33, 0x5073, 0x4254, 0x4668, 0x372c, 0x6e34, 0x336b, 0x3b7b, 0x6e35, 0x675c, 0x6e36, 0x3d2e, 0x7162, 0x4a68, 0x5249, 0x705a, 0x705b, 0x705c, 0x4146, 0x386d, 0x3e4e, 0x705e, 0x4531, 0x705d, 0x5171, 0x7060, 0x304c, 0x3d6a, 0x525f, 0x705f, 0x342f, 0x3768, 0x7066, 0x7065, 0x4623, 0x7061, 0x7062, 0x3443, 0x7063, 0x556e, 0x4c5b, 0x3e52, 0x3c32, 0x7068, 0x7067, 0x7064, 0x3221, 0x5622, 0x5338, 0x3e37, 0x482c, 0x706a, 0x5177, 0x564c, 0x3a5b, 0x7069, 0x363b, 0x4d34, 0x4626, 0x4121, 0x706b, 0x706e, 0x706d, 0x7070, 0x706c, 0x3b3e, 0x706f, 0x4c35, 0x7072, 0x3355, 0x3154, 0x7073, 0x7074, 0x7076, 0x3461, 0x7071, 0x7077, 0x707a, 0x7078, 0x7075, 0x707d, 0x7079, 0x707c, 0x707e, 0x7121, 0x4e41, 0x7124, 0x7123, 0x4176, 0x707b, 0x4a5d, 0x3471, 0x3171, 0x4c31, 0x7126, 0x7127, 0x712c, 0x554e, 0x7129, 0x4833, 0x7122, 0x712b, 0x7128, 0x7125, 0x712a, 0x3029, 0x712d, 0x712f, 0x7131, 0x7130, 0x712e, 0x5122, 0x7132, 0x7133, 0x396f, 0x3547, 0x3057, 0x3059, 0x546d, 0x3544, 0x3d54, 0x3b4a, 0x7027, 0x385e, 0x7028, 0x3028, 0x7029, 0x4d6e, 0x702a, 0x702b, 0x4624, 0x5665, 0x7164, 0x7165, 0x4373, 0x535b, 0x5651, 0x4568, 0x532f, 0x5266, 0x6e41, 0x303b, 0x5535, 0x514e, 0x3c60, 0x3a50, 0x3f78, 0x3847, 0x3541, 0x454c, 0x4a22, 0x434b, 0x6e42, 0x443f, 0x3622, 0x6d6c, 0x4324, 0x5631, 0x4f60, 0x6d6f, 0x454e, 0x365c, 0x4a21, 0x6d6d, 0x6d70, 0x6d71, 0x433c, 0x3f34, 0x6d6e, 0x6d74, 0x6d72, 0x5566, 0x435f, 0x6d73, 0x6d76, 0x5523, 0x5123, 0x6d75, 0x4350, 0x6d77, 0x3f74, 0x3e6c, 0x6d78, 0x4c77, 0x515b, 0x5745, 0x5576, 0x6d7c, 0x6d7b, 0x6d79, 0x6d7a, 0x6d7d, 0x3e26, 0x4b2f, 0x6e21, 0x363d, 0x6e22, 0x4440, 0x6d7e, 0x3d5e, 0x3247, 0x3643, 0x6e25, 0x583a, 0x6e23, 0x6e26, 0x4369, 0x3372, 0x6e27, 0x6e24, 0x4f39, 0x6e28, 0x4277, 0x6e29, 0x6e2a, 0x5e2b, 0x4633, 0x4746, 0x5675, 0x3549, 0x4b32, 0x6e2b, 0x4d2b, 0x6e2c, 0x5530, 0x6e2d, 0x7644, 0x5b47, 0x3423, 0x432c, 0x7166, 0x4a38, 0x5253, 0x562a, 0x6f72, 0x3e58, 0x3d43, 0x6f73, 0x364c, 0x302b, 0x4a2f, 0x6d36, 0x6d37, 0x4e79, 0x372f, 0x3f73, 0x6d38, 0x426b, 0x4930, 0x6d39, 0x4676, 0x3f33, 0x6d3c, 0x4578, 0x5150, 0x5729, 0x6d3a, 0x6d3b, 0x5162, 0x6d3f, 0x6d40, 0x6d44, 0x6d48, 0x6d46, 0x6d4e, 0x5568, 0x6d49, 0x6d47, 0x6d3e, 0x4569, 0x4646, 0x4969, 0x5452, 0x6d41, 0x6d42, 0x6d43, 0x6d45, 0x4079, 0x3421, 0x3968, 0x6d50, 0x6d51, 0x6d4a, 0x6d4f, 0x4e78, 0x4b36, 0x6d4c, 0x6d4d, 0x4f75, 0x6d52, 0x4172, 0x5332, 0x6d4b, 0x4837, 0x3c6f, 0x4570, 0x6d56, 0x356f, 0x4235, 0x302d, 0x4b69, 0x312e, 0x6d54, 0x4d6b, 0x3562, 0x6d55, 0x6d53, 0x6d57, 0x357a, 0x6d58, 0x6d59, 0x6d5c, 0x314c, 0x4576, 0x3c6e, 0x6d5a, 0x4c3c, 0x326a, 0x6d5b, 0x446b, 0x3445, 0x3075, 0x6d5f, 0x405a, 0x3468, 0x454d, 0x6d5d, 0x3f44, 0x6d5e, 0x4425, 0x6d60, 0x6d61, 0x6d63, 0x4157, 0x3b47, 0x3d38, 0x6d62, 0x6d64, 0x6d66, 0x6d65, 0x6d67, 0x4a3e, 0x6c6a, 0x4071, 0x4967, 0x6c6b, 0x466e, 0x6c6c, 0x466d, 0x6c6d, 0x6c70, 0x5766, 0x6c73, 0x6c71, 0x6c6e, 0x6c6f, 0x5723, 0x4971, 0x4b6e, 0x6c74, 0x6c72, 0x4f69, 0x6c76, 0x4631, 0x3c40, 0x6c75, 0x353b, 0x3b76, 0x6c77, 0x5977, 0x3d7b, 0x423b, 0x6c78, 0x6c79, 0x3823, 0x6c7a, 0x6c7b, 0x6c7c, 0x536d, 0x582e, 0x406b, 0x475d, 0x3a4c, 0x5063, 0x4b3d, 0x4d3a, 0x3851, 0x317c, 0x476f, 0x5656, 0x3f46, 0x436b, 0x6f75, 0x4358, 0x5762, 0x6f77, 0x3353, 0x4758, 0x516d, 0x5648, 0x6f78, 0x6f76, 0x3b7d, 0x3346, 0x3d55, 0x5246, 0x3b60, 0x4f21, 0x6f7c, 0x6f7b, 0x6f79, 0x334c, 0x4954, 0x4b30, 0x6f7e, 0x305e, 0x5649, 0x6f7d, 0x336d, 0x7655, 0x4e48, 0x7022, 0x7021, 0x353e, 0x3c5a, 0x3b7c, 0x3865, 0x4442, 0x7023, 0x4b6b, 0x7026, 0x5128, 0x3e3f, 0x476e, 0x7136, 0x7137, 0x3f55, 0x3429, 0x7138, 0x4d3b, 0x4754, 0x552d, 0x7139, 0x713a, 0x474f, 0x5224, 0x564f, 0x713b, 0x3d51, 0x3430, 0x3e3d, 0x345c, 0x4e51, 0x3f5f, 0x713d, 0x3f7a, 0x713c, 0x713f, 0x713e, 0x7140, 0x7141, 0x417e, 0x4122, 0x4a7a, 0x553e, 0x3e3a, 0x3e39, 0x5542, 0x3f22, 0x4d2f, 0x7135, 0x3d5f, 0x364b, 0x5671, 0x7343, 0x7344, 0x384d, 0x7346, 0x7347, 0x304a, 0x7345, 0x7349, 0x4b71, 0x734b, 0x5026, 0x314a, 0x7348, 0x734f, 0x3551, 0x7357, 0x7352, 0x7354, 0x7353, 0x377b, 0x313f, 0x734e, 0x734a, 0x355a, 0x7350, 0x7351, 0x7355, 0x734d, 0x3c63, 0x417d, 0x7356, 0x735a, 0x734c, 0x3548, 0x3d6e, 0x735c, 0x3724, 0x3f70, 0x567e, 0x4d32, 0x3470, 0x325f, 0x7358, 0x7359, 0x4938, 0x735d, 0x735e, 0x7361, 0x735f, 0x7363, 0x7362, 0x735b, 0x3f6a, 0x336f, 0x7360, 0x4729, 0x3c72, 0x736b, 0x393f, 0x7364, 0x322d, 0x3b7e, 0x4b63, 0x736d, 0x7369, 0x395c, 0x736e, 0x7365, 0x7366, 0x736a, 0x4261, 0x736c, 0x736f, 0x7368, 0x3c7d, 0x4f64, 0x7370, 0x7367, 0x7372, 0x572d, 0x462a, 0x7373, 0x7371, 0x4228, 0x385d, 0x7375, 0x7374, 0x345b, 0x7376, 0x7377, 0x7378, 0x403a, 0x4069, 0x4571, 0x737b, 0x737a, 0x3458, 0x737e, 0x7379, 0x737c, 0x737d, 0x7421, 0x7423, 0x3b49, 0x7422, 0x7424, 0x323e, 0x7426, 0x7425, 0x3c2e, 0x4357, 0x5961, 0x4060, 0x744c, 0x5751, 0x375b, 0x744e, 0x4123, 0x4649, 0x3456, 0x5533, 0x7450, 0x744f, 0x7451, 0x4b5a, 0x7452, 0x5441, 0x5660, 0x3760, 0x4138, 0x413b, 0x7453, 0x3e2c, 0x3462, 0x7454, 0x7455, 0x3e2b, 0x7456, 0x745b, 0x7457, 0x745a, 0x3a7d, 0x7458, 0x7459, 0x3862, 0x4c47, 0x745c, 0x325a, 0x4353, 0x5463, 0x3f37, 0x745d, 0x4534, 0x7469, 0x4f35, 0x4e49, 0x4b58, 0x4b77, 0x3d74, 0x574f, 0x405b, 0x5075, 0x746a, 0x746b, 0x746c, 0x7763, 0x3731, 0x746d, 0x576b, 0x746e, 0x6679, 0x3e40, 0x667a, 0x3a6c, 0x667b, 0x4f4b, 0x667c, 0x543c, 0x3c36, 0x667d, 0x667e, 0x3c4d, 0x4852, 0x4e33, 0x6721, 0x343f, 0x6722, 0x4934, 0x3859, 0x4449, 0x575d, 0x425a, 0x3757, 0x563d, 0x4e46, 0x3744, 0x4526, 0x6723, 0x4f5f, 0x6724, 0x6725, 0x6726, 0x4137, 0x5769, 0x4970, 0x4f38, 0x562f, 0x5655, 0x6727, 0x306d, 0x6728, 0x6729, 0x495c, 0x526f, 0x3e2d, 0x672a, 0x3073, 0x485e, 0x3d61, 0x672b, 0x4846, 0x672c, 0x3b66, 0x3878, 0x5124, 0x672d, 0x4267, 0x3e78, 0x3d4a, 0x4d33, 0x672e, 0x672f, 0x3e6e, 0x5065, 0x4b67, 0x4c50, 0x3c4c, 0x6730, 0x3c28, 0x5077, 0x6731, 0x5078, 0x6732, 0x6733, 0x3442, 0x6734, 0x6735, 0x497e, 0x4e2c, 0x4360, 0x6737, 0x3141, 0x3371, 0x6738, 0x6739, 0x575b, 0x5540, 0x673a, 0x424c, 0x573a, 0x673b, 0x673c, 0x673d, 0x3c6a, 0x4365, 0x4042, 0x673e, 0x673f, 0x3c29, 0x6740, 0x6741, 0x6736, 0x3650, 0x6742, 0x6743, 0x6744, 0x3b3a, 0x355e, 0x4246, 0x3160, 0x6745, 0x5435, 0x6746, 0x383f, 0x6748, 0x6747, 0x376c, 0x6749, 0x3278, 0x674a, 0x674b, 0x674c, 0x674d, 0x674e, 0x674f, 0x6750, 0x5327, 0x4b75, 0x6751, 0x6752, 0x6753, 0x6754, 0x4949, 0x6755, 0x6756, 0x6757, 0x6758, 0x6759, 0x3d49, 0x675a, 0x733e, 0x3857, 0x4831, 0x733f, 0x7340, 0x7341, 0x395e, 0x4d78, 0x5868, 0x3a31, 0x425e, 0x6e37, 0x3723, 0x6e39, 0x6e38, 0x3055, 0x6e3b, 0x5556, 0x576f, 0x5643, 0x6e3d, 0x4a70, 0x6e3c, 0x6e3e, 0x6e40, 0x6e3f, 0x5172, 0x473c, 0x4340, 0x3861, 0x4167, 0x7446, 0x505f, 0x7447, 0x4f5b, 0x483a, 0x7448, 0x7449, 0x744a, 0x744b, 0x597a, 0x387e, 0x6571, 0x5370, 0x7460, 0x4e4c, 0x3361, 0x7134, 0x526e, 0x7461, 0x4f68, 0x7462, 0x474c, 0x3554, 0x3464, 0x7464, 0x7463, 0x7465, 0x7466, 0x7467, 0x3a32, 0x303f, 0x7468, 0x372d, 0x526d, 0x522b, 0x404f, 0x3f3c, 0x6b23, 0x555f, 0x6a48, 0x7173, 0x3678, 0x4b23, 0x444d, 0x7167, 0x7168, 0x387b, 0x7169, 0x3a44, 0x5445, 0x3052, 0x716a, 0x716b, 0x716c, 0x716d, 0x716e, 0x716f, 0x7171, 0x7170, 0x4555, 0x7172, 0x367a, 0x7174, 0x522e, 0x5e47, 0x4b4a, 0x335c, 0x3522, 0x3922, 0x4474, 0x7175, 0x7176, 0x4144, 0x417b, 0x5630, 0x7177, 0x7178, 0x412a, 0x4638, 0x3e5b, 0x7179, 0x344f, 0x717a, 0x6d32, 0x6d31, 0x4b60, 0x525e, 0x4b41, 0x5558, 0x4862, 0x405f, 0x3c21, 0x6b41, 0x5024, 0x5662, 0x3647, 0x3858, 0x6b40, 0x384e, 0x6b3f, 0x3326, 0x3949, 0x562b, 0x3774, 0x374a, 0x3c67, 0x373e, 0x6b46, 0x6b47, 0x3039, 0x3f4f, 0x6b45, 0x537d, 0x6b48, 0x6b49, 0x374e, 0x6b42, 0x6b44, 0x4976, 0x5657, 0x554d, 0x5032, 0x6b4f, 0x4e38, 0x6b50, 0x3528, 0x3133, 0x6b52, 0x4c25, 0x4556, 0x6b53, 0x6b51, 0x455f, 0x6b4e, 0x4a24, 0x6b55, 0x307b, 0x3a7a, 0x5837, 0x7163, 0x6b4a, 0x6b4b, 0x6b4c, 0x6b4d, 0x6b56, 0x6640, 0x6b59, 0x3f68, 0x5248, 0x6b57, 0x6b5c, 0x386c, 0x6b58, 0x3d3a, 0x5058, 0x3037, 0x6b5d, 0x445c, 0x562c, 0x3460, 0x4276, 0x3c39, 0x6b5a, 0x6b5b, 0x5460, 0x466a, 0x4454, 0x6b5f, 0x4527, 0x5975, 0x3231, 0x6b64, 0x3d45, 0x6b62, 0x6b63, 0x382c, 0x4d51, 0x6b65, 0x6b61, 0x4133, 0x4622, 0x4c73, 0x6b66, 0x4030, 0x5238, 0x6b67, 0x382f, 0x382d, 0x6b68, 0x473b, 0x4d73, 0x6b6a, 0x6b6b, 0x6b6d, 0x5048, 0x6b72, 0x6b6e, 0x6b71, 0x4879, 0x517c, 0x6b6c, 0x6b69, 0x3839, 0x4f59, 0x4465, 0x6b6f, 0x6b70, 0x4c5a, 0x4d48, 0x3072, 0x6b76, 0x6b75, 0x3232, 0x3860, 0x6b77, 0x316c, 0x4c45, 0x4424, 0x4f25, 0x6b79, 0x6c22, 0x4572, 0x6b7a, 0x4945, 0x625f, 0x6b7e, 0x4d4e, 0x6c21, 0x315b, 0x5337, 0x525c, 0x6b7d, 0x6b7b, 0x333c, 0x6a30, 0x5754, 0x742b, 0x3374, 0x5641, 0x5642, 0x5569, 0x3e4a, 0x7427, 0x5228, 0x7428, 0x7429, 0x742a, 0x3e4b, 0x535f, 0x4960, 0x4961, 0x7342, 0x4a66, 0x4c72, 0x6236, 0x4b34, 0x4e68, 0x565b, 0x742d, 0x742e, 0x742f, 0x7432, 0x3a3d, 0x7433, 0x3063, 0x7430, 0x7431, 0x3d22, 0x3255, 0x7436, 0x7437, 0x3666, 0x3230, 0x4f4f, 0x7434, 0x342c, 0x7435, 0x7438, 0x7439, 0x4d27, 0x743a, 0x743b, 0x743c, 0x4b52, 0x743d, 0x743e, 0x743f, 0x745e, 0x413c, 0x3c68, 0x492b, 0x515e, 0x6575, 0x5c33, 0x5255, 0x5c34, 0x302c, 0x5c35, 0x3d5a, 0x5c39, 0x5842, 0x5c37, 0x5373, 0x4956, 0x5c3a, 0x5c36, 0x5c3b, 0x4322, 0x5c3c, 0x5c45, 0x5c3d, 0x4e5f, 0x5625, 0x5c4f, 0x5c4d, 0x5c52, 0x3d66, 0x422b, 0x5c38, 0x5c4b, 0x5c4e, 0x5c3e, 0x3752, 0x3045, 0x5c47, 0x503e, 0x5c41, 0x3b28, 0x373c, 0x5c4c, 0x5c46, 0x5c3f, 0x475b, 0x513f, 0x5c40, 0x5c4a, 0x5c50, 0x4e2d, 0x5c42, 0x5c43, 0x5c48, 0x5c49, 0x3254, 0x5c51, 0x4b55, 0x5437, 0x5c5b, 0x5c5f, 0x4c26, 0x5c66, 0x4367, 0x5c5c, 0x3f41, 0x5c59, 0x307a, 0x3936, 0x5c65, 0x5c53, 0x5c44, 0x5c56, 0x4874, 0x3f60, 0x493b, 0x313d, 0x5322, 0x5c5a, 0x5c55, 0x463b, 0x5c5e, 0x5742, 0x432f, 0x3736, 0x4751, 0x4329, 0x5c62, 0x5c58, 0x5c6b, 0x5c54, 0x5c5d, 0x3e25, 0x5c57, 0x5c60, 0x5c63, 0x5c64, 0x5c78, 0x5c61, 0x5d22, 0x5c67, 0x3c6b, 0x3444, 0x4323, 0x3267, 0x5c7a, 0x5c72, 0x5c6f, 0x5c7c, 0x5c6e, 0x5270, 0x3268, 0x4857, 0x4863, 0x5c7b, 0x5c6d, 0x5c77, 0x5c75, 0x3e23, 0x5c74, 0x325d, 0x5c73, 0x3c76, 0x5c68, 0x3b44, 0x4073, 0x3c54, 0x5c69, 0x5c6a, 0x5c71, 0x5c76, 0x5c79, 0x3534, 0x4859, 0x3b67, 0x5c7e, 0x5c7d, 0x532b, 0x5d21, 0x5d23, 0x5d25, 0x5271, 0x5d24, 0x5d26, 0x5d27, 0x5229, 0x3a49, 0x5d29, 0x5d36, 0x5d31, 0x5d34, 0x5d30, 0x464e, 0x4072, 0x492f, 0x5c6c, 0x5d2e, 0x5d37, 0x5c70, 0x5d2f, 0x5d38, 0x5d2c, 0x5d39, 0x5d33, 0x5d2d, 0x442a, 0x5d28, 0x4033, 0x412b, 0x5d2a, 0x5d2b, 0x5d32, 0x3b71, 0x5d35, 0x5328, 0x5d3a, 0x5d3b, 0x4327, 0x5d52, 0x5d3c, 0x5d51, 0x393d, 0x3e55, 0x3e7a, 0x3a4a, 0x5d4a, 0x5d45, 0x5d3f, 0x324b, 0x5d43, 0x5d4b, 0x3224, 0x5d55, 0x5d3e, 0x4650, 0x5d50, 0x5d54, 0x4162, 0x3746, 0x5d4e, 0x5d4f, 0x5d44, 0x5d3d, 0x5d4d, 0x4c51, 0x5d49, 0x5d42, 0x4348, 0x463c, 0x4e2e, 0x5d4c, 0x5d48, 0x5d41, 0x5d46, 0x425c, 0x5329, 0x532a, 0x5d53, 0x4f74, 0x4878, 0x5d66, 0x5d47, 0x5d60, 0x4264, 0x5d61, 0x5d57, 0x5678, 0x5d59, 0x5d58, 0x3870, 0x5d56, 0x464f, 0x362d, 0x5d62, 0x3a79, 0x5461, 0x5d67, 0x3450, 0x5d5a, 0x3f7b, 0x5d63, 0x5d5f, 0x5d5d, 0x3559, 0x5d5b, 0x5d5c, 0x5d5e, 0x3d2f, 0x5d64, 0x5d65, 0x5d75, 0x4349, 0x4b62, 0x5d72, 0x5861, 0x4651, 0x5d74, 0x5574, 0x5d73, 0x5d70, 0x5d6c, 0x5d6f, 0x5d68, 0x506e, 0x4858, 0x5d6e, 0x5d69, 0x5d6a, 0x4b72, 0x5d6d, 0x314d, 0x4036, 0x3c3b, 0x5d71, 0x5d77, 0x5d76, 0x5d6b, 0x456e, 0x5d7b, 0x5e24, 0x5e23, 0x5d78, 0x436f, 0x427b, 0x5561, 0x4e35, 0x5d7d, 0x324c, 0x4468, 0x4a5f, 0x473e, 0x5d7a, 0x5d7c, 0x5d7e, 0x5e22, 0x302a, 0x314e, 0x5e2c, 0x5e26, 0x3d36, 0x486f, 0x5e21, 0x5e25, 0x5e29, 0x5e28, 0x5e27, 0x5e2d, 0x544c, 0x5e33, 0x5e2a, 0x5e2e, 0x4059, 0x3121, 0x5e36, 0x5e31, 0x5e32, 0x5126, 0x5e35, 0x5e2f, 0x5e30, 0x503d, 0x5e34, 0x4a6d, 0x5e39, 0x5e38, 0x5e37, 0x5e3b, 0x3d65, 0x3258, 0x436a, 0x5e3a, 0x453a, 0x5e3c, 0x4c59, 0x372a, 0x5465, 0x5e3d, 0x5e3f, 0x4422, 0x5e41, 0x5e3e, 0x5e40, 0x553a, 0x5e42, 0x722e, 0x3b22, 0x4232, 0x4530, 0x4247, 0x722f, 0x5069, 0x535d, 0x6b3d, 0x3366, 0x7230, 0x7231, 0x4a2d, 0x3a67, 0x7233, 0x7235, 0x7234, 0x4b64, 0x4f3a, 0x7232, 0x4a34, 0x524f, 0x426c, 0x4e43, 0x7238, 0x3076, 0x7237, 0x723e, 0x324f, 0x5141, 0x723a, 0x723c, 0x5469, 0x723b, 0x7236, 0x723f, 0x723d, 0x7239, 0x7247, 0x7244, 0x7246, 0x724a, 0x7242, 0x7240, 0x7245, 0x567b, 0x7241, 0x4779, 0x495f, 0x7248, 0x3946, 0x3530, 0x7243, 0x7249, 0x7250, 0x7256, 0x3b57, 0x7255, 0x4d5c, 0x566b, 0x7252, 0x7254, 0x3872, 0x724b, 0x724e, 0x4279, 0x555d, 0x724c, 0x724d, 0x724f, 0x7253, 0x7259, 0x533c, 0x366a, 0x4a71, 0x3764, 0x7257, 0x7258, 0x725a, 0x725d, 0x725b, 0x725c, 0x5151, 0x7251, 0x4d49, 0x4e4f, 0x5629, 0x7263, 0x435b, 0x7260, 0x402f, 0x726c, 0x725e, 0x7261, 0x7268, 0x7262, 0x7267, 0x7266, 0x7269, 0x725f, 0x7264, 0x726a, 0x532c, 0x7265, 0x3275, 0x7272, 0x502b, 0x7275, 0x3b48, 0x7279, 0x7270, 0x7276, 0x7278, 0x727a, 0x7273, 0x7271, 0x3a7b, 0x357b, 0x726f, 0x7277, 0x726d, 0x726e, 0x726b, 0x7326, 0x7323, 0x7322, 0x7274, 0x485a, 0x727b, 0x7325, 0x4378, 0x727d, 0x7327, 0x7329, 0x7324, 0x727c, 0x732b, 0x732a, 0x425d, 0x732e, 0x7330, 0x7321, 0x7331, 0x732c, 0x732f, 0x727e, 0x732d, 0x7332, 0x7334, 0x7328, 0x7333, 0x7335, 0x5037, 0x7338, 0x5979, 0x7339, 0x7337, 0x4864, 0x7336, 0x733a, 0x733b, 0x3440, 0x6e43, 0x733c, 0x733d, 0x512a, 0x742c, 0x5046, 0x5050, 0x515c, 0x4f4e, 0x3d56, 0x5143, 0x3a62, 0x6169, 0x5242, 0x7142, 0x3239, 0x316d, 0x7143, 0x4940, 0x3344, 0x5972, 0x4b25, 0x7144, 0x5654, 0x7145, 0x7440, 0x7146, 0x542c, 0x7147, 0x3040, 0x7441, 0x7442, 0x347c, 0x455b, 0x4c3b, 0x5064, 0x4d60, 0x7148, 0x5973, 0x313b, 0x4f2e, 0x3824, 0x714a, 0x714b, 0x3243, 0x4151, 0x5730, 0x7149, 0x714c, 0x714e, 0x5976, 0x5261, 0x5423, 0x7443, 0x4839, 0x7444, 0x714d, 0x714f, 0x3f63, 0x7150, 0x7154, 0x7156, 0x7151, 0x4951, 0x4561, 0x4263, 0x397c, 0x7153, 0x7155, 0x3953, 0x715b, 0x3a56, 0x307d, 0x7159, 0x7158, 0x7152, 0x715a, 0x7157, 0x486c, 0x4d4a, 0x715d, 0x653d, 0x715c, 0x715e, 0x715f, 0x4f65, 0x7445, 0x3d73, 0x7160, 0x7161, 0x4e77, 0x522a, 0x717b, 0x3832, 0x3c7b, 0x395b, 0x3966, 0x4359, 0x4a53, 0x6a68, 0x4040, 0x3e75, 0x6a69, 0x6a6a, 0x6a6b, 0x6a6c, 0x6a6d, 0x6a6e, 0x6a6f, 0x3d47, 0x757b, 0x757d, 0x757e, 0x757c, 0x3d62, 0x7621, 0x3425, 0x7622, 0x7623, 0x6c32, 0x5154, 0x596a, 0x7624, 0x6e3a, 0x5532, 0x537e, 0x4c5c, 0x4a44, 0x6540, 0x7625, 0x3e2f, 0x4629, 0x5a25, 0x3c46, 0x3629, 0x383c, 0x484f, 0x3c25, 0x5a26, 0x5a27, 0x4c56, 0x4843, 0x5a28, 0x467d, 0x5135, 0x5269, 0x5136, 0x3c47, 0x3d32, 0x3b64, 0x5a29, 0x5a2a, 0x5148, 0x5a2b, 0x506d, 0x366f, 0x425b, 0x4b4f, 0x376d, 0x4968, 0x3743, 0x3e77, 0x5624, 0x5a2c, 0x5a2d, 0x4640, 0x5767, 0x4a36, 0x5529, 0x4b5f, 0x556f, 0x5a2e, 0x565f, 0x344a, 0x5a30, 0x5a2f, 0x526b, 0x5a31, 0x5a32, 0x5a33, 0x4a54, 0x5a34, 0x4a2b, 0x5a35, 0x5a36, 0x334f, 0x566f, 0x5a37, 0x3b30, 0x352e, 0x5a38, 0x5a39, 0x396e, 0x512f, 0x5268, 0x5a3a, 0x3843, 0x4f6a, 0x326f, 0x5a3b, 0x5a3c, 0x3d6b, 0x4e5c, 0x536f, 0x5a3d, 0x4e73, 0x5a3e, 0x5355, 0x3b65, 0x5a3f, 0x4b35, 0x4b50, 0x5a40, 0x476b, 0x566e, 0x5a41, 0x4535, 0x3641, 0x5a42, 0x374c, 0x3f4e, 0x5a43, 0x5a44, 0x4b2d, 0x5a45, 0x3577, 0x5a46, 0x4142, 0x573b, 0x5a47, 0x4c38, 0x526a, 0x4431, 0x5a48, 0x357d, 0x3b51, 0x5a49, 0x5033, 0x5a4a, 0x5a4b, 0x4e3d, 0x5a4c, 0x5a4d, 0x5a4e, 0x3277, 0x5a51, 0x5a4f, 0x5168, 0x5a50, 0x4355, 0x5a52, 0x5a53, 0x5a54, 0x5a55, 0x503b, 0x5225, 0x3079, 0x5a56, 0x472b, 0x5a57, 0x3d77, 0x4321, 0x5a58, 0x5a59, 0x437d, 0x4c37, 0x5a5a, 0x5a5b, 0x403e, 0x4657, 0x5a5c, 0x5a5d, 0x4734, 0x5a5e, 0x5a5f, 0x3948, 0x3b6d, 0x3639, 0x7478, 0x7479, 0x4d63, 0x7539, 0x6b60, 0x4f73, 0x3b3f, 0x3a40, 0x5425, 0x6159, 0x7574, 0x312a, 0x3272, 0x7575, 0x7577, 0x3a51, 0x7576, 0x4332, 0x7579, 0x7578, 0x3134, 0x556a, 0x383a, 0x3931, 0x3246, 0x5470, 0x4f4d, 0x305c, 0x554b, 0x3b75, 0x564a, 0x3737, 0x4c30, 0x4636, 0x3161, 0x393a, 0x567c, 0x3961, 0x3721, 0x3c7a, 0x6a5a, 0x6a5b, 0x4c79, 0x3973, 0x6a5c, 0x347b, 0x4333, 0x3751, 0x3a58, 0x6a5d, 0x5474, 0x6a5e, 0x3c56, 0x3b5f, 0x6a5f, 0x415e, 0x4238, 0x545f, 0x574a, 0x6a60, 0x6a61, 0x6a64, 0x6a62, 0x6a63, 0x495e, 0x3833, 0x3644, 0x6a65, 0x4a6a, 0x494d, 0x344d, 0x6259, 0x4562, 0x6a66, 0x4035, 0x5738, 0x6a67, 0x572c, 0x487c, 0x5853, 0x584d, 0x545e, 0x5479, 0x4944, 0x532e, 0x3853, 0x3360, 0x4962, 0x7476, 0x3a55, 0x7477, 0x575f, 0x7471, 0x3830, 0x5554, 0x384f, 0x4670, 0x3343, 0x7472, 0x332c, 0x543d, 0x4777, 0x7474, 0x7473, 0x4c4b, 0x4824, 0x7475, 0x5763, 0x453f, 0x7540, 0x753b, 0x7543, 0x7542, 0x563a, 0x7541, 0x543e, 0x7544, 0x754c, 0x304f, 0x3578, 0x7549, 0x754a, 0x455c, 0x7545, 0x7546, 0x7547, 0x754b, 0x3e60, 0x7548, 0x387a, 0x7550, 0x7553, 0x3f67, 0x3972, 0x753c, 0x754d, 0x4237, 0x4c78, 0x3c79, 0x754e, 0x754f, 0x7551, 0x3665, 0x7552, 0x7555, 0x753d, 0x7554, 0x533b, 0x336c, 0x4c24, 0x7556, 0x7557, 0x3e61, 0x7558, 0x4c5f, 0x755b, 0x3248, 0x5759, 0x7559, 0x755a, 0x755c, 0x7562, 0x7560, 0x755f, 0x755d, 0x7561, 0x755e, 0x7564, 0x7565, 0x4c63, 0x653f, 0x3538, 0x7563, 0x7568, 0x4c23, 0x7566, 0x7567, 0x753e, 0x3144, 0x753f, 0x3545, 0x3264, 0x756c, 0x7569, 0x3657, 0x756d, 0x756a, 0x756b, 0x345a, 0x546a, 0x756e, 0x3379, 0x756f, 0x7571, 0x7570, 0x7572, 0x7573, 0x496d, 0x392a, 0x477b, 0x3663, 0x4c49, 0x6a26, 0x3335, 0x547e, 0x396c, 0x5079, 0x696d, 0x572a, 0x696e, 0x4256, 0x486d, 0x3a64, 0x696f, 0x6970, 0x6971, 0x5661, 0x6972, 0x6973, 0x6975, 0x6974, 0x6976, 0x6977, 0x4761, 0x6978, 0x5458, 0x6979, 0x3d4e, 0x697a, 0x697b, 0x3d4f, 0x697c, 0x3828, 0x413e, 0x697d, 0x3132, 0x3b54, 0x3975, 0x697e, 0x6a21, 0x6a22, 0x6a23, 0x3778, 0x3c2d, 0x4a64, 0x604e, 0x542f, 0x4f3d, 0x5537, 0x6a24, 0x555e, 0x6a25, 0x5041, 0x393c, 0x3447, 0x3159, 0x4031, 0x3166, 0x3167, 0x3168, 0x333d, 0x4868, 0x6541, 0x315f, 0x4149, 0x346f, 0x4728, 0x5358, 0x4679, 0x5138, 0x397d, 0x4275, 0x532d, 0x544b, 0x3d7c, 0x6542, 0x3735, 0x6543, 0x3b39, 0x5562, 0x3d78, 0x5436, 0x4e25, 0x412c, 0x3359, 0x4c76, 0x6546, 0x6544, 0x6548, 0x654a, 0x6547, 0x354f, 0x4648, 0x357c, 0x6545, 0x4a76, 0x6549, 0x4354, 0x3145, 0x3c23, 0x5737, 0x4d4b, 0x4b4d, 0x4a4a, 0x4c53, 0x654c, 0x654b, 0x4466, 0x5121, 0x5137, 0x654d, 0x6550, 0x4d38, 0x5670, 0x654f, 0x355d, 0x4d3e, 0x6551, 0x363a, 0x4d28, 0x3964, 0x4a45, 0x3351, 0x4b59, 0x546c, 0x6552, 0x376a, 0x654e, 0x6555, 0x347e, 0x6556, 0x6553, 0x6554, 0x525d, 0x425f, 0x3146, 0x5362, 0x365d, 0x4b6c, 0x6557, 0x5376, 0x3169, 0x3674, 0x655a, 0x6558, 0x6559, 0x3540, 0x5245, 0x655c, 0x655e, 0x655d, 0x4732, 0x5223, 0x655b, 0x5462, 0x555a, 0x6560, 0x5771, 0x6561, 0x315c, 0x517b, 0x6562, 0x6564, 0x6563, 0x6565, 0x5258, 0x354b, 0x675f, 0x5a75, 0x5a78, 0x5a76, 0x5a77, 0x5a7a, 0x504f, 0x4447, 0x306e, 0x5030, 0x5a79, 0x534a, 0x3a2a, 0x5b22, 0x4771, 0x5a7c, 0x5a7b, 0x495b, 0x5a7d, 0x5b21, 0x575e, 0x5a7e, 0x415a, 0x5b25, 0x5374, 0x5b27, 0x5b24, 0x5b28, 0x3d3c, 0x4049, 0x5b23, 0x5b26, 0x5623, 0x5b29, 0x5b2d, 0x5b2e, 0x5b2c, 0x3a42, 0x3f24, 0x5b2b, 0x5b2a, 0x5447, 0x323f, 0x5b2f, 0x3979, 0x5b30, 0x333b, 0x3526, 0x363c, 0x5b31, 0x3675, 0x5b32, 0x3149, 0x5b34, 0x5b33, 0x5b35, 0x5b37, 0x5b36, 0x5b38, 0x5b39, 0x5b3a, 0x534f, 0x747a, 0x4775, 0x5743, 0x4564, 0x747c, 0x747d, 0x747b, 0x3e46, 0x506f, 0x3753, 0x544d, 0x4c2a, 0x7522, 0x7521, 0x3a28, 0x747e, 0x4b56, 0x7524, 0x4052, 0x336a, 0x4d2a, 0x7525, 0x7523, 0x3d34, 0x7528, 0x7529, 0x3d4d, 0x4338, 0x3f61, 0x4b61, 0x752a, 0x7526, 0x7527, 0x4470, 0x752c, 0x343c, 0x576d, 0x3457, 0x752b, 0x752e, 0x752d, 0x752f, 0x5051, 0x4351, 0x4829, 0x7530, 0x7531, 0x7532, 0x7533, 0x7534, 0x7535, 0x7537, 0x7536, 0x7538, 0x3249, 0x5354, 0x4a4d, 0x406f, 0x5658, 0x5230, 0x413f, 0x3d70, 0x382a, 0x3c78, 0x7646, 0x7647, 0x7648, 0x7649, 0x764a, 0x764c, 0x764b, 0x7769, 0x764d, 0x764e, 0x6e44, 0x6e45, 0x6e46, 0x556b, 0x3624, 0x6e48, 0x6e47, 0x6e49, 0x6e4a, 0x4725, 0x6e4b, 0x6e4c, 0x3730, 0x3576, 0x6e4d, 0x6e4f, 0x6e4e, 0x3846, 0x6e50, 0x6e51, 0x6e52, 0x365b, 0x332e, 0x5653, 0x4446, 0x3135, 0x3856, 0x6e53, 0x6e54, 0x543f, 0x4755, 0x3e7b, 0x4e59, 0x3933, 0x6e56, 0x6e55, 0x6e58, 0x6e57, 0x4525, 0x6e59, 0x6e5a, 0x472e, 0x6e5b, 0x472f, 0x6e5c, 0x3227, 0x6e5d, 0x6e5e, 0x6e5f, 0x6e60, 0x6e61, 0x576a, 0x6e62, 0x6e63, 0x3c58, 0x6e64, 0x534b, 0x4c7a, 0x322c, 0x4165, 0x6e65, 0x4726, 0x432d, 0x6e66, 0x6e67, 0x6e68, 0x6e69, 0x6e6a, 0x6e6b, 0x6e6c, 0x6e6d, 0x6e6e, 0x6e6f, 0x6e70, 0x6e71, 0x6e72, 0x6e74, 0x6e73, 0x6e75, 0x4d2d, 0x4241, 0x6e76, 0x6e77, 0x6e78, 0x5521, 0x6e79, 0x4f33, 0x6e7a, 0x6e7b, 0x6e7c, 0x6e7d, 0x6f21, 0x6e7e, 0x6f22, 0x3875, 0x437a, 0x6f23, 0x6f24, 0x3d42, 0x523f, 0x3279, 0x6f25, 0x6f26, 0x6f27, 0x5278, 0x6f28, 0x567d, 0x6f29, 0x464c, 0x6f2a, 0x6f2b, 0x4134, 0x6f2c, 0x4f7a, 0x4b78, 0x6f2e, 0x6f2d, 0x337a, 0x3978, 0x6f2f, 0x6f30, 0x5062, 0x6f31, 0x6f32, 0x3766, 0x503f, 0x6f33, 0x6f34, 0x6f35, 0x4871, 0x4c60, 0x6f36, 0x6f37, 0x6f38, 0x6f39, 0x6f3a, 0x5560, 0x6f3b, 0x346d, 0x432a, 0x6f3c, 0x6f3d, 0x6f3e, 0x6f3f, 0x4e7d, 0x6f40, 0x4260, 0x3438, 0x5736, 0x3d75, 0x4f47, 0x6f43, 0x6f41, 0x6f42, 0x6f44, 0x3627, 0x3c7c, 0x3e62, 0x434c, 0x6f45, 0x6f46, 0x6f47, 0x6f4f, 0x6f48, 0x6f49, 0x6f4a, 0x4742, 0x6f71, 0x364d, 0x6f4b, 0x6f4c, 0x6f4d, 0x3646, 0x433e, 0x6f4e, 0x6f50, 0x6f51, 0x6f52, 0x5572, 0x6f53, 0x4477, 0x6f54, 0x4478, 0x6f55, 0x6f56, 0x3864, 0x3077, 0x6f57, 0x6f58, 0x6f59, 0x6f5a, 0x6f5b, 0x6f5c, 0x6f5d, 0x6f5e, 0x3e35, 0x6f61, 0x6f5f, 0x6f60, 0x6f62, 0x6f63, 0x414d, 0x6f64, 0x6f65, 0x6f66, 0x6f67, 0x6f68, 0x6f69, 0x6f6a, 0x6f6b, 0x6f6c, 0x4058, 0x6f6d, 0x412d, 0x6f6e, 0x6f6f, 0x6f70, 0x4f62, 0x3324, 0x4345, 0x6345, 0x4941, 0x6346, 0x3155, 0x4e4a, 0x3433, 0x4872, 0x6347, 0x4f50, 0x6348, 0x3c64, 0x6349, 0x634a, 0x4346, 0x5522, 0x4456, 0x396b, 0x4e45, 0x634b, 0x4376, 0x634c, 0x3727, 0x3873, 0x3a52, 0x634d, 0x634e, 0x5444, 0x634f, 0x6350, 0x514b, 0x6351, 0x6352, 0x6353, 0x6354, 0x5156, 0x6355, 0x327b, 0x403b, 0x6356, 0x402b, 0x6357, 0x6358, 0x6359, 0x635a, 0x635b, 0x3837, 0x5a62, 0x3653, 0x5a64, 0x5a63, 0x5a66, 0x486e, 0x5a65, 0x3740, 0x5174, 0x5275, 0x5573, 0x3d57, 0x5768, 0x5a68, 0x5a67, 0x3022, 0x4d53, 0x5a69, 0x383d, 0x3c4a, 0x423d, 0x4224, 0x3342, 0x5a6a, 0x422a, 0x4430, 0x3d35, 0x4f5e, 0x5a6b, 0x4942, 0x315d, 0x5a6c, 0x3638, 0x543a, 0x337d, 0x5a6d, 0x5449, 0x4f55, 0x4563, 0x5a6e, 0x5a6f, 0x5a70, 0x416a, 0x4c55, 0x4f5d, 0x5367, 0x4221, 0x5a71, 0x4b65, 0x5a72, 0x4b66, 0x527e, 0x3874, 0x5a73, 0x302f, 0x4f36, 0x554f, 0x4b6d, 0x5a74, 0x6344, 0x4125, 0x763f, 0x7640, 0x7641, 0x4451, 0x4838, 0x5163, 0x505b, 0x5145, 0x3c2f, 0x394d, 0x6f74, 0x3446, 0x533a, 0x7642, 0x337b, 0x7643, 0x3571, 0x7645, 0x536a, 0x7627, 0x5129, 0x7629, 0x7628, 0x4163, 0x4057, 0x3122, 0x4e6d, 0x5068, 0x762b, 0x4f76, 0x762a, 0x5570, 0x762c, 0x4339, 0x3b74, 0x762e, 0x762d, 0x445e, 0x4158, 0x4b2a, 0x4f3c, 0x762f, 0x7630, 0x7631, 0x4236, 0x3054, 0x4579, 0x7632, 0x4760, 0x7626, 0x3e38, 0x3e32, 0x3565, 0x3747, 0x3f3f, 0x4352, 0x4366, 0x584c, 0x386f, 0x3d79, 0x5125, 0x3050, 0x7730, 0x7731, 0x502c, 0x3030, 0x7732, 0x7733, 0x7734, 0x474a, 0x3e4f, 0x7737, 0x7736, 0x315e, 0x7735, 0x7738, 0x7739, 0x4e24, 0x484d, 0x3a2b, 0x6838, 0x6839, 0x683a, 0x3e42, 0x5274, 0x544f, 0x4958, 0x5233, 0x3625, 0x476a, 0x717c, 0x4f6e, 0x4b33, 0x506b, 0x676f, 0x4d67, 0x394b, 0x3659, 0x717d, 0x3064, 0x4b4c, 0x717e, 0x5424, 0x422d, 0x416c, 0x4644, 0x3e31, 0x7221, 0x3c55, 0x7222, 0x7223, 0x7224, 0x5243, 0x4635, 0x4d47, 0x7225, 0x5331, 0x3f45, 0x4c62, 0x7226, 0x7227, 0x5155, 0x366e, 0x7228, 0x7229, 0x355f, 0x722a, 0x722b, 0x327c, 0x722c, 0x722d, 0x4827, 0x3767, 0x6c29, 0x6c2a, 0x6c2b, 0x6c2c, 0x462e, 0x6c2d, 0x6c2e, 0x3749, 0x4a33, 0x6238, 0x774f, 0x7750, 0x324d, 0x7751, 0x7753, 0x7752, 0x623b, 0x3c22, 0x623c, 0x623d, 0x623e, 0x623f, 0x6240, 0x6241, 0x3739, 0x527b, 0x3d24, 0x4a4e, 0x3125, 0x4b47, 0x6242, 0x367c, 0x4844, 0x6243, 0x3d48, 0x317d, 0x6244, 0x3676, 0x6245, 0x4459, 0x6246, 0x4f5a, 0x395d, 0x6247, 0x4021, 0x6248, 0x3276, 0x6249, 0x4173, 0x624a, 0x624b, 0x4278, 0x624c, 0x624d, 0x624e, 0x4a57, 0x5838, 0x5965, 0x4f63, 0x7025, 0x5c30, 0x426d, 0x5426, 0x4d54, 0x5131, 0x335b, 0x477d, 0x3235, 0x423f, 0x6660, 0x4a3b, 0x6661, 0x6662, 0x3e54, 0x6663, 0x5724, 0x4d55, 0x6665, 0x3c5d, 0x6664, 0x6666, 0x6667, 0x426e, 0x3d3e, 0x6668, 0x4266, 0x3a27, 0x6669, 0x666a, 0x3352, 0x5169, 0x3f25, 0x666b, 0x466f, 0x666c, 0x666d, 0x666e, 0x462d, 0x666f, 0x4927, 0x6670, 0x6671, 0x6672, 0x6539, 0x6673, 0x6674, 0x4262, 0x6675, 0x6676, 0x5668, 0x6677, 0x6678, 0x3947, 0x773b, 0x773a, 0x773e, 0x773c, 0x3a21, 0x773f, 0x7740, 0x7742, 0x7741, 0x7744, 0x7743, 0x7745, 0x7746, 0x7747, 0x4b68, 0x385f, 0x7754, 0x7755, 0x7756, 0x7758, 0x775a, 0x7757, 0x775b, 0x7759, 0x5757, 0x775c, 0x775d, 0x775e, 0x775f, 0x7760, 0x5b4b, 0x582a, 0x6577, 0x396d, 0x3f7d, 0x3b6a, 0x7749, 0x4647, 0x7748, 0x774a, 0x774c, 0x774b, 0x774d, 0x4e3a, 0x774e, 0x4427, 0x5363, 0x764f, 0x4233, 0x7650, 0x7651, 0x7652, 0x7653, 0x7654, 0x7656, 0x312b, 0x7657, 0x7658, 0x7659, 0x765a, 0x765b, 0x765c, 0x765d, 0x765e, 0x4f4a, 0x765f, 0x7660, 0x7661, 0x7662, 0x7663, 0x7664, 0x4070, 0x7665, 0x7666, 0x7667, 0x7668, 0x7669, 0x766a, 0x766b, 0x766c, 0x766d, 0x766e, 0x766f, 0x7670, 0x7671, 0x7672, 0x7673, 0x7674, 0x3e28, 0x7675, 0x7676, 0x7677, 0x7678, 0x487a, 0x7679, 0x767a, 0x767b, 0x767c, 0x767d, 0x767e, 0x7721, 0x7722, 0x7723, 0x7724, 0x7725, 0x7726, 0x7727, 0x7728, 0x316e, 0x7729, 0x772a, 0x772b, 0x772c, 0x772d, 0x415b, 0x772e, 0x772f, 0x4471, 0x702f, 0x3c26, 0x7030, 0x4379, 0x4538, 0x513b, 0x7031, 0x7032, 0x7033, 0x7034, 0x7035, 0x513c, 0x516c, 0x7037, 0x7036, 0x5427, 0x4d52, 0x7038, 0x703a, 0x7039, 0x703b, 0x703c, 0x386b, 0x703d, 0x3a68, 0x703e, 0x703f, 0x3e69, 0x7040, 0x366c, 0x7041, 0x7042, 0x7043, 0x7044, 0x4835, 0x7045, 0x7046, 0x7047, 0x4574, 0x7048, 0x7049, 0x704a, 0x773d, 0x704b, 0x704c, 0x704d, 0x704e, 0x704f, 0x3a57, 0x7050, 0x7051, 0x7052, 0x7053, 0x7054, 0x7055, 0x7056, 0x7058, 0x5325, 0x7057, 0x7059, 0x753a, 0x4239, 0x7764, 0x7765, 0x7766, 0x7767, 0x7768, 0x4234, 0x776a, 0x776b, 0x4273, 0x7470, 0x746f, 0x4269, 0x7761, 0x7762, 0x3b46, 0x5964, 0x4a72, 0x4068, 0x7024, 0x3a5a, 0x472d, 0x442c, 0x776c, 0x776d, 0x776e, 0x7770, 0x776f, 0x7771, 0x7774, 0x7773, 0x7772, 0x7775, 0x7776, 0x6d69, 0x6d6a, 0x6d6b, 0x763c, 0x763d, 0x763e, 0x3626, 0x583e, 0x3944, 0x583b, 0x5c31, 0x4a73, 0x7777, 0x7778, 0x7779, 0x777b, 0x777a, 0x3147, 0x777c, 0x777d, 0x777e, 0x466b, 0x6c34, 0x335d, 0x7633, 0x7634, 0x4164, 0x7635, 0x7636, 0x7637, 0x7638, 0x7639, 0x763a, 0x4823, 0x763b, 0x417a, 0x3928, 0x6d68, 0x396a, 0x595f, 0x2321, 0x2322, 0x2323, 0x2167, 0x2325, 0x2326, 0x2327, 0x2328, 0x2329, 0x232a, 0x232b, 0x232c, 0x232d, 0x232e, 0x232f, 0x2330, 0x2331, 0x2332, 0x2333, 0x2334, 0x2335, 0x2336, 0x2337, 0x2338, 0x2339, 0x233a, 0x233b, 0x233c, 0x233d, 0x233e, 0x233f, 0x2340, 0x2341, 0x2342, 0x2343, 0x2344, 0x2345, 0x2346, 0x2347, 0x2348, 0x2349, 0x234a, 0x234b, 0x234c, 0x234d, 0x234e, 0x234f, 0x2350, 0x2351, 0x2352, 0x2353, 0x2354, 0x2355, 0x2356, 0x2357, 0x2358, 0x2359, 0x235a, 0x235b, 0x235c, 0x235d, 0x235e, 0x235f, 0x2360, 0x2361, 0x2362, 0x2363, 0x2364, 0x2365, 0x2366, 0x2367, 0x2368, 0x2369, 0x236a, 0x236b, 0x236c, 0x236d, 0x236e, 0x236f, 0x2370, 0x2371, 0x2372, 0x2373, 0x2374, 0x2375, 0x2376, 0x2377, 0x2378, 0x2379, 0x237a, 0x237b, 0x237c, 0x237d, 0x212b, 0x2169, 0x216a, 0x237e, 0x2324, }; static const Summary16 gb2312_uni2indx_page00[70] = { /* 0x0000 */ { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0000 }, { 0, 0x0190 }, { 3, 0x0003 }, { 5, 0x0000 }, { 5, 0x0080 }, { 6, 0x3703 }, { 13, 0x168c }, /* 0x0100 */ { 19, 0x0002 }, { 20, 0x0808 }, { 22, 0x0800 }, { 23, 0x0000 }, { 23, 0x2000 }, { 24, 0x0000 }, { 24, 0x0800 }, { 25, 0x0000 }, { 25, 0x0000 }, { 25, 0x0000 }, { 25, 0x0000 }, { 25, 0x0000 }, { 25, 0x4000 }, { 26, 0x1555 }, { 33, 0x0000 }, { 33, 0x0000 }, /* 0x0200 */ { 33, 0x0000 }, { 33, 0x0000 }, { 33, 0x0000 }, { 33, 0x0000 }, { 33, 0x0000 }, { 33, 0x0000 }, { 33, 0x0000 }, { 33, 0x0000 }, { 33, 0x0000 }, { 33, 0x0000 }, { 33, 0x0000 }, { 33, 0x0000 }, { 33, 0x0280 }, { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0x0000 }, /* 0x0300 */ { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0x0000 }, { 35, 0xfffe }, { 50, 0x03fb }, { 59, 0xfffe }, { 74, 0x03fb }, { 83, 0x0000 }, { 83, 0x0000 }, { 83, 0x0000 }, /* 0x0400 */ { 83, 0x0002 }, { 84, 0xffff }, { 100, 0xffff }, { 116, 0xffff }, { 132, 0xffff }, { 148, 0x0002 }, }; static const Summary16 gb2312_uni2indx_page20[101] = { /* 0x2000 */ { 149, 0x0000 }, { 149, 0x3360 }, { 155, 0x0040 }, { 156, 0x080d }, { 160, 0x0000 }, { 160, 0x0000 }, { 160, 0x0000 }, { 160, 0x0000 }, { 160, 0x0000 }, { 160, 0x0000 }, { 160, 0x0000 }, { 160, 0x0000 }, { 160, 0x0000 }, { 160, 0x0000 }, { 160, 0x0000 }, { 160, 0x0000 }, /* 0x2100 */ { 160, 0x0008 }, { 161, 0x0040 }, { 162, 0x0000 }, { 162, 0x0000 }, { 162, 0x0000 }, { 162, 0x0000 }, { 162, 0x0fff }, { 174, 0x0000 }, { 174, 0x0000 }, { 174, 0x000f }, { 178, 0x0000 }, { 178, 0x0000 }, { 178, 0x0000 }, { 178, 0x0000 }, { 178, 0x0000 }, { 178, 0x0000 }, /* 0x2200 */ { 178, 0x8100 }, { 180, 0x6402 }, { 184, 0x4fa1 }, { 192, 0x20f0 }, { 197, 0x1100 }, { 199, 0x0000 }, { 199, 0xc033 }, { 205, 0x0000 }, { 205, 0x0000 }, { 205, 0x0200 }, { 206, 0x0020 }, { 207, 0x0000 }, { 207, 0x0000 }, { 207, 0x0000 }, { 207, 0x0000 }, { 207, 0x0000 }, /* 0x2300 */ { 207, 0x0000 }, { 207, 0x0004 }, { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, /* 0x2400 */ { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x0000 }, { 208, 0x03ff }, { 218, 0xfff0 }, { 230, 0xffff }, { 246, 0x0fff }, { 258, 0x0000 }, { 258, 0x0000 }, { 258, 0x0000 }, { 258, 0x0000 }, { 258, 0x0000 }, { 258, 0x0000 }, /* 0x2500 */ { 258, 0xffff }, { 274, 0xffff }, { 290, 0xffff }, { 306, 0xffff }, { 322, 0x0fff }, { 334, 0x0000 }, { 334, 0x0000 }, { 334, 0x0000 }, { 334, 0x0000 }, { 334, 0x0000 }, { 334, 0x0003 }, { 336, 0x000c }, { 338, 0xc8c0 }, { 343, 0x0000 }, { 343, 0x0000 }, { 343, 0x0000 }, /* 0x2600 */ { 343, 0x0060 }, { 345, 0x0000 }, { 345, 0x0000 }, { 345, 0x0000 }, { 345, 0x0005 }, }; static const Summary16 gb2312_uni2indx_page30[35] = { /* 0x3000 */ { 347, 0xff2f }, { 360, 0x00fb }, { 367, 0x0000 }, { 367, 0x0000 }, { 367, 0xfffe }, { 382, 0xffff }, { 398, 0xffff }, { 414, 0xffff }, { 430, 0xffff }, { 446, 0x000f }, { 450, 0xfffe }, { 465, 0xffff }, { 481, 0xffff }, { 497, 0xffff }, { 513, 0xffff }, { 529, 0x087f }, /* 0x3100 */ { 537, 0xffe0 }, { 548, 0xffff }, { 564, 0x03ff }, { 574, 0x0000 }, { 574, 0x0000 }, { 574, 0x0000 }, { 574, 0x0000 }, { 574, 0x0000 }, { 574, 0x0000 }, { 574, 0x0000 }, { 574, 0x0000 }, { 574, 0x0000 }, { 574, 0x0000 }, { 574, 0x0000 }, { 574, 0x0000 }, { 574, 0x0000 }, /* 0x3200 */ { 574, 0x0000 }, { 574, 0x0000 }, { 574, 0x03ff }, }; static const Summary16 gb2312_uni2indx_page4e[1263] = { /* 0x4e00 */ { 584, 0x7f8b }, { 595, 0x7f7b }, { 608, 0x3db4 }, { 617, 0xef55 }, { 628, 0xfba8 }, { 638, 0xf35d }, { 649, 0x0243 }, { 653, 0x400b }, { 657, 0xfb40 }, { 665, 0x8d3e }, { 674, 0x7bf7 }, { 687, 0x8c2c }, { 693, 0x6eff }, { 706, 0xe3fa }, { 717, 0x1d3a }, { 725, 0xa8ed }, /* 0x4f00 */ { 734, 0xe602 }, { 740, 0xcf83 }, { 749, 0x8cf5 }, { 758, 0x3555 }, { 766, 0xe048 }, { 771, 0xffab }, { 784, 0x92b9 }, { 792, 0xd859 }, { 800, 0xab18 }, { 807, 0x2892 }, { 812, 0xd7e9 }, { 823, 0x8020 }, { 825, 0xc438 }, { 831, 0xf583 }, { 840, 0xe74a }, { 849, 0x450a }, /* 0x5000 */ { 854, 0xb000 }, { 857, 0x9714 }, { 864, 0x7762 }, { 873, 0x5400 }, { 876, 0xd188 }, { 882, 0x1420 }, { 885, 0x1020 }, { 887, 0xc8c0 }, { 892, 0x2121 }, { 896, 0x0000 }, { 896, 0x13a8 }, { 902, 0x0c04 }, { 905, 0x8000 }, { 906, 0x0440 }, { 908, 0x70c0 }, { 913, 0x0828 }, /* 0x5100 */ { 916, 0x08c0 }, { 919, 0x0004 }, { 920, 0x0002 }, { 921, 0x8000 }, { 922, 0x2b7b }, { 932, 0x1472 }, { 938, 0x7924 }, { 945, 0x3bfb }, { 957, 0x3327 }, { 965, 0x1ae4 }, { 972, 0x9835 }, { 979, 0x38ef }, { 989, 0x9ad1 }, { 997, 0x2802 }, { 1000, 0xa813 }, { 1006, 0xbf69 }, /* 0x5200 */ { 1017, 0x65cf }, { 1027, 0x2fc6 }, { 1036, 0x6b11 }, { 1043, 0xafc9 }, { 1053, 0x340f }, { 1060, 0x5053 }, { 1066, 0x86a2 }, { 1072, 0xa004 }, { 1075, 0x0106 }, { 1078, 0xe809 }, { 1084, 0x3f0f }, { 1094, 0xc00e }, { 1099, 0x0a88 }, { 1103, 0x8145 }, { 1108, 0x0010 }, { 1109, 0xc601 }, /* 0x5300 */ { 1114, 0xa161 }, { 1120, 0x26e1 }, { 1127, 0x444b }, { 1133, 0xce00 }, { 1138, 0xc7aa }, { 1147, 0xd4ee }, { 1157, 0xcadf }, { 1168, 0x85bb }, { 1177, 0x3a74 }, { 1185, 0xa520 }, { 1190, 0x436c }, { 1197, 0x8840 }, { 1200, 0x3f06 }, { 1208, 0x8bd2 }, { 1216, 0xff79 }, { 1229, 0x3bef }, /* 0x5400 */ { 1241, 0xf75a }, { 1252, 0xe8ef }, { 1263, 0xfbcb }, { 1275, 0x5b36 }, { 1284, 0x0d49 }, { 1290, 0x1bfd }, { 1301, 0x0154 }, { 1305, 0x39ee }, { 1315, 0xd855 }, { 1323, 0x2e75 }, { 1332, 0xbfd8 }, { 1343, 0xa91a }, { 1350, 0xf3d7 }, { 1362, 0xf6bf }, { 1375, 0x67e0 }, { 1383, 0xb40c }, /* 0x5500 */ { 1389, 0x82c2 }, { 1394, 0x0813 }, { 1398, 0xd49d }, { 1407, 0xd08b }, { 1414, 0x065a }, { 1420, 0x1061 }, { 1424, 0x74f2 }, { 1433, 0x59e0 }, { 1440, 0x8f9f }, { 1451, 0xb312 }, { 1458, 0x0080 }, { 1459, 0x6aaa }, { 1467, 0x3230 }, { 1472, 0xb05e }, { 1480, 0x9d7a }, { 1490, 0x60ac }, /* 0x5600 */ { 1496, 0xd303 }, { 1503, 0xc900 }, { 1507, 0x3098 }, { 1512, 0x8a56 }, { 1519, 0x7000 }, { 1522, 0x1390 }, { 1527, 0x1f14 }, { 1534, 0x1842 }, { 1538, 0xc060 }, { 1542, 0x0008 }, { 1543, 0x8008 }, { 1545, 0x1080 }, { 1547, 0x0400 }, { 1548, 0xec90 }, { 1555, 0x2817 }, { 1561, 0xe633 }, /* 0x5700 */ { 1570, 0x0758 }, { 1576, 0x9000 }, { 1578, 0xf708 }, { 1586, 0x4e09 }, { 1592, 0xf485 }, { 1600, 0xfc83 }, { 1609, 0xaf53 }, { 1619, 0x18c8 }, { 1624, 0x187c }, { 1631, 0x080c }, { 1634, 0x6adf }, { 1645, 0x0114 }, { 1648, 0xc80c }, { 1653, 0xa734 }, { 1661, 0xa011 }, { 1665, 0x2710 }, /* 0x5800 */ { 1670, 0x28c5 }, { 1676, 0x4222 }, { 1680, 0x0413 }, { 1684, 0x0021 }, { 1686, 0x3010 }, { 1689, 0x4112 }, { 1693, 0x1820 }, { 1696, 0x4000 }, { 1697, 0x022b }, { 1702, 0xc60c }, { 1708, 0x0300 }, { 1710, 0x1000 }, { 1711, 0x0022 }, { 1713, 0x0022 }, { 1715, 0x5810 }, { 1719, 0x0249 }, /* 0x5900 */ { 1723, 0xa094 }, { 1728, 0x9670 }, { 1735, 0xeeb0 }, { 1744, 0x1792 }, { 1751, 0xcb96 }, { 1760, 0x05f2 }, { 1767, 0x0025 }, { 1770, 0x2358 }, { 1776, 0x25de }, { 1785, 0x42cc }, { 1791, 0xcf38 }, { 1800, 0x4a04 }, { 1804, 0x0c40 }, { 1807, 0x359f }, { 1817, 0x1128 }, { 1821, 0x8a00 }, /* 0x5a00 */ { 1824, 0x13fa }, { 1833, 0x910a }, { 1838, 0x0229 }, { 1842, 0x1056 }, { 1847, 0x0641 }, { 1851, 0x0420 }, { 1853, 0x0484 }, { 1856, 0x84f0 }, { 1862, 0x0000 }, { 1862, 0x0c04 }, { 1865, 0x0400 }, { 1866, 0x412c }, { 1871, 0x1206 }, { 1875, 0x1154 }, { 1880, 0x0a4b }, { 1886, 0x0002 }, /* 0x5b00 */ { 1887, 0x0200 }, { 1888, 0x00c0 }, { 1890, 0x0000 }, { 1890, 0x0094 }, { 1893, 0x0001 }, { 1894, 0xbfbb }, { 1907, 0x167c }, { 1915, 0x242b }, { 1921, 0x9bbb }, { 1932, 0x7fa8 }, { 1942, 0x0c7f }, { 1951, 0xe379 }, { 1961, 0x10f4 }, { 1967, 0xe00d }, { 1973, 0x4132 }, { 1978, 0x9f01 }, /* 0x5c00 */ { 1985, 0x8652 }, { 1991, 0x3572 }, { 1999, 0x10b4 }, { 2004, 0xff12 }, { 2014, 0xcf27 }, { 2024, 0x4223 }, { 2029, 0xc06b }, { 2036, 0x8602 }, { 2040, 0x3106 }, { 2045, 0x1fd3 }, { 2055, 0x3a0c }, { 2061, 0xa1aa }, { 2068, 0x0812 }, { 2071, 0x0204 }, { 2073, 0x2572 }, { 2080, 0x0801 }, /* 0x5d00 */ { 2082, 0x40cc }, { 2087, 0x4850 }, { 2091, 0x62d0 }, { 2097, 0x6010 }, { 2100, 0x1c80 }, { 2104, 0x2900 }, { 2107, 0x9a00 }, { 2111, 0x0010 }, { 2112, 0x0004 }, { 2113, 0x2200 }, { 2115, 0x0000 }, { 2115, 0x0080 }, { 2116, 0x2020 }, { 2118, 0x6800 }, { 2121, 0xcbe6 }, { 2131, 0x609e }, /* 0x5e00 */ { 2138, 0x916e }, { 2146, 0x3f73 }, { 2157, 0x60c0 }, { 2161, 0x3982 }, { 2167, 0x1034 }, { 2171, 0x4830 }, { 2175, 0x0006 }, { 2177, 0xbd5c }, { 2187, 0x8cd1 }, { 2194, 0xd6fb }, { 2206, 0x20e1 }, { 2211, 0x43e8 }, { 2218, 0x0600 }, { 2220, 0x084e }, { 2225, 0x0500 }, { 2227, 0xc4d0 }, /* 0x5f00 */ { 2233, 0x8d1f }, { 2242, 0x89aa }, { 2249, 0xa6e1 }, { 2257, 0x1602 }, { 2261, 0x0001 }, { 2262, 0x21ed }, { 2270, 0x3656 }, { 2278, 0x1a8b }, { 2285, 0x1fb7 }, { 2296, 0x13a5 }, { 2303, 0x6502 }, { 2308, 0x30a0 }, { 2312, 0xb278 }, { 2320, 0x23c7 }, { 2328, 0x6c93 }, { 2336, 0xe922 }, /* 0x6000 */ { 2343, 0xe47f }, { 2354, 0x3a74 }, { 2362, 0x8fe3 }, { 2372, 0x9820 }, { 2376, 0x280e }, { 2381, 0x2625 }, { 2387, 0xbf9c }, { 2398, 0xbf49 }, { 2408, 0x3218 }, { 2413, 0xac54 }, { 2420, 0xb949 }, { 2428, 0x1916 }, { 2434, 0x0c60 }, { 2438, 0xb522 }, { 2445, 0xfbc1 }, { 2455, 0x0659 }, /* 0x6100 */ { 2461, 0xe343 }, { 2469, 0x8420 }, { 2472, 0x08d9 }, { 2478, 0x8000 }, { 2479, 0x5500 }, { 2483, 0x2022 }, { 2486, 0x0184 }, { 2489, 0x00a1 }, { 2492, 0x4800 }, { 2494, 0x2010 }, { 2496, 0x1380 }, { 2500, 0x4080 }, { 2502, 0x0d04 }, { 2506, 0x0016 }, { 2509, 0x0040 }, { 2510, 0x8020 }, /* 0x6200 */ { 2512, 0xfd40 }, { 2520, 0x8de7 }, { 2530, 0x5436 }, { 2537, 0xe098 }, { 2543, 0x7b8b }, { 2553, 0x091e }, { 2559, 0xfec8 }, { 2569, 0xd249 }, { 2576, 0x0611 }, { 2580, 0x8dee }, { 2590, 0x1937 }, { 2598, 0xba22 }, { 2605, 0x77f4 }, { 2616, 0x9fdd }, { 2628, 0xf3ec }, { 2639, 0xf0da }, /* 0x6300 */ { 2648, 0x4386 }, { 2654, 0xec42 }, { 2661, 0x8d3f }, { 2671, 0x2604 }, { 2675, 0xfa6c }, { 2685, 0xc021 }, { 2689, 0x628e }, { 2696, 0x0cc2 }, { 2701, 0xd785 }, { 2710, 0x0145 }, { 2714, 0x77ad }, { 2725, 0x5599 }, { 2733, 0xe250 }, { 2739, 0x4045 }, { 2743, 0x260b }, { 2749, 0xa154 }, /* 0x6400 */ { 2755, 0x9827 }, { 2762, 0x5819 }, { 2768, 0x3443 }, { 2774, 0xa410 }, { 2778, 0x05f2 }, { 2785, 0x4114 }, { 2789, 0x2280 }, { 2792, 0x0700 }, { 2795, 0x00b4 }, { 2799, 0x4266 }, { 2805, 0x7210 }, { 2810, 0x15a1 }, { 2816, 0x6025 }, { 2821, 0x4185 }, { 2826, 0x0054 }, { 2829, 0x0000 }, /* 0x6500 */ { 2829, 0x0201 }, { 2831, 0x0104 }, { 2833, 0xc820 }, { 2837, 0xcb70 }, { 2845, 0x9320 }, { 2850, 0x6a62 }, { 2857, 0x184c }, { 2862, 0x0095 }, { 2866, 0x1880 }, { 2869, 0x9a8b }, { 2877, 0xaab2 }, { 2885, 0x3201 }, { 2889, 0xd87a }, { 2898, 0x00c4 }, { 2901, 0xf3e5 }, { 2912, 0x04c3 }, /* 0x6600 */ { 2917, 0xd44d }, { 2925, 0xa238 }, { 2931, 0xa1a1 }, { 2937, 0x5072 }, { 2943, 0x980a }, { 2948, 0x84fc }, { 2956, 0xc152 }, { 2962, 0x44d1 }, { 2968, 0x1094 }, { 2972, 0x20c2 }, { 2976, 0x4180 }, { 2979, 0x4210 }, { 2982, 0x0000 }, { 2982, 0x3a00 }, { 2986, 0x0240 }, { 2988, 0xd29d }, /* 0x6700 */ { 2997, 0x2f01 }, { 3003, 0xa8b1 }, { 3010, 0xbd40 }, { 3017, 0x2432 }, { 3022, 0xd34d }, { 3031, 0xd04b }, { 3038, 0xa723 }, { 3046, 0xd0ad }, { 3054, 0x0a92 }, { 3059, 0x75a1 }, { 3067, 0xadac }, { 3076, 0x01e9 }, { 3082, 0x801a }, { 3086, 0x771f }, { 3097, 0x9225 }, { 3103, 0xa01b }, /* 0x6800 */ { 3109, 0xdfa1 }, { 3119, 0x20ca }, { 3124, 0x0602 }, { 3127, 0x738c }, { 3135, 0x577f }, { 3147, 0x003b }, { 3152, 0x0bff }, { 3163, 0x00d0 }, { 3166, 0x806a }, { 3171, 0x0088 }, { 3173, 0xa1c4 }, { 3179, 0x0029 }, { 3182, 0x2a05 }, { 3187, 0x0524 }, { 3191, 0x4009 }, { 3194, 0x1623 }, /* 0x6900 */ { 3200, 0x6822 }, { 3205, 0x8005 }, { 3208, 0x2011 }, { 3211, 0xa211 }, { 3216, 0x0004 }, { 3217, 0x6490 }, { 3222, 0x4849 }, { 3227, 0x1382 }, { 3232, 0x23d5 }, { 3240, 0x1930 }, { 3245, 0x2980 }, { 3249, 0x0892 }, { 3253, 0x5402 }, { 3257, 0x8811 }, { 3261, 0x2001 }, { 3263, 0xa004 }, /* 0x6a00 */ { 3266, 0x0400 }, { 3267, 0x8180 }, { 3270, 0x8502 }, { 3274, 0x6022 }, { 3278, 0x0090 }, { 3280, 0x0b01 }, { 3284, 0x0022 }, { 3286, 0x1202 }, { 3289, 0x4011 }, { 3292, 0x0083 }, { 3295, 0x1a01 }, { 3299, 0x0000 }, { 3299, 0x0000 }, { 3299, 0x0000 }, { 3299, 0x0000 }, { 3299, 0x0000 }, /* 0x6b00 */ { 3299, 0x0000 }, { 3299, 0x0000 }, { 3299, 0x009f }, { 3305, 0x4684 }, { 3310, 0x12c8 }, { 3315, 0x0200 }, { 3316, 0x04fc }, { 3323, 0x1a00 }, { 3326, 0x2ede }, { 3336, 0x0c4c }, { 3341, 0x0402 }, { 3343, 0x80b8 }, { 3348, 0xa826 }, { 3354, 0x0afc }, { 3362, 0x8c02 }, { 3366, 0x2228 }, /* 0x6c00 */ { 3370, 0xa0e0 }, { 3375, 0x8f7b }, { 3386, 0xc7d6 }, { 3396, 0x2135 }, { 3402, 0x06c7 }, { 3409, 0xf8b1 }, { 3418, 0x0713 }, { 3424, 0x6255 }, { 3431, 0x936e }, { 3440, 0x8a19 }, { 3446, 0x6efa }, { 3457, 0xfb0e }, { 3467, 0x1630 }, { 3472, 0x48f9 }, { 3480, 0xcd2f }, { 3490, 0x7deb }, /* 0x6d00 */ { 3502, 0x5892 }, { 3508, 0x4e84 }, { 3514, 0x4ca0 }, { 3519, 0x7a2e }, { 3528, 0xedea }, { 3539, 0x561e }, { 3547, 0xc649 }, { 3554, 0x1190 }, { 3558, 0x5324 }, { 3564, 0xe83a }, { 3572, 0xcfdb }, { 3584, 0x8124 }, { 3588, 0x18f1 }, { 3595, 0x6342 }, { 3601, 0x5853 }, { 3608, 0x1a8a }, /* 0x6e00 */ { 3614, 0x7420 }, { 3619, 0x24d3 }, { 3626, 0xaa3b }, { 3635, 0x0514 }, { 3639, 0x6018 }, { 3643, 0x8958 }, { 3649, 0x4800 }, { 3651, 0xc000 }, { 3653, 0x8268 }, { 3658, 0x9101 }, { 3662, 0x84a4 }, { 3667, 0x2cd6 }, { 3675, 0x8886 }, { 3680, 0xc4ba }, { 3688, 0x0377 }, { 3696, 0x0210 }, /* 0x6f00 */ { 3698, 0x8244 }, { 3702, 0x0038 }, { 3705, 0xae11 }, { 3712, 0x404a }, { 3716, 0x28c0 }, { 3720, 0x5100 }, { 3723, 0x6044 }, { 3727, 0x1514 }, { 3732, 0x7310 }, { 3738, 0x1000 }, { 3739, 0x0082 }, { 3741, 0x0248 }, { 3744, 0x0205 }, { 3747, 0x4006 }, { 3750, 0xc003 }, { 3754, 0x0000 }, /* 0x7000 */ { 3754, 0x0000 }, { 3754, 0x0c02 }, { 3757, 0x0008 }, { 3758, 0x0220 }, { 3760, 0x9000 }, { 3762, 0x4000 }, { 3763, 0xb800 }, { 3767, 0xd161 }, { 3774, 0x4621 }, { 3779, 0x3274 }, { 3786, 0xf800 }, { 3791, 0x3b8a }, { 3799, 0x050f }, { 3805, 0x8b00 }, { 3809, 0xbbd0 }, { 3818, 0x2280 }, /* 0x7100 */ { 3821, 0x0600 }, { 3823, 0x0769 }, { 3830, 0x8040 }, { 3832, 0x0043 }, { 3835, 0x5420 }, { 3839, 0x5000 }, { 3841, 0x41d0 }, { 3846, 0x250c }, { 3851, 0x8410 }, { 3854, 0x8310 }, { 3858, 0x1101 }, { 3861, 0x0228 }, { 3864, 0x4008 }, { 3866, 0x0030 }, { 3868, 0x40a1 }, { 3872, 0x0200 }, /* 0x7200 */ { 3873, 0x0040 }, { 3874, 0x2000 }, { 3875, 0x1500 }, { 3878, 0xabe3 }, { 3888, 0x3180 }, { 3892, 0xaa44 }, { 3898, 0xc2c6 }, { 3905, 0xc624 }, { 3911, 0xac13 }, { 3918, 0x8004 }, { 3920, 0xb000 }, { 3923, 0x03d1 }, { 3929, 0x611e }, { 3936, 0x4285 }, { 3941, 0xf303 }, { 3949, 0x1d9f }, /* 0x7300 */ { 3959, 0x440a }, { 3963, 0x78e8 }, { 3971, 0x5e26 }, { 3979, 0xc392 }, { 3986, 0x2000 }, { 3987, 0x0085 }, { 3990, 0xb001 }, { 3994, 0x4000 }, { 3995, 0x4a90 }, { 4000, 0x8842 }, { 4004, 0xca04 }, { 4009, 0x0c8d }, { 4015, 0xa705 }, { 4022, 0x4203 }, { 4026, 0x22a1 }, { 4031, 0x0004 }, /* 0x7400 */ { 4032, 0x8668 }, { 4038, 0x0c01 }, { 4041, 0x5564 }, { 4048, 0x1079 }, { 4054, 0x0002 }, { 4055, 0xdea0 }, { 4063, 0x2000 }, { 4064, 0x40c1 }, { 4068, 0x488b }, { 4074, 0x5001 }, { 4077, 0x0380 }, { 4080, 0x0400 }, { 4081, 0x0000 }, { 4081, 0x5004 }, { 4084, 0xc05d }, { 4091, 0x80d0 }, /* 0x7500 */ { 4095, 0xa010 }, { 4098, 0x970a }, { 4105, 0xbb20 }, { 4112, 0x4daf }, { 4122, 0xd921 }, { 4129, 0x1e10 }, { 4134, 0x0460 }, { 4137, 0x8314 }, { 4142, 0x8848 }, { 4146, 0xa6d6 }, { 4155, 0xd83b }, { 4164, 0x733f }, { 4175, 0x27bc }, { 4184, 0x4974 }, { 4191, 0x0ddc }, { 4199, 0x9213 }, /* 0x7600 */ { 4205, 0x142b }, { 4211, 0x8ba1 }, { 4218, 0x2e75 }, { 4227, 0xd139 }, { 4235, 0x3009 }, { 4239, 0x5050 }, { 4243, 0x8808 }, { 4246, 0x6900 }, { 4250, 0x49d4 }, { 4257, 0x024a }, { 4261, 0x4010 }, { 4263, 0x8016 }, { 4267, 0xe564 }, { 4275, 0x89d7 }, { 4284, 0xc020 }, { 4287, 0x5316 }, /* 0x7700 */ { 4294, 0x2b92 }, { 4301, 0x8600 }, { 4304, 0xa345 }, { 4311, 0x15e0 }, { 4317, 0x008b }, { 4321, 0x0c03 }, { 4325, 0x196e }, { 4333, 0xe200 }, { 4337, 0x7031 }, { 4343, 0x8006 }, { 4346, 0x16a5 }, { 4353, 0xa829 }, { 4359, 0x2000 }, { 4360, 0x1880 }, { 4363, 0x7aac }, { 4372, 0xe148 }, /* 0x7800 */ { 4378, 0x3207 }, { 4384, 0xb5d6 }, { 4394, 0x32e8 }, { 4401, 0x5f91 }, { 4410, 0x50a1 }, { 4415, 0x20e5 }, { 4421, 0x7c00 }, { 4426, 0x1080 }, { 4428, 0x7280 }, { 4433, 0x9d8a }, { 4441, 0x00aa }, { 4445, 0x421f }, { 4452, 0x0e22 }, { 4457, 0x0231 }, { 4461, 0x1100 }, { 4463, 0x0494 }, /* 0x7900 */ { 4467, 0x0022 }, { 4469, 0x4008 }, { 4471, 0x0010 }, { 4472, 0x5c10 }, { 4477, 0x0343 }, { 4482, 0xfcc8 }, { 4491, 0xa1a5 }, { 4498, 0x0580 }, { 4501, 0x8433 }, { 4507, 0x0400 }, { 4508, 0x0080 }, { 4509, 0x6e08 }, { 4515, 0x2a4b }, { 4522, 0x8126 }, { 4527, 0xaad8 }, { 4535, 0x2901 }, /* 0x7a00 */ { 4539, 0x684d }, { 4546, 0x4490 }, { 4550, 0x0009 }, { 4552, 0xba88 }, { 4559, 0x0040 }, { 4560, 0x0082 }, { 4562, 0x0000 }, { 4562, 0x87d1 }, { 4570, 0x215b }, { 4577, 0xb1e6 }, { 4586, 0x3161 }, { 4592, 0x8008 }, { 4594, 0x0800 }, { 4595, 0xc240 }, { 4599, 0xa069 }, { 4605, 0xa600 }, /* 0x7b00 */ { 4609, 0x8d58 }, { 4616, 0x4a32 }, { 4622, 0x5d71 }, { 4631, 0x550a }, { 4637, 0x9aa0 }, { 4643, 0x2d57 }, { 4652, 0x4005 }, { 4655, 0x4aa6 }, { 4662, 0x2021 }, { 4665, 0x30b1 }, { 4671, 0x3fc6 }, { 4681, 0x0112 }, { 4684, 0x10c2 }, { 4688, 0x260a }, { 4693, 0x4462 }, { 4698, 0x5082 }, /* 0x7c00 */ { 4702, 0x9880 }, { 4706, 0x8040 }, { 4708, 0x04c0 }, { 4711, 0x8100 }, { 4713, 0x2003 }, { 4716, 0x0000 }, { 4716, 0x0000 }, { 4716, 0x3818 }, { 4721, 0x0200 }, { 4722, 0xf1a6 }, { 4731, 0x4434 }, { 4736, 0x720e }, { 4743, 0x35a2 }, { 4750, 0x92e0 }, { 4756, 0x8101 }, { 4759, 0x0900 }, /* 0x7d00 */ { 4761, 0x0400 }, { 4762, 0x0000 }, { 4762, 0x8885 }, { 4767, 0x0000 }, { 4767, 0x0000 }, { 4767, 0x0000 }, { 4767, 0x4000 }, { 4768, 0x0080 }, { 4769, 0x0000 }, { 4769, 0x0000 }, { 4769, 0x4040 }, { 4771, 0x0000 }, { 4771, 0x0000 }, { 4771, 0x0000 }, { 4771, 0x0000 }, { 4771, 0x0000 }, /* 0x7e00 */ { 4771, 0x0000 }, { 4771, 0x0000 }, { 4771, 0x0000 }, { 4771, 0x0800 }, { 4772, 0x0082 }, { 4774, 0x0000 }, { 4774, 0x0000 }, { 4774, 0x0000 }, { 4774, 0x0004 }, { 4775, 0x8800 }, { 4777, 0xbfff }, { 4792, 0xe7ef }, { 4805, 0xffff }, { 4821, 0xffbf }, { 4836, 0xefef }, { 4850, 0xfdff }, /* 0x7f00 */ { 4865, 0xfbff }, { 4880, 0xbffe }, { 4894, 0xffff }, { 4910, 0x057f }, { 4919, 0x0034 }, { 4922, 0x85b3 }, { 4930, 0x4706 }, { 4936, 0x4216 }, { 4941, 0x5402 }, { 4945, 0xe410 }, { 4950, 0x8092 }, { 4954, 0xb305 }, { 4961, 0x5422 }, { 4966, 0x8130 }, { 4970, 0x4263 }, { 4976, 0x180b }, /* 0x8000 */ { 4981, 0x387b }, { 4990, 0x13f5 }, { 4999, 0x07e5 }, { 5007, 0xa9ea }, { 5016, 0x3c4c }, { 5023, 0x0514 }, { 5027, 0x0600 }, { 5029, 0x8002 }, { 5031, 0x1ad9 }, { 5039, 0xbd48 }, { 5047, 0xee37 }, { 5058, 0xf496 }, { 5067, 0x705f }, { 5076, 0x7ec0 }, { 5084, 0xbfb2 }, { 5095, 0x355f }, /* 0x8100 */ { 5105, 0xe644 }, { 5112, 0x455f }, { 5121, 0x9000 }, { 5123, 0x4146 }, { 5128, 0x1d40 }, { 5133, 0x063b }, { 5140, 0x62a1 }, { 5146, 0xfe13 }, { 5156, 0x8505 }, { 5161, 0x3902 }, { 5166, 0x0548 }, { 5170, 0x0c08 }, { 5173, 0x144f }, { 5180, 0x0000 }, { 5180, 0x3488 }, { 5185, 0x5818 }, /* 0x8200 */ { 5190, 0x3077 }, { 5198, 0xd815 }, { 5205, 0xbd0e }, { 5214, 0x4bfb }, { 5225, 0x8a90 }, { 5230, 0x8500 }, { 5233, 0xc100 }, { 5236, 0xe61d }, { 5245, 0xed14 }, { 5253, 0xb386 }, { 5261, 0xff72 }, { 5273, 0x639b }, { 5282, 0xfd92 }, { 5292, 0xd9be }, { 5303, 0x887b }, { 5311, 0x0a92 }, /* 0x8300 */ { 5316, 0xd3fe }, { 5328, 0x1cb2 }, { 5335, 0xb980 }, { 5341, 0x177a }, { 5350, 0x82c9 }, { 5356, 0xdc17 }, { 5365, 0xfffb }, { 5380, 0x3980 }, { 5385, 0x4260 }, { 5389, 0x590c }, { 5395, 0x0f01 }, { 5400, 0x37df }, { 5412, 0x94a3 }, { 5419, 0xb150 }, { 5425, 0x0623 }, { 5430, 0x2307 }, /* 0x8400 */ { 5436, 0xf85a }, { 5445, 0x3102 }, { 5449, 0x01f0 }, { 5454, 0x3102 }, { 5458, 0x0040 }, { 5459, 0x1e82 }, { 5465, 0x3a0a }, { 5471, 0x056a }, { 5477, 0x5b84 }, { 5484, 0x1280 }, { 5487, 0x8002 }, { 5489, 0xa714 }, { 5496, 0x2612 }, { 5501, 0xa04b }, { 5507, 0x1069 }, { 5512, 0x9001 }, /* 0x8500 */ { 5515, 0x1000 }, { 5516, 0x848a }, { 5521, 0x1802 }, { 5524, 0x3f80 }, { 5531, 0x0708 }, { 5535, 0x4240 }, { 5538, 0x0110 }, { 5540, 0x4e14 }, { 5546, 0x80b0 }, { 5550, 0x1800 }, { 5552, 0xc510 }, { 5557, 0x0281 }, { 5560, 0x8202 }, { 5563, 0x1029 }, { 5567, 0x0210 }, { 5569, 0x8800 }, /* 0x8600 */ { 5571, 0x0020 }, { 5572, 0x0042 }, { 5574, 0x0280 }, { 5576, 0x1100 }, { 5578, 0xe000 }, { 5581, 0x4413 }, { 5586, 0x5804 }, { 5590, 0xfe02 }, { 5598, 0x3c07 }, { 5605, 0x3028 }, { 5609, 0x9798 }, { 5617, 0x0473 }, { 5623, 0xced1 }, { 5632, 0xcb13 }, { 5640, 0x6210 }, { 5644, 0x431f }, /* 0x8700 */ { 5652, 0x278d }, { 5660, 0x55ac }, { 5668, 0x422e }, { 5674, 0xc892 }, { 5680, 0x5380 }, { 5685, 0x0288 }, { 5688, 0x4039 }, { 5693, 0x7851 }, { 5700, 0x292c }, { 5706, 0x8088 }, { 5709, 0xb900 }, { 5714, 0x2428 }, { 5718, 0x0c41 }, { 5722, 0x080e }, { 5726, 0x4421 }, { 5730, 0x4200 }, /* 0x8800 */ { 5732, 0x0408 }, { 5734, 0x0868 }, { 5738, 0x0006 }, { 5740, 0x1204 }, { 5743, 0x3031 }, { 5748, 0x0290 }, { 5751, 0x5b3e }, { 5761, 0xe085 }, { 5767, 0x2936 }, { 5774, 0x1044 }, { 5777, 0x2814 }, { 5781, 0x1082 }, { 5784, 0x4266 }, { 5790, 0x8334 }, { 5796, 0x013c }, { 5801, 0x531b }, /* 0x8900 */ { 5809, 0x0404 }, { 5811, 0x0e0d }, { 5817, 0x0c22 }, { 5821, 0x0051 }, { 5824, 0x0012 }, { 5826, 0xc000 }, { 5828, 0x0040 }, { 5829, 0x8800 }, { 5831, 0x004a }, { 5834, 0x0000 }, { 5834, 0x0000 }, { 5834, 0x0000 }, { 5834, 0xdff6 }, { 5847, 0x5447 }, { 5854, 0x8868 }, { 5859, 0x0008 }, /* 0x8a00 */ { 5860, 0x0081 }, { 5862, 0x0000 }, { 5862, 0x0000 }, { 5862, 0x4000 }, { 5863, 0x0100 }, { 5864, 0x0000 }, { 5864, 0x0000 }, { 5864, 0x0200 }, { 5865, 0x0600 }, { 5867, 0x0008 }, { 5868, 0x0000 }, { 5868, 0x0000 }, { 5868, 0x0000 }, { 5868, 0x0000 }, { 5868, 0x0000 }, { 5868, 0x0000 }, /* 0x8b00 */ { 5868, 0x0080 }, { 5869, 0x0000 }, { 5869, 0x0040 }, { 5870, 0x0000 }, { 5870, 0x0000 }, { 5870, 0x0000 }, { 5870, 0x1040 }, { 5872, 0x0000 }, { 5872, 0x0000 }, { 5872, 0x0000 }, { 5872, 0xefff }, { 5887, 0xf7fd }, { 5901, 0xff7f }, { 5916, 0xfffe }, { 5931, 0xfbff }, { 5946, 0xffff }, /* 0x8c00 */ { 5962, 0xfdff }, { 5977, 0xbfff }, { 5992, 0xffff }, { 6008, 0x00ff }, { 6016, 0x12c2 }, { 6021, 0x0420 }, { 6023, 0x0c06 }, { 6027, 0x0708 }, { 6031, 0x1624 }, { 6036, 0x0110 }, { 6038, 0x0000 }, { 6038, 0x0000 }, { 6038, 0x0000 }, { 6038, 0x0000 }, { 6038, 0x0000 }, { 6038, 0x0000 }, /* 0x8d00 */ { 6038, 0x0000 }, { 6038, 0xe000 }, { 6041, 0xfffe }, { 6056, 0xffff }, { 6072, 0xffff }, { 6088, 0x7f79 }, { 6100, 0x28df }, { 6109, 0x00f9 }, { 6115, 0x0c32 }, { 6120, 0x8012 }, { 6123, 0x0008 }, { 6124, 0xd53a }, { 6133, 0xd858 }, { 6140, 0xecc2 }, { 6148, 0x9d18 }, { 6155, 0x2fa8 }, /* 0x8e00 */ { 6163, 0x9620 }, { 6168, 0xe010 }, { 6172, 0xd60c }, { 6179, 0x2622 }, { 6184, 0x0f97 }, { 6193, 0x0206 }, { 6196, 0xb240 }, { 6201, 0x9055 }, { 6207, 0x80a2 }, { 6211, 0x5011 }, { 6215, 0x9800 }, { 6218, 0x0404 }, { 6220, 0x4000 }, { 6221, 0x0000 }, { 6221, 0x0000 }, { 6221, 0x0000 }, /* 0x8f00 */ { 6221, 0x0000 }, { 6221, 0x0000 }, { 6221, 0x0000 }, { 6221, 0x0000 }, { 6221, 0x0000 }, { 6221, 0x0000 }, { 6221, 0xfbc0 }, { 6230, 0xffff }, { 6246, 0xeffe }, { 6260, 0xdffb }, { 6274, 0x0b08 }, { 6278, 0x6243 }, { 6284, 0x41b6 }, { 6291, 0xfb3b }, { 6303, 0x6f74 }, { 6313, 0x2389 }, /* 0x9000 */ { 6319, 0xae7f }, { 6331, 0xecd7 }, { 6342, 0xe047 }, { 6349, 0x5960 }, { 6355, 0xa096 }, { 6361, 0x098f }, { 6368, 0x612c }, { 6374, 0xa030 }, { 6378, 0x090d }, { 6383, 0x2aaa }, { 6390, 0xd44e }, { 6398, 0x4f7b }, { 6409, 0xc4b2 }, { 6416, 0x388b }, { 6423, 0xa9c6 }, { 6431, 0x6110 }, /* 0x9100 */ { 6435, 0x0014 }, { 6437, 0x4200 }, { 6439, 0x800c }, { 6442, 0x0202 }, { 6444, 0xfe48 }, { 6453, 0x6485 }, { 6459, 0xd63e }, { 6469, 0xe3f7 }, { 6481, 0x3aa0 }, { 6487, 0x0c07 }, { 6492, 0xe40c }, { 6498, 0x0430 }, { 6501, 0xf680 }, { 6508, 0x1002 }, { 6510, 0x0000 }, { 6510, 0x0000 }, /* 0x9200 */ { 6510, 0x0000 }, { 6510, 0x0000 }, { 6510, 0x0000 }, { 6510, 0x0000 }, { 6510, 0x0000 }, { 6510, 0x0000 }, { 6510, 0x0000 }, { 6510, 0x0010 }, { 6511, 0x4000 }, { 6512, 0x0000 }, { 6512, 0x4000 }, { 6513, 0x0000 }, { 6513, 0x0100 }, { 6514, 0x0000 }, { 6514, 0x0000 }, { 6514, 0x0000 }, /* 0x9300 */ { 6514, 0x0000 }, { 6514, 0x0000 }, { 6514, 0x0000 }, { 6514, 0x4000 }, { 6515, 0x0000 }, { 6515, 0x0000 }, { 6515, 0x0400 }, { 6516, 0x0000 }, { 6516, 0x8000 }, { 6517, 0x0000 }, { 6517, 0x0000 }, { 6517, 0x0000 }, { 6517, 0x0400 }, { 6518, 0x0040 }, { 6519, 0x0000 }, { 6519, 0x0000 }, /* 0x9400 */ { 6519, 0x0000 }, { 6519, 0x0000 }, { 6519, 0x0000 }, { 6519, 0x4000 }, { 6520, 0x0000 }, { 6520, 0x0000 }, { 6520, 0x0800 }, { 6521, 0x0000 }, { 6521, 0xffe0 }, { 6532, 0xfebd }, { 6545, 0xffff }, { 6561, 0xffff }, { 6577, 0x7f7f }, { 6591, 0xfbe7 }, { 6604, 0xffbf }, { 6619, 0xf7ff }, /* 0x9500 */ { 6634, 0xffff }, { 6650, 0xefff }, { 6665, 0xff7e }, { 6679, 0xdff7 }, { 6693, 0xf6f7 }, { 6706, 0xfbdf }, { 6720, 0xbffe }, { 6734, 0x804f }, { 6740, 0x0000 }, { 6740, 0x0000 }, { 6740, 0x0000 }, { 6740, 0x0000 }, { 6740, 0x0000 }, { 6740, 0x0000 }, { 6740, 0xef00 }, { 6747, 0x7fff }, /* 0x9600 */ { 6762, 0xff7f }, { 6777, 0xb6f7 }, { 6789, 0x4406 }, { 6793, 0xb87e }, { 6803, 0x3bf5 }, { 6814, 0x8831 }, { 6819, 0x1796 }, { 6827, 0x00f4 }, { 6832, 0xa960 }, { 6838, 0x1391 }, { 6844, 0x0080 }, { 6845, 0x7249 }, { 6852, 0xf2f3 }, { 6863, 0x0024 }, { 6865, 0x8701 }, { 6870, 0x42c8 }, /* 0x9700 */ { 6875, 0xe3d3 }, { 6885, 0x5048 }, { 6889, 0x2400 }, { 6891, 0x4305 }, { 6896, 0x0000 }, { 6896, 0x4a4c }, { 6902, 0x0227 }, { 6907, 0x1058 }, { 6911, 0x2820 }, { 6914, 0x0116 }, { 6918, 0xa809 }, { 6923, 0x0014 }, { 6925, 0x0000 }, { 6925, 0x0000 }, { 6925, 0x3ec0 }, { 6932, 0x0068 }, /* 0x9800 */ { 6935, 0x0000 }, { 6935, 0x0000 }, { 6935, 0x0000 }, { 6935, 0x0000 }, { 6935, 0x0000 }, { 6935, 0x0000 }, { 6935, 0x0000 }, { 6935, 0xffe0 }, { 6946, 0xb7ff }, { 6960, 0xfddb }, { 6973, 0x00f7 }, { 6980, 0x0000 }, { 6980, 0x4000 }, { 6981, 0xc72e }, { 6990, 0x0180 }, { 6992, 0x0000 }, /* 0x9900 */ { 6992, 0x2000 }, { 6993, 0x0001 }, { 6994, 0x4000 }, { 6995, 0x0000 }, { 6995, 0x0000 }, { 6995, 0x0030 }, { 6997, 0xffa8 }, { 7008, 0xb4f7 }, { 7019, 0xadf3 }, { 7030, 0x03ff }, { 7040, 0x0120 }, { 7042, 0x0000 }, { 7042, 0x0000 }, { 7042, 0x0000 }, { 7042, 0x0000 }, { 7042, 0x0000 }, /* 0x9a00 */ { 7042, 0x0000 }, { 7042, 0x0000 }, { 7042, 0x0000 }, { 7042, 0x0000 }, { 7042, 0x0000 }, { 7042, 0x0000 }, { 7042, 0xf000 }, { 7046, 0xfffb }, { 7061, 0x9df7 }, { 7073, 0xfdcf }, { 7086, 0x01bf }, { 7094, 0x15c3 }, { 7101, 0x1827 }, { 7107, 0x810a }, { 7111, 0xa842 }, { 7116, 0x0a00 }, /* 0x9b00 */ { 7118, 0x8108 }, { 7121, 0x8008 }, { 7123, 0x8008 }, { 7125, 0x1804 }, { 7128, 0xa3be }, { 7138, 0x0012 }, { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, /* 0x9c00 */ { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x0000 }, { 7140, 0x9000 }, { 7142, 0x69e6 }, { 7151, 0xdc37 }, { 7161, 0x6bff }, { 7174, 0x3dff }, { 7187, 0xfcf8 }, { 7198, 0xf3f9 }, { 7210, 0x0004 }, }; static const Summary16 gb2312_uni2indx_page9e[27] = { /* 0x9e00 */ { 7211, 0x0000 }, { 7211, 0x8000 }, { 7212, 0xbf6f }, { 7225, 0xe7ee }, { 7237, 0xdffe }, { 7251, 0x5da2 }, { 7259, 0x3fd8 }, { 7269, 0xc00b }, { 7274, 0x0984 }, { 7278, 0xa00c }, { 7282, 0x0040 }, { 7283, 0x6910 }, { 7288, 0xe210 }, { 7293, 0xb912 }, { 7300, 0x86a5 }, { 7307, 0x5a00 }, /* 0x9f00 */ { 7311, 0x6800 }, { 7314, 0x0289 }, { 7318, 0x9005 }, { 7322, 0x6a80 }, { 7327, 0x0010 }, { 7328, 0x0003 }, { 7330, 0x0000 }, { 7330, 0x8000 }, { 7331, 0x1ff9 }, { 7342, 0x8e00 }, { 7346, 0x0001 }, }; static const Summary16 gb2312_uni2indx_pageff[15] = { /* 0xff00 */ { 7347, 0xfffe }, { 7362, 0xffff }, { 7378, 0xffff }, { 7394, 0xffff }, { 7410, 0xffff }, { 7426, 0x7fff }, { 7441, 0x0000 }, { 7441, 0x0000 }, { 7441, 0x0000 }, { 7441, 0x0000 }, { 7441, 0x0000 }, { 7441, 0x0000 }, { 7441, 0x0000 }, { 7441, 0x0000 }, { 7441, 0x002b }, }; static int gb2312_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { if (n >= 2) { const Summary16 *summary = NULL; if (wc < 0x0460) summary = &gb2312_uni2indx_page00[(wc>>4)]; else if (wc >= 0x2000 && wc < 0x2650) summary = &gb2312_uni2indx_page20[(wc>>4)-0x200]; else if (wc >= 0x3000 && wc < 0x3230) summary = &gb2312_uni2indx_page30[(wc>>4)-0x300]; else if (wc >= 0x4e00 && wc < 0x9cf0) summary = &gb2312_uni2indx_page4e[(wc>>4)-0x4e0]; else if (wc >= 0x9e00 && wc < 0x9fb0) summary = &gb2312_uni2indx_page9e[(wc>>4)-0x9e0]; else if (wc >= 0xff00 && wc < 0xfff0) summary = &gb2312_uni2indx_pageff[(wc>>4)-0xff0]; if (summary) { unsigned short used = summary->used; unsigned int i = wc & 0x0f; if (used & ((unsigned short) 1 << i)) { unsigned short c; /* Keep in `used' only the bits 0..i-1. */ used &= ((unsigned short) 1 << i) - 1; /* Add `summary->indx' and the number of bits set in `used'. */ used = (used & 0x5555) + ((used & 0xaaaa) >> 1); used = (used & 0x3333) + ((used & 0xcccc) >> 2); used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4); used = (used & 0x00ff) + (used >> 8); c = gb2312_2charset[summary->indx + used]; r[0] = (c >> 8); r[1] = (c & 0xff); return 2; } } return RET_ILSEQ; } return RET_TOOSMALL; } 590c }, { 5395, 0x0f01 }, { 5400, 0x37df }, { 5412, 0x94a3 }, { 5419, 0xb150 }, { 5425, 0x0623 }, { 5430, 0x2307 }, /* 0x8400 */ { 5436, 0xf85a }, { 5445, 0x3102 }, { 5449, 0x01f0 }, { 5454, 0x3102 }, { 5458, 0x0040 }, { 5459, 0x1e82 }, { 5465, 0x3a0a }, { 5471, 0x056a }, { 5477, 0x5b84 }, { 5484, 0x1280 }, { 5487, 0x8002 }, { 5489, 0xa714 }, { 5496, libX11-1.6.3/src/xlibi18n/lcUniConv/koi8_u.h000064401431060000012000000144221247741723500205550ustar00alancstaff00002660200006 /* * KOI8-U */ /* Specification: RFC 2319 */ static const unsigned short koi8_u_2uni[128] = { /* 0x80 */ 0x2500, 0x2502, 0x250c, 0x2510, 0x2514, 0x2518, 0x251c, 0x2524, 0x252c, 0x2534, 0x253c, 0x2580, 0x2584, 0x2588, 0x258c, 0x2590, /* 0x90 */ 0x2591, 0x2592, 0x2593, 0x2320, 0x25a0, 0x2219, 0x221a, 0x2248, 0x2264, 0x2265, 0x00a0, 0x2321, 0x00b0, 0x00b2, 0x00b7, 0x00f7, /* 0xa0 */ 0x2550, 0x2551, 0x2552, 0x0451, 0x0454, 0x2554, 0x0456, 0x0457, 0x2557, 0x2558, 0x2559, 0x255a, 0x255b, 0x0491, 0x255d, 0x255e, /* 0xb0 */ 0x255f, 0x2560, 0x2561, 0x0401, 0x0404, 0x2563, 0x0406, 0x0407, 0x2566, 0x2567, 0x2568, 0x2569, 0x256a, 0x0490, 0x256c, 0x00a9, /* 0xc0 */ 0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, 0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, /* 0xd0 */ 0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a, /* 0xe0 */ 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, /* 0xf0 */ 0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, 0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a, }; static int koi8_u_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n) { unsigned char c = *s; if (c < 0x80) *pwc = (ucs4_t) c; else *pwc = (ucs4_t) koi8_u_2uni[c-0x80]; return 1; } static const unsigned char koi8_u_page00[88] = { 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ 0x9c, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x00, 0x9e, /* 0xb0-0xb7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, /* 0xf0-0xf7 */ }; static const unsigned char koi8_u_page04[152] = { 0x00, 0xb3, 0x00, 0x00, 0xb4, 0x00, 0xb6, 0xb7, /* 0x00-0x07 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ 0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa, /* 0x10-0x17 */ 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, /* 0x18-0x1f */ 0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe, /* 0x20-0x27 */ 0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1, /* 0x28-0x2f */ 0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda, /* 0x30-0x37 */ 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, /* 0x38-0x3f */ 0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde, /* 0x40-0x47 */ 0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1, /* 0x48-0x4f */ 0x00, 0xa3, 0x00, 0x00, 0xa4, 0x00, 0xa6, 0xa7, /* 0x50-0x57 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ 0xbd, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ }; static const unsigned char koi8_u_page22[80] = { 0x00, 0x95, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ 0x97, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ 0x00, 0x00, 0x00, 0x00, 0x98, 0x99, 0x00, 0x00, /* 0x60-0x67 */ }; static const unsigned char koi8_u_page23[8] = { 0x93, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ }; static const unsigned char koi8_u_page25[168] = { 0x80, 0x00, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, /* 0x08-0x0f */ 0x83, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, /* 0x10-0x17 */ 0x85, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, /* 0x18-0x1f */ 0x00, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, /* 0x20-0x27 */ 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, /* 0x28-0x2f */ 0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, /* 0x30-0x37 */ 0x00, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, /* 0x38-0x3f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ 0xa0, 0xa1, 0xa2, 0x00, 0xa5, 0x00, 0x00, 0xa8, /* 0x50-0x57 */ 0xa9, 0xaa, 0xab, 0xac, 0x00, 0xae, 0xaf, 0xb0, /* 0x58-0x5f */ 0xb1, 0xb2, 0x00, 0xb5, 0x00, 0x00, 0xb8, 0xb9, /* 0x60-0x67 */ 0xba, 0xbb, 0xbc, 0x00, 0xbe, 0x00, 0x00, 0x00, /* 0x68-0x6f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ 0x8b, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, /* 0x80-0x87 */ 0x8d, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, /* 0x88-0x8f */ 0x8f, 0x90, 0x91, 0x92, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ }; static int koi8_u_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n) { unsigned char c = 0; if (wc < 0x0080) { *r = wc; return 1; } else if (wc >= 0x00a0 && wc < 0x00f8) c = koi8_u_page00[wc-0x00a0]; else if (wc >= 0x0400 && wc < 0x0498) c = koi8_u_page04[wc-0x0400]; else if (wc >= 0x2218 && wc < 0x2268) c = koi8_u_page22[wc-0x2218]; else if (wc >= 0x2320 && wc < 0x2328) c = koi8_u_page23[wc-0x2320]; else if (wc >= 0x2500 && wc < 0x25a8) c = koi8_u_page25[wc-0x2500]; if (c != 0) { *r = c; return 1; } return RET_ILSEQ; } libX11-1.6.3/src/xlibi18n/lcUniConv/cjk_tab_to_h.c000064401431060000012000000744321247741723500217670ustar00alancstaff00002660200006 /* * Generates a CJK character set table from a .TXT table as found on * ftp.unicode.org or in the X nls directory. * Examples: * * ./cjk_tab_to_h GB2312.1980-0 gb2312 > gb2312.h < gb2312 * ./cjk_tab_to_h JISX0208.1983-0 jisx0208 > jisx0208.h < jis0208 * ./cjk_tab_to_h KSC5601.1987-0 ksc5601 > ksc5601.h < ksc5601 * * ./cjk_tab_to_h GB2312.1980-0 gb2312 > gb2312.h < GB2312.TXT * ./cjk_tab_to_h JISX0208.1983-0 jisx0208 > jisx0208.h < JIS0208.TXT * ./cjk_tab_to_h JISX0212.1990-0 jisx0212 > jisx0212.h < JIS0212.TXT * ./cjk_tab_to_h KSC5601.1987-0 ksc5601 > ksc5601.h < KSC5601.TXT * ./cjk_tab_to_h KSX1001.1992-0 ksc5601 > ksc5601.h < KSX1001.TXT * * ./cjk_tab_to_h BIG5 big5 > big5.h < BIG5.TXT * * ./cjk_tab_to_h JOHAB johab > johab.h < JOHAB.TXT * * ./cjk_tab_to_h BIG5HKSCS-0 big5hkscs >big5hkscs.h < BIG5HKSCS.TXT */ #include #include #include #include typedef struct { int start; int end; } Block; typedef struct { int rows; /* number of possible values for the 1st byte */ int cols; /* number of possible values for the 2nd byte */ int (*row_byte) (int row); /* returns the 1st byte value for a given row */ int (*col_byte) (int col); /* returns the 2nd byte value for a given col */ int (*byte_row) (int byte); /* converts a 1st byte value to a row, else -1 */ int (*byte_col) (int byte); /* converts a 2nd byte value to a col, else -1 */ const char* check_row_expr; /* format string for 1st byte value checking */ const char* check_col_expr; /* format string for 2nd byte value checking */ const char* byte_row_expr; /* format string for 1st byte value to row */ const char* byte_col_expr; /* format string for 2nd byte value to col */ int** charset2uni; /* charset2uni[0..rows-1][0..cols-1] is valid */ /* You'll understand the terms "row" and "col" when you buy Ken Lunde's book. Once a row is fixed, choosing a "col" is the same as choosing a "cell". */ int* charsetpage; /* charsetpage[0..rows]: how large is a page for a row */ int ncharsetblocks; Block* charsetblocks; /* blocks[0..nblocks-1] */ int* uni2charset; /* uni2charset[0x0000..0xffff] */ } Encoding; /* * Outputs the file title. */ static void output_title (const char *charsetname) { printf("\n"); printf("/*\n"); printf(" * %s\n", charsetname); printf(" */\n"); printf("\n"); } /* * Reads the charset2uni table from standard input. */ static void read_table (Encoding* enc) { int row, col, i, i1, i2, c, j; enc->charset2uni = malloc(enc->rows*sizeof(int*)); for (row = 0; row < enc->rows; row++) enc->charset2uni[row] = malloc(enc->cols*sizeof(int)); for (row = 0; row < enc->rows; row++) for (col = 0; col < enc->cols; col++) enc->charset2uni[row][col] = 0xfffd; c = getc(stdin); ungetc(c,stdin); if (c == '#') { /* Read a unicode.org style .TXT file. */ for (;;) { c = getc(stdin); if (c == EOF) break; if (c == '\n' || c == ' ' || c == '\t') continue; if (c == '#') { do { c = getc(stdin); } while (!(c == EOF || c == '\n')); continue; } ungetc(c,stdin); if (scanf("0x%x", &j) != 1) exit(1); i1 = j >> 8; i2 = j & 0xff; row = enc->byte_row(i1); col = enc->byte_col(i2); if (row < 0 || col < 0) { fprintf(stderr, "lost entry for %02x %02x\n", i1, i2); exit(1); } if (scanf(" 0x%x", &enc->charset2uni[row][col]) != 1) exit(1); } } else { /* Read a table of hexadecimal Unicode values. */ for (i1 = 32; i1 < 132; i1++) for (i2 = 32; i2 < 132; i2++) { i = scanf("%x", &j); if (i == EOF) goto read_done; if (i != 1) exit(1); if (j < 0 || j == 0xffff) j = 0xfffd; if (j != 0xfffd) { if (enc->byte_row(i1) < 0 || enc->byte_col(i2) < 0) { fprintf(stderr, "lost entry at %02x %02x\n", i1, i2); exit (1); } enc->charset2uni[enc->byte_row(i1)][enc->byte_col(i2)] = j; } } read_done: ; } } /* * Computes the charsetpage[0..rows] array. */ static void find_charset2uni_pages (Encoding* enc) { int row, col; enc->charsetpage = malloc((enc->rows+1)*sizeof(int)); for (row = 0; row <= enc->rows; row++) enc->charsetpage[row] = 0; for (row = 0; row < enc->rows; row++) { int used = 0; for (col = 0; col < enc->cols; col++) if (enc->charset2uni[row][col] != 0xfffd) used = col+1; enc->charsetpage[row] = used; } } /* * Fills in nblocks and blocks. */ static void find_charset2uni_blocks (Encoding* enc) { int n, row, lastrow; enc->charsetblocks = malloc(enc->rows*sizeof(Block)); n = 0; for (row = 0; row < enc->rows; row++) if (enc->charsetpage[row] > 0 && (row == 0 || enc->charsetpage[row-1] == 0)) { for (lastrow = row; enc->charsetpage[lastrow+1] > 0; lastrow++); enc->charsetblocks[n].start = row * enc->cols; enc->charsetblocks[n].end = lastrow * enc->cols + enc->charsetpage[lastrow]; n++; } enc->ncharsetblocks = n; } /* * Outputs the charset to unicode table and function. */ static void output_charset2uni (const char* name, Encoding* enc) { int row, col, lastrow, col_max, i, i1_min, i1_max; find_charset2uni_pages(enc); find_charset2uni_blocks(enc); for (row = 0; row < enc->rows; row++) if (enc->charsetpage[row] > 0) { if (row == 0 || enc->charsetpage[row-1] == 0) { /* Start a new block. */ for (lastrow = row; enc->charsetpage[lastrow+1] > 0; lastrow++); printf("static const unsigned short %s_2uni_page%02x[%d] = {\n", name, enc->row_byte(row), (lastrow-row) * enc->cols + enc->charsetpage[lastrow]); } printf(" /""* 0x%02x *""/\n ", enc->row_byte(row)); col_max = (enc->charsetpage[row+1] > 0 ? enc->cols : enc->charsetpage[row]); for (col = 0; col < col_max; col++) { printf(" 0x%04x,", enc->charset2uni[row][col]); if ((col % 8) == 7 && (col+1 < col_max)) printf("\n "); } printf("\n"); if (enc->charsetpage[row+1] == 0) { /* End a block. */ printf("};\n"); } } printf("\n"); printf("static int\n"); printf("%s_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n)\n", name); printf("{\n"); printf(" unsigned char c1 = s[0];\n"); printf(" if ("); for (i = 0; i < enc->ncharsetblocks; i++) { i1_min = enc->row_byte(enc->charsetblocks[i].start / enc->cols); i1_max = enc->row_byte((enc->charsetblocks[i].end-1) / enc->cols); if (i > 0) printf(" || "); if (i1_min == i1_max) printf("(c1 == 0x%02x)", i1_min); else printf("(c1 >= 0x%02x && c1 <= 0x%02x)", i1_min, i1_max); } printf(") {\n"); printf(" if (n >= 2) {\n"); printf(" unsigned char c2 = s[1];\n"); printf(" if ("); printf(enc->check_col_expr, "c2"); printf(") {\n"); printf(" unsigned int i = %d * (", enc->cols); printf(enc->byte_row_expr, "c1"); printf(") + ("); printf(enc->byte_col_expr, "c2"); printf(");\n"); printf(" unsigned short wc = 0xfffd;\n"); for (i = 0; i < enc->ncharsetblocks; i++) { printf(" "); if (i > 0) printf("} else "); if (i < enc->ncharsetblocks-1) printf("if (i < %d) ", enc->charsetblocks[i+1].start); printf("{\n"); printf(" if (i < %d)\n", enc->charsetblocks[i].end); printf(" wc = %s_2uni_page%02x[i", name, enc->row_byte(enc->charsetblocks[i].start / enc->cols)); if (enc->charsetblocks[i].start > 0) printf("-%d", enc->charsetblocks[i].start); printf("];\n"); } printf(" }\n"); printf(" if (wc != 0xfffd) {\n"); printf(" *pwc = (ucs4_t) wc;\n"); printf(" return 2;\n"); printf(" }\n"); printf(" }\n"); printf(" return RET_ILSEQ;\n"); printf(" }\n"); printf(" return RET_TOOFEW(0);\n"); printf(" }\n"); printf(" return RET_ILSEQ;\n"); printf("}\n"); printf("\n"); } /* * Computes the uni2charset[0x0000..0xffff] array. */ static void invert (Encoding* enc) { int row, col, j; enc->uni2charset = malloc(0x10000*sizeof(int)); for (j = 0; j < 0x10000; j++) enc->uni2charset[j] = 0; for (row = 0; row < enc->rows; row++) for (col = 0; col < enc->cols; col++) { j = enc->charset2uni[row][col]; if (j != 0xfffd) enc->uni2charset[j] = 0x100 * enc->row_byte(row) + enc->col_byte(col); } } /* * Outputs the unicode to charset table and function, using a linear array. * (Suitable if the table is dense.) */ static void output_uni2charset_dense (const char* name, Encoding* enc) { /* Like in 8bit_tab_to_h.c */ bool pages[0x100]; int line[0x2000]; int tableno; struct { int minline; int maxline; int usecount; } tables[0x2000]; bool first; int row, col, j, p, j1, j2, t; for (p = 0; p < 0x100; p++) pages[p] = false; for (row = 0; row < enc->rows; row++) for (col = 0; col < enc->cols; col++) { j = enc->charset2uni[row][col]; if (j != 0xfffd) pages[j>>8] = true; } for (j1 = 0; j1 < 0x2000; j1++) { bool all_invalid = true; for (j2 = 0; j2 < 8; j2++) { j = 8*j1+j2; if (enc->uni2charset[j] != 0) all_invalid = false; } if (all_invalid) line[j1] = -1; else line[j1] = 0; } tableno = 0; for (j1 = 0; j1 < 0x2000; j1++) { if (line[j1] >= 0) { if (tableno > 0 && ((j1 > 0 && line[j1-1] == tableno-1) || ((tables[tableno-1].maxline >> 5) == (j1 >> 5) && j1 - tables[tableno-1].maxline <= 8))) { line[j1] = tableno-1; tables[tableno-1].maxline = j1; } else { tableno++; line[j1] = tableno-1; tables[tableno-1].minline = tables[tableno-1].maxline = j1; } } } for (t = 0; t < tableno; t++) { tables[t].usecount = 0; j1 = 8*tables[t].minline; j2 = 8*(tables[t].maxline+1); for (j = j1; j < j2; j++) if (enc->uni2charset[j] != 0) tables[t].usecount++; } { p = -1; for (t = 0; t < tableno; t++) if (tables[t].usecount > 1) { p = tables[t].minline >> 5; printf("static const unsigned short %s_page%02x[%d] = {\n", name, p, 8*(tables[t].maxline-tables[t].minline+1)); for (j1 = tables[t].minline; j1 <= tables[t].maxline; j1++) { if ((j1 % 0x20) == 0 && j1 > tables[t].minline) printf(" /* 0x%04x */\n", 8*j1); printf(" "); for (j2 = 0; j2 < 8; j2++) { j = 8*j1+j2; printf(" 0x%04x,", enc->uni2charset[j]); } printf(" /*0x%02x-0x%02x*/\n", 8*(j1 % 0x20), 8*(j1 % 0x20)+7); } printf("};\n"); } if (p >= 0) printf("\n"); } printf("static int\n%s_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)\n", name); printf("{\n"); printf(" if (n >= 2) {\n"); printf(" unsigned short c = 0;\n"); first = true; for (j1 = 0; j1 < 0x2000;) { t = line[j1]; for (j2 = j1; j2 < 0x2000 && line[j2] == t; j2++); if (t >= 0) { if (j1 != tables[t].minline) abort(); if (j2 > tables[t].maxline+1) abort(); j2 = tables[t].maxline+1; if (first) printf(" "); else printf(" else "); first = false; if (tables[t].usecount == 0) abort(); if (tables[t].usecount == 1) { if (j2 != j1+1) abort(); for (j = 8*j1; j < 8*j2; j++) if (enc->uni2charset[j] != 0) { printf("if (wc == 0x%04x)\n c = 0x%02x;\n", j, enc->uni2charset[j]); break; } } else { if (j1 == 0) { printf("if (wc < 0x%04x)", 8*j2); } else { printf("if (wc >= 0x%04x && wc < 0x%04x)", 8*j1, 8*j2); } printf("\n c = %s_page%02x[wc", name, j1 >> 5); if (tables[t].minline > 0) printf("-0x%04x", 8*j1); printf("];\n"); } } j1 = j2; } printf(" if (c != 0) {\n"); printf(" r[0] = (c >> 8); r[1] = (c & 0xff);\n"); printf(" return 2;\n"); printf(" }\n"); printf(" return RET_ILSEQ;\n"); printf(" }\n"); printf(" return RET_TOOSMALL;\n"); printf("}\n"); } /* * Outputs the unicode to charset table and function, using a packed array. * (Suitable if the table is sparse.) */ static void output_uni2charset_sparse (const char* name, Encoding* enc) { bool pages[0x100]; Block pageblocks[0x100]; int npageblocks; int indx2charset[0x10000]; int summary_indx[0x1000]; int summary_used[0x1000]; int i, row, col, j, p, j1, j2, indx; /* Fill pages[0x100]. */ for (p = 0; p < 0x100; p++) pages[p] = false; for (row = 0; row < enc->rows; row++) for (col = 0; col < enc->cols; col++) { j = enc->charset2uni[row][col]; if (j != 0xfffd) pages[j>>8] = true; } #if 0 for (p = 0; p < 0x100; p++) if (pages[p]) { printf("static const unsigned short %s_page%02x[256] = {\n", name, p); for (j1 = 0; j1 < 32; j1++) { printf(" "); for (j2 = 0; j2 < 8; j2++) printf("0x%04x, ", enc->uni2charset[256*p+8*j1+j2]); printf("/""*0x%02x-0x%02x*""/\n", 8*j1, 8*j1+7); } printf("};\n"); } printf("\n"); #endif /* Fill summary_indx[] and summary_used[]. */ indx = 0; for (j1 = 0; j1 < 0x1000; j1++) { summary_indx[j1] = indx; summary_used[j1] = 0; for (j2 = 0; j2 < 16; j2++) { j = 16*j1+j2; if (enc->uni2charset[j] != 0) { indx2charset[indx++] = enc->uni2charset[j]; summary_used[j1] |= (1 << j2); } } } /* Fill npageblocks and pageblocks[]. */ npageblocks = 0; for (p = 0; p < 0x100; ) { if (pages[p] && (p == 0 || !pages[p-1])) { pageblocks[npageblocks].start = 16*p; do p++; while (p < 0x100 && pages[p]); j1 = 16*p; while (summary_used[j1-1] == 0) j1--; pageblocks[npageblocks].end = j1; npageblocks++; } else p++; } printf("static const unsigned short %s_2charset[%d] = {\n", name, indx); for (i = 0; i < indx; ) { if ((i % 8) == 0) printf(" "); printf(" 0x%04x,", indx2charset[i]); i++; if ((i % 8) == 0 || i == indx) printf("\n"); } printf("};\n"); printf("\n"); for (i = 0; i < npageblocks; i++) { printf("static const Summary16 %s_uni2indx_page%02x[%d] = {\n", name, pageblocks[i].start/16, pageblocks[i].end-pageblocks[i].start); for (j1 = pageblocks[i].start; j1 < pageblocks[i].end; ) { if (((16*j1) % 0x100) == 0) printf(" /""* 0x%04x *""/\n", 16*j1); if ((j1 % 4) == 0) printf(" "); printf(" { %4d, 0x%04x },", summary_indx[j1], summary_used[j1]); j1++; if ((j1 % 4) == 0 || j1 == pageblocks[i].end) printf("\n"); } printf("};\n"); } printf("\n"); printf("static int\n"); printf("%s_wctomb (conv_t conv, unsigned char *r, ucs4_t wc, int n)\n", name); printf("{\n"); printf(" if (n >= 2) {\n"); printf(" const Summary16 *summary = NULL;\n"); for (i = 0; i < npageblocks; i++) { printf(" "); if (i > 0) printf("else "); printf("if (wc >= 0x%04x && wc < 0x%04x)\n", 16*pageblocks[i].start, 16*pageblocks[i].end); printf(" summary = &%s_uni2indx_page%02x[(wc>>4)", name, pageblocks[i].start/16); if (pageblocks[i].start > 0) printf("-0x%03x", pageblocks[i].start); printf("];\n"); } printf(" if (summary) {\n"); printf(" unsigned short used = summary->used;\n"); printf(" unsigned int i = wc & 0x0f;\n"); printf(" if (used & ((unsigned short) 1 << i)) {\n"); printf(" unsigned short c;\n"); printf(" /* Keep in `used' only the bits 0..i-1. */\n"); printf(" used &= ((unsigned short) 1 << i) - 1;\n"); printf(" /* Add `summary->indx' and the number of bits set in `used'. */\n"); printf(" used = (used & 0x5555) + ((used & 0xaaaa) >> 1);\n"); printf(" used = (used & 0x3333) + ((used & 0xcccc) >> 2);\n"); printf(" used = (used & 0x0f0f) + ((used & 0xf0f0) >> 4);\n"); printf(" used = (used & 0x00ff) + (used >> 8);\n"); printf(" c = %s_2charset[summary->indx + used];\n", name); printf(" r[0] = (c >> 8); r[1] = (c & 0xff);\n"); printf(" return 2;\n"); printf(" }\n"); printf(" }\n"); printf(" return RET_ILSEQ;\n"); printf(" }\n"); printf(" return RET_TOOSMALL;\n"); printf("}\n"); } /* ISO-2022/EUC specifics */ static int row_byte_normal (int row) { return 0x21+row; } static int col_byte_normal (int col) { return 0x21+col; } static int byte_row_normal (int byte) { return byte-0x21; } static int byte_col_normal (int byte) { return byte-0x21; } static void do_normal (const char* name) { Encoding enc; enc.rows = 94; enc.cols = 94; enc.row_byte = row_byte_normal; enc.col_byte = col_byte_normal; enc.byte_row = byte_row_normal; enc.byte_col = byte_col_normal; enc.check_row_expr = "%1$s >= 0x21 && %1$s < 0x7f"; enc.check_col_expr = "%1$s >= 0x21 && %1$s < 0x7f"; enc.byte_row_expr = "%1$s - 0x21"; enc.byte_col_expr = "%1$s - 0x21"; read_table(&enc); output_charset2uni(name,&enc); invert(&enc); output_uni2charset_sparse(name,&enc); } /* Note: On first sight, the jisx0212_2charset[] table seems to be in order, starting from the charset=0x3021/uni=0x4e02 pair. But it's only mostly in order. There are 75 out-of-order values, scattered all throughout the table. */ static void do_normal_only_charset2uni (const char* name) { Encoding enc; enc.rows = 94; enc.cols = 94; enc.row_byte = row_byte_normal; enc.col_byte = col_byte_normal; enc.byte_row = byte_row_normal; enc.byte_col = byte_col_normal; enc.check_row_expr = "%1$s >= 0x21 && %1$s < 0x7f"; enc.check_col_expr = "%1$s >= 0x21 && %1$s < 0x7f"; enc.byte_row_expr = "%1$s - 0x21"; enc.byte_col_expr = "%1$s - 0x21"; read_table(&enc); output_charset2uni(name,&enc); } /* CNS 11643 specifics - trick to put two tables into one */ static int row_byte_cns11643 (int row) { return 0x100 * (row / 94) + (row % 94) + 0x21; } static int byte_row_cns11643 (int byte) { return (byte >= 0x100 && byte < 0x200 ? byte-0x121 : byte >= 0x200 && byte < 0x300 ? byte-0x221+94 : byte >= 0x300 && byte < 0x400 ? byte-0x321+2*94 : -1); } static void do_cns11643_only_uni2charset (const char* name) { Encoding enc; int j, x; enc.rows = 3*94; enc.cols = 94; enc.row_byte = row_byte_cns11643; enc.col_byte = col_byte_normal; enc.byte_row = byte_row_cns11643; enc.byte_col = byte_col_normal; enc.check_row_expr = "%1$s >= 0x21 && %1$s < 0x7f"; enc.check_col_expr = "%1$s >= 0x21 && %1$s < 0x7f"; enc.byte_row_expr = "%1$s - 0x21"; enc.byte_col_expr = "%1$s - 0x21"; read_table(&enc); invert(&enc); /* Move the 2 plane bits into the unused bits 15 and 7. */ for (j = 0; j < 0x10000; j++) { x = enc.uni2charset[j]; if (x != 0) { if (x & 0x8080) abort(); switch (x >> 16) { case 0: /* plane 1 */ x = (x & 0xffff) | 0x0000; break; case 1: /* plane 2 */ x = (x & 0xffff) | 0x0080; break; case 2: /* plane 3 */ x = (x & 0xffff) | 0x8000; break; default: abort(); } enc.uni2charset[j] = x; } } output_uni2charset_sparse(name,&enc); } /* GBK specifics */ static int row_byte_gbk1 (int row) { return 0x81+row; } static int col_byte_gbk1 (int col) { return (col >= 0x3f ? 0x41 : 0x40) + col; } static int byte_row_gbk1 (int byte) { if (byte >= 0x81 && byte < 0xff) return byte-0x81; else return -1; } static int byte_col_gbk1 (int byte) { if (byte >= 0x40 && byte < 0x7f) return byte-0x40; else if (byte >= 0x80 && byte < 0xff) return byte-0x41; else return -1; } static void do_gbk1 (const char* name) { Encoding enc; enc.rows = 126; enc.cols = 190; enc.row_byte = row_byte_gbk1; enc.col_byte = col_byte_gbk1; enc.byte_row = byte_row_gbk1; enc.byte_col = byte_col_gbk1; enc.check_row_expr = "%1$s >= 0x81 && %1$s < 0xff"; enc.check_col_expr = "(%1$s >= 0x40 && %1$s < 0x7f) || (%1$s >= 0x80 && %1$s < 0xff)"; enc.byte_row_expr = "%1$s - 0x81"; enc.byte_col_expr = "%1$s - (%1$s >= 0x80 ? 0x41 : 0x40)"; read_table(&enc); output_charset2uni(name,&enc); invert(&enc); output_uni2charset_dense(name,&enc); } static void do_gbk1_only_charset2uni (const char* name) { Encoding enc; enc.rows = 126; enc.cols = 190; enc.row_byte = row_byte_gbk1; enc.col_byte = col_byte_gbk1; enc.byte_row = byte_row_gbk1; enc.byte_col = byte_col_gbk1; enc.check_row_expr = "%1$s >= 0x81 && %1$s < 0xff"; enc.check_col_expr = "(%1$s >= 0x40 && %1$s < 0x7f) || (%1$s >= 0x80 && %1$s < 0xff)"; enc.byte_row_expr = "%1$s - 0x81"; enc.byte_col_expr = "%1$s - (%1$s >= 0x80 ? 0x41 : 0x40)"; read_table(&enc); output_charset2uni(name,&enc); } static int row_byte_gbk2 (int row) { return 0x81+row; } static int col_byte_gbk2 (int col) { return (col >= 0x3f ? 0x41 : 0x40) + col; } static int byte_row_gbk2 (int byte) { if (byte >= 0x81 && byte < 0xff) return byte-0x81; else return -1; } static int byte_col_gbk2 (int byte) { if (byte >= 0x40 && byte < 0x7f) return byte-0x40; else if (byte >= 0x80 && byte < 0xa1) return byte-0x41; else return -1; } static void do_gbk2_only_charset2uni (const char* name) { Encoding enc; enc.rows = 126; enc.cols = 96; enc.row_byte = row_byte_gbk2; enc.col_byte = col_byte_gbk2; enc.byte_row = byte_row_gbk2; enc.byte_col = byte_col_gbk2; enc.check_row_expr = "%1$s >= 0x81 && %1$s < 0xff"; enc.check_col_expr = "(%1$s >= 0x40 && %1$s < 0x7f) || (%1$s >= 0x80 && %1$s < 0xa1)"; enc.byte_row_expr = "%1$s - 0x81"; enc.byte_col_expr = "%1$s - (%1$s >= 0x80 ? 0x41 : 0x40)"; read_table(&enc); output_charset2uni(name,&enc); } static void do_gbk1_only_uni2charset (const char* name) { Encoding enc; enc.rows = 126; enc.cols = 190; enc.row_byte = row_byte_gbk1; enc.col_byte = col_byte_gbk1; enc.byte_row = byte_row_gbk1; enc.byte_col = byte_col_gbk1; enc.check_row_expr = "%1$s >= 0x81 && %1$s < 0xff"; enc.check_col_expr = "(%1$s >= 0x40 && %1$s < 0x7f) || (%1$s >= 0x80 && %1$s < 0xff)"; enc.byte_row_expr = "%1$s - 0x81"; enc.byte_col_expr = "%1$s - (%1$s >= 0x80 ? 0x41 : 0x40)"; read_table(&enc); invert(&enc); output_uni2charset_sparse(name,&enc); } /* KSC 5601 specifics */ /* * Reads the charset2uni table from standard input. */ static void read_table_ksc5601 (Encoding* enc) { int row, col, i, i1, i2, c, j; enc->charset2uni = malloc(enc->rows*sizeof(int*)); for (row = 0; row < enc->rows; row++) enc->charset2uni[row] = malloc(enc->cols*sizeof(int)); for (row = 0; row < enc->rows; row++) for (col = 0; col < enc->cols; col++) enc->charset2uni[row][col] = 0xfffd; c = getc(stdin); ungetc(c,stdin); if (c == '#') { /* Read a unicode.org style .TXT file. */ for (;;) { c = getc(stdin); if (c == EOF) break; if (c == '\n' || c == ' ' || c == '\t') continue; if (c == '#') { do { c = getc(stdin); } while (!(c == EOF || c == '\n')); continue; } ungetc(c,stdin); if (scanf("0x%x", &j) != 1) exit(1); i1 = j >> 8; i2 = j & 0xff; if (scanf(" 0x%x", &j) != 1) exit(1); /* Take only the range covered by KS C 5601.1987-0 = KS C 5601.1989-0 = KS X 1001.1992, ignore the rest. */ if (!(i1 >= 128+33 && i1 < 128+127 && i2 >= 128+33 && i2 < 128+127)) continue; /* KSC5601 specific */ i1 &= 0x7f; /* KSC5601 specific */ i2 &= 0x7f; /* KSC5601 specific */ row = enc->byte_row(i1); col = enc->byte_col(i2); if (row < 0 || col < 0) { fprintf(stderr, "lost entry for %02x %02x\n", i1, i2); exit(1); } enc->charset2uni[row][col] = j; } } else { /* Read a table of hexadecimal Unicode values. */ for (i1 = 33; i1 < 127; i1++) for (i2 = 33; i2 < 127; i2++) { i = scanf("%x", &j); if (i == EOF) goto read_done; if (i != 1) exit(1); if (j < 0 || j == 0xffff) j = 0xfffd; if (j != 0xfffd) { if (enc->byte_row(i1) < 0 || enc->byte_col(i2) < 0) { fprintf(stderr, "lost entry at %02x %02x\n", i1, i2); exit (1); } enc->charset2uni[enc->byte_row(i1)][enc->byte_col(i2)] = j; } } read_done: ; } } static void do_ksc5601 (const char* name) { Encoding enc; enc.rows = 94; enc.cols = 94; enc.row_byte = row_byte_normal; enc.col_byte = col_byte_normal; enc.byte_row = byte_row_normal; enc.byte_col = byte_col_normal; enc.check_row_expr = "%1$s >= 0x21 && %1$s < 0x7f"; enc.check_col_expr = "%1$s >= 0x21 && %1$s < 0x7f"; enc.byte_row_expr = "%1$s - 0x21"; enc.byte_col_expr = "%1$s - 0x21"; read_table_ksc5601(&enc); output_charset2uni(name,&enc); invert(&enc); output_uni2charset_sparse(name,&enc); } /* Big5 specifics */ static int row_byte_big5 (int row) { return 0xa1+row; } static int col_byte_big5 (int col) { return (col >= 0x3f ? 0x62 : 0x40) + col; } static int byte_row_big5 (int byte) { if (byte >= 0xa1 && byte < 0xff) return byte-0xa1; else return -1; } static int byte_col_big5 (int byte) { if (byte >= 0x40 && byte < 0x7f) return byte-0x40; else if (byte >= 0xa1 && byte < 0xff) return byte-0x62; else return -1; } static void do_big5 (const char* name) { Encoding enc; enc.rows = 94; enc.cols = 157; enc.row_byte = row_byte_big5; enc.col_byte = col_byte_big5; enc.byte_row = byte_row_big5; enc.byte_col = byte_col_big5; enc.check_row_expr = "%1$s >= 0xa1 && %1$s < 0xff"; enc.check_col_expr = "(%1$s >= 0x40 && %1$s < 0x7f) || (%1$s >= 0xa1 && %1$s < 0xff)"; enc.byte_row_expr = "%1$s - 0xa1"; enc.byte_col_expr = "%1$s - (%1$s >= 0xa1 ? 0x62 : 0x40)"; read_table(&enc); output_charset2uni(name,&enc); invert(&enc); output_uni2charset_sparse(name,&enc); } /* Big5-HKSCS specifics */ static int row_byte_big5hkscs (int row) { return 0x81+row; } static int col_byte_big5hkscs (int col) { return (col >= 0x3f ? 0x62 : 0x40) + col; } static int byte_row_big5hkscs (int byte) { if (byte >= 0x81 && byte < 0xff) return byte-0x81; else return -1; } static int byte_col_big5hkscs (int byte) { if (byte >= 0x40 && byte < 0x7f) return byte-0x40; else if (byte >= 0xa1 && byte < 0xff) return byte-0x62; else return -1; } static void do_big5hkscs (const char* name) { Encoding enc; enc.rows = 126; enc.cols = 157; enc.row_byte = row_byte_big5hkscs; enc.col_byte = col_byte_big5hkscs; enc.byte_row = byte_row_big5hkscs; enc.byte_col = byte_col_big5hkscs; enc.check_row_expr = "%1$s >= 0x81 && %1$s < 0xff"; enc.check_col_expr = "(%1$s >= 0x40 && %1$s < 0x7f) || (%1$s >= 0xa1 && %1$s < 0xff)"; enc.byte_row_expr = "%1$s - 0x81"; enc.byte_col_expr = "%1$s - (%1$s >= 0xa1 ? 0x62 : 0x40)"; read_table(&enc); output_charset2uni(name,&enc); invert(&enc); output_uni2charset_sparse(name,&enc); } /* Johab Hangul specifics */ static int row_byte_johab_hangul (int row) { return 0x84+row; } static int col_byte_johab_hangul (int col) { return (col >= 0x3e ? 0x43 : 0x41) + col; } static int byte_row_johab_hangul (int byte) { if (byte >= 0x84 && byte < 0xd4) return byte-0x84; else return -1; } static int byte_col_johab_hangul (int byte) { if (byte >= 0x41 && byte < 0x7f) return byte-0x41; else if (byte >= 0x81 && byte < 0xff) return byte-0x43; else return -1; } static void do_johab_hangul (const char* name) { Encoding enc; enc.rows = 80; enc.cols = 188; enc.row_byte = row_byte_johab_hangul; enc.col_byte = col_byte_johab_hangul; enc.byte_row = byte_row_johab_hangul; enc.byte_col = byte_col_johab_hangul; enc.check_row_expr = "%1$s >= 0x84 && %1$s < 0xd4"; enc.check_col_expr = "(%1$s >= 0x41 && %1$s < 0x7f) || (%1$s >= 0x81 && %1$s < 0xff)"; enc.byte_row_expr = "%1$s - 0x84"; enc.byte_col_expr = "%1$s - (%1$s >= 0x81 ? 0x43 : 0x41)"; read_table(&enc); output_charset2uni(name,&enc); invert(&enc); output_uni2charset_dense(name,&enc); } /* SJIS specifics */ static int row_byte_sjis (int row) { return (row >= 0x1f ? 0xc1 : 0x81) + row; } static int col_byte_sjis (int col) { return (col >= 0x3f ? 0x41 : 0x40) + col; } static int byte_row_sjis (int byte) { if (byte >= 0x81 && byte < 0xa0) return byte-0x81; else if (byte >= 0xe0) return byte-0xc1; else return -1; } static int byte_col_sjis (int byte) { if (byte >= 0x40 && byte < 0x7f) return byte-0x40; else if (byte >= 0x80 && byte < 0xfd) return byte-0x41; else return -1; } static void do_sjis (const char* name) { Encoding enc; enc.rows = 94; enc.cols = 188; enc.row_byte = row_byte_sjis; enc.col_byte = col_byte_sjis; enc.byte_row = byte_row_sjis; enc.byte_col = byte_col_sjis; enc.check_row_expr = "(%1$s >= 0x81 && %1$s < 0xa0) || (%1$s >= 0xe0)"; enc.check_col_expr = "(%1$s >= 0x40 && %1$s < 0x7f) || (%1$s >= 0x80 && %1$s < 0xfd)"; enc.byte_row_expr = "%1$s - (%1$s >= 0xe0 ? 0xc1 : 0x81)"; enc.byte_col_expr = "%1$s - (%1$s >= 0x80 ? 0x41 : 0x40)"; read_table(&enc); output_charset2uni(name,&enc); invert(&enc); output_uni2charset_sparse(name,&enc); } /* Main program */ int main (int argc, char *argv[]) { const char* charsetname; const char* name; if (argc != 3) exit(1); charsetname = argv[1]; name = argv[2]; output_title(charsetname); if (!strcmp(name,"gb2312") || !strcmp(name,"gb12345ext") || !strcmp(name,"jisx0208") || !strcmp(name,"jisx0212")) do_normal(name); else if (!strcmp(name,"cns11643_1") || !strcmp(name,"cns11643_2") || !strcmp(name,"cns11643_3")) do_normal_only_charset2uni(name); else if (!strcmp(name,"cns11643_inv")) do_cns11643_only_uni2charset(name); else if (!strcmp(name,"gbkext1")) do_gbk1_only_charset2uni(name); else if (!strcmp(name,"gbkext2")) do_gbk2_only_charset2uni(name); else if (!strcmp(name,"gbkext_inv")) do_gbk1_only_uni2charset(name); else if (!strcmp(name,"cp936ext")) do_gbk1(name); else if (!strcmp(name,"ksc5601")) do_ksc5601(name); else if (!strcmp(name,"big5") || !strcmp(name,"cp950ext")) do_big5(name); else if (!strcmp(name,"big5hkscs")) do_big5hkscs(name); else if (!strcmp(name,"johab_hangul")) do_johab_hangul(name); else if (!strcmp(name,"cp932ext")) do_sjis(name); else exit(1); return 0; } ls = 190; enc.row_byte = row_byte_gbk1; enc.col_byte = col_byte_gbk1; enc.byte_row = byte_row_gbk1; enc.byte_col = byte_col_gbk1; enc.check_row_expr = "%1$s >= 0x81 && %1$s < 0xff"; enc.check_col_expr = "(%1$s >= 0x40 libX11-1.6.3/src/xlibi18n/lcRM.c000064401431060000012000000125701247741723500163110ustar00alancstaff00002660200006/* * Copyright 1992, 1993 by TOSHIBA Corp. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of TOSHIBA not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. TOSHIBA make no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * * Author: Katsuhisa Yano TOSHIBA Corp. * mopi@osa.ilab.toshiba.co.jp * Bug fixes: Bruno Haible XFree86 Inc. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "XlcPubI.h" #include /* * Default implementation of methods for Xrm parsing. */ /* ======================= Unibyte implementation ======================= */ /* Only for efficiency, to speed up things. */ /* This implementation must keep the locale, for lcname. */ typedef struct _UbStateRec { XLCd lcd; } UbStateRec, *UbState; /* Sets the state to the initial state. Initiates a sequence of calls to mbchar. */ static void ub_mbinit( XPointer state) { } /* Transforms one multibyte character, and return a 'char' in the same parsing class. Returns the number of consumed bytes in *lenp. */ static char ub_mbchar( XPointer state, const char *str, int *lenp) { *lenp = 1; return *str; } /* Terminates a sequence of calls to mbchar. */ static void ub_mbfinish( XPointer state) { } /* Returns the name of the state's locale, as a static string. */ static const char * ub_lcname( XPointer state) { return ((UbState) state)->lcd->core->name; } /* Frees the state, which was allocated by _XrmDefaultInitParseInfo. */ static void ub_destroy( XPointer state) { _XCloseLC(((UbState) state)->lcd); Xfree(state); } static const XrmMethodsRec ub_methods = { ub_mbinit, ub_mbchar, ub_mbfinish, ub_lcname, ub_destroy }; /* ======================= Multibyte implementation ======================= */ /* This implementation uses an XlcConv from XlcNMultiByte to XlcNWideChar. */ typedef struct _MbStateRec { XLCd lcd; XlcConv conv; } MbStateRec, *MbState; /* Sets the state to the initial state. Initiates a sequence of calls to mbchar. */ static void mb_mbinit( XPointer state) { _XlcResetConverter(((MbState) state)->conv); } /* Transforms one multibyte character, and return a 'char' in the same parsing class. Returns the number of consumed bytes in *lenp. */ static char mb_mbchar( XPointer state, const char *str, int *lenp) { XlcConv conv = ((MbState) state)->conv; const char *from; wchar_t *to, wc; int cur_max, i, from_left, to_left, ret; cur_max = XLC_PUBLIC(((MbState) state)->lcd, mb_cur_max); from = str; /* Determine from_left. Avoid overrun error which could occur if from_left > strlen(str). */ from_left = cur_max; for (i = 0; i < cur_max; i++) if (str[i] == '\0') { from_left = i; break; } *lenp = from_left; to = &wc; to_left = 1; ret = _XlcConvert(conv, (XPointer *) &from, &from_left, (XPointer *) &to, &to_left, NULL, 0); *lenp -= from_left; if (ret < 0 || to_left > 0) { /* Invalid or incomplete multibyte character seen. */ *lenp = 1; return 0x7f; } /* Return a 'char' equivalent to wc. */ return (wc >= 0 && wc <= 0x7f ? wc : 0x7f); } /* Terminates a sequence of calls to mbchar. */ static void mb_mbfinish( XPointer state) { } /* Returns the name of the state's locale, as a static string. */ static const char * mb_lcname( XPointer state) { return ((MbState) state)->lcd->core->name; } /* Frees the state, which was allocated by _XrmDefaultInitParseInfo. */ static void mb_destroy( XPointer state) { _XlcCloseConverter(((MbState) state)->conv); _XCloseLC(((MbState) state)->lcd); Xfree(state); } static const XrmMethodsRec mb_methods = { mb_mbinit, mb_mbchar, mb_mbfinish, mb_lcname, mb_destroy }; /* ======================= Exported function ======================= */ XrmMethods _XrmDefaultInitParseInfo( XLCd lcd, XPointer *rm_state) { if (XLC_PUBLIC(lcd, mb_cur_max) == 1) { /* Unibyte case. */ UbState state = Xmalloc(sizeof(UbStateRec)); if (state == NULL) return (XrmMethods) NULL; state->lcd = lcd; *rm_state = (XPointer) state; return &ub_methods; } else { /* Multibyte case. */ MbState state = Xmalloc(sizeof(MbStateRec)); if (state == NULL) return (XrmMethods) NULL; state->lcd = lcd; state->conv = _XlcOpenConverter(lcd, XlcNMultiByte, lcd, XlcNWideChar); if (state->conv == NULL) { Xfree(state); return (XrmMethods) NULL; } *rm_state = (XPointer) state; return &mb_methods; } } libX11-1.6.3/src/xlibi18n/Ximint.h000064401431060000012000000441401247741723500167270ustar00alancstaff00002660200006/****************************************************************** Copyright 1992, 1993, 1994 by FUJITSU LIMITED Copyright 1993, 1994 by Sony Corporation Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of FUJITSU LIMITED and Sony Corporation not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED and Sony Corporation makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED AND SONY CORPORATION DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU LIMITED AND SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp Motifier: Makoto Wakamatsu Sony Corporation makoto@sm.sony.co.jp ******************************************************************/ #ifndef _XIMINT_H #define _XIMINT_H #include #include typedef struct _Xim *Xim; typedef struct _Xic *Xic; /* * Input Method data */ #include "XimintP.h" #include "XimintL.h" /* * XIM dependent data */ typedef struct _XimCommonPrivateRec { /* This struct is also inlined in XimLocalPrivateRec, XimProtoPrivateRec. */ XlcConv ctom_conv; XlcConv ctow_conv; XlcConv ctoutf8_conv; XlcConv cstomb_conv; XlcConv cstowc_conv; XlcConv cstoutf8_conv; XlcConv ucstoc_conv; XlcConv ucstoutf8_conv; } XimCommonPrivateRec; typedef union _XIMPrivateRec { XimCommonPrivateRec common; XimLocalPrivateRec local; XimProtoPrivateRec proto; } XIMPrivateRec; /* * IM struct */ typedef struct _Xim { XIMMethods methods; XIMCoreRec core; XIMPrivateRec private; } XimRec; /* * IC deprndent data */ typedef union _XICPrivateRec { XicLocalPrivateRec local; XicProtoPrivateRec proto; } XICPrivateRec; /* * IC struct */ typedef struct _Xic { XICMethods methods; XICCoreRec core; XICPrivateRec private; } XicRec; typedef struct _XimDefIMValues { XIMValuesList *im_values_list; XIMValuesList *ic_values_list; XIMStyles *styles; XIMCallback destroy_callback; char *res_name; char *res_class; Bool visible_position; } XimDefIMValues; typedef struct _XimDefICValues { XIMStyle input_style; Window client_window; Window focus_window; unsigned long filter_events; XICCallback geometry_callback; char *res_name; char *res_class; XICCallback destroy_callback; XICCallback preedit_state_notify_callback; XICCallback string_conversion_callback; XIMStringConversionText string_conversion; XIMResetState reset_state; XIMHotKeyTriggers *hotkey; XIMHotKeyState hotkey_state; ICPreeditAttributes preedit_attr; ICStatusAttributes status_attr; } XimDefICValues; #define XIM_MODE_IM_GET (1 << 0) #define XIM_MODE_IM_SET (1 << 1) #define XIM_MODE_IM_DEFAULT (1 << 2) #define XIM_MODE_PRE_GET (1 << 0) #define XIM_MODE_PRE_SET (1 << 1) #define XIM_MODE_PRE_CREATE (1 << 2) #define XIM_MODE_PRE_ONCE (1 << 3) #define XIM_MODE_PRE_DEFAULT (1 << 4) #define XIM_MODE_STS_GET (1 << 5) #define XIM_MODE_STS_SET (1 << 6) #define XIM_MODE_STS_CREATE (1 << 7) #define XIM_MODE_STS_ONCE (1 << 8) #define XIM_MODE_STS_DEFAULT (1 << 9) #define XIM_MODE_IC_GET (XIM_MODE_PRE_GET | XIM_MODE_STS_GET) #define XIM_MODE_IC_SET (XIM_MODE_PRE_SET | XIM_MODE_STS_SET) #define XIM_MODE_IC_CREATE (XIM_MODE_PRE_CREATE | XIM_MODE_STS_CREATE) #define XIM_MODE_IC_ONCE (XIM_MODE_PRE_ONCE | XIM_MODE_STS_ONCE) #define XIM_MODE_IC_DEFAULT (XIM_MODE_PRE_DEFAULT | XIM_MODE_STS_DEFAULT) #define XIM_MODE_PRE_MASK (XIM_MODE_PRE_GET | XIM_MODE_PRE_SET | \ XIM_MODE_PRE_CREATE | XIM_MODE_PRE_ONCE | \ XIM_MODE_PRE_DEFAULT) #define XIM_MODE_STS_MASK (XIM_MODE_STS_GET | XIM_MODE_STS_SET | \ XIM_MODE_STS_CREATE | XIM_MODE_STS_ONCE | \ XIM_MODE_STS_DEFAULT) #define XIM_SETIMDEFAULTS (1L << 0) #define XIM_SETIMVALUES (1L << 1) #define XIM_GETIMVALUES (1L << 2) #define XIM_SETICDEFAULTS (1L << 0) #define XIM_CREATEIC (1L << 1) #define XIM_SETICVALUES (1L << 2) #define XIM_GETICVALUES (1L << 3) #define XIM_PREEDIT_ATTR (1L << 4) #define XIM_STATUS_ATTR (1L << 5) #define XIM_CHECK_VALID 0 #define XIM_CHECK_INVALID 1 #define XIM_CHECK_ERROR 2 #define FILTERD True #define NOTFILTERD False #define XIMMODIFIER "@im=" #define XIM_TRUE True #define XIM_FALSE False #define XIM_OVERFLOW (-1) #define BRL_UC_ROW 0x2800 /* * Global symbols */ XPointer _XimGetLocaleCode ( const char *encoding_name ); int _XimGetCharCode ( XPointer conv, KeySym keysym, unsigned char *buf, int nbytes ); unsigned int KeySymToUcs4 ( KeySym keysym ); extern Bool _XimSetIMResourceList( XIMResourceList *res_list, unsigned int *list_num ); extern Bool _XimSetICResourceList( XIMResourceList *res_list, unsigned int *list_num ); extern Bool _XimSetInnerIMResourceList( XIMResourceList *res_list, unsigned int *list_num ); extern Bool _XimSetInnerICResourceList( XIMResourceList *res_list, unsigned int *list_num ); extern Bool _XimCheckCreateICValues( XIMResourceList res_list, unsigned int list_num ); extern XIMResourceList _XimGetResourceListRec( XIMResourceList res_list, unsigned int list_num, const char *name ); extern void _XimSetIMMode( XIMResourceList res_list, unsigned int list_num ); extern void _XimSetICMode( XIMResourceList res_list, unsigned int list_num, XIMStyle style ); extern int _XimCheckIMMode( XIMResourceList res_list, unsigned long mode ); extern int _XimCheckICMode( XIMResourceList res_list, unsigned long mode ); extern Bool _XimSetLocalIMDefaults( Xim im, XPointer top, XIMResourceList res_list, unsigned int list_num ); extern Bool _XimSetICDefaults( Xic ic, XPointer top, unsigned long mode, XIMResourceList res_list, unsigned int list_num ); extern Bool _XimEncodeLocalIMAttr( XIMResourceList res, XPointer top, XPointer val ); extern Bool _XimEncodeLocalICAttr( Xic ic, XIMResourceList res, XPointer top, XIMArg *arg, unsigned long mode ); extern Bool _XimCheckLocalInputStyle( Xic ic, XPointer top, XIMArg *values, XIMStyles *styles, XIMResourceList res_list, unsigned int list_num ); extern Bool _XimDecodeLocalIMAttr( XIMResourceList res, XPointer top, XPointer val ); extern Bool _XimDecodeLocalICAttr( XIMResourceList res, XPointer top, XPointer val, unsigned long mode ); extern void _XimGetCurrentIMValues( Xim im, XimDefIMValues *im_values ); extern void _XimSetCurrentIMValues( Xim im, XimDefIMValues *im_values ); extern void _XimGetCurrentICValues( Xic ic, XimDefICValues *ic_values ); extern void _XimSetCurrentICValues( Xic ic, XimDefICValues *ic_values ); extern void _XimInitialResourceInfo( void ); extern void _XimParseStringFile( FILE *fp, Xim im ); extern Bool _XimCheckIfLocalProcessing( Xim im ); extern Bool _XimCheckIfThaiProcessing( Xim im ); extern Bool _XimLocalOpenIM( Xim im ); extern Bool _XimThaiOpenIM( Xim im ); extern Bool _XimProtoOpenIM( Xim im ); extern void _XimLocalIMFree( Xim im ); extern void _XimThaiIMFree( Xim im ); extern void _XimProtoIMFree( Xim im ); extern char * _XimSetIMValueData( Xim im, XPointer top, XIMArg *arg, XIMResourceList res_list, unsigned int list_num ); extern char * _XimGetIMValueData( Xim im, XPointer top, XIMArg *arg, XIMResourceList res_list, unsigned int list_num ); extern char * _XimSetICValueData( Xic ic, XPointer top, XIMResourceList res_list, unsigned int list_num, XIMArg *arg, unsigned long mode, Bool flag ); extern char * _XimGetICValueData( Xic ic, XPointer top, XIMResourceList res_list, unsigned int list_num, XIMArg *arg, unsigned long mode ); extern char * _XimLocalSetIMValues( XIM im, XIMArg *arg ); extern char * _XimLocalGetIMValues( XIM im, XIMArg *arg ); extern XIC _XimLocalCreateIC( XIM im, XIMArg *arg ); extern Bool _XimDispatchInit( Xim im ); extern Bool _XimGetAttributeID( Xim im, CARD16 *buf ); extern Bool _XimExtension( Xim im ); extern void _XimDestroyIMStructureList( Xim im ); extern char * _XimMakeIMAttrIDList( Xim im, XIMResourceList res_list, unsigned int res_num, XIMArg *arg, CARD16 *buf, INT16 *len, unsigned long mode ); extern char * _XimMakeICAttrIDList( Xic ic, XIMResourceList res_list, unsigned int res_num, XIMArg *arg, CARD16 *idList, INT16 *num, unsigned long mode ); extern char * _XimDecodeIMATTRIBUTE( Xim im, XIMResourceList res_list, unsigned int res_num, CARD16 *buf, INT16 buf_len, XIMArg *arg, BITMASK32 mode ); extern char * _XimDecodeICATTRIBUTE( Xic ic, XIMResourceList res_list, unsigned int res_num, CARD16 *buf, INT16 buf_len, XIMArg *arg, BITMASK32 mode ); extern Bool _XimRegProtoIntrCallback( Xim im, CARD16 major_code, CARD16 minor_code, Bool (*proc)( Xim, INT16, XPointer, XPointer ), XPointer call_data ); extern Bool _XimErrorCallback( Xim im, INT16 len, XPointer data, XPointer call_data ); extern Bool _XimError( Xim im, Xic ic, CARD16 error_code, INT16 detail_length, CARD16 type, char *detail ); extern Bool _XimRegisterTriggerKeysCallback( Xim im, INT16 len, XPointer data, XPointer call_data ); extern Bool _XimSetEventMaskCallback( Xim im, INT16 len, XPointer data, XPointer call_data ); extern Bool _XimForwardEventCallback( Xim im, INT16 len, XPointer data, XPointer call_data ); extern Bool _XimCommitCallback( Xim im, INT16 len, XPointer data, XPointer call_data ); extern Bool _XimSyncCallback( Xim im, INT16 len, XPointer data, XPointer call_data ); extern void _XimFreeProtoIntrCallback( Xim im ); extern XIC _XimProtoCreateIC( XIM im, XIMArg *arg ); extern void _XimRegisterServerFilter( Xim im ); extern void _XimUnregisterServerFilter( Xim im ); extern Bool _XimTriggerNotify( Xim im, Xic ic, int mode, CARD32 idx ); extern Bool _XimProcSyncReply( Xim im, Xic ic ); extern void _XimSendSetFocus( Xim im, Xic ic ); extern Bool _XimForwardEvent( Xic ic, XEvent *ev, Bool sync ); extern void _XimFreeRemakeArg( XIMArg *arg ); extern void _XimServerDestroy( Xim im ); extern char * _XimEncodeIMATTRIBUTE( Xim im, XIMResourceList res_list, unsigned int res_num, XIMArg *arg, XIMArg **arg_ret, char *buf, int size, int *ret_len, XPointer top, unsigned long mode ); extern char * _XimEncodeICATTRIBUTE( Xic ic, XIMResourceList res_list, unsigned int res_num, XIMArg *arg, XIMArg **arg_ret, char *buf, int size, int *ret_len, XPointer top, BITMASK32 *flag, unsigned long mode ); #ifdef EXT_MOVE extern Bool _XimExtenMove( Xim im, Xic ic, CARD32 flag, CARD16 *buf, INT16 length ); #endif extern int _Ximctstombs( XIM im, char *from, int from_len, char *to, int to_len, Status *state ); extern int _Ximctstowcs( XIM im, char *from, int from_len, wchar_t *to, int to_len, Status *state ); extern int _Ximctstoutf8( XIM im, char *from, int from_len, char *to, int to_len, Status *state ); extern int _XimLcctstombs( XIM im, char *from, int from_len, char *to, int to_len, Status *state ); extern int _XimLcctstowcs( XIM im, char *from, int from_len, wchar_t *to, int to_len, Status *state ); extern int _XimLcctstoutf8( XIM im, char *from, int from_len, char *to, int to_len, Status *state ); extern char _XimGetMyEndian( void ); extern int _XimCheckDataSize( XPointer buf, int len ); extern void _XimSetHeader( XPointer buf, CARD8 major_opcode, CARD8 minor_opcode, INT16 *len ); extern Bool _XimSync( Xim im, Xic ic ); extern int _XimProtoMbLookupString( XIC xic, XKeyEvent *ev, char *buffer, int bytes, KeySym *keysym, Status *state ); extern int _XimProtoWcLookupString( XIC xic, XKeyEvent *ev, wchar_t *buffer, int bytes, KeySym *keysym, Status *state ); extern int _XimProtoUtf8LookupString( XIC xic, XKeyEvent *ev, char *buffer, int bytes, KeySym *keysym, Status *state ); extern void _XimRegisterFilter( Xic ic ); extern void _XimUnregisterFilter( Xic ic ); extern void _XimReregisterFilter( Xic ic ); extern Status _XimProtoEventToWire( XEvent *re, xEvent *event, Bool sw ); extern Bool _XimProtoWireToEvent( XEvent *re, xEvent *event, Bool sw ); #ifdef EXT_FORWARD extern Bool _XimExtForwardKeyEvent( Xic ic, XKeyEvent *ev, Bool sync ); #endif extern int _XimLookupMBText( Xic ic, XKeyEvent *event, char *buffer, int nbytes, KeySym *keysym, XComposeStatus *status ); extern int _XimLookupWCText( Xic ic, XKeyEvent *event, wchar_t *buffer, int nbytes, KeySym *keysym, XComposeStatus *status ); extern int _XimLookupUTF8Text( Xic ic, XKeyEvent *event, char *buffer, int nbytes, KeySym *keysym, XComposeStatus *status ); extern EVENTMASK _XimGetWindowEventmask( Xic ic ); extern Xic _XimICOfXICID( Xim im, XICID icid ); extern void _XimResetIMInstantiateCallback( Xim xim ); extern Bool _XimRegisterIMInstantiateCallback( XLCd lcd, Display *display, XrmDatabase rdb, char *res_name, char *res_class, XIDProc callback, XPointer client_data ); extern Bool _XimUnRegisterIMInstantiateCallback( XLCd lcd, Display *display, XrmDatabase rdb, char *res_name, char *res_class, XIDProc callback, XPointer client_data ); extern void _XimFreeCommitInfo( Xic ic ); extern Bool _XimConnect( Xim im ); extern Bool _XimShutdown( Xim im ); extern Bool _XimWrite( Xim im, INT16 len, XPointer data ); extern Bool _XimRead( Xim im, INT16 *len, XPointer data, int data_len, Bool (*predicate)( Xim, INT16, XPointer, XPointer ), XPointer arg ); extern void _XimFlush( Xim im ); extern Bool _XimFilterWaitEvent( Xim im ); extern void _XimProcError( Xim im, Xic ic, XPointer data ); #ifdef EXT_MOVE extern CARD32 _XimExtenArgCheck( XIMArg *arg ); #endif extern Bool _XimCbDispatch( Xim im, INT16 len, XPointer data, XPointer call_data ); extern Bool _XimLocalFilter( Display *d, Window w, XEvent *ev, XPointer client_data ); extern XIMResourceList _XimGetResourceListRecByQuark( XIMResourceList res_list, unsigned int list_num, XrmQuark quark ); extern Bool _XimReconnectModeCreateIC( Xic ic ); extern char *_XimLocalSetICValues( XIC ic, XIMArg *values ); extern char * _XimLocalGetICValues( XIC ic, XIMArg *values ); extern int _XimLocalMbLookupString( XIC ic, XKeyEvent *ev, char *buffer, int bytes, KeySym *keysym, Status *status ); extern int _XimLocalWcLookupString( XIC ic, XKeyEvent *ev, wchar_t *buffer, int bytes, KeySym *keysym, Status *status ); extern int _XimLocalUtf8LookupString( XIC ic, XKeyEvent *ev, char *buffer, int bytes, KeySym *keysym, Status *status ); extern Bool _XimThaiFilter( Display *d, Window w, XEvent *ev, XPointer client_data ); extern XIC _XimThaiCreateIC( XIM im, XIMArg *values ); extern Status _XimThaiCloseIM( XIM xim ); #ifdef XIM_CONNECTABLE extern void _XimSetProtoResource( Xim im ); extern Bool _XimConnectServer( Xim im ); extern Bool _XimDelayModeSetAttr( Xim im ); extern void _XimServerReconectableDestroy( void ); extern Bool _XimReCreateIC( Xic ic ); extern Bool _XimEncodeSavedIMATTRIBUTE( Xim im, XIMResourceList res_list, unsigned int res_num, int *idx, char *buf, int size, int *ret_len, XPointer top, unsigned long mode ); extern Bool _XimEncodeSavedICATTRIBUTE( Xic ic, XIMResourceList res_list, unsigned int res_num, int *idx, char *buf, int size, int *ret_len, XPointer top, unsigned long mode ); #endif extern Bool _XimRegisterDispatcher( Xim im, Bool (*callback)( Xim, INT16, XPointer, XPointer ), XPointer call_data); extern Bool _XimRespSyncReply( Xic ic, BITMASK16 mode); #endif /* _XIMINT_H */ e( Xim im ); extern void _XimProtoIMFree( Xim im ); extern char * _XimSetIMValueData( Xim im, XPointer top, XIMArg *arg, XIMResourceList res_list, unsigned int list_num ); extern char * _XimGetIMValueData( Xim im, XPointer top, XIMArg *arg, XIMResourceList res_list, unsigned int list_num ); extern char * _XimSetICValueData( XiclibX11-1.6.3/src/DestSubs.c000064401431060000012000000026421247741723500155510ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XDestroySubwindows( register Display *dpy, Window win) { register xResourceReq *req; LockDisplay(dpy); GetResReq (DestroySubwindows,win, req); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/Geom.c000064401431060000012000000062641247741723500147100ustar00alancstaff00002660200006 /* Copyright 1985, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xutil.h" /* * This routine given a user supplied positional argument and a default * argument (fully qualified) will return the position the window should take * returns 0 if there was some problem, else the position bitmask. */ int XGeometry ( Display *dpy, /* user's display connection */ int screen, /* screen on which to do computation */ _Xconst char *pos, /* user provided geometry spec */ _Xconst char *def, /* default geometry spec for window */ unsigned int bwidth, /* border width */ unsigned int fwidth, /* size of position units */ unsigned int fheight, int xadd, /* any additional interior space */ int yadd, register int *x, /* always set on successful RETURN */ register int *y, /* always set on successful RETURN */ register int *width, /* always set on successful RETURN */ register int *height) /* always set on successful RETURN */ { int px, py; /* returned values from parse */ unsigned int pwidth, pheight; /* returned values from parse */ int dx, dy; /* default values from parse */ unsigned int dwidth, dheight; /* default values from parse */ int pmask, dmask; /* values back from parse */ pmask = XParseGeometry(pos, &px, &py, &pwidth, &pheight); dmask = XParseGeometry(def, &dx, &dy, &dwidth, &dheight); /* set default values */ *x = (dmask & XNegative) ? DisplayWidth(dpy, screen) + dx - dwidth * fwidth - 2 * bwidth - xadd : dx; *y = (dmask & YNegative) ? DisplayHeight(dpy, screen) + dy - dheight * fheight - 2 * bwidth - yadd : dy; *width = dwidth; *height = dheight; if (pmask & WidthValue) *width = pwidth; if (pmask & HeightValue) *height = pheight; if (pmask & XValue) *x = (pmask & XNegative) ? DisplayWidth(dpy, screen) + px - *width * fwidth - 2 * bwidth - xadd : px; if (pmask & YValue) *y = (pmask & YNegative) ? DisplayHeight(dpy, screen) + py - *height * fheight - 2 * bwidth - yadd : py; return (pmask); } libX11-1.6.3/src/UnmapWin.c000064401431060000012000000026271247741723500155560ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XUnmapWindow ( register Display *dpy, Window w) { register xResourceReq *req; LockDisplay(dpy); GetResReq(UnmapWindow, w, req); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/QuTree.c000064401431060000012000000041411247741723500152160ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" Status XQueryTree ( register Display *dpy, Window w, Window *root, /* RETURN */ Window *parent, /* RETURN */ Window **children, /* RETURN */ unsigned int *nchildren) /* RETURN */ { unsigned long nbytes; xQueryTreeReply rep; register xResourceReq *req; LockDisplay(dpy); GetResReq(QueryTree, w, req); if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { UnlockDisplay(dpy); SyncHandle(); return (0); } *children = (Window *) NULL; if (rep.nChildren != 0) { nbytes = rep.nChildren * sizeof(Window); *children = Xmalloc(nbytes); if (! *children) { _XEatDataWords(dpy, rep.length); UnlockDisplay(dpy); SyncHandle(); return (0); } nbytes = rep.nChildren << 2; _XRead32 (dpy, (long *) *children, nbytes); } *parent = rep.parent; *root = rep.root; *nchildren = rep.nChildren; UnlockDisplay(dpy); SyncHandle(); return (1); } libX11-1.6.3/src/config.h.in000064401431060000012000000126251247741725300156760ustar00alancstaff00002660200006/* src/config.h.in. Generated from configure.ac by autoheader. */ /* Define to 1 if `struct sockaddr_in' has a `sin_len' member */ #undef BSD44SOCKETS /* Include compose table cache support */ #undef COMPOSECACHE /* Has getresuid() & getresgid() functions */ #undef HASGETRESUID /* Has issetugid() function */ #undef HASSETUGID /* Has shm*() functions */ #undef HAS_SHM /* Define to 1 if you have the `authdes_create' function. */ #undef HAVE_AUTHDES_CREATE /* Define to 1 if you have the `authdes_seccreate' function. */ #undef HAVE_AUTHDES_SECCREATE /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Use dlopen to load shared libraries */ #undef HAVE_DLOPEN /* Define to 1 if you have the header file. */ #undef HAVE_DL_H /* Define to 1 if you have the `getpagesize' function. */ #undef HAVE_GETPAGESIZE /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* launchd support available */ #undef HAVE_LAUNCHD /* Define to 1 if you have the `ws2_32' library (-lws2_32). */ #undef HAVE_LIBWS2_32 /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have a working `mmap' system call. */ #undef HAVE_MMAP /* Define to 1 if you have the `seteuid' function. */ #undef HAVE_SETEUID /* Use shl_load to load shared libraries */ #undef HAVE_SHL_LOAD /* Define to 1 if the system has the type `socklen_t'. */ #undef HAVE_SOCKLEN_T /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strtol' function. */ #undef HAVE_STRTOL /* Define to 1 if you have the header file. */ #undef HAVE_SYS_PARAM_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SELECT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Support IPv6 for TCP connections */ #undef IPv6 /* Support os-specific local connections */ #undef LOCALCONN /* preference sorted list of transport types to try for local connections */ #undef LOCAL_TRANSPORT_LIST /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Disable XLOCALEDIR environment variable */ #undef NO_XLOCALEDIR /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Major version of this package */ #undef PACKAGE_VERSION_MAJOR /* Minor version of this package */ #undef PACKAGE_VERSION_MINOR /* Patch version of this package */ #undef PACKAGE_VERSION_PATCHLEVEL /* Support Secure RPC ("SUN-DES-1") authentication for X11 clients */ #undef SECURE_RPC /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Support TCP socket connections */ #undef TCPCONN /* launchd support available */ #undef TRANS_REOPEN /* Support UNIX socket connections */ #undef UNIXCONN /* Split some i18n functions into loadable modules */ #undef USE_DYNAMIC_LC /* Use the X cursor library to load cursors */ #undef USE_DYNAMIC_XCURSOR /* poll() function is available */ #undef USE_POLL /* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable threading extensions on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif /* Version number of package */ #undef VERSION /* Location of libX11 data */ #undef X11_DATADIR /* Location of libX11 library data */ #undef X11_LIBDIR /* Include support for XCMS */ #undef XCMS /* Location of error message database */ #undef XERRORDB /* Enable XF86BIGFONT extension */ #undef XF86BIGFONT /* Use XKB */ #undef XKB /* Location of keysym database */ #undef XKEYSYMDB /* support for X Locales */ #undef XLOCALE /* Location of libX11 locale data */ #undef XLOCALEDATADIR /* Location of libX11 locale data */ #undef XLOCALEDIR /* Location of libX11 locale libraries */ #undef XLOCALELIBDIR /* Whether libX11 is compiled with thread support */ #undef XTHREADS /* Whether libX11 needs to use MT safe API's */ #undef XUSE_MTSAFE_API /* Define to 1 if on MINIX. */ #undef _MINIX /* Define to 2 if the system does not provide POSIX.1 features except with this defined. */ #undef _POSIX_1_SOURCE /* Define to 1 if you need to in order for `stat' and other things to work. */ #undef _POSIX_SOURCE /* Defined if needed to expose struct msghdr.msg_control */ #undef _XOPEN_SOURCE #undef HAVE_INTTYPES_H /* launchd support available */ #undef HAVE_LAUNCHD /* Define to 1 if you have thelibX11-1.6.3/src/SetDashes.c000064401431060000012000000032571247741723500157030ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XSetDashes ( register Display *dpy, GC gc, int dash_offset, _Xconst char *list, int n) { register xSetDashesReq *req; LockDisplay(dpy); GetReq (SetDashes,req); req->gc = gc->gid; req->dashOffset = gc->values.dash_offset = dash_offset; req->nDashes = n; req->length += (n+3)>>2; gc->dashes = 1; gc->dirty &= ~(GCDashList | GCDashOffset); Data (dpy, list, (long)n); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/SetLStyle.c000064401431060000012000000035411247741723500157040ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XSetLineAttributes( register Display *dpy, GC gc, unsigned int linewidth, /* CARD16 */ int linestyle, int capstyle, int joinstyle) { XGCValues *gv = &gc->values; LockDisplay(dpy); if (linewidth != gv->line_width) { gv->line_width = linewidth; gc->dirty |= GCLineWidth; } if (linestyle != gv->line_style) { gv->line_style = linestyle; gc->dirty |= GCLineStyle; } if (capstyle != gv->cap_style) { gv->cap_style = capstyle; gc->dirty |= GCCapStyle; } if (joinstyle != gv->join_style) { gv->join_style = joinstyle; gc->dirty |= GCJoinStyle; } UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/FilterEv.c000064401431060000012000000064571247741723500155450ustar00alancstaff00002660200006 /* * Copyright 1990, 1991 by OMRON Corporation * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name OMRON not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. OMRON makes no representations * about the suitability of this software for any purpose. It is provided * "as is" without express or implied warranty. * * OMRON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL OMRON BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. * * Author: Seiji Kuwari OMRON Corporation * kuwa@omron.co.jp * kuwa%omron.co.jp@uunet.uu.net */ /* Copyright 1991, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #else #define XLOCALE 1 #endif #include "Xlibint.h" #if XLOCALE #include "Xlcint.h" #endif extern long const _Xevent_to_mask[]; /* * Look up if there is a specified filter for the event. */ Bool XFilterEvent( XEvent *ev, Window window) { #if XLOCALE XFilterEventList p; Window win; long mask; Bool ret; if (window) win = window; else win = ev->xany.window; if (ev->type >= LASTEvent) mask = 0; else mask = _Xevent_to_mask[ev->type]; LockDisplay(ev->xany.display); for (p = ev->xany.display->im_filters; p != NULL; p = p->next) { if (win == p->window) { if ((mask & p->event_mask) || (ev->type >= p->start_type && ev->type <= p->end_type)) { UnlockDisplay(ev->xany.display); ret = (*(p->filter))(ev->xany.display, p->window, ev, p->client_data); return(ret); } } } UnlockDisplay(ev->xany.display); #endif return(False); } libX11-1.6.3/src/DrRect.c000064401431060000012000000047731247741723500152070ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" /* precompute the maximum size of batching request allowed */ #define wsize (SIZEOF(xPolyRectangleReq) + WRCTSPERBATCH * SIZEOF(xRectangle)) #define zsize (SIZEOF(xPolyRectangleReq) + ZRCTSPERBATCH * SIZEOF(xRectangle)) int XDrawRectangle( register Display *dpy, Drawable d, GC gc, int x, int y, /* INT16 */ unsigned int width, unsigned int height) /* CARD16 */ { xRectangle *rect; LockDisplay(dpy); FlushGC(dpy, gc); { register xPolyRectangleReq *req = (xPolyRectangleReq *) dpy->last_req; /* if same as previous request, with same drawable, batch requests */ if ( (req->reqType == X_PolyRectangle) && (req->drawable == d) && (req->gc == gc->gid) && ((dpy->bufptr + SIZEOF(xRectangle)) <= dpy->bufmax) && (((char *)dpy->bufptr - (char *)req) < (gc->values.line_width ? wsize : zsize)) ) { req->length += SIZEOF(xRectangle) >> 2; rect = (xRectangle *) dpy->bufptr; dpy->bufptr += SIZEOF(xRectangle); } else { GetReqExtra(PolyRectangle, SIZEOF(xRectangle), req); req->drawable = d; req->gc = gc->gid; rect = (xRectangle *) NEXTPTR(req,xPolyRectangleReq); } rect->x = x; rect->y = y; rect->width = width; rect->height = height; } UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/CirWinUp.c000064401431060000012000000027301247741723500155130ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XCirculateSubwindowsUp( register Display *dpy, Window w) { register xCirculateWindowReq *req; LockDisplay(dpy); GetReq(CirculateWindow, req); req->window = w; req->direction = RaiseLowest; UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/ChPntCon.c000064401431060000012000000032571247741723500154740ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XChangePointerControl( register Display *dpy, Bool do_acc, Bool do_thresh, int acc_numerator, int acc_denominator, int threshold) { register xChangePointerControlReq *req; LockDisplay(dpy); GetReq(ChangePointerControl, req); req->doAccel = do_acc; req->doThresh = do_thresh; req->accelNum = acc_numerator; req->accelDenum = acc_denominator; req->threshold = threshold; UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/RdBitF.c000064401431060000012000000156331247741723500151330ustar00alancstaff00002660200006/* Copyright 1987, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ /* * Code to read bitmaps from disk files. Interprets * data from X10 and X11 bitmap files and creates * Pixmap representations of files. Returns Pixmap * ID and specifics about image. * * Modified for speedup by Jim Becker, changed image * data parsing logic (removed some fscanf()s). * Aug 5, 1988 * * Note that this file and ../Xmu/RdBitF.c look very similar.... Keep them * that way (but don't use common source code so that people can have one * without the other). */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include #include "Xutil.h" #include #include #define MAX_SIZE 255 /* shared data for the image read/parse logic */ static const short hexTable[256] = { ['0'] = 0, ['1'] = 1, ['2'] = 2, ['3'] = 3, ['4'] = 4, ['5'] = 5, ['6'] = 6, ['7'] = 7, ['8'] = 8, ['9'] = 9, ['A'] = 10, ['B'] = 11, ['C'] = 12, ['D'] = 13, ['E'] = 14, ['F'] = 15, ['a'] = 10, ['b'] = 11, ['c'] = 12, ['d'] = 13, ['e'] = 14, ['f'] = 15, [' '] = -1, [','] = -1, ['}'] = -1, ['\n'] = -1, ['\t'] = -1 }; /* * read next hex value in the input stream, return -1 if EOF */ static int NextInt ( FILE *fstream) { int ch; int value = 0; int gotone = 0; int done = 0; /* loop, accumulate hex value until find delimiter */ /* skip any initial delimiters found in read stream */ while (!done) { ch = getc(fstream); if (ch == EOF) { value = -1; done++; } else { /* trim high bits, check type and accumulate */ ch &= 0xff; if (isascii(ch) && isxdigit(ch)) { value = (value << 4) + hexTable[ch]; gotone++; } else if ((hexTable[ch]) < 0 && gotone) done++; } } return value; } int XReadBitmapFileData ( _Xconst char *filename, unsigned int *width, /* RETURNED */ unsigned int *height, /* RETURNED */ unsigned char **data, /* RETURNED */ int *x_hot, /* RETURNED */ int *y_hot) /* RETURNED */ { FILE *fstream; /* handle on file */ unsigned char *bits = NULL; /* working variable */ char line[MAX_SIZE]; /* input line from file */ int size; /* number of bytes of data */ char name_and_type[MAX_SIZE]; /* an input line */ char *type; /* for parsing */ int value; /* from an input line */ int version10p; /* boolean, old format */ int padding; /* to handle alignment */ int bytes_per_line; /* per scanline of data */ unsigned int ww = 0; /* width */ unsigned int hh = 0; /* height */ int hx = -1; /* x hotspot */ int hy = -1; /* y hotspot */ #ifdef __UNIXOS2__ filename = __XOS2RedirRoot(filename); #endif if (!(fstream = fopen(filename, "r"))) return BitmapOpenFailed; /* error cleanup and return macro */ #define RETURN(code) \ { Xfree (bits); fclose (fstream); return code; } while (fgets(line, MAX_SIZE, fstream)) { if (strlen(line) == MAX_SIZE-1) RETURN (BitmapFileInvalid); if (sscanf(line,"#define %s %d",name_and_type,&value) == 2) { if (!(type = strrchr(name_and_type, '_'))) type = name_and_type; else type++; if (!strcmp("width", type)) ww = (unsigned int) value; if (!strcmp("height", type)) hh = (unsigned int) value; if (!strcmp("hot", type)) { if (type-- == name_and_type || type-- == name_and_type) continue; if (!strcmp("x_hot", type)) hx = value; if (!strcmp("y_hot", type)) hy = value; } continue; } if (sscanf(line, "static short %s = {", name_and_type) == 1) version10p = 1; else if (sscanf(line,"static unsigned char %s = {",name_and_type) == 1) version10p = 0; else if (sscanf(line, "static char %s = {", name_and_type) == 1) version10p = 0; else continue; if (!(type = strrchr(name_and_type, '_'))) type = name_and_type; else type++; if (strcmp("bits[]", type)) continue; if (!ww || !hh) RETURN (BitmapFileInvalid); if ((ww % 16) && ((ww % 16) < 9) && version10p) padding = 1; else padding = 0; bytes_per_line = (ww+7)/8 + padding; size = bytes_per_line * hh; bits = Xmalloc (size); if (!bits) RETURN (BitmapNoMemory); if (version10p) { unsigned char *ptr; int bytes; for (bytes=0, ptr=bits; bytes> 8; } } else { unsigned char *ptr; int bytes; for (bytes=0, ptr=bits; bytes #endif #include "Xlibint.h" int XSetStipple ( register Display *dpy, GC gc, Pixmap stipple) { LockDisplay(dpy); /* always update, since client may have changed pixmap contents */ gc->values.stipple = stipple; gc->dirty |= GCStipple; _XFlushGCCache(dpy, gc); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/IntAtom.c000064401431060000012000000162451247741723500153740ustar00alancstaff00002660200006/* Copyright 1986, 1990, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xintatom.h" #define HASH(sig) ((sig) & (TABLESIZE-1)) #define REHASHVAL(sig) ((((sig) % (TABLESIZE-3)) + 2) | 1) #define REHASH(idx,rehash) ((idx + rehash) & (TABLESIZE-1)) void _XFreeAtomTable(Display *dpy) { register Entry *table; register int i; register Entry e; if (dpy->atoms) { table = dpy->atoms->table; for (i = TABLESIZE; --i >= 0; ) { if ((e = *table++) && (e != RESERVED)) Xfree(e); } Xfree(dpy->atoms); } } static Atom _XInternAtom( Display *dpy, _Xconst char *name, Bool onlyIfExists, unsigned long *psig, int *pidx, int *pn) { register AtomTable *atoms; register char *s1, c, *s2; register unsigned long sig; register int idx = 0, i; Entry e; int n, firstidx, rehash = 0; xInternAtomReq *req; /* look in the cache first */ if (!(atoms = dpy->atoms)) { dpy->atoms = atoms = Xcalloc(1, sizeof(AtomTable)); dpy->free_funcs->atoms = _XFreeAtomTable; } sig = 0; for (s1 = (char *)name; (c = *s1++); ) sig += c; n = s1 - (char *)name - 1; if (atoms) { firstidx = idx = HASH(sig); while ((e = atoms->table[idx])) { if (e != RESERVED && e->sig == sig) { for (i = n, s1 = (char *)name, s2 = EntryName(e); --i >= 0; ) { if (*s1++ != *s2++) goto nomatch; } if (!*s2) return e->atom; } nomatch: if (idx == firstidx) rehash = REHASHVAL(sig); idx = REHASH(idx, rehash); if (idx == firstidx) break; } } *psig = sig; *pidx = idx; if (atoms && !atoms->table[idx]) atoms->table[idx] = RESERVED; /* reserve slot */ *pn = n; /* not found, go to the server */ GetReq(InternAtom, req); req->nbytes = n; req->onlyIfExists = onlyIfExists; req->length += (n+3)>>2; Data(dpy, name, n); return None; } void _XUpdateAtomCache( Display *dpy, const char *name, Atom atom, unsigned long sig, int idx, int n) { Entry e, oe; register char *s1; register char c; int firstidx, rehash; if (!dpy->atoms) { if (idx < 0) { dpy->atoms = Xcalloc(1, sizeof(AtomTable)); dpy->free_funcs->atoms = _XFreeAtomTable; } if (!dpy->atoms) return; } if (!sig) { for (s1 = (char *)name; (c = *s1++); ) sig += c; n = s1 - (char *)name - 1; if (idx < 0) { firstidx = idx = HASH(sig); if (dpy->atoms->table[idx]) { rehash = REHASHVAL(sig); do idx = REHASH(idx, rehash); while (idx != firstidx && dpy->atoms->table[idx]); } } } e = Xmalloc(sizeof(EntryRec) + n + 1); if (e) { e->sig = sig; e->atom = atom; strcpy(EntryName(e), name); if ((oe = dpy->atoms->table[idx]) && (oe != RESERVED)) Xfree(oe); dpy->atoms->table[idx] = e; } } Atom XInternAtom ( Display *dpy, const char *name, Bool onlyIfExists) { Atom atom; unsigned long sig; int idx, n; xInternAtomReply rep; if (!name) name = ""; LockDisplay(dpy); if ((atom = _XInternAtom(dpy, name, onlyIfExists, &sig, &idx, &n))) { UnlockDisplay(dpy); return atom; } if (dpy->atoms && dpy->atoms->table[idx] == RESERVED) dpy->atoms->table[idx] = NULL; /* unreserve slot */ if (_XReply (dpy, (xReply *)&rep, 0, xTrue)) { if ((atom = rep.atom)) _XUpdateAtomCache(dpy, name, atom, sig, idx, n); } UnlockDisplay(dpy); SyncHandle(); return (rep.atom); } typedef struct { unsigned long start_seq; unsigned long stop_seq; char **names; Atom *atoms; int count; Status status; } _XIntAtomState; static Bool _XIntAtomHandler( register Display *dpy, register xReply *rep, char *buf, int len, XPointer data) { register _XIntAtomState *state; register int i, idx = 0; xInternAtomReply replbuf; register xInternAtomReply *repl; state = (_XIntAtomState *)data; if (dpy->last_request_read < state->start_seq || dpy->last_request_read > state->stop_seq) return False; for (i = 0; i < state->count; i++) { if (state->atoms[i] & 0x80000000) { idx = ~state->atoms[i]; state->atoms[i] = None; break; } } if (i >= state->count) return False; if (rep->generic.type == X_Error) { state->status = 0; return False; } repl = (xInternAtomReply *) _XGetAsyncReply(dpy, (char *)&replbuf, rep, buf, len, (SIZEOF(xInternAtomReply) - SIZEOF(xReply)) >> 2, True); if ((state->atoms[i] = repl->atom)) _XUpdateAtomCache(dpy, state->names[i], (Atom) repl->atom, (unsigned long)0, idx, 0); return True; } Status XInternAtoms ( Display *dpy, char **names, int count, Bool onlyIfExists, Atom *atoms_return) { int i, idx, n, tidx; unsigned long sig; _XAsyncHandler async; _XIntAtomState async_state; int missed = -1; xInternAtomReply rep; LockDisplay(dpy); async_state.start_seq = dpy->request + 1; async_state.atoms = atoms_return; async_state.names = names; async_state.count = count - 1; async_state.status = 1; async.next = dpy->async_handlers; async.handler = _XIntAtomHandler; async.data = (XPointer)&async_state; dpy->async_handlers = &async; for (i = 0; i < count; i++) { if (!(atoms_return[i] = _XInternAtom(dpy, names[i], onlyIfExists, &sig, &idx, &n))) { missed = i; atoms_return[i] = ~((Atom)idx); async_state.stop_seq = dpy->request; } } if (missed >= 0) { if (dpy->atoms) { /* unreserve anything we just reserved */ for (i = 0; i < count; i++) { if (atoms_return[i] & 0x80000000) { tidx = ~atoms_return[i]; if (dpy->atoms->table[tidx] == RESERVED) dpy->atoms->table[tidx] = NULL; } } } if (_XReply (dpy, (xReply *)&rep, 0, xTrue)) { if ((atoms_return[missed] = rep.atom)) _XUpdateAtomCache(dpy, names[missed], (Atom) rep.atom, sig, idx, n); } else { atoms_return[missed] = None; async_state.status = 0; } } DeqAsyncHandler(dpy, &async); UnlockDisplay(dpy); if (missed >= 0) SyncHandle(); return async_state.status; } libX11-1.6.3/src/OpenDis.c000064401431060000012000000457071247741723500153670ustar00alancstaff00002660200006/* Copyright 1985, 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xxcbint.h" #include #include #include #include "Xintconn.h" #ifdef XKB #include "XKBlib.h" #endif /* XKB */ #ifdef XTHREADS #include "locking.h" int (*_XInitDisplayLock_fn)(Display *dpy) = NULL; void (*_XFreeDisplayLock_fn)(Display *dpy) = NULL; #define InitDisplayLock(d) (_XInitDisplayLock_fn ? (*_XInitDisplayLock_fn)(d) : Success) #define FreeDisplayLock(d) if (_XFreeDisplayLock_fn) (*_XFreeDisplayLock_fn)(d) #else #define InitDisplayLock(dis) Success #define FreeDisplayLock(dis) #endif /* XTHREADS */ static xReq _dummy_request = { 0, 0, 0 }; static void OutOfMemory(Display *dpy); /* * Connects to a server, creates a Display object and returns a pointer to * the newly created Display back to the caller. */ Display * XOpenDisplay ( register _Xconst char *display) { register Display *dpy; /* New Display object being created. */ register int i; int j, k; /* random iterator indexes */ char *display_name; /* pointer to display name */ char *setup = NULL; /* memory allocated at startup */ int iscreen; /* screen number */ xConnSetupPrefix prefix; /* prefix information */ int vendorlen; /* length of vendor string */ union { xConnSetup *setup; char *failure; char *vendor; xPixmapFormat *sf; xWindowRoot *rp; xDepth *dp; xVisualType *vp; } u; /* proto data returned from server */ long setuplength; /* number of bytes in setup message */ long usedbytes = 0; /* number of bytes we have processed */ unsigned long mask; long int conn_buf_size; char *xlib_buffer_size; /* * If the display specifier string supplied as an argument to this * routine is NULL or a pointer to NULL, read the DISPLAY variable. */ if (display == NULL || *display == '\0') { if ((display_name = getenv("DISPLAY")) == NULL) { /* Oops! No DISPLAY environment variable - error. */ return(NULL); } } else { /* Display is non-NULL, copy the pointer */ display_name = (char *)display; } /* * Set the default error handlers. This allows the global variables to * default to NULL for use with shared libraries. */ if (_XErrorFunction == NULL) (void) XSetErrorHandler (NULL); if (_XIOErrorFunction == NULL) (void) XSetIOErrorHandler (NULL); /* * Attempt to allocate a display structure. Return NULL if allocation fails. */ if ((dpy = Xcalloc(1, sizeof(Display))) == NULL) { return(NULL); } if ((dpy->display_name = strdup(display_name)) == NULL) { OutOfMemory(dpy); return(NULL); } /* * Call the Connect routine to get the transport connection object. * If NULL is returned, the connection failed. */ if(!_XConnectXCB(dpy, display, &iscreen)) { OutOfMemory(dpy); return NULL; } /* Initialize as much of the display structure as we can. * Initialize pointers to NULL so that XFreeDisplayStructure will * work if we run out of memory before we finish initializing. */ dpy->keysyms = (KeySym *) NULL; dpy->modifiermap = NULL; dpy->lock_meaning = NoSymbol; dpy->keysyms_per_keycode = 0; dpy->xdefaults = (char *)NULL; dpy->scratch_length = 0L; dpy->scratch_buffer = NULL; dpy->key_bindings = NULL; dpy->ext_procs = (_XExtension *)NULL; dpy->ext_data = (XExtData *)NULL; dpy->ext_number = 0; dpy->event_vec[X_Error] = _XUnknownWireEvent; dpy->event_vec[X_Reply] = _XUnknownWireEvent; dpy->wire_vec[X_Error] = _XUnknownNativeEvent; dpy->wire_vec[X_Reply] = _XUnknownNativeEvent; for (i = KeyPress; i < LASTEvent; i++) { dpy->event_vec[i] = _XWireToEvent; dpy->wire_vec[i] = NULL; } for (i = LASTEvent; i < 128; i++) { dpy->event_vec[i] = _XUnknownWireEvent; dpy->wire_vec[i] = _XUnknownNativeEvent; } dpy->resource_id = 0; dpy->db = (struct _XrmHashBucketRec *)NULL; dpy->cursor_font = None; dpy->flags = 0; dpy->async_handlers = NULL; dpy->screens = NULL; dpy->vendor = NULL; dpy->buffer = NULL; dpy->atoms = NULL; dpy->error_vec = NULL; dpy->context_db = NULL; dpy->free_funcs = NULL; dpy->pixmap_format = NULL; dpy->cms.clientCmaps = NULL; dpy->cms.defaultCCCs = NULL; dpy->cms.perVisualIntensityMaps = NULL; dpy->im_filters = NULL; dpy->bigreq_size = 0; dpy->lock = NULL; dpy->lock_fns = NULL; dpy->qfree = NULL; dpy->next_event_serial_num = 1; dpy->im_fd_info = NULL; dpy->im_fd_length = 0; dpy->conn_watchers = NULL; dpy->watcher_count = 0; dpy->filedes = NULL; dpy->flushes = NULL; dpy->xcmisc_opcode = 0; dpy->xkb_info = NULL; /* * Setup other information in this display structure. */ dpy->vnumber = X_PROTOCOL; dpy->resource_alloc = _XAllocID; dpy->idlist_alloc = _XAllocIDs; dpy->synchandler = NULL; dpy->savedsynchandler = NULL; dpy->request = 0; dpy->last_request_read = 0; dpy->default_screen = iscreen; /* Value returned by ConnectDisplay */ dpy->last_req = (char *)&_dummy_request; /* Initialize the display lock */ if (InitDisplayLock(dpy) != 0) { OutOfMemory (dpy); return(NULL); } if (!_XPollfdCacheInit(dpy)) { OutOfMemory (dpy); return(NULL); } /* Set up the output buffers. */ #ifndef XLIBDEFAULTBUFSIZE #define XLIBDEFAULTBUFSIZE 16384 /* 16k */ #endif #ifndef XLIBMINBUFSIZE #define XLIBMINBUFSIZE BUFSIZE /* old default buffer size */ #endif xlib_buffer_size = getenv("XLIBBUFFERSIZE"); #ifdef __sun /* Backwards compatibility for old Solaris libX11 name */ if (xlib_buffer_size == NULL) xlib_buffer_size = getenv("XSUNBUFFERSIZE"); #endif if (xlib_buffer_size == NULL) conn_buf_size = XLIBDEFAULTBUFSIZE; else conn_buf_size = 1024 * strtol(xlib_buffer_size, NULL, 10); if (conn_buf_size < XLIBMINBUFSIZE) conn_buf_size = XLIBMINBUFSIZE; if ((dpy->bufptr = dpy->buffer = Xcalloc(1, conn_buf_size)) == NULL) { OutOfMemory (dpy); return(NULL); } dpy->xcb->real_bufmax = dpy->buffer + conn_buf_size; dpy->bufmax = dpy->buffer; /* Set up the input event queue and input event queue parameters. */ dpy->head = dpy->tail = NULL; dpy->qlen = 0; /* Set up free-function record */ if ((dpy->free_funcs = Xcalloc(1, sizeof(_XFreeFuncRec))) == NULL) { OutOfMemory (dpy); return(NULL); } { const struct xcb_setup_t *xcbsetup = xcb_get_setup(dpy->xcb->connection); memcpy(&prefix, xcbsetup, sizeof(prefix)); setuplength = prefix.length << 2; setup = (char *) xcbsetup; setup += SIZEOF(xConnSetupPrefix); u.setup = (xConnSetup *) setup; } /* * Check if the reply was long enough to get any information out of it. */ usedbytes = sz_xConnSetup; if (setuplength < usedbytes ) { fprintf (stderr, "Xlib: Broken initial reply: Too short (%ld)\n", setuplength); OutOfMemory(dpy); return (NULL); } /* * We succeeded at authorization, so let us move the data into * the display structure. */ dpy->proto_major_version= prefix.majorVersion; dpy->proto_minor_version= prefix.minorVersion; dpy->release = u.setup->release; dpy->resource_base = u.setup->ridBase; dpy->resource_mask = u.setup->ridMask; dpy->min_keycode = u.setup->minKeyCode; dpy->max_keycode = u.setup->maxKeyCode; dpy->motion_buffer = u.setup->motionBufferSize; dpy->nformats = u.setup->numFormats; dpy->nscreens = u.setup->numRoots; dpy->byte_order = u.setup->imageByteOrder; dpy->bitmap_unit = u.setup->bitmapScanlineUnit; dpy->bitmap_pad = u.setup->bitmapScanlinePad; dpy->bitmap_bit_order = u.setup->bitmapBitOrder; dpy->max_request_size = u.setup->maxRequestSize; mask = dpy->resource_mask; dpy->resource_shift = 0; if (!mask) { fprintf (stderr, "Xlib: connection to \"%s\" invalid setup\n", dpy->display_name); OutOfMemory(dpy); return (NULL); } while (!(mask & 1)) { dpy->resource_shift++; mask = mask >> 1; } dpy->resource_max = (dpy->resource_mask >> dpy->resource_shift) - 5; /* * now extract the vendor string... String must be null terminated, * padded to multiple of 4 bytes. */ /* Check for a sane vendor string length */ if (u.setup->nbytesVendor > 256) { OutOfMemory(dpy); return (NULL); } dpy->vendor = Xmalloc(u.setup->nbytesVendor + 1); if (dpy->vendor == NULL) { OutOfMemory(dpy); return (NULL); } vendorlen = u.setup->nbytesVendor; /* * validate setup length */ usedbytes += (vendorlen + 3) & ~3; if (setuplength < usedbytes) { fprintf (stderr, "Xlib: Broken initial reply: Too short (%ld)\n", setuplength); OutOfMemory(dpy); return (NULL); } u.setup = (xConnSetup *) (((char *) u.setup) + sz_xConnSetup); (void) strncpy(dpy->vendor, u.vendor, vendorlen); dpy->vendor[vendorlen] = '\0'; vendorlen = (vendorlen + 3) & ~3; /* round up */ u.vendor += vendorlen; /* * Now iterate down setup information..... */ dpy->pixmap_format = Xcalloc(dpy->nformats, sizeof(ScreenFormat)); if (dpy->pixmap_format == NULL) { OutOfMemory (dpy); return(NULL); } /* * First decode the Z axis Screen format information. */ usedbytes += dpy->nformats * sz_xPixmapFormat; if (setuplength < usedbytes) { fprintf (stderr, "Xlib: Broken initial reply: Too short (%ld)\n", setuplength); OutOfMemory (dpy); return(NULL); } for (i = 0; i < dpy->nformats; i++) { register ScreenFormat *fmt = &dpy->pixmap_format[i]; fmt->depth = u.sf->depth; fmt->bits_per_pixel = u.sf->bitsPerPixel; fmt->scanline_pad = u.sf->scanLinePad; fmt->ext_data = NULL; u.sf = (xPixmapFormat *) (((char *) u.sf) + sz_xPixmapFormat); } /* * next the Screen structures. */ dpy->screens = Xcalloc(dpy->nscreens, sizeof(Screen)); if (dpy->screens == NULL) { OutOfMemory (dpy); return(NULL); } /* * Now go deal with each screen structure. */ for (i = 0; i < dpy->nscreens; i++) { register Screen *sp = &dpy->screens[i]; VisualID root_visualID; usedbytes += sz_xWindowRoot; if (setuplength < usedbytes) { fprintf (stderr, "Xlib: Broken initial reply: Too short (%ld)\n", setuplength); OutOfMemory (dpy); return(NULL); } root_visualID = u.rp->rootVisualID; sp->display = dpy; sp->root = u.rp->windowId; sp->cmap = u.rp->defaultColormap; sp->white_pixel = u.rp->whitePixel; sp->black_pixel = u.rp->blackPixel; sp->root_input_mask = u.rp->currentInputMask; sp->width = u.rp->pixWidth; sp->height = u.rp->pixHeight; sp->mwidth = u.rp->mmWidth; sp->mheight = u.rp->mmHeight; sp->min_maps = u.rp->minInstalledMaps; sp->max_maps = u.rp->maxInstalledMaps; sp->backing_store= u.rp->backingStore; sp->save_unders = u.rp->saveUnders; sp->root_depth = u.rp->rootDepth; sp->ndepths = u.rp->nDepths; sp->ext_data = NULL; u.rp = (xWindowRoot *) (((char *) u.rp) + sz_xWindowRoot); /* * lets set up the depth structures. */ sp->depths = Xcalloc(sp->ndepths, sizeof(Depth)); if (sp->depths == NULL) { OutOfMemory (dpy); return(NULL); } /* * for all depths on this screen. */ for (j = 0; j < sp->ndepths; j++) { Depth *dp = &sp->depths[j]; usedbytes += sz_xDepth; if (setuplength < usedbytes) { fprintf (stderr, "Xlib: Broken initial reply: Too short (%ld)\n", setuplength); OutOfMemory (dpy); return(NULL); } dp->depth = u.dp->depth; dp->nvisuals = u.dp->nVisuals; u.dp = (xDepth *) (((char *) u.dp) + sz_xDepth); if (dp->nvisuals > 0) { dp->visuals = Xcalloc(dp->nvisuals, sizeof(Visual)); if (dp->visuals == NULL) { OutOfMemory (dpy); return(NULL); } for (k = 0; k < dp->nvisuals; k++) { register Visual *vp = &dp->visuals[k]; usedbytes += sz_xVisualType; if (setuplength < usedbytes) { fprintf (stderr, "Xlib: Broken initial reply: Too short (%ld)\n", setuplength); OutOfMemory (dpy); return(NULL); } vp->visualid = u.vp->visualID; vp->class = u.vp->class; vp->bits_per_rgb= u.vp->bitsPerRGB; vp->map_entries = u.vp->colormapEntries; vp->red_mask = u.vp->redMask; vp->green_mask = u.vp->greenMask; vp->blue_mask = u.vp->blueMask; vp->ext_data = NULL; u.vp = (xVisualType *) (((char *) u.vp) + sz_xVisualType); } if (dp->depth == 32 && getenv ("XLIB_SKIP_ARGB_VISUALS")) { Xfree (dp->visuals); dp->visuals = NULL; dp->nvisuals = 0; } } else { dp->visuals = (Visual *) NULL; } } sp->root_visual = _XVIDtoVisual(dpy, root_visualID); } if(usedbytes != setuplength){ /* Sanity check, shouldn't happen. */ fprintf(stderr, "Xlib: Did not parse entire setup message: " "parsed: %ld, message: %ld\n", usedbytes, setuplength); OutOfMemory(dpy); return(NULL); } /* * Now start talking to the server to setup all other information... */ /* * Make sure default screen is legal. */ if (iscreen >= dpy->nscreens) { OutOfMemory(dpy); return(NULL); } /* * get availability of large requests */ dpy->bigreq_size = xcb_get_maximum_request_length(dpy->xcb->connection); if(dpy->bigreq_size <= dpy->max_request_size) dpy->bigreq_size = 0; /* * Set up other stuff clients are always going to use. */ for (i = 0; i < dpy->nscreens; i++) { register Screen *sp = &dpy->screens[i]; XGCValues values; values.foreground = sp->black_pixel; values.background = sp->white_pixel; if ((sp->default_gc = XCreateGC (dpy, sp->root, GCForeground|GCBackground, &values)) == NULL) { OutOfMemory(dpy); return (NULL); } } /* * call into synchronization routine so that all programs can be * forced synchronous */ (void) XSynchronize(dpy, _Xdebug); /* * get the resource manager database off the root window. */ LockDisplay(dpy); { xGetPropertyReply reply; xGetPropertyReq *req; GetReq (GetProperty, req); req->window = RootWindow(dpy, 0); req->property = XA_RESOURCE_MANAGER; req->type = XA_STRING; req->delete = False; req->longOffset = 0; req->longLength = 100000000L; if (_XReply (dpy, (xReply *) &reply, 0, xFalse)) { if (reply.format == 8 && reply.propertyType == XA_STRING && (reply.nItems + 1 > 0) && (reply.nItems <= req->longLength * 4) && (dpy->xdefaults = Xmalloc (reply.nItems + 1))) { _XReadPad (dpy, dpy->xdefaults, reply.nItems); dpy->xdefaults[reply.nItems] = '\0'; } else if (reply.propertyType != None) _XEatDataWords(dpy, reply.length); } } UnlockDisplay(dpy); #ifdef MOTIFBC { extern Display *_XHeadOfDisplayList; _XHeadOfDisplayList = dpy; } #endif #ifdef XKB XkbUseExtension(dpy,NULL,NULL); #endif /* * and return successfully */ return(dpy); } /* XFreeDisplayStructure frees all the storage associated with a * Display. It is used by XOpenDisplay if it runs out of memory, * and also by XCloseDisplay. It needs to check whether all pointers * are non-NULL before dereferencing them, since it may be called * by XOpenDisplay before the Display structure is fully formed. * XOpenDisplay must be sure to initialize all the pointers to NULL * before the first possible call on this. */ void _XFreeDisplayStructure(Display *dpy) { /* move all cookies in the EQ to the jar, then free them. */ if (dpy->qfree) { _XQEvent *qelt = dpy->qfree; while (qelt) { if (_XIsEventCookie(dpy, &qelt->event)) _XStoreEventCookie(dpy, &qelt->event); qelt = qelt->next; } } if (dpy->cookiejar) _XFreeEventCookies(dpy); while (dpy->ext_procs) { _XExtension *ext = dpy->ext_procs; dpy->ext_procs = ext->next; Xfree (ext->name); Xfree (ext); } if (dpy->im_filters) (*dpy->free_funcs->im_filters)(dpy); if (dpy->cms.clientCmaps) (*dpy->free_funcs->clientCmaps)(dpy); if (dpy->cms.defaultCCCs) (*dpy->free_funcs->defaultCCCs)(dpy); if (dpy->cms.perVisualIntensityMaps) (*dpy->free_funcs->intensityMaps)(dpy); if (dpy->atoms) (*dpy->free_funcs->atoms)(dpy); if (dpy->modifiermap) (*dpy->free_funcs->modifiermap)(dpy->modifiermap); if (dpy->key_bindings) (*dpy->free_funcs->key_bindings)(dpy); if (dpy->context_db) (*dpy->free_funcs->context_db)(dpy); if (dpy->xkb_info) (*dpy->free_funcs->xkb)(dpy); /* if RM database was allocated by XGetDefault() free it */ if (dpy->db && (dpy->flags & XlibDisplayDfltRMDB)) XrmDestroyDatabase(dpy->db); if (dpy->screens) { register int i; for (i = 0; i < dpy->nscreens; i++) { Screen *sp = &dpy->screens[i]; if (sp->depths) { register int j; for (j = 0; j < sp->ndepths; j++) { Depth *dp = &sp->depths[j]; if (dp->visuals) { register int k; for (k = 0; k < dp->nvisuals; k++) _XFreeExtData (dp->visuals[k].ext_data); Xfree (dp->visuals); } } Xfree (sp->depths); } _XFreeExtData (sp->ext_data); } Xfree (dpy->screens); } if (dpy->pixmap_format) { register int i; for (i = 0; i < dpy->nformats; i++) _XFreeExtData (dpy->pixmap_format[i].ext_data); Xfree (dpy->pixmap_format); } free(dpy->display_name); Xfree (dpy->vendor); Xfree (dpy->buffer); Xfree (dpy->keysyms); Xfree (dpy->xdefaults); Xfree (dpy->error_vec); _XFreeExtData (dpy->ext_data); Xfree (dpy->free_funcs); Xfree (dpy->scratch_buffer); FreeDisplayLock(dpy); if (dpy->qfree) { register _XQEvent *qelt = dpy->qfree; while (qelt) { register _XQEvent *qnxt = qelt->next; Xfree (qelt); qelt = qnxt; } } while (dpy->im_fd_info) { struct _XConnectionInfo *conni = dpy->im_fd_info; dpy->im_fd_info = conni->next; Xfree (conni->watch_data); Xfree (conni); } if (dpy->conn_watchers) { struct _XConnWatchInfo *watcher = dpy->conn_watchers; dpy->conn_watchers = watcher->next; Xfree (watcher); } Xfree (dpy->filedes); _XFreeX11XCBStructure(dpy); Xfree (dpy); } /* OutOfMemory is called if malloc fails. XOpenDisplay returns NULL after this returns. */ static void OutOfMemory(Display *dpy) { if(dpy->xcb->connection) xcb_disconnect(dpy->xcb->connection); _XFreeDisplayStructure (dpy); } string length */ if (u.setup->nbytesVendor > 256) { libX11-1.6.3/src/GetWAttrs.c000064401431060000012000000105231247741723500156760ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" typedef struct _WAttrsState { unsigned long attr_seq; unsigned long geom_seq; XWindowAttributes *attr; } _XWAttrsState; static Bool _XWAttrsHandler( register Display *dpy, register xReply *rep, char *buf, int len, XPointer data) { register _XWAttrsState *state; xGetWindowAttributesReply replbuf; register xGetWindowAttributesReply *repl; register XWindowAttributes *attr; state = (_XWAttrsState *)data; if (dpy->last_request_read != state->attr_seq) { if (dpy->last_request_read == state->geom_seq && !state->attr && rep->generic.type == X_Error && rep->error.errorCode == BadDrawable) return True; return False; } if (rep->generic.type == X_Error) { state->attr = (XWindowAttributes *)NULL; return False; } repl = (xGetWindowAttributesReply *) _XGetAsyncReply(dpy, (char *)&replbuf, rep, buf, len, (SIZEOF(xGetWindowAttributesReply) - SIZEOF(xReply)) >> 2, True); attr = state->attr; attr->class = repl->class; attr->bit_gravity = repl->bitGravity; attr->win_gravity = repl->winGravity; attr->backing_store = repl->backingStore; attr->backing_planes = repl->backingBitPlanes; attr->backing_pixel = repl->backingPixel; attr->save_under = repl->saveUnder; attr->colormap = repl->colormap; attr->map_installed = repl->mapInstalled; attr->map_state = repl->mapState; attr->all_event_masks = repl->allEventMasks; attr->your_event_mask = repl->yourEventMask; attr->do_not_propagate_mask = repl->doNotPropagateMask; attr->override_redirect = repl->override; attr->visual = _XVIDtoVisual (dpy, repl->visualID); return True; } Status _XGetWindowAttributes( register Display *dpy, Window w, XWindowAttributes *attr) { xGetGeometryReply rep; register xResourceReq *req; register int i; register Screen *sp; _XAsyncHandler async; _XWAttrsState async_state; GetResReq(GetWindowAttributes, w, req); async_state.attr_seq = dpy->request; async_state.geom_seq = 0; async_state.attr = attr; async.next = dpy->async_handlers; async.handler = _XWAttrsHandler; async.data = (XPointer)&async_state; dpy->async_handlers = &async; GetResReq(GetGeometry, w, req); async_state.geom_seq = dpy->request; if (!_XReply (dpy, (xReply *)&rep, 0, xTrue)) { DeqAsyncHandler(dpy, &async); return (0); } DeqAsyncHandler(dpy, &async); if (!async_state.attr) { return (0); } attr->x = cvtINT16toInt (rep.x); attr->y = cvtINT16toInt (rep.y); attr->width = rep.width; attr->height = rep.height; attr->border_width = rep.borderWidth; attr->depth = rep.depth; attr->root = rep.root; /* find correct screen so that applications find it easier.... */ for (i = 0; i < dpy->nscreens; i++) { sp = &dpy->screens[i]; if (sp->root == attr->root) { attr->screen = sp; break; } } return(1); } Status XGetWindowAttributes( Display *dpy, Window w, XWindowAttributes *attr) { Status ret; LockDisplay(dpy); ret = _XGetWindowAttributes(dpy, w, attr); UnlockDisplay(dpy); SyncHandle(); return ret; } libX11-1.6.3/src/xkb/XKBAlloc.c000064401431060000012000000353141247741723500162020ustar00alancstaff00002660200006/************************************************************ Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Silicon Graphics not be used in advertising or publicity pertaining to distribution of the software without specific prior written permission. Silicon Graphics makes no representation about the suitability of this software for any purpose. It is provided "as is" without any express or implied warranty. SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ********************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #include "Xlibint.h" #include "XKBlibint.h" #include #include #include "XKBlibint.h" /***===================================================================***/ /*ARGSUSED*/ Status XkbAllocCompatMap(XkbDescPtr xkb, unsigned which, unsigned nSI) { XkbCompatMapPtr compat; XkbSymInterpretRec *prev_interpret; if (!xkb) return BadMatch; if (xkb->compat) { if (xkb->compat->size_si >= nSI) return Success; compat = xkb->compat; compat->size_si = nSI; if (compat->sym_interpret == NULL) compat->num_si = 0; prev_interpret = compat->sym_interpret; compat->sym_interpret = _XkbTypedRealloc(compat->sym_interpret, nSI, XkbSymInterpretRec); if (compat->sym_interpret == NULL) { _XkbFree(prev_interpret); compat->size_si = compat->num_si = 0; return BadAlloc; } if (compat->num_si != 0) { _XkbClearElems(compat->sym_interpret, compat->num_si, compat->size_si - 1, XkbSymInterpretRec); } return Success; } compat = _XkbTypedCalloc(1, XkbCompatMapRec); if (compat == NULL) return BadAlloc; if (nSI > 0) { compat->sym_interpret = _XkbTypedCalloc(nSI, XkbSymInterpretRec); if (!compat->sym_interpret) { _XkbFree(compat); return BadAlloc; } } compat->size_si = nSI; compat->num_si = 0; bzero((char *) &compat->groups[0], XkbNumKbdGroups * sizeof(XkbModsRec)); xkb->compat = compat; return Success; } void XkbFreeCompatMap(XkbDescPtr xkb, unsigned which, Bool freeMap) { register XkbCompatMapPtr compat; if ((xkb == NULL) || (xkb->compat == NULL)) return; compat = xkb->compat; if (freeMap) which = XkbAllCompatMask; if (which & XkbGroupCompatMask) bzero(&compat->groups[0], XkbNumKbdGroups * sizeof(XkbModsRec)); if (which & XkbSymInterpMask) { if ((compat->sym_interpret) && (compat->size_si > 0)) _XkbFree(compat->sym_interpret); compat->size_si = compat->num_si = 0; compat->sym_interpret = NULL; } if (freeMap) { _XkbFree(compat); xkb->compat = NULL; } return; } /***===================================================================***/ Status XkbAllocNames(XkbDescPtr xkb, unsigned which, int nTotalRG, int nTotalAliases) { XkbNamesPtr names; if (xkb == NULL) return BadMatch; if (xkb->names == NULL) { xkb->names = _XkbTypedCalloc(1, XkbNamesRec); if (xkb->names == NULL) return BadAlloc; } names = xkb->names; if ((which & XkbKTLevelNamesMask) && (xkb->map != NULL) && (xkb->map->types != NULL)) { register int i; XkbKeyTypePtr type = xkb->map->types; for (i = 0; i < xkb->map->num_types; i++, type++) { if (type->level_names == NULL) { type->level_names = _XkbTypedCalloc(type->num_levels, Atom); if (type->level_names == NULL) return BadAlloc; } } } if ((which & XkbKeyNamesMask) && (names->keys == NULL)) { if ((!XkbIsLegalKeycode(xkb->min_key_code)) || (!XkbIsLegalKeycode(xkb->max_key_code)) || (xkb->max_key_code < xkb->min_key_code)) return BadValue; names->keys = _XkbTypedCalloc((xkb->max_key_code + 1), XkbKeyNameRec); if (names->keys == NULL) return BadAlloc; } if ((which & XkbKeyAliasesMask) && (nTotalAliases > 0)) { if (names->key_aliases == NULL) { names->key_aliases = _XkbTypedCalloc(nTotalAliases, XkbKeyAliasRec); } else if (nTotalAliases > names->num_key_aliases) { XkbKeyAliasRec *prev_aliases = names->key_aliases; names->key_aliases = _XkbTypedRealloc(names->key_aliases, nTotalAliases, XkbKeyAliasRec); if (names->key_aliases != NULL) { _XkbClearElems(names->key_aliases, names->num_key_aliases, nTotalAliases - 1, XkbKeyAliasRec); } else { _XkbFree(prev_aliases); } } if (names->key_aliases == NULL) { names->num_key_aliases = 0; return BadAlloc; } names->num_key_aliases = nTotalAliases; } if ((which & XkbRGNamesMask) && (nTotalRG > 0)) { if (names->radio_groups == NULL) { names->radio_groups = _XkbTypedCalloc(nTotalRG, Atom); } else if (nTotalRG > names->num_rg) { Atom *prev_radio_groups = names->radio_groups; names->radio_groups = _XkbTypedRealloc(names->radio_groups, nTotalRG, Atom); if (names->radio_groups != NULL) { _XkbClearElems(names->radio_groups, names->num_rg, nTotalRG - 1, Atom); } else { _XkbFree(prev_radio_groups); } } if (names->radio_groups == NULL) return BadAlloc; names->num_rg = nTotalRG; } return Success; } void XkbFreeNames(XkbDescPtr xkb, unsigned which, Bool freeMap) { XkbNamesPtr names; if ((xkb == NULL) || (xkb->names == NULL)) return; names = xkb->names; if (freeMap) which = XkbAllNamesMask; if (which & XkbKTLevelNamesMask) { XkbClientMapPtr map = xkb->map; if ((map != NULL) && (map->types != NULL)) { register int i; register XkbKeyTypePtr type; type = map->types; for (i = 0; i < map->num_types; i++, type++) { if (type->level_names != NULL) { _XkbFree(type->level_names); type->level_names = NULL; } } } } if ((which & XkbKeyNamesMask) && (names->keys != NULL)) { _XkbFree(names->keys); names->keys = NULL; names->num_keys = 0; } if ((which & XkbKeyAliasesMask) && (names->key_aliases)) { _XkbFree(names->key_aliases); names->key_aliases = NULL; names->num_key_aliases = 0; } if ((which & XkbRGNamesMask) && (names->radio_groups)) { _XkbFree(names->radio_groups); names->radio_groups = NULL; names->num_rg = 0; } if (freeMap) { _XkbFree(names); xkb->names = NULL; } return; } /***===================================================================***/ /*ARGSUSED*/ Status XkbAllocControls(XkbDescPtr xkb, unsigned which) { if (xkb == NULL) return BadMatch; if (xkb->ctrls == NULL) { xkb->ctrls = _XkbTypedCalloc(1, XkbControlsRec); if (!xkb->ctrls) return BadAlloc; } return Success; } /*ARGSUSED*/ void XkbFreeControls(XkbDescPtr xkb, unsigned which, Bool freeMap) { if (freeMap && (xkb != NULL) && (xkb->ctrls != NULL)) { _XkbFree(xkb->ctrls); xkb->ctrls = NULL; } return; } /***===================================================================***/ Status XkbAllocIndicatorMaps(XkbDescPtr xkb) { if (xkb == NULL) return BadMatch; if (xkb->indicators == NULL) { xkb->indicators = _XkbTypedCalloc(1, XkbIndicatorRec); if (!xkb->indicators) return BadAlloc; } return Success; } void XkbFreeIndicatorMaps(XkbDescPtr xkb) { if ((xkb != NULL) && (xkb->indicators != NULL)) { _XkbFree(xkb->indicators); xkb->indicators = NULL; } return; } /***====================================================================***/ XkbDescRec * XkbAllocKeyboard(void) { XkbDescRec *xkb; xkb = _XkbTypedCalloc(1, XkbDescRec); if (xkb) xkb->device_spec = XkbUseCoreKbd; return xkb; } void XkbFreeKeyboard(XkbDescPtr xkb, unsigned which, Bool freeAll) { if (xkb == NULL) return; if (freeAll) which = XkbAllComponentsMask; if (which & XkbClientMapMask) XkbFreeClientMap(xkb, XkbAllClientInfoMask, True); if (which & XkbServerMapMask) XkbFreeServerMap(xkb, XkbAllServerInfoMask, True); if (which & XkbCompatMapMask) XkbFreeCompatMap(xkb, XkbAllCompatMask, True); if (which & XkbIndicatorMapMask) XkbFreeIndicatorMaps(xkb); if (which & XkbNamesMask) XkbFreeNames(xkb, XkbAllNamesMask, True); if ((which & XkbGeometryMask) && (xkb->geom != NULL)) XkbFreeGeometry(xkb->geom, XkbGeomAllMask, True); if (which & XkbControlsMask) XkbFreeControls(xkb, XkbAllControlsMask, True); if (freeAll) _XkbFree(xkb); return; } /***====================================================================***/ XkbDeviceLedInfoPtr XkbAddDeviceLedInfo(XkbDeviceInfoPtr devi, unsigned ledClass, unsigned ledId) { XkbDeviceLedInfoPtr devli; register int i; if ((!devi) || (!XkbSingleXIClass(ledClass)) || (!XkbSingleXIId(ledId))) return NULL; for (i = 0, devli = devi->leds; i < devi->num_leds; i++, devli++) { if ((devli->led_class == ledClass) && (devli->led_id == ledId)) return devli; } if (devi->num_leds >= devi->sz_leds) { XkbDeviceLedInfoRec *prev_leds = devi->leds; if (devi->sz_leds > 0) devi->sz_leds *= 2; else devi->sz_leds = 1; devi->leds = _XkbTypedRealloc(devi->leds, devi->sz_leds, XkbDeviceLedInfoRec); if (!devi->leds) { _XkbFree(prev_leds); devi->sz_leds = devi->num_leds = 0; return NULL; } i = devi->num_leds; for (devli = &devi->leds[i]; i < devi->sz_leds; i++, devli++) { bzero(devli, sizeof(XkbDeviceLedInfoRec)); devli->led_class = XkbXINone; devli->led_id = XkbXINone; } } devli = &devi->leds[devi->num_leds++]; bzero(devli, sizeof(XkbDeviceLedInfoRec)); devli->led_class = ledClass; devli->led_id = ledId; return devli; } Status XkbResizeDeviceButtonActions(XkbDeviceInfoPtr devi, unsigned newTotal) { XkbAction *prev_btn_acts; if ((!devi) || (newTotal > 255)) return BadValue; if ((devi->btn_acts != NULL) && (newTotal == devi->num_btns)) return Success; if (newTotal == 0) { if (devi->btn_acts != NULL) { _XkbFree(devi->btn_acts); devi->btn_acts = NULL; } devi->num_btns = 0; return Success; } prev_btn_acts = devi->btn_acts; devi->btn_acts = _XkbTypedRealloc(devi->btn_acts, newTotal, XkbAction); if (devi->btn_acts == NULL) { _XkbFree(prev_btn_acts); devi->num_btns = 0; return BadAlloc; } if (newTotal > devi->num_btns) { XkbAction *act; act = &devi->btn_acts[devi->num_btns]; bzero((char *) act, (newTotal - devi->num_btns) * sizeof(XkbAction)); } devi->num_btns = newTotal; return Success; } /*ARGSUSED*/ XkbDeviceInfoPtr XkbAllocDeviceInfo(unsigned deviceSpec, unsigned nButtons, unsigned szLeds) { XkbDeviceInfoPtr devi; devi = _XkbTypedCalloc(1, XkbDeviceInfoRec); if (devi != NULL) { devi->device_spec = deviceSpec; devi->has_own_state = False; devi->num_btns = 0; devi->btn_acts = NULL; if (nButtons > 0) { devi->num_btns = nButtons; devi->btn_acts = _XkbTypedCalloc(nButtons, XkbAction); if (!devi->btn_acts) { _XkbFree(devi); return NULL; } } devi->dflt_kbd_fb = XkbXINone; devi->dflt_led_fb = XkbXINone; devi->num_leds = 0; devi->sz_leds = 0; devi->leds = NULL; if (szLeds > 0) { devi->sz_leds = szLeds; devi->leds = _XkbTypedCalloc(szLeds, XkbDeviceLedInfoRec); if (!devi->leds) { _XkbFree(devi->btn_acts); _XkbFree(devi); return NULL; } } } return devi; } void XkbFreeDeviceInfo(XkbDeviceInfoPtr devi, unsigned which, Bool freeDevI) { if (devi) { if (freeDevI) { which = XkbXI_AllDeviceFeaturesMask; if (devi->name) { _XkbFree(devi->name); devi->name = NULL; } } if ((which & XkbXI_ButtonActionsMask) && (devi->btn_acts)) { _XkbFree(devi->btn_acts); devi->num_btns = 0; devi->btn_acts = NULL; } if ((which & XkbXI_IndicatorsMask) && (devi->leds)) { register int i; if ((which & XkbXI_IndicatorsMask) == XkbXI_IndicatorsMask) { _XkbFree(devi->leds); devi->sz_leds = devi->num_leds = 0; devi->leds = NULL; } else { XkbDeviceLedInfoPtr devli; for (i = 0, devli = devi->leds; i < devi->num_leds; i++, devli++) { if (which & XkbXI_IndicatorMapsMask) bzero((char *) &devli->maps[0], sizeof(devli->maps)); else bzero((char *) &devli->names[0], sizeof(devli->names)); } } } if (freeDevI) _XkbFree(devi); } return; } _key_code < xkb->min_key_code)) return BadValue; names->keys = _XkbTypedCalloc((xkb->max_key_code + 1), XkbKeyNameRec); if (names->keys == NULL) return BadAlloc; } if ((which & XkbKeyAliasesMask) && (nTotalAliases > 0)) { if (names->key_aliases == NULLlibX11-1.6.3/src/xkb/Makefile.in000064401431060000012000000524241247741725600165100ustar00alancstaff00002660200006# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/xkb ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_define_dir.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h \ $(top_builddir)/include/X11/XlibConf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libxkb_la_LIBADD = am_libxkb_la_OBJECTS = XKB.lo XKBBind.lo XKBCompat.lo XKBCtrls.lo \ XKBCvt.lo XKBGetMap.lo XKBGetByName.lo XKBNames.lo XKBRdBuf.lo \ XKBSetMap.lo XKBUse.lo XKBleds.lo XKBBell.lo XKBGeom.lo \ XKBSetGeom.lo XKBExtDev.lo XKBList.lo XKBMisc.lo XKBMAlloc.lo \ XKBGAlloc.lo XKBAlloc.lo libxkb_la_OBJECTS = $(am_libxkb_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src -I$(top_builddir)/include/X11 depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libxkb_la_SOURCES) DIST_SOURCES = $(libxkb_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASE_CFLAGS = @BASE_CFLAGS@ BIGFONT_CFLAGS = @BIGFONT_CFLAGS@ BIGFONT_LIBS = @BIGFONT_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHANGELOG_CMD = @CHANGELOG_CMD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ FOP = @FOP@ GREP = @GREP@ I18N_MODULE_LIBS = @I18N_MODULE_LIBS@ INSTALL = @INSTALL@ INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ KEYSYMDEFS = @KEYSYMDEFS@ LAUNCHD = @LAUNCHD@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LINT = @LINT@ LINTLIB = @LINTLIB@ LINT_FLAGS = @LINT_FLAGS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MALLOC_ZERO_CFLAGS = @MALLOC_ZERO_CFLAGS@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_SUBSTS = @MAN_SUBSTS@ MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RAWCPP = @RAWCPP@ RAWCPPFLAGS = @RAWCPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRICT_CFLAGS = @STRICT_CFLAGS@ STRIP = @STRIP@ STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ TRADITIONALCPPFLAGS = @TRADITIONALCPPFLAGS@ VERSION = @VERSION@ WCHAR32 = @WCHAR32@ X11_CFLAGS = @X11_CFLAGS@ X11_DATADIR = @X11_DATADIR@ X11_EXTRA_DEPS = @X11_EXTRA_DEPS@ X11_LIBDIR = @X11_LIBDIR@ X11_LIBS = @X11_LIBS@ X11_LOCALEDATADIR = @X11_LOCALEDATADIR@ X11_LOCALEDIR = @X11_LOCALEDIR@ X11_LOCALELIBDIR = @X11_LOCALELIBDIR@ XERRORDB = @XERRORDB@ XKBPROTO_REQUIRES = @XKBPROTO_REQUIRES@ XKEYSYMDB = @XKEYSYMDB@ XLOCALEDATADIR = @XLOCALEDATADIR@ XLOCALEDIR = @XLOCALEDIR@ XLOCALELIBDIR = @XLOCALELIBDIR@ XMALLOC_ZERO_CFLAGS = @XMALLOC_ZERO_CFLAGS@ XMLTO = @XMLTO@ XORG_MAN_PAGE = @XORG_MAN_PAGE@ XORG_SGML_PATH = @XORG_SGML_PATH@ XSLTPROC = @XSLTPROC@ XSL_STYLESHEET = @XSL_STYLESHEET@ XTHREADLIB = @XTHREADLIB@ XTHREAD_CFLAGS = @XTHREAD_CFLAGS@ XTMALLOC_ZERO_CFLAGS = @XTMALLOC_ZERO_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ locales = @locales@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = \ -I$(top_srcdir)/include \ -I$(top_srcdir)/include/X11 \ -I$(top_builddir)/include \ -I$(top_builddir)/include/X11 \ -I$(top_srcdir)/src/xcms \ -I$(top_srcdir)/src/xkb \ -I$(top_srcdir)/src/xlibi18n \ -D_BSD_SOURCE AM_CFLAGS = \ $(X11_CFLAGS) \ $(BIGFONT_CFLAGS) \ $(XMALLOC_ZERO_CFLAGS) \ $(CWARNFLAGS) noinst_LTLIBRARIES = libxkb.la libxkb_la_SOURCES = \ XKB.c \ XKBBind.c \ XKBCompat.c \ XKBCtrls.c \ XKBCvt.c \ XKBGetMap.c \ XKBGetByName.c \ XKBNames.c \ XKBRdBuf.c \ XKBSetMap.c \ XKBUse.c \ XKBleds.c \ XKBBell.c \ XKBGeom.c \ XKBSetGeom.c \ XKBExtDev.c \ XKBList.c \ XKBMisc.c \ XKBMAlloc.c \ XKBGAlloc.c \ XKBAlloc.c \ XKBlibint.h # Check source code with tools like lint & sparse @LINT_TRUE@ALL_LINT_FLAGS = $(LINT_FLAGS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ @LINT_TRUE@ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/xkb/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/xkb/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libxkb.la: $(libxkb_la_OBJECTS) $(libxkb_la_DEPENDENCIES) $(EXTRA_libxkb_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libxkb_la_OBJECTS) $(libxkb_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XKB.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XKBAlloc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XKBBell.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XKBBind.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XKBCompat.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XKBCtrls.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XKBCvt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XKBExtDev.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XKBGAlloc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XKBGeom.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XKBGetByName.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XKBGetMap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XKBList.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XKBMAlloc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XKBMisc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XKBNames.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XKBRdBuf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XKBSetGeom.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XKBSetMap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XKBUse.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XKBleds.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile @LINT_TRUE@lint: @LINT_TRUE@ $(LINT) $(ALL_LINT_FLAGS) $(libxkb_la_SOURCES) -lm # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: file.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }libX11-1.6.3/src/xkb/XKBMAlloc.c000064401431060000012000001040451247741723500163150ustar00alancstaff00002660200006/************************************************************ Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Silicon Graphics not be used in advertising or publicity pertaining to distribution of the software without specific prior written permission. Silicon Graphics makes no representation about the suitability of this software for any purpose. It is provided "as is" without any express or implied warranty. SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ********************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #include "Xlibint.h" #include #include #include "XKBlibint.h" /***====================================================================***/ Status XkbAllocClientMap(XkbDescPtr xkb, unsigned which, unsigned nTotalTypes) { register int i; XkbClientMapPtr map; if ((xkb == NULL) || ((nTotalTypes > 0) && (nTotalTypes < XkbNumRequiredTypes))) return BadValue; if ((which & XkbKeySymsMask) && ((!XkbIsLegalKeycode(xkb->min_key_code)) || (!XkbIsLegalKeycode(xkb->max_key_code)) || (xkb->max_key_code < xkb->min_key_code))) { #ifdef DEBUG fprintf(stderr, "bad keycode (%d,%d) in XkbAllocClientMap\n", xkb->min_key_code, xkb->max_key_code); #endif return BadValue; } if (xkb->map == NULL) { map = _XkbTypedCalloc(1, XkbClientMapRec); if (map == NULL) return BadAlloc; xkb->map = map; } else map = xkb->map; if ((which & XkbKeyTypesMask) && (nTotalTypes > 0)) { if (map->types == NULL) { map->types = _XkbTypedCalloc(nTotalTypes, XkbKeyTypeRec); if (map->types == NULL) return BadAlloc; map->num_types = 0; map->size_types = nTotalTypes; } else if (map->size_types < nTotalTypes) { XkbKeyTypeRec *prev_types = map->types; map->types = _XkbTypedRealloc(map->types, nTotalTypes, XkbKeyTypeRec); if (map->types == NULL) { _XkbFree(prev_types); map->num_types = map->size_types = 0; return BadAlloc; } map->size_types = nTotalTypes; bzero(&map->types[map->num_types], ((map->size_types - map->num_types) * sizeof(XkbKeyTypeRec))); } } if (which & XkbKeySymsMask) { int nKeys = XkbNumKeys(xkb); if (map->syms == NULL) { map->size_syms = (nKeys * 15) / 10; map->syms = _XkbTypedCalloc(map->size_syms, KeySym); if (!map->syms) { map->size_syms = 0; return BadAlloc; } map->num_syms = 1; map->syms[0] = NoSymbol; } if (map->key_sym_map == NULL) { i = xkb->max_key_code + 1; map->key_sym_map = _XkbTypedCalloc(i, XkbSymMapRec); if (map->key_sym_map == NULL) return BadAlloc; } } if (which & XkbModifierMapMask) { if ((!XkbIsLegalKeycode(xkb->min_key_code)) || (!XkbIsLegalKeycode(xkb->max_key_code)) || (xkb->max_key_code < xkb->min_key_code)) return BadMatch; if (map->modmap == NULL) { i = xkb->max_key_code + 1; map->modmap = _XkbTypedCalloc(i, unsigned char); if (map->modmap == NULL) return BadAlloc; } } return Success; } Status XkbAllocServerMap(XkbDescPtr xkb, unsigned which, unsigned nNewActions) { register int i; XkbServerMapPtr map; if (xkb == NULL) return BadMatch; if (xkb->server == NULL) { map = _XkbTypedCalloc(1, XkbServerMapRec); if (map == NULL) return BadAlloc; for (i = 0; i < XkbNumVirtualMods; i++) { map->vmods[i] = XkbNoModifierMask; } xkb->server = map; } else map = xkb->server; if (which & XkbExplicitComponentsMask) { if ((!XkbIsLegalKeycode(xkb->min_key_code)) || (!XkbIsLegalKeycode(xkb->max_key_code)) || (xkb->max_key_code < xkb->min_key_code)) return BadMatch; if (map->explicit == NULL) { i = xkb->max_key_code + 1; map->explicit = _XkbTypedCalloc(i, unsigned char); if (map->explicit == NULL) return BadAlloc; } } if (which & XkbKeyActionsMask) { if ((!XkbIsLegalKeycode(xkb->min_key_code)) || (!XkbIsLegalKeycode(xkb->max_key_code)) || (xkb->max_key_code < xkb->min_key_code)) return BadMatch; if (nNewActions < 1) nNewActions = 1; if (map->acts == NULL) { map->acts = _XkbTypedCalloc((nNewActions + 1), XkbAction); if (map->acts == NULL) return BadAlloc; map->num_acts = 1; map->size_acts = nNewActions + 1; } else if ((map->size_acts - map->num_acts) < nNewActions) { unsigned need; XkbAction *prev_acts = map->acts; need = map->num_acts + nNewActions; map->acts = _XkbTypedRealloc(map->acts, need, XkbAction); if (map->acts == NULL) { _XkbFree(prev_acts); map->num_acts = map->size_acts = 0; return BadAlloc; } map->size_acts = need; bzero(&map->acts[map->num_acts], ((map->size_acts - map->num_acts) * sizeof(XkbAction))); } if (map->key_acts == NULL) { i = xkb->max_key_code + 1; map->key_acts = _XkbTypedCalloc(i, unsigned short); if (map->key_acts == NULL) return BadAlloc; } } if (which & XkbKeyBehaviorsMask) { if ((!XkbIsLegalKeycode(xkb->min_key_code)) || (!XkbIsLegalKeycode(xkb->max_key_code)) || (xkb->max_key_code < xkb->min_key_code)) return BadMatch; if (map->behaviors == NULL) { i = xkb->max_key_code + 1; map->behaviors = _XkbTypedCalloc(i, XkbBehavior); if (map->behaviors == NULL) return BadAlloc; } } if (which & XkbVirtualModMapMask) { if ((!XkbIsLegalKeycode(xkb->min_key_code)) || (!XkbIsLegalKeycode(xkb->max_key_code)) || (xkb->max_key_code < xkb->min_key_code)) return BadMatch; if (map->vmodmap == NULL) { i = xkb->max_key_code + 1; map->vmodmap = _XkbTypedCalloc(i, unsigned short); if (map->vmodmap == NULL) return BadAlloc; } } return Success; } /***====================================================================***/ Status XkbCopyKeyType(XkbKeyTypePtr from, XkbKeyTypePtr into) { if ((!from) || (!into)) return BadMatch; _XkbFree(into->map); into->map = NULL; _XkbFree(into->preserve); into->preserve = NULL; _XkbFree(into->level_names); into->level_names = NULL; *into = *from; if ((from->map) && (into->map_count > 0)) { into->map = _XkbTypedCalloc(into->map_count, XkbKTMapEntryRec); if (!into->map) return BadAlloc; memcpy(into->map, from->map, into->map_count * sizeof(XkbKTMapEntryRec)); } if ((from->preserve) && (into->map_count > 0)) { into->preserve = _XkbTypedCalloc(into->map_count, XkbModsRec); if (!into->preserve) return BadAlloc; memcpy(into->preserve, from->preserve, into->map_count * sizeof(XkbModsRec)); } if ((from->level_names) && (into->num_levels > 0)) { into->level_names = _XkbTypedCalloc(into->num_levels, Atom); if (!into->level_names) return BadAlloc; memcpy(into->level_names, from->level_names, into->num_levels * sizeof(Atom)); } return Success; } Status XkbCopyKeyTypes(XkbKeyTypePtr from, XkbKeyTypePtr into, int num_types) { register int i, rtrn; if ((!from) || (!into) || (num_types < 0)) return BadMatch; for (i = 0; i < num_types; i++) { if ((rtrn = XkbCopyKeyType(from++, into++)) != Success) return rtrn; } return Success; } XkbKeyTypePtr XkbAddKeyType(XkbDescPtr xkb, Atom name, int map_count, Bool want_preserve, int num_lvls) { register int i; unsigned tmp; XkbKeyTypePtr type; XkbClientMapPtr map; if ((!xkb) || (num_lvls < 1)) return NULL; map = xkb->map; if ((map) && (map->types)) { for (i = 0; i < map->num_types; i++) { if (map->types[i].name == name) { Status status = XkbResizeKeyType(xkb, i, map_count, want_preserve, num_lvls); return (status == Success ? &map->types[i] : NULL); } } } if ((!map) || (!map->types) || (map->num_types < XkbNumRequiredTypes)) { tmp = XkbNumRequiredTypes + 1; if (XkbAllocClientMap(xkb, XkbKeyTypesMask, tmp) != Success) return NULL; if (!map) map = xkb->map; tmp = 0; if (map->num_types <= XkbKeypadIndex) tmp |= XkbKeypadMask; if (map->num_types <= XkbAlphabeticIndex) tmp |= XkbAlphabeticMask; if (map->num_types <= XkbTwoLevelIndex) tmp |= XkbTwoLevelMask; if (map->num_types <= XkbOneLevelIndex) tmp |= XkbOneLevelMask; if (XkbInitCanonicalKeyTypes(xkb, tmp, XkbNoModifier) == Success) { for (i = 0; i < map->num_types; i++) { Status status; if (map->types[i].name != name) continue; status = XkbResizeKeyType(xkb, i, map_count, want_preserve, num_lvls); return (status == Success ? &map->types[i] : NULL); } } } if ((map->num_types <= map->size_types) && (XkbAllocClientMap(xkb, XkbKeyTypesMask, map->num_types + 1) != Success)) { return NULL; } type = &map->types[map->num_types]; map->num_types++; bzero((char *) type, sizeof(XkbKeyTypeRec)); type->num_levels = num_lvls; type->map_count = map_count; type->name = name; if (map_count > 0) { type->map = _XkbTypedCalloc(map_count, XkbKTMapEntryRec); if (!type->map) { map->num_types--; return NULL; } if (want_preserve) { type->preserve = _XkbTypedCalloc(map_count, XkbModsRec); if (!type->preserve) { _XkbFree(type->map); map->num_types--; return NULL; } } } return type; } Status XkbResizeKeyType(XkbDescPtr xkb, int type_ndx, int map_count, Bool want_preserve, int new_num_lvls) { XkbKeyTypePtr type; KeyCode matchingKeys[XkbMaxKeyCount], nMatchingKeys; if ((type_ndx < 0) || (type_ndx >= xkb->map->num_types) || (map_count < 0) || (new_num_lvls < 1)) return BadValue; switch (type_ndx) { case XkbOneLevelIndex: if (new_num_lvls != 1) return BadMatch; break; case XkbTwoLevelIndex: case XkbAlphabeticIndex: case XkbKeypadIndex: if (new_num_lvls != 2) return BadMatch; break; } type = &xkb->map->types[type_ndx]; if (map_count == 0) { _XkbFree(type->map); type->map = NULL; _XkbFree(type->preserve); type->preserve = NULL; type->map_count = 0; } else { XkbKTMapEntryRec *prev_map = type->map; if ((map_count > type->map_count) || (type->map == NULL)) type->map = _XkbTypedRealloc(type->map, map_count, XkbKTMapEntryRec); if (!type->map) { _XkbFree(prev_map); return BadAlloc; } if (want_preserve) { XkbModsRec *prev_preserve = type->preserve; if ((map_count > type->map_count) || (type->preserve == NULL)) { type->preserve = _XkbTypedRealloc(type->preserve, map_count, XkbModsRec); } if (!type->preserve) { _XkbFree(prev_preserve); return BadAlloc; } } else { _XkbFree(type->preserve); type->preserve = NULL; } type->map_count = map_count; } if ((new_num_lvls > type->num_levels) || (type->level_names == NULL)) { Atom *prev_level_names = type->level_names; type->level_names = _XkbTypedRealloc(type->level_names, new_num_lvls, Atom); if (!type->level_names) { _XkbFree(prev_level_names); return BadAlloc; } } /* * Here's the theory: * If the width of the type changed, we might have to resize the symbol * maps for any keys that use the type for one or more groups. This is * expensive, so we'll try to cull out any keys that are obviously okay: * In any case: * - keys that have a group width <= the old width are okay (because * they could not possibly have been associated with the old type) * If the key type increased in size: * - keys that already have a group width >= to the new width are okay * + keys that have a group width >= the old width but < the new width * might have to be enlarged. * If the key type decreased in size: * - keys that have a group width > the old width don't have to be * resized (because they must have some other wider type associated * with some group). * + keys that have a group width == the old width might have to be * shrunk. * The possibilities marked with '+' require us to examine the key types * associated with each group for the key. */ bzero(matchingKeys, XkbMaxKeyCount * sizeof(KeyCode)); nMatchingKeys = 0; if (new_num_lvls > type->num_levels) { int nTotal; KeySym *newSyms; int width, match, nResize; register int i, g, nSyms; nResize = 0; for (nTotal = 1, i = xkb->min_key_code; i <= xkb->max_key_code; i++) { width = XkbKeyGroupsWidth(xkb, i); if (width < type->num_levels) continue; for (match = 0, g = XkbKeyNumGroups(xkb, i) - 1; (g >= 0) && (!match); g--) { if (XkbKeyKeyTypeIndex(xkb, i, g) == type_ndx) { matchingKeys[nMatchingKeys++] = i; match = 1; } } if ((!match) || (width >= new_num_lvls)) nTotal += XkbKeyNumSyms(xkb, i); else { nTotal += XkbKeyNumGroups(xkb, i) * new_num_lvls; nResize++; } } if (nResize > 0) { int nextMatch; xkb->map->size_syms = (nTotal * 12) / 10; newSyms = _XkbTypedCalloc(xkb->map->size_syms, KeySym); if (newSyms == NULL) return BadAlloc; nextMatch = 0; nSyms = 1; for (i = xkb->min_key_code; i <= xkb->max_key_code; i++) { if (matchingKeys[nextMatch] == i) { KeySym *pOld; nextMatch++; width = XkbKeyGroupsWidth(xkb, i); pOld = XkbKeySymsPtr(xkb, i); for (g = XkbKeyNumGroups(xkb, i) - 1; g >= 0; g--) { memcpy(&newSyms[nSyms + (new_num_lvls * g)], &pOld[width * g], width * sizeof(KeySym)); } xkb->map->key_sym_map[i].offset = nSyms; nSyms += XkbKeyNumGroups(xkb, i) * new_num_lvls; } else { memcpy(&newSyms[nSyms], XkbKeySymsPtr(xkb, i), XkbKeyNumSyms(xkb, i) * sizeof(KeySym)); xkb->map->key_sym_map[i].offset = nSyms; nSyms += XkbKeyNumSyms(xkb, i); } } type->num_levels = new_num_lvls; _XkbFree(xkb->map->syms); xkb->map->syms = newSyms; xkb->map->num_syms = nSyms; return Success; } } else if (new_num_lvls < type->num_levels) { int width, match; register int g, i; for (i = xkb->min_key_code; i <= xkb->max_key_code; i++) { width = XkbKeyGroupsWidth(xkb, i); if (width < type->num_levels) continue; for (match = 0, g = XkbKeyNumGroups(xkb, i) - 1; (g >= 0) && (!match); g--) { if (XkbKeyKeyTypeIndex(xkb, i, g) == type_ndx) { matchingKeys[nMatchingKeys++] = i; match = 1; } } } } if (nMatchingKeys > 0) { int key, firstClear; register int i, g; if (new_num_lvls > type->num_levels) firstClear = type->num_levels; else firstClear = new_num_lvls; for (i = 0; i < nMatchingKeys; i++) { KeySym *pSyms; int width, nClear; key = matchingKeys[i]; width = XkbKeyGroupsWidth(xkb, key); nClear = width - firstClear; pSyms = XkbKeySymsPtr(xkb, key); for (g = XkbKeyNumGroups(xkb, key) - 1; g >= 0; g--) { if (XkbKeyKeyTypeIndex(xkb, key, g) == type_ndx) { if (nClear > 0) bzero(&pSyms[g * width + firstClear], nClear * sizeof(KeySym)); } } } } type->num_levels = new_num_lvls; return Success; } KeySym * XkbResizeKeySyms(XkbDescPtr xkb, int key, int needed) { register int i, nSyms, nKeySyms; unsigned nOldSyms; KeySym *newSyms; if (needed == 0) { xkb->map->key_sym_map[key].offset = 0; return xkb->map->syms; } nOldSyms = XkbKeyNumSyms(xkb, key); if (nOldSyms >= (unsigned) needed) { return XkbKeySymsPtr(xkb, key); } if (xkb->map->size_syms - xkb->map->num_syms >= (unsigned) needed) { if (nOldSyms > 0) { memcpy(&xkb->map->syms[xkb->map->num_syms], XkbKeySymsPtr(xkb, key), nOldSyms * sizeof(KeySym)); } if ((needed - nOldSyms) > 0) { bzero(&xkb->map->syms[xkb->map->num_syms + XkbKeyNumSyms(xkb, key)], (needed - nOldSyms) * sizeof(KeySym)); } xkb->map->key_sym_map[key].offset = xkb->map->num_syms; xkb->map->num_syms += needed; return &xkb->map->syms[xkb->map->key_sym_map[key].offset]; } xkb->map->size_syms += (needed > 32 ? needed : 32); newSyms = _XkbTypedCalloc(xkb->map->size_syms, KeySym); if (newSyms == NULL) return NULL; newSyms[0] = NoSymbol; nSyms = 1; for (i = xkb->min_key_code; i <= (int) xkb->max_key_code; i++) { int nCopy; nCopy = nKeySyms = XkbKeyNumSyms(xkb, i); if ((nKeySyms == 0) && (i != key)) continue; if (i == key) nKeySyms = needed; if (nCopy != 0) memcpy(&newSyms[nSyms], XkbKeySymsPtr(xkb, i), nCopy * sizeof(KeySym)); if (nKeySyms > nCopy) bzero(&newSyms[nSyms + nCopy], (nKeySyms - nCopy) * sizeof(KeySym)); xkb->map->key_sym_map[i].offset = nSyms; nSyms += nKeySyms; } _XkbFree(xkb->map->syms); xkb->map->syms = newSyms; xkb->map->num_syms = nSyms; return &xkb->map->syms[xkb->map->key_sym_map[key].offset]; } static unsigned _ExtendRange(unsigned int old_flags, unsigned int flag, KeyCode newKC, KeyCode *old_min, unsigned char *old_num) { if ((old_flags & flag) == 0) { old_flags |= flag; *old_min = newKC; *old_num = 1; } else { int last = (*old_min) + (*old_num) - 1; if (newKC < *old_min) { *old_min = newKC; *old_num = (last - newKC) + 1; } else if (newKC > last) { *old_num = (newKC - (*old_min)) + 1; } } return old_flags; } Status XkbChangeKeycodeRange(XkbDescPtr xkb, int minKC, int maxKC, XkbChangesPtr changes) { int tmp; if ((!xkb) || (minKC < XkbMinLegalKeyCode) || (maxKC > XkbMaxLegalKeyCode)) return BadValue; if (minKC > maxKC) return BadMatch; if (minKC < xkb->min_key_code) { if (changes) changes->map.min_key_code = minKC; tmp = xkb->min_key_code - minKC; if (xkb->map) { if (xkb->map->key_sym_map) { bzero((char *) &xkb->map->key_sym_map[minKC], tmp * sizeof(XkbSymMapRec)); if (changes) { changes->map.changed = _ExtendRange(changes->map.changed, XkbKeySymsMask, minKC, &changes->map.first_key_sym, &changes->map.num_key_syms); } } if (xkb->map->modmap) { bzero((char *) &xkb->map->modmap[minKC], tmp); if (changes) { changes->map.changed = _ExtendRange(changes->map.changed, XkbModifierMapMask, minKC, &changes->map.first_modmap_key, &changes->map.num_modmap_keys); } } } if (xkb->server) { if (xkb->server->behaviors) { bzero((char *) &xkb->server->behaviors[minKC], tmp * sizeof(XkbBehavior)); if (changes) { changes->map.changed = _ExtendRange(changes->map.changed, XkbKeyBehaviorsMask, minKC, &changes->map.first_key_behavior, &changes->map.num_key_behaviors); } } if (xkb->server->key_acts) { bzero((char *) &xkb->server->key_acts[minKC], tmp * sizeof(unsigned short)); if (changes) { changes->map.changed = _ExtendRange(changes->map.changed, XkbKeyActionsMask, minKC, &changes->map.first_key_act, &changes->map.num_key_acts); } } if (xkb->server->vmodmap) { bzero((char *) &xkb->server->vmodmap[minKC], tmp * sizeof(unsigned short)); if (changes) { changes->map.changed = _ExtendRange(changes->map.changed, XkbVirtualModMapMask, minKC, &changes->map.first_modmap_key, &changes->map.num_vmodmap_keys); } } } if ((xkb->names) && (xkb->names->keys)) { bzero((char *) &xkb->names->keys[minKC], tmp * sizeof(XkbKeyNameRec)); if (changes) { changes->names.changed = _ExtendRange(changes->names.changed, XkbKeyNamesMask, minKC, &changes->names.first_key, &changes->names.num_keys); } } xkb->min_key_code = minKC; } if (maxKC > xkb->max_key_code) { if (changes) changes->map.max_key_code = maxKC; tmp = maxKC - xkb->max_key_code; if (xkb->map) { if (xkb->map->key_sym_map) { XkbSymMapRec *prev_key_sym_map = xkb->map->key_sym_map; xkb->map->key_sym_map = _XkbTypedRealloc(xkb->map->key_sym_map, (maxKC + 1), XkbSymMapRec); if (!xkb->map->key_sym_map) { _XkbFree(prev_key_sym_map); return BadAlloc; } bzero((char *) &xkb->map->key_sym_map[xkb->max_key_code], tmp * sizeof(XkbSymMapRec)); if (changes) { changes->map.changed = _ExtendRange(changes->map.changed, XkbKeySymsMask, maxKC, &changes->map.first_key_sym, &changes->map.num_key_syms); } } if (xkb->map->modmap) { unsigned char *prev_modmap = xkb->map->modmap; xkb->map->modmap = _XkbTypedRealloc(xkb->map->modmap, (maxKC + 1), unsigned char); if (!xkb->map->modmap) { _XkbFree(prev_modmap); return BadAlloc; } bzero((char *) &xkb->map->modmap[xkb->max_key_code], tmp); if (changes) { changes->map.changed = _ExtendRange(changes->map.changed, XkbModifierMapMask, maxKC, &changes->map.first_modmap_key, &changes->map.num_modmap_keys); } } } if (xkb->server) { if (xkb->server->behaviors) { XkbBehavior *prev_behaviors = xkb->server->behaviors; xkb->server->behaviors = _XkbTypedRealloc(xkb->server->behaviors, (maxKC + 1), XkbBehavior); if (!xkb->server->behaviors) { _XkbFree(prev_behaviors); return BadAlloc; } bzero((char *) &xkb->server->behaviors[xkb->max_key_code], tmp * sizeof(XkbBehavior)); if (changes) { changes->map.changed = _ExtendRange(changes->map.changed, XkbKeyBehaviorsMask, maxKC, &changes->map.first_key_behavior, &changes->map.num_key_behaviors); } } if (xkb->server->key_acts) { unsigned short *prev_key_acts = xkb->server->key_acts; xkb->server->key_acts = _XkbTypedRealloc(xkb->server->key_acts, (maxKC + 1), unsigned short); if (!xkb->server->key_acts) { _XkbFree(prev_key_acts); return BadAlloc; } bzero((char *) &xkb->server->key_acts[xkb->max_key_code], tmp * sizeof(unsigned short)); if (changes) { changes->map.changed = _ExtendRange(changes->map.changed, XkbKeyActionsMask, maxKC, &changes->map.first_key_act, &changes->map.num_key_acts); } } if (xkb->server->vmodmap) { unsigned short *prev_vmodmap = xkb->server->vmodmap; xkb->server->vmodmap = _XkbTypedRealloc(xkb->server->vmodmap, (maxKC + 1), unsigned short); if (!xkb->server->vmodmap) { _XkbFree(prev_vmodmap); return BadAlloc; } bzero((char *) &xkb->server->vmodmap[xkb->max_key_code], tmp * sizeof(unsigned short)); if (changes) { changes->map.changed = _ExtendRange(changes->map.changed, XkbVirtualModMapMask, maxKC, &changes->map.first_modmap_key, &changes->map.num_vmodmap_keys); } } } if ((xkb->names) && (xkb->names->keys)) { XkbKeyNameRec *prev_keys = xkb->names->keys; xkb->names->keys = _XkbTypedRealloc(xkb->names->keys, (maxKC + 1), XkbKeyNameRec); if (!xkb->names->keys) { _XkbFree(prev_keys); return BadAlloc; } bzero((char *) &xkb->names->keys[xkb->max_key_code], tmp * sizeof(XkbKeyNameRec)); if (changes) { changes->names.changed = _ExtendRange(changes->names.changed, XkbKeyNamesMask, maxKC, &changes->names.first_key, &changes->names.num_keys); } } xkb->max_key_code = maxKC; } return Success; } XkbAction * XkbResizeKeyActions(XkbDescPtr xkb, int key, int needed) { register int i, nActs; XkbAction *newActs; if (needed == 0) { xkb->server->key_acts[key] = 0; return NULL; } if (XkbKeyHasActions(xkb, key) && (XkbKeyNumSyms(xkb, key) >= (unsigned) needed)) return XkbKeyActionsPtr(xkb, key); if (xkb->server->size_acts - xkb->server->num_acts >= (unsigned) needed) { xkb->server->key_acts[key] = xkb->server->num_acts; xkb->server->num_acts += needed; return &xkb->server->acts[xkb->server->key_acts[key]]; } xkb->server->size_acts = xkb->server->num_acts + needed + 8; newActs = _XkbTypedCalloc(xkb->server->size_acts, XkbAction); if (newActs == NULL) return NULL; newActs[0].type = XkbSA_NoAction; nActs = 1; for (i = xkb->min_key_code; i <= (int) xkb->max_key_code; i++) { int nKeyActs, nCopy; if ((xkb->server->key_acts[i] == 0) && (i != key)) continue; nCopy = nKeyActs = XkbKeyNumActions(xkb, i); if (i == key) { nKeyActs = needed; if (needed < nCopy) nCopy = needed; } if (nCopy > 0) memcpy(&newActs[nActs], XkbKeyActionsPtr(xkb, i), nCopy * sizeof(XkbAction)); if (nCopy < nKeyActs) bzero(&newActs[nActs + nCopy], (nKeyActs - nCopy) * sizeof(XkbAction)); xkb->server->key_acts[i] = nActs; nActs += nKeyActs; } _XkbFree(xkb->server->acts); xkb->server->acts = newActs; xkb->server->num_acts = nActs; return &xkb->server->acts[xkb->server->key_acts[key]]; } void XkbFreeClientMap(XkbDescPtr xkb, unsigned what, Bool freeMap) { XkbClientMapPtr map; if ((xkb == NULL) || (xkb->map == NULL)) return; if (freeMap) what = XkbAllClientInfoMask; map = xkb->map; if (what & XkbKeyTypesMask) { if (map->types != NULL) { if (map->num_types > 0) { register int i; XkbKeyTypePtr type; for (i = 0, type = map->types; i < map->num_types; i++, type++) { _XkbFree(type->map); type->map = NULL; _XkbFree(type->preserve); type->preserve = NULL; type->map_count = 0; _XkbFree(type->level_names); type->level_names = NULL; } } _XkbFree(map->types); map->num_types = map->size_types = 0; map->types = NULL; } } if (what & XkbKeySymsMask) { _XkbFree(map->key_sym_map); map->key_sym_map = NULL; _XkbFree(map->syms); map->size_syms = map->num_syms = 0; map->syms = NULL; } if (what & XkbModifierMapMask) { _XkbFree(map->modmap); map->modmap = NULL; } if (freeMap) { _XkbFree(xkb->map); xkb->map = NULL; } return; } void XkbFreeServerMap(XkbDescPtr xkb, unsigned what, Bool freeMap) { XkbServerMapPtr map; if ((xkb == NULL) || (xkb->server == NULL)) return; if (freeMap) what = XkbAllServerInfoMask; map = xkb->server; if (what & XkbExplicitComponentsMask) { _XkbFree(map->explicit); map->explicit = NULL; } if (what & XkbKeyActionsMask) { _XkbFree(map->key_acts); map->key_acts = NULL; _XkbFree(map->acts); map->num_acts = map->size_acts = 0; map->acts = NULL; } if (what & XkbKeyBehaviorsMask) { _XkbFree(map->behaviors); map->behaviors = NULL; } if (what & XkbVirtualModMapMask) { _XkbFree(map->vmodmap); map->vmodmap = NULL; } if (freeMap) { _XkbFree(xkb->server); xkb->server = NULL; } return; } &changes->map.num_vmodmap_keys); } } } if ((xkb->names) && (xkb->names->keys)) { bzero((char *) &xkb->names->keys[minKC], tmp * sizeof(XkbKeyNameRec)); if (changes) { changes->names.changed = _ExtendRange(changes->names.changed, XkbKeyNamesMask, minKC, &libX11-1.6.3/src/xkb/XKB.c000064401431060000012000000556231247741723500152340ustar00alancstaff00002660200006/************************************************************ Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Silicon Graphics not be used in advertising or publicity pertaining to distribution of the software without specific prior written permission. Silicon Graphics makes no representation about the suitability of this software for any purpose. It is provided "as is" without any express or implied warranty. SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ********************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #include "Xlibint.h" #include #include "XKBlibint.h" XkbInternAtomFunc _XkbInternAtomFunc = XInternAtom; XkbGetAtomNameFunc _XkbGetAtomNameFunc = XGetAtomName; Bool XkbQueryExtension(Display *dpy, int *opcodeReturn, int *eventBaseReturn, int *errorBaseReturn, int *majorReturn, int *minorReturn) { if (!XkbUseExtension(dpy, majorReturn, minorReturn)) return False; if (opcodeReturn) *opcodeReturn = dpy->xkb_info->codes->major_opcode; if (eventBaseReturn) *eventBaseReturn = dpy->xkb_info->codes->first_event; if (errorBaseReturn) *errorBaseReturn = dpy->xkb_info->codes->first_error; if (majorReturn) *majorReturn = dpy->xkb_info->srv_major; if (minorReturn) *minorReturn = dpy->xkb_info->srv_minor; return True; } Bool XkbLibraryVersion(int *libMajorRtrn, int *libMinorRtrn) { int supported; if (*libMajorRtrn != XkbMajorVersion) { /* version 0.65 is (almost) compatible with 1.00 */ if ((XkbMajorVersion == 1) && (((*libMajorRtrn) == 0) && ((*libMinorRtrn) == 65))) supported = True; else supported = False; } else { supported = True; } *libMajorRtrn = XkbMajorVersion; *libMinorRtrn = XkbMinorVersion; return supported; } Bool XkbSelectEvents(Display *dpy, unsigned int deviceSpec, unsigned int affect, unsigned int selectAll) { register xkbSelectEventsReq *req; XkbInfoPtr xkbi; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return False; LockDisplay(dpy); xkbi = dpy->xkb_info; xkbi->selected_events &= ~affect; xkbi->selected_events |= (affect & selectAll); GetReq(kbSelectEvents, req); req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbSelectEvents; req->deviceSpec = deviceSpec; req->affectWhich = (CARD16) affect; req->clear = affect & (~selectAll); req->selectAll = affect & selectAll; if (affect & XkbMapNotifyMask) { req->affectMap = XkbAllMapComponentsMask; /* the implicit support needs the client info */ /* even if the client itself doesn't want it */ if (selectAll & XkbMapNotifyMask) req->map = XkbAllMapEventsMask; else req->map = XkbAllClientInfoMask; if (selectAll & XkbMapNotifyMask) xkbi->selected_map_details = XkbAllMapEventsMask; else xkbi->selected_map_details = 0; } if (affect & XkbNewKeyboardNotifyMask) { if (selectAll & XkbNewKeyboardNotifyMask) xkbi->selected_nkn_details = XkbAllNewKeyboardEventsMask; else xkbi->selected_nkn_details = 0; if (!(xkbi->xlib_ctrls & XkbLC_IgnoreNewKeyboards)) { /* we want it, even if the client doesn't. Don't mess */ /* around with details -- ask for all of them and throw */ /* away the ones we don't need */ req->selectAll |= XkbNewKeyboardNotifyMask; } } UnlockDisplay(dpy); SyncHandle(); return True; } Bool XkbSelectEventDetails(Display *dpy, unsigned deviceSpec, unsigned eventType, unsigned long int affect, unsigned long int details) { register xkbSelectEventsReq *req; XkbInfoPtr xkbi; int size = 0; char *out; union { CARD8 *c8; CARD16 *c16; CARD32 *c32; } u; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return False; LockDisplay(dpy); xkbi = dpy->xkb_info; if (affect & details) xkbi->selected_events |= (1 << eventType); else xkbi->selected_events &= ~(1 << eventType); GetReq(kbSelectEvents, req); req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbSelectEvents; req->deviceSpec = deviceSpec; req->clear = req->selectAll = 0; if (eventType == XkbMapNotify) { /* we need all of the client info, even if the application */ /* doesn't. Make sure that we always request the stuff */ /* that the implicit support needs, and just filter out anything */ /* the client doesn't want later */ req->affectMap = (CARD16) affect; req->map = (CARD16) details | (XkbAllClientInfoMask & affect); req->affectWhich = XkbMapNotifyMask; xkbi->selected_map_details &= ~affect; xkbi->selected_map_details |= (details & affect); } else { req->affectMap = req->map = 0; req->affectWhich = (1 << eventType); switch (eventType) { case XkbNewKeyboardNotify: xkbi->selected_nkn_details &= ~affect; xkbi->selected_nkn_details |= (details & affect); if (!(xkbi->xlib_ctrls & XkbLC_IgnoreNewKeyboards)) details = (affect & XkbAllNewKeyboardEventsMask); case XkbStateNotify: case XkbNamesNotify: case XkbAccessXNotify: case XkbExtensionDeviceNotify: size = 2; req->length += 1; break; case XkbControlsNotify: case XkbIndicatorStateNotify: case XkbIndicatorMapNotify: size = 4; req->length += 2; break; case XkbBellNotify: case XkbActionMessage: case XkbCompatMapNotify: size = 1; req->length += 1; break; } BufAlloc(char *, out, (((size * 2) + (unsigned) 3) / 4) * 4); u.c8 = (CARD8 *) out; if (size == 2) { u.c16[0] = (CARD16) affect; u.c16[1] = (CARD16) details; } else if (size == 4) { u.c32[0] = (CARD32) affect; u.c32[1] = (CARD32) details; } else { u.c8[0] = (CARD8) affect; u.c8[1] = (CARD8) details; } } UnlockDisplay(dpy); SyncHandle(); return True; } Bool XkbLockModifiers(Display *dpy, unsigned int deviceSpec, unsigned int affect, unsigned int values) { register xkbLatchLockStateReq *req; XkbInfoPtr xkbi; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return False; LockDisplay(dpy); xkbi = dpy->xkb_info; GetReq(kbLatchLockState, req); req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbLatchLockState; req->deviceSpec = deviceSpec; req->affectModLocks = affect; req->modLocks = values; req->lockGroup = False; req->groupLock = 0; req->affectModLatches = req->modLatches = 0; req->latchGroup = False; req->groupLatch = 0; UnlockDisplay(dpy); SyncHandle(); return True; } Bool XkbLatchModifiers(Display *dpy, unsigned int deviceSpec, unsigned int affect, unsigned int values) { register xkbLatchLockStateReq *req; XkbInfoPtr xkbi; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return False; LockDisplay(dpy); xkbi = dpy->xkb_info; GetReq(kbLatchLockState, req); req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbLatchLockState; req->deviceSpec = deviceSpec; req->affectModLatches = affect; req->modLatches = values; req->latchGroup = False; req->groupLatch = 0; req->affectModLocks = req->modLocks = 0; req->lockGroup = False; req->groupLock = 0; UnlockDisplay(dpy); SyncHandle(); return True; } Bool XkbLockGroup(Display *dpy, unsigned int deviceSpec, unsigned int group) { register xkbLatchLockStateReq *req; XkbInfoPtr xkbi; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return False; LockDisplay(dpy); xkbi = dpy->xkb_info; GetReq(kbLatchLockState, req); req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbLatchLockState; req->deviceSpec = deviceSpec; req->affectModLocks = 0; req->modLocks = 0; req->lockGroup = True; req->groupLock = group; req->affectModLatches = req->modLatches = 0; req->latchGroup = False; req->groupLatch = 0; UnlockDisplay(dpy); SyncHandle(); return True; } Bool XkbLatchGroup(Display *dpy, unsigned int deviceSpec, unsigned int group) { register xkbLatchLockStateReq *req; XkbInfoPtr xkbi; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return False; LockDisplay(dpy); xkbi = dpy->xkb_info; GetReq(kbLatchLockState, req); req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbLatchLockState; req->deviceSpec = deviceSpec; req->affectModLatches = 0; req->modLatches = 0; req->latchGroup = True; req->groupLatch = group; req->affectModLocks = req->modLocks = 0; req->lockGroup = False; req->groupLock = 0; UnlockDisplay(dpy); SyncHandle(); return True; } unsigned XkbSetXlibControls(Display *dpy, unsigned affect, unsigned values) { if (!dpy->xkb_info) XkbUseExtension(dpy, NULL, NULL); if (!dpy->xkb_info) return 0; affect &= XkbLC_AllControls; dpy->xkb_info->xlib_ctrls &= ~affect; dpy->xkb_info->xlib_ctrls |= (affect & values); return dpy->xkb_info->xlib_ctrls; } unsigned XkbGetXlibControls(Display *dpy) { if (!dpy->xkb_info) XkbUseExtension(dpy, NULL, NULL); if (!dpy->xkb_info) return 0; return dpy->xkb_info->xlib_ctrls; } unsigned int XkbXlibControlsImplemented(void) { #ifdef __sgi return XkbLC_AllControls; #else return XkbLC_AllControls & ~XkbLC_AllComposeControls; #endif } Bool XkbSetDebuggingFlags(Display *dpy, unsigned int mask, unsigned int flags, char *msg, unsigned int ctrls_mask, unsigned int ctrls, unsigned int *rtrn_flags, unsigned int *rtrn_ctrls) { register xkbSetDebuggingFlagsReq *req; xkbSetDebuggingFlagsReply rep; XkbInfoPtr xkbi; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return False; LockDisplay(dpy); xkbi = dpy->xkb_info; GetReq(kbSetDebuggingFlags, req); req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbSetDebuggingFlags; req->affectFlags = mask; req->flags = flags; req->affectCtrls = ctrls_mask; req->ctrls = ctrls; if (msg) { char *out; req->msgLength = (unsigned short) strlen(msg) + 1; req->length += (req->msgLength + (unsigned) 3) >> 2; BufAlloc(char *, out, ((req->msgLength + (unsigned) 3) / 4) * 4); memcpy(out, msg, req->msgLength); } else req->msgLength = 0; if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) { UnlockDisplay(dpy); SyncHandle(); return False; } if (rtrn_flags) *rtrn_flags = rep.currentFlags; if (rtrn_ctrls) *rtrn_ctrls = rep.currentCtrls; UnlockDisplay(dpy); SyncHandle(); return True; } Bool XkbComputeEffectiveMap(XkbDescPtr xkb, XkbKeyTypePtr type, unsigned char *map_rtrn) { register int i; unsigned tmp; XkbKTMapEntryPtr entry = NULL; if ((!xkb) || (!type) || (!xkb->server)) return False; if (type->mods.vmods != 0) { if (!XkbVirtualModsToReal(xkb, type->mods.vmods, &tmp)) return False; type->mods.mask = tmp | type->mods.real_mods; entry = type->map; for (i = 0; i < type->map_count; i++, entry++) { tmp = 0; if (entry->mods.vmods != 0) { if (!XkbVirtualModsToReal(xkb, entry->mods.vmods, &tmp)) return False; if (tmp == 0) { entry->active = False; continue; } } entry->active = True; entry->mods.mask = (entry->mods.real_mods | tmp) & type->mods.mask; } } else { type->mods.mask = type->mods.real_mods; } if (map_rtrn != NULL) { bzero(map_rtrn, type->mods.mask + 1); for (i = 0; i < type->map_count; i++) { if (entry && entry->active) { map_rtrn[type->map[i].mods.mask] = type->map[i].level; } } } return True; } Status XkbGetState(Display *dpy, unsigned deviceSpec, XkbStatePtr rtrn) { register xkbGetStateReq *req; xkbGetStateReply rep; XkbInfoPtr xkbi; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return BadAccess; LockDisplay(dpy); xkbi = dpy->xkb_info; GetReq(kbGetState, req); req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbGetState; req->deviceSpec = deviceSpec; if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) { UnlockDisplay(dpy); SyncHandle(); return BadImplementation; } rtrn->mods = rep.mods; rtrn->base_mods = rep.baseMods; rtrn->latched_mods = rep.latchedMods; rtrn->locked_mods = rep.lockedMods; rtrn->group = rep.group; rtrn->base_group = rep.baseGroup; rtrn->latched_group = rep.latchedGroup; rtrn->locked_group = rep.lockedGroup; rtrn->compat_state = rep.compatState; rtrn->grab_mods = rep.grabMods; rtrn->compat_grab_mods = rep.compatGrabMods; rtrn->lookup_mods = rep.lookupMods; rtrn->compat_lookup_mods = rep.compatLookupMods; rtrn->ptr_buttons = rep.ptrBtnState; UnlockDisplay(dpy); SyncHandle(); return Success; } Bool XkbSetDetectableAutoRepeat(Display *dpy, Bool detectable, Bool *supported) { register xkbPerClientFlagsReq *req; xkbPerClientFlagsReply rep; XkbInfoPtr xkbi; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return False; LockDisplay(dpy); xkbi = dpy->xkb_info; GetReq(kbPerClientFlags, req); req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbPerClientFlags; req->deviceSpec = XkbUseCoreKbd; req->change = XkbPCF_DetectableAutoRepeatMask; if (detectable) req->value = XkbPCF_DetectableAutoRepeatMask; else req->value = 0; req->ctrlsToChange = req->autoCtrls = req->autoCtrlValues = 0; if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) { UnlockDisplay(dpy); SyncHandle(); return False; } UnlockDisplay(dpy); SyncHandle(); if (supported != NULL) *supported = ((rep.supported & XkbPCF_DetectableAutoRepeatMask) != 0); return ((rep.value & XkbPCF_DetectableAutoRepeatMask) != 0); } Bool XkbGetDetectableAutoRepeat(Display *dpy, Bool *supported) { register xkbPerClientFlagsReq *req; xkbPerClientFlagsReply rep; XkbInfoPtr xkbi; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return False; LockDisplay(dpy); xkbi = dpy->xkb_info; GetReq(kbPerClientFlags, req); req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbPerClientFlags; req->deviceSpec = XkbUseCoreKbd; req->change = 0; req->value = 0; req->ctrlsToChange = req->autoCtrls = req->autoCtrlValues = 0; if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) { UnlockDisplay(dpy); SyncHandle(); return False; } UnlockDisplay(dpy); SyncHandle(); if (supported != NULL) *supported = ((rep.supported & XkbPCF_DetectableAutoRepeatMask) != 0); return ((rep.value & XkbPCF_DetectableAutoRepeatMask) != 0); } Bool XkbSetAutoResetControls(Display *dpy, unsigned changes, unsigned *auto_ctrls, unsigned *auto_values) { register xkbPerClientFlagsReq *req; xkbPerClientFlagsReply rep; XkbInfoPtr xkbi; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return False; LockDisplay(dpy); xkbi = dpy->xkb_info; GetReq(kbPerClientFlags, req); req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbPerClientFlags; req->change = XkbPCF_AutoResetControlsMask; req->deviceSpec = XkbUseCoreKbd; req->value = XkbPCF_AutoResetControlsMask; req->ctrlsToChange = changes; req->autoCtrls = *auto_ctrls; req->autoCtrlValues = *auto_values; if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) { UnlockDisplay(dpy); SyncHandle(); return False; } UnlockDisplay(dpy); SyncHandle(); *auto_ctrls = rep.autoCtrls; *auto_values = rep.autoCtrlValues; return ((rep.value & XkbPCF_AutoResetControlsMask) != 0); } Bool XkbGetAutoResetControls(Display *dpy, unsigned *auto_ctrls, unsigned *auto_ctrl_values) { register xkbPerClientFlagsReq *req; xkbPerClientFlagsReply rep; XkbInfoPtr xkbi; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return False; LockDisplay(dpy); xkbi = dpy->xkb_info; GetReq(kbPerClientFlags, req); req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbPerClientFlags; req->deviceSpec = XkbUseCoreKbd; req->change = 0; req->value = 0; req->ctrlsToChange = req->autoCtrls = req->autoCtrlValues = 0; if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) { UnlockDisplay(dpy); SyncHandle(); return False; } UnlockDisplay(dpy); SyncHandle(); if (auto_ctrls) *auto_ctrls = rep.autoCtrls; if (auto_ctrl_values) *auto_ctrl_values = rep.autoCtrlValues; return ((rep.value & XkbPCF_AutoResetControlsMask) != 0); } Bool XkbSetPerClientControls(Display *dpy, unsigned change, unsigned *values) { register xkbPerClientFlagsReq *req; xkbPerClientFlagsReply rep; XkbInfoPtr xkbi; unsigned value_hold = *values; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL)) || (change & ~(XkbPCF_GrabsUseXKBStateMask | XkbPCF_LookupStateWhenGrabbed | XkbPCF_SendEventUsesXKBState))) return False; LockDisplay(dpy); xkbi = dpy->xkb_info; GetReq(kbPerClientFlags, req); req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbPerClientFlags; req->change = change; req->deviceSpec = XkbUseCoreKbd; req->value = *values; req->ctrlsToChange = req->autoCtrls = req->autoCtrlValues = 0; if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) { UnlockDisplay(dpy); SyncHandle(); return False; } UnlockDisplay(dpy); SyncHandle(); *values = rep.value; return ((rep.value & value_hold) != 0); } Bool XkbGetPerClientControls(Display *dpy, unsigned *ctrls) { register xkbPerClientFlagsReq *req; xkbPerClientFlagsReply rep; XkbInfoPtr xkbi; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL)) || (ctrls == NULL)) return False; LockDisplay(dpy); xkbi = dpy->xkb_info; GetReq(kbPerClientFlags, req); req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbPerClientFlags; req->deviceSpec = XkbUseCoreKbd; req->change = 0; req->value = 0; req->ctrlsToChange = req->autoCtrls = req->autoCtrlValues = 0; if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) { UnlockDisplay(dpy); SyncHandle(); return False; } UnlockDisplay(dpy); SyncHandle(); *ctrls = (rep.value & (XkbPCF_GrabsUseXKBStateMask | XkbPCF_LookupStateWhenGrabbed | XkbPCF_SendEventUsesXKBState)); return (True); } Display * XkbOpenDisplay(char *name, int *ev_rtrn, int *err_rtrn, int *major_rtrn, int *minor_rtrn, int *reason) { Display *dpy; int major_num, minor_num; if ((major_rtrn != NULL) && (minor_rtrn != NULL)) { if (!XkbLibraryVersion(major_rtrn, minor_rtrn)) { if (reason != NULL) *reason = XkbOD_BadLibraryVersion; return NULL; } } else { major_num = XkbMajorVersion; minor_num = XkbMinorVersion; major_rtrn = &major_num; minor_rtrn = &minor_num; } dpy = XOpenDisplay(name); if (dpy == NULL) { if (reason != NULL) *reason = XkbOD_ConnectionRefused; return NULL; } if (!XkbQueryExtension(dpy, NULL, ev_rtrn, err_rtrn, major_rtrn, minor_rtrn)) { if (reason != NULL) { if ((*major_rtrn != 0) || (*minor_rtrn != 0)) *reason = XkbOD_BadServerVersion; else *reason = XkbOD_NonXkbServer; } XCloseDisplay(dpy); return NULL; } if (reason != NULL) *reason = XkbOD_Success; return dpy; } void XkbSetAtomFuncs(XkbInternAtomFunc getAtom, XkbGetAtomNameFunc getName) { _XkbInternAtomFunc = (getAtom ? getAtom : XInternAtom); _XkbGetAtomNameFunc = (getName ? getName : XGetAtomName); return; } = NULL; if ((!xkb) || (!type) || (!xkb->server)) return False; if (type->mods.vmods != 0) {libX11-1.6.3/src/xkb/XKBUse.c000064401431060000012000000742261247741723500157110ustar00alancstaff00002660200006/************************************************************ Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Silicon Graphics not be used in advertising or publicity pertaining to distribution of the software without specific prior written permission. Silicon Graphics makes no representation about the suitability of this software for any purpose. It is provided "as is" without any express or implied warranty. SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ********************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #include #include "Xlibint.h" #include #include "XKBlibint.h" static Bool _XkbIgnoreExtension = False; void XkbNoteMapChanges(XkbMapChangesPtr old, XkbMapNotifyEvent *new, unsigned wanted) { int first, oldLast, newLast; wanted &= new->changed; if (wanted & XkbKeyTypesMask) { if (old->changed & XkbKeyTypesMask) { first = old->first_type; oldLast = old->first_type + old->num_types - 1; newLast = new->first_type + new->num_types - 1; if (new->first_type < first) first = new->first_type; if (oldLast > newLast) newLast = oldLast; old->first_type = first; old->num_types = newLast - first + 1; } else { old->first_type = new->first_type; old->num_types = new->num_types; } } if (wanted & XkbKeySymsMask) { if (old->changed & XkbKeySymsMask) { first = old->first_key_sym; oldLast = old->first_key_sym + old->num_key_syms - 1; newLast = new->first_key_sym + new->num_key_syms - 1; if (new->first_key_sym < first) first = new->first_key_sym; if (oldLast > newLast) newLast = oldLast; old->first_key_sym = first; old->num_key_syms = newLast - first + 1; } else { old->first_key_sym = new->first_key_sym; old->num_key_syms = new->num_key_syms; } } if (wanted & XkbKeyActionsMask) { if (old->changed & XkbKeyActionsMask) { first = old->first_key_act; oldLast = old->first_key_act + old->num_key_acts - 1; newLast = new->first_key_act + new->num_key_acts - 1; if (new->first_key_act < first) first = new->first_key_act; if (oldLast > newLast) newLast = oldLast; old->first_key_act = first; old->num_key_acts = newLast - first + 1; } else { old->first_key_act = new->first_key_act; old->num_key_acts = new->num_key_acts; } } if (wanted & XkbKeyBehaviorsMask) { if (old->changed & XkbKeyBehaviorsMask) { first = old->first_key_behavior; oldLast = old->first_key_behavior + old->num_key_behaviors - 1; newLast = new->first_key_behavior + new->num_key_behaviors - 1; if (new->first_key_behavior < first) first = new->first_key_behavior; if (oldLast > newLast) newLast = oldLast; old->first_key_behavior = first; old->num_key_behaviors = newLast - first + 1; } else { old->first_key_behavior = new->first_key_behavior; old->num_key_behaviors = new->num_key_behaviors; } } if (wanted & XkbVirtualModsMask) { old->vmods |= new->vmods; } if (wanted & XkbExplicitComponentsMask) { if (old->changed & XkbExplicitComponentsMask) { first = old->first_key_explicit; oldLast = old->first_key_explicit + old->num_key_explicit - 1; newLast = new->first_key_explicit + new->num_key_explicit - 1; if (new->first_key_explicit < first) first = new->first_key_explicit; if (oldLast > newLast) newLast = oldLast; old->first_key_explicit = first; old->num_key_explicit = newLast - first + 1; } else { old->first_key_explicit = new->first_key_explicit; old->num_key_explicit = new->num_key_explicit; } } if (wanted & XkbModifierMapMask) { if (old->changed & XkbModifierMapMask) { first = old->first_modmap_key; oldLast = old->first_modmap_key + old->num_modmap_keys - 1; newLast = new->first_modmap_key + new->num_modmap_keys - 1; if (new->first_modmap_key < first) first = new->first_modmap_key; if (oldLast > newLast) newLast = oldLast; old->first_modmap_key = first; old->num_modmap_keys = newLast - first + 1; } else { old->first_modmap_key = new->first_modmap_key; old->num_modmap_keys = new->num_modmap_keys; } } if (wanted & XkbVirtualModMapMask) { if (old->changed & XkbVirtualModMapMask) { first = old->first_vmodmap_key; oldLast = old->first_vmodmap_key + old->num_vmodmap_keys - 1; newLast = new->first_vmodmap_key + new->num_vmodmap_keys - 1; if (new->first_vmodmap_key < first) first = new->first_vmodmap_key; if (oldLast > newLast) newLast = oldLast; old->first_vmodmap_key = first; old->num_vmodmap_keys = newLast - first + 1; } else { old->first_vmodmap_key = new->first_vmodmap_key; old->num_vmodmap_keys = new->num_vmodmap_keys; } } old->changed |= wanted; return; } void _XkbNoteCoreMapChanges(XkbMapChangesPtr old, XMappingEvent *new, unsigned int wanted) { int first, oldLast, newLast; if ((new->request == MappingKeyboard) && (wanted & XkbKeySymsMask)) { if (old->changed & XkbKeySymsMask) { first = old->first_key_sym; oldLast = old->first_key_sym + old->num_key_syms - 1; newLast = new->first_keycode + new->count - 1; if (new->first_keycode < first) first = new->first_keycode; if (oldLast > newLast) newLast = oldLast; old->first_key_sym = first; old->num_key_syms = newLast - first + 1; } else { old->changed |= XkbKeySymsMask; old->first_key_sym = new->first_keycode; old->num_key_syms = new->count; } } return; } static Bool wire_to_event(Display *dpy, XEvent *re, xEvent *event) { xkbEvent *xkbevent = (xkbEvent *) event; XkbInfoPtr xkbi; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return False; xkbi = dpy->xkb_info; if (((event->u.u.type & 0x7f) - xkbi->codes->first_event) != XkbEventCode) return False; switch (xkbevent->u.any.xkbType) { case XkbStateNotify: { xkbStateNotify *sn = (xkbStateNotify *) event; if (xkbi->selected_events & XkbStateNotifyMask) { XkbStateNotifyEvent *sev = (XkbStateNotifyEvent *) re; sev->type = XkbEventCode + xkbi->codes->first_event; sev->xkb_type = XkbStateNotify; sev->serial = _XSetLastRequestRead(dpy, (xGenericReply *) event); sev->send_event = ((event->u.u.type & 0x80) != 0); sev->display = dpy; sev->time = sn->time; sev->device = sn->deviceID; sev->keycode = sn->keycode; sev->event_type = sn->eventType; sev->req_major = sn->requestMajor; sev->req_minor = sn->requestMinor; sev->changed = sn->changed; sev->group = sn->group; sev->base_group = sn->baseGroup; sev->latched_group = sn->latchedGroup; sev->locked_group = sn->lockedGroup; sev->mods = sn->mods; sev->base_mods = sn->baseMods; sev->latched_mods = sn->latchedMods; sev->locked_mods = sn->lockedMods; sev->compat_state = sn->compatState; sev->grab_mods = sn->grabMods; sev->compat_grab_mods = sn->compatGrabMods; sev->lookup_mods = sn->lookupMods; sev->compat_lookup_mods = sn->compatLookupMods; sev->ptr_buttons = sn->ptrBtnState; return True; } } break; case XkbMapNotify: { xkbMapNotify *mn = (xkbMapNotify *) event; if ((xkbi->selected_events & XkbMapNotifyMask) && (xkbi->selected_map_details & mn->changed)) { XkbMapNotifyEvent *mev = (XkbMapNotifyEvent *) re; mev->type = XkbEventCode + xkbi->codes->first_event; mev->xkb_type = XkbMapNotify; mev->serial = _XSetLastRequestRead(dpy, (xGenericReply *) event); mev->send_event = ((event->u.u.type & 0x80) != 0); mev->display = dpy; mev->time = mn->time; mev->device = mn->deviceID; mev->changed = mn->changed; mev->min_key_code = mn->minKeyCode; mev->max_key_code = mn->maxKeyCode; mev->first_type = mn->firstType; mev->num_types = mn->nTypes; mev->first_key_sym = mn->firstKeySym; mev->num_key_syms = mn->nKeySyms; mev->first_key_act = mn->firstKeyAct; mev->num_key_acts = mn->nKeyActs; mev->first_key_behavior = mn->firstKeyBehavior; mev->num_key_behaviors = mn->nKeyBehaviors; mev->vmods = mn->virtualMods; mev->first_key_explicit = mn->firstKeyExplicit; mev->num_key_explicit = mn->nKeyExplicit; mev->first_modmap_key = mn->firstModMapKey; mev->num_modmap_keys = mn->nModMapKeys; mev->first_vmodmap_key = mn->firstVModMapKey; mev->num_vmodmap_keys = mn->nVModMapKeys; XkbNoteMapChanges(&xkbi->changes, mev, XKB_XLIB_MAP_MASK); if (xkbi->changes.changed) xkbi->flags |= XkbMapPending; return True; } else if (mn->nKeySyms > 0) { register XMappingEvent *ev = (XMappingEvent *) re; ev->type = MappingNotify; ev->serial = _XSetLastRequestRead(dpy, (xGenericReply *) event); ev->send_event = ((event->u.u.type & 0x80) != 0); ev->display = dpy; ev->window = 0; ev->first_keycode = mn->firstKeySym; ev->request = MappingKeyboard; ev->count = mn->nKeySyms; _XkbNoteCoreMapChanges(&xkbi->changes, ev, XKB_XLIB_MAP_MASK); if (xkbi->changes.changed) xkbi->flags |= XkbMapPending; return True; } } break; case XkbControlsNotify: { if (xkbi->selected_events & XkbControlsNotifyMask) { xkbControlsNotify *cn = (xkbControlsNotify *) event; XkbControlsNotifyEvent *cev = (XkbControlsNotifyEvent *) re; cev->type = XkbEventCode + xkbi->codes->first_event; cev->xkb_type = XkbControlsNotify; cev->serial = _XSetLastRequestRead(dpy, (xGenericReply *) event); cev->send_event = ((event->u.u.type & 0x80) != 0); cev->display = dpy; cev->time = cn->time; cev->device = cn->deviceID; cev->changed_ctrls = cn->changedControls; cev->enabled_ctrls = cn->enabledControls; cev->enabled_ctrl_changes = cn->enabledControlChanges; cev->keycode = cn->keycode; cev->num_groups = cn->numGroups; cev->event_type = cn->eventType; cev->req_major = cn->requestMajor; cev->req_minor = cn->requestMinor; return True; } } break; case XkbIndicatorMapNotify: { if (xkbi->selected_events & XkbIndicatorMapNotifyMask) { xkbIndicatorNotify *in = (xkbIndicatorNotify *) event; XkbIndicatorNotifyEvent *iev = (XkbIndicatorNotifyEvent *) re; iev->type = XkbEventCode + xkbi->codes->first_event; iev->xkb_type = XkbIndicatorMapNotify; iev->serial = _XSetLastRequestRead(dpy, (xGenericReply *) event); iev->send_event = ((event->u.u.type & 0x80) != 0); iev->display = dpy; iev->time = in->time; iev->device = in->deviceID; iev->changed = in->changed; iev->state = in->state; return True; } } break; case XkbIndicatorStateNotify: { if (xkbi->selected_events & XkbIndicatorStateNotifyMask) { xkbIndicatorNotify *in = (xkbIndicatorNotify *) event; XkbIndicatorNotifyEvent *iev = (XkbIndicatorNotifyEvent *) re; iev->type = XkbEventCode + xkbi->codes->first_event; iev->xkb_type = XkbIndicatorStateNotify; iev->serial = _XSetLastRequestRead(dpy, (xGenericReply *) event); iev->send_event = ((event->u.u.type & 0x80) != 0); iev->display = dpy; iev->time = in->time; iev->device = in->deviceID; iev->changed = in->changed; iev->state = in->state; return True; } } break; case XkbBellNotify: { if (xkbi->selected_events & XkbBellNotifyMask) { xkbBellNotify *bn = (xkbBellNotify *) event; XkbBellNotifyEvent *bev = (XkbBellNotifyEvent *) re; bev->type = XkbEventCode + xkbi->codes->first_event; bev->xkb_type = XkbBellNotify; bev->serial = _XSetLastRequestRead(dpy, (xGenericReply *) event); bev->send_event = ((event->u.u.type & 0x80) != 0); bev->display = dpy; bev->time = bn->time; bev->device = bn->deviceID; bev->percent = bn->percent; bev->pitch = bn->pitch; bev->duration = bn->duration; bev->bell_class = bn->bellClass; bev->bell_id = bn->bellID; bev->name = bn->name; bev->window = bn->window; bev->event_only = bn->eventOnly; return True; } } break; case XkbAccessXNotify: { if (xkbi->selected_events & XkbAccessXNotifyMask) { xkbAccessXNotify *axn = (xkbAccessXNotify *) event; XkbAccessXNotifyEvent *axev = (XkbAccessXNotifyEvent *) re; axev->type = XkbEventCode + xkbi->codes->first_event; axev->xkb_type = XkbAccessXNotify; axev->serial = _XSetLastRequestRead(dpy, (xGenericReply *) event); axev->send_event = ((event->u.u.type & 0x80) != 0); axev->display = dpy; axev->time = axn->time; axev->device = axn->deviceID; axev->detail = axn->detail; axev->keycode = axn->keycode; axev->sk_delay = axn->slowKeysDelay; axev->debounce_delay = axn->debounceDelay; return True; } } break; case XkbNamesNotify: { if (xkbi->selected_events & XkbNamesNotifyMask) { xkbNamesNotify *nn = (xkbNamesNotify *) event; XkbNamesNotifyEvent *nev = (XkbNamesNotifyEvent *) re; nev->type = XkbEventCode + xkbi->codes->first_event; nev->xkb_type = XkbNamesNotify; nev->serial = _XSetLastRequestRead(dpy, (xGenericReply *) event); nev->send_event = ((event->u.u.type & 0x80) != 0); nev->display = dpy; nev->time = nn->time; nev->device = nn->deviceID; nev->changed = nn->changed; nev->first_type = nn->firstType; nev->num_types = nn->nTypes; nev->first_lvl = nn->firstLevelName; nev->num_lvls = nn->nLevelNames; nev->num_aliases = nn->nAliases; nev->num_radio_groups = nn->nRadioGroups; nev->changed_vmods = nn->changedVirtualMods; nev->changed_groups = nn->changedGroupNames; nev->changed_indicators = nn->changedIndicators; nev->first_key = nn->firstKey; nev->num_keys = nn->nKeys; return True; } } break; case XkbCompatMapNotify: { if (xkbi->selected_events & XkbCompatMapNotifyMask) { xkbCompatMapNotify *cmn = (xkbCompatMapNotify *) event; XkbCompatMapNotifyEvent *cmev = (XkbCompatMapNotifyEvent *) re; cmev->type = XkbEventCode + xkbi->codes->first_event; cmev->xkb_type = XkbCompatMapNotify; cmev->serial = _XSetLastRequestRead(dpy, (xGenericReply *) event); cmev->send_event = ((event->u.u.type & 0x80) != 0); cmev->display = dpy; cmev->time = cmn->time; cmev->device = cmn->deviceID; cmev->changed_groups = cmn->changedGroups; cmev->first_si = cmn->firstSI; cmev->num_si = cmn->nSI; cmev->num_total_si = cmn->nTotalSI; return True; } } break; case XkbActionMessage: { if (xkbi->selected_events & XkbActionMessageMask) { xkbActionMessage *am = (xkbActionMessage *) event; XkbActionMessageEvent *amev = (XkbActionMessageEvent *) re; amev->type = XkbEventCode + xkbi->codes->first_event; amev->xkb_type = XkbActionMessage; amev->serial = _XSetLastRequestRead(dpy, (xGenericReply *) event); amev->send_event = ((event->u.u.type & 0x80) != 0); amev->display = dpy; amev->time = am->time; amev->device = am->deviceID; amev->keycode = am->keycode; amev->press = am->press; amev->key_event_follows = am->keyEventFollows; amev->group = am->group; amev->mods = am->mods; memcpy(amev->message, am->message, XkbActionMessageLength); amev->message[XkbActionMessageLength] = '\0'; return True; } } break; case XkbExtensionDeviceNotify: { if (xkbi->selected_events & XkbExtensionDeviceNotifyMask) { xkbExtensionDeviceNotify *ed = (xkbExtensionDeviceNotify *) event; XkbExtensionDeviceNotifyEvent *edev = (XkbExtensionDeviceNotifyEvent *) re; edev->type = XkbEventCode + xkbi->codes->first_event; edev->xkb_type = XkbExtensionDeviceNotify; edev->serial = _XSetLastRequestRead(dpy, (xGenericReply *) event); edev->send_event = ((event->u.u.type & 0x80) != 0); edev->display = dpy; edev->time = ed->time; edev->device = ed->deviceID; edev->led_class = ed->ledClass; edev->led_id = ed->ledID; edev->reason = ed->reason; edev->supported = ed->supported; edev->leds_defined = ed->ledsDefined; edev->led_state = ed->ledState; edev->first_btn = ed->firstBtn; edev->num_btns = ed->nBtns; edev->unsupported = ed->unsupported; return True; } } break; case XkbNewKeyboardNotify: { xkbNewKeyboardNotify *nkn = (xkbNewKeyboardNotify *) event; if ((xkbi->selected_events & XkbNewKeyboardNotifyMask) && (xkbi->selected_nkn_details & nkn->changed)) { XkbNewKeyboardNotifyEvent *nkev = (XkbNewKeyboardNotifyEvent *) re; nkev->type = XkbEventCode + xkbi->codes->first_event; nkev->xkb_type = XkbNewKeyboardNotify; nkev->serial = _XSetLastRequestRead(dpy, (xGenericReply *) event); nkev->send_event = ((event->u.u.type & 0x80) != 0); nkev->display = dpy; nkev->time = nkn->time; nkev->device = nkn->deviceID; nkev->old_device = nkn->oldDeviceID; nkev->min_key_code = nkn->minKeyCode; nkev->max_key_code = nkn->maxKeyCode; nkev->old_min_key_code = nkn->oldMinKeyCode; nkev->old_max_key_code = nkn->oldMaxKeyCode; nkev->req_major = nkn->requestMajor; nkev->req_minor = nkn->requestMinor; nkev->changed = nkn->changed; if ((xkbi->desc) && (nkev->send_event == 0) && ((xkbi->desc->device_spec == nkev->old_device) || (nkev->device != nkev->old_device))) { xkbi->flags = XkbMapPending | XkbXlibNewKeyboard; } return True; } else if (nkn->changed & (XkbNKN_KeycodesMask | XkbNKN_DeviceIDMask)) { register XMappingEvent *ev = (XMappingEvent *) re; ev->type = MappingNotify; ev->serial = _XSetLastRequestRead(dpy, (xGenericReply *) event); ev->send_event = ((event->u.u.type & 0x80) != 0); ev->display = dpy; ev->window = 0; ev->first_keycode = dpy->min_keycode; ev->request = MappingKeyboard; ev->count = (dpy->max_keycode - dpy->min_keycode) + 1; if ((xkbi->desc) && (ev->send_event == 0) && ((xkbi->desc->device_spec == nkn->oldDeviceID) || (nkn->deviceID != nkn->oldDeviceID))) { xkbi->flags |= XkbMapPending | XkbXlibNewKeyboard; } return True; } } break; default: #ifdef DEBUG fprintf(stderr, "Got unknown XKEYBOARD event (%d, base=%d)\n", re->type, xkbi->codes->first_event); #endif break; } return False; } Bool XkbIgnoreExtension(Bool ignore) { if (getenv("XKB_FORCE") != NULL) { #ifdef DEBUG fprintf(stderr, "Forcing use of XKEYBOARD (overriding an IgnoreExtensions)\n"); #endif return False; } #ifdef DEBUG else if (getenv("XKB_DEBUG") != NULL) { fprintf(stderr, "Explicitly %signoring XKEYBOARD\n", ignore ? "" : "not "); } #endif _XkbIgnoreExtension = ignore; return True; } static void _XkbFreeInfo(Display *dpy) { XkbInfoPtr xkbi = dpy->xkb_info; if (xkbi) { if (xkbi->desc) XkbFreeKeyboard(xkbi->desc, XkbAllComponentsMask, True); Xfree(xkbi); } } Bool XkbUseExtension(Display *dpy, int *major_rtrn, int *minor_rtrn) { xkbUseExtensionReply rep; register xkbUseExtensionReq *req; XExtCodes *codes; int ev_base, forceIgnore; XkbInfoPtr xkbi; char *str; static int debugMsg; static int been_here = 0; if (dpy->xkb_info && !(dpy->flags & XlibDisplayNoXkb)) { if (major_rtrn) *major_rtrn = dpy->xkb_info->srv_major; if (minor_rtrn) *minor_rtrn = dpy->xkb_info->srv_minor; return True; } if (!been_here) { debugMsg = (getenv("XKB_DEBUG") != NULL); been_here = 1; } if (major_rtrn) *major_rtrn = 0; if (minor_rtrn) *minor_rtrn = 0; if (!dpy->xkb_info) { xkbi = _XkbTypedCalloc(1, XkbInfoRec); if (!xkbi) return False; dpy->xkb_info = xkbi; dpy->free_funcs->xkb = _XkbFreeInfo; xkbi->xlib_ctrls |= (XkbLC_ControlFallback | XkbLC_ConsumeLookupMods); if ((str = getenv("_XKB_OPTIONS_ENABLE")) != NULL) { if ((str = getenv("_XKB_LATIN1_LOOKUP")) != NULL) { if ((strcmp(str, "off") == 0) || (strcmp(str, "0") == 0)) xkbi->xlib_ctrls &= ~XkbLC_ForceLatin1Lookup; else xkbi->xlib_ctrls |= XkbLC_ForceLatin1Lookup; } if ((str = getenv("_XKB_CONSUME_LOOKUP_MODS")) != NULL) { if ((strcmp(str, "off") == 0) || (strcmp(str, "0") == 0)) xkbi->xlib_ctrls &= ~XkbLC_ConsumeLookupMods; else xkbi->xlib_ctrls |= XkbLC_ConsumeLookupMods; } if ((str = getenv("_XKB_CONSUME_SHIFT_AND_LOCK")) != NULL) { if ((strcmp(str, "off") == 0) || (strcmp(str, "0") == 0)) xkbi->xlib_ctrls &= ~XkbLC_AlwaysConsumeShiftAndLock; else xkbi->xlib_ctrls |= XkbLC_AlwaysConsumeShiftAndLock; } if ((str = getenv("_XKB_IGNORE_NEW_KEYBOARDS")) != NULL) { if ((strcmp(str, "off") == 0) || (strcmp(str, "0") == 0)) xkbi->xlib_ctrls &= ~XkbLC_IgnoreNewKeyboards; else xkbi->xlib_ctrls |= XkbLC_IgnoreNewKeyboards; } if ((str = getenv("_XKB_CONTROL_FALLBACK")) != NULL) { if ((strcmp(str, "off") == 0) || (strcmp(str, "0") == 0)) xkbi->xlib_ctrls &= ~XkbLC_ControlFallback; else xkbi->xlib_ctrls |= XkbLC_ControlFallback; } if ((str = getenv("_XKB_COMP_LED")) != NULL) { if ((strcmp(str, "off") == 0) || (strcmp(str, "0") == 0)) xkbi->xlib_ctrls &= ~XkbLC_ComposeLED; else { xkbi->xlib_ctrls |= XkbLC_ComposeLED; if (strlen(str) > 0) xkbi->composeLED = XInternAtom(dpy, str, False); } } if ((str = getenv("_XKB_COMP_FAIL_BEEP")) != NULL) { if ((strcmp(str, "off") == 0) || (strcmp(str, "0") == 0)) xkbi->xlib_ctrls &= ~XkbLC_BeepOnComposeFail; else xkbi->xlib_ctrls |= XkbLC_BeepOnComposeFail; } } if ((xkbi->composeLED == None) && ((xkbi->xlib_ctrls & XkbLC_ComposeLED) != 0)) xkbi->composeLED = XInternAtom(dpy, "Compose", False); #ifdef DEBUG if (debugMsg) { register unsigned c = xkbi->xlib_ctrls; fprintf(stderr, "XKEYBOARD compose: beep on failure is %s, LED is %s\n", ((c & XkbLC_BeepOnComposeFail) ? "on" : "off"), ((c & XkbLC_ComposeLED) ? "on" : "off")); fprintf(stderr, "XKEYBOARD XLookupString: %slatin-1, %s lookup modifiers\n", ((c & XkbLC_ForceLatin1Lookup) ? "allow non-" : "force "), ((c & XkbLC_ConsumeLookupMods) ? "consume" : "re-use")); fprintf(stderr, "XKEYBOARD XLookupString: %sconsume shift and lock, %scontrol fallback\n", ((c & XkbLC_AlwaysConsumeShiftAndLock) ? "always " : "don't "), ((c & XkbLC_ControlFallback) ? "" : "no ")); } #endif } else xkbi = dpy->xkb_info; forceIgnore = (dpy->flags & XlibDisplayNoXkb) || dpy->keysyms; forceIgnore = forceIgnore && (major_rtrn == NULL) && (minor_rtrn == NULL); if (forceIgnore || _XkbIgnoreExtension || getenv("XKB_DISABLE")) { LockDisplay(dpy); dpy->flags |= XlibDisplayNoXkb; UnlockDisplay(dpy); if (debugMsg) fprintf(stderr, "XKEYBOARD extension disabled or missing\n"); return False; } if ((codes = XInitExtension(dpy, XkbName)) == NULL) { LockDisplay(dpy); dpy->flags |= XlibDisplayNoXkb; UnlockDisplay(dpy); if (debugMsg) fprintf(stderr, "XKEYBOARD extension not present\n"); return False; } xkbi->codes = codes; LockDisplay(dpy); GetReq(kbUseExtension, req); req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbUseExtension; req->wantedMajor = XkbMajorVersion; req->wantedMinor = XkbMinorVersion; if (!_XReply(dpy, (xReply *) &rep, 0, xFalse) || !rep.supported) { Bool fail = True; if (debugMsg) fprintf(stderr, "XKEYBOARD version mismatch (want %d.%02d, got %d.%02d)\n", XkbMajorVersion, XkbMinorVersion, rep.serverMajor, rep.serverMinor); /* pre-release 0.65 is very close to 1.00 */ if ((rep.serverMajor == 0) && (rep.serverMinor == 65)) { if (debugMsg) fprintf(stderr, "Trying to fall back to version 0.65..."); GetReq(kbUseExtension, req); req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbUseExtension; req->wantedMajor = 0; req->wantedMinor = 65; if (_XReply(dpy, (xReply *) &rep, 0, xFalse) && rep.supported) { if (debugMsg) fprintf(stderr, "succeeded\n"); fail = False; } else if (debugMsg) fprintf(stderr, "failed\n"); } if (fail) { dpy->flags |= XlibDisplayNoXkb; UnlockDisplay(dpy); SyncHandle(); if (major_rtrn) *major_rtrn = rep.serverMajor; if (minor_rtrn) *minor_rtrn = rep.serverMinor; return False; } } #ifdef DEBUG else if (forceIgnore) { fprintf(stderr, "Internal Error! XkbUseExtension succeeded with forceIgnore set\n"); } #endif UnlockDisplay(dpy); xkbi->srv_major = rep.serverMajor; xkbi->srv_minor = rep.serverMinor; if (major_rtrn) *major_rtrn = rep.serverMajor; if (minor_rtrn) *minor_rtrn = rep.serverMinor; if (debugMsg) fprintf(stderr, "XKEYBOARD (version %d.%02d/%d.%02d) OK!\n", XkbMajorVersion, XkbMinorVersion, rep.serverMajor, rep.serverMinor); ev_base = codes->first_event; XESetWireToEvent(dpy, ev_base + XkbEventCode, wire_to_event); SyncHandle(); return True; } bEventCode + xkbi->codes->first_event; nkev->xkb_type = XkbNewKeyboardNotify; nkev->serial = _XSetLastRequestRead(dpy, (xGenericReply *) event); nkev->send_event = ((event->u.u.type & 0x80) != 0); nkev->display = dpy; nkev->time = nkn->time; nkev->device = nkn->deviceID; nkev->libX11-1.6.3/src/xkb/XKBExtDev.c000064401431060000012000000645301247741723500163510ustar00alancstaff00002660200006/************************************************************ Copyright (c) 1995 by Silicon Graphics Computer Systems, Inc. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Silicon Graphics not be used in advertising or publicity pertaining to distribution of the software without specific prior written permission. Silicon Graphics makes no representation about the suitability of this software for any purpose. It is provided "as is" without any express or implied warranty. SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ********************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #define NEED_MAP_READERS #include "Xlibint.h" #include #include "XKBlibint.h" #include /***====================================================================***/ extern void XkbNoteDeviceChanges(XkbDeviceChangesPtr old, XkbExtensionDeviceNotifyEvent *new, unsigned int wanted) { if ((!old) || (!new) || (!wanted) || ((new->reason & wanted) == 0)) return; if ((wanted & new->reason) & XkbXI_ButtonActionsMask) { if (old->changed & XkbXI_ButtonActionsMask) { int first, last, newLast; if (new->first_btn < old->first_btn) first = new->first_btn; else first = old->first_btn; last = old->first_btn + old->num_btns - 1; newLast = new->first_btn + new->num_btns - 1; if (newLast > last) last = newLast; old->first_btn = first; old->num_btns = (last - first) + 1; } else { old->changed |= XkbXI_ButtonActionsMask; old->first_btn = new->first_btn; old->num_btns = new->num_btns; } } if ((wanted & new->reason) & XkbXI_IndicatorsMask) { XkbDeviceLedChangesPtr this; if (old->changed & XkbXI_IndicatorsMask) { XkbDeviceLedChangesPtr found = NULL; for (this = &old->leds; this && (!found); this = this->next) { if ((this->led_class == new->led_class) && (this->led_id == new->led_id)) { found = this; } } if (!found) { found = _XkbTypedCalloc(1, XkbDeviceLedChangesRec); if (!found) return; found->next = old->leds.next; found->led_class = new->led_class; found->led_id = new->led_id; old->leds.next = found; } if ((wanted & new->reason) & XkbXI_IndicatorNamesMask) found->defined = new->leds_defined; } else { old->changed |= ((wanted & new->reason) & XkbXI_IndicatorsMask); old->leds.led_class = new->led_class; old->leds.led_id = new->led_id; old->leds.defined = new->leds_defined; if (old->leds.next) { XkbDeviceLedChangesPtr next; for (this = old->leds.next; this; this = next) { next = this->next; _XkbFree(this); } old->leds.next = NULL; } } } return; } /***====================================================================***/ static Status _XkbReadDeviceLedInfo(XkbReadBufferPtr buf, unsigned present, XkbDeviceInfoPtr devi) { register unsigned i, bit; XkbDeviceLedInfoPtr devli; xkbDeviceLedsWireDesc *wireli; wireli = _XkbGetTypedRdBufPtr(buf, 1, xkbDeviceLedsWireDesc); if (!wireli) return BadLength; devli = XkbAddDeviceLedInfo(devi, wireli->ledClass, wireli->ledID); if (!devli) return BadAlloc; devli->phys_indicators = wireli->physIndicators; if (present & XkbXI_IndicatorStateMask) devli->state = wireli->state; if (present & XkbXI_IndicatorNamesMask) { devli->names_present = wireli->namesPresent; if (devli->names_present) { for (i = 0, bit = 1; i < XkbNumIndicators; i++, bit <<= 1) { if (wireli->namesPresent & bit) { if (!_XkbCopyFromReadBuffer(buf, (char *) &devli->names[i], 4)) return BadLength; } } } } if (present & XkbXI_IndicatorMapsMask) { devli->maps_present = wireli->mapsPresent; if (devli->maps_present) { XkbIndicatorMapPtr im; xkbIndicatorMapWireDesc *wireim; for (i = 0, bit = 1; i < XkbNumIndicators; i++, bit <<= 1) { if (wireli->mapsPresent & bit) { wireim = _XkbGetTypedRdBufPtr(buf, 1, xkbIndicatorMapWireDesc); if (!wireim) return BadAlloc; im = &devli->maps[i]; im->flags = wireim->flags; im->which_groups = wireim->whichGroups; im->groups = wireim->groups; im->which_mods = wireim->whichMods; im->mods.mask = wireim->mods; im->mods.real_mods = wireim->realMods; im->mods.vmods = wireim->virtualMods; im->ctrls = wireim->ctrls; } } } } return Success; } static Status _XkbReadGetDeviceInfoReply(Display *dpy, xkbGetDeviceInfoReply *rep, XkbDeviceInfoPtr devi) { XkbReadBufferRec buf; XkbAction *act; int tmp; if (!_XkbInitReadBuffer(dpy, &buf, (int) rep->length * 4)) return BadAlloc; if ((rep->totalBtns > 0) && (rep->totalBtns != devi->num_btns)) { tmp = XkbResizeDeviceButtonActions(devi, rep->totalBtns); if (tmp != Success) return tmp; } if (rep->nBtnsWanted > 0) { if (((unsigned short) rep->firstBtnWanted + rep->nBtnsWanted) >= devi->num_btns) goto BAILOUT; act = &devi->btn_acts[rep->firstBtnWanted]; bzero((char *) act, (rep->nBtnsWanted * sizeof(XkbAction))); } _XkbFree(devi->name); if (!_XkbGetReadBufferCountedString(&buf, &devi->name)) goto BAILOUT; if (rep->nBtnsRtrn > 0) { int size; if (((unsigned short) rep->firstBtnRtrn + rep->nBtnsRtrn) >= devi->num_btns) goto BAILOUT; act = &devi->btn_acts[rep->firstBtnRtrn]; size = rep->nBtnsRtrn * SIZEOF(xkbActionWireDesc); if (!_XkbCopyFromReadBuffer(&buf, (char *) act, size)) goto BAILOUT; } if (rep->nDeviceLedFBs > 0) { register int i; for (i = 0; i < rep->nDeviceLedFBs; i++) { if ((tmp = _XkbReadDeviceLedInfo(&buf, rep->present, devi)) != Success) return tmp; } } tmp = _XkbFreeReadBuffer(&buf); if (tmp) fprintf(stderr, "GetDeviceInfo! Bad length (%d extra bytes)\n", tmp); if (tmp || buf.error) return BadLength; return Success; BAILOUT: _XkbFreeReadBuffer(&buf); return BadLength; } XkbDeviceInfoPtr XkbGetDeviceInfo(Display *dpy, unsigned which, unsigned deviceSpec, unsigned class, unsigned id) { register xkbGetDeviceInfoReq *req; xkbGetDeviceInfoReply rep; Status status; XkbDeviceInfoPtr devi; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return NULL; LockDisplay(dpy); GetReq(kbGetDeviceInfo, req); req->reqType = dpy->xkb_info->codes->major_opcode; req->xkbReqType = X_kbGetDeviceInfo; req->deviceSpec = deviceSpec; req->wanted = which; req->allBtns = ((which & XkbXI_ButtonActionsMask) != 0); req->firstBtn = req->nBtns = 0; req->ledClass = class; req->ledID = id; if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) { UnlockDisplay(dpy); SyncHandle(); return NULL; } devi = XkbAllocDeviceInfo(rep.deviceID, rep.totalBtns, rep.nDeviceLedFBs); if (devi) { devi->supported = rep.supported; devi->unsupported = rep.unsupported; devi->type = rep.devType; devi->has_own_state = rep.hasOwnState; devi->dflt_kbd_fb = rep.dfltKbdFB; devi->dflt_led_fb = rep.dfltLedFB; status = _XkbReadGetDeviceInfoReply(dpy, &rep, devi); if (status != Success) { XkbFreeDeviceInfo(devi, XkbXI_AllDeviceFeaturesMask, True); devi = NULL; } } UnlockDisplay(dpy); SyncHandle(); return devi; } Status XkbGetDeviceInfoChanges(Display *dpy, XkbDeviceInfoPtr devi, XkbDeviceChangesPtr changes) { register xkbGetDeviceInfoReq *req; xkbGetDeviceInfoReply rep; Status status; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return BadMatch; if ((changes->changed & XkbXI_AllDeviceFeaturesMask) == 0) return Success; changes->changed &= ~XkbXI_AllDeviceFeaturesMask; status = Success; LockDisplay(dpy); while ((changes->changed) && (status == Success)) { GetReq(kbGetDeviceInfo, req); req->reqType = dpy->xkb_info->codes->major_opcode; req->xkbReqType = X_kbGetDeviceInfo; req->deviceSpec = devi->device_spec; req->wanted = changes->changed; req->allBtns = False; if (changes->changed & XkbXI_ButtonActionsMask) { req->firstBtn = changes->first_btn; req->nBtns = changes->num_btns; changes->changed &= ~XkbXI_ButtonActionsMask; } else req->firstBtn = req->nBtns = 0; if (changes->changed & XkbXI_IndicatorsMask) { req->ledClass = changes->leds.led_class; req->ledID = changes->leds.led_id; if (changes->leds.next == NULL) changes->changed &= ~XkbXI_IndicatorsMask; else { XkbDeviceLedChangesPtr next; next = changes->leds.next; changes->leds = *next; _XkbFree(next); } } else { req->ledClass = XkbDfltXIClass; req->ledID = XkbDfltXIId; } if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) { status = BadLength; break; } devi->supported |= rep.supported; devi->unsupported |= rep.unsupported; devi->type = rep.devType; status = _XkbReadGetDeviceInfoReply(dpy, &rep, devi); } UnlockDisplay(dpy); SyncHandle(); return status; } Status XkbGetDeviceButtonActions(Display *dpy, XkbDeviceInfoPtr devi, Bool all, unsigned int first, unsigned int num) { register xkbGetDeviceInfoReq *req; xkbGetDeviceInfoReply rep; Status status; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return BadMatch; if (!devi) return BadValue; LockDisplay(dpy); GetReq(kbGetDeviceInfo, req); req->reqType = dpy->xkb_info->codes->major_opcode; req->xkbReqType = X_kbGetDeviceInfo; req->deviceSpec = devi->device_spec; req->wanted = XkbXI_ButtonActionsMask; req->allBtns = all; req->firstBtn = first; req->nBtns = num; req->ledClass = XkbDfltXIClass; req->ledID = XkbDfltXIId; if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) { UnlockDisplay(dpy); SyncHandle(); return BadLength; } devi->type = rep.devType; devi->supported = rep.supported; devi->unsupported = rep.unsupported; status = _XkbReadGetDeviceInfoReply(dpy, &rep, devi); UnlockDisplay(dpy); SyncHandle(); return status; } Status XkbGetDeviceLedInfo(Display *dpy, XkbDeviceInfoPtr devi, unsigned int ledClass, unsigned int ledId, unsigned int which) { register xkbGetDeviceInfoReq *req; xkbGetDeviceInfoReply rep; Status status; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return BadMatch; if (((which & XkbXI_IndicatorsMask) == 0) || (which & (~XkbXI_IndicatorsMask))) return BadMatch; if (!devi) return BadValue; LockDisplay(dpy); GetReq(kbGetDeviceInfo, req); req->reqType = dpy->xkb_info->codes->major_opcode; req->xkbReqType = X_kbGetDeviceInfo; req->deviceSpec = devi->device_spec; req->wanted = which; req->allBtns = False; req->firstBtn = req->nBtns = 0; req->ledClass = ledClass; req->ledID = ledId; if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) { UnlockDisplay(dpy); SyncHandle(); return BadLength; } devi->type = rep.devType; devi->supported = rep.supported; devi->unsupported = rep.unsupported; status = _XkbReadGetDeviceInfoReply(dpy, &rep, devi); UnlockDisplay(dpy); SyncHandle(); return status; } /***====================================================================***/ typedef struct _LedInfoStuff { Bool used; XkbDeviceLedInfoPtr devli; } LedInfoStuff; typedef struct _SetLedStuff { unsigned wanted; int num_info; int dflt_class; LedInfoStuff *dflt_kbd_fb; LedInfoStuff *dflt_led_fb; LedInfoStuff *info; } SetLedStuff; static void _InitLedStuff(SetLedStuff *stuff, unsigned wanted, XkbDeviceInfoPtr devi) { int i; register XkbDeviceLedInfoPtr devli; bzero(stuff, sizeof(SetLedStuff)); stuff->wanted = wanted; stuff->dflt_class = XkbXINone; if ((devi->num_leds < 1) || ((wanted & XkbXI_IndicatorsMask) == 0)) return; stuff->info = _XkbTypedCalloc(devi->num_leds, LedInfoStuff); if (!stuff->info) return; stuff->num_info = devi->num_leds; for (devli = &devi->leds[0], i = 0; i < devi->num_leds; i++, devli++) { stuff->info[i].devli = devli; if (devli->led_class == KbdFeedbackClass) { stuff->dflt_class = KbdFeedbackClass; if (stuff->dflt_kbd_fb == NULL) stuff->dflt_kbd_fb = &stuff->info[i]; } else if (devli->led_class == LedFeedbackClass) { if (stuff->dflt_class == XkbXINone) stuff->dflt_class = LedFeedbackClass; if (stuff->dflt_led_fb == NULL) stuff->dflt_led_fb = &stuff->info[i]; } } return; } static void _FreeLedStuff(SetLedStuff * stuff) { if (stuff->num_info > 0) _XkbFree(stuff->info); bzero(stuff, sizeof(SetLedStuff)); return; } static int _XkbSizeLedInfo(unsigned changed, XkbDeviceLedInfoPtr devli) { register int i, size; register unsigned bit, namesNeeded, mapsNeeded; size = SIZEOF(xkbDeviceLedsWireDesc); namesNeeded = mapsNeeded = 0; if (changed & XkbXI_IndicatorNamesMask) namesNeeded = devli->names_present; if (changed & XkbXI_IndicatorMapsMask) mapsNeeded = devli->maps_present; if ((namesNeeded) || (mapsNeeded)) { for (i = 0, bit = 1; i < XkbNumIndicators; i++, bit <<= 1) { if (namesNeeded & bit) size += 4; /* atoms are 4 bytes on the wire */ if (mapsNeeded & bit) size += SIZEOF(xkbIndicatorMapWireDesc); } } return size; } static Bool _SizeMatches(SetLedStuff *stuff, XkbDeviceLedChangesPtr changes, int *sz_rtrn, int *nleds_rtrn) { int i, nMatch, class, id; LedInfoStuff *linfo; Bool match; nMatch = 0; class = changes->led_class; id = changes->led_id; if (class == XkbDfltXIClass) class = stuff->dflt_class; for (i = 0, linfo = &stuff->info[0]; i < stuff->num_info; i++, linfo++) { XkbDeviceLedInfoPtr devli; LedInfoStuff *dflt; devli = linfo->devli; match = ((class == devli->led_class) || (class == XkbAllXIClasses)); if (devli->led_class == KbdFeedbackClass) dflt = stuff->dflt_kbd_fb; else dflt = stuff->dflt_led_fb; match = (match && (id == devli->led_id)) || (id == XkbAllXIIds) || ((id == XkbDfltXIId) && (linfo == dflt)); if (match) { if (!linfo->used) { *sz_rtrn += _XkbSizeLedInfo(stuff->wanted, devli); *nleds_rtrn += 1; linfo->used = True; if ((class != XkbAllXIClasses) && (id != XkbAllXIIds)) return True; } nMatch++; linfo->used = True; } } return (nMatch > 0); } /***====================================================================***/ static Status _XkbSetDeviceInfoSize(XkbDeviceInfoPtr devi, XkbDeviceChangesPtr changes, SetLedStuff *stuff, int *sz_rtrn, int *num_leds_rtrn) { *sz_rtrn = 0; if ((changes->changed & XkbXI_ButtonActionsMask) && (changes->num_btns > 0)) { if (!XkbXI_LegalDevBtn (devi, (changes->first_btn + changes->num_btns - 1))) return BadMatch; *sz_rtrn += changes->num_btns * SIZEOF(xkbActionWireDesc); } else { changes->changed &= ~XkbXI_ButtonActionsMask; changes->first_btn = changes->num_btns = 0; } if ((changes->changed & XkbXI_IndicatorsMask) && XkbLegalXILedClass(changes->leds.led_class)) { XkbDeviceLedChangesPtr leds; for (leds = &changes->leds; leds != NULL; leds = leds->next) { if (!_SizeMatches(stuff, leds, sz_rtrn, num_leds_rtrn)) return BadMatch; } } else { changes->changed &= ~XkbXI_IndicatorsMask; *num_leds_rtrn = 0; } return Success; } static char * _XkbWriteLedInfo(char *wire, unsigned changed, XkbDeviceLedInfoPtr devli) { register int i; register unsigned bit, namesNeeded, mapsNeeded; xkbDeviceLedsWireDesc *lwire; namesNeeded = mapsNeeded = 0; if (changed & XkbXI_IndicatorNamesMask) namesNeeded = devli->names_present; if (changed & XkbXI_IndicatorMapsMask) mapsNeeded = devli->maps_present; lwire = (xkbDeviceLedsWireDesc *) wire; lwire->ledClass = devli->led_class; lwire->ledID = devli->led_id; lwire->namesPresent = namesNeeded; lwire->mapsPresent = mapsNeeded; lwire->physIndicators = devli->phys_indicators; lwire->state = devli->state; wire = (char *) &lwire[1]; if (namesNeeded) { CARD32 *awire = (CARD32 *) wire; for (i = 0, bit = 1; i < XkbNumIndicators; i++, bit <<= 1) { if (namesNeeded & bit) { *awire = (CARD32) devli->names[i]; awire++; } } wire = (char *) awire; } if (mapsNeeded) { xkbIndicatorMapWireDesc *mwire = (xkbIndicatorMapWireDesc *) wire; for (i = 0, bit = 1; i < XkbNumIndicators; i++, bit <<= 1) { if (mapsNeeded & bit) { XkbIndicatorMapPtr map = &devli->maps[i]; mwire->flags = map->flags; mwire->whichGroups = map->which_groups; mwire->groups = map->groups; mwire->whichMods = map->which_mods; mwire->mods = map->mods.mask; mwire->realMods = map->mods.real_mods; mwire->virtualMods = map->mods.vmods; mwire->ctrls = map->ctrls; mwire++; } } wire = (char *) mwire; } return wire; } static int _XkbWriteSetDeviceInfo(char *wire, XkbDeviceChangesPtr changes, SetLedStuff *stuff, XkbDeviceInfoPtr devi) { char *start = wire; if (changes->changed & XkbXI_ButtonActionsMask) { int size = changes->num_btns * SIZEOF(xkbActionWireDesc); memcpy(wire, (char *) &devi->btn_acts[changes->first_btn], size); wire += size; } if (changes->changed & XkbXI_IndicatorsMask) { register int i; register LedInfoStuff *linfo; for (i = 0, linfo = &stuff->info[0]; i < stuff->num_info; i++, linfo++) { if (linfo->used) { register char *new_wire; new_wire = _XkbWriteLedInfo(wire, stuff->wanted, linfo->devli); if (!new_wire) return wire - start; wire = new_wire; } } } return wire - start; } Bool XkbSetDeviceInfo(Display *dpy, unsigned which, XkbDeviceInfoPtr devi) { register xkbSetDeviceInfoReq *req; Status ok = 0; int size, nLeds; XkbInfoPtr xkbi; XkbDeviceChangesRec changes; SetLedStuff lstuff; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return False; if ((!devi) || (which & (~XkbXI_AllDeviceFeaturesMask)) || ((which & XkbXI_ButtonActionsMask) && (!XkbXI_DevHasBtnActs(devi))) || ((which & XkbXI_IndicatorsMask) && (!XkbXI_DevHasLeds(devi)))) return False; bzero((char *) &changes, sizeof(XkbDeviceChangesRec)); changes.changed = which; changes.first_btn = 0; changes.num_btns = devi->num_btns; changes.leds.led_class = XkbAllXIClasses; changes.leds.led_id = XkbAllXIIds; changes.leds.defined = 0; size = nLeds = 0; _InitLedStuff(&lstuff, changes.changed, devi); if (_XkbSetDeviceInfoSize(devi, &changes, &lstuff, &size, &nLeds) != Success) return False; LockDisplay(dpy); xkbi = dpy->xkb_info; GetReq(kbSetDeviceInfo, req); req->length += size / 4; req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbSetDeviceInfo; req->deviceSpec = devi->device_spec; req->firstBtn = changes.first_btn; req->nBtns = changes.num_btns; req->change = changes.changed; req->nDeviceLedFBs = nLeds; if (size > 0) { char *wire; BufAlloc(char *, wire, size); ok = (wire != NULL) && (_XkbWriteSetDeviceInfo(wire, &changes, &lstuff, devi) == size); } UnlockDisplay(dpy); SyncHandle(); _FreeLedStuff(&lstuff); /* 12/11/95 (ef) -- XXX!! should clear changes here */ return ok; } Bool XkbChangeDeviceInfo(Display *dpy, XkbDeviceInfoPtr devi, XkbDeviceChangesPtr changes) { register xkbSetDeviceInfoReq *req; Status ok = 0; int size, nLeds; XkbInfoPtr xkbi; SetLedStuff lstuff; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return False; if ((!devi) || (changes->changed & (~XkbXI_AllDeviceFeaturesMask)) || ((changes->changed & XkbXI_ButtonActionsMask) && (!XkbXI_DevHasBtnActs(devi))) || ((changes->changed & XkbXI_IndicatorsMask) && (!XkbXI_DevHasLeds(devi)))) return False; size = nLeds = 0; _InitLedStuff(&lstuff, changes->changed, devi); if (_XkbSetDeviceInfoSize(devi, changes, &lstuff, &size, &nLeds) != Success) return False; LockDisplay(dpy); xkbi = dpy->xkb_info; GetReq(kbSetDeviceInfo, req); req->length += size / 4; req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbSetDeviceInfo; req->deviceSpec = devi->device_spec; req->firstBtn = changes->first_btn; req->nBtns = changes->num_btns; req->change = changes->changed; req->nDeviceLedFBs = nLeds; if (size > 0) { char *wire; BufAlloc(char *, wire, size); ok = (wire != NULL) && (_XkbWriteSetDeviceInfo(wire, changes, &lstuff, devi) == size); } UnlockDisplay(dpy); SyncHandle(); _FreeLedStuff(&lstuff); /* 12/11/95 (ef) -- XXX!! should clear changes here */ return ok; } Bool XkbSetDeviceLedInfo(Display *dpy, XkbDeviceInfoPtr devi, unsigned ledClass, unsigned ledID, unsigned which) { return False; } Bool XkbSetDeviceButtonActions(Display *dpy, XkbDeviceInfoPtr devi, unsigned int first, unsigned int nBtns) { register xkbSetDeviceInfoReq *req; Status ok = 0; int size, nLeds; XkbInfoPtr xkbi; XkbDeviceChangesRec changes; SetLedStuff lstuff; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return False; if ((!devi) || (!XkbXI_DevHasBtnActs(devi)) || (first + nBtns > devi->num_btns)) return False; if (nBtns == 0) return True; bzero((char *) &changes, sizeof(XkbDeviceChangesRec)); changes.changed = XkbXI_ButtonActionsMask; changes.first_btn = first; changes.num_btns = nBtns; changes.leds.led_class = XkbXINone; changes.leds.led_id = XkbXINone; changes.leds.defined = 0; size = nLeds = 0; if (_XkbSetDeviceInfoSize(devi, &changes, NULL, &size, &nLeds) != Success) return False; LockDisplay(dpy); xkbi = dpy->xkb_info; GetReq(kbSetDeviceInfo, req); req->length += size / 4; req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbSetDeviceInfo; req->deviceSpec = devi->device_spec; req->firstBtn = changes.first_btn; req->nBtns = changes.num_btns; req->change = changes.changed; req->nDeviceLedFBs = nLeds; if (size > 0) { char *wire; BufAlloc(char *, wire, size); ok = (wire != NULL) && (_XkbWriteSetDeviceInfo(wire, &changes, &lstuff, devi) == size); } UnlockDisplay(dpy); SyncHandle(); return ok; } Bool match; nMatch = 0; class = changes->led_class; id = changes->led_id; if (class == XkbDfltXIClass) class = stuff->dflt_class; for libX11-1.6.3/src/xkb/XKBGeom.c000064401431060000012000000553721247741723500160450ustar00alancstaff00002660200006/************************************************************ Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Silicon Graphics not be used in advertising or publicity pertaining to distribution of the software without specific prior written permission. Silicon Graphics makes no representation about the suitability of this software for any purpose. It is provided "as is" without any express or implied warranty. SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ********************************************************/ #ifdef DEBUG #ifdef HAVE_CONFIG_H #include #endif #include #endif #define NEED_MAP_READERS #include "Xlibint.h" #include #include #include "XKBlibint.h" #ifndef MINSHORT #define MINSHORT -32768 #endif #ifndef MAXSHORT #define MAXSHORT 32767 #endif /***====================================================================***/ static void _XkbCheckBounds(XkbBoundsPtr bounds, int x, int y) { if (x < bounds->x1) bounds->x1 = x; if (x > bounds->x2) bounds->x2 = x; if (y < bounds->y1) bounds->y1 = y; if (y > bounds->y2) bounds->y2 = y; return; } Bool XkbComputeShapeBounds(XkbShapePtr shape) { register int o, p; XkbOutlinePtr outline; XkbPointPtr pt; if ((!shape) || (shape->num_outlines < 1)) return False; shape->bounds.x1 = shape->bounds.y1 = MAXSHORT; shape->bounds.x2 = shape->bounds.y2 = MINSHORT; for (outline = shape->outlines, o = 0; o < shape->num_outlines; o++, outline++) { for (pt = outline->points, p = 0; p < outline->num_points; p++, pt++) { _XkbCheckBounds(&shape->bounds, pt->x, pt->y); } if (outline->num_points < 2) { _XkbCheckBounds(&shape->bounds, 0, 0); } } return True; } Bool XkbComputeShapeTop(XkbShapePtr shape, XkbBoundsPtr bounds) { register int p; XkbOutlinePtr outline; XkbPointPtr pt; if ((!shape) || (shape->num_outlines < 1)) return False; if (shape->approx) outline = shape->approx; else outline = &shape->outlines[shape->num_outlines - 1]; if (outline->num_points < 2) { bounds->x1 = bounds->y1 = 0; bounds->x2 = bounds->y2 = 0; } else { bounds->x1 = bounds->y1 = MAXSHORT; bounds->x2 = bounds->y2 = MINSHORT; } for (pt = outline->points, p = 0; p < outline->num_points; p++, pt++) { _XkbCheckBounds(bounds, pt->x, pt->y); } return True; } Bool XkbComputeRowBounds(XkbGeometryPtr geom, XkbSectionPtr section, XkbRowPtr row) { register int k, pos; XkbKeyPtr key; XkbBoundsPtr bounds, sbounds; if ((!geom) || (!section) || (!row)) return False; bounds = &row->bounds; bzero(bounds, sizeof(XkbBoundsRec)); for (key = row->keys, pos = k = 0; k < row->num_keys; k++, key++) { sbounds = &XkbKeyShape(geom, key)->bounds; _XkbCheckBounds(bounds, pos, 0); if (!row->vertical) { if (key->gap != 0) { pos += key->gap; _XkbCheckBounds(bounds, pos, 0); } _XkbCheckBounds(bounds, pos + sbounds->x1, sbounds->y1); _XkbCheckBounds(bounds, pos + sbounds->x2, sbounds->y2); pos += sbounds->x2; } else { if (key->gap != 0) { pos += key->gap; _XkbCheckBounds(bounds, 0, pos); } _XkbCheckBounds(bounds, pos + sbounds->x1, sbounds->y1); _XkbCheckBounds(bounds, pos + sbounds->x2, sbounds->y2); pos += sbounds->y2; } } return True; } Bool XkbComputeSectionBounds(XkbGeometryPtr geom, XkbSectionPtr section) { register int i; XkbShapePtr shape; XkbRowPtr row; XkbDoodadPtr doodad; XkbBoundsPtr bounds, rbounds; if ((!geom) || (!section)) return False; bounds = §ion->bounds; bzero(bounds, sizeof(XkbBoundsRec)); for (i = 0, row = section->rows; i < section->num_rows; i++, row++) { if (!XkbComputeRowBounds(geom, section, row)) return False; rbounds = &row->bounds; _XkbCheckBounds(bounds, row->left + rbounds->x1, row->top + rbounds->y1); _XkbCheckBounds(bounds, row->left + rbounds->x2, row->top + rbounds->y2); } for (i = 0, doodad = section->doodads; i < section->num_doodads; i++, doodad++) { static XkbBoundsRec tbounds; switch (doodad->any.type) { case XkbOutlineDoodad: case XkbSolidDoodad: shape = XkbShapeDoodadShape(geom, &doodad->shape); rbounds = &shape->bounds; break; case XkbTextDoodad: tbounds.x1 = doodad->text.left; tbounds.y1 = doodad->text.top; tbounds.x2 = tbounds.x1 + doodad->text.width; tbounds.y2 = tbounds.y1 + doodad->text.height; rbounds = &tbounds; break; case XkbIndicatorDoodad: shape = XkbIndicatorDoodadShape(geom, &doodad->indicator); rbounds = &shape->bounds; break; case XkbLogoDoodad: shape = XkbLogoDoodadShape(geom, &doodad->logo); rbounds = &shape->bounds; break; default: tbounds.x1 = tbounds.x2 = doodad->any.left; tbounds.y1 = tbounds.y2 = doodad->any.top; rbounds = &tbounds; break; } _XkbCheckBounds(bounds, rbounds->x1, rbounds->y1); _XkbCheckBounds(bounds, rbounds->x2, rbounds->y2); } return True; } /***====================================================================***/ char * XkbFindOverlayForKey(XkbGeometryPtr geom, XkbSectionPtr wanted, char *under) { int s; XkbSectionPtr section; if ((geom == NULL) || (under == NULL) || (geom->num_sections < 1)) return NULL; if (wanted) section = wanted; else section = geom->sections; for (s = 0; s < geom->num_sections; s++, section++) { XkbOverlayPtr ol; int o; if (section->num_overlays < 1) continue; for (o = 0, ol = section->overlays; o < section->num_overlays; o++, ol++) { XkbOverlayRowPtr row; int r; for (r = 0, row = ol->rows; r < ol->num_rows; r++, row++) { XkbOverlayKeyPtr key; int k; for (k = 0, key = row->keys; k < row->num_keys; k++, key++) { if (strncmp(under, key->under.name, XkbKeyNameLength) == 0) return key->over.name; } } } if (wanted != NULL) break; } return NULL; } /***====================================================================***/ static Status _XkbReadGeomProperties(XkbReadBufferPtr buf, XkbGeometryPtr geom, xkbGetGeometryReply *rep) { Status rtrn; if (rep->nProperties < 1) return Success; if ((rtrn = XkbAllocGeomProps(geom, rep->nProperties)) == Success) { register int i; register Bool ok = True; for (i = 0; (i < rep->nProperties) && ok; i++) { char *name = NULL; char *value = NULL; ok = _XkbGetReadBufferCountedString(buf, &name) && ok; ok = _XkbGetReadBufferCountedString(buf, &value) && ok; ok = ok && (XkbAddGeomProperty(geom, name, value) != NULL); _XkbFree(name); _XkbFree(value); } if (ok) rtrn = Success; else rtrn = BadLength; } return rtrn; } static Status _XkbReadGeomKeyAliases(XkbReadBufferPtr buf, XkbGeometryPtr geom, xkbGetGeometryReply *rep) { Status rtrn; if (rep->nKeyAliases < 1) return Success; if ((rtrn = XkbAllocGeomKeyAliases(geom, rep->nKeyAliases)) == Success) { if (!_XkbCopyFromReadBuffer(buf, (char *) geom->key_aliases, (rep->nKeyAliases * XkbKeyNameLength * 2))) return BadLength; geom->num_key_aliases = rep->nKeyAliases; return Success; } else { /* alloc failed, just skip the aliases */ _XkbSkipReadBufferData(buf, (rep->nKeyAliases * XkbKeyNameLength * 2)); } return rtrn; } static Status _XkbReadGeomColors(XkbReadBufferPtr buf, XkbGeometryPtr geom, xkbGetGeometryReply *rep) { Status rtrn; if (rep->nColors < 1) return Success; if ((rtrn = XkbAllocGeomColors(geom, rep->nColors)) == Success) { register int i; for (i = 0; i < rep->nColors; i++) { char *spec = NULL; if (!_XkbGetReadBufferCountedString(buf, &spec)) rtrn = BadLength; else if (XkbAddGeomColor(geom, spec, geom->num_colors) == NULL) rtrn = BadAlloc; _XkbFree(spec); if (rtrn != Success) return rtrn; } return Success; } return rtrn; } static Status _XkbReadGeomShapes(XkbReadBufferPtr buf, XkbGeometryPtr geom, xkbGetGeometryReply *rep) { register int i; Status rtrn; if (rep->nShapes < 1) return Success; if ((rtrn = XkbAllocGeomShapes(geom, rep->nShapes)) != Success) return rtrn; for (i = 0; i < rep->nShapes; i++) { xkbShapeWireDesc *shapeWire; XkbShapePtr shape; register int o; shapeWire = (xkbShapeWireDesc *) _XkbGetReadBufferPtr(buf, SIZEOF(xkbShapeWireDesc)); if (!shapeWire) return BadLength; shape = XkbAddGeomShape(geom, shapeWire->name, shapeWire->nOutlines); if (!shape) return BadAlloc; for (o = 0; o < shapeWire->nOutlines; o++) { xkbOutlineWireDesc *olWire; XkbOutlinePtr ol; register int p; XkbPointPtr pt; olWire = (xkbOutlineWireDesc *) _XkbGetReadBufferPtr(buf, SIZEOF(xkbOutlineWireDesc)); if (!olWire) return BadLength; ol = XkbAddGeomOutline(shape, olWire->nPoints); if (!ol) return BadAlloc; ol->corner_radius = olWire->cornerRadius; for (p = 0, pt = ol->points; p < olWire->nPoints; p++, pt++) { xkbPointWireDesc *ptWire; ptWire = (xkbPointWireDesc *) _XkbGetReadBufferPtr(buf, SIZEOF(xkbPointWireDesc)); if (!ptWire) return BadLength; pt->x = ptWire->x; pt->y = ptWire->y; } ol->num_points = olWire->nPoints; } if ((shapeWire->primaryNdx != XkbNoShape) && (shapeWire->primaryNdx < shapeWire->nOutlines)) shape->primary = &shape->outlines[shapeWire->primaryNdx]; else shape->primary = NULL; if ((shapeWire->approxNdx != XkbNoShape) && (shapeWire->approxNdx < shapeWire->nOutlines)) shape->approx = &shape->outlines[shapeWire->approxNdx]; else shape->approx = NULL; XkbComputeShapeBounds(shape); } return Success; } static Status _XkbReadGeomDoodad(XkbReadBufferPtr buf, XkbGeometryPtr geom, XkbSectionPtr section) { XkbDoodadPtr doodad; xkbDoodadWireDesc *doodadWire; doodadWire = (xkbDoodadWireDesc *) _XkbGetReadBufferPtr(buf, SIZEOF(xkbDoodadWireDesc)); if (!doodadWire) return BadLength; doodad = XkbAddGeomDoodad(geom, section, doodadWire->any.name); if (!doodad) return BadAlloc; doodad->any.type = doodadWire->any.type; doodad->any.priority = doodadWire->any.priority; doodad->any.top = doodadWire->any.top; doodad->any.left = doodadWire->any.left; doodad->any.angle = doodadWire->any.angle; switch (doodad->any.type) { case XkbOutlineDoodad: case XkbSolidDoodad: doodad->shape.color_ndx = doodadWire->shape.colorNdx; doodad->shape.shape_ndx = doodadWire->shape.shapeNdx; break; case XkbTextDoodad: doodad->text.width = doodadWire->text.width; doodad->text.height = doodadWire->text.height; doodad->text.color_ndx = doodadWire->text.colorNdx; if (!_XkbGetReadBufferCountedString(buf, &doodad->text.text)) return BadLength; if (!_XkbGetReadBufferCountedString(buf, &doodad->text.font)) return BadLength; break; case XkbIndicatorDoodad: doodad->indicator.shape_ndx = doodadWire->indicator.shapeNdx; doodad->indicator.on_color_ndx = doodadWire->indicator.onColorNdx; doodad->indicator.off_color_ndx = doodadWire->indicator.offColorNdx; break; case XkbLogoDoodad: doodad->logo.color_ndx = doodadWire->logo.colorNdx; doodad->logo.shape_ndx = doodadWire->logo.shapeNdx; if (!_XkbGetReadBufferCountedString(buf, &doodad->logo.logo_name)) return BadLength; break; default: return BadValue; } return Success; } static Status _XkbReadGeomOverlay(XkbReadBufferPtr buf, XkbGeometryPtr geom, XkbSectionPtr section) { XkbOverlayPtr ol; xkbOverlayWireDesc *olWire; register int r; olWire = (xkbOverlayWireDesc *) _XkbGetReadBufferPtr(buf, SIZEOF(xkbOverlayWireDesc)); if (olWire == NULL) return BadLength; ol = XkbAddGeomOverlay(section, olWire->name, olWire->nRows); if (ol == NULL) return BadLength; for (r = 0; r < olWire->nRows; r++) { register int k; XkbOverlayRowPtr row; xkbOverlayRowWireDesc *rowWire; xkbOverlayKeyWireDesc *keyWire; rowWire = (xkbOverlayRowWireDesc *) _XkbGetReadBufferPtr(buf, SIZEOF(xkbOverlayRowWireDesc)); if (rowWire == NULL) return BadLength; row = XkbAddGeomOverlayRow(ol, rowWire->rowUnder, rowWire->nKeys); if (!row) return BadAlloc; row->row_under = rowWire->rowUnder; if (rowWire->nKeys < 1) continue; keyWire = (xkbOverlayKeyWireDesc *) _XkbGetReadBufferPtr(buf, SIZEOF(xkbOverlayKeyWireDesc) * rowWire->nKeys); if (keyWire == NULL) return BadLength; for (k = 0; k < rowWire->nKeys; k++, keyWire++, row->num_keys++) { memcpy(row->keys[row->num_keys].over.name, keyWire->over, XkbKeyNameLength); memcpy(row->keys[row->num_keys].under.name, keyWire->under, XkbKeyNameLength); } } return Success; } static Status _XkbReadGeomSections(XkbReadBufferPtr buf, XkbGeometryPtr geom, xkbGetGeometryReply *rep) { register int s; XkbSectionPtr section; xkbSectionWireDesc *sectionWire; Status rtrn; if (rep->nSections < 1) return Success; if ((rtrn = XkbAllocGeomSections(geom, rep->nSections)) != Success) return rtrn; for (s = 0; s < rep->nSections; s++) { sectionWire = (xkbSectionWireDesc *) _XkbGetReadBufferPtr(buf, SIZEOF(xkbSectionWireDesc)); if (!sectionWire) return BadLength; section = XkbAddGeomSection(geom, sectionWire->name, sectionWire->nRows, sectionWire->nDoodads, sectionWire->nOverlays); if (!section) return BadAlloc; section->top = sectionWire->top; section->left = sectionWire->left; section->width = sectionWire->width; section->height = sectionWire->height; section->angle = sectionWire->angle; section->priority = sectionWire->priority; if (sectionWire->nRows > 0) { register int r; for (r = 0; r < sectionWire->nRows; r++) { XkbRowPtr row; xkbRowWireDesc *rowWire; rowWire = (xkbRowWireDesc *) _XkbGetReadBufferPtr(buf, SIZEOF(xkbRowWireDesc)); if (!rowWire) return BadLength; row = XkbAddGeomRow(section, rowWire->nKeys); if (!row) return BadAlloc; row->top = rowWire->top; row->left = rowWire->left; row->vertical = rowWire->vertical; if (rowWire->nKeys > 0) { register int k; for (k = 0; k < rowWire->nKeys; k++) { XkbKeyPtr key; xkbKeyWireDesc *keyWire; keyWire = (xkbKeyWireDesc *) _XkbGetReadBufferPtr(buf, SIZEOF(xkbKeyWireDesc)); if (!keyWire) return BadLength; key = XkbAddGeomKey(row); if (!key) return BadAlloc; memcpy(key->name.name, keyWire->name, XkbKeyNameLength); key->gap = keyWire->gap; key->shape_ndx = keyWire->shapeNdx; key->color_ndx = keyWire->colorNdx; } } } } if (sectionWire->nDoodads > 0) { register int d; for (d = 0; d < sectionWire->nDoodads; d++) { if ((rtrn = _XkbReadGeomDoodad(buf, geom, section)) != Success) return rtrn; } } if (sectionWire->nOverlays > 0) { register int o; for (o = 0; o < sectionWire->nOverlays; o++) { if ((rtrn = _XkbReadGeomOverlay(buf, geom, section)) != Success) return rtrn; } } } return Success; } static Status _XkbReadGeomDoodads(XkbReadBufferPtr buf, XkbGeometryPtr geom, xkbGetGeometryReply *rep) { register int d; Status rtrn; if (rep->nDoodads < 1) return Success; if ((rtrn = XkbAllocGeomDoodads(geom, rep->nDoodads)) != Success) return rtrn; for (d = 0; d < rep->nDoodads; d++) { if ((rtrn = _XkbReadGeomDoodad(buf, geom, NULL)) != Success) return rtrn; } return Success; } Status _XkbReadGetGeometryReply(Display *dpy, xkbGetGeometryReply *rep, XkbDescPtr xkb, int *nread_rtrn) { XkbGeometryPtr geom; geom = _XkbTypedCalloc(1, XkbGeometryRec); if (!geom) return BadAlloc; if (xkb->geom) XkbFreeGeometry(xkb->geom, XkbGeomAllMask, True); xkb->geom = geom; geom->name = rep->name; geom->width_mm = rep->widthMM; geom->height_mm = rep->heightMM; if (rep->length) { XkbReadBufferRec buf; int left; if (_XkbInitReadBuffer(dpy, &buf, (int) rep->length * 4)) { Status status = Success; if (nread_rtrn) *nread_rtrn = (int) rep->length * 4; if (!_XkbGetReadBufferCountedString(&buf, &geom->label_font)) status = BadLength; if (status == Success) status = _XkbReadGeomProperties(&buf, geom, rep); if (status == Success) status = _XkbReadGeomColors(&buf, geom, rep); if (status == Success) status = _XkbReadGeomShapes(&buf, geom, rep); if (status == Success) status = _XkbReadGeomSections(&buf, geom, rep); if (status == Success) status = _XkbReadGeomDoodads(&buf, geom, rep); if (status == Success) status = _XkbReadGeomKeyAliases(&buf, geom, rep); left = _XkbFreeReadBuffer(&buf); if ((rep->baseColorNdx > geom->num_colors) || (rep->labelColorNdx > geom->num_colors)) status = BadLength; if ((status != Success) || left || buf.error) { if (status == Success) status = BadLength; XkbFreeGeometry(geom, XkbGeomAllMask, True); xkb->geom = NULL; return status; } geom->base_color = &geom->colors[rep->baseColorNdx]; geom->label_color = &geom->colors[rep->labelColorNdx]; } else { XkbFreeGeometry(geom, XkbGeomAllMask, True); xkb->geom = NULL; return BadAlloc; } } return Success; } Status XkbGetGeometry(Display *dpy, XkbDescPtr xkb) { xkbGetGeometryReq *req; xkbGetGeometryReply rep; Status status; if ((!xkb) || (dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return BadAccess; LockDisplay(dpy); GetReq(kbGetGeometry, req); req->reqType = dpy->xkb_info->codes->major_opcode; req->xkbReqType = X_kbGetGeometry; req->deviceSpec = xkb->device_spec; req->name = None; if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) status = BadImplementation; else if (!rep.found) status = BadName; else status = _XkbReadGetGeometryReply(dpy, &rep, xkb, NULL); UnlockDisplay(dpy); SyncHandle(); return status; } Status XkbGetNamedGeometry(Display *dpy, XkbDescPtr xkb, Atom name) { xkbGetGeometryReq *req; xkbGetGeometryReply rep; Status status; if ((name == None) || (dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return BadAccess; LockDisplay(dpy); GetReq(kbGetGeometry, req); req->reqType = dpy->xkb_info->codes->major_opcode; req->xkbReqType = X_kbGetGeometry; req->deviceSpec = xkb->device_spec; req->name = (CARD32) name; if ((!_XReply(dpy, (xReply *) &rep, 0, xFalse)) || (!rep.found)) status = BadImplementation; else if (!rep.found) status = BadName; else status = _XkbReadGetGeometryReply(dpy, &rep, xkb, NULL); UnlockDisplay(dpy); SyncHandle(); return status; } olor_ndx = doodadWire->shape.colorNdx; doodad->shape.shape_ndx = doodadWire->shape.shapeNdx; break; case XkbTextDoodad: doodad->text.width = doodadWire->text.width; doodad->text.height = doodadWire->text.height; doodadlibX11-1.6.3/src/xkb/Makefile.am000064401431060000012000000016451247741723500164730ustar00alancstaff00002660200006AM_CPPFLAGS= \ -I$(top_srcdir)/include \ -I$(top_srcdir)/include/X11 \ -I$(top_builddir)/include \ -I$(top_builddir)/include/X11 \ -I$(top_srcdir)/src/xcms \ -I$(top_srcdir)/src/xkb \ -I$(top_srcdir)/src/xlibi18n \ -D_BSD_SOURCE AM_CFLAGS= \ $(X11_CFLAGS) \ $(BIGFONT_CFLAGS) \ $(XMALLOC_ZERO_CFLAGS) \ $(CWARNFLAGS) noinst_LTLIBRARIES = libxkb.la libxkb_la_SOURCES = \ XKB.c \ XKBBind.c \ XKBCompat.c \ XKBCtrls.c \ XKBCvt.c \ XKBGetMap.c \ XKBGetByName.c \ XKBNames.c \ XKBRdBuf.c \ XKBSetMap.c \ XKBUse.c \ XKBleds.c \ XKBBell.c \ XKBGeom.c \ XKBSetGeom.c \ XKBExtDev.c \ XKBList.c \ XKBMisc.c \ XKBMAlloc.c \ XKBGAlloc.c \ XKBAlloc.c \ XKBlibint.h if LINT # Check source code with tools like lint & sparse ALL_LINT_FLAGS=$(LINT_FLAGS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) lint: $(LINT) $(ALL_LINT_FLAGS) $(libxkb_la_SOURCES) -lm endif LINT libX11-1.6.3/src/xkb/XKBGetByName.c000064401431060000012000000160051247741723500167570ustar00alancstaff00002660200006/************************************************************ Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Silicon Graphics not be used in advertising or publicity pertaining to distribution of the software without specific prior written permission. Silicon Graphics makes no representation about the suitability of this software for any purpose. It is provided "as is" without any express or implied warranty. SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ********************************************************/ #define NEED_MAP_READERS #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include #include "XKBlibint.h" /***====================================================================***/ XkbDescPtr XkbGetKeyboardByName(Display *dpy, unsigned deviceSpec, XkbComponentNamesPtr names, unsigned want, unsigned need, Bool load) { register xkbGetKbdByNameReq *req; xkbGetKbdByNameReply rep; int len, extraLen; char *str; XkbDescPtr xkb; int mapLen, codesLen, typesLen, compatLen; int symsLen, geomLen; XkbInfoPtr xkbi; if ((dpy == NULL) || (dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return NULL; xkbi = dpy->xkb_info; xkb = (XkbDescRec *) _XkbCalloc(1, sizeof(XkbDescRec)); if (!xkb) return NULL; xkb->device_spec = deviceSpec; xkb->map = (XkbClientMapRec *) _XkbCalloc(1, sizeof(XkbClientMapRec)); xkb->dpy = dpy; LockDisplay(dpy); GetReq(kbGetKbdByName, req); req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbGetKbdByName; req->deviceSpec = xkb->device_spec; req->want = want; req->need = need; req->load = load; mapLen = codesLen = typesLen = compatLen = symsLen = geomLen = 0; if (names) { if (names->keymap) mapLen = (int) strlen(names->keymap); if (names->keycodes) codesLen = (int) strlen(names->keycodes); if (names->types) typesLen = (int) strlen(names->types); if (names->compat) compatLen = (int) strlen(names->compat); if (names->symbols) symsLen = (int) strlen(names->symbols); if (names->geometry) geomLen = (int) strlen(names->geometry); if (mapLen > 255) mapLen = 255; if (codesLen > 255) codesLen = 255; if (typesLen > 255) typesLen = 255; if (compatLen > 255) compatLen = 255; if (symsLen > 255) symsLen = 255; if (geomLen > 255) geomLen = 255; } else mapLen = codesLen = typesLen = compatLen = symsLen = geomLen = 0; len = mapLen + codesLen + typesLen + compatLen + symsLen + geomLen + 6; len = XkbPaddedSize(len); req->length += len / 4; BufAlloc(char *, str, len); *str++ = mapLen; if (mapLen > 0) { memcpy(str, names->keymap, mapLen); str += mapLen; } *str++ = codesLen; if (codesLen > 0) { memcpy(str, names->keycodes, codesLen); str += codesLen; } *str++ = typesLen; if (typesLen > 0) { memcpy(str, names->types, typesLen); str += typesLen; } *str++ = compatLen; if (compatLen > 0) { memcpy(str, names->compat, compatLen); str += compatLen; } *str++ = symsLen; if (symsLen > 0) { memcpy(str, names->symbols, symsLen); str += symsLen; } *str++ = geomLen; if (geomLen > 0) { memcpy(str, names->geometry, geomLen); str += geomLen; } if ((!_XReply(dpy, (xReply *) &rep, 0, xFalse)) || (!rep.reported)) goto BAILOUT; extraLen = (int) rep.length * 4; xkb->device_spec = rep.deviceID; xkb->min_key_code = rep.minKeyCode; xkb->max_key_code = rep.maxKeyCode; if (rep.reported & (XkbGBN_SymbolsMask | XkbGBN_TypesMask)) { xkbGetMapReply mrep; Status status; int nread = 0; _XRead(dpy, (char *) &mrep, SIZEOF(xkbGetMapReply)); extraLen -= SIZEOF(xkbGetMapReply); status = _XkbReadGetMapReply(dpy, &mrep, xkb, &nread); extraLen -= nread; if (status != Success) goto BAILOUT; } if (rep.reported & XkbGBN_CompatMapMask) { xkbGetCompatMapReply crep; Status status; int nread = 0; _XRead(dpy, (char *) &crep, SIZEOF(xkbGetCompatMapReply)); extraLen -= SIZEOF(xkbGetCompatMapReply); status = _XkbReadGetCompatMapReply(dpy, &crep, xkb, &nread); extraLen -= nread; if (status != Success) goto BAILOUT; } if (rep.reported & XkbGBN_IndicatorMapMask) { xkbGetIndicatorMapReply irep; Status status; int nread = 0; _XRead(dpy, (char *) &irep, SIZEOF(xkbGetIndicatorMapReply)); extraLen -= SIZEOF(xkbGetIndicatorMapReply); status = _XkbReadGetIndicatorMapReply(dpy, &irep, xkb, &nread); extraLen -= nread; if (status != Success) goto BAILOUT; } if (rep.reported & (XkbGBN_KeyNamesMask | XkbGBN_OtherNamesMask)) { xkbGetNamesReply nrep; Status status; int nread = 0; _XRead(dpy, (char *) &nrep, SIZEOF(xkbGetNamesReply)); extraLen -= SIZEOF(xkbGetNamesReply); status = _XkbReadGetNamesReply(dpy, &nrep, xkb, &nread); extraLen -= nread; if (status != Success) goto BAILOUT; } if (rep.reported & XkbGBN_GeometryMask) { xkbGetGeometryReply grep; Status status; int nread = 0; _XRead(dpy, (char *) &grep, SIZEOF(xkbGetGeometryReply)); extraLen -= SIZEOF(xkbGetGeometryReply); status = _XkbReadGetGeometryReply(dpy, &grep, xkb, &nread); extraLen -= nread; if (status != Success) goto BAILOUT; } UnlockDisplay(dpy); SyncHandle(); return xkb; BAILOUT: if (xkb != NULL) XkbFreeKeyboard(xkb, XkbAllComponentsMask, xTrue); UnlockDisplay(dpy); SyncHandle(); return NULL; } XkbDescPtr XkbGetKeyboard(Display *dpy, unsigned which, unsigned deviceSpec) { return XkbGetKeyboardByName(dpy, deviceSpec, NULL, which, which, False); } libX11-1.6.3/src/xkb/XKBBell.c000064401431060000012000000123071247741723500160230ustar00alancstaff00002660200006/************************************************************ Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Silicon Graphics not be used in advertising or publicity pertaining to distribution of the software without specific prior written permission. Silicon Graphics makes no representation about the suitability of this software for any purpose. It is provided "as is" without any express or implied warranty. SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ********************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #include "Xlibint.h" #include #include "XKBlibint.h" Bool XkbDeviceBell(Display *dpy, Window window, int deviceID, int bellClass, int bellID, int percent, Atom name) { register xkbBellReq *req; XkbInfoPtr xkbi; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return False; LockDisplay(dpy); xkbi = dpy->xkb_info; GetReq(kbBell, req); req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbBell; req->deviceSpec = deviceID; req->window = (CARD32) window; req->bellClass = (CARD16) bellClass; req->bellID = (CARD16) bellID; req->percent = percent; req->forceSound = False; req->eventOnly = False; req->pitch = 0; req->duration = 0; req->name = (CARD32) name; req->pad1 = 0; req->pad2 = 0; UnlockDisplay(dpy); SyncHandle(); return True; } Bool XkbForceDeviceBell(Display *dpy, int deviceID, int bellClass, int bellID, int percent) { register xkbBellReq *req; XkbInfoPtr xkbi; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return False; LockDisplay(dpy); xkbi = dpy->xkb_info; GetReq(kbBell, req); req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbBell; req->deviceSpec = deviceID; req->window = (CARD32) None; req->bellClass = (CARD16) bellClass; req->bellID = (CARD16) bellID; req->percent = percent; req->forceSound = True; req->eventOnly = False; req->pitch = 0; req->duration = 0; req->name = None; req->pad1 = 0; req->pad2 = 0; UnlockDisplay(dpy); SyncHandle(); return True; } Bool XkbDeviceBellEvent(Display *dpy, Window window, int deviceID, int bellClass, int bellID, int percent, Atom name) { register xkbBellReq *req; XkbInfoPtr xkbi; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return False; LockDisplay(dpy); xkbi = dpy->xkb_info; GetReq(kbBell, req); req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbBell; req->deviceSpec = deviceID; req->window = (CARD32) window; req->bellClass = (CARD16) bellClass; req->bellID = (CARD16) bellID; req->percent = percent; req->forceSound = False; req->eventOnly = True; req->pitch = 0; req->duration = 0; req->name = (CARD32) name; req->pad1 = 0; req->pad2 = 0; UnlockDisplay(dpy); SyncHandle(); return True; } Bool XkbBell(Display *dpy, Window window, int percent, Atom name) { if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) { XBell(dpy, percent); return False; } return XkbDeviceBell(dpy, window, XkbUseCoreKbd, XkbDfltXIClass, XkbDfltXIId, percent, name); } Bool XkbForceBell(Display *dpy, int percent) { if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) { XBell(dpy, percent); return False; } return XkbForceDeviceBell(dpy, XkbUseCoreKbd, XkbDfltXIClass, XkbDfltXIId, percent); } Bool XkbBellEvent(Display *dpy, Window window, int percent, Atom name) { if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) { return False; } /* class 0 = KbdFeedbackClass (X Input Extension) */ return XkbDeviceBellEvent(dpy, window, XkbUseCoreKbd, XkbDfltXIClass, XkbDfltXIId, percent, name); } ame = (CARD32) name; req->pad1 = 0; req->pad2 = 0; UnlockDisplay(dpy); SyncHandle(); return True; } Bool XkbForceDeviceBell(Display *dpy, int deviceID, int bellClass, int bellID, int percent) { register xkbBellRelibX11-1.6.3/src/xkb/XKBCvt.c000064401431060000012000000227501247741723500157040ustar00alancstaff00002660200006/* Copyright 1988, 1989, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include #include "Xlibint.h" #include "Xlcint.h" #include "XlcPubI.h" #include "Ximint.h" #include #include #define XK_LATIN1 #define XK_PUBLISHING #include #include #include "XKBlibint.h" #include #include #include #ifdef __sgi_not_xconsortium #define XKB_EXTEND_LOOKUP_STRING #endif static int _XkbHandleSpecialSym(KeySym keysym, char *buffer, int nbytes, int *extra_rtrn) { /* try to convert to Latin-1, handling ctrl */ if (!(((keysym >= XK_BackSpace) && (keysym <= XK_Clear)) || (keysym == XK_Return) || (keysym == XK_Escape) || (keysym == XK_KP_Space) || (keysym == XK_KP_Tab) || (keysym == XK_KP_Enter) || ((keysym >= XK_KP_Multiply) && (keysym <= XK_KP_9)) || (keysym == XK_KP_Equal) || (keysym == XK_Delete))) return 0; if (nbytes < 1) { if (extra_rtrn) *extra_rtrn = 1; return 0; } /* if X keysym, convert to ascii by grabbing low 7 bits */ if (keysym == XK_KP_Space) buffer[0] = XK_space & 0x7F; /* patch encoding botch */ else if (keysym == XK_hyphen) buffer[0] = (char) (XK_minus & 0xFF); /* map to equiv character */ else buffer[0] = (char) (keysym & 0x7F); return 1; } /*ARGSUSED*/ static int _XkbKSToKnownSet(XPointer priv, KeySym keysym, char *buffer, int nbytes, int *extra_rtrn) { char tbuf[8], *buf; if (extra_rtrn) *extra_rtrn = 0; /* convert "dead" diacriticals for dumb applications */ if ((keysym & 0xffffff00) == 0xfe00) { switch (keysym) { case XK_dead_grave: keysym = XK_grave; break; case XK_dead_acute: keysym = XK_acute; break; case XK_dead_circumflex: keysym = XK_asciicircum; break; case XK_dead_tilde: keysym = XK_asciitilde; break; case XK_dead_macron: keysym = XK_macron; break; case XK_dead_breve: keysym = XK_breve; break; case XK_dead_abovedot: keysym = XK_abovedot; break; case XK_dead_diaeresis: keysym = XK_diaeresis; break; case XK_dead_abovering: keysym = XK_degree; break; case XK_dead_doubleacute: keysym = XK_doubleacute; break; case XK_dead_caron: keysym = XK_caron; break; case XK_dead_cedilla: keysym = XK_cedilla; break; case XK_dead_ogonek: keysym = XK_ogonek; break; case XK_dead_iota: keysym = XK_Greek_iota; break; #ifdef XK_KATAKANA case XK_dead_voiced_sound: keysym = XK_voicedsound; break; case XK_dead_semivoiced_sound: keysym = XK_semivoicedsound; break; #endif } } if (nbytes < 1) buf = tbuf; else buf = buffer; if ((keysym & 0xffffff00) == 0xff00) { return _XkbHandleSpecialSym(keysym, buf, nbytes, extra_rtrn); } return _XimGetCharCode(priv, keysym, (unsigned char *) buf, nbytes); } typedef struct _XkbToKS { unsigned prefix; char *map; } XkbToKS; /*ARGSUSED*/ static KeySym _XkbKnownSetToKS(XPointer priv, char *buffer, int nbytes, Status *status) { if (nbytes != 1) return NoSymbol; if (((buffer[0] & 0x80) == 0) && (buffer[0] >= 32)) return buffer[0]; else if ((buffer[0] & 0x7f) >= 32) { XkbToKS *map = (XkbToKS *) priv; if (map) { if (map->map) return map->prefix | map->map[buffer[0] & 0x7f]; else return map->prefix | buffer[0]; } return buffer[0]; } return NoSymbol; } static KeySym __XkbDefaultToUpper(KeySym sym) { KeySym lower, upper; XConvertCase(sym, &lower, &upper); return upper; } #ifdef XKB_EXTEND_LOOKUP_STRING static int Strcmp(char *str1, char *str2) { char str[256]; char c, *s; /* * unchecked strings from the environment can end up here, so check * the length before copying. */ if (strlen(str1) >= sizeof(str)) /* almost certain it's a mismatch */ return 1; for (s = str; (c = *str1++);) { if (isupper(c)) c = tolower(c); *s++ = c; } *s = '\0'; return (strcmp(str, str2)); } #endif int _XkbGetConverters(const char *encoding_name, XkbConverters * cvt_rtrn) { if (!cvt_rtrn) return 0; cvt_rtrn->KSToMB = _XkbKSToKnownSet; cvt_rtrn->KSToMBPriv = _XimGetLocaleCode(encoding_name); cvt_rtrn->MBToKS = _XkbKnownSetToKS; cvt_rtrn->MBToKSPriv = NULL; cvt_rtrn->KSToUpper = __XkbDefaultToUpper; return 1; } /***====================================================================***/ /* * The function _XkbGetCharset seems to be missnamed as what it seems to * be used for is to determine the encoding-name for the locale. ??? */ #ifdef XKB_EXTEND_LOOKUP_STRING /* * XKB_EXTEND_LOOKUP_STRING is not used by the SI. It is used by various * X Consortium/X Project Team members, so we leave it in the source as * an simplify integration by these companies. */ #define CHARSET_FILE "/usr/lib/X11/input/charsets" static char *_XkbKnownLanguages = "c=ascii:da,de,en,es,fr,is,it,nl,no,pt,sv=iso8859-1:hu,pl,cs=iso8859-2:" "eo=iso8859-3:sp=iso8859-5:ar,ara=iso8859-6:el=iso8859-7:he=iso8859-8:" "tr=iso8859-9:lt,lv=iso8859-13:et,fi=iso8859-15:ru=koi8-r:uk=koi8-u:" "th,th_TH,th_TH.iso8859-11=iso8859-11:th_TH.TIS620=tis620:hy=armscii-8:" "vi=tcvn-5712:ka=georgian-academy:be,bg=microsoft-cp1251"; char * _XkbGetCharset(void) { /* * PAGE USAGE TUNING: explicitly initialize to move these to data * instead of bss */ static char buf[100] = { 0 }; char lang[256]; char *start, *tmp, *end, *next, *set; char *country, *charset; char *locale; tmp = getenv("_XKB_CHARSET"); if (tmp) return tmp; locale = setlocale(LC_CTYPE, NULL); if (locale == NULL) return NULL; if (strlen(locale) >= sizeof(lang)) return NULL; for (tmp = lang; *tmp = *locale++; tmp++) { if (isupper(*tmp)) *tmp = tolower(*tmp); } country = strchr(lang, '_'); if (country) { *country++ = '\0'; charset = strchr(country, '.'); if (charset) *charset++ = '\0'; if (charset) { strncpy(buf, charset, 99); buf[99] = '\0'; return buf; } } else { charset = NULL; } if ((tmp = getenv("_XKB_LOCALE_CHARSETS")) != NULL) { start = _XkbAlloc(strlen(tmp) + 1); strcpy(start, tmp); tmp = start; } else { struct stat sbuf; FILE *file; #ifndef __UNIXOS2__ char *cf = CHARSET_FILE; #else char *cf = __XOS2RedirRoot(CHARSET_FILE); #endif #ifndef S_ISREG # define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG) #endif if ((stat(cf, &sbuf) == 0) && S_ISREG(sbuf.st_mode) && (file = fopen(cf, "r"))) { tmp = _XkbAlloc(sbuf.st_size + 1); if (tmp != NULL) { sbuf.st_size = (long) fread(tmp, 1, sbuf.st_size, file); tmp[sbuf.st_size] = '\0'; } fclose(file); } } if (tmp == NULL) { tmp = _XkbAlloc(strlen(_XkbKnownLanguages) + 1); if (!tmp) return NULL; strcpy(tmp, _XkbKnownLanguages); } start = tmp; do { if ((set = strchr(tmp, '=')) == NULL) break; *set++ = '\0'; if ((next = strchr(set, ':')) != NULL) *next++ = '\0'; while (tmp && *tmp) { if ((end = strchr(tmp, ',')) != NULL) *end++ = '\0'; if (Strcmp(tmp, lang) == 0) { strncpy(buf, set, 100); buf[99] = '\0'; Xfree(start); return buf; } tmp = end; } tmp = next; } while (tmp && *tmp); Xfree(start); return NULL; } #else char * _XkbGetCharset(void) { char *tmp; XLCd lcd; tmp = getenv("_XKB_CHARSET"); if (tmp) return tmp; lcd = _XlcCurrentLC(); if (lcd) return XLC_PUBLIC(lcd, encoding_name); return NULL; } #endif inus & 0xFF); /* map tlibX11-1.6.3/src/xkb/XKBList.c000064401431060000012000000202001247741723500160470ustar00alancstaff00002660200006/************************************************************ Copyright (c) 1995 by Silicon Graphics Computer Systems, Inc. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Silicon Graphics not be used in advertising or publicity pertaining to distribution of the software without specific prior written permission. Silicon Graphics makes no representation about the suitability of this software for any purpose. It is provided "as is" without any express or implied warranty. SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ********************************************************/ #define NEED_MAP_READERS #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include #include "XKBlibint.h" /***====================================================================***/ static void _FreeComponentNames(int num, XkbComponentNamePtr names) { int i; XkbComponentNamePtr tmp; if ((num < 1) || (names == NULL)) return; for (i = 0, tmp = names; i < num; i++, tmp++) { if (tmp->name) { _XkbFree(tmp->name); tmp->name = NULL; } } _XkbFree(names); return; } /***====================================================================***/ static XkbComponentNamePtr _ReadListing(XkbReadBufferPtr buf, int count, Status * status_rtrn) { XkbComponentNamePtr first, this; register int i; CARD16 *flags; int slen, wlen; char *str; if (count < 1) return NULL; first = _XkbTypedCalloc(count, XkbComponentNameRec); if (!first) return NULL; for (this = first, i = 0; i < count; i++, this++) { flags = (CARD16 *) _XkbGetReadBufferPtr(buf, 2 * sizeof(CARD16)); if (!flags) goto BAILOUT; this->flags = flags[0]; slen = flags[1]; wlen = ((slen + 1) / 2) * 2; /* pad to 2 byte boundary */ this->name = _XkbTypedCalloc(slen + 1, char); if (!this->name) goto BAILOUT; str = (char *) _XkbGetReadBufferPtr(buf, wlen); if (!str) goto BAILOUT; memcpy(this->name, str, slen); } return first; BAILOUT: *status_rtrn = BadAlloc; _FreeComponentNames(i, first); return NULL; } /***====================================================================***/ XkbComponentListPtr XkbListComponents(Display *dpy, unsigned deviceSpec, XkbComponentNamesPtr ptrns, int *max_inout) { register xkbListComponentsReq *req; xkbListComponentsReply rep; XkbInfoPtr xkbi; XkbComponentListPtr list; XkbReadBufferRec buf; int left; char *str; int extraLen, len, mapLen, codesLen, typesLen, compatLen, symsLen, geomLen; if ((dpy == NULL) || (dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL)) || (ptrns == NULL) || (max_inout == NULL)) return NULL; xkbi = dpy->xkb_info; LockDisplay(dpy); GetReq(kbListComponents, req); req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbListComponents; req->deviceSpec = deviceSpec; req->maxNames = *max_inout; mapLen = codesLen = typesLen = compatLen = symsLen = geomLen = 0; if (ptrns->keymap) mapLen = (int) strlen(ptrns->keymap); if (ptrns->keycodes) codesLen = (int) strlen(ptrns->keycodes); if (ptrns->types) typesLen = (int) strlen(ptrns->types); if (ptrns->compat) compatLen = (int) strlen(ptrns->compat); if (ptrns->symbols) symsLen = (int) strlen(ptrns->symbols); if (ptrns->geometry) geomLen = (int) strlen(ptrns->geometry); if (mapLen > 255) mapLen = 255; if (codesLen > 255) codesLen = 255; if (typesLen > 255) typesLen = 255; if (compatLen > 255) compatLen = 255; if (symsLen > 255) symsLen = 255; if (geomLen > 255) geomLen = 255; len = mapLen + codesLen + typesLen + compatLen + symsLen + geomLen + 6; len = XkbPaddedSize(len); req->length += len / 4; BufAlloc(char *, str, len); *str++ = mapLen; if (mapLen > 0) { memcpy(str, ptrns->keymap, mapLen); str += mapLen; } *str++ = codesLen; if (codesLen > 0) { memcpy(str, ptrns->keycodes, codesLen); str += codesLen; } *str++ = typesLen; if (typesLen > 0) { memcpy(str, ptrns->types, typesLen); str += typesLen; } *str++ = compatLen; if (compatLen > 0) { memcpy(str, ptrns->compat, compatLen); str += compatLen; } *str++ = symsLen; if (symsLen > 0) { memcpy(str, ptrns->symbols, symsLen); str += symsLen; } *str++ = geomLen; if (geomLen > 0) { memcpy(str, ptrns->geometry, geomLen); str += geomLen; } if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) goto BAILOUT; extraLen = (int) rep.length * 4; *max_inout = rep.extra; if (extraLen == 0) { /* no matches, but we don't want to report a failure */ list = _XkbTypedCalloc(1, XkbComponentListRec); UnlockDisplay(dpy); SyncHandle(); return list; } if (_XkbInitReadBuffer(dpy, &buf, extraLen)) { Status status = Success; list = _XkbTypedCalloc(1, XkbComponentListRec); if (!list) { _XkbFreeReadBuffer(&buf); goto BAILOUT; } list->num_keymaps = rep.nKeymaps; list->num_keycodes = rep.nKeycodes; list->num_types = rep.nTypes; list->num_compat = rep.nCompatMaps; list->num_symbols = rep.nSymbols; list->num_geometry = rep.nGeometries; if ((status == Success) && (list->num_keymaps > 0)) list->keymaps = _ReadListing(&buf, list->num_keymaps, &status); if ((status == Success) && (list->num_keycodes > 0)) list->keycodes = _ReadListing(&buf, list->num_keycodes, &status); if ((status == Success) && (list->num_types > 0)) list->types = _ReadListing(&buf, list->num_types, &status); if ((status == Success) && (list->num_compat > 0)) list->compat = _ReadListing(&buf, list->num_compat, &status); if ((status == Success) && (list->num_symbols > 0)) list->symbols = _ReadListing(&buf, list->num_symbols, &status); if ((status == Success) && (list->num_geometry > 0)) list->geometry = _ReadListing(&buf, list->num_geometry, &status); left = _XkbFreeReadBuffer(&buf); if ((status != Success) || (buf.error) || (left > 2)) { XkbFreeComponentList(list); goto BAILOUT; } UnlockDisplay(dpy); SyncHandle(); return list; } BAILOUT: UnlockDisplay(dpy); SyncHandle(); return NULL; } void XkbFreeComponentList(XkbComponentListPtr list) { if (list) { if (list->keymaps) _FreeComponentNames(list->num_keymaps, list->keymaps); if (list->keycodes) _FreeComponentNames(list->num_keycodes, list->keycodes); if (list->types) _FreeComponentNames(list->num_types, list->types); if (list->compat) _FreeComponentNames(list->num_compat, list->compat); if (list->symbols) _FreeComponentNames(list->num_symbols, list->symbols); if (list->geometry) _FreeComponentNames(list->num_geometry, list->geometry); bzero((char *) list, sizeof(XkbComponentListRec)); _XkbFree(list); } return; } NG OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ********************************************************/ #define NEED_MAP_READERS #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include #include "XKBlibint.h" /***====================================================================***/ static void _FreelibX11-1.6.3/src/xkb/XKBRdBuf.c000064401431060000012000000120561247741723500161500ustar00alancstaff00002660200006/************************************************************ Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Silicon Graphics not be used in advertising or publicity pertaining to distribution of the software without specific prior written permission. Silicon Graphics makes no representation about the suitability of this software for any purpose. It is provided "as is" without any express or implied warranty. SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ********************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #include "Xlibint.h" #include "XKBlibint.h" #include /***====================================================================***/ int _XkbInitReadBuffer(Display *dpy, XkbReadBufferPtr buf, int size) { if ((dpy != NULL) && (buf != NULL) && (size > 0)) { buf->error = 0; buf->size = size; buf->start = buf->data = _XkbAlloc(size); if (buf->start) { _XRead(dpy, buf->start, size); return 1; } } return 0; } #define _XkbReadBufferDataLeft(b) (((b)->size)-((b)->data-(b)->start)) int _XkbSkipReadBufferData(XkbReadBufferPtr from, int size) { if (size == 0) return 1; if ((from == NULL) || (from->error) || (size < 1) || (_XkbReadBufferDataLeft(from) < size)) return 0; from->data += size; return 1; } int _XkbCopyFromReadBuffer(XkbReadBufferPtr from, char *to, int size) { if (size == 0) return 1; if ((from == NULL) || (from->error) || (to == NULL) || (size < 1) || (_XkbReadBufferDataLeft(from) < size)) return 0; memcpy(to, from->data, size); from->data += size; return 1; } #ifdef XKB_FORCE_INT_KEYSYM int _XkbReadCopyKeySyms(int *wire, KeySym * to, int num_words) { while (num_words-- > 0) { *to++ = *wire++; } return 1; } int _XkbReadBufferCopyKeySyms(XkbReadBufferPtr from, KeySym * to, int num_words) { if ((unsigned) (num_words * 4) > _XkbReadBufferDataLeft(from)) return 0; _XkbReadCopyKeySyms((int *) from->data, to, num_words); from->data += (4 * num_words); return True; } int _XkbWriteCopyKeySyms(register KeySym * from, CARD32 *to, int len) { while (len-- > 0) { *to++ = (CARD32) *from++; } return True; } #endif #ifdef LONG64 int _XkbReadCopyData32(int *wire, long *to, int num_words) { while (num_words-- > 0) { *to++ = *wire++; } return 1; } int _XkbReadBufferCopy32(XkbReadBufferPtr from, long *to, int num_words) { if ((unsigned) (num_words * 4) > _XkbReadBufferDataLeft(from)) return 0; _XkbReadCopyData32((int *) from->data, to, num_words); from->data += (4 * num_words); return True; } int _XkbWriteCopyData32(register unsigned long *from, CARD32 *to, int len) { while (len-- > 0) { *to++ = (CARD32) *from++; } return True; } #endif /* LONG64 */ char * _XkbPeekAtReadBuffer(XkbReadBufferPtr from, int size) { if ((from == NULL) || (from->error) || (size < 1) || (_XkbReadBufferDataLeft(from) < size)) return NULL; return from->data; } char * _XkbGetReadBufferPtr(XkbReadBufferPtr from, int size) { char *ptr; if ((from == NULL) || (from->error) || (size < 1) || (_XkbReadBufferDataLeft(from) < size)) return NULL; ptr = from->data; from->data += size; return ptr; } int _XkbFreeReadBuffer(XkbReadBufferPtr buf) { if ((buf != NULL) && (buf->start != NULL)) { int left; left = (int) _XkbReadBufferDataLeft(buf); Xfree(buf->start); buf->size = 0; buf->start = buf->data = NULL; return left; } return 0; } Bool _XkbGetReadBufferCountedString(XkbReadBufferPtr buf, char **rtrn) { CARD16 len, *pLen; int left; char *str = NULL; if ((buf == NULL) || (buf->error) || ((left = (int) _XkbReadBufferDataLeft(buf)) < 4)) return False; pLen = (CARD16 *) buf->data; len = *pLen; if (len > 0) { if (XkbPaddedSize(len + 2) > left) return False; str = _XkbAlloc(len + 1); if (str) { memcpy(str, &buf->data[2], len); str[len] = '\0'; } } buf->data += XkbPaddedSize(len + 2); *rtrn = str; return True; } libX11-1.6.3/src/xkb/XKBGetMap.c000064401431060000012000000662411247741723500163300ustar00alancstaff00002660200006/************************************************************ Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Silicon Graphics not be used in advertising or publicity pertaining to distribution of the software without specific prior written permission. Silicon Graphics makes no representation about the suitability of this software for any purpose. It is provided "as is" without any express or implied warranty. SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ********************************************************/ #define NEED_MAP_READERS #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include #include "XKBlibint.h" static Status _XkbReadKeyTypes(XkbReadBufferPtr buf, XkbDescPtr xkb, xkbGetMapReply *rep) { int i, n, lastMapCount; XkbKeyTypePtr type; if (rep->nTypes > 0) { n = rep->firstType + rep->nTypes; if (xkb->map->num_types >= n) n = xkb->map->num_types; else if (XkbAllocClientMap(xkb, XkbKeyTypesMask, n) != Success) return BadAlloc; type = &xkb->map->types[rep->firstType]; for (i = 0; i < (int) rep->nTypes; i++, type++) { xkbKeyTypeWireDesc *desc; register int ndx; ndx = i + rep->firstType; if (ndx >= xkb->map->num_types) xkb->map->num_types = ndx + 1; desc = (xkbKeyTypeWireDesc *) _XkbGetReadBufferPtr(buf, SIZEOF(xkbKeyTypeWireDesc)); if (desc == NULL) return BadLength; lastMapCount = type->map_count; if (desc->nMapEntries > 0) { if ((type->map == NULL) || (desc->nMapEntries > type->map_count)) { XkbKTMapEntryRec *prev_map = type->map; type->map = _XkbTypedRealloc(type->map, desc->nMapEntries, XkbKTMapEntryRec); if (type->map == NULL) { _XkbFree(prev_map); return BadAlloc; } } } else if (type->map != NULL) { Xfree(type->map); type->map_count = 0; type->map = NULL; } if (desc->preserve && (desc->nMapEntries > 0)) { if ((!type->preserve) || (desc->nMapEntries > lastMapCount)) { XkbModsRec *prev_preserve = type->preserve; type->preserve = _XkbTypedRealloc(type->preserve, desc->nMapEntries, XkbModsRec); if (type->preserve == NULL) { _XkbFree(prev_preserve); return BadAlloc; } } } else if (type->preserve != NULL) { Xfree(type->preserve); type->preserve = NULL; } type->mods.mask = desc->mask; type->mods.real_mods = desc->realMods; type->mods.vmods = desc->virtualMods; type->num_levels = desc->numLevels; type->map_count = desc->nMapEntries; if (desc->nMapEntries > 0) { register xkbKTMapEntryWireDesc *wire; register XkbKTMapEntryPtr entry; register int size; size = type->map_count * SIZEOF(xkbKTMapEntryWireDesc); wire = (xkbKTMapEntryWireDesc *) _XkbGetReadBufferPtr(buf, size); if (wire == NULL) return BadLength; entry = type->map; for (n = 0; n < type->map_count; n++, wire++, entry++) { entry->active = wire->active; entry->level = wire->level; entry->mods.mask = wire->mask; entry->mods.real_mods = wire->realMods; entry->mods.vmods = wire->virtualMods; } if (desc->preserve) { register xkbModsWireDesc *pwire; register XkbModsPtr preserve; register int sz; sz = desc->nMapEntries * SIZEOF(xkbModsWireDesc); pwire = (xkbModsWireDesc *) _XkbGetReadBufferPtr(buf, sz); if (pwire == NULL) return BadLength; preserve = type->preserve; for (n = 0; n < desc->nMapEntries; n++, pwire++, preserve++) { preserve->mask = pwire->mask; preserve->vmods = pwire->virtualMods; preserve->real_mods = pwire->realMods; } } } } } return Success; } static Status _XkbReadKeySyms(XkbReadBufferPtr buf, XkbDescPtr xkb, xkbGetMapReply *rep) { register int i; XkbClientMapPtr map; int size = xkb->max_key_code + 1; if (((unsigned short) rep->firstKeySym + rep->nKeySyms) > size) return BadLength; map = xkb->map; if (map->key_sym_map == NULL) { register int offset; XkbSymMapPtr oldMap; xkbSymMapWireDesc *newMap; map->key_sym_map = _XkbTypedCalloc(size, XkbSymMapRec); if (map->key_sym_map == NULL) return BadAlloc; if (map->syms == NULL) { int sz; sz = (rep->totalSyms * 12) / 10; sz = ((sz + (unsigned) 128) / 128) * 128; map->syms = _XkbTypedCalloc(sz, KeySym); if (map->syms == NULL) return BadAlloc; map->size_syms = sz; } offset = 1; oldMap = &map->key_sym_map[rep->firstKeySym]; for (i = 0; i < (int) rep->nKeySyms; i++, oldMap++) { newMap = (xkbSymMapWireDesc *) _XkbGetReadBufferPtr(buf, SIZEOF(xkbSymMapWireDesc)); if (newMap == NULL) return BadLength; oldMap->kt_index[0] = newMap->ktIndex[0]; oldMap->kt_index[1] = newMap->ktIndex[1]; oldMap->kt_index[2] = newMap->ktIndex[2]; oldMap->kt_index[3] = newMap->ktIndex[3]; oldMap->group_info = newMap->groupInfo; oldMap->width = newMap->width; oldMap->offset = offset; if (offset + newMap->nSyms >= map->size_syms) { register int sz; KeySym *prev_syms = map->syms; sz = map->size_syms + 128; map->syms = _XkbTypedRealloc(map->syms, sz, KeySym); if (map->syms == NULL) { _XkbFree(prev_syms); map->size_syms = 0; return BadAlloc; } map->size_syms = sz; } if (newMap->nSyms > 0) { _XkbReadBufferCopyKeySyms(buf, (KeySym *) &map->syms[offset], newMap->nSyms); offset += newMap->nSyms; } else { map->syms[offset] = 0; } } map->num_syms = offset; } else { XkbSymMapPtr oldMap = &map->key_sym_map[rep->firstKeySym]; for (i = 0; i < (int) rep->nKeySyms; i++, oldMap++) { xkbSymMapWireDesc *newMap; KeySym *newSyms; int tmp; newMap = (xkbSymMapWireDesc *) _XkbGetReadBufferPtr(buf, SIZEOF(xkbSymMapWireDesc)); if (newMap == NULL) return BadLength; if (newMap->nSyms > 0) tmp = newMap->nSyms; else tmp = 0; newSyms = XkbResizeKeySyms(xkb, i + rep->firstKeySym, tmp); if (newSyms == NULL) return BadAlloc; if (newMap->nSyms > 0) _XkbReadBufferCopyKeySyms(buf, newSyms, newMap->nSyms); else newSyms[0] = NoSymbol; oldMap->kt_index[0] = newMap->ktIndex[0]; oldMap->kt_index[1] = newMap->ktIndex[1]; oldMap->kt_index[2] = newMap->ktIndex[2]; oldMap->kt_index[3] = newMap->ktIndex[3]; oldMap->group_info = newMap->groupInfo; oldMap->width = newMap->width; } } return Success; } static Status _XkbReadKeyActions(XkbReadBufferPtr buf, XkbDescPtr info, xkbGetMapReply *rep) { int i; CARD8 numDescBuf[248]; CARD8 *numDesc = NULL; register int nKeyActs; Status ret = Success; if ((nKeyActs = rep->nKeyActs) > 0) { XkbSymMapPtr symMap; if (nKeyActs < sizeof numDescBuf) numDesc = numDescBuf; else numDesc = Xmalloc(nKeyActs * sizeof(CARD8)); if (!_XkbCopyFromReadBuffer(buf, (char *) numDesc, nKeyActs)) { ret = BadLength; goto done; } i = XkbPaddedSize(nKeyActs) - nKeyActs; if ((i > 0) && (!_XkbSkipReadBufferData(buf, i))) { ret = BadLength; goto done; } symMap = &info->map->key_sym_map[rep->firstKeyAct]; for (i = 0; i < (int) rep->nKeyActs; i++, symMap++) { if (numDesc[i] == 0) { if ((i + rep->firstKeyAct) > (info->max_key_code + 1)) { ret = BadLength; goto done; } info->server->key_acts[i + rep->firstKeyAct] = 0; } else { XkbAction *newActs; /* 8/16/93 (ef) -- XXX! Verify size here (numdesc must be */ /* either zero or XkbKeyNumSyms(info,key) */ newActs = XkbResizeKeyActions(info, i + rep->firstKeyAct, numDesc[i]); if (newActs == NULL) { ret = BadAlloc; goto done; } if (!_XkbCopyFromReadBuffer(buf, (char *) newActs, (int) (numDesc[i] * sizeof(XkbAction)))) { ret = BadLength; goto done; } } } } done: if (numDesc != NULL && numDesc != numDescBuf) Xfree(numDesc); return ret; } static Status _XkbReadKeyBehaviors(XkbReadBufferPtr buf, XkbDescPtr xkb, xkbGetMapReply *rep) { register int i; if (rep->totalKeyBehaviors > 0) { int size = xkb->max_key_code + 1; if (((int) rep->firstKeyBehavior + rep->nKeyBehaviors) > size) return BadLength; if (xkb->server->behaviors == NULL) { xkb->server->behaviors = _XkbTypedCalloc(size, XkbBehavior); if (xkb->server->behaviors == NULL) return BadAlloc; } else { bzero(&xkb->server->behaviors[rep->firstKeyBehavior], (rep->nKeyBehaviors * sizeof(XkbBehavior))); } for (i = 0; i < rep->totalKeyBehaviors; i++) { xkbBehaviorWireDesc *wire; wire = (xkbBehaviorWireDesc *) _XkbGetReadBufferPtr(buf, SIZEOF(xkbBehaviorWireDesc)); if (wire == NULL || wire->key >= size) return BadLength; xkb->server->behaviors[wire->key].type = wire->type; xkb->server->behaviors[wire->key].data = wire->data; } } return Success; } static Status _XkbReadVirtualMods(XkbReadBufferPtr buf, XkbDescPtr xkb, xkbGetMapReply *rep) { if (rep->virtualMods) { register int i, bit, nVMods; register char *data; for (i = nVMods = 0, bit = 1; i < XkbNumVirtualMods; i++, bit <<= 1) { if (rep->virtualMods & bit) nVMods++; } data = _XkbGetReadBufferPtr(buf, XkbPaddedSize(nVMods)); if (data == NULL) return BadLength; for (i = 0, bit = 1; (i < XkbNumVirtualMods) && (nVMods > 0); i++, bit <<= 1) { if (rep->virtualMods & bit) { xkb->server->vmods[i] = *data++; nVMods--; } } } return Success; } static Status _XkbReadExplicitComponents(XkbReadBufferPtr buf, XkbDescPtr xkb, xkbGetMapReply *rep) { register int i; unsigned char *wire; if (rep->totalKeyExplicit > 0) { int size = xkb->max_key_code + 1; if (((int) rep->firstKeyExplicit + rep->nKeyExplicit) > size) return BadLength; if (xkb->server->explicit == NULL) { xkb->server->explicit = _XkbTypedCalloc(size, unsigned char); if (xkb->server->explicit == NULL) return BadAlloc; } else { bzero(&xkb->server->explicit[rep->firstKeyExplicit], rep->nKeyExplicit); } i = XkbPaddedSize(2 * rep->totalKeyExplicit); wire = (unsigned char *) _XkbGetReadBufferPtr(buf, i); if (!wire) return BadLength; for (i = 0; i < rep->totalKeyExplicit; i++, wire += 2) { if (wire[0] > xkb->max_key_code || wire[1] > xkb->max_key_code) return BadLength; xkb->server->explicit[wire[0]] = wire[1]; } } return Success; } static Status _XkbReadModifierMap(XkbReadBufferPtr buf, XkbDescPtr xkb, xkbGetMapReply *rep) { register int i; unsigned char *wire; if (rep->totalModMapKeys > 0) { if (((int) rep->firstModMapKey + rep->nModMapKeys) > (xkb->max_key_code + 1)) return BadLength; if ((xkb->map->modmap == NULL) && (XkbAllocClientMap(xkb, XkbModifierMapMask, 0) != Success)) { return BadAlloc; } else { bzero(&xkb->map->modmap[rep->firstModMapKey], rep->nModMapKeys); } i = XkbPaddedSize(2 * rep->totalModMapKeys); wire = (unsigned char *) _XkbGetReadBufferPtr(buf, i); if (!wire) return BadLength; for (i = 0; i < rep->totalModMapKeys; i++, wire += 2) { if (wire[0] > xkb->max_key_code || wire[1] > xkb->max_key_code) return BadLength; xkb->map->modmap[wire[0]] = wire[1]; } } return Success; } static Status _XkbReadVirtualModMap(XkbReadBufferPtr buf, XkbDescPtr xkb, xkbGetMapReply *rep) { register int i; xkbVModMapWireDesc *wire; XkbServerMapPtr srv; if (rep->totalVModMapKeys > 0) { if (((int) rep->firstVModMapKey + rep->nVModMapKeys) > xkb->max_key_code + 1) return BadLength; if (((xkb->server == NULL) || (xkb->server->vmodmap == NULL)) && (XkbAllocServerMap(xkb, XkbVirtualModMapMask, 0) != Success)) { return BadAlloc; } else { srv = xkb->server; if (rep->nVModMapKeys > rep->firstVModMapKey) bzero((char *) &srv->vmodmap[rep->firstVModMapKey], (rep->nVModMapKeys - rep->firstVModMapKey) * sizeof(unsigned short)); } srv = xkb->server; i = rep->totalVModMapKeys * SIZEOF(xkbVModMapWireDesc); wire = (xkbVModMapWireDesc *) _XkbGetReadBufferPtr(buf, i); if (!wire) return BadLength; for (i = 0; i < rep->totalVModMapKeys; i++, wire++) { if ((wire->key >= xkb->min_key_code) && (wire->key <= xkb->max_key_code)) srv->vmodmap[wire->key] = wire->vmods; } } return Success; } static xkbGetMapReq * _XkbGetGetMapReq(Display *dpy, XkbDescPtr xkb) { xkbGetMapReq *req; GetReq(kbGetMap, req); req->reqType = dpy->xkb_info->codes->major_opcode; req->xkbReqType = X_kbGetMap; req->deviceSpec = xkb->device_spec; req->full = req->partial = 0; req->firstType = req->nTypes = 0; req->firstKeySym = req->nKeySyms = 0; req->firstKeyAct = req->nKeyActs = 0; req->firstKeyBehavior = req->nKeyBehaviors = 0; req->virtualMods = 0; req->firstKeyExplicit = req->nKeyExplicit = 0; req->firstModMapKey = req->nModMapKeys = 0; req->firstVModMapKey = req->nVModMapKeys = 0; return req; } Status _XkbReadGetMapReply(Display *dpy, xkbGetMapReply *rep, XkbDescPtr xkb, int *nread_rtrn) { int extraData; unsigned mask; if (xkb->device_spec == XkbUseCoreKbd) xkb->device_spec = rep->deviceID; if (rep->maxKeyCode < rep->minKeyCode) return BadImplementation; xkb->min_key_code = rep->minKeyCode; xkb->max_key_code = rep->maxKeyCode; if (!xkb->map) { mask = rep->present & XkbAllClientInfoMask; if (mask && (XkbAllocClientMap(xkb, mask, rep->nTypes) != Success)) return BadAlloc; } if (!xkb->server) { mask = rep->present & XkbAllServerInfoMask; if (mask && (XkbAllocServerMap(xkb, mask, rep->totalActs) != Success)) return BadAlloc; } extraData = (int) (rep->length * 4); extraData -= (SIZEOF(xkbGetMapReply) - SIZEOF(xGenericReply)); if (rep->length) { XkbReadBufferRec buf; int left; if (_XkbInitReadBuffer(dpy, &buf, extraData)) { Status status = Success; if (nread_rtrn != NULL) *nread_rtrn = extraData; if (status == Success) status = _XkbReadKeyTypes(&buf, xkb, rep); if (status == Success) status = _XkbReadKeySyms(&buf, xkb, rep); if (status == Success) status = _XkbReadKeyActions(&buf, xkb, rep); if (status == Success) status = _XkbReadKeyBehaviors(&buf, xkb, rep); if (status == Success) status = _XkbReadVirtualMods(&buf, xkb, rep); if (status == Success) status = _XkbReadExplicitComponents(&buf, xkb, rep); if (status == Success) status = _XkbReadModifierMap(&buf, xkb, rep); if (status == Success) status = _XkbReadVirtualModMap(&buf, xkb, rep); left = _XkbFreeReadBuffer(&buf); if (status != Success) return status; else if (left || buf.error) return BadLength; } else return BadAlloc; } return Success; } static Status _XkbHandleGetMapReply(Display *dpy, XkbDescPtr xkb) { xkbGetMapReply rep; if (!_XReply(dpy, (xReply *) &rep, ((SIZEOF(xkbGetMapReply) - SIZEOF(xGenericReply)) >> 2), xFalse)) { return BadImplementation; } return _XkbReadGetMapReply(dpy, &rep, xkb, NULL); } Status XkbGetUpdatedMap(Display *dpy, unsigned which, XkbDescPtr xkb) { if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return BadAccess; if (which) { register xkbGetMapReq *req; Status status; LockDisplay(dpy); req = _XkbGetGetMapReq(dpy, xkb); req->full = which; status = _XkbHandleGetMapReply(dpy, xkb); UnlockDisplay(dpy); SyncHandle(); return status; } return Success; } XkbDescPtr XkbGetMap(Display *dpy, unsigned which, unsigned deviceSpec) { XkbDescPtr xkb; xkb = _XkbTypedCalloc(1, XkbDescRec); if (xkb) { xkb->device_spec = deviceSpec; xkb->map = _XkbTypedCalloc(1, XkbClientMapRec); if ((xkb->map == NULL) || ((which) && (XkbGetUpdatedMap(dpy, which, xkb) != Success))) { if (xkb->map) { Xfree(xkb->map); xkb->map = NULL; } Xfree(xkb); return NULL; } xkb->dpy = dpy; } return xkb; } Status XkbGetKeyTypes(Display *dpy, unsigned first, unsigned num, XkbDescPtr xkb) { register xkbGetMapReq *req; Status status; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return BadAccess; if ((num < 1) || (num > XkbMaxKeyTypes)) return BadValue; LockDisplay(dpy); req = _XkbGetGetMapReq(dpy, xkb); req->firstType = first; req->nTypes = num; status = _XkbHandleGetMapReply(dpy, xkb); UnlockDisplay(dpy); SyncHandle(); return status; } Status XkbGetKeyActions(Display *dpy, unsigned first, unsigned num, XkbDescPtr xkb) { register xkbGetMapReq *req; Status status; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return BadAccess; if ((num < 1) || (num > XkbMaxKeyCount)) return BadValue; LockDisplay(dpy); req = _XkbGetGetMapReq(dpy, xkb); req->firstKeyAct = first; req->nKeyActs = num; status = _XkbHandleGetMapReply(dpy, xkb); UnlockDisplay(dpy); SyncHandle(); return status; } Status XkbGetKeySyms(Display *dpy, unsigned first, unsigned num, XkbDescPtr xkb) { register xkbGetMapReq *req; Status status; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return BadAccess; if ((num < 1) || (num > XkbMaxKeyCount)) return BadValue; LockDisplay(dpy); req = _XkbGetGetMapReq(dpy, xkb); req->firstKeySym = first; req->nKeySyms = num; status = _XkbHandleGetMapReply(dpy, xkb); UnlockDisplay(dpy); SyncHandle(); return status; } Status XkbGetKeyBehaviors(Display *dpy, unsigned first, unsigned num, XkbDescPtr xkb) { register xkbGetMapReq *req; Status status; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return BadAccess; if ((num < 1) || (num > XkbMaxKeyCount)) return BadValue; LockDisplay(dpy); req = _XkbGetGetMapReq(dpy, xkb); req->firstKeyBehavior = first; req->nKeyBehaviors = num; status = _XkbHandleGetMapReply(dpy, xkb); UnlockDisplay(dpy); SyncHandle(); return status; } Status XkbGetVirtualMods(Display *dpy, unsigned which, XkbDescPtr xkb) { register xkbGetMapReq *req; Status status; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return BadAccess; LockDisplay(dpy); req = _XkbGetGetMapReq(dpy, xkb); req->virtualMods = which; status = _XkbHandleGetMapReply(dpy, xkb); UnlockDisplay(dpy); SyncHandle(); return status; } Status XkbGetKeyExplicitComponents(Display *dpy, unsigned first, unsigned num, XkbDescPtr xkb) { register xkbGetMapReq *req; Status status; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return BadAccess; if ((num < 1) || (num > XkbMaxKeyCount)) return BadValue; LockDisplay(dpy); req = _XkbGetGetMapReq(dpy, xkb); req->firstKeyExplicit = first; req->nKeyExplicit = num; if ((xkb != NULL) && (xkb->server != NULL) && (xkb->server->explicit != NULL)) { if ((num > 0) && (first >= xkb->min_key_code) && (first + num <= xkb->max_key_code)) bzero(&xkb->server->explicit[first], num); } if (xkb) status = _XkbHandleGetMapReply(dpy, xkb); else status = BadMatch; UnlockDisplay(dpy); SyncHandle(); return status; } Status XkbGetKeyModifierMap(Display *dpy, unsigned first, unsigned num, XkbDescPtr xkb) { register xkbGetMapReq *req; Status status; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return BadAccess; if ((num < 1) || (num > XkbMaxKeyCount)) return BadValue; LockDisplay(dpy); req = _XkbGetGetMapReq(dpy, xkb); req->firstModMapKey = first; req->nModMapKeys = num; if ((xkb != NULL) && (xkb->map != NULL) && (xkb->map->modmap != NULL)) { if ((num > 0) && (first >= xkb->min_key_code) && (first + num <= xkb->max_key_code)) bzero(&xkb->map->modmap[first], num); } if (xkb) status = _XkbHandleGetMapReply(dpy, xkb); else status = BadMatch; UnlockDisplay(dpy); SyncHandle(); return status; } Status XkbGetKeyVirtualModMap(Display *dpy, unsigned first, unsigned num, XkbDescPtr xkb) { register xkbGetMapReq *req; Status status; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return BadAccess; if ((num < 1) || (num > XkbMaxKeyCount)) return BadValue; LockDisplay(dpy); req = _XkbGetGetMapReq(dpy, xkb); req->firstVModMapKey = first; req->nVModMapKeys = num; if ((xkb != NULL) && (xkb->map != NULL) && (xkb->map->modmap != NULL)) { if ((num > 0) && (first >= xkb->min_key_code) && (first + num <= xkb->max_key_code)) bzero(&xkb->server->vmodmap[first], num * sizeof(unsigned short)); } if (xkb) status = _XkbHandleGetMapReply(dpy, xkb); else status = BadMatch; UnlockDisplay(dpy); SyncHandle(); return status; } Status XkbGetMapChanges(Display *dpy, XkbDescPtr xkb, XkbMapChangesPtr changes) { xkbGetMapReq *req; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return BadAccess; LockDisplay(dpy); if (changes->changed) { Status status = Success; req = _XkbGetGetMapReq(dpy, xkb); req->full = 0; req->partial = changes->changed; req->firstType = changes->first_type; req->nTypes = changes->num_types; req->firstKeySym = changes->first_key_sym; req->nKeySyms = changes->num_key_syms; req->firstKeyAct = changes->first_key_act; req->nKeyActs = changes->num_key_acts; req->firstKeyBehavior = changes->first_key_behavior; req->nKeyBehaviors = changes->num_key_behaviors; req->virtualMods = changes->vmods; req->firstKeyExplicit = changes->first_key_explicit; req->nKeyExplicit = changes->num_key_explicit; req->firstModMapKey = changes->first_modmap_key; req->nModMapKeys = changes->num_modmap_keys; req->firstVModMapKey = changes->first_vmodmap_key; req->nVModMapKeys = changes->num_vmodmap_keys; status = _XkbHandleGetMapReply(dpy, xkb); UnlockDisplay(dpy); SyncHandle(); return status; } UnlockDisplay(dpy); return Success; } code = rep->minKeyCode; xkb->max_key_code = rep->maxKeyCode; if (!xkb->map) { mask = rep->present & XkbAllClientInfoMask; if (mask && (XkbAllocClientMap(xkb, mask, rep->nTypes) != Success)) return BadAlloc; } if (!xkb->server) { mask = rep->present & XkbAllServerInfoMask; if (mask && (XkbAlibX11-1.6.3/src/xkb/XKBMisc.c000064401431060000012000001057141247741723500160450ustar00alancstaff00002660200006/************************************************************ Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Silicon Graphics not be used in advertising or publicity pertaining to distribution of the software without specific prior written permission. Silicon Graphics makes no representation about the suitability of this software for any purpose. It is provided "as is" without any express or implied warranty. SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ********************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #include "Xlibint.h" #include #include #include "XKBlibint.h" /***====================================================================***/ #define mapSize(m) (sizeof(m)/sizeof(XkbKTMapEntryRec)) static XkbKTMapEntryRec map2Level[] = { { True, ShiftMask, {1, ShiftMask, 0} } }; static XkbKTMapEntryRec mapAlpha[] = { { True, ShiftMask, {1, ShiftMask, 0} }, { True, LockMask, {0, LockMask, 0} } }; static XkbModsRec preAlpha[] = { { 0, 0, 0 }, { LockMask, LockMask, 0 } }; #define NL_VMOD_MASK 0 static XkbKTMapEntryRec mapKeypad[] = { { True, ShiftMask, { 1, ShiftMask, 0 } }, { False, 0, { 1, 0, NL_VMOD_MASK } } }; static XkbKeyTypeRec canonicalTypes[XkbNumRequiredTypes] = { { { 0, 0, 0 }, 1, /* num_levels */ 0, /* map_count */ NULL, NULL, None, NULL }, { { ShiftMask, ShiftMask, 0 }, 2, /* num_levels */ mapSize(map2Level), /* map_count */ map2Level, NULL, None, NULL }, { { ShiftMask|LockMask, ShiftMask|LockMask, 0 }, 2, /* num_levels */ mapSize(mapAlpha), /* map_count */ mapAlpha, preAlpha, None, NULL }, { { ShiftMask, ShiftMask, NL_VMOD_MASK }, 2, /* num_levels */ mapSize(mapKeypad), /* map_count */ mapKeypad, NULL, None, NULL } }; Status XkbInitCanonicalKeyTypes(XkbDescPtr xkb, unsigned which, int keypadVMod) { XkbClientMapPtr map; XkbKeyTypePtr from, to; Status rtrn; if (!xkb) return BadMatch; rtrn = XkbAllocClientMap(xkb, XkbKeyTypesMask, XkbNumRequiredTypes); if (rtrn != Success) return rtrn; map = xkb->map; if ((which & XkbAllRequiredTypes) == 0) return Success; rtrn = Success; from = canonicalTypes; to = map->types; if (which & XkbOneLevelMask) rtrn = XkbCopyKeyType(&from[XkbOneLevelIndex], &to[XkbOneLevelIndex]); if ((which & XkbTwoLevelMask) && (rtrn == Success)) rtrn = XkbCopyKeyType(&from[XkbTwoLevelIndex], &to[XkbTwoLevelIndex]); if ((which & XkbAlphabeticMask) && (rtrn == Success)) rtrn = XkbCopyKeyType(&from[XkbAlphabeticIndex], &to[XkbAlphabeticIndex]); if ((which & XkbKeypadMask) && (rtrn == Success)) { XkbKeyTypePtr type; rtrn = XkbCopyKeyType(&from[XkbKeypadIndex], &to[XkbKeypadIndex]); type = &to[XkbKeypadIndex]; if ((keypadVMod >= 0) && (keypadVMod < XkbNumVirtualMods) && (rtrn == Success)) { type->mods.vmods = (1 << keypadVMod); type->map[0].active = True; type->map[0].mods.mask = ShiftMask; type->map[0].mods.real_mods = ShiftMask; type->map[0].mods.vmods = 0; type->map[0].level = 1; type->map[1].active = False; type->map[1].mods.mask = 0; type->map[1].mods.real_mods = 0; type->map[1].mods.vmods = (1 << keypadVMod); type->map[1].level = 1; } } return Success; } /***====================================================================***/ #define CORE_SYM(i) (imap->num_types)) { nSyms[i] = xkb->map->types[types_inout[i]].num_levels; if (nSyms[i] > groupsWidth) groupsWidth = nSyms[i]; } else { types_inout[i] = XkbTwoLevelIndex; /* don't really know, yet */ nSyms[i] = 2; } } if (nSyms[XkbGroup1Index] < 2) nSyms[XkbGroup1Index] = 2; if (nSyms[XkbGroup2Index] < 2) nSyms[XkbGroup2Index] = 2; /* Step 2: Copy the symbols from the core ordering to XKB ordering */ /* symbols in the core are in the order: */ /* G1L1 G1L2 G2L1 G2L2 [G1L[3-n]] [G2L[3-n]] [G3L*] [G3L*] */ xkb_syms_rtrn[XKB_OFFSET(XkbGroup1Index, 0)] = CORE_SYM(0); xkb_syms_rtrn[XKB_OFFSET(XkbGroup1Index, 1)] = CORE_SYM(1); for (i = 2; i < nSyms[XkbGroup1Index]; i++) { xkb_syms_rtrn[XKB_OFFSET(XkbGroup1Index, i)] = CORE_SYM(2 + i); } xkb_syms_rtrn[XKB_OFFSET(XkbGroup2Index, 0)] = CORE_SYM(2); xkb_syms_rtrn[XKB_OFFSET(XkbGroup2Index, 1)] = CORE_SYM(3); tmp = 2 + (nSyms[XkbGroup1Index] - 2); /* offset to extra group2 syms */ for (i = 2; i < nSyms[XkbGroup2Index]; i++) { xkb_syms_rtrn[XKB_OFFSET(XkbGroup2Index, i)] = CORE_SYM(tmp + i); } tmp = nSyms[XkbGroup1Index] + nSyms[XkbGroup2Index]; if ((tmp >= map_width) && ((protected & (XkbExplicitKeyType3Mask | XkbExplicitKeyType4Mask)) == 0)) { nSyms[XkbGroup3Index] = 0; nSyms[XkbGroup4Index] = 0; nGroups = 2; } else { nGroups = 3; for (i = 0; i < nSyms[XkbGroup3Index]; i++, tmp++) { xkb_syms_rtrn[XKB_OFFSET(XkbGroup3Index, i)] = CORE_SYM(tmp); } if ((tmp < map_width) || (protected & XkbExplicitKeyType4Mask)) { nGroups = 4; for (i = 0; i < nSyms[XkbGroup4Index]; i++, tmp++) { xkb_syms_rtrn[XKB_OFFSET(XkbGroup4Index, i)] = CORE_SYM(tmp); } } else { nSyms[XkbGroup4Index] = 0; } } /* steps 3&4: alphanumeric expansion, assign canonical types */ empty = 0; for (i = 0; i < nGroups; i++) { KeySym *syms; syms = &xkb_syms_rtrn[XKB_OFFSET(i, 0)]; if ((nSyms[i] > 1) && (syms[1] == NoSymbol) && (syms[0] != NoSymbol)) { KeySym upper, lower; XConvertCase(syms[0], &lower, &upper); if (upper != lower) { xkb_syms_rtrn[XKB_OFFSET(i, 0)] = lower; xkb_syms_rtrn[XKB_OFFSET(i, 1)] = upper; if ((protected & (1 << i)) == 0) types_inout[i] = XkbAlphabeticIndex; } else if ((protected & (1 << i)) == 0) { types_inout[i] = XkbOneLevelIndex; /* nSyms[i]= 1; */ } } if (((protected & (1 << i)) == 0) && (types_inout[i] == XkbTwoLevelIndex)) { if (IsKeypadKey(syms[0]) || IsKeypadKey(syms[1])) types_inout[i] = XkbKeypadIndex; else { KeySym upper, lower; XConvertCase(syms[0], &lower, &upper); if ((syms[0] == lower) && (syms[1] == upper)) types_inout[i] = XkbAlphabeticIndex; } } if (syms[0] == NoSymbol) { register int n; Bool found; for (n = 1, found = False; (!found) && (n < nSyms[i]); n++) { found = (syms[n] != NoSymbol); } if (!found) empty |= (1 << i); } } /* step 5: squoosh out empty groups */ if (empty) { for (i = nGroups - 1; i >= 0; i--) { if (((empty & (1 << i)) == 0) || (protected & (1 << i))) break; nGroups--; } } if (nGroups < 1) return 0; /* step 6: replicate group 1 into group two, if necessary */ if ((nGroups > 1) && ((empty & (XkbGroup1Mask | XkbGroup2Mask)) == XkbGroup2Mask)) { if ((protected & (XkbExplicitKeyType1Mask | XkbExplicitKeyType2Mask)) == 0) { nSyms[XkbGroup2Index] = nSyms[XkbGroup1Index]; types_inout[XkbGroup2Index] = types_inout[XkbGroup1Index]; memcpy((char *) &xkb_syms_rtrn[2], (char *) xkb_syms_rtrn, 2 * sizeof(KeySym)); } else if (types_inout[XkbGroup1Index] == types_inout[XkbGroup2Index]) { memcpy((char *) &xkb_syms_rtrn[nSyms[XkbGroup1Index]], (char *) xkb_syms_rtrn, nSyms[XkbGroup1Index] * sizeof(KeySym)); } } /* step 7: check for all groups identical or all width 1 */ if (nGroups > 1) { Bool sameType, allOneLevel; allOneLevel = (xkb->map->types[types_inout[0]].num_levels == 1); for (i = 1, sameType = True; (allOneLevel || sameType) && (i < nGroups); i++) { sameType = (sameType && (types_inout[i] == types_inout[XkbGroup1Index])); if (allOneLevel) allOneLevel = (xkb->map->types[types_inout[i]].num_levels == 1); } if ((sameType) && (!(protected & (XkbExplicitKeyTypesMask & ~XkbExplicitKeyType1Mask)))) { register int s; Bool identical; for (i = 1, identical = True; identical && (i < nGroups); i++) { KeySym *syms; syms = &xkb_syms_rtrn[XKB_OFFSET(i, 0)]; for (s = 0; identical && (s < nSyms[i]); s++) { if (syms[s] != xkb_syms_rtrn[s]) identical = False; } } if (identical) nGroups = 1; } if (allOneLevel && (nGroups > 1)) { KeySym *syms; syms = &xkb_syms_rtrn[nSyms[XkbGroup1Index]]; nSyms[XkbGroup1Index] = 1; for (i = 1; i < nGroups; i++) { xkb_syms_rtrn[i] = syms[0]; syms += nSyms[i]; nSyms[i] = 1; } } } return nGroups; } static XkbSymInterpretPtr _XkbFindMatchingInterp(XkbDescPtr xkb, KeySym sym, unsigned int real_mods, unsigned int level) { register unsigned i; XkbSymInterpretPtr interp, rtrn; CARD8 mods; rtrn = NULL; interp = xkb->compat->sym_interpret; for (i = 0; i < xkb->compat->num_si; i++, interp++) { if ((interp->sym == NoSymbol) || (sym == interp->sym)) { int match; if ((level == 0) || ((interp->match & XkbSI_LevelOneOnly) == 0)) mods = real_mods; else mods = 0; switch (interp->match & XkbSI_OpMask) { case XkbSI_NoneOf: match = ((interp->mods & mods) == 0); break; case XkbSI_AnyOfOrNone: match = ((mods == 0) || ((interp->mods & mods) != 0)); break; case XkbSI_AnyOf: match = ((interp->mods & mods) != 0); break; case XkbSI_AllOf: match = ((interp->mods & mods) == interp->mods); break; case XkbSI_Exactly: match = (interp->mods == mods); break; default: match = 0; break; } if (match) { if (interp->sym != NoSymbol) { return interp; } else if (rtrn == NULL) { rtrn = interp; } } } } return rtrn; } static void _XkbAddKeyChange(KeyCode *pFirst, unsigned char *pNum, KeyCode newKey) { KeyCode last; last = (*pFirst) + (*pNum); if (newKey < *pFirst) { *pFirst = newKey; *pNum = (last - newKey) + 1; } else if (newKey > last) { *pNum = (last - *pFirst) + 1; } return; } static void _XkbSetActionKeyMods(XkbDescPtr xkb, XkbAction *act, unsigned mods) { unsigned tmp; switch (act->type) { case XkbSA_SetMods: case XkbSA_LatchMods: case XkbSA_LockMods: if (act->mods.flags & XkbSA_UseModMapMods) act->mods.real_mods = act->mods.mask = mods; if ((tmp = XkbModActionVMods(&act->mods)) != 0) { XkbVirtualModsToReal(xkb, tmp, &tmp); act->mods.mask |= tmp; } break; case XkbSA_ISOLock: if (act->iso.flags & XkbSA_UseModMapMods) act->iso.real_mods = act->iso.mask = mods; if ((tmp = XkbModActionVMods(&act->iso)) != 0) { XkbVirtualModsToReal(xkb, tmp, &tmp); act->iso.mask |= tmp; } break; } return; } #define IBUF_SIZE 8 Bool XkbApplyCompatMapToKey(XkbDescPtr xkb, KeyCode key, XkbChangesPtr changes) { KeySym *syms; unsigned char explicit, mods; XkbSymInterpretPtr *interps, ibuf[IBUF_SIZE]; int n, nSyms, found; unsigned changed, tmp; if ((!xkb) || (!xkb->map) || (!xkb->map->key_sym_map) || (!xkb->compat) || (!xkb->compat->sym_interpret) || (key < xkb->min_key_code) || (key > xkb->max_key_code)) { return False; } if (((!xkb->server) || (!xkb->server->key_acts)) && (XkbAllocServerMap(xkb, XkbAllServerInfoMask, 0) != Success)) { return False; } changed = 0; /* keeps track of what has changed in _this_ call */ explicit = xkb->server->explicit[key]; if (explicit & XkbExplicitInterpretMask) /* nothing to do */ return True; mods = (xkb->map->modmap ? xkb->map->modmap[key] : 0); nSyms = XkbKeyNumSyms(xkb, key); syms = XkbKeySymsPtr(xkb, key); if (nSyms > IBUF_SIZE) { interps = _XkbTypedCalloc(nSyms, XkbSymInterpretPtr); if (interps == NULL) { interps = ibuf; nSyms = IBUF_SIZE; } } else { interps = ibuf; } found = 0; for (n = 0; n < nSyms; n++) { unsigned level = (n % XkbKeyGroupsWidth(xkb, key)); interps[n] = NULL; if (syms[n] != NoSymbol) { interps[n] = _XkbFindMatchingInterp(xkb, syms[n], mods, level); if (interps[n] && interps[n]->act.type != XkbSA_NoAction) found++; else interps[n] = NULL; } } /* 1/28/96 (ef) -- XXX! WORKING HERE */ if (!found) { if (xkb->server->key_acts[key] != 0) { xkb->server->key_acts[key] = 0; changed |= XkbKeyActionsMask; } } else { XkbAction *pActs; unsigned int new_vmodmask; changed |= XkbKeyActionsMask; pActs = XkbResizeKeyActions(xkb, key, nSyms); if (!pActs) { if (nSyms > IBUF_SIZE) Xfree(interps); return False; } new_vmodmask = 0; for (n = 0; n < nSyms; n++) { if (interps[n]) { unsigned effMods; pActs[n] = *((XkbAction *) &interps[n]->act); if ((n == 0) || ((interps[n]->match & XkbSI_LevelOneOnly) == 0)) { effMods = mods; if (interps[n]->virtual_mod != XkbNoModifier) new_vmodmask |= (1 << interps[n]->virtual_mod); } else effMods = 0; _XkbSetActionKeyMods(xkb, &pActs[n], effMods); } else pActs[n].type = XkbSA_NoAction; } if (((explicit & XkbExplicitVModMapMask) == 0) && (xkb->server->vmodmap[key] != new_vmodmask)) { changed |= XkbVirtualModMapMask; xkb->server->vmodmap[key] = new_vmodmask; } if (interps[0]) { if ((interps[0]->flags & XkbSI_LockingKey) && ((explicit & XkbExplicitBehaviorMask) == 0)) { xkb->server->behaviors[key].type = XkbKB_Lock; changed |= XkbKeyBehaviorsMask; } if (((explicit & XkbExplicitAutoRepeatMask) == 0) && (xkb->ctrls)) { CARD8 old; old = xkb->ctrls->per_key_repeat[key / 8]; if (interps[0]->flags & XkbSI_AutoRepeat) xkb->ctrls->per_key_repeat[key / 8] |= (1 << (key % 8)); else xkb->ctrls->per_key_repeat[key / 8] &= ~(1 << (key % 8)); if (changes && (old != xkb->ctrls->per_key_repeat[key / 8])) changes->ctrls.changed_ctrls |= XkbPerKeyRepeatMask; } } } if ((!found) || (interps[0] == NULL)) { if (((explicit & XkbExplicitAutoRepeatMask) == 0) && (xkb->ctrls)) { CARD8 old; old = xkb->ctrls->per_key_repeat[key / 8]; #ifdef RETURN_SHOULD_REPEAT if (*XkbKeySymsPtr(xkb, key) != XK_Return) #endif xkb->ctrls->per_key_repeat[key / 8] |= (1 << (key % 8)); if (changes && (old != xkb->ctrls->per_key_repeat[key / 8])) changes->ctrls.changed_ctrls |= XkbPerKeyRepeatMask; } if (((explicit & XkbExplicitBehaviorMask) == 0) && (xkb->server->behaviors[key].type == XkbKB_Lock)) { xkb->server->behaviors[key].type = XkbKB_Default; changed |= XkbKeyBehaviorsMask; } } if (changes) { XkbMapChangesPtr mc; mc = &changes->map; tmp = (changed & mc->changed); if (tmp & XkbKeyActionsMask) _XkbAddKeyChange(&mc->first_key_act, &mc->num_key_acts, key); else if (changed & XkbKeyActionsMask) { mc->changed |= XkbKeyActionsMask; mc->first_key_act = key; mc->num_key_acts = 1; } if (tmp & XkbKeyBehaviorsMask) { _XkbAddKeyChange(&mc->first_key_behavior, &mc->num_key_behaviors, key); } else if (changed & XkbKeyBehaviorsMask) { mc->changed |= XkbKeyBehaviorsMask; mc->first_key_behavior = key; mc->num_key_behaviors = 1; } if (tmp & XkbVirtualModMapMask) _XkbAddKeyChange(&mc->first_vmodmap_key, &mc->num_vmodmap_keys, key); else if (changed & XkbVirtualModMapMask) { mc->changed |= XkbVirtualModMapMask; mc->first_vmodmap_key = key; mc->num_vmodmap_keys = 1; } mc->changed |= changed; } if (interps != ibuf) _XkbFree(interps); return True; } Bool XkbUpdateMapFromCore(XkbDescPtr xkb, KeyCode first_key, int num_keys, int map_width, KeySym *core_keysyms, XkbChangesPtr changes) { register int key, last_key; KeySym *syms; syms = &core_keysyms[(first_key - xkb->min_key_code) * map_width]; if (changes) { if (changes->map.changed & XkbKeySymsMask) { _XkbAddKeyChange(&changes->map.first_key_sym, &changes->map.num_key_syms, first_key); if (num_keys > 1) { _XkbAddKeyChange(&changes->map.first_key_sym, &changes->map.num_key_syms, first_key + num_keys - 1); } } else { changes->map.changed |= XkbKeySymsMask; changes->map.first_key_sym = first_key; changes->map.num_key_syms = num_keys; } } last_key = first_key + num_keys - 1; for (key = first_key; key <= last_key; key++, syms += map_width) { XkbMapChangesPtr mc; unsigned explicit; KeySym tsyms[XkbMaxSymsPerKey]; int types[XkbNumKbdGroups]; int nG; explicit = xkb->server->explicit[key] & XkbExplicitKeyTypesMask; types[XkbGroup1Index] = XkbKeyKeyTypeIndex(xkb, key, XkbGroup1Index); types[XkbGroup2Index] = XkbKeyKeyTypeIndex(xkb, key, XkbGroup2Index); types[XkbGroup3Index] = XkbKeyKeyTypeIndex(xkb, key, XkbGroup3Index); types[XkbGroup4Index] = XkbKeyKeyTypeIndex(xkb, key, XkbGroup4Index); nG = XkbKeyTypesForCoreSymbols(xkb, map_width, syms, explicit, types, tsyms); if (changes) mc = &changes->map; else mc = NULL; XkbChangeTypesOfKey(xkb, key, nG, XkbAllGroupsMask, types, mc); memcpy((char *) XkbKeySymsPtr(xkb, key), (char *) tsyms, XkbKeyNumSyms(xkb, key) * sizeof(KeySym)); XkbApplyCompatMapToKey(xkb, key, changes); } if ((xkb->map->modmap != NULL) && (changes) && (changes->map.changed & (XkbVirtualModMapMask | XkbModifierMapMask))) { unsigned char newVMods[XkbNumVirtualMods]; register unsigned bit, i; unsigned present; bzero(newVMods, XkbNumVirtualMods); present = 0; for (key = xkb->min_key_code; key <= xkb->max_key_code; key++) { if (xkb->server->vmodmap[key] == 0) continue; for (i = 0, bit = 1; i < XkbNumVirtualMods; i++, bit <<= 1) { if (bit & xkb->server->vmodmap[key]) { present |= bit; newVMods[i] |= xkb->map->modmap[key]; } } } for (i = 0, bit = 1; i < XkbNumVirtualMods; i++, bit <<= 1) { if ((bit & present) && (newVMods[i] != xkb->server->vmods[i])) { changes->map.changed |= XkbVirtualModsMask; changes->map.vmods |= bit; xkb->server->vmods[i] = newVMods[i]; } } } if (changes && (changes->map.changed & XkbVirtualModsMask)) XkbApplyVirtualModChanges(xkb, changes->map.vmods, changes); return True; } Status XkbChangeTypesOfKey(XkbDescPtr xkb, int key, int nGroups, unsigned groups, int *newTypesIn, XkbMapChangesPtr changes) { XkbKeyTypePtr pOldType, pNewType; register int i; int width, nOldGroups, oldWidth, newTypes[XkbNumKbdGroups]; if ((!xkb) || (!XkbKeycodeInRange(xkb, key)) || (!xkb->map) || (!xkb->map->types) || ((groups & XkbAllGroupsMask) == 0) || (nGroups > XkbNumKbdGroups)) { return BadMatch; } if (nGroups == 0) { for (i = 0; i < XkbNumKbdGroups; i++) { xkb->map->key_sym_map[key].kt_index[i] = XkbOneLevelIndex; } i = xkb->map->key_sym_map[key].group_info; i = XkbSetNumGroups(i, 0); xkb->map->key_sym_map[key].group_info = i; XkbResizeKeySyms(xkb, key, 0); return Success; } nOldGroups = XkbKeyNumGroups(xkb, key); oldWidth = XkbKeyGroupsWidth(xkb, key); for (width = i = 0; i < nGroups; i++) { if (groups & (1 << i)) newTypes[i] = newTypesIn[i]; else if (i < nOldGroups) newTypes[i] = XkbKeyKeyTypeIndex(xkb, key, i); else if (nOldGroups > 0) newTypes[i] = XkbKeyKeyTypeIndex(xkb, key, XkbGroup1Index); else newTypes[i] = XkbTwoLevelIndex; if (newTypes[i] > xkb->map->num_types) return BadMatch; pNewType = &xkb->map->types[newTypes[i]]; if (pNewType->num_levels > width) width = pNewType->num_levels; } if ((xkb->ctrls) && (nGroups > xkb->ctrls->num_groups)) xkb->ctrls->num_groups = nGroups; if ((width != oldWidth) || (nGroups != nOldGroups)) { KeySym oldSyms[XkbMaxSymsPerKey], *pSyms; int nCopy; if (nOldGroups == 0) { pSyms = XkbResizeKeySyms(xkb, key, width * nGroups); if (pSyms != NULL) { i = xkb->map->key_sym_map[key].group_info; i = XkbSetNumGroups(i, nGroups); xkb->map->key_sym_map[key].group_info = i; xkb->map->key_sym_map[key].width = width; for (i = 0; i < nGroups; i++) { xkb->map->key_sym_map[key].kt_index[i] = newTypes[i]; } return Success; } return BadAlloc; } pSyms = XkbKeySymsPtr(xkb, key); memcpy(oldSyms, pSyms, XkbKeyNumSyms(xkb, key) * sizeof(KeySym)); pSyms = XkbResizeKeySyms(xkb, key, width * nGroups); if (pSyms == NULL) return BadAlloc; bzero(pSyms, width * nGroups * sizeof(KeySym)); for (i = 0; (i < nGroups) && (i < nOldGroups); i++) { pOldType = XkbKeyKeyType(xkb, key, i); pNewType = &xkb->map->types[newTypes[i]]; if (pNewType->num_levels > pOldType->num_levels) nCopy = pOldType->num_levels; else nCopy = pNewType->num_levels; memcpy(&pSyms[i * width], &oldSyms[i * oldWidth], nCopy * sizeof(KeySym)); } if (XkbKeyHasActions(xkb, key)) { XkbAction oldActs[XkbMaxSymsPerKey], *pActs; pActs = XkbKeyActionsPtr(xkb, key); memcpy(oldActs, pActs, XkbKeyNumSyms(xkb, key) * sizeof(XkbAction)); pActs = XkbResizeKeyActions(xkb, key, width * nGroups); if (pActs == NULL) return BadAlloc; bzero(pActs, width * nGroups * sizeof(XkbAction)); for (i = 0; (i < nGroups) && (i < nOldGroups); i++) { pOldType = XkbKeyKeyType(xkb, key, i); pNewType = &xkb->map->types[newTypes[i]]; if (pNewType->num_levels > pOldType->num_levels) nCopy = pOldType->num_levels; else nCopy = pNewType->num_levels; memcpy(&pActs[i * width], &oldActs[i * oldWidth], nCopy * sizeof(XkbAction)); } } i = xkb->map->key_sym_map[key].group_info; i = XkbSetNumGroups(i, nGroups); xkb->map->key_sym_map[key].group_info = i; xkb->map->key_sym_map[key].width = width; } width = 0; for (i = 0; i < nGroups; i++) { xkb->map->key_sym_map[key].kt_index[i] = newTypes[i]; if (xkb->map->types[newTypes[i]].num_levels > width) width = xkb->map->types[newTypes[i]].num_levels; } xkb->map->key_sym_map[key].width = width; if (changes != NULL) { if (changes->changed & XkbKeySymsMask) { _XkbAddKeyChange(&changes->first_key_sym, &changes->num_key_syms, key); } else { changes->changed |= XkbKeySymsMask; changes->first_key_sym = key; changes->num_key_syms = 1; } } return Success; } /***====================================================================***/ Bool XkbVirtualModsToReal(XkbDescPtr xkb, unsigned virtual_mask, unsigned *mask_rtrn) { register int i, bit; register unsigned mask; if (xkb == NULL) return False; if (virtual_mask == 0) { *mask_rtrn = 0; return True; } if (xkb->server == NULL) return False; for (i = mask = 0, bit = 1; i < XkbNumVirtualMods; i++, bit <<= 1) { if (virtual_mask & bit) mask |= xkb->server->vmods[i]; } *mask_rtrn = mask; return True; } /***====================================================================***/ Bool XkbUpdateActionVirtualMods(XkbDescPtr xkb, XkbAction *act, unsigned changed) { unsigned int tmp; switch (act->type) { case XkbSA_SetMods: case XkbSA_LatchMods: case XkbSA_LockMods: if (((tmp = XkbModActionVMods(&act->mods)) & changed) != 0) { XkbVirtualModsToReal(xkb, tmp, &tmp); act->mods.mask = act->mods.real_mods; act->mods.mask |= tmp; return True; } break; case XkbSA_ISOLock: if ((((tmp = XkbModActionVMods(&act->iso)) != 0) & changed) != 0) { XkbVirtualModsToReal(xkb, tmp, &tmp); act->iso.mask = act->iso.real_mods; act->iso.mask |= tmp; return True; } break; } return False; } void XkbUpdateKeyTypeVirtualMods(XkbDescPtr xkb, XkbKeyTypePtr type, unsigned int changed, XkbChangesPtr changes) { register unsigned int i; unsigned int mask; XkbVirtualModsToReal(xkb, type->mods.vmods, &mask); type->mods.mask = type->mods.real_mods | mask; if ((type->map_count > 0) && (type->mods.vmods != 0)) { XkbKTMapEntryPtr entry; for (i = 0, entry = type->map; i < type->map_count; i++, entry++) { if (entry->mods.vmods != 0) { XkbVirtualModsToReal(xkb, entry->mods.vmods, &mask); entry->mods.mask = entry->mods.real_mods | mask; /* entry is active if vmods are bound */ entry->active = (mask != 0); } else entry->active = 1; } } if (changes) { int type_ndx; type_ndx = type - xkb->map->types; if ((type_ndx < 0) || (type_ndx > xkb->map->num_types)) return; if (changes->map.changed & XkbKeyTypesMask) { int last; last = changes->map.first_type + changes->map.num_types - 1; if (type_ndx < changes->map.first_type) { changes->map.first_type = type_ndx; changes->map.num_types = (last - type_ndx) + 1; } else if (type_ndx > last) { changes->map.num_types = (type_ndx - changes->map.first_type) + 1; } } else { changes->map.changed |= XkbKeyTypesMask; changes->map.first_type = type_ndx; changes->map.num_types = 1; } } return; } Bool XkbApplyVirtualModChanges(XkbDescPtr xkb, unsigned changed, XkbChangesPtr changes) { register int i; unsigned int checkState = 0; if ((!xkb) || (!xkb->map) || (changed == 0)) return False; for (i = 0; i < xkb->map->num_types; i++) { if (xkb->map->types[i].mods.vmods & changed) XkbUpdateKeyTypeVirtualMods(xkb, &xkb->map->types[i], changed, changes); } if (changed & xkb->ctrls->internal.vmods) { unsigned int newMask; XkbVirtualModsToReal(xkb, xkb->ctrls->internal.vmods, &newMask); newMask |= xkb->ctrls->internal.real_mods; if (xkb->ctrls->internal.mask != newMask) { xkb->ctrls->internal.mask = newMask; if (changes) { changes->ctrls.changed_ctrls |= XkbInternalModsMask; checkState = True; } } } if (changed & xkb->ctrls->ignore_lock.vmods) { unsigned int newMask; XkbVirtualModsToReal(xkb, xkb->ctrls->ignore_lock.vmods, &newMask); newMask |= xkb->ctrls->ignore_lock.real_mods; if (xkb->ctrls->ignore_lock.mask != newMask) { xkb->ctrls->ignore_lock.mask = newMask; if (changes) { changes->ctrls.changed_ctrls |= XkbIgnoreLockModsMask; checkState = True; } } } if (xkb->indicators != NULL) { XkbIndicatorMapPtr map; map = &xkb->indicators->maps[0]; for (i = 0; i < XkbNumIndicators; i++, map++) { if (map->mods.vmods & changed) { unsigned int newMask; XkbVirtualModsToReal(xkb, map->mods.vmods, &newMask); newMask |= map->mods.real_mods; if (newMask != map->mods.mask) { map->mods.mask = newMask; if (changes) { changes->indicators.map_changes |= (1 << i); checkState = True; } } } } } if (xkb->compat != NULL) { XkbCompatMapPtr compat; compat = xkb->compat; for (i = 0; i < XkbNumKbdGroups; i++) { unsigned int newMask; XkbVirtualModsToReal(xkb, compat->groups[i].vmods, &newMask); newMask |= compat->groups[i].real_mods; if (compat->groups[i].mask != newMask) { compat->groups[i].mask = newMask; if (changes) { changes->compat.changed_groups |= (1 << i); checkState = True; } } } } if (xkb->map && xkb->server) { int highChange = 0, lowChange = -1; for (i = xkb->min_key_code; i <= xkb->max_key_code; i++) { if (XkbKeyHasActions(xkb, i)) { register XkbAction *pAct; register int n; pAct = XkbKeyActionsPtr(xkb, i); for (n = XkbKeyNumActions(xkb, i); n > 0; n--, pAct++) { if ((pAct->type != XkbSA_NoAction) && XkbUpdateActionVirtualMods(xkb, pAct, changed)) { if (lowChange < 0) lowChange = i; highChange = i; } } } } if (changes && (lowChange > 0)) { /* something changed */ if (changes->map.changed & XkbKeyActionsMask) { int last; if (changes->map.first_key_act < lowChange) lowChange = changes->map.first_key_act; last = changes->map.first_key_act + changes->map.num_key_acts - 1; if (last > highChange) highChange = last; } changes->map.changed |= XkbKeyActionsMask; changes->map.first_key_act = lowChange; changes->map.num_key_acts = (highChange - lowChange) + 1; } } return checkState; } up_info; i = XkbSetNumGroups(i, nGrolibX11-1.6.3/src/xkb/XKBNames.c000064401431060000012000000666721247741723500162260ustar00alancstaff00002660200006/************************************************************ Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Silicon Graphics not be used in advertising or publicity pertaining to distribution of the software without specific prior written permission. Silicon Graphics makes no representation about the suitability of this software for any purpose. It is provided "as is" without any express or implied warranty. SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ********************************************************/ #define NEED_MAP_READERS #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include #include "XKBlibint.h" static Status _XkbReadAtoms(XkbReadBufferPtr buf, Atom *atoms, int maxAtoms, CARD32 present) { register int i, bit; for (i = 0, bit = 1; (i < maxAtoms) && (present); i++, bit <<= 1) { if (present & bit) { if (!_XkbReadBufferCopy32(buf, (long *) &atoms[i], 1)) return BadLength; present &= ~bit; } } return Success; } Status _XkbReadGetNamesReply(Display *dpy, xkbGetNamesReply *rep, XkbDescPtr xkb, int *nread_rtrn) { int i, len; XkbReadBufferRec buf; register XkbNamesPtr names; if (xkb->device_spec == XkbUseCoreKbd) xkb->device_spec = rep->deviceID; if ((xkb->names == NULL) && (XkbAllocNames(xkb, rep->which, rep->nRadioGroups, rep->nKeyAliases) != Success)) { return BadAlloc; } names = xkb->names; if (rep->length == 0) return Success; if (!_XkbInitReadBuffer(dpy, &buf, (int) rep->length * 4)) return BadAlloc; if (nread_rtrn) *nread_rtrn = (int) rep->length * 4; if ((rep->which & XkbKeycodesNameMask) && (!_XkbReadBufferCopy32(&buf, (long *) &names->keycodes, 1))) goto BAILOUT; if ((rep->which & XkbGeometryNameMask) && (!_XkbReadBufferCopy32(&buf, (long *) &names->geometry, 1))) goto BAILOUT; if ((rep->which & XkbSymbolsNameMask) && (!_XkbReadBufferCopy32(&buf, (long *) &names->symbols, 1))) goto BAILOUT; if ((rep->which & XkbPhysSymbolsNameMask) && (!_XkbReadBufferCopy32(&buf, (long *) &names->phys_symbols, 1))) goto BAILOUT; if ((rep->which & XkbTypesNameMask) && (!_XkbReadBufferCopy32(&buf, (long *) &names->types, 1))) goto BAILOUT; if ((rep->which & XkbCompatNameMask) && (!_XkbReadBufferCopy32(&buf, (long *) &names->compat, 1))) goto BAILOUT; if (rep->which & XkbKeyTypeNamesMask) { XkbClientMapPtr map = xkb->map; XkbKeyTypePtr type; len = rep->nTypes * 4; if (map != NULL) { type = map->types; for (i = 0; (i < map->num_types) && (i < rep->nTypes); i++, type++) { if (!_XkbReadBufferCopy32(&buf, (long *) &type->name, 1)) goto BAILOUT; len -= 4; } } if ((len > 0) && (!_XkbSkipReadBufferData(&buf, len))) goto BAILOUT; } if (rep->which & XkbKTLevelNamesMask) { CARD8 *nLevels; XkbClientMapPtr map = xkb->map; nLevels = (CARD8 *) _XkbGetReadBufferPtr(&buf, XkbPaddedSize(rep->nTypes)); if (nLevels == NULL) goto BAILOUT; if (map != NULL) { XkbKeyTypePtr type = map->types; for (i = 0; i < (int) rep->nTypes; i++, type++) { if (i >= map->num_types) { if (!_XkbSkipReadBufferData(&buf, nLevels[i] * 4)) goto BAILOUT; continue; } if ((nLevels[i] > 0) && (nLevels[i] != type->num_levels)) { goto BAILOUT; } Xfree(type->level_names); if (nLevels[i] == 0) { type->level_names = NULL; continue; } type->level_names = _XkbTypedCalloc(nLevels[i], Atom); if (type->level_names != NULL) { if (!_XkbReadBufferCopy32(&buf, (long *) type->level_names, nLevels[i])) goto BAILOUT; } else { _XkbSkipReadBufferData(&buf, nLevels[i] * 4); } } } else { for (i = 0; i < (int) rep->nTypes; i++) { _XkbSkipReadBufferData(&buf, nLevels[i] * 4); } } } if (rep->which & XkbIndicatorNamesMask) { if (_XkbReadAtoms(&buf, names->indicators, XkbNumIndicators, rep->indicators) != Success) goto BAILOUT; } if (rep->which & XkbVirtualModNamesMask) { if (_XkbReadAtoms(&buf, names->vmods, XkbNumVirtualMods, (CARD32) rep->virtualMods) != Success) goto BAILOUT; } if (rep->which & XkbGroupNamesMask) { if (_XkbReadAtoms(&buf, names->groups, XkbNumKbdGroups, (CARD32) rep->groupNames) != Success) goto BAILOUT; } if (rep->which & XkbKeyNamesMask) { if (names->keys == NULL) { int nKeys; if (xkb->max_key_code == 0) { xkb->min_key_code = rep->minKeyCode; xkb->max_key_code = rep->maxKeyCode; } nKeys = xkb->max_key_code + 1; names->keys = _XkbTypedCalloc(nKeys, XkbKeyNameRec); } if (((int) rep->firstKey + rep->nKeys) > xkb->max_key_code + 1) goto BAILOUT; if (names->keys != NULL) { if (!_XkbCopyFromReadBuffer(&buf, (char *) &names->keys[rep->firstKey], rep->nKeys * XkbKeyNameLength)) goto BAILOUT; } else _XkbSkipReadBufferData(&buf, rep->nKeys * XkbKeyNameLength); } if (rep->which & XkbKeyAliasesMask && (rep->nKeyAliases > 0)) { if (XkbAllocNames(xkb, XkbKeyAliasesMask, 0, rep->nKeyAliases) != Success) goto BAILOUT; if (!_XkbCopyFromReadBuffer(&buf, (char *) names->key_aliases, rep->nKeyAliases * XkbKeyNameLength * 2)) goto BAILOUT; } if (rep->which & XkbRGNamesMask) { if (rep->nRadioGroups > 0) { Atom *rgNames; if (names->radio_groups == NULL) names->radio_groups = _XkbTypedCalloc(rep->nRadioGroups, Atom); else if (names->num_rg < rep->nRadioGroups) { names->radio_groups = _XkbTypedRealloc(names->radio_groups, rep->nRadioGroups, Atom); } rgNames = names->radio_groups; if (!rgNames) { goto BAILOUT; } if (!_XkbReadBufferCopy32 (&buf, (long *) rgNames, rep->nRadioGroups)) goto BAILOUT; names->num_rg = rep->nRadioGroups; } else if (names->num_rg > 0) { names->num_rg = 0; Xfree(names->radio_groups); } } len = _XkbFreeReadBuffer(&buf); if (len != 0) return BadLength; else return Success; BAILOUT: _XkbFreeReadBuffer(&buf); return BadLength; } Status XkbGetNames(Display *dpy, unsigned which, XkbDescPtr xkb) { register xkbGetNamesReq *req; xkbGetNamesReply rep; Status status; XkbInfoPtr xkbi; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return BadAccess; LockDisplay(dpy); xkbi = dpy->xkb_info; if (!xkb->names) { xkb->names = _XkbTypedCalloc(1, XkbNamesRec); if (!xkb->names) { UnlockDisplay(dpy); SyncHandle(); return BadAlloc; } } GetReq(kbGetNames, req); req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbGetNames; req->deviceSpec = xkb->device_spec; req->which = which; if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) { UnlockDisplay(dpy); SyncHandle(); return BadImplementation; } status = _XkbReadGetNamesReply(dpy, &rep, xkb, NULL); UnlockDisplay(dpy); SyncHandle(); return status; } /***====================================================================***/ static int _XkbCountBits(int nBitsMax, unsigned long mask) { register unsigned long y, nBits; y = (mask >> 1) & 033333333333; y = mask - y - ((y >> 1) & 033333333333); nBits = ((unsigned int) (((y + (y >> 3)) & 030707070707) % 077)); /* nBitsMax really means max+1 */ return (nBits < nBitsMax) ? nBits : (nBitsMax - 1); } static CARD32 _XkbCountAtoms(Atom *atoms, int maxAtoms, int *count) { register unsigned int i, bit, nAtoms; register CARD32 atomsPresent; for (i = nAtoms = atomsPresent = 0, bit = 1; i < maxAtoms; i++, bit <<= 1) { if (atoms[i] != None) { atomsPresent |= bit; nAtoms++; } } if (count) *count = nAtoms; return atomsPresent; } static void _XkbCopyAtoms(Display *dpy, Atom *atoms, CARD32 mask, int maxAtoms) { register unsigned int i, bit; for (i = 0, bit = 1; i < maxAtoms; i++, bit <<= 1) { if (mask & bit) Data32(dpy, &atoms[i], 4); } return; } Bool XkbSetNames(Display *dpy, unsigned int which, unsigned int firstType, unsigned int nTypes, XkbDescPtr xkb) { register xkbSetNamesReq *req; int nLvlNames = 0; XkbInfoPtr xkbi; XkbNamesPtr names; unsigned firstLvlType, nLvlTypes; int nVMods, nLEDs, nRG, nKA, nGroups; int nKeys = 0, firstKey = 0, nAtoms; CARD32 leds, vmods, groups; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return False; if ((!xkb) || (!xkb->names)) return False; firstLvlType = firstType; nLvlTypes = nTypes; if (nTypes < 1) which &= ~(XkbKTLevelNamesMask | XkbKeyTypeNamesMask); else if (firstType <= XkbLastRequiredType) { int adjust; adjust = XkbLastRequiredType - firstType + 1; firstType += adjust; nTypes -= adjust; if (nTypes < 1) which &= ~XkbKeyTypeNamesMask; } names = xkb->names; if (which & (XkbKTLevelNamesMask | XkbKeyTypeNamesMask)) { register int i; XkbKeyTypePtr type; if ((xkb->map == NULL) || (xkb->map->types == NULL) || (nTypes == 0) || (firstType + nTypes > xkb->map->num_types) || (firstLvlType + nLvlTypes > xkb->map->num_types)) return False; if (which & XkbKTLevelNamesMask) { type = &xkb->map->types[firstLvlType]; for (i = nLvlNames = 0; i < nLvlTypes; i++, type++) { if (type->level_names != NULL) nLvlNames += type->num_levels; } } } nVMods = nLEDs = nRG = nKA = nAtoms = nGroups = 0; LockDisplay(dpy); xkbi = dpy->xkb_info; GetReq(kbSetNames, req); req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbSetNames; req->deviceSpec = xkb->device_spec; req->firstType = firstType; req->nTypes = nTypes; req->firstKey = xkb->min_key_code; req->nKeys = xkb->max_key_code - xkb->min_key_code + 1; if (which & XkbKeycodesNameMask) nAtoms++; if (which & XkbGeometryNameMask) nAtoms++; if (which & XkbSymbolsNameMask) nAtoms++; if (which & XkbPhysSymbolsNameMask) nAtoms++; if (which & XkbTypesNameMask) nAtoms++; if (which & XkbCompatNameMask) nAtoms++; if (which & XkbKeyTypeNamesMask) nAtoms += nTypes; if (which & XkbKTLevelNamesMask) { req->firstKTLevel = firstLvlType; req->nKTLevels = nLvlTypes; req->length += XkbPaddedSize(nLvlTypes) / 4; /* room for group widths */ nAtoms += nLvlNames; } else req->firstKTLevel = req->nKTLevels = 0; if (which & XkbIndicatorNamesMask) { req->indicators = leds = _XkbCountAtoms(names->indicators, XkbNumIndicators, &nLEDs); if (nLEDs > 0) nAtoms += nLEDs; else which &= ~XkbIndicatorNamesMask; } else req->indicators = leds = 0; if (which & XkbVirtualModNamesMask) { vmods = req->virtualMods = (CARD16) _XkbCountAtoms(names->vmods, XkbNumVirtualMods, &nVMods); if (nVMods > 0) nAtoms += nVMods; else which &= ~XkbVirtualModNamesMask; } else vmods = req->virtualMods = 0; if (which & XkbGroupNamesMask) { groups = req->groupNames = (CARD8) _XkbCountAtoms(names->groups, XkbNumKbdGroups, &nGroups); if (nGroups > 0) nAtoms += nGroups; else which &= ~XkbGroupNamesMask; } else groups = req->groupNames = 0; if ((which & XkbKeyNamesMask) && (names->keys != NULL)) { firstKey = req->firstKey; nKeys = req->nKeys; nAtoms += nKeys; /* technically not atoms, but 4 bytes wide */ } else which &= ~XkbKeyNamesMask; if (which & XkbKeyAliasesMask) { nKA = ((names->key_aliases != NULL) ? names->num_key_aliases : 0); if (nKA > 0) { req->nKeyAliases = nKA; nAtoms += nKA * 2; /* not atoms, but 8 bytes on the wire */ } else { which &= ~XkbKeyAliasesMask; req->nKeyAliases = 0; } } else req->nKeyAliases = 0; if (which & XkbRGNamesMask) { nRG = names->num_rg; if (nRG > 0) nAtoms += nRG; else which &= ~XkbRGNamesMask; } req->which = which; req->nRadioGroups = nRG; req->length += (nAtoms * 4) / 4; if (which & XkbKeycodesNameMask) Data32(dpy, (long *) &names->keycodes, 4); if (which & XkbGeometryNameMask) Data32(dpy, (long *) &names->geometry, 4); if (which & XkbSymbolsNameMask) Data32(dpy, (long *) &names->symbols, 4); if (which & XkbPhysSymbolsNameMask) Data32(dpy, (long *) &names->phys_symbols, 4); if (which & XkbTypesNameMask) Data32(dpy, (long *) &names->types, 4); if (which & XkbCompatNameMask) Data32(dpy, (long *) &names->compat, 4); if (which & XkbKeyTypeNamesMask) { register int i; register XkbKeyTypePtr type; type = &xkb->map->types[firstType]; for (i = 0; i < nTypes; i++, type++) { Data32(dpy, (long *) &type->name, 4); } } if (which & XkbKTLevelNamesMask) { XkbKeyTypePtr type; int i; char *tmp; BufAlloc(char *, tmp, XkbPaddedSize(nLvlTypes)); type = &xkb->map->types[firstLvlType]; for (i = 0; i < nLvlTypes; i++, type++) { *tmp++ = type->num_levels; } type = &xkb->map->types[firstLvlType]; for (i = 0; i < nLvlTypes; i++, type++) { if (type->level_names != NULL) Data32(dpy, (long *) type->level_names, type->num_levels * 4); } } if (which & XkbIndicatorNamesMask) _XkbCopyAtoms(dpy, names->indicators, leds, XkbNumIndicators); if (which & XkbVirtualModNamesMask) _XkbCopyAtoms(dpy, names->vmods, vmods, XkbNumVirtualMods); if (which & XkbGroupNamesMask) _XkbCopyAtoms(dpy, names->groups, groups, XkbNumKbdGroups); if (which & XkbKeyNamesMask) { Data(dpy, (char *) &names->keys[firstKey], nKeys * XkbKeyNameLength); } if (which & XkbKeyAliasesMask) { Data(dpy, (char *) names->key_aliases, nKA * XkbKeyNameLength * 2); } if (which & XkbRGNamesMask) { Data32(dpy, (long *) names->radio_groups, nRG * 4); } UnlockDisplay(dpy); SyncHandle(); return True; } Bool XkbChangeNames(Display *dpy, XkbDescPtr xkb, XkbNameChangesPtr changes) { register xkbSetNamesReq *req; int nLvlNames = 0; XkbInfoPtr xkbi; XkbNamesPtr names; unsigned which, firstType, nTypes; unsigned firstLvlType, nLvlTypes; int nVMods, nLEDs, nRG, nKA, nGroups; int nKeys = 0, firstKey = 0, nAtoms; CARD32 leds = 0, vmods = 0, groups = 0; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return False; if ((!xkb) || (!xkb->names) || (!changes)) return False; which = changes->changed; firstType = changes->first_type; nTypes = changes->num_types; firstLvlType = changes->first_lvl;; nLvlTypes = changes->num_lvls; if (which & XkbKeyTypeNamesMask) { if (nTypes < 1) which &= ~XkbKeyTypeNamesMask; else if (firstType <= XkbLastRequiredType) { int adjust; adjust = XkbLastRequiredType - firstType + 1; firstType += adjust; nTypes -= adjust; if (nTypes < 1) which &= ~XkbKeyTypeNamesMask; } } else firstType = nTypes = 0; if (which & XkbKTLevelNamesMask) { if (nLvlTypes < 1) which &= ~XkbKTLevelNamesMask; } else firstLvlType = nLvlTypes = 0; names = xkb->names; if (which & (XkbKTLevelNamesMask | XkbKeyTypeNamesMask)) { register int i; if ((xkb->map == NULL) || (xkb->map->types == NULL) || (nTypes == 0) || (firstType + nTypes > xkb->map->num_types) || (firstLvlType + nLvlTypes > xkb->map->num_types)) return False; if (which & XkbKTLevelNamesMask) { XkbKeyTypePtr type = &xkb->map->types[firstLvlType]; for (i = nLvlNames = 0; i < nLvlTypes; i++, type++) { if (type->level_names != NULL) nLvlNames += type->num_levels; } } } if (changes->num_keys < 1) which &= ~XkbKeyNamesMask; if ((which & XkbKeyNamesMask) == 0) changes->first_key = changes->num_keys = 0; else if ((changes->first_key < xkb->min_key_code) || (changes->first_key + changes->num_keys > xkb->max_key_code)) { return False; } if ((which & XkbVirtualModNamesMask) == 0) changes->changed_vmods = 0; else if (changes->changed_vmods == 0) which &= ~XkbVirtualModNamesMask; if ((which & XkbIndicatorNamesMask) == 0) changes->changed_indicators = 0; else if (changes->changed_indicators == 0) which &= ~XkbIndicatorNamesMask; if ((which & XkbGroupNamesMask) == 0) changes->changed_groups = 0; else if (changes->changed_groups == 0) which &= ~XkbGroupNamesMask; nVMods = nLEDs = nRG = nKA = nAtoms = nGroups = 0; LockDisplay(dpy); xkbi = dpy->xkb_info; GetReq(kbSetNames, req); req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbSetNames; req->deviceSpec = xkb->device_spec; req->firstType = firstType; req->nTypes = nTypes; req->firstKey = changes->first_key; req->nKeys = changes->num_keys; if (which & XkbKeycodesNameMask) nAtoms++; if (which & XkbGeometryNameMask) nAtoms++; if (which & XkbSymbolsNameMask) nAtoms++; if (which & XkbPhysSymbolsNameMask) nAtoms++; if (which & XkbTypesNameMask) nAtoms++; if (which & XkbCompatNameMask) nAtoms++; if (which & XkbKeyTypeNamesMask) nAtoms += nTypes; if (which & XkbKTLevelNamesMask) { req->firstKTLevel = firstLvlType; req->nKTLevels = nLvlTypes; req->length += XkbPaddedSize(nLvlTypes) / 4; /* room for group widths */ nAtoms += nLvlNames; } else req->firstKTLevel = req->nKTLevels = 0; if (which & XkbIndicatorNamesMask) { leds = req->indicators = (CARD32) changes->changed_indicators; nLEDs = _XkbCountBits(XkbNumIndicators, changes->changed_indicators); if (nLEDs > 0) nAtoms += nLEDs; else which &= ~XkbIndicatorNamesMask; } else req->indicators = 0; if (which & XkbVirtualModNamesMask) { vmods = req->virtualMods = changes->changed_vmods; nVMods = _XkbCountBits(XkbNumVirtualMods, (unsigned long) changes->changed_vmods); if (nVMods > 0) nAtoms += nVMods; else which &= ~XkbVirtualModNamesMask; } else req->virtualMods = 0; if (which & XkbGroupNamesMask) { groups = req->groupNames = changes->changed_groups; nGroups = _XkbCountBits(XkbNumKbdGroups, (unsigned long) changes->changed_groups); if (nGroups > 0) nAtoms += nGroups; else which &= ~XkbGroupNamesMask; } else req->groupNames = 0; if ((which & XkbKeyNamesMask) && (names->keys != NULL)) { firstKey = req->firstKey; nKeys = req->nKeys; nAtoms += nKeys; /* technically not atoms, but 4 bytes wide */ } else which &= ~XkbKeyNamesMask; if (which & XkbKeyAliasesMask) { nKA = ((names->key_aliases != NULL) ? names->num_key_aliases : 0); if (nKA > 0) nAtoms += nKA * 2; /* not atoms, but 8 bytes on the wire */ else which &= ~XkbKeyAliasesMask; } if (which & XkbRGNamesMask) { nRG = names->num_rg; if (nRG > 0) nAtoms += nRG; else which &= ~XkbRGNamesMask; } req->which = which; req->nRadioGroups = nRG; req->length += (nAtoms * 4) / 4; if (which & XkbKeycodesNameMask) Data32(dpy, (long *) &names->keycodes, 4); if (which & XkbGeometryNameMask) Data32(dpy, (long *) &names->geometry, 4); if (which & XkbSymbolsNameMask) Data32(dpy, (long *) &names->symbols, 4); if (which & XkbPhysSymbolsNameMask) Data32(dpy, (long *) &names->phys_symbols, 4); if (which & XkbTypesNameMask) Data32(dpy, (long *) &names->types, 4); if (which & XkbCompatNameMask) Data32(dpy, (long *) &names->compat, 4); if (which & XkbKeyTypeNamesMask) { register int i; register XkbKeyTypePtr type; type = &xkb->map->types[firstType]; for (i = 0; i < nTypes; i++, type++) { Data32(dpy, (long *) &type->name, 4); } } if (which & XkbKTLevelNamesMask) { XkbKeyTypePtr type; int i; char *tmp; BufAlloc(char *, tmp, XkbPaddedSize(nLvlTypes)); type = &xkb->map->types[firstLvlType]; for (i = 0; i < nLvlTypes; i++, type++) { *tmp++ = type->num_levels; } type = &xkb->map->types[firstLvlType]; for (i = 0; i < nLvlTypes; i++, type++) { if (type->level_names != NULL) Data32(dpy, (long *) type->level_names, type->num_levels * 4); } } if (which & XkbIndicatorNamesMask) _XkbCopyAtoms(dpy, names->indicators, leds, XkbNumIndicators); if (which & XkbVirtualModNamesMask) _XkbCopyAtoms(dpy, names->vmods, vmods, XkbNumVirtualMods); if (which & XkbGroupNamesMask) _XkbCopyAtoms(dpy, names->groups, groups, XkbNumKbdGroups); if (which & XkbKeyNamesMask) { Data(dpy, (char *) &names->keys[firstKey], nKeys * XkbKeyNameLength); } if (which & XkbKeyAliasesMask) { Data(dpy, (char *) names->key_aliases, nKA * XkbKeyNameLength * 2); } if (which & XkbRGNamesMask) { Data32(dpy, (long *) names->radio_groups, nRG * 4); } UnlockDisplay(dpy); SyncHandle(); return True; } void XkbNoteNameChanges(XkbNameChangesPtr old, XkbNamesNotifyEvent *new, unsigned int wanted) { int first, last, old_last, new_last; if ((old == NULL) || (new == NULL)) return; wanted &= new->changed; if (wanted == 0) return; if (wanted & XkbKeyTypeNamesMask) { if (old->changed & XkbKeyTypeNamesMask) { new_last = (new->first_type + new->num_types - 1); old_last = (old->first_type + old->num_types - 1); if (new->first_type < old->first_type) first = new->first_type; else first = old->first_type; if (old_last > new_last) last = old_last; else last = new_last; old->first_type = first; old->num_types = (last - first) + 1; } else { old->first_type = new->first_type; old->num_types = new->num_types; } } if (wanted & XkbKTLevelNamesMask) { if (old->changed & XkbKTLevelNamesMask) { new_last = (new->first_lvl + new->num_lvls - 1); old_last = (old->first_lvl + old->num_lvls - 1); if (new->first_lvl < old->first_lvl) first = new->first_lvl; else first = old->first_lvl; if (old_last > new_last) last = old_last; else last = new_last; old->first_lvl = first; old->num_lvls = (last - first) + 1; } else { old->first_lvl = new->first_lvl; old->num_lvls = new->num_lvls; } } if (wanted & XkbIndicatorNamesMask) { if (old->changed & XkbIndicatorNamesMask) old->changed_indicators |= new->changed_indicators; else old->changed_indicators = new->changed_indicators; } if (wanted & XkbKeyNamesMask) { if (old->changed & XkbKeyNamesMask) { new_last = (new->first_key + new->num_keys - 1); old_last = (old->first_key + old->num_keys - 1); first = old->first_key; if (new->first_key < old->first_key) first = new->first_key; if (old_last > new_last) new_last = old_last; old->first_key = first; old->num_keys = (new_last - first) + 1; } else { old->first_key = new->first_key; old->num_keys = new->num_keys; } } if (wanted & XkbVirtualModNamesMask) { if (old->changed & XkbVirtualModNamesMask) old->changed_vmods |= new->changed_vmods; else old->changed_vmods = new->changed_vmods; } if (wanted & XkbGroupNamesMask) { if (old->changed & XkbGroupNamesMask) old->changed_groups |= new->changed_groups; else old->changed_groups = new->changed_groups; } if (wanted & XkbRGNamesMask) old->num_rg = new->num_radio_groups; if (wanted & XkbKeyAliasesMask) old->num_aliases = new->num_aliases; old->changed |= wanted; return; } XkbKeyTypeNamesMask) { if (nTypes < 1) which &= ~XlibX11-1.6.3/src/xkb/XKBCtrls.c000064401431060000012000000270511247741723500162360ustar00alancstaff00002660200006/************************************************************ Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Silicon Graphics not be used in advertising or publicity pertaining to distribution of the software without specific prior written permission. Silicon Graphics makes no representation about the suitability of this software for any purpose. It is provided "as is" without any express or implied warranty. SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ********************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #include "Xlibint.h" #include #include "XKBlibint.h" static xkbSetControlsReq * _XkbGetSetControlsReq(Display *dpy, XkbInfoPtr xkbi, unsigned int deviceSpec) { xkbSetControlsReq *req; GetReq(kbSetControls, req); bzero(req, SIZEOF(xkbSetControlsReq)); req->reqType = xkbi->codes->major_opcode; req->length = (SIZEOF(xkbSetControlsReq) >> 2); req->xkbReqType = X_kbSetControls; req->deviceSpec = deviceSpec; return req; } Bool XkbSetAutoRepeatRate(Display *dpy, unsigned int deviceSpec, unsigned int timeout, unsigned int interval) { register xkbSetControlsReq *req; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return False; LockDisplay(dpy); req = _XkbGetSetControlsReq(dpy, dpy->xkb_info, deviceSpec); req->changeCtrls = XkbRepeatKeysMask; req->repeatDelay = timeout; req->repeatInterval = interval; UnlockDisplay(dpy); SyncHandle(); return True; } Bool XkbGetAutoRepeatRate(Display *dpy, unsigned int deviceSpec, unsigned int *timeoutp, unsigned int *intervalp) { register xkbGetControlsReq *req; xkbGetControlsReply rep; XkbInfoPtr xkbi; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return False; LockDisplay(dpy); xkbi = dpy->xkb_info; GetReq(kbGetControls, req); req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbGetControls; req->deviceSpec = deviceSpec; if (!_XReply(dpy, (xReply *) &rep, (SIZEOF(xkbGetControlsReply) - SIZEOF(xReply)) >> 2, xFalse)) { UnlockDisplay(dpy); SyncHandle(); return False; } UnlockDisplay(dpy); SyncHandle(); *timeoutp = rep.repeatDelay; *intervalp = rep.repeatInterval; return True; } Bool XkbSetServerInternalMods(Display *dpy, unsigned deviceSpec, unsigned affectReal, unsigned realValues, unsigned affectVirtual, unsigned virtualValues) { register xkbSetControlsReq *req; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return False; LockDisplay(dpy); req = _XkbGetSetControlsReq(dpy, dpy->xkb_info, deviceSpec); req->affectInternalMods = affectReal; req->internalMods = realValues; req->affectInternalVMods = affectVirtual; req->internalVMods = virtualValues; req->changeCtrls = XkbInternalModsMask; UnlockDisplay(dpy); SyncHandle(); return True; } Bool XkbSetIgnoreLockMods(Display *dpy, unsigned int deviceSpec, unsigned affectReal, unsigned realValues, unsigned affectVirtual, unsigned virtualValues) { register xkbSetControlsReq *req; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return False; LockDisplay(dpy); req = _XkbGetSetControlsReq(dpy, dpy->xkb_info, deviceSpec); req->affectIgnoreLockMods = affectReal; req->ignoreLockMods = realValues; req->affectIgnoreLockVMods = affectVirtual; req->ignoreLockVMods = virtualValues; req->changeCtrls = XkbIgnoreLockModsMask; UnlockDisplay(dpy); SyncHandle(); return True; } Bool XkbChangeEnabledControls(Display *dpy, unsigned deviceSpec, unsigned affect, unsigned values) { register xkbSetControlsReq *req; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return False; LockDisplay(dpy); req = _XkbGetSetControlsReq(dpy, dpy->xkb_info, deviceSpec); req->affectEnabledCtrls = affect; req->enabledCtrls = (affect & values); req->changeCtrls = XkbControlsEnabledMask; UnlockDisplay(dpy); SyncHandle(); return True; } Status XkbGetControls(Display *dpy, unsigned long which, XkbDescPtr xkb) { register xkbGetControlsReq *req; xkbGetControlsReply rep; XkbControlsPtr ctrls; XkbInfoPtr xkbi; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return BadAccess; if ((!xkb) || (!which)) return BadMatch; LockDisplay(dpy); xkbi = dpy->xkb_info; GetReq(kbGetControls, req); if (!xkb->ctrls) { xkb->ctrls = _XkbTypedCalloc(1, XkbControlsRec); if (!xkb->ctrls) { UnlockDisplay(dpy); SyncHandle(); return BadAlloc; } } req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbGetControls; req->deviceSpec = xkb->device_spec; if (!_XReply(dpy, (xReply *) &rep, (SIZEOF(xkbGetControlsReply) - SIZEOF(xReply)) >> 2, xFalse)) { UnlockDisplay(dpy); SyncHandle(); return BadImplementation; } if (xkb->device_spec == XkbUseCoreKbd) xkb->device_spec = rep.deviceID; ctrls = xkb->ctrls; if (which & XkbControlsEnabledMask) ctrls->enabled_ctrls = rep.enabledCtrls; ctrls->num_groups = rep.numGroups; if (which & XkbGroupsWrapMask) ctrls->groups_wrap = rep.groupsWrap; if (which & XkbInternalModsMask) { ctrls->internal.mask = rep.internalMods; ctrls->internal.real_mods = rep.internalRealMods; ctrls->internal.vmods = rep.internalVMods; } if (which & XkbIgnoreLockModsMask) { ctrls->ignore_lock.mask = rep.ignoreLockMods; ctrls->ignore_lock.real_mods = rep.ignoreLockRealMods; ctrls->ignore_lock.vmods = rep.ignoreLockVMods; } if (which & XkbRepeatKeysMask) { ctrls->repeat_delay = rep.repeatDelay; ctrls->repeat_interval = rep.repeatInterval; } if (which & XkbSlowKeysMask) ctrls->slow_keys_delay = rep.slowKeysDelay; if (which & XkbBounceKeysMask) ctrls->debounce_delay = rep.debounceDelay; if (which & XkbMouseKeysMask) { ctrls->mk_dflt_btn = rep.mkDfltBtn; } if (which & XkbMouseKeysAccelMask) { ctrls->mk_delay = rep.mkDelay; ctrls->mk_interval = rep.mkInterval; ctrls->mk_time_to_max = rep.mkTimeToMax; ctrls->mk_max_speed = rep.mkMaxSpeed; ctrls->mk_curve = rep.mkCurve; } if (which & XkbAccessXKeysMask) ctrls->ax_options = rep.axOptions; if (which & XkbStickyKeysMask) { ctrls->ax_options &= ~XkbAX_SKOptionsMask; ctrls->ax_options |= rep.axOptions & XkbAX_SKOptionsMask; } if (which & XkbAccessXFeedbackMask) { ctrls->ax_options &= ~XkbAX_FBOptionsMask; ctrls->ax_options |= rep.axOptions & XkbAX_FBOptionsMask; } if (which & XkbAccessXTimeoutMask) { ctrls->ax_timeout = rep.axTimeout; ctrls->axt_ctrls_mask = rep.axtCtrlsMask; ctrls->axt_ctrls_values = rep.axtCtrlsValues; ctrls->axt_opts_mask = rep.axtOptsMask; ctrls->axt_opts_values = rep.axtOptsValues; } if (which & XkbPerKeyRepeatMask) { memcpy(ctrls->per_key_repeat, rep.perKeyRepeat, XkbPerKeyBitArraySize); } UnlockDisplay(dpy); SyncHandle(); return Success; } Bool XkbSetControls(Display *dpy, unsigned long which, XkbDescPtr xkb) { register xkbSetControlsReq *req; XkbControlsPtr ctrls; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return False; if ((!xkb) || (!xkb->ctrls)) return False; ctrls = xkb->ctrls; LockDisplay(dpy); req = _XkbGetSetControlsReq(dpy, dpy->xkb_info, xkb->device_spec); req->changeCtrls = (CARD32) which; if (which & XkbInternalModsMask) { req->affectInternalMods = ~0; req->internalMods = ctrls->internal.real_mods; req->affectInternalVMods = ~0; req->internalVMods = ctrls->internal.vmods; } if (which & XkbIgnoreLockModsMask) { req->affectIgnoreLockMods = ~0; req->ignoreLockMods = ctrls->ignore_lock.real_mods; req->affectIgnoreLockVMods = ~0; req->ignoreLockVMods = ctrls->ignore_lock.vmods; } if (which & XkbControlsEnabledMask) { req->affectEnabledCtrls = XkbAllBooleanCtrlsMask; req->enabledCtrls = ctrls->enabled_ctrls; } if (which & XkbRepeatKeysMask) { req->repeatDelay = ctrls->repeat_delay; req->repeatInterval = ctrls->repeat_interval; } if (which & XkbSlowKeysMask) req->slowKeysDelay = ctrls->slow_keys_delay; if (which & XkbBounceKeysMask) req->debounceDelay = ctrls->debounce_delay; if (which & XkbMouseKeysMask) { req->mkDfltBtn = ctrls->mk_dflt_btn; } if (which & XkbGroupsWrapMask) req->groupsWrap = ctrls->groups_wrap; if (which & (XkbAccessXKeysMask | XkbStickyKeysMask | XkbAccessXFeedbackMask)) req->axOptions = ctrls->ax_options; if (which & XkbMouseKeysAccelMask) { req->mkDelay = ctrls->mk_delay; req->mkInterval = ctrls->mk_interval; req->mkTimeToMax = ctrls->mk_time_to_max; req->mkMaxSpeed = ctrls->mk_max_speed; req->mkCurve = ctrls->mk_curve; } if (which & XkbAccessXTimeoutMask) { req->axTimeout = ctrls->ax_timeout; req->axtCtrlsMask = ctrls->axt_ctrls_mask; req->axtCtrlsValues = ctrls->axt_ctrls_values; req->axtOptsMask = ctrls->axt_opts_mask; req->axtOptsValues = ctrls->axt_opts_values; } if (which & XkbPerKeyRepeatMask) { memcpy(req->perKeyRepeat, ctrls->per_key_repeat, XkbPerKeyBitArraySize); } UnlockDisplay(dpy); SyncHandle(); return True; } /***====================================================================***/ void XkbNoteControlsChanges(XkbControlsChangesPtr old, XkbControlsNotifyEvent *new, unsigned int wanted) { old->changed_ctrls |= (new->changed_ctrls & wanted); if (new->changed_ctrls & XkbControlsEnabledMask & wanted) old->enabled_ctrls_changes ^= new->enabled_ctrl_changes; /* num_groups_changed?? */ return; } etReq(kbSetControls, req); bzero(req, SIZEOF(xkbSetControlsReq)); req->reqType = xkbi->codes->major_opcode; req->length = (SIZEOF(xkbSetControlsReq) >> 2); req->xkbReqType = X_kbSetControls; req->deviceSpec = deviceSpec; return req; } Bool XkbSetAutoRepeatRate(Display *dpy, unsigned int deviceSpec, unsigned int timeout, unsigned int interval) { register xkbSetControlsReq *req;libX11-1.6.3/src/xkb/XKBlibint.h000064401431060000012000000226321247741723500164350ustar00alancstaff00002660200006/************************************************************ Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Silicon Graphics not be used in advertising or publicity pertaining to distribution of the software without specific prior written permission. Silicon Graphics makes no representation about the suitability of this software for any purpose. It is provided "as is" without any express or implied warranty. SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ********************************************************/ #ifndef _XKBLIBINT_H_ #define _XKBLIBINT_H_ #include #include #define XkbMapPending (1<<0) #define XkbXlibNewKeyboard (1<<1) typedef int (*XkbKSToMBFunc)( XPointer /* priv */, KeySym /* sym */, char * /* buf */, int /* len */, int * /* extra_rtrn */ ); typedef KeySym (*XkbMBToKSFunc)( XPointer /* priv */, char * /* buf */, int /* len */, Status * /* status */ ); typedef KeySym (*XkbToUpperFunc)( KeySym /* sym */ ); typedef struct _XkbConverters { XkbKSToMBFunc KSToMB; XPointer KSToMBPriv; XkbMBToKSFunc MBToKS; XPointer MBToKSPriv; XkbToUpperFunc KSToUpper; } XkbConverters; extern XkbInternAtomFunc _XkbInternAtomFunc; extern XkbGetAtomNameFunc _XkbGetAtomNameFunc; typedef struct _XkbInfoRec { unsigned flags; unsigned xlib_ctrls; XExtCodes *codes; int srv_major; int srv_minor; unsigned selected_events; unsigned short selected_nkn_details; unsigned short selected_map_details; XkbDescRec *desc; XkbMapChangesRec changes; Atom composeLED; XkbConverters cvt; XkbConverters latin1cvt; } XkbInfoRec, *XkbInfoPtr; #define _XkbUnavailable(d) \ (((d)->flags&XlibDisplayNoXkb) || \ ((!(d)->xkb_info || (!(d)->xkb_info->desc)) && !_XkbLoadDpy(d))) #define _XkbCheckPendingRefresh(d,xi) { \ if ((xi)->flags&XkbXlibNewKeyboard) \ _XkbReloadDpy((d)); \ else if ((xi)->flags&XkbMapPending) { \ if (XkbGetMapChanges((d),(xi)->desc, &(xi)->changes)==Success) { \ LockDisplay((d)); \ (xi)->changes.changed= 0; \ UnlockDisplay((d)); \ } \ } \ } #define _XkbNeedModmap(i) ((!(i)->desc->map)||(!(i)->desc->map->modmap)) /* * mask of the events that the "invisible" XKB support in Xlib needs */ #define XKB_XLIB_MAP_MASK (XkbAllClientInfoMask) /* * Handy helper macros */ typedef struct _XkbReadBuffer { int error; int size; char *start; char *data; } XkbReadBufferRec, *XkbReadBufferPtr; #define _XkbAlloc(s) Xmalloc((s)) #define _XkbCalloc(n,s) Xcalloc((n),(s)) #define _XkbRealloc(o,s) Xrealloc((o),(s)) #define _XkbTypedAlloc(t) ((t *)Xmalloc(sizeof(t))) #define _XkbTypedCalloc(n,t) ((t *)Xcalloc((n),sizeof(t))) #define _XkbTypedRealloc(o,n,t) \ ((o) ? (t *)Xrealloc((o), (n)*sizeof(t)) : _XkbTypedCalloc(n,t)) #define _XkbClearElems(a,f,l,t) bzero(&(a)[f], ((l)-(f)+1) * sizeof(t)) #define _XkbFree(p) Xfree(p) _XFUNCPROTOBEGIN extern void _XkbReloadDpy( Display * /* dpy */ ); extern KeySym _XKeycodeToKeysym( Display * /* display */, #if NeedWidePrototypes unsigned int /* keycode */, #else KeyCode /* keycode */, #endif int /* index */ ); extern KeyCode _XKeysymToKeycode( Display * /* display */, KeySym /* keysym */ ); extern KeySym _XLookupKeysym( XKeyEvent * /* key_event */, int /* index */ ); extern int _XRefreshKeyboardMapping( XMappingEvent * /* event_map */ ); extern unsigned _XKeysymToModifiers( Display * /* dpy */, KeySym /* ks */ ); extern int _XTranslateKey( register Display * /* dpy */, KeyCode /* keycode */, register unsigned int /* modifiers */, unsigned int * /* modifiers_return */, KeySym * /* keysym_return */ ); extern int _XTranslateKeySym( Display * /* dpy */, register KeySym /* symbol */, unsigned int /* modifiers */, char * /* buffer */, int /* nbytes */ ); extern int _XLookupString( register XKeyEvent * /* event */, char * /* buffer */, int /* nbytes */, KeySym * /* keysym */, XComposeStatus * /* status */ ); extern void _XkbNoteCoreMapChanges( XkbMapChangesRec * /* old */, XMappingEvent * /* new */, unsigned int /* wanted */ ); extern int _XkbInitReadBuffer( Display * /* dpy */, XkbReadBufferPtr /* buf */, int /* size */ ); extern int _XkbSkipReadBufferData( XkbReadBufferPtr /* from */, int /* size */ ); extern int _XkbCopyFromReadBuffer( XkbReadBufferPtr /* from */, char * /* to */, int /* size */ ); #ifdef LONG64 extern int _XkbReadCopyData32( int * /* from */, long * /* to */, int /* num_words */ ); extern int _XkbWriteCopyData32( unsigned long * /* from */, CARD32 * /* to */, int /* num_words */ ); extern int _XkbReadBufferCopy32( XkbReadBufferPtr /* from */, long * /* to */, int /* size */ ); #else #define _XkbReadCopyData32(f,t,s) memcpy((char *)(t), (char *)(f), (s)*4) #define _XkbWriteCopyData32(f,t,s) memcpy((char *)(t), (char *)(f), (s)*4) #define _XkbReadBufferCopy32(f,t,s) _XkbCopyFromReadBuffer(f, (char *)t, (s)*4) #endif #ifndef NO_DEC_BINARY_COMPATIBILITY #define XKB_FORCE_INT_KEYSYM 1 #endif #ifdef XKB_FORCE_INT_KEYSYM extern int _XkbReadCopyKeySyms( int * /* from */, KeySym * /* to */, int /* num_words */ ); extern int _XkbWriteCopyKeySyms( KeySym * /* from */, CARD32 * /* to */, int /* num_words */ ); extern int _XkbReadBufferCopyKeySyms( XkbReadBufferPtr /* from */, #ifndef NO_DEC_BUG_FIX KeySym * /* to */, #else long * /* to */, #endif int /* size */ ); #else #define _XkbReadCopyKeySyms(f,t,n) _XkbReadCopyData32(f,t,n) #define _XkbWriteCopyKeySyms(f,t,n) _XkbWriteCopyData32(f,t,n) #define _XkbReadBufferCopyKeySyms(f,t,s) _XkbReadBufferCopy32(f,t,s) #endif extern char *_XkbPeekAtReadBuffer( XkbReadBufferPtr /* from */, int /* size */ ); extern char *_XkbGetReadBufferPtr( XkbReadBufferPtr /* from */, int /* size */ ); #define _XkbGetTypedRdBufPtr(b,n,t) ((t *)_XkbGetReadBufferPtr(b,(n)*SIZEOF(t))) extern int _XkbFreeReadBuffer( XkbReadBufferPtr /* buf */ ); extern Bool _XkbGetReadBufferCountedString( XkbReadBufferPtr /* buf */, char ** /* rtrn */ ); extern char *_XkbGetCharset( void ); extern int _XkbGetConverters( const char * /* encoding_name */, XkbConverters * /* cvt_rtrn */ ); #ifdef NEED_MAP_READERS extern Status _XkbReadGetMapReply( Display * /* dpy */, xkbGetMapReply * /* rep */, XkbDescRec * /* xkb */, int * /* nread_rtrn */ ); extern Status _XkbReadGetCompatMapReply( Display * /* dpy */, xkbGetCompatMapReply * /* rep */, XkbDescPtr /* xkb */, int * /* nread_rtrn */ ); extern Status _XkbReadGetIndicatorMapReply( Display * /* dpy */, xkbGetIndicatorMapReply * /* rep */, XkbDescPtr /* xkb */, int * /* nread_rtrn */ ); extern Status _XkbReadGetNamesReply( Display * /* dpy */, xkbGetNamesReply * /* rep */, XkbDescPtr /* xkb */, int * /* nread_rtrn */ ); extern Status _XkbReadGetGeometryReply( Display * /* dpy */, xkbGetGeometryReply * /* rep */, XkbDescPtr /* xkb */, int * /* nread_rtrn */ ); #endif _XFUNCPROTOEND #endif /* _XKBLIBINT_H_ */ ewKeyboard (1<<1) typedef int (*XkbKSToMBFunc)( XPointer /* priv */, libX11-1.6.3/src/xkb/XKBGAlloc.c000064401431060000012000000716211247741723500163120ustar00alancstaff00002660200006/************************************************************ Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Silicon Graphics not be used in advertising or publicity pertaining to distribution of the software without specific prior written permission. Silicon Graphics makes no representation about the suitability of this software for any purpose. It is provided "as is" without any express or implied warranty. SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ********************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #include "Xlibint.h" #include "XKBlibint.h" #include #include /***====================================================================***/ static void _XkbFreeGeomLeafElems(Bool freeAll, int first, int count, unsigned short *num_inout, unsigned short *sz_inout, char **elems, unsigned int elem_sz) { if ((freeAll) || (*elems == NULL)) { *num_inout = *sz_inout = 0; if (*elems != NULL) { _XkbFree(*elems); *elems = NULL; } return; } if ((first >= (*num_inout)) || (first < 0) || (count < 1)) return; if (first + count >= (*num_inout)) { /* truncating the array is easy */ (*num_inout) = first; } else { char *ptr; int extra; ptr = *elems; extra = ((*num_inout) - (first + count)) * elem_sz; if (extra > 0) memmove(&ptr[first * elem_sz], &ptr[(first + count) * elem_sz], extra); (*num_inout) -= count; } return; } typedef void (*ContentsClearFunc) ( char * /* priv */ ); static void _XkbFreeGeomNonLeafElems(Bool freeAll, int first, int count, unsigned short *num_inout, unsigned short *sz_inout, char **elems, unsigned int elem_sz, ContentsClearFunc freeFunc) { register int i; register char *ptr; if (freeAll) { first = 0; count = (*num_inout); } else if ((first >= (*num_inout)) || (first < 0) || (count < 1)) return; else if (first + count > (*num_inout)) count = (*num_inout) - first; if (*elems == NULL) return; if (freeFunc) { ptr = *elems; ptr += first * elem_sz; for (i = 0; i < count; i++) { (*freeFunc) (ptr); ptr += elem_sz; } } if (freeAll) { (*num_inout) = (*sz_inout) = 0; if (*elems) { _XkbFree(*elems); *elems = NULL; } } else if (first + count >= (*num_inout)) *num_inout = first; else { i = ((*num_inout) - (first + count)) * elem_sz; ptr = *elems; memmove(&ptr[first * elem_sz], &ptr[(first + count) * elem_sz], i); (*num_inout) -= count; } return; } /***====================================================================***/ static void _XkbClearProperty(char *prop_in) { XkbPropertyPtr prop = (XkbPropertyPtr) prop_in; if (prop->name) { _XkbFree(prop->name); prop->name = NULL; } if (prop->value) { _XkbFree(prop->value); prop->value = NULL; } return; } void XkbFreeGeomProperties(XkbGeometryPtr geom, int first, int count, Bool freeAll) { _XkbFreeGeomNonLeafElems(freeAll, first, count, &geom->num_properties, &geom->sz_properties, (char **) &geom->properties, sizeof(XkbPropertyRec), _XkbClearProperty); return; } /***====================================================================***/ void XkbFreeGeomKeyAliases(XkbGeometryPtr geom, int first, int count, Bool freeAll) { _XkbFreeGeomLeafElems(freeAll, first, count, &geom->num_key_aliases, &geom->sz_key_aliases, (char **) &geom->key_aliases, sizeof(XkbKeyAliasRec)); return; } /***====================================================================***/ static void _XkbClearColor(char *color_in) { XkbColorPtr color = (XkbColorPtr) color_in; _XkbFree(color->spec); return; } void XkbFreeGeomColors(XkbGeometryPtr geom, int first, int count, Bool freeAll) { _XkbFreeGeomNonLeafElems(freeAll, first, count, &geom->num_colors, &geom->sz_colors, (char **) &geom->colors, sizeof(XkbColorRec), _XkbClearColor); return; } /***====================================================================***/ void XkbFreeGeomPoints(XkbOutlinePtr outline, int first, int count, Bool freeAll) { _XkbFreeGeomLeafElems(freeAll, first, count, &outline->num_points, &outline->sz_points, (char **) &outline->points, sizeof(XkbPointRec)); return; } /***====================================================================***/ static void _XkbClearOutline(char *outline_in) { XkbOutlinePtr outline = (XkbOutlinePtr) outline_in; if (outline->points != NULL) XkbFreeGeomPoints(outline, 0, outline->num_points, True); return; } void XkbFreeGeomOutlines(XkbShapePtr shape, int first, int count, Bool freeAll) { _XkbFreeGeomNonLeafElems(freeAll, first, count, &shape->num_outlines, &shape->sz_outlines, (char **) &shape->outlines, sizeof(XkbOutlineRec), _XkbClearOutline); return; } /***====================================================================***/ static void _XkbClearShape(char *shape_in) { XkbShapePtr shape = (XkbShapePtr) shape_in; if (shape->outlines) XkbFreeGeomOutlines(shape, 0, shape->num_outlines, True); return; } void XkbFreeGeomShapes(XkbGeometryPtr geom, int first, int count, Bool freeAll) { _XkbFreeGeomNonLeafElems(freeAll, first, count, &geom->num_shapes, &geom->sz_shapes, (char **) &geom->shapes, sizeof(XkbShapeRec), _XkbClearShape); return; } /***====================================================================***/ void XkbFreeGeomOverlayKeys(XkbOverlayRowPtr row, int first, int count, Bool freeAll) { _XkbFreeGeomLeafElems(freeAll, first, count, &row->num_keys, &row->sz_keys, (char **) &row->keys, sizeof(XkbOverlayKeyRec)); return; } /***====================================================================***/ static void _XkbClearOverlayRow(char *row_in) { XkbOverlayRowPtr row = (XkbOverlayRowPtr) row_in; if (row->keys != NULL) XkbFreeGeomOverlayKeys(row, 0, row->num_keys, True); return; } void XkbFreeGeomOverlayRows(XkbOverlayPtr overlay, int first, int count, Bool freeAll) { _XkbFreeGeomNonLeafElems(freeAll, first, count, &overlay->num_rows, &overlay->sz_rows, (char **) &overlay->rows, sizeof(XkbOverlayRowRec), _XkbClearOverlayRow); return; } /***====================================================================***/ static void _XkbClearOverlay(char *overlay_in) { XkbOverlayPtr overlay = (XkbOverlayPtr) overlay_in; if (overlay->rows != NULL) XkbFreeGeomOverlayRows(overlay, 0, overlay->num_rows, True); return; } void XkbFreeGeomOverlays(XkbSectionPtr section, int first, int count, Bool freeAll) { _XkbFreeGeomNonLeafElems(freeAll, first, count, §ion->num_overlays, §ion->sz_overlays, (char **) §ion->overlays, sizeof(XkbOverlayRec), _XkbClearOverlay); return; } /***====================================================================***/ void XkbFreeGeomKeys(XkbRowPtr row, int first, int count, Bool freeAll) { _XkbFreeGeomLeafElems(freeAll, first, count, &row->num_keys, &row->sz_keys, (char **) &row->keys, sizeof(XkbKeyRec)); return; } /***====================================================================***/ static void _XkbClearRow(char *row_in) { XkbRowPtr row = (XkbRowPtr) row_in; if (row->keys != NULL) XkbFreeGeomKeys(row, 0, row->num_keys, True); return; } void XkbFreeGeomRows(XkbSectionPtr section, int first, int count, Bool freeAll) { _XkbFreeGeomNonLeafElems(freeAll, first, count, §ion->num_rows, §ion->sz_rows, (char **) §ion->rows, sizeof(XkbRowRec), _XkbClearRow); } /***====================================================================***/ static void _XkbClearSection(char *section_in) { XkbSectionPtr section = (XkbSectionPtr) section_in; if (section->rows != NULL) XkbFreeGeomRows(section, 0, section->num_rows, True); if (section->doodads != NULL) { XkbFreeGeomDoodads(section->doodads, section->num_doodads, True); section->doodads = NULL; } return; } void XkbFreeGeomSections(XkbGeometryPtr geom, int first, int count, Bool freeAll) { _XkbFreeGeomNonLeafElems(freeAll, first, count, &geom->num_sections, &geom->sz_sections, (char **) &geom->sections, sizeof(XkbSectionRec), _XkbClearSection); return; } /***====================================================================***/ static void _XkbClearDoodad(char *doodad_in) { XkbDoodadPtr doodad = (XkbDoodadPtr) doodad_in; switch (doodad->any.type) { case XkbTextDoodad: { if (doodad->text.text != NULL) { _XkbFree(doodad->text.text); doodad->text.text = NULL; } if (doodad->text.font != NULL) { _XkbFree(doodad->text.font); doodad->text.font = NULL; } } break; case XkbLogoDoodad: { if (doodad->logo.logo_name != NULL) { _XkbFree(doodad->logo.logo_name); doodad->logo.logo_name = NULL; } } break; } return; } void XkbFreeGeomDoodads(XkbDoodadPtr doodads, int nDoodads, Bool freeAll) { register int i; register XkbDoodadPtr doodad; if (doodads) { for (i = 0, doodad = doodads; i < nDoodads; i++, doodad++) { _XkbClearDoodad((char *) doodad); } if (freeAll) _XkbFree(doodads); } return; } void XkbFreeGeometry(XkbGeometryPtr geom, unsigned which, Bool freeMap) { if (geom == NULL) return; if (freeMap) which = XkbGeomAllMask; if ((which & XkbGeomPropertiesMask) && (geom->properties != NULL)) XkbFreeGeomProperties(geom, 0, geom->num_properties, True); if ((which & XkbGeomColorsMask) && (geom->colors != NULL)) XkbFreeGeomColors(geom, 0, geom->num_colors, True); if ((which & XkbGeomShapesMask) && (geom->shapes != NULL)) XkbFreeGeomShapes(geom, 0, geom->num_shapes, True); if ((which & XkbGeomSectionsMask) && (geom->sections != NULL)) XkbFreeGeomSections(geom, 0, geom->num_sections, True); if ((which & XkbGeomDoodadsMask) && (geom->doodads != NULL)) { XkbFreeGeomDoodads(geom->doodads, geom->num_doodads, True); geom->doodads = NULL; geom->num_doodads = geom->sz_doodads = 0; } if ((which & XkbGeomKeyAliasesMask) && (geom->key_aliases != NULL)) XkbFreeGeomKeyAliases(geom, 0, geom->num_key_aliases, True); if (freeMap) { if (geom->label_font != NULL) { _XkbFree(geom->label_font); geom->label_font = NULL; } _XkbFree(geom); } return; } /***====================================================================***/ static Status _XkbGeomAlloc(XPointer *old, unsigned short *num, unsigned short *total, int num_new, size_t sz_elem) { if (num_new < 1) return Success; if ((*old) == NULL) *num = *total = 0; if ((*num) + num_new <= (*total)) return Success; *total = (*num) + num_new; if ((*old) != NULL) (*old) = (XPointer) _XkbRealloc((*old), (*total) * sz_elem); else (*old) = (XPointer) _XkbCalloc((*total), sz_elem); if ((*old) == NULL) { *total = *num = 0; return BadAlloc; } if (*num > 0) { char *tmp = (char *) (*old); bzero(&tmp[sz_elem * (*num)], (num_new * sz_elem)); } return Success; } #define _XkbAllocProps(g, n) _XkbGeomAlloc((XPointer *)&(g)->properties, \ &(g)->num_properties, &(g)->sz_properties, \ (n), sizeof(XkbPropertyRec)) #define _XkbAllocColors(g, n) _XkbGeomAlloc((XPointer *)&(g)->colors, \ &(g)->num_colors, &(g)->sz_colors, \ (n), sizeof(XkbColorRec)) #define _XkbAllocShapes(g, n) _XkbGeomAlloc((XPointer *)&(g)->shapes, \ &(g)->num_shapes, &(g)->sz_shapes, \ (n), sizeof(XkbShapeRec)) #define _XkbAllocSections(g, n) _XkbGeomAlloc((XPointer *)&(g)->sections, \ &(g)->num_sections, &(g)->sz_sections, \ (n), sizeof(XkbSectionRec)) #define _XkbAllocDoodads(g, n) _XkbGeomAlloc((XPointer *)&(g)->doodads, \ &(g)->num_doodads, &(g)->sz_doodads, \ (n), sizeof(XkbDoodadRec)) #define _XkbAllocKeyAliases(g, n) _XkbGeomAlloc((XPointer *)&(g)->key_aliases, \ &(g)->num_key_aliases, &(g)->sz_key_aliases, \ (n), sizeof(XkbKeyAliasRec)) #define _XkbAllocOutlines(s, n) _XkbGeomAlloc((XPointer *)&(s)->outlines, \ &(s)->num_outlines, &(s)->sz_outlines, \ (n), sizeof(XkbOutlineRec)) #define _XkbAllocRows(s, n) _XkbGeomAlloc((XPointer *)&(s)->rows, \ &(s)->num_rows, &(s)->sz_rows, \ (n), sizeof(XkbRowRec)) #define _XkbAllocPoints(o, n) _XkbGeomAlloc((XPointer *)&(o)->points, \ &(o)->num_points, &(o)->sz_points, \ (n), sizeof(XkbPointRec)) #define _XkbAllocKeys(r, n) _XkbGeomAlloc((XPointer *)&(r)->keys, \ &(r)->num_keys, &(r)->sz_keys, \ (n), sizeof(XkbKeyRec)) #define _XkbAllocOverlays(s, n) _XkbGeomAlloc((XPointer *)&(s)->overlays, \ &(s)->num_overlays, &(s)->sz_overlays, \ (n), sizeof(XkbOverlayRec)) #define _XkbAllocOverlayRows(o, n) _XkbGeomAlloc((XPointer *)&(o)->rows, \ &(o)->num_rows, &(o)->sz_rows, \ (n), sizeof(XkbOverlayRowRec)) #define _XkbAllocOverlayKeys(r, n) _XkbGeomAlloc((XPointer *)&(r)->keys, \ &(r)->num_keys, &(r)->sz_keys, \ (n), sizeof(XkbOverlayKeyRec)) Status XkbAllocGeomProps(XkbGeometryPtr geom, int nProps) { return _XkbAllocProps(geom, nProps); } Status XkbAllocGeomColors(XkbGeometryPtr geom, int nColors) { return _XkbAllocColors(geom, nColors); } Status XkbAllocGeomKeyAliases(XkbGeometryPtr geom, int nKeyAliases) { return _XkbAllocKeyAliases(geom, nKeyAliases); } Status XkbAllocGeomShapes(XkbGeometryPtr geom, int nShapes) { return _XkbAllocShapes(geom, nShapes); } Status XkbAllocGeomSections(XkbGeometryPtr geom, int nSections) { return _XkbAllocSections(geom, nSections); } Status XkbAllocGeomOverlays(XkbSectionPtr section, int nOverlays) { return _XkbAllocOverlays(section, nOverlays); } Status XkbAllocGeomOverlayRows(XkbOverlayPtr overlay, int nRows) { return _XkbAllocOverlayRows(overlay, nRows); } Status XkbAllocGeomOverlayKeys(XkbOverlayRowPtr row, int nKeys) { return _XkbAllocOverlayKeys(row, nKeys); } Status XkbAllocGeomDoodads(XkbGeometryPtr geom, int nDoodads) { return _XkbAllocDoodads(geom, nDoodads); } Status XkbAllocGeomSectionDoodads(XkbSectionPtr section, int nDoodads) { return _XkbAllocDoodads(section, nDoodads); } Status XkbAllocGeomOutlines(XkbShapePtr shape, int nOL) { return _XkbAllocOutlines(shape, nOL); } Status XkbAllocGeomRows(XkbSectionPtr section, int nRows) { return _XkbAllocRows(section, nRows); } Status XkbAllocGeomPoints(XkbOutlinePtr ol, int nPts) { return _XkbAllocPoints(ol, nPts); } Status XkbAllocGeomKeys(XkbRowPtr row, int nKeys) { return _XkbAllocKeys(row, nKeys); } Status XkbAllocGeometry(XkbDescPtr xkb, XkbGeometrySizesPtr sizes) { XkbGeometryPtr geom; Status rtrn; if (xkb->geom == NULL) { xkb->geom = _XkbTypedCalloc(1, XkbGeometryRec); if (!xkb->geom) return BadAlloc; } geom = xkb->geom; if ((sizes->which & XkbGeomPropertiesMask) && ((rtrn = _XkbAllocProps(geom, sizes->num_properties)) != Success)) { goto BAIL; } if ((sizes->which & XkbGeomColorsMask) && ((rtrn = _XkbAllocColors(geom, sizes->num_colors)) != Success)) { goto BAIL; } if ((sizes->which & XkbGeomShapesMask) && ((rtrn = _XkbAllocShapes(geom, sizes->num_shapes)) != Success)) { goto BAIL; } if ((sizes->which & XkbGeomSectionsMask) && ((rtrn = _XkbAllocSections(geom, sizes->num_sections)) != Success)) { goto BAIL; } if ((sizes->which & XkbGeomDoodadsMask) && ((rtrn = _XkbAllocDoodads(geom, sizes->num_doodads)) != Success)) { goto BAIL; } if ((sizes->which & XkbGeomKeyAliasesMask) && ((rtrn = _XkbAllocKeyAliases(geom, sizes->num_key_aliases)) != Success)) { goto BAIL; } return Success; BAIL: XkbFreeGeometry(geom, XkbGeomAllMask, True); xkb->geom = NULL; return rtrn; } /***====================================================================***/ XkbPropertyPtr XkbAddGeomProperty(XkbGeometryPtr geom, char *name, char *value) { register int i; register XkbPropertyPtr prop; if ((!geom) || (!name) || (!value)) return NULL; for (i = 0, prop = geom->properties; i < geom->num_properties; i++, prop++) { if ((prop->name) && (strcmp(name, prop->name) == 0)) { _XkbFree(prop->value); prop->value = strdup(value); return prop; } } if ((geom->num_properties >= geom->sz_properties) && (_XkbAllocProps(geom, 1) != Success)) { return NULL; } prop = &geom->properties[geom->num_properties]; prop->name = strdup(name); if (!prop->name) return NULL; prop->value = strdup(value); if (!prop->value) { _XkbFree(prop->name); prop->name = NULL; return NULL; } geom->num_properties++; return prop; } XkbKeyAliasPtr XkbAddGeomKeyAlias(XkbGeometryPtr geom, char *aliasStr, char *realStr) { register int i; register XkbKeyAliasPtr alias; if ((!geom) || (!aliasStr) || (!realStr) || (!aliasStr[0]) || (!realStr[0])) return NULL; for (i = 0, alias = geom->key_aliases; i < geom->num_key_aliases; i++, alias++) { if (strncmp(alias->alias, aliasStr, XkbKeyNameLength) == 0) { bzero(alias->real, XkbKeyNameLength); strncpy(alias->real, realStr, XkbKeyNameLength); return alias; } } if ((geom->num_key_aliases >= geom->sz_key_aliases) && (_XkbAllocKeyAliases(geom, 1) != Success)) { return NULL; } alias = &geom->key_aliases[geom->num_key_aliases]; bzero(alias, sizeof(XkbKeyAliasRec)); strncpy(alias->alias, aliasStr, XkbKeyNameLength); strncpy(alias->real, realStr, XkbKeyNameLength); geom->num_key_aliases++; return alias; } XkbColorPtr XkbAddGeomColor(XkbGeometryPtr geom, char *spec, unsigned int pixel) { register int i; register XkbColorPtr color; if ((!geom) || (!spec)) return NULL; for (i = 0, color = geom->colors; i < geom->num_colors; i++, color++) { if ((color->spec) && (strcmp(color->spec, spec) == 0)) { color->pixel = pixel; return color; } } if ((geom->num_colors >= geom->sz_colors) && (_XkbAllocColors(geom, 1) != Success)) { return NULL; } color = &geom->colors[geom->num_colors]; color->pixel = pixel; color->spec = strdup(spec); if (!color->spec) return NULL; geom->num_colors++; return color; } XkbOutlinePtr XkbAddGeomOutline(XkbShapePtr shape, int sz_points) { XkbOutlinePtr outline; if ((!shape) || (sz_points < 0)) return NULL; if ((shape->num_outlines >= shape->sz_outlines) && (_XkbAllocOutlines(shape, 1) != Success)) { return NULL; } outline = &shape->outlines[shape->num_outlines]; bzero(outline, sizeof(XkbOutlineRec)); if ((sz_points > 0) && (_XkbAllocPoints(outline, sz_points) != Success)) return NULL; shape->num_outlines++; return outline; } XkbShapePtr XkbAddGeomShape(XkbGeometryPtr geom, Atom name, int sz_outlines) { XkbShapePtr shape; register int i; if ((!geom) || (!name) || (sz_outlines < 0)) return NULL; if (geom->num_shapes > 0) { for (shape = geom->shapes, i = 0; i < geom->num_shapes; i++, shape++) { if (name == shape->name) return shape; } } if ((geom->num_shapes >= geom->sz_shapes) && (_XkbAllocShapes(geom, 1) != Success)) return NULL; shape = &geom->shapes[geom->num_shapes]; bzero(shape, sizeof(XkbShapeRec)); if ((sz_outlines > 0) && (_XkbAllocOutlines(shape, sz_outlines) != Success)) return NULL; shape->name = name; shape->primary = shape->approx = NULL; geom->num_shapes++; return shape; } XkbKeyPtr XkbAddGeomKey(XkbRowPtr row) { XkbKeyPtr key; if (!row) return NULL; if ((row->num_keys >= row->sz_keys) && (_XkbAllocKeys(row, 1) != Success)) return NULL; key = &row->keys[row->num_keys++]; bzero(key, sizeof(XkbKeyRec)); return key; } XkbRowPtr XkbAddGeomRow(XkbSectionPtr section, int sz_keys) { XkbRowPtr row; if ((!section) || (sz_keys < 0)) return NULL; if ((section->num_rows >= section->sz_rows) && (_XkbAllocRows(section, 1) != Success)) return NULL; row = §ion->rows[section->num_rows]; bzero(row, sizeof(XkbRowRec)); if ((sz_keys > 0) && (_XkbAllocKeys(row, sz_keys) != Success)) return NULL; section->num_rows++; return row; } XkbSectionPtr XkbAddGeomSection(XkbGeometryPtr geom, Atom name, int sz_rows, int sz_doodads, int sz_over) { register int i; XkbSectionPtr section; if ((!geom) || (name == None) || (sz_rows < 0)) return NULL; for (i = 0, section = geom->sections; i < geom->num_sections; i++, section++) { if (section->name != name) continue; if (((sz_rows > 0) && (_XkbAllocRows(section, sz_rows) != Success)) || ((sz_doodads > 0) && (_XkbAllocDoodads(section, sz_doodads) != Success)) || ((sz_over > 0) && (_XkbAllocOverlays(section, sz_over) != Success))) return NULL; return section; } if ((geom->num_sections >= geom->sz_sections) && (_XkbAllocSections(geom, 1) != Success)) return NULL; section = &geom->sections[geom->num_sections]; if ((sz_rows > 0) && (_XkbAllocRows(section, sz_rows) != Success)) return NULL; if ((sz_doodads > 0) && (_XkbAllocDoodads(section, sz_doodads) != Success)) { if (section->rows) { _XkbFree(section->rows); section->rows = NULL; section->sz_rows = section->num_rows = 0; } return NULL; } section->name = name; geom->num_sections++; return section; } XkbDoodadPtr XkbAddGeomDoodad(XkbGeometryPtr geom, XkbSectionPtr section, Atom name) { XkbDoodadPtr old, doodad; register int i, nDoodads; if ((!geom) || (name == None)) return NULL; if ((section != NULL) && (section->num_doodads > 0)) { old = section->doodads; nDoodads = section->num_doodads; } else { old = geom->doodads; nDoodads = geom->num_doodads; } for (i = 0, doodad = old; i < nDoodads; i++, doodad++) { if (doodad->any.name == name) return doodad; } if (section) { if ((section->num_doodads >= geom->sz_doodads) && (_XkbAllocDoodads(section, 1) != Success)) { return NULL; } doodad = §ion->doodads[section->num_doodads++]; } else { if ((geom->num_doodads >= geom->sz_doodads) && (_XkbAllocDoodads(geom, 1) != Success)) return NULL; doodad = &geom->doodads[geom->num_doodads++]; } bzero(doodad, sizeof(XkbDoodadRec)); doodad->any.name = name; return doodad; } XkbOverlayKeyPtr XkbAddGeomOverlayKey(XkbOverlayPtr overlay, XkbOverlayRowPtr row, char *over, char *under) { register int i; XkbOverlayKeyPtr key; XkbSectionPtr section; XkbRowPtr row_under; Bool found; if ((!overlay) || (!row) || (!over) || (!under)) return NULL; section = overlay->section_under; if (row->row_under >= section->num_rows) return NULL; row_under = §ion->rows[row->row_under]; for (i = 0, found = False; i < row_under->num_keys; i++) { if (strncmp(under, row_under->keys[i].name.name, XkbKeyNameLength) == 0) { found = True; break; } } if (!found) return NULL; if ((row->num_keys >= row->sz_keys) && (_XkbAllocOverlayKeys(row, 1) != Success)) return NULL; key = &row->keys[row->num_keys]; strncpy(key->under.name, under, XkbKeyNameLength); strncpy(key->over.name, over, XkbKeyNameLength); row->num_keys++; return key; } XkbOverlayRowPtr XkbAddGeomOverlayRow(XkbOverlayPtr overlay, int row_under, int sz_keys) { register int i; XkbOverlayRowPtr row; if ((!overlay) || (sz_keys < 0)) return NULL; if (row_under >= overlay->section_under->num_rows) return NULL; for (i = 0; i < overlay->num_rows; i++) { if (overlay->rows[i].row_under == row_under) { row = &overlay->rows[i]; if ((row->sz_keys < sz_keys) && (_XkbAllocOverlayKeys(row, sz_keys) != Success)) { return NULL; } return &overlay->rows[i]; } } if ((overlay->num_rows >= overlay->sz_rows) && (_XkbAllocOverlayRows(overlay, 1) != Success)) return NULL; row = &overlay->rows[overlay->num_rows]; bzero(row, sizeof(XkbOverlayRowRec)); if ((sz_keys > 0) && (_XkbAllocOverlayKeys(row, sz_keys) != Success)) return NULL; row->row_under = row_under; overlay->num_rows++; return row; } XkbOverlayPtr XkbAddGeomOverlay(XkbSectionPtr section, Atom name, int sz_rows) { register int i; XkbOverlayPtr overlay; if ((!section) || (name == None) || (sz_rows == 0)) return NULL; for (i = 0, overlay = section->overlays; i < section->num_overlays; i++, overlay++) { if (overlay->name == name) { if ((sz_rows > 0) && (_XkbAllocOverlayRows(overlay, sz_rows) != Success)) return NULL; return overlay; } } if ((section->num_overlays >= section->sz_overlays) && (_XkbAllocOverlays(section, 1) != Success)) return NULL; overlay = §ion->overlays[section->num_overlays]; if ((sz_rows > 0) && (_XkbAllocOverlayRows(overlay, sz_rows) != Success)) return NULL; overlay->name = name; overlay->section_under = section; section->num_overlays++; return overlay; } geom = NULL; return rtrn; } /***====================================================================***/ libX11-1.6.3/src/xkb/XKBBind.c000064401431060000012000000561561247741723500160330ustar00alancstaff00002660200006/* Copyright 1985, 1987, 1994, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ /* the new monsters ate the old ones */ #ifdef HAVE_CONFIG_H #include #endif #include "XKBlib.h" #include #include #include #include #include #include #include "XKBlibint.h" #define AllMods (ShiftMask|LockMask|ControlMask| \ Mod1Mask|Mod2Mask|Mod3Mask|Mod4Mask|Mod5Mask) static int _XkbLoadDpy(Display *dpy); struct _XKeytrans { struct _XKeytrans *next; /* next on list */ char *string; /* string to return when the time comes */ int len; /* length of string (since NULL is legit) */ KeySym key; /* keysym rebound */ unsigned int state; /* modifier state */ KeySym *modifiers; /* modifier keysyms you want */ int mlen; /* length of modifier list */ }; KeySym XkbKeycodeToKeysym(Display *dpy, #if NeedWidePrototypes unsigned int kc, #else KeyCode kc, #endif int group, int level) { XkbDescRec *xkb; if (_XkbUnavailable(dpy)) return NoSymbol; _XkbCheckPendingRefresh(dpy, dpy->xkb_info); xkb = dpy->xkb_info->desc; if ((kc < xkb->min_key_code) || (kc > xkb->max_key_code)) return NoSymbol; if ((group < 0) || (level < 0) || (group >= XkbKeyNumGroups(xkb, kc))) return NoSymbol; if (level >= XkbKeyGroupWidth(xkb, kc, group)) { /* for compatibility with the core protocol, _always_ allow */ /* two symbols in the first two groups. If either of the */ /* two is of type ONE_LEVEL, just replicate the first symbol */ if ((group > XkbGroup2Index) || (XkbKeyGroupWidth(xkb, kc, group) != 1) || (level != 1)) { return NoSymbol; } level = 0; } return XkbKeySymEntry(xkb, kc, level, group); } KeySym XKeycodeToKeysym(Display *dpy, #if NeedWidePrototypes unsigned int kc, #else KeyCode kc, #endif int col) { XkbDescRec *xkb; if (_XkbUnavailable(dpy)) return _XKeycodeToKeysym(dpy, kc, col); _XkbCheckPendingRefresh(dpy, dpy->xkb_info); xkb = dpy->xkb_info->desc; if ((kc < xkb->min_key_code) || (kc > xkb->max_key_code)) return NoSymbol; if (col > 3) { int lastSym, tmp, nGrp; lastSym = 3; nGrp = XkbKeyNumGroups(xkb, kc); if ((nGrp > 0) && ((tmp = XkbKeyGroupWidth(xkb, kc, XkbGroup1Index)) > 2)) { if (col <= (lastSym + tmp - 2)) return XkbKeycodeToKeysym(dpy, kc, XkbGroup1Index, col - lastSym + 2); lastSym += tmp - 2; } if ((nGrp > 1) && ((tmp = XkbKeyGroupWidth(xkb, kc, XkbGroup2Index)) > 2)) { if (col <= (lastSym + tmp - 2)) return XkbKeycodeToKeysym(dpy, kc, XkbGroup2Index, col - lastSym + 2); lastSym += tmp - 2; } if (nGrp > 2) { tmp = XkbKeyGroupWidth(xkb, kc, XkbGroup3Index); if (col <= lastSym + tmp) return XkbKeycodeToKeysym(dpy, kc, XkbGroup3Index, col - lastSym); lastSym += tmp; } if (nGrp > 3) { tmp = XkbKeyGroupWidth(xkb, kc, XkbGroup4Index); if (col <= lastSym + tmp) return XkbKeycodeToKeysym(dpy, kc, XkbGroup4Index, col - lastSym); } return NoSymbol; } return XkbKeycodeToKeysym(dpy, kc, (col >> 1), (col & 1)); } KeyCode XKeysymToKeycode(Display *dpy, KeySym ks) { register int i, j, gotOne; if (_XkbUnavailable(dpy)) return _XKeysymToKeycode(dpy, ks); _XkbCheckPendingRefresh(dpy, dpy->xkb_info); j = 0; do { register XkbDescRec *xkb = dpy->xkb_info->desc; gotOne = 0; for (i = dpy->min_keycode; i <= dpy->max_keycode; i++) { if (j < (int) XkbKeyNumSyms(xkb, i)) { gotOne = 1; if ((XkbKeySym(xkb, i, j) == ks)) return i; } } j++; } while (gotOne); return 0; } static int _XkbComputeModmap(Display *dpy) { register XkbDescPtr xkb; xkb = dpy->xkb_info->desc; if (XkbGetUpdatedMap(dpy, XkbModifierMapMask, xkb) == Success) return 1; return 0; } unsigned XkbKeysymToModifiers(Display *dpy, KeySym ks) { XkbDescRec *xkb; register int i, j; register KeySym *pSyms; CARD8 mods; if (_XkbUnavailable(dpy)) return _XKeysymToModifiers(dpy, ks); _XkbCheckPendingRefresh(dpy, dpy->xkb_info); if (_XkbNeedModmap(dpy->xkb_info) && (!_XkbComputeModmap(dpy))) return _XKeysymToModifiers(dpy, ks); xkb = dpy->xkb_info->desc; mods = 0; for (i = xkb->min_key_code; i <= (int) xkb->max_key_code; i++) { pSyms = XkbKeySymsPtr(xkb, i); for (j = XkbKeyNumSyms(xkb, i) - 1; j >= 0; j--) { if (pSyms[j] == ks) { mods |= xkb->map->modmap[i]; break; } } } return mods; } KeySym XLookupKeysym(register XKeyEvent * event, int col) { Display *dpy = event->display; if (_XkbUnavailable(dpy)) return _XLookupKeysym(event, col); _XkbCheckPendingRefresh(dpy, dpy->xkb_info); return XKeycodeToKeysym(dpy, event->keycode, col); } /* * Not a public entry point -- XkbTranslateKey is an obsolete name * that is preserved here so that functions linked against the old * version will continue to work in a shared library environment. */ int XkbTranslateKey(register Display *dpy, KeyCode key, register unsigned int mods, unsigned int *mods_rtrn, KeySym *keysym_rtrn); int XkbTranslateKey(register Display *dpy, KeyCode key, register unsigned int mods, unsigned int *mods_rtrn, KeySym *keysym_rtrn) { return XkbLookupKeySym(dpy, key, mods, mods_rtrn, keysym_rtrn); } Bool XkbLookupKeySym(register Display *dpy, KeyCode key, register unsigned int mods, unsigned int *mods_rtrn, KeySym *keysym_rtrn) { if (_XkbUnavailable(dpy)) return _XTranslateKey(dpy, key, mods, mods_rtrn, keysym_rtrn); _XkbCheckPendingRefresh(dpy, dpy->xkb_info); return XkbTranslateKeyCode(dpy->xkb_info->desc, key, mods, mods_rtrn, keysym_rtrn); } Bool XkbTranslateKeyCode(register XkbDescPtr xkb, KeyCode key, register unsigned int mods, unsigned int *mods_rtrn, KeySym *keysym_rtrn) { XkbKeyTypeRec *type; int col, nKeyGroups; unsigned preserve, effectiveGroup; KeySym *syms; if (mods_rtrn != NULL) *mods_rtrn = 0; nKeyGroups = XkbKeyNumGroups(xkb, key); if ((!XkbKeycodeInRange(xkb, key)) || (nKeyGroups == 0)) { if (keysym_rtrn != NULL) *keysym_rtrn = NoSymbol; return False; } syms = XkbKeySymsPtr(xkb, key); /* find the offset of the effective group */ col = 0; effectiveGroup = XkbGroupForCoreState(mods); if (effectiveGroup >= nKeyGroups) { unsigned groupInfo = XkbKeyGroupInfo(xkb, key); switch (XkbOutOfRangeGroupAction(groupInfo)) { default: effectiveGroup %= nKeyGroups; break; case XkbClampIntoRange: effectiveGroup = nKeyGroups - 1; break; case XkbRedirectIntoRange: effectiveGroup = XkbOutOfRangeGroupNumber(groupInfo); if (effectiveGroup >= nKeyGroups) effectiveGroup = 0; break; } } col = effectiveGroup * XkbKeyGroupsWidth(xkb, key); type = XkbKeyKeyType(xkb, key, effectiveGroup); preserve = 0; if (type->map) { /* find the column (shift level) within the group */ register int i; register XkbKTMapEntryPtr entry; for (i = 0, entry = type->map; i < type->map_count; i++, entry++) { if ((entry->active) && ((mods & type->mods.mask) == entry->mods.mask)) { col += entry->level; if (type->preserve) preserve = type->preserve[i].mask; break; } } } if (keysym_rtrn != NULL) *keysym_rtrn = syms[col]; if (mods_rtrn) { *mods_rtrn = type->mods.mask & (~preserve); /* The Motif VTS doesn't get the help callback called if help * is bound to Shift+, and it appears as though it * is XkbTranslateKeyCode that is causing the problem. The * core X version of XTranslateKey always OR's in ShiftMask * and LockMask for mods_rtrn, so this "fix" keeps this behavior * and solves the VTS problem. */ if ((xkb->dpy) && (xkb->dpy->xkb_info) && (xkb->dpy->xkb_info-> xlib_ctrls & XkbLC_AlwaysConsumeShiftAndLock)) { *mods_rtrn |= (ShiftMask | LockMask); } } return (syms[col] != NoSymbol); } Status XkbRefreshKeyboardMapping(register XkbMapNotifyEvent * event) { Display *dpy = event->display; XkbInfoPtr xkbi; if (_XkbUnavailable(dpy)) { _XRefreshKeyboardMapping((XMappingEvent *) event); return Success; } xkbi = dpy->xkb_info; if (((event->type & 0x7f) - xkbi->codes->first_event) != XkbEventCode) return BadMatch; if (event->xkb_type == XkbNewKeyboardNotify) { _XkbReloadDpy(dpy); return Success; } if (event->xkb_type == XkbMapNotify) { XkbMapChangesRec changes; Status rtrn; if (xkbi->flags & XkbMapPending) changes = xkbi->changes; else bzero(&changes, sizeof(changes)); XkbNoteMapChanges(&changes, event, XKB_XLIB_MAP_MASK); if ((rtrn = XkbGetMapChanges(dpy, xkbi->desc, &changes)) != Success) { #ifdef DEBUG fprintf(stderr, "Internal Error! XkbGetMapChanges failed:\n"); #endif xkbi->changes = changes; } else if (xkbi->flags & XkbMapPending) { xkbi->flags &= ~XkbMapPending; bzero(&xkbi->changes, sizeof(XkbMapChangesRec)); } return rtrn; } return BadMatch; } int XRefreshKeyboardMapping(register XMappingEvent * event) { XkbEvent *xkbevent = (XkbEvent *) event; Display *dpy = event->display; XkbMapChangesRec changes; XkbInfoPtr xkbi; /* always do this for input methods, which still use the old keymap */ (void) _XRefreshKeyboardMapping(event); if (_XkbUnavailable(dpy)) return 1; xkbi = dpy->xkb_info; if (((event->type & 0x7f) - xkbi->codes->first_event) == XkbEventCode) return XkbRefreshKeyboardMapping(&xkbevent->map); if (xkbi->flags & XkbXlibNewKeyboard) { _XkbReloadDpy(dpy); return 1; } if ((xkbi->flags & XkbMapPending) || (event->request == MappingKeyboard)) { if (xkbi->flags & XkbMapPending) { changes = xkbi->changes; _XkbNoteCoreMapChanges(&changes, event, XKB_XLIB_MAP_MASK); } else { bzero(&changes, sizeof(changes)); changes.changed = XkbKeySymsMask; if (xkbi->desc->min_key_code < xkbi->desc->max_key_code) { changes.first_key_sym = xkbi->desc->min_key_code; changes.num_key_syms = xkbi->desc->max_key_code - xkbi->desc->min_key_code + 1; } else { changes.first_key_sym = event->first_keycode; changes.num_key_syms = event->count; } } if (XkbGetMapChanges(dpy, xkbi->desc, &changes) != Success) { #ifdef DEBUG fprintf(stderr, "Internal Error! XkbGetMapChanges failed:\n"); if (changes.changed & XkbKeyTypesMask) { int first = changes.first_type; int last = changes.first_type + changes.num_types - 1; fprintf(stderr, " types: %d..%d\n", first, last); } if (changes.changed & XkbKeySymsMask) { int first = changes.first_key_sym; int last = changes.first_key_sym + changes.num_key_syms - 1; fprintf(stderr, " symbols: %d..%d\n", first, last); } if (changes.changed & XkbKeyActionsMask) { int first = changes.first_key_act; int last = changes.first_key_act + changes.num_key_acts - 1; fprintf(stderr, " acts: %d..%d\n", first, last); } if (changes.changed & XkbKeyBehaviorsMask) { int first = changes.first_key_behavior; int last = first + changes.num_key_behaviors - 1; fprintf(stderr, " behaviors: %d..%d\n", first, last); } if (changes.changed & XkbVirtualModsMask) { fprintf(stderr, "virtual mods: 0x%04x\n", changes.vmods); } if (changes.changed & XkbExplicitComponentsMask) { int first = changes.first_key_explicit; int last = first + changes.num_key_explicit - 1; fprintf(stderr, " explicit: %d..%d\n", first, last); } #endif } LockDisplay(dpy); if (xkbi->flags & XkbMapPending) { xkbi->flags &= ~XkbMapPending; bzero(&xkbi->changes, sizeof(XkbMapChangesRec)); } UnlockDisplay(dpy); } if (event->request == MappingModifier) { LockDisplay(dpy); if (xkbi->desc->map->modmap) { _XkbFree(xkbi->desc->map->modmap); xkbi->desc->map->modmap = NULL; } if (dpy->key_bindings) { register struct _XKeytrans *p; for (p = dpy->key_bindings; p; p = p->next) { register int i; p->state = 0; if (p->mlen > 0) { for (i = 0; i < p->mlen; i++) { p->state |= XkbKeysymToModifiers(dpy, p->modifiers[i]); } if (p->state) p->state &= AllMods; else p->state = AnyModifier; } } } UnlockDisplay(dpy); } return 1; } static int _XkbLoadDpy(Display *dpy) { XkbInfoPtr xkbi; unsigned query, oldEvents; XkbDescRec *desc; if (!XkbUseExtension(dpy, NULL, NULL)) return 0; xkbi = dpy->xkb_info; query = XkbAllClientInfoMask; desc = XkbGetMap(dpy, query, XkbUseCoreKbd); if (!desc) { #ifdef DEBUG fprintf(stderr, "Warning! XkbGetMap failed!\n"); #endif return 0; } LockDisplay(dpy); xkbi->desc = desc; UnlockDisplay(dpy); oldEvents = xkbi->selected_events; if (!(xkbi->xlib_ctrls & XkbLC_IgnoreNewKeyboards)) { XkbSelectEventDetails(dpy, xkbi->desc->device_spec, XkbNewKeyboardNotify, XkbNKN_KeycodesMask | XkbNKN_DeviceIDMask, XkbNKN_KeycodesMask | XkbNKN_DeviceIDMask); } XkbSelectEventDetails(dpy, xkbi->desc->device_spec, XkbMapNotify, XkbAllClientInfoMask, XkbAllClientInfoMask); LockDisplay(dpy); xkbi->selected_events = oldEvents; UnlockDisplay(dpy); return 1; } void _XkbReloadDpy(Display *dpy) { XkbInfoPtr xkbi; XkbDescRec *desc; unsigned oldDeviceID; if (_XkbUnavailable(dpy)) return; xkbi = dpy->xkb_info; LockDisplay(dpy); if (xkbi->desc) { oldDeviceID = xkbi->desc->device_spec; XkbFreeKeyboard(xkbi->desc, XkbAllComponentsMask, True); xkbi->desc = NULL; xkbi->flags &= ~(XkbMapPending | XkbXlibNewKeyboard); xkbi->changes.changed = 0; } else oldDeviceID = XkbUseCoreKbd; UnlockDisplay(dpy); desc = XkbGetMap(dpy, XkbAllClientInfoMask, XkbUseCoreKbd); if (!desc) return; LockDisplay(dpy); xkbi->desc = desc; UnlockDisplay(dpy); if (desc->device_spec != oldDeviceID) { /* transfer(?) event masks here */ #ifdef NOTYET unsigned oldEvents; oldEvents = xkbi->selected_events; XkbSelectEventDetails(dpy, xkbi->desc->device_spec, XkbMapNotify, XkbAllMapComponentsMask, XkbAllClientInfoMask); LockDisplay(dpy); xkbi->selected_events = oldEvents; UnlockDisplay(dpy); #endif } return; } int XkbTranslateKeySym(register Display *dpy, register KeySym *sym_rtrn, unsigned int mods, char *buffer, int nbytes, int *extra_rtrn) { register XkbInfoPtr xkb; XkbKSToMBFunc cvtr; XPointer priv; char tmp[4]; int n; xkb = dpy->xkb_info; if (!xkb->cvt.KSToMB) { _XkbGetConverters(_XkbGetCharset(), &xkb->cvt); _XkbGetConverters("ISO8859-1", &xkb->latin1cvt); } if (extra_rtrn) *extra_rtrn = 0; if ((buffer == NULL) || (nbytes == 0)) { buffer = tmp; nbytes = 4; } /* see if symbol rebound, if so, return that string. */ n = XkbLookupKeyBinding(dpy, *sym_rtrn, mods, buffer, nbytes, extra_rtrn); if (n) return n; if (nbytes > 0) buffer[0] = '\0'; if (xkb->cvt.KSToUpper && (mods & LockMask)) { *sym_rtrn = (*xkb->cvt.KSToUpper) (*sym_rtrn); } if (xkb->xlib_ctrls & XkbLC_ForceLatin1Lookup) { cvtr = xkb->latin1cvt.KSToMB; priv = xkb->latin1cvt.KSToMBPriv; } else { cvtr = xkb->cvt.KSToMB; priv = xkb->cvt.KSToMBPriv; } n = (*cvtr) (priv, *sym_rtrn, buffer, nbytes, extra_rtrn); if ((!xkb->cvt.KSToUpper) && (mods & LockMask)) { register int i; int change; for (i = change = 0; i < n; i++) { char ch = toupper(buffer[i]); change = (change || (buffer[i] != ch)); buffer[i] = ch; } if (change) { if (n == 1) *sym_rtrn = (*xkb->cvt.MBToKS) (xkb->cvt.MBToKSPriv, buffer, n, NULL); else *sym_rtrn = NoSymbol; } } if (mods & ControlMask) { if (n == 1) { buffer[0] = XkbToControl(buffer[0]); if (nbytes > 1) buffer[1] = '\0'; return 1; } if (nbytes > 0) buffer[0] = '\0'; return 0; } return n; } int XLookupString(register XKeyEvent *event, char *buffer, int nbytes, KeySym *keysym, XComposeStatus *status) { KeySym dummy; int rtrnLen; unsigned int new_mods; Display *dpy = event->display; if (keysym == NULL) keysym = &dummy; if (!XkbLookupKeySym(dpy, event->keycode, event->state, &new_mods, keysym)) return 0; new_mods = (event->state & (~new_mods)); /* find the group where a symbol can be converted to control one */ if (new_mods & ControlMask && *keysym > 0x7F && (dpy->xkb_info->xlib_ctrls & XkbLC_ControlFallback)) { XKeyEvent tmp_ev = *event; KeySym tmp_keysym; unsigned int tmp_new_mods; if (_XkbUnavailable(dpy)) { tmp_ev.state = event->state ^ dpy->mode_switch; if (XkbLookupKeySym(dpy, tmp_ev.keycode, tmp_ev.state, &tmp_new_mods, &tmp_keysym) && tmp_keysym != NoSymbol && tmp_keysym < 0x80) { *keysym = tmp_keysym; } } else { int n = XkbKeyNumGroups(dpy->xkb_info->desc, tmp_ev.keycode); int i; for (i = 0; i < n; i++) { if (XkbGroupForCoreState(event->state) == i) continue; tmp_ev.state = XkbBuildCoreState(tmp_ev.state, i); if (XkbLookupKeySym(dpy, tmp_ev.keycode, tmp_ev.state, &tmp_new_mods, &tmp_keysym) && tmp_keysym != NoSymbol && tmp_keysym < 0x80) { *keysym = tmp_keysym; new_mods = (event->state & (~tmp_new_mods)); break; } } } } /* We *should* use the new_mods (which does not contain any modifiers */ /* that were used to compute the symbol here, but pre-XKB XLookupString */ /* did not and we have to remain compatible. Sigh. */ if (_XkbUnavailable(dpy) || (dpy->xkb_info->xlib_ctrls & XkbLC_ConsumeLookupMods) == 0) new_mods = event->state; rtrnLen = XkbLookupKeyBinding(dpy, *keysym, new_mods, buffer, nbytes, NULL); if (rtrnLen > 0) return rtrnLen; return XkbTranslateKeySym(dpy, keysym, new_mods, buffer, nbytes, NULL); } int XkbLookupKeyBinding(Display *dpy, register KeySym sym, unsigned int mods, char *buffer, int nbytes, int *extra_rtrn) { register struct _XKeytrans *p; if (extra_rtrn) *extra_rtrn = 0; for (p = dpy->key_bindings; p; p = p->next) { if (((mods & AllMods) == p->state) && (sym == p->key)) { int tmp = p->len; if (tmp > nbytes) { if (extra_rtrn) *extra_rtrn = (tmp - nbytes); tmp = nbytes; } memcpy(buffer, p->string, tmp); if (tmp < nbytes) buffer[tmp] = '\0'; return tmp; } } return 0; } char XkbToControl(char ch) { register char c = ch; if ((c >= '@' && c < '\177') || c == ' ') c &= 0x1F; else if (c == '2') c = '\000'; else if (c >= '3' && c <= '7') c -= ('3' - '\033'); else if (c == '8') c = '\177'; else if (c == '/') c = '_' & 0x1F; return c; } ) { int first = changes.first_type; int last = changes.first_type + changes.num_types - 1; fprintf(stderr, " types: %d..%d\n", first, last); } if (changes.changed & XkbKeySymsMask) { int first = changes.first_key_sym; int last = changes.first_key_sym + changes.num_key_syms - 1; libX11-1.6.3/src/xkb/XKBCompat.c000064401431060000012000000173371247741723500164000ustar00alancstaff00002660200006/************************************************************ Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Silicon Graphics not be used in advertising or publicity pertaining to distribution of the software without specific prior written permission. Silicon Graphics makes no representation about the suitability of this software for any purpose. It is provided "as is" without any express or implied warranty. SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ********************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #define NEED_MAP_READERS #include "Xlibint.h" #include #include "XKBlibint.h" Status _XkbReadGetCompatMapReply(Display *dpy, xkbGetCompatMapReply *rep, XkbDescPtr xkb, int *nread_rtrn) { register int i; XkbReadBufferRec buf; if (!_XkbInitReadBuffer(dpy, &buf, (int) rep->length * 4)) return BadAlloc; if (nread_rtrn) *nread_rtrn = (int) rep->length * 4; i = rep->firstSI + rep->nSI; if ((!xkb->compat) && (XkbAllocCompatMap(xkb, XkbAllCompatMask, i) != Success)) return BadAlloc; if (rep->nSI != 0) { XkbSymInterpretRec *syms; xkbSymInterpretWireDesc *wire; wire = (xkbSymInterpretWireDesc *) _XkbGetReadBufferPtr(&buf, rep->nSI * SIZEOF (xkbSymInterpretWireDesc)); if (wire == NULL) goto BAILOUT; syms = &xkb->compat->sym_interpret[rep->firstSI]; for (i = 0; i < rep->nSI; i++, syms++, wire++) { syms->sym = wire->sym; syms->mods = wire->mods; syms->match = wire->match; syms->virtual_mod = wire->virtualMod; syms->flags = wire->flags; syms->act = *((XkbAnyAction *) &wire->act); } xkb->compat->num_si += rep->nSI; } if (rep->groups & XkbAllGroupsMask) { register unsigned bit, nGroups; xkbModsWireDesc *wire; for (i = 0, nGroups = 0, bit = 1; i < XkbNumKbdGroups; i++, bit <<= 1) { if (rep->groups & bit) nGroups++; } wire = (xkbModsWireDesc *) _XkbGetReadBufferPtr(&buf, nGroups * SIZEOF(xkbModsWireDesc)); if (wire == NULL) goto BAILOUT; for (i = 0, bit = 1; i < XkbNumKbdGroups; i++, bit <<= 1) { if ((rep->groups & bit) == 0) continue; xkb->compat->groups[i].mask = wire->mask; xkb->compat->groups[i].real_mods = wire->realMods; xkb->compat->groups[i].vmods = wire->virtualMods; wire++; } } i = _XkbFreeReadBuffer(&buf); if (i) fprintf(stderr, "CompatMapReply! Bad length (%d extra bytes)\n", i); if (i || buf.error) return BadLength; return Success; BAILOUT: _XkbFreeReadBuffer(&buf); return BadLength; } Status XkbGetCompatMap(Display *dpy, unsigned which, XkbDescPtr xkb) { register xkbGetCompatMapReq *req; xkbGetCompatMapReply rep; Status status; XkbInfoPtr xkbi; if ((!dpy) || (!xkb) || (dpy->flags & XlibDisplayNoXkb) || ((xkb->dpy != NULL) && (xkb->dpy != dpy)) || (!dpy->xkb_info && (!XkbUseExtension(dpy, NULL, NULL)))) return BadAccess; LockDisplay(dpy); xkbi = dpy->xkb_info; GetReq(kbGetCompatMap, req); req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbGetCompatMap; req->deviceSpec = xkb->device_spec; if (which & XkbSymInterpMask) req->getAllSI = True; else req->getAllSI = False; req->firstSI = req->nSI = 0; if (which & XkbGroupCompatMask) req->groups = XkbAllGroupsMask; else req->groups = 0; if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) { UnlockDisplay(dpy); SyncHandle(); return BadLength; } if (xkb->dpy == NULL) xkb->dpy = dpy; if (xkb->device_spec == XkbUseCoreKbd) xkb->device_spec = rep.deviceID; status = _XkbReadGetCompatMapReply(dpy, &rep, xkb, NULL); UnlockDisplay(dpy); SyncHandle(); return status; } static Bool _XkbWriteSetCompatMap(Display *dpy, xkbSetCompatMapReq *req, XkbDescPtr xkb) { CARD16 firstSI; CARD16 nSI; int size; register int i, nGroups; register unsigned bit; unsigned groups; char *buf; firstSI = req->firstSI; nSI = req->nSI; size = nSI * SIZEOF(xkbSymInterpretWireDesc); nGroups = 0; groups = req->groups; if (groups & XkbAllGroupsMask) { for (i = 0, bit = 1; i < XkbNumKbdGroups; i++, bit <<= 1) { if (groups & bit) nGroups++; } size += SIZEOF(xkbModsWireDesc) * nGroups; } req->length += size / 4; BufAlloc(char *, buf, size); if (!buf) return False; if (nSI) { XkbSymInterpretPtr sym = &xkb->compat->sym_interpret[firstSI]; xkbSymInterpretWireDesc *wire = (xkbSymInterpretWireDesc *) buf; for (i = 0; i < nSI; i++, wire++, sym++) { wire->sym = (CARD32) sym->sym; wire->mods = sym->mods; wire->match = sym->match; wire->flags = sym->flags; wire->virtualMod = sym->virtual_mod; memcpy(&wire->act, &sym->act, sz_xkbActionWireDesc); } buf += nSI * SIZEOF(xkbSymInterpretWireDesc); } if (groups & XkbAllGroupsMask) { xkbModsWireDesc *out = (xkbModsWireDesc *) buf; for (i = 0, bit = 1; i < XkbNumKbdGroups; i++, bit <<= 1) { if ((groups & bit) != 0) { out->mask = xkb->compat->groups[i].mask; out->realMods = xkb->compat->groups[i].real_mods; out->virtualMods = xkb->compat->groups[i].vmods; out++; } } buf += nGroups * SIZEOF(xkbModsWireDesc); } return True; } Bool XkbSetCompatMap(Display *dpy, unsigned which, XkbDescPtr xkb, Bool updateActions) { register xkbSetCompatMapReq *req; Status ok; XkbInfoPtr xkbi; if ((dpy->flags & XlibDisplayNoXkb) || (dpy != xkb->dpy) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return False; if ((!xkb->compat) || ((which & XkbSymInterpMask) && (!xkb->compat->sym_interpret))) return False; LockDisplay(dpy); xkbi = dpy->xkb_info; GetReq(kbSetCompatMap, req); req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbSetCompatMap; req->deviceSpec = xkb->device_spec; req->recomputeActions = updateActions; if (which & XkbSymInterpMask) { req->truncateSI = True; req->firstSI = 0; req->nSI = xkb->compat->num_si; } else { req->truncateSI = False; req->firstSI = 0; req->nSI = 0; } if (which & XkbGroupCompatMask) req->groups = XkbAllGroupsMask; else req->groups = 0; ok = _XkbWriteSetCompatMap(dpy, req, xkb); UnlockDisplay(dpy); SyncHandle(); return ok; } at->groups[i].mask = wire->mask; xkb->compat->groups[i].real_mods = wire->realMods; xkb->compat->groups[i].vmods = wire->virtualMods; wire++; } } i = _XkbFreeReadBuffer(&buf); if (i) fprintf(stderr, "CompatMapReply! Bad lengtlibX11-1.6.3/src/xkb/XKBSetMap.c000064401431060000012000000454221247741723500163420ustar00alancstaff00002660200006/************************************************************ Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Silicon Graphics not be used in advertising or publicity pertaining to distribution of the software without specific prior written permission. Silicon Graphics makes no representation about the suitability of this software for any purpose. It is provided "as is" without any express or implied warranty. SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ********************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #include "Xlibint.h" #include #include "XKBlibint.h" static int _XkbSizeKeyTypes(XkbDescPtr xkb, xkbSetMapReq *req) { XkbKeyTypePtr map; int i, len; if (((req->present & XkbKeyTypesMask) == 0) || (req->nTypes == 0)) { req->present &= ~XkbKeyTypesMask; req->firstType = req->nTypes = 0; return 0; } len = 0; map = &xkb->map->types[req->firstType]; for (i = 0; i < req->nTypes; i++, map++) { len += SIZEOF(xkbKeyTypeWireDesc); len += map->map_count * SIZEOF(xkbKTSetMapEntryWireDesc); if (map->preserve) len += map->map_count * SIZEOF(xkbModsWireDesc); } return len; } static void _XkbWriteKeyTypes(Display *dpy, XkbDescPtr xkb, xkbSetMapReq *req) { char *buf; XkbKeyTypePtr type; int i, n; xkbKeyTypeWireDesc *desc; if ((req->present & XkbKeyTypesMask) == 0) return; type = &xkb->map->types[req->firstType]; for (i = 0; i < req->nTypes; i++, type++) { int sz = SIZEOF(xkbKeyTypeWireDesc); sz += type->map_count * SIZEOF(xkbKTSetMapEntryWireDesc); if (type->preserve) sz += type->map_count * SIZEOF(xkbModsWireDesc); BufAlloc(xkbKeyTypeWireDesc *, desc, sz); desc->mask = type->mods.mask; desc->realMods = type->mods.real_mods; desc->virtualMods = type->mods.vmods; desc->numLevels = type->num_levels; desc->nMapEntries = type->map_count; desc->preserve = (type->preserve != NULL); buf = (char *) &desc[1]; if (desc->nMapEntries > 0) { xkbKTSetMapEntryWireDesc *wire = (xkbKTSetMapEntryWireDesc *) buf; for (n = 0; n < type->map_count; n++, wire++) { wire->level = type->map[n].level; wire->realMods = type->map[n].mods.real_mods; wire->virtualMods = type->map[n].mods.vmods; } buf = (char *) wire; if (type->preserve) { xkbModsWireDesc *pwire = (xkbModsWireDesc *) buf; for (n = 0; n < type->map_count; n++, pwire++) { pwire->realMods = type->preserve[n].real_mods; pwire->virtualMods = type->preserve[n].vmods; } } } } return; } static int _XkbSizeKeySyms(XkbDescPtr xkb, xkbSetMapReq *req) { int i, len; unsigned nSyms; if (((req->present & XkbKeySymsMask) == 0) || (req->nKeySyms == 0)) { req->present &= ~XkbKeySymsMask; req->firstKeySym = req->nKeySyms = 0; req->totalSyms = 0; return 0; } len = (int) (req->nKeySyms * sizeof(XkbSymMapRec)); for (i = nSyms = 0; i < req->nKeySyms; i++) { nSyms += XkbKeyNumSyms(xkb, i + req->firstKeySym); } len += nSyms * sizeof(CARD32); req->totalSyms = nSyms; return len; } static void _XkbWriteKeySyms(Display *dpy, XkbDescPtr xkb, xkbSetMapReq *req) { register KeySym *pSym; CARD32 *outSym; XkbSymMapPtr symMap; xkbSymMapWireDesc *desc; register int i; if ((req->present & XkbKeySymsMask) == 0) return; symMap = &xkb->map->key_sym_map[req->firstKeySym]; for (i = 0; i < req->nKeySyms; i++, symMap++) { BufAlloc(xkbSymMapWireDesc *, desc, SIZEOF(xkbSymMapWireDesc) + (XkbKeyNumSyms(xkb, i + req->firstKeySym) * sizeof(CARD32))); desc->ktIndex[0] = symMap->kt_index[0]; desc->ktIndex[1] = symMap->kt_index[1]; desc->ktIndex[2] = symMap->kt_index[2]; desc->ktIndex[3] = symMap->kt_index[3]; desc->groupInfo = symMap->group_info; desc->width = symMap->width; desc->nSyms = XkbKeyNumSyms(xkb, i + req->firstKeySym); outSym = (CARD32 *) &desc[1]; if (desc->nSyms > 0) { pSym = XkbKeySymsPtr(xkb, i + req->firstKeySym); _XkbWriteCopyKeySyms(pSym, outSym, desc->nSyms); } } return; } static int _XkbSizeKeyActions(XkbDescPtr xkb, xkbSetMapReq *req) { int i, len, nActs; if (((req->present & XkbKeyActionsMask) == 0) || (req->nKeyActs == 0)) { req->present &= ~XkbKeyActionsMask; req->firstKeyAct = req->nKeyActs = 0; req->totalActs = 0; return 0; } for (nActs = i = 0; i < req->nKeyActs; i++) { if (xkb->server->key_acts[i + req->firstKeyAct] != 0) nActs += XkbKeyNumActions(xkb, i + req->firstKeyAct); } len = XkbPaddedSize(req->nKeyActs) + (nActs * SIZEOF(xkbActionWireDesc)); req->totalActs = nActs; return len; } static void _XkbWriteKeyActions(Display *dpy, XkbDescPtr xkb, xkbSetMapReq *req) { register int i; int n; CARD8 *numDesc; XkbAction *actDesc; if ((req->present & XkbKeyActionsMask) == 0) return; n = XkbPaddedSize(req->nKeyActs); n += (req->totalActs * SIZEOF(xkbActionWireDesc)); BufAlloc(CARD8 *, numDesc, n); for (i = 0; i < req->nKeyActs; i++) { if (xkb->server->key_acts[i + req->firstKeyAct] == 0) numDesc[i] = 0; else numDesc[i] = XkbKeyNumActions(xkb, (i + req->firstKeyAct)); } actDesc = (XkbAction *) &numDesc[XkbPaddedSize(req->nKeyActs)]; for (i = 0; i < req->nKeyActs; i++) { if (xkb->server->key_acts[i + req->firstKeyAct] != 0) { n = XkbKeyNumActions(xkb, (i + req->firstKeyAct)); memcpy(actDesc, XkbKeyActionsPtr(xkb, (i + req->firstKeyAct)), n * SIZEOF(xkbActionWireDesc)); actDesc += n; } } return; } static int _XkbSizeKeyBehaviors(XkbDescPtr xkb, xkbSetMapReq *req) { register int i, first, last, nFound; if (((req->present & XkbKeyBehaviorsMask) == 0) || (req->nKeyBehaviors < 1)) { req->present &= ~XkbKeyBehaviorsMask; req->firstKeyBehavior = req->nKeyBehaviors = 0; req->totalKeyBehaviors = 0; return 0; } first = req->firstKeyBehavior; last = first + req->nKeyBehaviors - 1; for (i = first, nFound = 0; i <= last; i++) { if (xkb->server->behaviors[i].type != XkbKB_Default) nFound++; } req->totalKeyBehaviors = nFound; return (nFound * SIZEOF(xkbBehaviorWireDesc)); } static void _XkbWriteKeyBehaviors(Display *dpy, XkbDescPtr xkb, xkbSetMapReq *req) { register int i, first, last; xkbBehaviorWireDesc *wire; char *buf; if ((req->present & XkbKeyBehaviorsMask) == 0) return; first = req->firstKeyBehavior; last = first + req->nKeyBehaviors - 1; i = req->totalKeyBehaviors * SIZEOF(xkbBehaviorWireDesc); BufAlloc(char *, buf, i); wire = (xkbBehaviorWireDesc *) buf; for (i = first; i <= last; i++) { if (xkb->server->behaviors[i].type != XkbKB_Default) { wire->key = i; wire->type = xkb->server->behaviors[i].type; wire->data = xkb->server->behaviors[i].data; buf += SIZEOF(xkbBehaviorWireDesc); wire = (xkbBehaviorWireDesc *) buf; } } return; } static unsigned _XkbSizeVirtualMods(xkbSetMapReq *req) { register int i, bit, nMods; if (((req->present & XkbVirtualModsMask) == 0) || (req->virtualMods == 0)) { req->present &= ~XkbVirtualModsMask; req->virtualMods = 0; return 0; } for (i = nMods = 0, bit = 1; i < XkbNumVirtualMods; i++, bit <<= 1) { if (req->virtualMods & bit) nMods++; } return XkbPaddedSize(nMods); } static void _XkbWriteVirtualMods(Display *dpy, XkbDescPtr xkb, xkbSetMapReq *req, unsigned size) { register int i, bit; CARD8 *vmods; /* This was req->present&XkbVirtualModsMask==0, and '==' beats '&' */ if (((req->present & XkbVirtualModsMask) == 0) || (size < 1)) return; BufAlloc(CARD8 *, vmods, size); for (i = 0, bit = 1; i < XkbNumVirtualMods; i++, bit <<= 1) { if (req->virtualMods & bit) *vmods++ = xkb->server->vmods[i]; } return; } static int _XkbSizeKeyExplicit(XkbDescPtr xkb, xkbSetMapReq *req) { register int i, first, last, nFound; if (((req->present & XkbExplicitComponentsMask) == 0) || (req->nKeyExplicit == 0)) { req->present &= ~XkbExplicitComponentsMask; req->firstKeyExplicit = req->nKeyExplicit = 0; req->totalKeyExplicit = 0; return 0; } first = req->firstKeyExplicit; last = first + req->nKeyExplicit - 1; for (i = first, nFound = 0; i <= last; i++) { if (xkb->server->explicit[i] != 0) nFound++; } req->totalKeyExplicit = nFound; return XkbPaddedSize((nFound * 2)); } static void _XkbWriteKeyExplicit(Display *dpy, XkbDescPtr xkb, xkbSetMapReq *req) { register int i, first, last; CARD8 *wire; if ((req->present & XkbExplicitComponentsMask) == 0) return; first = req->firstKeyExplicit; last = first + req->nKeyExplicit - 1; i = XkbPaddedSize((req->totalKeyExplicit * 2)); BufAlloc(CARD8 *, wire, i); for (i = first; i <= last; i++) { if (xkb->server->explicit[i] != 0) { wire[0] = i; wire[1] = xkb->server->explicit[i]; wire += 2; } } return; } static int _XkbSizeModifierMap(XkbDescPtr xkb, xkbSetMapReq *req) { register int i, first, last, nFound; if (((req->present & XkbModifierMapMask) == 0) || (req->nModMapKeys == 0)) { req->present &= ~XkbModifierMapMask; req->firstModMapKey = req->nModMapKeys = 0; req->totalModMapKeys = 0; return 0; } first = req->firstModMapKey; last = first + req->nModMapKeys - 1; for (i = first, nFound = 0; i <= last; i++) { if (xkb->map->modmap[i] != 0) nFound++; } req->totalModMapKeys = nFound; return XkbPaddedSize((nFound * 2)); } static void _XkbWriteModifierMap(Display *dpy, XkbDescPtr xkb, xkbSetMapReq *req) { register int i, first, last; CARD8 *wire; if ((req->present & XkbModifierMapMask) == 0) return; first = req->firstModMapKey; last = first + req->nModMapKeys - 1; if (req->totalModMapKeys > 0) { i = XkbPaddedSize((req->totalModMapKeys * 2)); BufAlloc(CARD8 *, wire, i); for (i = first; i <= last; i++) { if (xkb->map->modmap[i] != 0) { wire[0] = i; wire[1] = xkb->map->modmap[i]; wire += 2; } } } return; } static int _XkbSizeVirtualModMap(XkbDescPtr xkb, xkbSetMapReq *req) { register int i, first, last, nFound; if (((req->present & XkbVirtualModMapMask) == 0) || (req->nVModMapKeys == 0)) { req->present &= ~XkbVirtualModMapMask; req->firstVModMapKey = req->nVModMapKeys = 0; req->totalVModMapKeys = 0; return 0; } first = req->firstVModMapKey; last = first + req->nVModMapKeys - 1; for (i = first, nFound = 0; i <= last; i++) { if (xkb->server->vmodmap[i] != 0) nFound++; } req->totalVModMapKeys = nFound; return nFound * SIZEOF(xkbVModMapWireDesc); } static void _XkbWriteVirtualModMap(Display *dpy, XkbDescPtr xkb, xkbSetMapReq *req) { register int i, first, last; xkbVModMapWireDesc *wire; if ((req->present & XkbVirtualModMapMask) == 0) return; first = req->firstVModMapKey; last = first + req->nVModMapKeys - 1; if (req->totalVModMapKeys > 0) { i = req->totalVModMapKeys * SIZEOF(xkbVModMapWireDesc); BufAlloc(xkbVModMapWireDesc *, wire, i); for (i = first; i <= last; i++) { if (xkb->server->vmodmap[i] != 0) { wire->key = i; wire->vmods = xkb->server->vmodmap[i]; wire++; } } } return; } static void SendSetMap(Display *dpy, XkbDescPtr xkb, xkbSetMapReq *req) { xkbSetMapReq tmp; unsigned szMods; req->length += _XkbSizeKeyTypes(xkb, req) / 4; req->length += _XkbSizeKeySyms(xkb, req) / 4; req->length += _XkbSizeKeyActions(xkb, req) / 4; req->length += _XkbSizeKeyBehaviors(xkb, req) / 4; szMods = _XkbSizeVirtualMods(req); req->length += szMods / 4; req->length += _XkbSizeKeyExplicit(xkb, req) / 4; req->length += _XkbSizeModifierMap(xkb, req) / 4; req->length += _XkbSizeVirtualModMap(xkb, req) / 4; tmp = *req; if (tmp.nTypes > 0) _XkbWriteKeyTypes(dpy, xkb, &tmp); if (tmp.nKeySyms > 0) _XkbWriteKeySyms(dpy, xkb, &tmp); if (tmp.nKeyActs) _XkbWriteKeyActions(dpy, xkb, &tmp); if (tmp.totalKeyBehaviors > 0) _XkbWriteKeyBehaviors(dpy, xkb, &tmp); if (tmp.virtualMods) _XkbWriteVirtualMods(dpy, xkb, &tmp, szMods); if (tmp.totalKeyExplicit > 0) _XkbWriteKeyExplicit(dpy, xkb, &tmp); if (tmp.totalModMapKeys > 0) _XkbWriteModifierMap(dpy, xkb, &tmp); if (tmp.totalVModMapKeys > 0) _XkbWriteVirtualModMap(dpy, xkb, &tmp); return; } Bool XkbSetMap(Display *dpy, unsigned which, XkbDescPtr xkb) { register xkbSetMapReq *req; XkbInfoPtr xkbi; XkbServerMapPtr srv; XkbClientMapPtr map; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL)) || (!xkb)) return False; map = xkb->map; srv = xkb->server; if (((which & XkbKeyTypesMask) && ((!map) || (!map->types))) || ((which & XkbKeySymsMask) && ((!map) || (!map->syms) || (!map->key_sym_map))) || ((which & XkbKeyActionsMask) && ((!srv) || (!srv->key_acts))) || ((which & XkbKeyBehaviorsMask) && ((!srv) || (!srv->behaviors))) || ((which & XkbVirtualModsMask) && (!srv)) || ((which & XkbExplicitComponentsMask) && ((!srv) || (!srv->explicit))) || ((which & XkbModifierMapMask) && ((!map) || (!map->modmap))) || ((which & XkbVirtualModMapMask) && ((!srv) || (!srv->vmodmap)))) return False; LockDisplay(dpy); xkbi = dpy->xkb_info; GetReq(kbSetMap, req); req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbSetMap; req->deviceSpec = xkb->device_spec; req->present = which; req->flags = XkbSetMapAllFlags; req->minKeyCode = xkb->min_key_code; req->maxKeyCode = xkb->max_key_code; req->firstType = 0; if (which & XkbKeyTypesMask) req->nTypes = map->num_types; else req->nTypes = 0; if (which & XkbKeySymsMask) { req->firstKeySym = xkb->min_key_code; req->nKeySyms = XkbNumKeys(xkb); } if (which & XkbKeyActionsMask) { req->firstKeyAct = xkb->min_key_code; req->nKeyActs = XkbNumKeys(xkb); } if (which & XkbKeyBehaviorsMask) { req->firstKeyBehavior = xkb->min_key_code; req->nKeyBehaviors = XkbNumKeys(xkb); } if (which & XkbVirtualModsMask) req->virtualMods = ~0; if (which & XkbExplicitComponentsMask) { req->firstKeyExplicit = xkb->min_key_code; req->nKeyExplicit = XkbNumKeys(xkb); } if (which & XkbModifierMapMask) { req->firstModMapKey = xkb->min_key_code; req->nModMapKeys = XkbNumKeys(xkb); } if (which & XkbVirtualModMapMask) { req->firstVModMapKey = xkb->min_key_code; req->nVModMapKeys = XkbNumKeys(xkb); } SendSetMap(dpy, xkb, req); UnlockDisplay(dpy); SyncHandle(); return True; } Bool XkbChangeMap(Display *dpy, XkbDescPtr xkb, XkbMapChangesPtr changes) { register xkbSetMapReq *req; XkbInfoPtr xkbi; XkbServerMapPtr srv; XkbClientMapPtr map; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL)) || (!xkb) || (!changes)) return False; srv = xkb->server; map = xkb->map; if (((changes->changed & XkbKeyTypesMask) && ((!map) || (!map->types))) || ((changes->changed & XkbKeySymsMask) && ((!map) || (!map->syms) || (!map->key_sym_map))) || ((changes->changed & XkbKeyActionsMask) && ((!srv) || (!srv->key_acts))) || ((changes->changed & XkbKeyBehaviorsMask) && ((!srv) || (!srv->behaviors))) || ((changes->changed & XkbVirtualModsMask) && (!srv)) || ((changes->changed & XkbExplicitComponentsMask) && ((!srv) || (!srv->explicit))) || ((changes->changed & XkbModifierMapMask) && ((!map) || (!map->modmap))) || ((changes->changed & XkbVirtualModMapMask) && ((!srv) || (!srv->vmodmap)))) return False; LockDisplay(dpy); xkbi = dpy->xkb_info; GetReq(kbSetMap, req); req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbSetMap; req->deviceSpec = xkb->device_spec; req->present = changes->changed; req->flags = XkbSetMapRecomputeActions; req->minKeyCode = xkb->min_key_code; req->maxKeyCode = xkb->max_key_code; req->firstType = changes->first_type; req->nTypes = changes->num_types; req->firstKeySym = changes->first_key_sym; req->nKeySyms = changes->num_key_syms; req->firstKeyAct = changes->first_key_act; req->nKeyActs = changes->num_key_acts; req->firstKeyBehavior = changes->first_key_behavior; req->nKeyBehaviors = changes->num_key_behaviors; req->virtualMods = changes->vmods; req->firstKeyExplicit = changes->first_key_explicit; req->nKeyExplicit = changes->num_key_explicit; req->firstModMapKey = changes->first_modmap_key; req->nModMapKeys = changes->num_modmap_keys; req->firstVModMapKey = changes->first_vmodmap_key; req->nVModMapKeys = changes->num_vmodmap_keys; SendSetMap(dpy, xkb, req); UnlockDisplay(dpy); SyncHandle(); return True; } xkbSetMapReq *req, unsigned size) { register int i, bit; CARD8 *vmods; /* This was req->present&XkbVirtualModsMask==0, and '==' beats '&' */ if (((req->present & XkbVirtualModsMask) == 0) || libX11-1.6.3/src/xkb/XKBSetGeom.c000064401431060000012000000354331247741723500165150ustar00alancstaff00002660200006/************************************************************ Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Silicon Graphics not be used in advertising or publicity pertaining to distribution of the software without specific prior written permission. Silicon Graphics makes no representation about the suitability of this software for any purpose. It is provided "as is" without any express or implied warranty. SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ********************************************************/ #ifdef DEBUG #ifdef HAVE_CONFIG_H #include #endif #include #endif #include "Xlibint.h" #include "XKBlibint.h" #include #include #ifndef MINSHORT #define MINSHORT -32768 #endif #ifndef MAXSHORT #define MAXSHORT 32767 #endif /***====================================================================***/ #define _SizeCountedString(s) ((s)?XkbPaddedSize(2+strlen(s)):4) static char * _WriteCountedString(char *wire, char *str) { CARD16 len, *pLen; len = (str ? strlen(str) : 0); pLen = (CARD16 *) wire; *pLen = len; if (len && str) memcpy(&wire[2], str, len); wire += XkbPaddedSize(len + 2); return wire; } static int _SizeGeomProperties(XkbGeometryPtr geom) { register int i, size; XkbPropertyPtr prop; for (size = i = 0, prop = geom->properties; i < geom->num_properties; i++, prop++) { size += _SizeCountedString(prop->name); size += _SizeCountedString(prop->value); } return size; } static int _SizeGeomColors(XkbGeometryPtr geom) { register int i, size; register XkbColorPtr color; for (i = size = 0, color = geom->colors; i < geom->num_colors; i++, color++) { size += _SizeCountedString(color->spec); } return size; } static int _SizeGeomShapes(XkbGeometryPtr geom) { register int i, size; register XkbShapePtr shape; for (i = size = 0, shape = geom->shapes; i < geom->num_shapes; i++, shape++) { register int n; register XkbOutlinePtr ol; size += SIZEOF(xkbShapeWireDesc); for (n = 0, ol = shape->outlines; n < shape->num_outlines; n++, ol++) { size += SIZEOF(xkbOutlineWireDesc); size += ol->num_points * SIZEOF(xkbPointWireDesc); } } return size; } static int _SizeGeomDoodads(int num_doodads, XkbDoodadPtr doodad) { register int i, size; for (i = size = 0; i < num_doodads; i++, doodad++) { size += SIZEOF(xkbAnyDoodadWireDesc); if (doodad->any.type == XkbTextDoodad) { size += _SizeCountedString(doodad->text.text); size += _SizeCountedString(doodad->text.font); } else if (doodad->any.type == XkbLogoDoodad) { size += _SizeCountedString(doodad->logo.logo_name); } } return size; } static int _SizeGeomSections(XkbGeometryPtr geom) { register int i, size; XkbSectionPtr section; for (i = size = 0, section = geom->sections; i < geom->num_sections; i++, section++) { size += SIZEOF(xkbSectionWireDesc); if (section->rows) { int r; XkbRowPtr row; for (r = 0, row = section->rows; r < section->num_rows; row++, r++) { size += SIZEOF(xkbRowWireDesc); size += row->num_keys * SIZEOF(xkbKeyWireDesc); } } if (section->doodads) size += _SizeGeomDoodads(section->num_doodads, section->doodads); if (section->overlays) { int o; XkbOverlayPtr ol; for (o = 0, ol = section->overlays; o < section->num_overlays; o++, ol++) { int r; XkbOverlayRowPtr row; size += SIZEOF(xkbOverlayWireDesc); for (r = 0, row = ol->rows; r < ol->num_rows; r++, row++) { size += SIZEOF(xkbOverlayRowWireDesc); size += row->num_keys * SIZEOF(xkbOverlayKeyWireDesc); } } } } return size; } static int _SizeGeomKeyAliases(XkbGeometryPtr geom) { return geom->num_key_aliases * (2 * XkbKeyNameLength); } /***====================================================================***/ static char * _WriteGeomProperties(char *wire, XkbGeometryPtr geom) { register int i; register XkbPropertyPtr prop; for (i = 0, prop = geom->properties; i < geom->num_properties; i++, prop++) { wire = _WriteCountedString(wire, prop->name); wire = _WriteCountedString(wire, prop->value); } return wire; } static char * _WriteGeomColors(char *wire, XkbGeometryPtr geom) { register int i; register XkbColorPtr color; for (i = 0, color = geom->colors; i < geom->num_colors; i++, color++) { wire = _WriteCountedString(wire, color->spec); } return wire; } static char * _WriteGeomShapes(char *wire, XkbGeometryPtr geom) { int i; XkbShapePtr shape; xkbShapeWireDesc *shapeWire; for (i = 0, shape = geom->shapes; i < geom->num_shapes; i++, shape++) { register int o; XkbOutlinePtr ol; xkbOutlineWireDesc *olWire; shapeWire = (xkbShapeWireDesc *) wire; shapeWire->name = shape->name; shapeWire->nOutlines = shape->num_outlines; if (shape->primary != NULL) shapeWire->primaryNdx = XkbOutlineIndex(shape, shape->primary); else shapeWire->primaryNdx = XkbNoShape; if (shape->approx != NULL) shapeWire->approxNdx = XkbOutlineIndex(shape, shape->approx); else shapeWire->approxNdx = XkbNoShape; wire = (char *) &shapeWire[1]; for (o = 0, ol = shape->outlines; o < shape->num_outlines; o++, ol++) { register int p; XkbPointPtr pt; xkbPointWireDesc *ptWire; olWire = (xkbOutlineWireDesc *) wire; olWire->nPoints = ol->num_points; olWire->cornerRadius = ol->corner_radius; wire = (char *) &olWire[1]; ptWire = (xkbPointWireDesc *) wire; for (p = 0, pt = ol->points; p < ol->num_points; p++, pt++) { ptWire[p].x = pt->x; ptWire[p].y = pt->y; } wire = (char *) &ptWire[ol->num_points]; } } return wire; } static char * _WriteGeomDoodads(char *wire, int num_doodads, XkbDoodadPtr doodad) { register int i; for (i = 0; i < num_doodads; i++, doodad++) { xkbDoodadWireDesc *doodadWire = (xkbDoodadWireDesc *) wire; wire = (char *) &doodadWire[1]; bzero(doodadWire, SIZEOF(xkbDoodadWireDesc)); doodadWire->any.name = doodad->any.name; doodadWire->any.type = doodad->any.type; doodadWire->any.priority = doodad->any.priority; doodadWire->any.top = doodad->any.top; doodadWire->any.left = doodad->any.left; doodadWire->any.angle = doodad->any.angle; switch (doodad->any.type) { case XkbOutlineDoodad: case XkbSolidDoodad: doodadWire->shape.colorNdx = doodad->shape.color_ndx; doodadWire->shape.shapeNdx = doodad->shape.shape_ndx; break; case XkbTextDoodad: doodadWire->text.width = doodad->text.width; doodadWire->text.height = doodad->text.height; doodadWire->text.colorNdx = doodad->text.color_ndx; wire = _WriteCountedString(wire, doodad->text.text); wire = _WriteCountedString(wire, doodad->text.font); break; case XkbIndicatorDoodad: doodadWire->indicator.shapeNdx = doodad->indicator.shape_ndx; doodadWire->indicator.onColorNdx = doodad->indicator.on_color_ndx; doodadWire->indicator.offColorNdx = doodad->indicator.off_color_ndx; break; case XkbLogoDoodad: doodadWire->logo.colorNdx = doodad->logo.color_ndx; doodadWire->logo.shapeNdx = doodad->logo.shape_ndx; wire = _WriteCountedString(wire, doodad->logo.logo_name); break; default: break; } } return wire; } static char * _WriteGeomOverlay(char *wire, XkbOverlayPtr ol) { register int r; XkbOverlayRowPtr row; xkbOverlayWireDesc *olWire = (xkbOverlayWireDesc *) wire; olWire->name = ol->name; olWire->nRows = ol->num_rows; wire = (char *) &olWire[1]; for (r = 0, row = ol->rows; r < ol->num_rows; r++, row++) { unsigned int k; XkbOverlayKeyPtr key; xkbOverlayRowWireDesc *rowWire = (xkbOverlayRowWireDesc *) wire; rowWire->rowUnder = row->row_under; rowWire->nKeys = row->num_keys; wire = (char *) &rowWire[1]; for (k = 0, key = row->keys; k < row->num_keys; k++, key++) { xkbOverlayKeyWireDesc *keyWire = (xkbOverlayKeyWireDesc *) wire; memcpy(keyWire->over, key->over.name, XkbKeyNameLength); memcpy(keyWire->under, key->under.name, XkbKeyNameLength); wire = (char *) &keyWire[1]; } } return wire; } static char * _WriteGeomSections(char *wire, XkbGeometryPtr geom) { register int i; XkbSectionPtr section; for (i = 0, section = geom->sections; i < geom->num_sections; i++, section++) { xkbSectionWireDesc *sectionWire = (xkbSectionWireDesc *) wire; sectionWire->name = section->name; sectionWire->top = section->top; sectionWire->left = section->left; sectionWire->width = section->width; sectionWire->height = section->height; sectionWire->angle = section->angle; sectionWire->priority = section->priority; sectionWire->nRows = section->num_rows; sectionWire->nDoodads = section->num_doodads; sectionWire->nOverlays = section->num_overlays; sectionWire->pad = 0; wire = (char *) §ionWire[1]; if (section->rows) { int r; XkbRowPtr row; for (r = 0, row = section->rows; r < section->num_rows; r++, row++) { xkbRowWireDesc *rowWire = (xkbRowWireDesc *) wire; rowWire->top = row->top; rowWire->left = row->left; rowWire->nKeys = row->num_keys; rowWire->vertical = row->vertical; rowWire->pad = 0; wire = (char *) &rowWire[1]; if (row->keys) { int k; XkbKeyPtr key; xkbKeyWireDesc *keyWire = (xkbKeyWireDesc *) wire; for (k = 0, key = row->keys; k < row->num_keys; k++, key++) { memcpy(keyWire[k].name, key->name.name, XkbKeyNameLength); keyWire[k].gap = key->gap; keyWire[k].shapeNdx = key->shape_ndx; keyWire[k].colorNdx = key->color_ndx; } wire = (char *) &keyWire[row->num_keys]; } } } if (section->doodads) { wire = _WriteGeomDoodads(wire, section->num_doodads, section->doodads); } if (section->overlays) { register int o; for (o = 0; o < section->num_overlays; o++) { wire = _WriteGeomOverlay(wire, §ion->overlays[o]); } } } return wire; } static char * _WriteGeomKeyAliases(char *wire, XkbGeometryPtr geom) { register int sz; sz = geom->num_key_aliases * (XkbKeyNameLength * 2); if (sz > 0) { memcpy(wire, (char *) geom->key_aliases, sz); wire += sz; } return wire; } /***====================================================================***/ static Status _SendSetGeometry(Display *dpy, XkbGeometryPtr geom, xkbSetGeometryReq *req) { int sz; char *wire, *tbuf; sz = 0; sz += _SizeCountedString(geom->label_font); sz += _SizeGeomProperties(geom); sz += _SizeGeomColors(geom); sz += _SizeGeomShapes(geom); sz += _SizeGeomSections(geom); sz += _SizeGeomDoodads(geom->num_doodads, geom->doodads); sz += _SizeGeomKeyAliases(geom); req->length += (sz / 4); if (sz < (dpy->bufmax - dpy->buffer)) { BufAlloc(char *, wire, sz); tbuf = NULL; } else { tbuf = _XAllocTemp(dpy, sz); if (!tbuf) return BadAlloc; wire = tbuf; } wire = _WriteCountedString(wire, geom->label_font); if (geom->num_properties > 0) wire = _WriteGeomProperties(wire, geom); if (geom->num_colors > 0) wire = _WriteGeomColors(wire, geom); if (geom->num_shapes > 0) wire = _WriteGeomShapes(wire, geom); if (geom->num_sections > 0) wire = _WriteGeomSections(wire, geom); if (geom->num_doodads > 0) wire = _WriteGeomDoodads(wire, geom->num_doodads, geom->doodads); if (geom->num_key_aliases > 0) wire = _WriteGeomKeyAliases(wire, geom); if (tbuf != NULL) { Data(dpy, tbuf, sz); _XFreeTemp(dpy, tbuf, sz); } return Success; } /***====================================================================***/ Status XkbSetGeometry(Display *dpy, unsigned deviceSpec, XkbGeometryPtr geom) { xkbSetGeometryReq *req; Status ret; if ((!geom) || (dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return BadAccess; LockDisplay(dpy); GetReq(kbSetGeometry, req); req->reqType = dpy->xkb_info->codes->major_opcode; req->xkbReqType = X_kbSetGeometry; req->deviceSpec = deviceSpec; req->nShapes = geom->num_shapes; req->nSections = geom->num_sections; req->name = geom->name; req->widthMM = geom->width_mm; req->heightMM = geom->height_mm; req->nProperties = geom->num_properties; req->nColors = geom->num_colors; req->nDoodads = geom->num_doodads; req->nKeyAliases = geom->num_key_aliases; req->baseColorNdx = (geom->base_color - geom->colors); req->labelColorNdx = (geom->label_color - geom->colors); ret = _SendSetGeometry(dpy, geom, req); UnlockDisplay(dpy); SyncHandle(); return ret; } libX11-1.6.3/src/xkb/XKBleds.c000064401431060000012000000257371247741723500161070ustar00alancstaff00002660200006/************************************************************ Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Silicon Graphics not be used in advertising or publicity pertaining to distribution of the software without specific prior written permission. Silicon Graphics makes no representation about the suitability of this software for any purpose. It is provided "as is" without any express or implied warranty. SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ********************************************************/ #define NEED_MAP_READERS #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include #include "XKBlibint.h" Status XkbGetIndicatorState(Display *dpy, unsigned deviceSpec, unsigned *pStateRtrn) { register xkbGetIndicatorStateReq *req; xkbGetIndicatorStateReply rep; XkbInfoPtr xkbi; Bool ok; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return BadAccess; LockDisplay(dpy); xkbi = dpy->xkb_info; GetReq(kbGetIndicatorState, req); req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbGetIndicatorState; req->deviceSpec = deviceSpec; ok = _XReply(dpy, (xReply *) &rep, 0, xFalse); if (ok && (pStateRtrn != NULL)) *pStateRtrn = rep.state; UnlockDisplay(dpy); SyncHandle(); return (ok ? Success : BadImplementation); } Status _XkbReadGetIndicatorMapReply(Display *dpy, xkbGetIndicatorMapReply *rep, XkbDescPtr xkb, int *nread_rtrn) { XkbIndicatorPtr leds; XkbReadBufferRec buf; if ((!xkb->indicators) && (XkbAllocIndicatorMaps(xkb) != Success)) return BadAlloc; leds = xkb->indicators; leds->phys_indicators = rep->realIndicators; if (rep->length > 0) { register int left; if (!_XkbInitReadBuffer(dpy, &buf, (int) rep->length * 4)) return BadAlloc; if (nread_rtrn) *nread_rtrn = (int) rep->length * 4; if (rep->which) { register int i, bit; left = (int) rep->which; for (i = 0, bit = 1; (i < XkbNumIndicators) && (left); i++, bit <<= 1) { if (left & bit) { xkbIndicatorMapWireDesc *wire; wire = (xkbIndicatorMapWireDesc *) _XkbGetReadBufferPtr(&buf, SIZEOF(xkbIndicatorMapWireDesc)); if (wire == NULL) { _XkbFreeReadBuffer(&buf); return BadAlloc; } leds->maps[i].flags = wire->flags; leds->maps[i].which_groups = wire->whichGroups; leds->maps[i].groups = wire->groups; leds->maps[i].which_mods = wire->whichMods; leds->maps[i].mods.mask = wire->mods; leds->maps[i].mods.real_mods = wire->realMods; leds->maps[i].mods.vmods = wire->virtualMods; leds->maps[i].ctrls = wire->ctrls; left &= ~bit; } } } left = _XkbFreeReadBuffer(&buf); } return Success; } Bool XkbGetIndicatorMap(Display *dpy, unsigned long which, XkbDescPtr xkb) { register xkbGetIndicatorMapReq *req; xkbGetIndicatorMapReply rep; XkbInfoPtr xkbi; Status status; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return BadAccess; if ((!which) || (!xkb)) return BadValue; LockDisplay(dpy); xkbi = dpy->xkb_info; if (!xkb->indicators) { xkb->indicators = _XkbTypedCalloc(1, XkbIndicatorRec); if (!xkb->indicators) { UnlockDisplay(dpy); SyncHandle(); return BadAlloc; } } GetReq(kbGetIndicatorMap, req); req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbGetIndicatorMap; req->deviceSpec = xkb->device_spec; req->which = (CARD32) which; if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) { UnlockDisplay(dpy); SyncHandle(); return BadValue; } status = _XkbReadGetIndicatorMapReply(dpy, &rep, xkb, NULL); UnlockDisplay(dpy); SyncHandle(); return status; } Bool XkbSetIndicatorMap(Display *dpy, unsigned long which, XkbDescPtr xkb) { register xkbSetIndicatorMapReq *req; register int i, bit; int nMaps; xkbIndicatorMapWireDesc *wire; XkbInfoPtr xkbi; if ((dpy->flags & XlibDisplayNoXkb) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return False; if ((!xkb) || (!which) || (!xkb->indicators)) return False; LockDisplay(dpy); xkbi = dpy->xkb_info; GetReq(kbSetIndicatorMap, req); req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbSetIndicatorMap; req->deviceSpec = xkb->device_spec; req->which = (CARD32) which; for (i = nMaps = 0, bit = 1; i < 32; i++, bit <<= 1) { if (which & bit) nMaps++; } req->length += (nMaps * sizeof(XkbIndicatorMapRec)) / 4; BufAlloc(xkbIndicatorMapWireDesc *, wire, (nMaps * SIZEOF(xkbIndicatorMapWireDesc))); for (i = 0, bit = 1; i < 32; i++, bit <<= 1) { if (which & bit) { wire->flags = xkb->indicators->maps[i].flags; wire->whichGroups = xkb->indicators->maps[i].which_groups; wire->groups = xkb->indicators->maps[i].groups; wire->whichMods = xkb->indicators->maps[i].which_mods; wire->mods = xkb->indicators->maps[i].mods.real_mods; wire->virtualMods = xkb->indicators->maps[i].mods.vmods; wire->ctrls = xkb->indicators->maps[i].ctrls; wire++; } } UnlockDisplay(dpy); SyncHandle(); return True; } Bool XkbGetNamedDeviceIndicator(Display *dpy, unsigned device, unsigned class, unsigned id, Atom name, int *pNdxRtrn, Bool *pStateRtrn, XkbIndicatorMapPtr pMapRtrn, Bool *pRealRtrn) { register xkbGetNamedIndicatorReq *req; xkbGetNamedIndicatorReply rep; XkbInfoPtr xkbi; if ((dpy->flags & XlibDisplayNoXkb) || (name == None) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return False; LockDisplay(dpy); xkbi = dpy->xkb_info; GetReq(kbGetNamedIndicator, req); req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbGetNamedIndicator; req->deviceSpec = device; req->ledClass = class; req->ledID = id; req->indicator = (CARD32) name; if (!_XReply(dpy, (xReply *) &rep, 0, xFalse)) { UnlockDisplay(dpy); SyncHandle(); return False; } UnlockDisplay(dpy); SyncHandle(); if ((!rep.found) || (!rep.supported)) return False; if (pNdxRtrn != NULL) *pNdxRtrn = rep.ndx; if (pStateRtrn != NULL) *pStateRtrn = rep.on; if (pMapRtrn != NULL) { pMapRtrn->flags = rep.flags; pMapRtrn->which_groups = rep.whichGroups; pMapRtrn->groups = rep.groups; pMapRtrn->which_mods = rep.whichMods; pMapRtrn->mods.mask = rep.mods; pMapRtrn->mods.real_mods = rep.realMods; pMapRtrn->mods.vmods = rep.virtualMods; pMapRtrn->ctrls = rep.ctrls; } if (pRealRtrn != NULL) *pRealRtrn = rep.realIndicator; return True; } Bool XkbGetNamedIndicator(Display *dpy, Atom name, int *pNdxRtrn, Bool *pStateRtrn, XkbIndicatorMapPtr pMapRtrn, Bool *pRealRtrn) { return XkbGetNamedDeviceIndicator(dpy, XkbUseCoreKbd, XkbDfltXIClass, XkbDfltXIId, name, pNdxRtrn, pStateRtrn, pMapRtrn, pRealRtrn); } Bool XkbSetNamedDeviceIndicator(Display *dpy, unsigned device, unsigned class, unsigned id, Atom name, Bool changeState, Bool state, Bool createNewMap, XkbIndicatorMapPtr pMap) { register xkbSetNamedIndicatorReq *req; XkbInfoPtr xkbi; if ((dpy->flags & XlibDisplayNoXkb) || (name == None) || (!dpy->xkb_info && !XkbUseExtension(dpy, NULL, NULL))) return False; LockDisplay(dpy); xkbi = dpy->xkb_info; GetReq(kbSetNamedIndicator, req); req->reqType = xkbi->codes->major_opcode; req->xkbReqType = X_kbSetNamedIndicator; req->deviceSpec = device; req->ledClass = class; req->ledID = id; req->indicator = (CARD32) name; req->setState = changeState; if (req->setState) req->on = state; else req->on = False; if (pMap != NULL) { req->setMap = True; req->createMap = createNewMap; req->flags = pMap->flags; req->whichGroups = pMap->which_groups; req->groups = pMap->groups; req->whichMods = pMap->which_mods; req->realMods = pMap->mods.real_mods; req->virtualMods = pMap->mods.vmods; req->ctrls = pMap->ctrls; } else { req->setMap = False; req->createMap = False; req->flags = 0; req->whichGroups = 0; req->groups = 0; req->whichMods = 0; req->realMods = 0; req->virtualMods = 0; req->ctrls = 0; } UnlockDisplay(dpy); SyncHandle(); return True; } Bool XkbSetNamedIndicator(Display *dpy, Atom name, Bool changeState, Bool state, Bool createNewMap, XkbIndicatorMapPtr pMap) { return XkbSetNamedDeviceIndicator(dpy, XkbUseCoreKbd, XkbDfltXIClass, XkbDfltXIId, name, changeState, state, createNewMap, pMap); } libX11-1.6.3/src/AllPlanes.c000064401431060000012000000041261247741723500156670ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" Status XAllocColorPlanes( register Display *dpy, Colormap cmap, Bool contig, unsigned long *pixels, /* LISTofCARD32 */ /* RETURN */ int ncolors, int nreds, int ngreens, int nblues, unsigned long *rmask, unsigned long *gmask, unsigned long *bmask) /* CARD32 */ /* RETURN */ { xAllocColorPlanesReply rep; Status status; register xAllocColorPlanesReq *req; LockDisplay(dpy); GetReq(AllocColorPlanes,req); req->cmap = cmap; req->colors = ncolors; req->red = nreds; req->green = ngreens; req->blue = nblues; req->contiguous = contig; status = _XReply(dpy, (xReply *)&rep, 0, xFalse); if (status) { *rmask = rep.redMask; *gmask = rep.greenMask; *bmask = rep.blueMask; /* sizeof(CARD32) = 4 */ _XRead32 (dpy, (long *) pixels, (long)(ncolors * 4)); } UnlockDisplay(dpy); SyncHandle(); return(status); } libX11-1.6.3/src/LiHosts.c000064401431060000012000000121161247741723500153770ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group All rights reserved. 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, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, provided that the above copyright notice(s) and this permission notice appear in all copies of the Software and that both the above copyright notice(s) and this permission notice appear in supporting documentation. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization of the copyright holder. X Window System is a trademark of The Open Group. */ /* * Copyright 2004 Oracle and/or its affiliates. All rights reserved. * * 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: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. */ /* This can really be considered an os dependent routine */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include /* * can be freed using XFree. */ XHostAddress *XListHosts ( register Display *dpy, int *nhosts, /* RETURN */ Bool *enabled) /* RETURN */ { register XHostAddress *outbuf = NULL, *op; xListHostsReply reply; unsigned char *buf, *bp; register unsigned i; register xListHostsReq *req; XServerInterpretedAddress *sip; *nhosts = 0; LockDisplay(dpy); GetReq (ListHosts, req); if (!_XReply (dpy, (xReply *) &reply, 0, xFalse)) { UnlockDisplay(dpy); SyncHandle(); return (XHostAddress *) NULL; } if (reply.nHosts) { unsigned long nbytes = reply.length << 2; /* number of bytes in reply */ const unsigned long max_hosts = INT_MAX / (sizeof(XHostAddress) + sizeof(XServerInterpretedAddress)); if (reply.nHosts < max_hosts) { unsigned long hostbytes = reply.nHosts * (sizeof(XHostAddress) + sizeof(XServerInterpretedAddress)); if (reply.length < (INT_MAX >> 2) && (hostbytes >> 2) < ((INT_MAX >> 2) - reply.length)) outbuf = Xmalloc(nbytes + hostbytes); } if (! outbuf) { _XEatDataWords(dpy, reply.length); UnlockDisplay(dpy); SyncHandle(); return (XHostAddress *) NULL; } op = outbuf; sip = (XServerInterpretedAddress *) (((unsigned char *) outbuf) + (reply.nHosts * sizeof(XHostAddress))); bp = buf = ((unsigned char *) sip) + (reply.nHosts * sizeof(XServerInterpretedAddress)); _XRead (dpy, (char *) buf, nbytes); for (i = 0; i < reply.nHosts; i++) { op->family = ((xHostEntry *) bp)->family; op->length =((xHostEntry *) bp)->length; if (op->family == FamilyServerInterpreted) { char *tp = (char *) (bp + SIZEOF(xHostEntry)); char *vp = memchr(tp, 0, op->length); if (vp != NULL) { sip->type = tp; sip->typelength = vp - tp; sip->value = vp + 1; sip->valuelength = op->length - (sip->typelength + 1); } else { sip->type = sip->value = NULL; sip->typelength = sip->valuelength = 0; } op->address = (char *) sip; sip++; } else { op->address = (char *) (bp + SIZEOF(xHostEntry)); } bp += SIZEOF(xHostEntry) + (((op->length + 3) >> 2) << 2); op++; } } *enabled = reply.enabled; *nhosts = reply.nHosts; UnlockDisplay(dpy); SyncHandle(); return (outbuf); } libX11-1.6.3/src/FillArc.c000064401431060000012000000046271247741723500153360ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" /* precompute the maximum size of batching request allowed */ #define size (SIZEOF(xPolyFillArcReq) + FARCSPERBATCH * SIZEOF(xArc)) int XFillArc( register Display *dpy, Drawable d, GC gc, int x, int y, /* INT16 */ unsigned int width, unsigned int height, /* CARD16 */ int angle1, int angle2) /* INT16 */ { xArc *arc; LockDisplay(dpy); FlushGC(dpy, gc); { register xPolyFillArcReq *req = (xPolyFillArcReq *) dpy->last_req; /* if same as previous request, with same drawable, batch requests */ if ( (req->reqType == X_PolyFillArc) && (req->drawable == d) && (req->gc == gc->gid) && ((dpy->bufptr + SIZEOF(xArc)) <= dpy->bufmax) && (((char *)dpy->bufptr - (char *)req) < size) ) { req->length += SIZEOF(xArc) >> 2; arc = (xArc *) dpy->bufptr; dpy->bufptr += SIZEOF(xArc); } else { GetReqExtra(PolyFillArc, SIZEOF(xArc), req); req->drawable = d; req->gc = gc->gid; arc = (xArc *) NEXTPTR(req,xPolyFillArcReq); } arc->x = x; arc->y = y; arc->width = width; arc->height = height; arc->angle1 = angle1; arc->angle2 = angle2; } UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/UnldFont.c000064401431060000012000000026251247741723500155470ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XUnloadFont( register Display *dpy, Font font) { register xResourceReq *req; LockDisplay(dpy); GetResReq(CloseFont, font, req); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/UngrabSvr.c000064401431060000012000000026101247741723500157210ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XUngrabServer ( register Display *dpy) { register xReq *req; LockDisplay(dpy); GetEmptyReq(UngrabServer, req); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/ClearArea.c000064401431060000012000000031541247741723500156330ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XClearArea ( register Display *dpy, Window w, int x, int y, unsigned int width, unsigned int height, Bool exposures) { register xClearAreaReq *req; LockDisplay(dpy); GetReq(ClearArea, req); req->window = w; req->x = x; req->y = y; req->width = width; req->height = height; req->exposures = exposures; UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/SetBack.c000064401431060000012000000027551247741723500153360ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XSetBackground ( register Display *dpy, GC gc, unsigned long background) /* CARD32 */ { LockDisplay(dpy); if (gc->values.background != background) { gc->values.background = background; gc->dirty |= GCBackground; } UnlockDisplay(dpy); SyncHandle(); return 1; } "AS IS", WITHOUT WlibX11-1.6.3/src/DestWind.c000064401431060000012000000026151247741723500155360ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XDestroyWindow ( register Display *dpy, Window w) { register xResourceReq *req; LockDisplay(dpy); GetResReq(DestroyWindow, w, req); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/SetHints.c000064401431060000012000000213461247741723500155600ustar00alancstaff00002660200006 /*********************************************************** Copyright 1987, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #include #include "Xatomtype.h" #include #include #define safestrlen(s) ((s) ? strlen(s) : 0) int XSetSizeHints( /* old routine */ Display *dpy, Window w, XSizeHints *hints, Atom property) { xPropSizeHints prop; memset(&prop, 0, sizeof(prop)); prop.flags = (hints->flags & (USPosition|USSize|PAllHints)); if (hints->flags & (USPosition|PPosition)) { prop.x = hints->x; prop.y = hints->y; } if (hints->flags & (USSize|PSize)) { prop.width = hints->width; prop.height = hints->height; } if (hints->flags & PMinSize) { prop.minWidth = hints->min_width; prop.minHeight = hints->min_height; } if (hints->flags & PMaxSize) { prop.maxWidth = hints->max_width; prop.maxHeight = hints->max_height; } if (hints->flags & PResizeInc) { prop.widthInc = hints->width_inc; prop.heightInc = hints->height_inc; } if (hints->flags & PAspect) { prop.minAspectX = hints->min_aspect.x; prop.minAspectY = hints->min_aspect.y; prop.maxAspectX = hints->max_aspect.x; prop.maxAspectY = hints->max_aspect.y; } return XChangeProperty (dpy, w, property, XA_WM_SIZE_HINTS, 32, PropModeReplace, (unsigned char *) &prop, OldNumPropSizeElements); } /* * XSetWMHints sets the property * WM_HINTS type: WM_HINTS format:32 */ int XSetWMHints ( Display *dpy, Window w, XWMHints *wmhints) { xPropWMHints prop; memset(&prop, 0, sizeof(prop)); prop.flags = wmhints->flags; if (wmhints->flags & InputHint) prop.input = (wmhints->input == True ? 1 : 0); if (wmhints->flags & StateHint) prop.initialState = wmhints->initial_state; if (wmhints->flags & IconPixmapHint) prop.iconPixmap = wmhints->icon_pixmap; if (wmhints->flags & IconWindowHint) prop.iconWindow = wmhints->icon_window; if (wmhints->flags & IconPositionHint) { prop.iconX = wmhints->icon_x; prop.iconY = wmhints->icon_y; } if (wmhints->flags & IconMaskHint) prop.iconMask = wmhints->icon_mask; if (wmhints->flags & WindowGroupHint) prop.windowGroup = wmhints->window_group; return XChangeProperty (dpy, w, XA_WM_HINTS, XA_WM_HINTS, 32, PropModeReplace, (unsigned char *) &prop, NumPropWMHintsElements); } /* * XSetZoomHints sets the property * WM_ZOOM_HINTS type: WM_SIZE_HINTS format: 32 */ int XSetZoomHints ( Display *dpy, Window w, XSizeHints *zhints) { return XSetSizeHints (dpy, w, zhints, XA_WM_ZOOM_HINTS); } /* * XSetNormalHints sets the property * WM_NORMAL_HINTS type: WM_SIZE_HINTS format: 32 */ int XSetNormalHints ( /* old routine */ Display *dpy, Window w, XSizeHints *hints) { return XSetSizeHints (dpy, w, hints, XA_WM_NORMAL_HINTS); } /* * Note, the following is one of the few cases were we really do want sizeof * when examining a protocol structure. This is because the XChangeProperty * routine will take care of converting to host to network data structures. */ int XSetIconSizes ( Display *dpy, Window w, /* typically, root */ XIconSize *list, int count) /* number of items on the list */ { register int i; xPropIconSize *pp, *prop; #define size_of_the_real_thing sizeof /* avoid grepping screwups */ unsigned nbytes = count * size_of_the_real_thing(xPropIconSize); #undef size_of_the_real_thing if ((prop = pp = Xmalloc (nbytes))) { for (i = 0; i < count; i++) { pp->minWidth = list->min_width; pp->minHeight = list->min_height; pp->maxWidth = list->max_width; pp->maxHeight = list->max_height; pp->widthInc = list->width_inc; pp->heightInc = list->height_inc; pp += 1; list += 1; } XChangeProperty (dpy, w, XA_WM_ICON_SIZE, XA_WM_ICON_SIZE, 32, PropModeReplace, (unsigned char *) prop, count * NumPropIconSizeElements); Xfree (prop); } return 1; } int XSetCommand ( Display *dpy, Window w, char **argv, int argc) { register int i; register int nbytes; register char *buf, *bp; for (i = 0, nbytes = 0; i < argc; i++) { nbytes += safestrlen(argv[i]) + 1; } if ((bp = buf = Xmalloc(nbytes))) { /* copy arguments into single buffer */ for (i = 0; i < argc; i++) { if (argv[i]) { (void) strcpy(bp, argv[i]); bp += strlen(argv[i]) + 1; } else *bp++ = '\0'; } XChangeProperty (dpy, w, XA_WM_COMMAND, XA_STRING, 8, PropModeReplace, (unsigned char *)buf, nbytes); Xfree(buf); } return 1; } /* * XSetStandardProperties sets the following properties: * WM_NAME type: STRING format: 8 * WM_ICON_NAME type: STRING format: 8 * WM_HINTS type: WM_HINTS format: 32 * WM_COMMAND type: STRING * WM_NORMAL_HINTS type: WM_SIZE_HINTS format: 32 */ int XSetStandardProperties ( Display *dpy, Window w, /* window to decorate */ _Xconst char *name, /* name of application */ _Xconst char *icon_string,/* name string for icon */ Pixmap icon_pixmap, /* pixmap to use as icon, or None */ char **argv, /* command to be used to restart application */ int argc, /* count of arguments */ XSizeHints *hints) /* size hints for window in its normal state */ { XWMHints phints; phints.flags = 0; if (name != NULL) XStoreName (dpy, w, name); if (icon_string != NULL) { XChangeProperty (dpy, w, XA_WM_ICON_NAME, XA_STRING, 8, PropModeReplace, (_Xconst unsigned char *)icon_string, safestrlen(icon_string)); } if (icon_pixmap != None) { phints.icon_pixmap = icon_pixmap; phints.flags |= IconPixmapHint; } if (argv != NULL) XSetCommand(dpy, w, argv, argc); if (hints != NULL) XSetNormalHints(dpy, w, hints); if (phints.flags != 0) XSetWMHints(dpy, w, &phints); return 1; } int XSetTransientForHint( Display *dpy, Window w, Window propWindow) { return XChangeProperty(dpy, w, XA_WM_TRANSIENT_FOR, XA_WINDOW, 32, PropModeReplace, (unsigned char *) &propWindow, 1); } int XSetClassHint( Display *dpy, Window w, XClassHint *classhint) { char *class_string; char *s; int len_nm, len_cl; len_nm = safestrlen(classhint->res_name); len_cl = safestrlen(classhint->res_class); if ((class_string = s = Xmalloc(len_nm + len_cl + 2))) { if (len_nm) { strcpy(s, classhint->res_name); s += len_nm + 1; } else *s++ = '\0'; if (len_cl) strcpy(s, classhint->res_class); else *s = '\0'; XChangeProperty(dpy, w, XA_WM_CLASS, XA_STRING, 8, PropModeReplace, (unsigned char *) class_string, len_nm+len_cl+2); Xfree(class_string); } return 1; } sion. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OlibX11-1.6.3/src/DelProp.c000064401431060000012000000027471247741723500153700ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XDeleteProperty( register Display *dpy, Window window, Atom property) { register xDeletePropertyReq *req; LockDisplay(dpy); GetReq(DeleteProperty, req); req->window = window; req->property = property; UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/SetRGBCMap.c000064401431060000012000000061141247741723500156420ustar00alancstaff00002660200006/* Copyright 1989, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include "Xatomtype.h" #include void XSetRGBColormaps ( Display *dpy, Window w, XStandardColormap *cmaps, int count, Atom property) /* XA_RGB_BEST_MAP, etc. */ { register int i; /* iterator variable */ register xPropStandardColormap *map; /* tmp variable, data in prop */ register XStandardColormap *cmap; /* tmp variable, user data */ xPropStandardColormap *data, tmpdata; /* scratch data */ int mode = PropModeReplace; /* for partial writes */ Bool alloced_scratch_space; /* do we need to free? */ if (count < 1) return; /* * if doing more than one, allocate scratch space for it */ if ((count > 1) && ((data = ((xPropStandardColormap *) Xmalloc(count*sizeof(xPropStandardColormap)))) != NULL)) { alloced_scratch_space = True; } else { data = &tmpdata; alloced_scratch_space = False; } /* * Do the iteration. If using temp space put out each part of the prop; * otherwise, wait until the end and blast it all at once. */ for (i = count, map = data, cmap = cmaps; i > 0; i--, cmap++) { map->colormap = cmap->colormap; map->red_max = cmap->red_max; map->red_mult = cmap->red_mult; map->green_max = cmap->green_max; map->green_mult = cmap->green_mult; map->blue_max = cmap->blue_max; map->blue_mult = cmap->blue_mult; map->base_pixel = cmap->base_pixel; map->visualid = cmap->visualid; map->killid = cmap->killid; if (alloced_scratch_space) { map++; } else { XChangeProperty (dpy, w, property, XA_RGB_COLOR_MAP, 32, mode, (unsigned char *) data, NumPropStandardColormapElements); mode = PropModeAppend; } } if (alloced_scratch_space) { XChangeProperty (dpy, w, property, XA_RGB_COLOR_MAP, 32, PropModeReplace, (unsigned char *) data, (int) (count * NumPropStandardColormapElements)); Xfree (data); } } libX11-1.6.3/src/CopyCmap.c000064401431060000012000000034221247741723500155250ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #else #define XCMS 1 #endif #include "Xlibint.h" #if XCMS #include "Xcmsint.h" /* cmsCmap.c */ extern XcmsCmapRec * _XcmsCopyCmapRecAndFree(Display *dpy, Colormap src_cmap, Colormap copy_cmap); #endif Colormap XCopyColormapAndFree( register Display *dpy, Colormap src_cmap) { Colormap mid; register xCopyColormapAndFreeReq *req; LockDisplay(dpy); GetReq(CopyColormapAndFree, req); mid = req->mid = XAllocID(dpy); req->srcCmap = src_cmap; UnlockDisplay(dpy); SyncHandle(); #if XCMS _XcmsCopyCmapRecAndFree(dpy, src_cmap, mid); #endif return(mid); } ce and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WlibX11-1.6.3/src/MoveWin.c000064401431060000012000000031261247741723500153770ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XMoveWindow ( register Display *dpy, Window w, int x, int y) { register xConfigureWindowReq *req; LockDisplay(dpy); GetReqExtra(ConfigureWindow, 8, req); req->window = w; req->mask = CWX | CWY; { CARD32 *valuePtr = (CARD32 *) NEXTPTR(req,xConfigureWindowReq); *valuePtr++ = x; *valuePtr = y; } UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/SetTSOrig.c000064401431060000012000000030741247741723500156400ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XSetTSOrigin ( register Display *dpy, GC gc, int x, int y) { XGCValues *gv = &gc->values; LockDisplay(dpy); if (x != gv->ts_x_origin) { gv->ts_x_origin = x; gc->dirty |= GCTileStipXOrigin; } if (y != gv->ts_y_origin) { gv->ts_y_origin = y; gc->dirty |= GCTileStipYOrigin; } UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/Xintconn.h000064401431060000012000000003401247741723500156130ustar00alancstaff00002660200006 #ifndef _XINTCONN_H_ #define _XINTCONN_H_ 1 #include #include _XFUNCPROTOBEGIN /* OpenDis.c */ extern void _XFreeDisplayStructure(Display *dpy); _XFUNCPROTOEND #endif /* _XINTCONN_H_ */ libX11-1.6.3/src/Border.c000064401431060000012000000031151247741723500152260ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XSetWindowBorder( register Display *dpy, Window w, unsigned long pixel) { register xChangeWindowAttributesReq *req; LockDisplay(dpy); GetReqExtra (ChangeWindowAttributes, 4, req); req->window = w; req->valueMask = CWBorderPixel; OneDataCard32 (dpy, NEXTPTR(req,xChangeWindowAttributesReq), pixel); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/EvToWire.c000064401431060000012000000330441247741723500155210ustar00alancstaff00002660200006 /* Copyright 1985, 1986, 1987, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ /* * XEvToWire.c - Internal support routines for the C subroutine * interface library (Xlib) to the X Window System Protocol V11.0. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" /* * Reformat an XEvent structure to a wire event of the right type. * Return True on success. If the type is unrecognized, return what * _XUnknownNativeEvent returns (i.e., False). */ Status _XEventToWire( register Display *dpy, register XEvent *re, /* in: from */ register xEvent *event) /* out: to */ { switch (event->u.u.type = re->type) { case KeyPress: case KeyRelease: { register XKeyEvent *ev = (XKeyEvent*) re; event->u.keyButtonPointer.root = ev->root; event->u.keyButtonPointer.event = ev->window; event->u.keyButtonPointer.child = ev->subwindow; event->u.keyButtonPointer.time = ev->time; event->u.keyButtonPointer.eventX = ev->x ; event->u.keyButtonPointer.eventY = ev->y ; event->u.keyButtonPointer.rootX = ev->x_root; event->u.keyButtonPointer.rootY = ev->y_root; event->u.keyButtonPointer.state = ev->state; event->u.keyButtonPointer.sameScreen = ev->same_screen; event->u.u.detail = ev->keycode; } break; case ButtonPress: case ButtonRelease: { register XButtonEvent *ev = (XButtonEvent *) re; event->u.keyButtonPointer.root = ev->root; event->u.keyButtonPointer.event = ev->window; event->u.keyButtonPointer.child = ev->subwindow; event->u.keyButtonPointer.time = ev->time; event->u.keyButtonPointer.eventX = ev->x; event->u.keyButtonPointer.eventY = ev->y; event->u.keyButtonPointer.rootX = ev->x_root; event->u.keyButtonPointer.rootY = ev->y_root; event->u.keyButtonPointer.state = ev->state; event->u.keyButtonPointer.sameScreen = ev->same_screen; event->u.u.detail = ev->button; } break; case MotionNotify: { register XMotionEvent *ev = (XMotionEvent *)re; event->u.keyButtonPointer.root = ev->root; event->u.keyButtonPointer.event = ev->window; event->u.keyButtonPointer.child = ev->subwindow; event->u.keyButtonPointer.time = ev->time; event->u.keyButtonPointer.eventX= ev->x; event->u.keyButtonPointer.eventY= ev->y; event->u.keyButtonPointer.rootX = ev->x_root; event->u.keyButtonPointer.rootY = ev->y_root; event->u.keyButtonPointer.state = ev->state; event->u.keyButtonPointer.sameScreen= ev->same_screen; event->u.u.detail = ev->is_hint; } break; case EnterNotify: case LeaveNotify: { register XCrossingEvent *ev = (XCrossingEvent *) re; event->u.enterLeave.root = ev->root; event->u.enterLeave.event = ev->window; event->u.enterLeave.child = ev->subwindow; event->u.enterLeave.time = ev->time; event->u.enterLeave.eventX = ev->x; event->u.enterLeave.eventY = ev->y; event->u.enterLeave.rootX = ev->x_root; event->u.enterLeave.rootY = ev->y_root; event->u.enterLeave.state = ev->state; event->u.enterLeave.mode = ev->mode; event->u.enterLeave.flags = 0; if (ev->same_screen) { event->u.enterLeave.flags |= ELFlagSameScreen; } if (ev->focus) { event->u.enterLeave.flags |= ELFlagFocus; } event->u.u.detail = ev->detail; } break; case FocusIn: case FocusOut: { register XFocusChangeEvent *ev = (XFocusChangeEvent *) re; event->u.focus.window = ev->window; event->u.focus.mode = ev->mode; event->u.u.detail = ev->detail; } break; case KeymapNotify: { register XKeymapEvent *ev = (XKeymapEvent *) re; memcpy ((char *)(((xKeymapEvent *) event)->map), &ev->key_vector[1], sizeof (((xKeymapEvent *) event)->map)); } break; case Expose: { register XExposeEvent *ev = (XExposeEvent *) re; event->u.expose.window = ev->window; event->u.expose.x = ev->x; event->u.expose.y = ev->y; event->u.expose.width = ev->width; event->u.expose.height = ev->height; event->u.expose.count = ev->count; } break; case GraphicsExpose: { register XGraphicsExposeEvent *ev = (XGraphicsExposeEvent *) re; event->u.graphicsExposure.drawable = ev->drawable; event->u.graphicsExposure.x = ev->x; event->u.graphicsExposure.y = ev->y; event->u.graphicsExposure.width = ev->width; event->u.graphicsExposure.height = ev->height; event->u.graphicsExposure.count = ev->count; event->u.graphicsExposure.majorEvent= ev->major_code; event->u.graphicsExposure.minorEvent= ev->minor_code; } break; case NoExpose: { register XNoExposeEvent *ev = (XNoExposeEvent *) re; event->u.noExposure.drawable = ev->drawable; event->u.noExposure.majorEvent = ev->major_code; event->u.noExposure.minorEvent = ev->minor_code; } break; case VisibilityNotify: { register XVisibilityEvent *ev = (XVisibilityEvent *) re; event->u.visibility.window = ev->window; event->u.visibility.state = ev->state; } break; case CreateNotify: { register XCreateWindowEvent *ev = (XCreateWindowEvent *) re; event->u.createNotify.window = ev->window; event->u.createNotify.parent = ev->parent; event->u.createNotify.x = ev->x; event->u.createNotify.y = ev->y; event->u.createNotify.width = ev->width; event->u.createNotify.height = ev->height; event->u.createNotify.borderWidth = ev->border_width; event->u.createNotify.override = ev->override_redirect; } break; case DestroyNotify: { register XDestroyWindowEvent *ev = (XDestroyWindowEvent *) re; event->u.destroyNotify.window = ev->window; event->u.destroyNotify.event = ev->event; } break; case UnmapNotify: { register XUnmapEvent *ev = (XUnmapEvent *) re; event->u.unmapNotify.window = ev->window; event->u.unmapNotify.event = ev->event; event->u.unmapNotify.fromConfigure = ev->from_configure; } break; case MapNotify: { register XMapEvent *ev = (XMapEvent *) re; event->u.mapNotify.window = ev->window; event->u.mapNotify.event = ev->event; event->u.mapNotify.override = ev->override_redirect; } break; case MapRequest: { register XMapRequestEvent *ev = (XMapRequestEvent *) re; event->u.mapRequest.window = ev->window; event->u.mapRequest.parent = ev->parent; } break; case ReparentNotify: { register XReparentEvent *ev = (XReparentEvent *) re; event->u.reparent.window = ev->window; event->u.reparent.event = ev->event; event->u.reparent.parent = ev->parent; event->u.reparent.x = ev->x; event->u.reparent.y = ev->y; event->u.reparent.override = ev->override_redirect; } break; case ConfigureNotify: { register XConfigureEvent *ev = (XConfigureEvent *) re; event->u.configureNotify.window = ev->window; event->u.configureNotify.event = ev->event; event->u.configureNotify.aboveSibling = ev->above; event->u.configureNotify.x = ev->x; event->u.configureNotify.y = ev->y; event->u.configureNotify.width = ev->width; event->u.configureNotify.height = ev->height; event->u.configureNotify.borderWidth= ev->border_width; event->u.configureNotify.override = ev->override_redirect; } break; case ConfigureRequest: { register XConfigureRequestEvent *ev = (XConfigureRequestEvent *) re; event->u.configureRequest.window = ev->window; event->u.configureRequest.parent = ev->parent; event->u.configureRequest.sibling = ev->above; event->u.configureRequest.x = ev->x; event->u.configureRequest.y = ev->y; event->u.configureRequest.width = ev->width; event->u.configureRequest.height = ev->height; event->u.configureRequest.borderWidth= ev->border_width; event->u.configureRequest.valueMask= ev->value_mask; event->u.u.detail = ev->detail; } break; case GravityNotify: { register XGravityEvent *ev = (XGravityEvent *) re; event->u.gravity.window = ev->window; event->u.gravity.event = ev->event; event->u.gravity.x = ev->x; event->u.gravity.y = ev->y; } break; case ResizeRequest: { register XResizeRequestEvent *ev = (XResizeRequestEvent *) re; event->u.resizeRequest.window = ev->window; event->u.resizeRequest.width = ev->width; event->u.resizeRequest.height = ev->height; } break; case CirculateNotify: { register XCirculateEvent *ev = (XCirculateEvent *) re; event->u.circulate.window = ev->window; event->u.circulate.event = ev->event; event->u.circulate.place = ev->place; } break; case CirculateRequest: { register XCirculateRequestEvent *ev = (XCirculateRequestEvent *) re; event->u.circulate.window = ev->window; event->u.circulate.event = ev->parent; event->u.circulate.place = ev->place; } break; case PropertyNotify: { register XPropertyEvent *ev = (XPropertyEvent *) re; event->u.property.window = ev->window; event->u.property.atom = ev->atom; event->u.property.time = ev->time; event->u.property.state = ev->state; } break; case SelectionClear: { register XSelectionClearEvent *ev = (XSelectionClearEvent *) re; event->u.selectionClear.window = ev->window; event->u.selectionClear.atom = ev->selection; event->u.selectionClear.time = ev->time; } break; case SelectionRequest: { register XSelectionRequestEvent *ev = (XSelectionRequestEvent *) re; event->u.selectionRequest.owner = ev->owner; event->u.selectionRequest.requestor = ev->requestor; event->u.selectionRequest.selection = ev->selection; event->u.selectionRequest.target = ev->target; event->u.selectionRequest.property = ev->property; event->u.selectionRequest.time = ev->time; } break; case SelectionNotify: { register XSelectionEvent *ev = (XSelectionEvent *) re; event->u.selectionNotify.requestor = ev->requestor; event->u.selectionNotify.selection = ev->selection; event->u.selectionNotify.target = ev->target; event->u.selectionNotify.property = ev->property; event->u.selectionNotify.time = ev->time; } break; case ColormapNotify: { register XColormapEvent *ev = (XColormapEvent *) re; event->u.colormap.window = ev->window; event->u.colormap.colormap = ev->colormap; event->u.colormap.new = ev->new; event->u.colormap.state = ev->state; } break; case ClientMessage: { register int i; register XClientMessageEvent *ev = (XClientMessageEvent *) re; event->u.clientMessage.window = ev->window; event->u.u.detail = ev->format; switch (ev->format) { case 8: event->u.clientMessage.u.b.type = ev->message_type; for (i = 0; i < 20; i++) event->u.clientMessage.u.b.bytes[i] = ev->data.b[i]; break; case 16: event->u.clientMessage.u.s.type = ev->message_type; event->u.clientMessage.u.s.shorts0 = ev->data.s[0]; event->u.clientMessage.u.s.shorts1 = ev->data.s[1]; event->u.clientMessage.u.s.shorts2 = ev->data.s[2]; event->u.clientMessage.u.s.shorts3 = ev->data.s[3]; event->u.clientMessage.u.s.shorts4 = ev->data.s[4]; event->u.clientMessage.u.s.shorts5 = ev->data.s[5]; event->u.clientMessage.u.s.shorts6 = ev->data.s[6]; event->u.clientMessage.u.s.shorts7 = ev->data.s[7]; event->u.clientMessage.u.s.shorts8 = ev->data.s[8]; event->u.clientMessage.u.s.shorts9 = ev->data.s[9]; break; case 32: event->u.clientMessage.u.l.type = ev->message_type; event->u.clientMessage.u.l.longs0 = ev->data.l[0]; event->u.clientMessage.u.l.longs1 = ev->data.l[1]; event->u.clientMessage.u.l.longs2 = ev->data.l[2]; event->u.clientMessage.u.l.longs3 = ev->data.l[3]; event->u.clientMessage.u.l.longs4 = ev->data.l[4]; break; default: /* client passing bogus data, let server complain */ break; } } break; case MappingNotify: { register XMappingEvent *ev = (XMappingEvent *) re; event->u.mappingNotify.firstKeyCode = ev->first_keycode; event->u.mappingNotify.request = ev->request; event->u.mappingNotify.count = ev->count; } break; default: return(_XUnknownNativeEvent(dpy, re, event)); } return(1); } >same_screen; event->u.u.detail = ev->is_hint; } break; case EnterNotify: case LeaveNotify: { register XCrossingEvent *ev = (XCrossingEvent *) re; event->u.enterLeave.root = ev->root; event->u.enterLeave.event = ev->window; event->u.enterLeave.child = ev->subwindow; event->u.enterLeave.time = ev->time; event->u.enterLeave.eventX = ev->x; event->u.enterLeave.eventY = ev->y; event->u.enterLeave.rootX = ev->x_root; libX11-1.6.3/src/StBytes.c000064401431060000012000000056501247741723500154140ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include #include /* insulate predefined atom numbers from cut routines */ static const Atom n_to_atom[8] = { XA_CUT_BUFFER0, XA_CUT_BUFFER1, XA_CUT_BUFFER2, XA_CUT_BUFFER3, XA_CUT_BUFFER4, XA_CUT_BUFFER5, XA_CUT_BUFFER6, XA_CUT_BUFFER7}; int XRotateBuffers ( register Display *dpy, int rotate) { /* XRotateWindowProperties wants a non-const Atom*, but it doesn't * modify it, so this is safe. */ return XRotateWindowProperties(dpy, RootWindow(dpy, 0), (Atom *)n_to_atom, 8, rotate); } char *XFetchBuffer ( register Display *dpy, int *nbytes, register int buffer) { Atom actual_type; int actual_format; unsigned long nitems; unsigned long leftover; unsigned char *data; *nbytes = 0; if ((buffer < 0) || (buffer > 7)) return (NULL); /* XXX should be (sizeof (maxint) - 1)/4 */ if (XGetWindowProperty(dpy, RootWindow(dpy, 0), n_to_atom[buffer], 0L, 10000000L, False, XA_STRING, &actual_type, &actual_format, &nitems, &leftover, &data) != Success) { return (NULL); } if ( (actual_type == XA_STRING) && (actual_format != 32) ) { *nbytes = nitems; return((char *)data); } Xfree (data); return(NULL); } char *XFetchBytes ( register Display *dpy, int *nbytes) { return (XFetchBuffer (dpy, nbytes, 0)); } int XStoreBuffer ( register Display *dpy, _Xconst char *bytes, int nbytes, register int buffer) { if ((buffer < 0) || (buffer > 7)) return 0; return XChangeProperty(dpy, RootWindow(dpy, 0), n_to_atom[buffer], XA_STRING, 8, PropModeReplace, (_Xconst unsigned char *) bytes, nbytes); } int XStoreBytes ( register Display *dpy, _Xconst char *bytes, int nbytes) { return XStoreBuffer (dpy, bytes, nbytes, 0); } libX11-1.6.3/src/Key.h000064401431060000012000000004201247741723500145420ustar00alancstaff00002660200006 #ifndef _KEY_H_ #define _KEY_H_ #include #include #ifndef NEEDKTABLE extern const unsigned char _XkeyTable[]; #endif extern int _XKeyInitialize( Display *dpy); extern XrmDatabase _XInitKeysymDB( void); #endif /* _KEY_H_ */ libX11-1.6.3/src/GetStCmap.c000064401431060000012000000073641247741723500156520ustar00alancstaff00002660200006 /*********************************************************** Copyright 1987, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #include #include "Xatomtype.h" #include /* * WARNING * * This is a pre-ICCCM routine. It must not reference any of the new fields * in the XStandardColormap structure. */ Status XGetStandardColormap ( Display *dpy, Window w, XStandardColormap *cmap, Atom property) /* XA_RGB_BEST_MAP, etc. */ { Status stat; /* return value */ XStandardColormap *stdcmaps; /* will get malloced value */ int nstdcmaps; /* count of above */ stat = XGetRGBColormaps (dpy, w, &stdcmaps, &nstdcmaps, property); if (stat) { XStandardColormap *use; if (nstdcmaps > 1) { VisualID vid; Screen *sp = _XScreenOfWindow (dpy, w); int i; if (!sp) { Xfree (stdcmaps); return False; } vid = sp->root_visual->visualid; for (i = 0; i < nstdcmaps; i++) { if (stdcmaps[i].visualid == vid) break; } if (i == nstdcmaps) { /* not found */ Xfree (stdcmaps); return False; } use = &stdcmaps[i]; } else { use = stdcmaps; } /* * assign only those fields which were in the pre-ICCCM version */ cmap->colormap = use->colormap; cmap->red_max = use->red_max; cmap->red_mult = use->red_mult; cmap->green_max = use->green_max; cmap->green_mult = use->green_mult; cmap->blue_max = use->blue_max; cmap->blue_mult = use->blue_mult; cmap->base_pixel = use->base_pixel; Xfree (stdcmaps); /* don't need alloced memory */ } return stat; } libX11-1.6.3/src/pathmax.h000064401431060000012000000053711247741723500154660ustar00alancstaff00002660200006 /*********************************************************** Copyright 1987, 1988, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* * Provides a single definition of PATH_MAX instead of replicating this mess * in multiple files */ #ifdef HAVE_CONFIG_H #include #endif #include #ifndef X_NOT_POSIX #ifdef _POSIX_SOURCE #include #else #define _POSIX_SOURCE #include #undef _POSIX_SOURCE #endif #endif #ifndef PATH_MAX #ifdef WIN32 #define PATH_MAX 512 #else #include #endif #ifndef PATH_MAX #ifdef MAXPATHLEN #define PATH_MAX MAXPATHLEN #else #define PATH_MAX 1024 #endif #endif #endif libX11-1.6.3/src/GetHColor.c000064401431060000012000000034011247741723500156350ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" Status XAllocColor( register Display *dpy, Colormap cmap, XColor *def) { Status status; xAllocColorReply rep; register xAllocColorReq *req; LockDisplay(dpy); GetReq(AllocColor, req); req->cmap = cmap; req->red = def->red; req->green = def->green; req->blue = def->blue; status = _XReply(dpy, (xReply *) &rep, 0, xTrue); if (status) { def->pixel = rep.pixel; def->red = rep.red; def->green = rep.green; def->blue = rep.blue; } UnlockDisplay(dpy); SyncHandle(); return(status); } libX11-1.6.3/src/PixFormats.c000064401431060000012000000035721247741723500161140ustar00alancstaff00002660200006/* Copyright 1989, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include /* * XListPixmapFormats - return info from connection setup */ XPixmapFormatValues *XListPixmapFormats ( Display *dpy, int *count) /* RETURN */ { XPixmapFormatValues *formats = Xmalloc(dpy->nformats * sizeof (XPixmapFormatValues)); if (formats) { register int i; register XPixmapFormatValues *f; register ScreenFormat *sf; /* * copy data from internal Xlib data structure in display */ for (i = dpy->nformats, f = formats, sf = dpy->pixmap_format; i > 0; i--, f++, sf++) { f->depth = sf->depth; f->bits_per_pixel = sf->bits_per_pixel; f->scanline_pad = sf->scanline_pad; } *count = dpy->nformats; } return formats; } LINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise tlibX11-1.6.3/src/PutBEvent.c000064401431060000012000000044601247741723500156710ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ /* XPutBackEvent puts an event back at the head of the queue. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int _XPutBackEvent ( register Display *dpy, register XEvent *event) { register _XQEvent *qelt; XEvent store = *event; if (!dpy->qfree) { if ((dpy->qfree = Xmalloc (sizeof (_XQEvent))) == NULL) { return 0; } dpy->qfree->next = NULL; } /* unclaimed cookie? */ if (_XIsEventCookie(dpy, event)) { XEvent copy = {0}; /* if not claimed, then just fetch and store again */ if (!event->xcookie.data) { _XFetchEventCookie(dpy, &event->xcookie); store = *event; } else { /* if claimed, copy, client must free */ _XCopyEventCookie(dpy, &event->xcookie, ©.xcookie); store = copy; } } qelt = dpy->qfree; dpy->qfree = qelt->next; qelt->qserial_num = dpy->next_event_serial_num++; qelt->next = dpy->head; qelt->event = store; dpy->head = qelt; if (dpy->tail == NULL) dpy->tail = qelt; dpy->qlen++; return 0; } int XPutBackEvent ( register Display * dpy, register XEvent *event) { int ret; LockDisplay(dpy); ret = _XPutBackEvent(dpy, event); UnlockDisplay(dpy); return ret; } libX11-1.6.3/src/CrCursor.c000064401431060000012000000043371247741723500155620ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #ifdef USE_DYNAMIC_XCURSOR Cursor _XTryShapeBitmapCursor (Display *dpy, Pixmap source, Pixmap mask, XColor *foreground, XColor *background, unsigned int x, unsigned int y); #endif Cursor XCreatePixmapCursor( register Display *dpy, Pixmap source, Pixmap mask, XColor *foreground, XColor *background, unsigned int x, unsigned int y) { register xCreateCursorReq *req; Cursor cid; #ifdef USE_DYNAMIC_XCURSOR cid = _XTryShapeBitmapCursor (dpy, source, mask, foreground, background, x, y); if (cid) return cid; #endif LockDisplay(dpy); GetReq(CreateCursor, req); req->cid = cid = XAllocID(dpy); req->source = source; req->mask = mask; req->foreRed = foreground->red; req->foreGreen = foreground->green; req->foreBlue = foreground->blue; req->backRed = background->red; req->backGreen = background->green; req->backBlue = background->blue; req->x = x; req->y = y; UnlockDisplay(dpy); SyncHandle(); return (cid); } libX11-1.6.3/src/SetPMask.c000064401431060000012000000027501247741723500155040ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XSetPlaneMask ( register Display *dpy, GC gc, unsigned long planemask) /* CARD32 */ { LockDisplay(dpy); if (gc->values.plane_mask != planemask) { gc->values.plane_mask = planemask; gc->dirty |= GCPlaneMask; } UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/WarpPtr.c000064401431060000012000000033771247741723500154220ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XWarpPointer( register Display *dpy, Window src_win, Window dest_win, int src_x, int src_y, unsigned int src_width, unsigned int src_height, int dest_x, int dest_y) { register xWarpPointerReq *req; LockDisplay(dpy); GetReq(WarpPointer, req); req->srcWid = src_win; req->dstWid = dest_win; req->srcX = src_x; req->srcY = src_y; req->srcWidth = src_width; req->srcHeight = src_height; req->dstX = dest_x; req->dstY = dest_y; UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/Makefile.am000064401431060000012000000257371247741723500157170ustar00alancstaff00002660200006if XKB XKB_SUBDIRS = xkb endif SUBDIRS = util xcms xlibi18n $(XKB_SUBDIRS) lib_LTLIBRARIES = libX11.la libX11-xcb.la BUILT_SOURCES=ks_tables.h CLEANFILES=ks_tables.h ks_tables_h AM_CPPFLAGS= \ -I$(top_srcdir)/include \ -I$(top_srcdir)/include/X11 \ -I$(top_builddir)/include \ -I$(top_builddir)/include/X11 \ -I$(top_srcdir)/src/xcms \ -I$(top_srcdir)/src/xkb \ -I$(top_srcdir)/src/xlibi18n \ -D_BSD_SOURCE -DX11_t -DTRANS_CLIENT AM_CFLAGS= \ $(X11_CFLAGS) \ $(BIGFONT_CFLAGS) \ $(XMALLOC_ZERO_CFLAGS) \ $(CWARNFLAGS) # # =============================== I18N ============================= # I18N_LIBS = \ xlibi18n/libi18n.la # # =============================== XCMS ============================= # XCMS_LIBS = \ xcms/libxcms.la # # =============================== XKB ============================== # XKB_LIBS = \ xkb/libxkb.la # # =============================== XLIB ============================= # libX11_la_SOURCES = \ AllCells.c \ AllowEv.c \ AllPlanes.c \ AutoRep.c \ Backgnd.c \ BdrWidth.c \ Bell.c \ Border.c \ ChAccCon.c \ ChActPGb.c \ ChClMode.c \ ChCmap.c \ ChGC.c \ ChKeyCon.c \ ChkIfEv.c \ ChkMaskEv.c \ ChkTypEv.c \ ChkTypWEv.c \ ChkWinEv.c \ ChPntCon.c \ ChProp.c \ ChSaveSet.c \ ChWAttrs.c \ ChWindow.c \ CirWin.c \ CirWinDn.c \ CirWinUp.c \ ClDisplay.c \ ClearArea.c \ Clear.c \ Cmap.h \ ConfWind.c \ Context.c \ ConvSel.c \ CopyArea.c \ CopyCmap.c \ CopyGC.c \ CopyPlane.c \ CrBFData.c \ CrCmap.c \ CrCursor.c \ CrGC.c \ CrGlCur.c \ Cr.h \ CrPFBData.c \ CrPixmap.c \ CrWindow.c \ Cursor.c \ DefCursor.c \ DelProp.c \ Depths.c \ DestSubs.c \ DestWind.c \ DisName.c \ DrArc.c \ DrArcs.c \ DrLine.c \ DrLines.c \ DrPoint.c \ DrPoints.c \ DrRect.c \ DrRects.c \ DrSegs.c \ ErrDes.c \ ErrHndlr.c \ evtomask.c \ EvToWire.c \ FetchName.c \ FillArc.c \ FillArcs.c \ FillPoly.c \ FillRct.c \ FillRcts.c \ FilterEv.c \ Flush.c \ Font.c \ FontInfo.c \ FontNames.c \ FreeCmap.c \ FreeCols.c \ FreeCurs.c \ FreeEData.c \ FreeEventData.c \ FreeGC.c \ FreePix.c \ FSSaver.c \ FSWrap.c \ GCMisc.c \ Geom.c \ GetAtomNm.c \ GetColor.c \ GetDflt.c \ GetEventData.c \ GetFPath.c \ GetFProp.c \ GetGCVals.c \ GetGeom.c \ GetHColor.c \ GetHints.c \ GetIFocus.c \ GetImage.c \ GetKCnt.c \ GetMoEv.c \ GetNrmHint.c \ GetPCnt.c \ GetPntMap.c \ GetProp.c \ GetRGBCMap.c \ GetSOwner.c \ GetSSaver.c \ GetStCmap.c \ GetTxtProp.c \ GetWAttrs.c \ GetWMCMapW.c \ GetWMProto.c \ globals.c \ GrButton.c \ GrKeybd.c \ GrKey.c \ GrPointer.c \ GrServer.c \ Host.c \ Iconify.c \ IfEvent.c \ imConv.c \ ImText16.c \ ImText.c \ ImUtil.c \ InitExt.c \ InsCmap.c \ IntAtom.c \ KeyBind.c \ Key.h \ KeysymStr.c \ KillCl.c \ LiHosts.c \ LiICmaps.c \ LiProps.c \ ListExt.c \ LoadFont.c \ LockDis.c \ locking.c \ locking.h \ LookupCol.c \ LowerWin.c \ Macros.c \ MapRaised.c \ MapSubs.c \ MapWindow.c \ MaskEvent.c \ Misc.c \ ModMap.c \ MoveWin.c \ NextEvent.c \ OCWrap.c \ OMWrap.c \ OpenDis.c \ ParseCmd.c \ ParseCol.c \ ParseGeom.c \ pathmax.h \ PeekEvent.c \ PeekIfEv.c \ Pending.c \ PixFormats.c \ PmapBgnd.c \ PmapBord.c \ poly.h \ PolyReg.c \ PolyTxt16.c \ PolyTxt.c \ PropAlloc.c \ PutBEvent.c \ PutImage.c \ Quarks.c \ QuBest.c \ QuColor.c \ QuColors.c \ QuCurShp.c \ QuExt.c \ QuKeybd.c \ QuPntr.c \ QuStipShp.c \ QuTextE16.c \ QuTextExt.c \ QuTileShp.c \ QuTree.c \ RaiseWin.c \ RdBitF.c \ RecolorC.c \ ReconfWin.c \ ReconfWM.c \ Region.c \ RegstFlt.c \ RepWindow.c \ RestackWs.c \ RotProp.c \ ScrResStr.c \ SelInput.c \ SendEvent.c \ SetBack.c \ SetClMask.c \ SetClOrig.c \ SetCRects.c \ SetDashes.c \ SetFont.c \ SetFore.c \ SetFPath.c \ SetFunc.c \ SetHints.c \ SetIFocus.c \ SetLocale.c \ SetLStyle.c \ SetNrmHint.c \ SetPMask.c \ SetPntMap.c \ SetRGBCMap.c \ SetSOwner.c \ SetSSaver.c \ SetState.c \ SetStCmap.c \ SetStip.c \ SetTile.c \ SetTSOrig.c \ SetTxtProp.c \ SetWMCMapW.c \ SetWMProto.c \ StBytes.c \ StColor.c \ StColors.c \ StName.c \ StNColor.c \ StrKeysym.c \ StrToText.c \ Sync.c \ Synchro.c \ Text16.c \ Text.c \ TextExt16.c \ TextExt.c \ TextToStr.c \ TrCoords.c \ UndefCurs.c \ UngrabBut.c \ UngrabKbd.c \ UngrabKey.c \ UngrabPtr.c \ UngrabSvr.c \ UninsCmap.c \ UnldFont.c \ UnmapSubs.c \ UnmapWin.c \ utlist.h \ VisUtil.c \ WarpPtr.c \ Window.c \ WinEvent.c \ Withdraw.c \ WMGeom.c \ WMProps.c \ WrBitF.c \ Xatomtype.h \ xcb_disp.c \ xcb_io.c \ Xintatom.h \ Xintconn.h \ XlibAsync.c \ XlibInt.c \ Xprivate.h \ XomGeneric.h \ Xresinternal.h \ Xrm.c \ Xxcbint.h # # ========================= Extra stuff ============================ # if OS2 libX11_la_SOURCES+=os2Stubs.c endif OS2 if THRSTUBS libX11_la_SOURCES+=UIThrStubs.c endif x11datadir = @X11_DATADIR@ x11data_DATA = XErrorDB EXTRA_DIST = \ $(x11data_DATA) \ os2Stubs.c \ UIThrStubs.c libX11_xcb_la_SOURCES = x11_xcb.c Xxcbint.h libX11_xcb_la_LDFLAGS = -version-number 1:0:0 -no-undefined libX11_xcb_la_LIBADD = libX11.la # # Figure out which sub-libraries to link into Xlib # if XLOCALE USE_I18N_LIBS = $(I18N_LIBS) endif if XCMS USE_XCMS_LIBS = $(XCMS_LIBS) endif if XKB USE_XKB_LIBS = $(XKB_LIBS) endif libX11_la_LDFLAGS = -version-number 6:3:0 -no-undefined libX11_la_LIBADD = \ $(USE_I18N_LIBS) \ $(USE_XCMS_LIBS) \ $(USE_XKB_LIBS) \ $(X11_LIBS) preprocess: $(patsubst %.c,%.ii,$(libX11_la_SOURCES)) .c.ii: $(COMPILE) -E -o $@ `test -f '$<' || echo '$(srcdir)/'`$< if LINT # Check source code with tools like lint & sparse ALL_LINT_FLAGS=$(LINT_FLAGS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) ALL_LINT_FLAGS += -DXCMSDIR=\"$(X11dir)\" lint: $(BUILT_SOURCES) for f in $(libX11_la_SOURCES) ; do \ $(LINT) $(ALL_LINT_FLAGS) $$f ; \ done @for subdir in $(SUBDIRS) ; do \ echo "Making $@ in src/$$subdir"; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) lint) ; \ done endif LINT if MAKE_LINT_LIB lintlibdir = $(libdir) lintlib_DATA = $(LINTLIB) lintlib_src = $(libX11_la_SOURCES) $(srcdir)/xcms/*.c $(srcdir)/xkb/*.c CLEANFILES += $(lintlib_DATA) $(LINTLIB): $(libX11_la_SOURCES) $(AM_V_GEN)$(LINT) -y -oX11 -x $(ALL_LINT_FLAGS) $(lintlib_src) endif MAKE_LINT_LIB # # Building ks_tables.h requires the makekeys utility # KEYSYMDEFS=@KEYSYMDEFS@ ks_tables.h: $(KEYSYMDEFS) $(top_builddir)/src/util/makekeys$(EXEEXT) $(top_builddir)/src/util/makekeys $(KEYSYMDEFS) > ks_tables_h mv ks_tables_h $@ $(top_builddir)/src/util/makekeys$(EXEEXT): force cd util && $(MAKE) force: lArcs.c \ FillPlibX11-1.6.3/src/SetTxtProp.c000064401431060000012000000057341247741723500161160ustar00alancstaff00002660200006/*********************************************************** Copyright 1988 by Wyse Technology, Inc., San Jose, Ca. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Wyse not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. WYSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1988, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include void XSetTextProperty ( Display *dpy, Window w, XTextProperty *tp, Atom property) { XChangeProperty (dpy, w, property, tp->encoding, tp->format, PropModeReplace, tp->value, tp->nitems); } void XSetWMName ( Display *dpy, Window w, XTextProperty *tp) { XSetTextProperty (dpy, w, tp, XA_WM_NAME); } void XSetWMIconName ( Display *dpy, Window w, XTextProperty *tp) { XSetTextProperty (dpy, w, tp, XA_WM_ICON_NAME); } void XSetWMClientMachine ( Display *dpy, Window w, XTextProperty *tp) { XSetTextProperty (dpy, w, tp, XA_WM_CLIENT_MACHINE); } libX11-1.6.3/src/DrArcs.c000064401431060000012000000033061247741723500151710ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #define arc_scale (SIZEOF(xArc) / 4) int XDrawArcs( register Display *dpy, Drawable d, GC gc, XArc *arcs, int n_arcs) { register xPolyArcReq *req; register long len; LockDisplay(dpy); FlushGC(dpy, gc); GetReq(PolyArc,req); req->drawable = d; req->gc = gc->gid; len = ((long)n_arcs) * arc_scale; SetReqLen(req, len, 1); len <<= 2; /* watch out for macros... */ Data16 (dpy, (short *) arcs, len); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/ChkTypWEv.c000064401431060000012000000047141247741723500156430ustar00alancstaff00002660200006/* Copyright 1985, 1987, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" /* * Check existing events in queue to find if any match. If so, return. * If not, flush buffer and see if any more events are readable. If one * matches, return. If all else fails, tell the user no events found. */ Bool XCheckTypedWindowEvent ( register Display *dpy, Window w, /* Selected window. */ int type, /* Selected event type. */ register XEvent *event) /* XEvent to be filled in. */ { register _XQEvent *prev, *qelt; unsigned long qe_serial = 0; int n; /* time through count */ LockDisplay(dpy); /* Delete unclaimed cookies */ _XFreeEventCookies(dpy); prev = NULL; for (n = 3; --n >= 0;) { for (qelt = prev ? prev->next : dpy->head; qelt; prev = qelt, qelt = qelt->next) { if ((qelt->event.xany.window == w) && (qelt->event.type == type)) { *event = qelt->event; _XDeq(dpy, prev, qelt); _XStoreEventCookie(dpy, event); UnlockDisplay(dpy); return True; } } if (prev) qe_serial = prev->qserial_num; switch (n) { case 2: _XEventsQueued(dpy, QueuedAfterReading); break; case 1: _XFlush(dpy); break; } if (prev && prev->qserial_num != qe_serial) /* another thread has snatched this event */ prev = NULL; } UnlockDisplay(dpy); return False; } libX11-1.6.3/src/DrPoints.c000064401431060000012000000045401247741723500155560ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XDrawPoints( register Display *dpy, Drawable d, GC gc, XPoint *points, int n_points, int mode) /* CoordMode */ { register xPolyPointReq *req; register long nbytes; int n; int xoff, yoff; XPoint pt; xoff = yoff = 0; LockDisplay(dpy); FlushGC(dpy, gc); while (n_points) { GetReq(PolyPoint, req); req->drawable = d; req->gc = gc->gid; req->coordMode = mode; n = n_points; if (!dpy->bigreq_size && n > (dpy->max_request_size - req->length)) n = dpy->max_request_size - req->length; SetReqLen(req, n, n); nbytes = ((long)n) << 2; /* watch out for macros... */ if (xoff || yoff) { pt.x = xoff + points->x; pt.y = yoff + points->y; Data16 (dpy, (short *) &pt, 4); if (nbytes > 4) { Data16 (dpy, (short *) (points + 1), nbytes - 4); } } else { Data16 (dpy, (short *) points, nbytes); } n_points -= n; if (n_points && (mode == CoordModePrevious)) { register XPoint *pptr = points; points += n; while (pptr != points) { xoff += pptr->x; yoff += pptr->y; pptr++; } } else points += n; } UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/ChProp.c000064401431060000012000000053211247741723500152050ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XChangeProperty ( register Display *dpy, Window w, Atom property, Atom type, int format, /* 8, 16, or 32 */ int mode, /* PropModeReplace, PropModePrepend, PropModeAppend */ _Xconst unsigned char *data, int nelements) { register xChangePropertyReq *req; register long len; LockDisplay(dpy); GetReq (ChangeProperty, req); req->window = w; req->property = property; req->type = type; req->mode = mode; if (nelements < 0) { req->nUnits = 0; req->format = 0; /* ask for garbage, get garbage */ } else { req->nUnits = nelements; req->format = format; } switch (req->format) { case 8: len = ((long)nelements + 3)>>2; if (dpy->bigreq_size || req->length + len <= (unsigned) 65535) { SetReqLen(req, len, len); Data (dpy, (_Xconst char *)data, nelements); } /* else force BadLength */ break; case 16: len = ((long)nelements + 1)>>1; if (dpy->bigreq_size || req->length + len <= (unsigned) 65535) { SetReqLen(req, len, len); len = (long)nelements << 1; Data16 (dpy, (_Xconst short *) data, len); } /* else force BadLength */ break; case 32: len = nelements; if (dpy->bigreq_size || req->length + len <= (unsigned) 65535) { SetReqLen(req, len, len); len = (long)nelements << 2; Data32 (dpy, (_Xconst long *) data, len); } /* else force BadLength */ break; default: /* BadValue will be generated */ ; } UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/ListExt.c000064401431060000012000000052711247741723500154120ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include char **XListExtensions( register Display *dpy, int *nextensions) /* RETURN */ { xListExtensionsReply rep; char **list = NULL; char *ch = NULL; char *chend; int count = 0; register unsigned i; register int length; register xReq *req; unsigned long rlen; LockDisplay(dpy); GetEmptyReq (ListExtensions, req); if (! _XReply (dpy, (xReply *) &rep, 0, xFalse)) { UnlockDisplay(dpy); SyncHandle(); return (char **) NULL; } if (rep.nExtensions) { list = Xmalloc (rep.nExtensions * sizeof (char *)); if (rep.length < (INT_MAX >> 2)) { rlen = rep.length << 2; ch = Xmalloc (rlen + 1); /* +1 to leave room for last null-terminator */ } if ((!list) || (!ch)) { Xfree(list); Xfree(ch); _XEatDataWords(dpy, rep.length); UnlockDisplay(dpy); SyncHandle(); return (char **) NULL; } _XReadPad (dpy, ch, rlen); /* * unpack into null terminated strings. */ chend = ch + (rlen + 1); length = *ch; for (i = 0; i < rep.nExtensions; i++) { if (ch + length < chend) { list[i] = ch+1; /* skip over length */ ch += length + 1; /* find next length ... */ length = *ch; *ch = '\0'; /* and replace with null-termination */ count++; } else list[i] = NULL; } } *nextensions = count; UnlockDisplay(dpy); SyncHandle(); return (list); } int XFreeExtensionList (char **list) { if (list != NULL) { Xfree (list[0]-1); Xfree (list); } return 1; } libX11-1.6.3/src/QuKeybd.c000064401431060000012000000032041247741723500153540ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" struct kmap { char map[32]; }; int XQueryKeymap( register Display *dpy, char keys[32]) { xQueryKeymapReply rep; register xReq *req; LockDisplay(dpy); GetEmptyReq(QueryKeymap, req); (void) _XReply(dpy, (xReply *)&rep, (SIZEOF(xQueryKeymapReply) - SIZEOF(xReply)) >> 2, xTrue); *(struct kmap *) keys = *(struct kmap *)rep.map; /* faster than memcpy */ UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/FreeGC.c000064401431060000012000000032031247741723500151020ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XFreeGC ( register Display *dpy, GC gc) { register xResourceReq *req; register _XExtension *ext; LockDisplay(dpy); /* call out to any extensions interested */ for (ext = dpy->ext_procs; ext; ext = ext->next) if (ext->free_GC) (*ext->free_GC)(dpy, gc, &ext->codes); GetResReq (FreeGC, gc->gid, req); UnlockDisplay(dpy); SyncHandle(); _XFreeExtData(gc->ext_data); Xfree (gc); return 1; } libX11-1.6.3/src/PolyTxt.c000064401431060000012000000140461247741723500154410ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XDrawText( register Display *dpy, Drawable d, GC gc, int x, int y, XTextItem *items, int nitems) { register int i; register XTextItem *item; int length = 0; register xPolyText8Req *req; LockDisplay(dpy); FlushGC(dpy, gc); GetReq (PolyText8, req); req->drawable = d; req->gc = gc->gid; req->x = x; req->y = y; item = items; for (i=0; i < nitems; i++) { if (item->font) length += 5; /* a 255 byte, plus size of Font id */ if (item->delta) { if (item->delta > 0) { length += SIZEOF(xTextElt) * ((item->delta + 126) / 127); } else { length += SIZEOF(xTextElt) * ((-item->delta + 127) / 128); } } if (item->nchars > 0) { length += SIZEOF(xTextElt) * ((item->nchars + 253) / 254 - 1); if (!item->delta) length += SIZEOF(xTextElt); length += item->nchars; } item++; } req->length += (length + 3)>>2; /* convert to number of 32-bit words */ /* * If the entire request does not fit into the remaining space in the * buffer, flush the buffer first. If the request does fit into the * empty buffer, then we won't have to flush it at the end to keep * the buffer 32-bit aligned. */ if (dpy->bufptr + length > dpy->bufmax) _XFlush (dpy); item = items; for (i=0; i< nitems; i++) { if (item->font) { /* to mark a font shift, write a 255 byte followed by the 4 bytes of font ID, big-end first */ register unsigned char *f; BufAlloc (unsigned char *, f, 5); f[0] = 255; f[1] = (item->font & 0xff000000) >> 24; f[2] = (item->font & 0x00ff0000) >> 16; f[3] = (item->font & 0x0000ff00) >> 8; f[4] = item->font & 0x000000ff; /* update GC shadow */ gc->values.font = item->font; } { int nbytes = SIZEOF(xTextElt); int PartialNChars = item->nchars; int PartialDelta = item->delta; /* register xTextElt *elt; */ int FirstTimeThrough = True; char *CharacterOffset = item->chars; char *tbuf = NULL; while((PartialDelta < -128) || (PartialDelta > 127)) { int nb = SIZEOF(xTextElt); BufAlloc (char *, tbuf, nb); *tbuf = 0; /* elt->len */ if (PartialDelta > 0 ) { *(tbuf+1) = 127; /* elt->delta */ PartialDelta = PartialDelta - 127; } else { /* -128 = 0x8, need to be careful of signed chars... */ *((unsigned char *)(tbuf+1)) = 0x80; /* elt->delta */ PartialDelta = PartialDelta + 128; } } if (PartialDelta) { BufAlloc (char *, tbuf , nbytes); *tbuf = 0; /* elt->len */ *(tbuf+1) = PartialDelta; /* elt->delta */ } while(PartialNChars > 254) { nbytes = 254; if (FirstTimeThrough) { FirstTimeThrough = False; if (!item->delta) { nbytes += SIZEOF(xTextElt); BufAlloc (char *, tbuf, nbytes); *(tbuf+1) = 0; /* elt->delta */ } else { char *DummyChar; BufAlloc(char *, DummyChar, nbytes); } } else { nbytes += SIZEOF(xTextElt); BufAlloc (char *, tbuf, nbytes); *(tbuf+1) = 0; /* elt->delta */ } /* watch out for signs on chars */ *(unsigned char *)tbuf = 254; /* elt->len */ memcpy (tbuf+2 , CharacterOffset, 254); PartialNChars = PartialNChars - 254; CharacterOffset += 254; } if (PartialNChars) { nbytes = PartialNChars; if (FirstTimeThrough) { FirstTimeThrough = False; if (!item->delta) { nbytes += SIZEOF(xTextElt); BufAlloc (char *, tbuf, nbytes); *(tbuf+1) = 0; /* elt->delta */ } else { char *DummyChar; BufAlloc(char *, DummyChar, nbytes); } } else { nbytes += SIZEOF(xTextElt); BufAlloc (char *, tbuf, nbytes); *(tbuf+1) = 0; /* elt->delta */ } *tbuf = PartialNChars; /* elt->len */ memcpy (tbuf+2 , CharacterOffset, PartialNChars); } } item++; } /* Pad request out to a 32-bit boundary */ if (length &= 3) { char *pad; /* * BufAlloc is a macro that uses its last argument more than * once, otherwise I'd write "BufAlloc (char *, pad, 4-length)" */ length = 4 - length; BufAlloc (char *, pad, length); /* * if there are 3 bytes of padding, the first byte MUST be 0 * so the pad bytes aren't mistaken for a final xTextElt */ *pad = 0; } /* * If the buffer pointer is not now pointing to a 32-bit boundary, * we must flush the buffer so that it does point to a 32-bit boundary * at the end of this routine. */ if ((dpy->bufptr - dpy->buffer) & 3) _XFlush (dpy); UnlockDisplay(dpy); SyncHandle(); return 0; } libX11-1.6.3/src/Region.c000064401431060000012000001223401247741723500152360ustar00alancstaff00002660200006/************************************************************************ Copyright 1987, 1988, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ************************************************************************/ /* * The functions in this file implement the Region abstraction, similar to one * used in the X11 sample server. A Region is simply an area, as the name * implies, and is implemented as a "y-x-banded" array of rectangles. To * explain: Each Region is made up of a certain number of rectangles sorted * by y coordinate first, and then by x coordinate. * * Furthermore, the rectangles are banded such that every rectangle with a * given upper-left y coordinate (y1) will have the same lower-right y * coordinate (y2) and vice versa. If a rectangle has scanlines in a band, it * will span the entire vertical distance of the band. This means that some * areas that could be merged into a taller rectangle will be represented as * several shorter rectangles to account for shorter rectangles to its left * or right but within its "vertical scope". * * An added constraint on the rectangles is that they must cover as much * horizontal area as possible. E.g. no two rectangles in a band are allowed * to touch. * * Whenever possible, bands will be merged together to cover a greater vertical * distance (and thus reduce the number of rectangles). Two bands can be merged * only if the bottom of one touches the top of the other and they have * rectangles in the same places (of the same width, of course). This maintains * the y-x-banding that's so nice to have... */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xutil.h" #include #include "poly.h" #ifdef DEBUG #include #define assert(expr) {if (!(expr)) fprintf(stderr,\ "Assertion failed file %s, line %d: expr\n", __FILE__, __LINE__); } #else #define assert(expr) #endif typedef int (*overlapProcp)( register Region pReg, register BoxPtr r1, BoxPtr r1End, register BoxPtr r2, BoxPtr r2End, short y1, short y2); typedef int (*nonOverlapProcp)( register Region pReg, register BoxPtr r, BoxPtr rEnd, register short y1, register short y2); static void miRegionOp( register Region newReg, /* Place to store result */ Region reg1, /* First region in operation */ Region reg2, /* 2d region in operation */ int (*overlapFunc)( register Region pReg, register BoxPtr r1, BoxPtr r1End, register BoxPtr r2, BoxPtr r2End, short y1, short y2), /* Function to call for over- * lapping bands */ int (*nonOverlap1Func)( register Region pReg, register BoxPtr r, BoxPtr rEnd, register short y1, register short y2), /* Function to call for non- * overlapping bands in region * 1 */ int (*nonOverlap2Func)( register Region pReg, register BoxPtr r, BoxPtr rEnd, register short y1, register short y2)); /* Function to call for non- * overlapping bands in region * 2 */ /* Create a new empty region */ Region XCreateRegion(void) { Region temp; if (! (temp = Xmalloc(sizeof( REGION )))) return (Region) NULL; if (! (temp->rects = Xmalloc(sizeof( BOX )))) { Xfree(temp); return (Region) NULL; } temp->numRects = 0; temp->extents.x1 = 0; temp->extents.y1 = 0; temp->extents.x2 = 0; temp->extents.y2 = 0; temp->size = 1; return( temp ); } int XClipBox( Region r, XRectangle *rect) { rect->x = r->extents.x1; rect->y = r->extents.y1; rect->width = r->extents.x2 - r->extents.x1; rect->height = r->extents.y2 - r->extents.y1; return 1; } int XUnionRectWithRegion( register XRectangle *rect, Region source, Region dest) { REGION region; if (!rect->width || !rect->height) return 0; region.rects = ®ion.extents; region.numRects = 1; region.extents.x1 = rect->x; region.extents.y1 = rect->y; region.extents.x2 = rect->x + rect->width; region.extents.y2 = rect->y + rect->height; region.size = 1; return XUnionRegion(®ion, source, dest); } /*- *----------------------------------------------------------------------- * miSetExtents -- * Reset the extents of a region to what they should be. Called by * miSubtract and miIntersect b/c they can't figure it out along the * way or do so easily, as miUnion can. * * Results: * None. * * Side Effects: * The region's 'extents' structure is overwritten. * *----------------------------------------------------------------------- */ static void miSetExtents ( Region pReg) { register BoxPtr pBox, pBoxEnd, pExtents; if (pReg->numRects == 0) { pReg->extents.x1 = 0; pReg->extents.y1 = 0; pReg->extents.x2 = 0; pReg->extents.y2 = 0; return; } pExtents = &pReg->extents; pBox = pReg->rects; pBoxEnd = &pBox[pReg->numRects - 1]; /* * Since pBox is the first rectangle in the region, it must have the * smallest y1 and since pBoxEnd is the last rectangle in the region, * it must have the largest y2, because of banding. Initialize x1 and * x2 from pBox and pBoxEnd, resp., as good things to initialize them * to... */ pExtents->x1 = pBox->x1; pExtents->y1 = pBox->y1; pExtents->x2 = pBoxEnd->x2; pExtents->y2 = pBoxEnd->y2; assert(pExtents->y1 < pExtents->y2); while (pBox <= pBoxEnd) { if (pBox->x1 < pExtents->x1) { pExtents->x1 = pBox->x1; } if (pBox->x2 > pExtents->x2) { pExtents->x2 = pBox->x2; } pBox++; } assert(pExtents->x1 < pExtents->x2); } int XSetRegion( Display *dpy, GC gc, register Region r) { register int i; register XRectangle *xr, *pr; register BOX *pb; unsigned long total; LockDisplay (dpy); total = r->numRects * sizeof (XRectangle); if ((xr = (XRectangle *) _XAllocTemp(dpy, total))) { for (pr = xr, pb = r->rects, i = r->numRects; --i >= 0; pr++, pb++) { pr->x = pb->x1; pr->y = pb->y1; pr->width = pb->x2 - pb->x1; pr->height = pb->y2 - pb->y1; } } if (xr || !r->numRects) _XSetClipRectangles(dpy, gc, 0, 0, xr, r->numRects, YXBanded); if (xr) _XFreeTemp(dpy, (char *)xr, total); UnlockDisplay(dpy); SyncHandle(); return 1; } int XDestroyRegion( Region r) { Xfree( (char *) r->rects ); Xfree( (char *) r ); return 1; } /* TranslateRegion(pRegion, x, y) translates in place added by raymond */ int XOffsetRegion( register Region pRegion, register int x, register int y) { register int nbox; register BOX *pbox; pbox = pRegion->rects; nbox = pRegion->numRects; while(nbox--) { pbox->x1 += x; pbox->x2 += x; pbox->y1 += y; pbox->y2 += y; pbox++; } pRegion->extents.x1 += x; pRegion->extents.x2 += x; pRegion->extents.y1 += y; pRegion->extents.y2 += y; return 1; } /* Utility procedure Compress: Replace r by the region r', where p in r' iff (Quantifer m <= dx) (p + m in r), and Quantifier is Exists if grow is TRUE, For all if grow is FALSE, and (x,y) + m = (x+m,y) if xdir is TRUE; (x,y+m) if xdir is FALSE. Thus, if xdir is TRUE and grow is FALSE, r is replaced by the region of all points p such that p and the next dx points on the same horizontal scan line are all in r. We do this using by noting that p is the head of a run of length 2^i + k iff p is the head of a run of length 2^i and p+2^i is the head of a run of length k. Thus, the loop invariant: s contains the region corresponding to the runs of length shift. r contains the region corresponding to the runs of length 1 + dxo & (shift-1), where dxo is the original value of dx. dx = dxo & ~(shift-1). As parameters, s and t are scratch regions, so that we don't have to allocate them on every call. */ #define ZOpRegion(a,b,c) if (grow) XUnionRegion(a,b,c); \ else XIntersectRegion(a,b,c) #define ZShiftRegion(a,b) if (xdir) XOffsetRegion(a,b,0); \ else XOffsetRegion(a,0,b) #define ZCopyRegion(a,b) XUnionRegion(a,a,b) static void Compress( Region r, Region s, Region t, register unsigned dx, register int xdir, register int grow) { register unsigned shift = 1; ZCopyRegion(r, s); while (dx) { if (dx & shift) { ZShiftRegion(r, -(int)shift); ZOpRegion(r, s, r); dx -= shift; if (!dx) break; } ZCopyRegion(s, t); ZShiftRegion(s, -(int)shift); ZOpRegion(s, t, s); shift <<= 1; } } #undef ZOpRegion #undef ZShiftRegion #undef ZCopyRegion int XShrinkRegion( Region r, int dx, int dy) { Region s, t; int grow; if (!dx && !dy) return 0; if (! (s = XCreateRegion()) ) return 0; if (! (t = XCreateRegion()) ) { XDestroyRegion(s); return 0; } if ((grow = (dx < 0))) dx = -dx; if (dx) Compress(r, s, t, (unsigned) 2*dx, TRUE, grow); if ((grow = (dy < 0))) dy = -dy; if (dy) Compress(r, s, t, (unsigned) 2*dy, FALSE, grow); XOffsetRegion(r, dx, dy); XDestroyRegion(s); XDestroyRegion(t); return 0; } /*====================================================================== * Region Intersection *====================================================================*/ /*- *----------------------------------------------------------------------- * miIntersectO -- * Handle an overlapping band for miIntersect. * * Results: * None. * * Side Effects: * Rectangles may be added to the region. * *----------------------------------------------------------------------- */ /* static void*/ static int miIntersectO ( register Region pReg, register BoxPtr r1, BoxPtr r1End, register BoxPtr r2, BoxPtr r2End, short y1, short y2) { register short x1; register short x2; register BoxPtr pNextRect; pNextRect = &pReg->rects[pReg->numRects]; while ((r1 != r1End) && (r2 != r2End)) { x1 = max(r1->x1,r2->x1); x2 = min(r1->x2,r2->x2); /* * If there's any overlap between the two rectangles, add that * overlap to the new region. * There's no need to check for subsumption because the only way * such a need could arise is if some region has two rectangles * right next to each other. Since that should never happen... */ if (x1 < x2) { assert(y1rects); pNextRect->x1 = x1; pNextRect->y1 = y1; pNextRect->x2 = x2; pNextRect->y2 = y2; pReg->numRects += 1; pNextRect++; assert(pReg->numRects <= pReg->size); } /* * Need to advance the pointers. Shift the one that extends * to the right the least, since the other still has a chance to * overlap with that region's next rectangle, if you see what I mean. */ if (r1->x2 < r2->x2) { r1++; } else if (r2->x2 < r1->x2) { r2++; } else { r1++; r2++; } } return 0; /* lint */ } int XIntersectRegion( Region reg1, Region reg2, /* source regions */ register Region newReg) /* destination Region */ { /* check for trivial reject */ if ( (!(reg1->numRects)) || (!(reg2->numRects)) || (!EXTENTCHECK(®1->extents, ®2->extents))) newReg->numRects = 0; else miRegionOp (newReg, reg1, reg2, miIntersectO, NULL, NULL); /* * Can't alter newReg's extents before we call miRegionOp because * it might be one of the source regions and miRegionOp depends * on the extents of those regions being the same. Besides, this * way there's no checking against rectangles that will be nuked * due to coalescing, so we have to examine fewer rectangles. */ miSetExtents(newReg); return 1; } static int miRegionCopy( register Region dstrgn, register Region rgn) { if (dstrgn != rgn) /* don't want to copy to itself */ { if (dstrgn->size < rgn->numRects) { if (dstrgn->rects) { BOX *prevRects = dstrgn->rects; dstrgn->rects = Xrealloc(dstrgn->rects, rgn->numRects * (sizeof(BOX))); if (! dstrgn->rects) { Xfree(prevRects); dstrgn->size = 0; return 0; } } dstrgn->size = rgn->numRects; } dstrgn->numRects = rgn->numRects; dstrgn->extents.x1 = rgn->extents.x1; dstrgn->extents.y1 = rgn->extents.y1; dstrgn->extents.x2 = rgn->extents.x2; dstrgn->extents.y2 = rgn->extents.y2; memcpy((char *) dstrgn->rects, (char *) rgn->rects, (int) (rgn->numRects * sizeof(BOX))); } return 1; } /*====================================================================== * Generic Region Operator *====================================================================*/ /*- *----------------------------------------------------------------------- * miCoalesce -- * Attempt to merge the boxes in the current band with those in the * previous one. Used only by miRegionOp. * * Results: * The new index for the previous band. * * Side Effects: * If coalescing takes place: * - rectangles in the previous band will have their y2 fields * altered. * - pReg->numRects will be decreased. * *----------------------------------------------------------------------- */ /* static int*/ static int miCoalesce( register Region pReg, /* Region to coalesce */ int prevStart, /* Index of start of previous band */ int curStart) /* Index of start of current band */ { register BoxPtr pPrevBox; /* Current box in previous band */ register BoxPtr pCurBox; /* Current box in current band */ register BoxPtr pRegEnd; /* End of region */ int curNumRects; /* Number of rectangles in current * band */ int prevNumRects; /* Number of rectangles in previous * band */ int bandY1; /* Y1 coordinate for current band */ pRegEnd = &pReg->rects[pReg->numRects]; pPrevBox = &pReg->rects[prevStart]; prevNumRects = curStart - prevStart; /* * Figure out how many rectangles are in the current band. Have to do * this because multiple bands could have been added in miRegionOp * at the end when one region has been exhausted. */ pCurBox = &pReg->rects[curStart]; bandY1 = pCurBox->y1; for (curNumRects = 0; (pCurBox != pRegEnd) && (pCurBox->y1 == bandY1); curNumRects++) { pCurBox++; } if (pCurBox != pRegEnd) { /* * If more than one band was added, we have to find the start * of the last band added so the next coalescing job can start * at the right place... (given when multiple bands are added, * this may be pointless -- see above). */ pRegEnd--; while (pRegEnd[-1].y1 == pRegEnd->y1) { pRegEnd--; } curStart = pRegEnd - pReg->rects; pRegEnd = pReg->rects + pReg->numRects; } if ((curNumRects == prevNumRects) && (curNumRects != 0)) { pCurBox -= curNumRects; /* * The bands may only be coalesced if the bottom of the previous * matches the top scanline of the current. */ if (pPrevBox->y2 == pCurBox->y1) { /* * Make sure the bands have boxes in the same places. This * assumes that boxes have been added in such a way that they * cover the most area possible. I.e. two boxes in a band must * have some horizontal space between them. */ do { if ((pPrevBox->x1 != pCurBox->x1) || (pPrevBox->x2 != pCurBox->x2)) { /* * The bands don't line up so they can't be coalesced. */ return (curStart); } pPrevBox++; pCurBox++; prevNumRects -= 1; } while (prevNumRects != 0); pReg->numRects -= curNumRects; pCurBox -= curNumRects; pPrevBox -= curNumRects; /* * The bands may be merged, so set the bottom y of each box * in the previous band to that of the corresponding box in * the current band. */ do { pPrevBox->y2 = pCurBox->y2; pPrevBox++; pCurBox++; curNumRects -= 1; } while (curNumRects != 0); /* * If only one band was added to the region, we have to backup * curStart to the start of the previous band. * * If more than one band was added to the region, copy the * other bands down. The assumption here is that the other bands * came from the same region as the current one and no further * coalescing can be done on them since it's all been done * already... curStart is already in the right place. */ if (pCurBox == pRegEnd) { curStart = prevStart; } else { do { *pPrevBox++ = *pCurBox++; } while (pCurBox != pRegEnd); } } } return (curStart); } /*- *----------------------------------------------------------------------- * miRegionOp -- * Apply an operation to two regions. Called by miUnion, miInverse, * miSubtract, miIntersect... * * Results: * None. * * Side Effects: * The new region is overwritten. * * Notes: * The idea behind this function is to view the two regions as sets. * Together they cover a rectangle of area that this function divides * into horizontal bands where points are covered only by one region * or by both. For the first case, the nonOverlapFunc is called with * each the band and the band's upper and lower extents. For the * second, the overlapFunc is called to process the entire band. It * is responsible for clipping the rectangles in the band, though * this function provides the boundaries. * At the end of each band, the new region is coalesced, if possible, * to reduce the number of rectangles in the region. * *----------------------------------------------------------------------- */ /* static void*/ static void miRegionOp( register Region newReg, /* Place to store result */ Region reg1, /* First region in operation */ Region reg2, /* 2d region in operation */ int (*overlapFunc)( register Region pReg, register BoxPtr r1, BoxPtr r1End, register BoxPtr r2, BoxPtr r2End, short y1, short y2), /* Function to call for over- * lapping bands */ int (*nonOverlap1Func)( register Region pReg, register BoxPtr r, BoxPtr rEnd, register short y1, register short y2), /* Function to call for non- * overlapping bands in region * 1 */ int (*nonOverlap2Func)( register Region pReg, register BoxPtr r, BoxPtr rEnd, register short y1, register short y2)) /* Function to call for non- * overlapping bands in region * 2 */ { register BoxPtr r1; /* Pointer into first region */ register BoxPtr r2; /* Pointer into 2d region */ BoxPtr r1End; /* End of 1st region */ BoxPtr r2End; /* End of 2d region */ register short ybot; /* Bottom of intersection */ register short ytop; /* Top of intersection */ BoxPtr oldRects; /* Old rects for newReg */ int prevBand; /* Index of start of * previous band in newReg */ int curBand; /* Index of start of current * band in newReg */ register BoxPtr r1BandEnd; /* End of current band in r1 */ register BoxPtr r2BandEnd; /* End of current band in r2 */ short top; /* Top of non-overlapping * band */ short bot; /* Bottom of non-overlapping * band */ /* * Initialization: * set r1, r2, r1End and r2End appropriately, preserve the important * parts of the destination region until the end in case it's one of * the two source regions, then mark the "new" region empty, allocating * another array of rectangles for it to use. */ r1 = reg1->rects; r2 = reg2->rects; r1End = r1 + reg1->numRects; r2End = r2 + reg2->numRects; oldRects = newReg->rects; EMPTY_REGION(newReg); /* * Allocate a reasonable number of rectangles for the new region. The idea * is to allocate enough so the individual functions don't need to * reallocate and copy the array, which is time consuming, yet we don't * have to worry about using too much memory. I hope to be able to * nuke the Xrealloc() at the end of this function eventually. */ newReg->size = max(reg1->numRects,reg2->numRects) * 2; if (! (newReg->rects = Xmalloc (sizeof(BoxRec) * newReg->size))) { newReg->size = 0; return; } /* * Initialize ybot and ytop. * In the upcoming loop, ybot and ytop serve different functions depending * on whether the band being handled is an overlapping or non-overlapping * band. * In the case of a non-overlapping band (only one of the regions * has points in the band), ybot is the bottom of the most recent * intersection and thus clips the top of the rectangles in that band. * ytop is the top of the next intersection between the two regions and * serves to clip the bottom of the rectangles in the current band. * For an overlapping band (where the two regions intersect), ytop clips * the top of the rectangles of both regions and ybot clips the bottoms. */ if (reg1->extents.y1 < reg2->extents.y1) ybot = reg1->extents.y1; else ybot = reg2->extents.y1; /* * prevBand serves to mark the start of the previous band so rectangles * can be coalesced into larger rectangles. qv. miCoalesce, above. * In the beginning, there is no previous band, so prevBand == curBand * (curBand is set later on, of course, but the first band will always * start at index 0). prevBand and curBand must be indices because of * the possible expansion, and resultant moving, of the new region's * array of rectangles. */ prevBand = 0; do { curBand = newReg->numRects; /* * This algorithm proceeds one source-band (as opposed to a * destination band, which is determined by where the two regions * intersect) at a time. r1BandEnd and r2BandEnd serve to mark the * rectangle after the last one in the current band for their * respective regions. */ r1BandEnd = r1; while ((r1BandEnd != r1End) && (r1BandEnd->y1 == r1->y1)) { r1BandEnd++; } r2BandEnd = r2; while ((r2BandEnd != r2End) && (r2BandEnd->y1 == r2->y1)) { r2BandEnd++; } /* * First handle the band that doesn't intersect, if any. * * Note that attention is restricted to one band in the * non-intersecting region at once, so if a region has n * bands between the current position and the next place it overlaps * the other, this entire loop will be passed through n times. */ if (r1->y1 < r2->y1) { top = max(r1->y1,ybot); bot = min(r1->y2,r2->y1); if ((top != bot) && (nonOverlap1Func != NULL)) { (* nonOverlap1Func) (newReg, r1, r1BandEnd, top, bot); } ytop = r2->y1; } else if (r2->y1 < r1->y1) { top = max(r2->y1,ybot); bot = min(r2->y2,r1->y1); if ((top != bot) && (nonOverlap2Func != NULL)) { (* nonOverlap2Func) (newReg, r2, r2BandEnd, top, bot); } ytop = r1->y1; } else { ytop = r1->y1; } /* * If any rectangles got added to the region, try and coalesce them * with rectangles from the previous band. Note we could just do * this test in miCoalesce, but some machines incur a not * inconsiderable cost for function calls, so... */ if (newReg->numRects != curBand) { prevBand = miCoalesce (newReg, prevBand, curBand); } /* * Now see if we've hit an intersecting band. The two bands only * intersect if ybot > ytop */ ybot = min(r1->y2, r2->y2); curBand = newReg->numRects; if (ybot > ytop) { (* overlapFunc) (newReg, r1, r1BandEnd, r2, r2BandEnd, ytop, ybot); } if (newReg->numRects != curBand) { prevBand = miCoalesce (newReg, prevBand, curBand); } /* * If we've finished with a band (y2 == ybot) we skip forward * in the region to the next band. */ if (r1->y2 == ybot) { r1 = r1BandEnd; } if (r2->y2 == ybot) { r2 = r2BandEnd; } } while ((r1 != r1End) && (r2 != r2End)); /* * Deal with whichever region still has rectangles left. */ curBand = newReg->numRects; if (r1 != r1End) { if (nonOverlap1Func != NULL) { do { r1BandEnd = r1; while ((r1BandEnd < r1End) && (r1BandEnd->y1 == r1->y1)) { r1BandEnd++; } (* nonOverlap1Func) (newReg, r1, r1BandEnd, max(r1->y1,ybot), r1->y2); r1 = r1BandEnd; } while (r1 != r1End); } } else if ((r2 != r2End) && (nonOverlap2Func != NULL)) { do { r2BandEnd = r2; while ((r2BandEnd < r2End) && (r2BandEnd->y1 == r2->y1)) { r2BandEnd++; } (* nonOverlap2Func) (newReg, r2, r2BandEnd, max(r2->y1,ybot), r2->y2); r2 = r2BandEnd; } while (r2 != r2End); } if (newReg->numRects != curBand) { (void) miCoalesce (newReg, prevBand, curBand); } /* * A bit of cleanup. To keep regions from growing without bound, * we shrink the array of rectangles to match the new number of * rectangles in the region. This never goes to 0, however... * * Only do this stuff if the number of rectangles allocated is more than * twice the number of rectangles in the region (a simple optimization...). */ if (newReg->numRects < (newReg->size >> 1)) { if (REGION_NOT_EMPTY(newReg)) { BoxPtr prev_rects = newReg->rects; newReg->rects = Xrealloc (newReg->rects, sizeof(BoxRec) * newReg->numRects); if (! newReg->rects) newReg->rects = prev_rects; else newReg->size = newReg->numRects; } else { /* * No point in doing the extra work involved in an Xrealloc if * the region is empty */ newReg->size = 1; Xfree(newReg->rects); newReg->rects = Xmalloc(sizeof(BoxRec)); } } Xfree (oldRects); return; } /*====================================================================== * Region Union *====================================================================*/ /*- *----------------------------------------------------------------------- * miUnionNonO -- * Handle a non-overlapping band for the union operation. Just * Adds the rectangles into the region. Doesn't have to check for * subsumption or anything. * * Results: * None. * * Side Effects: * pReg->numRects is incremented and the final rectangles overwritten * with the rectangles we're passed. * *----------------------------------------------------------------------- */ /* static void*/ static int miUnionNonO ( register Region pReg, register BoxPtr r, BoxPtr rEnd, register short y1, register short y2) { register BoxPtr pNextRect; pNextRect = &pReg->rects[pReg->numRects]; assert(y1 < y2); while (r != rEnd) { assert(r->x1 < r->x2); MEMCHECK(pReg, pNextRect, pReg->rects); pNextRect->x1 = r->x1; pNextRect->y1 = y1; pNextRect->x2 = r->x2; pNextRect->y2 = y2; pReg->numRects += 1; pNextRect++; assert(pReg->numRects<=pReg->size); r++; } return 0; /* lint */ } /*- *----------------------------------------------------------------------- * miUnionO -- * Handle an overlapping band for the union operation. Picks the * left-most rectangle each time and merges it into the region. * * Results: * None. * * Side Effects: * Rectangles are overwritten in pReg->rects and pReg->numRects will * be changed. * *----------------------------------------------------------------------- */ /* static void*/ static int miUnionO ( register Region pReg, register BoxPtr r1, BoxPtr r1End, register BoxPtr r2, BoxPtr r2End, register short y1, register short y2) { register BoxPtr pNextRect; pNextRect = &pReg->rects[pReg->numRects]; #define MERGERECT(r) \ if ((pReg->numRects != 0) && \ (pNextRect[-1].y1 == y1) && \ (pNextRect[-1].y2 == y2) && \ (pNextRect[-1].x2 >= r->x1)) \ { \ if (pNextRect[-1].x2 < r->x2) \ { \ pNextRect[-1].x2 = r->x2; \ assert(pNextRect[-1].x1rects); \ pNextRect->y1 = y1; \ pNextRect->y2 = y2; \ pNextRect->x1 = r->x1; \ pNextRect->x2 = r->x2; \ pReg->numRects += 1; \ pNextRect += 1; \ } \ assert(pReg->numRects<=pReg->size);\ r++; assert (y1x1 < r2->x1) { MERGERECT(r1); } else { MERGERECT(r2); } } if (r1 != r1End) { do { MERGERECT(r1); } while (r1 != r1End); } else while (r2 != r2End) { MERGERECT(r2); } return 0; /* lint */ } int XUnionRegion( Region reg1, Region reg2, /* source regions */ Region newReg) /* destination Region */ { /* checks all the simple cases */ /* * Region 1 and 2 are the same or region 1 is empty */ if ( (reg1 == reg2) || (!(reg1->numRects)) ) { if (newReg != reg2) return miRegionCopy(newReg, reg2); return 1; } /* * if nothing to union (region 2 empty) */ if (!(reg2->numRects)) { if (newReg != reg1) return miRegionCopy(newReg, reg1); return 1; } /* * Region 1 completely subsumes region 2 */ if ((reg1->numRects == 1) && (reg1->extents.x1 <= reg2->extents.x1) && (reg1->extents.y1 <= reg2->extents.y1) && (reg1->extents.x2 >= reg2->extents.x2) && (reg1->extents.y2 >= reg2->extents.y2)) { if (newReg != reg1) return miRegionCopy(newReg, reg1); return 1; } /* * Region 2 completely subsumes region 1 */ if ((reg2->numRects == 1) && (reg2->extents.x1 <= reg1->extents.x1) && (reg2->extents.y1 <= reg1->extents.y1) && (reg2->extents.x2 >= reg1->extents.x2) && (reg2->extents.y2 >= reg1->extents.y2)) { if (newReg != reg2) return miRegionCopy(newReg, reg2); return 1; } miRegionOp (newReg, reg1, reg2, miUnionO, miUnionNonO, miUnionNonO); newReg->extents.x1 = min(reg1->extents.x1, reg2->extents.x1); newReg->extents.y1 = min(reg1->extents.y1, reg2->extents.y1); newReg->extents.x2 = max(reg1->extents.x2, reg2->extents.x2); newReg->extents.y2 = max(reg1->extents.y2, reg2->extents.y2); return 1; } /*====================================================================== * Region Subtraction *====================================================================*/ /*- *----------------------------------------------------------------------- * miSubtractNonO -- * Deal with non-overlapping band for subtraction. Any parts from * region 2 we discard. Anything from region 1 we add to the region. * * Results: * None. * * Side Effects: * pReg may be affected. * *----------------------------------------------------------------------- */ /* static void*/ static int miSubtractNonO1 ( register Region pReg, register BoxPtr r, BoxPtr rEnd, register short y1, register short y2) { register BoxPtr pNextRect; pNextRect = &pReg->rects[pReg->numRects]; assert(y1x1x2); MEMCHECK(pReg, pNextRect, pReg->rects); pNextRect->x1 = r->x1; pNextRect->y1 = y1; pNextRect->x2 = r->x2; pNextRect->y2 = y2; pReg->numRects += 1; pNextRect++; assert(pReg->numRects <= pReg->size); r++; } return 0; /* lint */ } /*- *----------------------------------------------------------------------- * miSubtractO -- * Overlapping band subtraction. x1 is the left-most point not yet * checked. * * Results: * None. * * Side Effects: * pReg may have rectangles added to it. * *----------------------------------------------------------------------- */ /* static void*/ static int miSubtractO ( register Region pReg, register BoxPtr r1, BoxPtr r1End, register BoxPtr r2, BoxPtr r2End, register short y1, register short y2) { register BoxPtr pNextRect; register int x1; x1 = r1->x1; assert(y1rects[pReg->numRects]; while ((r1 != r1End) && (r2 != r2End)) { if (r2->x2 <= x1) { /* * Subtrahend missed the boat: go to next subtrahend. */ r2++; } else if (r2->x1 <= x1) { /* * Subtrahend preceeds minuend: nuke left edge of minuend. */ x1 = r2->x2; if (x1 >= r1->x2) { /* * Minuend completely covered: advance to next minuend and * reset left fence to edge of new minuend. */ r1++; if (r1 != r1End) x1 = r1->x1; } else { /* * Subtrahend now used up since it doesn't extend beyond * minuend */ r2++; } } else if (r2->x1 < r1->x2) { /* * Left part of subtrahend covers part of minuend: add uncovered * part of minuend to region and skip to next subtrahend. */ assert(x1x1); MEMCHECK(pReg, pNextRect, pReg->rects); pNextRect->x1 = x1; pNextRect->y1 = y1; pNextRect->x2 = r2->x1; pNextRect->y2 = y2; pReg->numRects += 1; pNextRect++; assert(pReg->numRects<=pReg->size); x1 = r2->x2; if (x1 >= r1->x2) { /* * Minuend used up: advance to new... */ r1++; if (r1 != r1End) x1 = r1->x1; } else { /* * Subtrahend used up */ r2++; } } else { /* * Minuend used up: add any remaining piece before advancing. */ if (r1->x2 > x1) { MEMCHECK(pReg, pNextRect, pReg->rects); pNextRect->x1 = x1; pNextRect->y1 = y1; pNextRect->x2 = r1->x2; pNextRect->y2 = y2; pReg->numRects += 1; pNextRect++; assert(pReg->numRects<=pReg->size); } r1++; if (r1 != r1End) x1 = r1->x1; } } /* * Add remaining minuend rectangles to region. */ while (r1 != r1End) { assert(x1x2); MEMCHECK(pReg, pNextRect, pReg->rects); pNextRect->x1 = x1; pNextRect->y1 = y1; pNextRect->x2 = r1->x2; pNextRect->y2 = y2; pReg->numRects += 1; pNextRect++; assert(pReg->numRects<=pReg->size); r1++; if (r1 != r1End) { x1 = r1->x1; } } return 0; /* lint */ } /*- *----------------------------------------------------------------------- * miSubtract -- * Subtract regS from regM and leave the result in regD. * S stands for subtrahend, M for minuend and D for difference. * * Results: * TRUE. * * Side Effects: * regD is overwritten. * *----------------------------------------------------------------------- */ int XSubtractRegion( Region regM, Region regS, register Region regD) { /* check for trivial reject */ if ( (!(regM->numRects)) || (!(regS->numRects)) || (!EXTENTCHECK(®M->extents, ®S->extents)) ) { return miRegionCopy(regD, regM); } miRegionOp (regD, regM, regS, miSubtractO, miSubtractNonO1, NULL); /* * Can't alter newReg's extents before we call miRegionOp because * it might be one of the source regions and miRegionOp depends * on the extents of those regions being the unaltered. Besides, this * way there's no checking against rectangles that will be nuked * due to coalescing, so we have to examine fewer rectangles. */ miSetExtents (regD); return 1; } int XXorRegion(Region sra, Region srb, Region dr) { Region tra, trb; if (! (tra = XCreateRegion()) ) return 0; if (! (trb = XCreateRegion()) ) { XDestroyRegion(tra); return 0; } (void) XSubtractRegion(sra,srb,tra); (void) XSubtractRegion(srb,sra,trb); (void) XUnionRegion(tra,trb,dr); XDestroyRegion(tra); XDestroyRegion(trb); return 0; } /* * Check to see if the region is empty. Assumes a region is passed * as a parameter */ int XEmptyRegion( Region r) { if( r->numRects == 0 ) return TRUE; else return FALSE; } /* * Check to see if two regions are equal */ int XEqualRegion(Region r1, Region r2) { int i; if( r1->numRects != r2->numRects ) return FALSE; else if( r1->numRects == 0 ) return TRUE; else if ( r1->extents.x1 != r2->extents.x1 ) return FALSE; else if ( r1->extents.x2 != r2->extents.x2 ) return FALSE; else if ( r1->extents.y1 != r2->extents.y1 ) return FALSE; else if ( r1->extents.y2 != r2->extents.y2 ) return FALSE; else for( i=0; i < r1->numRects; i++ ) { if ( r1->rects[i].x1 != r2->rects[i].x1 ) return FALSE; else if ( r1->rects[i].x2 != r2->rects[i].x2 ) return FALSE; else if ( r1->rects[i].y1 != r2->rects[i].y1 ) return FALSE; else if ( r1->rects[i].y2 != r2->rects[i].y2 ) return FALSE; } return TRUE; } int XPointInRegion( Region pRegion, int x, int y) { int i; if (pRegion->numRects == 0) return FALSE; if (!INBOX(pRegion->extents, x, y)) return FALSE; for (i=0; inumRects; i++) { if (INBOX (pRegion->rects[i], x, y)) return TRUE; } return FALSE; } int XRectInRegion( register Region region, int rx, int ry, unsigned int rwidth, unsigned int rheight) { register BoxPtr pbox; register BoxPtr pboxEnd; Box rect; register BoxPtr prect = ▭ int partIn, partOut; prect->x1 = rx; prect->y1 = ry; prect->x2 = rwidth + rx; prect->y2 = rheight + ry; /* this is (just) a useful optimization */ if ((region->numRects == 0) || !EXTENTCHECK(®ion->extents, prect)) return(RectangleOut); partOut = FALSE; partIn = FALSE; /* can stop when both partOut and partIn are TRUE, or we reach prect->y2 */ for (pbox = region->rects, pboxEnd = pbox + region->numRects; pbox < pboxEnd; pbox++) { if (pbox->y2 <= ry) continue; /* getting up to speed or skipping remainder of band */ if (pbox->y1 > ry) { partOut = TRUE; /* missed part of rectangle above */ if (partIn || (pbox->y1 >= prect->y2)) break; ry = pbox->y1; /* x guaranteed to be == prect->x1 */ } if (pbox->x2 <= rx) continue; /* not far enough over yet */ if (pbox->x1 > rx) { partOut = TRUE; /* missed part of rectangle to left */ if (partIn) break; } if (pbox->x1 < prect->x2) { partIn = TRUE; /* definitely overlap */ if (partOut) break; } if (pbox->x2 >= prect->x2) { ry = pbox->y2; /* finished with this band */ if (ry >= prect->y2) break; rx = prect->x1; /* reset x out to left again */ } else { /* * Because boxes in a band are maximal width, if the first box * to overlap the rectangle doesn't completely cover it in that * band, the rectangle must be partially out, since some of it * will be uncovered in that band. partIn will have been set true * by now... */ break; } } return(partIn ? ((ry < prect->y2) ? RectanglePart : RectangleIn) : RectangleOut); } Region newReg) /* destination Region */ { /* checks all the simple cases */ /* * Region 1 and 2 are the same or region 1 is empty */ if ( (reg1 == reg2) || (!(reg1->numRects)) ) { if (newReg != reg2) return miRegionCoplibX11-1.6.3/src/TextExt.c000064401431060000012000000152631247741723500154250ustar00alancstaff00002660200006/* Copyright 1989, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ /* * Copyright 1995 by FUJITSU LIMITED * This is source code modified by FUJITSU LIMITED under the Joint * Development Agreement for the CDE/Motif PST. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #define min_byte2 min_char_or_byte2 #define max_byte2 max_char_or_byte2 /* * CI_GET_ROWZERO_CHAR_INFO_2D - do the same thing as CI_GET_CHAR_INFO_1D, * except that the font has more than one row. This is special case of more * general version used in XTextExt16.c since row == 0. This is used when * max_byte2 is not zero. A further optimization would do the check for * min_byte1 being zero ahead of time. */ #define CI_GET_ROWZERO_CHAR_INFO_2D(fs,col,def,cs) \ { \ cs = def; \ if (fs->min_byte1 == 0 && \ col >= fs->min_byte2 && col <= fs->max_byte2) { \ if (fs->per_char == NULL) { \ cs = &fs->min_bounds; \ } else { \ cs = &fs->per_char[(col - fs->min_byte2)]; \ if (CI_NONEXISTCHAR(cs)) cs = def; \ } \ } \ } /* * XTextExtents - compute the extents of string given as a sequences of eight * bit bytes. Since we know that the input characters will always be from the * first row of the font (i.e. byte1 == 0), we can do some optimizations beyond * what is done in XTextExtents16. */ int XTextExtents ( XFontStruct *fs, _Xconst char *string, int nchars, int *dir, /* RETURN font information */ int *font_ascent, /* RETURN font information */ int *font_descent, /* RETURN font information */ register XCharStruct *overall) /* RETURN character information */ { int i; /* iterator */ Bool singlerow = (fs->max_byte1 == 0); /* optimization */ int nfound = 0; /* number of characters found */ XCharStruct *def; /* info about default char */ unsigned char *us; /* be 8bit clean */ if (singlerow) { /* optimization */ CI_GET_DEFAULT_INFO_1D (fs, def); } else { CI_GET_DEFAULT_INFO_2D (fs, def); } *dir = fs->direction; *font_ascent = fs->ascent; *font_descent = fs->descent; /* * Iterate over the input string getting the appropriate * char struct. * The default (which may be null if there is no def_char) will be returned * if the character doesn't exist. On the first time * through the loop, * assign the values to overall; otherwise, compute * the new values. */ for (i = 0, us = (unsigned char *) string; i < nchars; i++, us++) { register unsigned uc = (unsigned) *us; /* since about to do macro */ register XCharStruct *cs; if (singlerow) { /* optimization */ CI_GET_CHAR_INFO_1D (fs, uc, def, cs); } else { CI_GET_ROWZERO_CHAR_INFO_2D (fs, uc, def, cs); } if (cs) { if (nfound++ == 0) { *overall = *cs; } else { overall->ascent = max (overall->ascent, cs->ascent); overall->descent = max (overall->descent, cs->descent); overall->lbearing = min (overall->lbearing, overall->width + cs->lbearing); overall->rbearing = max (overall->rbearing, overall->width + cs->rbearing); overall->width += cs->width; } } } /* * if there were no characters, then set everything to 0 */ if (nfound == 0) { overall->width = overall->ascent = overall->descent = overall->lbearing = overall->rbearing = 0; } return 0; } /* * XTextWidth - compute the width of a string of eightbit bytes. This is a * subset of XTextExtents. */ int XTextWidth ( XFontStruct *fs, _Xconst char *string, int count) { int i; /* iterator */ Bool singlerow = (fs->max_byte1 == 0); /* optimization */ XCharStruct *def; /* info about default char */ unsigned char *us; /* be 8bit clean */ int width = 0; /* RETURN value */ if (singlerow) { /* optimization */ CI_GET_DEFAULT_INFO_1D (fs, def); } else { CI_GET_DEFAULT_INFO_2D (fs, def); } if (def && fs->min_bounds.width == fs->max_bounds.width) return (fs->min_bounds.width * count); /* * Iterate over all character in the input string; only consider characters * that exist. */ for (i = 0, us = (unsigned char *) string; i < count; i++, us++) { register unsigned uc = (unsigned) *us; /* since about to do macro */ register XCharStruct *cs; if (singlerow) { /* optimization */ CI_GET_CHAR_INFO_1D (fs, uc, def, cs); } else { CI_GET_ROWZERO_CHAR_INFO_2D (fs, uc, def, cs); } if (cs) width += cs->width; } return width; } /* * _XTextHeight - compute the height of a string of eightbit bytes. */ int _XTextHeight ( XFontStruct *fs, _Xconst char *string, int count) { int i; /* iterator */ Bool singlerow = (fs->max_byte1 == 0); /* optimization */ XCharStruct *def; /* info about default char */ unsigned char *us; /* be 8bit clean */ int height = 0; /* RETURN value */ if (singlerow) { /* optimization */ CI_GET_DEFAULT_INFO_1D (fs, def); } else { CI_GET_DEFAULT_INFO_2D (fs, def); } if (def && (fs->min_bounds.ascent == fs->max_bounds.ascent) && (fs->min_bounds.descent == fs->max_bounds.descent)) return ((fs->min_bounds.ascent + fs->min_bounds.descent) * count); /* * Iterate over all character in the input string; only consider characters * that exist. */ for (i = 0, us = (unsigned char *) string; i < count; i++, us++) { register unsigned uc = (unsigned) *us; /* since about to do macro */ register XCharStruct *cs; if (singlerow) { /* optimization */ CI_GET_CHAR_INFO_1D (fs, uc, def, cs); } else { CI_GET_ROWZERO_CHAR_INFO_2D (fs, uc, def, cs); } if (cs) height += (cs->ascent + cs->descent); } return height; } he appropriate * char struct. * The default (which may be null if there is no def_char) will be returned * if the character doesn't exist. On the first time * through the loop, * assign the values to overall; otherwise, compute * the new values. */ for (i = 0, us = (unsigned char *) string; i < nchars; i++libX11-1.6.3/src/PolyReg.c000064401431060000012000000430721247741723500154000ustar00alancstaff00002660200006/************************************************************************ Copyright 1987, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ************************************************************************/ #define LARGE_COORDINATE 1000000 #define SMALL_COORDINATE -LARGE_COORDINATE #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xutil.h" #include #include "poly.h" /* * InsertEdgeInET * * Insert the given edge into the edge table. * First we must find the correct bucket in the * Edge table, then find the right slot in the * bucket. Finally, we can insert it. * */ static void InsertEdgeInET( EdgeTable *ET, EdgeTableEntry *ETE, int scanline, ScanLineListBlock **SLLBlock, int *iSLLBlock) { register EdgeTableEntry *start, *prev; register ScanLineList *pSLL, *pPrevSLL; ScanLineListBlock *tmpSLLBlock; /* * find the right bucket to put the edge into */ pPrevSLL = &ET->scanlines; pSLL = pPrevSLL->next; while (pSLL && (pSLL->scanline < scanline)) { pPrevSLL = pSLL; pSLL = pSLL->next; } /* * reassign pSLL (pointer to ScanLineList) if necessary */ if ((!pSLL) || (pSLL->scanline > scanline)) { if (*iSLLBlock > SLLSPERBLOCK-1) { tmpSLLBlock = Xmalloc(sizeof(ScanLineListBlock)); (*SLLBlock)->next = tmpSLLBlock; tmpSLLBlock->next = (ScanLineListBlock *)NULL; *SLLBlock = tmpSLLBlock; *iSLLBlock = 0; } pSLL = &((*SLLBlock)->SLLs[(*iSLLBlock)++]); pSLL->next = pPrevSLL->next; pSLL->edgelist = (EdgeTableEntry *)NULL; pPrevSLL->next = pSLL; } pSLL->scanline = scanline; /* * now insert the edge in the right bucket */ prev = (EdgeTableEntry *)NULL; start = pSLL->edgelist; while (start && (start->bres.minor_axis < ETE->bres.minor_axis)) { prev = start; start = start->next; } ETE->next = start; if (prev) prev->next = ETE; else pSLL->edgelist = ETE; } /* * CreateEdgeTable * * This routine creates the edge table for * scan converting polygons. * The Edge Table (ET) looks like: * * EdgeTable * -------- * | ymax | ScanLineLists * |scanline|-->------------>-------------->... * -------- |scanline| |scanline| * |edgelist| |edgelist| * --------- --------- * | | * | | * V V * list of ETEs list of ETEs * * where ETE is an EdgeTableEntry data structure, * and there is one ScanLineList per scanline at * which an edge is initially entered. * */ static void CreateETandAET( register int count, register XPoint *pts, EdgeTable *ET, EdgeTableEntry *AET, register EdgeTableEntry *pETEs, ScanLineListBlock *pSLLBlock) { register XPoint *top, *bottom; register XPoint *PrevPt, *CurrPt; int iSLLBlock = 0; int dy; if (count < 2) return; /* * initialize the Active Edge Table */ AET->next = (EdgeTableEntry *)NULL; AET->back = (EdgeTableEntry *)NULL; AET->nextWETE = (EdgeTableEntry *)NULL; AET->bres.minor_axis = SMALL_COORDINATE; /* * initialize the Edge Table. */ ET->scanlines.next = (ScanLineList *)NULL; ET->ymax = SMALL_COORDINATE; ET->ymin = LARGE_COORDINATE; pSLLBlock->next = (ScanLineListBlock *)NULL; PrevPt = &pts[count-1]; /* * for each vertex in the array of points. * In this loop we are dealing with two vertices at * a time -- these make up one edge of the polygon. */ while (count--) { CurrPt = pts++; /* * find out which point is above and which is below. */ if (PrevPt->y > CurrPt->y) { bottom = PrevPt, top = CurrPt; pETEs->ClockWise = 0; } else { bottom = CurrPt, top = PrevPt; pETEs->ClockWise = 1; } /* * don't add horizontal edges to the Edge table. */ if (bottom->y != top->y) { pETEs->ymax = bottom->y-1; /* -1 so we don't get last scanline */ /* * initialize integer edge algorithm */ dy = bottom->y - top->y; BRESINITPGONSTRUCT(dy, top->x, bottom->x, pETEs->bres); InsertEdgeInET(ET, pETEs, top->y, &pSLLBlock, &iSLLBlock); if (PrevPt->y > ET->ymax) ET->ymax = PrevPt->y; if (PrevPt->y < ET->ymin) ET->ymin = PrevPt->y; pETEs++; } PrevPt = CurrPt; } } /* * loadAET * * This routine moves EdgeTableEntries from the * EdgeTable into the Active Edge Table, * leaving them sorted by smaller x coordinate. * */ static void loadAET( register EdgeTableEntry *AET, register EdgeTableEntry *ETEs) { register EdgeTableEntry *pPrevAET; register EdgeTableEntry *tmp; pPrevAET = AET; AET = AET->next; while (ETEs) { while (AET && (AET->bres.minor_axis < ETEs->bres.minor_axis)) { pPrevAET = AET; AET = AET->next; } tmp = ETEs->next; ETEs->next = AET; if (AET) AET->back = ETEs; ETEs->back = pPrevAET; pPrevAET->next = ETEs; pPrevAET = ETEs; ETEs = tmp; } } /* * computeWAET * * This routine links the AET by the * nextWETE (winding EdgeTableEntry) link for * use by the winding number rule. The final * Active Edge Table (AET) might look something * like: * * AET * ---------- --------- --------- * |ymax | |ymax | |ymax | * | ... | |... | |... | * |next |->|next |->|next |->... * |nextWETE| |nextWETE| |nextWETE| * --------- --------- ^-------- * | | | * V-------------------> V---> ... * */ static void computeWAET( register EdgeTableEntry *AET) { register EdgeTableEntry *pWETE; register int inside = 1; register int isInside = 0; AET->nextWETE = (EdgeTableEntry *)NULL; pWETE = AET; AET = AET->next; while (AET) { if (AET->ClockWise) isInside++; else isInside--; if ((!inside && !isInside) || ( inside && isInside)) { pWETE->nextWETE = AET; pWETE = AET; inside = !inside; } AET = AET->next; } pWETE->nextWETE = (EdgeTableEntry *)NULL; } /* * InsertionSort * * Just a simple insertion sort using * pointers and back pointers to sort the Active * Edge Table. * */ static int InsertionSort( register EdgeTableEntry *AET) { register EdgeTableEntry *pETEchase; register EdgeTableEntry *pETEinsert; register EdgeTableEntry *pETEchaseBackTMP; register int changed = 0; AET = AET->next; while (AET) { pETEinsert = AET; pETEchase = AET; while (pETEchase->back->bres.minor_axis > AET->bres.minor_axis) pETEchase = pETEchase->back; AET = AET->next; if (pETEchase != pETEinsert) { pETEchaseBackTMP = pETEchase->back; pETEinsert->back->next = AET; if (AET) AET->back = pETEinsert->back; pETEinsert->next = pETEchase; pETEchase->back->next = pETEinsert; pETEchase->back = pETEinsert; pETEinsert->back = pETEchaseBackTMP; changed = 1; } } return(changed); } /* * Clean up our act. */ static void FreeStorage( register ScanLineListBlock *pSLLBlock) { register ScanLineListBlock *tmpSLLBlock; while (pSLLBlock) { tmpSLLBlock = pSLLBlock->next; Xfree(pSLLBlock); pSLLBlock = tmpSLLBlock; } } /* * Create an array of rectangles from a list of points. * If indeed these things (POINTS, RECTS) are the same, * then this proc is still needed, because it allocates * storage for the array, which was allocated on the * stack by the calling procedure. * */ static int PtsToRegion( register int numFullPtBlocks, register int iCurPtBlock, POINTBLOCK *FirstPtBlock, REGION *reg) { register BOX *rects; register XPoint *pts; register POINTBLOCK *CurPtBlock; register int i; register BOX *extents; register int numRects; BOX *prevRects = reg->rects; extents = ®->extents; numRects = ((numFullPtBlocks * NUMPTSTOBUFFER) + iCurPtBlock) >> 1; if (!(reg->rects = Xrealloc(reg->rects, sizeof(BOX) * numRects))) { Xfree(prevRects); return(0); } reg->size = numRects; CurPtBlock = FirstPtBlock; rects = reg->rects - 1; numRects = 0; extents->x1 = MAXSHORT, extents->x2 = MINSHORT; for ( ; numFullPtBlocks >= 0; numFullPtBlocks--) { /* the loop uses 2 points per iteration */ i = NUMPTSTOBUFFER >> 1; if (!numFullPtBlocks) i = iCurPtBlock >> 1; for (pts = CurPtBlock->pts; i--; pts += 2) { if (pts->x == pts[1].x) continue; if (numRects && pts->x == rects->x1 && pts->y == rects->y2 && pts[1].x == rects->x2 && (numRects == 1 || rects[-1].y1 != rects->y1) && (i && pts[2].y > pts[1].y)) { rects->y2 = pts[1].y + 1; continue; } numRects++; rects++; rects->x1 = pts->x; rects->y1 = pts->y; rects->x2 = pts[1].x; rects->y2 = pts[1].y + 1; if (rects->x1 < extents->x1) extents->x1 = rects->x1; if (rects->x2 > extents->x2) extents->x2 = rects->x2; } CurPtBlock = CurPtBlock->next; } if (numRects) { extents->y1 = reg->rects->y1; extents->y2 = rects->y2; } else { extents->x1 = 0; extents->y1 = 0; extents->x2 = 0; extents->y2 = 0; } reg->numRects = numRects; return(TRUE); } /* * polytoregion * * Scan converts a polygon by returning a run-length * encoding of the resultant bitmap -- the run-length * encoding is in the form of an array of rectangles. */ Region XPolygonRegion( XPoint *Pts, /* the pts */ int Count, /* number of pts */ int rule) /* winding rule */ { Region region; register EdgeTableEntry *pAET; /* Active Edge Table */ register int y; /* current scanline */ register int iPts = 0; /* number of pts in buffer */ register EdgeTableEntry *pWETE; /* Winding Edge Table Entry*/ register ScanLineList *pSLL; /* current scanLineList */ register XPoint *pts; /* output buffer */ EdgeTableEntry *pPrevAET; /* ptr to previous AET */ EdgeTable ET; /* header node for ET */ EdgeTableEntry AET; /* header node for AET */ EdgeTableEntry *pETEs; /* EdgeTableEntries pool */ ScanLineListBlock SLLBlock; /* header for scanlinelist */ int fixWAET = FALSE; POINTBLOCK FirstPtBlock, *curPtBlock; /* PtBlock buffers */ POINTBLOCK *tmpPtBlock; int numFullPtBlocks = 0; if (! (region = XCreateRegion())) return (Region) NULL; /* special case a rectangle */ pts = Pts; if (((Count == 4) || ((Count == 5) && (pts[4].x == pts[0].x) && (pts[4].y == pts[0].y))) && (((pts[0].y == pts[1].y) && (pts[1].x == pts[2].x) && (pts[2].y == pts[3].y) && (pts[3].x == pts[0].x)) || ((pts[0].x == pts[1].x) && (pts[1].y == pts[2].y) && (pts[2].x == pts[3].x) && (pts[3].y == pts[0].y)))) { region->extents.x1 = min(pts[0].x, pts[2].x); region->extents.y1 = min(pts[0].y, pts[2].y); region->extents.x2 = max(pts[0].x, pts[2].x); region->extents.y2 = max(pts[0].y, pts[2].y); if ((region->extents.x1 != region->extents.x2) && (region->extents.y1 != region->extents.y2)) { region->numRects = 1; *(region->rects) = region->extents; } return(region); } if (Count < 2) return region; if (! (pETEs = Xmalloc(sizeof(EdgeTableEntry) * Count))) { XDestroyRegion(region); return (Region) NULL; } pts = FirstPtBlock.pts; CreateETandAET(Count, Pts, &ET, &AET, pETEs, &SLLBlock); pSLL = ET.scanlines.next; curPtBlock = &FirstPtBlock; if (rule == EvenOddRule) { /* * for each scanline */ for (y = ET.ymin; y < ET.ymax; y++) { /* * Add a new edge to the active edge table when we * get to the next edge. */ if (pSLL != NULL && y == pSLL->scanline) { loadAET(&AET, pSLL->edgelist); pSLL = pSLL->next; } pPrevAET = &AET; pAET = AET.next; /* * for each active edge */ while (pAET) { pts->x = pAET->bres.minor_axis, pts->y = y; pts++, iPts++; /* * send out the buffer */ if (iPts == NUMPTSTOBUFFER) { tmpPtBlock = Xmalloc(sizeof(POINTBLOCK)); curPtBlock->next = tmpPtBlock; curPtBlock = tmpPtBlock; pts = curPtBlock->pts; numFullPtBlocks++; iPts = 0; } EVALUATEEDGEEVENODD(pAET, pPrevAET, y); } (void) InsertionSort(&AET); } } else { /* * for each scanline */ for (y = ET.ymin; y < ET.ymax; y++) { /* * Add a new edge to the active edge table when we * get to the next edge. */ if (pSLL != NULL && y == pSLL->scanline) { loadAET(&AET, pSLL->edgelist); computeWAET(&AET); pSLL = pSLL->next; } pPrevAET = &AET; pAET = AET.next; pWETE = pAET; /* * for each active edge */ while (pAET) { /* * add to the buffer only those edges that * are in the Winding active edge table. */ if (pWETE == pAET) { pts->x = pAET->bres.minor_axis, pts->y = y; pts++, iPts++; /* * send out the buffer */ if (iPts == NUMPTSTOBUFFER) { tmpPtBlock = Xmalloc(sizeof(POINTBLOCK)); curPtBlock->next = tmpPtBlock; curPtBlock = tmpPtBlock; pts = curPtBlock->pts; numFullPtBlocks++; iPts = 0; } pWETE = pWETE->nextWETE; } EVALUATEEDGEWINDING(pAET, pPrevAET, y, fixWAET); } /* * recompute the winding active edge table if * we just resorted or have exited an edge. */ if (InsertionSort(&AET) || fixWAET) { computeWAET(&AET); fixWAET = FALSE; } } } FreeStorage(SLLBlock.next); (void) PtsToRegion(numFullPtBlocks, iPts, &FirstPtBlock, region); for (curPtBlock = FirstPtBlock.next; --numFullPtBlocks >= 0;) { tmpPtBlock = curPtBlock->next; Xfree(curPtBlock); curPtBlock = tmpPtBlock; } Xfree(pETEs); return(region); } WAET * * This routine links the AET by the * nextWETE (winding EdgeTableEntry) link for * use by the winding number rule. The final * Active Edge Table (AET) might look something * like: * * AET * ---------- --------- --------- * |ymax | |ymax | |ymax | * | ... | |... | |... | * |next |->|next |->|next |->... * |nextWETE| |nextWETE| |nextWETE| * -----libX11-1.6.3/src/GrPointer.c000064401431060000012000000040271247741723500157250ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XGrabPointer( register Display *dpy, Window grab_window, Bool owner_events, unsigned int event_mask, /* CARD16 */ int pointer_mode, int keyboard_mode, Window confine_to, Cursor curs, Time time) { xGrabPointerReply rep; register xGrabPointerReq *req; register int status; LockDisplay(dpy); GetReq(GrabPointer, req); req->grabWindow = grab_window; req->ownerEvents = owner_events; req->eventMask = event_mask; req->pointerMode = pointer_mode; req->keyboardMode = keyboard_mode; req->confineTo = confine_to; req->cursor = curs; req->time = time; /* if we ever return, suppress the error */ if (_XReply (dpy, (xReply *) &rep, 0, xTrue) == 0) rep.status = GrabSuccess; status = rep.status; UnlockDisplay(dpy); SyncHandle(); return (status); } libX11-1.6.3/src/PolyTxt16.c000064401431060000012000000135401247741723500156060ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XDrawText16( register Display *dpy, Drawable d, GC gc, int x, int y, XTextItem16 *items, int nitems) { register int i; register XTextItem16 *item; int length = 0; register xPolyText16Req *req; LockDisplay(dpy); FlushGC(dpy, gc); GetReq (PolyText16, req); req->drawable = d; req->gc = gc->gid; req->x = x; req->y = y; item = items; for (i=0; i < nitems; i++) { if (item->font) length += 5; /* a 255 byte, plus size of Font id */ if (item->delta) { if (item->delta > 0) { length += SIZEOF(xTextElt) * ((item->delta + 126) / 127); } else { length += SIZEOF(xTextElt) * ((-item->delta + 127) / 128); } } if (item->nchars > 0) { length += SIZEOF(xTextElt) * ((item->nchars + 253) / 254 - 1); if (!item->delta) length += SIZEOF(xTextElt); length += item->nchars << 1; } item++; } req->length += (length + 3)>>2; /* convert to number of 32-bit words */ /* * If the entire request does not fit into the remaining space in the * buffer, flush the buffer first. If the request does fit into the * empty buffer, then we won't have to flush it at the end to keep * the buffer 32-bit aligned. */ if (dpy->bufptr + length > dpy->bufmax) _XFlush (dpy); item = items; for (i=0; i< nitems; i++) { if (item->font) { /* to mark a font shift, write a 255 byte followed by the 4 bytes of font ID, big-end first */ register unsigned char *f; BufAlloc (unsigned char *, f, 5); f[0] = 255; f[1] = (item->font & 0xff000000) >> 24; f[2] = (item->font & 0x00ff0000) >> 16; f[3] = (item->font & 0x0000ff00) >> 8; f[4] = item->font & 0x000000ff; /* update GC shadow */ gc->values.font = item->font; } { int nbytes = SIZEOF(xTextElt); int PartialNChars = item->nchars; int PartialDelta = item->delta; register xTextElt *elt = NULL; int FirstTimeThrough = True; XChar2b *CharacterOffset = item->chars; while((PartialDelta < -128) || (PartialDelta > 127)) { int nb = SIZEOF(xTextElt); BufAlloc (xTextElt *, elt, nb); elt->len = 0; if (PartialDelta > 0 ) { elt->delta = 127; PartialDelta = PartialDelta - 127; } else { elt->delta = -128; PartialDelta = PartialDelta + 128; } } if (PartialDelta) { BufAlloc (xTextElt *, elt, nbytes); elt->len = 0; elt->delta = PartialDelta; } while(PartialNChars > 254) { nbytes = 254 * 2; if (FirstTimeThrough) { FirstTimeThrough = False; if (!item->delta) { nbytes += SIZEOF(xTextElt); BufAlloc (xTextElt *, elt, nbytes); elt->delta = 0; } else { char *DummyChar; BufAlloc(char *, DummyChar, nbytes); #ifdef lint DummyChar = DummyChar; #endif } } else { nbytes += SIZEOF(xTextElt); BufAlloc (xTextElt *, elt, nbytes); elt->delta = 0; } elt->len = 254; memcpy ((char *) (elt + 1), (char *)CharacterOffset, 254 * 2); PartialNChars = PartialNChars - 254; CharacterOffset += 254; } if (PartialNChars) { nbytes = PartialNChars * 2; if (FirstTimeThrough) { FirstTimeThrough = False; if (!item->delta) { nbytes += SIZEOF(xTextElt); BufAlloc (xTextElt *, elt, nbytes); elt->delta = 0; } else { char *DummyChar; BufAlloc(char *, DummyChar, nbytes); #ifdef lint DummyChar = DummyChar; #endif } } else { nbytes += SIZEOF(xTextElt); BufAlloc (xTextElt *, elt, nbytes); elt->delta = 0; } elt->len = PartialNChars; memcpy ((char *) (elt + 1), (char *)CharacterOffset, PartialNChars * 2); } } item++; } /* Pad request out to a 32-bit boundary */ if (length &= 3) { char *pad; /* * BufAlloc is a macro that uses its last argument more than * once, otherwise I'd write "BufAlloc (char *, pad, 4-length)" */ length = 4 - length; BufAlloc (char *, pad, length); /* * if there are 3 bytes of padding, the first byte MUST be 0 * so the pad bytes aren't mistaken for a final xTextElt */ *pad = 0; } /* * If the buffer pointer is not now pointing to a 32-bit boundary, * we must flush the buffer so that it does point to a 32-bit boundary * at the end of this routine. */ if ((dpy->bufptr - dpy->buffer) & 3) _XFlush (dpy); UnlockDisplay(dpy); SyncHandle(); return 1; } gister XTextItem16 *item; int length = 0; register xPolyText16Req *req; LockDisplay(dpy); FlushGC(dpy, gc); GetReq (PolyText16, req); rlibX11-1.6.3/src/PmapBord.c000064401431060000012000000031161247741723500155160ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XSetWindowBorderPixmap( register Display *dpy, Window w, Pixmap pixmap) { register xChangeWindowAttributesReq *req; LockDisplay(dpy); GetReqExtra (ChangeWindowAttributes, 4, req); req->window = w; req->valueMask = CWBorderPixmap; OneDataCard32 (dpy, NEXTPTR(req,xChangeWindowAttributesReq), pixmap); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/GetSSaver.c000064401431060000012000000033621247741723500156600ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XGetScreenSaver( register Display *dpy, /* the following are return only vars */ int *timeout, int *interval, int *prefer_blanking, int *allow_exp) /*boolean */ { xGetScreenSaverReply rep; register xReq *req; LockDisplay(dpy); GetEmptyReq(GetScreenSaver, req); (void) _XReply (dpy, (xReply *)&rep, 0, xTrue); *timeout = rep.timeout; *interval = rep.interval; *prefer_blanking = rep.preferBlanking; *allow_exp = rep.allowExposures; UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/ConvSel.c000064401431060000012000000031711247741723500153640ustar00alancstaff00002660200006/* Copyright 1986,1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XConvertSelection( register Display *dpy, Atom selection, Atom target, Atom property, Window requestor, Time time) { register xConvertSelectionReq *req; LockDisplay(dpy); GetReq(ConvertSelection, req); req->selection = selection; req->target = target; req->property = property; req->requestor = requestor; req->time = time; UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/KeyBind.c000064401431060000012000001020751247741723500153430ustar00alancstaff00002660200006/* Copyright 1985, 1987, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ /* Beware, here be monsters (still under construction... - JG */ #ifdef HAVE_CONFIG_H #include #endif #include #include #define XK_MISCELLANY #define XK_LATIN1 #define XK_LATIN2 #define XK_LATIN3 #define XK_LATIN4 #define XK_LATIN8 #define XK_LATIN9 #define XK_CYRILLIC #define XK_GREEK #define XK_ARMENIAN #define XK_CAUCASUS #define XK_VIETNAMESE #define XK_XKB_KEYS #define XK_SINHALA #include #include #include "Xresource.h" #include "Key.h" #ifdef XKB #include "XKBlib.h" #include "XKBlibint.h" #define XKeycodeToKeysym _XKeycodeToKeysym #define XKeysymToKeycode _XKeysymToKeycode #define XLookupKeysym _XLookupKeysym #define XRefreshKeyboardMapping _XRefreshKeyboardMapping #define XLookupString _XLookupString /* XKBBind.c */ #else #define XkbKeysymToModifiers _XKeysymToModifiers #endif #define AllMods (ShiftMask|LockMask|ControlMask| \ Mod1Mask|Mod2Mask|Mod3Mask|Mod4Mask|Mod5Mask) static void ComputeMaskFromKeytrans( Display *dpy, register struct _XKeytrans *p); struct _XKeytrans { struct _XKeytrans *next;/* next on list */ char *string; /* string to return when the time comes */ int len; /* length of string (since NULL is legit)*/ KeySym key; /* keysym rebound */ unsigned int state; /* modifier state */ KeySym *modifiers; /* modifier keysyms you want */ int mlen; /* length of modifier list */ }; static KeySym KeyCodetoKeySym(register Display *dpy, KeyCode keycode, int col) { register int per = dpy->keysyms_per_keycode; register KeySym *syms; KeySym lsym, usym; if ((col < 0) || ((col >= per) && (col > 3)) || ((int)keycode < dpy->min_keycode) || ((int)keycode > dpy->max_keycode)) return NoSymbol; syms = &dpy->keysyms[(keycode - dpy->min_keycode) * per]; if (col < 4) { if (col > 1) { while ((per > 2) && (syms[per - 1] == NoSymbol)) per--; if (per < 3) col -= 2; } if ((per <= (col|1)) || (syms[col|1] == NoSymbol)) { XConvertCase(syms[col&~1], &lsym, &usym); if (!(col & 1)) return lsym; else if (usym == lsym) return NoSymbol; else return usym; } } return syms[col]; } KeySym XKeycodeToKeysym(Display *dpy, #if NeedWidePrototypes unsigned int kc, #else KeyCode kc, #endif int col) { if ((! dpy->keysyms) && (! _XKeyInitialize(dpy))) return NoSymbol; return KeyCodetoKeySym(dpy, kc, col); } KeyCode XKeysymToKeycode( Display *dpy, KeySym ks) { register int i, j; if ((! dpy->keysyms) && (! _XKeyInitialize(dpy))) return (KeyCode) 0; for (j = 0; j < dpy->keysyms_per_keycode; j++) { for (i = dpy->min_keycode; i <= dpy->max_keycode; i++) { if (KeyCodetoKeySym(dpy, (KeyCode) i, j) == ks) return i; } } return 0; } KeySym XLookupKeysym( register XKeyEvent *event, int col) { if ((! event->display->keysyms) && (! _XKeyInitialize(event->display))) return NoSymbol; return KeyCodetoKeySym(event->display, event->keycode, col); } static void ResetModMap( Display *dpy) { register XModifierKeymap *map; register int i, j, n; KeySym sym; register struct _XKeytrans *p; map = dpy->modifiermap; /* If any Lock key contains Caps_Lock, then interpret as Caps_Lock, * else if any contains Shift_Lock, then interpret as Shift_Lock, * else ignore Lock altogether. */ dpy->lock_meaning = NoSymbol; /* Lock modifiers are in the second row of the matrix */ n = 2 * map->max_keypermod; for (i = map->max_keypermod; i < n; i++) { for (j = 0; j < dpy->keysyms_per_keycode; j++) { sym = KeyCodetoKeySym(dpy, map->modifiermap[i], j); if (sym == XK_Caps_Lock) { dpy->lock_meaning = XK_Caps_Lock; break; } else if (sym == XK_Shift_Lock) { dpy->lock_meaning = XK_Shift_Lock; } else if (sym == XK_ISO_Lock) { dpy->lock_meaning = XK_Caps_Lock; break; } } } /* Now find any Mod modifier acting as the Group or Numlock modifier */ dpy->mode_switch = 0; dpy->num_lock = 0; n *= 4; for (i = 3*map->max_keypermod; i < n; i++) { for (j = 0; j < dpy->keysyms_per_keycode; j++) { sym = KeyCodetoKeySym(dpy, map->modifiermap[i], j); if (sym == XK_Mode_switch) dpy->mode_switch |= 1 << (i / map->max_keypermod); if (sym == XK_Num_Lock) dpy->num_lock |= 1 << (i / map->max_keypermod); } } for (p = dpy->key_bindings; p; p = p->next) ComputeMaskFromKeytrans(dpy, p); } static int InitModMap( Display *dpy) { register XModifierKeymap *map; if (! (map = XGetModifierMapping(dpy))) return 0; LockDisplay(dpy); if (dpy->modifiermap) XFreeModifiermap(dpy->modifiermap); dpy->modifiermap = map; dpy->free_funcs->modifiermap = XFreeModifiermap; if (dpy->keysyms) ResetModMap(dpy); UnlockDisplay(dpy); return 1; } int XRefreshKeyboardMapping(register XMappingEvent *event) { if(event->request == MappingKeyboard) { /* XXX should really only refresh what is necessary * for now, make initialize test fail */ LockDisplay(event->display); if (event->display->keysyms) { Xfree (event->display->keysyms); event->display->keysyms = NULL; } UnlockDisplay(event->display); } if(event->request == MappingModifier) { LockDisplay(event->display); if (event->display->modifiermap) { XFreeModifiermap(event->display->modifiermap); event->display->modifiermap = NULL; } UnlockDisplay(event->display); /* go ahead and get it now, since initialize test may not fail */ if (event->display->keysyms) (void) InitModMap(event->display); } return 1; } int _XKeyInitialize( Display *dpy) { int per, n; KeySym *keysyms; /* * lets go get the keysyms from the server. */ if (!dpy->keysyms) { n = dpy->max_keycode - dpy->min_keycode + 1; keysyms = XGetKeyboardMapping (dpy, (KeyCode) dpy->min_keycode, n, &per); /* keysyms may be NULL */ if (! keysyms) return 0; LockDisplay(dpy); Xfree (dpy->keysyms); dpy->keysyms = keysyms; dpy->keysyms_per_keycode = per; if (dpy->modifiermap) ResetModMap(dpy); UnlockDisplay(dpy); } if (!dpy->modifiermap) return InitModMap(dpy); return 1; } static void UCSConvertCase( register unsigned code, KeySym *lower, KeySym *upper ) { /* Case conversion for UCS, as in Unicode Data version 4.0.0 */ /* NB: Only converts simple one-to-one mappings. */ /* Tables are used where they take less space than */ /* the code to work out the mappings. Zero values mean */ /* undefined code points. */ static unsigned short const IPAExt_upper_mapping[] = { /* part only */ 0x0181, 0x0186, 0x0255, 0x0189, 0x018A, 0x0258, 0x018F, 0x025A, 0x0190, 0x025C, 0x025D, 0x025E, 0x025F, 0x0193, 0x0261, 0x0262, 0x0194, 0x0264, 0x0265, 0x0266, 0x0267, 0x0197, 0x0196, 0x026A, 0x026B, 0x026C, 0x026D, 0x026E, 0x019C, 0x0270, 0x0271, 0x019D, 0x0273, 0x0274, 0x019F, 0x0276, 0x0277, 0x0278, 0x0279, 0x027A, 0x027B, 0x027C, 0x027D, 0x027E, 0x027F, 0x01A6, 0x0281, 0x0282, 0x01A9, 0x0284, 0x0285, 0x0286, 0x0287, 0x01AE, 0x0289, 0x01B1, 0x01B2, 0x028C, 0x028D, 0x028E, 0x028F, 0x0290, 0x0291, 0x01B7 }; static unsigned short const LatinExtB_upper_mapping[] = { /* first part only */ 0x0180, 0x0181, 0x0182, 0x0182, 0x0184, 0x0184, 0x0186, 0x0187, 0x0187, 0x0189, 0x018A, 0x018B, 0x018B, 0x018D, 0x018E, 0x018F, 0x0190, 0x0191, 0x0191, 0x0193, 0x0194, 0x01F6, 0x0196, 0x0197, 0x0198, 0x0198, 0x019A, 0x019B, 0x019C, 0x019D, 0x0220, 0x019F, 0x01A0, 0x01A0, 0x01A2, 0x01A2, 0x01A4, 0x01A4, 0x01A6, 0x01A7, 0x01A7, 0x01A9, 0x01AA, 0x01AB, 0x01AC, 0x01AC, 0x01AE, 0x01AF, 0x01AF, 0x01B1, 0x01B2, 0x01B3, 0x01B3, 0x01B5, 0x01B5, 0x01B7, 0x01B8, 0x01B8, 0x01BA, 0x01BB, 0x01BC, 0x01BC, 0x01BE, 0x01F7, 0x01C0, 0x01C1, 0x01C2, 0x01C3, 0x01C4, 0x01C4, 0x01C4, 0x01C7, 0x01C7, 0x01C7, 0x01CA, 0x01CA, 0x01CA }; static unsigned short const LatinExtB_lower_mapping[] = { /* first part only */ 0x0180, 0x0253, 0x0183, 0x0183, 0x0185, 0x0185, 0x0254, 0x0188, 0x0188, 0x0256, 0x0257, 0x018C, 0x018C, 0x018D, 0x01DD, 0x0259, 0x025B, 0x0192, 0x0192, 0x0260, 0x0263, 0x0195, 0x0269, 0x0268, 0x0199, 0x0199, 0x019A, 0x019B, 0x026F, 0x0272, 0x019E, 0x0275, 0x01A1, 0x01A1, 0x01A3, 0x01A3, 0x01A5, 0x01A5, 0x0280, 0x01A8, 0x01A8, 0x0283, 0x01AA, 0x01AB, 0x01AD, 0x01AD, 0x0288, 0x01B0, 0x01B0, 0x028A, 0x028B, 0x01B4, 0x01B4, 0x01B6, 0x01B6, 0x0292, 0x01B9, 0x01B9, 0x01BA, 0x01BB, 0x01BD, 0x01BD, 0x01BE, 0x01BF, 0x01C0, 0x01C1, 0x01C2, 0x01C3, 0x01C6, 0x01C6, 0x01C6, 0x01C9, 0x01C9, 0x01C9, 0x01CC, 0x01CC, 0x01CC }; static unsigned short const Greek_upper_mapping[] = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0374, 0x0375, 0x0000, 0x0000, 0x0000, 0x0000, 0x037A, 0x0000, 0x0000, 0x0000, 0x037E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0384, 0x0385, 0x0386, 0x0387, 0x0388, 0x0389, 0x038A, 0x0000, 0x038C, 0x0000, 0x038E, 0x038F, 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, 0x03A0, 0x03A1, 0x0000, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, 0x03AA, 0x03AB, 0x0386, 0x0388, 0x0389, 0x038A, 0x03B0, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, 0x03A0, 0x03A1, 0x03A3, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, 0x03AA, 0x03AB, 0x038C, 0x038E, 0x038F, 0x0000, 0x0392, 0x0398, 0x03D2, 0x03D3, 0x03D4, 0x03A6, 0x03A0, 0x03D7, 0x03D8, 0x03D8, 0x03DA, 0x03DA, 0x03DC, 0x03DC, 0x03DE, 0x03DE, 0x03E0, 0x03E0, 0x03E2, 0x03E2, 0x03E4, 0x03E4, 0x03E6, 0x03E6, 0x03E8, 0x03E8, 0x03EA, 0x03EA, 0x03EC, 0x03EC, 0x03EE, 0x03EE, 0x039A, 0x03A1, 0x03F9, 0x03F3, 0x03F4, 0x0395, 0x03F6, 0x03F7, 0x03F7, 0x03F9, 0x03FA, 0x03FA, 0x0000, 0x0000, 0x0000, 0x0000 }; static unsigned short const Greek_lower_mapping[] = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0374, 0x0375, 0x0000, 0x0000, 0x0000, 0x0000, 0x037A, 0x0000, 0x0000, 0x0000, 0x037E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0384, 0x0385, 0x03AC, 0x0387, 0x03AD, 0x03AE, 0x03AF, 0x0000, 0x03CC, 0x0000, 0x03CD, 0x03CE, 0x0390, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x0000, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, 0x03C9, 0x03CA, 0x03CB, 0x03AC, 0x03AD, 0x03AE, 0x03AF, 0x03B0, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, 0x03C9, 0x03CA, 0x03CB, 0x03CC, 0x03CD, 0x03CE, 0x0000, 0x03D0, 0x03D1, 0x03D2, 0x03D3, 0x03D4, 0x03D5, 0x03D6, 0x03D7, 0x03D9, 0x03D9, 0x03DB, 0x03DB, 0x03DD, 0x03DD, 0x03DF, 0x03DF, 0x03E1, 0x03E1, 0x03E3, 0x03E3, 0x03E5, 0x03E5, 0x03E7, 0x03E7, 0x03E9, 0x03E9, 0x03EB, 0x03EB, 0x03ED, 0x03ED, 0x03EF, 0x03EF, 0x03F0, 0x03F1, 0x03F2, 0x03F3, 0x03B8, 0x03F5, 0x03F6, 0x03F8, 0x03F8, 0x03F2, 0x03FB, 0x03FB, 0x0000, 0x0000, 0x0000, 0x0000 }; static unsigned short const GreekExt_lower_mapping[] = { 0x1F00, 0x1F01, 0x1F02, 0x1F03, 0x1F04, 0x1F05, 0x1F06, 0x1F07, 0x1F00, 0x1F01, 0x1F02, 0x1F03, 0x1F04, 0x1F05, 0x1F06, 0x1F07, 0x1F10, 0x1F11, 0x1F12, 0x1F13, 0x1F14, 0x1F15, 0x0000, 0x0000, 0x1F10, 0x1F11, 0x1F12, 0x1F13, 0x1F14, 0x1F15, 0x0000, 0x0000, 0x1F20, 0x1F21, 0x1F22, 0x1F23, 0x1F24, 0x1F25, 0x1F26, 0x1F27, 0x1F20, 0x1F21, 0x1F22, 0x1F23, 0x1F24, 0x1F25, 0x1F26, 0x1F27, 0x1F30, 0x1F31, 0x1F32, 0x1F33, 0x1F34, 0x1F35, 0x1F36, 0x1F37, 0x1F30, 0x1F31, 0x1F32, 0x1F33, 0x1F34, 0x1F35, 0x1F36, 0x1F37, 0x1F40, 0x1F41, 0x1F42, 0x1F43, 0x1F44, 0x1F45, 0x0000, 0x0000, 0x1F40, 0x1F41, 0x1F42, 0x1F43, 0x1F44, 0x1F45, 0x0000, 0x0000, 0x1F50, 0x1F51, 0x1F52, 0x1F53, 0x1F54, 0x1F55, 0x1F56, 0x1F57, 0x0000, 0x1F51, 0x0000, 0x1F53, 0x0000, 0x1F55, 0x0000, 0x1F57, 0x1F60, 0x1F61, 0x1F62, 0x1F63, 0x1F64, 0x1F65, 0x1F66, 0x1F67, 0x1F60, 0x1F61, 0x1F62, 0x1F63, 0x1F64, 0x1F65, 0x1F66, 0x1F67, 0x1F70, 0x1F71, 0x1F72, 0x1F73, 0x1F74, 0x1F75, 0x1F76, 0x1F77, 0x1F78, 0x1F79, 0x1F7A, 0x1F7B, 0x1F7C, 0x1F7D, 0x0000, 0x0000, 0x1F80, 0x1F81, 0x1F82, 0x1F83, 0x1F84, 0x1F85, 0x1F86, 0x1F87, 0x1F80, 0x1F81, 0x1F82, 0x1F83, 0x1F84, 0x1F85, 0x1F86, 0x1F87, 0x1F90, 0x1F91, 0x1F92, 0x1F93, 0x1F94, 0x1F95, 0x1F96, 0x1F97, 0x1F90, 0x1F91, 0x1F92, 0x1F93, 0x1F94, 0x1F95, 0x1F96, 0x1F97, 0x1FA0, 0x1FA1, 0x1FA2, 0x1FA3, 0x1FA4, 0x1FA5, 0x1FA6, 0x1FA7, 0x1FA0, 0x1FA1, 0x1FA2, 0x1FA3, 0x1FA4, 0x1FA5, 0x1FA6, 0x1FA7, 0x1FB0, 0x1FB1, 0x1FB2, 0x1FB3, 0x1FB4, 0x0000, 0x1FB6, 0x1FB7, 0x1FB0, 0x1FB1, 0x1F70, 0x1F71, 0x1FB3, 0x1FBD, 0x1FBE, 0x1FBF, 0x1FC0, 0x1FC1, 0x1FC2, 0x1FC3, 0x1FC4, 0x0000, 0x1FC6, 0x1FC7, 0x1F72, 0x1F73, 0x1F74, 0x1F75, 0x1FC3, 0x1FCD, 0x1FCE, 0x1FCF, 0x1FD0, 0x1FD1, 0x1FD2, 0x1FD3, 0x0000, 0x0000, 0x1FD6, 0x1FD7, 0x1FD0, 0x1FD1, 0x1F76, 0x1F77, 0x0000, 0x1FDD, 0x1FDE, 0x1FDF, 0x1FE0, 0x1FE1, 0x1FE2, 0x1FE3, 0x1FE4, 0x1FE5, 0x1FE6, 0x1FE7, 0x1FE0, 0x1FE1, 0x1F7A, 0x1F7B, 0x1FE5, 0x1FED, 0x1FEE, 0x1FEF, 0x0000, 0x0000, 0x1FF2, 0x1FF3, 0x1FF4, 0x0000, 0x1FF6, 0x1FF7, 0x1F78, 0x1F79, 0x1F7C, 0x1F7D, 0x1FF3, 0x1FFD, 0x1FFE, 0x0000 }; static unsigned short const GreekExt_upper_mapping[] = { 0x1F08, 0x1F09, 0x1F0A, 0x1F0B, 0x1F0C, 0x1F0D, 0x1F0E, 0x1F0F, 0x1F08, 0x1F09, 0x1F0A, 0x1F0B, 0x1F0C, 0x1F0D, 0x1F0E, 0x1F0F, 0x1F18, 0x1F19, 0x1F1A, 0x1F1B, 0x1F1C, 0x1F1D, 0x0000, 0x0000, 0x1F18, 0x1F19, 0x1F1A, 0x1F1B, 0x1F1C, 0x1F1D, 0x0000, 0x0000, 0x1F28, 0x1F29, 0x1F2A, 0x1F2B, 0x1F2C, 0x1F2D, 0x1F2E, 0x1F2F, 0x1F28, 0x1F29, 0x1F2A, 0x1F2B, 0x1F2C, 0x1F2D, 0x1F2E, 0x1F2F, 0x1F38, 0x1F39, 0x1F3A, 0x1F3B, 0x1F3C, 0x1F3D, 0x1F3E, 0x1F3F, 0x1F38, 0x1F39, 0x1F3A, 0x1F3B, 0x1F3C, 0x1F3D, 0x1F3E, 0x1F3F, 0x1F48, 0x1F49, 0x1F4A, 0x1F4B, 0x1F4C, 0x1F4D, 0x0000, 0x0000, 0x1F48, 0x1F49, 0x1F4A, 0x1F4B, 0x1F4C, 0x1F4D, 0x0000, 0x0000, 0x1F50, 0x1F59, 0x1F52, 0x1F5B, 0x1F54, 0x1F5D, 0x1F56, 0x1F5F, 0x0000, 0x1F59, 0x0000, 0x1F5B, 0x0000, 0x1F5D, 0x0000, 0x1F5F, 0x1F68, 0x1F69, 0x1F6A, 0x1F6B, 0x1F6C, 0x1F6D, 0x1F6E, 0x1F6F, 0x1F68, 0x1F69, 0x1F6A, 0x1F6B, 0x1F6C, 0x1F6D, 0x1F6E, 0x1F6F, 0x1FBA, 0x1FBB, 0x1FC8, 0x1FC9, 0x1FCA, 0x1FCB, 0x1FDA, 0x1FDB, 0x1FF8, 0x1FF9, 0x1FEA, 0x1FEB, 0x1FFA, 0x1FFB, 0x0000, 0x0000, 0x1F88, 0x1F89, 0x1F8A, 0x1F8B, 0x1F8C, 0x1F8D, 0x1F8E, 0x1F8F, 0x1F88, 0x1F89, 0x1F8A, 0x1F8B, 0x1F8C, 0x1F8D, 0x1F8E, 0x1F8F, 0x1F98, 0x1F99, 0x1F9A, 0x1F9B, 0x1F9C, 0x1F9D, 0x1F9E, 0x1F9F, 0x1F98, 0x1F99, 0x1F9A, 0x1F9B, 0x1F9C, 0x1F9D, 0x1F9E, 0x1F9F, 0x1FA8, 0x1FA9, 0x1FAA, 0x1FAB, 0x1FAC, 0x1FAD, 0x1FAE, 0x1FAF, 0x1FA8, 0x1FA9, 0x1FAA, 0x1FAB, 0x1FAC, 0x1FAD, 0x1FAE, 0x1FAF, 0x1FB8, 0x1FB9, 0x1FB2, 0x1FBC, 0x1FB4, 0x0000, 0x1FB6, 0x1FB7, 0x1FB8, 0x1FB9, 0x1FBA, 0x1FBB, 0x1FBC, 0x1FBD, 0x0399, 0x1FBF, 0x1FC0, 0x1FC1, 0x1FC2, 0x1FCC, 0x1FC4, 0x0000, 0x1FC6, 0x1FC7, 0x1FC8, 0x1FC9, 0x1FCA, 0x1FCB, 0x1FCC, 0x1FCD, 0x1FCE, 0x1FCF, 0x1FD8, 0x1FD9, 0x1FD2, 0x1FD3, 0x0000, 0x0000, 0x1FD6, 0x1FD7, 0x1FD8, 0x1FD9, 0x1FDA, 0x1FDB, 0x0000, 0x1FDD, 0x1FDE, 0x1FDF, 0x1FE8, 0x1FE9, 0x1FE2, 0x1FE3, 0x1FE4, 0x1FEC, 0x1FE6, 0x1FE7, 0x1FE8, 0x1FE9, 0x1FEA, 0x1FEB, 0x1FEC, 0x1FED, 0x1FEE, 0x1FEF, 0x0000, 0x0000, 0x1FF2, 0x1FFC, 0x1FF4, 0x0000, 0x1FF6, 0x1FF7, 0x1FF8, 0x1FF9, 0x1FFA, 0x1FFB, 0x1FFC, 0x1FFD, 0x1FFE, 0x0000 }; *lower = code; *upper = code; /* Basic Latin and Latin-1 Supplement, U+0000 to U+00FF */ if (code <= 0x00ff) { if (code >= 0x0041 && code <= 0x005a) /* A-Z */ *lower += 0x20; else if (code >= 0x0061 && code <= 0x007a) /* a-z */ *upper -= 0x20; else if ( (code >= 0x00c0 && code <= 0x00d6) || (code >= 0x00d8 && code <= 0x00de) ) *lower += 0x20; else if ( (code >= 0x00e0 && code <= 0x00f6) || (code >= 0x00f8 && code <= 0x00fe) ) *upper -= 0x20; else if (code == 0x00ff) /* y with diaeresis */ *upper = 0x0178; else if (code == 0x00b5) /* micro sign */ *upper = 0x039c; return; } /* Latin Extended-A, U+0100 to U+017F */ if (code >= 0x0100 && code <= 0x017f) { if ( (code >= 0x0100 && code <= 0x012f) || (code >= 0x0132 && code <= 0x0137) || (code >= 0x014a && code <= 0x0177) ) { *upper = code & ~1; *lower = code | 1; } else if ( (code >= 0x0139 && code <= 0x0148) || (code >= 0x0179 && code <= 0x017e) ) { if (code & 1) *lower += 1; else *upper -= 1; } else if (code == 0x0130) *lower = 0x0069; else if (code == 0x0131) *upper = 0x0049; else if (code == 0x0178) *lower = 0x00ff; else if (code == 0x017f) *upper = 0x0053; return; } /* Latin Extended-B, U+0180 to U+024F */ if (code >= 0x0180 && code <= 0x024f) { if (code >= 0x01cd && code <= 0x01dc) { if (code & 1) *lower += 1; else *upper -= 1; } else if ( (code >= 0x01de && code <= 0x01ef) || (code >= 0x01f4 && code <= 0x01f5) || (code >= 0x01f8 && code <= 0x021f) || (code >= 0x0222 && code <= 0x0233) ) { *lower |= 1; *upper &= ~1; } else if (code >= 0x0180 && code <= 0x01cc) { *lower = LatinExtB_lower_mapping[code - 0x0180]; *upper = LatinExtB_upper_mapping[code - 0x0180]; } else if (code == 0x01dd) *upper = 0x018e; else if (code == 0x01f1 || code == 0x01f2) { *lower = 0x01f3; *upper = 0x01f1; } else if (code == 0x01f3) *upper = 0x01f1; else if (code == 0x01f6) *lower = 0x0195; else if (code == 0x01f7) *lower = 0x01bf; else if (code == 0x0220) *lower = 0x019e; return; } /* IPA Extensions, U+0250 to U+02AF */ if (code >= 0x0253 && code <= 0x0292) { *upper = IPAExt_upper_mapping[code - 0x0253]; } /* Combining Diacritical Marks, U+0300 to U+036F */ if (code == 0x0345) { *upper = 0x0399; } /* Greek and Coptic, U+0370 to U+03FF */ if (code >= 0x0370 && code <= 0x03ff) { *lower = Greek_lower_mapping[code - 0x0370]; *upper = Greek_upper_mapping[code - 0x0370]; if (*upper == 0) *upper = code; if (*lower == 0) *lower = code; } /* Cyrillic and Cyrillic Supplementary, U+0400 to U+052F */ if ( (code >= 0x0400 && code <= 0x04ff) || (code >= 0x0500 && code <= 0x052f) ) { if (code >= 0x0400 && code <= 0x040f) *lower += 0x50; else if (code >= 0x0410 && code <= 0x042f) *lower += 0x20; else if (code >= 0x0430 && code <= 0x044f) *upper -= 0x20; else if (code >= 0x0450 && code <= 0x045f) *upper -= 0x50; else if ( (code >= 0x0460 && code <= 0x0481) || (code >= 0x048a && code <= 0x04bf) || (code >= 0x04d0 && code <= 0x04f5) || (code >= 0x04f8 && code <= 0x04f9) || (code >= 0x0500 && code <= 0x050f) ) { *upper &= ~1; *lower |= 1; } else if (code >= 0x04c1 && code <= 0x04ce) { if (code & 1) *lower += 1; else *upper -= 1; } } /* Armenian, U+0530 to U+058F */ if (code >= 0x0530 && code <= 0x058f) { if (code >= 0x0531 && code <= 0x0556) *lower += 0x30; else if (code >=0x0561 && code <= 0x0586) *upper -= 0x30; } /* Latin Extended Additional, U+1E00 to U+1EFF */ if (code >= 0x1e00 && code <= 0x1eff) { if ( (code >= 0x1e00 && code <= 0x1e95) || (code >= 0x1ea0 && code <= 0x1ef9) ) { *upper &= ~1; *lower |= 1; } else if (code == 0x1e9b) *upper = 0x1e60; } /* Greek Extended, U+1F00 to U+1FFF */ if (code >= 0x1f00 && code <= 0x1fff) { *lower = GreekExt_lower_mapping[code - 0x1f00]; *upper = GreekExt_upper_mapping[code - 0x1f00]; if (*upper == 0) *upper = code; if (*lower == 0) *lower = code; } /* Letterlike Symbols, U+2100 to U+214F */ if (code >= 0x2100 && code <= 0x214f) { switch (code) { case 0x2126: *lower = 0x03c9; break; case 0x212a: *lower = 0x006b; break; case 0x212b: *lower = 0x00e5; break; } } /* Number Forms, U+2150 to U+218F */ else if (code >= 0x2160 && code <= 0x216f) *lower += 0x10; else if (code >= 0x2170 && code <= 0x217f) *upper -= 0x10; /* Enclosed Alphanumerics, U+2460 to U+24FF */ else if (code >= 0x24b6 && code <= 0x24cf) *lower += 0x1a; else if (code >= 0x24d0 && code <= 0x24e9) *upper -= 0x1a; /* Halfwidth and Fullwidth Forms, U+FF00 to U+FFEF */ else if (code >= 0xff21 && code <= 0xff3a) *lower += 0x20; else if (code >= 0xff41 && code <= 0xff5a) *upper -= 0x20; /* Deseret, U+10400 to U+104FF */ else if (code >= 0x10400 && code <= 0x10427) *lower += 0x28; else if (code >= 0x10428 && code <= 0x1044f) *upper -= 0x28; } void XConvertCase( register KeySym sym, KeySym *lower, KeySym *upper) { /* Latin 1 keysym */ if (sym < 0x100) { UCSConvertCase(sym, lower, upper); return; } /* Unicode keysym */ if ((sym & 0xff000000) == 0x01000000) { UCSConvertCase((sym & 0x00ffffff), lower, upper); *upper |= 0x01000000; *lower |= 0x01000000; return; } /* Legacy keysym */ *lower = sym; *upper = sym; switch(sym >> 8) { case 1: /* Latin 2 */ /* Assume the KeySym is a legal value (ignore discontinuities) */ if (sym == XK_Aogonek) *lower = XK_aogonek; else if (sym >= XK_Lstroke && sym <= XK_Sacute) *lower += (XK_lstroke - XK_Lstroke); else if (sym >= XK_Scaron && sym <= XK_Zacute) *lower += (XK_scaron - XK_Scaron); else if (sym >= XK_Zcaron && sym <= XK_Zabovedot) *lower += (XK_zcaron - XK_Zcaron); else if (sym == XK_aogonek) *upper = XK_Aogonek; else if (sym >= XK_lstroke && sym <= XK_sacute) *upper -= (XK_lstroke - XK_Lstroke); else if (sym >= XK_scaron && sym <= XK_zacute) *upper -= (XK_scaron - XK_Scaron); else if (sym >= XK_zcaron && sym <= XK_zabovedot) *upper -= (XK_zcaron - XK_Zcaron); else if (sym >= XK_Racute && sym <= XK_Tcedilla) *lower += (XK_racute - XK_Racute); else if (sym >= XK_racute && sym <= XK_tcedilla) *upper -= (XK_racute - XK_Racute); break; case 2: /* Latin 3 */ /* Assume the KeySym is a legal value (ignore discontinuities) */ if (sym >= XK_Hstroke && sym <= XK_Hcircumflex) *lower += (XK_hstroke - XK_Hstroke); else if (sym >= XK_Gbreve && sym <= XK_Jcircumflex) *lower += (XK_gbreve - XK_Gbreve); else if (sym >= XK_hstroke && sym <= XK_hcircumflex) *upper -= (XK_hstroke - XK_Hstroke); else if (sym >= XK_gbreve && sym <= XK_jcircumflex) *upper -= (XK_gbreve - XK_Gbreve); else if (sym >= XK_Cabovedot && sym <= XK_Scircumflex) *lower += (XK_cabovedot - XK_Cabovedot); else if (sym >= XK_cabovedot && sym <= XK_scircumflex) *upper -= (XK_cabovedot - XK_Cabovedot); break; case 3: /* Latin 4 */ /* Assume the KeySym is a legal value (ignore discontinuities) */ if (sym >= XK_Rcedilla && sym <= XK_Tslash) *lower += (XK_rcedilla - XK_Rcedilla); else if (sym >= XK_rcedilla && sym <= XK_tslash) *upper -= (XK_rcedilla - XK_Rcedilla); else if (sym == XK_ENG) *lower = XK_eng; else if (sym == XK_eng) *upper = XK_ENG; else if (sym >= XK_Amacron && sym <= XK_Umacron) *lower += (XK_amacron - XK_Amacron); else if (sym >= XK_amacron && sym <= XK_umacron) *upper -= (XK_amacron - XK_Amacron); break; case 6: /* Cyrillic */ /* Assume the KeySym is a legal value (ignore discontinuities) */ if (sym >= XK_Serbian_DJE && sym <= XK_Serbian_DZE) *lower -= (XK_Serbian_DJE - XK_Serbian_dje); else if (sym >= XK_Serbian_dje && sym <= XK_Serbian_dze) *upper += (XK_Serbian_DJE - XK_Serbian_dje); else if (sym >= XK_Cyrillic_YU && sym <= XK_Cyrillic_HARDSIGN) *lower -= (XK_Cyrillic_YU - XK_Cyrillic_yu); else if (sym >= XK_Cyrillic_yu && sym <= XK_Cyrillic_hardsign) *upper += (XK_Cyrillic_YU - XK_Cyrillic_yu); break; case 7: /* Greek */ /* Assume the KeySym is a legal value (ignore discontinuities) */ if (sym >= XK_Greek_ALPHAaccent && sym <= XK_Greek_OMEGAaccent) *lower += (XK_Greek_alphaaccent - XK_Greek_ALPHAaccent); else if (sym >= XK_Greek_alphaaccent && sym <= XK_Greek_omegaaccent && sym != XK_Greek_iotaaccentdieresis && sym != XK_Greek_upsilonaccentdieresis) *upper -= (XK_Greek_alphaaccent - XK_Greek_ALPHAaccent); else if (sym >= XK_Greek_ALPHA && sym <= XK_Greek_OMEGA) *lower += (XK_Greek_alpha - XK_Greek_ALPHA); else if (sym >= XK_Greek_alpha && sym <= XK_Greek_omega && sym != XK_Greek_finalsmallsigma) *upper -= (XK_Greek_alpha - XK_Greek_ALPHA); break; case 0x13: /* Latin 9 */ if (sym == XK_OE) *lower = XK_oe; else if (sym == XK_oe) *upper = XK_OE; else if (sym == XK_Ydiaeresis) *lower = XK_ydiaeresis; break; } } int _XTranslateKey( register Display *dpy, KeyCode keycode, register unsigned int modifiers, unsigned int *modifiers_return, KeySym *keysym_return) { int per; register KeySym *syms; KeySym sym, lsym, usym; if ((! dpy->keysyms) && (! _XKeyInitialize(dpy))) return 0; *modifiers_return = ((ShiftMask|LockMask) | dpy->mode_switch | dpy->num_lock); if (((int)keycode < dpy->min_keycode) || ((int)keycode > dpy->max_keycode)) { *keysym_return = NoSymbol; return 1; } per = dpy->keysyms_per_keycode; syms = &dpy->keysyms[(keycode - dpy->min_keycode) * per]; while ((per > 2) && (syms[per - 1] == NoSymbol)) per--; if ((per > 2) && (modifiers & dpy->mode_switch)) { syms += 2; per -= 2; } if ((modifiers & dpy->num_lock) && (per > 1 && (IsKeypadKey(syms[1]) || IsPrivateKeypadKey(syms[1])))) { if ((modifiers & ShiftMask) || ((modifiers & LockMask) && (dpy->lock_meaning == XK_Shift_Lock))) *keysym_return = syms[0]; else *keysym_return = syms[1]; } else if (!(modifiers & ShiftMask) && (!(modifiers & LockMask) || (dpy->lock_meaning == NoSymbol))) { if ((per == 1) || (syms[1] == NoSymbol)) XConvertCase(syms[0], keysym_return, &usym); else *keysym_return = syms[0]; } else if (!(modifiers & LockMask) || (dpy->lock_meaning != XK_Caps_Lock)) { if ((per == 1) || ((usym = syms[1]) == NoSymbol)) XConvertCase(syms[0], &lsym, &usym); *keysym_return = usym; } else { if ((per == 1) || ((sym = syms[1]) == NoSymbol)) sym = syms[0]; XConvertCase(sym, &lsym, &usym); if (!(modifiers & ShiftMask) && (sym != syms[0]) && ((sym != usym) || (lsym == usym))) XConvertCase(syms[0], &lsym, &usym); *keysym_return = usym; } if (*keysym_return == XK_VoidSymbol) *keysym_return = NoSymbol; return 1; } int _XTranslateKeySym( Display *dpy, register KeySym symbol, unsigned int modifiers, char *buffer, int nbytes) { register struct _XKeytrans *p; int length; unsigned long hiBytes; register unsigned char c; if (!symbol) return 0; /* see if symbol rebound, if so, return that string. */ for (p = dpy->key_bindings; p; p = p->next) { if (((modifiers & AllMods) == p->state) && (symbol == p->key)) { length = p->len; if (length > nbytes) length = nbytes; memcpy (buffer, p->string, length); return length; } } /* try to convert to Latin-1, handling control */ hiBytes = symbol >> 8; if (!(nbytes && ((hiBytes == 0) || ((hiBytes == 0xFF) && (((symbol >= XK_BackSpace) && (symbol <= XK_Clear)) || (symbol == XK_Return) || (symbol == XK_Escape) || (symbol == XK_KP_Space) || (symbol == XK_KP_Tab) || (symbol == XK_KP_Enter) || ((symbol >= XK_KP_Multiply) && (symbol <= XK_KP_9)) || (symbol == XK_KP_Equal) || (symbol == XK_Delete)))))) return 0; /* if X keysym, convert to ascii by grabbing low 7 bits */ if (symbol == XK_KP_Space) c = XK_space & 0x7F; /* patch encoding botch */ else if (hiBytes == 0xFF) c = symbol & 0x7F; else c = symbol & 0xFF; /* only apply Control key if it makes sense, else ignore it */ if (modifiers & ControlMask) { if ((c >= '@' && c < '\177') || c == ' ') c &= 0x1F; else if (c == '2') c = '\000'; else if (c >= '3' && c <= '7') c -= ('3' - '\033'); else if (c == '8') c = '\177'; else if (c == '/') c = '_' & 0x1F; } buffer[0] = c; return 1; } /*ARGSUSED*/ int XLookupString ( register XKeyEvent *event, char *buffer, /* buffer */ int nbytes, /* space in buffer for characters */ KeySym *keysym, XComposeStatus *status) /* not implemented */ { unsigned int modifiers; KeySym symbol; if (! _XTranslateKey(event->display, event->keycode, event->state, &modifiers, &symbol)) return 0; if (keysym) *keysym = symbol; /* arguable whether to use (event->state & ~modifiers) here */ return _XTranslateKeySym(event->display, symbol, event->state, buffer, nbytes); } static void _XFreeKeyBindings( Display *dpy) { register struct _XKeytrans *p, *np; for (p = dpy->key_bindings; p; p = np) { np = p->next; Xfree(p->string); Xfree(p->modifiers); Xfree(p); } } int XRebindKeysym ( Display *dpy, KeySym keysym, KeySym *mlist, int nm, /* number of modifiers in mlist */ _Xconst unsigned char *str, int nbytes) { register struct _XKeytrans *tmp, *p; int nb; if ((! dpy->keysyms) && (! _XKeyInitialize(dpy))) return 0; LockDisplay(dpy); tmp = dpy->key_bindings; nb = sizeof(KeySym) * nm; if ((! (p = Xcalloc( 1, sizeof(struct _XKeytrans)))) || ((! (p->string = Xmalloc(nbytes))) && (nbytes > 0)) || ((! (p->modifiers = Xmalloc(nb))) && (nb > 0))) { if (p) { Xfree(p->string); Xfree(p->modifiers); Xfree(p); } UnlockDisplay(dpy); return 0; } dpy->key_bindings = p; dpy->free_funcs->key_bindings = _XFreeKeyBindings; p->next = tmp; /* chain onto list */ memcpy (p->string, str, nbytes); p->len = nbytes; memcpy ((char *) p->modifiers, (char *) mlist, nb); p->key = keysym; p->mlen = nm; ComputeMaskFromKeytrans(dpy, p); UnlockDisplay(dpy); return 0; } unsigned _XKeysymToModifiers( Display *dpy, KeySym ks) { CARD8 code,mods; register KeySym *kmax; register KeySym *k; register XModifierKeymap *m; if ((! dpy->keysyms) && (! _XKeyInitialize(dpy))) return 0; kmax = dpy->keysyms + (dpy->max_keycode - dpy->min_keycode + 1) * dpy->keysyms_per_keycode; k = dpy->keysyms; m = dpy->modifiermap; mods= 0; while (kmax_keypermod<<3; code=(((k-dpy->keysyms)/dpy->keysyms_per_keycode)+dpy->min_keycode); while (--j >= 0) { if (code == m->modifiermap[j]) mods|= (1<<(j/m->max_keypermod)); } } k++; } return mods; } /* * given a list of modifiers, computes the mask necessary for later matching. * This routine must lookup the key in the Keymap and then search to see * what modifier it is bound to, if any. Sets the AnyModifier bit if it * can't map some keysym to a modifier. */ static void ComputeMaskFromKeytrans( Display *dpy, register struct _XKeytrans *p) { register int i; p->state = AnyModifier; for (i = 0; i < p->mlen; i++) { p->state|= XkbKeysymToModifiers(dpy,p->modifiers[i]); } p->state &= AllMods; } ym; *upper = sym; switch(sym >> 8) { case 1: /* Latin 2 */ /* Assume the KeySym is a legal value (ignore discontinuities) */ if (sym == XK_Aogonek) *lower = XK_aogonek; else if (sym >= XK_Lstroke && sym <= XK_Sacute) *lower += (XK_lstroke - XK_Lstroke); else if (sym >= XK_Scaron && sym <= XK_Zacute) *lower += (XK_scaron - XK_Scaron); else if (sym >= XK_Zcaron && sym <= XK_Zabovedot) *lower += (XK_zcaron - XK_ZlibX11-1.6.3/src/ErrHndlr.c000064401431060000012000000046161247741723500155400ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" /* * XErrorHandler - This procedure sets the X non-fatal error handler * (_XErrorFunction) to be the specified routine. If NULL is passed in * the original error handler is restored. */ XErrorHandler XSetErrorHandler(XErrorHandler handler) { int (*oldhandler)(Display *dpy, XErrorEvent *event); _XLockMutex(_Xglobal_lock); oldhandler = _XErrorFunction; if (!oldhandler) oldhandler = _XDefaultError; if (handler != NULL) { _XErrorFunction = handler; } else { _XErrorFunction = _XDefaultError; } _XUnlockMutex(_Xglobal_lock); return (XErrorHandler) oldhandler; } /* * XIOErrorHandler - This procedure sets the X fatal I/O error handler * (_XIOErrorFunction) to be the specified routine. If NULL is passed in * the original error handler is restored. */ XIOErrorHandler XSetIOErrorHandler(XIOErrorHandler handler) { int (*oldhandler)(Display *dpy); _XLockMutex(_Xglobal_lock); oldhandler = _XIOErrorFunction; if (!oldhandler) oldhandler = _XDefaultIOError; if (handler != NULL) { _XIOErrorFunction = handler; } else { _XIOErrorFunction = _XDefaultIOError; } _XUnlockMutex(_Xglobal_lock); return (XIOErrorHandler) oldhandler; } libX11-1.6.3/src/ImUtil.c000064401431060000012000000707211247741723500152230ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include "ImUtil.h" static int _XDestroyImage(XImage *); static unsigned long _XGetPixel(XImage *, int, int); static unsigned long _XGetPixel1(XImage *, int, int); static unsigned long _XGetPixel8(XImage *, int, int); static unsigned long _XGetPixel16(XImage *, int, int); static unsigned long _XGetPixel32(XImage *, int, int); static int _XPutPixel(XImage *, int, int, unsigned long); static int _XPutPixel1(XImage *, int, int, unsigned long); static int _XPutPixel8(XImage *, int, int, unsigned long); static int _XPutPixel16(XImage *, int, int, unsigned long); static int _XPutPixel32(XImage *, int, int, unsigned long); static XImage *_XSubImage(XImage *, int, int, unsigned int, unsigned int); static int _XAddPixel(XImage *, long); static unsigned char const _lomask[0x09] = { 0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff }; static unsigned char const _himask[0x09] = { 0xff, 0xfe, 0xfc, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x00 }; /* These two convenience routines return the scanline_pad and bits_per_pixel associated with a specific depth of ZPixmap format image for a display. */ int _XGetScanlinePad( Display *dpy, int depth) { register ScreenFormat *fmt = dpy->pixmap_format; register int i; for (i = dpy->nformats + 1; --i; ++fmt) if (fmt->depth == depth) return(fmt->scanline_pad); return(dpy->bitmap_pad); } int _XGetBitsPerPixel( Display *dpy, int depth) { register ScreenFormat *fmt = dpy->pixmap_format; register int i; for (i = dpy->nformats + 1; --i; ++fmt) if (fmt->depth == depth) return(fmt->bits_per_pixel); if (depth <= 4) return 4; if (depth <= 8) return 8; if (depth <= 16) return 16; return 32; } /* * This module provides rudimentary manipulation routines for image data * structures. The functions provided are: * * XCreateImage Creates a default XImage data structure * _XDestroyImage Deletes an XImage data structure * _XGetPixel Reads a pixel from an image data structure * _XGetPixel32 Reads a pixel from a 32-bit Z image data structure * _XGetPixel16 Reads a pixel from a 16-bit Z image data structure * _XGetPixel8 Reads a pixel from an 8-bit Z image data structure * _XGetPixel1 Reads a pixel from an 1-bit image data structure * _XPutPixel Writes a pixel into an image data structure * _XPutPixel32 Writes a pixel into a 32-bit Z image data structure * _XPutPixel16 Writes a pixel into a 16-bit Z image data structure * _XPutPixel8 Writes a pixel into an 8-bit Z image data structure * _XPutPixel1 Writes a pixel into an 1-bit image data structure * _XSubImage Clones a new (sub)image from an existing one * _XSetImage Writes an image data pattern into another image * _XAddPixel Adds a constant value to every pixel in an image * * The logic contained in these routines makes several assumptions about * the image data structures, and at least for current implementations * these assumptions are believed to be true. They are: * * For all formats, bits_per_pixel is less than or equal to 32. * For XY formats, bitmap_unit is always less than or equal to bitmap_pad. * For XY formats, bitmap_unit is 8, 16, or 32 bits. * For Z format, bits_per_pixel is 1, 4, 8, 16, 24, or 32 bits. */ static void _xynormalizeimagebits ( register unsigned char *bp, register XImage *img) { register unsigned char c; if (img->byte_order != img->bitmap_bit_order) { switch (img->bitmap_unit) { case 16: c = *bp; *bp = *(bp + 1); *(bp + 1) = c; break; case 32: c = *(bp + 3); *(bp + 3) = *bp; *bp = c; c = *(bp + 2); *(bp + 2) = *(bp + 1); *(bp + 1) = c; break; } } if (img->bitmap_bit_order == MSBFirst) _XReverse_Bytes (bp, img->bitmap_unit >> 3); } static void _znormalizeimagebits ( register unsigned char *bp, register XImage *img) { register unsigned char c; switch (img->bits_per_pixel) { case 4: *bp = ((*bp >> 4) & 0xF) | ((*bp << 4) & ~0xF); break; case 16: c = *bp; *bp = *(bp + 1); *(bp + 1) = c; break; case 24: c = *(bp + 2); *(bp + 2) = *bp; *bp = c; break; case 32: c = *(bp + 3); *(bp + 3) = *bp; *bp = c; c = *(bp + 2); *(bp + 2) = *(bp + 1); *(bp + 1) = c; break; } } static void _putbits( register char *src, /* address of source bit string */ int dstoffset, /* bit offset into destination; range is 0-31 */ register int numbits,/* number of bits to copy to destination */ register char *dst) /* address of destination bit string */ { register unsigned char chlo, chhi; int hibits; dst = dst + (dstoffset >> 3); dstoffset = dstoffset & 7; hibits = 8 - dstoffset; chlo = *dst & _lomask[dstoffset]; for (;;) { chhi = (*src << dstoffset) & _himask[dstoffset]; if (numbits <= hibits) { chhi = chhi & _lomask[dstoffset + numbits]; *dst = (*dst & _himask[dstoffset + numbits]) | chlo | chhi; break; } *dst = chhi | chlo; dst++; numbits = numbits - hibits; chlo = (unsigned char) (*src & _himask[hibits]) >> hibits; src++; if (numbits <= dstoffset) { chlo = chlo & _lomask[numbits]; *dst = (*dst & _himask[numbits]) | chlo; break; } numbits = numbits - dstoffset; } } /* * Macros * * The ROUNDUP macro rounds up a quantity to the specified boundary, * then truncates to bytes. * * The XYNORMALIZE macro determines whether XY format data requires * normalization and calls a routine to do so if needed. The logic in * this module is designed for LSBFirst byte and bit order, so * normalization is done as required to present the data in this order. * * The ZNORMALIZE macro performs byte and nibble order normalization if * required for Z format data. * * The XYINDEX macro computes the index to the starting byte (char) boundary * for a bitmap_unit containing a pixel with coordinates x and y for image * data in XY format. * * The ZINDEX macro computes the index to the starting byte (char) boundary * for a pixel with coordinates x and y for image data in ZPixmap format. * */ #if defined(Lynx) && defined(ROUNDUP) #undef ROUNDUP #endif #define ROUNDUP(nbytes, pad) ((((nbytes) + ((pad)-1)) / (pad)) * ((pad)>>3)) #define XYNORMALIZE(bp, img) \ if ((img->byte_order == MSBFirst) || (img->bitmap_bit_order == MSBFirst)) \ _xynormalizeimagebits((unsigned char *)(bp), img) #define ZNORMALIZE(bp, img) \ if (img->byte_order == MSBFirst) \ _znormalizeimagebits((unsigned char *)(bp), img) #define XYINDEX(x, y, img) \ ((y) * img->bytes_per_line) + \ (((x) + img->xoffset) / img->bitmap_unit) * (img->bitmap_unit >> 3) #define ZINDEX(x, y, img) ((y) * img->bytes_per_line) + \ (((x) * img->bits_per_pixel) >> 3) /* * This routine initializes the image object function pointers. The * intent is to provide native (i.e. fast) routines for native format images * only using the generic (i.e. slow) routines when fast ones don't exist. * However, with the current rather botched external interface, clients may * have to mung image attributes after the image gets created, so the fast * routines always have to check to make sure the optimization is still * valid, and reinit the functions if not. */ void _XInitImageFuncPtrs ( register XImage *image) { image->f.create_image = XCreateImage; image->f.destroy_image = _XDestroyImage; if ((image->format == ZPixmap) && (image->bits_per_pixel == 8)) { image->f.get_pixel = _XGetPixel8; image->f.put_pixel = _XPutPixel8; } else if (((image->bits_per_pixel | image->depth) == 1) && (image->byte_order == image->bitmap_bit_order)) { image->f.get_pixel = _XGetPixel1; image->f.put_pixel = _XPutPixel1; } else if ((image->format == ZPixmap) && (image->bits_per_pixel == 32)) { image->f.get_pixel = _XGetPixel32; image->f.put_pixel = _XPutPixel32; } else if ((image->format == ZPixmap) && (image->bits_per_pixel == 16)) { image->f.get_pixel = _XGetPixel16; image->f.put_pixel = _XPutPixel16; } else { image->f.get_pixel = _XGetPixel; image->f.put_pixel = _XPutPixel; } image->f.sub_image = _XSubImage; /* image->f.set_image = _XSetImage;*/ image->f.add_pixel = _XAddPixel; } /* * CreateImage * * Allocates the memory necessary for an XImage data structure. * Initializes the structure with "default" values and returns XImage. * */ XImage *XCreateImage ( register Display *dpy, register Visual *visual, unsigned int depth, int format, int offset, /*How many pixels from the start of the data does the picture to be transmitted start?*/ char *data, unsigned int width, unsigned int height, int xpad, int image_bytes_per_line) /*How many bytes between a pixel on one line and the pixel with the same X coordinate on the next line? 0 means XCreateImage can calculate it.*/ { register XImage *image; int bits_per_pixel = 1; int min_bytes_per_line; if (depth == 0 || depth > 32 || (format != XYBitmap && format != XYPixmap && format != ZPixmap) || (format == XYBitmap && depth != 1) || (xpad != 8 && xpad != 16 && xpad != 32) || offset < 0) return (XImage *) NULL; if ((image = Xcalloc(1, sizeof(XImage))) == NULL) return (XImage *) NULL; image->width = width; image->height = height; image->format = format; image->byte_order = dpy->byte_order; image->bitmap_unit = dpy->bitmap_unit; image->bitmap_bit_order = dpy->bitmap_bit_order; if (visual != NULL) { image->red_mask = visual->red_mask; image->green_mask = visual->green_mask; image->blue_mask = visual->blue_mask; } else { image->red_mask = image->green_mask = image->blue_mask = 0; } if (format == ZPixmap) { bits_per_pixel = _XGetBitsPerPixel(dpy, (int) depth); } image->xoffset = offset; image->bitmap_pad = xpad; image->depth = depth; image->data = data; /* * compute per line accelerator. */ { if (format == ZPixmap) min_bytes_per_line = ROUNDUP((bits_per_pixel * width), image->bitmap_pad); else min_bytes_per_line = ROUNDUP((width + offset), image->bitmap_pad); } if (image_bytes_per_line == 0) { image->bytes_per_line = min_bytes_per_line; } else if (image_bytes_per_line < min_bytes_per_line) { Xfree(image); return NULL; } else { image->bytes_per_line = image_bytes_per_line; } image->bits_per_pixel = bits_per_pixel; image->obdata = NULL; _XInitImageFuncPtrs (image); return image; } Status XInitImage (XImage *image) { int min_bytes_per_line; if (image->depth == 0 || image->depth > 32 || image->bits_per_pixel > 32 || image->bitmap_unit > 32 || image->bits_per_pixel < 0 || image->bitmap_unit < 0 || (image->format != XYBitmap && image->format != XYPixmap && image->format != ZPixmap) || (image->format == XYBitmap && image->depth != 1) || (image->bitmap_pad != 8 && image->bitmap_pad != 16 && image->bitmap_pad != 32) || image->xoffset < 0) return 0; /* * compute per line accelerator. */ if (image->format == ZPixmap) min_bytes_per_line = ROUNDUP((image->bits_per_pixel * image->width), image->bitmap_pad); else min_bytes_per_line = ROUNDUP((image->width + image->xoffset), image->bitmap_pad); if (image->bytes_per_line == 0) { image->bytes_per_line = min_bytes_per_line; } else if (image->bytes_per_line < min_bytes_per_line) { return 0; } _XInitImageFuncPtrs (image); return 1; } /* * _DestroyImage * * Deallocates the memory associated with the ximage data structure. * this version handles the case of the image data being malloc'd * entirely by the library. */ static int _XDestroyImage (XImage *ximage) { Xfree(ximage->data); Xfree(ximage->obdata); Xfree(ximage); return 1; } /* * GetPixel * * Returns the specified pixel. The X and Y coordinates are relative to * the origin (upper left [0,0]) of the image. The pixel value is returned * in normalized format, i.e. the LSB of the long is the LSB of the pixel. * The algorithm used is: * * copy the source bitmap_unit or Zpixel into temp * normalize temp if needed * extract the pixel bits into return value * */ static unsigned long const low_bits_table[] = { 0x00000000, 0x00000001, 0x00000003, 0x00000007, 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff, 0x0001ffff, 0x0003ffff, 0x0007ffff, 0x000fffff, 0x001fffff, 0x003fffff, 0x007fffff, 0x00ffffff, 0x01ffffff, 0x03ffffff, 0x07ffffff, 0x0fffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff, 0xffffffff }; static unsigned long _XGetPixel ( register XImage *ximage, int x, int y) { unsigned long pixel, px; register char *src; register char *dst; register int i, j; int bits, nbytes; long plane; if ((ximage->bits_per_pixel | ximage->depth) == 1) { src = &ximage->data[XYINDEX(x, y, ximage)]; dst = (char *)&pixel; pixel = 0; for (i = ximage->bitmap_unit >> 3; --i >= 0; ) *dst++ = *src++; XYNORMALIZE(&pixel, ximage); bits = (x + ximage->xoffset) % ximage->bitmap_unit; pixel = ((((char *)&pixel)[bits>>3])>>(bits&7)) & 1; } else if (ximage->format == XYPixmap) { pixel = 0; plane = 0; nbytes = ximage->bitmap_unit >> 3; for (i = ximage->depth; --i >= 0; ) { src = &ximage->data[XYINDEX(x, y, ximage)+ plane]; dst = (char *)&px; px = 0; for (j = nbytes; --j >= 0; ) *dst++ = *src++; XYNORMALIZE(&px, ximage); bits = (x + ximage->xoffset) % ximage->bitmap_unit; pixel = (pixel << 1) | (((((char *)&px)[bits>>3])>>(bits&7)) & 1); plane = plane + (ximage->bytes_per_line * ximage->height); } } else if (ximage->format == ZPixmap) { src = &ximage->data[ZINDEX(x, y, ximage)]; dst = (char *)&px; px = 0; for (i = (ximage->bits_per_pixel + 7) >> 3; --i >= 0; ) *dst++ = *src++; ZNORMALIZE(&px, ximage); pixel = 0; for (i=sizeof(unsigned long); --i >= 0; ) pixel = (pixel << 8) | ((unsigned char *)&px)[i]; if (ximage->bits_per_pixel == 4) { if (x & 1) pixel >>= 4; else pixel &= 0xf; } } else { return 0; /* bad image */ } if (ximage->bits_per_pixel == ximage->depth) return pixel; else return (pixel & low_bits_table[ximage->depth]); } static CARD32 const byteorderpixel = MSBFirst << 24; static unsigned long _XGetPixel32 ( register XImage *ximage, int x, int y) { register unsigned char *addr; unsigned long pixel; if ((ximage->format == ZPixmap) && (ximage->bits_per_pixel == 32)) { addr = &((unsigned char *)ximage->data) [y * ximage->bytes_per_line + (x << 2)]; if (*((const char *)&byteorderpixel) == ximage->byte_order) pixel = *((CARD32 *)addr); else if (ximage->byte_order == MSBFirst) pixel = ((unsigned long)addr[0] << 24 | (unsigned long)addr[1] << 16 | (unsigned long)addr[2] << 8 | addr[3]); else pixel = ((unsigned long)addr[3] << 24 | (unsigned long)addr[2] << 16 | (unsigned long)addr[1] << 8 | addr[0]); if (ximage->depth != 32) pixel &= low_bits_table[ximage->depth]; return pixel; } else { _XInitImageFuncPtrs(ximage); return XGetPixel(ximage, x, y); } } static unsigned long _XGetPixel16 ( register XImage *ximage, int x, int y) { register unsigned char *addr; unsigned long pixel; if ((ximage->format == ZPixmap) && (ximage->bits_per_pixel == 16)) { addr = &((unsigned char *)ximage->data) [y * ximage->bytes_per_line + (x << 1)]; if (ximage->byte_order == MSBFirst) pixel = addr[0] << 8 | addr[1]; else pixel = addr[1] << 8 | addr[0]; if (ximage->depth != 16) pixel &= low_bits_table[ximage->depth]; return pixel; } else { _XInitImageFuncPtrs(ximage); return XGetPixel(ximage, x, y); } } static unsigned long _XGetPixel8 ( register XImage *ximage, int x, int y) { unsigned char pixel; if ((ximage->format == ZPixmap) && (ximage->bits_per_pixel == 8)) { pixel = ((unsigned char *)ximage->data) [y * ximage->bytes_per_line + x]; if (ximage->depth != 8) pixel &= low_bits_table[ximage->depth]; return pixel; } else { _XInitImageFuncPtrs(ximage); return XGetPixel(ximage, x, y); } } static unsigned long _XGetPixel1 ( register XImage *ximage, int x, int y) { unsigned char bit; int xoff, yoff; if (((ximage->bits_per_pixel | ximage->depth) == 1) && (ximage->byte_order == ximage->bitmap_bit_order)) { xoff = x + ximage->xoffset; yoff = y * ximage->bytes_per_line + (xoff >> 3); xoff &= 7; if (ximage->bitmap_bit_order == MSBFirst) bit = 0x80 >> xoff; else bit = 1 << xoff; return (ximage->data[yoff] & bit) ? 1 : 0; } else { _XInitImageFuncPtrs(ximage); return XGetPixel(ximage, x, y); } } /* * PutPixel * * Overwrites the specified pixel. The X and Y coordinates are relative to * the origin (upper left [0,0]) of the image. The input pixel value must be * in normalized format, i.e. the LSB of the long is the LSB of the pixel. * The algorithm used is: * * copy the destination bitmap_unit or Zpixel to temp * normalize temp if needed * copy the pixel bits into the temp * renormalize temp if needed * copy the temp back into the destination image data * */ static int _XPutPixel ( register XImage *ximage, int x, int y, unsigned long pixel) { unsigned long px, npixel; register char *src; register char *dst; register int i; int j, nbytes; long plane; if (ximage->depth == 4) pixel &= 0xf; npixel = pixel; for (i=0, px=pixel; i>=8) ((unsigned char *)&pixel)[i] = px; if ((ximage->bits_per_pixel | ximage->depth) == 1) { src = &ximage->data[XYINDEX(x, y, ximage)]; dst = (char *)&px; px = 0; nbytes = ximage->bitmap_unit >> 3; for (i = nbytes; --i >= 0; ) *dst++ = *src++; XYNORMALIZE(&px, ximage); i = ((x + ximage->xoffset) % ximage->bitmap_unit); _putbits ((char *)&pixel, i, 1, (char *)&px); XYNORMALIZE(&px, ximage); src = (char *) &px; dst = &ximage->data[XYINDEX(x, y, ximage)]; for (i = nbytes; --i >= 0; ) *dst++ = *src++; } else if (ximage->format == XYPixmap) { plane = (ximage->bytes_per_line * ximage->height) * (ximage->depth - 1); /* do least signif plane 1st */ nbytes = ximage->bitmap_unit >> 3; for (j = ximage->depth; --j >= 0; ) { src = &ximage->data[XYINDEX(x, y, ximage) + plane]; dst = (char *) &px; px = 0; for (i = nbytes; --i >= 0; ) *dst++ = *src++; XYNORMALIZE(&px, ximage); i = ((x + ximage->xoffset) % ximage->bitmap_unit); _putbits ((char *)&pixel, i, 1, (char *)&px); XYNORMALIZE(&px, ximage); src = (char *)&px; dst = &ximage->data[XYINDEX(x, y, ximage) + plane]; for (i = nbytes; --i >= 0; ) *dst++ = *src++; npixel = npixel >> 1; for (i=0, px=npixel; i>=8) ((unsigned char *)&pixel)[i] = px; plane = plane - (ximage->bytes_per_line * ximage->height); } } else if (ximage->format == ZPixmap) { src = &ximage->data[ZINDEX(x, y, ximage)]; dst = (char *)&px; px = 0; nbytes = (ximage->bits_per_pixel + 7) >> 3; for (i = nbytes; --i >= 0; ) *dst++ = *src++; ZNORMALIZE(&px, ximage); _putbits ((char *)&pixel, (x * ximage->bits_per_pixel) & 7, ximage->bits_per_pixel, (char *)&px); ZNORMALIZE(&px, ximage); src = (char *)&px; dst = &ximage->data[ZINDEX(x, y, ximage)]; for (i = nbytes; --i >= 0; ) *dst++ = *src++; } else { return 0; /* bad image */ } return 1; } static int _XPutPixel32 ( register XImage *ximage, int x, int y, unsigned long pixel) { unsigned char *addr; if ((ximage->format == ZPixmap) && (ximage->bits_per_pixel == 32)) { addr = &((unsigned char *)ximage->data) [y * ximage->bytes_per_line + (x << 2)]; if (*((const char *)&byteorderpixel) == ximage->byte_order) *((CARD32 *)addr) = pixel; else if (ximage->byte_order == MSBFirst) { addr[0] = pixel >> 24; addr[1] = pixel >> 16; addr[2] = pixel >> 8; addr[3] = pixel; } else { addr[3] = pixel >> 24; addr[2] = pixel >> 16; addr[1] = pixel >> 8; addr[0] = pixel; } return 1; } else { _XInitImageFuncPtrs(ximage); return XPutPixel(ximage, x, y, pixel); } } static int _XPutPixel16 ( register XImage *ximage, int x, int y, unsigned long pixel) { unsigned char *addr; if ((ximage->format == ZPixmap) && (ximage->bits_per_pixel == 16)) { addr = &((unsigned char *)ximage->data) [y * ximage->bytes_per_line + (x << 1)]; if (ximage->byte_order == MSBFirst) { addr[0] = pixel >> 8; addr[1] = pixel; } else { addr[1] = pixel >> 8; addr[0] = pixel; } return 1; } else { _XInitImageFuncPtrs(ximage); return XPutPixel(ximage, x, y, pixel); } } static int _XPutPixel8 ( register XImage *ximage, int x, int y, unsigned long pixel) { if ((ximage->format == ZPixmap) && (ximage->bits_per_pixel == 8)) { ximage->data[y * ximage->bytes_per_line + x] = pixel; return 1; } else { _XInitImageFuncPtrs(ximage); return XPutPixel(ximage, x, y, pixel); } } static int _XPutPixel1 ( register XImage *ximage, int x, int y, unsigned long pixel) { unsigned char bit; int xoff, yoff; if (((ximage->bits_per_pixel | ximage->depth) == 1) && (ximage->byte_order == ximage->bitmap_bit_order)) { xoff = x + ximage->xoffset; yoff = y * ximage->bytes_per_line + (xoff >> 3); xoff &= 7; if (ximage->bitmap_bit_order == MSBFirst) bit = 0x80 >> xoff; else bit = 1 << xoff; if (pixel & 1) ximage->data[yoff] |= bit; else ximage->data[yoff] &= ~bit; return 1; } else { _XInitImageFuncPtrs(ximage); return XPutPixel(ximage, x, y, pixel); } } /* * SubImage * * Creates a new image that is a subsection of an existing one. * Allocates the memory necessary for the new XImage data structure. * Pointer to new image is returned. The algorithm used is repetitive * calls to get and put pixel. * */ static XImage *_XSubImage ( XImage *ximage, register int x, /* starting x coordinate in existing image */ register int y, /* starting y coordinate in existing image */ unsigned int width, /* width in pixels of new subimage */ unsigned int height)/* height in pixels of new subimage */ { register XImage *subimage; int dsize; register int row, col; register unsigned long pixel; char *data; if ((subimage = Xcalloc (1, sizeof (XImage))) == NULL) return (XImage *) NULL; subimage->width = width; subimage->height = height; subimage->xoffset = 0; subimage->format = ximage->format; subimage->byte_order = ximage->byte_order; subimage->bitmap_unit = ximage->bitmap_unit; subimage->bitmap_bit_order = ximage->bitmap_bit_order; subimage->bitmap_pad = ximage->bitmap_pad; subimage->bits_per_pixel = ximage->bits_per_pixel; subimage->depth = ximage->depth; /* * compute per line accelerator. */ if (subimage->format == ZPixmap) subimage->bytes_per_line = ROUNDUP(subimage->bits_per_pixel * width, subimage->bitmap_pad); else subimage->bytes_per_line = ROUNDUP(width, subimage->bitmap_pad); subimage->obdata = NULL; _XInitImageFuncPtrs (subimage); dsize = subimage->bytes_per_line * height; if (subimage->format == XYPixmap) dsize = dsize * subimage->depth; if (((data = Xcalloc (1, dsize)) == NULL) && (dsize > 0)) { Xfree(subimage); return (XImage *) NULL; } subimage->data = data; /* * Test for cases where the new subimage is larger than the region * that we are copying from the existing data. In those cases, * copy the area of the existing image, and allow the "uncovered" * area of new subimage to remain with zero filled pixels. */ if (height > ximage->height - y ) height = ximage->height - y; if (width > ximage->width - x ) width = ximage->width - x; for (row = y; row < (y + height); row++) { for (col = x; col < (x + width); col++) { pixel = XGetPixel(ximage, col, row); XPutPixel(subimage, (col - x), (row - y), pixel); } } return subimage; } /* * SetImage * * Overwrites a section of one image with all of the data from another. * If the two images are not of the same format (i.e. XYPixmap and ZPixmap), * the image data is converted to the destination format. The following * restrictions apply: * * 1. The depths of the source and destination images must be equal. * * 2. If the height of the source image is too large to fit between * the specified y starting point and the bottom of the image, * then scanlines are truncated on the bottom. * * 3. If the width of the source image is too large to fit between * the specified x starting point and the end of the scanline, * then pixels are truncated on the right. * * The images need not have the same bitmap_bit_order, byte_order, * bitmap_unit, bits_per_pixel, bitmap_pad, or xoffset. * */ int _XSetImage( XImage *srcimg, register XImage *dstimg, register int x, register int y) { register unsigned long pixel; register int row, col; int width, height, startrow, startcol; if (x < 0) { startcol = -x; x = 0; } else startcol = 0; if (y < 0) { startrow = -y; y = 0; } else startrow = 0; width = dstimg->width - x; if (srcimg->width < width) width = srcimg->width; height = dstimg->height - y; if (srcimg->height < height) height = srcimg->height; /* this is slow, will do better later */ for (row = startrow; row < height; row++) { for (col = startcol; col < width; col++) { pixel = XGetPixel(srcimg, col, row); XPutPixel(dstimg, x + col, y + row, pixel); } } return 1; } /* * AddPixel * * Adds a constant value to every pixel in a pixmap. * */ static int _XAddPixel ( register XImage *ximage, register long value) { register int x; register int y; if (!value) return 0; if ((ximage->bits_per_pixel | ximage->depth) == 1) { /* The only value that we can add here to an XYBitmap * is one. Since 1 + value = ~value for one bit wide * data, we do this quickly by taking the ones complement * of the entire bitmap data (offset and pad included!). * Note that we don't need to be concerned with bit or * byte order at all. */ register unsigned char *dp = (unsigned char *) ximage->data; x = ximage->bytes_per_line * ximage->height; while (--x >= 0) { *dp = ~*dp; dp++; } } else if ((ximage->format == ZPixmap) && (ximage->bits_per_pixel == 8)) { register unsigned char *dp = (unsigned char *) ximage->data; x = ximage->bytes_per_line * ximage->height; while (--x >= 0) *dp++ += value; } else if ((ximage->format == ZPixmap) && (ximage->bits_per_pixel == 16) && (*((const char *)&byteorderpixel) == ximage->byte_order)) { register unsigned short *dp = (unsigned short *) ximage->data; x = (ximage->bytes_per_line >> 1) * ximage->height; while (--x >= 0) *dp++ += value; } else if ((ximage->format == ZPixmap) && (ximage->bits_per_pixel == 32) && (*((const char *)&byteorderpixel) == ximage->byte_order)) { register CARD32 *dp = (CARD32 *) ximage->data; x = (ximage->bytes_per_line >> 2) * ximage->height; while (--x >= 0) *dp++ += value; } else { for (y = ximage->height; --y >= 0; ) { for (x = ximage->width; --x >= 0; ) { register unsigned long pixel = XGetPixel(ximage, x, y); pixel = pixel + value; XPutPixel(ximage, x, y, pixel); } } } return 0; } *dst; register int i; int j, nbytes; long plibX11-1.6.3/src/Xprivate.h000064401431060000012000000017311247741723500156220ustar00alancstaff00002660200006/* Copyright (C) 2008 Jamey Sharp, Josh Triplett * This file is licensed under the MIT license. See the file COPYING. * * As Xlibint.h has long become effectively public API, this header exists * for new private functions that nothing outside of libX11 should call. */ #ifndef XPRIVATE_H #define XPRIVATE_H #include extern _X_HIDDEN void _XIDHandler(Display *dpy); extern _X_HIDDEN void _XSeqSyncFunction(Display *dpy); extern _X_HIDDEN void _XSetPrivSyncFunction(Display *dpy); extern _X_HIDDEN void _XSetSeqSyncFunction(Display *dpy); #ifdef XTHREADS #if defined(XTHREADS_WARN) || defined(XTHREADS_FILE_LINE) #define InternalLockDisplay(d,wskip) if ((d)->lock) \ (*(d)->lock->internal_lock_display)(d,wskip,__FILE__,__LINE__) #else #define InternalLockDisplay(d,wskip) if ((d)->lock) \ (*(d)->lock->internal_lock_display)(d,wskip) #endif #else /* XTHREADS else */ #define InternalLockDisplay(d,wskip) #endif /* XTHREADS else */ #endif /* XPRIVATE_H */ libX11-1.6.3/src/SetIFocus.c000064401431060000012000000030101247741723500156470ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XSetInputFocus( register Display *dpy, Window focus, int revert_to, Time time) { register xSetInputFocusReq *req; LockDisplay(dpy); GetReq(SetInputFocus, req); req->focus = focus; req->revertTo = revert_to; req->time = time; UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/UnmapSubs.c000064401431060000012000000026341247741723500157330ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XUnmapSubwindows( register Display *dpy, Window win) { register xResourceReq *req; LockDisplay(dpy); GetResReq(UnmapSubwindows,win, req); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/TextExt16.c000064401431060000012000000136071247741723500155740ustar00alancstaff00002660200006/* Copyright 1989, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ /* * Copyright 1995 by FUJITSU LIMITED * This is source code modified by FUJITSU LIMITED under the Joint * Development Agreement for the CDE/Motif PST. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #define min_byte2 min_char_or_byte2 #define max_byte2 max_char_or_byte2 /* * XTextExtents16 - compute the extents of string given as a sequence of * XChar2bs. */ int XTextExtents16 ( XFontStruct *fs, _Xconst XChar2b *string, int nchars, int *dir, /* RETURN font information */ int *font_ascent, /* RETURN font information */ int *font_descent, /* RETURN font information */ register XCharStruct *overall) /* RETURN character information */ { int i; /* iterator */ Bool singlerow = (fs->max_byte1 == 0); /* optimization */ int nfound = 0; /* number of characters found */ XCharStruct *def; /* info about default char */ if (singlerow) { CI_GET_DEFAULT_INFO_1D (fs, def); } else { CI_GET_DEFAULT_INFO_2D (fs, def); } *dir = fs->direction; *font_ascent = fs->ascent; *font_descent = fs->descent; /* * Iterate over the input string getting the appropriate * char struct. * The default (which may be null if there is no def_char) will be returned * if the character doesn't exist. On the first time * through the loop, * assign the values to overall; otherwise, compute * the new values. */ for (i = 0; i < nchars; i++, string++) { register XCharStruct *cs; unsigned int r = (unsigned int) string->byte1; /* watch for macros */ unsigned int c = (unsigned int) string->byte2; /* watch for macros */ if (singlerow) { unsigned int ind = ((r << 8) | c); /* watch for macros */ CI_GET_CHAR_INFO_1D (fs, ind, def, cs); } else { CI_GET_CHAR_INFO_2D (fs, r, c, def, cs); } if (cs) { if (nfound++ == 0) { *overall = *cs; } else { overall->ascent = max (overall->ascent, cs->ascent); overall->descent = max (overall->descent, cs->descent); overall->lbearing = min (overall->lbearing, overall->width + cs->lbearing); overall->rbearing = max (overall->rbearing, overall->width + cs->rbearing); overall->width += cs->width; } } } /* * if there were no characters, then set everything to 0 */ if (nfound == 0) { overall->width = overall->ascent = overall->descent = overall->lbearing = overall->rbearing = 0; } return 0; } /* * XTextWidth16 - compute the width of sequence of XChar2bs. This is a * subset of XTextExtents16. */ int XTextWidth16 ( XFontStruct *fs, _Xconst XChar2b *string, int count) { int i; /* iterator */ Bool singlerow = (fs->max_byte1 == 0); /* optimization */ XCharStruct *def; /* info about default char */ int width = 0; /* RETURN value */ if (singlerow) { CI_GET_DEFAULT_INFO_1D (fs, def); } else { CI_GET_DEFAULT_INFO_2D (fs, def); } if (def && fs->min_bounds.width == fs->max_bounds.width) return (fs->min_bounds.width * count); /* * Iterate over all character in the input string; only consider characters * that exist. */ for (i = 0; i < count; i++, string++) { register XCharStruct *cs; unsigned int r = (unsigned int) string->byte1; /* watch for macros */ unsigned int c = (unsigned int) string->byte2; /* watch for macros */ if (singlerow) { unsigned int ind = ((r << 8) | c); /* watch for macros */ CI_GET_CHAR_INFO_1D (fs, ind, def, cs); } else { CI_GET_CHAR_INFO_2D (fs, r, c, def, cs); } if (cs) width += cs->width; } return width; } /* * _XTextHeight16 - compute the height of sequence of XChar2bs. */ int _XTextHeight16 ( XFontStruct *fs, _Xconst XChar2b *string, int count) { int i; /* iterator */ Bool singlerow = (fs->max_byte1 == 0); /* optimization */ XCharStruct *def; /* info about default char */ int height = 0; /* RETURN value */ if (singlerow) { CI_GET_DEFAULT_INFO_1D (fs, def); } else { CI_GET_DEFAULT_INFO_2D (fs, def); } if (def && (fs->min_bounds.ascent == fs->max_bounds.ascent) && (fs->min_bounds.descent == fs->max_bounds.descent)) return ((fs->min_bounds.ascent + fs->min_bounds.descent) * count); /* * Iterate over all character in the input string; only consider characters * that exist. */ for (i = 0; i < count; i++, string++) { register XCharStruct *cs; unsigned int r = (unsigned int) string->byte1; /* watch for macros */ unsigned int c = (unsigned int) string->byte2; /* watch for macros */ if (singlerow) { unsigned int ind = ((r << 8) | c); /* watch for macros */ CI_GET_CHAR_INFO_1D (fs, ind, def, cs); } else { CI_GET_CHAR_INFO_2D (fs, r, c, def, cs); } if (cs) height += (cs->ascent + cs->descent); } return height; } libX11-1.6.3/src/AllowEv.c000064401431060000012000000027141247741723500153660ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XAllowEvents( register Display *dpy, int mode, Time time) { register xAllowEventsReq *req; LockDisplay(dpy); GetReq(AllowEvents,req); req->mode = mode; req->time = time; UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/QuBest.c000064401431060000012000000035211247741723500152150ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" Status XQueryBestSize( register Display *dpy, int class, Drawable drawable, unsigned int width, unsigned int height, unsigned int *ret_width, unsigned int *ret_height) { xQueryBestSizeReply rep; register xQueryBestSizeReq *req; LockDisplay(dpy); GetReq(QueryBestSize, req); req->class = class; req->drawable = drawable; req->width = width; req->height = height; if (_XReply (dpy, (xReply *)&rep, 0, xTrue) == 0) { UnlockDisplay(dpy); SyncHandle(); return 0; } *ret_width = rep.width; *ret_height = rep.height; UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/SendEvent.c000064401431060000012000000043401247741723500157050ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" /* * In order to avoid all images requiring _XEventToWire, we install the * event converter here if it has never been installed. */ Status XSendEvent( register Display *dpy, Window w, Bool propagate, long event_mask, XEvent *event) { register xSendEventReq *req; xEvent ev; register Status (**fp)( Display * /* dpy */, XEvent * /* re */, xEvent * /* event */); Status status; /* initialize all of the event's fields first, before setting * the meaningful ones later. */ memset (&ev, 0, sizeof (ev)); LockDisplay (dpy); /* call through display to find proper conversion routine */ fp = &dpy->wire_vec[event->type & 0177]; if (*fp == NULL) *fp = _XEventToWire; status = (**fp)(dpy, event, &ev); if (status) { GetReq(SendEvent, req); req->destination = w; req->propagate = propagate; req->eventMask = event_mask; req->event = ev; } UnlockDisplay(dpy); SyncHandle(); return(status); } libX11-1.6.3/src/ClDisplay.c000064401431060000012000000045101247741723500156750ustar00alancstaff00002660200006 /* Copyright 1985, 1990, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xxcbint.h" #include "Xlib.h" #include "Xlibint.h" #include "Xintconn.h" /* * XCloseDisplay - XSync the connection to the X Server, close the connection, * and free all associated storage. Extension close procs should only free * memory and must be careful about the types of requests they generate. */ int XCloseDisplay ( register Display *dpy) { register _XExtension *ext; register int i; if (!(dpy->flags & XlibDisplayClosing)) { dpy->flags |= XlibDisplayClosing; for (i = 0; i < dpy->nscreens; i++) { register Screen *sp = &dpy->screens[i]; XFreeGC (dpy, sp->default_gc); } if (dpy->cursor_font != None) { XUnloadFont (dpy, dpy->cursor_font); } XSync(dpy, 1); /* throw away pending events, catch errors */ /* call out to any extensions interested */ for (ext = dpy->ext_procs; ext; ext = ext->next) { if (ext->close_display) (*ext->close_display)(dpy, &ext->codes); } /* if the closes generated more protocol, sync them up */ if (dpy->request != dpy->last_request_read) XSync(dpy, 1); } xcb_disconnect(dpy->xcb->connection); _XFreeDisplayStructure (dpy); return 0; } libX11-1.6.3/src/QuTextE16.c000064401431060000012000000052011247741723500155150ustar00alancstaff00002660200006/* Copyright 1986, 1987, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XQueryTextExtents16 ( register Display *dpy, Font fid, _Xconst XChar2b *string, register int nchars, int *dir, int *font_ascent, int *font_descent, register XCharStruct *overall) { register long i; register unsigned char *ptr; char *buf; xQueryTextExtentsReply rep; long nbytes; register xQueryTextExtentsReq *req; LockDisplay(dpy); nbytes = nchars << 1; GetReq(QueryTextExtents, req); req->fid = fid; if ((buf = _XAllocScratch (dpy, (unsigned long) nbytes))) { req->length += (nbytes + 3)>>2; req->oddLength = nchars & 1; for (ptr = (unsigned char *)buf, i = nchars; --i >= 0; string++) { *ptr++ = string->byte1; *ptr++ = string->byte2; } Data (dpy, buf, nbytes); } if (!_XReply (dpy, (xReply *)&rep, 0, xTrue) || !buf) { UnlockDisplay(dpy); SyncHandle(); return 0; } *dir = rep.drawDirection; *font_ascent = cvtINT16toInt (rep.fontAscent); *font_descent = cvtINT16toInt (rep.fontDescent); overall->ascent = (short) cvtINT16toShort (rep.overallAscent); overall->descent = (short) cvtINT16toShort (rep.overallDescent); /* XXX bogus - we're throwing away information!!! */ overall->width = (short) cvtINT32toInt (rep.overallWidth); overall->lbearing = (short) cvtINT32toInt (rep.overallLeft); overall->rbearing = (short) cvtINT32toInt (rep.overallRight); UnlockDisplay(dpy); SyncHandle(); return 1; } fdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XQueryTextExtents16 ( register Display *dpy, Font fid, _Xconst XChar2b *string, register int nchars, int *dir, int *font_ascent, int *font_descent, register XCharStruct *overall) { register long i; register unsigned char *ptr; char *buf; xQueryTextExtentsReply relibX11-1.6.3/src/ChClMode.c000064401431060000012000000026641247741723500154370ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XSetCloseDownMode( register Display *dpy, int mode) { register xSetCloseDownModeReq *req; LockDisplay(dpy); GetReq(SetCloseDownMode, req); req->mode = mode; UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/GetPntMap.c000064401431060000012000000067461247741723500156650ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include #ifdef MIN /* some systems define this in */ #undef MIN #endif #define MIN(a, b) ((a) < (b) ? (a) : (b)) int XGetPointerMapping ( register Display *dpy, unsigned char *map, /* RETURN */ int nmaps) { unsigned char mapping[256]; /* known fixed size */ unsigned long nbytes, remainder = 0; xGetPointerMappingReply rep; register xReq *req; LockDisplay(dpy); GetEmptyReq(GetPointerMapping, req); if (! _XReply(dpy, (xReply *)&rep, 0, xFalse)) { UnlockDisplay(dpy); SyncHandle(); return 0; } /* Don't count on the server returning a valid value */ if (rep.length >= (INT_MAX >> 2)) { _XEatDataWords(dpy, rep.length); UnlockDisplay(dpy); SyncHandle(); return 0; } nbytes = (unsigned long) rep.length << 2; if (nbytes > sizeof mapping) { remainder = nbytes - sizeof mapping; nbytes = sizeof mapping; } _XRead (dpy, (char *)mapping, nbytes); /* don't return more data than the user asked for. */ if (rep.nElts) { memcpy ((char *) map, (char *) mapping, MIN((int)rep.nElts, nmaps) ); } if (remainder) _XEatData(dpy, remainder); UnlockDisplay(dpy); SyncHandle(); return ((int) rep.nElts); } KeySym * XGetKeyboardMapping (Display *dpy, #if NeedWidePrototypes unsigned int first_keycode, #else KeyCode first_keycode, #endif int count, int *keysyms_per_keycode) { unsigned long nbytes; CARD32 nkeysyms; register KeySym *mapping = NULL; xGetKeyboardMappingReply rep; register xGetKeyboardMappingReq *req; LockDisplay(dpy); GetReq(GetKeyboardMapping, req); req->firstKeyCode = first_keycode; req->count = count; if (! _XReply(dpy, (xReply *)&rep, 0, xFalse)) { UnlockDisplay(dpy); SyncHandle(); return (KeySym *) NULL; } nkeysyms = rep.length; if (nkeysyms > 0) { if (nkeysyms < (INT_MAX / sizeof (KeySym))) { nbytes = nkeysyms * sizeof (KeySym); mapping = Xmalloc (nbytes); } if (! mapping) { _XEatDataWords(dpy, rep.length); UnlockDisplay(dpy); SyncHandle(); return (KeySym *) NULL; } nbytes = nkeysyms << 2; _XRead32 (dpy, (long *) mapping, nbytes); } *keysyms_per_keycode = rep.keySymsPerKeyCode; UnlockDisplay(dpy); SyncHandle(); return (mapping); } libX11-1.6.3/src/UIThrStubs.c000064401431060000012000000143041247741723500160270ustar00alancstaff00002660200006/* * * Copyright (c) 1995 David E. Wexelblat. All rights reserved * * 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: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", 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 DAVID E. WEXELBLAT 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. * * Except as contained in this notice, the name of David E. Wexelblat shall * not be used in advertising or otherwise to promote the sale, use or * other dealings in this Software without prior written authorization * from David E. Wexelblat. * */ /* * Stubs for thread functions needed by the X library. Supports * UnixWare 2.x threads; may support Solaris 2 threads as well, but not * tested. Defining things this way removes the dependency of the X * library on the threads library, but still supports threads if the user * specificies the thread library on the link line. */ /* * Modifications by Carlos A M dos Santos, XFree86 Project, November 1999. * * Explanation from : * The structure below is complicated, mostly because P1003.1c (the * IEEE POSIX Threads spec) went through lots of drafts, and some * vendors shipped systems based on draft API that were changed later. * Unfortunately POSIX did not provide a feature-test macro for * distinguishing each of the drafts. */ #ifdef CTHREADS #ifdef HAVE_CONFIG_H #include #endif #include typedef cthread_t xthread_t; #define xthread_self cthread_self #pragma weak cthread_self = _Xthr_self_stub_ #define xmutex_init mutex_init #pragma weak mutex_init = _Xthr_zero_stub_ #pragma weak mutex_clear = _Xthr_zero_stub_ #pragma weak mutex_lock = _Xthr_zero_stub_ #pragma weak mutex_unlock = _Xthr_zero_stub_ #pragma weak condition_init = _Xthr_zero_stub_ #pragma weak condition_clear = _Xthr_zero_stub_ #pragma weak condition_wait = _Xthr_zero_stub_ #pragma weak condition_signal = _Xthr_zero_stub_ #pragma weak condition_broadcast = _Xthr_zero_stub_ #else /* !CTHREADS */ #if defined(SVR4) && !defined(__sgi) #include typedef thread_t xthread_t; #pragma weak thr_self = _Xthr_self_stub_ #pragma weak mutex_init = _Xthr_zero_stub_ #pragma weak mutex_destroy = _Xthr_zero_stub_ #pragma weak mutex_lock = _Xthr_zero_stub_ #pragma weak mutex_unlock = _Xthr_zero_stub_ #pragma weak cond_init = _Xthr_zero_stub_ #pragma weak cond_destroy = _Xthr_zero_stub_ #pragma weak cond_wait = _Xthr_zero_stub_ #pragma weak cond_signal = _Xthr_zero_stub_ #pragma weak cond_broadcast = _Xthr_zero_stub_ #else /* !SVR4 */ #ifdef WIN32 #include #else /* !WIN32 */ #ifdef USE_TIS_SUPPORT #include typedef pthread_t xthread_t; #pragma weak tis_self = _Xthr_self_stub_ #pragma weak tis_mutex_init = _Xthr_zero_stub_ #pragma weak tis_mutex_destroy = _Xthr_zero_stub_ #pragma weak tis_mutex_lock = _Xthr_zero_stub_ #pragma weak tis_mutex_unlock = _Xthr_zero_stub_ #pragma weak tis_cond_init = _Xthr_zero_stub_ #pragma weak tis_cond_destroy = _Xthr_zero_stub_ #pragma weak tis_cond_wait = _Xthr_zero_stub_ #pragma weak tis_cond_signal = _Xthr_zero_stub_ #pragma weak tis_cond_broadcast = _Xthr_zero_stub_ #else #include typedef pthread_t xthread_t; #if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) xthread_t pthread_self() __attribute__ ((weak, alias ("_Xthr_self_stub_"))); int pthread_mutex_init() __attribute__ ((weak, alias ("_Xthr_zero_stub_"))); int pthread_mutex_destroy() __attribute__ ((weak, alias ("_Xthr_zero_stub_"))); int pthread_mutex_lock() __attribute__ ((weak, alias ("_Xthr_zero_stub_"))); int pthread_mutex_unlock() __attribute__ ((weak, alias ("_Xthr_zero_stub_"))); int pthread_cond_init() __attribute__ ((weak, alias ("_Xthr_zero_stub_"))); int pthread_cond_destroy() __attribute__ ((weak, alias ("_Xthr_zero_stub_"))); int pthread_cond_wait() __attribute__ ((weak, alias ("_Xthr_zero_stub_"))); int pthread_cond_signal() __attribute__ ((weak, alias ("_Xthr_zero_stub_"))); int pthread_cond_broadcast() __attribute__ ((weak, alias ("_Xthr_zero_stub_"))); int pthread_key_create() __attribute__ ((weak, alias ("_Xthr_zero_stub_"))); void *pthread_getspecific() __attribute__ ((weak, alias ("_Xthr_zero_stub_"))); int pthread_setspecific() __attribute__ ((weak, alias ("_Xthr_zero_stub_"))); #else /* __GNUC__ */ #pragma weak pthread_self = _Xthr_self_stub_ #pragma weak pthread_mutex_init = _Xthr_zero_stub_ #pragma weak pthread_mutex_destroy = _Xthr_zero_stub_ #pragma weak pthread_mutex_lock = _Xthr_zero_stub_ #pragma weak pthread_mutex_unlock = _Xthr_zero_stub_ #pragma weak pthread_cond_init = _Xthr_zero_stub_ #pragma weak pthread_cond_destroy = _Xthr_zero_stub_ #pragma weak pthread_cond_wait = _Xthr_zero_stub_ #pragma weak pthread_cond_signal = _Xthr_zero_stub_ #pragma weak pthread_cond_broadcast = _Xthr_zero_stub_ /* These are added for libGL */ #pragma weak pthread_key_create = _Xthr_zero_stub_ #pragma weak pthread_getspecific = _Xthr_zero_stub_ #pragma weak pthread_setspecific = _Xthr_zero_stub_ #endif /* __GNUC__ */ #if defined(_DECTHREADS_) || defined(linux) #pragma weak pthread_equal = _Xthr_equal_stub_ /* See Xthreads.h! */ int _Xthr_equal_stub_() { return(1); } #endif /* _DECTHREADS_ || linux */ #endif /* USE_TIS_SUPPORT */ #endif /* WIN32 */ #endif /* SVR4 */ #endif /* CTHREADS */ static xthread_t _Xthr_self_stub_() { static xthread_t _X_no_thread_id; return(_X_no_thread_id); /* defined by */ } static int _Xthr_zero_stub_() { return(0); } libX11-1.6.3/src/GetMoEv.c000064401431060000012000000045651247741723500153310ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include XTimeCoord *XGetMotionEvents( register Display *dpy, Window w, Time start, Time stop, int *nEvents) /* RETURN */ { xGetMotionEventsReply rep; register xGetMotionEventsReq *req; XTimeCoord *tc = NULL; LockDisplay(dpy); GetReq(GetMotionEvents, req); req->window = w; /* XXX is this right for all machines? */ req->start = start; req->stop = stop; if (!_XReply (dpy, (xReply *)&rep, 0, xFalse)) { UnlockDisplay(dpy); SyncHandle(); return (NULL); } if (rep.nEvents && (rep.nEvents < (INT_MAX / sizeof(XTimeCoord)))) tc = Xmalloc(rep.nEvents * sizeof(XTimeCoord)); if (tc == NULL) { /* server returned either no events or a bad event count */ *nEvents = 0; _XEatDataWords (dpy, rep.length); } else { register XTimeCoord *tcptr; unsigned int i; xTimecoord xtc; *nEvents = (int) rep.nEvents; for (i = rep.nEvents, tcptr = tc; i > 0; i--, tcptr++) { _XRead (dpy, (char *) &xtc, SIZEOF (xTimecoord)); tcptr->time = xtc.time; tcptr->x = cvtINT16toShort (xtc.x); tcptr->y = cvtINT16toShort (xtc.y); } } UnlockDisplay(dpy); SyncHandle(); return (tc); } libX11-1.6.3/src/FreeCols.c000064401431060000012000000034071247741723500155170ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XFreeColors( register Display *dpy, Colormap cmap, unsigned long *pixels, /* LISTofCARD32 */ int npixels, unsigned long planes) /* CARD32 */ { register xFreeColorsReq *req; register long nbytes; LockDisplay(dpy); GetReq(FreeColors, req); req->cmap = cmap; req->planeMask = planes; /* on the VAX, each pixel is a 32-bit (unsigned) integer */ req->length += npixels; nbytes = npixels << 2; /* watch out for macros... */ Data32 (dpy, (long *) pixels, nbytes); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/CopyGC.c000064401431060000012000000076631247741723500151510ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XCopyGC ( register Display *dpy, GC srcGC, unsigned long mask, /* which ones to set initially */ GC destGC) { register XGCValues *destgv = &destGC->values, *srcgv = &srcGC->values; register xCopyGCReq *req; register _XExtension *ext; LockDisplay(dpy); mask &= (1L << (GCLastBit + 1)) - 1; /* if some of the source values to be copied are "dirty", flush them out before sending the CopyGC request. */ if (srcGC->dirty & mask) _XFlushGCCache(dpy, srcGC); /* mark the copied values "not dirty" in the destination. */ destGC->dirty &= ~mask; GetReq(CopyGC, req); req->srcGC = srcGC->gid; req->dstGC = destGC->gid; req->mask = mask; if (mask & GCFunction) destgv->function = srcgv->function; if (mask & GCPlaneMask) destgv->plane_mask = srcgv->plane_mask; if (mask & GCForeground) destgv->foreground = srcgv->foreground; if (mask & GCBackground) destgv->background = srcgv->background; if (mask & GCLineWidth) destgv->line_width = srcgv->line_width; if (mask & GCLineStyle) destgv->line_style = srcgv->line_style; if (mask & GCCapStyle) destgv->cap_style = srcgv->cap_style; if (mask & GCJoinStyle) destgv->join_style = srcgv->join_style; if (mask & GCFillStyle) destgv->fill_style = srcgv->fill_style; if (mask & GCFillRule) destgv->fill_rule = srcgv->fill_rule; if (mask & GCArcMode) destgv->arc_mode = srcgv->arc_mode; if (mask & GCTile) destgv->tile = srcgv->tile; if (mask & GCStipple) destgv->stipple = srcgv->stipple; if (mask & GCTileStipXOrigin) destgv->ts_x_origin = srcgv->ts_x_origin; if (mask & GCTileStipYOrigin) destgv->ts_y_origin = srcgv->ts_y_origin; if (mask & GCFont) destgv->font = srcgv->font; if (mask & GCSubwindowMode) destgv->subwindow_mode = srcgv->subwindow_mode; if (mask & GCGraphicsExposures) destgv->graphics_exposures = srcgv->graphics_exposures; if (mask & GCClipXOrigin) destgv->clip_x_origin = srcgv->clip_x_origin; if (mask & GCClipYOrigin) destgv->clip_y_origin = srcgv->clip_y_origin; if (mask & GCClipMask) { destGC->rects = srcGC->rects; destgv->clip_mask = srcgv->clip_mask; } if (mask & GCDashOffset) destgv->dash_offset = srcgv->dash_offset; if (mask & GCDashList) { destGC->dashes = srcGC->dashes; destgv->dashes = srcgv->dashes; } /* call out to any extensions interested */ for (ext = dpy->ext_procs; ext; ext = ext->next) if (ext->copy_GC) (*ext->copy_GC)(dpy, destGC, &ext->codes); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/GCMisc.c000064401431060000012000000052311247741723500151170ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XSetArcMode ( register Display *dpy, register GC gc, int arc_mode) { LockDisplay(dpy); if (gc->values.arc_mode != arc_mode) { gc->values.arc_mode = arc_mode; gc->dirty |= GCArcMode; } UnlockDisplay(dpy); SyncHandle(); return 1; } int XSetFillRule ( register Display *dpy, register GC gc, int fill_rule) { LockDisplay(dpy); if (gc->values.fill_rule != fill_rule) { gc->values.fill_rule = fill_rule; gc->dirty |= GCFillRule; } UnlockDisplay(dpy); SyncHandle(); return 1; } int XSetFillStyle ( register Display *dpy, register GC gc, int fill_style) { LockDisplay(dpy); if (gc->values.fill_style != fill_style) { gc->values.fill_style = fill_style; gc->dirty |= GCFillStyle; } UnlockDisplay(dpy); SyncHandle(); return 1; } int XSetGraphicsExposures ( register Display *dpy, register GC gc, Bool graphics_exposures) { LockDisplay(dpy); if (gc->values.graphics_exposures != graphics_exposures) { gc->values.graphics_exposures = graphics_exposures; gc->dirty |= GCGraphicsExposures; } UnlockDisplay(dpy); SyncHandle(); return 1; } int XSetSubwindowMode ( register Display *dpy, register GC gc, int subwindow_mode) { LockDisplay(dpy); if (gc->values.subwindow_mode != subwindow_mode) { gc->values.subwindow_mode = subwindow_mode; gc->dirty |= GCSubwindowMode; } UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/ChkWinEv.c000064401431060000012000000055211247741723500154720ustar00alancstaff00002660200006/* Copyright 1985, 1987, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" extern long const _Xevent_to_mask[]; #define AllPointers (PointerMotionMask|PointerMotionHintMask|ButtonMotionMask) #define AllButtons (Button1MotionMask|Button2MotionMask|Button3MotionMask|\ Button4MotionMask|Button5MotionMask) /* * Check existing events in queue to find if any match. If so, return. * If not, flush buffer and see if any more events are readable. If one * matches, return. If all else fails, tell the user no events found. */ Bool XCheckWindowEvent ( register Display *dpy, Window w, /* Selected window. */ long mask, /* Selected event mask. */ register XEvent *event) /* XEvent to be filled in. */ { register _XQEvent *prev, *qelt; unsigned long qe_serial = 0; int n; /* time through count */ LockDisplay(dpy); /* Delete unclaimed cookies */ _XFreeEventCookies(dpy); prev = NULL; for (n = 3; --n >= 0;) { for (qelt = prev ? prev->next : dpy->head; qelt; prev = qelt, qelt = qelt->next) { if ((qelt->event.xany.window == w) && (qelt->event.type < GenericEvent) && (_Xevent_to_mask[qelt->event.type] & mask) && ((qelt->event.type != MotionNotify) || (mask & AllPointers) || (mask & AllButtons & qelt->event.xmotion.state))) { *event = qelt->event; _XDeq(dpy, prev, qelt); UnlockDisplay(dpy); return True; } } if (prev) qe_serial = prev->qserial_num; switch (n) { case 2: _XEventsQueued(dpy, QueuedAfterReading); break; case 1: _XFlush(dpy); break; } if (prev && prev->qserial_num != qe_serial) /* another thread has snatched this event */ prev = NULL; } UnlockDisplay(dpy); return False; } on1MotionMask|Button2MotionMask|Button3MotionMask|\ Button4MotionMask|Button5MotionMask) /* * Check existing events in queue to find if any match. If so, return. * IlibX11-1.6.3/src/FreeCmap.c000064401431060000012000000027701247741723500155010ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlib.h" #include "Xlibint.h" #include "Cmap.h" int XFreeColormap( register Display *dpy, Colormap cmap) { register xResourceReq *req; LockDisplay(dpy); GetResReq(FreeColormap, cmap, req); UnlockDisplay(dpy); SyncHandle(); #ifdef XCMS _XcmsDeleteCmapRec(dpy, cmap); #endif return 1; } libX11-1.6.3/src/FillArcs.c000064401431060000012000000036451247741723500155200ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #define arc_scale (SIZEOF(xArc) / 4) int XFillArcs( register Display *dpy, Drawable d, GC gc, XArc *arcs, int n_arcs) { register xPolyFillArcReq *req; long len; int n; LockDisplay(dpy); FlushGC(dpy, gc); while (n_arcs) { GetReq(PolyFillArc, req); req->drawable = d; req->gc = gc->gid; n = n_arcs; len = ((long)n) * arc_scale; if (!dpy->bigreq_size && len > (dpy->max_request_size - req->length)) { n = (dpy->max_request_size - req->length) / arc_scale; len = ((long)n) * arc_scale; } SetReqLen(req, len, len); len <<= 2; /* watch out for macros... */ Data16 (dpy, (short *) arcs, len); n_arcs -= n; arcs += n; } UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/LoadFont.c000064401431060000012000000033751247741723500155270ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" Font XLoadFont ( register Display *dpy, _Xconst char *name) { register long nbytes; Font fid; register xOpenFontReq *req; if (_XF86LoadQueryLocaleFont(dpy, name, (XFontStruct **)0, &fid)) return fid; LockDisplay(dpy); GetReq(OpenFont, req); nbytes = req->nbytes = name ? strlen(name) : 0; req->fid = fid = XAllocID(dpy); req->length += (nbytes+3)>>2; Data (dpy, name, nbytes); UnlockDisplay(dpy); SyncHandle(); return (fid); /* can't return (req->fid) since request may have already been sent */ } libX11-1.6.3/src/FSSaver.c000064401431060000012000000032261247741723500153250ustar00alancstaff00002660200006/* Copyright 1987, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XActivateScreenSaver(register Display *dpy) { XForceScreenSaver (dpy, ScreenSaverActive); return 1; } int XResetScreenSaver(register Display *dpy) { XForceScreenSaver (dpy, ScreenSaverReset); return 1; } int XForceScreenSaver( register Display *dpy, int mode) { register xForceScreenSaverReq *req; LockDisplay(dpy); GetReq(ForceScreenSaver, req); req->mode = mode; UnlockDisplay(dpy); SyncHandle(); return 1; } NGEMENT. IN NO EVENT SHALL THE OPEN GROUP 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. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise tlibX11-1.6.3/src/xcb_disp.c000064401431060000012000000050021247741723500156010ustar00alancstaff00002660200006/* Copyright (C) 2003-2006 Jamey Sharp, Josh Triplett * This file is licensed under the MIT license. See the file COPYING. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xxcbint.h" #include #include #include #include static xcb_auth_info_t xauth; static void *alloc_copy(const void *src, int *dstn, size_t n) { void *dst; if(n <= 0) { *dstn = 0; return NULL; } dst = Xmalloc(n); if(!dst) return NULL; memcpy(dst, src, n); *dstn = n; return dst; } void XSetAuthorization(char *name, int namelen, char *data, int datalen) { _XLockMutex(_Xglobal_lock); Xfree(xauth.name); Xfree(xauth.data); /* if either of these allocs fail, _XConnectXCB won't use this auth * data, so we don't need to check it here. */ xauth.name = alloc_copy(name, &xauth.namelen, namelen); xauth.data = alloc_copy(data, &xauth.datalen, datalen); #if 0 /* but, for the paranoid among us: */ if((namelen > 0 && !xauth.name) || (datalen > 0 && !xauth.data)) { Xfree(xauth.name); Xfree(xauth.data); xauth.name = xauth.data = 0; xauth.namelen = xauth.datalen = 0; } #endif _XUnlockMutex(_Xglobal_lock); } int _XConnectXCB(Display *dpy, _Xconst char *display, int *screenp) { char *host; int n = 0; xcb_connection_t *c; dpy->fd = -1; dpy->xcb = Xcalloc(1, sizeof(_X11XCBPrivate)); if(!dpy->xcb) return 0; if(!xcb_parse_display(display, &host, &n, screenp)) return 0; /* host and n are unused, but xcb_parse_display requires them */ free(host); _XLockMutex(_Xglobal_lock); if(xauth.name && xauth.data) c = xcb_connect_to_display_with_auth_info(display, &xauth, NULL); else c = xcb_connect(display, NULL); _XUnlockMutex(_Xglobal_lock); dpy->fd = xcb_get_file_descriptor(c); dpy->xcb->connection = c; dpy->xcb->next_xid = xcb_generate_id(dpy->xcb->connection); dpy->xcb->event_notify = xcondition_malloc(); dpy->xcb->reply_notify = xcondition_malloc(); if (!dpy->xcb->event_notify || !dpy->xcb->reply_notify) return 0; xcondition_init(dpy->xcb->event_notify); xcondition_init(dpy->xcb->reply_notify); return !xcb_connection_has_error(c); } void _XFreeX11XCBStructure(Display *dpy) { /* reply_data was allocated by system malloc, not Xmalloc */ free(dpy->xcb->reply_data); while(dpy->xcb->pending_requests) { PendingRequest *tmp = dpy->xcb->pending_requests; dpy->xcb->pending_requests = tmp->next; free(tmp); } xcondition_free(dpy->xcb->event_notify); xcondition_free(dpy->xcb->reply_notify); Xfree(dpy->xcb); } libX11-1.6.3/src/Text16.c000064401431060000012000000067751247741723500151230ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XDrawString16( register Display *dpy, Drawable d, GC gc, int x, int y, _Xconst XChar2b *string, int length) { int Datalength = 0; register xPolyText16Req *req; if (length <= 0) return 0; LockDisplay(dpy); FlushGC(dpy, gc); GetReq (PolyText16, req); req->drawable = d; req->gc = gc->gid; req->x = x; req->y = y; Datalength += SIZEOF(xTextElt) * ((length + 253) / 254) + (length << 1); req->length += (Datalength + 3)>>2; /* convert to number of 32-bit words */ /* * If the entire request does not fit into the remaining space in the * buffer, flush the buffer first. If the request does fit into the * empty buffer, then we won't have to flush it at the end to keep * the buffer 32-bit aligned. */ if (dpy->bufptr + Datalength > dpy->bufmax) _XFlush (dpy); { int nbytes; int PartialNChars = length; register xTextElt *elt; XChar2b *CharacterOffset = (XChar2b *)string; while(PartialNChars > 254) { nbytes = 254 * 2 + SIZEOF(xTextElt); BufAlloc (xTextElt *, elt, nbytes); elt->delta = 0; elt->len = 254; memcpy (((char *) elt) + 2, (char *)CharacterOffset, 254 * 2); PartialNChars = PartialNChars - 254; CharacterOffset += 254; } if (PartialNChars) { nbytes = PartialNChars * 2 + SIZEOF(xTextElt); BufAlloc (xTextElt *, elt, nbytes); elt->delta = 0; elt->len = PartialNChars; memcpy(((char *)elt) + 2, (char *)CharacterOffset, PartialNChars * 2); } } /* Pad request out to a 32-bit boundary */ if (Datalength &= 3) { char *pad; /* * BufAlloc is a macro that uses its last argument more than * once, otherwise I'd write "BufAlloc (char *, pad, 4-length)" */ length = 4 - Datalength; BufAlloc (char *, pad, length); /* * if there are 3 bytes of padding, the first byte MUST be 0 * so the pad bytes aren't mistaken for a final xTextElt */ *pad = 0; } /* * If the buffer pointer is not now pointing to a 32-bit boundary, * we must flush the buffer so that it does point to a 32-bit boundary * at the end of this routine. */ if ((dpy->bufptr - dpy->buffer) & 3) _XFlush (dpy); UnlockDisplay(dpy); SyncHandle(); return 0; } libX11-1.6.3/src/FSWrap.c000064401431060000012000000147171247741723500151650ustar00alancstaff00002660200006 /* * Copyright 1991 by the Open Software Foundation * Copyright 1993 by the TOSHIBA Corp. * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name Open Software Foundation * not be used in advertising or publicity pertaining to distribution of the * software without specific, written prior permission. Open Software * Foundation makes no representations about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. * * OPEN SOFTWARE FOUNDATION DISCLAIMS ALL WARRANTIES WITH REGARD TO * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS, IN NO EVENT SHALL OPEN SOFTWARE FOUNDATIONN BE * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * M. Collins OSF * * Katsuhisa Yano TOSHIBA Corp. */ /* Copyright 1991, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xlcint.h" #include #include #define XMAXLIST 256 char ** _XParseBaseFontNameList( char *str, int *num) { char *plist[XMAXLIST]; char **list; char *ptr, *psave; *num = 0; if (!str || !*str) { return (char **)NULL; } while (*str && isspace(*str)) str++; if (!*str) return (char **)NULL; if (!(ptr = strdup(str))) { return (char **)NULL; } psave = ptr; /* somebody who specifies more than XMAXLIST basefontnames will lose */ while (*num < (sizeof plist / sizeof plist[0])) { char *back; plist[*num] = ptr; if ((ptr = strchr(ptr, ','))) { back = ptr; } else { back = plist[*num] + strlen(plist[*num]); } while (isspace(*(back - 1))) back--; *back = '\0'; (*num)++; if (!ptr) break; ptr++; while (*ptr && isspace(*ptr)) ptr++; if (!*ptr) break; } if (!(list = Xmalloc(sizeof(char *) * (*num + 1)))) { Xfree(psave); return (char **)NULL; } memcpy((char *)list, (char *)plist, sizeof(char *) * (*num)); *(list + *num) = NULL; return list; } static char ** copy_string_list( char **string_list, int list_count) { char **string_list_ret, **list_src, **list_dst, *dst; int length, count; if (string_list == NULL || list_count <= 0) return (char **) NULL; string_list_ret = Xmalloc(sizeof(char *) * list_count); if (string_list_ret == NULL) return (char **) NULL; list_src = string_list; count = list_count; for (length = 0; count-- > 0; list_src++) length += strlen(*list_src) + 1; dst = Xmalloc(length); if (dst == NULL) { Xfree(string_list_ret); return (char **) NULL; } list_src = string_list; count = list_count; list_dst = string_list_ret; for ( ; count-- > 0; list_src++) { strcpy(dst, *list_src); *list_dst++ = dst; dst += strlen(dst) + 1; } return string_list_ret; } XFontSet XCreateFontSet ( Display *dpy, _Xconst char *base_font_name_list, char ***missing_charset_list, int *missing_charset_count, char **def_string) { XOM om; XOC oc; XOMCharSetList *list; *missing_charset_list = NULL; *missing_charset_count = 0; om = XOpenOM(dpy, NULL, NULL, NULL); if (om == NULL) return (XFontSet) NULL; if ((oc = XCreateOC(om, XNBaseFontName, base_font_name_list, NULL))) { list = &oc->core.missing_list; oc->core.om_automatic = True; } else list = &om->core.required_charset; *missing_charset_list = copy_string_list(list->charset_list, list->charset_count); *missing_charset_count = list->charset_count; if (list->charset_list && *missing_charset_list == NULL) oc = NULL; if (oc && def_string) { *def_string = oc->core.default_string; if (!*def_string) *def_string = ""; } if (oc == NULL) XCloseOM(om); return (XFontSet) oc; } int XFontsOfFontSet( XFontSet font_set, XFontStruct ***font_struct_list, char ***font_name_list) { *font_name_list = font_set->core.font_info.font_name_list; *font_struct_list = font_set->core.font_info.font_struct_list; return font_set->core.font_info.num_font; } char * XBaseFontNameListOfFontSet(XFontSet font_set) { return font_set->core.base_name_list; } char * XLocaleOfFontSet(XFontSet font_set) { return font_set->core.om->core.lcd->core->name; } Bool XContextDependentDrawing(XFontSet font_set) { return font_set->core.om->core.context_dependent; } Bool XDirectionalDependentDrawing(XFontSet font_set) { return font_set->core.om->core.directional_dependent; } Bool XContextualDrawing(XFontSet font_set) { return font_set->core.om->core.contextual_drawing; } XFontSetExtents * XExtentsOfFontSet(XFontSet font_set) { if (!font_set) return NULL; return &font_set->core.font_set_extents; } void XFreeFontSet( Display *dpy, XFontSet font_set) { XCloseOM(font_set->core.om); } libX11-1.6.3/src/UndefCurs.c000064401431060000012000000031231247741723500157060ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XUndefineCursor ( register Display *dpy, Window w) { register xChangeWindowAttributesReq *req; unsigned long defcurs = None; LockDisplay(dpy); GetReqExtra (ChangeWindowAttributes, 4, req); req->window = w; req->valueMask = CWCursor; OneDataCard32 (dpy, NEXTPTR(req,xChangeWindowAttributesReq), defcurs); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/MaskEvent.c000064401431060000012000000050321247741723500157060ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" extern long const _Xevent_to_mask[]; #define AllPointers (PointerMotionMask|PointerMotionHintMask|ButtonMotionMask) #define AllButtons (Button1MotionMask|Button2MotionMask|Button3MotionMask|\ Button4MotionMask|Button5MotionMask) /* * return the next event in the queue matching one of the events in the mask. * If no event, flush output, and wait until match succeeds. * Events earlier in the queue are not discarded. */ int XMaskEvent ( register Display *dpy, long mask, /* Selected event mask. */ register XEvent *event) /* XEvent to be filled in. */ { register _XQEvent *prev, *qelt; unsigned long qe_serial = 0; LockDisplay(dpy); /* Delete unclaimed cookies */ _XFreeEventCookies(dpy); prev = NULL; while (1) { for (qelt = prev ? prev->next : dpy->head; qelt; prev = qelt, qelt = qelt->next) { if ((qelt->event.type < GenericEvent) && (_Xevent_to_mask[qelt->event.type] & mask) && ((qelt->event.type != MotionNotify) || (mask & AllPointers) || (mask & AllButtons & qelt->event.xmotion.state))) { *event = qelt->event; _XDeq(dpy, prev, qelt); UnlockDisplay(dpy); return 0; } } if (prev) qe_serial = prev->qserial_num; _XReadEvents(dpy); if (prev && prev->qserial_num != qe_serial) /* another thread has snatched this event */ prev = NULL; } } other dealings in this Software without prior written authorization from The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" extern long const _Xevent_to_mask[]; #define AllPointers (PointerMotionMask|PointerMotionHintMask|ButtonMotionMask) #define AllButtons (Button1MotionMask|Button2MotionMask|Button3MotionMask|\ Button4MotionMask|Button5MotionMask) /* * return the next event in the queue matching one of the events in the mask. * IlibX11-1.6.3/src/CrPixmap.c000064401431060000012000000036051247741723500155400ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #ifdef USE_DYNAMIC_XCURSOR void _XNoticeCreateBitmap (Display *dpy, Pixmap pid, unsigned int width, unsigned int height); #endif Pixmap XCreatePixmap ( register Display *dpy, Drawable d, unsigned int width, unsigned int height, unsigned int depth) { Pixmap pid; register xCreatePixmapReq *req; LockDisplay(dpy); GetReq(CreatePixmap, req); req->drawable = d; req->width = width; req->height = height; req->depth = depth; pid = req->pid = XAllocID(dpy); UnlockDisplay(dpy); SyncHandle(); #ifdef USE_DYNAMIC_XCURSOR if (depth == 1) _XNoticeCreateBitmap (dpy, pid, width, height); #endif return (pid); } libX11-1.6.3/src/Makefile.in000064401431060000012000001665621247741725500157340ustar00alancstaff00002660200006# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ # # ========================= Extra stuff ============================ # @OS2_TRUE@am__append_1 = os2Stubs.c @THRSTUBS_TRUE@am__append_2 = UIThrStubs.c @MAKE_LINT_LIB_TRUE@am__append_3 = $(lintlib_DATA) subdir = src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_define_dir.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h $(top_builddir)/include/X11/XlibConf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(lintlibdir)" \ "$(DESTDIR)$(x11datadir)" LTLIBRARIES = $(lib_LTLIBRARIES) libX11_xcb_la_DEPENDENCIES = libX11.la am_libX11_xcb_la_OBJECTS = x11_xcb.lo libX11_xcb_la_OBJECTS = $(am_libX11_xcb_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libX11_xcb_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libX11_xcb_la_LDFLAGS) $(LDFLAGS) -o $@ am__DEPENDENCIES_1 = libX11_la_DEPENDENCIES = $(USE_I18N_LIBS) $(USE_XCMS_LIBS) \ $(USE_XKB_LIBS) $(am__DEPENDENCIES_1) am__libX11_la_SOURCES_DIST = AllCells.c AllowEv.c AllPlanes.c \ AutoRep.c Backgnd.c BdrWidth.c Bell.c Border.c ChAccCon.c \ ChActPGb.c ChClMode.c ChCmap.c ChGC.c ChKeyCon.c ChkIfEv.c \ ChkMaskEv.c ChkTypEv.c ChkTypWEv.c ChkWinEv.c ChPntCon.c \ ChProp.c ChSaveSet.c ChWAttrs.c ChWindow.c CirWin.c CirWinDn.c \ CirWinUp.c ClDisplay.c ClearArea.c Clear.c Cmap.h ConfWind.c \ Context.c ConvSel.c CopyArea.c CopyCmap.c CopyGC.c CopyPlane.c \ CrBFData.c CrCmap.c CrCursor.c CrGC.c CrGlCur.c Cr.h \ CrPFBData.c CrPixmap.c CrWindow.c Cursor.c DefCursor.c \ DelProp.c Depths.c DestSubs.c DestWind.c DisName.c DrArc.c \ DrArcs.c DrLine.c DrLines.c DrPoint.c DrPoints.c DrRect.c \ DrRects.c DrSegs.c ErrDes.c ErrHndlr.c evtomask.c EvToWire.c \ FetchName.c FillArc.c FillArcs.c FillPoly.c FillRct.c \ FillRcts.c FilterEv.c Flush.c Font.c FontInfo.c FontNames.c \ FreeCmap.c FreeCols.c FreeCurs.c FreeEData.c FreeEventData.c \ FreeGC.c FreePix.c FSSaver.c FSWrap.c GCMisc.c Geom.c \ GetAtomNm.c GetColor.c GetDflt.c GetEventData.c GetFPath.c \ GetFProp.c GetGCVals.c GetGeom.c GetHColor.c GetHints.c \ GetIFocus.c GetImage.c GetKCnt.c GetMoEv.c GetNrmHint.c \ GetPCnt.c GetPntMap.c GetProp.c GetRGBCMap.c GetSOwner.c \ GetSSaver.c GetStCmap.c GetTxtProp.c GetWAttrs.c GetWMCMapW.c \ GetWMProto.c globals.c GrButton.c GrKeybd.c GrKey.c \ GrPointer.c GrServer.c Host.c Iconify.c IfEvent.c imConv.c \ ImText16.c ImText.c ImUtil.c InitExt.c InsCmap.c IntAtom.c \ KeyBind.c Key.h KeysymStr.c KillCl.c LiHosts.c LiICmaps.c \ LiProps.c ListExt.c LoadFont.c LockDis.c locking.c locking.h \ LookupCol.c LowerWin.c Macros.c MapRaised.c MapSubs.c \ MapWindow.c MaskEvent.c Misc.c ModMap.c MoveWin.c NextEvent.c \ OCWrap.c OMWrap.c OpenDis.c ParseCmd.c ParseCol.c ParseGeom.c \ pathmax.h PeekEvent.c PeekIfEv.c Pending.c PixFormats.c \ PmapBgnd.c PmapBord.c poly.h PolyReg.c PolyTxt16.c PolyTxt.c \ PropAlloc.c PutBEvent.c PutImage.c Quarks.c QuBest.c QuColor.c \ QuColors.c QuCurShp.c QuExt.c QuKeybd.c QuPntr.c QuStipShp.c \ QuTextE16.c QuTextExt.c QuTileShp.c QuTree.c RaiseWin.c \ RdBitF.c RecolorC.c ReconfWin.c ReconfWM.c Region.c RegstFlt.c \ RepWindow.c RestackWs.c RotProp.c ScrResStr.c SelInput.c \ SendEvent.c SetBack.c SetClMask.c SetClOrig.c SetCRects.c \ SetDashes.c SetFont.c SetFore.c SetFPath.c SetFunc.c \ SetHints.c SetIFocus.c SetLocale.c SetLStyle.c SetNrmHint.c \ SetPMask.c SetPntMap.c SetRGBCMap.c SetSOwner.c SetSSaver.c \ SetState.c SetStCmap.c SetStip.c SetTile.c SetTSOrig.c \ SetTxtProp.c SetWMCMapW.c SetWMProto.c StBytes.c StColor.c \ StColors.c StName.c StNColor.c StrKeysym.c StrToText.c Sync.c \ Synchro.c Text16.c Text.c TextExt16.c TextExt.c TextToStr.c \ TrCoords.c UndefCurs.c UngrabBut.c UngrabKbd.c UngrabKey.c \ UngrabPtr.c UngrabSvr.c UninsCmap.c UnldFont.c UnmapSubs.c \ UnmapWin.c utlist.h VisUtil.c WarpPtr.c Window.c WinEvent.c \ Withdraw.c WMGeom.c WMProps.c WrBitF.c Xatomtype.h xcb_disp.c \ xcb_io.c Xintatom.h Xintconn.h XlibAsync.c XlibInt.c \ Xprivate.h XomGeneric.h Xresinternal.h Xrm.c Xxcbint.h \ os2Stubs.c UIThrStubs.c @OS2_TRUE@am__objects_1 = os2Stubs.lo @THRSTUBS_TRUE@am__objects_2 = UIThrStubs.lo am_libX11_la_OBJECTS = AllCells.lo AllowEv.lo AllPlanes.lo AutoRep.lo \ Backgnd.lo BdrWidth.lo Bell.lo Border.lo ChAccCon.lo \ ChActPGb.lo ChClMode.lo ChCmap.lo ChGC.lo ChKeyCon.lo \ ChkIfEv.lo ChkMaskEv.lo ChkTypEv.lo ChkTypWEv.lo ChkWinEv.lo \ ChPntCon.lo ChProp.lo ChSaveSet.lo ChWAttrs.lo ChWindow.lo \ CirWin.lo CirWinDn.lo CirWinUp.lo ClDisplay.lo ClearArea.lo \ Clear.lo ConfWind.lo Context.lo ConvSel.lo CopyArea.lo \ CopyCmap.lo CopyGC.lo CopyPlane.lo CrBFData.lo CrCmap.lo \ CrCursor.lo CrGC.lo CrGlCur.lo CrPFBData.lo CrPixmap.lo \ CrWindow.lo Cursor.lo DefCursor.lo DelProp.lo Depths.lo \ DestSubs.lo DestWind.lo DisName.lo DrArc.lo DrArcs.lo \ DrLine.lo DrLines.lo DrPoint.lo DrPoints.lo DrRect.lo \ DrRects.lo DrSegs.lo ErrDes.lo ErrHndlr.lo evtomask.lo \ EvToWire.lo FetchName.lo FillArc.lo FillArcs.lo FillPoly.lo \ FillRct.lo FillRcts.lo FilterEv.lo Flush.lo Font.lo \ FontInfo.lo FontNames.lo FreeCmap.lo FreeCols.lo FreeCurs.lo \ FreeEData.lo FreeEventData.lo FreeGC.lo FreePix.lo FSSaver.lo \ FSWrap.lo GCMisc.lo Geom.lo GetAtomNm.lo GetColor.lo \ GetDflt.lo GetEventData.lo GetFPath.lo GetFProp.lo \ GetGCVals.lo GetGeom.lo GetHColor.lo GetHints.lo GetIFocus.lo \ GetImage.lo GetKCnt.lo GetMoEv.lo GetNrmHint.lo GetPCnt.lo \ GetPntMap.lo GetProp.lo GetRGBCMap.lo GetSOwner.lo \ GetSSaver.lo GetStCmap.lo GetTxtProp.lo GetWAttrs.lo \ GetWMCMapW.lo GetWMProto.lo globals.lo GrButton.lo GrKeybd.lo \ GrKey.lo GrPointer.lo GrServer.lo Host.lo Iconify.lo \ IfEvent.lo imConv.lo ImText16.lo ImText.lo ImUtil.lo \ InitExt.lo InsCmap.lo IntAtom.lo KeyBind.lo KeysymStr.lo \ KillCl.lo LiHosts.lo LiICmaps.lo LiProps.lo ListExt.lo \ LoadFont.lo LockDis.lo locking.lo LookupCol.lo LowerWin.lo \ Macros.lo MapRaised.lo MapSubs.lo MapWindow.lo MaskEvent.lo \ Misc.lo ModMap.lo MoveWin.lo NextEvent.lo OCWrap.lo OMWrap.lo \ OpenDis.lo ParseCmd.lo ParseCol.lo ParseGeom.lo PeekEvent.lo \ PeekIfEv.lo Pending.lo PixFormats.lo PmapBgnd.lo PmapBord.lo \ PolyReg.lo PolyTxt16.lo PolyTxt.lo PropAlloc.lo PutBEvent.lo \ PutImage.lo Quarks.lo QuBest.lo QuColor.lo QuColors.lo \ QuCurShp.lo QuExt.lo QuKeybd.lo QuPntr.lo QuStipShp.lo \ QuTextE16.lo QuTextExt.lo QuTileShp.lo QuTree.lo RaiseWin.lo \ RdBitF.lo RecolorC.lo ReconfWin.lo ReconfWM.lo Region.lo \ RegstFlt.lo RepWindow.lo RestackWs.lo RotProp.lo ScrResStr.lo \ SelInput.lo SendEvent.lo SetBack.lo SetClMask.lo SetClOrig.lo \ SetCRects.lo SetDashes.lo SetFont.lo SetFore.lo SetFPath.lo \ SetFunc.lo SetHints.lo SetIFocus.lo SetLocale.lo SetLStyle.lo \ SetNrmHint.lo SetPMask.lo SetPntMap.lo SetRGBCMap.lo \ SetSOwner.lo SetSSaver.lo SetState.lo SetStCmap.lo SetStip.lo \ SetTile.lo SetTSOrig.lo SetTxtProp.lo SetWMCMapW.lo \ SetWMProto.lo StBytes.lo StColor.lo StColors.lo StName.lo \ StNColor.lo StrKeysym.lo StrToText.lo Sync.lo Synchro.lo \ Text16.lo Text.lo TextExt16.lo TextExt.lo TextToStr.lo \ TrCoords.lo UndefCurs.lo UngrabBut.lo UngrabKbd.lo \ UngrabKey.lo UngrabPtr.lo UngrabSvr.lo UninsCmap.lo \ UnldFont.lo UnmapSubs.lo UnmapWin.lo VisUtil.lo WarpPtr.lo \ Window.lo WinEvent.lo Withdraw.lo WMGeom.lo WMProps.lo \ WrBitF.lo xcb_disp.lo xcb_io.lo XlibAsync.lo XlibInt.lo Xrm.lo \ $(am__objects_1) $(am__objects_2) libX11_la_OBJECTS = $(am_libX11_la_OBJECTS) libX11_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libX11_la_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/X11 depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libX11_xcb_la_SOURCES) $(libX11_la_SOURCES) DIST_SOURCES = $(libX11_xcb_la_SOURCES) $(am__libX11_la_SOURCES_DIST) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(lintlib_DATA) $(x11data_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = util xcms xlibi18n xkb am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASE_CFLAGS = @BASE_CFLAGS@ BIGFONT_CFLAGS = @BIGFONT_CFLAGS@ BIGFONT_LIBS = @BIGFONT_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHANGELOG_CMD = @CHANGELOG_CMD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ FOP = @FOP@ GREP = @GREP@ I18N_MODULE_LIBS = @I18N_MODULE_LIBS@ INSTALL = @INSTALL@ INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ # # Building ks_tables.h requires the makekeys utility # KEYSYMDEFS = @KEYSYMDEFS@ LAUNCHD = @LAUNCHD@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LINT = @LINT@ LINTLIB = @LINTLIB@ LINT_FLAGS = @LINT_FLAGS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MALLOC_ZERO_CFLAGS = @MALLOC_ZERO_CFLAGS@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_SUBSTS = @MAN_SUBSTS@ MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RAWCPP = @RAWCPP@ RAWCPPFLAGS = @RAWCPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRICT_CFLAGS = @STRICT_CFLAGS@ STRIP = @STRIP@ STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ TRADITIONALCPPFLAGS = @TRADITIONALCPPFLAGS@ VERSION = @VERSION@ WCHAR32 = @WCHAR32@ X11_CFLAGS = @X11_CFLAGS@ X11_DATADIR = @X11_DATADIR@ X11_EXTRA_DEPS = @X11_EXTRA_DEPS@ X11_LIBDIR = @X11_LIBDIR@ X11_LIBS = @X11_LIBS@ X11_LOCALEDATADIR = @X11_LOCALEDATADIR@ X11_LOCALEDIR = @X11_LOCALEDIR@ X11_LOCALELIBDIR = @X11_LOCALELIBDIR@ XERRORDB = @XERRORDB@ XKBPROTO_REQUIRES = @XKBPROTO_REQUIRES@ XKEYSYMDB = @XKEYSYMDB@ XLOCALEDATADIR = @XLOCALEDATADIR@ XLOCALEDIR = @XLOCALEDIR@ XLOCALELIBDIR = @XLOCALELIBDIR@ XMALLOC_ZERO_CFLAGS = @XMALLOC_ZERO_CFLAGS@ XMLTO = @XMLTO@ XORG_MAN_PAGE = @XORG_MAN_PAGE@ XORG_SGML_PATH = @XORG_SGML_PATH@ XSLTPROC = @XSLTPROC@ XSL_STYLESHEET = @XSL_STYLESHEET@ XTHREADLIB = @XTHREADLIB@ XTHREAD_CFLAGS = @XTHREAD_CFLAGS@ XTMALLOC_ZERO_CFLAGS = @XTMALLOC_ZERO_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ locales = @locales@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ @XKB_TRUE@XKB_SUBDIRS = xkb SUBDIRS = util xcms xlibi18n $(XKB_SUBDIRS) lib_LTLIBRARIES = libX11.la libX11-xcb.la BUILT_SOURCES = ks_tables.h CLEANFILES = ks_tables.h ks_tables_h $(am__append_3) AM_CPPFLAGS = \ -I$(top_srcdir)/include \ -I$(top_srcdir)/include/X11 \ -I$(top_builddir)/include \ -I$(top_builddir)/include/X11 \ -I$(top_srcdir)/src/xcms \ -I$(top_srcdir)/src/xkb \ -I$(top_srcdir)/src/xlibi18n \ -D_BSD_SOURCE -DX11_t -DTRANS_CLIENT AM_CFLAGS = \ $(X11_CFLAGS) \ $(BIGFONT_CFLAGS) \ $(XMALLOC_ZERO_CFLAGS) \ $(CWARNFLAGS) # # =============================== I18N ============================= # I18N_LIBS = \ xlibi18n/libi18n.la # # =============================== XCMS ============================= # XCMS_LIBS = \ xcms/libxcms.la # # =============================== XKB ============================== # XKB_LIBS = \ xkb/libxkb.la # # =============================== XLIB ============================= # libX11_la_SOURCES = AllCells.c AllowEv.c AllPlanes.c AutoRep.c \ Backgnd.c BdrWidth.c Bell.c Border.c ChAccCon.c ChActPGb.c \ ChClMode.c ChCmap.c ChGC.c ChKeyCon.c ChkIfEv.c ChkMaskEv.c \ ChkTypEv.c ChkTypWEv.c ChkWinEv.c ChPntCon.c ChProp.c \ ChSaveSet.c ChWAttrs.c ChWindow.c CirWin.c CirWinDn.c \ CirWinUp.c ClDisplay.c ClearArea.c Clear.c Cmap.h ConfWind.c \ Context.c ConvSel.c CopyArea.c CopyCmap.c CopyGC.c CopyPlane.c \ CrBFData.c CrCmap.c CrCursor.c CrGC.c CrGlCur.c Cr.h \ CrPFBData.c CrPixmap.c CrWindow.c Cursor.c DefCursor.c \ DelProp.c Depths.c DestSubs.c DestWind.c DisName.c DrArc.c \ DrArcs.c DrLine.c DrLines.c DrPoint.c DrPoints.c DrRect.c \ DrRects.c DrSegs.c ErrDes.c ErrHndlr.c evtomask.c EvToWire.c \ FetchName.c FillArc.c FillArcs.c FillPoly.c FillRct.c \ FillRcts.c FilterEv.c Flush.c Font.c FontInfo.c FontNames.c \ FreeCmap.c FreeCols.c FreeCurs.c FreeEData.c FreeEventData.c \ FreeGC.c FreePix.c FSSaver.c FSWrap.c GCMisc.c Geom.c \ GetAtomNm.c GetColor.c GetDflt.c GetEventData.c GetFPath.c \ GetFProp.c GetGCVals.c GetGeom.c GetHColor.c GetHints.c \ GetIFocus.c GetImage.c GetKCnt.c GetMoEv.c GetNrmHint.c \ GetPCnt.c GetPntMap.c GetProp.c GetRGBCMap.c GetSOwner.c \ GetSSaver.c GetStCmap.c GetTxtProp.c GetWAttrs.c GetWMCMapW.c \ GetWMProto.c globals.c GrButton.c GrKeybd.c GrKey.c \ GrPointer.c GrServer.c Host.c Iconify.c IfEvent.c imConv.c \ ImText16.c ImText.c ImUtil.c InitExt.c InsCmap.c IntAtom.c \ KeyBind.c Key.h KeysymStr.c KillCl.c LiHosts.c LiICmaps.c \ LiProps.c ListExt.c LoadFont.c LockDis.c locking.c locking.h \ LookupCol.c LowerWin.c Macros.c MapRaised.c MapSubs.c \ MapWindow.c MaskEvent.c Misc.c ModMap.c MoveWin.c NextEvent.c \ OCWrap.c OMWrap.c OpenDis.c ParseCmd.c ParseCol.c ParseGeom.c \ pathmax.h PeekEvent.c PeekIfEv.c Pending.c PixFormats.c \ PmapBgnd.c PmapBord.c poly.h PolyReg.c PolyTxt16.c PolyTxt.c \ PropAlloc.c PutBEvent.c PutImage.c Quarks.c QuBest.c QuColor.c \ QuColors.c QuCurShp.c QuExt.c QuKeybd.c QuPntr.c QuStipShp.c \ QuTextE16.c QuTextExt.c QuTileShp.c QuTree.c RaiseWin.c \ RdBitF.c RecolorC.c ReconfWin.c ReconfWM.c Region.c RegstFlt.c \ RepWindow.c RestackWs.c RotProp.c ScrResStr.c SelInput.c \ SendEvent.c SetBack.c SetClMask.c SetClOrig.c SetCRects.c \ SetDashes.c SetFont.c SetFore.c SetFPath.c SetFunc.c \ SetHints.c SetIFocus.c SetLocale.c SetLStyle.c SetNrmHint.c \ SetPMask.c SetPntMap.c SetRGBCMap.c SetSOwner.c SetSSaver.c \ SetState.c SetStCmap.c SetStip.c SetTile.c SetTSOrig.c \ SetTxtProp.c SetWMCMapW.c SetWMProto.c StBytes.c StColor.c \ StColors.c StName.c StNColor.c StrKeysym.c StrToText.c Sync.c \ Synchro.c Text16.c Text.c TextExt16.c TextExt.c TextToStr.c \ TrCoords.c UndefCurs.c UngrabBut.c UngrabKbd.c UngrabKey.c \ UngrabPtr.c UngrabSvr.c UninsCmap.c UnldFont.c UnmapSubs.c \ UnmapWin.c utlist.h VisUtil.c WarpPtr.c Window.c WinEvent.c \ Withdraw.c WMGeom.c WMProps.c WrBitF.c Xatomtype.h xcb_disp.c \ xcb_io.c Xintatom.h Xintconn.h XlibAsync.c XlibInt.c \ Xprivate.h XomGeneric.h Xresinternal.h Xrm.c Xxcbint.h \ $(am__append_1) $(am__append_2) x11datadir = @X11_DATADIR@ x11data_DATA = XErrorDB EXTRA_DIST = \ $(x11data_DATA) \ os2Stubs.c \ UIThrStubs.c libX11_xcb_la_SOURCES = x11_xcb.c Xxcbint.h libX11_xcb_la_LDFLAGS = -version-number 1:0:0 -no-undefined libX11_xcb_la_LIBADD = libX11.la # # Figure out which sub-libraries to link into Xlib # @XLOCALE_TRUE@USE_I18N_LIBS = $(I18N_LIBS) @XCMS_TRUE@USE_XCMS_LIBS = $(XCMS_LIBS) @XKB_TRUE@USE_XKB_LIBS = $(XKB_LIBS) libX11_la_LDFLAGS = -version-number 6:3:0 -no-undefined libX11_la_LIBADD = \ $(USE_I18N_LIBS) \ $(USE_XCMS_LIBS) \ $(USE_XKB_LIBS) \ $(X11_LIBS) # Check source code with tools like lint & sparse @LINT_TRUE@ALL_LINT_FLAGS = $(LINT_FLAGS) $(DEFS) $(DEFAULT_INCLUDES) \ @LINT_TRUE@ $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) \ @LINT_TRUE@ -DXCMSDIR=\"$(X11dir)\" @MAKE_LINT_LIB_TRUE@lintlibdir = $(libdir) @MAKE_LINT_LIB_TRUE@lintlib_DATA = $(LINTLIB) @MAKE_LINT_LIB_TRUE@lintlib_src = $(libX11_la_SOURCES) $(srcdir)/xcms/*.c $(srcdir)/xkb/*.c all: $(BUILT_SOURCES) config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .ii .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status src/config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libX11-xcb.la: $(libX11_xcb_la_OBJECTS) $(libX11_xcb_la_DEPENDENCIES) $(EXTRA_libX11_xcb_la_DEPENDENCIES) $(AM_V_CCLD)$(libX11_xcb_la_LINK) -rpath $(libdir) $(libX11_xcb_la_OBJECTS) $(libX11_xcb_la_LIBADD) $(LIBS) libX11.la: $(libX11_la_OBJECTS) $(libX11_la_DEPENDENCIES) $(EXTRA_libX11_la_DEPENDENCIES) $(AM_V_CCLD)$(libX11_la_LINK) -rpath $(libdir) $(libX11_la_OBJECTS) $(libX11_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AllCells.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AllPlanes.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AllowEv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AutoRep.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Backgnd.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BdrWidth.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Bell.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Border.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ChAccCon.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ChActPGb.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ChClMode.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ChCmap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ChGC.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ChKeyCon.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ChPntCon.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ChProp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ChSaveSet.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ChWAttrs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ChWindow.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ChkIfEv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ChkMaskEv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ChkTypEv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ChkTypWEv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ChkWinEv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CirWin.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CirWinDn.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CirWinUp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ClDisplay.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Clear.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ClearArea.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ConfWind.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Context.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ConvSel.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CopyArea.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CopyCmap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CopyGC.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CopyPlane.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CrBFData.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CrCmap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CrCursor.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CrGC.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CrGlCur.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CrPFBData.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CrPixmap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CrWindow.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Cursor.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DefCursor.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DelProp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Depths.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DestSubs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DestWind.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DisName.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DrArc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DrArcs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DrLine.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DrLines.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DrPoint.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DrPoints.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DrRect.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DrRects.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DrSegs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ErrDes.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ErrHndlr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/EvToWire.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FSSaver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FSWrap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FetchName.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FillArc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FillArcs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FillPoly.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FillRct.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FillRcts.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FilterEv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Flush.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Font.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FontInfo.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FontNames.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FreeCmap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FreeCols.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FreeCurs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FreeEData.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FreeEventData.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FreeGC.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FreePix.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GCMisc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Geom.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetAtomNm.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetColor.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetDflt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetEventData.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetFPath.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetFProp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetGCVals.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetGeom.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetHColor.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetHints.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetIFocus.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetImage.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetKCnt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetMoEv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetNrmHint.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetPCnt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetPntMap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetProp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetRGBCMap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetSOwner.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetSSaver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetStCmap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetTxtProp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetWAttrs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetWMCMapW.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GetWMProto.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GrButton.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GrKey.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GrKeybd.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GrPointer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GrServer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Host.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Iconify.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IfEvent.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ImText.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ImText16.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ImUtil.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/InitExt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/InsCmap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/IntAtom.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/KeyBind.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/KeysymStr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/KillCl.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LiHosts.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LiICmaps.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LiProps.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ListExt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LoadFont.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LockDis.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LookupCol.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LowerWin.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Macros.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MapRaised.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MapSubs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MapWindow.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MaskEvent.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Misc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ModMap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MoveWin.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NextEvent.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OCWrap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OMWrap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OpenDis.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ParseCmd.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ParseCol.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ParseGeom.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PeekEvent.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PeekIfEv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Pending.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PixFormats.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PmapBgnd.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PmapBord.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PolyReg.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PolyTxt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PolyTxt16.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PropAlloc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PutBEvent.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PutImage.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/QuBest.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/QuColor.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/QuColors.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/QuCurShp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/QuExt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/QuKeybd.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/QuPntr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/QuStipShp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/QuTextE16.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/QuTextExt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/QuTileShp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/QuTree.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Quarks.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RaiseWin.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RdBitF.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RecolorC.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ReconfWM.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ReconfWin.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Region.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RegstFlt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RepWindow.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RestackWs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RotProp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ScrResStr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SelInput.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SendEvent.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetBack.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetCRects.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetClMask.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetClOrig.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetDashes.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetFPath.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetFont.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetFore.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetFunc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetHints.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetIFocus.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetLStyle.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetLocale.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetNrmHint.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetPMask.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetPntMap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetRGBCMap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetSOwner.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetSSaver.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetStCmap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetState.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetStip.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetTSOrig.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetTile.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetTxtProp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetWMCMapW.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SetWMProto.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StBytes.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StColor.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StColors.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StNColor.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StName.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StrKeysym.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StrToText.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Sync.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Synchro.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Text.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Text16.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TextExt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TextExt16.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TextToStr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TrCoords.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UIThrStubs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UndefCurs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UngrabBut.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UngrabKbd.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UngrabKey.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UngrabPtr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UngrabSvr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UninsCmap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UnldFont.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UnmapSubs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UnmapWin.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VisUtil.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/WMGeom.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/WMProps.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/WarpPtr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/WinEvent.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Window.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Withdraw.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/WrBitF.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XlibAsync.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XlibInt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Xrm.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evtomask.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/globals.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imConv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/locking.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/os2Stubs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/x11_xcb.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xcb_disp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xcb_io.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-lintlibDATA: $(lintlib_DATA) @$(NORMAL_INSTALL) @list='$(lintlib_DATA)'; test -n "$(lintlibdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(lintlibdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(lintlibdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(lintlibdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(lintlibdir)" || exit $$?; \ done uninstall-lintlibDATA: @$(NORMAL_UNINSTALL) @list='$(lintlib_DATA)'; test -n "$(lintlibdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(lintlibdir)'; $(am__uninstall_files_from_dir) install-x11dataDATA: $(x11data_DATA) @$(NORMAL_INSTALL) @list='$(x11data_DATA)'; test -n "$(x11datadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(x11datadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(x11datadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(x11datadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(x11datadir)" || exit $$?; \ done uninstall-x11dataDATA: @$(NORMAL_UNINSTALL) @list='$(x11data_DATA)'; test -n "$(x11datadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(x11datadir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(LTLIBRARIES) $(DATA) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(lintlibdir)" "$(DESTDIR)$(x11datadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-recursive clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-lintlibDATA install-x11dataDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-libLTLIBRARIES uninstall-lintlibDATA \ uninstall-x11dataDATA .MAKE: $(am__recursive_targets) all check install install-am \ install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libLTLIBRARIES \ clean-libtool cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-hdr \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-libLTLIBRARIES install-lintlibDATA \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip install-x11dataDATA installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES \ uninstall-lintlibDATA uninstall-x11dataDATA .PRECIOUS: Makefile preprocess: $(patsubst %.c,%.ii,$(libX11_la_SOURCES)) .c.ii: $(COMPILE) -E -o $@ `test -f '$<' || echo '$(srcdir)/'`$< @LINT_TRUE@lint: $(BUILT_SOURCES) @LINT_TRUE@ for f in $(libX11_la_SOURCES) ; do \ @LINT_TRUE@ $(LINT) $(ALL_LINT_FLAGS) $$f ; \ @LINT_TRUE@ done @LINT_TRUE@ @for subdir in $(SUBDIRS) ; do \ @LINT_TRUE@ echo "Making $@ in src/$$subdir"; \ @LINT_TRUE@ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) lint) ; \ @LINT_TRUE@ done @MAKE_LINT_LIB_TRUE@$(LINTLIB): $(libX11_la_SOURCES) @MAKE_LINT_LIB_TRUE@ $(AM_V_GEN)$(LINT) -y -oX11 -x $(ALL_LINT_FLAGS) $(lintlib_src) ks_tables.h: $(KEYSYMDEFS) $(top_builddir)/src/util/makekeys$(EXEEXT) $(top_builddir)/src/util/makekeys $(KEYSYMDEFS) > ks_tables_h mv ks_tables_h $@ $(top_builddir)/src/util/makekeys$(EXEEXT): force cd util && $(MAKE) force: # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while realibX11-1.6.3/src/Synchro.c000064401431060000012000000040421247741723500154360ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" static int _XSyncFunction(register Display *dpy) { XSync(dpy,0); return 0; } int (*XSynchronize(Display *dpy, int onoff))(Display *) { int (*temp)(Display *); int (*func)(Display *) = NULL; if (onoff) func = _XSyncFunction; LockDisplay(dpy); if (dpy->flags & XlibDisplayPrivSync) { temp = dpy->savedsynchandler; dpy->savedsynchandler = func; } else { temp = dpy->synchandler; dpy->synchandler = func; } UnlockDisplay(dpy); return (temp); } int (*XSetAfterFunction( Display *dpy, int (*func)( Display* ) ))(Display *) { int (*temp)(Display *); LockDisplay(dpy); if (dpy->flags & XlibDisplayPrivSync) { temp = dpy->savedsynchandler; dpy->savedsynchandler = func; } else { temp = dpy->synchandler; dpy->synchandler = func; } UnlockDisplay(dpy); return (temp); } libX11-1.6.3/src/ParseGeom.c000064401431060000012000000101471247741723500156760ustar00alancstaff00002660200006 /* Copyright 1985, 1986, 1987,1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xutil.h" /* * XParseGeometry parses strings of the form * "=x{+-}{+-}", where * width, height, xoffset, and yoffset are unsigned integers. * Example: "=80x24+300-49" * The equal sign is optional. * It returns a bitmask that indicates which of the four values * were actually found in the string. For each value found, * the corresponding argument is updated; for each value * not found, the corresponding argument is left unchanged. */ static int ReadInteger(char *string, char **NextString) { register int Result = 0; int Sign = 1; if (*string == '+') string++; else if (*string == '-') { string++; Sign = -1; } for (; (*string >= '0') && (*string <= '9'); string++) { Result = (Result * 10) + (*string - '0'); } *NextString = string; if (Sign >= 0) return (Result); else return (-Result); } int XParseGeometry ( _Xconst char *string, int *x, int *y, unsigned int *width, /* RETURN */ unsigned int *height) /* RETURN */ { int mask = NoValue; register char *strind; unsigned int tempWidth = 0, tempHeight = 0; int tempX = 0, tempY = 0; char *nextCharacter; if ( (string == NULL) || (*string == '\0')) return(mask); if (*string == '=') string++; /* ignore possible '=' at beg of geometry spec */ strind = (char *)string; if (*strind != '+' && *strind != '-' && *strind != 'x') { tempWidth = ReadInteger(strind, &nextCharacter); if (strind == nextCharacter) return (0); strind = nextCharacter; mask |= WidthValue; } if (*strind == 'x' || *strind == 'X') { strind++; tempHeight = ReadInteger(strind, &nextCharacter); if (strind == nextCharacter) return (0); strind = nextCharacter; mask |= HeightValue; } if ((*strind == '+') || (*strind == '-')) { if (*strind == '-') { strind++; tempX = -ReadInteger(strind, &nextCharacter); if (strind == nextCharacter) return (0); strind = nextCharacter; mask |= XNegative; } else { strind++; tempX = ReadInteger(strind, &nextCharacter); if (strind == nextCharacter) return(0); strind = nextCharacter; } mask |= XValue; if ((*strind == '+') || (*strind == '-')) { if (*strind == '-') { strind++; tempY = -ReadInteger(strind, &nextCharacter); if (strind == nextCharacter) return(0); strind = nextCharacter; mask |= YNegative; } else { strind++; tempY = ReadInteger(strind, &nextCharacter); if (strind == nextCharacter) return(0); strind = nextCharacter; } mask |= YValue; } } /* If strind isn't at the end of the string the it's an invalid geometry specification. */ if (*strind != '\0') return (0); if (mask & XValue) *x = tempX; if (mask & YValue) *y = tempY; if (mask & WidthValue) *width = tempWidth; if (mask & HeightValue) *height = tempHeight; return (mask); } ent is updated; for each value * not found, the corresponding argument is left unchanged. */ static int ReadInteger(char *string, char **NextString) { register int Result = 0; int Sign = 1; if (*string == '+') string++; else if (*string == '-') { string++; Sign = -1; } for (; (*string >= '0') && (*string <= '9'); string++) { Result = (Result * 10) + (*string - '0'libX11-1.6.3/src/CrPFBData.c000064401431060000012000000056031247741723500155030ustar00alancstaff00002660200006/* Copyright 1987, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlib.h" #include /* * XCreatePixmapFromBitmapData: Routine to make a pixmap from user supplied bitmap data. * D is any drawable on the same screen that the pixmap will be used in. * Data is a pointer to the bit data, and * width & height give the size in bits of the pixmap. * Fg and Bg are the pixel values to use for the two colors. * Depth is the depth of the pixmap to create. * * The following format is assumed for data: * * format=XYPixmap * bit_order=LSBFirst * byte_order=LSBFirst * padding=8 * bitmap_unit=8 * xoffset=0 * no extra bytes per line */ Pixmap XCreatePixmapFromBitmapData( Display *display, Drawable d, char *data, unsigned int width, unsigned int height, unsigned long fg, unsigned long bg, unsigned int depth) { Pixmap pix = XCreatePixmap(display, d, width, height, depth); XGCValues gcv = { .foreground = fg, .background = bg }; GC gc = XCreateGC(display, pix, GCForeground|GCBackground, &gcv); if (gc == NULL) { XFreePixmap(display, pix); return (Pixmap) None; } else { XImage ximage = { .height = height, .width = width, .depth = 1, .bits_per_pixel = 1, .xoffset = 0, .format = XYBitmap, .data = data, .byte_order = LSBFirst, .bitmap_unit = 8, .bitmap_bit_order = LSBFirst, .bitmap_pad = 8, .bytes_per_line = (width + 7) / 8 }; XPutImage(display, pix, gc, &ximage, 0, 0, 0, 0, width, height); XFreeGC(display, gc); return(pix); } } libX11-1.6.3/src/DrSegs.c000064401431060000012000000036151247741723500152050ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XDrawSegments ( register Display *dpy, Drawable d, GC gc, XSegment *segments, int nsegments) { register xPolySegmentReq *req; long len; int n; LockDisplay(dpy); FlushGC(dpy, gc); while (nsegments) { GetReq (PolySegment, req); req->drawable = d; req->gc = gc->gid; n = nsegments; len = ((long)n) << 1; if (!dpy->bigreq_size && len > (dpy->max_request_size - req->length)) { n = (dpy->max_request_size - req->length) >> 1; len = ((long)n) << 1; } SetReqLen(req, len, len); len <<= 2; /* watch out for macros... */ Data16 (dpy, (short *) segments, len); nsegments -= n; segments += n; } UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/XlibAsync.c000064401431060000012000000105101247741723500157020ustar00alancstaff00002660200006/* Copyright 1992, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include #include /*ARGSUSED*/ Bool _XAsyncErrorHandler( register Display *dpy, register xReply *rep, char *buf, int len, XPointer data) { register _XAsyncErrorState *state; state = (_XAsyncErrorState *)data; if (rep->generic.type == X_Error && (!state->error_code || rep->error.errorCode == state->error_code) && (!state->major_opcode || rep->error.majorCode == state->major_opcode) && (!state->minor_opcode || rep->error.minorCode == state->minor_opcode) && (!state->min_sequence_number || (state->min_sequence_number <= dpy->last_request_read)) && (!state->max_sequence_number || (state->max_sequence_number >= dpy->last_request_read))) { state->last_error_received = rep->error.errorCode; state->error_count++; return True; } return False; } void _XDeqAsyncHandler( Display *dpy, register _XAsyncHandler *handler) { register _XAsyncHandler **prev; register _XAsyncHandler *async; for (prev = &dpy->async_handlers; (async = *prev) && (async != handler); prev = &async->next) ; if (async) *prev = async->next; } char * _XGetAsyncReply( register Display *dpy, register char *replbuf, /* data is read into this buffer */ register xReply *rep, /* value passed to calling handler */ char *buf, /* value passed to calling handler */ int len, /* value passed to calling handler */ int extra, /* extra words to read, ala _XReply */ Bool discard) /* discard after extra?, ala _XReply */ { if (extra == 0) { if (discard && (rep->generic.length << 2) > len) _XEatData (dpy, (rep->generic.length << 2) - len); return (char *)rep; } if (extra <= rep->generic.length) { int size = SIZEOF(xReply) + (extra << 2); if (size > len) { memcpy(replbuf, buf, len); _XRead(dpy, replbuf + len, size - len); buf = replbuf; len = size; } if (discard && rep->generic.length > extra && (rep->generic.length << 2) > len) _XEatData (dpy, (rep->generic.length << 2) - len); return buf; } /* *if we get here, then extra > rep->generic.length--meaning we * read a reply that's shorter than we expected. This is an * error, but we still need to figure out how to handle it... */ if ((rep->generic.length << 2) > len) _XEatData (dpy, (rep->generic.length << 2) - len); _XIOError (dpy); return (char *)rep; } void _XGetAsyncData( Display *dpy, char *data, /* data is read into this buffer */ char *buf, /* value passed to calling handler */ int len, /* value passed to calling handler */ int skip, /* number of bytes already read in previous _XGetAsyncReply or _XGetAsyncData calls */ int datalen, /* size of data buffer in bytes */ int discardtotal) /* min. bytes to consume (after skip) */ { buf += skip; len -= skip; if (!data) { if (datalen > len) _XEatData(dpy, datalen - len); } else if (datalen <= len) { memcpy(data, buf, datalen); } else { memcpy(data, buf, len); _XRead(dpy, data + len, datalen - len); } if (discardtotal > len) { if (datalen > len) len = datalen; _XEatData(dpy, discardtotal - len); } } libX11-1.6.3/src/ReconfWM.c000064401431060000012000000100651247741723500154730ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #define AllMaskBits (CWX|CWY|CWWidth|CWHeight|\ CWBorderWidth|CWSibling|CWStackMode) Status XReconfigureWMWindow ( register Display *dpy, Window w, int screen, unsigned int mask, XWindowChanges *changes) { Window root = RootWindow (dpy, screen); _XAsyncHandler async; _XAsyncErrorState async_state; /* * Only need to go through the trouble if we are actually changing the * stacking mode. */ if (!(mask & CWStackMode)) { XConfigureWindow (dpy, w, mask, changes); return True; } /* * We need to inline XConfigureWindow and XSync so that everything is done * while the display is locked. */ LockDisplay(dpy); /* * XConfigureWindow (dpy, w, mask, changes); */ { unsigned long values[7]; register unsigned long *value = values; long nvalues; register xConfigureWindowReq *req; GetReq(ConfigureWindow, req); async_state.min_sequence_number = dpy->request; async_state.max_sequence_number = dpy->request; async_state.error_code = BadMatch; async_state.major_opcode = X_ConfigureWindow; async_state.minor_opcode = 0; async_state.error_count = 0; async.next = dpy->async_handlers; async.handler = _XAsyncErrorHandler; async.data = (XPointer)&async_state; dpy->async_handlers = &async; req->window = w; mask &= AllMaskBits; req->mask = mask; if (mask & CWX) *value++ = changes->x; if (mask & CWY) *value++ = changes->y; if (mask & CWWidth) *value++ = changes->width; if (mask & CWHeight) *value++ = changes->height; if (mask & CWBorderWidth) *value++ = changes->border_width; if (mask & CWSibling) *value++ = changes->sibling; if (mask & CWStackMode) *value++ = changes->stack_mode; req->length += (nvalues = value - values); nvalues <<= 2; /* watch out for macros... */ Data32 (dpy, (long *) values, nvalues); } /* * XSync (dpy, 0) */ { xGetInputFocusReply rep; register xReq *req; GetEmptyReq(GetInputFocus, req); (void) _XReply (dpy, (xReply *)&rep, 0, xTrue); } DeqAsyncHandler(dpy, &async); UnlockDisplay(dpy); SyncHandle(); /* * If the request succeeded, then everything is okay; otherwise, send event */ if (!async_state.error_count) return True; else { XConfigureRequestEvent ev = { .type = ConfigureRequest, .window = w, .parent = root, .value_mask = (mask & AllMaskBits), .x = changes->x, .y = changes->y, .width = changes->width, .height = changes->height, .border_width = changes->border_width, .above = changes->sibling, .detail = changes->stack_mode, }; return (XSendEvent (dpy, root, False, SubstructureRedirectMask|SubstructureNotifyMask, (XEvent *)&ev)); } } libX11-1.6.3/src/SetFPath.c000064401431060000012000000040341247741723500154700ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #define safestrlen(s) ((s) ? strlen(s) : 0) int XSetFontPath ( register Display *dpy, char **directories, int ndirs) { register int n = 0; register int i; register int nbytes; char *p; register xSetFontPathReq *req; int retCode; LockDisplay(dpy); GetReq (SetFontPath, req); req->nFonts = ndirs; for (i = 0; i < ndirs; i++) { n += safestrlen (directories[i]) + 1; } nbytes = (n + 3) & ~3; req->length += nbytes >> 2; if ((p = Xmalloc (nbytes))) { /* * pack into counted strings. */ char *tmp = p; for (i = 0; i < ndirs; i++) { register int length = safestrlen (directories[i]); *p = length; memcpy (p + 1, directories[i], length); p += length + 1; } Data (dpy, tmp, nbytes); Xfree (tmp); retCode = 1; } else retCode = 0; UnlockDisplay(dpy); SyncHandle(); return (retCode); } OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE OPEN GROUP 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. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise tlibX11-1.6.3/src/ImText.c000064401431060000012000000050161247741723500152250ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XDrawImageString( register Display *dpy, Drawable d, GC gc, int x, int y, _Xconst char *string, int length) { register xImageText8Req *req; char *CharacterOffset = (char *)string; int FirstTimeThrough = True; int lastX = 0; LockDisplay(dpy); FlushGC(dpy, gc); while (length > 0) { int Unit; if (length > 255) Unit = 255; else Unit = length; if (FirstTimeThrough) { FirstTimeThrough = False; } else { char buf[512]; char *ptr, *str; xQueryTextExtentsReq *qreq; xQueryTextExtentsReply rep; int i; GetReq(QueryTextExtents, qreq); qreq->fid = gc->gid; qreq->length += (510 + 3)>>2; qreq->oddLength = 1; str = CharacterOffset - 255; for (ptr = buf, i = 255; --i >= 0; ) { *ptr++ = 0; *ptr++ = *str++; } Data (dpy, buf, 510); if (!_XReply (dpy, (xReply *)&rep, 0, xTrue)) break; x = lastX + cvtINT32toInt (rep.overallWidth); } GetReq (ImageText8, req); req->length += (Unit + 3) >> 2; req->nChars = Unit; req->drawable = d; req->gc = gc->gid; req->y = y; lastX = req->x = x; Data (dpy, CharacterOffset, (long)Unit); CharacterOffset += Unit; length -= Unit; } UnlockDisplay(dpy); SyncHandle(); return 0; } libX11-1.6.3/src/Xatomtype.h000064401431060000012000000120521247741723500160100ustar00alancstaff00002660200006 /*********************************************************** Copyright 1987, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifndef _XATOMTYPE_H_ #define _XATOMTYPE_H_ /* * This files defines crock C structures for calling XGetWindowProperty and * XChangeProperty. All fields must be longs as the semantics of property * routines will handle conversion to and from actual 32 bit objects. If your * compiler doesn't treat &structoflongs the same as &arrayoflongs[0], you * will have some work to do. */ #define BOOL long #define SIGNEDINT long #define UNSIGNEDINT unsigned long #define RESOURCEID unsigned long /* this structure may be extended, but do not change the order */ typedef struct { UNSIGNEDINT flags; SIGNEDINT x, y, width, height; /* need to cvt; only for pre-ICCCM */ SIGNEDINT minWidth, minHeight; /* need to cvt */ SIGNEDINT maxWidth, maxHeight; /* need to cvt */ SIGNEDINT widthInc, heightInc; /* need to cvt */ SIGNEDINT minAspectX, minAspectY; /* need to cvt */ SIGNEDINT maxAspectX, maxAspectY; /* need to cvt */ SIGNEDINT baseWidth,baseHeight; /* need to cvt; ICCCM version 1 */ SIGNEDINT winGravity; /* need to cvt; ICCCM version 1 */ } xPropSizeHints; #define OldNumPropSizeElements 15 /* pre-ICCCM */ #define NumPropSizeElements 18 /* ICCCM version 1 */ /* this structure may be extended, but do not change the order */ /* RGB properties */ typedef struct { RESOURCEID colormap; UNSIGNEDINT red_max; UNSIGNEDINT red_mult; UNSIGNEDINT green_max; UNSIGNEDINT green_mult; UNSIGNEDINT blue_max; UNSIGNEDINT blue_mult; UNSIGNEDINT base_pixel; RESOURCEID visualid; /* ICCCM version 1 */ RESOURCEID killid; /* ICCCM version 1 */ } xPropStandardColormap; #define OldNumPropStandardColormapElements 8 /* pre-ICCCM */ #define NumPropStandardColormapElements 10 /* ICCCM version 1 */ /* this structure may be extended, but do not change the order */ typedef struct { UNSIGNEDINT flags; BOOL input; /* need to convert */ SIGNEDINT initialState; /* need to cvt */ RESOURCEID iconPixmap; RESOURCEID iconWindow; SIGNEDINT iconX; /* need to cvt */ SIGNEDINT iconY; /* need to cvt */ RESOURCEID iconMask; UNSIGNEDINT windowGroup; } xPropWMHints; #define NumPropWMHintsElements 9 /* number of elements in this structure */ /* this structure defines the icon size hints information */ typedef struct { SIGNEDINT minWidth, minHeight; /* need to cvt */ SIGNEDINT maxWidth, maxHeight; /* need to cvt */ SIGNEDINT widthInc, heightInc; /* need to cvt */ } xPropIconSize; #define NumPropIconSizeElements 6 /* number of elements in this structure */ /* this structure defines the window manager state information */ typedef struct { SIGNEDINT state; /* need to cvt */ RESOURCEID iconWindow; } xPropWMState; #define NumPropWMStateElements 2 /* number of elements in struct */ #undef BOOL #undef SIGNEDINT #undef UNSIGNEDINT #undef RESOURCEID #endif /* _XATOMTYPE_H_ */ ******************* Copyright 1987, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions oflibX11-1.6.3/src/InsCmap.c000064401431060000012000000026411247741723500153460ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XInstallColormap( register Display *dpy, Colormap cmap) { register xResourceReq *req; LockDisplay(dpy); GetResReq(InstallColormap, cmap, req); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/StrToText.c000064401431060000012000000051501247741723500157320ustar00alancstaff00002660200006/* Copyright 1989, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include /* * XStringListToTextProperty - fill in TextProperty structure with * concatenated list of null-separated strings. Return True if successful * else False. Allocate room on end for trailing NULL, but don't include in * count. */ Status XStringListToTextProperty ( char **argv, int argc, XTextProperty *textprop) { register int i; register unsigned int nbytes; XTextProperty proto; /* figure out how much space we'll need for this list */ for (i = 0, nbytes = 0; i < argc; i++) { nbytes += (unsigned) ((argv[i] ? strlen (argv[i]) : 0) + 1); } /* fill in a prototype containing results so far */ proto.encoding = XA_STRING; proto.format = 8; if (nbytes) proto.nitems = nbytes - 1; /* subtract one for trailing */ else proto.nitems = 0; proto.value = NULL; /* build concatenated list of strings */ if (nbytes > 0) { register char *buf = Xmalloc (nbytes); if (!buf) return False; proto.value = (unsigned char *) buf; for (i = 0; i < argc; i++) { char *arg = argv[i]; if (arg) { (void) strcpy (buf, arg); buf += (strlen (arg) + 1); } else { *buf++ = '\0'; } } } else { proto.value = Xmalloc (1); /* easier for client */ if (!proto.value) return False; proto.value[0] = '\0'; } /* we were successful, so set return value */ *textprop = proto; return True; } libX11-1.6.3/src/QuExt.c000064401431060000012000000035421247741723500150630ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" Bool XQueryExtension( register Display *dpy, _Xconst char *name, int *major_opcode, /* RETURN */ int *first_event, /* RETURN */ int *first_error) /* RETURN */ { xQueryExtensionReply rep; register xQueryExtensionReq *req; LockDisplay(dpy); GetReq(QueryExtension, req); req->nbytes = name ? strlen(name) : 0; req->length += (req->nbytes+(unsigned)3)>>2; _XSend(dpy, name, (long)req->nbytes); (void) _XReply (dpy, (xReply *)&rep, 0, xTrue); *major_opcode = rep.major_opcode; *first_event = rep.first_event; *first_error = rep.first_error; UnlockDisplay(dpy); SyncHandle(); return (rep.present); } libX11-1.6.3/src/Macros.c000064401431060000012000000157121247741723500152430ustar00alancstaff00002660200006/* Copyright 1987, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #define XUTIL_DEFINE_FUNCTIONS #include "Xutil.h" #include "Xxcbint.h" /* * This file makes full definitions of routines for each macro. * We do not expect C programs to use these, but other languages may * need them. */ int XConnectionNumber(Display *dpy) { return (ConnectionNumber(dpy)); } Window XRootWindow (Display *dpy, int scr) { return (RootWindow(dpy,scr)); } int XDefaultScreen(Display *dpy) { return (DefaultScreen(dpy)); } Window XDefaultRootWindow (Display *dpy) { return (RootWindow(dpy,DefaultScreen(dpy))); } Visual *XDefaultVisual(Display *dpy, int scr) { return (DefaultVisual(dpy, scr)); } GC XDefaultGC(Display *dpy, int scr) { return (DefaultGC(dpy,scr)); } unsigned long XBlackPixel(Display *dpy, int scr) { return (BlackPixel(dpy, scr)); } unsigned long XWhitePixel(Display *dpy, int scr) { return (WhitePixel(dpy,scr)); } unsigned long XAllPlanes(void) { return AllPlanes; } int XQLength(Display *dpy) { return (QLength(dpy)); } int XDisplayWidth(Display *dpy, int scr) { return (DisplayWidth(dpy,scr)); } int XDisplayHeight(Display *dpy, int scr) { return (DisplayHeight(dpy, scr)); } int XDisplayWidthMM(Display *dpy, int scr) { return (DisplayWidthMM(dpy, scr)); } int XDisplayHeightMM(Display *dpy, int scr) { return (DisplayHeightMM(dpy, scr)); } int XDisplayPlanes(Display *dpy, int scr) { return (DisplayPlanes(dpy, scr)); } int XDisplayCells(Display *dpy, int scr) { return (DisplayCells (dpy, scr)); } int XScreenCount(Display *dpy) { return (ScreenCount(dpy)); } char *XServerVendor(Display *dpy) { return (ServerVendor(dpy)); } int XProtocolVersion(Display *dpy) { return (ProtocolVersion(dpy)); } int XProtocolRevision(Display *dpy) { return (ProtocolRevision(dpy));} int XVendorRelease(Display *dpy) { return (VendorRelease(dpy)); } char *XDisplayString(Display *dpy) { return (DisplayString(dpy)); } int XDefaultDepth(Display *dpy, int scr) { return(DefaultDepth(dpy, scr)); } Colormap XDefaultColormap(Display *dpy, int scr) { return (DefaultColormap(dpy, scr)); } int XBitmapUnit(Display *dpy) { return (BitmapUnit(dpy)); } int XBitmapBitOrder(Display *dpy) { return (BitmapBitOrder(dpy)); } int XBitmapPad(Display *dpy) { return (BitmapPad(dpy)); } int XImageByteOrder(Display *dpy) { return (ImageByteOrder(dpy)); } /* XNextRequest() differs from the rest of the functions here because it is * no longer a macro wrapper - when libX11 is being used mixed together * with direct use of xcb, the next request field of the Display structure will * not be updated. We can't fix the NextRequest() macro in any easy way, * but we can at least make XNextRequest() do the right thing. */ unsigned long XNextRequest(Display *dpy) { unsigned long next_request; LockDisplay(dpy); next_request = _XNextRequest(dpy); UnlockDisplay(dpy); return next_request; } unsigned long XLastKnownRequestProcessed(Display *dpy) { return (LastKnownRequestProcessed(dpy)); } /* screen oriented macros (toolkit) */ Screen *XScreenOfDisplay(Display *dpy, int scr) { return (ScreenOfDisplay(dpy, scr)); } Screen *XDefaultScreenOfDisplay(Display *dpy) { return (DefaultScreenOfDisplay(dpy)); } Display *XDisplayOfScreen(Screen *s) { return (DisplayOfScreen(s)); } Window XRootWindowOfScreen(Screen *s) { return (RootWindowOfScreen(s)); } unsigned long XBlackPixelOfScreen(Screen *s) { return (BlackPixelOfScreen(s)); } unsigned long XWhitePixelOfScreen(Screen *s) { return (WhitePixelOfScreen(s)); } Colormap XDefaultColormapOfScreen(Screen *s) { return (DefaultColormapOfScreen(s)); } int XDefaultDepthOfScreen(Screen *s) { return (DefaultDepthOfScreen(s)); } GC XDefaultGCOfScreen(Screen *s) { return (DefaultGCOfScreen(s)); } Visual *XDefaultVisualOfScreen(Screen *s) { return (DefaultVisualOfScreen(s)); } int XWidthOfScreen(Screen *s) { return (WidthOfScreen(s)); } int XHeightOfScreen(Screen *s) { return (HeightOfScreen(s)); } int XWidthMMOfScreen(Screen *s) { return (WidthMMOfScreen(s)); } int XHeightMMOfScreen(Screen *s) { return (HeightMMOfScreen(s)); } int XPlanesOfScreen(Screen *s) { return (PlanesOfScreen(s)); } int XCellsOfScreen(Screen *s) { return (CellsOfScreen(s)); } int XMinCmapsOfScreen(Screen *s) { return (MinCmapsOfScreen(s)); } int XMaxCmapsOfScreen(Screen *s) { return (MaxCmapsOfScreen(s)); } Bool XDoesSaveUnders(Screen *s) { return (DoesSaveUnders(s)); } int XDoesBackingStore(Screen *s) { return (DoesBackingStore(s)); } long XEventMaskOfScreen(Screen *s) { return (EventMaskOfScreen(s)); } int XScreenNumberOfScreen (register Screen *scr) { register Display *dpy = scr->display; register Screen *dpyscr = dpy->screens; register int i; for (i = 0; i < dpy->nscreens; i++, dpyscr++) { if (scr == dpyscr) return i; } return -1; } /* * These macros are used to give some sugar to the image routines so that * naive people are more comfortable with them. */ #undef XDestroyImage int XDestroyImage( XImage *ximage) { return((*((ximage)->f.destroy_image))((ximage))); } #undef XGetPixel unsigned long XGetPixel( XImage *ximage, int x, int y) { return ((*((ximage)->f.get_pixel))((ximage), (x), (y))); } #undef XPutPixel int XPutPixel( XImage *ximage, int x, int y, unsigned long pixel) { return((*((ximage)->f.put_pixel))((ximage), (x), (y), (pixel))); } #undef XSubImage XImage *XSubImage( XImage *ximage, int x, int y, unsigned int width, unsigned int height) { return((*((ximage)->f.sub_image))((ximage), (x), (y), (width), (height))); } #undef XAddPixel int XAddPixel( XImage *ximage, long value) { return((*((ximage)->f.add_pixel))((ximage), (value))); } int XNoOp (register Display *dpy) { register xReq *req; LockDisplay(dpy); GetEmptyReq(NoOperation, req); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/QuColors.c000064401431060000012000000052471247741723500155700ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" static void _XQueryColors( register Display *dpy, Colormap cmap, XColor *defs, /* RETURN */ int ncolors) { register int i; xQueryColorsReply rep; register xQueryColorsReq *req; GetReq(QueryColors, req); req->cmap = cmap; SetReqLen(req, ncolors, ncolors); /* each pixel is a CARD32 */ for (i = 0; i < ncolors; i++) Data32 (dpy, (long *)&defs[i].pixel, 4L); /* XXX this isn't very efficient */ if (_XReply(dpy, (xReply *) &rep, 0, xFalse) != 0) { unsigned long nbytes = (long) ncolors * SIZEOF(xrgb); xrgb *color = Xmalloc(nbytes); if (color != NULL) { _XRead(dpy, (char *) color, nbytes); for (i = 0; i < ncolors; i++) { register XColor *def = &defs[i]; register xrgb *rgb = &color[i]; def->red = rgb->red; def->green = rgb->green; def->blue = rgb->blue; def->flags = DoRed | DoGreen | DoBlue; } Xfree(color); } else _XEatDataWords(dpy, rep.length); } } int XQueryColors( register Display * const dpy, const Colormap cmap, XColor *defs, /* RETURN */ int ncolors) { int n; if (dpy->bigreq_size > 0) n = dpy->bigreq_size - (sizeof (xQueryColorsReq) >> 2) - 1; else n = dpy->max_request_size - (sizeof (xQueryColorsReq) >> 2); LockDisplay(dpy); while (ncolors >= n) { _XQueryColors(dpy, cmap, defs, n); defs += n; ncolors -= n; } if (ncolors > 0) _XQueryColors(dpy, cmap, defs, ncolors); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/QuStipShp.c000064401431060000012000000035061247741723500157150ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" Status XQueryBestStipple( register Display *dpy, Drawable drawable, unsigned int width, unsigned int height, unsigned int *ret_width, unsigned int *ret_height) { xQueryBestSizeReply rep; register xQueryBestSizeReq *req; LockDisplay(dpy); GetReq(QueryBestSize, req); req->class = StippleShape; req->drawable = drawable; req->width = width; req->height = height; if (_XReply (dpy, (xReply *)&rep, 0, xTrue) == 0) { UnlockDisplay(dpy); SyncHandle(); return 0; } *ret_width = rep.width; *ret_height = rep.height; UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/SetClOrig.c000064401431060000012000000031441247741723500156460ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XSetClipOrigin ( register Display *dpy, GC gc, int xorig, int yorig) { XGCValues *gv = &gc->values; LockDisplay(dpy); if (xorig != gv->clip_x_origin) { gv->clip_x_origin = xorig; gc->dirty |= GCClipXOrigin; } if (yorig != gv->clip_y_origin) { gv->clip_y_origin = yorig; gc->dirty |= GCClipYOrigin; } UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/UngrabBut.c000064401431060000012000000031061247741723500157020ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XUngrabButton( register Display *dpy, unsigned int button, /* CARD8 */ unsigned int modifiers, /* CARD16 */ Window grab_window) { register xUngrabButtonReq *req; LockDisplay(dpy); GetReq(UngrabButton, req); req->button = button; req->modifiers = modifiers; req->grabWindow = grab_window; UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/Sync.c000064401431060000012000000034771247741723500147400ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" /* Synchronize with errors and events, optionally discarding pending events */ int XSync ( register Display *dpy, Bool discard) { xGetInputFocusReply rep; register xReq *req; LockDisplay(dpy); GetEmptyReq(GetInputFocus, req); (void) _XReply (dpy, (xReply *)&rep, 0, xTrue); if (discard && dpy->head) { _XQEvent *qelt; for (qelt=dpy->head; qelt; qelt=qelt->next) qelt->qserial_num = 0; ((_XQEvent *)dpy->tail)->next = dpy->qfree; dpy->qfree = (_XQEvent *)dpy->head; dpy->head = dpy->tail = NULL; dpy->qlen = 0; } UnlockDisplay(dpy); return 1; } libX11-1.6.3/src/GetAtomNm.c000064401431060000012000000117071247741723500156520ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xintatom.h" static char *_XGetAtomName( Display *dpy, Atom atom) { xResourceReq *req; char *name; register Entry *table; register int idx; register Entry e; if (dpy->atoms) { table = dpy->atoms->table; for (idx = TABLESIZE; --idx >= 0; ) { if ((e = *table++) && (e->atom == atom)) { idx = strlen(EntryName(e)) + 1; if ((name = Xmalloc(idx))) strcpy(name, EntryName(e)); return name; } } } GetResReq(GetAtomName, atom, req); return (char *)NULL; } char *XGetAtomName( register Display *dpy, Atom atom) { xGetAtomNameReply rep; char *name; LockDisplay(dpy); if ((name = _XGetAtomName(dpy, atom))) { UnlockDisplay(dpy); return name; } if (_XReply(dpy, (xReply *)&rep, 0, xFalse) == 0) { UnlockDisplay(dpy); SyncHandle(); return(NULL); } if ((name = Xmalloc(rep.nameLength + 1))) { _XReadPad(dpy, name, (long)rep.nameLength); name[rep.nameLength] = '\0'; _XUpdateAtomCache(dpy, name, atom, 0, -1, 0); } else { _XEatDataWords(dpy, rep.length); name = (char *) NULL; } UnlockDisplay(dpy); SyncHandle(); return(name); } typedef struct { unsigned long start_seq; unsigned long stop_seq; Atom *atoms; char **names; int idx; int count; Status status; } _XGetAtomNameState; static Bool _XGetAtomNameHandler( register Display *dpy, register xReply *rep, char *buf, int len, XPointer data) { register _XGetAtomNameState *state; xGetAtomNameReply replbuf; register xGetAtomNameReply *repl; state = (_XGetAtomNameState *)data; if (dpy->last_request_read < state->start_seq || dpy->last_request_read > state->stop_seq) return False; while (state->idx < state->count && state->names[state->idx]) state->idx++; if (state->idx >= state->count) return False; if (rep->generic.type == X_Error) { state->status = 0; return False; } repl = (xGetAtomNameReply *) _XGetAsyncReply(dpy, (char *)&replbuf, rep, buf, len, (SIZEOF(xGetAtomNameReply) - SIZEOF(xReply)) >> 2, False); state->names[state->idx] = Xmalloc(repl->nameLength + 1); _XGetAsyncData(dpy, state->names[state->idx], buf, len, SIZEOF(xGetAtomNameReply), repl->nameLength, repl->length << 2); if (state->names[state->idx]) { state->names[state->idx][repl->nameLength] = '\0'; _XUpdateAtomCache(dpy, state->names[state->idx], state->atoms[state->idx], 0, -1, 0); } else { state->status = 0; } return True; } Status XGetAtomNames ( Display *dpy, Atom *atoms, int count, char **names_return) { _XAsyncHandler async; _XGetAtomNameState async_state; xGetAtomNameReply rep; int i; int missed = -1; LockDisplay(dpy); async_state.start_seq = dpy->request + 1; async_state.atoms = atoms; async_state.names = names_return; async_state.idx = 0; async_state.count = count - 1; async_state.status = 1; async.next = dpy->async_handlers; async.handler = _XGetAtomNameHandler; async.data = (XPointer)&async_state; dpy->async_handlers = &async; for (i = 0; i < count; i++) { if (!(names_return[i] = _XGetAtomName(dpy, atoms[i]))) { missed = i; async_state.stop_seq = dpy->request; } } if (missed >= 0) { if (_XReply(dpy, (xReply *)&rep, 0, xFalse)) { if ((names_return[missed] = Xmalloc(rep.nameLength + 1))) { _XReadPad(dpy, names_return[missed], (long)rep.nameLength); names_return[missed][rep.nameLength] = '\0'; _XUpdateAtomCache(dpy, names_return[missed], atoms[missed], 0, -1, 0); } else { _XEatDataWords(dpy, rep.length); async_state.status = 0; } } } DeqAsyncHandler(dpy, &async); UnlockDisplay(dpy); if (missed >= 0) SyncHandle(); return async_state.status; } libX11-1.6.3/src/RegstFlt.c000064401431060000012000000107311247741723500155450ustar00alancstaff00002660200006 /* * Copyright 1990, 1991 by OMRON Corporation * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name OMRON not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission. OMRON makes no representations * about the suitability of this software for any purpose. It is provided * "as is" without express or implied warranty. * * OMRON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL OMRON BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTUOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. * * Author: Seiji Kuwari OMRON Corporation * kuwa@omron.co.jp * kuwa%omron.co.jp@uunet.uu.net */ /* Copyright 1990, 1991, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xlcint.h" static void _XFreeIMFilters( Display *display) { register XFilterEventList fl; while ((fl = display->im_filters)) { display->im_filters = fl->next; Xfree(fl); } } /* * Register a filter with the filter machinery by event mask. */ void _XRegisterFilterByMask( Display *display, Window window, unsigned long event_mask, Bool (*filter)( Display*, Window, XEvent*, XPointer ), XPointer client_data) { XFilterEventRec *rec; rec = Xmalloc(sizeof(XFilterEventRec)); if (!rec) return; rec->window = window; rec->event_mask = event_mask; rec->start_type = 0; rec->end_type = 0; rec->filter = filter; rec->client_data = client_data; LockDisplay(display); rec->next = display->im_filters; display->im_filters = rec; display->free_funcs->im_filters = _XFreeIMFilters; UnlockDisplay(display); } /* * Register a filter with the filter machinery by type code. */ void _XRegisterFilterByType( Display *display, Window window, int start_type, int end_type, Bool (*filter)( Display*, Window, XEvent*, XPointer ), XPointer client_data) { XFilterEventRec *rec; rec = Xmalloc(sizeof(XFilterEventRec)); if (!rec) return; rec->window = window; rec->event_mask = 0; rec->start_type = start_type; rec->end_type = end_type; rec->filter = filter; rec->client_data = client_data; LockDisplay(display); rec->next = display->im_filters; display->im_filters = rec; display->free_funcs->im_filters = _XFreeIMFilters; UnlockDisplay(display); } void _XUnregisterFilter( Display *display, Window window, Bool (*filter)( Display*, Window, XEvent*, XPointer ), XPointer client_data) { register XFilterEventList *prev, fl; for (prev = &display->im_filters; (fl = *prev); ) { if (fl->window == window && fl->filter == filter && fl->client_data == client_data) { *prev = fl->next; Xfree(fl); } else prev = &fl->next; } } libX11-1.6.3/src/CirWin.c000064401431060000012000000027471247741723500152160ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XCirculateSubwindows( register Display *dpy, Window w, int direction) { register xCirculateWindowReq *req; LockDisplay(dpy); GetReq(CirculateWindow, req); req->window = w; req->direction = direction; UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/FillRcts.c000064401431060000012000000036311247741723500155360ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XFillRectangles( register Display *dpy, Drawable d, GC gc, XRectangle *rectangles, int n_rects) { register xPolyFillRectangleReq *req; long len; int n; LockDisplay(dpy); FlushGC(dpy, gc); while (n_rects) { GetReq(PolyFillRectangle, req); req->drawable = d; req->gc = gc->gid; n = n_rects; len = ((long)n) << 1; if (!dpy->bigreq_size && len > (dpy->max_request_size - req->length)) { n = (dpy->max_request_size - req->length) >> 1; len = ((long)n) << 1; } SetReqLen(req, len, len); len <<= 2; /* watch out for macros... */ Data16 (dpy, (short *) rectangles, len); n_rects -= n; rectangles += n; } UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/WMProps.c000064401431060000012000000121571247741723500153660ustar00alancstaff00002660200006/* Copyright 1987, 1988, 1993, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ /*********************************************************** Copyright 1988 by Wyse Technology, Inc., San Jose, Ca., Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts, All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Wyse not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. WYSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include /* * XSetWMProperties sets the following properties: * WM_NAME type: TEXT format: varies? * WM_ICON_NAME type: TEXT format: varies? * WM_HINTS type: WM_HINTS format: 32 * WM_COMMAND type: TEXT format: varies? * WM_CLIENT_MACHINE type: TEXT format: varies? * WM_NORMAL_HINTS type: WM_SIZE_HINTS format: 32 * WM_CLASS type: STRING/STRING format: 8 * WM_LOCALE_NAME type: STRING format: 8 */ void XSetWMProperties ( Display *dpy, Window w, /* window to decorate */ XTextProperty *windowName, /* name of application */ XTextProperty *iconName, /* name string for icon */ char **argv, /* command line */ int argc, /* size of command line */ XSizeHints *sizeHints, /* size hints for window in its normal state */ XWMHints *wmHints, /* miscelaneous window manager hints */ XClassHint *classHints) /* resource name and class */ { XTextProperty textprop; char hostName[256]; int len = _XGetHostname (hostName, sizeof hostName); char *locale; /* set names of window and icon */ if (windowName) XSetWMName (dpy, w, windowName); if (iconName) XSetWMIconName (dpy, w, iconName); /* set the command if given */ if (argv) { /* * for UNIX and other operating systems which use nul-terminated * arrays of STRINGs. */ XSetCommand (dpy, w, argv, argc); } /* set the name of the machine on which this application is running */ textprop.value = (unsigned char *) hostName; textprop.encoding = XA_STRING; textprop.format = 8; textprop.nitems = len; XSetWMClientMachine (dpy, w, &textprop); /* set hints about how geometry and window manager interaction */ if (sizeHints) XSetWMNormalHints (dpy, w, sizeHints); if (wmHints) XSetWMHints (dpy, w, wmHints); if (classHints) { XClassHint tmp; if (!classHints->res_name) { tmp.res_name = getenv ("RESOURCE_NAME"); if (!tmp.res_name && argv && argv[0]) { /* * UNIX uses /dir/subdir/.../basename; other operating * systems will have to change this. */ char *cp = strrchr (argv[0], '/'); #ifdef __UNIXOS2__ char *os2_cp = strrchr (argv[0],'\\'); char *dot_cp = strrchr (argv[0],'.'); if (os2_cp && (os2_cp > cp)) { if(dot_cp && (dot_cp > os2_cp)) *dot_cp = '\0'; cp=os2_cp; } #endif tmp.res_name = (cp ? cp + 1 : argv[0]); } tmp.res_class = classHints->res_class; classHints = &tmp; } XSetClassHint (dpy, w, classHints); } locale = setlocale(LC_CTYPE, (char *)NULL); if (locale) XChangeProperty (dpy, w, XInternAtom(dpy, "WM_LOCALE_NAME", False), XA_STRING, 8, PropModeReplace, (unsigned char *)locale, strlen(locale)); } s software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS ISlibX11-1.6.3/src/locking.h000064401431060000012000000115621247741723500154510ustar00alancstaff00002660200006/* Copyright 1992, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ /* * Author: Stephen Gildea, MIT X Consortium * * locking.h - data types for C Threads locking. * Used by XlibInt.c, locking.c, LockDis.c */ #ifndef _X_locking_H_ #define _X_locking_H_ #define xmalloc(s) Xmalloc(s) #define xfree(s) Xfree(s) #include #include #include struct _XCVList { xcondition_t cv; xReply *buf; struct _XCVList *next; }; extern xthread_t (*_Xthread_self_fn)( /* in XlibInt.c */ void ); /* Display->lock is a pointer to one of these */ struct _XLockInfo { xmutex_t mutex; /* mutex for critical sections */ int reply_bytes_left; /* nbytes of the reply still to read */ Bool reply_was_read; /* _XReadEvents read a reply for _XReply */ struct _XCVList *reply_awaiters; /* list of CVs for _XReply */ struct _XCVList **reply_awaiters_tail; struct _XCVList *event_awaiters; /* list of CVs for _XReadEvents */ struct _XCVList **event_awaiters_tail; Bool reply_first; /* who may read, reply queue or event queue */ /* for XLockDisplay */ int locking_level; /* how many times into XLockDisplay we are */ xthread_t locking_thread; /* thread that did XLockDisplay */ xcondition_t cv; /* wait if another thread has XLockDisplay */ xthread_t reading_thread; /* cache */ xthread_t conni_thread; /* thread in XProcessInternalConnection */ xcondition_t writers; /* wait for writable */ int num_free_cvls; struct _XCVList *free_cvls; /* used only in XlibInt.c */ void (*pop_reader)( Display* /* dpy */, struct _XCVList** /* list */, struct _XCVList*** /* tail */ ); struct _XCVList *(*push_reader)( Display * /* dpy */, struct _XCVList*** /* tail */ ); void (*condition_wait)( xcondition_t /* cv */, xmutex_t /* mutex */ #if defined(XTHREADS_WARN) || defined(XTHREADS_FILE_LINE) , char* /* file */, int /* line */ #endif ); void (*internal_lock_display)( Display* /* dpy */, Bool /* wskip */ #if defined(XTHREADS_WARN) || defined(XTHREADS_FILE_LINE) , char* /* file */, int /* line */ #endif ); /* used in XlibInt.c and locking.c */ void (*condition_signal)( xcondition_t /* cv */ #if defined(XTHREADS_WARN) || defined(XTHREADS_FILE_LINE) , char* /* file */, int /* line */ #endif ); void (*condition_broadcast)( xcondition_t /* cv */ #if defined(XTHREADS_WARN) || defined(XTHREADS_FILE_LINE) , char* /* file */, int /* line */ #endif ); /* used in XlibInt.c and XLockDis.c */ void (*lock_wait)( Display* /* dpy */ ); void (*user_lock_display)( Display* /* dpy */ ); void (*user_unlock_display)( Display* /* dpy */ ); struct _XCVList *(*create_cvl)( Display * /* dpy */ ); }; #define UnlockNextEventReader(d) if ((d)->lock) \ (*(d)->lock->pop_reader)((d),&(d)->lock->event_awaiters,&(d)->lock->event_awaiters_tail) #if defined(XTHREADS_WARN) || defined(XTHREADS_FILE_LINE) #define ConditionWait(d,c) if ((d)->lock) \ (*(d)->lock->condition_wait)(c, (d)->lock->mutex,__FILE__,__LINE__) #define ConditionSignal(d,c) if ((d)->lock) \ (*(d)->lock->condition_signal)(c,__FILE__,__LINE__) #define ConditionBroadcast(d,c) if ((d)->lock) \ (*(d)->lock->condition_broadcast)(c,__FILE__,__LINE__) #else #define ConditionWait(d,c) if ((d)->lock) \ (*(d)->lock->condition_wait)(c, (d)->lock->mutex) #define ConditionSignal(d,c) if ((d)->lock) \ (*(d)->lock->condition_signal)(c) #define ConditionBroadcast(d,c) if ((d)->lock) \ (*(d)->lock->condition_broadcast)(c) #endif typedef struct _LockInfoRec { xmutex_t lock; } LockInfoRec; /* XOpenDis.c */ extern int (*_XInitDisplayLock_fn)(Display *dpy); extern void (*_XFreeDisplayLock_fn)(Display *dpy); #endif /* _X_locking_H_ */ libX11-1.6.3/src/ReconfWin.c000064401431060000012000000043641247741723500157120ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #define AllMaskBits (CWX|CWY|CWWidth|CWHeight|\ CWBorderWidth|CWSibling|CWStackMode) int XConfigureWindow( register Display *dpy, Window w, unsigned int mask, XWindowChanges *changes) { unsigned long values[7]; register unsigned long *value = values; long nvalues; register xConfigureWindowReq *req; LockDisplay(dpy); GetReq(ConfigureWindow, req); req->window = w; mask &= AllMaskBits; req->mask = mask; if (mask & CWX) *value++ = changes->x; if (mask & CWY) *value++ = changes->y; if (mask & CWWidth) *value++ = changes->width; if (mask & CWHeight) *value++ = changes->height; if (mask & CWBorderWidth) *value++ = changes->border_width; if (mask & CWSibling) *value++ = changes->sibling; if (mask & CWStackMode) *value++ = changes->stack_mode; req->length += (nvalues = value - values); nvalues <<= 2; /* watch out for macros... */ Data32 (dpy, (long *) values, nvalues); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/GetPCnt.c000064401431060000012000000032641247741723500153220ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XGetPointerControl( register Display *dpy, /* the following are return only vars */ int *accel_numer, int *accel_denom, int *threshold) { xGetPointerControlReply rep; xReq *req; LockDisplay(dpy); GetEmptyReq(GetPointerControl, req); (void) _XReply (dpy, (xReply *)&rep, 0, xTrue); *accel_numer = rep.accelNumerator; *accel_denom = rep.accelDenominator; *threshold = rep.threshold; UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/RestackWs.c000064401431060000012000000033071247741723500157220ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XRestackWindows ( register Display *dpy, register Window *windows, int n) { int i = 0; LockDisplay(dpy); while (windows++, ++i < n) { register xConfigureWindowReq *req; GetReqExtra (ConfigureWindow, 8, req); req->window = *windows; req->mask = CWSibling | CWStackMode; { register CARD32 *values = (CARD32 *) NEXTPTR(req,xConfigureWindowReq); *values++ = *(windows-1); *values = Below; } } UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/GetEventData.c000064401431060000012000000026021247741723500163240ustar00alancstaff00002660200006/* * Copyright © 2009 Red Hat, Inc. * * 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: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. * */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" Bool XGetEventData(Display *dpy, XGenericEventCookie *event) { Bool rc; LockDisplay(dpy); rc = _XFetchEventCookie(dpy, event); UnlockDisplay(dpy); return rc; } libX11-1.6.3/src/QuTextExt.c000064401431060000012000000051201247741723500157220ustar00alancstaff00002660200006/* Copyright 1986, 1987, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XQueryTextExtents ( register Display *dpy, Font fid, register _Xconst char *string, register int nchars, int *dir, int *font_ascent, int *font_descent, register XCharStruct *overall) { register int i; register char *ptr; char *buf; xQueryTextExtentsReply rep; long nbytes; register xQueryTextExtentsReq *req; LockDisplay(dpy); nbytes = nchars << 1; GetReq(QueryTextExtents, req); req->fid = fid; if ((buf = _XAllocScratch (dpy, (unsigned long) nbytes))) { req->length += (nbytes + 3)>>2; req->oddLength = nchars & 1; for (ptr = buf, i = nchars; --i >= 0;) { *ptr++ = 0; *ptr++ = *string++; } Data (dpy, buf, nbytes); } if (!_XReply (dpy, (xReply *)&rep, 0, xTrue) || !buf) { UnlockDisplay(dpy); SyncHandle(); return 0; } *dir = rep.drawDirection; *font_ascent = cvtINT16toInt (rep.fontAscent); *font_descent = cvtINT16toInt (rep.fontDescent); overall->ascent = (short) cvtINT16toShort (rep.overallAscent); overall->descent = (short) cvtINT16toShort (rep.overallDescent); /* XXX bogus - we're throwing away information!!! */ overall->width = (short) cvtINT32toInt (rep.overallWidth); overall->lbearing = (short) cvtINT32toInt (rep.overallLeft); overall->rbearing = (short) cvtINT32toInt (rep.overallRight); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/Clear.c000064401431060000012000000030531247741723500150400ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XClearWindow( register Display *dpy, Window w) { register xClearAreaReq *req; LockDisplay(dpy); GetReq(ClearArea, req); req->window = w; req->x = req->y = req->width = req->height = 0; /* these values mean "clear the entire window" */ req->exposures = xFalse; UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/CrWindow.c000064401431060000012000000040311247741723500155430ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" Window XCreateSimpleWindow( register Display *dpy, Window parent, int x, int y, unsigned int width, unsigned int height, unsigned int borderWidth, unsigned long border, unsigned long background) { Window wid; register xCreateWindowReq *req; LockDisplay(dpy); GetReqExtra(CreateWindow, 8, req); req->parent = parent; req->x = x; req->y = y; req->width = width; req->height = height; req->borderWidth = borderWidth; req->depth = 0; req->class = CopyFromParent; req->visual = CopyFromParent; wid = req->wid = XAllocID(dpy); req->mask = CWBackPixel | CWBorderPixel; { register CARD32 *valuePtr = (CARD32 *) NEXTPTR(req,xCreateWindowReq); *valuePtr++ = background; *valuePtr = border; } UnlockDisplay(dpy); SyncHandle(); return (wid); } libX11-1.6.3/src/AllCells.c000064401431060000012000000041661247741723500155130ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" Status XAllocColorCells( register Display *dpy, Colormap cmap, Bool contig, unsigned long *masks, /* LISTofCARD32 */ /* RETURN */ unsigned int nplanes, /* CARD16 */ unsigned long *pixels, /* LISTofCARD32 */ /* RETURN */ unsigned int ncolors) /* CARD16 */ { Status status; xAllocColorCellsReply rep; register xAllocColorCellsReq *req; LockDisplay(dpy); GetReq(AllocColorCells, req); req->cmap = cmap; req->colors = ncolors; req->planes = nplanes; req->contiguous = contig; status = _XReply(dpy, (xReply *)&rep, 0, xFalse); if (status) { if ((rep.nPixels > ncolors) || (rep.nMasks > nplanes)) { _XEatDataWords(dpy, rep.length); status = 0; /* Failure */ } else { _XRead32 (dpy, (long *) pixels, 4L * (long) (rep.nPixels)); _XRead32 (dpy, (long *) masks, 4L * (long) (rep.nMasks)); } } UnlockDisplay(dpy); SyncHandle(); return(status); } libX11-1.6.3/src/GetDflt.c000064401431060000012000000150611247741723500153450ustar00alancstaff00002660200006 /*********************************************************** Copyright 1987, 1988, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include #include #include "pathmax.h" #ifdef XTHREADS #include #endif #ifndef WIN32 #define X_INCLUDE_PWD_H #define XOS_USE_XLIB_LOCKING #include #endif #include #include /*ARGSUSED*/ static char * GetHomeDir( char *dest, int len) { #ifdef WIN32 register char *ptr1 = NULL; register char *ptr2 = NULL; int len1 = 0, len2 = 0; if ((ptr1 = getenv("HOME"))) { /* old, deprecated */ len1 = strlen (ptr1); } else if ((ptr1 = getenv("HOMEDRIVE")) && (ptr2 = getenv("HOMEDIR"))) { len1 = strlen (ptr1); len2 = strlen (ptr2); } else if ((ptr2 = getenv("USERNAME"))) { len1 = strlen (ptr1 = "/users/"); len2 = strlen (ptr2); } if ((len1 + len2 + 1) < len) snprintf (dest, len, "%s%s", ptr1, (ptr2) ? ptr2 : ""); else *dest = '\0'; #else #ifdef X_NEEDS_PWPARAMS _Xgetpwparams pwparams; #endif struct passwd *pw; register char *ptr; if (len <= 0 || dest == NULL) return NULL; if ((ptr = getenv("HOME"))) { (void) strncpy(dest, ptr, len-1); dest[len-1] = '\0'; } else { if ((ptr = getenv("USER"))) pw = _XGetpwnam(ptr,pwparams); else pw = _XGetpwuid(getuid(),pwparams); if (pw != NULL) { (void) strncpy(dest, pw->pw_dir, len-1); dest[len-1] = '\0'; } else *dest = '\0'; } #endif return dest; } static XrmDatabase InitDefaults( Display *dpy) /* display for defaults.... */ { XrmDatabase userdb; XrmDatabase xdb; char fname[PATH_MAX]; /* longer than any conceivable size */ char *xenv; XrmInitialize(); /* * See lib/Xt/Initialize.c * * First, get the defaults from the server; if none, then load from * ~/.Xdefaults. Next, if there is an XENVIRONMENT environment variable, * then load that file. */ if (dpy->xdefaults == NULL) { const char *slashDotXdefaults = "/.Xdefaults"; (void) GetHomeDir (fname, PATH_MAX - strlen (slashDotXdefaults) - 1); (void) strcat (fname, slashDotXdefaults); xdb = XrmGetFileDatabase (fname); } else { xdb = XrmGetStringDatabase(dpy->xdefaults); } if (!(xenv = getenv ("XENVIRONMENT"))) { const char *slashDotXdefaultsDash = "/.Xdefaults-"; int len; (void) GetHomeDir (fname, PATH_MAX - strlen (slashDotXdefaultsDash) - 1); (void) strcat (fname, slashDotXdefaultsDash); len = strlen (fname); (void) _XGetHostname (fname+len, PATH_MAX-len); xenv = fname; } userdb = XrmGetFileDatabase (xenv); XrmMergeDatabases (userdb, &xdb); return (xdb); #ifdef old if (fname[0] != '\0') userdb = XrmGetFileDatabase(fname); xdb = XrmGetStringDatabase(dpy->xdefaults); XrmMergeDatabases(userdb, &xdb); return xdb; #endif } char * XGetDefault( Display *dpy, /* display for defaults.... */ char _Xconst *prog, /* name of program for option */ register _Xconst char *name) /* name of option program wants */ { /* to get, for example, "font" */ XrmName names[3]; XrmClass classes[3]; XrmRepresentation fromType; XrmValue result; char *progname; #ifdef WIN32 char *progname2; #endif #ifdef __UNIXOS2__ char *progname2; char *dotpos; #endif /* * strip path off of program name (XXX - this is OS specific) */ progname = strrchr (prog, '/'); #ifdef WIN32 progname2 = strrchr (prog, '\\'); if (progname2 && (!progname || progname < progname2)) progname = progname2; #endif #ifdef __UNIXOS2__ /* Very similar to WIN32 */ progname2 = strrchr (prog, '\\'); if (progname2 && (!progname || progname < progname2)) progname = progname2; dotpos = strrchr (prog, '.'); if (dotpos && (dotpos>progname2)) *dotpos='\0'; #endif /* We take out the .exe suffix */ if (progname) progname++; else progname = (char *)prog; /* * see if database has ever been initialized. Lookups can be done * without locks held. */ LockDisplay(dpy); if (dpy->db == NULL) { dpy->db = InitDefaults(dpy); dpy->flags |= XlibDisplayDfltRMDB; } UnlockDisplay(dpy); names[0] = XrmStringToName(progname); names[1] = XrmStringToName(name); names[2] = NULLQUARK; classes[0] = XrmStringToClass("Program"); classes[1] = XrmStringToClass("Name"); classes[2] = NULLQUARK; (void)XrmQGetResource(dpy->db, names, classes, &fromType, &result); return (result.addr); } libX11-1.6.3/src/RotProp.c000064401431060000012000000033501247741723500154170ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XRotateWindowProperties( register Display *dpy, Window w, Atom *properties, register int nprops, int npositions) { register long nbytes; register xRotatePropertiesReq *req; LockDisplay(dpy); GetReq (RotateProperties, req); req->window = w; req->nAtoms = nprops; req->nPositions = npositions; req->length += nprops; nbytes = nprops << 2; /* XXX Cray needs packing here.... */ Data32 (dpy, (long *) properties, nbytes); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/GrKeybd.c000064401431060000012000000035051247741723500153430ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XGrabKeyboard ( register Display *dpy, Window window, Bool ownerEvents, int pointerMode, int keyboardMode, Time time) { xGrabKeyboardReply rep; register xGrabKeyboardReq *req; register int status; LockDisplay(dpy); GetReq(GrabKeyboard, req); req->grabWindow = window; req->ownerEvents = ownerEvents; req->pointerMode = pointerMode; req->keyboardMode = keyboardMode; req->time = time; /* if we ever return, suppress the error */ if (_XReply (dpy, (xReply *) &rep, 0, xTrue) == 0) rep.status = GrabSuccess; status = rep.status; UnlockDisplay(dpy); SyncHandle(); return (status); } documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WlibX11-1.6.3/src/GetTxtProp.c000064401431060000012000000067301247741723500160770ustar00alancstaff00002660200006/*********************************************************** Copyright 1988 by Wyse Technology, Inc., San Jose, Ca., All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name Wyse not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. WYSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* Copyright 1988, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include Status XGetTextProperty ( Display *display, Window window, XTextProperty *tp, Atom property) { Atom actual_type; int actual_format = 0; unsigned long nitems = 0L, leftover = 0L; unsigned char *prop = NULL; if (XGetWindowProperty (display, window, property, 0L, 1000000L, False, AnyPropertyType, &actual_type, &actual_format, &nitems, &leftover, &prop) == Success && actual_type != None) { /* okay, fill it in */ tp->value = prop; tp->encoding = actual_type; tp->format = actual_format; tp->nitems = nitems; return True; } tp->value = NULL; tp->encoding = None; tp->format = 0; tp->nitems = 0; return False; } Status XGetWMName ( Display *dpy, Window w, XTextProperty *tp) { return (XGetTextProperty (dpy, w, tp, XA_WM_NAME)); } Status XGetWMIconName ( Display *dpy, Window w, XTextProperty *tp) { return (XGetTextProperty (dpy, w, tp, XA_WM_ICON_NAME)); } Status XGetWMClientMachine ( Display *dpy, Window w, XTextProperty *tp) { return (XGetTextProperty (dpy, w, tp, XA_WM_CLIENT_MACHINE)); } libX11-1.6.3/src/CirWinDn.c000064401431060000012000000027331247741723500154730ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XCirculateSubwindowsDown( register Display *dpy, Window w) { register xCirculateWindowReq *req; LockDisplay(dpy); GetReq(CirculateWindow, req); req->window = w; req->direction = LowerHighest; UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/Depths.c000064401431060000012000000034611247741723500152440ustar00alancstaff00002660200006/* Copyright 1989, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include /* * XListDepths - return info from connection setup */ int *XListDepths ( Display *dpy, int scrnum, int *countp) { Screen *scr; int count; int *depths; if (scrnum < 0 || scrnum >= dpy->nscreens) return NULL; scr = &dpy->screens[scrnum]; if ((count = scr->ndepths) > 0) { register Depth *dp; register int i; depths = Xmalloc (count * sizeof(int)); if (!depths) return NULL; for (i = 0, dp = scr->depths; i < count; i++, dp++) depths[i] = dp->depth; } else { /* a screen must have a depth */ return NULL; } *countp = count; return depths; } libX11-1.6.3/src/ModMap.c000064401431060000012000000116041247741723500151700ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include XModifierKeymap * XGetModifierMapping(register Display *dpy) { xGetModifierMappingReply rep; register xReq *req; unsigned long nbytes; XModifierKeymap *res; LockDisplay(dpy); GetEmptyReq(GetModifierMapping, req); (void) _XReply (dpy, (xReply *)&rep, 0, xFalse); if (rep.length < (INT_MAX >> 2)) { nbytes = (unsigned long)rep.length << 2; res = Xmalloc(sizeof (XModifierKeymap)); if (res) res->modifiermap = Xmalloc (nbytes); } else res = NULL; if ((! res) || (! res->modifiermap)) { Xfree(res); res = (XModifierKeymap *) NULL; _XEatDataWords(dpy, rep.length); } else { _XReadPad(dpy, (char *) res->modifiermap, (long) nbytes); res->max_keypermod = rep.numKeyPerModifier; } UnlockDisplay(dpy); SyncHandle(); return (res); } /* * Returns: * MappingSuccess (0) Success * MappingBusy (1) Busy - one or more old or new modifiers are down * MappingFailed (2) Failed - one or more new modifiers unacceptable */ int XSetModifierMapping( register Display *dpy, register XModifierKeymap *modifier_map) { register xSetModifierMappingReq *req; xSetModifierMappingReply rep; int mapSize = modifier_map->max_keypermod << 3; /* 8 modifiers */ LockDisplay(dpy); GetReq(SetModifierMapping, req); req->length += mapSize >> 2; req->numKeyPerModifier = modifier_map->max_keypermod; Data(dpy, modifier_map->modifiermap, mapSize); (void) _XReply(dpy, (xReply *) & rep, (SIZEOF(xSetModifierMappingReply) - SIZEOF(xReply)) >> 2, xTrue); UnlockDisplay(dpy); SyncHandle(); return (rep.success); } XModifierKeymap * XNewModifiermap(int keyspermodifier) { XModifierKeymap *res = Xmalloc((sizeof (XModifierKeymap))); if (res) { res->max_keypermod = keyspermodifier; res->modifiermap = (keyspermodifier > 0 ? Xmalloc(8 * keyspermodifier) : (KeyCode *) NULL); if (keyspermodifier && (res->modifiermap == NULL)) { Xfree(res); return (XModifierKeymap *) NULL; } } return (res); } int XFreeModifiermap(XModifierKeymap *map) { if (map) { Xfree(map->modifiermap); Xfree(map); } return 1; } XModifierKeymap * XInsertModifiermapEntry(XModifierKeymap *map, #if NeedWidePrototypes unsigned int keycode, #else KeyCode keycode, #endif int modifier) { XModifierKeymap *newmap; int i, row = modifier * map->max_keypermod, newrow, lastrow; for (i=0; imax_keypermod; i++) { if (map->modifiermap[ row+i ] == keycode) return(map); /* already in the map */ if (map->modifiermap[ row+i ] == 0) { map->modifiermap[ row+i ] = keycode; return(map); /* we added it without stretching the map */ } } /* stretch the map */ if ((newmap = XNewModifiermap(map->max_keypermod+1)) == NULL) return (XModifierKeymap *) NULL; newrow = row = 0; lastrow = newmap->max_keypermod * 8; while (newrow < lastrow) { for (i=0; imax_keypermod; i++) newmap->modifiermap[ newrow+i ] = map->modifiermap[ row+i ]; newmap->modifiermap[ newrow+i ] = 0; row += map->max_keypermod; newrow += newmap->max_keypermod; } (void) XFreeModifiermap(map); newrow = newmap->max_keypermod * modifier + newmap->max_keypermod - 1; newmap->modifiermap[ newrow ] = keycode; return(newmap); } XModifierKeymap * XDeleteModifiermapEntry(XModifierKeymap *map, #if NeedWidePrototypes unsigned int keycode, #else KeyCode keycode, #endif int modifier) { int i, row = modifier * map->max_keypermod; for (i=0; imax_keypermod; i++) { if (map->modifiermap[ row+i ] == keycode) map->modifiermap[ row+i ] = 0; } /* should we shrink the map?? */ return (map); } libX11-1.6.3/src/SetCRects.c000064401431060000012000000050101247741723500156440ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" /* can only call when display is locked. */ void _XSetClipRectangles ( register Display *dpy, GC gc, int clip_x_origin, int clip_y_origin, XRectangle *rectangles, int n, int ordering) { register xSetClipRectanglesReq *req; register long len; unsigned long dirty; register _XExtension *ext; GetReq (SetClipRectangles, req); req->gc = gc->gid; req->xOrigin = gc->values.clip_x_origin = clip_x_origin; req->yOrigin = gc->values.clip_y_origin = clip_y_origin; req->ordering = ordering; len = ((long)n) << 1; SetReqLen(req, len, 1); len <<= 2; Data16 (dpy, (short *) rectangles, len); gc->rects = 1; dirty = gc->dirty & ~(GCClipMask | GCClipXOrigin | GCClipYOrigin); gc->dirty = GCClipMask | GCClipXOrigin | GCClipYOrigin; /* call out to any extensions interested */ for (ext = dpy->ext_procs; ext; ext = ext->next) if (ext->flush_GC) (*ext->flush_GC)(dpy, gc, &ext->codes); gc->dirty = dirty; } int XSetClipRectangles ( register Display *dpy, GC gc, int clip_x_origin, int clip_y_origin, XRectangle *rectangles, int n, int ordering) { LockDisplay(dpy); _XSetClipRectangles (dpy, gc, clip_x_origin, clip_y_origin, rectangles, n, ordering); UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/ChKeyCon.c000064401431060000012000000045721247741723500154640ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XChangeKeyboardControl( register Display *dpy, unsigned long mask, XKeyboardControl *value_list) { unsigned long values[8]; register unsigned long *value = values; long nvalues; register xChangeKeyboardControlReq *req; LockDisplay(dpy); GetReq(ChangeKeyboardControl, req); req->mask = mask; if (mask & KBKeyClickPercent) *value++ = value_list->key_click_percent; if (mask & KBBellPercent) *value++ = value_list->bell_percent; if (mask & KBBellPitch) *value++ = value_list->bell_pitch; if (mask & KBBellDuration) *value++ = value_list->bell_duration; if (mask & KBLed) *value++ = value_list->led; if (mask & KBLedMode) *value++ = value_list->led_mode; if (mask & KBKey) *value++ = value_list->key; if (mask & KBAutoRepeatMode) *value++ = value_list->auto_repeat_mode; req->length += (nvalues = value - values); /* note: Data is a macro that uses its arguments multiple times, so "nvalues" is changed in a separate assignment statement */ nvalues <<= 2; Data32 (dpy, (long *) values, nvalues); UnlockDisplay(dpy); SyncHandle(); return 1; } LINGS IN THE SOFTWARE. Except as contained in this notice, the name of The Open Group shall not be used in advertising or otherwise tlibX11-1.6.3/src/FillRct.c000064401431060000012000000046311247741723500153540ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" /* precompute the maximum size of batching request allowed */ #define size (SIZEOF(xPolyFillRectangleReq) + FRCTSPERBATCH * SIZEOF(xRectangle)) int XFillRectangle( register Display *dpy, Drawable d, GC gc, int x, int y, /* INT16 */ unsigned int width, unsigned int height) /* CARD16 */ { xRectangle *rect; LockDisplay(dpy); FlushGC(dpy, gc); { register xPolyFillRectangleReq *req = (xPolyFillRectangleReq *) dpy->last_req; /* if same as previous request, with same drawable, batch requests */ if ( (req->reqType == X_PolyFillRectangle) && (req->drawable == d) && (req->gc == gc->gid) && ((dpy->bufptr + SIZEOF(xRectangle)) <= dpy->bufmax) && (((char *)dpy->bufptr - (char *)req) < size) ) { req->length += SIZEOF(xRectangle) >> 2; rect = (xRectangle *) dpy->bufptr; dpy->bufptr += SIZEOF(xRectangle); } else { GetReqExtra(PolyFillRectangle, SIZEOF(xRectangle), req); req->drawable = d; req->gc = gc->gid; rect = (xRectangle *) NEXTPTR(req,xPolyFillRectangleReq); } rect->x = x; rect->y = y; rect->width = width; rect->height = height; } UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/XErrorDB000064401431060000012000001221351247741723500152230ustar00alancstaff00002660200006! ! Copyright 1993, 1995, 1998 The Open Group ! Permission to use, copy, modify, distribute, and sell this software and its ! documentation for any purpose is hereby granted without fee, provided that ! the above copyright notice appear in all copies and that both that ! copyright notice and this permission notice appear in supporting ! documentation. ! ! The above copyright notice and this permission notice shall be ! included in all copies or substantial portions of the Software. ! ! THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. ! ! 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 The Open Group. ! ! ! these are used in XGetErrorMessage. XlibMessage.XError: X Error of failed request XlibMessage.MajorCode: Major opcode of failed request: %d XlibMessage.MinorCode: Minor opcode of failed request: %d XlibMessage.ResourceID: Resource id in failed request: 0x%lx XlibMessage.Value: Value in failed request: 0x%lx XlibMessage.AtomID: Atom id in failed request: 0x%lx XlibMessage.ErrorSerial: Serial number of failed request: %lu XlibMessage.CurrentSerial: Current serial number in output stream: %lu ! X request codes. XRequest.1:X_CreateWindow XRequest.2:X_ChangeWindowAttributes XRequest.3:X_GetWindowAttributes XRequest.4:X_DestroyWindow XRequest.5:X_DestroySubwindows XRequest.6:X_ChangeSaveSet XRequest.7:X_ReparentWindow XRequest.8:X_MapWindow XRequest.9:X_MapSubwindows XRequest.10:X_UnmapWindow XRequest.11:X_UnmapSubwindows XRequest.12:X_ConfigureWindow XRequest.13:X_CirculateWindow XRequest.14:X_GetGeometry XRequest.15:X_QueryTree XRequest.16:X_InternAtom XRequest.17:X_GetAtomName XRequest.18:X_ChangeProperty XRequest.19:X_DeleteProperty XRequest.20:X_GetProperty XRequest.21:X_ListProperties XRequest.22:X_SetSelectionOwner XRequest.23:X_GetSelectionOwner XRequest.24:X_ConvertSelection XRequest.25:X_SendEvent XRequest.26:X_GrabPointer XRequest.27:X_UngrabPointer XRequest.28:X_GrabButton XRequest.29:X_UngrabButton XRequest.30:X_ChangeActivePointerGrab XRequest.31:X_GrabKeyboard XRequest.32:X_UngrabKeyboard XRequest.33:X_GrabKey XRequest.34:X_UngrabKey XRequest.35:X_AllowEvents XRequest.36:X_GrabServer XRequest.37:X_UngrabServer XRequest.38:X_QueryPointer XRequest.39:X_GetMotionEvents XRequest.40:X_TranslateCoords XRequest.41:X_WarpPointer XRequest.42:X_SetInputFocus XRequest.43:X_GetInputFocus XRequest.44:X_QueryKeymap XRequest.45:X_OpenFont XRequest.46:X_CloseFont XRequest.47:X_QueryFont XRequest.48:X_QueryTextExtents XRequest.49:X_ListFonts XRequest.50:X_ListFontsWithInfo XRequest.51:X_SetFontPath XRequest.52:X_GetFontPath XRequest.53:X_CreatePixmap XRequest.54:X_FreePixmap XRequest.55:X_CreateGC XRequest.56:X_ChangeGC XRequest.57:X_CopyGC XRequest.58:X_SetDashes XRequest.59:X_SetClipRectangles XRequest.60:X_FreeGC XRequest.61:X_ClearArea XRequest.62:X_CopyArea XRequest.63:X_CopyPlane XRequest.64:X_PolyPoint XRequest.65:X_PolyLine XRequest.66:X_PolySegment XRequest.67:X_PolyRectangle XRequest.68:X_PolyArc XRequest.69:X_FillPoly XRequest.70:X_PolyFillRectangle XRequest.71:X_PolyFillArc XRequest.72:X_PutImage XRequest.73:X_GetImage XRequest.74:X_PolyText8 XRequest.75:X_PolyText16 XRequest.76:X_ImageText8 XRequest.77:X_ImageText16 XRequest.78:X_CreateColormap XRequest.79:X_FreeColormap XRequest.80:X_CopyColormapAndFree XRequest.81:X_InstallColormap XRequest.82:X_UninstallColormap XRequest.83:X_ListInstalledColormaps XRequest.84:X_AllocColor XRequest.85:X_AllocNamedColor XRequest.86:X_AllocColorCells XRequest.87:X_AllocColorPlanes XRequest.88:X_FreeColors XRequest.89:X_StoreColors XRequest.90:X_StoreNamedColor XRequest.91:X_QueryColors XRequest.92:X_LookupColor XRequest.93:X_CreateCursor XRequest.94:X_CreateGlyphCursor XRequest.95:X_FreeCursor XRequest.96:X_RecolorCursor XRequest.97:X_QueryBestSize XRequest.98:X_QueryExtension XRequest.99:X_ListExtensions XRequest.100:X_ChangeKeyboardMapping XRequest.101:X_GetKeyboardMapping XRequest.102:X_ChangeKeyboardControl XRequest.103:X_GetKeyboardControl XRequest.104:X_Bell XRequest.105:X_ChangePointerControl XRequest.106:X_GetPointerControl XRequest.107:X_SetScreenSaver XRequest.108:X_GetScreenSaver XRequest.109:X_ChangeHosts XRequest.110:X_ListHosts XRequest.111:X_SetAccessControl XRequest.112:X_SetCloseDownMode XRequest.113:X_KillClient XRequest.114:X_RotateProperties XRequest.115:X_ForceScreenSaver XRequest.116:X_SetPointerMapping XRequest.117:X_GetPointerMapping XRequest.118:X_SetModifierMapping XRequest.119:X_GetModifierMapping XRequest.127:X_NoOperation ! X Error Codes XProtoError.0: unknown error code 0 XProtoError.1: BadRequest (invalid request code or no such operation) XProtoError.2: BadValue (integer parameter out of range for operation) XProtoError.3: BadWindow (invalid Window parameter) XProtoError.4: BadPixmap (invalid Pixmap parameter) XProtoError.5: BadAtom (invalid Atom parameter) XProtoError.6: BadCursor (invalid Cursor parameter) XProtoError.7: BadFont (invalid Font parameter) XProtoError.8: BadMatch (invalid parameter attributes) XProtoError.9: BadDrawable (invalid Pixmap or Window parameter) XProtoError.10: BadAccess (attempt to access private resource denied) XProtoError.11: BadAlloc (insufficient resources for operation) XProtoError.12: BadColor (invalid Colormap parameter) XProtoError.13: BadGC (invalid GC parameter) XProtoError.14: BadIDChoice (invalid resource ID chosen for this connection) XProtoError.15: BadName (named color or font does not exist) XProtoError.16: BadLength (poly request too large or internal Xlib length error) XProtoError.17: BadImplementation (server does not implement operation) ! Multi-Buffering extension, not an X Consortium standard XRequest.Multi-Buffering.0: X_MbufGetBufferVersion XRequest.Multi-Buffering.1: X_MbufCreateImageBuffers XRequest.Multi-Buffering.2: X_MbufDestroyImageBuffers XRequest.Multi-Buffering.3: X_MbufDisplayImageBuffers XRequest.Multi-Buffering.4: X_MbufSetMultiBufferAttributes XRequest.Multi-Buffering.5: X_MbufGetMultiBufferAttributes XRequest.Multi-Buffering.6: X_MbufSetBufferAttributes XRequest.Multi-Buffering.7: X_MbufGetBufferAttributes XRequest.Multi-Buffering.8: X_MbufGetBufferInfo XRequest.Multi-Buffering.9: X_MbufCreateStereoWindow XProtoError.Multi-Buffering.0: BadBuffer (invalid Buffer parameter) XlibMessage.Multi-Buffering.0: Buffer id in failed request: 0x%lx ! SHAPE extension, an X Consortium standard XRequest.SHAPE.0: X_ShapeQueryVersion XRequest.SHAPE.1: X_ShapeRectangles XRequest.SHAPE.2: X_ShapeMask XRequest.SHAPE.3: X_ShapeCombine XRequest.SHAPE.4: X_ShapeOffset XRequest.SHAPE.5: X_ShapeQueryExtents XRequest.SHAPE.6: X_ShapeSelectInput XRequest.SHAPE.7: X_ShapeInputSelected XRequest.SHAPE.8: X_ShapeGetRectangles ! Input extension, an X Consortium standard XRequest.XInputExtension.1:X_GetExtensionVersion XRequest.XInputExtension.2:X_ListInputDevices XRequest.XInputExtension.3:X_OpenDevice XRequest.XInputExtension.4:X_CloseDevice XRequest.XInputExtension.5:X_SetDeviceMode XRequest.XInputExtension.6:X_SelectExtensionEvent XRequest.XInputExtension.7:X_GetSelectedExtensionEvents XRequest.XInputExtension.8:X_ChangeDeviceDontPropagateList XRequest.XInputExtension.9:X_GetDeviceDontPropagateList XRequest.XInputExtension.10:X_GetDeviceMotionEvents XRequest.XInputExtension.11:X_ChangeKeyboardDevice XRequest.XInputExtension.12:X_ChangePointerDevice XRequest.XInputExtension.13:X_GrabDevice XRequest.XInputExtension.14:X_UngrabDevice XRequest.XInputExtension.15:X_GrabDeviceKey XRequest.XInputExtension.16:X_UngrabDeviceKey XRequest.XInputExtension.17:X_GrabDeviceButton XRequest.XInputExtension.18:X_UngrabDeviceButton XRequest.XInputExtension.19:X_AllowDeviceEvents XRequest.XInputExtension.20:X_GetDeviceFocus XRequest.XInputExtension.21:X_SetDeviceFocus XRequest.XInputExtension.22:X_GetFeedbackControl XRequest.XInputExtension.23:X_ChangeFeedbackControl XRequest.XInputExtension.24:X_GetDeviceKeyMapping XRequest.XInputExtension.25:X_ChangeDeviceKeyMapping XRequest.XInputExtension.26:X_GetDeviceModifierMapping XRequest.XInputExtension.27:X_SetDeviceModifierMapping XRequest.XInputExtension.28:X_GetDeviceButtonMapping XRequest.XInputExtension.29:X_SetDeviceButtonMapping XRequest.XInputExtension.30:X_QueryDeviceState XRequest.XInputExtension.31:X_SendExtensionEvent XRequest.XInputExtension.32:X_DeviceBell XRequest.XInputExtension.33:X_SetDeviceValuators XRequest.XInputExtension.34:X_GetDeviceControl XRequest.XInputExtension.35:X_ChangeDeviceControl XRequest.XInputExtension.36: X_ListDeviceProperties XRequest.XInputExtension.37: X_ChangeDeviceProperty XRequest.XInputExtension.38: X_DeleteDeviceProperty XRequest.XInputExtension.39: X_GetDeviceProperty XProtoError.XInputExtension.0: XI_BadDevice (invalid Device parameter) XlibMessage.XInputExtension.0: Device id in failed request: 0x%lx XProtoError.XInputExtension.1: XI_BadEvent (invalid Event parameter) XlibMessage.XInputExtension.1: Event id in failed request: 0x%lx XProtoError.XInputExtension.2: XI_BadMode (invalid Mode parameter) XlibMessage.XInputExtension.2: Mode id in failed request: 0x%lx XProtoError.XInputExtension.3: XI_DeviceBusy XlibMessage.XInputExtension.3: Device id in failed request: 0x%lx XProtoError.XInputExtension.4: XI_BadClass (invalid Class parameter) XlibMessage.XInputExtension.4: Class id in failed request: 0x%lx ! MIT-SHM extension, experimental, not an X Consortium standard XRequest.MIT-SHM.0: X_ShmQueryVersion XRequest.MIT-SHM.1: X_ShmAttach XRequest.MIT-SHM.2: X_ShmDetach XRequest.MIT-SHM.3: X_ShmPutImage XRequest.MIT-SHM.4: X_ShmGetImage XRequest.MIT-SHM.5: X_ShmCreatePixmap XProtoError.MIT-SHM.0: BadShmSeg (invalid shared segment parameter) XlibMessage.MIT-SHM.0: Segment id in failed request: 0x%lx ! MIT-SUNDRY-NONSTANDARD extension, definitely not an X Consortium standard XRequest.MIT-SUNDRY-NONSTANDARD.0: X_MITSetBugMode XRequest.MIT-SUNDRY-NONSTANDARD.1: X_MITGetBugMode ! X3D-PEX extension XRequest.X3D-PEX.1: PEX_GetExtensionInfo XRequest.X3D-PEX.2: PEX_GetEnumeratedTypeInfo XRequest.X3D-PEX.3: PEX_GetImpDepConstants XRequest.X3D-PEX.4: PEX_CreateLookupTable XRequest.X3D-PEX.5: PEX_CopyLookupTable XRequest.X3D-PEX.6: PEX_FreeLookupTable XRequest.X3D-PEX.7: PEX_GetTableInfo XRequest.X3D-PEX.8: PEX_GetPredefinedEntries XRequest.X3D-PEX.9: PEX_GetDefinedIndices XRequest.X3D-PEX.10: PEX_GetTableEntry XRequest.X3D-PEX.11: PEX_GetTableEntries XRequest.X3D-PEX.12: PEX_SetTableEntries XRequest.X3D-PEX.13: PEX_DeleteTableEntries XRequest.X3D-PEX.14: PEX_CreatePipelineContext XRequest.X3D-PEX.15: PEX_CopyPipelineContext XRequest.X3D-PEX.16: PEX_FreePipelineContext XRequest.X3D-PEX.17: PEX_GetPipelineContext XRequest.X3D-PEX.18: PEX_ChangePipelineContext XRequest.X3D-PEX.19: PEX_CreateRenderer XRequest.X3D-PEX.20: PEX_FreeRenderer XRequest.X3D-PEX.21: PEX_ChangeRenderer XRequest.X3D-PEX.22: PEX_GetRendererAttributes XRequest.X3D-PEX.23: PEX_GetRendererDynamics XRequest.X3D-PEX.24: PEX_BeginRendering XRequest.X3D-PEX.25: PEX_EndRendering XRequest.X3D-PEX.26: PEX_BeginStructure XRequest.X3D-PEX.27: PEX_EndStructure XRequest.X3D-PEX.28: PEX_RenderOutputCommands XRequest.X3D-PEX.29: PEX_RenderNetwork XRequest.X3D-PEX.30: PEX_CreateStructure XRequest.X3D-PEX.31: PEX_CopyStructure XRequest.X3D-PEX.32: PEX_DestroyStructures XRequest.X3D-PEX.33: PEX_GetStructureInfo XRequest.X3D-PEX.34: PEX_GetElementInfo XRequest.X3D-PEX.35: PEX_GetStructuresInNetwork XRequest.X3D-PEX.36: PEX_GetAncestors XRequest.X3D-PEX.37: PEX_GetDescendants XRequest.X3D-PEX.38: PEX_FetchElements XRequest.X3D-PEX.39: PEX_SetEditingMode XRequest.X3D-PEX.40: PEX_SetElementPointer XRequest.X3D-PEX.41: PEX_SetElementPointerAtLabel XRequest.X3D-PEX.42: PEX_ElementSearch XRequest.X3D-PEX.43: PEX_StoreElements XRequest.X3D-PEX.44: PEX_DeleteElements XRequest.X3D-PEX.45: PEX_DeleteElementsToLabel XRequest.X3D-PEX.46: PEX_DeleteBetweenLabels XRequest.X3D-PEX.47: PEX_CopyElements XRequest.X3D-PEX.48: PEX_ChangeStructureRefs XRequest.X3D-PEX.49: PEX_CreateNameSet XRequest.X3D-PEX.50: PEX_CopyNameSet XRequest.X3D-PEX.51: PEX_FreeNameSet XRequest.X3D-PEX.52: PEX_GetNameSet XRequest.X3D-PEX.53: PEX_ChangeNameSet XRequest.X3D-PEX.54: PEX_CreateSearchContext XRequest.X3D-PEX.55: PEX_CopySearchContext XRequest.X3D-PEX.56: PEX_FreeSearchContext XRequest.X3D-PEX.57: PEX_GetSearchContext XRequest.X3D-PEX.58: PEX_ChangeSearchContext XRequest.X3D-PEX.59: PEX_SearchNetwork XRequest.X3D-PEX.60: PEX_CreatePhigsWks XRequest.X3D-PEX.61: PEX_FreePhigsWks XRequest.X3D-PEX.62: PEX_GetWksInfo XRequest.X3D-PEX.63: PEX_GetDynamics XRequest.X3D-PEX.64: PEX_GetViewRep XRequest.X3D-PEX.65: PEX_RedrawAllStructures XRequest.X3D-PEX.66: PEX_UpdateWorkstation XRequest.X3D-PEX.67: PEX_RedrawClipRegion XRequest.X3D-PEX.68: PEX_ExecuteDeferredActions XRequest.X3D-PEX.69: PEX_SetViewPriority XRequest.X3D-PEX.70: PEX_SetDisplayUpdateMode XRequest.X3D-PEX.71: PEX_MapDCtoWC XRequest.X3D-PEX.72: PEX_MapWCtoDC XRequest.X3D-PEX.73: PEX_SetViewRep XRequest.X3D-PEX.74: PEX_SetWksWindow XRequest.X3D-PEX.75: PEX_SetWksViewport XRequest.X3D-PEX.76: PEX_SetHlhsrMode XRequest.X3D-PEX.77: PEX_SetWksBufferMode XRequest.X3D-PEX.78: PEX_PostStructure XRequest.X3D-PEX.79: PEX_UnpostStructure XRequest.X3D-PEX.80: PEX_UnpostAllStructures XRequest.X3D-PEX.81: PEX_GetWksPostings XRequest.X3D-PEX.82: PEX_GetPickDevice XRequest.X3D-PEX.83: PEX_ChangePickDevice XRequest.X3D-PEX.84: PEX_CreatePickMeasure XRequest.X3D-PEX.85: PEX_FreePickMeasure XRequest.X3D-PEX.86: PEX_GetPickMeasure XRequest.X3D-PEX.87: PEX_UpdatePickMeasure XRequest.X3D-PEX.88: PEX_OpenFont XRequest.X3D-PEX.89: PEX_CloseFont XRequest.X3D-PEX.90: PEX_QueryFont XRequest.X3D-PEX.91: PEX_ListFonts XRequest.X3D-PEX.92: PEX_ListFontsWithInfo XRequest.X3D-PEX.93: PEX_QueryTextExtents XRequest.X3D-PEX.94: PEX_MatchRenderingTargets XRequest.X3D-PEX.95: PEX_Escape XRequest.X3D-PEX.96: PEX_EscapeWithReply XRequest.X3D-PEX.97: PEX_RenderElements XRequest.X3D-PEX.98: PEX_AccumulateState XRequest.X3D-PEX.99: PEX_BeginPickOne XRequest.X3D-PEX.100: PEX_EndPickOne XRequest.X3D-PEX.101: PEX_PickOne XRequest.X3D-PEX.102: PEX_BeginPickAll XRequest.X3D-PEX.103: PEX_EndPickAll XRequest.X3D-PEX.104: PEX_PickAll XProtoError.X3D-PEX.0: PEXColorTypeError XlibMessage.X3D-PEX.0: Color type in failed request: 0x%lx XProtoError.X3D-PEX.1: PEXRendererStateError XlibMessage.X3D-PEX.1: Renderer id in failed request: 0x%lx XProtoError.X3D-PEX.2: PEXFloatingPointFormatError XlibMessage.X3D-PEX.2: Format in failed request: 0x%lx XProtoError.X3D-PEX.3: PEXLabelError XlibMessage.X3D-PEX.3: Label in failed request: 0x%lx XProtoError.X3D-PEX.4: PEXLookupTableError XlibMessage.X3D-PEX.4: Table id in failed request: 0x%lx XProtoError.X3D-PEX.5: PEXNameSetError XlibMessage.X3D-PEX.5: Nameset in failed request: 0x%lx XProtoError.X3D-PEX.6: PEXPathError XlibMessage.X3D-PEX.6: Path id in failed request: 0x%lx XProtoError.X3D-PEX.7: PEXFontError XlibMessage.X3D-PEX.7: Font id in failed request: 0x%lx XProtoError.X3D-PEX.8: PEXPhigsWksError XlibMessage.X3D-PEX.8: Workstation id in failed request: 0x%lx XProtoError.X3D-PEX.9: PEXPickMeasureError XlibMessage.X3D-PEX.9: Device id in failed request: 0x%lx XProtoError.X3D-PEX.10: PEXPipelineContextError XlibMessage.X3D-PEX.10: Context id in failed request: 0x%lx XProtoError.X3D-PEX.11: PEXRendererError XlibMessage.X3D-PEX.11: Renderer id in failed request: 0x%lx XProtoError.X3D-PEX.12: PEXSearchContextError XlibMessage.X3D-PEX.12: Context id in failed request: 0x%lx XProtoError.X3D-PEX.13: PEXStructureError XlibMessage.X3D-PEX.13: Structure id in failed request: 0x%lx XProtoError.X3D-PEX.14: PEXOutputCommandError XlibMessage.X3D-PEX.14: Resource id in failed request: 0x%lx ! XTEST extension, an X Consortium standard XRequest.XTEST.0: X_XTestGetVersion XRequest.XTEST.1: X_XTestCompareCursor XRequest.XTEST.2: X_XTestFakeInput XRequest.XTEST.3: X_XTestGrabControl ! BIG-REQUESTS extension, an X Consortium standard XRequest.BIG-REQUESTS.0: X_BigReqEnable ! XIE extension, an X Consortium standard XRequest.XIE.1: XIE_QueryImageExtension XRequest.XIE.2: XIE_QueryTechniques XRequest.XIE.3: XIE_CreateColorList XRequest.XIE.4: XIE_DestroyColorList XRequest.XIE.5: XIE_PurgeColorList XRequest.XIE.6: XIE_QueryColorList XRequest.XIE.7: XIE_CreateLUT XRequest.XIE.8: XIE_DestroyLUT XRequest.XIE.9: XIE_CreatePhotomap XRequest.XIE.10: XIE_DestroyPhotomap XRequest.XIE.11: XIE_QueryPhotomap XRequest.XIE.12: XIE_CreateROI XRequest.XIE.13: XIE_DestroyROI XRequest.XIE.14: XIE_CreatePhotospace XRequest.XIE.15: XIE_DestroyPhotospace XRequest.XIE.16: XIE_ExecuteImmediate XRequest.XIE.17: XIE_CreatePhotoflo XRequest.XIE.18: XIE_DestroyPhotoflo XRequest.XIE.19: XIE_ExecutePhotoflo XRequest.XIE.20: XIE_ModifyPhotoflo XRequest.XIE.21: XIE_RedefinePhotoflo XRequest.XIE.22: XIE_PutClientData XRequest.XIE.23: XIE_GetClientData XRequest.XIE.24: XIE_QueryPhotoflo XRequest.XIE.25: XIE_Await XRequest.XIE.26: XIE_Abort XProtoError.XIE.0: XIE_ColorListError XlibMessage.XIE.0: ColorList in failed request: 0x%lx XProtoError.XIE.1: XIE_LUTError XlibMessage.XIE.1: LUT in failed request: 0x%lx XProtoError.XIE.2: XIE_PhotofloError XlibMessage.XIE.2: Photoflo in failed request: 0x%lx XProtoError.XIE.3: XIE_PhotomapError XlibMessage.XIE.3: Photomap in failed request: 0x%lx XProtoError.XIE.4: XIE_PhotospaceError XlibMessage.XIE.4: Photospace in failed request: 0x%lx XProtoError.XIE.5: XIE_ROIError XlibMessage.XIE.5: ROI in failed request: 0x%lx XProtoError.XIE.6: XIE_FloError XlibMessage.XIE.6: Photoflo in failed request: 0x%lx ! SYNC extension, an X Consortium standard XRequest.SYNC.0: X_SyncInitialize XRequest.SYNC.1: X_SyncListSystemCounters XRequest.SYNC.2: X_SyncCreateCounter XRequest.SYNC.3: X_SyncSetCounter XRequest.SYNC.4: X_SyncChangeCounter XRequest.SYNC.5: X_SyncQueryCounter XRequest.SYNC.6: X_SyncDestroyCounter XRequest.SYNC.7: X_SyncAwait XRequest.SYNC.8: X_SyncCreateAlarm XRequest.SYNC.9: X_SyncChangeAlarm XRequest.SYNC.10: X_SyncQueryAlarm XRequest.SYNC.11: X_SyncDestroyAlarm XRequest.SYNC.12: X_SyncSetPriority XRequest.SYNC.13: X_SyncGetPriority XProtoError.SYNC.0: XSyncBadCounter XlibMessage.SYNC.0: Counter in failed request: 0x%lx XProtoError.SYNC.1: XSyncBadAlarm XlibMessage.SYNC.1: Alarm in failed request: 0x%lx ! XKB extension XRequest.XKEYBOARD.0: XkbUseExtension XRequest.XKEYBOARD.1: XkbSelectEvents XRequest.XKEYBOARD.2: OBSOLETE XRequest.XKEYBOARD.3: XkbBell XRequest.XKEYBOARD.4: XkbGetState XRequest.XKEYBOARD.5: XkbLatchLockState XRequest.XKEYBOARD.6: XkbGetControls XRequest.XKEYBOARD.7: XkbSetControls XRequest.XKEYBOARD.8: XkbGetMap XRequest.XKEYBOARD.9: XkbSetMap XRequest.XKEYBOARD.10: XkbGetCompatMap XRequest.XKEYBOARD.11: XkbSetCompatMap XRequest.XKEYBOARD.12: XkbGetIndicatorState XRequest.XKEYBOARD.13: XkbGetIndicatorMap XRequest.XKEYBOARD.14: XkbSetIndicatorMap XRequest.XKEYBOARD.15: XkbGetNamedIndicator XRequest.XKEYBOARD.16: XkbSetNamedIndicator XRequest.XKEYBOARD.17: XkbGetNames XRequest.XKEYBOARD.18: XkbSetNames XRequest.XKEYBOARD.19: XkbGetGeometry XRequest.XKEYBOARD.20: XkbSetGeometry XRequest.XKEYBOARD.21: XkbPerClientFlags XRequest.XKEYBOARD.22: XkbListComponents XRequest.XKEYBOARD.23: XkbGetKbdByName XRequest.XKEYBOARD.24: XkbGetDeviceInfo XRequest.XKEYBOARD.25: XkbSetDeviceInfo XRequest.XKEYBOARD.101: XkbSetDebuggingFlags XProtoError.XKEYBOARD.0: XkbBadKeyboard XlibMessage.XKEYBOARD.0: Device id in failed request: 0x%lx ! GLX extension for OpenGL, an OpenGL Architectural Review Board standard ! GLX Commands XRequest.GLX.7: X_GLXQueryVersion XRequest.GLX.3: X_GLXCreateContext XRequest.GLX.4: X_GLXDestroyContext XRequest.GLX.5: X_GLXMakeCurrent XRequest.GLX.6: X_GLXIsDirect XRequest.GLX.10: X_GLXCopyContext XRequest.GLX.8: X_GLXWaitGL XRequest.GLX.9: X_GLXWaitX XRequest.GLX.11: X_GLXSwapBuffers XRequest.GLX.12: X_GLXUseXFont XRequest.GLX.13: X_GLXCreateGLXPixmap XRequest.GLX.15: X_GLXDestroyGLXPixmap XRequest.GLX.14: X_GLXGetVisualConfigs XRequest.GLX.16: X_GLXVendorPrivate XRequest.GLX.17: X_GLXVendorPrivateWithReply XRequest.GLX.18: X_GLXQueryExtensionsString XRequest.GLX.19: X_GLXQueryServerString XRequest.GLX.20: X_GLXClientInfo XRequest.GLX.21: X_GLXGetFBConfigs XRequest.GLX.22: X_GLXCreatePixmap XRequest.GLX.23: X_GLXDestroyPixmap XRequest.GLX.24: X_GLXCreateNewContext XRequest.GLX.25: X_GLXQueryContext XRequest.GLX.26: X_GLXMakeContextCurrent XRequest.GLX.27: X_GLXCreatePbuffer XRequest.GLX.28: X_GLXDestroyPbuffer XRequest.GLX.29: X_GLXGetDrawableAttributes XRequest.GLX.30: X_GLXChangeDrawableAttributes XRequest.GLX.31: X_GLXCreateWindow XRequest.GLX.32: X_GLXDestroyWindow ! GL Non-rendering Commands XRequest.GLX.103: X_GLXDeleteLists XRequest.GLX.102: X_GLXEndList XRequest.GLX.105: X_GLXFeedbackBuffer XRequest.GLX.108: X_GLXFinish XRequest.GLX.142: X_GLXFlush XRequest.GLX.104: X_GLXGenLists XRequest.GLX.112: X_GLXGetBooleanv XRequest.GLX.113: X_GLXGetClipPlane XRequest.GLX.114: X_GLXGetDoublev XRequest.GLX.115: X_GLXGetError XRequest.GLX.116: X_GLXGetFloatv XRequest.GLX.117: X_GLXGetIntegerv XRequest.GLX.118: X_GLXGetLightfv XRequest.GLX.119: X_GLXGetLightiv XRequest.GLX.120: X_GLXGetMapdv XRequest.GLX.121: X_GLXGetMapfv XRequest.GLX.122: X_GLXGetMapiv XRequest.GLX.123: X_GLXGetMaterialfv XRequest.GLX.124: X_GLXGetMaterialiv XRequest.GLX.125: X_GLXGetPixelfv XRequest.GLX.126: X_GLXGetPixelMapuiv XRequest.GLX.127: X_GLXGetPixelMapusv XRequest.GLX.129: X_GLXGetString XRequest.GLX.130: X_GLXGetTexEnvfv XRequest.GLX.131: X_GLXGetTexEnviv XRequest.GLX.132: X_GLXGetTexGendv XRequest.GLX.133: X_GLXGetTexGenfv XRequest.GLX.134: X_GLXGetTexGeniv XRequest.GLX.138: X_GLXGetTexLevelParameterfv XRequest.GLX.139: X_GLXGetTexLevelParameteriv XRequest.GLX.136: X_GLXGetTexParameterfv XRequest.GLX.137: X_GLXGetTexParameteriv XRequest.GLX.140: X_GLXIsEnabled XRequest.GLX.141: X_GLXIsList XRequest.GLX.101: X_GLXNewList XRequest.GLX.109: X_GLXPixelStoref XRequest.GLX.110: X_GLXPixelStorei XRequest.GLX.107: X_GLXRenderMode XRequest.GLX.106: X_GLXSelectBuffer ! GL Non-rendering Commands That Return Pixel Data XRequest.GLX.128: X_GLXGetPolygonStipple XRequest.GLX.135: X_GLXGetTexImage XRequest.GLX.111: X_GLXReadPixels ! GL Rendering Commands XRequest.GLX.1: X_GLXRender XRequest.GLX.2: X_GLXRenderLarge ! GLX Errors XProtoError.GLX.0: GLXBadContext XProtoError.GLX.1: GLXBadContextState XProtoError.GLX.2: GLXBadDrawable XProtoError.GLX.3: GLXBadPixmap XProtoError.GLX.4: GLXBadContextTag XProtoError.GLX.5: GLXBadCurrentWindow XProtoError.GLX.6: GLXBadRenderRequest XProtoError.GLX.7: GLXBadLargeRequest XProtoError.GLX.8: GLXUnsupportedPrivateRequest XProtoError.GLX.9: GLXBadFBConfig XProtoError.GLX.10: GLXBadPbuffer XProtoError.GLX.11: GLXBadCurrentDrawable XProtoError.GLX.12: GLXBadWindow XProtoError.GLX.13: GLXBadProfileARB ! XC-MISC extension, an X Consortium standard XRequest.XC-MISC.0: XCMiscGetVersion XRequest.XC-MISC.1: XCMiscGetXIDRange ! RECORD extension XRequest.RECORD.0: XRecordQueryVersion XRequest.RECORD.1: XRecordCreateContext XRequest.RECORD.2: XRecordRegisterClients XRequest.RECORD.3: XRecordUnregisterClients XRequest.RECORD.4: XRecordGetContext XRequest.RECORD.5: XRecordEnableContext XRequest.RECORD.6: XRecordDisableContext XRequest.RECORD.7: XRecordFreeContext XProtoError.RECORD.0: XRecordBadContext XlibMessage.RECORD.0: Context in failed request: 0x%lx ! XFree86-VidModeExtension -- not an X Consortium standard XRequest.XFree86-VidModeExtension.0: XF86VidModeQueryVersion XRequest.XFree86-VidModeExtension.1: XF86VidModeGetModeLine XRequest.XFree86-VidModeExtension.2: XF86VidModeModModeLine XRequest.XFree86-VidModeExtension.3: XF86VidModeSwitchMode XRequest.XFree86-VidModeExtension.4: XF86VidModeGetMonitor XRequest.XFree86-VidModeExtension.5: XF86VidModeLockModeSwitch XRequest.XFree86-VidModeExtension.6: XF86VidModeGetAllModeLines XRequest.XFree86-VidModeExtension.7: XF86VidModeAddModeLine XRequest.XFree86-VidModeExtension.8: XF86VidModeDeleteModeLine XRequest.XFree86-VidModeExtension.9: XF86VidModeValidateModeLine XRequest.XFree86-VidModeExtension.10: XF86VidModeSwitchToMode XRequest.XFree86-VidModeExtension.11: XF86VidModeGetViewPort XRequest.XFree86-VidModeExtension.12: XF86VidModeSetViewPort XRequest.XFree86-VidModeExtension.13: XF86VidModeGetDotClocks XRequest.XFree86-VidModeExtension.14: XF86VidModeSetClientVersion XRequest.XFree86-VidModeExtension.15: XF86VidModeSetGamma XRequest.XFree86-VidModeExtension.16: XF86VidModeGetGamma XRequest.XFree86-VidModeExtension.17: XF86VidModeGetGammaRamp XRequest.XFree86-VidModeExtension.18: XF86VidModeSetGammaRamp XRequest.XFree86-VidModeExtension.19: XF86VidModeGetGammaRampSize XRequest.XFree86-VidModeExtension.20: XF86VidModeGetPermissions XProtoError.XFree86-VidModeExtension.0: XF86VidModeBadClock XProtoError.XFree86-VidModeExtension.1: XF86VidModeBadHTimings XProtoError.XFree86-VidModeExtension.2: XF86VidModeBadVTimings XProtoError.XFree86-VidModeExtension.3: XF86VidModeModeUnsuitable XProtoError.XFree86-VidModeExtension.4: XF86VidModeExtensionDisabled XProtoError.XFree86-VidModeExtension.5: XF86VidModeClientNotLocal XProtoError.XFree86-VidModeExtension.6: XF86VidModeZoomLocked ! XFree86-Misc -- not an X Consortium standard XRequest.XFree86-Misc.0: XF86MiscQueryVersion XRequest.XFree86-Misc.1: XF86MiscGetSaver XRequest.XFree86-Misc.2: XF86MiscSetSaver XRequest.XFree86-Misc.3: XF86MiscGetMouseSettings XRequest.XFree86-Misc.4: XF86MiscGetKbdSettings XRequest.XFree86-Misc.5: XF86MiscSetMouseSettings XRequest.XFree86-Misc.6: XF86MiscSetKbdSettings XRequest.XFree86-Misc.7: XF86MiscSetGrabKeysState XRequest.XFree86-Misc.8: XF86MiscSetClientVersion XRequest.XFree86-Misc.9: XF86MiscGetFilePaths XProtoError.XFree86-Misc.0: XF86MiscBadMouseProtocol XProtoError.XFree86-Misc.1: XF86MiscBadMouseBaudRate XProtoError.XFree86-Misc.2: XF86MiscBadMouseFlags XProtoError.XFree86-Misc.3: XF86MiscBadMouseCombo XProtoError.XFree86-Misc.4: XF86MiscBadKbdType XProtoError.XFree86-Misc.5: XF86MiscModInDevDisabled XProtoError.XFree86-Misc.6: XF86MiscModInDevClientNotLocal XProtoError.XFree86-Misc.7: XF86MiscNoModule ! XFree86-DGA -- not an X Consortium standard XRequest.XFree86-DGA.0: XF86DGAQueryVersion XRequest.XFree86-DGA.1: XF86DGAGetVideoLL XRequest.XFree86-DGA.2: XF86DGADirectVideo XRequest.XFree86-DGA.3: XF86DGAGetViewPortSize XRequest.XFree86-DGA.4: XF86DGASetViewPort XRequest.XFree86-DGA.5: XF86DGAGetVidPage XRequest.XFree86-DGA.6: XF86DGASetVidPage XRequest.XFree86-DGA.7: XF86DGAInstallColormap XRequest.XFree86-DGA.8: XF86DGAQueryDirectVideo XRequest.XFree86-DGA.9: XF86DGAViewPortChanged XRequest.XFree86-DGA.10: XF86DGAObsolete1 XRequest.XFree86-DGA.11: XF86DGAObsolete2 XRequest.XFree86-DGA.12: XDGAQueryModes XRequest.XFree86-DGA.13: XDGASetMode XRequest.XFree86-DGA.14: XDGASetViewport XRequest.XFree86-DGA.15: XDGAInstallColormap XRequest.XFree86-DGA.16: XDGASelectInput XRequest.XFree86-DGA.17: XDGAFillRectangle XRequest.XFree86-DGA.18: XDGACopyArea XRequest.XFree86-DGA.19: XDGACopyTransparentArea XRequest.XFree86-DGA.20: XDGAGetViewportStatus XRequest.XFree86-DGA.21: XDGASync XRequest.XFree86-DGA.22: XDGAOpenFramebuffer XRequest.XFree86-DGA.23: XDGACloseFramebuffer XRequest.XFree86-DGA.24: XDGASetClientVersion XRequest.XFree86-DGA.25: XDGAChangePixmapMode XRequest.XFree86-DGA.26: XDGACreateColormap XProtoError.XFree86-DGA.0: XF86DGAClientNotLocal XProtoError.XFree86-DGA.1: XF86DGANoDirectVideoMode XProtoError.XFree86-DGA.2: XF86DGAScreenNotActive XProtoError.XFree86-DGA.3: XF86DGADirectNotActivated XProtoError.XFree86-DGA.4: XF86DGAOperationNotSupported ! DOUBLE-BUFFER (DBE), an X Consortium standard XRequest.DOUBLE-BUFFER.0: DBEGetVersion XRequest.DOUBLE-BUFFER.1: DBEAllocateBackBufferName XRequest.DOUBLE-BUFFER.2: DBEDeallocateBackBufferName XRequest.DOUBLE-BUFFER.3: DBESwapBuffers XRequest.DOUBLE-BUFFER.4: DBEBeginIdiom XRequest.DOUBLE-BUFFER.5: DBEEndIdiom XRequest.DOUBLE-BUFFER.6: DBEGetVisualInfo XRequest.DOUBLE-BUFFER.7: DBEGetBackBufferAttributes XProtoError.DOUBLE-BUFFER.0: DBEBadBuffer (invalid BackBuffer parameter) XlibMessage.DOUBLE-BUFFER.0: BackBuffer in failed request: 0x%lx ! SECURITY XRequest.SECURITY.0: SecurityQueryVersion XRequest.SECURITY.1: SecurityGenerateAuthorization XProtoError.SECURITY.0: SecurityBadAuthorization (invalid authorization id) XProtoError.SECURITY.1: SecurityBadAuthorizationProtocol (invalid authorization name or data) XlibMessage.SECURITY.1: authorization id in failed request: 0x%lx ! AppGroup XRequest.APPGROUP.0: XagQueryVersion XRequest.APPGROUP.1: XagCreate XRequest.APPGROUP.2: XagDestroy XRequest.APPGROUP.3: XagGetAttr XRequest.APPGROUP.4: XagQuery XRequest.APPGROUP.5: XagCreateAssoc XRequest.APPGROUP.6: XagDestroyAssoc XProtoError.APPGROUP.0: XagBadAppGroup (invalid AppGroup parameter) ! LBX XRequest.LBX.0: LbxQueryVersion XRequest.LBX.1: LbxStartProxy XRequest.LBX.2: LbxStopProxy XRequest.LBX.3: LbxSwitch XRequest.LBX.4: LbxNewClient XRequest.LBX.5: LbxCloseClient XRequest.LBX.6: LbxModifySequence XRequest.LBX.7: LbxAllowMotion XRequest.LBX.8: LbxIncrementPixel XRequest.LBX.9: LbxDelta XRequest.LBX.10: LbxGetModifierMapping XRequest.LBX.11: LbxQueryTag XRequest.LBX.12: LbxInvalidateTag XRequest.LBX.13: LbxPolyPoint XRequest.LBX.14: LbxPolyLine XRequest.LBX.15: LbxPolySegment XRequest.LBX.16: LbxPolyRectangle XRequest.LBX.17: LbxPolyArc XRequest.LBX.18: LbxFillPoly XRequest.LBX.19: LbxPolyFillRectangle XRequest.LBX.20: LbxPolyFillArc XRequest.LBX.21: LbxGetKeyboardMapping XRequest.LBX.22: LbxQueryFont XRequest.LBX.23: LbxChangeProperty XRequest.LBX.24: LbxGetProperty XRequest.LBX.25: LbxTagData XRequest.LBX.26: LbxCopyArea XRequest.LBX.27: LbxCopyPlane XRequest.LBX.28: LbxPolyText8 XRequest.LBX.29: LbxPolyText16 XRequest.LBX.30: LbxImageText8 XRequest.LBX.31: LbxImageText16 XRequest.LBX.32: LbxQueryExtension XRequest.LBX.33: LbxPutImage XRequest.LBX.34: LbxGetImage XRequest.LBX.35: LbxBeginLargeRequest XRequest.LBX.36: LbxLargeRequestData XRequest.LBX.37: LbxEndLargeRequest XRequest.LBX.38: LbxInternAtoms XRequest.LBX.39: LbxGetWinAttrAndGeom XRequest.LBX.40: LbxGrabCmap XRequest.LBX.41: LbxReleaseCmap XRequest.LBX.42: LbxAllocColor XRequest.LBX.43: LbxSync XProtoError.LBX.0: BadLbxClient ! XpExtension XRequest.XpExtension.0: PrintQueryVersion XRequest.XpExtension.1: PrintGetPrinterList XRequest.XpExtension.2: PrintCreateContext XRequest.XpExtension.3: PrintSetContext XRequest.XpExtension.4: PrintGetContext XRequest.XpExtension.5: PrintDestroyContext XRequest.XpExtension.6: PrintGetContextScreen XRequest.XpExtension.7: PrintStartJob XRequest.XpExtension.8: PrintEndJob XRequest.XpExtension.9: PrintStartDoc XRequest.XpExtension.10: PrintEndDoc XRequest.XpExtension.11: PrintPutDocumentData XRequest.XpExtension.12: PrintGetDocumentData XRequest.XpExtension.13: PrintStartPage XRequest.XpExtension.14: PrintEndPage XRequest.XpExtension.15: PrintSelectInput XRequest.XpExtension.16: PrintInputSelected XRequest.XpExtension.17: PrintGetAttributes XRequest.XpExtension.18: PrintSetAttributes XRequest.XpExtension.19: PrintGetOneAttribute XRequest.XpExtension.20: PrintRehashPrinterList XRequest.XpExtension.21: PrintGetPageDimensions XRequest.XpExtension.22: PrintQueryScreens XRequest.XpExtension.23: PrintSetImageResolution XRequest.XpExtension.24: PrintGetImageResolution XProtoError.XpExtension.0: XPBadContext (Print Context invalid or missing) XlibMessage.XpExtension.0: Context in failed request: 0x%lx XProtoError.XpExtension.1: XPBadSequence (Illegal sequence of XP operations) XProtoError.XpExtension.2: XPBadResourceID (X resource not valid) ! TOG-CUP, an X Project Team specification XRequest.TOG-CUP.0: CUPQueryVersion XRequest.TOG-CUP.1: CUPGetReservedColormapEntries XRequest.TOG-CUP.2: CUPStoreColors ! Extended-Visual-Information, an X Project Team specification XRequest.Extended-Visual-Information.0: EVIQueryVersion XRequest.Extended-Visual-Information.1: EVIGetVisualInfo ! DPMS (Display Power Management Signaling), an X Project Team specification XRequest.DPMS.0: DPMSGetVersion XRequest.DPMS.1: DPMSCapable XRequest.DPMS.2: DPMSGetTimeouts XRequest.DPMS.3: DPMSSetTimeouts XRequest.DPMS.4: DPMSEnable XRequest.DPMS.5: DPMSDisable XRequest.DPMS.6: DPMSForceLevel XRequest.DPMS.7: DPMSInfo ! XINERAMA, not an X Project Team specification XRequest.XINERAMA.0: XINERAMAQueryVersion XRequest.XINERAMA.1: XINERAMAGetState XRequest.XINERAMA.2: XINERAMAGetScreenCount XRequest.XINERAMA.3: XINERAMAGetScreenSize XRequest.XINERAMA.4: XINERAMAIsActive XRequest.XINERAMA.5: XINERAMAQueryScreens ! XF86Rush extension, not a standard spec Xrequest.XFree86-Rush.0: XF86RushQueryVersion Xrequest.XFree86-Rush.1: XF86RushLockPixmap Xrequest.XFree86-Rush.2: XF86RushUnlockPixmap Xrequest.XFree86-Rush.3: XF86RushUnlockAllPixmaps Xrequest.XFree86-Rush.4: XF86RushGetCopyMode Xrequest.XFree86-Rush.5: XF86RushSetCopyMode Xrequest.XFree86-Rush.6: XF86RushGetPixelStride Xrequest.XFree86-Rush.7: XF86RushSetPixelStride Xrequest.XFree86-Rush.8: XF86RushOverlayPixmap Xrequest.XFree86-Rush.9: XF86RushStatusRegOffset Xrequest.XFree86-Rush.10: XF86RushAT3DEnableRegs Xrequest.XFree86-Rush.11: XF86RushAT3DDisableRegs ! XVideo Xrequest.XVideo.0: XvQueryExtension Xrequest.XVideo.1: XvQueryAdaptors Xrequest.XVideo.2: XvQueryEncodings Xrequest.XVideo.3: XvGrabPort Xrequest.XVideo.4: XvUngrabPort Xrequest.XVideo.5: XvPutVideo Xrequest.XVideo.6: XvPutStill Xrequest.XVideo.7: XvGetVideo Xrequest.XVideo.8: XvGetStill Xrequest.XVideo.9: XvStopVideo Xrequest.XVideo.10: XvSelectVideoNotify Xrequest.XVideo.11: XvSelectPortNotify Xrequest.XVideo.12: XvQueryBestSize Xrequest.XVideo.13: XvSetPortAttribute Xrequest.XVideo.14: XvGetPortAttribute Xrequest.XVideo.15: XvQueryPortAttributes Xrequest.XVideo.16: XvListImageFormats Xrequest.XVideo.17: XvQueryImageAttributes Xrequest.XVideo.18: XvPutImage Xrequest.XVideo.19: XvShmPutImage XProtoError.XVideo.0: XvBadPort XProtoError.XVideo.1: XvBadEncoding XProtoError.XVideo.2: XvBadControl ! XFree86-Bigfont Xrequest.XFree86-Bigfont.0: XF86BigfontQueryVersion Xrequest.XFree86-Bigfont.1: XF86BigfontQueryFont ! Adobe-DPS-Extension, not a standard XRequest.Adobe-DPS-Extension.1: PSInit XRequest.Adobe-DPS-Extension.2: PSCreateContext XRequest.Adobe-DPS-Extension.3: PSCreateSpace XRequest.Adobe-DPS-Extension.4: PSGiveInput XRequest.Adobe-DPS-Extension.5: PSGetStatus XRequest.Adobe-DPS-Extension.6: PSDestroySpace XRequest.Adobe-DPS-Extension.7: PSReset XRequest.Adobe-DPS-Extension.8: PSNotifyContext XRequest.Adobe-DPS-Extension.9: PSCreateContextFromID XRequest.Adobe-DPS-Extension.10: PSXIDFromContext XRequest.Adobe-DPS-Extension.11: PSContextFromXID XRequest.Adobe-DPS-Extension.12: PSSetStatusMask XRequest.Adobe-DPS-Extension.13: PSCreateSecureContext XRequest.Adobe-DPS-Extension.14: PSNotifyWhenReady XProtoError.Adobe-DPS-Extension.0: PSErrorBadContext (invalid Context parameter) XlibMessage.Adobe-DPS-Extension.0: Context id in failed request: 0x%lx XProtoError.Adobe-DPS-Extension.1: PSErrorBadSpace (invalid Space parameter) XlibMessage.Adobe-DPS-Extension.1: Space id in failed request: 0x%lx XProtoError.Adobe-DPS-Extension.2: PSErrorAbort (interpreter aborted) XlibMessage.Adobe-DPS-Extension.2: Value in failed request: 0x%lx ! RANDR XRequest.RANDR.0: RRQueryVersion XRequest.RANDR.1: RROldGetScreenInfo XRequest.RANDR.2: RRSetScreenConfig XRequest.RANDR.3: RROldScreenChangeSelectInput XRequest.RANDR.4: RRSelectInput XRequest.RANDR.5: RRGetScreenInfo XRequest.RANDR.6: RRGetScreenSizeRange XRequest.RANDR.7: RRSetScreenSize XRequest.RANDR.8: RRGetScreenResources XRequest.RANDR.9: RRGetOutputInfo XRequest.RANDR.10: RRListOutputProperties XRequest.RANDR.11: RRQueryOutputProperty XRequest.RANDR.12: RRConfigureOutputProperty XRequest.RANDR.13: RRChangeOutputProperty XRequest.RANDR.14: RRDeleteOutputProperty XRequest.RANDR.15: RRGetOutputProperty XRequest.RANDR.16: RRCreateMode XRequest.RANDR.17: RRDestroyMode XRequest.RANDR.18: RRAddOutputMode XRequest.RANDR.19: RRDeleteOutputMode XRequest.RANDR.20: RRGetCrtcInfo XRequest.RANDR.21: RRSetCrtcConfig XRequest.RANDR.22: RRGetCrtcGammaSize XRequest.RANDR.23: RRGetCrtcGamma XRequest.RANDR.24: RRSetCrtcGamma XRequest.RANDR.25: RRGetScreenResourcesCurrent XRequest.RANDR.26: RRSetCrtcTransform XRequest.RANDR.27: RRGetCrtcTransform XRequest.RANDR.28: RRGetPanning XRequest.RANDR.29: RRSetPanning XRequest.RANDR.30: RRSetOutputPrimary XRequest.RANDR.31: RRGetOutputPrimary XRequest.RANDR.32: RRGetProviders XRequest.RANDR.33: RRGetProviderInfo XRequest.RANDR.34: RRSetProviderOffloadSink XRequest.RANDR.35: RRSetProviderOutputSource XRequest.RANDR.36: RRListProviderProperties XRequest.RANDR.37: RRQueryProviderProperty XRequest.RANDR.38: RRConfigureProviderProperty XRequest.RANDR.39: RRChangeProviderProperty XRequest.RANDR.40: RRDeleteProviderProperty XRequest.RANDR.41: RRGetProviderProperty XProtoError.RANDR.0: BadRROutput (invalid Output parameter) XlibMessage.RANDR.0: Output id in failed request: 0x%lx XProtoError.RANDR.1: BadRRCrtc (invalid Crtc parameter) XlibMessage.RANDR.1: Crtc id in failed request: 0x%lx XProtoError.RANDR.2: BadRRMode (invalid Mode parameter) XlibMessage.RANDR.2: Mode id in failed request: 0x%lx XProtoError.RANDR.3: BadRRProvider (invalid Provider parameter) XlibMessage.RANDR.3: Provider id in failed request: 0x%lx ! RENDER XRequest.RENDER.0: RenderQueryVersion XRequest.RENDER.1: RenderQueryPictFormats XRequest.RENDER.2: RenderQueryPictIndexValues XRequest.RENDER.3: RenderQueryDithers XRequest.RENDER.4: RenderCreatePicture XRequest.RENDER.5: RenderChangePicture XRequest.RENDER.6: RenderSetPictureClipRectangles XRequest.RENDER.7: RenderFreePicture XRequest.RENDER.8: RenderComposite XRequest.RENDER.9: RenderScale XRequest.RENDER.10: RenderTrapezoids XRequest.RENDER.11: RenderTriangles XRequest.RENDER.12: RenderTriStrip XRequest.RENDER.13: RenderTriFan XRequest.RENDER.14: RenderColorTrapezoids XRequest.RENDER.15: RenderColorTriangles XRequest.RENDER.16: RenderTransform XRequest.RENDER.17: RenderCreateGlyphSet XRequest.RENDER.18: RenderReferenceGlyphSet XRequest.RENDER.19: RenderFreeGlyphSet XRequest.RENDER.20: RenderAddGlyphs XRequest.RENDER.21: RenderAddGlyphsFromPicture XRequest.RENDER.22: RenderFreeGlyphs XRequest.RENDER.23: RenderCompositeGlyphs8 XRequest.RENDER.24: RenderCompositeGlyphs16 XRequest.RENDER.25: RenderCompositeGlyphs32 XRequest.RENDER.26: RenderFillRectangles XRequest.RENDER.27: RenderCreateCursor XRequest.RENDER.28: RenderSetPictureTransform XRequest.RENDER.29: RenderQueryFilters XRequest.RENDER.30: RenderSetPictureFilter XRequest.RENDER.31: RenderCreateAnimCursor XRequest.RENDER.32: RenderAddTraps XRequest.RENDER.33: RenderCreateSolidFill XRequest.RENDER.34: RenderCreateLinearGradient XRequest.RENDER.35: RenderCreateRadialGradient XRequest.RENDER.36: RenderCreateConicalGradient XProtoError.RENDER.0: RenderBadFormat (invalid PictFormat parameter) XlibMessage.RENDER.0: PictFormat id in failed request: 0x%lx XProtoError.RENDER.1: RenderBadPicture (invalid Picture parameter) XlibMessage.RENDER.1: Picture id in failed request: 0x%lx XProtoError.RENDER.2: RenderBadPictOp (invalid PictOp parameter) XlibMessage.RENDER.2: PictOp in failed request: 0x%lx XProtoError.RENDER.3: RenderBadGlyphSet (invalid GlyphSet parameter) XlibMessage.RENDER.3: GlyphSet id in failed request: 0x%lx XProtoError.RENDER.4: RenderBadGlyph (invalid Glyph parameter) XlibMessage.RENDER.4: Glyph in failed request: 0x%lx ! XFixes XRequest.XFIXES.0: XFixesQueryVersion XRequest.XFIXES.1: XFixesChangeSaveSet XRequest.XFIXES.2: XFixesSelectSelectionInput XRequest.XFIXES.3: XFixesSelectCursorInput XRequest.XFIXES.4: XFixesGetCursorImage XRequest.XFIXES.5: XFixesCreateRegion XRequest.XFIXES.6: XFixesCreateRegionFromBitmap XRequest.XFIXES.7: XFixesCreateRegionFromWindow XRequest.XFIXES.8: XFixesCreateRegionFromGC XRequest.XFIXES.9: XFixesCreateRegionFromPicture XRequest.XFIXES.10: XFixesDestroyRegion XRequest.XFIXES.11: XFixesSetRegion XRequest.XFIXES.12: XFixesCopyRegion XRequest.XFIXES.13: XFixesUnionRegion XRequest.XFIXES.14: XFixesIntersectRegion XRequest.XFIXES.15: XFixesSubtractRegion XRequest.XFIXES.16: XFixesInvertRegion XRequest.XFIXES.17: XFixesTranslateRegion XRequest.XFIXES.18: XFixesRegionExtents XRequest.XFIXES.19: XFixesFetchRegion XRequest.XFIXES.20: XFixesSetGCClipRegion XRequest.XFIXES.21: XFixesSetWindowShapeRegion XRequest.XFIXES.22: XFixesSetPictureClipRegion XRequest.XFIXES.23: XFixesSetCursorName XRequest.XFIXES.24: XFixesGetCursorName XRequest.XFIXES.25: XFixesGetCursorImageAndName XRequest.XFIXES.26: XFixesChangeCursor XRequest.XFIXES.27: XFixesChangeCursorByName XRequest.XFIXES.28: XFixesExpandRegion XRequest.XFIXES.29: XFixesHideCursor XRequest.XFIXES.30: XFixesShowCursor XProtoError.XFIXES.0: BadRegion (invalid Region parameter) XlibMessage.XFIXES.0: Region id in failed request: 0x%lx ! DAMAGE extension XRequest.DAMAGE.0: XDamageQueryVersion XRequest.DAMAGE.1: XDamageCreate XRequest.DAMAGE.2: XDamageDestroy XRequest.DAMAGE.3: XDamageSubtract XRequest.DAMAGE.4: XDamageAdd XProtoError.DAMAGE.0: BadDamage (invalid Damage parameter) XlibMessage.DAMAGE.0: Damage id in failed request: 0x%lx ! DRI2 extension XRequest.DRI2.0: DRI2QueryVersion XRequest.DRI2.1: DRI2Connect XRequest.DRI2.2: DRI2Authenticate XRequest.DRI2.3: DRI2CreateDrawable XRequest.DRI2.4: DRI2DestroyDrawable XRequest.DRI2.5: DRI2GetBuffers XRequest.DRI2.6: DRI2CopyRegion XRequest.DRI2.7: DRI2GetBuffersWithFormat XRequest.DRI2.8: DRI2SwapBuffers XRequest.DRI2.9: DRI2GetMSC XRequest.DRI2.10: DRI2WaitMSC XRequest.DRI2.11: DRI2WaitSBC XRequest.DRI2.12: DRI2SwapInterval r missing) XlibMessage.XpExtension.0: Context in failed request: 0x%lx XProtoError.XpExtension.1: XPBadSequence (Illegal sequence of XP operations) XProtoError.XpExtension.2: XPBadResourceID (X resource not valid) ! TOG-CUP, an X Project Team specification XRequest.TOG-CUP.0: CUPQueryVersion XRequest.TOG-CUP.1: CUPGetReservedColormapEntries XRequest.TOG-CUP.2: CUPStoreColors ! Extended-Visual-Information, an X ProjlibX11-1.6.3/src/GetGCVals.c000064401431060000012000000074111247741723500155730ustar00alancstaff00002660200006 /* Copyright 1989, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" /* * All gc fields except GCClipMask and GCDashList */ #define ValidGCValuesBits (GCFunction | GCPlaneMask | GCForeground | \ GCBackground | GCLineWidth | GCLineStyle | \ GCCapStyle | GCJoinStyle | GCFillStyle | \ GCFillRule | GCTile | GCStipple | \ GCTileStipXOrigin | GCTileStipYOrigin | \ GCFont | GCSubwindowMode | GCGraphicsExposures | \ GCClipXOrigin | GCClipYOrigin | GCDashOffset | \ GCArcMode) /*ARGSUSED*/ Status XGetGCValues ( Display *dpy, GC gc, unsigned long valuemask, XGCValues *values) { if (valuemask == ValidGCValuesBits) { char dashes = values->dashes; Pixmap clip_mask = values->clip_mask; *values = gc->values; values->dashes = dashes; values->clip_mask = clip_mask; return True; } if (valuemask & ~ValidGCValuesBits) return False; if (valuemask & GCFunction) values->function = gc->values.function; if (valuemask & GCPlaneMask) values->plane_mask = gc->values.plane_mask; if (valuemask & GCForeground) values->foreground = gc->values.foreground; if (valuemask & GCBackground) values->background = gc->values.background; if (valuemask & GCLineWidth) values->line_width = gc->values.line_width; if (valuemask & GCLineStyle) values->line_style = gc->values.line_style; if (valuemask & GCCapStyle) values->cap_style = gc->values.cap_style; if (valuemask & GCJoinStyle) values->join_style = gc->values.join_style; if (valuemask & GCFillStyle) values->fill_style = gc->values.fill_style; if (valuemask & GCFillRule) values->fill_rule = gc->values.fill_rule; if (valuemask & GCTile) values->tile = gc->values.tile; if (valuemask & GCStipple) values->stipple = gc->values.stipple; if (valuemask & GCTileStipXOrigin) values->ts_x_origin = gc->values.ts_x_origin; if (valuemask & GCTileStipYOrigin) values->ts_y_origin = gc->values.ts_y_origin; if (valuemask & GCFont) values->font = gc->values.font; if (valuemask & GCSubwindowMode) values->subwindow_mode = gc->values.subwindow_mode; if (valuemask & GCGraphicsExposures) values->graphics_exposures = gc->values.graphics_exposures; if (valuemask & GCClipXOrigin) values->clip_x_origin = gc->values.clip_x_origin; if (valuemask & GCClipYOrigin) values->clip_y_origin = gc->values.clip_y_origin; if (valuemask & GCDashOffset) values->dash_offset = gc->values.dash_offset; if (valuemask & GCArcMode) values->arc_mode = gc->values.arc_mode; return True; } right notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT libX11-1.6.3/src/util/Makefile.am000064401431060000012000000007361247741723500166640ustar00alancstaff00002660200006 noinst_PROGRAMS=makekeys AM_CFLAGS = \ $(X11_CFLAGS) \ $(CWARNFLAGS) AM_CPPFLAGS = \ -I$(top_srcdir)/include CC = @CC_FOR_BUILD@ CPPFLAGS = @CPPFLAGS_FOR_BUILD@ CFLAGS = @CFLAGS_FOR_BUILD@ LDFLAGS = @LDFLAGS_FOR_BUILD@ EXTRA_DIST = mkks.sh if LINT # Check source code with tools like lint & sparse ALL_LINT_FLAGS=$(LINT_FLAGS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) lint: $(LINT) $(ALL_LINT_FLAGS) makekeys.c endif LINT libX11-1.6.3/src/util/makekeys.c000064401431060000012000000177351247741723500166140ustar00alancstaff00002660200006/* Copyright 1990, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ /* Constructs hash tables for XStringToKeysym and XKeysymToString. */ #include #include #include #include #include #include #include "../Xresinternal.h" #define KTNUM 4000 static struct info { char *name; KeySym val; } info[KTNUM]; #define MIN_REHASH 15 #define MATCHES 10 static char tab[KTNUM]; static unsigned short offsets[KTNUM]; static unsigned short indexes[KTNUM]; static KeySym values[KTNUM]; static int ksnum = 0; static int parse_line(const char *buf, char *key, KeySym *val, char *prefix) { int i; char alias[128]; char *tmp, *tmpa; /* See if we can catch a straight XK_foo 0x1234-style definition first; * the trickery around tmp is to account for prefices. */ i = sscanf(buf, "#define %127s 0x%lx", key, val); if (i == 2 && (tmp = strstr(key, "XK_"))) { memcpy(prefix, key, tmp - key); prefix[tmp - key] = '\0'; tmp += 3; memmove(key, tmp, strlen(tmp) + 1); return 1; } /* Now try to catch alias (XK_foo XK_bar) definitions, and resolve them * immediately: if the target is in the form XF86XK_foo, we need to * canonicalise this to XF86foo before we do the lookup. */ i = sscanf(buf, "#define %127s %127s", key, alias); if (i == 2 && (tmp = strstr(key, "XK_")) && (tmpa = strstr(alias, "XK_"))) { memcpy(prefix, key, tmp - key); prefix[tmp - key] = '\0'; tmp += 3; memmove(key, tmp, strlen(tmp) + 1); memmove(tmpa, tmpa + 3, strlen(tmpa + 3) + 1); for (i = ksnum - 1; i >= 0; i--) { if (strcmp(info[i].name, alias) == 0) { *val = info[i].val; return 1; } } fprintf(stderr, "can't find matching definition %s for keysym %s%s\n", alias, prefix, key); } return 0; } int main(int argc, char *argv[]) { int max_rehash; Signature sig; int i, j, k, l, z; FILE *fptr; char *name; char c; int first; int best_max_rehash; int best_z = 0; int num_found; KeySym val; char key[128], prefix[128]; static char buf[1024]; for (l = 1; l < argc; l++) { fptr = fopen(argv[l], "r"); if (!fptr) { fprintf(stderr, "couldn't open %s\n", argv[l]); continue; } while (fgets(buf, sizeof(buf), fptr)) { if (!parse_line(buf, key, &val, prefix)) continue; if (val == XK_VoidSymbol) val = 0; if (val > 0x1fffffff) { fprintf(stderr, "ignoring illegal keysym (%s, %lx)\n", key, val); continue; } name = malloc(strlen(prefix) + strlen(key) + 1); if (!name) { fprintf(stderr, "makekeys: out of memory!\n"); exit(1); } sprintf(name, "%s%s", prefix, key); info[ksnum].name = name; info[ksnum].val = val; ksnum++; if (ksnum == KTNUM) { fprintf(stderr, "makekeys: too many keysyms!\n"); exit(1); } } fclose(fptr); } printf("/* This file is generated from keysymdef.h. */\n"); printf("/* Do not edit. */\n"); printf("\n"); best_max_rehash = ksnum; num_found = 0; for (z = ksnum; z < KTNUM; z++) { max_rehash = 0; for (name = tab, i = z; --i >= 0;) *name++ = 0; for (i = 0; i < ksnum; i++) { name = info[i].name; sig = 0; while ((c = *name++)) sig = (sig << 1) + c; first = j = sig % z; for (k = 0; tab[j]; k++) { j += first + 1; if (j >= z) j -= z; if (j == first) goto next1; } tab[j] = 1; if (k > max_rehash) max_rehash = k; } if (max_rehash < MIN_REHASH) { if (max_rehash < best_max_rehash) { best_max_rehash = max_rehash; best_z = z; } num_found++; if (num_found >= MATCHES) break; } next1: ; } z = best_z; if (z == 0) { fprintf(stderr, "makekeys: failed to find small enough hash!\n" "Try increasing KTNUM in makekeys.c\n"); exit(1); } printf("#ifdef NEEDKTABLE\n"); printf("const unsigned char _XkeyTable[] = {\n"); printf("0,\n"); k = 1; for (i = 0; i < ksnum; i++) { name = info[i].name; sig = 0; while ((c = *name++)) sig = (sig << 1) + c; first = j = sig % z; while (offsets[j]) { j += first + 1; if (j >= z) j -= z; } offsets[j] = k; indexes[i] = k; val = info[i].val; printf("0x%.2"PRIx32", 0x%.2"PRIx32", 0x%.2lx, 0x%.2lx, 0x%.2lx, 0x%.2lx, ", (sig >> 8) & 0xff, sig & 0xff, (val >> 24) & 0xff, (val >> 16) & 0xff, (val >> 8) & 0xff, val & 0xff); for (name = info[i].name, k += 7; (c = *name++); k++) printf("'%c',", c); printf((i == (ksnum-1)) ? "0\n" : "0,\n"); } printf("};\n"); printf("\n"); printf("#define KTABLESIZE %d\n", z); printf("#define KMAXHASH %d\n", best_max_rehash + 1); printf("\n"); printf("static const unsigned short hashString[KTABLESIZE] = {\n"); for (i = 0; i < z;) { printf("0x%.4x", offsets[i]); i++; if (i == z) break; printf((i & 7) ? ", " : ",\n"); } printf("\n"); printf("};\n"); printf("#endif /* NEEDKTABLE */\n"); best_max_rehash = ksnum; num_found = 0; for (z = ksnum; z < KTNUM; z++) { max_rehash = 0; for (name = tab, i = z; --i >= 0;) *name++ = 0; for (i = 0; i < ksnum; i++) { val = info[i].val; first = j = val % z; for (k = 0; tab[j]; k++) { if (values[j] == val) goto skip1; j += first + 1; if (j >= z) j -= z; if (j == first) goto next2; } tab[j] = 1; values[j] = val; if (k > max_rehash) max_rehash = k; skip1: ; } if (max_rehash < MIN_REHASH) { if (max_rehash < best_max_rehash) { best_max_rehash = max_rehash; best_z = z; } num_found++; if (num_found >= MATCHES) break; } next2: ; } z = best_z; if (z == 0) { fprintf(stderr, "makekeys: failed to find small enough hash!\n" "Try increasing KTNUM in makekeys.c\n"); exit(1); } for (i = z; --i >= 0;) offsets[i] = 0; for (i = 0; i < ksnum; i++) { val = info[i].val; first = j = val % z; while (offsets[j]) { if (values[j] == val) goto skip2; j += first + 1; if (j >= z) j -= z; } offsets[j] = indexes[i] + 2; values[j] = val; skip2: ; } printf("\n"); printf("#ifdef NEEDVTABLE\n"); printf("#define VTABLESIZE %d\n", z); printf("#define VMAXHASH %d\n", best_max_rehash + 1); printf("\n"); printf("static const unsigned short hashKeysym[VTABLESIZE] = {\n"); for (i = 0; i < z;) { printf("0x%.4x", offsets[i]); i++; if (i == z) break; printf((i & 7) ? ", " : ",\n"); } printf("\n"); printf("};\n"); printf("#endif /* NEEDVTABLE */\n"); exit(0); } libX11-1.6.3/src/util/Makefile.in000064401431060000012000000460471247741725600167050ustar00alancstaff00002660200006# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = makekeys$(EXEEXT) subdir = src/util ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_define_dir.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h \ $(top_builddir)/include/X11/XlibConf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) makekeys_SOURCES = makekeys.c makekeys_OBJECTS = makekeys.$(OBJEXT) makekeys_LDADD = $(LDADD) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src -I$(top_builddir)/include/X11 depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = makekeys.c DIST_SOURCES = makekeys.c am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASE_CFLAGS = @BASE_CFLAGS@ BIGFONT_CFLAGS = @BIGFONT_CFLAGS@ BIGFONT_LIBS = @BIGFONT_LIBS@ CC = @CC_FOR_BUILD@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS_FOR_BUILD@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHANGELOG_CMD = @CHANGELOG_CMD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS_FOR_BUILD@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ FOP = @FOP@ GREP = @GREP@ I18N_MODULE_LIBS = @I18N_MODULE_LIBS@ INSTALL = @INSTALL@ INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ KEYSYMDEFS = @KEYSYMDEFS@ LAUNCHD = @LAUNCHD@ LD = @LD@ LDFLAGS = @LDFLAGS_FOR_BUILD@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LINT = @LINT@ LINTLIB = @LINTLIB@ LINT_FLAGS = @LINT_FLAGS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MALLOC_ZERO_CFLAGS = @MALLOC_ZERO_CFLAGS@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_SUBSTS = @MAN_SUBSTS@ MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RAWCPP = @RAWCPP@ RAWCPPFLAGS = @RAWCPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRICT_CFLAGS = @STRICT_CFLAGS@ STRIP = @STRIP@ STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ TRADITIONALCPPFLAGS = @TRADITIONALCPPFLAGS@ VERSION = @VERSION@ WCHAR32 = @WCHAR32@ X11_CFLAGS = @X11_CFLAGS@ X11_DATADIR = @X11_DATADIR@ X11_EXTRA_DEPS = @X11_EXTRA_DEPS@ X11_LIBDIR = @X11_LIBDIR@ X11_LIBS = @X11_LIBS@ X11_LOCALEDATADIR = @X11_LOCALEDATADIR@ X11_LOCALEDIR = @X11_LOCALEDIR@ X11_LOCALELIBDIR = @X11_LOCALELIBDIR@ XERRORDB = @XERRORDB@ XKBPROTO_REQUIRES = @XKBPROTO_REQUIRES@ XKEYSYMDB = @XKEYSYMDB@ XLOCALEDATADIR = @XLOCALEDATADIR@ XLOCALEDIR = @XLOCALEDIR@ XLOCALELIBDIR = @XLOCALELIBDIR@ XMALLOC_ZERO_CFLAGS = @XMALLOC_ZERO_CFLAGS@ XMLTO = @XMLTO@ XORG_MAN_PAGE = @XORG_MAN_PAGE@ XORG_SGML_PATH = @XORG_SGML_PATH@ XSLTPROC = @XSLTPROC@ XSL_STYLESHEET = @XSL_STYLESHEET@ XTHREADLIB = @XTHREADLIB@ XTHREAD_CFLAGS = @XTHREAD_CFLAGS@ XTMALLOC_ZERO_CFLAGS = @XTMALLOC_ZERO_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ locales = @locales@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = \ $(X11_CFLAGS) \ $(CWARNFLAGS) AM_CPPFLAGS = \ -I$(top_srcdir)/include EXTRA_DIST = mkks.sh # Check source code with tools like lint & sparse @LINT_TRUE@ALL_LINT_FLAGS = $(LINT_FLAGS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ @LINT_TRUE@ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/util/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/util/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list makekeys$(EXEEXT): $(makekeys_OBJECTS) $(makekeys_DEPENDENCIES) $(EXTRA_makekeys_DEPENDENCIES) @rm -f makekeys$(EXEEXT) $(AM_V_CCLD)$(LINK) $(makekeys_OBJECTS) $(makekeys_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/makekeys.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile @LINT_TRUE@lint: @LINT_TRUE@ $(LINT) $(ALL_LINT_FLAGS) makekeys.c # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: libX11-1.6.3/src/util/mkks.sh000064401431060000012000000003661247741723500161300ustar00alancstaff00002660200006#!/bin/sh cat $* | awk 'BEGIN { \ printf "/*\n * This file is generated from %s. Do not edit.\n */\n", \ "$(INCLUDESRC)/keysymdef.h";\ } \ /^#define/ { \ len = length($2)-3; \ printf("{ \"%s\", %s },\n", substr($2,4,len), $3); \ }' libX11-1.6.3/src/SetState.c000064401431060000012000000035471247741723500155560ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XSetState( register Display *dpy, GC gc, unsigned long foreground, unsigned long background, int function, unsigned long planemask) { XGCValues *gv = &gc->values; LockDisplay(dpy); if (function != gv->function) { gv->function = function; gc->dirty |= GCFunction; } if (planemask != gv->plane_mask) { gv->plane_mask = planemask; gc->dirty |= GCPlaneMask; } if (foreground != gv->foreground) { gv->foreground = foreground; gc->dirty |= GCForeground; } if (background != gv->background) { gv->background = background; gc->dirty |= GCBackground; } UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/src/LiProps.c000064401431060000012000000040561247741723500154060ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" Atom *XListProperties( register Display *dpy, Window window, int *n_props) /* RETURN */ { unsigned long nbytes; xListPropertiesReply rep; Atom *properties; register xResourceReq *req; LockDisplay(dpy); GetResReq(ListProperties, window, req); if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { *n_props = 0; UnlockDisplay(dpy); SyncHandle(); return ((Atom *) NULL); } if (rep.nProperties) { nbytes = rep.nProperties * sizeof(Atom); properties = Xmalloc (nbytes); if (! properties) { _XEatDataWords(dpy, rep.length); UnlockDisplay(dpy); SyncHandle(); return (Atom *) NULL; } nbytes = rep.nProperties << 2; _XRead32 (dpy, (long *) properties, nbytes); } else properties = (Atom *) NULL; *n_props = rep.nProperties; UnlockDisplay(dpy); SyncHandle(); return (properties); } libX11-1.6.3/src/GetRGBCMap.c000064401431060000012000000077441247741723500156400ustar00alancstaff00002660200006 /* Copyright 1987, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include "Xatomtype.h" #include Status XGetRGBColormaps ( Display *dpy, Window w, XStandardColormap **stdcmap, /* RETURN */ int *count, /* RETURN */ Atom property) /* XA_RGB_BEST_MAP, etc. */ { register int i; /* iterator variable */ xPropStandardColormap *data = NULL; /* data read in from prop */ Atom actual_type; /* how the prop was actually stored */ int actual_format; /* ditto */ unsigned long leftover; /* how much was left over */ unsigned long nitems; /* number of 32bits read */ int ncmaps; /* number of structs this makes */ Bool old_style = False; /* if was too short */ VisualID def_visual = None; /* visual to use if prop too short */ XStandardColormap *cmaps; /* return value */ if (XGetWindowProperty (dpy, w, property, 0L, 1000000L, False, XA_RGB_COLOR_MAP, &actual_type, &actual_format, &nitems, &leftover, (unsigned char **)&data) != Success) return False; /* if wrong type or format, or too small for us, then punt */ if ((actual_type != XA_RGB_COLOR_MAP) || (actual_format != 32) || (nitems < OldNumPropStandardColormapElements)) { Xfree (data); return False; } /* * See how many properties were found; if pre-ICCCM then assume * default visual and a kill id of 1. */ if (nitems < NumPropStandardColormapElements) { ncmaps = 1; old_style = True; if (nitems < (NumPropStandardColormapElements - 1)) { Screen *sp = _XScreenOfWindow (dpy, w); if (!sp) { Xfree (data); return False; } def_visual = sp->root_visual->visualid; } } else { /* * make sure we have an integral number of colormaps */ ncmaps = (nitems / NumPropStandardColormapElements); if ((((unsigned long) ncmaps) * NumPropStandardColormapElements) != nitems) { Xfree (data); return False; } } /* * allocate array */ cmaps = Xmalloc (ncmaps * sizeof (XStandardColormap)); if (!cmaps) { Xfree (data); return False; } /* * and fill it in, handling compatibility with pre-ICCCM short stdcmaps */ { register XStandardColormap *map; register xPropStandardColormap *prop; for (i = ncmaps, map = cmaps, prop = data; i > 0; i--, map++, prop++) { map->colormap = prop->colormap; map->red_max = prop->red_max; map->red_mult = prop->red_mult; map->green_max = prop->green_max; map->green_mult = prop->green_mult; map->blue_max = prop->blue_max; map->blue_mult = prop->blue_mult; map->base_pixel = prop->base_pixel; map->visualid = (def_visual ? def_visual : prop->visualid); map->killid = (old_style ? None : prop->killid); } } Xfree (data); *stdcmap = cmaps; *count = ncmaps; return True; } n advertising or otherwise tlibX11-1.6.3/src/SetSOwner.c000064401431060000012000000030251247741723500157020ustar00alancstaff00002660200006/* Copyright 1986, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" int XSetSelectionOwner( register Display *dpy, Atom selection, Window owner, Time time) { register xSetSelectionOwnerReq *req; LockDisplay(dpy); GetReq(SetSelectionOwner,req); req->selection = selection; req->window = owner; req->time = time; UnlockDisplay(dpy); SyncHandle(); return 1; } libX11-1.6.3/modules/lc/gen/Makefile.am000064401431060000012000000011721247741723500177320ustar00alancstaff00002660200006AM_CPPFLAGS= \ -I$(top_srcdir)/include \ -I$(top_srcdir)/include/X11 \ -I$(top_builddir)/include \ -I$(top_builddir)/include/X11 \ -I$(top_srcdir)/src/xcms \ -I$(top_srcdir)/src/xkb \ -I$(top_srcdir)/src/xlibi18n \ -D_BSD_SOURCE AM_CFLAGS= \ $(X11_CFLAGS) \ $(BIGFONT_CFLAGS) \ $(CWARNFLAGS) if XLIB_LOADABLE_I18N commonlibdir = $(X11_LOCALELIBDIR)/common commonlib_LTLIBRARIES=xlibi18n.la xlibi18n_la_LDFLAGS = -module -version-number 2:0:0 xlibi18n_la_LIBADD = $(I18N_MODULE_LIBS) else noinst_LTLIBRARIES = libxlibi18n.la endif xlibi18n_la_SOURCES = \ lcGenConv.c libxlibi18n_la_SOURCES = $(xlibi18n_la_SOURCES) libX11-1.6.3/modules/lc/gen/Makefile.in000064401431060000012000000562341247741725500177560ustar00alancstaff00002660200006# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = modules/lc/gen ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_define_dir.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h \ $(top_builddir)/include/X11/XlibConf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(commonlibdir)" LTLIBRARIES = $(commonlib_LTLIBRARIES) $(noinst_LTLIBRARIES) libxlibi18n_la_LIBADD = am__objects_1 = lcGenConv.lo am_libxlibi18n_la_OBJECTS = $(am__objects_1) libxlibi18n_la_OBJECTS = $(am_libxlibi18n_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = @XLIB_LOADABLE_I18N_FALSE@am_libxlibi18n_la_rpath = am__DEPENDENCIES_1 = @XLIB_LOADABLE_I18N_TRUE@xlibi18n_la_DEPENDENCIES = \ @XLIB_LOADABLE_I18N_TRUE@ $(am__DEPENDENCIES_1) am_xlibi18n_la_OBJECTS = lcGenConv.lo xlibi18n_la_OBJECTS = $(am_xlibi18n_la_OBJECTS) xlibi18n_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(xlibi18n_la_LDFLAGS) $(LDFLAGS) -o $@ @XLIB_LOADABLE_I18N_TRUE@am_xlibi18n_la_rpath = -rpath $(commonlibdir) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src -I$(top_builddir)/include/X11 depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libxlibi18n_la_SOURCES) $(xlibi18n_la_SOURCES) DIST_SOURCES = $(libxlibi18n_la_SOURCES) $(xlibi18n_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASE_CFLAGS = @BASE_CFLAGS@ BIGFONT_CFLAGS = @BIGFONT_CFLAGS@ BIGFONT_LIBS = @BIGFONT_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHANGELOG_CMD = @CHANGELOG_CMD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ FOP = @FOP@ GREP = @GREP@ I18N_MODULE_LIBS = @I18N_MODULE_LIBS@ INSTALL = @INSTALL@ INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ KEYSYMDEFS = @KEYSYMDEFS@ LAUNCHD = @LAUNCHD@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LINT = @LINT@ LINTLIB = @LINTLIB@ LINT_FLAGS = @LINT_FLAGS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MALLOC_ZERO_CFLAGS = @MALLOC_ZERO_CFLAGS@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_SUBSTS = @MAN_SUBSTS@ MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RAWCPP = @RAWCPP@ RAWCPPFLAGS = @RAWCPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRICT_CFLAGS = @STRICT_CFLAGS@ STRIP = @STRIP@ STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ TRADITIONALCPPFLAGS = @TRADITIONALCPPFLAGS@ VERSION = @VERSION@ WCHAR32 = @WCHAR32@ X11_CFLAGS = @X11_CFLAGS@ X11_DATADIR = @X11_DATADIR@ X11_EXTRA_DEPS = @X11_EXTRA_DEPS@ X11_LIBDIR = @X11_LIBDIR@ X11_LIBS = @X11_LIBS@ X11_LOCALEDATADIR = @X11_LOCALEDATADIR@ X11_LOCALEDIR = @X11_LOCALEDIR@ X11_LOCALELIBDIR = @X11_LOCALELIBDIR@ XERRORDB = @XERRORDB@ XKBPROTO_REQUIRES = @XKBPROTO_REQUIRES@ XKEYSYMDB = @XKEYSYMDB@ XLOCALEDATADIR = @XLOCALEDATADIR@ XLOCALEDIR = @XLOCALEDIR@ XLOCALELIBDIR = @XLOCALELIBDIR@ XMALLOC_ZERO_CFLAGS = @XMALLOC_ZERO_CFLAGS@ XMLTO = @XMLTO@ XORG_MAN_PAGE = @XORG_MAN_PAGE@ XORG_SGML_PATH = @XORG_SGML_PATH@ XSLTPROC = @XSLTPROC@ XSL_STYLESHEET = @XSL_STYLESHEET@ XTHREADLIB = @XTHREADLIB@ XTHREAD_CFLAGS = @XTHREAD_CFLAGS@ XTMALLOC_ZERO_CFLAGS = @XTMALLOC_ZERO_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ locales = @locales@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = \ -I$(top_srcdir)/include \ -I$(top_srcdir)/include/X11 \ -I$(top_builddir)/include \ -I$(top_builddir)/include/X11 \ -I$(top_srcdir)/src/xcms \ -I$(top_srcdir)/src/xkb \ -I$(top_srcdir)/src/xlibi18n \ -D_BSD_SOURCE AM_CFLAGS = \ $(X11_CFLAGS) \ $(BIGFONT_CFLAGS) \ $(CWARNFLAGS) @XLIB_LOADABLE_I18N_TRUE@commonlibdir = $(X11_LOCALELIBDIR)/common @XLIB_LOADABLE_I18N_TRUE@commonlib_LTLIBRARIES = xlibi18n.la @XLIB_LOADABLE_I18N_TRUE@xlibi18n_la_LDFLAGS = -module -version-number 2:0:0 @XLIB_LOADABLE_I18N_TRUE@xlibi18n_la_LIBADD = $(I18N_MODULE_LIBS) @XLIB_LOADABLE_I18N_FALSE@noinst_LTLIBRARIES = libxlibi18n.la xlibi18n_la_SOURCES = \ lcGenConv.c libxlibi18n_la_SOURCES = $(xlibi18n_la_SOURCES) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign modules/lc/gen/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign modules/lc/gen/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-commonlibLTLIBRARIES: $(commonlib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(commonlib_LTLIBRARIES)'; test -n "$(commonlibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(commonlibdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(commonlibdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(commonlibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(commonlibdir)"; \ } uninstall-commonlibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(commonlib_LTLIBRARIES)'; test -n "$(commonlibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(commonlibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(commonlibdir)/$$f"; \ done clean-commonlibLTLIBRARIES: -test -z "$(commonlib_LTLIBRARIES)" || rm -f $(commonlib_LTLIBRARIES) @list='$(commonlib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libxlibi18n.la: $(libxlibi18n_la_OBJECTS) $(libxlibi18n_la_DEPENDENCIES) $(EXTRA_libxlibi18n_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(am_libxlibi18n_la_rpath) $(libxlibi18n_la_OBJECTS) $(libxlibi18n_la_LIBADD) $(LIBS) xlibi18n.la: $(xlibi18n_la_OBJECTS) $(xlibi18n_la_DEPENDENCIES) $(EXTRA_xlibi18n_la_DEPENDENCIES) $(AM_V_CCLD)$(xlibi18n_la_LINK) $(am_xlibi18n_la_rpath) $(xlibi18n_la_OBJECTS) $(xlibi18n_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcGenConv.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(commonlibdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-commonlibLTLIBRARIES clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-commonlibLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-commonlibLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-commonlibLTLIBRARIES clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-commonlibLTLIBRARIES install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am \ uninstall-commonlibLTLIBRARIES .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);libX11-1.6.3/modules/lc/gen/lcGenConv.c000064401431060000012000002131361247741723500177250ustar00alancstaff00002660200006/* * Copyright 1992, 1993 by TOSHIBA Corp. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of TOSHIBA not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. TOSHIBA make no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * * Author: Katsuhisa Yano TOSHIBA Corp. * mopi@osa.ilab.toshiba.co.jp */ /* * (c) Copyright 1995 FUJITSU LIMITED * This is source code modified by FUJITSU LIMITED under the Joint * Development Agreement for the CDE/Motif PST. * * Modifier: Masayoshi Shimamura FUJITSU LIMITED * */ /* * 2000 * Modifier: Ivan Pascal The XFree86 Project */ /* * A generic locale loader for all kinds of ISO-2022 based codesets. * Supports: all locales. * How: Provides generic converters for ISO-2022 based codesets. Extensible as * far as ISO-2022 is extensible: codesets can be given by name in the * stream. Overall distinction between GL (0x00..0x7f) and GR (0x80..0xff). * In every chunk between escape sequences, the number of bytes per * character (char_size) is constant. * Platforms: all systems. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "XlcGeneric.h" #include #if !defined(Lynx_22) && !defined(X_LOCALE) #define STDCVT #endif typedef struct _CTDataRec { const char *name; const char *encoding; /* Compound Text encoding */ } CTDataRec, *CTData; static CTDataRec directionality_data[] = { { "BEGIN_LEFT-TO-RIGHT_TEXT", "\2331]" }, { "BEGIN_RIGHT-TO-LEFT_TEXT", "\2332]" }, { "END_OF_STRING", "\233]" }, }; typedef struct _StateRec { XLCd lcd; /* CT state */ XlcCharSet charset; /* charset of current state */ XlcCharSet GL_charset; /* charset of initial state in GL */ XlcCharSet GR_charset; /* charset of initial state in GR */ /* MB shift state */ CodeSet GL_codeset; CodeSet GR_codeset; } StateRec, *State; #define GR 0x80 /* begins right-side (non-ascii) region */ #define GL 0x7f /* ends left-side (ascii) region */ #define ESC 0x1b #define CSI 0x9b #define STX 0x02 #define isrightside(c) ((c) & GR) #define isleftside(c) (!isrightside(c)) /* Forward declarations for local routines. */ static int mbstocts (XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args); static int ctstombs (XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args); static int cstombs (XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args); /* ------------------------------------------------------------------------- */ /* Misc */ /* ------------------------------------------------------------------------- */ static int compare( const char *src, const char *encoding, int length) { const char *start = src; while (length-- > 0) { if (*src++ != *encoding++) return 0; if (*encoding == '\0') return src - start; } return 0; } static unsigned long conv_to_dest( Conversion conv, unsigned long code) { int i; int conv_num = conv->conv_num; FontScope convlist = conv->convlist; for (i = 0; i < conv_num; i++) { if (convlist[i].start <= code && code <= convlist[i].end) { switch (convlist[i].shift_direction) { case '+': return(code + convlist[i].shift); case '-': return(code - convlist[i].shift); default: return(code); } } } return(code); } static unsigned long conv_to_source( Conversion conv, unsigned long code) { int i; int conv_num; FontScope convlist; unsigned long start_p; unsigned long start_m; unsigned long end_p; unsigned long end_m; if (!conv) return(code); conv_num = conv->conv_num; convlist = conv->convlist; for (i = 0; i < conv_num; i++) { switch (convlist[i].shift_direction) { case '+': start_p = convlist[i].start + convlist[i].shift; end_p = convlist[i].end + convlist[i].shift; if (start_p <= code && code <= end_p) return(code - convlist[i].shift); break; case '-': start_m = convlist[i].start - convlist[i].shift; end_m = convlist[i].end - convlist[i].shift; if (start_m <= code && code <= end_m) return(code + convlist[i].shift); break; default: continue; } } return(code); } static unsigned long mb_to_gi( unsigned long mb, CodeSet codeset) { int i; unsigned long mb_tmp, mask = 0; if (codeset->mbconv) { mb_tmp = conv_to_dest(codeset->mbconv, mb); if (mb_tmp != mb) return(mb_tmp); } if (codeset->side == XlcC0 || codeset->side == XlcGL || codeset->side == XlcC1 || codeset->side == XlcGR) { for (i = 0; i < codeset->length; i++) mask = (mask << 8) | GL; mb = mb & mask; } return(mb); } static unsigned long gi_to_mb( unsigned long glyph_index, CodeSet codeset) { int i; unsigned long mask = 0; if (codeset->side == XlcC1 || codeset->side == XlcGR) { for (i = 0; i < codeset->length; i++) mask = (mask << 8) | GR; glyph_index = glyph_index | mask; } if (codeset->mbconv) return( conv_to_source(codeset->mbconv, glyph_index) ); return(glyph_index); } static Bool gi_to_wc( XLCd lcd, unsigned long glyph_index, CodeSet codeset, wchar_t *wc) { unsigned char mask = 0; unsigned long wc_encoding = codeset->wc_encoding; int length = codeset->length; unsigned long wc_shift_bits = XLC_GENERIC(lcd, wc_shift_bits); mask = (1 << wc_shift_bits) - 1 ; for (*wc = 0, length--; length >= 0; length--) *wc = (*wc << wc_shift_bits) | ((glyph_index >> (length * 8 )) & mask); *wc = *wc | wc_encoding; return(True); } static Bool wc_to_gi( XLCd lcd, wchar_t wc, unsigned long *glyph_index, CodeSet *codeset) { int i; unsigned char mask = 0; unsigned long wc_encoding; unsigned long wc_encode_mask = XLC_GENERIC(lcd, wc_encode_mask); unsigned long wc_shift_bits = XLC_GENERIC(lcd, wc_shift_bits); int codeset_num = XLC_GENERIC(lcd, codeset_num); CodeSet *codeset_list = XLC_GENERIC(lcd, codeset_list); wc_encoding = wc & wc_encode_mask; for (*codeset = NULL, i = 0; i < codeset_num; i++) { if (wc_encoding == codeset_list[i]->wc_encoding) { *codeset = codeset_list[i]; break; } } if (*codeset == NULL) return(False); mask = (1 << wc_shift_bits) - 1 ; wc = wc & ~wc_encode_mask; for (*glyph_index = 0, i = (*codeset)->length - 1; i >= 0; i--) *glyph_index = (*glyph_index << 8) | ( ((unsigned long)wc >> (i * wc_shift_bits)) & mask ); return(True); } static CodeSet mb_parse_codeset( State state, int num, const char **inbufptr, int *from_left) { int len; int from_len = (*from_left) + 1; const char *src = (*inbufptr) - 1; ParseInfo *mb_parse_list = XLC_GENERIC(state->lcd, mb_parse_list); ParseInfo parse_info; CodeSet codeset; for (--num ; (parse_info = mb_parse_list[num]) != NULL; num++) { len = compare(src, parse_info->encoding, from_len); if (len > 0) { codeset = parse_info->codeset; if (parse_info->type == E_LSL) state->GL_codeset = codeset; else if (parse_info->type == E_LSR) state->GR_codeset = codeset; --len; *inbufptr += len; *from_left -= len; return codeset; } } return (CodeSet) NULL; } static CodeSet byteM_parse_codeset( XLCd lcd, const char *inbufptr) { unsigned char ch; CodeSet codeset; ByteInfoList byteM; ByteInfoListRec byteM_rec; ByteInfo byteinfo; ByteInfoRec byteinfo_rec; Bool hit = False; int i, j, k; int codeset_num = XLC_GENERIC(lcd, codeset_num); CodeSet *codeset_list = XLC_GENERIC(lcd, codeset_list); for (i = 0; i < codeset_num; i++) { codeset = codeset_list[i]; byteM = codeset->byteM; if (codeset->side != XlcNONE || byteM == NULL) continue; for (j = 0; j < codeset->length; j++) { ch = *((const unsigned char *)(inbufptr + j)); byteM_rec = byteM[j]; byteinfo = byteM_rec.byteinfo; for (hit = False, k = 0; k < byteM_rec.byteinfo_num; k++) { byteinfo_rec = byteinfo[k]; if (byteinfo_rec.start <= ch && ch <= byteinfo_rec.end) { hit = True; break; } } if (!hit) break; } if (hit) return(codeset); } return(NULL); } #define GLGR_parse_codeset(ch) \ (isrightside(ch) ? (state->GR_codeset) : \ (state->GL_codeset) ) static XlcCharSet gi_parse_charset( unsigned long glyph_index, CodeSet codeset) { int i; XlcCharSet *charset_list = codeset->charset_list; int num_charsets = codeset->num_charsets; ExtdSegment ctextseg = codeset->ctextseg; XlcCharSet charset = NULL; int area_num; FontScope area; /* lockup ct sequence */ for (i = 0; i < num_charsets; i++) { charset = charset_list[i]; if (*charset->ct_sequence != '\0') break; } if (i >= num_charsets) return(NULL); if (charset->source != CSsrcStd) return (charset); if (!ctextseg) return(charset); area = ctextseg->area; area_num = ctextseg->area_num; for (i = 0; i < area_num; i++) { if (area[i].start <= glyph_index && glyph_index <= area[i].end) { charset = ctextseg->charset; if (*charset->ct_sequence == '\0') return(NULL); break; } } return(charset); } static Bool ct_parse_csi( const char *inbufptr, int *ctr_seq_len) { int i; int num = sizeof(directionality_data) / sizeof(directionality_data[0]); for (i = 0; i < num; i++) { if ( !(*ctr_seq_len = strlen(directionality_data[i].encoding)) ) continue; if ( strncmp(inbufptr, directionality_data[i].encoding, *ctr_seq_len) == 0) return(True); } return(False); } static int cmp_esc_sequence( const char *inbufptr, XlcCharSet charset) { int seq_len, name_len, total_len; unsigned char byte_m, byte_l; const char *ct_sequence = charset->ct_sequence; const char *encoding_name = charset->encoding_name; /* check esc sequence */ if ( !(seq_len = strlen(ct_sequence) ) ) return(0); if ( strncmp(inbufptr, ct_sequence, seq_len) != 0) return(0); /* Standard Character Set Encoding ? */ if (charset->source == CSsrcStd) return(seq_len); /* * Non-Standard Character Set Encoding * * +--- ---+-----+-----+-----+---- ----+-----+-----+------- ------+ * | ctseq | M | L | encoding name | STX | contents | * +--- ---+-----+-----+-----+---- ----+-----+-----+------- ------+ * 4bytes 1byte 1byte variable length 1byte variable length * | | * +----------------------------------------------+ * rest length = ((M - 128) * 128) + (L - 128) */ /* get length of encoding name */ inbufptr += seq_len; byte_m = *inbufptr++; byte_l = *inbufptr++; name_len = strlen(encoding_name); if (((byte_m - 128) * 128 + (byte_l - 128) - 1) < name_len) return(0); if ( _XlcNCompareISOLatin1(inbufptr, encoding_name, name_len) != 0 ) return(0); /* check STX (Start of Text) */ inbufptr = inbufptr + name_len; if ( *inbufptr != STX ) return(0); total_len = seq_len + name_len + 3; return(total_len); } static Bool ct_parse_charset( XLCd lcd, const char *inbufptr, XlcCharSet *charset, int *ctr_seq_len) { int i, j; ExtdSegment ctextseg; int num_charsets; XlcCharSet *charset_list; CodeSet codeset; int codeset_num = XLC_GENERIC(lcd, codeset_num); CodeSet *codeset_list = XLC_GENERIC(lcd, codeset_list); int segment_conv_num = XLC_GENERIC(lcd, segment_conv_num); SegConv segment_conv = XLC_GENERIC(lcd, segment_conv); /* get charset from XLC_XLOCALE by escape sequence */ for (i = 0; i < codeset_num; i++) { codeset = codeset_list[i]; num_charsets = codeset->num_charsets; charset_list = codeset->charset_list; ctextseg = codeset->ctextseg; for (j = 0; j < num_charsets; j++) { *charset = charset_list[j]; if ((*ctr_seq_len = cmp_esc_sequence(inbufptr, *charset))) return(True); } if (ctextseg) { *charset = ctextseg->charset; if ((*ctr_seq_len = cmp_esc_sequence(inbufptr, *charset))) return(True); } } /* get charset from XLC_SEGMENTCONVERSION by escape sequence */ if (!segment_conv) return(False); for (i = 0; i < segment_conv_num; i++) { *charset = segment_conv[i].source; if ((*ctr_seq_len = cmp_esc_sequence(inbufptr, *charset))) return(True); *charset = segment_conv[i].dest; if ((*ctr_seq_len = cmp_esc_sequence(inbufptr, *charset))) return(True); } return(False); } static Bool segment_conversion( XLCd lcd, XlcCharSet *charset, unsigned long *glyph_index) { int i; int segment_conv_num = XLC_GENERIC(lcd, segment_conv_num); SegConv segment_conv = XLC_GENERIC(lcd, segment_conv); FontScopeRec range; ConversionRec conv_rec; if (!segment_conv) return(True); for (i = 0; i < segment_conv_num; i++) { if (segment_conv[i].source == *charset) break; } if (i >= segment_conv_num) return(True); range = segment_conv[i].range; if (*glyph_index < range.start || range.end < *glyph_index) return(True); *charset = segment_conv[i].dest; conv_rec.conv_num = segment_conv[i].conv_num; conv_rec.convlist = segment_conv[i].conv; *glyph_index = conv_to_dest(&conv_rec, *glyph_index); return(True); } static CodeSet _XlcGetCodeSetFromName( XLCd lcd, const char *name) { int i, j; XlcCharSet charset; int num_charsets; XlcCharSet *charset_list; CodeSet codeset; int codeset_num = XLC_GENERIC(lcd, codeset_num); CodeSet *codeset_list = XLC_GENERIC(lcd, codeset_list); for (i = 0; i < codeset_num; i++) { codeset = codeset_list[i]; num_charsets = codeset->num_charsets; charset_list = codeset->charset_list; for (j = 0; j < num_charsets; j++) { charset = charset_list[j]; if (!strlen(charset->name)) continue; if ( strcmp(charset->name, name) == 0) return(codeset); } } return(NULL); } static Bool _XlcGetCodeSetFromCharSet( XLCd lcd, XlcCharSet charset, CodeSet *codeset, unsigned long *glyph_index) { int j, num; CodeSet *codeset_list = XLC_GENERIC(lcd, codeset_list); XlcCharSet *charset_list; int codeset_num, num_charsets; Conversion ctconv; unsigned long glyph_index_tmp = 0; ExtdSegment ctextseg; codeset_num = XLC_GENERIC(lcd, codeset_num); for (num = 0 ; num < codeset_num; num++) { *codeset = codeset_list[num]; ctconv = (*codeset)->ctconv; ctextseg = (*codeset)->ctextseg; num_charsets = (*codeset)->num_charsets; charset_list = (*codeset)->charset_list; glyph_index_tmp = conv_to_source(ctconv, *glyph_index); if (charset->source == CSsrcStd) { /* Standard Character Set Encoding */ if (glyph_index_tmp == *glyph_index) { for (j = 0; j < num_charsets; j++) { if (charset_list[j] == charset) { goto end_loop; } } } } else { /* Non-Standard Character Set Encoding */ for (j = 0; j < num_charsets; j++) { if (charset_list[j] == charset) { goto end_loop; } } if (glyph_index_tmp != *glyph_index) { if (ctextseg && ctextseg->charset == charset) { goto end_loop; } } } } end_loop: if (num < codeset_num) { *glyph_index = glyph_index_tmp; return(True); } return(False); } #define check_string_encoding(codeset) (codeset->string_encoding) static void output_ulong_value( char *outbufptr, unsigned long code, int length, XlcSide side) { int i; for (i = (length - 1) * 8; i >= 0; i -= 8) { *outbufptr = ( code >> i) & 0xff; if (side == XlcC0 || side == XlcGL) { *outbufptr = *outbufptr & GL; } else if (side == XlcC1 || side == XlcGR) { *outbufptr = *outbufptr | GR; } outbufptr++; } } /* -------------------------------------------------------------------------- */ /* Init */ /* -------------------------------------------------------------------------- */ static XlcCharSet default_GL_charset = 0; static XlcCharSet default_GR_charset = 0; static void init_state( XlcConv conv) { State state = (State) conv->state; /* for CT */ state->charset = NULL; state->GL_charset = default_GL_charset; state->GR_charset = default_GR_charset; /* for MB shift state */ state->GL_codeset = XLC_GENERIC(state->lcd, initial_state_GL); state->GR_codeset = XLC_GENERIC(state->lcd, initial_state_GR); } /* -------------------------------------------------------------------------- */ /* Convert */ /* -------------------------------------------------------------------------- */ static int mbstowcs_org( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { State state = (State) conv->state; XLCd lcd = state->lcd; unsigned char ch; unsigned long mb = 0; wchar_t wc; int length = 0, len_left = 0; int unconv_num = 0; int num; CodeSet codeset = NULL; const char *inbufptr; wchar_t *outbufptr = (wchar_t *) *to; int from_size = *from_left; unsigned char *mb_parse_table = XLC_GENERIC(lcd, mb_parse_table); if (from == NULL || *from == NULL) { _XlcResetConverter(conv); return( 0 ); } inbufptr = *from; while (*from_left && *to_left) { ch = *inbufptr++; (*from_left)--; /* null ? */ if (!ch) { if (outbufptr) {*outbufptr++ = L'\0';} (*to_left)--; /* error check */ if (len_left) { unconv_num += (length - len_left); len_left = 0; } continue; } /* same mb char data */ if (len_left) goto output_one_wc; /* next mb char data for single shift ? */ if (mb_parse_table && (num = mb_parse_table[ch]) ) { codeset = mb_parse_codeset(state, num, &inbufptr, from_left); if (codeset != NULL) { length = len_left = codeset->length; mb = 0; continue; } } /* next mb char data for byteM ? */ if ((codeset = byteM_parse_codeset(lcd, (inbufptr - 1)))) goto next_mb_char; /* next mb char data for GL or GR side ? */ if ((codeset = GLGR_parse_codeset(ch))) goto next_mb_char; /* can't find codeset for the ch */ unconv_num++; continue; next_mb_char: length = len_left = codeset->length; mb = 0; output_one_wc: mb = (mb << 8) | ch; /* 1 byte left shift */ len_left--; /* last of one mb char data */ if (!len_left) { gi_to_wc(lcd, mb_to_gi(mb, codeset), codeset, &wc); if (outbufptr) {*outbufptr++ = wc;} (*to_left)--; } } /* end of while */ /* error check on last char */ if (len_left) { inbufptr -= (length - len_left); (*from_left) += (length - len_left); unconv_num += (length - len_left); } *from = (XPointer) ((const char *) *from + from_size); *from_left = 0; *to = (XPointer) outbufptr; return unconv_num; } static int stdc_mbstowcs( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { const char *src = *((const char **) from); wchar_t *dst = *((wchar_t **) to); int src_left = *from_left; int dst_left = *to_left; int length, unconv_num = 0; while (src_left > 0 && dst_left > 0) { length = mbtowc(dst, src, src_left); if (length > 0) { src += length; src_left -= length; if (dst) dst++; dst_left--; } else if (length < 0) { src++; src_left--; unconv_num++; } else { /* null ? */ src++; src_left--; if (dst) *dst++ = L'\0'; dst_left--; } } *from = (XPointer) src; if (dst) *to = (XPointer) dst; *from_left = src_left; *to_left = dst_left; return unconv_num; } static int wcstombs_org( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { State state = (State) conv->state; XLCd lcd = state->lcd; char *encoding; unsigned long mb, glyph_index; wchar_t wc; int length; int unconv_num = 0; CodeSet codeset; const wchar_t *inbufptr = (const wchar_t *) *from; char *outbufptr = *to; int from_size = *from_left; const char *default_string = XLC_PUBLIC(lcd, default_string); int defstr_len = strlen(default_string); while (*from_left && *to_left) { wc = *inbufptr++; (*from_left)--; /* null ? */ if (!wc) { if (outbufptr) {*outbufptr++ = '\0';} (*to_left)--; continue; } /* convert */ if ( !wc_to_gi(lcd, wc, &glyph_index, &codeset) ) { /* output default_string of XDefaultString() */ if (*to_left < defstr_len) break; if (outbufptr) { strncpy((char *)outbufptr, default_string, defstr_len); outbufptr += defstr_len; } (*to_left) -= defstr_len; unconv_num++; } else { mb = gi_to_mb(glyph_index, codeset); if (codeset->parse_info) { Bool need_shift = False; switch (codeset->parse_info->type) { case E_LSL : if (codeset != state->GL_codeset) { need_shift = True; state->GL_codeset = codeset; } break; case E_LSR : if (codeset != state->GR_codeset) { need_shift = True; state->GR_codeset = codeset; } break; /* case E_SS */ default: need_shift = True; } /* output shift sequence */ if (need_shift) { encoding = codeset->parse_info->encoding; length = strlen(encoding); if (*to_left < length) break; if (outbufptr) { strncpy((char *)outbufptr, encoding, length); outbufptr += length; } (*to_left) -= length; } } /* output characters */ length = codeset->length; if (*to_left < length) break; if (outbufptr) { output_ulong_value(outbufptr, mb, length, XlcNONE); outbufptr += length; } (*to_left) -= length; } } /* end of while */ *from = (XPointer) ((const wchar_t *) *from + from_size); *from_left = 0; *to = (XPointer) outbufptr; return unconv_num; } static int stdc_wcstombs( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { const wchar_t *src = *((const wchar_t **) from); char *dst = *((char **) to); int src_left = *from_left; int dst_left = *to_left; int length, unconv_num = 0; while (src_left > 0 && dst_left >= MB_CUR_MAX) { length = wctomb(dst, *src); /* XXX */ if (length > 0) { src++; src_left--; if (dst) dst += length; dst_left -= length; } else if (length < 0) { src++; src_left--; unconv_num++; } } *from = (XPointer) src; if (dst) *to = (XPointer) dst; *from_left = src_left; *to_left = dst_left; return unconv_num; } static int wcstocts( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { State state = (State) conv->state; XLCd lcd = state->lcd; unsigned long glyph_index; wchar_t wc; int total_len, seq_len, name_len; int unconv_num = 0; Bool first_flag = True, standard_flag; XlcSide side; CodeSet codeset; XlcCharSet charset, old_charset = NULL; const char *ct_sequence; const wchar_t *inbufptr = (const wchar_t *) *from; char *outbufptr = *to; int from_size = *from_left; char *ext_seg_len = NULL; while (*from_left && *to_left) { wc = *inbufptr++; (*from_left)--; /* null ? */ if (!wc) { if (outbufptr) {*outbufptr++ = '\0';} (*to_left)--; continue; } /* convert */ if ( !wc_to_gi(lcd, wc, &glyph_index, &codeset) ) { unconv_num++; continue; } /* parse charset */ if ( !(charset = gi_parse_charset(glyph_index, codeset)) ) { unconv_num++; continue; } /* Standard Character Set Encoding ? */ standard_flag = charset->source == CSsrcStd ? True : False; /* * Non-Standard Character Set Encoding * * +-----+-----+-----+-----+-----+-----+-----+---- ----+-----+-----+ * | esc sequence | M | L | encoding name | STX | * +-----+-----+-----+-----+-----+-----+-----+---- ----+-----+-----+ * 4bytes 1byte 1byte variable length 1byte * | | * +-----------------------------------------+ * name length = ((M - 128) * 128) + (L - 128) */ /* make encoding data */ ct_sequence = charset->ct_sequence; side = charset->side; seq_len = strlen(ct_sequence); if (standard_flag) { name_len = 0; total_len = seq_len; } else { name_len = strlen(charset->encoding_name) + 1; total_len = seq_len + name_len + 2; } /* output escape sequence of CT */ if ( (charset != old_charset) && !(first_flag && charset->string_encoding) ){ if ( (ext_seg_len != NULL) && outbufptr) { int i = (outbufptr - ext_seg_len) - 2; *ext_seg_len++ = i / 128 + 128; *ext_seg_len = i % 128 + 128; ext_seg_len = NULL; } if (*to_left < total_len + 1) { unconv_num++; break; } if (outbufptr) { strcpy((char *)outbufptr, ct_sequence); outbufptr += seq_len; if (!standard_flag) { const char *i = charset->encoding_name; ext_seg_len = outbufptr; outbufptr += 2; for (; *i ; i++) *outbufptr++ = ((*i >= 'A') && (*i <= 'Z')) ? *i - 'A' + 'a' : *i; *outbufptr++ = STX; } } (*to_left) -= total_len; first_flag = False; old_charset = charset; } /* output glyph index */ if (codeset->ctconv) glyph_index = conv_to_dest(codeset->ctconv, glyph_index); if (*to_left < charset->char_size) { unconv_num++; break; } if (outbufptr) { output_ulong_value(outbufptr, glyph_index, charset->char_size, side); outbufptr += charset->char_size; } (*to_left) -= charset->char_size; } /* end of while */ if ( (ext_seg_len != NULL) && outbufptr) { int i = (outbufptr - ext_seg_len) - 2; *ext_seg_len++ = i / 128 + 128; *ext_seg_len = i % 128 + 128; } *from = (XPointer) ((const wchar_t *) *from + from_size); *from_left = 0; *to = (XPointer) outbufptr; return unconv_num; } static int stdc_wcstocts( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { XPointer buf = Xmalloc((*from_left) * MB_CUR_MAX); char *buf_ptr1 = buf; int buf_left1 = (*from_left) * MB_CUR_MAX; char *buf_ptr2 = buf_ptr1; int buf_left2; int unconv_num1 = 0, unconv_num2 = 0; unconv_num1 = stdc_wcstombs(conv, from, from_left, &buf_ptr1, &buf_left1, args, num_args); if (unconv_num1 < 0) goto ret; buf_left2 = buf_ptr1 - buf_ptr2; unconv_num2 = mbstocts(conv, &buf_ptr2, &buf_left2, to, to_left, args, num_args); if (unconv_num2 < 0) goto ret; ret: Xfree(buf); return (unconv_num1 + unconv_num2); } static int ctstowcs( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { State state = (State) conv->state; XLCd lcd = state->lcd; unsigned char ch; unsigned long glyph_index = 0; wchar_t wc; int ctr_seq_len = 0, gi_len_left = 0, gi_len = 0; int unconv_num = 0; CodeSet codeset = NULL; XlcCharSet charset_tmp; const char *inbufptr; wchar_t *outbufptr = (wchar_t *) *to; int from_size = *from_left; _XlcResetConverter(conv); /* ??? */ if (from == NULL || *from == NULL) { _XlcResetConverter(conv); return( 0 ); } inbufptr = *from; while (*from_left && *to_left) { ch = *inbufptr++; (*from_left)--; /* null ? */ if (!ch) { if (outbufptr) {*outbufptr++ = L'\0';} (*to_left)--; /* error check */ if (gi_len_left) { unconv_num += (gi_len - gi_len_left); gi_len_left = 0; } continue; } /* same glyph_index data */ if (gi_len_left) goto output_one_wc; /* control sequence ? */ if (ch == CSI) { if ( !ct_parse_csi(inbufptr - 1, &ctr_seq_len) ) goto skip_the_seg; if (*from_left + 1 < ctr_seq_len) { inbufptr--; (*from_left)++; unconv_num += *from_left; break; } /* skip the control sequence */ inbufptr += (ctr_seq_len - 1); *from_left -= (ctr_seq_len - 1); continue; } /* escape sequence ? */ if (ch == ESC) { if ( !ct_parse_charset(lcd, inbufptr - 1, &state->charset, &ctr_seq_len) ) goto skip_the_seg; if (state->charset->side == XlcC0 || state->charset->side == XlcGL) { state->GL_charset = state->charset; } else if (state->charset->side == XlcC1 || state->charset->side == XlcGR) { state->GR_charset = state->charset; } else if (state->charset->side == XlcGLGR) { state->GL_charset = state->charset; state->GR_charset = state->charset; } if (*from_left + 1 < ctr_seq_len) { inbufptr--; (*from_left)++; unconv_num += *from_left; break; } /* skip the escape sequence */ inbufptr += (ctr_seq_len - 1); *from_left -= (ctr_seq_len - 1); continue; } /* check current state */ if (isleftside(ch)) state->charset = state->GL_charset; else state->charset = state->GR_charset; gi_len = gi_len_left = state->charset->char_size; glyph_index = 0; output_one_wc: if (state->charset->side == XlcC1 || state->charset->side == XlcGR) glyph_index = (glyph_index << 8) | (ch & GL); else glyph_index = (glyph_index << 8) | ch; gi_len_left--; /* last of one glyph_index data */ if (!gi_len_left) { /* segment conversion */ charset_tmp = state->charset; segment_conversion(lcd, &charset_tmp, &glyph_index); /* get codeset */ if ( !_XlcGetCodeSetFromCharSet(lcd, charset_tmp, &codeset, &glyph_index) ) { unconv_num += gi_len; continue; } /* convert glyph index to wicd char */ gi_to_wc(lcd, glyph_index, codeset, &wc); if (outbufptr) {*outbufptr++ = wc;} (*to_left)--; } continue; skip_the_seg: /* skip until next escape or control sequence */ while ( *from_left ) { ch = *inbufptr++; (*from_left)--; unconv_num++; if (ch == ESC || ch == CSI) { inbufptr--; (*from_left)++; unconv_num--; break; } } if ( !(*from_left) ) break; } /* end of while */ /* error check on last char */ if (gi_len_left) { inbufptr -= (gi_len - gi_len_left); (*from_left) += (gi_len - gi_len_left); unconv_num += (gi_len - gi_len_left); } *from = (XPointer) ((const char *) *from + from_size); *from_left = 0; *to = (XPointer) outbufptr; return unconv_num; } static int cstowcs( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { State state = (State) conv->state; XLCd lcd = state->lcd; unsigned char ch; unsigned long glyph_index = 0; wchar_t wc; int gi_len_left = 0, gi_len = 0; int unconv_num = 0; CodeSet codeset = NULL; XlcCharSet charset, charset_tmp; const char *inbufptr; wchar_t *outbufptr = (wchar_t *) *to; int from_size = *from_left; if (from == NULL || *from == NULL) { return( 0 ); } inbufptr = *from; charset = (XlcCharSet) args[0]; while (*from_left && *to_left) { if (!gi_len_left) { gi_len_left = gi_len = charset->char_size; glyph_index = 0; } ch = *inbufptr++; (*from_left)--; /* null ? */ if (!ch) { if (outbufptr) {*outbufptr++ = L'\0';} (*to_left)--; /* error check */ if (gi_len_left) { unconv_num += (gi_len - gi_len_left); gi_len_left = 0; } continue; } if (charset->side == XlcC1 || charset->side == XlcGR) glyph_index = (glyph_index << 8) | (ch & GL); else glyph_index = (glyph_index << 8) | ch; gi_len_left--; /* last of one glyph_index data */ if (!gi_len_left) { /* segment conversion */ charset_tmp = charset; segment_conversion(lcd, &charset_tmp, &glyph_index); /* get codeset */ if ( !_XlcGetCodeSetFromCharSet(lcd, charset_tmp, &codeset, &glyph_index) ) { unconv_num += gi_len; continue; } /* convert glyph index to wicd char */ gi_to_wc(lcd, glyph_index, codeset, &wc); if (outbufptr) {*outbufptr++ = wc;} (*to_left)--; } } /* end of while */ /* error check on last char */ if (gi_len_left) { inbufptr -= (gi_len - gi_len_left); (*from_left) += (gi_len - gi_len_left); unconv_num += (gi_len - gi_len_left); } *from = (XPointer) ((const char *) *from + from_size); *from_left = 0; *to = (XPointer) outbufptr; return unconv_num; } static int stdc_ctstowcs( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { XPointer buf = Xmalloc((*from_left) * MB_CUR_MAX); char *buf_ptr1 = buf; int buf_left1 = (*from_left) * MB_CUR_MAX; char *buf_ptr2 = buf_ptr1; int buf_left2; int unconv_num1 = 0, unconv_num2 = 0; unconv_num1 = ctstombs(conv, from, from_left, &buf_ptr1, &buf_left1, args, num_args); if (unconv_num1 < 0) goto ret; buf_left2 = buf_ptr1 - buf_ptr2; unconv_num2 = stdc_mbstowcs(conv, &buf_ptr2, &buf_left2, to, to_left, args, num_args); if (unconv_num2 < 0) goto ret; ret: Xfree(buf); return (unconv_num1 + unconv_num2); } static int stdc_cstowcs( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { XPointer buf = Xmalloc((*from_left) * MB_CUR_MAX); char *buf_ptr1 = buf; int buf_left1 = (*from_left) * MB_CUR_MAX; char *buf_ptr2 = buf_ptr1; int buf_left2; int unconv_num1 = 0, unconv_num2 = 0; unconv_num1 = cstombs(conv, from, from_left, &buf_ptr1, &buf_left1, args, num_args); if (unconv_num1 < 0) goto ret; buf_left2 = buf_ptr1 - buf_ptr2; unconv_num2 = stdc_mbstowcs(conv, &buf_ptr2, &buf_left2, to, to_left, args, num_args); if (unconv_num2 < 0) goto ret; ret: Xfree(buf); return (unconv_num1 + unconv_num2); } static int mbstocts( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { XPointer buf = Xmalloc((*from_left) * sizeof(wchar_t)); char *buf_ptr1 = buf; int buf_left1 = (*from_left); char *buf_ptr2 = buf_ptr1; int buf_left2; int unconv_num1 = 0, unconv_num2 = 0; unconv_num1 = mbstowcs_org(conv, from, from_left, &buf_ptr1, &buf_left1, args, num_args); if (unconv_num1 < 0) goto ret; buf_left2 = (buf_ptr1 - buf_ptr2) / sizeof(wchar_t); unconv_num2 += wcstocts(conv, &buf_ptr2, &buf_left2, to, to_left, args, num_args); if (unconv_num2 < 0) goto ret; ret: Xfree(buf); return (unconv_num1 + unconv_num2); } static int mbstostr( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { State state = (State) conv->state; XLCd lcd = state->lcd; unsigned char ch; unsigned long mb = 0; int length = 0, len_left = 0; int unconv_num = 0; int num; CodeSet codeset = NULL; const char *inbufptr; char *outbufptr = *to; int from_size = *from_left; unsigned char *mb_parse_table = XLC_GENERIC(lcd, mb_parse_table); if (from == NULL || *from == NULL) { _XlcResetConverter(conv); return( 0 ); } inbufptr = *from; while (*from_left && *to_left) { ch = *inbufptr++; (*from_left)--; /* null ? */ if (!ch) { if (outbufptr) {*outbufptr++ = '\0';} (*to_left)--; /* error check */ if (len_left) { unconv_num += (length - len_left); len_left = 0; } continue; } /* same mb char data */ if (len_left) goto output_one_mb; /* next mb char data for single shift ? */ if (mb_parse_table && (num = mb_parse_table[ch]) ) { codeset = mb_parse_codeset(state, num, &inbufptr, from_left); if (codeset != NULL) { length = len_left = codeset->length; mb = 0; continue; } } /* next char data : byteM ? */ if ((codeset = byteM_parse_codeset(lcd, (inbufptr - 1)))) goto next_mb_char; /* next char data : GL or GR side ? */ if ((codeset = GLGR_parse_codeset(ch))) goto next_mb_char; /* can't find codeset for the ch */ unconv_num++; continue; next_mb_char: length = len_left = codeset->length; mb = 0; output_one_mb: mb = (mb << 8) | ch; /* 1 byte left shift */ len_left--; /* last of one mb char data */ if (!len_left) { if (check_string_encoding(codeset)) { if (outbufptr) {*outbufptr++ = mb & 0xff;} (*to_left)--; } else { unconv_num++; } } } /* end of while */ /* error check on last char */ if (len_left) { inbufptr -= (length - len_left); (*from_left) += (length - len_left); unconv_num += (length - len_left); } *from = (XPointer) ((const char *) *from + from_size); *from_left = 0; *to = (XPointer) outbufptr; return unconv_num; } static int mbtocs( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { State state = (State) conv->state; XLCd lcd = state->lcd; unsigned char ch; unsigned long mb = 0; unsigned long glyph_index; int length = 0, len_left = 0, char_len; int unconv_num = 0; int num; XlcSide side; CodeSet codeset = NULL; XlcCharSet charset = NULL; const char *inbufptr; char *outbufptr = *to; int from_size = *from_left; unsigned char *mb_parse_table = XLC_GENERIC(lcd, mb_parse_table); if (from == NULL || *from == NULL) { _XlcResetConverter(conv); return( 0 ); } inbufptr = *from; while (*from_left && *to_left) { ch = *inbufptr++; (*from_left)--; /* null ? */ if (!ch) { unconv_num = 1; if (len_left) unconv_num += (length - len_left); break; } /* same mb char data */ if (len_left) goto output; /* next mb char data for single shift ? */ if (mb_parse_table && (num = mb_parse_table[ch]) ) { codeset = mb_parse_codeset(state, num, &inbufptr, from_left); if (codeset != NULL) { length = len_left = codeset->length; mb = 0; continue; } } /* next mb char data for byteM ? */ if ((codeset = byteM_parse_codeset(lcd, (inbufptr - 1)))) goto next_mb_char; /* next mb char data for GL or GR side ? */ if ((codeset = GLGR_parse_codeset(ch))) goto next_mb_char; /* can't find codeset for the ch */ unconv_num = 1; break; next_mb_char: length = len_left = codeset->length; mb = 0; output: mb = (mb << 8) | ch; /* 1 byte left shift */ len_left--; /* last of one mb char data */ if (!len_left) { glyph_index = mb_to_gi(mb, codeset); if (!(charset = gi_parse_charset(glyph_index, codeset))) { unconv_num = length; break; } char_len = charset->char_size; side = charset->side; /* output glyph index */ if (codeset->ctconv) glyph_index = conv_to_dest(codeset->ctconv, glyph_index); if (*to_left < char_len) { unconv_num = length; break; } if (outbufptr) { output_ulong_value(outbufptr, glyph_index, char_len, side); outbufptr += char_len; } (*to_left) -= char_len; break; } } /* end of while */ /* error end */ if (unconv_num) { *from = (XPointer) ((const char *) *from + from_size); *from_left = 0; *to = (XPointer) outbufptr; return -1; } /* normal end */ *from = (XPointer) inbufptr; *to = (XPointer) outbufptr; if (num_args > 0) *((XlcCharSet *) args[0]) = charset; return 0; } static int mbstocs( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { int ret; XlcCharSet charset_old, charset = NULL; XPointer tmp_args[1]; const char *inbufptr; int in_left; char *outbufptr; int out_left; tmp_args[0] = (XPointer) &charset; ret = mbtocs(conv, from, from_left, to, to_left, tmp_args, 1); charset_old = charset; while ( ret == 0 && *from_left && *to_left) { inbufptr = *from; in_left = *from_left; outbufptr = *to; out_left = *to_left; ret = mbtocs(conv, from, from_left, to, to_left, tmp_args, 1); if (charset_old != charset) { *from = (XPointer) inbufptr; *from_left = in_left; *to = (XPointer) outbufptr; *to_left = out_left; break; } } if (num_args > 0) *((XlcCharSet *) args[0]) = charset_old; /* error end */ if (ret != 0) return( -1 ); return(0); } static int wcstostr( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { State state = (State) conv->state; XLCd lcd = state->lcd; char *encoding; unsigned long mb, glyph_index; wchar_t wc; int length; int unconv_num = 0; CodeSet codeset; const wchar_t *inbufptr = (const wchar_t *) *from; char *outbufptr = *to; int from_size = *from_left; const char *default_string = XLC_PUBLIC(lcd, default_string); int defstr_len = strlen(default_string); while (*from_left && *to_left) { wc = *inbufptr++; (*from_left)--; /* null ? */ if (!wc) { if (outbufptr) {*outbufptr++ = '\0';} (*to_left)--; continue; } /* convert */ if ( !wc_to_gi(lcd, wc, &glyph_index, &codeset) ) { /* output default_string of XDefaultString() */ if (*to_left < defstr_len) break; if (outbufptr) { strncpy((char *)outbufptr, default_string, defstr_len); outbufptr += defstr_len; } (*to_left) -= defstr_len; unconv_num++; } else { mb = gi_to_mb(glyph_index, codeset); if (check_string_encoding(codeset)) { if (codeset->parse_info) { Bool need_shift = False; switch (codeset->parse_info->type) { case E_LSL : if (codeset != state->GL_codeset) { need_shift = True; state->GL_codeset = codeset; } break; case E_LSR : if (codeset != state->GR_codeset) { need_shift = True; state->GR_codeset = codeset; } break; /* case E_SS */ default: need_shift = True; } /* output shift sequence */ if (need_shift) { encoding = codeset->parse_info->encoding; length = strlen(encoding); if (*to_left < length) break; if (outbufptr) { strncpy((char *)outbufptr, encoding, length); outbufptr += length; } (*to_left) -= length; } } /* output characters */ length = codeset->length; if (*to_left < length) break; if (outbufptr) { output_ulong_value(outbufptr, mb, length, XlcNONE); outbufptr += length; } (*to_left) -= length; } else { unconv_num++; } } } /* end of while */ *from = (XPointer) ((const wchar_t *) *from + from_size); *from_left = 0; *to = (XPointer) outbufptr; return unconv_num; } static int stdc_wcstostr( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { XPointer buf = Xmalloc((*from_left) * MB_CUR_MAX); char *buf_ptr1 = buf; int buf_left1 = (*from_left) * MB_CUR_MAX; char *buf_ptr2 = buf_ptr1; int buf_left2; int unconv_num1 = 0, unconv_num2 = 0; unconv_num1 = stdc_wcstombs(conv, from, from_left, &buf_ptr1, &buf_left1, args, num_args); if (unconv_num1 < 0) goto ret; buf_left2 = buf_ptr1 - buf_ptr2; unconv_num2 = mbstostr(conv, &buf_ptr2, &buf_left2, to, to_left, args, num_args); if (unconv_num2 < 0) goto ret; ret: Xfree(buf); return (unconv_num1 + unconv_num2); } static int wctocs( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { State state = (State) conv->state; XLCd lcd = state->lcd; wchar_t wc; unsigned long glyph_index; int char_len; int unconv_num = 0; XlcSide side; CodeSet codeset; XlcCharSet charset = NULL; const wchar_t *inbufptr = (const wchar_t *) *from; char *outbufptr = *to; int from_size = *from_left; if (*from_left && *to_left) { wc = *inbufptr++; (*from_left)--; /* null ? */ if (!wc) { unconv_num = 1; goto end; } /* convert */ if ( !wc_to_gi(lcd, wc, &glyph_index, &codeset) ) { unconv_num = 1; goto end; } if ( !(charset = gi_parse_charset(glyph_index, codeset)) ) { unconv_num = 1; goto end; } char_len = charset->char_size; side = charset->side; /* output glyph index */ if (codeset->ctconv) glyph_index = conv_to_dest(codeset->ctconv, glyph_index); if (*to_left < char_len) { unconv_num++; goto end; } if (outbufptr) { output_ulong_value(outbufptr, glyph_index, char_len, side); outbufptr += char_len; } (*to_left) -= char_len; } end: /* error end */ if (unconv_num) { *from = (XPointer) ((const wchar_t *) *from + from_size); *from_left = 0; *to = (XPointer) outbufptr; return -1; } /* normal end */ *from = (XPointer) inbufptr; *to = (XPointer) outbufptr; if (num_args > 0) *((XlcCharSet *) args[0]) = charset; return 0; } static int stdc_wctocs( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { const wchar_t *src = *((const wchar_t **) from); wchar_t wch; XPointer tmp_from, save_from = *from; char tmp[32]; int length, ret, src_left = *from_left; int from_size = *from_left; if (src_left > 0 && *to_left > 0) { if ((wch = *src)) { length = wctomb(tmp, wch); } else { goto end; } if (length < 0) goto end; tmp_from = (XPointer) tmp; ret = mbtocs(conv, &tmp_from, &length, to, to_left, args, num_args); if (ret < 0) goto end; src++; src_left--; } end: /* error end */ if (save_from == (XPointer) src) { *from = (XPointer) ((const wchar_t *) *from + from_size); *from_left = 0; return -1; } /* normal end */ *from = (XPointer) src; *from_left = src_left; return 0; } static int wcstocs( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { int ret; XlcCharSet charset_old, charset = NULL; XPointer tmp_args[1]; const wchar_t *inbufptr; int in_left; XPointer outbufptr; int out_left; tmp_args[0] = (XPointer) &charset; ret = wctocs(conv, from, from_left, to, to_left, tmp_args, 1); charset_old = charset; while ( ret == 0 && *from_left && *to_left) { inbufptr = (const wchar_t *) *from; in_left = *from_left; outbufptr = *to; out_left = *to_left; ret = wctocs(conv, from, from_left, to, to_left, tmp_args, 1); if (charset_old != charset) { *from = (XPointer) inbufptr; *from_left = in_left; *to = (XPointer) outbufptr; *to_left = out_left; break; } } if (num_args > 0) *((XlcCharSet *) args[0]) = charset_old; /* error end */ if (ret != 0) return( -1 ); return(0); } #ifdef STDCVT static int stdc_wcstocs( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { int ret; XlcCharSet charset_old, charset = NULL; XPointer tmp_args[1]; const wchar_t *inbufptr; int in_left; XPointer outbufptr; int out_left; tmp_args[0] = (XPointer) &charset; ret = stdc_wctocs(conv, from, from_left, to, to_left, tmp_args, 1); charset_old = charset; while ( ret == 0 && *from_left && *to_left ) { inbufptr = (const wchar_t *) *from; in_left = *from_left; outbufptr = *to; out_left = *to_left; ret = stdc_wctocs(conv, from, from_left, to, to_left, tmp_args, 1); if (charset_old != charset) { *from = (XPointer) inbufptr; *from_left = in_left; *to = (XPointer) outbufptr; *to_left = out_left; break; } } if (num_args > 0) *((XlcCharSet *) args[0]) = charset_old; /* error end */ if (ret != 0) return( -1 ); return(0); } #endif static int ctstombs( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { XPointer buf = Xmalloc((*from_left) * sizeof(wchar_t)); char *buf_ptr1 = buf; int buf_left1 = (*from_left); char *buf_ptr2 = buf_ptr1; int buf_left2; int unconv_num1 = 0, unconv_num2 = 0; unconv_num1 = ctstowcs(conv, from, from_left, &buf_ptr1, &buf_left1, args, num_args); if (unconv_num1 < 0) goto ret; buf_left2 = (buf_ptr1 - buf_ptr2) / sizeof(wchar_t); unconv_num2 += wcstombs_org(conv, &buf_ptr2, &buf_left2, to, to_left, args, num_args); if (unconv_num2 < 0) goto ret; ret: Xfree(buf); return (unconv_num1 + unconv_num2); } static int cstombs( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { XPointer buf = Xmalloc((*from_left) * sizeof(wchar_t)); char *buf_ptr1 = buf; int buf_left1 = (*from_left); char *buf_ptr2 = buf_ptr1; int buf_left2; int unconv_num1 = 0, unconv_num2 = 0; unconv_num1 = cstowcs(conv, from, from_left, &buf_ptr1, &buf_left1, args, num_args); if (unconv_num1 < 0) goto ret; buf_left2 = (buf_ptr1 - buf_ptr2) / sizeof(wchar_t); unconv_num2 += wcstombs_org(conv, &buf_ptr2, &buf_left2, to, to_left, args, num_args); if (unconv_num2 < 0) goto ret; ret: Xfree(buf); return (unconv_num1 + unconv_num2); } static int strtombs( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { State state = (State) conv->state; XLCd lcd = state->lcd; char *encoding; unsigned long mb, glyph_index; unsigned char ch; int length; int unconv_num = 0; CodeSet codeset; const char *inbufptr = *from; char *outbufptr = *to; int from_size = *from_left; while (*from_left && *to_left) { ch = *inbufptr++; (*from_left)--; /* null ? */ if (!ch) { if (outbufptr) {*outbufptr++ = '\0';} (*to_left)--; continue; } /* convert */ if (isleftside(ch)) { glyph_index = ch; codeset = _XlcGetCodeSetFromName(lcd, "ISO8859-1:GL"); } else { glyph_index = ch & GL; codeset = _XlcGetCodeSetFromName(lcd, "ISO8859-1:GR"); } if (!codeset) { unconv_num++; continue; } mb = gi_to_mb(glyph_index, codeset); if (codeset->parse_info) { Bool need_shift = False; switch (codeset->parse_info->type) { case E_LSL : if (codeset != state->GL_codeset) { need_shift = True; state->GL_codeset = codeset; } break; case E_LSR : if (codeset != state->GR_codeset) { need_shift = True; state->GR_codeset = codeset; } break; /* case E_SS */ default: need_shift = True; } /* output shift sequence */ if (need_shift) { encoding = codeset->parse_info->encoding; length = strlen(encoding); if (*to_left < length) break; if (outbufptr) { strncpy((char *)outbufptr, encoding, length); outbufptr += length; } (*to_left) -= length; } } /* output characters */ length = codeset->length; if (*to_left < length) break; if (outbufptr) { output_ulong_value(outbufptr, mb, length, XlcNONE); outbufptr += length; } (*to_left) -= length; } /* end of while */ *from = (XPointer) ((const char *) *from + from_size); *from_left = 0; *to = (XPointer) outbufptr; return unconv_num; } static int strtowcs( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { State state = (State) conv->state; XLCd lcd = state->lcd; unsigned char ch; unsigned long glyph_index; wchar_t wc; int unconv_num = 0; CodeSet codeset; const char *inbufptr = *from; wchar_t *outbufptr = (wchar_t *)*to; int from_size = *from_left; while (*from_left && *to_left) { ch = *inbufptr++; (*from_left)--; /* null ? */ if (!ch) { if (outbufptr) {*outbufptr++ = L'\0';} (*to_left)--; continue; } /* convert */ if (isleftside(ch)) { glyph_index = ch; codeset = _XlcGetCodeSetFromName(lcd, "ISO8859-1:GL"); } else { glyph_index = ch & GL; codeset = _XlcGetCodeSetFromName(lcd, "ISO8859-1:GR"); } if (!codeset) { unconv_num++; continue; } gi_to_wc(lcd, glyph_index, codeset, &wc); if (outbufptr) {*outbufptr++ = wc;} (*to_left)--; } /* end of while */ *from = (XPointer) ((const char *) *from + from_size); *from_left = 0; *to = (XPointer) outbufptr; return unconv_num; } static int stdc_strtowcs( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { XPointer buf = Xmalloc((*from_left) * MB_CUR_MAX); char *buf_ptr1 = buf; int buf_left1 = (*from_left) * MB_CUR_MAX; char *buf_ptr2 = buf_ptr1; int buf_left2; int unconv_num1 = 0, unconv_num2 = 0; unconv_num1 = strtombs(conv, from, from_left, &buf_ptr1, &buf_left1, args, num_args); if (unconv_num1 < 0) goto ret; buf_left2 = buf_ptr1 - buf_ptr2; unconv_num2 = stdc_mbstowcs(conv, &buf_ptr2, &buf_left2, to, to_left, args, num_args); if (unconv_num2 < 0) goto ret; ret: Xfree(buf); return (unconv_num1 + unconv_num2); } /* -------------------------------------------------------------------------- */ /* Close */ /* -------------------------------------------------------------------------- */ static void close_converter( XlcConv conv) { Xfree(conv->state); Xfree(conv->methods); Xfree(conv); } /* -------------------------------------------------------------------------- */ /* Open */ /* -------------------------------------------------------------------------- */ static XlcConv create_conv( XLCd lcd, XlcConvMethods methods) { XlcConv conv; State state; conv = Xcalloc(1, sizeof(XlcConvRec)); if (conv == NULL) return (XlcConv) NULL; conv->methods = Xmalloc(sizeof(XlcConvMethodsRec)); if (conv->methods == NULL) goto err; *conv->methods = *methods; conv->methods->reset = init_state; conv->state = Xcalloc(1, sizeof(StateRec)); if (conv->state == NULL) goto err; state = (State) conv->state; state->lcd = lcd; _XlcResetConverter(conv); return conv; err: close_converter(conv); return (XlcConv) NULL; } static XlcConvMethodsRec mbstocts_methods = { close_converter, mbstocts, NULL }; static XlcConv open_mbstocts( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &mbstocts_methods); } static XlcConvMethodsRec mbstostr_methods = { close_converter, mbstostr, NULL }; static XlcConv open_mbstostr( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &mbstostr_methods); } static XlcConvMethodsRec mbstocs_methods = { close_converter, mbstocs, NULL }; static XlcConv open_mbstocs( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &mbstocs_methods); } static XlcConvMethodsRec mbtocs_methods = { close_converter, mbtocs, NULL }; static XlcConv open_mbtocs( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &mbtocs_methods); } static XlcConvMethodsRec ctstombs_methods = { close_converter, ctstombs, NULL }; static XlcConv open_ctstombs( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &ctstombs_methods); } static XlcConvMethodsRec cstombs_methods = { close_converter, cstombs, NULL }; static XlcConv open_cstombs( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &cstombs_methods); } static XlcConvMethodsRec strtombs_methods = { close_converter, strtombs, NULL }; static XlcConv open_strtombs( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &strtombs_methods); } #ifdef STDCVT static XlcConvMethodsRec stdc_mbstowcs_methods = { close_converter, stdc_mbstowcs, NULL }; static XlcConv open_stdc_mbstowcs( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &stdc_mbstowcs_methods); } static XlcConvMethodsRec stdc_wcstombs_methods = { close_converter, stdc_wcstombs, NULL }; static XlcConv open_stdc_wcstombs( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &stdc_wcstombs_methods); } static XlcConvMethodsRec stdc_wcstocts_methods = { close_converter, stdc_wcstocts, NULL }; static XlcConv open_stdc_wcstocts( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &stdc_wcstocts_methods); } static XlcConvMethodsRec stdc_wcstostr_methods = { close_converter, stdc_wcstostr, NULL }; static XlcConv open_stdc_wcstostr( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &stdc_wcstostr_methods); } static XlcConvMethodsRec stdc_wcstocs_methods = { close_converter, stdc_wcstocs, NULL }; static XlcConv open_stdc_wcstocs( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &stdc_wcstocs_methods); } static XlcConvMethodsRec stdc_wctocs_methods = { close_converter, stdc_wctocs, NULL }; static XlcConv open_stdc_wctocs( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &stdc_wctocs_methods); } static XlcConvMethodsRec stdc_ctstowcs_methods = { close_converter, stdc_ctstowcs, NULL }; static XlcConv open_stdc_ctstowcs( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &stdc_ctstowcs_methods); } static XlcConvMethodsRec stdc_cstowcs_methods = { close_converter, stdc_cstowcs, NULL }; static XlcConv open_stdc_cstowcs( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &stdc_cstowcs_methods); } static XlcConvMethodsRec stdc_strtowcs_methods = { close_converter, stdc_strtowcs, NULL }; static XlcConv open_stdc_strtowcs( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &stdc_strtowcs_methods); } #endif /* STDCVT */ static XlcConvMethodsRec mbstowcs_methods = { close_converter, mbstowcs_org, NULL }; static XlcConv open_mbstowcs( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &mbstowcs_methods); } static XlcConvMethodsRec wcstombs_methods = { close_converter, wcstombs_org, NULL }; static XlcConv open_wcstombs( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &wcstombs_methods); } static XlcConvMethodsRec wcstocts_methods = { close_converter, wcstocts, NULL }; static XlcConv open_wcstocts( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &wcstocts_methods); } static XlcConvMethodsRec wcstostr_methods = { close_converter, wcstostr, NULL }; static XlcConv open_wcstostr( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &wcstostr_methods); } static XlcConvMethodsRec wcstocs_methods = { close_converter, wcstocs, NULL }; static XlcConv open_wcstocs( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &wcstocs_methods); } static XlcConvMethodsRec wctocs_methods = { close_converter, wctocs, NULL }; static XlcConv open_wctocs( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &wctocs_methods); } static XlcConvMethodsRec ctstowcs_methods = { close_converter, ctstowcs, NULL }; static XlcConv open_ctstowcs( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &ctstowcs_methods); } static XlcConvMethodsRec cstowcs_methods = { close_converter, cstowcs, NULL }; static XlcConv open_cstowcs( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &cstowcs_methods); } static XlcConvMethodsRec strtowcs_methods = { close_converter, strtowcs, NULL }; static XlcConv open_strtowcs( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &strtowcs_methods); } /* -------------------------------------------------------------------------- */ /* Loader */ /* -------------------------------------------------------------------------- */ XLCd _XlcGenericLoader( const char *name) { XLCd lcd; #ifdef STDCVT XLCdGenericPart *gen; #endif lcd = _XlcCreateLC(name, _XlcGenericMethods); if (lcd == NULL) return lcd; default_GL_charset = _XlcGetCharSet("ISO8859-1:GL"); default_GR_charset = _XlcGetCharSet("ISO8859-1:GR"); _XlcSetConverter(lcd, XlcNMultiByte, lcd, XlcNCompoundText, open_mbstocts); _XlcSetConverter(lcd, XlcNMultiByte, lcd, XlcNString, open_mbstostr); _XlcSetConverter(lcd, XlcNMultiByte, lcd, XlcNCharSet, open_mbstocs); _XlcSetConverter(lcd, XlcNMultiByte, lcd, XlcNChar, open_mbtocs); _XlcSetConverter(lcd, XlcNCompoundText, lcd, XlcNMultiByte, open_ctstombs); _XlcSetConverter(lcd, XlcNString, lcd, XlcNMultiByte, open_strtombs); _XlcSetConverter(lcd, XlcNCharSet, lcd, XlcNMultiByte, open_cstombs); #ifdef STDCVT gen = XLC_GENERIC_PART(lcd); if (gen->use_stdc_env != True) { #endif _XlcSetConverter(lcd, XlcNMultiByte, lcd, XlcNWideChar, open_mbstowcs); _XlcSetConverter(lcd, XlcNWideChar, lcd, XlcNMultiByte, open_wcstombs); _XlcSetConverter(lcd, XlcNWideChar, lcd, XlcNCompoundText, open_wcstocts); _XlcSetConverter(lcd, XlcNWideChar, lcd, XlcNString, open_wcstostr); _XlcSetConverter(lcd, XlcNWideChar, lcd, XlcNCharSet, open_wcstocs); _XlcSetConverter(lcd, XlcNWideChar, lcd, XlcNChar, open_wctocs); _XlcSetConverter(lcd, XlcNCompoundText, lcd, XlcNWideChar, open_ctstowcs); _XlcSetConverter(lcd, XlcNString, lcd, XlcNWideChar, open_strtowcs); _XlcSetConverter(lcd, XlcNCharSet, lcd, XlcNWideChar, open_cstowcs); #ifdef STDCVT } #endif #ifdef STDCVT if (gen->use_stdc_env == True) { _XlcSetConverter(lcd, XlcNMultiByte, lcd, XlcNWideChar, open_stdc_mbstowcs); _XlcSetConverter(lcd, XlcNWideChar, lcd, XlcNMultiByte, open_stdc_wcstombs); _XlcSetConverter(lcd, XlcNWideChar, lcd, XlcNCompoundText, open_stdc_wcstocts); _XlcSetConverter(lcd, XlcNWideChar, lcd, XlcNString, open_stdc_wcstostr); _XlcSetConverter(lcd, XlcNWideChar, lcd, XlcNCharSet, open_stdc_wcstocs); _XlcSetConverter(lcd, XlcNWideChar, lcd, XlcNChar, open_stdc_wctocs); _XlcSetConverter(lcd, XlcNCompoundText, lcd, XlcNWideChar, open_stdc_ctstowcs); _XlcSetConverter(lcd, XlcNString, lcd, XlcNWideChar, open_stdc_strtowcs); _XlcSetConverter(lcd, XlcNCharSet, lcd, XlcNWideChar, open_stdc_cstowcs); } #endif _XlcAddUtf8Converters(lcd); return lcd; } lcConv) NULL; conv->methods = Xmalloc(sizeof(XlcConvMethodsRec)); if (conv->methods == NULL) goto err; *conv->methods = *methods; conv->methods->reset = init_state; conv->state = Xcalloc(1, sizeof(StateRec)); if (conv->state == NULL) goto err; state = (State) conv->state; state->lcd = lcd; _XlcResetConverter(conv); return conv; err: close_converter(conv); retlibX11-1.6.3/modules/lc/Utf8/Makefile.am000064401431060000012000000012521247741723500200060ustar00alancstaff00002660200006AM_CPPFLAGS= \ -I$(top_srcdir)/include \ -I$(top_srcdir)/include/X11 \ -I$(top_builddir)/include \ -I$(top_builddir)/include/X11 \ -I$(top_srcdir)/src/xcms \ -I$(top_srcdir)/src/xkb \ -I$(top_srcdir)/src/xlibi18n \ -D_BSD_SOURCE AM_CFLAGS= \ $(X11_CFLAGS) \ $(BIGFONT_CFLAGS) \ $(MALLOC_ZERO_CFLAGS) \ $(CWARNFLAGS) if XLIB_LOADABLE_I18N commonlibdir = $(X11_LOCALELIBDIR)/common commonlib_LTLIBRARIES=xlcUTF8Load.la xlcUTF8Load_la_LDFLAGS = -module -version-number 2:0:0 xlcUTF8Load_la_LIBADD = $(I18N_MODULE_LIBS) else noinst_LTLIBRARIES = libxlcUTF8Load.la endif xlcUTF8Load_la_SOURCES = \ lcUTF8Load.c libxlcUTF8Load_la_SOURCES = $(xlcUTF8Load_la_SOURCES) libX11-1.6.3/modules/lc/Utf8/lcUTF8Load.c000064401431060000012000000044261247741723500177710ustar00alancstaff00002660200006/****************************************************************** Copyright 1993 by SunSoft, Inc. Copyright 1999-2000 by Bruno Haible Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the names of SunSoft, Inc. and Bruno Haible not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. SunSoft, Inc. and Bruno Haible make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. SunSoft Inc. AND Bruno Haible DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SunSoft, Inc. OR Bruno Haible BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* * This file contains the UTF-8 locale loader. * Supports: all locales with codeset UTF-8. * Platforms: all systems. */ #ifdef HAVE_CONFIG_H #include #endif #include #include "Xlibint.h" #include "XlcPubI.h" #include "XlcGeneric.h" XLCd _XlcUtf8Loader( const char *name) { XLCd lcd; lcd = _XlcCreateLC(name, _XlcGenericMethods); if (lcd == (XLCd) NULL) return lcd; /* The official IANA name for UTF-8 is "UTF-8" in upper case with a dash. */ if (!XLC_PUBLIC_PART(lcd)->codeset) { _XlcDestroyLC(lcd); return (XLCd) NULL; } else if (!_XlcCompareISOLatin1(XLC_PUBLIC_PART(lcd)->codeset, "UTF-8")) { _XlcAddUtf8LocaleConverters(lcd); } else if (!_XlcCompareISOLatin1(XLC_PUBLIC_PART(lcd)->codeset, "GB18030")) { _XlcAddGB18030LocaleConverters(lcd); } else { _XlcDestroyLC(lcd); return (XLCd) NULL; } _XlcAddUtf8Converters(lcd); return lcd; } libX11-1.6.3/modules/lc/Utf8/Makefile.in000064401431060000012000000565151247741725500200350ustar00alancstaff00002660200006# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = modules/lc/Utf8 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_define_dir.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h \ $(top_builddir)/include/X11/XlibConf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(commonlibdir)" LTLIBRARIES = $(commonlib_LTLIBRARIES) $(noinst_LTLIBRARIES) libxlcUTF8Load_la_LIBADD = am__objects_1 = lcUTF8Load.lo am_libxlcUTF8Load_la_OBJECTS = $(am__objects_1) libxlcUTF8Load_la_OBJECTS = $(am_libxlcUTF8Load_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = @XLIB_LOADABLE_I18N_FALSE@am_libxlcUTF8Load_la_rpath = am__DEPENDENCIES_1 = @XLIB_LOADABLE_I18N_TRUE@xlcUTF8Load_la_DEPENDENCIES = \ @XLIB_LOADABLE_I18N_TRUE@ $(am__DEPENDENCIES_1) am_xlcUTF8Load_la_OBJECTS = lcUTF8Load.lo xlcUTF8Load_la_OBJECTS = $(am_xlcUTF8Load_la_OBJECTS) xlcUTF8Load_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(AM_CFLAGS) $(CFLAGS) $(xlcUTF8Load_la_LDFLAGS) $(LDFLAGS) -o \ $@ @XLIB_LOADABLE_I18N_TRUE@am_xlcUTF8Load_la_rpath = -rpath \ @XLIB_LOADABLE_I18N_TRUE@ $(commonlibdir) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src -I$(top_builddir)/include/X11 depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libxlcUTF8Load_la_SOURCES) $(xlcUTF8Load_la_SOURCES) DIST_SOURCES = $(libxlcUTF8Load_la_SOURCES) $(xlcUTF8Load_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASE_CFLAGS = @BASE_CFLAGS@ BIGFONT_CFLAGS = @BIGFONT_CFLAGS@ BIGFONT_LIBS = @BIGFONT_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHANGELOG_CMD = @CHANGELOG_CMD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ FOP = @FOP@ GREP = @GREP@ I18N_MODULE_LIBS = @I18N_MODULE_LIBS@ INSTALL = @INSTALL@ INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ KEYSYMDEFS = @KEYSYMDEFS@ LAUNCHD = @LAUNCHD@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LINT = @LINT@ LINTLIB = @LINTLIB@ LINT_FLAGS = @LINT_FLAGS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MALLOC_ZERO_CFLAGS = @MALLOC_ZERO_CFLAGS@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_SUBSTS = @MAN_SUBSTS@ MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RAWCPP = @RAWCPP@ RAWCPPFLAGS = @RAWCPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRICT_CFLAGS = @STRICT_CFLAGS@ STRIP = @STRIP@ STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ TRADITIONALCPPFLAGS = @TRADITIONALCPPFLAGS@ VERSION = @VERSION@ WCHAR32 = @WCHAR32@ X11_CFLAGS = @X11_CFLAGS@ X11_DATADIR = @X11_DATADIR@ X11_EXTRA_DEPS = @X11_EXTRA_DEPS@ X11_LIBDIR = @X11_LIBDIR@ X11_LIBS = @X11_LIBS@ X11_LOCALEDATADIR = @X11_LOCALEDATADIR@ X11_LOCALEDIR = @X11_LOCALEDIR@ X11_LOCALELIBDIR = @X11_LOCALELIBDIR@ XERRORDB = @XERRORDB@ XKBPROTO_REQUIRES = @XKBPROTO_REQUIRES@ XKEYSYMDB = @XKEYSYMDB@ XLOCALEDATADIR = @XLOCALEDATADIR@ XLOCALEDIR = @XLOCALEDIR@ XLOCALELIBDIR = @XLOCALELIBDIR@ XMALLOC_ZERO_CFLAGS = @XMALLOC_ZERO_CFLAGS@ XMLTO = @XMLTO@ XORG_MAN_PAGE = @XORG_MAN_PAGE@ XORG_SGML_PATH = @XORG_SGML_PATH@ XSLTPROC = @XSLTPROC@ XSL_STYLESHEET = @XSL_STYLESHEET@ XTHREADLIB = @XTHREADLIB@ XTHREAD_CFLAGS = @XTHREAD_CFLAGS@ XTMALLOC_ZERO_CFLAGS = @XTMALLOC_ZERO_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ locales = @locales@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = \ -I$(top_srcdir)/include \ -I$(top_srcdir)/include/X11 \ -I$(top_builddir)/include \ -I$(top_builddir)/include/X11 \ -I$(top_srcdir)/src/xcms \ -I$(top_srcdir)/src/xkb \ -I$(top_srcdir)/src/xlibi18n \ -D_BSD_SOURCE AM_CFLAGS = \ $(X11_CFLAGS) \ $(BIGFONT_CFLAGS) \ $(MALLOC_ZERO_CFLAGS) \ $(CWARNFLAGS) @XLIB_LOADABLE_I18N_TRUE@commonlibdir = $(X11_LOCALELIBDIR)/common @XLIB_LOADABLE_I18N_TRUE@commonlib_LTLIBRARIES = xlcUTF8Load.la @XLIB_LOADABLE_I18N_TRUE@xlcUTF8Load_la_LDFLAGS = -module -version-number 2:0:0 @XLIB_LOADABLE_I18N_TRUE@xlcUTF8Load_la_LIBADD = $(I18N_MODULE_LIBS) @XLIB_LOADABLE_I18N_FALSE@noinst_LTLIBRARIES = libxlcUTF8Load.la xlcUTF8Load_la_SOURCES = \ lcUTF8Load.c libxlcUTF8Load_la_SOURCES = $(xlcUTF8Load_la_SOURCES) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign modules/lc/Utf8/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign modules/lc/Utf8/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-commonlibLTLIBRARIES: $(commonlib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(commonlib_LTLIBRARIES)'; test -n "$(commonlibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(commonlibdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(commonlibdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(commonlibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(commonlibdir)"; \ } uninstall-commonlibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(commonlib_LTLIBRARIES)'; test -n "$(commonlibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(commonlibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(commonlibdir)/$$f"; \ done clean-commonlibLTLIBRARIES: -test -z "$(commonlib_LTLIBRARIES)" || rm -f $(commonlib_LTLIBRARIES) @list='$(commonlib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libxlcUTF8Load.la: $(libxlcUTF8Load_la_OBJECTS) $(libxlcUTF8Load_la_DEPENDENCIES) $(EXTRA_libxlcUTF8Load_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(am_libxlcUTF8Load_la_rpath) $(libxlcUTF8Load_la_OBJECTS) $(libxlcUTF8Load_la_LIBADD) $(LIBS) xlcUTF8Load.la: $(xlcUTF8Load_la_OBJECTS) $(xlcUTF8Load_la_DEPENDENCIES) $(EXTRA_xlcUTF8Load_la_DEPENDENCIES) $(AM_V_CCLD)$(xlcUTF8Load_la_LINK) $(am_xlcUTF8Load_la_rpath) $(xlcUTF8Load_la_OBJECTS) $(xlcUTF8Load_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcUTF8Load.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(commonlibdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-commonlibLTLIBRARIES clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-commonlibLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-commonlibLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-commonlibLTLIBRARIES clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-commonlibLTLIBRARIES install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am \ uninstall-commonlibLTLIBRARIES .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: fig.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.stlibX11-1.6.3/modules/lc/Makefile.in000064401431060000012000000471771247741725500172130ustar00alancstaff00002660200006# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = modules/lc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_define_dir.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h \ $(top_builddir)/include/X11/XlibConf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASE_CFLAGS = @BASE_CFLAGS@ BIGFONT_CFLAGS = @BIGFONT_CFLAGS@ BIGFONT_LIBS = @BIGFONT_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHANGELOG_CMD = @CHANGELOG_CMD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ FOP = @FOP@ GREP = @GREP@ I18N_MODULE_LIBS = @I18N_MODULE_LIBS@ INSTALL = @INSTALL@ INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ KEYSYMDEFS = @KEYSYMDEFS@ LAUNCHD = @LAUNCHD@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LINT = @LINT@ LINTLIB = @LINTLIB@ LINT_FLAGS = @LINT_FLAGS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MALLOC_ZERO_CFLAGS = @MALLOC_ZERO_CFLAGS@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_SUBSTS = @MAN_SUBSTS@ MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RAWCPP = @RAWCPP@ RAWCPPFLAGS = @RAWCPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRICT_CFLAGS = @STRICT_CFLAGS@ STRIP = @STRIP@ STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ TRADITIONALCPPFLAGS = @TRADITIONALCPPFLAGS@ VERSION = @VERSION@ WCHAR32 = @WCHAR32@ X11_CFLAGS = @X11_CFLAGS@ X11_DATADIR = @X11_DATADIR@ X11_EXTRA_DEPS = @X11_EXTRA_DEPS@ X11_LIBDIR = @X11_LIBDIR@ X11_LIBS = @X11_LIBS@ X11_LOCALEDATADIR = @X11_LOCALEDATADIR@ X11_LOCALEDIR = @X11_LOCALEDIR@ X11_LOCALELIBDIR = @X11_LOCALELIBDIR@ XERRORDB = @XERRORDB@ XKBPROTO_REQUIRES = @XKBPROTO_REQUIRES@ XKEYSYMDB = @XKEYSYMDB@ XLOCALEDATADIR = @XLOCALEDATADIR@ XLOCALEDIR = @XLOCALEDIR@ XLOCALELIBDIR = @XLOCALELIBDIR@ XMALLOC_ZERO_CFLAGS = @XMALLOC_ZERO_CFLAGS@ XMLTO = @XMLTO@ XORG_MAN_PAGE = @XORG_MAN_PAGE@ XORG_SGML_PATH = @XORG_SGML_PATH@ XSLTPROC = @XSLTPROC@ XSL_STYLESHEET = @XSL_STYLESHEET@ XTHREADLIB = @XTHREADLIB@ XTHREAD_CFLAGS = @XTHREAD_CFLAGS@ XTMALLOC_ZERO_CFLAGS = @XTMALLOC_ZERO_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ locales = @locales@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = Utf8 def gen all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign modules/lc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign modules/lc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = libX11-1.6.3/modules/lc/def/lcDefConv.c000064401431060000012000000376221247741723500177030ustar00alancstaff00002660200006/* * Copyright 1992, 1993 by TOSHIBA Corp. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of TOSHIBA not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. TOSHIBA make no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * * Author: Katsuhisa Yano TOSHIBA Corp. * mopi@osa.ilab.toshiba.co.jp */ /* * 2000 * Modifier: Ivan Pascal The XFree86 Project */ /* * The default locale loader. * Supports: one byte per char (iso8859 like) locales. * How: converts bytes to wide characters in a 1:1 manner. * Platforms: all systems. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "XlcGeneric.h" #ifndef MB_LEN_MAX #define MB_LEN_MAX 6 #endif #if !defined(Lynx_22) && !defined(X_LOCALE) #define STDCVT #endif #define GR 0x80 #define GL 0x7f typedef struct _StateRec *State; typedef struct _StateRec { CodeSet GL_codeset; CodeSet GR_codeset; wchar_t wc_mask; wchar_t wc_encode_mask; Bool (*MBtoWC) (State state, const char *ch, wchar_t *wc); Bool (*WCtoMB) (State state, wchar_t wc, char *ch); } StateRec; static Bool MBtoWCdef( State state, const char *ch, wchar_t *wc) { wchar_t wc_encoding; CodeSet codeset = (*ch & GR) ? state->GR_codeset : state->GL_codeset; if (!codeset) return False; wc_encoding = codeset->wc_encoding; *wc = ((wchar_t) *ch & state->wc_mask) | wc_encoding; return True; } #ifdef STDCVT static Bool MBtoWCstd( State state, const char *ch, wchar_t *wc) { return (mbtowc(wc, ch, 1) == 1); } #endif static Bool WCtoMBdef( State state, wchar_t wc, char *ch) { wchar_t wc_encoding = wc & state->wc_encode_mask; CodeSet codeset; codeset = state->GL_codeset; if (codeset && (wc_encoding == codeset->wc_encoding)) { *ch = wc & state->wc_mask; return True; } codeset = state->GR_codeset; if (codeset && (wc_encoding == codeset->wc_encoding)) { *ch = (wc & state->wc_mask) | GR; return True; } return False; } #ifdef STDCVT static Bool WCtoMBstd( State state, wchar_t wc, char *ch) { return (wctomb(ch, wc) == 1); } #endif static XlcCharSet get_charset( State state, char side) { CodeSet codeset = side ? state->GR_codeset : state->GL_codeset; if (codeset) { int i; XlcCharSet charset; for (i = 0; i < codeset->num_charsets; i++) { charset = codeset->charset_list[i]; if (*charset->ct_sequence != '\0') return charset; } return *(codeset->charset_list); } return (XlcCharSet) NULL; } static int def_mbstowcs( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { const char *src; wchar_t *dst = (wchar_t *) *to; State state = (State) conv->state; int unconv = 0; if (from == NULL || *from == NULL) return 0; src = (const char *) *from; while (*from_left && *to_left) { (*from_left)--; if (state->MBtoWC (state, src++, dst)) { dst++; (*to_left)--; } else { unconv++; } } *from = (XPointer) src; *to = (XPointer) dst; return unconv; } static int def_wcstombs( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { const wchar_t *src; char *dst = (char *) *to; State state = (State) conv->state; char ch[MB_LEN_MAX]; int unconv = 0; if (from == NULL || *from == NULL) return 0; src = (const wchar_t *) *from; while (*from_left && *to_left) { (*from_left)--; if (state->WCtoMB (state, *src++, ch)) { *dst++ = *ch; (*to_left)--; } else { unconv++; } } *from = (XPointer) src; *to = (XPointer) dst; return unconv; } static int mbstostr( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { const char *src; char *dst = (char *) *to; CodeSet codeset; State state = (State) conv->state; char ch; int unconv = 0; if (from == NULL || *from == NULL) return 0; src = (const char *) *from; while (*from_left && *to_left) { ch = *src++; (*from_left)--; codeset = (ch & GR) ? state->GR_codeset : state->GL_codeset; if (codeset && codeset->string_encoding) { *dst++ = ch; (*to_left)--; } else { unconv++; } } *from = (XPointer) src; *to = (XPointer) dst; return unconv; } static int wcstostr( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { const wchar_t *src; char *dst = (char *) *to; CodeSet codeset; State state = (State) conv->state; char ch[MB_LEN_MAX]; int unconv = 0; if (from == NULL || *from == NULL) return 0; src = (const wchar_t *) *from; while (*from_left && *to_left) { (*from_left)--; if (state->WCtoMB (state, *src++, ch)) { codeset = (*ch & GR) ? state->GR_codeset : state->GL_codeset; if (codeset && codeset->string_encoding) { *dst++ = *ch; (*to_left)--; } else { unconv++; } } else { unconv++; } } *from = (XPointer) src; *to = (XPointer) dst; return unconv; } static int mbstocs( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { const char *src; char *dst = (char *) *to; int length; State state = (State) conv->state; char cur_side; int unconv = 0; if (from == NULL || *from == NULL) return 0; src = (const char *) *from; length = min(*from_left, *to_left); cur_side = *src & GR; while (length) { if ((char) (*src & GR) != cur_side) break; *dst++ = *src++; length--; } if (num_args > 0) { XlcCharSet charset = get_charset(state, cur_side); if (charset) { *((XlcCharSet *) args[0]) = charset; } else { dst = *to; unconv = -1; } } *from_left -= src - (char *) *from; *to_left -= dst - (char *) *to; *from = (XPointer) src; *to = (XPointer) dst; return unconv; } static int wcstocs( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { const wchar_t *src; char *dst = (char *) *to; State state = (State) conv->state; char cur_side = 0, ch[MB_LEN_MAX]; int unconv = 0; Bool found = False; if (from == NULL || *from == NULL) return 0; src = (const wchar_t *) *from; while (*from_left) { if ((found = state->WCtoMB (state, *src, ch))) break; unconv++; src++; (*from_left)--; } if (found) { cur_side = *ch & GR; while (*from_left && *to_left) { (*from_left)--; if (state->WCtoMB (state, *src++, ch)) { if ((char) (*ch & GR) != cur_side) { src--; (*from_left)++; break; } else { *dst++ = *ch; (*to_left)--; } } else { unconv++; } } } else { unconv++; } if (num_args > 0) { XlcCharSet charset = get_charset(state, cur_side); if (charset) { *((XlcCharSet *) args[0]) = charset; } else { unconv = -1; } } *from = (XPointer) src; *to = (XPointer) dst; return unconv; } static int cstombs( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { const char *src; char *dst = (char *) *to; CodeSet codeset; XlcCharSet charset; State state = (State) conv->state; unsigned char cur_side = 0; int i; Bool found = False; if (from == NULL || *from == NULL) return 0; src = (const char *) *from; if (num_args > 0) { charset = (XlcCharSet) args[0]; if (charset == NULL) return -1; } else { return -1; } if ((charset->side == XlcGL) || (charset->side == XlcGLGR)) { codeset = state->GL_codeset; if (codeset) { for (i = 0; i < codeset->num_charsets; i++) if (charset == codeset->charset_list[i]) { found = True; cur_side = 0; break; } } } if (!found && ((charset->side == XlcGR) || (charset->side == XlcGLGR))) { codeset = state->GR_codeset; if (codeset) { for (i = 0; i < codeset->num_charsets; i++) if (charset == codeset->charset_list[i]) { found = True; cur_side = GR; break; } } } if (found) { int length = min(*from_left, *to_left); while (length) { *dst++ = *src++ | cur_side; length--; } } else { return -1; } *from_left -= src - (char *) *from; *to_left -= dst - (char *) *to; *from = (XPointer) src; *to = (XPointer) dst; return 0; } static int cstowcs( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { const char *src; wchar_t *dst = (wchar_t *) *to; CodeSet codeset; XlcCharSet charset; State state = (State) conv->state; Bool found = False; int i, unconv = 0; unsigned char cur_side = 0; if (from == NULL || *from == NULL) return 0; src = (const char *) *from; if (num_args > 0) { charset = (XlcCharSet) args[0]; if (charset == NULL) return -1; } else { return -1; } if ((charset->side == XlcGL) || (charset->side == XlcGLGR)) { codeset = state->GL_codeset; if (codeset) { for (i = 0; i < codeset->num_charsets; i++) if (charset == codeset->charset_list[i]) { found = True; cur_side = 0; break; } } } if (!found && ((charset->side == XlcGR) || (charset->side == XlcGLGR))) { codeset = state->GR_codeset; if (codeset) { for (i = 0; i < codeset->num_charsets; i++) if (charset == codeset->charset_list[i]) { found = True; cur_side = GR; break; } } } if (found) { char ch; while (*from_left && *to_left) { ch = *src++ | cur_side; (*from_left)--; if (state->MBtoWC (state, &ch, dst)) { dst++; (*to_left)--; } else { unconv++; } } } else { return -1; } *from = (XPointer) src; *to = (XPointer) dst; return unconv; } static int strtombs( XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { const char *src; char *dst = (char *) *to; int length; if (from == NULL || *from == NULL) return 0; src = (const char *) *from; length = min(*from_left, *to_left); while (length) { *dst++ = *src++; length--; } *from_left -= src - (char *) *from; *to_left -= dst - (char *) *to; *from = (XPointer) src; *to = (XPointer) dst; return 0; } static void close_converter( XlcConv conv) { Xfree(conv->state); Xfree(conv); } static XlcConv create_conv( XLCd lcd, XlcConvMethods methods) { XlcConv conv; State state; conv = Xcalloc(1, sizeof(XlcConvRec)); if (conv == NULL) return (XlcConv) NULL; state = Xmalloc(sizeof(StateRec)); if (state == NULL) { close_converter(conv); return (XlcConv) NULL; } state->GL_codeset = XLC_GENERIC(lcd, initial_state_GL); state->GR_codeset = XLC_GENERIC(lcd, initial_state_GR); state->wc_mask = (1 << XLC_GENERIC(lcd, wc_shift_bits)) - 1; state->wc_encode_mask = XLC_GENERIC(lcd, wc_encode_mask); #ifdef STDCVT if (XLC_GENERIC(lcd, use_stdc_env) == True) state->MBtoWC = &MBtoWCstd; else #endif state->MBtoWC = &MBtoWCdef; #ifdef STDCVT if (XLC_GENERIC(lcd, use_stdc_env) == True) state->WCtoMB = &WCtoMBstd; else #endif state->WCtoMB = &WCtoMBdef; conv->methods = methods; conv->state = (XPointer) state; return conv; } static XlcConvMethodsRec mbstowcs_methods = { close_converter, def_mbstowcs, NULL }; static XlcConv open_mbstowcs( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &mbstowcs_methods); } static XlcConvMethodsRec mbstostr_methods = { close_converter, mbstostr, NULL }; static XlcConv open_mbstostr( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &mbstostr_methods); } static XlcConvMethodsRec mbstocs_methods = { close_converter, mbstocs, NULL }; static XlcConv open_mbstocs( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &mbstocs_methods); } static XlcConvMethodsRec wcstombs_methods = { close_converter, def_wcstombs, NULL }; static XlcConv open_wcstombs( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &wcstombs_methods); } static XlcConvMethodsRec wcstostr_methods = { close_converter, wcstostr, NULL }; static XlcConv open_wcstostr( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &wcstostr_methods); } static XlcConvMethodsRec wcstocs_methods = { close_converter, wcstocs, NULL }; static XlcConv open_wcstocs( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &wcstocs_methods); } static XlcConvMethodsRec strtombs_methods = { close_converter, strtombs, NULL }; static XlcConv open_strtombs( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &strtombs_methods); } static XlcConvMethodsRec cstombs_methods = { close_converter, cstombs, NULL }; static XlcConv open_cstombs( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &cstombs_methods); } static XlcConvMethodsRec cstowcs_methods = { close_converter, cstowcs, NULL }; static XlcConv open_cstowcs( XLCd from_lcd, const char *from_type, XLCd to_lcd, const char *to_type) { return create_conv(from_lcd, &cstowcs_methods); } XLCd _XlcDefaultLoader( const char *name) { XLCd lcd; lcd = _XlcCreateLC(name, _XlcGenericMethods); if (lcd == NULL) return lcd; if (XLC_PUBLIC(lcd, mb_cur_max) != 1){ _XlcDestroyLC(lcd); return (XLCd) NULL; } _XlcSetConverter(lcd, XlcNMultiByte, lcd, XlcNWideChar, open_mbstowcs); _XlcSetConverter(lcd, XlcNMultiByte, lcd, XlcNString, open_mbstostr); _XlcSetConverter(lcd, XlcNMultiByte, lcd, XlcNCharSet, open_mbstocs); _XlcSetConverter(lcd, XlcNMultiByte, lcd, XlcNChar, open_mbstocs); _XlcSetConverter(lcd, XlcNWideChar, lcd, XlcNMultiByte, open_wcstombs); _XlcSetConverter(lcd, XlcNWideChar, lcd, XlcNString, open_wcstostr); _XlcSetConverter(lcd, XlcNWideChar, lcd, XlcNCharSet, open_wcstocs); _XlcSetConverter(lcd, XlcNString, lcd, XlcNMultiByte, open_strtombs); _XlcSetConverter(lcd, XlcNString, lcd, XlcNWideChar, open_mbstowcs); _XlcSetConverter(lcd, XlcNCharSet, lcd, XlcNMultiByte, open_cstombs); _XlcSetConverter(lcd, XlcNCharSet, lcd, XlcNWideChar, open_cstowcs); _XlcAddUtf8Converters(lcd); return lcd; } ing_encoding) { *dst++ = *ch; (*to_left)--; } else { unconv++; } } else { unconv++; } libX11-1.6.3/modules/lc/def/Makefile.am000064401431060000012000000011541247741723500177170ustar00alancstaff00002660200006AM_CPPFLAGS= \ -I$(top_srcdir)/include \ -I$(top_srcdir)/include/X11 \ -I$(top_builddir)/include \ -I$(top_builddir)/include/X11 \ -I$(top_srcdir)/src/xcms \ -I$(top_srcdir)/src/xkb \ -I$(top_srcdir)/src/xlibi18n \ -D_BSD_SOURCE AM_CFLAGS= \ $(X11_CFLAGS) \ $(BIGFONT_CFLAGS) \ $(CWARNFLAGS) if XLIB_LOADABLE_I18N commonlibdir = $(X11_LOCALELIBDIR)/common commonlib_LTLIBRARIES=xlcDef.la xlcDef_la_LDFLAGS = -module -version-number 2:0:0 xlcDef_la_LIBADD = $(I18N_MODULE_LIBS) else noinst_LTLIBRARIES = libxlcDef.la endif xlcDef_la_SOURCES = \ lcDefConv.c libxlcDef_la_SOURCES = $(xlcDef_la_SOURCES) libX11-1.6.3/modules/lc/def/Makefile.in000064401431060000012000000561201247741725500177350ustar00alancstaff00002660200006# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = modules/lc/def ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_define_dir.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h \ $(top_builddir)/include/X11/XlibConf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(commonlibdir)" LTLIBRARIES = $(commonlib_LTLIBRARIES) $(noinst_LTLIBRARIES) libxlcDef_la_LIBADD = am__objects_1 = lcDefConv.lo am_libxlcDef_la_OBJECTS = $(am__objects_1) libxlcDef_la_OBJECTS = $(am_libxlcDef_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = @XLIB_LOADABLE_I18N_FALSE@am_libxlcDef_la_rpath = am__DEPENDENCIES_1 = @XLIB_LOADABLE_I18N_TRUE@xlcDef_la_DEPENDENCIES = \ @XLIB_LOADABLE_I18N_TRUE@ $(am__DEPENDENCIES_1) am_xlcDef_la_OBJECTS = lcDefConv.lo xlcDef_la_OBJECTS = $(am_xlcDef_la_OBJECTS) xlcDef_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(xlcDef_la_LDFLAGS) $(LDFLAGS) -o $@ @XLIB_LOADABLE_I18N_TRUE@am_xlcDef_la_rpath = -rpath $(commonlibdir) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src -I$(top_builddir)/include/X11 depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libxlcDef_la_SOURCES) $(xlcDef_la_SOURCES) DIST_SOURCES = $(libxlcDef_la_SOURCES) $(xlcDef_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASE_CFLAGS = @BASE_CFLAGS@ BIGFONT_CFLAGS = @BIGFONT_CFLAGS@ BIGFONT_LIBS = @BIGFONT_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHANGELOG_CMD = @CHANGELOG_CMD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ FOP = @FOP@ GREP = @GREP@ I18N_MODULE_LIBS = @I18N_MODULE_LIBS@ INSTALL = @INSTALL@ INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ KEYSYMDEFS = @KEYSYMDEFS@ LAUNCHD = @LAUNCHD@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LINT = @LINT@ LINTLIB = @LINTLIB@ LINT_FLAGS = @LINT_FLAGS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MALLOC_ZERO_CFLAGS = @MALLOC_ZERO_CFLAGS@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_SUBSTS = @MAN_SUBSTS@ MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RAWCPP = @RAWCPP@ RAWCPPFLAGS = @RAWCPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRICT_CFLAGS = @STRICT_CFLAGS@ STRIP = @STRIP@ STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ TRADITIONALCPPFLAGS = @TRADITIONALCPPFLAGS@ VERSION = @VERSION@ WCHAR32 = @WCHAR32@ X11_CFLAGS = @X11_CFLAGS@ X11_DATADIR = @X11_DATADIR@ X11_EXTRA_DEPS = @X11_EXTRA_DEPS@ X11_LIBDIR = @X11_LIBDIR@ X11_LIBS = @X11_LIBS@ X11_LOCALEDATADIR = @X11_LOCALEDATADIR@ X11_LOCALEDIR = @X11_LOCALEDIR@ X11_LOCALELIBDIR = @X11_LOCALELIBDIR@ XERRORDB = @XERRORDB@ XKBPROTO_REQUIRES = @XKBPROTO_REQUIRES@ XKEYSYMDB = @XKEYSYMDB@ XLOCALEDATADIR = @XLOCALEDATADIR@ XLOCALEDIR = @XLOCALEDIR@ XLOCALELIBDIR = @XLOCALELIBDIR@ XMALLOC_ZERO_CFLAGS = @XMALLOC_ZERO_CFLAGS@ XMLTO = @XMLTO@ XORG_MAN_PAGE = @XORG_MAN_PAGE@ XORG_SGML_PATH = @XORG_SGML_PATH@ XSLTPROC = @XSLTPROC@ XSL_STYLESHEET = @XSL_STYLESHEET@ XTHREADLIB = @XTHREADLIB@ XTHREAD_CFLAGS = @XTHREAD_CFLAGS@ XTMALLOC_ZERO_CFLAGS = @XTMALLOC_ZERO_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ locales = @locales@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = \ -I$(top_srcdir)/include \ -I$(top_srcdir)/include/X11 \ -I$(top_builddir)/include \ -I$(top_builddir)/include/X11 \ -I$(top_srcdir)/src/xcms \ -I$(top_srcdir)/src/xkb \ -I$(top_srcdir)/src/xlibi18n \ -D_BSD_SOURCE AM_CFLAGS = \ $(X11_CFLAGS) \ $(BIGFONT_CFLAGS) \ $(CWARNFLAGS) @XLIB_LOADABLE_I18N_TRUE@commonlibdir = $(X11_LOCALELIBDIR)/common @XLIB_LOADABLE_I18N_TRUE@commonlib_LTLIBRARIES = xlcDef.la @XLIB_LOADABLE_I18N_TRUE@xlcDef_la_LDFLAGS = -module -version-number 2:0:0 @XLIB_LOADABLE_I18N_TRUE@xlcDef_la_LIBADD = $(I18N_MODULE_LIBS) @XLIB_LOADABLE_I18N_FALSE@noinst_LTLIBRARIES = libxlcDef.la xlcDef_la_SOURCES = \ lcDefConv.c libxlcDef_la_SOURCES = $(xlcDef_la_SOURCES) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign modules/lc/def/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign modules/lc/def/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-commonlibLTLIBRARIES: $(commonlib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(commonlib_LTLIBRARIES)'; test -n "$(commonlibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(commonlibdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(commonlibdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(commonlibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(commonlibdir)"; \ } uninstall-commonlibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(commonlib_LTLIBRARIES)'; test -n "$(commonlibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(commonlibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(commonlibdir)/$$f"; \ done clean-commonlibLTLIBRARIES: -test -z "$(commonlib_LTLIBRARIES)" || rm -f $(commonlib_LTLIBRARIES) @list='$(commonlib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libxlcDef.la: $(libxlcDef_la_OBJECTS) $(libxlcDef_la_DEPENDENCIES) $(EXTRA_libxlcDef_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(am_libxlcDef_la_rpath) $(libxlcDef_la_OBJECTS) $(libxlcDef_la_LIBADD) $(LIBS) xlcDef.la: $(xlcDef_la_OBJECTS) $(xlcDef_la_DEPENDENCIES) $(EXTRA_xlcDef_la_DEPENDENCIES) $(AM_V_CCLD)$(xlcDef_la_LINK) $(am_xlcDef_la_rpath) $(xlcDef_la_OBJECTS) $(xlcDef_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lcDefConv.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(commonlibdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-commonlibLTLIBRARIES clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-commonlibLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-commonlibLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-commonlibLTLIBRARIES clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-commonlibLTLIBRARIES install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am \ uninstall-commonlibLTLIBRARIES .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: modules/lc/def/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(tlibX11-1.6.3/modules/lc/Makefile.am000064401431060000012000000000251247741723500171550ustar00alancstaff00002660200006SUBDIRS=Utf8 def gen libX11-1.6.3/modules/Makefile.am000064401431060000012000000000211247741723500165530ustar00alancstaff00002660200006SUBDIRS=im lc om libX11-1.6.3/modules/om/Makefile.am000064401431060000012000000000201247741723500171650ustar00alancstaff00002660200006SUBDIRS=generic libX11-1.6.3/modules/om/generic/omXChar.c000064401431060000012000000230151247741723500202630ustar00alancstaff00002660200006/* * Copyright 1992, 1993 by TOSHIBA Corp. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of TOSHIBA not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. TOSHIBA make no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * * Author: Katsuhisa Yano TOSHIBA Corp. * mopi@osa.ilab.toshiba.co.jp */ /* * Copyright 1995 by FUJITSU LIMITED * This is source code modified by FUJITSU LIMITED under the Joint * Development Agreement for the CDE/Motif PST. * * Modifier: Takanori Tateno FUJITSU LIMITED * */ /* * Modifiers: Jeff Walls, Paul Anderson (HEWLETT-PACKARD) */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "XlcPublic.h" #include "XomGeneric.h" #include /* for VW/UDC start */ static Bool ismatch_scopes( FontData fontdata, unsigned long *value, Bool is_shift) { register int scopes_num = fontdata->scopes_num; FontScope scopes = fontdata->scopes; if (!scopes_num) return False; if(fontdata->font == NULL) return False; for(;scopes_num--;scopes++) if ((scopes->start <= (*value & 0x7f7f)) && ((scopes->end) >= (*value & 0x7f7f))){ if(is_shift == True) { if(scopes->shift){ if(scopes->shift_direction == '+'){ *value += scopes->shift ; } else if( scopes->shift_direction == '-'){ *value -= scopes->shift ; } } } return True; } return False; } static int check_vertical_fonttype( char *name) { char *ptr; int type = 0; if(name == (char *)NULL || (int) strlen(name) <= 0) return False; /* Obtains the pointer of CHARSET_ENCODING_FIELD. */ if((ptr = strchr(name, '-')) == (char *) NULL) return False; ptr++; /* Obtains the pointer of vertical_map font type. */ if((ptr = strchr(ptr, '.')) == (char *) NULL) return False; ptr++; switch(*ptr) { case '1': type = 1; break; case '2': type = 2; break; case '3': type = 3; break; } return type; } /* */ #define VMAP 0 #define VROTATE 1 #define FONTSCOPE 2 FontData _XomGetFontDataFromFontSet( FontSet fs, unsigned char *str, int len, int *len_ret, int is2b, int type) /* VMAP , VROTATE , else */ { unsigned long value; int num,i,hit,csize; FontData fontdata; unsigned char *c; int vfont_type; c = str; hit = -1; if(type == VMAP){ fontdata = fs->vmap; num = fs->vmap_num; } else if(type == VROTATE){ fontdata = (FontData)fs->vrotate; num = fs->vrotate_num; } else { if(fs->font_data_count <= 0 || fs->font_data == (FontData)NULL) { fontdata = fs->substitute; num = fs->substitute_num; }else { fontdata = fs->font_data; num = fs->font_data_count; } /* CDExc20229 fix */ if(fontdata == NULL || num == 0){ return(NULL); } } if(is2b){ csize = 2; } else { csize = 1; } for(;len;len--){ if(is2b){ value = (((unsigned long)*c) << 8)|(unsigned long)*(c + 1); } else { value = (unsigned long)*c; } /* ### NOTE: This routine DOES NOT WORK! * ### We can work around the problem in the calling routine, * ### but we really need to understand this better. As it * ### stands, the algorithm ALWAYS returns "fontdata[0]" * ### for non-VW text! This is clearly wrong. In fact, * ### given the new parse_font[name|data]() algorithms, * ### we may not even need this routine to do anything * ### for non-VW text (since font_set->font always contains * ### the best font for this fontset). -- jjw/pma (HP) */ for (i=0;ifont_data_count <= 0 || fs->font_data == (FontData)NULL) fontdata = fs->substitute; else fontdata = fs->font_data; /* Change 1996.01.23 end */ } hit = 0; c += csize; break; } if( hit == -1 ) hit = i; if(is2b){ *c = (unsigned char)(value >> 8); *(c + 1) = (unsigned char)(value); } else { *c = (unsigned char)value; } c += csize; } *len_ret = (c - str); return(&(fontdata[hit])); } /* for VW/UDC end */ static FontSet _XomGetFontSetFromCharSet( XOC oc, XlcCharSet charset) { register FontSet font_set = XOC_GENERIC(oc)->font_set; register int num = XOC_GENERIC(oc)->font_set_num; XlcCharSet *charset_list; int charset_count; for ( ; num-- > 0; font_set++) { charset_count = font_set->charset_count; charset_list = font_set->charset_list; for ( ; charset_count-- > 0; charset_list++) if (*charset_list == charset) return font_set; } return (FontSet) NULL; } static void shift_to_gl( register char *text, register int length) { while (length-- > 0) *text++ &= 0x7f; } static void shift_to_gr( register char *text, register int length) { while (length-- > 0) *text++ |= 0x80; } static Bool load_font( XOC oc, FontSet font_set) { font_set->font = XLoadQueryFont(oc->core.om->core.display, oc->core.font_info.font_name_list[font_set->id]); if (font_set->font == NULL) return False; oc->core.font_info.font_struct_list[font_set->id] = font_set->font; XFreeFontInfo(NULL, font_set->info, 1); font_set->info = NULL; if (font_set->font->min_byte1 || font_set->font->max_byte1) font_set->is_xchar2b = True; else font_set->is_xchar2b = False; return True; } int _XomConvert( XOC oc, XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args) { XPointer cs, lc_args[1]; XlcCharSet charset; int length, cs_left, ret; FontSet font_set; cs = *to; cs_left = *to_left; lc_args[0] = (XPointer) &charset; ret = _XlcConvert(conv, from, from_left, &cs, &cs_left, lc_args, 1); if (ret < 0) return -1; font_set = _XomGetFontSetFromCharSet(oc, charset); if (font_set == NULL) return -1; if (font_set->font == NULL && load_font(oc, font_set) == False) return -1; length = *to_left - cs_left; if (font_set->side != charset->side) { if (font_set->side == XlcGL) shift_to_gl(*to, length); else if (font_set->side == XlcGR) shift_to_gr(*to, length); } if (font_set->is_xchar2b) length >>= 1; *to = cs; *to_left -= length; *((XFontStruct **) args[0]) = font_set->font; *((Bool *) args[1]) = font_set->is_xchar2b; if(num_args >= 3){ *((FontSet *) args[2]) = font_set; } return ret; } XlcConv _XomInitConverter( XOC oc, XOMTextType type) { XOCGenericPart *gen = XOC_GENERIC(oc); XlcConv *convp; const char *conv_type; XlcConv conv; XLCd lcd; switch (type) { case XOMWideChar: convp = &gen->wcs_to_cs; conv_type = XlcNWideChar; break; case XOMMultiByte: convp = &gen->mbs_to_cs; conv_type = XlcNMultiByte; break; case XOMUtf8String: convp = &gen->utf8_to_cs; conv_type = XlcNUtf8String; break; default: return (XlcConv) NULL; } conv = *convp; if (conv) { _XlcResetConverter(conv); return conv; } lcd = oc->core.om->core.lcd; conv = _XlcOpenConverter(lcd, conv_type, lcd, XlcNFontCharSet); if (conv == (XlcConv) NULL) { conv = _XlcOpenConverter(lcd, conv_type, lcd, XlcNCharSet); if (conv == (XlcConv) NULL) return (XlcConv) NULL; } *convp = conv; return conv; } ate; num = fs->vrotate_num; } else { if(fs->font_data_count <= 0 || fs->font_data == (FontData)NULL) { fontdata = fs->substitute; num = fs->substitute_num; }else { fontdata = fs->font_data; num = fs->font_data_count; } /* CDExc20229 fix */ if(fontdata == NULL || num == 0){ return(NULL); } } if(is2b){ csize = 2; } else { csize = 1; } for(;len;len--){ if(is2b){ value = (((unsigned libX11-1.6.3/modules/om/generic/omTextEsc.c000064401431060000012000000170361247741723500206430ustar00alancstaff00002660200006/* * Copyright 1992, 1993 by TOSHIBA Corp. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of TOSHIBA not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. TOSHIBA make no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * * Author: Katsuhisa Yano TOSHIBA Corp. * mopi@osa.ilab.toshiba.co.jp */ /* * Copyright 1995 by FUJITSU LIMITED * This is source code modified by FUJITSU LIMITED under the Joint * Development Agreement for the CDE/Motif PST. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "XomGeneric.h" #include /* For VW/UDC start */ #define VMAP 0 #define VROTATE 1 #define FONTSCOPE 2 static int is_rotate( XOC oc, XFontStruct *font) { XOCGenericPart *gen = XOC_GENERIC(oc); FontSet font_set; VRotate vrotate; int font_set_count; int vrotate_num; font_set = gen->font_set; font_set_count = gen->font_set_num; for( ; font_set_count-- ; font_set++) { if((font_set->vrotate_num > 0) && (font_set->vrotate != NULL)) { vrotate = font_set->vrotate; vrotate_num = font_set->vrotate_num; for( ; vrotate_num-- ; vrotate++) if(vrotate->font == font) return True; } } return False; } static int is_codemap( XOC oc, XFontStruct *font) { XOCGenericPart *gen = XOC_GENERIC(oc); FontSet font_set; FontData vmap; int font_set_count; int vmap_num; font_set = gen->font_set; font_set_count = gen->font_set_num; for( ; font_set_count-- ; font_set++) { if(font_set->vmap_num > 0) { vmap = font_set->vmap; vmap_num = font_set->vmap_num; for( ; vmap_num-- ; vmap++) if(vmap->font == font) return True; } } return False; } static int escapement_vertical( XOC oc, XFontStruct *font, Bool is_xchar2b, XPointer text, int length) { XChar2b *buf2b; char *buf; int escapement = 0, i; if(is_xchar2b) { for(i = 0, buf2b = (XChar2b *) text ; i < length ; i++, buf2b++) { if(is_rotate(oc, font) == True) { escapement += _XTextHeight16(font, buf2b, 1); } else { escapement += (int) (font->max_bounds.ascent + font->max_bounds.descent); } } } else { for(i = 0, buf = (char *)text ; i < length && *buf ; i++, buf++) { if(is_rotate(oc, font) == True) { escapement += _XTextHeight(font, buf, 1); } else { escapement += (int) (font->max_bounds.ascent + font->max_bounds.descent); } } } return escapement; } static int TextWidthWithFontSet( FontSet font_set, XOC oc, XPointer text, int length) { FontData fd; XFontStruct *font; unsigned char *ptr = (unsigned char *)text; Bool is_xchar2b; int ptr_len = length; int escapement = 0, char_len = 0; if(font_set == (FontSet) NULL) return escapement; is_xchar2b = font_set->is_xchar2b; while(length > 0) { fd = _XomGetFontDataFromFontSet(font_set, ptr, length, &ptr_len, is_xchar2b, FONTSCOPE); if(ptr_len <= 0) break; /* * First, see if the "Best Match" font for the FontSet was set. * If it was, use that font. If it was not set, then use the * font defined by font_set->font_data[0] (which is what * _XomGetFontDataFromFontSet() always seems to return for * non-VW text). Note that given the new algorithm in * parse_fontname() and parse_fontdata(), fs->font will * *always* contain good data. We should probably remove * the check for "fd->font", but we won't :-) -- jjw/pma (HP) * * Above comment and way this is done propagated from omText.c * Note that fd->font is junk so using the result of the * above call /needs/ to be ignored. * * Owen Taylor 12 Jul 2000 * */ if(fd == (FontData) NULL || (font = font_set->font) == (XFontStruct *) NULL) { if((font = fd->font) == (XFontStruct *) NULL) break; } switch(oc->core.orientation) { case XOMOrientation_LTR_TTB: case XOMOrientation_RTL_TTB: if (is_xchar2b) { char_len = ptr_len / sizeof(XChar2b); escapement += XTextWidth16(font, (XChar2b *)ptr, char_len); } else { char_len = ptr_len; escapement += XTextWidth(font, (char *)ptr, char_len); } break; case XOMOrientation_TTB_LTR: case XOMOrientation_TTB_RTL: if(font_set->font == font) { fd = _XomGetFontDataFromFontSet(font_set, ptr, length, &ptr_len, is_xchar2b, VMAP); if(ptr_len <= 0) break; if(fd == (FontData) NULL || (font = fd->font) == (XFontStruct *) NULL) break; if(is_codemap(oc, fd->font) == False) { fd = _XomGetFontDataFromFontSet(font_set, ptr, length, &ptr_len, is_xchar2b, VROTATE); if(ptr_len <= 0) break; if(fd == (FontData) NULL || (font = fd->font) == (XFontStruct *) NULL) break; } } if(is_xchar2b) char_len = ptr_len / sizeof(XChar2b); else char_len = ptr_len; escapement += escapement_vertical(oc, font, is_xchar2b, (XPointer) ptr, char_len); break; case XOMOrientation_Context: /* not used? */ break; } if(char_len <= 0) break; length -= char_len; ptr += ptr_len; } return escapement; } /* For VW/UDC end */ static int _XomGenericTextEscapement( XOC oc, XOMTextType type, XPointer text, int length) { XlcConv conv; XFontStruct *font; Bool is_xchar2b; /* VW/UDC */ XPointer args[3]; FontSet font_set; /* VW/UDC */ XChar2b xchar2b_buf[BUFSIZ], *buf; int escapement = 0; int buf_len = 0, left = 0; conv = _XomInitConverter(oc, type); if (conv == NULL) return escapement; args[0] = (XPointer) &font; args[1] = (XPointer) &is_xchar2b; args[2] = (XPointer) &font_set; while (length > 0) { buf = xchar2b_buf; left = buf_len = BUFSIZ; if (_XomConvert(oc, conv, (XPointer *) &text, &length, (XPointer *) &buf, &left, args, 3) < 0) break; buf_len -= left; /* VW/UDC */ escapement += TextWidthWithFontSet(font_set, oc, (XPointer) xchar2b_buf, buf_len); /* VW/UDC */ } return escapement; } int _XmbGenericTextEscapement(XOC oc, _Xconst char *text, int length) { return _XomGenericTextEscapement(oc, XOMMultiByte, (XPointer) text, length); } int _XwcGenericTextEscapement(XOC oc, _Xconst wchar_t *text, int length) { return _XomGenericTextEscapement(oc, XOMWideChar, (XPointer) text, length); } int _Xutf8GenericTextEscapement(XOC oc, _Xconst char *text, int length) { return _XomGenericTextEscapement(oc, XOMUtf8String, (XPointer) text, length); } te_num; for( ; vrotate_num-- ; vrotate++) if(vrotate->font == font) return True; } } return False; } static int is_codemap( XOC oc, XFontStruct *font) { XOCGenericPart *gen = XOC_GENERIC(oc); FontSet font_set; FontData vmap; int font_set_count; int vmap_num; font_set = gen->font_set; font_set_count = gen->font_set_num; for( ; font_set_count-- ; fonlibX11-1.6.3/modules/om/generic/omDefault.c000064401431060000012000000242331247741723500206450ustar00alancstaff00002660200006/* * Copyright 1992, 1993 by TOSHIBA Corp. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of TOSHIBA not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. TOSHIBA make no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * * Author: Katsuhisa Yano TOSHIBA Corp. * mopi@osa.ilab.toshiba.co.jp */ /* * (c) Copyright 1995 FUJITSU LIMITED * This is source code modified by FUJITSU LIMITED under the Joint * Development Agreement for the CDE/Motif PST. */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "XomGeneric.h" #include #include #include #define DefineLocalBuf char local_buf[BUFSIZ] #define AllocLocalBuf(length) (length > BUFSIZ ? (char *)Xmalloc(length) : local_buf) #define FreeLocalBuf(ptr) if (ptr != local_buf) Xfree(ptr) static Bool wcs_to_mbs( XOC oc, char *to, _Xconst wchar_t *from, int length) { XlcConv conv; int to_left, ret; conv = _XomInitConverter(oc, XOMWideChar); if (conv == NULL) return False; to_left = length; ret = _XlcConvert(conv, (XPointer *) &from, &length, (XPointer *) &to, &to_left, NULL, 0); if (ret != 0 || length > 0) return False; return True; } static Bool utf8_to_mbs( XOC oc, char *to, _Xconst char *from, int length) { XlcConv conv; int to_left, ret; conv = _XomInitConverter(oc, XOMUtf8String); if (conv == NULL) return False; to_left = length; ret = _XlcConvert(conv, (XPointer *) &from, &length, (XPointer *) &to, &to_left, NULL, 0); if (ret != 0 || length > 0) return False; return True; } int _XmbDefaultTextEscapement(XOC oc, _Xconst char *text, int length) { return XTextWidth(*oc->core.font_info.font_struct_list, text, length); } int _XwcDefaultTextEscapement(XOC oc, _Xconst wchar_t *text, int length) { DefineLocalBuf; char *buf = AllocLocalBuf(length); int ret; if (buf == NULL) return 0; if (wcs_to_mbs(oc, buf, text, length) == False) { ret = 0; goto err; } ret = _XmbDefaultTextEscapement(oc, buf, length); err: FreeLocalBuf(buf); return ret; } int _Xutf8DefaultTextEscapement(XOC oc, _Xconst char *text, int length) { DefineLocalBuf; char *buf = AllocLocalBuf(length); int ret; if (buf == NULL) return 0; if (utf8_to_mbs(oc, buf, text, length) == False) { ret = 0; goto err; } ret = _XmbDefaultTextEscapement(oc, buf, length); err: FreeLocalBuf(buf); return ret; } int _XmbDefaultTextExtents(XOC oc, _Xconst char *text, int length, XRectangle *overall_ink, XRectangle *overall_logical) { int direction, logical_ascent, logical_descent; XCharStruct overall; XTextExtents(*oc->core.font_info.font_struct_list, text, length, &direction, &logical_ascent, &logical_descent, &overall); if (overall_ink) { overall_ink->x = overall.lbearing; overall_ink->y = -(overall.ascent); overall_ink->width = overall.rbearing - overall.lbearing; overall_ink->height = overall.ascent + overall.descent; } if (overall_logical) { overall_logical->x = 0; overall_logical->y = -(logical_ascent); overall_logical->width = overall.width; overall_logical->height = logical_ascent + logical_descent; } return overall.width; } int _XwcDefaultTextExtents(XOC oc, _Xconst wchar_t *text, int length, XRectangle *overall_ink, XRectangle *overall_logical) { DefineLocalBuf; char *buf = AllocLocalBuf(length); int ret; if (buf == NULL) return 0; if (wcs_to_mbs(oc, buf, text, length) == False) { ret = 0; goto err; } ret = _XmbDefaultTextExtents(oc, buf, length, overall_ink, overall_logical); err: FreeLocalBuf(buf); return ret; } int _Xutf8DefaultTextExtents(XOC oc, _Xconst char *text, int length, XRectangle *overall_ink, XRectangle *overall_logical) { DefineLocalBuf; char *buf = AllocLocalBuf(length); int ret; if (buf == NULL) return 0; if (utf8_to_mbs(oc, buf, text, length) == False) { ret = 0; goto err; } ret = _XmbDefaultTextExtents(oc, buf, length, overall_ink, overall_logical); err: FreeLocalBuf(buf); return ret; } Status _XmbDefaultTextPerCharExtents(XOC oc, _Xconst char *text, int length, XRectangle *ink_buf, XRectangle *logical_buf, int buf_size, int *num_chars, XRectangle *overall_ink, XRectangle *overall_logical) { XFontStruct *font = *oc->core.font_info.font_struct_list; XCharStruct *def, *cs, overall; Bool first = True; if (buf_size < length) return 0; bzero((char *) &overall, sizeof(XCharStruct)); *num_chars = 0; CI_GET_DEFAULT_INFO_1D(font, def) while (length-- > 0) { CI_GET_CHAR_INFO_1D(font, *text, def, cs) text++; if (cs == NULL) continue; ink_buf->x = overall.width + cs->lbearing; ink_buf->y = -(cs->ascent); ink_buf->width = cs->rbearing - cs->lbearing; ink_buf->height = cs->ascent + cs->descent; ink_buf++; logical_buf->x = overall.width; logical_buf->y = -(font->ascent); logical_buf->width = cs->width; logical_buf->height = font->ascent + font->descent; logical_buf++; if (first) { overall = *cs; first = False; } else { overall.ascent = max(overall.ascent, cs->ascent); overall.descent = max(overall.descent, cs->descent); overall.lbearing = min(overall.lbearing, overall.width + cs->lbearing); overall.rbearing = max(overall.rbearing, overall.width + cs->rbearing); overall.width += cs->width; } (*num_chars)++; } if (overall_ink) { overall_ink->x = overall.lbearing; overall_ink->y = -(overall.ascent); overall_ink->width = overall.rbearing - overall.lbearing; overall_ink->height = overall.ascent + overall.descent; } if (overall_logical) { overall_logical->x = 0; overall_logical->y = -(font->ascent); overall_logical->width = overall.width; overall_logical->height = font->ascent + font->descent; } return 1; } Status _XwcDefaultTextPerCharExtents(XOC oc, _Xconst wchar_t *text, int length, XRectangle *ink_buf, XRectangle *logical_buf, int buf_size, int *num_chars, XRectangle *overall_ink, XRectangle *overall_logical) { DefineLocalBuf; char *buf = AllocLocalBuf(length); Status ret; if (buf == NULL) return 0; if (wcs_to_mbs(oc, buf, text, length) == False) { ret = 0; goto err; } ret = _XmbDefaultTextPerCharExtents(oc, buf, length, ink_buf, logical_buf, buf_size, num_chars, overall_ink, overall_logical); err: FreeLocalBuf(buf); return ret; } Status _Xutf8DefaultTextPerCharExtents(XOC oc, _Xconst char *text, int length, XRectangle *ink_buf, XRectangle *logical_buf, int buf_size, int *num_chars, XRectangle *overall_ink, XRectangle *overall_logical) { DefineLocalBuf; char *buf = AllocLocalBuf(length); Status ret; if (buf == NULL) return 0; if (utf8_to_mbs(oc, buf, text, length) == False) { ret = 0; goto err; } ret = _XmbDefaultTextPerCharExtents(oc, buf, length, ink_buf, logical_buf, buf_size, num_chars, overall_ink, overall_logical); err: FreeLocalBuf(buf); return ret; } int _XmbDefaultDrawString(Display *dpy, Drawable d, XOC oc, GC gc, int x, int y, _Xconst char *text, int length) { XFontStruct *font = *oc->core.font_info.font_struct_list; XSetFont(dpy, gc, font->fid); XDrawString(dpy, d, gc, x, y, text, length); return XTextWidth(font, text, length); } int _XwcDefaultDrawString(Display *dpy, Drawable d, XOC oc, GC gc, int x, int y, _Xconst wchar_t *text, int length) { DefineLocalBuf; char *buf = AllocLocalBuf(length); int ret; if (buf == NULL) return 0; if (wcs_to_mbs(oc, buf, text, length) == False) { ret = 0; goto err; } ret = _XmbDefaultDrawString(dpy, d, oc, gc, x, y, buf, length); err: FreeLocalBuf(buf); return ret; } int _Xutf8DefaultDrawString(Display *dpy, Drawable d, XOC oc, GC gc, int x, int y, _Xconst char *text, int length) { DefineLocalBuf; char *buf = AllocLocalBuf(length); int ret; if (buf == NULL) return 0; if (utf8_to_mbs(oc, buf, text, length) == False) { ret = 0; goto err; } ret = _XmbDefaultDrawString(dpy, d, oc, gc, x, y, buf, length); err: FreeLocalBuf(buf); return ret; } void _XmbDefaultDrawImageString(Display *dpy, Drawable d, XOC oc, GC gc, int x, int y, _Xconst char *text, int length) { XSetFont(dpy, gc, (*oc->core.font_info.font_struct_list)->fid); XDrawImageString(dpy, d, gc, x, y, text, length); } void _XwcDefaultDrawImageString(Display *dpy, Drawable d, XOC oc, GC gc, int x, int y, _Xconst wchar_t *text, int length) { DefineLocalBuf; char *buf = AllocLocalBuf(length); if (buf == NULL) return; if (wcs_to_mbs(oc, buf, text, length) == False) goto err; _XmbDefaultDrawImageString(dpy, d, oc, gc, x, y, buf, length); err: FreeLocalBuf(buf); } void _Xutf8DefaultDrawImageString(Display *dpy, Drawable d, XOC oc, GC gc, int x, int y, _Xconst char *text, int length) { DefineLocalBuf; char *buf = AllocLocalBuf(length); if (buf == NULL) return; if (utf8_to_mbs(oc, buf, text, length) == False) goto err; _XmbDefaultDrawImageString(dpy, d, oc, gc, x, y, buf, length); err: FreeLocalBuf(buf); } f (buf == NULL) return 0; if (utf8_to_mbs(oc, buf, text, length) == False) { ret = 0; goto err; } ret = _XmbDefaultTextEscapement(oc, buf, length); err: FreeLocalBuf(buf); return ret; } int _XmbDefaultTextExtents(XOC oc, _Xconst char *text, int length, XRectangle *overall_ink, XRectangle *overall_logical) { int dirlibX11-1.6.3/modules/om/generic/omGeneric.c000064401431060000012000001524321247741723500206400ustar00alancstaff00002660200006/* #define FONTDEBUG */ /* * Copyright 1992, 1993 by TOSHIBA Corp. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of TOSHIBA not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. TOSHIBA make no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * * Author: Katsuhisa Yano TOSHIBA Corp. * mopi@osa.ilab.toshiba.co.jp */ /* * Copyright 1995 by FUJITSU LIMITED * This is source code modified by FUJITSU LIMITED under the Joint * Development Agreement for the CDE/Motif PST. * * Modifier: Takanori Tateno FUJITSU LIMITED * */ /* * Fixed the algorithms in parse_fontname() and parse_fontdata() * to improve the logic for determining which font should be * returned for a given CharSet. We even added some comments * so that you can figure out what in the heck we're doing. We * realize this is a departure from the norm, but hey, we're * rebels! :-) :-) * * Modifiers: Jeff Walls, Paul Anderson: HEWLETT-PACKARD */ /* * Cleaned up mess, removed some blabla * Egbert Eich, SuSE Linux AG */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "XomGeneric.h" #include "XlcGeneric.h" #include #include #include #include #include #define MAXFONTS 100 #define PIXEL_SIZE_FIELD 7 #define POINT_SIZE_FIELD 8 #define CHARSET_ENCODING_FIELD 14 #define XLFD_MAX_LEN 255 #if 0 extern int _XmbDefaultTextEscapement(), _XwcDefaultTextEscapement(), _Xutf8DefaultTextEscapement(); extern int _XmbDefaultTextExtents(), _XwcDefaultTextExtents(), _Xutf8DefaultTextExtents(); extern Status _XmbDefaultTextPerCharExtents(), _XwcDefaultTextPerCharExtents(), _Xutf8DefaultTextPerCharExtents(); extern int _XmbDefaultDrawString(), _XwcDefaultDrawString(), _Xutf8DefaultDrawString(); extern void _XmbDefaultDrawImageString(), _XwcDefaultDrawImageString(), _Xutf8DefaultDrawImageString(); extern int _XmbGenericTextEscapement(), _XwcGenericTextEscapement(), _Xutf8GenericTextEscapement(); extern int _XmbGenericTextExtents(), _XwcGenericTextExtents(), _Xutf8GenericTextExtents(); extern Status _XmbGenericTextPerCharExtents(), _XwcGenericTextPerCharExtents(), _Xutf8GenericTextPerCharExtents(); extern int _XmbGenericDrawString(), _XwcGenericDrawString(), _Xutf8GenericDrawString(); extern void _XmbGenericDrawImageString(), _XwcGenericDrawImageString(), _Xutf8GenericDrawImageString(); extern void _XlcDbg_printValue (const char *str, char **value, int num); #endif /* For VW/UDC start */ static FontData init_fontdata( FontData font_data, int font_data_count) { FontData fd; int i; fd = Xmalloc(sizeof(FontDataRec) * font_data_count); if(fd == (FontData) NULL) return False; memset(fd, 0x00, sizeof(FontData) * font_data_count); for(i = 0 ; i < font_data_count ; i++) fd[i] = font_data[i]; return fd; } static VRotate init_vrotate( FontData font_data, int font_data_count, int type, CodeRange code_range, int code_range_num) { VRotate vrotate; int i; if(type == VROTATE_NONE) return (VRotate)NULL; vrotate = Xmalloc(sizeof(VRotateRec) * font_data_count); if(vrotate == (VRotate) NULL) return False; memset(vrotate, 0x00, sizeof(VRotateRec) * font_data_count); for(i = 0 ; i < font_data_count ; i++) { vrotate[i].charset_name = font_data[i].name; vrotate[i].side = font_data[i].side; if(type == VROTATE_PART) { vrotate[i].num_cr = code_range_num; vrotate[i].code_range = code_range; } } return vrotate; } static Bool init_fontset( XOC oc) { XOCGenericPart *gen; FontSet font_set; OMData data; int count; count = XOM_GENERIC(oc->core.om)->data_num; data = XOM_GENERIC(oc->core.om)->data; font_set = Xmalloc(sizeof(FontSetRec) * count); if (font_set == NULL) return False; memset((char *) font_set, 0x00, sizeof(FontSetRec) * count); gen = XOC_GENERIC(oc); gen->font_set_num = count; gen->font_set = font_set; for ( ; count-- > 0; data++, font_set++) { font_set->charset_count = data->charset_count; font_set->charset_list = data->charset_list; if((font_set->font_data = init_fontdata(data->font_data, data->font_data_count)) == NULL) goto err; font_set->font_data_count = data->font_data_count; if((font_set->substitute = init_fontdata(data->substitute, data->substitute_num)) == NULL) goto err; font_set->substitute_num = data->substitute_num; if((font_set->vmap = init_fontdata(data->vmap, data->vmap_num)) == NULL) goto err; font_set->vmap_num = data->vmap_num; if(data->vrotate_type != VROTATE_NONE) { /* A vrotate member is specified primary font data */ /* as initial value. */ if((font_set->vrotate = init_vrotate(data->font_data, data->font_data_count, data->vrotate_type, data->vrotate, data->vrotate_num)) == NULL) goto err; font_set->vrotate_num = data->font_data_count; } } return True; err: Xfree(font_set->font_data); Xfree(font_set->substitute); Xfree(font_set->vmap); Xfree(font_set->vrotate); Xfree(font_set); gen->font_set = (FontSet) NULL; gen->font_set_num = 0; return False; } /* For VW/UDC end */ static char * get_prop_name( Display *dpy, XFontStruct *fs) { unsigned long fp; if (XGetFontProperty(fs, XA_FONT, &fp)) return XGetAtomName(dpy, fp); return (char *) NULL; } /* For VW/UDC start */ static Bool load_fontdata( XOC oc, FontData font_data, int font_data_num) { Display *dpy = oc->core.om->core.display; FontData fd = font_data; if(font_data == NULL) return(True); for( ; font_data_num-- ; fd++) { if(fd->xlfd_name != (char *) NULL && fd->font == NULL) { fd->font = XLoadQueryFont(dpy, fd->xlfd_name); if (fd->font == NULL){ return False; } } } return True; } static Bool load_fontset_data( XOC oc, FontSet font_set) { Display *dpy = oc->core.om->core.display; if(font_set->font_name == (char *)NULL) return False ; /* If font_set->font is not NULL, it contains the *best* * match font for this FontSet. * -- jjw/pma (HP) */ if(font_set->font == NULL) { font_set->font = XLoadQueryFont(dpy, font_set->font_name); if (font_set->font == NULL){ return False; } } return True; } static Bool load_font( XOC oc) { XOCGenericPart *gen = XOC_GENERIC(oc); FontSet font_set = gen->font_set; int num = gen->font_set_num; for ( ; num-- > 0; font_set++) { if (font_set->font_name == NULL) continue; if (load_fontset_data (oc, font_set) != True) return False; #ifndef TESTVERSION if(load_fontdata(oc, font_set->font_data, font_set->font_data_count) != True) return False; if(load_fontdata(oc, font_set->substitute, font_set->substitute_num) != True) return False; #endif /* Add 1996.05.20 */ if( oc->core.orientation == XOMOrientation_TTB_RTL || oc->core.orientation == XOMOrientation_TTB_LTR ){ if (font_set->vpart_initialize == 0) { load_fontdata(oc, font_set->vmap, font_set->vmap_num); load_fontdata(oc, (FontData) font_set->vrotate, font_set->vrotate_num); font_set->vpart_initialize = 1; } } if (font_set->font->min_byte1 || font_set->font->max_byte1) font_set->is_xchar2b = True; else font_set->is_xchar2b = False; } return True; } /* For VW/UDC end */ static Bool load_font_info( XOC oc) { Display *dpy = oc->core.om->core.display; XOCGenericPart *gen = XOC_GENERIC(oc); FontSet font_set = gen->font_set; char **fn_list; int fn_num, num = gen->font_set_num; for ( ; num-- > 0; font_set++) { if (font_set->font_name == NULL) continue; if (font_set->info == NULL) { fn_list = XListFontsWithInfo(dpy, font_set->font_name, 1, &fn_num, &font_set->info); if (font_set->info == NULL) return False; XFreeFontNames(fn_list); } } return True; } /* For Vertical Writing start */ static void check_fontset_extents( XCharStruct *overall, int *logical_ascent, int *logical_descent, XFontStruct *font) { overall->lbearing = min(overall->lbearing, font->min_bounds.lbearing); overall->rbearing = max(overall->rbearing, font->max_bounds.rbearing); overall->ascent = max(overall->ascent, font->max_bounds.ascent); overall->descent = max(overall->descent, font->max_bounds.descent); overall->width = max(overall->width, font->max_bounds.width); *logical_ascent = max(*logical_ascent, font->ascent); *logical_descent = max(*logical_descent, font->descent); } /* For Vertical Writing end */ static void set_fontset_extents( XOC oc) { XRectangle *ink = &oc->core.font_set_extents.max_ink_extent; XRectangle *logical = &oc->core.font_set_extents.max_logical_extent; XFontStruct **font_list, *font; XCharStruct overall; int logical_ascent, logical_descent; int num = oc->core.font_info.num_font; font_list = oc->core.font_info.font_struct_list; font = *font_list++; overall = font->max_bounds; overall.lbearing = font->min_bounds.lbearing; logical_ascent = font->ascent; logical_descent = font->descent; /* For Vertical Writing start */ while (--num > 0) { font = *font_list++; check_fontset_extents(&overall, &logical_ascent, &logical_descent, font); } { XOCGenericPart *gen = XOC_GENERIC(oc); FontSet font_set = gen->font_set; FontData font_data; int font_set_num = gen->font_set_num; int font_data_count; for( ; font_set_num-- ; font_set++) { if(font_set->vmap_num > 0) { font_data = font_set->vmap; font_data_count = font_set->vmap_num; for( ; font_data_count-- ; font_data++) { if(font_data->font != NULL) { check_fontset_extents(&overall, &logical_ascent, &logical_descent, font_data->font); } } } if(font_set->vrotate_num > 0 && font_set->vrotate != NULL) { font_data = (FontData) font_set->vrotate; font_data_count = font_set->vrotate_num; for( ; font_data_count-- ; font_data++) { if(font_data->font != NULL) { check_fontset_extents(&overall, &logical_ascent, &logical_descent, font_data->font); } } } } } /* For Vertical Writing start */ ink->x = overall.lbearing; ink->y = -(overall.ascent); ink->width = overall.rbearing - overall.lbearing; ink->height = overall.ascent + overall.descent; logical->x = 0; logical->y = -(logical_ascent); logical->width = overall.width; logical->height = logical_ascent + logical_descent; } static Bool init_core_part( XOC oc) { XOCGenericPart *gen = XOC_GENERIC(oc); FontSet font_set; int font_set_num; XFontStruct **font_struct_list; char **font_name_list, *font_name_buf; int count, length; font_set = gen->font_set; font_set_num = gen->font_set_num; count = length = 0; for ( ; font_set_num-- > 0; font_set++) { if (font_set->font_name == NULL) continue; length += strlen(font_set->font_name) + 1; count++; } if (count == 0) return False; font_struct_list = Xmalloc(sizeof(XFontStruct *) * count); if (font_struct_list == NULL) return False; font_name_list = Xmalloc(sizeof(char *) * count); if (font_name_list == NULL) goto err; font_name_buf = Xmalloc(length); if (font_name_buf == NULL) goto err; oc->core.font_info.num_font = count; oc->core.font_info.font_name_list = font_name_list; oc->core.font_info.font_struct_list = font_struct_list; font_set = gen->font_set; font_set_num = gen->font_set_num; for (count = 0; font_set_num-- > 0; font_set++) { if (font_set->font_name == NULL) continue; font_set->id = count; if (font_set->font) *font_struct_list++ = font_set->font; else *font_struct_list++ = font_set->info; strcpy(font_name_buf, font_set->font_name); Xfree(font_set->font_name); *font_name_list++ = font_set->font_name = font_name_buf; font_name_buf += strlen(font_name_buf) + 1; count++; } set_fontset_extents(oc); return True; err: Xfree(font_name_list); Xfree(font_struct_list); return False; } static char * get_font_name( XOC oc, char *pattern) { char **list, *name; int count = 0; list = XListFonts(oc->core.om->core.display, pattern, 1, &count); if (list == NULL) return NULL; name = strdup(*list); XFreeFontNames(list); return name; } /* For VW/UDC start*/ static char * get_rotate_fontname( char *font_name) { char *pattern = NULL, *ptr = NULL; char *fields[CHARSET_ENCODING_FIELD]; char str_pixel[32], str_point[4]; char *rotate_font_ptr = NULL; int pixel_size = 0; int field_num = 0, len = 0; if(font_name == (char *) NULL || (len = strlen(font_name)) <= 0 || len > XLFD_MAX_LEN) return NULL; pattern = strdup(font_name); if(!pattern) return NULL; memset(fields, 0, sizeof(char *) * 14); ptr = pattern; while(isspace(*ptr)) { ptr++; } if(*ptr == '-') ptr++; for(field_num = 0 ; field_num < CHARSET_ENCODING_FIELD && ptr && *ptr ; ptr++, field_num++) { fields[field_num] = ptr; if((ptr = strchr(ptr, '-'))) { *ptr = '\0'; } else { field_num++; /* Count last field */ break; } } if(field_num < CHARSET_ENCODING_FIELD) goto free_pattern; /* Pixel Size field : fields[6] */ for(ptr = fields[PIXEL_SIZE_FIELD - 1] ; ptr && *ptr; ptr++) { if(!isdigit(*ptr)) { if(*ptr == '['){ /* 960730 */ strcpy(pattern, font_name); return(pattern); } goto free_pattern; } } pixel_size = atoi(fields[PIXEL_SIZE_FIELD - 1]); snprintf(str_pixel, sizeof(str_pixel), "[ 0 ~%d %d 0 ]", pixel_size, pixel_size); fields[6] = str_pixel; /* Point Size field : fields[7] */ strcpy(str_point, "*"); fields[POINT_SIZE_FIELD - 1] = str_point; len = 0; for (field_num = 0; field_num < CHARSET_ENCODING_FIELD && fields[field_num]; field_num++) { len += 1 + strlen(fields[field_num]); } /* Max XLFD length is 255 */ if (len > XLFD_MAX_LEN) goto free_pattern; rotate_font_ptr = Xmalloc(len + 1); if(!rotate_font_ptr) goto free_pattern; rotate_font_ptr[0] = '\0'; for(field_num = 0 ; field_num < CHARSET_ENCODING_FIELD && fields[field_num] ; field_num++) { strcat(rotate_font_ptr, "-"); strcat(rotate_font_ptr, fields[field_num]); } free_pattern: Xfree(pattern); return rotate_font_ptr; } static Bool is_match_charset( FontData font_data, char *font_name) { char *last; int length, name_len; name_len = strlen(font_name); last = font_name + name_len; length = strlen(font_data->name); if (length > name_len) return False; if (_XlcCompareISOLatin1(last - length, font_data->name) == 0) return True; return False; } #if 0 static char * get_font_name_from_list( XOC oc, char *pattern, FontData font_data) { char **list, *name = (char *)NULL, *fname; int count = 0, i; list = XListFonts(oc->core.om->core.display, pattern, MAXFONTS, &count); if (list == NULL) return NULL; for (i = 0; i < count; i++) { fname = list[i]; if(is_match_charset(font_data, fname) == True) { name = strdup(fname); break; } } XFreeFontNames(list); return name; } #endif static int parse_all_name( XOC oc, FontData font_data, char *pattern) { #ifdef OLDCODE if(is_match_charset(font_data, pattern) != True) return False; font_data->xlfd_name = strdup(pattern); if(font_data->xlfd_name == NULL) return (-1); return True; #else /* OLDCODE */ Display *dpy = oc->core.om->core.display; char **fn_list = NULL, *prop_fname = NULL; int list_num; XFontStruct *fs_list; if(is_match_charset(font_data, pattern) != True) { /* * pattern should not contain any wildcard (execpt '?') * this was probably added to make this case insensitive. */ if ((fn_list = XListFontsWithInfo(dpy, pattern, MAXFONTS, &list_num, &fs_list)) == NULL) { return False; } /* shouldn't we loop here ? */ else if ((prop_fname = get_prop_name(dpy, fs_list)) == NULL) { XFreeFontInfo(fn_list, fs_list, list_num); return False; } else if ((is_match_charset(font_data, prop_fname) != True)) { XFree(prop_fname); XFreeFontInfo(fn_list, fs_list, list_num); return False; } else { font_data->xlfd_name = prop_fname; XFreeFontInfo(fn_list, fs_list, list_num); return True; } } font_data->xlfd_name = strdup(pattern); if(font_data->xlfd_name == NULL) return (-1); return True; #endif /* OLDCODE */ } static int parse_omit_name( XOC oc, FontData font_data, char *pattern) { char* last = (char *) NULL; char* base_name; char buf[XLFD_MAX_LEN + 1]; int length = 0; int num_fields; /* * If the font specified by "pattern" is expandable to be * a member of "font_data"'s FontSet, we've found a match. */ if(is_match_charset(font_data, pattern) == True) { if ((font_data->xlfd_name = get_font_name(oc, pattern)) != NULL) { return True; } } length = strlen (pattern); if (length > XLFD_MAX_LEN) return -1; strcpy(buf, pattern); last = buf + length - 1; /* Replace the original encoding with the encoding for this FontSet. */ /* Figure out how many fields have been specified in this xlfd. */ for (num_fields = 0, base_name = buf; *base_name != '\0'; base_name++) if (*base_name == '-') num_fields++; switch (num_fields) { case 12: /* This is the best way to have specifed the fontset. In this * case, there is no original encoding. E.g., * -*-*-*-*-*-*-14-*-*-*-*-* * To this, we'll append a dash: * -*-*-*-*-*-*-14-*-*-*-*-*- * then append the encoding to get: * -*-*-*-*-*-*-14-*-*-*-*-*-JISX0208.1990-0 */ /* * Take care of: * -*-*-*-*-*-*-14-*-*-*-*- */ if (*(last) == '-') *++last = '*'; *++last = '-'; break; case 13: /* Got the charset, not the encoding, zap the charset In this * case, there is no original encoding, but there is a charset. E.g., * -*-*-*-*-*-*-14-*-*-*-*-*-jisx0212.1990 * To this, we remove the charset: * -*-*-*-*-*-*-14-*-*-*-*-*- * then append the new encoding to get: * -*-*-*-*-*-*-14-*-*-*-*-*-JISX0208.1990-0 */ last = strrchr (buf, '-'); num_fields = 12; break; case 14: /* Both the charset and the encoding are specified. Get rid * of them so that we can append the new charset encoding. E.g., * -*-*-*-*-*-*-14-*-*-*-*-*-jisx0212.1990-0 * To this, we'll remove the encoding and charset to get: * -*-*-*-*-*-*-14-*-*-*-*-*- * then append the new encoding to get: * -*-*-*-*-*-*-14-*-*-*-*-*-JISX0208.1990-0 */ last = strrchr (buf, '-'); *last = '\0'; last = strrchr (buf, '-'); num_fields = 12; break; default: if (*last != '-') *++last = '-'; break; } /* At this point, "last" is pointing to the last "-" in the * xlfd, and all xlfd's at this point take a form similar to: * -*-*-*-*-*-*-14-*-*-*-*-*- * (i.e., no encoding). * After the strcpy, we'll end up with something similar to: * -*-*-*-*-*-*-14-*-*-*-*-*-JISX0208.1990-0 * * If the modified font is found in the current FontSet, * we've found a match. */ last++; if ((last - buf) + strlen(font_data->name) > XLFD_MAX_LEN) return -1; strcpy(last, font_data->name); if ((font_data->xlfd_name = get_font_name(oc, buf)) != NULL) return True; /* This may mot be needed anymore as XListFonts() takes care of this */ if (num_fields < 12) { if ((last - buf) > (XLFD_MAX_LEN - 2)) return -1; *last = '*'; *(last + 1) = '-'; strcpy(last + 2, font_data->name); num_fields++; last+=2; if ((font_data->xlfd_name = get_font_name(oc, buf)) != NULL) return True; } return False; } typedef enum{C_PRIMARY, C_SUBSTITUTE, C_VMAP, C_VROTATE } ClassType; static int parse_fontdata( XOC oc, FontSet font_set, FontData font_data, int font_data_count, char **name_list, int name_list_count, ClassType class, FontDataRec *font_data_return) { char **cur_name_list = name_list; char *font_name = (char *) NULL; char *pattern = (char *) NULL; int found_num = 0, ret = 0; int count = name_list_count; if(name_list == NULL || count <= 0) { return False; } if(font_data == NULL || font_data_count <= 0) { return False; } /* Loop through each font encoding defined in the "font_data" FontSet. */ for ( ; font_data_count-- > 0; font_data++) { Bool is_found = False; font_name = (char *) NULL; count = name_list_count; cur_name_list = name_list; /* * Loop through each font specified by the user * in the call to XCreateFontset(). */ while (count-- > 0) { pattern = *cur_name_list++; if (pattern == NULL || *pattern == '\0') continue; #ifdef FONTDEBUG fprintf(stderr,"Font pattern: %s %s\n", pattern,font_data->name); #endif /* * If the current font is fully specified (i.e., the * xlfd contains no wildcards) and the font exists on * the X Server, we have a match. */ if (strchr(pattern, '*') == NULL && (font_name = get_font_name(oc, pattern))) { /* * Find the full xlfd name for this font. If the font is * already in xlfd format, it is simply returned. If the * font is an alias for another font, the xlfd of the * aliased font is returned. */ ret = parse_all_name(oc, font_data, font_name); Xfree(font_name); if (ret == -1) return -1; if (ret == False) continue; /* * Since there was an exact match of a fully-specified font * or a font alias, we can return now since the desired font * was found for the current font encoding for this FontSet. * * Previous implementations of this algorithm would * not return here. Instead, they continued searching * through the font encodings for this FontSet. The side-effect * of that behavior is you may return a "substitute" match * instead of an "exact" match. We believe there should be a * preference on exact matches. Therefore, as soon as we * find one, we bail. * * Also, previous implementations seemed to think it was * important to find either a primary or substitute font * for each Font encoding in the FontSet before returning an * acceptable font. We don't believe this is necessary. * All the client cares about is finding a reasonable font * for what was passed in. If we find an exact match, * there's no reason to look any further. * * -- jjw/pma (HP) */ if (font_data_return) { font_data_return->xlfd_name = strdup(font_data->xlfd_name); if (!font_data_return->xlfd_name) return -1; font_data_return->side = font_data->side; } #ifdef FONTDEBUG fprintf(stderr,"XLFD name: %s\n",font_data->xlfd_name); #endif return True; } /* * If the font name is not fully specified * (i.e., it has wildcards), we have more work to do. * See the comments in parse_omit_name() * for the list of things to do. */ ret = parse_omit_name(oc, font_data, pattern); if (ret == -1) return -1; if (ret == False) continue; /* * A font which matched the wild-carded specification was found. * Only update the return data if a font has not yet been found. * This maintains the convention that FontSets listed higher in * a CodeSet in the Locale Database have higher priority than * those FontSets listed lower in the CodeSet. In the following * example: * * fs1 { * charset HP-JIS:GR * font JISX0208.1990-0:GL;\ * JISX0208.1990-1:GR;\ * JISX0208.1983-0:GL;\ * JISX0208.1983-1:GR * } * * a font found in the JISX0208.1990-0 FontSet will have a * higher priority than a font found in the JISX0208.1983-0 * FontSet. */ if (font_data_return && font_data_return->xlfd_name == NULL) { #ifdef FONTDEBUG fprintf(stderr,"XLFD name: %s\n",font_data->xlfd_name); #endif font_data_return->xlfd_name = strdup(font_data->xlfd_name); if (!font_data_return->xlfd_name) return -1; font_data_return->side = font_data->side; } found_num++; is_found = True; break; } switch(class) { case C_PRIMARY: if(is_found == False) { /* * Did not find a font for the current FontSet. Check the * FontSet's "substitute" font for a match. If we find a * match, we'll keep searching in hopes of finding an exact * match later down the FontSet list. * * when we return and we have found a font font_data_return * contains the first (ie. best) match no matter if this * is a C_PRIMARY or a C_SUBSTITUTE font */ ret = parse_fontdata(oc, font_set, font_set->substitute, font_set->substitute_num, name_list, name_list_count, C_SUBSTITUTE, font_data_return); if (ret == -1) return -1; if (ret == False) continue; found_num++; is_found = True; } #ifdef TESTVERSION else return True; #endif break; case C_SUBSTITUTE: case C_VMAP: if(is_found == True) return True; break; case C_VROTATE: if(is_found == True) { char *rotate_name; if((rotate_name = get_rotate_fontname(font_data->xlfd_name)) != NULL) { Xfree(font_data->xlfd_name); font_data->xlfd_name = rotate_name; return True; } Xfree(font_data->xlfd_name); font_data->xlfd_name = NULL; return False; } break; } } if(class == C_PRIMARY && found_num >= 1) return True; return False; } static int parse_vw( XOC oc, FontSet font_set, char **name_list, int count) { FontData vmap = font_set->vmap; VRotate vrotate = font_set->vrotate; int vmap_num = font_set->vmap_num; int vrotate_num = font_set->vrotate_num; int ret = 0, i = 0; if(vmap_num > 0) { if(parse_fontdata(oc, font_set, vmap, vmap_num, name_list, count, C_VMAP,NULL) == -1) return (-1); } if(vrotate_num > 0) { ret = parse_fontdata(oc, font_set, (FontData) vrotate, vrotate_num, name_list, count, C_VROTATE, NULL); if(ret == -1) { return (-1); } else if(ret == False) { CodeRange code_range; int num_cr; int sub_num = font_set->substitute_num; code_range = vrotate[0].code_range; /* ? */ num_cr = vrotate[0].num_cr; /* ? */ for(i = 0 ; i < vrotate_num ; i++) { if(vrotate[i].xlfd_name) Xfree(vrotate[i].xlfd_name); } Xfree(vrotate); if(sub_num > 0) { vrotate = font_set->vrotate = Xmalloc (sizeof(VRotateRec) * sub_num); if(font_set->vrotate == (VRotate)NULL) return (-1); memset(font_set->vrotate, 0x00, sizeof(VRotateRec) * sub_num); for(i = 0 ; i < sub_num ; i++) { vrotate[i].charset_name = font_set->substitute[i].name; vrotate[i].side = font_set->substitute[i].side; vrotate[i].code_range = code_range; vrotate[i].num_cr = num_cr; } vrotate_num = font_set->vrotate_num = sub_num; } else { vrotate = font_set->vrotate = (VRotate)NULL; } ret = parse_fontdata(oc, font_set, (FontData) vrotate, vrotate_num, name_list, count, C_VROTATE, NULL); if(ret == -1) return (-1); } } return True; } static int parse_fontname( XOC oc) { XOCGenericPart *gen = XOC_GENERIC(oc); FontSet font_set; FontDataRec font_data_return; char *base_name, **name_list; int font_set_num = 0; int found_num = 0; int count = 0; int ret; int i; name_list = _XParseBaseFontNameList(oc->core.base_name_list, &count); if (name_list == NULL) return -1; font_set = gen->font_set; font_set_num = gen->font_set_num; /* Loop through all of the CharSets defined in the Locale * database for the current Locale. */ for( ; font_set_num-- > 0 ; font_set++) { if(font_set->font_name) continue; if(font_set->font_data_count > 0) { /* * If there are a non-zero number of FontSets defined * for this CharSet. * Try to find a font for this CharSet. If we find an * acceptable font, we save the information for return * to the client. If we do not find an acceptable font, * a "missing_charset" will be reported to the client * for this CharSet. */ font_data_return.xlfd_name = NULL; font_data_return.side = XlcUnknown; ret = parse_fontdata(oc, font_set, font_set->font_data, font_set->font_data_count, name_list, count, C_PRIMARY, &font_data_return); if(ret == -1) { goto err; } else if(ret == True) { /* * We can't just loop thru fontset->font_data to * find the first (ie. best) match: parse_fontdata * will try a substitute font if no primary one could * be matched. It returns the required information in * font_data_return. */ font_set->font_name = strdup(font_data_return.xlfd_name); if(font_set->font_name == (char *) NULL) goto err; font_set->side = font_data_return.side; Xfree (font_data_return.xlfd_name); font_data_return.xlfd_name = NULL; if(parse_vw(oc, font_set, name_list, count) == -1) goto err; found_num++; } } else if(font_set->substitute_num > 0) { /* * If there are no FontSets defined for this * CharSet. We can only find "substitute" fonts. */ ret = parse_fontdata(oc, font_set, font_set->substitute, font_set->substitute_num, name_list, count, C_SUBSTITUTE, NULL); if(ret == -1) { goto err; } else if(ret == True) { for(i=0;isubstitute_num;i++){ if(font_set->substitute[i].xlfd_name != NULL){ break; } } font_set->font_name = strdup(font_set->substitute[i].xlfd_name); if(font_set->font_name == (char *) NULL) goto err; font_set->side = font_set->substitute[i].side; if(parse_vw(oc, font_set, name_list, count) == -1) goto err; found_num++; } } } base_name = strdup(oc->core.base_name_list); if (base_name == NULL) goto err; oc->core.base_name_list = base_name; XFreeStringList(name_list); return found_num; err: XFreeStringList(name_list); /* Prevent this from being freed twice */ oc->core.base_name_list = NULL; return -1; } /* For VW/UDC end*/ static Bool set_missing_list( XOC oc) { XOCGenericPart *gen = XOC_GENERIC(oc); FontSet font_set; char **charset_list, *charset_buf; int count, length, font_set_num; int result = 1; font_set = gen->font_set; font_set_num = gen->font_set_num; count = length = 0; for ( ; font_set_num-- > 0; font_set++) { if (font_set->info || font_set->font) { continue; } /* Change 1996.01.23 start */ if(font_set->font_data_count <= 0 || font_set->font_data == (FontData)NULL) { if(font_set->substitute_num <= 0 || font_set->substitute == (FontData)NULL) { if(font_set->charset_list != NULL){ length += strlen(font_set->charset_list[0]->encoding_name) + 1; } else { length += 1; } } else { length += strlen(font_set->substitute->name) + 1; } } else { length += strlen(font_set->font_data->name) + 1; } /* Change 1996.01.23 end */ count++; } if (count < 1) { return True; } charset_list = Xmalloc(sizeof(char *) * count); if (charset_list == NULL) { return False; } charset_buf = Xmalloc(length); if (charset_buf == NULL) { Xfree(charset_list); return False; } oc->core.missing_list.charset_list = charset_list; oc->core.missing_list.charset_count = count; font_set = gen->font_set; font_set_num = gen->font_set_num; for ( ; font_set_num-- > 0; font_set++) { if (font_set->info || font_set->font) { continue; } /* Change 1996.01.23 start */ if(font_set->font_data_count <= 0 || font_set->font_data == (FontData)NULL) { if(font_set->substitute_num <= 0 || font_set->substitute == (FontData)NULL) { if(font_set->charset_list != NULL){ strcpy(charset_buf, font_set->charset_list[0]->encoding_name); } else { strcpy(charset_buf, ""); } result = 0; } else { strcpy(charset_buf, font_set->substitute->name); } } else { strcpy(charset_buf, font_set->font_data->name); } /* Change 1996.01.23 end */ *charset_list++ = charset_buf; charset_buf += strlen(charset_buf) + 1; } if(result == 0) { return(False); } return True; } static Bool create_fontset( XOC oc) { XOMGenericPart *gen = XOM_GENERIC(oc->core.om); int found_num; if (init_fontset(oc) == False) return False; found_num = parse_fontname(oc); if (found_num <= 0) { if (found_num == 0) set_missing_list(oc); return False; } if (gen->on_demand_loading == True) { if (load_font_info(oc) == False) return False; } else { if (load_font(oc) == False) return False; } if (init_core_part(oc) == False) return False; if (set_missing_list(oc) == False) return False; return True; } /* For VW/UDC start */ static void free_fontdataOC( Display *dpy, FontData font_data, int font_data_count) { for( ; font_data_count-- ; font_data++) { if(font_data->xlfd_name){ Xfree(font_data->xlfd_name); font_data->xlfd_name = NULL; } if(font_data->font){ /* ADD 1996.01.7 */ if(font_data->font->fid) /* Add 1996.01.23 */ XFreeFont(dpy,font_data->font); /* ADD 1996.01.7 */ else /* Add 1996.01.23 */ XFreeFontInfo(NULL, font_data->font, 1);/* Add 1996.01.23 */ font_data->font = NULL; } /* * font_data->name and font_data->scopes belong to the OM not OC. * To save space this data is shared between OM and OC. We are * not allowed to free it here. * It has been moved to free_fontdataOM() */ /* if(font_data->scopes){ Xfree(font_data->scopes); font_data->scopes = NULL; } if(font_data->name){ Xfree(font_data->name); font_data->name = NULL; } */ } } static void destroy_fontdata( XOCGenericPart *gen, Display *dpy) { FontSet font_set = (FontSet) NULL; int font_set_num = 0; if (gen->font_set) { font_set = gen->font_set; font_set_num = gen->font_set_num; for( ; font_set_num-- ; font_set++) { if (font_set->font) { if(font_set->font->fid) XFreeFont(dpy,font_set->font); else XFreeFontInfo(NULL, font_set->font, 1); font_set->font = NULL; } if(font_set->font_data) { if (font_set->info) XFreeFontInfo(NULL, font_set->info, 1); free_fontdataOC(dpy, font_set->font_data, font_set->font_data_count); Xfree(font_set->font_data); font_set->font_data = NULL; } if(font_set->substitute) { free_fontdataOC(dpy, font_set->substitute, font_set->substitute_num); Xfree(font_set->substitute); font_set->substitute = NULL; } if(font_set->vmap) { free_fontdataOC(dpy, font_set->vmap, font_set->vmap_num); Xfree(font_set->vmap); font_set->vmap = NULL; } if(font_set->vrotate) { free_fontdataOC(dpy, (FontData)font_set->vrotate, font_set->vrotate_num); Xfree(font_set->vrotate); font_set->vrotate = NULL; } } Xfree(gen->font_set); gen->font_set = NULL; } } /* For VW/UDC end */ static void destroy_oc( XOC oc) { Display *dpy = oc->core.om->core.display; XOCGenericPart *gen = XOC_GENERIC(oc); if (gen->mbs_to_cs) _XlcCloseConverter(gen->mbs_to_cs); if (gen->wcs_to_cs) _XlcCloseConverter(gen->wcs_to_cs); if (gen->utf8_to_cs) _XlcCloseConverter(gen->utf8_to_cs); /* For VW/UDC start */ /* Change 1996.01.8 */ destroy_fontdata(gen,dpy); /* */ /* For VW/UDC end */ Xfree(oc->core.base_name_list); XFreeStringList(oc->core.font_info.font_name_list); Xfree(oc->core.font_info.font_struct_list); XFreeStringList(oc->core.missing_list.charset_list); #ifdef notdef Xfree(oc->core.res_name); Xfree(oc->core.res_class); #endif Xfree(oc); } static char * set_oc_values( XOC oc, XlcArgList args, int num_args) { XOCGenericPart *gen = XOC_GENERIC(oc); FontSet font_set = gen->font_set; char *ret; int num = gen->font_set_num; if (oc->core.resources == NULL) return NULL; ret = _XlcSetValues((XPointer) oc, oc->core.resources, oc->core.num_resources, args, num_args, XlcSetMask); if(ret != NULL){ return(ret); } else { for ( ; num-- > 0; font_set++) { if (font_set->font_name == NULL) continue; if (font_set->vpart_initialize != 0) continue; if( oc->core.orientation == XOMOrientation_TTB_RTL || oc->core.orientation == XOMOrientation_TTB_LTR ){ load_fontdata(oc, font_set->vmap, font_set->vmap_num); load_fontdata(oc, (FontData) font_set->vrotate, font_set->vrotate_num); font_set->vpart_initialize = 1; } } return(NULL); } } static char * get_oc_values( XOC oc, XlcArgList args, int num_args) { if (oc->core.resources == NULL) return NULL; return _XlcGetValues((XPointer) oc, oc->core.resources, oc->core.num_resources, args, num_args, XlcGetMask); } static XOCMethodsRec oc_default_methods = { destroy_oc, set_oc_values, get_oc_values, _XmbDefaultTextEscapement, _XmbDefaultTextExtents, _XmbDefaultTextPerCharExtents, _XmbDefaultDrawString, _XmbDefaultDrawImageString, _XwcDefaultTextEscapement, _XwcDefaultTextExtents, _XwcDefaultTextPerCharExtents, _XwcDefaultDrawString, _XwcDefaultDrawImageString, _Xutf8DefaultTextEscapement, _Xutf8DefaultTextExtents, _Xutf8DefaultTextPerCharExtents, _Xutf8DefaultDrawString, _Xutf8DefaultDrawImageString }; static XOCMethodsRec oc_generic_methods = { destroy_oc, set_oc_values, get_oc_values, _XmbGenericTextEscapement, _XmbGenericTextExtents, _XmbGenericTextPerCharExtents, _XmbGenericDrawString, _XmbGenericDrawImageString, _XwcGenericTextEscapement, _XwcGenericTextExtents, _XwcGenericTextPerCharExtents, _XwcGenericDrawString, _XwcGenericDrawImageString, _Xutf8GenericTextEscapement, _Xutf8GenericTextExtents, _Xutf8GenericTextPerCharExtents, _Xutf8GenericDrawString, _Xutf8GenericDrawImageString }; typedef struct _XOCMethodsListRec { const char *name; XOCMethods methods; } XOCMethodsListRec, *XOCMethodsList; static XOCMethodsListRec oc_methods_list[] = { { "default", &oc_default_methods }, { "generic", &oc_generic_methods } }; static XlcResource oc_resources[] = { { XNBaseFontName, NULLQUARK, sizeof(char *), XOffsetOf(XOCRec, core.base_name_list), XlcCreateMask | XlcGetMask }, { XNOMAutomatic, NULLQUARK, sizeof(Bool), XOffsetOf(XOCRec, core.om_automatic), XlcGetMask }, { XNMissingCharSet, NULLQUARK, sizeof(XOMCharSetList), XOffsetOf(XOCRec, core.missing_list), XlcGetMask }, { XNDefaultString, NULLQUARK, sizeof(char *), XOffsetOf(XOCRec, core.default_string), XlcGetMask }, { XNOrientation, NULLQUARK, sizeof(XOrientation), XOffsetOf(XOCRec, core.orientation), XlcDefaultMask | XlcSetMask | XlcGetMask }, { XNResourceName, NULLQUARK, sizeof(char *), XOffsetOf(XOCRec, core.res_name), XlcSetMask | XlcGetMask }, { XNResourceClass, NULLQUARK, sizeof(char *), XOffsetOf(XOCRec, core.res_class), XlcSetMask | XlcGetMask }, { XNFontInfo, NULLQUARK, sizeof(XOMFontInfo), XOffsetOf(XOCRec, core.font_info), XlcGetMask } }; static XOC create_oc( XOM om, XlcArgList args, int num_args) { XOC oc; XOMGenericPart *gen = XOM_GENERIC(om); XOCMethodsList methods_list = oc_methods_list; int count; oc = Xcalloc(1, sizeof(XOCGenericRec)); if (oc == NULL) return (XOC) NULL; oc->core.om = om; if (oc_resources[0].xrm_name == NULLQUARK) _XlcCompileResourceList(oc_resources, XlcNumber(oc_resources)); if (_XlcSetValues((XPointer) oc, oc_resources, XlcNumber(oc_resources), args, num_args, XlcCreateMask | XlcDefaultMask)) goto err; if (oc->core.base_name_list == NULL) goto err; oc->core.resources = oc_resources; oc->core.num_resources = XlcNumber(oc_resources); if (create_fontset(oc) == False) goto err; oc->methods = &oc_generic_methods; if (gen->object_name) { count = XlcNumber(oc_methods_list); for ( ; count-- > 0; methods_list++) { if (!_XlcCompareISOLatin1(gen->object_name, methods_list->name)) { oc->methods = methods_list->methods; break; } } } return oc; err: destroy_oc(oc); return (XOC) NULL; } static void free_fontdataOM( FontData font_data, int font_data_count) { for( ; font_data_count-- ; font_data++) { if(font_data->name){ Xfree(font_data->name); font_data->name = NULL; } if(font_data->scopes){ Xfree(font_data->scopes); font_data->scopes = NULL; } } } static Status close_om( XOM om) { XOMGenericPart *gen = XOM_GENERIC(om); OMData data; int count; if ((data = gen->data)) { for (count = gen->data_num; count-- > 0; data++) { if (data->charset_list){ Xfree(data->charset_list); data->charset_list = NULL; } /* free font_data for om */ if (data->font_data) { free_fontdataOM(data->font_data,data->font_data_count); Xfree(data->font_data); data->font_data = NULL; } /* free substitute for om */ if (data->substitute) { free_fontdataOM(data->substitute,data->substitute_num); Xfree(data->substitute); data->substitute = NULL; } /* free vmap for om */ if (data->vmap) { free_fontdataOM(data->vmap,data->vmap_num); Xfree(data->vmap); data->vmap = NULL; } /* free vrotate for om */ if (data->vrotate) { Xfree(data->vrotate); data->vrotate = NULL; } } Xfree(gen->data); gen->data = NULL; } if (gen->object_name){ Xfree(gen->object_name); gen->object_name = NULL; } if (om->core.res_name){ Xfree(om->core.res_name); om->core.res_name = NULL; } if (om->core.res_class){ Xfree(om->core.res_class); om->core.res_class = NULL; } if (om->core.required_charset.charset_list && om->core.required_charset.charset_count > 0){ XFreeStringList(om->core.required_charset.charset_list); om->core.required_charset.charset_list = NULL; } else { Xfree((char*)om->core.required_charset.charset_list); om->core.required_charset.charset_list = NULL; } if (om->core.orientation_list.orientation){ Xfree(om->core.orientation_list.orientation); om->core.orientation_list.orientation = NULL; } Xfree(om); return 1; } static char * set_om_values( XOM om, XlcArgList args, int num_args) { if (om->core.resources == NULL) return NULL; return _XlcSetValues((XPointer) om, om->core.resources, om->core.num_resources, args, num_args, XlcSetMask); } static char * get_om_values( XOM om, XlcArgList args, int num_args) { if (om->core.resources == NULL) return NULL; return _XlcGetValues((XPointer) om, om->core.resources, om->core.num_resources, args, num_args, XlcGetMask); } static XOMMethodsRec methods = { close_om, set_om_values, get_om_values, create_oc }; static XlcResource om_resources[] = { { XNRequiredCharSet, NULLQUARK, sizeof(XOMCharSetList), XOffsetOf(XOMRec, core.required_charset), XlcGetMask }, { XNQueryOrientation, NULLQUARK, sizeof(XOMOrientation), XOffsetOf(XOMRec, core.orientation_list), XlcGetMask }, { XNDirectionalDependentDrawing, NULLQUARK, sizeof(Bool), XOffsetOf(XOMRec, core.directional_dependent), XlcGetMask }, { XNContextualDrawing, NULLQUARK, sizeof(Bool), XOffsetOf(XOMRec, core.contextual_drawing), XlcGetMask } }; static XOM create_om( XLCd lcd, Display *dpy, XrmDatabase rdb, _Xconst char *res_name, _Xconst char *res_class) { XOM om; om = Xcalloc(1, sizeof(XOMGenericRec)); if (om == NULL) return (XOM) NULL; om->methods = &methods; om->core.lcd = lcd; om->core.display = dpy; om->core.rdb = rdb; if (res_name) { om->core.res_name = strdup(res_name); if (om->core.res_name == NULL) goto err; } if (res_class) { om->core.res_class = strdup(res_class); if (om->core.res_class == NULL) goto err; } if (om_resources[0].xrm_name == NULLQUARK) _XlcCompileResourceList(om_resources, XlcNumber(om_resources)); om->core.resources = om_resources; om->core.num_resources = XlcNumber(om_resources); return om; err: close_om(om); return (XOM) NULL; } static OMData add_data( XOM om) { XOMGenericPart *gen = XOM_GENERIC(om); OMData new; int num; if ((num = gen->data_num)) new = Xrealloc(gen->data, (num + 1) * sizeof(OMDataRec)); else new = Xmalloc(sizeof(OMDataRec)); if (new == NULL) return NULL; gen->data_num = num + 1; gen->data = new; new += num; bzero((char *) new, sizeof(OMDataRec)); return new; } /* For VW/UDC */ FontData read_EncodingInfo( int count, char **value) { FontData font_data,ret; char *buf, *bufptr,*scp; int len; font_data = Xcalloc(count, sizeof(FontDataRec)); if (font_data == NULL) return NULL; ret = font_data; for ( ; count-- > 0; font_data++) { /* strcpy(buf, *value++); */ buf = *value; value++; if ((bufptr = strchr(buf, ':'))) { len = (int)(bufptr - buf); bufptr++ ; } else len = strlen(buf); font_data->name = Xmalloc(len + 1); if (font_data->name == NULL) { Xfree(font_data); return NULL; } strncpy(font_data->name, buf,len); font_data->name[len] = 0; if (bufptr && _XlcCompareISOLatin1(bufptr, "GL") == 0) font_data->side = XlcGL; else if (bufptr && _XlcCompareISOLatin1(bufptr, "GR") == 0) font_data->side = XlcGR; else font_data->side = XlcGLGR; if (bufptr && (scp = strchr(bufptr, '['))){ font_data->scopes = _XlcParse_scopemaps(scp,&(font_data->scopes_num)); } } return(ret); } static CodeRange read_vrotate( int count, char **value, int *type, int *vrotate_num) { CodeRange range; if(!strcmp(value[0],"all")){ *type = VROTATE_ALL ; *vrotate_num = 0 ; return (NULL); } else if(*(value[0]) == '['){ *type = VROTATE_PART ; range = (CodeRange) _XlcParse_scopemaps(value[0],vrotate_num); return (range); } else { *type = VROTATE_NONE ; *vrotate_num = 0 ; return (NULL); } } static void read_vw( XLCd lcd, OMData font_set, int num) { char **value, buf[BUFSIZ]; int count; snprintf(buf, sizeof(buf), "fs%d.font.vertical_map", num); _XlcGetResource(lcd, "XLC_FONTSET", buf, &value, &count); if (count > 0){ _XlcDbg_printValue(buf,value,count); font_set->vmap_num = count; font_set->vmap = read_EncodingInfo(count,value); } snprintf(buf, sizeof(buf), "fs%d.font.vertical_rotate", num); _XlcGetResource(lcd, "XLC_FONTSET", buf, &value, &count); if (count > 0){ _XlcDbg_printValue(buf,value,count); font_set->vrotate = read_vrotate(count,value,&(font_set->vrotate_type), &(font_set->vrotate_num)); } } /* VW/UDC end */ static Bool init_om( XOM om) { XLCd lcd = om->core.lcd; XOMGenericPart *gen = XOM_GENERIC(om); OMData data; XlcCharSet *charset_list; FontData font_data; char **required_list; XOrientation *orientation; char **value, buf[BUFSIZ], *bufptr; int count = 0, num = 0, length = 0; _XlcGetResource(lcd, "XLC_FONTSET", "on_demand_loading", &value, &count); if (count > 0 && _XlcCompareISOLatin1(*value, "True") == 0) gen->on_demand_loading = True; _XlcGetResource(lcd, "XLC_FONTSET", "object_name", &value, &count); if (count > 0) { gen->object_name = strdup(*value); if (gen->object_name == NULL) return False; } for (num = 0; ; num++) { snprintf(buf, sizeof(buf), "fs%d.charset.name", num); _XlcGetResource(lcd, "XLC_FONTSET", buf, &value, &count); if( count < 1){ snprintf(buf, sizeof(buf), "fs%d.charset", num); _XlcGetResource(lcd, "XLC_FONTSET", buf, &value, &count); if (count < 1) break; } data = add_data(om); if (data == NULL) return False; charset_list = Xmalloc(sizeof(XlcCharSet) * count); if (charset_list == NULL) return False; data->charset_list = charset_list; data->charset_count = count; while (count-- > 0){ *charset_list++ = _XlcGetCharSet(*value++); } snprintf(buf, sizeof(buf), "fs%d.charset.udc_area", num); _XlcGetResource(lcd, "XLC_FONTSET", buf, &value, &count); if( count > 0){ UDCArea udc; int i,flag = 0; udc = Xmalloc(count * sizeof(UDCAreaRec)); if (udc == NULL) return False; for(i=0;icharset_count;i++){ if(data->charset_list[i]->udc_area == NULL){ data->charset_list[i]->udc_area = udc; data->charset_list[i]->udc_area_num = count; flag = 1; } } if(flag == 0){ Xfree(udc); } } snprintf(buf, sizeof(buf), "fs%d.font.primary", num); _XlcGetResource(lcd, "XLC_FONTSET", buf, &value, &count); if (count < 1){ snprintf(buf, sizeof(buf), "fs%d.font", num); _XlcGetResource(lcd, "XLC_FONTSET", buf, &value, &count); if (count < 1) return False; } font_data = read_EncodingInfo(count,value); if (font_data == NULL) return False; data->font_data = font_data; data->font_data_count = count; snprintf(buf, sizeof(buf), "fs%d.font.substitute", num); _XlcGetResource(lcd, "XLC_FONTSET", buf, &value, &count); if (count > 0){ font_data = read_EncodingInfo(count,value); if (font_data == NULL) return False; data->substitute = font_data; data->substitute_num = count; } else { snprintf(buf, sizeof(buf), "fs%d.font", num); _XlcGetResource(lcd, "XLC_FONTSET", buf, &value, &count); if (count < 1) { data->substitute = NULL; data->substitute_num = 0; } else { font_data = read_EncodingInfo(count,value); data->substitute = font_data; data->substitute_num = count; } } read_vw(lcd,data,num); length += strlen(data->font_data->name) + 1; } /* required charset list */ required_list = Xmalloc(sizeof(char *) * gen->data_num); if (required_list == NULL) return False; om->core.required_charset.charset_list = required_list; om->core.required_charset.charset_count = gen->data_num; count = gen->data_num; data = gen->data; if (count > 0) { bufptr = Xmalloc(length); if (bufptr == NULL) { Xfree(required_list); return False; } for ( ; count-- > 0; data++) { strcpy(bufptr, data->font_data->name); *required_list++ = bufptr; bufptr += strlen(bufptr) + 1; } } /* orientation list */ orientation = Xmalloc(sizeof(XOrientation) * 2); if (orientation == NULL) return False; orientation[0] = XOMOrientation_LTR_TTB; orientation[1] = XOMOrientation_TTB_RTL; om->core.orientation_list.orientation = orientation; om->core.orientation_list.num_orientation = 2; /* directional dependent drawing */ om->core.directional_dependent = False; /* contexual drawing */ om->core.contextual_drawing = False; /* context dependent */ om->core.context_dependent = False; return True; } XOM _XomGenericOpenOM(XLCd lcd, Display *dpy, XrmDatabase rdb, _Xconst char *res_name, _Xconst char *res_class) { XOM om; om = create_om(lcd, dpy, rdb, res_name, res_class); if (om == NULL) return (XOM) NULL; if (init_om(om) == False) goto err; return om; err: close_om(om); return (XOM) NULL; } Bool _XInitOM( XLCd lcd) { lcd->methods->open_om = _XomGenericOpenOM; return True; } StringList(om->core.required_charset.charset_list); om->core.required_charset.charset_list = NULL; } else { Xfree((char*)om->core.required_charset.charset_list); om->core.required_charset.charset_list = NULL; } if (libX11-1.6.3/modules/om/generic/omImText.c000064401431060000012000000055441247741723500204770ustar00alancstaff00002660200006/* * Copyright 1992, 1993 by TOSHIBA Corp. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of TOSHIBA not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. TOSHIBA make no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * * Author: Katsuhisa Yano TOSHIBA Corp. * mopi@osa.ilab.toshiba.co.jp */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "XomGeneric.h" #if 0 extern int _XomGenericTextExtents(), _XomGenericDrawString(); #endif #define GET_VALUE_MASK (GCFunction | GCForeground | GCBackground | GCFillStyle) #define SET_VALUE_MASK (GCFunction | GCForeground | GCFillStyle) static void _XomGenericDrawImageString( Display *dpy, Drawable d, XOC oc, GC gc, int x, int y, XOMTextType type, XPointer text, int length) { XGCValues values; XRectangle extent; XGetGCValues(dpy, gc, GET_VALUE_MASK, &values); XSetFunction(dpy, gc, GXcopy); XSetForeground(dpy, gc, values.background); XSetFillStyle(dpy, gc, FillSolid); _XomGenericTextExtents(oc, type, text, length, 0, &extent); XFillRectangle(dpy, d, gc, x + extent.x, y + extent.y, extent.width, extent.height); XChangeGC(dpy, gc, SET_VALUE_MASK, &values); _XomGenericDrawString(dpy, d, oc, gc, x, y, type, text, length); } void _XmbGenericDrawImageString(Display *dpy, Drawable d, XOC oc, GC gc, int x, int y, _Xconst char *text, int length) { _XomGenericDrawImageString(dpy, d, oc, gc, x, y, XOMMultiByte, (XPointer) text, length); } void _XwcGenericDrawImageString(Display *dpy, Drawable d, XOC oc, GC gc, int x, int y, _Xconst wchar_t *text, int length) { _XomGenericDrawImageString(dpy, d, oc, gc, x, y, XOMWideChar, (XPointer) text, length); } void _Xutf8GenericDrawImageString(Display *dpy, Drawable d, XOC oc, GC gc, int x, int y, _Xconst char *text, int length) { _XomGenericDrawImageString(dpy, d, oc, gc, x, y, XOMUtf8String, (XPointer) text, length); } NDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OlibX11-1.6.3/modules/om/generic/omText.c000064401431060000012000000222241247741723500202030ustar00alancstaff00002660200006/* * Copyright 1992, 1993 by TOSHIBA Corp. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of TOSHIBA not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. TOSHIBA make no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * * Author: Katsuhisa Yano TOSHIBA Corp. * mopi@osa.ilab.toshiba.co.jp */ /* * Copyright 1995 by FUJITSU LIMITED * This is source code modified by FUJITSU LIMITED under the Joint * Development Agreement for the CDE/Motif PST. */ /* * Modifiers: Jeff Walls, Paul Anderson (HEWLETT-PACKARD) */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "XomGeneric.h" #include /* For VW/UDC */ static int is_rotate( XOC oc, XFontStruct *font) { XOCGenericPart *gen = XOC_GENERIC(oc); FontSet font_set; VRotate vrotate; int font_set_count; int vrotate_num; font_set = gen->font_set; font_set_count = gen->font_set_num; for( ; font_set_count-- ; font_set++) { if((font_set->vrotate_num > 0) && (font_set->vrotate)) { vrotate = font_set->vrotate; vrotate_num = font_set->vrotate_num; for( ; vrotate_num-- ; vrotate++) if(vrotate->font == font) return True; } } return False; } static int is_codemap( XOC oc, XFontStruct *font) { XOCGenericPart *gen = XOC_GENERIC(oc); FontSet font_set; FontData vmap; int font_set_count; int vmap_num; font_set = gen->font_set; font_set_count = gen->font_set_num; for( ; font_set_count-- ; font_set++) { if(font_set->vmap_num > 0) { vmap = font_set->vmap; vmap_num = font_set->vmap_num; for( ; vmap_num-- ; vmap++) if(vmap->font == font) return True; } } return False; } static int draw_vertical( Display *dpy, Drawable d, XOC oc, GC gc, XFontStruct *font, Bool is_xchar2b, int x, int y, XPointer text, int length) { XChar2b *buf2b; char *buf; int wx = 0, wy = 0; int direction = 0; int font_ascent_return = 0, font_descent_return = 0; int i; XCharStruct overall; wy = y; if (is_xchar2b) { for(i = 0, buf2b = (XChar2b *) text ; i < length ; i++, buf2b++) { if(is_rotate(oc, font) == True) { XTextExtents16(font, buf2b, 1, &direction, &font_ascent_return, &font_descent_return, &overall); wx = x - (int)((overall.rbearing - overall.lbearing) >> 1) - (int) overall.lbearing; wy += overall.ascent; XDrawString16(dpy, d, gc, wx, wy, buf2b, 1); wy += overall.descent; } else { wx = x - (int)((font->max_bounds.rbearing - font->min_bounds.lbearing) >> 1) - (int) font->min_bounds.lbearing; wy += font->max_bounds.ascent; XDrawString16(dpy, d, gc, wx, wy, buf2b, 1); wy += font->max_bounds.descent; } } } else { for(i = 0, buf = (char *)text ; i < length && *buf ; i++, buf++) { if(is_rotate(oc, font) == True) { XTextExtents(font, buf, 1, &direction, &font_ascent_return, &font_descent_return, &overall); wx = x - (int)((overall.rbearing - overall.lbearing) >> 1) - (int) overall.lbearing; wy += overall.ascent; XDrawString(dpy, d, gc, wx, wy, buf, 1); wy += overall.descent; } else { wx = x - (int)((font->max_bounds.rbearing - font->min_bounds.lbearing) >> 1) - (int) font->min_bounds.lbearing; wy += font->max_bounds.ascent; XDrawString(dpy, d, gc, wx, wy, buf, 1); wy += font->max_bounds.descent; } } } return wy; } #define VMAP 0 #define VROTATE 1 #define FONTSCOPE 2 static int DrawStringWithFontSet( Display *dpy, Drawable d, XOC oc, FontSet fs, GC gc, int x, int y, XPointer text, int length) { XFontStruct *font; Bool is_xchar2b; unsigned char *ptr; int ptr_len, char_len = 0; FontData fd; int ret = 0; ptr = (unsigned char *)text; is_xchar2b = fs->is_xchar2b; while (length > 0) { fd = _XomGetFontDataFromFontSet(fs, ptr,length,&ptr_len,is_xchar2b,FONTSCOPE); if(ptr_len <= 0) break; /* First, see if the "Best Match" font for the FontSet was set. * If it was, use that font. If it was not set, then use the * font defined by font_set->font_data[0] (which is what * _XomGetFontDataFromFontSet() always seems to return for * non-VW text). Note that given the new algorithm in * parse_fontname() and parse_fontdata(), fs->font will * *always* contain good data. We should probably remove * the check for "fd->font", but we won't :-) -- jjw/pma (HP) */ if((font = fs->font) == (XFontStruct *) NULL){ if(fd == (FontData) NULL || (font = fd->font) == (XFontStruct *) NULL) break; } switch(oc->core.orientation) { case XOMOrientation_LTR_TTB: case XOMOrientation_RTL_TTB: XSetFont(dpy, gc, font->fid); if (is_xchar2b) { char_len = ptr_len / sizeof(XChar2b); XDrawString16(dpy, d, gc, x, y, (XChar2b *)ptr, char_len); x += XTextWidth16(font, (XChar2b *)ptr, char_len); } else { char_len = ptr_len; XDrawString(dpy, d, gc, x, y, (char *)ptr, char_len); x += XTextWidth(font, (char *)ptr, char_len); } break; case XOMOrientation_TTB_RTL: case XOMOrientation_TTB_LTR: if(fs->font == font) { fd = _XomGetFontDataFromFontSet(fs, ptr,length,&ptr_len,is_xchar2b,VMAP); if(ptr_len <= 0) break; if(fd == (FontData) NULL || (font = fd->font) == (XFontStruct *) NULL) break; if(is_codemap(oc, fd->font) == False) { fd = _XomGetFontDataFromFontSet(fs, ptr,length,&ptr_len,is_xchar2b,VROTATE); if(ptr_len <= 0) break; if(fd == (FontData) NULL || (font = fd->font) == (XFontStruct *) NULL) break; } } if(is_xchar2b) char_len = ptr_len / sizeof(XChar2b); else char_len = ptr_len; XSetFont(dpy, gc, font->fid); y = draw_vertical(dpy, d, oc, gc, font, is_xchar2b, x, y, (char *)ptr, char_len); break; case XOMOrientation_Context: /* never used? */ break; } if(char_len <= 0) break; length -= char_len; ptr += ptr_len; } switch(oc->core.orientation) { case XOMOrientation_LTR_TTB: case XOMOrientation_RTL_TTB: ret = x; break; case XOMOrientation_TTB_RTL: case XOMOrientation_TTB_LTR: ret = y; break; case XOMOrientation_Context: /* not used? */ break; } return ret; } /* For VW/UDC */ int _XomGenericDrawString( Display *dpy, Drawable d, XOC oc, GC gc, int x, int y, XOMTextType type, XPointer text, int length) { XlcConv conv; XFontStruct *font; Bool is_xchar2b; /* VW/UDC */ XPointer args[3]; FontSet fs; /* VW/UDC */ XChar2b xchar2b_buf[BUFSIZ], *buf; int start_x = x; int start_y = y; int left = 0, buf_len = 0; int next = 0; conv = _XomInitConverter(oc, type); if (conv == NULL) return -1; args[0] = (XPointer) &font; args[1] = (XPointer) &is_xchar2b; args[2] = (XPointer) &fs; while (length > 0) { buf = xchar2b_buf; left = buf_len = BUFSIZ; if (_XomConvert(oc, conv, (XPointer *) &text, &length, (XPointer *) &buf, &left, args, 3) < 0) break; buf_len -= left; /* For VW/UDC */ next = DrawStringWithFontSet(dpy, d, oc, fs, gc, x, y, (XPointer)xchar2b_buf, buf_len); switch(oc->core.orientation) { case XOMOrientation_LTR_TTB: case XOMOrientation_RTL_TTB: x = next; break; case XOMOrientation_TTB_RTL: case XOMOrientation_TTB_LTR: y = next; break; case XOMOrientation_Context: /* not used */ break; } /* For VW/UDC */ } x -= start_x; y -= start_y; return x; } int _XmbGenericDrawString(Display *dpy, Drawable d, XOC oc, GC gc, int x, int y, _Xconst char *text, int length) { return _XomGenericDrawString(dpy, d, oc, gc, x, y, XOMMultiByte, (XPointer) text, length); } int _XwcGenericDrawString(Display *dpy, Drawable d, XOC oc, GC gc, int x, int y, _Xconst wchar_t *text, int length) { return _XomGenericDrawString(dpy, d, oc, gc, x, y, XOMWideChar, (XPointer) text, length); } int _Xutf8GenericDrawString(Display *dpy, Drawable d, XOC oc, GC gc, int x, int y, _Xconst char *text, int length) { return _XomGenericDrawString(dpy, d, oc, gc, x, y, XOMUtf8String, (XPointer) text, length); } lied warranty. * * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OlibX11-1.6.3/modules/om/generic/omTextExt.c000064401431060000012000000103351247741723500206640ustar00alancstaff00002660200006/* * Copyright 1992, 1993 by TOSHIBA Corp. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of TOSHIBA not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. TOSHIBA make no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * * Author: Katsuhisa Yano TOSHIBA Corp. * mopi@osa.ilab.toshiba.co.jp */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "XomGeneric.h" #include int _XomGenericTextExtents( XOC oc, XOMTextType type, XPointer text, int length, XRectangle *overall_ink, XRectangle *overall_logical) { XlcConv conv; XFontStruct *font; Bool is_xchar2b; XPointer args[2]; XChar2b xchar2b_buf[BUFSIZ], *buf; int direction, logical_ascent, logical_descent, tmp_ascent, tmp_descent; XCharStruct overall, tmp_overall; int buf_len, left; Bool first = True; conv = _XomInitConverter(oc, type); if (conv == NULL) return 0; bzero((char *) &overall, sizeof(XCharStruct)); logical_ascent = logical_descent = 0; args[0] = (XPointer) &font; args[1] = (XPointer) &is_xchar2b; while (length > 0) { buf = xchar2b_buf; left = buf_len = BUFSIZ; if (_XomConvert(oc, conv, (XPointer *) &text, &length, (XPointer *) &buf, &left, args, 2) < 0) break; buf_len -= left; if (is_xchar2b) XTextExtents16(font, xchar2b_buf, buf_len, &direction, &tmp_ascent, &tmp_descent, &tmp_overall); else XTextExtents(font, (char *) xchar2b_buf, buf_len, &direction, &tmp_ascent, &tmp_descent, &tmp_overall); if (first) { /* initialize overall */ overall = tmp_overall; logical_ascent = tmp_ascent; logical_descent = tmp_descent; first = False; } else { overall.lbearing = min(overall.lbearing, overall.width + tmp_overall.lbearing); overall.rbearing = max(overall.rbearing, overall.width + tmp_overall.rbearing); overall.ascent = max(overall.ascent, tmp_overall.ascent); overall.descent = max(overall.descent, tmp_overall.descent); overall.width += tmp_overall.width; logical_ascent = max(logical_ascent, tmp_ascent); logical_descent = max(logical_descent, tmp_descent); } } if (overall_ink) { overall_ink->x = overall.lbearing; overall_ink->y = -(overall.ascent); overall_ink->width = overall.rbearing - overall.lbearing; overall_ink->height = overall.ascent + overall.descent; } if (overall_logical) { overall_logical->x = 0; overall_logical->y = -(logical_ascent); overall_logical->width = overall.width; overall_logical->height = logical_ascent + logical_descent; } return overall.width; } int _XmbGenericTextExtents(XOC oc, _Xconst char *text, int length, XRectangle *overall_ink, XRectangle *overall_logical) { return _XomGenericTextExtents(oc, XOMMultiByte, (XPointer) text, length, overall_ink, overall_logical); } int _XwcGenericTextExtents(XOC oc, _Xconst wchar_t *text, int length, XRectangle *overall_ink, XRectangle *overall_logical) { return _XomGenericTextExtents(oc, XOMWideChar, (XPointer) text, length, overall_ink, overall_logical); } int _Xutf8GenericTextExtents(XOC oc, _Xconst char *text, int length, XRectangle *overall_ink, XRectangle *overall_logical) { return _XomGenericTextExtents(oc, XOMUtf8String, (XPointer) text, length, overall_ink, overall_logical); } libX11-1.6.3/modules/om/generic/Makefile.in000064401431060000012000000601231247741725500206260ustar00alancstaff00002660200006# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = modules/om/generic ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_define_dir.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h \ $(top_builddir)/include/X11/XlibConf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(commonlibdir)" LTLIBRARIES = $(commonlib_LTLIBRARIES) $(noinst_LTLIBRARIES) libxomGeneric_la_LIBADD = am__objects_1 = omDefault.lo omGeneric.lo omImText.lo omText.lo \ omTextEsc.lo omTextExt.lo omTextPer.lo omXChar.lo am_libxomGeneric_la_OBJECTS = $(am__objects_1) libxomGeneric_la_OBJECTS = $(am_libxomGeneric_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = @XLIB_LOADABLE_I18N_FALSE@am_libxomGeneric_la_rpath = am__DEPENDENCIES_1 = @XLIB_LOADABLE_I18N_TRUE@xomGeneric_la_DEPENDENCIES = \ @XLIB_LOADABLE_I18N_TRUE@ $(am__DEPENDENCIES_1) am_xomGeneric_la_OBJECTS = omDefault.lo omGeneric.lo omImText.lo \ omText.lo omTextEsc.lo omTextExt.lo omTextPer.lo omXChar.lo xomGeneric_la_OBJECTS = $(am_xomGeneric_la_OBJECTS) xomGeneric_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(xomGeneric_la_LDFLAGS) $(LDFLAGS) -o $@ @XLIB_LOADABLE_I18N_TRUE@am_xomGeneric_la_rpath = -rpath \ @XLIB_LOADABLE_I18N_TRUE@ $(commonlibdir) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src -I$(top_builddir)/include/X11 depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libxomGeneric_la_SOURCES) $(xomGeneric_la_SOURCES) DIST_SOURCES = $(libxomGeneric_la_SOURCES) $(xomGeneric_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASE_CFLAGS = @BASE_CFLAGS@ BIGFONT_CFLAGS = @BIGFONT_CFLAGS@ BIGFONT_LIBS = @BIGFONT_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHANGELOG_CMD = @CHANGELOG_CMD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ FOP = @FOP@ GREP = @GREP@ I18N_MODULE_LIBS = @I18N_MODULE_LIBS@ INSTALL = @INSTALL@ INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ KEYSYMDEFS = @KEYSYMDEFS@ LAUNCHD = @LAUNCHD@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LINT = @LINT@ LINTLIB = @LINTLIB@ LINT_FLAGS = @LINT_FLAGS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MALLOC_ZERO_CFLAGS = @MALLOC_ZERO_CFLAGS@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_SUBSTS = @MAN_SUBSTS@ MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RAWCPP = @RAWCPP@ RAWCPPFLAGS = @RAWCPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRICT_CFLAGS = @STRICT_CFLAGS@ STRIP = @STRIP@ STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ TRADITIONALCPPFLAGS = @TRADITIONALCPPFLAGS@ VERSION = @VERSION@ WCHAR32 = @WCHAR32@ X11_CFLAGS = @X11_CFLAGS@ X11_DATADIR = @X11_DATADIR@ X11_EXTRA_DEPS = @X11_EXTRA_DEPS@ X11_LIBDIR = @X11_LIBDIR@ X11_LIBS = @X11_LIBS@ X11_LOCALEDATADIR = @X11_LOCALEDATADIR@ X11_LOCALEDIR = @X11_LOCALEDIR@ X11_LOCALELIBDIR = @X11_LOCALELIBDIR@ XERRORDB = @XERRORDB@ XKBPROTO_REQUIRES = @XKBPROTO_REQUIRES@ XKEYSYMDB = @XKEYSYMDB@ XLOCALEDATADIR = @XLOCALEDATADIR@ XLOCALEDIR = @XLOCALEDIR@ XLOCALELIBDIR = @XLOCALELIBDIR@ XMALLOC_ZERO_CFLAGS = @XMALLOC_ZERO_CFLAGS@ XMLTO = @XMLTO@ XORG_MAN_PAGE = @XORG_MAN_PAGE@ XORG_SGML_PATH = @XORG_SGML_PATH@ XSLTPROC = @XSLTPROC@ XSL_STYLESHEET = @XSL_STYLESHEET@ XTHREADLIB = @XTHREADLIB@ XTHREAD_CFLAGS = @XTHREAD_CFLAGS@ XTMALLOC_ZERO_CFLAGS = @XTMALLOC_ZERO_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ locales = @locales@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = \ -I$(top_srcdir)/include \ -I$(top_srcdir)/include/X11 \ -I$(top_builddir)/include \ -I$(top_builddir)/include/X11 \ -I$(top_srcdir)/src/xcms \ -I$(top_srcdir)/src/xkb \ -I$(top_srcdir)/src/xlibi18n \ -I$(top_srcdir)/src \ -D_BSD_SOURCE AM_CFLAGS = \ $(X11_CFLAGS) \ $(BIGFONT_CFLAGS) \ $(MALLOC_ZERO_CFLAGS) \ $(CWARNFLAGS) @XLIB_LOADABLE_I18N_TRUE@commonlibdir = $(X11_LOCALELIBDIR)/common @XLIB_LOADABLE_I18N_TRUE@commonlib_LTLIBRARIES = xomGeneric.la @XLIB_LOADABLE_I18N_TRUE@xomGeneric_la_LDFLAGS = -module -version-number 2:0:0 @XLIB_LOADABLE_I18N_TRUE@xomGeneric_la_LIBADD = $(I18N_MODULE_LIBS) @XLIB_LOADABLE_I18N_FALSE@noinst_LTLIBRARIES = libxomGeneric.la xomGeneric_la_SOURCES = \ omDefault.c \ omGeneric.c \ omImText.c \ omText.c \ omTextEsc.c \ omTextExt.c \ omTextPer.c \ omXChar.c libxomGeneric_la_SOURCES = $(xomGeneric_la_SOURCES) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign modules/om/generic/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign modules/om/generic/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-commonlibLTLIBRARIES: $(commonlib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(commonlib_LTLIBRARIES)'; test -n "$(commonlibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(commonlibdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(commonlibdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(commonlibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(commonlibdir)"; \ } uninstall-commonlibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(commonlib_LTLIBRARIES)'; test -n "$(commonlibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(commonlibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(commonlibdir)/$$f"; \ done clean-commonlibLTLIBRARIES: -test -z "$(commonlib_LTLIBRARIES)" || rm -f $(commonlib_LTLIBRARIES) @list='$(commonlib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libxomGeneric.la: $(libxomGeneric_la_OBJECTS) $(libxomGeneric_la_DEPENDENCIES) $(EXTRA_libxomGeneric_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(am_libxomGeneric_la_rpath) $(libxomGeneric_la_OBJECTS) $(libxomGeneric_la_LIBADD) $(LIBS) xomGeneric.la: $(xomGeneric_la_OBJECTS) $(xomGeneric_la_DEPENDENCIES) $(EXTRA_xomGeneric_la_DEPENDENCIES) $(AM_V_CCLD)$(xomGeneric_la_LINK) $(am_xomGeneric_la_rpath) $(xomGeneric_la_OBJECTS) $(xomGeneric_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/omDefault.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/omGeneric.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/omImText.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/omText.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/omTextEsc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/omTextExt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/omTextPer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/omXChar.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(commonlibdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-commonlibLTLIBRARIES clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-commonlibLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-commonlibLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-commonlibLTLIBRARIES clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-commonlibLTLIBRARIES install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am \ uninstall-commonlibLTLIBRARIES .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: m__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-commonlibLTLIBRARIES: $(commonlib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(commonlib_LTLIBRARIES)'; test -n "$(commonlibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$plibX11-1.6.3/modules/om/generic/Makefile.am000064401431060000012000000014341247741723500206130ustar00alancstaff00002660200006AM_CPPFLAGS= \ -I$(top_srcdir)/include \ -I$(top_srcdir)/include/X11 \ -I$(top_builddir)/include \ -I$(top_builddir)/include/X11 \ -I$(top_srcdir)/src/xcms \ -I$(top_srcdir)/src/xkb \ -I$(top_srcdir)/src/xlibi18n \ -I$(top_srcdir)/src \ -D_BSD_SOURCE AM_CFLAGS= \ $(X11_CFLAGS) \ $(BIGFONT_CFLAGS) \ $(MALLOC_ZERO_CFLAGS) \ $(CWARNFLAGS) if XLIB_LOADABLE_I18N commonlibdir = $(X11_LOCALELIBDIR)/common commonlib_LTLIBRARIES=xomGeneric.la xomGeneric_la_LDFLAGS = -module -version-number 2:0:0 xomGeneric_la_LIBADD = $(I18N_MODULE_LIBS) else noinst_LTLIBRARIES = libxomGeneric.la endif xomGeneric_la_SOURCES = \ omDefault.c \ omGeneric.c \ omImText.c \ omText.c \ omTextEsc.c \ omTextExt.c \ omTextPer.c \ omXChar.c libxomGeneric_la_SOURCES = $(xomGeneric_la_SOURCES) libX11-1.6.3/modules/om/generic/omTextPer.c000064401431060000012000000132761247741723500206610ustar00alancstaff00002660200006/* * Copyright 1992, 1993 by TOSHIBA Corp. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of TOSHIBA not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. TOSHIBA make no representations about the * suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. * * Author: Katsuhisa Yano TOSHIBA Corp. * mopi@osa.ilab.toshiba.co.jp */ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "XomGeneric.h" #include static Status _XomGenericTextPerCharExtents( XOC oc, XOMTextType type, XPointer text, int length, XRectangle *ink_buf, XRectangle *logical_buf, int buf_size, int *num_chars, XRectangle *overall_ink, XRectangle *overall_logical) { XlcConv conv; XFontStruct *font; Bool is_xchar2b; XPointer args[2]; XChar2b xchar2b_buf[BUFSIZ], *xchar2b_ptr; char *xchar_ptr = NULL; XCharStruct *def, *cs, overall; int buf_len, left, require_num; int logical_ascent, logical_descent; Bool first = True; conv = _XomInitConverter(oc, type); if (conv == NULL) return 0; bzero((char *) &overall, sizeof(XCharStruct)); logical_ascent = logical_descent = require_num = *num_chars = 0; args[0] = (XPointer) &font; args[1] = (XPointer) &is_xchar2b; while (length > 0) { xchar2b_ptr = xchar2b_buf; left = buf_len = BUFSIZ; if (_XomConvert(oc, conv, (XPointer *) &text, &length, (XPointer *) &xchar2b_ptr, &left, args, 2) < 0) break; buf_len -= left; if (require_num) { require_num += buf_len; continue; } if (buf_size < buf_len) { require_num = *num_chars + buf_len; continue; } buf_size -= buf_len; if (first) { logical_ascent = font->ascent; logical_descent = font->descent; } else { logical_ascent = max(logical_ascent, font->ascent); logical_descent = max(logical_descent, font->descent); } if (is_xchar2b) { CI_GET_DEFAULT_INFO_2D(font, def) xchar2b_ptr = xchar2b_buf; } else { CI_GET_DEFAULT_INFO_1D(font, def) xchar_ptr = (char *) xchar2b_buf; } while (buf_len-- > 0) { if (is_xchar2b) { CI_GET_CHAR_INFO_2D(font, xchar2b_ptr->byte1, xchar2b_ptr->byte2, def, cs) xchar2b_ptr++; } else { CI_GET_CHAR_INFO_1D(font, *xchar_ptr, def, cs) xchar_ptr++; } if (cs == NULL) continue; ink_buf->x = overall.width + cs->lbearing; ink_buf->y = -(cs->ascent); ink_buf->width = cs->rbearing - cs->lbearing; ink_buf->height = cs->ascent + cs->descent; ink_buf++; logical_buf->x = overall.width; logical_buf->y = -(font->ascent); logical_buf->width = cs->width; logical_buf->height = font->ascent + font->descent; logical_buf++; if (first) { overall = *cs; first = False; } else { overall.ascent = max(overall.ascent, cs->ascent); overall.descent = max(overall.descent, cs->descent); overall.lbearing = min(overall.lbearing, overall.width + cs->lbearing); overall.rbearing = max(overall.rbearing, overall.width + cs->rbearing); overall.width += cs->width; } (*num_chars)++; } } if (require_num) { *num_chars = require_num; return 0; } else { if (overall_ink) { overall_ink->x = overall.lbearing; overall_ink->y = -(overall.ascent); overall_ink->width = overall.rbearing - overall.lbearing; overall_ink->height = overall.ascent + overall.descent; } if (overall_logical) { overall_logical->x = 0; overall_logical->y = -(logical_ascent); overall_logical->width = overall.width; overall_logical->height = logical_ascent + logical_descent; } } return 1; } Status _XmbGenericTextPerCharExtents(XOC oc, _Xconst char *text, int length, XRectangle *ink_buf, XRectangle *logical_buf, int buf_size, int *num_chars, XRectangle *overall_ink, XRectangle *overall_logical) { return _XomGenericTextPerCharExtents(oc, XOMMultiByte, (XPointer) text, length, ink_buf, logical_buf, buf_size, num_chars, overall_ink, overall_logical); } Status _XwcGenericTextPerCharExtents(XOC oc, _Xconst wchar_t *text, int length, XRectangle *ink_buf, XRectangle *logical_buf, int buf_size, int *num_chars, XRectangle *overall_ink, XRectangle *overall_logical) { return _XomGenericTextPerCharExtents(oc, XOMWideChar, (XPointer) text, length, ink_buf, logical_buf, buf_size, num_chars, overall_ink, overall_logical); } Status _Xutf8GenericTextPerCharExtents(XOC oc, _Xconst char *text, int length, XRectangle *ink_buf, XRectangle *logical_buf, int buf_size, int *num_chars, XRectangle *overall_ink, XRectangle *overall_logical) { return _XomGenericTextPerCharExtents(oc, XOMUtf8String, (XPointer) text, length, ink_buf, logical_buf, buf_size, num_chars, overall_ink, overall_logical); } libX11-1.6.3/modules/om/Makefile.in000064401431060000012000000471721247741725500172230ustar00alancstaff00002660200006# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = modules/om ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_define_dir.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h \ $(top_builddir)/include/X11/XlibConf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASE_CFLAGS = @BASE_CFLAGS@ BIGFONT_CFLAGS = @BIGFONT_CFLAGS@ BIGFONT_LIBS = @BIGFONT_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHANGELOG_CMD = @CHANGELOG_CMD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ FOP = @FOP@ GREP = @GREP@ I18N_MODULE_LIBS = @I18N_MODULE_LIBS@ INSTALL = @INSTALL@ INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ KEYSYMDEFS = @KEYSYMDEFS@ LAUNCHD = @LAUNCHD@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LINT = @LINT@ LINTLIB = @LINTLIB@ LINT_FLAGS = @LINT_FLAGS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MALLOC_ZERO_CFLAGS = @MALLOC_ZERO_CFLAGS@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_SUBSTS = @MAN_SUBSTS@ MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RAWCPP = @RAWCPP@ RAWCPPFLAGS = @RAWCPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRICT_CFLAGS = @STRICT_CFLAGS@ STRIP = @STRIP@ STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ TRADITIONALCPPFLAGS = @TRADITIONALCPPFLAGS@ VERSION = @VERSION@ WCHAR32 = @WCHAR32@ X11_CFLAGS = @X11_CFLAGS@ X11_DATADIR = @X11_DATADIR@ X11_EXTRA_DEPS = @X11_EXTRA_DEPS@ X11_LIBDIR = @X11_LIBDIR@ X11_LIBS = @X11_LIBS@ X11_LOCALEDATADIR = @X11_LOCALEDATADIR@ X11_LOCALEDIR = @X11_LOCALEDIR@ X11_LOCALELIBDIR = @X11_LOCALELIBDIR@ XERRORDB = @XERRORDB@ XKBPROTO_REQUIRES = @XKBPROTO_REQUIRES@ XKEYSYMDB = @XKEYSYMDB@ XLOCALEDATADIR = @XLOCALEDATADIR@ XLOCALEDIR = @XLOCALEDIR@ XLOCALELIBDIR = @XLOCALELIBDIR@ XMALLOC_ZERO_CFLAGS = @XMALLOC_ZERO_CFLAGS@ XMLTO = @XMLTO@ XORG_MAN_PAGE = @XORG_MAN_PAGE@ XORG_SGML_PATH = @XORG_SGML_PATH@ XSLTPROC = @XSLTPROC@ XSL_STYLESHEET = @XSL_STYLESHEET@ XTHREADLIB = @XTHREADLIB@ XTHREAD_CFLAGS = @XTHREAD_CFLAGS@ XTMALLOC_ZERO_CFLAGS = @XTMALLOC_ZERO_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ locales = @locales@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = generic all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign modules/om/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign modules/om/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: endor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = libX11-1.6.3/modules/Makefile.in000064401431060000012000000471621247741725400166060ustar00alancstaff00002660200006# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = modules ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_define_dir.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h \ $(top_builddir)/include/X11/XlibConf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASE_CFLAGS = @BASE_CFLAGS@ BIGFONT_CFLAGS = @BIGFONT_CFLAGS@ BIGFONT_LIBS = @BIGFONT_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHANGELOG_CMD = @CHANGELOG_CMD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ FOP = @FOP@ GREP = @GREP@ I18N_MODULE_LIBS = @I18N_MODULE_LIBS@ INSTALL = @INSTALL@ INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ KEYSYMDEFS = @KEYSYMDEFS@ LAUNCHD = @LAUNCHD@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LINT = @LINT@ LINTLIB = @LINTLIB@ LINT_FLAGS = @LINT_FLAGS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MALLOC_ZERO_CFLAGS = @MALLOC_ZERO_CFLAGS@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_SUBSTS = @MAN_SUBSTS@ MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RAWCPP = @RAWCPP@ RAWCPPFLAGS = @RAWCPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRICT_CFLAGS = @STRICT_CFLAGS@ STRIP = @STRIP@ STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ TRADITIONALCPPFLAGS = @TRADITIONALCPPFLAGS@ VERSION = @VERSION@ WCHAR32 = @WCHAR32@ X11_CFLAGS = @X11_CFLAGS@ X11_DATADIR = @X11_DATADIR@ X11_EXTRA_DEPS = @X11_EXTRA_DEPS@ X11_LIBDIR = @X11_LIBDIR@ X11_LIBS = @X11_LIBS@ X11_LOCALEDATADIR = @X11_LOCALEDATADIR@ X11_LOCALEDIR = @X11_LOCALEDIR@ X11_LOCALELIBDIR = @X11_LOCALELIBDIR@ XERRORDB = @XERRORDB@ XKBPROTO_REQUIRES = @XKBPROTO_REQUIRES@ XKEYSYMDB = @XKEYSYMDB@ XLOCALEDATADIR = @XLOCALEDATADIR@ XLOCALEDIR = @XLOCALEDIR@ XLOCALELIBDIR = @XLOCALELIBDIR@ XMALLOC_ZERO_CFLAGS = @XMALLOC_ZERO_CFLAGS@ XMLTO = @XMLTO@ XORG_MAN_PAGE = @XORG_MAN_PAGE@ XORG_SGML_PATH = @XORG_SGML_PATH@ XSLTPROC = @XSLTPROC@ XSL_STYLESHEET = @XSL_STYLESHEET@ XTHREADLIB = @XTHREADLIB@ XTHREAD_CFLAGS = @XTHREAD_CFLAGS@ XTMALLOC_ZERO_CFLAGS = @XTMALLOC_ZERO_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ locales = @locales@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = im lc om all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign modules/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign modules/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ild_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @lilibX11-1.6.3/modules/im/Makefile.am000064401431060000012000000000161247741723500171640ustar00alancstaff00002660200006SUBDIRS=ximcp libX11-1.6.3/modules/im/ximcp/imDefLkup.c000064401431060000012000000650671247741723500203150ustar00alancstaff00002660200006/****************************************************************** Copyright 1992, 1993, 1994 by FUJITSU LIMITED Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of FUJITSU LIMITED not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #include "Xlibint.h" #include "Xlcint.h" #include "Ximint.h" Xic _XimICOfXICID( Xim im, XICID icid) { Xic pic; for (pic = (Xic)im->core.ic_chain; pic; pic = (Xic)pic->core.next) { if (pic->private.proto.icid == icid) return pic; } return (Xic)0; } static void _XimProcIMSetEventMask( Xim im, XPointer buf) { EVENTMASK *buf_l = (EVENTMASK *)buf; im->private.proto.forward_event_mask = buf_l[0]; im->private.proto.synchronous_event_mask = buf_l[1]; return; } static void _XimProcICSetEventMask( Xic ic, XPointer buf) { EVENTMASK *buf_l = (EVENTMASK *)buf; ic->private.proto.forward_event_mask = buf_l[0]; ic->private.proto.synchronous_event_mask = buf_l[1]; _XimReregisterFilter(ic); return; } Bool _XimSetEventMaskCallback( Xim xim, INT16 len, XPointer data, XPointer call_data) { CARD16 *buf_s = (CARD16 *)((CARD8 *)data + XIM_HEADER_SIZE); XIMID imid = buf_s[0]; XICID icid = buf_s[1]; Xim im = (Xim)call_data; Xic ic; if (imid == im->private.proto.imid) { if (icid) { ic = _XimICOfXICID(im, icid); _XimProcICSetEventMask(ic, (XPointer)&buf_s[2]); } else { _XimProcIMSetEventMask(im, (XPointer)&buf_s[2]); } return True; } return False; } static Bool _XimSyncCheck( Xim im, INT16 len, XPointer data, XPointer arg) { Xic ic = (Xic)arg; CARD16 *buf_s = (CARD16 *)((CARD8 *)data + XIM_HEADER_SIZE); CARD8 major_opcode = *((CARD8 *)data); CARD8 minor_opcode = *((CARD8 *)data + 1); XIMID imid = buf_s[0]; XICID icid = buf_s[1]; if ((major_opcode == XIM_SYNC_REPLY) && (minor_opcode == 0) && (imid == im->private.proto.imid) && (icid == ic->private.proto.icid)) return True; if ((major_opcode == XIM_ERROR) && (minor_opcode == 0) && (buf_s[2] & XIM_IMID_VALID) && (imid == im->private.proto.imid) && (buf_s[2] & XIM_ICID_VALID) && (icid == ic->private.proto.icid)) return True; return False; } Bool _XimSync( Xim im, Xic ic) { CARD32 buf32[BUFSIZE/4]; CARD8 *buf = (CARD8 *)buf32; CARD16 *buf_s = (CARD16 *)&buf[XIM_HEADER_SIZE]; INT16 len; CARD32 reply32[BUFSIZE/4]; char *reply = (char *)reply32; XPointer preply; int buf_size; int ret_code; buf_s[0] = im->private.proto.imid; /* imid */ buf_s[1] = ic->private.proto.icid; /* icid */ len = sizeof(CARD16) /* sizeof imid */ + sizeof(CARD16); /* sizeof icid */ _XimSetHeader((XPointer)buf, XIM_SYNC, 0, &len); if (!(_XimWrite(im, len, (XPointer)buf))) return False; _XimFlush(im); buf_size = BUFSIZE; ret_code = _XimRead(im, &len, (XPointer)reply, buf_size, _XimSyncCheck, (XPointer)ic); if(ret_code == XIM_TRUE) { preply = reply; } else if(ret_code == XIM_OVERFLOW) { if(len <= 0) { preply = reply; } else { buf_size = len; preply = Xmalloc(len); ret_code = _XimRead(im, &len, preply, buf_size, _XimSyncCheck, (XPointer)ic); if(ret_code != XIM_TRUE) { Xfree(preply); return False; } } } else { return False; } buf_s = (CARD16 *)((char *)preply + XIM_HEADER_SIZE); if (*((CARD8 *)preply) == XIM_ERROR) { _XimProcError(im, 0, (XPointer)&buf_s[3]); if(reply != preply) Xfree(preply); return False; } if(reply != preply) Xfree(preply); return True; } Bool _XimProcSyncReply( Xim im, Xic ic) { CARD32 buf32[BUFSIZE/4]; CARD8 *buf = (CARD8 *)buf32; CARD16 *buf_s = (CARD16 *)&buf[XIM_HEADER_SIZE]; INT16 len; buf_s[0] = im->private.proto.imid; /* imid */ buf_s[1] = ic->private.proto.icid; /* icid */ len = sizeof(CARD16) /* sizeof imid */ + sizeof(CARD16); /* sizeof icid */ _XimSetHeader((XPointer)buf, XIM_SYNC_REPLY, 0, &len); if (!(_XimWrite(im, len, (XPointer)buf))) return False; _XimFlush(im); return True; } Bool _XimRespSyncReply( Xic ic, BITMASK16 mode) { if (mode & XimSYNCHRONUS) /* SYNC Request */ MARK_NEED_SYNC_REPLY(ic->core.im); return True; } Bool _XimSyncCallback( Xim xim, INT16 len, XPointer data, XPointer call_data) { CARD16 *buf_s = (CARD16 *)((CARD8 *)data + XIM_HEADER_SIZE); XIMID imid = buf_s[0]; XICID icid = buf_s[1]; Xim im = (Xim)call_data; Xic ic; if ((imid == im->private.proto.imid) && (ic = _XimICOfXICID(im, icid))) { (void)_XimProcSyncReply(im, ic); return True; } return False; } static INT16 _XimSetEventToWire( XEvent *ev, xEvent *event) { if (!(_XimProtoEventToWire(ev, event, False))) return 0; event->u.u.sequenceNumber = ((XAnyEvent *)ev)->serial & (unsigned long)0xffff; return sz_xEvent; } static Bool _XimForwardEventCore( Xic ic, XEvent *ev, Bool sync) { Xim im = (Xim)ic->core.im; CARD32 buf32[BUFSIZE/4]; CARD8 *buf = (CARD8 *)buf32; CARD16 *buf_s = (CARD16 *)&buf[XIM_HEADER_SIZE]; CARD32 reply32[BUFSIZE/4]; char *reply = (char *)reply32; XPointer preply; int buf_size; int ret_code; INT16 len; bzero(buf32, sizeof(buf32)); /* valgrind noticed uninitialized memory use! */ if (!(len = _XimSetEventToWire(ev, (xEvent *)&buf_s[4]))) return False; /* X event */ buf_s[0] = im->private.proto.imid; /* imid */ buf_s[1] = ic->private.proto.icid; /* icid */ buf_s[2] = sync ? XimSYNCHRONUS : 0; /* flag */ buf_s[3] = (CARD16)((((XAnyEvent *)ev)->serial & ~((unsigned long)0xffff)) >> 16); /* serial number */ len += sizeof(CARD16) /* sizeof imid */ + sizeof(CARD16) /* sizeof icid */ + sizeof(BITMASK16) /* sizeof flag */ + sizeof(CARD16); /* sizeof serila number */ _XimSetHeader((XPointer)buf, XIM_FORWARD_EVENT, 0, &len); if (!(_XimWrite(im, len, (XPointer)buf))) return False; _XimFlush(im); if (sync) { buf_size = BUFSIZE; ret_code = _XimRead(im, &len, (XPointer)reply, buf_size, _XimSyncCheck, (XPointer)ic); if(ret_code == XIM_TRUE) { preply = reply; } else if(ret_code == XIM_OVERFLOW) { if(len <= 0) { preply = reply; } else { buf_size = len; preply = Xmalloc(len); ret_code = _XimRead(im, &len, preply, buf_size, _XimSyncCheck, (XPointer)ic); if(ret_code != XIM_TRUE) { Xfree(preply); return False; } } } else { return False; } buf_s = (CARD16 *)((char *)preply + XIM_HEADER_SIZE); if (*((CARD8 *)preply) == XIM_ERROR) { _XimProcError(im, 0, (XPointer)&buf_s[3]); if(reply != preply) Xfree(preply); return False; } if(reply != preply) Xfree(preply); } return True; } Bool _XimForwardEvent( Xic ic, XEvent *ev, Bool sync) { #ifdef EXT_FORWARD if (((ev->type == KeyPress) || (ev->type == KeyRelease))) if (_XimExtForwardKeyEvent(ic, (XKeyEvent *)ev, sync)) return True; #endif return _XimForwardEventCore(ic, ev, sync); } static void _XimProcEvent( Display *d, Xic ic, XEvent *ev, CARD16 *buf) { INT16 serial = buf[0]; xEvent *xev = (xEvent *)&buf[1]; _XimProtoWireToEvent(ev, xev, False); ev->xany.serial |= serial << 16; ev->xany.send_event = False; ev->xany.display = d; MARK_FABRICATED(ic->core.im); return; } static Bool _XimForwardEventRecv( Xim im, Xic ic, XPointer buf) { CARD16 *buf_s = (CARD16 *)buf; Display *d = im->core.display; XEvent ev; _XimProcEvent(d, ic, &ev, &buf_s[1]); (void)_XimRespSyncReply(ic, buf_s[0]); XPutBackEvent(d, &ev); return True; } Bool _XimForwardEventCallback( Xim xim, INT16 len, XPointer data, XPointer call_data) { CARD16 *buf_s = (CARD16 *)((CARD8 *)data + XIM_HEADER_SIZE); XIMID imid = buf_s[0]; XICID icid = buf_s[1]; Xim im = (Xim)call_data; Xic ic; if ((imid == im->private.proto.imid) && (ic = _XimICOfXICID(im, icid))) { (void)_XimForwardEventRecv(im, ic, (XPointer)&buf_s[2]); return True; } return False; } static Bool _XimRegisterTriggerkey( Xim im, XPointer buf) { CARD32 *buf_l = (CARD32 *)buf; CARD32 len; CARD32 *key; if (IS_DYNAMIC_EVENT_FLOW(im)) /* already Dynamic event flow mode */ return True; /* * register onkeylist */ len = buf_l[0]; /* length of on-keys */ len += sizeof(INT32); /* sizeof length of on-keys */ if (!(key = Xmalloc(len))) { _XimError(im, 0, XIM_BadAlloc, (INT16)0, (CARD16)0, (char *)NULL); return False; } memcpy((char *)key, (char *)buf_l, len); im->private.proto.im_onkeylist = key; MARK_DYNAMIC_EVENT_FLOW(im); /* * register offkeylist */ buf_l = (CARD32 *)((char *)buf + len); len = buf_l[0]; /* length of off-keys */ len += sizeof(INT32); /* sizeof length of off-keys */ if (!(key = Xmalloc(len))) { _XimError(im, 0, XIM_BadAlloc, (INT16)0, (CARD16)0, (char *)NULL); return False; } memcpy((char *)key, (char *)buf_l, len); im->private.proto.im_offkeylist = key; return True; } Bool _XimRegisterTriggerKeysCallback( Xim xim, INT16 len, XPointer data, XPointer call_data) { CARD16 *buf_s = (CARD16 *)((CARD8 *)data + XIM_HEADER_SIZE); Xim im = (Xim)call_data; (void )_XimRegisterTriggerkey(im, (XPointer)&buf_s[2]); return True; } EVENTMASK _XimGetWindowEventmask( Xic ic) { Xim im = (Xim )ic->core.im; XWindowAttributes atr; if (!XGetWindowAttributes(im->core.display, ic->core.focus_window, &atr)) return 0; return (EVENTMASK)atr.your_event_mask; } static Bool _XimTriggerNotifyCheck( Xim im, INT16 len, XPointer data, XPointer arg) { Xic ic = (Xic)arg; CARD16 *buf_s = (CARD16 *)((CARD8 *)data + XIM_HEADER_SIZE); CARD8 major_opcode = *((CARD8 *)data); CARD8 minor_opcode = *((CARD8 *)data + 1); XIMID imid = buf_s[0]; XICID icid = buf_s[1]; if ((major_opcode == XIM_TRIGGER_NOTIFY_REPLY) && (minor_opcode == 0) && (imid == im->private.proto.imid) && (icid == ic->private.proto.icid)) return True; if ((major_opcode == XIM_ERROR) && (minor_opcode == 0) && (buf_s[2] & XIM_IMID_VALID) && (imid == im->private.proto.imid) && (buf_s[2] & XIM_ICID_VALID) && (icid == ic->private.proto.icid)) return True; return False; } Bool _XimTriggerNotify( Xim im, Xic ic, int mode, CARD32 idx) { CARD32 buf32[BUFSIZE/4]; CARD8 *buf = (CARD8 *)buf32; CARD16 *buf_s = (CARD16 *)&buf[XIM_HEADER_SIZE]; CARD32 *buf_l = (CARD32 *)&buf[XIM_HEADER_SIZE]; CARD32 reply32[BUFSIZE/4]; char *reply = (char *)reply32; XPointer preply; int buf_size; int ret_code; INT16 len; EVENTMASK mask = _XimGetWindowEventmask(ic); buf_s[0] = im->private.proto.imid; /* imid */ buf_s[1] = ic->private.proto.icid; /* icid */ buf_l[1] = mode; /* flag */ buf_l[2] = idx; /* index of keys list */ buf_l[3] = mask; /* select-event-mask */ len = sizeof(CARD16) /* sizeof imid */ + sizeof(CARD16) /* sizeof icid */ + sizeof(CARD32) /* sizeof flag */ + sizeof(CARD32) /* sizeof index of key list */ + sizeof(EVENTMASK); /* sizeof select-event-mask */ _XimSetHeader((XPointer)buf, XIM_TRIGGER_NOTIFY, 0, &len); if (!(_XimWrite(im, len, (XPointer)buf))) return False; _XimFlush(im); buf_size = BUFSIZE; ret_code = _XimRead(im, &len, (XPointer)reply, buf_size, _XimTriggerNotifyCheck, (XPointer)ic); if(ret_code == XIM_TRUE) { preply = reply; } else if(ret_code == XIM_OVERFLOW) { if(len <= 0) { preply = reply; } else { buf_size = len; preply = Xmalloc(len); ret_code = _XimRead(im, &len, (XPointer)reply, buf_size, _XimTriggerNotifyCheck, (XPointer)ic); if(ret_code != XIM_TRUE) { Xfree(preply); return False; } } } else { return False; } buf_s = (CARD16 *)((char *)preply + XIM_HEADER_SIZE); if (*((CARD8 *)preply) == XIM_ERROR) { _XimProcError(im, 0, (XPointer)&buf_s[3]); if(reply != preply) Xfree(preply); return False; } if(reply != preply) Xfree(preply); return True; } static Bool _XimRegCommitInfo( Xic ic, char *string, int string_len, KeySym *keysym, int keysym_len) { XimCommitInfo info; if (!(info = Xmalloc(sizeof(XimCommitInfoRec)))) return False; info->string = string; info->string_len = string_len; info->keysym = keysym; info->keysym_len = keysym_len; info->next = ic->private.proto.commit_info; ic->private.proto.commit_info = info; return True; } static void _XimUnregCommitInfo( Xic ic) { XimCommitInfo info; if (!(info = ic->private.proto.commit_info)) return; Xfree(info->string); Xfree(info->keysym); ic->private.proto.commit_info = info->next; Xfree(info); return; } void _XimFreeCommitInfo( Xic ic) { while (ic->private.proto.commit_info) _XimUnregCommitInfo(ic); return; } static Bool _XimProcKeySym( Xic ic, CARD32 sym, KeySym **xim_keysym, int *xim_keysym_len) { Xim im = (Xim)ic->core.im; if (!(*xim_keysym = Xmalloc(sizeof(KeySym)))) { _XimError(im, ic, XIM_BadAlloc, (INT16)0, (CARD16)0, (char *)NULL); return False; } **xim_keysym = (KeySym)sym; *xim_keysym_len = 1; return True; } static Bool _XimProcCommit( Xic ic, BYTE *buf, int len, char **xim_string, int *xim_string_len) { Xim im = (Xim)ic->core.im; char *string; if (!(string = Xmalloc(len + 1))) { _XimError(im, ic, XIM_BadAlloc, (INT16)0, (CARD16)0, (char *)NULL); return False; } (void)memcpy(string, (char *)buf, len); string[len] = '\0'; *xim_string = string; *xim_string_len = len; return True; } static Bool _XimCommitRecv( Xim im, Xic ic, XPointer buf) { CARD16 *buf_s = (CARD16 *)buf; BITMASK16 flag = buf_s[0]; XKeyEvent ev; char *string = NULL; int string_len = 0; KeySym *keysym = NULL; int keysym_len = 0; if ((flag & XimLookupBoth) == XimLookupChars) { if (!(_XimProcCommit(ic, (BYTE *)&buf_s[2], (int)buf_s[1], &string, &string_len))) return False; } else if ((flag & XimLookupBoth) == XimLookupKeySym) { if (!(_XimProcKeySym(ic, *(CARD32 *)&buf_s[2], &keysym, &keysym_len))) return False; } else if ((flag & XimLookupBoth) == XimLookupBoth) { if (!(_XimProcKeySym(ic, *(CARD32 *)&buf_s[2], &keysym, &keysym_len))) return False; if (!(_XimProcCommit(ic, (BYTE *)&buf_s[5], (int)buf_s[4], &string, &string_len))) { Xfree(keysym); return False; } } if (!(_XimRegCommitInfo(ic, string, string_len, keysym, keysym_len))) { Xfree(string); Xfree(keysym); _XimError(im, ic, XIM_BadAlloc, (INT16)0, (CARD16)0, (char *)NULL); return False; } (void)_XimRespSyncReply(ic, flag); if (ic->private.proto.registed_filter_event & (KEYPRESS_MASK | KEYRELEASE_MASK)) MARK_FABRICATED(im); bzero(&ev, sizeof(ev)); /* uninitialized : found when running kterm under valgrind */ ev.type = KeyPress; ev.send_event = False; ev.display = im->core.display; ev.window = ic->core.focus_window; ev.keycode = 0; ev.state = 0; ev.time = 0L; ev.serial = LastKnownRequestProcessed(im->core.display); /* FIXME : I wish there were COMMENTs (!) about the data passed around. */ #if 0 fprintf(stderr,"%s,%d: putback k press FIXED ev.time=0 ev.serial=%lu\n", __FILE__, __LINE__, ev.serial); #endif XPutBackEvent(im->core.display, (XEvent *)&ev); return True; } Bool _XimCommitCallback( Xim xim, INT16 len, XPointer data, XPointer call_data) { CARD16 *buf_s = (CARD16 *)((CARD8 *)data + XIM_HEADER_SIZE); XIMID imid = buf_s[0]; XICID icid = buf_s[1]; Xim im = (Xim)call_data; Xic ic; if ((imid == im->private.proto.imid) && (ic = _XimICOfXICID(im, icid))) { (void)_XimCommitRecv(im, ic, (XPointer)&buf_s[2]); return True; } return False; } void _XimProcError( Xim im, Xic ic, XPointer data) { return; } Bool _XimErrorCallback( Xim xim, INT16 len, XPointer data, XPointer call_data) { CARD16 *buf_s = (CARD16 *)((CARD8 *)data + XIM_HEADER_SIZE); BITMASK16 flag = buf_s[2]; XIMID imid; XICID icid; Xim im = (Xim)call_data; Xic ic = NULL; if (flag & XIM_IMID_VALID) { imid = buf_s[0]; if (imid != im->private.proto.imid) return False; } if (flag & XIM_ICID_VALID) { icid = buf_s[1]; if (!(ic = _XimICOfXICID(im, icid))) return False; } _XimProcError(im, ic, (XPointer)&buf_s[3]); return True; } Bool _XimError( Xim im, Xic ic, CARD16 error_code, INT16 detail_length, CARD16 type, char *detail) { CARD32 buf32[BUFSIZE/4]; CARD8 *buf = (CARD8 *)buf32; CARD16 *buf_s = (CARD16 *)&buf[XIM_HEADER_SIZE]; INT16 len = 0; buf_s[0] = im->private.proto.imid; /* imid */ buf_s[2] = XIM_IMID_VALID; /* flag */ if (ic) { buf_s[1] = ic->private.proto.icid; /* icid */ buf_s[2] |= XIM_ICID_VALID; /* flag */ } buf_s[3] = error_code; /* Error Code */ buf_s[4] = detail_length; /* length of error detail */ buf_s[5] = type; /* type of error detail */ if (detail_length && detail) { len = detail_length; memcpy((char *)&buf_s[6], detail, len); XIM_SET_PAD(&buf_s[6], len); } len += sizeof(CARD16) /* sizeof imid */ + sizeof(CARD16) /* sizeof icid */ + sizeof(BITMASK16) /* sizeof flag */ + sizeof(CARD16) /* sizeof error_code */ + sizeof(INT16) /* sizeof length of detail */ + sizeof(CARD16); /* sizeof type */ _XimSetHeader((XPointer)buf, XIM_ERROR, 0, &len); if (!(_XimWrite(im, len, (XPointer)buf))) return False; _XimFlush(im); return True; } static int _Ximctsconvert( XlcConv conv, char *from, int from_len, char *to, int to_len, Status *state) { int from_left; int to_left; int from_savelen; int to_savelen; int from_cnvlen; int to_cnvlen; char *from_buf; char *to_buf; char scratchbuf[BUFSIZ]; Status tmp_state; if (!state) state = &tmp_state; if (!conv || !from || !from_len) { *state = XLookupNone; return 0; } /* Reset the converter. The CompoundText at 'from' starts in initial state. */ _XlcResetConverter(conv); from_left = from_len; to_left = BUFSIZ; from_cnvlen = 0; to_cnvlen = 0; for (;;) { from_buf = &from[from_cnvlen]; from_savelen = from_left; to_buf = &scratchbuf[to_cnvlen]; to_savelen = to_left; if (_XlcConvert(conv, (XPointer *)&from_buf, &from_left, (XPointer *)&to_buf, &to_left, NULL, 0) < 0) { *state = XLookupNone; return 0; } from_cnvlen += (from_savelen - from_left); to_cnvlen += (to_savelen - to_left); if (from_left == 0) { if (!to_cnvlen) { *state = XLookupNone; return 0; } break; } } if (!to || !to_len || (to_len < to_cnvlen)) { *state = XBufferOverflow; } else { memcpy(to, scratchbuf, to_cnvlen); *state = XLookupChars; } return to_cnvlen; } int _Ximctstombs(XIM xim, char *from, int from_len, char *to, int to_len, Status *state) { return _Ximctsconvert(((Xim)xim)->private.proto.ctom_conv, from, from_len, to, to_len, state); } int _Ximctstowcs( XIM xim, char *from, int from_len, wchar_t *to, int to_len, Status *state) { Xim im = (Xim)xim; XlcConv conv = im->private.proto.ctow_conv; int from_left; int to_left; int from_savelen; int to_savelen; int from_cnvlen; int to_cnvlen; char *from_buf; wchar_t *to_buf; wchar_t scratchbuf[BUFSIZ]; Status tmp_state; if (!state) state = &tmp_state; if (!conv || !from || !from_len) { *state = XLookupNone; return 0; } /* Reset the converter. The CompoundText at 'from' starts in initial state. */ _XlcResetConverter(conv); from_left = from_len; to_left = BUFSIZ; from_cnvlen = 0; to_cnvlen = 0; for (;;) { from_buf = &from[from_cnvlen]; from_savelen = from_left; to_buf = &scratchbuf[to_cnvlen]; to_savelen = to_left; if (_XlcConvert(conv, (XPointer *)&from_buf, &from_left, (XPointer *)&to_buf, &to_left, NULL, 0) < 0) { *state = XLookupNone; return 0; } from_cnvlen += (from_savelen - from_left); to_cnvlen += (to_savelen - to_left); if (from_left == 0) { if (!to_cnvlen){ *state = XLookupNone; return 0; } break; } } if (!to || !to_len || (to_len < to_cnvlen)) { *state = XBufferOverflow; } else { memcpy(to, scratchbuf, to_cnvlen * sizeof(wchar_t)); *state = XLookupChars; } return to_cnvlen; } int _Ximctstoutf8( XIM xim, char *from, int from_len, char *to, int to_len, Status *state) { return _Ximctsconvert(((Xim)xim)->private.proto.ctoutf8_conv, from, from_len, to, to_len, state); } int _XimProtoMbLookupString( XIC xic, XKeyEvent *ev, char *buffer, int bytes, KeySym *keysym, Status *state) { Xic ic = (Xic)xic; Xim im = (Xim)ic->core.im; int ret; Status tmp_state; XimCommitInfo info; if (!IS_SERVER_CONNECTED(im)) return 0; if (!state) state = &tmp_state; if ((ev->type == KeyPress) && (ev->keycode == 0)) { /* Filter function */ if (!(info = ic->private.proto.commit_info)) { *state = XLookupNone; return 0; } ret = im->methods->ctstombs((XIM)im, info->string, info->string_len, buffer, bytes, state); if (*state == XBufferOverflow) return ret; if (keysym && (info->keysym && *(info->keysym))) { *keysym = *(info->keysym); if (*state == XLookupChars) *state = XLookupBoth; else *state = XLookupKeySym; } _XimUnregCommitInfo(ic); } else if (ev->type == KeyPress) { ret = _XimLookupMBText(ic, ev, buffer, bytes, keysym, NULL); if (ret > 0) { if (ret > bytes) *state = XBufferOverflow; else if (keysym && *keysym != NoSymbol) *state = XLookupBoth; else *state = XLookupChars; } else { if (keysym && *keysym != NoSymbol) *state = XLookupKeySym; else *state = XLookupNone; } } else { *state = XLookupNone; ret = 0; } return ret; } int _XimProtoWcLookupString( XIC xic, XKeyEvent *ev, wchar_t *buffer, int bytes, KeySym *keysym, Status *state) { Xic ic = (Xic)xic; Xim im = (Xim)ic->core.im; int ret; Status tmp_state; XimCommitInfo info; if (!IS_SERVER_CONNECTED(im)) return 0; if (!state) state = &tmp_state; if (ev->type == KeyPress && ev->keycode == 0) { /* Filter function */ if (!(info = ic->private.proto.commit_info)) { *state = XLookupNone; return 0; } ret = im->methods->ctstowcs((XIM)im, info->string, info->string_len, buffer, bytes, state); if (*state == XBufferOverflow) return ret; if (keysym && (info->keysym && *(info->keysym))) { *keysym = *(info->keysym); if (*state == XLookupChars) *state = XLookupBoth; else *state = XLookupKeySym; } _XimUnregCommitInfo(ic); } else if (ev->type == KeyPress) { ret = _XimLookupWCText(ic, ev, buffer, bytes, keysym, NULL); if (ret > 0) { if (ret > bytes) *state = XBufferOverflow; else if (keysym && *keysym != NoSymbol) *state = XLookupBoth; else *state = XLookupChars; } else { if (keysym && *keysym != NoSymbol) *state = XLookupKeySym; else *state = XLookupNone; } } else { *state = XLookupNone; ret = 0; } return ret; } int _XimProtoUtf8LookupString( XIC xic, XKeyEvent *ev, char *buffer, int bytes, KeySym *keysym, Status *state) { Xic ic = (Xic)xic; Xim im = (Xim)ic->core.im; int ret; Status tmp_state; XimCommitInfo info; if (!IS_SERVER_CONNECTED(im)) return 0; if (!state) state = &tmp_state; if (ev->type == KeyPress && ev->keycode == 0) { /* Filter function */ if (!(info = ic->private.proto.commit_info)) { *state = XLookupNone; return 0; } ret = im->methods->ctstoutf8((XIM)im, info->string, info->string_len, buffer, bytes, state); if (*state == XBufferOverflow) return ret; if (keysym && (info->keysym && *(info->keysym))) { *keysym = *(info->keysym); if (*state == XLookupChars) *state = XLookupBoth; else *state = XLookupKeySym; } _XimUnregCommitInfo(ic); } else if (ev->type == KeyPress) { ret = _XimLookupUTF8Text(ic, ev, buffer, bytes, keysym, NULL); if (ret > 0) { if (ret > bytes) *state = XBufferOverflow; else if (keysym && *keysym != NoSymbol) *state = XLookupBoth; else *state = XLookupChars; } else { if (keysym && *keysym != NoSymbol) *state = XLookupKeySym; else *state = XLookupNone; } } else { *state = XLookupNone; ret = 0; } return ret; } .send_event = False; ev.display = im->core.display; ev.window = ic->core.focus_window; ev.keycode = 0; ev.state = 0; ev.time = 0L; ev.serial = LastKnownRequestProcessed(im->core.display); /* FIXME : I wish there were COMMENTs (!) about the data passed around. */ #if 0 fprintf(stderr,"%s,%d: putback k press FIXED ev.time=0 ev.serial=%lu\n", __FILE__, __LINE__, ev.serial); #endif XPutBackEvent(im->core.dilibX11-1.6.3/modules/im/ximcp/imDefIc.c000064401431060000012000001220271247741723500177230ustar00alancstaff00002660200006/* * Copyright 1991, 1992 Oracle and/or its affiliates. All rights reserved. * * 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: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. */ /****************************************************************** Copyright 1992, 1993, 1994 by FUJITSU LIMITED Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of FUJITSU LIMITED not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Hideki Hiura (hhiura@Sun.COM) Sun Microsystems, Inc. Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xlcint.h" #include "Ximint.h" static Bool _XimCreateICCheck( Xim im, INT16 len, XPointer data, XPointer arg) { CARD16 *buf_s = (CARD16 *)((CARD8 *)data + XIM_HEADER_SIZE); CARD8 major_opcode = *((CARD8 *)data); CARD8 minor_opcode = *((CARD8 *)data + 1); XIMID imid = buf_s[0]; if ((major_opcode == XIM_CREATE_IC_REPLY) && (minor_opcode == 0) && (imid == im->private.proto.imid)) return True; if ((major_opcode == XIM_ERROR) && (minor_opcode == 0) && (buf_s[2] & XIM_IMID_VALID) && (imid == im->private.proto.imid)) return True; return False; } #ifdef XIM_CONNECTABLE Bool _XimReCreateIC(ic) Xic ic; { Xim im = (Xim)ic->core.im; Xic save_ic; XIMResourceList res; unsigned int num; XIMStyle input_style = ic->core.input_style; XimDefICValues ic_values; INT16 len; CARD16 *buf_s; char *tmp; CARD32 tmp_buf32[BUFSIZE/4]; char *tmp_buf = (char *)tmp_buf32; char *buf; int buf_size; char *data; int data_len; int ret_len; int total; int idx; CARD32 reply32[BUFSIZE/4]; char *reply = (char *)reply32; XPointer preply; int ret_code; if (!(save_ic = Xmalloc(sizeof(XicRec)))) return False; memcpy((char *)save_ic, (char *)ic, sizeof(XicRec)); ic->core.filter_events = im->private.proto.forward_event_mask; ic->private.proto.forward_event_mask = im->private.proto.forward_event_mask; ic->private.proto.synchronous_event_mask = im->private.proto.synchronous_event_mask; num = im->core.ic_num_resources; buf_size = sizeof(XIMResource) * num; if (!(res = Xmalloc(buf_size))) goto ErrorOnReCreateIC; (void)memcpy((char *)res, (char *)im->core.ic_resources, buf_size); ic->private.proto.ic_resources = res; ic->private.proto.ic_num_resources = num; num = im->private.proto.ic_num_inner_resources; buf_size = sizeof(XIMResource) * num; if (!(res = Xmalloc(buf_size))) goto ErrorOnReCreateIC; (void)memcpy((char *)res, (char *)im->private.proto.ic_inner_resources, buf_size); ic->private.proto.ic_inner_resources = res; ic->private.proto.ic_num_inner_resources = num; _XimSetICMode(ic->private.proto.ic_resources, ic->private.proto.ic_num_resources, input_style); _XimSetICMode(ic->private.proto.ic_inner_resources, ic->private.proto.ic_num_inner_resources, input_style); _XimGetCurrentICValues(ic, &ic_values); buf = tmp_buf; buf_size = XIM_HEADER_SIZE + sizeof(CARD16) + sizeof(INT16); data_len = BUFSIZE - buf_size; total = 0; idx = 0; for (;;) { data = &buf[buf_size]; if (!_XimEncodeSavedICATTRIBUTE(ic, ic->private.proto.ic_resources, ic->private.proto.ic_num_resources, &idx, data, data_len, &ret_len, (XPointer)&ic_values, XIM_CREATEIC)) { if (buf != tmp_buf) Xfree(buf); goto ErrorOnReCreateIC; } total += ret_len; if (idx == -1) { break; } buf_size += ret_len; if (buf == tmp_buf) { if (!(tmp = Xmalloc(buf_size + data_len))) { goto ErrorOnReCreateIC; } memcpy(tmp, buf, buf_size); buf = tmp; } else { if (!(tmp = Xrealloc(buf, (buf_size + data_len)))) { Xfree(buf); goto ErrorOnReCreateIC; } buf = tmp; } } buf_s = (CARD16 *)&buf[XIM_HEADER_SIZE]; buf_s[0] = im->private.proto.imid; buf_s[1] = (INT16)total; len = (INT16)(sizeof(CARD16) + sizeof(INT16) + total); _XimSetHeader((XPointer)buf, XIM_CREATE_IC, 0, &len); if (!(_XimWrite(im, len, (XPointer)buf))) { if (buf != tmp_buf) Xfree(buf); goto ErrorOnReCreateIC; } _XimFlush(im); if (buf != tmp_buf) Xfree(buf); ic->private.proto.waitCallback = True; buf_size = BUFSIZE; ret_code = _XimRead(im, &len, (XPointer)reply, buf_size, _XimCreateICCheck, 0); if (ret_code == XIM_TRUE) { preply = reply; } else if (ret_code == XIM_OVERFLOW) { if (len <= 0) { preply = reply; } else { buf_size = (int)len; preply = Xmalloc(buf_size); ret_code = _XimRead(im, &len, preply, buf_size, _XimCreateICCheck, 0); if (ret_code != XIM_TRUE) { Xfree(preply); ic->private.proto.waitCallback = False; goto ErrorOnReCreateIC; } } } else { ic->private.proto.waitCallback = False; goto ErrorOnReCreateIC; } ic->private.proto.waitCallback = False; buf_s = (CARD16 *)((char *)preply + XIM_HEADER_SIZE); if (*((CARD8 *)preply) == XIM_ERROR) { _XimProcError(im, 0, (XPointer)&buf_s[3]); if (reply != preply) Xfree(preply); goto ErrorOnReCreateIC; } ic->private.proto.icid = buf_s[1]; /* icid */ if (reply != preply) Xfree(preply); _XimRegisterFilter(ic); MARK_IC_CONNECTED(ic); if (save_ic->private.proto.ic_resources) Xfree(save_ic->private.proto.ic_resources); if (save_ic->private.proto.ic_inner_resources) Xfree(save_ic->private.proto.ic_inner_resources); Xfree(save_ic); return True; ErrorOnReCreateIC: memcpy((char *)ic, (char *)save_ic, sizeof(XicRec)); Xfree(save_ic); return False; } static char * _XimDelayModeGetICValues(ic, arg) Xic ic; XIMArg *arg; { XimDefICValues ic_values; _XimGetCurrentICValues(ic, &ic_values); return _XimGetICValueData(ic, (XPointer)&ic_values, ic->private.proto.ic_resources, ic->private.proto.ic_num_resources, arg, XIM_GETICVALUES); } #endif /* XIM_CONNECTABLE */ static Bool _XimGetICValuesCheck( Xim im, INT16 len, XPointer data, XPointer arg) { Xic ic = (Xic)arg; CARD16 *buf_s = (CARD16 *)((CARD8 *)data + XIM_HEADER_SIZE); CARD8 major_opcode = *((CARD8 *)data); CARD8 minor_opcode = *((CARD8 *)data + 1); XIMID imid = buf_s[0]; XICID icid = buf_s[1]; if ((major_opcode == XIM_GET_IC_VALUES_REPLY) && (minor_opcode == 0) && (imid == im->private.proto.imid) && (icid == ic->private.proto.icid)) return True; if ((major_opcode == XIM_ERROR) && (minor_opcode == 0) && (buf_s[2] & XIM_IMID_VALID) && (imid == im->private.proto.imid) && (buf_s[2] & XIM_ICID_VALID) && (icid == ic->private.proto.icid)) return True; return False; } static char * _XimProtoGetICValues( XIC xic, XIMArg *arg) { Xic ic = (Xic)xic; Xim im = (Xim)ic->core.im; register XIMArg *p; register XIMArg *pp; register int n; CARD8 *buf; CARD16 *buf_s; INT16 len; CARD32 reply32[BUFSIZE/4]; char *reply = (char *)reply32; XPointer preply = NULL; int buf_size; int ret_code; char *makeid_name; char *decode_name; CARD16 *data = NULL; INT16 data_len = 0; #ifndef XIM_CONNECTABLE if (!IS_IC_CONNECTED(ic)) return arg->name; #else if (!IS_IC_CONNECTED(ic)) { if (IS_CONNECTABLE(im)) { if (_XimConnectServer(im)) { if (!_XimReCreateIC(ic)) { _XimDelayModeSetAttr(im); return _XimDelayModeGetICValues(ic, arg); } } else { return _XimDelayModeGetICValues(ic, arg); } } else { return arg->name; } } #endif /* XIM_CONNECTABLE */ for (n = 0, p = arg; p && p->name; p++) { n++; if ((strcmp(p->name, XNPreeditAttributes) == 0) || (strcmp(p->name, XNStatusAttributes) == 0)) { n++; for (pp = (XIMArg *)p->value; pp && pp->name; pp++) n++; } } if (!n) return (char *)NULL; buf_size = sizeof(CARD16) * n; buf_size += XIM_HEADER_SIZE + sizeof(CARD16) + sizeof(CARD16) + sizeof(INT16) + XIM_PAD(2 + buf_size); if (!(buf = Xmalloc(buf_size))) return arg->name; buf_s = (CARD16 *)&buf[XIM_HEADER_SIZE]; makeid_name = _XimMakeICAttrIDList(ic, ic->private.proto.ic_resources, ic->private.proto.ic_num_resources, arg, &buf_s[3], &len, XIM_GETICVALUES); if (len > 0) { buf_s[0] = im->private.proto.imid; /* imid */ buf_s[1] = ic->private.proto.icid; /* icid */ buf_s[2] = len; /* length of ic-attr-id */ len += sizeof(INT16); /* sizeof length of attr */ XIM_SET_PAD(&buf_s[2], len); /* pad */ len += sizeof(CARD16) /* sizeof imid */ + sizeof(CARD16); /* sizeof icid */ _XimSetHeader((XPointer)buf, XIM_GET_IC_VALUES, 0, &len); if (!(_XimWrite(im, len, (XPointer)buf))) { Xfree(buf); return arg->name; } _XimFlush(im); Xfree(buf); buf_size = BUFSIZE; ret_code = _XimRead(im, &len, (XPointer)reply, buf_size, _XimGetICValuesCheck, (XPointer)ic); if (ret_code == XIM_TRUE) { preply = reply; } else if (ret_code == XIM_OVERFLOW) { if (len <= 0) { preply = reply; } else { buf_size = (int)len; preply = Xmalloc(len); ret_code = _XimRead(im, &len, preply, buf_size, _XimGetICValuesCheck, (XPointer)ic); if (ret_code != XIM_TRUE) { if (preply != reply) Xfree(preply); return arg->name; } } } else { return arg->name; } buf_s = (CARD16 *)((char *)preply + XIM_HEADER_SIZE); if (*((CARD8 *)preply) == XIM_ERROR) { _XimProcError(im, 0, (XPointer)&buf_s[3]); if (reply != preply) Xfree(preply); return arg->name; } data = &buf_s[4]; data_len = buf_s[2]; } else if (len < 0) { return arg->name; } decode_name = _XimDecodeICATTRIBUTE(ic, ic->private.proto.ic_resources, ic->private.proto.ic_num_resources, data, data_len, arg, XIM_GETICVALUES); if (reply != preply) Xfree(preply); if (decode_name) return decode_name; else return makeid_name; } #ifdef XIM_CONNECTABLE static Bool _XimCheckNestQuarkList(quark_list, num_quark, quark, separator) XrmQuark *quark_list; int num_quark; XrmQuark quark; XrmQuark separator; { register int i; for (i = 0; i < num_quark; i++) { if (quark_list[i] == separator) { break; } if (quark_list[i] == quark) { return True; } } return False; } static Bool _XimCheckNestedQuarkList(quark_list, idx, num_quark, arg, separator) XrmQuark **quark_list; int idx; int *num_quark; XIMArg *arg; XrmQuark separator; { XrmQuark *q_list = *quark_list; int n_quark = *num_quark; register XIMArg *p; XrmQuark quark; XrmQuark *tmp; register int i; for (p = arg; p && p->name; p++) { quark = XrmStringToQuark(p->name); if (_XimCheckNestQuarkList(&q_list[idx], n_quark - idx, quark, separator)) { continue; } if (!(tmp = Xmalloc((sizeof(XrmQuark) * (n_quark + 1))))) { *quark_list = q_list; *num_quark = n_quark; return False; } n_quark++; for (i = 0; i < idx; i++) { tmp[i] = q_list[i]; } tmp[i] = quark; for (i = idx + 1; i < n_quark; i++) { tmp[i] = q_list[i - 1]; } q_list = tmp; } *quark_list = q_list; *num_quark = n_quark; return True; } static Bool _XimCheckICQuarkList(quark_list, num_quark, quark, idx) XrmQuark *quark_list; int num_quark; XrmQuark quark; int *idx; { register int i; for (i = 0; i < num_quark; i++) { if (quark_list[i] == quark) { *idx = i; return True; } } return False; } static Bool _XimSaveICValues(ic, arg) Xic ic; XIMArg *arg; { register XIMArg *p; register int n; XrmQuark *quark_list; XrmQuark *tmp; XrmQuark quark; int num_quark; XrmQuark pre_quark; XrmQuark sts_quark; XrmQuark separator; int idx; pre_quark = XrmStringToQuark(XNPreeditAttributes); sts_quark = XrmStringToQuark(XNStatusAttributes); separator = XrmStringToQuark(XNSeparatorofNestedList); if (quark_list = ic->private.proto.saved_icvalues) { num_quark = ic->private.proto.num_saved_icvalues; for (p = arg; p && p->name; p++) { quark = XrmStringToQuark(p->name); if ((quark == pre_quark) || (quark == sts_quark)) { if (!_XimCheckICQuarkList(quark_list, num_quark, quark, &idx)) { register XIMArg *pp; int nn; XrmQuark *q_list; for (pp = (XIMArg *)p->value, nn = 0; pp && pp->name; pp++, nn++); if (!(tmp = Xrealloc(quark_list, (sizeof(XrmQuark) * (num_quark + nn + 2))))) { ic->private.proto.saved_icvalues = quark_list; ic->private.proto.num_saved_icvalues = num_quark; return False; } quark_list = tmp; q_list = &quark_list[num_quark]; num_quark += nn + 2; *q_list++ = quark; for (pp = (XIMArg *)p->value; pp && pp->name; pp++, quark_list++) { *q_list = XrmStringToQuark(pp->name); } *q_list = separator; } else { if (!_XimCheckNestedQuarkList(&quark_list, idx + 1, &num_quark, (XIMArg *)p->value, separator)) { ic->private.proto.saved_icvalues = quark_list; ic->private.proto.num_saved_icvalues = num_quark; return False; } } } else { if (_XimCheckICQuarkList(quark_list, num_quark, quark, &idx)) { continue; } if (!(tmp = Xrealloc(quark_list, (sizeof(XrmQuark) * (num_quark + 1))))) { ic->private.proto.saved_icvalues = quark_list; ic->private.proto.num_saved_icvalues = num_quark; return False; } quark_list = tmp; quark_list[num_quark] = quark; num_quark++; } } ic->private.proto.saved_icvalues = quark_list; ic->private.proto.num_saved_icvalues = num_quark; return True; } for (p = arg, n = 0; p && p->name; p++, n++) { if ((!strcmp(p->name, XNPreeditAttributes)) || (!strcmp(p->name, XNStatusAttributes))) { register XIMArg *pp; int nn; for (pp = (XIMArg *)p->value, nn = 0; pp && pp->name; pp++, nn++); n += nn + 1; } } if (!(quark_list = Xmalloc(sizeof(XrmQuark) * n))) { return False; } ic->private.proto.saved_icvalues = quark_list; ic->private.proto.num_saved_icvalues = n; for (p = arg; p && p->name; p++, quark_list++) { *quark_list = XrmStringToQuark(p->name); if ((*quark_list == pre_quark) || (*quark_list == sts_quark)) { register XIMArg *pp; quark_list++; for (pp = (XIMArg *)p->value; pp && pp->name; pp++, quark_list++) { *quark_list = XrmStringToQuark(pp->name); } *quark_list = separator; } } return True; } static char * _XimDelayModeSetICValues(ic, arg) Xic ic; XIMArg *arg; { XimDefICValues ic_values; char *name; _XimGetCurrentICValues(ic, &ic_values); name = _XimSetICValueData(ic, (XPointer)&ic_values, ic->private.proto.ic_resources, ic->private.proto.ic_num_resources, arg, XIM_SETICVALUES, False); _XimSetCurrentICValues(ic, &ic_values); return name; } #endif /* XIM_CONNECTABLE */ static Bool _XimSetICValuesCheck( Xim im, INT16 len, XPointer data, XPointer arg) { Xic ic = (Xic)arg; CARD16 *buf_s = (CARD16 *)((CARD8 *)data + XIM_HEADER_SIZE); CARD8 major_opcode = *((CARD8 *)data); CARD8 minor_opcode = *((CARD8 *)data + 1); XIMID imid = buf_s[0]; XICID icid = buf_s[1]; if ((major_opcode == XIM_SET_IC_VALUES_REPLY) && (minor_opcode == 0) && (imid == im->private.proto.imid) && (icid == ic->private.proto.icid)) return True; if ((major_opcode == XIM_ERROR) && (minor_opcode == 0) && (buf_s[2] & XIM_IMID_VALID) && (imid == im->private.proto.imid) && (buf_s[2] & XIM_ICID_VALID) && (icid == ic->private.proto.icid)) return True; return False; } static char * _XimProtoSetICValues( XIC xic, XIMArg *arg) { Xic ic = (Xic)xic; Xim im = (Xim)ic->core.im; XimDefICValues ic_values; INT16 len; CARD16 *buf_s; char *tmp; CARD32 tmp_buf32[BUFSIZE/4]; char *tmp_buf = (char *)tmp_buf32; char *buf; int buf_size; char *data; int data_len; int ret_len; int total; XIMArg *arg_ret; CARD32 reply32[BUFSIZE/4]; char *reply = (char *)reply32; XPointer preply = NULL; int ret_code; BITMASK32 flag = 0L; char *name; char *tmp_name = (arg) ? arg->name : NULL; #ifndef XIM_CONNECTABLE if (!IS_IC_CONNECTED(ic)) return tmp_name; #else if (!_XimSaveICValues(ic, arg)) return NULL; if (!IS_IC_CONNECTED(ic)) { if (IS_CONNECTABLE(im)) { if (_XimConnectServer(im)) { if (!_XimReCreateIC(ic)) { _XimDelayModeSetAttr(im); return _XimDelayModeSetICValues(ic, arg); } } else { return _XimDelayModeSetICValues(ic, arg); } } else { return tmp_name; } } #endif /* XIM_CONNECTABLE */ _XimGetCurrentICValues(ic, &ic_values); buf = tmp_buf; buf_size = XIM_HEADER_SIZE + sizeof(CARD16) + sizeof(CARD16) + sizeof(INT16) + sizeof(CARD16); data_len = BUFSIZE - buf_size; total = 0; arg_ret = arg; for (;;) { data = &buf[buf_size]; if ((name = _XimEncodeICATTRIBUTE(ic, ic->private.proto.ic_resources, ic->private.proto.ic_num_resources, arg, &arg_ret, data, data_len, &ret_len, (XPointer)&ic_values, &flag, XIM_SETICVALUES))) { break; } total += ret_len; if (!(arg = arg_ret)) { break; } buf_size += ret_len; if (buf == tmp_buf) { if (!(tmp = Xmalloc(buf_size + data_len))) { return tmp_name; } memcpy(tmp, buf, buf_size); buf = tmp; } else { if (!(tmp = Xrealloc(buf, (buf_size + data_len)))) { Xfree(buf); return tmp_name; } buf = tmp; } } _XimSetCurrentICValues(ic, &ic_values); if (!total) { return tmp_name; } buf_s = (CARD16 *)&buf[XIM_HEADER_SIZE]; #ifdef EXT_MOVE if (_XimExtenMove(im, ic, flag, &buf_s[4], (INT16)total)) return name; #endif buf_s[0] = im->private.proto.imid; buf_s[1] = ic->private.proto.icid; buf_s[2] = (INT16)total; buf_s[3] = 0; len = (INT16)(sizeof(CARD16) + sizeof(CARD16) + sizeof(INT16) + sizeof(CARD16) + total); _XimSetHeader((XPointer)buf, XIM_SET_IC_VALUES, 0, &len); if (!(_XimWrite(im, len, (XPointer)buf))) { if (buf != tmp_buf) Xfree(buf); return tmp_name; } _XimFlush(im); if (buf != tmp_buf) Xfree(buf); ic->private.proto.waitCallback = True; buf_size = BUFSIZE; ret_code = _XimRead(im, &len, (XPointer)reply, buf_size, _XimSetICValuesCheck, (XPointer)ic); if (ret_code == XIM_TRUE) { preply = reply; } else if (ret_code == XIM_OVERFLOW) { buf_size = (int)len; preply = Xmalloc(buf_size); ret_code = _XimRead(im, &len, preply, buf_size, _XimSetICValuesCheck, (XPointer)ic); if (ret_code != XIM_TRUE) { Xfree(preply); ic->private.proto.waitCallback = False; return tmp_name; } } else { ic->private.proto.waitCallback = False; return tmp_name; } ic->private.proto.waitCallback = False; buf_s = (CARD16 *)((char *)preply + XIM_HEADER_SIZE); if (*((CARD8 *)preply) == XIM_ERROR) { _XimProcError(im, 0, (XPointer)&buf_s[3]); if (reply != preply) Xfree(preply); return tmp_name; } if (reply != preply) Xfree(preply); return name; } static Bool _XimDestroyICCheck( Xim im, INT16 len, XPointer data, XPointer arg) { Xic ic = (Xic)arg; CARD16 *buf_s = (CARD16 *)((CARD8 *)data + XIM_HEADER_SIZE); CARD8 major_opcode = *((CARD8 *)data); CARD8 minor_opcode = *((CARD8 *)data + 1); XIMID imid = buf_s[0]; XICID icid = buf_s[1]; Bool ret = False; if ((major_opcode == XIM_DESTROY_IC_REPLY) && (minor_opcode == 0) && (imid == im->private.proto.imid) && (icid == ic->private.proto.icid)) ret = True; if ((major_opcode == XIM_ERROR) && (minor_opcode == 0) && (buf_s[2] & XIM_IMID_VALID) && (imid == im->private.proto.imid) && (buf_s[2] & XIM_ICID_VALID) && (icid == ic->private.proto.icid)) ret = False; return ret; } static void _XimProtoICFree( Xic ic) { #ifdef XIM_CONNECTABLE Xim im = (Xim)ic->core.im; #endif if (ic->private.proto.preedit_font) { Xfree(ic->private.proto.preedit_font); ic->private.proto.preedit_font = NULL; } if (ic->private.proto.status_font) { Xfree(ic->private.proto.status_font); ic->private.proto.status_font = NULL; } if (ic->private.proto.commit_info) { _XimFreeCommitInfo(ic); ic->private.proto.commit_info = NULL; } if (ic->private.proto.ic_inner_resources) { Xfree(ic->private.proto.ic_inner_resources); ic->private.proto.ic_inner_resources = NULL; } #ifdef XIM_CONNECTABLE if (IS_SERVER_CONNECTED(im) && IS_RECONNECTABLE(im)) { return; } #endif /* XIM_CONNECTABLE */ if (ic->private.proto.saved_icvalues) { Xfree(ic->private.proto.saved_icvalues); ic->private.proto.saved_icvalues = NULL; } if (ic->private.proto.ic_resources) { Xfree(ic->private.proto.ic_resources); ic->private.proto.ic_resources = NULL; } if (ic->core.hotkey) { Xfree(ic->core.hotkey); ic->core.hotkey = NULL; } return; } static void _XimProtoDestroyIC( XIC xic) { Xic ic = (Xic)xic; Xim im = (Xim)ic->core.im; CARD32 buf32[BUFSIZE/4]; CARD8 *buf = (CARD8 *)buf32; CARD16 *buf_s = (CARD16 *)&buf[XIM_HEADER_SIZE]; INT16 len; CARD32 reply32[BUFSIZE/4]; char *reply = (char *)reply32; XPointer preply; int buf_size; int ret_code; if (IS_SERVER_CONNECTED(im)) { buf_s[0] = im->private.proto.imid; /* imid */ buf_s[1] = ic->private.proto.icid; /* icid */ len = sizeof(CARD16) /* sizeof imid */ + sizeof(CARD16); /* sizeof icid */ _XimSetHeader((XPointer)buf, XIM_DESTROY_IC, 0, &len); (void)_XimWrite(im, len, (XPointer)buf); _XimFlush(im); buf_size = BUFSIZE; ret_code = _XimRead(im, &len, (XPointer)reply, buf_size, _XimDestroyICCheck, (XPointer)ic); if (ret_code == XIM_OVERFLOW) { buf_size = len; preply = Xmalloc(buf_size); (void)_XimRead(im, &len, preply, buf_size, _XimDestroyICCheck, (XPointer)ic); Xfree(preply); } } UNMARK_IC_CONNECTED(ic); _XimUnregisterFilter(ic); _XimProtoICFree(ic); return; } /* * Some functions require the request queue from the server to be flushed * so that the ordering of client initiated status changes and those requested * by the server is well defined. * _XimSync() would be the function of choice here as it should get a * XIM_SYNC_REPLY back from the server. * This however isn't implemented in the piece of junk that is used by most * input servers as the server side protocol if to XIM. * Since this code is not shipped as a library together with the client side * XIM code but is duplicated by every input server around the world there * is no easy fix to this but this ugly hack below. * Obtaining an IC value from the server sends a request and empties out the * event/server request queue until the answer to this request is found. * Thus it is guaranteed that any pending server side request gets processed. * This is what the hack below is doing. */ static void BrokenSyncWithServer(XIC xic) { CARD32 dummy; XGetICValues(xic, XNFilterEvents, &dummy, NULL); } static void _XimProtoSetFocus( XIC xic) { Xic ic = (Xic)xic; Xim im = (Xim)ic->core.im; CARD32 buf32[BUFSIZE/4]; CARD8 *buf = (CARD8 *)buf32; CARD16 *buf_s = (CARD16 *)&buf[XIM_HEADER_SIZE]; INT16 len; #ifndef XIM_CONNECTABLE if (!IS_IC_CONNECTED(ic)) return; #else if (!IS_IC_CONNECTED(ic)) { if (IS_CONNECTABLE(im)) { if (_XimConnectServer(im)) { if (!_XimReCreateIC(ic)) { _XimDelayModeSetAttr(im); return; } } else { return; } } else { return; } } #endif /* XIM_CONNECTABLE */ BrokenSyncWithServer(xic); buf_s[0] = im->private.proto.imid; /* imid */ buf_s[1] = ic->private.proto.icid; /* icid */ len = sizeof(CARD16) /* sizeof imid */ + sizeof(CARD16); /* sizeof icid */ _XimSetHeader((XPointer)buf, XIM_SET_IC_FOCUS, 0, &len); (void)_XimWrite(im, len, (XPointer)buf); _XimFlush(im); _XimRegisterFilter(ic); return; } static void _XimProtoUnsetFocus( XIC xic) { Xic ic = (Xic)xic; Xim im = (Xim)ic->core.im; CARD32 buf32[BUFSIZE/4]; CARD8 *buf = (CARD8 *)buf32; CARD16 *buf_s = (CARD16 *)&buf[XIM_HEADER_SIZE]; INT16 len; #ifndef XIM_CONNECTABLE if (!IS_IC_CONNECTED(ic)) return; #else if (!IS_IC_CONNECTED(ic)) { if (IS_CONNECTABLE(im)) { if (_XimConnectServer(im)) { if (!_XimReCreateIC(ic)) { _XimDelayModeSetAttr(im); return; } } else { return; } } else { return; } } #endif /* XIM_CONNECTABLE */ BrokenSyncWithServer(xic); buf_s[0] = im->private.proto.imid; /* imid */ buf_s[1] = ic->private.proto.icid; /* icid */ len = sizeof(CARD16) /* sizeof imid */ + sizeof(CARD16); /* sizeof icid */ _XimSetHeader((XPointer)buf, XIM_UNSET_IC_FOCUS, 0, &len); (void)_XimWrite(im, len, (XPointer)buf); _XimFlush(im); _XimUnregisterFilter(ic); return; } static Bool _XimResetICCheck( Xim im, INT16 len, XPointer data, XPointer arg) { Xic ic = (Xic)arg; CARD16 *buf_s = (CARD16 *)((CARD8 *)data + XIM_HEADER_SIZE); CARD8 major_opcode = *((CARD8 *)data); CARD8 minor_opcode = *((CARD8 *)data + 1); XIMID imid = buf_s[0]; XICID icid = buf_s[1]; if ((major_opcode == XIM_RESET_IC_REPLY) && (minor_opcode == 0) && (imid == im->private.proto.imid) && (icid == ic->private.proto.icid)) return True; if ((major_opcode == XIM_ERROR) && (minor_opcode == 0) && (buf_s[2] & XIM_IMID_VALID) && (imid == im->private.proto.imid) && (buf_s[2] & XIM_ICID_VALID) && (icid == ic->private.proto.icid)) return True; return False; } static char * _XimProtoReset( XIC xic, char * (*retfunc) (Xim im, Xic ic, XPointer buf) ) { Xic ic = (Xic)xic; Xim im = (Xim)ic->core.im; CARD32 buf32[BUFSIZE/4]; CARD8 *buf = (CARD8 *)buf32; CARD16 *buf_s = (CARD16 *)&buf[XIM_HEADER_SIZE]; INT16 len; CARD32 reply32[BUFSIZE/4]; char *reply = (char *)reply32; XPointer preply; int buf_size; int ret_code; char *commit; if (!IS_IC_CONNECTED(ic)) return (char *)NULL; buf_s[0] = im->private.proto.imid; /* imid */ buf_s[1] = ic->private.proto.icid; /* icid */ len = sizeof(CARD16) /* sizeof imid */ + sizeof(CARD16); /* sizeof icid */ _XimSetHeader((XPointer)buf, XIM_RESET_IC, 0, &len); if (!(_XimWrite(im, len, (XPointer)buf))) return NULL; _XimFlush(im); ic->private.proto.waitCallback = True; buf_size = BUFSIZE; ret_code = _XimRead(im, &len, (XPointer)reply, buf_size, _XimResetICCheck, (XPointer)ic); if (ret_code == XIM_TRUE) { preply = reply; } else if (ret_code == XIM_OVERFLOW) { if (len < 0) { preply = reply; } else { buf_size = len; preply = Xmalloc(buf_size); ret_code = _XimRead(im, &len, preply, buf_size, _XimResetICCheck, (XPointer)ic); if (ret_code != XIM_TRUE) { Xfree(preply); ic->private.proto.waitCallback = False; return NULL; } } } else { ic->private.proto.waitCallback = False; return NULL; } ic->private.proto.waitCallback = False; buf_s = (CARD16 *)((char *)preply + XIM_HEADER_SIZE); if (*((CARD8 *)preply) == XIM_ERROR) { _XimProcError(im, 0, (XPointer)&buf_s[3]); if (reply != preply) free(preply); return NULL; } commit = retfunc(im, ic, (XPointer)&buf_s[2]); if (reply != preply) Xfree(preply); return commit; } static char * _XimCommitedMbString( Xim im, Xic ic, XPointer buf) { CARD16 *buf_s = (CARD16 *)buf; XimCommitInfo info; int len; int new_len; char *commit; char *new_commit = NULL; char *str; Status status; len = 0; for (info = ic->private.proto.commit_info; info; info = info->next) len += info->string_len; len += buf_s[0]; if ( len == 0 ) return( NULL ); if (!(commit = Xmalloc(len + 1))) goto Error_On_Reset; str = commit; for (info = ic->private.proto.commit_info; info; info = info->next) { (void)memcpy(str, info->string, info->string_len); str += info->string_len; } (void)memcpy(str, (char *)&buf_s[1], buf_s[0]); commit[len] = '\0'; new_len = im->methods->ctstombs((XIM)im, commit, len, NULL, 0, &status); if (status != XLookupNone) { if (!(new_commit = Xmalloc(new_len + 1))) { Xfree(commit); goto Error_On_Reset; } (void)im->methods->ctstombs((XIM)im, commit, len, new_commit, new_len, NULL); new_commit[new_len] = '\0'; } Xfree(commit); Error_On_Reset: _XimFreeCommitInfo( ic ); return new_commit; } static char * _XimProtoMbReset( XIC xic) { return _XimProtoReset(xic, _XimCommitedMbString); } static wchar_t * _XimCommitedWcString( Xim im, Xic ic, XPointer buf) { CARD16 *buf_s = (CARD16 *)buf; XimCommitInfo info; int len; int new_len; char *commit; wchar_t *new_commit = (wchar_t *)NULL; char *str; Status status; len = 0; for (info = ic->private.proto.commit_info; info; info = info->next) len += info->string_len; len += buf_s[0]; if ( len == 0 ) return( (wchar_t *)NULL ); if (!(commit = Xmalloc(len + 1))) goto Error_On_Reset; str = commit; for (info = ic->private.proto.commit_info; info; info = info->next) { (void)memcpy(str, info->string, info->string_len); str += info->string_len; } (void)memcpy(str, (char *)&buf_s[1], buf_s[0]); commit[len] = '\0'; new_len = im->methods->ctstowcs((XIM)im, commit, len, NULL, 0, &status); if (status != XLookupNone) { if (!(new_commit = (wchar_t *)Xmalloc(sizeof(wchar_t) * (new_len + 1)))) { Xfree(commit); goto Error_On_Reset; } (void)im->methods->ctstowcs((XIM)im, commit, len, new_commit, new_len, NULL); new_commit[new_len] = (wchar_t)'\0'; } Xfree(commit); Error_On_Reset: _XimFreeCommitInfo( ic ); return new_commit; } static wchar_t * _XimProtoWcReset( XIC xic) { return (wchar_t *) _XimProtoReset(xic, (char * (*) (Xim, Xic, XPointer)) _XimCommitedWcString); } static char * _XimCommitedUtf8String( Xim im, Xic ic, XPointer buf) { CARD16 *buf_s = (CARD16 *)buf; XimCommitInfo info; int len; int new_len; char *commit; char *new_commit = NULL; char *str; Status status; len = 0; for (info = ic->private.proto.commit_info; info; info = info->next) len += info->string_len; len += buf_s[0]; if ( len == 0 ) return( NULL ); if (!(commit = Xmalloc(len + 1))) goto Error_On_Reset; str = commit; for (info = ic->private.proto.commit_info; info; info = info->next) { (void)memcpy(str, info->string, info->string_len); str += info->string_len; } (void)memcpy(str, (char *)&buf_s[1], buf_s[0]); commit[len] = '\0'; new_len = im->methods->ctstoutf8((XIM)im, commit, len, NULL, 0, &status); if (status != XLookupNone) { if (!(new_commit = Xmalloc(new_len + 1))) { Xfree(commit); goto Error_On_Reset; } (void)im->methods->ctstoutf8((XIM)im, commit, len, new_commit, new_len, NULL); new_commit[new_len] = '\0'; } Xfree(commit); Error_On_Reset: _XimFreeCommitInfo( ic ); return new_commit; } static char * _XimProtoUtf8Reset( XIC xic) { return _XimProtoReset(xic, _XimCommitedUtf8String); } static XICMethodsRec ic_methods = { _XimProtoDestroyIC, /* destroy */ _XimProtoSetFocus, /* set_focus */ _XimProtoUnsetFocus, /* unset_focus */ _XimProtoSetICValues, /* set_values */ _XimProtoGetICValues, /* get_values */ _XimProtoMbReset, /* mb_reset */ _XimProtoWcReset, /* wc_reset */ _XimProtoUtf8Reset, /* utf8_reset */ _XimProtoMbLookupString, /* mb_lookup_string */ _XimProtoWcLookupString, /* wc_lookup_string */ _XimProtoUtf8LookupString /* utf8_lookup_string */ }; static Bool _XimGetInputStyle( XIMArg *arg, XIMStyle *input_style) { register XIMArg *p; for (p = arg; p && p->name; p++) { if (!(strcmp(p->name, XNInputStyle))) { *input_style = (XIMStyle)p->value; return True; } } return False; } #ifdef XIM_CONNECTABLE static Bool _XimDelayModeCreateIC( Xic ic, XIMArg *values, XIMResourceList res, unsigned int num) { Xim im = (Xim)ic->core.im; XimDefICValues ic_values; int len; XIMStyle input_style; bzero((char *)&ic_values, sizeof(XimDefICValues)); _XimGetCurrentICValues(ic, &ic_values); if (!(_XimGetInputStyle(values, &input_style))) return False; _XimSetICMode(res, num, input_style); if (_XimSetICValueData(ic, (XPointer)&ic_values, res, num, values, XIM_CREATEIC, False)) { return False; } _XimSetCurrentICValues(ic, &ic_values); if (!_XimSetICDefaults(ic, (XPointer)&ic_values, XIM_SETICDEFAULTS, res, num)) { return False; } ic_values.filter_events = KeyPressMask; _XimSetCurrentICValues(ic, &ic_values); _XimRegisterFilter(ic); return True; } Bool _XimReconnectModeCreateIC(ic) Xic ic; { Xim im = (Xim)ic->core.im; int len; XIMStyle input_style = ic->core.input_style; XIMResourceList res; unsigned int num; num = im->core.ic_num_resources; len = sizeof(XIMResource) * num; if (!(res = Xmalloc(len))) return False; (void)memcpy((char *)res, (char *)im->core.ic_resources, len); ic->private.proto.ic_resources = res; ic->private.proto.ic_num_resources = num; _XimSetICMode(res, num, input_style); ic->core.filter_events = KeyPressMask; return True; } #endif /* XIM_CONNECTABLE */ XIC _XimProtoCreateIC( XIM xim, XIMArg *arg) { Xim im = (Xim)xim; Xic ic; XimDefICValues ic_values; XIMResourceList res; unsigned int num; XIMStyle input_style; INT16 len; CARD16 *buf_s; char *tmp; CARD32 tmp_buf32[BUFSIZE/4]; char *tmp_buf = (char *)tmp_buf32; char *buf; int buf_size; char *data; int data_len; int ret_len; int total; XIMArg *arg_ret; CARD32 reply32[BUFSIZE/4]; char *reply = (char *)reply32; XPointer preply; int ret_code; #ifdef XIM_CONNECTABLE if (!IS_SERVER_CONNECTED(im) && !IS_CONNECTABLE(im)) return (XIC)NULL; #else if (!IS_SERVER_CONNECTED(im)) return (XIC)NULL; #endif /* XIM_CONNECTABLE */ if (!(_XimGetInputStyle(arg, &input_style))) return (XIC)NULL; if ((ic = Xcalloc(1, sizeof(XicRec))) == (Xic)NULL) return (XIC)NULL; ic->methods = &ic_methods; ic->core.im = (XIM)im; ic->core.input_style = input_style; num = im->core.ic_num_resources; len = sizeof(XIMResource) * num; if (!(res = Xmalloc(len))) goto ErrorOnCreatingIC; (void)memcpy((char *)res, (char *)im->core.ic_resources, len); ic->private.proto.ic_resources = res; ic->private.proto.ic_num_resources = num; #ifdef XIM_CONNECTABLE if (!_XimSaveICValues(ic, arg)) return False; if (!IS_SERVER_CONNECTED(im)) { if (!_XimConnectServer(im)) { if (_XimDelayModeCreateIC(ic, arg, res, num)) { return (XIC)ic; } goto ErrorOnCreatingIC; } } #endif /* XIM_CONNECTABLE */ ic->core.filter_events = im->private.proto.forward_event_mask; ic->private.proto.forward_event_mask = im->private.proto.forward_event_mask; ic->private.proto.synchronous_event_mask = im->private.proto.synchronous_event_mask; num = im->private.proto.ic_num_inner_resources; len = sizeof(XIMResource) * num; if (!(res = Xmalloc(len))) goto ErrorOnCreatingIC; (void)memcpy((char *)res, (char *)im->private.proto.ic_inner_resources, len); ic->private.proto.ic_inner_resources = res; ic->private.proto.ic_num_inner_resources = num; _XimSetICMode(ic->private.proto.ic_resources, ic->private.proto.ic_num_resources, input_style); _XimSetICMode(ic->private.proto.ic_inner_resources, ic->private.proto.ic_num_inner_resources, input_style); _XimGetCurrentICValues(ic, &ic_values); buf = tmp_buf; buf_size = XIM_HEADER_SIZE + sizeof(CARD16) + sizeof(INT16); data_len = BUFSIZE - buf_size; total = 0; arg_ret = arg; for (;;) { data = &buf[buf_size]; if (_XimEncodeICATTRIBUTE(ic, ic->private.proto.ic_resources, ic->private.proto.ic_num_resources, arg, &arg_ret, data, data_len, &ret_len, (XPointer)&ic_values, 0, XIM_CREATEIC)) { goto ErrorOnCreatingIC; } total += ret_len; if (!(arg = arg_ret)) { break; } buf_size += ret_len; if (buf == tmp_buf) { if (!(tmp = Xmalloc(buf_size + data_len))) { goto ErrorOnCreatingIC; } memcpy(tmp, buf, buf_size); buf = tmp; } else { if (!(tmp = Xrealloc(buf, (buf_size + data_len)))) { Xfree(buf); goto ErrorOnCreatingIC; } buf = tmp; } } _XimSetCurrentICValues(ic, &ic_values); if (!(_XimCheckCreateICValues(ic->private.proto.ic_resources, ic->private.proto.ic_num_resources))) goto ErrorOnCreatingIC; _XimRegisterFilter(ic); buf_s = (CARD16 *)&buf[XIM_HEADER_SIZE]; buf_s[0] = im->private.proto.imid; buf_s[1] = (INT16)total; len = (INT16)(sizeof(CARD16) + sizeof(INT16) + total); _XimSetHeader((XPointer)buf, XIM_CREATE_IC, 0, &len); if (!(_XimWrite(im, len, (XPointer)buf))) { if (buf != tmp_buf) Xfree(buf); goto ErrorOnCreatingIC; } _XimFlush(im); if (buf != tmp_buf) Xfree(buf); ic->private.proto.waitCallback = True; buf_size = BUFSIZE; ret_code = _XimRead(im, &len, (XPointer)reply, buf_size, _XimCreateICCheck, 0); if (ret_code == XIM_TRUE) { preply = reply; } else if (ret_code == XIM_OVERFLOW) { if (len <= 0) { preply = reply; } else { buf_size = (int)len; preply = Xmalloc(buf_size); ret_code = _XimRead(im, &len, preply, buf_size, _XimCreateICCheck, 0); if (ret_code != XIM_TRUE) { Xfree(preply); ic->private.proto.waitCallback = False; goto ErrorOnCreatingIC; } } } else { ic->private.proto.waitCallback = False; goto ErrorOnCreatingIC; } ic->private.proto.waitCallback = False; buf_s = (CARD16 *)((char *)preply + XIM_HEADER_SIZE); if (*((CARD8 *)preply) == XIM_ERROR) { _XimProcError(im, 0, (XPointer)&buf_s[3]); if (reply != preply) Xfree(preply); goto ErrorOnCreatingIC; } ic->private.proto.icid = buf_s[1]; /* icid */ if (reply != preply) Xfree(preply); MARK_IC_CONNECTED(ic); return (XIC)ic; ErrorOnCreatingIC: _XimUnregisterFilter(ic); Xfree(ic->private.proto.ic_resources); Xfree(ic->private.proto.ic_inner_resources); Xfree(ic); return (XIC)NULL; } _XimFreeCommitInfo( ic ); return new_commit; } static char * _XimProtoMbReset( XIC xic) { return _XimProtoReset(xic, _XimCommitedMbString); } static wchar_t * _XimCommitedWcString( Xim im, Xic ic, XPointer buf) { CARD16 *buf_s = (CARD16 *)buf; XimCommitInfo info; int len; int new_len; char *commit; wchar_t *new_commit = (wchar_t *)NULL; char *str; Status status; len = 0; for (info = ic->private.protlibX11-1.6.3/modules/im/ximcp/imLcFlt.c000064401431060000012000000123751247741723500177610ustar00alancstaff00002660200006/****************************************************************** Copyright 1992 by Fuji Xerox Co., Ltd. Copyright 1992, 1994 by FUJITSU LIMITED Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Fuji Xerox, FUJITSU LIMITED not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. Fuji Xerox, FUJITSU LIMITED make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. FUJI XEROX, FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJI XEROX, FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author : Kazunori Nishihara Fuji Xerox Modifier : Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include #include "Xlcint.h" #include "Ximint.h" Bool _XimLocalFilter(Display *d, Window w, XEvent *ev, XPointer client_data) { Xic ic = (Xic)client_data; KeySym keysym; static char buf[256]; static unsigned prevcode = 0, prevstate = 0; unsigned currstate; DefTree *b = ic->private.local.base.tree; DTIndex t; Bool braille = False, anymodifier = False; if(ev->xkey.keycode == 0) return (False); XLookupString((XKeyEvent *)ev, buf, sizeof(buf), &keysym, NULL); if(keysym >= XK_braille_dot_1 && keysym <= XK_braille_dot_8) { if(ev->type == KeyPress) { ic->private.local.brl_pressed |= 1<<(keysym-XK_braille_dot_1); return(True); } else { if(!ic->private.local.brl_committing || ev->xkey.time - ic->private.local.brl_release_start > 300) { ic->private.local.brl_committing = ic->private.local.brl_pressed; ic->private.local.brl_release_start = ev->xkey.time; } ic->private.local.brl_pressed &= ~(1<<(keysym-XK_braille_dot_1)); if(!ic->private.local.brl_pressed && ic->private.local.brl_committing) { /* Commited a braille pattern, let it go through compose tree */ keysym = XK_braille_blank | ic->private.local.brl_committing; ev->type = KeyPress; braille = True; } else { return(True); } } } if(((Xim)ic->core.im)->private.local.top == 0 ) goto emit_braille; currstate = ev->xkey.state; if(ev->type == KeyPress) { prevcode = ev->xkey.keycode; prevstate = currstate; if(IsModifierKey(keysym)) return(False); prevcode = 0; } else { if(prevcode != ev->xkey.keycode) return False; /* For lookup, we use the state at the time when the key was pressed, */ /* because this state was not affected by the modifier that is mapped */ /* to the key. */ ev->xkey.state = prevstate; XLookupString((XKeyEvent *)ev, buf, sizeof(buf), &keysym, NULL); } for(t = ic->private.local.context; t; t = b[t].next) { if(IsModifierKey(b[t].keysym)) anymodifier = True; if(((ev->xkey.state & b[t].modifier_mask) == b[t].modifier) && (keysym == b[t].keysym)) break; } /* Restore the state */ ev->xkey.state = currstate; if(t) { /* Matched */ if(b[t].succession) { /* Intermediate */ ic->private.local.context = b[t].succession; return (ev->type == KeyPress); } else { /* Terminate (reached to leaf) */ ic->private.local.composed = t; ic->private.local.brl_committed = 0; /* return back to client KeyPressEvent keycode == 0 */ ev->xkey.keycode = 0; ev->xkey.type = KeyPress; XPutBackEvent(d, ev); if(prevcode){ /* For modifier key releases, restore the event, as we do not */ /* filter it. */ ev->xkey.type = KeyRelease; ev->xkey.keycode = prevcode; } /* initialize internal state for next key sequence */ ic->private.local.context = ((Xim)ic->core.im)->private.local.top; return (ev->type == KeyPress); } } else { /* Unmatched */ /* Unmatched modifier key releases abort matching only in the case that */ /* there was any modifier that would have matched */ if((ic->private.local.context == ((Xim)ic->core.im)->private.local.top) || (ev->type == KeyRelease && !anymodifier)) { goto emit_braille; } /* Error (Sequence Unmatch occured) */ /* initialize internal state for next key sequence */ ic->private.local.context = ((Xim)ic->core.im)->private.local.top; return (ev->type == KeyPress); } emit_braille: if(braille) { /* Braille pattern is not in compose tree, emit alone */ ic->private.local.brl_committed = ic->private.local.brl_committing; ic->private.local.composed = 0; ev->xkey.keycode = 0; _XPutBackEvent(d, ev); return(True); } return(False); } libX11-1.6.3/modules/im/ximcp/imEvToWire.c000064401431060000012000000732661247741723500204670ustar00alancstaff00002660200006/*********************************************************** Copyright 1993 by Digital Equipment Corporation, Maynard, Massachusetts, All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #include #include "Ximint.h" #define sw16(n, s) ((s) ? \ (((n) << 8 & 0xff00) | \ ((n) >> 8 & 0xff) \ ) : n) #define sw32(n, s) ((s) ? \ (((n) << 24 & 0xff000000) | \ ((n) << 8 & 0xff0000) | \ ((n) >> 8 & 0xff00) | \ ((n) >> 24 & 0xff) \ ) : n) Status _XimProtoEventToWire( register XEvent *re, /* pointer to where event should be reformatted */ register xEvent *event, /* wire protocol event */ Bool sw) /* swap byte? */ { switch (event->u.u.type = re->type) { case KeyPress: case KeyRelease: { register XKeyEvent *ev = (XKeyEvent*) re; event->u.keyButtonPointer.root = sw32(ev->root, sw); event->u.keyButtonPointer.event = sw32(ev->window, sw); event->u.keyButtonPointer.child = sw32(ev->subwindow, sw); event->u.keyButtonPointer.time = sw32(ev->time, sw); event->u.keyButtonPointer.eventX = sw16(ev->x, sw) ; event->u.keyButtonPointer.eventY = sw16(ev->y, sw) ; event->u.keyButtonPointer.rootX = sw16(ev->x_root, sw); event->u.keyButtonPointer.rootY = sw16(ev->y_root, sw); event->u.keyButtonPointer.state = sw16(ev->state, sw); event->u.keyButtonPointer.sameScreen = ev->same_screen; event->u.u.detail = ev->keycode; } break; case ButtonPress: case ButtonRelease: { register XButtonEvent *ev = (XButtonEvent *) re; event->u.keyButtonPointer.root = sw32(ev->root, sw); event->u.keyButtonPointer.event = sw32(ev->window, sw); event->u.keyButtonPointer.child = sw32(ev->subwindow, sw); event->u.keyButtonPointer.time = sw32(ev->time, sw); event->u.keyButtonPointer.eventX = sw16(ev->x, sw); event->u.keyButtonPointer.eventY = sw16(ev->y, sw); event->u.keyButtonPointer.rootX = sw16(ev->x_root, sw); event->u.keyButtonPointer.rootY = sw16(ev->y_root, sw); event->u.keyButtonPointer.state = sw16(ev->state, sw); event->u.keyButtonPointer.sameScreen = ev->same_screen; event->u.u.detail = ev->button; } break; case MotionNotify: { register XMotionEvent *ev = (XMotionEvent *)re; event->u.keyButtonPointer.root = sw32(ev->root, sw); event->u.keyButtonPointer.event = sw32(ev->window, sw); event->u.keyButtonPointer.child = sw32(ev->subwindow, sw); event->u.keyButtonPointer.time = sw32(ev->time, sw); event->u.keyButtonPointer.eventX= sw16(ev->x, sw); event->u.keyButtonPointer.eventY= sw16(ev->y, sw); event->u.keyButtonPointer.rootX = sw16(ev->x_root, sw); event->u.keyButtonPointer.rootY = sw16(ev->y_root, sw); event->u.keyButtonPointer.state = sw16(ev->state, sw); event->u.keyButtonPointer.sameScreen= ev->same_screen; event->u.u.detail = ev->is_hint; } break; case EnterNotify: case LeaveNotify: { register XCrossingEvent *ev = (XCrossingEvent *) re; event->u.enterLeave.root = sw32(ev->root, sw); event->u.enterLeave.event = sw32(ev->window, sw); event->u.enterLeave.child = sw32(ev->subwindow, sw); event->u.enterLeave.time = sw32(ev->time, sw); event->u.enterLeave.eventX = sw16(ev->x, sw); event->u.enterLeave.eventY = sw16(ev->y, sw); event->u.enterLeave.rootX = sw16(ev->x_root, sw); event->u.enterLeave.rootY = sw16(ev->y_root, sw); event->u.enterLeave.state = sw16(ev->state, sw); event->u.enterLeave.mode = ev->mode; event->u.enterLeave.flags = 0; if (ev->same_screen) { event->u.enterLeave.flags |= ELFlagSameScreen; } if (ev->focus) { event->u.enterLeave.flags |= ELFlagFocus; } event->u.u.detail = ev->detail; } break; case FocusIn: case FocusOut: { register XFocusChangeEvent *ev = (XFocusChangeEvent *) re; event->u.focus.window = sw32(ev->window, sw); event->u.focus.mode = ev->mode; event->u.u.detail = ev->detail; } break; case KeymapNotify: { register XKeymapEvent *ev = (XKeymapEvent *) re; memcpy((char *)(((xKeymapEvent *) event)->map), &ev->key_vector[1], sizeof (((xKeymapEvent *) event)->map)); } break; case Expose: { register XExposeEvent *ev = (XExposeEvent *) re; event->u.expose.window = sw32(ev->window, sw); event->u.expose.x = sw16(ev->x, sw); event->u.expose.y = sw16(ev->y, sw); event->u.expose.width = sw16(ev->width, sw); event->u.expose.height = sw16(ev->height, sw); event->u.expose.count = sw16(ev->count, sw); } break; case GraphicsExpose: { register XGraphicsExposeEvent *ev = (XGraphicsExposeEvent *) re; event->u.graphicsExposure.drawable = sw32(ev->drawable, sw); event->u.graphicsExposure.x = sw16(ev->x, sw); event->u.graphicsExposure.y = sw16(ev->y, sw); event->u.graphicsExposure.width = sw16(ev->width, sw); event->u.graphicsExposure.height = sw16(ev->height, sw); event->u.graphicsExposure.count = sw16(ev->count, sw); event->u.graphicsExposure.majorEvent= ev->major_code; event->u.graphicsExposure.minorEvent= sw16(ev->minor_code, sw); } break; case NoExpose: { register XNoExposeEvent *ev = (XNoExposeEvent *) re; event->u.noExposure.drawable = sw32(ev->drawable, sw); event->u.noExposure.majorEvent = ev->major_code; event->u.noExposure.minorEvent = sw16(ev->minor_code, sw); } break; case VisibilityNotify: { register XVisibilityEvent *ev = (XVisibilityEvent *) re; event->u.visibility.window = sw32(ev->window, sw); event->u.visibility.state = ev->state; } break; case CreateNotify: { register XCreateWindowEvent *ev = (XCreateWindowEvent *) re; event->u.createNotify.window = sw32(ev->window, sw); event->u.createNotify.parent = sw32(ev->parent, sw); event->u.createNotify.x = sw16(ev->x, sw); event->u.createNotify.y = sw16(ev->y, sw); event->u.createNotify.width = sw16(ev->width, sw); event->u.createNotify.height = sw16(ev->height, sw); event->u.createNotify.borderWidth = sw16(ev->border_width, sw); event->u.createNotify.override = ev->override_redirect; } break; case DestroyNotify: { register XDestroyWindowEvent *ev = (XDestroyWindowEvent *) re; event->u.destroyNotify.window = sw32(ev->window, sw); event->u.destroyNotify.event = sw32(ev->event, sw); } break; case UnmapNotify: { register XUnmapEvent *ev = (XUnmapEvent *) re; event->u.unmapNotify.window = sw32(ev->window, sw); event->u.unmapNotify.event = sw32(ev->event, sw); event->u.unmapNotify.fromConfigure = ev->from_configure; } break; case MapNotify: { register XMapEvent *ev = (XMapEvent *) re; event->u.mapNotify.window = sw32(ev->window, sw); event->u.mapNotify.event = sw32(ev->event, sw); event->u.mapNotify.override = ev->override_redirect; } break; case MapRequest: { register XMapRequestEvent *ev = (XMapRequestEvent *) re; event->u.mapRequest.window = sw32(ev->window, sw); event->u.mapRequest.parent = sw32(ev->parent, sw); } break; case ReparentNotify: { register XReparentEvent *ev = (XReparentEvent *) re; event->u.reparent.window = sw32(ev->window, sw); event->u.reparent.event = sw32(ev->event, sw); event->u.reparent.parent = sw32(ev->parent, sw); event->u.reparent.x = sw16(ev->x, sw); event->u.reparent.y = sw16(ev->y, sw); event->u.reparent.override = ev->override_redirect; } break; case ConfigureNotify: { register XConfigureEvent *ev = (XConfigureEvent *) re; event->u.configureNotify.window = sw32(ev->window, sw); event->u.configureNotify.event = sw32(ev->event, sw); event->u.configureNotify.aboveSibling = sw32(ev->above, sw); event->u.configureNotify.x = sw16(ev->x, sw); event->u.configureNotify.y = sw16(ev->y, sw); event->u.configureNotify.width = sw16(ev->width, sw); event->u.configureNotify.height = sw16(ev->height, sw); event->u.configureNotify.borderWidth= sw16(ev->border_width, sw); event->u.configureNotify.override = ev->override_redirect; } break; case ConfigureRequest: { register XConfigureRequestEvent *ev = (XConfigureRequestEvent *) re; event->u.configureRequest.window = sw32(ev->window, sw); event->u.configureRequest.parent = sw32(ev->parent, sw); event->u.configureRequest.sibling = sw32(ev->above, sw); event->u.configureRequest.x = sw16(ev->x, sw); event->u.configureRequest.y = sw16(ev->y, sw); event->u.configureRequest.width = sw16(ev->width, sw); event->u.configureRequest.height = sw16(ev->height, sw); event->u.configureRequest.borderWidth= sw16(ev->border_width, sw); event->u.configureRequest.valueMask= sw16(ev->value_mask, sw); event->u.u.detail = ev->detail; } break; case GravityNotify: { register XGravityEvent *ev = (XGravityEvent *) re; event->u.gravity.window = sw32(ev->window, sw); event->u.gravity.event = sw32(ev->event, sw); event->u.gravity.x = sw16(ev->x, sw); event->u.gravity.y = sw16(ev->y, sw); } break; case ResizeRequest: { register XResizeRequestEvent *ev = (XResizeRequestEvent *) re; event->u.resizeRequest.window = sw32(ev->window, sw); event->u.resizeRequest.width = sw16(ev->width, sw); event->u.resizeRequest.height = sw16(ev->height, sw); } break; case CirculateNotify: { register XCirculateEvent *ev = (XCirculateEvent *) re; event->u.circulate.window = sw32(ev->window, sw); event->u.circulate.event = sw32(ev->event, sw); event->u.circulate.place = ev->place; } break; case CirculateRequest: { register XCirculateRequestEvent *ev = (XCirculateRequestEvent *) re; event->u.circulate.window = sw32(ev->window, sw); event->u.circulate.event = sw32(ev->parent, sw); event->u.circulate.place = ev->place; } break; case PropertyNotify: { register XPropertyEvent *ev = (XPropertyEvent *) re; event->u.property.window = sw32(ev->window, sw); event->u.property.atom = sw32(ev->atom, sw); event->u.property.time = sw32(ev->time, sw); event->u.property.state = ev->state; } break; case SelectionClear: { register XSelectionClearEvent *ev = (XSelectionClearEvent *) re; event->u.selectionClear.window = sw32(ev->window, sw); event->u.selectionClear.atom = sw32(ev->selection, sw); event->u.selectionClear.time = sw32(ev->time, sw); } break; case SelectionRequest: { register XSelectionRequestEvent *ev = (XSelectionRequestEvent *) re; event->u.selectionRequest.owner = sw32(ev->owner, sw); event->u.selectionRequest.requestor = sw32(ev->requestor, sw); event->u.selectionRequest.selection = sw32(ev->selection, sw); event->u.selectionRequest.target = sw32(ev->target, sw); event->u.selectionRequest.property = sw32(ev->property, sw); event->u.selectionRequest.time = sw32(ev->time, sw); } break; case SelectionNotify: { register XSelectionEvent *ev = (XSelectionEvent *) re; event->u.selectionNotify.requestor = sw32(ev->requestor, sw); event->u.selectionNotify.selection = sw32(ev->selection, sw); event->u.selectionNotify.target = sw32(ev->target, sw); event->u.selectionNotify.property = sw32(ev->property, sw); event->u.selectionNotify.time = sw32(ev->time, sw); } break; case ColormapNotify: { register XColormapEvent *ev = (XColormapEvent *) re; event->u.colormap.window = sw32(ev->window, sw); event->u.colormap.colormap = sw32(ev->colormap, sw); event->u.colormap.new = ev->new; event->u.colormap.state = ev->state; } break; case ClientMessage: { register int i; register XClientMessageEvent *ev = (XClientMessageEvent *) re; event->u.clientMessage.window = sw32(ev->window, sw); event->u.u.detail = ev->format; switch (ev->format) { case 8: event->u.clientMessage.u.b.type = sw32(ev->message_type, sw); for (i = 0; i < 20; i++) event->u.clientMessage.u.b.bytes[i] = ev->data.b[i]; break; case 16: event->u.clientMessage.u.s.type = sw32(ev->message_type, sw); event->u.clientMessage.u.s.shorts0 = sw16(ev->data.s[0], sw); event->u.clientMessage.u.s.shorts1 = sw16(ev->data.s[1], sw); event->u.clientMessage.u.s.shorts2 = sw16(ev->data.s[2], sw); event->u.clientMessage.u.s.shorts3 = sw16(ev->data.s[3], sw); event->u.clientMessage.u.s.shorts4 = sw16(ev->data.s[4], sw); event->u.clientMessage.u.s.shorts5 = sw16(ev->data.s[5], sw); event->u.clientMessage.u.s.shorts6 = sw16(ev->data.s[6], sw); event->u.clientMessage.u.s.shorts7 = sw16(ev->data.s[7], sw); event->u.clientMessage.u.s.shorts8 = sw16(ev->data.s[8], sw); event->u.clientMessage.u.s.shorts9 = sw16(ev->data.s[9], sw); break; case 32: event->u.clientMessage.u.l.type = sw32(ev->message_type, sw); event->u.clientMessage.u.l.longs0 = sw32(ev->data.l[0], sw); event->u.clientMessage.u.l.longs1 = sw32(ev->data.l[1], sw); event->u.clientMessage.u.l.longs2 = sw32(ev->data.l[2], sw); event->u.clientMessage.u.l.longs3 = sw32(ev->data.l[3], sw); event->u.clientMessage.u.l.longs4 = sw32(ev->data.l[4], sw); break; default: /* client passing bogus data, let server complain */ break; } } break; case MappingNotify: { register XMappingEvent *ev = (XMappingEvent *) re; event->u.mappingNotify.firstKeyCode = ev->first_keycode; event->u.mappingNotify.request = ev->request; event->u.mappingNotify.count = ev->count; } break; default: return(0); } /* Common process */ if (((XAnyEvent *)re)->send_event) event->u.u.type |= 0x80; event->u.u.sequenceNumber = ((XAnyEvent *)re)->serial & ~((unsigned long)0xffff); event->u.u.sequenceNumber = sw16(event->u.u.sequenceNumber, sw); return(1); } /* * reformat a wire event into an XEvent structure of the right type. */ Bool _XimProtoWireToEvent( register XEvent *re, /* pointer to where event should be reformatted */ register xEvent *event, /* wire protocol event */ Bool sw) /* swap byte? */ { re->type = event->u.u.type & 0x7f; ((XAnyEvent *)re)->serial = sw16(event->u.u.sequenceNumber, sw); ((XAnyEvent *)re)->send_event = ((event->u.u.type & 0x80) != 0); ((XAnyEvent *)re)->display = NULL; /* Ignore the leading bit of the event type since it is set when a client sends an event rather than the server. */ switch (event-> u.u.type & 0177) { case KeyPress: case KeyRelease: { register XKeyEvent *ev = (XKeyEvent*) re; ev->root = sw32(event->u.keyButtonPointer.root, sw); ev->window = sw32(event->u.keyButtonPointer.event, sw); ev->subwindow = sw32(event->u.keyButtonPointer.child, sw); ev->time = sw32(event->u.keyButtonPointer.time, sw); ev->x = cvtINT16toInt(sw16(event->u.keyButtonPointer.eventX, sw)); ev->y = cvtINT16toInt(sw16(event->u.keyButtonPointer.eventY, sw)); ev->x_root = cvtINT16toInt(sw16(event->u.keyButtonPointer.rootX, sw)); ev->y_root = cvtINT16toInt(sw16(event->u.keyButtonPointer.rootY, sw)); ev->state = sw16(event->u.keyButtonPointer.state, sw); ev->same_screen = event->u.keyButtonPointer.sameScreen; ev->keycode = event->u.u.detail; } break; case ButtonPress: case ButtonRelease: { register XButtonEvent *ev = (XButtonEvent *) re; ev->root = sw32(event->u.keyButtonPointer.root, sw); ev->window = sw32(event->u.keyButtonPointer.event, sw); ev->subwindow = sw32(event->u.keyButtonPointer.child, sw); ev->time = sw32(event->u.keyButtonPointer.time, sw); ev->x = cvtINT16toInt(sw16(event->u.keyButtonPointer.eventX, sw)); ev->y = cvtINT16toInt(sw16(event->u.keyButtonPointer.eventY, sw)); ev->x_root = cvtINT16toInt(sw16(event->u.keyButtonPointer.rootX, sw)); ev->y_root = cvtINT16toInt(sw16(event->u.keyButtonPointer.rootY, sw)); ev->state = sw16(event->u.keyButtonPointer.state, sw); ev->same_screen = event->u.keyButtonPointer.sameScreen; ev->button = event->u.u.detail; } break; case MotionNotify: { register XMotionEvent *ev = (XMotionEvent *)re; ev->root = sw32(event->u.keyButtonPointer.root, sw); ev->window = sw32(event->u.keyButtonPointer.event, sw); ev->subwindow = sw32(event->u.keyButtonPointer.child, sw); ev->time = sw32(event->u.keyButtonPointer.time, sw); ev->x = cvtINT16toInt(sw16(event->u.keyButtonPointer.eventX, sw)); ev->y = cvtINT16toInt(sw16(event->u.keyButtonPointer.eventY, sw)); ev->x_root = cvtINT16toInt(sw16(event->u.keyButtonPointer.rootX, sw)); ev->y_root = cvtINT16toInt(sw16(event->u.keyButtonPointer.rootY, sw)); ev->state = sw16(event->u.keyButtonPointer.state, sw); ev->same_screen = event->u.keyButtonPointer.sameScreen; ev->is_hint = event->u.u.detail; } break; case EnterNotify: case LeaveNotify: { register XCrossingEvent *ev = (XCrossingEvent *) re; ev->root = sw32(event->u.enterLeave.root, sw); ev->window = sw32(event->u.enterLeave.event, sw); ev->subwindow = sw32(event->u.enterLeave.child, sw); ev->time = sw32(event->u.enterLeave.time, sw); ev->x = cvtINT16toInt(sw16(event->u.enterLeave.eventX, sw)); ev->y = cvtINT16toInt(sw16(event->u.enterLeave.eventY, sw)); ev->x_root = cvtINT16toInt(sw16(event->u.enterLeave.rootX, sw)); ev->y_root = cvtINT16toInt(sw16(event->u.enterLeave.rootY, sw)); ev->state = sw16(event->u.enterLeave.state, sw); ev->mode = event->u.enterLeave.mode; ev->same_screen = (event->u.enterLeave.flags & ELFlagSameScreen) && True; ev->focus = (event->u.enterLeave.flags & ELFlagFocus) && True; ev->detail = event->u.u.detail; } break; case FocusIn: case FocusOut: { register XFocusChangeEvent *ev = (XFocusChangeEvent *) re; ev->window = sw32(event->u.focus.window, sw); ev->mode = event->u.focus.mode; ev->detail = event->u.u.detail; } break; case KeymapNotify: { register XKeymapEvent *ev = (XKeymapEvent *) re; ev->window = None; memcpy(&ev->key_vector[1], (char *)((xKeymapEvent *) event)->map, sizeof (((xKeymapEvent *) event)->map)); } break; case Expose: { register XExposeEvent *ev = (XExposeEvent *) re; ev->window = sw32(event->u.expose.window, sw); ev->x = sw16(event->u.expose.x, sw); ev->y = sw16(event->u.expose.y, sw); ev->width = sw16(event->u.expose.width, sw); ev->height = sw16(event->u.expose.height, sw); ev->count = sw16(event->u.expose.count, sw); } break; case GraphicsExpose: { register XGraphicsExposeEvent *ev = (XGraphicsExposeEvent *) re; ev->drawable = sw32(event->u.graphicsExposure.drawable, sw); ev->x = sw16(event->u.graphicsExposure.x, sw); ev->y = sw16(event->u.graphicsExposure.y, sw); ev->width = sw16(event->u.graphicsExposure.width, sw); ev->height = sw16(event->u.graphicsExposure.height, sw); ev->count = sw16(event->u.graphicsExposure.count, sw); ev->major_code = event->u.graphicsExposure.majorEvent; ev->minor_code = sw16(event->u.graphicsExposure.minorEvent, sw); } break; case NoExpose: { register XNoExposeEvent *ev = (XNoExposeEvent *) re; ev->drawable = sw32(event->u.noExposure.drawable, sw); ev->major_code = event->u.noExposure.majorEvent; ev->minor_code = sw16(event->u.noExposure.minorEvent, sw); } break; case VisibilityNotify: { register XVisibilityEvent *ev = (XVisibilityEvent *) re; ev->window = sw32(event->u.visibility.window, sw); ev->state = event->u.visibility.state; } break; case CreateNotify: { register XCreateWindowEvent *ev = (XCreateWindowEvent *) re; ev->window = sw32(event->u.createNotify.window, sw); ev->parent = sw32(event->u.createNotify.parent, sw); ev->x = cvtINT16toInt(sw16(event->u.createNotify.x, sw)); ev->y = cvtINT16toInt(sw16(event->u.createNotify.y, sw)); ev->width = sw16(event->u.createNotify.width, sw); ev->height = sw16(event->u.createNotify.height, sw); ev->border_width = sw16(event->u.createNotify.borderWidth, sw); ev->override_redirect = event->u.createNotify.override; } break; case DestroyNotify: { register XDestroyWindowEvent *ev = (XDestroyWindowEvent *) re; ev->window = sw32(event->u.destroyNotify.window, sw); ev->event = sw32(event->u.destroyNotify.event, sw); } break; case UnmapNotify: { register XUnmapEvent *ev = (XUnmapEvent *) re; ev->window = sw32(event->u.unmapNotify.window, sw); ev->event = sw32(event->u.unmapNotify.event, sw); ev->from_configure = event->u.unmapNotify.fromConfigure; } break; case MapNotify: { register XMapEvent *ev = (XMapEvent *) re; ev->window = sw32(event->u.mapNotify.window, sw); ev->event = sw32(event->u.mapNotify.event, sw); ev->override_redirect = event->u.mapNotify.override; } break; case MapRequest: { register XMapRequestEvent *ev = (XMapRequestEvent *) re; ev->window = sw32(event->u.mapRequest.window, sw); ev->parent = sw32(event->u.mapRequest.parent, sw); } break; case ReparentNotify: { register XReparentEvent *ev = (XReparentEvent *) re; ev->event = sw32(event->u.reparent.event, sw); ev->window = sw32(event->u.reparent.window, sw); ev->parent = sw32(event->u.reparent.parent, sw); ev->x = cvtINT16toInt(sw16(event->u.reparent.x, sw)); ev->y = cvtINT16toInt(sw16(event->u.reparent.y, sw)); ev->override_redirect = event->u.reparent.override; } break; case ConfigureNotify: { register XConfigureEvent *ev = (XConfigureEvent *) re; ev->event = sw32(event->u.configureNotify.event, sw); ev->window = sw32(event->u.configureNotify.window, sw); ev->above = sw32(event->u.configureNotify.aboveSibling, sw); ev->x = cvtINT16toInt(sw16(event->u.configureNotify.x, sw)); ev->y = cvtINT16toInt(sw16(event->u.configureNotify.y, sw)); ev->width = sw16(event->u.configureNotify.width, sw); ev->height = sw16(event->u.configureNotify.height, sw); ev->border_width = sw16(event->u.configureNotify.borderWidth, sw); ev->override_redirect = event->u.configureNotify.override; } break; case ConfigureRequest: { register XConfigureRequestEvent *ev = (XConfigureRequestEvent *) re; ev->window = sw32(event->u.configureRequest.window, sw); ev->parent = sw32(event->u.configureRequest.parent, sw); ev->above = sw32(event->u.configureRequest.sibling, sw); ev->x = cvtINT16toInt(sw16(event->u.configureRequest.x, sw)); ev->y = cvtINT16toInt(sw16(event->u.configureRequest.y, sw)); ev->width = sw16(event->u.configureRequest.width, sw); ev->height = sw16(event->u.configureRequest.height, sw); ev->border_width = sw16(event->u.configureRequest.borderWidth, sw); ev->value_mask = sw16(event->u.configureRequest.valueMask, sw); ev->detail = event->u.u.detail; } break; case GravityNotify: { register XGravityEvent *ev = (XGravityEvent *) re; ev->window = sw32(event->u.gravity.window, sw); ev->event = sw32(event->u.gravity.event, sw); ev->x = cvtINT16toInt(sw16(event->u.gravity.x, sw)); ev->y = cvtINT16toInt(sw16(event->u.gravity.y, sw)); } break; case ResizeRequest: { register XResizeRequestEvent *ev = (XResizeRequestEvent *) re; ev->window = sw32(event->u.resizeRequest.window, sw); ev->width = sw16(event->u.resizeRequest.width, sw); ev->height = sw16(event->u.resizeRequest.height, sw); } break; case CirculateNotify: { register XCirculateEvent *ev = (XCirculateEvent *) re; ev->window = sw32(event->u.circulate.window, sw); ev->event = sw32(event->u.circulate.event, sw); ev->place = event->u.circulate.place; } break; case CirculateRequest: { register XCirculateRequestEvent *ev = (XCirculateRequestEvent *) re; ev->window = sw32(event->u.circulate.window, sw); ev->parent = sw32(event->u.circulate.event, sw); ev->place = event->u.circulate.place; } break; case PropertyNotify: { register XPropertyEvent *ev = (XPropertyEvent *) re; ev->window = sw32(event->u.property.window, sw); ev->atom = sw32(event->u.property.atom, sw); ev->time = sw32(event->u.property.time, sw); ev->state = event->u.property.state; } break; case SelectionClear: { register XSelectionClearEvent *ev = (XSelectionClearEvent *) re; ev->window = sw32(event->u.selectionClear.window, sw); ev->selection = sw32(event->u.selectionClear.atom, sw); ev->time = sw32(event->u.selectionClear.time, sw); } break; case SelectionRequest: { register XSelectionRequestEvent *ev = (XSelectionRequestEvent *) re; ev->owner = sw32(event->u.selectionRequest.owner, sw); ev->requestor = sw32(event->u.selectionRequest.requestor, sw); ev->selection = sw32(event->u.selectionRequest.selection, sw); ev->target = sw32(event->u.selectionRequest.target, sw); ev->property = sw32(event->u.selectionRequest.property, sw); ev->time = sw32(event->u.selectionRequest.time, sw); } break; case SelectionNotify: { register XSelectionEvent *ev = (XSelectionEvent *) re; ev->requestor = sw32(event->u.selectionNotify.requestor, sw); ev->selection = sw32(event->u.selectionNotify.selection, sw); ev->target = sw32(event->u.selectionNotify.target, sw); ev->property = sw32(event->u.selectionNotify.property, sw); ev->time = sw32(event->u.selectionNotify.time, sw); } break; case ColormapNotify: { register XColormapEvent *ev = (XColormapEvent *) re; ev->window = sw32(event->u.colormap.window, sw); ev->colormap = sw32(event->u.colormap.colormap, sw); ev->new = event->u.colormap.new; ev->state = event->u.colormap.state; } break; case ClientMessage: { register int i; register XClientMessageEvent *ev = (XClientMessageEvent *) re; ev->window = sw32(event->u.clientMessage.window, sw); ev->format = event->u.u.detail; switch (ev->format) { case 8: ev->message_type = sw32(event->u.clientMessage.u.b.type, sw); for (i = 0; i < 20; i++) ev->data.b[i] = event->u.clientMessage.u.b.bytes[i]; break; case 16: ev->message_type = sw32(event->u.clientMessage.u.s.type, sw); ev->data.s[0] = cvtINT16toShort(sw16(event->u.clientMessage.u.s.shorts0, sw)); ev->data.s[1] = cvtINT16toShort(sw16(event->u.clientMessage.u.s.shorts1, sw)); ev->data.s[2] = cvtINT16toShort(sw16(event->u.clientMessage.u.s.shorts2, sw)); ev->data.s[3] = cvtINT16toShort(sw16(event->u.clientMessage.u.s.shorts3, sw)); ev->data.s[4] = cvtINT16toShort(sw16(event->u.clientMessage.u.s.shorts4, sw)); ev->data.s[5] = cvtINT16toShort(sw16(event->u.clientMessage.u.s.shorts5, sw)); ev->data.s[6] = cvtINT16toShort(sw16(event->u.clientMessage.u.s.shorts6, sw)); ev->data.s[7] = cvtINT16toShort(sw16(event->u.clientMessage.u.s.shorts7, sw)); ev->data.s[8] = cvtINT16toShort(sw16(event->u.clientMessage.u.s.shorts8, sw)); ev->data.s[9] = cvtINT16toShort(sw16(event->u.clientMessage.u.s.shorts9, sw)); break; case 32: ev->message_type = sw32(event->u.clientMessage.u.l.type, sw); ev->data.l[0] = cvtINT32toLong(sw32(event->u.clientMessage.u.l.longs0, sw)); ev->data.l[1] = cvtINT32toLong(sw32(event->u.clientMessage.u.l.longs1, sw)); ev->data.l[2] = cvtINT32toLong(sw32(event->u.clientMessage.u.l.longs2, sw)); ev->data.l[3] = cvtINT32toLong(sw32(event->u.clientMessage.u.l.longs3, sw)); ev->data.l[4] = cvtINT32toLong(sw32(event->u.clientMessage.u.l.longs4, sw)); break; default: /* XXX should never occur */ break; } } break; case MappingNotify: { register XMappingEvent *ev = (XMappingEvent *)re; ev->window = 0; ev->first_keycode = event->u.mappingNotify.firstKeyCode; ev->request = event->u.mappingNotify.request; ev->count = event->u.mappingNotify.count; } break; default: return(False); } return(True); } window, sw); ev->x = sw16(event->u.expose.x, sw); ev->y = sw16(event->u.expose.y, sw); ev->width = sw16(event->u.expose.width, sw); ev->height = sw16(event->u.expose.height, sw); ev->count = sw16(event->u.expose.count, sw); } break; case GraphicsExpose: { register XGraphicsExposeEvent *ev = libX11-1.6.3/modules/im/ximcp/imLcIc.c000064401431060000012000000131201247741723500175540ustar00alancstaff00002660200006/****************************************************************** Copyright 1992,1993, 1994 by FUJITSU LIMITED Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of FUJITSU LIMITED not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include "Xlibint.h" #include "Xlcint.h" #include "Ximint.h" static void _XimLocalUnSetFocus( XIC xic) { Xic ic = (Xic)xic; ((Xim)ic->core.im)->private.local.current_ic = (XIC)NULL; if (ic->core.focus_window) _XUnregisterFilter(ic->core.im->core.display, ic->core.focus_window, _XimLocalFilter, (XPointer)ic); return; } static void _XimLocalDestroyIC( XIC xic) { Xic ic = (Xic)xic; if(((Xim)ic->core.im)->private.local.current_ic == (XIC)ic) { ((Xim)ic->core.im)->private.local.current_ic = (XIC)NULL; } if (ic->core.focus_window) _XUnregisterFilter(ic->core.im->core.display, ic->core.focus_window, _XimLocalFilter, (XPointer)ic); if(ic->private.local.ic_resources) { Xfree(ic->private.local.ic_resources); ic->private.local.ic_resources = NULL; } return; } static void _XimLocalSetFocus( XIC xic) { Xic ic = (Xic)xic; XIC current_ic = ((Xim)ic->core.im)->private.local.current_ic; if (current_ic == (XIC)ic) return; if (current_ic != (XIC)NULL) { _XimLocalUnSetFocus(current_ic); } ((Xim)ic->core.im)->private.local.current_ic = (XIC)ic; if (ic->core.focus_window) _XRegisterFilterByType(ic->core.im->core.display, ic->core.focus_window, KeyPress, KeyRelease, _XimLocalFilter, (XPointer)ic); return; } static void _XimLocalReset( XIC xic) { Xic ic = (Xic)xic; ic->private.local.composed = 0; ic->private.local.context = ((Xim)ic->core.im)->private.local.top; ic->private.local.brl_pressed = 0; ic->private.local.brl_committing = 0; ic->private.local.brl_committed = 0; } static char * _XimLocalMbReset( XIC xic) { _XimLocalReset(xic); return (char *)NULL; } static wchar_t * _XimLocalWcReset( XIC xic) { _XimLocalReset(xic); return (wchar_t *)NULL; } static XICMethodsRec Local_ic_methods = { _XimLocalDestroyIC, /* destroy */ _XimLocalSetFocus, /* set_focus */ _XimLocalUnSetFocus, /* unset_focus */ _XimLocalSetICValues, /* set_values */ _XimLocalGetICValues, /* get_values */ _XimLocalMbReset, /* mb_reset */ _XimLocalWcReset, /* wc_reset */ _XimLocalMbReset, /* utf8_reset */ _XimLocalMbLookupString, /* mb_lookup_string */ _XimLocalWcLookupString, /* wc_lookup_string */ _XimLocalUtf8LookupString /* utf8_lookup_string */ }; XIC _XimLocalCreateIC( XIM im, XIMArg *values) { Xic ic; XimDefICValues ic_values; XIMResourceList res; unsigned int num; int len; if((ic = Xcalloc(1, sizeof(XicRec))) == (Xic)NULL) { return ((XIC)NULL); } ic->methods = &Local_ic_methods; ic->core.im = im; ic->private.local.base = ((Xim)im)->private.local.base; ic->private.local.context = ((Xim)im)->private.local.top; ic->private.local.composed = 0; ic->private.local.brl_pressed = 0; ic->private.local.brl_committing = 0; ic->private.local.brl_committed = 0; num = im->core.ic_num_resources; len = sizeof(XIMResource) * num; if((res = Xmalloc(len)) == (XIMResourceList)NULL) { goto Set_Error; } (void)memcpy((char *)res, (char *)im->core.ic_resources, len); ic->private.local.ic_resources = res; ic->private.local.ic_num_resources = num; bzero((char *)&ic_values, sizeof(XimDefICValues)); if(_XimCheckLocalInputStyle(ic, (XPointer)&ic_values, values, im->core.styles, res, num) == False) { goto Set_Error; } _XimSetICMode(res, num, ic_values.input_style); if(_XimSetICValueData(ic, (XPointer)&ic_values, ic->private.local.ic_resources, ic->private.local.ic_num_resources, values, XIM_CREATEIC, True)) { goto Set_Error; } ic_values.filter_events = KeyPressMask | KeyReleaseMask; _XimSetCurrentICValues(ic, &ic_values); if(_XimSetICDefaults(ic, (XPointer)&ic_values, XIM_SETICDEFAULTS, res, num) == False) { goto Set_Error; } _XimSetCurrentICValues(ic, &ic_values); return((XIC)ic); Set_Error : if (ic->private.local.ic_resources) { Xfree(ic->private.local.ic_resources); ic->private.local.ic_resources = NULL; } Xfree(ic); return((XIC)NULL); } libX11-1.6.3/modules/im/ximcp/imRmAttr.c000064401431060000012000001042531247741723500201630ustar00alancstaff00002660200006/****************************************************************** Copyright 1992, 1993, 1994 by FUJITSU LIMITED Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of FUJITSU LIMITED not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xlcint.h" #include "Ximint.h" static XIMResourceList _XimGetNestedListSeparator( XIMResourceList res_list, /* LISTofIMATTR or IMATTR */ unsigned int res_num) { return _XimGetResourceListRec(res_list, res_num, XNSeparatorofNestedList); } static Bool _XimCheckInnerIMAttributes( Xim im, XIMArg *arg, unsigned long mode) { XIMResourceList res; int check; if (!(res = _XimGetResourceListRec(im->private.proto.im_inner_resources, im->private.proto.im_num_inner_resources, arg->name))) return False; check = _XimCheckIMMode(res, mode); if(check == XIM_CHECK_INVALID) return True; else if(check == XIM_CHECK_ERROR) return False; return True; } char * _XimMakeIMAttrIDList( Xim im, XIMResourceList res_list, unsigned int res_num, XIMArg *arg, CARD16 *buf, INT16 *len, unsigned long mode) { register XIMArg *p; XIMResourceList res; int check; *len = 0; if (!arg) return (char *)NULL; for (p = arg; p->name; p++) { if (!(res = _XimGetResourceListRec(res_list, res_num, p->name))) { if (_XimCheckInnerIMAttributes(im, p, mode)) continue; return p->name; } check = _XimCheckIMMode(res, mode); if (check == XIM_CHECK_INVALID) continue; else if (check == XIM_CHECK_ERROR) return p->name; *buf = res->id; *len += sizeof(CARD16); buf++; } return (char *)NULL; } static Bool _XimCheckInnerICAttributes( Xic ic, XIMArg *arg, unsigned long mode) { XIMResourceList res; int check; if (!(res = _XimGetResourceListRec(ic->private.proto.ic_inner_resources, ic->private.proto.ic_num_inner_resources, arg->name))) return False; check = _XimCheckICMode(res, mode); if(check == XIM_CHECK_INVALID) return True; else if(check == XIM_CHECK_ERROR) return False; return True; } char * _XimMakeICAttrIDList( Xic ic, XIMResourceList res_list, unsigned int res_num, XIMArg *arg, CARD16 *buf, INT16 *len, unsigned long mode) { register XIMArg *p; XIMResourceList res; int check; XrmQuark pre_quark; XrmQuark sts_quark; char *name; INT16 new_len; *len = 0; if (!arg) return (char *)NULL; pre_quark = XrmStringToQuark(XNPreeditAttributes); sts_quark = XrmStringToQuark(XNStatusAttributes); for (p = arg; p && p->name; p++) { if (!(res = _XimGetResourceListRec(res_list, res_num, p->name))) { if (_XimCheckInnerICAttributes(ic, p, mode)) continue; *len = -1; return p->name; } check = _XimCheckICMode(res, mode); if(check == XIM_CHECK_INVALID) continue; else if(check == XIM_CHECK_ERROR) { *len = -1; return p->name; } *buf = res->id; *len += sizeof(CARD16); buf++; if (res->resource_size == XimType_NEST) { if (res->xrm_name == pre_quark) { if ((name = _XimMakeICAttrIDList(ic, res_list, res_num, (XIMArg *)p->value, buf, &new_len, (mode | XIM_PREEDIT_ATTR)))) { if (new_len < 0) *len = -1; else *len += new_len; return name; } *len += new_len; buf = (CARD16 *)((char *)buf + new_len); } else if (res->xrm_name == sts_quark) { if ((name = _XimMakeICAttrIDList(ic, res_list, res_num, (XIMArg *)p->value, buf, &new_len, (mode | XIM_STATUS_ATTR)))) { if (new_len < 0) *len = -1; else *len += new_len; return name; } *len += new_len; buf = (CARD16 *)((char *)buf + new_len); } if (!(res = _XimGetNestedListSeparator(res_list, res_num))) { p++; if (p) { *len = -1; return p->name; } else { return (char *)NULL; } } *buf = res->id; *len += sizeof(CARD16); buf++; } } return (char *)NULL; } static Bool _XimAttributeToValue( Xic ic, XIMResourceList res, CARD16 *data, INT16 data_len, XPointer value, BITMASK32 mode) { switch (res->resource_size) { case XimType_SeparatorOfNestedList: case XimType_NEST: break; case XimType_CARD8: case XimType_CARD16: case XimType_CARD32: case XimType_Window: case XimType_XIMHotKeyState: _XCopyToArg((XPointer)data, (XPointer *)&value, data_len); break; case XimType_STRING8: { char *str; if (!(value)) return False; if (!(str = Xmalloc(data_len + 1))) return False; (void)memcpy(str, (char *)data, data_len); str[data_len] = '\0'; *((char **)value) = str; break; } case XimType_XIMStyles: { INT16 num = data[0]; register CARD32 *style_list = (CARD32 *)&data[2]; XIMStyle *style; XIMStyles *rep; register int i; char *p; int alloc_len; if (!(value)) return False; alloc_len = sizeof(XIMStyles) + sizeof(XIMStyle) * num; if (!(p = Xmalloc(alloc_len))) return False; rep = (XIMStyles *)p; style = (XIMStyle *)(p + sizeof(XIMStyles)); for (i = 0; i < num; i++) style[i] = (XIMStyle)style_list[i]; rep->count_styles = (unsigned short)num; rep->supported_styles = style; *((XIMStyles **)value) = rep; break; } case XimType_XRectangle: { XRectangle *rep; if (!(value)) return False; if (!(rep = Xmalloc(sizeof(XRectangle)))) return False; rep->x = data[0]; rep->y = data[1]; rep->width = data[2]; rep->height = data[3]; *((XRectangle **)value) = rep; break; } case XimType_XPoint: { XPoint *rep; if (!(value)) return False; if (!(rep = Xmalloc(sizeof(XPoint)))) return False; rep->x = data[0]; rep->y = data[1]; *((XPoint **)value) = rep; break; } case XimType_XFontSet: { INT16 len = data[0]; char *base_name; XFontSet rep = (XFontSet)NULL; char **missing_list = NULL; int missing_count; char *def_string; if (!(value)) return False; if (!ic) return False; if (!(base_name = Xmalloc(len + 1))) return False; (void)strncpy(base_name, (char *)&data[1], (int)len); base_name[len] = '\0'; if (mode & XIM_PREEDIT_ATTR) { if (!strcmp(base_name, ic->private.proto.preedit_font)) { rep = ic->core.preedit_attr.fontset; } else if (!ic->private.proto.preedit_font_length) { rep = XCreateFontSet(ic->core.im->core.display, base_name, &missing_list, &missing_count, &def_string); } } else if (mode & XIM_STATUS_ATTR) { if (!strcmp(base_name, ic->private.proto.status_font)) { rep = ic->core.status_attr.fontset; } else if (!ic->private.proto.status_font_length) { rep = XCreateFontSet(ic->core.im->core.display, base_name, &missing_list, &missing_count, &def_string); } } Xfree(base_name); Xfree(missing_list); *((XFontSet *)value) = rep; break; } case XimType_XIMHotKeyTriggers: { INT32 num = *((CARD32 *)data); register CARD32 *key_list = (CARD32 *)&data[2]; XIMHotKeyTrigger *key; XIMHotKeyTriggers *rep; register int i; char *p; int alloc_len; if (!(value)) return False; alloc_len = sizeof(XIMHotKeyTriggers) + sizeof(XIMHotKeyTrigger) * num; if (!(p = Xmalloc(alloc_len))) return False; rep = (XIMHotKeyTriggers *)p; key = (XIMHotKeyTrigger *)(p + sizeof(XIMHotKeyTriggers)); for (i = 0; i < num; i++, key_list += 3) { key[i].keysym = (KeySym)key_list[0]; /* keysym */ key[i].modifier = (int)key_list[1]; /* modifier */ key[i].modifier_mask = (int)key_list[2]; /* modifier_mask */ } rep->num_hot_key = (int)num; rep->key = key; *((XIMHotKeyTriggers **)value) = rep; break; } case XimType_XIMStringConversion: { break; } default: return False; } return True; } static Bool _XimDecodeInnerIMATTRIBUTE( Xim im, XIMArg *arg) { XIMResourceList res; XimDefIMValues im_values; if (!(res = _XimGetResourceListRec(im->private.proto.im_inner_resources, im->private.proto.im_num_inner_resources, arg->name))) return False; _XimGetCurrentIMValues(im, &im_values); return _XimDecodeLocalIMAttr(res, (XPointer)&im_values, arg->value); } char * _XimDecodeIMATTRIBUTE( Xim im, XIMResourceList res_list, unsigned int res_num, CARD16 *data, INT16 data_len, XIMArg *arg, BITMASK32 mode) { register XIMArg *p; XIMResourceList res; int check; INT16 len; CARD16 *buf; INT16 total; INT16 min_len = sizeof(CARD16) /* sizeof attributeID */ + sizeof(INT16); /* sizeof length */ for (p = arg; p->name; p++) { if (!(res = _XimGetResourceListRec(res_list, res_num, p->name))) { if (_XimDecodeInnerIMATTRIBUTE(im, p)) continue; return p->name; } check = _XimCheckIMMode(res, mode); if(check == XIM_CHECK_INVALID) continue; else if(check == XIM_CHECK_ERROR) return p->name; total = data_len; buf = data; while (total >= min_len) { if (res->id == buf[0]) break; len = buf[1]; len += XIM_PAD(len) + min_len; buf = (CARD16 *)((char *)buf + len); total -= len; } if (total < min_len) return p->name; if (!(_XimAttributeToValue((Xic) im->private.local.current_ic, res, &buf[2], buf[1], p->value, mode))) return p->name; } return (char *)NULL; } static Bool _XimDecodeInnerICATTRIBUTE( Xic ic, XIMArg *arg, unsigned long mode) { XIMResourceList res; XimDefICValues ic_values; if (!(res = _XimGetResourceListRec(ic->private.proto.ic_inner_resources, ic->private.proto.ic_num_inner_resources, arg->name))) return False; _XimGetCurrentICValues(ic, &ic_values); if (!_XimDecodeLocalICAttr(res, (XPointer)&ic_values, arg->value, mode)) return False; _XimSetCurrentICValues(ic, &ic_values); return True; } char * _XimDecodeICATTRIBUTE( Xic ic, XIMResourceList res_list, unsigned int res_num, CARD16 *data, INT16 data_len, XIMArg *arg, BITMASK32 mode) { register XIMArg *p; XIMResourceList res; int check; INT16 len; CARD16 *buf; INT16 total; char *name; INT16 min_len = sizeof(CARD16) /* sizeof attributeID */ + sizeof(INT16); /* sizeof length */ XrmQuark pre_quark; XrmQuark sts_quark; if (!arg) return (char *)NULL; pre_quark = XrmStringToQuark(XNPreeditAttributes); sts_quark = XrmStringToQuark(XNStatusAttributes); for (p = arg; p->name; p++) { if (!(res = _XimGetResourceListRec(res_list, res_num, p->name))) { if (_XimDecodeInnerICATTRIBUTE(ic, p, mode)) continue; return p->name; } check = _XimCheckICMode(res, mode); if (check == XIM_CHECK_INVALID) continue; else if (check == XIM_CHECK_ERROR) return p->name; total = data_len; buf = data; while (total >= min_len) { if (res->id == buf[0]) break; len = buf[1]; len += XIM_PAD(len) + min_len; buf = (CARD16 *)((char *)buf + len); total -= len; } if (total < min_len) return p->name; if (res->resource_size == XimType_NEST) { if (res->xrm_name == pre_quark) { if ((name = _XimDecodeICATTRIBUTE(ic, res_list, res_num, &buf[2], buf[1], (XIMArg *)p->value, (mode | XIM_PREEDIT_ATTR)))) return name; } else if (res->xrm_name == sts_quark) { if ((name = _XimDecodeICATTRIBUTE(ic, res_list, res_num, &buf[2], buf[1], (XIMArg *)p->value, (mode | XIM_STATUS_ATTR)))) return name; } } else { if (!(_XimAttributeToValue(ic, res, &buf[2], buf[1], p->value, mode))) return p->name; } } return (char *)NULL; } static Bool _XimValueToAttribute( XIMResourceList res, XPointer buf, int buf_size, XPointer value, int *len, unsigned long mode, XPointer param) { int ret_len; switch (res->resource_size) { case XimType_SeparatorOfNestedList: case XimType_NEST: *len = 0; break; case XimType_CARD8: ret_len = sizeof(CARD8); if (buf_size < ret_len + XIM_PAD(ret_len)) { *len = -1; return False; } *((CARD8 *)buf) = (CARD8)(long)value; *len = ret_len; break; case XimType_CARD16: ret_len = sizeof(CARD16); if (buf_size < ret_len + XIM_PAD(ret_len)) { *len = -1; return False; } *((CARD16 *)buf) = (CARD16)(long)value; *len = ret_len; break; case XimType_CARD32: case XimType_Window: case XimType_XIMHotKeyState: ret_len = sizeof(CARD32); if (buf_size < ret_len + XIM_PAD(ret_len)) { *len = -1; return False; } *((CARD32 *)buf) = (CARD32)(long)value; *len = ret_len; break; case XimType_STRING8: if (!value) { *len = 0; return False; } ret_len = strlen((char *)value); if (buf_size < ret_len + XIM_PAD(ret_len)) { *len = -1; return False; } (void)memcpy((char *)buf, (char *)value, ret_len); *len = ret_len; break; case XimType_XRectangle: { XRectangle *rect = (XRectangle *)value; CARD16 *buf_s = (CARD16 *)buf; if (!rect) { *len = 0; return False; } ret_len = sizeof(INT16) /* sizeof X */ + sizeof(INT16) /* sizeof Y */ + sizeof(CARD16) /* sizeof width */ + sizeof(CARD16); /* sizeof height */ if (buf_size < ret_len + XIM_PAD(ret_len)) { *len = -1; return False; } buf_s[0] = (CARD16)rect->x; /* X */ buf_s[1] = (CARD16)rect->y; /* Y */ buf_s[2] = (CARD16)rect->width; /* width */ buf_s[3] = (CARD16)rect->height; /* heght */ *len = ret_len; break; } case XimType_XPoint: { XPoint *point = (XPoint *)value; CARD16 *buf_s = (CARD16 *)buf; if (!point) { *len = 0; return False; } ret_len = sizeof(INT16) /* sizeof X */ + sizeof(INT16); /* sizeof Y */ if (buf_size < ret_len + XIM_PAD(ret_len)) { *len = -1; return False; } buf_s[0] = (CARD16)point->x; /* X */ buf_s[1] = (CARD16)point->y; /* Y */ *len = ret_len; break; } case XimType_XFontSet: { XFontSet font = (XFontSet)value; Xic ic = (Xic)param; char *base_name = NULL; int length = 0; CARD16 *buf_s = (CARD16 *)buf; if (!font) { *len = 0; return False; } if (mode & XIM_PREEDIT_ATTR) { base_name = ic->private.proto.preedit_font; length = ic->private.proto.preedit_font_length; } else if (mode & XIM_STATUS_ATTR) { base_name = ic->private.proto.status_font; length = ic->private.proto.status_font_length; } if (!base_name) { *len = 0; return False; } ret_len = sizeof(CARD16) /* sizeof length of Base name */ + length; /* sizeof Base font name list */ if (buf_size < ret_len + XIM_PAD(ret_len)) { *len = -1; return False; } buf_s[0] = (INT16)length; /* length of Base font name */ (void)memcpy((char *)&buf_s[1], base_name, length); /* Base font name list */ *len = ret_len; break; } case XimType_XIMHotKeyTriggers: { XIMHotKeyTriggers *hotkey = (XIMHotKeyTriggers *)value; INT32 num; CARD32 *buf_l = (CARD32 *)buf; register CARD32 *key = (CARD32 *)&buf_l[1]; register int i; if (!hotkey) { *len = 0; return False; } num = (INT32)hotkey->num_hot_key; ret_len = sizeof(INT32) /* sizeof number of key list */ + (sizeof(CARD32) /* sizeof keysyn */ + sizeof(CARD32) /* sizeof modifier */ + sizeof(CARD32)) /* sizeof modifier_mask */ * num; /* number of key list */ if (buf_size < ret_len + XIM_PAD(ret_len)) { *len = -1; return False; } buf_l[0] = num; /* number of key list */ for (i = 0; i < num; i++, key += 3) { key[0] = (CARD32)(hotkey->key[i].keysym); /* keysym */ key[1] = (CARD32)(hotkey->key[i].modifier); /* modifier */ key[2] = (CARD32)(hotkey->key[i].modifier_mask); /* modifier_mask */ } *len = ret_len; break; } case XimType_XIMStringConversion: { *len = 0; break; } default: return False; } return True; } static Bool _XimSetInnerIMAttributes( Xim im, XPointer top, XIMArg *arg, unsigned long mode) { XIMResourceList res; int check; if (!(res = _XimGetResourceListRec(im->private.proto.im_inner_resources, im->private.proto.im_num_inner_resources, arg->name))) return False; check = _XimCheckIMMode(res, mode); if(check == XIM_CHECK_INVALID) return True; else if(check == XIM_CHECK_ERROR) return False; return _XimEncodeLocalIMAttr(res, top, arg->value); } char * _XimEncodeIMATTRIBUTE( Xim im, XIMResourceList res_list, unsigned int res_num, XIMArg *arg, XIMArg **arg_ret, char *buf, int size, int *ret_len, XPointer top, unsigned long mode) { register XIMArg *p; XIMResourceList res; int check; CARD16 *buf_s; int len; int min_len = sizeof(CARD16) /* sizeof attribute ID */ + sizeof(INT16); /* sizeof value length */ *ret_len = 0; for (p = arg; p->name; p++) { if (!(res = _XimGetResourceListRec(res_list, res_num, p->name))) { if (_XimSetInnerIMAttributes(im, top, p, mode)) continue; return p->name; } check = _XimCheckIMMode(res, mode); if (check == XIM_CHECK_INVALID) continue; else if (check == XIM_CHECK_ERROR) return p->name; if (!(_XimEncodeLocalIMAttr(res, top, p->value))) return p->name; buf_s = (CARD16 *)buf; if (!(_XimValueToAttribute(res, (XPointer)&buf_s[2], (size - min_len), p->value, &len, mode, (XPointer)NULL))) return p->name; if (len == 0) { continue; } else if (len < 0) { *arg_ret = p; return (char *)NULL; } buf_s[0] = res->id; /* attribute ID */ buf_s[1] = len; /* value length */ XIM_SET_PAD(&buf_s[2], len); /* pad */ len += min_len; buf += len; *ret_len += len; size -= len; } *arg_ret = (XIMArg *)NULL; return (char *)NULL; } #ifdef XIM_CONNECTABLE Bool _XimEncodeSavedIMATTRIBUTE( Xim im, XIMResourceList res_list, unsigned int res_num, int *idx, char *buf, int size, int *ret_len, XPointer top, unsigned long mode) { register int i; int num = im->private.proto.num_saved_imvalues; XrmQuark *quark_list = im->private.proto.saved_imvalues; XIMResourceList res; XPointer value; CARD16 *buf_s; int len; int min_len = sizeof(CARD16) /* sizeof attribute ID */ + sizeof(INT16); /* sizeof value length */ if (!im->private.proto.saved_imvalues) { *idx = -1; *ret_len = 0; return True; } *ret_len = 0; for (i = *idx; i < num; i++) { if (!(res = _XimGetResourceListRecByQuark(res_list, res_num, quark_list[i]))) continue; if (!_XimDecodeLocalIMAttr(res, top, value)) return False; buf_s = (CARD16 *)buf; if (!(_XimValueToAttribute(res, (XPointer)&buf_s[2], (size - min_len), value, &len, mode, (XPointer)NULL))) return False; if (len == 0) { continue; } else if (len < 0) { *idx = i; return True; } buf_s[0] = res->id; /* attribute ID */ buf_s[1] = len; /* value length */ XIM_SET_PAD(&buf_s[2], len); /* pad */ len += min_len; buf += len; *ret_len += len; size -= len; } *idx = -1; return True; } #endif /* XIM_CONNECTABLE */ static Bool _XimEncodeTopValue( Xic ic, XIMResourceList res, XIMArg *p) { if (res->xrm_name == XrmStringToQuark(XNClientWindow)) { ic->core.client_window = (Window)p->value; if (ic->core.focus_window == (Window)0) ic->core.focus_window = ic->core.client_window; _XimRegisterFilter(ic); } else if (res->xrm_name == XrmStringToQuark(XNFocusWindow)) { if (ic->core.client_window) { _XimUnregisterFilter(ic); ic->core.focus_window = (Window)p->value; _XimRegisterFilter(ic); } else /* client_window not yet */ ic->core.focus_window = (Window)p->value; } return True; } static Bool _XimEncodePreeditValue( Xic ic, XIMResourceList res, XIMArg *p) { if (res->xrm_name == XrmStringToQuark(XNStdColormap)) { XStandardColormap *colormap_ret; int count; if (!(XGetRGBColormaps(ic->core.im->core.display, ic->core.focus_window, &colormap_ret, &count, (Atom)p->value))) return False; XFree(colormap_ret); } else if (res->xrm_name == XrmStringToQuark(XNFontSet)) { int list_ret; XFontStruct **struct_list; char **name_list; char *tmp; int len; register int i; if (!p->value) return False; Xfree(ic->private.proto.preedit_font); list_ret = XFontsOfFontSet((XFontSet)p->value, &struct_list, &name_list); for (i = 0, len = 0; i < list_ret; i++) { len += (strlen(name_list[i]) + sizeof(char)); } if (!(tmp = Xmalloc(len + 1))) { ic->private.proto.preedit_font = NULL; return False; } tmp[0] = '\0'; for (i = 0; i < list_ret; i++) { strcat(tmp, name_list[i]); strcat(tmp, ","); } tmp[len - 1] = 0; ic->private.proto.preedit_font = tmp; ic->private.proto.preedit_font_length = len - 1; } return True; } static Bool _XimEncodeStatusValue( Xic ic, XIMResourceList res, XIMArg *p) { if (res->xrm_name == XrmStringToQuark(XNStdColormap)) { XStandardColormap *colormap_ret = NULL; int count; if (!(XGetRGBColormaps(ic->core.im->core.display, ic->core.focus_window, &colormap_ret, &count, (Atom)p->value))) return False; XFree(colormap_ret); } else if (res->xrm_name == XrmStringToQuark(XNFontSet)) { int list_ret; XFontStruct **struct_list; char **name_list; char *tmp; int len; register int i; if (!p->value) return False; Xfree(ic->private.proto.status_font); list_ret = XFontsOfFontSet((XFontSet)p->value, &struct_list, &name_list); for (i = 0, len = 0; i < list_ret; i++) { len += (strlen(name_list[i]) + sizeof(char)); } if (!(tmp = Xmalloc(len+1))) { ic->private.proto.status_font = NULL; return False; } tmp[0] = '\0'; for(i = 0; i < list_ret; i++) { strcat(tmp, name_list[i]); strcat(tmp, ","); } tmp[len - 1] = 0; ic->private.proto.status_font = tmp; ic->private.proto.status_font_length = len - 1; } return True; } static Bool _XimSetInnerICAttributes( Xic ic, XPointer top, XIMArg *arg, unsigned long mode) { XIMResourceList res; int check; if (!(res = _XimGetResourceListRec(ic->private.proto.ic_inner_resources, ic->private.proto.ic_num_inner_resources, arg->name))) return False; check = _XimCheckICMode(res, mode); if(check == XIM_CHECK_INVALID) return True; else if(check == XIM_CHECK_ERROR) return False; return _XimEncodeLocalICAttr(ic, res, top, arg, mode); } char * _XimEncodeICATTRIBUTE( Xic ic, XIMResourceList res_list, unsigned int res_num, XIMArg *arg, XIMArg **arg_ret, char *buf, int size, int *ret_len, XPointer top, BITMASK32 *flag, unsigned long mode) { register XIMArg *p; XIMResourceList res; int check; CARD16 *buf_s; int len; int min_len = sizeof(CARD16) /* sizeof attribute ID */ + sizeof(INT16); /* sizeof value length */ XrmQuark pre_quark; XrmQuark sts_quark; char *name; pre_quark = XrmStringToQuark(XNPreeditAttributes); sts_quark = XrmStringToQuark(XNStatusAttributes); *ret_len = 0; for (p = arg; p && p->name; p++) { buf_s = (CARD16 *)buf; if (!(res = _XimGetResourceListRec(res_list, res_num, p->name))) { if (_XimSetInnerICAttributes(ic, top, p, mode)) continue; return p->name; } check = _XimCheckICMode(res, mode); if (check == XIM_CHECK_INVALID) continue; else if (check == XIM_CHECK_ERROR) return p->name; if (mode & XIM_PREEDIT_ATTR) { if (!(_XimEncodePreeditValue(ic, res, p))) return p->name; } else if (mode & XIM_STATUS_ATTR) { if (!(_XimEncodeStatusValue(ic, res, p))) return p->name; } else { if (!(_XimEncodeTopValue(ic, res, p))) return p->name; } if (res->resource_size == XimType_NEST) { XimDefICValues *ic_attr = (XimDefICValues *)top; if (res->xrm_name == pre_quark) { XIMArg *arg_rt; if ((name = _XimEncodeICATTRIBUTE(ic, res_list, res_num, (XIMArg *)p->value, &arg_rt, (char *)&buf_s[2], (size - min_len), &len, (XPointer)&ic_attr->preedit_attr, flag, (mode | XIM_PREEDIT_ATTR)))) { return name; } } else if (res->xrm_name == sts_quark) { XIMArg *arg_rt; if ((name = _XimEncodeICATTRIBUTE(ic, res_list, res_num, (XIMArg *)p->value, &arg_rt, (char *)&buf_s[2], (size - min_len), &len, (XPointer)&ic_attr->status_attr, flag, (mode | XIM_STATUS_ATTR)))) { return name; } } } else { #ifdef EXT_MOVE if (flag) *flag |= _XimExtenArgCheck(p); #endif if (!(_XimEncodeLocalICAttr(ic, res, top, p, mode))) return p->name; if (!(_XimValueToAttribute(res, (XPointer)&buf_s[2], (size - min_len), p->value, &len, mode, (XPointer)ic))) return p->name; } if (len == 0) { continue; } else if (len < 0) { *arg_ret = p; return (char *)NULL; } buf_s[0] = res->id; /* attribute ID */ buf_s[1] = len; /* value length */ XIM_SET_PAD(&buf_s[2], len); /* pad */ len += min_len; buf += len; *ret_len += len; size -= len; } *arg_ret = (XIMArg *)NULL; return (char *)NULL; } #ifdef XIM_CONNECTABLE static Bool _XimEncodeSavedPreeditValue( Xic ic, XIMResourceList res, XPointer value) { int list_ret; XFontStruct **struct_list; char **name_list; char *tmp; int len; register int i; if (res->xrm_name == XrmStringToQuark(XNFontSet)) { if (!value) return False; if (ic->private.proto.preedit_font) Xfree(ic->private.proto.preedit_font); list_ret = XFontsOfFontSet((XFontSet)value, &struct_list, &name_list); for(i = 0, len = 0; i < list_ret; i++) { len += (strlen(name_list[i]) + sizeof(char)); } if(!(tmp = Xmalloc(len + 1))) { ic->private.proto.preedit_font = NULL; return False; } tmp[0] = '\0'; for(i = 0; i < list_ret; i++) { strcat(tmp, name_list[i]); strcat(tmp, ","); } tmp[len - 1] = 0; ic->private.proto.preedit_font = tmp; ic->private.proto.preedit_font_length = len - 1; } return True; } static Bool _XimEncodeSavedStatusValue( Xic ic, XIMResourceList res, XPointer value) { int list_ret; XFontStruct **struct_list; char **name_list; char *tmp; int len; register int i; if (res->xrm_name == XrmStringToQuark(XNFontSet)) { if (!value) return False; Xfree(ic->private.proto.status_font); list_ret = XFontsOfFontSet((XFontSet)value, &struct_list, &name_list); for(i = 0, len = 0; i < list_ret; i++) { len += (strlen(name_list[i]) + sizeof(char)); } if(!(tmp = Xmalloc(len + 1))) { ic->private.proto.status_font = NULL; return False; } tmp[0] = '\0'; for(i = 0; i < list_ret; i++) { strcat(tmp, name_list[i]); strcat(tmp, ","); } tmp[len - 1] = 0; ic->private.proto.status_font = tmp; ic->private.proto.status_font_length = len - 1; } return True; } Bool _XimEncodeSavedICATTRIBUTE( Xic ic, XIMResourceList res_list, unsigned int res_num, int *idx, char *buf, int size, int *ret_len, XPointer top, unsigned long mode) { int i; int num = ic->private.proto.num_saved_icvalues; XrmQuark *quark_list = ic->private.proto.saved_icvalues; XIMResourceList res; XPointer value; CARD16 *buf_s; int len; int min_len = sizeof(CARD16) /* sizeof attribute ID */ + sizeof(INT16); /* sizeof value length */ XrmQuark pre_quark; XrmQuark sts_quark; XrmQuark separator; if (!ic->private.proto.saved_icvalues) { *idx = -1; *ret_len = 0; return True; } pre_quark = XrmStringToQuark(XNPreeditAttributes); sts_quark = XrmStringToQuark(XNStatusAttributes); separator = XrmStringToQuark(XNSeparatorofNestedList); *ret_len = 0; for (i = *idx; i < num; i++) { if (quark_list[i] == separator) { *idx = i; return True; } if (!(res = _XimGetResourceListRecByQuark(res_list, res_num, quark_list[i]))) continue; if (!_XimDecodeLocalICAttr(res, top,(XPointer)&value, mode)) return False; if (mode & XIM_PREEDIT_ATTR) { if (!(_XimEncodeSavedPreeditValue(ic, res, value))) { return False; } } else if (mode & XIM_STATUS_ATTR) { if (!(_XimEncodeSavedStatusValue(ic, res, value))) { return False; } } buf_s = (CARD16 *)buf; if (res->resource_size == XimType_NEST) { XimDefICValues *ic_attr = (XimDefICValues *)top; i++; if (res->xrm_name == pre_quark) { if (!_XimEncodeSavedICATTRIBUTE(ic, res_list, res_num, &i, (char *)&buf_s[2], (size - min_len), &len, (XPointer)&ic_attr->preedit_attr, (mode | XIM_PREEDIT_ATTR))) { return False; } } else if (res->xrm_name == sts_quark) { if (!_XimEncodeSavedICATTRIBUTE(ic, res_list, res_num, &i, (char *)&buf_s[2], (size - min_len), &len, (XPointer)&ic_attr->status_attr, (mode | XIM_STATUS_ATTR))) { return False; } } } else { if (!(_XimValueToAttribute(res, (XPointer)&buf_s[2], (size - min_len), value, &len, mode, (XPointer)ic))) { return False; } } if (len == 0) { continue; } else if (len < 0) { if (quark_list[i] == separator) i++; *idx = i; return True; } buf_s[0] = res->id; /* attribute ID */ buf_s[1] = len; /* value length */ XIM_SET_PAD(&buf_s[2], len); /* pad */ len += min_len; buf += len; *ret_len += len; size -= len; } *idx = -1; return True; } #endif /* XIM_CONNECTABLE */ static unsigned int _XimCountNumberOfAttr( INT16 total, CARD16 *attr, int *names_len) { unsigned int n; INT16 len; INT16 min_len = sizeof(CARD16) /* sizeof attribute ID */ + sizeof(CARD16) /* sizeof type of value */ + sizeof(INT16); /* sizeof length of attribute */ n = 0; *names_len = 0; while (total > min_len) { len = attr[2]; *names_len += (len + 1); len += (min_len + XIM_PAD(len + 2)); total -= len; attr = (CARD16 *)((char *)attr + len); n++; } return n; } Bool _XimGetAttributeID( Xim im, CARD16 *buf) { unsigned int n; XIMResourceList res; char *names; int names_len; XPointer tmp; XIMValuesList *values_list; char **values; int values_len; register int i; INT16 len; INT16 min_len = sizeof(CARD16) /* sizeof attribute ID */ + sizeof(CARD16) /* sizeof type of value */ + sizeof(INT16); /* sizeof length of attr */ /* * IM attribute ID */ if (!(n = _XimCountNumberOfAttr(buf[0], &buf[1], &names_len))) return False; if (!(res = Xcalloc(n, sizeof(XIMResource)))) return False; values_len = sizeof(XIMValuesList) + (sizeof(char **) * n) + names_len; if (!(tmp = Xcalloc(1, values_len))) { Xfree(res); return False; } values_list = (XIMValuesList *)tmp; values = (char **)((char *)tmp + sizeof(XIMValuesList)); names = (char *)((char *)values + (sizeof(char **) * n)); values_list->count_values = n; values_list->supported_values = values; buf++; for (i = 0; i < n; i++) { len = buf[2]; (void)memcpy(names, (char *)&buf[3], len); values[i] = names; names[len] = '\0'; res[i].resource_name = names; res[i].resource_size = buf[1]; res[i].id = buf[0]; names += (len + 1); len += (min_len + XIM_PAD(len + 2)); buf = (CARD16 *)((char *)buf + len); } _XIMCompileResourceList(res, n); Xfree(im->core.im_resources); Xfree(im->core.im_values_list); im->core.im_resources = res; im->core.im_num_resources = n; im->core.im_values_list = values_list; /* * IC attribute ID */ if (!(n = _XimCountNumberOfAttr(buf[0], &buf[2], &names_len))) return False; if (!(res = Xcalloc(n, sizeof(XIMResource)))) return False; values_len = sizeof(XIMValuesList) + (sizeof(char **) * n) + names_len; if (!(tmp = Xcalloc(1, values_len))) { Xfree(res); return False; } values_list = (XIMValuesList *)tmp; values = (char **)((char *)tmp + sizeof(XIMValuesList)); names = (char *)((char *)values + (sizeof(char **) * n)); values_list->count_values = n; values_list->supported_values = values; buf += 2; for (i = 0; i < n; i++) { len = buf[2]; (void)memcpy(names, (char *)&buf[3], len); values[i] = names; names[len] = '\0'; res[i].resource_name = names; res[i].resource_size = buf[1]; res[i].id = buf[0]; names += (len + 1); len += (min_len + XIM_PAD(len + 2)); buf = (CARD16 *)((char *)buf + len); } _XIMCompileResourceList(res, n); Xfree(im->core.ic_resources); Xfree(im->core.ic_values_list); im->core.ic_resources = res; im->core.ic_num_resources = n; im->core.ic_values_list = values_list; return True; } BITMASK32 *flag, unsigned long mode) { register XIMArg *p; XIMResourceList res; int check; CARD16 *buf_s; int len; int min_len = sizeof(CARD16) /* sizeof attribute ID */ + sizeof(INT16); /* sizeof value length */ XrmQuark pre_quark; XrmQuark sts_quark; char *name; plibX11-1.6.3/modules/im/ximcp/imTransR.c000064401431060000012000000177071247741723500201720ustar00alancstaff00002660200006/* * Copyright 1992 Oracle and/or its affiliates. All rights reserved. * * 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: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. */ /****************************************************************** Copyright 1992, 1993, 1994 by FUJITSU LIMITED Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of FUJITSU LIMITED not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Hideki Hiura (hhiura@Sun.COM) Sun Microsystems, Inc. Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xlcint.h" #include "XimTrInt.h" #include "Ximint.h" TransportSW _XimTransportRec[] = { { "X", _XimXConf }, /* 1st entry must be X. This will be a fallback */ #ifdef TCPCONN { "tcp", _XimTransConf }, /* use X transport lib */ #endif /* TCPCONN */ #if defined(UNIXCONN) || defined(LOCALCONN) { "local", _XimTransConf }, /* use X transport lib */ #endif /* UNIXCONN */ { (char *)NULL, (Bool (*)(Xim, char *))NULL }, }; Bool _XimConnect(Xim im) { return im->private.proto.connect(im); } Bool _XimShutdown(Xim im) { return im->private.proto.shutdown(im); } Bool _XimWrite(Xim im, INT16 len, XPointer data) { return im->private.proto.write(im, len, data); } static int _CheckProtocolData( Xim im, char *recv_buf) { int data_len; data_len = (int)(((*((CARD16 *)recv_buf + 1)) * 4) + XIM_HEADER_SIZE); return data_len; } static int _XimReadData( Xim im, INT16 *len, XPointer buf, int buf_size) { char *hold_buf; char *tmp; int data_len; int packet_size; int ret_len; register int i; if (buf_size < XIM_HEADER_SIZE) { *len = (INT16)XIM_HEADER_SIZE; return XIM_OVERFLOW; } bzero(buf, buf_size); packet_size = 0; data_len = 0; if ((hold_buf = im->private.proto.hold_data)) { data_len = im->private.proto.hold_data_len; if (data_len >= XIM_HEADER_SIZE) { packet_size = _CheckProtocolData(im, hold_buf); if (packet_size > buf_size) { *len = (INT16)packet_size; return XIM_OVERFLOW; } if (packet_size <= data_len) { memcpy(buf, hold_buf, packet_size); for (i = packet_size; i < data_len; i++) { if (hold_buf[i]) break; } data_len -= i; if (data_len) { if (!(tmp = Xmalloc(data_len))) { return XIM_FALSE; } memcpy(tmp, &hold_buf[i], data_len); im->private.proto.hold_data = tmp; im->private.proto.hold_data_len = data_len; } else { im->private.proto.hold_data = 0; im->private.proto.hold_data_len = 0; } Xfree(hold_buf); *len = (INT16)packet_size; return XIM_TRUE; } } memcpy(buf, hold_buf, data_len); buf_size -= data_len; Xfree(hold_buf); im->private.proto.hold_data = 0; im->private.proto.hold_data_len = 0; } if (!packet_size) { while (data_len < XIM_HEADER_SIZE) { if (!(im->private.proto.read(im, (XPointer)&buf[data_len], buf_size, &ret_len))) { return XIM_FALSE; } data_len += ret_len; buf_size -= ret_len; } packet_size = _CheckProtocolData(im, buf); } if (packet_size > buf_size) { if (!(tmp = Xmalloc(data_len))) { return XIM_FALSE; } memcpy(tmp, buf, data_len); bzero(buf, data_len); im->private.proto.hold_data = tmp; im->private.proto.hold_data_len = data_len; *len = (INT16)packet_size; return XIM_OVERFLOW; } while (data_len < packet_size) { if (!(im->private.proto.read(im, (XPointer)&buf[data_len], buf_size, &ret_len))) { return XIM_FALSE; } data_len += ret_len; buf_size -= ret_len; } for (i = packet_size; i < data_len; i++) { if (buf[i]) break; } data_len -= i; if (data_len) { if (!(tmp = Xmalloc(data_len))) { return XIM_FALSE; } memcpy(tmp, &buf[i], data_len); bzero(&buf[i], data_len); im->private.proto.hold_data = tmp; im->private.proto.hold_data_len = data_len; } else { im->private.proto.hold_data = 0; im->private.proto.hold_data_len = 0; } *len = (INT16)packet_size; return XIM_TRUE; } static Bool _XimCallDispatcher( Xim im, INT16 len, XPointer data) { return im->private.proto.call_dispatcher(im, len, data); } int _XimRead(Xim im, INT16 *len, XPointer buf, int buf_size, Bool (*predicate)(Xim, INT16, XPointer, XPointer), XPointer arg) { INT16 read_len; int ret_code; for (;;) { ret_code = _XimReadData(im, &read_len, buf, buf_size); if(ret_code != XIM_TRUE) { return ret_code; } if ((*predicate)(im, read_len, buf, arg)) break; if (_XimCallDispatcher(im, read_len, buf)) continue; _XimError(im, 0, XIM_BadProtocol, (INT16)0, (CARD16)0, (char *)NULL); } *len = read_len; return True; } Bool _XimRegisterDispatcher( Xim im, Bool (*callback)( Xim, INT16, XPointer, XPointer ), XPointer call_data) { return im->private.proto.register_dispatcher(im, callback, call_data); } void _XimFlush(Xim im) { im->private.proto.flush(im); return; } Bool _XimFilterWaitEvent(Xim im) { INT16 read_len; CARD32 reply32[BUFSIZE/4]; char *reply = (char *)reply32; XPointer preply; int buf_size; int ret_code; buf_size = BUFSIZE; ret_code = _XimReadData(im, &read_len, (XPointer)reply, buf_size); if(ret_code == XIM_TRUE) { preply = reply; } else if(ret_code == XIM_OVERFLOW) { if(read_len <= 0) { preply = reply; } else { buf_size = (int)read_len; preply = Xmalloc(buf_size); ret_code = _XimReadData(im, &read_len, preply, buf_size); if(ret_code != XIM_TRUE) { if (preply != reply) Xfree(preply); return False; } } } else { return False; } if (_XimCallDispatcher(im, read_len, preply)) { if(reply != preply) Xfree(preply); return True; } _XimError(im, 0, XIM_BadProtocol, (INT16)0, (CARD16)0, (char *)NULL); if(reply != preply) Xfree(preply); return True; } libX11-1.6.3/modules/im/ximcp/imInsClbk.c000064401431060000012000000165371247741723500203060ustar00alancstaff00002660200006/****************************************************************** Copyright 1993, 1994 by Sony Corporation Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Sony Corporation not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. Sony Corporation makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. SONY CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Makoto Wakamatsu Sony Corporation makoto@sm.sony.co.jp ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #include "Xlibint.h" #include "Xlcint.h" #include "XlcPublic.h" #include "Ximint.h" typedef struct _XimInstCallback { Bool call; Bool destroy; Display *display; XLCd lcd; char name[XIM_MAXLCNAMELEN]; char *modifiers; XrmDatabase rdb; char *res_name; char *res_class; XIDProc callback; XPointer client_data; struct _XimInstCallback *next; } XimInstCallbackRec, *XimInstCallback; static XimInstCallback callback_list = NULL; static Bool lock = False; static void MakeLocale( XLCd lcd, char locale[] ) { char *language, *territory, *codeset; _XGetLCValues( lcd, XlcNLanguage, &language, XlcNTerritory, &territory, XlcNCodeset, &codeset, NULL ); strcpy( locale, language ); if( territory && *territory ) { strcat( locale, "_" ); strcat( locale, territory ); } if( codeset && *codeset ) { strcat( locale, "." ); strcat( locale, codeset ); } } static Bool _XimFilterPropertyNotify( Display *display, Window window, XEvent *event, XPointer client_data) { Atom ims, actual_type, *atoms; int actual_format; unsigned long nitems, bytes_after; int ii; XIM xim; Bool flag = False; XimInstCallback icb, picb, tmp; if( (ims = XInternAtom( display, XIM_SERVERS, True )) == None || event->xproperty.atom != ims || event->xproperty.state == PropertyDelete ) return( False ); if( XGetWindowProperty( display, RootWindow(display, 0), ims, 0L, 1000000L, False, XA_ATOM, &actual_type, &actual_format, &nitems, &bytes_after, (unsigned char **)&atoms ) != Success ) { return( False ); } if( actual_type != XA_ATOM || actual_format != 32 ) { XFree( atoms ); return( False ); } lock = True; for( ii = 0; ii < nitems; ii++, atoms ) { if(XGetSelectionOwner (display, atoms[ii])) { for( icb = callback_list; icb; icb = icb->next ) { if( !icb->call && !icb->destroy ) { xim = (*icb->lcd->methods->open_im)( icb->lcd, display, icb->rdb, icb->res_name, icb->res_class ); if( xim ) { xim->methods->close( (XIM)xim ); flag = True; icb->call = True; icb->callback( icb->display, icb->client_data, NULL ); } } } break; } } XFree( atoms ); for( icb = callback_list, picb = NULL; icb; ) { if( icb->destroy ) { if( picb ) picb->next = icb->next; else callback_list = icb->next; tmp = icb; icb = icb->next; XFree( tmp ); } else { picb = icb; icb = icb->next; } } lock = False; return( flag ); } Bool _XimRegisterIMInstantiateCallback( XLCd lcd, Display *display, XrmDatabase rdb, char *res_name, char *res_class, XIDProc callback, XPointer client_data) { XimInstCallback icb, tmp; XIM xim; Window root; XWindowAttributes attr; if( lock ) return( False ); icb = Xmalloc(sizeof(XimInstCallbackRec)); if( !icb ) return( False ); icb->call = icb->destroy = False; icb->display = display; icb->lcd = lcd; MakeLocale( lcd, icb->name ); icb->modifiers = lcd->core->modifiers; /* XXXXX */ icb->rdb = rdb; icb->res_name = res_name; icb->res_class = res_class; icb->callback = callback; icb->client_data = client_data; icb->next = NULL; if( !callback_list ) callback_list = icb; else { for( tmp = callback_list; tmp->next; tmp = tmp->next ); tmp->next = icb; } xim = (*lcd->methods->open_im)( lcd, display, rdb, res_name, res_class ); if( icb == callback_list ) { root = RootWindow( display, 0 ); XGetWindowAttributes( display, root, &attr ); _XRegisterFilterByType( display, root, PropertyNotify, PropertyNotify, _XimFilterPropertyNotify, (XPointer)NULL ); XSelectInput( display, root, attr.your_event_mask | PropertyChangeMask ); } if( xim ) { lock = True; xim->methods->close( (XIM)xim ); lock = False; icb->call = True; callback( display, client_data, NULL ); } return( True ); } Bool _XimUnRegisterIMInstantiateCallback( XLCd lcd, Display *display, XrmDatabase rdb, char *res_name, char *res_class, XIDProc callback, XPointer client_data) { char locale[XIM_MAXLCNAMELEN]; XimInstCallback icb, picb; if( !callback_list ) return( False ); MakeLocale( lcd, locale ); for( icb = callback_list, picb = NULL; icb; picb = icb, icb = icb->next ) { if( !strcmp( locale, icb->name ) && (lcd->core->modifiers == icb->modifiers || /* XXXXX */ (lcd->core->modifiers && icb->modifiers && !strcmp( lcd->core->modifiers, icb->modifiers ))) && rdb == icb->rdb && /* XXXXX */ ((res_name == NULL && icb->res_name == NULL) || (res_name != NULL && icb->res_name != NULL && !strcmp( res_name, icb->res_name ))) && ((res_class == NULL && icb->res_class == NULL) || (res_class != NULL && icb->res_class != NULL && !strcmp( res_class, icb->res_class ))) && (callback == icb->callback) && (client_data == icb->client_data) && /* XXXXX */ !icb->destroy ) { if( lock ) icb->destroy = True; else { if( !picb ) { callback_list = icb->next; _XUnregisterFilter( display, RootWindow(display, 0), _XimFilterPropertyNotify, (XPointer)NULL ); } else picb->next = icb->next; _XCloseLC( icb->lcd ); XFree( icb ); } return( True ); } } return( False ); } void _XimResetIMInstantiateCallback(Xim xim) { char locale[XIM_MAXLCNAMELEN]; XimInstCallback icb; XLCd lcd = xim->core.lcd; if( !callback_list && lock ) return; MakeLocale( lcd, locale ); for( icb = callback_list; icb; icb = icb->next ) if( !strcmp( locale, icb->name ) && (lcd->core->modifiers == icb->modifiers || (lcd->core->modifiers && icb->modifiers && !strcmp( lcd->core->modifiers, icb->modifiers ))) ) icb->call = False; } libX11-1.6.3/modules/im/ximcp/imInt.c000064401431060000012000000142621247741723500175040ustar00alancstaff00002660200006/****************************************************************** Copyright 1992, 1993, 1994 by FUJITSU LIMITED Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of FUJITSU LIMITED not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include "Xlibint.h" #include "Xlcint.h" #include "Ximint.h" #include "XimImSw.h" static Xim *_XimCurrentIMlist = (Xim *)NULL; static int _XimCurrentIMcount = 0; static Bool _XimSetIMStructureList( Xim im) { register int i; Xim *xim; if(!(_XimCurrentIMlist)) { if(!(_XimCurrentIMlist = Xmalloc(sizeof(Xim)))) return False; _XimCurrentIMlist[0] = im; _XimCurrentIMcount = 1; } else { for(i = 0; i < _XimCurrentIMcount; i++) { if(!( _XimCurrentIMlist[i])) { _XimCurrentIMlist[i] = im; break; } } if(i >= _XimCurrentIMcount) { if(!(xim = Xrealloc(_XimCurrentIMlist, ((i + 1) * sizeof(Xim))))) return False; _XimCurrentIMlist = xim; _XimCurrentIMlist[_XimCurrentIMcount] = im; _XimCurrentIMcount++; } } return True; } void _XimDestroyIMStructureList(Xim im) { register int i; for(i = 0; i < _XimCurrentIMcount; i++) { if(_XimCurrentIMlist[i] == im) { _XimCurrentIMlist[i] = NULL; break; } } return; } void _XimServerDestroy(Xim im_2_destroy) { register int i; Xim im; XIC ic; for(i = 0; i < _XimCurrentIMcount; i++) { if(!(im = _XimCurrentIMlist[i])) continue; /* * Only continue if this im is the one to be destroyed. */ if (im != im_2_destroy) continue; if (im->core.destroy_callback.callback) (*im->core.destroy_callback.callback)((XIM)im, im->core.destroy_callback.client_data, NULL); for (ic = im->core.ic_chain; ic; ic = ic->core.next) { if (ic->core.destroy_callback.callback) { (*ic->core.destroy_callback.callback)(ic, ic->core.destroy_callback.client_data, NULL); } } _XimResetIMInstantiateCallback( im ); (void)im->methods->close((XIM)im); Xfree(im); _XimCurrentIMlist[i] = NULL; return; } } #ifdef XIM_CONNECTABLE void _XimServerReconectableDestroy(void) { register int i; Xim im; XIC ic; for(i = 0; i < _XimCurrentIMcount; i++) { if(!(im = _XimCurrentIMlist[i])) continue; if (im->core.destroy_callback.callback) (*im->core.destroy_callback.callback)(im, im->core.destroy_callback.client_data, NULL); for (ic = im->core.ic_chain; ic; ic = ic->core.next) { if (ic->core.destroy_callback.callback) { (*ic->core.destroy_callback.callback)(ic, ic->core.destroy_callback.client_data, NULL); } } _XimResetIMInstantiateCallback( im ); (void)im->methods->close((XIM)im); } return; } #endif /* XIM_CONNECTABLE */ static const char * _XimStrstr( register const char *src, register const char *dest) { int len; len = strlen(dest); while((src = strchr(src, *dest))) { if(!strncmp(src, dest, len)) return src; src++; } return NULL; } static char * _XimMakeImName( XLCd lcd) { const char* begin = NULL; const char* end = NULL; char* ret = NULL; const char* ximmodifier = XIMMODIFIER; if(lcd->core->modifiers != NULL && *lcd->core->modifiers != '\0') { begin = _XimStrstr(lcd->core->modifiers, ximmodifier); if (begin != NULL) { end = begin += strlen(ximmodifier); while (*end && *end != '@') end++; } } ret = Xmalloc(end - begin + 1); if (ret != NULL) { if (begin != NULL && end != NULL) { (void)strncpy(ret, begin, end - begin); ret[end - begin] = '\0'; } else { ret[0] = '\0'; } } return ret; } XIM _XimOpenIM( XLCd lcd, Display *dpy, XrmDatabase rdb, char *res_name, char *res_class) { Xim im; register int i; if (!(im = Xcalloc(1, sizeof(XimRec)))) return (XIM)NULL; im->core.lcd = lcd; im->core.ic_chain = (XIC)NULL; im->core.display = dpy; im->core.rdb = rdb; im->core.res_name = NULL; im->core.res_class = NULL; if((res_name != NULL) && (*res_name != '\0')){ if(!(im->core.res_name = strdup(res_name))) goto Error1; } if((res_class != NULL) && (*res_class != '\0')){ if(!(im->core.res_class = strdup(res_class))) goto Error2; } if(!(im->core.im_name = _XimMakeImName(lcd))) goto Error3; for(i= 0; ; i++) { if(_XimImSportRec[i].checkprocessing(im)) { if(!(_XimImSportRec[i].im_open(im))) goto Error4; if(!_XimSetIMStructureList(im)) goto Error4; return (XIM)im; } } Error4 : _XimImSportRec[i].im_free(im); Xfree(im); return NULL; Error3 : Xfree(im->core.im_name); Error2: Xfree(im->core.res_class); Error1: Xfree(im->core.res_name); Xfree(im); return NULL; } Bool _XInitIM(XLCd lcd) { if(lcd == (XLCd)NULL) return False; lcd->methods->open_im = _XimOpenIM; lcd->methods->register_callback = _XimRegisterIMInstantiateCallback; lcd->methods->unregister_callback = _XimUnRegisterIMInstantiateCallback; return True; } { register int i; Xim *xim; if(!(_XimCurrentIMlist)) { if(!(_XimCurrentIMlist = Xmalloc(sizeof(Xim)))) return False; _XimCurrentIMlist[0] = im; _XimCurrentIMcount = 1; } else { for(i = 0; i < _XimCurrentIMcount; i++) { if(!( _XimCurrentIMlist[i])) { _XimCurrentIMlist[i] = im; break; libX11-1.6.3/modules/im/ximcp/imThaiFlt.c000064401431060000012000001276211247741723500203110ustar00alancstaff00002660200006/*********************************************************** Copyright 1993, 1998 The Open Group Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", 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 OPEN GROUP 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. 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 The Open Group. Copyright 1993 by Digital Equipment Corporation, Maynard, Massachusetts. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ******************************************************************/ /* **++ ** FACILITY: ** ** Xlib ** ** ABSTRACT: ** ** Thai specific functions. ** Handles character classifications, composibility checking, ** Input sequence check and other Thai specific requirements ** according to WTT specification and DEC extensions. ** ** MODIFICATION HISTORY: ** **/ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include #include "Xlibint.h" #include "Xlcint.h" #include "Ximint.h" #include "XimThai.h" #include "XlcPubI.h" #define SPACE 32 /* character classification table */ #define TACTIS_CHARS 256 static char const tactis_chtype[TACTIS_CHARS] = { CTRL, CTRL, CTRL, CTRL, CTRL, CTRL, CTRL, CTRL, /* 0 - 7 */ CTRL, CTRL, CTRL, CTRL, CTRL, CTRL, CTRL, CTRL, /* 8 - 15 */ CTRL, CTRL, CTRL, CTRL, CTRL, CTRL, CTRL, CTRL, /* 16 - 23 */ CTRL, CTRL, CTRL, CTRL, CTRL, CTRL, CTRL, CTRL, /* 24 - 31 */ NON, NON, NON, NON, NON, NON, NON, NON, /* 32 - 39 */ NON, NON, NON, NON, NON, NON, NON, NON, /* 40 - 47 */ NON, NON, NON, NON, NON, NON, NON, NON, /* 48 - 55 */ NON, NON, NON, NON, NON, NON, NON, NON, /* 56 - 63 */ NON, NON, NON, NON, NON, NON, NON, NON, /* 64 - 71 */ NON, NON, NON, NON, NON, NON, NON, NON, /* 72 - 79 */ NON, NON, NON, NON, NON, NON, NON, NON, /* 80 - 87 */ NON, NON, NON, NON, NON, NON, NON, NON, /* 88 - 95 */ NON, NON, NON, NON, NON, NON, NON, NON, /* 96 - 103 */ NON, NON, NON, NON, NON, NON, NON, NON, /* 104 - 111 */ NON, NON, NON, NON, NON, NON, NON, NON, /* 112 - 119 */ NON, NON, NON, NON, NON, NON, NON, CTRL, /* 120 - 127 */ CTRL, CTRL, CTRL, CTRL, CTRL, CTRL, CTRL, CTRL, /* 128 - 135 */ CTRL, CTRL, CTRL, CTRL, CTRL, CTRL, CTRL, CTRL, /* 136 - 143 */ CTRL, CTRL, CTRL, CTRL, CTRL, CTRL, CTRL, CTRL, /* 144 - 151 */ CTRL, CTRL, CTRL, CTRL, CTRL, CTRL, CTRL, CTRL, /* 152 - 159 */ NON, CONS, CONS, CONS, CONS, CONS, CONS, CONS, /* 160 - 167 */ CONS, CONS, CONS, CONS, CONS, CONS, CONS, CONS, /* 168 - 175 */ CONS, CONS, CONS, CONS, CONS, CONS, CONS, CONS, /* 176 - 183 */ CONS, CONS, CONS, CONS, CONS, CONS, CONS, CONS, /* 184 - 191 */ CONS, CONS, CONS, CONS, FV3, CONS, FV3, CONS, /* 192 - 199 */ CONS, CONS, CONS, CONS, CONS, CONS, CONS, NON, /* 200 - 207 */ FV1, AV2, FV1, FV1, AV1, AV3, AV2, AV3, /* 208 - 215 */ BV1, BV2, BD, NON, NON, NON, NON, NON, /* 216 - 223 */ LV, LV, LV, LV, LV, FV2, NON, AD2, /* 224 - 231 */ TONE, TONE, TONE, TONE, AD1, AD1, AD3, NON, /* 232 - 239 */ NON, NON, NON, NON, NON, NON, NON, NON, /* 240 - 247 */ NON, NON, NON, NON, NON, NON, NON, CTRL /* 248 - 255 */ }; /* Composibility checking tables */ #define NC 0 /* NOT COMPOSIBLE - following char displays in next cell */ #define CP 1 /* COMPOSIBLE - following char is displayed in the same cell as leading char, also implies ACCEPT */ #define XC 3 /* Non-display */ #define AC 4 /* ACCEPT - display the following char in the next cell */ #define RJ 5 /* REJECT - discard that following char, ignore it */ #define CH_CLASSES 17 /* 17 classes of chars */ static char const write_rules_lookup[CH_CLASSES][CH_CLASSES] = { /* Table 0: writing/outputing rules */ /* row: leading char, column: following char */ /* CTRL NON CONS LV FV1 FV2 FV3 BV1 BV2 BD TONE AD1 AD2 AD3 AV1 AV2 AV3 */ {XC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC}/*CTRL*/ ,{XC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC}/*NON*/ ,{XC, NC, NC, NC, NC, NC, NC, CP, CP, CP, CP, CP, CP, CP, CP, CP, CP}/*CONS*/ ,{XC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC}/*LV*/ ,{XC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC}/*FV1*/ ,{XC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC}/*FV2*/ ,{XC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC}/*FV3*/ ,{XC, NC, NC, NC, NC, NC, NC, NC, NC, NC, CP, CP, NC, NC, NC, NC, NC}/*BV1*/ ,{XC, NC, NC, NC, NC, NC, NC, NC, NC, NC, CP, NC, NC, NC, NC, NC, NC}/*BV2*/ ,{XC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC}/*BD*/ ,{XC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC}/*TONE*/ ,{XC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC}/*AD1*/ ,{XC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC}/*AD2*/ ,{XC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC, NC}/*AD3*/ ,{XC, NC, NC, NC, NC, NC, NC, NC, NC, NC, CP, CP, NC, NC, NC, NC, NC}/*AV1*/ ,{XC, NC, NC, NC, NC, NC, NC, NC, NC, NC, CP, NC, NC, NC, NC, NC, NC}/*AV2*/ ,{XC, NC, NC, NC, NC, NC, NC, NC, NC, NC, CP, NC, CP, NC, NC, NC, NC}/*AV3*/ }; static char const wtt_isc1_lookup[CH_CLASSES][CH_CLASSES] = { /* Table 1: WTT default input sequence check rules */ /* row: leading char, column: following char */ /* CTRL NON CONS LV FV1 FV2 FV3 BV1 BV2 BD TONE AD1 AD2 AD3 AV1 AV2 AV3 */ {XC, AC, AC, AC, AC, AC, AC, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ}/*CTRL*/ ,{XC, AC, AC, AC, AC, AC, AC, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ}/*NON*/ ,{XC, AC, AC, AC, AC, AC, AC, CP, CP, CP, CP, CP, CP, CP, CP, CP, CP}/*CONS*/ ,{XC, AC, AC, AC, AC, AC, AC, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ}/*LV*/ ,{XC, AC, AC, AC, AC, AC, AC, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ}/*FV1*/ ,{XC, AC, AC, AC, AC, AC, AC, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ}/*FV2*/ ,{XC, AC, AC, AC, AC, AC, AC, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ}/*FV3*/ ,{XC, AC, AC, AC, AC, AC, AC, RJ, RJ, RJ, CP, CP, RJ, RJ, RJ, RJ, RJ}/*BV1*/ ,{XC, AC, AC, AC, AC, AC, AC, RJ, RJ, RJ, CP, RJ, RJ, RJ, RJ, RJ, RJ}/*BV2*/ ,{XC, AC, AC, AC, AC, AC, AC, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ}/*BD*/ ,{XC, AC, AC, AC, AC, AC, AC, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ}/*TONE*/ ,{XC, AC, AC, AC, AC, AC, AC, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ}/*AD1*/ ,{XC, AC, AC, AC, AC, AC, AC, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ}/*AD2*/ ,{XC, AC, AC, AC, AC, AC, AC, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ}/*AD3*/ ,{XC, AC, AC, AC, AC, AC, AC, RJ, RJ, RJ, CP, CP, RJ, RJ, RJ, RJ, RJ}/*AV1*/ ,{XC, AC, AC, AC, AC, AC, AC, RJ, RJ, RJ, CP, RJ, RJ, RJ, RJ, RJ, RJ}/*AV2*/ ,{XC, AC, AC, AC, AC, AC, AC, RJ, RJ, RJ, CP, RJ, CP, RJ, RJ, RJ, RJ}/*AV3*/ }; static char const wtt_isc2_lookup[CH_CLASSES][CH_CLASSES] = { /* Table 2: WTT strict input sequence check rules */ /* row: leading char, column: following char */ /* CTRL NON CONS LV FV1 FV2 FV3 BV1 BV2 BD TONE AD1 AD2 AD3 AV1 AV2 AV3 */ {XC, AC, AC, AC, AC, AC, AC, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ}/*CTRL*/ ,{XC, AC, AC, AC, RJ, RJ, AC, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ}/*NON*/ ,{XC, AC, AC, AC, AC, RJ, AC, CP, CP, CP, CP, CP, CP, CP, CP, CP, CP}/*CONS*/ ,{XC, RJ, AC, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ}/*LV*/ ,{XC, AC, AC, AC, AC, RJ, AC, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ}/*FV1*/ ,{XC, AC, AC, AC, AC, RJ, AC, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ}/*FV2*/ ,{XC, AC, AC, AC, RJ, AC, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ}/*FV3*/ ,{XC, AC, AC, AC, AC, RJ, AC, RJ, RJ, RJ, CP, CP, RJ, RJ, RJ, RJ, RJ}/*BV1*/ ,{XC, AC, AC, AC, RJ, RJ, AC, RJ, RJ, RJ, CP, RJ, RJ, RJ, RJ, RJ, RJ}/*BV2*/ ,{XC, AC, AC, AC, RJ, RJ, AC, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ}/*BD*/ ,{XC, AC, AC, AC, AC, AC, AC, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ}/*TONE*/ ,{XC, AC, AC, AC, RJ, RJ, AC, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ}/*AD1*/ ,{XC, AC, AC, AC, RJ, RJ, AC, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ}/*AD2*/ ,{XC, AC, AC, AC, RJ, RJ, AC, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ}/*AD3*/ ,{XC, AC, AC, AC, RJ, RJ, AC, RJ, RJ, RJ, CP, CP, RJ, RJ, RJ, RJ, RJ}/*AV1*/ ,{XC, AC, AC, AC, RJ, RJ, AC, RJ, RJ, RJ, CP, RJ, RJ, RJ, RJ, RJ, RJ}/*AV2*/ ,{XC, AC, AC, AC, RJ, RJ, AC, RJ, RJ, RJ, CP, RJ, CP, RJ, RJ, RJ, RJ}/*AV3*/ }; static char const thaicat_isc_lookup[CH_CLASSES][CH_CLASSES] = { /* Table 3: Thaicat input sequence check rules */ /* row: leading char, column: following char */ /* CTRL NON CONS LV FV1 FV2 FV3 BV1 BV2 BD TONE AD1 AD2 AD3 AV1 AV2 AV3 */ {XC, AC, AC, AC, AC, AC, AC, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ}/*CTRL*/ ,{XC, AC, AC, AC, AC, AC, AC, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ}/*NON*/ ,{XC, AC, AC, AC, AC, AC, AC, CP, CP, CP, CP, CP, CP, CP, CP, CP, CP}/*CONS*/ ,{XC, AC, AC, AC, AC, AC, AC, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ}/*LV*/ ,{XC, AC, AC, AC, AC, AC, AC, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ}/*FV1*/ ,{XC, AC, AC, AC, AC, AC, AC, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ}/*FV2*/ ,{XC, AC, AC, AC, AC, AC, AC, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ} /*FV3*/ ,{XC, AC, AC, AC, AC, AC, AC, RJ, RJ, RJ, CP, CP, RJ, RJ, RJ, RJ, RJ}/*BV1*/ ,{XC, AC, AC, AC, AC, AC, AC, RJ, RJ, RJ, CP, RJ, RJ, RJ, RJ, RJ, RJ}/*BV2*/ ,{XC, AC, AC, AC, AC, AC, AC, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ}/*BD*/ ,{XC, AC, AC, AC, AC, AC, AC, CP, CP, RJ, RJ, RJ, RJ, RJ, CP, CP, CP}/*TONE*/ ,{XC, AC, AC, AC, AC, AC, AC, CP, RJ, RJ, RJ, RJ, RJ, RJ, CP, RJ, RJ}/*AD1*/ ,{XC, AC, AC, AC, AC, AC, AC, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, CP}/*AD2*/ ,{XC, AC, AC, AC, AC, AC, AC, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ, RJ}/*AD3*/ ,{XC, AC, AC, AC, AC, AC, AC, RJ, RJ, RJ, CP, CP, RJ, RJ, RJ, RJ, RJ}/*AV1*/ ,{XC, AC, AC, AC, AC, AC, AC, RJ, RJ, RJ, CP, RJ, RJ, RJ, RJ, RJ, RJ}/*AV2*/ ,{XC, AC, AC, AC, AC, AC, AC, RJ, RJ, RJ, CP, RJ, CP, RJ, RJ, RJ, RJ}/*AV3*/ }; /* returns classification of a char */ static int THAI_chtype (unsigned char ch) { return tactis_chtype[ch]; } #ifdef UNUSED /* returns the display level */ static int THAI_chlevel (unsigned char ch) { int chlevel; switch (tactis_chtype[ch]) { case CTRL: chlevel = NON; break; case BV1: case BV2: case BD: chlevel = BELOW; break; case TONE: case AD1: case AD2: chlevel = TOP; break; case AV1: case AV2: case AV3: case AD3: chlevel = ABOVE; break; case NON: case CONS: case LV: case FV1: case FV2: case FV3: default: /* if tactis_chtype is invalid */ chlevel = BASE; break; } return chlevel; } /* return True if char is non-spacing */ static Bool THAI_isdead (unsigned char ch) { return ((tactis_chtype[ch] == CTRL) || (tactis_chtype[ch] == BV1) || (tactis_chtype[ch] == BV2) || (tactis_chtype[ch] == BD) || (tactis_chtype[ch] == TONE) || (tactis_chtype[ch] == AD1) || (tactis_chtype[ch] == AD2) || (tactis_chtype[ch] == AD3) || (tactis_chtype[ch] == AV1) || (tactis_chtype[ch] == AV2) || (tactis_chtype[ch] == AV3)); } /* return True if char is consonant */ static Bool THAI_iscons (unsigned char ch) { return (tactis_chtype[ch] == CONS); } /* return True if char is vowel */ static Bool THAI_isvowel (unsigned char ch) { return ((tactis_chtype[ch] == LV) || (tactis_chtype[ch] == FV1) || (tactis_chtype[ch] == FV2) || (tactis_chtype[ch] == FV3) || (tactis_chtype[ch] == BV1) || (tactis_chtype[ch] == BV2) || (tactis_chtype[ch] == AV1) || (tactis_chtype[ch] == AV2) || (tactis_chtype[ch] == AV3)); } /* return True if char is tonemark */ static Bool THAI_istone (unsigned char ch) { return (tactis_chtype[ch] == TONE); } #endif static Bool THAI_iscomposible ( unsigned char follow_ch, unsigned char lead_ch) {/* "Can follow_ch be put in the same display cell as lead_ch?" */ return (write_rules_lookup[THAI_chtype(lead_ch)][THAI_chtype(follow_ch)] == CP); } static Bool THAI_isaccepted ( unsigned char follow_ch, unsigned char lead_ch, unsigned char mode) { Bool iskeyvalid; /* means "Can follow_ch be keyed in after lead_ch?" */ switch (mode) { case WTT_ISC1: iskeyvalid = (wtt_isc1_lookup[THAI_chtype(lead_ch)][THAI_chtype(follow_ch)] != RJ); break; case WTT_ISC2: iskeyvalid = (wtt_isc2_lookup[THAI_chtype(lead_ch)][THAI_chtype(follow_ch)] != RJ); break; case THAICAT_ISC: iskeyvalid = (thaicat_isc_lookup[THAI_chtype(lead_ch)][THAI_chtype(follow_ch)] != RJ); break; default: iskeyvalid = True; break; } return iskeyvalid; } #ifdef UNUSED static void THAI_apply_write_rules( unsigned char *instr, unsigned char *outstr, unsigned char insert_ch, int *num_insert_ch) { /* Input parameters: instr - input string insert_ch specify what char to be added when invalid composition is found Output parameters: outstr - output string after input string has been applied the rules num_insert_ch - number of insert_ch added to outstr. */ unsigned char *lead_ch = NULL, *follow_ch = NULL, *out_ch = NULL; *num_insert_ch = 0; lead_ch = follow_ch = instr; out_ch = outstr; if ((*lead_ch == '\0') || !(THAI_find_chtype(instr,DEAD))) { /* Empty string or can't find any non-spacing char*/ strcpy((char *)outstr, (char *)instr); } else { /* String of length >= 1, keep looking */ follow_ch++; if (THAI_isdead(*lead_ch)) { /* is first char non-spacing? */ *out_ch++ = SPACE; (*num_insert_ch)++; } *out_ch++ = *lead_ch; while (*follow_ch != '\0') /* more char in string to check */ { if (THAI_isdead(*follow_ch) && !THAI_iscomposible(*follow_ch,*lead_ch)) { *out_ch++ = SPACE; (*num_insert_ch)++; } *out_ch++ = *follow_ch; lead_ch = follow_ch; follow_ch++; } *out_ch = '\0'; } } static int THAI_find_chtype ( unsigned char *instr, int chtype) { /* Input parameters: instr - input string chtype - type of character to look for Output parameters: function returns first position of character with matched chtype function returns -1 if it does not find. */ int i = 0, position = -1; switch (chtype) { case DEAD: for (i = 0; *instr != '\0' && THAI_isdead(*instr); i++, instr++) ; if (*instr != '\0') position = i; break; default: break; } return position; } static int THAI_apply_scm( unsigned char *instr, unsigned char *outstr, unsigned char spec_ch, int num_sp, unsigned char insert_ch) { unsigned char *scan, *outch; int i, dead_count, found_count; Bool isconsecutive; scan = instr; outch = outstr; dead_count = found_count = 0; isconsecutive = False; while (*scan != '\0') { if (THAI_isdead(*scan)) dead_count++; /* count number of non-spacing char */ if (*scan == spec_ch) if (!isconsecutive) found_count++; /* count number consecutive spec char found */ *outch++ = *scan++; if (found_count == num_sp) { for (i = 0; i < dead_count; i++) *outch++ = insert_ch; dead_count = found_count = 0; } } /* what to return? */ return 0; /* probably not right but better than returning garbage */ } /* The following functions are copied from XKeyBind.c */ static void ComputeMaskFromKeytrans(); static int IsCancelComposeKey(KeySym *symbol, XKeyEvent *event); static void SetLed(Display *dpy, int num, int state); static CARD8 FindKeyCode(); /* The following functions are specific to this module */ static int XThaiTranslateKey(); static int XThaiTranslateKeySym(); static KeySym HexIMNormalKey( XicThaiPart *thai_part, KeySym symbol, XKeyEvent *event); static KeySym HexIMFirstComposeKey( XicThaiPart *thai_part, KeySym symbol, XKeyEvent *event); static KeySym HexIMSecondComposeKey( XicThaiPart *thai_part, KeySym symbol XKeyEvent *event); static KeySym HexIMComposeSequence(KeySym ks1, KeySym ks2); static void InitIscMode(Xic ic); static Bool ThaiComposeConvert( Display *dpy, KeySym insym, KeySym *outsym, KeySym *lower, KeySym *upper); #endif /* * Definitions */ #define BellVolume 0 #define ucs2tis(wc) \ (unsigned char) ( \ (0<=(wc)&&(wc)<=0x7F) ? \ (wc) : \ ((0x0E01<=(wc)&&(wc)<=0x0E5F) ? ((wc)-0x0E00+0xA0) : 0)) /* "c" is an unsigned char */ #define tis2ucs(c) \ ( \ ((c)<=0x7F) ? \ (wchar_t)(c) : \ ((0x0A1<=(c)) ? ((wchar_t)(c)-0xA0+0x0E00) : 0)) /* * Macros to save and recall last input character in XIC */ #define IC_SavePreviousChar(ic,ch) \ ((ic)->private.local.base.mb[(ic)->private.local.base.tree[(ic)->private.local.context].mb] = (char) (ch)) #define IC_ClearPreviousChar(ic) \ ((ic)->private.local.base.mb[(ic)->private.local.base.tree[(ic)->private.local.context].mb] = 0) #define IC_GetPreviousChar(ic) \ (IC_RealGetPreviousChar(ic,1)) #define IC_GetContextChar(ic) \ (IC_RealGetPreviousChar(ic,2)) #define IC_DeletePreviousChar(ic) \ (IC_RealDeletePreviousChar(ic)) static unsigned char IC_RealGetPreviousChar(Xic ic, unsigned short pos) { XICCallback* cb = &ic->core.string_conversion_callback; DefTreeBase *b = &ic->private.local.base; if (cb && cb->callback) { XIMStringConversionCallbackStruct screc; unsigned char c; /* Use a safe value of position = 0 and stretch the range to desired * place, as XIM protocol is unclear here whether it could be negative */ screc.position = 0; screc.direction = XIMBackwardChar; screc.operation = XIMStringConversionRetrieval; screc.factor = pos; screc.text = 0; (cb->callback)((XIC)ic, cb->client_data, (XPointer)&screc); if (!screc.text) return (unsigned char) b->mb[b->tree[(ic)->private.local.context].mb]; if ((screc.text->feedback && *screc.text->feedback == XIMStringConversionLeftEdge) || screc.text->length < 1) { c = 0; } else { Xim im; XlcConv conv; int from_left; int to_left; char *from_buf; char *to_buf; im = (Xim) XIMOfIC((XIC)ic); if (screc.text->encoding_is_wchar) { conv = _XlcOpenConverter(im->core.lcd, XlcNWideChar, im->core.lcd, XlcNCharSet); from_buf = (char *) screc.text->string.wcs; from_left = screc.text->length * sizeof(wchar_t); } else { conv = _XlcOpenConverter(im->core.lcd, XlcNMultiByte, im->core.lcd, XlcNCharSet); from_buf = screc.text->string.mbs; from_left = screc.text->length; } to_buf = (char *)&c; to_left = 1; _XlcResetConverter(conv); if (_XlcConvert(conv, (XPointer *)&from_buf, &from_left, (XPointer *)&to_buf, &to_left, NULL, 0) < 0) { c = (unsigned char) b->mb[b->tree[(ic)->private.local.context].mb]; } _XlcCloseConverter(conv); XFree(screc.text->string.mbs); } XFree(screc.text); return c; } else { return (unsigned char) b->mb[b->tree[(ic)->private.local.context].mb]; } } static unsigned char IC_RealDeletePreviousChar(Xic ic) { XICCallback* cb = &ic->core.string_conversion_callback; if (cb && cb->callback) { XIMStringConversionCallbackStruct screc; unsigned char c; screc.position = 0; screc.direction = XIMBackwardChar; screc.operation = XIMStringConversionSubstitution; screc.factor = 1; screc.text = 0; (cb->callback)((XIC)ic, cb->client_data, (XPointer)&screc); if (!screc.text) { return 0; } if ((screc.text->feedback && *screc.text->feedback == XIMStringConversionLeftEdge) || screc.text->length < 1) { c = 0; } else { if (screc.text->encoding_is_wchar) { c = ucs2tis(screc.text->string.wcs[0]); XFree(screc.text->string.wcs); } else { c = screc.text->string.mbs[0]; XFree(screc.text->string.mbs); } } XFree(screc.text); return c; } else { return 0; } } /* * Input sequence check mode in XIC */ #define IC_IscMode(ic) ((ic)->private.local.thai.input_mode) /* * Max. size of string handled by the two String Lookup functions. */ #define STR_LKUP_BUF_SIZE 256 /* * Size of buffer to contain previous locale name. */ #define SAV_LOCALE_NAME_SIZE 256 /* * Size of buffer to contain the IM modifier. */ #define MAXTHAIIMMODLEN 20 #define AllMods (ShiftMask|LockMask|ControlMask| \ Mod1Mask|Mod2Mask|Mod3Mask|Mod4Mask|Mod5Mask) #define IsISOControlKey(ks) ((ks) >= XK_2 && (ks) <= XK_8) #define IsValidControlKey(ks) (((((ks)>=XK_A && (ks)<=XK_asciitilde) || \ (ks)==XK_space || (ks)==XK_Delete) && \ ((ks)!=0))) #define COMPOSE_LED 2 #ifdef UNUSED typedef KeySym (*StateProc)( XicThaiPart *thai_part, KeySym symbol, XKeyEvent *event); /* * macros to classify XKeyEvent state field */ #define IsShift(state) (((state) & ShiftMask) != 0) #define IsLock(state) (((state) & LockMask) != 0) #define IsControl(state) (((state) & ControlMask) != 0) #define IsMod1(state) (((state) & Mod1Mask) != 0) #define IsMod2(state) (((state) & Mod2Mask) != 0) #define IsMod3(state) (((state) & Mod3Mask) != 0) #define IsMod4(state) (((state) & Mod4Mask) != 0) #define IsMod5(state) (((state) & Mod5Mask) != 0) /* * key starts Thai compose sequence (Hex input method) if : */ #define IsComposeKey(ks, event) \ (( ks==XK_Alt_L && \ IsControl((event)->state) && \ !IsShift((event)->state)) \ ? True : False) /* * State handler to implement the Thai hex input method. */ static int const nstate_handlers = 3; static StateProc state_handler[] = { HexIMNormalKey, HexIMFirstComposeKey, HexIMSecondComposeKey }; /* * Table for 'Thai Compose' character input. * The current implementation uses latin-1 keysyms. */ struct _XMapThaiKey { KeySym from; KeySym to; }; static struct _XMapThaiKey const ThaiComposeTable[] = { { /* 0xa4 */ XK_currency, /* 0xa5 */ XK_yen }, { /* 0xa2 */ XK_cent, /* 0xa3 */ XK_sterling }, { /* 0xe6 */ XK_ae, /* 0xef */ XK_idiaeresis }, { /* 0xd3 */ XK_Oacute, /* 0xee */ XK_icircumflex }, { /* 0xb9 */ XK_onesuperior, /* 0xfa */ XK_uacute }, { /* 0xd2 */ XK_Ograve, /* 0xe5 */ XK_aring }, { /* 0xbc */ XK_onequarter, /* 0xfb */ XK_ucircumflex }, { XK_VoidSymbol, XK_VoidSymbol } }; struct _XKeytrans { struct _XKeytrans *next;/* next on list */ char *string; /* string to return when the time comes */ int len; /* length of string (since NULL is legit)*/ KeySym key; /* keysym rebound */ unsigned int state; /* modifier state */ KeySym *modifiers; /* modifier keysyms you want */ int mlen; /* length of modifier list */ }; /* Convert keysym to 'Thai Compose' keysym */ /* The current implementation use latin-1 keysyms */ static Bool ThaiComposeConvert( Display *dpy, KeySym insym, KeySym *outsym, KeySym *lower, KeySym *upper) { struct _XMapThaiKey const *table_entry = ThaiComposeTable; while (table_entry->from != XK_VoidSymbol) { if (table_entry->from == insym) { *outsym = table_entry->to; *lower = *outsym; *upper = *outsym; return True; } table_entry++; } return False; } static int XThaiTranslateKey( register Display *dpy, KeyCode keycode, register unsigned int modifiers, unsigned int *modifiers_return, KeySym *keysym_return, KeySym *lsym_return, KeySym *usym_return) { int per; register KeySym *syms; KeySym sym = 0, lsym = 0, usym = 0; if ((! dpy->keysyms) && (! _XKeyInitialize(dpy))) return 0; *modifiers_return = (ShiftMask|LockMask) | dpy->mode_switch; if (((int)keycode < dpy->min_keycode) || ((int)keycode > dpy->max_keycode)) { *keysym_return = NoSymbol; return 1; } per = dpy->keysyms_per_keycode; syms = &dpy->keysyms[(keycode - dpy->min_keycode) * per]; while ((per > 2) && (syms[per - 1] == NoSymbol)) per--; if ((per > 2) && (modifiers & dpy->mode_switch)) { syms += 2; per -= 2; } if (!(modifiers & ShiftMask) && (!(modifiers & LockMask) || (dpy->lock_meaning == NoSymbol))) { if ((per == 1) || (syms[1] == NoSymbol)) XConvertCase(syms[0], keysym_return, &usym); else { XConvertCase(syms[0], &lsym, &usym); *keysym_return = syms[0]; } } else if (!(modifiers & LockMask) || (dpy->lock_meaning != XK_Caps_Lock)) { if ((per == 1) || ((usym = syms[1]) == NoSymbol)) XConvertCase(syms[0], &lsym, &usym); *keysym_return = usym; } else { if ((per == 1) || ((sym = syms[1]) == NoSymbol)) sym = syms[0]; XConvertCase(sym, &lsym, &usym); if (!(modifiers & ShiftMask) && (sym != syms[0]) && ((sym != usym) || (lsym == usym))) XConvertCase(syms[0], &lsym, &usym); *keysym_return = usym; } /* * ThaiCat keyboard support : * When the Shift and Thai keys are hold for some keys a 'Thai Compose' * character code is generated which is different from column 3 and * 4 of the keymap. * Since we don't know whether ThaiCat keyboard or WTT keyboard is * in use, the same mapping is done for all Thai input. * We just arbitary choose to use column 3 keysyms as the indices of * this mapping. * When the control key is also hold, this mapping has no effect. */ if ((modifiers & Mod1Mask) && (modifiers & ShiftMask) && !(modifiers & ControlMask)) { if (ThaiComposeConvert(dpy, syms[0], &sym, &lsym, &usym)) *keysym_return = sym; } if (*keysym_return == XK_VoidSymbol) *keysym_return = NoSymbol; *lsym_return = lsym; *usym_return = usym; return 1; } /* * XThaiTranslateKeySym * * Translate KeySym to TACTIS code output. * The current implementation uses ISO latin-1 keysym. * Should be changed to TACTIS keysyms when they are defined by the * standard. */ static int XThaiTranslateKeySym( Display *dpy, register KeySym symbol, register KeySym lsym, register KeySym usym, unsigned int modifiers, unsigned char *buffer, int nbytes) { KeySym ckey = 0; register struct _XKeytrans *p; int length; unsigned long hiBytes; register unsigned char c; /* * initialize length = 1 ; */ length = 1; if (!symbol) return 0; /* see if symbol rebound, if so, return that string. */ for (p = dpy->key_bindings; p; p = p->next) { if (((modifiers & AllMods) == p->state) && (symbol == p->key)) { length = p->len; if (length > nbytes) length = nbytes; memcpy (buffer, p->string, length); return length; } } /* try to convert to TACTIS, handling control */ hiBytes = symbol >> 8; if (!(nbytes && ((hiBytes == 0) || ((hiBytes == 0xFF) && (((symbol >= XK_BackSpace) && (symbol <= XK_Clear)) || (symbol == XK_Return) || (symbol == XK_Escape) || (symbol == XK_KP_Space) || (symbol == XK_KP_Tab) || (symbol == XK_KP_Enter) || ((symbol >= XK_KP_Multiply) && (symbol <= XK_KP_9)) || (symbol == XK_KP_Equal) || (symbol == XK_Scroll_Lock) || #ifdef DXK_PRIVATE /* DEC private keysyms */ (symbol == DXK_Remove) || #endif (symbol == NoSymbol) || (symbol == XK_Delete)))))) return 0; /* if X keysym, convert to ascii by grabbing low 7 bits */ if (symbol == XK_KP_Space) c = XK_space & 0x7F; /* patch encoding botch */ /* not for Thai else if (symbol == XK_hyphen) c = XK_minus & 0xFF; */ /* map to equiv character */ else if (hiBytes == 0xFF) c = symbol & 0x7F; else c = symbol & 0xFF; /* only apply Control key if it makes sense, else ignore it */ if (modifiers & ControlMask) { if (!(IsKeypadKey(lsym) || lsym==XK_Return || lsym==XK_Tab)) { if (IsISOControlKey(lsym)) ckey = lsym; else if (IsISOControlKey(usym)) ckey = usym; else if (lsym == XK_question) ckey = lsym; else if (usym == XK_question) ckey = usym; else if (IsValidControlKey(lsym)) ckey = lsym; else if (IsValidControlKey(usym)) ckey = usym; else length = 0; if (length != 0) { if (ckey == XK_2) c = '\000'; else if (ckey >= XK_3 && ckey <= XK_7) c = (char)(ckey-('3'-'\033')); else if (ckey == XK_8) c = '\177'; else if (ckey == XK_Delete) c = '\030'; else if (ckey == XK_question) c = '\037'; else if (ckey == XK_quoteleft) c = '\036'; /* KLee 1/24/91 */ else c = (char)(ckey & 0x1f); } } } /* * ThaiCat has a key that generates two TACTIS codes D1 & E9. * It is represented by the latin-1 keysym XK_thorn (0xfe). * If c is XK_thorn, this key is pressed and it is converted to * 0xd1 0xe9. */ if (c == XK_thorn) { buffer[0] = 0xd1; buffer[1] = 0xe9; buffer[2] = '\0'; return 2; } else { /* Normal case */ buffer[0] = c; buffer[1] = '\0'; return 1; } } /* * given a KeySym, returns the first keycode containing it, if any. */ static CARD8 FindKeyCode( register Display *dpy, register KeySym code) { register KeySym *kmax = dpy->keysyms + (dpy->max_keycode - dpy->min_keycode + 1) * dpy->keysyms_per_keycode; register KeySym *k = dpy->keysyms; while (k < kmax) { if (*k == code) return (((k - dpy->keysyms) / dpy->keysyms_per_keycode) + dpy->min_keycode); k += 1; } return 0; } /* * given a list of modifiers, computes the mask necessary for later matching. * This routine must lookup the key in the Keymap and then search to see * what modifier it is bound to, if any. Sets the AnyModifier bit if it * can't map some keysym to a modifier. */ static void ComputeMaskFromKeytrans( Display *dpy, register struct _XKeytrans *p) { register int i; register CARD8 code; register XModifierKeymap *m = dpy->modifiermap; p->state = AnyModifier; for (i = 0; i < p->mlen; i++) { /* if not found, then not on current keyboard */ if ((code = FindKeyCode(dpy, p->modifiers[i])) == 0) return; /* code is now the keycode for the modifier you want */ { register int j = m->max_keypermod<<3; while ((--j >= 0) && (code != m->modifiermap[j])) ; if (j < 0) return; p->state |= (1<<(j/m->max_keypermod)); } } p->state &= AllMods; } /************************************************************************ * * * Compose handling routines - compose handlers 0,1,2 * * ************************************************************************/ #define NORMAL_KEY_STATE 0 #define FIRST_COMPOSE_KEY_STATE 1 #define SECOND_COMPOSE_KEY_STATE 2 static KeySym HexIMNormalKey( XicThaiPart *thai_part, KeySym symbol, XKeyEvent *event) { if (IsComposeKey (symbol, event)) /* start compose sequence */ { SetLed (event->display,COMPOSE_LED, LedModeOn); thai_part->comp_state = FIRST_COMPOSE_KEY_STATE; return NoSymbol; } return symbol; } static KeySym HexIMFirstComposeKey( XicThaiPart *thai_part, KeySym symbol, XKeyEvent *event) { if (IsModifierKey (symbol)) return symbol; /* ignore shift etc. */ if (IsCancelComposeKey (&symbol, event)) /* cancel sequence */ { SetLed (event->display,COMPOSE_LED, LedModeOff); thai_part->comp_state = NORMAL_KEY_STATE; return symbol; } if (IsComposeKey (symbol, event)) /* restart sequence ?? */ { return NoSymbol; /* no state change necessary */ } thai_part->keysym = symbol; /* save key pressed */ thai_part->comp_state = SECOND_COMPOSE_KEY_STATE; return NoSymbol; } static KeySym HexIMSecondComposeKey( XicThaiPart *thai_part, KeySym symbol, XKeyEvent *event) { if (IsModifierKey (symbol)) return symbol; /* ignore shift etc. */ if (IsComposeKey (symbol, event)) /* restart sequence ? */ { thai_part->comp_state =FIRST_COMPOSE_KEY_STATE; return NoSymbol; } SetLed (event->display,COMPOSE_LED, LedModeOff); if (IsCancelComposeKey (&symbol, event)) /* cancel sequence ? */ { thai_part->comp_state = NORMAL_KEY_STATE; return symbol; } if ((symbol = HexIMComposeSequence (thai_part->keysym, symbol)) ==NoSymbol) { /* invalid compose sequence */ XBell(event->display, BellVolume); } thai_part->comp_state = NORMAL_KEY_STATE; /* reset to normal state */ return symbol; } /* * Interprets two keysyms entered as hex digits and return the Thai keysym * correspond to the TACTIS code formed. * The current implementation of this routine returns ISO Latin Keysyms. */ static KeySym HexIMComposeSequence(KeySym ks1, KeySym ks2) { int hi_digit; int lo_digit; int tactis_code; if ((ks1 >= XK_0) && (ks1 <= XK_9)) hi_digit = ks1 - XK_0; else if ((ks1 >= XK_A) && (ks1 <= XK_F)) hi_digit = ks1 - XK_A + 10; else if ((ks1 >= XK_a) && (ks1 <= XK_f)) hi_digit = ks1 - XK_a + 10; else /* out of range */ return NoSymbol; if ((ks2 >= XK_0) && (ks2 <= XK_9)) lo_digit = ks2 - XK_0; else if ((ks2 >= XK_A) && (ks2 <= XK_F)) lo_digit = ks2 - XK_A + 10; else if ((ks2 >= XK_a) && (ks2 <= XK_f)) lo_digit = ks2 - XK_a + 10; else /* out of range */ return NoSymbol; tactis_code = hi_digit * 0x10 + lo_digit ; return (KeySym)tactis_code; } /* * routine determines * 1) whether key event should cancel a compose sequence * 2) whether cancelling key event should be processed or ignored */ static int IsCancelComposeKey( KeySym *symbol, XKeyEvent *event) { if (*symbol==XK_Delete && !IsControl(event->state) && !IsMod1(event->state)) { *symbol=NoSymbol; /* cancel compose sequence, and ignore key */ return True; } if (IsComposeKey(*symbol, event)) return False; return ( IsControl (event->state) || IsMod1(event->state) || IsKeypadKey (*symbol) || IsFunctionKey (*symbol) || IsMiscFunctionKey (*symbol) || #ifdef DXK_PRIVATE /* DEC private keysyms */ *symbol == DXK_Remove || #endif IsPFKey (*symbol) || IsCursorKey (*symbol) || (*symbol >= XK_Tab && *symbol < XK_Multi_key) ? True : False); /* cancel compose sequence and pass */ /* cancelling key through */ } /* * set specified keyboard LED on or off */ static void SetLed( Display *dpy, int num, int state) { XKeyboardControl led_control; led_control.led_mode = state; led_control.led = num; XChangeKeyboardControl (dpy, KBLed | KBLedMode, &led_control); } #endif /* * Initialize ISC mode from im modifier */ static void InitIscMode(Xic ic) { Xim im; char *im_modifier_name; /* If already defined, just return */ if (IC_IscMode(ic)) return; /* Get IM modifier */ im = (Xim) XIMOfIC((XIC)ic); im_modifier_name = im->core.im_name; /* Match with predefined value, default is Basic Check */ if (!strncmp(im_modifier_name,"BasicCheck",MAXTHAIIMMODLEN+1)) IC_IscMode(ic) = WTT_ISC1; else if (!strncmp(im_modifier_name,"Strict",MAXTHAIIMMODLEN+1)) IC_IscMode(ic) = WTT_ISC2; else if (!strncmp(im_modifier_name,"Thaicat",MAXTHAIIMMODLEN+1)) IC_IscMode(ic) = THAICAT_ISC; else if (!strncmp(im_modifier_name,"Passthrough",MAXTHAIIMMODLEN+1)) IC_IscMode(ic) = NOISC; else IC_IscMode(ic) = WTT_ISC1; return; } /* * Helper functions for _XimThaiFilter() */ static Bool ThaiFltAcceptInput(Xic ic, unsigned char new_char, KeySym symbol) { DefTreeBase *b = &ic->private.local.base; b->wc[b->tree[ic->private.local.composed].wc+0] = tis2ucs(new_char); b->wc[b->tree[ic->private.local.composed].wc+1] = '\0'; if ((new_char <= 0x1f) || (new_char == 0x7f)) b->tree[ic->private.local.composed].keysym = symbol; else b->tree[ic->private.local.composed].keysym = NoSymbol; return True; } static Bool ThaiFltReorderInput(Xic ic, unsigned char previous_char, unsigned char new_char) { DefTreeBase *b = &ic->private.local.base; if (!IC_DeletePreviousChar(ic)) return False; b->wc[b->tree[ic->private.local.composed].wc+0] = tis2ucs(new_char); b->wc[b->tree[ic->private.local.composed].wc+1] = tis2ucs(previous_char); b->wc[b->tree[ic->private.local.composed].wc+2] = '\0'; b->tree[ic->private.local.composed].keysym = NoSymbol; return True; } static Bool ThaiFltReplaceInput(Xic ic, unsigned char new_char, KeySym symbol) { DefTreeBase *b = &ic->private.local.base; if (!IC_DeletePreviousChar(ic)) return False; b->wc[b->tree[ic->private.local.composed].wc+0] = tis2ucs(new_char); b->wc[b->tree[ic->private.local.composed].wc+1] = '\0'; if ((new_char <= 0x1f) || (new_char == 0x7f)) b->tree[ic->private.local.composed].keysym = symbol; else b->tree[ic->private.local.composed].keysym = NoSymbol; return True; } static unsigned NumLockMask(Display *d) { int i; XModifierKeymap *map; KeyCode numlock_keycode = XKeysymToKeycode (d, XK_Num_Lock); if (numlock_keycode == NoSymbol) return 0; map = XGetModifierMapping (d); if (!map) return 0; for (i = 0; i < 8; i++) { if (map->modifiermap[map->max_keypermod * i] == numlock_keycode) { XFreeModifiermap(map); return 1 << i; } } XFreeModifiermap(map); return 0; } /* * Filter function for TACTIS */ Bool _XimThaiFilter(Display *d, Window w, XEvent *ev, XPointer client_data) { Xic ic = (Xic)client_data; KeySym symbol; int isc_mode; /* Thai Input Sequence Check mode */ unsigned char previous_char; /* Last inputted Thai char */ unsigned char new_char; #ifdef UNUSED unsigned int modifiers; KeySym lsym,usym; int state; XicThaiPart *thai_part; char buf[10]; #endif wchar_t wbuf[10]; Bool isReject; DefTreeBase *b = &ic->private.local.base; if ((ev->type != KeyPress) || (ev->xkey.keycode == 0)) return False; if (!IC_IscMode(ic)) InitIscMode(ic); XwcLookupString((XIC)ic, &ev->xkey, wbuf, sizeof(wbuf) / sizeof(wbuf[0]), &symbol, NULL); if ((ev->xkey.state & (AllMods & ~(ShiftMask|LockMask|NumLockMask(d)))) || ((symbol >> 8 == 0xFF) && ((XK_BackSpace <= symbol && symbol <= XK_Clear) || (symbol == XK_Return) || (symbol == XK_Pause) || (symbol == XK_Scroll_Lock) || (symbol == XK_Sys_Req) || (symbol == XK_Escape) || (symbol == XK_Delete) || IsCursorKey(symbol) || IsKeypadKey(symbol) || IsMiscFunctionKey(symbol) || IsFunctionKey(symbol)))) { IC_ClearPreviousChar(ic); return False; } if (((symbol >> 8 == 0xFF) && IsModifierKey(symbol)) || #ifdef XK_XKB_KEYS ((symbol >> 8 == 0xFE) && (XK_ISO_Lock <= symbol && symbol <= XK_ISO_Last_Group_Lock)) || #endif (symbol == NoSymbol)) { return False; } #ifdef UNUSED if (! XThaiTranslateKey(ev->xkey.display, ev->xkey.keycode, ev->xkey.state, &modifiers, &symbol, &lsym, &usym)) return False; /* * Hex input method processing */ thai_part = &ic->private.local.thai; state = thai_part->comp_state; if (state >= 0 && state < nstate_handlers) /* call handler for state */ { symbol = (* state_handler[state])(thai_part, symbol, (XKeyEvent *)ev); } /* * Translate KeySym into mb. */ count = XThaiTranslateKeySym(ev->xkey.display, symbol, lsym, usym, ev->xkey.state, buf, 10); if (!symbol && !count) return True; /* Return symbol if cannot convert to character */ if (!count) return False; #endif /* * Thai Input sequence check */ isc_mode = IC_IscMode(ic); if (!(previous_char = IC_GetPreviousChar(ic))) previous_char = ' '; new_char = ucs2tis(wbuf[0]); isReject = True; if (THAI_isaccepted(new_char, previous_char, isc_mode)) { ThaiFltAcceptInput(ic, new_char, symbol); isReject = False; } else { unsigned char context_char; context_char = IC_GetContextChar(ic); if (context_char) { if (THAI_iscomposible(new_char, context_char)) { if (THAI_iscomposible(previous_char, new_char)) { isReject = !ThaiFltReorderInput(ic, previous_char, new_char); } else if (THAI_iscomposible(previous_char, context_char)) { isReject = !ThaiFltReplaceInput(ic, new_char, symbol); } else if (THAI_chtype(previous_char) == FV1 && THAI_chtype(new_char) == TONE) { isReject = !ThaiFltReorderInput(ic, previous_char, new_char); } } else if (THAI_isaccepted(new_char, context_char, isc_mode)) { isReject = !ThaiFltReplaceInput(ic, new_char, symbol); } } } if (isReject) { /* reject character */ XBell(ev->xkey.display, BellVolume); return True; } _Xlcwcstombs(ic->core.im->core.lcd, &b->mb[b->tree[ic->private.local.composed].mb], &b->wc[b->tree[ic->private.local.composed].wc], 10); _Xlcmbstoutf8(ic->core.im->core.lcd, &b->utf8[b->tree[ic->private.local.composed].utf8], &b->mb[b->tree[ic->private.local.composed].mb], 10); /* Remember the last character inputted * (as fallback in case StringConversionCallback is not provided) */ IC_SavePreviousChar(ic, new_char); ev->xkey.keycode = 0; XPutBackEvent(d, ev); return True; } } if (IsComposeKey (symbol, event)) /* restart sequence ?? */ { return NoSymbol; /* no state change nlibX11-1.6.3/modules/im/ximcp/imThaiIm.c000064401431060000012000000155251247741723500201300ustar00alancstaff00002660200006/****************************************************************** Copyright 1992, 1993, 1994 by FUJITSU LIMITED Copyright 1993 by Digital Equipment Corporation Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of FUJITSU LIMITED and Digital Equipment Corporation not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED and Digital Equipment Corporation makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp Modifier: Franky Ling Digital Equipment Corporation frankyling@hgrd01.enet.dec.com ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include #include "Xlibint.h" #include "Xlcint.h" #include "XlcPublic.h" #include "XlcPubI.h" #include "Ximint.h" static XIMMethodsRec Xim_im_thai_methods = { _XimThaiCloseIM, /* close */ _XimLocalSetIMValues, /* set_values */ _XimLocalGetIMValues, /* get_values */ _XimThaiCreateIC, /* create_ic */ _XimLcctstombs, /* ctstombs */ _XimLcctstowcs, /* ctstowcs */ _XimLcctstoutf8 /* ctstoutf8 */ }; #define THAI_LANGUAGE_NAME "th" Bool _XimCheckIfThaiProcessing(Xim im) { char *language; _XGetLCValues(im->core.lcd, XlcNLanguage, &language, NULL); if(strcmp(language, THAI_LANGUAGE_NAME) == 0 && (strcmp(im->core.im_name, "") == 0 || strcmp(im->core.im_name, "BasicCheck") == 0 || strcmp(im->core.im_name, "Strict") == 0 || strcmp(im->core.im_name, "Thaicat") == 0 || strcmp(im->core.im_name, "Passthrough") == 0)) { return(True); } return(False); } Bool _XimThaiOpenIM(Xim im) { XLCd lcd = im->core.lcd; XlcConv conv; XimDefIMValues im_values; XimLocalPrivateRec* private = &im->private.local; _XimInitialResourceInfo(); if(_XimSetIMResourceList(&im->core.im_resources, &im->core.im_num_resources) == False) { goto Open_Error; } if(_XimSetICResourceList(&im->core.ic_resources, &im->core.ic_num_resources) == False) { goto Open_Error; } _XimSetIMMode(im->core.im_resources, im->core.im_num_resources); _XimGetCurrentIMValues(im, &im_values); if(_XimSetLocalIMDefaults(im, (XPointer)&im_values, im->core.im_resources, im->core.im_num_resources) == False) { goto Open_Error; } _XimSetCurrentIMValues(im, &im_values); if (!(conv = _XlcOpenConverter(lcd, XlcNCompoundText, lcd, XlcNMultiByte))) goto Open_Error; private->ctom_conv = conv; if (!(conv = _XlcOpenConverter(lcd, XlcNCompoundText, lcd, XlcNWideChar))) goto Open_Error; private->ctow_conv = conv; if (!(conv = _XlcOpenConverter(lcd, XlcNCompoundText, lcd, XlcNUtf8String))) goto Open_Error; private->ctoutf8_conv = conv; if (!(conv = _XlcOpenConverter(lcd, XlcNCharSet, lcd, XlcNMultiByte))) goto Open_Error; private->cstomb_conv = conv; if (!(conv = _XlcOpenConverter(lcd, XlcNCharSet, lcd, XlcNWideChar))) goto Open_Error; private->cstowc_conv = conv; if (!(conv = _XlcOpenConverter(lcd, XlcNCharSet, lcd, XlcNUtf8String))) goto Open_Error; private->cstoutf8_conv = conv; if (!(conv = _XlcOpenConverter(lcd, XlcNUcsChar, lcd, XlcNChar))) goto Open_Error; private->ucstoc_conv = conv; if (!(conv = _XlcOpenConverter(lcd, XlcNUcsChar, lcd, XlcNUtf8String))) goto Open_Error; private->ucstoutf8_conv = conv; im->methods = &Xim_im_thai_methods; private->current_ic = (XIC)NULL; return(True); Open_Error : _XimThaiIMFree(im); return(False); } void _XimThaiIMFree(Xim im) { if(im->core.im_resources) { Xfree(im->core.im_resources); im->core.im_resources = NULL; } if(im->core.ic_resources) { Xfree(im->core.ic_resources); im->core.ic_resources = NULL; } if(im->core.im_values_list) { Xfree(im->core.im_values_list); im->core.im_values_list = NULL; } if(im->core.ic_values_list) { Xfree(im->core.ic_values_list); im->core.ic_values_list = NULL; } if(im->core.styles) { Xfree(im->core.styles); im->core.styles = NULL; } if(im->core.res_name) { Xfree(im->core.res_name); im->core.res_name = NULL; } if(im->core.res_class) { Xfree(im->core.res_class); im->core.res_class = NULL; } if(im->core.im_name) { Xfree(im->core.im_name); im->core.im_name = NULL; } if (im->private.local.ctom_conv) { _XlcCloseConverter(im->private.local.ctom_conv); im->private.local.ctom_conv = NULL; } if (im->private.local.ctow_conv) { _XlcCloseConverter(im->private.local.ctow_conv); im->private.local.ctow_conv = NULL; } if (im->private.local.ctoutf8_conv) { _XlcCloseConverter(im->private.local.ctoutf8_conv); im->private.local.ctoutf8_conv = NULL; } if (im->private.local.cstomb_conv) { _XlcCloseConverter(im->private.local.cstomb_conv); im->private.local.cstomb_conv = NULL; } if (im->private.local.cstowc_conv) { _XlcCloseConverter(im->private.local.cstowc_conv); im->private.local.cstowc_conv = NULL; } if (im->private.local.cstoutf8_conv) { _XlcCloseConverter(im->private.local.cstoutf8_conv); im->private.local.cstoutf8_conv = NULL; } if (im->private.local.ucstoc_conv) { _XlcCloseConverter(im->private.local.ucstoc_conv); im->private.local.ucstoc_conv = NULL; } if (im->private.local.ucstoutf8_conv) { _XlcCloseConverter(im->private.local.ucstoutf8_conv); im->private.local.ucstoutf8_conv = NULL; } return; } Status _XimThaiCloseIM(XIM xim) { Xim im = (Xim)xim; XIC ic; XIC next; ic = im->core.ic_chain; im->core.ic_chain = NULL; while (ic) { (*ic->methods->destroy) (ic); next = ic->core.next; Xfree (ic); ic = next; } _XimThaiIMFree(im); return(True); } libX11-1.6.3/modules/im/ximcp/imTrX.c000064401431060000012000000367531247741723500175000ustar00alancstaff00002660200006/* * Copyright 1992 Oracle and/or its affiliates. All rights reserved. * * 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: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. */ /****************************************************************** Copyright 1992, 1993, 1994 by FUJITSU LIMITED Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of FUJITSU LIMITED not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Hideki Hiura (hhiura@Sun.COM) Sun Microsystems, Inc. Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #include #include "Xlibint.h" #include "Xlcint.h" #include "Ximint.h" #include "XimTrInt.h" #include "XimTrX.h" static Bool _XimXRegisterDispatcher( Xim im, Bool (*callback)( Xim, INT16, XPointer, XPointer ), XPointer call_data) { XIntrCallbackPtr rec; XSpecRec *spec = (XSpecRec *)im->private.proto.spec; if (!(rec = Xmalloc(sizeof(XIntrCallbackRec)))) return False; rec->func = callback; rec->call_data = call_data; rec->next = spec->intr_cb; spec->intr_cb = rec; return True; } static void _XimXFreeIntrCallback( Xim im) { XSpecRec *spec = (XSpecRec *)im->private.proto.spec; register XIntrCallbackPtr rec, next; for (rec = spec->intr_cb; rec;) { next = rec->next; Xfree(rec); rec = next; } return; } static Bool _XimXCallDispatcher(Xim im, INT16 len, XPointer data) { register XIntrCallbackRec *rec; XSpecRec *spec = (XSpecRec *)im->private.proto.spec; for (rec = spec->intr_cb; rec; rec = rec->next) { if ((*rec->func)(im, len, data, rec->call_data)) return True; } return False; } static Bool _XimXFilterWaitEvent( Display *d, Window w, XEvent *ev, XPointer arg) { Xim im = (Xim)arg; XSpecRec *spec = (XSpecRec *)im->private.proto.spec; Bool ret; spec->ev = (XPointer)ev; ret = _XimFilterWaitEvent(im); /* * If ev is a pointer to a stack variable, there could be * a coredump later on if the pointer is dereferenced. * Therefore, reset to NULL to force reinitialization in * _XimXRead(). * * Keep in mind _XimXRead may be called again when the stack * is very different. */ spec->ev = (XPointer)NULL; return ret; } static Bool _CheckConnect( Display *display, XEvent *event, XPointer xim) { Xim im = (Xim)xim; XSpecRec *spec = (XSpecRec *)im->private.proto.spec; if ((event->type == ClientMessage) && (event->xclient.message_type == spec->imconnectid)) { return True; } return False; } static Bool _XimXConnect(Xim im) { XEvent event; XSpecRec *spec = (XSpecRec *)im->private.proto.spec; CARD32 major_code; CARD32 minor_code; if (!(spec->lib_connect_wid = XCreateSimpleWindow(im->core.display, DefaultRootWindow(im->core.display), 0, 0, 1, 1, 1, 0, 0))) { return False; } event.xclient.type = ClientMessage; event.xclient.display = im->core.display; event.xclient.window = im->private.proto.im_window; event.xclient.message_type = spec->imconnectid; event.xclient.format = 32; event.xclient.data.l[0] = (CARD32)spec->lib_connect_wid; event.xclient.data.l[1] = spec->major_code; event.xclient.data.l[2] = spec->minor_code; event.xclient.data.l[3] = 0; event.xclient.data.l[4] = 0; if(event.xclient.data.l[1] == 1 || event.xclient.data.l[1] == 2) { XWindowAttributes atr; long event_mask; XGetWindowAttributes(im->core.display, spec->lib_connect_wid, &atr); event_mask = atr.your_event_mask | PropertyChangeMask; XSelectInput(im->core.display, spec->lib_connect_wid, event_mask); _XRegisterFilterByType(im->core.display, spec->lib_connect_wid, PropertyNotify, PropertyNotify, _XimXFilterWaitEvent, (XPointer)im); } XSendEvent(im->core.display, im->private.proto.im_window, False, NoEventMask, &event); XFlush(im->core.display); for (;;) { XIfEvent(im->core.display, &event, _CheckConnect, (XPointer)im); if (event.xclient.type != ClientMessage) { return False; } if (event.xclient.message_type == spec->imconnectid) break; } spec->ims_connect_wid = (Window)event.xclient.data.l[0]; major_code = (CARD32)event.xclient.data.l[1]; minor_code = (CARD32)event.xclient.data.l[2]; if (((major_code == 0) && (minor_code <= 2)) || ((major_code == 1) && (minor_code == 0)) || ((major_code == 2) && (minor_code <= 1))) { spec->major_code = major_code; spec->minor_code = minor_code; } if (((major_code == 0) && (minor_code == 2)) || ((major_code == 2) && (minor_code == 1))) { spec->BoundarySize = (CARD32)event.xclient.data.l[3]; } /* ClientMessage Event Filter */ _XRegisterFilterByType(im->core.display, spec->lib_connect_wid, ClientMessage, ClientMessage, _XimXFilterWaitEvent, (XPointer)im); return True; } static Bool _XimXShutdown(Xim im) { XSpecRec *spec = (XSpecRec *)im->private.proto.spec; if (!spec) return True; /* ClientMessage Event Filter */ _XUnregisterFilter(im->core.display, ((XSpecRec *)im->private.proto.spec)->lib_connect_wid, _XimXFilterWaitEvent, (XPointer)im); XDestroyWindow(im->core.display, ((XSpecRec *)im->private.proto.spec)->lib_connect_wid); _XimXFreeIntrCallback(im); Xfree(spec); im->private.proto.spec = 0; return True; } static char * _NewAtom( char *atomName) { static int sequence = 0; (void)sprintf(atomName, "_client%d", sequence); sequence = ((sequence < 20) ? sequence + 1 : 0); return atomName; } static Bool _XimXWrite(Xim im, INT16 len, XPointer data) { Atom atom; char atomName[16]; XSpecRec *spec = (XSpecRec *)im->private.proto.spec; XEvent event; CARD8 *p; CARD32 major_code = spec->major_code; CARD32 minor_code = spec->minor_code; int BoundSize; bzero(&event,sizeof(XEvent)); event.xclient.type = ClientMessage; event.xclient.display = im->core.display; event.xclient.window = spec->ims_connect_wid; if(major_code == 1 && minor_code == 0) { BoundSize = 0; } else if((major_code == 0 && minor_code == 2) || (major_code == 2 && minor_code == 1)) { BoundSize = spec->BoundarySize; } else if(major_code == 0 && minor_code == 1) { BoundSize = len; } else { BoundSize = XIM_CM_DATA_SIZE; } if (len > BoundSize) { event.xclient.message_type = spec->improtocolid; atom = XInternAtom(im->core.display, _NewAtom(atomName), False); XChangeProperty(im->core.display, spec->ims_connect_wid, atom, XA_STRING, 8, PropModeAppend, (unsigned char *)data, len); if(major_code == 0) { event.xclient.format = 32; event.xclient.data.l[0] = (long)len; event.xclient.data.l[1] = (long)atom; XSendEvent(im->core.display, spec->ims_connect_wid, False, NoEventMask, &event); } } else { int length; event.xclient.format = 8; for(length = 0 ; length < len ; length += XIM_CM_DATA_SIZE) { p = (CARD8 *)&event.xclient.data.b[0]; if((length + XIM_CM_DATA_SIZE) >= len) { event.xclient.message_type = spec->improtocolid; bzero(p, XIM_CM_DATA_SIZE); memcpy((char *)p, (data + length), (len - length)); } else { event.xclient.message_type = spec->immoredataid; memcpy((char *)p, (data + length), XIM_CM_DATA_SIZE); } XSendEvent(im->core.display, spec->ims_connect_wid, False, NoEventMask, &event); } } return True; } static Bool _XimXGetReadData( Xim im, char *buf, int buf_len, int *ret_len, XEvent *event) { char *data; int len; char tmp_buf[XIM_CM_DATA_SIZE]; XSpecRec *spec = (XSpecRec *)im->private.proto.spec; unsigned long length; Atom prop; int return_code; Atom type_ret; int format_ret; unsigned long nitems; unsigned long bytes_after_ret; unsigned char *prop_ret; if ((event->type == ClientMessage) && !((event->xclient.message_type == spec->improtocolid) || (event->xclient.message_type == spec->immoredataid))) { /* This event has nothing to do with us, * FIXME should not have gotten here then... */ return False; } else if ((event->type == ClientMessage) && (event->xclient.format == 8)) { data = event->xclient.data.b; if (buf_len >= XIM_CM_DATA_SIZE) { (void)memcpy(buf, data, XIM_CM_DATA_SIZE); *ret_len = XIM_CM_DATA_SIZE; } else { (void)memcpy(buf, data, buf_len); len = XIM_CM_DATA_SIZE - buf_len; (void)memcpy(tmp_buf, &data[buf_len], len); bzero(data, XIM_CM_DATA_SIZE); (void)memcpy(data, tmp_buf, len); XPutBackEvent(im->core.display, event); *ret_len = buf_len; } } else if ((event->type == ClientMessage) && (event->xclient.format == 32)) { length = (unsigned long)event->xclient.data.l[0]; prop = (Atom)event->xclient.data.l[1]; return_code = XGetWindowProperty(im->core.display, spec->lib_connect_wid, prop, 0L, (long)((length + 3)/ 4), True, AnyPropertyType, &type_ret, &format_ret, &nitems, &bytes_after_ret, &prop_ret); if (return_code != Success || format_ret == 0 || nitems == 0) { if (return_code == Success) XFree(prop_ret); return False; } if (buf_len >= (int)nitems) { (void)memcpy(buf, prop_ret, (int)nitems); *ret_len = (int)nitems; if (bytes_after_ret > 0) { XFree(prop_ret); if (XGetWindowProperty(im->core.display, spec->lib_connect_wid, prop, 0L, ((length + bytes_after_ret + 3)/ 4), True, AnyPropertyType, &type_ret, &format_ret, &nitems, &bytes_after_ret, &prop_ret) == Success) { XChangeProperty(im->core.display, spec->lib_connect_wid, prop, XA_STRING, 8, PropModePrepend, &prop_ret[length], (nitems - length)); } else { return False; } } } else { (void)memcpy(buf, prop_ret, buf_len); *ret_len = buf_len; len = nitems - buf_len; if (bytes_after_ret > 0) { XFree(prop_ret); if (XGetWindowProperty(im->core.display, spec->lib_connect_wid, prop, 0L, ((length + bytes_after_ret + 3)/ 4), True, AnyPropertyType, &type_ret, &format_ret, &nitems, &bytes_after_ret, &prop_ret) != Success) { return False; } } XChangeProperty(im->core.display, spec->lib_connect_wid, prop, XA_STRING, 8, PropModePrepend, &prop_ret[buf_len], len); event->xclient.data.l[0] = (long)len; event->xclient.data.l[1] = (long)prop; XPutBackEvent(im->core.display, event); } XFree(prop_ret); } else if (event->type == PropertyNotify) { prop = event->xproperty.atom; return_code = XGetWindowProperty(im->core.display, spec->lib_connect_wid, prop, 0L, 1000000L, True, AnyPropertyType, &type_ret, &format_ret, &nitems, &bytes_after_ret, &prop_ret); if (return_code != Success || format_ret == 0 || nitems == 0) { if (return_code == Success) XFree(prop_ret); return False; } if (buf_len >= nitems) { (void)memcpy(buf, prop_ret, (int)nitems); *ret_len = (int)nitems; } else { (void)memcpy(buf, prop_ret, buf_len); *ret_len = buf_len; len = nitems - buf_len; XChangeProperty(im->core.display, spec->lib_connect_wid, prop, XA_STRING, 8, PropModePrepend, &prop_ret[buf_len], len); } XFree(prop_ret); } return True; } static Bool _CheckCMEvent( Display *display, XEvent *event, XPointer xim) { Xim im = (Xim)xim; XSpecRec *spec = (XSpecRec *)im->private.proto.spec; CARD32 major_code = spec->major_code; if ((event->type == ClientMessage) &&((event->xclient.message_type == spec->improtocolid) || (event->xclient.message_type == spec->immoredataid))) return True; if((major_code == 1 || major_code == 2) && (event->type == PropertyNotify) && (event->xproperty.state == PropertyNewValue)) return True; return False; } static Bool _XimXRead(Xim im, XPointer recv_buf, int buf_len, int *ret_len) { XEvent *ev; XEvent event; int len = 0; XSpecRec *spec = (XSpecRec *)im->private.proto.spec; XPointer arg = spec->ev; if (!arg) { bzero(&event, sizeof(XEvent)); ev = &event; XIfEvent(im->core.display, ev, _CheckCMEvent, (XPointer)im); } else { ev = (XEvent *)arg; spec->ev = (XPointer)NULL; } if (!(_XimXGetReadData(im, recv_buf, buf_len, &len, ev))) return False; *ret_len = len; return True; } static void _XimXFlush(Xim im) { XFlush(im->core.display); return; } Bool _XimXConf(Xim im, char *address) { XSpecRec *spec; if (!(spec = Xcalloc(1, sizeof(XSpecRec)))) return False; spec->improtocolid = XInternAtom(im->core.display, _XIM_PROTOCOL, False); spec->imconnectid = XInternAtom(im->core.display, _XIM_XCONNECT, False); spec->immoredataid = XInternAtom(im->core.display, _XIM_MOREDATA, False); spec->major_code = MAJOR_TRANSPORT_VERSION; spec->minor_code = MINOR_TRANSPORT_VERSION; im->private.proto.spec = (XPointer)spec; im->private.proto.connect = _XimXConnect; im->private.proto.shutdown = _XimXShutdown; im->private.proto.write = _XimXWrite; im->private.proto.read = _XimXRead; im->private.proto.flush = _XimXFlush; im->private.proto.register_dispatcher = _XimXRegisterDispatcher; im->private.proto.call_dispatcher = _XimXCallDispatcher; return True; } libX11-1.6.3/modules/im/ximcp/imDispch.c000064401431060000012000000056451247741723500201710ustar00alancstaff00002660200006/****************************************************************** Copyright 1993, 1994 by FUJITSU LIMITED Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of FUJITSU LIMITED not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #include "Xlibint.h" #include "Xutil.h" #include "Xlcint.h" #include "Ximint.h" Bool _XimRegProtoIntrCallback( Xim im, CARD16 major_code, CARD16 minor_code, Bool (*proc)( Xim, INT16, XPointer, XPointer ), XPointer call_data) { XimProtoIntrRec *rec; if (!(rec = Xmalloc(sizeof(XimProtoIntrRec)))) return False; rec->func = proc; rec->major_code = major_code; rec->minor_code = minor_code; rec->call_data = call_data; rec->next = im->private.proto.intrproto; im->private.proto.intrproto = rec; return True; } void _XimFreeProtoIntrCallback(Xim im) { register XimProtoIntrRec *rec, *next; for (rec = im->private.proto.intrproto; rec;) { next = rec->next; Xfree(rec); rec = next; } im->private.proto.intrproto = NULL; return; } static Bool _XimTransportIntr( Xim im, INT16 len, XPointer data, XPointer call_data) { Xim call_im = (Xim)call_data; XimProtoIntrRec *rec = call_im->private.proto.intrproto; CARD8 major_opcode = *((CARD8 *)data); CARD8 minor_opcode = *((CARD8 *)data + 1); for (; rec; rec = rec->next) { if ((major_opcode == (CARD8)rec->major_code) && (minor_opcode == (CARD8)rec->minor_code)) if ((*rec->func)(call_im, len, data, rec->call_data)) return True; } return False; } Bool _XimDispatchInit(Xim im) { if (_XimRegisterDispatcher(im, _XimTransportIntr, (XPointer)im)) return True; return False; } libX11-1.6.3/modules/im/ximcp/imTrans.c000064401431060000012000000202001247741723500200260ustar00alancstaff00002660200006/* * Copyright 1992 Oracle and/or its affiliates. All rights reserved. * * 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: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. */ /****************************************************************** Copyright 1992, 1993, 1994 by FUJITSU LIMITED Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of FUJITSU LIMITED not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Hideki Hiura (hhiura@Sun.COM) Sun Microsystems, Inc. Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include "Xlibint.h" #include #include "Xlcint.h" #include "Ximint.h" #include "XimTrans.h" #include "XimTrInt.h" #ifdef WIN32 #include #endif #ifndef XIM_CONNECTION_RETRIES #define XIM_CONNECTION_RETRIES 5 #endif static Bool _XimTransConnect( Xim im) { TransSpecRec *spec = (TransSpecRec *)im->private.proto.spec; int connect_stat, retry; Window window; for (retry = XIM_CONNECTION_RETRIES; retry >= 0; retry--) { if ((spec->trans_conn = _XimXTransOpenCOTSClient ( spec->address)) == NULL) { break; } if ((connect_stat = _XimXTransConnect ( spec->trans_conn, spec->address)) < 0) { _XimXTransClose (spec->trans_conn); spec->trans_conn = NULL; if (connect_stat == TRANS_TRY_CONNECT_AGAIN) continue; else break; } else break; } if (spec->trans_conn == NULL) return False; spec->fd = _XimXTransGetConnectionNumber (spec->trans_conn); if (!(window = XCreateSimpleWindow(im->core.display, DefaultRootWindow(im->core.display), 0, 0, 1, 1, 1, 0, 0))) return False; spec->window = window; _XRegisterFilterByType(im->core.display, window, KeyPress, KeyPress, _XimTransFilterWaitEvent, (XPointer)im); return _XRegisterInternalConnection(im->core.display, spec->fd, (_XInternalConnectionProc)_XimTransInternalConnection, (XPointer)im); } static Bool _XimTransShutdown( Xim im) { TransSpecRec *spec = (TransSpecRec *)im->private.proto.spec; _XimXTransDisconnect(spec->trans_conn); (void)_XimXTransClose(spec->trans_conn); _XimFreeTransIntrCallback(im); _XUnregisterInternalConnection(im->core.display, spec->fd); _XUnregisterFilter(im->core.display, spec->window, _XimTransFilterWaitEvent, (XPointer)im); XDestroyWindow(im->core.display, spec->window); Xfree(spec->address); Xfree(spec); return True; } Bool _XimTransRegisterDispatcher( Xim im, Bool (*callback)( Xim, INT16, XPointer, XPointer ), XPointer call_data) { TransSpecRec *spec = (TransSpecRec *)im->private.proto.spec; TransIntrCallbackPtr rec; if (!(rec = Xmalloc(sizeof(TransIntrCallbackRec)))) return False; rec->func = callback; rec->call_data = call_data; rec->next = spec->intr_cb; spec->intr_cb = rec; return True; } void _XimFreeTransIntrCallback( Xim im) { TransSpecRec *spec = (TransSpecRec *)im->private.proto.spec; register TransIntrCallbackPtr rec, next; for (rec = spec->intr_cb; rec;) { next = rec->next; Xfree(rec); rec = next; } return; } Bool _XimTransCallDispatcher(Xim im, INT16 len, XPointer data) { TransSpecRec *spec = (TransSpecRec *)im->private.proto.spec; TransIntrCallbackRec *rec; for (rec = spec->intr_cb; rec; rec = rec->next) { if ((*rec->func)(im, len, data, rec->call_data)) return True; } return False; } Bool _XimTransFilterWaitEvent( Display *d, Window w, XEvent *ev, XPointer arg) { Xim im = (Xim)arg; TransSpecRec *spec = (TransSpecRec *)im->private.proto.spec; spec->is_putback = False; return _XimFilterWaitEvent(im); } void _XimTransInternalConnection( Display *d, int fd, XPointer arg) { Xim im = (Xim)arg; XEvent ev; XKeyEvent *kev; TransSpecRec *spec = (TransSpecRec *)im->private.proto.spec; if (spec->is_putback) return; bzero(&ev, sizeof(ev)); /* FIXME: other fields may be accessed, too. */ kev = (XKeyEvent *)&ev; kev->type = KeyPress; kev->send_event = False; kev->display = im->core.display; kev->window = spec->window; kev->keycode = 0; kev->time = 0L; kev->serial = LastKnownRequestProcessed(im->core.display); #if 0 fprintf(stderr,"%s,%d: putback FIXED kev->time=0 kev->serial=%lu\n", __FILE__, __LINE__, kev->serial); #endif XPutBackEvent(im->core.display, &ev); XFlush(im->core.display); spec->is_putback = True; return; } Bool _XimTransWrite(Xim im, INT16 len, XPointer data) { TransSpecRec *spec = (TransSpecRec *)im->private.proto.spec; char *buf = (char *)data; register int nbyte; while (len > 0) { if ((nbyte = _XimXTransWrite(spec->trans_conn, buf, len)) <= 0) return False; len -= nbyte; buf += nbyte; } return True; } Bool _XimTransRead( Xim im, XPointer recv_buf, int buf_len, int *ret_len) { TransSpecRec *spec = (TransSpecRec *)im->private.proto.spec; int len; if (buf_len == 0) { *ret_len = 0; return True; } if ((len = _XimXTransRead(spec->trans_conn, recv_buf, buf_len)) <= 0) return False; *ret_len = len; return True; } void _XimTransFlush( Xim im) { return; } Bool _XimTransConf( Xim im, char *address) { char *paddr; TransSpecRec *spec; if (!(paddr = strdup(address))) return False; if (!(spec = Xcalloc(1, sizeof(TransSpecRec)))) { Xfree(paddr); return False; } spec->address = paddr; im->private.proto.spec = (XPointer)spec; im->private.proto.connect = _XimTransConnect; im->private.proto.shutdown = _XimTransShutdown; im->private.proto.write = _XimTransWrite; im->private.proto.read = _XimTransRead; im->private.proto.flush = _XimTransFlush; im->private.proto.register_dispatcher = _XimTransRegisterDispatcher; im->private.proto.call_dispatcher = _XimTransCallDispatcher; return True; } S WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Hideki Hiura (hhiura@Sun.COM) Sun Microsystems, Inc. Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp libX11-1.6.3/modules/im/ximcp/imLcSIc.c000064401431060000012000000037111247741723500177040ustar00alancstaff00002660200006/****************************************************************** Copyright 1990, 1991, 1992, 1993, 1994 by FUJITSU LIMITED Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of FUJITSU LIMITED not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include "Xlibint.h" #include "Xlcint.h" #include "Ximint.h" char * _XimLocalSetICValues(XIC xic, XIMArg *values) { XimDefICValues ic_values; Xic ic = (Xic)xic; char *name; _XimGetCurrentICValues(ic, &ic_values); name = _XimSetICValueData(ic, (XPointer)&ic_values, ic->private.local.ic_resources, ic->private.local.ic_num_resources, values, XIM_SETICVALUES, True); _XimSetCurrentICValues(ic, &ic_values); return(name); } libX11-1.6.3/modules/im/ximcp/imDefFlt.c000064401431060000012000000222241247741723500201130ustar00alancstaff00002660200006/****************************************************************** Copyright 1992, 1993, 1994 by FUJITSU LIMITED Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of FUJITSU LIMITED not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #include "Xlibint.h" #include "Xutil.h" #include "Xlcint.h" #include "Ximint.h" static long _XimTriggerCheck( Xim im, XKeyEvent *ev, INT32 len, CARD32 *keylist) { register long i; KeySym keysym; CARD32 buf32[BUFSIZE/4]; char *buf = (char *)buf32; int modifier; int modifier_mask; CARD32 min_len = sizeof(CARD32) /* sizeof keysym */ + sizeof(CARD32) /* sizeof modifier */ + sizeof(CARD32); /* sizeof modifier mask */ XLookupString(ev, buf, BUFSIZE, &keysym, NULL); if (!keysym) return -1; for (i = 0; len >= min_len; i += 3, len -= min_len) { modifier = keylist[i + 1]; modifier_mask = keylist[i + 2]; if (((KeySym)keylist[i] == keysym) && ((ev->state & modifier_mask) == modifier)) return i; } return -1; } static long _XimTriggerOnCheck( Xim im, XKeyEvent *ev) { return _XimTriggerCheck(im, ev, (INT32)im->private.proto.im_onkeylist[0], &im->private.proto.im_onkeylist[1]); } static long _XimTriggerOffCheck( Xim im, XKeyEvent *ev) { return _XimTriggerCheck(im, ev, (INT32)im->private.proto.im_offkeylist[0], &im->private.proto.im_offkeylist[1]); } static Bool _XimOnKeysCheck( Xic ic, XKeyEvent *ev) { Xim im = (Xim)ic->core.im; long idx; if (IS_DYNAMIC_EVENT_FLOW(ic->core.im) && im->private.proto.im_onkeylist && im->private.proto.im_onkeylist[0]) { if ((idx = _XimTriggerOnCheck(im, ev)) >= 0) { (void)_XimTriggerNotify(im, ic, 0, (CARD32)idx); /* Trigger on */ return True; } } return False; } static Bool _XimOffKeysCheck( Xic ic, XKeyEvent *ev) { Xim im = (Xim)ic->core.im; long idx; if (IS_DYNAMIC_EVENT_FLOW(ic->core.im) && im->private.proto.im_offkeylist && im->private.proto.im_offkeylist[0]) { if ((idx = _XimTriggerOffCheck(im, ev)) >= 0) { _XimTriggerNotify(im, ic, 1, (CARD32)idx); /* Trigger off */ return True; } } return False; } static void _XimPendingFilter( Xic ic) { Xim im = (Xim)ic->core.im; if (IS_NEED_SYNC_REPLY(im)) { (void)_XimProcSyncReply(im, ic); UNMARK_NEED_SYNC_REPLY(im); } return; } static Bool _XimProtoKeypressFilter( Xic ic, XKeyEvent *ev) { Xim im = (Xim)ic->core.im; if (IS_FABRICATED(im)) { _XimPendingFilter(ic); UNMARK_FABRICATED(im); return NOTFILTERD; } if (IS_NEGLECT_EVENT(ic, KeyPressMask)) return FILTERD; #ifdef XIM_CONNECTABLE if (!IS_IC_CONNECTED(ic)) { if (IS_CONNECTABLE(im)) { if (_XimConnectServer(im)) { if (!_XimReCreateIC(ic)) { _XimDelayModeSetAttr(im); return NOTFILTERD; } } else { return NOTFILTERD; } } else { return NOTFILTERD; } } #else if (!IS_IC_CONNECTED(ic)) return NOTFILTERD; #endif /* XIM_CONNECTABLE */ if (!IS_FORWARD_EVENT(ic, KeyPressMask)) { if (_XimOnKeysCheck(ic, ev)) return FILTERD; return NOTFILTERD; } if (_XimOffKeysCheck(ic, ev)) return FILTERD; if (_XimForwardEvent(ic, (XEvent *)ev, IS_SYNCHRONOUS_EVENT(ic, KeyPressMask))) return FILTERD; return NOTFILTERD; } static Bool _XimFilterKeypress( Display *d, Window w, XEvent *ev, XPointer client_data) { return _XimProtoKeypressFilter((Xic)client_data, (XKeyEvent *)ev ); } static Bool _XimProtoKeyreleaseFilter( Xic ic, XKeyEvent *ev) { Xim im = (Xim)ic->core.im; if (IS_FABRICATED(im)) { _XimPendingFilter(ic); UNMARK_FABRICATED(im); return NOTFILTERD; } if (IS_NEGLECT_EVENT(ic, KeyReleaseMask)) return FILTERD; #ifdef XIM_CONNECTABLE if (!IS_IC_CONNECTED(ic)) { if (IS_CONNECTABLE(im)) { if (_XimConnectServer(im)) { if (!_XimReCreateIC(ic)) { _XimDelayModeSetAttr(im); return NOTFILTERD; } } else { return NOTFILTERD; } } else { return NOTFILTERD; } } #else if (!IS_IC_CONNECTED(ic)) return NOTFILTERD; #endif /* XIM_CONNECTABLE */ if (!IS_FORWARD_EVENT(ic, KeyReleaseMask)) { if (_XimOnKeysCheck(ic, ev)) return FILTERD; return NOTFILTERD; } if (_XimOffKeysCheck(ic, ev)) return FILTERD; if (_XimForwardEvent(ic, (XEvent *)ev, IS_SYNCHRONOUS_EVENT(ic, KeyPressMask))) return FILTERD; return NOTFILTERD; } static Bool _XimFilterKeyrelease( Display *d, Window w, XEvent *ev, XPointer client_data) { return _XimProtoKeyreleaseFilter((Xic)client_data, (XKeyEvent *)ev); } static void _XimRegisterKeyPressFilter( Xic ic) { if (ic->core.focus_window) { if (!(ic->private.proto.registed_filter_event & KEYPRESS_MASK)) { _XRegisterFilterByType (ic->core.im->core.display, ic->core.focus_window, KeyPress, KeyPress, _XimFilterKeypress, (XPointer)ic); ic->private.proto.registed_filter_event |= KEYPRESS_MASK; } } return; } static void _XimRegisterKeyReleaseFilter( Xic ic) { if (ic->core.focus_window) { if (!(ic->private.proto.registed_filter_event & KEYRELEASE_MASK)) { _XRegisterFilterByType (ic->core.im->core.display, ic->core.focus_window, KeyRelease, KeyRelease, _XimFilterKeyrelease, (XPointer)ic); ic->private.proto.registed_filter_event |= KEYRELEASE_MASK; } } return; } static void _XimUnregisterKeyPressFilter( Xic ic) { if (ic->core.focus_window) { if (ic->private.proto.registed_filter_event & KEYPRESS_MASK) { _XUnregisterFilter (ic->core.im->core.display, ic->core.focus_window, _XimFilterKeypress, (XPointer)ic); ic->private.proto.registed_filter_event &= ~KEYPRESS_MASK; } } return; } static void _XimUnregisterKeyReleaseFilter( Xic ic) { if (ic->core.focus_window) { if (ic->private.proto.registed_filter_event & KEYRELEASE_MASK) { _XUnregisterFilter (ic->core.im->core.display, ic->core.focus_window, _XimFilterKeyrelease, (XPointer)ic); ic->private.proto.registed_filter_event &= ~KEYRELEASE_MASK; } } return; } void _XimRegisterFilter( Xic ic) { _XimRegisterKeyPressFilter(ic); if (IS_FORWARD_EVENT(ic, KeyReleaseMask)) _XimRegisterKeyReleaseFilter(ic); return; } void _XimUnregisterFilter( Xic ic) { _XimUnregisterKeyPressFilter(ic); _XimUnregisterKeyReleaseFilter(ic); return; } void _XimReregisterFilter( Xic ic) { if (IS_FORWARD_EVENT(ic, KeyReleaseMask)) _XimRegisterKeyReleaseFilter(ic); else _XimUnregisterKeyReleaseFilter(ic); return; } static Bool _XimFilterServerDestroy( Display *d, Window w, XEvent *ev, XPointer client_data) { Xim im = (Xim)client_data; if (ev->type == DestroyNotify) { UNMARK_SERVER_CONNECTED(im); #ifdef XIM_CONNECTABLE if (!IS_SERVER_CONNECTED(im) && IS_RECONNECTABLE(im)) { _XimServerReconectableDestroy(); return True; } #endif /* XIM_CONNECTABLE */ _XimServerDestroy(im); } return True; } void _XimRegisterServerFilter( Xim im) { if (im->private.proto.im_window) { if (!(im->private.proto.registed_filter_event & DESTROYNOTIFY_MASK)) { _XRegisterFilterByMask(im->core.display, im->private.proto.im_window, StructureNotifyMask, _XimFilterServerDestroy, (XPointer)im); XSelectInput(im->core.display, im->private.proto.im_window, StructureNotifyMask); im->private.proto.registed_filter_event |= DESTROYNOTIFY_MASK; } } return; } void _XimUnregisterServerFilter( Xim im) { if (im->private.proto.im_window) { if (im->private.proto.registed_filter_event & DESTROYNOTIFY_MASK) { _XUnregisterFilter(im->core.display, im->private.proto.im_window, _XimFilterServerDestroy, (XPointer)im); im->private.proto.registed_filter_event &= ~DESTROYNOTIFY_MASK; } } return; } libX11-1.6.3/modules/im/ximcp/Makefile.in000064401431060000012000000634341247741725400203330ustar00alancstaff00002660200006# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = modules/im/ximcp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_define_dir.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h \ $(top_builddir)/include/X11/XlibConf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(commonlibdir)" LTLIBRARIES = $(commonlib_LTLIBRARIES) $(noinst_LTLIBRARIES) libximcp_la_LIBADD = am__objects_1 = imCallbk.lo imDefFlt.lo imDefIc.lo imDefIm.lo \ imDefLkup.lo imDispch.lo imEvToWire.lo imExten.lo imImSw.lo \ imInsClbk.lo imInt.lo imLcFlt.lo imLcGIc.lo imLcIc.lo \ imLcIm.lo imLcLkup.lo imLcPrs.lo imLcSIc.lo imRmAttr.lo \ imRm.lo imThaiFlt.lo imThaiIc.lo imThaiIm.lo imTrans.lo \ imTransR.lo imTrX.lo am_libximcp_la_OBJECTS = $(am__objects_1) libximcp_la_OBJECTS = $(am_libximcp_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = @XLIB_LOADABLE_I18N_FALSE@am_libximcp_la_rpath = am__DEPENDENCIES_1 = @XLIB_LOADABLE_I18N_TRUE@ximcp_la_DEPENDENCIES = \ @XLIB_LOADABLE_I18N_TRUE@ $(am__DEPENDENCIES_1) am_ximcp_la_OBJECTS = imCallbk.lo imDefFlt.lo imDefIc.lo imDefIm.lo \ imDefLkup.lo imDispch.lo imEvToWire.lo imExten.lo imImSw.lo \ imInsClbk.lo imInt.lo imLcFlt.lo imLcGIc.lo imLcIc.lo \ imLcIm.lo imLcLkup.lo imLcPrs.lo imLcSIc.lo imRmAttr.lo \ imRm.lo imThaiFlt.lo imThaiIc.lo imThaiIm.lo imTrans.lo \ imTransR.lo imTrX.lo ximcp_la_OBJECTS = $(am_ximcp_la_OBJECTS) ximcp_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(ximcp_la_LDFLAGS) $(LDFLAGS) -o $@ @XLIB_LOADABLE_I18N_TRUE@am_ximcp_la_rpath = -rpath $(commonlibdir) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src -I$(top_builddir)/include/X11 depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libximcp_la_SOURCES) $(ximcp_la_SOURCES) DIST_SOURCES = $(libximcp_la_SOURCES) $(ximcp_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASE_CFLAGS = @BASE_CFLAGS@ BIGFONT_CFLAGS = @BIGFONT_CFLAGS@ BIGFONT_LIBS = @BIGFONT_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHANGELOG_CMD = @CHANGELOG_CMD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ FOP = @FOP@ GREP = @GREP@ I18N_MODULE_LIBS = @I18N_MODULE_LIBS@ INSTALL = @INSTALL@ INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ KEYSYMDEFS = @KEYSYMDEFS@ LAUNCHD = @LAUNCHD@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LINT = @LINT@ LINTLIB = @LINTLIB@ LINT_FLAGS = @LINT_FLAGS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MALLOC_ZERO_CFLAGS = @MALLOC_ZERO_CFLAGS@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_SUBSTS = @MAN_SUBSTS@ MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RAWCPP = @RAWCPP@ RAWCPPFLAGS = @RAWCPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRICT_CFLAGS = @STRICT_CFLAGS@ STRIP = @STRIP@ STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ TRADITIONALCPPFLAGS = @TRADITIONALCPPFLAGS@ VERSION = @VERSION@ WCHAR32 = @WCHAR32@ X11_CFLAGS = @X11_CFLAGS@ X11_DATADIR = @X11_DATADIR@ X11_EXTRA_DEPS = @X11_EXTRA_DEPS@ X11_LIBDIR = @X11_LIBDIR@ X11_LIBS = @X11_LIBS@ X11_LOCALEDATADIR = @X11_LOCALEDATADIR@ X11_LOCALEDIR = @X11_LOCALEDIR@ X11_LOCALELIBDIR = @X11_LOCALELIBDIR@ XERRORDB = @XERRORDB@ XKBPROTO_REQUIRES = @XKBPROTO_REQUIRES@ XKEYSYMDB = @XKEYSYMDB@ XLOCALEDATADIR = @XLOCALEDATADIR@ XLOCALEDIR = @XLOCALEDIR@ XLOCALELIBDIR = @XLOCALELIBDIR@ XMALLOC_ZERO_CFLAGS = @XMALLOC_ZERO_CFLAGS@ XMLTO = @XMLTO@ XORG_MAN_PAGE = @XORG_MAN_PAGE@ XORG_SGML_PATH = @XORG_SGML_PATH@ XSLTPROC = @XSLTPROC@ XSL_STYLESHEET = @XSL_STYLESHEET@ XTHREADLIB = @XTHREADLIB@ XTHREAD_CFLAGS = @XTHREAD_CFLAGS@ XTMALLOC_ZERO_CFLAGS = @XTMALLOC_ZERO_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ locales = @locales@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = \ -I$(top_srcdir)/include \ -I$(top_srcdir)/include/X11 \ -I$(top_builddir)/include \ -I$(top_builddir)/include/X11 \ -I$(top_srcdir)/src/xcms \ -I$(top_srcdir)/src/xkb \ -I$(top_srcdir)/src/xlibi18n \ -I$(top_srcdir)/src \ -D_BSD_SOURCE -DXIM_t -DTRANS_CLIENT AM_CFLAGS = \ $(X11_CFLAGS) \ $(BIGFONT_CFLAGS) \ $(MALLOC_ZERO_CFLAGS) \ $(CWARNFLAGS) @XLIB_LOADABLE_I18N_TRUE@commonlibdir = $(X11_LOCALELIBDIR)/common @XLIB_LOADABLE_I18N_TRUE@commonlib_LTLIBRARIES = ximcp.la @XLIB_LOADABLE_I18N_TRUE@ximcp_la_LDFLAGS = -module -version-number 2:0:0 @XLIB_LOADABLE_I18N_TRUE@ximcp_la_LIBADD = $(I18N_MODULE_LIBS) @XLIB_LOADABLE_I18N_FALSE@noinst_LTLIBRARIES = libximcp.la ximcp_la_SOURCES = \ imCallbk.c \ imDefFlt.c \ imDefIc.c \ imDefIm.c \ imDefLkup.c \ imDispch.c \ imEvToWire.c \ imExten.c \ imImSw.c \ imInsClbk.c \ imInt.c \ imLcFlt.c \ imLcGIc.c \ imLcIc.c \ imLcIm.c \ imLcLkup.c \ imLcPrs.c \ imLcSIc.c \ imRmAttr.c \ imRm.c \ imThaiFlt.c \ imThaiIc.c \ imThaiIm.c \ imTrans.c \ imTransR.c \ imTrX.c libximcp_la_SOURCES = $(ximcp_la_SOURCES) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign modules/im/ximcp/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign modules/im/ximcp/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-commonlibLTLIBRARIES: $(commonlib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(commonlib_LTLIBRARIES)'; test -n "$(commonlibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(commonlibdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(commonlibdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(commonlibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(commonlibdir)"; \ } uninstall-commonlibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(commonlib_LTLIBRARIES)'; test -n "$(commonlibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(commonlibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(commonlibdir)/$$f"; \ done clean-commonlibLTLIBRARIES: -test -z "$(commonlib_LTLIBRARIES)" || rm -f $(commonlib_LTLIBRARIES) @list='$(commonlib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libximcp.la: $(libximcp_la_OBJECTS) $(libximcp_la_DEPENDENCIES) $(EXTRA_libximcp_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(am_libximcp_la_rpath) $(libximcp_la_OBJECTS) $(libximcp_la_LIBADD) $(LIBS) ximcp.la: $(ximcp_la_OBJECTS) $(ximcp_la_DEPENDENCIES) $(EXTRA_ximcp_la_DEPENDENCIES) $(AM_V_CCLD)$(ximcp_la_LINK) $(am_ximcp_la_rpath) $(ximcp_la_OBJECTS) $(ximcp_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imCallbk.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imDefFlt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imDefIc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imDefIm.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imDefLkup.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imDispch.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imEvToWire.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imExten.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imImSw.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imInsClbk.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imInt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imLcFlt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imLcGIc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imLcIc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imLcIm.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imLcLkup.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imLcPrs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imLcSIc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imRm.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imRmAttr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imThaiFlt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imThaiIc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imThaiIm.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imTrX.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imTrans.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imTransR.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(commonlibdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-commonlibLTLIBRARIES clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-commonlibLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-commonlibLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-commonlibLTLIBRARIES clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-commonlibLTLIBRARIES install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am \ uninstall-commonlibLTLIBRARIES .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: de=uninstall rm -f "$(DESTDIR)$(commonlibdir)/$$f"; \ done clean-commonlibLTLIBRARIES: -test -z "$(commonlib_LTLIBRARIES)" || rm -f $(commonlib_LTLIBRARIES) @list='$(commonlib_LTLIBRARIES)'; \ locs=`for p in $$list; do echolibX11-1.6.3/modules/im/ximcp/imExten.c000064401431060000012000000343741247741723500200430ustar00alancstaff00002660200006/****************************************************************** Copyright 1992, 1993, 1994 by FUJITSU LIMITED Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of FUJITSU LIMITED not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #include "Xlibint.h" #include "Xlcint.h" #include "Ximint.h" /* * index of extensions */ #define XIM_EXT_SET_EVENT_MASK_IDX 0 #ifdef EXT_FORWARD #define XIM_EXT_FORWARD_KEYEVENT_IDX 1 #endif #ifdef EXT_MOVE #define XIM_EXT_MOVE_IDX 2 #endif typedef struct _XIM_QueryExtRec { Bool is_support; const char *name; int name_len; CARD16 major_opcode; CARD16 minor_opcode; int idx; } XIM_QueryExtRec; static XIM_QueryExtRec extensions[] = { {False, "XIM_EXT_SET_EVENT_MASK", 0, 0, 0, XIM_EXT_SET_EVENT_MASK_IDX}, #ifdef EXT_FORWARD {False, "XIM_EXT_FORWARD_KEYEVENT", 0, 0, 0, XIM_EXT_FORWARD_KEYEVENT_IDX}, #endif #ifdef EXT_MOVE {False, "XIM_EXT_MOVE", 0, 0, 0, XIM_EXT_MOVE_IDX}, #endif {False, NULL, 0, 0, 0, 0} /* dummy */ }; static int _XimIsSupportExt( int idx) { register int i; int n = XIMNumber(extensions) - 1; for (i = 0; i < n; i++) { if (extensions[i].idx == idx) { if (extensions[i].is_support) return i; else break; } } return -1; } static Bool _XimProcExtSetEventMask( Xim im, Xic ic, XPointer buf) { EVENTMASK *buf_l = (EVENTMASK *)buf; EVENTMASK select_mask = _XimGetWindowEventmask(ic); ic->private.proto.filter_event_mask = buf_l[0]; ic->private.proto.intercept_event_mask = buf_l[1]; ic->private.proto.select_event_mask = buf_l[2]; ic->private.proto.forward_event_mask = buf_l[3]; ic->private.proto.synchronous_event_mask = buf_l[4]; select_mask &= ~ic->private.proto.intercept_event_mask; /* deselected event mask */ select_mask |= ic->private.proto.select_event_mask; /* selected event mask */ XSelectInput(im->core.display, ic->core.focus_window, select_mask); _XimReregisterFilter(ic); if (!(_XimProcSyncReply(im, ic))) return False; return True; } static Bool _XimExtSetEventMaskCallback( Xim xim, INT16 len, XPointer data, XPointer call_data) { CARD16 *buf_s = (CARD16 *)((CARD8 *)data + XIM_HEADER_SIZE); XIMID imid = buf_s[0]; XICID icid = buf_s[1]; Xim im = (Xim)call_data; Xic ic; if ((imid == im->private.proto.imid) && (ic = _XimICOfXICID(im, icid))) { (void)_XimProcExtSetEventMask(im, ic, (XPointer)&buf_s[2]); return True; } return False; } #ifdef EXT_FORWARD static Bool _XimProcExtForwardKeyEvent( Xim im, Xic ic, XPointer buf) { CARD8 *buf_b = (CARD8 *)buf; CARD16 *buf_s = (CARD16 *)buf; CARD32 *buf_l = (CARD32 *)buf; XEvent ev; XKeyEvent *kev = (XKeyEvent *)&ev; bzero(&ev, sizeof(XEvent)); kev->send_event = False; kev->display = im->core.display; kev->serial = buf_s[1]; /* sequence number */ kev->type = buf_b[4] & 0x7f; /* xEvent.u.u.type */ kev->keycode = buf_b[5]; /* Keycode */ kev->state = buf_s[3]; /* state */ kev->time = buf_l[2]; /* time */ XPutBackEvent(im->core.display, &ev); _XimRespSyncReply(ic, buf_s[0]); MARK_FABRICATED(im); return True; } static Bool _XimExtForwardKeyEventCallback( Xim xim, INT16 len, XPointer data, XPointer call_data) { CARD16 *buf_s = (CARD16 *)((CARD8 *)data + XIM_HEADER_SIZE); XIMID imid = buf_s[0]; XICID icid = buf_s[1]; Xim im = (Xim)call_data; Xic ic; if ((imid == im->private.proto.imid) && (ic = _XimICOfXICID(im, icid))) { (void)_XimProcExtForwardKeyEvent(im, ic, (XPointer)&buf_s[2]); return True; } return False; } static Bool _XimExtForwardKeyEventCheck( Xim im, INT16 len, XPointer data, XPointer arg) { Xic ic = (Xic)arg; CARD16 *buf_s = (CARD16 *)((CARD8 *)data + XIM_HEADER_SIZE); CARD8 major_opcode = *((CARD8 *)data); CARD8 minor_opcode = *((CARD8 *)data + 1); XIMID imid = buf_s[0]; XICID icid = buf_s[1]; if ((major_opcode == XIM_SYNC_REPLY) && (minor_opcode == 0) && (imid == im->private.proto.imid) && (icid == ic->private.proto.icid)) if ((major_opcode == XIM_ERROR) && (minor_opcode == 0) && (buf_s[2] & XIM_IMID_VALID) && (imid == im->private.proto.imid) && (buf_s[2] & XIM_ICID_VALID) && (icid == ic->private.proto.icid)) return True; return False; } Bool _XimExtForwardKeyEvent( Xic ic, XKeyEvent *ev, Bool sync) { Xim im = (Xim) ic->core.im; CARD32 buf32[BUFSIZE/4]; CARD8 *buf = (CARD8 *)buf32; CARD8 *buf_b = &buf[XIM_HEADER_SIZE]; CARD16 *buf_s = (CARD16 *)buf_b; CARD32 *buf_l = (CARD32 *)buf_b; CARD32 reply32[BUFSIZE/4]; char *reply = (char *)reply32; XPointer preply; int buf_size; int ret_code; INT16 len; int idx; if ((idx = _XimIsSupportExt(XIM_EXT_FORWARD_KEYEVENT_IDX)) < 0) return False; buf_s[0] = im->private.proto.imid; /* imid */ buf_s[1] = ic->private.proto.icid; /* icid */ buf_s[2] = sync ? XimSYNCHRONUS : 0; /* flag */ buf_s[3] = (CARD16)(((XAnyEvent *)ev)->serial & ((unsigned long) 0xffff)); /* sequence number */ buf_b[8] = ev->type; /* xEvent.u.u.type */ buf_b[9] = ev->keycode; /* keycode */ buf_s[5] = ev->state; /* state */ buf_l[3] = ev->time; /* time */ len = sizeof(CARD16) /* sizeof imid */ + sizeof(CARD16) /* sizeof icid */ + sizeof(BITMASK16) /* sizeof flag */ + sizeof(CARD16) /* sizeof sequence number */ + sizeof(BYTE) /* sizeof xEvent.u.u.type */ + sizeof(BYTE) /* sizeof keycode */ + sizeof(CARD16) /* sizeof state */ + sizeof(CARD32); /* sizeof time */ _XimSetHeader((XPointer)buf, extensions[idx].major_opcode, extensions[idx].minor_opcode, &len); if (!(_XimWrite(im, len, (XPointer)buf))) return False; _XimFlush(im); if (sync) { buf_size = BUFSIZE; ret_code = _XimRead(im, &len, (XPointer)reply, buf_size, _XimExtForwardKeyEventCheck, (XPointer)ic); if(ret_code == XIM_TRUE) { preply = reply; } else if(ret_code == XIM_OVERFLOW) { if(len <= 0) { preply = reply; } else { buf_sizex = len; preply = Xmalloc(buf_size); ret_code = _XimRead(im, &len, preply, buf_size, _XimExtForwardKeyEventCheck, (XPointer)ic); if(ret_code != XIM_TRUE) { Xfree(preply); return False; } } } else return False; buf_s = (CARD16 *)((char *)preply + XIM_HEADER_SIZE); if (*((CARD8 *)preply) == XIM_ERROR) { _XimProcError(im, 0, (XPointer)&buf_s[3]); if(reply != preply) Xfree(preply); return False; } if(reply != preply) Xfree(preply); } return True; } #endif /* EXT_FORWARD */ static int _XimCheckExtensionListSize(void) { register int i; int len; int total = 0; int n = XIMNumber(extensions) - 1; for (i = 0; i < n; i++) { len = strlen(extensions[i].name); extensions[i].name_len = len; len += sizeof(BYTE); total += len; } return total; } static void _XimSetExtensionList( CARD8 *buf) { register int i; int len; int n = XIMNumber(extensions) - 1; for (i = 0; i < n; i++) { len = extensions[i].name_len; buf[0] = (BYTE)len; (void)strcpy((char *)&buf[1], extensions[i].name); len += sizeof(BYTE); buf += len; } return; } static unsigned int _XimCountNumberOfExtension( INT16 total, CARD8 *ext) { unsigned int n; INT16 len; INT16 min_len = sizeof(CARD8) + sizeof(CARD8) + sizeof(INT16); n = 0; while (total > min_len) { len = *((INT16 *)(&ext[2])); len += (min_len + XIM_PAD(len)); total -= len; ext += len; n++; } return n; } static Bool _XimParseExtensionList( Xim im, CARD16 *data) { int num = XIMNumber(extensions) - 1; unsigned int n; CARD8 *buf; register int i; register int j; INT16 len; if (!(n = _XimCountNumberOfExtension(data[0], (CARD8 *)&data[1]))) return True; buf = (CARD8 *)&data[1];; for (i = 0; i < n; i++) { len = *((INT16 *)(&buf[2])); for (j = 0; j < num; j++) { if (!(strncmp(extensions[j].name, (char *)&buf[4], len))) { extensions[j].major_opcode = buf[0]; extensions[j].minor_opcode = buf[1]; extensions[j].is_support = True; break; } } len += sizeof(CARD8) /* sizeof major_opcode */ + sizeof(CARD8) /* sizeof minor_opcode */ + sizeof(INT16) /* sizeof length */ + XIM_PAD(len); /* sizeof pad */ buf += len; } return True; } static Bool _XimQueryExtensionCheck( Xim im, INT16 len, XPointer data, XPointer arg) { CARD16 *buf_s = (CARD16 *)((CARD8 *)data + XIM_HEADER_SIZE); CARD8 major_opcode = *((CARD8 *)data); CARD8 minor_opcode = *((CARD8 *)data + 1); XIMID imid = buf_s[0]; if ((major_opcode == XIM_QUERY_EXTENSION_REPLY) && (minor_opcode == 0) && (imid == im->private.proto.imid)) return True; if ((major_opcode == XIM_ERROR) && (minor_opcode == 0) && (buf_s[2] & XIM_IMID_VALID) && (imid == im->private.proto.imid)) return True; return False; } Bool _XimExtension( Xim im) { CARD8 *buf; CARD16 *buf_s; int buf_len; INT16 len; CARD32 reply32[BUFSIZE/4]; char *reply = (char *)reply32; XPointer preply; int buf_size; int ret_code; int idx; if (!(len = _XimCheckExtensionListSize())) return True; buf_len = XIM_HEADER_SIZE + sizeof(CARD16) + sizeof(INT16) + len + XIM_PAD(len); if (!(buf = Xmalloc(buf_len))) return False; buf_s = (CARD16 *)&buf[XIM_HEADER_SIZE]; buf_s[0] = im->private.proto.imid; /* imid */ buf_s[1] = len; /* length of Extensions */ _XimSetExtensionList((CARD8 *)&buf_s[2]); /* extensions supported */ XIM_SET_PAD(&buf_s[2], len); /* pad */ len += sizeof(CARD16) /* sizeof imid */ + sizeof(INT16); /* sizeof length of extensions */ _XimSetHeader((XPointer)buf, XIM_QUERY_EXTENSION, 0, &len); if (!(_XimWrite(im, len, (XPointer)buf))) { XFree(buf); return False; } XFree(buf); _XimFlush(im); buf_size = BUFSIZE; ret_code = _XimRead(im, &len, (XPointer)reply, buf_size, _XimQueryExtensionCheck, 0); if(ret_code == XIM_TRUE) { preply = reply; } else if(ret_code == XIM_OVERFLOW) { if(len <= 0) { preply = reply; } else { buf_size = len; preply = Xmalloc(buf_size); ret_code = _XimRead(im, &len, reply, buf_size, _XimQueryExtensionCheck, 0); if(ret_code != XIM_TRUE) { Xfree(preply); return False; } } } else return False; buf_s = (CARD16 *)((char *)preply + XIM_HEADER_SIZE); if (*((CARD8 *)preply) == XIM_ERROR) { _XimProcError(im, 0, (XPointer)&buf_s[3]); if(reply != preply) Xfree(preply); return False; } if (!(_XimParseExtensionList(im, &buf_s[1]))) { if(reply != preply) Xfree(preply); return False; } if(reply != preply) Xfree(preply); if ((idx = _XimIsSupportExt(XIM_EXT_SET_EVENT_MASK_IDX)) >= 0) _XimRegProtoIntrCallback(im, extensions[idx].major_opcode, extensions[idx].minor_opcode, _XimExtSetEventMaskCallback, (XPointer)im); #ifdef EXT_FORWARD if ((idx = _XimIsSupportExt(XIM_EXT_FORWARD_KEYEVENT_IDX)) >= 0) _XimRegProtoIntrCallback(im, extensions[idx].major_opcode, extensions[idx].minor_opcode, _XimExtForwardKeyEventCallback, (XPointer)im); #endif return True; } #ifdef EXT_MOVE /* flag of ExtenArgCheck */ #define EXT_XNSPOTLOCATION (1L<<0) /* macro for ExtenArgCheck */ #define SET_EXT_XNSPOTLOCATION(flag) (flag |= EXT_XNSPOTLOCATION) #define IS_EXT_XNSPOTLOCATION(flag) (flag & EXT_XNSPOTLOCATION) /* length of XPoint attribute */ #define XIM_Xpoint_length 12 static Bool _XimExtMove( Xim im, Xic ic, CARD16 x, CARD16 y) { CARD32 buf32[BUFSIZE/4]; CARD8 *buf = (CARD8 *)buf32; CARD16 *buf_s = (CARD16 *)&buf[XIM_HEADER_SIZE]; INT16 len; int idx; if ((idx = _XimIsSupportExt(XIM_EXT_MOVE_IDX)) < 0) return False; buf_s[0] = im->private.proto.imid; /* imid */ buf_s[1] = ic->private.proto.icid; /* icid */ buf_s[2] = x; /* X */ buf_s[3] = y; /* Y */ len = sizeof(CARD16) /* sizeof imid */ + sizeof(CARD16) /* sizeof icid */ + sizeof(INT16) /* sizeof X */ + sizeof(INT16); /* sizeof Y */ _XimSetHeader((XPointer)buf, extensions[idx].major_opcode, extensions[idx].minor_opcode, &len); if (!(_XimWrite(im, len, (XPointer)buf))) return False; _XimFlush(im); return True; } BITMASK32 _XimExtenArgCheck( XIMArg *arg) { CARD32 flag = 0L; if (!strcmp(arg->name, XNSpotLocation)) SET_EXT_XNSPOTLOCATION(flag); return flag; } Bool _XimExtenMove( Xim im, Xic ic, CARD32 flag, CARD16 *buf, INT16 length) { if ((IS_EXT_XNSPOTLOCATION(flag)) && (length == XIM_Xpoint_length)) return _XimExtMove(im, ic, buf[4], buf[5]); return False; } #endif /* EXT_MOVE */ icid */ buf_s[2] = sync ? XimSYNCHRONUS : 0; /* flag */ buf_s[3] = (CARD16)(((XAnyEvent *)ev)->serial & ((unsigned long) 0xffff)); /* sequence number */ buf_b[8] = ev->type; /* xEvent.u.u.type */ buf_b[9] = ev->keycode; /* keycode */ libX11-1.6.3/modules/im/ximcp/imLcPrs.c000064401431060000012000000423741247741723500200020ustar00alancstaff00002660200006/****************************************************************** Copyright 1992 by Oki Technosystems Laboratory, Inc. Copyright 1992 by Fuji Xerox Co., Ltd. Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Oki Technosystems Laboratory and Fuji Xerox not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. Oki Technosystems Laboratory and Fuji Xerox make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. OKI TECHNOSYSTEMS LABORATORY AND FUJI XEROX DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL OKI TECHNOSYSTEMS LABORATORY AND FUJI XEROX BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Yasuhiro Kawai Oki Technosystems Laboratory Author: Kazunori Nishihara Fuji Xerox ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include "Xlibint.h" #include "Xlcint.h" #include "Ximint.h" #include #include #include #include "pathmax.h" #define XLC_BUFSIZE 256 extern int _Xmbstowcs( wchar_t *wstr, char *str, int len ); extern int _Xmbstoutf8( char *ustr, const char *str, int len ); static void parsestringfile(FILE *fp, Xim im, int depth); /* * Parsing File Format: * * FILE ::= { [PRODUCTION] [COMMENT] "\n"} * PRODUCTION ::= LHS ":" RHS [ COMMENT ] * COMMENT ::= "#" {} * LHS ::= EVENT { EVENT } * EVENT ::= [MODIFIER_LIST] "<" keysym ">" * MODIFIER_LIST ::= (["!"] {MODIFIER} ) | "None" * MODIFIER ::= ["~"] MODIFIER_NAME * MODIFIER_NAME ::= ("Ctrl"|"Lock"|"Caps"|"Shift"|"Alt"|"Meta") * RHS ::= ( STRING | keysym | STRING keysym ) * STRING ::= '"' { CHAR } '"' * CHAR ::= GRAPHIC_CHAR | ESCAPED_CHAR * GRAPHIC_CHAR ::= locale (codeset) dependent code * ESCAPED_CHAR ::= ('\\' | '\"' | OCTAL | HEX ) * OCTAL ::= '\' OCTAL_CHAR [OCTAL_CHAR [OCTAL_CHAR]] * OCTAL_CHAR ::= (0|1|2|3|4|5|6|7) * HEX ::= '\' (x|X) HEX_CHAR [HEX_CHAR]] * HEX_CHAR ::= (0|1|2|3|4|5|6|7|8|9|A|B|C|D|E|F|a|b|c|d|e|f) * */ static int nextch( FILE *fp, int *lastch) { int c; if (*lastch != 0) { c = *lastch; *lastch = 0; } else { c = getc(fp); if (c == '\\') { c = getc(fp); if (c == '\n') { c = getc(fp); } else { ungetc(c, fp); c = '\\'; } } } return(c); } static void putbackch( int c, int *lastch) { *lastch = c; } #define ENDOFFILE 0 #define ENDOFLINE 1 #define COLON 2 #define LESS 3 #define GREATER 4 #define EXCLAM 5 #define TILDE 6 #define STRING 7 #define KEY 8 #define ERROR 9 #ifndef isalnum #define isalnum(c) \ (('0' <= (c) && (c) <= '9') || \ ('A' <= (c) && (c) <= 'Z') || \ ('a' <= (c) && (c) <= 'z')) #endif static int nexttoken( FILE *fp, char *tokenbuf, int *lastch) { int c; int token; char *p; int i, j; while ((c = nextch(fp, lastch)) == ' ' || c == '\t') { } switch (c) { case EOF: token = ENDOFFILE; break; case '\n': token = ENDOFLINE; break; case '<': token = LESS; break; case '>': token = GREATER; break; case ':': token = COLON; break; case '!': token = EXCLAM; break; case '~': token = TILDE; break; case '"': p = tokenbuf; while ((c = nextch(fp, lastch)) != '"') { if (c == '\n' || c == EOF) { putbackch(c, lastch); token = ERROR; goto string_error; } else if (c == '\\') { c = nextch(fp, lastch); switch (c) { case '\\': case '"': *p++ = c; break; case 'n': *p++ = '\n'; break; case 'r': *p++ = '\r'; break; case 't': *p++ = '\t'; break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': i = c - '0'; c = nextch(fp, lastch); for (j = 0; j < 2 && c >= '0' && c <= '7'; j++) { i <<= 3; i += c - '0'; c = nextch(fp, lastch); } putbackch(c, lastch); *p++ = (char)i; break; case 'X': case 'x': i = 0; for (j = 0; j < 2; j++) { c = nextch(fp, lastch); i <<= 4; if (c >= '0' && c <= '9') { i += c - '0'; } else if (c >= 'A' && c <= 'F') { i += c - 'A' + 10; } else if (c >= 'a' && c <= 'f') { i += c - 'a' + 10; } else { putbackch(c, lastch); i >>= 4; break; } } if (j == 0) { token = ERROR; goto string_error; } *p++ = (char)i; break; case EOF: putbackch(c, lastch); token = ERROR; goto string_error; default: *p++ = c; break; } } else { *p++ = c; } } *p = '\0'; token = STRING; break; case '#': while ((c = nextch(fp, lastch)) != '\n' && c != EOF) { } if (c == '\n') { token = ENDOFLINE; } else { token = ENDOFFILE; } break; default: if (isalnum(c) || c == '_' || c == '-') { p = tokenbuf; *p++ = c; c = nextch(fp, lastch); while (isalnum(c) || c == '_' || c == '-') { *p++ = c; c = nextch(fp, lastch); } *p = '\0'; putbackch(c, lastch); token = KEY; } else { token = ERROR; } break; } string_error: return(token); } static long modmask( char *name) { struct _modtbl { const char name[6]; long mask; }; static const struct _modtbl tbl[] = { { "Ctrl", ControlMask }, { "Lock", LockMask }, { "Caps", LockMask }, { "Shift", ShiftMask }, { "Alt", Mod1Mask }, { "Meta", Mod1Mask }}; int i, num_entries = sizeof (tbl) / sizeof (tbl[0]); for (i = 0; i < num_entries; i++) if (!strcmp (name, tbl[i].name)) return tbl[i].mask; return 0; } static char* TransFileName(Xim im, char *name) { char *home = NULL, *lcCompose = NULL; char dir[XLC_BUFSIZE] = ""; char *i = name, *ret = NULL, *j; size_t l = 0; while (*i) { if (*i == '%') { i++; switch (*i) { case '%': l++; break; case 'H': if (home == NULL) home = getenv("HOME"); if (home) { size_t Hsize = strlen(home); if (Hsize > PATH_MAX) /* your home directory length is ridiculous */ goto end; l += Hsize; } break; case 'L': if (lcCompose == NULL) lcCompose = _XlcFileName(im->core.lcd, COMPOSE_FILE); if (lcCompose) { size_t Lsize = strlen(lcCompose); if (Lsize > PATH_MAX) /* your compose pathname length is ridiculous */ goto end; l += Lsize; } break; case 'S': if (dir[0] == '\0') xlocaledir(dir, XLC_BUFSIZE); if (dir[0]) { size_t Ssize = strlen(dir); if (Ssize > PATH_MAX) /* your locale directory path length is ridiculous */ goto end; l += Ssize; } break; } } else { l++; } i++; if (l > PATH_MAX) /* your expanded path length is ridiculous */ goto end; } j = ret = Xmalloc(l+1); if (ret == NULL) goto end; i = name; while (*i) { if (*i == '%') { i++; switch (*i) { case '%': *j++ = '%'; break; case 'H': if (home) { strcpy(j, home); j += strlen(home); } break; case 'L': if (lcCompose) { strcpy(j, lcCompose); j += strlen(lcCompose); } break; case 'S': strcpy(j, dir); j += strlen(dir); break; } i++; } else { *j++ = *i++; } } *j = '\0'; end: Xfree(lcCompose); return ret; } #ifndef MB_LEN_MAX #define MB_LEN_MAX 6 #endif static int get_mb_string (Xim im, char *buf, KeySym ks) { XPointer from, to; int from_len, to_len, len; XPointer args[1]; XlcCharSet charset; char local_buf[MB_LEN_MAX]; unsigned int ucs; ucs = KeySymToUcs4(ks); from = (XPointer) &ucs; to = (XPointer) local_buf; from_len = 1; to_len = MB_LEN_MAX; args[0] = (XPointer) &charset; if (_XlcConvert(im->private.local.ucstoc_conv, &from, &from_len, &to, &to_len, args, 1 ) != 0) { return 0; } from = (XPointer) local_buf; to = (XPointer) buf; from_len = MB_LEN_MAX - to_len; to_len = MB_LEN_MAX + 1; args[0] = (XPointer) charset; if (_XlcConvert(im->private.local.cstomb_conv, &from, &from_len, &to, &to_len, args, 1 ) != 0) { return 0; } len = MB_LEN_MAX + 1 - to_len; buf[len] = '\0'; return len; } #define AllMask (ShiftMask | LockMask | ControlMask | Mod1Mask) #define LOCAL_WC_BUFSIZE 128 #define LOCAL_UTF8_BUFSIZE 256 #define SEQUENCE_MAX 10 static int parseline( FILE *fp, Xim im, char* tokenbuf, int depth) { int token; DTModifier modifier_mask; DTModifier modifier; DTModifier tmp; KeySym keysym = NoSymbol; DTIndex *top = &im->private.local.top; DefTreeBase *b = &im->private.local.base; DTIndex t; DefTree *p = NULL; Bool exclam, tilde; KeySym rhs_keysym = 0; char *rhs_string_mb; int l; int lastch = 0; char local_mb_buf[MB_LEN_MAX+1]; wchar_t local_wc_buf[LOCAL_WC_BUFSIZE], *rhs_string_wc; char local_utf8_buf[LOCAL_UTF8_BUFSIZE], *rhs_string_utf8; struct DefBuffer { DTModifier modifier_mask; DTModifier modifier; KeySym keysym; }; struct DefBuffer buf[SEQUENCE_MAX]; int i, n; do { token = nexttoken(fp, tokenbuf, &lastch); } while (token == ENDOFLINE); if (token == ENDOFFILE) { return(-1); } n = 0; do { if ((token == KEY) && (strcmp("include", tokenbuf) == 0)) { char *filename; FILE *infp; token = nexttoken(fp, tokenbuf, &lastch); if (token != KEY && token != STRING) goto error; if ((filename = TransFileName(im, tokenbuf)) == NULL) goto error; if (++depth > 100) goto error; infp = _XFopenFile(filename, "r"); Xfree(filename); if (infp == NULL) goto error; parsestringfile(infp, im, depth); fclose(infp); return (0); } else if ((token == KEY) && (strcmp("None", tokenbuf) == 0)) { modifier = 0; modifier_mask = AllMask; token = nexttoken(fp, tokenbuf, &lastch); } else { modifier_mask = modifier = 0; exclam = False; if (token == EXCLAM) { exclam = True; token = nexttoken(fp, tokenbuf, &lastch); } while (token == TILDE || token == KEY) { tilde = False; if (token == TILDE) { tilde = True; token = nexttoken(fp, tokenbuf, &lastch); if (token != KEY) goto error; } tmp = modmask(tokenbuf); if (!tmp) { goto error; } modifier_mask |= tmp; if (tilde) { modifier &= ~tmp; } else { modifier |= tmp; } token = nexttoken(fp, tokenbuf, &lastch); } if (exclam) { modifier_mask = AllMask; } } if (token != LESS) { goto error; } token = nexttoken(fp, tokenbuf, &lastch); if (token != KEY) { goto error; } token = nexttoken(fp, tokenbuf, &lastch); if (token != GREATER) { goto error; } keysym = XStringToKeysym(tokenbuf); if (keysym == NoSymbol) { goto error; } buf[n].keysym = keysym; buf[n].modifier = modifier; buf[n].modifier_mask = modifier_mask; n++; if( n >= SEQUENCE_MAX ) goto error; token = nexttoken(fp, tokenbuf, &lastch); } while (token != COLON); token = nexttoken(fp, tokenbuf, &lastch); if (token == STRING) { l = strlen(tokenbuf) + 1; while (b->mbused + l > b->mbsize) { DTCharIndex newsize = b->mbsize ? b->mbsize * 1.5 : 1024; char *newmb = Xrealloc (b->mb, newsize); if (newmb == NULL) goto error; b->mb = newmb; b->mbsize = newsize; } rhs_string_mb = &b->mb[b->mbused]; b->mbused += l; strcpy(rhs_string_mb, tokenbuf); token = nexttoken(fp, tokenbuf, &lastch); if (token == KEY) { rhs_keysym = XStringToKeysym(tokenbuf); if (rhs_keysym == NoSymbol) { goto error; } token = nexttoken(fp, tokenbuf, &lastch); } if (token != ENDOFLINE && token != ENDOFFILE) { goto error; } } else if (token == KEY) { rhs_keysym = XStringToKeysym(tokenbuf); if (rhs_keysym == NoSymbol) { goto error; } token = nexttoken(fp, tokenbuf, &lastch); if (token != ENDOFLINE && token != ENDOFFILE) { goto error; } l = get_mb_string(im, local_mb_buf, rhs_keysym); while (b->mbused + l + 1 > b->mbsize) { DTCharIndex newsize = b->mbsize ? b->mbsize * 1.5 : 1024; char *newmb = Xrealloc (b->mb, newsize); if (newmb == NULL) goto error; b->mb = newmb; b->mbsize = newsize; } rhs_string_mb = &b->mb[b->mbused]; b->mbused += l + 1; memcpy(rhs_string_mb, local_mb_buf, l); rhs_string_mb[l] = '\0'; } else { goto error; } l = _Xmbstowcs(local_wc_buf, rhs_string_mb, LOCAL_WC_BUFSIZE - 1); if (l == LOCAL_WC_BUFSIZE - 1) { local_wc_buf[l] = (wchar_t)'\0'; } while (b->wcused + l + 1 > b->wcsize) { DTCharIndex newsize = b->wcsize ? b->wcsize * 1.5 : 512; wchar_t *newwc = Xrealloc (b->wc, sizeof(wchar_t) * newsize); if (newwc == NULL) goto error; b->wc = newwc; b->wcsize = newsize; } rhs_string_wc = &b->wc[b->wcused]; b->wcused += l + 1; memcpy((char *)rhs_string_wc, (char *)local_wc_buf, (l + 1) * sizeof(wchar_t) ); l = _Xmbstoutf8(local_utf8_buf, rhs_string_mb, LOCAL_UTF8_BUFSIZE - 1); if (l == LOCAL_UTF8_BUFSIZE - 1) { local_utf8_buf[l] = '\0'; } while (b->utf8used + l + 1 > b->utf8size) { DTCharIndex newsize = b->utf8size ? b->utf8size * 1.5 : 1024; char *newutf8 = Xrealloc (b->utf8, newsize); if (newutf8 == NULL) goto error; b->utf8 = newutf8; b->utf8size = newsize; } rhs_string_utf8 = &b->utf8[b->utf8used]; b->utf8used += l + 1; memcpy(rhs_string_utf8, local_utf8_buf, l + 1); for (i = 0; i < n; i++) { for (t = *top; t; t = b->tree[t].next) { if (buf[i].keysym == b->tree[t].keysym && buf[i].modifier == b->tree[t].modifier && buf[i].modifier_mask == b->tree[t].modifier_mask) { break; } } if (t) { p = &b->tree[t]; top = &p->succession; } else { while (b->treeused >= b->treesize) { DefTree *old = b->tree; int oldsize = b->treesize; int newsize = b->treesize ? b->treesize * 1.5 : 256; DefTree *new = Xrealloc (b->tree, sizeof(DefTree) * newsize); if (new == NULL) goto error; b->tree = new; b->treesize = newsize; if (top >= (DTIndex *) old && top < (DTIndex *) &old[oldsize]) top = (DTIndex *) (((char *) top) + (((char *)b->tree)-(char *)old)); } p = &b->tree[b->treeused]; p->keysym = buf[i].keysym; p->modifier = buf[i].modifier; p->modifier_mask = buf[i].modifier_mask; p->succession = 0; p->next = *top; p->mb = 0; p->wc = 0; p->utf8 = 0; p->ks = NoSymbol; *top = b->treeused; top = &p->succession; b->treeused++; } } /* old entries no longer freed... */ p->mb = rhs_string_mb - b->mb; p->wc = rhs_string_wc - b->wc; p->utf8 = rhs_string_utf8 - b->utf8; p->ks = rhs_keysym; return(n); error: while (token != ENDOFLINE && token != ENDOFFILE) { token = nexttoken(fp, tokenbuf, &lastch); } return(0); } void _XimParseStringFile( FILE *fp, Xim im) { parsestringfile(fp, im, 0); } static void parsestringfile( FILE *fp, Xim im, int depth) { char tb[8192]; char* tbp; struct stat st; if (fstat (fileno (fp), &st) != -1) { unsigned long size = (unsigned long) st.st_size; if (st.st_size >= INT_MAX) return; if (size <= sizeof tb) tbp = tb; else tbp = malloc (size); if (tbp != NULL) { while (parseline(fp, im, tbp, depth) >= 0) {} if (tbp != tb) free (tbp); } } } == NULL) lcCompose = _XlcFileName(im->core.lcd, COMPOSE_FILE); if (lcCompose) { size_t Lsize = strlen(lcCompose); if (Lsize > PATH_MAX) /* your compose patlibX11-1.6.3/modules/im/ximcp/imThaiIc.c000064401431060000012000000143731247741723500201160ustar00alancstaff00002660200006/****************************************************************** Copyright 1992, 1993, 1994 by FUJITSU LIMITED Copyright 1993 by Digital Equipment Corporation Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of FUJITSU LIMITED and Digital Equipment Corporation not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED and Digital Equipment Corporation makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp Modifier: Franky Ling Digital Equipment Corporation frankyling@hgrd01.enet.dec.com ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include "Xlibint.h" #include "Xlcint.h" #include "Ximint.h" static void _XimThaiUnSetFocus( XIC xic) { Xic ic = (Xic)xic; ((Xim)ic->core.im)->private.local.current_ic = (XIC)NULL; if (ic->core.focus_window) _XUnregisterFilter(ic->core.im->core.display, ic->core.focus_window, _XimThaiFilter, (XPointer)ic); return; } static void _XimThaiDestroyIC( XIC xic) { Xic ic = (Xic)xic; DefTreeBase *b = &ic->private.local.base; if(((Xim)ic->core.im)->private.local.current_ic == (XIC)ic) { _XimThaiUnSetFocus(xic); } Xfree(ic->private.local.ic_resources); ic->private.local.ic_resources = NULL; Xfree (b->tree); b->tree = NULL; Xfree (b->mb); b->mb = NULL; Xfree (b->wc); b->wc = NULL; Xfree (b->utf8); b->utf8 = NULL; return; } static void _XimThaiSetFocus( XIC xic) { Xic ic = (Xic)xic; XIC current_ic = ((Xim)ic->core.im)->private.local.current_ic; if (current_ic == (XIC)ic) return; if (current_ic != (XIC)NULL) { _XimThaiUnSetFocus(current_ic); } ((Xim)ic->core.im)->private.local.current_ic = (XIC)ic; if (ic->core.focus_window) _XRegisterFilterByType(ic->core.im->core.display, ic->core.focus_window, KeyPress, KeyPress, _XimThaiFilter, (XPointer)ic); return; } static void _XimThaiReset( XIC xic) { Xic ic = (Xic)xic; DefTreeBase *b = &ic->private.local.base; ic->private.local.thai.comp_state = 0; ic->private.local.thai.keysym = 0; b->mb[b->tree[ic->private.local.composed].mb] = '\0'; b->wc[b->tree[ic->private.local.composed].wc] = '\0'; b->utf8[b->tree[ic->private.local.composed].utf8] = '\0'; } static char * _XimThaiMbReset( XIC xic) { _XimThaiReset(xic); return (char *)NULL; } static wchar_t * _XimThaiWcReset( XIC xic) { _XimThaiReset(xic); return (wchar_t *)NULL; } static XICMethodsRec Thai_ic_methods = { _XimThaiDestroyIC, /* destroy */ _XimThaiSetFocus, /* set_focus */ _XimThaiUnSetFocus, /* unset_focus */ _XimLocalSetICValues, /* set_values */ _XimLocalGetICValues, /* get_values */ _XimThaiMbReset, /* mb_reset */ _XimThaiWcReset, /* wc_reset */ _XimThaiMbReset, /* utf8_reset */ _XimLocalMbLookupString, /* mb_lookup_string */ _XimLocalWcLookupString, /* wc_lookup_string */ _XimLocalUtf8LookupString /* utf8_lookup_string */ }; XIC _XimThaiCreateIC( XIM im, XIMArg *values) { Xic ic; XimDefICValues ic_values; XIMResourceList res; unsigned int num; int len; DefTree *tree; if((ic = Xcalloc(1, sizeof(XicRec))) == (Xic)NULL) { return ((XIC)NULL); } ic->methods = &Thai_ic_methods; ic->core.im = im; ic->core.filter_events = KeyPressMask; if (! (ic->private.local.base.tree = tree = Xmalloc(sizeof(DefTree)*3)) ) goto Set_Error; if (! (ic->private.local.base.mb = Xmalloc(21)) ) goto Set_Error; if (! (ic->private.local.base.wc = Xmalloc(sizeof(wchar_t)*21)) ) goto Set_Error; if (! (ic->private.local.base.utf8 = Xmalloc(21)) ) goto Set_Error; ic->private.local.context = 1; tree[1].mb = 1; tree[1].wc = 1; tree[1].utf8 = 1; ic->private.local.composed = 2; tree[2].mb = 11; tree[2].wc = 11; tree[2].utf8 = 11; ic->private.local.thai.comp_state = 0; ic->private.local.thai.keysym = 0; ic->private.local.thai.input_mode = 0; num = im->core.ic_num_resources; len = sizeof(XIMResource) * num; if((res = Xmalloc(len)) == (XIMResourceList)NULL) { goto Set_Error; } (void)memcpy((char *)res, (char *)im->core.ic_resources, len); ic->private.local.ic_resources = res; ic->private.local.ic_num_resources = num; bzero((char *)&ic_values, sizeof(XimDefICValues)); if(_XimCheckLocalInputStyle(ic, (XPointer)&ic_values, values, im->core.styles, res, num) == False) { goto Set_Error; } _XimSetICMode(res, num, ic_values.input_style); if(_XimSetICValueData(ic, (XPointer)&ic_values, ic->private.local.ic_resources, ic->private.local.ic_num_resources, values, XIM_CREATEIC, True)) { goto Set_Error; } if(_XimSetICDefaults(ic, (XPointer)&ic_values, XIM_SETICDEFAULTS, res, num) == False) { goto Set_Error; } ic_values.filter_events = KeyPressMask; _XimSetCurrentICValues(ic, &ic_values); return ((XIC)ic); Set_Error : if (ic->private.local.ic_resources) { Xfree(ic->private.local.ic_resources); } Xfree(ic); return((XIC)NULL); } , NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp Modifier: Franky LinglibX11-1.6.3/modules/im/ximcp/Makefile.am000064401431060000012000000017651247741723500203200ustar00alancstaff00002660200006AM_CPPFLAGS= \ -I$(top_srcdir)/include \ -I$(top_srcdir)/include/X11 \ -I$(top_builddir)/include \ -I$(top_builddir)/include/X11 \ -I$(top_srcdir)/src/xcms \ -I$(top_srcdir)/src/xkb \ -I$(top_srcdir)/src/xlibi18n \ -I$(top_srcdir)/src \ -D_BSD_SOURCE -DXIM_t -DTRANS_CLIENT AM_CFLAGS= \ $(X11_CFLAGS) \ $(BIGFONT_CFLAGS) \ $(MALLOC_ZERO_CFLAGS) \ $(CWARNFLAGS) if XLIB_LOADABLE_I18N commonlibdir = $(X11_LOCALELIBDIR)/common commonlib_LTLIBRARIES=ximcp.la ximcp_la_LDFLAGS = -module -version-number 2:0:0 ximcp_la_LIBADD = $(I18N_MODULE_LIBS) else noinst_LTLIBRARIES=libximcp.la endif ximcp_la_SOURCES = \ imCallbk.c \ imDefFlt.c \ imDefIc.c \ imDefIm.c \ imDefLkup.c \ imDispch.c \ imEvToWire.c \ imExten.c \ imImSw.c \ imInsClbk.c \ imInt.c \ imLcFlt.c \ imLcGIc.c \ imLcIc.c \ imLcIm.c \ imLcLkup.c \ imLcPrs.c \ imLcSIc.c \ imRmAttr.c \ imRm.c \ imThaiFlt.c \ imThaiIc.c \ imThaiIm.c \ imTrans.c \ imTransR.c \ imTrX.c libximcp_la_SOURCES = $(ximcp_la_SOURCES) libX11-1.6.3/modules/im/ximcp/imLcIm.c000064401431060000012000000474221247741723500176020ustar00alancstaff00002660200006/****************************************************************** Copyright 1992, 1993, 1994 by FUJITSU LIMITED Copyright 1993 by Digital Equipment Corporation Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of FUJITSU LIMITED and Digital Equipment Corporation not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED and Digital Equipment Corporation makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp Modifier: Franky Ling Digital Equipment Corporation frankyling@hgrd01.enet.dec.com ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include "Xlibint.h" #include "Xlcint.h" #include "XlcPublic.h" #include "XlcPubI.h" #include "Ximint.h" #include #include #ifdef COMPOSECACHE # include # include # include # include #endif #ifdef COMPOSECACHE /* include trailing '/' for cache directory, file prefix otherwise */ #define XIM_GLOBAL_CACHE_DIR "/var/cache/libx11/compose/" #define XIM_HOME_CACHE_DIR "/.compose-cache/" #define XIM_CACHE_MAGIC ('X' | 'i'<<8 | 'm'<<16 | 'C'<<24) #define XIM_CACHE_VERSION 4 #define XIM_CACHE_TREE_ALIGNMENT 4 #define XIM_HASH_PRIME_1 13 #define XIM_HASH_PRIME_2 1234096939 typedef INT32 DTStructIndex; struct _XimCacheStruct { INT32 id; INT32 version; DTStructIndex tree; DTStructIndex mb; DTStructIndex wc; DTStructIndex utf8; DTStructIndex size; DTIndex top; DTIndex treeused; DTCharIndex mbused; DTCharIndex wcused; DTCharIndex utf8used; char fname[1]; /* char encoding[1] */ }; static struct _XimCacheStruct* _XimCache_mmap = NULL; static DefTreeBase _XimCachedDefaultTreeBase; static int _XimCachedDefaultTreeRefcount = 0; #endif Bool _XimCheckIfLocalProcessing(Xim im) { FILE *fp; char *name; if(strcmp(im->core.im_name, "") == 0) { name = _XlcFileName(im->core.lcd, COMPOSE_FILE); if (name != (char *)NULL) { fp = _XFopenFile (name, "r"); Xfree(name); if (fp != (FILE *)NULL) { fclose(fp); return(True); } } return(False); } else if(strcmp(im->core.im_name, "local") == 0 || strcmp(im->core.im_name, "none" ) == 0 ) { return(True); } return(False); } static void XimFreeDefaultTree( DefTreeBase *b) { if (!b) return; if (b->tree == NULL) return; #ifdef COMPOSECACHE if (b->tree == _XimCachedDefaultTreeBase.tree) { _XimCachedDefaultTreeRefcount--; /* No deleting, it's a cache after all. */ return; } #endif Xfree (b->tree); b->tree = NULL; Xfree (b->mb); b->mb = NULL; Xfree (b->wc); b->wc = NULL; Xfree (b->utf8); b->utf8 = NULL; b->treeused = b->treesize = 0; b->mbused = b->mbsize = 0; b->wcused = b->wcsize = 0; b->utf8used = b->utf8size = 0; } void _XimLocalIMFree( Xim im) { XimFreeDefaultTree(&im->private.local.base); im->private.local.top = 0; Xfree(im->core.im_resources); im->core.im_resources = NULL; Xfree(im->core.ic_resources); im->core.ic_resources = NULL; Xfree(im->core.im_values_list); im->core.im_values_list = NULL; Xfree(im->core.ic_values_list); im->core.ic_values_list = NULL; Xfree(im->core.styles); im->core.styles = NULL; Xfree(im->core.res_name); im->core.res_name = NULL; Xfree(im->core.res_class); im->core.res_class = NULL; Xfree(im->core.im_name); im->core.im_name = NULL; if (im->private.local.ctom_conv) { _XlcCloseConverter(im->private.local.ctom_conv); im->private.local.ctom_conv = NULL; } if (im->private.local.ctow_conv) { _XlcCloseConverter(im->private.local.ctow_conv); im->private.local.ctow_conv = NULL; } if (im->private.local.ctoutf8_conv) { _XlcCloseConverter(im->private.local.ctoutf8_conv); im->private.local.ctoutf8_conv = NULL; } if (im->private.local.cstomb_conv) { _XlcCloseConverter(im->private.local.cstomb_conv); im->private.local.cstomb_conv = NULL; } if (im->private.local.cstowc_conv) { _XlcCloseConverter(im->private.local.cstowc_conv); im->private.local.cstowc_conv = NULL; } if (im->private.local.cstoutf8_conv) { _XlcCloseConverter(im->private.local.cstoutf8_conv); im->private.local.cstoutf8_conv = NULL; } if (im->private.local.ucstoc_conv) { _XlcCloseConverter(im->private.local.ucstoc_conv); im->private.local.ucstoc_conv = NULL; } if (im->private.local.ucstoutf8_conv) { _XlcCloseConverter(im->private.local.ucstoutf8_conv); im->private.local.ucstoutf8_conv = NULL; } return; } static Status _XimLocalCloseIM( XIM xim) { Xim im = (Xim)xim; XIC ic; XIC next; ic = im->core.ic_chain; im->core.ic_chain = NULL; while (ic) { (*ic->methods->destroy) (ic); next = ic->core.next; Xfree (ic); ic = next; } _XimLocalIMFree(im); _XimDestroyIMStructureList(im); return(True); } char * _XimLocalGetIMValues( XIM xim, XIMArg *values) { Xim im = (Xim)xim; XimDefIMValues im_values; _XimGetCurrentIMValues(im, &im_values); return(_XimGetIMValueData(im, (XPointer)&im_values, values, im->core.im_resources, im->core.im_num_resources)); } char * _XimLocalSetIMValues( XIM xim, XIMArg *values) { Xim im = (Xim)xim; XimDefIMValues im_values; char *name = (char *)NULL; _XimGetCurrentIMValues(im, &im_values); name = _XimSetIMValueData(im, (XPointer)&im_values, values, im->core.im_resources, im->core.im_num_resources); _XimSetCurrentIMValues(im, &im_values); return(name); } #ifdef COMPOSECACHE static Bool _XimReadCachedDefaultTree( int fd_cache, const char *name, const char *encoding, DTStructIndex size) { struct _XimCacheStruct* m; int namelen = strlen (name) + 1; int encodinglen = strlen (encoding) + 1; m = mmap (NULL, size, PROT_READ, MAP_PRIVATE, fd_cache, 0); if (m == NULL || m == MAP_FAILED) return False; assert (m->id == XIM_CACHE_MAGIC); assert (m->version == XIM_CACHE_VERSION); if (size != m->size || size < XOffsetOf (struct _XimCacheStruct, fname) + namelen + encodinglen) { fprintf (stderr, "Ignoring broken XimCache %s [%s]\n", name, encoding); munmap (m, size); return False; } if (strncmp (name, m->fname, namelen) != 0) { /* m->fname may *not* be terminated - but who cares here */ fprintf (stderr, "Filename hash clash - expected %s, got %s\n", name, m->fname); munmap (m, size); return False; } if (strncmp (encoding, m->fname + namelen, encodinglen) != 0) { /* m->fname+namelen may *not* be terminated - but who cares here */ fprintf (stderr, "Enoding hash clash - expected %s, got %s\n", encoding, m->fname + namelen); munmap (m, size); return False; } _XimCache_mmap = m; _XimCachedDefaultTreeBase.tree = (DefTree *) (((char *) m) + m->tree); _XimCachedDefaultTreeBase.mb = (((char *) m) + m->mb); _XimCachedDefaultTreeBase.wc = (wchar_t *) (((char *) m) + m->wc); _XimCachedDefaultTreeBase.utf8 = (((char *) m) + m->utf8); _XimCachedDefaultTreeBase.treeused = m->treeused; _XimCachedDefaultTreeBase.mbused = m->mbused; _XimCachedDefaultTreeBase.wcused = m->wcused; _XimCachedDefaultTreeBase.utf8used = m->utf8used; /* treesize etc. is ignored because only used during parsing */ _XimCachedDefaultTreeRefcount = 0; /* fprintf (stderr, "read cached tree at %p: %s\n", (void *) m, name); */ return True; } static unsigned int strToHash ( const char *name) { unsigned int hash = 0; while (*name) hash = hash * XIM_HASH_PRIME_1 + *(unsigned const char *)name++; return hash % XIM_HASH_PRIME_2; } /* Returns read-only fd of cache file, -1 if none. * Sets *res to cache filename if safe. Sets *size to file size of cache. */ static int _XimCachedFileName ( const char *dir, const char *name, const char *intname, const char *encoding, uid_t uid, int isglobal, char **res, off_t *size) { struct stat st_name, st; int fd; unsigned int len, hash, hash2; struct _XimCacheStruct *m; /* There are some races here with 'dir', but we are either in our own home * or the global cache dir, and not inside some public writable dir */ /* fprintf (stderr, "XimCachedFileName for dir %s name %s intname %s encoding %s uid %d\n", dir, name, intname, encoding, uid); */ if (stat (name, &st_name) == -1 || ! S_ISREG (st_name.st_mode) || stat (dir, &st) == -1 || ! S_ISDIR (st.st_mode) || st.st_uid != uid || (st.st_mode & 0022) != 0000) { *res = NULL; return -1; } len = strlen (dir); hash = strToHash (intname); hash2 = strToHash (encoding); *res = Xmalloc (len + 1 + 27 + 1); /* Max VERSION 9999 */ if (len == 0 || dir [len-1] != '/') sprintf (*res, "%s/%c%d_%03x_%08x_%08x", dir, _XimGetMyEndian(), XIM_CACHE_VERSION, (unsigned int)sizeof (DefTree), hash, hash2); else sprintf (*res, "%s%c%d_%03x_%08x_%08x", dir, _XimGetMyEndian(), XIM_CACHE_VERSION, (unsigned int)sizeof (DefTree), hash, hash2); /* fprintf (stderr, "-> %s\n", *res); */ if ( (fd = _XOpenFile (*res, O_RDONLY)) == -1) return -1; if (fstat (fd, &st) == -1) { Xfree (*res); *res = NULL; close (fd); return -1; } *size = st.st_size; if (! S_ISREG (st.st_mode) || st.st_uid != uid || (st.st_mode & 0022) != 0000 || st.st_mtime <= st_name.st_mtime || (st.st_mtime < time (NULL) - 24*60*60 && ! isglobal)) { close (fd); if (unlink (*res) != 0) { Xfree (*res); *res = NULL; /* cache is not safe */ } return -1; } m = mmap (NULL, sizeof (struct _XimCacheStruct), PROT_READ, MAP_PRIVATE, fd, 0); if (m == NULL || m == MAP_FAILED) { close (fd); Xfree (*res); *res = NULL; return -1; } if (*size < sizeof (struct _XimCacheStruct) || m->id != XIM_CACHE_MAGIC) { munmap (m, sizeof (struct _XimCacheStruct)); close (fd); fprintf (stderr, "Ignoring broken XimCache %s\n", *res); Xfree (*res); *res = NULL; return -1; } if (m->version != XIM_CACHE_VERSION) { munmap (m, sizeof (struct _XimCacheStruct)); close (fd); if (unlink (*res) != 0) { Xfree (*res); *res = NULL; /* cache is not safe */ } return -1; } munmap (m, sizeof (struct _XimCacheStruct)); return fd; } static Bool _XimLoadCache ( int fd, const char *name, const char *encoding, off_t size, Xim im) { if (_XimCache_mmap || _XimReadCachedDefaultTree (fd, name, encoding, size)) { _XimCachedDefaultTreeRefcount++; memcpy (&im->private.local.base, &_XimCachedDefaultTreeBase, sizeof (_XimCachedDefaultTreeBase)); im->private.local.top = _XimCache_mmap->top; return True; } return False; } static void _XimWriteCachedDefaultTree( const char *name, const char *encoding, const char *cachename, Xim im) { int fd; FILE *fp; struct _XimCacheStruct *m; int msize = (XOffsetOf(struct _XimCacheStruct, fname) + strlen(name) + strlen(encoding) + 2 + XIM_CACHE_TREE_ALIGNMENT-1) & -XIM_CACHE_TREE_ALIGNMENT; DefTreeBase *b = &im->private.local.base; if (! b->tree && ! (b->tree = Xmalloc (sizeof(DefTree))) ) return; if (! b->mb && ! (b->mb = Xmalloc (1)) ) return; if (! b->wc && ! (b->wc = Xmalloc (sizeof(wchar_t))) ) return; if (! b->utf8 && ! (b->utf8 = Xmalloc (1)) ) return; /* First entry is always unused */ memset (b->tree, 0, sizeof(DefTree)); b->mb[0] = 0; b->wc[0] = 0; b->utf8[0] = 0; m = Xmalloc (msize); memset (m, 0, msize); m->id = XIM_CACHE_MAGIC; m->version = XIM_CACHE_VERSION; m->top = im->private.local.top; m->treeused = b->treeused; m->mbused = b->mbused; m->wcused = b->wcused; m->utf8used = b->utf8used; /* Tree first, then wide chars, then the rest due to alignment */ m->tree = msize; m->wc = msize + sizeof (DefTree) * m->treeused; m->mb = m->wc + sizeof (wchar_t) * m->wcused; m->utf8 = m->mb + m->mbused; m->size = m->utf8 + m->utf8used; strcpy (m->fname, name); strcpy (m->fname+strlen(name)+1, encoding); /* This STILL might be racy on NFS */ if ( (fd = _XOpenFileMode (cachename, O_WRONLY | O_CREAT | O_EXCL, 0600)) < 0) { Xfree(m); return; } if (! (fp = fdopen (fd, "wb")) ) { close (fd); Xfree(m); return; } fwrite (m, msize, 1, fp); fwrite (im->private.local.base.tree, sizeof(DefTree), m->treeused, fp); fwrite (im->private.local.base.wc, sizeof(wchar_t), m->wcused, fp); fwrite (im->private.local.base.mb, 1, m->mbused, fp); fwrite (im->private.local.base.utf8, 1, m->utf8used, fp); if (fclose (fp) != 0) unlink (cachename); _XimCache_mmap = m; memcpy (&_XimCachedDefaultTreeBase, &im->private.local.base, sizeof (_XimCachedDefaultTreeBase)); /* fprintf (stderr, "wrote tree %s size %ld to %s\n", name, m->size, cachename); */ } #endif static void _XimCreateDefaultTree( Xim im) { FILE *fp = NULL; char *name, *tmpname = NULL, *intname; char *cachename = NULL; /* Should use getpwent() instead of $HOME (cross-platform?) */ char *home = getenv("HOME"); char *cachedir = NULL; char *tmpcachedir = NULL; int hl = home ? strlen (home) : 0; #ifdef COMPOSECACHE const char *encoding = nl_langinfo (CODESET); uid_t euid = geteuid (); gid_t egid = getegid (); int cachefd = -1; off_t size; #endif name = getenv("XCOMPOSEFILE"); if (name == (char *) NULL) { if (home != (char *) NULL) { tmpname = name = Xmalloc(hl + 10 + 1); if (name != (char *) NULL) { int fd; strcpy(name, home); strcpy(name + hl, "/.XCompose"); if ( (fd = _XOpenFile (name, O_RDONLY)) < 0) { Xfree (name); name = tmpname = NULL; } else close (fd); } } } if (name == (char *) NULL) { tmpname = name = _XlcFileName(im->core.lcd, COMPOSE_FILE); } intname = name; #ifdef COMPOSECACHE if (getuid () == euid && getgid () == egid && euid != 0) { char *c; /* Usage: XCOMPOSECACHE=[=] * cachedir: directory of cache files * filename: internally used name for cache file */ cachedir = getenv("XCOMPOSECACHE"); if (cachedir && (c = strchr (cachedir, '='))) { tmpcachedir = strdup (cachedir); intname = tmpcachedir + (c-cachedir) + 1; tmpcachedir[c-cachedir] = '\0'; cachedir = tmpcachedir; } } if (! cachedir) { cachefd = _XimCachedFileName (XIM_GLOBAL_CACHE_DIR, name, intname, encoding, 0, 1, &cachename, &size); if (cachefd != -1) { if (_XimLoadCache (cachefd, intname, encoding, size, im)) { Xfree (tmpcachedir); Xfree (tmpname); Xfree (cachename); close (cachefd); return; } close (cachefd); } Xfree (cachename); cachename = NULL; } if (getuid () == euid && getgid () == egid && euid != 0 && home) { if (! cachedir) { tmpcachedir = cachedir = Xmalloc (hl+strlen(XIM_HOME_CACHE_DIR)+1); strcpy (cachedir, home); strcat (cachedir, XIM_HOME_CACHE_DIR); } cachefd = _XimCachedFileName (cachedir, name, intname, encoding, euid, 0, &cachename, &size); if (cachefd != -1) { if (_XimLoadCache (cachefd, intname, encoding, size, im)) { Xfree (tmpcachedir); Xfree (tmpname); Xfree (cachename); close (cachefd); return; } close (cachefd); } } #endif if (! (fp = _XFopenFile (name, "r"))) { Xfree (tmpcachedir); Xfree (tmpname); Xfree (cachename); return; } _XimParseStringFile(fp, im); fclose(fp); #ifdef COMPOSECACHE if (cachename) { assert (euid != 0); _XimWriteCachedDefaultTree (intname, encoding, cachename, im); } #endif Xfree (tmpcachedir); Xfree (tmpname); Xfree (cachename); } static XIMMethodsRec Xim_im_local_methods = { _XimLocalCloseIM, /* close */ _XimLocalSetIMValues, /* set_values */ _XimLocalGetIMValues, /* get_values */ _XimLocalCreateIC, /* create_ic */ _XimLcctstombs, /* ctstombs */ _XimLcctstowcs, /* ctstowcs */ _XimLcctstoutf8 /* ctstoutf8 */ }; Bool _XimLocalOpenIM( Xim im) { XLCd lcd = im->core.lcd; XlcConv conv; XimDefIMValues im_values; XimLocalPrivateRec* private = &im->private.local; _XimInitialResourceInfo(); if(_XimSetIMResourceList(&im->core.im_resources, &im->core.im_num_resources) == False) { goto Open_Error; } if(_XimSetICResourceList(&im->core.ic_resources, &im->core.ic_num_resources) == False) { goto Open_Error; } _XimSetIMMode(im->core.im_resources, im->core.im_num_resources); _XimGetCurrentIMValues(im, &im_values); if(_XimSetLocalIMDefaults(im, (XPointer)&im_values, im->core.im_resources, im->core.im_num_resources) == False) { goto Open_Error; } _XimSetCurrentIMValues(im, &im_values); if (!(conv = _XlcOpenConverter(lcd, XlcNCompoundText, lcd, XlcNMultiByte))) goto Open_Error; private->ctom_conv = conv; if (!(conv = _XlcOpenConverter(lcd, XlcNCompoundText, lcd, XlcNWideChar))) goto Open_Error; private->ctow_conv = conv; if (!(conv = _XlcOpenConverter(lcd, XlcNCompoundText, lcd, XlcNUtf8String))) goto Open_Error; private->ctoutf8_conv = conv; if (!(conv = _XlcOpenConverter(lcd, XlcNCharSet, lcd, XlcNMultiByte))) goto Open_Error; private->cstomb_conv = conv; if (!(conv = _XlcOpenConverter(lcd, XlcNCharSet, lcd, XlcNWideChar))) goto Open_Error; private->cstowc_conv = conv; if (!(conv = _XlcOpenConverter(lcd, XlcNCharSet, lcd, XlcNUtf8String))) goto Open_Error; private->cstoutf8_conv = conv; if (!(conv = _XlcOpenConverter(lcd, XlcNUcsChar, lcd, XlcNChar))) goto Open_Error; private->ucstoc_conv = conv; if (!(conv = _XlcOpenConverter(lcd, XlcNUcsChar, lcd, XlcNUtf8String))) goto Open_Error; private->ucstoutf8_conv = conv; private->base.treeused = 1; private->base.mbused = 1; private->base.wcused = 1; private->base.utf8used = 1; _XimCreateDefaultTree(im); im->methods = &Xim_im_local_methods; private->current_ic = (XIC)NULL; return(True); Open_Error : _XimLocalIMFree(im); return(False); } S_ISDIR (st.st_mode) || st.st_uid != uid || (st.st_mode & 0022) != 0000) { *res = NULL; return -1; } len = strlen (dir); hash = strToHash (intname); hash2 = strToHash (encoding); *res = XmalloclibX11-1.6.3/modules/im/ximcp/imLcGIc.c000064401431060000012000000034311247741723500176670ustar00alancstaff00002660200006/****************************************************************** Copyright 1992,1993, 1994 by FUJITSU LIMITED Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of FUJITSU LIMITED not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xlcint.h" #include "Ximint.h" char * _XimLocalGetICValues(XIC xic, XIMArg *values) { Xic ic = (Xic)xic; XimDefICValues ic_values; _XimGetCurrentICValues(ic, &ic_values); return(_XimGetICValueData(ic, (XPointer)&ic_values, ic->private.local.ic_resources, ic->private.local.ic_num_resources, values, XIM_GETICVALUES)); } libX11-1.6.3/modules/im/ximcp/imCallbk.c000064401431060000012000000473561247741723500201540ustar00alancstaff00002660200006/*********************************************************************** Copyright 1993 by Digital Equipment Corporation, Maynard, Massachusetts, Copyright 1994 by FUJITSU LIMITED Copyright 1994 by Sony Corporation All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the names of Digital, FUJITSU LIMITED and Sony Corporation not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL, FUJITSU LIMITED AND SONY CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL, FUJITSU LIMITED AND SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Hiroyuki Miyamoto Digital Equipment Corporation miyamoto@jrd.dec.com Modifier: Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp Makoto Wakamatsu Sony Corporation makoto@sm.sony.co.jp ***********************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xlcint.h" #include "Ximint.h" #include "XlcPubI.h" #define sz_CARD8 1 #define sz_INT8 1 #define sz_CARD16 2 #define sz_INT16 2 #define sz_BITMASK16 sz_CARD16 #define sz_CARD32 4 #define sz_INT32 4 #define sz_BITMASK32 sz_CARD32 #define sz_XIMID sizeof(XIMID) #define sz_XICID sizeof(XICID) #define sz_XIMATTRID sizeof(XIMATTRID) #define sz_XICATTRID sizeof(XICATTRID) #define sz_ximPacketHeader (XIM_HEADER_SIZE + sz_XIMID + sz_XICID) #define sz_ximGeometry 0 #define sz_ximStrConversion (sz_CARD32 + sz_CARD32 + sz_CARD32 + sz_CARD32) #define sz_ximPreeditStart 0 #define sz_ximPreeditStartReply sz_INT32 #define sz_ximPreeditCaret (sz_INT32 + sz_CARD32 + sz_CARD32) #define sz_ximPreeditCaretReply sz_CARD32 #define sz_ximPreeditDone 0 #define sz_ximStatusStart 0 #define sz_ximStatusDone 0 typedef enum { XimCbSuccess, XimCbNoCallback, XimCbError, XimCbQueued, XimCbBadContextID, XimCbBadOpcode } XimCbStatus; typedef XimCbStatus (*XimCb)( Xim, Xic, char*, int ); #define PACKET_TO_MAJOROPCODE(p) (*(CARD8*)((CARD8*)(p))) #define PACKET_TO_MINOROPCODE(p) (*(CARD8*)((CARD8*)(p) + sz_CARD8)) #define PACKET_TO_LENGTH(p) (*(CARD16*)((CARD8*)(p) + sz_CARD8 + sz_CARD8)) #define PACKET_TO_IMID(p) (*(XIMID*)((CARD8*)(p) + XIM_HEADER_SIZE)) #define PACKET_TO_ICID(p) (*(XICID*)((CARD8*)(p) + XIM_HEADER_SIZE + sz_XIMID)) #define _XimWriteData(im,len,data) \ (im->private.proto.write((im),(len),(XPointer)(data))) #define _XimReadData(im,buf,buf_len,len) \ (im->private.proto.read((im),(XPointer)(buf),(buf_len),&(len))) #define _XimFlushData(im) im->private.proto.flush((im)) static XimCbStatus _XimGeometryCallback(Xim, Xic, char*, int); static XimCbStatus _XimStrConversionCallback(Xim, Xic, char*, int); static XimCbStatus _XimPreeditStartCallback(Xim, Xic, char*, int); static XimCbStatus _XimPreeditDoneCallback(Xim, Xic, char*, int); static void _free_memory_for_text(XIMText*); static XimCbStatus _XimPreeditDrawCallback(Xim, Xic, char*, int); static XimCbStatus _XimPreeditCaretCallback(Xim, Xic, char*, int); static XimCbStatus _XimStatusStartCallback(Xim, Xic, char*, int); static XimCbStatus _XimStatusDoneCallback(Xim, Xic, char*, int); static XimCbStatus _XimStatusDrawCallback(Xim, Xic, char*, int); static XimCbStatus _XimPreeditStateNotifyCallback(Xim, Xic, char *, int); #if defined(__STDC__) && ((defined(sun) && defined(SVR4)) || defined(WIN32)) #define RConst /**/ #else #define RConst const #endif /* NOTE: * the table below depends on the protocol number * defined in the IM Protocol document. */ static RConst XimCb callback_table[] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* #000-009 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* #010-019 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* #020-029 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* #030-039 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* #040-049 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* #050-059 */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /* #060-069 */ _XimGeometryCallback, /* #070 */ _XimStrConversionCallback, /* #071 */ NULL, /* #072 */ _XimPreeditStartCallback, /* #073 */ NULL, /* #074 */ _XimPreeditDrawCallback, /* #075 */ _XimPreeditCaretCallback, /* #076 */ NULL, /* #077 */ _XimPreeditDoneCallback, /* #078 */ _XimStatusStartCallback, /* #079 */ _XimStatusDrawCallback, /* #080 */ _XimStatusDoneCallback, /* #081 */ _XimPreeditStateNotifyCallback /* #082 */ }; static Bool _XimIsReadyForProcess(Xic ic) { return(!ic->private.proto.waitCallback); /* check HM */ } static void _XimProcessPendingCallbacks(Xic ic) { XimPendingCallback pcbq; while (((pcbq = ic->private.proto.pend_cb_que) != (XimPendingCallback)NULL) && _XimIsReadyForProcess(ic)) { (void) (*callback_table[pcbq->major_opcode])(pcbq->im, pcbq->ic, pcbq->proto, pcbq->proto_len); ic->private.proto.pend_cb_que = pcbq->next; Xfree(pcbq->proto); /* free memory of XimPendingCallback */ Xfree(pcbq); } } static void _XimPutCbIntoQueue(Xic ic, XimPendingCallback call_data) { XimPendingCallback pcbq = ic->private.proto.pend_cb_que; /* Queuing is FIFO */ while (pcbq != (XimPendingCallback)NULL) { if (pcbq->next == (XimPendingCallback)NULL) { break; } pcbq = pcbq->next; } if (pcbq == (XimPendingCallback)NULL) { ic->private.proto.pend_cb_que = call_data; } else { pcbq->next = call_data; } } Bool _XimCbDispatch(Xim xim, INT16 len, XPointer data, XPointer call_data) { /* `data' points to the beginning of the packet defined in IM Protocol doc. */ int major_opcode = PACKET_TO_MAJOROPCODE(data); XIMID imid = PACKET_TO_IMID(data); XICID icid = PACKET_TO_ICID(data); Xim im = (Xim)call_data; /* check HM */ Xic ic = _XimICOfXICID(im, icid); char* proto; int proto_len; /* check validity of im/ic */ if ((imid != im->private.proto.imid) || !ic) { return False; /* status = XimCbBadContextID; */ } /* process pending callbacks */ _XimProcessPendingCallbacks(ic); /* check if the protocol should be processed here */ if (major_opcode > 82) { return False; /* status = XimCbBadOpcode; */ } if (!callback_table[major_opcode]) { return False; /* status = XimCbBadOpcode; */ } /* move the pointer ahead by the IM Protocol packet header size */ proto = (char*)data + sz_ximPacketHeader; proto_len = (int)len - sz_ximPacketHeader; /* check if it can be processed right away * and if no, queue the protocol, otherwise invoke a callback */ if (!_XimIsReadyForProcess(ic)) { /* queue the protocol */ XimPendingCallback pcb; char *proto_buf = (proto_len > 0) ? Xmalloc(proto_len) : NULL; pcb = Xmalloc(sizeof(XimPendingCallbackRec)); if (pcb && (proto_len <= 0 || proto_buf)) { if (proto_len > 0) memcpy(proto_buf, proto, proto_len); pcb->major_opcode = major_opcode; pcb->im = im; pcb->ic = ic; pcb->proto = proto_buf; pcb->proto_len = proto_len; pcb->next = (XimPendingCallback)NULL; /* queue is FIFO */ _XimPutCbIntoQueue(ic, pcb); /* status = XimCbQueued; */ } else { /* status = XimCbError; */ Xfree(pcb); Xfree(proto_buf); } } else { /* invoke each callback according to the major opcode. * `proto' points to the next address of IM-ID and IC-ID. * `proto_len' specifies the packet length. */ (void) (*callback_table[major_opcode])(im, ic, proto, proto_len); } return True; } static XimCbStatus _XimGeometryCallback(Xim im, Xic ic, char* proto, int len) { XICCallback* cb = &ic->core.geometry_callback; /* invoke the callack */ if (cb && cb->callback) { (*cb->callback)((XIC)ic, cb->client_data, (XPointer)NULL); } else { /* no callback registered */ return XimCbNoCallback; } return XimCbSuccess; } static XimCbStatus _XimStrConversionCallback(Xim im, Xic ic, char* proto, int len) { XICCallback* cb = &ic->core.string_conversion_callback; /* check HM */ XIMStringConversionCallbackStruct cbrec; /* invoke the callback */ if (cb && cb->callback) { int p = XIM_HEADER_SIZE; cbrec.position = (XIMStringConversionPosition) *(CARD32*)&proto[p]; p += sz_CARD32; cbrec.direction = (XIMCaretDirection) *(CARD32*)&proto[p]; p += sz_CARD32; cbrec.operation = (XIMStringConversionOperation) *(CARD32*)&proto[p]; p += sz_CARD32; cbrec.factor = (unsigned short) *(CARD32*)&proto[p]; (*cb->callback)((XIC)ic, cb->client_data, (XPointer)&cbrec); } else { /* no callback registered */ _XimError(im, ic, (CARD16)XIM_BadSomething, (INT16)len, (CARD16)XIM_STR_CONVERSION, (char*)proto); /* send XIM_ERROR */ return XimCbNoCallback; } /* send a reply */ { CARD8 *buf; INT16 buf_len; int p, length_in_bytes, i; /* Assumption: * `cbrec.text->length' means the string length in characters */ { length_in_bytes = (cbrec.text->encoding_is_wchar)? sizeof(wchar_t) * cbrec.text->length: /* wchar */ strlen(cbrec.text->string.mbs); /* mb */ buf_len = XIM_HEADER_SIZE + sz_CARD16 + 2 + length_in_bytes + XIM_PAD(2 + length_in_bytes) + 2 + 2 + sz_CARD32 * cbrec.text->length; buf = Xmalloc(buf_len); } _XimSetHeader((XPointer)buf, XIM_STR_CONVERSION_REPLY, 0, &buf_len); buf_len -= XIM_HEADER_SIZE; /* added by _XimSetHeader (HACK) */ p = XIM_HEADER_SIZE; *(CARD16*)&buf[p] = (CARD16)im->private.proto.imid; p += sz_CARD16; *(CARD16*)&buf[p] = (CARD16)ic->private.proto.icid; p += sz_CARD16; *(CARD16*)&buf[p] = (CARD16)cbrec.text->length; p += sz_CARD16; memcpy(&buf[p],&cbrec.text->string.mbs,length_in_bytes); p += length_in_bytes; *(CARD16*)&buf[p] = (CARD16)(sz_CARD32*cbrec.text->length); p += XIM_PAD(2); for (i = 0; i < (int)cbrec.text->length; i++) { *(CARD32*)&buf[p] = (CARD32)cbrec.text->feedback[i]; p += sz_CARD32; } if (!(_XimWriteData(im, buf_len, buf))) { return XimCbError; } _XimFlushData(im); Xfree(buf); } return XimCbSuccess; } static XimCbStatus _XimPreeditStartCallback(Xim im, Xic ic, char* proto, int len) { XICCallback* cb = &ic->core.preedit_attr.start_callback; int ret; /* invoke the callback */ if (cb && cb->callback){ ret = (*(cb->callback))((XIC)ic, cb->client_data, (XPointer)NULL); } else { /* no callback registered */ _XimError(im, ic, (CARD16)XIM_BadSomething, (INT16)len, (CARD16)XIM_PREEDIT_START, (char*)proto); /* send XIM_ERROR */ return XimCbNoCallback; } /* send a reply */ { CARD32 buf32[(sz_ximPacketHeader + sz_ximPreeditStartReply) / 4]; CARD8 *buf = (CARD8 *)buf32; INT16 buf_len = sz_XIMID + sz_XICID + sz_ximPreeditStartReply; int p; _XimSetHeader((XPointer)buf, XIM_PREEDIT_START_REPLY, 0, &buf_len); p = XIM_HEADER_SIZE; *(CARD16*)&buf[p] = (CARD16)im->private.proto.imid; p += sz_CARD16; *(CARD16*)&buf[p] = (CARD16)ic->private.proto.icid; p += sz_CARD16; *(INT32*)&buf[p] = (INT32)ret; if (!(_XimWriteData(im, buf_len, buf))) { return XimCbError; } _XimFlushData(im); } return XimCbSuccess; } static XimCbStatus _XimPreeditDoneCallback(Xim im, Xic ic, char* proto, int len) { XICCallback* cb = &ic->core.preedit_attr.done_callback; /* invoke the callback */ if (cb && cb->callback) { (*cb->callback)((XIC)ic, cb->client_data, (XPointer)NULL); } else { /* no callback registered */ return XimCbNoCallback; } return XimCbSuccess; } static void _read_text_from_packet(Xim im, char* buf, XIMText** text_ptr) { int status; XIMText* text; int tmp_len; char* tmp_buf; Status s = 0; status = (int)*(BITMASK32*)buf; buf += sz_BITMASK32; /* string part */ if (status & 0x00000001) /* "no string" bit on */ { buf += sz_CARD16; /* skip "length of preedit string" */ buf += 2; /* pad */ *text_ptr = (XIMText*)NULL; return; } *text_ptr = text = Xmalloc(sizeof(XIMText)); if (text == (XIMText*)NULL) return; tmp_len = (int)*(CARD16*)buf; buf += sz_CARD16; if ((tmp_buf = Xmalloc(tmp_len + 1))) { memcpy(tmp_buf, buf, tmp_len); tmp_buf[tmp_len] = '\0'; text->encoding_is_wchar = False; text->length = im->methods->ctstombs((XIM)im, tmp_buf, tmp_len, NULL, 0, &s); /* CT? HM */ if (s != XLookupNone) { #ifndef NO_DEC_I18N_FIX /* Allow for NULL-terminated */ if ((text->string.multi_byte = Xmalloc(text->length * XLC_PUBLIC(im->core.lcd,mb_cur_max) + 1))) { #else if (text->string.multi_byte = Xmalloc(text->length+1)) { #endif int tmp; #ifndef NO_DEC_I18N_FIX char *char_tmp; int char_len; #endif tmp = im->methods->ctstombs((XIM)im, tmp_buf, tmp_len, #ifndef NO_DEC_I18N_FIX text->string.multi_byte, text->length * XLC_PUBLIC(im->core.lcd,mb_cur_max) + 1, #else text->string.multi_byte, text->length, #endif &s); text->string.multi_byte[tmp] = '\0'; #ifndef NO_DEC_I18N_FIX text->length = 0; char_tmp = text->string.multi_byte; while (*char_tmp != '\0') { char_len = mblen(char_tmp, strlen(char_tmp)); char_tmp = char_tmp + char_len; (text->length)++; } #endif } } else { text->length = 0; text->string.multi_byte = NULL; } Xfree(tmp_buf); } buf += tmp_len; buf += XIM_PAD(sz_CARD16 + tmp_len); /* pad */ /* feedback part */ if (status & 0x00000002) /* "no feedback" bit on */ { text->feedback = (XIMFeedback*)NULL; } else { int i, j; i = (int)*(CARD16*)buf; buf += sz_CARD16; buf += sz_CARD16; /* skip `unused' */ text->feedback = Xmalloc(i*(sizeof(XIMFeedback)/sizeof(CARD32))); j = 0; while (i > 0) { text->feedback[j] = (XIMFeedback)*(CARD32*)buf; buf += sz_CARD32; i -= sz_CARD32; j++; } /* * text->length tells how long both the status string and * the feedback array are. If there's "no string" the * text->length was set to zero previously. See above. * But if there is feedback (i.e. not "no feedback") then * we need to convey the length of the feedback array. * It might have been better if the protocol sent two * different values, one for the length of the status * string and one for the length of the feedback array. */ if (status & 0x00000001) /* "no string" bit on */ { text->length = j; } } } static void _free_memory_for_text(XIMText* text) { if (text) { Xfree(text->string.multi_byte); Xfree(text->feedback); Xfree(text); } } static XimCbStatus _XimPreeditDrawCallback(Xim im, Xic ic, char* proto, int len) { XICCallback* cb = &ic->core.preedit_attr.draw_callback; XIMPreeditDrawCallbackStruct cbs; /* invoke the callback */ if (cb && cb->callback) { cbs.caret = (int)*(INT32*)proto; proto += sz_INT32; cbs.chg_first = (int)*(INT32*)proto; proto += sz_INT32; cbs.chg_length = (int)*(INT32*)proto; proto += sz_INT32; _read_text_from_packet(im, proto, &cbs.text); (*cb->callback)((XIC)ic, cb->client_data, (XPointer)&cbs); _free_memory_for_text((XIMText*)cbs.text); } else { /* no callback registered */ return XimCbNoCallback; } return XimCbSuccess; } static XimCbStatus _XimPreeditCaretCallback(Xim im, Xic ic, char* proto, int len) { XICCallback* cb = &ic->core.preedit_attr.caret_callback; XIMPreeditCaretCallbackStruct cbs; /* invoke the callback */ if (cb && cb->callback) { cbs.position = (int)*(INT32*)proto; proto += sz_INT32; cbs.direction = (XIMCaretDirection)*(CARD32*)proto; proto += sz_CARD32; cbs.style = (XIMCaretStyle)*(CARD32*)proto; proto += sz_CARD32; (*cb->callback)((XIC)ic, cb->client_data, (XPointer)&cbs); } else { /* no callback registered */ _XimError(im, ic, (CARD16)XIM_BadSomething, (INT16)len, (CARD16)XIM_PREEDIT_CARET, (char*)proto); /* send XIM_ERROR */ return XimCbNoCallback; } /* Send a reply */ { CARD8 buf[sz_ximPacketHeader + sz_ximPreeditCaretReply]; INT16 len = sz_XIMID + sz_XICID + sz_ximPreeditCaretReply; int p; _XimSetHeader((XPointer)buf, XIM_PREEDIT_CARET_REPLY, 0, &len); p = XIM_HEADER_SIZE; *(CARD16*)&buf[p] = (CARD16)im->private.proto.imid; p += sz_CARD16; *(CARD16*)&buf[p] = (CARD16)ic->private.proto.icid; p += sz_CARD16; *(CARD32*)&buf[p] = (CARD32)cbs.position; if (!(_XimWriteData(im, len, buf))) { return XimCbError; } _XimFlushData(im); } return XimCbSuccess; } static XimCbStatus _XimStatusStartCallback(Xim im, Xic ic, char* proto, int len) { XICCallback* cb = &ic->core.status_attr.start_callback; /* invoke the callback */ if (cb && cb->callback) { (*cb->callback)((XIC)ic, cb->client_data, (XPointer)NULL); } else { /* no callback registered */ return XimCbNoCallback; } return XimCbSuccess; } static XimCbStatus _XimStatusDoneCallback(Xim im, Xic ic, char* proto, int len) { XICCallback* cb = &ic->core.status_attr.done_callback; /* invoke the callback */ if (cb && cb->callback) { (*cb->callback)((XIC)ic, cb->client_data, (XPointer)NULL); } else { /* no callback registered */ return XimCbNoCallback; } return XimCbSuccess; } static XimCbStatus _XimStatusDrawCallback(Xim im, Xic ic, char* proto, int len) { XICCallback* cb = &ic->core.status_attr.draw_callback; XIMStatusDrawCallbackStruct cbs; /* invoke the callback */ if (cb && cb->callback) { cbs.type = (XIMStatusDataType)*(CARD32*)proto; proto += sz_CARD32; if (cbs.type == XIMTextType) { _read_text_from_packet(im, proto, &cbs.data.text); } else if (cbs.type == XIMBitmapType) { cbs.data.bitmap = (Pixmap)*(CARD32*)proto; } (*cb->callback)((XIC)ic, cb->client_data, (XPointer)&cbs); if (cbs.type == XIMTextType) _free_memory_for_text((XIMText *)cbs.data.text); } else { /* no callback registered */ return XimCbNoCallback; } return XimCbSuccess; } static XimCbStatus _XimPreeditStateNotifyCallback( Xim im, Xic ic, char* proto, int len ) { XICCallback *cb = &ic->core.preedit_attr.state_notify_callback; /* invoke the callack */ if( cb && cb->callback ) { XIMPreeditStateNotifyCallbackStruct cbrec; cbrec.state = *(BITMASK32 *)proto; (*cb->callback)( (XIC)ic, cb->client_data, (XPointer)&cbrec ); } else { /* no callback registered */ return XimCbNoCallback; } return XimCbSuccess; } RROR */ return XimCbNoCallback; } /* send a reply */ { CARD8 *buf; INT16 buf_len; int p, length_in_bytes, i; /* Assumption: * `cbrec.text->length' means the string length in characters */ { length_in_bytes = (cbrec.text->encoding_is_wcharlibX11-1.6.3/modules/im/ximcp/imDefIm.c000064401431060000012000001371001247741723500177330ustar00alancstaff00002660200006/* * Copyright 1990, 1991, 1992 Oracle and/or its affiliates. All rights reserved. * * 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: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. */ /****************************************************************** Copyright 1992, 1993, 1994 by FUJITSU LIMITED Copyright 1993, 1994 by Sony Corporation Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the names of Digital, FUJITSU LIMITED and Sony Corporation not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. DIGITAL, FUJITSU LIMITED AND SONY CORPORATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL, FUJITSU LIMITED AND SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Hideki Hiura (hhiura@Sun.COM) Sun Microsystems, Inc. Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp Makoto Wakamatsu Sony Corporation makoto@sm.sony.co.jp ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #include "Xlibint.h" #include "Xlcint.h" #include "XlcPublic.h" #include "XlcPubI.h" #include "XimTrInt.h" #include "Ximint.h" int _XimCheckDataSize( XPointer buf, int len) { CARD16 *buf_s = (CARD16 *)buf; if(len < XIM_HEADER_SIZE) return -1; return buf_s[1]; } void _XimSetHeader( XPointer buf, CARD8 major_opcode, CARD8 minor_opcode, INT16 *len ) { CARD8 *buf_b = (CARD8 *)buf; CARD16 *buf_s = (CARD16 *)buf; buf_b[0] = major_opcode; buf_b[1] = minor_opcode; buf_s[1] = ((*len) / 4); *len += XIM_HEADER_SIZE; return; } char _XimGetMyEndian(void) { CARD16 test_card = 1; if(*((char *)&test_card)) return LITTLEENDIAN; else return BIGENDIAN; } static Bool _XimCheckServerName( Xim im, char *str) { char *server_name = im->core.im_name; int len; int str_len; int category_len = strlen(XIM_SERVER_CATEGORY); char *pp; register char *p; if(server_name && *server_name) len = strlen(server_name); else return True; if((int)strlen(str) < category_len) return False; if(strncmp(str, XIM_SERVER_CATEGORY, category_len)) return False; pp = &str[category_len]; for(;;) { for(p = pp; (*p != ',') && (*p); p++); str_len = (int)(p - pp); if((len == str_len) && (!strncmp(pp, server_name, len))) break; if(!(*p)) return False; pp = p + 1; } return True; } static char * _XimCheckLocaleName( Xim im, char *address, int address_len, char *locale_name[], int len) { int category_len; char *pp; register char *p; register int n; Bool finish = False; category_len = strlen(XIM_LOCAL_CATEGORY); if(address_len < category_len) return (char*)NULL; if(strncmp(address, XIM_LOCAL_CATEGORY, category_len)) return (char*)NULL; pp = &address[category_len]; for(;;) { for( p = pp; *p && *p != ','; p++); if (!*p) finish = True; address_len = (int)(p - pp); *p = '\0'; for( n = 0; n < len; n++ ) if( locale_name[n] && !_XlcCompareISOLatin1( pp, locale_name[n] ) ) return locale_name[n]; if (finish) break; pp = p + 1; } return (char *)NULL; } static Bool _XimCheckTransport( char *address, int address_len, const char *transport, int len, char **trans_addr) { int category_len = strlen(XIM_TRANSPORT_CATEGORY); char *pp; register char *p; if(address_len < category_len) return False; if(strncmp(address, XIM_TRANSPORT_CATEGORY, category_len)) return False; pp = &address[category_len]; for(;;) { *trans_addr = pp; for(p = pp; (*p != '/') && (*p != ',') && (*p); p++); if(*p == ',') { pp = p + 1; continue; } if(!(*p)) return False; address_len = (int)(p - pp); if((len == address_len) && (!strncmp(pp, transport, len))) break; pp = p + 1; } pp = p + 1; for(p = pp; (*p != ',') && (*p); p++); if (*p) *p = '\0'; return True; } static Bool _CheckSNEvent( Display *display, XEvent *xevent, XPointer arg) { XSelectionEvent *event = (XSelectionEvent *)xevent; Window window = *(Window*)arg; if((event->type == SelectionNotify) && (window == event->requestor)) return True; return False; } static Bool _XimGetSelectionNotify( Display *display, Window window, Atom target, char **ret_address) { XEvent event; XSelectionEvent *ev = (XSelectionEvent *)&event; Atom actual_type; int actual_format; unsigned long nitems, bytes_after; for(;;) { XIfEvent(display, &event, _CheckSNEvent, (XPointer)&window); if((ev->type == SelectionNotify) && (window == ev->requestor)) break; } if(ev->property == (Atom)None) return False; if( XGetWindowProperty( display, window, target, 0L, 1000000L, True, target, &actual_type, &actual_format, &nitems, &bytes_after, (unsigned char **)&*ret_address ) != Success ) return False; return True; } static Bool _XimPreConnectionIM( Xim im, Atom selection) { Display *display = im->core.display; Atom locales, transport; char *address; XLCd lcd; char *language; char *territory; char *codeset; char *trans_addr; char *locale_name[4], *locale; int llen, tlen, clen; register int i; Window window; char *str; if(!(lcd = im->core.lcd)) return False; for( i = 0; i < 4; i++ ) locale_name[i] = NULL; /* requestor window */ if(!(window = XCreateSimpleWindow(display, DefaultRootWindow(display), 0, 0, 1, 1, 1, 0, 0))) return False; /* server name check */ if( !(str = XGetAtomName( display, selection )) ) return False; if(!_XimCheckServerName(im, str)) { XFree( (XPointer)str ); goto Error; } XFree( (XPointer)str ); /* locale name check */ _XGetLCValues(lcd, XlcNLanguage, &language, XlcNTerritory, &territory, XlcNCodeset, &codeset, NULL); llen = strlen( language ); tlen = territory ? strlen( territory ): 0; clen = codeset ? strlen( codeset ): 0; if( tlen != 0 && clen != 0 ) { if( (locale_name[0] = Xmalloc(llen+tlen+clen+3)) != NULL ) sprintf( locale_name[0], "%s_%s.%s", language, territory, codeset ); } if( clen != 0 ) { if( (locale_name[1] = Xmalloc(llen+clen+2)) != NULL ) sprintf( locale_name[1], "%s.%s", language, codeset ); else goto Error; } if( tlen != 0 ) { if( (locale_name[2] = Xmalloc(llen+tlen+2)) != NULL ) sprintf( locale_name[2], "%s_%s", language, territory ); else goto Error; } if( (locale_name[3] = Xmalloc(llen+1)) != NULL ) strcpy( locale_name[3], language ); else goto Error; if((locales = XInternAtom(display, XIM_LOCALES, True)) == (Atom)None) goto Error; XConvertSelection(display, selection, locales, locales, window, CurrentTime); if(!(_XimGetSelectionNotify(display, window, locales, &address))) goto Error; if((locale = _XimCheckLocaleName(im, address, strlen(address), locale_name, 4)) == NULL) { XFree((XPointer)address); goto Error; } im->private.proto.locale_name = locale; for( i = 0; i < 4; i++ ) { if( locale_name[i] != NULL && locale_name[i] != locale ) { XFree( locale_name[i] ); locale_name[i] = NULL; } } XFree((XPointer)address); /* transport check */ if((transport = XInternAtom(display, XIM_TRANSPORT, True)) == (Atom)None) goto Error; XConvertSelection(display, selection, transport, transport, window, CurrentTime); if(!_XimGetSelectionNotify(display, window, transport, &address)) goto Error; for(i = 0; _XimTransportRec[i].transportname ; i++) { if( _XimCheckTransport(address, strlen(address), _XimTransportRec[i].transportname, strlen(_XimTransportRec[i].transportname), &trans_addr)) { if( _XimTransportRec[i].config(im, trans_addr) ) { XFree((XPointer)address); XDestroyWindow(display, window); return True; } } } XFree((XPointer)address); Error: for( i = 0; i < 4; i++ ) if( locale_name[i] != NULL ) XFree( locale_name[i] ); XDestroyWindow(display, window); return False; } static Bool _XimPreConnect( Xim im) { Display *display = im->core.display; Atom imserver; Atom actual_type; int actual_format; unsigned long nitems; unsigned long bytes_after; unsigned char *prop_return; Atom *atoms; Window im_window = 0; register int i; if((imserver = XInternAtom(display, XIM_SERVERS, True)) == (Atom)None) return False; if(XGetWindowProperty(display, RootWindow(display, 0), imserver, 0L, 1000000L, False, XA_ATOM, &actual_type, &actual_format, &nitems, &bytes_after, &prop_return) != Success) return False; if( (actual_type != XA_ATOM) || (actual_format != 32) ) { if( nitems ) XFree((XPointer)prop_return); return False; } atoms = (Atom *)prop_return; for(i = 0; i < nitems; i++) { if((im_window = XGetSelectionOwner(display, atoms[i])) == (Window)None) continue; if(_XimPreConnectionIM(im, atoms[i])) break; } XFree((XPointer)prop_return); if(i >= nitems) return False; im->private.proto.im_window = im_window; return True; } static Bool _XimGetAuthProtocolNames( Xim im, CARD16 *buf, CARD8 *num, INT16 *len) { if (!IS_USE_AUTHORIZATION_FUNC(im)) { *num = 0; *len = 0; return True; } /* * Not yet */ return True; } static Bool _XimSetAuthReplyData( Xim im, XPointer buf, INT16 *len) { /* * Not yet */ *len = 0; return True; } static Bool _XimSetAuthNextData( Xim im, XPointer buf, INT16 *len) { /* * Not yet */ *len = 0; return True; } static Bool _XimSetAuthRequiredData( Xim im, XPointer buf, INT16 *len) { /* * Not yet */ *len = 0; return True; } static Bool _XimCheckAuthSetupData( Xim im, XPointer buf) { /* * Not yet */ return True; } static Bool _XimCheckAuthNextData( Xim im, XPointer buf) { /* * Not yet */ return True; } #define NO_MORE_AUTH 2 #define GOOD_AUTH 1 #define BAD_AUTH 0 static int _XimClientAuthCheck( Xim im, XPointer buf) { /* * Not yet */ return NO_MORE_AUTH; } static void _XimAuthNG( Xim im) { CARD32 buf32[BUFSIZE/4]; CARD8 *buf = (CARD8 *)buf32; INT16 len = 0; _XimSetHeader((XPointer)buf, XIM_AUTH_NG, 0, &len); (void)_XimWrite(im, len, (XPointer)buf); _XimFlush(im); return; } static Bool _XimAllRecv( Xim im, INT16 len, XPointer data, XPointer arg) { return True; } #define CLIENT_WAIT1 1 #define CLIENT_WAIT2 2 static Bool _XimConnection( Xim im) { CARD32 buf32[BUFSIZE/4]; CARD8 *buf = (CARD8 *)buf32; CARD8 *buf_b = &buf[XIM_HEADER_SIZE]; CARD16 *buf_s = (CARD16 *)((XPointer)buf_b); INT16 len; CARD8 num; CARD32 reply32[BUFSIZE/4]; char *reply = (char *)reply32; XPointer preply; int buf_size; int ret_code; CARD8 major_opcode; int wait_mode; int ret; if(!(_XimConnect(im))) /* Transport Connect */ return False; if(!_XimDispatchInit(im)) return False; _XimRegProtoIntrCallback(im, XIM_ERROR, 0, _XimErrorCallback, (XPointer)im); if(!_XimGetAuthProtocolNames(im, &buf_s[4], &num, &len)) return False; im->private.proto.protocol_major_version = PROTOCOLMAJORVERSION; im->private.proto.protocol_minor_version = PROTOCOLMINORVERSION; buf_b[0] = _XimGetMyEndian(); buf_b[1] = 0; buf_s[1] = PROTOCOLMAJORVERSION; buf_s[2] = PROTOCOLMINORVERSION; buf_s[3] = num; len += sizeof(CARD8) + sizeof(CARD8) + sizeof(CARD16) + sizeof(CARD16) + sizeof(CARD16); major_opcode = XIM_CONNECT; wait_mode = (IS_USE_AUTHORIZATION_FUNC(im)) ? CLIENT_WAIT1 : CLIENT_WAIT2; for(;;) { _XimSetHeader((XPointer)buf, major_opcode, 0, &len); if (!(_XimWrite(im, len, (XPointer)buf))) return False; _XimFlush(im); buf_size = BUFSIZE; ret_code = _XimRead(im, &len, reply, buf_size, _XimAllRecv, 0); if(ret_code == XIM_TRUE) { preply = reply; } else if(ret_code == XIM_OVERFLOW) { if(len <= 0) { preply = reply; } else { buf_size = len; preply = Xmalloc(buf_size); ret_code = _XimRead(im, &len, preply, buf_size, _XimAllRecv, 0); if(ret_code != XIM_TRUE) { Xfree(preply); return False; } } } else return False; major_opcode = *((CARD8 *)preply); buf_s = (CARD16 *)((char *)preply + XIM_HEADER_SIZE); if (wait_mode == CLIENT_WAIT1) { if (major_opcode == XIM_AUTH_REQUIRED) { ret = _XimClientAuthCheck(im, (XPointer)buf_s); if(reply != preply) Xfree(preply); if (ret == NO_MORE_AUTH) { if (!(_XimSetAuthReplyData(im, (XPointer)&buf[XIM_HEADER_SIZE], &len))) { _XimAuthNG(im); return False; } major_opcode = XIM_AUTH_REPLY; wait_mode = CLIENT_WAIT2; } else if (ret == GOOD_AUTH) { if (!(_XimSetAuthNextData(im, (XPointer)&buf[XIM_HEADER_SIZE], &len))) { _XimAuthNG(im); return False; } major_opcode = XIM_AUTH_NEXT; } else { /* BAD_AUTH */ _XimAuthNG(im); return False; } } else { if(reply != preply) Xfree(preply); _XimAuthNG(im); return False; } } else { /* CLIENT_WAIT2 */ if (major_opcode == XIM_CONNECT_REPLY) { break; } else if (major_opcode == XIM_AUTH_SETUP) { if (!(_XimCheckAuthSetupData(im, (XPointer)buf_s))) { _XimAuthNG(im); return False; } if(reply != preply) Xfree(preply); if (!(_XimSetAuthRequiredData(im, (XPointer)&buf[XIM_HEADER_SIZE], &len))) { _XimAuthNG(im); return False; } major_opcode = XIM_AUTH_REQUIRED; } else if (major_opcode == XIM_AUTH_NEXT) { if (!(_XimCheckAuthNextData(im, (XPointer)buf_s))) { _XimAuthNG(im); return False; } if(reply != preply) Xfree(preply); if (!(_XimSetAuthRequiredData(im, (XPointer)&buf[XIM_HEADER_SIZE], &len))) { _XimAuthNG(im); return False; } major_opcode = XIM_AUTH_REQUIRED; } else if (major_opcode == XIM_AUTH_NG) { if(reply != preply) Xfree(preply); return False; } else { _XimAuthNG(im); if(reply != preply) Xfree(preply); return False; } } } if (!( buf_s[0] == im->private.proto.protocol_major_version && buf_s[1] == im->private.proto.protocol_minor_version)) { if(reply != preply) Xfree(preply); return False; } if(reply != preply) Xfree(preply); MARK_SERVER_CONNECTED(im); _XimRegProtoIntrCallback(im, XIM_REGISTER_TRIGGERKEYS, 0, _XimRegisterTriggerKeysCallback, (XPointer)im); return True; } static Bool _XimDisconnectCheck( Xim im, INT16 len, XPointer data, XPointer arg) { CARD8 major_opcode = *((CARD8 *)data); CARD8 minor_opcode = *((CARD8 *)data + 1); if ((major_opcode == XIM_DISCONNECT_REPLY) && (minor_opcode == 0)) return True; if ((major_opcode == XIM_ERROR) && (minor_opcode == 0)) return True; return False; } static Bool _XimDisconnect( Xim im) { CARD32 buf32[BUFSIZE/4]; CARD8 *buf = (CARD8 *)buf32; INT16 len = 0; CARD32 reply32[BUFSIZE/4]; char *reply = (char *)reply32; XPointer preply; int buf_size; int ret_code; if (IS_SERVER_CONNECTED(im)) { _XimSetHeader((XPointer)buf, XIM_DISCONNECT, 0, &len); if (!(_XimWrite(im, len, (XPointer)buf))) return False; _XimFlush(im); buf_size = BUFSIZE; ret_code = _XimRead(im, &len, (XPointer)reply, buf_size, _XimDisconnectCheck, 0); if(ret_code == XIM_OVERFLOW) { if(len > 0) { buf_size = len; preply = Xmalloc(buf_size); ret_code = _XimRead(im, &len, preply, buf_size, _XimDisconnectCheck, 0); Xfree(preply); if(ret_code != XIM_TRUE) return False; } } else if(ret_code == XIM_FALSE) return False; } if (!(_XimShutdown(im))) /* Transport shutdown */ return False; return True; } static Bool _XimOpenCheck( Xim im, INT16 len, XPointer data, XPointer arg) { CARD8 major_opcode = *((CARD8 *)data); CARD8 minor_opcode = *((CARD8 *)data + 1); if ((major_opcode == XIM_OPEN_REPLY) && (minor_opcode == 0)) return True; if ((major_opcode == XIM_ERROR) && (minor_opcode == 0)) return True; return False; } static Bool _XimOpen( Xim im) { CARD32 buf32[BUFSIZE/4]; CARD8 *buf = (CARD8 *)buf32; CARD8 *buf_b = &buf[XIM_HEADER_SIZE]; CARD16 *buf_s; INT16 len; CARD32 reply32[BUFSIZE/4]; char *reply = (char *)reply32; XPointer preply; int buf_size; int ret_code; char *locale_name; locale_name = im->private.proto.locale_name; len = strlen(locale_name); buf_b[0] = (BYTE)len; /* length of locale name */ (void)strcpy((char *)&buf_b[1], locale_name); /* locale name */ len += sizeof(BYTE); /* sizeof length */ XIM_SET_PAD(buf_b, len); /* pad */ _XimSetHeader((XPointer)buf, XIM_OPEN, 0, &len); if (!(_XimWrite(im, len, (XPointer)buf))) return False; _XimFlush(im); buf_size = BUFSIZE; ret_code = _XimRead(im, &len, reply, buf_size, _XimOpenCheck, 0); if(ret_code == XIM_TRUE) { preply = reply; } else if(ret_code == XIM_OVERFLOW) { if(len <= 0) { preply = reply; } else { buf_size = len; preply = Xmalloc(buf_size); ret_code = _XimRead(im, &len, preply, buf_size, _XimOpenCheck, 0); if(ret_code != XIM_TRUE) { Xfree(preply); return False; } } } else return False; buf_s = (CARD16 *)((char *)preply + XIM_HEADER_SIZE); if (*((CARD8 *)preply) == XIM_ERROR) { _XimProcError(im, 0, (XPointer)&buf_s[3]); if(reply != preply) Xfree(preply); return False; } im->private.proto.imid = buf_s[0]; /* imid */ if (!(_XimGetAttributeID(im, &buf_s[1]))) { if(reply != preply) Xfree(preply); return False; } if(reply != preply) Xfree(preply); if (!(_XimSetInnerIMResourceList(&(im->private.proto.im_inner_resources), &(im->private.proto.im_num_inner_resources)))) return False; if (!(_XimSetInnerICResourceList(&(im->private.proto.ic_inner_resources), &(im->private.proto.ic_num_inner_resources)))) return False; _XimSetIMMode(im->core.im_resources, im->core.im_num_resources); _XimSetIMMode(im->private.proto.im_inner_resources, im->private.proto.im_num_inner_resources); /* Transport Callbak */ _XimRegProtoIntrCallback(im, XIM_SET_EVENT_MASK, 0, _XimSetEventMaskCallback, (XPointer)im); _XimRegProtoIntrCallback(im, XIM_FORWARD_EVENT, 0, _XimForwardEventCallback, (XPointer)im); _XimRegProtoIntrCallback(im, XIM_COMMIT, 0, _XimCommitCallback, (XPointer)im); _XimRegProtoIntrCallback(im, XIM_SYNC, 0, _XimSyncCallback, (XPointer)im); if(!_XimExtension(im)) return False; /* register a hook for callback protocols */ _XimRegisterDispatcher(im, _XimCbDispatch, (XPointer)im); return True; } static Bool _XimCloseCheck( Xim im, INT16 len, XPointer data, XPointer arg) { CARD16 *buf_s = (CARD16 *)((CARD8 *)data + XIM_HEADER_SIZE); CARD8 major_opcode = *((CARD8 *)data); CARD8 minor_opcode = *((CARD8 *)data + 1); XIMID imid = buf_s[0]; if ((major_opcode == XIM_CLOSE_REPLY) && (minor_opcode == 0) && (imid == im->private.proto.imid)) return True; if ((major_opcode == XIM_ERROR) && (minor_opcode == 0) && (buf_s[2] & XIM_IMID_VALID) && (imid == im->private.proto.imid)) return True; return False; } static Bool _XimClose( Xim im) { CARD32 buf32[BUFSIZE/4]; CARD8 *buf = (CARD8 *)buf32; CARD16 *buf_s = (CARD16 *)&buf[XIM_HEADER_SIZE]; INT16 len; CARD32 reply32[BUFSIZE/4]; char *reply = (char *)reply32; XPointer preply; int buf_size; int ret_code; if (!IS_SERVER_CONNECTED(im)) return True; buf_s[0] = im->private.proto.imid; /* imid */ buf_s[1] = 0; /* unused */ len = sizeof(CARD16) /* sizeof imid */ + sizeof(CARD16); /* sizeof unused */ _XimSetHeader((XPointer)buf, XIM_CLOSE, 0, &len); if (!(_XimWrite(im, len, (XPointer)buf))) return False; _XimFlush(im); buf_size = BUFSIZE; ret_code = _XimRead(im, &len, (XPointer)reply, buf_size, _XimCloseCheck, 0); if(ret_code == XIM_TRUE) { preply = reply; } else if(ret_code == XIM_OVERFLOW) { if(len <= 0) { preply = reply; } else { buf_size = len; preply = Xmalloc(buf_size); ret_code = _XimRead(im, &len, preply, buf_size, _XimCloseCheck, 0); if(ret_code != XIM_TRUE) { Xfree(preply); return False; } } } else return False; buf_s = (CARD16 *)((char *)preply + XIM_HEADER_SIZE); if (*((CARD8 *)preply) == XIM_ERROR) { _XimProcError(im, 0, (XPointer)&buf_s[3]); if(reply != preply) Xfree(preply); return False; } if(reply != preply) Xfree(preply); return True; } void _XimProtoIMFree( Xim im) { /* XIMPrivateRec */ if (im->private.proto.im_onkeylist) { Xfree(im->private.proto.im_onkeylist); im->private.proto.im_onkeylist = NULL; } if (im->private.proto.im_offkeylist) { Xfree(im->private.proto.im_offkeylist); im->private.proto.im_offkeylist = NULL; } if (im->private.proto.intrproto) { _XimFreeProtoIntrCallback(im); im->private.proto.intrproto = NULL; } if (im->private.proto.im_inner_resources) { Xfree(im->private.proto.im_inner_resources); im->private.proto.im_inner_resources = NULL; } if (im->private.proto.ic_inner_resources) { Xfree(im->private.proto.ic_inner_resources); im->private.proto.ic_inner_resources = NULL; } if (im->private.proto.hold_data) { Xfree(im->private.proto.hold_data); im->private.proto.hold_data = NULL; } if (im->private.proto.locale_name) { Xfree(im->private.proto.locale_name); im->private.proto.locale_name = NULL; } if (im->private.proto.ctom_conv) { _XlcCloseConverter(im->private.proto.ctom_conv); im->private.proto.ctom_conv = NULL; } if (im->private.proto.ctow_conv) { _XlcCloseConverter(im->private.proto.ctow_conv); im->private.proto.ctow_conv = NULL; } if (im->private.proto.ctoutf8_conv) { _XlcCloseConverter(im->private.proto.ctoutf8_conv); im->private.proto.ctoutf8_conv = NULL; } if (im->private.proto.cstomb_conv) { _XlcCloseConverter(im->private.proto.cstomb_conv); im->private.proto.cstomb_conv = NULL; } if (im->private.proto.cstowc_conv) { _XlcCloseConverter(im->private.proto.cstowc_conv); im->private.proto.cstowc_conv = NULL; } if (im->private.proto.cstoutf8_conv) { _XlcCloseConverter(im->private.proto.cstoutf8_conv); im->private.proto.cstoutf8_conv = NULL; } if (im->private.proto.ucstoc_conv) { _XlcCloseConverter(im->private.proto.ucstoc_conv); im->private.proto.ucstoc_conv = NULL; } if (im->private.proto.ucstoutf8_conv) { _XlcCloseConverter(im->private.proto.ucstoutf8_conv); im->private.proto.ucstoutf8_conv = NULL; } #ifdef XIM_CONNECTABLE if (!IS_SERVER_CONNECTED(im) && IS_RECONNECTABLE(im)) { return; } #endif /* XIM_CONNECTABLE */ if (im->private.proto.saved_imvalues) { Xfree(im->private.proto.saved_imvalues); im->private.proto.saved_imvalues = NULL; } if (im->private.proto.default_styles) { Xfree(im->private.proto.default_styles); im->private.proto.default_styles = NULL; } /* core */ if (im->core.res_name) { Xfree(im->core.res_name); im->core.res_name = NULL; } if (im->core.res_class) { Xfree(im->core.res_class); im->core.res_class = NULL; } if (im->core.im_values_list) { Xfree(im->core.im_values_list); im->core.im_values_list = NULL; } if (im->core.ic_values_list) { Xfree(im->core.ic_values_list); im->core.ic_values_list = NULL; } if (im->core.im_name) { Xfree(im->core.im_name); im->core.im_name = NULL; } if (im->core.styles) { Xfree(im->core.styles); im->core.styles = NULL; } if (im->core.im_resources) { Xfree(im->core.im_resources); im->core.im_resources = NULL; } if (im->core.ic_resources) { Xfree(im->core.ic_resources); im->core.ic_resources = NULL; } return; } static Status _XimProtoCloseIM( XIM xim) { Xim im = (Xim)xim; XIC ic; XIC next; Status status; ic = im->core.ic_chain; while (ic) { (*ic->methods->destroy) (ic); next = ic->core.next; #ifdef XIM_CONNECTABLE if (!(!IS_SERVER_CONNECTED(im) && IS_RECONNECTABLE(im))) { Xfree (ic); } #else Xfree (ic); #endif /* XIM_CONNECTABLE */ ic = next; } #ifdef XIM_CONNECTABLE if (!(!IS_SERVER_CONNECTED(im) && IS_RECONNECTABLE(im))) im->core.ic_chain = NULL; #else im->core.ic_chain = NULL; #endif _XimUnregisterServerFilter(im); _XimResetIMInstantiateCallback(im); status = (Status)_XimClose(im); status = (Status)_XimDisconnect(im) && status; _XimProtoIMFree(im); #ifdef XIM_CONNECTABLE if (!IS_SERVER_CONNECTED(im) && IS_RECONNECTABLE(im)) { _XimReconnectModeSetAttr(im); for (ic = im->core.ic_chain; ic; ic = ic->core.next) { _XimReconnectModeCreateIC(ic); } return 0; } #endif /* XIM_CONNECTABLE */ _XimDestroyIMStructureList(im); return status; } #ifdef XIM_CONNECTABLE static Bool _XimCheckIMQuarkList( XrmQuark *quark_list, int num_quark, XrmQuark quark) { register int i; for (i = 0; i < num_quark; i++) { if (quark_list[i] == quark) { return True; } } return False; } static Bool _XimSaveIMValues( Xim im, XIMArg *arg) { register XIMArg *p; register int n; XrmQuark *quark_list; XrmQuark *tmp; XrmQuark quark; int num_quark; if (quark_list = im->private.proto.saved_imvalues) { num_quark = im->private.proto.num_saved_imvalues; for (p = arg; p && p->name; p++) { quark = XrmStringToQuark(p->name); if (_XimCheckIMQuarkList(quark_list, num_quark, quark)) { continue; } if (!(tmp = Xrealloc(quark_list, (sizeof(XrmQuark) * (num_quark + 1))))) { im->private.proto.saved_imvalues = quark_list; im->private.proto.num_saved_imvalues = num_quark; return False; } num_quark++; quark_list = tmp; quark_list[num_quark] = quark; } im->private.proto.saved_imvalues = quark_list; im->private.proto.num_saved_imvalues = num_quark; return True; } for (p = arg, n = 0; p && p->name; p++, n++); if (!(quark_list = Xmalloc(sizeof(XrmQuark) * n))) { return False; } im->private.proto.saved_imvalues = quark_list; im->private.proto.num_saved_imvalues = n; for (p = arg; p && p->name; p++, quark_list++) { *quark_list = XrmStringToQuark(p->name); } return True; } static char * _XimDelayModeSetIMValues( Xim im, XIMArg *arg) { XimDefIMValues im_values; char *name; XIMArg *values; _XimGetCurrentIMValues(im, &im_values); name = _XimSetIMValueData(im, (XPointer)&im_values, values, im->core.im_resources, im->core.im_num_resources); _XimSetCurrentIMValues(im, &im_values); return name; } #endif /* XIM_CONNECTABLE */ static Bool _XimSetIMValuesCheck( Xim im, INT16 len, XPointer data, XPointer arg) { CARD16 *buf_s = (CARD16 *)((CARD8 *)data + XIM_HEADER_SIZE); CARD8 major_opcode = *((CARD8 *)data); CARD8 minor_opcode = *((CARD8 *)data + 1); XIMID imid = buf_s[0]; if ((major_opcode == XIM_SET_IM_VALUES_REPLY) && (minor_opcode == 0) && (imid == im->private.proto.imid)) return True; if ((major_opcode == XIM_ERROR) && (minor_opcode == 0) && (buf_s[2] & XIM_IMID_VALID) && (imid == im->private.proto.imid)) return True; return False; } static char * _XimProtoSetIMValues( XIM xim, XIMArg *arg) { Xim im = (Xim)xim; XimDefIMValues im_values; INT16 len; CARD16 *buf_s; char *tmp; CARD32 tmp_buf32[BUFSIZE/4]; char *tmp_buf = (char *)tmp_buf32; char *buf; int buf_size; char *data; int data_len; int ret_len; int total; XIMArg *arg_ret; CARD32 reply32[BUFSIZE/4]; char *reply = (char *)reply32; XPointer preply; int ret_code; char *name; #ifndef XIM_CONNECTABLE if (!IS_SERVER_CONNECTED(im)) return arg->name; #else if (!_XimSaveIMValues(im, arg)) return arg->name; if (!IS_SERVER_CONNECTED(im)) { if (IS_CONNECTABLE(im)) { if (!_XimConnectServer(im)) { return _XimDelayModeSetIMValues(im, arg); } } else { return arg->name; } } #endif /* XIM_CONNECTABLE */ _XimGetCurrentIMValues(im, &im_values); buf = tmp_buf; buf_size = XIM_HEADER_SIZE + sizeof(CARD16) + sizeof(INT16); data_len = BUFSIZE - buf_size; total = 0; arg_ret = arg; for (;;) { data = &buf[buf_size]; if ((name = _XimEncodeIMATTRIBUTE(im, im->core.im_resources, im->core.im_num_resources, arg, &arg_ret, data, data_len, &ret_len, (XPointer)&im_values, XIM_SETIMVALUES))) { if (buf != tmp_buf) Xfree(buf); break; } total += ret_len; if (!(arg = arg_ret)) { break; } buf_size += ret_len; if (buf == tmp_buf) { if (!(tmp = Xmalloc(buf_size + data_len))) { return arg->name; } memcpy(tmp, buf, buf_size); buf = tmp; } else { if (!(tmp = Xrealloc(buf, (buf_size + data_len)))) { Xfree(buf); return arg->name; } buf = tmp; } } _XimSetCurrentIMValues(im, &im_values); if (!total) return (char *)NULL; buf_s = (CARD16 *)&buf[XIM_HEADER_SIZE]; buf_s[0] = im->private.proto.imid; buf_s[1] = (INT16)total; len = (INT16)(sizeof(CARD16) + sizeof(INT16) + total); _XimSetHeader((XPointer)buf, XIM_SET_IM_VALUES, 0, &len); if (!(_XimWrite(im, len, (XPointer)buf))) { if (buf != tmp_buf) Xfree(buf); return arg->name; } _XimFlush(im); if (buf != tmp_buf) Xfree(buf); buf_size = BUFSIZE; ret_code = _XimRead(im, &len, (XPointer)reply, buf_size, _XimSetIMValuesCheck, 0); if(ret_code == XIM_TRUE) { preply = reply; } else if(ret_code == XIM_OVERFLOW) { if(len <= 0) { preply = reply; } else { buf_size = (int)len; preply = Xmalloc(buf_size); ret_code = _XimRead(im, &len, reply, buf_size, _XimSetIMValuesCheck, 0); if(ret_code != XIM_TRUE) { Xfree(preply); return arg->name; } } } else return arg->name; buf_s = (CARD16 *)((char *)preply + XIM_HEADER_SIZE); if (*((CARD8 *)preply) == XIM_ERROR) { _XimProcError(im, 0, (XPointer)&buf_s[3]); if(reply != preply) Xfree(preply); return arg->name; } if(reply != preply) Xfree(preply); return name; } #ifdef XIM_CONNECTABLE static char * _XimDelayModeGetIMValues( Xim im, XIMArg *arg) { XimDefIMValues im_values; _XimGetCurrentIMValues(im, &im_values); return(_XimGetIMValueData(im, (XPointer)&im_values, arg, im->core.im_resources, im->core.im_num_resources)); } #endif /* XIM_CONNECTABLE */ static Bool _XimGetIMValuesCheck( Xim im, INT16 len, XPointer data, XPointer arg) { CARD16 *buf_s = (CARD16 *)((CARD8 *)data + XIM_HEADER_SIZE); CARD8 major_opcode = *((CARD8 *)data); CARD8 minor_opcode = *((CARD8 *)data + 1); XIMID imid = buf_s[0]; if ((major_opcode == XIM_GET_IM_VALUES_REPLY) && (minor_opcode == 0) && (imid == im->private.proto.imid)) return True; if ((major_opcode == XIM_ERROR) && (minor_opcode == 0) && (buf_s[2] & XIM_IMID_VALID) && (imid == im->private.proto.imid)) return True; return False; } static char * _XimProtoGetIMValues( XIM xim, XIMArg *arg) { Xim im = (Xim)xim; register XIMArg *p; register int n; CARD8 *buf; CARD16 *buf_s; INT16 len; CARD32 reply32[BUFSIZE/4]; char *reply = (char *)reply32; XPointer preply = NULL; int buf_size; int ret_code; char *makeid_name; char *decode_name; CARD16 *data = NULL; INT16 data_len = 0; #ifndef XIM_CONNECTABLE if (!IS_SERVER_CONNECTED(im)) return arg->name; #else if (!IS_SERVER_CONNECTED(im)) { if (IS_CONNECTABLE(im)) { if (!_XimConnectServer(im)) { return _XimDelayModeGetIMValues(im, arg); } } else { return arg->name; } } #endif /* XIM_CONNECTABLE */ for (n = 0, p = arg; p->name; p++) n++; if (!n) return (char *)NULL; buf_size = sizeof(CARD16) * n; buf_size += XIM_HEADER_SIZE + sizeof(CARD16) + sizeof(INT16) + XIM_PAD(buf_size); if (!(buf = Xmalloc(buf_size))) return arg->name; buf_s = (CARD16 *)&buf[XIM_HEADER_SIZE]; makeid_name = _XimMakeIMAttrIDList(im, im->core.im_resources, im->core.im_num_resources, arg, &buf_s[2], &len, XIM_GETIMVALUES); if (len) { buf_s[0] = im->private.proto.imid; /* imid */ buf_s[1] = len; /* length of im-attr-id */ XIM_SET_PAD(&buf_s[2], len); /* pad */ len += sizeof(CARD16) /* sizeof imid */ + sizeof(INT16); /* sizeof length of attr */ _XimSetHeader((XPointer)buf, XIM_GET_IM_VALUES, 0, &len); if (!(_XimWrite(im, len, (XPointer)buf))) { Xfree(buf); return arg->name; } _XimFlush(im); Xfree(buf); buf_size = BUFSIZE; ret_code = _XimRead(im, &len, (XPointer)reply, buf_size, _XimGetIMValuesCheck, 0); if(ret_code == XIM_TRUE) { preply = reply; } else if(ret_code == XIM_OVERFLOW) { if(len <= 0) { preply = reply; } else { buf_size = len; preply = Xmalloc(buf_size); ret_code = _XimRead(im, &len, preply, buf_size, _XimGetIMValuesCheck, 0); if(ret_code != XIM_TRUE) { Xfree(preply); return arg->name; } } } else return arg->name; buf_s = (CARD16 *)((char *)preply + XIM_HEADER_SIZE); if (*((CARD8 *)preply) == XIM_ERROR) { _XimProcError(im, 0, (XPointer)&buf_s[3]); if(reply != preply) Xfree(preply); return arg->name; } data = &buf_s[2]; data_len = buf_s[1]; } decode_name = _XimDecodeIMATTRIBUTE(im, im->core.im_resources, im->core.im_num_resources, data, data_len, arg, XIM_GETIMVALUES); if (reply != preply) Xfree(preply); if (decode_name) return decode_name; else return makeid_name; } static XIMMethodsRec im_methods = { _XimProtoCloseIM, /* close */ _XimProtoSetIMValues, /* set_values */ _XimProtoGetIMValues, /* get_values */ _XimProtoCreateIC, /* create_ic */ _Ximctstombs, /* ctstombs */ _Ximctstowcs, /* ctstowcs */ _Ximctstoutf8 /* ctstoutf8 */ }; static Bool _XimSetEncodingByName( Xim im, char **buf, int *len) { char *encoding = (char *)NULL; int encoding_len; int compound_len; BYTE *ret; _XGetLCValues(im->core.lcd, XlcNCodeset, &encoding, NULL); if (!encoding) { *buf = (char *)NULL; *len = 0; return True; } encoding_len = strlen(encoding); compound_len = strlen("COMPOUND_TEXT"); *len = encoding_len + sizeof(BYTE) + compound_len + sizeof(BYTE); if (!(ret = Xmalloc(*len))) { return False; } *buf = (char *)ret; ret[0] = (BYTE)encoding_len; (void)strncpy((char *)&ret[1], encoding, encoding_len); ret += (encoding_len + sizeof(BYTE)); ret[0] = (BYTE)compound_len; (void)strncpy((char *)&ret[1], "COMPOUND_TEXT", compound_len); return True; } static Bool _XimSetEncodingByDetail( Xim im, char **buf, int *len) { *len = 0; *buf = NULL; return True; } static Bool _XimGetEncoding( Xim im, CARD16 *buf, char *name, int name_len, char *detail, int detail_len) { XLCd lcd = im->core.lcd; CARD16 category = buf[0]; CARD16 idx = buf[1]; int len; XlcConv ctom_conv = NULL; XlcConv ctow_conv = NULL; XlcConv ctoutf8_conv = NULL; XlcConv conv; XimProtoPrivateRec *private = &im->private.proto; if (idx == (CARD16)XIM_Default_Encoding_IDX) { /* XXX */ if (!(ctom_conv = _XlcOpenConverter(lcd, XlcNCompoundText, lcd, XlcNMultiByte))) return False; if (!(ctow_conv = _XlcOpenConverter(lcd, XlcNCompoundText, lcd, XlcNWideChar))) return False; if (!(ctoutf8_conv = _XlcOpenConverter(lcd, XlcNCompoundText, lcd, XlcNUtf8String))) return False; } if (category == XIM_Encoding_NameCategory) { while (name_len > 0) { len = (int)name[0]; if (!strncmp(&name[1], "COMPOUND_TEXT", len)) { if (!(ctom_conv = _XlcOpenConverter(lcd, XlcNCompoundText, lcd, XlcNMultiByte))) return False; if (!(ctow_conv = _XlcOpenConverter(lcd, XlcNCompoundText, lcd, XlcNWideChar))) return False; if (!(ctoutf8_conv = _XlcOpenConverter(lcd, XlcNCompoundText, lcd, XlcNUtf8String))) return False; break; } else { /* * Not yet */ } len += sizeof(BYTE); name_len -= len; name += len; } } else if (category == XIM_Encoding_DetailCategory) { /* * Not yet */ } else { return False; } private->ctom_conv = ctom_conv; private->ctow_conv = ctow_conv; private->ctoutf8_conv = ctoutf8_conv; if (!(conv = _XlcOpenConverter(lcd, XlcNCharSet, lcd, XlcNMultiByte))) return False; private->cstomb_conv = conv; if (!(conv = _XlcOpenConverter(lcd, XlcNCharSet, lcd, XlcNWideChar))) return False; private->cstowc_conv = conv; if (!(conv = _XlcOpenConverter(lcd, XlcNCharSet, lcd, XlcNUtf8String))) return False; private->cstoutf8_conv = conv; if (!(conv = _XlcOpenConverter(lcd, XlcNUcsChar, lcd, XlcNChar))) return False; private->ucstoc_conv = conv; if (!(conv = _XlcOpenConverter(lcd, XlcNUcsChar, lcd, XlcNUtf8String))) return False; private->ucstoutf8_conv = conv; return True; } static Bool _XimEncodingNegoCheck( Xim im, INT16 len, XPointer data, XPointer arg) { CARD16 *buf_s = (CARD16 *)((CARD8 *)data + XIM_HEADER_SIZE); CARD8 major_opcode = *((CARD8 *)data); CARD8 minor_opcode = *((CARD8 *)data + 1); XIMID imid = buf_s[0]; if ((major_opcode == XIM_ENCODING_NEGOTIATION_REPLY) && (minor_opcode == 0) && (imid == im->private.proto.imid)) return True; if ((major_opcode == XIM_ERROR) && (minor_opcode == 0) && (buf_s[2] & XIM_IMID_VALID) && (imid == im->private.proto.imid)) return True; return False; } static Bool _XimEncodingNegotiation( Xim im) { char *name_ptr = 0; int name_len = 0; char *detail_ptr = 0; int detail_len = 0; CARD8 *buf; CARD16 *buf_s; INT16 len; CARD32 reply32[BUFSIZE/4]; char *reply = (char *)reply32; XPointer preply; int buf_size; int ret_code; if (!(_XimSetEncodingByName(im, &name_ptr, &name_len))) return False; if (!(_XimSetEncodingByDetail(im, &detail_ptr, &detail_len))) goto free_name_ptr; len = sizeof(CARD16) + sizeof(INT16) + name_len + XIM_PAD(name_len) + sizeof(INT16) + sizeof(CARD16) + detail_len; if (!(buf = Xmalloc(XIM_HEADER_SIZE + len))) goto free_detail_ptr; buf_s = (CARD16 *)&buf[XIM_HEADER_SIZE]; buf_s[0] = im->private.proto.imid; buf_s[1] = (INT16)name_len; if (name_ptr) (void)memcpy((char *)&buf_s[2], name_ptr, name_len); XIM_SET_PAD(&buf_s[2], name_len); buf_s = (CARD16 *)((char *)&buf_s[2] + name_len); buf_s[0] = detail_len; buf_s[1] = 0; if (detail_ptr) (void)memcpy((char *)&buf_s[2], detail_ptr, detail_len); _XimSetHeader((XPointer)buf, XIM_ENCODING_NEGOTIATION, 0, &len); if (!(_XimWrite(im, len, (XPointer)buf))) { Xfree(buf); goto free_detail_ptr; } _XimFlush(im); Xfree(buf); buf_size = BUFSIZE; ret_code = _XimRead(im, &len, (XPointer)reply, buf_size, _XimEncodingNegoCheck, 0); if(ret_code == XIM_TRUE) { preply = reply; } else if(ret_code == XIM_OVERFLOW) { if(len <= 0) { preply = reply; } else { buf_size = len; preply = Xmalloc(buf_size); ret_code = _XimRead(im, &len, preply, buf_size, _XimEncodingNegoCheck, 0); if(ret_code != XIM_TRUE) goto free_preply; } } else goto free_detail_ptr; buf_s = (CARD16 *)((char *)preply + XIM_HEADER_SIZE); if (*((CARD8 *)preply) == XIM_ERROR) { _XimProcError(im, 0, (XPointer)&buf_s[3]); goto free_preply; } if (!(_XimGetEncoding(im, &buf_s[1], name_ptr, name_len, detail_ptr, detail_len))) goto free_preply; Xfree(name_ptr); Xfree(detail_ptr); if(reply != preply) Xfree(preply); return True; free_preply: if (reply != preply) Xfree(preply); free_detail_ptr: Xfree(detail_ptr); free_name_ptr: Xfree(name_ptr); return False; } #ifdef XIM_CONNECTABLE static Bool _XimSendSavedIMValues( Xim im) { XimDefIMValues im_values; INT16 len; CARD16 *buf_s; char *tmp; CARD32 tmp_buf32[BUFSIZE/4]; char *tmp_buf = (char *)tmp_buf32; char *buf; int buf_size; char *data; int data_len; int ret_len; int total; int idx; CARD32 reply32[BUFSIZE/4]; char *reply = (char *)reply32; XPointer preply; int ret_code; _XimGetCurrentIMValues(im, &im_values); buf = tmp_buf; buf_size = XIM_HEADER_SIZE + sizeof(CARD16) + sizeof(INT16); data_len = BUFSIZE - buf_size; total = 0; idx = 0; for (;;) { data = &buf[buf_size]; if (!_XimEncodeSavedIMATTRIBUTE(im, im->core.im_resources, im->core.im_num_resources, &idx, data, data_len, &ret_len, (XPointer)&im_values, XIM_SETIMVALUES)) { if (buf != tmp_buf) Xfree(buf); return False; } total += ret_len; if (idx == -1) { break; } buf_size += ret_len; if (buf == tmp_buf) { if (!(tmp = Xmalloc(buf_size + data_len))) { return False; } memcpy(tmp, buf, buf_size); buf = tmp; } else { if (!(tmp = Xrealloc(buf, (buf_size + data_len)))) { Xfree(buf); return False; } buf = tmp; } } if (!total) return True; buf_s = (CARD16 *)&buf[XIM_HEADER_SIZE]; buf_s[0] = im->private.proto.imid; buf_s[1] = (INT16)total; len = (INT16)(sizeof(CARD16) + sizeof(INT16) + total); _XimSetHeader((XPointer)buf, XIM_SET_IM_VALUES, 0, &len); if (!(_XimWrite(im, len, (XPointer)buf))) { if (buf != tmp_buf) Xfree(buf); return False; } _XimFlush(im); if (buf != tmp_buf) Xfree(buf); buf_size = BUFSIZE; ret_code = _XimRead(im, &len, (XPointer)reply, buf_size, _XimSetIMValuesCheck, 0); if(ret_code == XIM_TRUE) { preply = reply; } else if(ret_code == XIM_OVERFLOW) { if(len <= 0) { preply = reply; } else { buf_size = (int)len; preply = Xmalloc(buf_size); ret_code = _XimRead(im, &len, reply, buf_size, _XimSetIMValuesCheck, 0); if(ret_code != XIM_TRUE) { Xfree(preply); return False; } } } else return False; buf_s = (CARD16 *)((char *)preply + XIM_HEADER_SIZE); if (*((CARD8 *)preply) == XIM_ERROR) { _XimProcError(im, 0, (XPointer)&buf_s[3]); if(reply != preply) Xfree(preply); return False; } if(reply != preply) Xfree(preply); return True; } static void _XimDelayModeIMFree( Xim im) { if (im->core.im_resources) { Xfree(im->core.im_resources); im->core.im_resources = NULL; } if (im->core.ic_resources) { Xfree(im->core.ic_resources); im->core.ic_resources = NULL; } if (im->core.im_values_list) { Xfree(im->core.im_values_list); im->core.im_values_list = NULL; } if (im->core.ic_values_list) { Xfree(im->core.ic_values_list); im->core.ic_values_list = NULL; } return; } Bool _XimConnectServer( Xim im) { Xim save_im; if (!(save_im = Xmalloc(sizeof(XimRec)))) return False; memcpy((char *)save_im, (char *)im, sizeof(XimRec)); if (_XimPreConnect(im) && _XimConnection(im) && _XimOpen(im) && _XimEncodingNegotiation(im)) { if (_XimSendSavedIMValues(im)) { _XimDelayModeIMFree(save_im); _XimRegisterServerFilter(im); Xfree(save_im); return True; } } memcpy((char *)im, (char *)save_im, sizeof(XimRec)); Xfree(save_im); return False; } Bool _XimDelayModeSetAttr( Xim im) { XimDefIMValues im_values; if(!_XimSetIMResourceList(&im->core.im_resources, &im->core.im_num_resources)) { return False; } if(!_XimSetICResourceList(&im->core.ic_resources, &im->core.ic_num_resources)) { return False; } _XimSetIMMode(im->core.im_resources, im->core.im_num_resources); _XimGetCurrentIMValues(im, &im_values); if(!_XimSetLocalIMDefaults(im, (XPointer)&im_values, im->core.im_resources, im->core.im_num_resources)) { return False; } _XimSetCurrentIMValues(im, &im_values); if (im->private.proto.default_styles) { if (im->core.styles) Xfree(im->core.styles); im->core.styles = im->private.proto.default_styles; } return True; } static Bool _XimReconnectModeSetAttr( Xim im) { XimDefIMValues im_values; if(!_XimSetIMResourceList(&im->core.im_resources, &im->core.im_num_resources)) { return False; } if(!_XimSetICResourceList(&im->core.ic_resources, &im->core.ic_num_resources)) { return False; } _XimSetIMMode(im->core.im_resources, im->core.im_num_resources); if (im->private.proto.default_styles) { if (im->core.styles) Xfree(im->core.styles); im->core.styles = im->private.proto.default_styles; } return True; } #endif /* XIM_CONNECTABLE */ Bool _XimProtoOpenIM( Xim im) { _XimInitialResourceInfo(); im->methods = &im_methods; #ifdef XIM_CONNECTABLE _XimSetProtoResource(im); #endif /* XIM_CONNECTABLE */ if (_XimPreConnect(im)) { if (_XimConnection(im) && _XimOpen(im) && _XimEncodingNegotiation(im)) { _XimRegisterServerFilter(im); return True; } _XimShutdown(im); #ifdef XIM_CONNECTABLE } else if (IS_DELAYBINDABLE(im)) { if (_XimDelayModeSetAttr(im)) return True; #endif /* XIM_CONNECTABLE */ } _XimProtoIMFree(im); return False; } ate.proto; if (idx == (CARD16)XIM_Default_Encoding_IDX) { /* XXX */ if (!(ctom_conv = _XlcOpenConverter(lcd, XlcNCompoundText, lcd, XlcNMultiByte))) return False; if (!(ctow_conv = _XlcOpenConverter(lcd, XlcNCompoundText, lcd, XlcNWideChar))) return False; if (!(ctoutf8_conv = _XlcOpenConverter(lcd, XlcNCompoundText, lcd, XlcNUtf8String))) return False; } if (category == XIM_Encoding_NameCategory) libX11-1.6.3/modules/im/ximcp/imRm.c000064401431060000012000002343131247741723500173310ustar00alancstaff00002660200006/****************************************************************** Copyright 1990, 1991, 1992,1993, 1994 by FUJITSU LIMITED Copyright 1994 by Sony Corporation Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of FUJITSU LIMITED and Sony Corporation not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED and Sony Corporation make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED AND SONY CORPORATION DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU LIMITED AND SONY CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp Modifier: Makoto Wakamatsu Sony Corporation makoto@sm.sony.co.jp ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #include #include "Xlibint.h" #include "Xlcint.h" #include "Ximint.h" #include "Xresource.h" #define GET_NAME(x) name_table + x.name_offset typedef struct _XimValueOffsetInfo { unsigned short name_offset; XrmQuark quark; unsigned int offset; Bool (*defaults)( struct _XimValueOffsetInfo *, XPointer, XPointer, unsigned long ); Bool (*encode)( struct _XimValueOffsetInfo *, XPointer, XPointer ); Bool (*decode)( struct _XimValueOffsetInfo *, XPointer, XPointer ); } XimValueOffsetInfoRec, *XimValueOffsetInfo; #ifdef XIM_CONNECTABLE static Bool _XimCheckBool(str) char *str; { if(!strcmp(str, "True") || !strcmp(str, "true") || !strcmp(str, "Yes") || !strcmp(str, "yes") || !strcmp(str, "ON") || !strcmp(str, "on")) return True; return False; } void _XimSetProtoResource(im) Xim im; { char res_name_buf[256]; char* res_name; size_t res_name_len; char res_class_buf[256]; char* res_class; size_t res_class_len; char* str_type; XrmValue value; XIMStyle preedit_style = 0; XIMStyle status_style = 0; XIMStyles* imstyles; char* dotximdot = ".xim."; char* ximdot = "xim."; char* dotXimdot = ".Xim."; char* Ximdot = "Xim."; if (!im->core.rdb) return; res_name_len = strlen (im->core.res_name); if (res_name_len < 200) { res_name = res_name_buf; res_name_len = sizeof(res_name_buf); } else { res_name_len += 50; res_name = Xmalloc (res_name_len); } res_class_len = strlen (im->core.res_class); if (res_class_len < 200) { res_class = res_class_buf; res_class_len = sizeof(res_class_buf); } else { res_class_len += 50; res_class = Xmalloc (res_class_len); } /* pretend malloc always works */ (void) snprintf (res_name, res_name_len, "%s%s%s", im->core.res_name != NULL ? im->core.res_name : "*", im->core.res_name != NULL ? dotximdot : ximdot, "useAuth"); (void) snprintf (res_class, res_class_len, "%s%s%s", im->core.res_class != NULL ? im->core.res_class : "*", im->core.res_class != NULL ? dotXimdot : Ximdot, "UseAuth"); bzero(&value, sizeof(XrmValue)); if(XrmGetResource(im->core.rdb, res_name, res_class, &str_type, &value)) { if(_XimCheckBool(value.addr)) { MARK_USE_AUTHORIZATION_FUNC(im); } } (void) snprintf (res_name, res_name_len, "%s%s%s", im->core.res_name != NULL ? im->core.res_name : "*", im->core.res_name != NULL ? dotximdot : ximdot, "delaybinding"); (void) snprintf (res_class, res_class_len, "%s%s%s", im->core.res_class != NULL ? im->core.res_class : "*", im->core.res_class != NULL ? dotXimdot : Ximdot, "Delaybinding"); bzero(&value, sizeof(XrmValue)); if(XrmGetResource(im->core.rdb, res_name, res_class, &str_type, &value)) { if(_XimCheckBool(value.addr)) { MARK_DELAYBINDABLE(im); } } (void) snprintf (res_name, res_name_len, "%s%s%s", im->core.res_name != NULL ? im->core.res_name : "*", im->core.res_name != NULL ? dotximdot : ximdot, "reconnect"); (void) snprintf (res_class, res_class_len, "%s%s%s", im->core.res_class != NULL ? im->core.res_class : "*", im->core.res_class != NULL ? dotXimdot : Ximdot, "Reconnect"); bzero(&value, sizeof(XrmValue)); if(XrmGetResource(im->core.rdb, res_name, res_class, &str_type, &value)) { if(_XimCheckBool(value.addr)) { MARK_RECONNECTABLE(im); } } if(!IS_CONNECTABLE(im)) { if (res_name != res_name_buf) Xfree (res_name); if (res_class != res_class_buf) Xfree (res_class); return; } (void) snprintf (res_name, res_name_len, "%s%s%s", im->core.res_name != NULL ? im->core.res_name : "*", im->core.res_name != NULL ? dotximdot : ximdot, "preeditDefaultStyle"); (void) snprintf (res_class, res_class_len, "%s%s%s", im->core.res_class != NULL ? im->core.res_class : "*", im->core.res_class != NULL ? dotXimdot : Ximdot, "PreeditDefaultStyle"); if(XrmGetResource(im->core.rdb, res_name, res_class, &str_type, &value)) { if(!strcmp(value.addr, "XIMPreeditArea")) preedit_style = XIMPreeditArea; else if(!strcmp(value.addr, "XIMPreeditCallbacks")) preedit_style = XIMPreeditCallbacks; else if(!strcmp(value.addr, "XIMPreeditPosition")) preedit_style = XIMPreeditPosition; else if(!strcmp(value.addr, "XIMPreeditNothing")) preedit_style = XIMPreeditNothing; else if(!strcmp(value.addr, "XIMPreeditNone")) preedit_style = XIMPreeditNone; } if(!preedit_style) preedit_style = XIMPreeditNothing; (void) snprintf (res_name, res_name_len, "%s%s%s", im->core.res_name != NULL ? im->core.res_name : "*", im->core.res_name != NULL ? dotximdot : ximdot, "statusDefaultStyle"); (void) snprintf (res_class, res_class_len, "%s%s%s", im->core.res_class != NULL ? im->core.res_class : "*", im->core.res_class != NULL ? dotXimdot : Ximdot, "StatusDefaultStyle"); if(XrmGetResource(im->core.rdb, res_name, res_class, &str_type, &value)) { if(!strcmp(value.addr, "XIMStatusArea")) status_style = XIMStatusArea; else if(!strcmp(value.addr, "XIMStatusCallbacks")) status_style = XIMStatusCallbacks; else if(!strcmp(value.addr, "XIMStatusNothing")) status_style = XIMStatusNothing; else if(!strcmp(value.addr, "XIMStatusNone")) status_style = XIMStatusNone; } if(!status_style) status_style = XIMStatusNothing; if(!(imstyles = Xmalloc(sizeof(XIMStyles) + sizeof(XIMStyle)))){ if (res_name != res_name_buf) Xfree (res_name); if (res_class != res_class_buf) Xfree (res_class); return; } imstyles->count_styles = 1; imstyles->supported_styles = (XIMStyle *)((char *)imstyles + sizeof(XIMStyles)); imstyles->supported_styles[0] = preedit_style | status_style; im->private.proto.default_styles = imstyles; if (res_name != res_name_buf) Xfree (res_name); if (res_class != res_class_buf) Xfree (res_class); } #endif /* XIM_CONNECTABLE */ static const char name_table[] = /* 0 */ XNQueryInputStyle"\0" /* 16 */ XNClientWindow"\0" /* 29 */ XNInputStyle"\0" /* 40 */ XNFocusWindow"\0" /* 52 */ XNResourceName"\0" /* 65 */ XNResourceClass"\0" /* 79 */ XNGeometryCallback"\0" /* 96 */ XNDestroyCallback"\0" /* 112 */ XNFilterEvents"\0" /* 125 */ XNPreeditStartCallback"\0" /* 146 */ XNPreeditDoneCallback"\0" /* 166 */ XNPreeditDrawCallback"\0" /* 186 */ XNPreeditCaretCallback"\0" /* 207 */ XNPreeditStateNotifyCallback"\0" /* 234 */ XNPreeditAttributes"\0" /* 252 */ XNStatusStartCallback"\0" /* 272 */ XNStatusDoneCallback"\0" /* 291 */ XNStatusDrawCallback"\0" /* 310 */ XNStatusAttributes"\0" /* 327 */ XNArea"\0" /* 332 */ XNAreaNeeded"\0" /* 343 */ XNSpotLocation"\0" /* 356 */ XNColormap"\0" /* 365 */ XNStdColormap"\0" /* 377 */ XNForeground"\0" /* 388 */ XNBackground"\0" /* 399 */ XNBackgroundPixmap"\0" /* 416 */ XNFontSet"\0" /* 424 */ XNLineSpace"\0" /* 434 */ XNCursor"\0" /* 441 */ XNQueryIMValuesList"\0" /* 459 */ XNQueryICValuesList"\0" /* 477 */ XNVisiblePosition"\0" /* 493 */ XNStringConversionCallback"\0" /* 518 */ XNStringConversion"\0" /* 535 */ XNResetState"\0" /* 546 */ XNHotKey"\0" /* 553 */ XNHotKeyState"\0" /* 565 */ XNPreeditState ; #define OFFSET_XNQUERYINPUTSTYLE 0 #define OFFSET_XNCLIENTWINDOW 16 #define OFFSET_XNINPUTSTYLE 29 #define OFFSET_XNFOCUSWINDOW 40 #define OFFSET_XNRESOURCENAME 52 #define OFFSET_XNRESOURCECLASS 65 #define OFFSET_XNGEOMETRYCALLBACK 79 #define OFFSET_XNDESTROYCALLBACK 96 #define OFFSET_XNFILTEREVENTS 112 #define OFFSET_XNPREEDITSTARTCALLBACK 125 #define OFFSET_XNPREEDITDONECALLBACK 146 #define OFFSET_XNPREEDITDRAWCALLBACK 166 #define OFFSET_XNPREEDITCARETCALLBACK 186 #define OFFSET_XNPREEDITSTATENOTIFYCALLBACK 207 #define OFFSET_XNPREEDITATTRIBUTES 234 #define OFFSET_XNSTATUSSTARTCALLBACK 252 #define OFFSET_XNSTATUSDONECALLBACK 272 #define OFFSET_XNSTATUSDRAWCALLBACK 291 #define OFFSET_XNSTATUSATTRIBUTES 310 #define OFFSET_XNAREA 327 #define OFFSET_XNAREANEEDED 332 #define OFFSET_XNSPOTLOCATION 343 #define OFFSET_XNCOLORMAP 356 #define OFFSET_XNSTDCOLORMAP 365 #define OFFSET_XNFOREGROUND 377 #define OFFSET_XNBACKGROUND 388 #define OFFSET_XNBACKGROUNDPIXMAP 399 #define OFFSET_XNFONTSET 416 #define OFFSET_XNLINESPACE 424 #define OFFSET_XNCURSOR 434 #define OFFSET_XNQUERYIMVALUESLIST 441 #define OFFSET_XNQUERYICVALUESLIST 459 #define OFFSET_XNVISIBLEPOSITION 477 #define OFFSET_XNSTRINGCONVERSIONCALLBACK 493 #define OFFSET_XNSTRINGCONVERSION 518 #define OFFSET_XNRESETSTATE 535 #define OFFSET_XNHOTKEY 546 #define OFFSET_XNHOTKEYSTATE 553 #define OFFSET_XNPREEDITSTATE 565 /* offsets into name_table */ static const unsigned short supported_local_im_values_list[] = { OFFSET_XNQUERYINPUTSTYLE, OFFSET_XNRESOURCENAME, OFFSET_XNRESOURCECLASS, OFFSET_XNDESTROYCALLBACK, OFFSET_XNQUERYIMVALUESLIST, OFFSET_XNQUERYICVALUESLIST, OFFSET_XNVISIBLEPOSITION }; /* offsets into name_table */ static const unsigned short supported_local_ic_values_list[] = { OFFSET_XNINPUTSTYLE, OFFSET_XNCLIENTWINDOW, OFFSET_XNFOCUSWINDOW, OFFSET_XNRESOURCENAME, OFFSET_XNRESOURCECLASS, OFFSET_XNGEOMETRYCALLBACK, OFFSET_XNFILTEREVENTS, OFFSET_XNDESTROYCALLBACK, OFFSET_XNSTRINGCONVERSIONCALLBACK, OFFSET_XNSTRINGCONVERSIONCALLBACK, OFFSET_XNRESETSTATE, OFFSET_XNHOTKEY, OFFSET_XNHOTKEYSTATE, OFFSET_XNPREEDITATTRIBUTES, OFFSET_XNSTATUSATTRIBUTES, OFFSET_XNAREA, OFFSET_XNAREANEEDED, OFFSET_XNSPOTLOCATION, OFFSET_XNCOLORMAP, OFFSET_XNSTDCOLORMAP, OFFSET_XNFOREGROUND, OFFSET_XNBACKGROUND, OFFSET_XNBACKGROUNDPIXMAP, OFFSET_XNFONTSET, OFFSET_XNLINESPACE, OFFSET_XNCURSOR, OFFSET_XNPREEDITSTARTCALLBACK, OFFSET_XNPREEDITDONECALLBACK, OFFSET_XNPREEDITDRAWCALLBACK, OFFSET_XNPREEDITCARETCALLBACK, OFFSET_XNSTATUSSTARTCALLBACK, OFFSET_XNSTATUSDONECALLBACK, OFFSET_XNSTATUSDRAWCALLBACK, OFFSET_XNPREEDITSTATE, OFFSET_XNPREEDITSTATENOTIFYCALLBACK }; static XIMStyle const supported_local_styles[] = { XIMPreeditNone | XIMStatusNone, XIMPreeditNothing | XIMStatusNothing, 0 /* dummy */ }; static Bool _XimDefaultStyles( XimValueOffsetInfo info, XPointer top, XPointer parm, /* unused */ unsigned long mode) /* unused */ { XIMStyles *styles; XIMStyles **out; register int i; unsigned int n; int len; XPointer tmp; n = XIMNumber(supported_local_styles) - 1; len = sizeof(XIMStyles) + sizeof(XIMStyle) * n; if(!(tmp = Xcalloc(1, len))) { return False; } styles = (XIMStyles *)tmp; if (n > 0) { styles->count_styles = (unsigned short)n; styles->supported_styles = (XIMStyle *)((char *)tmp + sizeof(XIMStyles)); for(i = 0; i < n; i++) { styles->supported_styles[i] = supported_local_styles[i]; } } out = (XIMStyles **)((char *)top + info->offset); *out = styles; return True; } static Bool _XimDefaultIMValues( XimValueOffsetInfo info, XPointer top, XPointer parm, /* unused */ unsigned long mode) /* unused */ { XIMValuesList *values_list; XIMValuesList **out; register int i; unsigned int n; int len; XPointer tmp; n = XIMNumber(supported_local_im_values_list); len = sizeof(XIMValuesList) + sizeof(char **) * n; if(!(tmp = Xcalloc(1, len))) { return False; } values_list = (XIMValuesList *)tmp; if (n > 0) { values_list->count_values = (unsigned short)n; values_list->supported_values = (char **)((char *)tmp + sizeof(XIMValuesList)); for(i = 0; i < n; i++) { values_list->supported_values[i] = (char *)name_table + supported_local_im_values_list[i]; } } out = (XIMValuesList **)((char *)top + info->offset); *out = values_list; return True; } static Bool _XimDefaultICValues( XimValueOffsetInfo info, XPointer top, XPointer parm, /* unused */ unsigned long mode) /* unused */ { XIMValuesList *values_list; XIMValuesList **out; register int i; unsigned int n; int len; XPointer tmp; n = XIMNumber(supported_local_ic_values_list); len = sizeof(XIMValuesList) + sizeof(char **) * n; if(!(tmp = Xcalloc(1, len))) { return False; } values_list = (XIMValuesList *)tmp; if (n > 0) { values_list->count_values = (unsigned short)n; values_list->supported_values = (char **)((char *)tmp + sizeof(XIMValuesList)); for(i = 0; i < n; i++) { values_list->supported_values[i] = (char *)name_table + supported_local_ic_values_list[i]; } } out = (XIMValuesList **)((char *)top + info->offset); *out = values_list; return True; } static Bool _XimDefaultVisiblePos( XimValueOffsetInfo info, XPointer top, XPointer parm, /* unused */ unsigned long mode) /* unused */ { Bool *out; out = (Bool *)((char *)top + info->offset); *out = False; return True; } static Bool _XimDefaultFocusWindow( XimValueOffsetInfo info, XPointer top, XPointer parm, unsigned long mode) { Xic ic = (Xic)parm; Window *out; if(ic->core.client_window == (Window)NULL) { return True; } out = (Window *)((char *)top + info->offset); *out = ic->core.client_window; return True; } static Bool _XimDefaultResName( XimValueOffsetInfo info, XPointer top, XPointer parm, unsigned long mode) { Xic ic = (Xic)parm; Xim im = (Xim)ic->core.im; char **out; if(im->core.res_name == (char *)NULL) { return True; } out = (char **)((char *)top + info->offset); *out = im->core.res_name; return True; } static Bool _XimDefaultResClass( XimValueOffsetInfo info, XPointer top, XPointer parm, unsigned long mode) { Xic ic = (Xic)parm; Xim im = (Xim)ic->core.im; char **out; if(im->core.res_class == (char *)NULL) { return True; } out = (char **)((char *)top + info->offset); *out = im->core.res_class; return True; } static Bool _XimDefaultDestroyCB( XimValueOffsetInfo info, XPointer top, XPointer parm, unsigned long mode) { Xic ic = (Xic)parm; Xim im = (Xim)ic->core.im; XIMCallback *out; out = (XIMCallback *)((char *)top + info->offset); *out = im->core.destroy_callback; return True; } static Bool _XimDefaultResetState( XimValueOffsetInfo info, XPointer top, XPointer parm, unsigned long mode) { XIMResetState *out; out = (XIMResetState *)((char *)top + info->offset); *out = XIMInitialState; return True; } static Bool _XimDefaultHotKeyState( XimValueOffsetInfo info, XPointer top, XPointer parm, unsigned long mode) { XIMHotKeyState *out; out = (XIMHotKeyState *)((char *)top + info->offset); *out = XIMHotKeyStateOFF; return True; } static Bool _XimDefaultArea( XimValueOffsetInfo info, XPointer top, XPointer parm, unsigned long mode) { Xic ic = (Xic)parm; Xim im = (Xim)ic->core.im; Window root_return; int x_return, y_return; unsigned int width_return, height_return; unsigned int border_width_return; unsigned int depth_return; XRectangle area; XRectangle *out; if(ic->core.focus_window == (Window)NULL) { return True; } if(XGetGeometry(im->core.display, (Drawable)ic->core.focus_window, &root_return, &x_return, &y_return, &width_return, &height_return, &border_width_return, &depth_return) == (Status)Success) { return True; } area.x = 0; area.y = 0; area.width = width_return; area.height = height_return; out = (XRectangle *)((char *)top + info->offset); *out = area; return True; } static Bool _XimDefaultColormap( XimValueOffsetInfo info, XPointer top, XPointer parm, unsigned long mode) { Xic ic = (Xic)parm; Xim im = (Xim)ic->core.im; XWindowAttributes win_attr; Colormap *out; if(ic->core.client_window == (Window)NULL) { return True; } if(XGetWindowAttributes(im->core.display, ic->core.client_window, &win_attr) == (Status)Success) { return True; } out = (Colormap *)((char *)top + info->offset); *out = win_attr.colormap; return True; } static Bool _XimDefaultStdColormap( XimValueOffsetInfo info, XPointer top, XPointer parm, unsigned long mode) { Atom *out; out = (Atom *)((char *)top + info->offset); *out = (Atom)0; return True; } static Bool _XimDefaultFg( XimValueOffsetInfo info, XPointer top, XPointer parm, unsigned long mode) { Xic ic = (Xic)parm; Xim im = (Xim)ic->core.im; unsigned long fg; unsigned long *out; fg = WhitePixel(im->core.display, DefaultScreen(im->core.display)); out = (unsigned long *)((char *)top + info->offset); *out = fg; return True; } static Bool _XimDefaultBg( XimValueOffsetInfo info, XPointer top, XPointer parm, unsigned long mode) { Xic ic = (Xic)parm; Xim im = (Xim)ic->core.im; unsigned long bg; unsigned long *out; bg = BlackPixel(im->core.display, DefaultScreen(im->core.display)); out = (unsigned long *)((char *)top + info->offset); *out = bg; return True; } static Bool _XimDefaultBgPixmap( XimValueOffsetInfo info, XPointer top, XPointer parm, unsigned long mode) { Pixmap *out; out = (Pixmap *)((char *)top + info->offset); *out = (Pixmap)0; return True; } static Bool _XimDefaultFontSet( XimValueOffsetInfo info, XPointer top, XPointer parm, unsigned long mode) { XFontSet *out; out = (XFontSet *)((char *)top + info->offset); *out = 0; return True; } static Bool _XimDefaultLineSpace( XimValueOffsetInfo info, XPointer top, XPointer parm, unsigned long mode) { Xic ic = (Xic)parm; XFontSet fontset; XFontSetExtents *fset_extents; int line_space = 0; int *out; if(mode & XIM_PREEDIT_ATTR) { fontset = ic->core.preedit_attr.fontset; } else if(mode & XIM_STATUS_ATTR) { fontset = ic->core.status_attr.fontset; } else { return True; } if (fontset) { fset_extents = XExtentsOfFontSet(fontset); line_space = fset_extents->max_logical_extent.height; } out = (int *)((char *)top + info->offset); *out = line_space; return True; } static Bool _XimDefaultCursor( XimValueOffsetInfo info, XPointer top, XPointer parm, unsigned long mode) { Cursor *out; out = (Cursor *)((char *)top + info->offset); *out = (Cursor)0; return True; } static Bool _XimDefaultPreeditState( XimValueOffsetInfo info, XPointer top, XPointer parm, unsigned long mode) { XIMPreeditState *out; out = (XIMPreeditState *)((char *)top + info->offset); *out = XIMPreeditDisable; return True; } static Bool _XimDefaultNest( XimValueOffsetInfo info, XPointer top, XPointer parm, unsigned long mode) { return True; } static Bool _XimEncodeCallback( XimValueOffsetInfo info, XPointer top, XPointer val) { XIMCallback *out; out = (XIMCallback *)((char *)top + info->offset); *out = *((XIMCallback *)val); return True; } static Bool _XimEncodeString( XimValueOffsetInfo info, XPointer top, XPointer val) { char *string; char **out; if(val == (XPointer)NULL) { return False; } if (!(string = strdup((char *)val))) { return False; } out = (char **)((char *)top + info->offset); if(*out) { Xfree(*out); } *out = string; return True; } static Bool _XimEncodeStyle( XimValueOffsetInfo info, XPointer top, XPointer val) { XIMStyle *out; out = (XIMStyle *)((char *)top + info->offset); *out = (XIMStyle)val; return True; } static Bool _XimEncodeWindow( XimValueOffsetInfo info, XPointer top, XPointer val) { Window *out; out = (Window *)((char *)top + info->offset); *out = (Window)val; return True; } static Bool _XimEncodeStringConv( XimValueOffsetInfo info, XPointer top, XPointer val) { /* * Not yet */ return True; } static Bool _XimEncodeResetState( XimValueOffsetInfo info, XPointer top, XPointer val) { XIMResetState *out; out = (XIMResetState *)((char *)top + info->offset); *out = (XIMResetState)val; return True; } static Bool _XimEncodeHotKey( XimValueOffsetInfo info, XPointer top, XPointer val) { XIMHotKeyTriggers *hotkey = (XIMHotKeyTriggers *)val; XIMHotKeyTriggers **out; XIMHotKeyTriggers *key_list; XIMHotKeyTrigger *key; XPointer tmp; int num; int len; register int i; if(hotkey == (XIMHotKeyTriggers *)NULL) { return True; } if((num = hotkey->num_hot_key) == 0) { return True; } len = sizeof(XIMHotKeyTriggers) + sizeof(XIMHotKeyTrigger) * num; if(!(tmp = Xmalloc(len))) { return False; } key_list = (XIMHotKeyTriggers *)tmp; key = (XIMHotKeyTrigger *)((char *)tmp + sizeof(XIMHotKeyTriggers)); for(i = 0; i < num; i++) { key[i] = hotkey->key[i]; } key_list->num_hot_key = num; key_list->key = key; out = (XIMHotKeyTriggers **)((char *)top + info->offset); *out = key_list; return True; } static Bool _XimEncodeHotKetState( XimValueOffsetInfo info, XPointer top, XPointer val) { XIMHotKeyState *out; out = (XIMHotKeyState *)((char *)top + info->offset); *out = (XIMHotKeyState)val; return True; } static Bool _XimEncodeRectangle( XimValueOffsetInfo info, XPointer top, XPointer val) { XRectangle *out; out = (XRectangle *)((char *)top + info->offset); *out = *((XRectangle *)val); return True; } static Bool _XimEncodeSpot( XimValueOffsetInfo info, XPointer top, XPointer val) { XPoint *out; out = (XPoint *)((char *)top + info->offset); *out = *((XPoint *)val); return True; } static Bool _XimEncodeColormap( XimValueOffsetInfo info, XPointer top, XPointer val) { Colormap *out; out = (Colormap *)((char *)top + info->offset); *out = (Colormap)val; return True; } static Bool _XimEncodeStdColormap( XimValueOffsetInfo info, XPointer top, XPointer val) { Atom *out; out = (Atom *)((char *)top + info->offset); *out = (Atom)val; return True; } static Bool _XimEncodeLong( XimValueOffsetInfo info, XPointer top, XPointer val) { unsigned long *out; out = (unsigned long *)((char *)top + info->offset); *out = (unsigned long)val; return True; } static Bool _XimEncodeBgPixmap( XimValueOffsetInfo info, XPointer top, XPointer val) { Pixmap *out; out = (Pixmap *)((char *)top + info->offset); *out = (Pixmap)val; return True; } static Bool _XimEncodeFontSet( XimValueOffsetInfo info, XPointer top, XPointer val) { XFontSet *out; out = (XFontSet *)((char *)top + info->offset); *out = (XFontSet)val; return True; } static Bool _XimEncodeLineSpace( XimValueOffsetInfo info, XPointer top, XPointer val) { int *out; out = (int *)((char *)top + info->offset); *out = (long)val; return True; } static Bool _XimEncodeCursor( XimValueOffsetInfo info, XPointer top, XPointer val) { Cursor *out; out = (Cursor *)((char *)top + info->offset); *out = (Cursor)val; return True; } static Bool _XimEncodePreeditState( XimValueOffsetInfo info, XPointer top, XPointer val) { XIMPreeditState *out; out = (XIMPreeditState *)((char *)top + info->offset); *out = (XIMPreeditState)val; return True; } static Bool _XimEncodeNest( XimValueOffsetInfo info, XPointer top, XPointer val) { return True; } static Bool _XimDecodeStyles( XimValueOffsetInfo info, XPointer top, XPointer val) { XIMStyles *styles; XIMStyles *out; register int i; unsigned int num; int len; XPointer tmp; if(val == (XPointer)NULL) { return False; } styles = *((XIMStyles **)((char *)top + info->offset)); num = styles->count_styles; len = sizeof(XIMStyles) + sizeof(XIMStyle) * num; if(!(tmp = Xcalloc(1, len))) { return False; } out = (XIMStyles *)tmp; if(num >0) { out->count_styles = (unsigned short)num; out->supported_styles = (XIMStyle *)((char *)tmp + sizeof(XIMStyles)); for(i = 0; i < num; i++) { out->supported_styles[i] = styles->supported_styles[i]; } } *((XIMStyles **)val) = out; return True; } static Bool _XimDecodeValues( XimValueOffsetInfo info, XPointer top, XPointer val) { XIMValuesList *values_list; XIMValuesList *out; register int i; unsigned int num; int len; XPointer tmp; if(val == (XPointer)NULL) { return False; } values_list = *((XIMValuesList **)((char *)top + info->offset)); num = values_list->count_values; len = sizeof(XIMValuesList) + sizeof(char **) * num; if(!(tmp = Xcalloc(1, len))) { return False; } out = (XIMValuesList *)tmp; if(num) { out->count_values = (unsigned short)num; out->supported_values = (char **)((char *)tmp + sizeof(XIMValuesList)); for(i = 0; i < num; i++) { out->supported_values[i] = values_list->supported_values[i]; } } *((XIMValuesList **)val) = out; return True; } static Bool _XimDecodeCallback( XimValueOffsetInfo info, XPointer top, XPointer val) { XIMCallback *in; XIMCallback *callback; in = (XIMCallback *)((char *)top + info->offset); if(!(callback = Xmalloc(sizeof(XIMCallback)))) { return False; } callback->client_data = in->client_data; callback->callback = in->callback; *((XIMCallback **)val) = callback; return True; } static Bool _XimDecodeString( XimValueOffsetInfo info, XPointer top, XPointer val) { char *in; char *string; in = *((char **)((char *)top + info->offset)); if (in != NULL) { string = strdup(in); } else { string = Xcalloc(1, 1); /* strdup("") */ } if (string == NULL) { return False; } *((char **)val) = string; return True; } static Bool _XimDecodeBool( XimValueOffsetInfo info, XPointer top, XPointer val) { Bool *in; in = (Bool *)((char *)top + info->offset); *((Bool *)val) = *in; return True; } static Bool _XimDecodeStyle( XimValueOffsetInfo info, XPointer top, XPointer val) { XIMStyle *in; in = (XIMStyle *)((char *)top + info->offset); *((XIMStyle *)val) = *in; return True; } static Bool _XimDecodeWindow( XimValueOffsetInfo info, XPointer top, XPointer val) { Window *in; in = (Window *)((char *)top + info->offset); *((Window *)val) = *in; return True; } static Bool _XimDecodeStringConv( XimValueOffsetInfo info, XPointer top, XPointer val) { /* * Not yet */ return True; } static Bool _XimDecodeResetState( XimValueOffsetInfo info, XPointer top, XPointer val) { XIMResetState *in; in = (XIMResetState *)((char *)top + info->offset); *((XIMResetState *)val) = *in; return True; } static Bool _XimDecodeHotKey( XimValueOffsetInfo info, XPointer top, XPointer val) { XIMHotKeyTriggers *in; XIMHotKeyTriggers *hotkey; XIMHotKeyTrigger *key; XPointer tmp; int num; int len; register int i; in = *((XIMHotKeyTriggers **)((char *)top + info->offset)); num = in->num_hot_key; len = sizeof(XIMHotKeyTriggers) + sizeof(XIMHotKeyTrigger) * num; if(!(tmp = Xmalloc(len))) { return False; } hotkey = (XIMHotKeyTriggers *)tmp; key = (XIMHotKeyTrigger *)((char *)tmp + sizeof(XIMHotKeyTriggers)); for(i = 0; i < num; i++) { key[i] = in->key[i]; } hotkey->num_hot_key = num; hotkey->key = key; *((XIMHotKeyTriggers **)val) = hotkey; return True; } static Bool _XimDecodeHotKetState( XimValueOffsetInfo info, XPointer top, XPointer val) { XIMHotKeyState *in; in = (XIMHotKeyState *)((char *)top + info->offset); *((XIMHotKeyState *)val) = *in; return True; } static Bool _XimDecodeRectangle( XimValueOffsetInfo info, XPointer top, XPointer val) { XRectangle *in; XRectangle *rect; in = (XRectangle *)((char *)top + info->offset); if(!(rect = Xmalloc(sizeof(XRectangle)))) { return False; } *rect = *in; *((XRectangle **)val) = rect; return True; } static Bool _XimDecodeSpot( XimValueOffsetInfo info, XPointer top, XPointer val) { XPoint *in; XPoint *spot; in = (XPoint *)((char *)top + info->offset); if(!(spot = Xmalloc(sizeof(XPoint)))) { return False; } *spot = *in; *((XPoint **)val) = spot; return True; } static Bool _XimDecodeColormap( XimValueOffsetInfo info, XPointer top, XPointer val) { Colormap *in; in = (Colormap *)((char *)top + info->offset); *((Colormap *)val) = *in; return True; } static Bool _XimDecodeStdColormap( XimValueOffsetInfo info, XPointer top, XPointer val) { Atom *in; in = (Atom *)((char *)top + info->offset); *((Atom *)val) = *in; return True; } static Bool _XimDecodeLong( XimValueOffsetInfo info, XPointer top, XPointer val) { unsigned long *in; in = (unsigned long *)((char *)top + info->offset); *((unsigned long *)val) = *in; return True; } static Bool _XimDecodeBgPixmap( XimValueOffsetInfo info, XPointer top, XPointer val) { Pixmap *in; in = (Pixmap *)((char *)top + info->offset); *((Pixmap *)val) = *in; return True; } static Bool _XimDecodeFontSet( XimValueOffsetInfo info, XPointer top, XPointer val) { XFontSet *in; in = (XFontSet *)((char *)top + info->offset); *((XFontSet *)val) = *in; return True; } static Bool _XimDecodeLineSpace( XimValueOffsetInfo info, XPointer top, XPointer val) { int *in; in = (int *)((char *)top + info->offset); *((int *)val) = *in; return True; } static Bool _XimDecodeCursor( XimValueOffsetInfo info, XPointer top, XPointer val) { Cursor *in; in = (Cursor *)((char *)top + info->offset); *((Cursor *)val) = *in; return True; } static Bool _XimDecodePreeditState( XimValueOffsetInfo info, XPointer top, XPointer val) { XIMPreeditState *in; in = (XIMPreeditState *)((char *)top + info->offset); *((XIMPreeditState *)val) = *in; return True; } static Bool _XimDecodeNest( XimValueOffsetInfo info, XPointer top, XPointer val) { return True; } static XIMResource im_resources[] = { {XNQueryInputStyle, 0, XimType_XIMStyles, 0, 0, 0}, {XNDestroyCallback, 0, 0, 0, 0, 0}, {XNResourceName, 0, XimType_STRING8, 0, 0, 0}, {XNResourceClass, 0, XimType_STRING8, 0, 0, 0}, {XNQueryIMValuesList, 0, 0, 0, 0, 0}, {XNQueryICValuesList, 0, 0, 0, 0, 0}, {XNVisiblePosition, 0, 0, 0, 0, 0} }; static XIMResource im_inner_resources[] = { {XNDestroyCallback, 0, 0, 0, 0, 0}, {XNResourceName, 0, XimType_STRING8, 0, 0, 0}, {XNResourceClass, 0, XimType_STRING8, 0, 0, 0}, {XNQueryIMValuesList, 0, 0, 0, 0, 0}, {XNQueryICValuesList, 0, 0, 0, 0, 0}, {XNVisiblePosition, 0, 0, 0, 0, 0} }; static XIMResource ic_resources[] = { {XNInputStyle, 0, XimType_CARD32, 0, 0, 0}, {XNClientWindow, 0, XimType_Window, 0, 0, 0}, {XNFocusWindow, 0, XimType_Window, 0, 0, 0}, {XNResourceName, 0, XimType_STRING8, 0, 0, 0}, {XNResourceClass, 0, XimType_STRING8, 0, 0, 0}, {XNGeometryCallback, 0, 0, 0, 0, 0}, {XNFilterEvents, 0, XimType_CARD32, 0, 0, 0}, {XNDestroyCallback, 0, 0, 0, 0, 0}, {XNStringConversionCallback, 0, 0, 0, 0, 0}, {XNStringConversion, 0, XimType_XIMStringConversion,0, 0, 0}, {XNResetState, 0, 0, 0, 0, 0}, {XNHotKey, 0, XimType_XIMHotKeyTriggers,0, 0, 0}, {XNHotKeyState, 0, XimType_XIMHotKeyState, 0, 0, 0}, {XNPreeditAttributes, 0, XimType_NEST, 0, 0, 0}, {XNStatusAttributes, 0, XimType_NEST, 0, 0, 0}, {XNArea, 0, XimType_XRectangle, 0, 0, 0}, {XNAreaNeeded, 0, XimType_XRectangle, 0, 0, 0}, {XNSpotLocation, 0, XimType_XPoint, 0, 0, 0}, {XNColormap, 0, XimType_CARD32, 0, 0, 0}, {XNStdColormap, 0, XimType_CARD32, 0, 0, 0}, {XNForeground, 0, XimType_CARD32, 0, 0, 0}, {XNBackground, 0, XimType_CARD32, 0, 0, 0}, {XNBackgroundPixmap, 0, XimType_CARD32, 0, 0, 0}, {XNFontSet, 0, XimType_XFontSet, 0, 0, 0}, {XNLineSpace, 0, XimType_CARD32, 0, 0, 0}, {XNCursor, 0, XimType_CARD32, 0, 0, 0}, {XNPreeditStartCallback, 0, 0, 0, 0, 0}, {XNPreeditDoneCallback, 0, 0, 0, 0, 0}, {XNPreeditDrawCallback, 0, 0, 0, 0, 0}, {XNPreeditCaretCallback, 0, 0, 0, 0, 0}, {XNStatusStartCallback, 0, 0, 0, 0, 0}, {XNStatusDoneCallback, 0, 0, 0, 0, 0}, {XNStatusDrawCallback, 0, 0, 0, 0, 0}, {XNPreeditState, 0, 0, 0, 0, 0}, {XNPreeditStateNotifyCallback, 0, 0, 0, 0, 0}, }; static XIMResource ic_inner_resources[] = { {XNResourceName, 0, XimType_STRING8, 0, 0, 0}, {XNResourceClass, 0, XimType_STRING8, 0, 0, 0}, {XNGeometryCallback, 0, 0, 0, 0, 0}, {XNDestroyCallback, 0, 0, 0, 0, 0}, {XNStringConversionCallback, 0, 0, 0, 0, 0}, {XNPreeditStartCallback, 0, 0, 0, 0, 0}, {XNPreeditDoneCallback, 0, 0, 0, 0, 0}, {XNPreeditDrawCallback, 0, 0, 0, 0, 0}, {XNPreeditCaretCallback, 0, 0, 0, 0, 0}, {XNStatusStartCallback, 0, 0, 0, 0, 0}, {XNStatusDoneCallback, 0, 0, 0, 0, 0}, {XNStatusDrawCallback, 0, 0, 0, 0, 0}, {XNPreeditStateNotifyCallback, 0, 0, 0, 0, 0}, }; static XimValueOffsetInfoRec im_attr_info[] = { {OFFSET_XNQUERYINPUTSTYLE, 0, XOffsetOf(XimDefIMValues, styles), _XimDefaultStyles, NULL, _XimDecodeStyles}, {OFFSET_XNDESTROYCALLBACK, 0, XOffsetOf(XimDefIMValues, destroy_callback), NULL, _XimEncodeCallback, _XimDecodeCallback}, {OFFSET_XNRESOURCENAME, 0, XOffsetOf(XimDefIMValues, res_name), NULL, _XimEncodeString, _XimDecodeString}, {OFFSET_XNRESOURCECLASS, 0, XOffsetOf(XimDefIMValues, res_class), NULL, _XimEncodeString, _XimDecodeString}, {OFFSET_XNQUERYIMVALUESLIST, 0, XOffsetOf(XimDefIMValues, im_values_list), _XimDefaultIMValues, NULL, _XimDecodeValues}, {OFFSET_XNQUERYICVALUESLIST, 0, XOffsetOf(XimDefIMValues, ic_values_list), _XimDefaultICValues, NULL, _XimDecodeValues}, {OFFSET_XNVISIBLEPOSITION, 0, XOffsetOf(XimDefIMValues, visible_position), _XimDefaultVisiblePos, NULL, _XimDecodeBool} }; static XimValueOffsetInfoRec ic_attr_info[] = { {OFFSET_XNINPUTSTYLE, 0, XOffsetOf(XimDefICValues, input_style), NULL, _XimEncodeStyle, _XimDecodeStyle}, {OFFSET_XNCLIENTWINDOW, 0, XOffsetOf(XimDefICValues, client_window), NULL, _XimEncodeWindow, _XimDecodeWindow}, {OFFSET_XNFOCUSWINDOW, 0, XOffsetOf(XimDefICValues, focus_window), _XimDefaultFocusWindow, _XimEncodeWindow, _XimDecodeWindow}, {OFFSET_XNRESOURCENAME, 0, XOffsetOf(XimDefICValues, res_name), _XimDefaultResName, _XimEncodeString, _XimDecodeString}, {OFFSET_XNRESOURCECLASS, 0, XOffsetOf(XimDefICValues, res_class), _XimDefaultResClass, _XimEncodeString, _XimDecodeString}, {OFFSET_XNGEOMETRYCALLBACK, 0, XOffsetOf(XimDefICValues, geometry_callback), NULL, _XimEncodeCallback, _XimDecodeCallback}, {OFFSET_XNFILTEREVENTS, 0, XOffsetOf(XimDefICValues, filter_events), NULL, NULL, _XimDecodeLong}, {OFFSET_XNDESTROYCALLBACK, 0, XOffsetOf(XimDefICValues, destroy_callback), _XimDefaultDestroyCB, _XimEncodeCallback, _XimDecodeCallback}, {OFFSET_XNSTRINGCONVERSIONCALLBACK, 0, XOffsetOf(XimDefICValues, string_conversion_callback), NULL, _XimEncodeCallback, _XimDecodeCallback}, {OFFSET_XNSTRINGCONVERSION, 0, XOffsetOf(XimDefICValues, string_conversion), NULL, _XimEncodeStringConv, _XimDecodeStringConv}, {OFFSET_XNRESETSTATE, 0, XOffsetOf(XimDefICValues, reset_state), _XimDefaultResetState, _XimEncodeResetState, _XimDecodeResetState}, {OFFSET_XNHOTKEY, 0, XOffsetOf(XimDefICValues, hotkey), NULL, _XimEncodeHotKey, _XimDecodeHotKey}, {OFFSET_XNHOTKEYSTATE, 0, XOffsetOf(XimDefICValues, hotkey_state), _XimDefaultHotKeyState, _XimEncodeHotKetState, _XimDecodeHotKetState}, {OFFSET_XNPREEDITATTRIBUTES, 0, XOffsetOf(XimDefICValues, preedit_attr), _XimDefaultNest, _XimEncodeNest, _XimDecodeNest}, {OFFSET_XNSTATUSATTRIBUTES, 0, XOffsetOf(XimDefICValues, status_attr), _XimDefaultNest, _XimEncodeNest, _XimDecodeNest}, }; static XimValueOffsetInfoRec ic_pre_attr_info[] = { {OFFSET_XNAREA, 0, XOffsetOf(ICPreeditAttributes, area), _XimDefaultArea, _XimEncodeRectangle, _XimDecodeRectangle}, {OFFSET_XNAREANEEDED, 0, XOffsetOf(ICPreeditAttributes, area_needed), NULL, _XimEncodeRectangle, _XimDecodeRectangle}, {OFFSET_XNSPOTLOCATION, 0, XOffsetOf(ICPreeditAttributes, spot_location), NULL, _XimEncodeSpot, _XimDecodeSpot}, {OFFSET_XNCOLORMAP, 0, XOffsetOf(ICPreeditAttributes, colormap), _XimDefaultColormap, _XimEncodeColormap, _XimDecodeColormap}, {OFFSET_XNSTDCOLORMAP, 0, XOffsetOf(ICPreeditAttributes, std_colormap), _XimDefaultStdColormap, _XimEncodeStdColormap, _XimDecodeStdColormap}, {OFFSET_XNFOREGROUND, 0, XOffsetOf(ICPreeditAttributes, foreground), _XimDefaultFg, _XimEncodeLong, _XimDecodeLong}, {OFFSET_XNBACKGROUND, 0, XOffsetOf(ICPreeditAttributes, background), _XimDefaultBg, _XimEncodeLong, _XimDecodeLong}, {OFFSET_XNBACKGROUNDPIXMAP, 0, XOffsetOf(ICPreeditAttributes, background_pixmap), _XimDefaultBgPixmap, _XimEncodeBgPixmap, _XimDecodeBgPixmap}, {OFFSET_XNFONTSET, 0, XOffsetOf(ICPreeditAttributes, fontset), _XimDefaultFontSet, _XimEncodeFontSet, _XimDecodeFontSet}, {OFFSET_XNLINESPACE, 0, XOffsetOf(ICPreeditAttributes, line_spacing), _XimDefaultLineSpace, _XimEncodeLineSpace, _XimDecodeLineSpace}, {OFFSET_XNCURSOR, 0, XOffsetOf(ICPreeditAttributes, cursor), _XimDefaultCursor, _XimEncodeCursor, _XimDecodeCursor}, {OFFSET_XNPREEDITSTARTCALLBACK, 0, XOffsetOf(ICPreeditAttributes, start_callback), NULL, _XimEncodeCallback, _XimDecodeCallback}, {OFFSET_XNPREEDITDONECALLBACK, 0, XOffsetOf(ICPreeditAttributes, done_callback), NULL, _XimEncodeCallback, _XimDecodeCallback}, {OFFSET_XNPREEDITDRAWCALLBACK, 0, XOffsetOf(ICPreeditAttributes, draw_callback), NULL, _XimEncodeCallback, _XimDecodeCallback}, {OFFSET_XNPREEDITCARETCALLBACK, 0, XOffsetOf(ICPreeditAttributes, caret_callback), NULL, _XimEncodeCallback, _XimDecodeCallback}, {OFFSET_XNPREEDITSTATE, 0, XOffsetOf(ICPreeditAttributes, preedit_state), _XimDefaultPreeditState, _XimEncodePreeditState,_XimDecodePreeditState}, {OFFSET_XNPREEDITSTATENOTIFYCALLBACK, 0, XOffsetOf(ICPreeditAttributes, state_notify_callback), NULL, _XimEncodeCallback, _XimDecodeCallback}, }; static XimValueOffsetInfoRec ic_sts_attr_info[] = { {OFFSET_XNAREA, 0, XOffsetOf(ICStatusAttributes, area), _XimDefaultArea, _XimEncodeRectangle, _XimDecodeRectangle}, {OFFSET_XNAREANEEDED, 0, XOffsetOf(ICStatusAttributes, area_needed), NULL, _XimEncodeRectangle, _XimDecodeRectangle}, {OFFSET_XNCOLORMAP, 0, XOffsetOf(ICStatusAttributes, colormap), _XimDefaultColormap, _XimEncodeColormap, _XimDecodeColormap}, {OFFSET_XNSTDCOLORMAP, 0, XOffsetOf(ICStatusAttributes, std_colormap), _XimDefaultStdColormap, _XimEncodeStdColormap, _XimDecodeStdColormap}, {OFFSET_XNFOREGROUND, 0, XOffsetOf(ICStatusAttributes, foreground), _XimDefaultFg, _XimEncodeLong, _XimDecodeLong}, {OFFSET_XNBACKGROUND, 0, XOffsetOf(ICStatusAttributes, background), _XimDefaultBg, _XimEncodeLong, _XimDecodeLong}, {OFFSET_XNBACKGROUNDPIXMAP, 0, XOffsetOf(ICStatusAttributes, background_pixmap), _XimDefaultBgPixmap, _XimEncodeBgPixmap, _XimDecodeBgPixmap}, {OFFSET_XNFONTSET, 0, XOffsetOf(ICStatusAttributes, fontset), _XimDefaultFontSet, _XimEncodeFontSet, _XimDecodeFontSet}, {OFFSET_XNLINESPACE, 0, XOffsetOf(ICStatusAttributes, line_spacing), _XimDefaultLineSpace, _XimEncodeLineSpace, _XimDecodeLineSpace}, {OFFSET_XNCURSOR, 0, XOffsetOf(ICStatusAttributes, cursor), _XimDefaultCursor, _XimEncodeCursor, _XimDecodeCursor}, {OFFSET_XNSTATUSSTARTCALLBACK, 0, XOffsetOf(ICStatusAttributes, start_callback), NULL, _XimEncodeCallback, _XimDecodeCallback}, {OFFSET_XNSTATUSDONECALLBACK, 0, XOffsetOf(ICStatusAttributes, done_callback), NULL, _XimEncodeCallback, _XimDecodeCallback}, {OFFSET_XNSTATUSDRAWCALLBACK, 0, XOffsetOf(ICStatusAttributes, draw_callback), NULL, _XimEncodeCallback, _XimDecodeCallback} }; typedef struct _XimIMMode { unsigned short name_offset; unsigned short mode; } XimIMMode; static const XimIMMode im_mode[] = { {OFFSET_XNQUERYINPUTSTYLE, (XIM_MODE_IM_DEFAULT | XIM_MODE_IM_GET)}, {OFFSET_XNDESTROYCALLBACK, (XIM_MODE_IM_DEFAULT | XIM_MODE_IM_SET | XIM_MODE_IM_GET)}, {OFFSET_XNRESOURCENAME, (XIM_MODE_IM_DEFAULT | XIM_MODE_IM_SET | XIM_MODE_IM_GET)}, {OFFSET_XNRESOURCECLASS, (XIM_MODE_IM_DEFAULT | XIM_MODE_IM_SET | XIM_MODE_IM_GET)}, {OFFSET_XNQUERYIMVALUESLIST, (XIM_MODE_IM_DEFAULT | XIM_MODE_IM_GET)}, {OFFSET_XNQUERYICVALUESLIST, (XIM_MODE_IM_DEFAULT | XIM_MODE_IM_GET)}, {OFFSET_XNVISIBLEPOSITION, (XIM_MODE_IM_DEFAULT | XIM_MODE_IM_GET)} }; typedef struct _XimICMode { unsigned short name_offset; unsigned short preedit_callback_mode; unsigned short preedit_position_mode; unsigned short preedit_area_mode; unsigned short preedit_nothing_mode; unsigned short preedit_none_mode; unsigned short status_callback_mode; unsigned short status_area_mode; unsigned short status_nothing_mode; unsigned short status_none_mode; } XimICMode; static const XimICMode ic_mode[] = { {OFFSET_XNINPUTSTYLE, (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_GET), (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_GET), (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_GET), (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_GET), (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_GET), (XIM_MODE_STS_CREATE | XIM_MODE_STS_GET), (XIM_MODE_STS_CREATE | XIM_MODE_STS_GET), (XIM_MODE_STS_CREATE | XIM_MODE_STS_GET), (XIM_MODE_STS_CREATE | XIM_MODE_STS_GET)}, {OFFSET_XNCLIENTWINDOW, (XIM_MODE_PRE_ONCE | XIM_MODE_PRE_GET), (XIM_MODE_PRE_ONCE | XIM_MODE_PRE_GET), (XIM_MODE_PRE_ONCE | XIM_MODE_PRE_GET), (XIM_MODE_PRE_ONCE | XIM_MODE_PRE_GET), 0, (XIM_MODE_STS_ONCE | XIM_MODE_STS_GET), (XIM_MODE_STS_ONCE | XIM_MODE_STS_GET), (XIM_MODE_STS_ONCE | XIM_MODE_STS_GET), 0}, {OFFSET_XNFOCUSWINDOW, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0}, {OFFSET_XNRESOURCENAME, 0, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, 0, (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0}, {OFFSET_XNRESOURCECLASS, 0, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, 0, (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0}, {OFFSET_XNGEOMETRYCALLBACK, 0, 0, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, 0, 0, (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0, 0}, {OFFSET_XNFILTEREVENTS, XIM_MODE_PRE_GET, XIM_MODE_PRE_GET, XIM_MODE_PRE_GET, XIM_MODE_PRE_GET, 0, XIM_MODE_STS_GET, XIM_MODE_STS_GET, XIM_MODE_STS_GET, XIM_MODE_STS_GET}, {OFFSET_XNDESTROYCALLBACK, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, 0, 0, 0}, {OFFSET_XNSTRINGCONVERSIONCALLBACK, (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, 0, 0, 0}, {OFFSET_XNSTRINGCONVERSION, XIM_MODE_PRE_SET, XIM_MODE_PRE_SET, XIM_MODE_PRE_SET, XIM_MODE_PRE_SET, XIM_MODE_PRE_SET, 0, 0, 0, 0}, {OFFSET_XNRESETSTATE, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, 0, 0, 0, 0}, {OFFSET_XNHOTKEY, (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, 0, 0, 0, 0}, {OFFSET_XNHOTKEYSTATE, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, 0, 0, 0, 0}, {OFFSET_XNPREEDITATTRIBUTES, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, 0, 0, 0, 0}, {OFFSET_XNSTATUSATTRIBUTES, 0, 0, 0, 0, 0, (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0}, {OFFSET_XNAREA, 0, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, 0, 0, (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0, 0}, {OFFSET_XNAREANEEDED, 0, 0, (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, 0, 0, (XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0, 0}, {OFFSET_XNSPOTLOCATION, 0, /*(XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),*/ (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, 0, 0, 0}, {OFFSET_XNCOLORMAP, 0, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, 0, (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0}, {OFFSET_XNSTDCOLORMAP, 0, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, 0, (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0}, {OFFSET_XNFOREGROUND, 0, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, 0, (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0}, {OFFSET_XNBACKGROUND, 0, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, 0, (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0}, {OFFSET_XNBACKGROUNDPIXMAP, 0, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, 0, (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0}, {OFFSET_XNFONTSET, 0, (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, 0, (XIM_MODE_STS_CREATE | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0}, {OFFSET_XNLINESPACE, 0, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, 0, (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0}, {OFFSET_XNCURSOR, 0, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, 0, (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0}, {OFFSET_XNPREEDITSTARTCALLBACK, (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, 0, 0, 0, 0, 0, 0, 0}, {OFFSET_XNPREEDITDONECALLBACK, (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, 0, 0, 0, 0, 0, 0, 0}, {OFFSET_XNPREEDITDRAWCALLBACK, (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, 0, 0, 0, 0, 0, 0, 0}, {OFFSET_XNPREEDITCARETCALLBACK, (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, 0, 0, 0, 0, 0, 0, 0}, {OFFSET_XNPREEDITSTATE, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, 0, 0, 0, 0}, {OFFSET_XNPREEDITSTATENOTIFYCALLBACK, (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, 0, 0, 0, 0}, {OFFSET_XNSTATUSSTARTCALLBACK, 0, 0, 0, 0, 0, (XIM_MODE_STS_CREATE | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0, 0, 0}, {OFFSET_XNSTATUSDONECALLBACK, 0, 0, 0, 0, 0, (XIM_MODE_STS_CREATE | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0, 0, 0}, {OFFSET_XNSTATUSDRAWCALLBACK, 0, 0, 0, 0, 0, (XIM_MODE_STS_CREATE | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0, 0, 0} }; /* the quarks are separated from im_mode/ic_mode so those arrays * can be const. */ static XrmQuark im_mode_quark[sizeof(im_mode) / sizeof(im_mode[0])]; static XrmQuark ic_mode_quark[sizeof(ic_mode) / sizeof(ic_mode[0])]; static Bool _XimSetResourceList( XIMResourceList *res_list, unsigned int *list_num, XIMResourceList resource, unsigned int num_resource, unsigned short id) { register int i; int len; XIMResourceList res; len = sizeof(XIMResource) * num_resource; if(!(res = Xcalloc(1, len))) { return False; } for(i = 0; i < num_resource; i++, id++) { res[i] = resource[i]; res[i].id = id; } _XIMCompileResourceList(res, num_resource); *res_list = res; *list_num = num_resource; return True; } Bool _XimSetIMResourceList( XIMResourceList *res_list, unsigned int *list_num) { return _XimSetResourceList(res_list, list_num, im_resources, XIMNumber(im_resources), 100); } Bool _XimSetICResourceList( XIMResourceList *res_list, unsigned int *list_num) { return _XimSetResourceList(res_list, list_num, ic_resources, XIMNumber(ic_resources), 200); } Bool _XimSetInnerIMResourceList( XIMResourceList *res_list, unsigned int *list_num) { return _XimSetResourceList(res_list, list_num, im_inner_resources, XIMNumber(im_inner_resources), 100); } Bool _XimSetInnerICResourceList( XIMResourceList *res_list, unsigned int *list_num) { return _XimSetResourceList(res_list, list_num, ic_inner_resources, XIMNumber(ic_inner_resources), 200); } static XIMResourceList _XimGetResourceListRecByMode( XIMResourceList res_list, unsigned int list_num, unsigned short mode) { register int i; for(i = 0; i < list_num; i++) { if (res_list[i].mode & mode) { return (XIMResourceList)&res_list[i]; } } return (XIMResourceList)NULL; } Bool _XimCheckCreateICValues( XIMResourceList res_list, unsigned int list_num) { if (!_XimGetResourceListRecByMode(res_list, list_num, XIM_MODE_IC_CREATE)) { return True; } return False; } XIMResourceList _XimGetResourceListRecByQuark( XIMResourceList res_list, unsigned int list_num, XrmQuark quark) { register int i; for(i = 0; i < list_num; i++) { if (res_list[i].xrm_name == quark) { return (XIMResourceList)&res_list[i]; } } return (XIMResourceList)NULL; } XIMResourceList _XimGetResourceListRec( XIMResourceList res_list, unsigned int list_num, const char *name) { XrmQuark quark = XrmStringToQuark(name); return _XimGetResourceListRecByQuark(res_list, list_num, quark); } char * _XimSetIMValueData( Xim im, XPointer top, XIMArg *values, XIMResourceList res_list, unsigned int list_num) { register XIMArg *p; XIMResourceList res; int check; for(p = values; p->name != NULL; p++) { if(!(res = _XimGetResourceListRec(res_list, list_num, p->name))) { return p->name; } check = _XimCheckIMMode(res, XIM_SETIMVALUES); if(check == XIM_CHECK_INVALID) { continue; } else if (check == XIM_CHECK_ERROR) { return p->name; } if(!_XimEncodeLocalIMAttr(res, top, p->value)) { return p->name; } } return NULL; } char * _XimGetIMValueData( Xim im, XPointer top, XIMArg *values, XIMResourceList res_list, unsigned int list_num) { register XIMArg *p; XIMResourceList res; int check; for(p = values; p->name != NULL; p++) { if(!(res = _XimGetResourceListRec(res_list, list_num, p->name))) { return p->name; } check = _XimCheckIMMode(res, XIM_GETIMVALUES); if(check == XIM_CHECK_INVALID) { continue; } else if (check == XIM_CHECK_ERROR) { return p->name; } if(!_XimDecodeLocalIMAttr(res, top, p->value)) { return p->name; } } return NULL; } void _XimSetIMMode( XIMResourceList res_list, unsigned int list_num) { XIMResourceList res; unsigned int n = XIMNumber(im_mode); register int i; for(i = 0; i < n; i++) { if(!(res = _XimGetResourceListRecByQuark(res_list, list_num, im_mode_quark[i]))) { continue; } res->mode = im_mode[i].mode; } return; } static int _XimCheckSetIMDefaultsMode( XIMResourceList res) { if(res->mode & XIM_MODE_IM_DEFAULT) { return XIM_CHECK_VALID; } return XIM_CHECK_INVALID; } static int _XimCheckSetIMValuesMode( XIMResourceList res) { if(res->mode & XIM_MODE_IM_SET) { return XIM_CHECK_VALID; } return XIM_CHECK_INVALID; } static int _XimCheckGetIMValuesMode( XIMResourceList res) { if(res->mode & XIM_MODE_IM_GET) { return XIM_CHECK_VALID; } return XIM_CHECK_INVALID; } int _XimCheckIMMode( XIMResourceList res, unsigned long mode) { if(res->mode == 0) { return XIM_CHECK_INVALID; } if(mode & XIM_SETIMDEFAULTS) { return _XimCheckSetIMDefaultsMode(res); } else if (mode & XIM_SETIMVALUES) { return _XimCheckSetIMValuesMode(res); } else if (mode & XIM_GETIMVALUES) { return _XimCheckGetIMValuesMode(res); } else { return XIM_CHECK_ERROR; } } void _XimSetICMode(XIMResourceList res_list, unsigned int list_num, XIMStyle style) { XIMResourceList res; unsigned int n = XIMNumber(ic_mode); register int i; unsigned int pre_offset; unsigned int sts_offset; if(style & XIMPreeditArea) { pre_offset = XOffsetOf(XimICMode, preedit_area_mode); } else if(style & XIMPreeditCallbacks) { pre_offset = XOffsetOf(XimICMode, preedit_callback_mode); } else if(style & XIMPreeditPosition) { pre_offset = XOffsetOf(XimICMode, preedit_position_mode); } else if(style & XIMPreeditNothing) { pre_offset = XOffsetOf(XimICMode, preedit_nothing_mode); } else { pre_offset = XOffsetOf(XimICMode, preedit_none_mode); } if(style & XIMStatusArea) { sts_offset = XOffsetOf(XimICMode, status_area_mode); } else if(style & XIMStatusCallbacks) { sts_offset = XOffsetOf(XimICMode, status_callback_mode); } else if(style & XIMStatusNothing) { sts_offset = XOffsetOf(XimICMode, status_nothing_mode); } else { sts_offset = XOffsetOf(XimICMode, status_none_mode); } for(i = 0; i < n; i++) { if(!(res = _XimGetResourceListRecByQuark(res_list, list_num, ic_mode_quark[i]))) { continue; } res->mode = ( (*(const unsigned short *)((const char *)&ic_mode[i] + pre_offset)) | (*(const unsigned short *)((const char *)&ic_mode[i] + sts_offset))); } return; } static int _XimCheckSetICDefaultsMode( XIMResourceList res, unsigned long mode) { if(mode & XIM_PREEDIT_ATTR) { if(!(res->mode & XIM_MODE_PRE_MASK)) { return XIM_CHECK_INVALID; } if(res->mode & XIM_MODE_PRE_CREATE) { return XIM_CHECK_ERROR; } else if (!(res->mode & XIM_MODE_PRE_DEFAULT)) { return XIM_CHECK_INVALID; } } else if(mode & XIM_STATUS_ATTR) { if(!(res->mode & XIM_MODE_STS_MASK)) { return XIM_CHECK_INVALID; } if(res->mode & XIM_MODE_STS_CREATE) { return XIM_CHECK_ERROR; } if(!(res->mode & XIM_MODE_STS_DEFAULT)) { return XIM_CHECK_INVALID; } } else { if(!res->mode) { return XIM_CHECK_INVALID; } if(res->mode & XIM_MODE_IC_CREATE) { return XIM_CHECK_ERROR; } if(!(res->mode & XIM_MODE_IC_DEFAULT)) { return XIM_CHECK_INVALID; } } return XIM_CHECK_VALID; } static int _XimCheckCreateICMode( XIMResourceList res, unsigned long mode) { if(mode & XIM_PREEDIT_ATTR) { if(!(res->mode & XIM_MODE_PRE_MASK)) { return XIM_CHECK_INVALID; } if(res->mode & XIM_MODE_PRE_CREATE) { res->mode &= ~XIM_MODE_PRE_CREATE; } else if(res->mode & XIM_MODE_PRE_ONCE) { res->mode &= ~XIM_MODE_PRE_ONCE; } else if(res->mode & XIM_MODE_PRE_DEFAULT) { res->mode &= ~XIM_MODE_PRE_DEFAULT; } else if (!(res->mode & XIM_MODE_PRE_SET)) { return XIM_CHECK_ERROR; } } else if(mode & XIM_STATUS_ATTR) { if(!(res->mode & XIM_MODE_STS_MASK)) { return XIM_CHECK_INVALID; } if(res->mode & XIM_MODE_STS_CREATE) { res->mode &= ~XIM_MODE_STS_CREATE; } else if(res->mode & XIM_MODE_STS_ONCE) { res->mode &= ~XIM_MODE_STS_ONCE; } else if(res->mode & XIM_MODE_STS_DEFAULT) { res->mode &= ~XIM_MODE_STS_DEFAULT; } else if (!(res->mode & XIM_MODE_STS_SET)) { return XIM_CHECK_ERROR; } } else { if(!res->mode) { return XIM_CHECK_INVALID; } if(res->mode & XIM_MODE_IC_CREATE) { res->mode &= ~XIM_MODE_IC_CREATE; } else if(res->mode & XIM_MODE_IC_ONCE) { res->mode &= ~XIM_MODE_IC_ONCE; } else if(res->mode & XIM_MODE_IC_DEFAULT) { res->mode &= ~XIM_MODE_IC_DEFAULT; } else if (!(res->mode & XIM_MODE_IC_SET)) { return XIM_CHECK_ERROR; } } return XIM_CHECK_VALID; } static int _XimCheckSetICValuesMode( XIMResourceList res, unsigned long mode) { if(mode & XIM_PREEDIT_ATTR) { if(!(res->mode & XIM_MODE_PRE_MASK)) { return XIM_CHECK_INVALID; } if(res->mode & XIM_MODE_PRE_ONCE) { res->mode &= ~XIM_MODE_PRE_ONCE; } else if(!(res->mode & XIM_MODE_PRE_SET)) { return XIM_CHECK_ERROR; } } else if(mode & XIM_STATUS_ATTR) { if(!(res->mode & XIM_MODE_STS_MASK)) { return XIM_CHECK_INVALID; } if(res->mode & XIM_MODE_STS_ONCE) { res->mode &= ~XIM_MODE_STS_ONCE; } else if(!(res->mode & XIM_MODE_STS_SET)) { return XIM_CHECK_ERROR; } } else { if(!res->mode) { return XIM_CHECK_INVALID; } if(res->mode & XIM_MODE_IC_ONCE) { res->mode &= ~XIM_MODE_IC_ONCE; } else if(!(res->mode & XIM_MODE_IC_SET)) { return XIM_CHECK_ERROR; } } return XIM_CHECK_VALID; } static int _XimCheckGetICValuesMode( XIMResourceList res, unsigned long mode) { if(mode & XIM_PREEDIT_ATTR) { if(!(res->mode & XIM_MODE_PRE_MASK)) { return XIM_CHECK_INVALID; } if(!(res->mode & XIM_MODE_PRE_GET)) { return XIM_CHECK_ERROR; } } else if(mode & XIM_STATUS_ATTR) { if(!(res->mode & XIM_MODE_STS_MASK)) { return XIM_CHECK_INVALID; } if(!(res->mode & XIM_MODE_STS_GET)) { return XIM_CHECK_ERROR; } } else { if(!res->mode) { return XIM_CHECK_INVALID; } if(!(res->mode & XIM_MODE_IC_GET)) { return XIM_CHECK_ERROR; } } return XIM_CHECK_VALID; } int _XimCheckICMode( XIMResourceList res, unsigned long mode) { if(mode &XIM_SETICDEFAULTS) { return _XimCheckSetICDefaultsMode(res, mode); } else if (mode & XIM_CREATEIC) { return _XimCheckCreateICMode(res, mode); } else if (mode & XIM_SETICVALUES) { return _XimCheckSetICValuesMode(res, mode); } else if (mode & XIM_GETICVALUES) { return _XimCheckGetICValuesMode(res, mode); } else { return XIM_CHECK_ERROR; } } Bool _XimSetLocalIMDefaults( Xim im, XPointer top, XIMResourceList res_list, unsigned int list_num) { XimValueOffsetInfo info; unsigned int num; register int i; XIMResourceList res; int check; info = im_attr_info; num = XIMNumber(im_attr_info); for(i = 0; i < num; i++) { if((res = _XimGetResourceListRecByQuark( res_list, list_num, info[i].quark)) == (XIMResourceList)NULL) { return False; } check = _XimCheckIMMode(res, XIM_SETIMDEFAULTS); if(check == XIM_CHECK_INVALID) { continue; } else if (check == XIM_CHECK_ERROR) { return False; } if(!info[i].defaults) { continue; } if(!(info[i].defaults(&info[i], top, (XPointer)NULL, 0))) { return False; } } return True; } Bool _XimSetICDefaults( Xic ic, XPointer top, unsigned long mode, XIMResourceList res_list, unsigned int list_num) { unsigned int num; XimValueOffsetInfo info; register int i; XIMResourceList res; int check; XrmQuark pre_quark; XrmQuark sts_quark; pre_quark = XrmStringToQuark(XNPreeditAttributes); sts_quark = XrmStringToQuark(XNStatusAttributes); if(mode & XIM_PREEDIT_ATTR) { info = ic_pre_attr_info; num = XIMNumber(ic_pre_attr_info); } else if(mode & XIM_STATUS_ATTR) { info = ic_sts_attr_info; num = XIMNumber(ic_sts_attr_info); } else { info = ic_attr_info; num = XIMNumber(ic_attr_info); } for(i = 0; i < num; i++) { if(info[i].quark == pre_quark) { if(!_XimSetICDefaults(ic, (XPointer)((char *)top + info[i].offset), (mode | XIM_PREEDIT_ATTR), res_list, list_num)) { return False; } } else if (info[i].quark == sts_quark) { if(!_XimSetICDefaults(ic, (XPointer)((char *)top + info[i].offset), (mode | XIM_STATUS_ATTR), res_list, list_num)) { return False; } } else { if(!(res = _XimGetResourceListRecByQuark(res_list, list_num, info[i].quark))) { return False; } check = _XimCheckICMode(res, mode); if (check == XIM_CHECK_INVALID) { continue; } else if (check == XIM_CHECK_ERROR) { return False; } if (!info[i].defaults) { continue; } if (!(info[i].defaults(&info[i], top, (XPointer)ic, mode))) { return False; } } } return True; } static Bool _XimEncodeAttr( XimValueOffsetInfo info, unsigned int num, XIMResourceList res, XPointer top, XPointer val) { register int i; for(i = 0; i < num; i++ ) { if(info[i].quark == res->xrm_name) { if(!info[i].encode) { return False; } return (*info[i].encode)(&info[i], top, val); } } return False; } Bool _XimEncodeLocalIMAttr( XIMResourceList res, XPointer top, XPointer val) { return _XimEncodeAttr(im_attr_info, XIMNumber(im_attr_info), res, top, val); } Bool _XimEncodeLocalICAttr( Xic ic, XIMResourceList res, XPointer top, XIMArg *arg, unsigned long mode) { unsigned int num; XimValueOffsetInfo info; if(mode & XIM_PREEDIT_ATTR) { info = ic_pre_attr_info; num = XIMNumber(ic_pre_attr_info); } else if(mode & XIM_STATUS_ATTR) { info = ic_sts_attr_info; num = XIMNumber(ic_sts_attr_info); } else { info = ic_attr_info; num = XIMNumber(ic_attr_info); } return _XimEncodeAttr(info, num, res, top, arg->value); } static Bool _XimEncodeLocalTopValue( Xic ic, XIMResourceList res, XPointer val, Bool flag) { XIMArg *p = (XIMArg *)val; if (res->xrm_name == XrmStringToQuark(XNClientWindow)) { ic->core.client_window = (Window)p->value; if (ic->core.focus_window == (Window)0) ic->core.focus_window = ic->core.client_window; if (flag) { _XRegisterFilterByType(ic->core.im->core.display, ic->core.focus_window, KeyPress, KeyRelease, _XimLocalFilter, (XPointer)ic); } } else if (res->xrm_name == XrmStringToQuark(XNFocusWindow)) { if (ic->core.client_window) { if (flag) { _XUnregisterFilter(ic->core.im->core.display, ic->core.focus_window, _XimLocalFilter, (XPointer)ic); } ic->core.focus_window = (Window)p->value; if (flag) { _XRegisterFilterByType(ic->core.im->core.display, ic->core.focus_window, KeyPress, KeyRelease, _XimLocalFilter, (XPointer)ic); } } else ic->core.focus_window = (Window)p->value; } return True; } static Bool _XimEncodeLocalPreeditValue( Xic ic, XIMResourceList res, XPointer val) { XIMArg *p = (XIMArg *)val; if (res->xrm_name == XrmStringToQuark(XNStdColormap)) { XStandardColormap *colormap_ret; int count; if (!(XGetRGBColormaps(ic->core.im->core.display, ic->core.focus_window, &colormap_ret, &count, (Atom)p->value))) return False; Xfree(colormap_ret); } return True; } static Bool _XimEncodeLocalStatusValue( Xic ic, XIMResourceList res, XPointer val) { XIMArg *p = (XIMArg *)val; if (res->xrm_name == XrmStringToQuark(XNStdColormap)) { XStandardColormap *colormap_ret; int count; if (!(XGetRGBColormaps(ic->core.im->core.display, ic->core.focus_window, &colormap_ret, &count, (Atom)p->value))) return False; Xfree(colormap_ret); } return True; } char * _XimSetICValueData( Xic ic, XPointer top, XIMResourceList res_list, unsigned int list_num, XIMArg *values, unsigned long mode, Bool flag) { register XIMArg *p; XIMResourceList res; char *name; int check; XrmQuark pre_quark; XrmQuark sts_quark; pre_quark = XrmStringToQuark(XNPreeditAttributes); sts_quark = XrmStringToQuark(XNStatusAttributes); for(p = values; p->name != NULL; p++) { if((res = _XimGetResourceListRec(res_list, list_num, p->name)) == (XIMResourceList)NULL) { return p->name; } if(res->xrm_name == pre_quark) { if(((name = _XimSetICValueData(ic, (XPointer)(&((XimDefICValues *)top)->preedit_attr), res_list, list_num, (XIMArg *)p->value, (mode | XIM_PREEDIT_ATTR), flag)))) { return name; } } else if(res->xrm_name == sts_quark) { if(((name = _XimSetICValueData(ic, (XPointer)(&((XimDefICValues *)top)->status_attr), res_list, list_num, (XIMArg *)p->value, (mode | XIM_STATUS_ATTR), flag)))) { return name; } } else { check = _XimCheckICMode(res, mode); if(check == XIM_CHECK_INVALID) { continue; } else if(check == XIM_CHECK_ERROR) { return p->name; } if(mode & XIM_PREEDIT_ATTR) { if (!_XimEncodeLocalPreeditValue(ic, res, (XPointer)p)) return p->name; } else if(mode & XIM_STATUS_ATTR) { if (!_XimEncodeLocalStatusValue(ic, res, (XPointer)p)) return p->name; } else { if (!_XimEncodeLocalTopValue(ic, res, (XPointer)p, flag)) return p->name; } if(_XimEncodeLocalICAttr(ic, res, top, p, mode) == False) { return p->name; } } } return NULL; } static Bool _XimCheckInputStyle( XIMStyles *styles, XIMStyle style) { int num = styles->count_styles; register int i; for(i = 0; i < num; i++) { if(styles->supported_styles[i] == style) { return True; } } return False; } Bool _XimCheckLocalInputStyle( Xic ic, XPointer top, XIMArg *values, XIMStyles *styles, XIMResourceList res_list, unsigned int list_num) { XrmQuark quark = XrmStringToQuark(XNInputStyle); register XIMArg *p; XIMResourceList res; for(p = values; p && p->name != NULL; p++) { if(quark == XrmStringToQuark(p->name)) { if(!(res = _XimGetResourceListRec(res_list, list_num, p->name))) { return False; } if(!_XimEncodeLocalICAttr(ic, res, top, p, 0)) { return False; } if (_XimCheckInputStyle(styles, ((XimDefICValues *)top)->input_style)) { return True; } return False; } } return False; } static Bool _XimDecodeAttr( XimValueOffsetInfo info, unsigned int num, XIMResourceList res, XPointer top, XPointer val) { register int i; for(i = 0; i < num; i++ ) { if(info[i].quark == res->xrm_name) { if(!info[i].decode) { return False; } return (*info[i].decode)(&info[i], top, val); } } return False; } Bool _XimDecodeLocalIMAttr( XIMResourceList res, XPointer top, XPointer val) { return _XimDecodeAttr(im_attr_info, XIMNumber(im_attr_info), res, top, val); } Bool _XimDecodeLocalICAttr( XIMResourceList res, XPointer top, XPointer val, unsigned long mode) { unsigned int num; XimValueOffsetInfo info; if(mode & XIM_PREEDIT_ATTR) { info = ic_pre_attr_info; num = XIMNumber(ic_pre_attr_info); } else if(mode & XIM_STATUS_ATTR) { info = ic_sts_attr_info; num = XIMNumber(ic_sts_attr_info); } else { info = ic_attr_info; num = XIMNumber(ic_attr_info); } return _XimDecodeAttr(info, num, res, top, val); } char * _XimGetICValueData(Xic ic, XPointer top, XIMResourceList res_list, unsigned int list_num, XIMArg *values, unsigned long mode) { register XIMArg *p; XIMResourceList res; char *name; int check; XrmQuark pre_quark; XrmQuark sts_quark; pre_quark = XrmStringToQuark(XNPreeditAttributes); sts_quark = XrmStringToQuark(XNStatusAttributes); for(p = values; p->name != NULL; p++) { if((res = _XimGetResourceListRec(res_list, list_num, p->name)) == (XIMResourceList)NULL) { return p->name; } if(res->xrm_name == pre_quark) { if((name = _XimGetICValueData(ic, (XPointer)(&((XimDefICValues *)top)->preedit_attr), res_list, list_num, (XIMArg *)p->value, (mode | XIM_PREEDIT_ATTR)))) { return name; } } else if(res->xrm_name == sts_quark) { if((name = _XimGetICValueData(ic, (XPointer)(&((XimDefICValues *)top)->status_attr), res_list, list_num, (XIMArg *)p->value, (mode | XIM_STATUS_ATTR)))) { return name; } } else { check = _XimCheckICMode(res, mode); if(check == XIM_CHECK_INVALID) { continue; } else if(check == XIM_CHECK_ERROR) { return p->name; } if(_XimDecodeLocalICAttr(res, top, p->value, mode) == False) { return p->name; } } } return NULL; } void _XimGetCurrentIMValues(Xim im, XimDefIMValues *im_values) { bzero((char *)im_values, sizeof(XimDefIMValues)); im_values->styles = im->core.styles; im_values->im_values_list = im->core.im_values_list; im_values->ic_values_list = im->core.ic_values_list; im_values->destroy_callback = im->core.destroy_callback; im_values->res_name = im->core.res_name; im_values->res_class = im->core.res_class; im_values->visible_position = im->core.visible_position; } void _XimSetCurrentIMValues(Xim im, XimDefIMValues *im_values) { im->core.styles = im_values->styles; im->core.im_values_list = im_values->im_values_list; im->core.ic_values_list = im_values->ic_values_list; im->core.destroy_callback = im_values->destroy_callback; im->core.res_name = im_values->res_name; im->core.res_class = im_values->res_class; im->core.visible_position = im_values->visible_position; } void _XimGetCurrentICValues(Xic ic, XimDefICValues *ic_values) { bzero((char *)ic_values, sizeof(XimDefICValues)); ic_values->input_style = ic->core.input_style; ic_values->client_window = ic->core.client_window; ic_values->focus_window = ic->core.focus_window; ic_values->filter_events = ic->core.filter_events; ic_values->geometry_callback = ic->core.geometry_callback; ic_values->res_name = ic->core.res_name; ic_values->res_class = ic->core.res_class; ic_values->destroy_callback = ic->core.destroy_callback; ic_values->string_conversion_callback = ic->core.string_conversion_callback; ic_values->string_conversion = ic->core.string_conversion; ic_values->reset_state = ic->core.reset_state; ic_values->hotkey = ic->core.hotkey; ic_values->hotkey_state = ic->core.hotkey_state; ic_values->preedit_attr = ic->core.preedit_attr; ic_values->status_attr = ic->core.status_attr; } void _XimSetCurrentICValues( Xic ic, XimDefICValues *ic_values) { ic->core.input_style = ic_values->input_style; ic->core.client_window = ic_values->client_window; if (ic_values->focus_window) ic->core.focus_window = ic_values->focus_window; ic->core.filter_events = ic_values->filter_events; ic->core.geometry_callback = ic_values->geometry_callback; ic->core.res_name = ic_values->res_name; ic->core.res_class = ic_values->res_class; ic->core.destroy_callback = ic_values->destroy_callback; ic->core.string_conversion_callback = ic_values->string_conversion_callback; ic->core.string_conversion = ic_values->string_conversion; ic->core.reset_state = ic_values->reset_state; ic->core.hotkey = ic_values->hotkey; ic->core.hotkey_state = ic_values->hotkey_state; ic->core.preedit_attr = ic_values->preedit_attr; ic->core.status_attr = ic_values->status_attr; } static void _XimInitialIMOffsetInfo(void) { unsigned int n = XIMNumber(im_attr_info); register int i; for(i = 0; i < n; i++) { im_attr_info[i].quark = XrmStringToQuark(GET_NAME(im_attr_info[i])); } } static void _XimInitialICOffsetInfo(void) { unsigned int n; register int i; n = XIMNumber(ic_attr_info); for(i = 0; i < n; i++) { ic_attr_info[i].quark = XrmStringToQuark(GET_NAME(ic_attr_info[i])); } n = XIMNumber(ic_pre_attr_info); for(i = 0; i < n; i++) { ic_pre_attr_info[i].quark = XrmStringToQuark(GET_NAME(ic_pre_attr_info[i])); } n = XIMNumber(ic_sts_attr_info); for(i = 0; i < n; i++) { ic_sts_attr_info[i].quark = XrmStringToQuark(GET_NAME(ic_sts_attr_info[i])); } } static void _XimInitialIMMode(void) { unsigned int n = XIMNumber(im_mode); register int i; for(i = 0; i < n; i++) { im_mode_quark[i] = XrmStringToQuark(GET_NAME(im_mode[i])); } } static void _XimInitialICMode(void) { unsigned int n = XIMNumber(ic_mode); register int i; for(i = 0; i < n; i++) { ic_mode_quark[i] = XrmStringToQuark(GET_NAME(ic_mode[i])); } } void _XimInitialResourceInfo(void) { static Bool init_flag = False; if(init_flag == True) { return; } _XimInitialIMOffsetInfo(); _XimInitialICOffsetInfo(); _XimInitialIMMode(); _XimInitialICMode(); init_flag = True; } } } else ic->core.focus_window = (Window)p->value; } return True; } static Bool _XimEncodeLocalPreeditValue( Xic ic, XIMResourceList res, XPointer val) { XIMArg *p = (XIMArg *)val; if (res->xrm_name == XrmStringToQuark(XNStdColormap)) { XStandardColormap *colormalibX11-1.6.3/modules/im/ximcp/imImSw.c000064401431060000012000000042201247741723500176220ustar00alancstaff00002660200006/****************************************************************** Copyright 1992, 1993 by FUJITSU LIMITED Copyright 1993 by Digital Equipment Corporation Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of FUJITSU LIMITED and Digital Equipment Corporation not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. FUJITSU LIMITED and Digital Equipment Corporation makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJITSU LIMITED AND DIGITAL EQUIPMENT CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp Modifier: Franky Ling Digital Equipment Corporation frankyling@hgrd01.enet.dec.com ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include "Xlibint.h" #include "Xlcint.h" #include "Ximint.h" #include "XimImSw.h" static Bool _XimCheckIfDefault( Xim im) { return(True); } XimImsportSW _XimImSportRec[] = { { _XimCheckIfLocalProcessing, _XimLocalOpenIM, _XimLocalIMFree }, { _XimCheckIfThaiProcessing, _XimThaiOpenIM, _XimThaiIMFree }, { _XimCheckIfDefault, _XimProtoOpenIM, _XimProtoIMFree }, { NULL, NULL, NULL }, }; libX11-1.6.3/modules/im/ximcp/imLcLkup.c000064401431060000012000000260221247741723500201410ustar00alancstaff00002660200006/****************************************************************** Copyright 1992 by Fuji Xerox Co., Ltd. Copyright 1992, 1994 by FUJITSU LIMITED Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Fuji Xerox, FUJITSU LIMITED not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. Fuji Xerox, FUJITSU LIMITED make no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. FUJI XEROX, FUJITSU LIMITED DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL FUJI XEROX, FUJITSU LIMITED BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Author: Kazunori Nishihara Fuji Xerox Takashi Fujiwara FUJITSU LIMITED fujiwara@a80.tech.yk.fujitsu.co.jp ******************************************************************/ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include "Xlibint.h" #include "Xlcint.h" #include "XlcPubI.h" #include "Ximint.h" int _XimLocalMbLookupString(XIC xic, XKeyEvent *ev, char *buffer, int bytes, KeySym *keysym, Status *status) { Xic ic = (Xic)xic; int ret; DefTree *b = ic->private.local.base.tree; char *mb = ic->private.local.base.mb; if(ev->type != KeyPress) { if(status) *status = XLookupNone; return(0); } if(ev->keycode == 0 && ( (ic->private.local.composed != 0) ||(ic->private.local.brl_committed != 0))) { if (ic->private.local.brl_committed != 0) { /* Braille Event */ unsigned char pattern = ic->private.local.brl_committed; char mb[XLC_PUBLIC(ic->core.im->core.lcd, mb_cur_max)]; ret = _Xlcwctomb(ic->core.im->core.lcd, mb, BRL_UC_ROW | pattern); if(ret > bytes) { if(status) *status = XBufferOverflow; return(ret); } if(keysym) *keysym = XK_braille_blank | pattern; if(ret > 0) { if (keysym) { if(status) *status = XLookupBoth; } else { if(status) *status = XLookupChars; } memcpy(buffer, mb, ret); } else { if(keysym) { if(status) *status = XLookupKeySym; } else { if(status) *status = XLookupNone; } } } else { /* Composed Event */ ret = strlen(&mb[b[ic->private.local.composed].mb]); if(ret > bytes) { if(status) *status = XBufferOverflow; return(ret); } memcpy(buffer, &mb[b[ic->private.local.composed].mb], ret); if(keysym) *keysym = b[ic->private.local.composed].ks; if (ret > 0) { if (keysym && *keysym != NoSymbol) { if(status) *status = XLookupBoth; } else { if(status) *status = XLookupChars; } } else { if(keysym && *keysym != NoSymbol) { if(status) *status = XLookupKeySym; } else { if(status) *status = XLookupNone; } } } return (ret); } else { /* Throughed Event */ ret = _XimLookupMBText(ic, ev, buffer, bytes, keysym, NULL); if(ret > 0) { if (ret > bytes) { if (status) *status = XBufferOverflow; } else if (keysym && *keysym != NoSymbol) { if(status) *status = XLookupBoth; } else { if(status) *status = XLookupChars; } } else { if(keysym && *keysym != NoSymbol) { if(status) *status = XLookupKeySym; } else { if(status) *status = XLookupNone; } } } return (ret); } int _XimLocalWcLookupString(XIC xic, XKeyEvent *ev, wchar_t *buffer, int wlen, KeySym *keysym, Status *status) { Xic ic = (Xic)xic; int ret; DefTree *b = ic->private.local.base.tree; wchar_t *wc = ic->private.local.base.wc; if(ev->type != KeyPress) { if(status) *status = XLookupNone; return(0); } if(ev->keycode == 0) { if (ic->private.local.brl_committed != 0) { /* Braille Event */ unsigned char pattern = ic->private.local.brl_committed; ret = 1; if (ret > wlen) { if(status) *status = XBufferOverflow; return (ret); } *buffer = BRL_UC_ROW | pattern; if(keysym) { *keysym = XK_braille_blank | pattern; if(status) *status = XLookupBoth; } else if(status) *status = XLookupChars; } else { /* Composed Event */ ret = _Xwcslen(&wc[b[ic->private.local.composed].wc]); if(ret > wlen) { if(status) *status = XBufferOverflow; return (ret); } memcpy((char *)buffer, (char *)&wc[b[ic->private.local.composed].wc], ret * sizeof(wchar_t)); if(keysym) *keysym = b[ic->private.local.composed].ks; if (ret > 0) { if (keysym && *keysym != NoSymbol) { if(status) *status = XLookupBoth; } else { if(status) *status = XLookupChars; } } else { if(keysym && *keysym != NoSymbol) { if(status) *status = XLookupKeySym; } else { if(status) *status = XLookupNone; } } } return (ret); } else { /* Throughed Event */ ret = _XimLookupWCText(ic, ev, buffer, wlen, keysym, NULL); if(ret > 0) { if (ret > wlen) { if (status) *status = XBufferOverflow; } else if (keysym && *keysym != NoSymbol) { if(status) *status = XLookupBoth; } else { if(status) *status = XLookupChars; } } else { if(keysym && *keysym != NoSymbol) { if(status) *status = XLookupKeySym; } else { if(status) *status = XLookupNone; } } } return (ret); } int _XimLocalUtf8LookupString(XIC xic, XKeyEvent *ev, char *buffer, int bytes, KeySym *keysym, Status *status) { Xic ic = (Xic)xic; int ret; DefTree *b = ic->private.local.base.tree; char *utf8 = ic->private.local.base.utf8; if(ev->type != KeyPress) { if(status) *status = XLookupNone; return(0); } if(ev->keycode == 0) { if (ic->private.local.brl_committed != 0) { /* Braille Event */ unsigned char pattern = ic->private.local.brl_committed; ret = 3; if (ret > bytes) { if(status) *status = XBufferOverflow; return (ret); } buffer[0] = 0xe0 | ((BRL_UC_ROW >> 12) & 0x0f); buffer[1] = 0x80 | ((BRL_UC_ROW >> 8) & 0x30) | (pattern >> 6); buffer[2] = 0x80 | (pattern & 0x3f); if(keysym) { *keysym = XK_braille_blank | pattern; if(status) *status = XLookupBoth; } else if(status) *status = XLookupChars; } else { /* Composed Event */ ret = strlen(&utf8[b[ic->private.local.composed].utf8]); if(ret > bytes) { if(status) *status = XBufferOverflow; return (ret); } memcpy(buffer, &utf8[b[ic->private.local.composed].utf8], ret); if(keysym) *keysym = b[ic->private.local.composed].ks; if (ret > 0) { if (keysym && *keysym != NoSymbol) { if(status) *status = XLookupBoth; } else { if(status) *status = XLookupChars; } } else { if(keysym && *keysym != NoSymbol) { if(status) *status = XLookupKeySym; } else { if(status) *status = XLookupNone; } } } return (ret); } else { /* Throughed Event */ ret = _XimLookupUTF8Text(ic, ev, buffer, bytes, keysym, NULL); if(ret > 0) { if (ret > bytes) { if (status) *status = XBufferOverflow; } else if (keysym && *keysym != NoSymbol) { if(status) *status = XLookupBoth; } else { if(status) *status = XLookupChars; } } else { if(keysym && *keysym != NoSymbol) { if(status) *status = XLookupKeySym; } else { if(status) *status = XLookupNone; } } } return (ret); } static int _XimLcctsconvert( XlcConv conv, char *from, int from_len, char *to, int to_len, Status *state) { int from_left; int to_left; int from_savelen; int to_savelen; int from_cnvlen; int to_cnvlen; char *from_buf; char *to_buf; char scratchbuf[BUFSIZ]; Status tmp_state; if (!state) state = &tmp_state; if (!conv || !from || !from_len) { *state = XLookupNone; return 0; } /* Reset the converter. The CompoundText at 'from' starts in initial state. */ _XlcResetConverter(conv); from_left = from_len; to_left = BUFSIZ; from_cnvlen = 0; to_cnvlen = 0; for (;;) { from_buf = &from[from_cnvlen]; from_savelen = from_left; to_buf = &scratchbuf[to_cnvlen]; to_savelen = to_left; if (_XlcConvert(conv, (XPointer *)&from_buf, &from_left, (XPointer *)&to_buf, &to_left, NULL, 0) < 0) { *state = XLookupNone; return 0; } from_cnvlen += (from_savelen - from_left); to_cnvlen += (to_savelen - to_left); if (from_left == 0) { if (!to_cnvlen) { *state = XLookupNone; return 0; } break; } } if (!to || !to_len || (to_len < to_cnvlen)) { *state = XBufferOverflow; } else { memcpy(to, scratchbuf, to_cnvlen); *state = XLookupChars; } return to_cnvlen; } int _XimLcctstombs(XIM xim, char *from, int from_len, char *to, int to_len, Status *state) { return _XimLcctsconvert(((Xim)xim)->private.local.ctom_conv, from, from_len, to, to_len, state); } int _XimLcctstowcs(XIM xim, char *from, int from_len, wchar_t *to, int to_len, Status *state) { Xim im = (Xim)xim; XlcConv conv = im->private.local.ctow_conv; int from_left; int to_left; int from_savelen; int to_savelen; int from_cnvlen; int to_cnvlen; char *from_buf; wchar_t *to_buf; wchar_t scratchbuf[BUFSIZ]; Status tmp_state; if (!state) state = &tmp_state; if (!conv || !from || !from_len) { *state = XLookupNone; return 0; } /* Reset the converter. The CompoundText at 'from' starts in initial state. */ _XlcResetConverter(conv); from_left = from_len; to_left = BUFSIZ; from_cnvlen = 0; to_cnvlen = 0; for (;;) { from_buf = &from[from_cnvlen]; from_savelen = from_left; to_buf = &scratchbuf[to_cnvlen]; to_savelen = to_left; if (_XlcConvert(conv, (XPointer *)&from_buf, &from_left, (XPointer *)&to_buf, &to_left, NULL, 0) < 0) { *state = XLookupNone; return 0; } from_cnvlen += (from_savelen - from_left); to_cnvlen += (to_savelen - to_left); if (from_left == 0) { if (!to_cnvlen){ *state = XLookupNone; return 0; } break; } } if (!to || !to_len || (to_len < to_cnvlen)) { *state = XBufferOverflow; } else { memcpy(to, scratchbuf, to_cnvlen * sizeof(wchar_t)); *state = XLookupChars; } return to_cnvlen; } int _XimLcctstoutf8(XIM xim, char *from, int from_len, char *to, int to_len, Status *state) { return _XimLcctsconvert(((Xim)xim)->private.local.ctoutf8_conv, from, from_len, to, to_len, state); } libX11-1.6.3/modules/im/Makefile.in000064401431060000012000000471701247741725400172120ustar00alancstaff00002660200006# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = modules/im ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_define_dir.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h \ $(top_builddir)/include/X11/XlibConf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASE_CFLAGS = @BASE_CFLAGS@ BIGFONT_CFLAGS = @BIGFONT_CFLAGS@ BIGFONT_LIBS = @BIGFONT_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHANGELOG_CMD = @CHANGELOG_CMD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ FOP = @FOP@ GREP = @GREP@ I18N_MODULE_LIBS = @I18N_MODULE_LIBS@ INSTALL = @INSTALL@ INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ KEYSYMDEFS = @KEYSYMDEFS@ LAUNCHD = @LAUNCHD@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LINT = @LINT@ LINTLIB = @LINTLIB@ LINT_FLAGS = @LINT_FLAGS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MALLOC_ZERO_CFLAGS = @MALLOC_ZERO_CFLAGS@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_SUBSTS = @MAN_SUBSTS@ MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RAWCPP = @RAWCPP@ RAWCPPFLAGS = @RAWCPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRICT_CFLAGS = @STRICT_CFLAGS@ STRIP = @STRIP@ STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ TRADITIONALCPPFLAGS = @TRADITIONALCPPFLAGS@ VERSION = @VERSION@ WCHAR32 = @WCHAR32@ X11_CFLAGS = @X11_CFLAGS@ X11_DATADIR = @X11_DATADIR@ X11_EXTRA_DEPS = @X11_EXTRA_DEPS@ X11_LIBDIR = @X11_LIBDIR@ X11_LIBS = @X11_LIBS@ X11_LOCALEDATADIR = @X11_LOCALEDATADIR@ X11_LOCALEDIR = @X11_LOCALEDIR@ X11_LOCALELIBDIR = @X11_LOCALELIBDIR@ XERRORDB = @XERRORDB@ XKBPROTO_REQUIRES = @XKBPROTO_REQUIRES@ XKEYSYMDB = @XKEYSYMDB@ XLOCALEDATADIR = @XLOCALEDATADIR@ XLOCALEDIR = @XLOCALEDIR@ XLOCALELIBDIR = @XLOCALELIBDIR@ XMALLOC_ZERO_CFLAGS = @XMALLOC_ZERO_CFLAGS@ XMLTO = @XMLTO@ XORG_MAN_PAGE = @XORG_MAN_PAGE@ XORG_SGML_PATH = @XORG_SGML_PATH@ XSLTPROC = @XSLTPROC@ XSL_STYLESHEET = @XSL_STYLESHEET@ XTHREADLIB = @XTHREADLIB@ XTHREAD_CFLAGS = @XTHREAD_CFLAGS@ XTMALLOC_ZERO_CFLAGS = @XTMALLOC_ZERO_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ locales = @locales@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = ximcp all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign modules/im/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign modules/im/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: _vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = libX11-1.6.3/docbook.am000064401431060000012000000062311247741723500150170ustar00alancstaff00002660200006# # Generate output formats for a single DocBook/XML with/without chapters # # Variables set by the calling Makefile: # shelfdir: the location where the docs/specs are installed. Typically $(docdir) # docbook: the main DocBook/XML file, no chapters, appendix or image files # chapters: all files pulled in by an XInclude statement and images. # # # This makefile is intended for Users Documentation and Functional Specifications. # Do not use for Developer Documentation which is not installed and does not require olink. # Refer to http://www.x.org/releases/X11R7.6/doc/xorg-docs/ReleaseNotes.html#id2584393 # for an explanation on documents classification. # # DocBook/XML generated output formats to be installed shelf_DATA = # DocBook/XML file with chapters, appendix and images it includes dist_shelf_DATA = $(docbook) $(chapters) if HAVE_XMLTO if HAVE_STYLESHEETS XMLTO_SEARCHPATH_FLAGS = \ --searchpath "$(XORG_SGML_PATH)/X11" \ --searchpath "$(abs_top_builddir)" XMLTO_HTML_OLINK_FLAGS = \ --stringparam target.database.document=$(XORG_SGML_PATH)/X11/dbs/masterdb.html.xml \ --stringparam current.docid="$(<:.xml=)" XMLTO_HTML_STYLESHEET_FLAGS = -x $(STYLESHEET_SRCDIR)/xorg-xhtml.xsl XMLTO_HTML_FLAGS = \ $(XMLTO_SEARCHPATH_FLAGS) \ $(XMLTO_HTML_STYLESHEET_FLAGS) \ $(XMLTO_HTML_OLINK_FLAGS) shelf_DATA += $(docbook:.xml=.html) %.html: %.xml $(chapters) $(AM_V_GEN)$(XMLTO) $(XMLTO_HTML_FLAGS) xhtml-nochunks $< if HAVE_XMLTO_TEXT shelf_DATA += $(docbook:.xml=.txt) %.txt: %.xml $(chapters) $(AM_V_GEN)$(XMLTO) $(XMLTO_HTML_FLAGS) txt $< endif HAVE_XMLTO_TEXT if HAVE_FOP XMLTO_FO_IMAGEPATH_FLAGS = --stringparam img.src.path=$(abs_builddir)/ XMLTO_PDF_OLINK_FLAGS = \ --stringparam target.database.document=$(XORG_SGML_PATH)/X11/dbs/masterdb.pdf.xml \ --stringparam current.docid="$(<:.xml=)" XMLTO_FO_STYLESHEET_FLAGS = -x $(STYLESHEET_SRCDIR)/xorg-fo.xsl XMLTO_FO_FLAGS = \ $(XMLTO_SEARCHPATH_FLAGS) \ $(XMLTO_FO_STYLESHEET_FLAGS) \ $(XMLTO_FO_IMAGEPATH_FLAGS) \ $(XMLTO_PDF_OLINK_FLAGS) shelf_DATA += $(docbook:.xml=.pdf) %.pdf: %.xml $(chapters) $(AM_V_GEN)$(XMLTO) $(XMLTO_FO_FLAGS) --with-fop pdf $< shelf_DATA += $(docbook:.xml=.ps) %.ps: %.xml $(chapters) $(AM_V_GEN)$(XMLTO) $(XMLTO_FO_FLAGS) --with-fop ps $< endif HAVE_FOP # Generate documents cross-reference target databases if HAVE_XSLTPROC XSLT_SEARCHPATH_FLAGS = \ --path "$(XORG_SGML_PATH)/X11" \ --path "$(abs_top_builddir)" XSLT_OLINK_FLAGS = \ --stringparam targets.filename "$@" \ --stringparam collect.xref.targets "only" \ --stringparam olink.base.uri "$(@:.db=)" XSLT_HTML_FLAGS = \ $(XSLT_SEARCHPATH_FLAGS) \ $(XSLT_OLINK_FLAGS) \ --nonet --xinclude \ $(STYLESHEET_SRCDIR)/xorg-xhtml.xsl XSLT_PDF_FLAGS = \ $(XSLT_SEARCHPATH_FLAGS) \ $(XSLT_OLINK_FLAGS) \ --nonet --xinclude \ $(STYLESHEET_SRCDIR)/xorg-fo.xsl shelf_DATA += $(docbook:.xml=.html.db) %.html.db: %.xml $(chapters) $(AM_V_GEN)$(XSLTPROC) $(XSLT_HTML_FLAGS) $< shelf_DATA += $(docbook:.xml=.pdf.db) %.pdf.db: %.xml $(chapters) $(AM_V_GEN)$(XSLTPROC) $(XSLT_PDF_FLAGS) $< endif HAVE_XSLTPROC endif HAVE_STYLESHEETS endif HAVE_XMLTO CLEANFILES = $(shelf_DATA) libX11-1.6.3/configure000075501431060000012000024735401247741725300150040ustar00alancstaff00002660200006#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for libX11 1.6.3. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: https://bugs.freedesktop.org/enter_bug.cgi?product=xorg $0: about your system, including any error possibly output $0: before this message. Then install a modern shell, or $0: manually run the script under such a shell if you do $0: have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} as_awk_strverscmp=' # Use only awk features that work with 7th edition Unix awk (1978). # My, what an old awk you have, Mr. Solaris! END { while (length(v1) && length(v2)) { # Set d1 to be the next thing to compare from v1, and likewise for d2. # Normally this is a single character, but if v1 and v2 contain digits, # compare them as integers and fractions as strverscmp does. if (v1 ~ /^[0-9]/ && v2 ~ /^[0-9]/) { # Split v1 and v2 into their leading digit string components d1 and d2, # and advance v1 and v2 past the leading digit strings. for (len1 = 1; substr(v1, len1 + 1) ~ /^[0-9]/; len1++) continue for (len2 = 1; substr(v2, len2 + 1) ~ /^[0-9]/; len2++) continue d1 = substr(v1, 1, len1); v1 = substr(v1, len1 + 1) d2 = substr(v2, 1, len2); v2 = substr(v2, len2 + 1) if (d1 ~ /^0/) { if (d2 ~ /^0/) { # Compare two fractions. while (d1 ~ /^0/ && d2 ~ /^0/) { d1 = substr(d1, 2); len1-- d2 = substr(d2, 2); len2-- } if (len1 != len2 && ! (len1 && len2 && substr(d1, 1, 1) == substr(d2, 1, 1))) { # The two components differ in length, and the common prefix # contains only leading zeros. Consider the longer to be less. d1 = -len1 d2 = -len2 } else { # Otherwise, compare as strings. d1 = "x" d1 d2 = "x" d2 } } else { # A fraction is less than an integer. exit 1 } } else { if (d2 ~ /^0/) { # An integer is greater than a fraction. exit 2 } else { # Compare two integers. d1 += 0 d2 += 0 } } } else { # The normal case, without worrying about digits. d1 = substr(v1, 1, 1); v1 = substr(v1, 2) d2 = substr(v2, 1, 1); v2 = substr(v2, 2) } if (d1 < d2) exit 1 if (d1 > d2) exit 2 } # Beware Solaris /usr/xgp4/bin/awk (at least through Solaris 10), # which mishandles some comparisons of empty strings to integers. if (length(v2)) exit 1 if (length(v1)) exit 2 } ' test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='libX11' PACKAGE_TARNAME='libX11' PACKAGE_VERSION='1.6.3' PACKAGE_STRING='libX11 1.6.3' PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=xorg' PACKAGE_URL='' ac_unique_file="Makefile.am" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_list= ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS XTMALLOC_ZERO_CFLAGS XMALLOC_ZERO_CFLAGS MALLOC_ZERO_CFLAGS XERRORDB XKEYSYMDB locales X11_LOCALEDIR XLOCALEDIR X11_LOCALELIBDIR XLOCALELIBDIR X11_LOCALEDATADIR XLOCALEDATADIR X11_LIBS X11_CFLAGS X11_LIBDIR X11_DATADIR MAKE_LINT_LIB_FALSE MAKE_LINT_LIB_TRUE LINTLIB LINT_FALSE LINT_TRUE LINT_FLAGS LINT XKBPROTO_REQUIRES XKB_FALSE XKB_TRUE BIGFONT_LIBS BIGFONT_CFLAGS XLOCALE_FALSE XLOCALE_TRUE XCMS_FALSE XCMS_TRUE KEYSYMDEFS XTHREAD_CFLAGS XTHREADLIB THRSTUBS_FALSE THRSTUBS_TRUE LAUNCHD OS2_FALSE OS2_TRUE WCHAR32 XLIB_LOADABLE_I18N_FALSE XLIB_LOADABLE_I18N_TRUE I18N_MODULE_LIBS X11_EXTRA_DEPS LDFLAGS_FOR_BUILD CFLAGS_FOR_BUILD CPPFLAGS_FOR_BUILD CC_FOR_BUILD HAVE_PERL_FALSE HAVE_PERL_TRUE PERL TRADITIONALCPPFLAGS RAWCPPFLAGS RAWCPP HAVE_STYLESHEETS_FALSE HAVE_STYLESHEETS_TRUE XSL_STYLESHEET STYLESHEET_SRCDIR XORG_SGML_PATH HAVE_XSLTPROC_FALSE HAVE_XSLTPROC_TRUE XSLTPROC HAVE_FOP_FALSE HAVE_FOP_TRUE FOP HAVE_XMLTO_FALSE HAVE_XMLTO_TRUE HAVE_XMLTO_TEXT_FALSE HAVE_XMLTO_TEXT_TRUE XMLTO ENABLE_SPECS_FALSE ENABLE_SPECS_TRUE MAN_SUBSTS XORG_MAN_PAGE ADMIN_MAN_DIR DRIVER_MAN_DIR MISC_MAN_DIR FILE_MAN_DIR LIB_MAN_DIR APP_MAN_DIR ADMIN_MAN_SUFFIX DRIVER_MAN_SUFFIX MISC_MAN_SUFFIX FILE_MAN_SUFFIX LIB_MAN_SUFFIX APP_MAN_SUFFIX INSTALL_CMD PKG_CONFIG CHANGELOG_CMD STRICT_CFLAGS CWARNFLAGS BASE_CFLAGS OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL RANLIB ac_ct_AR AR DLLTOOL OBJDUMP LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP SED LIBTOOL AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM EGREP GREP CPP OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC host_os host_vendor host_cpu host build_os build_vendor build_cpu build target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_dependency_tracking enable_silent_rules enable_shared enable_static with_pic enable_fast_install with_gnu_ld with_sysroot enable_libtool_lock enable_selective_werror enable_strict_compilation enable_specs with_xmlto with_fop with_xsltproc with_perl enable_unix_transport enable_tcp_transport enable_ipv6 enable_local_transport enable_secure_rpc with_local_transport_order enable_loadable_i18n enable_loadable_xcursor with_launchd enable_xthreads with_keysymdefdir enable_xcms enable_xlocale enable_xlocaledir enable_xf86bigfont enable_xkb enable_composecache with_lint enable_lint_library with_locale_lib_dir enable_malloc0returnsnull ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP PKG_CONFIG XMLTO FOP XSLTPROC PERL BIGFONT_CFLAGS BIGFONT_LIBS LINT LINT_FLAGS X11_CFLAGS X11_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures libX11 1.6.3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/libX11] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of libX11 1.6.3:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --disable-selective-werror Turn off selective compiler errors. (default: enabled) --enable-strict-compilation Enable all warnings from compiler and make them errors (default: disabled) --enable-specs Enable building the specs (default: yes) --enable-unix-transport Enable UNIX domain socket transport --enable-tcp-transport Enable TCP socket transport --enable-ipv6 Enable IPv6 support --enable-local-transport Enable os-specific local transport --enable-secure-rpc Enable Secure RPC --enable-loadable-i18n Controls loadable i18n module support --disable-loadable-xcursor Controls loadable xcursor library support --disable-xthreads Disable Xlib support for Multithreading --disable-xcms Disable Xlib support for CMS *EXPERIMENTAL* --disable-xlocale Disable Xlib locale implementation *EXPERIMENTAL* --enable-xlocaledir Enable XLOCALEDIR environment variable support --disable-xf86bigfont Disable XF86BigFont extension support --disable-xkb Disable XKB support *EXPERIMENTAL* --disable-composecache Disable compose table cache support --enable-lint-library Create lint library (default: disabled) --enable-malloc0returnsnull malloc(0) returns NULL (default: auto) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot=DIR Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-xmlto Use xmlto to regenerate documentation (default: auto) --with-fop Use fop to regenerate documentation (default: no) --with-xsltproc Use xsltproc for the transformation of XML documents (default: auto) --with-perl Use perl for extracting information from files (default: auto) --with-local-transport-order=LIST preference sorted list of transport types to try for local connections --with-launchd Build with support for Apple's launchd (default: auto) --with-keysymdefdir=DIR The location of keysymdef.h (defaults to xproto include dir) --with-lint Use a lint-style source code checker (default: disabled) --with-locale-lib-dir=DIR Directory where locale libraries files are installed (default: $libdir/X11/locale) Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor PKG_CONFIG path to pkg-config utility XMLTO Path to xmlto command FOP Path to fop command XSLTPROC Path to xsltproc command PERL Path to perl command BIGFONT_CFLAGS C compiler flags for BIGFONT, overriding pkg-config BIGFONT_LIBS linker flags for BIGFONT, overriding pkg-config LINT Path to a lint-style command LINT_FLAGS Flags for the lint-style command X11_CFLAGS C compiler flags for X11, overriding pkg-config X11_LIBS linker flags for X11, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF libX11 configure 1.6.3 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ---------------------------------------------------------------------- ## ## Report this to https://bugs.freedesktop.org/enter_bug.cgi?product=xorg ## ## ---------------------------------------------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES # --------------------------------------------- # Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR # accordingly. ac_fn_c_check_decl () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack as_decl_name=`echo $2|sed 's/ *(.*//'` as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 $as_echo_n "checking whether $as_decl_name is declared... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { #ifndef $as_decl_name #ifdef __cplusplus (void) $as_decl_use; #else (void) $as_decl_name; #endif #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_decl # ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES # ---------------------------------------------------- # Tries to find if the field MEMBER exists in type AGGR, after including # INCLUDES, setting cache variable VAR accordingly. ac_fn_c_check_member () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 $as_echo_n "checking for $2.$3... " >&6; } if eval \${$4+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int main () { static $2 ac_aggr; if (ac_aggr.$3) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$4=yes" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int main () { static $2 ac_aggr; if (sizeof ac_aggr.$3) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$4=yes" else eval "$4=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$4 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_member # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by libX11 $as_me 1.6.3, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi as_fn_append ac_header_list " stdlib.h" as_fn_append ac_header_list " unistd.h" as_fn_append ac_header_list " sys/param.h" # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_headers="$ac_config_headers src/config.h include/X11/XlibConf.h" ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # Set common system defines for POSIX extensions, such as _GNU_SOURCE # Must be called before any macros that run the compiler (like AC_PROG_LIBTOOL) # to avoid autoconf errors. # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" if test "x$ac_cv_header_minix_config_h" = xyes; then : MINIX=yes else MINIX= fi if test "$MINIX" = yes; then $as_echo "#define _POSIX_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h $as_echo "#define _MINIX 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 $as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } if ${ac_cv_safe_to_define___extensions__+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_safe_to_define___extensions__=yes else ac_cv_safe_to_define___extensions__=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 $as_echo "$ac_cv_safe_to_define___extensions__" >&6; } test $ac_cv_safe_to_define___extensions__ = yes && $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h $as_echo "#define _ALL_SOURCE 1" >>confdefs.h $as_echo "#define _GNU_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h # Initialize Automake am__api_version='1.15' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='libX11' VERSION='1.6.3' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi # Initialize libtool case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.2' macro_revision='1.3337' ltmain="$ac_aux_dir/ltmain.sh" # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case "$ECHO" in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test "$GCC" != yes; then reload_cmds=false fi ;; darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 $as_echo "${with_sysroot}" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done # Set options enable_dlopen=no enable_win32_dll=no # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='${wl}--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test x"$lt_cv_prog_compiler__b" = xyes; then archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([A-Za-z]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" ac_config_commands="$ac_config_commands libtool" # Only expand once: # Require xorg-macros minimum of 1.15 for fop minimum version { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 $as_echo_n "checking for $CC option to accept ISO C99... " >&6; } if ${ac_cv_prog_cc_c99+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include // Check varargs macros. These examples are taken from C99 6.10.3.5. #define debug(...) fprintf (stderr, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK your preprocessor is broken; #endif #if BIG_OK #else your preprocessor is broken; #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\0'; ++i) continue; return 0; } // Check varargs and va_copy. static void test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str; int number; float fnumber; while (*format) { switch (*format++) { case 's': // string str = va_arg (args_copy, const char *); break; case 'd': // int number = va_arg (args_copy, int); break; case 'f': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); } int main () { // Check bool. _Bool success = false; // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. test_varargs ("s, d' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' || dynamic_array[ni.number - 1] != 543); ; return 0; } _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c99" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c99" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 $as_echo "$ac_cv_prog_cc_c99" >&6; } ;; esac if test "x$ac_cv_prog_cc_c99" != xno; then : fi ac_fn_c_check_decl "$LINENO" "__clang__" "ac_cv_have_decl___clang__" "$ac_includes_default" if test "x$ac_cv_have_decl___clang__" = xyes; then : CLANGCC="yes" else CLANGCC="no" fi ac_fn_c_check_decl "$LINENO" "__INTEL_COMPILER" "ac_cv_have_decl___INTEL_COMPILER" "$ac_includes_default" if test "x$ac_cv_have_decl___INTEL_COMPILER" = xyes; then : INTELCC="yes" else INTELCC="no" fi ac_fn_c_check_decl "$LINENO" "__SUNPRO_C" "ac_cv_have_decl___SUNPRO_C" "$ac_includes_default" if test "x$ac_cv_have_decl___SUNPRO_C" = xyes; then : SUNCC="yes" else SUNCC="no" fi if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi # Check whether --enable-selective-werror was given. if test "${enable_selective_werror+set}" = set; then : enableval=$enable_selective_werror; SELECTIVE_WERROR=$enableval else SELECTIVE_WERROR=yes fi # -v is too short to test reliably with XORG_TESTSET_CFLAG if test "x$SUNCC" = "xyes"; then BASE_CFLAGS="-v" else BASE_CFLAGS="" fi # This chunk of warnings were those that existed in the legacy CWARNFLAGS xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wall" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wall" >&5 $as_echo_n "checking if $CC supports -Wall... " >&6; } cacheid=xorg_cv_cc_flag__Wall if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wall" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wpointer-arith" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wpointer-arith" >&5 $as_echo_n "checking if $CC supports -Wpointer-arith... " >&6; } cacheid=xorg_cv_cc_flag__Wpointer_arith if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wpointer-arith" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wmissing-declarations" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wmissing-declarations" >&5 $as_echo_n "checking if $CC supports -Wmissing-declarations... " >&6; } cacheid=xorg_cv_cc_flag__Wmissing_declarations if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wmissing-declarations" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wformat=2" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wformat=2" >&5 $as_echo_n "checking if $CC supports -Wformat=2... " >&6; } cacheid=xorg_cv_cc_flag__Wformat_2 if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wformat=2" found="yes" fi fi if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wformat" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wformat" >&5 $as_echo_n "checking if $CC supports -Wformat... " >&6; } cacheid=xorg_cv_cc_flag__Wformat if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wformat" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wstrict-prototypes" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wstrict-prototypes" >&5 $as_echo_n "checking if $CC supports -Wstrict-prototypes... " >&6; } cacheid=xorg_cv_cc_flag__Wstrict_prototypes if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wstrict-prototypes" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wmissing-prototypes" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wmissing-prototypes" >&5 $as_echo_n "checking if $CC supports -Wmissing-prototypes... " >&6; } cacheid=xorg_cv_cc_flag__Wmissing_prototypes if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wmissing-prototypes" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wnested-externs" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wnested-externs" >&5 $as_echo_n "checking if $CC supports -Wnested-externs... " >&6; } cacheid=xorg_cv_cc_flag__Wnested_externs if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wnested-externs" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wbad-function-cast" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wbad-function-cast" >&5 $as_echo_n "checking if $CC supports -Wbad-function-cast... " >&6; } cacheid=xorg_cv_cc_flag__Wbad_function_cast if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wbad-function-cast" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wold-style-definition" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wold-style-definition" >&5 $as_echo_n "checking if $CC supports -Wold-style-definition... " >&6; } cacheid=xorg_cv_cc_flag__Wold_style_definition if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wold-style-definition" found="yes" fi fi if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -fd" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -fd" >&5 $as_echo_n "checking if $CC supports -fd... " >&6; } cacheid=xorg_cv_cc_flag__fd if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -fd" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wdeclaration-after-statement" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wdeclaration-after-statement" >&5 $as_echo_n "checking if $CC supports -Wdeclaration-after-statement... " >&6; } cacheid=xorg_cv_cc_flag__Wdeclaration_after_statement if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wdeclaration-after-statement" found="yes" fi fi # This chunk adds additional warnings that could catch undesired effects. xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wunused" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wunused" >&5 $as_echo_n "checking if $CC supports -Wunused... " >&6; } cacheid=xorg_cv_cc_flag__Wunused if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wunused" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wuninitialized" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wuninitialized" >&5 $as_echo_n "checking if $CC supports -Wuninitialized... " >&6; } cacheid=xorg_cv_cc_flag__Wuninitialized if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wuninitialized" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wshadow" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wshadow" >&5 $as_echo_n "checking if $CC supports -Wshadow... " >&6; } cacheid=xorg_cv_cc_flag__Wshadow if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wshadow" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wmissing-noreturn" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wmissing-noreturn" >&5 $as_echo_n "checking if $CC supports -Wmissing-noreturn... " >&6; } cacheid=xorg_cv_cc_flag__Wmissing_noreturn if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wmissing-noreturn" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wmissing-format-attribute" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wmissing-format-attribute" >&5 $as_echo_n "checking if $CC supports -Wmissing-format-attribute... " >&6; } cacheid=xorg_cv_cc_flag__Wmissing_format_attribute if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wmissing-format-attribute" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wredundant-decls" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wredundant-decls" >&5 $as_echo_n "checking if $CC supports -Wredundant-decls... " >&6; } cacheid=xorg_cv_cc_flag__Wredundant_decls if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wredundant-decls" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wlogical-op" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wlogical-op" >&5 $as_echo_n "checking if $CC supports -Wlogical-op... " >&6; } cacheid=xorg_cv_cc_flag__Wlogical_op if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wlogical-op" found="yes" fi fi # These are currently disabled because they are noisy. They will be enabled # in the future once the codebase is sufficiently modernized to silence # them. For now, I don't want them to drown out the other warnings. # XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wparentheses]) # XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wcast-align]) # XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wcast-qual]) # Turn some warnings into errors, so we don't accidently get successful builds # when there are problems that should be fixed. if test "x$SELECTIVE_WERROR" = "xyes" ; then xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Werror=implicit" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=implicit" >&5 $as_echo_n "checking if $CC supports -Werror=implicit... " >&6; } cacheid=xorg_cv_cc_flag__Werror_implicit if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Werror=implicit" found="yes" fi fi if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -errwarn=E_NO_EXPLICIT_TYPE_GIVEN -errwarn=E_NO_IMPLICIT_DECL_ALLOWED" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -errwarn=E_NO_EXPLICIT_TYPE_GIVEN -errwarn=E_NO_IMPLICIT_DECL_ALLOWED" >&5 $as_echo_n "checking if $CC supports -errwarn=E_NO_EXPLICIT_TYPE_GIVEN -errwarn=E_NO_IMPLICIT_DECL_ALLOWED... " >&6; } cacheid=xorg_cv_cc_flag__errwarn_E_NO_EXPLICIT_TYPE_GIVEN__errwarn_E_NO_IMPLICIT_DECL_ALLOWED if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -errwarn=E_NO_EXPLICIT_TYPE_GIVEN -errwarn=E_NO_IMPLICIT_DECL_ALLOWED" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Werror=nonnull" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=nonnull" >&5 $as_echo_n "checking if $CC supports -Werror=nonnull... " >&6; } cacheid=xorg_cv_cc_flag__Werror_nonnull if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Werror=nonnull" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Werror=init-self" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=init-self" >&5 $as_echo_n "checking if $CC supports -Werror=init-self... " >&6; } cacheid=xorg_cv_cc_flag__Werror_init_self if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Werror=init-self" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Werror=main" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=main" >&5 $as_echo_n "checking if $CC supports -Werror=main... " >&6; } cacheid=xorg_cv_cc_flag__Werror_main if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Werror=main" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Werror=missing-braces" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=missing-braces" >&5 $as_echo_n "checking if $CC supports -Werror=missing-braces... " >&6; } cacheid=xorg_cv_cc_flag__Werror_missing_braces if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Werror=missing-braces" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Werror=sequence-point" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=sequence-point" >&5 $as_echo_n "checking if $CC supports -Werror=sequence-point... " >&6; } cacheid=xorg_cv_cc_flag__Werror_sequence_point if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Werror=sequence-point" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Werror=return-type" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=return-type" >&5 $as_echo_n "checking if $CC supports -Werror=return-type... " >&6; } cacheid=xorg_cv_cc_flag__Werror_return_type if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Werror=return-type" found="yes" fi fi if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -errwarn=E_FUNC_HAS_NO_RETURN_STMT" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -errwarn=E_FUNC_HAS_NO_RETURN_STMT" >&5 $as_echo_n "checking if $CC supports -errwarn=E_FUNC_HAS_NO_RETURN_STMT... " >&6; } cacheid=xorg_cv_cc_flag__errwarn_E_FUNC_HAS_NO_RETURN_STMT if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -errwarn=E_FUNC_HAS_NO_RETURN_STMT" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Werror=trigraphs" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=trigraphs" >&5 $as_echo_n "checking if $CC supports -Werror=trigraphs... " >&6; } cacheid=xorg_cv_cc_flag__Werror_trigraphs if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Werror=trigraphs" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Werror=array-bounds" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=array-bounds" >&5 $as_echo_n "checking if $CC supports -Werror=array-bounds... " >&6; } cacheid=xorg_cv_cc_flag__Werror_array_bounds if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Werror=array-bounds" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Werror=write-strings" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=write-strings" >&5 $as_echo_n "checking if $CC supports -Werror=write-strings... " >&6; } cacheid=xorg_cv_cc_flag__Werror_write_strings if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Werror=write-strings" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Werror=address" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=address" >&5 $as_echo_n "checking if $CC supports -Werror=address... " >&6; } cacheid=xorg_cv_cc_flag__Werror_address if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Werror=address" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Werror=int-to-pointer-cast" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=int-to-pointer-cast" >&5 $as_echo_n "checking if $CC supports -Werror=int-to-pointer-cast... " >&6; } cacheid=xorg_cv_cc_flag__Werror_int_to_pointer_cast if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Werror=int-to-pointer-cast" found="yes" fi fi if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -errwarn=E_BAD_PTR_INT_COMBINATION" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -errwarn=E_BAD_PTR_INT_COMBINATION" >&5 $as_echo_n "checking if $CC supports -errwarn=E_BAD_PTR_INT_COMBINATION... " >&6; } cacheid=xorg_cv_cc_flag__errwarn_E_BAD_PTR_INT_COMBINATION if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -errwarn=E_BAD_PTR_INT_COMBINATION" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Werror=pointer-to-int-cast" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=pointer-to-int-cast" >&5 $as_echo_n "checking if $CC supports -Werror=pointer-to-int-cast... " >&6; } cacheid=xorg_cv_cc_flag__Werror_pointer_to_int_cast if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Werror=pointer-to-int-cast" found="yes" fi fi # Also -errwarn=E_BAD_PTR_INT_COMBINATION else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You have chosen not to turn some select compiler warnings into errors. This should not be necessary. Please report why you needed to do so in a bug report at $PACKAGE_BUGREPORT" >&5 $as_echo "$as_me: WARNING: You have chosen not to turn some select compiler warnings into errors. This should not be necessary. Please report why you needed to do so in a bug report at $PACKAGE_BUGREPORT" >&2;} xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wimplicit" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wimplicit" >&5 $as_echo_n "checking if $CC supports -Wimplicit... " >&6; } cacheid=xorg_cv_cc_flag__Wimplicit if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wimplicit" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wnonnull" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wnonnull" >&5 $as_echo_n "checking if $CC supports -Wnonnull... " >&6; } cacheid=xorg_cv_cc_flag__Wnonnull if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wnonnull" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Winit-self" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Winit-self" >&5 $as_echo_n "checking if $CC supports -Winit-self... " >&6; } cacheid=xorg_cv_cc_flag__Winit_self if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Winit-self" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wmain" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wmain" >&5 $as_echo_n "checking if $CC supports -Wmain... " >&6; } cacheid=xorg_cv_cc_flag__Wmain if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wmain" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wmissing-braces" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wmissing-braces" >&5 $as_echo_n "checking if $CC supports -Wmissing-braces... " >&6; } cacheid=xorg_cv_cc_flag__Wmissing_braces if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wmissing-braces" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wsequence-point" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wsequence-point" >&5 $as_echo_n "checking if $CC supports -Wsequence-point... " >&6; } cacheid=xorg_cv_cc_flag__Wsequence_point if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wsequence-point" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wreturn-type" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wreturn-type" >&5 $as_echo_n "checking if $CC supports -Wreturn-type... " >&6; } cacheid=xorg_cv_cc_flag__Wreturn_type if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wreturn-type" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wtrigraphs" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wtrigraphs" >&5 $as_echo_n "checking if $CC supports -Wtrigraphs... " >&6; } cacheid=xorg_cv_cc_flag__Wtrigraphs if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wtrigraphs" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Warray-bounds" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Warray-bounds" >&5 $as_echo_n "checking if $CC supports -Warray-bounds... " >&6; } cacheid=xorg_cv_cc_flag__Warray_bounds if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Warray-bounds" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wwrite-strings" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wwrite-strings" >&5 $as_echo_n "checking if $CC supports -Wwrite-strings... " >&6; } cacheid=xorg_cv_cc_flag__Wwrite_strings if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wwrite-strings" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Waddress" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Waddress" >&5 $as_echo_n "checking if $CC supports -Waddress... " >&6; } cacheid=xorg_cv_cc_flag__Waddress if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Waddress" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wint-to-pointer-cast" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wint-to-pointer-cast" >&5 $as_echo_n "checking if $CC supports -Wint-to-pointer-cast... " >&6; } cacheid=xorg_cv_cc_flag__Wint_to_pointer_cast if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wint-to-pointer-cast" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Wpointer-to-int-cast" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Wpointer-to-int-cast" >&5 $as_echo_n "checking if $CC supports -Wpointer-to-int-cast... " >&6; } cacheid=xorg_cv_cc_flag__Wpointer_to_int_cast if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then BASE_CFLAGS="$BASE_CFLAGS -Wpointer-to-int-cast" found="yes" fi fi fi CWARNFLAGS="$BASE_CFLAGS" if test "x$GCC" = xyes ; then CWARNFLAGS="$CWARNFLAGS -fno-strict-aliasing" fi # Check whether --enable-strict-compilation was given. if test "${enable_strict_compilation+set}" = set; then : enableval=$enable_strict_compilation; STRICT_COMPILE=$enableval else STRICT_COMPILE=no fi STRICT_CFLAGS="" xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -pedantic" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -pedantic" >&5 $as_echo_n "checking if $CC supports -pedantic... " >&6; } cacheid=xorg_cv_cc_flag__pedantic if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then STRICT_CFLAGS="$STRICT_CFLAGS -pedantic" found="yes" fi fi xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Werror" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror" >&5 $as_echo_n "checking if $CC supports -Werror... " >&6; } cacheid=xorg_cv_cc_flag__Werror if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then STRICT_CFLAGS="$STRICT_CFLAGS -Werror" found="yes" fi fi if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -errwarn" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -errwarn" >&5 $as_echo_n "checking if $CC supports -errwarn... " >&6; } cacheid=xorg_cv_cc_flag__errwarn if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then STRICT_CFLAGS="$STRICT_CFLAGS -errwarn" found="yes" fi fi # Earlier versions of gcc (eg: 4.2) support -Werror=attributes, but do not # activate it with -Werror, so we add it here explicitly. xorg_testset_save_CFLAGS="$CFLAGS" if test "x$xorg_testset_cc_unknown_warning_option" = "x" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unknown-warning-option" >&5 $as_echo_n "checking if $CC supports -Werror=unknown-warning-option... " >&6; } if ${xorg_cv_cc_flag_unknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unknown_warning_option=yes else xorg_cv_cc_flag_unknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unknown_warning_option" >&5 $as_echo "$xorg_cv_cc_flag_unknown_warning_option" >&6; } xorg_testset_cc_unknown_warning_option=$xorg_cv_cc_flag_unknown_warning_option CFLAGS="$xorg_testset_save_CFLAGS" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "x" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi CFLAGS="$CFLAGS -Werror=unused-command-line-argument" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=unused-command-line-argument" >&5 $as_echo_n "checking if $CC supports -Werror=unused-command-line-argument... " >&6; } if ${xorg_cv_cc_flag_unused_command_line_argument+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : xorg_cv_cc_flag_unused_command_line_argument=yes else xorg_cv_cc_flag_unused_command_line_argument=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xorg_cv_cc_flag_unused_command_line_argument" >&5 $as_echo "$xorg_cv_cc_flag_unused_command_line_argument" >&6; } xorg_testset_cc_unused_command_line_argument=$xorg_cv_cc_flag_unused_command_line_argument CFLAGS="$xorg_testset_save_CFLAGS" fi found="no" if test $found = "no" ; then if test "x$xorg_testset_cc_unknown_warning_option" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unknown-warning-option" fi if test "x$xorg_testset_cc_unused_command_line_argument" = "xyes" ; then CFLAGS="$CFLAGS -Werror=unused-command-line-argument" fi CFLAGS="$CFLAGS -Werror=attributes" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports -Werror=attributes" >&5 $as_echo_n "checking if $CC supports -Werror=attributes... " >&6; } cacheid=xorg_cv_cc_flag__Werror_attributes if eval \${$cacheid+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i; int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval $cacheid=yes else eval $cacheid=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CFLAGS="$xorg_testset_save_CFLAGS" eval supported=\$$cacheid { $as_echo "$as_me:${as_lineno-$LINENO}: result: $supported" >&5 $as_echo "$supported" >&6; } if test "$supported" = "yes" ; then STRICT_CFLAGS="$STRICT_CFLAGS -Werror=attributes" found="yes" fi fi if test "x$STRICT_COMPILE" = "xyes"; then BASE_CFLAGS="$BASE_CFLAGS $STRICT_CFLAGS" CWARNFLAGS="$CWARNFLAGS $STRICT_CFLAGS" fi cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION_MAJOR `echo $PACKAGE_VERSION | cut -d . -f 1` _ACEOF PVM=`echo $PACKAGE_VERSION | cut -d . -f 2 | cut -d - -f 1` if test "x$PVM" = "x"; then PVM="0" fi cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION_MINOR $PVM _ACEOF PVP=`echo $PACKAGE_VERSION | cut -d . -f 3 | cut -d - -f 1` if test "x$PVP" = "x"; then PVP="0" fi cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION_PATCHLEVEL $PVP _ACEOF CHANGELOG_CMD="(GIT_DIR=\$(top_srcdir)/.git git log > \$(top_srcdir)/.changelog.tmp && \ mv \$(top_srcdir)/.changelog.tmp \$(top_srcdir)/ChangeLog) \ || (rm -f \$(top_srcdir)/.changelog.tmp; touch \$(top_srcdir)/ChangeLog; \ echo 'git directory not found: installing possibly empty changelog.' >&2)" macros_datadir=`$PKG_CONFIG --print-errors --variable=pkgdatadir xorg-macros` INSTALL_CMD="(cp -f "$macros_datadir/INSTALL" \$(top_srcdir)/.INSTALL.tmp && \ mv \$(top_srcdir)/.INSTALL.tmp \$(top_srcdir)/INSTALL) \ || (rm -f \$(top_srcdir)/.INSTALL.tmp; touch \$(top_srcdir)/INSTALL; \ echo 'util-macros \"pkgdatadir\" from xorg-macros.pc not found: installing possibly empty INSTALL.' >&2)" if test x$APP_MAN_SUFFIX = x ; then APP_MAN_SUFFIX=1 fi if test x$APP_MAN_DIR = x ; then APP_MAN_DIR='$(mandir)/man$(APP_MAN_SUFFIX)' fi if test x$LIB_MAN_SUFFIX = x ; then LIB_MAN_SUFFIX=3 fi if test x$LIB_MAN_DIR = x ; then LIB_MAN_DIR='$(mandir)/man$(LIB_MAN_SUFFIX)' fi if test x$FILE_MAN_SUFFIX = x ; then case $host_os in solaris*) FILE_MAN_SUFFIX=4 ;; *) FILE_MAN_SUFFIX=5 ;; esac fi if test x$FILE_MAN_DIR = x ; then FILE_MAN_DIR='$(mandir)/man$(FILE_MAN_SUFFIX)' fi if test x$MISC_MAN_SUFFIX = x ; then case $host_os in solaris*) MISC_MAN_SUFFIX=5 ;; *) MISC_MAN_SUFFIX=7 ;; esac fi if test x$MISC_MAN_DIR = x ; then MISC_MAN_DIR='$(mandir)/man$(MISC_MAN_SUFFIX)' fi if test x$DRIVER_MAN_SUFFIX = x ; then case $host_os in solaris*) DRIVER_MAN_SUFFIX=7 ;; *) DRIVER_MAN_SUFFIX=4 ;; esac fi if test x$DRIVER_MAN_DIR = x ; then DRIVER_MAN_DIR='$(mandir)/man$(DRIVER_MAN_SUFFIX)' fi if test x$ADMIN_MAN_SUFFIX = x ; then case $host_os in solaris*) ADMIN_MAN_SUFFIX=1m ;; *) ADMIN_MAN_SUFFIX=8 ;; esac fi if test x$ADMIN_MAN_DIR = x ; then ADMIN_MAN_DIR='$(mandir)/man$(ADMIN_MAN_SUFFIX)' fi XORG_MAN_PAGE="X Version 11" MAN_SUBSTS="\ -e 's|__vendorversion__|\"\$(PACKAGE_STRING)\" \"\$(XORG_MAN_PAGE)\"|' \ -e 's|__xorgversion__|\"\$(PACKAGE_STRING)\" \"\$(XORG_MAN_PAGE)\"|' \ -e 's|__xservername__|Xorg|g' \ -e 's|__xconfigfile__|xorg.conf|g' \ -e 's|__projectroot__|\$(prefix)|g' \ -e 's|__apploaddir__|\$(appdefaultdir)|g' \ -e 's|__appmansuffix__|\$(APP_MAN_SUFFIX)|g' \ -e 's|__drivermansuffix__|\$(DRIVER_MAN_SUFFIX)|g' \ -e 's|__adminmansuffix__|\$(ADMIN_MAN_SUFFIX)|g' \ -e 's|__libmansuffix__|\$(LIB_MAN_SUFFIX)|g' \ -e 's|__miscmansuffix__|\$(MISC_MAN_SUFFIX)|g' \ -e 's|__filemansuffix__|\$(FILE_MAN_SUFFIX)|g'" # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=0;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' # Check whether --enable-specs was given. if test "${enable_specs+set}" = set; then : enableval=$enable_specs; build_specs=$enableval else build_specs=yes fi if test x$build_specs = xyes; then ENABLE_SPECS_TRUE= ENABLE_SPECS_FALSE='#' else ENABLE_SPECS_TRUE='#' ENABLE_SPECS_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build functional specifications" >&5 $as_echo_n "checking whether to build functional specifications... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $build_specs" >&5 $as_echo "$build_specs" >&6; } # Check whether --with-xmlto was given. if test "${with_xmlto+set}" = set; then : withval=$with_xmlto; use_xmlto=$withval else use_xmlto=auto fi if test "x$use_xmlto" = x"auto"; then # Extract the first word of "xmlto", so it can be a program name with args. set dummy xmlto; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XMLTO+:} false; then : $as_echo_n "(cached) " >&6 else case $XMLTO in [\\/]* | ?:[\\/]*) ac_cv_path_XMLTO="$XMLTO" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_XMLTO="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XMLTO=$ac_cv_path_XMLTO if test -n "$XMLTO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XMLTO" >&5 $as_echo "$XMLTO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$XMLTO" = "x"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: xmlto not found - documentation targets will be skipped" >&5 $as_echo "$as_me: WARNING: xmlto not found - documentation targets will be skipped" >&2;} have_xmlto=no else have_xmlto=yes fi elif test "x$use_xmlto" = x"yes" ; then # Extract the first word of "xmlto", so it can be a program name with args. set dummy xmlto; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XMLTO+:} false; then : $as_echo_n "(cached) " >&6 else case $XMLTO in [\\/]* | ?:[\\/]*) ac_cv_path_XMLTO="$XMLTO" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_XMLTO="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XMLTO=$ac_cv_path_XMLTO if test -n "$XMLTO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XMLTO" >&5 $as_echo "$XMLTO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$XMLTO" = "x"; then as_fn_error $? "--with-xmlto=yes specified but xmlto not found in PATH" "$LINENO" 5 fi have_xmlto=yes elif test "x$use_xmlto" = x"no" ; then if test "x$XMLTO" != "x"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ignoring XMLTO environment variable since --with-xmlto=no was specified" >&5 $as_echo "$as_me: WARNING: ignoring XMLTO environment variable since --with-xmlto=no was specified" >&2;} fi have_xmlto=no else as_fn_error $? "--with-xmlto expects 'yes' or 'no'" "$LINENO" 5 fi # Test for a minimum version of xmlto, if provided. if test "$have_xmlto" = yes; then # scrape the xmlto version { $as_echo "$as_me:${as_lineno-$LINENO}: checking the xmlto version" >&5 $as_echo_n "checking the xmlto version... " >&6; } xmlto_version=`$XMLTO --version 2>/dev/null | cut -d' ' -f3` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xmlto_version" >&5 $as_echo "$xmlto_version" >&6; } as_arg_v1=$xmlto_version as_arg_v2=0.0.22 awk "$as_awk_strverscmp" v1="$as_arg_v1" v2="$as_arg_v2" /dev/null case $? in #( 1) : if test "x$use_xmlto" = xauto; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: xmlto version $xmlto_version found, but 0.0.22 needed" >&5 $as_echo "$as_me: WARNING: xmlto version $xmlto_version found, but 0.0.22 needed" >&2;} have_xmlto=no else as_fn_error $? "xmlto version $xmlto_version found, but 0.0.22 needed" "$LINENO" 5 fi ;; #( 0) : ;; #( 2) : ;; #( *) : ;; esac fi # Test for the ability of xmlto to generate a text target have_xmlto_text=no cat > conftest.xml << "EOF" EOF if test "$have_xmlto" = yes; then : if $XMLTO --skip-validation txt conftest.xml >/dev/null 2>&1; then : have_xmlto_text=yes else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: xmlto cannot generate text format, this format skipped" >&5 $as_echo "$as_me: WARNING: xmlto cannot generate text format, this format skipped" >&2;} fi fi rm -f conftest.xml if test $have_xmlto_text = yes; then HAVE_XMLTO_TEXT_TRUE= HAVE_XMLTO_TEXT_FALSE='#' else HAVE_XMLTO_TEXT_TRUE='#' HAVE_XMLTO_TEXT_FALSE= fi if test "$have_xmlto" = yes; then HAVE_XMLTO_TRUE= HAVE_XMLTO_FALSE='#' else HAVE_XMLTO_TRUE='#' HAVE_XMLTO_FALSE= fi # Check whether --with-fop was given. if test "${with_fop+set}" = set; then : withval=$with_fop; use_fop=$withval else use_fop=no fi if test "x$use_fop" = x"auto"; then # Extract the first word of "fop", so it can be a program name with args. set dummy fop; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_FOP+:} false; then : $as_echo_n "(cached) " >&6 else case $FOP in [\\/]* | ?:[\\/]*) ac_cv_path_FOP="$FOP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_FOP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi FOP=$ac_cv_path_FOP if test -n "$FOP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FOP" >&5 $as_echo "$FOP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$FOP" = "x"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: fop not found - documentation targets will be skipped" >&5 $as_echo "$as_me: WARNING: fop not found - documentation targets will be skipped" >&2;} have_fop=no else have_fop=yes fi elif test "x$use_fop" = x"yes" ; then # Extract the first word of "fop", so it can be a program name with args. set dummy fop; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_FOP+:} false; then : $as_echo_n "(cached) " >&6 else case $FOP in [\\/]* | ?:[\\/]*) ac_cv_path_FOP="$FOP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_FOP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi FOP=$ac_cv_path_FOP if test -n "$FOP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FOP" >&5 $as_echo "$FOP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$FOP" = "x"; then as_fn_error $? "--with-fop=yes specified but fop not found in PATH" "$LINENO" 5 fi have_fop=yes elif test "x$use_fop" = x"no" ; then if test "x$FOP" != "x"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ignoring FOP environment variable since --with-fop=no was specified" >&5 $as_echo "$as_me: WARNING: ignoring FOP environment variable since --with-fop=no was specified" >&2;} fi have_fop=no else as_fn_error $? "--with-fop expects 'yes' or 'no'" "$LINENO" 5 fi # Test for a minimum version of fop, if provided. if test "$have_fop" = yes; then HAVE_FOP_TRUE= HAVE_FOP_FALSE='#' else HAVE_FOP_TRUE='#' HAVE_FOP_FALSE= fi # Preserves the interface, should it be implemented later # Check whether --with-xsltproc was given. if test "${with_xsltproc+set}" = set; then : withval=$with_xsltproc; use_xsltproc=$withval else use_xsltproc=auto fi if test "x$use_xsltproc" = x"auto"; then # Extract the first word of "xsltproc", so it can be a program name with args. set dummy xsltproc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XSLTPROC+:} false; then : $as_echo_n "(cached) " >&6 else case $XSLTPROC in [\\/]* | ?:[\\/]*) ac_cv_path_XSLTPROC="$XSLTPROC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_XSLTPROC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XSLTPROC=$ac_cv_path_XSLTPROC if test -n "$XSLTPROC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XSLTPROC" >&5 $as_echo "$XSLTPROC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$XSLTPROC" = "x"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: xsltproc not found - cannot transform XML documents" >&5 $as_echo "$as_me: WARNING: xsltproc not found - cannot transform XML documents" >&2;} have_xsltproc=no else have_xsltproc=yes fi elif test "x$use_xsltproc" = x"yes" ; then # Extract the first word of "xsltproc", so it can be a program name with args. set dummy xsltproc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XSLTPROC+:} false; then : $as_echo_n "(cached) " >&6 else case $XSLTPROC in [\\/]* | ?:[\\/]*) ac_cv_path_XSLTPROC="$XSLTPROC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_XSLTPROC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XSLTPROC=$ac_cv_path_XSLTPROC if test -n "$XSLTPROC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XSLTPROC" >&5 $as_echo "$XSLTPROC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$XSLTPROC" = "x"; then as_fn_error $? "--with-xsltproc=yes specified but xsltproc not found in PATH" "$LINENO" 5 fi have_xsltproc=yes elif test "x$use_xsltproc" = x"no" ; then if test "x$XSLTPROC" != "x"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ignoring XSLTPROC environment variable since --with-xsltproc=no was specified" >&5 $as_echo "$as_me: WARNING: ignoring XSLTPROC environment variable since --with-xsltproc=no was specified" >&2;} fi have_xsltproc=no else as_fn_error $? "--with-xsltproc expects 'yes' or 'no'" "$LINENO" 5 fi if test "$have_xsltproc" = yes; then HAVE_XSLTPROC_TRUE= HAVE_XSLTPROC_FALSE='#' else HAVE_XSLTPROC_TRUE='#' HAVE_XSLTPROC_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X.Org SGML entities >= 1.10" >&5 $as_echo_n "checking for X.Org SGML entities >= 1.10... " >&6; } XORG_SGML_PATH= if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"xorg-sgml-doctools >= 1.10\""; } >&5 ($PKG_CONFIG --exists --print-errors "xorg-sgml-doctools >= 1.10") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then XORG_SGML_PATH=`$PKG_CONFIG --variable=sgmlrootdir xorg-sgml-doctools` else : fi # Define variables STYLESHEET_SRCDIR and XSL_STYLESHEET containing # the path and the name of the doc stylesheet if test "x$XORG_SGML_PATH" != "x" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XORG_SGML_PATH" >&5 $as_echo "$XORG_SGML_PATH" >&6; } STYLESHEET_SRCDIR=$XORG_SGML_PATH/X11 XSL_STYLESHEET=$STYLESHEET_SRCDIR/xorg.xsl else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$XSL_STYLESHEET" != "x"; then HAVE_STYLESHEETS_TRUE= HAVE_STYLESHEETS_FALSE='#' else HAVE_STYLESHEETS_TRUE='#' HAVE_STYLESHEETS_FALSE= fi for ac_prog in cpp do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_RAWCPP+:} false; then : $as_echo_n "(cached) " >&6 else case $RAWCPP in [\\/]* | ?:[\\/]*) ac_cv_path_RAWCPP="$RAWCPP" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_dummy="$PATH:/bin:/usr/bin:/usr/lib:/usr/libexec:/usr/ccs/lib:/usr/ccs/lbin:/lib" for as_dir in $as_dummy do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_RAWCPP="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi RAWCPP=$ac_cv_path_RAWCPP if test -n "$RAWCPP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RAWCPP" >&5 $as_echo "$RAWCPP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$RAWCPP" && break done test -n "$RAWCPP" || RAWCPP="${CPP}" # Check for flag to avoid builtin definitions - assumes unix is predefined, # which is not the best choice for supporting other OS'es, but covers most # of the ones we need for now. { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $RAWCPP requires -undef" >&5 $as_echo_n "checking if $RAWCPP requires -undef... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ Does cpp redefine unix ? _ACEOF if test `${RAWCPP} < conftest.$ac_ext | grep -c 'unix'` -eq 1 ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } else if test `${RAWCPP} -undef < conftest.$ac_ext | grep -c 'unix'` -eq 1 ; then RAWCPPFLAGS=-undef { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # under Cygwin unix is still defined even with -undef elif test `${RAWCPP} -undef -ansi < conftest.$ac_ext | grep -c 'unix'` -eq 1 ; then RAWCPPFLAGS="-undef -ansi" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, with -ansi" >&5 $as_echo "yes, with -ansi" >&6; } else as_fn_error $? "${RAWCPP} defines unix with or without -undef. I don't know what to do." "$LINENO" 5 fi fi rm -f conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $RAWCPP requires -traditional" >&5 $as_echo_n "checking if $RAWCPP requires -traditional... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ Does cpp preserve "whitespace"? _ACEOF if test `${RAWCPP} < conftest.$ac_ext | grep -c 'preserve \"'` -eq 1 ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } else if test `${RAWCPP} -traditional < conftest.$ac_ext | grep -c 'preserve \"'` -eq 1 ; then TRADITIONALCPPFLAGS="-traditional" RAWCPPFLAGS="${RAWCPPFLAGS} -traditional" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else as_fn_error $? "${RAWCPP} does not preserve whitespace with or without -traditional. I don't know what to do." "$LINENO" 5 fi fi rm -f conftest.$ac_ext # Preserves the interface, should it be implemented later # Check whether --with-perl was given. if test "${with_perl+set}" = set; then : withval=$with_perl; use_perl=$withval else use_perl=auto fi if test "x$use_perl" = x"auto"; then # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PERL+:} false; then : $as_echo_n "(cached) " >&6 else case $PERL in [\\/]* | ?:[\\/]*) ac_cv_path_PERL="$PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PERL=$ac_cv_path_PERL if test -n "$PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 $as_echo "$PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$PERL" = "x"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: perl not found - cannot extract information and report" >&5 $as_echo "$as_me: WARNING: perl not found - cannot extract information and report" >&2;} have_perl=no else have_perl=yes fi elif test "x$use_perl" = x"yes" ; then # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PERL+:} false; then : $as_echo_n "(cached) " >&6 else case $PERL in [\\/]* | ?:[\\/]*) ac_cv_path_PERL="$PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PERL=$ac_cv_path_PERL if test -n "$PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 $as_echo "$PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$PERL" = "x"; then as_fn_error $? "--with-perl=yes specified but perl not found in PATH" "$LINENO" 5 fi have_perl=yes elif test "x$use_perl" = x"no" ; then if test "x$PERL" != "x"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ignoring PERL environment variable since --with-perl=no was specified" >&5 $as_echo "$as_me: WARNING: ignoring PERL environment variable since --with-perl=no was specified" >&2;} fi have_perl=no else as_fn_error $? "--with-perl expects 'yes' or 'no'" "$LINENO" 5 fi if test "$have_perl" = yes; then HAVE_PERL_TRUE= HAVE_PERL_FALSE='#' else HAVE_PERL_TRUE='#' HAVE_PERL_FALSE= fi # Required when PKG_CHECK_MODULES called within an if statement if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi if test x"$CC_FOR_BUILD" = x; then if test x"$cross_compiling" = xyes; then for ac_prog in gcc cc do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC_FOR_BUILD+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC_FOR_BUILD"; then ac_cv_prog_CC_FOR_BUILD="$CC_FOR_BUILD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC_FOR_BUILD="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC_FOR_BUILD=$ac_cv_prog_CC_FOR_BUILD if test -n "$CC_FOR_BUILD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC_FOR_BUILD" >&5 $as_echo "$CC_FOR_BUILD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC_FOR_BUILD" && break done else CC_FOR_BUILD="$CC" fi fi if test x"$CPPFLAGS_FOR_BUILD" = x; then if test ! x"$cross_compiling" = xyes; then CPPFLAGS_FOR_BUILD=${CPPFLAGS} fi fi if test x"$CFLAGS_FOR_BUILD" = x; then if test ! x"$cross_compiling" = xyes; then CFLAGS_FOR_BUILD=${CFLAGS} fi fi if test x"$LDFLAGS_FOR_BUILD" = x; then if test ! x"$cross_compiling" = xyes; then LDFLAGS_FOR_BUILD=${LDFLAGS} fi fi # Checks for pkg-config packages # Always required X11_REQUIRES='xproto >= 7.0.17 xextproto xtrans xcb >= 1.1.92' X11_EXTRA_DEPS="xcb >= 1.1.92" if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi # Issue an error if xtrans.m4 was not found and XTRANS_CONNECTION_FLAGS macro # was not expanded, since libX11 with no transport types is rather useless. # # If you're seeing an error here, be sure you installed the lib/xtrans module # first and if it's not in the default location, that you set the ACLOCAL # environment variable to find it, such as: # ACLOCAL="aclocal -I ${PREFIX}/share/aclocal" # Transport selection macro from xtrans.m4 case $host_os in mingw*) unixdef="no" ;; *) unixdef="yes" ;; esac # Check whether --enable-unix-transport was given. if test "${enable_unix_transport+set}" = set; then : enableval=$enable_unix_transport; UNIXCONN=$enableval else UNIXCONN=$unixdef fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Xtrans should support UNIX socket connections" >&5 $as_echo_n "checking if Xtrans should support UNIX socket connections... " >&6; } if test "$UNIXCONN" = "yes"; then $as_echo "#define UNIXCONN 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNIXCONN" >&5 $as_echo "$UNIXCONN" >&6; } # Check whether --enable-tcp-transport was given. if test "${enable_tcp_transport+set}" = set; then : enableval=$enable_tcp_transport; TCPCONN=$enableval else TCPCONN=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Xtrans should support TCP socket connections" >&5 $as_echo_n "checking if Xtrans should support TCP socket connections... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TCPCONN" >&5 $as_echo "$TCPCONN" >&6; } if test "$TCPCONN" = "yes"; then $as_echo "#define TCPCONN 1" >>confdefs.h # SVR4 hides these in libraries other than libc { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing socket" >&5 $as_echo_n "checking for library containing socket... " >&6; } if ${ac_cv_search_socket+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char socket (); int main () { return socket (); ; return 0; } _ACEOF for ac_lib in '' socket; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_socket=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_socket+:} false; then : break fi done if ${ac_cv_search_socket+:} false; then : else ac_cv_search_socket=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socket" >&5 $as_echo "$ac_cv_search_socket" >&6; } ac_res=$ac_cv_search_socket if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gethostbyname" >&5 $as_echo_n "checking for library containing gethostbyname... " >&6; } if ${ac_cv_search_gethostbyname+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gethostbyname (); int main () { return gethostbyname (); ; return 0; } _ACEOF for ac_lib in '' nsl; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_gethostbyname=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_gethostbyname+:} false; then : break fi done if ${ac_cv_search_gethostbyname+:} false; then : else ac_cv_search_gethostbyname=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethostbyname" >&5 $as_echo "$ac_cv_search_gethostbyname" >&6; } ac_res=$ac_cv_search_gethostbyname if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "$ac_cv_search_socket$ac_cv_search_gethostbyname" = "nono"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lws2_32" >&5 $as_echo_n "checking for main in -lws2_32... " >&6; } if ${ac_cv_lib_ws2_32_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lws2_32 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ws2_32_main=yes else ac_cv_lib_ws2_32_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ws2_32_main" >&5 $as_echo "$ac_cv_lib_ws2_32_main" >&6; } if test "x$ac_cv_lib_ws2_32_main" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBWS2_32 1 _ACEOF LIBS="-lws2_32 $LIBS" fi fi # Needs to come after above checks for libsocket & libnsl for SVR4 systems # Check whether --enable-ipv6 was given. if test "${enable_ipv6+set}" = set; then : enableval=$enable_ipv6; IPV6CONN=$enableval else ac_fn_c_check_func "$LINENO" "getaddrinfo" "ac_cv_func_getaddrinfo" if test "x$ac_cv_func_getaddrinfo" = xyes; then : IPV6CONN=yes else IPV6CONN=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if IPv6 support should be built" >&5 $as_echo_n "checking if IPv6 support should be built... " >&6; } if test "$IPV6CONN" = "yes"; then $as_echo "#define IPv6 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $IPV6CONN" >&5 $as_echo "$IPV6CONN" >&6; } # 4.3BSD-Reno added a new member to struct sockaddr_in ac_fn_c_check_member "$LINENO" "struct sockaddr_in" "sin_len" "ac_cv_member_struct_sockaddr_in_sin_len" " #include #include #include " if test "x$ac_cv_member_struct_sockaddr_in_sin_len" = xyes; then : $as_echo "#define BSD44SOCKETS 1" >>confdefs.h fi # POSIX.1g changed the type of pointer passed to getsockname/getpeername/etc. ac_fn_c_check_type "$LINENO" "socklen_t" "ac_cv_type_socklen_t" " $ac_includes_default #include " if test "x$ac_cv_type_socklen_t" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SOCKLEN_T 1 _ACEOF fi # XPG4v2/UNIX95 added msg_control - check to see if we need to define # _XOPEN_SOURCE to get it (such as on Solaris) ac_fn_c_check_member "$LINENO" "struct msghdr" "msg_control" "ac_cv_member_struct_msghdr_msg_control" " $ac_includes_default #include " if test "x$ac_cv_member_struct_msghdr_msg_control" = xyes; then : fi # First try for Solaris in C99 compliant mode, which requires XPG6/UNIX03 if test "x$ac_cv_member_struct_msghdr_msg_control" = xno; then unset ac_cv_member_struct_msghdr_msg_control { $as_echo "$as_me:${as_lineno-$LINENO}: trying again with _XOPEN_SOURCE=600" >&5 $as_echo "$as_me: trying again with _XOPEN_SOURCE=600" >&6;} ac_fn_c_check_member "$LINENO" "struct msghdr" "msg_control" "ac_cv_member_struct_msghdr_msg_control" " #define _XOPEN_SOURCE 600 $ac_includes_default #include " if test "x$ac_cv_member_struct_msghdr_msg_control" = xyes; then : $as_echo "#define _XOPEN_SOURCE 600" >>confdefs.h fi fi # If that didn't work, fall back to XPG5/UNIX98 with C89 if test "x$ac_cv_member_struct_msghdr_msg_control" = xno; then unset ac_cv_member_struct_msghdr_msg_control { $as_echo "$as_me:${as_lineno-$LINENO}: trying again with _XOPEN_SOURCE=500" >&5 $as_echo "$as_me: trying again with _XOPEN_SOURCE=500" >&6;} ac_fn_c_check_member "$LINENO" "struct msghdr" "msg_control" "ac_cv_member_struct_msghdr_msg_control" " #define _XOPEN_SOURCE 500 $ac_includes_default #include " if test "x$ac_cv_member_struct_msghdr_msg_control" = xyes; then : $as_echo "#define _XOPEN_SOURCE 500" >>confdefs.h fi fi fi case $host_os in solaris*|sco*|sysv4*) localdef="yes" ;; *) localdef="no" ;; esac # Check whether --enable-local-transport was given. if test "${enable_local_transport+set}" = set; then : enableval=$enable_local_transport; LOCALCONN=$enableval else LOCALCONN=$localdef fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Xtrans should support os-specific local connections" >&5 $as_echo_n "checking if Xtrans should support os-specific local connections... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LOCALCONN" >&5 $as_echo "$LOCALCONN" >&6; } if test "$LOCALCONN" = "yes"; then $as_echo "#define LOCALCONN 1" >>confdefs.h fi # Secure RPC detection macro from xtrans.m4 # Check whether --enable-secure-rpc was given. if test "${enable_secure_rpc+set}" = set; then : enableval=$enable_secure_rpc; SECURE_RPC=$enableval else SECURE_RPC="try" fi if test "x$SECURE_RPC" = "xyes" -o "x$SECURE_RPC" = "xtry" ; then FOUND_SECURE_RPC="no" for ac_func in authdes_seccreate authdes_create do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF FOUND_SECURE_RPC="yes" fi done if test "x$FOUND_SECURE_RPC" = "xno" ; then if test "x$SECURE_RPC" = "xyes" ; then as_fn_error $? "Secure RPC requested, but required functions not found" "$LINENO" 5 fi SECURE_RPC="no" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing getsecretkey" >&5 $as_echo_n "checking for library containing getsecretkey... " >&6; } if ${ac_cv_search_getsecretkey+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char getsecretkey (); int main () { return getsecretkey (); ; return 0; } _ACEOF for ac_lib in '' rpcsvc; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_getsecretkey=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_getsecretkey+:} false; then : break fi done if ${ac_cv_search_getsecretkey+:} false; then : else ac_cv_search_getsecretkey=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_getsecretkey" >&5 $as_echo "$ac_cv_search_getsecretkey" >&6; } ac_res=$ac_cv_search_getsecretkey if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi SECURE_RPC="yes" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Secure RPC authentication (\"SUN-DES-1\") should be supported" >&5 $as_echo_n "checking if Secure RPC authentication (\"SUN-DES-1\") should be supported... " >&6; } if test "x$SECURE_RPC" = "xyes" ; then $as_echo "#define SECURE_RPC 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SECURE_RPC" >&5 $as_echo "$SECURE_RPC" >&6; } # Preferred order to try transports for local connections { $as_echo "$as_me:${as_lineno-$LINENO}: checking what order to try transports in for local connections" >&5 $as_echo_n "checking what order to try transports in for local connections... " >&6; } DEFAULT_LOCAL_TRANS="" case $host_os in solaris*) # On Solaris 2.6 through 9, named pipes (LOCAL_TRANS) were # faster than Unix domain sockets, but on Solaris 10 & later, # Unix domain sockets are faster now. if test "$UNIXCONN" = "yes" ; then if test ! "x$DEFAULT_LOCAL_TRANS" = "x" ; then DEFAULT_LOCAL_TRANS="${DEFAULT_LOCAL_TRANS}," fi DEFAULT_LOCAL_TRANS="${DEFAULT_LOCAL_TRANS}UNIX_TRANS" fi if test "$LOCALCONN" = "yes" ; then if test ! "x$DEFAULT_LOCAL_TRANS" = "x" ; then DEFAULT_LOCAL_TRANS="${DEFAULT_LOCAL_TRANS}," fi DEFAULT_LOCAL_TRANS="${DEFAULT_LOCAL_TRANS}LOCAL_TRANS" fi if test "$TCPCONN" = "yes" ; then if test ! "x$DEFAULT_LOCAL_TRANS" = "x" ; then DEFAULT_LOCAL_TRANS="${DEFAULT_LOCAL_TRANS}," fi DEFAULT_LOCAL_TRANS="${DEFAULT_LOCAL_TRANS}TCP_TRANS" fi ;; linux*) # LOCAL_TRANS is used for abstract sockets. if test "$UNIXCONN" = "yes" ; then if test ! "x$DEFAULT_LOCAL_TRANS" = "x" ; then DEFAULT_LOCAL_TRANS="${DEFAULT_LOCAL_TRANS}," fi DEFAULT_LOCAL_TRANS="${DEFAULT_LOCAL_TRANS}LOCAL_TRANS,UNIX_TRANS" fi if test "$TCPCONN" = "yes" ; then if test ! "x$DEFAULT_LOCAL_TRANS" = "x" ; then DEFAULT_LOCAL_TRANS="${DEFAULT_LOCAL_TRANS}," fi DEFAULT_LOCAL_TRANS="${DEFAULT_LOCAL_TRANS}TCP_TRANS" fi ;; *) if test "$LOCALCONN" = "yes" ; then if test ! "x$DEFAULT_LOCAL_TRANS" = "x" ; then DEFAULT_LOCAL_TRANS="${DEFAULT_LOCAL_TRANS}," fi DEFAULT_LOCAL_TRANS="${DEFAULT_LOCAL_TRANS}LOCAL_TRANS" fi if test "$UNIXCONN" = "yes" ; then if test ! "x$DEFAULT_LOCAL_TRANS" = "x" ; then DEFAULT_LOCAL_TRANS="${DEFAULT_LOCAL_TRANS}," fi DEFAULT_LOCAL_TRANS="${DEFAULT_LOCAL_TRANS}UNIX_TRANS" fi if test "$TCPCONN" = "yes" ; then if test ! "x$DEFAULT_LOCAL_TRANS" = "x" ; then DEFAULT_LOCAL_TRANS="${DEFAULT_LOCAL_TRANS}," fi DEFAULT_LOCAL_TRANS="${DEFAULT_LOCAL_TRANS}TCP_TRANS" fi ;; esac # Check whether --with-local-transport-order was given. if test "${with_local_transport_order+set}" = set; then : withval=$with_local_transport_order; LOCAL_TRANSPORT_LIST=$withval else LOCAL_TRANSPORT_LIST=$DEFAULT_LOCAL_TRANS fi cat >>confdefs.h <<_ACEOF #define LOCAL_TRANSPORT_LIST $LOCAL_TRANSPORT_LIST _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LOCAL_TRANSPORT_LIST" >&5 $as_echo "$LOCAL_TRANSPORT_LIST" >&6; } # Check for dlopen { $as_echo "$as_me:${as_lineno-$LINENO}: checking if run-time linking is supported" >&5 $as_echo_n "checking if run-time linking is supported... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlopen" >&5 $as_echo_n "checking for library containing dlopen... " >&6; } if ${ac_cv_search_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF for ac_lib in '' dl svld; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_dlopen=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_dlopen+:} false; then : break fi done if ${ac_cv_search_dlopen+:} false; then : else ac_cv_search_dlopen=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlopen" >&5 $as_echo "$ac_cv_search_dlopen" >&6; } ac_res=$ac_cv_search_dlopen if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "x$ac_cv_search_dlopen" = xno; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing shl_load" >&5 $as_echo_n "checking for library containing shl_load... " >&6; } if ${ac_cv_search_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF for ac_lib in '' dld; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_shl_load=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_shl_load+:} false; then : break fi done if ${ac_cv_search_shl_load+:} false; then : else ac_cv_search_shl_load=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_shl_load" >&5 $as_echo "$ac_cv_search_shl_load" >&6; } ac_res=$ac_cv_search_shl_load if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "x$ac_cv_search_shl_load" != xno; then $as_echo "#define HAVE_SHL_LOAD 1" >>confdefs.h for ac_header in dl.h do : ac_fn_c_check_header_mongrel "$LINENO" "dl.h" "ac_cv_header_dl_h" "$ac_includes_default" if test "x$ac_cv_header_dl_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DL_H 1 _ACEOF fi done fi else $as_echo "#define HAVE_DLOPEN 1" >>confdefs.h for ac_header in dlfcn.h do : ac_fn_c_check_header_mongrel "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default" if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done fi if test "x$ac_cv_header_dlfcn_h" = xyes -o "x$ac_cv_header_dl_h" = xyes; then HAVE_LOADABLE_MODULES=yes else HAVE_LOADABLE_MODULES=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_LOADABLE_MODULES" >&5 $as_echo "$HAVE_LOADABLE_MODULES" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if loadable i18n module support should be enabled" >&5 $as_echo_n "checking if loadable i18n module support should be enabled... " >&6; } # Check whether --enable-loadable-i18n was given. if test "${enable_loadable_i18n+set}" = set; then : enableval=$enable_loadable_i18n; XLIB_LOADABLE_I18N=$enableval else XLIB_LOADABLE_I18N="no" fi if test x$XLIB_LOADABLE_I18N = xyes; then if test x$HAVE_LOADABLE_MODULES = xno; then as_fn_error $? "Loadable module support is required to enable loadable i18n module support" "$LINENO" 5 fi $as_echo "#define USE_DYNAMIC_LC 1" >>confdefs.h I18N_MODULE_LIBS='${top_builddir}/src/libX11.la' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XLIB_LOADABLE_I18N" >&5 $as_echo "$XLIB_LOADABLE_I18N" >&6; } if test x$XLIB_LOADABLE_I18N = xyes; then XLIB_LOADABLE_I18N_TRUE= XLIB_LOADABLE_I18N_FALSE='#' else XLIB_LOADABLE_I18N_TRUE='#' XLIB_LOADABLE_I18N_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if loadable Xcursor library support should be enabled" >&5 $as_echo_n "checking if loadable Xcursor library support should be enabled... " >&6; } # Check whether --enable-loadable-xcursor was given. if test "${enable_loadable_xcursor+set}" = set; then : enableval=$enable_loadable_xcursor; XLIB_LOADABLE_XCURSOR=$enableval else XLIB_LOADABLE_XCURSOR=$HAVE_LOADABLE_MODULES fi if test x$XLIB_LOADABLE_XCURSOR = xyes; then $as_echo "#define USE_DYNAMIC_XCURSOR 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XLIB_LOADABLE_XCURSOR" >&5 $as_echo "$XLIB_LOADABLE_XCURSOR" >&6; } # Checks for header files. for ac_header in sys/select.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/select.h" "ac_cv_header_sys_select_h" "$ac_includes_default" if test "x$ac_cv_header_sys_select_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_SELECT_H 1 _ACEOF fi done # Checks for typedefs, structures, and compiler characteristics. # Checks for library functions. for ac_func in strtol seteuid do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done # Used in lcFile.c (see also --enable-xlocaledir settings below) XLOCALEDIR_IS_SAFE="no" ac_fn_c_check_decl "$LINENO" "issetugid" "ac_cv_have_decl_issetugid" "$ac_includes_default" if test "x$ac_cv_have_decl_issetugid" = xyes; then : fi ac_fn_c_check_func "$LINENO" "issetugid" "ac_cv_func_issetugid" if test "x$ac_cv_func_issetugid" = xyes; then : fi if test "$ac_cv_have_decl_issetugid" = yes && test "$ac_cv_func_issetugid" = yes; then XLOCALEDIR_IS_SAFE="yes" $as_echo "#define HASSETUGID 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "getresuid" "ac_cv_func_getresuid" if test "x$ac_cv_func_getresuid" = xyes; then : XLOCALEDIR_IS_SAFE="yes" $as_echo "#define HASGETRESUID 1" >>confdefs.h fi # Used in Font.c ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat" if test "x$ac_cv_func_shmat" = xyes; then : $as_echo "#define HAS_SHM 1" >>confdefs.h fi # Checks for system services # AC_PATH_XTRA # arch specific things WCHAR32="1" case $host_os in os2*) os2="true" ; WCHAR32="0" ;; *) ;; esac if test x$os2 = xtrue; then OS2_TRUE= OS2_FALSE='#' else OS2_TRUE='#' OS2_FALSE= fi # Check whether --with-launchd was given. if test "${with_launchd+set}" = set; then : withval=$with_launchd; LAUNCHD=$withval else LAUNCHD=auto fi if test "x$LAUNCHD" = xauto; then unset LAUNCHD # Extract the first word of "launchd", so it can be a program name with args. set dummy launchd; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LAUNCHD+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LAUNCHD"; then ac_cv_prog_LAUNCHD="$LAUNCHD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/sbin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LAUNCHD="yes" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_LAUNCHD" && ac_cv_prog_LAUNCHD="no" fi fi LAUNCHD=$ac_cv_prog_LAUNCHD if test -n "$LAUNCHD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LAUNCHD" >&5 $as_echo "$LAUNCHD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test "x$LAUNCHD" = xyes ; then $as_echo "#define HAVE_LAUNCHD 1" >>confdefs.h $as_echo "#define TRANS_REOPEN 1" >>confdefs.h fi # Check whether --enable-xthreads was given. if test "${enable_xthreads+set}" = set; then : enableval=$enable_xthreads; xthreads=$enableval else xthreads=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getpwuid_r in -lc" >&5 $as_echo_n "checking for getpwuid_r in -lc... " >&6; } if ${ac_cv_lib_c_getpwuid_r+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char getpwuid_r (); int main () { return getpwuid_r (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_getpwuid_r=yes else ac_cv_lib_c_getpwuid_r=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_getpwuid_r" >&5 $as_echo "$ac_cv_lib_c_getpwuid_r" >&6; } if test "x$ac_cv_lib_c_getpwuid_r" = xyes; then : mtsafeapi="yes" else mtsafeapi="no" fi case x$xthreads in xyes) $as_echo "#define XTHREADS 1" >>confdefs.h if test x$mtsafeapi = xyes then $as_echo "#define XUSE_MTSAFE_API 1" >>confdefs.h fi ;; *) ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_self in -lc" >&5 $as_echo_n "checking for pthread_self in -lc... " >&6; } if ${ac_cv_lib_c_pthread_self+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_self (); int main () { return pthread_self (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_pthread_self=yes else ac_cv_lib_c_pthread_self=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_pthread_self" >&5 $as_echo "$ac_cv_lib_c_pthread_self" >&6; } if test "x$ac_cv_lib_c_pthread_self" = xyes; then : thrstubs="no" else thrstubs="yes" fi if test x$thrstubs = xyes; then THRSTUBS_TRUE= THRSTUBS_FALSE='#' else THRSTUBS_TRUE='#' THRSTUBS_FALSE= fi # XXX incomplete, please fill this in if test x$xthreads = xyes ; then case $host_os in linux*|gnu*|k*bsd*-gnu) XTHREADLIB=-lpthread ;; netbsd*) XTHREAD_CFLAGS="-D_POSIX_THREAD_SAFE_FUNCTIONS" XTHREADLIB="-lpthread" ;; freebsd*) XTHREAD_CFLAGS="-D_THREAD_SAFE" XTHREADLIB="-pthread" ;; dragonfly*|openbsd*) XTHREADLIB="-pthread" ;; solaris*) XTHREAD_CFLAGS="-D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS" ;; esac fi ac_fn_c_check_func "$LINENO" "poll" "ac_cv_func_poll" if test "x$ac_cv_func_poll" = xyes; then : $as_echo "#define USE_POLL 1" >>confdefs.h fi # # Find keysymdef.h # { $as_echo "$as_me:${as_lineno-$LINENO}: checking keysym definitions" >&5 $as_echo_n "checking keysym definitions... " >&6; } # Check whether --with-keysymdefdir was given. if test "${with_keysymdefdir+set}" = set; then : withval=$with_keysymdefdir; KEYSYMDEFDIR=$withval else KEYSYMDEFDIR=`$PKG_CONFIG --variable=includedir xproto`/X11 fi if test ! -d "$KEYSYMDEFDIR"; then as_fn_error $? "$KEYSYMDEFDIR doesn't exist or isn't a directory" "$LINENO" 5 fi FILES="keysymdef.h XF86keysym.h Sunkeysym.h DECkeysym.h HPkeysym.h" for i in $FILES; do if test -f "$KEYSYMDEFDIR/$i"; then KEYSYMDEFS="$KEYSYMDEFS $KEYSYMDEFDIR/$i" elif test "x$i" = "xkeysymdef.h"; then as_fn_error $? "Cannot find keysymdef.h" "$LINENO" 5 fi done { $as_echo "$as_me:${as_lineno-$LINENO}: result: $KEYSYMDEFS" >&5 $as_echo "$KEYSYMDEFS" >&6; } # Check whether --enable-xcms was given. if test "${enable_xcms+set}" = set; then : enableval=$enable_xcms; XCMS=$enableval else XCMS=yes fi if test x$XCMS = xyes ; then XCMS_TRUE= XCMS_FALSE='#' else XCMS_TRUE='#' XCMS_FALSE= fi if test x"$XCMS" = "xyes"; then $as_echo "#define XCMS 1" >>confdefs.h fi # Check whether --enable-xlocale was given. if test "${enable_xlocale+set}" = set; then : enableval=$enable_xlocale; XLOCALE=$enableval else XLOCALE=yes fi if test x$XLOCALE = xyes ; then XLOCALE_TRUE= XLOCALE_FALSE='#' else XLOCALE_TRUE='#' XLOCALE_FALSE= fi if test x"$XLOCALE" = "xyes"; then $as_echo "#define XLOCALE 1" >>confdefs.h fi # This disables XLOCALEDIR. Set it if you're using BuildLoadableXlibI18n, # don't have either issetugid() or getresuid(), and you need to protect # clients that are setgid or setuid to an id other than 0. { $as_echo "$as_me:${as_lineno-$LINENO}: checking if XLOCALEDIR support should be enabled" >&5 $as_echo_n "checking if XLOCALEDIR support should be enabled... " >&6; } # Check whether --enable-xlocaledir was given. if test "${enable_xlocaledir+set}" = set; then : enableval=$enable_xlocaledir; ENABLE_XLOCALEDIR=$enableval else ENABLE_XLOCALEDIR=$XLOCALEDIR_IS_SAFE fi if test "x$ENABLE_XLOCALEDIR" = "xno"; then $as_echo "#define NO_XLOCALEDIR 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_XLOCALEDIR" >&5 $as_echo "$ENABLE_XLOCALEDIR" >&6; } # Check whether --enable-xf86bigfont was given. if test "${enable_xf86bigfont+set}" = set; then : enableval=$enable_xf86bigfont; XF86BIGFONT=$enableval else XF86BIGFONT="yes" fi if test "x$XF86BIGFONT" = "xyes"; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BIGFONT" >&5 $as_echo_n "checking for BIGFONT... " >&6; } if test -n "$BIGFONT_CFLAGS"; then pkg_cv_BIGFONT_CFLAGS="$BIGFONT_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"xf86bigfontproto >= 1.2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "xf86bigfontproto >= 1.2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_BIGFONT_CFLAGS=`$PKG_CONFIG --cflags "xf86bigfontproto >= 1.2.0" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$BIGFONT_LIBS"; then pkg_cv_BIGFONT_LIBS="$BIGFONT_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"xf86bigfontproto >= 1.2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "xf86bigfontproto >= 1.2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_BIGFONT_LIBS=`$PKG_CONFIG --libs "xf86bigfontproto >= 1.2.0" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then BIGFONT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "xf86bigfontproto >= 1.2.0" 2>&1` else BIGFONT_PKG_ERRORS=`$PKG_CONFIG --print-errors "xf86bigfontproto >= 1.2.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$BIGFONT_PKG_ERRORS" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } XF86BIGFONT="no" elif test $pkg_failed = untried; then XF86BIGFONT="no" else BIGFONT_CFLAGS=$pkg_cv_BIGFONT_CFLAGS BIGFONT_LIBS=$pkg_cv_BIGFONT_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define XF86BIGFONT 1" >>confdefs.h fi fi # Check whether --enable-xkb was given. if test "${enable_xkb+set}" = set; then : enableval=$enable_xkb; XKB=$enableval else XKB=yes fi if test x$XKB = xyes ; then XKB_TRUE= XKB_FALSE='#' else XKB_TRUE='#' XKB_FALSE= fi if test x"$XKB" = "xyes"; then XKBPROTO_REQUIRES="kbproto" X11_REQUIRES="${X11_REQUIRES} kbproto inputproto" $as_echo "#define XKB 1" >>confdefs.h else XKBPROTO_REQUIRES="" fi for ac_header in $ac_header_list do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in getpagesize do : ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize" if test "x$ac_cv_func_getpagesize" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETPAGESIZE 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5 $as_echo_n "checking for working mmap... " >&6; } if ${ac_cv_func_mmap_fixed_mapped+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_mmap_fixed_mapped=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default /* malloc might have been renamed as rpl_malloc. */ #undef malloc /* Thanks to Mike Haertel and Jim Avera for this test. Here is a matrix of mmap possibilities: mmap private not fixed mmap private fixed at somewhere currently unmapped mmap private fixed at somewhere already mapped mmap shared not fixed mmap shared fixed at somewhere currently unmapped mmap shared fixed at somewhere already mapped For private mappings, we should verify that changes cannot be read() back from the file, nor mmap's back from the file at a different address. (There have been systems where private was not correctly implemented like the infamous i386 svr4.0, and systems where the VM page cache was not coherent with the file system buffer cache like early versions of FreeBSD and possibly contemporary NetBSD.) For shared mappings, we should conversely verify that changes get propagated back to all the places they're supposed to be. Grep wants private fixed already mapped. The main things grep needs to know about mmap are: * does it exist and is it safe to write into the mmap'd area * how to use it (BSD variants) */ #include #include #if !defined STDC_HEADERS && !defined HAVE_STDLIB_H char *malloc (); #endif /* This mess was copied from the GNU getpagesize.h. */ #ifndef HAVE_GETPAGESIZE # ifdef _SC_PAGESIZE # define getpagesize() sysconf(_SC_PAGESIZE) # else /* no _SC_PAGESIZE */ # ifdef HAVE_SYS_PARAM_H # include # ifdef EXEC_PAGESIZE # define getpagesize() EXEC_PAGESIZE # else /* no EXEC_PAGESIZE */ # ifdef NBPG # define getpagesize() NBPG * CLSIZE # ifndef CLSIZE # define CLSIZE 1 # endif /* no CLSIZE */ # else /* no NBPG */ # ifdef NBPC # define getpagesize() NBPC # else /* no NBPC */ # ifdef PAGESIZE # define getpagesize() PAGESIZE # endif /* PAGESIZE */ # endif /* no NBPC */ # endif /* no NBPG */ # endif /* no EXEC_PAGESIZE */ # else /* no HAVE_SYS_PARAM_H */ # define getpagesize() 8192 /* punt totally */ # endif /* no HAVE_SYS_PARAM_H */ # endif /* no _SC_PAGESIZE */ #endif /* no HAVE_GETPAGESIZE */ int main () { char *data, *data2, *data3; const char *cdata2; int i, pagesize; int fd, fd2; pagesize = getpagesize (); /* First, make a file with some known garbage in it. */ data = (char *) malloc (pagesize); if (!data) return 1; for (i = 0; i < pagesize; ++i) *(data + i) = rand (); umask (0); fd = creat ("conftest.mmap", 0600); if (fd < 0) return 2; if (write (fd, data, pagesize) != pagesize) return 3; close (fd); /* Next, check that the tail of a page is zero-filled. File must have non-zero length, otherwise we risk SIGBUS for entire page. */ fd2 = open ("conftest.txt", O_RDWR | O_CREAT | O_TRUNC, 0600); if (fd2 < 0) return 4; cdata2 = ""; if (write (fd2, cdata2, 1) != 1) return 5; data2 = (char *) mmap (0, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd2, 0L); if (data2 == MAP_FAILED) return 6; for (i = 0; i < pagesize; ++i) if (*(data2 + i)) return 7; close (fd2); if (munmap (data2, pagesize)) return 8; /* Next, try to mmap the file at a fixed address which already has something else allocated at it. If we can, also make sure that we see the same garbage. */ fd = open ("conftest.mmap", O_RDWR); if (fd < 0) return 9; if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FIXED, fd, 0L)) return 10; for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data2 + i)) return 11; /* Finally, make sure that changes to the mapped area do not percolate back to the file as seen by read(). (This is a bug on some variants of i386 svr4.0.) */ for (i = 0; i < pagesize; ++i) *(data2 + i) = *(data2 + i) + 1; data3 = (char *) malloc (pagesize); if (!data3) return 12; if (read (fd, data3, pagesize) != pagesize) return 13; for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data3 + i)) return 14; close (fd); return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_mmap_fixed_mapped=yes else ac_cv_func_mmap_fixed_mapped=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5 $as_echo "$ac_cv_func_mmap_fixed_mapped" >&6; } if test $ac_cv_func_mmap_fixed_mapped = yes; then $as_echo "#define HAVE_MMAP 1" >>confdefs.h fi rm -f conftest.mmap conftest.txt composecache_default=$ac_cv_func_mmap_fixed_mapped ac_fn_c_check_func "$LINENO" "nl_langinfo" "ac_cv_func_nl_langinfo" if test "x$ac_cv_func_nl_langinfo" = xyes; then : else composecache_default=no fi # Check whether --enable-composecache was given. if test "${enable_composecache+set}" = set; then : enableval=$enable_composecache; COMPOSECACHE=$enableval else COMPOSECACHE=$composecache_default fi if test x"$COMPOSECACHE" = "xyes"; then $as_echo "#define COMPOSECACHE 1" >>confdefs.h fi # Allow checking code with lint, sparse, etc. # Check whether --with-lint was given. if test "${with_lint+set}" = set; then : withval=$with_lint; use_lint=$withval else use_lint=no fi # Obtain platform specific info like program name and options # The lint program on FreeBSD and NetBSD is different from the one on Solaris case $host_os in *linux* | *openbsd* | kfreebsd*-gnu | darwin* | cygwin*) lint_name=splint lint_options="-badflag" ;; *freebsd* | *netbsd*) lint_name=lint lint_options="-u -b" ;; *solaris*) lint_name=lint lint_options="-u -b -h -erroff=E_INDISTING_FROM_TRUNC2" ;; esac # Test for the presence of the program (either guessed by the code or spelled out by the user) if test "x$use_lint" = x"yes" ; then # Extract the first word of "$lint_name", so it can be a program name with args. set dummy $lint_name; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_LINT+:} false; then : $as_echo_n "(cached) " >&6 else case $LINT in [\\/]* | ?:[\\/]*) ac_cv_path_LINT="$LINT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_LINT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi LINT=$ac_cv_path_LINT if test -n "$LINT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINT" >&5 $as_echo "$LINT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$LINT" = "x"; then as_fn_error $? "--with-lint=yes specified but lint-style tool not found in PATH" "$LINENO" 5 fi elif test "x$use_lint" = x"no" ; then if test "x$LINT" != "x"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ignoring LINT environment variable since --with-lint=no was specified" >&5 $as_echo "$as_me: WARNING: ignoring LINT environment variable since --with-lint=no was specified" >&2;} fi else as_fn_error $? "--with-lint expects 'yes' or 'no'. Use LINT variable to specify path." "$LINENO" 5 fi # User supplied flags override default flags if test "x$LINT_FLAGS" != "x"; then lint_options=$LINT_FLAGS fi LINT_FLAGS=$lint_options if test "x$LINT" != x; then LINT_TRUE= LINT_FALSE='#' else LINT_TRUE='#' LINT_FALSE= fi # Check whether --enable-lint-library was given. if test "${enable_lint_library+set}" = set; then : enableval=$enable_lint_library; make_lint_lib=$enableval else make_lint_lib=no fi if test "x$make_lint_lib" = x"yes" ; then LINTLIB=llib-lX11.ln if test "x$LINT" = "x"; then as_fn_error $? "Cannot make lint library without --with-lint" "$LINENO" 5 fi elif test "x$make_lint_lib" != x"no" ; then as_fn_error $? "--enable-lint-library expects 'yes' or 'no'." "$LINENO" 5 fi if test x$make_lint_lib != xno; then MAKE_LINT_LIB_TRUE= MAKE_LINT_LIB_FALSE='#' else MAKE_LINT_LIB_TRUE='#' MAKE_LINT_LIB_FALSE= fi X11_DATADIR="${datadir}/X11" prefix_NONE= exec_prefix_NONE= test "x$prefix" = xNONE && prefix_NONE=yes && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix_NONE=yes && exec_prefix=$prefix eval ax_define_dir="\"$X11_DATADIR\"" eval ax_define_dir="\"$ax_define_dir\"" X11_DATADIR="$ax_define_dir" cat >>confdefs.h <<_ACEOF #define X11_DATADIR "$ax_define_dir" _ACEOF test "$prefix_NONE" && prefix=NONE test "$exec_prefix_NONE" && exec_prefix=NONE X11_LIBDIR="${libdir}/X11" prefix_NONE= exec_prefix_NONE= test "x$prefix" = xNONE && prefix_NONE=yes && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix_NONE=yes && exec_prefix=$prefix eval ax_define_dir="\"$X11_LIBDIR\"" eval ax_define_dir="\"$ax_define_dir\"" X11_LIBDIR="$ax_define_dir" cat >>confdefs.h <<_ACEOF #define X11_LIBDIR "$ax_define_dir" _ACEOF test "$prefix_NONE" && prefix=NONE test "$exec_prefix_NONE" && exec_prefix=NONE pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X11" >&5 $as_echo_n "checking for X11... " >&6; } if test -n "$X11_CFLAGS"; then pkg_cv_X11_CFLAGS="$X11_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$X11_REQUIRES\""; } >&5 ($PKG_CONFIG --exists --print-errors "$X11_REQUIRES") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_X11_CFLAGS=`$PKG_CONFIG --cflags "$X11_REQUIRES" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$X11_LIBS"; then pkg_cv_X11_LIBS="$X11_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$X11_REQUIRES\""; } >&5 ($PKG_CONFIG --exists --print-errors "$X11_REQUIRES") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_X11_LIBS=`$PKG_CONFIG --libs "$X11_REQUIRES" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then X11_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$X11_REQUIRES" 2>&1` else X11_PKG_ERRORS=`$PKG_CONFIG --print-errors "$X11_REQUIRES" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$X11_PKG_ERRORS" >&5 as_fn_error $? "Package requirements ($X11_REQUIRES) were not met: $X11_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables X11_CFLAGS and X11_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. " "$LINENO" 5 elif test $pkg_failed = untried; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables X11_CFLAGS and X11_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else X11_CFLAGS=$pkg_cv_X11_CFLAGS X11_LIBS=$pkg_cv_X11_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } : fi X11_CFLAGS="$X11_CFLAGS $XTHREAD_CFLAGS" # # Yes, it would be nice to put the locale data in # /usr/share, but the locale stuff includes loadable # libraries which must be located in the same directory # as the other locale data, so for now, everything lives # in ${libdir} # X11_LOCALEDATADIR="${X11_DATADIR}/locale" prefix_NONE= exec_prefix_NONE= test "x$prefix" = xNONE && prefix_NONE=yes && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix_NONE=yes && exec_prefix=$prefix eval ax_define_dir="\"$X11_LOCALEDATADIR\"" eval ax_define_dir="\"$ax_define_dir\"" XLOCALEDATADIR="$ax_define_dir" cat >>confdefs.h <<_ACEOF #define XLOCALEDATADIR "$ax_define_dir" _ACEOF test "$prefix_NONE" && prefix=NONE test "$exec_prefix_NONE" && exec_prefix=NONE # Check whether --with-locale-lib-dir was given. if test "${with_locale_lib_dir+set}" = set; then : withval=$with_locale_lib_dir; X11_LOCALELIBDIR="$withval" else X11_LOCALELIBDIR="${X11_LIBDIR}/locale" fi prefix_NONE= exec_prefix_NONE= test "x$prefix" = xNONE && prefix_NONE=yes && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix_NONE=yes && exec_prefix=$prefix eval ax_define_dir="\"$X11_LOCALELIBDIR\"" eval ax_define_dir="\"$ax_define_dir\"" XLOCALELIBDIR="$ax_define_dir" cat >>confdefs.h <<_ACEOF #define XLOCALELIBDIR "$ax_define_dir" _ACEOF test "$prefix_NONE" && prefix=NONE test "$exec_prefix_NONE" && exec_prefix=NONE X11_LOCALEDIR="${X11_LOCALEDATADIR}" prefix_NONE= exec_prefix_NONE= test "x$prefix" = xNONE && prefix_NONE=yes && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix_NONE=yes && exec_prefix=$prefix eval ax_define_dir="\"$X11_LOCALEDIR\"" eval ax_define_dir="\"$ax_define_dir\"" XLOCALEDIR="$ax_define_dir" cat >>confdefs.h <<_ACEOF #define XLOCALEDIR "$ax_define_dir" _ACEOF test "$prefix_NONE" && prefix=NONE test "$exec_prefix_NONE" && exec_prefix=NONE locales="\ am_ET.UTF-8 armscii-8 C cs_CZ.UTF-8 el_GR.UTF-8 en_US.UTF-8 \ fi_FI.UTF-8 georgian-academy georgian-ps ibm-cp1133 iscii-dev \ isiri-3342 iso8859-1 iso8859-10 iso8859-11 iso8859-13 iso8859-14 \ iso8859-15 iso8859-2 iso8859-3 iso8859-4 iso8859-5 iso8859-6 \ iso8859-7 iso8859-8 iso8859-9 iso8859-9e ja ja.JIS \ ja_JP.UTF-8 ja.SJIS km_KH.UTF-8 ko koi8-c koi8-r \ koi8-u ko_KR.UTF-8 microsoft-cp1251 microsoft-cp1255 \ microsoft-cp1256 mulelao-1 nokhchi-1 pt_BR.UTF-8 ru_RU.UTF-8 \ sr_CS.UTF-8 tatar-cyr th_TH th_TH.UTF-8 tscii-0 vi_VN.tcvn \ vi_VN.viscii zh_CN zh_CN.gb18030 zh_CN.gbk zh_CN.UTF-8 \ zh_HK.big5 zh_HK.big5hkscs zh_HK.UTF-8 zh_TW zh_TW.big5 \ zh_TW.UTF-8" XKEYSYMDB="${X11_DATADIR}/XKeysymDB" prefix_NONE= exec_prefix_NONE= test "x$prefix" = xNONE && prefix_NONE=yes && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix_NONE=yes && exec_prefix=$prefix eval ax_define_dir="\"$XKEYSYMDB\"" eval ax_define_dir="\"$ax_define_dir\"" XKEYSYMDB="$ax_define_dir" cat >>confdefs.h <<_ACEOF #define XKEYSYMDB "$ax_define_dir" _ACEOF test "$prefix_NONE" && prefix=NONE test "$exec_prefix_NONE" && exec_prefix=NONE XERRORDB="${X11_DATADIR}/XErrorDB" prefix_NONE= exec_prefix_NONE= test "x$prefix" = xNONE && prefix_NONE=yes && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix_NONE=yes && exec_prefix=$prefix eval ax_define_dir="\"$XERRORDB\"" eval ax_define_dir="\"$ax_define_dir\"" XERRORDB="$ax_define_dir" cat >>confdefs.h <<_ACEOF #define XERRORDB "$ax_define_dir" _ACEOF test "$prefix_NONE" && prefix=NONE test "$exec_prefix_NONE" && exec_prefix=NONE # Check whether --enable-malloc0returnsnull was given. if test "${enable_malloc0returnsnull+set}" = set; then : enableval=$enable_malloc0returnsnull; MALLOC_ZERO_RETURNS_NULL=$enableval else MALLOC_ZERO_RETURNS_NULL=auto fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether malloc(0) returns NULL" >&5 $as_echo_n "checking whether malloc(0) returns NULL... " >&6; } if test "x$MALLOC_ZERO_RETURNS_NULL" = xauto; then if ${xorg_cv_malloc0_returns_null+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { char *m0, *r0, *c0, *p; m0 = malloc(0); p = malloc(10); r0 = realloc(p,0); c0 = calloc(0,10); exit((m0 == 0 || r0 == 0 || c0 == 0) ? 0 : 1); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : xorg_cv_malloc0_returns_null=yes else xorg_cv_malloc0_returns_null=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi MALLOC_ZERO_RETURNS_NULL=$xorg_cv_malloc0_returns_null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MALLOC_ZERO_RETURNS_NULL" >&5 $as_echo "$MALLOC_ZERO_RETURNS_NULL" >&6; } if test "x$MALLOC_ZERO_RETURNS_NULL" = xyes; then MALLOC_ZERO_CFLAGS="-DMALLOC_0_RETURNS_NULL" XMALLOC_ZERO_CFLAGS=$MALLOC_ZERO_CFLAGS XTMALLOC_ZERO_CFLAGS="$MALLOC_ZERO_CFLAGS -DXTMALLOC_BC" else MALLOC_ZERO_CFLAGS="" XMALLOC_ZERO_CFLAGS="" XTMALLOC_ZERO_CFLAGS="" fi ac_config_files="$ac_config_files Makefile include/Makefile man/Makefile man/xkb/Makefile src/Makefile src/util/Makefile src/xcms/Makefile src/xlibi18n/Makefile modules/Makefile modules/im/Makefile modules/im/ximcp/Makefile modules/lc/Makefile modules/lc/def/Makefile modules/lc/gen/Makefile modules/lc/Utf8/Makefile modules/om/Makefile modules/om/generic/Makefile src/xkb/Makefile nls/Makefile specs/Makefile specs/i18n/Makefile specs/i18n/compose/Makefile specs/i18n/framework/Makefile specs/i18n/localedb/Makefile specs/i18n/trans/Makefile specs/libX11/Makefile specs/XIM/Makefile specs/XKB/Makefile x11.pc x11-xcb.pc" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${ENABLE_SPECS_TRUE}" && test -z "${ENABLE_SPECS_FALSE}"; then as_fn_error $? "conditional \"ENABLE_SPECS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_XMLTO_TEXT_TRUE}" && test -z "${HAVE_XMLTO_TEXT_FALSE}"; then as_fn_error $? "conditional \"HAVE_XMLTO_TEXT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_XMLTO_TRUE}" && test -z "${HAVE_XMLTO_FALSE}"; then as_fn_error $? "conditional \"HAVE_XMLTO\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_FOP_TRUE}" && test -z "${HAVE_FOP_FALSE}"; then as_fn_error $? "conditional \"HAVE_FOP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_XSLTPROC_TRUE}" && test -z "${HAVE_XSLTPROC_FALSE}"; then as_fn_error $? "conditional \"HAVE_XSLTPROC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_STYLESHEETS_TRUE}" && test -z "${HAVE_STYLESHEETS_FALSE}"; then as_fn_error $? "conditional \"HAVE_STYLESHEETS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_PERL_TRUE}" && test -z "${HAVE_PERL_FALSE}"; then as_fn_error $? "conditional \"HAVE_PERL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${XLIB_LOADABLE_I18N_TRUE}" && test -z "${XLIB_LOADABLE_I18N_FALSE}"; then as_fn_error $? "conditional \"XLIB_LOADABLE_I18N\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${OS2_TRUE}" && test -z "${OS2_FALSE}"; then as_fn_error $? "conditional \"OS2\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${THRSTUBS_TRUE}" && test -z "${THRSTUBS_FALSE}"; then as_fn_error $? "conditional \"THRSTUBS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${XCMS_TRUE}" && test -z "${XCMS_FALSE}"; then as_fn_error $? "conditional \"XCMS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${XLOCALE_TRUE}" && test -z "${XLOCALE_FALSE}"; then as_fn_error $? "conditional \"XLOCALE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${XKB_TRUE}" && test -z "${XKB_FALSE}"; then as_fn_error $? "conditional \"XKB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${LINT_TRUE}" && test -z "${LINT_FALSE}"; then as_fn_error $? "conditional \"LINT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MAKE_LINT_LIB_TRUE}" && test -z "${MAKE_LINT_LIB_FALSE}"; then as_fn_error $? "conditional \"MAKE_LINT_LIB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by libX11 $as_me 1.6.3, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ libX11 config.status 1.6.3 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ nm_file_list_spec \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "src/config.h") CONFIG_HEADERS="$CONFIG_HEADERS src/config.h" ;; "include/X11/XlibConf.h") CONFIG_HEADERS="$CONFIG_HEADERS include/X11/XlibConf.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; "man/xkb/Makefile") CONFIG_FILES="$CONFIG_FILES man/xkb/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/util/Makefile") CONFIG_FILES="$CONFIG_FILES src/util/Makefile" ;; "src/xcms/Makefile") CONFIG_FILES="$CONFIG_FILES src/xcms/Makefile" ;; "src/xlibi18n/Makefile") CONFIG_FILES="$CONFIG_FILES src/xlibi18n/Makefile" ;; "modules/Makefile") CONFIG_FILES="$CONFIG_FILES modules/Makefile" ;; "modules/im/Makefile") CONFIG_FILES="$CONFIG_FILES modules/im/Makefile" ;; "modules/im/ximcp/Makefile") CONFIG_FILES="$CONFIG_FILES modules/im/ximcp/Makefile" ;; "modules/lc/Makefile") CONFIG_FILES="$CONFIG_FILES modules/lc/Makefile" ;; "modules/lc/def/Makefile") CONFIG_FILES="$CONFIG_FILES modules/lc/def/Makefile" ;; "modules/lc/gen/Makefile") CONFIG_FILES="$CONFIG_FILES modules/lc/gen/Makefile" ;; "modules/lc/Utf8/Makefile") CONFIG_FILES="$CONFIG_FILES modules/lc/Utf8/Makefile" ;; "modules/om/Makefile") CONFIG_FILES="$CONFIG_FILES modules/om/Makefile" ;; "modules/om/generic/Makefile") CONFIG_FILES="$CONFIG_FILES modules/om/generic/Makefile" ;; "src/xkb/Makefile") CONFIG_FILES="$CONFIG_FILES src/xkb/Makefile" ;; "nls/Makefile") CONFIG_FILES="$CONFIG_FILES nls/Makefile" ;; "specs/Makefile") CONFIG_FILES="$CONFIG_FILES specs/Makefile" ;; "specs/i18n/Makefile") CONFIG_FILES="$CONFIG_FILES specs/i18n/Makefile" ;; "specs/i18n/compose/Makefile") CONFIG_FILES="$CONFIG_FILES specs/i18n/compose/Makefile" ;; "specs/i18n/framework/Makefile") CONFIG_FILES="$CONFIG_FILES specs/i18n/framework/Makefile" ;; "specs/i18n/localedb/Makefile") CONFIG_FILES="$CONFIG_FILES specs/i18n/localedb/Makefile" ;; "specs/i18n/trans/Makefile") CONFIG_FILES="$CONFIG_FILES specs/i18n/trans/Makefile" ;; "specs/libX11/Makefile") CONFIG_FILES="$CONFIG_FILES specs/libX11/Makefile" ;; "specs/XIM/Makefile") CONFIG_FILES="$CONFIG_FILES specs/XIM/Makefile" ;; "specs/XKB/Makefile") CONFIG_FILES="$CONFIG_FILES specs/XKB/Makefile" ;; "x11.pc") CONFIG_FILES="$CONFIG_FILES x11.pc" ;; "x11-xcb.pc") CONFIG_FILES="$CONFIG_FILES x11-xcb.pc" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="" # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and in which our libraries should be installed. lt_sysroot=$lt_sysroot # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) if test x"$xsi_shell" = xyes; then sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ func_dirname ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ } # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_basename ()$/,/^} # func_basename /c\ func_basename ()\ {\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ func_dirname_and_basename ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ func_stripname ()\ {\ \ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ \ # positional parameters, so assign one to ordinary parameter first.\ \ func_stripname_result=${3}\ \ func_stripname_result=${func_stripname_result#"${1}"}\ \ func_stripname_result=${func_stripname_result%"${2}"}\ } # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ func_split_long_opt ()\ {\ \ func_split_long_opt_name=${1%%=*}\ \ func_split_long_opt_arg=${1#*=}\ } # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ func_split_short_opt ()\ {\ \ func_split_short_opt_arg=${1#??}\ \ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ } # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ func_lo2o ()\ {\ \ case ${1} in\ \ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ \ *) func_lo2o_result=${1} ;;\ \ esac\ } # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_xform ()$/,/^} # func_xform /c\ func_xform ()\ {\ func_xform_result=${1%.*}.lo\ } # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_arith ()$/,/^} # func_arith /c\ func_arith ()\ {\ func_arith_result=$(( $* ))\ } # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_len ()$/,/^} # func_len /c\ func_len ()\ {\ func_len_result=${#1}\ } # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$lt_shell_append" = xyes; then sed -e '/^func_append ()$/,/^} # func_append /c\ func_append ()\ {\ eval "${1}+=\\${2}"\ } # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ func_append_quoted ()\ {\ \ func_quote_for_eval "${2}"\ \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ } # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 $as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} fi mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi echo "" echo "X11 will be built with the following settings:" echo " Loadable i18n module support: "$XLIB_LOADABLE_I18N echo " Loadable xcursor library support: "$XLIB_LOADABLE_XCURSOR echo " Threading support: "$xthreads echo " Use Threads safe API: "$mtsafeapi echo " Threads stubs in libX11: "$thrstubs echo " XCMS: "$XCMS echo " Internationalization support: "$XLOCALE echo " XF86BigFont support: "$XF86BIGFONT echo " XKB support: "$XKB echo " XLOCALEDIR environment variable support: "$ENABLE_XLOCALEDIR echo " Compose table cache enabled: "$COMPOSECACHE echo " Functional specs building enabled: "$build_specs echo "" rary automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # libX11-1.6.3/x11.pc.in000064401431060000012000000005141247741723500144200ustar00alancstaff00002660200006prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ xthreadlib=@XTHREADLIB@ Name: X11 Description: X Library Version: @PACKAGE_VERSION@ Requires: xproto @XKBPROTO_REQUIRES@ Requires.private: @X11_EXTRA_DEPS@ Cflags: -I${includedir} @XTHREAD_CFLAGS@ Libs: -L${libdir} -lX11 Libs.private: @XTHREADLIB@ libX11-1.6.3/config.guess000075501431060000012000001236721247741725400154120ustar00alancstaff00002660200006#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2014 Free Software Foundation, Inc. timestamp='2014-11-04' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # # Please send patches to . me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2014 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/lslpp ] ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; *:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="gnulibc1" ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-${LIBC} exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: me -X 2>/dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep RlibX11-1.6.3/man/XEnableAccessControl.man000064401431060000012000000000621247741723500203250ustar00alancstaff00002660200006.so man__libmansuffix__/XAddHost.__libmansuffix__ libX11-1.6.3/man/XMoveResizeWindow.man000064401431060000012000000000721247741723500177350ustar00alancstaff00002660200006.so man__libmansuffix__/XConfigureWindow.__libmansuffix__ libX11-1.6.3/man/XAllocColorCells.man000064401431060000012000000000651247741723500174730ustar00alancstaff00002660200006.so man__libmansuffix__/XAllocColor.__libmansuffix__ libX11-1.6.3/man/XWarpPointer.man000064401431060000012000000117071247741723500167360ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XWarpPointer __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XWarpPointer \- move pointer .SH SYNTAX .HP int XWarpPointer\^(\^Display *\fIdisplay\fP\^, Window \fIsrc_w\fP\^, Window \fIdest_w\fP\^, int \fIsrc_x\fP\^, int \fIsrc_y\fP\^, unsigned int \fIsrc_width\fP\^, unsigned int \fIsrc_height\fP\^, int \fIdest_x\fP\^, int \fIdest_y\fP\^); .SH ARGUMENTS .IP \fIdest_w\fP 1i Specifies the destination window or .ZN None . .IP \fIdest_x\fP 1i .br .ns .IP \fIdest_y\fP 1i Specify the x and y coordinates within the destination window. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIsrc_x\fP 1i .br .ns .IP \fIsrc_y\fP 1i .br .ns .IP \fIsrc_width\fP 1i .br .ns .IP \fIsrc_height\fP 1i Specify a rectangle in the source window. .IP \fIsrc_w\fP 1i Specifies the source window or .ZN None . .SH DESCRIPTION If dest_w is .ZN None , .ZN XWarpPointer moves the pointer by the offsets (dest_x, dest_y) relative to the current position of the pointer. If dest_w is a window, .ZN XWarpPointer moves the pointer to the offsets (dest_x, dest_y) relative to the origin of dest_w. However, if src_w is a window, the move only takes place if the window src_w contains the pointer and if the specified rectangle of src_w contains the pointer. .LP The src_x and src_y coordinates are relative to the origin of src_w. If src_height is zero, it is replaced with the current height of src_w minus src_y. If src_width is zero, it is replaced with the current width of src_w minus src_x. .LP There is seldom any reason for calling this function. The pointer should normally be left to the user. If you do use this function, however, it generates events just as if the user had instantaneously moved the pointer from one position to another. Note that you cannot use .ZN XWarpPointer to move the pointer outside the confine_to window of an active pointer grab. An attempt to do so will only move the pointer as far as the closest edge of the confine_to window. .LP .ZN XWarpPointer can generate a .ZN BadWindow error. .SH DIAGNOSTICS .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XSetInputFocus(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XGetImage.man000064401431060000012000000000631247741723500161370ustar00alancstaff00002660200006.so man__libmansuffix__/XPutImage.__libmansuffix__ libX11-1.6.3/man/XScreenResourceString.man000064401431060000012000000001001247741723500205630ustar00alancstaff00002660200006.so man__libmansuffix__/XResourceManagerString.__libmansuffix__ libX11-1.6.3/man/XSetWMProtocols.man000064401431060000012000000133421247741723500173650ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XSetWMProtocols __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XSetWMProtocols, XGetWMProtocols \- set or read a window's WM_PROTOCOLS property .SH SYNTAX .HP Status XSetWMProtocols\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, Atom *\fIprotocols\fP\^, int \fIcount\fP\^); .HP Status XGetWMProtocols\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, Atom **\fIprotocols_return\fP\^, int *\fIcount_return\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .ds Cn protocols in the list .IP \fIcount\fP 1i Specifies the number of \*(Cn. .ds Cn protocols in the list .IP \fIcount_return\fP 1i Returns the number of \*(Cn. .IP \fIprotocols\fP 1i Specifies the list of protocols. .IP \fIprotocols_return\fP 1i Returns the list of protocols. .SH DESCRIPTION The .ZN XSetWMProtocols function replaces the WM_PROTOCOLS property on the specified window with the list of atoms specified by the protocols argument. If the property does not already exist, .ZN XSetWMProtocols sets the WM_PROTOCOLS property on the specified window to the list of atoms specified by the protocols argument. The property is stored with a type of ATOM and a format of 32. If it cannot intern the WM_PROTOCOLS atom, .ZN XSetWMProtocols returns a zero status. Otherwise, it returns a nonzero status. .LP .ZN XSetWMProtocols can generate .ZN BadAlloc and .ZN BadWindow errors. .LP The .ZN XGetWMProtocols function returns the list of atoms stored in the WM_PROTOCOLS property on the specified window. These atoms describe window manager protocols in which the owner of this window is willing to participate. If the property exists, is of type ATOM, is of format 32, and the atom WM_PROTOCOLS can be interned, .ZN XGetWMProtocols sets the protocols_return argument to a list of atoms, sets the count_return argument to the number of elements in the list, and returns a nonzero status. Otherwise, it sets neither of the return arguments and returns a zero status. To release the list of atoms, use .ZN XFree . .LP .ZN XGetWMProtocols can generate a .ZN BadWindow error. .SH PROPERTIES .TP 1i \s-1WM_PROTOCOLS\s+1 List of atoms that identify the communications protocols between the client and window manager in which the client is willing to participate. .SH DIAGNOSTICS .TP 1i .ZN BadAlloc The server failed to allocate the requested resource or server memory. .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XAllocClassHint(__libmansuffix__), XAllocIconSize(__libmansuffix__), XAllocSizeHints(__libmansuffix__), XAllocWMHints(__libmansuffix__), XFree(__libmansuffix__), XSetCommand(__libmansuffix__), XSetTransientForHint(__libmansuffix__), XSetTextProperty(__libmansuffix__), XSetWMClientMachine(__libmansuffix__), XSetWMColormapWindows(__libmansuffix__), XSetWMIconName(__libmansuffix__), XSetWMName(__libmansuffix__), XSetWMProperties(__libmansuffix__), XStringListToTextProperty(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XWMHints.man000064401431060000012000000000671247741723500160120ustar00alancstaff00002660200006.so man__libmansuffix__/XAllocWMHints.__libmansuffix__ libX11-1.6.3/man/XGetKeyboardControl.man000064401431060000012000000001001247741723500202060ustar00alancstaff00002660200006.so man__libmansuffix__/XChangeKeyboardControl.__libmansuffix__ libX11-1.6.3/man/XWriteBitmapFile.man000064401431060000012000000000711247741723500175030ustar00alancstaff00002660200006.so man__libmansuffix__/XReadBitmapFile.__libmansuffix__ libX11-1.6.3/man/IsCursorKey.man000064401431060000012000000104101247741723500165440ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH IsCursorKey __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME IsCursorKey, IsFunctionKey, IsKeypadKey, IsMiscFunctionKey, IsModifierKey, IsPFKey, IsPrivateKeypadKey \- keysym classification macros .SH SYNTAX int IsCursorKey\^(\^KeySym \fIkeysym\fP\^); .LP int IsFunctionKey\^(\^KeySym \fIkeysym\fP\^); .LP int IsKeypadKey\^(\^KeySym \fIkeysym\fP\^); .LP int IsMiscFunctionKey\^(\^KeySym \fIkeysym\fP\^); .LP int IsModifierKey\^(\^KeySym \fIkeysym\fP\^); .LP int IsPFKey\^(\^KeySym \fIkeysym\fP\^); .LP int IsPrivateKeypadKey\^(\^KeySym \fIkeysym\fP\^); .SH ARGUMENTS .ds Fn tested .IP \fIkeysym\fP 1i Specifies the KeySym that is to be \*(Fn. .SH DESCRIPTION The .ZN IsCursorKey macro returns .ZN True if the specified KeySym is a cursor key. .LP The .ZN IsFunctionKey macro returns .ZN True if the KeySym is a function key. .LP The .ZN IsKeypadKey macro returns .ZN True if the specified KeySym is a keypad key. .LP The .ZN IsMiscFunctionKey macro returns .ZN True if the specified KeySym is a miscellaneous function key. .LP The .ZN IsModifierKey macro returns .ZN True if the specified KeySym is a modifier key. .LP The .ZN IsPFKey macro returns .ZN True if the specified KeySym is a PF key. .LP The .ZN IsPrivateKeypadKey macro returns .ZN True if the specified KeySym is a vendor-private keypad key. .SH "SEE ALSO" XkbKeyTypesForCoreSymbols(__libmansuffix__), AllPlanes(__libmansuffix__), BlackPixelOfScreen(__libmansuffix__), ImageByteOrder(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XFree.man000064401431060000012000000065021247741723500153420ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XFree __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XFree \- free client data .SH SYNTAX int XFree\^(\^void *\fIdata\fP\^); .SH ARGUMENTS .IP \fIdata\fP 1i Specifies the data that are to be freed. .SH DESCRIPTION The .ZN XFree function is a general-purpose Xlib routine that frees the specified data. You must use it to free any objects that were allocated by Xlib, unless an alternate function is explicitly specified for the object. A NULL pointer cannot be passed to this function. .SH "SEE ALSO" \fI\*(xL\fP libX11-1.6.3/man/XcmsCCCOfColormap.man000064401431060000012000000104451247741723500175370ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XcmsCCCOfColormap __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XcmsCCCOfColormap, XcmsSetCCCOfColormap \- query and modify CCC of a colormap .SH SYNTAX .HP XcmsCCC XcmsCCCOfColormap\^(\^Display *\fIdisplay\fP\^, Colormap \fIcolormap\fP\^); .HP XcmsCCC XcmsSetCCCOfColormap\^(\^Display *\fIdisplay\fP\^, Colormap \fIcolormap\fP\^, XcmsCCC \fIccc\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIccc\fP 1i Specifies the CCC. .IP \fIcolormap\fP 1i Specifies the colormap. .SH DESCRIPTION The .ZN XcmsCCCOfColormap function returns the CCC associated with the specified colormap. Once obtained, the CCC attributes can be queried or modified. Unless the CCC associated with the specified colormap is changed with .ZN XcmsSetCCCOfColormap , this CCC is used when the specified colormap is used as an argument to color functions. .LP The .ZN XcmsSetCCCOfColormap function changes the CCC associated with the specified colormap. It returns the CCC previously associated with the colormap. If they are not used again in the application, CCCs should be freed by calling .ZN XcmsFreeCCC . Several colormaps may share the same CCC without restriction; this includes the CCCs generated by Xlib with each colormap. Xlib, however, creates a new CCC with each new colormap. .SH "SEE ALSO" DisplayOfCCC(__libmansuffix__), XcmsConvertColors(__libmansuffix__), XcmsCreateCCC(__libmansuffix__), XcmsDefaultCCC(__libmansuffix__), XcmsSetWhitePoint(__libmansuffix__) .br \fI\*(xL\fP .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions ColibX11-1.6.3/man/Xutf8DrawString.man000064401431060000012000000000671247741723500173540ustar00alancstaff00002660200006.so man__libmansuffix__/XmbDrawString.__libmansuffix__ libX11-1.6.3/man/XLookupColor.man000064401431060000012000000000651247741723500167270ustar00alancstaff00002660200006.so man__libmansuffix__/XQueryColor.__libmansuffix__ libX11-1.6.3/man/XSetClassHint.man000064401431060000012000000000711247741723500170200ustar00alancstaff00002660200006.so man__libmansuffix__/XAllocClassHint.__libmansuffix__ libX11-1.6.3/man/XSetWMClientMachine.man000064401431060000012000000106221247741723500201020ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XSetWMClientMachine __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XSetWMClientMachine, XGetWMClientMachine \- set or read a window's WM_CLIENT_MACHINE property .SH SYNTAX .HP void XSetWMClientMachine\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, XTextProperty *\fItext_prop\fP\^); .HP Status XGetWMClientMachine\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, XTextProperty *\fItext_prop_return\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fItext_prop\fP 1i Specifies the .ZN XTextProperty structure to be used. .IP \fItext_prop_return\fP 1i Returns the .ZN XTextProperty structure. .IP \fIw\fP 1i Specifies the window. .SH DESCRIPTION The .ZN XSetWMClientMachine convenience function calls .ZN XSetTextProperty to set the WM_CLIENT_MACHINE property. .LP The .ZN XGetWMClientMachine convenience function performs an .ZN XGetTextProperty on the WM_CLIENT_MACHINE property. It returns a nonzero status on success; otherwise, it returns a zero status. .SH PROPERTIES .TP 1i \s-1WM_CLIENT_MACHINE\s+1 The string name of the machine on which the client application is running. .SH "SEE ALSO" XAllocClassHint(__libmansuffix__), XAllocIconSize(__libmansuffix__), XAllocSizeHints(__libmansuffix__), XAllocWMHints(__libmansuffix__), XSetCommand(__libmansuffix__), XSetTransientForHint(__libmansuffix__), XSetTextProperty(__libmansuffix__), XSetWMColormapWindows(__libmansuffix__), XSetWMIconName(__libmansuffix__), XSetWMName(__libmansuffix__), XSetWMProperties(__libmansuffix__), XSetWMProtocols(__libmansuffix__), XStringListToTextProperty(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/xkb/XkbSetControls.man000064401431060000012000000126671247741723500200520ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbSetControls __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbSetControls \- Copies changes to the X server based on a modified ctrls structure in a local copy of the keyboard description .SH SYNOPSIS .HP .B Bool XkbSetControls .BI "(\^Display *" "display" "\^," .BI "unsigned long " "which" "\^," .BI "XkbDescPtr " "xkb" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- display connection to X server .TP .I \- which mask of controls requested .TP .I \- xkb keyboard description for controls information .SH DESCRIPTION .LP For each bit that is set in the .I which parameter, .I XkbSetControls sends the corresponding values from the .I xkb->ctrls field to the server. Valid values for .I which are any combination of the masks listed in Table 1 that have "ok" in the .I which column. Table 1 shows the actual values for the individual mask bits used to select controls for modification and to enable and disable the control. Note that the same mask bit is used to specify general modifications to the parameters used to configure the control (which), and to enable and disable the control (enabled_ctrls). The anomalies in the table (no "ok" in column) are for controls that have no configurable attributes; and for controls that are not boolean controls and therefore cannot be enabled or disabled. .TS c s s s l l l l l l l l l l l l. Table 1 Controls Mask Bits _ Mask Bit which or enabled Value changed_ctrls _ctrls _ XkbRepeatKeysMask ok ok (1L<<0) XkbSlowKeysMask ok ok (1L<<1) XkbBounceKeysMask ok ok (1L<<2) XkbStickyKeysMask ok ok (1L<<3) XkbMouseKeysMask ok ok (1L<<4) XkbMouseKeysAccelMask ok ok (1L<<5) XkbAccessXKeysMask ok ok (1L<<6) XkbAccessXTimeoutMask ok ok (1L<<7) XkbAccessXFeedbackMask ok ok (1L<<8) XkbAudibleBellMask ok (1L<<9) XkbOverlay1Mask ok (1L<<10) XkbOverlay2Mask ok (1L<<11) XkbIgnoreGroupLockMask ok (1L<<12) XkbGroupsWrapMask ok (1L<<27) XkbInternalModsMask ok (1L<<28) XkbIgnoreLockModsMask ok (1L<<29) XkbPerKeyRepeatMask ok (1L<<30) XkbControlsEnabledMask ok (1L<<31) XkbAccessXOptionsMask ok ok (XkbStickyKeysMask | XkbAccessXFeedbackMask) XkbAllBooleanCtrlsMask ok (0x00001FFF) XkbAllControlsMask ok (0xF8001FFF) .TE If .I xkb->ctrls is NULL, the server does not support a compatible version of Xkb, or the Xkb extension has not been properly initialized, .I XkbSetControls returns False. Otherwise, it sends the request to the X server and returns True. Note that changes to attributes of controls in the XkbControlsRec structure are apparent only when the associated control is enabled, although the corresponding values are still updated in the X server. For example, the .I repeat_delay and .I repeat_interval fields are ignored unless the RepeatKeys control is enabled (that is, the X server's equivalent of .I xkb->ctrls has XkbRepeatKeyMask set in .I enabled_ctrls). It is permissible to modify the attributes of a control in one call to .I XkbSetControls and enable the control in a subsequent call. See .I XkbChangeEnabledControls for more information on enabling and disabling controls. Note that the .I enabled_ctrls field is itself a control - the EnabledControls control. As such, to set a specific configuration of enabled and disabled boolean controls, you must set .I enabled_ctrls to the appropriate bits to enable only the controls you want and disable all others, then specify the XkbControlsEnabledMask in a call to .I XkbSetControls. Because this is somewhat awkward if all you want to do is enable and disable controls, and not modify any of their attributes, a convenience function is also provided for this purpose, .I XkbChangeEnabledControls. .SH "RETURN VALUES" .TP 15 True The .I XkbSetControls function returns True when it sends the request to the X server. .TP 15 False The .I XkbSetControls function returns False when .I xkb->ctrls is NULL, the server does not support a compatible version of Xkb, or the Xkb extension has not been properly initialized. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadMatch A compatible version of Xkb was not available in the server or an argument has correct type and range, but is otherwise invalid .SH "SEE ALSO" .BR XkbChangeEnabledControls (__libmansuffix__), .BR XkbFreeControls (__libmansuffix__) libX11-1.6.3/man/xkb/XkbSAGroup.man000064401431060000012000000040741247741723500171040ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbSAGroup __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbSAGroup \- Returns the group_XXX field of act converted to a signed int .SH SYNOPSIS .HP .B int XkbSAGroup .BI "(\^XkbAction " "act" "\^);" .SH ARGUMENTS .TP .I \- act action from which to extract group .SH DESCRIPTION .LP .I XkbSAGroup returns the .I group_XXX field of .I act converted to a signed int. .SH STRUCTURE .LP Actions associated with the XkbGroupAction structure change the current group state when keys are pressed and released: .nf .ft CW typedef struct _XkbGroupAction { unsigned char type; /\(** XkbSA_{Set|Latch|Lock}Group */ unsigned char flags; /\(** with type, controls the effect on groups */ char group_XXX; /\(** represents a group index or delta */ } XkbGroupAction; .ft .fi .SH WARNING .LP This manpage seems to be incomplete libX11-1.6.3/man/xkb/XkbSetDetectableAutoRepeat.man000064401431060000012000000104051247741723500222610ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbSetDetectableAutoRepeat __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbSetDetectableAutoRepeat \- Sets DetectableAutoRepeat .SH SYNOPSIS .HP .B Bool XkbSetDetectableAutoRepeat .BI "(\^Display *" "display" "\^," .BI "Bool " "detectable" "\^," .BI "Bool *" "supported_rtrn" "\^);" .SH ARGUMENTS .TP .I \- display connection to X server .TP .I \- detectable True => set DetectableAutoRepeat .TP .I \- supported_rtrn backfilled True if DetectableAutoRepeat supported .SH DESCRIPTION .LP Auto-repeat is the generation of multiple key events by a keyboard when the user presses a key and holds it down. Keyboard hardware and device-dependent X server software often implement auto-repeat by generating multiple KeyPress events with no intervening KeyRelease event. The standard behavior of the X server is to generate a KeyRelease event for every KeyPress event. If the keyboard hardware and device-dependent software of the X server implement auto-repeat by generating multiple KeyPress events, the device-independent part of the X server by default synthetically generates a KeyRelease event after each KeyPress event. This provides predictable behavior for X clients, but does not allow those clients to detect the fact that a key is auto-repeating. Xkb allows clients to request .I detectable auto-repeat. If a client requests and the server supports DetectableAutoRepeat, Xkb generates KeyRelease events only when the key is physically released. If DetectableAutoRepeat is not supported or has not been requested, the server synthesizes a KeyRelease event for each repeating KeyPress event it generates. DetectableAutoRepeat, unlike other controls, is not contained in the XkbControlsRec structure, nor can it be enabled or disabled via the EnabledControls control. Instead, query and set DetectableAutoRepeat using .I XkbGetDetectableAutoRepeat and .I XkbSetDetectableAutoRepeat. DetectableAutoRepeat is a condition that applies to all keyboard devices for a client's connection to a given X server; it cannot be selectively set for some devices and not for others. For this reason, none of the Xkb library functions involving DetectableAutoRepeat involve a device specifier. This request affects all keyboard activity for the requesting client only; other clients still see the expected nondetectable auto-repeat behavior, unless they have requested otherwise. .I XkbSetDetectableAutoRepeat sends a request to the server to set DetectableAutoRepeat on for the current client if .I detectable is True, and off if .I detectable is False; it then waits for a reply. If .I supported_rtrn is not NULL, .I XkbSetDetectableAutoRepeat backfills .I supported_rtrn with True if the server supports DetectableAutoRepeat, and False if it does not. .I XkbSetDetectableAutoRepeat returns the current state of DetectableAutoRepeat for the requesting client: True if DetectableAutoRepeat is set, and False otherwise. .SH "RETURN VALUES" .TP 15 True The .I XkbSetDetectableAutoRepeat function returns True if DetectableAutoRepeat is set. .TP 15 False The .I XkbSetDetectableAutoRepeat function returns False if DetectableAutoRepeat is not set. libX11-1.6.3/man/xkb/XkbTranslateKeyCode.man000064401431060000012000000052231247741723500207620ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbTranslateKeyCode __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbTranslateKeyCode \- Translate a keycode to a key symbol and modifiers .SH SYNOPSIS .HP .B Bool XkbTranslateKeyCode .BI "(\^XkbDescPtr " "xkb" "\^," .BI "KeyCode " "key" "\^," .BI "unsigned int " "mods" "\^," .BI "unsigned int *" "mods_rtrn" "\^," .BI "KeySym *" "keysym_rtrn" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb keyboard description to use for translation .TP .I \- key keycode to translate .TP .I \- mods modifiers to apply when translating key .TP .I \- mods_rtrn backfilled with consumed modifiers .TP .I \- keysym_rtrn keysym resulting from translation .SH DESCRIPTION .LP .I mods_rtrn is backfilled with the modifiers consumed by the translation process. .I mods is a bitwise inclusive OR of the legal modifier masks: ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask, Mod3Mask, Mod4Mask, Mod5Mask.The AlwaysConsumeShiftAndLock library control (see below), if enabled, causes .I XkbTranslateKeyCode to consume shift and lock. .I XkbTranslateKeyCode returns True if the translation resulted in a keysym, and False if it resulted in NoSymbol. The AlwaysConsumeShiftAndLock control, if enabled, forces .I XLookupString to consume the Shift and Lock modifiers when processing all keys, even if the definition for the key type does not specify these modifiers. The AlwaysConsumeShiftAndLock control is unset by default. .SH "SEE ALSO" .BR XLookupString (__libmansuffix__) libX11-1.6.3/man/xkb/XkbAddGeomKeyAlias.man000064401431060000012000000062131247741723500205040ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAddGeomKeyAlias __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAddGeomKeyAlias \- Add one key alias to an existing keyboard geometry description .SH SYNOPSIS .HP .B XkbKeyAliasPtr XkbAddGeomKeyAlias .BI "(\^XkbGeometryPtr " "geom" "\^," .BI "char *" "alias" "\^," .BI "char *" "real" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- geom geometry to be updated .TP .I \- alias alias to be added .TP .I \- real real name to be bound to the new alias .SH DESCRIPTION .LP Xkb provides functions to add a single new element to the top-level keyboard geometry. In each case the .I num_ * fields of the corresponding structure is incremented by 1. These functions do not change .I sz_* unless there is no more room in the array. Some of these functions fill in the values of the element's structure from the arguments. For other functions, you must explicitly write code to fill the structure's elements. The top-level geometry description includes a list of .I geometry properties. A geometry property associates an arbitrary string with an equally arbitrary name. Programs that display images of keyboards can use geometry properties as hints, but they are not interpreted by Xkb. No other geometry structures refer to geometry properties. .I XkbAddGeomKeyAlias adds one key alias with the value .I alias to the geometry .I geom, and associates it with the key whose real name is .I real. XkbAddGeomKeyAlias returns NULL if any of the parameters is empty or if it was not able to allocate space for the alias. To allocate space for an arbitrary number of aliases, use the .I XkbAllocGeomKeyAliases function. .SH STRUCTURES .LP .nf typedef struct { char real[XkbKeyNameLength]; /\(** this key name must be in the keys array */ char alias[XkbKeyNameLength]; /\(** symbolic key name as alias for the key */ } XkbKeyAliasRec,*XkbKeyAliasPtr; .fi .SH "SEE ALSO" .BR XkbAllocGeomKeyAliases (__libmansuffix__) l copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER .\"libX11-1.6.3/man/xkb/XkbSetNamedIndicator.man000064401431060000012000000073401247741723500211200ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbSetNamedIndicator __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbSetNamedIndicator \- Names an indicator if it is not already named; toggles the state of the indicator; sets the indicator to a specified state and sets the indicator map for the indicator .SH SYNOPSIS .HP .B Bool XkbSetNamedIndicator .BI "(\^Display *" "dpy" "\^," .BI "unsigned int " "device_spec" "\^," .BI "Atom " "name" "\^," .BI "Bool " "change_state" "\^," .BI "Bool " "state" "\^," .BI "Bool " "create_new" "\^," .BI "XkbIndicatorMapPtr " "map" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to the X server .TP .I \- device_spec device ID, or XkbUseCoreKbd .TP .I \- name name of the indicator to change .TP .I \- change_state whether to change the indicator state or not .TP .I \- state desired new state for the indicator .TP .I \- create_new whether a new indicator with the specified name should be created when necessary .TP .I \- map new map for the indicator .SH DESCRIPTION .LP If a compatible version of the Xkb extension is not available in the server, .I XkbSetNamedIndicator returns False. Otherwise, it sends a request to the X server to change the indicator specified by .I name and returns True. If .I change_state is True, and the optional parameter, .I state, is not NULL, .I XkbSetNamedIndicator tells the server to change the state of the named indicator to the value specified by .I state. If an indicator with the name specified by .I name does not already exist, the .I create_new parameter tells the server whether it should create a new named indicator. If .I create_new is True, the server finds the first indicator that doesn't have a name and gives it the name specified by .I name. If the optional parameter, .I map, is not NULL, .I XkbSetNamedIndicator tells the server to change the indicator's map to the values specified in .I map. In addition, it can also generate XkbIndicatorStateNotify, XkbIndicatorMapNotify, and XkbNamesNotify events. .SH "RETURN VALUES" .TP 15 True The .I XkbSetNamedIndicator function returns True if a compatible version of the Xkb extension is available in the server. .TP 15 False The .I XkbSetNamedIndicator function returns False if a compatible version of the Xkb extension is not available in the server. .SH DIAGNOSTICS .TP 15 .B BadAtom A name is neither a valid Atom or None .TP 15 .B BadImplementation Invalid reply from server .SH "SEE ALSO" .BR XkbIndicatorMapNotify (__libmansuffix__), .BR XkbIndicatorStateNotify (__libmansuffix__), .BR XkbNamesNotify (__libmansuffix__) libX11-1.6.3/man/xkb/XkbBell.man000064401431060000012000000243761247741723500164510ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbBell __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbBell \- Rings the bell on the default keyboard .SH SYNOPSIS .HP .B Bool XkbBell .BI "(\^Display *" "display" "\^," .BI "Window " "window" "\^," .BI "int " "percent" "\^," .BI "Atom " "name" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- display connection to the X server .TP .I \- window event window, or None .TP .I \- percent relative volume, which can range from -100 to 100 inclusive .TP .I \- name a bell name, or NULL .SH DESCRIPTION .LP The core X protocol allows only applications to explicitly sound the system bell with a given duration, pitch, and volume. Xkb extends this capability by allowing clients to attach symbolic names to bells, disable audible bells, and receive an event whenever the keyboard bell is rung. For the purposes of this document, the .I audible bell is defined to be the system bell, or the default keyboard bell, as opposed to any other audible sound generated elsewhere in the system. You can ask to receive XkbBellNotify events when any client rings any one of the following: .IP \(bu 5 The default bell .IP \(bu 5 Any bell on an input device that can be specified by a bell_class and bell_id pair .IP \(bu 5 Any bell specified only by an arbitrary name. (This is, from the server's point of view, merely a name, and not connected with any physical sound-generating device. Some client application must generate the sound, or visual feedback, if any, that is associated with the name.) .LP You can also ask to receive XkbBellNotify events when the server rings the default bell or if any client has requested events only (without the bell sounding) for any of the bell types previously listed. You can disable audible bells on a global basis. For example, a client that replaces the keyboard bell with some other audible cue might want to turn off the AudibleBell control to prevent the server from also generating a sound and avoid cacophony. If you disable audible bells and request to receive XkbBellNotify events, you can generate feedback different from the default bell. You can, however, override the AudibleBell control by calling one of the functions that force the ringing of a bell in spite of the setting of the AudibleBell control - .I XkbForceDeviceBell or .I XkbForceBell. In this case the server does not generate a bell event. Just as some keyboards can produce keyclicks to indicate when a key is pressed or repeating, Xkb can provide feedback for the controls by using special beep codes. The AccessXFeedback control is used to configure the specific types of operations that generate feedback. Bell Names You can associate a name to an act of ringing a bell by converting the name to an Atom and then using this name when you call the functions listed in this chapter. If an event is generated as a result, the name is then passed to all other clients interested in receiving XkbBellNotify events. Note that these are arbitrary names and that there is no binding to any sounds. Any sounds or other effects (such as visual bells on the screen) must be generated by a client application upon receipt of the bell event containing the name. There is no default name for the default keyboard bell. The server does generate some predefined bells for the AccessX controls. These named bells are shown in Table 1 below; the name is included in any bell event sent to clients that have requested to receive XkbBellNotify events. .TS c s l l lW(4I) l. Table 1 Predefined Bells _ Action Named Bell _ Indicator turned on AX_IndicatorOn Indicator turned off AX_IndicatorOff More than one indicator changed state AX_IndicatorChange Control turned on AX_FeatureOn Control turned off AX_FeatureOff More than one control changed state AX_FeatureChange T{ SlowKeys and BounceKeys about to be turned on or off T} AX_SlowKeysWarning SlowKeys key pressed AX_SlowKeyPress SlowKeys key accepted AX_SlowKeyAccept SlowKeys key rejected AX_SlowKeyReject Accepted SlowKeys key released AX_SlowKeyRelease BounceKeys key rejected AX_BounceKeyReject StickyKeys key latched AX_StickyLatch StickyKeys key locked AX_StickyLock StickyKeys key unlocked AX_StickyUnlock .TE Audible Bells Using Xkb you can generate bell events that do not necessarily ring the system bell. This is useful if you need to use an audio server instead of the system beep. For example, when an audio client starts, it could disable the audible bell (the system bell) and then listen for XkbBellNotify events. When it receives a XkbBellNotify event, the audio client could then send a request to an audio server to play a sound. You can control the audible bells feature by passing the XkbAudibleBellMask to .I XkbChangeEnabledControls. If you set XkbAudibleBellMask on, the server rings the system bell when a bell event occurs. This is the default. If you set XkbAudibleBellMask off and a bell event occurs, the server does not ring the system bell unless you call .I XkbForceDeviceBell or .I XkbForceBell. Audible bells are also part of the per-client auto-reset controls. Bell Functions Use the functions described in this section to ring bells and to generate bell events. The input extension has two types of feedbacks that can generate bells - bell feedback and keyboard feedback. Some of the functions in this section have .I bell_class and .I bell_id parameters; set them as follows: Set .I bell_class to BellFeedbackClass or KbdFeedbackClass. A device can have more than one feedback of each type; set .I bell_id to the particular bell feedback of .I bell_class type. Table 2 shows the conditions that cause a bell to sound or an XkbBellNotifyEvent to be generated when a bell function is called. .TS c s s s l l l l l l l l. Table 2 Bell Sounding and Bell Event Generating _ Function called AudibleBell Server sounds a bell Server sends an XkbBellNotifyEvent _ XkbDeviceBell On Yes Yes XkbDeviceBell Off No Yes XkbBell On Yes Yes XkbBell Off No Yes XkbDeviceBellEvent On or Off No Yes XkbBellEvent On or Off No Yes XkbDeviceForceBell On or Off Yes No XkbForceBell On or Off Yes No .TE If a compatible keyboard extension isn't present in the X server, .I XkbBell calls .I XBell with the specified .I display and .I percent, and returns False. Otherwise, .I XkbBell calls .I XkbDeviceBell with the specified .I display, window, percent, and .I name, a .I device_spec of XkbUseCoreKbd, a .I bell_class of XkbDfltXIClass, and a .I bell_id of XkbDfltXIId, and returns True. If you have disabled the audible bell, the server does not ring the system bell, although it does generate a XkbBellNotify event. You can call .I XkbBell without first initializing the keyboard extension. .SH "RETURN VALUES" .TP 15 FALSE The XkbBell function returns FALSE if XlibDisplayNoXkb is set. .SH STRUCTURES .LP Xkb generates XkbBellNotify events for all bells except for those resulting from calls to .I XkbForceDeviceBell and .I XkbForceBell. To receive XkbBellNotify events under all possible conditions, pass XkbBellNotifyMask in both the .I bits_to_change and .I values_for_bits parameters to .I XkbSelectEvents. The XkbBellNotify event has no event details. It is either selected or it is not. However, you can call .I XkbSelectEventDetails using XkbBellNotify as the .I event_type and specifying XkbAllBellNotifyMask in .I bits_to_change and .I values_for_bits. This has the same effect as a call to .I XkbSelectEvents. The structure for the XkbBellNotify event type contains: .nf typedef struct _XkbBellNotify { int type; /\(** Xkb extension base event code */ unsigned long serial; /\(** X server serial number for event */ Bool send_event; /\(** True => synthetically generated */ Display * display; /\(** server connection where event generated */ Time time; /\(** server time when event generated */ int xkb_type; /\(** XkbBellNotify */ unsigned int device; /\(** Xkb device ID, will not be XkbUseCoreKbd */ int percent; /\(** requested volume as % of max */ int pitch; /\(** requested pitch in Hz */ int duration; /\(** requested duration in microseconds */ unsigned int bell_class; /\(** X input extension feedback class */ unsigned int bell_id; /\(** X input extension feedback ID */ Atom name; /\(** "name" of requested bell */ Window window; /\(** window associated with event */ Bool event_only; /\(** False -> the server did not produce a beep */ } XkbBellNotifyEvent; .fi If your application needs to generate visual bell feedback on the screen when it receives a bell event, use the window ID in the XkbBellNotifyEvent, if present. .SH "SEE ALSO" .BR XBell (__libmansuffix__), .BR XkbBellNotify (__libmansuffix__), .BR XkbChangeEnabledControls (__libmansuffix__), .BR XkbDeviceBell (__libmansuffix__), .BR XkbForceBell (__libmansuffix__), .BR XkbForceDeviceBell (__libmansuffix__), .BR XkbUseCoreKbd (__libmansuffix__) libX11-1.6.3/man/xkb/XkbCopyKeyTypes.man000064401431060000012000000070711247741723500201740ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbCopyKeyTypes __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbCopyKeyTypes \- Copy more than one XkbKeyTypeRec structure .SH SYNOPSIS .HP .B Status XkbCopyKeyTypes .BI "(\^XkbKeyTypePtr " "from" "\^," .BI "XkbKeyTypePtr " "into" "\^," .BI "int " "num_types" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- from pointer to array of XkbKeyTypeRecs to copy .TP .I \- into pointer to array of XkbKeyTypeRecs to change .TP .I \- num_types number of types to copy .SH DESCRIPTION .LP .I XkbCopyKeyTypes copies .I num_types XkbKeyTypeRec structures from the array specified by .I from into the array specified by .I into. It is intended for copying between, rather than within, keyboard descriptions, so it doesn't check for overlaps. The same rules that apply to the .I from and .I into parameters in .I XkbCopyKeyType apply to each entry of the .I from and .I into arrays of .I XkbCopyKeyTypes. If any allocation errors occur while copying .I from to .I into, XkbCopyKeyTypes returns BadAlloc. Otherwise, .I XkbCopyKeyTypes copies .I from to .I into and returns Success. .SH "RETURN VALUES" .TP 15 Success The XkbCopyKeyTypes function returns Success when there are no allocation errors. .SH STRUCTURES .LP Key types are used to determine the shift level of a key given the current state of the keyboard. The set of all possible key types for the Xkb keyboard description are held in the .I types field of the client map, whose total size is stored in .I size_types, and whose total number of valid entries is stored in .I num_types. Key types are defined using the following structure: .nf typedef struct { /\(** Key Type */ XkbModsRec mods; /\(** modifiers used to compute shift level */ unsigned char num_levels; /\(** total # shift levels, do not modify directly */ unsigned char map_count; /\(** # entries in map, preserve (if non-NULL) */ XkbKTMapEntryPtr map; /\(** vector of modifiers for each shift level */ XkbModsPtr preserve; /\(** mods to preserve for corresponding map entry */ Atom name; /\(** name of key type */ Atom * level_names; /\(** array of names of each shift level */ } XkbKeyTypeRec, *XkbKeyTypePtr; .fi .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .SH "SEE ALSO" .BR XkbCopyKeyType (__libmansuffix__) this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER .\"libX11-1.6.3/man/xkb/XkbGetKeyTypes.man000064401431060000012000000051401247741723500177740ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbGetKeyTypes __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbGetKeyTypes \- Obtain the list of available key types in the server's keyboard mapping .SH SYNOPSIS .HP .B Status XkbGetKeyTypes .BI "(\^Display *" "dpy" "\^," .BI "unsigned int " "first" "\^," .BI "unsigned int " "num" "\^," .BI "XkbDescPtr " "xkb" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to X server .TP .I \- first index to first type to get, 0 => 1st type .TP .I \- num number of key types to be returned .TP .I \- xkb keyboard description containing client map to update .SH DESCRIPTION .LP .I XkbGetKeyTypes queries the server for the desired types, waits for a reply, and returns the desired types in the .I xkb->map->types. If successful, it returns Success. .I XkbGetKeyTypes returns BadAccess if the Xkb extension has not been properly initialized and BadValue if the combination of .I first and .I num results in numbers out of valid range. .B NOTE: .I XkbGetKeyTypes is used to obtain descriptions of the key types themselves, not the key types bound to individual keys. To obtain the key types bound to an individual key, refer to the .I key_sym_map field of the client map. .SH DIAGNOSTICS .TP 15 .B BadAccess The Xkb extension has not been properly initialized .TP 15 .B BadValue An argument is out of range .SH "SEE ALSO" .BR XkbKeyType (__libmansuffix__), .BR XkbKeyTypeIndex (__libmansuffix__) libX11-1.6.3/man/xkb/XkbGetXlibControls.man000064401431060000012000000042641247741723500206470ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbGetXlibControls __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbGetXlibControls \- Determines the current state of the Library Controls .SH SYNOPSIS .HP .B unsigned int XkbGetXlibControls .BI "(\^Display *" "display" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- display connection to X server .SH DESCRIPTION .LP .I XkbGetXlibControls returns the current state of the Library Controls as a bit mask that is an inclusive OR of the control masks from Table 1 for the controls that are enabled. For the optional compose processing controls, the fact that a control is enabled does not imply that it is actually implemented. .TS c s l l l l. Table 1 Library Control Masks _ Library Control Mask Value _ XkbLC_ForceLatin1Lookup (1 << 0) XkbLC_ConsumeLookupMods (1 << 1) XkbLC_AlwaysConsumeShiftAndLock (1 << 2) XkbLC_IgnoreNewKeyboards (1 << 3) XkbLC_ConsumeKeysOnComposeFail (1 << 29) XkbLC_ComposeLED (1 << 30) XkbLC_BeepOnComposeFail (1 << 31) XkbLC_AllControls (0xc0000007) .TE libX11-1.6.3/man/xkb/XkbGetBounceKeysDelay.man000064401431060000012000000143201247741723500212450ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbGetBounceKeysDelay __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbGetBounceKeysDelay \- Queries the current BounceKeys delay for a keyboard device. .SH SYNOPSIS .HP .B Bool XkbGetBounceKeysDelay .BI "(\^Display *" "display" "\^," .BI "unsigned int " "device_spec" "\^," .BI "unsigned int *" "delay_rtrn" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- display connection to X server .TP .I \- device_spec device ID, or XkbUseCoreKbd .TP .I \- delay_rtrn backfilled with bounce keys delay, ms .SH DESCRIPTION .LP The server can generate XkbAccessXNotify events for some of the global keyboard controls. The detail field describes what AccessX event just occurred and can be any of the values in Table 1. .TS c s l l l lw(4i). Table 1 AccessXNotify Events _ detail Reason _ XkbAXN_SKPress T{ A key was pressed when SlowKeys was enabled. T} XkbAXN_SKAccept T{ A key was accepted (held longer than the SlowKeys delay). T} XkbAXN_SKRelease T{ An accepted SlowKeys key was released. T} XkbAXN_SKReject T{ A key was rejected (released before the SlowKeys delay expired). T} XkbAXN_BKAccept T{ A key was accepted by BounceKeys. T} XkbAXN_BKReject T{ A key was rejected (pressed before the BounceKeys delay expired). T} XkbAXN_AXKWarning T{ AccessXKeys is about to turn on/off StickyKeys or BounceKeys. T} .TE The .I keycode field reports the keycode of the key for which the event occurred. If the action is related to .I SlowKeys, the .I slowKeysDelay field contains the current SlowKeys acceptance delay. If the action is related to BounceKeys, the .I debounceDelay field contains the current BounceKeys debounce delay. Selecting for AccessX Events To receive XkbAccessXNotify events under all possible conditions, use .I XkbSelectEvents and pass XkbAccesXNotifyMask in both .I bits_to_change and .I values_for_bits. To receive XkbStateNotify events only under certain conditions, use .I XkbSelectEventDetails using XkbAccessXNotify as the .I event_type and specifying the desired state changes in .I bits_to_change and .I values_for_bits using mask bits from Table 2. .TS c s s l l l l l lw(3i). Table 2 AccessXNotify Event Details _ XkbAccessXNotify Event Details Value Circumstances _ XkbAXN_SKPressMask (1<<0) T{ Slow key press notification wanted T} XkbAXN_SKAcceptMask (1<<1) T{ Slow key accept notification wanted T} XkbAXN_SKRejectMask (1<<2) T{ Slow key reject notification wanted T} XkbAXN_SKReleaseMask (1<<3) T{ Slow key release notification wanted T} XkbAXN_BKAcceptMask (1<<4) T{ Bounce key accept notification wanted T} XkbAXN_BKRejectMask (1<<5) T{ Bounce key reject notification wanted T} XkbAXN_AXKWarningMask (1<<6) T{ AccessX warning notification wanted T} XkbAllAccessXEventsMask (0x7f) T{ All AccessX features notifications wanted T} .TE Some users may accidentally "bounce" on a key when they release it. They press it once, then accidentally press it again after they release it. The BounceKeys control temporarily disables a key after it has been pressed, effectively "debouncing" the keyboard. The period of time the key is disabled after it is released is known as the .I BounceKeys delay. BounceKeys is a boolean control. When the BounceKeys control is active, the server reports acceptance or rejection of any key to interested clients by sending an appropriate AccessXNotify event (see STRUCTURES). .I XkbGetBounceKeysDelay requests the attributes of the BounceKeys control from the server, waits for a reply, and backfills .I delay_rtrn with the BounceKeys delay attribute. .I XkbGetBounceKeysDelay returns True if successful; if a compatible version of the Xkb extension is not available in the server .I XkbGetSlowKeysDelay returns False. .SH "RETURN VALUES" .TP 15 True The .I XkbGetBounceKeysDelay function returns True when it successfully requests the attributes of the BounceKeys control from the server, waits for a reply, and backfills .I delay_rtrn with the BounceKeys delay attribute. .TP 15 False The .I XkbGetBounceKeysDelay function returns False if a compatible version of the Xkb extension is not available in the server. .SH STRUCTURES .LP The structure for the XkbAccessXNotify event type is as follows: .nf typedef struct { int type; /\(** Xkb extension base event code */ unsigned long serial; /\(** X server serial number for event */ Bool send_event; /\(** True => synthetically generated */ Display * display; /\(** server connection where event generated */ Time time; /\(** server time when event generated */ int xkb_type; /\(** XkbAccessXNotify */ int device; /\(** Xkb device ID, will not be XkbUseCoreKbd */ int detail; /\(** XkbAXN_* */ KeyCode keycode; /\(** key of event */ int slowKeysDelay; /\(** current SlowKeys delay */ int debounceDelay; /\(** current debounce delay */ } XkbAccessXNotifyEvent; .fi .SH "SEE ALSO" .BR XkbGetSlowKeysDelay (__libmansuffix__) libX11-1.6.3/man/xkb/XkbSASetPtrDfltValue.man000064401431060000012000000065731247741723500210460ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbSASetPtrDfltValue __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbSASetPtrDfltValue \- Sets the valueXXX field of act from val .SH SYNOPSIS .HP .B void XkbSASetPtrDfltValue .BI "(\^XkbAction " "act" "\^," .BI "int " "val" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- act action in which to set valueXXX .TP .I \- val value to set in valueXXX .SH DESCRIPTION .LP Actions associated with the XkbPtrDfltAction structure change the mk_dflt_btn attribute of the MouseKeys control. If the MouseKeys control is not enabled, KeyPress and KeyRelease events are treated as though the action is XkbSA_NoAction. Otherwise, this action changes the .I mk_dflt_btn attribute of the MouseKeys control. The .I type field of the XkbPtrDfltAction structure should always be XkbSA_SetPtrDflt. The .I flags field is composed of the bitwise inclusive OR of the values shown in Table 1 (currently there is only one value defined). .TS c s l l l lw(4i). Table 1 Pointer Default Flags _ Flag Meaning _ XkbSA_DfltBtnAbsolute T{ If set, the value field represents an absolute pointer button. Otherwise, the value field represents the amount to be added to the current default button. T} .TE The .I affect field specifies what changes as a result of this action. The only valid value for the .I affect field is XkbSA_AffectDfltBtn. The .I valueXXX field is a signed character that represents the new button value for the .I mk_dflt_btn attribute of the MouseKeys control. If XkbSA_DfltBtnAbsolute is set in .I flags, valueXXX specifies the button to be used; otherwise, .I valueXXX specifies the amount to be added to the current default button. In either case, illegal button choices are wrapped back around into range. Xkb provides macros, to convert between the integer and signed character values in XkbPtrDfltAction structures. .SH STRUCTURES .LP .nf typedef struct _XkbPtrDfltAction { unsigned char type; /\(** XkbSA_SetPtrDflt */ unsigned char flags; /\(** controls the pointer button number */ unsigned char affect; /\(** XkbSA_AffectDfltBtn */ char valueXXX; /\(** new default button member */ } XkbPtrDfltAction; .fi libX11-1.6.3/man/xkb/XkbFreeGeomKeys.man000064401431060000012000000035461247741723500201140ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbFreeGeomKeys __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbFreeGeomKeys \- Free geometry keys .SH SYNOPSIS .HP .B void XkbFreeGeomKeys .BI "(\^XkbRowPtr " "row" "\^," .BI "int " "first" "\^," .BI "int " "count" "\^," .BI "Bool " "free_all" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- row row in which keys should be freed .TP .I \- first first key to be freed .TP .I \- count number of keys to be freed .TP .I \- free_all True => all keys are freed .SH DESCRIPTION .LP If .I free_all is True, all keys are freed regardless of the value of .I first or .I count. Otherwise, .I count keys are freed beginning with the one specified by .I first. ITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER .\"libX11-1.6.3/man/xkb/XkbFreeGeomPoints.man000064401431060000012000000054451247741723500204550ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbFreeGeomPoints __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbFreeGeomPoints \- Free points in a outline .SH SYNOPSIS .HP .B void XkbFreeGeomPoints .BI "(\^XkbOutlinePtr " "outline" "\^," .BI "int " "first" "\^," .BI "int " "count" "\^," .BI "Bool " "free_all" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- outline outline in which points should be freed .TP .I \- first first point to be freed .TP .I \- count number of points to be freed .TP .I \- free_all True => all points are freed .SH DESCRIPTION .LP Xkb provides a number of functions to allocate and free subcomponents of a keyboard geometry. Use these functions to create or modify keyboard geometries. Note that these functions merely allocate space for the new element(s), and it is up to you to fill in the values explicitly in your code. These allocation functions increase .I sz_* but never touch .I num_* (unless there is an allocation failure, in which case they reset both .I sz_* and .I num_* to zero). These functions return Success if they succeed, BadAlloc if they are not able to allocate space, or BadValue if a parameter is not as expected. If .I free_all is True, all points are freed regardless of the value of >i first and .I count. Otherwise, the number of points specified by .I count are freed, beginning with the point specified by .I first in the specified outline. .SH "RETURN VALUES" .TP 15 Success The XkbFreeGeomPoints function returns Success when there are no allocation or argument errors. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadValue An argument is out of range libX11-1.6.3/man/xkb/XkbSAScreen.man000064401431060000012000000064471247741723500172350ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbSAScreen __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbSAScreen \- Returns the screenXXX field of act converted to a signed int .SH SYNOPSIS .HP .B int XkbSAScreen .BI "(\^XkbSwitchScreenAction " "act" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- act action from which to extract screen .SH DESCRIPTION .LP Actions associated with the XkbSwitchScreen action structure change the active screen on a multiscreen display. The .I type field of the XkbSwitchScreenAction structure should always be XkbSA_SwitchScreen. The .I flags field is composed of the bitwise inclusive OR of the masks shown in Table 1. .TS c s l l l lw(4i). Table 1 Switch Screen Action Flags _ Flag Meaning _ XkbSA_SwitchAbsolute T{ If set, the screenXXX field represents the index of the new screen. Otherwise, it represents an offset from the current screen to the new screen. T} XkbSA_SwitchApplication T{ If not set, the action should switch to another screen on the same server. Otherwise, it should switch to another X server or application that shares the same physical display. T} .TE The .I screenXXX field is a signed character value that represents either the relative or absolute screen index, depending on the state of the XkbSA_SwitchAbsolute bit in the .I flags field. Xkb provides the following macros to convert between the integer and signed character value for screen numbers in XkbSwitchScreenAction structures. .I XkbSAScreen macro returns the .I screenXXX field of .I act converted to a signed int. .SH STRUCTURES .LP .nf typedef struct _XkbSwitchScreenAction { unsigned char type; /\(** XkbSA_SwitchScreen */ unsigned char flags; /\(** controls screen switching */ char screenXXX; /\(** screen number or delta */ } XkbSwitchScreenAction; .fi .SH NOTES .LP The XkbSwitchScreen action is optional. Servers are free to ignore the action or any of its flags if they do not support the requested behavior. If the action is ignored, it behaves like XkbSA_NoAction. Otherwise, key press and key release events do not generate an event. libX11-1.6.3/man/xkb/XkbAddGeomShape.man000064401431060000012000000073261247741723500200500ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAddGeomShape __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAddGeomShape \- Add a shape to a keyboard geometry .SH SYNOPSIS .HP .B XkbShapePtr XkbAddGeomShape .BI "(\^XkbGeometryPtr " "geom" "\^," .BI "Atom " "name" "\^," .BI "int " "sz_outlines" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- geom geometry to be updated .TP .I \- name name of the new shape .TP .I \- sz_outlines number of outlines to be reserved .SH DESCRIPTION .LP Xkb provides functions to add a single new element to the top-level keyboard geometry. In each case the .I num_ * fields of the corresponding structure is incremented by 1. These functions do not change .I sz_* unless there is no more room in the array. Some of these functions fill in the values of the element's structure from the arguments. For other functions, you must explicitly write code to fill the structure's elements. The top-level geometry description includes a list of .I geometry properties. A geometry property associates an arbitrary string with an equally arbitrary name. Programs that display images of keyboards can use geometry properties as hints, but they are not interpreted by Xkb. No other geometry structures refer to geometry properties. A geometry contains an arbitrary number of shapes, each of which is made up of an arbitrary number of outlines. .I XkbAddGeomShape adds a shape to a geometry .I geom by allocating space for .I sz_outlines outlines for it and giving it the name specified by .I name. If a shape with name .I name already exists in the geometry, a pointer to the existing shape is returned. .I XkbAddGeomShape returns NULL if any of the parameters is empty or if it was not able to allocate space. To allocate space for an arbitrary number of geometry shapes, use .I XkbAllocGeomShapes. .SH STRUCTURES .LP .nf typedef struct _XkbShape { Atom name; /\(** shape's name */ unsigned short num_outlines; /\(** number of outlines for the shape */ unsigned short sz_outlines; /\(** size of the outlines array */ XkbOutlinePtr outlines; /\(** array of outlines for the shape */ XkbOutlinePtr approx; /\(** pointer into the array to the approximating outline */ XkbOutlinePtr primary; /\(** pointer into the array to the primary outline */ XkbBoundsRec bounds; /\(** bounding box for the shape; encompasses all outlines */ } XkbShapeRec, *XkbShapePtr; .fi .SH "SEE ALSO" .BR XkbAllocGeomShapes (__libmansuffix__) libX11-1.6.3/man/xkb/XkbSARedirectVMods.man000064401431060000012000000102771247741723500205240ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbSARedirectVMods __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbSARedirectVMods \- Returns the vmods0 and vmods1 fields of act converted to an unsigned int .SH SYNOPSIS .HP .B unsigned int XkbSARedirectVMods .BI "(\^XkbRedirectKeyAction " "act" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- act action from which to extract vmods .SH DESCRIPTION .LP Actions associated with the XkbRedirectKeyAction structure generate KeyPress and KeyRelease events containing a keycode different from the key that was pressed or released. The .I type field for the XkbRedirectKeyAction structure should always be XkbSA_RedirectKey. Key presses cause a KeyPress event for the key specified by the .I new_key field instead of the actual key. The state reported in this event reports the current effective modifiers changed as follows: any real modifiers selected by the .I mods_mask field are set to corresponding values from the .I mods field. Any real modifiers bound to the virtual modifiers specified by the .I vmods_mask0 and .I vmods_mask1 fields are either set or cleared, depending on the corresponding values in the .I vmods0 and .I vmods1 fields. If the real and virtual modifier definitions specify conflicting values for a single modifier, the real modifier definition has priority. Key releases cause a KeyRelease event for the key specified by the .I new_key field instead of the actual key. The state for this event consists of the effective keyboard modifiers at the time of the release, changed as described previously. The XkbSA_RedirectKey action normally redirects to another key on the same device as the key that caused the event, unless that device does not belong to the input extension KeyClass, in which case this action causes an event on the core keyboard device. (The input extension categorizes devices by breaking them into classes. Keyboards, and other input devices with keys, are classified as KeyClass devices by the input extension.) The .I vmods_mask0 and .I vmods_mask1 fields actually represent one .I vmods_mask value. Xkb provides macros to convert between the two formats. .I XkbSARedirectVModsMask returns the .I vmods0 and .I vmods1 fields of .I act converted to an unsigned int. .SH STRUCTURES .LP .nf typedef struct_XkbRedirectKeyAction { unsigned char type; /\(** XkbSA_RedirectKey */ unsigned char new_key; /\(** keycode to be put in event */ unsigned char mods_mask; /\(** mask of real mods to be reset */ unsigned char mods; /\(** mask of real mods to take values from */ unsigned char vmods_mask0; /\(** first half of mask of virtual mods to be reset */ unsigned char vmods_mask1; /\(** other half of mask of virtual mods to be reset */ unsigned char vmods0; /\(** first half of mask of virtual mods to take values from */ unsigned char vmods1; /\(** other half of mask of virtual mods to take values from */ } XkbRedirectKeyAction; .fi libX11-1.6.3/man/xkb/XkbGetDeviceLedInfo.man000064401431060000012000000103161247741723500206600ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbGetDeviceLedInfo __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbGetDeviceLedInfo \- Query the indicator names, maps, and state associated with an LED feedback of an input extension device .SH SYNOPSIS .HP .B Status XkbGetDeviceLedInfo .BI "(\^Display *" "dpy" "\^," .BI "XkbDeviceInfoPtr " "device_info" "\^," .BI "unsigned int " "led_class" "\^," .BI "unsigned int " "led_id" "\^," .BI "unsigned int " "which" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to X server .TP .I \- device_info structure to update with results .TP .I \- led_class LED feedback class assigned by input extension .TP .I \- led_id LED feedback ID assigned by input extension .TP .I \- which mask indicating desired information .SH DESCRIPTION .LP .I XkbGetDeviceLedInfo queries the server for the desired LED information for the feedback specified by .I led_class and .I led_id for the X input extension device indicated by .I device_spec->device_info and waits for a reply. If successful, .I XkbGetDeviceLedInfo backfills the relevant fields of .I device_info as determined by .I which with the results and returns Success. Valid values for .I which are the inclusive OR of any of XkbXI_IndicatorNamesMask, XkbXI_IndicatorMapsMask, and XkbXI_IndicatorStateMask. The fields of .I device_info that are filled in when this request succeeds are .I name, type, supported, and .I unsupported, and portions of the .I leds structure corresponding to .I led_class and .I led_id as indicated by the bits set in .I which. The .I device_info->leds vector is allocated if necessary and .I sz_leds and .I num_leds filled in. The .I led_class, led_id and .I phys_indicators fields of the .I device_info->leds entry corresponding to .I led_class and .I led_id are always filled in. If .I which contains XkbXI_IndicatorNamesMask, the .I names_present and .I names fields of the .I device_info->leds structure corresponding to .I led_class and .I led_id are updated, if .I which contains XkbXI_IndicatorStateMask, the corresponding .I state field is updated, and if .I which contains XkbXI_IndicatorMapsMask, the .I maps_present and .I maps fields are updated. If a compatible version of Xkb is not available in the server or the Xkb extension has not been properly initialized, .I XkbGetDeviceLedInfo returns BadAccess. If allocation errors occur, a BadAlloc status is returned. If the device has no indicators, a BadMatch error is returned. If .I ledClass or .I ledID have illegal values, a BadValue error is returned. If they have legal values but do not specify a feedback that contains LEDs and is associated with the specified device, a BadMatch error is returned. .SH DIAGNOSTICS .TP 15 .B BadAccess The Xkb extension has not been properly initialized .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadMatch A compatible version of Xkb was not available in the server or an argument has correct type and range, but is otherwise invalid .TP 15 .B BadValue An argument is out of range libX11-1.6.3/man/xkb/XkbAddGeomRow.man000064401431060000012000000062431247741723500175540ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAddGeomRow __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAddGeomRow \- Add a row to a section .SH SYNOPSIS .HP .B XkbRowPtr XkbAddGeomRow .BI "(\^XkbSectionPtr " "section" "\^," .BI "int " "sz_keys" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- section section to be updated .TP .I \- sz_keys number of keys to be reserved .SH DESCRIPTION .LP Xkb provides functions to add a single new element to the top-level keyboard geometry. In each case the .I num_ * fields of the corresponding structure is incremented by 1. These functions do not change .I sz_* unless there is no more room in the array. Some of these functions fill in the values of the element's structure from the arguments. For other functions, you must explicitly write code to fill the structure's elements. The top-level geometry description includes a list of .I geometry properties. A geometry property associates an arbitrary string with an equally arbitrary name. Programs that display images of keyboards can use geometry properties as hints, but they are not interpreted by Xkb. No other geometry structures refer to geometry properties. One of the components of a keyboard geometry section is one or more rows of keys. .I XkbAddGeomRow adds one row to the specified .I section. The newly created row contains space for the number of keys specified in .I sz_keys. They are allocated and zeroed, but otherwise uninitialized. .I XkbAddGeomRow returns NULL if any of the parameters is empty or if it was not able to allocate space for the row. To allocate space for an arbitrary number of rows to a section, use the .I XkbAllocGeomRows function. .SH STRUCTURES .LP .nf typedef struct _XkbRow { short top; short left; unsigned short num_keys; unsigned short sz_keys; int vertical; XkbKeyPtr keys; XkbBoundsRec bounds; } XkbRowRec, *XkbRowPtr; .fi .SH "SEE ALSO" .BR XkbAllocGeomRows (__libmansuffix__) libX11-1.6.3/man/xkb/XkbLockModifiers.man000064401431060000012000000054411247741723500203150ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbLockModifiers __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbLockModifiers \- Locks and unlocks any of the eight real keyboard modifiers .SH SYNOPSIS .HP .B Bool XkbLockModifiers .BI "(\^Display *" "display" "\^," .BI "unsigned int " "device_spec" "\^," .BI "unsigned int " "affect" "\^," .BI "unsigned int " "values" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I display connection to the X server .TP .I device_spec device ID, or XkbUseCoreKbd .TP .I affect mask of real modifiers whose lock state is to change .TP .I values 1 => lock, 0 => unlock; only for modifiers selected by affect .SH DESCRIPTION .LP .I XkbLockModifiers sends a request to the server to lock the real modifiers selected by both .I affect and .I values and to unlock the real modifiers selected by .I affect, but not selected by .I values. XkbLockModifiers does not wait for a reply from the server. It returns True if the request was sent, and False otherwise. The functions in this section that change the use of modifiers use a mask in the parameter affect. It is a bitwise inclusive OR of the legal modifier masks: .TS c l l. Table 1 Real Modifier Masks _ Mask _ ShiftMask LockMask ControlMask Mod1Mask Mod2Mask Mod3Mask Mod4Mask Mod5Mask .TE .SH "RETURN VALUES" .TP 15 True The .I XkbLockModifiers function returns True if a request is sent to the server to lock the real modifiers selected by both .I affect and .I values and to unlock the real modifiers selected by .I affect, but not selected by .I values. .TP 15 False The .I XkbLockModifiers function returns False if the request was not sent. ding 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 tlibX11-1.6.3/man/xkb/XkbSAPtrDfltValue.man000064401431060000012000000066511247741723500203670ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbSAPtrDfltValue __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbSAPtrDfltValue \- Returns the valueXXX field of act converted to a signed int .SH SYNOPSIS .HP .B int XkbSAPtrDfltValue .BI "(\^XkbAction " "act" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- act action from which to extract group .SH DESCRIPTION .LP Actions associated with the XkbPtrDfltAction structure change the mk_dflt_btn attribute of the MouseKeys control. If the MouseKeys control is not enabled, KeyPress and KeyRelease events are treated as though the action is XkbSA_NoAction. Otherwise, this action changes the .I mk_dflt_btn attribute of the MouseKeys control. The .I type field of the XkbPtrDfltAction structure should always be XkbSA_SetPtrDflt. The .I flags field is composed of the bitwise inclusive OR of the values shown in Table 1 (currently there is only one value defined). .TS c s l l l lw(4i). Table 1 Pointer Default Flags _ Flag Meaning _ XkbSA_DfltBtnAbsolute T{ If set, the value field represents an absolute pointer button. Otherwise, the value field represents the amount to be added to the current default button. T} .TE The .I affect field specifies what changes as a result of this action. The only valid value for the .I affect field is XkbSA_AffectDfltBtn. The .I valueXXX field is a signed character that represents the new button value for the .I mk_dflt_btn attribute of the MouseKeys control. If XkbSA_DfltBtnAbsolute is set in .I flags, valueXXX specifies the button to be used; otherwise, .I valueXXX specifies the amount to be added to the current default button. In either case, illegal button choices are wrapped back around into range. Xkb provides macros, to convert between the integer and signed character values in XkbPtrDfltAction structures. .I XkbSAPtrDfltValue returns the .I valueXXX field of .I act converted to a signed int. .SH STRUCTURES .LP .nf typedef struct _XkbPtrDfltAction { unsigned char type; /\(** XkbSA_SetPtrDflt */ unsigned char flags; /\(** controls the pointer button number */ unsigned char affect; /\(** XkbSA_AffectDfltBtn */ char valueXXX; /\(** new default button member */ } XkbPtrDfltAction; .fi libX11-1.6.3/man/xkb/XkbFreeDeviceInfo.man000064401431060000012000000177371247741723500204130ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbFreeDeviceInfo __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbFreeDeviceInfo \- Free an XkbDeviceInfoRec structure .SH SYNOPSIS .HP .B void XkbFreeDeviceInfo .BI "(\^XkbDeviceInfoPtr " "device_info" "\^," .BI "unsigned int " "which" "\^," .BI "Bool " "free_all" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- device_info pointer to XkbDeviceInfoRec in which to free items .TP .I \- which mask of components of device_info to free .TP .I \- free_all True => free everything, including device_info .SH DESCRIPTION .LP If .I free_all is True, the .I XkbFreeDeviceInfo frees all components of .I device_info and the XkbDeviceInfoRec structure pointed to by .I device_info itself. If .I free_all is False, the value of .I which determines which subcomponents are freed. .I which is an inclusive OR of one or more of the values from Table 1. If .I which contains XkbXI_ButtonActionsMask, all button actions associated with .I device_info are freed, .I device_info->btn_acts is set to NULL, and .I device_info->num_btns is set to zero. If .I which contains all bits in XkbXI_IndicatorsMask, all XkbDeviceLedInfoRec structures associated with .I device_info are freed, .I device_info->leds is set to NULL, and .I device_info->sz_leds and .I device_info->num_leds are set to zero. If .I which contains XkbXI_IndicatorMapsMask, all indicator maps associated with .I device_info are cleared, but the number of LEDs and the leds structures themselves is preserved. If .I which contains XkbXI_IndicatorNamesMask, all indicator names associated with .I device_info are cleared, but the number of LEDs and the leds structures themselves is preserved. If .I which contains XkbXI_IndicatorStateMask, the indicator state associated with the .I device_info leds are set to zeros but the number of LEDs and the leds structures themselves is preserved. .bp .nf Table 1 XkbDeviceInfoRec Mask Bits ____________________________________________________________________________________ Name XkbDeviceInfoRec Value Capability If Set Fields Effected ____________________________________________________________________________________ XkbXI_KeyboardsMask (1L <<0) Clients can use all Xkb requests and events with KeyClass devices supported by the input device extension. XkbXI_ButtonActionsMask num_btns (1L <<1) Clients can assign key btn_acts actions to buttons non-KeyClass input extension devices. XkbXI_IndicatorNamesMask leds->names (1L <<2) Clients can assign names to indicators on non-KeyClass input extension devices. XkbXI_IndicatorMapsMask leds->maps (1L <<3) Clients can assign indicator maps to indicators on non-KeyClass input extension devices. XkbXI_IndicatorStateMask leds->state (1L <<4) Clients can request the status of indicators on non-KeyClass input extension devices. XkbXI_IndicatorsMask sz_leds (0x1c) XkbXI_IndicatorNamesMask | num_leds XkbXI_IndicatorMapsMask | leds->* XkbXI_IndicatorStateMask XkbXI_UnsupportedFeaturesMask unsupported (1L <<15) XkbXI_AllDeviceFeaturesMask Those selected (0x1e) XkbXI_IndicatorsMask | by Value Column XkbSI_ButtonActionsMask masks XkbXI_AllFeaturesMask Those selected (0x1f) XkbSI_AllDeviceFeaturesMask | by Value Column XkbSI_KeyboardsMask masks XkbXI_AllDetailsMask Those selected (0x801f) XkbXI_AllFeaturesMask | by Value column XkbXI_UnsupportedFeaturesMask masks .fi .SH STRUCTURES .LP Information about X Input Extension devices is transferred between a client program and the Xkb extension in an XkbDeviceInfoRec structure: .nf typedef struct { char * name; /\(** name for device */ Atom type; /\(** name for class of devices */ unsigned short device_spec; /\(** device of interest */ Bool has_own_state; /\(** True=>this device has its own state */ unsigned short supported; /\(** bits indicating supported capabilities */ unsigned short unsupported; /\(** bits indicating unsupported capabilities */ unsigned short num_btns; /\(** number of entries in btn_acts */ XkbAction * btn_acts; /\(** button actions */ unsigned short sz_leds; /\(** total number of entries in LEDs vector */ unsigned short num_leds; /\(** number of valid entries in LEDs vector */ unsigned short dflt_kbd_fb; /\(** input extension ID of default (core kbd) indicator */ unsigned short dflt_led_fb; /\(** input extension ID of default indicator feedback */ XkbDeviceLedInfoPtr leds; /\(** LED descriptions */ } XkbDeviceInfoRec, *XkbDeviceInfoPtr; typedef struct { unsigned short led_class; /\(** class for this LED device*/ unsigned short led_id; /\(** ID for this LED device */ unsigned int phys_indicators; /\(** bits for which LEDs physically present */ unsigned int maps_present; /\(** bits for which LEDs have maps in maps */ unsigned int names_present; /\(** bits for which LEDs are in names */ unsigned int state; /\(** 1 bit => corresponding LED is on */ Atom names[XkbNumIndicators]; /\(** names for LEDs */ XkbIndicatorMapRec maps; /\(** indicator maps for each LED */ } XkbDeviceLedInfoRec, *XkbDeviceLedInfoPtr; .fi zeros but the number of LEDs and libX11-1.6.3/man/xkb/XkbGetState.man000064401431060000012000000040531247741723500173010ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbGetState __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbGetState \- Obtains the keyboard state .SH SYNOPSIS .HP .B Status XkbGetState .BI "(\^Display *" "display" "\^," .BI "unsigned int " "device_spec" "\^," .BI "XkbStatePtr " "state_return" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I display connection to the X server .TP .I device_spec device ID, or XkbUseCoreKbd .TP .I state_return backfilled with Xkb state .SH DESCRIPTION .LP The .I XkbGetState function queries the server for the current keyboard state, waits for a reply, and then backfills .I state_return with the results. All group values are expressed as group indices in the range [0..3]. Modifiers and the compatibility modifier state values are expressed as the bitwise union of the core X11 modifier masks. The pointer button state is reported as in the core X11 protocol. libX11-1.6.3/man/xkb/XkbFreeGeomProperties.man000064401431060000012000000054211247741723500213270ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbFreeGeomProperties __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbFreeGeomProperties \- Free geometry properties .SH SYNOPSIS .HP .B void XkbFreeGeomProperties .BI "(\^XkbGeometryPtr " "geom" "\^," .BI "int " "first" "\^," .BI "int " "count" "\^," .BI "Bool *" "free_all" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- geom geometry in which properties should be freed .TP .I \- first first property to be freed .TP .I \- count number of properties to be freed .TP .I \- free_all True => all properties are freed .SH DESCRIPTION .LP Xkb provides a number of functions to allocate and free subcomponents of a keyboard geometry. Use these functions to create or modify keyboard geometries. Note that these functions merely allocate space for the new element(s), and it is up to you to fill in the values explicitly in your code. These allocation functions increase .I sz_* but never touch .I num_* (unless there is an allocation failure, in which case they reset both .I sz_* and .I num_* to zero). These functions return Success if they succeed, BadAlloc if they are not able to allocate space, or BadValue if a parameter is not as expected. If .I free_all is True, all properties are freed regardless of the value of .I first or .I count. Otherwise, .I count properties are freed beginning with the one specified by .I first. .SH "RETURN VALUES" .TP 15 Success The XkbFreeGeomProperties function returns Success when there are no allocation or argument errors. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadValue An argument is out of range libX11-1.6.3/man/xkb/Makefile.am000064401431060000012000000213441247741723500164550ustar00alancstaff00002660200006libmandir = $(LIB_MAN_DIR) libman_PRE = \ XkbActionCtrls.man \ XkbAddDeviceLedInfo.man \ XkbAddGeomColor.man \ XkbAddGeomDoodad.man \ XkbAddGeomKey.man \ XkbAddGeomKeyAlias.man \ XkbAddGeomOutline.man \ XkbAddGeomOverlay.man \ XkbAddGeomOverlayKey.man \ XkbAddGeomOverlayRow.man \ XkbAddGeomProperty.man \ XkbAddGeomRow.man \ XkbAddGeomSection.man \ XkbAddGeomShape.man \ XkbAddSymInterpret.man \ XkbAllocClientMap.man \ XkbAllocCompatMap.man \ XkbAllocControls.man \ XkbAllocDeviceInfo.man \ XkbAllocDeviceLedInfo.man \ XkbAllocGeomColors.man \ XkbAllocGeomDoodads.man \ XkbAllocGeomKeyAliases.man \ XkbAllocGeomKeys.man \ XkbAllocGeomOutlines.man \ XkbAllocGeomOverlayKey.man \ XkbAllocGeomOverlayRows.man \ XkbAllocGeomOverlays.man \ XkbAllocGeomPoints.man \ XkbAllocGeomProps.man \ XkbAllocGeomRows.man \ XkbAllocGeomSectionDoodads.man \ XkbAllocGeomSections.man \ XkbAllocGeomShapes.man \ XkbAllocGeometry.man \ XkbAllocIndicatorMaps.man \ XkbAllocKeyboard.man \ XkbAllocNames.man \ XkbAllocServerMap.man \ XkbApplyCompatMapToKey.man \ XkbBell.man \ XkbBellEvent.man \ XkbChangeControls.man \ XkbChangeDeviceInfo.man \ XkbChangeEnabledControls.man \ XkbChangeIndicators.man \ XkbChangeMap.man \ XkbChangeNames.man \ XkbChangeTypesOfKey.man \ XkbComputeRowBounds.man \ XkbComputeSectionBounds.man \ XkbComputeShapeBounds.man \ XkbComputeShapeTop.man \ XkbCopyKeyType.man \ XkbCopyKeyTypes.man \ XkbDeviceBell.man \ XkbDeviceBellEvent.man \ XkbFindOverlayForKey.man \ XkbForceBell.man \ XkbForceDeviceBell.man \ XkbFreeClientMap.man \ XkbFreeCompatMap.man \ XkbFreeComponentList.man \ XkbFreeControls.man \ XkbFreeDeviceInfo.man \ XkbFreeGeomColors.man \ XkbFreeGeomDoodads.man \ XkbFreeGeomKeyAliases.man \ XkbFreeGeomKeys.man \ XkbFreeGeomOutlines.man \ XkbFreeGeomOverlayKeys.man \ XkbFreeGeomOverlayRows.man \ XkbFreeGeomOverlays.man \ XkbFreeGeomPoints.man \ XkbFreeGeomProperties.man \ XkbFreeGeomRows.man \ XkbFreeGeomSections.man \ XkbFreeGeomShapes.man \ XkbFreeGeometry.man \ XkbFreeIndicatorMaps.man \ XkbFreeKeyboard.man \ XkbFreeNames.man \ XkbFreeServerMap.man \ XkbGetAccessXTimeout.man \ XkbGetAutoRepeatRate.man \ XkbGetAutoResetControls.man \ XkbGetBounceKeysDelay.man \ XkbGetCompatMap.man \ XkbGetControls.man \ XkbGetControlsChanges.man \ XkbGetDetectableAutoRepeat.man \ XkbGetDeviceButtonActions.man \ XkbGetDeviceInfo.man \ XkbGetDeviceInfoChanges.man \ XkbGetDeviceLedInfo.man \ XkbGetGeometry.man \ XkbGetIndicatorChanges.man \ XkbGetIndicatorMap.man \ XkbGetIndicatorState.man \ XkbGetKeyActions.man \ XkbGetKeyBehaviors.man \ XkbGetKeyExplicitComponents.man \ XkbGetKeyModifierMap.man \ XkbGetKeySyms.man \ XkbGetKeyTypes.man \ XkbGetKeyVirtualModMap.man \ XkbGetKeyboard.man \ XkbGetKeyboardByName.man \ XkbGetMap.man \ XkbGetNameChanges.man \ XkbGetNamedGeometry.man \ XkbGetNamedIndicator.man \ XkbGetNames.man \ XkbGetSlowKeysDelay.man \ XkbGetState.man \ XkbGetStickyKeysOptions.man \ XkbGetUpdatedMap.man \ XkbGetVirtualMods.man \ XkbGetXlibControls.man \ XkbIgnoreExtension.man \ XkbInitCanonicalKeyTypes.man \ XkbKeyAction.man \ XkbKeyActionEntry.man \ XkbKeyActionsPtr.man \ XkbKeyGroupInfo.man \ XkbKeyGroupWidth.man \ XkbKeyGroupsWidth.man \ XkbKeyHasActions.man \ XkbKeyNumActions.man \ XkbKeyNumGroups.man \ XkbKeyNumSyms.man \ XkbKeySymEntry.man \ XkbKeySymsOffset.man \ XkbKeySymsPtr.man \ XkbKeyType.man \ XkbKeyTypeIndex.man \ XkbKeyTypesForCoreSymbols.man \ XkbKeycodeToKeysym.man \ XkbKeysymToModifiers.man \ XkbLatchGroup.man \ XkbLatchModifiers.man \ XkbLibraryVersion.man \ XkbListComponents.man \ XkbLockGroup.man \ XkbLockModifiers.man \ XkbLookupKeyBinding.man \ XkbLookupKeySym.man \ XkbModActionVMods.man \ XkbNoteControlsChanges.man \ XkbNoteDeviceChanges.man \ XkbNoteIndicatorChanges.man \ XkbNoteNameChanges.man \ XkbOpenDisplay.man \ XkbOutOfRangeGroupInfo.man \ XkbOutOfRangeGroupNumber.man \ XkbPtrActionX.man \ XkbPtrActionY.man \ XkbQueryExtension.man \ XkbRefreshKeyboardMapping.man \ XkbResizeDeviceButtonActions.man \ XkbResizeKeyActions.man \ XkbResizeKeySyms.man \ XkbResizeKeyType.man \ XkbSAActionSetCtrls.man \ XkbSAGroup.man \ XkbSAPtrDfltValue.man \ XkbSARedirectSetVMods.man \ XkbSARedirectSetVModsMask.man \ XkbSARedirectVMods.man \ XkbSARedirectVModsMask.man \ XkbSAScreen.man \ XkbSASetGroup.man \ XkbSASetPtrDfltValue.man \ XkbSASetScreen.man \ XkbSelectEventDetails.man \ XkbSelectEvents.man \ XkbSetAccessXTimeout.man \ XkbSetAutoRepeatRate.man \ XkbSetAutoResetControls.man \ XkbSetBounceKeysDelay.man \ XkbSetCompatMap.man \ XkbSetControls.man \ XkbSetDebuggingFlags.man \ XkbSetDetectableAutoRepeat.man \ XkbSetDeviceButtonActions.man \ XkbSetDeviceInfo.man \ XkbSetIgnoreLockMods.man \ XkbSetIndicatorMap.man \ XkbSetMap.man \ XkbSetModActionVMods.man \ XkbSetNamedIndicator.man \ XkbSetNames.man \ XkbSetPtrActionX.man \ XkbSetPtrActionY.man \ XkbSetServerInternalMods.man \ XkbSetXlibControls.man \ XkbTranslateKeyCode.man \ XkbTranslateKeySym.man \ XkbUpdateMapFromCore.man \ XkbVirtualModsToReal.man libman_DATA = $(libman_PRE:man=@LIB_MAN_SUFFIX@) EXTRA_DIST = $(libman_PRE) CLEANFILES = $(libman_DATA) SUFFIXES = .$(LIB_MAN_SUFFIX) .man # String replacements in MAN_SUBSTS now come from xorg-macros.m4 via configure .man.$(LIB_MAN_SUFFIX): $(AM_V_GEN)$(SED) $(MAN_SUBSTS) < $< > $@ libX11-1.6.3/man/xkb/XkbInitCanonicalKeyTypes.man000064401431060000012000000056501247741723500217760ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbInitCanonicalKeyTypes __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbInitCanonicalKeyTypes \- Set the definitions of the canonical key types in a client map to their default values .SH SYNOPSIS .HP .B Status XkbInitCanonicalKeyTypes .BI "(\^XkbDescPtr " "xkb" "\^," .BI "unsigned int " "which" "\^," .BI "int " "keypadVMod" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb keyboard description containing client map to initialize .TP .I \- which mask of types to initialize .TP .I \- keypadVMod index of NumLock virtual modifier .SH DESCRIPTION .LP .I XkbInitCanonicalKeyTypes initializes the first XkbNumRequiredTypes key types of the keyboard specified by the .I xkb parameter to their default values. The .I which parameter specifies what canonical key types to initialize and is a bitwise inclusive OR of the following masks: XkbOneLevelMask, XkbTwoLevelMask, XkbAlphabeticMask, and XkbKeypadMask. Only those canonical types specified by the .I which mask are initialized. If XkbKeypadMask is set in the .I which parameter, .I XkbInitCanonicalKeyTypes looks up the NumLock named virtual modifier to determine which virtual modifier to use when initializing the KEYPAD key type. If the NumLock virtual modifier does not exist, .I XkbInitCanonicalKeyTypes creates it. .I XkbInitCanonicalKeyTypes normally returns Success. It returns BadAccess if the Xkb extension has not been properly initialized, and BadAccess if the xkb parameter is not valid. .SH "RETURN VALUES" .TP 15 Success The .I XkbInitCanonicalKeyTypes funtion return Success if the Xkb extension has been properly initialized and the xkb parameter is valid. .SH DIAGNOSTICS .TP 15 .B BadAccess The Xkb extension has not been properly initialized libX11-1.6.3/man/xkb/XkbSetCompatMap.man000064401431060000012000000154051247741723500201210ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbSetCompatMap __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbSetCompatMap \- Modify the server's compatibility map .SH SYNOPSIS .HP .B Bool XkbSetCompatMap .BI "(\^Display *" "display" "\^," .BI "unsigned int " "which" "\^," .BI "XkbDescPtr " "xkb" "\^," .BI "Bool " "update_actions" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- display connection to server .TP .I \- which mask of compat map components to set .TP .I \- xkb source for compat map components .TP .I \- update_actions True => apply to server's keyboard map .SH DESCRIPTION .LP To modify the server's compatibility map, first modify a local copy of the Xkb compatibility map, then call .I XkbSetCompatMap. You may allocate a new compatibility map for this purpose using .I XkbAllocCompatMap. You may also use a compatibility map from another server, although you need to adjust the .I device_spec field in the XkbDescRec accordingly. Note that symbol interpretations in a compatibility map ( .I sym_interpret, the vector of XkbSymInterpretRec structures) are also allocated using this same function. .I XkbSetCompatMap copies compatibility map information from the keyboard description in .I xkb to the server specified in .I display 's compatibility map for the device specified by the .I device_spec field of .I xkb. Unless you have specifically modified this field, it is the default keyboard device. .I which specifies the compatibility map components to be set, and is an inclusive OR of the bits shown in Table 1. .TS c s s l l l l l lw(3i). Table 1 Compatibility Map Component Masks _ Mask Value Affecting _ XkbSymInterpMask (1<<0) Symbol interpretations XkbGroupCompatMask (1<<1) Group maps XkbAllCompatMask (0x3) All compatibility map components .TE After updating its compatibility map for the specified device, if .I update_actions is True, the server applies the new compatibility map to its entire keyboard for the device to generate a new set of key semantics, compatibility state, and a new core keyboard map. If .I update_actions is False, the new compatibility map is not used to generate any modifications to the current device semantics, state, or core keyboard map. One reason for not applying the compatibility map immediately would be if one server was being configured to match another on a piecemeal basis; the map should not be applied until everything is updated. To force an update at a later time, use .I XkbSetCompatMap specifying .I which as zero and .I update_actions as True. .I XkbSetCompatMap returns True if successful and False if unsuccessful. The server may report problems it encounters when processing the request subsequently via protocol errors. .SH "RETURN VALUES" .TP 15 True The .I XkbSetCompatMap function returns True if successful. .TP 15 False The .I XkbSetCompatMap function returns False if unsuccessful. .SH STRUCTURES .LP The complete description of an Xkb keyboard is given by an XkbDescRec. The component structures in the XkbDescRec represent the major Xkb components. .nf typedef struct { struct _XDisplay * display; /\(** connection to X server */ unsigned short flags; /\(** private to Xkb, do not modify */ unsigned short device_spec; /\(** device of interest */ KeyCode min_key_code; /\(** minimum keycode for device */ KeyCode max_key_code; /\(** maximum keycode for device */ XkbControlsPtr ctrls; /\(** controls */ XkbServerMapPtr server; /\(** server keymap */ XkbClientMapPtr map; /\(** client keymap */ XkbIndicatorPtr indicators; /\(** indicator map */ XkbNamesPtr names; /\(** names for all components */ XkbCompatMapPtr compat; /\(** compatibility map */ XkbGeometryPtr geom; /\(** physical geometry of keyboard */ } XkbDescRec, *XkbDescPtr; .fi The .I display field points to an X display structure. The .I flags field is private to the library: modifying .I flags may yield unpredictable results. The .I device_spec field specifies the device identifier of the keyboard input device, or XkbUseCoreKeyboard, which specifies the core keyboard device. The .I min_key_code and .I max_key_code fields specify the least and greatest keycode that can be returned by the keyboard. Each structure component has a corresponding mask bit that is used in function calls to indicate that the structure should be manipulated in some manner, such as allocating it or freeing it. These masks and their relationships to the fields in the XkbDescRec are shown in Table 2. .TS c s s l l l l l l. Table 2 Mask Bits for XkbDescRec _ Mask Bit XkbDescRec Field Value _ XkbControlsMask ctrls (1L<<0) XkbServerMapMask server (1L<<1) XkbIClientMapMask map (1L<<2) XkbIndicatorMapMask indicators (1L<<3) XkbNamesMask names (1L<<4) XkbCompatMapMask compat (1L<<5) XkbGeometryMask geom (1L<<6) XkbAllComponentsMask All Fields (0x7f) .TE The XkbSymInterpretRec structure specifies a symbol interpretation: .nf typedef struct { KeySym sym; /\(** keysym of interest or NULL */ unsigned char flags; /\(** XkbSI_AutoRepeat, XkbSI_LockingKey */ unsigned char match; /\(** specifies how mods is interpreted */ unsigned char mods; /\(** modifier bits, correspond to eight real modifiers */ unsigned char virtual_mod; /\(** 1 modifier to add to key virtual mod map */ XkbAnyAction act; /\(** action to bind to symbol position on key */ } XkbSymInterpretRec,*XkbSymInterpretPtr; .fi .SH "SEE ALSO" .BR XkbAllocCompatMap (__libmansuffix__) libX11-1.6.3/man/xkb/XkbSetPtrActionX.man000064401431060000012000000074621247741723500202770ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbSetPtrActionX __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbSetPtrActionX \- Sets the high_XXX and low_XXX fields of act from the signed integer value x .SH SYNOPSIS .HP .B void XkbSetPtrActionX .BI "(\^XkbPtrAction " "act" "\^," .BI "int " "x" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- act action in which to set X .TP .I \- x new value to set .SH DESCRIPTION .LP Actions associated with the XkbPtrAction structure move the pointer when keys are pressed and released. If the MouseKeys control is not enabled, KeyPress and KeyRelease events are treated as though the action is XkbSA_NoAction. If the MouseKeys control is enabled, a server action of type XkbSA_MovePtr instructs the server to generate core pointer MotionNotify events rather than the usual KeyPress event, and the corresponding KeyRelease event disables any mouse keys timers that were created as a result of handling the XkbSA_MovePtr action. The .I type field of the XkbPtrAction structure is always XkbSA_MovePtr. The .I flags field is a bitwise inclusive OR of the masks shown in Table 1. .TS c s l l l lw(4i). Table 1 Pointer Action Types _ Action Type Meaning _ XkbSA_NoAcceleration T{ If not set, and the MouseKeysAccel control is enabled, the KeyPress initiates a mouse keys timer for this key; every time the timer expires, the cursor moves. T} XkbSA_MoveAbsoluteX T{ If set, the X portion of the structure specifies the new pointer X coordinate. Otherwise, the X portion is added to the current pointer X coordinate to determine the new pointer X coordinate. T} XkbSA_MoveAbsoluteY T{ If set, the Y portion of the structure specifies the new pointer Y coordinate. Otherwise, the Y portion is added to the current pointer Y coordinate to determine the new pointer Y coordinate. T} .TE Each of the X and Y coordinates of the XkbPtrAction structure is composed of two signed 16-bit values, that is, the X coordinate is composed of .I high_XXX and .I low_XXX, and similarly for the Y coordinate. Xkb provides the following macros, to convert between a signed integer and two signed 16-bit values in XkbPtrAction structures. .SH STRUCTURES .LP .nf typedef struct _XkbPtrAction { unsigned char type; /\(** XkbSA_MovePtr */ unsigned char flags; /\(** determines type of pointer motion */ unsigned char high_XXX; /\(** x coordinate, high bits*/ unsigned char low_XXX; /\(** y coordinate, low bits */ unsigned char high_YYY; /\(** x coordinate, high bits */ unsigned char low_YYY; /\(** y coordinate, low bits */ } XkbPtrAction; .fi libX11-1.6.3/man/xkb/XkbFreeControls.man000064401431060000012000000071501247741723500201670ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbFreeControls __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbFreeControls \- Frees memory used by the ctrls member of an XkbDescRec structure .SH SYNOPSIS .HP .B void XkbFreeControls .BI "(\^XkbDescPtr " "xkb" "\^," .BI "unsigned int " "which" "\^," .BI "Bool " "free_all" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb Xkb description in which to free controls components .TP .I \- which mask of components of ctrls to free .TP .I \- free_all True => free everything + ctrls itself .SH DESCRIPTION .LP .I XkbFreeControls frees the specified components of the .I ctrls field in the .I xkb keyboard description and sets the corresponding structure component values to NULL or zero. The .I which mask specifies the fields of .I ctrls to be freed and can contain any of the controls components specified in Table 1. Table 1 shows the actual values for the individual mask bits used to select controls for modification and to enable and disable the control. Note that the same mask bit is used to specify general modifications to the parameters used to configure the control (which), and to enable and disable the control (enabled_ctrls). The anomalies in the table (no "ok" in column) are for controls that have no configurable attributes; and for controls that are not boolean controls and therefore cannot be enabled or disabled. .TS c s s s l l l l l l l l l l l l. Table 1 Controls Mask Bits _ Mask Bit which or enabled Value changed_ctrls _ctrls _ XkbRepeatKeysMask ok ok (1L<<0) XkbSlowKeysMask ok ok (1L<<1) XkbBounceKeysMask ok ok (1L<<2) XkbStickyKeysMask ok ok (1L<<3) XkbMouseKeysMask ok ok (1L<<4) XkbMouseKeysAccelMask ok ok (1L<<5) XkbAccessXKeysMask ok ok (1L<<6) XkbAccessXTimeoutMask ok ok (1L<<7) XkbAccessXFeedbackMask ok ok (1L<<8) XkbAudibleBellMask ok (1L<<9) XkbOverlay1Mask ok (1L<<10) XkbOverlay2Mask ok (1L<<11) XkbIgnoreGroupLockMask ok (1L<<12) XkbGroupsWrapMask ok (1L<<27) XkbInternalModsMask ok (1L<<28) XkbIgnoreLockModsMask ok (1L<<29) XkbPerKeyRepeatMask ok (1L<<30) XkbControlsEnabledMask ok (1L<<31) XkbAccessXOptionsMask ok ok (XkbStickyKeysMask | XkbAccessXFeedbackMask) XkbAllBooleanCtrlsMask ok (0x00001FFF) XkbAllControlsMask ok (0xF8001FFF) .TE If .I free_all is True, .I XkbFreeControls frees every non-NULL structure component in the controls, frees the XkbControlsRec structure referenced by the .I ctrls member of .I xkb, and sets .I ctrls to NULL. libX11-1.6.3/man/xkb/XkbSAActionSetCtrls.man000064401431060000012000000104211247741723500207020ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbSAActionSetCtrls __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbSAActionSetCtrls \- Sets the .I ctrls0 through .I ctrls3 fields of .I act from .I ctrls .SH SYNOPSIS .HP .B void XkbSAActionSetCtrls .BI "(\^XkbCtrlsAction " "act" "\^," .BI "unsigned int " "ctrls" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- act action in which to set ctrls0-ctrls3 .TP .I \- ctrls value to set in ctrls0-ctrls3 .SH DESCRIPTION .LP Actions associated with the XkbCtrlsAction structure change the state of the boolean controls. The .I type field can have any one of the values shown in Table 1. .TS c s l l l lw(4i). Table 1 Controls Action Types _ Type Effect _ XkbSA_SetControls T{ A key press enables any boolean controls specified in the ctrls fields that were not already enabled at the time of the key press. A key release disables any controls enabled by the key press. This action can cause XkbControlsNotify events. T} XkbSA_LockControls T{ If the XkbSA_LockNoLock bit is not set in the flags field, a key press enables any controls specified in the ctrls fields that were not already enabled at the time of the key press. .br If the XkbSA_LockNoUnlock bit is not set in the flags field, a key release disables any controls specified in the ctrls fields that were not already disabled at the time of the key press. .br This action can cause XkbControlsNotify events. T} .TE The .I flags field is composed of the bitwise inclusive OR of the masks shown in Table 2. .TS c s l l l lw(4i). Table 2 Control Action Flags _ Flag Meaning _ XkbSA_LockNoLock T{ If set, and the action type is XkbSA_LockControls, the server only disables controls. T} XkbSA_LockNoUnlock T{ If set, and the action type is XkbSA_LockControls, the server only enables controls. T} .TE The XkbSA_SetControls action implements a key that enables a boolean control when pressed and disables it when released. The XkbSA_LockControls action is used to implement a key that toggles the state of a boolean control each time it is pressed and released. The XkbSA_LockNoLock and XkbSA_LockNoUnlock flags allow modifying the toggling behavior to only unlock or only lock the boolean control. The .I ctrls0, ctrls1, ctrls2, and .I ctrls3 fields represent the boolean controls in the .I enabled_ctrls field of the controls structure. Xkb macros, to convert between the two formats. .I XkbSAActionSetCtrls sets the .I ctrls0 through .I ctrls3 fields of .I act from .I ctrls. .SH STRUCTURES .LP .nf typedef struct _XkbCtrlsAction { unsigned char type; /\(** XkbSA_SetControls, XkbSA_LockControls */ unsigned char flags; /\(** with type, controls enabling and disabling of controls */ unsigned char ctrls3; /\(** ctrls0 through ctrls3 represent the boolean controls */ unsigned char ctrls2; /\(** ctrls0 through ctrls3 represent the boolean controls */ unsigned char ctrls1; /\(** ctrls0 through ctrls3 represent the boolean controls */ unsigned char ctrls0; /\(** ctrls0 through ctrls3 represent the boolean controls */ } XkbCtrlsAction; .fi libX11-1.6.3/man/xkb/XkbActionCtrls.man000064401431060000012000000102461247741723500200070ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbActionCtrls __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbActionCtrls \- Returns the ctrls fields of act converted to an unsigned int .SH SYNOPSIS .HP .B unsigned int XkbActionCtrls .BI "(\^XkbCtrlsAction " "act" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- act action from which to extract controls .SH DESCRIPTION .LP Actions associated with the XkbCtrlsAction structure change the state of the boolean controls. The .I type field can have any one of the values shown in Table 1. .TS c s l l l lw(4i). Table 1 Controls Action Types _ Type Effect _ XkbSA_SetControls T{ A key press enables any boolean controls specified in the ctrls fields that were not already enabled at the time of the key press. A key release disables any controls enabled by the key press. This action can cause XkbControlsNotify events. T} XkbSA_LockControls T{ If the XkbSA_LockNoLock bit is not set in the flags field, a key press enables any controls specified in the ctrls fields that were not already enabled at the time of the key press. .br If the XkbSA_LockNoUnlock bit is not set in the flags field, a key release disables any controls specified in the ctrls fields that were not already disabled at the time of the key press. .br This action can cause XkbControlsNotify events. T} .TE The .I flags field is composed of the bitwise inclusive OR of the masks shown in Table 2. .TS c s l l l lw(4i). Table 2 Control Action Flags _ Flag Meaning _ XkbSA_LockNoLock T{ If set, and the action type is XkbSA_LockControls, the server only disables controls. T} XkbSA_LockNoUnlock T{ If set, and the action type is XkbSA_LockControls, the server only enables controls. T} .TE The XkbSA_SetControls action implements a key that enables a boolean control when pressed and disables it when released. The XkbSA_LockControls action is used to implement a key that toggles the state of a boolean control each time it is pressed and released. The XkbSA_LockNoLock and XkbSA_LockNoUnlock flags allow modifying the toggling behavior to only unlock or only lock the boolean control. The .I ctrls0, ctrls1, ctrls2, and .I ctrls3 fields represent the boolean controls in the .I enabled_ctrls field of the controls structure. Xkb macros, to convert between the two formats. .I XkbActionCtrls returns the .I ctrls fields of .I act converted to an unsigned int. .SH STRUCTURES .LP .nf typedef struct _XkbCtrlsAction { unsigned char type; /\(** XkbSA_SetControls, XkbSA_LockControls */ unsigned char flags; /\(** with type, controls enabling and disabling of controls */ unsigned char ctrls3; /\(** ctrls0 through ctrls3 represent the boolean controls */ unsigned char ctrls2; /\(** ctrls0 through ctrls3 represent the boolean controls */ unsigned char ctrls1; /\(** ctrls0 through ctrls3 represent the boolean controls */ unsigned char ctrls0; /\(** ctrls0 through ctrls3 represent the boolean controls */ } XkbCtrlsAction; .fi libX11-1.6.3/man/xkb/XkbAllocDeviceLedInfo.man000064401431060000012000000130671247741723500212010ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAllocDeviceLedInfo __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAllocDeviceLedInfo \- Obtain an XkbDeviceLedInfoRec structure .SH SYNOPSIS .HP .B Status XkbAllocDeviceLedInfo .BI "(\^XkbDeviceInfoPtr " "device_info" "\^," .BI "int " "num_needed" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- device_info structure in which to allocate LED space .TP .I \- num_needed number of indicators to allocate space for .SH DESCRIPTION .LP .I XkbAllocDeviceLedInfo allocates space for an XkbDeviceLedInfoRec and places it in .I device_info. If .I num_needed is nonzero, .I num_needed XkbIndicatorMapRec structures are also allocated and linked into the XkbDeviceLedInfoRec structure. If you request XkbIndicatorMapRec structures be allocated using this request, you must initialize them explicitly. All other fields are initialized to zero. To initialize an XkbDeviceLedInfoRec structure, use .I XkbAddDeviceLedInfo. .SH STRUCTURES .LP Information about X Input Extension devices is transferred between a client program and the Xkb extension in an XkbDeviceInfoRec structure: .nf typedef struct { char * name; /\(** name for device */ Atom type; /\(** name for class of devices */ unsigned short device_spec; /\(** device of interest */ Bool has_own_state; /\(** True=>this device has its own state */ unsigned short supported; /\(** bits indicating supported capabilities */ unsigned short unsupported; /\(** bits indicating unsupported capabilities */ unsigned short num_btns; /\(** number of entries in btn_acts */ XkbAction * btn_acts; /\(** button actions */ unsigned short sz_leds; /\(** total number of entries in LEDs vector */ unsigned short num_leds; /\(** number of valid entries in LEDs vector */ unsigned short dflt_kbd_fb; /\(** input extension ID of default (core kbd) indicator */ unsigned short dflt_led_fb; /\(** input extension ID of default indicator feedback */ XkbDeviceLedInfoPtr leds; /\(** LED descriptions */ } XkbDeviceInfoRec, *XkbDeviceInfoPtr; typedef struct { unsigned short led_class; /\(** class for this LED device*/ unsigned short led_id; /\(** ID for this LED device */ unsigned int phys_indicators; /\(** bits for which LEDs physically present */ unsigned int maps_present; /\(** bits for which LEDs have maps in maps */ unsigned int names_present; /\(** bits for which LEDs are in names */ unsigned int state; /\(** 1 bit => corresponding LED is on */ Atom names[XkbNumIndicators]; /\(** names for LEDs */ XkbIndicatorMapRec maps; /\(** indicator maps for each LED */ } XkbDeviceLedInfoRec, *XkbDeviceLedInfoPtr; .fi Each indicator has its own set of attributes that specify whether clients can explicitly set its state and whether it tracks the keyboard state. The attributes of each indicator are held in the maps array, which is an array of XkbIndicatorRec structures: .nf typedef struct { unsigned char flags; /\(** how the indicator can be changed */ unsigned char which_groups; /\(** match criteria for groups */ unsigned char groups; /\(** which keyboard groups the indicator watches */ unsigned char which_mods; /\(** match criteria for modifiers */ XkbModsRec mods; /\(** which modifiers the indicator watches */ unsigned int ctrls; /\(** which controls the indicator watches */ } XkbIndicatorMapRec, *XkbIndicatorMapPtr; .fi This indicator map specifies for each indicator: .IP \(bu 5 The conditions under which the keyboard modifier state affects the indicator .IP \(bu 5 The conditions under which the keyboard group state affects the indicator .IP \(bu 5 The conditions under which the state of the boolean controls affects the indicator .IP \(bu 5 The effect (if any) of attempts to explicitly change the state of the indicator using the functions XkbSetControls or XChangeKeyboardControl .SH "SEE ALSO" .BR XkbAddDeviceLedInfo (__libmansuffix__), .BR XkbSetControls (__libmansuffix__) libX11-1.6.3/man/xkb/XkbGetKeyVirtualModMap.man000064401431060000012000000063411247741723500214200ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbGetKeyVirtualModMap __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbGetKeyVirtualModMap \- Obtain the virtual modifier map (the vmodmap array) for a subset of the keys in a keyboard description .SH SYNOPSIS .HP .B Status XkbGetKeyVirtualModMap .BI "(\^Display *" "dpy" "\^," .BI "unsigned int " "first" "\^," .BI "unsigned int " "num" "\^," .BI "XkbDescPtr " "xkb" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to server .TP .I \- first keycode of first key to fetch .TP .I \- num number of keys for which virtual mod maps are desired .TP .I \- xkb Xkb description where results will be placed .SH DESCRIPTION .LP .I XkbGetKeyVirutalModmap sends a request to the server to obtain the virtual modifier mappings for .I num keys on the keyboard starting with key .I first. It waits for a reply and returns the virtual modifier mappings in the .I server->vmodmap array of .I xkb. If successful, .I XkbGetKeyVirtualModMap returns Success. The .I xkb parameter must be a pointer to a valid Xkb keyboard description. If the .I server map in the .I xkb parameter has not been allocated, .I XkbGetKeyVirtualModMap allocates and initializes it before obtaining the virtual modifier mappings. If the server does not have a compatible version of Xkb, or the Xkb extension has not been properly initialized, .I XkbGetKeyVirtualModMap returns BadMatch. If .I num is less than 1 or greater than XkbMaxKeyCount, .I XkbGetKeyVirtualModMap returns BadValue. If any allocation errors occur, .I XkbGetKeyVirtualModMap returns BadAlloc. .SH "RETURN VALUES" .TP 15 Success The .I XkbGetKeyVirutalModmap function returns Success following a successful reply from the server to obtain the virtual modifier mappings for .I num keys on the keyboard starting with key .I first. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadMatch A compatible version of Xkb was not available in the server or an argument has correct type and range, but is otherwise invalid .TP 15 .B BadValue An argument is out of range libX11-1.6.3/man/xkb/XkbTranslateKeySym.man000064401431060000012000000050421247741723500206570ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbTranslateKeySym __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbTranslateKeySym \- Find the string and symbol associated with a keysym for a given keyboard state .SH SYNOPSIS .HP .B int XkbTranslateKeySym .BI "(\^Display *" "dpy" "\^," .BI "KeySym *" "sym_inout" "\^," .BI "unsigned int " "mods" "\^," .BI "char *" "buf" "\^," .BI "int " "nbytes" "\^," .BI "int *" "extra_rtrn" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to X server .TP .I \- sym_inout symbol to be translated; result of translation .TP .I \- mods modifiers to apply to sym_inout .TP .I \- buf buffer into which returned string is written .TP .I \- nbytes size of buffer in bytes .TP .I \- extra_rtrn number of bytes overflow .SH DESCRIPTION .LP .I XkbTranslateKeySym applies the transformations specified in .I mods to the symbol specified by .I sym_inout. It returns in .I buf the string, if any, associated with the keysym for the current locale. If the transformations in .I mods changes the keysym, .I sym_inout is updated accordingly. If the string returned is larger than .I nbytes, a count of bytes that does not fit into the buffer is returned in .I extra_rtrn. XkbTranslateKeySym returns the number of bytes it placed into .I buf. .SH "RETURN VALUES" .TP 15 buf Returns the string, if any, associated with the keysym for the current locale. libX11-1.6.3/man/xkb/XkbChangeControls.man000064401431060000012000000171371247741723500205010ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbChangeControls __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbChangeControls \- Provides a flexible method for updating the controls in a server to match those in the changed keyboard description .SH SYNOPSIS .HP .B Bool XkbChangeControls .BI "(\^Display *" "dpy" "\^," .BI "XkbDescPtr " "xkb" "\^," .BI "XkbControlsChangesPtr " "changes" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to X server .TP .I \- xkb keyboard description with changed xkb->ctrls .TP .I \- changes which parts of xkb->ctrls have changed .SH DESCRIPTION .LP The XkbControlsChangesRec structure allows applications to track modifications to an XkbControlsRec structure and thereby reduce the amount of traffic sent to the server. The same XkbControlsChangesRec structure may be used in several successive modifications to the same XkbControlsRec structure, then subsequently used to cause all of the changes, and only the changes, to be propagated to the server. The .I changed_ctrls field is a mask specifying which logical sets of data in the controls structure have been modified. In this context, modified means .I set, that is, if a value is set to the same value it previously contained, it has still been modified, and is noted as changed. Valid values for .I changed_ctrls are any combination of the masks listed in Table 1 that have "ok" in the .I changed_ctrls column. Setting a bit implies the corresponding data fields from the "Relevant XkbControlsRec Data Fields" column in Table 1 have been modified. The .I enabled_ctrls_changes field specifies which bits in the .I enabled_ctrls field have changed. If the number of keyboard groups has changed, the .I num_groups_changed field is set to True. Table 1 shows the actual values for the individual mask bits used to select controls for modification and to enable and disable the control. Note that the same mask bit is used to specify general modifications to the parameters used to configure the control (which), and to enable and disable the control (enabled_ctrls). The anomalies in the table (no "ok" in column) are for controls that have no configurable attributes; and for controls that are not boolean controls and therefore cannot be enabled or disabled. .TS c s s s s l l l l l l l l l l l l l l l l l l l l lw(1.5i) lw(1.5i) l lw(1.5i) l. Table 1 Xkb Controls _ Control Control Selection Relevant Mask XkbControlsRec Boolean Control (which parameter) DataFields enabled_ctrls bit Section _ T{ AccessXFeedback T} T{ XkbAccessXFeedbackMask T} ax_options: T{ XkbAccessXFeedbackMask T} 10.6.3 XkbAX_*FBMask T{ AccessXKeys T} T{ XkbAccessXKeysMask T} 10.6.1 T{ AccessXTimeout T} T{ XkbAccessXTimeoutMask T} ax_timeout T{ XkbAccessXTimeoutMask T} 10.6.2 axt_opts_mask axt_opts_values axt_ctrls_mask axt_ctrls_values T{ AudibleBell T} T{ XkbAudibleBellMask T} 9.2 T{ AutoReset T} 10.1.2 T{ BounceKeys T} T{ XkbBounceKeysMask T} debounce_delay T{ XkbBounceKeysMask T} 10.6.7 T{ Detectable- T} 10.3.3 T{ Autorepeat T} T{ EnabledControls T} T{ XkbControlsEnabledMask T} enabled_ctrls T{ Non-Boolean Control T} 10.1.1 T{ GroupsWrap T} T{ XkbGroupsWrapMask T} groups_wrap T{ Non-Boolean Control T} 10.7.1 T{ IgnoreGroupLock T} T{ XkbIgnoreGroupLockMask T} 10.7.3 T{ IgnoreLockMods T} T{ XkbIgnoreLockModsMask T} ignore_lock T{ Non-Boolean Control T} 5.1 T{ InternalMods T} T{ XkbInternalModsMask T} internal T{ Non-Boolean Control T} 5.1 T{ MouseKeys T} T{ XkbMouseKeysMask T} mk_dflt_btn T{ XkbMouseKeysMask T} 10.5.1 T{ MouseKeysAccel T} T{ XkbMouseKeysAccelMask T} mk_delay T{ XkbMouseKeysAccelMask T} 10.5.2 mk_interval mk_time_to_max mk_max_speed mk_curve T{ Overlay1 T} T{ XkbOverlay1Mask T} 10.4 T{ Overlay2 T} T{ XkbOverlay2Mask T} 10.4 T{ PerKeyRepeat T} T{ XkbPerKeyRepeatMask T} per_key_repeat T{ Non-Boolean Control T} 10.3.1 T{ RepeatKeys T} T{ XkbRepeatKeysMask T} repeat_delay T{ XkbRepeatKeysMask T} 10.3 repeat_interval T{ SlowKeys T} T{ XkbSlowKeysMask T} slow_keys_delay T{ XkbSlowKeysMask T} 10.6.6 T{ StickyKeys T} T{ XkbStickyKeysMask T} ax_options: T{ XkbStickyKeysMask T} 10.6.8 XkbAX_TwoKeysMask XkbAX_LatchToLockMask .TE Table 2 shows the actual values for the individual mask bits used to select controls for modification and to enable and disable the control. Note that the same mask bit is used to specify general modifications to the parameters used to configure the control (which), and to enable and disable the control (enabled_ctrls). The anomalies in the table (no "ok" in column) are for controls that have no configurable attributes; and for controls that are not boolean controls and therefore cannot be enabled or disabled. .TS c s s s l l l l l l l l l l l l. Table 2 Controls Mask Bits _ Mask Bit which or enabled Value changed_ctrls _ctrls _ XkbRepeatKeysMask ok ok (1L<<0) XkbSlowKeysMask ok ok (1L<<1) XkbBounceKeysMask ok ok (1L<<2) XkbStickyKeysMask ok ok (1L<<3) XkbMouseKeysMask ok ok (1L<<4) XkbMouseKeysAccelMask ok ok (1L<<5) XkbAccessXKeysMask ok ok (1L<<6) XkbAccessXTimeoutMask ok ok (1L<<7) XkbAccessXFeedbackMask ok ok (1L<<8) XkbAudibleBellMask ok (1L<<9) XkbOverlay1Mask ok (1L<<10) XkbOverlay2Mask ok (1L<<11) XkbIgnoreGroupLockMask ok (1L<<12) XkbGroupsWrapMask ok (1L<<27) XkbInternalModsMask ok (1L<<28) XkbIgnoreLockModsMask ok (1L<<29) XkbPerKeyRepeatMask ok (1L<<30) XkbControlsEnabledMask ok (1L<<31) XkbAccessXOptionsMask ok ok (XkbStickyKeysMask | XkbAccessXFeedbackMask) XkbAllBooleanCtrlsMask ok (0x00001FFF) XkbAllControlsMask ok (0xF8001FFF) .TE If you have an Xkb description with controls that have been modified and an XkbControlsChangesRec that describes the changes that have been made, the .I XkbChangeControls function provides a flexible method for updating the controls in a server to match those in the changed keyboard description. .I XkbChangeControls copies any controls fields specified by .I changes from the keyboard description controls structure, .I xkb->ctrls, to the server specified by .I dpy. .SH STRUCTURES .LP The XkbControlsChangesRec structure is defined as follows: .nf typedef struct _XkbControlsChanges { unsigned int changed_ctrls; /\(** bits indicating changed control data */ unsigned int enabled_ctrls_changes; /\(** bits indicating enabled/disabled controls */ Bool num_groups_changed; /\(** True if number of keyboard groups changed */ } XkbControlsChangesRec,*XkbControlsChangesPtr; .fi OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER .\" DEALINGS IN THE SOFTWARE. .\" .TH XkbChangeControls __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbChangeControls \- Provides a flexible method for updating the controls in a server to match those in the changed keyboard description .SH SYNOPSIS .HP .B Bool XkbChangeControls .BI "(\^Display *" "dpy" "\^," .BI "XkbDescPtr " "xkb" "\^," .BI libX11-1.6.3/man/xkb/XkbChangeNames.man000064401431060000012000000145351247741723500177400ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbChangeNames __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbChangeNames \- _summary-line_ .SH SYNOPSIS .HP .B Bool XkbChangeNames .BI "(\^Display *" "dpy" "\^," .BI "unsigned int " "which" "\^," .BI "XkbDescPtr " "Xkb" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to the X server .TP .I \- which mask of names or map components to be updated .TP .I \- Xkb keyboard description to be updated .SH DESCRIPTION .LP .I XkbChangeNames provides a more flexible method for changing symbolic names than .I XkbSetNames and requires the use of an XkbNameChangesRec structure. .I XkbChangeNames copies any names specified by .I changes from the keyboard description, .I xkb, to the X server specified by .I dpy. XkbChangeNames aborts and returns False if any illegal type names or type shift level names are specified by changes. To change the symbolic names in the server, first modify a local copy of the keyboard description and then use either .I XkbSetNames, or, to save network traffic, use a XkbNameChangesRec structure and call .I XkbChangeNames to download the changes to the server. .I XkbSetNames and .I XkbChangeNames can generate BadAlloc, BadAtom, BadLength, BadMatch, and BadImplementation errors. .SH STRUCTURES .LP The XkbNameChangesRec allows applications to identify small modifications to the symbolic names and effectively reduces the amount of traffic sent to the server: .nf typedef struct _XkbNameChanges { unsigned int changed; /\(** name components that have changed */ unsigned char first_type; /\(** first key type with a new name */ unsigned char num_types; /\(** number of types with new names */ unsigned char first_lvl; /\(** first key type with new level names */ unsigned char num_lvls; /\(** number of key types with new level names */ unsigned char num_aliases; /\(** if key aliases changed, total number of key aliases */ unsigned char num_rg; /\(** if radio groups changed, total number of radio groups */ unsigned char first_key; /\(** first key with a new name */ unsigned char num_keys; /\(** number of keys with new names */ unsigned short changed_vmods; /\(** mask of virtual modifiers for which names have changed */ unsigned long changed_indicators; /\(** mask of indicators for which names were changed */ unsigned char changed_groups; /\(** mask of groups for which names were changed */ } XkbNameChangesRec, *XkbNameChangesPtr .fi The .I changed field specifies the name components that have changed and is the bitwise inclusive OR of the valid names mask bits defined in Table 1. The rest of the fields in the structure specify the ranges that have changed for the various kinds of symbolic names, as shown in Table 2. Xkb provides several functions that work with symbolic names. Each of these functions uses a mask to specify individual fields of the structures described above. These masks and their relationships to the fields in a keyboard description are shown in Table 1. .TS c s s s l l l l. Table 1 Symbolic Names Masks _ Mask Bit Value Keyboard Field Component _ XkbKeycodesNameMask (1<<0) Xkb->names keycodes XkbGeometryNameMask (1<<1) Xkb->names geometry XkbSymbolsNameMask (1<<2) Xkb->names symbols XkbPhysSymbolsNameMask (1<<3) Xkb->names phys_symbols XkbTypesNameMask (1<<4) Xkb->names type XkbCompatNameMask (1<<5) Xkb->names compat XkbKeyTypeNamesMask (1<<6) Xkb->map type[*].name XkbKTLevelNamesMask (1<<7) Xkb->map type[*].lvl_names[*] XkbIndicatorNamesMask (1<<8) Xkb->names indicators[*] XkbKeyNamesMask (1<<9) Xkb->names keys[*], num_keys XkbKeyAliasesMask (1<<10) Xkb->names key_aliases[*], num_key_aliases XkbVirtualModNamesMask (1<<11) Xkb->names vmods[*] XkbGroupNamesMask (1<<12) Xkb->names groups[*] XkbRGNamesMask (1<<13) Xkb->names radio_groups[*], num_rg XkbComponentNamesMask (0x3f) Xkb->names keycodes, geometry, symbols, physical symbols, types, and compatibility map XkbAllNamesMask (0x3fff) Xkb->names all name components .TE .TS c s s s l l l l. Table 2 XkbNameChanges Fields _ Mask Fields Component Field _ XkbKeyTypeNamesMask first_type, Xkb->map type[*].name num_types XkbKTLevelNamesMask first_lvl, Xkb->map type[*].lvl_names[*] num_lvls XkbKeyAliasesMask num_aliases Xkb->names key_aliases[*] XkbRGNamesMask num_rg Xkb->names radio_groups[*] XkbKeyNamesMask first_key, Xkb->names keys[*] num_keys XkbVirtualModNamesMask changed_vmods Xkb->names vmods[*] XkbIndicatorNamesMask changed_indicators Xkb->names indicators[*] XkbGroupNamesMask changed_groups Xkb->names groups[*] .TE .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadAtom A name is neither a valid Atom or None .TP 15 .B BadImplementation Invalid reply from server .TP 15 .B BadLength The length of a request is shorter or longer than that required to minimally contain the arguments .TP 15 .B BadMatch A compatible version of Xkb was not available in the server or an argument has correct type and range, but is otherwise invalid .SH "SEE ALSO" .BR XkbSetNames (__libmansuffix__) libX11-1.6.3/man/xkb/XkbLatchGroup.man000064401431060000012000000043761247741723500176410ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbLatchGroup __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbLatchGroup \- Latches the keysym group .SH SYNOPSIS .HP .B Bool XkbLatchGroup .BI "(\^Display *" "display" "\^," .BI "unsigned int " "device_spec" "\^," .BI "unsigned int " "group" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I display connection to the X server .TP .I device_spec device ID, or XkbUseCoreKbd .TP .I group index of the keysym group to latch .SH DESCRIPTION .LP .I XkbLatchGroup sends a request to the server to latch the specified .I group and does not wait for a reply. It returns True if the request was sent and False otherwise. Reference the keysym group indices with these symbolic constants: .TS c s l l l l. Table 1 Symbolic Group Names _ Symbolic Name Value _ XkbGroup1Index 0 XkbGroup2Index 1 XkbGroup3Index 2 XkbGroup4Index 3 .TE .SH "RETURN VALUES" .TP 15 True The .I XkbLatchGroup function returns True if a request was sent to the server to latch the specified .I group. .TP 15 False The .I XkbLatchGroup function returns False if the request was not sent. libX11-1.6.3/man/xkb/XkbAllocGeomOutlines.man000064401431060000012000000051241247741723500211460ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAllocGeomOutlines __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAllocGeomOutlines \- Allocate space for an arbitrary number of outlines to a shape .SH SYNOPSIS .HP .B Status XkbAllocGeomOutlines .BI "(\^XkbShapePtr " "shape" "\^," .BI "int " "num_needed" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- shape shape for which outlines should be allocated .TP .I \- num_needed number of new outlines required .SH DESCRIPTION .LP Xkb provides a number of functions to allocate and free subcomponents of a keyboard geometry. Use these functions to create or modify keyboard geometries. Note that these functions merely allocate space for the new element(s), and it is up to you to fill in the values explicitly in your code. These allocation functions increase .I sz_* but never touch .I num_* (unless there is an allocation failure, in which case they reset both .I sz_* and .I num_* to zero). These functions return Success if they succeed, BadAlloc if they are not able to allocate space, or BadValue if a parameter is not as expected. .I XkbAllocGeomOutlines allocates space for .I num_needed outlines in the specified .I shape. The outlines are not initialized. To free geometry outlines, use .I XkbFreeGeomOutlines. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadValue An argument is out of range .SH "SEE ALSO" .BR XkbFreeGeomOutlines (__libmansuffix__) libX11-1.6.3/man/xkb/XkbForceDeviceBell.man000064401431060000012000000246501247741723500205430ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbForceDeviceBell __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbForceDeviceBell \- Rings the bell on any keyboard, overriding user preference settings for audible bells .SH SYNOPSIS .HP .B Bool XkbForceDeviceBell .BI "(\^Display *" "display" "\^," .BI "Window " "window" "\^," .BI "unsigned int " "device_spec" "\^," .BI "unsigned int " "bell_class" "\^," .BI "unsigned int " "bell_id" "\^," .BI "int " "percent" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- display connection to the X server .TP .I \- window event window, or None .TP .I \- device_spec device ID, or XkbUseCoreKbd .TP .I \- bell_class input extension class of the bell to be rung .TP .I \- bell_id input extension ID of the bell to be rung .TP .I \- percent relative volume, which can range from -100 to 100 inclusive .SH DESCRIPTION .LP The core X protocol allows only applications to explicitly sound the system bell with a given duration, pitch, and volume. Xkb extends this capability by allowing clients to attach symbolic names to bells, disable audible bells, and receive an event whenever the keyboard bell is rung. For the purposes of this document, the .I audible bell is defined to be the system bell, or the default keyboard bell, as opposed to any other audible sound generated elsewhere in the system. You can ask to receive XkbBellNotify events when any client rings any one of the following: .IP \(bu 5 The default bell .IP \(bu 5 Any bell on an input device that can be specified by a bell_class and bell_id pair .IP \(bu 5 Any bell specified only by an arbitrary name. (This is, from the server's point of view, merely a name, and not connected with any physical sound-generating device. Some client application must generate the sound, or visual feedback, if any, that is associated with the name.) .LP You can also ask to receive XkbBellNotify events when the server rings the default bell or if any client has requested events only (without the bell sounding) for any of the bell types previously listed. You can disable audible bells on a global basis. For example, a client that replaces the keyboard bell with some other audible cue might want to turn off the AudibleBell control to prevent the server from also generating a sound and avoid cacophony. If you disable audible bells and request to receive XkbBellNotify events, you can generate feedback different from the default bell. You can, however, override the AudibleBell control by calling one of the functions that force the ringing of a bell in spite of the setting of the AudibleBell control - .I XkbForceDeviceBell or .I XkbForceBell. In this case the server does not generate a bell event. Just as some keyboards can produce keyclicks to indicate when a key is pressed or repeating, Xkb can provide feedback for the controls by using special beep codes. The AccessXFeedback control is used to configure the specific types of operations that generate feedback. Bell Names You can associate a name to an act of ringing a bell by converting the name to an Atom and then using this name when you call the functions listed in this chapter. If an event is generated as a result, the name is then passed to all other clients interested in receiving XkbBellNotify events. Note that these are arbitrary names and that there is no binding to any sounds. Any sounds or other effects (such as visual bells on the screen) must be generated by a client application upon receipt of the bell event containing the name. There is no default name for the default keyboard bell. The server does generate some predefined bells for the AccessX controls. These named bells are shown in Table 1; the name is included in any bell event sent to clients that have requested to receive XkbBellNotify events. .TS c s l l lW(4i) l. Table 1 Predefined Bells _ Action Named Bell _ Indicator turned on AX_IndicatorOn Indicator turned off AX_IndicatorOff More than one indicator changed state AX_IndicatorChange Control turned on AX_FeatureOn Control turned off AX_FeatureOff More than one control changed state AX_FeatureChange T{ SlowKeys and BounceKeys about to be turned on or off T} AX_SlowKeysWarning SlowKeys key pressed AX_SlowKeyPress SlowKeys key accepted AX_SlowKeyAccept SlowKeys key rejected AX_SlowKeyReject Accepted SlowKeys key released AX_SlowKeyRelease BounceKeys key rejected AX_BounceKeyReject StickyKeys key latched AX_StickyLatch StickyKeys key locked AX_StickyLock StickyKeys key unlocked AX_StickyUnlock .TE Audible Bells Using Xkb you can generate bell events that do not necessarily ring the system bell. This is useful if you need to use an audio server instead of the system beep. For example, when an audio client starts, it could disable the audible bell (the system bell) and then listen for XkbBellNotify events. When it receives a XkbBellNotify event, the audio client could then send a request to an audio server to play a sound. You can control the audible bells feature by passing the XkbAudibleBellMask to .I XkbChangeEnabledControls. If you set XkbAudibleBellMask on, the server rings the system bell when a bell event occurs. This is the default. If you set XkbAudibleBellMask off and a bell event occurs, the server does not ring the system bell unless you call .I XkbForceDeviceBell or .I XkbForceBell. Audible bells are also part of the per-client auto-reset controls. Bell Functions Use the functions described in this section to ring bells and to generate bell events. The input extension has two types of feedbacks that can generate bells - bell feedback and keyboard feedback. Some of the functions in this section have .I bell_class and .I bell_id parameters; set them as follows: Set .I bell_class to BellFeedbackClass or KbdFeedbackClass. A device can have more than one feedback of each type; set .I bell_id to the particular bell feedback of .I bell_class type. Table 2 shows the conditions that cause a bell to sound or an XkbBellNotifyEvent to be generated when a bell function is called. .TS c s s s l l l l l l l l. Table 2 Bell Sounding and Bell Event Generating _ Function called AudibleBell Server sounds a bell Server sends an XkbBellNotifyEvent _ XkbDeviceBell On Yes Yes XkbDeviceBell Off No Yes XkbBell On Yes Yes XkbBell Off No Yes XkbDeviceBellEvent On or Off No Yes XkbBellEvent On or Off No Yes XkbDeviceForceBell On or Off Yes No XkbForceBell On or Off Yes No .TE If a compatible keyboard extension isn't present in the X server, .I XkbForceDeviceBell immediately returns False. Otherwise, .I XkbForceDeviceBell rings the bell as specified for the display and keyboard device and returns True. Set .I percent to be the volume relative to the base volume for the keyboard as described for .I XBell. There is no .I name parameter because .I XkbForceDeviceBell does not cause an XkbBellNotify event. You can call .I XkbBell without first initializing the keyboard extension. .SH STRUCTURES .LP Xkb generates XkbBellNotify events for all bells except for those resulting from calls to .I XkbForceDeviceBell and .I XkbForceBell. To receive XkbBellNotify events under all possible conditions, pass XkbBellNotifyMask in both the .I bits_to_change and .I values_for_bits parameters to .I XkbSelectEvents. The XkbBellNotify event has no event details. It is either selected or it is not. However, you can call .I XkbSelectEventDetails using XkbBellNotify as the .I event_type and specifying XkbAllBellNotifyMask in .I bits_to_change and .I values_for_bits. This has the same effect as a call to .I XkbSelectEvents. The structure for the XkbBellNotify event type contains: .nf typedef struct _XkbBellNotify { int type; /\(** Xkb extension base event code */ unsigned long serial; /\(** X server serial number for event */ Bool send_event; /\(** True => synthetically generated */ Display * display; /\(** server connection where event generated */ Time time; /\(** server time when event generated */ int xkb_type; /\(** XkbBellNotify */ unsigned int device; /\(** Xkb device ID, will not be XkbUseCoreKbd */ int percent; /\(** requested volume as % of max */ int pitch; /\(** requested pitch in Hz */ int duration; /\(** requested duration in microseconds */ unsigned int bell_class; /\(** X input extension feedback class */ unsigned int bell_id; /\(** X input extension feedback ID */ Atom name; /\(** "name" of requested bell */ Window window; /\(** window associated with event */ Bool event_only; /\(** False -> the server did not produce a beep */ } XkbBellNotifyEvent; .fi If your application needs to generate visual bell feedback on the screen when it receives a bell event, use the window ID in the XkbBellNotifyEvent, if present. .SH "SEE ALSO" .BR XBell (__libmansuffix__), .BR XkbBell (__libmansuffix__), .BR XkbBellNotify (__libmansuffix__), .BR XkbChangeEnabledControls (__libmansuffix__), .BR XkbDeviceBell (__libmansuffix__), .BR XkbForceBell (__libmansuffix__), .BR XkbForceDeviceBell (__libmansuffix__), .BR XkbSelectEventDetails (__libmansuffix__), .BR XkbSelectEvents (__libmansuffix__) libX11-1.6.3/man/xkb/XkbAllocGeomDoodads.man000064401431060000012000000047611247741723500207270ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAllocGeomDoodads __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAllocGeomDoodads \- Allocate doodads that are global to a keyboard geometry .SH SYNOPSIS .HP .B Status XkbAllocGeomDoodads .BI "(\^XkbGeometryPtr " "geom" "\^," .BI "int " "num_needed" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- geom geometry for which doodads should be allocated .TP .I \- num_needed number of new doodads required .SH DESCRIPTION .LP Xkb provides a number of functions to allocate and free subcomponents of a keyboard geometry. Use these functions to create or modify keyboard geometries. Note that these functions merely allocate space for the new element(s), and it is up to you to fill in the values explicitly in your code. These allocation functions increase .I sz_* but never touch .I num_* (unless there is an allocation failure, in which case they reset both .I sz_* and .I num_* to zero). These functions return Success if they succeed, BadAlloc if they are not able to allocate space, or BadValue if a parameter is not as expected. .I XkbAllocGeomDoodads allocates .I num_needed doodads and adds them to the specified geometry .I geom. No initialization of the doodads is done. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadValue An argument is out of range libX11-1.6.3/man/xkb/XkbFreeGeomShapes.man000064401431060000012000000053711247741723500204220ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbFreeGeomShapes __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbFreeGeomShapes \- Free geometry shapes .SH SYNOPSIS .HP .B void XkbFreeGeomShapes .BI "(\^XkbGeometryPtr " "geom" "\^," .BI "int " "first" "\^," .BI "int " "count" "\^," .BI "Bool " "free_all" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- geom geometry in which shapes should be freed .TP .I \- first first shape to be freed .TP .I \- count number of shapes to be freed .TP .I \- free_all True => all shapes are freed .SH DESCRIPTION .LP Xkb provides a number of functions to allocate and free subcomponents of a keyboard geometry. Use these functions to create or modify keyboard geometries. Note that these functions merely allocate space for the new element(s), and it is up to you to fill in the values explicitly in your code. These allocation functions increase .I sz_* but never touch .I num_* (unless there is an allocation failure, in which case they reset both .I sz_* and .I num_* to zero). These functions return Success if they succeed, BadAlloc if they are not able to allocate space, or BadValue if a parameter is not as expected. If .I free_all is True, all shapes in the geometry are freed regardless of the values of .I first and .I count. Otherwise, .I count shapes are freed, beginning with the shape specified by .I first. .SH "RETURN VALUES" .TP 15 Success The XkbFreeGeomShapes function returns Success when there are no allocation or argument errors. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadValue An argument is out of range libX11-1.6.3/man/xkb/XkbKeySymsPtr.man000064401431060000012000000046231247741723500176560ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbKeySymsPtr __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbKeySymsPtr \- Returns the pointer to the two-dimensional array of keysyms for the key corresponding to .I keycode .SH SYNOPSIS .HP .B KeySym * XkbKeySymsPtr .BI "(\^XkbDescPtr " "xkb" "\^," .BI "KeyCode " "keycode" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb Xkb description of interest .TP .I \- keycode keycode of interest .SH DESCRIPTION .LP The key width and number of groups associated with a key are used to form a small two-dimensional array of KeySyms for a key. This array may be different sizes for different keys. The array for a single key is stored as a linear list, in row-major order. The arrays for all of the keys are stored in the .I syms field of the client map. There is one row for each group associated with a key and one column for each level. The index corresponding to a given group and shift level is computed as: .nf idx = group_index * key_width + shift_level .fi The .I offset field of the .I key_sym_map entry for a key is used to access the beginning of the array. .I XkbKeySymsPtr returns the pointer to the two-dimensional array of keysyms for the key corresponding to .I keycode. libX11-1.6.3/man/xkb/XkbGetKeyActions.man000064401431060000012000000054411247741723500202740ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbGetKeyActions __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbGetKeyActions \- Update the actions (the key_acts array) for a subset of the keys in a keyboard description .SH SYNOPSIS .HP .B Status XkbGetKeyActions .BI "(\^Display *" "dpy" "\^," .BI "unsigned int " "first" "\^," .BI "unsigned int " "num" "\^," .BI "XkbDescPtr " "xkb" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to X server .TP .I \- first keycode of first key of interest .TP .I \- num number of keys desired .TP .I \- xkb pointer to keyboard description where result is stored .SH DESCRIPTION .LP .I XkbGetKeyActions sends a request to the server to obtain the actions for .I num keys on the keyboard starting with key .I first. It waits for a reply and returns the actions in the .I server->key_acts field of .I xkb. If successful, .I XkbGetKeyActions returns Success. The .I xkb parameter must be a pointer to a valid Xkb keyboard description. If the .I server map, in the .I xkb parameter, has not been allocated, .I XkbGetKeyActions allocates and initializes it before obtaining the actions. If the server does not have a compatible version of Xkb, or the Xkb extension has not been properly initialized, .I XkbGetKeyActions returns BadAccess. If .I num is less than 1 or greater than XkbMaxKeyCount, .I XkbGetKeyActions returns BadValue. If any allocation errors occur, .I XkbGetKeyActions returns BadAlloc. .SH DIAGNOSTICS .TP 15 .B BadAccess The Xkb extension has not been properly initialized .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadValue An argument is out of range libX11-1.6.3/man/xkb/XkbSetIndicatorMap.man000064401431060000012000000145731247741723500206170ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbSetIndicatorMap __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbSetIndicatorMap \- Downloads the changes to the server based on modifications to a local copy of the keyboard description which will update the maps for one or more indicators .SH SYNOPSIS .HP .B Bool XkbSetIndicatorMap .BI "(\^Display *" "dpy" "\^," .BI "unsigned int " "which" "\^," .BI "XkbDescPtr " "desc" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to the X server .TP .I \- which mask of indicators to change .TP .I \- desc keyboard description from which the maps are taken .SH DESCRIPTION .LP This section discusses the effects of explicitly changing indicators depending upon different settings in the indicator map. See Tables 1 and Table 2 for information on the effects of the indicator map fields when explicit changes are made. .TS c s s c s s l l l l l lw(3i). Table 1 XkbIndicatorMapRec which_groups and groups, Indicator Drives Keyboard _ which_groups New State Effect on Keyboard Group State _ XkbIM_UseNone On or Off No effect XkbIM_UseBase On or Off No effect XkbIM_UseLatched On T{ The groups field is treated as a group mask. The keyboard group latch is changed to the lowest numbered group specified in groups; if groups is empty, the keyboard group latch is changed to zero. T} XkbIM_UseLatched Off T{ The groups field is treated as a group mask. If the indicator is explicitly extinguished, keyboard group latch is changed to the lowest numbered group not specified in groups; if groups is zero, the keyboard group latch is set to the index of the highest legal keyboard group. T} XkbIM_UseLocked or .br XkbIM_UseEffective On T{ If the groups mask is empty, group is not changed; otherwise, the locked keyboard group is changed to the lowest numbered group specified in groups. T} XkbIM_UseLocked or .br XkbIM_UseEffective Off T{ Locked keyboard group is changed to the lowest numbered group that is not specified in the groups mask, or to Group1 if the groups mask contains all keyboard groups. T} .TE .TS c s s c s s l l l l l lw(3i). Table 2 XkbIndicatorMapRec which_mods and mods, Indicator Drives Keyboard _ which_mods New State Effect on Keyboard Modifiers _ XkbIM_UseNone or XkbIM_UseBase On or Off No Effect XkbIM_UseLatched On T{ Any modifiers specified in the mask field of mods are added to the latched modifiers. T} XkbIM_UseLatched Off T{ Any modifiers specified in the mask field of mods are removed from the latched modifiers. T} XkbIM_UseLocked, XkbIM_UseCompat, or XkbIM_UseEffective On T{ Any modifiers specified in the mask field of mods are added to the locked modifiers. T} XkbIM_UseLocked Off T{ Any modifiers specified in the mask field of mods are removed from the locked modifiers. T} XkbIM_UseCompat or XkbIM_UseEffective Off T{ Any modifiers specified in the mask field of mods are removed from both the locked and latched modifiers. T} .TE If XkbIM_LEDDrivesKB is set and XkbIM_NoExplicit is not, and if you call a function that updates the server's image of the indicator map (such as .I XkbSetIndicatorMap or .I XkbSetNamedIndicator), Xkb changes the keyboard state and controls to reflect the other fields of the indicator map. If you attempt to explicitly change the value of an indicator for which XkbIM_LEDDrivesKB is absent or for which XkbIM_NoExplicit is present, keyboard state or controls are unaffected. If neither XkbIM_NoAutomatic nor XkbIM_NoExplicit is set in an indicator map, Xkb honors any request to change the state of the indicator, but the new state might be immediately superseded by automatic changes to the indicator state if the keyboard state or controls change. The effects of changing an indicator that drives the keyboard are cumulative; it is possible for a single change to affect keyboard group, modifiers, and controls simultaneously. If you change an indicator for which both the XkbIM_LEDDrivesKB and XkbIM_NoAutomatic flags are specified, Xkb applies the keyboard changes specified in the other indicator map fields and changes the indicator to reflect the state that was explicitly requested. The indicator remains in the new state until it is explicitly changed again. If the XkbIM_NoAutomatic flag is not set and XkbIM_LEDDrivesKB is set, Xkb applies the changes specified in the other indicator map fields and sets the state of the indicator to the values specified by the indicator map. Note that it is possible in this case for the indicator to end up in a different state than the one that was explicitly requested. For example, Xkb does not extinguish an indicator with .I which_mods of XkbIM_UseBase and .I mods of Shift if, at the time Xkb processes the request to extinguish the indicator, one of the Shift keys is physically depressed. If you explicitly light an indicator for which XkbIM_LEDDrivesKB is set, Xkb enables all of the boolean controls specified in the .I ctrls field of its indicator map. Explicitly extinguishing such an indicator causes Xkb to disable all of the boolean controls specified in .I ctrls. For each bit set in the .I which parameter, .I XkbSetIndicatorMap sends the corresponding indicator map from the .I desc parameter to the server. .SH "SEE ALSO" .BR XkbSetNamedIndicator (__libmansuffix__) libX11-1.6.3/man/xkb/XkbPtrActionY.man000064401431060000012000000073711247741723500176230ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbPtrActionY __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbPtrActionY \- Returns the high_YYY and low_YYY fields of act converted to a signed int .SH SYNOPSIS .HP .B int XkbPtrActionY .BI "(\^XkbPtrAction " "act" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- act action from which to extract Y .SH DESCRIPTION .LP Actions associated with the XkbPtrAction structure move the pointer when keys are pressed and released. If the MouseKeys control is not enabled, KeyPress and KeyRelease events are treated as though the action is XkbSA_NoAction. If the MouseKeys control is enabled, a server action of type XkbSA_MovePtr instructs the server to generate core pointer MotionNotify events rather than the usual KeyPress event, and the corresponding KeyRelease event disables any mouse keys timers that were created as a result of handling the XkbSA_MovePtr action. The .I type field of the XkbPtrAction structure is always XkbSA_MovePtr. The .I flags field is a bitwise inclusive OR of the masks shown in Table 1. .TS c s l l l lw(4i). Table 1 Pointer Action Types _ Action Type Meaning _ XkbSA_NoAcceleration T{ If not set, and the MouseKeysAccel control is enabled, the KeyPress initiates a mouse keys timer for this key; every time the timer expires, the cursor moves. T} XkbSA_MoveAbsoluteX T{ If set, the X portion of the structure specifies the new pointer X coordinate. Otherwise, the X portion is added to the current pointer X coordinate to determine the new pointer X coordinate. T} XkbSA_MoveAbsoluteY T{ If set, the Y portion of the structure specifies the new pointer Y coordinate. Otherwise, the Y portion is added to the current pointer Y coordinate to determine the new pointer Y coordinate. T} .TE Each of the X and Y coordinates of the XkbPtrAction structure is composed of two signed 16-bit values, that is, the X coordinate is composed of .I high_XXX and .I low_XXX, and similarly for the Y coordinate. Xkb provides the following macros, to convert between a signed integer and two signed 16-bit values in XkbPtrAction structures. .SH STRUCTURES .LP .nf typedef struct _XkbPtrAction { unsigned char type; /\(** XkbSA_MovePtr */ unsigned char flags; /\(** determines type of pointer motion */ unsigned char high_XXX; /\(** x coordinate, high bits*/ unsigned char low_XXX; /\(** y coordinate, low bits */ unsigned char high_YYY; /\(** x coordinate, high bits */ unsigned char low_YYY; /\(** y coordinate, low bits */ } XkbPtrAction; .fi 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 tlibX11-1.6.3/man/xkb/XkbSetIgnoreLockMods.man000064401431060000012000000162161247741723500211200ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbSetIgnoreLockMods __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbSetIgnoreLockMods \- Sets the modifiers that, if locked, are not to be reported in matching events to passive grabs .SH SYNOPSIS .HP .B Bool XkbSetIgnoreLockMods .BI "(\^Display *" "display" "\^," .BI "unsigned int " "device_spec" "\^," .BI "unsigned int " "affect_real" "\^," .BI "unsigned int " "real_values" "\^," .BI "unsigned int " "affect_virtual" "\^," .BI "unsigned int " "virtual_values" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- display connection to the X server .TP .I \- device_spec device ID, or XkbUseCoreKbd .TP .I \- affect_real mask of real modifiers affected by this call .TP .I \- real_values values for affected real modifiers (1=>set, 0=>unset) .TP .I \- affect_virtual mask of virtual modifiers affected by this call .TP .I \- virtual_values values for affected virtual modifiers (1=>set, 0=>unset) .SH DESCRIPTION .LP The core protocol does not provide a way to exclude specific modifiers from grab calculations, with the result that locking modifiers sometimes have unanticipated side effects. The IgnoreLockMods control specifies modifiers that should be excluded from grab calculations. These modifiers are also not reported in any core events except KeyPress and KeyRelease events that do not activate a passive grab and that do not occur while a grab is active. Manipulate the IgnoreLockMods control via the .I ignore_lock field in the XkbControlsRec structure, then use .I XkbSetControls and .I XkbGetControls to query and change this control. Alternatively, use .I XkbSetIgnoreLockMods. .I XkbSetIgnoreLockMods sends a request to the server to change the server's IgnoreLockMods control. .I affect_real and .I real_values are masks of real modifier bits indicating which real modifiers are to be added and removed from the server's IgnoreLockMods control. Modifiers selected by both .I affect_real and .I real_values are added to the server's IgnoreLockMods control; those selected by .I affect_real but not by .I real_values are removed from the server's IgnoreLockMods control. Valid values for .I affect_real and .I real_values consist of any combination of the eight core modifier bits: ShiftMask, LockMask, ControlMask, Mod1Mask - Mod5Mask. .I affect_virtual and .I virtual_values are masks of virtual modifier bits indicating which virtual modifiers are to be added and removed from the server's IgnoreLockMods control. Modifiers selected by both .I affect_virtual and .I virtual_values are added to the server's IgnoreLockMods control; those selected by .I affect_virtual but not by .I virtual_values are removed from the server's IgnoreLockMods control. See below for a discussion of virtual modifier masks to use in .I affect_virtual and .I virtual_values. XkbSetIgnoreLockMods does not wait for a reply from the server. It returns True if the request was sent, and False otherwise. Virtual modifiers are named by converting their string name to an X Atom and storing the Atom in the .I names.vmods array in an XkbDescRec structure. The position of a name Atom in the .I names.vmods array defines the bit position used to represent the virtual modifier and also the index used when accessing virtual modifier information in arrays: the name in the i-th (0 relative) entry of .I names.vmods is the i-th virtual modifier, represented by the mask (1<map->modmap array. If successful, .I XkbGetKeyModifier returns Success. If the map component of the .I xkb parameter has not been allocated, .I XkbGetKeyModifierMap allocates and initializes it. If a compatible version of Xkb is not available in the server or the Xkb extension has not been properly initialized, .I XkbGetKeySyms returns BadAccess. If any allocation errors occur while obtaining the modifier map, .I XkbGetKeyModifierMap returns BadAlloc. .SH DIAGNOSTICS .TP 15 .B BadAccess The Xkb extension has not been properly initialized .TP 15 .B BadAlloc Unable to allocate storage libX11-1.6.3/man/xkb/XkbAllocServerMap.man000064401431060000012000000073231247741723500204430ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAllocServerMap __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAllocServerMap \- Allocate and initialize an empty server map description record .SH SYNOPSIS .HP .B Status XkbAllocServerMap .BI "(\^XkbDescPtr " "xkb" "\^," .BI "unsigned int " "which" "\^," .BI "unsigned int " "count_acts" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb keyboard description in which to allocate server map .TP .I \- which mask selecting map components to allocate .TP .I \- count_acts value of num_acts field in map to be allocated .SH DESCRIPTION .LP .I XkbAllocServerMap allocates and initializes an empty server map in the .I server field of the keyboard description specified by .I xkb. The .I which parameter specifies the particular components of the server map structure to allocate, as specified in Table 1. .TS c s l l l lw(4i). Table 1 XkbAllocServerMap Masks _ Mask Effect _ XkbExplicitComponentsMask T{ The min_key_code and max_key_code fields of the xkb parameter are used to allocate the explicit field of the server map. T} .sp XkbKeyActionsMask T{ The min_key_code and max_key_code fields of the xkb parameter are used to allocate the key_acts field of the server map. The count_acts parameter is used to allocate the acts field of the server map. T} .sp XkbKeyBehaviorsMask T{ The min_key_code and max_key_code fields of the xkb parameter are used to allocate the behaviors field of the server map. T} .sp XkbVirtualModMapMask T{ The min_key_code and max_key_code fields of the xkb parameter are used to allocate the vmodmap field of the server map. T} .TE If the server map of the keyboard description is not NULL and any fields are already allocated in the server map, .I XkbAllocServerMap does not overwrite the existing values. The only exception is with the .I acts array. If the .I count_acts parameter is greater than the current .I num_acts field of the server map, .I XkbAllocServerMap resizes the .I acts array and resets the .I num_acts field accordingly. If .I XkbAllocServerMap is successful, it returns Success. Otherwise, it can return either BadMatch or BadAlloc errors. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadMatch A compatible version of Xkb was not available in the server or an argument has correct type and range, but is otherwise invalid .TP 15 .B BadValue An argument is out of range .SH NOTES .LP The .I min_key_code and .I max_key_code fields of the .I xkb parameter must be legal values. If they are not valid, .I XkbAllocServerMap returns BadValue. libX11-1.6.3/man/xkb/XkbQueryExtension.man000064401431060000012000000102401247741723500205560ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbQueryExtension __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbQueryExtension \- Determines the compatibility of a library at runtime. .SH SYNOPSIS .HP .B Bool XkbQueryExtension .BI "(\^Display *" "dpy" "\^," .BI "int *" "opcode_rtrn" "\^," .BI "int *" "event_rtrn" "\^," .BI "int *" "error_rtrn" "\^," .BI "int *" "major_in_out" "\^," .BI "int *" "minor_in_out" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I dpy connection to the X server .TP .I opcode_rtrn backfilled with the major extension opcode .TP .I event_rtrn backfilled with the extension base event code .TP .I error_rtrn backfilled with the extension base error code .TP .I major_in_out compile time lib major version in, server major version out .TP .I minor_in_out compile time lib min version in, server minor version out .SH DESCRIPTION .LP Call .I XkbQueryExtension to check for the presence and compatibility of the extension in the server and to initialize the extension. Because of potential version mismatches, you cannot use the generic extension mechanism functions ( .I XQueryExtension and .I XInitExtension ) for checking for the presence of, and initializing the Xkb extension. You must call .I XkbQueryExtension or .I XkbOpenDisplay before using any other Xkb library interfaces, unless such usage is explicitly allowed in the interface description in this document. The exceptions are: .I XkbIgnoreExtension, XkbLibraryVersion, and a handful of audible-bell functions. You should not use any other Xkb functions if the extension is not present or is uninitialized. In general, calls to Xkb library functions made prior to initializing the Xkb extension cause BadAccess protocol errors. .I XkbQueryExtension both determines whether a compatible Xkb extension is present in the X server and initializes the extension when it is present. The .I XkbQueryExtension function determines whether a compatible version of the X Keyboard Extension is present in the server. If a compatible extension is present, .I XkbQueryExtension returns True; otherwise, it returns False. If a compatible version of Xkb is present, .I XkbQueryExtension initializes the extension. It backfills the major opcode for the keyboard extension in .I opcode_rtrn, the base event code in .I event_rtrn, the base error code in .I error_rtrn, and the major and minor version numbers of the extension in .I major_in_out and .I minor_in_out. The major opcode is reported in the .I req_major fields of some Xkb events. For a discussion of the base event code. .SH "RETURN VALUES" .TP 15 True The .I XkbQueryExtension function returns True if it determines a compatible version of the X Keyboard Extension is present in the server. .TP 15 False The .I XkbQueryExtension function returns False if it determines a compatible version of the X Keyboard Extension is not present in the server. .SH "SEE ALSO" .BR XkbIgnoreExtension (__libmansuffix__), .BR XkbLibraryVersion (__libmansuffix__), .BR XkbOpenDisplay (__libmansuffix__) ckfilled with the major extension opcode .TP .I event_rtrn backfilled with the extension base event code .TP .I error_rtrn backfilled with the extension base error code .TP .I major_in_out compile time lib major version in, server major version out .TP .I minor_in_out compile time lib min version in, server minor version out .SH DESCRIPTION .LP CalllibX11-1.6.3/man/xkb/XkbDeviceBellEvent.man000064401431060000012000000254421247741723500205660ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbDeviceBellEvent __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbDeviceBellEvent \- Creates a bell event for an X input extension device or for the keyboard, without ringing the corresponding bell .SH SYNOPSIS .HP .B Bool XkbDeviceBellEvent .BI "(\^Display *" "display" "\^," .BI "Window " "window" "\^," .BI "unsigned int " "device_spec" "\^," .BI "unsigned int " "bell_class" "\^," .BI "unsigned int " "bell_id" "\^," .BI "int " "percent" "\^," .BI "Atom " "name" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- display connection to the X server .TP .I \- window event window, or None .TP .I \- device_spec device ID, or XkbUseCoreKbd .TP .I \- bell_class input extension bell class for the event .TP .I \- bell_id input extension bell ID for the event .TP .I \- percent volume for the bell, which can range from -100 to 100 inclusive .TP .I \- name a bell name, or NULL .SH DESCRIPTION .LP The core X protocol allows only applications to explicitly sound the system bell with a given duration, pitch, and volume. Xkb extends this capability by allowing clients to attach symbolic names to bells, disable audible bells, and receive an event whenever the keyboard bell is rung. For the purposes of this document, the .I audible bell is defined to be the system bell, or the default keyboard bell, as opposed to any other audible sound generated elsewhere in the system. You can ask to receive XkbBellNotify events when any client rings any one of the following: .IP \(bu 5 The default bell .IP \(bu 5 Any bell on an input device that can be specified by a bell_class and bell_id pair .IP \(bu 5 Any bell specified only by an arbitrary name. (This is, from the server's point of view, merely a name, and not connected with any physical sound-generating device. Some client application must generate the sound, or visual feedback, if any, that is associated with the name.) You can also ask to receive XkbBellNotify events when the server rings the default bell or if any client has requested events only (without the bell sounding) for any of the bell types previously listed. You can disable audible bells on a global basis. For example, a client that replaces the keyboard bell with some other audible cue might want to turn off the AudibleBell control to prevent the server from also generating a sound and avoid cacophony. If you disable audible bells and request to receive XkbBellNotify events, you can generate feedback different from the default bell. You can, however, override the AudibleBell control by calling one of the functions that force the ringing of a bell in spite of the setting of the AudibleBell control - .I XkbForceDeviceBell or .I XkbForceBell. In this case the server does not generate a bell event. Just as some keyboards can produce keyclicks to indicate when a key is pressed or repeating, Xkb can provide feedback for the controls by using special beep codes. The AccessXFeedback control is used to configure the specific types of operations that generate feedback. Bell Names You can associate a name to an act of ringing a bell by converting the name to an Atom and then using this name when you call the functions listed in this chapter. If an event is generated as a result, the name is then passed to all other clients interested in receiving XkbBellNotify events. Note that these are arbitrary names and that there is no binding to any sounds. Any sounds or other effects (such as visual bells on the screen) must be generated by a client application upon receipt of the bell event containing the name. There is no default name for the default keyboard bell. The server does generate some predefined bells for the AccessX controls. These named bells are shown in the Table 1 below; the name is included in any bell event sent to clients that have requested to receive XkbBellNotify events. .TS c s l l lW(4i) l. Table 1 Predefined Bells _ Action Named Bell _ Indicator turned on AX_IndicatorOn Indicator turned off AX_IndicatorOff More than one indicator changed state AX_IndicatorChange Control turned on AX_FeatureOn Control turned off AX_FeatureOff More than one control changed state AX_FeatureChange T{ SlowKeys and BounceKeys about to be turned on or off T} AX_SlowKeysWarning SlowKeys key pressed AX_SlowKeyPress SlowKeys key accepted AX_SlowKeyAccept SlowKeys key rejected AX_SlowKeyReject Accepted SlowKeys key released AX_SlowKeyRelease BounceKeys key rejected AX_BounceKeyReject StickyKeys key latched AX_StickyLatch StickyKeys key locked AX_StickyLock StickyKeys key unlocked AX_StickyUnlock .TE Audible Bells Using Xkb you can generate bell events that do not necessarily ring the system bell. This is useful if you need to use an audio server instead of the system beep. For example, when an audio client starts, it could disable the audible bell (the system bell) and then listen for XkbBellNotify events. When it receives a XkbBellNotify event, the audio client could then send a request to an audio server to play a sound. You can control the audible bells feature by passing the XkbAudibleBellMask to .I XkbChangeEnabledControls. If you set XkbAudibleBellMask on, the server rings the system bell when a bell event occurs. This is the default. If you set XkbAudibleBellMask off and a bell event occurs, the server does not ring the system bell unless you call .I XkbForceDeviceBell or .I XkbForceBell. Audible bells are also part of the per-client auto-reset controls. Bell Functions Use the functions described in this section to ring bells and to generate bell events. The input extension has two types of feedbacks that can generate bells - bell feedback and keyboard feedback. Some of the functions in this section have .I bell_class and .I bell_id parameters; set them as follows: Set .I bell_class to BellFeedbackClass or KbdFeedbackClass. A device can have more than one feedback of each type; set .I bell_id to the particular bell feedback of .I bell_class type. Table 2 shows the conditions that cause a bell to sound or an XkbBellNotifyEvent to be generated when a bell function is called. .TS c s s s l l l l l l l l. Table 2 Bell Sounding and Bell Event Generating _ Function called AudibleBell Server sounds a bell Server sends an XkbBellNotifyEvent _ XkbDeviceBell On Yes Yes XkbDeviceBell Off No Yes XkbBell On Yes Yes XkbBell Off No Yes XkbDeviceBellEvent On or Off No Yes XkbBellEvent On or Off No Yes XkbDeviceForceBell On or Off Yes No XkbForceBell On or Off Yes No .TE If a compatible keyboard extension isn't present in the X server, .I XkbDeviceBellEvent immediately returns False. Otherwise, .I XkbDeviceBellEvent causes an XkbBellNotify event to be sent to all interested clients and returns True. Set .I percent to be the volume relative to the base volume for the keyboard as described for .I XBell. In addition, .I XkbDeviceBellEvent may generate Atom protocol errors as well as XkbBellNotify events. You can call .I XkbBell without first initializing the keyboard extension. .SH "RETURN VALUES" .TP 15 True The .I XkbDeviceBellEvent sends an XkbBellNotify event to to all interested clients and returns True. .TP 15 False If a compatible keyboard extension isn't present in the X server, .I XkbDeviceBellEvent immediately returns False .SH STRUCTURES .TP Xkb generates XkbBellNotify events for all bells except for those resulting from calls to .I XkbForceDeviceBell and .I XkbForceBell. To receive XkbBellNotify events under all possible conditions, pass XkbBellNotifyMask in both the .I bits_to_change and .I values_for_bits parameters to .I XkbSelectEvents. The XkbBellNotify event has no event details. It is either selected or it is not. However, you can call .I XkbSelectEventDetails using XkbBellNotify as the .I event_type and specifying XkbAllBellNotifyMask in .I bits_to_change and .I values_for_bits. This has the same effect as a call to .I XkbSelectEvents. The structure for the XkbBellNotify event type contains: .nf typedef struct _XkbBellNotify { int type; /\(** Xkb extension base event code */ unsigned long serial; /\(** X server serial number for event */ Bool send_event; /\(** True => synthetically generated */ Display * display; /\(** server connection where event generated */ Time time; /\(** server time when event generated */ int xkb_type; /\(** XkbBellNotify */ unsigned int device; /\(** Xkb device ID, will not be XkbUseCoreKbd */ int percent; /\(** requested volume as % of max */ int pitch; /\(** requested pitch in Hz */ int duration; /\(** requested duration in microseconds */ unsigned int bell_class; /\(** X input extension feedback class */ unsigned int bell_id; /\(** X input extension feedback ID */ Atom name; /\(** "name" of requested bell */ Window window; /\(** window associated with event */ Bool event_only; /\(** False -> the server did not produce a beep */ } XkbBellNotifyEvent; .fi If your application needs to generate visual bell feedback on the screen when it receives a bell event, use the window ID in the XkbBellNotifyEvent, if present. .SH "SEE ALSO" .BR XBell (__libmansuffix__), .BR XkbBellNotify (__libmansuffix__), .BR XkbChangeEnabledControls (__libmansuffix__), .BR XkbDeviceBell (__libmansuffix__), .BR XkbForceBell (__libmansuffix__), .BR XkbForceDeviceBell (__libmansuffix__), .BR XkbSelectEvents (__libmansuffix__), .BR XkbSelectEventDetails (__libmansuffix__), .BR XkbUseCoreKbd (__libmansuffix__) dible bells on a global basis. For example, a client that replaces the keyboard bell with some other audible cue might want to turn off the AudibleBell control to prevent the server from also generating a sound and avolibX11-1.6.3/man/xkb/XkbKeySymEntry.man000064401431060000012000000051771247741723500200340ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbKeySymEntry __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbKeySymEntry \- Returns the keysym corresponding to shift level .I shift and group .I grp from the two-dimensional array of keysyms for the key corresponding to .I keycode .SH SYNOPSIS .HP .B KeySym XkbKeySymEntry .BI "(\^XkbDescPtr " "xkb" "\^," .BI "KeyCode " "keycode" "\^," .BI "int " "shift" "\^," .BI "int " "grp" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb Xkb description of interest .TP .I \- keycode keycode of interest .TP .I \- shift shift level of interest .TP .I \- grp group of interest .SH DESCRIPTION .LP The key width and number of groups associated with a key are used to form a small two-dimensional array of KeySyms for a key. This array may be different sizes for different keys. The array for a single key is stored as a linear list, in row-major order. The arrays for all of the keys are stored in the .I syms field of the client map. There is one row for each group associated with a key and one column for each level. The index corresponding to a given group and shift level is computed as: .nf idx = group_index * key_width + shift_level .fi The .I offset field of the .I key_sym_map entry for a key is used to access the beginning of the array. .I XkbKeySymEntry returns the keysym corresponding to shift level .I shift and group .I grp from the two-dimensional array of keysyms for the key corresponding to .I keycode. libX11-1.6.3/man/xkb/XkbAddGeomOverlayRow.man000064401431060000012000000064261247741723500211210ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAddGeomOverlayRow __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAddGeomOverlayRow \- Add a row to an existing overlay .SH SYNOPSIS .HP .B XkbOverlayRowPtr XkbAddGeomOverlayRow .BI "(\^XkbOverlayPtr " "overlay" "\^," .BI "XkbRowPtr " "row_under" "\^," .BI "int " "sz_keys" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- overlay overlay to be updated .TP .I \- row_under row to be overlayed in the section overlay overlays .TP .I \- sz_keys number of keys to reserve in the row .SH DESCRIPTION .LP Xkb provides functions to add a single new element to the top-level keyboard geometry. In each case the .I num_ * fields of the corresponding structure is incremented by 1. These functions do not change .I sz_* unless there is no more room in the array. Some of these functions fill in the values of the element's structure from the arguments. For other functions, you must explicitly write code to fill the structure's elements. The top-level geometry description includes a list of .I geometry properties. A geometry property associates an arbitrary string with an equally arbitrary name. Programs that display images of keyboards can use geometry properties as hints, but they are not interpreted by Xkb. No other geometry structures refer to geometry properties. .I XkbAddGeomOverlayRow adds one row to the .I overlay. The new row contains space for .I sz_keys keys. If . I row_under specifies a row that doesn't exist on the underlying section, .I XkbAddGeomOverlayRow returns NULL and doesn't change the overlay. .I XkbAddGeomOverlayRow returns NULL if any of the parameters is empty or if it was not able to allocate space for the overlay. .SH STRUCTURES .LP .nf typedef struct _XkbOverlayRow { unsigned short row_under; /\(** index into the row under this overlay row */ unsigned short num_keys; /\(** number of keys in the keys array */ unsigned short sz_keys; /\(** size of the keys array */ XkbOverlayKeyPtr keys; /\(** array of keys in the overlay row */ } XkbOverlayRowRec,*XkbOverlayRowPtr; .fi " IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, .\" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL .\" THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER .\"libX11-1.6.3/man/xkb/XkbFreeGeomKeyAliases.man000064401431060000012000000055011247741723500212240ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbFreeGeomKeyAliases __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbFreeGeomKeyAliases \- Free geometry key aliases .SH SYNOPSIS .HP .B void XkbFreeGeomKeyAliases .BI "(\^XkbGeometryPtr " "geom" "\^," .BI "int " "first" "\^," .BI "int " "count" "\^," .BI "Bool " "free_all" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- geom geometry in which key aliases should be freed .TP .I \- first first key alias to be freed .TP .I \- count number of key aliases to be freed .TP .I \- free_all True => all key aliases are freed .SH DESCRIPTION .LP Xkb provides a number of functions to allocate and free subcomponents of a keyboard geometry. Use these functions to create or modify keyboard geometries. Note that these functions merely allocate space for the new element(s), and it is up to you to fill in the values explicitly in your code. These allocation functions increase .I sz_* but never touch .I num_* (unless there is an allocation failure, in which case they reset both .I sz_* and .I num_* to zero). These functions return Success if they succeed, BadAlloc if they are not able to allocate space, or BadValue if a parameter is not as expected. If .I free_all is True, all aliases in the top level of the specified geometry .I geom are freed regardless of the value of .I first or .I count. Otherwise, .I count aliases in .I geom are freed beginning with the one specified by .I first. .SH "RETURN VALUES" .TP 15 Success The XkbFreeGeomKeyAliases function returns Success if there are no allocation errors. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadValue An argument is out of range libX11-1.6.3/man/xkb/XkbAllocGeomShapes.man000064401431060000012000000051061247741723500205670ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAllocGeomShapes __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAllocGeomShapes \- Allocate space for an arbitrary number of geometry shapes .SH SYNOPSIS .HP .B Status XkbAllocGeomShapes .BI "(\^XkbGeometryPtr " "geom" "\^," .BI "int " "num_needed" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- geom geometry for which shapes should be allocated .TP .I \- num_needed number of new shapes required .SH DESCRIPTION .LP Xkb provides a number of functions to allocate and free subcomponents of a keyboard geometry. Use these functions to create or modify keyboard geometries. Note that these functions merely allocate space for the new element(s), and it is up to you to fill in the values explicitly in your code. These allocation functions increase .I sz_* but never touch .I num_* (unless there is an allocation failure, in which case they reset both .I sz_* and .I num_* to zero). These functions return Success if they succeed, BadAlloc if they are not able to allocate space, or BadValue if a parameter is not as expected. .I XkbAllocGeomShapes allocates space for .I num_needed shapes in the specified geometry .I geom. The shapes are not initialized. To free geometry shapes, use .I XkbFreeGeomShapes. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadValue An argument is out of range .SH "SEE ALSO" .BR XkbFreeGeomShapes (__libmansuffix__) libX11-1.6.3/man/xkb/XkbSelectEventDetails.man000064401431060000012000000126161247741723500213140ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbSelectEventDetails __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbSelectEventDetails \- Selects or deselects for a specific Xkb event and optionally places conditions on when events of that type are reported to your client .SH SYNOPSIS .HP .B Bool XkbSelectEventDetails .BI "(\^Display *" "display" "\^," .BI "unsigned int " "device_spec" "\^," .BI "unsigned int " "event_type" "\^," .BI "unsigned long int " "bits_to_change" "\^," .BI "unsigned long int " "values_for_bits" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I display connection to the X server .TP .I device_spec device ID, or XkbUseCoreKbd .TP .I event_type Xkb event type of interest .TP .I bits_to_change determines events to be selected / deselected .TP .I values_for_bits 1=>select, 0->deselect; for events in bits_to_change .SH DESCRIPTION .LP Xkb events are selected using an event mask, much the same as normal core X events are selected. However, unlike selecting core X events, where you must specify the selection status (on or off) for all possible event types whenever you wish to change the selection criteria for any one event, Xkb allows you to restrict the specification to only the event types you wish to change. This means that you do not need to remember the event selection values for all possible types each time you want to change one of them. Many Xkb event types are generated under several different circumstances. When selecting to receive an Xkb event, you may specify either that you want it delivered under all circumstances, or that you want it delivered only for a subset of the possible circumstances. You can also deselect an event type that was previously selected for, using the same granularity. Xkb provides two functions to select and deselect delivery of Xkb events. .I XkbSelectEvents allows you to select or deselect delivery of more than one Xkb event type at once. Events selected using .I XkbSelectEvents are delivered to your program under all circumstances that generate the events. To restrict delivery of an event to a subset of the conditions under which it occurs, use .I XkbSelectEventDetails. XkbSelectEventDetails only allows you to change the selection conditions for a single event at a time, but it provides a means of fine-tuning the conditions under which the event is delivered. To select or deselect for a specific Xkb event and optionally place conditions on when events of that type are reported to your client, use .I XkbSelectEventDetails. This allows you to exercise a finer granularity of control over delivery of Xkb events with .I XkbSelectEvents. While .I XkbSelectEvents allows multiple events to be selected, .I XkbSelectEventDetails changes the selection criteria for a single type of Xkb event. The interpretation of the .I bits_to_change and .I values_for_bits masks depends on the event type in question. .I XkbSelectEventDetails changes the Xkb event selection mask for the keyboard specified by .I device_spec and the Xkb event specified by .I event_type. To turn on event selection for an event detail, set the bit for the detail in the .I bits_to_change parameter and set the corresponding bit in the .I values_for_bits parameter. To turn off event detail selection for a detail, set the bit for the detail in the .I bits_to_change parameter and do not set the corresponding bit in the .I values_for_bits parameter. If an invalid event type is specified, a BadValue protocol error results. If a bit is not set in the .I bits_to_change parameter, but the corresponding bit is set in the .I values_for_bits parameter, a BadMatch protocol error results. If an undefined bit is set in either the .I bits_to_change or the .I values_for_bits parameter, a BadValue protocol error results. For each type of Xkb event, the legal event details that you can specify in the .I XkbSelectEventDetails request are listed in the chapters that describe each event in detail. .SH DIAGNOSTICS .TP 15 .SM BadMatch A compatible version of Xkb was not available in the server or an argument has correct type and range, but is otherwise invalid .TP 15 .SM BadValue An argument is out of range .SH "SEE ALSO" .BR XkbSelectEvents (__libmansuffix__), .BR XkbUseCoreKbd (__libmansuffix__) libX11-1.6.3/man/xkb/XkbIgnoreExtension.man000064401431060000012000000061271247741723500207050ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbIgnoreExtension __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbIgnoreExtension \- Prevents core X library keyboard functions from using the X Keyboard Extension .SH SYNOPSIS .HP .B Bool XkbIgnoreExtension .BI "(\^Bool *" "ignore" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I ignore True means ignore the extension .SH DESCRIPTION .LP If a server supports the Xkb extension, the X library normally implements preXkb keyboard functions using the Xkb keyboard description and state. The server Xkb keyboard state may differ from the preXkb keyboard state. This difference does not affect most clients, but there are exceptions. To allow these clients to work properly, you may instruct the extension not to use Xkb functionality. Call .I XkbIgnoreExtension to prevent core X library keyboard functions from using the X Keyboard Extension. You must call .I XkbIgnoreExtension before you open a server connection; Xkb does not provide a way to enable or disable use of the extension once a connection is established. .I XkbIgnoreExtension tells the X library whether to use the X Keyboard Extension on any subsequently opened X display connections. If ignore is True, the library does not initialize the Xkb extension when it opens a new display. This forces the X server to use compatibility mode and communicate with the client using only core protocol requests and events. If ignore is False, the library treats subsequent calls to .I XOpenDisplay normally and uses Xkb extension requests, events, and state. Do not explicitly use Xkb on a connection for which it is disabled. .I XkbIgnoreExtension returns False if it was unable to apply the ignore request. .SH "RETURN VALUES" .TP 15 True The .I XkbIgnoreExtension returns True if .TP 15 False The .I XkbIgnoreExtension function returns False if it was unable to apply the ignore request. .SH "SEE ALSO" .BR XOpenDisplay (__libmansuffix__) libX11-1.6.3/man/xkb/XkbGetKeySyms.man000064401431060000012000000057261247741723500176350ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbGetKeySyms __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbGetKeySyms \- Obtain the symbols for a subset of the keys in a keyboard description .SH SYNOPSIS .HP .B Status XkbGetKeySyms .BI "(\^Display *" "dpy" "\^," .BI "unsigned int " "first" "\^," .BI "unsigned int " "num" "\^," .BI "XkbDescPtr " "xkb" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to X server .TP .I \- first keycode of first key to get .TP .I \- num number of keycodes for which syms desired .TP .I \- xkb Xkb description to be updated .SH DESCRIPTION .LP .I XkbGetKeySyms sends a request to the server to obtain the set of keysyms bound to .I num keys starting with the key whose keycode is .I first. It waits for a reply and returns the keysyms in the .I map.syms field of .I xkb. If successful, .I XkbGetKeySyms returns Success. The .I xkb parameter must be a pointer to a valid Xkb keyboard description. If the client .I map in the xkb parameter has not been allocated, .I XkbGetKeySyms allocates and initializes it before obtaining the symbols. If a compatible version of Xkb is not available in the server or the Xkb extension has not been properly initialized, .I XkbGetKeySyms returns BadAccess. If .I num is less than 1 or greater than XkbMaxKeyCount, .I XkbGetKeySyms returns BadValue. If any allocation errors occur, .I XkbGetKeySyms returns BadAlloc. .SH "RETURN VALUES" .TP 15 Success The .I XkbGetKeySyms function returns Success if it gets a reply to a request to the server to obtain the set of keysyms bound to .I num keys starting with the key whose keycode is .I first. .SH DIAGNOSTICS .TP 15 .B BadAccess The Xkb extension has not been properly initialized .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadValue An argument is out of range num" "\^," .BI "XkbDescPtr " "xkb" "\^);" libX11-1.6.3/man/xkb/XkbComputeRowBounds.man000064401431060000012000000036021247741723500210370ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbComputeRowBounds __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbComputeRowBounds \- Update the bounding box of a row .SH SYNOPSIS .HP .B Bool XkbComputeRowBounds .BI "(\^XkbGeometryPtr " "geom" "\^," .BI "XkbSectionPtr " "section" "\^," .BI "XkbRowPtr " "row" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- geom geometry that contains the section .TP .I \- section section that contains the row .TP .I \- row row to be examined and updated .SH DESCRIPTION .LP .I XkbComputeRowBounds checks the bounds of all keys in the .I row and updates the bounding box of the row if necessary. .I XkbComputeRowBounds returns False if any of the arguments is NULL; otherwise, it returns True. libX11-1.6.3/man/xkb/XkbGetControls.man000064401431060000012000000110441247741723500200220ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbGetControls __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbGetControls \- Finds the current state of Xkb server controls .SH SYNOPSIS .HP .B Status XkbGetControls .BI "(\^Display *" "display" "\^," .BI "unsigned long " "which" "\^," .BI "XkbDescPtr " "xkb" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- display connection to X server .TP .I \- which mask of controls requested .TP .I \- xkb keyboard description for controls information .SH DESCRIPTION .LP .I XkbGetControls queries the server for the requested control information, waits for a reply, and then copies the server's values for the requested information into the .I ctrls structure of the .I xkb argument. Only those components specified by the .I which parameter are copied. Valid values for .I which are any combination of the masks listed in Table 1 that have "ok" in the .I which column. Table 1 shows the actual values for the individual mask bits used to select controls for modification and to enable and disable the control. Note that the same mask bit is used to specify general modifications to the parameters used to configure the control (which), and to enable and disable the control (enabled_ctrls). The anomalies in Table 1 (no "ok" in column) are for controls that have no configurable attributes; and for controls that are not boolean controls and therefore cannot be enabled or disabled. .TS c s s s l l l l l l l l l l l l. Table 1 Controls Mask Bits _ Mask Bit which or enabled Value changed_ctrls _ctrls _ XkbRepeatKeysMask ok ok (1L<<0) XkbSlowKeysMask ok ok (1L<<1) XkbBounceKeysMask ok ok (1L<<2) XkbStickyKeysMask ok ok (1L<<3) XkbMouseKeysMask ok ok (1L<<4) XkbMouseKeysAccelMask ok ok (1L<<5) XkbAccessXKeysMask ok ok (1L<<6) XkbAccessXTimeoutMask ok ok (1L<<7) XkbAccessXFeedbackMask ok ok (1L<<8) XkbAudibleBellMask ok (1L<<9) XkbOverlay1Mask ok (1L<<10) XkbOverlay2Mask ok (1L<<11) XkbIgnoreGroupLockMask ok (1L<<12) XkbGroupsWrapMask ok (1L<<27) XkbInternalModsMask ok (1L<<28) XkbIgnoreLockModsMask ok (1L<<29) XkbPerKeyRepeatMask ok (1L<<30) XkbControlsEnabledMask ok (1L<<31) XkbAccessXOptionsMask ok ok (XkbStickyKeysMask | XkbAccessXFeedbackMask) XkbAllBooleanCtrlsMask ok (0x00001FFF) XkbAllControlsMask ok (0xF8001FFF) .TE If .I xkb->ctrls is NULL, .I XkbGetControls allocates and initializes it before obtaining the values specified by .I which. If .I xkb->ctrls is not NULL, .I XkbGetControls modifies only those portions of .I xkb->ctrls corresponding to the values specified by .I which. .I XkbGetControls returns Success if successful; otherwise, it returns BadAlloc if it cannot obtain sufficient storage, BadMatch if .I xkb is NULL or .I which is empty, or BadImplementation. To free the .I ctrls member of a keyboard description, use .I XkbFreeControls. The .I num_groups field in the .I ctrls structure is always filled in by .I XkbGetControls, regardless of which bits are selected by .I which. .SH "RETURN VALUES" .TP 15 Success The .I XkbGetControls function returns Success if successful. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadImplementation Invalid reply from server .TP 15 .B BadMatch A compatible version of Xkb was not available in the server or an argument has correct type and range, but is otherwise invalid .SH "SEE ALSO" .BR XkbFreeControls (__libmansuffix__) libX11-1.6.3/man/xkb/XkbRefreshKeyboardMapping.man000064401431060000012000000052671247741723500221640ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbRefreshKeyboardMapping __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbRefreshKeyboardMapping \- Update the keyboard description that is internal to the X library .SH SYNOPSIS .HP .B Status XkbRefreshKeyboardMapping .BI "(\^XkbMapNotifyEvent *" "event" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- event event initiating remapping .SH DESCRIPTION .LP .I XkbRefreshKeyboardMapping is the Xkb equivalent of the core .I XRefreshKeyboardMapping function. It requests that the X server send the current key mapping information to this client. A client usually invokes .I XkbRefreshKeyboardMapping after receiving an XkbMapNotify event. .I XkbRefreshKeyboardMapping returns Success if it succeeds and BadMatch if the event is not an Xkb event. The XkbMapNotify event can be generated when some client calls .I XkbSetMap, XkbChangeMap, XkbGetKeyboardByName, or any of the standard X library functions that change the keyboard mapping or modifier mapping. .SH "RETURN VALUES" .TP 15 Success The .I XkbRefreshKeyboardMapping function returns Success when the request that the X server send the current key mapping information to this client is successful. .SH DIAGNOSTICS .TP 15 .B BadMatch A compatible version of Xkb was not available in the server or an argument has correct type and range, but is otherwise invalid .SH "SEE ALSO" .BR XkbChangeMap (__libmansuffix__), .BR XkbGetKeyboardByName (__libmansuffix__), .BR XkbSetMap (__libmansuffix__), .BR XRefreshKeyboardMapping (__libmansuffix__) libX11-1.6.3/man/xkb/XkbAllocControls.man000064401431060000012000000105761247741723500203460ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAllocControls __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAllocControls \- Allocates an XkbControlsRec structure in the XkbDescRec .SH SYNOPSIS .HP .B Status XkbAllocControls .BI "(\^XkbDescPtr " "xkb" "\^," .BI "unsigned int " "which" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb Xkb description in which to allocate ctrls rec .TP .I \- which mask of components of ctrls to allocate .SH DESCRIPTION .LP The need to allocate an XkbControlsRec structure seldom arises; Xkb creates one when an application calls .I XkbGetControls or a related function. For those situations where there is not an XkbControlsRec structure allocated in the XkbDescRec, allocate one by calling .I XkbAllocControls. .I XkbAllocControls allocates the .I ctrls field of the .I xkb parameter, initializes all fields to zero, and returns Success. If the .I ctrls field is not NULL, .I XkbAllocControls simply returns Success. If .I xkb is NULL, .I XkbAllocControls reports a BadMatch error. If the .I ctrls field could not be allocated, it reports a BadAlloc error. The .I which mask specifies the individual fields of the .I ctrls structure to be allocated and can contain any of the valid masks defined in Table 1. (SHOULD THIS COMMENT BE LEFT IN????) Because none of the currently existing controls have any structures associated with them, which is currently of little practical value in this call. Table 1 shows the actual values for the individual mask bits used to select controls for modification and to enable and disable the control. Note that the same mask bit is used to specify general modifications to the parameters used to configure the control (which), and to enable and disable the control (enabled_ctrls). The anomalies in the table (no "ok" in column) are for controls that have no configurable attributes; and for controls that are not boolean controls and therefore cannot be enabled or disabled. .TS c s s s l l l l l l l l l l l l. Table 1 Controls Mask Bits _ Mask Bit which or enabled Value changed_ctrls _ctrls _ XkbRepeatKeysMask ok ok (1L<<0) XkbSlowKeysMask ok ok (1L<<1) XkbBounceKeysMask ok ok (1L<<2) XkbStickyKeysMask ok ok (1L<<3) XkbMouseKeysMask ok ok (1L<<4) XkbMouseKeysAccelMask ok ok (1L<<5) XkbAccessXKeysMask ok ok (1L<<6) XkbAccessXTimeoutMask ok ok (1L<<7) XkbAccessXFeedbackMask ok ok (1L<<8) XkbAudibleBellMask ok (1L<<9) XkbOverlay1Mask ok (1L<<10) XkbOverlay2Mask ok (1L<<11) XkbIgnoreGroupLockMask ok (1L<<12) XkbGroupsWrapMask ok (1L<<27) XkbInternalModsMask ok (1L<<28) XkbIgnoreLockModsMask ok (1L<<29) XkbPerKeyRepeatMask ok (1L<<30) XkbControlsEnabledMask ok (1L<<31) XkbAccessXOptionsMask ok ok (XkbStickyKeysMask | XkbAccessXFeedbackMask) XkbAllBooleanCtrlsMask ok (0x00001FFF) XkbAllControlsMask ok (0xF8001FFF) .TE .nh .SH "RETURN VALUES" .TP 15 SUCCESS allocates the ctrls field of the xkb parameter, initializes all fields to zero .sp .in 20 the ctrls field is not NULL .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadMatch A compatible version of Xkb was not available in the server or an argument has correct type and range, but is otherwise invalid .SH "SEE ALSO" .BR XkbGetControls (__libmansuffix__) libX11-1.6.3/man/xkb/XkbGetIndicatorState.man000064401431060000012000000062501247741723500211370ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbGetIndicatorState __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbGetIndicatorState \- Obtains the current state of the keyboard indicators .SH SYNOPSIS .HP .B Status XkbGetIndicatorState .BI "(\^Display *" "display" "\^," .BI "unsigned int " "device_spec" "\^," .BI "unsigned int " "state_return" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- display connection to the X server .TP .I \- device_spec device ID, or XkbUseCoreKbd .TP .I \- state_return backfilled with a mask of the indicator state .SH DESCRIPTION .LP Xkb allows applications to obtain information about indicators using two different methods. The first method, which is similar to the core X implementation, uses a mask to specify the indicators. The second method, which is more suitable for applications concerned with interoperability, uses indicator names. The correspondence between the indicator name and the bit position in masks is as follows: one of the parameters returned from .I XkbGetNamedIndicators is an index that is the bit position to use in any function call that requires a mask of indicator bits, as well as the indicator's index into the XkbIndicatorRec array of indicator maps. .I XkbGetIndicatorState queries the .I display for the state of the indicators on the device specified by the .I device_spec. For each indicator that is "turned on" on the device, the associated bit is set in .I state_return. If a compatible version of the Xkb extension is not available in the server, .I XkbGetIndicatorState returns a BadMatch error. Otherwise, it sends the request to the X server, places the state of the indicators into .I state_return, and returns Success. Thus the value reported by .I XkbGetIndicatorState is identical to the value reported by the core protocol. .SH DIAGNOSTICS .TP 15 .B BadMatch A compatible version of Xkb was not available in the server or an argument has correct type and range, but is otherwise invalid .SH "SEE ALSO" .BR XkbGetNamedIndicators (__libmansuffix__) libX11-1.6.3/man/xkb/XkbSetServerInternalMods.man000064401431060000012000000166531247741723500220340ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbSetServerInternalMods __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbSetServerInternalMods \- Sets the modifiers that are consumed by the server before events are delivered to the client .SH SYNOPSIS .HP .B Bool XkbSetServerInternalMods .BI "(\^Display *" "display" "\^," .BI "unsigned int " "device_spec" "\^," .BI "unsigned int " "affect_real" "\^," .BI "unsigned int " "real_values" "\^," .BI "unsigned int " "affect_virtual" "\^," .BI "unsigned int " "virtual_values" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- display connection to the X server .TP .I \- device_spec device ID, or XkbUseCoreKbd .TP .I \- affect_real mask of real modifiers affected by this call .TP .I \- real_values values for affected real modifiers (1=>set, 0=>unset) .TP .I \- affect_virtual mask of virtual modifiers affected by this call .TP .I \- virtual_values values for affected virtual modifiers (1=>set, 0=>unset) .SH DESCRIPTION .LP The core protocol does not provide any means to prevent a modifier from being reported in events sent to clients; Xkb, however makes this possible via the InternalMods control. It specifies modifiers that should be consumed by the server and not reported to clients. When a key is pressed and a modifier that has its bit set in the InternalMods control is reported to the server, the server uses the modifier when determining the actions to apply for the key. The server then clears the bit, so it is not actually reported to the client. In addition, modifiers specified in the InternalMods control are not used to determine grabs and are not used to calculate core protocol compatibility state. Manipulate the InternalMods control via the .I internal field in the XkbControlsRec structure, using .I XkbSetControls and .I XkbGetControls. Alternatively, use .I XkbSetServerInternalMods. .I XkbSetServerInternalMods sends a request to the server to change the internal modifiers consumed by the server. .I affect_real and .I real_values are masks of real modifier bits indicating which real modifiers are to be added and removed from the server's internal modifiers control. Modifiers selected by both .I affect_real and .I real_values are added to the server's internal modifiers control; those selected by .I affect_real but not by .I real_values are removed from the server's internal modifiers mask. Valid values for .I affect_real and .I real_values consist of any combination of the eight core modifier bits: ShiftMask, LockMask, ControlMask, Mod1Mask - Mod5Mask. .I affect_virtual and .I virtual_values are masks of virtual modifier bits indicating which virtual modifiers are to be added and removed from the server's internal modifiers control. Modifiers selected by both .I affect_virtual and .I virtual_values are added to the server's internal modifiers control; those selected by .I affect_virtual but not by .I virtual_values are removed from the server's internal modifiers control. See below for a discussion of virtual modifier masks to use in .I affect_virtual and .I virtual_values. XkbSetServerInternalMods does not wait for a reply from the server. It returns True if the request was sent and False otherwise. Virtual modifiers are named by converting their string name to an X Atom and storing the Atom in the .I names.vmods array in an XkbDescRec structure. The position of a name Atom in the .I names.vmods array defines the bit position used to represent the virtual modifier and also the index used when accessing virtual modifier information in arrays: the name in the i-th (0 relative) entry of .I names.vmods is the i-th virtual modifier, represented by the mask (1<type[first_type] .. num_types map->type[first_type + num_types - 1] .sp XkbKeySymsMask first_key_sym, map->key_sym_map[first_key_sym] .. num_key_syms map->key_sym_map[first_key_sym + num_key_syms - 1] XkbModifierMapMask first_modmap_key, map->modmap[first_modmap_key] .. num_modmap_keys map->modmap[first_modmap_key + num_modmap_keys-1] XkbExplicitComponentsMask first_key_explicit, server->explicit[first_key_explicit] .. num_key_explicit server->explicit[first_key_explicit + num_key_explicit - 1] XkbKeyActionsMask first_key_act, server->key_acts[first_key_act] .. num_key_acts server->key_acts[first_key_act + num_key_acts - 1] XkbKeyBehaviorsMask first_key_behavior, server->behaviors[first_key_behavior] .. num_key_behaviors server->behaviors[first_key_behavior + num_key_behaviors - 1] XkbVirtualModsMask vmods server->vmods[*] XkbVirtualModMapMask first_vmodmap_key, server->vmodmap[first_vmodmap_key] num_vmodmap_keys .. server->vmodmap[first_vmodmap_key + num_vmodmap_keys - 1] .TE .SH "RETURN VALUES" .TP 15 True The .I XkbSetMap function returns True all components specified by .I which are present in the .I xkb parameter. .TP 15 False The .I XkbSetMap function returns False if any component specified by .I which is not present in the .I xkb parameter. .SH STRUCTURES .LP Use the XkbMapChangesRec structure to identify and track partial modifications to the mapping components and to reduce the amount of traffic between the server and clients. .nf typedef struct _XkbMapChanges { unsigned short changed; /\(** identifies valid components in structure */ KeyCode min_key_code; /\(** lowest numbered keycode for device */ KeyCode max_key_code; /\(** highest numbered keycode for device */ unsigned char first_type; /\(** index of first key type modified */ unsigned char num_types; /\(** # types modified */ KeyCode first_key_sym; /\(** first key whose key_sym_map changed */ unsigned char num_key_syms; /\(** # key_sym_map entries changed */ KeyCode first_key_act; /\(** first key whose key_acts entry changed */ unsigned char num_key_acts; /\(** # key_acts entries changed */ KeyCode first_key_behavior; /\(** first key whose behaviors changed */ unsigned char num_key_behaviors; /\(** # behaviors entries changed */ KeyCode first_key_explicit; /\(** first key whose explicit entry changed */ unsigned char num_key_explicit; /\(** # explicit entries changed */ KeyCode first_modmap_key; /\(** first key whose modmap entry changed */ unsigned char num_modmap_keys; /\(** # modmap entries changed */ KeyCode first_vmodmap_key; /\(** first key whose vmodmap changed */ unsigned char num_vmodmap_keys; /\(** # vmodmap entries changed */ unsigned char pad1; /\(** reserved */ unsigned short vmods; /\(** mask indicating which vmods changed */ } XkbMapChangesRec,*XkbMapChangesPtr; .fi The complete description of an Xkb keyboard is given by an XkbDescRec. The component structures in the XkbDescRec represent the major Xkb components. .nf typedef struct { struct _XDisplay * display; /\(** connection to X server */ unsigned short flags; /\(** private to Xkb, do not modify */ unsigned short device_spec; /\(** device of interest */ KeyCode min_key_code; /\(** minimum keycode for device */ KeyCode max_key_code; /\(** maximum keycode for device */ XkbControlsPtr ctrls; /\(** controls */ XkbServerMapPtr server; /\(** server keymap */ XkbClientMapPtr map; /\(** client keymap */ XkbIndicatorPtr indicators; /\(** indicator map */ XkbNamesPtr names; /\(** names for all components */ XkbCompatMapPtr compat; /\(** compatibility map */ XkbGeometryPtr geom; /\(** physical geometry of keyboard */ } XkbDescRec, *XkbDescPtr; .fi The .I display field points to an X display structure. The .I flags field is private to the library: modifying .I flags may yield unpredictable results. The .I device_spec field specifies the device identifier of the keyboard input device, or XkbUseCoreKeyboard, which specifies the core keyboard device. The .I min_key_code and .I max_key_code fields specify the least and greatest keycode that can be returned by the keyboard. Each structure component has a corresponding mask bit that is used in function calls to indicate that the structure should be manipulated in some manner, such as allocating it or freeing it. These masks and their relationships to the fields in the XkbDescRec are shown in Table 3. .bp .TS c s s l l l l l l. Table 3 Mask Bits for XkbDescRec _ Mask Bit XkbDescRec Field Value _ XkbControlsMask ctrls (1L<<0) XkbServerMapMask server (1L<<1) XkbIClientMapMask map (1L<<2) XkbIndicatorMapMask indicators (1L<<3) XkbNamesMask names (1L<<4) XkbCompatMapMask compat (1L<<5) XkbGeometryMask geom (1L<<6) XkbAllComponentsMask All Fields (0x7f) .TE .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadLength The length of a request is shorter or longer than that required to minimally contain the arguments .TP 15 .B BadValue An argument is out of range .SH "SEE ALSO" .BR XkbChangeMap (__libmansuffix__), .BR XkbChangeTypesOfKey (__libmansuffix__), .BR XkbCopyKeyType (__libmansuffix__), .BR XkbCopyKeyTypes (__libmansuffix__), .BR XkbGetKeyActions (__libmansuffix__), .BR XkbGetKeyBehaviors (__libmansuffix__), .BR XkbGetKeyExplicitComponents (__libmansuffix__), .BR XkbGetKeyModifierMap (__libmansuffix__), .BR XkbGetKeySyms (__libmansuffix__), .BR XkbGetKeyTypes (__libmansuffix__), .BR XkbResizeKeyActions (__libmansuffix__), .BR XkbResizeKeySyms (__libmansuffix__), .BR XkbResizeKeyType (__libmansuffix__), .BR XkbGetVirtualModMap (__libmansuffix__), .BR XkbGetVirtualMods (__libmansuffix__) XKB FUNCTIONS" .SH NAME XkbSetMap \- Send a complete new set of values for entire components to the server. .SH SYNOPSIS .HP .B Bool XkbSetMap .BI "(\^Display *" "dpy" "\^," .BI "unsigned int " "which" "\^," .BI "XkbDescPtr " "xkb" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMlibX11-1.6.3/man/xkb/XkbFreeCompatMap.man000064401431060000012000000126341247741723500202500ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbFreeCompatMap __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbFreeCompatMap \- Free an entire compatibility map or selected portions of one .SH SYNOPSIS .HP .B void XkbFreeCompatMap .BI "(\^XkbDescPtr " "xkb" "\^," .BI "unsigned int " "which" "\^," .BI "Bool " "free_map" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb Xkb description in which to free compatibility map .TP .I \- which mask of compatibility map components to free .TP .I \- free_map True => free XkbCompatMap structure itself .SH DESCRIPTION .LP .I which specifies the compatibility map components to be freed (see XkbGetCompatMap). .I which is an inclusive OR of the bits shown in Table 1. .TS c s s l l l. Table 1 Compatibility Map Component Masks _ Mask Value Affecting _ XkbSymInterpMask (1<<0) Symbol interpretations XkbGroupCompatMask (1<<1) Group maps XkbAllCompatMask (0x3) All compatibility map components .TE .I free_map indicates whether the XkbCompatMap structure itself should be freed. If .I free_map is True, .I which is ignored, all non-NULL compatibility map components are freed, and the .I compat field in the XkbDescRec referenced by .I xkb is set to NULL. .SH STRUCTURES .LP .nf typedef struct _XkbCompatMapRec { XkbSymInterpretPtr sym_interpret; /\(** symbol based key semantics*/ XkbModsRec groups[XkbNumKbdGroups]; /\(** group => modifier map */ unsigned short num_si; /\(** # structures used in sym_interpret */ unsigned short size_si; /\(** # structures allocated in sym_interpret */ } XkbCompatMapRec, *XkbCompatMapPtr; .fi The complete description of an Xkb keyboard is given by an XkbDescRec. The component structures in the XkbDescRec represent the major Xkb components outlined in Figure 1.1. .nf typedef struct { struct _XDisplay * display; /\(** connection to X server */ unsigned short flags; /\(** private to Xkb, do not modify */ unsigned short device_spec; /\(** device of interest */ KeyCode min_key_code; /\(** minimum keycode for device */ KeyCode max_key_code; /\(** maximum keycode for device */ XkbControlsPtr ctrls; /\(** controls */ XkbServerMapPtr server; /\(** server keymap */ XkbClientMapPtr map; /\(** client keymap */ XkbIndicatorPtr indicators; /\(** indicator map */ XkbNamesPtr names; /\(** names for all components */ XkbCompatMapPtr compat; /\(** compatibility map */ XkbGeometryPtr geom; /\(** physical geometry of keyboard */ } XkbDescRec, *XkbDescPtr; .fi The .I display field points to an X display structure. The .I flags field is private to the library: modifying .I flags may yield unpredictable results. The .I device_spec field specifies the device identifier of the keyboard input device, or XkbUseCoreKeyboard, which specifies the core keyboard device. The .I min_key_code and .I max_key_code fields specify the least and greatest keycode that can be returned by the keyboard. The other fields specify structure components of the keyboard description and are described in detail in other sections of this document. Table 2 identifies the subsequent sections of this document that discuss the individual components of the XkbDescRec. .TS c s l l l l. Table 2 XkbDescRec Component References _ XkbDescRec Field For more info _ ctrls Chapter 10 server Chapter 16 map Chapter 15 indicators Chapter 8 names Chapter 18 compat Chapter 17 geom Chapter 13 .TE Each structure component has a corresponding mask bit that is used in function calls to indicate that the structure should be manipulated in some manner, such as allocating it or freeing it. These masks and their relationships to the fields in the XkbDescRec are shown in Table 3. .TS c s s l l l l l l. Table 3 Mask Bits for XkbDescRec _ Mask Bit XkbDescRec Field Value _ XkbControlsMask ctrls (1L<<0) XkbServerMapMask server (1L<<1) XkbIClientMapMask map (1L<<2) XkbIndicatorMapMask indicators (1L<<3) XkbNamesMask names (1L<<4) XkbCompatMapMask compat (1L<<5) XkbGeometryMask geom (1L<<6) XkbAllComponentsMask All Fields (0x7f) .TE .SH "SEE ALSO" .BR XkbGetCompatMap (__libmansuffix__) libX11-1.6.3/man/xkb/XkbAllocGeomOverlayKey.man000064401431060000012000000047031247741723500214400ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAllocGeomOverlayKeys __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAllocGeomOverlayKeys \- Allocate keys in an overlay row .SH SYNOPSIS .HP .B Status XkbAllocGeomOverlayKeys .BI "(\^XkbOverlayRowPtr " "row" "\^," .BI "int " "num_needed" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- row section for which rows should be allocated .TP .I \- num_needed number of new rows required .SH DESCRIPTION .LP Xkb provides a number of functions to allocate and free subcomponents of a keyboard geometry. Use these functions to create or modify keyboard geometries. Note that these functions merely allocate space for the new element(s), and it is up to you to fill in the values explicitly in your code. These allocation functions increase .I sz_* but never touch .I num_* (unless there is an allocation failure, in which case they reset both .I sz_* and .I num_* to zero). These functions return Success if they succeed, BadAlloc if they are not able to allocate space, or BadValue if a parameter is not as expected. .I XkbAllocGeomOverlayKeys allocates .I num_needed keys and adds them to the .I row. No initialization of the keys is done. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadValue An argument is out of range to whom the .\" Software is furnished to do so, subject to tlibX11-1.6.3/man/xkb/XkbKeySymsOffset.man000064401431060000012000000046301247741723500203350ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbKeySymsOffset __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbKeySymsOffset \- Returns the offset of the two-dimensional array of keysyms for the key corresponding to .I keycode .SH SYNOPSIS .HP .B int XkbKeySymsOffset .BI "(\^XkbDescPtr " "xkb" "\^," .BI "KeyCode " "keycode" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb Xkb description of interest .TP .I \- keycode keycode of interest .SH DESCRIPTION .LP The key width and number of groups associated with a key are used to form a small two-dimensional array of KeySyms for a key. This array may be different sizes for different keys. The array for a single key is stored as a linear list, in row-major order. The arrays for all of the keys are stored in the .I syms field of the client map. There is one row for each group associated with a key and one column for each level. The index corresponding to a given group and shift level is computed as: .nf idx = group_index * key_width + shift_level .fi The .I offset field of the .I key_sym_map entry for a key is used to access the beginning of the array. .I XkbKeySymsOffset returns the offset of the two-dimensional array of keysyms for the key corresponding to .I keycode. libX11-1.6.3/man/xkb/XkbAddDeviceLedInfo.man000064401431060000012000000114561247741723500206370ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAddDeviceLedInfo __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAddDeviceLedInfo \- Initialize an XkbDeviceLedInfoRec structure .SH SYNOPSIS .HP .B XkbDeviceLedInfoPtr XkbAddDeviceLedInfo .BI "(\^XkbDeviceInfoPtr " "device_info" "\^," .BI "unsigned int " "led_class" "\^," .BI "unsigned int " "led_id" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- device_info structure in which to add LED info .TP .I \- led_class input extension class for LED device of interest .TP .I \- led_id input extension ID for LED device of interest .SH DESCRIPTION .LP .I XkbAddDeviceLedInfo first checks to see whether an entry matching .I led_class and .I led_id already exists in the .I device_info->leds array. If it finds a matching entry, it returns a pointer to that entry. Otherwise, it checks to be sure there is at least one empty entry in .I device_info->leds and extends it if there is not enough room. It then increments .I device_info->num_leds and fills in the next available entry in .I device_info->leds with .I led_class and .I led_id. If successful, .I XkbAddDeviceLedInfo returns a pointer to the XkbDeviceLedInfoRec structure that was initialized. If unable to allocate sufficient storage, or if .I device_info points to an invalid XkbDeviceInfoRec structure, or if .I led_class or .I led_id are inappropriate, .I XkbAddDeviceLedInfo returns NULL. To allocate additional space for button actions in an XkbDeviceInfoRec structure, use .I XkbResizeDeviceButtonActions. .SH STRUCTURES .LP Information about X Input Extension devices is transferred between a client program and the Xkb extension in an XkbDeviceInfoRec structure: .nf typedef struct { char * name; /\(** name for device */ Atom type; /\(** name for class of devices */ unsigned short device_spec; /\(** device of interest */ Bool has_own_state; /\(** True=>this device has its own state */ unsigned short supported; /\(** bits indicating supported capabilities */ unsigned short unsupported; /\(** bits indicating unsupported capabilities */ unsigned short num_btns; /\(** number of entries in btn_acts */ XkbAction * btn_acts; /\(** button actions */ unsigned short sz_leds; /\(** total number of entries in LEDs vector */ unsigned short num_leds; /\(** number of valid entries in LEDs vector */ unsigned short dflt_kbd_fb; /\(** input extension ID of default (core kbd) indicator */ unsigned short dflt_led_fb; /\(** input extension ID of default indicator feedback */ XkbDeviceLedInfoPtr leds; /\(** LED descriptions */ } XkbDeviceInfoRec, *XkbDeviceInfoPtr; typedef struct { unsigned short led_class; /\(** class for this LED device*/ unsigned short led_id; /\(** ID for this LED device */ unsigned int phys_indicators; /\(** bits for which LEDs physically present */ unsigned int maps_present; /\(** bits for which LEDs have maps in maps */ unsigned int names_present; /\(** bits for which LEDs are in names */ unsigned int state; /\(** 1 bit => corresponding LED is on */ Atom names[XkbNumIndicators]; /\(** names for LEDs */ XkbIndicatorMapRec maps; /\(** indicator maps for each LED */ } XkbDeviceLedInfoRec, *XkbDeviceLedInfoPtr; .fi .SH "SEE ALSO" .BR XkbResizeDeviceButtonActions (__libmansuffix__) libX11-1.6.3/man/xkb/XkbChangeIndicators.man000064401431060000012000000127751247741723500210000ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbChangeIndicators __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbChangeIndicators \- Changes indicator maps or state without passing the entire keyboard description .SH SYNOPSIS .HP .B Bool XkbChangeIndicators .BI "(\^Display *" "dpy" "\^," .BI "XkbDescPtr " "xkb" "\^," .BI "XkbIndicatorChangesPtr " "changes" "\^," .BI "unsigned int " "state" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to the X server .TP .I \- xkb keyboard description from which names are to be taken. .TP .I \- changes indicators to be updated on the server .TP .I \- state new state of indicators listed in changes->state_changes .SH DESCRIPTION .LP The XkbIndicatorChangesRec identifies small modifications to the indicator map. Use it with the function .I XkbChangeIndicators to reduce the amount of traffic sent to the server (see STRUCTURES). The .I state_changes field is a mask that specifies the indicators that have changed state, and .I map_changes is a mask that specifies the indicators whose maps have changed. .I XkbChangeIndicators copies any maps specified by .I changes from the keyboard description, .I xkb, to the server specified by .I dpy. If any bits are set in the .I state_changes field of .I changes, XkbChangeIndicators also sets the state of those indicators to the values specified in the .I state mask. A 1 bit in .I state turns the corresponding indicator on, a 0 bit turns it off. In addition, it can also generate XkbIndicatorStateNotify and XkbIndicatorMapNotify events. Whenever an indicator changes state, the server sends XkbIndicatorStateNotify events to all interested clients. Similarly, whenever an indicator's map changes, the server sends XkbIndicatorMapNotify events to all interested clients. To receive XkbIndicatorStateNotify events, use .I XkbSelectEvents with both the .I bits_to_change and .I values_for_bits parameters containing XkbIndicatorStateNotifyMask. To receive XkbIndicatorMapNotify events, use .I XkbSelectEvents with XkbIndicatorMapNotifyMask. To receive events for only specific indicators, use .I XkbSelectEventDetails. Set the .I event_type parameter to XkbIndicatorStateNotify or XkbIndicatorMapNotify, and set both the .I bits_to_change and .I values_for_bits detail parameters to a mask where each bit specifies one indicator, turning on those bits that specify the indicators for which you want to receive events. .I xkb_type is either XkbIndicatorStateNotify or XkbIndicatorMapNotify, depending on whether the event is a kbIndicatorStateNotify event or kbIndicatorMapNotify event. The .I changed parameter is a mask that is the bitwise inclusive OR of the indicators that have changed. If the event is of type XkbIndicatorMapNotify, .I changed reports the maps that changed. If the event is of type XkbIndicatorStateNotify, .I changed reports the indicators that have changed state. .I state is a mask that specifies the current state of all indicators, whether they have changed or not, for both XkbIndicatorStateNotify and IndicatorMapNotify events. .SH STRUCTURES .LP .nf typedef struct _XkbIndicatorChanges { unsigned int state_changes; unsigned int map_changes; }XkbIndicatorChangesRec,*XkbIndicatorChangesPtr; .fi Both types of indicator events use the same structure: .nf typedef struct _XkbIndicatorNotify { int type; /\(** Xkb extension base event code */ unsigned long serial; /\(** X server serial number for event */ Bool send_event; /\(** True => synthetically generated */ Display * display; /\(** server connection where event generated */ Time time; /\(** server time when event generated */ int xkb_type; /\(** specifies state or map notify */ int device; /\(** Xkb device ID, will not be XkbUseCoreKbd*/ unsigned int changed; /\(** mask of indicators with new state or map */ unsigned int state; /\(** current state of all indicators */ } XkbIndicatorNotifyEvent; .fi .SH DIAGNOSTICS .TP 15 .B BadAtom A name is neither a valid Atom or None .TP 15 .B BadImplementation Invalid reply from server .SH "SEE ALSO" .BR XkbIndicatorMapNotify (__libmansuffix__), .BR XkbIndicatorStateNotify (__libmansuffix__) libX11-1.6.3/man/xkb/XkbNoteIndicatorChanges.man000064401431060000012000000112221247741723500216100ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbNoteIndicatorChanges __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbNoteIndicatorChanges \- Notes the changes in a changes structure .SH SYNOPSIS .HP .B void XkbNoteIndicatorChanges .BI "(\^XkbIndicatorChangesPtr " "old" "\^," .BI "XkbIndicatorNotifyEvent *" "new" "\^," .BI "unsigned int " "wanted" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- old XkbIndicatorChanges structure to be updated .TP .I \- new event from which changes are to be copied .TP .I \- wanted which changes are to be noted .SH DESCRIPTION .LP Whenever an indicator changes state, the server sends XkbIndicatorStateNotify events to all interested clients. Similarly, whenever an indicator's map changes, the server sends XkbIndicatorMapNotify events to all interested clients. To receive XkbIndicatorStateNotify events, use .I XkbSelectEvents with both the .I bits_to_change and .I values_for_bits parameters containing XkbIndicatorStateNotifyMask. To receive XkbIndicatorMapNotify events, use .I XkbSelectEvents with XkbIndicatorMapNotifyMask. To receive events for only specific indicators, use .I XkbSelectEventDetails. Set the .I event_type parameter to XkbIndicatorStateNotify or XkbIndicatorMapNotify, and set both the .I bits_to_change and .I values_for_bits detail parameters to a mask where each bit specifies one indicator, turning on those bits that specify the indicators for which you want to receive events. The .I changed parameter is a mask that is the bitwise inclusive OR of the indicators that have changed. If the event is of type XkbIndicatorMapNotify, .I changed reports the maps that changed. If the event is of type XkbIndicatorStateNotify, .I changed reports the indicators that have changed state. .I state is a mask that specifies the current state of all indicators, whether they have changed or not, for both XkbIndicatorStateNotify and IndicatorMapNotify events. When your client application receives either a XkbIndicatorStateNotify event or XkbIndicatorMapNotify event, you can note the changes in a changes structure by calling .I XkbNoteIndicatorChanges. The .I wanted parameter is the bitwise inclusive OR of XkbIndicatorMapMask and XkbIndicatorStateMask. .I XkbNoteIndicatorChanges copies any changes reported in .I new and specified in .I wanted into the changes record specified by .I old. .SH STRUCTURES Both types of indicator events use the same structure: .nf typedef struct _XkbIndicatorNotify { int type; /\(** Xkb extension base event code */ unsigned long serial; /\(** X server serial number for event */ Bool send_event; /\(** True => synthetically generated */ Display * display; /\(** server connection where event generated */ Time time; /\(** server time when event generated */ int xkb_type; /\(** specifies state or map notify */ int device; /\(** Xkb device ID, will not be XkbUseCoreKbd */ unsigned int changed; /\(** mask of indicators with new state or map */ unsigned int state; /\(** current state of all indicators */ } XkbIndicatorNotifyEvent; .fi .I xkb_type is either XkbIndicatorStateNotify or XkbIndicatorMapNotify, depending on whether the event is a kbIndicatorStateNotify event or kbIndicatorMapNotify event. .SH "SEE ALSO" .BR XkbIndicatorMapMask (__libmansuffix__), .BR XkbIndicatorStateMask (__libmansuffix__), .BR XkbSelectEventDetails (__libmansuffix__), .BR XkbSelectEvents (__libmansuffix__) g 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 follibX11-1.6.3/man/xkb/XkbAddSymInterpret.man000064401431060000012000000043561247741723500206450ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAddSymInterpret __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAddSymInterpret \- Add a symbol interpretation to the list of symbol interpretations in an XkbCompatRec .SH SYNOPSIS .HP .B XkbSymInterpretPtr XkbAddSymInterpret .BI "(\^XkbDescPtr " "xkb" "\^," .BI "XkbSymInterpretPtr " "si" "\^," .BI "Bool " "updateMap" "\^," .BI "XkbChangesPtr " "changes" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb keyboard description to be updated .TP .I \- si symbol interpretation to be added .TP .I \- updateMap True=>apply compatibility map to keys .TP .I \- changes changes are put here .SH DESCRIPTION .LP .I XkbAddSymInterpret adds .I si to the list of symbol interpretations in .I xkb. If .I updateMap is True, it (re)applies the compatibility map to all of the keys on the keyboard. If .I changes is non-NULL, it reports the parts of the keyboard that were affected (unless .I updateMap is True, not much changes). .I XkbAddSymInterpret returns a pointer to the actual new symbol interpretation in the list or NULL if it failed. libX11-1.6.3/man/xkb/XkbKeyTypesForCoreSymbols.man000064401431060000012000000172341247741723500221740ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbKeyTypesForCoreSymbols __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbKeyTypesForCoreSymbols \- Determine the Xkb key types appropriate for the symbols bound to a key in a core keyboard mapping .SH SYNOPSIS .HP .B int XkbKeyTypesForCoreSymbols .BI "(\^XkbDescPtr " "xkb" "\^," .BI "int " "map_width" "\^," .BI "KeySym *" "core_syms" "\^," .BI "unsigned int " "protected" "\^," .BI "int *" "types_inout" "\^," .BI "KeySym *" "xkb_syms_rtrn" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb keyboard description in which to place symbols .TP .I \- map_width width of core protocol keymap in xkb_syms_rtrn .TP .I \- core_syms core protocol format array of KeySyms .TP .I \- protected explicit key types .TP .I \- types_inout backfilled with the canonical types bound to groups one and two for the key .TP .I \- xkb_syms_rtrn backfilled with symbols bound to the key in the Xkb mapping .SH DESCRIPTION .LP .I XkbKeyTypesForCoreSymbols expands the symbols in .I core_syms and types in .I types_inout, then chooses canonical key types (canonical key types are defined The Canonical Key Types) for groups 1 and 2 using the rules specified by the Xkb protocol and places them in xkb_syms_rtrn, which will be non-NULL. .B The Canonical Key Types Xkb allows up to XkbMaxKeyTypes (255) key types to be defined, but requires at least XkbNumRequiredTypes (4) predefined types to be in a key map. These predefined key types are referred to as the canonical key types and describe the types of keys available on most keyboards. The definitions for the canonical key types are held in the first XkbNumRequiredTypes entries of the .I types field of the client map and are indexed using the following constants: .nf XkbOneLevelIndex XkbTwoLevelIndex XkbAlphabeticIndex XkbKeypadIndex .fi ONE_LEVEL The ONE_LEVEL key type describes groups that have only one symbol. The default ONE_LEVEL key type has no map entries and does not pay attention to any modifiers. A symbolic representation of this key type could look like the following: .nf type "ONE_LEVEL" { modifiers = None; map[None]= Level1; level_name[Level1]= "Any"; }; .fi The description of the ONE_LEVEL key type is stored in the types[XkbOneLevelIndex] entry of the client key map. TWO_LEVEL The TWO_LEVEL key type describes groups that consist of two symbols but are neither alphabetic nor numeric keypad keys. The default TWO_LEVEL type uses only the Shift modifier. It returns shift level two if Shift is set, and level one if it is not. A symbolic representation of this key type could look like the following: .nf type "TWO_LEVEL" { modifiers = Shift; map[Shift]= Level2; level_name[Level1]= "Base"; level_name[Level2]= "Shift"; }; .fi The description of the TWO_LEVEL key type is stored in the types[XkbTwoLevelIndex] entry of the client key map. ALPHABETIC The ALPHABETIC key type describes groups consisting of two symbols: the lowercase form of a symbol followed by the uppercase form of the same symbol. The default ALPHABETIC type implements locale-sensitive "Shift cancels CapsLock" behavior using both the Shift and Lock modifiers as follows: .IP \(bu 5 If Shift and Lock are both set, the default ALPHABETIC type yields level one. .IP \(bu 5 If Shift alone is set, it yields level two. .IP \(bu 5 If Lock alone is set, it yields level one, but preserves the Lock modifier so Xlib notices and applies the appropriate capitalization rules. The Xlib functions are locale-sensitive and apply different capitalization rules for different locales. .IP \(bu 5 If neither Shift nor Lock is set, it yields level one. A symbolic representation of this key type could look like the following: .nf type "ALPHABETIC" { modifiers = Shift+Lock; map[Shift]= Level2; preserve[Lock]= Lock; level_name[Level1]= "Base"; level_name[Level2]= "Caps"; }; .fi The description of the ALPHABETIC key type is stored in the types[XkbAlphabeticIndex] entry of the client key map. KEYPAD The KEYPAD key type describes groups that consist of two symbols, at least one of which is a numeric keypad symbol. The numeric keypad symbol is assumed to reside at level two. The default KEYPAD key type implements "Shift cancels NumLock" behavior using the Shift modifier and the real modifier bound to the virtual modifier named "NumLock," known as the NumLock modifier, as follows: .IP \(bu 5 If Shift and NumLock are both set, the default KEYPAD type yields level one. .IP \(bu 5 If Shift alone is set, it yields level two. .IP \(bu 5 If NumLock alone is set, it yields level two. .IP \(bu 5 If neither Shift nor NumLock is set, it yields level one. A symbolic representation of this key type could look like the following: .nf type "KEYPAD" { modifiers = Shift+NumLock; map[None]= Level1; map[Shift]= Level2; map[NumLock]= Level2; map[Shift+NumLock]= Level1; level_name[Level1]= "Base"; level_name[Level2]= "Caps"; }; .fi The description of the KEYPAD key type is stored in the types[XkbKeypadIndex] entry of the client key map. A core keymap is a two-dimensional array of keysyms. It has .I map_width columns and .I max_key_code rows. .I XkbKeyTypesForCoreSymbols takes a single row from a core keymap, determines the number of groups associated with it, the type of each group, and the symbols bound to each group. The return value is the number of groups, .I types_inout has the types for each group, and .I xkb_syms_rtrn has the symbols in Xkb order (that is, groups are contiguous, regardless of size). .I protected contains the explicitly protected key types. There is one explicit override control associated with each of the four possible groups for each Xkb key, ExplicitKeyType1 through ExplicitKeyType4; .I protected is an inclusive OR of these controls. .I map_width is the width of the core keymap and is not dependent on any Xkb definitions. .I types_inout is an array of four type indices. On input, .I types_inout contains the indices of any types already assigned to the key, in case they are explicitly protected from change. Upon return, .I types_inout contains any automatically selected (that is, canonical) types plus any protected types. Canonical types are assigned to all four groups if there are enough symbols to do so. The four entries in .I types_inout correspond to the four groups for the key in question. .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb keyboard description in which to place symbols .TP .I \- map_width width of core protocol keymap in xkb_syms_rtrn .TP .I \- core_syms core protocol format array of KeySyms .TP .I \- protected explicit key types .TP .I \- types_inout backfilled with the canonical types bound to groups one and two for the key .TP libX11-1.6.3/man/xkb/XkbUpdateMapFromCore.man000064401431060000012000000070761247741723500211060ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbUpdateMapFromCore __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbUpdateMapFromCore \- Update a local Xkb keyboard map to reflect the mapping expressed by a core format mapping .SH SYNOPSIS .HP .B Bool XkbUpdateMapFromCore .BI "(\^XkbDescPtr " "xkb" "\^," .BI "KeyCode " "first_key" "\^," .BI "int " "num_keys" "\^," .BI "int " "map_width" "\^," .BI "KeySym *" "core_keysyms" "\^," .BI "XkbChangesPtr " "changes" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb keyboard description to update .TP .I \- first_key keycode of first key description to update .TP .I \- num_keys number of key descriptions to update .TP .I \- map_width width of core protocol keymap .TP .I \- core_keysyms symbols in core protocol keymap .TP .I \- changes backfilled with changes made to Xkb .SH DESCRIPTION .LP Xkb provides several functions that make it easier to apply the compatibility map to configure a client-side Xkb keyboard mapping, given a core protocol representation of part or all of a keyboard mapping. Obtain a core protocol representation of a keyboard mapping from an actual server (by using .I XGetKeyboardMapping, for example), a data file, or some other source. .I XkbUpdateMapFromCore interprets input argument information representing a keyboard map in core format to update the Xkb keyboard description passed in .I xkb. Only a portion of the Xkb map is updated - the portion corresponding to keys with keycodes in the range .I first_key through .I first_key + num_keys - 1. If .I XkbUpdateMapFromCore is being called in response to a MappingNotify event, .I first_key and .I num_keys are reported in the MappingNotify event. .I core_keysyms contains the keysyms corresponding to the keycode range being updated, in core keyboard description order. .I map_width is the number of keysyms per key in .I core_keysyms. Thus, the first .I map_width entries in .I core_keysyms are for the key with keycode .I first_key, the next .I map_width entries are for key .I first_key + 1, and so on. In addition to modifying the Xkb keyboard mapping in .I xkb, XkbUpdateMapFromCore backfills the changes structure whose address is passed in .I changes to indicate the modifications that were made. You may then use .I changes in subsequent calls such as .I XkbSetMap, to propagate the local modifications to a server. .SH "SEE ALSO" .BR XkbSetMap (__libmansuffix__) libX11-1.6.3/man/xkb/XkbGetVirtualMods.man000064401431060000012000000155321247741723500204760ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbGetVirtualMods __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbGetVirtualMods \- Obtain a subset of the virtual modifier bindings (the vmods array) in a keyboard description .SH SYNOPSIS .HP .B Status XkbGetVirtualMods .BI "(\^Display *" "dpy" "\^," .BI "unsigned int " "which" "\^," .BI "XkbDescPtr " "xkb" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to server .TP .I \- which mask indicating virtual modifier bindings to get .TP .I \- xkb Xkb description where results will be placed .SH DESCRIPTION .LP .I XkbGetVirtualMods sends a request to the server to obtain the .I vmods entries for the virtual modifiers specified in the mask, .I which, and waits for a reply. Virtual modifiers are named by converting their string name to an X Atom and storing the Atom in the .I names.vmods array in an XkbDescRec structure. The position of a name Atom in the .I names.vmods array defines the bit position used to represent the virtual modifier and also the index used when accessing virtual modifier information in arrays: the name in the i-th (0 relative) entry of .I names.vmods is the i-th virtual modifier, represented by the mask (1<vmods array of .I xkb. The .I xkb parameter must be a pointer to a valid Xkb keyboard description. If successful, .I XkbGetVirtualMods returns Success. .B Virtual Modifier Names and Masks Virtual modifiers are named by converting their string name to an X Atom and storing the Atom in the .I names.vmods array in an XkbDescRec structure. The position of a name Atom in the .I names.vmods array defines the bit position used to represent the virtual modifier and also the index used when accessing virtual modifier information in arrays: the name in the i-th (0 relative) entry of .I names.vmods is the i-th virtual modifier, represented by the mask (1<vmods array of .I xkb. .SH STRUCTURES .LP The complete description of an Xkb keyboard is given by an XkbDescRec. The component structures in the XkbDescRec represent the major Xkb components. .nf typedef struct { struct _XDisplay * display; /\(** connection to X server */ unsigned short flags; /\(** private to Xkb, do not modify */ unsigned short device_spec; /\(** device of interest */ KeyCode min_key_code; /\(** minimum keycode for device */ KeyCode max_key_code; /\(** maximum keycode for device */ XkbControlsPtr ctrls; /\(** controls */ XkbServerMapPtr server; /\(** server keymap */ XkbClientMapPtr map; /\(** client keymap */ XkbIndicatorPtr indicators; /\(** indicator map */ XkbNamesPtr names; /\(** names for all components */ XkbCompatMapPtr compat; /\(** compatibility map */ XkbGeometryPtr geom; /\(** physical geometry of keyboard */ } XkbDescRec, *XkbDescPtr; .fi The .I display field points to an X display structure. The .I flags field is private to the library: modifying .I flags may yield unpredictable results. The .I device_spec field specifies the device identifier of the keyboard input device, or XkbUseCoreKeyboard, which specifies the core keyboard device. The .I min_key_code and .I max_key_code fields specify the least and greatest keycode that can be returned by the keyboard. Each structure component has a corresponding mask bit that is used in function calls to indicate that the structure should be manipulated in some manner, such as allocating it or freeing it. These masks and their relationships to the fields in the XkbDescRec are shown in Table 1. .TS c s s l l l l l l. Table 1 Mask Bits for XkbDescRec _ Mask Bit XkbDescRec Field Value _ XkbControlsMask ctrls (1L<<0) XkbServerMapMask server (1L<<1) XkbIClientMapMask map (1L<<2) XkbIndicatorMapMask indicators (1L<<3) XkbNamesMask names (1L<<4) XkbCompatMapMask compat (1L<<5) XkbGeometryMask geom (1L<<6) XkbAllComponentsMask All Fields (0x7f) .TE .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadMatch A compatible version of Xkb was not available in the server or an argument has correct type and range, but is otherwise invalid .SH "SEE ALSO" .BR XkbGetNames (__libmansuffix__), .BR XkbSetNames (__libmansuffix__) libX11-1.6.3/man/xkb/XkbAllocNames.man000064401431060000012000000072571247741723500176100ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAllocNames __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAllocNames \- Allocate symbolic names structures .SH SYNOPSIS .HP .B Status XkbAllocNames .BI "(\^XkbDescPtr " "xkb" "\^," .BI "unsigned int " "which" "\^," .BI "int " "num_rg" "\^," .BI "int " "num_key_aliases" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb keyboard description for which names are to be allocated .TP .I \- which mask of names to be allocated .TP .I \- num_rg total number of radio group names needed .TP .I \- num_key_aliases total number of key aliases needed .SH DESCRIPTION .LP Most applications do not need to directly allocate symbolic names structures. Do not allocate a names structure directly using .I malloc or .I Xmalloc if your application changes the number of key aliases or radio groups or constructs a symbolic names structure without loading the necessary components from the X server. Instead use .I XkbAllocNames. .I XkbAllocNames can return BadAlloc, BadMatch, and BadValue errors. The .I which parameter is the bitwise inclusive OR of the valid names mask bits defined in Table 1. .TS c s s s l l l l. Table 1 Symbolic Names Masks _ Mask Bit Value Keyboard Field Component _ XkbKeycodesNameMask (1<<0) Xkb->names keycodes XkbGeometryNameMask (1<<1) Xkb->names geometry XkbSymbolsNameMask (1<<2) Xkb->names symbols XkbPhysSymbolsNameMask (1<<3) Xkb->names phys_symbols XkbTypesNameMask (1<<4) Xkb->names type XkbCompatNameMask (1<<5) Xkb->names compat XkbKeyTypeNamesMask (1<<6) Xkb->map type[*].name XkbKTLevelNamesMask (1<<7) Xkb->map type[*].lvl_names[*] XkbIndicatorNamesMask (1<<8) Xkb->names indicators[*] XkbKeyNamesMask (1<<9) Xkb->names keys[*], num_keys XkbKeyAliasesMask (1<<10) Xkb->names key_aliases[*], num_key_aliases XkbVirtualModNamesMask (1<<11) Xkb->names vmods[*] XkbGroupNamesMask (1<<12) Xkb->names groups[*] XkbRGNamesMask (1<<13) Xkb->names radio_groups[*], num_rg XkbComponentNamesMask (0x3f) Xkb->names keycodes, geometry, symbols, physical symbols, types, and compatibility map XkbAllNamesMask (0x3fff) Xkb->names all name components .TE Do not free symbolic names structures directly using .I free or .I XFree. Use .I XkbFreeNames instead. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadMatch A compatible version of Xkb was not available in the server or an argument has correct type and range, but is otherwise invalid .TP 15 .B BadValue An argument is out of range .SH "SEE ALSO" .BR XkbFreeNames (__libmansuffix__) libX11-1.6.3/man/xkb/XkbAllocClientMap.man000064401431060000012000000114151247741723500204100ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAllocClientMap __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAllocClientMap \- Allocate and initialize an empty client map description record .SH SYNOPSIS .HP .B Status XkbAllocClientMap .BI "(\^XkbDescPtr " "xkb" "\^," .BI "unsigned int " "which" "\^," .BI "unsigned int " "type_count" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb keyboard description in which to allocate client map .TP .I \- which mask selecting map components to allocate .TP .I \- type_count value of num_types field in map to be allocated .SH DESCRIPTION .LP Calling .I XkbGetMap should be sufficient for most applications to get client and server maps. As a result, most applications do not need to directly allocate client and server maps. If you change the number of key types or construct map components without loading the necessary components from the X server, do not allocate any map components directly using .I malloc or .I Xmalloc. Instead, use the Xkb allocators, .I XkbAllocClientMap, and .I XkbAllocServerMap. Similarly, use the Xkb destructors, .I XkbFreeClientMap, and .I XkbFreeServerMap instead of .I free or .I Xfree. .I XkbAllocClientMap allocates and initializes an empty client map in the .I map field of the keyboard description specified by .I xkb. The .I which parameter specifies the particular components of the client map structure to allocate and is a mask composed by a bitwise inclusive OR of one or more of the masks shown in Table 1. .bp .TS c s l l l lw(4i). Table 1 XkbAllocClientMap Masks _ Mask Effect _ XkbKeyTypesMask T{ The type_count field specifies the number of entries to preallocate for the types field of the client map. If the type_count field is less than XkbNumRequiredTypes returns BadValue. T} .sp XkbKeySymsMask T{ The min_key_code and max_key_code fields of the xkb parameter are used to allocate the syms and key_sym_map fields of the client map. The fields are allocated to contain the maximum number of entries necessary for max_key_code - min_key_code + 1 keys. T} .sp XkbModifierMapMask T{ The min_key_code and max_key_code fields of the xkb parameter are used to allocate the modmap field of the client map. The field is allocated to contain the maximum number of entries necessary for max_key_code - min_key_code + 1 keys. T} .TE NOTE: The .I min_key_code and .I max_key_code fields of the .I xkb parameter must be legal values if the XkbKeySymsMask or XkbModifierMapMask masks are set in the .I which parameter. If they are not valid, .I XkbAllocClientMap returns BadValue. If the client map of the keyboard description is not NULL, and any fields are already allocated in the client map, .I XkbAllocClientMap does not overwrite the existing values; it simply ignores that part of the request. The only exception is the .I types array. If .I type_count is greater than the current .I num_types field of the client map, .I XkbAllocClientMap resizes the .I types array and resets the .I num_types field accordingly. If .I XkbAllocClientMap is successful, it returns Success. Otherwise, it can return either BadMatch, BadAlloc, or BadValue errors. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadMatch A compatible version of Xkb was not available in the server or an argument has correct type and range, but is otherwise invalid .TP 15 .B BadValue An argument is out of range .SH "SEE ALSO" .BR XkbAllocClientMap (__libmansuffix__), .BR XkbAllocServerMap (__libmansuffix__), .BR XkbFreeClientMap, (__libmansuffix__), .BR XkbFreeServerMap (__libmansuffix__), .BR XkbGetMap (__libmansuffix__) libX11-1.6.3/man/xkb/XkbAllocGeomKeys.man000064401431060000012000000046631247741723500202660ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAllocGeomKeys __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAllocGeomKeys \- Allocate space for an arbitrary number of keys to a row .SH SYNOPSIS .HP .B Status XkbAllocGeomKeys .BI "(\^XkbRowPtr " "row" "\^," .BI "int " "num_needed" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- row row to which keys should be allocated .TP .I \- num_needed number of new keys required .SH DESCRIPTION .LP Xkb provides a number of functions to allocate and free subcomponents of a keyboard geometry. Use these functions to create or modify keyboard geometries. Note that these functions merely allocate space for the new element(s), and it is up to you to fill in the values explicitly in your code. These allocation functions increase .I sz_* but never touch .I num_* (unless there is an allocation failure, in which case they reset both .I sz_* and .I num_* to zero). These functions return Success if they succeed, BadAlloc if they are not able to allocate space, or BadValue if a parameter is not as expected. .I XkbAllocGeomKeys allocates .I num_needed keys and adds them to the .I row. No initialization of the keys is done. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadValue An argument is out of range libX11-1.6.3/man/xkb/XkbPtrActionX.man000064401431060000012000000073711247741723500176220ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbPtrActionX __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbPtrActionX \- Returns the high_XXX and low_XXX fields of act converted to a signed int .SH SYNOPSIS .HP .B int XkbPtrActionX .BI "(\^XkbPtrAction " "act" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- act action from which to extract X .SH DESCRIPTION .LP Actions associated with the XkbPtrAction structure move the pointer when keys are pressed and released. If the MouseKeys control is not enabled, KeyPress and KeyRelease events are treated as though the action is XkbSA_NoAction. If the MouseKeys control is enabled, a server action of type XkbSA_MovePtr instructs the server to generate core pointer MotionNotify events rather than the usual KeyPress event, and the corresponding KeyRelease event disables any mouse keys timers that were created as a result of handling the XkbSA_MovePtr action. The .I type field of the XkbPtrAction structure is always XkbSA_MovePtr. The .I flags field is a bitwise inclusive OR of the masks shown in Table 1. .TS c s l l l lw(4i). Table 1 Pointer Action Types _ Action Type Meaning _ XkbSA_NoAcceleration T{ If not set, and the MouseKeysAccel control is enabled, the KeyPress initiates a mouse keys timer for this key; every time the timer expires, the cursor moves. T} XkbSA_MoveAbsoluteX T{ If set, the X portion of the structure specifies the new pointer X coordinate. Otherwise, the X portion is added to the current pointer X coordinate to determine the new pointer X coordinate. T} XkbSA_MoveAbsoluteY T{ If set, the Y portion of the structure specifies the new pointer Y coordinate. Otherwise, the Y portion is added to the current pointer Y coordinate to determine the new pointer Y coordinate. T} .TE Each of the X and Y coordinates of the XkbPtrAction structure is composed of two signed 16-bit values, that is, the X coordinate is composed of .I high_XXX and .I low_XXX, and similarly for the Y coordinate. Xkb provides the following macros, to convert between a signed integer and two signed 16-bit values in XkbPtrAction structures. .SH STRUCTURES .LP .nf typedef struct _XkbPtrAction { unsigned char type; /\(** XkbSA_MovePtr */ unsigned char flags; /\(** determines type of pointer motion */ unsigned char high_XXX; /\(** x coordinate, high bits*/ unsigned char low_XXX; /\(** y coordinate, low bits */ unsigned char high_YYY; /\(** x coordinate, high bits */ unsigned char low_YYY; /\(** y coordinate, low bits */ } XkbPtrAction; .fi S" .SH NAME XkbPtrActionX \- Returns the high_XXX and low_XXX fields of act converted to a signed int .SH SYNOPSIS .HP .B int XkbPtrActionX .BI "(\^XkbPtrAction " "act" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- act action from which to extract libX11-1.6.3/man/xkb/XkbAllocDeviceInfo.man000064401431060000012000000107511247741723500205510ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAllocDeviceInfo __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAllocDeviceInfo \- Obtain an XkbDeviceInfoRec structure .SH SYNOPSIS .HP .B XkbDeviceInfoPtr XkbAllocDeviceInfo .BI "(\^unsigned int " "device_spec" "\^," .BI "unsigned int " "n_buttons" "\^," .BI "unsigned int " "sz_leds" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- device_spec device ID with which structure will be used .TP .I \- n_buttons number of button actions to allocate space for .TP .I \- sz_leds number of LED feedbacks to allocate space for .SH DESCRIPTION .LP .I XkbAllocDeviceInfo allocates space for an XkbDeviceInfoRec structure and initializes that structure's .I device_spec field with the device ID specified by .I device_spec. If .I n_buttons is nonzero, .I n_buttons XkbActions are linked into the XkbDeviceInfoRec structure and initialized to zero. If .I sz_leds is nonzero, .I sz_leds XkbDeviceLedInfoRec structures are also allocated and linked into the XkbDeviceInfoRec structure. If you request XkbDeviceLedInfoRec structures be allocated using this request, you must initialize them explicitly. To obtain an XkbDeviceLedInfoRec structure, use .I XkbAllocDeviceLedInfo. .SH STRUCTURES .LP Information about X Input Extension devices is transferred between a client program and the Xkb extension in an XkbDeviceInfoRec structure: .nf typedef struct { char * name; /\(** name for device */ Atom type; /\(** name for class of devices */ unsigned short device_spec; /\(** device of interest */ Bool has_own_state; /\(** True=>this device has its own state */ unsigned short supported; /\(** bits indicating supported capabilities */ unsigned short unsupported; /\(** bits indicating unsupported capabilities */ unsigned short num_btns; /\(** number of entries in btn_acts */ XkbAction * btn_acts; /\(** button actions */ unsigned short sz_leds; /\(** total number of entries in LEDs vector */ unsigned short num_leds; /\(** number of valid entries in LEDs vector */ unsigned short dflt_kbd_fb; /\(** input extension ID of default (core kbd) indicator */ unsigned short dflt_led_fb; /\(** input extension ID of default indicator feedback */ XkbDeviceLedInfoPtr leds; /\(** LED descriptions */ } XkbDeviceInfoRec, *XkbDeviceInfoPtr; typedef struct { unsigned short led_class; /\(** class for this LED device*/ unsigned short led_id; /\(** ID for this LED device */ unsigned int phys_indicators; /\(** bits for which LEDs physically present */ unsigned int maps_present; /\(** bits for which LEDs have maps in maps */ unsigned int names_present; /\(** bits for which LEDs are in names */ unsigned int state; /\(** 1 bit => corresponding LED is on */ Atom names[XkbNumIndicators]; /\(** names for LEDs */ XkbIndicatorMapRec maps; /\(** indicator maps for each LED */ } XkbDeviceLedInfoRec, *XkbDeviceLedInfoPtr; .fi .SH "SEE ALSO" .BR XkbAllocDeviceLedInfo (__libmansuffix__) libX11-1.6.3/man/xkb/XkbFreeIndicatorMaps.man000064401431060000012000000033541247741723500211230ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbFreeIndicatorMaps __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbFreeIndicatorMaps \- Frees memory used by the .I indicators member of an XkbDescRec structure .SH SYNOPSIS .HP .B void XkbFreeIndicatorMaps .BI "(\^XkbDescPtr " "xkb" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb keyboard description structure .SH DESCRIPTION .LP If the .I indicators member of the keyboard description record pointed to by .I xkb is not NULL, .I XkbFreeIndicatorMaps frees the memory associated with the .I indicators member of .I xkb. libX11-1.6.3/man/xkb/XkbKeyActionEntry.man000064401431060000012000000112351247741723500204710ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbKeyActionEntry __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbKeyActionEntry \- Returns a pointer to the key action corresponding to group grp and shift level lvl from the two-dimensional table of key actions associated with the key corresponding to keycode .SH SYNOPSIS .HP .B XkbAction * XkbKeyActionEntry .BI "(\^XkbDescPtr " "xkb" "\^," .BI "KeyCode " "keycode" "\^," .BI "int " "shift" "\^," .BI "int " "grp" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb Xkb description of interest .TP .I \- keycode keycode of interest .TP .I \- shift shift level within group .TP .I \- grp group index for group of interest .SH DESCRIPTION .LP A key action defines the effect key presses and releases have on the internal state of the server. For example, the expected key action associated with pressing the Shift key is to set the Shift modifier. There is zero or one key action associated with each keysym bound to each key. Just as the entire list of key symbols for the keyboard mapping is held in the .I syms field of the client map, the entire list of key actions for the keyboard mapping is held in the .I acts array of the server map. The total size of .I acts is specified by .I size_acts, and the number of entries is specified by .I num_acts. The .I key_acts array, indexed by keycode, describes the actions associated with a key. The .I key_acts array has .I min_key_code unused entries at the start to allow direct indexing using a keycode. If a .I key_acts entry is zero, it means the key does not have any actions associated with it. If an entry is not zero, the entry represents an index into the .I acts field of the server map, much as the .I offset field of a KeySymMapRec structure is an index into the .I syms field of the client map. The reason the .I acts field is a linear list of XkbActions is to reduce the memory consumption associated with a keymap. Because Xkb allows individual keys to have multiple shift levels and a different number of groups per key, a single two-dimensional array of KeySyms would potentially be very large and sparse. Instead, Xkb provides a small two-dimensional array of XkbActions for each key. To store all of these individual arrays, Xkb concatenates each array together in the .I acts field of the server map. The key action structures consist only of fields of type char or unsigned char. This is done to optimize data transfer when the server sends bytes over the wire. If the fields are anything but bytes, the server has to sift through all of the actions and swap any nonbyte fields. Because they consist of nothing but bytes, it can just copy them out. .I XkbKeyActionEntry returns the key action corresponding to group .I grp and shift level .I lvl from the two-dimensional table of key actions associated with the key corresponding to .I keycode. .SH STRUCTURES .LP The KeySymMapRec structure is defined as follows: .nf #define XkbNumKbdGroups 4 #define XkbMaxKbdGroup (XkbNumKbdGroups-1) typedef struct { /\(** map to keysyms for a single keycode */ unsigned char kt_index[XkbNumKbdGroups]; /\(** key type index for each group */ unsigned char group_info; /\(** # of groups and out of range group handling */ unsigned char width; /\(** max # of shift levels for key */ unsigned short offset; /\(** index to keysym table in syms array */ } XkbSymMapRec, *XkbSymMapPtr; .fi libX11-1.6.3/man/xkb/XkbAddGeomOutline.man000064401431060000012000000063551247741723500204300ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAddGeomOutline __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAddGeomOutline \- Add one outline to an existing shape .SH SYNOPSIS .HP .B XkbOutlinePtr XkbAddGeomOutline .BI "(\^XkbShapePtr " "shape" "\^," .BI "int " "sz_points" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- shape shape to be updated .TP .I \- sz_points number of points to be reserved .SH DESCRIPTION .LP Xkb provides functions to add a single new element to the top-level keyboard geometry. In each case the .I num_ * fields of the corresponding structure is incremented by 1. These functions do not change .I sz_* unless there is no more room in the array. Some of these functions fill in the values of the element's structure from the arguments. For other functions, you must explicitly write code to fill the structure's elements. The top-level geometry description includes a list of .I geometry properties. A geometry property associates an arbitrary string with an equally arbitrary name. Programs that display images of keyboards can use geometry properties as hints, but they are not interpreted by Xkb. No other geometry structures refer to geometry properties. An outline consists of an arbitrary number of points. .I XkbAddGeomOutline adds an outline to the specified .I shape by reserving .I sz_points points for it. The new outline is allocated and zeroed. .I XkbAddGeomOutline returns NULL if any of the parameters is empty or if it was not able to allocate space. To allocate space for an arbitrary number of outlines to a shape, use .I XkbAllocGeomOutlines. .SH STRUCTURES .LP .nf typedef struct _XkbOutline { unsigned short num_points; /\(** number of points in the outline */ unsigned short sz_points; /\(** size of the points array */ unsigned short corner_radius; /\(** draw corners as circles with this radius */ XkbPointPtr points; /\(** array of points defining the outline */ } XkbOutlineRec, *XkbOutlinePtr; .fi .SH "SEE ALSO" .BR XkbAllocGeomOutlines (__libmansuffix__) libX11-1.6.3/man/xkb/XkbOutOfRangeGroupNumber.man000064401431060000012000000212561247741723500217640ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbOutOfRangeGroupNumber __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbOutOfRangeGroupNumber \- Returns the out-of-range group number, represented as a group index, from the group_info field of an XkbSymMapRec structure .SH SYNOPSIS .HP .B unsigned char XkbOutOfRangeGroupNumber .BI "(\^unsigned char " "grp_inf" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- grp_inf Xkb description of interest .SH DESCRIPTION .LP .I XkbOutOfRangeGroupNumber returns the out-of-range group number, represented as a group index, from the .I group_info field of an XkbSymMapRec structure. The .I group_info field of an XkbSymMapRec is an encoded value containing the number of groups of symbols bound to the key as well as the specification of the treatment of out-of-range groups. It is legal for a key to have zero groups, in which case it also has zero symbols and all events from that key yield NoSymbol. To obtain the number of groups of symbols bound to the key, use .I XkbKeyNumGroups. To change the number of groups bound to a key, use .I XkbChangeTypesOfKey. To obtain a mask that determines the treatment of out-of-range groups, use .I XkbKeyGroupInfo and .I XkbOutOfRangeGroupInfo. The keyboard controls contain a .I groups_wrap field specifying the handling of illegal groups on a global basis. That is, when the user performs an action causing the effective group to go out of the legal range, the .I groups_wrap field specifies how to normalize the effective keyboard group to a group that is legal for the keyboard as a whole, but there is no guarantee that the normalized group will be within the range of legal groups for any individual key. The per-key .I group_info field specifies how a key treats a legal effective group if the key does not have a type specified for the group of concern. For example, the Enter key usually has just one group defined. If the user performs an action causing the global keyboard group to change to Group2, the .I group_info field for the Enter key describes how to handle this situation. Out-of-range groups for individual keys are mapped to a legal group using the same options as are used for the overall keyboard group. The particular type of mapping used is controlled by the bits set in the .I group_info flag, as shown in Table 1. .TS c s l l l l. Table 1 group_info Range Normalization _ Bits set in group_info Normalization method _ XkbRedirectIntoRange XkbRedirectIntoRange XkbClampIntoRange XkbClampIntoRange none of the above XkbWrapIntoRange .TE .SH STRUCTURES .LP The KeySymMapRec structure is defined as follows: .nf #define XkbNumKbdGroups 4 #define XkbMaxKbdGroup (XkbNumKbdGroups-1) typedef struct { /\(** map to keysyms for a single keycode */ unsigned char kt_index[XkbNumKbdGroups]; /\(** key type index for each group */ unsigned char group_info; /\(** # of groups and out of range group handling */ unsigned char width; /\(** max # of shift levels for key */ unsigned short offset; /\(** index to keysym table in syms array */ } XkbSymMapRec, *XkbSymMapPtr; .fi .nf The XkbControlsRec structure is defined as follows: #define XkbMaxLegalKeyCode 255 #define XkbPerKeyBitArraySize ((XkbMaxLegalKeyCode+1)/8) typedef struct { unsigned char mk_dflt_btn; /\(** default button for keyboard driven mouse */ unsigned char num_groups; /\(** number of keyboard groups */ unsigned char groups_wrap; /\(** how to wrap out-of-bounds groups */ XkbModsRec internal; /\(** defines server internal modifiers */ XkbModsRec ignore_lock; /\(** modifiers to ignore when checking for grab */ unsigned int enabled_ctrls; /\(** 1 bit => corresponding boolean control enabled */ unsigned short repeat_delay; /\(** ms delay until first repeat */ unsigned short repeat_interval; /\(** ms delay between repeats */ unsigned short slow_keys_delay; /\(** ms minimum time key must be down to be ok */ unsigned short debounce_delay; /\(** ms delay before key reactivated */ unsigned short mk_delay; /\(** ms delay to second mouse motion event */ unsigned short mk_interval; /\(** ms delay between repeat mouse events */ unsigned short mk_time_to_max; /\(** # intervals until constant mouse move */ unsigned short mk_max_speed; /\(** multiplier for maximum mouse speed */ short mk_curve; /\(** determines mouse move curve type */ unsigned short ax_options; /\(** 1 bit => Access X option enabled */ unsigned short ax_timeout; /\(** seconds until Access X disabled */ unsigned short axt_opts_mask; /\(** 1 bit => options to reset on Access X timeout */ unsigned short axt_opts_values; /\(** 1 bit => turn option on, 0=> off */ unsigned int axt_ctrls_mask; /\(** which bits in enabled_ctrls to modify */ unsigned int axt_ctrls_values; /\(** values for new bits in enabled_ctrls */ unsigned char per_key_repeat[XkbPerKeyBitArraySize]; /\(** per key auto repeat */ } XkbControlsRec, *XkbControlsPtr; .fi .nf The XkbControlsRec structure is defined as follows: #define XkbMaxLegalKeyCode 255 #define XkbPerKeyBitArraySize ((XkbMaxLegalKeyCode+1)/8) typedef struct { unsigned char mk_dflt_btn; /\(** default button for keyboard driven mouse */ unsigned char num_groups; /\(** number of keyboard groups */ unsigned char groups_wrap; /\(** how to wrap out-of-bounds groups */ XkbModsRec internal; /\(** defines server internal modifiers */ XkbModsRec ignore_lock; /\(** modifiers to ignore when checking for grab */ unsigned int enabled_ctrls; /\(** 1 bit => corresponding boolean control enabled */ unsigned short repeat_delay; /\(** ms delay until first repeat */ unsigned short repeat_interval; /\(** ms delay between repeats */ unsigned short slow_keys_delay; /\(** ms minimum time key must be down to be ok */ unsigned short debounce_delay; /\(** ms delay before key reactivated */ unsigned short mk_delay; /\(** ms delay to second mouse motion event */ unsigned short mk_interval; /\(** ms delay between repeat mouse events */ unsigned short mk_time_to_max; /\(** # intervals until constant mouse move */ unsigned short mk_max_speed; /\(** multiplier for maximum mouse speed */ short mk_curve; /\(** determines mouse move curve type */ unsigned short ax_options; /\(** 1 bit => Access X option enabled */ unsigned short ax_timeout; /\(** seconds until Access X disabled */ unsigned short axt_opts_mask; /\(** 1 bit => options to reset on Access X timeout */ unsigned short axt_opts_values; /\(** 1 bit => turn option on, 0=> off */ unsigned int axt_ctrls_mask; /\(** which bits in enabled_ctrls to modify */ unsigned int axt_ctrls_values; /\(** values for new bits in enabled_ctrls */ unsigned char per_key_repeat[XkbPerKeyBitArraySize]; /\(** per key auto repeat */ } XkbControlsRec, *XkbControlsPtr; .fi .SH "SEE ALSO" .BR XkbChangeTypesOfKey (__libmansuffix__), .BR XkbKeyGroupInfo (__libmansuffix__), .BR XkbOutOfRangeGroupInfo (__libmansuffix__) libX11-1.6.3/man/xkb/XkbGetKeyExplicitComponents.man000064401431060000012000000120141247741723500225150ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbGetKeyExplicitComponents __libmansuffix__ "20 Jul 1999" "X v11 Rel. 6.4" "XKB FUNCTION" .SH NAME XkbGetKeyExplicitComponents \- Obtain the explicit components (the explicit array) for a subset of the keys in a keyboard description .SH SYNOPSIS .HP .B Status XkbGetKeyExplicitComponents .BI "(\^Display *" "dpy" "\^," .BI "unsigned int " "first" "\^," .BI "unsigned int " "num" "\^," .BI "XkbDescPtr " "xkb" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to server .TP .I \- first keycode of first key to fetch .TP .I \- num number of keys for which to get explicit info .TP .I \- xkb Xkb description in which to put results .SH DESCRIPTION .LP Whenever a client remaps the keyboard using core protocol requests, Xkb examines the map to determine likely default values for the components that cannot be specified using the core protocol (see Core Keyboard Mapping to Xkb Keyboard Mapping Transformation for more information on how Xkb chooses the default values). DO THE FOUR PAGES OF "CORE KEYBOARD MAPPING TO XKB KEYBOARD MAPPING TRANSFORMATION" NEED TO BE ADDED HERE? This automatic remapping might replace definitions explicitly requested by an application, so the Xkb keyboard description defines an explicit components mask for each key. Any aspects of the automatic remapping listed in the explicit components mask for a key are not changed by the automatic keyboard mapping. The explicit components masks are held in the .I explicit field of the server map, which is an array indexed by keycode. Each entry in this array is a mask that is a bitwise inclusive OR of the values shown in Table 1. .TS c s s l l l l l lw(3i). Table 1 Explicit Component Masks _ Bit in Explicit Mask Value Protects Against _ ExplicitKeyType1 (1<<0) T{ Automatic determination of the key type associated with Group1. T} ExplicitKeyType2 (1<<1) T{ Automatic determination of the key type associated with Group2. T} ExplicitKeyType3 (1<<2) T{ Automatic determination of the key type associated with Group3. T} ExplicitKeyType4 (1<<3) T{ Automatic determination of the key type associated with Group4. T} ExplicitInterpret (1<<4) T{ Application of any of the fields of a symbol interpretation to the key in question. T} ExplicitAutoRepeat (1<<5) T{ Automatic determination of auto-repeat status for the key, as specified in a symbol interpretation. T} ExplicitBehavior (1<<6) T{ Automatic assignment of the XkbKB_Lock behavior to the key, if the XkbSI_LockingKey flag is set in a symbol interpretation. T} ExplicitVModMap (1<<7) T{ Automatic determination of the virtual modifier map for the key based on the actions assigned to the key and the symbol interpretations that match the key. T} .TE .I XkbGetKeyExplicitComponents sends a request to the server to obtain the explicit components for .I num keys on the keyboard starting with key .I first. It waits for a reply and returns the explicit components in the .I server->explicit array of .I xkb. If successful, .I XkbGetKeyExplicitComponents returns Success. The .I xkb parameter must be a pointer to a valid Xkb keyboard description. If the .I server map in the .I xkb parameter has not been allocated, .I XkbGetKeyExplicitComponents allocates and initializes it before obtaining the actions. If the server does not have a compatible version of Xkb, or the Xkb extension has not been properly initialized, .I XkbGetKeyExplicitComponents returns BadMatch. If .I num is less than 1 or greater than XkbMaxKeyCount, .I XkbGetKeyExplicitComponents returns BadValue. If any allocation errors occur, .I XkbGetKeyExplicitComponents returns BadAlloc. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadMatch A compatible version of Xkb was not available in the server or an argument has correct type and range, but is otherwise invalid .TP 15 .B BadValue An argument is out of range libX11-1.6.3/man/xkb/XkbGetDeviceInfoChanges.man000064401431060000012000000044701247741723500215300ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbGetDeviceInfoChanges __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbGetDeviceInfoChanges \- Query the changes that have occurred in the button actions or indicator names and indicator maps associated with an input extension device .SH SYNOPSIS .HP .B Status XkbGetDeviceInfoChanges .BI "(\^Display *" "dpy" "\^," .BI "XkbDeviceInfoPtr " "device_info" "\^," .BI "XkbDeviceChangesPtr " "changes" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to X server .TP .I \- device_info structure to update with results .TP .I \- changes contains notes of changes that have occurred .SH DESCRIPTION .LP The .I changes->changed field indicates which attributes of the device specified in .I changes->device have changed. The parameters describing the changes are contained in the other fields of .I changes. XkbGetDeviceInfoChanges uses that information to call .I XkbGetDeviceInfo to obtain the current status of those attributes that have changed. It then updates the local description of the device in .I device_info with the new information. .SH "SEE ALSO" .BR XkbGetDeviceInfo (__libmansuffix__) libX11-1.6.3/man/xkb/XkbKeyNumGroups.man000064401431060000012000000265621247741723500202020ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbKeyNumGroups __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbKeyNumGroups \- Returns the number of groups of symbols bound to the key corresponding to keycode .SH SYNOPSIS .HP .B int XkbKeyNumGroups .BI "(\^XkbDescPtr " "xkb" "\^," .BI "KeyCode " "keycode" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb Xkb description of interest .TP .I \- keycode keycode of interest .SH DESCRIPTION .LP The .I group_info field of an XkbSymMapRec is an encoded value containing the number of groups of symbols bound to the key as well as the specification of the treatment of out-of-range groups. It is legal for a key to have zero groups, in which case it also has zero symbols and all events from that key yield NoSymbol. To obtain the number of groups of symbols bound to the key, use .I XkbKeyNumGroups. To change the number of groups bound to a key, use .I XkbChangeTypesOfKey. To obtain a mask that determines the treatment of out-of-range groups, use .I XkbKeyGroupInfo and .I XkbOutOfRangeGroupInfo. The keyboard controls contain a .I groups_wrap field specifying the handling of illegal groups on a global basis. That is, when the user performs an action causing the effective group to go out of the legal range, the .I groups_wrap field specifies how to normalize the effective keyboard group to a group that is legal for the keyboard as a whole, but there is no guarantee that the normalized group will be within the range of legal groups for any individual key. The per-key .I group_info field specifies how a key treats a legal effective group if the key does not have a type specified for the group of concern. For example, the Enter key usually has just one group defined. If the user performs an action causing the global keyboard group to change to Group2, the .I group_info field for the Enter key describes how to handle this situation. Out-of-range groups for individual keys are mapped to a legal group using the same options as are used for the overall keyboard group. The particular type of mapping used is controlled by the bits set in the .I group_info flag, as shown in Table 1. .bp .TS c s l l l l. Table 1 group_info Range Normalization _ Bits set in group_info Normalization method _ XkbRedirectIntoRange XkbRedirectIntoRange XkbClampIntoRange XkbClampIntoRange none of the above XkbWrapIntoRange .TE .\"--- Chapter 10 The Xkb extension is composed of two parts: a server extension, and a client-side X library extension. This chapter discusses functions used to modify controls effecting the behavior of the server portion of the Xkb extension. X Library Controls discusses functions used to modify controls that affect only the behavior of the client portion of the extension; those controls are known as Library Controls. Xkb contains control features that affect the entire keyboard, known as global keyboard controls. Some of the controls may be selectively enabled and disabled; these controls are known as the .I Boolean Controls. Boolean Controls can be turned on or off under program control and can also be automatically set to an on or off condition when a client program exits. The remaining controls, known as the .I Non-Boolean Controls, are always active. The XkbControlsRec structure describes the current state of most of the global controls and the attributes effecting the behavior of each of these Xkb features. This chapter describes the Xkb controls and how to manipulate them. There are two possible components for each of the Boolean Controls: attributes describing how the control should work, and a state describing whether the behavior as a whole is enabled or disabled. The attributes and state for most of these controls are held in the XkbControlsRec structure. You can manipulate the Xkb controls individually, via convenience functions, or as a whole. To treat them as a group, modify an XkbControlsRec structure to describe all of the changes to be made, and then pass that structure and appropriate flags to an Xkb library function, or use a XkbControlsChangesRec to reduce network traffic. When using a convenience function to manipulate one control individually, you do not use an XkbControlsRec structure directly. The Xkb controls are grouped as shown in Table 2. .TS c s s l l l lw(2i) l l. Table 2 Xkb Keyboard Controls _ Type of Control Control Name Boolean Control? _ T{ Controls for enabling and disabling other controls T} EnabledControls No AutoReset No T{ Control for bell behavior T} AudibleBell Boolean T{ Controls for repeat key behavior T} PerKeyRepeat No RepeatKeys Boolean DetectableAutorepeat Boolean T{ Controls for keyboard overlays T} Overlay1 Boolean Overlay2 Boolean T{ Controls for using the mouse from the keyboard T} MouseKeys Boolean MouseKeysAccel Boolean T{ Controls for better keyboard access by T} AccessXFeedback Boolean T{ physically impaired persons T} AccessXKeys Boolean AccessXTimeout Boolean BounceKeys Boolean SlowKeys Boolean StickyKeys Boolean T{ Controls for general keyboard mapping T} GroupsWrap No IgnoreGroupLock Boolean IgnoreLockMods No InternalMods No .TE The individual categories and controls are described first, together with functions for manipulating them. .SH STRUCTURES .LP The KeySymMapRec structure is defined as follows: .nf #define XkbNumKbdGroups 4 #define XkbMaxKbdGroup (XkbNumKbdGroups-1) typedef struct { /\(** map to keysyms for a single keycode */ unsigned char kt_index[XkbNumKbdGroups]; /\(** key type index for each group */ unsigned char group_info; /\(** # of groups and out of range group handling */ unsigned char width; /\(** max # of shift levels for key */ unsigned short offset; /\(** index to keysym table in syms array */ } XkbSymMapRec, *XkbSymMapPtr; .fi .nf The XkbControlsRec structure is defined as follows: #define XkbMaxLegalKeyCode 255 #define XkbPerKeyBitArraySize ((XkbMaxLegalKeyCode+1)/8) typedef struct { unsigned char mk_dflt_btn; /\(** default button for keyboard driven mouse */ unsigned char num_groups; /\(** number of keyboard groups */ unsigned char groups_wrap; /\(** how to wrap out-of-bounds groups */ XkbModsRec internal; /\(** defines server internal modifiers */ XkbModsRec ignore_lock; /\(** modifiers to ignore when checking for grab */ unsigned int enabled_ctrls; /\(** 1 bit => corresponding boolean control enabled */ unsigned short repeat_delay; /\(** ms delay until first repeat */ unsigned short repeat_interval; /\(** ms delay between repeats */ unsigned short slow_keys_delay; /\(** ms minimum time key must be down to be ok */ unsigned short debounce_delay; /\(** ms delay before key reactivated */ unsigned short mk_delay; /\(** ms delay to second mouse motion event */ unsigned short mk_interval; /\(** ms delay between repeat mouse events */ unsigned short mk_time_to_max; /\(** # intervals until constant mouse move */ unsigned short mk_max_speed; /\(** multiplier for maximum mouse speed */ short mk_curve; /\(** determines mouse move curve type */ unsigned short ax_options; /\(** 1 bit => Access X option enabled */ unsigned short ax_timeout; /\(** seconds until Access X disabled */ unsigned short axt_opts_mask; /\(** 1 bit => options to reset on Access X timeout */ unsigned short axt_opts_values; /\(** 1 bit => turn option on, 0=> off */ unsigned int axt_ctrls_mask; /\(** which bits in enabled_ctrls to modify */ unsigned int axt_ctrls_values; /\(** values for new bits in enabled_ctrls */ unsigned char per_key_repeat[XkbPerKeyBitArraySize]; /\(** per key auto repeat */ } XkbControlsRec, *XkbControlsPtr; .fi .nf The XkbControlsRec structure is defined as follows: #define XkbMaxLegalKeyCode 255 #define XkbPerKeyBitArraySize ((XkbMaxLegalKeyCode+1)/8) typedef struct { unsigned char mk_dflt_btn; /\(** default button for keyboard driven mouse */ unsigned char num_groups; /\(** number of keyboard groups */ unsigned char groups_wrap; /\(** how to wrap out-of-bounds groups */ XkbModsRec internal; /\(** defines server internal modifiers */ XkbModsRec ignore_lock; /\(** modifiers to ignore when checking for grab */ unsigned int enabled_ctrls; /\(** 1 bit => corresponding boolean control enabled */ unsigned short repeat_delay; /\(** ms delay until first repeat */ unsigned short repeat_interval; /\(** ms delay between repeats */ unsigned short slow_keys_delay; /\(** ms minimum time key must be down to be ok */ unsigned short debounce_delay; /\(** ms delay before key reactivated */ unsigned short mk_delay; /\(** ms delay to second mouse motion event */ unsigned short mk_interval; /\(** ms delay between repeat mouse events */ unsigned short mk_time_to_max; /\(** # intervals until constant mouse move */ unsigned short mk_max_speed; /\(** multiplier for maximum mouse speed */ short mk_curve; /\(** determines mouse move curve type */ unsigned short ax_options; /\(** 1 bit => Access X option enabled */ unsigned short ax_timeout; /\(** seconds until Access X disabled */ unsigned short axt_opts_mask; /\(** 1 bit => options to reset on Access X timeout */ unsigned short axt_opts_values; /\(** 1 bit => turn option on, 0=> off */ unsigned int axt_ctrls_mask; /\(** which bits in enabled_ctrls to modify */ unsigned int axt_ctrls_values; /\(** values for new bits in enabled_ctrls */ unsigned char per_key_repeat[XkbPerKeyBitArraySize]; /\(** per key auto repeat */ } XkbControlsRec, *XkbControlsPtr; .fi .SH "SEE ALSO" .BR XkbChangeTypesOfKey (__libmansuffix__), .BR XkbKeyGroupInfo (__libmansuffix__), .BR XkbOutOfRangeGroupInfo. (__libmansuffix__) libX11-1.6.3/man/xkb/XkbComputeShapeTop.man000064401431060000012000000054351247741723500206460ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbComputeShapeTop __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbComputeShapeTop \- Determines the bounding box of the top surface of a shape .SH SYNOPSIS .HP .B Bool XkbComputeShapeTop .BI "(\^XkbShapePtr " "shape" "\^," .BI "XkbBoundsPtr " "bounds_rtrn" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- shape shape to be examined .TP .I \- bounds_rtrn backfilled with the bounding box for the shape .SH DESCRIPTION .LP Xkb provides a number of convenience functions to help use a keyboard geometry. These include functions to return the bounding box of a shape's top surface and to update the bounding box of a shape row or section. A shape is made up of a number of outlines. Each outline is a polygon made up of a number of points. The bounding box of a shape is a rectangle that contains all the outlines of that shape. .I XkbComputeShapeTop returns a BoundsRec that contains two x and y coordinates. These coordinates describe the corners of a rectangle that contains the outline that describes the top surface of the shape. The top surface is defined to be the approximating outline if the .I approx field of .I shape is not NULL. If .I approx is NULL, the top surface is defined as the last outline in the .I shape's array of outlines. .I XkbComputeShapeTop returns False if .I shape is NULL or if there are no outlines for the shape; otherwise, it returns True. .SH STRUCTURES .LP .nf typedef struct _XkbBounds { short x1,y1; /\(** upper left corner of the bounds, in mm/10 */ short x2,y2; /\(** lower right corner of the bounds, in mm/10 */ } XkbBoundsRec, *XkbBoundsPtr; .fi libX11-1.6.3/man/xkb/XkbKeyGroupWidth.man000064401431060000012000000047331247741723500203330ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbKeyGroupWidth __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbKeyGroupWidth \- Computes the width of the type associated with the group .I grp for the key corresponding to .I keycode .SH SYNOPSIS .HP .B int XkbKeyGroupWidth .BI "(\^XkbDescPtr " "xkb" "\^," .BI "KeyCode " "keycode" "\^," .BI "int " "grp" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb Xkb description of interest .TP .I \- keycode keycode of interest .TP .I \- grp group of interest .SH DESCRIPTION .LP The key width and number of groups associated with a key are used to form a small two-dimensional array of KeySyms for a key. This array may be different sizes for different keys. The array for a single key is stored as a linear list, in row-major order. The arrays for all of the keys are stored in the .I syms field of the client map. There is one row for each group associated with a key and one column for each level. The index corresponding to a given group and shift level is computed as: .nf idx = group_index * key_width + shift_level .fi The .I offset field of the .I key_sym_map entry for a key is used to access the beginning of the array. .I XkbKeyGroupWidth computes the width of the type associated with the group .I grp for the key corresponding to .I keycode. libX11-1.6.3/man/xkb/XkbAllocGeomPoints.man000064401431060000012000000046721247741723500206270ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAllocGeomPoints __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAllocGeomPoints \- Allocate points in an outline .SH SYNOPSIS .HP .B Status XkbAllocGeomPoints .BI "(\^XkbOutlinePtr " "outline" "\^," .BI "int " "num_needed" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- outline outline for which points should be allocated .TP .I \- num_needed number of new points required .SH DESCRIPTION .LP Xkb provides a number of functions to allocate and free subcomponents of a keyboard geometry. Use these functions to create or modify keyboard geometries. Note that these functions merely allocate space for the new element(s), and it is up to you to fill in the values explicitly in your code. These allocation functions increase .I sz_* but never touch .I num_* (unless there is an allocation failure, in which case they reset both .I sz_* and .I num_* to zero). These functions return Success if they succeed, BadAlloc if they are not able to allocate space, or BadValue if a parameter is not as expected. .I XkbAllocGeomPoints allocates space for .I num_needed points in the specified .I outline. The points are not initialized. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadValue An argument is out of range libX11-1.6.3/man/xkb/XkbFreeGeomOverlayRows.man000064401431060000012000000054471247741723500214770ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbFreeGeomOverlayRows __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbFreeGeomOverlayRows \- Free rows in an overlay .SH SYNOPSIS .HP .B void XkbFreeGeomOverlayRows .BI "(\^XkbSectionPtr " "overlay" "\^," .BI "int " "first" "\^," .BI "int " "count" "\^," .BI "Bool " "free_all" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- overlay section in which rows should be freed .TP .I \- first first row to be freed .TP .I \- count number of rows to be freed .TP .I \- free_all True => all rows are freed .SH DESCRIPTION .LP Xkb provides a number of functions to allocate and free subcomponents of a keyboard geometry. Use these functions to create or modify keyboard geometries. Note that these functions merely allocate space for the new element(s), and it is up to you to fill in the values explicitly in your code. These allocation functions increase .I sz_* but never touch .I num_* (unless there is an allocation failure, in which case they reset both .I sz_* and .I num_* to zero). These functions return Success if they succeed, BadAlloc if they are not able to allocate space, or BadValue if a parameter is not as expected. If .I free_all is True, all rows are freed regardless of the value of .I first and .I count. Otherwise, the number of rows specified by .I count are freed, beginning with the row specified by .I first in the specified overlay. .SH "RETURN VALUES" .TP 15 Success The XkbFreeGeomOverlayRows function returns Success if there are no allocation or argument errors. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadValue An argument is out of range libX11-1.6.3/man/xkb/XkbGetNamedGeometry.man000064401431060000012000000111621247741723500207600ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbGetNamedGeometry __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbGetNamedGeometry \- Loads a keyboard geometry description from this database by name .SH SYNOPSIS .HP .B Status XkbGetNamedGeometry .BI "(\^Display *" "dpy" "\^," .BI "XkbDescPtr " "xkb" "\^," .BI "Atom " "name" "\^);" .SH ARGUMENTS .TP .I \- dpy connection to the X server .TP .I \- xkb keyboard description into which the geometry should be loaded .TP .I \- name name of the geometry to be loaded .SH DESCRIPTION .LP It is also possible to load a keyboard geometry by name. The X server maintains a database of keyboard components (see below). .I XkbGetNamedGeometry can return BadName if the name cannot be found. The X server maintains a database of keyboard components, identified by component type. The database contains all the information necessary to build a complete keyboard description for a particular device, as well as to assemble partial descriptions. Table 1 identifies the component types and the type of information they contain. .TS c s s l l l l l l l lw(2i) lw(2i). Table 1 Server Database Keyboard Components _ Component Component Primary Contents May also contain Type _ Keymap T{ Complete keyboard description .br Normally assembled using a complete component from each of the other types T} .sp Keycodes T{ Symbolic name for each key .br Minimum and maximum legal keycodes T} T{ Aliases for some keys .br Symbolic names for indicators .br Description of indicators physically present T} .sp Types Key types T{ Real modifier bindings and symbolic names for some virtual modifiers T} .sp Compatibility T{ Rules used to assign actions to keysyms T} T{ Maps for some indicators .br Real modifier bindings and symbolic names for some virtual modifiers T} .sp Symbols T{ Symbol mapping for keyboard keys .br Modifier mapping .br Symbolic names for groups T} T{ Explicit actions and behaviors for some keys .br Real modifier bindings and symbolic names for some virtual modifiers T} .sp Geometry Layout of the keyboard T{ Aliases for some keys; overrides keycodes component aliases .br Symbolic names for some indicators .br Description of indicators physically present T} .TE While a keymap is a database entry for a complete keyboard description, and therefore logically different from the individual component database entries, the rules for processing keymap entries are identical to those for the individual components. In the discussion that follows, the term component is used to refer to either individual components or a keymap. There may be multiple entries for each of the component types. An entry may be either .I complete or .I partial. Partial entries describe only a piece of the corresponding keyboard component and are designed to be combined with other entries of the same type to form a complete entry. For example, a partial symbols map might describe the differences between a common ASCII keyboard and some national layout. Such a partial map is not useful on its own because it does not include those symbols that are the same on both the ASCII and national layouts (such as function keys). On the other hand, this partial map can be used to configure .I any ASCII keyboard to use a national layout. When a keyboard description is built, the components are processed in the order in which they appear in Table 1; later definitions override earlier ones. .SH DIAGNOSTICS .TP 15 .B BadName A font or color of the specified name does not exist. libX11-1.6.3/man/xkb/XkbAllocGeomOverlayRows.man000064401431060000012000000051001247741723500216320ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAllocGeomOverlayRows __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAllocGeomOverlayRows \- Allocate rows in a overlay .SH SYNOPSIS .HP .B Status XkbAllocGeomOverlayRows .BI "(\^XkbOverlayPtr " "overlay" "\^," .BI "int " "num_needed" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- overlay section for which rows should be allocated .TP .I \- num_needed number of new rows required .SH DESCRIPTION .LP Xkb provides a number of functions to allocate and free subcomponents of a keyboard geometry. Use these functions to create or modify keyboard geometries. Note that these functions merely allocate space for the new element(s), and it is up to you to fill in the values explicitly in your code. These allocation functions increase .I sz_* but never touch .I num_* (unless there is an allocation failure, in which case they reset both .I sz_* and .I num_* to zero). These functions return Success if they succeed, BadAlloc if they are not able to allocate space, or BadValue if a parameter is not as expected. .I XkbAllocGeomOverlayRows allocates .I num_needed rows and adds them to the .I overlay. No initialization of the rows is done. To free rows in an overlay, use .I XkbFreeGeomOverlayRows. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadValue An argument is out of range .SH "SEE ALSO" .BR XkbFreeGeomOverlayRows (__libmansuffix__) ermission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER .\"libX11-1.6.3/man/xkb/XkbFreeGeomSections.man000064401431060000012000000054661247741723500207730ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbFreeGeomSections __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbFreeGeomSections \- Free geometry sections .SH SYNOPSIS .HP .B void XkbFreeGeomSections .BI "(\^XkbGeometryPtr " "geom" "\^," .BI "int " "first" "\^," .BI "int " "count" "\^," .BI "Bool " "free_all" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- geom geometry in which sections should be freed .TP .I \- first first section to be freed .TP .I \- count number of sections to be freed .TP .I \- free_all True => all sections are freed .SH DESCRIPTION .LP Xkb provides a number of functions to allocate and free subcomponents of a keyboard geometry. Use these functions to create or modify keyboard geometries. Note that these functions merely allocate space for the new element(s), and it is up to you to fill in the values explicitly in your code. These allocation functions increase .I sz_* but never touch .I num_* (unless there is an allocation failure, in which case they reset both .I sz_* and .I num_* to zero). These functions return Success if they succeed, BadAlloc if they are not able to allocate space, or BadValue if a parameter is not as expected. If .I free_all is True, all sections are freed regardless of the value of .I first and .I count. Otherwise, the number of sections specified by .I count are freed, beginning with the section specified by .I first in the specified geometry. .SH "RETURN VALUES" .TP 15 Success The XkbFreeGeomSections function returns Success when there are no allocation or argument errors. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadValue An argument is out of range libX11-1.6.3/man/xkb/XkbSetDeviceButtonActions.man000064401431060000012000000063641247741723500221600ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbSetDeviceButtonActions __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbSetDeviceButtonActions \- Change only the button actions for an input extension device .SH SYNOPSIS .HP .B Bool XkbSetDeviceButtonActions .BI "(\^Display *" "dpy" "\^," .BI "XkbDeviceInfoPtr " "device" "\^," .BI "unsigned int " "first_button" "\^," .BI "unsigned int " "num_buttons" "\^);" .SH ARGUMENTS .TP .I \- dpy connection to X server .TP .I \- device structure defining the device and modifications .TP .I \- first_button number of first button to update, 0 relative .TP .I \- num_buttons number of buttons to update .SH DESCRIPTION .LP .I XkbSetDeviceButtonActions assigns actions to the buttons of the device specified in .I device_info->device_spec. Actions are assigned to .I num_buttons buttons beginning with .I first_button and are taken from the actions specified in .I device_info->btn_acts. If the server does not support assignment of Xkb actions to extension device buttons, .I XkbSetDeviceButtonActions has no effect and returns False. If the device has no buttons or if .I first_button or .I num_buttons specify buttons outside of the valid range as determined by .I device_info->num_btns, the function has no effect and returns False. Otherwise, .I XkbSetDeviceButtonActions sends a request to the server to change the actions for the specified buttons and returns True. If the actual request sent to the server involved illegal button numbers, a BadValue protocol error is generated. If an invalid device identifier is specified in .I device_info->device_spec, a BadKeyboard protocol error results. If the actual device specified in .I device_info->device_spec does not contain buttons and a request affecting buttons is made, a BadMatch protocol error is generated. .SH DIAGNOSTICS .TP 15 .B BadKeyboard The device specified was not a valid core or input extension device .TP 15 .B BadMatch A compatible version of Xkb was not available in the server or an argument has correct type and range, but is otherwise invalid .TP 15 .B BadValue An argument is out of range libX11-1.6.3/man/xkb/XkbComputeShapeBounds.man000064401431060000012000000070061247741723500213320ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbComputeShapeBounds __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbComputeShapeBounds \- Updates the bounding box of a shape .SH SYNOPSIS .HP .B Bool XkbComputeShapeBounds .BI "(\^XkbShapePtr " "shape" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- shape shape to be examined .SH DESCRIPTION .LP Xkb provides a number of convenience functions to help use a keyboard geometry. These include functions to return the bounding box of a shape's top surface and to update the bounding box of a shape row or section. A shape is made up of a number of outlines. Each outline is a polygon made up of a number of points. The bounding box of a shape is a rectangle that contains all the outlines of that shape. A ShapeRec contains a BoundsRec that describes the bounds of the shape. If you add or delete an outline to or from a shape, the bounding box must be updated. .I XkbComputeShapeBounds updates the BoundsRec contained in the .I shape by examining all the outlines of the shape and setting the BoundsRec to the minimum x and minimum y, and maximum x and maximum y values found in those outlines. .I XkbComputeShapeBounds returns False if .I shape is NULL or if there are no outlines for the shape; otherwise, it returns True. If you add or delete a key to or from a row, or if you update the shape of one of the keys in that row, you may need to update the bounding box of that row. To update the bounding box of a row, use .I XkbComputeRowBounds. .SH STRUCTURES .LP .nf typedef struct _XkbShape { Atom name; /\(** shape's name */ unsigned short num_outlines; /\(** number of outlines for the shape */ unsigned short sz_outlines; /\(** size of the outlines array */ XkbOutlinePtr outlines; /\(** array of outlines for the shape */ XkbOutlinePtr approx; /\(** pointer into the array to the approximating outline */ XkbOutlinePtr primary; /\(** pointer into the array to the primary outline */ XkbBoundsRec bounds; /\(** bounding box for the shape; encompasses all outlines */ } XkbShapeRec, *XkbShapePtr; typedef struct _XkbBounds { short x1,y1; /\(** upper left corner of the bounds, in mm/10 */ short x2,y2; /\(** lower right corner of the bounds, in mm/10 */ } XkbBoundsRec, *XkbBoundsPtr; .fi .SH "SEE ALSO" .BR XkbComputeRowBounds (__libmansuffix__) libX11-1.6.3/man/xkb/Makefile.in000064401431060000012000000605251247741725400164730ustar00alancstaff00002660200006# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = man/xkb ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_define_dir.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h \ $(top_builddir)/include/X11/XlibConf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libmandir)" DATA = $(libman_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASE_CFLAGS = @BASE_CFLAGS@ BIGFONT_CFLAGS = @BIGFONT_CFLAGS@ BIGFONT_LIBS = @BIGFONT_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHANGELOG_CMD = @CHANGELOG_CMD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ FOP = @FOP@ GREP = @GREP@ I18N_MODULE_LIBS = @I18N_MODULE_LIBS@ INSTALL = @INSTALL@ INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ KEYSYMDEFS = @KEYSYMDEFS@ LAUNCHD = @LAUNCHD@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LINT = @LINT@ LINTLIB = @LINTLIB@ LINT_FLAGS = @LINT_FLAGS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MALLOC_ZERO_CFLAGS = @MALLOC_ZERO_CFLAGS@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_SUBSTS = @MAN_SUBSTS@ MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RAWCPP = @RAWCPP@ RAWCPPFLAGS = @RAWCPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRICT_CFLAGS = @STRICT_CFLAGS@ STRIP = @STRIP@ STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ TRADITIONALCPPFLAGS = @TRADITIONALCPPFLAGS@ VERSION = @VERSION@ WCHAR32 = @WCHAR32@ X11_CFLAGS = @X11_CFLAGS@ X11_DATADIR = @X11_DATADIR@ X11_EXTRA_DEPS = @X11_EXTRA_DEPS@ X11_LIBDIR = @X11_LIBDIR@ X11_LIBS = @X11_LIBS@ X11_LOCALEDATADIR = @X11_LOCALEDATADIR@ X11_LOCALEDIR = @X11_LOCALEDIR@ X11_LOCALELIBDIR = @X11_LOCALELIBDIR@ XERRORDB = @XERRORDB@ XKBPROTO_REQUIRES = @XKBPROTO_REQUIRES@ XKEYSYMDB = @XKEYSYMDB@ XLOCALEDATADIR = @XLOCALEDATADIR@ XLOCALEDIR = @XLOCALEDIR@ XLOCALELIBDIR = @XLOCALELIBDIR@ XMALLOC_ZERO_CFLAGS = @XMALLOC_ZERO_CFLAGS@ XMLTO = @XMLTO@ XORG_MAN_PAGE = @XORG_MAN_PAGE@ XORG_SGML_PATH = @XORG_SGML_PATH@ XSLTPROC = @XSLTPROC@ XSL_STYLESHEET = @XSL_STYLESHEET@ XTHREADLIB = @XTHREADLIB@ XTHREAD_CFLAGS = @XTHREAD_CFLAGS@ XTMALLOC_ZERO_CFLAGS = @XTMALLOC_ZERO_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ locales = @locales@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ libmandir = $(LIB_MAN_DIR) libman_PRE = \ XkbActionCtrls.man \ XkbAddDeviceLedInfo.man \ XkbAddGeomColor.man \ XkbAddGeomDoodad.man \ XkbAddGeomKey.man \ XkbAddGeomKeyAlias.man \ XkbAddGeomOutline.man \ XkbAddGeomOverlay.man \ XkbAddGeomOverlayKey.man \ XkbAddGeomOverlayRow.man \ XkbAddGeomProperty.man \ XkbAddGeomRow.man \ XkbAddGeomSection.man \ XkbAddGeomShape.man \ XkbAddSymInterpret.man \ XkbAllocClientMap.man \ XkbAllocCompatMap.man \ XkbAllocControls.man \ XkbAllocDeviceInfo.man \ XkbAllocDeviceLedInfo.man \ XkbAllocGeomColors.man \ XkbAllocGeomDoodads.man \ XkbAllocGeomKeyAliases.man \ XkbAllocGeomKeys.man \ XkbAllocGeomOutlines.man \ XkbAllocGeomOverlayKey.man \ XkbAllocGeomOverlayRows.man \ XkbAllocGeomOverlays.man \ XkbAllocGeomPoints.man \ XkbAllocGeomProps.man \ XkbAllocGeomRows.man \ XkbAllocGeomSectionDoodads.man \ XkbAllocGeomSections.man \ XkbAllocGeomShapes.man \ XkbAllocGeometry.man \ XkbAllocIndicatorMaps.man \ XkbAllocKeyboard.man \ XkbAllocNames.man \ XkbAllocServerMap.man \ XkbApplyCompatMapToKey.man \ XkbBell.man \ XkbBellEvent.man \ XkbChangeControls.man \ XkbChangeDeviceInfo.man \ XkbChangeEnabledControls.man \ XkbChangeIndicators.man \ XkbChangeMap.man \ XkbChangeNames.man \ XkbChangeTypesOfKey.man \ XkbComputeRowBounds.man \ XkbComputeSectionBounds.man \ XkbComputeShapeBounds.man \ XkbComputeShapeTop.man \ XkbCopyKeyType.man \ XkbCopyKeyTypes.man \ XkbDeviceBell.man \ XkbDeviceBellEvent.man \ XkbFindOverlayForKey.man \ XkbForceBell.man \ XkbForceDeviceBell.man \ XkbFreeClientMap.man \ XkbFreeCompatMap.man \ XkbFreeComponentList.man \ XkbFreeControls.man \ XkbFreeDeviceInfo.man \ XkbFreeGeomColors.man \ XkbFreeGeomDoodads.man \ XkbFreeGeomKeyAliases.man \ XkbFreeGeomKeys.man \ XkbFreeGeomOutlines.man \ XkbFreeGeomOverlayKeys.man \ XkbFreeGeomOverlayRows.man \ XkbFreeGeomOverlays.man \ XkbFreeGeomPoints.man \ XkbFreeGeomProperties.man \ XkbFreeGeomRows.man \ XkbFreeGeomSections.man \ XkbFreeGeomShapes.man \ XkbFreeGeometry.man \ XkbFreeIndicatorMaps.man \ XkbFreeKeyboard.man \ XkbFreeNames.man \ XkbFreeServerMap.man \ XkbGetAccessXTimeout.man \ XkbGetAutoRepeatRate.man \ XkbGetAutoResetControls.man \ XkbGetBounceKeysDelay.man \ XkbGetCompatMap.man \ XkbGetControls.man \ XkbGetControlsChanges.man \ XkbGetDetectableAutoRepeat.man \ XkbGetDeviceButtonActions.man \ XkbGetDeviceInfo.man \ XkbGetDeviceInfoChanges.man \ XkbGetDeviceLedInfo.man \ XkbGetGeometry.man \ XkbGetIndicatorChanges.man \ XkbGetIndicatorMap.man \ XkbGetIndicatorState.man \ XkbGetKeyActions.man \ XkbGetKeyBehaviors.man \ XkbGetKeyExplicitComponents.man \ XkbGetKeyModifierMap.man \ XkbGetKeySyms.man \ XkbGetKeyTypes.man \ XkbGetKeyVirtualModMap.man \ XkbGetKeyboard.man \ XkbGetKeyboardByName.man \ XkbGetMap.man \ XkbGetNameChanges.man \ XkbGetNamedGeometry.man \ XkbGetNamedIndicator.man \ XkbGetNames.man \ XkbGetSlowKeysDelay.man \ XkbGetState.man \ XkbGetStickyKeysOptions.man \ XkbGetUpdatedMap.man \ XkbGetVirtualMods.man \ XkbGetXlibControls.man \ XkbIgnoreExtension.man \ XkbInitCanonicalKeyTypes.man \ XkbKeyAction.man \ XkbKeyActionEntry.man \ XkbKeyActionsPtr.man \ XkbKeyGroupInfo.man \ XkbKeyGroupWidth.man \ XkbKeyGroupsWidth.man \ XkbKeyHasActions.man \ XkbKeyNumActions.man \ XkbKeyNumGroups.man \ XkbKeyNumSyms.man \ XkbKeySymEntry.man \ XkbKeySymsOffset.man \ XkbKeySymsPtr.man \ XkbKeyType.man \ XkbKeyTypeIndex.man \ XkbKeyTypesForCoreSymbols.man \ XkbKeycodeToKeysym.man \ XkbKeysymToModifiers.man \ XkbLatchGroup.man \ XkbLatchModifiers.man \ XkbLibraryVersion.man \ XkbListComponents.man \ XkbLockGroup.man \ XkbLockModifiers.man \ XkbLookupKeyBinding.man \ XkbLookupKeySym.man \ XkbModActionVMods.man \ XkbNoteControlsChanges.man \ XkbNoteDeviceChanges.man \ XkbNoteIndicatorChanges.man \ XkbNoteNameChanges.man \ XkbOpenDisplay.man \ XkbOutOfRangeGroupInfo.man \ XkbOutOfRangeGroupNumber.man \ XkbPtrActionX.man \ XkbPtrActionY.man \ XkbQueryExtension.man \ XkbRefreshKeyboardMapping.man \ XkbResizeDeviceButtonActions.man \ XkbResizeKeyActions.man \ XkbResizeKeySyms.man \ XkbResizeKeyType.man \ XkbSAActionSetCtrls.man \ XkbSAGroup.man \ XkbSAPtrDfltValue.man \ XkbSARedirectSetVMods.man \ XkbSARedirectSetVModsMask.man \ XkbSARedirectVMods.man \ XkbSARedirectVModsMask.man \ XkbSAScreen.man \ XkbSASetGroup.man \ XkbSASetPtrDfltValue.man \ XkbSASetScreen.man \ XkbSelectEventDetails.man \ XkbSelectEvents.man \ XkbSetAccessXTimeout.man \ XkbSetAutoRepeatRate.man \ XkbSetAutoResetControls.man \ XkbSetBounceKeysDelay.man \ XkbSetCompatMap.man \ XkbSetControls.man \ XkbSetDebuggingFlags.man \ XkbSetDetectableAutoRepeat.man \ XkbSetDeviceButtonActions.man \ XkbSetDeviceInfo.man \ XkbSetIgnoreLockMods.man \ XkbSetIndicatorMap.man \ XkbSetMap.man \ XkbSetModActionVMods.man \ XkbSetNamedIndicator.man \ XkbSetNames.man \ XkbSetPtrActionX.man \ XkbSetPtrActionY.man \ XkbSetServerInternalMods.man \ XkbSetXlibControls.man \ XkbTranslateKeyCode.man \ XkbTranslateKeySym.man \ XkbUpdateMapFromCore.man \ XkbVirtualModsToReal.man libman_DATA = $(libman_PRE:man=@LIB_MAN_SUFFIX@) EXTRA_DIST = $(libman_PRE) CLEANFILES = $(libman_DATA) SUFFIXES = .$(LIB_MAN_SUFFIX) .man all: all-am .SUFFIXES: .SUFFIXES: .$(LIB_MAN_SUFFIX) .man $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign man/xkb/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign man/xkb/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-libmanDATA: $(libman_DATA) @$(NORMAL_INSTALL) @list='$(libman_DATA)'; test -n "$(libmandir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(libmandir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libmandir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(libmandir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(libmandir)" || exit $$?; \ done uninstall-libmanDATA: @$(NORMAL_UNINSTALL) @list='$(libman_DATA)'; test -n "$(libmandir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(libmandir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(libmandir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-libmanDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libmanDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am \ install-libmanDATA install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-libmanDATA .PRECIOUS: Makefile # String replacements in MAN_SUBSTS now come from xorg-macros.m4 via configure .man.$(LIB_MAN_SUFFIX): $(AM_V_GEN)$(SED) $(MAN_SUBSTS) < $< > $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: yKeysOptions.man \ XkbGetUpdatedMap.man \ XkbGetVirtualMods.man \ XkbGetXlibControls.man \ XkbIgnoreElibX11-1.6.3/man/xkb/XkbGetIndicatorChanges.man000064401431060000012000000125341247741723500214310ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbGetIndicatorChanges __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbGetIndicatorChanges \- Updates a local copy of the keyboard description with the actual values of one or more calls to XkbNoteIndicatorChanges .SH SYNOPSIS .HP .B Status XkbGetIndicatorChanges .BI "(\^Display *" "dpy" "\^," .BI "XkbDescPtr " "xkb" "\^," .BI "XkbIndicatorChangesPtr " "changes" "\^," .BI "unsigned int " "state" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to the X server .TP .I \- xkb keyboard description to hold the new values .TP .I \- changes indicator maps/state to be obtained from the server .TP .I \- state backfilled with the state of the indicators .SH DESCRIPTION .LP Whenever an indicator changes state, the server sends XkbIndicatorStateNotify events to all interested clients. Similarly, whenever an indicator's map changes, the server sends XkbIndicatorMapNotify events to all interested clients. To receive XkbIndicatorStateNotify events, use .I XkbSelectEvents with both the .I bits_to_change and .I values_for_bits parameters containing XkbIndicatorStateNotifyMask. To receive XkbIndicatorMapNotify events, use .I XkbSelectEvents with XkbIndicatorMapNotifyMask. To receive events for only specific indicators, use .I XkbSelectEventDetails. Set the .I event_type parameter to XkbIndicatorStateNotify or XkbIndicatorMapNotify, and set both the .I bits_to_change and .I values_for_bits detail parameters to a mask where each bit specifies one indicator, turning on those bits that specify the indicators for which you want to receive events. Both types of indicator events use the same structure: .nf typedef struct _XkbIndicatorNotify { int type; /\(** Xkb extension base event code */ unsigned long serial; /\(** X server serial number for event */ Bool send_event; /\(** True => synthetically generated */ Display * display; /\(** server connection where event generated */ Time time; /\(** server time when event generated */ int xkb_type; /\(** specifies state or map notify */ int device; /\(** Xkb device ID, will not be XkbUseCoreKbd */ unsigned int changed; /\(** mask of indicators with new state or map */ unsigned int state; /\(** current state of all indicators */ } XkbIndicatorNotifyEvent; .fi .I xkb_type is either XkbIndicatorStateNotify or XkbIndicatorMapNotify, depending on whether the event is a kbIndicatorStateNotify event or kbIndicatorMapNotify event. The .I changed parameter is a mask that is the bitwise inclusive OR of the indicators that have changed. If the event is of type XkbIndicatorMapNotify, .I changed reports the maps that changed. If the event is of type XkbIndicatorStateNotify, .I changed reports the indicators that have changed state. .I state is a mask that specifies the current state of all indicators, whether they have changed or not, for both XkbIndicatorStateNotify and IndicatorMapNotify events. When your client application receives either a XkbIndicatorStateNotify event or XkbIndicatorMapNotify event, you can note the changes in a changes structure by calling .I XkbNoteIndicatorChanges. .I XkbGetIndicatorChanges examines the .I changes parameter, pulls over the necessary information from the server, and copies the results into the .I xkb keyboard description. If any bits are set in the .I state_changes field of .I changes, XkbGetIndicatorChanges also places the state of those indicators in .I state. If the .I indicators field of .I xkb is NULL, .I XkbGetIndicatorChanges allocates and initializes it. To free the .I indicators field, use .I XkbFreeIndicators. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadImplementation Invalid reply from server .TP 15 .B BadMatch A compatible version of Xkb was not available in the server or an argument has correct type and range, but is otherwise invalid .SH "SEE ALSO" .BR XkbFreeIndicators (__libmansuffix__), .BR XkbGetIndicatorChanges (__libmansuffix__), .BR XkbNoteIndicatorChanges (__libmansuffix__), .BR XkbSelectEvents (__libmansuffix__), .BR XkbSelectEventDetail (__libmansuffix__) libX11-1.6.3/man/xkb/XkbAllocGeomOverlays.man000064401431060000012000000047111247741723500211510ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAllocGeomOverlays __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAllocGeomOverlays \- Allocate overlays in a section .SH SYNOPSIS .HP .B Status XkbAllocGeomOverlays .BI "(\^XkbSectionPtr " "section" "\^," .BI "int " "num_needed" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- section section for which overlays should be allocated .TP .I \- num_needed number of new overlays required .SH DESCRIPTION .LP Xkb provides a number of functions to allocate and free subcomponents of a keyboard geometry. Use these functions to create or modify keyboard geometries. Note that these functions merely allocate space for the new element(s), and it is up to you to fill in the values explicitly in your code. These allocation functions increase .I sz_* but never touch .I num_* (unless there is an allocation failure, in which case they reset both .I sz_* and .I num_* to zero). These functions return Success if they succeed, BadAlloc if they are not able to allocate space, or BadValue if a parameter is not as expected. .I XkbAllocGeomOverlays allocates .I num_needed overlays and adds them to the .I section. No initialization of the overlays is done. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadValue An argument is out of range libX11-1.6.3/man/xkb/XkbSetPtrActionY.man000064401431060000012000000074621247741723500203000ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbSetPtrActionY __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbSetPtrActionY \- Sets the high_YYY and low_YYY fields of act from the signed integer value y .SH SYNOPSIS .HP .B void XkbSetPtrActionY .BI "(\^XkbPtrAction " "act" "\^," .BI "int " "y" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- act action in which to set Y .TP .I \- y new value to set .SH DESCRIPTION .LP Actions associated with the XkbPtrAction structure move the pointer when keys are pressed and released. If the MouseKeys control is not enabled, KeyPress and KeyRelease events are treated as though the action is XkbSA_NoAction. If the MouseKeys control is enabled, a server action of type XkbSA_MovePtr instructs the server to generate core pointer MotionNotify events rather than the usual KeyPress event, and the corresponding KeyRelease event disables any mouse keys timers that were created as a result of handling the XkbSA_MovePtr action. The .I type field of the XkbPtrAction structure is always XkbSA_MovePtr. The .I flags field is a bitwise inclusive OR of the masks shown in Table 1. .TS c s l l l lw(4i). Table 1 Pointer Action Types _ Action Type Meaning _ XkbSA_NoAcceleration T{ If not set, and the MouseKeysAccel control is enabled, the KeyPress initiates a mouse keys timer for this key; every time the timer expires, the cursor moves. T} XkbSA_MoveAbsoluteX T{ If set, the X portion of the structure specifies the new pointer X coordinate. Otherwise, the X portion is added to the current pointer X coordinate to determine the new pointer X coordinate. T} XkbSA_MoveAbsoluteY T{ If set, the Y portion of the structure specifies the new pointer Y coordinate. Otherwise, the Y portion is added to the current pointer Y coordinate to determine the new pointer Y coordinate. T} .TE Each of the X and Y coordinates of the XkbPtrAction structure is composed of two signed 16-bit values, that is, the X coordinate is composed of .I high_XXX and .I low_XXX, and similarly for the Y coordinate. Xkb provides the following macros, to convert between a signed integer and two signed 16-bit values in XkbPtrAction structures. .SH STRUCTURES .LP .nf typedef struct _XkbPtrAction { unsigned char type; /\(** XkbSA_MovePtr */ unsigned char flags; /\(** determines type of pointer motion */ unsigned char high_XXX; /\(** x coordinate, high bits*/ unsigned char low_XXX; /\(** y coordinate, low bits */ unsigned char high_YYY; /\(** x coordinate, high bits */ unsigned char low_YYY; /\(** y coordinate, low bits */ } XkbPtrAction; .fi low_YYY fields of act from the signed integer value y .SH SYNOPSIS .HP .B void XkbSetPtrActionY .BI "(\^XkbPtrAction " "act" "\^," .BI "int " "y" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \-libX11-1.6.3/man/xkb/XkbSetModActionVMods.man000064401431060000012000000037111247741723500210630ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbSetModActionVMods __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbSetModActionVMods \- Sets the vmods1 and vmods2 fields of act using the vmods format of an Xkb modifier description .SH SYNOPSIS .HP .B void XkbSetModActionVMods .BI "(\^XkbAction " "act" "\^," .BI "unsigned short " "vmods" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- act action in which to set vmods .TP .I \- vmods virtual mods to set .SH DESCRIPTION .LP .I XkbSetModActionVMods sets the .I vmods1 and .I vmods2 fields of .I act using the .I vmods format of an Xkb modifier description. .SH NOTES .LP Despite the fact that the first parameter of these two macros is of type XkbAction, these macros may be used only with Actions of type XkbModAction and XkbISOAction. libX11-1.6.3/man/xkb/XkbSASetGroup.man000064401431060000012000000042041247741723500175530ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbSASetGroup __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbSASetGroup \- Sets the group_XXX field of act from the group index grp .SH SYNOPSIS .HP .B void XkbSASetGroup .BI "(\^XkbAction " "act" "\^," .BI "int " "grp" "\^);" .SH ARGUMENTS .TP .I \- act action from which to set group .TP .I \- grp group index to set in group_XXX .SH DESCRIPTION .LP .I XkbSASetGroup sets the .I group_XXX field of .I act from the group index .I grp. .SH STRUCTURE .LP Actions associated with the XkbGroupAction structure change the current group state when keys are pressed and released: .nf .ft CW typedef struct _XkbGroupAction { unsigned char type; /\(** XkbSA_{Set|Latch|Lock}Group */ unsigned char flags; /\(** with type, controls the effect on groups */ char group_XXX; /\(** represents a group index or delta */ } XkbGroupAction; .ft .fi .SH WARNING .LP This manpage seems to be incomplete libX11-1.6.3/man/xkb/XkbSetAccessXTimeout.man000064401431060000012000000166721247741723500211470ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbSetAccessXTimeout __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbSetAccessXTimeout \- Configures the AccessXTimeout options for a keyboard device .SH SYNOPSIS .HP .B Bool XkbSetAccessXTimeout .BI "(\^Display *" "display" "\^," .BI "unsigned int " "device_spec" "\^," .BI "unsigned short " "timeout" "\^," .BI "unsigned int " "ctrls_mask" "\^," .BI "unsigned int " "ctrls_values" "\^," .BI "unsigned short " "opts_mask" "\^," .BI "unsigned short " "opts_values" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- display connection to X server .TP .I \- device_spec device to configure, or XkbUseCoreKbd .TP .I \- timeout seconds idle until AccessXTimeout occurs .TP .I \- ctrls_mask boolean controls to modify .TP .I \- ctrls_values new bits for controls selected by ctrls_mask .TP .I \- opts_mask ax_options to change .TP .I \- opts_values new bits for ax_options selected by opts_mask .SH DESCRIPTION .LP In environments where computers are shared, features such as SlowKeys present a problem: if SlowKeys is on, the keyboard can appear to be unresponsive because keys are not accepted until they are held for a certain period of time. To help solve this problem, Xkb provides an AccessXTimeout control to automatically change the enabled/disabled state of any boolean controls and to change the value of the AccessXKeys and AccessXFeedback control attributes if the keyboard is idle for a specified period of time. When a timeout as specified by AccessXTimeout occurs and a control is consequently modified, Xkb generates an XkbControlsNotify event. For more information on XkbControlsNotify events. .I timeout specifies the number of seconds the keyboard must be idle before the controls are modified. .I ctrls_mask specifies what controls are to be enabled or disabled, and .I ctrls_values specifies whether those controls are to be enabled or disabled. The bit values correspond to those for enabling and disabling boolean controls using .I XkbChangeEnabledControls. The .I opts_mask field specifies which attributes of the AccessXKeys and AccessXFeedback controls are to be changed, and .I opts_values specifies the new values for those options. The bit values correspond to those for the .I ax_options field of an XkbDescRec. .I XkbSetAccessXTimeout sends a request to configure the AccessXTimeout control to the server. It does not wait for a reply, and normally returns True. If a compatible version of the Xkb extension is not available in the server, .I XkbSetAccessXTimeout returns False. .SH "RETURN VALUES" .TP 15 True The .I XkbSetAccessXTimeout function returns True when a compatible version of the Xkb extension is available in the server. .TP 15 False The .I XkbSetAccessXTimeout function returns False when a compatible version of the Xkb extension is not available in the server. .SH STRUCTURES .LP The complete description of an Xkb keyboard is given by an XkbDescRec. The component structures in the XkbDescRec represent the major Xkb components. .nf typedef struct { struct _XDisplay * display; /\(** connection to X server */ unsigned short flags; /\(** private to Xkb, do not modify */ unsigned short device_spec; /\(** device of interest */ KeyCode min_key_code; /\(** minimum keycode for device */ KeyCode max_key_code; /\(** maximum keycode for device */ XkbControlsPtr ctrls; /\(** controls */ XkbServerMapPtr server; /\(** server keymap */ XkbClientMapPtr map; /\(** client keymap */ XkbIndicatorPtr indicators; /\(** indicator map */ XkbNamesPtr names; /\(** names for all components */ XkbCompatMapPtr compat; /\(** compatibility map */ XkbGeometryPtr geom; /\(** physical geometry of keyboard */ } XkbDescRec, *XkbDescPtr; .fi The .I display field points to an X display structure. The .I flags field is private to the library: modifying .I flags may yield unpredictable results. The .I device_spec field specifies the device identifier of the keyboard input device, or XkbUseCoreKeyboard, which specifies the core keyboard device. The .I min_key_code and .I max_key_code fields specify the least and greatest keycode that can be returned by the keyboard. Each structure component has a corresponding mask bit that is used in function calls to indicate that the structure should be manipulated in some manner, such as allocating it or freeing it. These masks and their relationships to the fields in the XkbDescRec are shown in Table 1. .TS c s s l l l l l l. Table 1 Mask Bits for XkbDescRec _ Mask Bit XkbDescRec Field Value _ XkbControlsMask ctrls (1L<<0) XkbServerMapMask server (1L<<1) XkbIClientMapMask map (1L<<2) XkbIndicatorMapMask indicators (1L<<3) XkbNamesMask names (1L<<4) XkbCompatMapMask compat (1L<<5) XkbGeometryMask geom (1L<<6) XkbAllComponentsMask All Fields (0x7f) .TE The structure for the XkbControlsNotify event is defined as follows: .nf typedef struct { int type; /\(** Xkb extension base event code */ unsigned long serial; /\(** X server serial number for event */ Bool send_event; /\(** True => synthetically generated */ Display * display; /\(** server connection where event generated */ Time time; /\(** server time when event generated */ int xkb_type; /\(** XkbCompatMapNotify */ int device; /\(** Xkb device ID, will not be XkbUseCoreKbd */ unsigned int changed_ctrls; /\(** bits indicating which controls data have changed*/ unsigned int enabled_ctrls; /\(** controls currently enabled in server */ unsigned int enabled_ctrl_changes; /\(** bits indicating enabled/disabled controls */ int num_groups; /\(** current number of keyboard groups */ KeyCode keycode; /\(** != 0 => keycode of key causing change */ char event_type; /\(** Type of event causing change */ char req_major; /\(** major event code of event causing change */ char req_minor; /\(** minor event code of event causing change */ } XkbControlsNotifyEvent; .fi .SH "SEE ALSO" .BR XkbChangeEnabledControls (__libmansuffix__) libX11-1.6.3/man/xkb/XkbGetAutoRepeatRate.man000064401431060000012000000064421247741723500211120ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbGetAutoRepeatRate __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbGetAutoRepeatRate \- Gets the current attributes of the RepeatKeys control for a keyboard device .SH SYNOPSIS .HP .B Bool XkbGetAutoRepeatRate .BI "(\^Display *" "display" "\^," .BI "unsigned int " "device_spec" "\^," .BI "unsigned int *" "timeout_rtrn" "\^," .BI "unsigned int *" "interval_rtrn" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- display connection to X server .TP .I \- device_spec desired device ID, or XkbUseCoreKbd .TP .I \- timeout_rtrn backfilled with initial repeat delay, ms .TP .I \- interval_rtrn backfilled with subsequent repeat delay, ms .SH DESCRIPTION .LP The core protocol allows only control over whether or not the entire keyboard or individual keys should auto-repeat when held down. RepeatKeys is a boolean control that extends this capability by adding control over the delay until a key begins to repeat and the rate at which it repeats. RepeatKeys is coupled with the core auto-repeat control: when RepeatKeys is enabled or disabled, the core auto-repeat is enabled or disabled and vice versa. Auto-repeating keys are controlled by two attributes. The first, .I timeout, is the delay after the initial press of an auto-repeating key and the first generated repeat event. The second, .I interval, is the delay between all subsequent generated repeat events. As with all boolean controls, configuring the attributes that determine how the control operates does not automatically enable the control as a whole. .I XkbGetAutoRepeatRate queries the server for the current values of the RepeatControls control attributes, backfills .I timeout_rtrn and .I interval_rtrn with them, and returns True. If a compatible version of the Xkb extension is not available in the server .I XkbGetAutoRepeatRate returns False. .SH "RETURN VALUES" .TP 15 True The XkbGetAutoRepeatRate function returns True if a compatible version of the Xkb extension is available in the server. .TP 15 False The XkbGetAutoRepeatRate function returns False if a compatible version of the Xkb extension is not available in the server. libX11-1.6.3/man/xkb/XkbGetControlsChanges.man000064401431060000012000000171061247741723500213200ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbGetControlsChanges __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbGetControlsChanges \- Updates a local copy of a keyboard description with the changes previously noted by one or more calls to XkbNoteControlsChanges .SH SYNOPSIS .HP XkbGetControlsChanges .BI "(\^Display *" "dpy" "\^," .BI "XkbDescPtr " "xkb" "\^," .BI "XkbNameChangesPtr " "changes" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to X server .TP .I \- xkb xkb->ctrls will be updated .TP .I \- changes indicates which parts of xkb->ctrls to update .SH DESCRIPTION .LP Whenever a field in the controls structure changes in the server's keyboard description, the server sends an XkbControlsNotify event to all interested clients.To receive XkbControlsNotify events under all possible conditions, use .I XkbSelectEvents and pass XkbControlsNotifyMask in both .I bits_to_change and .I values_for_bits. To receive XkbControlsNotify events only under certain conditions, use .I XkbSelectEventDetails using XkbControlsNotify as the .I event_type and specifying the desired state changes in .I bits_to_change and .I values_for_bits using mask bits from Table 1. Table 1 shows the actual values for the individual mask bits used to select controls for modification and to enable and disable the control. Note that the same mask bit is used to specify general modifications to the parameters used to configure the control (which), and to enable and disable the control (enabled_ctrls). The anomalies in the table (no "ok" in column) are for controls that have no configurable attributes; and for controls that are not boolean controls and therefore cannot be enabled or disabled. .TS c s s s l l l l l l l l l l l l. Table 1 Controls Mask Bits _ Mask Bit which or enabled Value changed_ctrls _ctrls _ XkbRepeatKeysMask ok ok (1L<<0) XkbSlowKeysMask ok ok (1L<<1) XkbBounceKeysMask ok ok (1L<<2) XkbStickyKeysMask ok ok (1L<<3) XkbMouseKeysMask ok ok (1L<<4) XkbMouseKeysAccelMask ok ok (1L<<5) XkbAccessXKeysMask ok ok (1L<<6) XkbAccessXTimeoutMask ok ok (1L<<7) XkbAccessXFeedbackMask ok ok (1L<<8) XkbAudibleBellMask ok (1L<<9) XkbOverlay1Mask ok (1L<<10) XkbOverlay2Mask ok (1L<<11) XkbIgnoreGroupLockMask ok (1L<<12) XkbGroupsWrapMask ok (1L<<27) XkbInternalModsMask ok (1L<<28) XkbIgnoreLockModsMask ok (1L<<29) XkbPerKeyRepeatMask ok (1L<<30) XkbControlsEnabledMask ok (1L<<31) XkbAccessXOptionsMask ok ok (XkbStickyKeysMask | XkbAccessXFeedbackMask) XkbAllBooleanCtrlsMask ok (0x00001FFF) XkbAllControlsMask ok (0xF8001FFF) .TE The .I changed_ctrls field specifies the controls components that have changed and consists of bits taken from the masks defined in Table 10.7 with "ok" in the .I changed_ctrls column. The controls currently enabled in the server are reported in the .I enabled_ctrls field. If any controls were just enabled or disabled (that is, the contents of the .I enabled_ctrls field changed), they are flagged in the .I enabled_ctrl_changes field. The valid bits for these fields are the masks listed in Table 10.7 with "ok" in the .I enabled_ctrls column. The .I num_groups field reports the number of groups bound to the key belonging to the most number of groups and is automatically updated when the keyboard mapping changes. If the change was caused by a request from a client, the .I keycode and .I event_type fields are set to zero and the .I req_major and .I req_minor fields identify the request. The .I req_major value is the same as the major extension opcode. Otherwise, .I event_type is set to the type of event that caused the change (one of KeyPress, KeyRelease, DeviceKeyPress, DeviceKeyRelease, ButtonPress or ButtonRelease), and .I req_major and .I req_minor are undefined. If .I event_type is KeyPress, KeyRelease, DeviceKeyPress, or DeviceKeyRelease, the .I keycode field is set to the key that caused the change. If .I event_type is ButtonPress or ButtonRelease, .I keycode contains the button number. When a client receives an XkbControlsNotify event, it can note the changes in a changes structure using .I XkbNoteControlsChanges. .I XkbGetControlsChanges examines the .I changes parameter, queries the server for the necessary information, and copies the results into the .I xkb->ctrls keyboard description. If the .I ctrls field of .I xkb is NULL, .I XkbGetControlsChanges allocates and initializes it. To free the .I ctrls field, use XkbFreeControls. .I XkbGetControlsChanges returns Success if successful and can generate BadAlloc, BadImplementation, and BadMatch errors. .SH "RETURN VALUES" .TP 15 Success The .I XkbGetControlsChanges function returns Success if the query of the server was successful. .SH STRUCTURES .LP .nf The structure for the XkbControlsNotify event is defined as follows: typedef struct { int type; /\(** Xkb extension base event code */ unsigned long serial; /\(** X server serial number for event */ Bool send_event; /\(** True => synthetically generated */ Display * display; /\(** server connection where event generated */ Time time; /\(** server time when event generated */ int xkb_type; /\(** XkbCompatMapNotify */ int device; /\(** Xkb device ID, will not be XkbUseCoreKbd */ unsigned int changed_ctrls; /\(** bits indicating which controls data have changed*/ unsigned int enabled_ctrls; /\(** controls currently enabled in server */ unsigned int enabled_ctrl_changes; /\(** bits indicating enabled/disabled controls */ int num_groups; /\(** current number of keyboard groups */ KeyCode keycode; /\(** != 0 => keycode of key causing change */ char event_type; /\(** Type of event causing change */ char req_major; /\(** major event code of event causing change */ char req_minor; /\(** minor event code of event causing change */ } XkbControlsNotifyEvent; .fi .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadImplementation Invalid reply from server .TP 15 .B BadMatch A compatible version of Xkb was not available in the server or an argument has correct type and range, but is otherwise invalid .SH "SEE ALSO" .BR XkbFreeControls (__libmansuffix__), .BR XkbNoteControlsChanges (__libmansuffix__), .BR XkbSelectEventDetails (__libmansuffix__), .BR XkbSelectEvents (__libmansuffix__) libX11-1.6.3/man/xkb/XkbSARedirectSetVModsMask.man000064401431060000012000000104071247741723500220070ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbSARedirectSetVModsMask __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbSARedirectSetVModsMask \- Sets the vmods_mask0 and vmods_mask1 fields of act from vm .SH SYNOPSIS .HP .B void XkbSARedirectSetVModsMask .BI "(\^XkbRedirectKeyAction " "act" "\^," .BI "unsigned int " "vm" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- act action in which to set vmods .TP .I \- vm new value for virtual modifier mask .SH DESCRIPTION .LP Actions associated with the XkbRedirectKeyAction structure generate KeyPress and KeyRelease events containing a keycode different from the key that was pressed or released. The .I type field for the XkbRedirectKeyAction structure should always be XkbSA_RedirectKey. Key presses cause a KeyPress event for the key specified by the .I new_key field instead of the actual key. The state reported in this event reports the current effective modifiers changed as follows: any real modifiers selected by the .I mods_mask field are set to corresponding values from the .I mods field. Any real modifiers bound to the virtual modifiers specified by the .I vmods_mask0 and .I vmods_mask1 fields are either set or cleared, depending on the corresponding values in the .I vmods0 and .I vmods1 fields. If the real and virtual modifier definitions specify conflicting values for a single modifier, the real modifier definition has priority. Key releases cause a KeyRelease event for the key specified by the .I new_key field instead of the actual key. The state for this event consists of the effective keyboard modifiers at the time of the release, changed as described previously. The XkbSA_RedirectKey action normally redirects to another key on the same device as the key that caused the event, unless that device does not belong to the input extension KeyClass, in which case this action causes an event on the core keyboard device. (The input extension categorizes devices by breaking them into classes. Keyboards, and other input devices with keys, are classified as KeyClass devices by the input extension.) The .I vmods_mask0 and .I vmods_mask1 fields actually represent one .I vmods_mask value. Xkb provides macros to convert between the two formats. .I XkbSARedirectSetVModsMask sets the .I vmods_mask0 and .I vmods_mask1 fields of .I act from .I vm. .SH STRUCTURES .LP .nf typedef struct_XkbRedirectKeyAction { unsigned char type; /\(** XkbSA_RedirectKey */ unsigned char new_key; /\(** keycode to be put in event */ unsigned char mods_mask; /\(** mask of real mods to be reset */ unsigned char mods; /\(** mask of real mods to take values from */ unsigned char vmods_mask0; /\(** first half of mask of virtual mods to be reset */ unsigned char vmods_mask1; /\(** other half of mask of virtual mods to be reset */ unsigned char vmods0; /\(** first half of mask of virtual mods to take values from */ unsigned char vmods1; /\(** other half of mask of virtual mods to take values from */ } XkbRedirectKeyAction; .fi libX11-1.6.3/man/xkb/XkbSetDeviceInfo.man000064401431060000012000000225021247741723500202470ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbSetDeviceInfo __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbSetDeviceInfo \- Modify some or all of the characteristics of an X Input Extension device .SH SYNOPSIS .HP .B Bool XkbSetDeviceInfo .BI "(\^Display *" "dpy" "\^," .BI "unsigned int " "which" "\^," .BI "XkbDeviceInfoPtr " "device_info" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to X server .TP .I \- which mask indicating characteristics to modify .TP .I \- device_info structure defining the device and modifications .SH DESCRIPTION .LP To change characteristics of an X Input Extension device in the server, first modify a local copy of the device structure and then use either .I XkbSetDeviceInfo, or, to save network traffic, use an XkbDeviceChangesRec structure and call .I XkbChangeDeviceInfo to download the changes to the server. .I XkbSetDeviceInfo sends a request to the server to modify the characteristics of the device specified in the .I device_info structure. The particular characteristics modified are identified by the bits set in .I which and take their values from the relevant fields in device_info (see Table 1). XkbSetDeviceInfo returns True if the request was successfully sent to the server. If the X server implementation does not allow interaction between the X input extension and the Xkb Extension, the function does nothing and returns False. .bp .nf Table 1 XkbDeviceInfoRec Mask Bits ____________________________________________________________________________________ Name XkbDeviceInfoRec Value Capability If Set Fields Effected ____________________________________________________________________________________ XkbXI_KeyboardsMask (1L <<0) Clients can use all Xkb requests and events with KeyClass devices supported by the input device extension. XkbXI_ButtonActionsMask num_btns (1L <<1) Clients can assign key btn_acts actions to buttons non-KeyClass input extension devices. XkbXI_IndicatorNamesMask leds->names (1L <<2) Clients can assign names to indicators on non-KeyClass input extension devices. XkbXI_IndicatorMapsMask leds->maps (1L <<3) Clients can assign indicator maps to indicators on non-KeyClass input extension devices. XkbXI_IndicatorStateMask leds->state (1L <<4) Clients can request the status of indicators on non-KeyClass input extension devices. XkbXI_IndicatorsMask sz_leds (0x1c) XkbXI_IndicatorNamesMask | num_leds XkbXI_IndicatorMapsMask | leds->* XkbXI_IndicatorStateMask XkbXI_UnsupportedFeaturesMask unsupported (1L <<15) XkbXI_AllDeviceFeaturesMask Those selected (0x1e) XkbXI_IndicatorsMask | by Value Column XkbSI_ButtonActionsMask masks XkbXI_AllFeaturesMask Those selected (0x1f) XkbSI_AllDeviceFeaturesMask | by Value Column XkbSI_KeyboardsMask masks XkbXI_AllDetailsMask Those selected (0x801f) XkbXI_AllFeaturesMask | by Value column XkbXI_UnsupportedFeaturesMask masks .fi The .I which parameter specifies which aspects of the device should be changed and is a bitmask composed of an inclusive OR or one or more of the following bits: XkbXI_ButtonActionsMask, XkbXI_IndicatorNamesMask, XkbXI_IndicatorMapsMask. If the features requested to be manipulated in .I which are valid for the device, but the server does not support assignment of one or more of them, that particular portion of the request is ignored. If the device specified in .I device_info->device_spec does not contain buttons and a request affecting buttons is made, or the device does not contain indicators and a request affecting indicators is made, a BadMatch protocol error results. If the XkbXI_ButtonActionsMask bit is set in the .I supported mask returned by .I XkbGetDeviceInfo, the Xkb extension allows applications to assign key actions to buttons on input extension devices other than the core keyboard device. If the XkbXI_ButtonActionsMask is set in .I which, the actions for all buttons specified in .I device_info are set to the XkbActions specified in .I device_info->btn_acts. If the number of buttons requested to be updated is not valid for the device, .I XkbSetDeviceInfo returns False and a BadValue protocol error results. If the XkbXI_IndicatorMaps and / or XkbXI_IndicatorNamesMask bit is set in the .I supported mask returned by .I XkbGetDeviceInfo, the Xkb extension allows applications to assign maps and / or names to the indicators of nonkeyboard extension devices. If supported, maps and / or names can be assigned to all extension device indicators, whether they are part of a keyboard feedback or part of an indicator feedback. If the XkbXI_IndicatorMapsMask and / or XkbXI_IndicatorNamesMask flag is set in .I which, the indicator maps and / or names for all .I device_info->num_leds indicator devices specified in .I device_info->leds are set to the maps and / or names specified in .I device_info->leds. device_info->leds->led_class and .I led_id specify the input extension class and device ID for each indicator device to modify; if they have invalid values, a BadValue protocol error results and .I XkbSetDeviceInfo returns False. If they have legal values but do not specify a keyboard or indicator class feedback for the device in question, a BadMatch error results. If any of the values in .I device_info->leds->names are not a valid Atom or None, a BadAtom protocol error results. .SH "RETURN VALUES" .TP 15 True The .I XkbSetDeviceInfo function returns True if the request was successfully sent to the server. .TP 15 False The .I XkbSetDeviceInfo function returns False if the X server implementation does not allow interaction between the X input extension and the Xkb Extension. .SH STRUCTURES .LP Changes to an Xkb extension device may be tracked by listening to XkbDeviceExtensionNotify events and accumulating the changes in an XkbDeviceChangesRec structure. The changes noted in the structure may then be used in subsequent operations to update either a server configuration or a local copy of an Xkb extension device configuration. The changes structure is defined as follows: .nf typedef struct _XkbDeviceChanges { unsigned int changed; /\(** bits indicating what has changed */ unsigned short first_btn; /\(** number of first button which changed, if any */ unsigned short num_btns; /\(** number of buttons that have changed */ XkbDeviceLedChangesRec leds; } XkbDeviceChangesRec,*XkbDeviceChangesPtr; .fi .SH DIAGNOSTICS .TP 15 .B BadAtom A name is neither a valid Atom or None .TP 15 .B BadMatch A compatible version of Xkb was not available in the server or an argument has correct type and range, but is otherwise invalid .TP 15 .B BadValue An argument is out of range .SH "SEE ALSO" .BR XkbChangeDeviceInfo (__libmansuffix__), .BR XkbGetDeviceInfo (__libmansuffix__) XkbSetDeviceInfo returns True if the request was successfully sent to the server. If the X server implementation does not allow interaction between the X input extension and the Xkb ExtenslibX11-1.6.3/man/xkb/XkbGetGeometry.man000064401431060000012000000050531247741723500200150ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbGetGeometry __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbGetGeometry \- Loads a keyboard geometry if you already have the keyboard description .SH SYNOPSIS .HP .B Status XkbGetGeometry .BI "(\^Display *" "dpy" "\^," .BI "XkbDescPtr " "xkb" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to the X server .TP .I \- xkb keyboard description that contains the ID for the keyboard and into which the geometry should be loaded .SH DESCRIPTION .LP You can load a keyboard geometry as part of the keyboard description returned by .I XkbGetKeyboard. However, if a keyboard description has been previously loaded, you can instead obtain the geometry by calling the .I XkbGetGeometry. In this case, the geometry returned is the one associated with the keyboard whose device ID is contained in the keyboard description. .I XkbGetGeometry can return BadValue, BadImplementation, BadName, BadAlloc, or BadLength errors or Success if it succeeds. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadImplementation Invalid reply from server .TP 15 .B BadLength The length of a request is shorter or longer than that required to minimally contain the arguments .TP 15 .B BadName A font or color of the specified name does not exist .TP 15 .B BadValue An argument is out of range .SH "SEE ALSO" .BR XkbGetKeyboard (__libmansuffix__) libX11-1.6.3/man/xkb/XkbCopyKeyType.man000064401431060000012000000063401247741723500200070ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbCopyKeyType __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbCopyKeyType \- Copy one XkbKeyTypeRec structures .SH SYNOPSIS .HP .B Status XkbCopyKeyType .BI "(\^XkbKeyTypePtr " "from" "\^," .BI "XkbKeyTypePtr " "into" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- from pointer to XkbKeyTypeRec to be copied .TP .I \- into pointer to XkbKeyTypeRec to be changed .SH DESCRIPTION .LP .I XkbCopyKeyType copies the key type specified by .I from to the key type specified by .I into. Both must point to legal XkbKeyTypeRec structures. Xkb assumes .I from and .I into point to different places. As a result, overlaps can be fatal. .I XkbCopyKeyType frees any existing .I map, preserve, and .I level_names in .I into prior to copying. If any allocation errors occur while copying .I from to .I into, XkbCopyKeyType returns BadAlloc. Otherwise, .I XkbCopyKeyType copies .I from to .I into and returns Success. .SH STRUCTURES .LP Key types are used to determine the shift level of a key given the current state of the keyboard. The set of all possible key types for the Xkb keyboard description are held in the .I types field of the client map, whose total size is stored in .I size_types, and whose total number of valid entries is stored in .I num_types. Key types are defined using the following structure: .nf typedef struct { /\(** Key Type */ XkbModsRec mods; /\(** modifiers used to compute shift level */ unsigned char num_levels; /\(** total # shift levels, do not modify directly */ unsigned char map_count; /\(** # entries in map, preserve (if non-NULL) */ XkbKTMapEntryPtr map; /\(** vector of modifiers for each shift level */ XkbModsPtr preserve; /\(** mods to preserve for corresponding map entry */ Atom name; /\(** name of key type */ Atom * level_names; /\(** array of names of each shift level */ } XkbKeyTypeRec, *XkbKeyTypePtr; .fi .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage libX11-1.6.3/man/xkb/XkbGetDeviceButtonActions.man000064401431060000012000000070761247741723500221450ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbGetDeviceButtonActions __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbGetDeviceButtonActions \- Query the button actions associated with an X Input Extension device .SH SYNOPSIS .HP .B Status XkbGetDeviceButtonActions .BI "(\^Display *" "dpy" "\^," .BI "XkbDeviceInfoPtr " "device_info" "\^," .BI "Bool " "all_buttons" "\^," .BI "unsigned int " "first_button" "\^," .BI "unsigned int " "num_buttons" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to X server .TP .I \- device_info structure to update with results .TP .I \- all_buttons True => get information for all buttons .TP .I \- first_button number of first button for which info is desired .TP .I \- num_buttons number of buttons for which info is desired .SH DESCRIPTION .LP .I XkbGetDeviceButtonActions queries the server for the desired button information for the device indicated by the .I device_spec field of .I device_info and waits for a reply. If successful, .I XkbGetDeviceButtonActions backfills the button actions .I (btn_acts field of .I device_info) for only the requested buttons, updates the .I name, type, supported, and .I unsupported fields, and returns Success. .I all_buttons, first_button and .I num_buttons specify the device buttons for which actions should be returned. Setting .I all_buttons to True requests actions for all device buttons; if .I all_buttons is False, .I first_button and .I num_buttons specify a range of buttons for which actions are requested. If a compatible version of Xkb is not available in the server or the Xkb extension has not been properly initialized, .I XkbGetDeviceButtonActions returns BadAccess. If allocation errors occur, a BadAlloc status is returned. If the specified device .I (device_info->device_spec) is invalid, a BadKeyboard status is returned. If the device has no buttons, a BadMatch status is returned. If .I first_button and .I num_buttons specify illegal buttons, a BadValue status is returned. .SH DIAGNOSTICS .TP 15 .B BadAccess The Xkb extension has not been properly initialized .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadKeyboard The device specified was not a valid core or input extension device .TP 15 .B BadMatch A compatible version of Xkb was not available in the server or an argument has correct type and range, but is otherwise invalid .TP 15 .B BadValue An argument is out of range libX11-1.6.3/man/xkb/XkbAddGeomOverlay.man000064401431060000012000000071011247741723500204200ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAddGeomOverlay __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAddGeomOverlay \- Add one overlay to a section .SH SYNOPSIS .HP .B XkbOverlayPtr XkbAddGeomOverlay .BI "(\^XkbSectionPtr " "section" "\^," .BI "Atom " "name" "\^," .BI "int " "sz_rows" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- section section to which an overlay will be added .TP .I \- name name of the overlay .TP .I \- sz_rows number of rows to reserve in the overlay .SH DESCRIPTION .LP Xkb provides functions to add a single new element to the top-level keyboard geometry. In each case the .I num_ * fields of the corresponding structure is incremented by 1. These functions do not change .I sz_* unless there is no more room in the array. Some of these functions fill in the values of the element's structure from the arguments. For other functions, you must explicitly write code to fill the structure's elements. The top-level geometry description includes a list of .I geometry properties. A geometry property associates an arbitrary string with an equally arbitrary name. Programs that display images of keyboards can use geometry properties as hints, but they are not interpreted by Xkb. No other geometry structures refer to geometry properties. .I XkbAddGeomOverlay adds an overlay with the specified name to the specified .I section. The new overlay is created with space allocated for .I sz_rows rows. If an overlay with name .I name already exists in the section, a pointer to the existing overlay is returned. .I XkbAddGeomOverlay returns NULL if any of the parameters is empty or if it was not able to allocate space for the overlay. To allocate space for an arbitrary number of overlays to a section, use the .I XkbAllocGeomOverlay function. .SH STRUCTURES .LP .nf typedef struct _XkbOverlayRec { Atom name; /\(** overlay name */ XkbSectionPtr section_under; /\(** the section under this overlay */ unsigned short num_rows; /\(** number of rows in the rows array */ unsigned short sz_rows; /\(** size of the rows array */ XkbOverlayRowPtr rows; /\(** array of rows in the overlay */ XkbBoundsPtr bounds; /\(** bounding box for the overlay */ } XkbOverlayRec,*XkbOverlayPtr; .fi .SH "SEE ALSO" .BR XkbAllocGeomOverlay (__libmansuffix__) libX11-1.6.3/man/xkb/XkbSetXlibControls.man000064401431060000012000000056001247741723500206560ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbSetXlibControls __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbSetXlibControls \- Changes the state of the Library Controls .SH SYNOPSIS .HP .B unsigned int XkbSetXlibControls .BI "(\^Display *" "display" "\^," .BI "unsigned long " "bits_to_change" "\^," .BI "unsigned long " "values_for_bits" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- display connection to X server .TP .I \- bits_to_change selects controls to be modified .TP .I \- values_for_bits turns selected controls on (1) or off (0) .SH DESCRIPTION .LP .I XkbSetXlibControls modifies the state of the controls selected by .I bits_to_change; only the controls selected by .I bits_to_change are modified. If the bit corresponding to a control is on in .I bits_to_change and also on in .I values_for_bits, the control is enabled. If the bit corresponding to a control is on in .I bits_to_change but off in .I values_for_bits, the control is disabled. .I bits_to_change should be an inclusive OR of bits from Table 1. .TS c s l l l l. Table 1 Library Control Masks _ Library Control Mask Value _ XkbLC_ForceLatin1Lookup (1 << 0) XkbLC_ConsumeLookupMods (1 << 1) XkbLC_AlwaysConsumeShiftAndLock (1 << 2) XkbLC_IgnoreNewKeyboards (1 << 3) XkbLC_ConsumeKeysOnComposeFail (1 << 29) XkbLC_ComposeLED (1 << 30) XkbLC_BeepOnComposeFail (1 << 31) XkbLC_AllControls (0xc0000007) .TE .SH "RETURN VALUES" .TP 15 (1 << 0) XkbLC_ForceLatin1Lookup .TP 15 (1 << 1) XkbLC_ConsumeLookupMods .TP 15 (1 << 2) XkbLC_AlwaysConsumeShiftAndLock .TP 15 (1 << 3) XkbLC_IgnoreNewKeyboards .TP 15 (1 << 29) XkbLC_ConsumeKeysOnComposeFail .TP 15 (1 << 30) XkbLC_ComposeLED .TP 15 (1 << 31) XkbLC_BeepOnComposeFail .TP 15 (0xc0000007) XkbLC_AllControls libX11-1.6.3/man/xkb/XkbGetNames.man000064401431060000012000000100441247741723500172610ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbGetNames __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbGetNames \- Obtain symbolic names from the server .SH SYNOPSIS .HP .B Status XkbGetNames .BI "(\^Display *" "dpy" "\^," .BI "unsigned int " "which" "\^," .BI "XkbDescPtr " "Xkb" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to the X server .TP .I \- which mask of names or map components to be updated .TP .I \- Xkb keyboard description to be updated .SH DESCRIPTION .LP .I XkbGetNames retrieves symbolic names for the components of the keyboard extension from the X server. The .I which parameter specifies the name components to be updated in the .I xkb parameter, and is the bitwise inclusive OR of the valid names mask bits defined in Table 1. .TS c s s s l l l l. Table 1 Symbolic Names Masks _ Mask Bit Value Keyboard Field Component _ XkbKeycodesNameMask (1<<0) Xkb->names keycodes XkbGeometryNameMask (1<<1) Xkb->names geometry XkbSymbolsNameMask (1<<2) Xkb->names symbols XkbPhysSymbolsNameMask (1<<3) Xkb->names phys_symbols XkbTypesNameMask (1<<4) Xkb->names type XkbCompatNameMask (1<<5) Xkb->names compat XkbKeyTypeNamesMask (1<<6) Xkb->map type[*].name XkbKTLevelNamesMask (1<<7) Xkb->map type[*].lvl_names[*] XkbIndicatorNamesMask (1<<8) Xkb->names indicators[*] XkbKeyNamesMask (1<<9) Xkb->names keys[*], num_keys XkbKeyAliasesMask (1<<10) Xkb->names key_aliases[*], num_key_aliases XkbVirtualModNamesMask (1<<11) Xkb->names vmods[*] XkbGroupNamesMask (1<<12) Xkb->names groups[*] XkbRGNamesMask (1<<13) Xkb->names radio_groups[*], num_rg XkbComponentNamesMask (0x3f) Xkb->names keycodes, geometry, symbols, physical symbols, types, and compatibility map XkbAllNamesMask (0x3fff) Xkb->names all name components .TE If the .I names field of the keyboard description .I xkb is NULL, .I XkbGetNames allocates and initializes the .I names component of the keyboard description before obtaining the values specified by .I which. If the .I names field of .I xkb is not NULL, .I XkbGetNames obtains the values specified by .I which and copies them into the keyboard description .I Xkb. If the .I map component of the .I xkb parameter is NULL, .I XkbGetNames does not retrieve type or shift level names, even if XkbKeyTypeNamesMask or XkbKTLevelNamesMask are set in .I which. .I XkbGetNames can return Success, or BadAlloc, BadLength, BadMatch, and BadImplementation errors. To free symbolic names, use .I XkbFreeNames. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadImplementation Invalid reply from server .TP 15 .B BadLength The length of a request is shorter or longer than that required to minimally contain the arguments .TP 15 .B BadMatch A compatible version of Xkb was not available in the server or an argument has correct type and range, but is otherwise invalid .SH "SEE ALSO" .BR XkbFreeNames (__libmansuffix__) libX11-1.6.3/man/xkb/XkbKeycodeToKeysym.man000064401431060000012000000040221247741723500206450ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbKeycodeToKeysym __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbKeycodeToKeysym \- Finds the keysym bound to a particular key at a specified group and shift level .SH SYNOPSIS .HP .B KeySym XkbKeycodeToKeysym .BI "(\^Display *" "dpy" "\^," .BI "KeyCode " "kc" "\^," .BI "unsigned int " "group" "\^," .BI "unsigned int " "level" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to X server .TP .I \- kc key of interest .TP .I \- group group of interest .TP .I \- level shift level of interest .SH DESCRIPTION .LP .I XkbKeycodeToKeysym returns the keysym bound to a particular group and shift level for a particular key on the core keyboard. If .I kc is not a legal keycode for the core keyboard, or if .I group or .I level are out of range for the specified key, .I XkbKeycodeToKeysym returns NoSymbol. Oracle and/or its affiliates. All rights reserved. .\" .\" 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 follibX11-1.6.3/man/xkb/XkbGetStickyKeysOptions.man000064401431060000012000000122321247741723500216750ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbGetStickyKeysOptions __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbGetStickyKeysOptions \- Queries the current StickyKeys attributes for a keyboard device .SH SYNOPSIS .HP .B Bool XkbGetStickyKeysOptions .BI "(\^Display *" "display" "\^," .BI "unsigned int " "device_spec" "\^," .BI "unsigned int *" "options_rtrn" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- display connection to X server .TP .I \- device_spec device ID, or XkbUseCoreKbd .TP .I \- options_rtrn backfilled with StickyKeys option mask .SH DESCRIPTION .LP The StickyKeys control has two options that can be accessed via the .I ax_options of an XkbControlsRec structure. The first option, TwoKeys, specifies whether StickyKeys should automatically turn off when two keys are pressed at the same time. This feature is useful for shared computers so people who do not want them do not need to turn StickyKeys off if a previous user left StickyKeys on. The second option, LatchToLock, specifies whether or not StickyKeys locks a modifier when pressed twice in a row. .I XkbGetStickyKeysOptions requests the attributes of the StickyKeys control from the server, waits for a reply, and backfills .I options_rtrn with a mask indicating whether the individual StickyKeys options are on or off. Valid bits in .I options_rtrn are: .nf XkbAX_TwoKeysMask XkbAX_LatchToLockMask .fi .I XkbGetStickyKeysOptions returns True if successful; if a compatible version of the Xkb extension is not available in the server .I XkbGetStickyKeysOptions returns False. .SH "RETURN VALUES" .TP 15 True The .I XkbGetStickyKeysOptions function returns True if the request for the attributes of the StickyKeys control from the server was successful. .TP 15 False The .I XkbGetStickyKeysOptions function returns False if a compatible version of the Xkb extension is not available in the server. .SH STRUCTURES .nf The XkbControlsRec structure is defined as follows: #define XkbMaxLegalKeyCode 255 #define XkbPerKeyBitArraySize ((XkbMaxLegalKeyCode+1)/8) typedef struct { unsigned char mk_dflt_btn; /\(** default button for keyboard driven mouse */ unsigned char num_groups; /\(** number of keyboard groups */ unsigned char groups_wrap; /\(** how to wrap out-of-bounds groups */ XkbModsRec internal; /\(** defines server internal modifiers */ XkbModsRec ignore_lock; /\(** modifiers to ignore when checking for grab */ unsigned int enabled_ctrls; /\(** 1 bit => corresponding boolean control enabled */ unsigned short repeat_delay; /\(** ms delay until first repeat */ unsigned short repeat_interval; /\(** ms delay between repeats */ unsigned short slow_keys_delay; /\(** ms minimum time key must be down to be ok */ unsigned short debounce_delay; /\(** ms delay before key reactivated */ unsigned short mk_delay; /\(** ms delay to second mouse motion event */ unsigned short mk_interval; /\(** ms delay between repeat mouse events */ unsigned short mk_time_to_max; /\(** # intervals until constant mouse move */ unsigned short mk_max_speed; /\(** multiplier for maximum mouse speed */ short mk_curve; /\(** determines mouse move curve type */ unsigned short ax_options; /\(** 1 bit => Access X option enabled */ unsigned short ax_timeout; /\(** seconds until Access X disabled */ unsigned short axt_opts_mask; /\(** 1 bit => options to reset on Access X timeout */ unsigned short axt_opts_values; /\(** 1 bit => turn option on, 0=> off */ unsigned int axt_ctrls_mask; /\(** which bits in enabled_ctrls to modify */ unsigned int axt_ctrls_values; /\(** values for new bits in enabled_ctrls */ unsigned char per_key_repeat[XkbPerKeyBitArraySize]; /\(** per key auto repeat */ } XkbControlsRec, *XkbControlsPtr; .fi libX11-1.6.3/man/xkb/XkbModActionVMods.man000064401431060000012000000033511247741723500204070ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbModActionVMods __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbModActionVMods \- Returns the vmods1 and vmods2 fields of act converted to the vmods format of an Xkb modifier description .SH SYNOPSIS .HP .B unsigned short XkbModActionVMods .BI "(\^XkbAction " "act" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- act action from which to extract virtual mods .SH DESCRIPTION .LP .I XkbModActionVMods returns the .I vmods1 and .I vmods2 fields of .I act converted to the .I vmods format of an Xkb modifier description. libX11-1.6.3/man/xkb/XkbAllocGeometry.man000064401431060000012000000057231247741723500203340ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAllocGeometry __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAllocGeometry \- Allocate an entire geometry .SH SYNOPSIS .HP .B Status XkbAllocGeometry .BI "(\^XkbDescPtr " "xkb" "\^," .BI "XkbGeometrySizesPtr " "sizes" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb keyboard description for which geometry is to be allocated .TP .I \- sizes initial sizes for all geometry components .SH DESCRIPTION .LP Xkb provides a number of functions to allocate and free subcomponents of a keyboard geometry. Use these functions to create or modify keyboard geometries. Note that these functions merely allocate space for the new element(s), and it is up to you to fill in the values explicitly in your code. These allocation functions increase .I sz_* but never touch .I num_* (unless there is an allocation failure, in which case they reset both .I sz_* and .I num_* to zero). These functions return Success if they succeed, BadAlloc if they are not able to allocate space, or BadValue if a parameter is not as expected. .I XkbAllocGeometry allocates a keyboard geometry and adds it to the keyboard description specified by .I xkb. The keyboard description should be obtained via the .I XkbGetKeyboard or .I XkbAllocKeyboard functions. The .I sizes parameter specifies the number of elements to be reserved for the subcomponents of the keyboard geometry and can be zero or more. These subcomponents include the .I properties, colors, shapes, sections, and doodads. To free an entire geometry, use .I XkbFreeGeometry. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadValue An argument is out of range .SH "SEE ALSO" .BR XkbAllocKeyboard (__libmansuffix__), .BR XkbFreeGeometry (__libmansuffix__), .BR XkbGetKeyboard (__libmansuffix__) libX11-1.6.3/man/xkb/XkbAddGeomSection.man000064401431060000012000000116371247741723500204140ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAddGeomSection __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAddGeomSection \- Add one section to an existing keyboard geometry .SH SYNOPSIS .HP .B XkbSectionPtr XkbAddGeomSection .BI "(\^XkbGeometryPtr " "geom" "\^," .BI "Atom " "name" "\^," .BI "int " "sz_rows" "\^," .BI "int " "sz_doodads" "\^," .BI "int " "sz_overlays" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- geom geometry to be updated .TP .I \- name name of the new section .TP .I \- sz_rows number of rows to reserve in the section .TP .I \- sz_doodads number of doodads to reserve in the section .TP .I \- sz_overlays number of overlays to reserve in the section .SH DESCRIPTION .LP Xkb provides functions to add a single new element to the top-level keyboard geometry. In each case the .I num_ * fields of the corresponding structure is incremented by 1. These functions do not change .I sz_* unless there is no more room in the array. Some of these functions fill in the values of the element's structure from the arguments. For other functions, you must explicitly write code to fill the structure's elements. The top-level geometry description includes a list of .I geometry properties. A geometry property associates an arbitrary string with an equally arbitrary name. Programs that display images of keyboards can use geometry properties as hints, but they are not interpreted by Xkb. No other geometry structures refer to geometry properties. A keyboard geometry contains an arbitrary number of sections. .I XkbAddGeomSection adds one section to an existing keyboard geometry .I geom. The new section contains space for the number of rows, doodads, and overlays specified by .I sz_rows, sz_doodads, and .I sz_overlays. The new section is allocated and zeroed and given the name specified by .I name. If a section with name .I name already exists in the geometry, a pointer to the existing section is returned. .I XkbAddGeomSection returns NULL if any of the parameters is empty or if it was not able to allocate space for the section. To allocate space for an arbitrary number of sections to a geometry, use .I XkbAllocGeomSections. .SH STRUCTURES .LP .nf typedef struct _XkbSection { Atom name; /\(** section name */ unsigned char priority; /\(** drawing priority, 0=>highest, 255=>lowest */ short top; /\(** top coordinate of section origin */ short left; /\(** left coordinate of row origin */ unsigned short width; /\(** section width, in mm/10 */ unsigned short height; /\(** section height, in mm/10 */ short angle; /\(** angle of section rotation, counterclockwise */ unsigned short num_rows; /\(** number of rows in the rows array */ unsigned short num_doodads; /\(** number of doodads in the doodads array */ unsigned short num_overlays; /\(** number of overlays in the overlays array */ unsigned short sz_rows; /\(** size of the rows array */ unsigned short sz_doodads; /\(** size of the doodads array */ unsigned short sz_overlays; /\(** size of the overlays array */ XkbRowPtr rows; /\(** section rows array */ XkbDoodadPtr doodads; /\(** section doodads array */ XkbBoundsRec bounds; /\(** bounding box for the section, before rotation*/ XkbOverlayPtr overlays; /\(** section overlays array */ } XkbSectionRec, *XkbSectionPtr; .fi .I top and .I left are the origin of the section, relative to the origin of the keyboard, in mm/10. angle is in 1/10 degrees. .SH "SEE ALSO" .BR XkbAllocGeomSections (__libmansuffix__) libX11-1.6.3/man/xkb/XkbGetNamedIndicator.man000064401431060000012000000074611247741723500211100ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbGetNamedIndicator __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbGetNamedIndicator \- Look up the indicator map and other information for an indicator by name .SH SYNOPSIS .HP .B Bool XkbGetNamedIndicator .BI "(\^Display *" "dpy" "\^," .BI "unsigned int " "dev_spec" "\^," .BI "Atom " "name" "\^," .BI "int *" "ndx_rtrn" "\^," .BI "Bool *" "state_rtrn" "\^," .BI "XkbIndicatorMapPtr " "map_rtrn" "\^," .BI "Bool *" "real_rtrn" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to the X server .TP .I \- dev_spec keyboard device ID, or XkbUseCoreKbd .TP .I \- name name of the indicator to be retrieved .TP .I \- ndx_rtrn backfilled with the index of the retrieved indicator .TP .I \- state_rtrn backfilled with the current state of the retrieved indicator .TP .I \- map_rtrn backfilled with the mapping for the retrieved indicator .TP .I \- real_rtrn backfilled with True if the named indicator is real (physical) .SH DESCRIPTION .LP Xkb also allows applications to refer to indicators by name. Use .I XkbGetNames to get the indicator names. Using names eliminates the need for hard-coding bitmask values for particular keyboards. For example, instead of using vendor-specific constants such as WSKBLed_ScrollLock mask on Digital workstations or XLED_SCROLL_LOCK on Sun workstations, you can instead use .I XkbGetNamedIndicator to look up information on the indicator named "Scroll Lock." If the device specified by .I device_spec has an indicator named .I name, XkbGetNamedIndicator returns True and populates the rest of the parameters with information about the indicator. Otherwise, .I XkbGetNamedIndicator returns False. The .I ndx_rtrn field returns the zero-based index of the named indicator. This index is the bit position to use in any function call that requires a mask of indicator bits, as well as the indicator's index into the XkbIndicatorRec array of indicator maps. .I state_rtrn returns the current state of the named indicator (True = on, False = off). .I map_rtrn returns the indicator map for the named indicator. In addition, if the indicator is mapped to a physical LED, the .I real_rtrn parameter is set to True. Each of the " .I _rtrn " arguments is optional; you can pass NULL for any unneeded " .I _rtrn " arguments. .SH "RETURN VALUES" .TP 15 True The .I XkbGetNamedIndicator function returns True if the device specified by .I device_spec has an indicator named .I name. .TP 15 False The .I XkbGetNamedIndicator function returns False if the device specified by .I device_spec does not have an indicator named .I name. .SH "SEE ALSO" .BR XkbGetNames (__libmansuffix__) libX11-1.6.3/man/xkb/XkbKeyHasActions.man000064401431060000012000000112331247741723500202640ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbKeyHasActions __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbKeyHasActions \- Determines if the key corresponding to .I keycode has any actions associated with it .SH SYNOPSIS .HP .B int XkbKeyHasActions .BI "(\^XkbDescPtr " "xkb" "\^," .BI "KeyCode " "keycode" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb Xkb description of interest .TP .I \- keycode keycode of interest .SH DESCRIPTION .LP A key action defines the effect key presses and releases have on the internal state of the server. For example, the expected key action associated with pressing the Shift key is to set the Shift modifier. There is zero or one key action associated with each keysym bound to each key. Just as the entire list of key symbols for the keyboard mapping is held in the .I syms field of the client map, the entire list of key actions for the keyboard mapping is held in the .I acts array of the server map. The total size of .I acts is specified by .I size_acts, and the number of entries is specified by .I num_acts. The .I key_acts array, indexed by keycode, describes the actions associated with a key. The .I key_acts array has .I min_key_code unused entries at the start to allow direct indexing using a keycode. If a .I key_acts entry is zero, it means the key does not have any actions associated with it. If an entry is not zero, the entry represents an index into the .I acts field of the server map, much as the .I offset field of a KeySymMapRec structure is an index into the .I syms field of the client map. The reason the .I acts field is a linear list of XkbActions is to reduce the memory consumption associated with a keymap. Because Xkb allows individual keys to have multiple shift levels and a different number of groups per key, a single two-dimensional array of KeySyms would potentially be very large and sparse. Instead, Xkb provides a small two-dimensional array of XkbActions for each key. To store all of these individual arrays, Xkb concatenates each array together in the .I acts field of the server map. The key action structures consist only of fields of type char or unsigned char. This is done to optimize data transfer when the server sends bytes over the wire. If the fields are anything but bytes, the server has to sift through all of the actions and swap any nonbyte fields. Because they consist of nothing but bytes, it can just copy them out. .I XkbKeyHasActions returns True if the key corresponding to .I keycode has any actions associated with it; otherwise, it returns False. .SH "RETURN VALUES" .TP 15 True The .I XkbKeyHasActions function will return True if the key corresponding to .I keycode has any actions associated with it. .TP 15 False The .I XkbKeyHasActions function will return False if the key corresponding to .I keycode does not have any actions associated with it. .SH STRUCTURES .LP The KeySymMapRec structure is defined as follows: .nf #define XkbNumKbdGroups 4 #define XkbMaxKbdGroup (XkbNumKbdGroups-1) typedef struct { /\(** map to keysyms for a single keycode */ unsigned char kt_index[XkbNumKbdGroups]; /\(** key type index for each group */ unsigned char group_info; /\(** # of groups and out of range group handling */ unsigned char width; /\(** max # of shift levels for key */ unsigned short offset; /\(** index to keysym table in syms array */ } XkbSymMapRec, *XkbSymMapPtr; .fi libX11-1.6.3/man/xkb/XkbKeyActionsPtr.man000064401431060000012000000111761247741723500203240ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbKeyActionsPtr __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbKeyActionsPtr \- Returns a pointer to the two-dimensional array of key actions associated with the key corresponding to keycode .SH SYNOPSIS .HP .B XkbKeyActionPtr XkbKeyActionsPtr .BI "(\^XkbDescPtr " "xkb" "\^," .BI "KeyCode " "keycode" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb Xkb description of interest .TP .I \- keycode keycode of interest .SH DESCRIPTION .LP A key action defines the effect key presses and releases have on the internal state of the server. For example, the expected key action associated with pressing the Shift key is to set the Shift modifier. There is zero or one key action associated with each keysym bound to each key. Just as the entire list of key symbols for the keyboard mapping is held in the .I syms field of the client map, the entire list of key actions for the keyboard mapping is held in the .I acts array of the server map. The total size of .I acts is specified by .I size_acts, and the number of entries is specified by .I num_acts. The .I key_acts array, indexed by keycode, describes the actions associated with a key. The .I key_acts array has .I min_key_code unused entries at the start to allow direct indexing using a keycode. If a .I key_acts entry is zero, it means the key does not have any actions associated with it. If an entry is not zero, the entry represents an index into the .I acts field of the server map, much as the .I offset field of a KeySymMapRec structure is an index into the .I syms field of the client map. The reason the .I acts field is a linear list of XkbActions is to reduce the memory consumption associated with a keymap. Because Xkb allows individual keys to have multiple shift levels and a different number of groups per key, a single two-dimensional array of KeySyms would potentially be very large and sparse. Instead, Xkb provides a small two-dimensional array of XkbActions for each key. To store all of these individual arrays, Xkb concatenates each array together in the .I acts field of the server map. The key action structures consist only of fields of type char or unsigned char. This is done to optimize data transfer when the server sends bytes over the wire. If the fields are anything but bytes, the server has to sift through all of the actions and swap any nonbyte fields. Because they consist of nothing but bytes, it can just copy them out. .I XkbKeyActionsPtr returns a pointer to the two-dimensional array of key actions associated with the key corresponding to .I keycode. Use .I XkbKeyActionsPtr only if the key actually has some actions associated with it, that is, .I XkbKeyNumActions (xkb, keycode) returns something greater than zero. .SH STRUCTURES .LP The KeySymMapRec structure is defined as follows: .nf #define XkbNumKbdGroups 4 #define XkbMaxKbdGroup (XkbNumKbdGroups-1) typedef struct { /\(** map to keysyms for a single keycode */ unsigned char kt_index[XkbNumKbdGroups]; /\(** key type index for each group */ unsigned char group_info; /\(** # of groups and out of range group handling */ unsigned char width; /\(** max # of shift levels for key */ unsigned short offset; /\(** index to keysym table in syms array */ } XkbSymMapRec, *XkbSymMapPtr; .fi .SH "SEE ALSO" .BR XkbKeyNumActions (__libmansuffix__) libX11-1.6.3/man/xkb/XkbFreeServerMap.man000064401431060000012000000140411247741723500202650ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbFreeServerMap __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbFreeServerMap \- Free memory used by the server member of an XkbDescRec structure .SH SYNOPSIS .HP .B void XkbFreeServerMap .BI "(\^XkbDescPtr " "xkb" "\^," .BI "unsigned int " "which" "\^," .BI "Bool " "free_all" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb keyboard description containing server map to free .TP .I \- which mask identifying components of map to free .TP .I \- free_all True => free all server map components and server itself .SH DESCRIPTION .LP The .I XkbFreeServerMap function frees the specified components of server map in the XkbDescRec structure specified by the .I xkb parameter and sets the corresponding structure component values to NULL. The .I which parameter specifies a combination of the server map masks and is a bitwise inclusive OR of the masks listed in Table 1. If .I free_all is True, .I which is ignored and .I XkbFreeServerMap frees every non-NULL structure component in the server map, frees the XkbServerMapRec structure referenced by the .I server member of the .I xkb parameter, and sets the .I server member to NULL. .TS c s l l l lw(4i). Table 1 XkbAllocServerMap Masks _ Mask Effect _ XkbExplicitComponentsMask T{ The min_key_code and max_key_code fields of the xkb parameter are used to allocate the explicit field of the server map. T} .sp XkbKeyActionsMask T{ The min_key_code and max_key_code fields of the xkb parameter are used to allocate the key_acts field of the server map. The count_acts parameter is used to allocate the acts field of the server map. T} .sp XkbKeyBehaviorsMask T{ The min_key_code and max_key_code fields of the xkb parameter are used to allocate the behaviors field of the server map. T} .sp XkbVirtualModMapMask T{ The min_key_code and max_key_code fields of the xkb parameter are used to allocate the vmodmap field of the server map. T} .TE .SH STRUCTURES .LP The complete description of an Xkb keyboard is given by an XkbDescRec. The component structures in the XkbDescRec represent the major Xkb components. .nf typedef struct { struct _XDisplay * display; /\(** connection to X server */ unsigned short flags; /\(** private to Xkb, do not modify */ unsigned short device_spec; /\(** device of interest */ KeyCode min_key_code; /\(** minimum keycode for device */ KeyCode max_key_code; /\(** maximum keycode for device */ XkbControlsPtr ctrls; /\(** controls */ XkbServerMapPtr server; /\(** server keymap */ XkbClientMapPtr map; /\(** client keymap */ XkbIndicatorPtr indicators; /\(** indicator map */ XkbNamesPtr names; /\(** names for all components */ XkbCompatMapPtr compat; /\(** compatibility map */ XkbGeometryPtr geom; /\(** physical geometry of keyboard */ } XkbDescRec, *XkbDescPtr; .fi The .I display field points to an X display structure. The .I flags field is private to the library: modifying .I flags may yield unpredictable results. The .I device_spec field specifies the device identifier of the keyboard input device, or XkbUseCoreKeyboard, which specifies the core keyboard device. The .I min_key_code and .I max_key_code fields specify the least and greatest keycode that can be returned by the keyboard. Each structure component has a corresponding mask bit that is used in function calls to indicate that the structure should be manipulated in some manner, such as allocating it or freeing it. These masks and their relationships to the fields in the XkbDescRec are shown in Table 2. .TS c s s l l l l l l. Table 2 Mask Bits for XkbDescRec _ Mask Bit XkbDescRec Field Value _ XkbControlsMask ctrls (1L<<0) XkbServerMapMask server (1L<<1) XkbIClientMapMask map (1L<<2) XkbIndicatorMapMask indicators (1L<<3) XkbNamesMask names (1L<<4) XkbCompatMapMask compat (1L<<5) XkbGeometryMask geom (1L<<6) XkbAllComponentsMask All Fields (0x7f) .TE The Xkb server map contains the information the server needs to interpret key events and is of type XkbServerMapRec: .nf \&#define XkbNumVirtualMods 16 typedef struct { /\(** Server Map */ unsigned short num_acts; /\(** # of occupied entries in acts */ unsigned short size_acts; /\(** # of entries in acts */ XkbAction * acts; /\(** linear 2d tables of key actions, 1 per keycode */ XkbBehavior * behaviors; /\(** key behaviors,1 per keycode */ unsigned short * key_acts; /\(** index into acts, 1 per keycode */ unsigned char * explicit; /\(** explicit overrides of core remapping, 1 per key */ unsigned char vmods[XkbNumVirtualMods]; /\(** real mods bound to virtual mods */ unsigned short * vmodmap; /\(** virtual mods bound to key, 1 per keycode*/ } XkbServerMapRec, *XkbServerMapPtr; .fi nd/or its affiliates. All rights reserved. .\" .\" 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 tlibX11-1.6.3/man/xkb/XkbForceBell.man000064401431060000012000000242721247741723500174230ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbForceBell __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbForceBell \- Overrides user preference settings for audible bells to ring the bell on the default keyboard .SH SYNOPSIS .HP .B Bool XkbForceBell .BI "(\^Display *" "display" "\^," .BI "int " "percent" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- display connection to the X server .TP .I \- percent volume for the bell, which can range from -100 to 100 inclusive .SH DESCRIPTION .LP The core X protocol allows only applications to explicitly sound the system bell with a given duration, pitch, and volume. Xkb extends this capability by allowing clients to attach symbolic names to bells, disable audible bells, and receive an event whenever the keyboard bell is rung. For the purposes of this document, the .I audible bell is defined to be the system bell, or the default keyboard bell, as opposed to any other audible sound generated elsewhere in the system. You can ask to receive XkbBellNotify events when any client rings any one of the following: .IP \(bu 5 The default bell .IP \(bu 5 Any bell on an input device that can be specified by a bell_class and bell_id pair .IP \(bu 5 Any bell specified only by an arbitrary name. (This is, from the server's point of view, merely a name, and not connected with any physical sound-generating device. Some client application must generate the sound, or visual feedback, if any, that is associated with the name.) .LP You can also ask to receive XkbBellNotify events when the server rings the default bell or if any client has requested events only (without the bell sounding) for any of the bell types previously listed. You can disable audible bells on a global basis. For example, a client that replaces the keyboard bell with some other audible cue might want to turn off the AudibleBell control to prevent the server from also generating a sound and avoid cacophony. If you disable audible bells and request to receive XkbBellNotify events, you can generate feedback different from the default bell. You can, however, override the AudibleBell control by calling one of the functions that force the ringing of a bell in spite of the setting of the AudibleBell control - .I XkbForceDeviceBell or .I XkbForceBell. In this case the server does not generate a bell event. Just as some keyboards can produce keyclicks to indicate when a key is pressed or repeating, Xkb can provide feedback for the controls by using special beep codes. The AccessXFeedback control is used to configure the specific types of operations that generate feedback. .B Bell Names You can associate a name to an act of ringing a bell by converting the name to an Atom and then using this name when you call the functions listed in this chapter. If an event is generated as a result, the name is then passed to all other clients interested in receiving XkbBellNotify events. Note that these are arbitrary names and that there is no binding to any sounds. Any sounds or other effects (such as visual bells on the screen) must be generated by a client application upon receipt of the bell event containing the name. There is no default name for the default keyboard bell. The server does generate some predefined bells for the AccessX controls. These named bells are shown in the Table 1; the name is included in any bell event sent to clients that have requested to receive XkbBellNotify events. .TS c s l l lW(4i) l. Table 1 Predefined Bells _ Action Named Bell _ Indicator turned on AX_IndicatorOn Indicator turned off AX_IndicatorOff More than one indicator changed state AX_IndicatorChange Control turned on AX_FeatureOn Control turned off AX_FeatureOff More than one control changed state AX_FeatureChange T{ SlowKeys and BounceKeys about to be turned on or off T} AX_SlowKeysWarning SlowKeys key pressed AX_SlowKeyPress SlowKeys key accepted AX_SlowKeyAccept SlowKeys key rejected AX_SlowKeyReject Accepted SlowKeys key released AX_SlowKeyRelease BounceKeys key rejected AX_BounceKeyReject StickyKeys key latched AX_StickyLatch StickyKeys key locked AX_StickyLock StickyKeys key unlocked AX_StickyUnlock .TE .B Audible Bells Using Xkb you can generate bell events that do not necessarily ring the system bell. This is useful if you need to use an audio server instead of the system beep. For example, when an audio client starts, it could disable the audible bell (the system bell) and then listen for XkbBellNotify events. When it receives a XkbBellNotify event, the audio client could then send a request to an audio server to play a sound. You can control the audible bells feature by passing the XkbAudibleBellMask to .I XkbChangeEnabledControls. If you set XkbAudibleBellMask on, the server rings the system bell when a bell event occurs. This is the default. If you set XkbAudibleBellMask off and a bell event occurs, the server does not ring the system bell unless you call .I XkbForceDeviceBell or .I XkbForceBell. Audible bells are also part of the per-client auto-reset controls. Bell Functions Use the functions described in this section to ring bells and to generate bell events. The input extension has two types of feedbacks that can generate bells - bell feedback and keyboard feedback. Some of the functions in this section have .I bell_class and .I bell_id parameters; set them as follows: Set .I bell_class to BellFeedbackClass or KbdFeedbackClass. A device can have more than one feedback of each type; set .I bell_id to the particular bell feedback of .I bell_class type. Table 2 shows the conditions that cause a bell to sound or an XkbBellNotifyEvent to be generated when a bell function is called. .TS c s s s l l l l l l l l. Table 2 Bell Sounding and Bell Event Generating _ Function called AudibleBell Server sounds a bell Server sends an XkbBellNotifyEvent _ XkbDeviceBell On Yes Yes XkbDeviceBell Off No Yes XkbBell On Yes Yes XkbBell Off No Yes XkbDeviceBellEvent On or Off No Yes XkbBellEvent On or Off No Yes XkbDeviceForceBell On or Off Yes No XkbForceBell On or Off Yes No .TE If a compatible keyboard extension isn't present in the X server, .I XkbForceBell calls .I XBell with the specified .I display and .I percent and returns False. Otherwise, .I XkbForceBell calls .I XkbForceDeviceBell with the specified .I display and .I percent, device_spec =XkbUseCoreKbd, .I bell_class = XkbDfltXIClass, .I bell_id = XkbDfltXIId, .I window = None, and .I name = NULL, and returns what .I XkbForceDeviceBell returns. .I XkbForceBell does not cause an XkbBellNotify event. You can call .I XkbBell without first initializing the keyboard extension. .SH "RETURNS VALUES" .TP 15 False The .I XkbForceBell function returns False when a compatible keyboard extension isn't present in the X server. .SH STRUCTURES .LP Xkb generates XkbBellNotify events for all bells except for those resulting from calls to .I XkbForceDeviceBell and .I XkbForceBell. To receive XkbBellNotify events under all possible conditions, pass XkbBellNotifyMask in both the .I bits_to_change and .I values_for_bits parameters to .I XkbSelectEvents. The XkbBellNotify event has no event details. It is either selected or it is not. However, you can call .I XkbSelectEventDetails using XkbBellNotify as the .I event_type and specifying XkbAllBellNotifyMask in .I bits_to_change and .I values_for_bits. This has the same effect as a call to .I XkbSelectEvents. The structure for the XkbBellNotify event type contains: .nf typedef struct _XkbBellNotify { int type; /\(** Xkb extension base event code */ unsigned long serial; /\(** X server serial number for event */ Bool send_event; /\(** True => synthetically generated */ Display * display; /\(** server connection where event generated */ Time time; /\(** server time when event generated */ int xkb_type; /\(** XkbBellNotify */ unsigned int device; /\(** Xkb device ID, will not be XkbUseCoreKbd */ int percent; /\(** requested volume as % of max */ int pitch; /\(** requested pitch in Hz */ int duration; /\(** requested duration in microseconds */ unsigned int bell_class; /\(** X input extension feedback class */ unsigned int bell_id; /\(** X input extension feedback ID */ Atom name; /\(** "name" of requested bell */ Window window; /\(** window associated with event */ Bool event_only; /\(** False -> the server did not produce a beep */ } XkbBellNotifyEvent; .fi If your application needs to generate visual bell feedback on the screen when it receives a bell event, use the window ID in the XkbBellNotifyEvent, if present. .SH "SEE ALSO" .BR XBell (__libmansuffix__), .BR XkbBell (__libmansuffix__), .BR XkbChangeEnabledControls (__libmansuffix__), .BR XkbForceDeviceBell (__libmansuffix__), .BR XkbSelectEventDetails (__libmansuffix__), .BR XkbSelectEvents (__libmansuffix__) TH XkbForceBell __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbForceBell \- Overrides user preference settings for audible bells to ring the bell on the default keyboard .SH SYNOPSIS .HP .B Bool XkbForceBell .BI "(\^Display *" "display" "\^," .BI "int " "percent" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENlibX11-1.6.3/man/xkb/XkbApplyCompatMapToKey.man000064401431060000012000000343621247741723500214320ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbApplyCompatMapToKey __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbApplyCompatMapToKey \- Apply the new compatibility mapping to an individual key to get its semantics updated .SH SYNOPSIS .HP .B Bool XkbApplyCompatMapToKey .BI "(\^XkbDescPtr " "xkb" "\^," .BI "KeyCode " "key" "\^," .BI "XkbChangesPtr " "changes" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb keyboard description to be updated .TP .I \- key key to be updated .TP .I \- changes notes changes to the Xkb keyboard description .SH DESCRIPTION .LP .I XkbApplyCompatMapToKey essentially performs the operation described in Core Keyboard Mapping to Xkb Keyboard Mapping Transformation to a specific key. This updates the behavior, actions, repeat status, and virtual modifier bindings of the key. .B Core Keyboard Mapping to Xkb Keyboard Mapping Transformation When a core protocol keyboard mapping request is received by the server, the server's core keyboard map is updated, and then the Xkb map maintained by the server is updated. Because a client may have explicitly configured some of the Xkb keyboard mapping in the server, this automatic regeneration of the Xkb keyboard mapping from the core protocol keyboard mapping should not modify any components of the Xkb keyboard mapping that were explicitly set by a client. The client must set explicit override controls to prevent this from happening (see Explicit Components-Avoiding Automatic Remapping by the Server). The core-to-Xkb mapping is done as follows: .B Explicit Components-Avoiding Automatic Remapping by the Server Whenever a client remaps the keyboard using core protocol requests, Xkb examines the map to determine likely default values for the components that cannot be specified using the core protocol. This automatic remapping might replace definitions explicitly requested by an application, so the Xkb keyboard description defines an explicit components mask for each key. Any aspects of the automatic remapping listed in the explicit components mask for a key are not changed by the automatic keyboard mapping. The explicit components masks are held in the .I explicit field of the server map, which is an array indexed by keycode. Each entry in this array is a mask that is a bitwise inclusive OR of the values shown in Table 1. .TS c s s l l l l l lw(3i). Table 1 Explicit Component Masks _ Bit in Explicit Mask Value Protects Against _ ExplicitKeyType1 (1<<0) T{ Automatic determination of the key type associated with Group1. T} ExplicitKeyType2 (1<<1) T{ Automatic determination of the key type associated with Group2. T} ExplicitKeyType3 (1<<2) T{ Automatic determination of the key type associated with Group3. T} ExplicitKeyType4 (1<<3) T{ Automatic determination of the key type associated with Group4. T} ExplicitInterpret (1<<4) T{ Application of any of the fields of a symbol interpretation to the key in question. T} ExplicitAutoRepeat (1<<5) T{ Automatic determination of auto-repeat status for the key, as specified in a symbol interpretation. T} ExplicitBehavior (1<<6) T{ Automatic assignment of the XkbKB_Lock behavior to the key, if the XkbSI_LockingKey flag is set in a symbol interpretation. T} ExplicitVModMap (1<<7) T{ Automatic determination of the virtual modifier map for the key based on the actions assigned to the key and the symbol interpretations that match the key. T} .TE .TP 4 1. Map the symbols from the keys in the core keyboard map to groups and symbols on keys in the Xkb keyboard map. The core keyboard mapping is of fixed width, so each key in the core mapping has the same number of symbols associated with it. The Xkb mapping allows a different number of symbols to be associated with each key; those symbols may be divided into a different number of groups (1-4) for each key. For each key, this process therefore involves partitioning the fixed number of symbols from the core mapping into a set of variable-length groups with a variable number of symbols in each group. For example, if the core protocol map is of width five, the partition for one key might result in one group with two symbols and another with three symbols. A different key might result in two groups with two symbols plus a third group with one symbol. The core protocol map requires at least two symbols in each of the first two groups. .TP 4 1a. For each changed key, determine the number of groups represented in the new core keyboard map. This results in a tentative group count for each key in the Xkb map. .TP 4 1b. For each changed key, determine the number of symbols in each of the groups found in step 1a. There is one explicit override control associated with each of the four possible groups for each Xkb key, ExplicitKeyType1 through ExplicitKeyType4. If no explicit override control is set for a group, the number of symbols used for that group from the core map is two. If the explicit override control is set for a group on the key, the number of symbols used for that Xkb group from the core map is the width of the Xkb group with one exception: because of the core protocol requirement for at least two symbols in each of groups one and two, the number of symbols used for groups one and two is the maximum of 2 or the width of the Xkb group. .TP 4 1c. For each changed key, assign the symbols in the core map to the appropriate group on the key. If the total number of symbols required by the Xkb map for a particular key needs more symbols than the core protocol map contains, the additional symbols are taken to be NoSymbol keysyms appended to the end of the core set. If the core map contains more symbols than are needed by the Xkb map, trailing symbols in the core map are discarded. In the absence of an explicit override for group one or two, symbols are assigned in order by group; the first symbols in the core map are assigned to group one, in order, followed by group two, and so on. For example, if the core map contained eight symbols per key, and a particular Xkb map contained 2 symbols for G1 and G2 and three for G3, the symbols would be assigned as (G is group, L is shift level): .nf G1L1 G1L2 G2L1 G2L2 G3L1 G3L2 G3L3 .fi If an explicit override control is set for group one or two, the symbols are taken from the core set in a somewhat different order. The first four symbols from the core set are assigned to G1L1, G1L2, G2L1, G2L2, respectively. If group one requires more symbols, they are taken next, and then any additional symbols needed by group two. Group three and four symbols are taken in complete sequence after group two. For example, a key with four groups and three symbols in each group would take symbols from the core set in the following order: .nf G1L1 G1L2 G2L1 G2L2 G1L3 G2L3 G3L1 G3L2 G3L3 G4L1 G4L2 G4L3 .fi As previously noted, the core protocol map requires at lease two symbols in groups one and two. Because of this, if an explicit override control for an Xkb key is set and group one and / or group two is of width one, it is not possible to generate the symbols taken from the core protocol set and assigned to position G1L2 and / or G2L2. .TP 4 1d. For each group on each changed key, assign a key type appropriate for the symbols in the group. .TP 4 1e. For each changed key, remove any empty or redundant groups. At this point, the groups and their associated symbols have been assigned to the corresponding key definitions in the Xkb map. .TP 4 2. Apply symbol interpretations to modify key operation. This phase is completely skipped if the ExplicitInterpret override control bit is set in the explicit controls mask for the Xkb key (see Explicit Components-Avoiding Automatic Remapping by the Server). .TP 4 2a. For each symbol on each changed key, attempt to match the symbol and modifiers from the Xkb map to a symbol interpretation describing how to generate the symbol. .TP 4 2b. When a match is found in step 2a, apply the symbol interpretation to change the semantics associated with the symbol in the Xkb key map. If no match is found, apply a default interpretation. .LP The symbol interpretations used in step 2 are configurable and may be specified using XkbSymInterpretRec structures referenced by the sym_interpret field of an XkbCompatMapRec. .B Symbol Interpretations - the XkbSymInterpretRec Structure Symbol interpretations are used to guide the X server when it modifies the Xkb keymap in step 2. An initial set of symbol interpretations is loaded by the server when it starts. A client may add new ones using XkbSetCompatMap. Symbol interpretations result in key semantics being set. When a symbol interpretation is applied, the following components of server key event processing may be modified for the particular key involved: .nf Virtual modifier map Auto repeat Key behavior (may be set to XkbKB_Lock) Key action .fi The XkbSymInterpretRec structure specifies a symbol interpretation: .nf typedef struct { KeySym sym; /\(** keysym of interest or NULL */ unsigned char flags; /\(** XkbSI_AutoRepeat, XkbSI_LockingKey */ unsigned char match; /\(** specifies how mods is interpreted */ unsigned char mods; /\(** modifier bits, correspond to eight real modifiers */ unsigned char virtual_mod; /\(** 1 modifier to add to key virtual mod map */ XkbAnyAction act; /\(** action to bind to symbol position on key */ } XkbSymInterpretRec,*XkbSymInterpretPtr; .fi If sym is not NULL, it limits the symbol interpretation to keys on which that particular keysym is selected by the modifiers matching the criteria specified by .I mods and .I match. If .I sym is NULL, the interpretation may be applied to any symbol selected on a key when the modifiers match the criteria specified by .I mods and .I match. .I match must be one of the values shown in Table 2 and specifies how the real modifiers specified in .I mods are to be interpreted. .TS c s s l l l l l lw(3i). Table 2 Symbol Interpretation Match Criteria _ Match Criteria Value Effect _ XkbSI_NoneOf (0) T{ None of the bits that are on in mods can be set, but other bits can be. T} XkbSI_AnyOfOrNone (1) T{ Zero or more of the bits that are on in mods can be set, as well as others. T} XkbSI_AnyOf (2) T{ One or more of the bits that are on in mods can be set, as well as any others. T} XkbSI_AllOf (3) T{ All of the bits that are on in mods must be set, but others may be set as well. T} XkbSI_Exactly (4) T{ All of the bits that are on in mods must be set, and no other bits may be set. T} .TE In addition to the above bits, .I match may contain the XkbSI_LevelOneOnly bit, in which case the modifier match criteria specified by .I mods and .I match applies only if .I sym is in level one of its group; otherwise, .I mods and .I match are ignored and the symbol matches a condition where no modifiers are set. .nf \&#define XkbSI_LevelOneOnly (0x80) /\(** use mods + match only if sym is level 1 */ .fi If no matching symbol interpretation is found, the server uses a default interpretation where: .nf sym = 0 flags = XkbSI_AutoRepeat match = XkbSI_AnyOfOrNone mods = 0 virtual_mod = XkbNoModifier act = SA_NoAction .fi When a matching symbol interpretation is found in step 2a, the interpretation is applied to modify the Xkb map as follows. The .I act field specifies a single action to be bound to the symbol position; any key event that selects the symbol causes the action to be taken. Valid actions are defined in Key Actions. If the Xkb keyboard map for the key does not have its ExplicitVModMap control set, the XkbSI_LevelOneOnly bit and symbol position are examined. If the XkbSI_LevelOneOnly bit is not set in .I match or the symbol is in position G1L1, the .I virtual_mod field is examined. If .I virtual_mod is not XkbNoModifier, .I virtual_mod specifies a single virtual modifier to be added to the virtual modifier map for the key. .I virtual_mod is specified as an index in the range [0..15]. If the matching symbol is in position G1L1 of the key, two bits in the flags field potentially specify additional behavior modifications: .nf \&#define XkbSI_AutoRepeat (1<<0) /\(** key repeats if sym is in position G1L1 */ \&#define XkbSI_LockingKey (1<<1) /\(** set KB_Lock behavior if sym is in psn G1L1 */ .fi If the Xkb keyboard map for the key does not have its ExplicitAutoRepeat control set, its auto repeat behavior is set based on the value of the XkbSI_AutoRepeat bit. If the XkbSI_AutoRepeat bit is set, the auto-repeat behavior of the key is turned on; otherwise, it is turned off. If the Xkb keyboard map for the key does not have its ExplicitBehavior control set, its locking behavior is set based on the value of the XkbSI_LockingKey bit. If XkbSI_LockingKey is set, the key behavior is set to KB_Lock; otherwise, it is turned off. .SH "SEE ALSO" .BR XkbKeyAction (__libmansuffix__), .BR XkbKeyActionEntry (__libmansuffix__), .BR XkbKeyActionsPtr (__libmansuffix__), .BR XkbKeyHasActions (__libmansuffix__), .BR XkbKeyNumActions (__libmansuffix__) in each of groups one and two, the number of symbols used for groups one and two is the maximum of 2 or the width of the Xkb group. .TP 4 1c. For each changed key, assign the symbols in the core map to the appropriate group on the key. If the total number of symbols libX11-1.6.3/man/xkb/XkbAddGeomOverlayKey.man000064401431060000012000000056101247741723500210740ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAddGeomOverlayKey __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAddGeomOverlayKey \- Add a key to an existing overlay row .SH SYNOPSIS .HP .B XkbOverlayKeyPtr XkbAddGeomOverlayKey .BI "(\^XkbOverlayPtr " "overlay" "\^," .BI "XkbRowPtr " "row" "\^," .BI "char *" "under" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- overlay overlay to be updated .TP .I \- row row in overlay to be updated .TP .I \- under primary name of the key to be considered .SH DESCRIPTION .LP Xkb provides functions to add a single new element to the top-level keyboard geometry. In each case the .I num_ * fields of the corresponding structure is incremented by 1. These functions do not change .I sz_* unless there is no more room in the array. Some of these functions fill in the values of the element's structure from the arguments. For other functions, you must explicitly write code to fill the structure's elements. The top-level geometry description includes a list of .I geometry properties. A geometry property associates an arbitrary string with an equally arbitrary name. Programs that display images of keyboards can use geometry properties as hints, but they are not interpreted by Xkb. No other geometry structures refer to geometry properties. .I XkbAddGeomOverlayKey adds one key to the .I row in the .I overlay. If there is no key named .I under in the row of the underlying section, .I XkbAddGeomOverlayKey returns NULL. .SH STRUCTURES .LP .nf typedef struct _XkbOverlayKey { XkbKeyNameRec over; /\(** name of this overlay key */ XkbKeyNameRec under; /\(** name of the key under this overlay key */ } XkbOverlayKeyRec,*XkbOverlayKeyPtr; .fi libX11-1.6.3/man/xkb/XkbFindOverlayForKey.man000064401431060000012000000037601247741723500211270ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbFindOverlayForKey __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbFindOverlayForKey \- Find the alternate name by using the primary name for a key that is part of an overlay .SH SYNOPSIS .HP .B char * XkbFindOverlayForKey .BI "(\^XkbGeometryPtr " "geom" "\^," .BI "XkbSectionPtr " "section" "\^," .BI "char *" "under" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- geom geometry that contains the section .TP .I \- section section to be searched for matching keys .TP .I \- under primary name of the key to be considered .SH DESCRIPTION .LP Keys that can generate multiple keycodes may be associated with multiple names. Such keys have a primary name and an alternate name. .I XkbFindOverlayForKey uses the primary name of the key, .I under, to look up the alternate name, which it returns. libX11-1.6.3/man/xkb/XkbAllocCompatMap.man000064401431060000012000000075241247741723500204230ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAllocCompatMap __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAllocCompatMap \- Allocate a new compatibility map if you do not already have one available .SH SYNOPSIS .HP .B Status XkbAllocCompatMap .BI "(\^XkbDescPtr " "xkb" "\^," .BI "unsigned int " "which" "\^," .BI "unsigned int " "num_si" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb keyboard description in which to allocate compat map .TP .I \- which mask of compatibility map components to allocate .TP .I \- num_si number of symbol interpretations to allocate .SH DESCRIPTION .LP .I xkb specifies the keyboard description for which compatibility maps are to be allocated. The compatibility map is the .I compat field in this structure. .I which specifies the compatibility map components to be allocated (see XkbGetCompatMap). .I which is an inclusive OR of the bits shown in Table 1. .TS c s s l l l. Table 1 Compatibility Map Component Masks _ Mask Value Affecting _ XkbSymInterpMask (1<<0) Symbol interpretations XkbGroupCompatMask (1<<1) Group maps XkbAllCompatMask (0x3) All compatibility map components .TE .I num_si specifies the total number of entries to allocate in the symbol interpretation vector .I (xkb.compat.sym_interpret). .I XkbAllocCompatMap returns Success if successful, BadMatch if .I xkb is NULL, or BadAlloc if errors are encountered when attempting to allocate storage. .SH STRUCTURES .LP .nf typedef struct { KeySym sym; /\(** keysym of interest or NULL */ unsigned char flags; /\(** XkbSI_AutoRepeat, XkbSI_LockingKey */ unsigned char match; /\(** specifies how mods is interpreted */ unsigned char mods; /\(** modifier bits, correspond to eight real modifiers */ unsigned char virtual_mod; /\(** 1 modifier to add to key virtual mod map */ XkbAnyAction act; /\(** action to bind to symbol position on key */ } XkbSymInterpretRec,*XkbSymInterpretPtr; .fi .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadMatch A compatible version of Xkb was not available in the server or an argument has correct type and range, but is otherwise invalid .SH "SEE ALSO" .BR XkbGetCompatMap (__libmansuffix__) .SH NOTES .LP Note that symbol interpretations in a compatibility map (the .I sym_interpret vector of XkbSymInterpretRec structures) are also allocated using this same function. To ensure that there is sufficient space in the symbol interpretation vector for entries to be added, use .I XkbAllocCompatMap specifying .I which as XkbSymInterpretMask and the number of free symbol interpretations needed in .I num_si. libX11-1.6.3/man/xkb/XkbSetBounceKeysDelay.man000064401431060000012000000141551247741723500212670ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbSetBounceKeysDelay __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbSetBounceKeysDelay \- Sets the BounceKeys delay for a keyboard device .SH SYNOPSIS .HP .B Bool XkbSetBounceKeysDelay .BI "(\^Display *" "display" "\^," .BI "unsigned int " "device_spec" "\^," .BI "unsigned int *" "delay" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- display connection to X server .TP .I \- device_spec device ID, or XkbUseCoreKbd .TP .I \- delay backfilled with bounce keys delay, ms .SH DESCRIPTION .LP The server can generate XkbAccessXNotify events for some of the global keyboard controls. The detail field describes what AccessX event just occurred and can be any of the values in Table 1. .TS c s l l l lw(4i). Table 1 AccessXNotify Events _ detail Reason _ XkbAXN_SKPress T{ A key was pressed when SlowKeys was enabled. T} XkbAXN_SKAccept T{ A key was accepted (held longer than the SlowKeys delay). T} XkbAXN_SKRelease T{ An accepted SlowKeys key was released. T} XkbAXN_SKReject T{ A key was rejected (released before the SlowKeys delay expired). T} XkbAXN_BKAccept T{ A key was accepted by BounceKeys. T} XkbAXN_BKReject T{ A key was rejected (pressed before the BounceKeys delay expired). T} XkbAXN_AXKWarning T{ AccessXKeys is about to turn on/off StickyKeys or BounceKeys. T} .TE The .I keycode field reports the keycode of the key for which the event occurred. If the action is related to .I SlowKeys, the .I slowKeysDelay field contains the current SlowKeys acceptance delay. If the action is related to BounceKeys, the .I debounceDelay field contains the current BounceKeys debounce delay. Selecting for AccessX Events To receive XkbAccessXNotify events under all possible conditions, use .I XkbSelectEvents and pass XkbAccesXNotifyMask in both .I bits_to_change and .I values_for_bits. To receive XkbStateNotify events only under certain conditions, use .I XkbSelectEventDetails using XkbAccessXNotify as the .I event_type and specifying the desired state changes in .I bits_to_change and .I values_for_bits using mask bits from Table 2. .TS c s s l l l l l lw(3i). Table 2 AccessXNotify Event Details _ XkbAccessXNotify Event Details Value Circumstances _ XkbAXN_SKPressMask (1<<0) T{ Slow key press notification wanted T} XkbAXN_SKAcceptMask (1<<1) T{ Slow key accept notification wanted T} XkbAXN_SKRejectMask (1<<2) T{ Slow key reject notification wanted T} XkbAXN_SKReleaseMask (1<<3) T{ Slow key release notification wanted T} XkbAXN_BKAcceptMask (1<<4) T{ Bounce key accept notification wanted T} XkbAXN_BKRejectMask (1<<5) T{ Bounce key reject notification wanted T} XkbAXN_AXKWarningMask (1<<6) T{ AccessX warning notification wanted T} XkbAllAccessXEventsMask (0x7f) T{ All AccessX features notifications wanted T} .TE Some users may accidentally "bounce" on a key when they release it. They press it once, then accidentally press it again after they release it. The BounceKeys control temporarily disables a key after it has been pressed, effectively "debouncing" the keyboard. The period of time the key is disabled after it is released is known as the .I BounceKeys delay. BounceKeys is a boolean control. When the BounceKeys control is active, the server reports acceptance or rejection of any key to interested clients by sending an appropriate AccessXNotify event. .I XkbSetBounceKeysDelay sends a request to configure the BounceKeys control to the server. It does not wait for a reply and normally returns True. Specifying a value of zero for the delay parameter causes .I XkbSetBounceKeysDelay to generate a BadValue protocol error. If a compatible version of the Xkb extension is not available in the server, .I XkbSetBounceKeysDelay returns False. .SH "RETURN VALUES" .TP 15 True The .I XkbSetBounceKeysDelay function returns True when it sends a request to configure the BounceKeys control to the server. .TP 15 False The .I XkbSetBounceKeysDelay function returns False if a compatible version of the Xkb extension is not available in the server. .SH STRUCTURES .LP The structure for the XkbAccessXNotify event type is as follows: .nf typedef struct { int type; /\(** Xkb extension base event code */ unsigned long serial; /\(** X server serial number for event */ Bool send_event; /\(** True => synthetically generated */ Display * display; /\(** server connection where event generated */ Time time; /\(** server time when event generated */ int xkb_type; /\(** XkbAccessXNotify */ int device; /\(** Xkb device ID, will not be XkbUseCoreKbd */ int detail; /\(** XkbAXN_* */ KeyCode keycode; /\(** key of event */ int slowKeysDelay; /\(** current SlowKeys delay */ int debounceDelay; /\(** current debounce delay */ } XkbAccessXNotifyEvent; .fi .SH DIAGNOSTICS .TP 15 .B BadValue An argument is out of range libX11-1.6.3/man/xkb/XkbAllocGeomSectionDoodads.man000064401431060000012000000051631247741723500222510ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAllocGeomSectionDoodads __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAllocGeomSectionDoodads \- Allocate doodads that are specific to a section .SH SYNOPSIS .HP .B Status XkbAllocGeomSectionDoodads .BI "(\^XkbSectionPtr " "section" "\^," .BI "int " "num_needed" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- section section for which doodads should be allocated .TP .I \- num_needed number of new doodads required .SH DESCRIPTION .LP Xkb provides a number of functions to allocate and free subcomponents of a keyboard geometry. Use these functions to create or modify keyboard geometries. Note that these functions merely allocate space for the new element(s), and it is up to you to fill in the values explicitly in your code. These allocation functions increase .I sz_* but never touch .I num_* (unless there is an allocation failure, in which case they reset both .I sz_* and .I num_* to zero). These functions return Success if they succeed, BadAlloc if they are not able to allocate space, or BadValue if a parameter is not as expected. .I XkbAllocGeomSectionDoodads allocates .I num_needed doodads and adds them to the specified .I section. No initialization of the doodads is done. To free geometry doodads, use .I XkbFreeGeomDoodads. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadValue An argument is out of range .SH "SEE ALSO" .BR XkbFreeGeomDoodads (__libmansuffix__) libX11-1.6.3/man/xkb/XkbResizeKeyActions.man000064401431060000012000000066761247741723500210310ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbResizeKeyActions __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbResizeKeyActions \- Change the number of actions bound to a key .SH SYNOPSIS .HP .B XkbAction * XkbResizeKeyActions .BI "(\^XkbDescRec *" "xkb" "\^," .BI "int " "key" "\^," .BI "int " "needed" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb keyboard description to change .TP .I \- key keycode of key to change .TP .I \- needed new number of actions required .SH DESCRIPTION .LP The .I xkb parameter points to the keyboard description containing the .I key whose number of actions is to be changed. The .I key parameter is the keycode of the key to change, and needed specifies the new number of actions required for the key. .I XkbResizeKeyActions reserves the space needed for the actions and returns a pointer to the beginning of the new array that holds the actions. It can change the .I acts, num_acts, and .I size_acts fields of .I xkb->server if it is necessary to reallocate the .I acts array. If .I needed is greater than the current number of keysyms for the key, .I XkbResizeKeyActions initializes all new actions in the array to NoAction. Because the number of actions needed by a key is normally computed as width * number of groups, and .I XkbResizeKeyActions does not modify either the width or number of groups for the key, a discrepancy exists on return from .I XkbResizeKeyActions between the space allocated for the actions and the number required. The unused entries in the list of actions returned by .I XkbResizeKeyActions are not preserved across future calls to any of the map editing functions, so you must update the key actions (which updates the width and number of groups for the key) before calling another allocator function. A call to .I XkbChangeTypesOfKey updates these. If any allocation errors occur while resizing the number of actions bound to the key, .I XkbResizeKeyActions returns NULL. .SH "SEE ALSO" .BR XkbChangeTypesOfKey (__libmansuffix__), .BR XkbResizeKeySyms (__libmansuffix__) .SH NOTES .LP A change to the number of actions bound to a key should be accompanied by a change in the number of symbols bound to a key. Refer to .I XkbResizeKeySyms for more information on changing the number of symbols bound to a key. "int " "needed" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTSlibX11-1.6.3/man/xkb/XkbFreeGeomDoodads.man000064401431060000012000000051371247741723500205540ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbFreeGeomDoodads __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbFreeGeomDoodads \- Free geometry doodads .SH SYNOPSIS .HP .B void XkbFreeGeomDoodads .BI "(\^XkbDoodadPtr " "doodads" "\^," .BI "int " "count" "\^," .BI "Bool " "free_all" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- doodads doodads to be freed .TP .I \- count number of doodads to be freed .TP .I \- free_all True => all doodads are freed .SH DESCRIPTION .LP Xkb provides a number of functions to allocate and free subcomponents of a keyboard geometry. Use these functions to create or modify keyboard geometries. Note that these functions merely allocate space for the new element(s), and it is up to you to fill in the values explicitly in your code. These allocation functions increase .I sz_* but never touch .I num_* (unless there is an allocation failure, in which case they reset both .I sz_* and .I num_* to zero). These functions return Success if they succeed, BadAlloc if they are not able to allocate space, or BadValue if a parameter is not as expected. If .I free_all is True, all doodads in the array are freed, regardless of the value of .I count. Otherwise, .I count doodads are freed. .SH "RETURN VALUES" .TP 15 Success The XkbFreeGeomDoodads function returns Success if there are no allocation errors. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadValue An argument is out of range libX11-1.6.3/man/xkb/XkbKeysymToModifiers.man000064401431060000012000000040151247741723500212050ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbKeysymToModifiers __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbKeysymToModifiers \- Finds the set of modifiers bound to a particular keysym on the core keyboard .SH SYNOPSIS .HP .B unsigned int XkbKeysymToModifiers .BI "(\^Display *" "dpy" "\^," .BI "KeySym " "ks" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to X server .TP .I \- ks keysym of interest .SH DESCRIPTION .LP .I XkbKeysymToModifiers finds the set of modifiers currently bound to the keysym .I ks on the core keyboard. The value returned is the mask of modifiers bound to the keysym .I ks. If no modifiers are bound to the keysym, .I XkbKeysymToModifiers returns zero; otherwise, it returns the inclusive OR of zero or more of the following: ShiftMask, ControlMask, LockMask, Mod1Mask, Mod2Mask, Mod3Mask, Mod4Mask, and Mod5Mask. libX11-1.6.3/man/xkb/XkbFreeKeyboard.man000064401431060000012000000037011247741723500201220ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbFreeKeyboard __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbFreeKeyboard \- Destroys either an entire XkbDescRec or just some of its members .SH SYNOPSIS .HP .B void XkbFreeKeyboard .BI "(\^XkbDescPtr " "xkb" "\^," .BI "unsigned int " "which" "\^," .BI "Bool " "free_all" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I xkb keyboard description with components to free .TP .I which mask selecting components to free .TP .I free_all True => free all components and .I xkb .SH DESCRIPTION .LP .I XkbFreeKeyboard frees the components of .I xkb specified by .I which and sets the corresponding values to NULL. If .I free_all is True, .I XkbFreeKeyboard frees every non-NULL component of .I xkb and then frees the .I xkb structure itself. whom the .\" Software is furnished to do so, subject to the follibX11-1.6.3/man/xkb/XkbChangeTypesOfKey.man000064401431060000012000000142561247741723500207370ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbChangeTypesOfKey __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbChangeTypesOfKey \- Change the number of groups and the types bound to a key .SH SYNOPSIS .HP .B Status XkbChangeTypesOfKey .BI "(\^XkbDescPtr " "xkb" "\^," .BI "int " "key" "\^," .BI "int " "n_groups" "\^," .BI "unsigned int " "groups" "\^," .BI "int *" "new_types_in" "\^," .BI "XkbMapChangesPtr " "p_changes" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb keyboard description to be changed .TP .I \- key keycode for key of interest .TP .I \- n_groups new number of groups for key .TP .I \- groups mask indicating groups to change .TP .I \- new_types_in indices for new groups specified in groups .TP .I \- p_changes notes changes made to xkb .SH DESCRIPTION .LP .I XkbChangeTypesOfKey reallocates the symbols and actions bound to the key, if necessary, and initializes any new symbols or actions to NoSymbol or NoAction, as appropriate. If the p_changes parameter is not NULL, .I XkbChangeTypesOfKey adds the XkbKeySymsMask to the changes field of .I p_changes and modifies the .I first_key_sym and .I num_key_syms fields of .I p_changes to include the .I key that was changed. See STRUCTURE for more information on the XkbMapChangesPtr structure. If successful, .I XkbChangeTypesOfKey returns Success. The .I n_groups parameter specifies the new number of groups for the key. The .I groups parameter is a mask specifying the groups for which new types are supplied and is a bitwise inclusive OR of the following masks: XkbGroup1Mask, XkbGroup2Mask, XkbGroup3Mask, and XkbGroup4Mask. The .I new_types_in parameter is an integer array of length .I n_groups. Each entry represents the type to use for the associated group and is an index into .I xkb->map->types. The .I new_types_in array is indexed by group index; if .I n_groups is four and .I groups only has Group1Mask and Group3Mask set, .I new_types_in looks like this: .nf new_types_in[0] = type for Group1 new_types_in[1] = ignored new_types_in[2] = type for Group3 new_types_in[3] = ignored .fi For convenience, Xkb provides the following constants to use as indices to the groups: .TS c s l l l l. Table 1 Group Index Constants _ Constant Name Value _ XkbGroup1Index 0 XkbGroup2Index 1 XkbGroup3Index 2 XkbGroup4Index 3 .TE If the Xkb extension has not been properly initialized, .I XkbChangeTypesOfKey returns BadAccess. If the .I xkb parameter it not valid (that is, it is NULL or it does not contain a valid client map), .I XkbChangeTypesOfKey returns BadMatch. If the .I key is not a valid keycode, .I n_groups is greater than XkbNumKbdGroups, or the .I groups mask does not contain any of the valid group mask bits, .I XkbChangeTypesOfKey returns BadValue. If it is necessary to resize the key symbols or key actions arrays and any allocation errors occur, .I XkbChangeTypesOfKey returns BadAlloc. .SH STRUCTURES .LP Use the XkbMapChangesRec structure to identify and track partial modifications to the mapping components and to reduce the amount of traffic between the server and clients. .nf typedef struct _XkbMapChanges { unsigned short changed; /\(** identifies valid components in structure */ KeyCode min_key_code; /\(** lowest numbered keycode for device */ KeyCode max_key_code; /\(** highest numbered keycode for device */ unsigned char first_type; /\(** index of first key type modified */ unsigned char num_types; /\(** # types modified */ KeyCode first_key_sym; /\(** first key whose key_sym_map changed */ unsigned char num_key_syms; /\(** # key_sym_map entries changed */ KeyCode first_key_act; /\(** first key whose key_acts entry changed */ unsigned char num_key_acts; /\(** # key_acts entries changed */ KeyCode first_key_behavior; /\(** first key whose behaviors changed */ unsigned char num_key_behaviors; /\(** # behaviors entries changed */ KeyCode first_key_explicit; /\(** first key whose explicit entry changed */ unsigned char num_key_explicit; /\(** # explicit entries changed */ KeyCode first_modmap_key; /\(** first key whose modmap entry changed */ unsigned char num_modmap_keys; /\(** # modmap entries changed */ KeyCode first_vmodmap_key; /\(** first key whose vmodmap changed */ unsigned char num_vmodmap_keys; /\(** # vmodmap entries changed */ unsigned char pad1; /\(** reserved */ unsigned short vmods; /\(** mask indicating which vmods changed */ } XkbMapChangesRec,*XkbMapChangesPtr; .fi .SH DIAGNOSTICS .TP 15 .B BadAccess The Xkb extension has not been properly initialized .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadMatch A compatible version of Xkb was not available in the server or an argument has correct type and range, but is otherwise invalid .TP 15 .B BadValue An argument is out of range libX11-1.6.3/man/xkb/XkbSelectEvents.man000064401431060000012000000145641247741723500201750ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbSelectEvents __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbSelectEvents \- Selects and / or deselects for delivery of one or more Xkb events and has them delivered under all conditions .SH SYNOPSIS .HP .B Bool XkbSelectEvents .BI "(\^Display *" "display" "\^," .BI "unsigned int " "device_spec" "\^," .BI "unsigned long int " "bits_to_change" "\^," .BI "unsigned long int " "values_for_bits" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I display connection to the X server .TP .I device_spec device ID, or XkbUseCoreKbd .TP .I bits_to_change determines events to be selected / deselected .TP .I values_for_bits 1=>select, 0->deselect; for events in bits_to_change .SH DESCRIPTION .LP Xkb events are selected using an event mask, much the same as normal core X events are selected. However, unlike selecting core X events, where you must specify the selection status (on or off) for all possible event types whenever you wish to change the selection criteria for any one event, Xkb allows you to restrict the specification to only the event types you wish to change. This means that you do not need to remember the event selection values for all possible types each time you want to change one of them. Many Xkb event types are generated under several different circumstances. When selecting to receive an Xkb event, you may specify either that you want it delivered under all circumstances, or that you want it delivered only for a subset of the possible circumstances. You can also deselect an event type that was previously selected for, using the same granularity. Xkb provides two functions to select and deselect delivery of Xkb events. .I XkbSelectEvents allows you to select or deselect delivery of more than one Xkb event type at once. Events selected using .I XkbSelectEvents are delivered to your program under all circumstances that generate the events. To restrict delivery of an event to a subset of the conditions under which it occurs, use .I XkbSelectEventDetails. XkbSelectEventDetails only allows you to change the selection conditions for a single event at a time, but it provides a means of fine-tuning the conditions under which the event is delivered. This request changes the Xkb event selection mask for the keyboard specified by .I device_spec. Each Xkb event that can be selected is represented by a bit in the .I bits_to_change and .I values_for_bits masks. Only the event selection bits specified by the .I bits_to_change parameter are affected; any unspecified bits are left unchanged. To turn on event selection for an event, set the bit for the event in the .I bits_to_change parameter and set the corresponding bit in the .I values_for_bits parameter. To turn off event selection for an event, set the bit for the event in the .I bits_to_change parameter and do not set the corresponding bit in the .I values_for_bits parameter. The valid values for both of these parameters are an inclusive bitwise OR of the masks shown in Table 1. There is no interface to return your client's current event selection mask. Clients cannot set other clients' event selection masks. The X server reports the events defined by Xkb to your client application only if you have requested them via a call to .I XkbSelectEvents or .I XkbSelectEventDetails. Specify the event types in which you are interested in a mask. Table 1 lists the event mask constants that can be specified with the .I XkbSelectEvents request and the circumstances in which the mask should be specified. .TS c s s l l l l l l. Table 1 XkbSelectEvents Mask Constants _ Event Mask Value Notification Wanted _ XkbNewKeyboardNotifyMask (1L<<0) Keyboard geometry change XkbMapNotifyMask (1L<<1) Keyboard mapping change XkbStateNotifyMask (1L<<2) Keyboard state change XkbControlsNotifyMask (1L<<3) Keyboard control change XkbIndicatorStateNotifyMask (1L<<4) Keyboard indicator state change XkbIndicatorMapNotifyMask (1L<<5) Keyboard indicator map change XkbNamesNotifyMask (1L<<6) Keyboard name change XkbCompatMapNotifyMask (1L<<7) Keyboard compat map change XkbBellNotifyMask (1L<<8) Bell XkbActionMessageMask (1L<<9) Action message XkbAccessXNotifyMask (1L<<10) AccessX features XkbExtensionDeviceNotifyMask (1L<<11) Extension device XkbAllEventsMask (0xFFF) All Xkb events .TE If a bit is not set in the .I bits_to_change parameter, but the corresponding bit is set in the .I values_for_bits parameter, a BadMatch protocol error results. If an undefined bit is set in either the .I bits_to_change or the .I values_for_bits parameter, a BadValue protocol error results. All event selection bits are initially zero for clients using the Xkb extension. Once you set some bits, they remain set for your client until you clear them via another call to .I XkbSelectEvents. .I XkbSelectEvents returns False if the Xkb extension has not been initilialized and True otherwise. .SH "RETURN VALUES" .TP 15 True The .I XkbSelectEvents function returns True if the Xkb extension has been initilialized. .TP 15 False The .I XkbSelectEvents function returns False if the Xkb extension has not been initilialized. .SH "SEE ALSO" .BR XkbSelectEventDetails (__libmansuffix__), .BR XkbUseCoreKbd (__libmansuffix__) libX11-1.6.3/man/xkb/XkbGetDeviceInfo.man000064401431060000012000000233311247741723500202340ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbGetDeviceInfo __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbGetDeviceInfo \- Determine whether the X server allows Xkb access to particular capabilities of input devices other than the core X keyboard, or to determine the status of indicator maps, indicator names or button actions on a non-KeyClass extension device .SH SYNOPSIS .HP .B XkbDeviceInfoPtr XkbGetDeviceInfo .BI "(\^Display *" "dpy" "\^," .BI "unsigned int " "which" "\^," .BI "unsigned int " "device_spec" "\^," .BI "unsigned int " "ind_class" "\^," .BI "unsigned int " "ind_id" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to X server .TP .I \- which mask indicating information to return .TP .I \- device_spec device ID, or XkbUseCoreKbd .TP .I \- ind_class feedback class for indicator requests .TP .I \- ind_id feedback ID for indicator requests .SH DESCRIPTION .LP To determine whether the X server allows Xkb access to particular capabilities of input devices other than the core X keyboard, or to determine the status of indicator maps, indicator names or button actions on a non-KeyClass extension device, use .I XkbGetDeviceInfo. .I XkbGetDeviceInfo returns information about the input device specified by .I device_spec. Unlike the .I device_spec parameter of most Xkb functions, .I device_spec does not need to be a keyboard device. It must, however, indicate either the core keyboard or a valid X Input Extension device. The .I which parameter is a mask specifying optional information to be returned. It is an inclusive OR of one or more of the values from Table 1 and causes the returned XkbDeviceInfoRec to contain values for the corresponding fields specified in the table. .nf Table 1 XkbDeviceInfoRec Mask Bits ____________________________________________________________________________________ Name XkbDeviceInfoRec Value Capability If Set Fields Effected ____________________________________________________________________________________ XkbXI_KeyboardsMask (1L <<0) Clients can use all Xkb requests and events with KeyClass devices supported by the input device extension. XkbXI_ButtonActionsMask num_btns (1L <<1) Clients can assign key btn_acts actions to buttons non-KeyClass input extension devices. XkbXI_IndicatorNamesMask leds->names (1L <<2) Clients can assign names to indicators on non-KeyClass input extension devices. XkbXI_IndicatorMapsMask leds->maps (1L <<3) Clients can assign indicator maps to indicators on non-KeyClass input extension devices. XkbXI_IndicatorStateMask leds->state (1L <<4) Clients can request the status of indicators on non-KeyClass input extension devices. XkbXI_IndicatorsMask sz_leds (0x1c) XkbXI_IndicatorNamesMask | num_leds XkbXI_IndicatorMapsMask | leds->* XkbXI_IndicatorStateMask XkbXI_UnsupportedFeaturesMask unsupported (1L <<15) XkbXI_AllDeviceFeaturesMask Those selected (0x1e) XkbXI_IndicatorsMask | by Value Column XkbSI_ButtonActionsMask masks XkbXI_AllFeaturesMask Those selected (0x1f) XkbSI_AllDeviceFeaturesMask | by Value Column XkbSI_KeyboardsMask masks XkbXI_AllDetailsMask Those selected (0x801f) XkbXI_AllFeaturesMask | by Value column XkbXI_UnsupportedFeaturesMask masks .fi The XkbDeviceInfoRec returned by .I XkbGetDeviceInfo always has values for .I name (may be a null string, ""), .I type, supported, unsupported, has_own_state, dflt_kbd_fd, and .I dflt_kbd_fb. Other fields are filled in as specified by .I which. Upon return, the .I supported field will be set to the inclusive OR of zero or more bits from Table 1; each bit set indicates an optional Xkb extension device feature supported by the server implementation, and a client may modify the associated behavior. If the XkbButtonActionsMask bit is set in .I which, the XkbDeviceInfoRec returned will have the button actions .I (btn_acts field) filled in for all buttons. If .I which includes one of the bits in XkbXI_IndicatorsMask, the feedback class of the indicators must be specified in .I ind_class, and the feedback ID of the indicators must be specified in .I ind_id. If the request does not include any of the bits in XkbXI_IndicatorsMask, the .I ind_class and .I ind_id parameters are ignored. The class and ID can be obtained via the input device extension .I XListInputDevices request. If any of the XkbXI_IndicatorsMask bits are set in .I which, the XkbDeviceInfoRec returned will have filled in the portions of the .I leds structure corresponding to the indicator feedback identified by .I ind_class and .I ind_id. The .I leds vector of the XkbDeviceInfoRec is allocated if necessary and .I sz_leds and .I num_leds filled in. The .I led_class, led_id and .I phys_indicators fields of the .I leds entry corresponding to .I ind_class and .I ind_id are always filled in. If .I which contains XkbXI_IndicatorNamesMask, the .I names_present and .I names fields of the .I leds structure corresponding to .I ind_class and .I ind_id are returned. If .I which contains XkbXI_IndicatorStateMask, the corresponding .I state field is updated. If .I which contains XkbXI_IndicatorMapsMask, the .I maps_present and .I maps fields are updated. Xkb provides convenience functions to request subsets of the information available via .I XkbGetDeviceInfo. These convenience functions mirror some of the mask bits. The functions all take an XkbDeviceInfoPtr as an input argument and operate on the X Input Extension device specified by the .I device_spec field of the structure. Only the parts of the structure indicated in the function description are updated. The XkbDeviceInfoRec structure used in the function call can be obtained by calling .I XkbGetDeviceInfo or can be allocated by calling .I XkbAllocDeviceInfo. .SH STRUCTURES .LP Information about X Input Extension devices is transferred between a client program and the Xkb extension in an XkbDeviceInfoRec structure: .nf typedef struct { char * name; /\(** name for device */ Atom type; /\(** name for class of devices */ unsigned short device_spec; /\(** device of interest */ Bool has_own_state; /\(** True=>this device has its own state */ unsigned short supported; /\(** bits indicating supported capabilities */ unsigned short unsupported; /\(** bits indicating unsupported capabilities */ unsigned short num_btns; /\(** number of entries in btn_acts */ XkbAction * btn_acts; /\(** button actions */ unsigned short sz_leds; /\(** total number of entries in LEDs vector */ unsigned short num_leds; /\(** number of valid entries in LEDs vector */ unsigned short dflt_kbd_fb; /\(** input extension ID of default (core kbd) indicator */ unsigned short dflt_led_fb; /\(** input extension ID of default indicator feedback */ XkbDeviceLedInfoPtr leds; /\(** LED descriptions */ } XkbDeviceInfoRec, *XkbDeviceInfoPtr; .fi .SH "SEE ALSO" .BR XkbAllocDeviceInfo (__libmansuffix__), .BR XListInputDevices (__libmansuffix__) ents can request the status of indicators on non-KeyClass input extension devices. XkbXI_IndicatorsMask sz_leds libX11-1.6.3/man/xkb/XkbGetKeyboardByName.man000064401431060000012000000330461247741723500210610ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbGetKeyboardByName __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbGetKeyboardByName \- Build a new keyboard description from a set of named components, and to optionally have the server use the resulting description to replace an active one .SH SYNOPSIS .HP .B XkbDescPtr XkbGetKeyboardByName .BI "(\^Display *" "dpy" "\^," .BI "unsigned int " "device_spec" "\^," .BI "XkbComponentNamesPtr " "names" "\^," .BI "unsigned int " "want" "\^," .BI "unsigned int " "need" "\^," .BI "Bool " "load" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to X server .TP .I \- device_spec device ID, or XkbUseCoreKbd .TP .I \- names names of components to fetch .TP .I \- want desired structures in returned record .TP .I \- need mandatory structures in returned record .TP .I \- load True => load into .I device_spec .SH DESCRIPTION .LP A client may request that the server fetch one or more components from its database and use those components to build a new server keyboard description. The new keyboard description may be built from scratch, or it may be built starting with the current keyboard description for a particular device. Once the keyboard description is built, all or part of it may be returned to the client. The parts returned to the client need not include all of the parts used to build the description. At the time it requests the server to build a new keyboard description, a client may also request that the server use the new description internally to replace the current keyboard description for a specific device, in which case the behavior of the device changes accordingly. To build a new keyboard description from a set of named components, and to optionally have the server use the resulting description to replace an active one, use .I XkbGetKeyboardByName. .I names contains a set of expressions describing the keyboard components the server should use to build the new keyboard description. .I want and .I need are bit fields describing the parts of the resulting keyboard description that should be present in the returned XkbDescRec. The individual fields in .I names are .I component expressions composed of keyboard component names (no wildcarding as may be used in .I XkbListComponents), the special component name symbol `%', and the special operator characters `+' and `|'. A component expression is parsed left to right, as follows: .IP \(bu 5 The special component name "computed" may be used in keycodes component expressions and refers to a component consisting of a set of keycodes computed automatically by the server as needed. .IP \(bu 5 The special component name "canonical" may be used in types component expressions and refers to a partial component defining the four standard key types: ALPHABETIC, ONE_LEVEL, TWO_LEVEL, and KEYPAD. .IP \(bu 5 The special component name `%' refers to the keyboard description for the device specified in device_spec or the keymap names component. If a keymap names component is specified that does not begin with `+' or `|' and does not contain `%', then `%' refers to the description generated by the keymap names component. Otherwise, it refers to the keyboard description for device_spec. .IP \(bu 5 The `+' operator specifies that the following component should override the currently assembled description; any definitions that are present in both components are taken from the second. .IP \(bu 5 The `|' operator specifies that the next specified component should augment the currently assembled description; any definitions that are present in both components are taken from the first. .IP \(bu 5 If the component expression begins with an operator, a leading `%' is implied. .IP \(bu 5 If any unknown or illegal characters appear anywhere in the expression, the entire expression is invalid and is ignored. For example, if .I names->symbols contained the expression "+de", it specifies that the default member of the "de" class of symbols should be applied to the current keyboard mapping, overriding any existing definitions (it could also be written "+de(default)"). Here is a slightly more involved example: the expression "acme(ascii)+de(basic)|iso9995-3" constructs a German (de) mapping for the ASCII keyboard supplied by the "acme" vendor. The new definition begins with the symbols for the ASCII keyboard for Acme .I (acme(ascii)), overrides them with definitions for the basic German keyboard .I (de(basic)), and then applies the definitions from the default iso9995-3 keyboard .I (iso9995-3) to any undefined keys or groups of keys (part three of the iso9995 standard defines a common set of bindings for the secondary group, but allows national layouts to override those definitions where necessary). .B NOTE The interpretation of the above expression components (acme, ascii, de, basic, iso9995-3) is not defined by Xkb; only the operations and their ordering are. Note that the presence of a keymap .I names component that does not contain `%' (either explicit or implied by virtue of an expression starting with an operator) indicates a description that is independent of the keyboard description for the device specified in .I device_spec. The same is true of requests in which the keymap names component is empty and all five other names components contain expressions void of references to `%'. Requests of this form allow you to deal with keyboard definitions independent of any actual device. The server parses all non-NULL fields in .I names and uses them to build a keyboard description. However, before parsing the expressions in .I names, the server ORs the bits in .I want and .I need together and examines the result in relationship to the expressions in .I names. Table 1 identifies the components that are required for each of the possible bits in .I want or .I need. If a required component has not been specified in the .I names structure (the corresponding field is NULL), the server substitutes the expression "%", resulting in the component values being taken from .I device_spec. In addition, if .I load is True, the server modifies .I names if necessary (again using a "%" entry) to ensure all of the following fields are non-NULL: .I types, keycodes, symbols, and .I compat. .bp .TS c s s l l l. Table 1 Want and Need Mask Bits and Required Names Components _ want or need mask bit Required names Components value _ XkbGBN_TypesMask Types (1L<<0) XkbGBN_CompatMapMask Compat (1L<<1) XkbGBN_ClientSymbolsMask Types + Symbols + Keycodes (1L<<2) XkbGBN_ServerSymbolsMask Types + Symbols + Keycodes (1L<<3) XkbGBN_SymbolsMask Symbols (1L<<1) XkbGBN_IndicatorMapMask Compat (1L<<4) XkbGBN_KeyNamesMask Keycodes (1L<<5) XkbGBN_GeometryMask Geometry (1L<<6) XkbGBN_OtherNamesMask Types + Symbols + Keycodes + Compat + Geometry (1L<<7) XkbGBN_AllComponentsMask (0xff) .TE .I need specifies a set of keyboard components that the server must be able to resolve in order for .I XkbGetKeyboardByName to succeed; if any of the components specified in .I need cannot be successfully resolved, .I XkbGetKeyboardByName fails. .I want specifies a set of keyboard components that the server should attempt to resolve, but that are not mandatory. If the server is unable to resolve any of these components, .I XkbGetKeyboardByName still succeeds. Bits specified in .I want that are also specified in .I need have no effect in the context of .I want. If .I load is True, the server updates its keyboard description for .I device_spec to match the result of the keyboard description just built. If load is False, the server's description for device .I device_spec is not updated. In all cases, the parts specified by .I want and .I need from the just-built keyboard description are returned. The .I names structure in an XkbDescRec keyboard description record contains one field for each of the five component types used to build a keyboard description. When a keyboard description is built from a set of database components, the corresponding fields in this .I names structure are set to match the expressions used to build the component. Building a New Keyboard Description from the Server Database The information returned to the client in the XkbDescRec is essentially the result of a series of calls to extract information from a fictitious device whose description matches the one just built. The calls corresponding to each of the mask bits are summarized in Table 2, together with the XkbDescRec components that are filled in. .TS c s s l l l. Table 2 XkbDescRec Components Returned for Values of Want & Needs _ Request (want+need) Fills in Xkb components Equivalent Function Call _ XkbGBN_TypesMask map.types XkbGetUpdatedMap(dpy, XkbTypesMask, Xkb) XkbGBN_ServerSymbolsMask server XkbGetUpdatedMap(dpy, XkbAllClientInfoMask, Xkb) XkbGBN_ClientSymbolsMask map, including map.types XkbGetUpdatedMap(dpy, XkbAllServerInfoMask, Xkb) XkbGBN_IndicatorMaps indicators XkbGetIndicatorMap(dpy, XkbAllIndicators, Xkb) XkbGBN_CompatMapMask compat XkbGetCompatMap(dpy, XkbAllCompatMask, Xkb) XkbGBN_GeometryMask geom XkbGetGeometry(dpy, Xkb) XkbGBN_KeyNamesMask names.keys XkbGetNames(dpy, XkbKeyNamesMask | names.key_aliases XkbKeyAliasesMask, Xkb) XkbGBN_OtherNamesMask names.keycodes XkbGetNames(dpy, XkbAllNamesMask & names.geometry ~(XkbKeyNamesMask | XkbKeyAliasesMask), names.symbols Xkb) names.types map.types[*].lvl_names[*] names.compat names.vmods names.indicators names.groups names.radio_groups names.phys_symbols .TE There is no way to determine which components specified in .I want (but not in .I need) were actually fetched, other than breaking the call into successive calls to .I XkbGetKeyboardByName and specifying individual components. .I XkbGetKeyboardByName always sets .I min_key_code and .I max_key_code in the returned XkbDescRec structure. .I XkbGetKeyboardByName is synchronous; it sends the request to the server to build a new keyboard description and waits for the reply. If successful, the return value is non-NULL. .I XkbGetKeyboardByName generates a BadMatch protocol error if errors are encountered when building the keyboard description. .SH STRUCTURES .LP The complete description of an Xkb keyboard is given by an XkbDescRec. The component structures in the XkbDescRec represent the major Xkb components outlined in Figure 1.1. .nf typedef struct { struct _XDisplay * display; /\(** connection to X server */ unsigned short flags; /\(** private to Xkb, do not modify */ unsigned short device_spec; /\(** device of interest */ KeyCode min_key_code; /\(** minimum keycode for device */ KeyCode max_key_code; /\(** maximum keycode for device */ XkbControlsPtr ctrls; /\(** controls */ XkbServerMapPtr server; /\(** server keymap */ XkbClientMapPtr map; /\(** client keymap */ XkbIndicatorPtr indicators; /\(** indicator map */ XkbNamesPtr names; /\(** names for all components */ XkbCompatMapPtr compat; /\(** compatibility map */ XkbGeometryPtr geom; /\(** physical geometry of keyboard */ } XkbDescRec, *XkbDescPtr; .fi The .I display field points to an X display structure. The .I flags field is private to the library: modifying .I flags may yield unpredictable results. The .I device_spec field specifies the device identifier of the keyboard input device, or XkbUseCoreKeyboard, which specifies the core keyboard device. The .I min_key_code and .I max_key_code fields specify the least and greatest keycode that can be returned by the keyboard. Each structure component has a corresponding mask bit that is used in function calls to indicate that the structure should be manipulated in some manner, such as allocating it or freeing it. These masks and their relationships to the fields in the XkbDescRec are shown in Table 3. .TS c s s l l l l l l. Table 3 Mask Bits for XkbDescRec _ Mask Bit XkbDescRec Field Value _ XkbControlsMask ctrls (1L<<0) XkbServerMapMask server (1L<<1) XkbIClientMapMask map (1L<<2) XkbIndicatorMapMask indicators (1L<<3) XkbNamesMask names (1L<<4) XkbCompatMapMask compat (1L<<5) XkbGeometryMask geom (1L<<6) XkbAllComponentsMask All Fields (0x7f) .TE .SH DIAGNOSTICS .TP 15 .B BadMatch A compatible version of Xkb was not available in the server or an argument has correct type and range, but is otherwise invalid .SH "SEE ALSO" .BR XkbListComponents (__libmansuffix__) libX11-1.6.3/man/xkb/XkbKeyTypeIndex.man000064401431060000012000000034251247741723500201450ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbKeyTypeIndex __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbKeyTypeIndex \- Obtain the index of a key type or the pointer to a key type .SH SYNOPSIS .HP .B int XkbKeyTypeIndex .BI "(\^XkbDescPtr " "xkb" "\^," .BI "KeyCode " "keycode" "\^," .BI "int " "group" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb Xkb description of interest .TP .I \- keycode keycode of interest .TP .I \- group group index .SH DESCRIPTION .LP .I XkbKeyTypeIndex computes an index into the .I types vector of the client map in .I xkb from the given .I keycode and .I group index. libX11-1.6.3/man/xkb/XkbGetAutoResetControls.man000064401431060000012000000066731247741723500216720ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbGetAutoResetControls __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbGetAutoResetControls \- Gets the current values of the auto-reset controls .SH SYNOPSIS .HP .B Bool XkbGetAutoResetControls .BI "(\^Display *" "dpy" "\^," .BI "unsigned int *" "auto_ctrls" "\^," .BI "unsigned int *" "auto_values" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to X server .TP .I \- auto_ctrls specifies which bits in auto_values are relevant .TP .I \- auto_values 1 bit => corresponding control has auto-reset on .SH DESCRIPTION .LP You can configure the boolean controls to automatically be enabled or disabled when a program exits. This capability is controlled via two masks maintained in the X server on a per-client basis. There is no client-side Xkb data structure corresponding to these masks. Whenever the client exits for any reason, any boolean controls specified in the .I auto-reset mask are set to the corresponding value from the .I auto-reset values mask. This makes it possible for clients to "clean up after themselves" automatically, even if abnormally terminated. The bits used in the masks correspond to the EnabledControls control bits. For example, a client that replaces the keyboard bell with some other audible cue might want to turn off the AudibleBell control to prevent the server from also generating a sound and avoid cacophony. If the client were to exit without resetting the AudibleBell control, the user would be left without any feedback at all. Setting AudibleBell in both the auto-reset mask and auto-reset values guarantees that the audible bell will be turned back on when the client exits. .I XkbGetAutoResetControls backfills .I auto_ctrls and .I auto_values with the AutoReset control attributes for this particular client. It returns True if successful, and False otherwise. .SH "RETURN VALUES" .TP 15 True The .I XkbGetAutoResetControls function returns True when it successfully backfills .I auto_ctrls and .I auto_values with the AutoReset control attributes for this particular client. .TP 15 False The .I XkbGetAutoResetControls function returns False when it does not successfully backfill .I auto_ctrls and .I auto_values with the AutoReset control attributes for this particular client. libX11-1.6.3/man/xkb/XkbGetCompatMap.man000064401431060000012000000074431247741723500201100ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbGetCompatMap __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbGetCompatMap \- Fetch any combination of the current compatibility map components from the server .SH SYNOPSIS .HP .B Status XkbGetCompatMap .BI "(\^Display *" "display" "\^," .BI "unsigned int " "which" "\^," .BI "XkbDescRec *" "xkb" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- display connection to server .TP .I \- which mask of compatibility map components to fetch .TP .I \- xkb keyboard description where results placed .SH DESCRIPTION .LP When another client modifies the compatibility map, you are notified if you have selected for XkbCompatMapNotify events. .I XkbGetCompatMap is particularly useful when you receive an event of this type, as it allows you to update your program's version of the compatibility map to match the modified version now in the server. If your program is dealing with multiple servers and needs to configure them all in a similar manner, the updated compatibility map may be used to reconfigure other servers. .I XkbGetCompatMap fetches the components of the compatibility map specified in .I which from the server specified by .I display and places them in the .I compat structure of the keyboard description .I xkb. Valid values for .I which are an inclusive OR of the values shown in Table 1. .TS c s s l l l l l l. Table 1 Compatibility Map Component Masks _ Mask Value Affecting _ XkbSymInterpMask (1<<0) Symbol interpretations XkbGroupCompatMask (1<<1) Group maps XkbAllCompatMask (0x3) All compatibility map components .TE If no compatibility map structure is allocated in .I xkb upon entry, .I XkbGetCompatMap allocates one. If one already exists, its contents are overwritten with the returned results. .I XkbGetCompatMap fetches compatibility map information for the device specified by the .I device_spec field of .I xkb. Unless you have specifically modified this field, it is the default keyboard device. .I XkbGetCompatMap returns Success if successful, BadAlloc if it is unable to obtain necessary storage for either the return values or work space, BadMatch if the .I dpy field of the .I xkb argument is non-NULL and does not match the .I display argument, and BadLength under certain conditions caused by server or Xkb implementation errors. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadLength The length of a request is shorter or longer than that required to minimally contain the arguments .TP 15 .B BadMatch A compatible version of Xkb was not available in the server or an argument has correct type and range, but is otherwise invalid ng 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 tlibX11-1.6.3/man/xkb/XkbComputeSectionBounds.man000064401431060000012000000040271247741723500216760ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbComputeSectionBounds __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbComputeSectionBounds \- Update the bounding box of a section .SH SYNOPSIS .HP .B Bool XkbComputeSectionBounds .BI "(\^XkbGeometryPtr " "geom" "\^," .BI "XkbSectionPtr " "section" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- geom geometry that contains the section .TP .I \- section section to be examined and updated .SH DESCRIPTION .LP If you add or delete a row to or from a section, or if you change the geometry of any of the rows in that section, you may need to update the bounding box for that section. .I XkbComputeSectionBounds examines all the rows of the .I section and updates the bounding box of that section so that it contains all rows. .I XkbComputeSectionBounds returns False if any of the arguments is NULL; otherwise, it returns True. libX11-1.6.3/man/xkb/XkbSetDebuggingFlags.man000064401431060000012000000114211247741723500211020ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbSetDebuggingFlags __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbSetDebuggingFlags \- Change the values of any of the debug controls .SH SYNOPSIS .HP .B Bool XkbSetDebuggingFlags .BI "(\^Display *" "display" "\^," .BI "unsigned int " "mask" "\^," .BI "unsigned int " "flags" "\^," .BI "char *" "msg" "\^," .BI "unsigned int " "ctrls_mask" "\^," .BI "unsigned int " "ctrls" "\^," .BI "unsigned int *" "ret_flags" "\^," .BI "unsigned int *" "ret_ctrls" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- display connection to X server .TP .I \- mask mask selecting debug output flags to change .TP .I \- flags values for debug output flags selected by mask .TP .I \- msg message to print right now .TP .I \- ctrls_mask mask selecting debug controls to change .TP .I \- ctrls values for debug controls selected by ctrls_mask .TP .I \- ret_flags resulting state of all debug output flags .TP .I \- ret_ctrls resulting state of all debug controls .SH DESCRIPTION .LP The debugging aids are intended for use primarily by Xkb implementors and are optional in any implementation. There are two bitmasks that may be used to control debugging. One bitmask controls the output of debugging information, and the other controls behavior. Both bitmasks are initially all zeros. To change the values of any of the debug controls, use .I XkbSetDebuggingFlags. .I XkbSetDebuggingFlags modifies the debug output flags as specified by .I mask and flags, modifies the debug controls flags as specified by .I ctrls_mask and ctrls, prints the message .I msg, and backfills .I ret_flags and .I ret_ctrls with the resulting debug output and debug controls flags. When bits are set in the debug output masks, .I mask and .I flags, Xkb prints debug information corresponding to each bit at appropriate points during its processing. The device to which the output is written is implementation-dependent, but is normally the same device to which X server error messages are directed; thus the bits that can be set in .I mask and .I flags is implementation-specific. To turn on a debug output selection, set the bit for the output in the .I mask parameter and set the corresponding bit in the .I flags parameter. To turn off event selection for an event, set the bit for the output in the .I mask parameter and do not set the corresponding bit in the .I flags parameter. When bits are set in the debug controls masks, .I ctrls_mask and .I ctrls, Xkb modifies its behavior according to each controls bit. .I ctrls_mask and ctrls are related in the same way that .I mask and .I flags are. The valid controls bits are defined in Table 1. .TS c s s l l l. Table 1 Debug Control Masks _ Debug Control Mask Value Meaning _ XkbDF_DisableLocks (1 << 0) Disable actions that lock modifiers .TE .I XkbSetDebuggingFlags returns True if successful and False otherwise. The only protocol error it may generate is BadAlloc, if for some reason it is unable to allocate storage. .I XkbSetDebuggingFlags is intended for developer use and may be disabled in production X servers. If it is disabled, .I XkbSetDebuggingFlags has no effect and does not generate any protocol errors. The message in .I msg is written immediately. The device to which it is written is implementation dependent but is normally the same device where X server error messages are directed. .SH "RETURN VALUES" .TP 15 True The .I XkbSetDebuggingFlags function returns True when successful. .TP 15 False The .I XkbSetDebuggingFlags function returns False when not successful. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage libX11-1.6.3/man/xkb/XkbAllocGeomColors.man000064401431060000012000000051551247741723500206110ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAllocGeomColors __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAllocGeomColors \- Allocate geometry colors .SH SYNOPSIS .HP .B Status XkbAllocGeomColors .BI "(\^XkbGeometryPtr " "geom" "\^," .BI "int " "num_needed" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- geom geometry for which colors should be allocated .TP .I \- num_needed number of new colors required .SH DESCRIPTION .LP Xkb provides a number of functions to allocate and free subcomponents of a keyboard geometry. Use these functions to create or modify keyboard geometries. Note that these functions merely allocate space for the new element(s), and it is up to you to fill in the values explicitly in your code. These allocation functions increase .I sz_* but never touch .I num_* (unless there is an allocation failure, in which case they reset both .I sz_* and .I num_* to zero). These functions return Success if they succeed, BadAlloc if they are not able to allocate space, or BadValue if a parameter is not as expected. .I XkbAllocGeomColors allocates space for .I num_needed colors and adds them to the specified geometry .I geom. A color name is a string whose interpretation is not specified by Xkb. All other geometry data structures refer to colors using their indices in this global list or pointers to colors in this list. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadValue An argument is out of range libX11-1.6.3/man/xkb/XkbChangeEnabledControls.man000064401431060000012000000160001247741723500217400ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbChangeEnabledControls __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbChangeEnabledControls \- Manipulates the EnabledControls control .SH SYNOPSIS .HP .B Bool XkbChangeEnabledControls .BI "(\^Display *" "dpy" "\^," .BI "unsigned int " "device_spec" "\^," .BI "unsigned int " "mask" "\^," .BI "unsigned int " "values" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to X server .TP .I \- device_spec keyboard device to modify .TP .I \- mask 1 bit -> controls to enable / disable .TP .I \- values 1 bit => enable, 0 bit => disable .SH DESCRIPTION .LP The EnabledControls control is a bit mask where each bit that is turned on means the corresponding control is enabled, and when turned off, disabled. It corresponds to the .I enabled_ctrls field of an XkbControlsRec structure (see STRUCTURES). The bits describing which controls are turned on or off are defined in Table 1. Table 1 shows the actual values for the individual mask bits used to select controls for modification and to enable and disable the control. Note that the same mask bit is used to specify general modifications to the parameters used to configure the control (which), and to enable and disable the control (enabled_ctrls). The anomalies in the table (no "ok" in column) are for controls that have no configurable attributes; and for controls that are not boolean controls and therefore cannot be enabled or disabled. .bp .TS c s s s l l l l l l l l l l l l. Table 1 Controls Mask Bits _ Mask Bit which or enabled Value changed_ctrls _ctrls _ XkbRepeatKeysMask ok ok (1L<<0) XkbSlowKeysMask ok ok (1L<<1) XkbBounceKeysMask ok ok (1L<<2) XkbStickyKeysMask ok ok (1L<<3) XkbMouseKeysMask ok ok (1L<<4) XkbMouseKeysAccelMask ok ok (1L<<5) XkbAccessXKeysMask ok ok (1L<<6) XkbAccessXTimeoutMask ok ok (1L<<7) XkbAccessXFeedbackMask ok ok (1L<<8) XkbAudibleBellMask ok (1L<<9) XkbOverlay1Mask ok (1L<<10) XkbOverlay2Mask ok (1L<<11) XkbIgnoreGroupLockMask ok (1L<<12) XkbGroupsWrapMask ok (1L<<27) XkbInternalModsMask ok (1L<<28) XkbIgnoreLockModsMask ok (1L<<29) XkbPerKeyRepeatMask ok (1L<<30) XkbControlsEnabledMask ok (1L<<31) XkbAccessXOptionsMask ok ok (XkbStickyKeysMask | XkbAccessXFeedbackMask) XkbAllBooleanCtrlsMask ok (0x00001FFF) XkbAllControlsMask ok (0xF8001FFF) .TE The .I mask parameter specifies the boolean controls to be enabled or disabled, and the .I values mask specifies the new state for those controls. Valid values for both of these masks are composed of a bitwise inclusive OR of bits taken from the set of mask bits in Table 1, using only those masks with "ok" in the .I enabled_ctrls column. If the X server does not support a compatible version of Xkb or the Xkb extension has not been properly initialized, .I XkbChangeEnabledControls returns False; otherwise, it sends the request to the X server and returns True. Note that the EnabledControls control only enables and disables controls; it does not configure them. Some controls, such as the AudibleBell control, have no configuration attributes and are therefore manipulated solely by enabling and disabling them. Others, however, have additional attributes to configure their behavior. For example, the RepeatControl control uses .I repeat_delay and .I repeat_interval fields to describe the timing behavior of keys that repeat. The RepeatControl behavior is turned on or off depending on the value of the XkbRepeatKeysMask bit, but you must use other means, as described in this chapter, to configure its behavior in detail. .SH "RETURN VALUES" .TP 15 True The X server supports a compatible version of Xkb. .TP 15 False The X server does not support a compatible version of Xkb or the Xkb extension has not been properly initialized. .SH STRUCTURES .LP .nf The XkbControlsRec structure is defined as follows: #define XkbMaxLegalKeyCode 255 #define XkbPerKeyBitArraySize ((XkbMaxLegalKeyCode+1)/8) typedef struct { unsigned char mk_dflt_btn; /\(** default button for keyboard driven mouse */ unsigned char num_groups; /\(** number of keyboard groups */ unsigned char groups_wrap; /\(** how to wrap out-of-bounds groups */ XkbModsRec internal; /\(** defines server internal modifiers */ XkbModsRec ignore_lock; /\(** modifiers to ignore when checking for grab */ unsigned int enabled_ctrls; /\(** 1 bit => corresponding boolean control enabled */ unsigned short repeat_delay; /\(** ms delay until first repeat */ unsigned short repeat_interval; /\(** ms delay between repeats */ unsigned short slow_keys_delay; /\(** ms minimum time key must be down to be ok */ unsigned short debounce_delay; /\(** ms delay before key reactivated */ unsigned short mk_delay; /\(** ms delay to second mouse motion event */ unsigned short mk_interval; /\(** ms delay between repeat mouse events */ unsigned short mk_time_to_max; /\(** # intervals until constant mouse move */ unsigned short mk_max_speed; /\(** multiplier for maximum mouse speed */ short mk_curve; /\(** determines mouse move curve type */ unsigned short ax_options; /\(** 1 bit => Access X option enabled */ unsigned short ax_timeout; /\(** seconds until Access X disabled */ unsigned short axt_opts_mask; /\(** 1 bit => options to reset on Access X timeout */ unsigned short axt_opts_values; /\(** 1 bit => turn option on, 0=> off */ unsigned int axt_ctrls_mask; /\(** which bits in enabled_ctrls to modify */ unsigned int axt_ctrls_values; /\(** values for new bits in enabled_ctrls */ unsigned char per_key_repeat[XkbPerKeyBitArraySize]; /\(** per key auto repeat */ } XkbControlsRec, *XkbControlsPtr; .fi libX11-1.6.3/man/xkb/XkbLatchModifiers.man000064401431060000012000000054711247741723500204630ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbLatchModifiers __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbLatchModifiers \- Latches and unlatches any of the eight real keyboard modifiers .SH SYNOPSIS .HP .B Bool XkbLatchModifiers .BI "(\^Display *" "display" "\^," .BI "unsigned int " "device_spec" "\^," .BI "unsigned int " "affect" "\^," .BI "unsigned int " "values" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I display connection to the X server .TP .I device_spec device ID, or XkbUseCoreKbd .TP .I affect mask of real modifiers whose lock state is to change .TP .I values 1 => lock, 0 => unlock; only for modifiers selected by affect .SH DESCRIPTION .LP .I XkbLatchModifiers sends a request to the server to latch the real modifiers selected by both .I affect and .I values and to unlatch the real modifiers selected by .I affect , but not selected by .I values. .I XkbLatchModifiers does not wait for a reply from the server. It returns True if the request was sent, and False otherwise. The functions in this section that change the use of modifiers use a mask in the parameter affect. It is a bitwise inclusive OR of the legal modifier masks: .TS c l l. Table 1 Real Modifier Masks _ Mask _ ShiftMask LockMask ControlMask Mod1Mask Mod2Mask Mod3Mask Mod4Mask Mod5Mask .TE .SH "RETURN VALUES" .TP 15 True The .I XkbLatchModifiers function returns True if a request was sent to the server to latch the real modifiers selected by both .I affect and .I values and to unlatch the real modifiers selected by .I affect , but not selected by .I values. .TP 15 False The .I XkbLatchModifiers function returns False if the request was not sent. libX11-1.6.3/man/xkb/XkbListComponents.man000064401431060000012000000167061247741723500205520ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbListComponents __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbListComponents \- List of components for one or more component types .SH SYNOPSIS .HP .B XkbComponentListPtr XkbListComponents .BI "(\^Display *" "dpy" "\^," .BI "unsigned int " "device_spec" "\^," .BI "XkbComponentNamesPtr " "ptrns" "\^," .BI "int *" "max_inout" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to X server .TP .I \- device_spec device ID, or XkbUseCoreKbd .TP .I \- ptrns namelist for components of interest .TP .I \- max_inout max # returned names, # left over .SH DESCRIPTION .LP You may ask the server for a list of components for one or more component types. The request takes the form of a set of patterns, one pattern for each of the component types, including a pattern for the complete keyboard description. To obtain this list, use .I XkbListComponents. .I XkbListComponents queries the server for a list of component names matching the patterns specified in .I ptrns. It waits for a reply and returns the matching component names in an XkbComponentListRec structure. When you are done using the structure, you should free it using .I XkbFreeComponentList. device_spec indicates a particular device in which the caller is interested. A server is allowed (but not required) to restrict its reply to portions of the database that are relevant for that particular device. .I ptrns is a pointer to an XkbComponentNamesRec. Each of the fields in .I ptrns contains a pattern naming the components of interest. Each of the patterns is composed of characters from the ISO Latin1 encoding, but can contain only parentheses, the wildcard characters `?' and `*', and characters permitted in a component class or member name. A pattern may be NULL, in which case no components for that type is returned. Pattern matches with component names are case sensitive. The `?' wildcard matches any single character, except a left or right parenthesis; the `*' wildcard matches any number of characters, except a left or right parenthesis. If an implementation allows additional characters in a component class or member name other than those required by the Xkb extension, the result of comparing one of the additional characters to either of the wildcard characters is implementation-dependent. If a pattern contains illegal characters, the illegal characters are ignored. The matching process is carried out as if the illegal characters were omitted from the pattern. .I max_inout is used to throttle the amount of data passed to and from the server. On input, it specifies the maximum number of names to be returned (the total number of names in all component categories). Upon return from .I XkbListComponents, max_inout contains the number of names that matched the request but were not returned because of the limit. .B Component Names Component names have the form .I "class(member)" where .I class describes a subset of the available components for a particular type and the optional .I member identifies a specific component from that subset. For example, the name "atlantis(acme)" for a symbols component might specify the symbols used for the atlantis national keyboard layout by the vendor "acme." Each class has an optional .I default member - references that specify a class but not a member refer to the default member of the class, if one exists. Xkb places no constraints on the interpretation of the class and member names used in component names. The .I class and .I member names are both specified using characters from the Latin-1 character set. Xkb implementations must accept all alphanumeric characters, minus (`-') and underscore (`_') in class or member names, and must not accept parentheses, plus, vertical bar, percent sign, asterisk, question mark, or white space. The use of other characters is implementation-dependent. .SH STRUCTURES .LP The component name patterns used to describe the request are passed to .I XkbListComponents using an XkbComponentNamesRec structure. This structure has no special allocation constraints or interrelationships with other structures; allocate and free this structure using standard .I malloc and .I free calls or their equivalent: .nf typedef struct _XkbComponentNames { char * keymap; /\(** keymap names */ char * keycodes; /\(** keycode names */ char * types; /\(** type names */ char * compat; /\(** compatibility map names */ char * symbols; /\(** symbol names */ char * geometry; /\(** geometry names */ } XkbComponentNamesRec, *XkbComponentNamesPtr; .fi .I XkbListComponents returns a pointer to an XkbComponentListRec: .nf typedef struct _XkbComponentList { int num_keymaps; /\(** number of entries in keymap */ int num_keycodes; /\(** number of entries in keycodes */ int num_types; /\(** number of entries in types */ int num_compat; /\(** number of entries in compat */ int num_symbols; /\(** number of entries in symbols */ int num_geometry; /\(** number of entries in geometry; XkbComponentNamePtr keymap; /\(** keymap names */ XkbComponentNamePtr keycodes; /\(** keycode names */ XkbComponentNamePtr types; /\(** type names */ XkbComponentNamePtr compat; /\(** compatibility map names */ XkbComponentNamePtr symbols; /\(** symbol names */ XkbComponentNamePtr geometry; /\(** geometry names */ } XkbComponentListRec, *XkbComponentListPtr; typedef struct _XkbComponentName { unsigned short flags; /\(** hints regarding component name */ char * name; /\(** name of component */ } XkbComponentNameRec, *XkbComponentNamePtr; .fi .SH "SEE ALSO" .BR XkbFreeComponentList (__libmansuffix__) .SH NOTES .LP Note that the structure used to specify patterns on input is an XkbComponentNamesRec, and that used to hold the individual component names upon return is an XkbComponentNameRec (no trailing `s' in Name). spec" "\^," .BI "XkbComponentNamesPtr " "ptrns" "\^," .BI libX11-1.6.3/man/xkb/XkbResizeKeyType.man000064401431060000012000000073261247741723500203430ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbResizeKeyType __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbResizeKeyType \- Change the number of levels in a key type .SH SYNOPSIS .HP .B Status XkbResizeKeyType .BI "(\^XkbDescPtr " "xkb" "\^," .BI "int " "type_ndx" "\^," .BI "int " "map_count" "\^," .BI "Bool " "want_preserve" "\^," .BI "int " "new_num_lvls" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb keyboard description containing client map to update .TP .I \- type_ndx index in xkb->map->types of type to change .TP .I \- map_count total # of map entries needed for the type .TP .I \- want_preserve True => list of preserved modifiers is necessary .TP .I \- new_num_lvls new max # of levels for type .SH DESCRIPTION .LP .I XkbResizeKeyType changes the type specified by .I xkb->map->types[type_ndx], and reallocates the symbols and actions bound to all keys that use the type, if necessary. .I XkbResizeKeyType updates only the local copy of the types in .I xkb; to update the server's copy for the physical device, use .I XkbSetMap or .I XkbChangeMap after calling .I XkbResizeKeyType. The .I map_count parameter specifies the total number of map entries needed for the type, and can be zero or greater. If .I map_count is zero, .I XkbResizeKeyType frees the existing .I map and .I preserve entries for the type if they exist and sets them to NULL. The .I want_preserve parameter specifies whether a .I preserve list for the key should be created. If .I want_preserve is True, the .I preserve list with .I map_count entries is allocated or reallocated if it already exists. Otherwise, if .I want_preserve is False, the .I preserve field is freed if necessary and set to NULL. The .I new_num_lvls parameter specifies the new maximum number of shift levels for the type and is used to calculate and resize the symbols and actions bound to all keys that use the type. If .I type_ndx does not specify a legal type, .I new_num_lvls is less than 1, or the .I map_count is less than zero, .I XkbResizeKeyType returns BadValue. If .I XkbResizeKeyType encounters any problems with allocation, it returns BadAlloc. Otherwise, it returns Success. .SH "RETURN VALUES" .TP 15 Success The .I XkbResizeKeyType function returns Success if .I type_ndx specifies a legal type, .I new_num_lvls is greater than zero and .I map_count is positive. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadValue An argument is out of range .SH "SEE ALSO" .BR XkbChangeMap (__libmansuffix__), .BR XkbSetMap (__libmansuffix__) libX11-1.6.3/man/xkb/XkbKeyNumActions.man000064401431060000012000000106671247741723500203220ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbKeyNumActions __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbKeyNumActions \- Computes the number of actions associated with the key corresponding to keycode .SH SYNOPSIS .HP .B int XkbKeyNumActions .BI "(\^XkbDescPtr " "xkb" "\^," .BI "KeyCode " "keycode" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb Xkb description of interest .TP .I \- keycode keycode of interest .SH DESCRIPTION .LP A key action defines the effect key presses and releases have on the internal state of the server. For example, the expected key action associated with pressing the Shift key is to set the Shift modifier. There is zero or one key action associated with each keysym bound to each key. Just as the entire list of key symbols for the keyboard mapping is held in the .I syms field of the client map, the entire list of key actions for the keyboard mapping is held in the .I acts array of the server map. The total size of .I acts is specified by .I size_acts, and the number of entries is specified by .I num_acts. The .I key_acts array, indexed by keycode, describes the actions associated with a key. The .I key_acts array has .I min_key_code unused entries at the start to allow direct indexing using a keycode. If a .I key_acts entry is zero, it means the key does not have any actions associated with it. If an entry is not zero, the entry represents an index into the .I acts field of the server map, much as the .I offset field of a KeySymMapRec structure is an index into the .I syms field of the client map. The reason the .I acts field is a linear list of XkbActions is to reduce the memory consumption associated with a keymap. Because Xkb allows individual keys to have multiple shift levels and a different number of groups per key, a single two-dimensional array of KeySyms would potentially be very large and sparse. Instead, Xkb provides a small two-dimensional array of XkbActions for each key. To store all of these individual arrays, Xkb concatenates each array together in the .I acts field of the server map. The key action structures consist only of fields of type char or unsigned char. This is done to optimize data transfer when the server sends bytes over the wire. If the fields are anything but bytes, the server has to sift through all of the actions and swap any nonbyte fields. Because they consist of nothing but bytes, it can just copy them out. .I XkbKeyNumActions computes the number of actions associated with the key corresponding to .I keycode. This should be the same value as the result of .I XkbKeyNumSyms. .SH STRUCTURES .LP The KeySymMapRec structure is defined as follows: .nf #define XkbNumKbdGroups 4 #define XkbMaxKbdGroup (XkbNumKbdGroups-1) typedef struct { /\(** map to keysyms for a single keycode */ unsigned char kt_index[XkbNumKbdGroups]; /\(** key type index for each group */ unsigned char group_info; /\(** # of groups and out of range group handling */ unsigned char width; /\(** max # of shift levels for key */ unsigned short offset; /\(** index to keysym table in syms array */ } XkbSymMapRec, *XkbSymMapPtr; .fi .SH "SEE ALSO" .BR XkbKeyNumSyms (__libmansuffix__) THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHlibX11-1.6.3/man/xkb/XkbFreeClientMap.man000064401431060000012000000145471247741723500202500ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbFreeClientMap __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbFreeClientMap \- Free memory used by the client map member of an XkbDescRec structure .SH SYNOPSIS .HP .B void XkbFreeClientMap .BI "(\^XkbDescPtr " "xkb" "\^," .BI "unsigned int " "which" "\^," .BI "Bool " "free_all" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb keyboard description containing client map to free .TP .I \- which mask identifying components of map to free .TP .I \- free_all True => free all client components and map itself .SH DESCRIPTION .LP .I XkbFreeClientMap frees the components of client map specified by .I which in the XkbDescRec structure specified by the .I xkb parameter and sets the corresponding structure component values to NULL. The .I which parameter specifies a combination of the client map masks shown in Table 1. If .I free_all is True, .I which is ignored; .I XkbFreeClientMap frees every non-NULL structure component in the client map, frees the XkbClientMapRec structure referenced by the .I map member of the .I xkb parameter, and sets the .I map member to NULL. .TS c s l l l lw(4i). Table 1 XkbAllocClientMap Masks _ Mask Effect _ XkbKeyTypesMask T{ The type_count field specifies the number of entries to preallocate for the types field of the client map. If the type_count field is less than XkbNumRequiredTypes returns BadValue. T} .sp XkbKeySymsMask T{ The min_key_code and max_key_code fields of the xkb parameter are used to allocate the syms and key_sym_map fields of the client map. The fields are allocated to contain the maximum number of entries necessary for max_key_code - min_key_code + 1 keys. T} .sp XkbModifierMapMask T{ The min_key_code and max_key_code fields of the xkb parameter are used to allocate the modmap field of the client map. The field is allocated to contain the maximum number of entries necessary for max_key_code - min_key_code + 1 keys. T} .TE NOTE: The .I min_key_code and .I max_key_code fields of the .I xkb parameter must be legal values if the XkbKeySymsMask or XkbModifierMapMask masks are set in the .I which parameter. If they are not valid, .I XkbAllocClientMap returns BadValue. .SH STRUCTURES .LP The complete description of an Xkb keyboard is given by an XkbDescRec. The component structures in the XkbDescRec represent the major Xkb components. .nf typedef struct { struct _XDisplay * display; /\(** connection to X server */ unsigned short flags; /\(** private to Xkb, do not modify */ unsigned short device_spec; /\(** device of interest */ KeyCode min_key_code; /\(** minimum keycode for device */ KeyCode max_key_code; /\(** maximum keycode for device */ XkbControlsPtr ctrls; /\(** controls */ XkbServerMapPtr server; /\(** server keymap */ XkbClientMapPtr map; /\(** client keymap */ XkbIndicatorPtr indicators; /\(** indicator map */ XkbNamesPtr names; /\(** names for all components */ XkbCompatMapPtr compat; /\(** compatibility map */ XkbGeometryPtr geom; /\(** physical geometry of keyboard */ } XkbDescRec, *XkbDescPtr; .fi The .I display field points to an X display structure. The .I flags field is private to the library: modifying .I flags may yield unpredictable results. The .I device_spec field specifies the device identifier of the keyboard input device, or XkbUseCoreKeyboard, which specifies the core keyboard device. The .I min_key_code and .I max_key_code fields specify the least and greatest keycode that can be returned by the keyboard. Each structure component has a corresponding mask bit that is used in function calls to indicate that the structure should be manipulated in some manner, such as allocating it or freeing it. These masks and their relationships to the fields in the XkbDescRec are shown in Table 2. .TS c s s l l l l l l. Table 2 Mask Bits for XkbDescRec _ Mask Bit XkbDescRec Field Value _ XkbControlsMask ctrls (1L<<0) XkbServerMapMask server (1L<<1) XkbIClientMapMask map (1L<<2) XkbIndicatorMapMask indicators (1L<<3) XkbNamesMask names (1L<<4) XkbCompatMapMask compat (1L<<5) XkbGeometryMask geom (1L<<6) XkbAllComponentsMask All Fields (0x7f) .TE The .I map field of the complete Xkb keyboard description is a pointer to the Xkb client map, which is of type XkbClientMapRec: .nf typedef struct { /\(** Client Map */ unsigned char size_types; /\(** # occupied entries in types */ unsigned char num_types; /\(** # entries in types */ XkbKeyTypePtr types; /\(** vector of key types used by this keymap */ unsigned short size_syms; /\(** length of the syms array */ unsigned short num_syms; /\(** # entries in syms */ KeySym * syms; /\(** linear 2d tables of keysyms, 1 per key */ XkbSymMapPtr key_sym_map; /\(** 1 per keycode, maps keycode to syms */ unsigned char * modmap; /\(** 1 per keycode, real mods bound to key */ } XkbClientMapRec, *XkbClientMapPtr; .fi .SH DIAGNOSTICS .TP 15 .B BadValue An argument is out of range .SH "SEE ALSO" .BR XkbAllocClientMap (__libmansuffix__) libX11-1.6.3/man/xkb/XkbSARedirectSetVMods.man000064401431060000012000000102761247741723500211770ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbSARedirectSetVMods __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbSARedirectSetVMods \- Sets the vmods0 and vmods1 of act from v .SH SYNOPSIS .HP .B void XkbSARedirectSetVMods .BI "(\^XkbRedirectKeyAction " "act" "\^," .BI "unsigned int " "v" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- act action in which to set vmods .TP .I \- v new value for virtual modifiers .SH DESCRIPTION .LP Actions associated with the XkbRedirectKeyAction structure generate KeyPress and KeyRelease events containing a keycode different from the key that was pressed or released. The .I type field for the XkbRedirectKeyAction structure should always be XkbSA_RedirectKey. Key presses cause a KeyPress event for the key specified by the .I new_key field instead of the actual key. The state reported in this event reports the current effective modifiers changed as follows: any real modifiers selected by the .I mods_mask field are set to corresponding values from the .I mods field. Any real modifiers bound to the virtual modifiers specified by the .I vmods_mask0 and .I vmods_mask1 fields are either set or cleared, depending on the corresponding values in the .I vmods0 and .I vmods1 fields. If the real and virtual modifier definitions specify conflicting values for a single modifier, the real modifier definition has priority. Key releases cause a KeyRelease event for the key specified by the .I new_key field instead of the actual key. The state for this event consists of the effective keyboard modifiers at the time of the release, changed as described previously. The XkbSA_RedirectKey action normally redirects to another key on the same device as the key that caused the event, unless that device does not belong to the input extension KeyClass, in which case this action causes an event on the core keyboard device. (The input extension categorizes devices by breaking them into classes. Keyboards, and other input devices with keys, are classified as KeyClass devices by the input extension.) The .I vmods_mask0 and .I vmods_mask1 fields actually represent one .I vmods_mask value. Xkb provides macros to convert between the two formats. .I XkbSARedirectSetVModsMask sets the .I vmods0 and .I vmods1 of .I act from .I v. .SH STRUCTURES .LP .nf typedef struct_XkbRedirectKeyAction { unsigned char type; /\(** XkbSA_RedirectKey */ unsigned char new_key; /\(** keycode to be put in event */ unsigned char mods_mask; /\(** mask of real mods to be reset */ unsigned char mods; /\(** mask of real mods to take values from */ unsigned char vmods_mask0; /\(** first half of mask of virtual mods to be reset */ unsigned char vmods_mask1; /\(** other half of mask of virtual mods to be reset */ unsigned char vmods0; /\(** first half of mask of virtual mods to take values from */ unsigned char vmods1; /\(** other half of mask of virtual mods to take values from */ } XkbRedirectKeyAction; .fi libX11-1.6.3/man/xkb/XkbGetIndicatorMap.man000064401431060000012000000061201247741723500205700ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbGetIndicatorMap __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbGetIndicatorMap \- Gets the map for one or more indicators, using a mask to specify the indicators .SH SYNOPSIS .HP .B Status XkbGetIndicatorMap .BI "(\^Display *" "dpy" "\^," .BI "unsigned int " "which" "\^," .BI "XkbDescPtr " "desc" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to the X server .TP .I \- which mask of indicators for which maps should be returned .TP .I \- desc keyboard description to be updated .SH DESCRIPTION .LP Xkb allows applications to obtain information about indicators using two different methods. The first method, which is similar to the core X implementation, uses a mask to specify the indicators. The second method, which is more suitable for applications concerned with interoperability, uses indicator names. The correspondence between the indicator name and the bit position in masks is as follows: one of the parameters returned from .I XkbGetNamedIndicators is an index that is the bit position to use in any function call that requires a mask of indicator bits, as well as the indicator's index into the XkbIndicatorRec array of indicator maps. .I XkbGetIndicatorMap obtains the maps from the server for only those indicators specified by the .I which mask and copies the values into the keyboard description specified by .I desc. If the .I indicators field of the .I desc parameter is NULL, .I XkbGetIndicatorMap allocates and initializes it. To free the indicator maps, use .I XkbFreeIndicatorMaps. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadMatch A compatible version of Xkb was not available in the server or an argument has correct type and range, but is otherwise invalid .TP 15 .B BadImplementation Invalid reply from server .SH "SEE ALSO" .BR XkbFreeIndicatorMaps (__libmansuffix__), .BR XkbGetNamedIndicators (__libmansuffix__) libX11-1.6.3/man/xkb/XkbFreeGeomOverlays.man000064401431060000012000000054701247741723500210030ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbFreeGeomOverlays __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbFreeGeomOverlays \- Free rows in a section .SH SYNOPSIS .HP .B void XkbFreeGeomOverlays .BI "(\^XkbSectionPtr " "section" "\^," .BI "int " "first" "\^," .BI "int " "count" "\^," .BI "Bool " "free_all" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- section section in which overlays should be freed .TP .I \- first first overlay to be freed .TP .I \- count number of overlays to be freed .TP .I \- free_all True => all overlays are freed .SH DESCRIPTION .LP Xkb provides a number of functions to allocate and free subcomponents of a keyboard geometry. Use these functions to create or modify keyboard geometries. Note that these functions merely allocate space for the new element(s), and it is up to you to fill in the values explicitly in your code. These allocation functions increase .I sz_* but never touch .I num_* (unless there is an allocation failure, in which case they reset both .I sz_* and .I num_* to zero). These functions return Success if they succeed, BadAlloc if they are not able to allocate space, or BadValue if a parameter is not as expected. If .I free_all is True, all overlays are freed regardless of the value of .I first and .I count. Otherwise, the number of overlays specified by .I count are freed, beginning with the overlay specified by .I first in the specified section. .SH "RETURN VALUES" .TP 15 Success The XkbFreeGeomOverlays functions returns Success if there are no allocation or argument errors. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadValue An argument is out of range he 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 follibX11-1.6.3/man/xkb/XkbDeviceBell.man000064401431060000012000000255011247741723500175600ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbDeviceBell __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbDeviceBell \- Rings the bell on an X input extension device or the default keyboard .SH SYNOPSIS .HP .B Bool XkbDeviceBell .BI "(\^Display *" "display" "\^," .BI "Window " "window" "\^," .BI "unsigned int " "device_spec" "\^," .BI "unsigned int " "bell_class" "\^," .BI "unsigned int " "bell_id" "\^," .BI "int " "percent" "\^," .BI "Atom " "name" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- display connection to the X server .TP .I \- window window for which the bell is generated, or None .TP .I \- device_spec device ID, or XkbUseCoreKbd .TP .I \- bell_class X input extension bell class of the bell to be rung .TP .I \- bell_id X input extension bell ID of the bell to be rung .TP .I \- percent bell volume, from -100 to 100 inclusive .TP .I \- name a name for the bell, or NULL .SH DESCRIPTION .LP The core X protocol allows only applications to explicitly sound the system bell with a given duration, pitch, and volume. Xkb extends this capability by allowing clients to attach symbolic names to bells, disable audible bells, and receive an event whenever the keyboard bell is rung. For the purposes of this document, the .I audible bell is defined to be the system bell, or the default keyboard bell, as opposed to any other audible sound generated elsewhere in the system. You can ask to receive XkbBellNotify events when any client rings any one of the following: .IP \(bu 5 The default bell .IP \(bu 5 Any bell on an input device that can be specified by a bell_class and bell_id pair .IP \(bu 5 Any bell specified only by an arbitrary name. (This is, from the server's point of view, merely a name, and not connected with any physical sound-generating device. Some client application must generate the sound, or visual feedback, if any, that is associated with the name.) You can also ask to receive XkbBellNotify events when the server rings the default bell or if any client has requested events only (without the bell sounding) for any of the bell types previously listed. You can disable audible bells on a global basis. For example, a client that replaces the keyboard bell with some other audible cue might want to turn off the AudibleBell control to prevent the server from also generating a sound and avoid cacophony. If you disable audible bells and request to receive XkbBellNotify events, you can generate feedback different from the default bell. You can, however, override the AudibleBell control by calling one of the functions that force the ringing of a bell in spite of the setting of the AudibleBell control - .I XkbForceDeviceBell or .I XkbForceBell. In this case the server does not generate a bell event. Just as some keyboards can produce keyclicks to indicate when a key is pressed or repeating, Xkb can provide feedback for the controls by using special beep codes. The AccessXFeedback control is used to configure the specific types of operations that generate feedback. Bell Names You can associate a name to an act of ringing a bell by converting the name to an Atom and then using this name when you call the functions listed in this chapter. If an event is generated as a result, the name is then passed to all other clients interested in receiving XkbBellNotify events. Note that these are arbitrary names and that there is no binding to any sounds. Any sounds or other effects (such as visual bells on the screen) must be generated by a client application upon receipt of the bell event containing the name. There is no default name for the default keyboard bell. The server does generate some predefined bells for the AccessX controls. These named bells are shown in the Table 1 ; the name is included in any bell event sent to clients that have requested to receive XkbBellNotify events. .TS c s l l lW(4i) l. Table 1 Predefined Bells _ Action Named Bell _ Indicator turned on AX_IndicatorOn Indicator turned off AX_IndicatorOff More than one indicator changed state AX_IndicatorChange Control turned on AX_FeatureOn Control turned off AX_FeatureOff More than one control changed state AX_FeatureChange T{ SlowKeys and BounceKeys about to be turned on or off T} AX_SlowKeysWarning SlowKeys key pressed AX_SlowKeyPress SlowKeys key accepted AX_SlowKeyAccept SlowKeys key rejected AX_SlowKeyReject Accepted SlowKeys key released AX_SlowKeyRelease BounceKeys key rejected AX_BounceKeyReject StickyKeys key latched AX_StickyLatch StickyKeys key locked AX_StickyLock StickyKeys key unlocked AX_StickyUnlock .TE Audible Bells Using Xkb you can generate bell events that do not necessarily ring the system bell. This is useful if you need to use an audio server instead of the system beep. For example, when an audio client starts, it could disable the audible bell (the system bell) and then listen for XkbBellNotify events. When it receives a XkbBellNotify event, the audio client could then send a request to an audio server to play a sound. You can control the audible bells feature by passing the XkbAudibleBellMask to .I XkbChangeEnabledControls. If you set XkbAudibleBellMask on, the server rings the system bell when a bell event occurs. This is the default. If you set XkbAudibleBellMask off and a bell event occurs, the server does not ring the system bell unless you call .I XkbForceDeviceBell or .I XkbForceBell. Audible bells are also part of the per-client auto-reset controls. Bell Functions Use the functions described in this section to ring bells and to generate bell events. The input extension has two types of feedbacks that can generate bells - bell feedback and keyboard feedback. Some of the functions in this section have .I bell_class and .I bell_id parameters; set them as follows: Set .I bell_class to BellFeedbackClass or KbdFeedbackClass. A device can have more than one feedback of each type; set .I bell_id to the particular bell feedback of .I bell_class type. The Table 2 shows the conditions that cause a bell to sound or an XkbBellNotifyEvent to be generated when a bell function is called. .TS c s s s l l l l l l l l. Table 2 Bell Sounding and Bell Event Generating _ Function called AudibleBell Server sounds a bell Server sends an XkbBellNotifyEvent _ XkbDeviceBell On Yes Yes XkbDeviceBell Off No Yes XkbBell On Yes Yes XkbBell Off No Yes XkbDeviceBellEvent On or Off No Yes XkbBellEvent On or Off No Yes XkbDeviceForceBell On or Off Yes No XkbForceBell On or Off Yes No .TE Set .I percent to be the volume relative to the base volume for the keyboard as described for .I XBell. Note that .I bell_class and .I bell_id indicate the bell to physically ring. .I name is simply an arbitrary moniker for the client application's use. To determine the current feedback settings of an extension input device, use .I XGetFeedbackControl. See the X input extension documentation for more information on .I XGetFeedbackControl and related data structures. If a compatible keyboard extension is not present in the X server, .I XkbDeviceBell immediately returns False. Otherwise, .I XkbDeviceBell rings the bell as specified for the display and keyboard device and returns True. If you have disabled the audible bell, the server does not ring the system bell, although it does generate a .I XkbBellNotify event. You can call .I XkbDeviceBell without first initializing the keyboard extension. .SH STRUCTURES Xkb generates XkbBellNotify events for all bells except for those resulting from calls to .I XkbForceDeviceBell and .I XkbForceBell. To receive XkbBellNotify events under all possible conditions, pass XkbBellNotifyMask in both the .I bits_to_change and .I values_for_bits parameters to .I XkbSelectEvents. The XkbBellNotify event has no event details. It is either selected or it is not. However, you can call .I XkbSelectEventDetails using XkbBellNotify as the .I event_type and specifying XkbAllBellNotifyMask in .I bits_to_change and .I values_for_bits. This has the same effect as a call to .I XkbSelectEvents. The structure for the XkbBellNotify event type contains: .nf typedef struct _XkbBellNotify { int type; /\(** Xkb extension base event code */ unsigned long serial; /\(** X server serial number for event */ Bool send_event; /\(** True => synthetically generated */ Display * display; /\(** server connection where event generated */ Time time; /\(** server time when event generated */ int xkb_type; /\(** XkbBellNotify */ unsigned int device; /\(** Xkb device ID, will not be XkbUseCoreKbd */ int percent; /\(** requested volume as % of max */ int pitch; /\(** requested pitch in Hz */ int duration; /\(** requested duration in microseconds */ unsigned int bell_class; /\(** X input extension feedback class */ unsigned int bell_id; /\(** X input extension feedback ID */ Atom name; /\(** "name" of requested bell */ Window window; /\(** window associated with event */ Bool event_only; /\(** False -> the server did not produce a beep */ } XkbBellNotifyEvent; .fi If your application needs to generate visual bell feedback on the screen when it receives a bell event, use the window ID in the XkbBellNotifyEvent, if present. .SH "SEE ALSO" .BR XBell (__libmansuffix__), .BR XkbBellNotify (__libmansuffix__), .BR XkbChangeEnabledControls (__libmansuffix__), .BR XkbDeviceBell (__libmansuffix__), .BR XkbForceBell (__libmansuffix__), .BR XkbForceDeviceBell (__libmansuffix__), .BR XGetFeedbackControl (__libmansuffix__), .BR XkbSelectEvents (__libmansuffix__) ell_class X input extension bell class of the bell to be rung .TP .I \- bell_id X input extension bell ID of the bell to be rung .TP .I \- percent bell volume, from -100 to 100 inclusive .TP libX11-1.6.3/man/xkb/XkbKeyGroupsWidth.man000064401431060000012000000045551247741723500205200ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbKeyGroupsWidth __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbKeyGroupsWidth \- Computes the maximum width associated with the key corresponding to .I keycode .SH SYNOPSIS .HP .B int XkbKeyGroupsWidth .BI "(\^XkbDescPtr " "xkb" "\^," .BI "KeyCode " "keycode" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb Xkb description of interest .TP .I \- keycode keycode of interest .SH DESCRIPTION .LP The key width and number of groups associated with a key are used to form a small two-dimensional array of KeySyms for a key. This array may be different sizes for different keys. The array for a single key is stored as a linear list, in row-major order. The arrays for all of the keys are stored in the .I syms field of the client map. There is one row for each group associated with a key and one column for each level. The index corresponding to a given group and shift level is computed as: .nf idx = group_index * key_width + shift_level .fi The .I offset field of the .I key_sym_map entry for a key is used to access the beginning of the array. .I XkbKeyGroupsWidth computes the maximum width associated with the key corresponding to .I keycode. libX11-1.6.3/man/xkb/XkbAllocGeomRows.man000064401431060000012000000046521247741723500203030ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAllocGeomRows __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAllocGeomRows \- Allocate rows in a section .SH SYNOPSIS .HP .B Status XkbAllocGeomRows .BI "(\^XkbSectionPtr " "section" "\^," .BI "int " "num_needed" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- section section for which rows should be allocated .TP .I \- num_needed number of new rows required .SH DESCRIPTION .LP Xkb provides a number of functions to allocate and free subcomponents of a keyboard geometry. Use these functions to create or modify keyboard geometries. Note that these functions merely allocate space for the new element(s), and it is up to you to fill in the values explicitly in your code. These allocation functions increase .I sz_* but never touch .I num_* (unless there is an allocation failure, in which case they reset both .I sz_* and .I num_* to zero). These functions return Success if they succeed, BadAlloc if they are not able to allocate space, or BadValue if a parameter is not as expected. .I XkbAllocGeomRows allocates .I num_needed rows and adds them to the .I section. No initialization of the rows is done. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadValue An argument is out of range libX11-1.6.3/man/xkb/XkbAddGeomDoodad.man000064401431060000012000000073631247741723500202030ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAddGeomDoodad __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAddGeomDoodad \- Add one doodad to a section of a keyboard geometry or to the top-level geometry .SH SYNOPSIS .HP .B XkbDoodadPtr XkbAddGeomDoodad .BI "(\^XkbGeometryPtr " "geom" "\^," .BI "XkbSectionPtr " "section" "\^," .BI "Atom " "name" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- geom geometry to which the doodad is added .TP .I \- section section, if any, to which the doodad is added .TP .I \- name name of the new doodad .SH DESCRIPTION .LP Xkb provides functions to add a single new element to the top-level keyboard geometry. In each case the .I num_ * fields of the corresponding structure is incremented by 1. These functions do not change .I sz_* unless there is no more room in the array. Some of these functions fill in the values of the element's structure from the arguments. For other functions, you must explicitly write code to fill the structure's elements. The top-level geometry description includes a list of .I geometry properties. A geometry property associates an arbitrary string with an equally arbitrary name. Programs that display images of keyboards can use geometry properties as hints, but they are not interpreted by Xkb. No other geometry structures refer to geometry properties. A .I doodad describes some visible aspect of the keyboard that is not a key and is not a section. .I XkbAddGeomDoodad adds a doodad with name specified by .I name to the geometry .I geom if .I section is NULL or to the section of the geometry specified by .I section if .I section is not NULL. .I XkbAddGeomDoodad returns NULL if any of the parameters is empty or if it was not able to allocate space for the doodad. If there is already a doodad with the name .I name in the doodad array for the geometry (if .I section is NULL) or the section (if .I section is non-NULL), a pointer to that doodad is returned. To allocate space for an arbitrary number of doodads to a section, use the .I XkbAllocGeomSectionDoodads function. To allocate space for an arbitrary number of doodads to a keyboard geometry, use the .I XkbAllocGeomDoodads function. .SH STRUCTURES .LP .nf typedef union _XkbDoodad { XkbAnyDoodadRec any; XkbShapeDoodadRec shape; XkbTextDoodadRec text; XkbIndicatorDoodadRec indicator; XkbLogoDoodadRec logo; } XkbDoodadRec, *XkbDoodadPtr; .fi .SH "SEE ALSO" .BR XkbAllocGeomDoodads (__libmansuffix__), .BR XkbAllocGeomSectionDoodads (__libmansuffix__) libX11-1.6.3/man/xkb/XkbKeyNumSyms.man000064401431060000012000000045351247741723500176520ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbKeyNumSyms __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbKeyNumSyms \- Returns the total number of keysyms for the key corresponding to .I keycode .SH SYNOPSIS .HP .B int XkbKeyNumSyms .BI "(\^XkbDescPtr " "xkb" "\^," .BI "KeyCode " "keycode" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb Xkb description of interest .TP .I \- keycode keycode of interest .SH DESCRIPTION .LP The key width and number of groups associated with a key are used to form a small two-dimensional array of KeySyms for a key. This array may be different sizes for different keys. The array for a single key is stored as a linear list, in row-major order. The arrays for all of the keys are stored in the .I syms field of the client map. There is one row for each group associated with a key and one column for each level. The index corresponding to a given group and shift level is computed as: .nf idx = group_index * key_width + shift_level .fi The .I offset field of the .I key_sym_map entry for a key is used to access the beginning of the array. .I XkbKeyNumSyms returns the total number of keysyms for the key corresponding to .I keycode. libX11-1.6.3/man/xkb/XkbGetSlowKeysDelay.man000064401431060000012000000150601247741723500207600ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbGetSlowKeysDelay __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbGetSlowKeysDelay \- Gets the SlowKeys acceptance delay for a keyboard device .SH SYNOPSIS .HP .B Bool XkbGetSlowKeysDelay .BI "(\^Display *" "display" "\^," .BI "unsigned int " "device_spec" "\^," .BI "unsigned int *" "delay_rtrn" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- display connection to X server .TP .I \- device_spec device ID, or XkbUseCoreKbd .TP .I \- delay_rtrn backfilled with SlowKeys delay, ms .SH DESCRIPTION .LP Some users may accidentally bump keys while moving a hand or typing stick toward the key they want. Usually, the keys that are accidentally bumped are just hit for a very short period of time. The SlowKeys control helps filter these accidental bumps by telling the server to wait a specified period, called the .I SlowKeys acceptance delay, before delivering key events. If the key is released before this period elapses, no key events are generated. Users can then bump any number of keys on their way to the one they want without accidentally getting those characters. Once they have reached the key they want, they can then hold the desired key long enough for the computer to accept it. SlowKeys is a boolean control with one configurable attribute. When the SlowKeys control is active, the server reports the initial key press, subsequent acceptance or rejection, and release of any key to interested clients by sending an appropriate AccessXNotify event (see section 10.6.4). The server can generate XkbAccessXNotify events for some of the global keyboard controls. The detail field describes what AccessX event just occurred and can be any of the values in Table 1. The server can generate XkbAccessXNotify events for some of the global keyboard controls. The detail field describes what AccessX event just occurred and can be any of the values in Table 1. .TS c s l l l lw(4i). Table 1 AccessXNotify Events _ detail Reason _ XkbAXN_SKPress T{ A key was pressed when SlowKeys was enabled. T} XkbAXN_SKAccept T{ A key was accepted (held longer than the SlowKeys delay). T} XkbAXN_SKRelease T{ An accepted SlowKeys key was released. T} XkbAXN_SKReject T{ A key was rejected (released before the SlowKeys delay expired). T} XkbAXN_BKAccept T{ A key was accepted by BounceKeys. T} XkbAXN_BKReject T{ A key was rejected (pressed before the BounceKeys delay expired). T} XkbAXN_AXKWarning T{ AccessXKeys is about to turn on/off StickyKeys or BounceKeys. T} .TE The .I keycode field reports the keycode of the key for which the event occurred. If the action is related to .I SlowKeys, the .I slowKeysDelay field contains the current SlowKeys acceptance delay. If the action is related to BounceKeys, the .I debounceDelay field contains the current BounceKeys debounce delay. Selecting for AccessX Events To receive XkbAccessXNotify events under all possible conditions, use .I XkbSelectEvents and pass XkbAccesXNotifyMask in both .I bits_to_change and .I values_for_bits. To receive XkbStateNotify events only under certain conditions, use .I XkbSelectEventDetails using XkbAccessXNotify as the .I event_type and specifying the desired state changes in .I bits_to_change and .I values_for_bits using mask bits from Table 2. .TS c s s l l l l l lw(3i). Table 2 AccessXNotify Event Details _ XkbAccessXNotify Event Details Value Circumstances _ XkbAXN_SKPressMask (1<<0) T{ Slow key press notification wanted T} XkbAXN_SKAcceptMask (1<<1) T{ Slow key accept notification wanted T} XkbAXN_SKRejectMask (1<<2) T{ Slow key reject notification wanted T} XkbAXN_SKReleaseMask (1<<3) T{ Slow key release notification wanted T} XkbAXN_BKAcceptMask (1<<4) T{ Bounce key accept notification wanted T} XkbAXN_BKRejectMask (1<<5) T{ Bounce key reject notification wanted T} XkbAXN_AXKWarningMask (1<<6) T{ AccessX warning notification wanted T} XkbAllAccessXEventsMask (0x7f) T{ All AccessX features notifications wanted T} .TE .I XkbGetSlowKeysDelay requests the attributes of the SlowKeys control from the server, waits for a reply and backfills .I delay_rtrn with the SlowKeys delay attribute. .I XkbGetSlowKeysDelay returns True if successful; , .I XkbGetSlowKeysDelay returns False. .SH "RETURN VALUES" .TP 15 True The .I XkbGetSlowKeysDelay function returns True if the request of the Slowkeys control from the server was successful. .I .TP 15 False The .I XkbGetSlowKeysDelay function returns False if a compatible version of the Xkb extension is not available in the server. .SH STRUCTURES .LP The structure for the XkbAccessXNotify event type is as follows: .nf typedef struct { int type; /\(** Xkb extension base event code */ unsigned long serial; /\(** X server serial number for event */ Bool send_event; /\(** True => synthetically generated */ Display * display; /\(** server connection where event generated */ Time time; /\(** server time when event generated */ int xkb_type; /\(** XkbAccessXNotify */ int device; /\(** Xkb device ID, will not be XkbUseCoreKbd */ int detail; /\(** XkbAXN_* */ KeyCode keycode; /\(** key of event */ int slowKeysDelay; /\(** current SlowKeys delay */ int debounceDelay; /\(** current debounce delay */ } XkbAccessXNotifyEvent; .fi e or rejection, and release of any key to interested clients by sending an appropriate AccessXNotify event (see section 10.6.4). The server can generate XkbAccessXNotify events for some of the global keyboard controls. The detail field describes what AccessX event just occurred and can be any of the values in Table 1. The server can generate XkbAccessXNotify events for some of the global keyboard controls. The detail field describes what AccessX event libX11-1.6.3/man/xkb/XkbFreeGeomOverlayKeys.man000064401431060000012000000054301247741723500214500ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbFreeGeomOverlayKeys __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbFreeGeomOverlayKeys \- Free keys in an overlay row .SH SYNOPSIS .HP .B void XkbFreeGeomOverlayKeys .BI "(\^XkbRowPtr " "row" "\^," .BI "int " "first" "\^," .BI "int " "count" "\^," .BI "Bool " "free_all" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- row row in which keys should be freed .TP .I \- first first key to be freed .TP .I \- count number of keys to be freed .TP .I \- free_all True => all keys are freed .SH DESCRIPTION .LP Xkb provides a number of functions to allocate and free subcomponents of a keyboard geometry. Use these functions to create or modify keyboard geometries. Note that these functions merely allocate space for the new element(s), and it is up to you to fill in the values explicitly in your code. These allocation functions increase .I sz_* but never touch .I num_* (unless there is an allocation failure, in which case they reset both .I sz_* and .I num_* to zero). These functions return Success if they succeed, BadAlloc if they are not able to allocate space, or BadValue if a parameter is not as expected. If .I free_all is True, all keys are freed regardless of the value of .I first and .I count. Otherwise, the number of keys specified by .I count are freed, beginning with the key specified by .I first in the specified row. .SH "RETURN VALUES" .TP 15 Success The XkbFreeGeomOverlayKeys function returns Success if there are no allocation or argument errors. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadValue An argument is out of range libX11-1.6.3/man/xkb/XkbFreeComponentList.man000064401431060000012000000033221247741723500211570ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbFreeComponentList __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbFreeComponentList \- Free the structure returned by .I XkbListComponents .SH SYNOPSIS .HP .B void XkbFreeComponentList .BI "(\^XkbComponentListPtr " "list" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- list pointer to XkbComponentListRec to free .SH DESCRIPTION .LP When you are done using the structure returned by .I XkbListComponents, free it using .I XkbFreeComponentList. .SH "SEE ALSO" .BR XkbListComponents (__libmansuffix__) libX11-1.6.3/man/xkb/XkbAllocGeomSections.man000064401431060000012000000050771247741723500211420ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAllocGeomSections __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAllocGeomSections \- Allocate geometry sections .SH SYNOPSIS .HP .B Status XkbAllocGeomSections .BI "(\^XkbGeometryPtr " "geom" "\^," .BI "int " "num_needed" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- geom geometry for which sections should be allocated .TP .I \- num_needed number of new sections required .SH DESCRIPTION .LP Xkb provides a number of functions to allocate and free subcomponents of a keyboard geometry. Use these functions to create or modify keyboard geometries. Note that these functions merely allocate space for the new element(s), and it is up to you to fill in the values explicitly in your code. These allocation functions increase .I sz_* but never touch .I num_* (unless there is an allocation failure, in which case they reset both .I sz_* and .I num_* to zero). These functions return Success if they succeed, BadAlloc if they are not able to allocate space, or BadValue if a parameter is not as expected. .I XkbAllocGeomSections allocates .I num_needed sections and adds them to the geometry .I geom. No initialization of the sections is done. To free geometry sections, use .I XkbFreeGeomSections. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadValue An argument is out of range .SH "SEE ALSO" .BR XkbFreeGeomSections (__libmansuffix__) libX11-1.6.3/man/xkb/XkbNoteControlsChanges.man000064401431060000012000000157011247741723500215050ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbNoteControlsChanges __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbNoteControlsChanges \- Notes the changes in a changes structure when a client receives an XkbControlsNotify event .SH SYNOPSIS .HP .B void XkbNoteControlsChanges .BI "(\^XkbControlsChangesPtr " "changes" "\^," .BI "XkbControlsNotifyEvent *" "new" "\^," .BI "unsigned int " "wanted" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- changes records changes indicated by new .TP .I \- new tells which things have changed .TP .I \- wanted tells which parts of new to record in changes .SH DESCRIPTION .LP Whenever a field in the controls structure changes in the server's keyboard description, the server sends an XkbControlsNotify event to all interested clients.To receive XkbControlsNotify events under all possible conditions, use .I XkbSelectEvents and pass XkbControlsNotifyMask in both .I bits_to_change and .I values_for_bits. To receive XkbControlsNotify events only under certain conditions, use .I XkbSelectEventDetails using XkbControlsNotify as the .I event_type and specifying the desired state changes in .I bits_to_change and .I values_for_bits using mask bits from Table 1. Table 1 shows the actual values for the individual mask bits used to select controls for modification and to enable and disable the control. Note that the same mask bit is used to specify general modifications to the parameters used to configure the control (which), and to enable and disable the control (enabled_ctrls). The anomalies in the table (no "ok" in column) are for controls that have no configurable attributes; and for controls that are not boolean controls and therefore cannot be enabled or disabled. .TS c s s s l l l l l l l l l l l l. Table 1 Controls Mask Bits _ Mask Bit which or enabled Value changed_ctrls _ctrls _ XkbRepeatKeysMask ok ok (1L<<0) XkbSlowKeysMask ok ok (1L<<1) XkbBounceKeysMask ok ok (1L<<2) XkbStickyKeysMask ok ok (1L<<3) XkbMouseKeysMask ok ok (1L<<4) XkbMouseKeysAccelMask ok ok (1L<<5) XkbAccessXKeysMask ok ok (1L<<6) XkbAccessXTimeoutMask ok ok (1L<<7) XkbAccessXFeedbackMask ok ok (1L<<8) XkbAudibleBellMask ok (1L<<9) XkbOverlay1Mask ok (1L<<10) XkbOverlay2Mask ok (1L<<11) XkbIgnoreGroupLockMask ok (1L<<12) XkbGroupsWrapMask ok (1L<<27) XkbInternalModsMask ok (1L<<28) XkbIgnoreLockModsMask ok (1L<<29) XkbPerKeyRepeatMask ok (1L<<30) XkbControlsEnabledMask ok (1L<<31) XkbAccessXOptionsMask ok ok (XkbStickyKeysMask | XkbAccessXFeedbackMask) XkbAllBooleanCtrlsMask ok (0x00001FFF) XkbAllControlsMask ok (0xF8001FFF) .TE The .I changed_ctrls field specifies the controls components that have changed and consists of bits taken from the masks defined in Table 1 with "ok" in the .I changed_ctrls column. The controls currently enabled in the server are reported in the .I enabled_ctrls field. If any controls were just enabled or disabled (that is, the contents of the .I enabled_ctrls field changed), they are flagged in the .I enabled_ctrl_changes field. The valid bits for these fields are the masks listed in Table 1 with "ok" in the .I enabled_ctrls column. The .I num_groups field reports the number of groups bound to the key belonging to the most number of groups and is automatically updated when the keyboard mapping changes. If the change was caused by a request from a client, the .I keycode and .I event_type fields are set to zero and the .I req_major and .I req_minor fields identify the request. The .I req_major value is the same as the major extension opcode. Otherwise, .I event_type is set to the type of event that caused the change (one of KeyPress, KeyRelease, DeviceKeyPress, DeviceKeyRelease, ButtonPress or ButtonRelease), and .I req_major and .I req_minor are undefined. If .I event_type is KeyPress, KeyRelease, DeviceKeyPress, or DeviceKeyRelease, the .I keycode field is set to the key that caused the change. If .I event_type is ButtonPress or ButtonRelease, .I keycode contains the button number. When a client receives an XkbControlsNotify event, it can note the changes in a changes structure using .I XkbNoteControlsChanges. The .I wanted parameter is a bitwise inclusive OR of bits taken from the set of masks specified in Table 1 with "ok" in the .I changed_ctrls column. .I XkbNoteControlsChanges copies any changes reported in .I new and specified in .I wanted into the changes record specified by .I old. .SH STRUCTURES .LP .nf The structure for the XkbControlsNotify event is defined as follows: typedef struct { int type; /\(** Xkb extension base event code */ unsigned long serial; /\(** X server serial number for event */ Bool send_event; /\(** True => synthetically generated */ Display * display; /\(** server connection where event generated */ Time time; /\(** server time when event generated */ int xkb_type; /\(** XkbCompatMapNotify */ int device; /\(** Xkb device ID, will not be XkbUseCoreKbd */ unsigned int changed_ctrls; /\(** bits indicating which controls data have changed*/ unsigned int enabled_ctrls; /\(** controls currently enabled in server */ unsigned int enabled_ctrl_changes; /\(** bits indicating enabled/disabled controls */ int num_groups; /\(** current number of keyboard groups */ KeyCode keycode; /\(** != 0 => keycode of key causing change */ char event_type; /\(** Type of event causing change */ char req_major; /\(** major event code of event causing change */ char req_minor; /\(** minor event code of event causing change */ } XkbControlsNotifyEvent; .fi .SH "SEE ALSO" .BR XkbSelectEventDetails (__libmansuffix__), .BR XkbSelectEvents (__libmansuffix__) libX11-1.6.3/man/xkb/XkbAddGeomKey.man000064401431060000012000000060411247741723500175310ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAddGeomKey __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAddGeomKey \- Add one key at the end of an existing row of keys .SH SYNOPSIS .HP .B XkbKeyPtr XkbAddGeomKey .BI "(\^XkbRowPtr " "row" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- row row to be updated .SH DESCRIPTION .LP Xkb provides functions to add a single new element to the top-level keyboard geometry. In each case the .I num_ * fields of the corresponding structure is incremented by 1. These functions do not change .I sz_* unless there is no more room in the array. Some of these functions fill in the values of the element's structure from the arguments. For other functions, you must explicitly write code to fill the structure's elements. The top-level geometry description includes a list of .I geometry properties. A geometry property associates an arbitrary string with an equally arbitrary name. Programs that display images of keyboards can use geometry properties as hints, but they are not interpreted by Xkb. No other geometry structures refer to geometry properties. Keys are grouped into rows. .I XkbAddGeomKey adds one key to the end of the specified .I row. The key is allocated and zeroed. .I XkbAddGeomKey returns NULL if .I row is empty or if it was not able to allocate space for the key. To allocate space for an arbitrary number of keys to a row, use .I XkbAllocGeomKeys. .SH STRUCTURES .LP .nf typedef struct _XkbKey { /\(** key in a row */ XkbKeyNameRec name; /\(** key name */ short gap; /\(** gap in mm/10 from previous key in row */ unsigned char shape_ndx; /\(** index of shape for key */ unsigned char color_ndx; /\(** index of color for key body */ } XkbKeyRec, *XkbKeyPtr; .fi .SH "SEE ALSO" .BR XkbAllocGeomKeys (__libmansuffix__) libX11-1.6.3/man/xkb/XkbFreeNames.man000064401431060000012000000061771247741723500174370ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbFreeNames __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbFreeNames \- Free symbolic names structures .SH SYNOPSIS .HP .B void XkbFreeNames .BI "(\^XkbDescPtr " "xkb" "\^," .BI "unsigned int " "which" "\^," .BI "Bool " "free_map" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb keyboard description for which names are to be freed .TP .I \- which mask of names components to be freed .TP .I \- free_map True => XkbNamesRec structure itself should be freed .SH DESCRIPTION .LP Do not free symbolic names structures directly using .I free or .I XFree. Use .I XkbFreeNames instead. The .I which parameter is the bitwise inclusive OR of the valid names mask bits defined in Table 1. Xkb provides several functions that work with symbolic names. Each of these functions uses a mask to specify individual fields of the structures described above. These masks and their relationships to the fields in a keyboard description are shown in Table 1. .TS c s s s l l l l. Table 1 Symbolic Names Masks _ Mask Bit Value Keyboard Field Component _ XkbKeycodesNameMask (1<<0) Xkb->names keycodes XkbGeometryNameMask (1<<1) Xkb->names geometry XkbSymbolsNameMask (1<<2) Xkb->names symbols XkbPhysSymbolsNameMask (1<<3) Xkb->names phys_symbols XkbTypesNameMask (1<<4) Xkb->names type XkbCompatNameMask (1<<5) Xkb->names compat XkbKeyTypeNamesMask (1<<6) Xkb->map type[*].name XkbKTLevelNamesMask (1<<7) Xkb->map type[*].lvl_names[*] XkbIndicatorNamesMask (1<<8) Xkb->names indicators[*] XkbKeyNamesMask (1<<9) Xkb->names keys[*], num_keys XkbKeyAliasesMask (1<<10) Xkb->names key_aliases[*], num_key_aliases XkbVirtualModNamesMask (1<<11) Xkb->names vmods[*] XkbGroupNamesMask (1<<12) Xkb->names groups[*] XkbRGNamesMask (1<<13) Xkb->names radio_groups[*], num_rg XkbComponentNamesMask (0x3f) Xkb->names keycodes, geometry, symbols, physical symbols, types, and compatibility map XkbAllNamesMask (0x3fff) Xkb->names all name components .TE libX11-1.6.3/man/xkb/XkbResizeDeviceButtonActions.man000064401431060000012000000074701247741723500226650ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbResizeDeviceButtonActions __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbResizeDeviceButtonActions \- Allocate additional space for button actions in an XkbDeviceInfoRec structure .SH SYNOPSIS .HP .B Status XkbResizeDeviceButtonActions .BI "(\^XkbDeviceInfoPtr " "device_info" "\^," .BI "unsigned int " "new_total" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- device_info structure in which to allocate button actions .TP .I \- new_total new total number of button actions needed .SH DESCRIPTION .LP .I XkbResizeDeviceButtonActions reallocates space, if necessary, to make sure there is room for a total of .I new_total button actions in the .I device_info structure. Any new entries allocated are zeroed. If successful, .I XkbResizeDeviceButtonActions returns Success. If .I new_total is zero, all button actions are deleted, .I device_info->num_btns is set to zero, and .I device_info->btn_acts is set to NULL. If .I device_info is invalid or .I new_total is greater than 255, BadValue is returned. If a memory allocation failure occurs, a BadAlloc is returned. To free an XkbDeviceInfoRec structure, use .I XkbFreeDeviceInfo. .SH STRUCTURES .LP Information about X Input Extension devices is transferred between a client program and the Xkb extension in an XkbDeviceInfoRec structure: .nf typedef struct { char * name; /\(** name for device */ Atom type; /\(** name for class of devices */ unsigned short device_spec; /\(** device of interest */ Bool has_own_state; /\(** True=>this device has its own state */ unsigned short supported; /\(** bits indicating supported capabilities */ unsigned short unsupported; /\(** bits indicating unsupported capabilities */ unsigned short num_btns; /\(** number of entries in btn_acts */ XkbAction * btn_acts; /\(** button actions */ unsigned short sz_leds; /\(** total number of entries in LEDs vector */ unsigned short num_leds; /\(** number of valid entries in LEDs vector */ unsigned short dflt_kbd_fb; /\(** input extension ID of default (core kbd) indicator */ unsigned short dflt_led_fb; /\(** input extension ID of default indicator feedback */ XkbDeviceLedInfoPtr leds; /\(** LED descriptions */ } XkbDeviceInfoRec, *XkbDeviceInfoPtr; .fi .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadValue An argument is out of range .SH "SEE ALSO" .BR XkbFreeDeviceInfo (__libmansuffix__) libX11-1.6.3/man/xkb/XkbChangeMap.man000064401431060000012000000114001247741723500173760ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbChangeMap __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbChangeMap \- Update only partial components of a keyboard description, modify the appropriate fields in the server and map components of a local copy of the keyboard description .SH SYNOPSIS .HP .B Bool XkbChangeMap .BI "(\^Display *" "dpy" "\^," .BI "XkbDescPtr " "xkb" "\^," .BI "XkbMapChangesPtr " "changes" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to X server .TP .I \- xkb description from which new values are taken .TP .I \- changes identifies component parts to update .SH DESCRIPTION .LP To update only partial components of a keyboard description, modify the appropriate fields in the server and map components of a local copy of the keyboard description, then call .I XkbChangeMap with an XkbMapChangesRec structure indicating which components have changed. .I XkbChangeMap copies any components specified by the .I changes structure from the keyboard description, .I xkb, to the X server specified by .I dpy. If any components specified by .I changes are not present in the .I xkb parameter, .I XkbChangeMap returns False. Otherwise, it sends a request to the server and returns True. .I XkbChangeMap can generate BadAlloc, BadLength, and BadValue protocol errors. .SH "RETURN VALUES" .TP 15 True The XkbChangeMap function returns True if the components specified by .I changes are present in the .I xkb parameter. .TP 15 False The XkbChangeMap function returns False if the components specified by .I changes are not present in the .I xkb parameter. .SH STRUCTURES .LP Use the XkbMapChangesRec structure to identify and track partial modifications to the mapping components and to reduce the amount of traffic between the server and clients. .nf typedef struct _XkbMapChanges { unsigned short changed; /\(** identifies valid components in structure */ KeyCode min_key_code; /\(** lowest numbered keycode for device */ KeyCode max_key_code; /\(** highest numbered keycode for device */ unsigned char first_type; /\(** index of first key type modified */ unsigned char num_types; /\(** # types modified */ KeyCode first_key_sym; /\(** first key whose key_sym_map changed */ unsigned char num_key_syms; /\(** # key_sym_map entries changed */ KeyCode first_key_act; /\(** first key whose key_acts entry changed */ unsigned char num_key_acts; /\(** # key_acts entries changed */ KeyCode first_key_behavior; /\(** first key whose behaviors changed */ unsigned char num_key_behaviors; /\(** # behaviors entries changed */ KeyCode first_key_explicit; /\(** first key whose explicit entry changed */ unsigned char num_key_explicit; /\(** # explicit entries changed */ KeyCode first_modmap_key; /\(** first key whose modmap entry changed */ unsigned char num_modmap_keys; /\(** # modmap entries changed */ KeyCode first_vmodmap_key; /\(** first key whose vmodmap changed */ unsigned char num_vmodmap_keys; /\(** # vmodmap entries changed */ unsigned char pad1; /\(** reserved */ unsigned short vmods; /\(** mask indicating which vmods changed */ } XkbMapChangesRec,*XkbMapChangesPtr; .fi .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadLength The length of a request is shorter or longer than that required to minimally contain the arguments .TP 15 .B BadValue An argument is out of range libX11-1.6.3/man/xkb/XkbBellEvent.man000064401431060000012000000244031247741723500174420ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbBellEvent __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbBellEvent \- Provides a function that initiates a bell event for the keyboard without ringing the bell .SH SYNOPSIS .HP .B Bool XkbBellEvent .BI "(\^Display *" "display" "\^," .BI "Window " "window" "\^," .BI "int " "percent" "\^," .BI "Atom " "name" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- display connection to the X server .TP .I \- window the event window, or None .TP .I \- percent, relative volume, which can range from -100 to 100 inclusive .TP .I \- name a bell name, or NULL .SH DESCRIPTION .LP The core X protocol allows only applications to explicitly sound the system bell with a given duration, pitch, and volume. Xkb extends this capability by allowing clients to attach symbolic names to bells, disable audible bells, and receive an event whenever the keyboard bell is rung. For the purposes of this document, the .I audible bell is defined to be the system bell, or the default keyboard bell, as opposed to any other audible sound generated elsewhere in the system. You can ask to receive XkbBellNotify events when any client rings any one of the following: .IP \(bu 5 The default bell .IP \(bu 5 Any bell on an input device that can be specified by a bell_class and bell_id pair .IP \(bu 5 Any bell specified only by an arbitrary name. (This is, from the server's point of view, merely a name, and not connected with any physical sound-generating device. Some client application must generate the sound, or visual feedback, if any, that is associated with the name.) You can also ask to receive XkbBellNotify events when the server rings the default bell or if any client has requested events only (without the bell sounding) for any of the bell types previously listed. You can disable audible bells on a global basis. For example, a client that replaces the keyboard bell with some other audible cue might want to turn off the AudibleBell control to prevent the server from also generating a sound and avoid cacophony. If you disable audible bells and request to receive XkbBellNotify events, you can generate feedback different from the default bell. You can, however, override the AudibleBell control by calling one of the functions that force the ringing of a bell in spite of the setting of the AudibleBell control - .I XkbForceDeviceBell or .I XkbForceBell. In this case the server does not generate a bell event. Just as some keyboards can produce keyclicks to indicate when a key is pressed or repeating, Xkb can provide feedback for the controls by using special beep codes. The AccessXFeedback control is used to configure the specific types of operations that generate feedback. Bell Names You can associate a name to an act of ringing a bell by converting the name to an Atom and then using this name when you call the functions listed in this chapter. If an event is generated as a result, the name is then passed to all other clients interested in receiving XkbBellNotify events. Note that these are arbitrary names and that there is no binding to any sounds. Any sounds or other effects (such as visual bells on the screen) must be generated by a client application upon receipt of the bell event containing the name. There is no default name for the default keyboard bell. The server does generate some predefined bells for the AccessX controls. These named bells are shown in Table 1; the name is included in any bell event sent to clients that have requested to receive XkbBellNotify events. .TS c s l l lW(4i) l. Table 1 Predefined Bells _ Action Named Bell _ Indicator turned on AX_IndicatorOn Indicator turned off AX_IndicatorOff More than one indicator changed state AX_IndicatorChange Control turned on AX_FeatureOn Control turned off AX_FeatureOff More than one control changed state AX_FeatureChange T{ SlowKeys and BounceKeys about to be turned on or off T} AX_SlowKeysWarning SlowKeys key pressed AX_SlowKeyPress SlowKeys key accepted AX_SlowKeyAccept SlowKeys key rejected AX_SlowKeyReject Accepted SlowKeys key released AX_SlowKeyRelease BounceKeys key rejected AX_BounceKeyReject StickyKeys key latched AX_StickyLatch StickyKeys key locked AX_StickyLock StickyKeys key unlocked AX_StickyUnlock .TE Audible Bells Using Xkb you can generate bell events that do not necessarily ring the system bell. This is useful if you need to use an audio server instead of the system beep. For example, when an audio client starts, it could disable the audible bell (the system bell) and then listen for XkbBellNotify events. When it receives a XkbBellNotify event, the audio client could then send a request to an audio server to play a sound. You can control the audible bells feature by passing the XkbAudibleBellMask to .I XkbChangeEnabledControls. If you set XkbAudibleBellMask on, the server rings the system bell when a bell event occurs. This is the default. If you set XkbAudibleBellMask off and a bell event occurs, the server does not ring the system bell unless you call .I XkbForceDeviceBell or .I XkbForceBell. Audible bells are also part of the per-client auto-reset controls. Bell Functions Use the functions described in this section to ring bells and to generate bell events. The input extension has two types of feedbacks that can generate bells - bell feedback and keyboard feedback. Some of the functions in this section have .I bell_class and .I bell_id parameters; set them as follows: Set .I bell_class to BellFeedbackClass or KbdFeedbackClass. A device can have more than one feedback of each type; set .I bell_id to the particular bell feedback of .I bell_class type. Table 2 shows the conditions that cause a bell to sound or an XkbBellNotifyEvent to be generated when a bell function is called. .TS c s s s l l l l l l l l. Table 2 Bell Sounding and Bell Event Generating _ Function called AudibleBell Server sounds a bell Server sends an XkbBellNotifyEvent _ XkbDeviceBell On Yes Yes XkbDeviceBell Off No Yes XkbBell On Yes Yes XkbBell Off No Yes XkbDeviceBellEvent On or Off No Yes XkbBellEvent On or Off No Yes XkbDeviceForceBell On or Off Yes No XkbForceBell On or Off Yes No .TE If a compatible keyboard extension isn't present in the X server, .I XkbBellEvent immediately returns False. Otherwise, .I XkbBellEvent calls .I XkbDeviceBellEvent with the specified .I display, window, percent, and .I name, a .I device_spec of XkbUseCoreKbd, a .I bell_class of XkbDfltXIClass, and a .I bell_id of XkbDfltXIId, and returns what .I XkbDeviceBellEvent returns. .I XkbBellEvent generates a XkbBellNotify event. You can call .I XkbBellEvent without first initializing the keyboard extension. .SH "RETURN VALUES" .TP 15 False The .I XkbBellEvent immediately returns False, if a compatible keyboard extension isn't present in the X server. .SH STRUCTURES Xkb generates XkbBellNotify events for all bells except for those resulting from calls to .I XkbForceDeviceBell and .I XkbForceBell. To receive XkbBellNotify events under all possible conditions, pass XkbBellNotifyMask in both the .I bits_to_change and .I values_for_bits parameters to .I XkbSelectEvents. The XkbBellNotify event has no event details. It is either selected or it is not. However, you can call .I XkbSelectEventDetails using XkbBellNotify as the .I event_type and specifying XkbAllBellNotifyMask in .I bits_to_change and .I values_for_bits. This has the same effect as a call to .I XkbSelectEvents. The structure for the XkbBellNotify event type contains: .nf typedef struct _XkbBellNotify { int type; /\(** Xkb extension base event code */ unsigned long serial; /\(** X server serial number for event */ Bool send_event; /\(** True => synthetically generated */ Display * display; /\(** server connection where event generated */ Time time; /\(** server time when event generated */ int xkb_type; /\(** XkbBellNotify */ unsigned int device; /\(** Xkb device ID, will not be XkbUseCoreKbd */ int percent; /\(** requested volume as % of max */ int pitch; /\(** requested pitch in Hz */ int duration; /\(** requested duration in microseconds */ unsigned int bell_class; /\(** X input extension feedback class */ unsigned int bell_id; /\(** X input extension feedback ID */ Atom name; /\(** "name" of requested bell */ Window window; /\(** window associated with event */ Bool event_only; /\(** False -> the server did not produce a beep */ } XkbBellNotifyEvent; .fi If your application needs to generate visual bell feedback on the screen when it receives a bell event, use the window ID in the XkbBellNotifyEvent, if present. .SH "SEE ALSO" .BR XkbChangeEnabledControls (__libmansuffix__), .BR XkbDeviceBellEvent (__libmansuffix__), .BR XkbForceBell (__libmansuffix__), .BR XkbForceDeviceBell (__libmansuffix__), .BR XkbSelectEventDetails (__libmansuffix__), .BR XkbSelectEvents (__libmansuffix__) libX11-1.6.3/man/xkb/XkbFreeGeomRows.man000064401431060000012000000054151247741723500201300ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbFreeGeomRows __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbFreeGeomRows \- Free rows in a section .SH SYNOPSIS .HP .B void XkbFreeGeomRows .BI "(\^XkbSectionPtr " "section" "\^," .BI "int " "first" "\^," .BI "int " "count" "\^," .BI "Bool " "free_all" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- section section in which rows should be freed .TP .I \- first first row to be freed .TP .I \- count number of rows to be freed .TP .I \- free_all True => all rows are freed .SH DESCRIPTION .LP Xkb provides a number of functions to allocate and free subcomponents of a keyboard geometry. Use these functions to create or modify keyboard geometries. Note that these functions merely allocate space for the new element(s), and it is up to you to fill in the values explicitly in your code. These allocation functions increase .I sz_* but never touch .I num_* (unless there is an allocation failure, in which case they reset both .I sz_* and .I num_* to zero). These functions return Success if they succeed, BadAlloc if they are not able to allocate space, or BadValue if a parameter is not as expected. If .I free_all is True, all rows are freed regardless of the value of .I first and .I count. Otherwise, the number of rows specified by .I count are freed, beginning with the row specified by .I first in the specified section. .SH "RETURN VALUES" .TP 15 Success The XkbFreeGeomRows function returns Success when there are no allocation or argument errors. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadValue An argument is out of range libX11-1.6.3/man/xkb/XkbAllocGeomKeyAliases.man000064401431060000012000000052621247741723500214010ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAllocGeomKeyAliases __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAllocGeomKeyAliases \- Allocate geometry key aliases .SH SYNOPSIS .HP .B Status XkbAllocGeomKeyAliases .BI "(\^XkbGeometryPtr " "geom" "\^," .BI "int " "num_needed" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- geom geometry for which key aliases should be allocated .TP .I \- num_needed number of new key aliases required .SH DESCRIPTION .LP Xkb provides a number of functions to allocate and free subcomponents of a keyboard geometry. Use these functions to create or modify keyboard geometries. Note that these functions merely allocate space for the new element(s), and it is up to you to fill in the values explicitly in your code. These allocation functions increase .I sz_* but never touch .I num_* (unless there is an allocation failure, in which case they reset both .I sz_* and .I num_* to zero). These functions return Success if they succeed, BadAlloc if they are not able to allocate space, or BadValue if a parameter is not as expected. .I XkbAllocGeomKeyAliases allocates space for .I num_needed key aliases and adds them to the specified geometry .I geom. A key alias is a pair of strings that associates an alternate name for a key with the real name for that key. To free geometry key aliases, use .I XkbFreeGeomKeyAliases. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadValue An argument is out of range .SH "SEE ALSO" .BR XkbFreeGeomKeyAliases (__libmansuffix__) libX11-1.6.3/man/xkb/XkbLockGroup.man000064401431060000012000000044171247741723500174720ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbLockGroup __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbLockGroup \- Locks the keysym group .SH SYNOPSIS .HP .B Bool XkbLockGroup .BI "(\^Display *" "display" "\^," .BI "unsigned int " "device_spec" "\^," .BI "unsigned int " "group" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I display connection to the X server .TP .I device_spec device ID, or XkbUseCoreKbd .TP .I group index of the keysym group to lock .SH DESCRIPTION .LP .I XkbLockGroup sends a request to the server to lock the specified .I group and does not wait for a reply. It returns True if the request was sent and False otherwise. Reference the keysym group indices with these symbolic constants: .TS c s l l l l. Table 1 Symbolic Group Names _ Symbolic Name Value _ XkbGroup1Index 0 XkbGroup2Index 1 XkbGroup3Index 2 XkbGroup4Index 3 .TE .SH "RETURN VALUES" .TP 15 True The .I XkbLockGroup function returns True when a request was sent to the server to lock the specified .I group and does not wait for a reply. .TP 15 False The .I XkbLockGroup function returns False if the request was not sent. libX11-1.6.3/man/xkb/XkbKeyAction.man000064401431060000012000000110121247741723500174400ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbKeyAction __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbKeyAction \- Returns the key action .SH SYNOPSIS .HP .B XkbAction XkbKeyAction .BI "(\^XkbDescPtr " "xkb" "\^," .BI "KeyCode " "keycode" "\^," .BI "int " "idx" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb Xkb description of interest .TP .I \- keycode keycode of interest .TP .I \- idx index for group and shift level .SH DESCRIPTION .LP A key action defines the effect key presses and releases have on the internal state of the server. For example, the expected key action associated with pressing the Shift key is to set the Shift modifier. There is zero or one key action associated with each keysym bound to each key. Just as the entire list of key symbols for the keyboard mapping is held in the .I syms field of the client map, the entire list of key actions for the keyboard mapping is held in the .I acts array of the server map. The total size of .I acts is specified by .I size_acts, and the number of entries is specified by .I num_acts. The .I key_acts array, indexed by keycode, describes the actions associated with a key. The .I key_acts array has .I min_key_code unused entries at the start to allow direct indexing using a keycode. If a .I key_acts entry is zero, it means the key does not have any actions associated with it. If an entry is not zero, the entry represents an index into the .I acts field of the server map, much as the .I offset field of a KeySymMapRec structure is an index into the .I syms field of the client map. The reason the .I acts field is a linear list of XkbActions is to reduce the memory consumption associated with a keymap. Because Xkb allows individual keys to have multiple shift levels and a different number of groups per key, a single two-dimensional array of KeySyms would potentially be very large and sparse. Instead, Xkb provides a small two-dimensional array of XkbActions for each key. To store all of these individual arrays, Xkb concatenates each array together in the .I acts field of the server map. The key action structures consist only of fields of type char or unsigned char. This is done to optimize data transfer when the server sends bytes over the wire. If the fields are anything but bytes, the server has to sift through all of the actions and swap any nonbyte fields. Because they consist of nothing but bytes, it can just copy them out. .I XkbKeyAction returns the key action indexed by .I idx in the two-dimensional array of key actions associated with the key corresponding to .I keycode.idx may be computed from the group and shift level of interest as follows: .nf idx = group_index * key_width + shift_level .fi .SH STRUCTURES .LP The KeySymMapRec structure is defined as follows: .nf #define XkbNumKbdGroups 4 #define XkbMaxKbdGroup (XkbNumKbdGroups-1) typedef struct { /\(** map to keysyms for a single keycode */ unsigned char kt_index[XkbNumKbdGroups]; /\(** key type index for each group */ unsigned char group_info; /\(** # of groups and out of range group handling */ unsigned char width; /\(** max # of shift levels for key */ unsigned short offset; /\(** index to keysym table in syms array */ } XkbSymMapRec, *XkbSymMapPtr; .fi libX11-1.6.3/man/xkb/XkbFreeGeomColors.man000064401431060000012000000051401247741723500204320ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbFreeGeomColors __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbFreeGeomColors \- Free geometry colors .SH SYNOPSIS .HP .B void XkbFreeGeomColors .BI "(\^XkbGeometryPtr " "geom" "\^," .BI "int " "first" "\^," .BI "int " "count" "\^," .BI "Bool " "free_all" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- geom geometry in which colors should be freed .TP .I \- first first color to be freed .TP .I \- count number of colors to be freed .TP .I \- free_all True => all colors are freed .SH DESCRIPTION .LP Xkb provides a number of functions to allocate and free subcomponents of a keyboard geometry. Use these functions to create or modify keyboard geometries. Note that these functions merely allocate space for the new element(s), and it is up to you to fill in the values explicitly in your code. These allocation functions increase .I sz_* but never touch .I num_* (unless there is an allocation failure, in which case they reset both .I sz_* and .I num_* to zero). These functions return Success if they succeed, BadAlloc if they are not able to allocate space, or BadValue if a parameter is not as expected. If .I free_all is True, all colors are freed regardless of the value of .I first or .I count. Otherwise, .I count colors are freed beginning with the one specified by .I first. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadValue An argument is out of range libX11-1.6.3/man/xkb/XkbSetAutoResetControls.man000064401431060000012000000064461247741723500217040ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbSetAutoResetControls __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbSetAutoResetControls \- Changes the current values of the AutoReset control attributes .SH SYNOPSIS .HP .B Bool XkbSetAutoResetControls .BI "(\^Display *" "dpy" "\^," .BI "unsigned int " "changes" "\^," .BI "unsigned int *" "auto_ctrls" "\^," .BI "unsigned int *" "auto_values" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to X server .TP .I \- changes controls for which to change auto-reset values .TP .I \- auto_ctrls controls from changes that should auto reset .TP .I \- auto_values 1 bit => auto-reset on .SH DESCRIPTION .LP .I XkbSetAutoResetControls changes the auto-reset status and associated auto-reset values for the controls selected by .I changes. For any control selected by .I changes, if the corresponding bit is set in .I auto_ctrls, the control is configured to auto-reset when the client exits. If the corresponding bit in .I auto_values is on, the control is turned on when the client exits; if zero, the control is turned off when the client exits. For any control selected by .I changes, if the corresponding bit is not set in .I auto_ctrls, the control is configured to not reset when the client exits. For example: .nf To leave the auto-reset controls for StickyKeys the way they are: ok = XkbSetAutoResetControls(dpy, 0, 0, 0); To change the auto-reset controls so that StickyKeys are unaffected when the client exits: ok = XkbSetAutoResetControls(dpy, XkbStickyKeysMask, 0, 0); To change the auto-reset controls so that StickyKeys are turned off when the client exits: ok = XkbSetAutoResetControls(dpy, XkbStickyKeysMask, XkbStickyKeysMask, 0); To change the auto-reset controls so that StickyKeys are turned on when the client exits: ok = XkbSetAutoResetControls(dpy, XkbStickyKeysMask, XkbStickyKeysMask, XkbStickyKeysMask); .fi .I XkbSetAutoResetControls backfills .I auto_ctrls and .I auto_values with the auto-reset controls for this particular client. Note that all of the bits are valid in the returned values, not just the ones selected in the .I changes mask. libX11-1.6.3/man/xkb/XkbGetMap.man000064401431060000012000000211251247741723500167350ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbGetMap __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbGetMap \- Allocate an XkbDescRec structure and populate it with the server's keyboard client map and server map .SH SYNOPSIS .HP .B XkbDescPtr XkbGetMap .BI "(\^Display *" "display" "\^," .BI "unsigned int " "which" "\^," .BI "unsigned int " "device_spec" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- display connection to X server .TP .I \- which mask selecting subcomponents to populate .TP .I \- device_spec device_id, or XkbUseCoreKbd .SH DESCRIPTION .LP Xkb provides two functions to obtain the keyboard mapping components from the server. The first function, .I XkbGetMap, allocates an XkbDescRec structure, retrieves mapping components from the server, and stores them in the XkbDescRec structure it just allocated. The second function, .I XkbGetUpdatedMap, retrieves mapping components from the server and stores them in an XkbDescRec structure that has previously been allocated. To allocate an XkbDescRec structure and populate it with the server's keyboard client map and server map, use .I XkbGetMap. XkbGetMap is similar to .I XkbGetKeyboard, but is used only for obtaining the address of an XkbDescRec structure that is populated with keyboard mapping components. It allows finer control over which substructures of the keyboard mapping components are to be populated. .I XkbGetKeyboard always returns fully populated components, while .I XkbGetMap can be instructed to return a partially populated component. The .I which mask is a bitwise inclusive OR of the masks defined in Table 14.1. Only those portions of the keyboard server map and the keyboard client maps that are specified in .I which are allocated and populated. In addition to allocating and obtaining the server map and the client map, .I XkbGetMap also sets the .I device_spec, the .I min_key_code, and .I max_key_code fields of the keyboard description. .I XkbGetMap is synchronous; it queries the server for the desired information, waits for a reply, and then returns. If successful, .I XkbGetMap returns a pointer to the XkbDescRec structure it allocated. If unsuccessful, .I XkbGetMap returns NULL. When unsuccessful, one of the following protocol errors is also generated: BadAlloc (unable to allocate the XkbDescRec structure), BadValue (some mask bits in .I which are undefined), or BadImplementation (a compatible version of the Xkb extension is not available in the server). To free the returned data, use .I XkbFreeKeyboard. Xkb also provides convenience functions to get partial component definitions from the server. These functions are specified in the "convenience functions" column in Table 1. Refer to the sections listed in the table for more information on these functions. .TS c s s s s c s s s s l l l l l l l l l l lw(3i) l l lw(1i) lw(3i). Table 1 Xkb Mapping Component Masks and Convenience Functions _ Mask Value Map Fields Convenience Functions _ T{ XkbKeyTypesMask T} (1<<0) client T{ types .br size_types .br num_types T} T{ XkbGetKeyTypes .br XkbResizeKeyType .br XkbCopyKeyType .br XkbCopyKeyTypes T} T{ XkbKeySymsMask T} (1<<1) client T{ syms .br size_syms .br num_syms .br key_sym_map T} T{ XkbGetKeySyms .br XkbResizeKeySyms .br XkbChangeTypesOfKey T} T{ XkbModifierMapMask T} (1<<2) client modmap T{ XkbGetKeyModifierMap T} T{ XkbExplicitComponentsMask T} (1<<3) server T{ explicit T} T{ XkbGetKeyExplicitComponents T} T{ XkbKeyActionsMask T} (1<<4) server T{ key_acts .br acts .br num_acts .br size_acts T} T{ XkbGetKeyActions .br XkbResizeKeyActions T} T{ XkbKeyBehaviorsMask T} (1<<5) server T{ behaviors T} T{ XkbGetKeyBehaviors T} T{ XkbVirtualModsMask T} (1<<6) server T{ vmods T} T{ XkbGetVirtualMods T} T{ XkbVirtualModMapMask T} (1<<7) server T{ vmodmap T} T{ XkbGetVirtualModMap T} .TE .nf .bp Xkb defines combinations of these masks for convenience: #define XkbResizableInfoMask (XkbKeyTypesMask) #define XkbAllClientInfoMask (XkbKeyTypesMask | XkbKeySymsMask | XkbModifierMapMask) #define XkbAllServerInfoMask (XkbExplicitComponentsMask | XkbKeyActionsMask | XkbKeyBehaviorsMask | XkbVirtualModsMask | XkbVirtualModMapMask) #define XkbAllMapComponentsMask XkbAllClientInfoMask | XkbAllServerInfoMask) .fi Key types, symbol maps, and actions are all interrelated: changes in one require changes in the others. The convenience functions make it easier to edit these components and handle the interdependencies. .SH STRUCTURES .LP The complete description of an Xkb keyboard is given by an XkbDescRec. The component structures in the XkbDescRec represent the major Xkb components. .nf typedef struct { struct _XDisplay * display; /\(** connection to X server */ unsigned short flags; /\(** private to Xkb, do not modify */ unsigned short device_spec; /\(** device of interest */ KeyCode min_key_code; /\(** minimum keycode for device */ KeyCode max_key_code; /\(** maximum keycode for device */ XkbControlsPtr ctrls; /\(** controls */ XkbServerMapPtr server; /\(** server keymap */ XkbClientMapPtr map; /\(** client keymap */ XkbIndicatorPtr indicators; /\(** indicator map */ XkbNamesPtr names; /\(** names for all components */ XkbCompatMapPtr compat; /\(** compatibility map */ XkbGeometryPtr geom; /\(** physical geometry of keyboard */ } XkbDescRec, *XkbDescPtr; .fi The .I display field points to an X display structure. The .I flags field is private to the library: modifying .I flags may yield unpredictable results. The .I device_spec field specifies the device identifier of the keyboard input device, or XkbUseCoreKeyboard, which specifies the core keyboard device. The .I min_key_code and .I max_key_code fields specify the least and greatest keycode that can be returned by the keyboard. Each structure component has a corresponding mask bit that is used in function calls to indicate that the structure should be manipulated in some manner, such as allocating it or freeing it. These masks and their relationships to the fields in the XkbDescRec are shown in Table 2. .TS c s s l l l l l l. Table 2 Mask Bits for XkbDescRec _ Mask Bit XkbDescRec Field Value _ XkbControlsMask ctrls (1L<<0) XkbServerMapMask server (1L<<1) XkbIClientMapMask map (1L<<2) XkbIndicatorMapMask indicators (1L<<3) XkbNamesMask names (1L<<4) XkbCompatMapMask compat (1L<<5) XkbGeometryMask geom (1L<<6) XkbAllComponentsMask All Fields (0x7f) .TE .SH "SEE ALSO" .BR XkbChangeTypesOfKey (__libmansuffix__), .BR XkbCopyKeyType (__libmansuffix__), .BR XkbCopyKeyTypes (__libmansuffix__), .BR XkbFreeClientMap (__libmansuffix__), .BR XkbGetKeyActions (__libmansuffix__), .BR XkbGetKeyBehaviors (__libmansuffix__), .BR XkbGetKeyboard (__libmansuffix__), .BR XkbGetKeyExplicitComponents (__libmansuffix__), .BR XkbGetKeyModifierMap (__libmansuffix__), .BR XkbGetKeySyms (__libmansuffix__), .BR XkbGetKeyTypes (__libmansuffix__), .BR XkbGetUpdatedMap (__libmansuffix__), .BR XkbGetVirtualModMap (__libmansuffix__), .BR XkbGetVirtualMods (__libmansuffix__), .BR XkbResizeKeyActions (__libmansuffix__), .BR XkbResizeKeySyms (__libmansuffix__), .BR XkbResizeKeyType (__libmansuffix__) OM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER .\" DEALINGS IN THE SOFTWARE. .\" .TH XkbGetMap __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbGetMap \- Allocate an XkbDescRec structure and populate it with the server's keyboard client map and server map .SH SYNOPSIS .HP .B XkbDescPtr XkbGetMap .BI "(\^Display *" "display" "\^," .BI "unsigned int " "which" "\^," .BI "unsigned int " "device_libX11-1.6.3/man/xkb/XkbGetKeyBehaviors.man000064401431060000012000000054171247741723500206210ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbGetKeyBehaviors __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbGetKeyBehaviors \- Obtain the behaviors (the behaviors array) for a subset of the keys in a keyboard description from the server .SH SYNOPSIS .HP .B Status XkbGetKeyBehaviors .BI "(\^Display *" "dpy" "\^," .BI "unsigned int " "first" "\^," .BI "unsigned int " "num" "\^," .BI "XkbDescPtr " "xkb" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to server .TP .I \- first keycode of first key to get .TP .I \- num number of keys for which behaviors are desired .TP .I \- xkb Xkb description to contain the result .SH DESCRIPTION .LP .I XkbGetKeyBehaviors sends a request to the server to obtain the behaviors for .I num keys on the keyboard starting with the key whose keycode is .I first. It waits for a reply and returns the behaviors in the .I server->behaviors field of .I xkb. If successful, .I XkbGetKeyBehaviors returns Success. If the .I server map in the .I xkb parameter has not been allocated, .I XkbGetKeyBehaviors allocates and initializes it before obtaining the actions. If the server does not have a compatible version of Xkb, or the Xkb extension has not been properly initialized, .I XkbGetKeyBehaviors returns BadAccess. If .I num is less than 1 or greater than XkbMaxKeyCount, .I XkbGetKeyBehaviors returns BadValue. If any allocation errors occur, .I XkbGetKeyBehaviors returns BadAlloc. .SH DIAGNOSTICS .TP 15 .B BadAccess The Xkb extension has not been properly initialized .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadValue An argument is out of range libX11-1.6.3/man/xkb/XkbAddGeomColor.man000064401431060000012000000065251247741723500200660ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAddGeomColor __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAddGeomColor \- Add one color name to an existing keyboard geometry description .SH SYNOPSIS .HP .B XkbColorPtr XkbAddGeomColor .BI "(\^XkbGeometryPtr " "geom" "\^," .BI "char *" "spec" "\^," .BI "unsigned int " "pixel" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- geom geometry to be updated .TP .I \- spec color to be added .TP .I \- pixel color to be added .SH DESCRIPTION .LP Xkb provides functions to add a single new element to the top-level keyboard geometry. In each case the .I num_ * fields of the corresponding structure is incremented by 1. These functions do not change .I sz_* unless there is no more room in the array. Some of these functions fill in the values of the element's structure from the arguments. For other functions, you must explicitly write code to fill the structure's elements. The top-level geometry description includes a list of .I geometry properties. A geometry property associates an arbitrary string with an equally arbitrary name. Programs that display images of keyboards can use geometry properties as hints, but they are not interpreted by Xkb. No other geometry structures refer to geometry properties. .I XkbAddGeomColor adds the specified color .I name and .I pixel to the specified geometry .I geom. The top-level geometry description includes a list of up to MaxColors (32) .I color names. A color .I name is a string whose interpretation is not specified by Xkb and neither is the .I pixel value's interpretation. All other geometry data structures refer to colors using their indices in this global list or pointers to colors in this list. .I XkbAddGeomColor returns NULL if any of the parameters is empty or if it was not able to allocate space for the color. To allocate space for an arbitrary number of colors to a geometry, use the .I XkbAllocGeomColors function. .SH STRUCTURES .LP .nf typedef struct _XkbColor { unsigned int pixel; /\(** color */ char * spec; /\(** color name */ } XkbColorRec,*XkbColorPtr; .fi .SH "SEE ALSO" .BR XkbAllocGeomColors (__libmansuffix__) libX11-1.6.3/man/xkb/XkbChangeDeviceInfo.man000064401431060000012000000055131247741723500207040ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbChangeDeviceInfo __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbChangeDeviceInfo \- Update the server's description of a device with the changes noted in an XkbDeviceChangesRec .SH SYNOPSIS .HP .B Bool XkbChangeDeviceInfo .BI "(\^Display *" "dpy" "\^," .BI "XkbDeviceInfoPtr " "device_info" "\^," .BI "XkbDeviceChangesPtr " "changes" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to X server .TP .I \- device_info local copy of device state and configuration .TP .I \- changes note specifying changes in device_info .SH DESCRIPTION .LP .I XkbChangeDeviceInfo updates the server's description of the device specified in .I device_info->device_spec with the changes specified in .I changes and contained in .I device_info. The update is made by an .I XkbSetDeviceInfo request. .SH STRUCTURES .LP Changes to an Xkb extension device may be tracked by listening to XkbDeviceExtensionNotify events and accumulating the changes in an XkbDeviceChangesRec structure. The changes noted in the structure may then be used in subsequent operations to update either a server configuration or a local copy of an Xkb extension device configuration. The changes structure is defined as follows: .nf typedef struct _XkbDeviceChanges { unsigned int changed; /\(** bits indicating what has changed */ unsigned short first_btn; /\(** number of first button which changed, if any */ unsigned short num_btns; /\(** number of buttons that have changed */ XkbDeviceLedChangesRec leds; } XkbDeviceChangesRec,*XkbDeviceChangesPtr; .fi .SH "SEE ALSO" .BR XkbSetDeviceInfo (__libmansuffix__) libX11-1.6.3/man/xkb/XkbGetKeyboard.man000064401431060000012000000054401247741723500177620ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbGetKeyboard __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbGetKeyboard \- Retrieves one or more components of a keyboard device description .SH SYNOPSIS .HP .B XkbDescPtr XkbGetKeyboard .BI "(\^Display *" "display" "\^," .BI "unsigned int " "which" "\^," .BI "unsigned int " "device_spec" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I display connection to the X server .TP .I device_spec device ID, or XkbUseCoreKbd .TP .I bits_to_change determines events to be selected / deselected .TP .I values_for_bits 1=>select, 0->deselect; for events in bits_to_change .SH DESCRIPTION .LP .I XkbGetKeyboard allocates and returns a pointer to a keyboard description. It queries the server for those components specified in the .I which parameter for device .I device_spec and copies the results to the XkbDescRec it allocated. The remaining fields in the keyboard description are set to NULL. The valid masks for .I which are those listed in Table 1. .TS c s s l l l l l l. Table 1 Mask Bits for XkbDescRec _ Mask Bit XkbDescRec Field Value _ XkbControlsMask ctrls (1L<<0) XkbServerMapMask server (1L<<1) XkbIClientMapMask map (1L<<2) XkbIndicatorMapMask indicators (1L<<3) XkbNamesMask names (1L<<4) XkbCompatMapMask compat (1L<<5) XkbGeometryMask geom (1L<<6) XkbAllComponentsMask All Fields (1L<<7) .TE .I XkbGetKeyboard is used to read the current description for one or more components of a keyboard device. It calls .I XkbGetKeyboardByName as follows: .I XkbGetKeyboardByName(dpy, device_spec, NULL, .I which, which, False). .SH DIAGNOSTICS .TP 15 .SM BadAlloc Unable to allocate storage libX11-1.6.3/man/xkb/XkbAllocKeyboard.man000064401431060000012000000042501247741723500202730ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAllocKeyboard __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAllocKeyboard \- Creates a keyboard description from scratch .SH SYNOPSIS .HP .B XkbDescRec XkbAllocKeyboard .BI "(\^void\^);" .if n .ti +5n .if t .ti +.5i .SH DESCRIPTION .LP Applications seldom need to directly allocate a keyboard description; calling .I XkbGetKeyboard usually suffices. In the event you need to create a keyboard description from scratch, however, use .I XkbAllocKeyboard rather than directly calling .I malloc. If .I XkbAllocKeyboard fails to allocate the keyboard description, it returns NULL. Otherwise, it returns a pointer to an empty keyboard description structure. The .I device_spec field will have been initialized to XkbUseCoreKbd. You may then either fill in the structure components or use Xkb functions to obtain values for the structure components from a keyboard device. .SH "SEE ALSO" .BR malloc (3F), .BR XkbUseCoreKbd (__libmansuffix__), .BR XkbGetKeyboard (__libmansuffix__) libX11-1.6.3/man/xkb/XkbKeyType.man000064401431060000012000000050051247741723500171510ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbKeyType __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbKeyType \- Obtain the index of a key type or the pointer to a key type .SH SYNOPSIS .HP .B XkbKeyTypePtr XkbKeyType .BI "(\^XkbDescPtr " "xkb" "\^," .BI "KeyCode " "keycode" "\^," .BI "int " "group" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb Xkb description of interest .TP .I \- keycode keycode of interest .TP .I \- group group index .SH DESCRIPTION .LP .I XkbKeyType returns a pointer to the key type in the .I types vector of the client map in .I xkb corresponding to the given .I keycode and .I group index. .SH STRUCTURES .LP .nf typedef struct { /\(** Key Type */ XkbModsRec mods; /\(** modifiers used to compute shift level */ unsigned char num_levels; /\(** total # shift levels, do not modify directly */ unsigned char map_count; /\(** # entries in map, preserve (if non-NULL) */ XkbKTMapEntryPtr map; /\(** vector of modifiers for each shift level */ XkbModsPtr preserve; /\(** mods to preserve for corresponding map entry */ Atom name; /\(** name of key type */ Atom * level_names; /\(** array of names of each shift level */ } XkbKeyTypeRec, *XkbKeyTypePtr; .fi libX11-1.6.3/man/xkb/XkbResizeKeySyms.man000064401431060000012000000066121247741723500203520ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbResizeKeySyms __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbResizeKeySyms \- Change the number of symbols bound to a key .SH SYNOPSIS .HP .B KeySym * XkbResizeKeySyms .BI "(\^XkbDescRec *" "xkb" "\^," .BI "int " "key" "\^," .BI "int " "needed" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb keyboard description to be changed .TP .I \- key keycode for key to modify .TP .I \- needed new number of keysyms required for key .SH DESCRIPTION .LP .I XkbResizeKeySyms reserves the space needed for .I needed keysyms and returns a pointer to the beginning of the new array that holds the keysyms. It adjusts the .I offset field of the .I key_sym_map entry for the key if necessary and can also change the .I syms, num_syms, and .I size_syms fields of .I xkb->map if it is necessary to reallocate the .I syms array. .I XkbResizeKeySyms does not modify either the width or number of groups associated with the key. If .I needed is greater than the current number of keysyms for the key, .I XkbResizeKeySyms initializes all new keysyms in the array to NoSymbol. Because the number of symbols needed by a key is normally computed as width * number of groups, and .I XkbResizeKeySyms does not modify either the width or number of groups for the key, a discrepancy exists upon return from .I XkbResizeKeySyms between the space allocated for the keysyms and the number required. The unused entries in the list of symbols returned by .I XkbResizeKeySyms are not preserved across future calls to any of the map editing functions, so you must update the key symbol mapping (which updates the width and number of groups for the key) before calling another allocator function. A call to .I XkbChangeTypesOfKey will update the mapping. If any allocation errors occur while resizing the number of symbols bound to the key, .I XkbResizeKeySyms returns NULL. .SH "SEE ALSO" .BR XkbChangeTypesOfKey (__libmansuffix__), .BR XkbResizeKeyActions (__libmansuffix__) .SH NOTES .LP A change to the number of symbols bound to a key should be accompanied by a change in the number of actions bound to a key. Refer to XkbResizeKeyActions for more information on changing the number of actions bound to a key. libX11-1.6.3/man/xkb/XkbLookupKeySym.man000064401431060000012000000045161247741723500202000ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbLookupKeySym __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbLookupKeySym \- Find the symbol associated with a key for a particular state .SH SYNOPSIS .HP .B Bool XkbLookupKeySym .BI "(\^Display *" "dpy" "\^," .BI "KeyCode " "key" "\^," .BI "unsigned int " "state" "\^," .BI "unsigned int *" "mods_rtrn" "\^," .BI "KeySym *" "sym_rtrn" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to X server .TP .I \- key key for which symbols are to be found .TP .I \- state state for which symbol should be found .TP .I \- mods_rtrn backfilled with consumed modifiers .TP .I \- sym_rtrn backfilled with symbol associated with key + state .SH DESCRIPTION .LP .I XkbLookupKeySym is the equivalent of the core .I XLookupKeySym function. For the core keyboard, given a keycode .I key and an Xkb state .I state, XkbLookupKeySym returns the symbol associated with the key in .I sym_rtrn and the list of modifiers that should still be applied in .I mods_rtrn. The .I state parameter is the state from a KeyPress or KeyRelease event. .I XkbLookupKeySym returns True if it succeeds. .SH "SEE ALSO" .BR XLookupKeySym (__libmansuffix__) libX11-1.6.3/man/xkb/XkbSASetScreen.man000064401431060000012000000063411247741723500177020ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbSASetScreen __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbSASetScreen \- Sets the screenXXX field of act from s .SH SYNOPSIS .HP .B void XkbSASetScreen .BI "(\^XkbSwitchScreenAction " "act" "\^," .BI "int " "s" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- act action in which to set screenXXX .TP .I \- s value to set in screenXXX .SH DESCRIPTION .LP Actions associated with the XkbSwitchScreen action structure change the active screen on a multiscreen display. The .I type field of the XkbSwitchScreenAction structure should always be XkbSA_SwitchScreen. The .I flags field is composed of the bitwise inclusive OR of the masks shown in Table 1. .TS c s l l l lw(4i). Table 1 Switch Screen Action Flags _ Flag Meaning _ XkbSA_SwitchAbsolute T{ If set, the screenXXX field represents the index of the new screen. Otherwise, it represents an offset from the current screen to the new screen. T} XkbSA_SwitchApplication T{ If not set, the action should switch to another screen on the same server. Otherwise, it should switch to another X server or application that shares the same physical display. T} .TE The .I screenXXX field is a signed character value that represents either the relative or absolute screen index, depending on the state of the XkbSA_SwitchAbsolute bit in the .I flags field. Xkb provides the following macros to convert between the integer and signed character value for screen numbers in XkbSwitchScreenAction structures. .SH STRUCTURES .LP .nf typedef struct _XkbSwitchScreenAction { unsigned char type; /\(** XkbSA_SwitchScreen */ unsigned char flags; /\(** controls screen switching */ char screenXXX; /\(** screen number or delta */ } XkbSwitchScreenAction; .fi .SH NOTES .LP This action is optional. Servers are free to ignore the action or any of its flags if they do not support the requested behavior. If the action is ignored, it behaves like XkbSA_NoAction. Otherwise, key press and key release events do not generate an event. libX11-1.6.3/man/xkb/XkbVirtualModsToReal.man000064401431060000012000000107241247741723500211430ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbVirtualModsToReal __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbVirtualModsToReal \- Determines the mapping of virtual modifiers to core X protocol modifiers .SH SYNOPSIS .HP .B Bool XkbVirtualModsToReal .BI "(\^XkbDescPtr " "xkb" "\^," .BI "unsigned int " "virtual_mask" "\^," .BI "unsigned int *" "mask_rtrn" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb keyboard description for input device .TP .I \- virtual_mask virtual modifier mask to translate .TP .I \- mask_rtrn backfilled with real modifiers .SH DESCRIPTION .LP Xkb maintains a .I virtual modifier mapping, which lists the virtual modifiers associated with, or bound to, each key. The real modifiers bound to a virtual modifier always include all of the modifiers bound to any of the keys that specify that virtual modifier in their virtual modifier mapping. The .I server.vmodmap array indicates which virtual modifiers are bound to each key; each entry is a bitmask for the virtual modifier bits. The .I server.vmodmap array is indexed by keycode. The .I vmodmap and .I vmods members of the server map are the "master" virtual modifier definitions. Xkb automatically propagates any changes to these fields to all other fields that use virtual modifier mappings. For example, if Mod3 is bound to the Num_Lock key by the core protocol modifier mapping, and the NumLock virtual modifier is bound to they Num_Lock key by the virtual modifier mapping, Mod3 is added to the set of modifiers associated with NumLock. The virtual modifier mapping is normally updated whenever actions are automatically applied to symbols and few applications should need to change the virtual modifier mapping explicitly. Use .I XkbGetMap to get the virtual modifiers from the server or use .I XkbGetVirtualMods to update a local copy of the virtual modifiers bindings from the server. To set the binding of a virtual modifier to a real modifier, use .I XkbGetVirtualMods If the keyboard description defined by .I xkb includes bindings for virtual modifiers, .I XkbVirtualModsToReal uses those bindings to determine the set of real modifiers that correspond to the set of virtual modifiers specified in .I virtual_mask. The .I virtual_mask parameter is a mask specifying the virtual modifiers to translate; the i-th bit (0 relative) of the mask represents the i-th virtual modifier. If .I mask_rtrn is non-NULL, .I XkbVirtualModsToReal backfills it with the resulting real modifier mask. If the keyboard description in .I xkb does not include virtual modifier bindings, .I XkbVirtualModsToReal returns False; otherwise, it returns True. .SH "RETURN VALUES" .TP 15 True The .I XkbVirtualModsToReal function returns True if the keyboard description in .I xkb does include virtual modifier bindings. .TP 15 False The .I XkbVirtualModsToReal function returns False if the keyboard description in .I xkb does not include virtual modifier bindings. .SH "SEE ALSO" .BR XkbGetMap (__libmansuffix__), .BR XkbGetVirtualMods (__libmansuffix__) .SH NOTES .LP It is possible for a local (client-side) keyboard description (the .I xkb parameter) to not contain any virtual modifier information (simply because the client has not requested it) while the server's corresponding definition may contain virtual modifier information. libX11-1.6.3/man/xkb/XkbNoteNameChanges.man000064401431060000012000000061151247741723500205610ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbNoteNameChanges __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbNoteNameChanges \- Note the changed names in a changes structure .SH SYNOPSIS .HP .B void XkbNoteNameChanges .BI "(\^XkbNameChangesPtr " "old" "\^," .BI "XkbNamesNotifyEvent *" "new" "\^," .BI "unsigned int " "wanted" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- old XkbNameChanges structure to be updated .TP .I \- new event from which changes are to be copied .TP .I \- wanted types of names for which changes are to be noted .SH DESCRIPTION .LP When your application receives a XkbNamesNotify event, you can note the changed names in a changes structure using .I XkbNoteNameChanges. The .I wanted parameter is the bitwise inclusive OR of the valid names mask bits shown in Table 1. .I XkbNoteNameChanges copies any changes that are reported in .I new and specified in .I wanted into the changes record specified by .I old. .TS c s s s l l l l. Table 1 Symbolic Names Masks _ Mask Bit Value Keyboard Field Component _ XkbKeycodesNameMask (1<<0) Xkb->names keycodes XkbGeometryNameMask (1<<1) Xkb->names geometry XkbSymbolsNameMask (1<<2) Xkb->names symbols XkbPhysSymbolsNameMask (1<<3) Xkb->names phys_symbols XkbTypesNameMask (1<<4) Xkb->names type XkbCompatNameMask (1<<5) Xkb->names compat XkbKeyTypeNamesMask (1<<6) Xkb->map type[*].name XkbKTLevelNamesMask (1<<7) Xkb->map type[*].lvl_names[*] XkbIndicatorNamesMask (1<<8) Xkb->names indicators[*] XkbKeyNamesMask (1<<9) Xkb->names keys[*], num_keys XkbKeyAliasesMask (1<<10) Xkb->names key_aliases[*], num_key_aliases XkbVirtualModNamesMask (1<<11) Xkb->names vmods[*] XkbGroupNamesMask (1<<12) Xkb->names groups[*] XkbRGNamesMask (1<<13) Xkb->names radio_groups[*], num_rg XkbComponentNamesMask (0x3f) Xkb->names keycodes, geometry, symbols, physical symbols, types, and compatibility map XkbAllNamesMask (0x3fff) Xkb->names all name components .TE libX11-1.6.3/man/xkb/XkbKeyGroupInfo.man000064401431060000012000000206551247741723500201500ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbKeyGroupInfo __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbKeyGroupInfo \- Returns the number of groups of symbols bound to the key corresponding to keycode .SH SYNOPSIS .HP .B unsigned char XkbKeyGroupInfo .BI "(\^XkbDescPtr " "xkb" "\^," .BI "KeyCode " "keycode" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb Xkb description of interest .TP .I \- keycode keycode of interest .SH DESCRIPTION .LP The .I group_info field of an XkbSymMapRec is an encoded value containing the number of groups of symbols bound to the key as well as the specification of the treatment of out-of-range groups. It is legal for a key to have zero groups, in which case it also has zero symbols and all events from that key yield NoSymbol. To obtain the number of groups of symbols bound to the key, use .I XkbKeyNumGroups. To change the number of groups bound to a key, use .I XkbChangeTypesOfKey. To obtain a mask that determines the treatment of out-of-range groups, use .I XkbKeyGroupInfo and .I XkbOutOfRangeGroupInfo. The keyboard controls contain a .I groups_wrap field specifying the handling of illegal groups on a global basis. That is, when the user performs an action causing the effective group to go out of the legal range, the .I groups_wrap field specifies how to normalize the effective keyboard group to a group that is legal for the keyboard as a whole, but there is no guarantee that the normalized group will be within the range of legal groups for any individual key. The per-key .I group_info field specifies how a key treats a legal effective group if the key does not have a type specified for the group of concern. For example, the Enter key usually has just one group defined. If the user performs an action causing the global keyboard group to change to Group2, the .I group_info field for the Enter key describes how to handle this situation. Out-of-range groups for individual keys are mapped to a legal group using the same options as are used for the overall keyboard group. The particular type of mapping used is controlled by the bits set in the .I group_info flag, as shown in Table 1. .bp .TS c s l l l l. Table 1 group_info Range Normalization _ Bits set in group_info Normalization method _ XkbRedirectIntoRange XkbRedirectIntoRange XkbClampIntoRange XkbClampIntoRange none of the above XkbWrapIntoRange .TE .I XkbKeyGroupInfo returns the group_info field from the XkbSymMapRec structure associated with the key corresponding to .I keycode. .SH STRUCTURES .LP The KeySymMapRec structure is defined as follows: .nf \&#define XkbNumKbdGroups 4 \&#define XkbMaxKbdGroup (XkbNumKbdGroups-1) typedef struct { /\(** map to keysyms for a single keycode */ unsigned char kt_index[XkbNumKbdGroups]; /\(** key type index for each group */ unsigned char group_info; /\(** # of groups and out of range group handling */ unsigned char width; /\(** max # of shift levels for key */ unsigned short offset; /\(** index to keysym table in syms array */ } XkbSymMapRec, *XkbSymMapPtr; .fi .nf The XkbControlsRec structure is defined as follows: \&#define XkbMaxLegalKeyCode 255 \&#define XkbPerKeyBitArraySize ((XkbMaxLegalKeyCode+1)/8) typedef struct { unsigned char mk_dflt_btn; /\(** default button for keyboard driven mouse */ unsigned char num_groups; /\(** number of keyboard groups */ unsigned char groups_wrap; /\(** how to wrap out-of-bounds groups */ XkbModsRec internal; /\(** defines server internal modifiers */ XkbModsRec ignore_lock; /\(** modifiers to ignore when checking for grab */ unsigned int enabled_ctrls; /\(** 1 bit => corresponding boolean control enabled */ unsigned short repeat_delay; /\(** ms delay until first repeat */ unsigned short repeat_interval; /\(** ms delay between repeats */ unsigned short slow_keys_delay; /\(** ms minimum time key must be down to be ok */ unsigned short debounce_delay; /\(** ms delay before key reactivated */ unsigned short mk_delay; /\(** ms delay to second mouse motion event */ unsigned short mk_interval; /\(** ms delay between repeat mouse events */ unsigned short mk_time_to_max; /\(** # intervals until constant mouse move */ unsigned short mk_max_speed; /\(** multiplier for maximum mouse speed */ short mk_curve; /\(** determines mouse move curve type */ unsigned short ax_options; /\(** 1 bit => Access X option enabled */ unsigned short ax_timeout; /\(** seconds until Access X disabled */ unsigned short axt_opts_mask; /\(** 1 bit => options to reset on Access X timeout */ unsigned short axt_opts_values; /\(** 1 bit => turn option on, 0=> off */ unsigned int axt_ctrls_mask; /\(** which bits in enabled_ctrls to modify */ unsigned int axt_ctrls_values; /\(** values for new bits in enabled_ctrls */ unsigned char per_key_repeat[XkbPerKeyBitArraySize]; /\(** per key auto repeat */ } XkbControlsRec, *XkbControlsPtr; .fi .nf The XkbControlsRec structure is defined as follows: \&#define XkbMaxLegalKeyCode 255 \&#define XkbPerKeyBitArraySize ((XkbMaxLegalKeyCode+1)/8) typedef struct { unsigned char mk_dflt_btn; /\(** default button for keyboard driven mouse */ unsigned char num_groups; /\(** number of keyboard groups */ unsigned char groups_wrap; /\(** how to wrap out-of-bounds groups */ XkbModsRec internal; /\(** defines server internal modifiers */ XkbModsRec ignore_lock; /\(** modifiers to ignore when checking for grab */ unsigned int enabled_ctrls; /\(** 1 bit => corresponding boolean control enabled */ unsigned short repeat_delay; /\(** ms delay until first repeat */ unsigned short repeat_interval; /\(** ms delay between repeats */ unsigned short slow_keys_delay; /\(** ms minimum time key must be down to be ok */ unsigned short debounce_delay; /\(** ms delay before key reactivated */ unsigned short mk_delay; /\(** ms delay to second mouse motion event */ unsigned short mk_interval; /\(** ms delay between repeat mouse events */ unsigned short mk_time_to_max; /\(** # intervals until constant mouse move */ unsigned short mk_max_speed; /\(** multiplier for maximum mouse speed */ short mk_curve; /\(** determines mouse move curve type */ unsigned short ax_options; /\(** 1 bit => Access X option enabled */ unsigned short ax_timeout; /\(** seconds until Access X disabled */ unsigned short axt_opts_mask; /\(** 1 bit => options to reset on Access X timeout */ unsigned short axt_opts_values; /\(** 1 bit => turn option on, 0=> off */ unsigned int axt_ctrls_mask; /\(** which bits in enabled_ctrls to modify */ unsigned int axt_ctrls_values; /\(** values for new bits in enabled_ctrls */ unsigned char per_key_repeat[XkbPerKeyBitArraySize]; /\(** per key auto repeat */ } XkbControlsRec, *XkbControlsPtr; .fi .SH "SEE ALSO" .BR XkbChangeTypesOfKey (__libmansuffix__), .BR XkbKeyGroupInfo (__libmansuffix__), .BR XkbOutOfRangeGroupInfo (__libmansuffix__) scPtr " "xkb" "\^," .BI "KeyCode " "keycode" "\^);" .if n .ti +5n .if t .ti +.5i .SlibX11-1.6.3/man/xkb/XkbLibraryVersion.man000064401431060000012000000072711247741723500205400ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbLibraryVersion __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbLibraryVersion \- Determines the compatibility of a library at runtime. .SH SYNOPSIS .HP .B Bool XkbLibraryVersion .BI "(\^int *" "lib_major_in_out" "\^," .BI "int *" "lib_minor_in_out" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I lib_major_in_out Specifies and returns the major Xkb library version. .TP .I lib_minor_in_out Specifies and returns the minor Xkb library version. .SH DESCRIPTION .LP If an application is dynamically linked, both the X server and the client-side X library must contain the Xkb extension in order for the client to use the Xkb extension capabilities. Therefore a dynamically linked application must check both the library and the server for compatibility before using Xkb function calls. A properly written program must check for compatibility between the version of the Xkb library that is dynamically loaded and the one used when the application was built. It must then check the server version for compatibility with the version of Xkb in the library. If your application is statically linked, you must still check for server compatibility and may check library compatibility. (It is possible to compile against one set of header files and link against a different, incompatible, version of the library, although this should not normally occur.) Pass the symbolic value XkbMajorVersion in .I lib_major_in_out and XkbMinorVersion in .I lib_minor_in_out. These arguments represent the version of the library used at compile time. The .I XkbLibraryVersion function backfills the major and minor version numbers of the library used at run time in .I lib_major_in_out and .I lib_minor_in_out. If the versions of the compile time and run time libraries are compatible, .I XkbLibraryVersion returns True, otherwise, it returns False. In addition, in order to use the Xkb extension, you must ensure that the extension is present in the server and that the server supports the version of the extension expected by the client. Use .I XkbQueryExtension to do this, as described in the next section. .SH "RETURN VALUES" .TP 15 True The .I XkbLibraryVersion returns True if the versions of the compile time and run time libraries are compatible. .TP 15 False The .I XkbLibraryVersion returns False if the versions of the compile time and run time libraries are not compatible. .SH "SEE ALSO" .BR XkbMajorVersion (__libmansuffix__), .BR XkbMinorVersion (__libmansuffix__), .BR XkbQueryExtension (__libmansuffix__) libX11-1.6.3/man/xkb/XkbSetAutoRepeatRate.man000064401431060000012000000066271247741723500211330ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbSetAutoRepeatRate __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbSetAutoRepeatRate \- Sets the attributes of the RepeatKeys control for a keyboard device .SH SYNOPSIS .HP .B Bool XkbSetAutoRepeatRate .BI "(\^Display *" "display" "\^," .BI "unsigned int " "device_spec" "\^," .BI "unsigned int " "timeout" "\^," .BI "unsigned int " "interval" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- display connection to X server .TP .I \- device_spec device to configure, or XkbUseCoreKbd .TP .I \- timeout initial delay, ms .TP .I \- interval delay between repeats, ms .SH DESCRIPTION .LP The core protocol allows only control over whether or not the entire keyboard or individual keys should auto-repeat when held down. RepeatKeys is a boolean control that extends this capability by adding control over the delay until a key begins to repeat and the rate at which it repeats. RepeatKeys is coupled with the core auto-repeat control: when RepeatKeys is enabled or disabled, the core auto-repeat is enabled or disabled and vice versa. Auto-repeating keys are controlled by two attributes. The first, .I timeout, is the delay after the initial press of an auto-repeating key and the first generated repeat event. The second, .I interval, is the delay between all subsequent generated repeat events. As with all boolean controls, configuring the attributes that determine how the control operates does not automatically enable the control as a whole. .I XkbSetAutoRepeatRate sends a request to the X server to configure the AutoRepeat control attributes to the values specified in .I timeout and .I interval. .I XkbSetAutoRepeatRate does not wait for a reply; it normally returns True. Specifying a zero value for either .I timeout or .I interval causes the server to generate a BadValue protocol error. If a compatible version of the Xkb extension is not available in the server, .I XkbSetAutoRepeatRate returns False. .SH "RETURN VALUES" .TP 15 True The .I XkbSetAutoRepeatRate function returns True normally. .TP 15 False The .I XkbSetAutoRepeatRate function returns False if a compatible version of the Xkb extension is not available in the server. .SH DIAGNOSTICS .TP 15 .B BadValue An argument is out of range libX11-1.6.3/man/xkb/XkbNoteDeviceChanges.man000064401431060000012000000142011247741723500210730ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbNoteDeviceChanges __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbNoteDeviceChanges \- Note device changes reported in an XkbExtensionDeviceNotify event .SH SYNOPSIS .HP .B void XkbNoteDeviceChanges .BI "(\^XkbDeviceChangesPtr " "old" "\^," .BI "XkbExtensionDeviceNotifyEvent *" "new" "\^," .BI "unsigned int " "wanted" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- old structure tracking state changes .TP .I \- new event indicating state changes .TP .I \- wanted mask indicating changes to note .SH DESCRIPTION .LP The .I wanted field specifies the changes that should be noted in .I old, and is composed of the bitwise inclusive OR of one or more of the masks from Table 1. The .I reason field of the event in .I new indicates the types of changes the event is reporting. .I XkbNoteDeviceChanges updates the XkbDeviceChangesRec specified by .I old with the changes that are both specified in .I wanted and contained in .I new->reason. .nf Table 1 XkbDeviceInfoRec Mask Bits ____________________________________________________________________________________ Name XkbDeviceInfoRec Value Capability If Set Fields Effected ____________________________________________________________________________________ XkbXI_KeyboardsMask (1L <<0) Clients can use all Xkb requests and events with KeyClass devices supported by the input device extension. XkbXI_ButtonActionsMask num_btns (1L <<1) Clients can assign key btn_acts actions to buttons non-KeyClass input extension devices. XkbXI_IndicatorNamesMask leds->names (1L <<2) Clients can assign names to indicators on non-KeyClass input extension devices. XkbXI_IndicatorMapsMask leds->maps (1L <<3) Clients can assign indicator maps to indicators on non-KeyClass input extension devices. XkbXI_IndicatorStateMask leds->state (1L <<4) Clients can request the status of indicators on non-KeyClass input extension devices. XkbXI_IndicatorsMask sz_leds (0x1c) XkbXI_IndicatorNamesMask | num_leds XkbXI_IndicatorMapsMask | leds->* XkbXI_IndicatorStateMask XkbXI_UnsupportedFeaturesMask unsupported (1L <<15) XkbXI_AllDeviceFeaturesMask Those selected (0x1e) XkbXI_IndicatorsMask | by Value Column XkbSI_ButtonActionsMask masks XkbXI_AllFeaturesMask Those selected (0x1f) XkbSI_AllDeviceFeaturesMask | by Value Column XkbSI_KeyboardsMask masks XkbXI_AllDetailsMask Those selected (0x801f) XkbXI_AllFeaturesMask | by Value column XkbXI_UnsupportedFeaturesMask masks .fi To update a local copy of the state and configuration of an X input extension device with the changes previously noted in an XkbDeviceChangesRec structure, use .I XkbGetDeviceInfoChanges. .SH STRUCTURES .LP Changes to an Xkb extension device may be tracked by listening to XkbDeviceExtensionNotify events and accumulating the changes in an XkbDeviceChangesRec structure. The changes noted in the structure may then be used in subsequent operations to update either a server configuration or a local copy of an Xkb extension device configuration. The changes structure is defined as follows: .nf typedef struct _XkbDeviceChanges { unsigned int changed; /\(** bits indicating what has changed */ unsigned short first_btn; /\(** number of first button which changed, if any */ unsigned short num_btns; /\(** number of buttons that have changed */ XkbDeviceLedChangesRec leds; } XkbDeviceChangesRec,*XkbDeviceChangesPtr; .fi .SH "SEE ALSO" .BR XkbGetDeviceInfoChanges (__libmansuffix__) libX11-1.6.3/man/xkb/XkbAddGeomProperty.man000064401431060000012000000060511247741723500206260ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAddGeomProperty __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAddGeomProperty \- Add one property to an existing keyboard geometry description .SH SYNOPSIS .HP .B XkbPropertyPtr XkbAddGeomProperty .BI "(\^XkbGeometryPtr " "geom" "\^," .BI "char *" "name" "\^," .BI "char *" "value" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- geom geometry to be updated .TP .I \- name name of the new property .TP .I \- value value for the new property .SH DESCRIPTION .LP Xkb provides functions to add a single new element to the top-level keyboard geometry. In each case the .I num_ * fields of the corresponding structure is incremented by 1. These functions do not change .I sz_* unless there is no more room in the array. Some of these functions fill in the values of the element's structure from the arguments. For other functions, you must explicitly write code to fill the structure's elements. The top-level geometry description includes a list of .I geometry properties. A geometry property associates an arbitrary string with an equally arbitrary name. Programs that display images of keyboards can use geometry properties as hints, but they are not interpreted by Xkb. No other geometry structures refer to geometry properties. .I XkbAddGeomProperty adds one property with the specified .I name and .I value to the keyboard geometry specified by .I geom. XkbAddGeomProperty returns NULL if any of the parameters is empty or if it was not able to allocate space for the property. To allocate space for an arbitrary number of properties, use the .I XkbAllocGeomProps function. .SH STRUCTURES .LP .nf typedef struct _XkbProperty { char * name; /\(** property name */ char * value; /\(** property value */ } XkbPropertyRec,*XkbPropertyPtr; .fi .SH "SEE ALSO" .BR XkbAllocGeomProps (__libmansuffix__) right notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER .\"libX11-1.6.3/man/xkb/XkbAllocIndicatorMaps.man000064401431060000012000000045301247741723500212710ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAllocIndicatorMaps __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAllocIndicatorMaps \- Allocates, directly, the .I indicators member of the keyboard description record .SH SYNOPSIS .HP .B Status XkbAllocIndicatorMaps .BI "(\^variable_type *" "xkb" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- xkb keyboard description structure .SH DESCRIPTION .LP The .I xkb parameter must point to a valid keyboard description. If it doesn't, .I XkbAllocIndicatorMaps returns a BadMatch error. Otherwise, .I XkbAllocIndicatorMaps allocates and initializes the .I indicators member of the keyboard description record and returns Success. If .I XkbAllocIndicatorMaps was unable to allocate the indicators record, it reports a BadAlloc error. .SH RETURN VALUES" .TP 15 Success The .I XkbAllocIndicatorMaps function returns Success if it is successful in allocating and initializing the .I indicators member of the keyboard description record. .SH DIAGNOSTICS .TP 15 .B BadMatch A compatible version of Xkb was not available in the server or an argument has correct type and range, but is otherwise invalid .TP 15 .B BadAlloc Unable to allocate storage libX11-1.6.3/man/xkb/XkbGetDetectableAutoRepeat.man000064401431060000012000000077451247741723500222620ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbGetDetectableAutoRepeat __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbGetDetectableAutoRepeat \- Determines whether or not the server supports DetectableAutoRepeat .SH SYNOPSIS .HP .B Bool XkbGetDetectableAutoRepeat .BI "(\^Display *" "display" "\^," .BI "Bool *" "supported_rtrn" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- display connection to X server .TP .I \- supported_rtrn backfilled True if DetectableAutoRepeat supported .SH DESCRIPTION .LP Auto-repeat is the generation of multiple key events by a keyboard when the user presses a key and holds it down. Keyboard hardware and device-dependent X server software often implement auto-repeat by generating multiple KeyPress events with no intervening KeyRelease event. The standard behavior of the X server is to generate a KeyRelease event for every KeyPress event. If the keyboard hardware and device-dependent software of the X server implement auto-repeat by generating multiple KeyPress events, the device-independent part of the X server by default synthetically generates a KeyRelease event after each KeyPress event. This provides predictable behavior for X clients, but does not allow those clients to detect the fact that a key is auto-repeating. Xkb allows clients to request .I detectable auto-repeat. If a client requests and the server supports DetectableAutoRepeat, Xkb generates KeyRelease events only when the key is physically released. If DetectableAutoRepeat is not supported or has not been requested, the server synthesizes a KeyRelease event for each repeating KeyPress event it generates. DetectableAutoRepeat, unlike other controls, is not contained in the XkbControlsRec structure, nor can it be enabled or disabled via the EnabledControls control. Instead, query and set DetectableAutoRepeat using .I XkbGetDetectableAutoRepeat and .I XkbSetDetectableAutoRepeat. DetectableAutoRepeat is a condition that applies to all keyboard devices for a client's connection to a given X server; it cannot be selectively set for some devices and not for others. For this reason, none of the Xkb library functions involving DetectableAutoRepeat involve a device specifier. .I XkbGetDetectableAutoRepeat queries the server for the current state of DetectableAutoRepeat and waits for a reply. If .I supported_rtrn is not NULL, it backfills .I supported_rtrn with True if the server supports DetectableAutoRepeat, and False otherwise. .I XkbGetDetectableAutoRepeat returns the current state of DetectableAutoRepeat for the requesting client: True if DetectableAutoRepeat is set, and False otherwise. .SH "RETURN VALUES" .TP 15 True The .I XkbGetDetectableAutoRepeat function returns True if the server supports DetectableAutoRepeat. .TP 15 False The .I XkbGetDetectableAutoRepeat function returns False if the server does not support DetectableAutoRepeat. libX11-1.6.3/man/xkb/XkbFreeGeometry.man000064401431060000012000000057731247741723500201700ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbFreeGeometry __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbFreeGeometry \- Free an entire geometry .SH SYNOPSIS .HP .B void XkbFreeGeometry .BI "(\^XkbGeometryPtr " "geom" "\^," .BI "unsigned int " "which" "\^," .BI "Bool " "free_all" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- geom geometry to be freed .TP .I \- which mask of geometry components to be freed .TP .I \- free_all True => the entire geometry is freed .SH DESCRIPTION .LP Xkb provides a number of functions to allocate and free subcomponents of a keyboard geometry. Use these functions to create or modify keyboard geometries. Note that these functions merely allocate space for the new element(s), and it is up to you to fill in the values explicitly in your code. These allocation functions increase .I sz_* but never touch .I num_* (unless there is an allocation failure, in which case they reset both .I sz_* and .I num_* to zero). These functions return Success if they succeed, BadAlloc if they are not able to allocate space, or BadValue if a parameter is not as expected. The values of .I which and .I free_all determine how much of the specified geometry is freed. The valid values for .I which are: .nf #define XkbGeomPropertiesMask (1<<0) #define XkbGeomColorsMask (1<<1) #define XkbGeomShapesMask (1<<2) #define XkbGeomSectionsMask (1<<3) #define XkbGeomDoodadsMask (1<<4) #define XkbGeomKeyAliasesMask (1<<5) #define XkbGeomAllMask (0x3f) .fi If .I free_all is True, the entire geometry is freed regardless of the value of .I which. Otherwise, the portions of the geometry specified by .I which are freed. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadValue An argument is out of range libX11-1.6.3/man/xkb/XkbSetNames.man000064401431060000012000000157051247741723500173060ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbSetNames __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbSetNames \- Change the symbolic names in the server .SH SYNOPSIS .HP .B Bool XkbSetNames .BI "(\^Display *" "dpy" "\^," .BI "unsigned int " "which" "\^," .BI "unsigned int " "first_type" "\^," .BI "unsigned int " "num_types" "\^," .BI "XkbDescPtr " "xkb" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to the X server .TP .I \- which mask of names or map components to be changed .TP .I \- first_type first type whose name is to be changed .TP .I \- num_types number of types for which names are to be changed .TP .I \- xkb keyboard description from which names are to be taken .SH DESCRIPTION .LP To change the symbolic names in the server, first modify a local copy of the keyboard description and then use either .I XkbSetNames, or, to save network traffic, use a XkbNameChangesRecstructure and call .I XkbChangeNames to download the changes to the server. .I XkbSetNames and .I XkbChangeNames can generate BadAlloc, BadAtom, BadLength, BadMatch, and BadImplementation errors. Use .I XkbSetNames to change many names at the same time. For each bit set in .I which, XkbSetNames takes the corresponding value (or values in the case of arrays) from the keyboard description .I xkb and sends it to the server. The .I first_type and .I num_types arguments are used only if XkbKeyTypeNamesMask or XkbKTLevelNamesMask is set in .I which and specify a subset of the types for which the corresponding names are to be changed. If either or both of these mask bits are set but the specified types are illegal, .I XkbSetNames returns False and does not update any of the names specified in .I which. The specified types are illegal if .I xkb does not include a map component or if .I first_type and .I num_types specify types that are not defined in the keyboard description. .SH STRUCTURES .LP The XkbNameChangesRec allows applications to identify small modifications to the symbolic names and effectively reduces the amount of traffic sent to the server: .nf typedef struct _XkbNameChanges { unsigned int changed; /\(** name components that have changed */ unsigned char first_type; /\(** first key type with a new name */ unsigned char num_types; /\(** number of types with new names */ unsigned char first_lvl; /\(** first key type with new level names */ unsigned char num_lvls; /\(** number of key types with new level names */ unsigned char num_aliases; /\(** if key aliases changed, total number of key aliases */ unsigned char num_rg; /\(** if radio groups changed, total number of radio groups */ unsigned char first_key; /\(** first key with a new name */ unsigned char num_keys; /\(** number of keys with new names */ unsigned short changed_vmods; /\(** mask of virtual modifiers for which names have changed */ unsigned long changed_indicators; /\(** mask of indicators for which names were changed */ unsigned char changed_groups; /\(** mask of groups for which names were changed */ } XkbNameChangesRec, *XkbNameChangesPtr .fi The .I changed field specifies the name components that have changed and is the bitwise inclusive OR of the valid names mask bits defined in Table 1. The rest of the fields in the structure specify the ranges that have changed for the various kinds of symbolic names, as shown in Table 2. Xkb provides several functions that work with symbolic names. Each of these functions uses a mask to specify individual fields of the structures described above. These masks and their relationships to the fields in a keyboard description are shown in Table 1. .TS c s s s l l l l. Table 1 Symbolic Names Masks _ Mask Bit Value Keyboard Field Component _ XkbKeycodesNameMask (1<<0) Xkb->names keycodes XkbGeometryNameMask (1<<1) Xkb->names geometry XkbSymbolsNameMask (1<<2) Xkb->names symbols XkbPhysSymbolsNameMask (1<<3) Xkb->names phys_symbols XkbTypesNameMask (1<<4) Xkb->names type XkbCompatNameMask (1<<5) Xkb->names compat XkbKeyTypeNamesMask (1<<6) Xkb->map type[*].name XkbKTLevelNamesMask (1<<7) Xkb->map type[*].lvl_names[*] XkbIndicatorNamesMask (1<<8) Xkb->names indicators[*] XkbKeyNamesMask (1<<9) Xkb->names keys[*], num_keys XkbKeyAliasesMask (1<<10) Xkb->names key_aliases[*], num_key_aliases XkbVirtualModNamesMask (1<<11) Xkb->names vmods[*] XkbGroupNamesMask (1<<12) Xkb->names groups[*] XkbRGNamesMask (1<<13) Xkb->names radio_groups[*], num_rg XkbComponentNamesMask (0x3f) Xkb->names keycodes, geometry, symbols, physical symbols, types, and compatibility map XkbAllNamesMask (0x3fff) Xkb->names all name components .TE .TS c s s s l l l l. Table 2 XkbNameChanges Fields _ Mask Fields Component Field _ XkbKeyTypeNamesMask first_type, Xkb->map type[*].name num_types XkbKTLevelNamesMask first_lvl, Xkb->map type[*].lvl_names[*] num_lvls XkbKeyAliasesMask num_aliases Xkb->names key_aliases[*] XkbRGNamesMask num_rg Xkb->names radio_groups[*] XkbKeyNamesMask first_key, Xkb->names keys[*] num_keys XkbVirtualModNamesMask changed_vmods Xkb->names vmods[*] XkbIndicatorNamesMask changed_indicators Xkb->names indicators[*] XkbGroupNamesMask changed_groups Xkb->names groups[*] .TE .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadAtom A name is neither a valid Atom or None .TP 15 .B BadImplementation Invalid reply from server .TP 15 .B BadLength The length of a request is shorter or longer than that required to minimally contain the arguments .TP 15 .B BadMatch A compatible version of Xkb was not available in the server or an argument has correct type and range, but is otherwise invalid .SH "SEE ALSO" .BR XkbChangeNames (__libmansuffix__) libX11-1.6.3/man/xkb/XkbGetUpdatedMap.man000064401431060000012000000150021247741723500202410ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbGetUpdatedMap __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbGetUpdatedMap \- Update the client or server map information in an existing keyboard description .SH SYNOPSIS .HP .B Status XkbGetUpdatedMap .BI "(\^Display *" "display" "\^," .BI "unsigned int " "which" "\^," .BI "XkbDescPtr " "xkb" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- display connection to X server .TP .I \- which mask selecting subcomponents to populate .TP .I \- xkb keyboard description to be updated .SH DESCRIPTION .LP The .I which parameter is a bitwise inclusive OR of the masks in Table 1. If the needed components of the .I xkb structure are not already allocated, .I XkbGetUpdatedMap allocates them. .I XkbGetUpdatedMap fetches the requested information for the device specified in the XkbDescRec passed in the .I xkb parameter. .TS c s s s s c s s s s l l l l l l l l l l lw(3i) l l lw(1i) lw(3i). Table 1 Xkb Mapping Component Masks and Convenience Functions _ Mask Value Map Fields Convenience Functions _ T{ XkbKeyTypesMask T} (1<<0) client T{ types .br size_types .br num_types T} T{ XkbGetKeyTypes .br XkbResizeKeyType .br XkbCopyKeyType .br XkbCopyKeyTypes T} T{ XkbKeySymsMask T} (1<<1) client T{ syms .br size_syms .br num_syms .br key_sym_map T} T{ XkbGetKeySyms .br XkbResizeKeySyms .br XkbChangeTypesOfKey T} T{ XkbModifierMapMask T} (1<<2) client modmap T{ XkbGetKeyModifierMap T} T{ XkbExplicitComponentsMask T} (1<<3) server T{ explicit T} T{ XkbGetKeyExplicitComponents T} T{ XkbKeyActionsMask T} (1<<4) server T{ key_acts .br acts .br num_acts .br size_acts T} T{ XkbGetKeyActions .br XkbResizeKeyActions T} T{ XkbKeyBehaviorsMask T} (1<<5) server T{ behaviors T} T{ XkbGetKeyBehaviors T} T{ XkbVirtualModsMask T} (1<<6) server T{ vmods T} T{ XkbGetVirtualMods T} T{ XkbVirtualModMapMask T} (1<<7) server T{ vmodmap T} T{ XkbGetVirtualModMap T} .TE .I XkbGetUpdatedMap is synchronous; it queries the server for the desired information, waits for a reply, and then returns. If successful, .I XkbGetUpdatedMap returns Success. If unsuccessful, .I XkbGetUpdatedMap returns one of the following: BadAlloc (unable to allocate a component in the XkbDescRec structure), BadValue (some mask bits in .I which are undefined), BadImplementation (a compatible version of the Xkb extension is not available in the server or the reply from the server was invalid). .SH "RETURN VALUES" .TP 15 Success The .I XkbGetUpdatedMap function returns Success if a reply is received to the server query for the desired information. .SH STRUCTURES .LP The complete description of an Xkb keyboard is given by an XkbDescRec. The component structures in the XkbDescRec represent the major Xkb components. .nf typedef struct { struct _XDisplay * display; /\(** connection to X server */ unsigned short flags; /\(** private to Xkb, do not modify */ unsigned short device_spec; /\(** device of interest */ KeyCode min_key_code; /\(** minimum keycode for device */ KeyCode max_key_code; /\(** maximum keycode for device */ XkbControlsPtr ctrls; /\(** controls */ XkbServerMapPtr server; /\(** server keymap */ XkbClientMapPtr map; /\(** client keymap */ XkbIndicatorPtr indicators; /\(** indicator map */ XkbNamesPtr names; /\(** names for all components */ XkbCompatMapPtr compat; /\(** compatibility map */ XkbGeometryPtr geom; /\(** physical geometry of keyboard */ } XkbDescRec, *XkbDescPtr; .fi The .I display field points to an X display structure. The .I flags field is private to the library: modifying .I flags may yield unpredictable results. The .I device_spec field specifies the device identifier of the keyboard input device, or XkbUseCoreKeyboard, which specifies the core keyboard device. The .I min_key_code and .I max_key_code fields specify the least and greatest keycode that can be returned by the keyboard. Each structure component has a corresponding mask bit that is used in function calls to indicate that the structure should be manipulated in some manner, such as allocating it or freeing it. These masks and their relationships to the fields in the XkbDescRec are shown in Table 2. .bp .TS c s s l l l l l l. Table 2 Mask Bits for XkbDescRec _ Mask Bit XkbDescRec Field Value _ XkbControlsMask ctrls (1L<<0) XkbServerMapMask server (1L<<1) XkbIClientMapMask map (1L<<2) XkbIndicatorMapMask indicators (1L<<3) XkbNamesMask names (1L<<4) XkbCompatMapMask compat (1L<<5) XkbGeometryMask geom (1L<<6) XkbAllComponentsMask All Fields (0x7f) .TE .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadImplementation Invalid reply from server .TP 15 .B BadValue An argument is out of range .SH "SEE ALSO" .BR XkbChangeTypesOfKey (__libmansuffix__), .BR XkbCopyKeyType (__libmansuffix__), .BR XkbCopyKeyTypes (__libmansuffix__), .BR XkbGetKeyActions (__libmansuffix__), .BR XkbGetKeyBehaviors (__libmansuffix__), .BR XkbGetKeyExplicitComponents (__libmansuffix__), .BR XkbGetKeyModifierMap (__libmansuffix__), .BR XkbGetKeySyms (__libmansuffix__), .BR XkbGetKeyTypes (__libmansuffix__), .BR XkbResizeKeyActions (__libmansuffix__), .BR XkbResizeKeySyms (__libmansuffix__), .BR XkbResizeKeyType (__libmansuffix__), .BR XkbGetVirtualModMap (__libmansuffix__), .BR XkbGetVirtualMods (__libmansuffix__) libX11-1.6.3/man/xkb/XkbGetAccessXTimeout.man000064401431060000012000000134301247741723500211200ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbGetAccessXTimeout __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbGetAccessXTimeout \- Queries the current AccessXTimeout options for a keyboard device .SH SYNOPSIS .HP .B Bool XkbGetAccessXTimeout .BI "(\^Display *" "display" "\^," .BI "unsigned int " "device_spec" "\^," .BI "unsigned short *" "timeout_rtrn" "\^," .BI "unsigned int *" "ctrls_mask_rtrn" "\^," .BI "unsigned int *" "ctrls_values_rtrn" "\^," .BI "unsigned short *" "options_mask_rtrn" "\^," .BI "unsigned short *" "options_values_rtrn" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- display unsigned short .TP .I \- device_spec device to query, or XkbUseCoreKbd .TP .I \- timeout_rtrn delay until AccessXTimeout, seconds .TP .I \- ctrls_mask_rtrn backfilled with controls to modify .TP .I \- ctrls_values_rtrn backfilled with on/off status for controls .TP .I \- options_mask_rtrn backfilled with ax_options to modify .TP .I \- options_values_rtrn backfilled with values for ax_options .SH DESCRIPTION .LP In environments where computers are shared, features such as SlowKeys present a problem: if SlowKeys is on, the keyboard can appear to be unresponsive because keys are not accepted until they are held for a certain period of time. To help solve this problem, Xkb provides an AccessXTimeout control to automatically change the enabled/disabled state of any boolean controls and to change the value of the AccessXKeys and AccessXFeedback control attributes if the keyboard is idle for a specified period of time. When a timeout as specified by AccessXTimeout occurs and a control is consequently modified, Xkb generates an XkbControlsNotify event. .I XkbGetAccessXTimeout sends a request to the X server to obtain the current values for the AccessXTimeout attributes, waits for a reply, and backfills the values into the appropriate arguments. The parameters .I options_mask_rtrn and .I options_values_rtrn are backfilled with the options to modify and the values for .I ax_options, which is a field in the XkbControlsRec structure. .I XkbGetAccessXTimeout returns True if successful; if a compatible version of the Xkb extension is not available in the server, .I XkbGetAccessXTimeout returns False. .SH "RETURN VALUES" .TP 15 True The .I XkbGetAccessXTimeout returns True when it successfully sends a request to the X server to obtain the current values for the AccessXTimeout attributes, waits for a reply, and backfills the values into the appropriate arguments. .TP 15 False The .I XkbGetAccessXTimeout funtion returns False if a compatible version of the Xkb extension is not available in the server. .SH STRUCTURES .LP .nf The XkbControlsRec structure is defined as follows: \&#define XkbMaxLegalKeyCode 255 \&#define XkbPerKeyBitArraySize ((XkbMaxLegalKeyCode+1)/8) typedef struct { unsigned char mk_dflt_btn; /\(** default button for keyboard driven mouse */ unsigned char num_groups; /\(** number of keyboard groups */ unsigned char groups_wrap; /\(** how to wrap out-of-bounds groups */ XkbModsRec internal; /\(** defines server internal modifiers */ XkbModsRec ignore_lock; /\(** modifiers to ignore when checking for grab */ unsigned int enabled_ctrls; /\(** 1 bit => corresponding boolean control enabled */ unsigned short repeat_delay; /\(** ms delay until first repeat */ unsigned short repeat_interval; /\(** ms delay between repeats */ unsigned short slow_keys_delay; /\(** ms minimum time key must be down to be ok */ unsigned short debounce_delay; /\(** ms delay before key reactivated */ unsigned short mk_delay; /\(** ms delay to second mouse motion event */ unsigned short mk_interval; /\(** ms delay between repeat mouse events */ unsigned short mk_time_to_max; /\(** # intervals until constant mouse move */ unsigned short mk_max_speed; /\(** multiplier for maximum mouse speed */ short mk_curve; /\(** determines mouse move curve type */ unsigned short ax_options; /\(** 1 bit => Access X option enabled */ unsigned short ax_timeout; /\(** seconds until Access X disabled */ unsigned short axt_opts_mask; /\(** 1 bit => options to reset on Access X timeout */ unsigned short axt_opts_values; /\(** 1 bit => turn option on, 0=> off */ unsigned int axt_ctrls_mask; /\(** which bits in enabled_ctrls to modify */ unsigned int axt_ctrls_values; /\(** values for new bits in enabled_ctrls */ unsigned char per_key_repeat[XkbPerKeyBitArraySize]; /\(** per key auto repeat */ } XkbControlsRec, *XkbControlsPtr; .fi libX11-1.6.3/man/xkb/XkbGetNameChanges.man000064401431060000012000000045511247741723500203750ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbGetNameChanges __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbGetNameChanges \- Update the local copy of the keyboard description with the actual values of the results of one or more calls to .I XkbNoteNameChanges .SH SYNOPSIS .HP .B Status XkbGetNameChanges .BI "(\^Display *" "dpy" "\^," .BI "XkbDescPtr " "xkb" "\^," .BI "XkbNameChangesPtr " "changes" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to the X server .TP .I \- xkb keyboard description to which names are copied .TP .I \- changes names components to be obtained from the server .SH DESCRIPTION .LP .I XkbGetNameChanges examines the .I changes parameter, retrieves the necessary information from the server, and places the results into the .I xkb keyboard description. .I XkbGetNamesChanges can generate BadAlloc, BadImplementation, and BadMatch errors. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadImplementation Invalid reply from server .TP 15 .B BadMatch A compatible version of Xkb was not available in the server or an argument has correct type and range, but is otherwise invalid .SH "SEE ALSO" .BR XkbNoteNameChanges (__libmansuffix__) libX11-1.6.3/man/xkb/XkbAllocGeomProps.man000064401431060000012000000052631247741723500204530ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbAllocGeomProps __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbAllocGeomProps \- Allocate geometry properties .SH SYNOPSIS .HP .B Status XkbAllocGeomProps .BI "(\^XkbGeometryPtr " "geom" "\^," .BI "int " "num_needed" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- geom _summary_ .TP .I \- num_needed _summary_ .SH DESCRIPTION .LP Xkb provides a number of functions to allocate and free subcomponents of a keyboard geometry. Use these functions to create or modify keyboard geometries. Note that these functions merely allocate space for the new element(s), and it is up to you to fill in the values explicitly in your code. These allocation functions increase .I sz_* but never touch .I num_* (unless there is an allocation failure, in which case they reset both .I sz_* and .I num_* to zero). These functions return Success if they succeed, BadAlloc if they are not able to allocate space, or BadValue if a parameter is not as expected. .I XkbAllocGeomProps allocates space for .I num_needed properties and adds them to the specified geometry .I geom. No initialization of the properties is done. A geometry property associates an arbitrary string with an equally arbitrary name. Geometry properties can be used to provide hints to programs that display images of keyboards, but they are not interpreted by Xkb. No other geometry structures refer to geometry properties. .SH DIAGNOSTICS .TP 15 .B BadAlloc Unable to allocate storage .TP 15 .B BadValue An argument is out of range libX11-1.6.3/man/xkb/XkbLookupKeyBinding.man000064401431060000012000000052421247741723500207770ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbLookupKeyBinding __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbLookupKeyBinding \- Find the string bound to a key by XRebindKeySym .SH SYNOPSIS .HP .B int XkbLookupKeyBinding .BI "(\^Display *" "dpy" "\^," .BI "KeySym " "sym" "\^," .BI "unsigned int " "state" "\^," .BI "char *" "buf" "\^," .BI "int " "nbytes" "\^," .BI "int *" "extra_rtrn" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- dpy connection to server .TP .I \- sym connection to server .TP .I \- state state for which string is to be looked up .TP .I \- buf buffer into which returned string is written .TP .I \- nbytes size of buffer in bytes .TP .I \- extra_rtrn backfilled with number bytes overflow .SH DESCRIPTION .LP .I XkbLookupKeyBinding is the equivalent of the core .I XLookupString function. .I XRebindKeysym binds an ASCII string to a specified keysym, so that the string and keysym are returned when the key is pressed and a specified list of modifiers are also being held down. .I XkbLookupKeyBinding returns in .I buf the string associated with the keysym .I sym and modifier state .I state. buf is NULL terminated unless there's an overflow. If the string returned is larger than .I nbytes, a count of bytes that does not fit into the buffer is returned in .I extra_rtrn. .I XkbTranslateKeySym returns the number of bytes that it placed into .I buf. .SH "SEE ALSO" .BR XkbTranslateKeySym (__libmansuffix__), .BR XLookupString (__libmansuffix__), .BR XRebindKeysym (__libmansuffix__) libX11-1.6.3/man/xkb/XkbOutOfRangeGroupInfo.man000064401431060000012000000212121247741723500214170ustar00alancstaff00002660200006'\" t .\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbOutOfRangeGroupInfo __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbOutOfRangeGroupInfo \- Returns only the out-of-range processing information from the group_info field of an XkbSymMapRec structure .SH SYNOPSIS .HP .B unsigned char XkbOutOfRangeGroupInfo .BI "(\^unsigned char " "grp_inf" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- grp_inf Xkb description of interest .SH DESCRIPTION .LP .I XkbOutOfRangeGroupInfo returns only the out-of-range processing information from the .I group_info field of an XkbSymMapRec structure. The .I group_info field of an XkbSymMapRec is an encoded value containing the number of groups of symbols bound to the key as well as the specification of the treatment of out-of-range groups. It is legal for a key to have zero groups, in which case it also has zero symbols and all events from that key yield NoSymbol. To obtain the number of groups of symbols bound to the key, use .I XkbKeyNumGroups. To change the number of groups bound to a key, use .I XkbChangeTypesOfKey. To obtain a mask that determines the treatment of out-of-range groups, use .I XkbKeyGroupInfo and .I XkbOutOfRangeGroupInfo. The keyboard controls contain a .I groups_wrap field specifying the handling of illegal groups on a global basis. That is, when the user performs an action causing the effective group to go out of the legal range, the .I groups_wrap field specifies how to normalize the effective keyboard group to a group that is legal for the keyboard as a whole, but there is no guarantee that the normalized group will be within the range of legal groups for any individual key. The per-key .I group_info field specifies how a key treats a legal effective group if the key does not have a type specified for the group of concern. For example, the Enter key usually has just one group defined. If the user performs an action causing the global keyboard group to change to Group2, the .I group_info field for the Enter key describes how to handle this situation. Out-of-range groups for individual keys are mapped to a legal group using the same options as are used for the overall keyboard group. The particular type of mapping used is controlled by the bits set in the .I group_info flag, as shown in Table 1. .bp .TS c s l l l l. Table 1 group_info Range Normalization _ Bits set in group_info Normalization method _ XkbRedirectIntoRange XkbRedirectIntoRange XkbClampIntoRange XkbClampIntoRange none of the above XkbWrapIntoRange .TE .SH STRUCTURES .LP The KeySymMapRec structure is defined as follows: .nf #define XkbNumKbdGroups 4 #define XkbMaxKbdGroup (XkbNumKbdGroups-1) typedef struct { /\(** map to keysyms for a single keycode */ unsigned char kt_index[XkbNumKbdGroups]; /\(** key type index for each group */ unsigned char group_info; /\(** # of groups and out of range group handling */ unsigned char width; /\(** max # of shift levels for key */ unsigned short offset; /\(** index to keysym table in syms array */ } XkbSymMapRec, *XkbSymMapPtr; .fi .nf The XkbControlsRec structure is defined as follows: #define XkbMaxLegalKeyCode 255 #define XkbPerKeyBitArraySize ((XkbMaxLegalKeyCode+1)/8) typedef struct { unsigned char mk_dflt_btn; /\(** default button for keyboard driven mouse */ unsigned char num_groups; /\(** number of keyboard groups */ unsigned char groups_wrap; /\(** how to wrap out-of-bounds groups */ XkbModsRec internal; /\(** defines server internal modifiers */ XkbModsRec ignore_lock; /\(** modifiers to ignore when checking for grab */ unsigned int enabled_ctrls; /\(** 1 bit => corresponding boolean control enabled */ unsigned short repeat_delay; /\(** ms delay until first repeat */ unsigned short repeat_interval; /\(** ms delay between repeats */ unsigned short slow_keys_delay; /\(** ms minimum time key must be down to be ok */ unsigned short debounce_delay; /\(** ms delay before key reactivated */ unsigned short mk_delay; /\(** ms delay to second mouse motion event */ unsigned short mk_interval; /\(** ms delay between repeat mouse events */ unsigned short mk_time_to_max; /\(** # intervals until constant mouse move */ unsigned short mk_max_speed; /\(** multiplier for maximum mouse speed */ short mk_curve; /\(** determines mouse move curve type */ unsigned short ax_options; /\(** 1 bit => Access X option enabled */ unsigned short ax_timeout; /\(** seconds until Access X disabled */ unsigned short axt_opts_mask; /\(** 1 bit => options to reset on Access X timeout */ unsigned short axt_opts_values; /\(** 1 bit => turn option on, 0=> off */ unsigned int axt_ctrls_mask; /\(** which bits in enabled_ctrls to modify */ unsigned int axt_ctrls_values; /\(** values for new bits in enabled_ctrls */ unsigned char per_key_repeat[XkbPerKeyBitArraySize]; /\(** per key auto repeat */ } XkbControlsRec, *XkbControlsPtr; .fi .nf The XkbControlsRec structure is defined as follows: #define XkbMaxLegalKeyCode 255 #define XkbPerKeyBitArraySize ((XkbMaxLegalKeyCode+1)/8) typedef struct { unsigned char mk_dflt_btn; /\(** default button for keyboard driven mouse */ unsigned char num_groups; /\(** number of keyboard groups */ unsigned char groups_wrap; /\(** how to wrap out-of-bounds groups */ XkbModsRec internal; /\(** defines server internal modifiers */ XkbModsRec ignore_lock; /\(** modifiers to ignore when checking for grab */ unsigned int enabled_ctrls; /\(** 1 bit => corresponding boolean control enabled */ unsigned short repeat_delay; /\(** ms delay until first repeat */ unsigned short repeat_interval; /\(** ms delay between repeats */ unsigned short slow_keys_delay; /\(** ms minimum time key must be down to be ok */ unsigned short debounce_delay; /\(** ms delay before key reactivated */ unsigned short mk_delay; /\(** ms delay to second mouse motion event */ unsigned short mk_interval; /\(** ms delay between repeat mouse events */ unsigned short mk_time_to_max; /\(** # intervals until constant mouse move */ unsigned short mk_max_speed; /\(** multiplier for maximum mouse speed */ short mk_curve; /\(** determines mouse move curve type */ unsigned short ax_options; /\(** 1 bit => Access X option enabled */ unsigned short ax_timeout; /\(** seconds until Access X disabled */ unsigned short axt_opts_mask; /\(** 1 bit => options to reset on Access X timeout */ unsigned short axt_opts_values; /\(** 1 bit => turn option on, 0=> off */ unsigned int axt_ctrls_mask; /\(** which bits in enabled_ctrls to modify */ unsigned int axt_ctrls_values; /\(** values for new bits in enabled_ctrls */ unsigned char per_key_repeat[XkbPerKeyBitArraySize]; /\(** per key auto repeat */ } XkbControlsRec, *XkbControlsPtr; .fi .SH "SEE ALSO" .BR XkbChangeTypesOfKey (__libmansuffix__), .BR XkbKeyGroupInfo (__libmansuffix__), .BR XkbOutOfRangeGroupInfo. (__libmansuffix__) to a group that is legal for the keyboard as a whole, but there is no guarantee that the normalized group will be within the range of legal groups for any individual key. The per-key .I group_info field specifies how a key treats a legal effective group if the key does not have a type specified for the group of concern. For example, the Enter key usually has just libX11-1.6.3/man/xkb/XkbFreeGeomOutlines.man000064401431060000012000000036241247741723500210000ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbFreeGeomOutlines __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbFreeGeomOutlines \- Free geometry outlines .SH SYNOPSIS .HP .B void XkbFreeGeomOutlines .BI "(\^XkbShapePtr " "shape" "\^," .BI "int " "first" "\^," .BI "int " "count" "\^," .BI "Bool " "free_all" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- shape shape in which outlines should be freed .TP .I \- first first outline to be freed .TP .I \- count number of outlines to be freed .TP .I \- free_all True => all outlines are freed .SH DESCRIPTION .LP If .I free_all is True, all outlines are freed regardless of the value of .I first or .I count. Otherwise, .I count outlines are freed beginning with the one specified by .I first. libX11-1.6.3/man/xkb/XkbOpenDisplay.man000064401431060000012000000113171247741723500200110ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbOpenDisplay __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbOpenDisplay \- Checks for a compatible version of the Xkb extension in both the library and the server, and initializes the extension for use. .SH SYNOPSIS .HP .B Display XkbOpenDisplay .BI "(\^char *" "display_name" "\^," .BI "int *" "event_rtrn" "\^," .BI "int *" "error_rtrn" "\^," .BI "int *" "major_in_out" "\^," .BI "int *" "minor_in_out" "\^," .BI "int *" "reason_rtrn" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I display_name hardware display name, which determines the display and communications domain to be used .TP .I event_rtrn backfilled with the extension base event code .TP .I error_rtrn backfilled with the extension base error code .TP .I major_in_out compile time lib major version in, server major version out .TP .I minor_in_out compile time lib min version in, server minor version out .TP .I reason_rtrn backfilled with a status code .SH DESCRIPTION .LP As a convenience, you can use the function .I XkbOpenDisplay to perform these three tasks at once: open a connection to an X server, check for a compatible version of the Xkb extension in both the library and the server, and initialize the extension for use. .I XkbOpenDisplay is a convenience function that opens an X display connection and initializes the X keyboard extension. In all cases, upon return .I reason_rtrn contains a status value indicating success or the type of failure. If .I major_in_out and .I minor_in_out are not NULL, .I XkbOpenDisplay first calls .I XkbLibraryVersion to determine whether the client library is compatible, passing it the values pointed to by .I major_in_out and .I minor_in_out. If the library is incompatible, .I XkbOpenDisplay backfills .I major_in_out and .I minor_in_out with the major and minor extension versions of the library being used and returns NULL. If the library is compatible, .I XkbOpenDisplay next calls .I XOpenDisplay with the .I display_name. If this fails, the function returns NULL. If successful, .I XkbOpenDisplay calls .I XkbQueryExtension and backfills the major and minor Xkb server extension version numbers in .I major_in_out and .I minor_in_out. If the server extension version is not compatible with the library extension version or if the server extension is not present, .I XkbOpenDisplay closes the display and returns NULL. When successful, the function returns the display connection. The possible values for reason_rtrn are: .IP \(bu 5 XkbOD_BadLibraryVersion indicates XkbLibraryVersion returned False. .IP \(bu 5 XkbOD_ConnectionRefused indicates the display could not be opened. .IP \(bu 5 XkbOD_BadServerVersion indicates the library and the server have incompatible extension versions. .IP \(bu 5 XkbOD_NonXkbServer indicates the extension is not present in the X server. .IP \(bu 5 XkbOD_Success indicates that the function succeeded. .SH "RETURN VALUES" .TP 15 NULL The .I XkbOpenDisplay function returns NULL if the library is incompatible. .sp .in 20 The .I XkbOpenDisplay function returns NULL if the call to .I XOpenDisplay with the .I display_name fails. .sp .in 20 The .I XkbOpenDisplay function returns NULL and closes the display if the server extension version is not compatible with the library extension version or if the server extension is not present. .SH DIAGNOSTICS .TP 15 .SM BadAccess The Xkb extension has not been properly initialized .SH "SEE ALSO" .BR XkbLibraryVersion (__libmansuffix__), .BR XkbQueryExtension (__libmansuffix__), .BR XOpenDisplay (__libmansuffix__) FTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER .\"libX11-1.6.3/man/xkb/XkbSARedirectVModsMask.man000064401431060000012000000103431247741723500213320ustar00alancstaff00002660200006.\" Copyright 1999 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .TH XkbSARedirectVModsMask __libmansuffix__ __xorgversion__ "XKB FUNCTIONS" .SH NAME XkbSARedirectVModsMask \- Returns the vmods_mask0 and vmods_mask1 fields of act converted to an unsigned int .SH SYNOPSIS .HP .B unsigned int XkbSARedirectVModsMask .BI "(\^XkbRedirectKeyAction " "act" "\^);" .if n .ti +5n .if t .ti +.5i .SH ARGUMENTS .TP .I \- act action from which to extract vmods .SH DESCRIPTION .LP Actions associated with the XkbRedirectKeyAction structure generate KeyPress and KeyRelease events containing a keycode different from the key that was pressed or released. The .I type field for the XkbRedirectKeyAction structure should always be XkbSA_RedirectKey. Key presses cause a KeyPress event for the key specified by the .I new_key field instead of the actual key. The state reported in this event reports the current effective modifiers changed as follows: any real modifiers selected by the .I mods_mask field are set to corresponding values from the .I mods field. Any real modifiers bound to the virtual modifiers specified by the .I vmods_mask0 and .I vmods_mask1 fields are either set or cleared, depending on the corresponding values in the .I vmods0 and .I vmods1 fields. If the real and virtual modifier definitions specify conflicting values for a single modifier, the real modifier definition has priority. Key releases cause a KeyRelease event for the key specified by the .I new_key field instead of the actual key. The state for this event consists of the effective keyboard modifiers at the time of the release, changed as described previously. The XkbSA_RedirectKey action normally redirects to another key on the same device as the key that caused the event, unless that device does not belong to the input extension KeyClass, in which case this action causes an event on the core keyboard device. (The input extension categorizes devices by breaking them into classes. Keyboards, and other input devices with keys, are classified as KeyClass devices by the input extension.) The .I vmods_mask0 and .I vmods_mask1 fields actually represent one .I vmods_mask value. Xkb provides macros to convert between the two formats. .I XkbSARedirectVModsMask returns the .I vmods_mask0 and .I vmods_mask1 fields of .I act converted to an unsigned int. .bp .SH STRUCTURES .LP .nf typedef struct_XkbRedirectKeyAction { unsigned char type; /\(** XkbSA_RedirectKey */ unsigned char new_key; /\(** keycode to be put in event */ unsigned char mods_mask; /\(** mask of real mods to be reset */ unsigned char mods; /\(** mask of real mods to take values from */ unsigned char vmods_mask0; /\(** first half of mask of virtual mods to be reset */ unsigned char vmods_mask1; /\(** other half of mask of virtual mods to be reset */ unsigned char vmods0; /\(** first half of mask of virtual mods to take values from */ unsigned char vmods1; /\(** other half of mask of virtual mods to take values from */ } XkbRedirectKeyAction; .fi libX11-1.6.3/man/XDrawArcs.man000064401431060000012000000000621247741723500161620ustar00alancstaff00002660200006.so man__libmansuffix__/XDrawArc.__libmansuffix__ libX11-1.6.3/man/XwcTextListToTextProperty.man000064401431060000012000000001031247741723500214770ustar00alancstaff00002660200006.so man__libmansuffix__/XmbTextListToTextProperty.__libmansuffix__ libX11-1.6.3/man/XRemoveConnectionWatch.man000064401431060000012000000000751247741723500207240ustar00alancstaff00002660200006.so man__libmansuffix__/XAddConnectionWatch.__libmansuffix__ libX11-1.6.3/man/XFreeFont.man000064401431060000012000000000631247741723500161650ustar00alancstaff00002660200006.so man__libmansuffix__/XLoadFont.__libmansuffix__ libX11-1.6.3/man/XSetICFocus.man000064401431060000012000000102021247741723500164200ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XSetICFocus __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XSetICFocus, XUnsetICFocus \- set and unset input context focus .SH SYNTAX .HP void XSetICFocus\^(\^XIC \fIic\fP\^); .HP void XUnsetICFocus\^(\^XIC \fIic\fP\^); .SH ARGUMENTS .IP \fIic\fP 1i Specifies the input context. .SH DESCRIPTION The .ZN XSetICFocus function allows a client to notify an input method that the focus window attached to the specified input context has received keyboard focus. The input method should take action to provide appropriate feedback. Complete feedback specification is a matter of user interface policy. .LP Calling .ZN XSetICFocus does not affect the focus window value. .LP The .ZN XUnsetICFocus function allows a client to notify an input method that the specified input context has lost the keyboard focus and that no more input is expected on the focus window attached to that input context. The input method should take action to provide appropriate feedback. Complete feedback specification is a matter of user interface policy. .LP Calling .ZN XUnsetICFocus does not affect the focus window value; the client may still receive events from the input method that are directed to the focus window. .SH "SEE ALSO" XCreateIC(__libmansuffix__), XOpenIM(__libmansuffix__), XSetICValues(__libmansuffix__), XmbResetIC(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XmbDrawString.man000064401431060000012000000114061247741723500170630ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" Copyright \(co 2000 The XFree86 Project, Inc. .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XmbDrawString __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XmbDrawString, XwcDrawString, Xutf8DrawString \- draw text using a single font set .SH SYNTAX .HP void XmbDrawString\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, XFontSet \fIfont_set\fP\^, GC \fIgc\fP\^, int \fIx\fP\^, int \fIy\fP\^, char *\fIstring\fP\^, int \fInum_bytes\fP\^); .HP void XwcDrawString\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, XFontSet \fIfont_set\fP\^, GC \fIgc\fP\^, int \fIx\fP\^, int \fIy\fP\^, wchar_t *\fIstring\fP\^, int \fInum_wchars\fP\^); .HP void Xutf8DrawString\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, XFontSet \fIfont_set\fP\^, GC \fIgc\fP\^, int \fIx\fP\^, int \fIy\fP\^, char *\fIstring\fP\^, int \fInum_bytes\fP\^); .SH ARGUMENTS .IP \fId\fP 1i Specifies the drawable. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIfont_set\fP 1i Specifies the font set. .IP \fIgc\fP 1i Specifies the GC. .IP \fInum_bytes\fP 1i Specifies the number of bytes in the string argument. .IP \fInum_wchars\fP 1i Specifies the number of characters in the string argument. .IP \fIstring\fP 1i Specifies the character string. .ds Xy .IP \fIx\fP 1i .br .ns .IP \fIy\fP 1i Specify the x and y coordinates\*(Xy. .SH DESCRIPTION The .ZN XmbDrawString , .ZN XwcDrawString and .ZN Xutf8DrawString functions draw the specified text with the foreground pixel. When the .ZN XFontSet has missing charsets, each unavailable character is drawn with the default string returned by .ZN XCreateFontSet . The behavior for an invalid codepoint is undefined. .LP The function .ZN Xutf8DrawString is an extension introduced by The XFree86 Project, Inc. in their 4.0.2 release. Its presence is indicated by the macro .ZN X_HAVE_UTF8_STRING . .SH "SEE ALSO" XDrawImageString(__libmansuffix__), XDrawString(__libmansuffix__), XDrawText(__libmansuffix__), XmbDrawImageString(__libmansuffix__), XmbDrawText(__libmansuffix__) .br \fI\*(xL\fP entation 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 perslibX11-1.6.3/man/XrmPutLineResource.man000064401431060000012000000000701247741723500201020ustar00alancstaff00002660200006.so man__libmansuffix__/XrmPutResource.__libmansuffix__ libX11-1.6.3/man/XPeekEvent.man000064401431060000012000000000641247741723500163440ustar00alancstaff00002660200006.so man__libmansuffix__/XNextEvent.__libmansuffix__ libX11-1.6.3/man/XcmsCIELuvQueryMaxC.man000064401431060000012000000132721247741723500200540ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XcmsCIELuvQueryMaxC __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XcmsCIELuvQueryMaxC, XcmsCIELuvQueryMaxL, XcmsCIELuvQueryMaxLC, XcmsCIELuvQueryMinL \- obtain the CIE L*u*v* coordinates .SH SYNTAX .HP Status XcmsCIELuvQueryMaxC\^(\^XcmsCCC \fIccc\fP\^, XcmsFloat \fIhue_angle\fP\^, XcmsFloat \fIL_star\fP\^, XcmsColor *\fIcolor_return\fP\^); .HP Status XcmsCIELuvQueryMaxL\^(\^XcmsCCC \fIccc\fP\^, XcmsFloat \fIhue_angle\fP\^, XcmsFloat \fIchroma\fP\^, XcmsColor *\fIcolor_return\fP\^); .HP Status XcmsCIELuvQueryMaxLC\^(\^XcmsCCC \fIccc\fP\^, XcmsFloat \fIhue_angle\fP\^, XcmsColor *\fIcolor_return\fP\^); .HP Status XcmsCIELuvQueryMinL\^(\^XcmsCCC \fIccc\fP\^, XcmsFloat \fIhue_angle\fP\^, XcmsFloat \fIchroma\fP\^, XcmsColor *\fIcolor_return\fP\^); .SH ARGUMENTS .IP \fIccc\fP 1i Specifies the CCC. Note that the CCC's Client White Point and White Point Adjustment procedures are ignored. .ds Ch maximum lightness (MaxL) or minimum lightness (MinL) .IP \fIchroma\fP 1i Specifies the chroma at which to find \*(Ch. .ds Lc maximum chroma (MaxC and MaxLC), maximum lightness (MaxL), \ or minimum lightness (MinL) .ds lC hue angle and lightness (MaxC), hue angle and chroma (MaxL and MinL), \ or hue angle (MaxLC) .IP \fIcolor_return\fP 1i Returns the CIE L*u*v* coordinates of \*(Lc displayable by the screen for the given \*(lC. The white point associated with the returned color specification is the Screen White Point. The value returned in the pixel member is undefined. .ds Ha maximum chroma (MaxC and MaxLC), maximum lightness (MaxL), \ or minimum lightness (MinL) .IP \fIhue_angle\fP 1i Specifies the hue angle (in degrees) at which to find \*(Ha. .ds Ls maximum chroma (MaxC) or maximum lightness (MaxL) .IP \fIL_star\fP 1i Specifies the lightness (L*) at which to find \*(Ls. .SH DESCRIPTION The .ZN XcmsCIELuvQueryMaxC function, given a hue angle and lightness, finds the point of maximum chroma displayable by the screen. It returns this point in CIE L*u*v* coordinates. .LP The .ZN XcmsCIELuvQueryMaxL function, given a hue angle and chroma, finds the point in CIE L*u*v* color space of maximum lightness (L*) displayable by the screen. It returns this point in CIE L*u*v* coordinates. An .ZN XcmsFailure return value usually indicates that the given chroma is beyond maximum for the given hue angle. .LP The .ZN XcmsCIELuvQueryMaxLC function, given a hue angle, finds the point of maximum chroma displayable by the screen. It returns this point in CIE L*u*v* coordinates. .LP The .ZN XcmsCIELuvQueryMinL function, given a hue angle and chroma, finds the point of minimum lightness (L*) displayable by the screen. It returns this point in CIE L*u*v* coordinates. An .ZN XcmsFailure return value usually indicates that the given chroma is beyond maximum for the given hue angle. .SH "SEE ALSO" XcmsCIELabQueryMaxC(__libmansuffix__), XcmsTekHVCQueryMaxC(__libmansuffix__), XcmsQueryBlack(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/IsMiscFunctionKey.man000064401431060000012000000000651247741723500176750ustar00alancstaff00002660200006.so man__libmansuffix__/IsCursorKey.__libmansuffix__ libX11-1.6.3/man/XOpenIM.man000064401431060000012000000201061247741723500156040ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XOpenIM __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XOpenIM, XCloseIM, XSetIMValues, XGetIMValues, XDisplayOfIM, XLocaleOfIM, XRegisterIMInstantiateCallback, XUnregisterIMInstantiateCallback \- open, close, and obtain input method information .SH SYNTAX .HP XIM XOpenIM\^(\^Display *\fIdisplay\fP\^, XrmDatabase \fIdb\fP\^, char *\fIres_name\fP\^, char *\fIres_class\fP\^); .HP Status XCloseIM\^(\^XIM \fIim\fP\^); .HP char *XSetIMValues\^(\^XIM \fIim\fP\^, ...); .HP char *XGetIMValues\^(\^XIM \fIim\fP\^, ...); .HP Display *XDisplayOfIM\^(\^XIM \fIim\fP\^); .HP char *XLocaleOfIM\^(\^XIM \fIim\fP\^); .HP Bool XRegisterIMInstantiateCallback\^(\^Display *\fIdisplay\fP\^, XrmDatabase \fIdb\fP\^, char *\fIres_name\fP\^, char *\fIres_class\fP\^, XIDProc \fIcallback\fP\^, XPointer \fIclient_data\fP\^); .HP Bool XUnregisterIMInstantiateCallback\^(\^Display *\fIdisplay\fP\^, XrmDatabase \fIdb\fP\^, char *\fIres_name\fP\^, char *\fIres_class\fP\^, XIDProc \fIcallback\fP\^, XPointer \fIclient_data\fP\^); .LP .SH ARGUMENTS .IP \fIcallback\fP 1i Specifies a pointer to the input method instantiate callback. .IP \fIclient_data\fP 1i Specifies the additional client data. .IP \fIdb\fP 1i Specifies a pointer to the resource database. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIim\fP 1i Specifies the input method. .IP \fIres_class\fP 1i Specifies the full class name of the application. .IP \fIres_name\fP 1i Specifies the full resource name of the application. .ds Al \ to set or get XIM values .IP ... 1i Specifies the variable length argument list\*(Al. .SH DESCRIPTION The .ZN XOpenIM function opens an input method, matching the current locale and modifiers specification. Current locale and modifiers are bound to the input method at opening time. The locale associated with an input method cannot be changed dynamically. This implies that the strings returned by .ZN XmbLookupString or .ZN XwcLookupString , for any input context affiliated with a given input method will be encoded in the locale current at the time the input method is opened. .LP The specific input method to which this call will be routed is identified on the basis of the current locale. .ZN XOpenIM will identify a default input method corresponding to the current locale. That default can be modified using .ZN XSetLocaleModifiers for the input method modifier. .LP The db argument is the resource database to be used by the input method for looking up resources that are private to the input method. It is not intended that this database be used to look up values that can be set as IC values in an input context. If db is NULL, no database is passed to the input method. .LP The res_name and res_class arguments specify the resource name and class of the application. They are intended to be used as prefixes by the input method when looking up resources that are common to all input contexts that may be created for this input method. The characters used for resource names and classes must be in the X Portable Character Set. The resources looked up are not fully specified if res_name or res_class is NULL. .LP The res_name and res_class arguments are not assumed to exist beyond the call to .ZN XOpenIM . The specified resource database is assumed to exist for the lifetime of the input method. .LP .ZN XOpenIM returns NULL if no input method could be opened. .LP The .ZN XCloseIM function closes the specified input method. .LP The .ZN XSetIMValues function presents a variable argument list programming interface for setting attributes of the specified input method. It returns NULL if it succeeds; otherwise, it returns the name of the first argument that could not be set. Xlib does not attempt to set arguments from the supplied list that follow the failed argument; all arguments in the list preceding the failed argument have been set correctly. .LP The .ZN XGetIMValues function presents a variable argument list programming interface for querying properties or features of the specified input method. This function returns NULL if it succeeds; otherwise, it returns the name of the first argument that could not be obtained. .LP Each XIM value argument (following a name) must point to a location where the XIM value is to be stored. That is, if the XIM value is of type T, the argument must be of type T*. If T itself is a pointer type, then .ZN XGetIMValues allocates memory to store the actual data, and the client is responsible for freeing this data by calling .ZN XFree with the returned pointer. .LP The .ZN XDisplayOfIM function returns the display associated with the specified input method. .LP The .ZN XLocaleOfIM function returns the locale associated with the specified input method. .LP The .ZN XRegisterIMInstantiateCallback function registers a callback to be invoked whenever a new input method becomes available for the specified display that matches the current locale and modifiers. .LP The function returns .ZN True if it succeeds; otherwise, it returns .ZN False . .LP The .ZN XUnregisterIMInstantiateCallback function removes an input method instantiation callback previously registered. The function returns .ZN True if it succeeds; otherwise, it returns .ZN False . .SH "SEE ALSO" XCreateIC(__libmansuffix__), XSetICFocus(__libmansuffix__), XSetICValues(__libmansuffix__), XmbResetIC(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XSegment.man000064401431060000012000000000631247741723500160570ustar00alancstaff00002660200006.so man__libmansuffix__/XDrawLine.__libmansuffix__ libX11-1.6.3/man/XTextPropertyToStringList.man000064401431060000012000000001031247741723500214670ustar00alancstaff00002660200006.so man__libmansuffix__/XStringListToTextProperty.__libmansuffix__ libX11-1.6.3/man/XUnsetICFocus.man000064401431060000012000000000651247741723500167710ustar00alancstaff00002660200006.so man__libmansuffix__/XSetICFocus.__libmansuffix__ libX11-1.6.3/man/XSync.man000064401431060000012000000000601247741723500153660ustar00alancstaff00002660200006.so man__libmansuffix__/XFlush.__libmansuffix__ libX11-1.6.3/man/XDeleteProperty.man000064401431060000012000000000741247741723500174260ustar00alancstaff00002660200006.so man__libmansuffix__/XGetWindowProperty.__libmansuffix__ libX11-1.6.3/man/XGetKeyboardMapping.man000064401431060000012000000001001247741723500201610ustar00alancstaff00002660200006.so man__libmansuffix__/XChangeKeyboardMapping.__libmansuffix__ libX11-1.6.3/man/XChar2b.man000064401431060000012000000000631247741723500155560ustar00alancstaff00002660200006.so man__libmansuffix__/XLoadFont.__libmansuffix__ libX11-1.6.3/man/Xutf8TextListToTextProperty.man000064401431060000012000000001031247741723500217540ustar00alancstaff00002660200006.so man__libmansuffix__/XmbTextListToTextProperty.__libmansuffix__ libX11-1.6.3/man/XVisualInfo.man000064401431060000012000000000701247741723500165320ustar00alancstaff00002660200006.so man__libmansuffix__/XGetVisualInfo.__libmansuffix__ libX11-1.6.3/man/ScreenWhitePointOfCCC.man000064401431060000012000000000661247741723500203600ustar00alancstaff00002660200006.so man__libmansuffix__/DisplayOfCCC.__libmansuffix__ libX11-1.6.3/man/Makefile.in000064401431060000012000001533411247741725400157060ustar00alancstaff00002660200006# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = man ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_define_dir.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h \ $(top_builddir)/include/X11/XlibConf.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(filemandir)" "$(DESTDIR)$(libmandir)" DATA = $(fileman_DATA) $(libman_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADMIN_MAN_DIR = @ADMIN_MAN_DIR@ ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APP_MAN_DIR = @APP_MAN_DIR@ APP_MAN_SUFFIX = @APP_MAN_SUFFIX@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASE_CFLAGS = @BASE_CFLAGS@ BIGFONT_CFLAGS = @BIGFONT_CFLAGS@ BIGFONT_LIBS = @BIGFONT_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CHANGELOG_CMD = @CHANGELOG_CMD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CWARNFLAGS = @CWARNFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DRIVER_MAN_DIR = @DRIVER_MAN_DIR@ DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ FOP = @FOP@ GREP = @GREP@ I18N_MODULE_LIBS = @I18N_MODULE_LIBS@ INSTALL = @INSTALL@ INSTALL_CMD = @INSTALL_CMD@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ KEYSYMDEFS = @KEYSYMDEFS@ LAUNCHD = @LAUNCHD@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIB_MAN_DIR = @LIB_MAN_DIR@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@ LINT = @LINT@ LINTLIB = @LINTLIB@ LINT_FLAGS = @LINT_FLAGS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MALLOC_ZERO_CFLAGS = @MALLOC_ZERO_CFLAGS@ MANIFEST_TOOL = @MANIFEST_TOOL@ MAN_SUBSTS = @MAN_SUBSTS@ -e 's|__xlocaledir__|$(X11_LOCALEDATADIR)|g' MISC_MAN_DIR = @MISC_MAN_DIR@ MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ RANLIB = @RANLIB@ RAWCPP = @RAWCPP@ RAWCPPFLAGS = @RAWCPPFLAGS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRICT_CFLAGS = @STRICT_CFLAGS@ STRIP = @STRIP@ STYLESHEET_SRCDIR = @STYLESHEET_SRCDIR@ TRADITIONALCPPFLAGS = @TRADITIONALCPPFLAGS@ VERSION = @VERSION@ WCHAR32 = @WCHAR32@ X11_CFLAGS = @X11_CFLAGS@ X11_DATADIR = @X11_DATADIR@ X11_EXTRA_DEPS = @X11_EXTRA_DEPS@ X11_LIBDIR = @X11_LIBDIR@ X11_LIBS = @X11_LIBS@ X11_LOCALEDATADIR = @X11_LOCALEDATADIR@ X11_LOCALEDIR = @X11_LOCALEDIR@ X11_LOCALELIBDIR = @X11_LOCALELIBDIR@ XERRORDB = @XERRORDB@ XKBPROTO_REQUIRES = @XKBPROTO_REQUIRES@ XKEYSYMDB = @XKEYSYMDB@ XLOCALEDATADIR = @XLOCALEDATADIR@ XLOCALEDIR = @XLOCALEDIR@ XLOCALELIBDIR = @XLOCALELIBDIR@ XMALLOC_ZERO_CFLAGS = @XMALLOC_ZERO_CFLAGS@ XMLTO = @XMLTO@ XORG_MAN_PAGE = @XORG_MAN_PAGE@ XORG_SGML_PATH = @XORG_SGML_PATH@ XSLTPROC = @XSLTPROC@ XSL_STYLESHEET = @XSL_STYLESHEET@ XTHREADLIB = @XTHREADLIB@ XTHREAD_CFLAGS = @XTHREAD_CFLAGS@ XTMALLOC_ZERO_CFLAGS = @XTMALLOC_ZERO_CFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ locales = @locales@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = xkb libmandir = $(LIB_MAN_DIR) libman_PRE = \ $(all_shadows:=.man) \ $(file_shadows:=.man) \ AllPlanes.man \ BlackPixelOfScreen.man \ DisplayOfCCC.man \ ImageByteOrder.man \ IsCursorKey.man \ XAddConnectionWatch.man \ XAddHost.man \ XAllocClassHint.man \ XAllocColor.man \ XAllocIconSize.man \ XAllocSizeHints.man \ XAllocStandardColormap.man \ XAllocWMHints.man \ XAllowEvents.man \ XAnyEvent.man \ XButtonEvent.man \ XChangeKeyboardControl.man \ XChangeKeyboardMapping.man \ XChangePointerControl.man \ XChangeSaveSet.man \ XChangeWindowAttributes.man \ XCirculateEvent.man \ XCirculateRequestEvent.man \ XClearArea.man \ XClientMessageEvent.man \ XcmsAllocColor.man \ XcmsCCCOfColormap.man \ XcmsCIELabQueryMaxC.man \ XcmsCIELuvQueryMaxC.man \ XcmsColor.man \ XcmsConvertColors.man \ XcmsCreateCCC.man \ XcmsDefaultCCC.man \ XcmsQueryBlack.man \ XcmsQueryColor.man \ XcmsSetWhitePoint.man \ XcmsStoreColor.man \ XcmsTekHVCQueryMaxC.man \ XColormapEvent.man \ XConfigureEvent.man \ XConfigureRequestEvent.man \ XConfigureWindow.man \ XCopyArea.man \ XCreateColormap.man \ XCreateFontCursor.man \ XCreateFontSet.man \ XCreateGC.man \ XCreateIC.man \ XCreateOC.man \ XCreatePixmap.man \ XCreateRegion.man \ XCreateWindowEvent.man \ XCreateWindow.man \ XCrossingEvent.man \ XDefineCursor.man \ XDestroyWindowEvent.man \ XDestroyWindow.man \ XDrawArc.man \ XDrawImageString.man \ XDrawLine.man \ XDrawPoint.man \ XDrawRectangle.man \ XDrawString.man \ XDrawText.man \ XEmptyRegion.man \ XErrorEvent.man \ XExposeEvent.man \ XExtentsOfFontSet.man \ XFillRectangle.man \ XFilterEvent.man \ XFlush.man \ XFocusChangeEvent.man \ XFontSetExtents.man \ XFontsOfFontSet.man \ XFree.man \ XGetEventData.man \ XGetVisualInfo.man \ XGetWindowAttributes.man \ XGetWindowProperty.man \ XGetXCBConnection.man \ XGrabButton.man \ XGrabKeyboard.man \ XGrabKey.man \ XGrabPointer.man \ XGrabServer.man \ XGraphicsExposeEvent.man \ XGravityEvent.man \ XIconifyWindow.man \ XIfEvent.man \ XInitImage.man \ XInitThreads.man \ XInstallColormap.man \ XInternAtom.man \ XIntersectRegion.man \ XKeymapEvent.man \ XListFonts.man \ XLoadFont.man \ XLookupKeysym.man \ XMapEvent.man \ XMapRequestEvent.man \ XMapWindow.man \ XmbDrawImageString.man \ XmbDrawString.man \ XmbDrawText.man \ XmbLookupString.man \ XmbResetIC.man \ XmbTextEscapement.man \ XmbTextExtents.man \ XmbTextListToTextProperty.man \ XmbTextPerCharExtents.man \ XNextEvent.man \ XNoOp.man \ XOpenDisplay.man \ XOpenIM.man \ XOpenOM.man \ XParseGeometry.man \ XPolygonRegion.man \ XPropertyEvent.man \ XPutBackEvent.man \ XPutImage.man \ XQueryBestSize.man \ XQueryColor.man \ XQueryExtension.man \ XQueryPointer.man \ XQueryTree.man \ XRaiseWindow.man \ XReadBitmapFile.man \ XRecolorCursor.man \ XReparentEvent.man \ XReparentWindow.man \ XResizeRequestEvent.man \ XResourceManagerString.man \ XrmEnumerateDatabase.man \ XrmGetFileDatabase.man \ XrmGetResource.man \ XrmInitialize.man \ XrmMergeDatabases.man \ XrmPutResource.man \ XrmUniqueQuark.man \ XSaveContext.man \ XSelectInput.man \ XSelectionClearEvent.man \ XSelectionEvent.man \ XSelectionRequestEvent.man \ XSendEvent.man \ XSetArcMode.man \ XSetClipOrigin.man \ XSetCloseDownMode.man \ XSetCommand.man \ XSetErrorHandler.man \ XSetEventQueueOwner.man \ XSetFillStyle.man \ XSetFont.man \ XSetFontPath.man \ XSetICFocus.man \ XSetICValues.man \ XSetInputFocus.man \ XSetLineAttributes.man \ XSetPointerMapping.man \ XSetScreenSaver.man \ XSetSelectionOwner.man \ XSetState.man \ XSetTextProperty.man \ XSetTile.man \ XSetTransientForHint.man \ XSetWMClientMachine.man \ XSetWMColormapWindows.man \ XSetWMIconName.man \ XSetWMName.man \ XSetWMProperties.man \ XSetWMProtocols.man \ XStoreBytes.man \ XStoreColors.man \ XStringListToTextProperty.man \ XStringToKeysym.man \ XSupportsLocale.man \ XSynchronize.man \ XTextExtents.man \ XTextWidth.man \ XTranslateCoordinates.man \ XUnmapEvent.man \ XUnmapWindow.man \ XVaCreateNestedList.man \ XVisibilityEvent.man \ XWarpPointer.man filemandir = $(FILE_MAN_DIR) fileman_PRE = Compose.man libman_DATA = $(libman_PRE:man=@LIB_MAN_SUFFIX@) \ $(all_shadows:=.@LIB_MAN_SUFFIX@) fileman_DATA = $(fileman_PRE:man=@FILE_MAN_SUFFIX@) \ $(file_shadows:=.@FILE_MAN_SUFFIX@) EXTRA_DIST = $(libman_PRE) $(fileman_PRE) CLEANFILES = $(libman_DATA) $(fileman_DATA) SUFFIXES = .$(LIB_MAN_SUFFIX) .$(FILE_MAN_SUFFIX) .man # Generate man page shadow files (Replaces InstallManPageAliases from Imake) all_shadows = \ $(AllPlanes_shadows) \ $(BlackPixelOfScreen_shadows) \ $(DisplayOfCCC_shadows) \ $(ImageByteOrder_shadows) \ $(IsCursorKey_shadows) \ $(XAllocClassHint_shadows) \ $(XAllocIconSize_shadows) \ $(XAllocStandardColormap_shadows) \ $(XAllocSizeHints_shadows) \ $(XAllocWMHints_shadows) \ $(XAddHost_shadows) \ $(XAllocColor_shadows) \ $(XAnyEvent_shadows) \ $(XButtonEvent_shadows) \ $(XChangeKeyboardControl_shadows) \ $(XChangeKeyboardMapping_shadows) \ $(XChangePointerControl_shadows) \ $(XChangeSaveSet_shadows) \ $(XChangeWindowAttributes_shadows) \ $(XClearArea_shadows) \ $(XConfigureWindow_shadows) \ $(XCopyArea_shadows) \ $(XCreateColormap_shadows) \ $(XCreateFontCursor_shadows) \ $(XCreateFontSet_shadows) \ $(XCreateGC_shadows) \ $(XCreateIC_shadows) \ $(XInitImage_shadows) \ $(XCreateOC_shadows) \ $(XCreatePixmap_shadows) \ $(XCreateRegion_shadows) \ $(XCreateWindow_shadows) \ $(XDefineCursor_shadows) \ $(XDestroyWindow_shadows) \ $(XDrawArc_shadows) \ $(XDrawImageString_shadows) \ $(XDrawLine_shadows) \ $(XDrawPoint_shadows) \ $(XDrawRectangle_shadows) \ $(XDrawString_shadows) \ $(XDrawText_shadows) \ $(XEmptyRegion_shadows) \ $(XFillRectangle_shadows) \ $(XFlush_shadows) \ $(XFontsOfFontSet_shadows) \ $(XGraphicsExposeEvent_shadows) \ $(XrmGetFileDatabase_shadows) \ $(XrmGetResource_shadows) \ $(XGetEventData_shadows) \ $(XGetVisualInfo_shadows) \ $(XGetWindowAttributes_shadows) \ $(XGetWindowProperty_shadows) \ $(XGrabButton_shadows) \ $(XGrabKey_shadows) \ $(XGrabKeyboard_shadows) \ $(XGrabPointer_shadows) \ $(XGrabServer_shadows) \ $(XIconifyWindow_shadows) \ $(XIfEvent_shadows) \ $(XrmInitialize_shadows) \ $(XInstallColormap_shadows) \ $(XAddConnectionWatch_shadows) \ $(XIntersectRegion_shadows) \ $(XInternAtom_shadows) \ $(XListFonts_shadows) \ $(XLoadFont_shadows) \ $(XLookupKeysym_shadows) \ $(XrmMergeDatabases_shadows) \ $(XMapEvent_shadows) \ $(XMapWindow_shadows) \ $(XNextEvent_shadows) \ $(XOpenDisplay_shadows) \ $(XOpenIM_shadows) \ $(XOpenOM_shadows) \ $(XParseGeometry_shadows) \ $(XPolygonRegion_shadows) \ $(XPutImage_shadows) \ $(XrmPutResource_shadows) \ $(XQueryBestSize_shadows) \ $(XQueryColor_shadows) \ $(XQueryExtension_shadows) \ $(XResourceManagerString_shadows) \ $(XRaiseWindow_shadows) \ $(XReadBitmapFile_shadows) \ $(XRecolorCursor_shadows) \ $(XSaveContext_shadows) \ $(XSetICFocus_shadows) \ $(XSetICValues_shadows) \ $(XStringListToTextProperty_shadows) \ $(XSetArcMode_shadows) \ $(XSetClipOrigin_shadows) \ $(XSetCloseDownMode_shadows) \ $(XSetCommand_shadows) \ $(XSetErrorHandler_shadows) \ $(XSendEvent_shadows) \ $(XSetFillStyle_shadows) \ $(XSetFontPath_shadows) \ $(XSetInputFocus_shadows) \ $(XSetLineAttributes_shadows) \ $(XSetPointerMapping_shadows) \ $(XSetScreenSaver_shadows) \ $(XSetSelectionOwner_shadows) \ $(XSetState_shadows) \ $(XSetTransientForHint_shadows) \ $(XSetTextProperty_shadows) \ $(XSetTile_shadows) \ $(XSetWMClientMachine_shadows) \ $(XSetWMColormapWindows_shadows) \ $(XSetWMIconName_shadows) \ $(XSetWMName_shadows) \ $(XSetWMProperties_shadows) \ $(XSetWMProtocols_shadows) \ $(XStoreBytes_shadows) \ $(XStoreColors_shadows) \ $(XStringToKeysym_shadows) \ $(XSupportsLocale_shadows) \ $(XSynchronize_shadows) \ $(XmbTextListToTextProperty_shadows) \ $(XTextExtents_shadows) \ $(XTextWidth_shadows) \ $(XInitThreads_shadows) \ $(XrmUniqueQuark_shadows) \ $(XUnmapWindow_shadows) \ $(XcmsCCCOfColormap_shadows) \ $(XcmsAllocColor_shadows) \ $(XcmsColor_shadows) \ $(XcmsCreateCCC_shadows) \ $(XcmsCIELabQueryMaxC_shadows) \ $(XcmsCIELuvQueryMaxC_shadows) \ $(XcmsQueryBlack_shadows) \ $(XcmsQueryColor_shadows) \ $(XcmsStoreColor_shadows) \ $(XcmsSetWhitePoint_shadows) \ $(XcmsTekHVCQueryMaxC_shadows) \ $(XmbDrawImageString_shadows) \ $(XmbDrawString_shadows) \ $(XmbDrawText_shadows) \ $(XmbLookupString_shadows) \ $(XmbResetIC_shadows) \ $(XmbTextEscapement_shadows) \ $(XmbTextExtents_shadows) \ $(XmbTextPerCharExtents_shadows) AllPlanes_shadows = \ BlackPixel \ WhitePixel \ ConnectionNumber \ DefaultColormap \ DefaultDepth \ XListDepths \ DefaultGC \ DefaultRootWindow \ DefaultScreenOfDisplay \ DefaultScreen \ DefaultVisual \ DisplayCells \ DisplayPlanes \ DisplayString \ XMaxRequestSize \ XExtendedMaxRequestSize \ LastKnownRequestProcessed \ NextRequest \ ProtocolVersion \ ProtocolRevision \ QLength \ RootWindow \ ScreenCount \ ScreenOfDisplay \ ServerVendor \ VendorRelease BlackPixelOfScreen_shadows = \ WhitePixelOfScreen \ CellsOfScreen \ DefaultColormapOfScreen \ DefaultDepthOfScreen \ DefaultGCOfScreen \ DefaultVisualOfScreen \ DoesBackingStore \ DoesSaveUnders \ DisplayOfScreen \ XScreenNumberOfScreen \ EventMaskOfScreen \ HeightOfScreen \ HeightMMOfScreen \ MaxCmapsOfScreen \ MinCmapsOfScreen \ PlanesOfScreen \ RootWindowOfScreen \ WidthOfScreen \ WidthMMOfScreen DisplayOfCCC_shadows = \ VisualOfCCC \ ScreenNumberOfCCC \ ScreenWhitePointOfCCC \ ClientWhitePointOfCCC ImageByteOrder_shadows = \ BitmapBitOrder \ BitmapPad \ BitmapUnit \ DisplayHeight \ DisplayHeightMM \ DisplayWidth \ DisplayWidthMM \ XListPixmapFormats \ XPixmapFormatValues IsCursorKey_shadows = \ IsFunctionKey \ IsKeypadKey \ IsMiscFunctionKey \ IsModifierKey \ IsPFKey \ IsPrivateKeypadKey XAllocClassHint_shadows = \ XSetClassHint \ XGetClassHint \ XClassHint XAllocIconSize_shadows = \ XSetIconSizes \ XGetIconSizes \ XIconSize XAllocStandardColormap_shadows = \ XSetRGBColormaps \ XGetRGBColormaps \ XStandardColormap XAllocSizeHints_shadows = \ XSetWMNormalHints \ XGetWMNormalHints \ XSetWMSizeHints \ XGetWMSizeHints \ XSizeHints XAllocWMHints_shadows = \ XSetWMHints \ XGetWMHints \ XWMHints XAddHost_shadows = \ XAddHosts \ XListHosts \ XRemoveHost \ XRemoveHosts \ XSetAccessControl \ XEnableAccessControl \ XDisableAccessControl \ XHostAddress XAllocColor_shadows = \ XAllocNamedColor \ XAllocColorCells \ XAllocColorPlanes \ XFreeColors XAnyEvent_shadows = \ XEvent XButtonEvent_shadows = \ XKeyEvent \ XMotionEvent XChangeKeyboardControl_shadows = \ XGetKeyboardControl \ XAutoRepeatOn \ XAutoRepeatOff \ XBell \ XQueryKeymap \ XKeyboardControl XChangeKeyboardMapping_shadows = \ XGetKeyboardMapping \ XDisplayKeycodes \ XSetModifierMapping \ XGetModifierMapping \ XNewModifiermap \ XInsertModifiermapEntry \ XDeleteModifiermapEntry \ XFreeModifiermap \ XModifierKeymap XChangePointerControl_shadows = \ XGetPointerControl XChangeSaveSet_shadows = \ XAddToSaveSet \ XRemoveFromSaveSet XChangeWindowAttributes_shadows = \ XSetWindowBackground \ XSetWindowBackgroundPixmap \ XSetWindowBorder \ XSetWindowBorderPixmap \ XSetWindowColormap XClearArea_shadows = \ XClearWindow XConfigureWindow_shadows = \ XMoveWindow \ XResizeWindow \ XMoveResizeWindow \ XSetWindowBorderWidth \ XWindowChanges XCopyArea_shadows = \ XCopyPlane XCreateColormap_shadows = \ XCopyColormapAndFree \ XFreeColormap \ XColor XCreateFontCursor_shadows = \ XCreatePixmapCursor \ XCreateGlyphCursor XCreateFontSet_shadows = \ XFreeFontSet XCreateGC_shadows = \ XCopyGC \ XChangeGC \ XGetGCValues \ XFreeGC \ XGContextFromGC \ XGCValues XCreateIC_shadows = \ XDestroyIC \ XIMOfIC XInitImage_shadows = \ XCreateImage \ XGetPixel \ XPutPixel \ XSubImage \ XAddPixel \ XDestroyImage XCreateOC_shadows = \ XDestroyOC \ XSetOCValues \ XGetOCValues \ XOMOfOC XCreatePixmap_shadows = \ XFreePixmap XCreateRegion_shadows = \ XSetRegion \ XDestroyRegion XCreateWindow_shadows = \ XCreateSimpleWindow \ XSetWindowAttributes XDefineCursor_shadows = \ XUndefineCursor XDestroyWindow_shadows = \ XDestroySubwindows XDrawArc_shadows = \ XDrawArcs \ XArc XDrawImageString_shadows = \ XDrawImageString16 XDrawLine_shadows = \ XDrawLines \ XDrawSegments \ XSegment XDrawPoint_shadows = \ XDrawPoints \ XPoint XDrawRectangle_shadows = \ XDrawRectangles \ XRectangle XDrawString_shadows = \ XDrawString16 XDrawText_shadows = \ XDrawText16 \ XTextItem \ XTextItem16 XEmptyRegion_shadows = \ XEqualRegion \ XPointInRegion \ XRectInRegion XFillRectangle_shadows = \ XFillRectangles \ XFillPolygon \ XFillArc \ XFillArcs XFlush_shadows = \ XSync \ XEventsQueued \ XPending XFontsOfFontSet_shadows = \ XBaseFontNameListOfFontSet \ XLocaleOfFontSet \ XContextDependentDrawing \ XContextualDrawing \ XDirectionalDependentDrawing XGraphicsExposeEvent_shadows = \ XNoExposeEvent XrmGetFileDatabase_shadows = \ XrmPutFileDatabase \ XrmGetStringDatabase \ XrmLocaleOfDatabase \ XrmGetDatabase \ XrmSetDatabase \ XrmDestroyDatabase XrmGetResource_shadows = \ XrmQGetResource \ XrmQGetSearchList \ XrmQGetSearchResource XGetEventData_shadows = \ XFreeEventData \ XGenericEventCookie XGetVisualInfo_shadows = \ XMatchVisualInfo \ XVisualIDFromVisual \ XVisualInfo XGetWindowAttributes_shadows = \ XGetGeometry \ XWindowAttributes XGetWindowProperty_shadows = \ XListProperties \ XChangeProperty \ XRotateWindowProperties \ XDeleteProperty XGrabButton_shadows = \ XUngrabButton XGrabKey_shadows = \ XUngrabKey XGrabKeyboard_shadows = \ XUngrabKeyboard XGrabPointer_shadows = \ XUngrabPointer \ XChangeActivePointerGrab XGrabServer_shadows = \ XUngrabServer XIconifyWindow_shadows = \ XWithdrawWindow \ XReconfigureWMWindow XIfEvent_shadows = \ XCheckIfEvent \ XPeekIfEvent XrmInitialize_shadows = \ XrmParseCommand \ XrmValue \ XrmOptionKind \ XrmOptionDescRec XInstallColormap_shadows = \ XUninstallColormap \ XListInstalledColormaps XAddConnectionWatch_shadows = \ XRemoveConnectionWatch \ XProcessInternalConnection \ XInternalConnectionNumbers XIntersectRegion_shadows = \ XUnionRegion \ XUnionRectWithRegion \ XSubtractRegion \ XXorRegion \ XOffsetRegion \ XShrinkRegion XInternAtom_shadows = \ XInternAtoms \ XGetAtomName \ XGetAtomNames XListFonts_shadows = \ XFreeFontNames \ XListFontsWithInfo \ XFreeFontInfo XLoadFont_shadows = \ XQueryFont \ XLoadQueryFont \ XFreeFont \ XGetFontProperty \ XUnloadFont \ XCharStruct \ XFontProp \ XChar2b \ XFontStruct XLookupKeysym_shadows = \ XRefreshKeyboardMapping \ XLookupString \ XRebindKeysym XrmMergeDatabases_shadows = \ XrmCombineDatabase \ XrmCombineFileDatabase XMapEvent_shadows = \ XMappingEvent XMapWindow_shadows = \ XMapRaised \ XMapSubwindows XNextEvent_shadows = \ XPeekEvent \ XWindowEvent \ XCheckWindowEvent \ XMaskEvent \ XCheckMaskEvent \ XCheckTypedEvent \ XCheckTypedWindowEvent XOpenDisplay_shadows = \ XCloseDisplay XOpenIM_shadows = \ XCloseIM \ XSetIMValues \ XGetIMValues \ XDisplayOfIM \ XLocaleOfIM \ XRegisterIMInstantiateCallback \ XUnregisterIMInstantiateCallback XOpenOM_shadows = \ XCloseOM \ XSetOMValues \ XGetOMValues \ XDisplayOfOM \ XLocaleOfOM XParseGeometry_shadows = \ XWMGeometry XPolygonRegion_shadows = \ XClipBox XPutImage_shadows = \ XGetImage \ XGetSubImage XrmPutResource_shadows = \ XrmQPutResource \ XrmPutStringResource \ XrmQPutStringResource \ XrmPutLineResource XQueryBestSize_shadows = \ XQueryBestTile \ XQueryBestStipple XQueryColor_shadows = \ XQueryColors \ XLookupColor \ XParseColor XQueryExtension_shadows = \ XListExtensions \ XFreeExtensionList XResourceManagerString_shadows = \ XScreenResourceString XRaiseWindow_shadows = \ XLowerWindow \ XCirculateSubwindows \ XCirculateSubwindowsUp \ XCirculateSubwindowsDown \ XRestackWindows XReadBitmapFile_shadows = \ XReadBitmapFileData \ XWriteBitmapFile \ XCreatePixmapFromBitmapData \ XCreateBitmapFromData XRecolorCursor_shadows = \ XFreeCursor \ XQueryBestCursor XSaveContext_shadows = \ XFindContext \ XDeleteContext \ XUniqueContext XSetICFocus_shadows = \ XUnsetICFocus XSetICValues_shadows = \ XGetICValues XStringListToTextProperty_shadows = \ XTextPropertyToStringList \ XFreeStringList \ XTextProperty XSetArcMode_shadows = \ XSetSubwindowMode \ XSetGraphicsExposure XSetClipOrigin_shadows = \ XSetClipMask \ XSetClipRectangles XSetCloseDownMode_shadows = \ XKillClient XSetCommand_shadows = \ XGetCommand XSetErrorHandler_shadows = \ XGetErrorText \ XDisplayName \ XSetIOErrorHandler \ XGetErrorDatabaseText XSendEvent_shadows = \ XDisplayMotionBufferSize \ XGetMotionEvents \ XTimeCoord XSetFillStyle_shadows = \ XSetFillRule XSetFontPath_shadows = \ XGetFontPath \ XFreeFontPath XSetInputFocus_shadows = \ XGetInputFocus XSetLineAttributes_shadows = \ XSetDashes XSetPointerMapping_shadows = \ XGetPointerMapping XSetScreenSaver_shadows = \ XForceScreenSaver \ XActivateScreenSaver \ XResetScreenSaver \ XGetScreenSaver XSetSelectionOwner_shadows = \ XGetSelectionOwner \ XConvertSelection XSetState_shadows = \ XSetFunction \ XSetPlaneMask \ XSetForeground \ XSetBackground XSetTransientForHint_shadows = \ XGetTransientForHint XSetTextProperty_shadows = \ XGetTextProperty XSetTile_shadows = \ XSetStipple \ XSetTSOrigin XSetWMClientMachine_shadows = \ XGetWMClientMachine XSetWMColormapWindows_shadows = \ XGetWMColormapWindows XSetWMIconName_shadows = \ XGetWMIconName \ XSetIconName \ XGetIconName XSetWMName_shadows = \ XGetWMName \ XStoreName \ XFetchName XSetWMProperties_shadows = \ XmbSetWMProperties \ Xutf8SetWMProperties XSetWMProtocols_shadows = \ XGetWMProtocols XStoreBytes_shadows = \ XStoreBuffer \ XFetchBytes \ XFetchBuffer \ XRotateBuffers XStoreColors_shadows = \ XStoreColor \ XStoreNamedColor XStringToKeysym_shadows = \ XKeysymToString \ XKeycodeToKeysym \ XKeysymToKeycode \ XConvertCase XSupportsLocale_shadows = \ XSetLocaleModifiers XSynchronize_shadows = \ XSetAfterFunction XmbTextListToTextProperty_shadows = \ XwcTextListToTextProperty \ Xutf8TextListToTextProperty \ XmbTextPropertyToTextList \ XwcTextPropertyToTextList \ Xutf8TextPropertyToTextList \ XwcFreeStringList \ XDefaultString XTextExtents_shadows = \ XTextExtents16 \ XQueryTextExtents \ XQueryTextExtents16 XTextWidth_shadows = \ XTextWidth16 XInitThreads_shadows = \ XLockDisplay \ XUnlockDisplay XrmUniqueQuark_shadows = \ XrmStringToQuark \ XrmPermStringToQuark \ XrmQuarkToString \ XrmStringToQuarkList \ XrmStringToBindingQuarkList XUnmapWindow_shadows = \ XUnmapSubwindows XcmsCCCOfColormap_shadows = \ XcmsSetCCCOfColormap XcmsAllocColor_shadows = \ XcmsAllocNamedColor XcmsColor_shadows = \ XcmsRGB \ XcmsRGBi \ XcmsCIEXYZ \ XcmsCIEuvY \ XcmsCIExyY \ XcmsCIELab \ XcmsCIELuv \ XcmsTekHVC \ XcmsPad XcmsCreateCCC_shadows = \ XcmsFreeCCC XcmsCIELabQueryMaxC_shadows = \ XcmsCIELabQueryMaxL \ XcmsCIELabQueryMaxLC \ XcmsCIELabQueryMinL XcmsCIELuvQueryMaxC_shadows = \ XcmsCIELuvQueryMaxL \ XcmsCIELuvQueryMaxLC \ XcmsCIELuvQueryMinL XcmsQueryBlack_shadows = \ XcmsQueryBlue \ XcmsQueryGreen \ XcmsQueryRed \ XcmsQueryWhite XcmsQueryColor_shadows = \ XcmsQueryColors \ XcmsLookupColor XcmsStoreColor_shadows = \ XcmsStoreColors XcmsSetWhitePoint_shadows = \ XcmsSetWhiteAdjustProc XcmsTekHVCQueryMaxC_shadows = \ XcmsTekHVCQueryMaxV \ XcmsTekHVCQueryMaxVC \ XcmsTekHVCQueryMaxVSamples \ XcmsTekHVCQueryMinV XmbDrawImageString_shadows = \ XwcDrawImageString \ Xutf8DrawImageString XmbDrawString_shadows = \ XwcDrawString \ Xutf8DrawString XmbDrawText_shadows = \ XwcDrawText \ Xutf8DrawText XmbLookupString_shadows = \ XwcLookupString \ Xutf8LookupString XmbResetIC_shadows = \ XwcResetIC \ Xutf8ResetIC XmbTextEscapement_shadows = \ XwcTextEscapement \ Xutf8TextEscapement XmbTextExtents_shadows = \ XwcTextExtents \ Xutf8TextExtents XmbTextPerCharExtents_shadows = \ XwcTextPerCharExtents \ Xutf8TextPerCharExtents file_shadows = \ $(Compose_shadows) Compose_shadows = \ XCompose all: all-recursive .SUFFIXES: .SUFFIXES: .$(LIB_MAN_SUFFIX) .$(FILE_MAN_SUFFIX) .man $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign man/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign man/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-filemanDATA: $(fileman_DATA) @$(NORMAL_INSTALL) @list='$(fileman_DATA)'; test -n "$(filemandir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(filemandir)'"; \ $(MKDIR_P) "$(DESTDIR)$(filemandir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(filemandir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(filemandir)" || exit $$?; \ done uninstall-filemanDATA: @$(NORMAL_UNINSTALL) @list='$(fileman_DATA)'; test -n "$(filemandir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(filemandir)'; $(am__uninstall_files_from_dir) install-libmanDATA: $(libman_DATA) @$(NORMAL_INSTALL) @list='$(libman_DATA)'; test -n "$(libmandir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(libmandir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libmandir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(libmandir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(libmandir)" || exit $$?; \ done uninstall-libmanDATA: @$(NORMAL_UNINSTALL) @list='$(libman_DATA)'; test -n "$(libmandir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(libmandir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(filemandir)" "$(DESTDIR)$(libmandir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-filemanDATA install-libmanDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-filemanDATA uninstall-libmanDATA .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am \ install-filemanDATA install-html install-html-am install-info \ install-info-am install-libmanDATA install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-filemanDATA \ uninstall-libmanDATA .PRECIOUS: Makefile # String replacements in MAN_SUBSTS now come from xorg-macros.m4 via configure .man.$(LIB_MAN_SUFFIX) .man.$(FILE_MAN_SUFFIX): $(AM_V_GEN)$(SED) $(MAN_SUBSTS) < $< > $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: (AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-filemanDATA: $(fileman_DATA) @$(NORMAL_INSTALL) @list='$(fileman_DATA)'; test -n "$(filemandir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIlibX11-1.6.3/man/XQueryPointer.man000064401431060000012000000117701247741723500171320ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XQueryPointer __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XQueryPointer \- get pointer coordinates .SH SYNTAX .HP Bool XQueryPointer\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, Window *\fIroot_return\fP\^, Window *\fIchild_return\fP\^, int *\fIroot_x_return\fP\^, int *\fIroot_y_return\fP\^, int *\fIwin_x_return\fP\^, int *\fIwin_y_return\fP\^, unsigned int *\fImask_return\fP\^); .SH ARGUMENTS .IP \fIchild_return\fP 1i Returns the child window that the pointer is located in, if any. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fImask_return\fP 1i Returns the current state of the modifier keys and pointer buttons. .ds Ro that the pointer is in .IP \fIroot_return\fP 1i Returns the root window \*(Ro. .IP \fIroot_x_return\fP 1i .br .ns .IP \fIroot_y_return\fP 1i Return the pointer coordinates relative to the root window's origin. .IP \fIw\fP 1i Specifies the window. .IP \fIwin_x_return\fP 1i .br .ns .IP \fIwin_y_return\fP 1i Return the pointer coordinates relative to the specified window. .SH DESCRIPTION The .ZN XQueryPointer function returns the root window the pointer is logically on and the pointer coordinates relative to the root window's origin. If .ZN XQueryPointer returns .ZN False , the pointer is not on the same screen as the specified window, and .ZN XQueryPointer returns .ZN None to child_return and zero to win_x_return and win_y_return. If .ZN XQueryPointer returns .ZN True , the pointer coordinates returned to win_x_return and win_y_return are relative to the origin of the specified window. In this case, .ZN XQueryPointer returns the child that contains the pointer, if any, or else .ZN None to child_return. .LP .ZN XQueryPointer returns the current logical state of the keyboard buttons and the modifier keys in mask_return. It sets mask_return to the bitwise inclusive OR of one or more of the button or modifier key bitmasks to match the current state of the mouse buttons and the modifier keys. .LP .ZN XQueryPointer can generate a .ZN BadWindow error. .SH DIAGNOSTICS .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XGetWindowAttributes(__libmansuffix__), XQueryTree(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/ProtocolRevision.man000064401431060000012000000000631247741723500176450ustar00alancstaff00002660200006.so man__libmansuffix__/AllPlanes.__libmansuffix__ libX11-1.6.3/man/XEvent.man000064401431060000012000000000631247741723500155360ustar00alancstaff00002660200006.so man__libmansuffix__/XAnyEvent.__libmansuffix__ libX11-1.6.3/man/XQueryBestTile.man000064401431060000012000000000701247741723500172140ustar00alancstaff00002660200006.so man__libmansuffix__/XQueryBestSize.__libmansuffix__ libX11-1.6.3/man/XKeycodeToKeysym.man000064401431060000012000000000711247741723500175440ustar00alancstaff00002660200006.so man__libmansuffix__/XStringToKeysym.__libmansuffix__ libX11-1.6.3/man/XInsertModifiermapEntry.man000064401431060000012000000001001247741723500211100ustar00alancstaff00002660200006.so man__libmansuffix__/XChangeKeyboardMapping.__libmansuffix__ libX11-1.6.3/man/XConfigureEvent.man000064401431060000012000000144031247741723500174030ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XConfigureEvent __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XConfigureEvent \- ConfigureNotify event structure .SH STRUCTURES The structure for .ZN ConfigureNotify events contains: .LP .Ds 0 typedef struct { int type; /\&* ConfigureNotify */ unsigned long serial; /\&* # of last request processed by server */ Bool send_event; /\&* true if this came from a SendEvent request */ Display *display; /\&* Display the event was read from */ Window event; Window window; int x, y; int width, height; int border_width; Window above; Bool override_redirect; } XConfigureEvent; .De .LP When you receive this event, the structure members are set as follows. .LP The type member is set to the event type constant name that uniquely identifies it. For example, when the X server reports a .ZN GraphicsExpose event to a client application, it sends an .ZN XGraphicsExposeEvent structure with the type member set to .ZN GraphicsExpose . The display member is set to a pointer to the display the event was read on. The send_event member is set to .ZN True if the event came from a .ZN SendEvent protocol request. The serial member is set from the serial number reported in the protocol but expanded from the 16-bit least-significant bits to a full 32-bit value. The window member is set to the window that is most useful to toolkit dispatchers. .LP The event member is set either to the reconfigured window or to its parent, depending on whether .ZN StructureNotify or .ZN SubstructureNotify was selected. The window member is set to the window whose size, position, border, and/or stacking order was changed. .LP The x and y members are set to the coordinates relative to the parent window's origin and indicate the position of the upper-left outside corner of the window. The width and height members are set to the inside size of the window, not including the border. The border_width member is set to the width of the window's border, in pixels. .LP The above member is set to the sibling window and is used for stacking operations. If the X server sets this member to .ZN None , the window whose state was changed is on the bottom of the stack with respect to sibling windows. However, if this member is set to a sibling window, the window whose state was changed is placed on top of this sibling window. .LP The override_redirect member is set to the override-redirect attribute of the window. Window manager clients normally should ignore this window if the override_redirect member is .ZN True . .SH "SEE ALSO" XAnyEvent(__libmansuffix__), XButtonEvent(__libmansuffix__), XCreateWindowEvent(__libmansuffix__), XCirculateEvent(__libmansuffix__), XCirculateRequestEvent(__libmansuffix__), XColormapEvent(__libmansuffix__), XConfigureRequestEvent(__libmansuffix__), XCrossingEvent(__libmansuffix__), XDestroyWindowEvent(__libmansuffix__), XErrorEvent(__libmansuffix__), XExposeEvent(__libmansuffix__), XFocusChangeEvent(__libmansuffix__), XGraphicsExposeEvent(__libmansuffix__), XGravityEvent(__libmansuffix__), XKeymapEvent(__libmansuffix__), XMapEvent(__libmansuffix__), XMapRequestEvent(__libmansuffix__), XPropertyEvent(__libmansuffix__), XReparentEvent(__libmansuffix__), XResizeRequestEvent(__libmansuffix__), XSelectionClearEvent(__libmansuffix__), XSelectionEvent(__libmansuffix__), XSelectionRequestEvent(__libmansuffix__), XUnmapEvent(__libmansuffix__), XVisibilityEvent(__libmansuffix__) .br \fI\*(xL\fP " 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 libX11-1.6.3/man/XWMGeometry.man000064401431060000012000000000701247741723500165120ustar00alancstaff00002660200006.so man__libmansuffix__/XParseGeometry.__libmansuffix__ libX11-1.6.3/man/XRectangle.man000064401431060000012000000000701247741723500163570ustar00alancstaff00002660200006.so man__libmansuffix__/XDrawRectangle.__libmansuffix__ libX11-1.6.3/man/XCloseOM.man000064401431060000012000000000611247741723500157540ustar00alancstaff00002660200006.so man__libmansuffix__/XOpenOM.__libmansuffix__ libX11-1.6.3/man/XDestroyOC.man000064401431060000012000000000631247741723500163300ustar00alancstaff00002660200006.so man__libmansuffix__/XCreateOC.__libmansuffix__ libX11-1.6.3/man/XClientMessageEvent.man000064401431060000012000000134301247741723500202040ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XClientMessageEvent __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XClientMessageEvent \- ClientMessage event structure .SH STRUCTURES The structure for .ZN ClientMessage events contains: .LP .Ds 0 typedef struct { int type; /\&* ClientMessage */ unsigned long serial; /\&* # of last request processed by server */ Bool send_event; /\&* true if this came from a SendEvent request */ Display *display; /\&* Display the event was read from */ Window window; Atom message_type; int format; union { char b[20]; short s[10]; long l[5]; } data; } XClientMessageEvent; .De .LP When you receive this event, the structure members are set as follows. .LP The type member is set to the event type constant name that uniquely identifies it. For example, when the X server reports a .ZN GraphicsExpose event to a client application, it sends an .ZN XGraphicsExposeEvent structure with the type member set to .ZN GraphicsExpose . The display member is set to a pointer to the display the event was read on. The send_event member is set to .ZN True if the event came from a .ZN SendEvent protocol request. The serial member is set from the serial number reported in the protocol but expanded from the 16-bit least-significant bits to a full 32-bit value. The window member is set to the window that is most useful to toolkit dispatchers. .LP The message_type member is set to an atom that indicates how the data should be interpreted by the receiving client. The format member is set to 8, 16, or 32 and specifies whether the data should be viewed as a list of bytes, shorts, or longs. The data member is a union that contains the members b, s, and l. The b, s, and l members represent data of twenty 8-bit values, ten 16-bit values, and five 32-bit values. Particular message types might not make use of all these values. The X server places no interpretation on the values in the window, message_type, or data members. .SH "SEE ALSO" XAnyEvent(__libmansuffix__), XButtonEvent(__libmansuffix__), XCreateWindowEvent(__libmansuffix__), XCirculateEvent(__libmansuffix__), XCirculateRequestEvent(__libmansuffix__), XColormapEvent(__libmansuffix__), XConfigureEvent(__libmansuffix__), XConfigureRequestEvent(__libmansuffix__), XCrossingEvent(__libmansuffix__), XDestroyWindowEvent(__libmansuffix__), XErrorEvent(__libmansuffix__), XExposeEvent(__libmansuffix__), XFocusChangeEvent(__libmansuffix__), XGraphicsExposeEvent(__libmansuffix__), XGravityEvent(__libmansuffix__), XKeymapEvent(__libmansuffix__), XMapEvent(__libmansuffix__), XMapRequestEvent(__libmansuffix__), XPropertyEvent(__libmansuffix__), XReparentEvent(__libmansuffix__), XResizeRequestEvent(__libmansuffix__), XSelectionClearEvent(__libmansuffix__), XSelectionEvent(__libmansuffix__), XSelectionRequestEvent(__libmansuffix__), XUnmapEvent(__libmansuffix__), XVisibilityEvent(__libmansuffix__) .br \fI\*(xL\fP sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions ColibX11-1.6.3/man/XDrawImageString16.man000064401431060000012000000000721247741723500176530ustar00alancstaff00002660200006.so man__libmansuffix__/XDrawImageString.__libmansuffix__ libX11-1.6.3/man/XmbTextPerCharExtents.man000064401431060000012000000163461247741723500205530ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" Copyright \(co 2000 The XFree86 Project, Inc. .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XmbTextPerCharExtents __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XmbTextPerCharExtents, XwcTextPerCharExtents, Xutf8TextPerCharExtents \- obtain per-character information for a text string .SH SYNTAX .HP Status XmbTextPerCharExtents\^(\^XFontSet \fIfont_set\fP\^, char *\fIstring\fP\^, int \fInum_bytes\fP\^, XRectangle *\fIink_array_return\fP\^, XRectangle *\fIlogical_array_return\fP\^, int \fIarray_size\fP\^, int *\fInum_chars_return\fP\^, XRectangle *\fIoverall_ink_return\fP\^, XRectangle *\fIoverall_logical_return\fP\^); .HP Status XwcTextPerCharExtents\^(\^XFontSet \fIfont_set\fP\^, wchar_t *\fIstring\fP\^, int \fInum_wchars\fP\^, XRectangle *\fIink_array_return\fP\^, XRectangle *\fIlogical_array_return\fP, int \fIarray_size\fP\^, int *\fInum_chars_return\fP\^, XRectangle *\fIoverall_ink_return\fP\^, XRectangle *\fIoverall_logical_return\fP\^); .HP Status Xutf8TextPerCharExtents\^(\^XFontSet \fIfont_set\fP\^, char *\fIstring\fP\^, int \fInum_bytes\fP\^, XRectangle *\fIink_array_return\fP\^, XRectangle *\fIlogical_array_return\fP\^, int \fIarray_size\fP\^, int *\fInum_chars_return\fP\^, XRectangle *\fIoverall_ink_return\fP\^, XRectangle *\fIoverall_logical_return\fP\^); .SH ARGUMENTS .IP \fIarray_size\fP 1i Specifies the size of ink_array_return and logical_array_return. The caller must pass in arrays of this size. .IP \fIfont_set\fP 1i Specifies the font set. .IP \fIink_array_return\fP 1i Returns the ink dimensions for each character. .IP \fIlogical_array_return\fP 1i Returns the logical dimensions for each character. .IP \fInum_bytes\fP 1i Specifies the number of bytes in the string argument. .IP \fInum_chars_return\fP 1i Returns the number of characters in the string argument. .IP \fInum_wchars\fP 1i Specifies the number of characters in the string argument. .ds Ov extents of the entire string .IP \fIoverall_ink_return\fP 1i Returns the overall ink \*(Ov. .IP \fIoverall_logical_return\fP 1i Returns the overall logical \*(Ov. .IP \fIstring\fP 1i Specifies the character string. .SH DESCRIPTION The .ZN XmbTextPerCharExtents , .ZN XwcTextPerCharExtents and .ZN Xutf8TextPerCharExtents functions return the text dimensions of each character of the specified text, using the fonts loaded for the specified font set. Each successive element of ink_array_return and logical_array_return is set to the successive character's drawn metrics, relative to the drawing origin of the string and one rectangle for each character in the supplied text string. The number of elements of ink_array_return and logical_array_return that have been set is returned to num_chars_return. .LP Each element of ink_array_return is set to the bounding box of the corresponding character's drawn foreground color. Each element of logical_array_return is set to the bounding box that provides minimum spacing to other graphical features for the corresponding character. Other graphical features should not intersect any of the logical_array_return rectangles. .LP Note that an .ZN XRectangle represents the effective drawing dimensions of the character, regardless of the number of font glyphs that are used to draw the character or the direction in which the character is drawn. If multiple characters map to a single character glyph, the dimensions of all the .ZN XRectangles of those characters are the same. .LP When the .ZN XFontSet has missing charsets, metrics for each unavailable character are taken from the default string returned by .ZN XCreateFontSet so that the metrics represent the text as it will actually be drawn. The behavior for an invalid codepoint is undefined. .LP If the array_size is too small for the number of characters in the supplied text, the functions return zero and num_chars_return is set to the number of rectangles required. Otherwise, the functions return a nonzero value. .LP If the overall_ink_return or overall_logical_return argument is non-NULL, .ZN XmbTextPerCharExtents , .ZN XwcTextPerCharExtents and .ZN Xutf8TextPerCharExtents return the maximum extent of the string's metrics to overall_ink_return or overall_logical_return, as returned by .ZN XmbTextExtents , .ZN XwcTextExtents or .ZN Xutf8TextExtents . .LP The function .ZN Xutf8TextPerCharExtents is an extension introduced by The XFree86 Project, Inc. in their 4.0.2 release. Its presence is indicated by the macro .ZN X_HAVE_UTF8_STRING . .SH "SEE ALSO" XmbTextEscapement(__libmansuffix__), XmbTextExtents(__libmansuffix__) \fI\*(xL\fP is 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 perslibX11-1.6.3/man/XMappingEvent.man000064401431060000012000000000631247741723500170520ustar00alancstaff00002660200006.so man__libmansuffix__/XMapEvent.__libmansuffix__ libX11-1.6.3/man/XResizeRequestEvent.man000064401431060000012000000122711247741723500202750ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XResizeRequestEvent __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XResizeRequestEvent \- ResizeRequest event structure .SH STRUCTURES The structure for .ZN ResizeRequest events contains: .LP .Ds 0 typedef struct { int type; /\&* ResizeRequest */ unsigned long serial; /\&* # of last request processed by server */ Bool send_event; /\&* true if this came from a SendEvent request */ Display *display; /\&* Display the event was read from */ Window window; int width, height; } XResizeRequestEvent; .De .LP When you receive this event, the structure members are set as follows. .LP The type member is set to the event type constant name that uniquely identifies it. For example, when the X server reports a .ZN GraphicsExpose event to a client application, it sends an .ZN XGraphicsExposeEvent structure with the type member set to .ZN GraphicsExpose . The display member is set to a pointer to the display the event was read on. The send_event member is set to .ZN True if the event came from a .ZN SendEvent protocol request. The serial member is set from the serial number reported in the protocol but expanded from the 16-bit least-significant bits to a full 32-bit value. The window member is set to the window that is most useful to toolkit dispatchers. .LP The window member is set to the window whose size another client attempted to change. The width and height members are set to the inside size of the window, excluding the border. .SH "SEE ALSO" XAnyEvent(__libmansuffix__), XButtonEvent(__libmansuffix__), XCreateWindowEvent(__libmansuffix__), XCirculateEvent(__libmansuffix__), XCirculateRequestEvent(__libmansuffix__), XColormapEvent(__libmansuffix__), XConfigureEvent(__libmansuffix__), XConfigureRequestEvent(__libmansuffix__), XCrossingEvent(__libmansuffix__), XDestroyWindowEvent(__libmansuffix__), XErrorEvent(__libmansuffix__), XExposeEvent(__libmansuffix__), XFocusChangeEvent(__libmansuffix__), XGraphicsExposeEvent(__libmansuffix__), XGravityEvent(__libmansuffix__), XKeymapEvent(__libmansuffix__), XMapEvent(__libmansuffix__), XMapRequestEvent(__libmansuffix__), XPropertyEvent(__libmansuffix__), XReparentEvent(__libmansuffix__), XSelectionClearEvent(__libmansuffix__), XSelectionEvent(__libmansuffix__), XSelectionRequestEvent(__libmansuffix__), XUnmapEvent(__libmansuffix__), XVisibilityEvent(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/BlackPixelOfScreen.man000064401431060000012000000157171247741723500200040ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .de NT .ne 7 .ds NO Note .if \\n(.$>$1 .if !'\\$2'C' .ds NO \\$2 .if \\n(.$ .if !'\\$1'C' .ds NO \\$1 .ie n .sp .el .sp 10p .TB .ce \\*(NO .ie n .sp .el .sp 5p .if '\\$1'C' .ce 99 .if '\\$2'C' .ce 99 .in +5n .ll -5n .R .. . \" Note End -- doug kraft 3/85 .de NE .ce 0 .in -5n .ll +5n .ie n .sp .el .sp 10p .. .ny0 .TH BlackPixelOfScreen __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME BlackPixelOfScreen, WhitePixelOfScreen, CellsOfScreen, DefaultColormapOfScreen, DefaultDepthOfScreen, DefaultGCOfScreen, DefaultVisualOfScreen, DoesBackingStore, DoesSaveUnders, DisplayOfScreen, XScreenNumberOfScreen, EventMaskOfScreen, HeightOfScreen, HeightMMOfScreen, MaxCmapsOfScreen, MinCmapsOfScreen, PlanesOfScreen, RootWindowOfScreen, WidthOfScreen, WidthMMOfScreen \- screen information functions and macros .SH SYNTAX .HP unsigned long BlackPixelOfScreen\^(\^Screen *\fIscreen\fP\^); .HP unsigned long WhitePixelOfScreen\^(\^Screen *\fIscreen\fP\^); .HP int CellsOfScreen\^(\^Screen *\fIscreen\fP\^); .HP Colormap DefaultColormapOfScreen\^(\^Screen *\fIscreen\fP\^); .HP int DefaultDepthOfScreen\^(\^Screen *\fIscreen\fP\^); .HP GC DefaultGCOfScreen\^(\^Screen *\fIscreen\fP\^); .HP Visual *DefaultVisualOfScreen\^(\^Screen *\fIscreen\fP\^); .HP int DoesBackingStore\^(\^Screen *\fIscreen\fP\^); .HP Bool DoesSaveUnders\^(\^Screen *\fIscreen\fP\^); .HP Display *DisplayOfScreen\^(\^Screen *\fIscreen\fP\^); .HP int XScreenNumberOfScreen\^(\^Screen *\fIscreen\fP\^); .HP long EventMaskOfScreen\^(\^Screen *\fIscreen\fP\^); .HP int HeightOfScreen\^(\^Screen *\fIscreen\fP\^); .HP int HeightMMOfScreen\^(\^Screen *\fIscreen\fP\^); .HP int MaxCmapsOfScreen\^(\^Screen *\fIscreen\fP\^); .HP int MinCmapsOfScreen\^(\^Screen *\fIscreen\fP\^); .HP int PlanesOfScreen\^(\^Screen *\fIscreen\fP\^); .HP Window RootWindowOfScreen\^(\^Screen *\fIscreen\fP\^); .HP int WidthOfScreen\^(\^Screen *\fIscreen\fP\^); .HP int WidthMMOfScreen\^(\^Screen *\fIscreen\fP\^); .SH ARGUMENTS .IP \fIscreen\fP 1i Specifies the appropriate .ZN Screen structure. .SH DESCRIPTION The .ZN BlackPixelOfScreen macro returns the black pixel value of the specified screen. .LP The .ZN WhitePixelOfScreen macro returns the white pixel value of the specified screen. .LP The .ZN CellsOfScreen macro returns the number of colormap cells in the default colormap of the specified screen. .LP The .ZN DefaultColormapOfScreen macro returns the default colormap of the specified screen. .LP The .ZN DefaultDepthOfScreen macro returns the default depth of the root window of the specified screen. .LP The .ZN DefaultGCOfScreen macro returns the default GC of the specified screen, which has the same depth as the root window of the screen. .LP The .ZN DefaultVisualOfScreen macro returns the default visual of the specified screen. .LP The .ZN DoesBackingStore macro returns .ZN WhenMapped , .ZN NotUseful , or .ZN Always , which indicate whether the screen supports backing stores. .LP The .ZN DoesSaveUnders macro returns a Boolean value indicating whether the screen supports save unders. .LP The .ZN DisplayOfScreen macro returns the display of the specified screen. .LP The .ZN XScreenNumberOfScreen function returns the screen index number of the specified screen. .LP The .ZN EventMaskOfScreen macro returns the root event mask of the root window for the specified screen at connection setup. .LP The .ZN HeightOfScreen macro returns the height of the specified screen. .LP The .ZN HeightMMOfScreen macro returns the height of the specified screen in millimeters. .LP The .ZN MaxCmapsOfScreen macro returns the maximum number of installed colormaps supported by the specified screen. .LP The .ZN MinCmapsOfScreen macro returns the minimum number of installed colormaps supported by the specified screen. .LP The .ZN PlanesOfScreen macro returns the number of planes in the root window of the specified screen. .LP The .ZN RootWindowOfScreen macro returns the root window of the specified screen. .LP The .ZN WidthOfScreen macro returns the width of the specified screen. .LP The .ZN WidthMMOfScreen macro returns the width of the specified screen in millimeters. .SH "SEE ALSO" AllPlanes(__libmansuffix__), ImageByteOrder(__libmansuffix__), IsCursorKey(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XSetTSOrigin.man000064401431060000012000000000621247741723500166260ustar00alancstaff00002660200006.so man__libmansuffix__/XSetTile.__libmansuffix__ libX11-1.6.3/man/XClipBox.man000064401431060000012000000000701247741723500160130ustar00alancstaff00002660200006.so man__libmansuffix__/XPolygonRegion.__libmansuffix__ libX11-1.6.3/man/XAddHosts.man000064401431060000012000000000621247741723500161650ustar00alancstaff00002660200006.so man__libmansuffix__/XAddHost.__libmansuffix__ libX11-1.6.3/man/ServerVendor.man000064401431060000012000000000631247741723500167510ustar00alancstaff00002660200006.so man__libmansuffix__/AllPlanes.__libmansuffix__ libX11-1.6.3/man/XrmQGetSearchList.man000064401431060000012000000000701247741723500176340ustar00alancstaff00002660200006.so man__libmansuffix__/XrmGetResource.__libmansuffix__ libX11-1.6.3/man/XFilterEvent.man000064401431060000012000000075301247741723500167120ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XFilterEvent __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XFilterEvent \- filter X events for an input method .SH SYNTAX .HP Bool XFilterEvent\^(\^XEvent *\fIevent\fP\^, Window \fIw\fP\^); .SH ARGUMENTS .ds Ev event to filter .IP \fIevent\fP 1i Specifies the \*(Ev. .ds Wi for which the filter is to be applied .IP \fIw\fP 1i Specifies the window \*(Wi. .SH DESCRIPTION If the window argument is .ZN None , .ZN XFilterEvent applies the filter to the window specified in the .ZN XEvent structure. The window argument is provided so that layers above Xlib that do event redirection can indicate to which window an event has been redirected. .LP If .ZN XFilterEvent returns .ZN True , then some input method has filtered the event, and the client should discard the event. If .ZN XFilterEvent returns .ZN False , then the client should continue processing the event. .LP If a grab has occurred in the client and .ZN XFilterEvent returns .ZN True , the client should ungrab the keyboard. .SH "SEE ALSO" XNextEvent(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XSelectionEvent.man000064401431060000012000000132551247741723500174130ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XSelectionEvent __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XSelectionEvent \- SelectionNotify event structure .SH STRUCTURES The structure for .ZN SelectionNotify events contains: .LP .Ds 0 typedef struct { int type; /\&* SelectionNotify */ unsigned long serial; /\&* # of last request processed by server */ Bool send_event; /\&* true if this came from a SendEvent request */ Display *display; /\&* Display the event was read from */ Window requestor; Atom selection; Atom target; Atom property; /\&* atom or None */ Time time; } XSelectionEvent; .De .LP When you receive this event, the structure members are set as follows. .LP The type member is set to the event type constant name that uniquely identifies it. For example, when the X server reports a .ZN GraphicsExpose event to a client application, it sends an .ZN XGraphicsExposeEvent structure with the type member set to .ZN GraphicsExpose . The display member is set to a pointer to the display the event was read on. The send_event member is set to .ZN True if the event came from a .ZN SendEvent protocol request. The serial member is set from the serial number reported in the protocol but expanded from the 16-bit least-significant bits to a full 32-bit value. The window member is set to the window that is most useful to toolkit dispatchers. .LP The requestor member is set to the window associated with the requestor of the selection. The selection member is set to the atom that indicates the selection. For example, PRIMARY is used for the primary selection. The target member is set to the atom that indicates the converted type. For example, PIXMAP is used for a pixmap. The property member is set to the atom that indicates which property the result was stored on. If the conversion failed, the property member is set to .ZN None . The time member is set to the time the conversion took place and can be a timestamp or .ZN CurrentTime . .SH "SEE ALSO" XAnyEvent(__libmansuffix__), XButtonEvent(__libmansuffix__), XCreateWindowEvent(__libmansuffix__), XCirculateEvent(__libmansuffix__), XCirculateRequestEvent(__libmansuffix__), XColormapEvent(__libmansuffix__), XConfigureEvent(__libmansuffix__), XConfigureRequestEvent(__libmansuffix__), XCrossingEvent(__libmansuffix__), XDestroyWindowEvent(__libmansuffix__), XErrorEvent(__libmansuffix__), XExposeEvent(__libmansuffix__), XFocusChangeEvent(__libmansuffix__), XGraphicsExposeEvent(__libmansuffix__), XGravityEvent(__libmansuffix__), XKeymapEvent(__libmansuffix__), XMapEvent(__libmansuffix__), XMapRequestEvent(__libmansuffix__), XPropertyEvent(__libmansuffix__), XReparentEvent(__libmansuffix__), XResizeRequestEvent(__libmansuffix__), XSelectionClearEvent(__libmansuffix__), XSelectionRequestEvent(__libmansuffix__), XUnmapEvent(__libmansuffix__), XVisibilityEvent(__libmansuffix__) .br \fI\*(xL\fP re. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 libX11-1.6.3/man/XSetICValues.man000064401431060000012000000125731247741723500166150ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XSetICValues __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XSetICValues, XGetICValues \- set and obtain XIC values .SH SYNTAX .HP char * XSetICValues\^(\^XIC \fIic\fP, ...\^); .HP char * XGetICValues\^(\^XIC \fIic\fP, ...\^); .SH ARGUMENTS .IP \fIic\fP 1i Specifies the input context. .ds Al \ to set or get XIC values .IP ... 1i Specifies the variable length argument list\*(Al. .SH DESCRIPTION The .ZN XSetICValues function returns NULL if no error occurred; otherwise, it returns the name of the first argument that could not be set. An argument might not be set for any of the following reasons: .IP \(bu 5 The argument is read-only (for example, .ZN XNFilterEvents ). .IP \(bu 5 The argument name is not recognized. .IP \(bu 5 An implementation-dependent error occurs. .LP Each value to be set must be an appropriate datum, matching the data type imposed by the semantics of the argument. .LP The .ZN XSetICValues can generate .ZN BadAtom , .ZN BadColor , .ZN BadCursor , .ZN BadPixmap , and .ZN BadWindow errors. .LP The .ZN XGetICValues function returns NULL if no error occurred; otherwise, it returns the name of the first argument that could not be obtained. An argument could not be obtained for any of the following reasons: .IP \(bu 5 The argument name is not recognized. .IP \(bu 5 The input method encountered an implementation-dependent error. .LP Each IC attribute value argument (following a name) must point to a location where the IC value is to be stored. That is, if the IC value is of type T, the argument must be of type T*. If T itself is a pointer type, then .ZN XGetICValues allocates memory to store the actual data, and the client is responsible for freeing this data by calling .ZN XFree with the returned pointer. The exception to this rule is for an IC value of type .ZN XNVaNestedList (for preedit and status attributes). In this case, the argument must also be of type .ZN XVaNestedList . Then, the rule of changing type T to T* and freeing the allocated data applies to each element of the nested list. .SH DIAGNOSTICS .TP 1i .ZN BadAtom A value for an Atom argument does not name a defined Atom. .TP 1i .ZN BadColor A value for a Colormap argument does not name a defined Colormap. .TP 1i .ZN BadCursor A value for a Cursor argument does not name a defined Cursor. .TP 1i .ZN BadPixmap A value for a Pixmap argument does not name a defined Pixmap. .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XCreateIC(__libmansuffix__), XOpenIM(__libmansuffix__), XSetICFocus(__libmansuffix__), XmbResetIC(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XSetWMIconName.man000064401431060000012000000133251247741723500170730ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XSetWMIconName __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XSetWMIconName, XGetWMIconName, XSetIconName, XGetIconName \- set or read a window's WM_ICON_NAME property .SH SYNTAX .HP void XSetWMIconName\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, XTextProperty *\fItext_prop\fP\^); .HP Status XGetWMIconName\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, XTextProperty *\fItext_prop_return\fP\^); .HP int XSetIconName\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, char *\fIicon_name\fP\^); .HP Status XGetIconName\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, char **\fIicon_name_return\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIicon_name\fP 1i Specifies the icon name, which should be a null-terminated string. .IP \fIicon_name_return\fP 1i Returns the window's icon name, which is a null-terminated string. .IP \fItext_prop\fP 1i Specifies the .ZN XTextProperty structure to be used. .IP \fItext_prop_return\fP 1i Returns the .ZN XTextProperty structure. .IP \fIw\fP 1i Specifies the window. .SH DESCRIPTION The .ZN XSetWMIconName convenience function calls .ZN XSetTextProperty to set the WM_ICON_NAME property. .LP The .ZN XGetWMIconName convenience function calls .ZN XGetTextProperty to obtain the WM_ICON_NAME property. It returns a nonzero status on success; otherwise, it returns a zero status. .LP The .ZN XSetIconName function sets the name to be displayed in a window's icon. .LP .ZN XSetIconName can generate .ZN BadAlloc and .ZN BadWindow errors. .LP The .ZN XGetIconName function returns the name to be displayed in the specified window's icon. If it succeeds, it returns a nonzero status; otherwise, if no icon name has been set for the window, it returns zero. If you never assigned a name to the window, .ZN XGetIconName sets icon_name_return to NULL. If the data returned by the server is in the Latin Portable Character Encoding, then the returned string is in the Host Portable Character Encoding. Otherwise, the result is implementation-dependent. When finished with it, a client must free the icon name string using .ZN XFree . .LP .ZN XGetIconName can generate a .ZN BadWindow error. .SH PROPERTIES .TP 1i \s-1WM_ICON_NAME\s+1 The name to be used in an icon. .SH DIAGNOSTICS .TP 1i .ZN BadAlloc The server failed to allocate the requested resource or server memory. .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XAllocClassHint(__libmansuffix__), XAllocIconSize(__libmansuffix__), XAllocSizeHints(__libmansuffix__), XAllocWMHints(__libmansuffix__), XFree(__libmansuffix__), XSetCommand(__libmansuffix__), XSetTransientForHint(__libmansuffix__), XSetTextProperty(__libmansuffix__), XSetWMClientMachine(__libmansuffix__), XSetWMColormapWindows(__libmansuffix__), XSetWMName(__libmansuffix__), XSetWMProperties(__libmansuffix__), XSetWMProtocols(__libmansuffix__), XStringListToTextProperty(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XCheckTypedEvent.man000064401431060000012000000000641247741723500175030ustar00alancstaff00002660200006.so man__libmansuffix__/XNextEvent.__libmansuffix__ libX11-1.6.3/man/XCirculateEvent.man000064401431060000012000000130211247741723500173700ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XCirculateEvent __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XCirculateEvent \- CirculateNotify event structure .SH STRUCTURES The structure for .ZN CirculateNotify events contains: .LP .Ds 0 typedef struct { int type; /\&* CirculateNotify */ unsigned long serial; /\&* # of last request processed by server */ Bool send_event; /\&* true if this came from a SendEvent request */ Display *display; /\&* Display the event was read from */ Window event; Window window; int place; /\&* PlaceOnTop, PlaceOnBottom */ } XCirculateEvent; .De .LP When you receive this event, the structure members are set as follows. .LP The type member is set to the event type constant name that uniquely identifies it. For example, when the X server reports a .ZN GraphicsExpose event to a client application, it sends an .ZN XGraphicsExposeEvent structure with the type member set to .ZN GraphicsExpose . The display member is set to a pointer to the display the event was read on. The send_event member is set to .ZN True if the event came from a .ZN SendEvent protocol request. The serial member is set from the serial number reported in the protocol but expanded from the 16-bit least-significant bits to a full 32-bit value. The window member is set to the window that is most useful to toolkit dispatchers. .LP The event member is set either to the restacked window or to its parent, depending on whether .ZN StructureNotify or .ZN SubstructureNotify was selected. The window member is set to the window that was restacked. The place member is set to the window's position after the restack occurs and is either .ZN PlaceOnTop or .ZN PlaceOnBottom . If it is .ZN PlaceOnTop , the window is now on top of all siblings. If it is .ZN PlaceOnBottom , the window is now below all siblings. .SH "SEE ALSO" XAnyEvent(__libmansuffix__), XButtonEvent(__libmansuffix__), XCreateWindowEvent(__libmansuffix__), XCirculateRequestEvent(__libmansuffix__), XColormapEvent(__libmansuffix__), XConfigureEvent(__libmansuffix__), XConfigureRequestEvent(__libmansuffix__), XCrossingEvent(__libmansuffix__), XDestroyWindowEvent(__libmansuffix__), XErrorEvent(__libmansuffix__), XExposeEvent(__libmansuffix__), XFocusChangeEvent(__libmansuffix__), XGraphicsExposeEvent(__libmansuffix__), XGravityEvent(__libmansuffix__), XKeymapEvent(__libmansuffix__), XMapEvent(__libmansuffix__), XMapRequestEvent(__libmansuffix__), XPropertyEvent(__libmansuffix__), XReparentEvent(__libmansuffix__), XResizeRequestEvent(__libmansuffix__), XSelectionClearEvent(__libmansuffix__), XSelectionEvent(__libmansuffix__), XSelectionRequestEvent(__libmansuffix__), XUnmapEvent(__libmansuffix__), XVisibilityEvent(__libmansuffix__) .br \fI\*(xL\fP ollowing conditions: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 libX11-1.6.3/man/XFlush.man000064401431060000012000000137271247741723500155510ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XFlush __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XFlush, XSync, XEventsQueued, XPending \- handle output buffer or event queue .SH SYNTAX .HP int XFlush\^(\^Display *\fIdisplay\fP\^); .HP int XSync\^(\^Display *\fIdisplay\fP\^, Bool \fIdiscard\fP\^); .HP int XEventsQueued\^(\^Display *\fIdisplay\fP\^, int \fImode\fP\^); .HP int XPending\^(\^Display *\fIdisplay\fP\^); .SH ARGUMENTS .IP \fIdiscard\fP 1i Specifies a Boolean value that indicates whether .ZN XSync discards all events on the event queue. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fImode\fP 1i Specifies the mode. You can pass .ZN QueuedAlready , .ZN QueuedAfterFlush , or .ZN QueuedAfterReading . .SH DESCRIPTION The .ZN XFlush function flushes the output buffer. Most client applications need not use this function because the output buffer is automatically flushed as needed by calls to .ZN XPending , .ZN XNextEvent , and .ZN XWindowEvent . .IN "XPending" .IN "XNextEvent" .IN "XWindowEvent" Events generated by the server may be enqueued into the library's event queue. .LP The .ZN XSync function flushes the output buffer and then waits until all requests have been received and processed by the X server. Any errors generated must be handled by the error handler. For each protocol error received by Xlib, .ZN XSync calls the client application's error handling routine (see section 11.8.2). Any events generated by the server are enqueued into the library's event queue. .LP Finally, if you passed .ZN False , .ZN XSync does not discard the events in the queue. If you passed .ZN True , .ZN XSync discards all events in the queue, including those events that were on the queue before .ZN XSync was called. Client applications seldom need to call .ZN XSync . .LP If mode is .ZN QueuedAlready , .ZN XEventsQueued returns the number of events already in the event queue (and never performs a system call). If mode is .ZN QueuedAfterFlush , .ZN XEventsQueued returns the number of events already in the queue if the number is nonzero. If there are no events in the queue, .ZN XEventsQueued flushes the output buffer, attempts to read more events out of the application's connection, and returns the number read. If mode is .ZN QueuedAfterReading , .ZN XEventsQueued returns the number of events already in the queue if the number is nonzero. If there are no events in the queue, .ZN XEventsQueued attempts to read more events out of the application's connection without flushing the output buffer and returns the number read. .LP .ZN XEventsQueued always returns immediately without I/O if there are events already in the queue. .ZN XEventsQueued with mode .ZN QueuedAfterFlush is identical in behavior to .ZN XPending . .ZN XEventsQueued with mode .ZN QueuedAlready is identical to the .ZN XQLength function. .LP The .ZN XPending function returns the number of events that have been received from the X server but have not been removed from the event queue. .ZN XPending is identical to .ZN XEventsQueued with the mode .ZN QueuedAfterFlush specified. .SH "SEE ALSO" AllPlanes(__libmansuffix__), XIfEvent(__libmansuffix__), XNextEvent(__libmansuffix__), XPutBackEvent(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XGetMotionEvents.man000064401431060000012000000000641247741723500175500ustar00alancstaff00002660200006.so man__libmansuffix__/XSendEvent.__libmansuffix__ libX11-1.6.3/man/XcmsStoreColor.man000064401431060000012000000165101247741723500172570ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XcmsStoreColor __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XcmsStoreColor, XcmsStoreColors \- set colors .SH SYNTAX .HP Status XcmsStoreColor\^(\^Display *\fIdisplay\fP\^, Colormap \fIcolormap\fP\^, XcmsColor *\fIcolor\fP\^); .HP Status XcmsStoreColors\^(\^Display *\fIdisplay\fP\^, Colormap \fIcolormap\fP\^, XcmsColor \fIcolors\fP\^[\^]\^, int \fIncolors\fP\^, Bool \fIcompression_flags_return\fP\^[\^]\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIcolor\fP 1i Specifies the color cell and the color to store. Values specified in this .ZN XcmsColor structure remain unchanged on return. .IP \fIcolors\fP 1i Specifies the color specification array of .ZN XcmsColor structures, each specifying a color cell and the color to store in that cell. Values specified in the array remain unchanged upon return. .IP \fIcolormap\fP 1i Specifies the colormap. .IP \fIcompression_flags_return\fP 1i Returns an array of Boolean values indicating compression status. If a non-NULL pointer is supplied, each element of the array is set to .ZN True if the corresponding color was compressed and .ZN False otherwise. Pass NULL if the compression status is not useful. .IP \fIncolors\fP 1i Specifies the number of .ZN XcmsColor structures in the color-specification array. .SH DESCRIPTION The .ZN XcmsStoreColor function converts the color specified in the .ZN XcmsColor structure into RGB values. It then uses this RGB specification in an .ZN XColor structure, whose three flags .Pn ( DoRed , .ZN DoGreen , and .ZN DoBlue ) are set, in a call to .ZN XStoreColor to change the color cell specified by the pixel member of the .ZN XcmsColor structure. This pixel value must be a valid index for the specified colormap, and the color cell specified by the pixel value must be a read/write cell. If the pixel value is not a valid index, a .ZN BadValue error results. If the color cell is unallocated or is allocated read-only, a .ZN BadAccess error results. If the colormap is an installed map for its screen, the changes are visible immediately. .LP Note that .ZN XStoreColor has no return value; therefore, an .ZN XcmsSuccess return value from this function indicates that the conversion to RGB succeeded and the call to .ZN XStoreColor was made. To obtain the actual color stored, use .ZN XcmsQueryColor . Because of the screen's hardware limitations or gamut compression, the color stored in the colormap may not be identical to the color specified. .LP .ZN XcmsStoreColor can generate .ZN BadAccess , .ZN BadColor , and .ZN BadValue errors. .LP The .ZN XcmsStoreColors function converts the colors specified in the array of .ZN XcmsColor structures into RGB values and then uses these RGB specifications in .ZN XColor structures, whose three flags .Pn ( DoRed , .ZN DoGreen , and .ZN DoBlue ) are set, in a call to .ZN XStoreColors to change the color cells specified by the pixel member of the corresponding .ZN XcmsColor structure. Each pixel value must be a valid index for the specified colormap, and the color cell specified by each pixel value must be a read/write cell. If a pixel value is not a valid index, a .ZN BadValue error results. If a color cell is unallocated or is allocated read-only, a .ZN BadAccess error results. If more than one pixel is in error, the one that gets reported is arbitrary. If the colormap is an installed map for its screen, the changes are visible immediately. .LP Note that .ZN XStoreColors has no return value; therefore, an .ZN XcmsSuccess return value from this function indicates that conversions to RGB succeeded and the call to .ZN XStoreColors was made. To obtain the actual colors stored, use .ZN XcmsQueryColors . Because of the screen's hardware limitations or gamut compression, the colors stored in the colormap may not be identical to the colors specified. .LP .LP .ZN XcmsStoreColors can generate .ZN BadAccess , .ZN BadColor , and .ZN BadValue errors. .SH DIAGNOSTICS .TP 1i .ZN BadAccess A client attempted to free a color map entry that it did not already allocate. .TP 1i .ZN BadAccess A client attempted to store into a read-only color map entry. .TP 1i .ZN BadColor A value for a Colormap argument does not name a defined Colormap. .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .SH "SEE ALSO" XcmsAllocColor(__libmansuffix__), XcmsQueryColor(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XQueryBestSize.man000064401431060000012000000146631247741723500172460ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XQueryBestSize __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XQueryBestSize, XQueryBestTile, XQueryBestStipple \- determine efficient sizes .SH SYNTAX .HP Status XQueryBestSize\^(\^Display *\fIdisplay\fP\^, int \fIclass\fP\^, Drawable \fIwhich_screen\fP\^, unsigned int \fIwidth\fP, unsigned int \fIheight\fP\^, unsigned int *\fIwidth_return\fP, unsigned int *\fIheight_return\fP\^); .HP Status XQueryBestTile\^(\^Display *\fIdisplay\fP\^, Drawable \fIwhich_screen\fP\^, unsigned int \fIwidth\fP, unsigned int \fIheight\fP\^, unsigned int *\fIwidth_return\fP, unsigned int *\fIheight_return\fP\^); .HP Status XQueryBestStipple\^(\^Display *\fIdisplay\fP\^, Drawable \fIwhich_screen\fP\^, unsigned int \fIwidth\fP, unsigned int \fIheight\fP\^, unsigned int *\fIwidth_return\fP, unsigned int *\fIheight_return\fP\^); .SH ARGUMENTS .IP \fIclass\fP 1i Specifies the class that you are interested in. You can pass .ZN TileShape , .ZN CursorShape , or .ZN StippleShape . .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIwidth\fP 1i .br .ns .IP \fIheight\fP 1i Specify the width and height. .IP \fIwhich_screen\fP 1i Specifies any drawable on the screen. .IP \fIwidth_return\fP 1i .br .ns .IP \fIheight_return\fP 1i Return the width and height of the object best supported by the display hardware. .SH DESCRIPTION The .ZN XQueryBestSize function returns the best or closest size to the specified size. For .ZN CursorShape , this is the largest size that can be fully displayed on the screen specified by which_screen. For .ZN TileShape , this is the size that can be tiled fastest. For .ZN StippleShape , this is the size that can be stippled fastest. For .ZN CursorShape , the drawable indicates the desired screen. For .ZN TileShape and .ZN StippleShape , the drawable indicates the screen and possibly the window class and depth. An .ZN InputOnly window cannot be used as the drawable for .ZN TileShape or .ZN StippleShape , or a .ZN BadMatch error results. .LP .ZN XQueryBestSize can generate .ZN BadDrawable , .ZN BadMatch , and .ZN BadValue errors. .LP The .ZN XQueryBestTile function returns the best or closest size, that is, the size that can be tiled fastest on the screen specified by which_screen. The drawable indicates the screen and possibly the window class and depth. If an .ZN InputOnly window is used as the drawable, a .ZN BadMatch error results. .LP .ZN XQueryBestTile can generate .ZN BadDrawable and .ZN BadMatch errors. .LP The .ZN XQueryBestStipple function returns the best or closest size, that is, the size that can be stippled fastest on the screen specified by which_screen. The drawable indicates the screen and possibly the window class and depth. If an .ZN InputOnly window is used as the drawable, a .ZN BadMatch error results. .LP .ZN XQueryBestStipple can generate .ZN BadDrawable and .ZN BadMatch errors. .SH DIAGNOSTICS .TP 1i .ZN BadMatch An .ZN InputOnly window is used as a Drawable. .TP 1i .ZN BadDrawable A value for a Drawable argument does not name a defined Window or Pixmap. .TP 1i .ZN BadMatch The values do not exist for an .ZN InputOnly window. .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .SH "SEE ALSO" XCreateGC(__libmansuffix__), XSetArcMode(__libmansuffix__), XSetClipOrigin(__libmansuffix__), XSetFillStyle(__libmansuffix__), XSetFont(__libmansuffix__), XSetLineAttributes(__libmansuffix__), XSetState(__libmansuffix__), XSetTile(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XIfEvent.man000064401431060000012000000144011247741723500160160ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XIfEvent __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XIfEvent, XCheckIfEvent, XPeekIfEvent \- check the event queue with a predicate procedure .SH SYNTAX .HP int XIfEvent\^(\^Display *\fIdisplay\fP\^, XEvent *\fIevent_return\fP\^, Bool (\^*\fIpredicate\fP\^)\^(\^)\^, XPointer \fIarg\fP\^); .HP Bool XCheckIfEvent\^(\^Display *\fIdisplay\fP\^, XEvent *\fIevent_return\fP\^, Bool (\^*\fIpredicate\fP\^)\^(\^)\^, XPointer \fIarg\fP\^); .HP int XPeekIfEvent\^(\^Display *\fIdisplay\fP\^, XEvent *\fIevent_return\fP\^, Bool (\^*\fIpredicate\fP\^)\^(\^)\^, XPointer \fIarg\fP\^); .SH ARGUMENTS .IP \fIarg\fP 1i Specifies the user-supplied argument that will be passed to the predicate procedure. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .ds Ev \ either a copy of or .IP \fIevent_return\fP 1i Returns\*(Ev the matched event's associated structure. .IP \fIpredicate\fP 1i Specifies the procedure that is to be called to determine if the next event in the queue matches what you want. .SH DESCRIPTION The .ZN XIfEvent function completes only when the specified predicate procedure returns .ZN True for an event, which indicates an event in the queue matches. .ZN XIfEvent flushes the output buffer if it blocks waiting for additional events. .ZN XIfEvent removes the matching event from the queue and copies the structure into the client-supplied .ZN XEvent structure. .LP When the predicate procedure finds a match, .ZN XCheckIfEvent copies the matched event into the client-supplied .ZN XEvent structure and returns .ZN True . (This event is removed from the queue.) If the predicate procedure finds no match, .ZN XCheckIfEvent returns .ZN False , and the output buffer will have been flushed. All earlier events stored in the queue are not discarded. .LP The .ZN XPeekIfEvent function returns only when the specified predicate procedure returns .ZN True for an event. After the predicate procedure finds a match, .ZN XPeekIfEvent copies the matched event into the client-supplied .ZN XEvent structure without removing the event from the queue. .ZN XPeekIfEvent flushes the output buffer if it blocks waiting for additional events. .LP Each of these functions requires you to pass a predicate procedure that determines if an event matches what you want. Your predicate procedure must decide if the event is useful without calling any Xlib functions. If the predicate directly or indirectly causes the state of the event queue to change, the result is not defined. If Xlib has been initialized for threads, the predicate is called with the display locked and the result of a call by the predicate to any Xlib function that locks the display is not defined unless the caller has first called .ZN XLockDisplay . .LP The predicate procedure and its associated arguments are: .HP Bool (\^*\fIpredicate\fP\^)\^(\^Display *\fIdisplay\fP, XEvent *\fIevent\fP, XPointer \fIarg\fP\^) .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIevent\fP 1i Specifies the .ZN XEvent structure. .IP \fIarg\fP 1i Specifies the argument passed in from the .ZN XIfEvent , .ZN XCheckIfEvent , or .ZN XPeekIfEvent function. .LP The predicate procedure is called once for each event in the queue until it finds a match. After finding a match, the predicate procedure must return .ZN True . If it did not find a match, it must return .ZN False . .SH "SEE ALSO" XAnyEvent(__libmansuffix__), XNextEvent(__libmansuffix__), XPutBackEvent(__libmansuffix__) XSendEvent(__libmansuffix__) .br \fI\*(xL\fP n 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, sublibX11-1.6.3/man/XmbTextPropertyToTextList.man000064401431060000012000000001031247741723500214640ustar00alancstaff00002660200006.so man__libmansuffix__/XmbTextListToTextProperty.__libmansuffix__ libX11-1.6.3/man/XConfigureWindow.man000064401431060000012000000246071247741723500176000ustar00alancstaff00002660200006'\" t .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 '\" t .TH XConfigureWindow __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XConfigureWindow, XMoveWindow, XResizeWindow, XMoveResizeWindow, XSetWindowBorderWidth, XWindowChanges \- configure windows and window changes structure .SH SYNTAX .HP int XConfigureWindow\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, unsigned \fIvalue_mask\fP\^, \^XWindowChanges *\fIchanges\fP\^); .HP int XMoveWindow\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, int \fIx\fP\^, \fIy\fP\^); .HP int XResizeWindow\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, unsigned \fIwidth\fP\^, unsigned \fIheight\fP\^); .HP int XMoveResizeWindow\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, int \fIx\fP\^, int \fIy\fP\^, unsigned \fIwidth\fP\^, unsigned \fIheight\fP\^); .HP int XSetWindowBorderWidth\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, unsigned \fIwidth\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIvalue_mask\fP 1i Specifies which values are to be set using information in the values structure. This mask is the bitwise inclusive OR of the valid configure window values bits. .IP \fIvalues\fP 1i Specifies the .ZN XWindowChanges structure. .ds Wi to be reconfigured, moved, or resized. .IP \fIw\fP 1i Specifies the window \*(Wi. .IP \fIwidth\fP 1i Specifies the width of the window border. .ds Wh , which are the interior dimensions of the window .IP \fIwidth\fP 1i .br .ns .IP \fIheight\fP 1i Specify the width and height\*(Wh. .ds Xy , which define the new location of the top-left pixel \ of the window's border or the window itself if it has no border \ or define the new position of the window relative to its parent .IP \fIx\fP 1i .br .ns .IP \fIy\fP 1i Specify the x and y coordinates\*(Xy. .SH DESCRIPTION The .ZN XConfigureWindow function uses the values specified in the .ZN XWindowChanges structure to reconfigure a window's size, position, border, and stacking order. Values not specified are taken from the existing geometry of the window. .LP If a sibling is specified without a stack_mode or if the window is not actually a sibling, a .ZN BadMatch error results. Note that the computations for .ZN BottomIf , .ZN TopIf , and .ZN Opposite are performed with respect to the window's final geometry (as controlled by the other arguments passed to .ZN XConfigureWindow ), not its initial geometry. Any backing store contents of the window, its inferiors, and other newly visible windows are either discarded or changed to reflect the current screen contents (depending on the implementation). .LP .ZN XConfigureWindow can generate .ZN BadMatch , .ZN BadValue , and .ZN BadWindow errors. .LP The .ZN XMoveWindow function moves the specified window to the specified x and y coordinates, but it does not change the window's size, raise the window, or change the mapping state of the window. Moving a mapped window may or may not lose the window's contents depending on if the window is obscured by nonchildren and if no backing store exists. If the contents of the window are lost, the X server generates .ZN Expose events. Moving a mapped window generates .ZN Expose events on any formerly obscured windows. .LP If the override-redirect flag of the window is .ZN False and some other client has selected .ZN SubstructureRedirectMask on the parent, the X server generates a .ZN ConfigureRequest event, and no further processing is performed. Otherwise, the window is moved. .LP .ZN XMoveWindow can generate a .ZN BadWindow error. .LP The .ZN XResizeWindow function changes the inside dimensions of the specified window, not including its borders. This function does not change the window's upper-left coordinate or the origin and does not restack the window. Changing the size of a mapped window may lose its contents and generate .ZN Expose events. If a mapped window is made smaller, changing its size generates .ZN Expose events on windows that the mapped window formerly obscured. .LP If the override-redirect flag of the window is .ZN False and some other client has selected .ZN SubstructureRedirectMask on the parent, the X server generates a .ZN ConfigureRequest event, and no further processing is performed. If either width or height is zero, a .ZN BadValue error results. .LP .ZN XResizeWindow can generate .ZN BadValue and .ZN BadWindow errors. .LP The .ZN XMoveResizeWindow function changes the size and location of the specified window without raising it. Moving and resizing a mapped window may generate an .ZN Expose event on the window. Depending on the new size and location parameters, moving and resizing a window may generate .ZN Expose events on windows that the window formerly obscured. .LP If the override-redirect flag of the window is .ZN False and some other client has selected .ZN SubstructureRedirectMask on the parent, the X server generates a .ZN ConfigureRequest event, and no further processing is performed. Otherwise, the window size and location are changed. .LP .ZN XMoveResizeWindow can generate .ZN BadValue and .ZN BadWindow errors. .LP The .ZN XSetWindowBorderWidth function sets the specified window's border width to the specified width. .LP .ZN XSetWindowBorderWidth can generate a .ZN BadWindow error. .SH STRUCTURES The .ZN XWindowChanges structure contains: .LP .LP /\&* Configure window value mask bits */ .TS lw(.5i) lw(2.5i) lw(.8i). T{ \&#define T} T{ .ZN CWX T} T{ (1<<0) T} T{ \&#define T} T{ .ZN CWY T} T{ (1<<1) T} T{ \&#define T} T{ .ZN CWWidth T} T{ (1<<2) T} T{ \&#define T} T{ .ZN CWHeight T} T{ (1<<3) T} T{ \&#define T} T{ .ZN CWBorderWidth T} T{ (1<<4) T} T{ \&#define T} T{ .ZN CWSibling T} T{ (1<<5) T} T{ \&#define T} T{ .ZN CWStackMode T} T{ (1<<6) T} .TE .IN "XWindowChanges" "" "@DEF@" .Ds 0 /\&* Values */ typedef struct { int x, y; int width, height; int border_width; Window sibling; int stack_mode; } XWindowChanges; .De .LP The x and y members are used to set the window's x and y coordinates, which are relative to the parent's origin and indicate the position of the upper-left outer corner of the window. The width and height members are used to set the inside size of the window, not including the border, and must be nonzero, or a .ZN BadValue error results. Attempts to configure a root window have no effect. .LP The border_width member is used to set the width of the border in pixels. Note that setting just the border width leaves the outer-left corner of the window in a fixed position but moves the absolute position of the window's origin. If you attempt to set the border-width attribute of an .ZN InputOnly window nonzero, a .ZN BadMatch error results. .LP The sibling member is used to set the sibling window for stacking operations. The stack_mode member is used to set how the window is to be restacked and can be set to .ZN Above , .ZN Below , .ZN TopIf , .ZN BottomIf , or .ZN Opposite . .SH DIAGNOSTICS .TP 1i .ZN BadMatch An .ZN InputOnly window is used as a Drawable. .TP 1i .ZN BadMatch Some argument or pair of arguments has the correct type and range but fails to match in some other way required by the request. .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XChangeWindowAttributes(__libmansuffix__), XCreateWindow(__libmansuffix__), XDestroyWindow(__libmansuffix__), XMapWindow(__libmansuffix__), XRaiseWindow(__libmansuffix__), XUnmapWindow(__libmansuffix__) .br \fI\*(xL\fP na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de DelibX11-1.6.3/man/XListPixmapFormats.man000064401431060000012000000000701247741723500201010ustar00alancstaff00002660200006.so man__libmansuffix__/ImageByteOrder.__libmansuffix__ libX11-1.6.3/man/XQueryExtension.man000064401431060000012000000057371247741723500174740ustar00alancstaff00002660200006.\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc .\" .\" Rewritten for X.org by Chris Lee .\" .\" Permission to use, copy, modify, distribute, and sell 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. .\" Chris Lee makes no representations about the suitability for any purpose .\" of the information in this document. It is provided \`\`as-is'' without .\" express or implied warranty. .\" .ds xL Programming with Xlib .TH XQueryExtension __libmansuffix__ __xorgversion__ "X FUNCTIONS" .SH NAME XQueryExtension, XListExtensions, XFreeExtensionList \- list available extensions .SH SYNTAX .HP Bool XQueryExtension(\^\fIdisplay, \fIname\fP, \fImajor_opcode_return\fP, \fIfirst_event_return\fP, \fIfirst_error_return\fP\^) .HP char **XListExtensions(\^\fIdisplay\fP, \fInextensions_return\fP\^) .HP XFreeExtensionList(\^\fIlist\fP\^) .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIname\fP 1i Specifies the extension name. .IP \fImajor_opcode_return\fP 1i Returns the major opcode. .IP \fIfirst_event_return\fP 1i Returns the first event code, if any. .IP \fIfirst_error_return\fP 1i Returns the first error code, if any. .IP \fInextensions_return\fP 1i Returns the number of extensions listed. .IP \fIlist\fP 1i Specifies the list of extension names. .SH DESCRIPTION .LP The \fIXQueryExtension\fP function determines if the named extension is present. If the extension is not present, \fIXQueryExtension\fP returns \fIFalse\fP; otherwise, it returns \fITrue\fP. If the extension is present, \fIXQueryExtension\fP returns the major opcode for the extension to major_opcode_return; otherwise, it returns zero. Any minor opcode and the request formats are specific to the extension. If the extension involves additional event types, \fIXQueryExtension\fP returns the base event type code to first_event_return; otherwise, it returns zero. The format of the events is specific to the extension. If the extension involves additional error codes, \fIXQueryExtension\fP returns the base error code to first_error_return; otherwise, it returns zero. The format of additional data in the errors is specific to the extension. If the extension name is not in the Host Portable Character Encoding the result is implementation-dependent. Uppercase and lowercase matter; the strings ``thing'', ``Thing'', and ``thinG'' are all considered different names. .LP The \fIXListExtensions\fP function returns a list of all extensions supported by the server. If the data returned by the server is in the Latin Portable Character Encoding, then the returned strings are in the Host Portable Character Encoding. Otherwise, the result is implementation-dependent. .LP The \fIXFreeExtensionList\fP function frees the memory allocated by \fIXListExtensions\fP. libX11-1.6.3/man/XrmStringToQuark.man000064401431060000012000000000701247741723500175670ustar00alancstaff00002660200006.so man__libmansuffix__/XrmUniqueQuark.__libmansuffix__ libX11-1.6.3/man/XShrinkRegion.man000064401431060000012000000000721247741723500170570ustar00alancstaff00002660200006.so man__libmansuffix__/XIntersectRegion.__libmansuffix__ libX11-1.6.3/man/XExtentsOfFontSet.man000064401431060000012000000071671247741723500177130ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XExtentsOfFontSet __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XExtentsOfFontSet \- obtain the maximum extents structure for a font set .SH SYNTAX .HP XFontSetExtents *XExtentsOfFontSet\^(\^XFontSet \fIfont_set\fP\^); .SH ARGUMENTS .IP \fIfont_set\fP 1i Specifies the font set. .SH DESCRIPTION The .ZN XExtentsOfFontSet function returns an .ZN XFontSetExtents structure for the fonts used by the Xmb and Xwc layers for the given font set. .LP The .ZN XFontSetExtents structure is owned by Xlib and should not be modified or freed by the client. It will be freed by a call to .ZN XFreeFontSet with the associated .ZN XFontSet . Until freed, its contents will not be modified by Xlib. .SH "SEE ALSO" XCreateFontSet(__libmansuffix__), XFontsOfFontSet(__libmansuffix__), XFontSetExtents(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XOpenDisplay.man000064401431060000012000000136261247741723500167150ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XOpenDisplay __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XOpenDisplay, XCloseDisplay \- connect or disconnect to X server .SH SYNTAX .HP Display *XOpenDisplay\^(\^char *\fIdisplay_name\fP\^); .HP int XCloseDisplay\^(Display *\fIdisplay\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIdisplay_name\fP 1i Specifies the hardware display name, which determines the display and communications domain to be used. On a POSIX-conformant system, if the display_name is NULL, it defaults to the value of the DISPLAY environment variable. .IN "Environment" "DISPLAY" .SH DESCRIPTION The .ZN XOpenDisplay function returns a .ZN Display structure that serves as the connection to the X server and that contains all the information about that X server. .ZN XOpenDisplay connects your application to the X server through TCP or DECnet communications protocols, or through some local inter-process communication protocol. .IN "Protocol" "TCP" .IN "Protocol" "DECnet" If the hostname is a host machine name and a single colon (:) separates the hostname and display number, .ZN XOpenDisplay connects using TCP streams. If the hostname is not specified, Xlib uses whatever it believes is the fastest transport. If the hostname is a host machine name and a double colon (::) separates the hostname and display number, .ZN XOpenDisplay connects using DECnet. A single X server can support any or all of these transport mechanisms simultaneously. A particular Xlib implementation can support many more of these transport mechanisms. .LP .IN "Display" If successful, .ZN XOpenDisplay returns a pointer to a .ZN Display structure, which is defined in .hN X11/Xlib.h . If .ZN XOpenDisplay does not succeed, it returns NULL. After a successful call to .ZN XOpenDisplay , all of the screens in the display can be used by the client. The screen number specified in the display_name argument is returned by the .ZN DefaultScreen macro (or the .ZN XDefaultScreen function). You can access elements of the .ZN Display and .ZN Screen structures only by using the information macros or functions. For information about using macros and functions to obtain information from the .ZN Display structure, see section 2.2.1. .LP The .ZN XCloseDisplay function closes the connection to the X server for the display specified in the .ZN Display structure and destroys all windows, resource IDs .Pn ( Window , .ZN Font , .ZN Pixmap , .ZN Colormap , .ZN Cursor , and .ZN GContext ), or other resources that the client has created on this display, unless the close-down mode of the resource has been changed (see .ZN XSetCloseDownMode ). Therefore, these windows, resource IDs, and other resources should never be referenced again or an error will be generated. Before exiting, you should call .ZN XCloseDisplay explicitly so that any pending errors are reported as .ZN XCloseDisplay performs a final .ZN XSync operation. .IN "Resource IDs" .IN "XCloseDisplay" .LP .ZN XCloseDisplay can generate a .ZN BadGC error. .SH "SEE ALSO" AllPlanes(__libmansuffix__), XFlush(__libmansuffix__), XSetCloseDownMode(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/AllPlanes.man000064401431060000012000000232331247741723500162040ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH AllPlanes __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME AllPlanes, BlackPixel, WhitePixel, ConnectionNumber, DefaultColormap, DefaultDepth, XListDepths, DefaultGC, DefaultRootWindow, DefaultScreenOfDisplay, DefaultScreen, DefaultVisual, DisplayCells, DisplayPlanes, DisplayString, XMaxRequestSize, XExtendedMaxRequestSize, LastKnownRequestProcessed, NextRequest, ProtocolVersion, ProtocolRevision, QLength, RootWindow, ScreenCount, ScreenOfDisplay, ServerVendor, VendorRelease \- Display macros and functions .SH SYNTAX unsigned long AllPlanes; .HP unsigned long BlackPixel\^(\^Display *\fIdisplay\fP\^, int \^\fIscreen_number\fP\^); .HP unsigned long WhitePixel\^(\^Display *\fIdisplay\fP\^, int \^\fIscreen_number\fP\^); .HP int ConnectionNumber\^(\^Display *\fIdisplay\fP\^); .HP Colormap DefaultColormap\^(\^Display *\fIdisplay\fP\^, \^int \fIscreen_number\fP\^); .HP int DefaultDepth\^(\^Display *\fIdisplay\fP\^, \^int \fIscreen_number\fP\^); .HP int *XListDepths\^(\^Display *\fIdisplay\fP, int \fIscreen_number\fP, int \fIcount_return\fP\^); .HP GC DefaultGC\^(\^Display *\fIdisplay\fP\^, \^int \fIscreen_number\fP\^); .HP Window DefaultRootWindow\^(\^Display *\fIdisplay\fP\^); .HP Screen *DefaultScreenOfDisplay\^(\^Display *\fIdisplay\fP\^); .HP int DefaultScreen\^(\^Display *\fIdisplay\fP\^); .HP Visual *DefaultVisual\^(\^Display *\fIdisplay\fP\^, \^int \fIscreen_number\fP\^); .HP int DisplayCells\^(\^Display *\fIdisplay\fP\^, \^int \fIscreen_number\fP\^); .HP int DisplayPlanes\^(\^Display *\fIdisplay\fP\^, \^int \fIscreen_number\fP\^); .HP char *DisplayString\^(\^Display *\fIdisplay\fP\^); .HP long XMaxRequestSize(\^Display *\fIdisplay\fP\^) .HP long XExtendedMaxRequestSize(\^Display *\fIdisplay\fP\^) .HP unsigned long LastKnownRequestProcessed\^(\^Display *\fIdisplay\fP\^); .HP unsigned long NextRequest\^(\^Display *\fIdisplay\fP\^); .HP int ProtocolVersion\^(\^Display *\fIdisplay\fP\^); .HP int ProtocolRevision\^(\^Display *\fIdisplay\fP\^); .HP int QLength\^(\^Display *\fIdisplay\fP\^); .HP Window RootWindow\^(\^Display *\fIdisplay\fP\^, \^int \fIscreen_number\fP\^); .HP int ScreenCount\^(\^Display *\fIdisplay\fP\^); .HP Screen *ScreenOfDisplay\^(\^Display *\fIdisplay\fP, int \fIscreen_number\fP\^); .HP char *ServerVendor\^(\^Display *\fIdisplay\fP\^) .HP int VendorRelease\^(\^Display *\fIdisplay\fP\^) .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIscreen_number\fP 1i Specifies the appropriate screen number on the host server. .ds Cn depths .IP \fIcount_return\fP 1i Returns the number of \*(Cn. .SH DESCRIPTION The .ZN AllPlanes macro returns a value with all bits set to 1 suitable for use in a plane argument to a procedure. .LP The .ZN BlackPixel macro returns the black pixel value for the specified screen. .LP The .ZN WhitePixel macro returns the white pixel value for the specified screen. .LP The .ZN ConnectionNumber macro returns a connection number for the specified display. .LP The .ZN DefaultColormap macro returns the default colormap ID for allocation on the specified screen. .LP The .ZN DefaultDepth macro returns the depth (number of planes) of the default root window for the specified screen. .LP The .ZN XListDepths function returns the array of depths that are available on the specified screen. If the specified screen_number is valid and sufficient memory for the array can be allocated, .ZN XListDepths sets count_return to the number of available depths. Otherwise, it does not set count_return and returns NULL. To release the memory allocated for the array of depths, use .ZN XFree . .LP The .ZN DefaultGC macro returns the default GC for the root window of the specified screen. .LP The .ZN DefaultRootWindow macro returns the root window for the default screen. .LP The .ZN DefaultScreenOfDisplay macro returns the default screen of the specified display. .LP The .ZN DefaultScreen macro returns the default screen number referenced in the .ZN XOpenDisplay routine. .LP The .ZN DefaultVisual macro returns the default visual type for the specified screen. .LP The .ZN DisplayCells macro returns the number of entries in the default colormap. .LP The .ZN DisplayPlanes macro returns the depth of the root window of the specified screen. .LP The .ZN DisplayString macro returns the string that was passed to .ZN XOpenDisplay when the current display was opened. .LP The .ZN XMaxRequestSize function returns the maximum request size (in 4-byte units) supported by the server without using an extended-length protocol encoding. Single protocol requests to the server can be no larger than this size unless an extended-length protocol encoding is supported by the server. The protocol guarantees the size to be no smaller than 4096 units (16384 bytes). Xlib automatically breaks data up into multiple protocol requests as necessary for the following functions: .ZN XDrawPoints , .ZN XDrawRectangles , .ZN XDrawSegments , .ZN XFillArcs , .ZN XFillRectangles , and .ZN XPutImage . .LP The .ZN XExtendedMaxRequestSize function returns zero if the specified display does not support an extended-length protocol encoding; otherwise, it returns the maximum request size (in 4-byte units) supported by the server using the extended-length encoding. The Xlib functions .ZN XDrawLines , .ZN XDrawArcs , .ZN XFillPolygon , .ZN XChangeProperty , .ZN XSetClipRectangles , and .ZN XSetRegion will use the extended-length encoding as necessary, if supported by the server. Use of the extended-length encoding in other Xlib functions (for example, .ZN XDrawPoints , .ZN XDrawRectangles , .ZN XDrawSegments , .ZN XFillArcs , .ZN XFillRectangles , .ZN XPutImage ) is permitted but not required; an Xlib implementation may choose to split the data across multiple smaller requests instead. .LP The .ZN LastKnownRequestProcessed macro extracts the full serial number of the last request known by Xlib to have been processed by the X server. .LP The .ZN NextRequest macro extracts the full serial number that is to be used for the next request. .LP The .ZN ProtocolVersion macro returns the major version number (11) of the X protocol associated with the connected display. .LP The .ZN ProtocolRevision macro returns the minor protocol revision number of the X server. .LP The .ZN QLength macro returns the length of the event queue for the connected display. .LP The .ZN RootWindow macro returns the root window. .LP The .ZN ScreenCount macro returns the number of available screens. .LP The .ZN ScreenOfDisplay macro returns a pointer to the screen of the specified display. .LP The .ZN ServerVendor macro returns a pointer to a null-terminated string that provides some identification of the owner of the X server implementation. .LP The .ZN VendorRelease macro returns a number related to a vendor's release of the X server. .SH "SEE ALSO" BlackPixelOfScreen(__libmansuffix__), ImageByteOrder(__libmansuffix__), IsCursorKey(__libmansuffix__), XOpenDisplay(__libmansuffix__) .br \fI\*(xL\fP taining .\" 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, sublibX11-1.6.3/man/XmbDrawText.man000064401431060000012000000140131247741723500165360ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" Copyright \(co 2000 The XFree86 Project, Inc. .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XmbDrawText __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XmbDrawText, XwcDrawText, Xutf8DrawText \- draw text using multiple font sets .SH SYNTAX .HP void XmbDrawText\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, GC \fIgc\fP\^, int \fIx\fP\^, int \fIy\fP\^, XmbTextItem *\fIitems\fP\^, int \fInitems\fP\^); .HP void XwcDrawText\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, GC \fIgc\fP\^, int \fIx\fP\^, int \fIy\fP\^, XwcTextItem *\fIitems\fP\^, int \fInitems\fP\^); .HP void Xutf8DrawText\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, GC \fIgc\fP\^, int \fIx\fP\^, int \fIy\fP\^, XmbTextItem *\fIitems\fP\^, int \fInitems\fP\^); .SH ARGUMENTS .IP \fId\fP 1i Specifies the drawable. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIgc\fP 1i Specifies the GC. .IP \fIitems\fP 1i Specifies an array of text items. .IP \fInitems\fP 1i Specifies the number of text items in the array. .ds Xy .IP \fIx\fP 1i .br .ns .IP \fIy\fP 1i Specify the x and y coordinates\*(Xy. .SH DESCRIPTION The .ZN XmbDrawText , .ZN XwcDrawText and .ZN Xutf8DrawText functions allow complex spacing and font set shifts between text strings. Each text item is processed in turn, with the origin of a text element advanced in the primary draw direction by the escapement of the previous text item. A text item delta specifies an additional escapement of the text item drawing origin in the primary draw direction. A font_set member other than .ZN None in an item causes the font set to be used for this and subsequent text items in the text_items list. Leading text items with a font_set member set to .ZN None will not be drawn. .LP .ZN XmbDrawText , .ZN XwcDrawText and .ZN Xutf8DrawText do not perform any context-dependent rendering between text segments. Clients may compute the drawing metrics by passing each text segment to .ZN XmbTextExtents , .ZN XwcTextExtents , .ZN Xutf8TextExtents or .ZN XmbTextPerCharExtents , .ZN XwcTextPerCharExtents . .ZN Xutf8TextPerCharExtents . When the .ZN XFontSet has missing charsets, each unavailable character is drawn with the default string returned by .ZN XCreateFontSet . The behavior for an invalid codepoint is undefined. .LP The function .ZN Xutf8DrawText is an extension introduced by The XFree86 Project, Inc. in their 4.0.2 release. Its presence is indicated by the macro .ZN X_HAVE_UTF8_STRING . .SH STRUCTURES The .ZN XmbTextItem structure contains: .Ds 0 typedef struct { char *chars; /\&* pointer to string */ int nchars; /\&* number of bytes */ int delta; /\&* pixel delta between strings */ XFontSet font_set; /\&* fonts, None means don't change */ } XmbTextItem; .De The .ZN XwcTextItem structure contains: .Ds 0 typedef struct { wchar_t *chars; /\&* pointer to wide char string */ int nchars; /\&* number of wide characters */ int delta; /\&* pixel delta between strings */ XFontSet font_set; /\&* fonts, None means don't change */ } XwcTextItem; .De .SH "SEE ALSO" XDrawImageString(__libmansuffix__), XDrawString(__libmansuffix__), XDrawText(__libmansuffix__), XmbDrawImageString(__libmansuffix__), XmbDrawString(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XGetWMColormapWindows.man000064401431060000012000000000771247741723500205150ustar00alancstaff00002660200006.so man__libmansuffix__/XSetWMColormapWindows.__libmansuffix__ libX11-1.6.3/man/XMatchVisualInfo.man000064401431060000012000000000701247741723500175070ustar00alancstaff00002660200006.so man__libmansuffix__/XGetVisualInfo.__libmansuffix__ libX11-1.6.3/man/XLocaleOfOM.man000064401431060000012000000000611247741723500163730ustar00alancstaff00002660200006.so man__libmansuffix__/XOpenOM.__libmansuffix__ libX11-1.6.3/man/XGetGCValues.man000064401431060000012000000000631247741723500165660ustar00alancstaff00002660200006.so man__libmansuffix__/XCreateGC.__libmansuffix__ libX11-1.6.3/man/XStringListToTextProperty.man000064401431060000012000000144211247741723500214770ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" Copyright \(co 2000 The XFree86 Project, Inc. .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XStringListToTextProperty __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XStringListToTextProperty, XTextPropertyToStringList, XFreeStringList, XTextProperty \- convert string lists and text property structure .SH SYNTAX .HP Status XStringListToTextProperty\^(\^char **\fIlist\fP\^, int \fIcount\fP\^, XTextProperty *\fItext_prop_return\fP\^); .HP Status XTextPropertyToStringList\^(\^XTextProperty *\fItext_prop\fP\^, char ***\fIlist_return\fP\^, int *\fIcount_return\fP\^); .HP void XFreeStringList\^(\^char **\fIlist\fP\^); .SH ARGUMENTS .ds Cn strings .IP \fIcount\fP 1i Specifies the number of \*(Cn. .ds Cn strings .IP \fIcount_return\fP 1i Returns the number of \*(Cn. .IP \fIlist\fP 1i Specifies the list of strings to be freed. .IP \fIlist\fP 1i Specifies a list of null-terminated character strings. .IP \fIlist_return\fP 1i Returns a list of null-terminated character strings. .IP \fItext_prop\fP 1i Specifies the .ZN XTextProperty structure to be used. .IP \fItext_prop_return\fP 1i Returns the .ZN XTextProperty structure. .SH DESCRIPTION The .ZN XStringListToTextProperty function sets the specified .ZN XTextProperty to be of type STRING (format 8) with a value representing the concatenation of the specified list of null-separated character strings. An extra null byte (which is not included in the nitems member) is stored at the end of the value field of text_prop_return. The strings are assumed (without verification) to be in the STRING encoding. If insufficient memory is available for the new value string, .ZN XStringListToTextProperty does not set any fields in the .ZN XTextProperty structure and returns a zero status. Otherwise, it returns a nonzero status. To free the storage for the value field, use .ZN XFree . .LP The .ZN XTextPropertyToStringList function returns a list of strings representing the null-separated elements of the specified .ZN XTextProperty structure. The data in text_prop must be of type STRING and format 8. Multiple elements of the property (for example, the strings in a disjoint text selection) are separated by NULL (encoding 0). The contents of the property are not null-terminated. If insufficient memory is available for the list and its elements, .ZN XTextPropertyToStringList sets no return values and returns a zero status. Otherwise, it returns a nonzero status. To free the storage for the list and its contents, use .ZN XFreeStringList . .LP The .ZN XFreeStringList function releases memory allocated by .ZN XmbTextPropertyToTextList , .ZN Xutf8TextPropertyToTextList and .ZN XTextPropertyToStringList and the missing charset list allocated by .ZN XCreateFontSet . .SH STRUCTURES The .ZN XTextProperty structure contains: .LP .Ds 0 typedef struct { unsigned char *value; /\&* property data */ Atom encoding; /\&* type of property */ int format; /\&* 8, 16, or 32 */ unsigned long nitems; /\&* number of items in value */ } XTextProperty; .De .SH "SEE ALSO" XAllocClassHint(__libmansuffix__), XAllocIconSize(__libmansuffix__), XAllocSizeHints(__libmansuffix__), XAllocWMHints(__libmansuffix__), XFree(__libmansuffix__), XSetCommand(__libmansuffix__), XSetTransientForHint(__libmansuffix__), XSetTextProperty(__libmansuffix__), XSetWMClientMachine(__libmansuffix__), XSetWMColormapWindows(__libmansuffix__), XSetWMIconName(__libmansuffix__), XSetWMName(__libmansuffix__), XSetWMProperties(__libmansuffix__), XSetWMProtocols(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XrmCombineDatabase.man000064401431060000012000000000731247741723500200160ustar00alancstaff00002660200006.so man__libmansuffix__/XrmMergeDatabases.__libmansuffix__ libX11-1.6.3/man/BlackPixel.man000064401431060000012000000000631247741723500163430ustar00alancstaff00002660200006.so man__libmansuffix__/AllPlanes.__libmansuffix__ libX11-1.6.3/man/IsPrivateKeypadKey.man000064401431060000012000000000651247741723500200440ustar00alancstaff00002660200006.so man__libmansuffix__/IsCursorKey.__libmansuffix__ libX11-1.6.3/man/DefaultVisualOfScreen.man000064401431060000012000000000741247741723500205240ustar00alancstaff00002660200006.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__ libX11-1.6.3/man/XSupportsLocale.man000064401431060000012000000142141247741723500174370ustar00alancstaff00002660200006.\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XSupportsLocale __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XSupportsLocale, XSetLocaleModifiers \- determine locale support and configure locale modifiers .SH SYNTAX .HP Bool XSupportsLocale\^(void); .HP char *XSetLocaleModifiers\^(\^char *\fImodifier_list\fP\^); .SH ARGUMENTS .IP \fImodifier_list\fP 1i Specifies the modifiers. .SH DESCRIPTION The .ZN XSupportsLocale function returns .ZN True if Xlib functions are capable of operating under the current locale. If it returns .ZN False , Xlib locale-dependent functions for which the .ZN XLocaleNotSupported return status is defined will return .ZN XLocaleNotSupported . Other Xlib locale-dependent routines will operate in the ``C'' locale. .LP The .ZN XSetLocaleModifiers function sets the X modifiers for the current locale setting. The modifier_list argument is a null-terminated string of the form ``{@\^\fIcategory\fP\^=\^\fIvalue\fP\^}'', that is, having zero or more concatenated ``@\^\fIcategory\fP\^=\^\fIvalue\fP\^'' entries, where \fIcategory\fP is a category name and \fIvalue\fP is the (possibly empty) setting for that category. The values are encoded in the current locale. Category names are restricted to the POSIX Portable Filename Character Set. .LP The local host X locale modifiers announcer (on POSIX-compliant systems, the XMODIFIERS environment variable) is appended to the modifier_list to provide default values on the local host. If a given category appears more than once in the list, the first setting in the list is used. If a given category is not included in the full modifier list, the category is set to an implementation-dependent default for the current locale. An empty value for a category explicitly specifies the implementation-dependent default. .LP If the function is successful, it returns a pointer to a string. The contents of the string are such that a subsequent call with that string (in the same locale) will restore the modifiers to the same settings. If modifier_list is a NULL pointer, .ZN XSetLocaleModifiers also returns a pointer to such a string, and the current locale modifiers are not changed. .LP If invalid values are given for one or more modifier categories supported by the locale, a NULL pointer is returned, and none of the current modifiers are changed. .LP At program startup, the modifiers that are in effect are unspecified until the first successful call to set them. Whenever the locale is changed, the modifiers that are in effect become unspecified until the next successful call to set them. Clients should always call .ZN XSetLocaleModifiers with a non-NULL modifier_list after setting the locale before they call any locale-dependent Xlib routine. .LP The only standard modifier category currently defined is ``im'', which identifies the desired input method. The values for input method are not standardized. A single locale may use multiple input methods, switching input method under user control. The modifier may specify the initial input method in effect or an ordered list of input methods. Multiple input methods may be specified in a single im value string in an implementation-dependent manner. .LP The returned modifiers string is owned by Xlib and should not be modified or freed by the client. It may be freed by Xlib after the current locale or modifiers are changed. Until freed, it will not be modified by Xlib. .SH "SEE ALSO" \fI\*(xL\fP libX11-1.6.3/man/XSetBackground.man000064401431060000012000000000631247741723500172100ustar00alancstaff00002660200006.so man__libmansuffix__/XSetState.__libmansuffix__ libX11-1.6.3/man/WidthOfScreen.man000064401431060000012000000000741247741723500170330ustar00alancstaff00002660200006.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__ libX11-1.6.3/man/XDrawString.man000064401431060000012000000117301247741723500165440ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XDrawString __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XDrawString, XDrawString16 \- draw text characters .SH SYNTAX .HP int XDrawString\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, GC \fIgc\fP\^, int \fIx\fP\^, int \fIy\fP\^, char *\fIstring\fP\^, int \fIlength\fP\^); .HP int XDrawString16\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, GC \fIgc\fP\^, int \fIx\fP\^, int \fIy\fP\^, XChar2b *\fIstring\fP\^, int \fIlength\fP\^); .SH ARGUMENTS .IP \fId\fP 1i Specifies the drawable. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIgc\fP 1i Specifies the GC. .IP \fIlength\fP 1i Specifies the number of characters in the string argument. .IP \fIstring\fP 1i Specifies the character string. .ds Xy , which are relative to the origin of the specified drawable \ and define the origin of the first character .IP \fIx\fP 1i .br .ns .IP \fIy\fP 1i Specify the x and y coordinates\*(Xy. .SH DESCRIPTION Each character image, as defined by the font in the GC, is treated as an additional mask for a fill operation on the drawable. The drawable is modified only where the font character has a bit set to 1. For fonts defined with 2-byte matrix indexing and used with .ZN XDrawString16 , each byte is used as a byte2 with a byte1 of zero. .LP Both functions use these GC components: function, plane-mask, fill-style, font, subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask. They also use these GC mode-dependent components: foreground, background, tile, stipple, tile-stipple-x-origin, and tile-stipple-y-origin. .LP .ZN XDrawString and .ZN XDrawString16 can generate .ZN BadDrawable , .ZN BadGC , and .ZN BadMatch errors. .SH DIAGNOSTICS .TP 1i .ZN BadDrawable A value for a Drawable argument does not name a defined Window or Pixmap. .TP 1i .ZN BadGC A value for a GContext argument does not name a defined GContext. .TP 1i .ZN BadMatch An .ZN InputOnly window is used as a Drawable. .TP 1i .ZN BadMatch Some argument or pair of arguments has the correct type and range but fails to match in some other way required by the request. .SH "SEE ALSO" XDrawImageString(__libmansuffix__), XDrawText(__libmansuffix__), XLoadFont(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XFillRectangle.man000064401431060000012000000232501247741723500171730ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XFillRectangle __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XFillRectangle, XFillRectangles, XFillPolygon, XFillArc, XFillArcs \- fill rectangles, polygons, or arcs .SH SYNTAX .HP int XFillRectangle\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, GC \fIgc\fP\^, int \fIx\fP\^, int \fIy\fP\^, unsigned int \fIwidth\fP\^, unsigned int \fIheight\fP\^); .HP int XFillRectangles\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, GC \fIgc\fP\^, XRectangle *\fIrectangles\fP\^, int \fInrectangles\fP\^); .HP int XFillPolygon\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, GC \fIgc\fP\^, XPoint *\fIpoints\fP\^, int \fInpoints\fP\^, int \fIshape\fP\^, int \fImode\fP\^); .HP int XFillArc\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, GC \fIgc\fP\^, int \fIx\fP\^, int \fIy\fP\^, unsigned int \fIwidth\fP\^, unsigned int \fIheight\fP\^, int \fIangle1\fP\^, int \fIangle2\fP\^); .HP int XFillArcs\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, GC \fIgc\fP\^, XArc *\fIarcs\fP\^, int \fInarcs\fP\^); .SH ARGUMENTS .IP \fIangle1\fP 1i Specifies the start of the arc relative to the three-o'clock position from the center, in units of degrees * 64. .IP \fIangle2\fP 1i Specifies the path and extent of the arc relative to the start of the arc, in units of degrees * 64. .IP \fIarcs\fP 1i Specifies an array of arcs. .IP \fId\fP 1i Specifies the drawable. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIgc\fP 1i Specifies the GC. .IP \fImode\fP 1i Specifies the coordinate mode. You can pass .ZN CoordModeOrigin or .ZN CoordModePrevious . .IP \fInarcs\fP 1i Specifies the number of arcs in the array. .IP \fInpoints\fP 1i Specifies the number of points in the array. .IP \fInrectangles\fP 1i Specifies the number of rectangles in the array. .IP \fIpoints\fP 1i Specifies an array of points. .IP \fIrectangles\fP 1i Specifies an array of rectangles. .IP \fIshape\fP 1i Specifies a shape that helps the server to improve performance. You can pass .ZN Complex , .ZN Convex , or .ZN Nonconvex . .ds Wh , which are the dimensions of the rectangle to be filled \ or the major and minor axes of the arc .IP \fIwidth\fP 1i .br .ns .IP \fIheight\fP 1i Specify the width and height\*(Wh. .ds Xy , which are relative to the origin of the drawable \ and specify the upper-left corner of the rectangle .IP \fIx\fP 1i .br .ns .IP \fIy\fP 1i Specify the x and y coordinates\*(Xy. .SH DESCRIPTION The .ZN XFillRectangle and .ZN XFillRectangles functions fill the specified rectangle or rectangles as if a four-point .ZN FillPolygon protocol request were specified for each rectangle: .LP .Ds [x,y] [x+width,y] [x+width,y+height] [x,y+height] .De .LP Each function uses the x and y coordinates, width and height dimensions, and GC you specify. .LP .ZN XFillRectangles fills the rectangles in the order listed in the array. For any given rectangle, .ZN XFillRectangle and .ZN XFillRectangles do not draw a pixel more than once. If rectangles intersect, the intersecting pixels are drawn multiple times. .LP Both functions use these GC components: function, plane-mask, fill-style, subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask. They also use these GC mode-dependent components: foreground, background, tile, stipple, tile-stipple-x-origin, and tile-stipple-y-origin. .LP .ZN XFillRectangle and .ZN XFillRectangles can generate .ZN BadDrawable , .ZN BadGC , and .ZN BadMatch errors. .LP .ZN XFillPolygon fills the region closed by the specified path. The path is closed automatically if the last point in the list does not coincide with the first point. .ZN XFillPolygon does not draw a pixel of the region more than once. .ZN CoordModeOrigin treats all coordinates as relative to the origin, and .ZN CoordModePrevious treats all coordinates after the first as relative to the previous point. .LP Depending on the specified shape, the following occurs: .IP \(bu 5 If shape is .ZN Complex , the path may self-intersect. Note that contiguous coincident points in the path are not treated as self-intersection. .IP \(bu 5 If shape is .ZN Convex , for every pair of points inside the polygon, the line segment connecting them does not intersect the path. If known by the client, specifying .ZN Convex can improve performance. If you specify .ZN Convex for a path that is not convex, the graphics results are undefined. .IP \(bu 5 If shape is .ZN Nonconvex , the path does not self-intersect, but the shape is not wholly convex. If known by the client, specifying .ZN Nonconvex instead of .ZN Complex may improve performance. If you specify .ZN Nonconvex for a self-intersecting path, the graphics results are undefined. .LP The fill-rule of the GC controls the filling behavior of self-intersecting polygons. .LP This function uses these GC components: function, plane-mask, fill-style, fill-rule, subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask. It also uses these GC mode-dependent components: foreground, background, tile, stipple, tile-stipple-x-origin, and tile-stipple-y-origin. .LP .ZN XFillPolygon can generate .ZN BadDrawable , .ZN BadGC , .ZN BadMatch , and .ZN BadValue errors. .LP For each arc, .ZN XFillArc or .ZN XFillArcs fills the region closed by the infinitely thin path described by the specified arc and, depending on the arc-mode specified in the GC, one or two line segments. For .ZN ArcChord , the single line segment joining the endpoints of the arc is used. For .ZN ArcPieSlice , the two line segments joining the endpoints of the arc with the center point are used. .ZN XFillArcs fills the arcs in the order listed in the array. For any given arc, .ZN XFillArc and .ZN XFillArcs do not draw a pixel more than once. If regions intersect, the intersecting pixels are drawn multiple times. .LP Both functions use these GC components: function, plane-mask, fill-style, arc-mode, subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask. They also use these GC mode-dependent components: foreground, background, tile, stipple, tile-stipple-x-origin, and tile-stipple-y-origin. .LP .ZN XFillArc and .ZN XFillArcs can generate .ZN BadDrawable , .ZN BadGC , and .ZN BadMatch errors. .SH DIAGNOSTICS .TP 1i .ZN BadDrawable A value for a Drawable argument does not name a defined Window or Pixmap. .TP 1i .ZN BadGC A value for a GContext argument does not name a defined GContext. .TP 1i .ZN BadMatch An .ZN InputOnly window is used as a Drawable. .TP 1i .ZN BadMatch Some argument or pair of arguments has the correct type and range but fails to match in some other way required by the request. .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .SH "SEE ALSO" XDrawArc(__libmansuffix__), XDrawPoint(__libmansuffix__), XDrawRectangle(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XUnlockDisplay.man000064401431060000012000000000661247741723500172410ustar00alancstaff00002660200006.so man__libmansuffix__/XInitThreads.__libmansuffix__ libX11-1.6.3/man/DefaultDepth.man000064401431060000012000000000631247741723500166760ustar00alancstaff00002660200006.so man__libmansuffix__/AllPlanes.__libmansuffix__ libX11-1.6.3/man/XmbLookupString.man000064401431060000012000000172351247741723500174450ustar00alancstaff00002660200006'\" t .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" Copyright \(co 2000 The XFree86 Project, Inc. .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 '\" t .TH XmbLookupString __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XmbLookupString, XwcLookupString, Xutf8LookupString \- obtain composed input from an input method .SH SYNTAX .HP int XmbLookupString\^(\^XIC \fIic\fP\^, XKeyPressedEvent *\fIevent\fP, char *\fIbuffer_return\fP\^, int \fIbytes_buffer\fP\^, KeySym *\fIkeysym_return\fP\^, Status *\fIstatus_return\fP\^); .HP int XwcLookupString\^(\^XIC \fIic\fP\^, XKeyPressedEvent *\fIevent\fP\^, wchar_t *\fIbuffer_return\fP\^, int \fIwchars_buffer\fP\^, KeySym *\fIkeysym_return\fP\^, Status *\fIstatus_return\fP\^); .HP int Xutf8LookupString\^(\^XIC \fIic\fP\^, XKeyPressedEvent *\fIevent\fP, char *\fIbuffer_return\fP\^, int \fIbytes_buffer\fP\^, KeySym *\fIkeysym_return\fP\^, Status *\fIstatus_return\fP\^); .SH ARGUMENTS .IP \fIbuffer_return\fP 1i Returns a multibyte string or wide character string (if any) from the input method. .IP \fIbytes_buffer\fP 1i .br .ns .IP \fIwchars_buffer\fP 1i Specifies space available in the return buffer. .ds Ev key event to be used .IP \fIevent\fP 1i Specifies the \*(Ev. .IP \fIic\fP 1i Specifies the input context. .IP \fIkeysym_return\fP 1i Returns the KeySym computed from the event if this argument is not NULL. .IP \fIstatus_return\fP 1i Returns a value indicating what kind of data is returned. .SH DESCRIPTION The .ZN XmbLookupString , .ZN XwcLookupString and .ZN Xutf8LookupString functions return the string from the input method specified in the buffer_return argument. If no string is returned, the buffer_return argument is unchanged. .LP The KeySym into which the KeyCode from the event was mapped is returned in the keysym_return argument if it is non-NULL and the status_return argument indicates that a KeySym was returned. If both a string and a KeySym are returned, the KeySym value does not necessarily correspond to the string returned. .LP .ZN XmbLookupString and .ZN Xutf8LookupString return the length of the string in bytes, and .ZN XwcLookupString returns the length of the string in characters. Both .ZN XmbLookupString and .ZN XwcLookupString return text in the encoding of the locale bound to the input method of the specified input context, and .ZN Xutf8LookupString returns text in UTF-8 encoding. .LP Each string returned by .ZN XmbLookupString and .ZN XwcLookupString begins in the initial state of the encoding of the locale (if the encoding of the locale is state-dependent). .LP Note: To ensure proper input processing, it is essential that the client pass only .ZN KeyPress events to .ZN XmbLookupString , .ZN XwcLookupString and .ZN Xutf8LookupString . Their behavior when a client passes a .ZN KeyRelease event is undefined. .LP Clients should check the status_return argument before using the other returned values. These three functions each return a value to status_return that indicates what has been returned in the other arguments. The possible values returned are: .TS lw(1.5i) lw(4.3i). T{ .ZN XBufferOverflow T} T{ The input string to be returned is too large for the supplied buffer_return. The required size (for .ZN XmbLookupString , .ZN Xutf8LookupString in bytes; for .ZN XwcLookupString in characters) is returned as the value of the function, and the contents of buffer_return and keysym_return are not modified. The client should recall the function with the same event and a buffer of adequate size to obtain the string. T} T{ .ZN XLookupNone T} T{ No consistent input has been composed so far. The contents of buffer_return and keysym_return are not modified, and the function returns zero. T} T{ .ZN XLookupChars T} T{ Some input characters have been composed. They are placed in the buffer_return argument, using the encoding described above, and the string length is returned as the value of the function. The content of the keysym_return argument is not modified. T} T{ .ZN XLookupKeySym T} T{ A KeySym has been returned instead of a string and is returned in keysym_return. The content of the buffer_return argument is not modified, and the function returns zero. T} T{ .ZN XLookupBoth T} T{ Both a KeySym and a string are returned; .ZN XLookupChars and .ZN XLookupKeySym occur simultaneously. T} .TE .LP It does not make any difference if the input context passed as an argument to .ZN XmbLookupString , .ZN XwcLookupString and .ZN Xutf8LookupString is the one currently in possession of the focus or not. Input may have been composed within an input context before it lost the focus, and that input may be returned on subsequent calls to .ZN XmbLookupString , .ZN XwcLookupString or .ZN Xutf8LookupString even though it does not have any more keyboard focus. .LP The function .ZN Xutf8LookupString is an extension introduced by The XFree86 Project, Inc. in their 4.0.2 release. Its presence is indicated by the macro .ZN X_HAVE_UTF8_STRING . .SH "SEE ALSO" XLookupKeysym(__libmansuffix__), Compose(__filemansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XPutBackEvent.man000064401431060000012000000071321247741723500170140ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XPutBackEvent __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XPutBackEvent \- put events back on the queue .SH SYNTAX .HP XPutBackEvent\^(\^Display *\fIdisplay\fP\^, XEvent *\fIevent\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIevent\fP 1i Specifies the event. .SH DESCRIPTION The .ZN XPutBackEvent function pushes an event back onto the head of the display's event queue by copying the event into the queue. This can be useful if you read an event and then decide that you would rather deal with it later. There is no limit to the number of times in succession that you can call .ZN XPutBackEvent . .SH "SEE ALSO" XAnyEvent(__libmansuffix__), XIfEvent(__libmansuffix__), XNextEvent(__libmansuffix__), XSendEvent(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XXorRegion.man000064401431060000012000000000721247741723500163710ustar00alancstaff00002660200006.so man__libmansuffix__/XIntersectRegion.__libmansuffix__ libX11-1.6.3/man/XKillClient.man000064401431060000012000000000731247741723500165100ustar00alancstaff00002660200006.so man__libmansuffix__/XSetCloseDownMode.__libmansuffix__ libX11-1.6.3/man/XUnloadFont.man000064401431060000012000000000631247741723500165260ustar00alancstaff00002660200006.so man__libmansuffix__/XLoadFont.__libmansuffix__ libX11-1.6.3/man/XRestackWindows.man000064401431060000012000000000661247741723500174270ustar00alancstaff00002660200006.so man__libmansuffix__/XRaiseWindow.__libmansuffix__ libX11-1.6.3/man/XCirculateSubwindows.man000064401431060000012000000000661247741723500204600ustar00alancstaff00002660200006.so man__libmansuffix__/XRaiseWindow.__libmansuffix__ libX11-1.6.3/man/XFreeStringList.man000064401431060000012000000001031247741723500173540ustar00alancstaff00002660200006.so man__libmansuffix__/XStringListToTextProperty.__libmansuffix__ libX11-1.6.3/man/XTextWidth.man000064401431060000012000000070731247741723500164110ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XTextWidth __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XTextWidth, XTextWidth16 \- compute text width .SH SYNTAX .HP int XTextWidth\^(\^XFontStruct *\fIfont_struct\fP\^, char *\fIstring\fP\^, int \fIcount\fP\^); .HP int XTextWidth16\^(\^XFontStruct *\fIfont_struct\fP\^, XChar2b *\fIstring\fP\^, int \fIcount\fP\^); .SH ARGUMENTS .IP \fIcount\fP 1i Specifies the character count in the specified string. .IP \fIfont_struct\fP 1i Specifies the font used for the width computation. .IP \fIstring\fP 1i Specifies the character string. .SH DESCRIPTION The .ZN XTextWidth and .ZN XTextWidth16 functions return the width of the specified 8-bit or 2-byte character strings. .SH "SEE ALSO" XLoadFont(__libmansuffix__), XTextExtents(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/DisplayOfCCC.man000064401431060000012000000105501247741723500165320ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .de NT .ne 7 .ds NO Note .if \\n(.$>$1 .if !'\\$2'C' .ds NO \\$2 .if \\n(.$ .if !'\\$1'C' .ds NO \\$1 .ie n .sp .el .sp 10p .TB .ce \\*(NO .ie n .sp .el .sp 5p .if '\\$1'C' .ce 99 .if '\\$2'C' .ce 99 .in +5n .ll -5n .R .. . \" Note End -- doug kraft 3/85 .de NE .ce 0 .in -5n .ll +5n .ie n .sp .el .sp 10p .. .ny0 .TH DisplayOfCCC __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME DisplayOfCCC, VisualOfCCC, ScreenNumberOfCCC, ScreenWhitePointOfCCC, ClientWhitePointOfCCC \- Color Conversion Context macros .SH SYNTAX .HP Display *DisplayOfCCC\^(\^XcmsCCC \fIccc\fP\^); .HP Visual *VisualOfCCC\^(\^XcmsCCC \fIccc\fP\^); .HP int ScreenNumberOfCCC\^(\^XcmsCCC \fIccc\fP\^); .HP XcmsColor *ScreenWhitePointOfCCC\^(\^XcmsCCC \fIccc\fP\^); .HP XcmsColor *ClientWhitePointOfCCC\^(\^XcmsCCC \fIccc\fP\^); .SH ARGUMENTS .IP \fIccc\fP 1i Specifies the CCC. .SH DESCRIPTION The .ZN DisplayOfCCC macro returns the display associated with the specified CCC. .LP The .ZN VisualOfCCC macro returns the visual associated with the specified CCC. .LP The .ZN ScreenNumberOfCCC macro returns the number of the screen associated with the specified CCC. .LP The .ZN ScreenWhitePointOfCCC macro returns the screen white point of the screen associated with the specified CCC. .LP The .ZN ClientWhitePointOfCCC macro returns the client white point of the screen associated with the specified CCC. .SH "SEE ALSO" XcmsCCCOfColormap(__libmansuffix__), XcmsConvertColors(__libmansuffix__), XcmsCreateCCC(__libmansuffix__), XcmsDefaultCCC(__libmansuffix__), XcmsSetWhitePoint(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XFreeEventData.man000064401431060000012000000000671247741723500171360ustar00alancstaff00002660200006.so man__libmansuffix__/XGetEventData.__libmansuffix__ libX11-1.6.3/man/XDisplayKeycodes.man000064401431060000012000000001001247741723500175410ustar00alancstaff00002660200006.so man__libmansuffix__/XChangeKeyboardMapping.__libmansuffix__ libX11-1.6.3/man/XGetSelectionOwner.man000064401431060000012000000000741247741723500200570ustar00alancstaff00002660200006.so man__libmansuffix__/XSetSelectionOwner.__libmansuffix__ libX11-1.6.3/man/XLockDisplay.man000064401431060000012000000000661247741723500166760ustar00alancstaff00002660200006.so man__libmansuffix__/XInitThreads.__libmansuffix__ libX11-1.6.3/man/XDeleteModifiermapEntry.man000064401431060000012000000001001247741723500210460ustar00alancstaff00002660200006.so man__libmansuffix__/XChangeKeyboardMapping.__libmansuffix__ libX11-1.6.3/man/DisplayWidthMM.man000064401431060000012000000000701247741723500171620ustar00alancstaff00002660200006.so man__libmansuffix__/ImageByteOrder.__libmansuffix__ libX11-1.6.3/man/XInternAtoms.man000064401431060000012000000000651247741723500167220ustar00alancstaff00002660200006.so man__libmansuffix__/XInternAtom.__libmansuffix__ libX11-1.6.3/man/XGetFontPath.man000064401431060000012000000000661247741723500166430ustar00alancstaff00002660200006.so man__libmansuffix__/XSetFontPath.__libmansuffix__ libX11-1.6.3/man/XFreeCursor.man000064401431060000012000000000701247741723500165320ustar00alancstaff00002660200006.so man__libmansuffix__/XRecolorCursor.__libmansuffix__ libX11-1.6.3/man/XSetStipple.man000064401431060000012000000000621247741723500165500ustar00alancstaff00002660200006.so man__libmansuffix__/XSetTile.__libmansuffix__ libX11-1.6.3/man/XPeekIfEvent.man000064401431060000012000000000621247741723500166210ustar00alancstaff00002660200006.so man__libmansuffix__/XIfEvent.__libmansuffix__ libX11-1.6.3/man/XSetLineAttributes.man000064401431060000012000000152351247741723500200760ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XSetLineAttributes __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XSetLineAttributes, XSetDashes \- GC convenience routines .SH SYNTAX .HP int XSetLineAttributes\^(\^Display *\fIdisplay\fP\^, GC \fIgc\fP\^, unsigned int \fIline_width\fP\^, int \fIline_style\fP\^, int \fIcap_style\fP\^, int \fIjoin_style\fP\^); .HP int XSetDashes\^(\^Display *\fIdisplay\fP\^, GC \fIgc\fP\^, int \fIdash_offset\fP\^, char \fIdash_list\fP[]\^, int \fIn\fP\^); .SH ARGUMENTS .IP \fIcap_style\fP 1i Specifies the line-style and cap-style you want to set for the specified GC. You can pass .ZN CapNotLast , .ZN CapButt , .ZN CapRound , or .ZN CapProjecting . .IP \fIdash_list\fP 1i Specifies the dash-list for the dashed line-style you want to set for the specified GC. .IP \fIdash_offset\fP 1i Specifies the phase of the pattern for the dashed line-style you want to set for the specified GC. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIgc\fP 1i Specifies the GC. .IP \fIjoin_style\fP 1i Specifies the line join-style you want to set for the specified GC. You can pass .ZN JoinMiter , .ZN JoinRound , or .ZN JoinBevel . .IP \fIline_style\fP 1i Specifies the line-style you want to set for the specified GC. You can pass .ZN LineSolid , .ZN LineOnOffDash , or .ZN LineDoubleDash . .IP \fIline_width\fP 1i Specifies the line-width you want to set for the specified GC. .IP \fIn\fP 1i Specifies the number of elements in dash_list. .SH DESCRIPTION The .ZN XSetLineAttributes function sets the line drawing components in the specified GC. .LP .ZN XSetLineAttributes can generate .ZN BadAlloc , .ZN BadGC , and .ZN BadValue errors. .LP The .ZN XSetDashes function sets the dash-offset and dash-list attributes for dashed line styles in the specified GC. There must be at least one element in the specified dash_list, or a .ZN BadValue error results. The initial and alternating elements (second, fourth, and so on) of the dash_list are the even dashes, and the others are the odd dashes. Each element specifies a dash length in pixels. All of the elements must be nonzero, or a .ZN BadValue error results. Specifying an odd-length list is equivalent to specifying the same list concatenated with itself to produce an even-length list. .LP The dash-offset defines the phase of the pattern, specifying how many pixels into the dash-list the pattern should actually begin in any single graphics request. Dashing is continuous through path elements combined with a join-style but is reset to the dash-offset between each sequence of joined lines. .LP The unit of measure for dashes is the same for the ordinary coordinate system. Ideally, a dash length is measured along the slope of the line, but implementations are only required to match this ideal for horizontal and vertical lines. Failing the ideal semantics, it is suggested that the length be measured along the major axis of the line. The major axis is defined as the x axis for lines drawn at an angle of between \-45 and +45 degrees or between 135 and 225 degrees from the x axis. For all other lines, the major axis is the y axis. .LP .ZN XSetDashes can generate .ZN BadAlloc , .ZN BadGC , and .ZN BadValue errors. .SH DIAGNOSTICS .TP 1i .ZN BadAlloc The server failed to allocate the requested resource or server memory. .TP 1i .ZN BadGC A value for a GContext argument does not name a defined GContext. .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .SH "SEE ALSO" XCreateGC(__libmansuffix__), XQueryBestSize(__libmansuffix__), XSetArcMode(__libmansuffix__), XSetClipOrigin(__libmansuffix__), XSetFillStyle(__libmansuffix__), XSetFont(__libmansuffix__), XSetState(__libmansuffix__), XSetTile(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XAllocColor.man000064401431060000012000000274421247741723500165200ustar00alancstaff00002660200006'\" e .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 '\" e .TH XAllocColor __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XAllocColor, XAllocNamedColor, XAllocColorCells, XAllocColorPlanes, XFreeColors \- allocate and free colors .SH SYNTAX .HP Status XAllocColor\^(\^Display *\fIdisplay\fP, Colormap \fIcolormap\fP\^, XColor *\fIscreen_in_out\fP\^); .HP Status XAllocNamedColor\^(\^Display *\fIdisplay\fP, Colormap \fIcolormap\fP\^, char *\fIcolor_name\fP\^, XColor *\fIscreen_def_return\fP\^, XColor *\fIexact_def_return\fP\^); .HP Status XAllocColorCells\^(\^Display *\fIdisplay\fP, Colormap \fIcolormap\fP\^, Bool \fIcontig\fP\^, unsigned long \fIplane_masks_return\fP[\^]\^, unsigned int \fInplanes\fP\^, unsigned long \fIpixels_return\fP[\^]\^, unsigned int \fInpixels\fP\^); .HP Status XAllocColorPlanes\^(\^Display *\fIdisplay\fP, Colormap \fIcolormap\fP\^, Bool \fIcontig\fP\^, unsigned long \fIpixels_return\fP[\^]\^, int \fIncolors\fP\^, int \fInreds\fP\^, int \fIngreens\fP\^, int \fInblues\fP\^, unsigned long *\fIrmask_return\fP\^, unsigned long *\fIgmask_return\fP\^, unsigned long *\fIbmask_return\fP\^); .HP int XFreeColors\^(\^Display *\fIdisplay\fP, Colormap \fIcolormap\fP\^, unsigned long \fIpixels\fP\^[\^], int \fInpixels\fP\^, unsigned long \fIplanes\fP\^); .IP \fIcolor_name\fP 1i Specifies the color name string (for example, red) whose color definition structure you want returned. .IP \fIcolormap\fP 1i Specifies the colormap. .IP \fIcontig\fP 1i Specifies a Boolean value that indicates whether the planes must be contiguous. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIexact_def_return\fP 1i Returns the exact RGB values. .IP \fIncolors\fP 1i Specifies the number of pixel values that are to be returned in the pixels_return array. .IP \fInpixels\fP 1i Specifies the number of pixels. .IP \fInplanes\fP 1i Specifies the number of plane masks that are to be returned in the plane masks array. .IP \fInreds\fP 1i .br .ns .IP \fIngreens\fP 1i .br .ns .IP \fInblues\fP 1i .br .ns Specify the number of red, green, and blue planes. The value you pass must be nonnegative. .IP \fIpixels\fP 1i Specifies an array of pixel values. .IP \fIpixels_return\fP 1i Returns an array of pixel values. .IP \fIplane_mask_return\fP 1i Returns an array of plane masks. .\" *** JIM: NEED MORE INFO FOR THIS. *** .IP \fIplanes\fP 1i Specifies the planes you want to free. .IP \fIrmask_return\fP 1i .br .ns .IP \fIgmask_return\fP 1i .br .ns .IP \fIbmask_return\fP 1i Return bit masks for the red, green, and blue planes. .IP \fIscreen_def_return\fP 1i Returns the closest RGB values provided by the hardware. .IP \fIscreen_in_out\fP 1i Specifies and returns the values actually used in the colormap. .SH DESCRIPTION The .ZN XAllocColor function allocates a read-only colormap entry corresponding to the closest RGB value supported by the hardware. .ZN XAllocColor returns the pixel value of the color closest to the specified RGB elements supported by the hardware and returns the RGB value actually used. The corresponding colormap cell is read-only. In addition, .ZN XAllocColor returns nonzero if it succeeded or zero if it failed. .IN "Color map" .IN "Color" "allocation" .IN "Allocation" "colormap" .IN "read-only colormap cells" Multiple clients that request the same effective RGB value can be assigned the same read-only entry, thus allowing entries to be shared. When the last client deallocates a shared cell, it is deallocated. .ZN XAllocColor does not use or affect the flags in the .ZN XColor structure. .LP .ZN XAllocColor can generate a .ZN BadColor error. .LP The .ZN XAllocNamedColor function looks up the named color with respect to the screen that is associated with the specified colormap. It returns both the exact database definition and the closest color supported by the screen. The allocated color cell is read-only. The pixel value is returned in screen_def_return. If the color name is not in the Host Portable Character Encoding, the result is implementation-dependent. Use of uppercase or lowercase does not matter. If screen_def_return and exact_def_return point to the same structure, the pixel field will be set correctly, but the color values are undefined. .ZN XAllocNamedColor returns nonzero if a cell is allocated; otherwise, it returns zero. .LP .ZN XAllocNamedColor can generate a .ZN BadColor error. .LP .EQ delim %% .EN The .ZN XAllocColorCells function allocates read/write color cells. The number of colors must be positive and the number of planes nonnegative, or a .ZN BadValue error results. If ncolors and nplanes are requested, then ncolors pixels and nplane plane masks are returned. No mask will have any bits set to 1 in common with any other mask or with any of the pixels. By ORing together each pixel with zero or more masks, ncolors * %2 sup nplanes% distinct pixels can be produced. All of these are allocated writable by the request. For .ZN GrayScale or .ZN PseudoColor , each mask has exactly one bit set to 1. For .ZN DirectColor , each has exactly three bits set to 1. If contig is .ZN True and if all masks are ORed together, a single contiguous set of bits set to 1 will be formed for .ZN GrayScale or .ZN PseudoColor and three contiguous sets of bits set to 1 (one within each pixel subfield) for .ZN DirectColor . The RGB values of the allocated entries are undefined. .ZN XAllocColorCells returns nonzero if it succeeded or zero if it failed. .LP .ZN XAllocColorCells can generate .ZN BadColor and .ZN BadValue errors. .LP .EQ delim %% .EN The specified ncolors must be positive; and nreds, ngreens, and nblues must be nonnegative, or a .ZN BadValue error results. If ncolors colors, nreds reds, ngreens greens, and nblues blues are requested, ncolors pixels are returned; and the masks have nreds, ngreens, and nblues bits set to 1, respectively. If contig is .ZN True , each mask will have a contiguous set of bits set to 1. No mask will have any bits set to 1 in common with any other mask or with any of the pixels. For .ZN DirectColor , each mask will lie within the corresponding pixel subfield. By ORing together subsets of masks with each pixel value, ncolors * %2 sup (nreds+ngreens+nblues)% distinct pixel values can be produced. All of these are allocated by the request. However, in the colormap, there are only ncolors * %2 sup nreds% independent red entries, ncolors * %2 sup ngreens% independent green entries, and ncolors * %2 sup nblues% independent blue entries. This is true even for .ZN PseudoColor . When the colormap entry of a pixel value is changed (using .ZN XStoreColors , .ZN XStoreColor , or .ZN XStoreNamedColor ), the pixel is decomposed according to the masks, and the corresponding independent entries are updated. .ZN XAllocColorPlanes returns nonzero if it succeeded or zero if it failed. .LP .ZN XAllocColorPlanes can generate .ZN BadColor and .ZN BadValue errors. .LP The .ZN XFreeColors function frees the cells represented by pixels whose values are in the pixels array. The planes argument should not have any bits set to 1 in common with any of the pixels. The set of all pixels is produced by ORing together subsets of the planes argument with the pixels. The request frees all of these pixels that were allocated by the client (using .IN XAllocColor .IN XAllocNamedColor .IN XAllocColorCells .IN XAllocColorPlanes .ZN XAllocColor , .ZN XAllocNamedColor , .ZN XAllocColorCells , and .ZN XAllocColorPlanes ). Note that freeing an individual pixel obtained from .ZN XAllocColorPlanes may not actually allow it to be reused until all of its related pixels are also freed. Similarly, a read-only entry is not actually freed until it has been freed by all clients, and if a client allocates the same read-only entry multiple times, it must free the entry that many times before the entry is actually freed. .LP All specified pixels that are allocated by the client in the colormap are freed, even if one or more pixels produce an error. If a specified pixel is not a valid index into the colormap, a .ZN BadValue error results. If a specified pixel is not allocated by the client (that is, is unallocated or is only allocated by another client) or if the colormap was created with all entries writable (by passing .ZN AllocAll to .ZN XCreateColormap ), a .ZN BadAccess error results. If more than one pixel is in error, the one that gets reported is arbitrary. .LP .ZN XFreeColors can generate .ZN BadAccess , .ZN BadColor , and .ZN BadValue errors. .SH DIAGNOSTICS .TP 1i .ZN BadAccess A client attempted to free a color map entry that it did not already allocate. .TP 1i .ZN BadAccess A client attempted to store into a read-only color map entry. .TP 1i .ZN BadColor A value for a Colormap argument does not name a defined Colormap. .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .SH "SEE ALSO" XCreateColormap(__libmansuffix__), XQueryColor(__libmansuffix__), XStoreColors(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XGetIMValues.man000064401431060000012000000000611247741723500166000ustar00alancstaff00002660200006.so man__libmansuffix__/XOpenIM.__libmansuffix__ libX11-1.6.3/man/XrmParseCommand.man000064401431060000012000000000671247741723500173710ustar00alancstaff00002660200006.so man__libmansuffix__/XrmInitialize.__libmansuffix__ libX11-1.6.3/man/XErrorEvent.man000064401431060000012000000114461247741723500165570ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XErrorEvent __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XErrorEvent \- X error event structure .SH STRUCTURES The .ZN XErrorEvent structure contains: .LP .Ds 0 typedef struct { int type; Display *display; /\&* Display the event was read from */ XID resourceid; /\&* resource id */ unsigned long serial; /\&* serial number of failed request */ unsigned char error_code; /\&* error code of failed request */ unsigned char request_code; /\&* Major op-code of failed request */ unsigned char minor_code; /\&* Minor op-code of failed request */ } XErrorEvent; .De .LP When you receive this event, the structure members are set as follows. .LP The serial member is the number of requests, starting from one, sent over the network connection since it was opened. It is the number that was the value of .ZN NextRequest immediately before the failing call was made. The request_code member is a protocol request of the procedure that failed, as defined in .hN X11/Xproto.h . .SH "SEE ALSO" AllPlanes(__libmansuffix__), XAnyEvent(__libmansuffix__), XButtonEvent(__libmansuffix__), XCreateWindowEvent(__libmansuffix__), XCirculateEvent(__libmansuffix__), XCirculateRequestEvent(__libmansuffix__), XColormapEvent(__libmansuffix__), XConfigureEvent(__libmansuffix__), XConfigureRequestEvent(__libmansuffix__), XCrossingEvent(__libmansuffix__), XDestroyWindowEvent(__libmansuffix__), XExposeEvent(__libmansuffix__), XFocusChangeEvent(__libmansuffix__), XGraphicsExposeEvent(__libmansuffix__), XGravityEvent(__libmansuffix__), XKeymapEvent(__libmansuffix__), XMapEvent(__libmansuffix__), XMapRequestEvent(__libmansuffix__), XPropertyEvent(__libmansuffix__), XReparentEvent(__libmansuffix__), XResizeRequestEvent(__libmansuffix__), XSelectionClearEvent(__libmansuffix__), XSelectionEvent(__libmansuffix__), XSelectionRequestEvent(__libmansuffix__), XUnmapEvent(__libmansuffix__), XVisibilityEvent(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XRotateBuffers.man000064401431060000012000000000651247741723500172320ustar00alancstaff00002660200006.so man__libmansuffix__/XStoreBytes.__libmansuffix__ libX11-1.6.3/man/XPixmapFormatValues.man000064401431060000012000000000701247741723500202420ustar00alancstaff00002660200006.so man__libmansuffix__/ImageByteOrder.__libmansuffix__ libX11-1.6.3/man/XRaiseWindow.man000064401431060000012000000210211247741723500167050ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XRaiseWindow __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XRaiseWindow, XLowerWindow, XCirculateSubwindows, XCirculateSubwindowsUp, XCirculateSubwindowsDown, XRestackWindows \- change window stacking order .SH SYNTAX .HP int XRaiseWindow\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^); .HP int XLowerWindow\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^); .HP int XCirculateSubwindows\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, int \fIdirection\fP\^); .HP int XCirculateSubwindowsUp\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^); .HP int XCirculateSubwindowsDown\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^); .HP int XRestackWindows\^(\^Display *\fIdisplay\fP\^, Window \fIwindows\fP\^[], int \fInwindows\fP\^); .SH ARGUMENTS .IP \fIdirection\fP 1i Specifies the direction (up or down) that you want to circulate the window. You can pass .ZN RaiseLowest or .ZN LowerHighest . .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fInwindows\fP 1i Specifies the number of windows to be restacked. .IP \fIw\fP 1i Specifies the window. .IP \fIwindows\fP 1i Specifies an array containing the windows to be restacked. .SH DESCRIPTION The .ZN XRaiseWindow function raises the specified window to the top of the stack so that no sibling window obscures it. If the windows are regarded as overlapping sheets of paper stacked on a desk, then raising a window is analogous to moving the sheet to the top of the stack but leaving its x and y location on the desk constant. Raising a mapped window may generate .ZN Expose events for the window and any mapped subwindows that were formerly obscured. .LP If the override-redirect attribute of the window is .ZN False and some other client has selected .ZN SubstructureRedirectMask on the parent, the X server generates a .ZN ConfigureRequest event, and no processing is performed. Otherwise, the window is raised. .LP .ZN XRaiseWindow can generate a .ZN BadWindow error. .LP The .ZN XLowerWindow function lowers the specified window to the bottom of the stack so that it does not obscure any sibling windows. If the windows are regarded as overlapping sheets of paper stacked on a desk, then lowering a window is analogous to moving the sheet to the bottom of the stack but leaving its x and y location on the desk constant. Lowering a mapped window will generate .ZN Expose events on any windows it formerly obscured. .LP If the override-redirect attribute of the window is .ZN False and some other client has selected .ZN SubstructureRedirectMask on the parent, the X server generates a .ZN ConfigureRequest event, and no processing is performed. Otherwise, the window is lowered to the bottom of the stack. .LP .ZN XLowerWindow can generate a .ZN BadWindow error. .LP The .ZN XCirculateSubwindows function circulates children of the specified window in the specified direction. If you specify .ZN RaiseLowest , .ZN XCirculateSubwindows raises the lowest mapped child (if any) that is occluded by another child to the top of the stack. If you specify .ZN LowerHighest , .ZN XCirculateSubwindows lowers the highest mapped child (if any) that occludes another child to the bottom of the stack. Exposure processing is then performed on formerly obscured windows. If some other client has selected .ZN SubstructureRedirectMask on the window, the X server generates a .ZN CirculateRequest event, and no further processing is performed. If a child is actually restacked, the X server generates a .ZN CirculateNotify event. .LP .ZN XCirculateSubwindows can generate .ZN BadValue and .ZN BadWindow errors. .LP The .ZN XCirculateSubwindowsUp function raises the lowest mapped child of the specified window that is partially or completely occluded by another child. Completely unobscured children are not affected. This is a convenience function equivalent to .ZN XCirculateSubwindows with .ZN RaiseLowest specified. .LP .ZN XCirculateSubwindowsUp can generate a .ZN BadWindow error. .LP The .ZN XCirculateSubwindowsDown function lowers the highest mapped child of the specified window that partially or completely occludes another child. Completely unobscured children are not affected. This is a convenience function equivalent to .ZN XCirculateSubwindows with .ZN LowerHighest specified. .LP .ZN XCirculateSubwindowsDown can generate a .ZN BadWindow error. .LP The .ZN XRestackWindows function restacks the windows in the order specified, from top to bottom. The stacking order of the first window in the windows array is unaffected, but the other windows in the array are stacked underneath the first window, in the order of the array. The stacking order of the other windows is not affected. For each window in the window array that is not a sibling of the first window, a .ZN BadMatch error results. .LP If the override-redirect attribute of a window is .ZN False and some other client has selected .ZN SubstructureRedirectMask on the parent, the X server generates .ZN ConfigureRequest events for each window whose override-redirect flag is not set, and no further processing is performed. Otherwise, the windows will be restacked in top-to-bottom order. .LP .ZN XRestackWindows can generate .ZN BadWindow error. .SH DIAGNOSTICS .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XChangeWindowAttributes(__libmansuffix__), XConfigureWindow(__libmansuffix__), XCreateWindow(__libmansuffix__), XDestroyWindow(__libmansuffix__), XMapWindow(__libmansuffix__), XUnmapWindow(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XPropertyEvent.man000064401431060000012000000140061247741723500173050ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XPropertyEvent __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XPropertyEvent \- PropertyNotify event structure .SH STRUCTURES The structure for .ZN PropertyNotify events contains: .LP .Ds 0 typedef struct { int type; /\&* PropertyNotify */ unsigned long serial; /\&* # of last request processed by server */ Bool send_event; /\&* true if this came from a SendEvent request */ Display *display; /\&* Display the event was read from */ Window window; Atom atom; Time time; int state; /\&* PropertyNewValue or PropertyDelete */ } XPropertyEvent; .De .LP When you receive this event, the structure members are set as follows. .LP The type member is set to the event type constant name that uniquely identifies it. For example, when the X server reports a .ZN GraphicsExpose event to a client application, it sends an .ZN XGraphicsExposeEvent structure with the type member set to .ZN GraphicsExpose . The display member is set to a pointer to the display the event was read on. The send_event member is set to .ZN True if the event came from a .ZN SendEvent protocol request. The serial member is set from the serial number reported in the protocol but expanded from the 16-bit least-significant bits to a full 32-bit value. The window member is set to the window that is most useful to toolkit dispatchers. .LP The window member is set to the window whose associated property was changed. The atom member is set to the property's atom and indicates which property was changed or desired. The time member is set to the server time when the property was changed. The state member is set to indicate whether the property was changed to a new value or deleted and can be .ZN PropertyNewValue or .ZN PropertyDelete . The state member is set to .ZN PropertyNewValue when a property of the window is changed using .ZN XChangeProperty or .ZN XRotateWindowProperties (even when adding zero-length data using .ZN XChangeProperty ) and when replacing all or part of a property with identical data using .ZN XChangeProperty or .ZN XRotateWindowProperties . The state member is set to .ZN PropertyDelete when a property of the window is deleted using .ZN XDeleteProperty or, if the delete argument is .ZN True , .ZN XGetWindowProperty . .SH "SEE ALSO" XAnyEvent(__libmansuffix__), XButtonEvent(__libmansuffix__), XCreateWindowEvent(__libmansuffix__), XCirculateEvent(__libmansuffix__), XCirculateRequestEvent(__libmansuffix__), XColormapEvent(__libmansuffix__), XConfigureEvent(__libmansuffix__), XConfigureRequestEvent(__libmansuffix__), XCrossingEvent(__libmansuffix__), XDestroyWindowEvent(__libmansuffix__), XErrorEvent(__libmansuffix__), XExposeEvent(__libmansuffix__), XFocusChangeEvent(__libmansuffix__), XGetWindowProperty(__libmansuffix__), XGraphicsExposeEvent(__libmansuffix__), XGravityEvent(__libmansuffix__), XKeymapEvent(__libmansuffix__), XMapEvent(__libmansuffix__), XMapRequestEvent(__libmansuffix__), XReparentEvent(__libmansuffix__), XResizeRequestEvent(__libmansuffix__), XSelectionClearEvent(__libmansuffix__), XSelectionEvent(__libmansuffix__), XSelectionRequestEvent(__libmansuffix__), XUnmapEvent(__libmansuffix__), XVisibilityEvent(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XcmsTekHVCQueryMaxVC.man000064401431060000012000000000751247741723500201740ustar00alancstaff00002660200006.so man__libmansuffix__/XcmsTekHVCQueryMaxC.__libmansuffix__ libX11-1.6.3/man/XcmsCIELabQueryMaxLC.man000064401431060000012000000000751247741723500201150ustar00alancstaff00002660200006.so man__libmansuffix__/XcmsCIELabQueryMaxC.__libmansuffix__ libX11-1.6.3/man/XSetGraphicsExposure.man000064401431060000012000000000651247741723500204260ustar00alancstaff00002660200006.so man__libmansuffix__/XSetArcMode.__libmansuffix__ libX11-1.6.3/man/XReconfigureWMWindow.man000064401431060000012000000000701247741723500203570ustar00alancstaff00002660200006.so man__libmansuffix__/XIconifyWindow.__libmansuffix__ libX11-1.6.3/man/XCheckMaskEvent.man000064401431060000012000000000641247741723500173110ustar00alancstaff00002660200006.so man__libmansuffix__/XNextEvent.__libmansuffix__ libX11-1.6.3/man/XQueryColor.man000064401431060000012000000213021247741723500165600ustar00alancstaff00002660200006'\" t .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XQueryColor __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XQueryColor, XQueryColors, XLookupColor, XParseColor \- obtain color values .SH SYNTAX .HP int XQueryColor\^(\^Display *\fIdisplay\fP\^, Colormap \fIcolormap\fP\^, XColor *\fIdef_in_out\fP\^); .HP int XQueryColors\^(\^Display *\fIdisplay\fP\^, Colormap \fIcolormap\fP\^, XColor \fIdefs_in_out\fP[\^]\^, int \fIncolors\fP\^); .HP Status XLookupColor\^(\^Display *\fIdisplay\fP\^, Colormap \fIcolormap\fP\^, char *\fIcolor_name\fP\^, XColor *\fIexact_def_return\fP\^, XColor *\fIscreen_def_return\fP\^); .HP Status XParseColor\^(\^Display *\fIdisplay\fP\^, Colormap \fIcolormap\fP\^, char *\fIspec\fP\^, XColor *\fIexact_def_return\fP\^); .SH ARGUMENTS .IP \fIcolormap\fP 1i Specifies the colormap. .IP \fIcolor_name\fP 1i Specifies the color name string (for example, red) whose color definition structure you want returned. .IP \fIdef_in_out\fP 1i Specifies and returns the RGB values for the pixel specified in the structure. .IP \fIdefs_in_out\fP 1i Specifies and returns an array of color definition structures for the pixel specified in the structure. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIexact_def_return\fP 1i Returns the exact RGB values. .IP \fIncolors\fP 1i .\"Specifies the number of color definition structures. Specifies the number of .ZN XColor structures in the color definition array. .IP \fIscreen_def_return\fP 1i Returns the closest RGB values provided by the hardware. .IP \fIspec\fP 1i Specifies the color name string; case is ignored. .IP \fIexact_def_return\fP 1i Returns the exact color value for later use and sets the .ZN DoRed , .ZN DoGreen , and .ZN DoBlue flags. .SH DESCRIPTION The .ZN XQueryColor function returns the current RGB value for the pixel in the .ZN XColor structure and sets the .ZN DoRed , .ZN DoGreen , and .ZN DoBlue flags. The .ZN XQueryColors function returns the RGB value for each pixel in each .ZN XColor structure and sets the .ZN DoRed , .ZN DoGreen , and .ZN DoBlue flags in each structure. .LP .ZN XQueryColor and .ZN XQueryColors can generate .ZN BadColor and .ZN BadValue errors. .LP The .ZN XLookupColor function looks up the string name of a color with respect to the screen associated with the specified colormap. It returns both the exact color values and the closest values provided by the screen with respect to the visual type of the specified colormap. If the color name is not in the Host Portable Character Encoding, the result is implementation-dependent. Use of uppercase or lowercase does not matter. .ZN XLookupColor returns nonzero if the name is resolved; otherwise, it returns zero. .LP The .ZN XParseColor function looks up the string name of a color with respect to the screen associated with the specified colormap. It returns the exact color value. If the color name is not in the Host Portable Character Encoding, the result is implementation-dependent. Use of uppercase or lowercase does not matter. .ZN XParseColor returns nonzero if the name is resolved; otherwise, it returns zero. .LP .ZN XLookupColor and .ZN XParseColor can generate .ZN BadColor error. .SH "COLOR NAMES" An RGB Device specification is identified by the prefix ``rgb:'' and conforms to the following syntax: .LP .\" Start marker code here .Ds 0 rgb:\fI//\fP \fI\fP, \fI\fP, \fI\fP := \fIh\fP | \fIhh\fP | \fIhhh\fP | \fIhhhh\fP \fIh\fP := single hexadecimal digits (case insignificant) .De .\" End marker code here .LP Note that \fIh\fP indicates the value scaled in 4 bits, \fIhh\fP the value scaled in 8 bits, \fIhhh\fP the value scaled in 12 bits, and \fIhhhh\fP the value scaled in 16 bits, respectively. .LP For backward compatibility, an older syntax for RGB Device is supported, but its continued use is not encouraged. The syntax is an initial sharp sign character followed by a numeric specification, in one of the following formats: .LP .TS l l. \&#RGB (4 bits each) \&#RRGGBB (8 bits each) \&#RRRGGGBBB (12 bits each) \&#RRRRGGGGBBBB (16 bits each) .TE .LP The R, G, and B represent single hexadecimal digits. When fewer than 16 bits each are specified, they represent the most significant bits of the value (unlike the ``rgb:'' syntax, in which values are scaled). For example, the string ``#3a7'' is the same as ``#3000a0007000''. .LP An RGB intensity specification is identified by the prefix ``rgbi:'' and conforms to the following syntax: .LP .\" Start marker code here .Ds 0 rgbi:\fI//\fP .De .\" End marker code here .LP Note that red, green, and blue are floating-point values between 0.0 and 1.0, inclusive. The input format for these values is an optional sign, a string of numbers possibly containing a decimal point, and an optional exponent field containing an E or e followed by a possibly signed integer string. .LP The standard device-independent string specifications have the following syntax: .LP .\" Start marker code here .Ds 0 CIEXYZ:\fI//\fP CIEuvY:\fI//\fP CIExyY:\fI//\fP CIELab:\fI//\fP CIELuv:\fI//\fP TekHVC:\fI//\fP .De .\" End marker code here .LP All of the values (C, H, V, X, Y, Z, a, b, u, v, y, x) are floating-point values. The syntax for these values is an optional plus or minus sign, a string of digits possibly containing a decimal point, and an optional exponent field consisting of an ``E'' or ``e'' followed by an optional plus or minus followed by a string of digits. .SH DIAGNOSTICS .TP 1i .ZN BadColor A value for a Colormap argument does not name a defined Colormap. .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .SH "SEE ALSO" XAllocColor(__libmansuffix__), XCreateColormap(__libmansuffix__), XStoreColors(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XSetWindowBorder.man000064401431060000012000000001011247741723500175270ustar00alancstaff00002660200006.so man__libmansuffix__/XChangeWindowAttributes.__libmansuffix__ libX11-1.6.3/man/XGContextFromGC.man000064401431060000012000000000631247741723500172460ustar00alancstaff00002660200006.so man__libmansuffix__/XCreateGC.__libmansuffix__ libX11-1.6.3/man/XDrawImageString.man000064401431060000012000000130321247741723500175040ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XDrawImageString __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XDrawImageString, XDrawImageString16 \- draw image text .SH SYNTAX .HP int XDrawImageString\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, GC \fIgc\fP\^, int \fIx\fP\^, int \fIy\fP\^, char *\fIstring\fP\^, int \fIlength\fP\^); .HP int XDrawImageString16\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, GC \fIgc\fP\^, int \fIx\fP\^, int \fIy\fP\^, XChar2b *\fIstring\fP\^, int \fIlength\fP\^); .SH ARGUMENTS .IP \fId\fP 1i Specifies the drawable. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIgc\fP 1i Specifies the GC. .IP \fIlength\fP 1i Specifies the number of characters in the string argument. .IP \fIstring\fP 1i Specifies the character string. .ds Xy , which are relative to the origin of the specified drawable \ and define the origin of the first character .IP \fIx\fP 1i .br .ns .IP \fIy\fP 1i Specify the x and y coordinates\*(Xy. .SH DESCRIPTION The .ZN XDrawImageString16 function is similar to .ZN XDrawImageString except that it uses 2-byte or 16-bit characters. Both functions also use both the foreground and background pixels of the GC in the destination. .LP The effect is first to fill a destination rectangle with the background pixel defined in the GC and then to paint the text with the foreground pixel. The upper-left corner of the filled rectangle is at: .LP .Ds [x, y \- font-ascent] .De .LP The width is: .LP .Ds overall-width .De .LP The height is: .LP .Ds font-ascent + font-descent .De .LP The overall-width, font-ascent, and font-descent are as would be returned by .ZN XQueryTextExtents using gc and string. The function and fill-style defined in the GC are ignored for these functions. The effective function is .ZN GXcopy , and the effective fill-style is .ZN FillSolid . .LP For fonts defined with 2-byte matrix indexing and used with .ZN XDrawImageString , each byte is used as a byte2 with a byte1 of zero. .LP Both functions use these GC components: plane-mask, foreground, background, font, subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask. .LP .ZN XDrawImageString and .ZN XDrawImageString16 can generate .ZN BadDrawable , .ZN BadGC , and .ZN BadMatch errors. .SH DIAGNOSTICS .TP 1i .ZN BadDrawable A value for a Drawable argument does not name a defined Window or Pixmap. .TP 1i .ZN BadGC A value for a GContext argument does not name a defined GContext. .TP 1i .ZN BadMatch An .ZN InputOnly window is used as a Drawable. .TP 1i .ZN BadMatch Some argument or pair of arguments has the correct type and range but fails to match in some other way required by the request. .SH "SEE ALSO" XDrawString(__libmansuffix__), XDrawText(__libmansuffix__), XLoadFont(__libmansuffix__), XTextExtents(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XModifierKeymap.man000064401431060000012000000001001247741723500173520ustar00alancstaff00002660200006.so man__libmansuffix__/XChangeKeyboardMapping.__libmansuffix__ libX11-1.6.3/man/XrmDestroyDatabase.man000064401431060000012000000000741247741723500200740ustar00alancstaff00002660200006.so man__libmansuffix__/XrmGetFileDatabase.__libmansuffix__ libX11-1.6.3/man/XCreateColormap.man000064401431060000012000000217761247741723500173730ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XCreateColormap __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XCreateColormap, XCopyColormapAndFree, XFreeColormap, XColor \- create, copy, or destroy colormaps and color structure .SH SYNTAX .HP Colormap XCreateColormap\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, Visual *\fIvisual\fP\^, int \fIalloc\fP\^); .HP Colormap XCopyColormapAndFree\^(\^Display *\fIdisplay\fP\^, Colormap \fIcolormap\fP\^); .HP int XFreeColormap\^(\^Display *\fIdisplay\fP\^, Colormap \fIcolormap\fP\^); .SH ARGUMENTS .IP \fIalloc\fP 1i Specifies the colormap entries to be allocated. You can pass .ZN AllocNone or .ZN AllocAll . .ds Cm that you want to create, copy, set, or destroy .IP \fIcolormap\fP 1i Specifies the colormap \*(Cm. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIvisual\fP 1i Specifies a visual type supported on the screen. If the visual type is not one supported by the screen, a .ZN BadMatch error results. .ds Wi on whose screen you want to create a colormap .IP \fIw\fP 1i Specifies the window \*(Wi. .SH DESCRIPTION The .ZN XCreateColormap function creates a colormap of the specified visual type for the screen on which the specified window resides and returns the colormap ID associated with it. Note that the specified window is only used to determine the screen. .LP The initial values of the colormap entries are undefined for the visual classes .ZN GrayScale , .ZN PseudoColor , and .ZN DirectColor . For .ZN StaticGray , .ZN StaticColor , and .ZN TrueColor , the entries have defined values, but those values are specific to the visual and are not defined by X. For .ZN StaticGray , .ZN StaticColor , and .ZN TrueColor , alloc must be .ZN AllocNone , or a .ZN BadMatch error results. For the other visual classes, if alloc is .ZN AllocNone , the colormap initially has no allocated entries, and clients can allocate them. For information about the visual types, see section 3.1. .LP If alloc is .ZN AllocAll , the entire colormap is allocated writable. The initial values of all allocated entries are undefined. For .ZN GrayScale and .ZN PseudoColor , the effect is as if an .ZN XAllocColorCells call returned all pixel values from zero to N \- 1, where N is the colormap entries value in the specified visual. For .ZN DirectColor , the effect is as if an .ZN XAllocColorPlanes call returned a pixel value of zero and red_mask, green_mask, and blue_mask values containing the same bits as the corresponding masks in the specified visual. However, in all cases, none of these entries can be freed by using .ZN XFreeColors . .LP .ZN XCreateColormap can generate .ZN BadAlloc , .ZN BadMatch , .ZN BadValue , and .ZN BadWindow errors. .LP The .ZN XCopyColormapAndFree function creates a colormap of the same visual type and for the same screen as the specified colormap and returns the new colormap ID. It also moves all of the client's existing allocation from the specified colormap to the new colormap with their color values intact and their read-only or writable characteristics intact and frees those entries in the specified colormap. Color values in other entries in the new colormap are undefined. If the specified colormap was created by the client with alloc set to .ZN AllocAll , the new colormap is also created with .ZN AllocAll , all color values for all entries are copied from the specified colormap, and then all entries in the specified colormap are freed. If the specified colormap was not created by the client with .ZN AllocAll , the allocations to be moved are all those pixels and planes that have been allocated by the client using .ZN XAllocColor , .ZN XAllocNamedColor , .ZN XAllocColorCells , or .ZN XAllocColorPlanes and that have not been freed since they were allocated. .LP .ZN XCopyColormapAndFree can generate .ZN BadAlloc and .ZN BadColor errors. .LP The .ZN XFreeColormap function deletes the association between the colormap resource ID and the colormap and frees the colormap storage. However, this function has no effect on the default colormap for a screen. If the specified colormap is an installed map for a screen, it is uninstalled (see .ZN XUninstallColormap ). If the specified colormap is defined as the colormap for a window (by .ZN XCreateWindow , .ZN XSetWindowColormap , or .ZN XChangeWindowAttributes ), .ZN XFreeColormap changes the colormap associated with the window to .ZN None and generates a .ZN ColormapNotify event. X does not define the colors displayed for a window with a colormap of .ZN None . .LP .ZN XFreeColormap can generate a .ZN BadColor error. .SH STRUCTURES The .ZN XColor structure contains: .LP .Ds 0 typedef struct { unsigned long pixel; /\&* pixel value */ unsigned short red, green, blue; /\&* rgb values */ char flags; /\&* DoRed, DoGreen, DoBlue */ char pad; } XColor; .De .LP The red, green, and blue values are always in the range 0 to 65535 inclusive, independent of the number of bits actually used in the display hardware. The server scales these values down to the range used by the hardware. Black is represented by (0,0,0), and white is represented by (65535,65535,65535). .IN "Color" In some functions, the flags member controls which of the red, green, and blue members is used and can be the inclusive OR of zero or more of .ZN DoRed , .ZN DoGreen , and .ZN DoBlue . .SH DIAGNOSTICS .TP 1i .ZN BadAlloc The server failed to allocate the requested resource or server memory. .TP 1i .ZN BadColor A value for a Colormap argument does not name a defined Colormap. .TP 1i .ZN BadMatch An .ZN InputOnly window is used as a Drawable. .TP 1i .ZN BadMatch Some argument or pair of arguments has the correct type and range but fails to match in some other way required by the request. .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XAllocColor(__libmansuffix__), XChangeWindowAttributes(__libmansuffix__), XCreateWindow(__libmansuffix__), XQueryColor(__libmansuffix__), XStoreColors(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XcmsSetWhiteAdjustProc.man000064401431060000012000000000731247741723500207140ustar00alancstaff00002660200006.so man__libmansuffix__/XcmsSetWhitePoint.__libmansuffix__ libX11-1.6.3/man/XDisplayOfOM.man000064401431060000012000000000611247741723500166010ustar00alancstaff00002660200006.so man__libmansuffix__/XOpenOM.__libmansuffix__ libX11-1.6.3/man/DefaultGC.man000064401431060000012000000000631247741723500161230ustar00alancstaff00002660200006.so man__libmansuffix__/AllPlanes.__libmansuffix__ libX11-1.6.3/man/XUnmapSubwindows.man000064401431060000012000000000661247741723500176250ustar00alancstaff00002660200006.so man__libmansuffix__/XUnmapWindow.__libmansuffix__ libX11-1.6.3/man/XcmsQueryGreen.man000064401431060000012000000000701247741723500172440ustar00alancstaff00002660200006.so man__libmansuffix__/XcmsQueryBlack.__libmansuffix__ libX11-1.6.3/man/XGetVisualInfo.man000064401431060000012000000136231247741723500172020ustar00alancstaff00002660200006'\" t .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 '\" t .TH XGetVisualInfo __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XGetVisualInfo, XMatchVisualInfo, XVisualIDFromVisual, XVisualInfo \- obtain visual information and visual structure .SH SYNTAX .HP XVisualInfo *XGetVisualInfo\^(\^Display *\fIdisplay\fP\^, long \fIvinfo_mask\fP\^, XVisualInfo *\fIvinfo_template\fP\^, int *\fInitems_return\fP\^); .HP Status XMatchVisualInfo\^(\^Display *\fIdisplay\fP\^, int \fIscreen\fP\^, int \fIdepth\fP\^, int \fIclass\fP\^, XVisualInfo *\fIvinfo_return\fP\^); .HP VisualID XVisualIDFromVisual\^(\^Visual *\^\fIvisual\fP\^); .SH ARGUMENTS .IP \fIclass\fP 1i Specifies the class of the screen. .IP \fIdepth\fP 1i Specifies the depth of the screen. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fInitems_return\fP 1i Returns the number of matching visual structures. .IP \fIscreen\fP 1i Specifies the screen. .IP \fIvisual\fP 1i Specifies the visual type. .IP \fIvinfo_mask\fP 1i Specifies the visual mask value. .IP \fIvinfo_return\fP 1i Returns the matched visual information. .IP \fIvinfo_template\fP 1i Specifies the visual attributes that are to be used in matching the visual structures. .SH DESCRIPTION The .ZN XGetVisualInfo function returns a list of visual structures that have attributes equal to the attributes specified by vinfo_template. If no visual structures match the template using the specified vinfo_mask, .ZN XGetVisualInfo returns a NULL. To free the data returned by this function, use .ZN XFree . .LP The .ZN XMatchVisualInfo function returns the visual information for a visual that matches the specified depth and class for a screen. Because multiple visuals that match the specified depth and class can exist, the exact visual chosen is undefined. If a visual is found, .ZN XMatchVisualInfo returns nonzero and the information on the visual to vinfo_return. Otherwise, when a visual is not found, .ZN XMatchVisualInfo returns zero. .LP The .ZN XVisualIDFromVisual function returns the visual ID for the specified visual type. .SH STRUCTURES The .ZN XVisualInfo structure contains: .LP .LP /\&* Visual information mask bits */ .TS lw(.5i) lw(2.5i) lw(.8i). T{ \&#define T} T{ .ZN VisualNoMask T} T{ 0x0 T} T{ \&#define T} T{ .ZN VisualIDMask T} T{ 0x1 T} T{ \&#define T} T{ .ZN VisualScreenMask T} T{ 0x2 T} T{ \&#define T} T{ .ZN VisualDepthMask T} T{ 0x4 T} T{ \&#define T} T{ .ZN VisualClassMask T} T{ 0x8 T} T{ \&#define T} T{ .ZN VisualRedMaskMask T} T{ 0x10 T} T{ \&#define T} T{ .ZN VisualGreenMaskMask T} T{ 0x20 T} T{ \&#define T} T{ .ZN VisualBlueMaskMask T} T{ 0x40 T} T{ \&#define T} T{ .ZN VisualColormapSizeMask T} T{ 0x80 T} T{ \&#define T} T{ .ZN VisualBitsPerRGBMask T} T{ 0x100 T} T{ \&#define T} T{ .ZN VisualAllMask T} T{ 0x1FF T} .TE .IN "XVisualInfo" "" "@DEF@" .Ds 0 /\&* Values */ typedef struct { Visual *visual; VisualID visualid; int screen; int depth; int class; unsigned long red_mask; unsigned long green_mask; unsigned long blue_mask; int colormap_size; int bits_per_rgb; } XVisualInfo; .De .SH "SEE ALSO" XFree(__libmansuffix__) .br \fI\*(xL\fP " IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN AlibX11-1.6.3/man/XSetWindowBackground.man000064401431060000012000000001011247741723500203710ustar00alancstaff00002660200006.so man__libmansuffix__/XChangeWindowAttributes.__libmansuffix__ libX11-1.6.3/man/XIconifyWindow.man000064401431060000012000000146431247741723500172560ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XIconifyWindow __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XIconifyWindow, XWithdrawWindow, XReconfigureWMWindow \- manipulate top-level windows .SH SYNTAX .HP Status XIconifyWindow\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP, int \fIscreen_number\fP\^); .HP Status XWithdrawWindow\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, int \fIscreen_number\fP\^); .HP Status XReconfigureWMWindow\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, int \fIscreen_number\fP\^, unsigned int \fIvalue_mask\fP\^, XWindowChanges *\fIvalues\fP); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIscreen_number\fP 1i Specifies the appropriate screen number on the host server. .IP \fIvalue_mask\fP 1i Specifies which values are to be set using information in the values structure. This mask is the bitwise inclusive OR of the valid configure window values bits. .IP \fIvalues\fP 1i Specifies the .ZN XWindowChanges structure. .IP \fIw\fP 1i Specifies the window. .SH DESCRIPTION The .ZN XIconifyWindow function sends a WM_CHANGE_STATE .ZN ClientMessage event with a format of 32 and a first data element of .ZN IconicState (as described in section 4.1.4 of the \fIInter-Client Communication Conventions Manual\fP) and a window of w to the root window of the specified screen with an event mask set to .ZN SubstructureNotifyMask | .ZN SubstructureRedirectMask . Window managers may elect to receive this message and if the window is in its normal state, may treat it as a request to change the window's state from normal to iconic. If the WM_CHANGE_STATE property cannot be interned, .ZN XIconifyWindow does not send a message and returns a zero status. It returns a nonzero status if the client message is sent successfully; otherwise, it returns a zero status. .LP The .ZN XWithdrawWindow function unmaps the specified window and sends a synthetic .ZN UnmapNotify event to the root window of the specified screen. Window managers may elect to receive this message and may treat it as a request to change the window's state to withdrawn. When a window is in the withdrawn state, neither its normal nor its iconic representations is visible. It returns a nonzero status if the .ZN UnmapNotify event is successfully sent; otherwise, it returns a zero status. .LP .ZN XWithdrawWindow can generate a .ZN BadWindow error. .LP The .ZN XReconfigureWMWindow function issues a .ZN ConfigureWindow request on the specified top-level window. If the stacking mode is changed and the request fails with a .ZN BadMatch error, the error is trapped by Xlib and a synthetic .ZN ConfigureRequestEvent containing the same configuration parameters is sent to the root of the specified window. Window managers may elect to receive this event and treat it as a request to reconfigure the indicated window. It returns a nonzero status if the request or event is successfully sent; otherwise, it returns a zero status. .LP .ZN XReconfigureWMWindow can generate .ZN BadValue and .ZN BadWindow errors. .SH DIAGNOSTICS .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XChangeWindowAttributes(__libmansuffix__), XConfigureWindow(__libmansuffix__), XCreateWindow(__libmansuffix__), XDestroyWindow(__libmansuffix__), XRaiseWindow(__libmansuffix__), XMapWindow(__libmansuffix__), XUnmapWindow(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XWindowEvent.man000064401431060000012000000000641247741723500167270ustar00alancstaff00002660200006.so man__libmansuffix__/XNextEvent.__libmansuffix__ libX11-1.6.3/man/XSetRGBColormaps.man000064401431060000012000000001001247741723500174130ustar00alancstaff00002660200006.so man__libmansuffix__/XAllocStandardColormap.__libmansuffix__ libX11-1.6.3/man/XSetWindowAttributes.man000064401431060000012000000000671247741723500204530ustar00alancstaff00002660200006.so man__libmansuffix__/XCreateWindow.__libmansuffix__ libX11-1.6.3/man/XConfigureRequestEvent.man000064401431060000012000000134311247741723500207540ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XConfigureRequestEvent __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XConfigureRequestEvent \- ConfigureRequest event structure .SH STRUCTURES The structure for .ZN ConfigureRequest events contains: .LP .Ds 0 typedef struct { int type; /\&* ConfigureRequest */ unsigned long serial; /\&* # of last request processed by server */ Bool send_event; /\&* true if this came from a SendEvent request */ Display *display; /\&* Display the event was read from */ Window parent; Window window; int x, y; int width, height; int border_width; Window above; int detail; /\&* Above, Below, TopIf, BottomIf, Opposite */ unsigned long value_mask; } XConfigureRequestEvent; .De .LP When you receive this event, the structure members are set as follows. .LP The type member is set to the event type constant name that uniquely identifies it. For example, when the X server reports a .ZN GraphicsExpose event to a client application, it sends an .ZN XGraphicsExposeEvent structure with the type member set to .ZN GraphicsExpose . The display member is set to a pointer to the display the event was read on. The send_event member is set to .ZN True if the event came from a .ZN SendEvent protocol request. The serial member is set from the serial number reported in the protocol but expanded from the 16-bit least-significant bits to a full 32-bit value. The window member is set to the window that is most useful to toolkit dispatchers. .LP The parent member is set to the parent window. The window member is set to the window whose size, position, border width, and/or stacking order is to be reconfigured. The value_mask member indicates which components were specified in the .ZN ConfigureWindow protocol request. The corresponding values are reported as given in the request. The remaining values are filled in from the current geometry of the window, except in the case of above (sibling) and detail (stack-mode), which are reported as .ZN None and .ZN Above , respectively, if they are not given in the request. .SH "SEE ALSO" XAnyEvent(__libmansuffix__), XButtonEvent(__libmansuffix__), XCreateWindowEvent(__libmansuffix__), XCirculateEvent(__libmansuffix__), XCirculateRequestEvent(__libmansuffix__), XColormapEvent(__libmansuffix__), XConfigureEvent(__libmansuffix__), XCrossingEvent(__libmansuffix__), XDestroyWindowEvent(__libmansuffix__), XErrorEvent(__libmansuffix__), XExposeEvent(__libmansuffix__), XFocusChangeEvent(__libmansuffix__), XGraphicsExposeEvent(__libmansuffix__), XGravityEvent(__libmansuffix__), XKeymapEvent(__libmansuffix__), XMapEvent(__libmansuffix__), XMapRequestEvent(__libmansuffix__), XPropertyEvent(__libmansuffix__), XReparentEvent(__libmansuffix__), XResizeRequestEvent(__libmansuffix__), XSelectionClearEvent(__libmansuffix__), XSelectionEvent(__libmansuffix__), XSelectionRequestEvent(__libmansuffix__), XUnmapEvent(__libmansuffix__), XVisibilityEvent(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/Makefile.am000064401431060000012000001032741247741723500156740ustar00alancstaff00002660200006SUBDIRS = xkb libmandir = $(LIB_MAN_DIR) libman_PRE = \ $(all_shadows:=.man) \ $(file_shadows:=.man) \ AllPlanes.man \ BlackPixelOfScreen.man \ DisplayOfCCC.man \ ImageByteOrder.man \ IsCursorKey.man \ XAddConnectionWatch.man \ XAddHost.man \ XAllocClassHint.man \ XAllocColor.man \ XAllocIconSize.man \ XAllocSizeHints.man \ XAllocStandardColormap.man \ XAllocWMHints.man \ XAllowEvents.man \ XAnyEvent.man \ XButtonEvent.man \ XChangeKeyboardControl.man \ XChangeKeyboardMapping.man \ XChangePointerControl.man \ XChangeSaveSet.man \ XChangeWindowAttributes.man \ XCirculateEvent.man \ XCirculateRequestEvent.man \ XClearArea.man \ XClientMessageEvent.man \ XcmsAllocColor.man \ XcmsCCCOfColormap.man \ XcmsCIELabQueryMaxC.man \ XcmsCIELuvQueryMaxC.man \ XcmsColor.man \ XcmsConvertColors.man \ XcmsCreateCCC.man \ XcmsDefaultCCC.man \ XcmsQueryBlack.man \ XcmsQueryColor.man \ XcmsSetWhitePoint.man \ XcmsStoreColor.man \ XcmsTekHVCQueryMaxC.man \ XColormapEvent.man \ XConfigureEvent.man \ XConfigureRequestEvent.man \ XConfigureWindow.man \ XCopyArea.man \ XCreateColormap.man \ XCreateFontCursor.man \ XCreateFontSet.man \ XCreateGC.man \ XCreateIC.man \ XCreateOC.man \ XCreatePixmap.man \ XCreateRegion.man \ XCreateWindowEvent.man \ XCreateWindow.man \ XCrossingEvent.man \ XDefineCursor.man \ XDestroyWindowEvent.man \ XDestroyWindow.man \ XDrawArc.man \ XDrawImageString.man \ XDrawLine.man \ XDrawPoint.man \ XDrawRectangle.man \ XDrawString.man \ XDrawText.man \ XEmptyRegion.man \ XErrorEvent.man \ XExposeEvent.man \ XExtentsOfFontSet.man \ XFillRectangle.man \ XFilterEvent.man \ XFlush.man \ XFocusChangeEvent.man \ XFontSetExtents.man \ XFontsOfFontSet.man \ XFree.man \ XGetEventData.man \ XGetVisualInfo.man \ XGetWindowAttributes.man \ XGetWindowProperty.man \ XGetXCBConnection.man \ XGrabButton.man \ XGrabKeyboard.man \ XGrabKey.man \ XGrabPointer.man \ XGrabServer.man \ XGraphicsExposeEvent.man \ XGravityEvent.man \ XIconifyWindow.man \ XIfEvent.man \ XInitImage.man \ XInitThreads.man \ XInstallColormap.man \ XInternAtom.man \ XIntersectRegion.man \ XKeymapEvent.man \ XListFonts.man \ XLoadFont.man \ XLookupKeysym.man \ XMapEvent.man \ XMapRequestEvent.man \ XMapWindow.man \ XmbDrawImageString.man \ XmbDrawString.man \ XmbDrawText.man \ XmbLookupString.man \ XmbResetIC.man \ XmbTextEscapement.man \ XmbTextExtents.man \ XmbTextListToTextProperty.man \ XmbTextPerCharExtents.man \ XNextEvent.man \ XNoOp.man \ XOpenDisplay.man \ XOpenIM.man \ XOpenOM.man \ XParseGeometry.man \ XPolygonRegion.man \ XPropertyEvent.man \ XPutBackEvent.man \ XPutImage.man \ XQueryBestSize.man \ XQueryColor.man \ XQueryExtension.man \ XQueryPointer.man \ XQueryTree.man \ XRaiseWindow.man \ XReadBitmapFile.man \ XRecolorCursor.man \ XReparentEvent.man \ XReparentWindow.man \ XResizeRequestEvent.man \ XResourceManagerString.man \ XrmEnumerateDatabase.man \ XrmGetFileDatabase.man \ XrmGetResource.man \ XrmInitialize.man \ XrmMergeDatabases.man \ XrmPutResource.man \ XrmUniqueQuark.man \ XSaveContext.man \ XSelectInput.man \ XSelectionClearEvent.man \ XSelectionEvent.man \ XSelectionRequestEvent.man \ XSendEvent.man \ XSetArcMode.man \ XSetClipOrigin.man \ XSetCloseDownMode.man \ XSetCommand.man \ XSetErrorHandler.man \ XSetEventQueueOwner.man \ XSetFillStyle.man \ XSetFont.man \ XSetFontPath.man \ XSetICFocus.man \ XSetICValues.man \ XSetInputFocus.man \ XSetLineAttributes.man \ XSetPointerMapping.man \ XSetScreenSaver.man \ XSetSelectionOwner.man \ XSetState.man \ XSetTextProperty.man \ XSetTile.man \ XSetTransientForHint.man \ XSetWMClientMachine.man \ XSetWMColormapWindows.man \ XSetWMIconName.man \ XSetWMName.man \ XSetWMProperties.man \ XSetWMProtocols.man \ XStoreBytes.man \ XStoreColors.man \ XStringListToTextProperty.man \ XStringToKeysym.man \ XSupportsLocale.man \ XSynchronize.man \ XTextExtents.man \ XTextWidth.man \ XTranslateCoordinates.man \ XUnmapEvent.man \ XUnmapWindow.man \ XVaCreateNestedList.man \ XVisibilityEvent.man \ XWarpPointer.man filemandir = $(FILE_MAN_DIR) fileman_PRE = Compose.man libman_DATA = $(libman_PRE:man=@LIB_MAN_SUFFIX@) \ $(all_shadows:=.@LIB_MAN_SUFFIX@) fileman_DATA = $(fileman_PRE:man=@FILE_MAN_SUFFIX@) \ $(file_shadows:=.@FILE_MAN_SUFFIX@) EXTRA_DIST = $(libman_PRE) $(fileman_PRE) CLEANFILES = $(libman_DATA) $(fileman_DATA) SUFFIXES = .$(LIB_MAN_SUFFIX) .$(FILE_MAN_SUFFIX) .man MAN_SUBSTS += -e 's|__xlocaledir__|$(X11_LOCALEDATADIR)|g' # String replacements in MAN_SUBSTS now come from xorg-macros.m4 via configure .man.$(LIB_MAN_SUFFIX) .man.$(FILE_MAN_SUFFIX): $(AM_V_GEN)$(SED) $(MAN_SUBSTS) < $< > $@ # Generate man page shadow files (Replaces InstallManPageAliases from Imake) all_shadows = \ $(AllPlanes_shadows) \ $(BlackPixelOfScreen_shadows) \ $(DisplayOfCCC_shadows) \ $(ImageByteOrder_shadows) \ $(IsCursorKey_shadows) \ $(XAllocClassHint_shadows) \ $(XAllocIconSize_shadows) \ $(XAllocStandardColormap_shadows) \ $(XAllocSizeHints_shadows) \ $(XAllocWMHints_shadows) \ $(XAddHost_shadows) \ $(XAllocColor_shadows) \ $(XAnyEvent_shadows) \ $(XButtonEvent_shadows) \ $(XChangeKeyboardControl_shadows) \ $(XChangeKeyboardMapping_shadows) \ $(XChangePointerControl_shadows) \ $(XChangeSaveSet_shadows) \ $(XChangeWindowAttributes_shadows) \ $(XClearArea_shadows) \ $(XConfigureWindow_shadows) \ $(XCopyArea_shadows) \ $(XCreateColormap_shadows) \ $(XCreateFontCursor_shadows) \ $(XCreateFontSet_shadows) \ $(XCreateGC_shadows) \ $(XCreateIC_shadows) \ $(XInitImage_shadows) \ $(XCreateOC_shadows) \ $(XCreatePixmap_shadows) \ $(XCreateRegion_shadows) \ $(XCreateWindow_shadows) \ $(XDefineCursor_shadows) \ $(XDestroyWindow_shadows) \ $(XDrawArc_shadows) \ $(XDrawImageString_shadows) \ $(XDrawLine_shadows) \ $(XDrawPoint_shadows) \ $(XDrawRectangle_shadows) \ $(XDrawString_shadows) \ $(XDrawText_shadows) \ $(XEmptyRegion_shadows) \ $(XFillRectangle_shadows) \ $(XFlush_shadows) \ $(XFontsOfFontSet_shadows) \ $(XGraphicsExposeEvent_shadows) \ $(XrmGetFileDatabase_shadows) \ $(XrmGetResource_shadows) \ $(XGetEventData_shadows) \ $(XGetVisualInfo_shadows) \ $(XGetWindowAttributes_shadows) \ $(XGetWindowProperty_shadows) \ $(XGrabButton_shadows) \ $(XGrabKey_shadows) \ $(XGrabKeyboard_shadows) \ $(XGrabPointer_shadows) \ $(XGrabServer_shadows) \ $(XIconifyWindow_shadows) \ $(XIfEvent_shadows) \ $(XrmInitialize_shadows) \ $(XInstallColormap_shadows) \ $(XAddConnectionWatch_shadows) \ $(XIntersectRegion_shadows) \ $(XInternAtom_shadows) \ $(XListFonts_shadows) \ $(XLoadFont_shadows) \ $(XLookupKeysym_shadows) \ $(XrmMergeDatabases_shadows) \ $(XMapEvent_shadows) \ $(XMapWindow_shadows) \ $(XNextEvent_shadows) \ $(XOpenDisplay_shadows) \ $(XOpenIM_shadows) \ $(XOpenOM_shadows) \ $(XParseGeometry_shadows) \ $(XPolygonRegion_shadows) \ $(XPutImage_shadows) \ $(XrmPutResource_shadows) \ $(XQueryBestSize_shadows) \ $(XQueryColor_shadows) \ $(XQueryExtension_shadows) \ $(XResourceManagerString_shadows) \ $(XRaiseWindow_shadows) \ $(XReadBitmapFile_shadows) \ $(XRecolorCursor_shadows) \ $(XSaveContext_shadows) \ $(XSetICFocus_shadows) \ $(XSetICValues_shadows) \ $(XStringListToTextProperty_shadows) \ $(XSetArcMode_shadows) \ $(XSetClipOrigin_shadows) \ $(XSetCloseDownMode_shadows) \ $(XSetCommand_shadows) \ $(XSetErrorHandler_shadows) \ $(XSendEvent_shadows) \ $(XSetFillStyle_shadows) \ $(XSetFontPath_shadows) \ $(XSetInputFocus_shadows) \ $(XSetLineAttributes_shadows) \ $(XSetPointerMapping_shadows) \ $(XSetScreenSaver_shadows) \ $(XSetSelectionOwner_shadows) \ $(XSetState_shadows) \ $(XSetTransientForHint_shadows) \ $(XSetTextProperty_shadows) \ $(XSetTile_shadows) \ $(XSetWMClientMachine_shadows) \ $(XSetWMColormapWindows_shadows) \ $(XSetWMIconName_shadows) \ $(XSetWMName_shadows) \ $(XSetWMProperties_shadows) \ $(XSetWMProtocols_shadows) \ $(XStoreBytes_shadows) \ $(XStoreColors_shadows) \ $(XStringToKeysym_shadows) \ $(XSupportsLocale_shadows) \ $(XSynchronize_shadows) \ $(XmbTextListToTextProperty_shadows) \ $(XTextExtents_shadows) \ $(XTextWidth_shadows) \ $(XInitThreads_shadows) \ $(XrmUniqueQuark_shadows) \ $(XUnmapWindow_shadows) \ $(XcmsCCCOfColormap_shadows) \ $(XcmsAllocColor_shadows) \ $(XcmsColor_shadows) \ $(XcmsCreateCCC_shadows) \ $(XcmsCIELabQueryMaxC_shadows) \ $(XcmsCIELuvQueryMaxC_shadows) \ $(XcmsQueryBlack_shadows) \ $(XcmsQueryColor_shadows) \ $(XcmsStoreColor_shadows) \ $(XcmsSetWhitePoint_shadows) \ $(XcmsTekHVCQueryMaxC_shadows) \ $(XmbDrawImageString_shadows) \ $(XmbDrawString_shadows) \ $(XmbDrawText_shadows) \ $(XmbLookupString_shadows) \ $(XmbResetIC_shadows) \ $(XmbTextEscapement_shadows) \ $(XmbTextExtents_shadows) \ $(XmbTextPerCharExtents_shadows) AllPlanes_shadows = \ BlackPixel \ WhitePixel \ ConnectionNumber \ DefaultColormap \ DefaultDepth \ XListDepths \ DefaultGC \ DefaultRootWindow \ DefaultScreenOfDisplay \ DefaultScreen \ DefaultVisual \ DisplayCells \ DisplayPlanes \ DisplayString \ XMaxRequestSize \ XExtendedMaxRequestSize \ LastKnownRequestProcessed \ NextRequest \ ProtocolVersion \ ProtocolRevision \ QLength \ RootWindow \ ScreenCount \ ScreenOfDisplay \ ServerVendor \ VendorRelease BlackPixelOfScreen_shadows = \ WhitePixelOfScreen \ CellsOfScreen \ DefaultColormapOfScreen \ DefaultDepthOfScreen \ DefaultGCOfScreen \ DefaultVisualOfScreen \ DoesBackingStore \ DoesSaveUnders \ DisplayOfScreen \ XScreenNumberOfScreen \ EventMaskOfScreen \ HeightOfScreen \ HeightMMOfScreen \ MaxCmapsOfScreen \ MinCmapsOfScreen \ PlanesOfScreen \ RootWindowOfScreen \ WidthOfScreen \ WidthMMOfScreen DisplayOfCCC_shadows = \ VisualOfCCC \ ScreenNumberOfCCC \ ScreenWhitePointOfCCC \ ClientWhitePointOfCCC ImageByteOrder_shadows = \ BitmapBitOrder \ BitmapPad \ BitmapUnit \ DisplayHeight \ DisplayHeightMM \ DisplayWidth \ DisplayWidthMM \ XListPixmapFormats \ XPixmapFormatValues IsCursorKey_shadows = \ IsFunctionKey \ IsKeypadKey \ IsMiscFunctionKey \ IsModifierKey \ IsPFKey \ IsPrivateKeypadKey XAllocClassHint_shadows = \ XSetClassHint \ XGetClassHint \ XClassHint XAllocIconSize_shadows = \ XSetIconSizes \ XGetIconSizes \ XIconSize XAllocStandardColormap_shadows = \ XSetRGBColormaps \ XGetRGBColormaps \ XStandardColormap XAllocSizeHints_shadows = \ XSetWMNormalHints \ XGetWMNormalHints \ XSetWMSizeHints \ XGetWMSizeHints \ XSizeHints XAllocWMHints_shadows = \ XSetWMHints \ XGetWMHints \ XWMHints XAddHost_shadows = \ XAddHosts \ XListHosts \ XRemoveHost \ XRemoveHosts \ XSetAccessControl \ XEnableAccessControl \ XDisableAccessControl \ XHostAddress XAllocColor_shadows = \ XAllocNamedColor \ XAllocColorCells \ XAllocColorPlanes \ XFreeColors XAnyEvent_shadows = \ XEvent XButtonEvent_shadows = \ XKeyEvent \ XMotionEvent XChangeKeyboardControl_shadows = \ XGetKeyboardControl \ XAutoRepeatOn \ XAutoRepeatOff \ XBell \ XQueryKeymap \ XKeyboardControl XChangeKeyboardMapping_shadows = \ XGetKeyboardMapping \ XDisplayKeycodes \ XSetModifierMapping \ XGetModifierMapping \ XNewModifiermap \ XInsertModifiermapEntry \ XDeleteModifiermapEntry \ XFreeModifiermap \ XModifierKeymap XChangePointerControl_shadows = \ XGetPointerControl XChangeSaveSet_shadows = \ XAddToSaveSet \ XRemoveFromSaveSet XChangeWindowAttributes_shadows = \ XSetWindowBackground \ XSetWindowBackgroundPixmap \ XSetWindowBorder \ XSetWindowBorderPixmap \ XSetWindowColormap XClearArea_shadows = \ XClearWindow XConfigureWindow_shadows = \ XMoveWindow \ XResizeWindow \ XMoveResizeWindow \ XSetWindowBorderWidth \ XWindowChanges XCopyArea_shadows = \ XCopyPlane XCreateColormap_shadows = \ XCopyColormapAndFree \ XFreeColormap \ XColor XCreateFontCursor_shadows = \ XCreatePixmapCursor \ XCreateGlyphCursor XCreateFontSet_shadows = \ XFreeFontSet XCreateGC_shadows = \ XCopyGC \ XChangeGC \ XGetGCValues \ XFreeGC \ XGContextFromGC \ XGCValues XCreateIC_shadows = \ XDestroyIC \ XIMOfIC XInitImage_shadows = \ XCreateImage \ XGetPixel \ XPutPixel \ XSubImage \ XAddPixel \ XDestroyImage XCreateOC_shadows = \ XDestroyOC \ XSetOCValues \ XGetOCValues \ XOMOfOC XCreatePixmap_shadows = \ XFreePixmap XCreateRegion_shadows = \ XSetRegion \ XDestroyRegion XCreateWindow_shadows = \ XCreateSimpleWindow \ XSetWindowAttributes XDefineCursor_shadows = \ XUndefineCursor XDestroyWindow_shadows = \ XDestroySubwindows XDrawArc_shadows = \ XDrawArcs \ XArc XDrawImageString_shadows = \ XDrawImageString16 XDrawLine_shadows = \ XDrawLines \ XDrawSegments \ XSegment XDrawPoint_shadows = \ XDrawPoints \ XPoint XDrawRectangle_shadows = \ XDrawRectangles \ XRectangle XDrawString_shadows = \ XDrawString16 XDrawText_shadows = \ XDrawText16 \ XTextItem \ XTextItem16 XEmptyRegion_shadows = \ XEqualRegion \ XPointInRegion \ XRectInRegion XFillRectangle_shadows = \ XFillRectangles \ XFillPolygon \ XFillArc \ XFillArcs XFlush_shadows = \ XSync \ XEventsQueued \ XPending XFontsOfFontSet_shadows = \ XBaseFontNameListOfFontSet \ XLocaleOfFontSet \ XContextDependentDrawing \ XContextualDrawing \ XDirectionalDependentDrawing XGraphicsExposeEvent_shadows = \ XNoExposeEvent XrmGetFileDatabase_shadows = \ XrmPutFileDatabase \ XrmGetStringDatabase \ XrmLocaleOfDatabase \ XrmGetDatabase \ XrmSetDatabase \ XrmDestroyDatabase XrmGetResource_shadows = \ XrmQGetResource \ XrmQGetSearchList \ XrmQGetSearchResource XGetEventData_shadows = \ XFreeEventData \ XGenericEventCookie XGetVisualInfo_shadows = \ XMatchVisualInfo \ XVisualIDFromVisual \ XVisualInfo XGetWindowAttributes_shadows = \ XGetGeometry \ XWindowAttributes XGetWindowProperty_shadows = \ XListProperties \ XChangeProperty \ XRotateWindowProperties \ XDeleteProperty XGrabButton_shadows = \ XUngrabButton XGrabKey_shadows = \ XUngrabKey XGrabKeyboard_shadows = \ XUngrabKeyboard XGrabPointer_shadows = \ XUngrabPointer \ XChangeActivePointerGrab XGrabServer_shadows = \ XUngrabServer XIconifyWindow_shadows = \ XWithdrawWindow \ XReconfigureWMWindow XIfEvent_shadows = \ XCheckIfEvent \ XPeekIfEvent XrmInitialize_shadows = \ XrmParseCommand \ XrmValue \ XrmOptionKind \ XrmOptionDescRec XInstallColormap_shadows = \ XUninstallColormap \ XListInstalledColormaps XAddConnectionWatch_shadows = \ XRemoveConnectionWatch \ XProcessInternalConnection \ XInternalConnectionNumbers XIntersectRegion_shadows = \ XUnionRegion \ XUnionRectWithRegion \ XSubtractRegion \ XXorRegion \ XOffsetRegion \ XShrinkRegion XInternAtom_shadows = \ XInternAtoms \ XGetAtomName \ XGetAtomNames XListFonts_shadows = \ XFreeFontNames \ XListFontsWithInfo \ XFreeFontInfo XLoadFont_shadows = \ XQueryFont \ XLoadQueryFont \ XFreeFont \ XGetFontProperty \ XUnloadFont \ XCharStruct \ XFontProp \ XChar2b \ XFontStruct XLookupKeysym_shadows = \ XRefreshKeyboardMapping \ XLookupString \ XRebindKeysym XrmMergeDatabases_shadows = \ XrmCombineDatabase \ XrmCombineFileDatabase XMapEvent_shadows = \ XMappingEvent XMapWindow_shadows = \ XMapRaised \ XMapSubwindows XNextEvent_shadows = \ XPeekEvent \ XWindowEvent \ XCheckWindowEvent \ XMaskEvent \ XCheckMaskEvent \ XCheckTypedEvent \ XCheckTypedWindowEvent XOpenDisplay_shadows = \ XCloseDisplay XOpenIM_shadows = \ XCloseIM \ XSetIMValues \ XGetIMValues \ XDisplayOfIM \ XLocaleOfIM \ XRegisterIMInstantiateCallback \ XUnregisterIMInstantiateCallback XOpenOM_shadows = \ XCloseOM \ XSetOMValues \ XGetOMValues \ XDisplayOfOM \ XLocaleOfOM XParseGeometry_shadows = \ XWMGeometry XPolygonRegion_shadows = \ XClipBox XPutImage_shadows = \ XGetImage \ XGetSubImage XrmPutResource_shadows = \ XrmQPutResource \ XrmPutStringResource \ XrmQPutStringResource \ XrmPutLineResource XQueryBestSize_shadows = \ XQueryBestTile \ XQueryBestStipple XQueryColor_shadows = \ XQueryColors \ XLookupColor \ XParseColor XQueryExtension_shadows = \ XListExtensions \ XFreeExtensionList XResourceManagerString_shadows = \ XScreenResourceString XRaiseWindow_shadows = \ XLowerWindow \ XCirculateSubwindows \ XCirculateSubwindowsUp \ XCirculateSubwindowsDown \ XRestackWindows XReadBitmapFile_shadows = \ XReadBitmapFileData \ XWriteBitmapFile \ XCreatePixmapFromBitmapData \ XCreateBitmapFromData XRecolorCursor_shadows = \ XFreeCursor \ XQueryBestCursor XSaveContext_shadows = \ XFindContext \ XDeleteContext \ XUniqueContext XSetICFocus_shadows = \ XUnsetICFocus XSetICValues_shadows = \ XGetICValues XStringListToTextProperty_shadows = \ XTextPropertyToStringList \ XFreeStringList \ XTextProperty XSetArcMode_shadows = \ XSetSubwindowMode \ XSetGraphicsExposure XSetClipOrigin_shadows = \ XSetClipMask \ XSetClipRectangles XSetCloseDownMode_shadows = \ XKillClient XSetCommand_shadows = \ XGetCommand XSetErrorHandler_shadows = \ XGetErrorText \ XDisplayName \ XSetIOErrorHandler \ XGetErrorDatabaseText XSendEvent_shadows = \ XDisplayMotionBufferSize \ XGetMotionEvents \ XTimeCoord XSetFillStyle_shadows = \ XSetFillRule XSetFontPath_shadows = \ XGetFontPath \ XFreeFontPath XSetInputFocus_shadows = \ XGetInputFocus XSetLineAttributes_shadows = \ XSetDashes XSetPointerMapping_shadows = \ XGetPointerMapping XSetScreenSaver_shadows = \ XForceScreenSaver \ XActivateScreenSaver \ XResetScreenSaver \ XGetScreenSaver XSetSelectionOwner_shadows = \ XGetSelectionOwner \ XConvertSelection XSetState_shadows = \ XSetFunction \ XSetPlaneMask \ XSetForeground \ XSetBackground XSetTransientForHint_shadows = \ XGetTransientForHint XSetTextProperty_shadows = \ XGetTextProperty XSetTile_shadows = \ XSetStipple \ XSetTSOrigin XSetWMClientMachine_shadows = \ XGetWMClientMachine XSetWMColormapWindows_shadows = \ XGetWMColormapWindows XSetWMIconName_shadows = \ XGetWMIconName \ XSetIconName \ XGetIconName XSetWMName_shadows = \ XGetWMName \ XStoreName \ XFetchName XSetWMProperties_shadows = \ XmbSetWMProperties \ Xutf8SetWMProperties XSetWMProtocols_shadows = \ XGetWMProtocols XStoreBytes_shadows = \ XStoreBuffer \ XFetchBytes \ XFetchBuffer \ XRotateBuffers XStoreColors_shadows = \ XStoreColor \ XStoreNamedColor XStringToKeysym_shadows = \ XKeysymToString \ XKeycodeToKeysym \ XKeysymToKeycode \ XConvertCase XSupportsLocale_shadows = \ XSetLocaleModifiers XSynchronize_shadows = \ XSetAfterFunction XmbTextListToTextProperty_shadows = \ XwcTextListToTextProperty \ Xutf8TextListToTextProperty \ XmbTextPropertyToTextList \ XwcTextPropertyToTextList \ Xutf8TextPropertyToTextList \ XwcFreeStringList \ XDefaultString XTextExtents_shadows = \ XTextExtents16 \ XQueryTextExtents \ XQueryTextExtents16 XTextWidth_shadows = \ XTextWidth16 XInitThreads_shadows = \ XLockDisplay \ XUnlockDisplay XrmUniqueQuark_shadows = \ XrmStringToQuark \ XrmPermStringToQuark \ XrmQuarkToString \ XrmStringToQuarkList \ XrmStringToBindingQuarkList XUnmapWindow_shadows = \ XUnmapSubwindows XcmsCCCOfColormap_shadows = \ XcmsSetCCCOfColormap XcmsAllocColor_shadows = \ XcmsAllocNamedColor XcmsColor_shadows = \ XcmsRGB \ XcmsRGBi \ XcmsCIEXYZ \ XcmsCIEuvY \ XcmsCIExyY \ XcmsCIELab \ XcmsCIELuv \ XcmsTekHVC \ XcmsPad XcmsCreateCCC_shadows = \ XcmsFreeCCC XcmsCIELabQueryMaxC_shadows = \ XcmsCIELabQueryMaxL \ XcmsCIELabQueryMaxLC \ XcmsCIELabQueryMinL XcmsCIELuvQueryMaxC_shadows = \ XcmsCIELuvQueryMaxL \ XcmsCIELuvQueryMaxLC \ XcmsCIELuvQueryMinL XcmsQueryBlack_shadows = \ XcmsQueryBlue \ XcmsQueryGreen \ XcmsQueryRed \ XcmsQueryWhite XcmsQueryColor_shadows = \ XcmsQueryColors \ XcmsLookupColor XcmsStoreColor_shadows = \ XcmsStoreColors XcmsSetWhitePoint_shadows = \ XcmsSetWhiteAdjustProc XcmsTekHVCQueryMaxC_shadows = \ XcmsTekHVCQueryMaxV \ XcmsTekHVCQueryMaxVC \ XcmsTekHVCQueryMaxVSamples \ XcmsTekHVCQueryMinV XmbDrawImageString_shadows = \ XwcDrawImageString \ Xutf8DrawImageString XmbDrawString_shadows = \ XwcDrawString \ Xutf8DrawString XmbDrawText_shadows = \ XwcDrawText \ Xutf8DrawText XmbLookupString_shadows = \ XwcLookupString \ Xutf8LookupString XmbResetIC_shadows = \ XwcResetIC \ Xutf8ResetIC XmbTextEscapement_shadows = \ XwcTextEscapement \ Xutf8TextEscapement XmbTextExtents_shadows = \ XwcTextExtents \ Xutf8TextExtents XmbTextPerCharExtents_shadows = \ XwcTextPerCharExtents \ Xutf8TextPerCharExtents file_shadows = \ $(Compose_shadows) Compose_shadows = \ XCompose \ XFontStruct XLookupKeysym_shadows = \ XRefreshKeyboardMapping \ XLookupString \ XRebindKeysym XrmMergeDatabases_shadows = \ XrmCombineDatabase \ XrmCombineFileDatabase XMapEvent_shadows = libX11-1.6.3/man/XGetFontProperty.man000064401431060000012000000000631247741723500175700ustar00alancstaff00002660200006.so man__libmansuffix__/XLoadFont.__libmansuffix__ libX11-1.6.3/man/XAllocStandardColormap.man000064401431060000012000000237531247741723500207000ustar00alancstaff00002660200006'\" t .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 '\" t .TH XAllocStandardColormap __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XAllocStandardColormap, XSetRGBColormaps, XGetRGBColormaps, XStandardColormap \- allocate, set, or read a standard colormap structure .SH SYNTAX .HP XStandardColormap *XAllocStandardColormap\^(void\^); .HP void XSetRGBColormaps\^(\^Display *\fIdisplay\fP, Window \fIw\fP, XStandardColormap *\fIstd_colormap\fP, int \fIcount\fP, Atom \fIproperty\fP\^); .HP Status XGetRGBColormaps\^(\^Display *\fIdisplay\fP, Window \fIw\fP, XStandardColormap **\fIstd_colormap_return\fP, int *\fIcount_return\fP, Atom \fIproperty\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .ds Cn colormaps .IP \fIcount\fP 1i Specifies the number of \*(Cn. .ds Cn colormaps .IP \fIcount_return\fP 1i Returns the number of \*(Cn. .IP \fIproperty\fP 1i Specifies the property name. .IP \fIstd_colormap\fP 1i Specifies the .ZN XStandardColormap structure to be used. .IP \fIstd_colormap_return\fP 1i Returns the .ZN XStandardColormap structure. .SH DESCRIPTION The .ZN XAllocStandardColormap function allocates and returns a pointer to a .ZN XStandardColormap structure. Note that all fields in the .ZN XStandardColormap structure are initially set to zero. If insufficient memory is available, .ZN XAllocStandardColormap returns NULL. To free the memory allocated to this structure, use .ZN XFree . .LP The .ZN XSetRGBColormaps function replaces the RGB colormap definition in the specified property on the named window. If the property does not already exist, .ZN XSetRGBColormaps sets the RGB colormap definition in the specified property on the named window. The property is stored with a type of RGB_COLOR_MAP and a format of 32. Note that it is the caller's responsibility to honor the ICCCM restriction that only RGB_DEFAULT_MAP contain more than one definition. .LP The .ZN XSetRGBColormaps function usually is only used by window or session managers. To create a standard colormap, follow this procedure: .IP 1. 5 Open a new connection to the same server. .IP 2. 5 Grab the server. .IP 3. 5 See if the property is on the property list of the root window for the screen. .IP 4. 5 If the desired property is not present: .RS .IP \(bu 5 Create a colormap (unless you are using the default colormap of the screen). .IP \(bu 5 Determine the color characteristics of the visual. .IP \(bu 5 Allocate cells in the colormap (or create it with .ZN AllocAll ). .IP \(bu 5 Call .ZN XStoreColors to store appropriate color values in the colormap. .IP \(bu 5 Fill in the descriptive members in the .ZN XStandardColormap structure. .IP \(bu 5 Attach the property to the root window. .IP \(bu 5 Use .ZN XSetCloseDownMode to make the resource permanent. .RE .IP 5. 5 Ungrab the server. .LP .ZN XSetRGBColormaps can generate .ZN BadAlloc , .ZN BadAtom , and .ZN BadWindow errors. .LP The .ZN XGetRGBColormaps function returns the RGB colormap definitions stored in the specified property on the named window. If the property exists, is of type RGB_COLOR_MAP, is of format 32, and is long enough to contain a colormap definition, .ZN XGetRGBColormaps allocates and fills in space for the returned colormaps and returns a nonzero status. If the visualid is not present, .ZN XGetRGBColormaps assumes the default visual for the screen on which the window is located; if the killid is not present, .ZN None is assumed, which indicates that the resources cannot be released. Otherwise, none of the fields are set, and .ZN XGetRGBColormaps returns a zero status. Note that it is the caller's responsibility to honor the ICCCM restriction that only RGB_DEFAULT_MAP contain more than one definition. .LP .ZN XGetRGBColormaps can generate .ZN BadAtom and .ZN BadWindow errors. .SH STRUCTURES The .ZN XStandardColormap structure contains: .LP /\&* Hints */ .TS lw(.5i) lw(2i) lw(1i). T{ \&#define T} T{ .ZN ReleaseByFreeingColormap T} T{ ( (XID) 1L) T} .TE /\&* Values */ .IN "XStandardColormap" "" "@DEF@" .Ds 0 typedef struct { Colormap colormap; unsigned long red_max; unsigned long red_mult; unsigned long green_max; unsigned long green_mult; unsigned long blue_max; unsigned long blue_mult; unsigned long base_pixel; VisualID visualid; XID killid; } XStandardColormap; .De .LP The colormap member is the colormap created by the .ZN XCreateColormap function. The red_max, green_max, and blue_max members give the maximum red, green, and blue values, respectively. Each color coefficient ranges from zero to its max, inclusive. For example, a common colormap allocation is 3/3/2 (3 planes for red, 3 planes for green, and 2 planes for blue). This colormap would have red_max = 7, green_max = 7, and blue_max = 3. An alternate allocation that uses only 216 colors is red_max = 5, green_max = 5, and blue_max = 5. .LP The red_mult, green_mult, and blue_mult members give the scale factors used to compose a full pixel value. (See the discussion of the base_pixel members for further information.) For a 3/3/2 allocation, red_mult might be 32, green_mult might be 4, and blue_mult might be 1. For a 6-colors-each allocation, red_mult might be 36, green_mult might be 6, and blue_mult might be 1. .LP The base_pixel member gives the base pixel value used to compose a full pixel value. Usually, the base_pixel is obtained from a call to the .ZN XAllocColorPlanes function. Given integer red, green, and blue coefficients in their appropriate ranges, one then can compute a corresponding pixel value by using the following expression: .LP .Ds (r * red_mult + g * green_mult + b * blue_mult + base_pixel) & 0xFFFFFFFF .De .LP For .ZN GrayScale colormaps, only the colormap, red_max, red_mult, and base_pixel members are defined. The other members are ignored. To compute a .ZN GrayScale pixel value, use the following expression: .LP .Ds (gray * red_mult + base_pixel) & 0xFFFFFFFF .De .LP Negative multipliers can be represented by converting the 2's complement representation of the multiplier into an unsigned long and storing the result in the appropriate _mult field. The step of masking by 0xFFFFFFFF effectively converts the resulting positive multiplier into a negative one. The masking step will take place automatically on many machine architectures, depending on the size of the integer type used to do the computation, .LP The visualid member gives the ID number of the visual from which the colormap was created. The killid member gives a resource ID that indicates whether the cells held by this standard colormap are to be released by freeing the colormap ID or by calling the .ZN XKillClient function on the indicated resource. (Note that this method is necessary for allocating out of an existing colormap.) .LP The properties containing the .ZN XStandardColormap information have the type RGB_COLOR_MAP. .SH DIAGNOSTICS .TP 1i .ZN BadAlloc The server failed to allocate the requested resource or server memory. .TP 1i .ZN BadAtom A value for an Atom argument does not name a defined Atom. .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XAllocColor(__libmansuffix__), XCreateColormap(__libmansuffix__), XFree(__libmansuffix__), XSetCloseDownMode(__libmansuffix__) .br \fI\*(xL\fP d a format of 32. NotlibX11-1.6.3/man/XrmStringToQuarkList.man000064401431060000012000000000701247741723500204230ustar00alancstaff00002660200006.so man__libmansuffix__/XrmUniqueQuark.__libmansuffix__ libX11-1.6.3/man/XChangeWindowAttributes.man000064401431060000012000000241071247741723500211060ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XChangeWindowAttributes __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XChangeWindowAttributes, XSetWindowBackground, XSetWindowBackgroundPixmap, XSetWindowBorder, XSetWindowBorderPixmap, XSetWindowColormap \- change window attributes .SH SYNTAX .HP int XChangeWindowAttributes\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, unsigned long \fIvaluemask\fP\^, XSetWindowAttributes *\fIattributes\fP\^); .HP int XSetWindowBackground\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, unsigned long \fIbackground_pixel\fP\^); .HP int XSetWindowBackgroundPixmap\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, Pixmap \fIbackground_pixmap\fP\^); .HP int XSetWindowBorder\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, unsigned long \fIborder_pixel\fP\^); .HP int XSetWindowBorderPixmap\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, Pixmap \fIborder_pixmap\fP\^); .HP int XSetWindowColormap\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, Colormap \fIcolormap\fP\^); .SH ARGUMENTS .IP \fIattributes\fP 1i Specifies the structure from which the values (as specified by the value mask) are to be taken. The value mask should have the appropriate bits set to indicate which attributes have been set in the structure. .IP \fIbackground_pixel\fP 1i Specifies the pixel that is to be used for the background. .IP \fIbackground_pixmap\fP 1i Specifies the background pixmap, .ZN ParentRelative , or .ZN None . .IP \fIborder_pixel\fP 1i Specifies the entry in the colormap. .IP \fIborder_pixmap\fP 1i Specifies the border pixmap or .ZN CopyFromParent . .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIvaluemask\fP 1i Specifies which window attributes are defined in the attributes argument. This mask is the bitwise inclusive OR of the valid attribute mask bits. If valuemask is zero, the attributes are ignored and are not referenced. .IP \fIw\fP 1i Specifies the window. .IP \fIcolormap\fP 1i Specifies the colormap. .SH DESCRIPTION Depending on the valuemask, the .ZN XChangeWindowAttributes function uses the window attributes in the .ZN XSetWindowAttributes structure to change the specified window attributes. Changing the background does not cause the window contents to be changed. To repaint the window and its background, use .ZN XClearWindow . Setting the border or changing the background such that the border tile origin changes causes the border to be repainted. Changing the background of a root window to .ZN None or .ZN ParentRelative restores the default background pixmap. Changing the border of a root window to .ZN CopyFromParent restores the default border pixmap. Changing the win-gravity does not affect the current position of the window. Changing the backing-store of an obscured window to .ZN WhenMapped or .ZN Always , or changing the backing-planes, backing-pixel, or save-under of a mapped window may have no immediate effect. Changing the colormap of a window (that is, defining a new map, not changing the contents of the existing map) generates a .ZN ColormapNotify event. Changing the colormap of a visible window may have no immediate effect on the screen because the map may not be installed (see .ZN XInstallColormap ). Changing the cursor of a root window to .ZN None restores the default cursor. Whenever possible, you are encouraged to share colormaps. .LP Multiple clients can select input on the same window. Their event masks are maintained separately. When an event is generated, it is reported to all interested clients. However, only one client at a time can select for .ZN SubstructureRedirectMask , .ZN ResizeRedirectMask , and .ZN ButtonPressMask . If a client attempts to select any of these event masks and some other client has already selected one, a .ZN BadAccess error results. There is only one do-not-propagate-mask for a window, not one per client. .LP .ZN XChangeWindowAttributes can generate .ZN BadAccess , .ZN BadColor , .ZN BadCursor , .ZN BadMatch , .ZN BadPixmap , .ZN BadValue , and .ZN BadWindow errors. .LP The .ZN XSetWindowBackground function sets the background of the window to the specified pixel value. Changing the background does not cause the window contents to be changed. .ZN XSetWindowBackground uses a pixmap of undefined size filled with the pixel value you passed. If you try to change the background of an .ZN InputOnly window, a .ZN BadMatch error results. .LP .ZN XSetWindowBackground can generate .ZN BadMatch and .ZN BadWindow errors. .LP The .ZN XSetWindowBackgroundPixmap function sets the background pixmap of the window to the specified pixmap. The background pixmap can immediately be freed if no further explicit references to it are to be made. If .ZN ParentRelative is specified, the background pixmap of the window's parent is used, or on the root window, the default background is restored. If you try to change the background of an .ZN InputOnly window, a .ZN BadMatch error results. If the background is set to .ZN None , the window has no defined background. .LP .ZN XSetWindowBackgroundPixmap can generate .ZN BadMatch , .ZN BadPixmap , and .ZN BadWindow errors. .LP The .ZN XSetWindowBorder function sets the border of the window to the pixel value you specify. If you attempt to perform this on an .ZN InputOnly window, a .ZN BadMatch error results. .LP .ZN XSetWindowBorder can generate .ZN BadMatch and .ZN BadWindow errors. .LP The .ZN XSetWindowBorderPixmap function sets the border pixmap of the window to the pixmap you specify. The border pixmap can be freed immediately if no further explicit references to it are to be made. If you specify .ZN CopyFromParent , a copy of the parent window's border pixmap is used. If you attempt to perform this on an .ZN InputOnly window, a .ZN BadMatch error results. .LP .ZN XSetWindowBorderPixmap can generate .ZN BadMatch , .ZN BadPixmap , and .ZN BadWindow errors. .LP The .ZN XSetWindowColormap function sets the specified colormap of the specified window. The colormap must have the same visual type as the window, or a .ZN BadMatch error results. .LP .ZN XSetWindowColormap can generate .ZN BadColor , .ZN BadMatch , and .ZN BadWindow errors. .SH DIAGNOSTICS .TP 1i .ZN BadAccess A client attempted to free a color map entry that it did not already allocate. .TP 1i .ZN BadAccess A client attempted to store into a read-only color map entry. .TP 1i .ZN BadColor A value for a Colormap argument does not name a defined Colormap. .TP 1i .ZN BadCursor A value for a Cursor argument does not name a defined Cursor. .TP 1i .ZN BadMatch Some argument or pair of arguments has the correct type and range but fails to match in some other way required by the request. .TP 1i .ZN BadMatch An .ZN InputOnly window locks this attribute. .TP 1i .ZN BadPixmap A value for a Pixmap argument does not name a defined Pixmap. .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XConfigureWindow(__libmansuffix__), XCreateWindow(__libmansuffix__), XDestroyWindow(__libmansuffix__), XInstallColormap(__libmansuffix__), XMapWindow(__libmansuffix__), XRaiseWindow(__libmansuffix__), XUnmapWindow(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/Xutf8TextExtents.man000064401431060000012000000000701247741723500175610ustar00alancstaff00002660200006.so man__libmansuffix__/XmbTextExtents.__libmansuffix__ libX11-1.6.3/man/XrmStringToBindingQuarkList.man000064401431060000012000000000701247741723500217160ustar00alancstaff00002660200006.so man__libmansuffix__/XrmUniqueQuark.__libmansuffix__ libX11-1.6.3/man/XRotateWindowProperties.man000064401431060000012000000000741247741723500211620ustar00alancstaff00002660200006.so man__libmansuffix__/XGetWindowProperty.__libmansuffix__ libX11-1.6.3/man/XrmGetFileDatabase.man000064401431060000012000000233211247741723500177620ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .de EX .sp .nf .ft CW .. .de EE .ft R .fi .sp .. .TH XrmGetFileDatabase __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XrmGetFileDatabase, XrmPutFileDatabase, XrmGetStringDatabase, XrmLocaleOfDatabase, XrmGetDatabase, XrmSetDatabase, XrmDestroyDatabase \- retrieve and store resource databases .SH SYNTAX .HP #include .HP XrmDatabase XrmGetFileDatabase\^(\^char *\fIfilename\fP\^); .HP void XrmPutFileDatabase\^(\^XrmDatabase \fIdatabase\fP\^, char *\fIstored_db\fP\^); .HP XrmDatabase XrmGetStringDatabase\^(\^char *\fIdata\fP\^, .HP char *XrmLocaleOfDatabase\^(\^XrmDatabase \fIdatabase\fP\^); .HP XrmDatabase XrmGetDatabase\^(\^Display *\fIdisplay\fP\^); .HP void XrmSetDatabase\^(\^Display *\fIdisplay\fP\^, XrmDatabase \fIdatabase\fP\^); .HP void XrmDestroyDatabase\^(\^XrmDatabase \fIdatabase\fP\^); .SH ARGUMENTS .IP \fIfilename\fP 1i Specifies the resource database file name. .IP \fIdatabase\fP 1i Specifies the database that is to be used. .IP \fIstored_db\fP 1i Specifies the file name for the stored database. .IP \fIdata\fP 1i Specifies the database contents using a string. .IP \fIdatabase\fP 1i Specifies the resource database. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .SH DESCRIPTION The .ZN XrmGetFileDatabase function opens the specified file, creates a new resource database, and loads it with the specifications read in from the specified file. The specified file should contain a sequence of entries in valid ResourceLine format (see section 15.1); the database that results from reading a file with incorrect syntax is implementation-dependent. The file is parsed in the current locale, and the database is created in the current locale. If it cannot open the specified file, .ZN XrmGetFileDatabase returns NULL. .LP The .ZN XrmPutFileDatabase function stores a copy of the specified database in the specified file. Text is written to the file as a sequence of entries in valid ResourceLine format (see section 15.1). The file is written in the locale of the database. Entries containing resource names that are not in the Host Portable Character Encoding or containing values that are not in the encoding of the database locale, are written in an implementation-dependent manner. The order in which entries are written is implementation-dependent. Entries with representation types other than ``String'' are ignored. .LP The .ZN XrmGetStringDatabase function creates a new database and stores the resources specified in the specified null-terminated string. .ZN XrmGetStringDatabase is similar to .ZN XrmGetFileDatabase except that it reads the information out of a string instead of out of a file. The string should contain a sequence of entries in valid ResourceLine format (see section 15.1) terminated by a null character; the database that results from using a string with incorrect syntax is implementation-dependent. The string is parsed in the current locale, and the database is created in the current locale. .LP If database is NULL, .ZN XrmDestroyDatabase returns immediately. .LP The .ZN XrmLocaleOfDatabase function returns the name of the locale bound to the specified database, as a null-terminated string. The returned locale name string is owned by Xlib and should not be modified or freed by the client. Xlib is not permitted to free the string until the database is destroyed. Until the string is freed, it will not be modified by Xlib. .LP The .ZN XrmGetDatabase function returns the database associated with the specified display. It returns NULL if a database has not yet been set. .LP The .ZN XrmSetDatabase function associates the specified resource database (or NULL) with the specified display. The database previously associated with the display (if any) is not destroyed. A client or toolkit may find this function convenient for retaining a database once it is constructed. .SH "FILE SYNTAX" The syntax of a resource file is a sequence of resource lines terminated by newline characters or the end of the file. The syntax of an individual resource line is: .LP .\" Start marker code here .EX ResourceLine = Comment | IncludeFile | ResourceSpec | Comment = "!" {} IncludeFile = "#" WhiteSpace "include" WhiteSpace FileName WhiteSpace FileName = ResourceSpec = WhiteSpace ResourceName WhiteSpace ":" WhiteSpace Value ResourceName = [Binding] {Component Binding} ComponentName Binding = "\&." | "*" WhiteSpace = { | } Component = "?" | ComponentName ComponentName = NameChar {NameChar} NameChar = "a"\-"z" | "A"\-"Z" | "0"\-"9" | "_" | "-" Value = {} .EE .LP Elements separated by vertical bar (|) are alternatives. Curly braces ({\&.\&.\&.}) indicate zero or more repetitions of the enclosed elements. Square brackets ([\&.\&.\&.]) indicate that the enclosed element is optional. Quotes ("\&.\&.\&.") are used around literal characters. .LP IncludeFile lines are interpreted by replacing the line with the contents of the specified file. The word ``include'' must be in lowercase. The file name is interpreted relative to the directory of the file in which the line occurs (for example, if the file name contains no directory or contains a relative directory specification). .LP If a ResourceName contains a contiguous sequence of two or more Binding characters, the sequence will be replaced with single ``\&.'' character if the sequence contains only ``\&.'' characters; otherwise, the sequence will be replaced with a single ``*'' character. .LP A resource database never contains more than one entry for a given ResourceName. If a resource file contains multiple lines with the same ResourceName, the last line in the file is used. .LP Any white space characters before or after the name or colon in a ResourceSpec are ignored. To allow a Value to begin with white space, the two-character sequence ``\^\\\^\fIspace\fP'' (backslash followed by space) is recognized and replaced by a space character, and the two-character sequence ``\^\\\^\fItab\fP'' (backslash followed by horizontal tab) is recognized and replaced by a horizontal tab character. To allow a Value to contain embedded newline characters, the two-character sequence ``\^\\\^n'' is recognized and replaced by a newline character. To allow a Value to be broken across multiple lines in a text file, the two-character sequence ``\^\\\^\fInewline\fP'' (backslash followed by newline) is recognized and removed from the value. To allow a Value to contain arbitrary character codes, the four-character sequence ``\^\\\^\fInnn\fP'', where each \fIn\fP is a digit character in the range of ``0''\^\-``7'', is recognized and replaced with a single byte that contains the octal value specified by the sequence. Finally, the two-character sequence ``\^\\\\'' is recognized and replaced with a single backslash. .SH "SEE ALSO" XrmGetResource(__libmansuffix__), XrmInitialize(__libmansuffix__), XrmPutResource(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XrmPutStringResource.man000064401431060000012000000000701247741723500204610ustar00alancstaff00002660200006.so man__libmansuffix__/XrmPutResource.__libmansuffix__ libX11-1.6.3/man/DefaultDepthOfScreen.man000064401431060000012000000000741247741723500203250ustar00alancstaff00002660200006.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__ libX11-1.6.3/man/XParseGeometry.man000064401431060000012000000162751247741723500172570ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XParseGeometry __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XParseGeometry, XWMGeometry \- parse window geometry .SH SYNTAX .HP int XParseGeometry\^(\^char *\fIparsestring\fP\^, int *\fIx_return\fP\^, int *\fIy_return\fP\^, unsigned int *\fIwidth_return\fP\^, unsigned int *\fIheight_return\fP\^); .HP int XWMGeometry\^(\^Display *\fIdisplay\fP\^, int \fIscreen\fP\^, char *\fIuser_geom\fP\^, char *\fIdef_geom\fP\^, unsigned int \fIbwidth\fP\^, XSizeHints *\fIhints\fP\^, int *\fIx_return\fP, int *\fIy_return\fP\^, int *\fIwidth_return\fP\^, int *\fIheight_return\fP\^, int *\fIgravity_return\fP\^); .SH ARGUMENTS .IP \fIposition\fP 1i .br .ns .IP \fIdefault_position\fP 1i Specify the geometry specifications. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIfheight\fP 1i .br .ns .IP \fIfwidth\fP 1i Specify the font height and width in pixels (increment size). .IP \fIparsestring\fP 1i Specifies the string you want to parse. .IP \fIscreen\fP 1i Specifies the screen. .IP \fIwidth_return\fP 1i .br .ns .IP \fIheight_return\fP 1i Return the width and height determined. .IP \fIxadder\fP 1i .br .ns .IP \fIyadder\fP 1i Specify additional interior padding needed in the window. .IP \fIx_return\fP 1i .br .ns .IP \fIy_return\fP 1i Return the x and y offsets. .IP \fIbwidth\fP 1i Specifies the border width. .IP \fIhints\fP 1i Specifies the size hints for the window in its normal state. .IP \fIdef_geom\fP 1i Specifies the application's default geometry or NULL. .IP \fIgravity_return\fP 1i Returns the window gravity. .IP \fIuser_geom\fP 1i Specifies the user-specified geometry or NULL. .SH DESCRIPTION By convention, X applications use a standard string to indicate window size and placement. .ZN XParseGeometry makes it easier to conform to this standard because it allows you to parse the standard window geometry. Specifically, this function lets you parse strings of the form: .LP .\" Start marker code here .Ds [=][<\fIwidth\fP>{xX}<\fIheight\fP>][{+-}<\fIxoffset\fP>{+-}<\fIyoffset\fP>] .De .\" End marker code here .LP The fields map into the arguments associated with this function. (Items enclosed in <\^> are integers, items in [\^] are optional, and items enclosed in {\^} indicate ``choose one of.'' Note that the brackets should not appear in the actual string.) If the string is not in the Host Portable Character Encoding, the result is implementation-dependent. .LP The .ZN XParseGeometry function returns a bitmask that indicates which of the four values (width, height, xoffset, and yoffset) were actually found in the string and whether the x and y values are negative. By convention, \-0 is not equal to +0, because the user needs to be able to say ``position the window relative to the right or bottom edge.'' For each value found, the corresponding argument is updated. For each value not found, the argument is left unchanged. The bits are represented by .ZN XValue , .ZN YValue , .ZN WidthValue , .ZN HeightValue , .ZN XNegative , or .ZN YNegative and are defined in .hN X11/Xutil.h . They will be set whenever one of the values is defined or one of the signs is set. .LP If the function returns either the .ZN XValue or .ZN YValue flag, you should place the window at the requested position. .LP The .ZN XWMGeometry function combines any geometry information (given in the format used by .ZN XParseGeometry ) specified by the user and by the calling program with size hints (usually the ones to be stored in WM_NORMAL_HINTS) and returns the position, size, and gravity .Pn ( NorthWestGravity , .ZN NorthEastGravity , .ZN SouthEastGravity , or .ZN SouthWestGravity ) that describe the window. If the base size is not set in the .ZN XSizeHints structure, the minimum size is used if set. Otherwise, a base size of zero is assumed. If no minimum size is set in the hints structure, the base size is used. A mask (in the form returned by .ZN XParseGeometry ) that describes which values came from the user specification and whether or not the position coordinates are relative to the right and bottom edges is returned. Note that these coordinates will have already been accounted for in the x_return and y_return values. .LP Note that invalid geometry specifications can cause a width or height of zero to be returned. The caller may pass the address of the hints win_gravity field as gravity_return to update the hints directly. .SH "SEE ALSO" XSetWMProperties(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XTimeCoord.man000064401431060000012000000000641247741723500163430ustar00alancstaff00002660200006.so man__libmansuffix__/XSendEvent.__libmansuffix__ libX11-1.6.3/man/XRemoveHost.man000064401431060000012000000000621247741723500165470ustar00alancstaff00002660200006.so man__libmansuffix__/XAddHost.__libmansuffix__ libX11-1.6.3/man/XPutImage.man000064401431060000012000000251761247741723500162040ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XPutImage __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XPutImage, XGetImage, XGetSubImage \- transfer images .SH SYNTAX .HP int XPutImage\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, GC \fIgc\fP\^, XImage *\fIimage\fP\^, int \fIsrc_x\fP\^, int \fIsrc_y\fP\^, int \fIdest_x\fP\^, int \fIdest_y\fP\^, unsigned int \fIwidth\fP\^, unsigned int \fIheight\fP\^); .HP XImage *XGetImage\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, int \fIx\fP\^, int \fIy\fP\^, unsigned int \fIwidth\fP\^, unsigned int \fIheight\fP\^, unsigned long \fIplane_mask\fP\^, int \fIformat\fP\^); .HP XImage *XGetSubImage\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, int \fIx\fP\^, int \fIy\fP\^, unsigned int \fIwidth\fP\^, unsigned int \fIheight\fP\^, unsigned long \fIplane_mask\fP\^, int \fIformat\fP\^, XImage *\fIdest_image\fP\^, int \fIdest_x\fP\^, \fIdest_y\fP\^); .SH ARGUMENTS .IP \fId\fP 1i Specifies the drawable. .IP \fIdest_image\fP 1i Specifies the destination image. .ds Dx , which are relative to the origin of the drawable \ and are the coordinates of the subimage \ or which are relative to the origin of the destination rectangle, \ specify its upper-left corner, and determine where the subimage \ is placed in the destination image .IP \fIdest_x\fP 1i .br .ns .IP \fIdest_y\fP 1i Specify the x and y coordinates\*(Dx. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIformat\fP 1i Specifies the format for the image. You can pass .ZN XYPixmap or .ZN ZPixmap . .IP \fIgc\fP 1i Specifies the GC. .IP \fIimage\fP 1i Specifies the image you want combined with the rectangle. .IP \fIplane_mask\fP 1i Specifies the plane mask. .\" *** JIM: NEED MORE INFO FOR THIS. *** .IP \fIsrc_x\fP 1i Specifies the offset in X from the left edge of the image defined by the .ZN XImage structure. .IP \fIsrc_y\fP 1i Specifies the offset in Y from the top edge of the image defined by the .ZN XImage structure. .ds Wh \ of the subimage, which define the dimensions of the rectangle .IP \fIwidth\fP 1i .br .ns .IP \fIheight\fP 1i Specify the width and height\*(Wh. .ds Xy , which are relative to the origin of the drawable \ and define the upper-left corner of the rectangle .IP \fIx\fP 1i .br .ns .IP \fIy\fP 1i Specify the x and y coordinates\*(Xy. .SH DESCRIPTION The .ZN XPutImage function combines an image with a rectangle of the specified drawable. The section of the image defined by the src_x, src_y, width, and height arguments is drawn on the specified part of the drawable. If .ZN XYBitmap format is used, the depth of the image must be one, or a .ZN BadMatch error results. The foreground pixel in the GC defines the source for the one bits in the image, and the background pixel defines the source for the zero bits. For .ZN XYPixmap and .ZN ZPixmap , the depth of the image must match the depth of the drawable, or a .ZN BadMatch error results. .LP If the characteristics of the image (for example, byte_order and bitmap_unit) differ from what the server requires, .ZN XPutImage automatically makes the appropriate conversions. .LP This function uses these GC components: function, plane-mask, subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask. It also uses these GC mode-dependent components: foreground and background. .LP .ZN XPutImage can generate .ZN BadDrawable , .ZN BadGC , .ZN BadMatch , and .ZN BadValue errors. .LP The .ZN XGetImage function returns a pointer to an .ZN XImage structure. This structure provides you with the contents of the specified rectangle of the drawable in the format you specify. If the format argument is .ZN XYPixmap , the image contains only the bit planes you passed to the plane_mask argument. If the plane_mask argument only requests a subset of the planes of the display, the depth of the returned image will be the number of planes requested. If the format argument is .ZN ZPixmap , .ZN XGetImage returns as zero the bits in all planes not specified in the plane_mask argument. The function performs no range checking on the values in plane_mask and ignores extraneous bits. .LP .ZN XGetImage returns the depth of the image to the depth member of the .ZN XImage structure. The depth of the image is as specified when the drawable was created, except when getting a subset of the planes in .ZN XYPixmap format, when the depth is given by the number of bits set to 1 in plane_mask. .LP If the drawable is a pixmap, the given rectangle must be wholly contained within the pixmap, or a .ZN BadMatch error results. If the drawable is a window, the window must be viewable, and it must be the case that if there were no inferiors or overlapping windows, the specified rectangle of the window would be fully visible on the screen and wholly contained within the outside edges of the window, or a .ZN BadMatch error results. Note that the borders of the window can be included and read with this request. If the window has backing-store, the backing-store contents are returned for regions of the window that are obscured by noninferior windows. If the window does not have backing-store, the returned contents of such obscured regions are undefined. The returned contents of visible regions of inferiors of a different depth than the specified window's depth are also undefined. The pointer cursor image is not included in the returned contents. If a problem occurs, .ZN XGetImage returns NULL. .LP .ZN XGetImage can generate .ZN BadDrawable , .ZN BadMatch , and .ZN BadValue errors. .LP The .ZN XGetSubImage function updates dest_image with the specified subimage in the same manner as .ZN XGetImage . If the format argument is .ZN XYPixmap , the image contains only the bit planes you passed to the plane_mask argument. If the format argument is .ZN ZPixmap , .ZN XGetSubImage returns as zero the bits in all planes not specified in the plane_mask argument. The function performs no range checking on the values in plane_mask and ignores extraneous bits. As a convenience, .ZN XGetSubImage returns a pointer to the same .ZN XImage structure specified by dest_image. .LP The depth of the destination .ZN XImage structure must be the same as that of the drawable. If the specified subimage does not fit at the specified location on the destination image, the right and bottom edges are clipped. If the drawable is a pixmap, the given rectangle must be wholly contained within the pixmap, or a .ZN BadMatch error results. If the drawable is a window, the window must be viewable, and it must be the case that if there were no inferiors or overlapping windows, the specified rectangle of the window would be fully visible on the screen and wholly contained within the outside edges of the window, or a .ZN BadMatch error results. If the window has backing-store, then the backing-store contents are returned for regions of the window that are obscured by noninferior windows. If the window does not have backing-store, the returned contents of such obscured regions are undefined. The returned contents of visible regions of inferiors of a different depth than the specified window's depth are also undefined. If a problem occurs, .ZN XGetSubImage returns NULL. .LP .ZN XGetSubImage can generate .ZN BadDrawable , .ZN BadGC , .ZN BadMatch , and .ZN BadValue errors. .SH DIAGNOSTICS .TP 1i .ZN BadDrawable A value for a Drawable argument does not name a defined Window or Pixmap. .TP 1i .ZN BadGC A value for a GContext argument does not name a defined GContext. .TP 1i .ZN BadMatch An .ZN InputOnly window is used as a Drawable. .TP 1i .ZN BadMatch Some argument or pair of arguments has the correct type and range but fails to match in some other way required by the request. .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .SH "SEE ALSO" \fI\*(xL\fP \fIwidth\fP\^, unsigned int \fIheight\fP\^); .HP XImage *XGetImage\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, int \fIx\fP\^, int \fIy\fP\^, unsigned int \fIwidth\fP\^, unsigned int \fIheight\fP\^, unsigned long \fIplane_mask\fP\^, int \fIformat\fP\^); .HP XImage *XGetSubImage\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, int \fIx\fP\^, int \fIy\fP\^, unsigned int \fIwidlibX11-1.6.3/man/XGetCommand.man000064401431060000012000000000651247741723500164750ustar00alancstaff00002660200006.so man__libmansuffix__/XSetCommand.__libmansuffix__ libX11-1.6.3/man/XMotionEvent.man000064401431060000012000000000661247741723500167270ustar00alancstaff00002660200006.so man__libmansuffix__/XButtonEvent.__libmansuffix__ libX11-1.6.3/man/XMapRequestEvent.man000064401431060000012000000121251247741723500175470ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XMapRequestEvent __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XMapRequestEvent \- MapRequest event structure .SH STRUCTURES The structure for .ZN MapRequest events contains: .LP .Ds 0 typedef struct { int type; /\&* MapRequest */ unsigned long serial; /\&* # of last request processed by server */ Bool send_event; /\&* true if this came from a SendEvent request */ Display *display; /\&* Display the event was read from */ Window parent; Window window; } XMapRequestEvent; .De .LP When you receive this event, the structure members are set as follows. .LP The type member is set to the event type constant name that uniquely identifies it. For example, when the X server reports a .ZN GraphicsExpose event to a client application, it sends an .ZN XGraphicsExposeEvent structure with the type member set to .ZN GraphicsExpose . The display member is set to a pointer to the display the event was read on. The send_event member is set to .ZN True if the event came from a .ZN SendEvent protocol request. The serial member is set from the serial number reported in the protocol but expanded from the 16-bit least-significant bits to a full 32-bit value. The window member is set to the window that is most useful to toolkit dispatchers. .LP The parent member is set to the parent window. The window member is set to the window to be mapped. .SH "SEE ALSO" XAnyEvent(__libmansuffix__), XButtonEvent(__libmansuffix__), XCreateWindowEvent(__libmansuffix__), XCirculateEvent(__libmansuffix__), XCirculateRequestEvent(__libmansuffix__), XColormapEvent(__libmansuffix__), XConfigureEvent(__libmansuffix__), XConfigureRequestEvent(__libmansuffix__), XCrossingEvent(__libmansuffix__), XDestroyWindowEvent(__libmansuffix__), XErrorEvent(__libmansuffix__), XExposeEvent(__libmansuffix__), XFocusChangeEvent(__libmansuffix__), XGraphicsExposeEvent(__libmansuffix__), XGravityEvent(__libmansuffix__), XKeymapEvent(__libmansuffix__), XMapEvent(__libmansuffix__), XPropertyEvent(__libmansuffix__), XReparentEvent(__libmansuffix__), XResizeRequestEvent(__libmansuffix__), XSelectionClearEvent(__libmansuffix__), XSelectionEvent(__libmansuffix__), XSelectionRequestEvent(__libmansuffix__), XUnmapEvent(__libmansuffix__), XVisibilityEvent(__libmansuffix__) .br \fI\*(xL\fP FTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions ColibX11-1.6.3/man/XInstallColormap.man000064401431060000012000000134201247741723500175610ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XInstallColormap __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XInstallColormap, XUninstallColormap, XListInstalledColormaps \- control colormaps .SH SYNTAX .HP int XInstallColormap\^(\^Display *\fIdisplay\fP\^, Colormap \fIcolormap\fP\^); .HP int XUninstallColormap\^(\^Display *\fIdisplay\fP\^, Colormap \fIcolormap\fP\^); .HP Colormap *XListInstalledColormaps\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, int *\fInum_return\fP\^); .SH ARGUMENTS .IP \fIcolormap\fP 1i Specifies the colormap. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fInum_return\fP 1i Returns the number of currently installed colormaps. .ds Wi that determines the screen .IP \fIw\fP 1i Specifies the window \*(Wi. .SH DESCRIPTION The .ZN XInstallColormap function installs the specified colormap for its associated screen. All windows associated with this colormap immediately display with true colors. You associated the windows with this colormap when you created them by calling .ZN XCreateWindow , .ZN XCreateSimpleWindow , .ZN XChangeWindowAttributes , or .ZN XSetWindowColormap . .LP If the specified colormap is not already an installed colormap, the X server generates a .ZN ColormapNotify event on each window that has that colormap. In addition, for every other colormap that is installed as a result of a call to .ZN XInstallColormap , the X server generates a .ZN ColormapNotify event on each window that has that colormap. .LP .ZN XInstallColormap can generate a .ZN BadColor error. .LP The .ZN XUninstallColormap function removes the specified colormap from the required list for its screen. As a result, the specified colormap might be uninstalled, and the X server might implicitly install or uninstall additional colormaps. Which colormaps get installed or uninstalled is server dependent except that the required list must remain installed. .LP If the specified colormap becomes uninstalled, the X server generates a .ZN ColormapNotify event on each window that has that colormap. In addition, for every other colormap that is installed or uninstalled as a result of a call to .ZN XUninstallColormap , the X server generates a .ZN ColormapNotify event on each window that has that colormap. .LP .ZN XUninstallColormap can generate a .ZN BadColor error. .LP The .ZN XListInstalledColormaps function returns a list of the currently installed colormaps for the screen of the specified window. The order of the colormaps in the list is not significant and is no explicit indication of the required list. When the allocated list is no longer needed, free it by using .ZN XFree . .LP .ZN XListInstalledColormaps can generate a .ZN BadWindow error. .SH DIAGNOSTICS .TP 1i .ZN BadColor A value for a Colormap argument does not name a defined Colormap. .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XChangeWindowAttributes(__libmansuffix__), XCreateColormap(__libmansuffix__), XCreateWindow(__libmansuffix__), XFree(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/WidthMMOfScreen.man000064401431060000012000000000741247741723500172650ustar00alancstaff00002660200006.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__ libX11-1.6.3/man/XSetClipRectangles.man000064401431060000012000000000701247741723500200260ustar00alancstaff00002660200006.so man__libmansuffix__/XSetClipOrigin.__libmansuffix__ libX11-1.6.3/man/XSetWMName.man000064401431060000012000000140631247741723500162620ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XSetWMName __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XSetWMName, XGetWMName, XStoreName, XFetchName \- set or read a window's WM_NAME property .SH SYNTAX .HP void XSetWMName\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, XTextProperty *\fItext_prop\fP\^); .HP Status XGetWMName\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, XTextProperty *\fItext_prop_return\fP\^); .HP int XStoreName\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, char *\fIwindow_name\fP\^); .HP Status XFetchName\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, char **\fIwindow_name_return\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fItext_prop\fP 1i Specifies the .ZN XTextProperty structure to be used. .IP \fItext_prop_return\fP 1i Returns the .ZN XTextProperty structure. .IP \fIw\fP 1i Specifies the window. .IP \fIwindow_name\fP 1i Specifies the window name, which should be a null-terminated string. .IP \fIwindow_name_return\fP 1i Returns the window name, which is a null-terminated string. .SH DESCRIPTION The .ZN XSetWMName convenience function calls .ZN XSetTextProperty to set the WM_NAME property. .LP The .ZN XGetWMName convenience function calls .ZN XGetTextProperty to obtain the WM_NAME property. It returns a nonzero status on success; otherwise, it returns a zero status. .LP The .ZN XStoreName function assigns the name passed to window_name to the specified window. A window manager can display the window name in some prominent place, such as the title bar, to allow users to identify windows easily. Some window managers may display a window's name in the window's icon, although they are encouraged to use the window's icon name if one is provided by the application. If the string is not in the Host Portable Character Encoding, the result is implementation-dependent. .LP .ZN XStoreName can generate .ZN BadAlloc and .ZN BadWindow errors. .LP The .ZN XFetchName function returns the name of the specified window. If it succeeds, it returns a nonzero status; otherwise, no name has been set for the window, and it returns zero. If the WM_NAME property has not been set for this window, .ZN XFetchName sets window_name_return to NULL. If the data returned by the server is in the Latin Portable Character Encoding, then the returned string is in the Host Portable Character Encoding. Otherwise, the result is implementation-dependent. When finished with it, a client must free the window name string using .ZN XFree . .LP .ZN XFetchName can generate a .ZN BadWindow error. .SH PROPERTIES .TP 1i \s-1WM_NAME\s+1 The name of the application. .SH DIAGNOSTICS .TP 1i .ZN BadAlloc The server failed to allocate the requested resource or server memory. .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XAllocClassHint(__libmansuffix__), XAllocIconSize(__libmansuffix__), XAllocSizeHints(__libmansuffix__), XAllocWMHints(__libmansuffix__), XFree(__libmansuffix__), XSetCommand(__libmansuffix__), XSetTransientForHint(__libmansuffix__), XSetTextProperty(__libmansuffix__), XSetWMClientMachine(__libmansuffix__), XSetWMColormapWindows(__libmansuffix__), XSetWMIconName(__libmansuffix__), XSetWMProperties(__libmansuffix__), XSetWMProtocols(__libmansuffix__), XStringListToTextProperty(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XFetchName.man000064401431060000012000000000641247741723500163100ustar00alancstaff00002660200006.so man__libmansuffix__/XSetWMName.__libmansuffix__ libX11-1.6.3/man/XwcResetIC.man000064401431060000012000000000641247741723500163060ustar00alancstaff00002660200006.so man__libmansuffix__/XmbResetIC.__libmansuffix__ libX11-1.6.3/man/XMaxRequestSize.man000064401431060000012000000000631247741723500174060ustar00alancstaff00002660200006.so man__libmansuffix__/AllPlanes.__libmansuffix__ libX11-1.6.3/man/XCompose.man000064401431060000012000000000631247741723500160620ustar00alancstaff00002660200006.so man__filemansuffix__/Compose.__filemansuffix__ libX11-1.6.3/man/XGetWindowProperty.man000064401431060000012000000325031247741723500201350ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XGetWindowProperty __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XGetWindowProperty, XListProperties, XChangeProperty, XRotateWindowProperties, XDeleteProperty \- obtain and change window properties .SH SYNTAX .HP int XGetWindowProperty\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, Atom \fIproperty\fP\^, long \fIlong_offset\fP\^, long \fIlong_length\fP\^, Bool \fIdelete\fP\^, Atom \fIreq_type\fP\^, Atom *\fIactual_type_return\fP\^, int *\fIactual_format_return\fP\^, unsigned long *\fInitems_return\fP\^, unsigned long *\fIbytes_after_return\fP\^, unsigned char **\fIprop_return\fP\^); .HP Atom *XListProperties\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, int *\fInum_prop_return\fP\^); .HP int XChangeProperty\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, Atom \fIproperty\fP\^, Atom \fItype\fP\^, int \fIformat\fP\^, int \fImode\fP\^, unsigned char *\fIdata\fP\^, int \fInelements\fP\^); .HP int XRotateWindowProperties\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, Atom \fIproperties\fP\^[]\^, int \fInum_prop\fP\^, int \fInpositions\fP\^); .HP int XDeleteProperty\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, Atom \fIproperty\fP\^); .SH ARGUMENTS .IP \fIactual_format_return\fP 1i Returns the actual format of the property. .IP \fIactual_type_return\fP 1i Returns the atom identifier that defines the actual type of the property. .IP \fIbytes_after_return\fP 1i Returns the number of bytes remaining to be read in the property if a partial read was performed. .IP \fIdata\fP 1i Specifies the property data. .IP \fIdelete\fP 1i Specifies a Boolean value that determines whether the property is deleted. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIformat\fP 1i Specifies whether the data should be viewed as a list of 8-bit, 16-bit, or 32-bit quantities. Possible values are 8, 16, and 32. This information allows the X server to correctly perform byte-swap operations as necessary. If the format is 16-bit or 32-bit, you must explicitly cast your data pointer to an (unsigned char *) in the call to .ZN XChangeProperty . .IP \fIlong_length\fP 1i Specifies the length in 32-bit multiples of the data to be retrieved. .IP \fIlong_offset\fP 1i Specifies the offset in the specified property (in 32-bit quantities) where the data is to be retrieved. .\" Changed name of this file to prop_mode.a on 1/13/87 .IP \fImode\fP 1i Specifies the mode of the operation. You can pass .ZN PropModeReplace , .ZN PropModePrepend , or .ZN PropModeAppend . .IP \fInelements\fP 1i Specifies the number of elements of the specified data format. .IP \fInitems_return\fP 1i Returns the actual number of 8-bit, 16-bit, or 32-bit items stored in the prop_return data. .IP \fInum_prop\fP 1i Specifies the length of the properties array. .IP \fInum_prop_return\fP 1i Returns the length of the properties array. .IP \fInpositions\fP 1i Specifies the rotation amount. .IP \fIprop_return\fP 1i Returns the data in the specified format. If the returned format is 8, the returned data is represented as a char array. If the returned format is 16, the returned data is represented as a array of short int type and should be cast to that type to obtain the elements. If the returned format is 32, the property data will be stored as an array of longs (which in a 64-bit application will be 64-bit values that are padded in the upper 4 bytes). .IP \fIproperty\fP 1i Specifies the property name. .IP \fIproperties\fP 1i Specifies the array of properties that are to be rotated. .IP \fIreq_type\fP 1i Specifies the atom identifier associated with the property type or .ZN AnyPropertyType . .IP \fItype\fP 1i Specifies the type of the property. The X server does not interpret the type but simply passes it back to an application that later calls .ZN XGetWindowProperty . .ds Wi whose property you want to obtain, change, rotate or delete .IP \fIw\fP 1i Specifies the window \*(Wi. .SH DESCRIPTION The .ZN XGetWindowProperty function returns the actual type of the property; the actual format of the property; the number of 8-bit, 16-bit, or 32-bit items transferred; the number of bytes remaining to be read in the property; and a pointer to the data actually returned. .ZN XGetWindowProperty sets the return arguments as follows: .IP \(bu 5 If the specified property does not exist for the specified window, .ZN XGetWindowProperty returns .ZN None to actual_type_return and the value zero to actual_format_return and bytes_after_return. The nitems_return argument is empty. In this case, the delete argument is ignored. .IP \(bu 5 If the specified property exists but its type does not match the specified type, .ZN XGetWindowProperty returns the actual property type to actual_type_return, the actual property format (never zero) to actual_format_return, and the property length in bytes (even if the actual_format_return is 16 or 32) to bytes_after_return. It also ignores the delete argument. The nitems_return argument is empty. .IP \(bu 5 If the specified property exists and either you assign .ZN AnyPropertyType to the req_type argument or the specified type matches the actual property type, .ZN XGetWindowProperty returns the actual property type to actual_type_return and the actual property format (never zero) to actual_format_return. It also returns a value to bytes_after_return and nitems_return, by defining the following values: .IP .nf N = actual length of the stored property in bytes (even if the format is 16 or 32) I = 4 * long_offset T = N - I L = MINIMUM(T, 4 * long_length) A = N - (I + L) .fi .IP The returned value starts at byte index I in the property (indexing from zero), and its length in bytes is L. If the value for long_offset causes L to be negative, a .ZN BadValue error results. The value of bytes_after_return is A, giving the number of trailing unread bytes in the stored property. .LP If the returned format is 8, the returned data is represented as a .ZN char array. If the returned format is 16, the returned data is represented as a .ZN short array and should be cast to that type to obtain the elements. If the returned format is 32, the returned data is represented as a .ZN long array and should be cast to that type to obtain the elements. .LP .ZN XGetWindowProperty always allocates one extra byte in prop_return (even if the property is zero length) and sets it to zero so that simple properties consisting of characters do not have to be copied into yet another string before use. .LP If delete is .ZN True and bytes_after_return is zero, .ZN XGetWindowProperty deletes the property from the window and generates a .ZN PropertyNotify event on the window. .LP The function returns .ZN Success if it executes successfully. To free the resulting data, use .ZN XFree . .LP .ZN XGetWindowProperty can generate .ZN BadAtom , .ZN BadValue , and .ZN BadWindow errors. .LP The .ZN XListProperties function returns a pointer to an array of atom properties that are defined for the specified window or returns NULL if no properties were found. To free the memory allocated by this function, use .ZN XFree . .LP .ZN XListProperties can generate a .ZN BadWindow error. .LP The .ZN XChangeProperty function alters the property for the specified window and causes the X server to generate a .ZN PropertyNotify event on that window. .ZN XChangeProperty performs the following: .IP \(bu 5 If mode is .ZN PropModeReplace , .ZN XChangeProperty discards the previous property value and stores the new data. .IP \(bu 5 If mode is .ZN PropModePrepend or .ZN PropModeAppend , .ZN XChangeProperty inserts the specified data before the beginning of the existing data or onto the end of the existing data, respectively. The type and format must match the existing property value, or a .ZN BadMatch error results. If the property is undefined, it is treated as defined with the correct type and format with zero-length data. .LP If the specified format is 8, the property data must be a .ZN char array. If the specified format is 16, the property data must be a .ZN short array. If the specified format is 32, the property data must be a .ZN long array. .LP The lifetime of a property is not tied to the storing client. Properties remain until explicitly deleted, until the window is destroyed, or until the server resets. For a discussion of what happens when the connection to the X server is closed, see section 2.6. The maximum size of a property is server dependent and can vary dynamically depending on the amount of memory the server has available. (If there is insufficient space, a .ZN BadAlloc error results.) .LP .ZN XChangeProperty can generate .ZN BadAlloc , .ZN BadAtom , .ZN BadMatch , .ZN BadValue , and .ZN BadWindow errors. .LP The .ZN XRotateWindowProperties function allows you to rotate properties on a window and causes the X server to generate .ZN PropertyNotify events. If the property names in the properties array are viewed as being numbered starting from zero and if there are num_prop property names in the list, then the value associated with property name I becomes the value associated with property name (I + npositions) mod N for all I from zero to N \- 1. The effect is to rotate the states by npositions places around the virtual ring of property names (right for positive npositions, left for negative npositions). If npositions mod N is nonzero, the X server generates a .ZN PropertyNotify event for each property in the order that they are listed in the array. If an atom occurs more than once in the list or no property with that name is defined for the window, a .ZN BadMatch error results. If a .ZN BadAtom or .ZN BadMatch error results, no properties are changed. .LP .ZN XRotateWindowProperties can generate .ZN BadAtom , .ZN BadMatch , and .ZN BadWindow errors. .LP The .ZN XDeleteProperty function deletes the specified property only if the property was defined on the specified window and causes the X server to generate a .ZN PropertyNotify event on the window unless the property does not exist. .LP .ZN XDeleteProperty can generate .ZN BadAtom and .ZN BadWindow errors. .SH DIAGNOSTICS .TP 1i .ZN BadAlloc The server failed to allocate the requested resource or server memory. .TP 1i .ZN BadAtom A value for an Atom argument does not name a defined Atom. .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XFree(__libmansuffix__), XInternAtom(__libmansuffix__) .br \fI\*(xL\fP o .ZN XChangeProperty . .IP \fIlong_length\fP 1i Specifies the length in 32-bit multiples of the data to be retrieved. .IP \fIlong_offset\fP 1i Specifies the offset in the specified properlibX11-1.6.3/man/XExposeEvent.man000064401431060000012000000134521247741723500167300ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XExposeEvent __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XExposeEvent \- Expose event structure .SH STRUCTURES The structure for .ZN Expose events contains: .LP .Ds 0 typedef struct { int type; /\&* Expose */ unsigned long serial; /\&* # of last request processed by server */ Bool send_event; /\&* true if this came from a SendEvent request */ Display *display; /\&* Display the event was read from */ Window window; int x, y; int width, height; int count; /\&* if nonzero, at least this many more */ } XExposeEvent; .De .LP When you receive this event, the structure members are set as follows. .LP The type member is set to the event type constant name that uniquely identifies it. For example, when the X server reports a .ZN GraphicsExpose event to a client application, it sends an .ZN XGraphicsExposeEvent structure with the type member set to .ZN GraphicsExpose . The display member is set to a pointer to the display the event was read on. The send_event member is set to .ZN True if the event came from a .ZN SendEvent protocol request. The serial member is set from the serial number reported in the protocol but expanded from the 16-bit least-significant bits to a full 32-bit value. The window member is set to the window that is most useful to toolkit dispatchers. .LP The window member is set to the exposed (damaged) window. The x and y members are set to the coordinates relative to the window's origin and indicate the upper-left corner of the rectangle. The width and height members are set to the size (extent) of the rectangle. The count member is set to the number of .ZN Expose events that are to follow. If count is zero, no more .ZN Expose events follow for this window. However, if count is nonzero, at least that number of .ZN Expose events (and possibly more) follow for this window. Simple applications that do not want to optimize redisplay by distinguishing between subareas of its window can just ignore all .ZN Expose events with nonzero counts and perform full redisplays on events with zero counts. .SH "SEE ALSO" XAnyEvent(__libmansuffix__), XButtonEvent(__libmansuffix__), XCreateWindowEvent(__libmansuffix__), XCirculateEvent(__libmansuffix__), XCirculateRequestEvent(__libmansuffix__), XColormapEvent(__libmansuffix__), XConfigureEvent(__libmansuffix__), XConfigureRequestEvent(__libmansuffix__), XCrossingEvent(__libmansuffix__), XDestroyWindowEvent(__libmansuffix__), XErrorEvent(__libmansuffix__), XFocusChangeEvent(__libmansuffix__), XGraphicsExposeEvent(__libmansuffix__), XGravityEvent(__libmansuffix__), XKeymapEvent(__libmansuffix__), XMapEvent(__libmansuffix__), XMapRequestEvent(__libmansuffix__), XPropertyEvent(__libmansuffix__), XReparentEvent(__libmansuffix__), XResizeRequestEvent(__libmansuffix__), XSelectionClearEvent(__libmansuffix__), XSelectionEvent(__libmansuffix__), XSelectionRequestEvent(__libmansuffix__), XUnmapEvent(__libmansuffix__), XVisibilityEvent(__libmansuffix__) .br \fI\*(xL\fP ther dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions ColibX11-1.6.3/man/XwcLookupString.man000064401431060000012000000000711247741723500174460ustar00alancstaff00002660200006.so man__libmansuffix__/XmbLookupString.__libmansuffix__ libX11-1.6.3/man/XTextExtents16.man000064401431060000012000000000661247741723500171260ustar00alancstaff00002660200006.so man__libmansuffix__/XTextExtents.__libmansuffix__ libX11-1.6.3/man/XmbSetWMProperties.man000064401431060000012000000000721247741723500200500ustar00alancstaff00002660200006.so man__libmansuffix__/XSetWMProperties.__libmansuffix__ libX11-1.6.3/man/XGetICValues.man000064401431060000012000000000661247741723500165730ustar00alancstaff00002660200006.so man__libmansuffix__/XSetICValues.__libmansuffix__ libX11-1.6.3/man/XcmsDefaultCCC.man000064401431060000012000000072401247741723500170610ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XcmsDefaultCCC __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XcmsDefaultCCC \- obtain the default CCC for a screen .SH SYNTAX .HP XcmsCCC XcmsDefaultCCC\^(\^Display *\fIdisplay\fP\^, int \fIscreen_number\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIscreen_number\fP 1i Specifies the appropriate screen number on the host server. .SH DESCRIPTION The .ZN XcmsDefaultCCC function returns the default CCC for the specified screen. Its visual is the default visual of the screen. Its initial gamut compression and white point adjustment procedures as well as the associated client data are implementation specific. .SH "SEE ALSO" DisplayOfCCC(__libmansuffix__), XcmsCCCOfColormap(__libmansuffix__), XcmsConvertColors(__libmansuffix__), XcmsCreateCCC(__libmansuffix__), XcmsSetWhitePoint(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XSetWMHints.man000064401431060000012000000000671247741723500164660ustar00alancstaff00002660200006.so man__libmansuffix__/XAllocWMHints.__libmansuffix__ libX11-1.6.3/man/XCreateOC.man000064401431060000012000000121671247741723500161120ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XCreateOC __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XCreateOC, XDestroyOC, XSetOCValues, XGetOCValues, XOMOfOC \- create output contexts .SH SYNTAX .HP XOC XCreateOC\^(\^XOM \fIom\fP\^); .HP void XDestroyOC\^(\^XOC \fIoc\fP\^); .HP char * XSetOCValues\^(\^XOC \fIoc\fP\^, ...); .HP char * XGetOCValues\^(\^XOC \fIoc\fP\^, ...); .HP XOM XOMOfOC\^(\^XOC \fIoc\fP\^); .SH ARGUMENTS .IP \fIoc\fP 1i Specifies the output context. .IP \fIom\fP 1i Specifies the output method. .ds Al \ to set or get XOC values .IP ... 1i Specifies the variable length argument list\*(Al. .SH DESCRIPTION The .ZN XCreateOC function creates an output context within the specified output method. .LP The base font names argument is mandatory at creation time, and the output context will not be created unless it is provided. All other output context values can be set later. .LP .ZN XCreateOC returns NULL if no output context could be created. NULL can be returned for any of the following reasons: .IP \(bu 5 A required argument was not set. .IP \(bu 5 A read-only argument was set. .IP \(bu 5 An argument name is not recognized. .IP \(bu 5 The output method encountered an output method implementation-dependent error. .LP The .ZN XDestroyOC function destroys the specified output context. .LP The .ZN XSetOCValues function returns NULL if no error occurred; otherwise, it returns the name of the first argument that could not be set. An argument might not be set for any of the following reasons: .IP \(bu 5 The argument is read-only. .IP \(bu 5 The argument name is not recognized. .IP \(bu 5 An implementation-dependent error occurs. .LP Each value to be set must be an appropriate datum, matching the data type imposed by the semantics of the argument. .LP The .ZN XGetOCValues function returns NULL if no error occurred; otherwise, it returns the name of the first argument that could not be obtained. An argument might not be obtained for any of the following reasons: .IP \(bu 5 The argument name is not recognized. .IP \(bu 5 An implementation-dependent error occurs. .LP Each argument value following a name must point to a location where the value is to be stored. .LP The .ZN XOMOfOC function returns the output method associated with the specified output context. .SH "SEE ALSO" XCreateOM(__libmansuffix__), XCreateFontSet(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XCreatePixmapCursor.man000064401431060000012000000000731247741723500202360ustar00alancstaff00002660200006.so man__libmansuffix__/XCreateFontCursor.__libmansuffix__ libX11-1.6.3/man/XGetModifierMapping.man000064401431060000012000000001001247741723500201570ustar00alancstaff00002660200006.so man__libmansuffix__/XChangeKeyboardMapping.__libmansuffix__ libX11-1.6.3/man/XMapWindow.man000064401431060000012000000146441247741723500163740ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XMapWindow __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XMapWindow, XMapRaised, XMapSubwindows \- map windows .SH SYNTAX .HP int XMapWindow\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^); .HP int XMapRaised\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^); .HP int XMapSubwindows\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIw\fP 1i Specifies the window. .SH DESCRIPTION The .ZN XMapWindow function maps the window and all of its subwindows that have had map requests. Mapping a window that has an unmapped ancestor does not display the window but marks it as eligible for display when the ancestor becomes mapped. Such a window is called unviewable. When all its ancestors are mapped, the window becomes viewable and will be visible on the screen if it is not obscured by another window. This function has no effect if the window is already mapped. .LP If the override-redirect of the window is .ZN False and if some other client has selected .ZN SubstructureRedirectMask on the parent window, then the X server generates a .ZN MapRequest event, and the .ZN XMapWindow function does not map the window. Otherwise, the window is mapped, and the X server generates a .ZN MapNotify event. .LP If the window becomes viewable and no earlier contents for it are remembered, the X server tiles the window with its background. If the window's background is undefined, the existing screen contents are not altered, and the X server generates zero or more .ZN Expose events. If backing-store was maintained while the window was unmapped, no .ZN Expose events are generated. If backing-store will now be maintained, a full-window exposure is always generated. Otherwise, only visible regions may be reported. Similar tiling and exposure take place for any newly viewable inferiors. .LP .IN "XMapWindow" If the window is an .ZN InputOutput window, .ZN XMapWindow generates .ZN Expose events on each .ZN InputOutput window that it causes to be displayed. If the client maps and paints the window and if the client begins processing events, the window is painted twice. To avoid this, first ask for .ZN Expose events and then map the window, so the client processes input events as usual. The event list will include .ZN Expose for each window that has appeared on the screen. The client's normal response to an .ZN Expose event should be to repaint the window. This method usually leads to simpler programs and to proper interaction with window managers. .LP .ZN XMapWindow can generate a .ZN BadWindow error. .LP The .ZN XMapRaised function essentially is similar to .ZN XMapWindow in that it maps the window and all of its subwindows that have had map requests. However, it also raises the specified window to the top of the stack. .LP .ZN XMapRaised can generate a .ZN BadWindow error. .LP The .ZN XMapSubwindows .IN "XMapSubwindows" function maps all subwindows for a specified window in top-to-bottom stacking order. The X server generates .ZN Expose events on each newly displayed window. This may be much more efficient than mapping many windows one at a time because the server needs to perform much of the work only once, for all of the windows, rather than for each window. .LP .ZN XMapSubwindows can generate a .ZN BadWindow error. .SH DIAGNOSTICS .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XChangeWindowAttributes(__libmansuffix__), XConfigureWindow(__libmansuffix__), XCreateWindow(__libmansuffix__), XDestroyWindow(__libmansuffix__), XRaiseWindow(__libmansuffix__), XUnmapWindow(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XSetClipOrigin.man000064401431060000012000000157571247741723500172100ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XSetClipOrigin __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XSetClipOrigin, XSetClipMask, XSetClipRectangles \- GC convenience routines .SH SYNTAX .HP int XSetClipOrigin\^(\^Display *\fIdisplay\fP\^, GC \fIgc\fP\^, int \fIclip_x_origin\fP\^, int \fIclip_y_origin\fP\^); .HP int XSetClipMask\^(\^Display *\fIdisplay\fP\^, GC \fIgc\fP\^, Pixmap \fIpixmap\fP\^); .HP int XSetClipRectangles\^(\^Display *\fIdisplay\fP\^, GC \fIgc\fP\^, int \fIclip_x_origin\fP\^, int \fIclip_y_origin\fP\^, XRectangle \fIrectangles\fP[]\^, int \fIn\fP\^, int \fIordering\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIclip_x_origin\fP 1i .br .ns .IP \fIclip_y_origin\fP 1i Specify the x and y coordinates of the clip-mask origin. .IP \fIgc\fP 1i Specifies the GC. .IP \fIn\fP 1i Specifies the number of rectangles. .IP \fIordering\fP 1i Specifies the ordering relations on the rectangles. You can pass .ZN Unsorted , .ZN YSorted , .ZN YXSorted , or .ZN YXBanded . .IP \fIpixmap\fP 1i Specifies the pixmap or .ZN None . .IP \fIrectangles\fP 1i Specifies an array of rectangles that define the clip-mask. .SH DESCRIPTION The .ZN XSetClipOrigin function sets the clip origin in the specified GC. The clip-mask origin is interpreted relative to the origin of whatever destination drawable is specified in the graphics request. .LP .ZN XSetClipOrigin can generate .ZN BadAlloc and .ZN BadGC errors. .LP The .ZN XSetClipMask function sets the clip-mask in the specified GC to the specified pixmap. If the clip-mask is set to .ZN None , the pixels are are always drawn (regardless of the clip-origin). .LP .ZN XSetClipMask can generate .ZN BadAlloc , .ZN BadGC , .ZN BadMatch , and .ZN BadValue errors. .LP The .ZN XSetClipRectangles function changes the clip-mask in the specified GC to the specified list of rectangles and sets the clip origin. The output is clipped to remain contained within the rectangles. The clip-origin is interpreted relative to the origin of whatever destination drawable is specified in a graphics request. The rectangle coordinates are interpreted relative to the clip-origin. The rectangles should be nonintersecting, or the graphics results will be undefined. Note that the list of rectangles can be empty, which effectively disables output. This is the opposite of passing .ZN None as the clip-mask in .ZN XCreateGC , .ZN XChangeGC , and .ZN XSetClipMask . .LP If known by the client, ordering relations on the rectangles can be specified with the ordering argument. This may provide faster operation by the server. If an incorrect ordering is specified, the X server may generate a .ZN BadMatch error, but it is not required to do so. If no error is generated, the graphics results are undefined. .ZN Unsorted means the rectangles are in arbitrary order. .ZN YSorted means that the rectangles are nondecreasing in their Y origin. .ZN YXSorted additionally constrains .ZN YSorted order in that all rectangles with an equal Y origin are nondecreasing in their X origin. .ZN YXBanded additionally constrains .ZN YXSorted by requiring that, for every possible Y scanline, all rectangles that include that scanline have an identical Y origins and Y extents. .LP .ZN XSetClipRectangles can generate .ZN BadAlloc , .ZN BadGC , .ZN BadMatch , and .ZN BadValue errors. .SH DIAGNOSTICS .TP 1i .ZN BadAlloc The server failed to allocate the requested resource or server memory. .TP 1i .ZN BadGC A value for a GContext argument does not name a defined GContext. .TP 1i .ZN BadMatch Some argument or pair of arguments has the correct type and range but fails to match in some other way required by the request. .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .SH "SEE ALSO" XCreateGC(__libmansuffix__), XDrawRectangle(__libmansuffix__), XQueryBestSize(__libmansuffix__), XSetArcMode(__libmansuffix__), XSetFillStyle(__libmansuffix__), XSetFont(__libmansuffix__), XSetLineAttributes(__libmansuffix__), XSetState(__libmansuffix__), XSetTile(__libmansuffix__) .br \fI\*(xL\fP _origin\fP 1i SpelibX11-1.6.3/man/XcmsFreeCCC.man000064401431060000012000000000671247741723500163560ustar00alancstaff00002660200006.so man__libmansuffix__/XcmsCreateCCC.__libmansuffix__ libX11-1.6.3/man/XOMOfOC.man000064401431060000012000000000631247741723500154770ustar00alancstaff00002660200006.so man__libmansuffix__/XCreateOC.__libmansuffix__ libX11-1.6.3/man/XrmOptionDescRec.man000064401431060000012000000000671247741723500175210ustar00alancstaff00002660200006.so man__libmansuffix__/XrmInitialize.__libmansuffix__ libX11-1.6.3/man/XwcDrawText.man000064401431060000012000000000651247741723500165530ustar00alancstaff00002660200006.so man__libmansuffix__/XmbDrawText.__libmansuffix__ libX11-1.6.3/man/XContextualDrawing.man000064401431060000012000000000711247741723500201160ustar00alancstaff00002660200006.so man__libmansuffix__/XFontsOfFontSet.__libmansuffix__ libX11-1.6.3/man/XLookupString.man000064401431060000012000000000671247741723500171210ustar00alancstaff00002660200006.so man__libmansuffix__/XLookupKeysym.__libmansuffix__ libX11-1.6.3/man/XAddPixel.man000064401431060000012000000000641247741723500161500ustar00alancstaff00002660200006.so man__libmansuffix__/XInitImage.__libmansuffix__ libX11-1.6.3/man/XGenericEventCookie.man000064401431060000012000000000671247741723500201710ustar00alancstaff00002660200006.so man__libmansuffix__/XGetEventData.__libmansuffix__ libX11-1.6.3/man/XColormapEvent.man000064401431060000012000000136221247741723500172400ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XColormapEvent __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XColormapEvent \- ColormapNotify event structure .SH STRUCTURES The structure for .ZN ColormapNotify events contains: .LP .Ds 0 typedef struct { int type; /\&* ColormapNotify */ unsigned long serial; /\&* # of last request processed by server */ Bool send_event; /\&* true if this came from a SendEvent request */ Display *display; /\&* Display the event was read from */ Window window; Colormap colormap; /\&* colormap or None */ Bool new; int state; /\&* ColormapInstalled, ColormapUninstalled */ } XColormapEvent; .De .LP When you receive this event, the structure members are set as follows. .LP The type member is set to the event type constant name that uniquely identifies it. For example, when the X server reports a .ZN GraphicsExpose event to a client application, it sends an .ZN XGraphicsExposeEvent structure with the type member set to .ZN GraphicsExpose . The display member is set to a pointer to the display the event was read on. The send_event member is set to .ZN True if the event came from a .ZN SendEvent protocol request. The serial member is set from the serial number reported in the protocol but expanded from the 16-bit least-significant bits to a full 32-bit value. The window member is set to the window that is most useful to toolkit dispatchers. .LP The window member is set to the window whose associated colormap is changed, installed, or uninstalled. For a colormap that is changed, installed, or uninstalled, the colormap member is set to the colormap associated with the window. For a colormap that is changed by a call to .ZN XFreeColormap , the colormap member is set to .ZN None . The new member is set to indicate whether the colormap for the specified window was changed or installed or uninstalled and can be .ZN True or .ZN False . If it is .ZN True , the colormap was changed. If it is .ZN False , the colormap was installed or uninstalled. The state member is always set to indicate whether the colormap is installed or uninstalled and can be .ZN ColormapInstalled or .ZN ColormapUninstalled . .SH "SEE ALSO" XAnyEvent(__libmansuffix__), XButtonEvent(__libmansuffix__), XCreateWindowEvent(__libmansuffix__), XCirculateEvent(__libmansuffix__), XCirculateRequestEvent(__libmansuffix__), XConfigureEvent(__libmansuffix__), XConfigureRequestEvent(__libmansuffix__), XCreateColormap(__libmansuffix__), XCrossingEvent(__libmansuffix__), XDestroyWindowEvent(__libmansuffix__), XErrorEvent(__libmansuffix__), XExposeEvent(__libmansuffix__), XFocusChangeEvent(__libmansuffix__), XGraphicsExposeEvent(__libmansuffix__), XGravityEvent(__libmansuffix__), XKeymapEvent(__libmansuffix__), XMapEvent(__libmansuffix__), XMapRequestEvent(__libmansuffix__), XPropertyEvent(__libmansuffix__), XReparentEvent(__libmansuffix__), XResizeRequestEvent(__libmansuffix__), XSelectionClearEvent(__libmansuffix__), XSelectionEvent(__libmansuffix__), XSelectionRequestEvent(__libmansuffix__), XUnmapEvent(__libmansuffix__), XVisibilityEvent(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XTranslateCoordinates.man000064401431060000012000000106271247741723500206140ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XTranslateCoordinates __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XTranslateCoordinates \- translate window coordinates .SH SYNTAX .HP Bool XTranslateCoordinates\^(\^Display *\fIdisplay\fP\^, Window \fIsrc_w\fP\^, \fIdest_w\fP\^, int \fIsrc_x\fP\^, int \fIsrc_y\fP\^, int *\fIdest_x_return\fP\^, int *\fIdest_y_return\fP\^, Window *\fIchild_return\fP\^); .SH ARGUMENTS .IP \fIchild_return\fP 1i Returns the child if the coordinates are contained in a mapped child of the destination window. .IP \fIdest_w\fP 1i Specifies the destination window. .IP \fIdest_x_return\fP 1i .br .ns .IP \fIdest_y_return\fP 1i Return the x and y coordinates within the destination window. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIsrc_w\fP 1i Specifies the source window. .IP \fIsrc_x\fP 1i .br .ns .IP \fIsrc_y\fP 1i Specify the x and y coordinates within the source window. .SH DESCRIPTION If .ZN XTranslateCoordinates returns .ZN True , it takes the src_x and src_y coordinates relative to the source window's origin and returns these coordinates to dest_x_return and dest_y_return relative to the destination window's origin. If .ZN XTranslateCoordinates returns .ZN False , src_w and dest_w are on different screens, and dest_x_return and dest_y_return are zero. If the coordinates are contained in a mapped child of dest_w, that child is returned to child_return. Otherwise, child_return is set to .ZN None . .LP .ZN XTranslateCoordinates can generate a .ZN BadWindow error. .SH DIAGNOSTICS .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" \fI\*(xL\fP libX11-1.6.3/man/DefaultScreen.man000064401431060000012000000000631247741723500170510ustar00alancstaff00002660200006.so man__libmansuffix__/AllPlanes.__libmansuffix__ libX11-1.6.3/man/XrmQGetResource.man000064401431060000012000000000701247741723500173620ustar00alancstaff00002660200006.so man__libmansuffix__/XrmGetResource.__libmansuffix__ libX11-1.6.3/man/XFreeFontNames.man000064401431060000012000000000641247741723500171520ustar00alancstaff00002660200006.so man__libmansuffix__/XListFonts.__libmansuffix__ libX11-1.6.3/man/XUniqueContext.man000064401431060000012000000000661247741723500172730ustar00alancstaff00002660200006.so man__libmansuffix__/XSaveContext.__libmansuffix__ libX11-1.6.3/man/XChangeSaveSet.man000064401431060000012000000116471247741723500171470ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XChangeSaveSet __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XChangeSaveSet, XAddToSaveSet, XRemoveFromSaveSet \- change a client's save set .SH SYNTAX .HP int XChangeSaveSet\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, int \fIchange_mode\fP\^); .HP int XAddToSaveSet\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^); .HP int XRemoveFromSaveSet\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^); .SH ARGUMENTS .IP \fIchange_mode\fP 1i Specifies the mode. You can pass .ZN SetModeInsert or .ZN SetModeDelete . .IP \fIdisplay\fP 1i Specifies the connection to the X server. .ds Wi that you want to add or delete from the client's save-set .IP \fIw\fP 1i Specifies the window \*(Wi. .SH DESCRIPTION Depending on the specified mode, .ZN XChangeSaveSet either inserts or deletes the specified window from the client's save-set. The specified window must have been created by some other client, or a .ZN BadMatch error results. .LP .ZN XChangeSaveSet can generate .ZN BadMatch , .ZN BadValue , and .ZN BadWindow errors. .LP The .ZN XAddToSaveSet function adds the specified window to the client's save-set. The specified window must have been created by some other client, or a .ZN BadMatch error results. .LP .ZN XAddToSaveSet can generate .ZN BadMatch and .ZN BadWindow errors. .LP The .ZN XRemoveFromSaveSet function removes the specified window from the client's save-set. The specified window must have been created by some other client, or a .ZN BadMatch error results. .LP .ZN XRemoveFromSaveSet can generate .ZN BadMatch and .ZN BadWindow errors. .SH DIAGNOSTICS .TP 1i .ZN BadMatch Some argument or pair of arguments has the correct type and range but fails to match in some other way required by the request. .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XReparentWindow(__libmansuffix__) .br \fI\*(xL\fP .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0libX11-1.6.3/man/XKeysymToKeycode.man000064401431060000012000000000711247741723500175440ustar00alancstaff00002660200006.so man__libmansuffix__/XStringToKeysym.__libmansuffix__ libX11-1.6.3/man/XwcDrawString.man000064401431060000012000000000671247741723500170770ustar00alancstaff00002660200006.so man__libmansuffix__/XmbDrawString.__libmansuffix__ libX11-1.6.3/man/XSetWMNormalHints.man000064401431060000012000000000711247741723500176320ustar00alancstaff00002660200006.so man__libmansuffix__/XAllocSizeHints.__libmansuffix__ libX11-1.6.3/man/ImageByteOrder.man000064401431060000012000000131461247741723500171750ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH ImageByteOrder __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME ImageByteOrder, BitmapBitOrder, BitmapPad, BitmapUnit, DisplayHeight, DisplayHeightMM, DisplayWidth, DisplayWidthMM, XListPixmapFormats, XPixmapFormatValues \- image format functions and macros .SH SYNTAX .HP XPixmapFormatValues *XListPixmapFormats\^(\^Display *\fIdisplay\fP, int *\fIcount_return\fP\^); .HP int ImageByteOrder\^(\^Display *\fIdisplay\fP\^); .HP int BitmapBitOrder\^(\^Display *\fIdisplay\fP\^); .HP int BitmapPad\^(\^Display *\fIdisplay\fP\^); .HP int BitmapUnit\^(\^Display *\fIdisplay\fP\^); .HP int DisplayHeight\^(\^Display *\fIdisplay\fP\^, \^int \fIscreen_number\fP\^); .HP int DisplayHeightMM\^(\^Display *\fIdisplay\fP\^, \^int \fIscreen_number\fP\^); .HP int DisplayWidth\^(\^Display *\fIdisplay\fP\^, \^int \fIscreen_number\fP\^); .HP int DisplayWidthMM\^(\^Display *\fIdisplay\fP\^, \^int \fIscreen_number\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .ds Cn pixmap formats that are supported by the display .IP \fIcount_return\fP 1i Returns the number of \*(Cn. .IP \fIscreen_number\fP 1i Specifies the appropriate screen number on the host server. .SH DESCRIPTION The .ZN XListPixmapFormats function returns an array of .ZN XPixmapFormatValues structures that describe the types of Z format images supported by the specified display. If insufficient memory is available, .ZN XListPixmapFormats returns NULL. To free the allocated storage for the .ZN XPixmapFormatValues structures, use .ZN XFree . .LP The .ZN ImageByteOrder macro specifies the required byte order for images for each scanline unit in XY format (bitmap) or for each pixel value in Z format. .LP The .ZN BitmapBitOrder macro returns .ZN LSBFirst or .ZN MSBFirst to indicate whether the leftmost bit in the bitmap as displayed on the screen is the least or most significant bit in the unit. .LP The .ZN BitmapPad macro returns the number of bits that each scanline must be padded. .LP The .ZN BitmapUnit macro returns the size of a bitmap's scanline unit in bits. .LP The .ZN DisplayHeight macro returns the height of the specified screen in pixels. .LP The .ZN DisplayHeightMM macro returns the height of the specified screen in millimeters. .LP The .ZN DisplayWidth macro returns the width of the screen in pixels. .LP The .ZN DisplayWidthMM macro returns the width of the specified screen in millimeters. .SH STRUCTURES The .ZN XPixmapFormatValues structure provides an interface to the pixmap format information that is returned at the time of a connection setup. It contains: .Ds 0 typedef struct { int depth; int bits_per_pixel; int scanline_pad; } XPixmapFormatValues; .De .SH "SEE ALSO" AllPlanes(__libmansuffix__), BlackPixelOfScreen(__libmansuffix__), IsCursorKey(__libmansuffix__), XFree(__libmansuffix__) .br \fI\*(xL\fP this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" DigilibX11-1.6.3/man/XAllocNamedColor.man000064401431060000012000000000651247741723500174550ustar00alancstaff00002660200006.so man__libmansuffix__/XAllocColor.__libmansuffix__ libX11-1.6.3/man/XSetFillRule.man000064401431060000012000000000671247741723500166530ustar00alancstaff00002660200006.so man__libmansuffix__/XSetFillStyle.__libmansuffix__ libX11-1.6.3/man/XQueryKeymap.man000064401431060000012000000001001247741723500167210ustar00alancstaff00002660200006.so man__libmansuffix__/XChangeKeyboardControl.__libmansuffix__ libX11-1.6.3/man/XAllocSizeHints.man000064401431060000012000000265421247741723500173620ustar00alancstaff00002660200006'\" t .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface, \fRO'Reilly and Associates, .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 '\" t .TH XAllocSizeHints __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XAllocSizeHints, XSetWMNormalHints, XGetWMNormalHints, XSetWMSizeHints, XGetWMSizeHints, XSizeHints \- allocate size hints structure and set or read a window's WM_NORMAL_HINTS property .SH SYNTAX .HP XSizeHints *XAllocSizeHints\^(void\^); .HP void XSetWMNormalHints\^(\^Display *\fIdisplay\fP, Window \fIw\fP, XSizeHints *\fIhints\fP\^); .HP Status XGetWMNormalHints\^(\^Display *\fIdisplay\fP, Window \fIw\fP, XSizeHints *\fIhints_return\fP, long *\fIsupplied_return\fP\^); .HP void XSetWMSizeHints\^(\^Display *\fIdisplay\fP, Window \fIw\fP, XSizeHints *\fIhints\fP, Atom \fIproperty\fP\^); .HP Status XGetWMSizeHints\^(\^Display *\fIdisplay\fP, Window \fIw\fP, XSizeHints *\fIhints_return\fP, long *\fIsupplied_return\fP, Atom \fIproperty\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIhints\fP 1i Specifies the size hints for the window in its normal state. .IP \fIhints\fP 1i Specifies the .ZN XSizeHints structure to be used. .IP \fIhints_return\fP 1i Returns the size hints for the window in its normal state. .IP \fIproperty\fP 1i Specifies the property name. .IP \fIsupplied_return\fP 1i Returns the hints that were supplied by the user. .IP \fIw\fP 1i Specifies the window. .SH DESCRIPTION The .ZN XAllocSizeHints function allocates and returns a pointer to a .ZN XSizeHints structure. Note that all fields in the .ZN XSizeHints structure are initially set to zero. If insufficient memory is available, .ZN XAllocSizeHints returns NULL. To free the memory allocated to this structure, use .ZN XFree . .LP The .ZN XSetWMNormalHints function replaces the size hints for the WM_NORMAL_HINTS property on the specified window. If the property does not already exist, .ZN XSetWMNormalHints sets the size hints for the WM_NORMAL_HINTS property on the specified window. The property is stored with a type of WM_SIZE_HINTS and a format of 32. .LP .ZN XSetWMNormalHints can generate .ZN BadAlloc and .ZN BadWindow errors. .LP The .ZN XGetWMNormalHints function returns the size hints stored in the WM_NORMAL_HINTS property on the specified window. If the property is of type WM_SIZE_HINTS, is of format 32, and is long enough to contain either an old (pre-ICCCM) or new size hints structure, .ZN XGetWMNormalHints sets the various fields of the .ZN XSizeHints structure, sets the supplied_return argument to the list of fields that were supplied by the user (whether or not they contained defined values), and returns a nonzero status. Otherwise, it returns a zero status. .LP If .ZN XGetWMNormalHints returns successfully and a pre-ICCCM size hints property is read, the supplied_return argument will contain the following bits: .LP .Ds (USPosition|USSize|PPosition|PSize|PMinSize| PMaxSize|PResizeInc|PAspect) .De .LP If the property is large enough to contain the base size and window gravity fields as well, the supplied_return argument will also contain the following bits: .LP .Ds PBaseSize|PWinGravity .De .LP .ZN XGetWMNormalHints can generate a PN BadWindow error. .LP The .ZN XSetWMSizeHints function replaces the size hints for the specified property on the named window. If the specified property does not already exist, .ZN XSetWMSizeHints sets the size hints for the specified property on the named window. The property is stored with a type of WM_SIZE_HINTS and a format of 32. To set a window's normal size hints, you can use the .ZN XSetWMNormalHints function. .LP .ZN XSetWMSizeHints can generate .ZN BadAlloc , .ZN BadAtom , and .ZN BadWindow errors. .LP The .ZN XGetWMSizeHints function returns the size hints stored in the specified property on the named window. If the property is of type WM_SIZE_HINTS, is of format 32, and is long enough to contain either an old (pre-ICCCM) or new size hints structure, .ZN XGetWMSizeHints sets the various fields of the .ZN XSizeHints structure, sets the supplied_return argument to the list of fields that were supplied by the user (whether or not they contained defined values), and returns a nonzero status. Otherwise, it returns a zero status. To get a window's normal size hints, you can use the .ZN XGetWMNormalHints function. .LP If .ZN XGetWMSizeHints returns successfully and a pre-ICCCM size hints property is read, the supplied_return argument will contain the following bits: .LP .Ds (USPosition|USSize|PPosition|PSize|PMinSize| PMaxSize|PResizeInc|PAspect) .De .LP If the property is large enough to contain the base size and window gravity fields as well, the supplied_return argument will also contain the following bits: .LP .Ds PBaseSize|PWinGravity .De .LP .ZN XGetWMSizeHints can generate .ZN BadAtom and .ZN BadWindow errors. .SH PROPERTIES .TP 1i \s-1WM_NORMAL_HINTS\s+1 Size hints for a window in its normal state. The C type of this property is .ZN XSizeHints . .SH STRUCTURES The .ZN XSizeHints structure contains: .LP /\&* Size hints mask bits */ .TS lw(.5i) lw(1.1i) lw(1.5i) lw(3.1i). T{ \&#define T} T{ .ZN USPosition T} T{ (1L << 0) T} T{ /\&* user specified x, y */ T} T{ \&#define T} T{ .ZN USSize T} T{ (1L << 1) T} T{ /\&* user specified width, height */ T} T{ \&#define T} T{ .ZN PPosition T} T{ (1L << 2) T} T{ /\&* program specified position */ T} T{ \&#define T} T{ .ZN PSize T} T{ (1L << 3) T} T{ /\&* program specified size */ T} T{ \&#define T} T{ .ZN PMinSize T} T{ (1L << 4) T} T{ /\&* program specified minimum size */ T} T{ \&#define T} T{ .ZN PMaxSize T} T{ (1L << 5) T} T{ /\&* program specified maximum size */ T} T{ \&#define T} T{ .ZN PResizeInc T} T{ (1L << 6) T} T{ /\&* program specified resize increments */ T} T{ \&#define T} T{ .ZN PAspect T} T{ (1L << 7) T} T{ /\&* program specified min and max aspect ratios */ T} T{ \&#define T} T{ .ZN PBaseSize T} T{ (1L << 8) T} T{ \&#define T} T{ .ZN PWinGravity T} T{ (1L << 9) T} T{ \&#define T} T{ .ZN PAllHints T} T{ (PPosition|PSize| .br PMinSize|PMaxSize| .br PResizeInc|PAspect) T} T{ T} .TE .IN "XSizeHints" "" "@DEF@" .Ds 0 /\&* Values */ typedef struct { long flags; /\&* marks which fields in this structure are defined */ int x, y; /\&* Obsolete */ int width, height; /\&* Obsolete */ int min_width, min_height; int max_width, max_height; int width_inc, height_inc; struct { int x; /\&* numerator */ int y; /\&* denominator */ } min_aspect, max_aspect; int base_width, base_height; int win_gravity; /\&* this structure may be extended in the future */ } XSizeHints; .De .LP The x, y, width, and height members are now obsolete and are left solely for compatibility reasons. The min_width and min_height members specify the minimum window size that still allows the application to be useful. The max_width and max_height members specify the maximum window size. The width_inc and height_inc members define an arithmetic progression of sizes (minimum to maximum) into which the window prefers to be resized. The min_aspect and max_aspect members are expressed as ratios of x and y, and they allow an application to specify the range of aspect ratios it prefers. The base_width and base_height members define the desired size of the window. The window manager will interpret the position of the window and its border width to position the point of the outer rectangle of the overall window specified by the win_gravity member. The outer rectangle of the window includes any borders or decorations supplied by the window manager. In other words, if the window manager decides to place the window where the client asked, the position on the parent window's border named by the win_gravity will be placed where the client window would have been placed in the absence of a window manager. .LP Note that use of the .ZN PAllHints macro is highly discouraged. .SH DIAGNOSTICS .TP 1i .ZN BadAlloc The server failed to allocate the requested resource or server memory. .TP 1i .ZN BadAtom A value for an Atom argument does not name a defined Atom. .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XAllocClassHint(__libmansuffix__), XAllocIconSize(__libmansuffix__), XAllocWMHints(__libmansuffix__), XFree(__libmansuffix__), XSetCommand(__libmansuffix__), XSetTransientForHint(__libmansuffix__), XSetTextProperty(__libmansuffix__), XSetWMClientMachine(__libmansuffix__), XSetWMColormapWindows(__libmansuffix__), XSetWMIconName(__libmansuffix__), XSetWMName(__libmansuffix__), XSetWMProperties(__libmansuffix__), XSetWMProtocols(__libmansuffix__), XStringListToTextProperty(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XGetGeometry.man000064401431060000012000000000761247741723500167140ustar00alancstaff00002660200006.so man__libmansuffix__/XGetWindowAttributes.__libmansuffix__ libX11-1.6.3/man/XGetScreenSaver.man000064401431060000012000000000711247741723500173340ustar00alancstaff00002660200006.so man__libmansuffix__/XSetScreenSaver.__libmansuffix__ libX11-1.6.3/man/XCreatePixmap.man000064401431060000012000000123411247741723500170410ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XCreatePixmap __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XCreatePixmap, XFreePixmap \- create or destroy pixmaps .SH SYNTAX .HP Pixmap XCreatePixmap\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, unsigned int \fIwidth\fP\^, unsigned int \fIheight\fP\^, unsigned int \fIdepth\fP\^); .HP int XFreePixmap\^(\^Display *\fIdisplay\fP\^, Pixmap \fIpixmap\fP\^); .SH ARGUMENTS .IP \fId\fP 1i Specifies which screen the pixmap is created on. .IP \fIdepth\fP 1i Specifies the depth of the pixmap. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIpixmap\fP 1i Specifies the pixmap. .ds Wh , which define the dimensions of the pixmap .IP \fIwidth\fP 1i .br .ns .IP \fIheight\fP 1i Specify the width and height\*(Wh. .SH DESCRIPTION The .ZN XCreatePixmap function creates a pixmap of the width, height, and depth you specified and returns a pixmap ID that identifies it. It is valid to pass an .ZN InputOnly window to the drawable argument. The width and height arguments must be nonzero, or a .ZN BadValue error results. The depth argument must be one of the depths supported by the screen of the specified drawable, or a .ZN BadValue error results. .LP The server uses the specified drawable to determine on which screen to create the pixmap. The pixmap can be used only on this screen and only with other drawables of the same depth (see .ZN XCopyPlane for an exception to this rule). The initial contents of the pixmap are undefined. .LP .ZN XCreatePixmap can generate .ZN BadAlloc , .ZN BadDrawable , and .ZN BadValue errors. .LP The .ZN XFreePixmap function first deletes the association between the pixmap ID and the pixmap. Then, the X server frees the pixmap storage when there are no references to it. The pixmap should never be referenced again. .LP .ZN XFreePixmap can generate a .ZN BadPixmap error. .SH DIAGNOSTICS .TP 1i .ZN BadAlloc The server failed to allocate the requested resource or server memory. .TP 1i .ZN BadDrawable A value for a Drawable argument does not name a defined Window or Pixmap. .TP 1i .ZN BadPixmap A value for a Pixmap argument does not name a defined Pixmap. .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .SH "SEE ALSO" XCopyArea(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XUngrabButton.man000064401431060000012000000000651247741723500170710ustar00alancstaff00002660200006.so man__libmansuffix__/XGrabButton.__libmansuffix__ libX11-1.6.3/man/XCheckTypedWindowEvent.man000064401431060000012000000000641247741723500206730ustar00alancstaff00002660200006.so man__libmansuffix__/XNextEvent.__libmansuffix__ libX11-1.6.3/man/XTextExtents.man000064401431060000012000000173611247741723500167650ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XTextExtents __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XTextExtents, XTextExtents16, XQueryTextExtents, XQueryTextExtents16 \- compute or query text extents .SH SYNTAX .HP int XTextExtents\^(\^XFontStruct *\fIfont_struct\fP\^, char *\fIstring\fP\^, int \fInchars\fP\^, int *\fIdirection_return\fP\^, int *\fIfont_ascent_return\fP, int *\fIfont_descent_return\fP\^, XCharStruct *\fIoverall_return\fP\^); .HP int XTextExtents16\^(\^XFontStruct *\fIfont_struct\fP\^, XChar2b *\fIstring\fP\^, int \fInchars\fP\^, int *\fIdirection_return\fP\^, int *\fIfont_ascent_return\fP, int *\fIfont_descent_return\fP\^, XCharStruct *\fIoverall_return\fP\^); .HP int XQueryTextExtents\^(\^Display *\fIdisplay\fP\^, XID \fIfont_ID\fP\^, char *\fIstring\fP\^, int \fInchars\fP\^, int *\fIdirection_return\fP\^, int *\fIfont_ascent_return\fP, int *\fIfont_descent_return\fP\^, XCharStruct *\fIoverall_return\fP\^); .HP int XQueryTextExtents16\^(\^Display *\fIdisplay\fP\^, XID \fIfont_ID\fP\^, XChar2b *\fIstring\fP\^, int \fInchars\fP\^, int *\fIdirection_return\fP\^, int *\fIfont_ascent_return\fP, int *\fIfont_descent_return\fP\^, XCharStruct *\fIoverall_return\fP\^); .SH ARGUMENTS .IP \fIdirection_return\fP 1i Returns the value of the direction hint .Pn ( FontLeftToRight or .ZN FontRightToLeft ). .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIfont_ID\fP 1i Specifies either the font ID or the .ZN GContext ID that contains the font. .IP \fIfont_ascent_return\fP 1i Returns the font ascent. .IP \fIfont_descent_return\fP 1i Returns the font descent. .IP \fIfont_struct\fP 1i Specifies the .ZN XFontStruct structure. .IP \fInchars\fP 1i Specifies the number of characters in the character string. .IP \fIstring\fP 1i Specifies the character string. .IP \fIoverall_return\fP 1i Returns the overall size in the specified .ZN XCharStruct structure. .SH DESCRIPTION The .ZN XTextExtents and .ZN XTextExtents16 functions perform the size computation locally and, thereby, avoid the round-trip overhead of .ZN XQueryTextExtents and .ZN XQueryTextExtents16 . Both functions return an .ZN XCharStruct structure, whose members are set to the values as follows. .LP The ascent member is set to the maximum of the ascent metrics of all characters in the string. The descent member is set to the maximum of the descent metrics. The width member is set to the sum of the character-width metrics of all characters in the string. For each character in the string, let W be the sum of the character-width metrics of all characters preceding it in the string. Let L be the left-side-bearing metric of the character plus W. Let R be the right-side-bearing metric of the character plus W. The lbearing member is set to the minimum L of all characters in the string. The rbearing member is set to the maximum R. .LP For fonts defined with linear indexing rather than 2-byte matrix indexing, each .ZN XChar2b structure is interpreted as a 16-bit number with byte1 as the most significant byte. If the font has no defined default character, undefined characters in the string are taken to have all zero metrics. .LP The .ZN XQueryTextExtents and .ZN XQueryTextExtents16 functions return the bounding box of the specified 8-bit and 16-bit character string in the specified font or the font contained in the specified GC. These functions query the X server and, therefore, suffer the round-trip overhead that is avoided by .ZN XTextExtents and .ZN XTextExtents16 . Both functions return a .ZN XCharStruct structure, whose members are set to the values as follows. .LP The ascent member is set to the maximum of the ascent metrics of all characters in the string. The descent member is set to the maximum of the descent metrics. The width member is set to the sum of the character-width metrics of all characters in the string. For each character in the string, let W be the sum of the character-width metrics of all characters preceding it in the string. Let L be the left-side-bearing metric of the character plus W. Let R be the right-side-bearing metric of the character plus W. The lbearing member is set to the minimum L of all characters in the string. The rbearing member is set to the maximum R. .LP For fonts defined with linear indexing rather than 2-byte matrix indexing, each .ZN XChar2b structure is interpreted as a 16-bit number with byte1 as the most significant byte. If the font has no defined default character, undefined characters in the string are taken to have all zero metrics. .LP Characters with all zero metrics are ignored. If the font has no defined default_char, the undefined characters in the string are also ignored. .LP .ZN XQueryTextExtents and .ZN XQueryTextExtents16 can generate .ZN BadFont and .ZN BadGC errors. .SH DIAGNOSTICS .TP 1i .ZN BadFont A value for a Font or GContext argument does not name a defined Font. .TP 1i .ZN BadGC A value for a GContext argument does not name a defined GContext. .SH "SEE ALSO" XLoadFont(__libmansuffix__), XTextWidth(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XrmQPutResource.man000064401431060000012000000000701247741723500174130ustar00alancstaff00002660200006.so man__libmansuffix__/XrmPutResource.__libmansuffix__ libX11-1.6.3/man/XRecolorCursor.man000064401431060000012000000125641247741723500172710ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XRecolorCursor __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XRecolorCursor, XFreeCursor, XQueryBestCursor \- manipulate cursors .SH SYNTAX .HP int XRecolorCursor\^(\^Display *\fIdisplay\fP\^, Cursor \fIcursor\fP\^, XColor *\fIforeground_color\fP\^, XColor *\fIbackground_color\fP\^); .HP int XFreeCursor\^(\^Display *\fIdisplay\fP\^, Cursor \fIcursor\fP\^); .HP Status XQueryBestCursor\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, unsigned int \fIwidth\fP\^, unsigned int \fIheight\fP\^, unsigned int *\fIwidth_return\fP\^, unsigned int *\fIheight_return\fP\^); .SH ARGUMENTS .IP \fIbackground_color\fP 1i Specifies the RGB values for the background of the source. .IP \fIcursor\fP 1i Specifies the cursor. .ds Dr , which indicates the screen .IP \fId\fP 1i Specifies the drawable\*(Dr. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIforeground_color\fP 1i Specifies the RGB values for the foreground of the source. .ds Wh of the cursor that you want the size information for .IP \fIwidth\fP 1i .br .ns .IP \fIheight\fP 1i Specify the width and height\*(Wh. .IP \fIwidth_return\fP 1i .br .ns .IP \fIheight_return\fP 1i Return the best width and height that is closest to the specified width and height. .SH DESCRIPTION The .ZN XRecolorCursor function changes the color of the specified cursor, and if the cursor is being displayed on a screen, the change is visible immediately. The pixel members of the .ZN XColor structures are ignored; only the RGB values are used. .LP .ZN XRecolorCursor can generate a .ZN BadCursor error. .LP The .ZN XFreeCursor function deletes the association between the cursor resource ID and the specified cursor. The cursor storage is freed when no other resource references it. The specified cursor ID should not be referred to again. .LP .ZN XFreeCursor can generate a .ZN BadCursor error. .LP Some displays allow larger cursors than other displays. The .ZN XQueryBestCursor function provides a way to find out what size cursors are actually possible on the display. .IN "Cursor" "limitations" It returns the largest size that can be displayed. Applications should be prepared to use smaller cursors on displays that cannot support large ones. .LP .ZN XQueryBestCursor can generate a .ZN BadDrawable error. .SH DIAGNOSTICS .TP 1i .ZN BadCursor A value for a Cursor argument does not name a defined Cursor. .TP 1i .ZN BadDrawable A value for a Drawable argument does not name a defined Window or Pixmap. .SH "SEE ALSO" XCreateColormap(__libmansuffix__), XCreateFontCursor(__libmansuffix__), XDefineCursor(__libmansuffix__) .br \fI\*(xL\fP ions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0libX11-1.6.3/man/XcmsCIELuvQueryMinL.man000064401431060000012000000000751247741723500200600ustar00alancstaff00002660200006.so man__libmansuffix__/XcmsCIELuvQueryMaxC.__libmansuffix__ libX11-1.6.3/man/EventMaskOfScreen.man000064401431060000012000000000741247741723500176510ustar00alancstaff00002660200006.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__ libX11-1.6.3/man/XAllowEvents.man000064401431060000012000000100771247741723500167260ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XAllowEvents __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XAllowEvents \- release queued events .SH SYNTAX .HP int XAllowEvents\^(\^Display *\fIdisplay\fP, int \fIevent_mode\fP\^, Time \fItime\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIevent_mode\fP 1i Specifies the event mode. You can pass .ZN AsyncPointer , .ZN SyncPointer , .ZN AsyncKeyboard , .ZN SyncKeyboard , .ZN ReplayPointer , .ZN ReplayKeyboard , .ZN AsyncBoth , or .ZN SyncBoth . .IP \fItime\fP 1i Specifies the time. You can pass either a timestamp or .ZN CurrentTime . .SH DESCRIPTION The .ZN XAllowEvents function releases some queued events if the client has caused a device to freeze. It has no effect if the specified time is earlier than the last-grab time of the most recent active grab for the client or if the specified time is later than the current X server time. .LP .ZN XAllowEvents can generate a .ZN BadValue error. .SH DIAGNOSTICS .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .SH "SEE ALSO" \fI\*(xL\fP libX11-1.6.3/man/XDrawLines.man000064401431060000012000000000631247741723500163450ustar00alancstaff00002660200006.so man__libmansuffix__/XDrawLine.__libmansuffix__ libX11-1.6.3/man/DisplayCells.man000064401431060000012000000000631247741723500167150ustar00alancstaff00002660200006.so man__libmansuffix__/AllPlanes.__libmansuffix__ libX11-1.6.3/man/XAllocColorPlanes.man000064401431060000012000000000651247741723500176530ustar00alancstaff00002660200006.so man__libmansuffix__/XAllocColor.__libmansuffix__ libX11-1.6.3/man/XCopyColormapAndFree.man000064401431060000012000000000711247741723500203100ustar00alancstaff00002660200006.so man__libmansuffix__/XCreateColormap.__libmansuffix__ libX11-1.6.3/man/XcmsCIELuvQueryMaxL.man000064401431060000012000000000751247741723500200620ustar00alancstaff00002660200006.so man__libmansuffix__/XcmsCIELuvQueryMaxC.__libmansuffix__ libX11-1.6.3/man/XDeleteContext.man000064401431060000012000000000661247741723500172270ustar00alancstaff00002660200006.so man__libmansuffix__/XSaveContext.__libmansuffix__ libX11-1.6.3/man/XDrawPoint.man000064401431060000012000000131161247741723500163670ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XDrawPoint __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XDrawPoint, XDrawPoints, XPoint \- draw points and points structure .SH SYNTAX .HP int XDrawPoint\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, GC \fIgc\fP\^, int \fIx\fP\^, int \fIy\fP\^); .HP int XDrawPoints\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, GC \fIgc\fP\^, XPoint *\fIpoints\fP\^, int \fInpoints\fP\^, int \fImode\fP\^); .SH ARGUMENTS .IP \fId\fP 1i Specifies the drawable. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIgc\fP 1i Specifies the GC. .IP \fImode\fP 1i Specifies the coordinate mode. You can pass .ZN CoordModeOrigin or .ZN CoordModePrevious . .IP \fInpoints\fP 1i Specifies the number of points in the array. .IP \fIpoints\fP 1i Specifies an array of points. .IP \fIx\fP 1i .br .ns .IP \fIy\fP 1i Specify the x and y coordinates where you want the point drawn. .SH DESCRIPTION The .ZN XDrawPoint function uses the foreground pixel and function components of the GC to draw a single point into the specified drawable; .ZN XDrawPoints draws multiple points this way. .ZN CoordModeOrigin treats all coordinates as relative to the origin, and .ZN CoordModePrevious treats all coordinates after the first as relative to the previous point. .ZN XDrawPoints draws the points in the order listed in the array. .LP Both functions use these GC components: function, plane-mask, foreground, subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask. .LP .ZN XDrawPoint can generate .ZN BadDrawable , .ZN BadGC , and .ZN BadMatch errors. .ZN XDrawPoints can generate .ZN BadDrawable , .ZN BadGC , .ZN BadMatch , and .ZN BadValue errors. .SH STRUCTURES The .ZN XPoint structure contains: .LP .Ds 0 typedef struct { short x, y; } XPoint; .De .LP All x and y members are signed integers. The width and height members are 16-bit unsigned integers. You should be careful not to generate coordinates and sizes out of the 16-bit ranges, because the protocol only has 16-bit fields for these values. .SH DIAGNOSTICS .TP 1i .ZN BadDrawable A value for a Drawable argument does not name a defined Window or Pixmap. .TP 1i .ZN BadGC A value for a GContext argument does not name a defined GContext. .TP 1i .ZN BadMatch An .ZN InputOnly window is used as a Drawable. .TP 1i .ZN BadMatch Some argument or pair of arguments has the correct type and range but fails to match in some other way required by the request. .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .SH "SEE ALSO" XDrawArc(__libmansuffix__), XDrawLine(__libmansuffix__), XDrawRectangle(__libmansuffix__) .br \fI\*(xL\fP , modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" DigilibX11-1.6.3/man/XQueryBestStipple.man000064401431060000012000000000701247741723500177370ustar00alancstaff00002660200006.so man__libmansuffix__/XQueryBestSize.__libmansuffix__ libX11-1.6.3/man/XFillRectangles.man000064401431060000012000000000701247741723500173510ustar00alancstaff00002660200006.so man__libmansuffix__/XFillRectangle.__libmansuffix__ libX11-1.6.3/man/XSetWMColormapWindows.man000064401431060000012000000136271247741723500205360ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XSetWMColormapWindows __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XSetWMColormapWindows, XGetWMColormapWindows \- set or read a window's WM_COLORMAP_WINDOWS property .SH SYNTAX .HP Status XSetWMColormapWindows\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, Window *\fIcolormap_windows\fP\^, int \fIcount\fP\^); .HP Status XGetWMColormapWindows\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, Window **\fIcolormap_windows_return\fP\^, int *\fIcount_return\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIcolormap_windows\fP 1i Specifies the list of windows. .IP \fIcolormap_windows_return\fP 1i Returns the list of windows. .ds Cn windows in the list .IP \fIcount\fP 1i Specifies the number of \*(Cn. .ds Cn windows in the list .IP \fIcount_return\fP 1i Returns the number of \*(Cn. .IP \fIw\fP 1i Specifies the window. .SH DESCRIPTION The .ZN XSetWMColormapWindows function replaces the WM_COLORMAP_WINDOWS property on the specified window with the list of windows specified by the colormap_windows argument. It the property does not already exist, .ZN XSetWMColormapWindows sets the WM_COLORMAP_WINDOWS property on the specified window to the list of windows specified by the colormap_windows argument. The property is stored with a type of WINDOW and a format of 32. If it cannot intern the WM_COLORMAP_WINDOWS atom, .ZN XSetWMColormapWindows returns a zero status. Otherwise, it returns a nonzero status. .LP .ZN XSetWMColormapWindows can generate .ZN BadAlloc and .ZN BadWindow errors. .LP The .ZN XGetWMColormapWindows function returns the list of window identifiers stored in the WM_COLORMAP_WINDOWS property on the specified window. These identifiers indicate the colormaps that the window manager may need to install for this window. If the property exists, is of type WINDOW, is of format 32, and the atom WM_COLORMAP_WINDOWS can be interned, .ZN XGetWMColormapWindows sets the windows_return argument to a list of window identifiers, sets the count_return argument to the number of elements in the list, and returns a nonzero status. Otherwise, it sets neither of the return arguments and returns a zero status. To release the list of window identifiers, use .ZN XFree . .LP .ZN XGetWMColormapWindows can generate a .ZN BadWindow error. .SH PROPERTIES .TP 1i \s-1WM_COLORMAP_WINDOWS\s+1 The list of window IDs that may need a different colormap from that of their top-level window. .SH DIAGNOSTICS .TP 1i .ZN BadAlloc The server failed to allocate the requested resource or server memory. .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XAllocClassHint(__libmansuffix__), XAllocIconSize(__libmansuffix__), XAllocSizeHints(__libmansuffix__), XAllocWMHints(__libmansuffix__), XFree(__libmansuffix__), XSetCommand(__libmansuffix__), XSetTransientForHint(__libmansuffix__), XSetTextProperty(__libmansuffix__), XSetWMClientMachine(__libmansuffix__), XSetWMIconName(__libmansuffix__), XSetWMName(__libmansuffix__), XSetWMProperties(__libmansuffix__), XSetWMProtocols(__libmansuffix__), XStringListToTextProperty(__libmansuffix__) .br \fI\*(xL\fP or sell copies of the Software, and to .\" permit persons to whom the Software is furnished to do so, sublibX11-1.6.3/man/XFontSetExtents.man000064401431060000012000000106731247741723500174220ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XFontSetExtents __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XFontSetExtents \- XFontSetExtents structure .SH STRUCTURES The .ZN XFontSetExtents structure contains: .LP .Ds 0 typedef struct { XRectangle max_ink_extent; /\&* over all drawable characters */ XRectangle max_logical_extent; /\&* over all drawable characters */ } XFontSetExtents; .De .LP The .ZN XRectangle structures used to return font set metrics are the usual Xlib screen-oriented rectangles with x, y giving the upper left corner, and width and height always positive. .LP The max_ink_extent member gives the maximum extent, over all drawable characters, of the rectangles that bound the character glyph image drawn in the foreground color, relative to a constant origin. See .ZN XmbTextExtents and .ZN XwcTextExtents for detailed semantics. .LP The max_logical_extent member gives the maximum extent, over all drawable characters, of the rectangles that specify minimum spacing to other graphical features, relative to a constant origin. Other graphical features drawn by the client, for example, a border surrounding the text, should not intersect this rectangle. The max_logical_extent member should be used to compute minimum interline spacing and the minimum area that must be allowed in a text field to draw a given number of arbitrary characters. .LP Due to context-dependent rendering, appending a given character to a string may change the string's extent by an amount other than that character's individual extent. .SH "SEE ALSO" XCreateFontSet(__libmansuffix__), XExtentsOfFontSet(__libmansuffix__), XFontsOfFontSet(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XEventsQueued.man000064401431060000012000000000601247741723500170670ustar00alancstaff00002660200006.so man__libmansuffix__/XFlush.__libmansuffix__ libX11-1.6.3/man/XGrabButton.man000064401431060000012000000175211247741723500165330ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XGrabButton __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XGrabButton, XUngrabButton \- grab pointer buttons .SH SYNTAX .HP int XGrabButton\^(\^Display *\fIdisplay\fP\^, unsigned int \fIbutton\fP\^, unsigned int \fImodifiers\fP\^, Window \fIgrab_window\fP\^, Bool \fIowner_events\fP\^, unsigned int \fIevent_mask\fP\^, int \fIpointer_mode\fP\^, \fIkeyboard_mode\fP\^, Window \fIconfine_to\fP\^, Cursor \fIcursor\fP\^); .HP int XUngrabButton\^(\^Display *\fIdisplay\fP\^, unsigned int \fIbutton\fP\^, unsigned int \fImodifiers\fP\^, Window \fIgrab_window\fP\^); .SH ARGUMENTS .ds Bu grabbed or released .IP \fIbutton\fP 1i Specifies the pointer button that is to be \*(Bu or .ZN AnyButton . .IP \fIconfine_to\fP 1i Specifies the window to confine the pointer in or .ZN None . .IP \fIcursor\fP 1i Specifies the cursor that is to be displayed or .ZN None . .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIevent_mask\fP 1i Specifies which pointer events are reported to the client. The mask is the bitwise inclusive OR of the valid pointer event mask bits. .IP \fIgrab_window\fP 1i Specifies the grab window. .IP \fIkeyboard_mode\fP 1i Specifies further processing of keyboard events. You can pass .ZN GrabModeSync or .ZN GrabModeAsync . .IP \fImodifiers\fP 1i Specifies the set of keymasks or .ZN AnyModifier . The mask is the bitwise inclusive OR of the valid keymask bits. .IP \fIowner_events\fP 1i Specifies a Boolean value that indicates whether the pointer events are to be reported as usual or reported with respect to the grab window if selected by the event mask. .IP \fIpointer_mode\fP 1i Specifies further processing of pointer events. You can pass .ZN GrabModeSync or .ZN GrabModeAsync . .SH DESCRIPTION The .ZN XGrabButton function establishes a passive grab. In the future, the pointer is actively grabbed (as for .ZN XGrabPointer ), the last-pointer-grab time is set to the time at which the button was pressed (as transmitted in the .ZN ButtonPress event), and the .ZN ButtonPress event is reported if all of the following conditions are true: .IP \(bu 5 The pointer is not grabbed, and the specified button is logically pressed when the specified modifier keys are logically down, and no other buttons or modifier keys are logically down. .IP \(bu 5 The grab_window contains the pointer. .IP \(bu 5 The confine_to window (if any) is viewable. .IP \(bu 5 A passive grab on the same button/key combination does not exist on any ancestor of grab_window. .LP The interpretation of the remaining arguments is as for .ZN XGrabPointer . The active grab is terminated automatically when the logical state of the pointer has all buttons released (independent of the state of the logical modifier keys), at which point a .ZN ButtonRelease event is reported to the grabbing window. .LP Note that the logical state of a device (as seen by client applications) may lag the physical state if device event processing is frozen. .LP This request overrides all previous grabs by the same client on the same button/key combinations on the same window. A modifiers of .ZN AnyModifier is equivalent to issuing the grab request for all possible modifier combinations (including the combination of no modifiers). It is not required that all modifiers specified have currently assigned KeyCodes. A button of .ZN AnyButton is equivalent to issuing the request for all possible buttons. Otherwise, it is not required that the specified button currently be assigned to a physical button. .LP If some other client has already issued a .ZN XGrabButton with the same button/key combination on the same window, a .ZN BadAccess error results. When using .ZN AnyModifier or .ZN AnyButton , the request fails completely, and a .ZN BadAccess error results (no grabs are established) if there is a conflicting grab for any combination. .ZN XGrabButton has no effect on an active grab. .LP .ZN XGrabButton can generate .ZN BadCursor , .ZN BadValue , and .ZN BadWindow errors. .LP The .ZN XUngrabButton function releases the passive button/key combination on the specified window if it was grabbed by this client. A modifiers of .ZN AnyModifier is equivalent to issuing the ungrab request for all possible modifier combinations, including the combination of no modifiers. A button of .ZN AnyButton is equivalent to issuing the request for all possible buttons. .ZN XUngrabButton has no effect on an active grab. .LP .ZN XUngrabButton can generate .ZN BadValue and .ZN BadWindow errors. .SH DIAGNOSTICS .TP 1i .ZN BadCursor A value for a Cursor argument does not name a defined Cursor. .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XAllowEvents(__libmansuffix__), XGrabPointer(__libmansuffix__), XGrabKey(__libmansuffix__), XGrabKeyboard(__libmansuffix__), .br \fI\*(xL\fP libX11-1.6.3/man/XUnmapWindow.man000064401431060000012000000113071247741723500167300ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XUnmapWindow __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XUnmapWindow, XUnmapSubwindows \- unmap windows .SH SYNTAX .HP int XUnmapWindow\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^); .HP int XUnmapSubwindows\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIw\fP 1i Specifies the window. .SH DESCRIPTION The .ZN XUnmapWindow function unmaps the specified window and causes the X server to generate an .ZN UnmapNotify .IN "UnmapNotify Event" .IN "XUnmapWindow" event. If the specified window is already unmapped, .ZN XUnmapWindow has no effect. Normal exposure processing on formerly obscured windows is performed. Any child window will no longer be visible until another map call is made on the parent. In other words, the subwindows are still mapped but are not visible until the parent is mapped. Unmapping a window will generate .ZN Expose events on windows that were formerly obscured by it. .LP .ZN XUnmapWindow can generate a .ZN BadWindow error. .LP The .ZN XUnmapSubwindows function unmaps all subwindows for the specified window in bottom-to-top stacking order. It causes the X server to generate an .ZN UnmapNotify event on each subwindow and .ZN Expose events on formerly obscured windows. .IN "UnmapNotify Event" Using this function is much more efficient than unmapping multiple windows one at a time because the server needs to perform much of the work only once, for all of the windows, rather than for each window. .LP .ZN XUnmapSubwindows can generate a .ZN BadWindow error. .SH DIAGNOSTICS .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XChangeWindowAttributes(__libmansuffix__), XConfigureWindow(__libmansuffix__), XCreateWindow(__libmansuffix__), XDestroyWindow(__libmansuffix__), XMapWindow(__libmansuffix__) XRaiseWindow(__libmansuffix__) .br \fI\*(xL\fP ciated 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, sublibX11-1.6.3/man/XGetAtomName.man000064401431060000012000000000651247741723500166200ustar00alancstaff00002660200006.so man__libmansuffix__/XInternAtom.__libmansuffix__ libX11-1.6.3/man/XrmPermStringToQuark.man000064401431060000012000000000701247741723500204130ustar00alancstaff00002660200006.so man__libmansuffix__/XrmUniqueQuark.__libmansuffix__ libX11-1.6.3/man/XCreateImage.man000064401431060000012000000000641247741723500166240ustar00alancstaff00002660200006.so man__libmansuffix__/XInitImage.__libmansuffix__ libX11-1.6.3/man/XUnionRectWithRegion.man000064401431060000012000000000721247741723500203630ustar00alancstaff00002660200006.so man__libmansuffix__/XIntersectRegion.__libmansuffix__ libX11-1.6.3/man/XAutoRepeatOn.man000064401431060000012000000001001247741723500170130ustar00alancstaff00002660200006.so man__libmansuffix__/XChangeKeyboardControl.__libmansuffix__ libX11-1.6.3/man/XcmsRGBi.man000064401431060000012000000000631247741723500157430ustar00alancstaff00002660200006.so man__libmansuffix__/XcmsColor.__libmansuffix__ libX11-1.6.3/man/XDrawSegments.man000064401431060000012000000000631247741723500170600ustar00alancstaff00002660200006.so man__libmansuffix__/XDrawLine.__libmansuffix__ libX11-1.6.3/man/RootWindow.man000064401431060000012000000000631247741723500164400ustar00alancstaff00002660200006.so man__libmansuffix__/AllPlanes.__libmansuffix__ libX11-1.6.3/man/XDrawRectangles.man000064401431060000012000000000701247741723500173600ustar00alancstaff00002660200006.so man__libmansuffix__/XDrawRectangle.__libmansuffix__ libX11-1.6.3/man/XListDepths.man000064401431060000012000000000631247741723500165400ustar00alancstaff00002660200006.so man__libmansuffix__/AllPlanes.__libmansuffix__ libX11-1.6.3/man/XcmsCIELab.man000064401431060000012000000000631247741723500161770ustar00alancstaff00002660200006.so man__libmansuffix__/XcmsColor.__libmansuffix__ libX11-1.6.3/man/DisplayWidth.man000064401431060000012000000000701247741723500167300ustar00alancstaff00002660200006.so man__libmansuffix__/ImageByteOrder.__libmansuffix__ libX11-1.6.3/man/XSetInputFocus.man000064401431060000012000000143521247741723500172360ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XSetInputFocus __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XSetInputFocus, XGetInputFocus \- control input focus .SH SYNTAX .HP int XSetInputFocus\^(\^Display *\fIdisplay\fP\^, Window \fIfocus\fP\^, int \fIrevert_to\fP\^, Time \fItime\fP\^); .HP int XGetInputFocus\^(\^Display *\fIdisplay\fP\^, Window *\fIfocus_return\fP\^, int *\fIrevert_to_return\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIfocus\fP 1i Specifies the window, .ZN PointerRoot , or .ZN None . .IP \fIfocus_return\fP 1i Returns the focus window, .ZN PointerRoot , or .ZN None . .IP \fIrevert_to\fP 1i Specifies where the input focus reverts to if the window becomes not viewable. You can pass .ZN RevertToParent , .ZN RevertToPointerRoot , or .ZN RevertToNone . .IP \fIrevert_to_return\fP 1i Returns the current focus state .Pn ( RevertToParent , .ZN RevertToPointerRoot , or .ZN RevertToNone ). .IP \fItime\fP 1i Specifies the time. You can pass either a timestamp or .ZN CurrentTime . .SH DESCRIPTION The .ZN XSetInputFocus function changes the input focus and the last-focus-change time. It has no effect if the specified time is earlier than the current last-focus-change time or is later than the current X server time. Otherwise, the last-focus-change time is set to the specified time .Pn ( CurrentTime is replaced by the current X server time). .ZN XSetInputFocus causes the X server to generate .ZN FocusIn and .ZN FocusOut events. .LP Depending on the focus argument, the following occurs: .IP \(bu 5 If focus is .ZN None , all keyboard events are discarded until a new focus window is set, and the revert_to argument is ignored. .IP \(bu 5 If focus is a window, it becomes the keyboard's focus window. If a generated keyboard event would normally be reported to this window or one of its inferiors, the event is reported as usual. Otherwise, the event is reported relative to the focus window. .IP \(bu 5 If focus is .ZN PointerRoot , the focus window is dynamically taken to be the root window of whatever screen the pointer is on at each keyboard event. In this case, the revert_to argument is ignored. .LP The specified focus window must be viewable at the time .ZN XSetInputFocus is called, or a .ZN BadMatch error results. If the focus window later becomes not viewable, the X server evaluates the revert_to argument to determine the new focus window as follows: .IP \(bu 5 If revert_to is .ZN RevertToParent , the focus reverts to the parent (or the closest viewable ancestor), and the new revert_to value is taken to be .ZN RevertToNone . .IP \(bu 5 If revert_to is .ZN RevertToPointerRoot or .ZN RevertToNone , the focus reverts to .ZN PointerRoot or .ZN None , respectively. When the focus reverts, the X server generates .ZN FocusIn and .ZN FocusOut events, but the last-focus-change time is not affected. .LP .ZN XSetInputFocus can generate .ZN BadMatch , .ZN BadValue , and .ZN BadWindow errors. .LP The .ZN XGetInputFocus function returns the focus window and the current focus state. .SH DIAGNOSTICS .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XWarpPointer(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XSetTextProperty.man000064401431060000012000000145411247741723500176300ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XSetTextProperty __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XSetTextProperty, XGetTextProperty \- set and read text properties .SH SYNTAX .HP void XSetTextProperty\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, XTextProperty *\fItext_prop\fP\^, Atom \fIproperty\fP\^); .HP Status XGetTextProperty\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, XTextProperty *\fItext_prop_return\fP\^, Atom \fIproperty\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIproperty\fP 1i Specifies the property name. .IP \fItext_prop\fP 1i Specifies the .ZN XTextProperty structure to be used. .IP \fItext_prop_return\fP 1i Returns the .ZN XTextProperty structure. .SH DESCRIPTION The .ZN XSetTextProperty function replaces the existing specified property for the named window with the data, type, format, and number of items determined by the value field, the encoding field, the format field, and the nitems field, respectively, of the specified .ZN XTextProperty structure. If the property does not already exist, .ZN XSetTextProperty sets it for the specified window. .LP .ZN XSetTextProperty can generate .ZN BadAlloc , .ZN BadAtom , .ZN BadValue , and .ZN BadWindow errors. .LP The .ZN XGetTextProperty function reads the specified property from the window and stores the data in the returned .ZN XTextProperty structure. It stores the data in the value field, the type of the data in the encoding field, the format of the data in the format field, and the number of items of data in the nitems field. An extra byte containing null (which is not included in the nitems member) is stored at the end of the value field of text_prop_return. The particular interpretation of the property's encoding and data as text is left to the calling application. If the specified property does not exist on the window, .ZN XGetTextProperty sets the value field to NULL, the encoding field to .ZN None , the format field to zero, and the nitems field to zero. .LP If it was able to read and store the data in the .ZN XTextProperty structure, .ZN XGetTextProperty returns a nonzero status; otherwise, it returns a zero status. .LP .ZN XGetTextProperty can generate .ZN BadAtom and .ZN BadWindow errors. .SH PROPERTIES .TP 1i \s-1WM_CLIENT_MACHINE\s+1 The string name of the machine on which the client application is running. .TP 1i \s-1WM_COMMAND\s+1 The command and arguments, null-separated, used to invoke the application. .TP 1i \s-1WM_ICON_NAME\s+1 The name to be used in an icon. .TP 1i \s-1WM_NAME\s+1 The name of the application. .SH DIAGNOSTICS .TP 1i .ZN BadAlloc The server failed to allocate the requested resource or server memory. .TP 1i .ZN BadAtom A value for an Atom argument does not name a defined Atom. .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XAllocClassHint(__libmansuffix__), XAllocIconSize(__libmansuffix__), XAllocSizeHints(__libmansuffix__), XAllocWMHints(__libmansuffix__), XSetCommand(__libmansuffix__), XSetTransientForHint(__libmansuffix__), XSetWMClientMachine(__libmansuffix__), XSetWMColormapWindows(__libmansuffix__), XSetWMIconName(__libmansuffix__), XSetWMName(__libmansuffix__), XSetWMProperties(__libmansuffix__), XSetWMProtocols(__libmansuffix__), XStringListToTextProperty(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XSetFontPath.man000064401431060000012000000123671247741723500166660ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XSetFontPath __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XSetFontPath, XGetFontPath, XFreeFontPath \- set, get, or free the font search path .SH SYNTAX int XSetFontPath\^(\^Display *\fIdisplay\fP\^, char **\fIdirectories\fP\^, int \fIndirs\fP\^); .HP char **XGetFontPath\^(\^Display *\fIdisplay\fP\^, int *\fInpaths_return\fP\^); .HP int XFreeFontPath\^(\^char **\fIlist\fP\^); .SH ARGUMENTS .IP \fIdirectories\fP 1i Specifies the directory path used to look for a font. Setting the path to the empty list restores the default path defined for the X server. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIlist\fP 1i Specifies the array of strings you want to free. .IP \fIndirs\fP 1i Specifies the number of directories in the path. .IP \fInpaths_return\fP 1i Returns the number of strings in the font path array. .SH DESCRIPTION The .ZN XSetFontPath function defines the directory search path for font lookup. There is only one search path per X server, not one per client. The encoding and interpretation of the strings are implementation-dependent, but typically they specify directories or font servers to be searched in the order listed. An X server is permitted to cache font information internally; for example, it might cache an entire font from a file and not check on subsequent opens of that font to see if the underlying font file has changed. However, when the font path is changed, the X server is guaranteed to flush all cached information about fonts for which there currently are no explicit resource IDs allocated. The meaning of an error from this request is implementation-dependent. .LP .ZN XSetFontPath can generate a .ZN BadValue error. .LP The .ZN XGetFontPath function allocates and returns an array of strings containing the search path. The contents of these strings are implementation-dependent and are not intended to be interpreted by client applications. When it is no longer needed, the data in the font path should be freed by using .ZN XFreeFontPath . .LP The .ZN XFreeFontPath function frees the data allocated by .ZN XGetFontPath . .SH DIAGNOSTICS .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .SH "SEE ALSO" XListFont(__libmansuffix__), XLoadFonts(__libmansuffix__) .br \fI\*(xL\fP a X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0libX11-1.6.3/man/XVaCreateNestedList.man000064401431060000012000000072051247741723500201530ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XVaCreateNestedList __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XVaCreateNestedList \- allocate a nested variable argument list .SH SYNTAX typedef void * XVaNestedList; .HP XVaNestedList XVaCreateNestedList\^(\^int \fIdummy\fP\^, ...\^); .SH ARGUMENTS .IP \fIdummy\fP 1i Specifies an unused argument (required by ANSI C). .ds Al .IP ... 1i Specifies the variable length argument list\*(Al. .SH DESCRIPTION The .ZN XVaCreateNestedList function allocates memory and copies its arguments into a single list pointer, which may be used as a value for arguments requiring a list value. Any entries are copied as specified. Data passed by reference is not copied; the caller must ensure data remains valid for the lifetime of the nested list. The list should be freed using .ZN XFree when it is no longer needed. .SH "SEE ALSO" \fI\*(xL\fP libX11-1.6.3/man/XcmsTekHVC.man000064401431060000012000000000631247741723500162440ustar00alancstaff00002660200006.so man__libmansuffix__/XcmsColor.__libmansuffix__ libX11-1.6.3/man/XSetIMValues.man000064401431060000012000000000611247741723500166140ustar00alancstaff00002660200006.so man__libmansuffix__/XOpenIM.__libmansuffix__ libX11-1.6.3/man/XcmsSetWhitePoint.man000064401431060000012000000111161247741723500177270ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XcmsSetWhitePoint __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XcmsSetWhitePoint, XcmsSetWhiteAdjustProc \- modifying CCC attributes .SH SYNTAX .HP Status XcmsSetWhitePoint\^(\^XcmsCCC \fIccc\fP\^, XcmsColor *\fIcolor\fP\^); .HP XcmsWhiteAdjustProc XcmsSetWhiteAdjustProc\^(\^XcmsCCC \fIccc\fP\^, XcmsWhiteAdjustProc \fIwhite_adjust_proc\fP\^, XPointer \fIclient_data\fP\^); .SH ARGUMENTS .IP \fIccc\fP 1i Specifies the CCC. .ds Cd the white point adjustment procedure .IP \fIclient_data\fP 1i Specifies client data for \*(Cd or NULL. .ds Co new Client White Point .IP \fIcolor\fP 1i Specifies the \*(Co. .IP \fIwhite_adjust_proc\fP 1i Specifies the white point adjustment procedure. .SH DESCRIPTION The .ZN XcmsSetWhitePoint function changes the Client White Point in the specified CCC. Note that the pixel member is ignored and that the color specification is left unchanged upon return. The format for the new white point must be .ZN XcmsCIEXYZFormat , .ZN XcmsCIEuvYFormat , .ZN XcmsCIExyYFormat , or .ZN XcmsUndefinedFormat . If the color argument is NULL, this function sets the format component of the Client White Point specification to .ZN XcmsUndefinedFormat , indicating that the Client White Point is assumed to be the same as the Screen White Point. .LP This function returns nonzero status if the format for the new white point is valid; otherwise, it returns zero. .LP The .ZN XcmsSetWhiteAdjustProc function first sets the white point adjustment procedure and client data in the specified CCC with the newly specified procedure and client data and then returns the old procedure. .SH "SEE ALSO" DisplayOfCCC(__libmansuffix__), XcmsCCCOfColormap(__libmansuffix__), XcmsConvertColors(__libmansuffix__), XcmsCreateCCC(__libmansuffix__), XcmsDefaultCCC(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XResourceManagerString.man000064401431060000012000000105261247741723500207330ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XResourceManagerString __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XResourceManagerString, XScreenResourceString \- obtain server resource properties .SH SYNTAX .HP char *XResourceManagerString\^(\^Display *\fIdisplay\fP\^); .HP char *XScreenResourceString\^(\^Screen *\fIscreen\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIscreen\fP 1i Specifies the screen. .SH DESCRIPTION The .ZN XResourceManagerString function returns the RESOURCE_MANAGER property from the server's root window of screen zero, which was returned when the connection was opened using .ZN XOpenDisplay . The property is converted from type STRING to the current locale. The conversion is identical to that produced by .ZN XmbTextPropertyToTextList for a single element STRING property. The returned string is owned by Xlib and should not be freed by the client. The property value must be in a format that is acceptable to .ZN XrmGetStringDatabase . If no property exists, NULL is returned. .LP The .ZN XScreenResourceString function returns the SCREEN_RESOURCES property from the root window of the specified screen. The property is converted from type STRING to the current locale. The conversion is identical to that produced by .ZN XmbTextPropertyToTextList for a single element STRING property. The property value must be in a format that is acceptable to .ZN XrmGetStringDatabase . If no property exists, NULL is returned. The caller is responsible for freeing the returned string by using .ZN XFree . .SH "SEE ALSO" \fI\*(xL\fP libX11-1.6.3/man/XFreeColors.man000064401431060000012000000000651247741723500165220ustar00alancstaff00002660200006.so man__libmansuffix__/XAllocColor.__libmansuffix__ libX11-1.6.3/man/XAllocIconSize.man000064401431060000012000000136661247741723500171700ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XAllocIconSize __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XAllocIconSize, XSetIconSizes, XGetIconSizes, XIconSize \- allocate icon size structure and set or read a window's WM_ICON_SIZES property .SH SYNTAX XIconSize *XAllocIconSize\^(void\^); .LP int XSetIconSizes\^(\^Display *\fIdisplay\fP, Window \fIw\fP, XIconSize *\fIsize_list\fP, int \fIcount\fP\^); .LP Status XGetIconSizes\^(\^Display *\fIdisplay\fP, Window \fIw\fP, XIconSize **\fIsize_list_return\fP, int \fIcount_return\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIcount\fP 1i Specifies the number of items in the size list. .IP \fIcount_return\fP 1i Returns the number of items in the size list. .IP \fIsize_list\fP 1i Specifies the size list. .IP \fIsize_list_return\fP 1i Returns the size list. .IP \fIw\fP 1i Specifies the window. .SH DESCRIPTION The .ZN XAllocIconSize function allocates and returns a pointer to a .ZN XIconSize structure. Note that all fields in the .ZN XIconSize structure are initially set to zero. If insufficient memory is available, .ZN XAllocIconSize returns NULL. To free the memory allocated to this structure, use .ZN XFree . .LP The .ZN XSetIconSizes function is used only by window managers to set the supported icon sizes. .LP .ZN XSetIconSizes can generate .ZN BadAlloc and .ZN BadWindow errors. .LP The .ZN XGetIconSizes function returns zero if a window manager has not set icon sizes; otherwise, it return nonzero. .ZN XGetIconSizes should be called by an application that wants to find out what icon sizes would be most appreciated by the window manager under which the application is running. The application should then use .ZN XSetWMHints to supply the window manager with an icon pixmap or window in one of the supported sizes. To free the data allocated in size_list_return, use .ZN XFree . .LP .ZN XGetIconSizes can generate a .ZN BadWindow error. .SH PROPERTIES .TP 1i \s-1WM_ICON_SIZES\s+1 The window manager may set this property on the root window to specify the icon sizes it supports. The C type of this property is .ZN XIconSize . .SH STRUCTURES The .ZN XIconSize structure contains: .LP .IN "XIconSize" "" "@DEF@" .Ds 0 typedef struct { int min_width, min_height; int max_width, max_height; int width_inc, height_inc; } XIconSize; .De .LP The width_inc and height_inc members define an arithmetic progression of sizes (minimum to maximum) that represent the supported icon sizes. .SH DIAGNOSTICS .TP 1i .ZN BadAlloc The server failed to allocate the requested resource or server memory. .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XAllocClassHint(__libmansuffix__), XAllocSizeHints(__libmansuffix__), XAllocWMHints(__libmansuffix__), XFree(__libmansuffix__), XSetCommand(__libmansuffix__), XSetTransientForHint(__libmansuffix__), XSetTextProperty(__libmansuffix__), XSetWMClientMachine(__libmansuffix__), XSetWMColormapWindows(__libmansuffix__), XSetWMIconName(__libmansuffix__), XSetWMName(__libmansuffix__), XSetWMProperties(__libmansuffix__), XSetWMProtocols(__libmansuffix__), XStringListToTextProperty(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XDestroySubwindows.man000064401431060000012000000000701247741723500201710ustar00alancstaff00002660200006.so man__libmansuffix__/XDestroyWindow.__libmansuffix__ libX11-1.6.3/man/Xutf8ResetIC.man000064401431060000012000000000641247741723500165630ustar00alancstaff00002660200006.so man__libmansuffix__/XmbResetIC.__libmansuffix__ libX11-1.6.3/man/XcmsTekHVCQueryMinV.man000064401431060000012000000000751247741723500200670ustar00alancstaff00002660200006.so man__libmansuffix__/XcmsTekHVCQueryMaxC.__libmansuffix__ libX11-1.6.3/man/XAllocWMHints.man000064401431060000012000000225561247741723500167740ustar00alancstaff00002660200006'\" t .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface, \fRO'Reilly and Associates, Sebastopol, 1991. .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 '\" t .TH XAllocWMHints __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XAllocWMHints, XSetWMHints, XGetWMHints, XWMHints \- allocate window manager hints structure and set or read a window's WM_HINTS property .SH SYNTAX .HP XWMHints *XAllocWMHints\^(void\^); .HP int XSetWMHints\^(\^Display *\fIdisplay\fP, Window \fIw\fP, XWMHints *\fIwmhints\fP\^); .HP XWMHints *XGetWMHints\^(\^Display *\fIdisplay\fP, Window \fIw\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIw\fP 1i Specifies the window. .IP \fIwmhints\fP 1i Specifies the .ZN XWMHints structure to be used. .SH DESCRIPTION The .ZN XAllocWMHints function allocates and returns a pointer to a .ZN XWMHints structure. Note that all fields in the .ZN XWMHints structure are initially set to zero. If insufficient memory is available, .ZN XAllocWMHints returns NULL. To free the memory allocated to this structure, use .ZN XFree . .LP The .ZN XSetWMHints function sets the window manager hints that include icon information and location, the initial state of the window, and whether the application relies on the window manager to get keyboard input. .LP .ZN XSetWMHints can generate .ZN BadAlloc and .ZN BadWindow errors. .LP The .ZN XGetWMHints function reads the window manager hints and returns NULL if no WM_HINTS property was set on the window or returns a pointer to a .ZN XWMHints structure if it succeeds. When finished with the data, free the space used for it by calling .ZN XFree . .LP .ZN XGetWMHints can generate a .ZN BadWindow error. .SH PROPERTIES .TP 1i \s-1WM_HINTS\s+1 Additional hints set by the client for use by the window manager. The C type of this property is .ZN XWMHints . .SH STRUCTURES The .ZN XWMHints structure contains: .LP /\&* Window manager hints mask bits */ .TS lw(.5i) lw(2.5i) lw(2.5i). T{ \&#define T} T{ .ZN InputHint T} T{ (1L << 0) T} T{ \&#define T} T{ .ZN StateHint T} T{ (1L << 1) T} T{ \&#define T} T{ .ZN IconPixmapHint T} T{ (1L << 2) T} T{ \&#define T} T{ .ZN IconWindowHint T} T{ (1L << 3) T} T{ \&#define T} T{ .ZN IconPositionHint T} T{ (1L << 4) T} T{ \&#define T} T{ .ZN IconMaskHint T} T{ (1L << 5) T} T{ \&#define T} T{ .ZN WindowGroupHint T} T{ (1L << 6) T} T{ \&#define T} T{ .ZN XUrgencyHint T} T{ (1L << 8) T} T{ \&#define T} T{ .ZN AllHints T} T{ (InputHint|StateHint|IconPixmapHint| .br IconWindowHint|IconPositionHint| .br IconMaskHint|WindowGroupHint) T} .TE .IN "XWMHints" "" "@DEF@" .Ds 0 /\&* Values */ typedef struct { long flags; /\&* marks which fields in this structure are defined */ Bool input; /\&* does this application rely on the window manager to get keyboard input? */ int initial_state; /\&* see below */ Pixmap icon_pixmap; /\&* pixmap to be used as icon */ Window icon_window; /\&* window to be used as icon */ int icon_x, icon_y; /\&* initial position of icon */ Pixmap icon_mask; /\&* pixmap to be used as mask for icon_pixmap */ XID window_group; /\&* id of related window group */ /\&* this structure may be extended in the future */ } XWMHints; .De .LP The input member is used to communicate to the window manager the input focus model used by the application. Applications that expect input but never explicitly set focus to any of their subwindows (that is, use the push model of focus management), such as X Version 10 style applications that use real-estate driven focus, should set this member to .ZN True . Similarly, applications that set input focus to their subwindows only when it is given to their top-level window by a window manager should also set this member to .ZN True . Applications that manage their own input focus by explicitly setting focus to one of their subwindows whenever they want keyboard input (that is, use the pull model of focus management) should set this member to .ZN False . Applications that never expect any keyboard input also should set this member to .ZN False . .LP Pull model window managers should make it possible for push model applications to get input by setting input focus to the top-level windows of applications whose input member is .ZN True . Push model window managers should make sure that pull model applications do not break them by resetting input focus to .ZN PointerRoot when it is appropriate (for example, whenever an application whose input member is .ZN False sets input focus to one of its subwindows). .LP The definitions for the initial_state flag are: .TS lw(.5i) lw(2i) lw(.2i) lw(2.8i). T{ \&#define T} T{ .ZN WithdrawnState T} T{ 0 T} T{ T} T{ \&#define T} T{ .ZN NormalState T} T{ 1 T} T{ /\&* most applications start this way */ T} T{ \&#define T} T{ .ZN IconicState T} T{ 3 T} T{ /\&* application wants to start as an icon */ T} .TE The icon_mask specifies which pixels of the icon_pixmap should be used as the icon. This allows for nonrectangular icons. Both icon_pixmap and icon_mask must be bitmaps. The icon_window lets an application provide a window for use as an icon for window managers that support such use. The window_group lets you specify that this window belongs to a group of other windows. For example, if a single application manipulates multiple top-level windows, this allows you to provide enough information that a window manager can iconify all of the windows rather than just the one window. .LP The .ZN UrgencyHint flag, if set in the flags field, indicates that the client deems the window contents to be urgent, requiring the timely response of the user. The window manager will make some effort to draw the user's attention to this window while this flag is set. The client must provide some means by which the user can cause the urgency flag to be cleared (either mitigating the condition that made the window urgent or merely shutting off the alarm) or the window to be withdrawn. .SH DIAGNOSTICS .TP 1i .ZN BadAlloc The server failed to allocate the requested resource or server memory. .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XAllocClassHint(__libmansuffix__), XAllocIconSize(__libmansuffix__), XAllocSizeHints(__libmansuffix__), XFree(__libmansuffix__), XSetCommand(__libmansuffix__), XSetTransientForHint(__libmansuffix__), XSetTextProperty(__libmansuffix__), XSetWMClientMachine(__libmansuffix__), XSetWMColormapWindows(__libmansuffix__), XSetWMIconName(__libmansuffix__), XSetWMName(__libmansuffix__), XSetWMProperties(__libmansuffix__), XSetWMProtocols(__libmansuffix__), XStringListToTextProperty(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XcmsRGB.man000064401431060000012000000000631247741723500155720ustar00alancstaff00002660200006.so man__libmansuffix__/XcmsColor.__libmansuffix__ libX11-1.6.3/man/XcmsTekHVCQueryMaxV.man000064401431060000012000000000751247741723500200710ustar00alancstaff00002660200006.so man__libmansuffix__/XcmsTekHVCQueryMaxC.__libmansuffix__ libX11-1.6.3/man/XClassHint.man000064401431060000012000000000711247741723500163440ustar00alancstaff00002660200006.so man__libmansuffix__/XAllocClassHint.__libmansuffix__ libX11-1.6.3/man/XGetEventData.man000064401431060000012000000102021247741723500167640ustar00alancstaff00002660200006.\" Copyright \(co 2009 Red Hat, Inc. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XGetEventData __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XGetEventData, XFreeEventData, XGenericEventCookie \- retrieve and free additional event data through cookies. .SH SYNTAX .HP Bool XGetEventData\^(\^Display *\fIdisplay\fP\^, XGenericEventCookie *\fIcookie\fP\^); .HP void XFreeEventData\^(\^Display *\fIdisplay\fP\^, XGenericEventCookie *\fIcookie\fP\^); .HP .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIcookie\fP 1i Specifies the cookie to free or retrieve the data for. .SH STRUCTURES .Ds 0 typedef struct { int type; unsigned long serial; Bool send_event; Display *display; int extension; int evtype; unsigned int cookie; void *data; } XGenericEventCookie; .De .SH DESCRIPTION Some extension .ZN XGenericEvents require additional memory to store information. For these events, the library returns a .ZN XGenericEventCookie with a token ('cookie') unique to this event. The .ZN XGenericEventCookie 's data pointer is undefined until .ZN XGetEventData is called. The .ZN XGetEventData function retrieves this extra data for the given cookie. No round-trip to the server is required. If the cookie is invalid or the event is not an event handled by cookie handlers, .ZN False is returned. If .ZN XGetEventData returns .ZN True , the cookie's data pointer points to the memory containing the event information. A client must call .ZN XFreeEventData to free this memory. .ZN XGetEventData returns .ZN False for multiple calls for the same event cookie. The .ZN XFreeEventData function frees the data associated with a cookie. A client must call .ZN XFreeEventData for each cookie claimed with .ZN XGetEventData . .SH EXAMPLE CODE .Ds 0 XEvent event; XGenericEventCookie *cookie = &ev; XNextEvent(display, &event); if (XGetEventData(display, cookie)) { handle_cookie_event(cookie->data); } else handle_event(&event); } XFreeEventData(display, cookie); .De .SH NOTES A cookie is defined as unclaimed if it has been returned to the client through .ZN XNextEvent but its data has not been retrieved via .ZN XGetEventData . Subsequent calls to .ZN XNextEvent may free memory associated with unclaimed cookies. Multi-threaded X clients must ensure that .ZN XGetEventData is called before the next call to .ZN XNextEvent . .SH "SEE ALSO" XNextEvent(__libmansuffix__), .br \fI\*(xL\fP libX11-1.6.3/man/XCreateGlyphCursor.man000064401431060000012000000000731247741723500200630ustar00alancstaff00002660200006.so man__libmansuffix__/XCreateFontCursor.__libmansuffix__ libX11-1.6.3/man/XCirculateRequestEvent.man000064401431060000012000000127131247741723500207500ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XCirculateRequestEvent __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XCirculateRequestEvent \- CirculateRequest event structure .SH STRUCTURES The structure for .ZN CirculateRequest events contains: .LP .Ds 0 typedef struct { int type; /\&* CirculateRequest */ unsigned long serial; /\&* # of last request processed by server */ Bool send_event; /\&* true if this came from a SendEvent request */ Display *display; /\&* Display the event was read from */ Window parent; Window window; int place; /\&* PlaceOnTop, PlaceOnBottom */ } XCirculateRequestEvent; .De .LP When you receive this event, the structure members are set as follows. .LP The type member is set to the event type constant name that uniquely identifies it. For example, when the X server reports a .ZN GraphicsExpose event to a client application, it sends an .ZN XGraphicsExposeEvent structure with the type member set to .ZN GraphicsExpose . The display member is set to a pointer to the display the event was read on. The send_event member is set to .ZN True if the event came from a .ZN SendEvent protocol request. The serial member is set from the serial number reported in the protocol but expanded from the 16-bit least-significant bits to a full 32-bit value. The window member is set to the window that is most useful to toolkit dispatchers. .LP The parent member is set to the parent window. The window member is set to the subwindow to be restacked. The place member is set to what the new position in the stacking order should be and is either .ZN PlaceOnTop or .ZN PlaceOnBottom . If it is .ZN PlaceOnTop , the subwindow should be on top of all siblings. If it is .ZN PlaceOnBottom , the subwindow should be below all siblings. .SH "SEE ALSO" XAnyEvent(__libmansuffix__), XButtonEvent(__libmansuffix__), XCreateWindowEvent(__libmansuffix__), XCirculateEvent(__libmansuffix__), XColormapEvent(__libmansuffix__), XConfigureEvent(__libmansuffix__), XConfigureRequestEvent(__libmansuffix__), XCrossingEvent(__libmansuffix__), XDestroyWindowEvent(__libmansuffix__), XErrorEvent(__libmansuffix__), XExposeEvent(__libmansuffix__), XFocusChangeEvent(__libmansuffix__), XGraphicsExposeEvent(__libmansuffix__), XGravityEvent(__libmansuffix__), XKeymapEvent(__libmansuffix__), XMapEvent(__libmansuffix__), XMapRequestEvent(__libmansuffix__), XPropertyEvent(__libmansuffix__), XReparentEvent(__libmansuffix__), XResizeRequestEvent(__libmansuffix__), XSelectionClearEvent(__libmansuffix__), XSelectionEvent(__libmansuffix__), XSelectionRequestEvent(__libmansuffix__), XUnmapEvent(__libmansuffix__), XVisibilityEvent(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XcmsCIELuv.man000064401431060000012000000000631247741723500162470ustar00alancstaff00002660200006.so man__libmansuffix__/XcmsColor.__libmansuffix__ libX11-1.6.3/man/XGetWindowAttributes.man000064401431060000012000000241521247741723500204400ustar00alancstaff00002660200006'\" t .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 '\" t .TH XGetWindowAttributes __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XGetWindowAttributes, XGetGeometry, XWindowAttributes \- get current window attribute or geometry and current window attributes structure .SH SYNTAX .HP Status XGetWindowAttributes\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, XWindowAttributes *\fIwindow_attributes_return\fP\^); .HP Status XGetGeometry\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, Window *\fIroot_return\fP\^, int *\fIx_return\fP\^, int *\fIy_return\fP\^, unsigned int *\fIwidth_return\fP\^, unsigned int *\fIheight_return\fP\^, unsigned int *\fIborder_width_return\fP\^, unsigned int *\fIdepth_return\fP\^); .SH ARGUMENTS .IP \fIborder_width_return\fP 1i Returns the border width in pixels. .ds Dr , which can be a window or a pixmap .IP \fId\fP 1i Specifies the drawable\*(Dr. .IP \fIdepth_return\fP 1i Returns the depth of the drawable (bits per pixel for the object). .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIroot_return\fP 1i Returns the root window. .ds Wi whose current attributes you want to obtain .IP \fIw\fP 1i Specifies the window \*(Wi. .IP \fIwidth_return\fP 1i .br .ns .IP \fIheight_return\fP 1i Return the drawable's dimensions (width and height). .IP \fIwindow_attributes_return\fP 1i Returns the specified window's attributes in the .ZN XWindowAttributes structure. .IP \fIx_return\fP 1i .br .ns .IP \fIy_return\fP 1i Return the x and y coordinates that define the location of the drawable. For a window, these coordinates specify the upper-left outer corner relative to its parent's origin. For pixmaps, these coordinates are always zero. .SH DESCRIPTION The .ZN XGetWindowAttributes function returns the current attributes for the specified window to an .ZN XWindowAttributes structure. It returns a nonzero status on success; otherwise, it returns a zero status. .LP .ZN XGetWindowAttributes can generate .ZN BadDrawable and .ZN BadWindow errors. .LP The .ZN XGetGeometry function returns the root window and the current geometry of the drawable. The geometry of the drawable includes the x and y coordinates, width and height, border width, and depth. These are described in the argument list. It is legal to pass to this function a window whose class is .ZN InputOnly . It returns a nonzero status on success; otherwise, it returns a zero status. .SH STRUCTURES The .ZN XWindowAttributes structure contains: .LP .Ds 0 typedef struct { int x, y; /\&* location of window */ int width, height; /\&* width and height of window */ int border_width; /\&* border width of window */ int depth; /\&* depth of window */ Visual *visual; /\&* the associated visual structure */ Window root; /\&* root of screen containing window */ int class; /\&* InputOutput, InputOnly*/ int bit_gravity; /\&* one of the bit gravity values */ int win_gravity; /\&* one of the window gravity values */ int backing_store; /\&* NotUseful, WhenMapped, Always */ unsigned long backing_planes; /\&* planes to be preserved if possible */ unsigned long backing_pixel; /\&* value to be used when restoring planes */ Bool save_under; /\&* boolean, should bits under be saved? */ Colormap colormap; /\&* color map to be associated with window */ Bool map_installed; /\&* boolean, is color map currently installed*/ int map_state; /\&* IsUnmapped, IsUnviewable, IsViewable */ long all_event_masks; /\&* set of events all people have interest in*/ long your_event_mask; /\&* my event mask */ long do_not_propagate_mask; /\&* set of events that should not propagate */ Bool override_redirect; /\&* boolean value for override-redirect */ Screen *screen; /\&* back pointer to correct screen */ } XWindowAttributes; .De .LP The x and y members are set to the upper-left outer corner relative to the parent window's origin. The width and height members are set to the inside size of the window, not including the border. The border_width member is set to the window's border width in pixels. The depth member is set to the depth of the window (that is, bits per pixel for the object). The visual member is a pointer to the screen's associated .ZN Visual structure. The root member is set to the root window of the screen containing the window. The class member is set to the window's class and can be either .ZN InputOutput or .ZN InputOnly . .LP The bit_gravity member is set to the window's bit gravity and can be one of the following: .LP .TS lw(1.5i) lw(1.5i). T{ .ZN ForgetGravity T} T{ .ZN EastGravity T} T{ .ZN NorthWestGravity T} T{ .ZN SouthWestGravity T} T{ .ZN NorthGravity T} T{ .ZN SouthGravity T} T{ .ZN NorthEastGravity T} T{ .ZN SouthEastGravity T} T{ .ZN WestGravity T} T{ .ZN StaticGravity T} .ZN CenterGravity .TE .LP The win_gravity member is set to the window's window gravity and can be one of the following: .LP .TS lw(1.5i) lw(1.5i). T{ .ZN UnmapGravity T} T{ .ZN EastGravity T} T{ .ZN NorthWestGravity T} T{ .ZN SouthWestGravity T} T{ .ZN NorthGravity T} T{ .ZN SouthGravity T} T{ .ZN NorthEastGravity T} T{ .ZN SouthEastGravity T} T{ .ZN WestGravity T} T{ .ZN StaticGravity T} .ZN CenterGravity .TE .LP For additional information on gravity, see section 3.3. .LP The backing_store member is set to indicate how the X server should maintain the contents of a window and can be .ZN WhenMapped , .ZN Always , or .ZN NotUseful . The backing_planes member is set to indicate (with bits set to 1) which bit planes of the window hold dynamic data that must be preserved in backing_stores and during save_unders. The backing_pixel member is set to indicate what values to use for planes not set in backing_planes. .LP The save_under member is set to .ZN True or .ZN False . The colormap member is set to the colormap for the specified window and can be a colormap ID or .ZN None . The map_installed member is set to indicate whether the colormap is currently installed and can be .ZN True or .ZN False . The map_state member is set to indicate the state of the window and can be .ZN IsUnmapped , .ZN IsUnviewable , or .ZN IsViewable . .ZN IsUnviewable is used if the window is mapped but some ancestor is unmapped. .LP The all_event_masks member is set to the bitwise inclusive OR of all event masks selected on the window by all clients. The your_event_mask member is set to the bitwise inclusive OR of all event masks selected by the querying client. The do_not_propagate_mask member is set to the bitwise inclusive OR of the set of events that should not propagate. .LP The override_redirect member is set to indicate whether this window overrides structure control facilities and can be .ZN True or .ZN False . Window manager clients should ignore the window if this member is .ZN True . .LP The screen member is set to a screen pointer that gives you a back pointer to the correct screen. This makes it easier to obtain the screen information without having to loop over the root window fields to see which field matches. .SH DIAGNOSTICS .TP 1i .ZN BadDrawable A value for a Drawable argument does not name a defined Window or Pixmap. .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XQueryPointer(__libmansuffix__), XQueryTree(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XrmEnumerateDatabase.man000064401431060000012000000126711247741723500203760ustar00alancstaff00002660200006'\" t .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 '\" t .TH XrmEnumerateDatabase __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XrmEnumerateDatabase \- enumerate resource database entries .SH SYNTAX .HP #include .TS lw(.5i) lw(2i) lw(2.5i). T{ \&#define T} T{ .ZN XrmEnumAllLevels T} T{ 0 T} T{ \&#define T} T{ .ZN XrmEnumOneLevel T} T{ 1 T} .TE .HP Bool XrmEnumerateDatabase\^(\^XrmDatabase \fIdatabase\fP\^, XrmNameList \fIname_prefix\fP\^, XrmClassList \fIclass_prefix\fP\^, int \fImode\fP\^, Bool (\^*\fIproc\fP\^)\^(\^)\^, XPointer \fIarg\fP\^); .SH ARGUMENTS .IP \fIdatabase\fP 1i Specifies the resource database. .IP \fIname_prefix\fP 1i Specifies the resource name prefix. .IP \fIclass_prefix\fP 1i Specifies the resource class prefix. .IP \fImode\fP 1i Specifies the number of levels to enumerate. .IP \fIproc\fP 1i Specifies the procedure that is to be called for each matching entry. .IP \fIarg\fP 1i Specifies the user-supplied argument that will be passed to the procedure. .SH DESCRIPTION The .ZN XrmEnumerateDatabase function calls the specified procedure for each resource in the database that would match some completion of the given name/class resource prefix. The order in which resources are found is implementation-dependent. If mode is .ZN XrmEnumOneLevel , a resource must match the given name/class prefix with just a single name and class appended. If mode is .ZN XrmEnumAllLevels , the resource must match the given name/class prefix with one or more names and classes appended. If the procedure returns .ZN True , the enumeration terminates and the function returns .ZN True . If the procedure always returns .ZN False , all matching resources are enumerated and the function returns .ZN False . .LP The procedure is called with the following arguments: .LP .\" Start marker code here .Ds 0 (*\fIproc\fP\^)(\^\fIdatabase\fP, \fIbindings\fP, \fIquarks\fP, \fItype\fP, \fIvalue\fP, \fIarg\fP\^) XrmDatabase *\fIdatabase\fP\^; XrmBindingList \fIbindings\fP\^; XrmQuarkList \fIquarks\fP\^; XrmRepresentation *\fItype\fP\^; XrmValue *\fIvalue\fP\^; XPointer \fIarg\fP\^; .De .\" End marker code here .LP The bindings and quarks lists are terminated by .ZN NULLQUARK . Note that pointers to the database and type are passed, but these values should not be modified. .LP The procedure must not modify the database. If Xlib has been initialized for threads, the procedure is called with the database locked and the result of a call by the procedure to any Xlib function using the same database is not defined. .SH "SEE ALSO" XrmGetResource(__libmansuffix__), XrmInitialize(__libmansuffix__), XrmPutResource(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XReadBitmapFileData.man000064401431060000012000000000711247741723500200560ustar00alancstaff00002660200006.so man__libmansuffix__/XReadBitmapFile.__libmansuffix__ libX11-1.6.3/man/XKeymapEvent.man000064401431060000012000000126601247741723500167130ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XKeymapEvent __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XKeymapEvent \- KeymapNotify event structure .SH STRUCTURES The structure for .ZN KeymapNotify events contains: .LP .Ds 0 /\&* generated on EnterWindow and FocusIn when KeymapState selected */ typedef struct { int type; /\&* KeymapNotify */ unsigned long serial; /\&* # of last request processed by server */ Bool send_event; /\&* true if this came from a SendEvent request */ Display *display; /\&* Display the event was read from */ Window window; char key_vector[32]; } XKeymapEvent; .De .LP When you receive this event, the structure members are set as follows. .LP The type member is set to the event type constant name that uniquely identifies it. For example, when the X server reports a .ZN GraphicsExpose event to a client application, it sends an .ZN XGraphicsExposeEvent structure with the type member set to .ZN GraphicsExpose . The display member is set to a pointer to the display the event was read on. The send_event member is set to .ZN True if the event came from a .ZN SendEvent protocol request. The serial member is set from the serial number reported in the protocol but expanded from the 16-bit least-significant bits to a full 32-bit value. The window member is set to the window that is most useful to toolkit dispatchers. .LP The window member is not used but is present to aid some toolkits. The key_vector member is set to the bit vector of the keyboard. Each bit set to 1 indicates that the corresponding key is currently pressed. The vector is represented as 32 bytes. Byte N (from 0) contains the bits for keys 8N to 8N + 7 with the least significant bit in the byte representing key 8N. .SH "SEE ALSO" XAnyEvent(__libmansuffix__), XButtonEvent(__libmansuffix__), XCreateWindowEvent(__libmansuffix__), XCirculateEvent(__libmansuffix__), XCirculateRequestEvent(__libmansuffix__), XColormapEvent(__libmansuffix__), XConfigureEvent(__libmansuffix__), XConfigureRequestEvent(__libmansuffix__), XCrossingEvent(__libmansuffix__), XDestroyWindowEvent(__libmansuffix__), XErrorEvent(__libmansuffix__), XExposeEvent(__libmansuffix__), XFocusChangeEvent(__libmansuffix__), XGraphicsExposeEvent(__libmansuffix__), XGravityEvent(__libmansuffix__), XMapEvent(__libmansuffix__), XMapRequestEvent(__libmansuffix__), XPropertyEvent(__libmansuffix__), XReparentEvent(__libmansuffix__), XResizeRequestEvent(__libmansuffix__), XSelectionClearEvent(__libmansuffix__), XSelectionEvent(__libmansuffix__), XSelectionRequestEvent(__libmansuffix__), XUnmapEvent(__libmansuffix__), XVisibilityEvent(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XFreeFontSet.man000064401431060000012000000000701247741723500166370ustar00alancstaff00002660200006.so man__libmansuffix__/XCreateFontSet.__libmansuffix__ libX11-1.6.3/man/XRebindKeysym.man000064401431060000012000000000671247741723500170660ustar00alancstaff00002660200006.so man__libmansuffix__/XLookupKeysym.__libmansuffix__ libX11-1.6.3/man/XrmQuarkToString.man000064401431060000012000000000701247741723500175670ustar00alancstaff00002660200006.so man__libmansuffix__/XrmUniqueQuark.__libmansuffix__ libX11-1.6.3/man/XKeysymToString.man000064401431060000012000000000711247741723500174270ustar00alancstaff00002660200006.so man__libmansuffix__/XStringToKeysym.__libmansuffix__ libX11-1.6.3/man/XInitImage.man000064401431060000012000000212101247741723500163200ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XCreateImage __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XInitImage, XCreateImage, XGetPixel, XPutPixel, XSubImage, XAddPixel, XDestroyImage \- image utilities .SH SYNTAX .HP Status XInitImage\^(\^XImage *\fIimage\fP\^); .HP XImage *XCreateImage\^(\^Display *\fIdisplay\fP\^, Visual *\fIvisual\fP\^, unsigned int \fIdepth\fP\^, int \fIformat\fP\^, int \fIoffset\fP\^, char *\fIdata\fP\^, unsigned int \fIwidth\fP\^, unsigned int \fIheight\fP\^, int \fIbitmap_pad\fP\^, int \fIbytes_per_line\fP\^); .HP unsigned long XGetPixel\^(\^XImage *\fIximage\fP\^, int \fIx\fP\^, int \fIy\fP\^); .HP int XPutPixel\^(\^XImage *\fIximage\fP\^, int \fIx\fP\^, int \fIy\fP\^, unsigned long \fIpixel\fP\^); .HP XImage *XSubImage\^(\^XImage *\fIximage\fP\^, int \fIx\fP\^, int \fIy\fP\^, unsigned int \fIsubimage_width\fP\^, unsigned int \fIsubimage_height\fP\^); .HP int XAddPixel\^(\^XImage *\fIximage\fP\^, long \fIvalue\fP\^); .HP int XDestroyImage\^(\^XImage *\^\fIximage\fP\^); .SH ARGUMENTS .IP \fIbitmap_pad\fP 1i Specifies the quantum of a scanline (8, 16, or 32). In other words, the start of one scanline is separated in client memory from the start of the next scanline by an integer multiple of this many bits. .IP \fIbytes_per_line\fP 1i Specifies the number of bytes in the client image between the start of one scanline and the start of the next. .IP \fIdata\fP 1i Specifies the image data. .IP \fIdepth\fP 1i Specifies the depth of the image. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIformat\fP 1i Specifies the format for the image. You can pass .ZN XYBitmap , .ZN XYPixmap , or .ZN ZPixmap . .IP \fIheight\fP 1i Specifies the height of the image, in pixels. .IP \fIoffset\fP 1i Specifies the number of pixels to ignore at the beginning of the scanline. .IP \fIpixel\fP 1i Specifies the new pixel value. .IP \fIsubimage_height\fP 1i Specifies the height of the new subimage, in pixels. .IP \fIsubimage_width\fP 1i Specifies the width of the new subimage, in pixels. .IP \fIvalue\fP 1i Specifies the constant value that is to be added. .IP \fIvisual\fP 1i Specifies the .ZN Visual structure. .IP \fIwidth\fP 1i Specifies the width of the image, in pixels. .IP \fIximage\fP 1i Specifies the image. .IP \fIx\fP 1i .br .ns .IP \fIy\fP 1i Specify the x and y coordinates. .SH DESCRIPTION The .ZN XInitImage function initializes the internal image manipulation routines of an image structure, based on the values of the various structure members. All fields other than the manipulation routines must already be initialized. If the bytes_per_line member is zero, .ZN XInitImage will assume the image data is contiguous in memory and set the bytes_per_line member to an appropriate value based on the other members; otherwise, the value of bytes_per_line is not changed. All of the manipulation routines are initialized to functions that other Xlib image manipulation functions need to operate on the type of image specified by the rest of the structure. .LP This function must be called for any image constructed by the client before passing it to any other Xlib function. Image structures created or returned by Xlib do not need to be initialized in this fashion. .LP This function returns a nonzero status if initialization of the structure is successful. It returns zero if it detected some error or inconsistency in the structure, in which case the image is not changed. .LP The .ZN XCreateImage function allocates the memory needed for an .ZN XImage structure for the specified display but does not allocate space for the image itself. Rather, it initializes the structure byte-order, bit-order, and bitmap-unit values from the display and returns a pointer to the .ZN XImage structure. The red, green, and blue mask values are defined for Z format images only and are derived from the .ZN Visual structure passed in. Other values also are passed in. The offset permits the rapid displaying of the image without requiring each scanline to be shifted into position. If you pass a zero value in bytes_per_line, Xlib assumes that the scanlines are contiguous in memory and calculates the value of bytes_per_line itself. .LP Note that when the image is created using .ZN XCreateImage , .ZN XGetImage , or .ZN XSubImage , the destroy procedure that the .ZN XDestroyImage function calls frees both the image structure and the data pointed to by the image structure. .LP The basic functions used to get a pixel, set a pixel, create a subimage, and add a constant value to an image are defined in the image object. The functions in this section are really macro invocations of the functions in the image object and are defined in .hN X11/Xutil.h . .LP The .ZN XGetPixel function returns the specified pixel from the named image. The pixel value is returned in normalized format (that is, the least significant byte of the long is the least significant byte of the pixel). The image must contain the x and y coordinates. .LP The .ZN XPutPixel function overwrites the pixel in the named image with the specified pixel value. The input pixel value must be in normalized format (that is, the least significant byte of the long is the least significant byte of the pixel). The image must contain the x and y coordinates. .LP The .ZN XSubImage function creates a new image that is a subsection of an existing one. It allocates the memory necessary for the new .ZN XImage structure and returns a pointer to the new image. The data is copied from the source image, and the image must contain the rectangle defined by x, y, subimage_width, and subimage_height. .LP The .ZN XAddPixel function adds a constant value to every pixel in an image. It is useful when you have a base pixel value from allocating color resources and need to manipulate the image to that form. .LP The .ZN XDestroyImage function deallocates the memory associated with the .ZN XImage structure. .SH "SEE ALSO" XPutImage(__libmansuffix__) .br \fI\*(xL\fP \^, int \fIformat\fP\^, int \fIoffset\fP\^, char *\fIdata\fP\^, unsigned int \fIwidth\fP\^, unsigned int \fIheight\fP\^, int \fIbitmap_pad\fP\^, int \fIbytes_per_line\fP\^); .HP unsigned long XGetPixel\^(\^XImage *\fIximage\fP\^, int \fIx\fP\^, int \fIy\fP\^); .HP int XPutPixel\^(\^XImage *\fIximage\fP\^, int \fIx\fP\^, int \fIy\fP\^, unsigned long \fIpixel\fP\^); .HP XIlibX11-1.6.3/man/XNoOp.man000064401431060000012000000062561247741723500153420ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XNoOp __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XNoOp \- No Operation .SH SYNTAX int XNoOp\^(\^Display *\fIdisplay\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .SH DESCRIPTION The .ZN XNoOp function sends a .ZN NoOperation protocol request to the X server, thereby exercising the connection. .SH "SEE ALSO" \fI\*(xL\fP libX11-1.6.3/man/XcmsLookupColor.man000064401431060000012000000000701247741723500174260ustar00alancstaff00002660200006.so man__libmansuffix__/XcmsQueryColor.__libmansuffix__ libX11-1.6.3/man/DisplayString.man000064401431060000012000000000631247741723500171210ustar00alancstaff00002660200006.so man__libmansuffix__/AllPlanes.__libmansuffix__ libX11-1.6.3/man/XFetchBuffer.man000064401431060000012000000000651247741723500166420ustar00alancstaff00002660200006.so man__libmansuffix__/XStoreBytes.__libmansuffix__ libX11-1.6.3/man/XSetPointerMapping.man000064401431060000012000000120211247741723500200620ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XSetPointerMapping __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XSetPointerMapping, XGetPointerMapping \- manipulate pointer settings .SH SYNTAX .HP int XSetPointerMapping\^(\^Display *\fIdisplay\fP\^, unsigned char \fImap\fP\^[]\^, int \fInmap\fP\^); .HP int XGetPointerMapping\^(\^Display *\fIdisplay\fP\^, unsigned char \fImap_return\fP\^[]\^, int \fInmap\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fImap\fP 1i Specifies the mapping list. .IP \fImap_return\fP 1i Returns the mapping list. .IP \fInmap\fP 1i Specifies the number of items in the mapping list. .SH DESCRIPTION The .ZN XSetPointerMapping function sets the mapping of the pointer. If it succeeds, the X server generates a .ZN MappingNotify event, and .ZN XSetPointerMapping returns .ZN MappingSuccess . Element map[i] defines the logical button number for the physical button i+1. The length of the list must be the same as .ZN XGetPointerMapping would return, or a .ZN BadValue error results. A zero element disables a button, and elements are not restricted in value by the number of physical buttons. However, no two elements can have the same nonzero value, or a .ZN BadValue error results. If any of the buttons to be altered are logically in the down state, .ZN XSetPointerMapping returns .ZN MappingBusy , and the mapping is not changed. .LP .ZN XSetPointerMapping can generate a .ZN BadValue error. .LP The .ZN XGetPointerMapping function returns the current mapping of the pointer. Pointer buttons are numbered starting from one. .ZN XGetPointerMapping returns the number of physical buttons actually on the pointer. The nominal mapping for a pointer is map[i]=i+1. The nmap argument specifies the length of the array where the pointer mapping is returned, and only the first nmap elements are returned in map_return. .SH DIAGNOSTICS .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .SH "SEE ALSO" XChangeKeyboardControl(__libmansuffix__), XChangeKeyboardMapping(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XVisibilityEvent.man000064401431060000012000000143301247741723500176100ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XVisibilityEvent __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XVisibilityEvent \- VisibilityNotify event structure .SH STRUCTURES The structure for .ZN VisibilityNotify events contains: .LP .Ds 0 typedef struct { int type; /\&* VisibilityNotify */ unsigned long serial; /\&* # of last request processed by server */ Bool send_event; /\&* true if this came from a SendEvent request */ Display *display; /\&* Display the event was read from */ Window window; int state; } XVisibilityEvent; .De .LP When you receive this event, the structure members are set as follows. .LP The type member is set to the event type constant name that uniquely identifies it. For example, when the X server reports a .ZN GraphicsExpose event to a client application, it sends an .ZN XGraphicsExposeEvent structure with the type member set to .ZN GraphicsExpose . The display member is set to a pointer to the display the event was read on. The send_event member is set to .ZN True if the event came from a .ZN SendEvent protocol request. The serial member is set from the serial number reported in the protocol but expanded from the 16-bit least-significant bits to a full 32-bit value. The window member is set to the window that is most useful to toolkit dispatchers. .LP The window member is set to the window whose visibility state changes. The state member is set to the state of the window's visibility and can be .ZN VisibilityUnobscured , .ZN VisibilityPartiallyObscured , or .ZN VisibilityFullyObscured . The X server ignores all of a window's subwindows when determining the visibility state of the window and processes .ZN VisibilityNotify events according to the following: .IP \(bu 5 When the window changes state from partially obscured, fully obscured, or not viewable to viewable and completely unobscured, the X server generates the event with the state member of the .ZN XVisibilityEvent structure set to .ZN VisibilityUnobscured . .IP \(bu 5 When the window changes state from viewable and completely unobscured or not viewable to viewable and partially obscured, the X server generates the event with the state member of the .ZN XVisibilityEvent structure set to .ZN VisibilityPartiallyObscured . .IP \(bu 5 When the window changes state from viewable and completely unobscured, viewable and partially obscured, or not viewable to viewable and fully obscured, the X server generates the event with the state member of the .ZN XVisibilityEvent structure set to .ZN VisibilityFullyObscured . .SH "SEE ALSO" XAnyEvent(__libmansuffix__), XButtonEvent(__libmansuffix__), XCreateWindowEvent(__libmansuffix__), XCirculateEvent(__libmansuffix__), XCirculateRequestEvent(__libmansuffix__), XColormapEvent(__libmansuffix__), XConfigureEvent(__libmansuffix__), XConfigureRequestEvent(__libmansuffix__), XCrossingEvent(__libmansuffix__), XDestroyWindowEvent(__libmansuffix__), XErrorEvent(__libmansuffix__), XExposeEvent(__libmansuffix__), XFocusChangeEvent(__libmansuffix__), XGraphicsExposeEvent(__libmansuffix__), XGravityEvent(__libmansuffix__), XKeymapEvent(__libmansuffix__), XMapEvent(__libmansuffix__), XMapRequestEvent(__libmansuffix__), XPropertyEvent(__libmansuffix__), XReparentEvent(__libmansuffix__), XResizeRequestEvent(__libmansuffix__), XSelectionClearEvent(__libmansuffix__), XSelectionEvent(__libmansuffix__), XSelectionRequestEvent(__libmansuffix__), XUnmapEvent(__libmansuffix__), .br \fI\*(xL\fP libX11-1.6.3/man/XLookupKeysym.man000064401431060000012000000160571247741723500171420ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XLookupKeysym __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XLookupKeysym, XRefreshKeyboardMapping, XLookupString, XRebindKeysym \- handle keyboard input events in Latin-1 .SH SYNTAX .HP KeySym XLookupKeysym(\^XKeyEvent *\fIkey_event\fP\^, int \fIindex\fP\^); .HP int XRefreshKeyboardMapping(\^XMappingEvent *\fIevent_map\fP\^); .HP int XLookupString(\^XKeyEvent *\fIevent_struct\fP\^, char *\fIbuffer_return\fP\^, int \fIbytes_buffer\fP\^, KeySym *\fIkeysym_return\fP\^, XComposeStatus *\fIstatus_in_out\fP\^); .HP int XRebindKeysym(\^Display *\fIdisplay\fP\^, KeySym \fIkeysym\fP\^, KeySym \fIlist\fP\^[\^]\^, int \fImod_count\fP\^, unsigned char *\fIstring\fP\^, int \fInum_bytes\fP\^); .SH ARGUMENTS .IP \fIbuffer_return\fP 1i Returns the translated characters. .IP \fIbytes_buffer\fP 1i Specifies the length of the buffer. No more than bytes_buffer of translation are returned. .IP \fInum_bytes\fP 1i Specifies the number of bytes in the string argument. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIevent_map\fP 1i Specifies the mapping event that is to be used. .IP \fIevent_struct\fP 1i Specifies the key event structure to be used. You can pass .ZN XKeyPressedEvent or .ZN XKeyReleasedEvent . .IP \fIindex\fP 1i Specifies the index into the KeySyms list for the event's KeyCode. .IP \fIkey_event\fP 1i Specifies the .ZN KeyPress or .ZN KeyRelease event. .IP \fIkeysym\fP 1i Specifies the KeySym that is to be \*(Fn. .IP \fIkeysym_return\fP 1i Returns the KeySym computed from the event if this argument is not NULL. .IP \fIlist\fP 1i Specifies the KeySyms to be used as modifiers. .IP \fImod_count\fP 1i Specifies the number of modifiers in the modifier list. .IP \fIstatus_in_out\fP 1i Specifies or returns the .ZN XComposeStatus structure or NULL. .IP \fIstring\fP 1i Specifies the string that is copied and will be returned by .ZN XLookupString . .SH DESCRIPTION The .ZN XLookupKeysym function uses a given keyboard event and the index you specified to return the KeySym from the list that corresponds to the KeyCode member in the .ZN XKeyPressedEvent or .ZN XKeyReleasedEvent structure. If no KeySym is defined for the KeyCode of the event, .ZN XLookupKeysym returns .ZN NoSymbol . .LP The .ZN XRefreshKeyboardMapping function refreshes the stored modifier and keymap information. You usually call this function when a .ZN MappingNotify event with a request member of .ZN MappingKeyboard or .ZN MappingModifier occurs. The result is to update Xlib's knowledge of the keyboard. .LP The .ZN XLookupString function translates a key event to a KeySym and a string. The KeySym is obtained by using the standard interpretation of the .ZN Shift , .ZN Lock , group, and numlock modifiers as defined in the X Protocol specification. If the KeySym has been rebound (see .ZN XRebindKeysym ), the bound string will be stored in the buffer. Otherwise, the KeySym is mapped, if possible, to an ISO Latin-1 character or (if the Control modifier is on) to an ASCII control character, and that character is stored in the buffer. .ZN XLookupString returns the number of characters that are stored in the buffer. .LP If present (non-NULL), the .ZN XComposeStatus structure records the state, which is private to Xlib, that needs preservation across calls to .ZN XLookupString to implement compose processing. The creation of .ZN XComposeStatus structures is implementation-dependent; a portable program must pass NULL for this argument. .LP The .ZN XRebindKeysym function can be used to rebind the meaning of a KeySym for the client. It does not redefine any key in the X server but merely provides an easy way for long strings to be attached to keys. .ZN XLookupString returns this string when the appropriate set of modifier keys are pressed and when the KeySym would have been used for the translation. No text conversions are performed; the client is responsible for supplying appropriately encoded strings. Note that you can rebind a KeySym that may not exist. .SH "SEE ALSO" XButtonEvent(__libmansuffix__), XMapEvent(__libmansuffix__), XStringToKeysym(__libmansuffix__), XkbLookupKeySym(__libmansuffix__), XkbRefreshKeyboardMapping(__libmansuffix__), XmbLookupString(__libmansuffix__), XwcLookupString(__libmansuffix__), Xutf8LookupString(__libmansuffix__), Compose(__filemansuffix__) .br \fI\*(xL\fP M, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions ColibX11-1.6.3/man/XrmQGetSearchResource.man000064401431060000012000000000701247741723500205100ustar00alancstaff00002660200006.so man__libmansuffix__/XrmGetResource.__libmansuffix__ libX11-1.6.3/man/XGetIconSizes.man000064401431060000012000000000701247741723500170210ustar00alancstaff00002660200006.so man__libmansuffix__/XAllocIconSize.__libmansuffix__ libX11-1.6.3/man/XKeyEvent.man000064401431060000012000000000661247741723500162120ustar00alancstaff00002660200006.so man__libmansuffix__/XButtonEvent.__libmansuffix__ libX11-1.6.3/man/XrmGetStringDatabase.man000064401431060000012000000000741247741723500203510ustar00alancstaff00002660200006.so man__libmansuffix__/XrmGetFileDatabase.__libmansuffix__ libX11-1.6.3/man/XSetIOErrorHandler.man000064401431060000012000000000721247741723500177500ustar00alancstaff00002660200006.so man__libmansuffix__/XSetErrorHandler.__libmansuffix__ libX11-1.6.3/man/XGetWMSizeHints.man000064401431060000012000000000711247741723500173000ustar00alancstaff00002660200006.so man__libmansuffix__/XAllocSizeHints.__libmansuffix__ libX11-1.6.3/man/ScreenCount.man000064401431060000012000000000631247741723500165550ustar00alancstaff00002660200006.so man__libmansuffix__/AllPlanes.__libmansuffix__ libX11-1.6.3/man/XIconSize.man000064401431060000012000000000701247741723500161760ustar00alancstaff00002660200006.so man__libmansuffix__/XAllocIconSize.__libmansuffix__ libX11-1.6.3/man/XPending.man000064401431060000012000000000601247741723500160360ustar00alancstaff00002660200006.so man__libmansuffix__/XFlush.__libmansuffix__ libX11-1.6.3/man/XGCValues.man000064401431060000012000000000631247741723500161260ustar00alancstaff00002660200006.so man__libmansuffix__/XCreateGC.__libmansuffix__ libX11-1.6.3/man/XTextWidth16.man000064401431060000012000000000641247741723500165510ustar00alancstaff00002660200006.so man__libmansuffix__/XTextWidth.__libmansuffix__ libX11-1.6.3/man/XGetAtomNames.man000064401431060000012000000000651247741723500170030ustar00alancstaff00002660200006.so man__libmansuffix__/XInternAtom.__libmansuffix__ libX11-1.6.3/man/XUnmapEvent.man000064401431060000012000000127171247741723500165500ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XUnmapEvent __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XUnmapEvent \- UnmapNotify event structure .SH STRUCTURES The structure for .ZN UnmapNotify events contains: .LP .Ds 0 typedef struct { int type; /\&* UnmapNotify */ unsigned long serial; /\&* # of last request processed by server */ Bool send_event; /\&* true if this came from a SendEvent request */ Display *display; /\&* Display the event was read from */ Window event; Window window; Bool from_configure; } XUnmapEvent; .De .LP When you receive this event, the structure members are set as follows. .LP The type member is set to the event type constant name that uniquely identifies it. For example, when the X server reports a .ZN GraphicsExpose event to a client application, it sends an .ZN XGraphicsExposeEvent structure with the type member set to .ZN GraphicsExpose . The display member is set to a pointer to the display the event was read on. The send_event member is set to .ZN True if the event came from a .ZN SendEvent protocol request. The serial member is set from the serial number reported in the protocol but expanded from the 16-bit least-significant bits to a full 32-bit value. The window member is set to the window that is most useful to toolkit dispatchers. .LP The event member is set either to the unmapped window or to its parent, depending on whether .ZN StructureNotify or .ZN SubstructureNotify was selected. This is the window used by the X server to report the event. The window member is set to the window that was unmapped. The from_configure member is set to .ZN True if the event was generated as a result of a resizing of the window's parent when the window itself had a win_gravity of .ZN UnmapGravity . .SH "SEE ALSO" XAnyEvent(__libmansuffix__), XButtonEvent(__libmansuffix__), XCreateWindowEvent(__libmansuffix__), XCirculateEvent(__libmansuffix__), XCirculateRequestEvent(__libmansuffix__), XColormapEvent(__libmansuffix__), XConfigureEvent(__libmansuffix__), XConfigureRequestEvent(__libmansuffix__), XCrossingEvent(__libmansuffix__), XDestroyWindowEvent(__libmansuffix__), XErrorEvent(__libmansuffix__), XExposeEvent(__libmansuffix__), XFocusChangeEvent(__libmansuffix__), XGraphicsExposeEvent(__libmansuffix__), XGravityEvent(__libmansuffix__), XKeymapEvent(__libmansuffix__), XMapEvent(__libmansuffix__), XMapRequestEvent(__libmansuffix__), XPropertyEvent(__libmansuffix__), XReparentEvent(__libmansuffix__), XResizeRequestEvent(__libmansuffix__), XSelectionClearEvent(__libmansuffix__), XSelectionEvent(__libmansuffix__), XSelectionRequestEvent(__libmansuffix__), XVisibilityEvent(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XcmsCIExyY.man000064401431060000012000000000631247741723500162720ustar00alancstaff00002660200006.so man__libmansuffix__/XcmsColor.__libmansuffix__ libX11-1.6.3/man/XQueryTextExtents.man000064401431060000012000000000661247741723500200050ustar00alancstaff00002660200006.so man__libmansuffix__/XTextExtents.__libmansuffix__ libX11-1.6.3/man/XcmsTekHVCQueryMaxC.man000064401431060000012000000153261247741723500200530ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XcmsTekHVCQueryMaxC __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XcmsTekHVCQueryMaxC, XcmsTekHVCQueryMaxV, XcmsTekHVCQueryMaxVC, XcmsTekHVCQueryMaxVSamples, XcmsTekHVCQueryMinV \- obtain the TekHVC coordinates .SH SYNTAX .HP Status XcmsTekHVCQueryMaxC\^(\^XcmsCCC \fIccc\fP\^, XcmsFloat \fIhue\fP\^, XcmsFloat \fIvalue\fP\^, XcmsColor *\fIcolor_return\fP\^); .HP Status XcmsTekHVCQueryMaxV\^(\^XcmsCCC \fIccc\fP\^, XcmsFloat \fIhue\fP\^, XcmsFloat \fIchroma\fP\^, XcmsColor *\fIcolor_return\fP\^); .HP Status XcmsTekHVCQueryMaxVC\^(\^XcmsCCC \fIccc\fP\^, XcmsFloat \fIhue\fP\^, XcmsColor *\fIcolor_return\fP\^); .HP Status XcmsTekHVCQueryMaxVSamples\^(\^XcmsCCC \fIccc\fP\^, XcmsFloat \fIhue\fP\^, XcmsColor \fIcolors_return[]\fP\^, unsigned int \fInsamples\fP\^); .HP Status XcmsTekHVCQueryMinV\^(\^XcmsCCC \fIccc\fP\^, XcmsFloat \fIhue\fP\^, XcmsFloat \fIchroma\fP\^, XcmsColor *\fIcolor_return\fP\^); .SH ARGUMENTS .IP \fIccc\fP 1i Specifies the CCC. Note that the CCC's Client White Point and White Point Adjustment procedures are ignored. .ds Ch maximum Value (MaxV) .IP \fIchroma\fP 1i Specifies the chroma at which to find \*(Ch. .IP \fIcolors_return\fP 1i Returns nsamples of color specifications in XcmsTekHVC such that the Chroma is the maximum attainable for the Value and Hue. The white point associated with the returned color specification is the Screen White Point. The value returned in the pixel member is undefined. .ds Lc maximum Chroma along with the actual Hue and Value (MaxC), \ maximum Value along with the Hue and Chroma (MaxV), \ color specification in XcmsTekHVC for the maximum Chroma, \ the Value at which that maximum Chroma is reached and actual Hue (MaxVC) \ or minimum Value and the actual Hue and Chroma (MinL) .ds lC maximum Chroma (MaxC and MaxVC), maximum Value (MaxV), or \ minimum Value (MinL) .IP \fIcolor_return\fP 1i Returns the \*(Lc at which the \*(lC was found. The white point associated with the returned color specification is the Screen White Point. The value returned in the pixel member is undefined. .ds Hu in which to find the maximum Chroma (MaxC and MaxVC), \ maximum Value (MaxV), the maximum Chroma/Value samples (MaxVSamples), \ or the minimum Value (MinL) .IP \fIhue\fP 1i Specifies the Hue \*(Hu. .IP \fInsamples\fP 1i Specifies the number of samples. .ds Va maximum Chroma (MaxC) or minimum Value (MinL) .IP \fIvalue\fP 1i Specifies the Value in which to find the \*(Va. .SH DESCRIPTION The .ZN XcmsTekHVCQueryMaxC function, given a Hue and Value, determines the maximum Chroma in TekHVC color space displayable by the screen. It returns the maximum Chroma along with the actual Hue and Value at which the maximum Chroma was found. .LP The .ZN XcmsTekHVCQueryMaxV function, given a Hue and Chroma, determines the maximum Value in TekHVC color space displayable by the screen. It returns the maximum Value and the actual Hue and Chroma at which the maximum Value was found. .LP The .ZN XcmsTekHVCQueryMaxVC function, given a Hue, determines the maximum Chroma in TekHVC color space displayable by the screen and the Value at which that maximum Chroma is reached. It returns the maximum Chroma, the Value at which that maximum Chroma is reached, and the actual Hue for which the maximum Chroma was found. .LP The .ZN XcmsTekHVCQueryMaxVSamples returns nsamples of maximum Value, the Chroma at which that maximum Value is reached, and the actual Hue for which the maximum Chroma was found. These sample points may then be used to plot the maximum Value/Chroma boundary of the screen's color gamut for the specified Hue in TekHVC color space. .LP The .ZN XcmsTekHVCQueryMinV function, given a Hue and Chroma, determines the minimum Value in TekHVC color space displayable by the screen. It returns the minimum Value and the actual Hue and Chroma at which the minimum Value was found. .SH "SEE ALSO" XcmsCIELabQueryMaxC(__libmansuffix__), XcmsCIELuvQueryMaxC(__libmansuffix__), XcmsQueryBlack(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XCreateGC.man000064401431060000012000000632011247741723500160750ustar00alancstaff00002660200006'\" t .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 '\" t .TH XCreateGC __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XCreateGC, XCopyGC, XChangeGC, XGetGCValues, XFreeGC, XGContextFromGC, XGCValues \- create or free graphics contexts and graphics context structure .SH SYNTAX .HP GC XCreateGC\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, unsigned long \fIvaluemask\fP\^, XGCValues *\^\fIvalues\fP\^); .HP int XCopyGC\^(\^Display *\fIdisplay\fP\^, GC \fIsrc\fP\^, unsigned long \fIvaluemask\fP\^, GC \fIdest\fP\^); .HP int XChangeGC\^(\^Display *\fIdisplay\fP\^, GC \fIgc\fP\^, unsigned long \fIvaluemask\fP\^, XGCValues *\^\fIvalues\fP\^); .HP Status XGetGCValues\^(\^Display *\fIdisplay\fP\^, GC \fIgc\fP\^, unsigned long \fIvaluemask\fP\^, XGCValues *\fIvalues_return\fP\^); .HP int XFreeGC\^(\^Display *\fIdisplay\fP\^, GC \fIgc\fP\^); .HP GContext XGContextFromGC\^(\^GC \fIgc\fP\^); .SH ARGUMENTS .IP \fId\fP 1i Specifies the drawable. .IP \fIdest\fP 1i Specifies the destination GC. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIgc\fP 1i Specifies the GC. .IP \fIsrc\fP 1i Specifies the components of the source GC. .ds Vm set, copied, changed, or returned .IP \fIvaluemask\fP 1i Specifies which components in the GC are to be \*(Vm. This argument is the bitwise inclusive OR of zero or more of the valid GC component mask bits. .IP \fIvalues\fP 1i Specifies any values as specified by the valuemask. .IP \fIvalues_return\fP 1i Returns the GC values in the specified .ZN XGCValues structure. .SH DESCRIPTION The .ZN XCreateGC function creates a graphics context and returns a GC. The GC can be used with any destination drawable having the same root and depth as the specified drawable. Use with other drawables results in a .ZN BadMatch error. .LP .ZN XCreateGC can generate .ZN BadAlloc , .ZN BadDrawable , .ZN BadFont , .ZN BadMatch , .ZN BadPixmap , and .ZN BadValue errors. .LP The .ZN XCopyGC function copies the specified components from the source GC to the destination GC. The source and destination GCs must have the same root and depth, or a .ZN BadMatch error results. The valuemask specifies which component to copy, as for .ZN XCreateGC . .LP .ZN XCopyGC can generate .ZN BadAlloc , .ZN BadGC , and .ZN BadMatch errors. .LP The .ZN XChangeGC function changes the components specified by valuemask for the specified GC. The values argument contains the values to be set. The values and restrictions are the same as for .ZN XCreateGC . Changing the clip-mask overrides any previous .ZN XSetClipRectangles request on the context. Changing the dash-offset or dash-list overrides any previous .ZN XSetDashes request on the context. The order in which components are verified and altered is server dependent. If an error is generated, a subset of the components may have been altered. .LP .ZN XChangeGC can generate .ZN BadAlloc , .ZN BadFont , .ZN BadGC , .ZN BadMatch , .ZN BadPixmap , and .ZN BadValue errors. .LP The .ZN XGetGCValues function returns the components specified by valuemask for the specified GC. If the valuemask contains a valid set of GC mask bits .Pn ( GCFunction , .ZN GCPlaneMask , .ZN GCForeground , .ZN GCBackground , .ZN GCLineWidth , .ZN GCLineStyle , .ZN GCCapStyle , .ZN GCJoinStyle , .ZN GCFillStyle , .ZN GCFillRule , .ZN GCTile , .ZN GCStipple , .ZN GCTileStipXOrigin , .ZN GCTileStipYOrigin , .ZN GCFont , .ZN GCSubwindowMode , .ZN GCGraphicsExposures , .ZN GCClipXOrigin , .ZN GCCLipYOrigin , .ZN GCDashOffset , or .ZN GCArcMode ) and no error occurs, .ZN XGetGCValues sets the requested components in values_return and returns a nonzero status. Otherwise, it returns a zero status. Note that the clip-mask and dash-list (represented by the .ZN GCClipMask and .ZN GCDashList bits, respectively, in the valuemask) cannot be requested. Also note that an invalid resource ID (with one or more of the three most significant bits set to 1) will be returned for .ZN GCFont , .ZN GCTile , and .ZN GCStipple if the component has never been explicitly set by the client. .LP The .ZN XFreeGC function destroys the specified GC as well as all the associated storage. .LP .ZN XFreeGC can generate a .ZN BadGC error. .SH STRUCTURES The .ZN XGCValues structure contains: .LP /\&* GC attribute value mask bits */ .TS lw(.5i) lw(2.5i) lw(.75i). \&#define T{ .ZN GCFunction T} T{ (1L<<0) T} \&#define T{ .ZN GCPlaneMask T} T{ (1L<<1) T} \&#define T{ .ZN GCForeground T} T{ (1L<<2) T} \&#define T{ .ZN GCBackground T} T{ (1L<<3) T} \&#define T{ .ZN GCLineWidth T} T{ (1L<<4) T} \&#define T{ .ZN GCLineStyle T} T{ (1L<<5) T} \&#define T{ .ZN GCCapStyle T} T{ (1L<<6) T} \&#define T{ .ZN GCJoinStyle T} T{ (1L<<7) T} \&#define T{ .ZN GCFillStyle T} T{ (1L<<8) T} \&#define T{ .ZN GCFillRule T} T{ (1L<<9) T} \&#define T{ .ZN GCTile T} T{ (1L<<10) T} \&#define T{ .ZN GCStipple T} T{ (1L<<11) T} \&#define T{ .ZN GCTileStipXOrigin T} T{ (1L<<12) T} \&#define T{ .ZN GCTileStipYOrigin T} T{ (1L<<13) T} \&#define T{ .ZN GCFont T} T{ (1L<<14) T} \&#define T{ .ZN GCSubwindowMode T} T{ (1L<<15) T} \&#define T{ .ZN GCGraphicsExposures T} T{ (1L<<16) T} \&#define T{ .ZN GCClipXOrigin T} T{ (1L<<17) T} \&#define T{ .ZN GCClipYOrigin T} T{ (1L<<18) T} \&#define T{ .ZN GCClipMask T} T{ (1L<<19) T} \&#define T{ .ZN GCDashOffset T} T{ (1L<<20) T} \&#define T{ .ZN GCDashList T} T{ (1L<<21) T} \&#define T{ .ZN GCArcMode T} T{ (1L<<22) T} .TE .IN "XGCValues" "" "@DEF@" .LP .Ds 0 /\&* Values */ typedef struct { int function; /\&* logical operation */ unsigned long plane_mask; /\&* plane mask */ unsigned long foreground; /\&* foreground pixel */ unsigned long background; /\&* background pixel */ int line_width; /\&* line width (in pixels) */ int line_style; /\&* LineSolid, LineOnOffDash, LineDoubleDash */ int cap_style; /\&* CapNotLast, CapButt, CapRound, CapProjecting */ int join_style; /\&* JoinMiter, JoinRound, JoinBevel */ int fill_style; /\&* FillSolid, FillTiled, FillStippled FillOpaqueStippled*/ int fill_rule; /\&* EvenOddRule, WindingRule */ int arc_mode; /\&* ArcChord, ArcPieSlice */ Pixmap tile; /\&* tile pixmap for tiling operations */ Pixmap stipple; /\&* stipple 1 plane pixmap for stippling */ int ts_x_origin; /\&* offset for tile or stipple operations */ int ts_y_origin; Font font; /\&* default text font for text operations */ int subwindow_mode; /\&* ClipByChildren, IncludeInferiors */ Bool graphics_exposures; /\&* boolean, should exposures be generated */ int clip_x_origin; /\&* origin for clipping */ int clip_y_origin; Pixmap clip_mask; /\&* bitmap clipping; other calls for rects */ int dash_offset; /\&* patterned/dashed line information */ char dashes; } XGCValues; .De .LP The function attributes of a GC are used when you update a section of a drawable (the destination) with bits from somewhere else (the source). The function in a GC defines how the new destination bits are to be computed from the source bits and the old destination bits. .ZN GXcopy is typically the most useful because it will work on a color display, but special applications may use other functions, particularly in concert with particular planes of a color display. The 16 GC functions, defined in .hN X11/X.h , are: .\" are listed in Table 5-1 along with the .\"the associated hexadecimal code .\" and operation. .\".CP T 1 .\"Display Functions .TS lw(1.5i) cw(.5i) lw(2i). _ .sp 6p .B Function Name Value Operation .sp 6p _ .sp 6p T{ .ZN GXclear T} T{ 0x0 T} T{ 0 T} T{ .ZN GXand T} T{ 0x1 T} T{ src AND dst T} T{ .ZN GXandReverse T} T{ 0x2 T} T{ src AND NOT dst T} T{ .ZN GXcopy T} T{ 0x3 T} T{ src T} T{ .ZN GXandInverted T} T{ 0x4 T} T{ (NOT src) AND dst T} T{ .ZN GXnoop T} T{ 0x5 T} T{ dst T} T{ .ZN GXxor T} T{ 0x6 T} T{ src XOR dst T} T{ .ZN GXor T} T{ 0x7 T} T{ src OR dst T} T{ .ZN GXnor T} T{ 0x8 T} T{ (NOT src) AND (NOT dst) T} T{ .ZN GXequiv T} T{ 0x9 T} T{ (NOT src) XOR dst T} T{ .ZN GXinvert T} T{ 0xa T} T{ NOT dst T} T{ .ZN GXorReverse T} T{ 0xb T} T{ src OR (NOT dst) T} T{ .ZN GXcopyInverted T} T{ 0xc T} T{ NOT src T} T{ .ZN GXorInverted T} T{ 0xd T} T{ (NOT src) OR dst T} T{ .ZN GXnand T} T{ 0xe T} T{ (NOT src) OR (NOT dst) T} T{ .ZN GXset T} T{ 0xf T} T{ 1 T} .sp 6p _ .TE .LP Many graphics operations depend on either pixel values or planes in a GC. .IN "Pixel value" The planes attribute is of type long, and it specifies which planes of the destination are to be modified, one bit per plane. .IN "Plane" "mask" A monochrome display has only one plane and will be the least significant bit of the word. As planes are added to the display hardware, they will occupy more significant bits in the plane mask. .LP In graphics operations, given a source and destination pixel, the result is computed bitwise on corresponding bits of the pixels. That is, a Boolean operation is performed in each bit plane. The plane_mask restricts the operation to a subset of planes. A macro constant .ZN AllPlanes can be used to refer to all planes of the screen simultaneously. The result is computed by the following: .LP .Ds ((src FUNC dst) AND plane-mask) OR (dst AND (NOT plane-mask)) .De .LP Range checking is not performed on the values for foreground, background, or plane_mask. They are simply truncated to the appropriate number of bits. The line-width is measured in pixels and either can be greater than or equal to one (wide line) or can be the special value zero (thin line). .LP Wide lines are drawn centered on the path described by the graphics request. Unless otherwise specified by the join-style or cap-style, the bounding box of a wide line with endpoints [x1, y1], [x2, y2] and width w is a rectangle with vertices at the following real coordinates: .LP .Ds [x1-(w*sn/2), y1+(w*cs/2)], [x1+(w*sn/2), y1-(w*cs/2)], [x2-(w*sn/2), y2+(w*cs/2)], [x2+(w*sn/2), y2-(w*cs/2)] .De .LP Here sn is the sine of the angle of the line, and cs is the cosine of the angle of the line. A pixel is part of the line and so is drawn if the center of the pixel is fully inside the bounding box (which is viewed as having infinitely thin edges). If the center of the pixel is exactly on the bounding box, it is part of the line if and only if the interior is immediately to its right (x increasing direction). Pixels with centers on a horizontal edge are a special case and are part of the line if and only if the interior or the boundary is immediately below (y increasing direction) and the interior or the boundary is immediately to the right (x increasing direction). .LP Thin lines (zero line-width) are one-pixel-wide lines drawn using an unspecified, device-dependent algorithm. There are only two constraints on this algorithm. .IP 1. 5 If a line is drawn unclipped from [x1,y1] to [x2,y2] and if another line is drawn unclipped from [x1+dx,y1+dy] to [x2+dx,y2+dy], a point [x,y] is touched by drawing the first line if and only if the point [x+dx,y+dy] is touched by drawing the second line. .IP 2. 5 The effective set of points comprising a line cannot be affected by clipping. That is, a point is touched in a clipped line if and only if the point lies inside the clipping region and the point would be touched by the line when drawn unclipped. .LP A wide line drawn from [x1,y1] to [x2,y2] always draws the same pixels as a wide line drawn from [x2,y2] to [x1,y1], not counting cap-style and join-style. It is recommended that this property be true for thin lines, but this is not required. A line-width of zero may differ from a line-width of one in which pixels are drawn. This permits the use of many manufacturers' line drawing hardware, which may run many times faster than the more precisely specified wide lines. .LP In general, drawing a thin line will be faster than drawing a wide line of width one. However, because of their different drawing algorithms, thin lines may not mix well aesthetically with wide lines. If it is desirable to obtain precise and uniform results across all displays, a client should always use a line-width of one rather than a line-width of zero. .LP The line-style defines which sections of a line are drawn: .TS lw(1.3i) lw(4.5i). T{ .ZN LineSolid T} T{ The full path of the line is drawn. T} .sp 6p T{ .ZN LineDoubleDash T} T{ The full path of the line is drawn, but the even dashes are filled differently from the odd dashes (see fill-style) with .ZN CapButt style used where even and odd dashes meet. T} .sp 6p T{ .ZN LineOnOffDash T} T{ Only the even dashes are drawn, and cap-style applies to all internal ends of the individual dashes, except .ZN CapNotLast is treated as .ZN CapButt . T} .TE .LP The cap-style defines how the endpoints of a path are drawn: .IN "Graphics context" "path" .TS lw(1.3i) lw(4.5i). T{ .ZN CapNotLast T} T{ This is equivalent to .ZN CapButt except that for a line-width of zero the final endpoint is not drawn. T} .sp 6p T{ .ZN CapButt T} T{ The line is square at the endpoint (perpendicular to the slope of the line) with no projection beyond. T} .sp 6p T{ .ZN CapRound T} T{ The line has a circular arc with the diameter equal to the line-width, centered on the endpoint. (This is equivalent to .ZN CapButt for line-width of zero). T} .sp 6p T{ .ZN CapProjecting T} T{ The line is square at the end, but the path continues beyond the endpoint for a distance equal to half the line-width. (This is equivalent to .ZN CapButt for line-width of zero). T} .TE .LP The join-style defines how corners are drawn for wide lines: .TS lw(1.3i) lw(4.5i). T{ .ZN JoinMiter T} T{ The outer edges of two lines extend to meet at an angle. However, if the angle is less than 11 degrees, then a .ZN JoinBevel join-style is used instead. T} .sp 6p T{ .ZN JoinRound T} T{ The corner is a circular arc with the diameter equal to the line-width, centered on the joinpoint. T} .sp 6p T{ .ZN JoinBevel T} T{ The corner has .ZN CapButt endpoint styles with the triangular notch filled. T} .TE .LP For a line with coincident endpoints (x1=x2, y1=y2), when the cap-style is applied to both endpoints, the semantics depends on the line-width and the cap-style: .TS lw(1.3i) lw(.5i) lw(4i). T{ .ZN CapNotLast T} T{ thin T} T{ The results are device dependent, but the desired effect is that nothing is drawn. T} .sp 6p T{ .ZN CapButt T} T{ thin T} T{ The results are device dependent, but the desired effect is that a single pixel is drawn. T} .sp 6p T{ .ZN CapRound T} T{ thin T} T{ The results are the same as for .ZN CapButt /thin. T} .sp 6p T{ .ZN CapProjecting T} T{ thin T} T{ The results are the same as for .ZN CapButt /thin. T} .sp 6p T{ .ZN CapButt T} T{ wide T} T{ Nothing is drawn. T} .sp 6p T{ .ZN CapRound T} T{ wide T} T{ The closed path is a circle, centered at the endpoint, and with the diameter equal to the line-width. T} .sp 6p T{ .ZN CapProjecting T} T{ wide T} T{ The closed path is a square, aligned with the coordinate axes, centered at the endpoint, and with the sides equal to the line-width. T} .TE .LP For a line with coincident endpoints (x1=x2, y1=y2), when the join-style is applied at one or both endpoints, the effect is as if the line was removed from the overall path. However, if the total path consists of or is reduced to a single point joined with itself, the effect is the same as when the cap-style is applied at both endpoints. .LP The tile/stipple represents an infinite two-dimensional plane, with the tile/stipple replicated in all dimensions. When that plane is superimposed on the drawable for use in a graphics operation, the upper-left corner of some instance of the tile/stipple is at the coordinates within the drawable specified by the tile/stipple origin. The tile/stipple and clip origins are interpreted relative to the origin of whatever destination drawable is specified in a graphics request. The tile pixmap must have the same root and depth as the GC, or a .ZN BadMatch error results. The stipple pixmap must have depth one and must have the same root as the GC, or a .ZN BadMatch error results. For stipple operations where the fill-style is .ZN FillStippled but not .ZN FillOpaqueStippled , the stipple pattern is tiled in a single plane and acts as an additional clip mask to be ANDed with the clip-mask. Although some sizes may be faster to use than others, any size pixmap can be used for tiling or stippling. .LP The fill-style defines the contents of the source for line, text, and fill requests. For all text and fill requests (for example, .ZN XDrawText , .ZN XDrawText16 , .ZN XFillRectangle , .ZN XFillPolygon , and .ZN XFillArc ); for line requests with line-style .ZN LineSolid (for example, .ZN XDrawLine , .ZN XDrawSegments , .ZN XDrawRectangle , .ZN XDrawArc ); and for the even dashes for line requests with line-style .ZN LineOnOffDash or .ZN LineDoubleDash , the following apply: .TS lw(1.8i) lw(4i). T{ .ZN FillSolid T} T{ Foreground T} .sp 6p T{ .ZN FillTiled T} T{ Tile T} .sp 6p T{ .ZN FillOpaqueStippled T} T{ A tile with the same width and height as stipple, but with background everywhere stipple has a zero and with foreground everywhere stipple has a one T} .sp 6p T{ .ZN FillStippled T} T{ Foreground masked by stipple T} .TE .LP When drawing lines with line-style .ZN LineDoubleDash , the odd dashes are controlled by the fill-style in the following manner: .TS lw(1.8i) lw(4i). T{ .ZN FillSolid T} T{ Background T} .sp 6p T{ .ZN FillTiled T} T{ Same as for even dashes T} .sp 6p T{ .ZN FillOpaqueStippled T} T{ Same as for even dashes T} .sp 6p T{ .ZN FillStippled T} T{ Background masked by stipple T} .TE .LP Storing a pixmap in a GC might or might not result in a copy being made. If the pixmap is later used as the destination for a graphics request, the change might or might not be reflected in the GC. If the pixmap is used simultaneously in a graphics request both as a destination and as a tile or stipple, the results are undefined. .LP For optimum performance, you should draw as much as possible with the same GC (without changing its components). The costs of changing GC components relative to using different GCs depend on the display hardware and the server implementation. It is quite likely that some amount of GC information will be cached in display hardware and that such hardware can only cache a small number of GCs. .LP The dashes value is actually a simplified form of the more general patterns that can be set with .ZN XSetDashes . Specifying a value of N is equivalent to specifying the two-element list [N, N] in .ZN XSetDashes . The value must be nonzero, or a .ZN BadValue error results. .LP The clip-mask restricts writes to the destination drawable. If the clip-mask is set to a pixmap, it must have depth one and have the same root as the GC, or a .ZN BadMatch error results. If clip-mask is set to .ZN None , the pixels are always drawn regardless of the clip origin. The clip-mask also can be set by calling the .ZN XSetClipRectangles or .ZN XSetRegion functions. Only pixels where the clip-mask has a bit set to 1 are drawn. Pixels are not drawn outside the area covered by the clip-mask or where the clip-mask has a bit set to 0. The clip-mask affects all graphics requests. The clip-mask does not clip sources. The clip-mask origin is interpreted relative to the origin of whatever destination drawable is specified in a graphics request. .LP You can set the subwindow-mode to .ZN ClipByChildren or .ZN IncludeInferiors . For .ZN ClipByChildren , both source and destination windows are additionally clipped by all viewable .ZN InputOutput children. For .ZN IncludeInferiors , neither source nor destination window is clipped by inferiors. This will result in including subwindow contents in the source and drawing through subwindow boundaries of the destination. The use of .ZN IncludeInferiors on a window of one depth with mapped inferiors of differing depth is not illegal, but the semantics are undefined by the core protocol. .LP The fill-rule defines what pixels are inside (drawn) for paths given in .ZN XFillPolygon requests and can be set to .ZN EvenOddRule or .ZN WindingRule . For .ZN EvenOddRule , a point is inside if an infinite ray with the point as origin crosses the path an odd number of times. For .ZN WindingRule , a point is inside if an infinite ray with the point as origin crosses an unequal number of clockwise and counterclockwise directed path segments. A clockwise directed path segment is one that crosses the ray from left to right as observed from the point. A counterclockwise segment is one that crosses the ray from right to left as observed from the point. The case where a directed line segment is coincident with the ray is uninteresting because you can simply choose a different ray that is not coincident with a segment. .LP For both .ZN EvenOddRule and .ZN WindingRule , a point is infinitely small, and the path is an infinitely thin line. A pixel is inside if the center point of the pixel is inside and the center point is not on the boundary. If the center point is on the boundary, the pixel is inside if and only if the polygon interior is immediately to its right (x increasing direction). Pixels with centers on a horizontal edge are a special case and are inside if and only if the polygon interior is immediately below (y increasing direction). .LP The arc-mode controls filling in the .ZN XFillArcs function and can be set to .ZN ArcPieSlice or .ZN ArcChord . For .ZN ArcPieSlice , the arcs are pie-slice filled. For .ZN ArcChord , the arcs are chord filled. .LP The graphics-exposure flag controls .ZN GraphicsExpose event generation for .ZN XCopyArea and .ZN XCopyPlane requests (and any similar requests defined by extensions). .SH DIAGNOSTICS .TP 1i .ZN BadAlloc The server failed to allocate the requested resource or server memory. .TP 1i .ZN BadDrawable A value for a Drawable argument does not name a defined Window or Pixmap. .TP 1i .ZN BadFont A value for a Font or GContext argument does not name a defined Font. .TP 1i .ZN BadGC A value for a GContext argument does not name a defined GContext. .TP 1i .ZN BadMatch An .ZN InputOnly window is used as a Drawable. .TP 1i .ZN BadMatch Some argument or pair of arguments has the correct type and range but fails to match in some other way required by the request. .TP 1i .ZN BadPixmap A value for a Pixmap argument does not name a defined Pixmap. .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .SH "SEE ALSO" AllPlanes(__libmansuffix__), XCopyArea(__libmansuffix__), XCreateRegion(__libmansuffix__), XDrawArc(__libmansuffix__), XDrawLine(__libmansuffix__), XDrawRectangle(__libmansuffix__), XDrawText(__libmansuffix__), XFillRectangle(__libmansuffix__), XQueryBestSize(__libmansuffix__), XSetArcMode(__libmansuffix__), XSetClipOrigin(__libmansuffix__), XSetFillStyle(__libmansuffix__), XSetFont(__libmansuffix__), XSetLineAttributes(__libmansuffix__), XSetState(__libmansuffix__), XSetTile(__libmansuffix__) .br \fI\*(xL\fP he line) with no projection beyond. T} .sp 6p T{ .ZN CapRound T} T{ The line has a circular arc with the diameter equal to the line-width, centered on the endpoint. (This is equivalent to .ZN CapButt for line-width of zero). T} .sp 6p T{ .ZN CapProjecting T} T{ The line is square at the end, but the path continues beyond the endpoint for a distance equal to half the line-width.libX11-1.6.3/man/XGetWMNormalHints.man000064401431060000012000000000711247741723500176160ustar00alancstaff00002660200006.so man__libmansuffix__/XAllocSizeHints.__libmansuffix__ libX11-1.6.3/man/XSelectInput.man000064401431060000012000000113401247741723500167140ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XSelectInput __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XSelectInput \- select input events .SH SYNTAX .HP int XSelectInput\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, long \fIevent_mask\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIevent_mask\fP 1i Specifies the event mask. .ds Wi whose events you are interested in .IP \fIw\fP 1i Specifies the window \*(Wi. .SH DESCRIPTION The .ZN XSelectInput function requests that the X server report the events associated with the specified event mask. Initially, X will not report any of these events. Events are reported relative to a window. If a window is not interested in a device event, it usually propagates to the closest ancestor that is interested, unless the do_not_propagate mask prohibits it. .IN "Event" "propagation" .LP Setting the event-mask attribute of a window overrides any previous call for the same window but not for other clients. Multiple clients can select for the same events on the same window with the following restrictions: .IP \(bu 5 Multiple clients can select events on the same window because their event masks are disjoint. When the X server generates an event, it reports it to all interested clients. .IP \(bu 5 Only one client at a time can select .ZN CirculateRequest , .ZN ConfigureRequest , or .ZN MapRequest events, which are associated with the event mask .ZN SubstructureRedirectMask . .IP \(bu 5 Only one client at a time can select a .ZN ResizeRequest event, which is associated with the event mask .ZN ResizeRedirectMask . .IP \(bu 5 Only one client at a time can select a .ZN ButtonPress event, which is associated with the event mask .ZN ButtonPressMask . .LP The server reports the event to all interested clients. .LP .ZN XSelectInput can generate a .ZN BadWindow error. .SH DIAGNOSTICS .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" \fI\*(xL\fP ears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" DigilibX11-1.6.3/man/XSelectionClearEvent.man000064401431060000012000000125131247741723500203560ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XSelectionClearEvent __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XSelectionClearEvent \- SelectionClear event structure .SH STRUCTURES The structure for .ZN SelectionClear events contains: .LP .Ds 0 typedef struct { int type; /\&* SelectionClear */ unsigned long serial; /\&* # of last request processed by server */ Bool send_event; /\&* true if this came from a SendEvent request */ Display *display; /\&* Display the event was read from */ Window window; Atom selection; Time time; } XSelectionClearEvent; .De .LP When you receive this event, the structure members are set as follows. .LP The type member is set to the event type constant name that uniquely identifies it. For example, when the X server reports a .ZN GraphicsExpose event to a client application, it sends an .ZN XGraphicsExposeEvent structure with the type member set to .ZN GraphicsExpose . The display member is set to a pointer to the display the event was read on. The send_event member is set to .ZN True if the event came from a .ZN SendEvent protocol request. The serial member is set from the serial number reported in the protocol but expanded from the 16-bit least-significant bits to a full 32-bit value. The window member is set to the window that is most useful to toolkit dispatchers. .LP The selection member is set to the selection atom. The time member is set to the last change time recorded for the selection. The window member is the window that was specified by the current owner (the owner losing the selection) in its .ZN XSetSelectionOwner call. .SH "SEE ALSO" XAnyEvent(__libmansuffix__), XButtonEvent(__libmansuffix__), XCreateWindowEvent(__libmansuffix__), XCirculateEvent(__libmansuffix__), XCirculateRequestEvent(__libmansuffix__), XColormapEvent(__libmansuffix__), XConfigureEvent(__libmansuffix__), XConfigureRequestEvent(__libmansuffix__), XCrossingEvent(__libmansuffix__), XDestroyWindowEvent(__libmansuffix__), XErrorEvent(__libmansuffix__), XExposeEvent(__libmansuffix__), XFocusChangeEvent(__libmansuffix__), XGraphicsExposeEvent(__libmansuffix__), XGravityEvent(__libmansuffix__), XKeymapEvent(__libmansuffix__), XMapEvent(__libmansuffix__), XMapRequestEvent(__libmansuffix__), XPropertyEvent(__libmansuffix__), XReparentEvent(__libmansuffix__), XResizeRequestEvent(__libmansuffix__), XSelectionEvent(__libmansuffix__), XSelectionRequestEvent(__libmansuffix__), XSetSelectionOwner(__libmansuffix__), XUnmapEvent(__libmansuffix__), XVisibilityEvent(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XBell.man000064401431060000012000000001001247741723500153230ustar00alancstaff00002660200006.so man__libmansuffix__/XChangeKeyboardControl.__libmansuffix__ libX11-1.6.3/man/DefaultRootWindow.man000064401431060000012000000000631247741723500177450ustar00alancstaff00002660200006.so man__libmansuffix__/AllPlanes.__libmansuffix__ libX11-1.6.3/man/Xutf8SetWMProperties.man000064401431060000012000000000721247741723500203400ustar00alancstaff00002660200006.so man__libmansuffix__/XSetWMProperties.__libmansuffix__ libX11-1.6.3/man/XClearArea.man000064401431060000012000000132051247741723500162760ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XClearArea __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XClearArea, XClearWindow \- clear area or window .SH SYNTAX .HP int XClearArea\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, int \fIx\fP\^, int \fIy\fP\^, unsigned \fIwidth\fP\^, unsigned \fIheight\fP\^, Bool \fIexposures\fP\^); .HP int XClearWindow\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIexposures\fP 1i Specifies a Boolean value that indicates if .ZN Expose events are to be generated. .IP \fIw\fP 1i Specifies the window. .ds Wh , which are the dimensions of the rectangle .IP \fIwidth\fP 1i .br .ns .IP \fIheight\fP 1i Specify the width and height\*(Wh. .ds Xy , which are relative to the origin of the window \ and specify the upper-left corner of the rectangle .IP \fIx\fP 1i .br .ns .IP \fIy\fP 1i Specify the x and y coordinates\*(Xy. .SH DESCRIPTION The .ZN XClearArea function paints a rectangular area in the specified window according to the specified dimensions with the window's background pixel or pixmap. The subwindow-mode effectively is .ZN ClipByChildren . If width is zero, it is replaced with the current width of the window minus x. If height is zero, it is replaced with the current height of the window minus y. If the window has a defined background tile, the rectangle clipped by any children is filled with this tile. If the window has background .ZN None , the contents of the window are not changed. In either case, if exposures is .ZN True , one or more .ZN Expose events are generated for regions of the rectangle that are either visible or are being retained in a backing store. If you specify a window whose class is .ZN InputOnly , a .ZN BadMatch error results. .LP .ZN XClearArea can generate .ZN BadMatch , .ZN BadValue , and .ZN BadWindow errors. .LP The .ZN XClearWindow function clears the entire area in the specified window and is equivalent to .ZN XClearArea (display, w, 0, 0, 0, 0, .ZN False ). If the window has a defined background tile, the rectangle is tiled with a plane-mask of all ones and .ZN GXcopy function. If the window has background .ZN None , the contents of the window are not changed. If you specify a window whose class is .ZN InputOnly , a .ZN BadMatch error results. .LP .ZN XClearWindow can generate .ZN BadMatch and .ZN BadWindow errors. .SH DIAGNOSTICS .TP 1i .ZN BadMatch An .ZN InputOnly window is used as a Drawable. .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XCopyArea(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XmbDrawImageString.man000064401431060000012000000120731247741723500200270ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" Copyright \(co 2000 The XFree86 Project, Inc. .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XmbDrawImageString __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XmbDrawImageString, XwcDrawImageString, Xutf8DrawImageString \- draw image text using a single font set .SH SYNTAX .HP void XmbDrawImageString\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, XFontSet \fIfont_set\fP\^, GC \fIgc\fP\^, int \fIx\fP\^, int \fIy\fP\^, char *\fIstring\fP\^, int \fInum_bytes\fP\^); .HP void XwcDrawImageString\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, XFontSet \fIfont_set\fP\^, GC \fIgc\fP\^, int \fIx\fP\^, int \fIy\fP\^, wchar_t *\fIstring\fP\^, int \fInum_wchars\fP\^); .HP void Xutf8DrawImageString\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, XFontSet \fIfont_set\fP\^, GC \fIgc\fP\^, int \fIx\fP\^, int \fIy\fP\^, char *\fIstring\fP\^, int \fInum_bytes\fP\^); .SH ARGUMENTS .IP \fId\fP 1i Specifies the drawable. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIfont_set\fP 1i Specifies the font set. .IP \fIgc\fP 1i Specifies the GC. .IP \fInum_bytes\fP 1i Specifies the number of bytes in the string argument. .IP \fInum_wchars\fP 1i Specifies the number of characters in the string argument. .IP \fIstring\fP 1i Specifies the character string. .ds Xy .IP \fIx\fP 1i .br .ns .IP \fIy\fP 1i Specify the x and y coordinates\*(Xy. .SH DESCRIPTION The .ZN XmbDrawImageString , .ZN XwcDrawImageString and .ZN Xutf8DrawImageString functions fill a destination rectangle with the background pixel defined in the GC and then paint the text with the foreground pixel. The filled rectangle is the rectangle returned to overall_logical_return by .ZN XmbTextExtents , .ZN XwcTextExtents or .ZN Xutf8TextExtents for the same text and .ZN XFontSet . .LP When the .ZN XFontSet has missing charsets, each unavailable character is drawn with the default string returned by .ZN XCreateFontSet . The behavior for an invalid codepoint is undefined. .LP The function .ZN Xutf8TextExtents is an extension introduced by The XFree86 Project, Inc. in their 4.0.2 release. Its presence is indicated by the macro .ZN X_HAVE_UTF8_STRING . .SH "SEE ALSO" XDrawImageString(__libmansuffix__), XDrawString(__libmansuffix__), XDrawText(__libmansuffix__), XmbDrawString(__libmansuffix__), XmbDrawText(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XFillArcs.man000064401431060000012000000000701247741723500161520ustar00alancstaff00002660200006.so man__libmansuffix__/XFillRectangle.__libmansuffix__ libX11-1.6.3/man/XGetWMClientMachine.man000064401431060000012000000000751247741723500200670ustar00alancstaff00002660200006.so man__libmansuffix__/XSetWMClientMachine.__libmansuffix__ libX11-1.6.3/man/VisualOfCCC.man000064401431060000012000000000661247741723500163710ustar00alancstaff00002660200006.so man__libmansuffix__/DisplayOfCCC.__libmansuffix__ libX11-1.6.3/man/IsModifierKey.man000064401431060000012000000000651247741723500170320ustar00alancstaff00002660200006.so man__libmansuffix__/IsCursorKey.__libmansuffix__ libX11-1.6.3/man/XSetFunction.man000064401431060000012000000000631247741723500167160ustar00alancstaff00002660200006.so man__libmansuffix__/XSetState.__libmansuffix__ libX11-1.6.3/man/XMapSubwindows.man000064401431060000012000000000641247741723500172600ustar00alancstaff00002660200006.so man__libmansuffix__/XMapWindow.__libmansuffix__ libX11-1.6.3/man/XWithdrawWindow.man000064401431060000012000000000701247741723500174340ustar00alancstaff00002660200006.so man__libmansuffix__/XIconifyWindow.__libmansuffix__ libX11-1.6.3/man/XmbTextExtents.man000064401431060000012000000135371247741723500173050ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" Copyright \(co 2000 The XFree86 Project, Inc. .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XmbTextExtents __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XmbTextExtents, XwcTextExtents, Xutf8TextExtents \- compute text extents .SH SYNTAX .HP int XmbTextExtents\^(\^XFontSet \fIfont_set\fP\^, char *\fIstring\fP\^, int \fInum_bytes\fP\^, XRectangle *\fIoverall_ink_return\fP\^, XRectangle *\fIoverall_logical_return\fP\^); .HP int XwcTextExtents\^(\^XFontSet \fIfont_set\fP\^, wchar_t *\fIstring\fP\^, int \fInum_wchars\fP\^, XRectangle *\fIoverall_ink_return\fP\^, XRectangle *\fIoverall_logical_return\fP\^); .HP int Xutf8TextExtents\^(\^XFontSet \fIfont_set\fP\^, char *\fIstring\fP\^, int \fInum_bytes\fP\^, XRectangle *\fIoverall_ink_return\fP\^, XRectangle *\fIoverall_logical_return\fP\^); .SH ARGUMENTS .IP \fIfont_set\fP 1i Specifies the font set. .IP \fInum_bytes\fP 1i Specifies the number of bytes in the string argument. .IP \fInum_wchars\fP 1i Specifies the number of characters in the string argument. .ds Ov dimensions .IP \fIoverall_ink_return\fP 1i Returns the overall ink \*(Ov. .IP \fIoverall_logical_return\fP 1i Returns the overall logical \*(Ov. .IP \fIstring\fP 1i Specifies the character string. .SH DESCRIPTION The .ZN XmbTextExtents , .ZN XwcTextExtents and .ZN Xutf8TextExtents functions set the components of the specified overall_ink_return and overall_logical_return arguments to the overall bounding box of the string's image and a logical bounding box for spacing purposes, respectively. They return the value returned by .ZN XmbTextEscapement , .ZN XwcTextEscapement or .ZN Xutf8TextEscapement . These metrics are relative to the drawing origin of the string, using the fonts loaded for the specified font set. .LP If the overall_ink_return argument is non-NULL, it is set to the bounding box of the string's character ink. The overall_ink_return for a nondescending, horizontally drawn Latin character is conventionally entirely above the baseline; that is, overall_ink_return.height <= \-overall_ink_return.y. The overall_ink_return for a nonkerned character is entirely at, and to the right of, the origin; that is, overall_ink_return.x >= 0. A character consisting of a single pixel at the origin would set overall_ink_return fields y = 0, x = 0, width = 1, and height = 1. .LP If the overall_logical_return argument is non-NULL, it is set to the bounding box that provides minimum spacing to other graphical features for the string. Other graphical features, for example, a border surrounding the text, should not intersect this rectangle. .LP When the .ZN XFontSet has missing charsets, metrics for each unavailable character are taken from the default string returned by .ZN XCreateFontSet so that the metrics represent the text as it will actually be drawn. The behavior for an invalid codepoint is undefined. .LP The function .ZN Xutf8TextExtents is an extension introduced by The XFree86 Project, Inc. in their 4.0.2 release. Its presence is indicated by the macro .ZN X_HAVE_UTF8_STRING . .SH "SEE ALSO" XmbTextEscapement(__libmansuffix__), XmbTextPerCharExtents(__libmansuffix__) \fI\*(xL\fP libX11-1.6.3/man/BitmapBitOrder.man000064401431060000012000000000701247741723500171720ustar00alancstaff00002660200006.so man__libmansuffix__/ImageByteOrder.__libmansuffix__ libX11-1.6.3/man/XGetClassHint.man000064401431060000012000000000711247741723500170040ustar00alancstaff00002660200006.so man__libmansuffix__/XAllocClassHint.__libmansuffix__ libX11-1.6.3/man/XDrawText16.man000064401431060000012000000000631247741723500163660ustar00alancstaff00002660200006.so man__libmansuffix__/XDrawText.__libmansuffix__ libX11-1.6.3/man/XCreateIC.man000064401431060000012000000114771247741723500161070ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XCreateIC __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XCreateIC, XDestroyIC, XIMOfIC \- create, destroy, and obtain the input method of an input context .SH SYNTAX .HP XIC XCreateIC\^(\^XIM \fIim\fP\^, ...\^); .HP void XDestroyIC\^(\^XIC \fIic\fP\^); .HP XIM XIMOfIC\^(\^XIC \fIic\fP\^); .SH ARGUMENTS .IP \fIic\fP 1i Specifies the input context. .IP \fIim\fP 1i Specifies the input method. .ds Al \ to set XIC values .IP ... 1i Specifies the variable length argument list\*(Al. .SH DESCRIPTION The .ZN XCreateIC function creates a context within the specified input method. .LP Some of the arguments are mandatory at creation time, and the input context will not be created if those arguments are not provided. The mandatory arguments are the input style and the set of text callbacks (if the input style selected requires callbacks). All other input context values can be set later. .LP .ZN XCreateIC returns a NULL value if no input context could be created. A NULL value could be returned for any of the following reasons: .IP \(bu 5 A required argument was not set. .IP \(bu 5 A read-only argument was set (for example, .ZN XNFilterEvents ). .IP \(bu 5 The argument name is not recognized. .IP \(bu 5 The input method encountered an input method implementation-dependent error. .LP The .ZN XCreateIC can generate .ZN BadAtom , .ZN BadColor , .ZN BadPixmap , and .ZN BadWindow errors. .LP .ZN XDestroyIC destroys the specified input context. .LP The .ZN XIMOfIC function returns the input method associated with the specified input context. .SH DIAGNOSTICS .TP 1i .ZN BadAtom A value for an Atom argument does not name a defined Atom. .TP 1i .ZN BadColor A value for a Colormap argument does not name a defined Colormap. .TP 1i .ZN BadPixmap A value for a Pixmap argument does not name a defined Pixmap. .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XOpenIM(__libmansuffix__), XSetICFocus(__libmansuffix__), XSetICValues(__libmansuffix__), XmbResetIC(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XIntersectRegion.man000064401431060000012000000121321247741723500175610ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XIntersectRegion __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XIntersectRegion, XUnionRegion, XUnionRectWithRegion, XSubtractRegion, XXorRegion, XOffsetRegion, XShrinkRegion \- region arithmetic .SH SYNTAX .HP int XIntersectRegion\^(\^Region \fIsra\fP\^, Region \fIsrb\fP\^, Region \fIdr_return\fP\^); .HP int XUnionRegion\^(\^Region \fIsra\fP\^, Region \fIsrb\fP\^, Region \fIdr_return\fP\^); .HP int XUnionRectWithRegion\^(\^XRectangle *\fIrectangle\fP\^, Region \fIsrc_region\fP\^, Region \fIdest_region_return\fP\^); .HP int XSubtractRegion\^(\^Region \fIsra\fP\^, Region \fIsrb\fP\^, Region \fIdr_return\fP\^); .HP int XXorRegion\^(\^Region \fIsra\fP\^, Region \fIsrb\fP\^, Region \fIdr_return\fP\^); .HP int XOffsetRegion\^(\^Region \fIr\fP\^, int \fIdx\fP\^, int \fIdy\fP\^); .HP int XShrinkRegion\^(\^Region \fIr\fP\^, int \fIdx\fP\^, int \fIdy\fP\^); .SH ARGUMENTS .IP \fIdest_region_return\fP 1i Returns the destination region. .IP \fIdr_return\fP 1i Returns the result of the computation. ds Dy move or shrink .IP \fIdx\fP 1i .br .ns .IP \fIdy\fP 1i Specify the x and y coordinates, which define the amount you want to \*(Dy the specified region. .IP \fIr\fP 1i Specifies the region. .IP \fIrectangle\fP 1i Specifies the rectangle. .IP \fIsra\fP 1i .br .ns .IP \fIsrb\fP 1i Specify the two regions with which you want to perform the computation. .IP \fIsrc_region\fP 1i Specifies the source region to be used. .SH DESCRIPTION The .ZN XIntersectRegion function computes the intersection of two regions. .LP The .ZN XUnionRegion function computes the union of two regions. .LP The .ZN XUnionRectWithRegion function updates the destination region from a union of the specified rectangle and the specified source region. .LP The .ZN XSubtractRegion function subtracts srb from sra and stores the results in dr_return. .LP The .ZN XXorRegion function calculates the difference between the union and intersection of two regions. .LP The .ZN XOffsetRegion function moves the specified region by a specified amount. .LP The .ZN XShrinkRegion function reduces the specified region by a specified amount. Positive values shrink the size of the region, and negative values expand the region. .SH "SEE ALSO" XCreateRegion(__libmansuffix__), XDrawRectangle(__libmansuffix__), XEmptyRegion(__libmansuffix__) .br \fI\*(xL\fP E OR THE USE OR .\" OTHER DEALINGS IN THE SOFTWARE. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions ColibX11-1.6.3/man/XFontsOfFontSet.man000064401431060000012000000162461247741723500173500ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XFontsOfFontSet __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XFontsOfFontSet, XBaseFontNameListOfFontSet, XLocaleOfFontSet, XContextDependentDrawing, XContextualDrawing, XDirectionalDependentDrawing \- obtain fontset information .SH SYNTAX .HP int XFontsOfFontSet\^(\^XFontSet \fIfont_set\fP\^, XFontStruct ***\fIfont_struct_list_return\fP\^, char ***\fIfont_name_list_return\fP\^); .HP char *XBaseFontNameListOfFontSet\^(\^XFontSet \fIfont_set\fP\^); .HP char *XLocaleOfFontSet\^(\^XFontSet \fIfont_set\fP\^); .HP Bool XContextDependentDrawing\^(\^XFontSet \fIfont_set\fP\^); .HP Bool XContextualDrawing\^(\^XFontSet \fIfont_set\fP\^); .HP Bool XDirectionalDependentDrawing\^(\^XFontSet \fIfont_set\fP\^); .SH ARGUMENTS .IP \fIfont_set\fP 1i Specifies the font set. .IP \fIfont_name_list_return\fP 1i Returns the list of font names. .IP \fIfont_struct_list_return\fP 1i Returns the list of font structs. .SH DESCRIPTION The .ZN XFontsOfFontSet function returns a list of one or more .ZN XFontStructs and font names for the fonts used by the Xmb and Xwc layers for the given font set. A list of pointers to the .ZN XFontStruct structures is returned to font_struct_list_return. A list of pointers to null-terminated, fully specified font name strings in the locale of the font set is returned to font_name_list_return. The font_name_list order corresponds to the font_struct_list order. The number of .ZN XFontStruct structures and font names is returned as the value of the function. .LP Because it is not guaranteed that a given character will be imaged using a single font glyph, there is no provision for mapping a character or default string to the font properties, font ID, or direction hint for the font for the character. The client may access the .ZN XFontStruct list to obtain these values for all the fonts currently in use. .LP Xlib does not guarantee that fonts are loaded from the server at the creation of an .ZN XFontSet . Xlib may choose to cache font data, loading it only as needed to draw text or compute text dimensions. Therefore, existence of the per_char metrics in the .ZN XFontStruct structures in the .ZN XFontStructSet is undefined. Also, note that all properties in the .ZN XFontStruct structures are in the STRING encoding. .LP The .ZN XFontStruct and font name lists are owned by Xlib and should not be modified or freed by the client. They will be freed by a call to .ZN XFreeFontSet with the associated .ZN XFontSet . Until freed, their contents will not be modified by Xlib. .LP The .ZN XBaseFontNameListOfFontSet function returns the original base font name list supplied by the client when the .ZN XFontSet was created. A null-terminated string containing a list of comma-separated font names is returned as the value of the function. White space may appear immediately on either side of separating commas. .LP If .ZN XCreateFontSet obtained an XLFD name from the font properties for the font specified by a non-XLFD base name, the .ZN XBaseFontNameListOfFontSet function will return the XLFD name instead of the non-XLFD base name. .LP The base font name list is owned by Xlib and should not be modified or freed by the client. It will be freed by a call to .ZN XFreeFontSet with the associated .ZN XFontSet . Until freed, its contents will not be modified by Xlib. .LP The .ZN XLocaleOfFontSet function returns the name of the locale bound to the specified .ZN XFontSet , as a null-terminated string. .LP The returned locale name string is owned by Xlib and should not be modified or freed by the client. It may be freed by a call to .ZN XFreeFontSet with the associated .ZN XFontSet . Until freed, it will not be modified by Xlib. .LP The .ZN XContextDependentDrawing function returns .ZN True if the drawing functions implement implicit text directionality or if text drawn with the font_set might include context-dependent drawing; otherwise, it returns .ZN False . .LP The .ZN XContextualDrawing function returns .ZN True if text drawn with the font set might include context-dependent drawing; otherwise, it returns .ZN False . .LP The .ZN XDirectionalDependentDrawing function returns .ZN True if the drawing functions implement implicit text directionality; otherwise, it returns .ZN False . .SH "SEE ALSO" XCreateFontSet(__libmansuffix__), XCreateOM(__libmansuffix__), XCreateOC(__libmansuffix__), XExtentsOfFontSet(__libmansuffix__), XFontSetExtents(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XAddToSaveSet.man000064401431060000012000000000701247741723500167410ustar00alancstaff00002660200006.so man__libmansuffix__/XChangeSaveSet.__libmansuffix__ libX11-1.6.3/man/XChangeActivePointerGrab.man000064401431060000012000000000661247741723500211360ustar00alancstaff00002660200006.so man__libmansuffix__/XGrabPointer.__libmansuffix__ libX11-1.6.3/man/XFetchBytes.man000064401431060000012000000000651247741723500165170ustar00alancstaff00002660200006.so man__libmansuffix__/XStoreBytes.__libmansuffix__ libX11-1.6.3/man/XUngrabServer.man000064401431060000012000000000651247741723500170640ustar00alancstaff00002660200006.so man__libmansuffix__/XGrabServer.__libmansuffix__ libX11-1.6.3/man/XcmsTekHVCQueryMaxVSamples.man000064401431060000012000000000751247741723500214160ustar00alancstaff00002660200006.so man__libmansuffix__/XcmsTekHVCQueryMaxC.__libmansuffix__ libX11-1.6.3/man/XFreeExtensionList.man000064401431060000012000000000711247741723500200660ustar00alancstaff00002660200006.so man__libmansuffix__/XQueryExtension.__libmansuffix__ libX11-1.6.3/man/ScreenOfDisplay.man000064401431060000012000000000631247741723500173570ustar00alancstaff00002660200006.so man__libmansuffix__/AllPlanes.__libmansuffix__ libX11-1.6.3/man/XTextItem16.man000064401431060000012000000000631247741723500163670ustar00alancstaff00002660200006.so man__libmansuffix__/XDrawText.__libmansuffix__ libX11-1.6.3/man/XChangeProperty.man000064401431060000012000000000741247741723500174110ustar00alancstaff00002660200006.so man__libmansuffix__/XGetWindowProperty.__libmansuffix__ libX11-1.6.3/man/XDestroyImage.man000064401431060000012000000000641247741723500170520ustar00alancstaff00002660200006.so man__libmansuffix__/XInitImage.__libmansuffix__ libX11-1.6.3/man/XGrabServer.man000064401431060000012000000072161247741723500165260ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XGrabServer __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XGrabServer, XUngrabServer \- grab the server .SH SYNTAX .HP int XGrabServer\^(\^Display *\fIdisplay\fP\^); .HP int XUngrabServer\^(\^Display *\fIdisplay\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .SH DESCRIPTION The .ZN XGrabServer function disables processing of requests and close downs on all other connections than the one this request arrived on. You should not grab the X server any more than is absolutely necessary. .LP The .ZN XUngrabServer function restarts processing of requests and close downs on other connections. You should avoid grabbing the X server as much as possible. .SH "SEE ALSO" XGrabButton(__libmansuffix__), XGrabKey(__libmansuffix__), XGrabKeyboard(__libmansuffix__), XGrabPointer(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/DisplayOfScreen.man000064401431060000012000000000741247741723500173610ustar00alancstaff00002660200006.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__ libX11-1.6.3/man/XScreenNumberOfScreen.man000064401431060000012000000000741247741723500204740ustar00alancstaff00002660200006.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__ libX11-1.6.3/man/MinCmapsOfScreen.man000064401431060000012000000000741247741723500174630ustar00alancstaff00002660200006.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__ libX11-1.6.3/man/DisplayHeight.man000064401431060000012000000000701247741723500170610ustar00alancstaff00002660200006.so man__libmansuffix__/ImageByteOrder.__libmansuffix__ libX11-1.6.3/man/DefaultColormap.man000064401431060000012000000000631247741723500174060ustar00alancstaff00002660200006.so man__libmansuffix__/AllPlanes.__libmansuffix__ libX11-1.6.3/man/XSetLocaleModifiers.man000064401431060000012000000000711247741723500201710ustar00alancstaff00002660200006.so man__libmansuffix__/XSupportsLocale.__libmansuffix__ libX11-1.6.3/man/XPolygonRegion.man000064401431060000012000000075111247741723500172550ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XPolygonRegion __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XPolygonRegion, XClipBox \- generate regions .SH SYNTAX .HP Region XPolygonRegion\^(\^XPoint \fIpoints\fP[]\^, int \fIn\fP\^, int \fIfill_rule\fP\^); .HP int XClipBox\^(\^Region \fIr\fP\^, XRectangle *\fIrect_return\fP\^); .SH ARGUMENTS .IP \fIfill_rule\fP 1i Specifies the fill-rule you want to set for the specified GC. You can pass .ZN EvenOddRule or .ZN WindingRule . .IP \fIn\fP 1i Specifies the number of points in the polygon. .IP \fIpoints\fP 1i Specifies an array of points. .IP \fIr\fP 1i Specifies the region. .IP \fIrect_return\fP 1i Returns the smallest enclosing rectangle. .SH DESCRIPTION The .ZN XPolygonRegion function returns a region for the polygon defined by the points array. For an explanation of fill_rule, see .ZN XCreateGC . .LP The .ZN XClipBox function returns the smallest rectangle enclosing the specified region. .SH "SEE ALSO" XCreateGC(__libmansuffix__), XDrawPoint(__libmansuffix__), XDrawRectangle(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XGetOCValues.man000064401431060000012000000000631247741723500165760ustar00alancstaff00002660200006.so man__libmansuffix__/XCreateOC.__libmansuffix__ libX11-1.6.3/man/XNewModifiermap.man000064401431060000012000000001001247741723500173530ustar00alancstaff00002660200006.so man__libmansuffix__/XChangeKeyboardMapping.__libmansuffix__ libX11-1.6.3/man/WhitePixelOfScreen.man000064401431060000012000000000741247741723500200360ustar00alancstaff00002660200006.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__ libX11-1.6.3/man/XListHosts.man000064401431060000012000000000621247741723500164100ustar00alancstaff00002660200006.so man__libmansuffix__/XAddHost.__libmansuffix__ libX11-1.6.3/man/XSetWindowBackgroundPixmap.man000064401431060000012000000001011247741723500215500ustar00alancstaff00002660200006.so man__libmansuffix__/XChangeWindowAttributes.__libmansuffix__ libX11-1.6.3/man/XActivateScreenSaver.man000064401431060000012000000000711247741723500203550ustar00alancstaff00002660200006.so man__libmansuffix__/XSetScreenSaver.__libmansuffix__ libX11-1.6.3/man/XmbTextEscapement.man000064401431060000012000000106451247741723500177340ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" Copyright \(co 2000 The XFree86 Project, Inc. .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XmbTextEscapement __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XmbTextEscapement, XwcTextEscapement, Xutf8TextEscapement \- obtain the escapement of text .SH SYNTAX .HP int XmbTextEscapement\^(\^XFontSet \fIfont_set\fP\^, char *\fIstring\fP\^, int \fInum_bytes\fP\^); .HP int XwcTextEscapement\^(\^XFontSet \fIfont_set\fP\^, wchar_t *\fIstring\fP\^, int \fInum_wchars\fP\^); .HP int Xutf8TextEscapement\^(\^XFontSet \fIfont_set\fP\^, char *\fIstring\fP\^, int \fInum_bytes\fP\^); .SH ARGUMENTS .IP \fIfont_set\fP 1i Specifies the font set. .IP \fInum_bytes\fP 1i Specifies the number of bytes in the string argument. .IP \fInum_wchars\fP 1i Specifies the number of characters in the string argument. .IP \fIstring\fP 1i Specifies the character string. .SH DESCRIPTION The .ZN XmbTextEscapement , .ZN XwcTextEscapement and .ZN Xutf8TextEscapement functions return the escapement in pixels of the specified string as a value, using the fonts loaded for the specified font set. The escapement is the distance in pixels in the primary draw direction from the drawing origin to the origin of the next character to be drawn, assuming that the rendering of the next character is not dependent on the supplied string. .LP Regardless of the character rendering order, the escapement is always positive. .LP The function .ZN Xutf8TextEscapement is an extension introduced by The XFree86 Project, Inc. in their 4.0.2 release. Its presence is indicated by the macro .ZN X_HAVE_UTF8_STRING . .SH "SEE ALSO" XmbTextExtents(__libmansuffix__), XmbTextPerCharExtents(__libmansuffix__) \fI\*(xL\fP libX11-1.6.3/man/XEmptyRegion.man000064401431060000012000000105341247741723500167230ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XEmptyRegion __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XEmptyRegion, XEqualRegion, XPointInRegion, XRectInRegion \- determine if regions are empty or equal .SH SYNTAX .HP Bool XEmptyRegion\^(\^Region \fIr\fP\^); .HP Bool XEqualRegion\^(\^Region \fIr1\fP\^, Region \fIr2\fP\^); .HP Bool XPointInRegion\^(\^Region \fIr\fP\^, int \fIx\fP\^, int \fIy\fP\^); .HP int XRectInRegion\^(\^Region \fIr\fP\^, int \fIx\fP\^, int \fIy\fP\^, unsigned int \fIwidth\fP\^, unsigned int \fIheight\fP\^); .SH ARGUMENTS .IP \fIr\fP 1i Specifies the region. .IP \fIr1\fP 1i .br .ns .IP \fIr2\fP 1i Specify the two regions. .ds Wh , which define the rectangle .IP \fIwidth\fP 1i .br .ns .IP \fIheight\fP 1i Specify the width and height\*(Wh. .ds Xy , which define the point \ or the coordinates of the upper-left corner of the rectangle .IP \fIx\fP 1i .br .ns .IP \fIy\fP 1i Specify the x and y coordinates\*(Xy. .SH DESCRIPTION The .ZN XEmptyRegion function returns .ZN True if the region is empty. .LP The .ZN XEqualRegion function returns .ZN True if the two regions have the same offset, size, and shape. .LP The .ZN XPointInRegion function returns .ZN True if the point (x, y) is contained in the region r. .LP The .ZN XRectInRegion function returns .ZN RectangleIn if the rectangle is entirely in the specified region, .ZN RectangleOut if the rectangle is entirely out of the specified region, and .ZN RectanglePart if the rectangle is partially in the specified region. .SH "SEE ALSO" XCreateRegion(__libmansuffix__), XIntersectRegion(__libmansuffix__) .br \fI\*(xL\fP y, 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, sublibX11-1.6.3/man/XFillPolygon.man000064401431060000012000000000701247741723500167110ustar00alancstaff00002660200006.so man__libmansuffix__/XFillRectangle.__libmansuffix__ libX11-1.6.3/man/XCopyPlane.man000064401431060000012000000000631247741723500163470ustar00alancstaff00002660200006.so man__libmansuffix__/XCopyArea.__libmansuffix__ libX11-1.6.3/man/XDrawText.man000064401431060000012000000162261247741723500162270ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XDrawText __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XDrawText, XDrawText16, XTextItem, XTextItem16 \- draw polytext text and text drawing structures .SH SYNTAX .HP int XDrawText\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, GC \fIgc\fP\^, int \fIx\fP\^, int \fIy\fP\^, XTextItem *\fIitems\fP\^, int \fInitems\fP\^); .HP int XDrawText16\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, GC \fIgc\fP\^, int \fIx\fP\^, int \fIy\fP\^, XTextItem16 *\fIitems\fP\^, int \fInitems\fP\^); .SH ARGUMENTS .IP \fId\fP 1i Specifies the drawable. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIgc\fP 1i Specifies the GC. .IP \fIitems\fP 1i Specifies an array of text items. .IP \fInitems\fP 1i Specifies the number of text items in the array. .ds Xy , which are relative to the origin of the specified drawable \ and define the origin of the first character .IP \fIx\fP 1i .br .ns .IP \fIy\fP 1i Specify the x and y coordinates\*(Xy. .SH DESCRIPTION The .ZN XDrawText16 function is similar to .ZN XDrawText except that it uses 2-byte or 16-bit characters. Both functions allow complex spacing and font shifts between counted strings. .LP Each text item is processed in turn. A font member other than .ZN None in an item causes the font to be stored in the GC and used for subsequent text. A text element delta specifies an additional change in the position along the x axis before the string is drawn. The delta is always added to the character origin and is not dependent on any characteristics of the font. Each character image, as defined by the font in the GC, is treated as an additional mask for a fill operation on the drawable. The drawable is modified only where the font character has a bit set to 1. If a text item generates a .ZN BadFont error, the previous text items may have been drawn. .LP For fonts defined with linear indexing rather than 2-byte matrix indexing, each .ZN XChar2b structure is interpreted as a 16-bit number with byte1 as the most significant byte. .LP Both functions use these GC components: function, plane-mask, fill-style, font, subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask. They also use these GC mode-dependent components: foreground, background, tile, stipple, tile-stipple-x-origin, and tile-stipple-y-origin. .LP .ZN XDrawText and .ZN XDrawText16 can generate .ZN BadDrawable , .ZN BadFont , .ZN BadGC , and .ZN BadMatch errors. .SH STRUCTURES The .ZN XTextItem and .ZN XTextItem16 structures contain: .LP .Ds 0 typedef struct { char *chars; /\&* pointer to string */ int nchars; /\&* number of characters */ int delta; /\&* delta between strings */ Font font; /\&* Font to print it in, None don't change */ } XTextItem; .De .LP .Ds 0 typedef struct { XChar2b *chars; /\&* pointer to two-byte characters */ int nchars; /\&* number of characters */ int delta; /\&* delta between strings */ Font font; /\&* font to print it in, None don't change */ } XTextItem16; .De .LP If the font member is not .ZN None , the font is changed before printing and also is stored in the GC. If an error was generated during text drawing, the previous items may have been drawn. The baseline of the characters are drawn starting at the x and y coordinates that you pass in the text drawing functions. .LP For example, consider the background rectangle drawn by .ZN XDrawImageString . If you want the upper-left corner of the background rectangle to be at pixel coordinate (x,y), pass the (x,y + ascent) as the baseline origin coordinates to the text functions. The ascent is the font ascent, as given in the .ZN XFontStruct structure. If you want the lower-left corner of the background rectangle to be at pixel coordinate (x,y), pass the (x,y \- descent + 1) as the baseline origin coordinates to the text functions. The descent is the font descent, as given in the .ZN XFontStruct structure. .SH DIAGNOSTICS .TP 1i .ZN BadDrawable A value for a Drawable argument does not name a defined Window or Pixmap. .TP 1i .ZN BadFont A value for a Font or GContext argument does not name a defined Font. .TP 1i .ZN BadGC A value for a GContext argument does not name a defined GContext. .TP 1i .ZN BadMatch An .ZN InputOnly window is used as a Drawable. .SH "SEE ALSO" XDrawImageString(__libmansuffix__), XDrawString(__libmansuffix__), XLoadFont(__libmansuffix__) .br \fI\*(xL\fP on 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, sublibX11-1.6.3/man/XUnregisterIMInstantiateCallback.man000064401431060000012000000000611247741723500226510ustar00alancstaff00002660200006.so man__libmansuffix__/XOpenIM.__libmansuffix__ libX11-1.6.3/man/XCreateBitmapFromData.man000064401431060000012000000000711247741723500204320ustar00alancstaff00002660200006.so man__libmansuffix__/XReadBitmapFile.__libmansuffix__ libX11-1.6.3/man/Compose.man000064401431060000012000000132731247741723500157410ustar00alancstaff00002660200006.\" Copyright 2009 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .\" shorthand for double quote that works everywhere. .ds q \N'34' .ds xL Xlib \- C Language X Interface .TH Compose __filemansuffix__ __vendorversion__ .SH NAME Compose \- X client mappings for multi-key input sequences .SH DESCRIPTION The X library, libX11, provides a simple input method for characters beyond those represented on typical keyboards using sequences of key strokes that are combined to enter a single character. .PP The compose file is searched for in the following order: .IP - If the environment variable .B $XCOMPOSEFILE is set, its value is used as the name of the Compose file. .IP - If the user's home directory has a file named .IR .XCompose , it is used as the Compose file. .IP - The system provided compose file is used by mapping the locale to a compose file from the list in .IR __xlocaledir__/compose.dir . .PP Compose files can use an .RB \*q include \*q instruction. This allows local modifications to be made to existing compose files without including all of the content directly. For example, the system's iso8859-1 compose file can be included with a line like this: .RS 4 .BI "include \*q" %S/iso8859-1/Compose \*q .RE .PP There are several substitutions that can be made in the file name of the include instruction: .TP 4 .I %H expands to the user's home directory (the .B $HOME environment variable) .TP 4 .I %L expands to the name of the locale specific Compose file (i.e., .RI \*q __xlocaledir__//Compose \*q) .TP 4 .I %S expands to the name of the system directory for Compose files (i.e., .RI \*q __xlocaledir__ \*q) .PP For example, you can include in your compose file the default Compose file by using: .RS .B "include \*q%L\*q" .RE and then rewrite only the few rules that you need to change. New compose rules can be added, and previous ones replaced. .SH FILE FORMAT .\" Based on grammar description in modules/im/ximcp/imLcPrs.c Compose files are plain text files, with a separate line for each compose sequence. Comments begin with \fB#\fP characters. Each compose sequence specifies one or more events and a resulting input sequence, with an optional comment at the end of the line: .RS \fIEVENT\fP [\fIEVENT\fP...] \fB:\fP \fIRESULT\fP [\fB#\fP \fICOMMENT\fP] .RE .PP Each event consists of a specified input keysym, and optional modifier states: .RS [([\fB!\fP] ([\fB~\fP] \fIMODIFIER\fP)...) | \fBNone\fP] \fB<\fP\fIkeysym\fP\fB>\fP .RE .PP If the modifier list is preceded by .RB \*q "!" \*q it must match exactly. MODIFIER may be one of Ctrl, Lock, Caps, Shift, Alt or Meta. Each modifier may be preceded by a .RB \*q "~" \*q character to indicate that the modifier must not be present. If .RB \*q "None" \*q is specified, no modifier may be present. .PP The result specifies a string, keysym, or both, that the X client receives as input when the sequence of events is input: .RS \fB\*q\fP\fISTRING\fP\fB\*q\fP | \fIkeysym\fP | \fB\*q\fP\fISTRING\fP\fB\*q\fP \fIkeysym\fP .RE .PP Keysyms are specified without the \fBXK_\fP prefix. .PP Strings may be direct text encoded in the locale for which the compose file is to be used, or an escaped octal or hexadecimal character code. Octal codes are specified as \fB\*q\\123\*q\fP and hexadecimal codes as \fB\*q\\0x123a\*q\fP. It is not necessary to specify in the right part of a rule a locale encoded string in addition to the keysym name. If the string is omitted, Xlib figures it out from the keysym according to the current locale. I.e., if a rule looks like: .RS \fB : \*q\\300\*q Agrave\fP .RE the result of the composition is always the letter with the "\\300" code. But if the rule is: .RS \fB : Agrave\fP .RE the result depends on how Agrave is mapped in the current locale. .SH ENVIRONMENT .TP .B XCOMPOSEFILE File to use for compose sequences. .TP .B XCOMPOSECACHE Directory to use for caching compiled compose files. .SH FILES .TP .I $HOME/.XCompose User default compose file if XCOMPOSEFILE is not set. .TP .I __xlocaledir__/compose.dir File listing the compose file path to use for each locale. .TP .I __xlocaledir__//Compose System default compose file for the locale, mapped via compose.dir. .TP .I /var/cache/libx11/compose/ System-wide cache directory for compiled compose files. .TP .I $HOME/.compose-cache/ Per-user cache directory for compiled compose files. .SH SEE ALSO .BR XLookupString (__libmansuffix__), .BR XmbLookupString (__libmansuffix__), .BR XwcLookupString (__libmansuffix__), .BR Xutf8LookupString (__libmansuffix__), .BR mkcomposecache (__appmansuffix__), .BR locale (__miscmansuffix__). .br \fI\*(xL\fP libX11-1.6.3/man/XGetXCBConnection.man000064401431060000012000000035721247741723500175610ustar00alancstaff00002660200006.\" Copyright \(co 2006 Josh Triplett .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .TH XGetXCBConnection __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XGetXCBConnection \- get the XCB connection for an Xlib Display .SH SYNTAX .HP #include .HP xcb_connection_t *XGetXCBConnection(Display *\fIdpy\fP); .SH ARGUMENTS .IP \fIdpy\fP 1i Specifies the connection to the X server. .SH DESCRIPTION The \fIXGetXCBConnection\fP function returns the XCB connection associated with an Xlib Display. Clients can use this XCB connection with functions from the XCB library, just as they would with an XCB connection created with XCB. Callers of this function must link to libX11-xcb and a version of Xlib built with XCB support. .SH "SEE ALSO" XOpenDisplay(__libmansuffix__), XSetEventQueueOwner(__libmansuffix__), .br \fIXlib \- C Language X Interface\fP libX11-1.6.3/man/XLowerWindow.man000064401431060000012000000000661247741723500167400ustar00alancstaff00002660200006.so man__libmansuffix__/XRaiseWindow.__libmansuffix__ libX11-1.6.3/man/XcmsSetCCCOfColormap.man000064401431060000012000000000731247741723500202070ustar00alancstaff00002660200006.so man__libmansuffix__/XcmsCCCOfColormap.__libmansuffix__ libX11-1.6.3/man/XReparentWindow.man000064401431060000012000000117321247741723500174320ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XReparentWindow __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XReparentWindow \- reparent windows .SH SYNTAX .HP int XReparentWindow\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, Window \fIparent\fP\^, int \fIx\fP\^, int \fIy\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIparent\fP 1i Specifies the parent window. .IP \fIw\fP 1i Specifies the window. .ds Xy of the position in the new parent window .IP \fIx\fP 1i .br .ns .IP \fIy\fP 1i Specify the x and y coordinates\*(Xy. .SH DESCRIPTION If the specified window is mapped, .ZN XReparentWindow automatically performs an .ZN UnmapWindow request on it, removes it from its current position in the hierarchy, and inserts it as the child of the specified parent. The window is placed in the stacking order on top with respect to sibling windows. .LP After reparenting the specified window, .ZN XReparentWindow causes the X server to generate a .ZN ReparentNotify event. The override_redirect member returned in this event is set to the window's corresponding attribute. Window manager clients usually should ignore this window if this member is set to .ZN True . Finally, if the specified window was originally mapped, the X server automatically performs a .ZN MapWindow request on it. .LP The X server performs normal exposure processing on formerly obscured windows. The X server might not generate .ZN Expose events for regions from the initial .ZN UnmapWindow request that are immediately obscured by the final .ZN MapWindow request. A .ZN BadMatch error results if: .IP \(bu 5 The new parent window is not on the same screen as the old parent window. .IP \(bu 5 The new parent window is the specified window or an inferior of the specified window. .IP \(bu 5 The new parent is .ZN InputOnly , and the window is not. .IP \(bu 5 The specified window has a .ZN ParentRelative background, and the new parent window is not the same depth as the specified window. .LP .ZN XReparentWindow can generate .ZN BadMatch and .ZN BadWindow errors. .SH DIAGNOSTICS .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XChangeSaveSet(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XRegisterIMInstantiateCallback.man000064401431060000012000000000611247741723500223060ustar00alancstaff00002660200006.so man__libmansuffix__/XOpenIM.__libmansuffix__ libX11-1.6.3/man/XcmsCIEXYZ.man000064401431060000012000000000631247741723500161730ustar00alancstaff00002660200006.so man__libmansuffix__/XcmsColor.__libmansuffix__ libX11-1.6.3/man/XListProperties.man000064401431060000012000000000741247741723500174470ustar00alancstaff00002660200006.so man__libmansuffix__/XGetWindowProperty.__libmansuffix__ libX11-1.6.3/man/XGetSubImage.man000064401431060000012000000000631247741723500166110ustar00alancstaff00002660200006.so man__libmansuffix__/XPutImage.__libmansuffix__ libX11-1.6.3/man/XPoint.man000064401431060000012000000000641247741723500155470ustar00alancstaff00002660200006.so man__libmansuffix__/XDrawPoint.__libmansuffix__ libX11-1.6.3/man/XChangeGC.man000064401431060000012000000000631247741723500160540ustar00alancstaff00002660200006.so man__libmansuffix__/XCreateGC.__libmansuffix__ libX11-1.6.3/man/XDisplayMotionBufferSize.man000064401431060000012000000000641247741723500212360ustar00alancstaff00002660200006.so man__libmansuffix__/XSendEvent.__libmansuffix__ libX11-1.6.3/man/XCirculateSubwindowsUp.man000064401431060000012000000000661247741723500207650ustar00alancstaff00002660200006.so man__libmansuffix__/XRaiseWindow.__libmansuffix__ libX11-1.6.3/man/XcmsQueryBlack.man000064401431060000012000000117341247741723500172310ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XcmsQueryBlack __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XcmsQueryBlack, XcmsQueryBlue, XcmsQueryGreen, XcmsQueryRed, XcmsQueryWhite \- obtain black, blue, green, red, and white CCC color specifications .SH SYNTAX .HP Status XcmsQueryBlack\^(\^XcmsCCC \fIccc\fP\^, XcmsColorFormat \fItarget_format\fP\^, XcmsColor *\fIcolor_return\fP\^); .HP Status XcmsQueryBlue\^(\^XcmsCCC \fIccc\fP\^, XcmsColorFormat \fItarget_format\fP\^, XcmsColor *\fIcolor_return\fP\^); .HP Status XcmsQueryGreen\^(\^XcmsCCC \fIccc\fP\^, XcmsColorFormat \fItarget_format\fP\^, XcmsColor *\fIcolor_return\fP\^); .HP Status XcmsQueryRed\^(\^XcmsCCC \fIccc\fP\^, XcmsColorFormat \fItarget_format\fP\^, XcmsColor *\fIcolor_return\fP\^); .HP Status XcmsQueryWhite\^(\^XcmsCCC \fIccc\fP\^, XcmsColorFormat \fItarget_format\fP\^, XcmsColor *\fIcolor_return\fP\^); .SH ARGUMENTS .IP \fIccc\fP 1i Specifies the CCC. Note that the CCC's Client White Point and White Point Adjustment procedures are ignored. .ds Cs .IP \fIcolor_return\fP 1i Returns the color specification in the specified target format for \*(Cs. The white point associated with the returned color specification is the Screen White Point. The value returned in the pixel member is undefined. .IP \fItarget_format\fP 1i Specifies the target color specification format. .SH DESCRIPTION The .ZN XcmsQueryBlack function returns the color specification in the specified target format for zero-intensity red, green, and blue. .LP The .ZN XcmsQueryBlue function returns the color specification in the specified target format for full-intensity blue while red and green are zero. .LP The .ZN XcmsQueryGreen function returns the color specification in the specified target format for full-intensity green while red and blue are zero. .LP The .ZN XcmsQueryRed function returns the color specification in the specified target format for full-intensity red while green and blue are zero. .LP The .ZN XcmsQueryWhite function returns the color specification in the specified target format for full-intensity red, green, and blue. .SH "SEE ALSO" XcmsCIELabQueryMaxC(__libmansuffix__), XcmsCIELuvQueryMaxC(__libmansuffix__), XcmsTekHVCQueryMaxC(__libmansuffix__) .br \fI\*(xL\fP n(VS<=39 .vs \\n(VSp .. .de De .ce 0libX11-1.6.3/man/DefaultGCOfScreen.man000064401431060000012000000000741247741723500175520ustar00alancstaff00002660200006.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__ libX11-1.6.3/man/XrmCombineFileDatabase.man000064401431060000012000000000731247741723500206160ustar00alancstaff00002660200006.so man__libmansuffix__/XrmMergeDatabases.__libmansuffix__ libX11-1.6.3/man/XPutPixel.man000064401431060000012000000000641247741723500162300ustar00alancstaff00002660200006.so man__libmansuffix__/XInitImage.__libmansuffix__ libX11-1.6.3/man/XCirculateSubwindowsDown.man000064401431060000012000000000661247741723500213100ustar00alancstaff00002660200006.so man__libmansuffix__/XRaiseWindow.__libmansuffix__ libX11-1.6.3/man/XGetWMProtocols.man000064401431060000012000000000711247741723500173440ustar00alancstaff00002660200006.so man__libmansuffix__/XSetWMProtocols.__libmansuffix__ libX11-1.6.3/man/XFreeFontPath.man000064401431060000012000000000661247741723500170050ustar00alancstaff00002660200006.so man__libmansuffix__/XSetFontPath.__libmansuffix__ libX11-1.6.3/man/XNextEvent.man000064401431060000012000000176321247741723500164070ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XNextEvent __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XNextEvent, XPeekEvent, XWindowEvent, XCheckWindowEvent, XMaskEvent, XCheckMaskEvent, XCheckTypedEvent, XCheckTypedWindowEvent \- select events by type .SH SYNTAX .HP int XNextEvent\^(\^Display *\fIdisplay\fP\^, XEvent *\fIevent_return\fP\^); .HP int XPeekEvent\^(\^Display *\fIdisplay\fP\^, XEvent *\fIevent_return\fP\^); .HP int XWindowEvent\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, long \fIevent_mask\fP\^, XEvent *\fIevent_return\fP\^); .HP Bool XCheckWindowEvent\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, long \fIevent_mask\fP\^, XEvent *\fIevent_return\fP\^); .HP int XMaskEvent\^(\^Display *\fIdisplay\fP\^, long \fIevent_mask\fP\^, XEvent *\fIevent_return\fP\^); .HP Bool XCheckMaskEvent\^(\^Display *\fIdisplay\fP\^, long \fIevent_mask\fP\^, XEvent *\fIevent_return\fP\^); .HP Bool XCheckTypedEvent\^(\^Display *\fIdisplay\fP\^, int \fIevent_type\fP\^, XEvent *\fIevent_return\fP\^); .HP Bool XCheckTypedWindowEvent\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, int \fIevent_type\fP\^, XEvent *\fIevent_return\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIevent_mask\fP 1i Specifies the event mask. .IP \fIevent_return\fP 1i Returns the matched event's associated structure. .IP \fIevent_return\fP 1i Returns the next event in the queue. .IP \fIevent_return\fP 1i Returns a copy of the matched event's associated structure. .IP \fIevent_type\fP 1i Specifies the event type to be compared. .ds Wi \ whose event uou are interested in .IP \fIw\fP 1i Specifies the window \*(Wi. .SH DESCRIPTION The .ZN XNextEvent function copies the first event from the event queue into the specified .ZN XEvent structure and then removes it from the queue. If the event queue is empty, .ZN XNextEvent flushes the output buffer and blocks until an event is received. .LP The .ZN XPeekEvent function returns the first event from the event queue, but it does not remove the event from the queue. If the queue is empty, .ZN XPeekEvent flushes the output buffer and blocks until an event is received. It then copies the event into the client-supplied .ZN XEvent structure without removing it from the event queue. .LP The .ZN XWindowEvent function searches the event queue for an event that matches both the specified window and event mask. When it finds a match, .ZN XWindowEvent removes that event from the queue and copies it into the specified .ZN XEvent structure. The other events stored in the queue are not discarded. If a matching event is not in the queue, .ZN XWindowEvent flushes the output buffer and blocks until one is received. .LP The .ZN XCheckWindowEvent function searches the event queue and then the events available on the server connection for the first event that matches the specified window and event mask. If it finds a match, .ZN XCheckWindowEvent removes that event, copies it into the specified .ZN XEvent structure, and returns .ZN True . The other events stored in the queue are not discarded. If the event you requested is not available, .ZN XCheckWindowEvent returns .ZN False , and the output buffer will have been flushed. .LP The .ZN XMaskEvent function searches the event queue for the events associated with the specified mask. When it finds a match, .ZN XMaskEvent removes that event and copies it into the specified .ZN XEvent structure. The other events stored in the queue are not discarded. If the event you requested is not in the queue, .ZN XMaskEvent flushes the output buffer and blocks until one is received. .LP The .ZN XCheckMaskEvent function searches the event queue and then any events available on the server connection for the first event that matches the specified mask. If it finds a match, .ZN XCheckMaskEvent removes that event, copies it into the specified .ZN XEvent structure, and returns .ZN True . The other events stored in the queue are not discarded. If the event you requested is not available, .ZN XCheckMaskEvent returns .ZN False , and the output buffer will have been flushed. .LP The .ZN XCheckTypedEvent function searches the event queue and then any events available on the server connection for the first event that matches the specified type. If it finds a match, .ZN XCheckTypedEvent removes that event, copies it into the specified .ZN XEvent structure, and returns .ZN True . The other events in the queue are not discarded. If the event is not available, .ZN XCheckTypedEvent returns .ZN False , and the output buffer will have been flushed. .LP The .ZN XCheckTypedWindowEvent function searches the event queue and then any events available on the server connection for the first event that matches the specified type and window. If it finds a match, .ZN XCheckTypedWindowEvent removes the event from the queue, copies it into the specified .ZN XEvent structure, and returns .ZN True . The other events in the queue are not discarded. If the event is not available, .ZN XCheckTypedWindowEvent returns .ZN False , and the output buffer will have been flushed. .SH "SEE ALSO" XAnyEvent(__libmansuffix__), XIfEvent(__libmansuffix__), XPutBackEvent(__libmansuffix__), XSendEvent(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XUndefineCursor.man000064401431060000012000000000671247741723500174140ustar00alancstaff00002660200006.so man__libmansuffix__/XDefineCursor.__libmansuffix__ libX11-1.6.3/man/XListFontsWithInfo.man000064401431060000012000000000641247741723500200530ustar00alancstaff00002660200006.so man__libmansuffix__/XListFonts.__libmansuffix__ libX11-1.6.3/man/XDefaultString.man000064401431060000012000000001031247741723500172230ustar00alancstaff00002660200006.so man__libmansuffix__/XmbTextListToTextProperty.__libmansuffix__ libX11-1.6.3/man/XcmsStoreColors.man000064401431060000012000000000701247741723500174340ustar00alancstaff00002660200006.so man__libmansuffix__/XcmsStoreColor.__libmansuffix__ libX11-1.6.3/man/NextRequest.man000064401431060000012000000000631247741723500166140ustar00alancstaff00002660200006.so man__libmansuffix__/AllPlanes.__libmansuffix__ libX11-1.6.3/man/XSetCommand.man000064401431060000012000000125451247741723500165170ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XSetCommand __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XSetCommand, XGetCommand \- set or read a window's WM_COMMAND property .SH SYNTAX .HP int XSetCommand\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, char **\fIargv\fP\^, int \fIargc\fP\^); .HP Status XGetCommand\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, char ***\fIargv_return\fP\^, int *\fIargc_return\fP\^); .SH ARGUMENTS .IP \fIargc\fP 1i Specifies the number of arguments. .IP \fIargc_return\fP 1i Returns the number of arguments returned. .IP \fIargv\fP 1i Specifies the application's argument list. .IP \fIargv_return\fP 1i Returns the application's argument list. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIw\fP 1i Specifies the window. .SH DESCRIPTION The .ZN XSetCommand function sets the command and arguments used to invoke the application. (Typically, argv is the argv array of your main program.) If the strings are not in the Host Portable Character Encoding, the result is implementation-dependent. .LP .ZN XSetCommand can generate .ZN BadAlloc and .ZN BadWindow errors. .LP The .ZN XGetCommand function reads the WM_COMMAND property from the specified window and returns a string list. If the WM_COMMAND property exists, it is of type STRING and format 8. If sufficient memory can be allocated to contain the string list, .ZN XGetCommand fills in the argv_return and argc_return arguments and returns a nonzero status. Otherwise, or if any other error is encountered, it returns a zero status. If the data returned by the server is in the Latin Portable Character Encoding, then the returned strings are in the Host Portable Character Encoding. Otherwise, the result is implementation-dependent. To free the memory allocated to the string list, use .ZN XFreeStringList . .SH PROPERTIES .TP 1i \s-1WM_COMMAND\s+1 The command and arguments, null-separated, used to invoke the application. .SH DIAGNOSTICS .TP 1i .ZN BadAlloc The server failed to allocate the requested resource or server memory. .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XAllocClassHint(__libmansuffix__), XAllocIconSize(__libmansuffix__), XAllocSizeHints(__libmansuffix__), XAllocWMHints(__libmansuffix__), XSetTransientForHint(__libmansuffix__), XSetTextProperty(__libmansuffix__), XSetWMClientMachine(__libmansuffix__), XSetWMColormapWindows(__libmansuffix__), XSetWMIconName(__libmansuffix__), XSetWMName(__libmansuffix__), XSetWMProperties(__libmansuffix__), XSetWMProtocols(__libmansuffix__), XStringListToTextProperty(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XcmsQueryColors.man000064401431060000012000000000701247741723500174450ustar00alancstaff00002660200006.so man__libmansuffix__/XcmsQueryColor.__libmansuffix__ libX11-1.6.3/man/XFindContext.man000064401431060000012000000000661247741723500167050ustar00alancstaff00002660200006.so man__libmansuffix__/XSaveContext.__libmansuffix__ libX11-1.6.3/man/XrmGetResource.man000064401431060000012000000231121247741723500172430ustar00alancstaff00002660200006'\" e .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 '\" e .TH XrmGetResource __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XrmGetResource, XrmQGetResource, XrmQGetSearchList, XrmQGetSearchResource \- retrieve database resources and search lists .SH SYNTAX .HP #include .HP Bool XrmGetResource\^(\^XrmDatabase \fIdatabase\fP\^, char *\fIstr_name\fP\^, char *\fIstr_class\fP\^, char **\fIstr_type_return\fP\^, XrmValue *\fIvalue_return\fP\^); .HP Bool XrmQGetResource\^(\^XrmDatabase \fIdatabase\fP\^, XrmNameList \fIquark_name\fP\^, XrmClassList \fIquark_class\fP\^, XrmRepresentation *\fIquark_type_return\fP\^, XrmValue *\fIvalue_return\fP\^); .HP typedef XrmHashTable *XrmSearchList; .sp Bool XrmQGetSearchList\^(\^XrmDatabase \fIdatabase\fP\^, XrmNameList \fInames\fP\^, XrmClassList \fIclasses\fP\^, XrmSearchList \fIlist_return\fP\^, int \fIlist_length\fP\^); .HP Bool XrmQGetSearchResource\^(\^XrmSearchList \fIlist\fP\^, XrmName \fIname\fP\^, XrmClass \fIclass\fP\^, XrmRepresentation *\fItype_return\fP\^, XrmValue *\fIvalue_return\fP\^); .SH ARGUMENTS .IP \fIclass\fP 1i Specifies the resource class. .IP \fIclasses\fP 1i Specifies a list of resource classes. .IP \fIdatabase\fP 1i Specifies the database that is to be used. .IP \fIlist\fP 1i Specifies the search list returned by .ZN XrmQGetSearchList . .IP \fIlist_length\fP 1i Specifies the number of entries (not the byte size) allocated for list_return. .IP \fIlist_return\fP 1i Returns a search list for further use. .IP \fIname\fP 1i Specifies the resource name. .IP \fInames\fP 1i Specifies a list of resource names. .IP \fIquark_class\fP 1i Specifies the fully qualified class of the value being retrieved (as a quark). .IP \fIquark_name\fP 1i Specifies the fully qualified name of the value being retrieved (as a quark). .IP \fIquark_type_return\fP 1i Returns the representation type of the destination (as a quark). .IP \fIstr_class\fP 1i Specifies the fully qualified class of the value being retrieved (as a string). .IP \fIstr_name\fP 1i Specifies the fully qualified name of the value being retrieved (as a string). .IP \fIstr_type_return\fP 1i Returns the representation type of the destination (as a string). .IP \fItype_return\fP 1i Returns data representation type. .IP \fIvalue_return\fP 1i Returns the value in the database. .SH DESCRIPTION The .ZN XrmGetResource and .ZN XrmQGetResource functions retrieve a resource from the specified database. Both take a fully qualified name/class pair, a destination resource representation, and the address of a value (size/address pair). The value and returned type point into database memory; therefore, you must not modify the data. .LP The database only frees or overwrites entries on .ZN XrmPutResource , .ZN XrmQPutResource , or .ZN XrmMergeDatabases . A client that is not storing new values into the database or is not merging the database should be safe using the address passed back at any time until it exits. If a resource was found, both .ZN XrmGetResource and .ZN XrmQGetResource return .ZN True ; otherwise, they return .ZN False . .LP The .ZN XrmQGetSearchList function takes a list of names and classes and returns a list of database levels where a match might occur. The returned list is in best-to-worst order and uses the same algorithm as .ZN XrmGetResource for determining precedence. If list_return was large enough for the search list, .ZN XrmQGetSearchList returns .ZN True ; otherwise, it returns .ZN False . .LP The size of the search list that the caller must allocate is dependent upon the number of levels and wildcards in the resource specifiers that are stored in the database. The worst case length is %3 sup n%, where \fIn\fP is the number of name or class components in names or classes. .LP When using .ZN XrmQGetSearchList followed by multiple probes for resources with a common name and class prefix, only the common prefix should be specified in the name and class list to .ZN XrmQGetSearchList . .LP The .ZN XrmQGetSearchResource function searches the specified database levels for the resource that is fully identified by the specified name and class. The search stops with the first match. .ZN XrmQGetSearchResource returns .ZN True if the resource was found; otherwise, it returns .ZN False . .LP A call to .ZN XrmQGetSearchList with a name and class list containing all but the last component of a resource name followed by a call to .ZN XrmQGetSearchResource with the last component name and class returns the same database entry as .ZN XrmGetResource and .ZN XrmQGetResource with the fully qualified name and class. .SH "MATCHING RULES" The algorithm for determining which resource database entry matches a given query is the heart of the resource manager. All queries must fully specify the name and class of the desired resource (use of the characters ``*'' and ``?'' are not permitted). The library supports up to 100 components in a full name or class. Resources are stored in the database with only partially specified names and classes, using pattern matching constructs. An asterisk (*) is a loose binding and is used to represent any number of intervening components, including none. A period (.) is a tight binding and is used to separate immediately adjacent components. A question mark (?) is used to match any single component name or class. A database entry cannot end in a loose binding; the final component (which cannot be the character ``?'') must be specified. The lookup algorithm searches the database for the entry that most closely matches (is most specific for) the full name and class being queried. When more than one database entry matches the full name and class, precedence rules are used to select just one. .LP The full name and class are scanned from left to right (from highest level in the hierarchy to lowest), one component at a time. At each level, the corresponding component and/or binding of each matching entry is determined, and these matching components and bindings are compared according to precedence rules. Each of the rules is applied at each level before moving to the next level, until a rule selects a single entry over all others. The rules, in order of precedence, are: .IP 1. 5 An entry that contains a matching component (whether name, class, or the character ``?'') takes precedence over entries that elide the level (that is, entries that match the level in a loose binding). .IP 2. 5 An entry with a matching name takes precedence over both entries with a matching class and entries that match using the character ``?''. An entry with a matching class takes precedence over entries that match using the character ``?''. .IP 3. 5 An entry preceded by a tight binding takes precedence over entries preceded by a loose binding. .SH "SEE ALSO" XrmInitialize(__libmansuffix__), XrmMergeDatabases(__libmansuffix__), XrmPutResource(__libmansuffix__), XrmUniqueQuark(__libmansuffix__) .br \fI\*(xL\fP 996 X Consortium .\" .\" 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 slibX11-1.6.3/man/XStoreBytes.man000064401431060000012000000136261247741723500165710ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XStoreBytes __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XStoreBytes, XStoreBuffer, XFetchBytes, XFetchBuffer, XRotateBuffers \- manipulate cut and paste buffers .SH SYNTAX .HP int XStoreBytes\^(\^Display *\fIdisplay\fP\^, char *\fIbytes\fP\^, int \^\fInbytes\fP\^); .HP int XStoreBuffer\^(\^Display *\fIdisplay\fP\^, char *\fIbytes\fP\^, int \^\fInbytes\fP\^, int \fIbuffer\fP\^); .HP char *XFetchBytes\^(\^Display *\fIdisplay\fP\^, int *\fInbytes_return\fP\^); .HP char *XFetchBuffer\^(\^Display *\fIdisplay\fP\^, int *\fInbytes_return\fP\^, int \fIbuffer\fP\^); .HP int XRotateBuffers\^(\^Display *\fIdisplay\fP\^, int \fIrotate\fP\^); .SH ARGUMENTS .ds Fn in which you want to store the bytes \ or from which you want the stored data returned .IP \fIbuffer\fP 1i Specifies the buffer \*(Fn. .IP \fIbytes\fP 1i Specifies the bytes, which are not necessarily ASCII or null-terminated. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fInbytes\fP 1i Specifies the number of bytes to be stored. .IP \fInbytes_return\fP 1i Returns the number of bytes in the buffer. .IP \fIrotate\fP 1i Specifies how much to rotate the cut buffers. .SH DESCRIPTION The data can have embedded null characters and need not be null-terminated. The cut buffer's contents can be retrieved later by any client calling .ZN XFetchBytes . .LP .ZN XStoreBytes can generate a .ZN BadAlloc error. .LP If an invalid buffer is specified, the call has no effect. The data can have embedded null characters and need not be null-terminated. .LP .ZN XStoreBuffer can generate a .ZN BadAlloc error. .LP The .ZN XFetchBytes function returns the number of bytes in the nbytes_return argument, if the buffer contains data. Otherwise, the function returns NULL and sets nbytes to 0. The appropriate amount of storage is allocated and the pointer returned. The client must free this storage when finished with it by calling .ZN XFree . .LP The .ZN XFetchBuffer function returns zero to the nbytes_return argument if there is no data in the buffer or if an invalid buffer is specified. .LP .ZN XFetchBuffer can generate a .ZN BadValue error. .LP The .ZN XRotateBuffers function rotates the cut buffers, such that buffer 0 becomes buffer n, buffer 1 becomes n + 1 mod 8, and so on. This cut buffer numbering is global to the display. Note that .ZN XRotateBuffers generates .ZN BadMatch errors if any of the eight buffers have not been created. .LP .ZN XRotateBuffers can generate a .ZN BadMatch error. .SH DIAGNOSTICS .TP 1i .ZN BadAlloc The server failed to allocate the requested resource or server memory. .TP 1i .ZN BadAtom A value for an Atom argument does not name a defined Atom. .TP 1i .ZN BadMatch Some argument or pair of arguments has the correct type and range but fails to match in some other way required by the request. .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .SH "SEE ALSO" XFree(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XSynchronize.man000064401431060000012000000074301247741723500167750ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XSynchronize __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XSynchronize, XSetAfterFunction \- enable or disable synchronization .SH SYNTAX .HP int (*XSynchronize\^(\^Display *\fIdisplay\fP\^, Bool \fIonoff\fP\^))(); .HP int (*XSetAfterFunction\^(\^Display *\fIdisplay\fP\^, int (\^*\^\fIprocedure\fP\^)\^()))(); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIprocedure\fP 1i Specifies the procedure to be called. .IP \fIonoff\fP 1i Specifies a Boolean value that indicates whether to enable or disable synchronization. .SH DESCRIPTION The .ZN XSynchronize function returns the previous after function. If onoff is .ZN True , .ZN XSynchronize turns on synchronous behavior. If onoff is .ZN False , .ZN XSynchronize turns off synchronous behavior. .LP The specified procedure is called with only a display pointer. .ZN XSetAfterFunction returns the previous after function. .SH "SEE ALSO" XSetErrorHandler(__libmansuffix__) .br \fI\*(xL\fP sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions ColibX11-1.6.3/man/XSetRegion.man000064401431060000012000000000671247741723500163600ustar00alancstaff00002660200006.so man__libmansuffix__/XCreateRegion.__libmansuffix__ libX11-1.6.3/man/XCheckWindowEvent.man000064401431060000012000000000641247741723500176650ustar00alancstaff00002660200006.so man__libmansuffix__/XNextEvent.__libmansuffix__ libX11-1.6.3/man/XrmValue.man000064401431060000012000000000671247741723500160740ustar00alancstaff00002660200006.so man__libmansuffix__/XrmInitialize.__libmansuffix__ libX11-1.6.3/man/IsPFKey.man000064401431060000012000000000651247741723500156010ustar00alancstaff00002660200006.so man__libmansuffix__/IsCursorKey.__libmansuffix__ libX11-1.6.3/man/XGrabKey.man000064401431060000012000000163441247741723500160120ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XGrabKey __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XGrabKey, XUngrabKey \- grab keyboard keys .SH SYNTAX .HP int XGrabKey\^(\^Display *\fIdisplay\fP\^, int \fIkeycode\fP\^, unsigned int \fImodifiers\fP\^, Window \fIgrab_window\fP\^, Bool \fIowner_events\fP\^, int \fIpointer_mode\fP\^, int \fIkeyboard_mode\fP\^); .HP int XUngrabKey\^(\^Display *\fIdisplay\fP\^, int \fIkeycode\fP\^, unsigned int \fImodifiers\fP\^, Window \fIgrab_window\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIgrab_window\fP 1i Specifies the grab window. .IP \fIkeyboard_mode\fP 1i Specifies further processing of keyboard events. You can pass .ZN GrabModeSync or .ZN GrabModeAsync . .IP \fIkeycode\fP 1i Specifies the KeyCode or .ZN AnyKey . .IP \fImodifiers\fP 1i Specifies the set of keymasks or .ZN AnyModifier . The mask is the bitwise inclusive OR of the valid keymask bits. .IP \fIowner_events\fP 1i Specifies a Boolean value that indicates whether the keyboard events are to be reported as usual. .IP \fIpointer_mode\fP 1i Specifies further processing of pointer events. You can pass .ZN GrabModeSync or .ZN GrabModeAsync . .SH DESCRIPTION The .ZN XGrabKey function establishes a passive grab on the keyboard. In the future, the keyboard is actively grabbed (as for .ZN XGrabKeyboard ), the last-keyboard-grab time is set to the time at which the key was pressed (as transmitted in the .ZN KeyPress event), and the .ZN KeyPress event is reported if all of the following conditions are true: .IP \(bu 5 The keyboard is not grabbed and the specified key (which can itself be a modifier key) is logically pressed when the specified modifier keys are logically down, and no other modifier keys are logically down. .IP \(bu 5 Either the grab_window is an ancestor of (or is) the focus window, or the grab_window is a descendant of the focus window and contains the pointer. .IP \(bu 5 A passive grab on the same key combination does not exist on any ancestor of grab_window. .LP The interpretation of the remaining arguments is as for .ZN XGrabKeyboard . The active grab is terminated automatically when the logical state of the keyboard has the specified key released (independent of the logical state of the modifier keys), at which point a .ZN KeyRelease event is reported to the grabbing window. .LP Note that the logical state of a device (as seen by client applications) may lag the physical state if device event processing is frozen. .LP A modifiers argument of .ZN AnyModifier is equivalent to issuing the request for all possible modifier combinations (including the combination of no modifiers). It is not required that all modifiers specified have currently assigned KeyCodes. A keycode argument of .ZN AnyKey is equivalent to issuing the request for all possible KeyCodes. Otherwise, the specified keycode must be in the range specified by min_keycode and max_keycode in the connection setup, or a .ZN BadValue error results. .LP If some other client has issued a .ZN XGrabKey with the same key combination on the same window, a .ZN BadAccess error results. When using .ZN AnyModifier or .ZN AnyKey , the request fails completely, and a .ZN BadAccess error results (no grabs are established) if there is a conflicting grab for any combination. .LP .ZN XGrabKey can generate .ZN BadAccess , .ZN BadValue , and .ZN BadWindow errors. .LP The .ZN XUngrabKey function releases the key combination on the specified window if it was grabbed by this client. It has no effect on an active grab. A modifiers of .ZN AnyModifier is equivalent to issuing the request for all possible modifier combinations (including the combination of no modifiers). A keycode argument of .ZN AnyKey is equivalent to issuing the request for all possible key codes. .LP .ZN XUngrabKey can generate .ZN BadValue and .ZN BadWindow error. .SH DIAGNOSTICS .TP 1i .ZN BadAccess A client attempted to grab a key/button combination already grabbed by another client. .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XAllowEvents(__libmansuffix__), XGrabButton(__libmansuffix__), XGrabKeyboard(__libmansuffix__), XGrabPointer(__libmansuffix__) .br \fI\*(xL\fP , Window \fIgrab_window\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIgrab_window\fP 1i Specifies the grab window. .IP \fIkeyboard_mode\fP 1i Specifies further processing of keyboard events. You can pass .ZN GrabModeSync or .ZN GrabModelibX11-1.6.3/man/XColor.man000064401431060000012000000000711247741723500155320ustar00alancstaff00002660200006.so man__libmansuffix__/XCreateColormap.__libmansuffix__ libX11-1.6.3/man/XReadBitmapFile.man000064401431060000012000000212151247741723500172670ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XReadBitmapFile __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XReadBitmapFile, XReadBitmapFileData, XWriteBitmapFile, XCreatePixmapFromBitmapData, XCreateBitmapFromData \- manipulate bitmaps .SH SYNTAX .HP int XReadBitmapFile(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, char *\fIfilename\fP\^, unsigned int *\fIwidth_return\fP, unsigned int *\fIheight_return\fP\^, Pixmap *\fIbitmap_return\fP\^, int *\fIx_hot_return\fP, int *\fIy_hot_return\fP\^); .HP int XReadBitmapFileData(\^char *\fIfilename\fP\^, unsigned int *\fIwidth_return\fP, unsigned int *\fIheight_return\fP\^, unsigned char *\fIdata_return\fP\^, int *\fIx_hot_return\fP, int *\fIy_hot_return\fP\^); .HP int XWriteBitmapFile(\^Display *\fIdisplay\fP\^, char *\fIfilename\fP\^, Pixmap \fIbitmap\fP\^, unsigned int \fIwidth\fP, unsigned int \fIheight\fP\^, int \fIx_hot\fP, int \fIy_hot\fP\^); .HP Pixmap XCreatePixmapFromBitmapData\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, char *\fIdata\fP\^, unsigned int \fIwidth\fP, unsigned int \fIheight\fP\^, unsigned long \fIfg\fP, unsigned long \fIbg\fP\^, unsigned int \fIdepth\fP\^); .HP Pixmap XCreateBitmapFromData(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, char *\fIdata\fP\^, unsigned int \fIwidth\fP, unsigned int \fIheight\fP\^); .SH ARGUMENTS .IP \fIbitmap\fP 1i Specifies the bitmap. .IP \fIbitmap_return\fP 1i Returns the bitmap that is created. .ds Dr \ that indicates the screen .IP \fId\fP 1i Specifies the drawable\*(Dr. .IP \fIdata\fP 1i Specifies the data in bitmap format. .IP \fIdata\fP 1i Specifies the location of the bitmap data. .IP \fIdata_return\fP 1i Returns the bitmap data. .IP \fIdepth\fP 1i Specifies the depth of the pixmap. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIfg\fP 1i .br .ns .IP \fIbg\fP 1i Specify the foreground and background pixel values to use. .IP \fIfilename\fP 1i Specifies the file name to use. The format of the file name is operating-system dependent. .IP \fIwidth\fP 1i .br .ns .IP \fIheight\fP 1i Specify the width and height. .IP \fIwidth_return\fP 1i .br .ns .IP \fIheight_return\fP 1i Return the width and height values of the read in bitmap file. .IP \fIx_hot\fP 1i .br .ns .IP \fIy_hot\fP 1i Specify where to place the hotspot coordinates (or \-1,\-1 if none are present) in the file. .IP \fIx_hot_return\fP 1i .br .ns .IP \fIy_hot_return\fP 1i Return the hotspot coordinates. .SH DESCRIPTION The .ZN XReadBitmapFile function reads in a file containing a bitmap. The file is parsed in the encoding of the current locale. The ability to read other than the standard format is implementation-dependent. If the file cannot be opened, .ZN XReadBitmapFile returns .ZN BitmapOpenFailed . If the file can be opened but does not contain valid bitmap data, it returns .ZN BitmapFileInvalid . If insufficient working storage is allocated, it returns .ZN BitmapNoMemory . If the file is readable and valid, it returns .ZN BitmapSuccess . .LP .ZN XReadBitmapFile returns the bitmap's height and width, as read from the file, to width_return and height_return. It then creates a pixmap of the appropriate size, reads the bitmap data from the file into the pixmap, and assigns the pixmap to the caller's variable bitmap. The caller must free the bitmap using .ZN XFreePixmap when finished. If \fIname\fP_x_hot and \fIname\fP_y_hot exist, .ZN XReadBitmapFile returns them to x_hot_return and y_hot_return; otherwise, it returns \-1,\-1. .LP .ZN XReadBitmapFile can generate .ZN BadAlloc and .ZN BadDrawable errors. .LP The .ZN XReadBitmapFileData function reads in a file containing a bitmap, in the same manner as .ZN XReadBitmapFile , but returns the data directly rather than creating a pixmap in the server. The bitmap data is returned in data_return; the client must free this storage when finished with it by calling .ZN XFree . The status and other return values are the same as for .ZN XReadBitmapFile . .LP The .ZN XWriteBitmapFile function writes a bitmap out to a file in the X Version 11 format. The name used in the output file is derived from the file name by deleting the directory prefix. The file is written in the encoding of the current locale. If the file cannot be opened for writing, it returns .ZN BitmapOpenFailed . If insufficient memory is allocated, .ZN XWriteBitmapFile returns .ZN BitmapNoMemory ; otherwise, on no error, it returns .ZN BitmapSuccess . If x_hot and y_hot are not \-1, \-1, .ZN XWriteBitmapFile writes them out as the hotspot coordinates for the bitmap. .LP .ZN XWriteBitmapFile can generate .ZN BadDrawable and .ZN BadMatch errors. .LP The .ZN XCreatePixmapFromBitmapData function creates a pixmap of the given depth and then does a bitmap-format .ZN XPutImage of the data into it. The depth must be supported by the screen of the specified drawable, or a .ZN BadMatch error results. .LP .ZN XCreatePixmapFromBitmapData can generate .ZN BadAlloc and .ZN BadMatch errors. .LP The .ZN XCreateBitmapFromData function allows you to include in your C program (using .ZN #include ) a bitmap file that was written out by .ZN XWriteBitmapFile (X version 11 format only) without reading in the bitmap file. The following example creates a gray bitmap: .LP .Ds 0 \&#include "gray.bitmap" .sp 6p Pixmap bitmap; bitmap = XCreateBitmapFromData(display, window, gray_bits, gray_width, gray_height); .De .LP If insufficient working storage was allocated, .ZN XCreateBitmapFromData returns .ZN None . It is your responsibility to free the bitmap using .ZN XFreePixmap when finished. .LP .ZN XCreateBitmapFromData can generate a .ZN BadAlloc error. .SH DIAGNOSTICS .TP 1i .ZN BadAlloc The server failed to allocate the requested resource or server memory. .TP 1i .ZN BadDrawable A value for a Drawable argument does not name a defined Window or Pixmap. .TP 1i .ZN BadMatch An .ZN InputOnly window is used as a Drawable. .SH "SEE ALSO" XCreatePixmap(__libmansuffix__), XPutImage(__libmansuffix__) .br \fI\*(xL\fP \fIy_hot\fP\^); .HP Pixmap XCreatePixmapFromBitmapData\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, char *\fIdata\fP\^, unsigned int \fIwidth\fP, unsigned int \fIheight\fP\^, unsigned long \fIfg\fP, unsigned long \fIbg\fP\^, unsigned int \fIdepth\fP\^); .HP Pixmap XCreateBitmapFromData(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, char *\fIdata\fP\^, unsignedlibX11-1.6.3/man/XwcTextExtents.man000064401431060000012000000000701247741723500173040ustar00alancstaff00002660200006.so man__libmansuffix__/XmbTextExtents.__libmansuffix__ libX11-1.6.3/man/ScreenNumberOfCCC.man000064401431060000012000000000661247741723500175160ustar00alancstaff00002660200006.so man__libmansuffix__/DisplayOfCCC.__libmansuffix__ libX11-1.6.3/man/Xutf8DrawText.man000064401431060000012000000000651247741723500170300ustar00alancstaff00002660200006.so man__libmansuffix__/XmbDrawText.__libmansuffix__ libX11-1.6.3/man/XwcTextEscapement.man000064401431060000012000000000731247741723500177410ustar00alancstaff00002660200006.so man__libmansuffix__/XmbTextEscapement.__libmansuffix__ libX11-1.6.3/man/XFocusChangeEvent.man000064401431060000012000000147151247741723500176550ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XFocusChangeEvent __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XFocusChangeEvent \- FocusIn and FocusOut event structure .SH STRUCTURES The structure for .ZN FocusIn and .ZN FocusOut events contains: .LP .Ds 0 typedef struct { int type; /\&* FocusIn or FocusOut */ unsigned long serial; /\&* # of last request processed by server */ Bool send_event; /\&* true if this came from a SendEvent request */ Display *display; /\&* Display the event was read from */ Window window; /\&* window of event */ int mode; /\&* NotifyNormal, NotifyGrab, NotifyUngrab */ int detail; /\&* * NotifyAncestor, NotifyVirtual, NotifyInferior, * NotifyNonlinear,NotifyNonlinearVirtual, NotifyPointer, * NotifyPointerRoot, NotifyDetailNone */ } XFocusChangeEvent; typedef XFocusChangeEvent XFocusInEvent; typedef XFocusChangeEvent XFocusOutEvent; .De .LP When you receive these events, the structure members are set as follows. .LP The type member is set to the event type constant name that uniquely identifies it. For example, when the X server reports a .ZN GraphicsExpose event to a client application, it sends an .ZN XGraphicsExposeEvent structure with the type member set to .ZN GraphicsExpose . The display member is set to a pointer to the display the event was read on. The send_event member is set to .ZN True if the event came from a .ZN SendEvent protocol request. The serial member is set from the serial number reported in the protocol but expanded from the 16-bit least-significant bits to a full 32-bit value. The window member is set to the window that is most useful to toolkit dispatchers. .LP The window member is set to the window on which the .ZN FocusIn or .ZN FocusOut event was generated. This is the window used by the X server to report the event. The mode member is set to indicate whether the focus events are normal focus events, focus events while grabbed, focus events when a grab activates, or focus events when a grab deactivates. The X server can set the mode member to .ZN NotifyNormal , .ZN NotifyWhileGrabbed , .ZN NotifyGrab , or .ZN NotifyUngrab . .LP All .ZN FocusOut events caused by a window unmap are generated after any .ZN UnmapNotify event; however, the X protocol does not constrain the ordering of .ZN FocusOut events with respect to generated .ZN EnterNotify , .ZN LeaveNotify , .ZN VisibilityNotify , and .ZN Expose events. .LP Depending on the event mode, the detail member is set to indicate the notify detail and can be .ZN NotifyAncestor , .ZN NotifyVirtual , .ZN NotifyInferior , .ZN NotifyNonlinear , .ZN NotifyNonlinearVirtual , .ZN NotifyPointer , .ZN NotifyPointerRoot , or .ZN NotifyDetailNone . .SH "SEE ALSO" XAnyEvent(__libmansuffix__), XButtonEvent(__libmansuffix__), XCreateWindowEvent(__libmansuffix__), XCirculateEvent(__libmansuffix__), XCirculateRequestEvent(__libmansuffix__), XColormapEvent(__libmansuffix__), XConfigureEvent(__libmansuffix__), XConfigureRequestEvent(__libmansuffix__), XCrossingEvent(__libmansuffix__), XDestroyWindowEvent(__libmansuffix__), XErrorEvent(__libmansuffix__), XExposeEvent(__libmansuffix__), XGraphicsExposeEvent(__libmansuffix__), XGravityEvent(__libmansuffix__), XKeymapEvent(__libmansuffix__), XMapEvent(__libmansuffix__), XMapRequestEvent(__libmansuffix__), XPropertyEvent(__libmansuffix__), XReparentEvent(__libmansuffix__), XResizeRequestEvent(__libmansuffix__), XSelectionClearEvent(__libmansuffix__), XSelectionEvent(__libmansuffix__), XSelectionRequestEvent(__libmansuffix__), XUnmapEvent(__libmansuffix__), XVisibilityEvent(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XSendEvent.man000064401431060000012000000177551247741723500163700ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XSendEvent __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XSendEvent, XDisplayMotionBufferSize, XGetMotionEvents, XTimeCoord \- send events and pointer motion history structure .SH SYNTAX .HP Status XSendEvent\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, Bool \fIpropagate\fP\^, long \fIevent_mask\fP\^, XEvent *\fIevent_send\fP\^); .HP unsigned long XDisplayMotionBufferSize\^(\^Display *\fIdisplay\fP\^); .HP XTimeCoord *XGetMotionEvents\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, Time \fIstart\fP\^, Time \fIstop\fP\^, int *\fInevents_return\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIevent_mask\fP 1i Specifies the event mask. .IP \fIevent_send\fP 1i Specifies the event that is to be sent. .IP \fInevents_return\fP 1i Returns the number of events from the motion history buffer. .IP \fIpropagate\fP 1i Specifies a Boolean value. .IP \fIstart\fP 1i .br .ns .IP \fIstop\fP 1i Specify the time interval in which the events are returned from the motion history buffer. You can pass a timestamp or .ZN CurrentTime . .ds Wi the window the event is to be sent to, .ZN PointerWindow , or .ZN InputFocus . .IP \fIw\fP 1i Specifies the window \*(Wi. .SH DESCRIPTION The .ZN XSendEvent function identifies the destination window, determines which clients should receive the specified events, and ignores any active grabs. This function requires you to pass an event mask. For a discussion of the valid event mask names, see section 10.3. This function uses the w argument to identify the destination window as follows: .IP \(bu 5 If w is .ZN PointerWindow , the destination window is the window that contains the pointer. .IP \(bu 5 If w is .ZN InputFocus and if the focus window contains the pointer, the destination window is the window that contains the pointer; otherwise, the destination window is the focus window. .LP To determine which clients should receive the specified events, .ZN XSendEvent uses the propagate argument as follows: .IP \(bu 5 If event_mask is the empty set, the event is sent to the client that created the destination window. If that client no longer exists, no event is sent. .IP \(bu 5 If propagate is .ZN False , the event is sent to every client selecting on destination any of the event types in the event_mask argument. .IP \(bu 5 If propagate is .ZN True and no clients have selected on destination any of the event types in event-mask, the destination is replaced with the closest ancestor of destination for which some client has selected a type in event-mask and for which no intervening window has that type in its do-not-propagate-mask. If no such window exists or if the window is an ancestor of the focus window and .ZN InputFocus was originally specified as the destination, the event is not sent to any clients. Otherwise, the event is reported to every client selecting on the final destination any of the types specified in event_mask. .LP The event in the .ZN XEvent structure must be one of the core events or one of the events defined by an extension (or a .ZN BadValue error results) so that the X server can correctly byte-swap the contents as necessary. The contents of the event are otherwise unaltered and unchecked by the X server except to force send_event to .ZN True in the forwarded event and to set the serial number in the event correctly; therefore these fields and the display field are ignored by .ZN XSendEvent . .LP .ZN XSendEvent returns zero if the conversion to wire protocol format failed and returns nonzero otherwise. .ZN XSendEvent can generate .ZN BadValue and .ZN BadWindow errors. .LP The server may retain the recent history of the pointer motion and do so to a finer granularity than is reported by .ZN MotionNotify events. The .ZN XGetMotionEvents function makes this history available. .LP The .ZN XGetMotionEvents function returns all events in the motion history buffer that fall between the specified start and stop times, inclusive, and that have coordinates that lie within the specified window (including its borders) at its present placement. If the server does not support motion history, if the start time is later than the stop time, or if the start time is in the future, no events are returned; .ZN XGetMotionEvents returns NULL. If the stop time is in the future, it is equivalent to specifying .ZN CurrentTime . .ZN XGetMotionEvents can generate a .ZN BadWindow error. .SH STRUCTURES The .ZN XTimeCoord structure contains: .LP .Ds 0 typedef struct { Time time; short x, y; } XTimeCoord; .De .LP The time member is set to the time, in milliseconds. The x and y members are set to the coordinates of the pointer and are reported relative to the origin of the specified window. .SH DIAGNOSTICS .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XAnyEvent(__libmansuffix__), XIfEvent(__libmansuffix__), XNextEvent(__libmansuffix__), XPutBackEvent(__libmansuffix__) .br \fI\*(xL\fP ask. .IP \fIevent_slibX11-1.6.3/man/XSetAccessControl.man000064401431060000012000000000621247741723500176720ustar00alancstaff00002660200006.so man__libmansuffix__/XAddHost.__libmansuffix__ libX11-1.6.3/man/XExtendedMaxRequestSize.man000064401431060000012000000000631247741723500210670ustar00alancstaff00002660200006.so man__libmansuffix__/AllPlanes.__libmansuffix__ libX11-1.6.3/man/XDestroyWindow.man000064401431060000012000000117761247741723500173130ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XDestroyWindow __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XDestroyWindow, XDestroySubwindows \- destroy windows .SH SYNTAX .HP int XDestroyWindow\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^); .HP int XDestroySubwindows\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIw\fP 1i Specifies the window. .SH DESCRIPTION The .ZN XDestroyWindow function destroys the specified window as well as all of its subwindows and causes the X server to generate a .ZN DestroyNotify event for each window. The window should never be referenced again. If the window specified by the w argument is mapped, it is unmapped automatically. The ordering of the .ZN DestroyNotify events is such that for any given window being destroyed, .ZN DestroyNotify is generated on any inferiors of the window before being generated on the window itself. The ordering among siblings and across subhierarchies is not otherwise constrained. If the window you specified is a root window, no windows are destroyed. Destroying a mapped window will generate .ZN Expose events on other windows that were obscured by the window being destroyed. .LP .ZN XDestroyWindow can generate a .ZN BadWindow error. .LP The .ZN XDestroySubwindows function destroys all inferior windows of the specified window, in bottom-to-top stacking order. It causes the X server to generate a .ZN DestroyNotify event for each window. If any mapped subwindows were actually destroyed, .ZN XDestroySubwindows causes the X server to generate .ZN Expose events on the specified window. This is much more efficient than deleting many windows one at a time because much of the work need be performed only once for all of the windows, rather than for each window. The subwindows should never be referenced again. .LP .ZN XDestroySubwindows can generate a .ZN BadWindow error. .SH DIAGNOSTICS .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XChangeWindowAttributes(__libmansuffix__), XConfigureWindow(__libmansuffix__), XCreateWindow(__libmansuffix__), XMapWindow(__libmansuffix__), XRaiseWindow(__libmansuffix__), XUnmapWindow(__libmansuffix__) .br \fI\*(xL\fP N libX11-1.6.3/man/XDrawPoints.man000064401431060000012000000000641247741723500165500ustar00alancstaff00002660200006.so man__libmansuffix__/XDrawPoint.__libmansuffix__ libX11-1.6.3/man/XrmPutResource.man000064401431060000012000000152411247741723500173000ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XrmPutResource __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XrmPutResource, XrmQPutResource, XrmPutStringResource, XrmQPutStringResource, XrmPutLineResource \- store database resources .SH SYNTAX .HP #include .HP void XrmPutResource\^(\^XrmDatabase *\fIdatabase\fP\^, char *\fIspecifier\fP\^, char *\fItype\fP\^, XrmValue *\fIvalue\fP\^); .HP void XrmQPutResource\^(\^XrmDatabase *\fIdatabase\fP\^, XrmBindingList \fIbindings\fP\^, XrmQuarkList \fIquarks\fP\^, XrmRepresentation \fItype\fP\^, XrmValue *\fIvalue\fP\^); .HP void XrmPutStringResource\^(\^XrmDatabase *\fIdatabase\fP\^, char *\fIspecifier\fP\^, char *\fIvalue\fP\^); .HP void XrmQPutStringResource\^(\^XrmDatabase *\fIdatabase\fP\^, XrmBindingList \fIbindings\fP\^, XrmQuarkList \fIquarks\fP\^, char *\fIvalue\fP\^); .HP void XrmPutLineResource\^(\^XrmDatabase *\fIdatabase\fP\^, char *\fIline\fP\^); .SH ARGUMENTS .IP \fIbindings\fP 1i Specifies a list of bindings. .IP \fIdatabase\fP 1i Specifies the resource database. .IP \fIline\fP 1i Specifies the resource name and value pair as a single string. .IP \fIquarks\fP 1i Specifies the complete or partial name or the class list of the resource. .IP \fIspecifier\fP 1i Specifies a complete or partial specification of the resource. .IP \fItype\fP 1i Specifies the type of the resource. .IP \fIvalue\fP 1i Specifies the value of the resource, which is specified as a string. .SH DESCRIPTION If database contains NULL, .ZN XrmPutResource creates a new database and returns a pointer to it. .ZN XrmPutResource is a convenience function that calls .ZN XrmStringToBindingQuarkList followed by: .LP .Ds XrmQPutResource(database, bindings, quarks, XrmStringToQuark(type), value) .De .LP If the specifier and type are not in the Host Portable Character Encoding, the result is implementation-dependent. The value is stored in the database without modification. .LP If database contains NULL, .ZN XrmQPutResource creates a new database and returns a pointer to it. If a resource entry with the identical bindings and quarks already exists in the database, the previous type and value are replaced by the new specified type and value. The value is stored in the database without modification. .LP If database contains NULL, .ZN XrmPutStringResource creates a new database and returns a pointer to it. .ZN XrmPutStringResource adds a resource with the specified value to the specified database. .ZN XrmPutStringResource is a convenience function that first calls .ZN XrmStringToBindingQuarkList on the specifier and then calls .ZN XrmQPutResource , using a ``String'' representation type. If the specifier is not in the Host Portable Character Encoding, the result is implementation-dependent. The value is stored in the database without modification. .LP If database contains NULL, .ZN XrmQPutStringResource creates a new database and returns a pointer to it. .ZN XrmQPutStringResource is a convenience routine that constructs an .ZN XrmValue for the value string (by calling .ZN strlen to compute the size) and then calls .ZN XrmQPutResource , using a ``String'' representation type. The value is stored in the database without modification. .LP If database contains NULL, .ZN XrmPutLineResource creates a new database and returns a pointer to it. .ZN XrmPutLineResource adds a single resource entry to the specified database. The line should be in valid ResourceLine format (see section 15.1) terminated by a newline or null character; the database that results from using a string with incorrect syntax is implementation-dependent. The string is parsed in the locale of the database. If the .ZN ResourceName is not in the Host Portable Character Encoding, the result is implementation-dependent. Note that comment lines are not stored. .SH "SEE ALSO" XrmGetResource(__libmansuffix__), XrmInitialize(__libmansuffix__), XrmMergeDatabases(__libmansuffix__), XrmUniqueQuark(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XSetState.man000064401431060000012000000130451247741723500162150ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XSetState __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XSetState, XSetFunction, XSetPlaneMask, XSetForeground, XSetBackground \- GC convenience routines .SH SYNTAX .HP int XSetState\^(\^Display *\fIdisplay\fP\^, GC \fIgc\fP\^, unsigned long \fIforeground\fP\^, unsigned int \fIbackground\fP\^, int \fIfunction\fP\^, unsigned long \fIplane_mask\fP\^); .HP int XSetFunction\^(\^Display *\fIdisplay\fP\^, GC \fIgc\fP\^, int \fIfunction\fP\^); .HP int XSetPlaneMask\^(\^Display *\fIdisplay\fP\^, GC \fIgc\fP\^, unsigned long \fIplane_mask\fP\^); .HP int XSetForeground\^(\^Display *\fIdisplay\fP\^, GC \fIgc\fP\^, unsigned long \fIforeground\fP\^); .HP int XSetBackground\^(\^Display *\fIdisplay\fP\^, GC \fIgc\fP\^, unsigned long \fIbackground\fP\^); .SH ARGUMENTS .IP \fIbackground\fP 1i Specifies the background you want to set for the specified GC. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIforeground\fP 1i Specifies the foreground you want to set for the specified GC. .IP \fIfunction\fP 1i Specifies the function you want to set for the specified GC. .IP \fIgc\fP 1i Specifies the GC. .IP \fIplane_mask\fP 1i Specifies the plane mask. .\" *** JIM: NEED MORE INFO FOR THIS. *** .SH DESCRIPTION The .ZN XSetState function sets the foreground, background, plane mask, and function components for the specified GC. .LP .ZN XSetState can generate .ZN BadAlloc , .ZN BadGC , and .ZN BadValue errors. .LP .ZN XSetFunction sets a specified value in the specified GC. .LP .ZN XSetFunction can generate .ZN BadAlloc , .ZN BadGC , and .ZN BadValue errors. .LP The .ZN XSetPlaneMask function sets the plane mask in the specified GC. .LP .ZN XSetPlaneMask can generate .ZN BadAlloc and .ZN BadGC errors. .LP The .ZN XSetForeground function sets the foreground in the specified GC. .LP .ZN XSetForeground can generate .ZN BadAlloc and .ZN BadGC errors. .LP The .ZN XSetBackground function sets the background in the specified GC. .LP .ZN XSetBackground can generate .ZN BadAlloc and .ZN BadGC errors. .SH DIAGNOSTICS .TP 1i .ZN BadAlloc The server failed to allocate the requested resource or server memory. .TP 1i .ZN BadGC A value for a GContext argument does not name a defined GContext. .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .SH "SEE ALSO" XCreateGC(__libmansuffix__), XQueryBestSize(__libmansuffix__), XSetArcMode(__libmansuffix__), XSetClipOrigin(__libmansuffix__), XSetFillStyle(__libmansuffix__), XSetFont(__libmansuffix__), XSetLineAttributes(__libmansuffix__), XSetTile(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XCreateRegion.man000064401431060000012000000074311247741723500170320ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XCreateRegion __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XCreateRegion, XSetRegion, XDestroyRegion \- create or destroy regions .SH SYNTAX .HP Region XCreateRegion\^(void\^); .HP int XSetRegion\^(\^Display *\fIdisplay\fP\^, GC \fIgc\fP\^, Region \fIr\fP\^); .HP int XDestroyRegion\^(\^Region \fIr\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIgc\fP 1i Specifies the GC. .IP \fIr\fP 1i Specifies the region. .SH DESCRIPTION The .ZN XCreateRegion function creates a new empty region. .LP The .ZN XSetRegion function sets the clip-mask in the GC to the specified region. The region is specified relative to the drawable's origin. The resulting GC clip origin is implementation-dependent. Once it is set in the GC, the region can be destroyed. .LP The .ZN XDestroyRegion function deallocates the storage associated with a specified region. .SH "SEE ALSO" XEmptyRegion(__libmansuffix__), XIntersectRegion(__libmansuffix__) .br \fI\*(xL\fP estriction, 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, sublibX11-1.6.3/man/XDisableAccessControl.man000064401431060000012000000000621247741723500205020ustar00alancstaff00002660200006.so man__libmansuffix__/XAddHost.__libmansuffix__ libX11-1.6.3/man/XNoExposeEvent.man000064401431060000012000000000761247741723500172230ustar00alancstaff00002660200006.so man__libmansuffix__/XGraphicsExposeEvent.__libmansuffix__ libX11-1.6.3/man/XRemoveHosts.man000064401431060000012000000000621247741723500167320ustar00alancstaff00002660200006.so man__libmansuffix__/XAddHost.__libmansuffix__ libX11-1.6.3/man/XStoreColor.man000064401431060000012000000000661247741723500165530ustar00alancstaff00002660200006.so man__libmansuffix__/XStoreColors.__libmansuffix__ libX11-1.6.3/man/XCrossingEvent.man000064401431060000012000000212421247741723500172500ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XCrossingEvent __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XCrossingEvent \- EnterNotify and LeaveNotify event structure .SH STRUCTURES The structure for .ZN EnterNotify and .ZN LeaveNotify events contains: .LP .Ds 0 typedef struct { int type; /\&* EnterNotify or LeaveNotify */ unsigned long serial; /\&* # of last request processed by server */ Bool send_event; /\&* true if this came from a SendEvent request */ Display *display; /\&* Display the event was read from */ Window window; /\&* ``event'' window reported relative to */ Window root; /\&* root window that the event occurred on */ Window subwindow; /\&* child window */ Time time; /\&* milliseconds */ int x, y; /\&* pointer x, y coordinates in event window */ int x_root, y_root; /\&* coordinates relative to root */ int mode; /\&* NotifyNormal, NotifyGrab, NotifyUngrab */ int detail; /\&* * NotifyAncestor, NotifyVirtual, NotifyInferior, * NotifyNonlinear,NotifyNonlinearVirtual */ Bool same_screen; /\&* same screen flag */ Bool focus; /\&* boolean focus */ unsigned int state; /\&* key or button mask */ } XCrossingEvent; typedef XCrossingEvent XEnterWindowEvent; typedef XCrossingEvent XLeaveWindowEvent; .De .LP When you receive these events, the structure members are set as follows. .LP The type member is set to the event type constant name that uniquely identifies it. For example, when the X server reports a .ZN GraphicsExpose event to a client application, it sends an .ZN XGraphicsExposeEvent structure with the type member set to .ZN GraphicsExpose . The display member is set to a pointer to the display the event was read on. The send_event member is set to .ZN True if the event came from a .ZN SendEvent protocol request. The serial member is set from the serial number reported in the protocol but expanded from the 16-bit least-significant bits to a full 32-bit value. The window member is set to the window that is most useful to toolkit dispatchers. .LP The window member is set to the window on which the .ZN EnterNotify or .ZN LeaveNotify event was generated and is referred to as the event window. This is the window used by the X server to report the event, and is relative to the root window on which the event occurred. The root member is set to the root window of the screen on which the event occurred. .LP For a .ZN LeaveNotify event, if a child of the event window contains the initial position of the pointer, the subwindow component is set to that child. Otherwise, the X server sets the subwindow member to .ZN None . For an .ZN EnterNotify event, if a child of the event window contains the final pointer position, the subwindow component is set to that child or .ZN None . .LP The time member is set to the time when the event was generated and is expressed in milliseconds. The x and y members are set to the coordinates of the pointer position in the event window. This position is always the pointer's final position, not its initial position. If the event window is on the same screen as the root window, x and y are the pointer coordinates relative to the event window's origin. Otherwise, x and y are set to zero. The x_root and y_root members are set to the pointer's coordinates relative to the root window's origin at the time of the event. .LP The same_screen member is set to indicate whether the event window is on the same screen as the root window and can be either .ZN True or .ZN False . If .ZN True , the event and root windows are on the same screen. If .ZN False , the event and root windows are not on the same screen. .LP The focus member is set to indicate whether the event window is the focus window or an inferior of the focus window. The X server can set this member to either .ZN True or .ZN False . If .ZN True , the event window is the focus window or an inferior of the focus window. If .ZN False , the event window is not the focus window or an inferior of the focus window. .LP The state member is set to indicate the state of the pointer buttons and modifier keys just prior to the event. The X server can set this member to the bitwise inclusive OR of one or more of the button or modifier key masks: .ZN Button1Mask , .ZN Button2Mask , .ZN Button3Mask , .ZN Button4Mask , .ZN Button5Mask , .ZN ShiftMask , .ZN LockMask , .ZN ControlMask , .ZN Mod1Mask , .ZN Mod2Mask , .ZN Mod3Mask , .ZN Mod4Mask , .ZN Mod5Mask . .LP The mode member is set to indicate whether the events are normal events, pseudo-motion events when a grab activates, or pseudo-motion events when a grab deactivates. The X server can set this member to .ZN NotifyNormal , .ZN NotifyGrab , or .ZN NotifyUngrab . .LP The detail member is set to indicate the notify detail and can be .ZN NotifyAncestor , .ZN NotifyVirtual , .ZN NotifyInferior , .ZN NotifyNonlinear , or .ZN NotifyNonlinearVirtual . .SH "SEE ALSO" XAnyEvent(__libmansuffix__), XButtonEvent(__libmansuffix__), XCreateWindowEvent(__libmansuffix__), XCirculateEvent(__libmansuffix__), XCirculateRequestEvent(__libmansuffix__), XColormapEvent(__libmansuffix__), XConfigureEvent(__libmansuffix__), XConfigureRequestEvent(__libmansuffix__), XDestroyWindowEvent(__libmansuffix__), XErrorEvent(__libmansuffix__), XExposeEvent(__libmansuffix__), XFocusChangeEvent(__libmansuffix__), XGraphicsExposeEvent(__libmansuffix__), XGravityEvent(__libmansuffix__), XKeymapEvent(__libmansuffix__), XMapEvent(__libmansuffix__), XMapRequestEvent(__libmansuffix__), XPropertyEvent(__libmansuffix__), XReparentEvent(__libmansuffix__), XResizeRequestEvent(__libmansuffix__), XSelectionClearEvent(__libmansuffix__), XSelectionEvent(__libmansuffix__), XSelectionRequestEvent(__libmansuffix__), XUnmapEvent(__libmansuffix__), XVisibilityEvent(__libmansuffix__) .br \fI\*(xL\fP ot; /\&* coordinates relative to root */ int mode; /\&* NotifyNormal, NotifyGrab, NotifyUngrab */ int detail; /\&* * NotifyAncestor, NotifyVirtual, NotifyInferior, * NotifyNonlinear,NotifyNonlinearVirtual */ Bool same_screen; /\&* same screen fllibX11-1.6.3/man/XQueryFont.man000064401431060000012000000000631247741723500164110ustar00alancstaff00002660200006.so man__libmansuffix__/XLoadFont.__libmansuffix__ libX11-1.6.3/man/XFreeGC.man000064401431060000012000000000631247741723500155500ustar00alancstaff00002660200006.so man__libmansuffix__/XCreateGC.__libmansuffix__ libX11-1.6.3/man/XChangeKeyboardMapping.man000064401431060000012000000261571247741723500206530ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XChangeKeyboardMapping __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XChangeKeyboardMapping, XGetKeyboardMapping, XDisplayKeycodes, XSetModifierMapping, XGetModifierMapping, XNewModifiermap, XInsertModifiermapEntry, XDeleteModifiermapEntry, XFreeModifiermap, XModifierKeymap \- manipulate keyboard encoding and keyboard encoding structure .SH SYNTAX .HP int XChangeKeyboardMapping(\^Display *\fIdisplay\fP, int \fIfirst_keycode\fP, int \fIkeysyms_per_keycode\fP, KeySym *\fIkeysyms\fP, int \fInum_codes\fP\^); .HP KeySym *XGetKeyboardMapping(\^Display *\fIdisplay\fP, KeyCode \fIfirst_keycode\fP, int \fIkeycode_count\fP, int *\fIkeysyms_per_keycode_return\fP\^); .HP int XDisplayKeycodes\^(\^Display *\fIdisplay\fP\^, int *\fImin_keycodes_return\fP\^, int *\fImax_keycodes_return\fP\^); .HP int XSetModifierMapping(\^Display *\fIdisplay\fP, XModifierKeymap *\fImodmap\fP\^); .HP XModifierKeymap *XGetModifierMapping(\^Display *\fIdisplay\fP\^); .HP XModifierKeymap *XNewModifiermap(\^int \fImax_keys_per_mod\fP\^); .HP XModifierKeymap *XInsertModifiermapEntry\^(\^XModifierKeymap *\fImodmap\fP, KeyCode \fIkeycode_entry\fP, int \fImodifier\fP\^); .HP XModifierKeymap *XDeleteModifiermapEntry\^(\^XModifierKeymap *\fImodmap\fP, KeyCode \fIkeycode_entry\fP, int \fImodifier\fP\^); .HP int XFreeModifiermap(\^XModifierKeymap *\fImodmap\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .ds Kc changed or returned .IP \fIfirst_keycode\fP 1i Specifies the first KeyCode that is to be \*(Kc. .IP \fIkeycode_count\fP 1i Specifies the number of KeyCodes that are to be returned. .IP \fIkeycode_entry\fP 1i Specifies the KeyCode. .IP \fIkeysyms\fP 1i Specifies an array of KeySyms. .IP \fIkeysyms_per_keycode\fP 1i Specifies the number of KeySyms per KeyCode. .IP \fIkeysyms_per_keycode_return\fP 1i Returns the number of KeySyms per KeyCode. .IP \fImax_keys_per_mod\fP 1i Specifies the number of KeyCode entries preallocated to the modifiers in the map. .IP \fImax_keycodes_return\fP 1i Returns the maximum number of KeyCodes. .IP \fImin_keycodes_return\fP 1i Returns the minimum number of KeyCodes. .IP \fImodifier\fP 1i Specifies the modifier. .IP \fImodmap\fP 1i Specifies the .ZN XModifierKeymap structure. .IP \fInum_codes\fP 1i Specifies the number of KeyCodes that are to be changed. .SH DESCRIPTION The .ZN XChangeKeyboardMapping function defines the symbols for the specified number of KeyCodes starting with first_keycode. The symbols for KeyCodes outside this range remain unchanged. The number of elements in keysyms must be: .LP .Ds num_codes * keysyms_per_keycode .De .LP The specified first_keycode must be greater than or equal to min_keycode returned by .ZN XDisplayKeycodes , or a .ZN BadValue error results. In addition, the following expression must be less than or equal to max_keycode as returned by .ZN XDisplayKeycodes , or a .ZN BadValue error results: .LP .Ds first_keycode + num_codes \- 1 .De .LP KeySym number N, counting from zero, for KeyCode K has the following index in keysyms, counting from zero: .LP .Ds (K \- first_keycode) * keysyms_per_keycode + N .De .LP The specified keysyms_per_keycode can be chosen arbitrarily by the client to be large enough to hold all desired symbols. A special KeySym value of .ZN NoSymbol should be used to fill in unused elements for individual KeyCodes. It is legal for .ZN NoSymbol to appear in nontrailing positions of the effective list for a KeyCode. .ZN XChangeKeyboardMapping generates a .ZN MappingNotify event. .LP There is no requirement that the X server interpret this mapping. It is merely stored for reading and writing by clients. .LP .ZN XChangeKeyboardMapping can generate .ZN BadAlloc and .ZN BadValue errors. .LP The .ZN XGetKeyboardMapping function returns the symbols for the specified number of KeyCodes starting with first_keycode. The value specified in first_keycode must be greater than or equal to min_keycode as returned by .ZN XDisplayKeycodes , or a .ZN BadValue error results. In addition, the following expression must be less than or equal to max_keycode as returned by .ZN XDisplayKeycodes : .LP .Ds first_keycode + keycode_count \- 1 .De .LP If this is not the case, a .ZN BadValue error results. The number of elements in the KeySyms list is: .LP .Ds keycode_count * keysyms_per_keycode_return .De .LP KeySym number N, counting from zero, for KeyCode K has the following index in the list, counting from zero: .Ds (K \- first_code) * keysyms_per_code_return + N .De .LP The X server arbitrarily chooses the keysyms_per_keycode_return value to be large enough to report all requested symbols. A special KeySym value of .ZN NoSymbol is used to fill in unused elements for individual KeyCodes. To free the storage returned by .ZN XGetKeyboardMapping , use .ZN XFree . .LP .ZN XGetKeyboardMapping can generate a .ZN BadValue error. .LP The .ZN XDisplayKeycodes function returns the min-keycodes and max-keycodes supported by the specified display. The minimum number of KeyCodes returned is never less than 8, and the maximum number of KeyCodes returned is never greater than 255. Not all KeyCodes in this range are required to have corresponding keys. .LP The .ZN XSetModifierMapping function specifies the KeyCodes of the keys (if any) that are to be used as modifiers. If it succeeds, the X server generates a .ZN MappingNotify event, and .ZN XSetModifierMapping returns .ZN MappingSuccess . X permits at most 8 modifier keys. If more than 8 are specified in the .ZN XModifierKeymap structure, a .ZN BadLength error results. .LP The modifiermap member of the .ZN XModifierKeymap structure contains 8 sets of max_keypermod KeyCodes, one for each modifier in the order .ZN Shift , .ZN Lock , .ZN Control , .ZN Mod1 , .ZN Mod2 , .ZN Mod3 , .ZN Mod4 , and .ZN Mod5 . Only nonzero KeyCodes have meaning in each set, and zero KeyCodes are ignored. In addition, all of the nonzero KeyCodes must be in the range specified by min_keycode and max_keycode in the .ZN Display structure, or a .ZN BadValue error results. .LP An X server can impose restrictions on how modifiers can be changed, for example, if certain keys do not generate up transitions in hardware, if auto-repeat cannot be disabled on certain keys, or if multiple modifier keys are not supported. If some such restriction is violated, the status reply is .ZN MappingFailed , and none of the modifiers are changed. If the new KeyCodes specified for a modifier differ from those currently defined and any (current or new) keys for that modifier are in the logically down state, .ZN XSetModifierMapping returns .ZN MappingBusy , and none of the modifiers is changed. .LP .ZN XSetModifierMapping can generate .ZN BadAlloc and .ZN BadValue errors. .LP The .ZN XGetModifierMapping function returns a pointer to a newly created .ZN XModifierKeymap structure that contains the keys being used as modifiers. The structure should be freed after use by calling .ZN XFreeModifiermap . If only zero values appear in the set for any modifier, that modifier is disabled. .LP The .ZN XNewModifiermap function returns a pointer to .ZN XModifierKeymap structure for later use. .LP The .ZN XInsertModifiermapEntry function adds the specified KeyCode to the set that controls the specified modifier and returns the resulting .ZN XModifierKeymap structure (expanded as needed). .LP The .ZN XDeleteModifiermapEntry function deletes the specified KeyCode from the set that controls the specified modifier and returns a pointer to the resulting .ZN XModifierKeymap structure. .LP The .ZN XFreeModifiermap function frees the specified .ZN XModifierKeymap structure. .SH STRUCTURES The .ZN XModifierKeymap structure contains: .LP .Ds 0 typedef struct { int max_keypermod; /\&* This server's max number of keys per modifier */ KeyCode *modifiermap; /\&* An 8 by max_keypermod array of the modifiers */ } XModifierKeymap; .De .SH DIAGNOSTICS .TP 1i .ZN BadAlloc The server failed to allocate the requested resource or server memory. .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .SH "SEE ALSO" XFree(__libmansuffix__), XkbGetMap(__libmansuffix__), XSetPointerMapping(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XrmInitialize.man000064401431060000012000000164761247741723500171340ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XrmInitialize __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XrmInitialize, XrmParseCommand, XrmValue, XrmOptionKind, XrmOptionDescRec \- initialize the Resource Manager, Resource Manager structures, and parse the command line .SH SYNTAX .HP #include .HP void XrmInitialize\^(void\^); .HP void XrmParseCommand\^(\^XrmDatabase *\fIdatabase\fP\^, XrmOptionDescList \fItable\fP\^, int \fItable_count\fP\^, char *\fIname\fP\^, int *\fIargc_in_out\fP\^, char **\fIargv_in_out\fP\^); .SH ARGUMENTS .IP \fIargc_in_out\fP 1i Specifies the number of arguments and returns the number of remaining arguments. .IP \fIargv_in_out\fP 1i Specifies the command line arguments and returns the remaining arguments. .IP \fIdatabase\fP 1i Specifies the resource database. .IP \fIname\fP 1i Specifies the application name. .IP \fItable\fP 1i Specifies the table of command line arguments to be parsed. .IP \fItable_count\fP 1i Specifies the number of entries in the table. .SH DESCRIPTION The .ZN XrmInitialize function initialize the resource manager. It must be called before any other Xrm functions are used. .LP The .ZN XrmParseCommand function parses an (argc, argv) pair according to the specified option table, loads recognized options into the specified database with type ``String,'' and modifies the (argc, argv) pair to remove all recognized options. If database contains NULL, .ZN XrmParseCommand creates a new database and returns a pointer to it. Otherwise, entries are added to the database specified. If a database is created, it is created in the current locale. .LP The specified table is used to parse the command line. Recognized options in the table are removed from argv, and entries are added to the specified resource database in the order they occur in argv. The table entries contain information on the option string, the option name, the style of option, and a value to provide if the option kind is .ZN XrmoptionNoArg . The option names are compared byte-for-byte to arguments in argv, independent of any locale. The resource values given in the table are stored in the resource database without modification. All resource database entries are created using a ``String'' representation type. The argc argument specifies the number of arguments in argv and is set on return to the remaining number of arguments that were not parsed. The name argument should be the name of your application for use in building the database entry. The name argument is prefixed to the resourceName in the option table before storing a database entry. The name argument is treated as a single component, even if it has embedded periods. No separating (binding) character is inserted, so the table must contain either a period (.) or an asterisk (*) as the first character in each resourceName entry. To specify a more completely qualified resource name, the resourceName entry can contain multiple components. If the name argument and the resourceNames are not in the Host Portable Character Encoding, the result is implementation-dependent. .SH STRUCTURES The .ZN XrmValue , .ZN XrmOptionKind , and .ZN XrmOptionDescRec structures contain: .LP .Ds 0 typedef struct { unsigned int size; XPointer addr; } XrmValue, *XrmValuePtr; .De .LP .Ds 0 typedef enum { XrmoptionNoArg, /\&* Value is specified in XrmOptionDescRec.value */ XrmoptionIsArg, /\&* Value is the option string itself */ XrmoptionStickyArg, /\&* Value is characters immediately following option */ XrmoptionSepArg, /\&* Value is next argument in argv */ XrmoptionResArg, /\&* Resource and value in next argument in argv */ XrmoptionSkipArg, /\&* Ignore this option and the next argument in argv */ XrmoptionSkipLine, /\&* Ignore this option and the rest of argv */ XrmoptionSkipNArgs /\&* Ignore this option and the next \ \ \ XrmOptionDescRec.value arguments in argv */ } XrmOptionKind; .De .LP .Ds 0 typedef struct { char *option; /\&* Option specification string in argv */ char *specifier; /\&* Binding and resource name (sans application name) */ XrmOptionKind argKind; /\&* Which style of option it is */ XPointer value; /\&* Value to provide if XrmoptionNoArg or \ \ \ XrmoptionSkipNArgs */ } XrmOptionDescRec, *XrmOptionDescList; .De .SH "SEE ALSO" XrmGetResource(__libmansuffix__), XrmMergeDatabases(__libmansuffix__), XrmPutResource(__libmansuffix__), XrmUniqueQuark(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/IsFunctionKey.man000064401431060000012000000000651247741723500170610ustar00alancstaff00002660200006.so man__libmansuffix__/IsCursorKey.__libmansuffix__ libX11-1.6.3/man/XrmUniqueQuark.man000064401431060000012000000202161247741723500172700ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XrmUniqueQuark __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XrmUniqueQuark, XrmStringToQuark, XrmPermStringToQuark, XrmQuarkToString, XrmStringToQuarkList, XrmStringToBindingQuarkList \- manipulate resource quarks .SH SYNOPSIS .HP #include .HP XrmQuark XrmUniqueQuark\^(void); .LP \&#define XrmStringToName(string) XrmStringToQuark(string) .br \&#define XrmStringToClass(string) XrmStringToQuark(string) .br \&#define XrmStringToRepresentation(string) XrmStringToQuark(string) .HP int XrmQuark XrmStringToQuark\^(\^char *\fIstring\fP\^); .HP XrmQuark XrmPermStringToQuark\^(\^char *\fIstring\fP\^); .LP \&#define XrmStringToName(string) XrmStringToQuark(string) .br \&#define XrmStringToClass(string) XrmStringToQuark(string) .br \&#define XrmStringToRepresentation(string) XrmStringToQuark(string) .HP XrmQuark XrmStringToQuark\^(\^char *\fIstring\fP\^); .HP XrmQuark XrmPermStringToQuark\^(\^char *\fIstring\fP\^); .LP \&#define XrmNameToString(name) XrmQuarkToString(name) .br \&#define XrmClassToString(class) XrmQuarkToString(class) .br \&#define XrmRepresentationToString(type) XrmQuarkToString(type) .HP char *XrmQuarkToString\^(\^XrmQuark \fIquark\fP\^); .LP \&#define XrmStringToNameList(str, name) XrmStringToQuarkList((str), (name)) .br \&#define XrmStringToClassList(str,class) XrmStringToQuarkList((str), (class)) .sp .HP void XrmStringToQuarkList\^(\^char *\fIstring\fP\^, XrmQuarkList \fIquarks_return\fP\^); .HP XrmStringToBindingQuarkList\^(\^char *\fIstring\fP\^, XrmBindingList \fIbindings_return\fP\^, XrmQuarkList \fIquarks_return\fP\^); .SH ARGUMENTS .IP \fIbindings_return\fP 1i Returns the binding list. .IP \fIquark\fP 1i Specifies the quark for which the equivalent string is desired. .IP \fIquarks_return\fP 1i Returns the list of quarks. .ds Ql \ or quark list .IP \fIstring\fP 1i Specifies the string for which a quark\*(Ql is to be allocated. .SH DESCRIPTION The .ZN XrmUniqueQuark function allocates a quark that is guaranteed not to represent any string that is known to the resource manager. .LP These functions can be used to convert from string to quark representation. If the string is not in the Host Portable Character Encoding, the conversion is implementation-dependent. The string argument to .ZN XrmStringToQuark need not be permanently allocated storage. .ZN XrmPermStringToQuark is just like .ZN XrmStringToQuark , except that Xlib is permitted to assume the string argument is permanently allocated, and, hence, that it can be used as the value to be returned by .ZN XrmQuarkToString . .LP For any given quark, if .ZN XrmStringToQuark returns a non-NULL value, all future calls will return the same value (identical address). .LP These functions can be used to convert from quark representation to string. The string pointed to by the return value must not be modified or freed. The returned string is byte-for-byte equal to the original string passed to one of the string-to-quark routines. If no string exists for that quark, .ZN XrmQuarkToString returns NULL. For any given quark, if .ZN XrmQuarkToString returns a non-NULL value, all future calls will return the same value (identical address). .LP These functions can be used to convert from string to quark representation. If the string is not in the Host Portable Character Encoding, the conversion is implementation-dependent. The string argument to .ZN XrmStringToQuark need not be permanently allocated storage. .ZN XrmPermStringToQuark is just like .ZN XrmStringToQuark , except that Xlib is permitted to assume the string argument is permanently allocated, and, hence, that it can be used as the value to be returned by .ZN XrmQuarkToString . .LP For any given quark, if .ZN XrmStringToQuark returns a non-NULL value, all future calls will return the same value (identical address). .LP The .ZN XrmStringToQuarkList function converts the null-terminated string (generally a fully qualified name) to a list of quarks. The caller must allocate sufficient space for the quarks list before calling .ZN XrmStringToQuarkList . Note that the string must be in the valid ResourceName format (see section 15.1). If the string is not in the Host Portable Character Encoding, the conversion is implementation-dependent. .LP A binding list is a list of type .ZN XrmBindingList and indicates if components of name or class lists are bound tightly or loosely (that is, if wildcarding of intermediate components is specified). .LP .EX typedef enum {XrmBindTightly, XrmBindLoosely} XrmBinding, *XrmBindingList; .EE .LP .ZN XrmBindTightly indicates that a period separates the components, and .ZN XrmBindLoosely indicates that an asterisk separates the components. .LP The .ZN XrmStringToBindingQuarkList function converts the specified string to a binding list and a quark list. The caller must allocate sufficient space for the quarks list and the binding list before calling .ZN XrmStringToBindingQuarkList . If the string is not in the Host Portable Character Encoding the conversion is implementation-dependent. Component names in the list are separated by a period or an asterisk character. If the string does not start with period or asterisk, a period is assumed. For example, ``*a.b*c'' becomes: .LP .TS l l l. quarks a b c bindings loose tight loose .TE .SH "SEE ALSO" XrmGetResource(__libmansuffix__), XrmInitialize(__libmansuffix__), XrmMergeDatabases(__libmansuffix__), XrmPutResource(__libmansuffix__) .LP \fI\*(xL\fP libX11-1.6.3/man/XcmsCIELabQueryMaxC.man000064401431060000012000000132351247741723500200030ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XcmsCIELabQueryMax __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XcmsCIELabQueryMaxC, XcmsCIELabQueryMaxL, XcmsCIELabQueryMaxLC, XcmsCIELabQueryMinL \- obtain the CIE L*a*b* coordinates .SH SYNTAX .HP Status XcmsCIELabQueryMaxC\^(\^XcmsCCC \fIccc\fP\^, XcmsFloat \fIhue_angle\fP\^, XcmsFloat \fIL_star\fP\^, XcmsColor *\fIcolor_return\fP\^); .HP Status XcmsCIELabQueryMaxL\^(\^XcmsCCC \fIccc\fP\^, XcmsFloat \fIhue_angle\fP\^, XcmsFloat \fIchroma\fP\^, XcmsColor *\fIcolor_return\fP\^); .HP Status XcmsCIELabQueryMaxLC\^(\^XcmsCCC \fIccc\fP\^, XcmsFloat \fIhue_angle\fP\^, XcmsColor *\fIcolor_return\fP\^); .HP Status XcmsCIELabQueryMinL\^(\^XcmsCCC \fIccc\fP\^, XcmsFloat \fIhue_angle\fP\^, XcmsFloat \fIchroma\fP\^, XcmsColor *\fIcolor_return\fP\^); .SH ARGUMENTS .IP \fIccc\fP 1i Specifies the CCC. Note that the CCC's Client White Point and White Point Adjustment procedures are ignored. .ds Ch maximum lightness (MaxL) or minimum lightness (MinL) .IP \fIchroma\fP 1i Specifies the chroma at which to find \*(Ch. .ds Lc maximum chroma (MaxC and MaxLC), maximum lightness (MaxL), \ or minimum lightness (MinL) .ds lC hue angle and lightness (MaxC), hue angle and chroma (MaxL and MinL), \ or hue angle (MaxLC) .IP \fIcolor_return\fP 1i Returns the CIE L*a*b* coordinates of \*(Lc displayable by the screen for the given \*(lC. The white point associated with the returned color specification is the Screen White Point. The value returned in the pixel member is undefined. .ds Ha maximum chroma (MaxC and MaxLC), maximum lightness (MaxL), \ or minimum lightness (MinL) .IP \fIhue_angle\fP 1i Specifies the hue angle (in degrees) at which to find \*(Ha. .ds Ls maximum chroma (MaxC) .IP \fIL_star\fP 1i Specifies the lightness (L*) at which to find \*(Ls. .SH DESCRIPTION The .ZN XcmsCIELabQueryMaxC function, given a hue angle and lightness, finds the point of maximum chroma displayable by the screen. It returns this point in CIE L*a*b* coordinates. .LP The .ZN XcmsCIELabQueryMaxL function, given a hue angle and chroma, finds the point in CIE L*a*b* color space of maximum lightness (L*) displayable by the screen. It returns this point in CIE L*a*b* coordinates. An .ZN XcmsFailure return value usually indicates that the given chroma is beyond maximum for the given hue angle. .LP The .ZN XcmsCIELabQueryMaxLC function, given a hue angle, finds the point of maximum chroma displayable by the screen. It returns this point in CIE L*a*b* coordinates. .LP The .ZN XcmsCIELabQueryMinL function, given a hue angle and chroma, finds the point of minimum lightness (L*) displayable by the screen. It returns this point in CIE L*a*b* coordinates. An .ZN XcmsFailure return value usually indicates that the given chroma is beyond maximum for the given hue angle. .SH "SEE ALSO" XcmsCIELuvQueryMaxC(__libmansuffix__), XcmsTekHVCQueryMaxC(__libmansuffix__), XcmsQueryBlack(__libmansuffix__) .br \fI\*(xL\fP mplied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0libX11-1.6.3/man/XcmsQueryColor.man000064401431060000012000000154761247741723500173020ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XcmsQueryColor __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XcmsQueryColor, XcmsQueryColors, XcmsLookupColor \- obtain color values .SH SYNTAX .HP Status XcmsQueryColor\^(\^Display *\fIdisplay\fP\^, Colormap \fIcolormap\fP\^, XcmsColor *\fIcolor_in_out\fP\^, XcmsColorFormat \fIresult_format\fP\^); .HP Status XcmsQueryColors\^(\^Display *\fIdisplay\fP\^, Colormap \fIcolormap\fP\^, XcmsColor \fIcolors_in_out\fP\^[\^]\^, unsigned int \fIncolors\fP\^, XcmsColorFormat \fIresult_format\fP\^); .HP Status XcmsLookupColor\^(\^Display *\fIdisplay\fP\^, Colormap \fIcolormap\fP\^, char *\fIcolor_string\fP\^, XcmsColor *\fIcolor_exact_return\fP\^, XcmsColor *\fIcolor_screen_return\fP\^, XcmsColorFormat \fIresult_format\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIcolormap\fP 1i Specifies the colormap. .IP \fIcolor_exact_return\fP 1i Returns the color specification parsed from the color string or parsed from the corresponding string found in a color-name database. .IP \fIcolor_in_out\fP 1i Specifies the pixel member that indicates the color cell to query. The color specification stored for the color cell is returned in this .ZN XcmsColor structure. .IP \fIcolor_screen_return\fP 1i Returns the color that can be reproduced on the screen. .ds St .IP \fIcolor_string\fP 1i Specifies the color string\*(St. .IP \fIresult_format\fP 1i Specifies the color format for the returned color specifications (color_screen_return and color_exact_return arguments). If the format is .ZN XcmsUndefinedFormat and the color string contains a numerical color specification, the specification is returned in the format used in that numerical color specification. If the format is .ZN XcmsUndefinedFormat and the color string contains a color name, the specification is returned in the format used to store the color in the database. .IP \fIncolors\fP 1i Specifies the number of .ZN XcmsColor structures in the color-specification array. .SH DESCRIPTION The .ZN XcmsQueryColor function obtains the RGB value for the pixel value in the pixel member of the specified .ZN XcmsColor structure and then converts the value to the target format as specified by the result_format argument. If the pixel is not a valid index in the specified colormap, a .ZN BadValue error results. The .ZN XcmsQueryColors function obtains the RGB values for pixel values in the pixel members of .ZN XcmsColor structures and then converts the values to the target format as specified by the result_format argument. If a pixel is not a valid index into the specified colormap, a .ZN BadValue error results. If more than one pixel is in error, the one that gets reported is arbitrary. .LP .ZN XcmsQueryColor and .ZN XcmsQueryColors can generate .ZN BadColor and .ZN BadValue errors. .LP The .ZN XcmsLookupColor function looks up the string name of a color with respect to the screen associated with the specified colormap. It returns both the exact color values and the closest values provided by the screen with respect to the visual type of the specified colormap. The values are returned in the format specified by result_format. If the color name is not in the Host Portable Character Encoding, the result is implementation-dependent. Use of uppercase or lowercase does not matter. .ZN XcmsLookupColor returns .ZN XcmsSuccess or .ZN XcmsSuccessWithCompression if the name is resolved; otherwise, it returns .ZN XcmsFailure . If .ZN XcmsSuccessWithCompression is returned, the color specification returned in color_screen_return is the result of gamut compression. .SH DIAGNOSTICS .TP 1i .ZN BadColor A value for a Colormap argument does not name a defined Colormap. .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .SH "SEE ALSO" XcmsAllocColor(__libmansuffix__), XcmsStoreColor(__libmansuffix__), XQueryColor(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/Xutf8DrawImageString.man000064401431060000012000000000741247741723500203150ustar00alancstaff00002660200006.so man__libmansuffix__/XmbDrawImageString.__libmansuffix__ libX11-1.6.3/man/XSetForeground.man000064401431060000012000000000631247741723500172430ustar00alancstaff00002660200006.so man__libmansuffix__/XSetState.__libmansuffix__ libX11-1.6.3/man/XDirectionalDependentDrawing.man000064401431060000012000000000711247741723500220540ustar00alancstaff00002660200006.so man__libmansuffix__/XFontsOfFontSet.__libmansuffix__ libX11-1.6.3/man/XHostAddress.man000064401431060000012000000000621247741723500166770ustar00alancstaff00002660200006.so man__libmansuffix__/XAddHost.__libmansuffix__ libX11-1.6.3/man/XcmsQueryRed.man000064401431060000012000000000701247741723500167160ustar00alancstaff00002660200006.so man__libmansuffix__/XcmsQueryBlack.__libmansuffix__ libX11-1.6.3/man/XConvertCase.man000064401431060000012000000000711247741723500166700ustar00alancstaff00002660200006.so man__libmansuffix__/XStringToKeysym.__libmansuffix__ libX11-1.6.3/man/XChangePointerControl.man000064401431060000012000000125601247741723500205510ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XChangePointerControl __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XChangePointerControl, XGetPointerControl \- control pointer .SH SYNTAX .HP int XChangePointerControl\^(\^Display *\fIdisplay\fP\^, Bool \fIdo_accel\fP\^, Bool \fIdo_threshold\fP\^, int \fIaccel_numerator\fP\^, int \fIaccel_denominator\fP\^, int \fIthreshold\fP\^); .HP int XGetPointerControl\^(\^Display *\fIdisplay\fP\^, int *\fIaccel_numerator_return\fP\^, int *\fIaccel_denominator_return\fP\^, int *\fIthreshold_return\fP\^); .SH ARGUMENTS .IP \fIaccel_denominator\fP 1i Specifies the denominator for the acceleration multiplier. .IP \fIaccel_denominator_return\fP 1i Returns the denominator for the acceleration multiplier. .IP \fIaccel_numerator\fP 1i Specifies the numerator for the acceleration multiplier. .IP \fIaccel_numerator_return\fP 1i Returns the numerator for the acceleration multiplier. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIdo_accel\fP 1i Specifies a Boolean value that controls whether the values for the accel_numerator or accel_denominator are used. .IP \fIdo_threshold\fP 1i Specifies a Boolean value that controls whether the value for the threshold is used. .IP \fIthreshold\fP 1i Specifies the acceleration threshold. .IP \fIthreshold_return\fP 1i Returns the acceleration threshold. .SH DESCRIPTION The .ZN XChangePointerControl function defines how the pointing device moves. The acceleration, expressed as a fraction, is a multiplier for movement. For example, specifying 3/1 means the pointer moves three times as fast as normal. The fraction may be rounded arbitrarily by the X server. Acceleration only takes effect if the pointer moves more than threshold pixels at once and only applies to the amount beyond the value in the threshold argument. Setting a value to \-1 restores the default. The values of the do_accel and do_threshold arguments must be .ZN True for the pointer values to be set, or the parameters are unchanged. Negative values (other than \-1) generate a .ZN BadValue error, as does a zero value for the accel_denominator argument. .LP .ZN XChangePointerControl can generate a .ZN BadValue error. .LP The .ZN XGetPointerControl function returns the pointer's current acceleration multiplier and acceleration threshold. .SH DIAGNOSTICS .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .SH "SEE ALSO" \fI\*(xL\fP d Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" DigilibX11-1.6.3/man/XFreeFontInfo.man000064401431060000012000000000641247741723500170020ustar00alancstaff00002660200006.so man__libmansuffix__/XListFonts.__libmansuffix__ libX11-1.6.3/man/XFontProp.man000064401431060000012000000000631247741723500162240ustar00alancstaff00002660200006.so man__libmansuffix__/XLoadFont.__libmansuffix__ libX11-1.6.3/man/XResetScreenSaver.man000064401431060000012000000000711247741723500176770ustar00alancstaff00002660200006.so man__libmansuffix__/XSetScreenSaver.__libmansuffix__ libX11-1.6.3/man/XSetTile.man000064401431060000012000000121611247741723500160300ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XSetTile __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XSetTile, XSetStipple, XSetTSOrigin \- GC convenience routines .SH SYNTAX .HP int XSetTile\^(\^Display *\fIdisplay\fP\^, GC \fIgc\fP\^, Pixmap \fItile\fP\^); .HP int XSetStipple\^(\^Display *\fIdisplay\fP\^, GC \fIgc\fP\^, Pixmap \fIstipple\fP\^); .HP int XSetTSOrigin\^(\^Display *\fIdisplay\fP\^, GC \fIgc\fP\^, int \fIts_x_origin\fP\^, int \fIts_y_origin\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIgc\fP 1i Specifies the GC. .IP \fIstipple\fP 1i Specifies the stipple you want to set for the specified GC. .IP \fItile\fP 1i Specifies the fill tile you want to set for the specified GC. .IP \fIts_x_origin\fP 1i .br .ns .IP \fIts_y_origin\fP 1i Specify the x and y coordinates of the tile and stipple origin. .SH DESCRIPTION The .ZN XSetTile function sets the fill tile in the specified GC. The tile and GC must have the same depth, or a .ZN BadMatch error results. .LP .ZN XSetTile can generate .ZN BadAlloc , .ZN BadGC , .ZN BadMatch , and .ZN BadPixmap errors. .LP The .ZN XSetStipple function sets the stipple in the specified GC. The stipple must have a depth of one, or a .ZN BadMatch error results. .LP .ZN XSetStipple can generate .ZN BadAlloc , .ZN BadGC , .ZN BadMatch , and .ZN BadPixmap errors. .LP The .ZN XSetTSOrigin function sets the tile/stipple origin in the specified GC. When graphics requests call for tiling or stippling, the parent's origin will be interpreted relative to whatever destination drawable is specified in the graphics request. .LP .ZN XSetTSOrigin can generate .ZN BadAlloc and .ZN BadGC errors. .SH DIAGNOSTICS .TP 1i .ZN BadAlloc The server failed to allocate the requested resource or server memory. .TP 1i .ZN BadGC A value for a GContext argument does not name a defined GContext. .TP 1i .ZN BadMatch Some argument or pair of arguments has the correct type and range but fails to match in some other way required by the request. .TP 1i .ZN BadPixmap A value for a Pixmap argument does not name a defined Pixmap. .SH "SEE ALSO" XCreateGC(__libmansuffix__), XQueryBestSize(__libmansuffix__), XSetArcMode(__libmansuffix__), XSetClipOrigin(__libmansuffix__), XSetFillStyle(__libmansuffix__), XSetFont(__libmansuffix__), XSetLineAttributes(__libmansuffix__), XSetState(__libmansuffix__) .br \fI\*(xL\fP uded .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 libX11-1.6.3/man/Xutf8LookupString.man000064401431060000012000000000711247741723500177230ustar00alancstaff00002660200006.so man__libmansuffix__/XmbLookupString.__libmansuffix__ libX11-1.6.3/man/XFreePixmap.man000064401431060000012000000000671247741723500165210ustar00alancstaff00002660200006.so man__libmansuffix__/XCreatePixmap.__libmansuffix__ libX11-1.6.3/man/XEqualRegion.man000064401431060000012000000000661247741723500166730ustar00alancstaff00002660200006.so man__libmansuffix__/XEmptyRegion.__libmansuffix__ libX11-1.6.3/man/XCreateSimpleWindow.man000064401431060000012000000000671247741723500202260ustar00alancstaff00002660200006.so man__libmansuffix__/XCreateWindow.__libmansuffix__ libX11-1.6.3/man/XrmLocaleOfDatabase.man000064401431060000012000000000741247741723500201270ustar00alancstaff00002660200006.so man__libmansuffix__/XrmGetFileDatabase.__libmansuffix__ libX11-1.6.3/man/XGetInputFocus.man000064401431060000012000000000701247741723500172120ustar00alancstaff00002660200006.so man__libmansuffix__/XSetInputFocus.__libmansuffix__ libX11-1.6.3/man/XSetOMValues.man000064401431060000012000000000611247741723500166220ustar00alancstaff00002660200006.so man__libmansuffix__/XOpenOM.__libmansuffix__ libX11-1.6.3/man/XWindowChanges.man000064401431060000012000000000721247741723500172150ustar00alancstaff00002660200006.so man__libmansuffix__/XConfigureWindow.__libmansuffix__ libX11-1.6.3/man/XWindowAttributes.man000064401431060000012000000000761247741723500177770ustar00alancstaff00002660200006.so man__libmansuffix__/XGetWindowAttributes.__libmansuffix__ libX11-1.6.3/man/XSetSelectionOwner.man000064401431060000012000000144341247741723500201000ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XSetSelectionOwner __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XSetSelectionOwner, XGetSelectionOwner, XConvertSelection \- manipulate window selection .SH SYNTAX .HP int XSetSelectionOwner\^(\^Display *\fIdisplay\fP\^, Atom \fIselection\fP\^, Window \fIowner\fP\^, Time \fItime\fP\^); .HP Window XGetSelectionOwner\^(\^Display *\fIdisplay\fP\^, Atom \fIselection\fP\^); .HP int XConvertSelection\^(\^Display *\fIdisplay\fP\^, Atom \fIselection\fP\^, Atom \fItarget\fP\^, Atom \fIproperty\fP\^, Window \fIrequestor\fP\^, Time \fItime\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIowner\fP 1i Specifies the owner of the specified selection atom. You can pass a window or .ZN None . .IP \fIproperty\fP 1i Specifies the property name. You also can pass .ZN None . .IP \fIrequestor\fP 1i Specifies the requestor. .IP \fIselection\fP 1i Specifies the selection atom. .IP \fItarget\fP 1i Specifies the target atom. .IP \fItime\fP 1i Specifies the time. You can pass either a timestamp or .ZN CurrentTime . .SH DESCRIPTION The .ZN XSetSelectionOwner function changes the owner and last-change time for the specified selection and has no effect if the specified time is earlier than the current last-change time of the specified selection or is later than the current X server time. Otherwise, the last-change time is set to the specified time, with .ZN CurrentTime replaced by the current server time. If the owner window is specified as .ZN None , then the owner of the selection becomes .ZN None (that is, no owner). Otherwise, the owner of the selection becomes the client executing the request. .LP If the new owner (whether a client or .ZN None ) is not the same as the current owner of the selection and the current owner is not .ZN None , the current owner is sent a .ZN SelectionClear event. If the client that is the owner of a selection is later terminated (that is, its connection is closed) or if the owner window it has specified in the request is later destroyed, the owner of the selection automatically reverts to .ZN None , but the last-change time is not affected. The selection atom is uninterpreted by the X server. .ZN XGetSelectionOwner returns the owner window, which is reported in .ZN SelectionRequest and .ZN SelectionClear events. Selections are global to the X server. .LP .ZN XSetSelectionOwner can generate .ZN BadAtom and .ZN BadWindow errors. .LP The .ZN XGetSelectionOwner function returns the window ID associated with the window that currently owns the specified selection. If no selection was specified, the function returns the constant .ZN None . If .ZN None is returned, there is no owner for the selection. .LP .ZN XGetSelectionOwner can generate a .ZN BadAtom error. .LP .ZN XConvertSelection requests that the specified selection be converted to the specified target type: .IP \(bu 5 If the specified selection has an owner, the X server sends a .ZN SelectionRequest event to that owner. .IP \(bu 5 If no owner for the specified selection exists, the X server generates a .ZN SelectionNotify event to the requestor with property .ZN None . .LP The arguments are passed on unchanged in either of the events. There are two predefined selection atoms: PRIMARY and SECONDARY. .LP .ZN XConvertSelection can generate .ZN BadAtom and .ZN BadWindow errors. .SH DIAGNOSTICS .TP 1i .ZN BadAtom A value for an Atom argument does not name a defined Atom. .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" \fI\*(xL\fP libX11-1.6.3/man/XcmsAllocColor.man000064401431060000012000000147341247741723500172230ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XcmsAllocColor __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XcmsAllocColor, XcmsAllocNamedColor \- allocate colors .SH SYNTAX .HP Status XcmsAllocColor\^(\^Display *\fIdisplay\fP\^, Colormap \fIcolormap\fP\^, XcmsColor *\fIcolor_in_out\fP\^, XcmsColorFormat \fIresult_format\fP\^); .HP Status XcmsAllocNamedColor\^(\^Display *\fIdisplay\fP\^, Colormap \fIcolormap\fP\^, char *\fIcolor_string\fP\^, XcmsColor *\fIcolor_screen_return\fP\^, XcmsColor *\fIcolor_exact_return\fP\^, XcmsColorFormat \fIresult_format\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIcolormap\fP 1i Specifies the colormap. .IP \fIcolor_exact_return\fP 1i Returns the color specification parsed from the color string or parsed from the corresponding string found in a color-name database. .IP \fIcolor_in_out\fP 1i Specifies the color to allocate and returns the pixel and color that is actually used in the colormap. .IP \fIcolor_screen_return\fP 1i Returns the pixel value of the color cell and color specification that actually is stored for that cell. .ds St \ whose color definition structure is to be returned .IP \fIcolor_string\fP 1i Specifies the color string\*(St. .IP \fIresult_format\fP 1i Specifies the color format for the returned color specification. .SH DESCRIPTION The .ZN XcmsAllocColor function is similar to .ZN XAllocColor except the color can be specified in any format. The .ZN XcmsAllocColor function ultimately calls .ZN XAllocColor to allocate a read-only color cell (colormap entry) with the specified color. .ZN XcmsAllocColor first converts the color specified to an RGB value and then passes this to .ZN XAllocColor . .ZN XcmsAllocColor returns the pixel value of the color cell and the color specification actually allocated. This returned color specification is the result of converting the RGB value returned by .ZN XAllocColor into the format specified with the result_format argument. If there is no interest in a returned color specification, unnecessary computation can be bypassed if result_format is set to .ZN XcmsRGBFormat . The corresponding colormap cell is read-only. If this routine returns .ZN XcmsFailure , the color_in_out color specification is left unchanged. .LP .ZN XcmsAllocColor can generate a .ZN BadColor errors. .LP The .ZN XcmsAllocNamedColor function is similar to .ZN XAllocNamedColor except that the color returned can be in any format specified. This function ultimately calls .ZN XAllocColor to allocate a read-only color cell with the color specified by a color string. The color string is parsed into an .ZN XcmsColor structure (see .ZN XcmsLookupColor ), converted to an RGB value, and finally passed to .ZN XAllocColor . If the color name is not in the Host Portable Character Encoding, the result is implementation-dependent. Use of uppercase or lowercase does not matter. .LP This function returns both the color specification as a result of parsing (exact specification) and the actual color specification stored (screen specification). This screen specification is the result of converting the RGB value returned by .ZN XAllocColor into the format specified in result_format. If there is no interest in a returned color specification, unnecessary computation can be bypassed if result_format is set to .ZN XcmsRGBFormat . If color_screen_return and color_exact_return point to the same structure, the pixel field will be set correctly, but the color values are undefined. .LP .LP .ZN XcmsAllocNamedColor can generate a .ZN BadColor errors. .SH DIAGNOSTICS .TP 1i .ZN BadColor A value for a Colormap argument does not name a defined Colormap. .SH "SEE ALSO" XcmsQueryColor(__libmansuffix__), XcmsStoreColor(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XStoreName.man000064401431060000012000000000641247741723500163530ustar00alancstaff00002660200006.so man__libmansuffix__/XSetWMName.__libmansuffix__ libX11-1.6.3/man/XGetWMHints.man000064401431060000012000000000671247741723500164520ustar00alancstaff00002660200006.so man__libmansuffix__/XAllocWMHints.__libmansuffix__ libX11-1.6.3/man/XSetArcMode.man000064401431060000012000000120761247741723500164520ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XSetArcMode __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XSetArcMode, XSetSubwindowMode, XSetGraphicsExposure \- GC convenience routines .SH SYNTAX .HP int XSetArcMode\^(\^Display *\fIdisplay\fP\^, GC \fIgc\fP\^, int \fIarc_mode\fP\^); .HP int XSetSubwindowMode\^(\^Display *\fIdisplay\fP\^, GC \fIgc\fP\^, int \fIsubwindow_mode\fP\^); .HP int XSetGraphicsExposures\^(\^Display *\fIdisplay\fP\^, GC \fIgc\fP\^, Bool \fIgraphics_exposures\fP\^); .SH ARGUMENTS .IP \fIarc_mode\fP 1i Specifies the arc mode. You can pass .ZN ArcChord or .ZN ArcPieSlice . .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIgc\fP 1i Specifies the GC. .IP \fIgraphics_exposures\fP 1i Specifies a Boolean value that indicates whether you want .ZN GraphicsExpose and .ZN NoExpose events to be reported when calling .ZN XCopyArea and .ZN XCopyPlane with this GC. .IP \fIsubwindow_mode\fP 1i Specifies the subwindow mode. You can pass .ZN ClipByChildren or .ZN IncludeInferiors . .SH DESCRIPTION The .ZN XSetArcMode function sets the arc mode in the specified GC. .LP .ZN XSetArcMode can generate .ZN BadAlloc , .ZN BadGC , and .ZN BadValue errors. .LP The .ZN XSetSubwindowMode function sets the subwindow mode in the specified GC. .LP .ZN XSetSubwindowMode can generate .ZN BadAlloc , .ZN BadGC , and .ZN BadValue errors. .LP The .ZN XSetGraphicsExposures function sets the graphics-exposures flag in the specified GC. .LP .ZN XSetGraphicsExposures can generate .ZN BadAlloc , .ZN BadGC , and .ZN BadValue errors. .SH DIAGNOSTICS .TP 1i .ZN BadAlloc The server failed to allocate the requested resource or server memory. .TP 1i .ZN BadGC A value for a GContext argument does not name a defined GContext. .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .SH "SEE ALSO" XCopyArea(__libmansuffix__), XCreateGC(__libmansuffix__), XQueryBestSize(__libmansuffix__), XSetClipOrigin(__libmansuffix__), XSetFillStyle(__libmansuffix__), XSetFont(__libmansuffix__), XSetLineAttributes(__libmansuffix__), XSetState(__libmansuffix__), XSetTile(__libmansuffix__) .br \fI\*(xL\fP ion to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" DigilibX11-1.6.3/man/XLoadFont.man000064401431060000012000000340711247741723500161710ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .de EX .sp .nf .ft CW .. .de EE .ft R .fi .sp .. .TH XLoadFont __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XLoadFont, XQueryFont, XLoadQueryFont, XFreeFont, XGetFontProperty, XUnloadFont, XCharStruct, XFontProp, XChar2b, XFontStruct \- load or unload fonts and font metric structures .SH SYNTAX .HP Font XLoadFont\^(\^Display *\fIdisplay\fP\^, char *\fIname\fP\^); .HP XFontStruct *XQueryFont\^(\^Display *\fIdisplay\fP\^, XID \fIfont_ID\fP\^); .HP XFontStruct *XLoadQueryFont\^(\^Display *\fIdisplay\fP\^, char *\fIname\fP\^); .HP int XFreeFont\^(\^Display *\fIdisplay\fP\^, XFontStruct *\fIfont_struct\fP\^); .HP Bool XGetFontProperty\^(\^XFontStruct *\fIfont_struct\fP\^, Atom \fIatom\fP\^, unsigned long *\fIvalue_return\fP\^); .HP int XUnloadFont\^(\^Display *\fIdisplay\fP\^, Font \fIfont\fP\^); .SH ARGUMENTS .IP \fIatom\fP 1i Specifies the atom for the property name you want returned. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIfont\fP 1i Specifies the font. .IP \fIfont_ID\fP 1i Specifies the font ID or the .ZN GContext ID. .IP \fIfont_struct\fP 1i Specifies the storage associated with the font. .IP \fIgc\fP 1i Specifies the GC. .IP \fIname\fP 1i Specifies the name of the font, which is a null-terminated string. .IP \fIvalue_return\fP 1i Returns the value of the font property. .SH DESCRIPTION The .ZN XLoadFont function loads the specified font and returns its associated font ID. If the font name is not in the Host Portable Character Encoding, the result is implementation-dependent. Use of uppercase or lowercase does not matter. When the characters ``?'' and ``*'' are used in a font name, a pattern match is performed and any matching font is used. In the pattern, the ``?'' character will match any single character, and the ``*'' character will match any number of characters. A structured format for font names is specified in the X Consortium standard \fIX Logical Font Description Conventions\fP. If .ZN XLoadFont was unsuccessful at loading the specified font, a .ZN BadName error results. Fonts are not associated with a particular screen and can be stored as a component of any GC. When the font is no longer needed, call .ZN XUnloadFont . .LP .ZN XLoadFont can generate .ZN BadAlloc and .ZN BadName errors. .LP The .ZN XQueryFont function returns a pointer to the .ZN XFontStruct structure, which contains information associated with the font. You can query a font or the font stored in a GC. The font ID stored in the .ZN XFontStruct structure will be the .ZN GContext ID, and you need to be careful when using this ID in other functions (see .ZN XGContextFromGC ). If the font does not exist, .ZN XQueryFont returns NULL. To free this data, use .ZN XFreeFontInfo . .LP .ZN XLoadQueryFont can generate a .ZN BadAlloc error. .LP The .ZN XLoadQueryFont function provides the most common way for accessing a font. .ZN XLoadQueryFont both opens (loads) the specified font and returns a pointer to the appropriate .ZN XFontStruct structure. If the font name is not in the Host Portable Character Encoding, the result is implementation-dependent. If the font does not exist, .ZN XLoadQueryFont returns NULL. .LP The .ZN XFreeFont function deletes the association between the font resource ID and the specified font and frees the .ZN XFontStruct structure. The font itself will be freed when no other resource references it. The data and the font should not be referenced again. .LP .ZN XFreeFont can generate a .ZN BadFont error. .LP Given the atom for that property, the .ZN XGetFontProperty function returns the value of the specified font property. .ZN XGetFontProperty also returns .ZN False if the property was not defined or .ZN True if it was defined. A set of predefined atoms exists for font properties, which can be found in .hN X11/Xatom.h . This set contains the standard properties associated with a font. Although it is not guaranteed, it is likely that the predefined font properties will be present. .LP The .ZN XUnloadFont function deletes the association between the font resource ID and the specified font. The font itself will be freed when no other resource references it. The font should not be referenced again. .LP .ZN XUnloadFont can generate a .ZN BadFont error. .SH STRUCTURES The .ZN XFontStruct structure contains all of the information for the font and consists of the font-specific information as well as a pointer to an array of .ZN XCharStruct structures for the characters contained in the font. The .ZN XFontStruct , .ZN XFontProp , and .ZN XCharStruct structures contain: .LP .IN "XCharStruct" "" "@DEF@" .EX typedef struct { short lbearing; /\&* origin to left edge of raster */ short rbearing; /\&* origin to right edge of raster */ short width; /\&* advance to next char's origin */ short ascent; /\&* baseline to top edge of raster */ short descent; /\&* baseline to bottom edge of raster */ unsigned short attributes; /\&* per char flags (not predefined) */ } XCharStruct; .EE .LP .IN "XFontProp" "" "@DEF@" .EX typedef struct { Atom name; unsigned long card32; } XFontProp; .EE .LP .IN "XChar2b" "" "@DEF@" .EX typedef struct { /\&* normal 16 bit characters are two bytes */ unsigned char byte1; unsigned char byte2; } XChar2b; .EE .LP .IN "XFontStruct" "" "@DEF@" .EX typedef struct { XExtData *ext_data; /\&* hook for extension to hang data */ Font fid; /\&* Font id for this font */ unsigned direction; /\&* hint about the direction font is painted */ unsigned min_char_or_byte2; /\&* first character */ unsigned max_char_or_byte2; /\&* last character */ unsigned min_byte1; /\&* first row that exists */ unsigned max_byte1; /\&* last row that exists */ Bool all_chars_exist; /\&* flag if all characters have nonzero size */ unsigned default_char; /\&* char to print for undefined character */ int n_properties; /\&* how many properties there are */ XFontProp *properties; /\&* pointer to array of additional properties */ XCharStruct min_bounds; /\&* minimum bounds over all existing char */ XCharStruct max_bounds; /\&* maximum bounds over all existing char */ XCharStruct *per_char; /\&* first_char to last_char information */ int ascent; /\&* logical extent above baseline for spacing */ int descent; /\&* logical decent below baseline for spacing */ } XFontStruct; .EE .LP X supports single byte/character, two bytes/character matrix, and 16-bit character text operations. Note that any of these forms can be used with a font, but a single byte/character text request can only specify a single byte (that is, the first row of a 2-byte font). You should view 2-byte fonts as a two-dimensional matrix of defined characters: byte1 specifies the range of defined rows and byte2 defines the range of defined columns of the font. Single byte/character fonts have one row defined, and the byte2 range specified in the structure defines a range of characters. .LP The bounding box of a character is defined by the .ZN XCharStruct of that character. When characters are absent from a font, the default_char is used. When fonts have all characters of the same size, only the information in the .ZN XFontStruct min and max bounds are used. .LP The members of the .ZN XFontStruct have the following semantics: .IP \(bu 5 The direction member can be either .ZN FontLeftToRight or .ZN FontRightToLeft . It is just a hint as to whether most .ZN XCharStruct elements have a positive .Pn ( FontLeftToRight ) or a negative .Pn ( FontRightToLeft ) character width metric. The core protocol defines no support for vertical text. .IP \(bu 5 If the min_byte1 and max_byte1 members are both zero, min_char_or_byte2 specifies the linear character index corresponding to the first element of the per_char array, and max_char_or_byte2 specifies the linear character index of the last element. .IP If either min_byte1 or max_byte1 are nonzero, both min_char_or_byte2 and max_char_or_byte2 are less than 256, and the 2-byte character index values corresponding to the per_char array element N (counting from 0) are: .IP .EX byte1 = N/D + min_byte1 byte2 = N\\D + min_char_or_byte2 .EE where: .EX D = max_char_or_byte2 \- min_char_or_byte2 + 1 / = integer division \e\e = integer modulus .EE .IP \(bu 5 If the per_char pointer is NULL, all glyphs between the first and last character indexes inclusive have the same information, as given by both min_bounds and max_bounds. .IP \(bu 5 If all_chars_exist is .ZN True , all characters in the per_char array have nonzero bounding boxes. .IP \(bu 5 The default_char member specifies the character that will be used when an undefined or nonexistent character is printed. The default_char is a 16-bit character (not a 2-byte character). For a font using 2-byte matrix format, the default_char has byte1 in the most-significant byte and byte2 in the least significant byte. If the default_char itself specifies an undefined or nonexistent character, no printing is performed for an undefined or nonexistent character. .IP \(bu 5 The min_bounds and max_bounds members contain the most extreme values of each individual .ZN XCharStruct component over all elements of this array (and ignore nonexistent characters). The bounding box of the font (the smallest rectangle enclosing the shape obtained by superimposing all of the characters at the same origin [x,y]) has its upper-left coordinate at: .Ds [x + min_bounds.lbearing, y \- max_bounds.ascent] .De .IP Its width is: .Ds max_bounds.rbearing \- min_bounds.lbearing .De .IP Its height is: .Ds max_bounds.ascent + max_bounds.descent .De .IP \(bu 5 The ascent member is the logical extent of the font above the baseline that is used for determining line spacing. Specific characters may extend beyond this. .IP \(bu 5 The descent member is the logical extent of the font at or below the baseline that is used for determining line spacing. Specific characters may extend beyond this. .IP \(bu 5 If the baseline is at Y-coordinate y, the logical extent of the font is inclusive between the Y-coordinate values (y \- font.ascent) and (y + font.descent \- 1). Typically, the minimum interline spacing between rows of text is given by ascent + descent. .LP For a character origin at [x,y], the bounding box of a character (that is, the smallest rectangle that encloses the character's shape) described in terms of .ZN XCharStruct components is a rectangle with its upper-left corner at: .LP .Ds [x + lbearing, y \- ascent] .De .LP Its width is: .LP .Ds rbearing \- lbearing .De .LP Its height is: .LP .Ds ascent + descent .De .LP The origin for the next character is defined to be: .LP .Ds [x + width, y] .De .LP The lbearing member defines the extent of the left edge of the character ink from the origin. The rbearing member defines the extent of the right edge of the character ink from the origin. The ascent member defines the extent of the top edge of the character ink from the origin. The descent member defines the extent of the bottom edge of the character ink from the origin. The width member defines the logical width of the character. .SH DIAGNOSTICS .TP 1i .ZN BadAlloc The server failed to allocate the requested resource or server memory. .TP 1i .ZN BadFont A value for a Font or GContext argument does not name a defined Font. .TP 1i .ZN BadName A font or color of the specified name does not exist. .SH "SEE ALSO" XCreateGC(__libmansuffix__), XListFonts(__libmansuffix__), XSetFontPath(__libmansuffix__) .br \fI\*(xL\fP s set contains the standard properties associated with a font. Although it is not guaranteed, it is likely that the predefined font properties will be present. .LP The .ZN XUnloadFont function deletes the association between the font resource ID and the specified font. The font itself will be freed when no other resource references it. The font should not be referenced again. .LP .ZN XUnloadFont can generate a .ZN BadFont error. .SH STRUCTURES The .ZlibX11-1.6.3/man/DefaultColormapOfScreen.man000064401431060000012000000000741247741723500210350ustar00alancstaff00002660200006.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__ libX11-1.6.3/man/XrmSetDatabase.man000064401431060000012000000000741247741723500171760ustar00alancstaff00002660200006.so man__libmansuffix__/XrmGetFileDatabase.__libmansuffix__ libX11-1.6.3/man/XMapRaised.man000064401431060000012000000000641247741723500163230ustar00alancstaff00002660200006.so man__libmansuffix__/XMapWindow.__libmansuffix__ libX11-1.6.3/man/XSetIconName.man000064401431060000012000000000701247741723500166200ustar00alancstaff00002660200006.so man__libmansuffix__/XSetWMIconName.__libmansuffix__ libX11-1.6.3/man/XListInstalledColormaps.man000064401431060000012000000000721247741723500211100ustar00alancstaff00002660200006.so man__libmansuffix__/XInstallColormap.__libmansuffix__ libX11-1.6.3/man/XChangeKeyboardControl.man000064401431060000012000000250321247741723500206670ustar00alancstaff00002660200006'\" t .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 '\" t .TH XChangeKeyboardControl __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XChangeKeyboardControl, XGetKeyboardControl, XAutoRepeatOn, XAutoRepeatOff, XBell, XQueryKeymap, XKeyboardControl \- manipulate keyboard settings and keyboard control structure .SH SYNTAX .HP int XChangeKeyboardControl\^(\^Display *\fIdisplay\fP, unsigned long \fIvalue_mask\fP\^, XKeyboardControl *\fIvalues\fP\^); .HP int XGetKeyboardControl\^(\^Display *\fIdisplay\fP, XKeyboardState *\fIvalues_return\fP\^); .HP int XAutoRepeatOn\^(\^Display *\fIdisplay\fP\^); .HP int XAutoRepeatOff\^(\^Display *\fIdisplay\fP\^); .HP int XBell\^(\^Display *\fIdisplay\fP, int \fIpercent\fP\^); .HP int XQueryKeymap\^(\^Display *\fIdisplay\fP, char \fIkeys_return\fP[32]\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIkeys_return\fP 1i Returns an array of bytes that identifies which keys are pressed down. Each bit represents one key of the keyboard. .IP \fIpercent\fP 1i Specifies the volume for the bell, which can range from \-100 to 100 inclusive. .IP \fIvalue_mask\fP 1i Specifies which controls to change. This mask is the bitwise inclusive OR of the valid control mask bits. .IP \fIvalues\fP 1i Specifies one value for each bit set to 1 in the mask. .IP \fIvalues_return\fP 1i Returns the current keyboard controls in the specified .ZN XKeyboardState structure. .SH DESCRIPTION The .ZN XChangeKeyboardControl function controls the keyboard characteristics defined by the .ZN XKeyboardControl structure. The value_mask argument specifies which values are to be changed. .LP .ZN XChangeKeyboardControl can generate .ZN BadMatch and .ZN BadValue errors. .LP The .ZN XGetKeyboardControl function returns the current control values for the keyboard to the .ZN XKeyboardState structure. .LP The .ZN XAutoRepeatOn function turns on auto-repeat for the keyboard on the specified display. .LP The .ZN XAutoRepeatOff function turns off auto-repeat for the keyboard on the specified display. .LP The .ZN XBell function rings the bell on the keyboard on the specified display, if possible. The specified volume is relative to the base volume for the keyboard. If the value for the percent argument is not in the range \-100 to 100 inclusive, a .ZN BadValue error results. The volume at which the bell rings when the percent argument is nonnegative is: .IP base \- [(base * percent) / 100] + percent .LP The volume at which the bell rings when the percent argument is negative is: .IP base + [(base * percent) / 100] .LP To change the base volume of the bell, use .ZN XChangeKeyboardControl . .LP .ZN XBell can generate a .ZN BadValue error. .LP The .ZN XQueryKeymap function returns a bit vector for the logical state of the keyboard, where each bit set to 1 indicates that the corresponding key is currently pressed down. The vector is represented as 32 bytes. Byte N (from 0) contains the bits for keys 8N to 8N + 7 with the least significant bit in the byte representing key 8N. .LP Note that the logical state of a device (as seen by client applications) may lag the physical state if device event processing is frozen. .SH STRUCTURES The .ZN XKeyboardControl structure contains: .LP .LP /\&* Mask bits for ChangeKeyboardControl */ .TS lw(.5i) lw(2.5i) lw(.8i). T{ \&#define T} T{ .ZN KBKeyClickPercent T} T{ (1L<<0) T} T{ \&#define T} T{ .ZN KBBellPercent T} T{ (1L<<1) T} T{ \&#define T} T{ .ZN KBBellPitch T} T{ (1L<<2) T} T{ \&#define T} T{ .ZN KBBellDuration T} T{ (1L<<3) T} T{ \&#define T} T{ .ZN KBLed T} T{ (1L<<4) T} T{ \&#define T} T{ .ZN KBLedMode T} T{ (1L<<5) T} T{ \&#define T} T{ .ZN KBKey T} T{ (1L<<6) T} T{ \&#define T} T{ .ZN KBAutoRepeatMode T} T{ (1L<<7) T} .TE .IN "XKeyboardControl" "" "@DEF@" .Ds 0 /\&* Values */ typedef struct { int key_click_percent; int bell_percent; int bell_pitch; int bell_duration; int led; int led_mode; /\&* LedModeOn, LedModeOff */ int key; int auto_repeat_mode; /\&* AutoRepeatModeOff, AutoRepeatModeOn, AutoRepeatModeDefault */ } XKeyboardControl; .De .LP The key_click_percent member sets the volume for key clicks between 0 (off) and 100 (loud) inclusive, if possible. A setting of \-1 restores the default. Other negative values generate a .ZN BadValue error. .LP The bell_percent sets the base volume for the bell between 0 (off) and 100 (loud) inclusive, if possible. A setting of \-1 restores the default. Other negative values generate a .ZN BadValue error. The bell_pitch member sets the pitch (specified in Hz) of the bell, if possible. A setting of \-1 restores the default. Other negative values generate a .ZN BadValue error. The bell_duration member sets the duration of the bell specified in milliseconds, if possible. A setting of \-1 restores the default. Other negative values generate a .ZN BadValue error. .LP If both the led_mode and led members are specified, the state of that LED is changed, if possible. The led_mode member can be set to .ZN LedModeOn or .ZN LedModeOff . If only led_mode is specified, the state of all LEDs are changed, if possible. At most 32 LEDs numbered from one are supported. No standard interpretation of LEDs is defined. If led is specified without led_mode, a .ZN BadMatch error results. .LP If both the auto_repeat_mode and key members are specified, the auto_repeat_mode of that key is changed (according to .ZN AutoRepeatModeOn , .ZN AutoRepeatModeOff , or .ZN AutoRepeatModeDefault ), if possible. If only auto_repeat_mode is specified, the global auto_repeat_mode for the entire keyboard is changed, if possible, and does not affect the per-key settings. If a key is specified without an auto_repeat_mode, a .ZN BadMatch error results. Each key has an individual mode of whether or not it should auto-repeat and a default setting for the mode. In addition, there is a global mode of whether auto-repeat should be enabled or not and a default setting for that mode. When global mode is .ZN AutoRepeatModeOn , keys should obey their individual auto-repeat modes. When global mode is .ZN AutoRepeatModeOff , no keys should auto-repeat. An auto-repeating key generates alternating .ZN KeyPress and .ZN KeyRelease events. When a key is used as a modifier, it is desirable for the key not to auto-repeat, regardless of its auto-repeat setting. .LP The .ZN XKeyboardState structure contains: .LP .Ds 0 typedef struct { int key_click_percent; int bell_percent; unsigned int bell_pitch, bell_duration; unsigned long led_mask; int global_auto_repeat; char auto_repeats[32]; } XKeyboardState; .De .LP For the LEDs, the least significant bit of led_mask corresponds to LED one, and each bit set to 1 in led_mask indicates an LED that is lit. The global_auto_repeat member can be set to .ZN AutoRepeatModeOn or .ZN AutoRepeatModeOff . The auto_repeats member is a bit vector. Each bit set to 1 indicates that auto-repeat is enabled for the corresponding key. The vector is represented as 32 bytes. Byte N (from 0) contains the bits for keys 8N to 8N + 7 with the least significant bit in the byte representing key 8N. .SH DIAGNOSTICS .TP 1i .ZN BadMatch Some argument or pair of arguments has the correct type and range but fails to match in some other way required by the request. .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .SH "SEE ALSO" XChangeKeyboardMapping(__libmansuffix__), XkbChangeEnabledControls(__libmansuffix__), XkbBell(__libmansuffix__), XkbDeviceBell(__libmansuffix__), XkbGetMap(__libmansuffix__), XSetPointerMapping(__libmansuffix__) .br \fI\*(xL\fP settings and keyboard control structure .SH SYNTAX .HP int XChangeKeyboardControl\^(\^Display *\fIdisplay\fP, unsigned long \fIvalue_mask\fP\^, XKeyboardControl *\fIvalues\fP\^); .HP int XGetKeyboardControl\^(\^Display *\fIdisplay\fP, XKeyboardState *\fIvalues_return\fP\^); .HP int XAutoRepeatOn\^(\^Display *\fIdisplay\fP\^); .HP int XAutoRepeatOff\^(\^Display *\fIdisplay\fP\^); .HP int XBell\^(\^Display *\fIdisplay\fP, int \fIpercent\fP\^); .HP int XQueryKeymap\^(\^Display *libX11-1.6.3/man/XDefineCursor.man000064401431060000012000000102431247741723500170460ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XDefineCursor __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XDefineCursor, XUndefineCursor \- define cursors .SH SYNTAX .HP int XDefineCursor\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, Cursor \fIcursor\fP\^); .HP int XUndefineCursor\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^); .SH ARGUMENTS .IP \fIcursor\fP 1i Specifies the cursor that is to be displayed or .ZN None . .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIw\fP 1i Specifies the window. .SH DESCRIPTION If a cursor is set, it will be used when the pointer is in the window. If the cursor is .ZN None , it is equivalent to .ZN XUndefineCursor . .LP .ZN XDefineCursor can generate .ZN BadCursor and .ZN BadWindow errors. .LP The .ZN XUndefineCursor function undoes the effect of a previous .ZN XDefineCursor for this window. When the pointer is in the window, the parent's cursor will now be used. On the root window, the default cursor is restored. .LP .ZN XUndefineCursor can generate a .ZN BadWindow error. .SH DIAGNOSTICS .TP 1i .ZN BadAlloc The server failed to allocate the requested resource or server memory. .TP 1i .ZN BadCursor A value for a Cursor argument does not name a defined Cursor. .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XCreateFontCursor(__libmansuffix__), XRecolorCursor(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XGetErrorDatabaseText.man000064401431060000012000000000721247741723500205000ustar00alancstaff00002660200006.so man__libmansuffix__/XSetErrorHandler.__libmansuffix__ libX11-1.6.3/man/XFreeModifiermap.man000064401431060000012000000001001247741723500175030ustar00alancstaff00002660200006.so man__libmansuffix__/XChangeKeyboardMapping.__libmansuffix__ libX11-1.6.3/man/XSetFillStyle.man000064401431060000012000000111441247741723500170420ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XSetFillStyle __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XSetFillStyle, XSetFillRule \- GC convenience routines .SH SYNTAX .HP int XSetFillStyle\^(\^Display *\fIdisplay\fP\^, GC \fIgc\fP\^, int \fIfill_style\fP\^); .HP int XSetFillRule\^(\^Display *\fIdisplay\fP\^, GC \fIgc\fP\^, int \fIfill_rule\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIfill_rule\fP 1i Specifies the fill-rule you want to set for the specified GC. You can pass .ZN EvenOddRule or .ZN WindingRule . .IP \fIfill_style\fP 1i Specifies the fill-style you want to set for the specified GC. You can pass .ZN FillSolid , .ZN FillTiled , .ZN FillStippled , or .ZN FillOpaqueStippled . .IP \fIgc\fP 1i Specifies the GC. .SH DESCRIPTION The .ZN XSetFillStyle function sets the fill-style in the specified GC. .LP .ZN XSetFillStyle can generate .ZN BadAlloc , .ZN BadGC , and .ZN BadValue errors. .LP The .ZN XSetFillRule function sets the fill-rule in the specified GC. .LP .ZN XSetFillRule can generate .ZN BadAlloc , .ZN BadGC , and .ZN BadValue errors. .SH DIAGNOSTICS .TP 1i .ZN BadAlloc The server failed to allocate the requested resource or server memory. .TP 1i .ZN BadGC A value for a GContext argument does not name a defined GContext. .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .SH "SEE ALSO" XCreateGC(__libmansuffix__), XQueryBestSize(__libmansuffix__), XSetArcMode(__libmansuffix__), XSetClipOrigin(__libmansuffix__), XSetFont(__libmansuffix__), XSetLineAttributes(__libmansuffix__), XSetState(__libmansuffix__), XSetTile(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XSetOCValues.man000064401431060000012000000000631247741723500166120ustar00alancstaff00002660200006.so man__libmansuffix__/XCreateOC.__libmansuffix__ libX11-1.6.3/man/XUngrabKeyboard.man000064401431060000012000000000671247741723500173600ustar00alancstaff00002660200006.so man__libmansuffix__/XGrabKeyboard.__libmansuffix__ libX11-1.6.3/man/LastKnownRequestProcessed.man000064401431060000012000000000631247741723500214660ustar00alancstaff00002660200006.so man__libmansuffix__/AllPlanes.__libmansuffix__ libX11-1.6.3/man/XReparentEvent.man000064401431060000012000000133511247741723500172430ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XReparentEvent __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XReparentEvent \- ReparentNotify event structure .SH STRUCTURES The structure for .ZN ReparentNotify events contains: .LP .Ds 0 typedef struct { int type; /\&* ReparentNotify */ unsigned long serial; /\&* # of last request processed by server */ Bool send_event; /\&* true if this came from a SendEvent request */ Display *display; /\&* Display the event was read from */ Window event; Window window; Window parent; int x, y; Bool override_redirect; } XReparentEvent; .De .LP When you receive this event, the structure members are set as follows. .LP The type member is set to the event type constant name that uniquely identifies it. For example, when the X server reports a .ZN GraphicsExpose event to a client application, it sends an .ZN XGraphicsExposeEvent structure with the type member set to .ZN GraphicsExpose . The display member is set to a pointer to the display the event was read on. The send_event member is set to .ZN True if the event came from a .ZN SendEvent protocol request. The serial member is set from the serial number reported in the protocol but expanded from the 16-bit least-significant bits to a full 32-bit value. The window member is set to the window that is most useful to toolkit dispatchers. .LP The event member is set either to the reparented window or to the old or the new parent, depending on whether .ZN StructureNotify or .ZN SubstructureNotify was selected. The window member is set to the window that was reparented. The parent member is set to the new parent window. The x and y members are set to the reparented window's coordinates relative to the new parent window's origin and define the upper-left outer corner of the reparented window. The override_redirect member is set to the override-redirect attribute of the window specified by the window member. Window manager clients normally should ignore this window if the override_redirect member is .ZN True . .SH "SEE ALSO" XAnyEvent(__libmansuffix__), XButtonEvent(__libmansuffix__), XCreateWindowEvent(__libmansuffix__), XCirculateEvent(__libmansuffix__), XCirculateRequestEvent(__libmansuffix__), XColormapEvent(__libmansuffix__), XConfigureEvent(__libmansuffix__), XConfigureRequestEvent(__libmansuffix__), XCrossingEvent(__libmansuffix__), XDestroyWindowEvent(__libmansuffix__), XErrorEvent(__libmansuffix__), XExposeEvent(__libmansuffix__), XFocusChangeEvent(__libmansuffix__), XGraphicsExposeEvent(__libmansuffix__), XGravityEvent(__libmansuffix__), XKeymapEvent(__libmansuffix__), XMapEvent(__libmansuffix__), XMapRequestEvent(__libmansuffix__), XPropertyEvent(__libmansuffix__), XResizeRequestEvent(__libmansuffix__), XSelectionClearEvent(__libmansuffix__), XSelectionEvent(__libmansuffix__), XSelectionRequestEvent(__libmansuffix__), XUnmapEvent(__libmansuffix__), XVisibilityEvent(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XVisualIDFromVisual.man000064401431060000012000000000701247741723500201430ustar00alancstaff00002660200006.so man__libmansuffix__/XGetVisualInfo.__libmansuffix__ libX11-1.6.3/man/XmbTextListToTextProperty.man000064401431060000012000000275611247741723500215050ustar00alancstaff00002660200006'\" t .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" Copyright \(co 2000 The XFree86 Project, Inc. .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 '\" t .TH XmbTextListToTextProperty __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XmbTextListToTextProperty, XwcTextListToTextProperty, Xutf8TextListToTextProperty, XmbTextPropertyToTextList, XwcTextPropertyToTextList, Xutf8TextPropertyToTextList, XwcFreeStringList, XDefaultString \- convert text lists and text property structures .SH SYNTAX .HP int XmbTextListToTextProperty\^(\^Display *\fIdisplay\fP\^, char **\fIlist\fP\^, int \fIcount\fP\^, XICCEncodingStyle \fIstyle\fP\^, XTextProperty *\fItext_prop_return\fP\^); .HP int XwcTextListToTextProperty\^(\^Display *\fIdisplay\fP\^, wchar_t **\fIlist\fP\^, int \fIcount\fP\^, XICCEncodingStyle \fIstyle\fP\^, XTextProperty *\fItext_prop_return\fP\^); .HP int Xutf8TextListToTextProperty\^(\^Display *\fIdisplay\fP\^, char **\fIlist\fP\^, int \fIcount\fP\^, XICCEncodingStyle \fIstyle\fP\^, XTextProperty *\fItext_prop_return\fP\^); .HP int XmbTextPropertyToTextList\^(\^Display *\fIdisplay\fP\^, XTextProperty *\fItext_prop\fP\^, char ***\fIlist_return\fP\^, int *\fIcount_return\fP\^); .HP int XwcTextPropertyToTextList\^(\^Display *\fIdisplay\fP\^, XTextProperty *\fItext_prop\fP\^, wchar_t ***\fIlist_return\fP\^, int *\fIcount_return\fP\^); .HP int Xutf8TextPropertyToTextList\^(\^Display *\fIdisplay\fP\^, XTextProperty *\fItext_prop\fP\^, char ***\fIlist_return\fP\^, int *\fIcount_return\fP\^); .HP void XwcFreeStringList\^(\^wchar_t **\fIlist\fP\^); .HP char *XDefaultString\^(void) .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIlist\fP 1i Specifies a list of null-terminated character strings. .IP \fIcount\fP 1i Specifies the number of strings specified. .IP \fIstyle\fP 1i Specifies the manner in which the property is encoded. .IP \fItext_prop_return\fP 1i Returns the .ZN XTextProperty structure. .IP \fItext_prop\fP 1i Specifies the .ZN XTextProperty structure to be used. .IP \fIlist_return\fP 1i Returns a list of null-terminated character strings. .ds Cn strings .IP \fIcount_return\fP 1i Returns the number of \*(Cn. .IP \fIlist\fP 1i Specifies the list of strings to be freed. .SH DESCRIPTION The .ZN XmbTextListToTextProperty , .ZN XwcTextListToTextProperty and .ZN Xutf8TextListToTextProperty functions set the specified .ZN XTextProperty value to a set of null-separated elements representing the concatenation of the specified list of null-terminated text strings. The input text strings must be given in the current locale encoding (for .ZN XmbTextListToTextProperty and .ZN XwcTextListToTextProperty ), or in UTF-8 encoding (for .ZN Xutf8TextListToTextProperty ). .LP The functions set the encoding field of text_prop_return to an .ZN Atom for the specified display naming the encoding determined by the specified style and convert the specified text list to this encoding for storage in the text_prop_return value field. If the style .ZN XStringStyle or .ZN XCompoundTextStyle is specified, this encoding is ``STRING'' or ``COMPOUND_TEXT'', respectively. If the style .ZN XUTF8StringStyle is specified, this encoding is ``UTF8_STRING''. (This is an extension introduced by The XFree86 Project, Inc. in their 4.0.2 release. Its presence is indicated by the macro .ZN X_HAVE_UTF8_STRING .) If the style .ZN XTextStyle is specified, this encoding is the encoding of the current locale. If the style .ZN XStdICCTextStyle is specified, this encoding is ``STRING'' if the text is fully convertible to STRING, else ``COMPOUND_TEXT''. A final terminating null byte is stored at the end of the value field of text_prop_return but is not included in the nitems member. .LP If insufficient memory is available for the new value string, the functions return .ZN XNoMemory . If the current locale is not supported, the functions return .ZN XLocaleNotSupported . In both of these error cases, the functions do not set text_prop_return. .LP To determine if the functions are guaranteed not to return .ZN XLocaleNotSupported , use .ZN XSupportsLocale . .LP If the supplied text is not fully convertible to the specified encoding, the functions return the number of unconvertible characters. Each unconvertible character is converted to an implementation-defined and encoding-specific default string. Otherwise, the functions return .ZN Success . Note that full convertibility to all styles except .ZN XStringStyle is guaranteed. .LP To free the storage for the value field, use .ZN XFree . .LP The .ZN XmbTextPropertyToTextList , .ZN XwcTextPropertyToTextList and .ZN Xutf8TextPropertyToTextList functions return a list of text strings representing the null-separated elements of the specified .ZN XTextProperty structure. The returned strings are encoded using the current locale encoding (for .ZN XmbTextPropertyToTextList and .ZN XwcTextPropertyToTextList ) or in UTF-8 (for .ZN Xutf8TextPropertyToTextList ). The data in text_prop must be format 8. .LP Multiple elements of the property (for example, the strings in a disjoint text selection) are separated by a null byte. The contents of the property are not required to be null-terminated; any terminating null should not be included in text_prop.nitems. .LP If insufficient memory is available for the list and its elements, .ZN XmbTextPropertyToTextList , .ZN XwcTextPropertyToTextList and .ZN Xutf8TextPropertyToTextList return .ZN XNoMemory . If the current locale is not supported, the functions return .ZN XLocaleNotSupported . Otherwise, if the encoding field of text_prop is not convertible to the encoding of the current locale, the functions return .ZN XConverterNotFound . For supported locales, existence of a converter from COMPOUND_TEXT, STRING, UTF8_STRING or the encoding of the current locale is guaranteed if .ZN XSupportsLocale returns .ZN True for the current locale (but the actual text may contain unconvertible characters). Conversion of other encodings is implementation-dependent. In all of these error cases, the functions do not set any return values. .LP Otherwise, .ZN XmbTextPropertyToTextList , .ZN XwcTextPropertyToTextList and .ZN Xutf8TextPropertyToTextList return the list of null-terminated text strings to list_return and the number of text strings to count_return. .LP If the value field of text_prop is not fully convertible to the encoding of the current locale, the functions return the number of unconvertible characters. Each unconvertible character is converted to a string in the current locale that is specific to the current locale. To obtain the value of this string, use .ZN XDefaultString . Otherwise, .ZN XmbTextPropertyToTextList , .ZN XwcTextPropertyToTextList and .ZN Xutf8TextPropertyToTextList return .ZN Success . .LP To free the storage for the list and its contents returned by .ZN XmbTextPropertyToTextList or .ZN Xutf8TextPropertyToTextList , use .ZN XFreeStringList . To free the storage for the list and its contents returned by .ZN XwcTextPropertyToTextList , use .ZN XwcFreeStringList . .LP The .ZN XwcFreeStringList function frees memory allocated by .ZN XwcTextPropertyToTextList . .LP The .ZN XDefaultString function returns the default string used by Xlib for text conversion (for example, in .ZN XmbTextPropertyToTextList ). The default string is the string in the current locale that is output when an unconvertible character is found during text conversion. If the string returned by .ZN XDefaultString is the empty string ("\^"), no character is output in the converted text. .ZN XDefaultString does not return NULL. .LP The string returned by .ZN XDefaultString is independent of the default string for text drawing; see .ZN XCreateFontSet to obtain the default string for an .ZN XFontSet . .LP The behavior when an invalid codepoint is supplied to any Xlib function is undefined. .LP The returned string is null-terminated. It is owned by Xlib and should not be modified or freed by the client. It may be freed after the current locale is changed. Until freed, it will not be modified by Xlib. .LP The functions .ZN Xutf8TextListToTextProperty and .ZN Xutf8TextPropertyToTextList are extensions introduced by The XFree86 Project, Inc. in their 4.0.2 release. Their presence is indicated by the macro .ZN X_HAVE_UTF8_STRING . .SH STRUCTURES The .ZN XTextProperty structure contains: .LP .Ds 0 typedef struct { unsigned char *value; /\&* property data */ Atom encoding; /\&* type of property */ int format; /\&* 8, 16, or 32 */ unsigned long nitems; /\&* number of items in value */ } XTextProperty; .De .LP The .ZN XICCEncodingStyle structure contains: .LP .TS lw(.5i) lw(2i) lw(2.5i). T{ \&#define T} T{ .ZN XNoMemory T} T{ \-1 T} T{ \&#define T} T{ .ZN XLocaleNotSupported T} T{ \-2 T} T{ \&#define T} T{ .ZN XConverterNotFound T} T{ \-3 T} .TE .Ds 0 typedef enum { XStringStyle, /\&* STRING */ XCompoundTextStyle, /\&* COMPOUND_TEXT */ XTextStyle, /\&* text in owner's encoding (current locale) */ XStdICCTextStyle, /\&* STRING, else COMPOUND_TEXT */ XUTF8StringStyle /\&* UTF8_STRING */ } XICCEncodingStyle; .De .SH "SEE ALSO" XSetTextProperty(__libmansuffix__), XStringListToTextProperty(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XCopyArea.man000064401431060000012000000172141247741723500161660ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XCopyArea __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XCopyArea, XCopyPlane \- copy areas .SH SYNTAX .HP int XCopyArea\^(\^Display *\fIdisplay\fP\^, Drawable \fIsrc\fP\^, Drawable \fIdest\fP\^, GC \fIgc\fP\^, int \fIsrc_x\fP\^, int \fIsrc_y\fP\^, unsigned int \fIwidth\fP\^, unsigned \fIheight\fP\^, int \fIdest_x\fP\^, int \fIdest_y\fP\^); .HP int XCopyPlane\^(\^Display *\fIdisplay\fP\^, Drawable \fIsrc\fP\^, Drawable \fIdest\fP\^, GC \fIgc\fP\^, int \fIsrc_x\fP\^, int \fIsrc_y\fP\^, unsigned \fIwidth\fP\^, int \fIheight\fP\^, int \fIdest_x\fP\^, int \fIdest_y\fP\^, unsigned long \fIplane\fP\^); .SH ARGUMENTS .ds Dx , which are relative to the origin of the destination rectangle \ and specify its upper-left corner .IP \fIdest_x\fP 1i .br .ns .IP \fIdest_y\fP 1i Specify the x and y coordinates\*(Dx. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIgc\fP 1i Specifies the GC. .IP \fIplane\fP 1i Specifies the bit plane. You must set exactly one bit to 1. .IP \fIsrc\fP 1i .br .ns .IP \fIdest\fP 1i Specify the source and destination rectangles to be combined. .IP \fIsrc_x\fP 1i .br .ns .IP \fIsrc_y\fP 1i Specify the x and y coordinates, which are relative to the origin of the source rectangle and specify its upper-left corner. .ds Wh , which are the dimensions of both the source and destination rectangles .IP \fIwidth\fP 1i .br .ns .IP \fIheight\fP 1i Specify the width and height\*(Wh. .SH DESCRIPTION The .ZN XCopyArea function combines the specified rectangle of src with the specified rectangle of dest. The drawables must have the same root and depth, or a .ZN BadMatch error results. .LP If regions of the source rectangle are obscured and have not been retained in backing store or if regions outside the boundaries of the source drawable are specified, those regions are not copied. Instead, the following occurs on all corresponding destination regions that are either visible or are retained in backing store. If the destination is a window with a background other than .ZN None , corresponding regions of the destination are tiled with that background (with plane-mask of all ones and .ZN GXcopy function). Regardless of tiling or whether the destination is a window or a pixmap, if graphics-exposures is .ZN True , then .ZN GraphicsExpose events for all corresponding destination regions are generated. If graphics-exposures is .ZN True but no .ZN GraphicsExpose events are generated, a .ZN NoExpose event is generated. Note that by default graphics-exposures is .ZN True in new GCs. .LP This function uses these GC components: function, plane-mask, subwindow-mode, graphics-exposures, clip-x-origin, clip-y-origin, and clip-mask. .LP .ZN XCopyArea can generate .ZN BadDrawable , .ZN BadGC , and .ZN BadMatch errors. .LP The .ZN XCopyPlane function uses a single bit plane of the specified source rectangle combined with the specified GC to modify the specified rectangle of dest. The drawables must have the same root but need not have the same depth. If the drawables do not have the same root, a .ZN BadMatch error results. If plane does not have exactly one bit set to 1 and the value of plane is not less than %2 sup n%, where \fIn\fP is the depth of src, a .ZN BadValue error results. .LP Effectively, .ZN XCopyPlane forms a pixmap of the same depth as the rectangle of dest and with a size specified by the source region. It uses the foreground/background pixels in the GC (foreground everywhere the bit plane in src contains a bit set to 1, background everywhere the bit plane in src contains a bit set to 0) and the equivalent of a .ZN CopyArea protocol request is performed with all the same exposure semantics. This can also be thought of as using the specified region of the source bit plane as a stipple with a fill-style of .ZN FillOpaqueStippled for filling a rectangular area of the destination. .LP This function uses these GC components: function, plane-mask, foreground, background, subwindow-mode, graphics-exposures, clip-x-origin, clip-y-origin, and clip-mask. .LP .ZN XCopyPlane can generate .ZN BadDrawable , .ZN BadGC , .ZN BadMatch , and .ZN BadValue errors. .SH DIAGNOSTICS .TP 1i .ZN BadDrawable A value for a Drawable argument does not name a defined Window or Pixmap. .TP 1i .ZN BadGC A value for a GContext argument does not name a defined GContext. .TP 1i .ZN BadMatch An .ZN InputOnly window is used as a Drawable. .TP 1i .ZN BadMatch Some argument or pair of arguments has the correct type and range but fails to match in some other way required by the request. .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .SH "SEE ALSO" XClearArea(__libmansuffix__) .br \fIXlib \- C Language X Interface\fP libX11-1.6.3/man/XParseColor.man000064401431060000012000000000651247741723500165300ustar00alancstaff00002660200006.so man__libmansuffix__/XQueryColor.__libmansuffix__ libX11-1.6.3/man/PlanesOfScreen.man000064401431060000012000000000741247741723500171760ustar00alancstaff00002660200006.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__ libX11-1.6.3/man/VendorRelease.man000064401431060000012000000000631247741723500170630ustar00alancstaff00002660200006.so man__libmansuffix__/AllPlanes.__libmansuffix__ libX11-1.6.3/man/XSetFont.man000064401431060000012000000075531247741723500160520ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XSetFont __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XSetFont \- GC convenience routines .SH SYNTAX .HP int XSetFont\^(\^Display *\fIdisplay\fP\^, GC \fIgc\fP\^, Font \fIfont\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIfont\fP 1i Specifies the font. .IP \fIgc\fP 1i Specifies the GC. .SH DESCRIPTION The .ZN XSetFont function sets the current font in the specified GC. .LP .ZN XSetFont can generate .ZN BadAlloc , .ZN BadFont , and .ZN BadGC errors. .SH DIAGNOSTICS .TP 1i .ZN BadAlloc The server failed to allocate the requested resource or server memory. .TP 1i .ZN BadFont A value for a Font or GContext argument does not name a defined Font. .TP 1i .ZN BadGC A value for a GContext argument does not name a defined GContext. .SH "SEE ALSO" XCreateGC(__libmansuffix__), XQueryBestSize(__libmansuffix__), XSetArcMode(__libmansuffix__), XSetClipOrigin(__libmansuffix__), XSetFillStyle(__libmansuffix__), XSetLineAttributes(__libmansuffix__), XSetState(__libmansuffix__), XSetTile(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XSetScreenSaver.man000064401431060000012000000167601247741723500173640ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XSetScreenSaver __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XSetScreenSaver, XForceScreenSaver, XActivateScreenSaver, XResetScreenSaver, XGetScreenSaver \- manipulate the screen saver .SH SYNTAX .HP int XSetScreenSaver\^(\^Display *\fIdisplay\fP\^, int \fItimeout\fP\^, int \fIinterval\fP\^, int \fIprefer_blanking\fP\^, int \fIallow_exposures\fP\^); .HP int XForceScreenSaver\^(\^Display *\fIdisplay\fP\^, int \fImode\fP\^); .HP int XActivateScreenSaver\^(\^Display *\fIdisplay\fP\^); .HP int XResetScreenSaver\^(\^Display *\fIdisplay\fP\^); .HP int XGetScreenSaver\^(\^Display *\fIdisplay\fP\^, int *\fItimeout_return\fP\^, int *\fIinterval_return\fP\^, int *\fIprefer_blanking_return\fP\^, int *\fIallow_exposures_return\fP\^); .SH ARGUMENTS .IP \fIallow_exposures\fP 1i Specifies the screen save control values. You can pass .ZN DontAllowExposures , .ZN AllowExposures , or .ZN DefaultExposures . .IP \fIallow_exposures_return\fP 1i Returns the current screen save control value .Pn ( DontAllowExposures , .ZN AllowExposures , or .ZN DefaultExposures ). .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIinterval\fP 1i Specifies the interval, in seconds, between screen saver alterations. .IP \fIinterval_return\fP 1i Returns the interval between screen saver invocations. .IP \fImode\fP 1i Specifies the mode that is to be applied. You can pass .ZN ScreenSaverActive or .ZN ScreenSaverReset . .IP \fIprefer_blanking\fP 1i Specifies how to enable screen blanking. You can pass .ZN DontPreferBlanking , .ZN PreferBlanking , or .ZN DefaultBlanking . .IP \fIprefer_blanking_return\fP 1i Returns the current screen blanking preference .Pn ( DontPreferBlanking , .ZN PreferBlanking , or .ZN DefaultBlanking ). .IP \fItimeout\fP 1i Specifies the timeout, in seconds, until the screen saver turns on. .IP \fItimeout_return\fP 1i Returns the timeout, in seconds, until the screen saver turns on. .SH DESCRIPTION Timeout and interval are specified in seconds. A timeout of 0 disables the screen saver (but an activated screen saver is not deactivated), and a timeout of \-1 restores the default. Other negative values generate a .ZN BadValue error. If the timeout value is nonzero, .ZN XSetScreenSaver enables the screen saver. An interval of 0 disables the random-pattern motion. Both values are limited to a 16-bit signed integer range by the wire protocol, despite the C prototype. If no input from devices (keyboard, mouse, and so on) is generated for the specified number of timeout seconds once the screen saver is enabled, the screen saver is activated. .LP For each screen, if blanking is preferred and the hardware supports video blanking, the screen simply goes blank. Otherwise, if either exposures are allowed or the screen can be regenerated without sending .ZN Expose events to clients, the screen is tiled with the root window background tile randomly re-origined each interval seconds. Otherwise, the screens' state do not change, and the screen saver is not activated. The screen saver is deactivated, and all screen states are restored at the next keyboard or pointer input or at the next call to .ZN XForceScreenSaver with mode .ZN ScreenSaverReset . .LP If the server-dependent screen saver method supports periodic change, the interval argument serves as a hint about how long the change period should be, and zero hints that no periodic change should be made. Examples of ways to change the screen include scrambling the colormap periodically, moving an icon image around the screen periodically, or tiling the screen with the root window background tile, randomly re-origined periodically. .LP .ZN XSetScreenSaver can generate a .ZN BadValue error. .LP If the specified mode is .ZN ScreenSaverActive and the screen saver currently is deactivated, .ZN XForceScreenSaver activates the screen saver even if the screen saver had been disabled with a timeout of zero. If the specified mode is .ZN ScreenSaverReset and the screen saver currently is enabled, .ZN XForceScreenSaver deactivates the screen saver if it was activated, and the activation timer is reset to its initial state (as if device input had been received). .LP .ZN XForceScreenSaver can generate a .ZN BadValue error. .LP The .ZN XActivateScreenSaver function activates the screen saver. .LP The .ZN XResetScreenSaver function resets the screen saver. .LP The .ZN XGetScreenSaver function gets the current screen saver values. .SH DIAGNOSTICS .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .SH "SEE ALSO" \fI\*(xL\fP reen saver .SH SlibX11-1.6.3/man/XSubImage.man000064401431060000012000000000641247741723500161520ustar00alancstaff00002660200006.so man__libmansuffix__/XInitImage.__libmansuffix__ libX11-1.6.3/man/XGetWMName.man000064401431060000012000000000641247741723500162420ustar00alancstaff00002660200006.so man__libmansuffix__/XSetWMName.__libmansuffix__ libX11-1.6.3/man/XMaskEvent.man000064401431060000012000000000641247741723500163530ustar00alancstaff00002660200006.so man__libmansuffix__/XNextEvent.__libmansuffix__ libX11-1.6.3/man/XSetEventQueueOwner.man000064401431060000012000000046251247741723500202420ustar00alancstaff00002660200006.\" Copyright \(co 2006 Josh Triplett .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .TH XSetEventQueueOwner __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XSetEventQueueOwner \- set event queue owner on a shared Xlib/XCB connection .SH SYNTAX .HP #include .HP void XSetEventQueueOwner(Display *\fIdpy\fP, enum XEventQueueOwner \fIowner\fP); .SH ARGUMENTS .IP \fIdpy\fP 1i Specifies the connection to the X server. .IP \fIowner\fP 1i Specifies the event queue ownership: .RS .TP \fIXlibOwnsEventQueue\fP (default) Xlib owns the event queue. Use the Xlib event-handling functions. Do not call the XCB event-handling functions. .TP \fIXCBOwnsEventQueue\fP XCB owns the event queue. Use the XCB event-handling functions. Do not call the Xlib event-handling functions. .RE .SH DESCRIPTION While a client using Xlib/XCB can issue requests and handle their replies or errors with either Xlib or XCB, only one can own and handle the event queue. By default, Xlib must own the event queue, for compatibility with legacy Xlib clients. Clients can call \fIXSetEventQueueOwner\fP immediately after \fIXOpenDisplay\fP to let XCB own the event queue instead. Clients may not call \fIXSetEventQueueOwner\fP at any other time, as this will potentially lose responses. .SH "SEE ALSO" XOpenDisplay(__libmansuffix__), XGetXCBConnection(__libmansuffix__), .br \fIXlib \- C Language X Interface\fP libX11-1.6.3/man/XGravityEvent.man000064401431060000012000000126071247741723500171130ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XGravityEvent __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XGravityEvent \- GravityNotify event structure .SH STRUCTURES The structure for .ZN GravityNotify events contains: .LP .Ds 0 typedef struct { int type; /\&* GravityNotify */ unsigned long serial; /\&* # of last request processed by server */ Bool send_event; /\&* true if this came from a SendEvent request */ Display *display; /\&* Display the event was read from */ Window event; Window window; int x, y; } XGravityEvent; .De .LP When you receive this event, the structure members are set as follows. .LP The type member is set to the event type constant name that uniquely identifies it. For example, when the X server reports a .ZN GraphicsExpose event to a client application, it sends an .ZN XGraphicsExposeEvent structure with the type member set to .ZN GraphicsExpose . The display member is set to a pointer to the display the event was read on. The send_event member is set to .ZN True if the event came from a .ZN SendEvent protocol request. The serial member is set from the serial number reported in the protocol but expanded from the 16-bit least-significant bits to a full 32-bit value. The window member is set to the window that is most useful to toolkit dispatchers. .LP The event member is set either to the window that was moved or to its parent, depending on whether .ZN StructureNotify or .ZN SubstructureNotify was selected. The window member is set to the child window that was moved. The x and y members are set to the coordinates relative to the new parent window's origin and indicate the position of the upper-left outside corner of the window. .SH "SEE ALSO" XAnyEvent(__libmansuffix__), XButtonEvent(__libmansuffix__), XCreateWindowEvent(__libmansuffix__), XCirculateEvent(__libmansuffix__), XCirculateRequestEvent(__libmansuffix__), XColormapEvent(__libmansuffix__), XConfigureEvent(__libmansuffix__), XConfigureRequestEvent(__libmansuffix__), XCrossingEvent(__libmansuffix__), XDestroyWindowEvent(__libmansuffix__), XErrorEvent(__libmansuffix__), XExposeEvent(__libmansuffix__), XFocusChangeEvent(__libmansuffix__), XGraphicsExposeEvent(__libmansuffix__), XKeymapEvent(__libmansuffix__), XMapEvent(__libmansuffix__), XMapRequestEvent(__libmansuffix__), XPropertyEvent(__libmansuffix__), XReparentEvent(__libmansuffix__), XResizeRequestEvent(__libmansuffix__), XSelectionClearEvent(__libmansuffix__), XSelectionEvent(__libmansuffix__), XSelectionRequestEvent(__libmansuffix__), XUnmapEvent(__libmansuffix__), XVisibilityEvent(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XCreateWindowEvent.man000064401431060000012000000137341247741723500200630ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XCreateWindowEvent __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XCreateWindowEvent \- CreateNotify event structure .SH STRUCTURES The structure for .ZN CreateNotify events contains: .LP .Ds 0 typedef struct { int type; /\&* CreateNotify */ unsigned long serial; /\&* # of last request processed by server */ Bool send_event; /\&* true if this came from a SendEvent request */ Display *display; /\&* Display the event was read from */ Window parent; /\&* parent of the window */ Window window; /\&* window id of window created */ int x, y; /\&* window location */ int width, height; /\&* size of window */ int border_width; /\&* border width */ Bool override_redirect; /\&* creation should be overridden */ } XCreateWindowEvent; .De .LP When you receive this event, the structure members are set as follows. .LP The type member is set to the event type constant name that uniquely identifies it. For example, when the X server reports a .ZN GraphicsExpose event to a client application, it sends an .ZN XGraphicsExposeEvent structure with the type member set to .ZN GraphicsExpose . The display member is set to a pointer to the display the event was read on. The send_event member is set to .ZN True if the event came from a .ZN SendEvent protocol request. The serial member is set from the serial number reported in the protocol but expanded from the 16-bit least-significant bits to a full 32-bit value. The window member is set to the window that is most useful to toolkit dispatchers. .LP The parent member is set to the created window's parent. The window member specifies the created window. The x and y members are set to the created window's coordinates relative to the parent window's origin and indicate the position of the upper-left outside corner of the created window. The width and height members are set to the inside size of the created window (not including the border) and are always nonzero. The border_width member is set to the width of the created window's border, in pixels. The override_redirect member is set to the override-redirect attribute of the window. Window manager clients normally should ignore this window if the override_redirect member is .ZN True . .SH "SEE ALSO" XAnyEvent(__libmansuffix__), XButtonEvent(__libmansuffix__), XCirculateEvent(__libmansuffix__), XCirculateRequestEvent(__libmansuffix__), XColormapEvent(__libmansuffix__), XConfigureEvent(__libmansuffix__), XConfigureRequestEvent(__libmansuffix__), XCrossingEvent(__libmansuffix__), XDestroyWindowEvent(__libmansuffix__), XErrorEvent(__libmansuffix__), XExposeEvent(__libmansuffix__), XFocusChangeEvent(__libmansuffix__), XGraphicsExposeEvent(__libmansuffix__), XGravityEvent(__libmansuffix__), XKeymapEvent(__libmansuffix__), XMapEvent(__libmansuffix__), XMapRequestEvent(__libmansuffix__), XPropertyEvent(__libmansuffix__), XReparentEvent(__libmansuffix__), XResizeRequestEvent(__libmansuffix__), XSelectionClearEvent(__libmansuffix__), XSelectionEvent(__libmansuffix__), XSelectionRequestEvent(__libmansuffix__), XUnmapEvent(__libmansuffix__), XVisibilityEvent(__libmansuffix__) .br \fI\*(xL\fP ment Corporation .\" .\" Portions ColibX11-1.6.3/man/ConnectionNumber.man000064401431060000012000000000631247741723500175750ustar00alancstaff00002660200006.so man__libmansuffix__/AllPlanes.__libmansuffix__ libX11-1.6.3/man/XcmsCIEuvY.man000064401431060000012000000000631247741723500162640ustar00alancstaff00002660200006.so man__libmansuffix__/XcmsColor.__libmansuffix__ libX11-1.6.3/man/Xutf8TextPerCharExtents.man000064401431060000012000000000771247741723500210350ustar00alancstaff00002660200006.so man__libmansuffix__/XmbTextPerCharExtents.__libmansuffix__ libX11-1.6.3/man/XGetErrorText.man000064401431060000012000000000721247741723500170530ustar00alancstaff00002660200006.so man__libmansuffix__/XSetErrorHandler.__libmansuffix__ libX11-1.6.3/man/XMoveWindow.man000064401431060000012000000000721247741723500165530ustar00alancstaff00002660200006.so man__libmansuffix__/XConfigureWindow.__libmansuffix__ libX11-1.6.3/man/XGetRGBColormaps.man000064401431060000012000000001001247741723500173770ustar00alancstaff00002660200006.so man__libmansuffix__/XAllocStandardColormap.__libmansuffix__ libX11-1.6.3/man/XrmMergeDatabases.man000064401431060000012000000125451247741723500176730ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XrmMergeDatabases __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XrmMergeDatabases, XrmCombineDatabase, XrmCombineFileDatabase \- merge resource databases .SH SYNTAX .HP #include .HP void XrmMergeDatabases(\^XrmDatabase \fIsource_db\fP, XrmDatabase *\fItarget_db\fP\^); .HP void XrmCombineDatabase(\^XrmDatabase \fIsource_db\fP, XrmDatabase *\fItarget_db\fP, Bool \fIoverride\fP\^); .HP Status XrmCombineFileDatabase(\^char *\fIfilename\fP, XrmDatabase *\fItarget_db\fP\^, Bool \fIoverride\fP); .SH ARGUMENTS .IP \fIsource_db\fP 1i Specifies the resource database that is to be merged into the target database. .IP \fItarget_db\fP 1i Specifies the resource database into which the source database is to be merged. .IP \fIfilename\fP 1i Specifies the resource database file name. .IP \fIoverride\fP 1i Specifies whether source entries override target ones. .SH DESCRIPTION Calling the .ZN XrmMergeDatabases function is equivalent to calling the .ZN XrmCombineDatabase function with an override argument of .ZN True . .LP The .ZN XrmCombineDatabase function merges the contents of one database into another. If the same specifier is used for an entry in both databases, the entry in the source_db will replace the entry in the target_db if override is .ZN True ; otherwise, the entry in source_db is discarded. If target_db contains NULL, .ZN XrmCombineDatabase simply stores source_db in it. Otherwise, source_db is destroyed by the merge, but the database pointed to by target_db is not destroyed. The database entries are merged without changing values or types, regardless of the locales of the databases. The locale of the target database is not modified. .LP The .ZN XrmCombineFileDatabase function merges the contents of a resource file into a database. If the same specifier is used for an entry in both the file and the database, the entry in the file will replace the entry in the database if override is .ZN True ; otherwise, the entry in the file is discarded. The file is parsed in the current locale. If the file cannot be read, a zero status is returned; otherwise, a nonzero status is returned. If target_db contains NULL, .ZN XrmCombineFileDatabase creates and returns a new database to it. Otherwise, the database pointed to by target_db is not destroyed by the merge. The database entries are merged without changing values or types, regardless of the locale of the database. The locale of the target database is not modified. .SH "SEE ALSO" XrmGetResource(__libmansuffix__), XrmInitialize(__libmansuffix__), XrmPutResource(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XDestroyIC.man000064401431060000012000000000631247741723500163220ustar00alancstaff00002660200006.so man__libmansuffix__/XCreateIC.__libmansuffix__ libX11-1.6.3/man/XCloseIM.man000064401431060000012000000000611247741723500157460ustar00alancstaff00002660200006.so man__libmansuffix__/XOpenIM.__libmansuffix__ libX11-1.6.3/man/XUnionRegion.man000064401431060000012000000000721247741723500167110ustar00alancstaff00002660200006.so man__libmansuffix__/XIntersectRegion.__libmansuffix__ libX11-1.6.3/man/XInternalConnectionNumbers.man000064401431060000012000000000751247741723500216100ustar00alancstaff00002660200006.so man__libmansuffix__/XAddConnectionWatch.__libmansuffix__ libX11-1.6.3/man/QLength.man000064401431060000012000000000631247741723500156670ustar00alancstaff00002660200006.so man__libmansuffix__/AllPlanes.__libmansuffix__ libX11-1.6.3/man/XQueryTextExtents16.man000064401431060000012000000000661247741723500201540ustar00alancstaff00002660200006.so man__libmansuffix__/XTextExtents.__libmansuffix__ libX11-1.6.3/man/XResizeWindow.man000064401431060000012000000000721247741723500171060ustar00alancstaff00002660200006.so man__libmansuffix__/XConfigureWindow.__libmansuffix__ libX11-1.6.3/man/XcmsPad.man000064401431060000012000000000631247741723500156640ustar00alancstaff00002660200006.so man__libmansuffix__/XcmsColor.__libmansuffix__ libX11-1.6.3/man/XFontStruct.man000064401431060000012000000000631247741723500165700ustar00alancstaff00002660200006.so man__libmansuffix__/XLoadFont.__libmansuffix__ libX11-1.6.3/man/XClearWindow.man000064401431060000012000000000641247741723500166740ustar00alancstaff00002660200006.so man__libmansuffix__/XClearArea.__libmansuffix__ libX11-1.6.3/man/XcmsAllocNamedColor.man000064401431060000012000000000701247741723500201540ustar00alancstaff00002660200006.so man__libmansuffix__/XcmsAllocColor.__libmansuffix__ libX11-1.6.3/man/XUngrabKey.man000064401431060000012000000000621247741723500163430ustar00alancstaff00002660200006.so man__libmansuffix__/XGrabKey.__libmansuffix__ libX11-1.6.3/man/XDrawRectangle.man000064401431060000012000000133501247741723500172020ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XDrawRectangle __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XDrawRectangle, XDrawRectangles, XRectangle \- draw rectangles and rectangles structure .SH SYNTAX .HP int XDrawRectangle\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, GC \fIgc\fP\^, int \fIx\fP\^, int \fIy\fP\^, unsigned int \fIwidth\fP\^, unsigned int \fIheight\fP\^); .HP int XDrawRectangles\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, GC \fIgc\fP\^, XRectangle \fIrectangles\fP\^[\^]\^, int \fInrectangles\fP\^); .SH ARGUMENTS .IP \fId\fP 1i Specifies the drawable. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIgc\fP 1i Specifies the GC. .IP \fInrectangles\fP 1i Specifies the number of rectangles in the array. .IP \fIrectangles\fP 1i Specifies an array of rectangles. .ds Wh , which specify the dimensions of the rectangle .IP \fIwidth\fP 1i .br .ns .IP \fIheight\fP 1i Specify the width and height\*(Wh. .ds Xy , which specify the upper-left corner of the rectangle .IP \fIx\fP 1i .br .ns .IP \fIy\fP 1i Specify the x and y coordinates\*(Xy. .SH DESCRIPTION The .ZN XDrawRectangle and .ZN XDrawRectangles functions draw the outlines of the specified rectangle or rectangles as if a five-point .ZN PolyLine protocol request were specified for each rectangle: .IP [x,y] [x+width,y] [x+width,y+height] [x,y+height] [x,y] .LP For the specified rectangle or rectangles, these functions do not draw a pixel more than once. .ZN XDrawRectangles draws the rectangles in the order listed in the array. If rectangles intersect, the intersecting pixels are drawn multiple times. .LP Both functions use these GC components: function, plane-mask, line-width, line-style, cap-style, join-style, fill-style, subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask. They also use these GC mode-dependent components: foreground, background, tile, stipple, tile-stipple-x-origin, tile-stipple-y-origin, dash-offset, and dash-list. .LP .ZN XDrawRectangle and .ZN XDrawRectangles can generate .ZN BadDrawable , .ZN BadGC , and .ZN BadMatch errors. .SH STRUCTURES The .ZN XRectangle structure contains: .LP .Ds 0 typedef struct { short x, y; unsigned short width, height; } XRectangle; .De .LP All x and y members are signed integers. The width and height members are 16-bit unsigned integers. You should be careful not to generate coordinates and sizes out of the 16-bit ranges, because the protocol only has 16-bit fields for these values. .SH DIAGNOSTICS .TP 1i .ZN BadDrawable A value for a Drawable argument does not name a defined Window or Pixmap. .TP 1i .ZN BadGC A value for a GContext argument does not name a defined GContext. .TP 1i .ZN BadMatch An .ZN InputOnly window is used as a Drawable. .TP 1i .ZN BadMatch Some argument or pair of arguments has the correct type and range but fails to match in some other way required by the request. .SH "SEE ALSO" XDrawArc(__libmansuffix__), XDrawLine(__libmansuffix__), XDrawPoint(__libmansuffix__) .br \fI\*(xL\fP all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" DigilibX11-1.6.3/man/WhitePixel.man000064401431060000012000000000631247741723500164070ustar00alancstaff00002660200006.so man__libmansuffix__/AllPlanes.__libmansuffix__ libX11-1.6.3/man/XFillArc.man000064401431060000012000000000701247741723500157670ustar00alancstaff00002660200006.so man__libmansuffix__/XFillRectangle.__libmansuffix__ libX11-1.6.3/man/XCheckIfEvent.man000064401431060000012000000000621247741723500167520ustar00alancstaff00002660200006.so man__libmansuffix__/XIfEvent.__libmansuffix__ libX11-1.6.3/man/XcmsQueryBlue.man000064401431060000012000000000701247741723500170730ustar00alancstaff00002660200006.so man__libmansuffix__/XcmsQueryBlack.__libmansuffix__ libX11-1.6.3/man/XProcessInternalConnection.man000064401431060000012000000000751247741723500216130ustar00alancstaff00002660200006.so man__libmansuffix__/XAddConnectionWatch.__libmansuffix__ libX11-1.6.3/man/XSetModifierMapping.man000064401431060000012000000001001247741723500201730ustar00alancstaff00002660200006.so man__libmansuffix__/XChangeKeyboardMapping.__libmansuffix__ libX11-1.6.3/man/XSetAfterFunction.man000064401431060000012000000000661247741723500177030ustar00alancstaff00002660200006.so man__libmansuffix__/XSynchronize.__libmansuffix__ libX11-1.6.3/man/XQueryColors.man000064401431060000012000000000651247741723500167460ustar00alancstaff00002660200006.so man__libmansuffix__/XQueryColor.__libmansuffix__ libX11-1.6.3/man/XSizeHints.man000064401431060000012000000000711247741723500163740ustar00alancstaff00002660200006.so man__libmansuffix__/XAllocSizeHints.__libmansuffix__ libX11-1.6.3/man/XGetTransientForHint.man000064401431060000012000000000761247741723500203620ustar00alancstaff00002660200006.so man__libmansuffix__/XSetTransientForHint.__libmansuffix__ libX11-1.6.3/man/XwcFreeStringList.man000064401431060000012000000001031247741723500177060ustar00alancstaff00002660200006.so man__libmansuffix__/XmbTextListToTextProperty.__libmansuffix__ libX11-1.6.3/man/XcmsQueryWhite.man000064401431060000012000000000701247741723500172640ustar00alancstaff00002660200006.so man__libmansuffix__/XcmsQueryBlack.__libmansuffix__ libX11-1.6.3/man/XGetPixel.man000064401431060000012000000000641247741723500161770ustar00alancstaff00002660200006.so man__libmansuffix__/XInitImage.__libmansuffix__ libX11-1.6.3/man/XStoreColors.man000064401431060000012000000163101247741723500167350ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XStoreColors __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XStoreColors, XStoreColor, XStoreNamedColor \- set colors .SH SYNTAX .HP int XStoreColors\^(\^Display *\fIdisplay\fP\^, Colormap \fIcolormap\fP\^, XColor \fIcolor\fP\^[\^]\^, int \fIncolors\fP\^); .HP int XStoreColor\^(\^Display *\fIdisplay\fP\^, Colormap \fIcolormap\fP\^, XColor *\fIcolor\fP\^); .HP int XStoreNamedColor\^(\^Display *\fIdisplay\fP\^, Colormap \fIcolormap\fP\^, char *\^\fIcolor\fP\^, unsigned long \fIpixel\fP\^, int \fIflags\fP\^); .SH ARGUMENTS .ds Co pixel and RGB values or the color name string (for example, red) .IP \fIcolor\fP 1i Specifies the \*(Co. .IP \fIcolor\fP 1i Specifies an array of color definition structures to be stored. .IP \fIcolormap\fP 1i Specifies the colormap. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIflags\fP 1i Specifies which red, green, and blue components are set. .IP \fIncolors\fP 1i .\"Specifies the number of color definition structures. Specifies the number of .ZN XColor structures in the color definition array. .IP \fIpixel\fP 1i Specifies the entry in the colormap. .SH DESCRIPTION The .ZN XStoreColors function changes the colormap entries of the pixel values specified in the pixel members of the .ZN XColor structures. You specify which color components are to be changed by setting .ZN DoRed , .ZN DoGreen , and/or .ZN DoBlue in the flags member of the .ZN XColor structures. If the colormap is an installed map for its screen, the changes are visible immediately. .ZN XStoreColors changes the specified pixels if they are allocated writable in the colormap by any client, even if one or more pixels generates an error. If a specified pixel is not a valid index into the colormap, a .ZN BadValue error results. If a specified pixel either is unallocated or is allocated read-only, a .ZN BadAccess error results. If more than one pixel is in error, the one that gets reported is arbitrary. .LP .ZN XStoreColors can generate .ZN BadAccess , .ZN BadColor , and .ZN BadValue errors. .LP The .ZN XStoreColor function changes the colormap entry of the pixel value specified in the pixel member of the .ZN XColor structure. You specified this value in the pixel member of the .ZN XColor structure. This pixel value must be a read/write cell and a valid index into the colormap. If a specified pixel is not a valid index into the colormap, a .ZN BadValue error results. .ZN XStoreColor also changes the red, green, and/or blue color components. You specify which color components are to be changed by setting .ZN DoRed , .ZN DoGreen , and/or .ZN DoBlue in the flags member of the .ZN XColor structure. If the colormap is an installed map for its screen, the changes are visible immediately. .LP .ZN XStoreColor can generate .ZN BadAccess , .ZN BadColor , and .ZN BadValue errors. .LP The .ZN XStoreNamedColor function looks up the named color with respect to the screen associated with the colormap and stores the result in the specified colormap. The pixel argument determines the entry in the colormap. The flags argument determines which of the red, green, and blue components are set. You can set this member to the bitwise inclusive OR of the bits .ZN DoRed , .ZN DoGreen , and .ZN DoBlue . If the color name is not in the Host Portable Character Encoding, the result is implementation-dependent. Use of uppercase or lowercase does not matter. If the specified pixel is not a valid index into the colormap, a .ZN BadValue error results. If the specified pixel either is unallocated or is allocated read-only, a .ZN BadAccess error results. .LP .ZN XStoreNamedColor can generate .ZN BadAccess , .ZN BadColor , .ZN BadName , and .ZN BadValue errors. .SH DIAGNOSTICS .TP 1i .ZN BadAccess A client attempted to free a color map entry that it did not already allocate. .TP 1i .ZN BadAccess A client attempted to store into a read-only color map entry. .TP 1i .ZN BadColor A value for a Colormap argument does not name a defined Colormap. .TP 1i .ZN BadName A font or color of the specified name does not exist. .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .SH "SEE ALSO" XAllocColor(__libmansuffix__), XCreateColormap(__libmansuffix__), XQueryColor(__libmansuffix__) .br \fI\*(xL\fP \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XStoreColors __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XStoreColors, XStoreColor, XStoreNamedColor \- set colors .SH SYNTAX .HP int XStoreColors\^(\^Display *\fIdisplay\fP\^, Colormap \fIlibX11-1.6.3/man/DisplayHeightMM.man000064401431060000012000000000701247741723500173130ustar00alancstaff00002660200006.so man__libmansuffix__/ImageByteOrder.__libmansuffix__ libX11-1.6.3/man/XInternAtom.man000064401431060000012000000155041247741723500165430ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XInternAtom __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XInternAtom, XInternAtoms, XGetAtomName, XGetAtomNames \- create or return atom names .SH SYNTAX .HP Atom XInternAtom\^(\^Display *\fIdisplay\fP\^, char *\fIatom_name\fP\^, Bool \fIonly_if_exists\fP\^); .HP Status XInternAtoms\^(\^Display *\fIdisplay\fP\^, char **\fInames\fP\^, int \fIcount\fP\^, Bool \fIonly_if_exists\fP\^, Atom *\fIatoms_return\fP\^); .HP char *XGetAtomName\^(\^Display *\fIdisplay\fP\^, Atom \fIatom\fP\^); .HP Status XGetAtomNames\^(\^Display *\fIdisplay\fP\^, Atom *\fIatoms\fP\^, int \fIcount\fP\^, char **\fInames_return\fP\^); .SH ARGUMENTS .IP \fIatom\fP 1i Specifies the atom for the property name you want returned. .IP \fIatoms\fP 1i Specifies the array of atoms. .IP \fIatom_name\fP 1i Specifies the name associated with the atom you want returned. .IP \fIatoms_return\fP 1i Returns the atoms. .ds Cn atom names in the array .IP \fIcount\fP 1i Specifies the number of \*(Cn. .ds Cn atoms in the array .IP \fIcount\fP 1i Specifies the number of \*(Cn. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fInames\fP 1i Specifies the array of atom names. .IP \fInames_return\fP 1i Returns the atom names. .IP \fIonly_if_exists\fP 1i Specifies a Boolean value that indicates whether the atom must be created. .SH DESCRIPTION The .ZN XInternAtom function returns the atom identifier associated with the specified atom_name string. If only_if_exists is .ZN False , the atom is created if it does not exist. Therefore, .ZN XInternAtom can return .ZN None . If the atom name is not in the Host Portable Character Encoding, the result is implementation-dependent. Uppercase and lowercase matter; the strings ``thing'', ``Thing'', and ``thinG'' all designate different atoms. The atom will remain defined even after the client's connection closes. It will become undefined only when the last connection to the X server closes. .LP .ZN XInternAtom can generate .ZN BadAlloc and .ZN BadValue errors. .LP The .ZN XInternAtoms function returns the atom identifiers associated with the specified names. The atoms are stored in the atoms_return array supplied by the caller. Calling this function is equivalent to calling .ZN XInternAtom for each of the names in turn with the specified value of only_if_exists, but this function minimizes the number of round-trip protocol exchanges between the client and the X server. .LP This function returns a nonzero status if atoms are returned for all of the names; otherwise, it returns zero. .LP .ZN XInternAtoms can generate .ZN BadAlloc and .ZN BadValue errors. .LP The .ZN XGetAtomName function returns the name associated with the specified atom. If the data returned by the server is in the Latin Portable Character Encoding, then the returned string is in the Host Portable Character Encoding. Otherwise, the result is implementation-dependent. To free the resulting string, call .ZN XFree . .LP .ZN XGetAtomName can generate a .ZN BadAtom error. .LP The .ZN XGetAtomNames function returns the names associated with the specified atoms. The names are stored in the names_return array supplied by the caller. Calling this function is equivalent to calling .ZN XGetAtomName for each of the atoms in turn, but this function minimizes the number of round-trip protocol exchanges between the client and the X server. .LP This function returns a nonzero status if names are returned for all of the atoms; otherwise, it returns zero. .LP .ZN XGetAtomNames can generate a .ZN BadAtom error. .SH DIAGNOSTICS .TP 1i .ZN BadAlloc The server failed to allocate the requested resource or server memory. .TP 1i .ZN BadAtom A value for an Atom argument does not name a defined Atom. .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .SH "SEE ALSO" XFree(__libmansuffix__), XGetWindowProperty(__libmansuffix__) .br \fI\*(xL\fP ware without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions ColibX11-1.6.3/man/XAnyEvent.man000064401431060000012000000160031247741723500162070ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XAnyEvent __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XAnyEvent, XEvent \- generic X event structures .SH STRUCTURES All the event structures declared in .Pn < X11/Xlib.h > have the following common members: .Ds 0 typedef struct { int type; unsigned long serial; /\&* # of last request processed by server */ Bool send_event; /\&* true if this came from a SendEvent request */ Display *display; /\&* Display the event was read from */ Window window; } XAnyEvent; .De .LP The type member is set to the event type constant name that uniquely identifies it. For example, when the X server reports a .ZN GraphicsExpose event to a client application, it sends an .ZN XGraphicsExposeEvent structure with the type member set to .ZN GraphicsExpose . The display member is set to a pointer to the display the event was read on. The send_event member is set to .ZN True if the event came from a .ZN SendEvent protocol request. The serial member is set from the serial number reported in the protocol but expanded from the 16-bit least-significant bits to a full 32-bit value. The window member is set to the window that is most useful to toolkit dispatchers. .LP The .ZN XEvent structure is a union of the individual structures declared for each event type: .Ds 0 typedef union _XEvent { int type; /\&* must not be changed */ XAnyEvent xany; XKeyEvent xkey; XButtonEvent xbutton; XMotionEvent xmotion; XCrossingEvent xcrossing; XFocusChangeEvent xfocus; XExposeEvent xexpose; XGraphicsExposeEvent xgraphicsexpose; XNoExposeEvent xnoexpose; XVisibilityEvent xvisibility; XCreateWindowEvent xcreatewindow; XDestroyWindowEvent xdestroywindow; XUnmapEvent xunmap; XMapEvent xmap; XMapRequestEvent xmaprequest; XReparentEvent xreparent; XConfigureEvent xconfigure; XGravityEvent xgravity; XResizeRequestEvent xresizerequest; XConfigureRequestEvent xconfigurerequest; XCirculateEvent xcirculate; XCirculateRequestEvent xcirculaterequest; XPropertyEvent xproperty; XSelectionClearEvent xselectionclear; XSelectionRequestEvent xselectionrequest; XSelectionEvent xselection; XColormapEvent xcolormap; XClientMessageEvent xclient; XMappingEvent xmapping; XErrorEvent xerror; XKeymapEvent xkeymap; long pad[24]; } XEvent; .De .LP An .ZN XEvent structure's first entry always is the type member, which is set to the event type. The second member always is the serial number of the protocol request that generated the event. The third member always is send_event, which is a .ZN Bool that indicates if the event was sent by a different client. The fourth member always is a display, which is the display that the event was read from. Except for keymap events, the fifth member always is a window, which has been carefully selected to be useful to toolkit dispatchers. To avoid breaking toolkits, the order of these first five entries is not to change. Most events also contain a time member, which is the time at which an event occurred. In addition, a pointer to the generic event must be cast before it is used to access any other information in the structure. .SH "SEE ALSO" XButtonEvent(__libmansuffix__), XCreateWindowEvent(__libmansuffix__), XCirculateEvent(__libmansuffix__), XCirculateRequestEvent(__libmansuffix__), XColormapEvent(__libmansuffix__), XConfigureEvent(__libmansuffix__), XConfigureRequestEvent(__libmansuffix__), XCrossingEvent(__libmansuffix__), XDestroyWindowEvent(__libmansuffix__), XErrorEvent(__libmansuffix__), XExposeEvent(__libmansuffix__), XFocusChangeEvent(__libmansuffix__), XGraphicsExposeEvent(__libmansuffix__), XGravityEvent(__libmansuffix__), XKeymapEvent(__libmansuffix__), XMapEvent(__libmansuffix__), XMapRequestEvent(__libmansuffix__), XPropertyEvent(__libmansuffix__), XReparentEvent(__libmansuffix__), XResizeRequestEvent(__libmansuffix__), XSelectionClearEvent(__libmansuffix__), XSelectionEvent(__libmansuffix__), XSelectionRequestEvent(__libmansuffix__), XUnmapEvent(__libmansuffix__), XVisibilityEvent(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XrmPutFileDatabase.man000064401431060000012000000000741247741723500200130ustar00alancstaff00002660200006.so man__libmansuffix__/XrmGetFileDatabase.__libmansuffix__ libX11-1.6.3/man/XcmsCreateCCC.man000064401431060000012000000120221247741723500166720ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XcmsCreateCCC __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XcmsCreateCCC, XcmsFreeCCC \- creating and destroying CCCs .SH SYNTAX .HP XcmsCCC XcmsCreateCCC\^(\^Display *\fIdisplay\fP\^, int \fIscreen_number\fP\^, Visual *\fIvisual\fP\^, XcmsColor *\fIclient_white_point\fP\^, XcmsCompressionProc \fIcompression_proc\fP\^, XPointer \fIcompression_client_data\fP\^, XcmsWhiteAdjustProc \fIwhite_adjust_proc\fP\^, XPointer \fIwhite_adjust_client_data\fP\^); .LP void XcmsFreeCCC\^(\^XcmsCCC \fIccc\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIccc\fP 1i Specifies the CCC. .IP \fIclient_white_point\fP 1i Specifies the Client White Point. If NULL is specified, the Client White Point is to be assumed to be the same as the Screen White Point. Note that the pixel member is ignored. .IP \fIcompression_client_data\fP 1i Specifies client data for use by the gamut compression procedure or NULL. .IP \fIcompression_proc\fP 1i Specifies the gamut compression procedure that is to be applied when a color lies outside the screen's color gamut. If NULL is specified and a function using this CCC must convert a color specification to a device-dependent format and encounters a color that lies outside the screen's color gamut, that function will return .ZN XcmsFailure . .IP \fIscreen_number\fP 1i Specifies the appropriate screen number on the host server. .IP \fIvisual\fP 1i Specifies the visual type. .IP \fIwhite_adjust_client_data\fP 1i Specifies client data for use with the white point adjustment procedure or NULL. .IP \fIwhite_adjust_proc\fP 1i Specifies the white adjustment procedure that is to be applied when the Client White Point differs from the Screen White Point. NULL indicates that no white point adjustment is desired. .SH DESCRIPTION The .ZN XcmsCreateCCC function creates a CCC for the specified display, screen, and visual. .LP The .ZN XcmsFreeCCC function frees the memory used for the specified CCC. Note that default CCCs and those currently associated with colormaps are ignored. .SH "SEE ALSO" DisplayOfCCC(__libmansuffix__), XcmsCCCOfColormap(__libmansuffix__), XcmsConvertColors(__libmansuffix__), XcmsDefaultCCC(__libmansuffix__), XcmsSetWhitePoint(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XcmsConvertColors.man000064401431060000012000000116001247741723500177610ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XcmsConvertColors __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XcmsConvertColors \- convert CCC color specifications .SH SYNTAX .HP Status XcmsConvertColors\^(\^XcmsCCC \fIccc\fP\^, XcmsColor \fIcolors_in_out\fP\^[\^]\^, unsigned int \fIncolors\fP\^, XcmsColorFormat \fItarget_format\fP\^, Bool \fIcompression_flags_return\fP\^[\^]\^); .SH ARGUMENTS .IP \fIccc\fP 1i Specifies the CCC. If Conversion is between device-independent color spaces only (for example, TekHVC to CIELuv), the CCC is necessary only to specify the Client White Point. .IP \fIcolors_in_out\fP 1i Specifies an array of color specifications. Pixel members are ignored and remain unchanged upon return. .IP \fIcompression_flags_return\fP 1i Returns an array of Boolean values indicating compression status. If a non-NULL pointer is supplied, each element of the array is set to .ZN True if the corresponding color was compressed and .ZN False otherwise. Pass NULL if the compression status is not useful. .IP \fIncolors\fP 1i Specifies the number of .ZN XcmsColor structures in the color-specification array. .IP \fItarget_format\fP 1i Specifies the target color specification format. .SH DESCRIPTION The .ZN XcmsConvertColors function converts the color specifications in the specified array of .ZN XcmsColor structures from their current format to a single target format, using the specified CCC. When the return value is .ZN XcmsFailure , the contents of the color specification array are left unchanged. .LP The array may contain a mixture of color specification formats (for example, 3 CIE XYZ, 2 CIE Luv, and so on). When the array contains both device-independent and device-dependent color specifications and the target_format argument specifies a device-dependent format (for example, .ZN XcmsRGBiFormat , .ZN XcmsRGBFormat ), all specifications are converted to CIE XYZ format and then to the target device-dependent format. .SH "SEE ALSO" DisplayOfCCC(__libmansuffix__), XcmsCCCOfColormap(__libmansuffix__), XcmsCreateCCC(__libmansuffix__), XcmsDefaultCCC(__libmansuffix__), XcmsSetWhitePoint(__libmansuffix__) .br \fI\*(xL\fP be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" DigilibX11-1.6.3/man/XSetClipMask.man000064401431060000012000000000701247741723500166320ustar00alancstaff00002660200006.so man__libmansuffix__/XSetClipOrigin.__libmansuffix__ libX11-1.6.3/man/XCreateFontCursor.man000064401431060000012000000203711247741723500177110ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XCreateFontCursor __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XCreateFontCursor, XCreatePixmapCursor, XCreateGlyphCursor \- create cursors .SH SYNTAX \&#include .HP Cursor XCreateFontCursor\^(\^Display *\fIdisplay\fP\^, unsigned int \fIshape\fP\^); .HP Cursor XCreatePixmapCursor\^(\^Display *\fIdisplay\fP\^, Pixmap \fIsource\fP\^, Pixmap \fImask\fP\^, XColor *\fIforeground_color\fP\^, XColor *\fIbackground_color\fP\^, unsigned int \fIx\fP\^, unsigned int \fIy\fP\^); .HP Cursor XCreateGlyphCursor\^(\^Display *\fIdisplay\fP\^, Font \fIsource_font\fP\^, Font \fImask_font\fP\^, unsigned int \fIsource_char\fP\^, unsigned int \fImask_char\fP\^, XColor *\fIforeground_color\fP\^, XColor *\fIbackground_color\fP\^); .SH ARGUMENTS .IP \fIbackground_color\fP 1i Specifies the RGB values for the background of the source. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIforeground_color\fP 1i Specifies the RGB values for the foreground of the source. .IP \fImask\fP 1i Specifies the cursor's source bits to be displayed or .ZN None . .IP \fImask_char\fP 1i Specifies the glyph character for the mask. .IP \fImask_font\fP 1i Specifies the font for the mask glyph or .ZN None . .IP \fIshape\fP 1i Specifies the shape of the cursor. .IP \fIsource\fP 1i Specifies the shape of the source cursor. .\" *** JIM: NEED TO CHECK THIS. *** .IP \fIsource_char\fP 1i Specifies the character glyph for the source. .IP \fIsource_font\fP 1i Specifies the font for the source glyph. .ds Xy , which indicate the hotspot relative to the source's origin .IP \fIx\fP 1i .br .ns .IP \fIy\fP 1i Specify the x and y coordinates\*(Xy. .SH DESCRIPTION X provides a set of standard cursor shapes in a special font named cursor. Applications are encouraged to use this interface for their cursors because the font can be customized for the individual display type. The shape argument specifies which glyph of the standard fonts to use. .LP The hotspot comes from the information stored in the cursor font. The initial colors of a cursor are a black foreground and a white background (see .ZN XRecolorCursor ). .LP .ZN XCreateFontCursor can generate .ZN BadAlloc and .ZN BadValue errors. .LP The .ZN XCreatePixmapCursor function creates a cursor and returns the cursor ID associated with it. The foreground and background RGB values must be specified using foreground_color and background_color, even if the X server only has a .ZN StaticGray or .ZN GrayScale screen. The foreground color is used for the pixels set to 1 in the source, and the background color is used for the pixels set to 0. Both source and mask, if specified, must have depth one (or a .ZN BadMatch error results) but can have any root. The mask argument defines the shape of the cursor. The pixels set to 1 in the mask define which source pixels are displayed, and the pixels set to 0 define which pixels are ignored. If no mask is given, all pixels of the source are displayed. The mask, if present, must be the same size as the pixmap defined by the source argument, or a .ZN BadMatch error results. The hotspot must be a point within the source, or a .ZN BadMatch error results. .LP The components of the cursor can be transformed arbitrarily to meet display limitations. The pixmaps can be freed immediately if no further explicit references to them are to be made. Subsequent drawing in the source or mask pixmap has an undefined effect on the cursor. The X server might or might not make a copy of the pixmap. .LP .ZN XCreatePixmapCursor can generate .ZN BadAlloc and .ZN BadPixmap errors. .LP The .ZN XCreateGlyphCursor function is similar to .ZN XCreatePixmapCursor except that the source and mask bitmaps are obtained from the specified font glyphs. The source_char must be a defined glyph in source_font, or a .ZN BadValue error results. If mask_font is given, mask_char must be a defined glyph in mask_font, or a .ZN BadValue error results. The mask_font and character are optional. The origins of the source_char and mask_char (if defined) glyphs are positioned coincidently and define the hotspot. The source_char and mask_char need not have the same bounding box metrics, and there is no restriction on the placement of the hotspot relative to the bounding boxes. If no mask_char is given, all pixels of the source are displayed. You can free the fonts immediately by calling .ZN XFreeFont if no further explicit references to them are to be made. .LP For 2-byte matrix fonts, the 16-bit value should be formed with the byte1 member in the most significant byte and the byte2 member in the least significant byte. .LP .ZN XCreateGlyphCursor can generate .ZN BadAlloc , .ZN BadFont , and .ZN BadValue errors. .SH DIAGNOSTICS .TP 1i .ZN BadAlloc The server failed to allocate the requested resource or server memory. .TP 1i .ZN BadFont A value for a Font or GContext argument does not name a defined Font. .TP 1i .ZN BadMatch Some argument or pair of arguments has the correct type and range but fails to match in some other way required by the request. .TP 1i .ZN BadPixmap A value for a Pixmap argument does not name a defined Pixmap. .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .SH "SEE ALSO" XDefineCursor(__libmansuffix__), XLoadFont(__libmansuffix__), XRecolorCursor(__libmansuffix__) .br \fI\*(xL\fP at both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" DigilibX11-1.6.3/man/RootWindowOfScreen.man000064401431060000012000000000741247741723500200670ustar00alancstaff00002660200006.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__ libX11-1.6.3/man/XPointInRegion.man000064401431060000012000000000661247741723500172040ustar00alancstaff00002660200006.so man__libmansuffix__/XEmptyRegion.__libmansuffix__ libX11-1.6.3/man/XArc.man000064401431060000012000000000621247741723500151610ustar00alancstaff00002660200006.so man__libmansuffix__/XDrawArc.__libmansuffix__ libX11-1.6.3/man/XOpenOM.man000064401431060000012000000147131247741723500156210ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" Copyright \(co 2000 The XFree86 Project, Inc. .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XOpenOM __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XOpenOM, XCloseOM, XSetOMValues, XGetOMValues, XDisplayOfOM, XLocaleOfOM \- open output methods .SH SYNTAX .HP XOM XOpenOM\^(\^Display *\fIdisplay\fP\^, XrmDatabase \fIdb\fP\^, char *\fIres_name\fP\^, char *\fIres_class\fP\^); .HP Status XCloseOM\^(\^XOM \fIom\fP\^); .HP char *XSetOMValues\^(\^XOM \fIom\fP\^); .HP char *XGetOMValues\^(\^XOM \fIom\fP\^); .HP Display *XDisplayOfOM\^(\^XOM \fIom\fP\^); .HP char *XLocaleOfOM\^(\^XOM \fIom\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIdb\fP 1i Specifies a pointer to the resource database. .IP \fIres_name\fP 1i Specifies the full resource name of the application. .IP \fIres_class\fP 1i Specifies the full class name of the application. .IP \fIom\fP 1i Specifies the output method. .ds Al \ to set or get XOM values .IP ... 1i Specifies the variable length argument list\*(Al. .SH DESCRIPTION The .ZN XOpenOM function opens an output method matching the current locale and modifiers specification. The current locale and modifiers are bound to the output method when .ZN XOpenOM is called. The locale associated with an output method cannot be changed. .LP The specific output method to which this call will be routed is identified on the basis of the current locale and modifiers. .ZN XOpenOM will identify a default output method corresponding to the current locale. That default can be modified using .ZN XSetLocaleModifiers to set the output method modifier. .LP The db argument is the resource database to be used by the output method for looking up resources that are private to the output method. It is not intended that this database be used to look up values that can be set as OC values in an output context. If db is NULL, no database is passed to the output method. .LP The res_name and res_class arguments specify the resource name and class of the application. They are intended to be used as prefixes by the output method when looking up resources that are common to all output contexts that may be created for this output method. The characters used for resource names and classes must be in the X Portable Character Set. The resources looked up are not fully specified if res_name or res_class is NULL. .LP The res_name and res_class arguments are not assumed to exist beyond the call to .ZN XOpenOM . The specified resource database is assumed to exist for the lifetime of the output method. .LP .ZN XOpenOM returns NULL if no output method could be opened. .LP The .ZN XCloseOM function closes the specified output method. .LP The .ZN XSetOMValues function presents a variable argument list programming interface for setting properties or features of the specified output method. This function returns NULL if it succeeds; otherwise, it returns the name of the first argument that could not be set. Xlib does not attempt to set arguments from the supplied list that follow the failed argument; all arguments in the list preceding the failed argument have been set correctly. .LP No standard arguments are currently defined by Xlib. .LP The .ZN XGetOMValues function presents a variable argument list programming interface for querying properties or features of the specified output method. This function returns NULL if it succeeds; otherwise, it returns the name of the first argument that could not be obtained. .LP The .ZN XDisplayOfOM function returns the display associated with the specified output method. .LP The .ZN XLocaleOfOM returns the locale associated with the specified output method. .SH "SEE ALSO" XCreateOC(__libmansuffix__), XCreateFontSet(__libmansuffix__) .br \fI\*(xL\fP g or publicity pertaining .\" to this documentation wlibX11-1.6.3/man/XStandardColormap.man000064401431060000012000000001001247741723500177020ustar00alancstaff00002660200006.so man__libmansuffix__/XAllocStandardColormap.__libmansuffix__ libX11-1.6.3/man/XStoreNamedColor.man000064401431060000012000000000661247741723500175200ustar00alancstaff00002660200006.so man__libmansuffix__/XStoreColors.__libmansuffix__ libX11-1.6.3/man/XGrabKeyboard.man000064401431060000012000000164051247741723500170200ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XGrabKeyboard __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XGrabKeyboard, XUngrabKeyboard \- grab the keyboard .SH SYNTAX .HP int XGrabKeyboard\^(\^Display *\fIdisplay\fP\^, Window \fIgrab_window\fP\^, Bool \fIowner_events\fP\^, int \fIpointer_mode\fP\^, int \fIkeyboard_mode\fP\^, Time \fItime\fP\^); .HP int XUngrabKeyboard\^(\^Display *\fIdisplay\fP\^, Time \fItime\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIgrab_window\fP 1i Specifies the grab window. .IP \fIkeyboard_mode\fP 1i Specifies further processing of keyboard events. You can pass .ZN GrabModeSync or .ZN GrabModeAsync . .IP \fIowner_events\fP 1i Specifies a Boolean value that indicates whether the keyboard events are to be reported as usual. .IP \fIpointer_mode\fP 1i Specifies further processing of pointer events. You can pass .ZN GrabModeSync or .ZN GrabModeAsync . .IP \fItime\fP 1i Specifies the time. You can pass either a timestamp or .ZN CurrentTime . .SH DESCRIPTION The .ZN XGrabKeyboard function actively grabs control of the keyboard and generates .ZN FocusIn and .ZN FocusOut events. Further key events are reported only to the grabbing client. .ZN XGrabKeyboard overrides any active keyboard grab by this client. If owner_events is .ZN False , all generated key events are reported with respect to grab_window. If owner_events is .ZN True and if a generated key event would normally be reported to this client, it is reported normally; otherwise, the event is reported with respect to the grab_window. Both .ZN KeyPress and .ZN KeyRelease events are always reported, independent of any event selection made by the client. .LP If the keyboard_mode argument is .ZN GrabModeAsync , keyboard event processing continues as usual. If the keyboard is currently frozen by this client, then processing of keyboard events is resumed. If the keyboard_mode argument is .ZN GrabModeSync , the state of the keyboard (as seen by client applications) appears to freeze, and the X server generates no further keyboard events until the grabbing client issues a releasing .ZN XAllowEvents call or until the keyboard grab is released. Actual keyboard changes are not lost while the keyboard is frozen; they are simply queued in the server for later processing. .LP If pointer_mode is .ZN GrabModeAsync , pointer event processing is unaffected by activation of the grab. If pointer_mode is .ZN GrabModeSync , the state of the pointer (as seen by client applications) appears to freeze, and the X server generates no further pointer events until the grabbing client issues a releasing .ZN XAllowEvents call or until the keyboard grab is released. Actual pointer changes are not lost while the pointer is frozen; they are simply queued in the server for later processing. .LP If the keyboard is actively grabbed by some other client, .ZN XGrabKeyboard fails and returns .ZN AlreadyGrabbed . If grab_window is not viewable, it fails and returns .ZN GrabNotViewable . If the keyboard is frozen by an active grab of another client, it fails and returns .ZN GrabFrozen . If the specified time is earlier than the last-keyboard-grab time or later than the current X server time, it fails and returns .ZN GrabInvalidTime . Otherwise, the last-keyboard-grab time is set to the specified time .Pn ( CurrentTime is replaced by the current X server time). .LP .ZN XGrabKeyboard can generate .ZN BadValue and .ZN BadWindow errors. .LP The .ZN XUngrabKeyboard function releases the keyboard and any queued events if this client has it actively grabbed from either .ZN XGrabKeyboard or .ZN XGrabKey . .ZN XUngrabKeyboard does not release the keyboard and any queued events if the specified time is earlier than the last-keyboard-grab time or is later than the current X server time. It also generates .ZN FocusIn and .ZN FocusOut events. The X server automatically performs an .ZN UngrabKeyboard request if the event window for an active keyboard grab becomes not viewable. .SH DIAGNOSTICS .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XAllowEvents(__libmansuffix__), XGrabButton(__libmansuffix__), XGrabKey(__libmansuffix__), XGrabPointer(__libmansuffix__) .br \fI\*(xL\fP copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" DigilibX11-1.6.3/man/DoesBackingStore.man000064401431060000012000000000741247741723500175150ustar00alancstaff00002660200006.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__ libX11-1.6.3/man/XDrawLine.man000064401431060000012000000166541247741723500161770ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XDrawLine __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XDrawLine, XDrawLines, XDrawSegments, XSegment \- draw lines, polygons, and line structure .SH SYNTAX .HP int XDrawLine\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, GC \fIgc\fP\^, int \fIx1\fP\^, int \fIy1\fP\^, int \fIx2\fP\^, int \fIy2\fP\^); .HP int XDrawLines\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, GC \fIgc\fP\^, XPoint *\fIpoints\fP\^, int \fInpoints\fP\^, int \fImode\fP\^); .HP int XDrawSegments\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, GC \fIgc\fP\^, XSegment *\fIsegments\fP\^, int \fInsegments\fP\^); .SH ARGUMENTS .IP \fId\fP 1i Specifies the drawable. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIgc\fP 1i Specifies the GC. .IP \fImode\fP 1i Specifies the coordinate mode. You can pass .ZN CoordModeOrigin or .ZN CoordModePrevious . .IP \fInpoints\fP 1i Specifies the number of points in the array. .IP \fInsegments\fP 1i Specifies the number of segments in the array. .IP \fIpoints\fP 1i Specifies an array of points. .IP \fIsegments\fP 1i Specifies an array of segments. .IP \fIx1\fP 1i .br .ns .IP \fIy1\fP 1i .br .ns .IP \fIx2\fP 1i .br .ns .IP \fIy2\fP 1i Specify the points (x1, y1) and (x2, y2) to be connected. .SH DESCRIPTION The .ZN XDrawLine function uses the components of the specified GC to draw a line between the specified set of points (x1, y1) and (x2, y2). It does not perform joining at coincident endpoints. For any given line, .ZN XDrawLine does not draw a pixel more than once. If lines intersect, the intersecting pixels are drawn multiple times. .LP The .ZN XDrawLines function uses the components of the specified GC to draw npoints\-1 lines between each pair of points (point[i], point[i+1]) in the array of .ZN XPoint structures. It draws the lines in the order listed in the array. The lines join correctly at all intermediate points, and if the first and last points coincide, the first and last lines also join correctly. For any given line, .ZN XDrawLines does not draw a pixel more than once. If thin (zero line-width) lines intersect, the intersecting pixels are drawn multiple times. If wide lines intersect, the intersecting pixels are drawn only once, as though the entire .ZN PolyLine protocol request were a single, filled shape. .ZN CoordModeOrigin treats all coordinates as relative to the origin, and .ZN CoordModePrevious treats all coordinates after the first as relative to the previous point. .LP The .ZN XDrawSegments function draws multiple, unconnected lines. For each segment, .ZN XDrawSegments draws a line between (x1, y1) and (x2, y2). It draws the lines in the order listed in the array of .ZN XSegment structures and does not perform joining at coincident endpoints. For any given line, .ZN XDrawSegments does not draw a pixel more than once. If lines intersect, the intersecting pixels are drawn multiple times. .LP All three functions use these GC components: function, plane-mask, line-width, line-style, cap-style, fill-style, subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask. The .ZN XDrawLines function also uses the join-style GC component. All three functions also use these GC mode-dependent components: foreground, background, tile, stipple, tile-stipple-x-origin, tile-stipple-y-origin, dash-offset, and dash-list. .LP .ZN XDrawLine , .ZN XDrawLines , and .ZN XDrawSegments can generate .ZN BadDrawable , .ZN BadGC , and .ZN BadMatch errors. .ZN XDrawLines can also generate a .ZN BadValue error. .SH STRUCTURES The .ZN XSegment structure contains: .LP .Ds 0 typedef struct { short x1, y1, x2, y2; } XSegment; .De .LP All x and y members are signed integers. The width and height members are 16-bit unsigned integers. You should be careful not to generate coordinates and sizes out of the 16-bit ranges, because the protocol only has 16-bit fields for these values. .SH DIAGNOSTICS .TP 1i .ZN BadDrawable A value for a Drawable argument does not name a defined Window or Pixmap. .TP 1i .ZN BadGC A value for a GContext argument does not name a defined GContext. .TP 1i .ZN BadMatch An .ZN InputOnly window is used as a Drawable. .TP 1i .ZN BadMatch Some argument or pair of arguments has the correct type and range but fails to match in some other way required by the request. .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .SH "SEE ALSO" XDrawArc(__libmansuffix__), XDrawPoint(__libmansuffix__), XDrawRectangle(__libmansuffix__) .br \fI\*(xL\fP RTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION libX11-1.6.3/man/DoesSaveUnders.man000064401431060000012000000000741247741723500172210ustar00alancstaff00002660200006.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__ libX11-1.6.3/man/XDestroyWindowEvent.man000064401431060000012000000123241247741723500203030ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XDestroyWindowEvent __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XDestroyWindowEvent \- DestroyNotify event structure .SH STRUCTURES The structure for .ZN DestroyNotify events contains: .LP .Ds 0 typedef struct { int type; /\&* DestroyNotify */ unsigned long serial; /\&* # of last request processed by server */ Bool send_event; /\&* true if this came from a SendEvent request */ Display *display; /\&* Display the event was read from */ Window event; Window window; } XDestroyWindowEvent; .De .LP When you receive this event, the structure members are set as follows. .LP The type member is set to the event type constant name that uniquely identifies it. For example, when the X server reports a .ZN GraphicsExpose event to a client application, it sends an .ZN XGraphicsExposeEvent structure with the type member set to .ZN GraphicsExpose . The display member is set to a pointer to the display the event was read on. The send_event member is set to .ZN True if the event came from a .ZN SendEvent protocol request. The serial member is set from the serial number reported in the protocol but expanded from the 16-bit least-significant bits to a full 32-bit value. The window member is set to the window that is most useful to toolkit dispatchers. .LP The event member is set either to the destroyed window or to its parent, depending on whether .ZN StructureNotify or .ZN SubstructureNotify was selected. The window member is set to the window that is destroyed. .SH "SEE ALSO" XAnyEvent(__libmansuffix__), XButtonEvent(__libmansuffix__), XCreateWindowEvent(__libmansuffix__), XCirculateEvent(__libmansuffix__), XCirculateRequestEvent(__libmansuffix__), XColormapEvent(__libmansuffix__), XConfigureEvent(__libmansuffix__), XConfigureRequestEvent(__libmansuffix__), XCrossingEvent(__libmansuffix__), XErrorEvent(__libmansuffix__), XExposeEvent(__libmansuffix__), XFocusChangeEvent(__libmansuffix__), XGraphicsExposeEvent(__libmansuffix__), XGravityEvent(__libmansuffix__), XKeymapEvent(__libmansuffix__), XMapEvent(__libmansuffix__), XMapRequestEvent(__libmansuffix__), XPropertyEvent(__libmansuffix__), XReparentEvent(__libmansuffix__), XResizeRequestEvent(__libmansuffix__), XSelectionClearEvent(__libmansuffix__), XSelectionEvent(__libmansuffix__), XSelectionRequestEvent(__libmansuffix__), XUnmapEvent(__libmansuffix__), XVisibilityEvent(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XGraphicsExposeEvent.man000064401431060000012000000161561247741723500204150ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XGraphicsExposeEvent __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XGraphicsExposeEvent, XNoExposeEvent \- GraphicsExpose and NoExpose event structures .SH STRUCTURES The structures for .ZN GraphicsExpose and .ZN NoExpose events contain: .LP .Ds 0 typedef struct { int type; /\&* GraphicsExpose */ unsigned long serial; /\&* # of last request processed by server */ Bool send_event; /\&* true if this came from a SendEvent request */ Display *display; /\&* Display the event was read from */ Drawable drawable; int x, y; int width, height; int count; /\&* if nonzero, at least this many more */ int major_code; /\&* core is CopyArea or CopyPlane */ int minor_code; /\&* not defined in the core */ } XGraphicsExposeEvent; .De .LP .Ds 0 typedef struct { int type; /\&* NoExpose */ unsigned long serial; /\&* # of last request processed by server */ Bool send_event; /\&* true if this came from a SendEvent request */ Display *display; /\&* Display the event was read from */ Drawable drawable; int major_code; /\&* core is CopyArea or CopyPlane */ int minor_code; /\&* not defined in the core */ } XNoExposeEvent; .De .LP When you receive these events, their structure members are set as follows. .LP The type member is set to the event type constant name that uniquely identifies it. For example, when the X server reports a .ZN GraphicsExpose event to a client application, it sends an .ZN XGraphicsExposeEvent structure with the type member set to .ZN GraphicsExpose . The display member is set to a pointer to the display the event was read on. The send_event member is set to .ZN True if the event came from a .ZN SendEvent protocol request. The serial member is set from the serial number reported in the protocol but expanded from the 16-bit least-significant bits to a full 32-bit value. The window member is set to the window that is most useful to toolkit dispatchers. .LP Both structures have these common members: drawable, major_code, and minor_code. The drawable member is set to the drawable of the destination region on which the graphics request was to be performed. The major_code member is set to the graphics request initiated by the client and can be either .ZN X_CopyArea or .ZN X_CopyPlane . If it is .ZN X_CopyArea , a call to .ZN XCopyArea initiated the request. If it is .ZN X_CopyPlane , a call to .ZN XCopyPlane initiated the request. These constants are defined in .hN X11/Xproto.h . The minor_code member, like the major_code member, indicates which graphics request was initiated by the client. However, the minor_code member is not defined by the core X protocol and will be zero in these cases, although it may be used by an extension. .LP The .ZN XGraphicsExposeEvent structure has these additional members: x, y, width, height, and count. The x and y members are set to the coordinates relative to the drawable's origin and indicate the upper-left corner of the rectangle. The width and height members are set to the size (extent) of the rectangle. The count member is set to the number of .ZN GraphicsExpose events to follow. If count is zero, no more .ZN GraphicsExpose events follow for this window. However, if count is nonzero, at least that number of .ZN GraphicsExpose events (and possibly more) are to follow for this window. .SH "SEE ALSO" XAnyEvent(__libmansuffix__), XButtonEvent(__libmansuffix__), XCreateWindowEvent(__libmansuffix__), XCirculateEvent(__libmansuffix__), XCirculateRequestEvent(__libmansuffix__), XColormapEvent(__libmansuffix__), XConfigureEvent(__libmansuffix__), XConfigureRequestEvent(__libmansuffix__), XCopyArea(__libmansuffix__), XCrossingEvent(__libmansuffix__), XDestroyWindowEvent(__libmansuffix__), XErrorEvent(__libmansuffix__), XExposeEvent(__libmansuffix__), XFocusChangeEvent(__libmansuffix__), XGravityEvent(__libmansuffix__), XKeymapEvent(__libmansuffix__), XMapEvent(__libmansuffix__), XMapRequestEvent(__libmansuffix__), XPropertyEvent(__libmansuffix__), XReparentEvent(__libmansuffix__), XResizeRequestEvent(__libmansuffix__), XSelectionClearEvent(__libmansuffix__), XSelectionEvent(__libmansuffix__), XSelectionRequestEvent(__libmansuffix__), XUnmapEvent(__libmansuffix__), XVisibilityEvent(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XCopyGC.man000064401431060000012000000000631247741723500156010ustar00alancstaff00002660200006.so man__libmansuffix__/XCreateGC.__libmansuffix__ libX11-1.6.3/man/XAllocClassHint.man000064401431060000012000000143661247741723500173330ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XAllocClassHint __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XAllocClassHint, XSetClassHint, XGetClassHint, XClassHint \- allocate class hints structure and set or read a window's WM_CLASS property .SH SYNTAX .HP XClassHint *XAllocClassHint\^(void\^); .HP XSetClassHint\^(\^Display *\fIdisplay\fP, Window \fIw\fP, XClassHint *\fIclass_hints\fP\^); .HP Status XGetClassHint\^(\^Display *\fIdisplay\fP, Window \fIw\fP, XClassHint *\fIclass_hints_return\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIclass_hints\fP 1i Specifies the .ZN XClassHint structure that is to be used. .IP \fIclass_hints_return\fP 1i Returns the .ZN XClassHint structure. .IP \fIw\fP 1i Specifies the window. .SH DESCRIPTION The .ZN XAllocClassHint function allocates and returns a pointer to a .ZN XClassHint structure. Note that the pointer fields in the .ZN XClassHint structure are initially set to NULL. If insufficient memory is available, .ZN XAllocClassHint returns NULL. To free the memory allocated to this structure, use .ZN XFree . .LP The .ZN XSetClassHint function sets the class hint for the specified window. If the strings are not in the Host Portable Character Encoding, the result is implementation-dependent. .LP .ZN XSetClassHint can generate .ZN BadAlloc and .ZN BadWindow errors. .LP The .ZN XGetClassHint function returns the class hint of the specified window to the members of the supplied structure. If the data returned by the server is in the Latin Portable Character Encoding, then the returned strings are in the Host Portable Character Encoding. Otherwise, the result is implementation-dependent. It returns a nonzero status on success; otherwise, it returns a zero status. To free res_name and res_class when finished with the strings, use .ZN XFree on each individually. .LP .ZN XGetClassHint can generate a .ZN BadWindow error. .SH PROPERTIES .TP 1i \s-1WM_CLASS\s+1 Set by application programs to allow window and session managers to obtain the application's resources from the resource database. .SH STRUCTURES The .ZN XClassHint structure contains: .LP .IN "XClassHint" "" "@DEF@" .Ds 0 typedef struct { char *res_name; char *res_class; } XClassHint; .LP The res_name member contains the application name, and the res_class member contains the application class. Note that the name set in this property may differ from the name set as WM_NAME. That is, WM_NAME specifies what should be displayed in the title bar and, therefore, can contain temporal information (for example, the name of a file currently in an editor's buffer). On the other hand, the name specified as part of WM_CLASS is the formal name of the application that should be used when retrieving the application's resources from the resource database. .SH DIAGNOSTICS .TP 1i .ZN BadAlloc The server failed to allocate the requested resource or server memory. .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XAllocIconSize(__libmansuffix__), XAllocSizeHints(__libmansuffix__), XAllocWMHints(__libmansuffix__), XFree(__libmansuffix__), XSetCommand(__libmansuffix__), XSetTransientForHint(__libmansuffix__), XSetTextProperty(__libmansuffix__), XSetWMClientMachine(__libmansuffix__), XSetWMColormapWindows(__libmansuffix__), XSetWMIconName(__libmansuffix__), XSetWMName(__libmansuffix__), XSetWMProperties(__libmansuffix__), XSetWMProtocols(__libmansuffix__), XStringListToTextProperty(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XSetDashes.man000064401431060000012000000000741247741723500163420ustar00alancstaff00002660200006.so man__libmansuffix__/XSetLineAttributes.__libmansuffix__ libX11-1.6.3/man/XcmsCIELabQueryMinL.man000064401431060000012000000000751247741723500200100ustar00alancstaff00002660200006.so man__libmansuffix__/XcmsCIELabQueryMaxC.__libmansuffix__ libX11-1.6.3/man/XForceScreenSaver.man000064401431060000012000000000711247741723500176530ustar00alancstaff00002660200006.so man__libmansuffix__/XSetScreenSaver.__libmansuffix__ libX11-1.6.3/man/XDrawArc.man000064401431060000012000000216571247741723500160140ustar00alancstaff00002660200006'\" e .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .de EX .sp .nf .ft CW .. .de EE .ft R .fi .sp .. '\" e .TH XDrawArc __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XDrawArc, XDrawArcs, XArc \- draw arcs and arc structure .SH SYNTAX .HP int XDrawArc\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, GC \fIgc\fP\^, int \fIx\fP\^, int \fIy\fP\^, unsigned int \fIwidth\fP\^, unsigned int \fIheight\fP\^, int \fIangle1\fP\^, int \fIangle2\fP\^); .HP int XDrawArcs\^(\^Display *\fIdisplay\fP\^, Drawable \fId\fP\^, GC \fIgc\fP\^, XArc *\fIarcs\fP\^, int \fInarcs\fP\^); .SH ARGUMENTS .IP \fIangle1\fP 1i Specifies the start of the arc relative to the three-o'clock position from the center, in units of degrees * 64. .IP \fIangle2\fP 1i Specifies the path and extent of the arc relative to the start of the arc, in units of degrees * 64. .IP \fIarcs\fP 1i Specifies an array of arcs. .IP \fId\fP 1i Specifies the drawable. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIgc\fP 1i Specifies the GC. .IP \fInarcs\fP 1i Specifies the number of arcs in the array. .ds Wh , which are the major and minor axes of the arc .IP \fIwidth\fP 1i .br .ns .IP \fIheight\fP 1i Specify the width and height\*(Wh. .ds Xy , which are relative to the origin of the drawable \ and specify the upper-left corner of the bounding rectangle .IP \fIx\fP 1i .br .ns .IP \fIy\fP 1i Specify the x and y coordinates\*(Xy. .SH DESCRIPTION .EQ delim %% .EN .ZN XDrawArc draws a single circular or elliptical arc, and .ZN XDrawArcs draws multiple circular or elliptical arcs. Each arc is specified by a rectangle and two angles. The center of the circle or ellipse is the center of the rectangle, and the major and minor axes are specified by the width and height. Positive angles indicate counterclockwise motion, and negative angles indicate clockwise motion. If the magnitude of angle2 is greater than 360 degrees, .ZN XDrawArc or .ZN XDrawArcs truncates it to 360 degrees. .LP For an arc specified as %[ ~x, ~y, ~width , ~height, ~angle1, ~angle2 ]%, the origin of the major and minor axes is at % [ x +^ {width over 2} , ~y +^ {height over 2} ]%, and the infinitely thin path describing the entire circle or ellipse intersects the horizontal axis at % [ x, ~y +^ {height over 2} ]% and % [ x +^ width , ~y +^ { height over 2 }] % and intersects the vertical axis at % [ x +^ { width over 2 } , ~y ]% and % [ x +^ { width over 2 }, ~y +^ height ]%. These coordinates can be fractional and so are not truncated to discrete coordinates. The path should be defined by the ideal mathematical path. For a wide line with line-width lw, the bounding outlines for filling are given by the two infinitely thin paths consisting of all points whose perpendicular distance from the path of the circle/ellipse is equal to lw/2 (which may be a fractional value). The cap-style and join-style are applied the same as for a line corresponding to the tangent of the circle/ellipse at the endpoint. .LP For an arc specified as % [ ~x, ~y, ~width, ~height, ~angle1, ~angle2 ]%, the angles must be specified in the effectively skewed coordinate system of the ellipse (for a circle, the angles and coordinate systems are identical). The relationship between these angles and angles expressed in the normal coordinate system of the screen (as measured with a protractor) is as follows: .LP .Ds % roman "skewed-angle" ~ = ~ atan left ( tan ( roman "normal-angle" ) * width over height right ) +^ adjust% .De .LP The skewed-angle and normal-angle are expressed in radians (rather than in degrees scaled by 64) in the range % [ 0 , ~2 pi ]% and where atan returns a value in the range % [ - pi over 2 , ~pi over 2 ] % and adjust is: .LP .TS l l. %0% for normal-angle in the range % [ 0 , ~pi over 2 ]% %pi% for normal-angle in the range % [ pi over 2 , ~{3 pi} over 2 ]% %2 pi% for normal-angle in the range % [ {3 pi} over 2 , ~2 pi ]% .TE .LP For any given arc, .ZN XDrawArc and .ZN XDrawArcs do not draw a pixel more than once. If two arcs join correctly and if the line-width is greater than zero and the arcs intersect, .ZN XDrawArc and .ZN XDrawArcs do not draw a pixel more than once. Otherwise, the intersecting pixels of intersecting arcs are drawn multiple times. Specifying an arc with one endpoint and a clockwise extent draws the same pixels as specifying the other endpoint and an equivalent counterclockwise extent, except as it affects joins. .LP If the last point in one arc coincides with the first point in the following arc, the two arcs will join correctly. If the first point in the first arc coincides with the last point in the last arc, the two arcs will join correctly. By specifying one axis to be zero, a horizontal or vertical line can be drawn. Angles are computed based solely on the coordinate system and ignore the aspect ratio. .LP Both functions use these GC components: function, plane-mask, line-width, line-style, cap-style, join-style, fill-style, subwindow-mode, clip-x-origin, clip-y-origin, and clip-mask. They also use these GC mode-dependent components: foreground, background, tile, stipple, tile-stipple-x-origin, tile-stipple-y-origin, dash-offset, and dash-list. .LP .ZN XDrawArc and .ZN XDrawArcs can generate .ZN BadDrawable , .ZN BadGC , and .ZN BadMatch errors. .SH STRUCTURES The .ZN XArc structure contains: .LP .EX typedef struct { short x, y; unsigned short width, height; short angle1, angle2; /\&* Degrees * 64 */ } XArc; .EE .LP All x and y members are signed integers. The width and height members are 16-bit unsigned integers. You should be careful not to generate coordinates and sizes out of the 16-bit ranges, because the protocol only has 16-bit fields for these values. .SH DIAGNOSTICS .TP 1i .ZN BadDrawable A value for a Drawable argument does not name a defined Window or Pixmap. .TP 1i .ZN BadGC A value for a GContext argument does not name a defined GContext. .TP 1i .ZN BadMatch An .ZN InputOnly window is used as a Drawable. .TP 1i .ZN BadMatch Some argument or pair of arguments has the correct type and range but fails to match in some other way required by the request. .SH "SEE ALSO" XDrawLine(__libmansuffix__), XDrawPoint(__libmansuffix__), XDrawRectangle(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XSelectionRequestEvent.man000064401431060000012000000133041247741723500207570ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XSelectionRequestEvent __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XSelectionRequestEvent \- SelectionRequest event structure .SH STRUCTURES The structure for .ZN SelectionRequest events contains: .LP .Ds 0 typedef struct { int type; /\&* SelectionRequest */ unsigned long serial; /\&* # of last request processed by server */ Bool send_event; /\&* true if this came from a SendEvent request */ Display *display; /\&* Display the event was read from */ Window owner; Window requestor; Atom selection; Atom target; Atom property; Time time; } XSelectionRequestEvent; .De .LP When you receive this event, the structure members are set as follows. .LP The type member is set to the event type constant name that uniquely identifies it. For example, when the X server reports a .ZN GraphicsExpose event to a client application, it sends an .ZN XGraphicsExposeEvent structure with the type member set to .ZN GraphicsExpose . The display member is set to a pointer to the display the event was read on. The send_event member is set to .ZN True if the event came from a .ZN SendEvent protocol request. The serial member is set from the serial number reported in the protocol but expanded from the 16-bit least-significant bits to a full 32-bit value. The window member is set to the window that is most useful to toolkit dispatchers. .LP The owner member is set to the window that was specified by the current owner in its .ZN XSetSelectionOwner call. The requestor member is set to the window requesting the selection. The selection member is set to the atom that names the selection. For example, PRIMARY is used to indicate the primary selection. The target member is set to the atom that indicates the type the selection is desired in. The property member can be a property name or .ZN None . The time member is set to the timestamp or .ZN CurrentTime value from the .ZN ConvertSelection request. .SH "SEE ALSO" XAnyEvent(__libmansuffix__), XButtonEvent(__libmansuffix__), XCreateWindowEvent(__libmansuffix__), XCirculateEvent(__libmansuffix__), XCirculateRequestEvent(__libmansuffix__), XColormapEvent(__libmansuffix__), XConfigureEvent(__libmansuffix__), XConfigureRequestEvent(__libmansuffix__), XCrossingEvent(__libmansuffix__), XDestroyWindowEvent(__libmansuffix__), XErrorEvent(__libmansuffix__), XExposeEvent(__libmansuffix__), XFocusChangeEvent(__libmansuffix__), XGraphicsExposeEvent(__libmansuffix__), XGravityEvent(__libmansuffix__), XKeymapEvent(__libmansuffix__), XMapEvent(__libmansuffix__), XMapRequestEvent(__libmansuffix__), XPropertyEvent(__libmansuffix__), XReparentEvent(__libmansuffix__), XResizeRequestEvent(__libmansuffix__), XSelectionClearEvent(__libmansuffix__), XSelectionEvent(__libmansuffix__), XSetSelectionOwner(__libmansuffix__), XUnmapEvent(__libmansuffix__), XVisibilityEvent(__libmansuffix__) .br \fI\*(xL\fP e t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XSelectionRequestEvent __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XSelectionRequestEvent \- SelectionRequest event structure .SH STRUCTURES The structure for .ZN SelectionRequest events colibX11-1.6.3/man/XFreeColormap.man000064401431060000012000000000711247741723500170320ustar00alancstaff00002660200006.so man__libmansuffix__/XCreateColormap.__libmansuffix__ libX11-1.6.3/man/XcmsCIELabQueryMaxL.man000064401431060000012000000000751247741723500200120ustar00alancstaff00002660200006.so man__libmansuffix__/XcmsCIELabQueryMaxC.__libmansuffix__ libX11-1.6.3/man/XTextProperty.man000064401431060000012000000001031247741723500171410ustar00alancstaff00002660200006.so man__libmansuffix__/XStringListToTextProperty.__libmansuffix__ libX11-1.6.3/man/XwcTextPropertyToTextList.man000064401431060000012000000001031247741723500214770ustar00alancstaff00002660200006.so man__libmansuffix__/XmbTextListToTextProperty.__libmansuffix__ libX11-1.6.3/man/XcmsColor.man000064401431060000012000000122551247741723500162440ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .de EX .sp .nf .ft CW .. .de EE .ft R .fi .sp .. .TH XcmsColor __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XcmsColor, XcmsRGB, XcmsRGBi, XcmsCIEXYZ, XcmsCIEuvY, XcmsCIExyY, XcmsCIELab, XcmsCIELuv, XcmsTekHVC, XcmsPad \- Xcms color structure .SH STRUCTURES The structure for .ZN XcmsColor contains: .LP .EX typedef unsigned long XcmsColorFormat; /\&* Color Specification Format */ typedef struct { union { XcmsRGB RGB; XcmsRGBi RGBi; XcmsCIEXYZ CIEXYZ; XcmsCIEuvY CIEuvY; XcmsCIExyY CIExyY; XcmsCIELab CIELab; XcmsCIELuv CIELuv; XcmsTekHVC TekHVC; XcmsPad Pad; } spec; unsigned long pixel; XcmsColorFormat format; } XcmsColor; /\&* Xcms Color Structure */ .EE .LP .EX typedef double XcmsFloat; typedef struct { unsigned short red; /\&* 0x0000 to 0xffff */ unsigned short green; /\&* 0x0000 to 0xffff */ unsigned short blue; /\&* 0x0000 to 0xffff */ } XcmsRGB; /\&* RGB Device */ .EE .LP .EX typedef struct { XcmsFloat red; /\&* 0.0 to 1.0 */ XcmsFloat green; /\&* 0.0 to 1.0 */ XcmsFloat blue; /\&* 0.0 to 1.0 */ } XcmsRGBi; /\&* RGB Intensity */ .EE .LP .EX typedef struct { XcmsFloat X; XcmsFloat Y; /\&* 0.0 to 1.0 */ XcmsFloat Z; } XcmsCIEXYZ; /\&* CIE XYZ */ .EE .LP .EX typedef struct { XcmsFloat u_prime; /\&* 0.0 to ~0.6 */ XcmsFloat v_prime; /\&* 0.0 to ~0.6 */ XcmsFloat Y; /\&* 0.0 to 1.0 */ } XcmsCIEuvY; /\&* CIE u'v'Y */ .EE .LP .EX typedef struct { XcmsFloat x; /\&* 0.0 to ~.75 */ XcmsFloat y; /\&* 0.0 to ~.85 */ XcmsFloat Y; /\&* 0.0 to 1.0 */ } XcmsCIExyY; /\&* CIE xyY */ .EE .LP .EX typedef struct { XcmsFloat L_star; /\&* 0.0 to 100.0 */ XcmsFloat a_star; XcmsFloat b_star; } XcmsCIELab; /\&* CIE L*a*b* */ .EE .LP .EX typedef struct { XcmsFloat L_star; /\&* 0.0 to 100.0 */ XcmsFloat u_star; XcmsFloat v_star; } XcmsCIELuv; /\&* CIE L*u*v* */ .EE .LP .EX typedef struct { XcmsFloat H; /\&* 0.0 to 360.0 */ XcmsFloat V; /\&* 0.0 to 100.0 */ XcmsFloat C; /\&* 0.0 to 100.0 */ } XcmsTekHVC; /\&* TekHVC */ .EE .LP .EX typedef struct { XcmsFloat pad0; XcmsFloat pad1; XcmsFloat pad2; XcmsFloat pad3; } XcmsPad; /\&* four doubles */ .EE .SH DESCRIPTION The .ZN XcmsColor structure contains a union of substructures, each supporting color specification encoding for a particular color space. .SH "SEE ALSO" XcmsAllocColor(__libmansuffix__), XcmsStoreColor(__libmansuffix__), XcmsConvertColors(__libmansuffix__), .LP \fI\*(xL\fP libX11-1.6.3/man/XStoreBuffer.man000064401431060000012000000000651247741723500167050ustar00alancstaff00002660200006.so man__libmansuffix__/XStoreBytes.__libmansuffix__ libX11-1.6.3/man/XTextItem.man000064401431060000012000000000631247741723500162200ustar00alancstaff00002660200006.so man__libmansuffix__/XDrawText.__libmansuffix__ libX11-1.6.3/man/XListExtensions.man000064401431060000012000000000711247741723500174470ustar00alancstaff00002660200006.so man__libmansuffix__/XQueryExtension.__libmansuffix__ libX11-1.6.3/man/XCreateFontSet.man000064401431060000012000000255741247741723500172010ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XCreateFontSet __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XCreateFontSet, XFreeFontSet \- create and free an international text drawing font set .SH SYNTAX .HP XFontSet XCreateFontSet\^(\^Display *\fIdisplay\fP\^, char *\fIbase_font_name_list\fP\^, char ***\fImissing_charset_list_return\fP\^, int *\fImissing_charset_count_return\fP\^, char **\fIdef_string_return\fP\^); .HP void XFreeFontSet\^(\^Display *\fIdisplay\fP\^, XFontSet \fIfont_set\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIbase_font_name_list\fP 1i Specifies the base font names. .IP \fIdef_string_return\fP 1i Returns the string drawn for missing charsets. .IP \fIfont_set\fP 1i Specifies the font set. .IP \fImissing_charset_count_return\fP 1i Returns the number of missing charsets. .IP \fImissing_charset_list_return\fP 1i Returns the missing charsets. .SH DESCRIPTION The .ZN XCreateFontSet function creates a font set for the specified display. The font set is bound to the current locale when .ZN XCreateFontSet is called. The font set may be used in subsequent calls to obtain font and character information and to image text in the locale of the font set. .LP The base_font_name_list argument is a list of base font names that Xlib uses to load the fonts needed for the locale. The base font names are a comma-separated list. The string is null-terminated and is assumed to be in the Host Portable Character Encoding; otherwise, the result is implementation-dependent. White space immediately on either side of a separating comma is ignored. .LP Use of XLFD font names permits Xlib to obtain the fonts needed for a variety of locales from a single locale-independent base font name. The single base font name should name a family of fonts whose members are encoded in the various charsets needed by the locales of interest. .LP An XLFD base font name can explicitly name a charset needed for the locale. This allows the user to specify an exact font for use with a charset required by a locale, fully controlling the font selection. .LP If a base font name is not an XLFD name, Xlib will attempt to obtain an XLFD name from the font properties for the font. If this action is successful in obtaining an XLFD name, the .ZN XBaseFontNameListOfFontSet function will return this XLFD name instead of the client-supplied name. .LP Xlib uses the following algorithm to select the fonts that will be used to display text with the .ZN XFontSet . .LP For each font charset required by the locale, the base font name list is searched for the first appearance of one of the following cases that names a set of fonts that exist at the server: .IP \(bu 5 The first XLFD-conforming base font name that specifies the required charset or a superset of the required charset in its .ZN CharSetRegistry and .ZN CharSetEncoding fields. The implementation may use a base font name whose specified charset is a superset of the required charset, for example, an ISO8859-1 font for an ASCII charset. .IP \(bu 5 The first set of one or more XLFD-conforming base font names that specify one or more charsets that can be remapped to support the required charset. The Xlib implementation may recognize various mappings from a required charset to one or more other charsets and use the fonts for those charsets. For example, JIS Roman is ASCII with tilde and backslash replaced by yen and overbar; Xlib may load an ISO8859-1 font to support this character set if a JIS Roman font is not available. .IP \(bu 5 The first XLFD-conforming font name or the first non-XLFD font name for which an XLFD font name can be obtained, combined with the required charset (replacing the .ZN CharSetRegistry and .ZN CharSetEncoding fields in the XLFD font name). As in case 1, the implementation may use a charset that is a superset of the required charset. .IP \(bu 5 The first font name that can be mapped in some implementation-dependent manner to one or more fonts that support imaging text in the charset. .LP For example, assume that a locale required the charsets: .LP .Ds 0 ISO8859-1 JISX0208.1983 JISX0201.1976 GB2312-1980.0 .De .LP The user could supply a base_font_name_list that explicitly specifies the charsets, ensuring that specific fonts are used if they exist. For example: .LP .Ds 0 "-JIS-Fixed-Medium-R-Normal--26-180-100-100-C-240-JISX0208.1983-0,\\ -JIS-Fixed-Medium-R-Normal--26-180-100-100-C-120-JISX0201.1976-0,\\ -GB-Fixed-Medium-R-Normal--26-180-100-100-C-240-GB2312-1980.0,\\ -Adobe-Courier-Bold-R-Normal--25-180-75-75-M-150-ISO8859-1" .De .LP Alternatively, the user could supply a base_font_name_list that omits the charsets, letting Xlib select font charsets required for the locale. For example: .LP .Ds 0 "-JIS-Fixed-Medium-R-Normal--26-180-100-100-C-240,\\ -JIS-Fixed-Medium-R-Normal--26-180-100-100-C-120,\\ -GB-Fixed-Medium-R-Normal--26-180-100-100-C-240,\\ -Adobe-Courier-Bold-R-Normal--25-180-100-100-M-150" .De .LP Alternatively, the user could simply supply a single base font name that allows Xlib to select from all available fonts that meet certain minimum XLFD property requirements. For example: .LP .Ds 0 "-*-*-*-R-Normal--*-180-100-100-*-*" .De .LP If .ZN XCreateFontSet is unable to create the font set, either because there is insufficient memory or because the current locale is not supported, .ZN XCreateFontSet returns NULL, missing_charset_list_return is set to NULL, and missing_charset_count_return is set to zero. If fonts exist for all of the charsets required by the current locale, .ZN XCreateFontSet returns a valid .ZN XFontSet , missing_charset_list_return is set to NULL, and missing_charset_count_return is set to zero. .LP If no font exists for one or more of the required charsets, .ZN XCreateFontSet sets missing_charset_list_return to a list of one or more null-terminated charset names for which no font exists and sets missing_charset_count_return to the number of missing fonts. The charsets are from the list of the required charsets for the encoding of the locale and do not include any charsets to which Xlib may be able to remap a required charset. .LP If no font exists for any of the required charsets or if the locale definition in Xlib requires that a font exist for a particular charset and a font is not found for that charset, .ZN XCreateFontSet returns NULL. Otherwise, .ZN XCreateFontSet returns a valid .ZN XFontSet to font_set. .LP When an Xmb/wc drawing or measuring function is called with an .ZN XFontSet that has missing charsets, some characters in the locale will not be drawable. If def_string_return is non-NULL, .ZN XCreateFontSet returns a pointer to a string that represents the glyphs that are drawn with this .ZN XFontSet when the charsets of the available fonts do not include all font glyphs required to draw a codepoint. The string does not necessarily consist of valid characters in the current locale and is not necessarily drawn with the fonts loaded for the font set, but the client can draw and measure the default glyphs by including this string in a string being drawn or measured with the .ZN XFontSet . .LP If the string returned to def_string_return is the empty string ("\^"), no glyphs are drawn, and the escapement is zero. The returned string is null-terminated. It is owned by Xlib and should not be modified or freed by the client. It will be freed by a call to .ZN XFreeFontSet with the associated .ZN XFontSet . Until freed, its contents will not be modified by Xlib. .LP The client is responsible for constructing an error message from the missing charset and default string information and may choose to continue operation in the case that some fonts did not exist. .LP The returned .ZN XFontSet and missing charset list should be freed with .ZN XFreeFontSet and .ZN XFreeStringList , respectively. The client-supplied base_font_name_list may be freed by the client after calling .ZN XCreateFontSet . .LP The .ZN XFreeFontSet function frees the specified font set. The associated base font name list, font name list, .ZN XFontStruct list, and .ZN XFontSetExtents , if any, are freed. .SH "SEE ALSO" XExtentsofFontSet(__libmansuffix__), XFontsOfFontSet(__libmansuffix__), XFontSetExtents(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/MaxCmapsOfScreen.man000064401431060000012000000000741247741723500174650ustar00alancstaff00002660200006.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__ libX11-1.6.3/man/XQueryBestCursor.man000064401431060000012000000000701247741723500175740ustar00alancstaff00002660200006.so man__libmansuffix__/XRecolorCursor.__libmansuffix__ libX11-1.6.3/man/XSubtractRegion.man000064401431060000012000000000721247741723500174100ustar00alancstaff00002660200006.so man__libmansuffix__/XIntersectRegion.__libmansuffix__ libX11-1.6.3/man/XRectInRegion.man000064401431060000012000000000661247741723500170100ustar00alancstaff00002660200006.so man__libmansuffix__/XEmptyRegion.__libmansuffix__ libX11-1.6.3/man/XUngrabPointer.man000064401431060000012000000000661247741723500172370ustar00alancstaff00002660200006.so man__libmansuffix__/XGrabPointer.__libmansuffix__ libX11-1.6.3/man/XrmQPutStringResource.man000064401431060000012000000000701247741723500206020ustar00alancstaff00002660200006.so man__libmansuffix__/XrmPutResource.__libmansuffix__ libX11-1.6.3/man/XCreatePixmapFromBitmapData.man000064401431060000012000000000711247741723500216110ustar00alancstaff00002660200006.so man__libmansuffix__/XReadBitmapFile.__libmansuffix__ libX11-1.6.3/man/XGetOMValues.man000064401431060000012000000000611247741723500166060ustar00alancstaff00002660200006.so man__libmansuffix__/XOpenOM.__libmansuffix__ libX11-1.6.3/man/XDisplayOfIM.man000064401431060000012000000000611247741723500165730ustar00alancstaff00002660200006.so man__libmansuffix__/XOpenIM.__libmansuffix__ libX11-1.6.3/man/XQueryTree.man000064401431060000012000000105531247741723500164070ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XQueryTree __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XQueryTree \- query window tree information .SH SYNTAX .HP Status XQueryTree\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, Window *\fIroot_return\fP\^, Window *\fIparent_return\fP\^, Window **\fIchildren_return\fP\^, unsigned int *\fInchildren_return\fP\^); .SH ARGUMENTS .IP \fIchildren_return\fP 1i Returns the list of children. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fInchildren_return\fP 1i Returns the number of children. .IP \fIparent_return\fP 1i Returns the parent window. .IP \fIroot_return\fP 1i Returns the root window. .ds Wi whose list of children, root, parent, and number of children \ you want to obtain .IP \fIw\fP 1i Specifies the window \*(Wi. .SH DESCRIPTION The .ZN XQueryTree function returns the root ID, the parent window ID, a pointer to the list of children windows (NULL when there are no children), and the number of children in the list for the specified window. The children are listed in current stacking order, from bottom-most (first) to top-most (last). .ZN XQueryTree returns zero if it fails and nonzero if it succeeds. To free a non-NULL children list when it is no longer needed, use .ZN XFree . .LP .ZN XQueryTree can generate a .ZN BadWindow error. .SH BUGS This really should return a screen *, not a root window ID. .SH DIAGNOSTICS .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XFree(__libmansuffix__), XGetWindowAttributes(__libmansuffix__), XQueryPointer(__libmansuffix__) .br \fI\*(xL\fP n .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions ColibX11-1.6.3/man/XLoadQueryFont.man000064401431060000012000000000631247741723500172110ustar00alancstaff00002660200006.so man__libmansuffix__/XLoadFont.__libmansuffix__ libX11-1.6.3/man/XListFonts.man000064401431060000012000000157371247741723500164200ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XListFonts __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XListFonts, XFreeFontNames, XListFontsWithInfo, XFreeFontInfo \- obtain or free font names and information .SH SYNTAX .HP char **XListFonts\^(\^Display *\^\fIdisplay\fP\^, char *\^\fIpattern\fP\^, int \fImaxnames\fP\^, int *\^\fIactual_count_return\fP\^); .HP int XFreeFontNames\^(\^char *\fIlist\fP\^[\^]\^); .HP char **XListFontsWithInfo\^(\^Display *\fIdisplay\fP\^, char *\fIpattern\fP\^, int \fImaxnames\fP\^, int *\fIcount_return\fP\^, XFontStruct **\fIinfo_return\fP\^); .HP int XFreeFontInfo(\^char **\fInames\fP\^, XFontStruct *\fIfree_info\fP, int \fIactual_count\fP\^); .SH ARGUMENTS .IP \fIactual_count\fP 1i Specifies the actual number of font names. .IP \fIactual_count_return\fP 1i Returns the actual number of font names. .IP \fIcount_return\fP 1i Returns the actual number of matched font names. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIinfo_return\fP 1i Returns the font information. .IP \fIfree_info\fP 1i Specifies the font information. .IP \fIlist\fP 1i Specifies the array of strings you want to free. .IP \fImaxnames\fP 1i Specifies the maximum number of names to be returned. .IP \fInames\fP 1i Specifies the list of font names. .IP \fIpattern\fP 1i Specifies the null-terminated pattern string that can contain wildcard characters. .SH DESCRIPTION The .ZN XListFonts function returns an array of available font names (as controlled by the font search path; see .ZN XSetFontPath ) that match the string you passed to the pattern argument. The pattern string can contain any characters, but each asterisk (*) is a wildcard for any number of characters, and each question mark (?) is a wildcard for a single character. If the pattern string is not in the Host Portable Character Encoding, the result is implementation-dependent. Use of uppercase or lowercase does not matter. Each returned string is null-terminated. If the data returned by the server is in the Latin Portable Character Encoding, then the returned strings are in the Host Portable Character Encoding. Otherwise, the result is implementation-dependent. If there are no matching font names, .ZN XListFonts returns NULL. The client should call .ZN XFreeFontNames when finished with the result to free the memory. .LP The .ZN XFreeFontNames function frees the array and strings returned by .ZN XListFonts or .ZN XListFontsWithInfo . .LP The .ZN XListFontsWithInfo function returns a list of font names that match the specified pattern and their associated font information. The list of names is limited to size specified by maxnames. The information returned for each font is identical to what .ZN XLoadQueryFont would return except that the per-character metrics are not returned. The pattern string can contain any characters, but each asterisk (*) is a wildcard for any number of characters, and each question mark (?) is a wildcard for a single character. If the pattern string is not in the Host Portable Character Encoding, the result is implementation-dependent. Use of uppercase or lowercase does not matter. Each returned string is null-terminated. If the data returned by the server is in the Latin Portable Character Encoding, then the returned strings are in the Host Portable Character Encoding. Otherwise, the result is implementation-dependent. If there are no matching font names, .ZN XListFontsWithInfo returns NULL. .LP To free only the allocated name array, the client should call .ZN XFreeFontNames . To free both the name array and the font information array or to free just the font information array, the client should call .ZN XFreeFontInfo . .LP The .ZN XFreeFontInfo function frees a font structure or an array of font structures and optionally an array of font names. If NULL is passed for names, no font names are freed. If a font structure for an open font (returned by .ZN XLoadQueryFont ) is passed, the structure is freed, but the font is not closed; use .ZN XUnloadFont to close the font. .LP Note that .ZN XListFontsWithInfo is not thread-safe. If other threads make X requests on the same .ZN Display , then this function's behavior is undefined. .SH "SEE ALSO" XLoadFont(__libmansuffix__), XSetFontPath(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/CellsOfScreen.man000064401431060000012000000000741247741723500170160ustar00alancstaff00002660200006.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__ libX11-1.6.3/man/XCreateWindow.man000064401431060000012000000264661247741723500170670ustar00alancstaff00002660200006'\" t .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 '\" t .TH XCreateWindow __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XCreateWindow, XCreateSimpleWindow, XSetWindowAttributes \- create windows and window attributes structure .SH SYNTAX .HP Window XCreateWindow\^(\^Display *\fIdisplay\fP\^, Window \fIparent\fP\^, int \fIx\fP\^, int \fIy\fP\^, unsigned int \fIwidth\fP\^, unsigned int \fIheight\fP\^, unsigned int \fIborder_width\fP\^, int \fIdepth\fP\^, unsigned int \fIclass\fP\^, Visual *\fIvisual\fP\^, unsigned long \fIvaluemask\fP\^, XSetWindowAttributes *\fIattributes\fP\^); .HP Window XCreateSimpleWindow\^(\^Display *\fIdisplay\fP\^, Window \fIparent\fP\^, int \fIx\fP\^, int \fIy\fP\^, unsigned int \fIwidth\fP\^, unsigned int \fIheight\fP\^, unsigned int \fIborder_width\fP\^, unsigned long \fIborder\fP\^, unsigned long \fIbackground\fP\^); .SH ARGUMENTS .IP \fIattributes\fP 1i Specifies the structure from which the values (as specified by the value mask) are to be taken. The value mask should have the appropriate bits set to indicate which attributes have been set in the structure. .IP \fIbackground\fP 1i Specifies the background pixel value of the window. .IP \fIborder\fP 1i Specifies the border pixel value of the window. .IP \fIborder_width\fP 1i Specifies the width of the created window's border in pixels. .IP \fIclass\fP 1i Specifies the created window's class. You can pass .ZN InputOutput , .ZN InputOnly , or .ZN CopyFromParent . A class of .ZN CopyFromParent means the class is taken from the parent. .IP \fIdepth\fP 1i Specifies the window's depth. A depth of .ZN CopyFromParent means the depth is taken from the parent. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIparent\fP 1i Specifies the parent window. .IP \fIvaluemask\fP 1i Specifies which window attributes are defined in the attributes argument. This mask is the bitwise inclusive OR of the valid attribute mask bits. If valuemask is zero, the attributes are ignored and are not referenced. .IP \fIvisual\fP 1i Specifies the visual type. A visual of .ZN CopyFromParent means the visual type is taken from the parent. .ds Wh , which are the created window's inside dimensions \ and do not include the created window's borders .IP \fIwidth\fP 1i .br .ns .IP \fIheight\fP 1i Specify the width and height\*(Wh. .ds Xy , which are the top-left outside corner of the window's \ borders and are relative to the inside of the parent window's borders .IP \fIx\fP 1i .br .ns .IP \fIy\fP 1i Specify the x and y coordinates\*(Xy. .SH DESCRIPTION The .ZN XCreateWindow function creates an unmapped subwindow for a specified parent window, returns the window ID of the created window, and causes the X server to generate a .ZN CreateNotify event. The created window is placed on top in the stacking order with respect to siblings. .LP The coordinate system has the X axis horizontal and the Y axis vertical with the origin [0, 0] at the upper-left corner. Coordinates are integral, in terms of pixels, and coincide with pixel centers. Each window and pixmap has its own coordinate system. For a window, the origin is inside the border at the inside, upper-left corner. .LP The border_width for an .ZN InputOnly window must be zero, or a .ZN BadMatch error results. For class .ZN InputOutput , the visual type and depth must be a combination supported for the screen, or a .ZN BadMatch error results. The depth need not be the same as the parent, but the parent must not be a window of class .ZN InputOnly , or a .ZN BadMatch error results. For an .ZN InputOnly window, the depth must be zero, and the visual must be one supported by the screen. If either condition is not met, a .ZN BadMatch error results. The parent window, however, may have any depth and class. If you specify any invalid window attribute for a window, a .ZN BadMatch error results. .LP The created window is not yet displayed (mapped) on the user's display. To display the window, call .ZN XMapWindow . The new window initially uses the same cursor as its parent. A new cursor can be defined for the new window by calling .ZN XDefineCursor . .IN "Cursor" "Initial State" .IN "XDefineCursor" The window will not be visible on the screen unless it and all of its ancestors are mapped and it is not obscured by any of its ancestors. .LP .ZN XCreateWindow can generate .ZN BadAlloc .ZN BadColor , .ZN BadCursor , .ZN BadMatch , .ZN BadPixmap , .ZN BadValue , and .ZN BadWindow errors. .LP The .ZN XCreateSimpleWindow function creates an unmapped .ZN InputOutput subwindow for a specified parent window, returns the window ID of the created window, and causes the X server to generate a .ZN CreateNotify event. The created window is placed on top in the stacking order with respect to siblings. Any part of the window that extends outside its parent window is clipped. The border_width for an .ZN InputOnly window must be zero, or a .ZN BadMatch error results. .ZN XCreateSimpleWindow inherits its depth, class, and visual from its parent. All other window attributes, except background and border, have their default values. .LP .ZN XCreateSimpleWindow can generate .ZN BadAlloc , .ZN BadMatch , .ZN BadValue , and .ZN BadWindow errors. .SH STRUCTURES The .ZN XSetWindow Attributes structure contains: .LP .LP /\&* Window attribute value mask bits */ .TS lw(.5i) lw(2.5i) lw(.8i). T{ \&#define T} T{ .ZN CWBackPixmap T} T{ (1L<<0) T} T{ \&#define T} T{ .ZN CWBackPixel T} T{ (1L<<1) T} T{ \&#define T} T{ .ZN CWBorderPixmap T} T{ (1L<<2) T} T{ \&#define T} T{ .ZN CWBorderPixel T} T{ (1L<<3) T} T{ \&#define T} T{ .ZN CWBitGravity T} T{ (1L<<4) T} T{ \&#define T} T{ .ZN CWWinGravity T} T{ (1L<<5) T} T{ \&#define T} T{ .ZN CWBackingStore T} T{ (1L<<6) T} T{ \&#define T} T{ .ZN CWBackingPlanes T} T{ (1L<<7) T} T{ \&#define T} T{ .ZN CWBackingPixel T} T{ (1L<<8) T} T{ \&#define T} T{ .ZN CWOverrideRedirect T} T{ (1L<<9) T} T{ \&#define T} T{ .ZN CWSaveUnder T} T{ (1L<<10) T} T{ \&#define T} T{ .ZN CWEventMask T} T{ (1L<<11) T} T{ \&#define T} T{ .ZN CWDontPropagate T} T{ (1L<<12) T} T{ \&#define T} T{ .ZN CWColormap T} T{ (1L<<13) T} T{ \&#define T} T{ .ZN CWCursor T} T{ (1L<<14) T} .TE .IN "XSetWindowAttributes" "" "@DEF@" .Ds 0 /\&* Values */ typedef struct { Pixmap background_pixmap; /\&* background, None, or ParentRelative */ unsigned long background_pixel; /\&* background pixel */ Pixmap border_pixmap; /\&* border of the window or CopyFromParent */ unsigned long border_pixel; /\&* border pixel value */ int bit_gravity; /\&* one of bit gravity values */ int win_gravity; /\&* one of the window gravity values */ int backing_store; /\&* NotUseful, WhenMapped, Always */ unsigned long backing_planes; /\&* planes to be preserved if possible */ unsigned long backing_pixel; /\&* value to use in restoring planes */ Bool save_under; /\&* should bits under be saved? (popups) */ long event_mask; /\&* set of events that should be saved */ long do_not_propagate_mask; /\&* set of events that should not propagate */ Bool override_redirect; /\&* boolean value for override_redirect */ Colormap colormap; /\&* color map to be associated with window */ Cursor cursor; /\&* cursor to be displayed (or None) */ } XSetWindowAttributes; .De .LP For a detailed explanation of the members of this structure, see \fI\*(xL\fP\^. .SH DIAGNOSTICS .TP 1i .ZN BadAlloc The server failed to allocate the requested resource or server memory. .TP 1i .ZN BadColor A value for a Colormap argument does not name a defined Colormap. .TP 1i .ZN BadCursor A value for a Cursor argument does not name a defined Cursor. .TP 1i .ZN BadMatch The values do not exist for an .ZN InputOnly window. .TP 1i .ZN BadMatch Some argument or pair of arguments has the correct type and range but fails to match in some other way required by the request. .TP 1i .ZN BadPixmap A value for a Pixmap argument does not name a defined Pixmap. .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XChangeWindowAttributes(__libmansuffix__), XConfigureWindow(__libmansuffix__), XDefineCursor(__libmansuffix__), XDestroyWindow(__libmansuffix__), XMapWindow(__libmansuffix__), XRaiseWindow(__libmansuffix__), XUnmapWindow(__libmansuffix__) .br \fI\*(xL\fP '\" t .TH XCreateWindow __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XCreateWindow, XCreateSimpleWindow, XSetWindowAttributes \- create windows and window attributes structure .SH SYNTAX .libX11-1.6.3/man/XStringToKeysym.man000064401431060000012000000127451247741723500174420ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XStringToKeysym __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XStringToKeysym, XKeysymToString, XKeycodeToKeysym, XKeysymToKeycode, XConvertCase \- convert keysyms .SH SYNTAX .HP KeySym XStringToKeysym\^(\^char *\fIstring\fP\^); .HP char *XKeysymToString\^(\^KeySym \fIkeysym\fP\^); .HP KeySym XKeycodeToKeysym\^(\^Display *\fIdisplay\fP\^, KeyCode \fIkeycode\fP\^, int \fIindex\fP\^); .HP KeyCode XKeysymToKeycode\^(\^Display *\fIdisplay\fP\^, KeySym \fIkeysym\fP\^); .HP void XConvertCase(\^KeySym \fIkeysym\fP\^, KeySym *\fIlower_return\fP\^, KeySym *\fIupper_return\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIindex\fP 1i Specifies the element of KeyCode vector. .IP \fIkeycode\fP 1i Specifies the KeyCode. .ds Fn searched for or converted .IP \fIkeysym\fP 1i Specifies the KeySym that is to be \*(Fn. .IP \fIlower_return\fP 1i Returns the lowercase form of keysym, or keysym. .IP \fIstring\fP 1i Specifies the name of the KeySym that is to be converted. .IP \fIupper_return\fP 1i Returns the uppercase form of keysym, or keysym. .SH DESCRIPTION Standard KeySym names are obtained from .hN X11/keysymdef.h by removing the XK_ prefix from each name. KeySyms that are not part of the Xlib standard also may be obtained with this function. The set of KeySyms that are available in this manner and the mechanisms by which Xlib obtains them is implementation-dependent. .LP If the KeySym name is not in the Host Portable Character Encoding, the result is implementation-dependent. If the specified string does not match a valid KeySym, .ZN XStringToKeysym returns .ZN NoSymbol . .LP The returned string is in a static area and must not be modified. The returned string is in the Host Portable Character Encoding. If the specified KeySym is not defined, .ZN XKeysymToString returns a NULL. .LP The .ZN XKeycodeToKeysym function uses internal Xlib tables and returns the KeySym defined for the specified KeyCode and the element of the KeyCode vector. If no symbol is defined, .ZN XKeycodeToKeysym returns .ZN NoSymbol . .ZN XKeycodeToKeysym predates the XKB extension. If you want to lookup a KeySym while using XKB you have to use .ZN XkbKeycodeToKeysym . .LP If the specified KeySym is not defined for any KeyCode, .ZN XKeysymToKeycode returns zero. .LP The .ZN XConvertCase function returns the uppercase and lowercase forms of the specified Keysym, if the KeySym is subject to case conversion; otherwise, the specified KeySym is returned to both lower_return and upper_return. Support for conversion of other than Latin and Cyrillic KeySyms is implementation-dependent. .SH "SEE ALSO" XkbKeycodeToKeysym(__libmansuffix__), XLookupKeysym(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XSetWMSizeHints.man000064401431060000012000000000711247741723500173140ustar00alancstaff00002660200006.so man__libmansuffix__/XAllocSizeHints.__libmansuffix__ libX11-1.6.3/man/XSetWindowBorderWidth.man000064401431060000012000000000721247741723500205360ustar00alancstaff00002660200006.so man__libmansuffix__/XConfigureWindow.__libmansuffix__ libX11-1.6.3/man/XAddConnectionWatch.man000064401431060000012000000145241247741723500201630ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XAddConnectionWatch __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XAddConnectionWatch, XRemoveConnectionWatch, XProcessInternalConnection, XInternalConnectionNumbers \- handle Xlib internal connections .SH SYNTAX .HP typedef void (*XConnectionWatchProc)\^(\^Display *\fIdisplay\fP\^, XPointer \fIclient_data\fP\^, int \fIfd\fP\^, Bool \fIopening\fP\^, XPointer *\fIwatch_data\fP\^); .HP Status XAddConnectionWatch\^(\^Display *\fIdisplay\fP\^, XWatchProc \fIprocedure\fP\^, XPointer \fIclient_data\fP\^); .HP Status XRemoveConnectionWatch\^(\^Display *\fIdisplay\fP\^, XWatchProc \fIprocedure\fP\^, XPointer \fIclient_data\fP\^); .HP void XProcessInternalConnection\^(\^Display *\fIdisplay\fP\^, int \fIfd\fP\^); .HP Status XInternalConnectionNumbers\^(\^Display *\fIdisplay\fP\^, int **\fIfd_return\fP\^, int *\fIcount_return\fP\^); .SH ARGUMENTS .IP \fIclient_data\fP 1i Specifies the additional client data. .ds Cn file descriptors .IP \fIcount_return\fP 1i Returns the number of \*(Cn. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIfd\fP 1i Specifies the file descriptor. .IP \fIfd_return\fP 1i Returns the file descriptors. .IP \fIprocedure\fP 1i Specifies the procedure to be called. .SH DESCRIPTION The .ZN XAddConnectionWatch function registers a procedure to be called each time Xlib opens or closes an internal connection for the specified display. The procedure is passed the display, the specified client_data, the file descriptor for the connection, a Boolean indicating whether the connection is being opened or closed, and a pointer to a location for private watch data. If opening is .ZN True , the procedure can store a pointer to private data in the location pointed to by watch_data; when the procedure is later called for this same connection and opening is .ZN False , the location pointed to by watch_data will hold this same private data pointer. .LP This function can be called at any time after a display is opened. If internal connections already exist, the registered procedure will immediately be called for each of them, before .ZN XAddConnectionWatch returns. .ZN XAddConnectionWatch returns a nonzero status if the procedure is successfully registered; otherwise, it returns zero. .LP The registered procedure should not call any Xlib functions. If the procedure directly or indirectly causes the state of internal connections or watch procedures to change, the result is not defined. If Xlib has been initialized for threads, the procedure is called with the display locked and the result of a call by the procedure to any Xlib function that locks the display is not defined unless the executing thread has externally locked the display using .ZN XLockDisplay . .LP The .ZN XRemoveConnectionWatch function removes a previously registered connection watch procedure. The client_data must match the client_data used when the procedure was initially registered. .LP The .ZN XProcessInternalConnection function processes input available on an internal connection. This function should be called for an internal connection only after an operating system facility (for example, .ZN select or .ZN poll ) has indicated that input is available; otherwise, the effect is not defined. .LP The .ZN XInternalConnectionNumbers function returns a list of the file descriptors for all internal connections currently open for the specified display. When the allocated list is no longer needed, free it by using .ZN XFree . This functions returns a nonzero status if the list is successfully allocated; otherwise, it returns zero. .SH "SEE ALSO" \fI\*(xL\fP libX11-1.6.3/man/XInitThreads.man000064401431060000012000000116201247741723500166740ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XInitThreads __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XInitThreads, XLockDisplay, XUnlockDisplay \- multi-threading support .SH SYNTAX .HP Status XInitThreads\^(void); .HP void XLockDisplay\^(\^Display *\fIdisplay\fP\^); .HP void XUnlockDisplay\^(\^Display *\fIdisplay\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .SH DESCRIPTION The .ZN XInitThreads function initializes Xlib support for concurrent threads. This function must be the first Xlib function a multi-threaded program calls, and it must complete before any other Xlib call is made. This function returns a nonzero status if initialization was successful; otherwise, it returns zero. On systems that do not support threads, this function always returns zero. .LP It is only necessary to call this function if multiple threads might use Xlib concurrently. If all calls to Xlib functions are protected by some other access mechanism (for example, a mutual exclusion lock in a toolkit or through explicit client programming), Xlib thread initialization is not required. It is recommended that single-threaded programs not call this function. .LP The .ZN XLockDisplay function locks out all other threads from using the specified display. Other threads attempting to use the display will block until the display is unlocked by this thread. Nested calls to .ZN XLockDisplay work correctly; the display will not actually be unlocked until .ZN XUnlockDisplay has been called the same number of times as .ZN XLockDisplay . This function has no effect unless Xlib was successfully initialized for threads using .ZN XInitThreads . .LP The .ZN XUnlockDisplay function allows other threads to use the specified display again. Any threads that have blocked on the display are allowed to continue. Nested locking works correctly; if .ZN XLockDisplay has been called multiple times by a thread, then .ZN XUnlockDisplay must be called an equal number of times before the display is actually unlocked. This function has no effect unless Xlib was successfully initialized for threads using .ZN XInitThreads . .SH "SEE ALSO" \fI\*(xL\fP libX11-1.6.3/man/XSetSubwindowMode.man000064401431060000012000000000651247741723500177210ustar00alancstaff00002660200006.so man__libmansuffix__/XSetArcMode.__libmansuffix__ libX11-1.6.3/man/XcmsCIELuvQueryMaxLC.man000064401431060000012000000000751247741723500201650ustar00alancstaff00002660200006.so man__libmansuffix__/XcmsCIELuvQueryMaxC.__libmansuffix__ libX11-1.6.3/man/XGetTextProperty.man000064401431060000012000000000721247741723500176060ustar00alancstaff00002660200006.so man__libmansuffix__/XSetTextProperty.__libmansuffix__ libX11-1.6.3/man/XRefreshKeyboardMapping.man000064401431060000012000000000671247741723500210540ustar00alancstaff00002660200006.so man__libmansuffix__/XLookupKeysym.__libmansuffix__ libX11-1.6.3/man/XKeyboardControl.man000064401431060000012000000001001247741723500175460ustar00alancstaff00002660200006.so man__libmansuffix__/XChangeKeyboardControl.__libmansuffix__ libX11-1.6.3/man/XSetWindowColormap.man000064401431060000012000000001011247741723500200660ustar00alancstaff00002660200006.so man__libmansuffix__/XChangeWindowAttributes.__libmansuffix__ libX11-1.6.3/man/XrmGetDatabase.man000064401431060000012000000000741247741723500171620ustar00alancstaff00002660200006.so man__libmansuffix__/XrmGetFileDatabase.__libmansuffix__ libX11-1.6.3/man/XUninstallColormap.man000064401431060000012000000000721247741723500201230ustar00alancstaff00002660200006.so man__libmansuffix__/XInstallColormap.__libmansuffix__ libX11-1.6.3/man/XGetIconName.man000064401431060000012000000000701247741723500166040ustar00alancstaff00002660200006.so man__libmansuffix__/XSetWMIconName.__libmansuffix__ libX11-1.6.3/man/XAddHost.man000064401431060000012000000237211247741723500160110ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" All rights reserved. .\" .\" 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, and/or sell copies of the Software, and to permit persons .\" to whom the Software is furnished to do so, provided that the above .\" copyright notice(s) and this permission notice appear in all copies of .\" the Software and that both the above copyright notice(s) and this .\" permission notice appear in supporting documentation. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT .\" OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR .\" HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL .\" INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING .\" FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, .\" NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION .\" WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" .\" Except as contained in this notice, the name of a copyright holder .\" shall not be used in advertising or otherwise to promote the sale, use .\" or other dealings in this Software without prior written authorization .\" of the copyright holder. .\" .\" X Window System is a trademark of The Open Group. .\" .\" Copyright 2004 Oracle and/or its affiliates. All rights reserved. .\" .\" 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: .\" .\" The above copyright notice and this permission notice (including the next .\" paragraph) shall be included in all copies or substantial portions of the .\" Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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 AUTHORS OR COPYRIGHT HOLDERS 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. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XAddHost __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XAddHost, XAddHosts, XListHosts, XRemoveHost, XRemoveHosts, XSetAccessControl, XEnableAccessControl, XDisableAccessControl, XHostAddress, XServerInterpretedAddress \- control host access and host control structure .SH SYNTAX .HP int XAddHost\^(\^Display *\fIdisplay\fP, XHostAddress *\fIhost\fP\^); .HP int XAddHosts\^(\^Display *\fIdisplay\fP, XHostAddress *\fIhosts\fP, int \fInum_hosts\fP\^); .HP XHostAddress *XListHosts\^(\^Display *\fIdisplay\fP, int *\fInhosts_return\fP, Bool \fIstate_return\fP\^); .HP int XRemoveHost\^(\^Display *\fIdisplay\fP, XHostAddress *\fIhost\fP\^); .HP int XRemoveHosts\^(\^Display *\fIdisplay\fP, XHostAddress *\fIhosts\fP, int \fInum_hosts\fP\^); .HP int XSetAccessControl\^(\^Display *\fIdisplay\fP, int \fImode\fP\^); .HP int XEnableAccessControl\^(\^Display *\fIdisplay\fP\^); .HP int XDisableAccessControl\^(\^Display *\fIdisplay\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .ds Ho added or removed .IP \fIhost\fP 1i Specifies the host that is to be \*(Ho. .ds Ho added or removed .IP \fIhosts\fP 1i Specifies each host that is to be \*(Ho. .IP \fImode\fP 1i Specifies the mode. You can pass .ZN EnableAccess or .ZN DisableAccess . .IP \fInhosts_return\fP 1i Returns the number of hosts currently in the access control list. .IP \fInum_hosts\fP 1i Specifies the number of hosts. .IP \fIstate_return\fP 1i Returns the state of the access control. .SH DESCRIPTION The .ZN XAddHost function adds the specified host to the access control list for that display. The server must be on the same host as the client issuing the command, or a .ZN BadAccess error results. .LP .ZN XAddHost can generate .ZN BadAccess and .ZN BadValue errors. .LP The .ZN XAddHosts function adds each specified host to the access control list for that display. The server must be on the same host as the client issuing the command, or a .ZN BadAccess error results. .LP .ZN XAddHosts can generate .ZN BadAccess and .ZN BadValue errors. .LP The .ZN XListHosts function returns the current access control list as well as whether the use of the list at connection setup was enabled or disabled. .ZN XListHosts allows a program to find out what machines can make connections. It also returns a pointer to a list of host structures that were allocated by the function. When no longer needed, this memory should be freed by calling .ZN XFree . .LP The .ZN XRemoveHost function removes the specified host from the access control list for that display. The server must be on the same host as the client process, or a .ZN BadAccess error results. If you remove your machine from the access list, you can no longer connect to that server, and this operation cannot be reversed unless you reset the server. .LP .ZN XRemoveHost can generate .ZN BadAccess and .ZN BadValue errors. .LP The .ZN XRemoveHosts function removes each specified host from the access control list for that display. The X server must be on the same host as the client process, or a .ZN BadAccess error results. If you remove your machine from the access list, you can no longer connect to that server, and this operation cannot be reversed unless you reset the server. .LP .ZN XRemoveHosts can generate .ZN BadAccess and .ZN BadValue errors. .LP The .ZN XSetAccessControl function either enables or disables the use of the access control list at each connection setup. .LP .ZN XSetAccessControl can generate .ZN BadAccess and .ZN BadValue errors. .LP The .ZN XEnableAccessControl function enables the use of the access control list at each connection setup. .LP .ZN XEnableAccessControl can generate a .ZN BadAccess error. .LP The .ZN XDisableAccessControl function disables the use of the access control list at each connection setup. .LP .ZN XDisableAccessControl can generate a .ZN BadAccess error. .SH STRUCTURES The .ZN XHostAddress structure contains: .LP .Ds 0 typedef struct { int family; /\&* for example FamilyInternet */ int length; /\&* length of address, in bytes */ char *address; /\&* pointer to where to find the address */ } XHostAddress; .De .LP The family member specifies which protocol address family to use (for example, TCP/IP or DECnet) and can be .ZN FamilyInternet , .ZN FamilyInternet6 , .ZN FamilyServerInterpreted , .ZN FamilyDECnet , or .ZN FamilyChaos . The length member specifies the length of the address in bytes. The address member specifies a pointer to the address. .LP For the ServerInterpreted family, the length is ignored and the address member is a pointer to a .ZN XServerInterpretedAddress structure which contains: .LP .Ds 0 typedef struct { int typelength; /\&* length of type string, in bytes */ int valuelength; /\&* length of value string, in bytes */ char *type; /\&* pointer to where to find the type string */ char *value; /\&* pointer to where to find the address */ } XServerInterpretedAddress; .De .LP The type and value members point to strings representing the type and value of the server interpreted entry. These strings may not be NULL-terminated so care should be used when accessing them. The typelength and valuelength members specify the length in byte of the type and value strings. .SH DIAGNOSTICS .TP 1i .ZN BadAccess A client attempted to modify the access control list from other than the local (or otherwise authorized) host. .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .SH "SEE ALSO" XFree(__libmansuffix__) .br \fI\*(xL\fP pyright \(co 1990, 1991 by .\" Tektronix, Inc. libX11-1.6.3/man/XSetErrorHandler.man000064401431060000012000000165651247741723500175360ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XSetErrorHandler __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XSetErrorHandler, XGetErrorText, XDisplayName, XSetIOErrorHandler, XGetErrorDatabaseText \- default error handlers .SH SYNTAX .HP int (*XSetErrorHandler\^(\^int (\^*\^\fIhandler\fP\^)\^(Display *, XErrorEvent *)\^)\^)\^(\^); .HP int XGetErrorText\^(\^Display *\fIdisplay\fP\^, int \fIcode\fP\^, char *\fIbuffer_return\fP\^, int \fIlength\fP\^); .HP char *XDisplayName\^(\^char *\fIstring\fP\^); .HP int (*XSetIOErrorHandler\^(\^int (\^*\^\fIhandler\fP\^)(Display *)\^)\^)\^(\^); .HP int XGetErrorDatabaseText\^(\^Display *\fIdisplay\fP\^, char *\fIname\fP, char *\fImessage\fP\^, char *\fIdefault_string\fP\^, char *\fIbuffer_return\fP\^, int \fIlength\fP\^); .SH ARGUMENTS .IP \fIbuffer_return\fP 1i Returns the error description. .IP \fIcode\fP 1i Specifies the error code for which you want to obtain a description. .IP \fIdefault_string\fP 1i Specifies the default error message if none is found in the database. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIhandler\fP 1i Specifies the program's supplied error handler. .IP \fIlength\fP 1i Specifies the size of the buffer. .IP \fImessage\fP 1i Specifies the type of the error message. .IP \fIname\fP 1i Specifies the name of the application. .IP \fIstring\fP 1i Specifies the character string. .SH DESCRIPTION Xlib generally calls the program's supplied error handler whenever an error is received. It is not called on .ZN BadName errors from .ZN OpenFont , .ZN LookupColor , or .ZN AllocNamedColor protocol requests or on .ZN BadFont errors from a .ZN QueryFont protocol request. These errors generally are reflected back to the program through the procedural interface. Because this condition is not assumed to be fatal, it is acceptable for your error handler to return; the returned value is ignored. However, the error handler should not call any functions (directly or indirectly) on the display that will generate protocol requests or that will look for input events. The previous error handler is returned. .LP The .ZN XGetErrorText function copies a null-terminated string describing the specified error code into the specified buffer. The returned text is in the encoding of the current locale. It is recommended that you use this function to obtain an error description because extensions to Xlib may define their own error codes and error strings. .LP The .ZN XDisplayName function returns the name of the display that .ZN XOpenDisplay would attempt to use. If a NULL string is specified, .ZN XDisplayName looks in the environment for the display and returns the display name that .ZN XOpenDisplay would attempt to use. This makes it easier to report to the user precisely which display the program attempted to open when the initial connection attempt failed. .LP The .ZN XSetIOErrorHandler sets the fatal I/O error handler. Xlib calls the program's supplied error handler if any sort of system call error occurs (for example, the connection to the server was lost). This is assumed to be a fatal condition, and the called routine should not return. If the I/O error handler does return, the client process exits. .LP Note that the previous error handler is returned. .LP The .ZN XGetErrorDatabaseText function returns a null-terminated message (or the default message) from the error message database. Xlib uses this function internally to look up its error messages. The text in the default_string argument is assumed to be in the encoding of the current locale, and the text stored in the buffer_return argument is in the encoding of the current locale. .LP The name argument should generally be the name of your application. The message argument should indicate which type of error message you want. If the name and message are not in the Host Portable Character Encoding, the result is implementation-dependent. Xlib uses three predefined ``application names'' to report errors. In these names, uppercase and lowercase matter. .IP XProtoError 1i The protocol error number is used as a string for the message argument. .IP XlibMessage 1i These are the message strings that are used internally by the library. .IP XRequest 1i For a core protocol request, the major request protocol number is used for the message argument. For an extension request, the extension name (as given by .ZN InitExtension ) followed by a period (\.) and the minor request protocol number is used for the message argument. If no string is found in the error database, the default_string is returned to the buffer argument. .SH "SEE ALSO" XOpenDisplay(__libmansuffix__), XSynchronize(__libmansuffix__) .br \fI\*(xL\fP AND NONINFRINGEMENT. .\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR .\" OTHER LIABILITY, WHETHER IN AN ACTION libX11-1.6.3/man/XDestroyRegion.man000064401431060000012000000000671247741723500172560ustar00alancstaff00002660200006.so man__libmansuffix__/XCreateRegion.__libmansuffix__ libX11-1.6.3/man/IsKeypadKey.man000064401431060000012000000000651247741723500165110ustar00alancstaff00002660200006.so man__libmansuffix__/IsCursorKey.__libmansuffix__ libX11-1.6.3/man/XSetWindowBorderPixmap.man000064401431060000012000000001011247741723500207060ustar00alancstaff00002660200006.so man__libmansuffix__/XChangeWindowAttributes.__libmansuffix__ libX11-1.6.3/man/BitmapUnit.man000064401431060000012000000000701247741723500163770ustar00alancstaff00002660200006.so man__libmansuffix__/ImageByteOrder.__libmansuffix__ libX11-1.6.3/man/XDisplayName.man000064401431060000012000000000721247741723500166630ustar00alancstaff00002660200006.so man__libmansuffix__/XSetErrorHandler.__libmansuffix__ libX11-1.6.3/man/XMapEvent.man000064401431060000012000000170361247741723500162040ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XMapEvent __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XMapEvent, XMappingEvent \- MapNotify and MappingNotify event structures .SH STRUCTURES The structure for .ZN MapNotify events contains: .LP .Ds 0 typedef struct { int type; /\&* MapNotify */ unsigned long serial; /\&* # of last request processed by server */ Bool send_event; /\&* true if this came from a SendEvent request */ Display *display; /\&* Display the event was read from */ Window event; Window window; Bool override_redirect; /\&* boolean, is override set... */ } XMapEvent; .De .LP When you receive this event, the structure members are set as follows. .LP The type member is set to the event type constant name that uniquely identifies it. For example, when the X server reports a .ZN GraphicsExpose event to a client application, it sends an .ZN XGraphicsExposeEvent structure with the type member set to .ZN GraphicsExpose . The display member is set to a pointer to the display the event was read on. The send_event member is set to .ZN True if the event came from a .ZN SendEvent protocol request. The serial member is set from the serial number reported in the protocol but expanded from the 16-bit least-significant bits to a full 32-bit value. The window member is set to the window that is most useful to toolkit dispatchers. .LP The event member is set either to the window that was mapped or to its parent, depending on whether .ZN StructureNotify or .ZN SubstructureNotify was selected. The window member is set to the window that was mapped. The override_redirect member is set to the override-redirect attribute of the window. Window manager clients normally should ignore this window if the override-redirect attribute is .ZN True , because these events usually are generated from pop-ups, which override structure control. .LP The structure for .ZN MappingNotify events is: .LP .Ds 0 typedef struct { int type; /\&* MappingNotify */ unsigned long serial; /\&* # of last request processed by server */ Bool send_event; /\&* true if this came from a SendEvent request */ Display *display; /\&* Display the event was read from */ Window window; /\&* unused */ int request; /\&* one of MappingModifier, MappingKeyboard, MappingPointer */ int first_keycode; /\&* first keycode */ int count; /\&* defines range of change w. first_keycode*/ } XMappingEvent; .De .LP When you receive this event, the structure members are set as follows. .LP The type member is set to the event type constant name that uniquely identifies it. For example, when the X server reports a .ZN GraphicsExpose event to a client application, it sends an .ZN XGraphicsExposeEvent structure with the type member set to .ZN GraphicsExpose . The display member is set to a pointer to the display the event was read on. The send_event member is set to .ZN True if the event came from a .ZN SendEvent protocol request. The serial member is set from the serial number reported in the protocol but expanded from the 16-bit least-significant bits to a full 32-bit value. The window member is set to the window that is most useful to toolkit dispatchers. .LP The request member is set to indicate the kind of mapping change that occurred and can be .ZN MappingModifier , .ZN MappingKeyboard , .ZN MappingPointer . If it is .ZN MappingModifier , the modifier mapping was changed. If it is .ZN MappingKeyboard , the keyboard mapping was changed. If it is .ZN MappingPointer , the pointer button mapping was changed. The first_keycode and count members are set only if the request member was set to .ZN MappingKeyboard . The number in first_keycode represents the first number in the range of the altered mapping, and count represents the number of keycodes altered. .SH "SEE ALSO" XAnyEvent(__libmansuffix__), XButtonEvent(__libmansuffix__), XCreateWindowEvent(__libmansuffix__), XCirculateEvent(__libmansuffix__), XCirculateRequestEvent(__libmansuffix__), XColormapEvent(__libmansuffix__), XConfigureEvent(__libmansuffix__), XConfigureRequestEvent(__libmansuffix__), XCrossingEvent(__libmansuffix__), XDestroyWindowEvent(__libmansuffix__), XErrorEvent(__libmansuffix__), XExposeEvent(__libmansuffix__), XFocusChangeEvent(__libmansuffix__), XGraphicsExposeEvent(__libmansuffix__), XGravityEvent(__libmansuffix__), XKeymapEvent(__libmansuffix__), XMapRequestEvent(__libmansuffix__), XPropertyEvent(__libmansuffix__), XReparentEvent(__libmansuffix__), XResizeRequestEvent(__libmansuffix__), XSelectionClearEvent(__libmansuffix__), XSelectionEvent(__libmansuffix__), XSelectionRequestEvent(__libmansuffix__), XUnmapEvent(__libmansuffix__), XVisibilityEvent(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XSetWMProperties.man000064401431060000012000000250611247741723500175360ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" Copyright \(co 2000 The XFree86 Project, Inc. .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XSetWMProperties __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XSetWMProperties, XmbSetWMProperties, Xutf8SetWMProperties \- set standard window properties .SH SYNTAX .HP void XSetWMProperties\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, XTextProperty *\fIwindow_name\fP\^, XTextProperty *\fIicon_name\fP\^, char **\fIargv\fP\^, int \fIargc\fP\^, XSizeHints *\fInormal_hints\fP\^, XWMHints *\fIwm_hints\fP\^, XClassHint *\fIclass_hints\fP\^); .HP void XmbSetWMProperties\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, char *\fIwindow_name\fP\^, char *\fIicon_name\fP\^, char *\fIargv\fP\^[], int \fIargc\fP\^, XSizeHints *\fInormal_hints\fP\^, XWMHints *\fIwm_hints\fP\^, XClassHint *\fIclass_hints\fP\^); .HP void Xutf8SetWMProperties\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, char *\fIwindow_name\fP\^, char *\fIicon_name\fP\^, char *\fIargv\fP\^[], int \fIargc\fP\^, XSizeHints *\fInormal_hints\fP\^, XWMHints *\fIwm_hints\fP\^, XClassHint *\fIclass_hints\fP\^); .SH ARGUMENTS .IP \fIargc\fP 1i Specifies the number of arguments. .IP \fIargv\fP 1i Specifies the application's argument list. .IP \fIclass_hints\fP 1i Specifies the .ZN XClassHint structure to be used. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIicon_name\fP 1i Specifies the icon name, which should be a null-terminated string. .IP \fInormal_hints\fP 1i Specifies the size hints for the window in its normal state. .IP \fIw\fP 1i Specifies the window. .IP \fIwindow_name\fP 1i Specifies the window name, which should be a null-terminated string. .IP \fIwm_hints\fP 1i Specifies the .ZN XWMHints structure to be used. .SH DESCRIPTION The .ZN XSetWMProperties convenience function provides a single programming interface for setting those essential window properties that are used for communicating with other clients (particularly window and session managers). .LP If the window_name argument is non-NULL, .ZN XSetWMProperties calls .ZN XSetWMName , which in turn, sets the WM_NAME property (see section 14.1.4). If the icon_name argument is non-NULL, .ZN XSetWMProperties calls .ZN XSetWMIconName , which sets the WM_ICON_NAME property (see section 14.1.5). If the argv argument is non-NULL, .ZN XSetWMProperties calls .ZN XSetCommand , which sets the WM_COMMAND property (see section 14.2.1). Note that an argc of zero is allowed to indicate a zero-length command. Note also that the hostname of this machine is stored using .ZN XSetWMClientMachine (see section 14.2.2). .LP If the normal_hints argument is non-NULL, .ZN XSetWMProperties calls .ZN XSetWMNormalHints , which sets the WM_NORMAL_HINTS property (see section 14.1.7). If the wm_hints argument is non-NULL, .ZN XSetWMProperties calls .ZN XSetWMHints , which sets the WM_HINTS property (see section 14.1.6). .LP If the class_hints argument is non-NULL, .ZN XSetWMProperties calls .ZN XSetClassHint , which sets the WM_CLASS property (see section 14.1.8). If the res_name member in the .ZN XClassHint structure is set to the NULL pointer and the RESOURCE_NAME environment variable is set, then the value of the environment variable is substituted for res_name. If the res_name member is NULL, the environment variable is not set, and argv and argv[0] are set, then the value of argv[0], stripped of any directory prefixes, is substituted for res_name. .LP The .ZN XmbSetWMProperties and .ZN Xutf8SetWMProperties convenience functions provide a simple programming interface for setting those essential window properties that are used for communicating with other clients (particularly window and session managers). .LP If the window_name argument is non-NULL, they set the WM_NAME property. If the icon_name argument is non-NULL, they set the WM_ICON_NAME property. The window_name and icon_name arguments are null-terminated strings, for .ZN XmbSetWMProperties in the encoding of the current locale, for .ZN Xutf8SetWMProperties in UTF-8 encoding. If the arguments can be fully converted to the STRING encoding, the properties are created with type ``STRING''; otherwise, the arguments are converted to Compound Text, and the properties are created with type ``COMPOUND_TEXT''. .LP If the normal_hints argument is non-NULL, .ZN XmbSetWMProperties and .ZN Xutf8SetWMProperties call .ZN XSetWMNormalHints , which sets the WM_NORMAL_HINTS property (see section 14.1.7). If the wm_hints argument is non-NULL, .ZN XmbSetWMProperties and .ZN Xutf8SetWMProperties call .ZN XSetWMHints , which sets the WM_HINTS property (see section 14.1.6). .LP If the argv argument is non-NULL, .ZN XmbSetWMProperties and .ZN Xutf8SetWMProperties set the WM_COMMAND property from argv and argc. An argc of zero indicates a zero-length command. .LP The hostname of the machine is stored using .ZN XSetWMClientMachine (see section 14.2.2). .LP If the class_hints argument is non-NULL, .ZN XmbSetWMProperties and .ZN Xutf8SetWMProperties set the WM_CLASS property. If the res_name member in the .ZN XClassHint structure is set to the NULL pointer and the RESOURCE_NAME environment variable is set, the value of the environment variable is substituted for res_name. If the res_name member is NULL, the environment variable is not set, and argv and argv[0] are set, then the value of argv[0], stripped of any directory prefixes, is substituted for res_name. .LP It is assumed that the supplied class_hints.res_name and argv, the RESOURCE_NAME environment variable, and the hostname of the machine are in the encoding of the current locale. The corresponding WM_CLASS, WM_COMMAND, and WM_CLIENT_MACHINE properties are typed according to the local host locale announcer. No encoding conversion is performed for these strings prior to storage in the properties. .LP For clients that need to process the property text in a locale, .ZN XmbSetWMProperties and .ZN Xutf8SetWMProperties set the WM_LOCALE_NAME property to be the name of the current locale. The name is assumed to be in the Host Portable Character Encoding and is converted to STRING for storage in the property. .LP .ZN XSetWMProperties , .ZN XmbSetWMProperties and .ZN Xutf8SetWMProperties can generate .ZN BadAlloc and .ZN BadWindow errors. .LP The function .ZN Xutf8SetWMProperties is an extension introduced by The XFree86 Project, Inc. in their 4.0.2 release. Its presence is indicated by the macro .ZN X_HAVE_UTF8_STRING . .SH PROPERTIES .TP 1i \s-1WM_CLASS\s+1 Set by application programs to allow window and session managers to obtain the application's resources from the resource database. .TP 1i \s-1WM_CLIENT_MACHINE\s+1 The string name of the machine on which the client application is running. .TP 1i \s-1WM_COMMAND\s+1 The command and arguments, null-separated, used to invoke the application. .TP 1i \s-1WM_HINTS\s+1 Additional hints set by the client for use by the window manager. The C type of this property is .ZN XWMHints . .TP 1i \s-1WM_ICON_NAME\s+1 The name to be used in an icon. .TP 1i \s-1WM_NAME\s+1 The name of the application. .TP 1i \s-1WM_NORMAL_HINTS\s+1 Size hints for a window in its normal state. The C type of this property is .ZN XSizeHints . .SH DIAGNOSTICS .TP 1i .ZN BadAlloc The server failed to allocate the requested resource or server memory. .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XAllocClassHint(__libmansuffix__), XAllocIconSize(__libmansuffix__), XAllocSizeHints(__libmansuffix__), XAllocWMHints(__libmansuffix__), XParseGeometry(__libmansuffix__), XSetCommand(__libmansuffix__), XSetTransientForHint(__libmansuffix__), XSetTextProperty(__libmansuffix__), XSetWMClientMachine(__libmansuffix__), XSetWMColormapWindows(__libmansuffix__), XSetWMIconName(__libmansuffix__), XSetWMName(__libmansuffix__), XSetWMProtocols(__libmansuffix__), XStringListToTextProperty(__libmansuffix__), XTextListToTextProperty(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XwcDrawImageString.man000064401431060000012000000000741247741723500200400ustar00alancstaff00002660200006.so man__libmansuffix__/XmbDrawImageString.__libmansuffix__ libX11-1.6.3/man/ClientWhitePointOfCCC.man000064401431060000012000000000661247741723500203570ustar00alancstaff00002660200006.so man__libmansuffix__/DisplayOfCCC.__libmansuffix__ libX11-1.6.3/man/XGetPointerControl.man000064401431060000012000000000771247741723500201030ustar00alancstaff00002660200006.so man__libmansuffix__/XChangePointerControl.__libmansuffix__ libX11-1.6.3/man/ProtocolVersion.man000064401431060000012000000000631247741723500174740ustar00alancstaff00002660200006.so man__libmansuffix__/AllPlanes.__libmansuffix__ libX11-1.6.3/man/XAutoRepeatOff.man000064401431060000012000000001001247741723500171510ustar00alancstaff00002660200006.so man__libmansuffix__/XChangeKeyboardControl.__libmansuffix__ libX11-1.6.3/man/XrmOptionKind.man000064401431060000012000000000671247741723500170760ustar00alancstaff00002660200006.so man__libmansuffix__/XrmInitialize.__libmansuffix__ libX11-1.6.3/man/XCharStruct.man000064401431060000012000000000631247741723500165370ustar00alancstaff00002660200006.so man__libmansuffix__/XLoadFont.__libmansuffix__ libX11-1.6.3/man/BitmapPad.man000064401431060000012000000000701247741723500161640ustar00alancstaff00002660200006.so man__libmansuffix__/ImageByteOrder.__libmansuffix__ libX11-1.6.3/man/XSetIconSizes.man000064401431060000012000000000701247741723500170350ustar00alancstaff00002660200006.so man__libmansuffix__/XAllocIconSize.__libmansuffix__ libX11-1.6.3/man/XBaseFontNameListOfFontSet.man000064401431060000012000000000711247741723500214020ustar00alancstaff00002660200006.so man__libmansuffix__/XFontsOfFontSet.__libmansuffix__ libX11-1.6.3/man/Xutf8TextEscapement.man000064401431060000012000000000731247741723500202160ustar00alancstaff00002660200006.so man__libmansuffix__/XmbTextEscapement.__libmansuffix__ libX11-1.6.3/man/Xutf8TextPropertyToTextList.man000064401431060000012000000001031247741723500217540ustar00alancstaff00002660200006.so man__libmansuffix__/XmbTextListToTextProperty.__libmansuffix__ libX11-1.6.3/man/DefaultScreenOfDisplay.man000064401431060000012000000000631247741723500206640ustar00alancstaff00002660200006.so man__libmansuffix__/AllPlanes.__libmansuffix__ libX11-1.6.3/man/XmbResetIC.man000064401431060000012000000111521247741723500162730ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" Copyright \(co 2000 The XFree86 Project, Inc. .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XmbResetIC __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XmbResetIC, XwcResetIC, Xutf8ResetIC \- reset the state of an input context .SH SYNTAX .HP char *XmbResetIC\^(\^XIC \fIic\fP\^); .HP wchar_t *XwcResetIC\^(\^XIC \fIic\fP\^); .HP char *Xutf8ResetIC\^(\^XIC \fIic\fP\^); .SH ARGUMENTS .IP \fIic\fP 1i Specifies the input context. .SH DESCRIPTION When .ZN XNResetState is set to .ZN XIMInitialState , .ZN XmbResetIC , .ZN XwcResetIC and .ZN Xutf8ResetIC reset an input context to its initial state; when .ZN XNResetState is set to .ZN XIMPreserveState , the current input context state is preserved. In both cases, any input pending on that context is deleted. The input method is required to clear the preedit area, if any, and update the status accordingly. Calling .ZN XmbResetIC , .ZN XwcResetIC or .ZN Xutf8ResetIC does not change the focus. .LP The return value of .ZN XmbResetIC is its current preedit string as a multibyte string. The return value of .ZN XwcResetIC is its current preedit string as a wide character string. The return value of .ZN Xutf8ResetIC is its current preedit string as an UTF-8 string. If there is any preedit text drawn or visible to the user, then these procedures must return a non-NULL string. If there is no visible preedit text, then it is input method implementation-dependent whether these procedures return a non-NULL string or NULL. .LP The client should free the returned string by calling .ZN XFree . .LP The function .ZN Xutf8ResetIC is an extension introduced by The XFree86 Project, Inc. in their 4.0.2 release. Its presence is indicated by the macro .ZN X_HAVE_UTF8_STRING . .SH "SEE ALSO" XCreateIC(__libmansuffix__), XOpenIM(__libmansuffix__), XSetICFocus(__libmansuffix__), XSetICValues(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/HeightOfScreen.man000064401431060000012000000000741247741723500171640ustar00alancstaff00002660200006.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__ libX11-1.6.3/man/DisplayPlanes.man000064401431060000012000000000631247741723500170750ustar00alancstaff00002660200006.so man__libmansuffix__/AllPlanes.__libmansuffix__ libX11-1.6.3/man/XSetCloseDownMode.man000064401431060000012000000116031247741723500176350ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XSetCloseDownMode __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XSetCloseDownMode, XKillClient \- control clients .SH SYNTAX .HP int XSetCloseDownMode\^(\^Display *\fIdisplay\fP\^, int \fIclose_mode\fP\^); .HP int XKillClient\^(\^Display *\fIdisplay\fP\^, XID \fIresource\fP\^); .SH ARGUMENTS .IP \fIclose_mode\fP 1i Specifies the client close-down mode. You can pass .ZN DestroyAll , .ZN RetainPermanent , or .ZN RetainTemporary . .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIresource\fP 1i Specifies any resource associated with the client that you want to destroy or .ZN AllTemporary . .SH DESCRIPTION The .ZN XSetCloseDownMode defines what will happen to the client's resources at connection close. A connection starts in .ZN DestroyAll mode. For information on what happens to the client's resources when the close_mode argument is .ZN RetainPermanent or .ZN RetainTemporary , see section 2.6. .LP .ZN XSetCloseDownMode can generate a .ZN BadValue error. .LP The .ZN XKillClient function forces a close down of the client that created the resource if a valid resource is specified. If the client has already terminated in either .ZN RetainPermanent or .ZN RetainTemporary mode, all of the client's resources are destroyed. If .ZN AllTemporary is specified, the resources of all clients that have terminated in .ZN RetainTemporary are destroyed (see section 2.5). This permits implementation of window manager facilities that aid debugging. A client can set its close-down mode to .ZN RetainTemporary . If the client then crashes, its windows would not be destroyed. The programmer can then inspect the application's window tree and use the window manager to destroy the zombie windows. .LP .ZN XKillClient can generate a .ZN BadValue error. .SH DIAGNOSTICS .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .SH "SEE ALSO" \fI\*(xL\fP used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" DigilibX11-1.6.3/man/XLocaleOfFontSet.man000064401431060000012000000000711247741723500174430ustar00alancstaff00002660200006.so man__libmansuffix__/XFontsOfFontSet.__libmansuffix__ libX11-1.6.3/man/DefaultVisual.man000064401431060000012000000000631247741723500170750ustar00alancstaff00002660200006.so man__libmansuffix__/AllPlanes.__libmansuffix__ libX11-1.6.3/man/HeightMMOfScreen.man000064401431060000012000000000741247741723500174160ustar00alancstaff00002660200006.so man__libmansuffix__/BlackPixelOfScreen.__libmansuffix__ libX11-1.6.3/man/XSaveContext.man000064401431060000012000000111551247741723500167240ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XSaveContext __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XSaveContext, XFindContext, XDeleteContext, XUniqueContext \- associative look-up routines .SH SYNTAX .HP int XSaveContext(\^Display *\fIdisplay\fP\^, XID \fIrid\fP\^, XContext \fIcontext\fP\^, XPointer \fIdata\fP\^); .HP int XFindContext(\^Display *\fIdisplay\fP\^, XID \fIrid\fP\^, XContext \fIcontext\fP\^, XPointer *\fIdata_return\fP\^); .HP int XDeleteContext(\^Display *\fIdisplay\fP\^, XID \fIrid\fP, XContext \fIcontext\fP); .LP XContext XUniqueContext(void); .SH ARGUMENTS .IP \fIcontext\fP 1i Specifies the context type to which the data belongs. .IP \fIdata\fP 1i Specifies the data to be associated with the window and type. .IP \fIdata_return\fP 1i Returns the data. .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIrid\fP 1i Specifies the resource ID with which the data is associated. .SH DESCRIPTION If an entry with the specified resource ID and type already exists, .ZN XSaveContext overrides it with the specified context. The .ZN XSaveContext function returns a nonzero error code if an error has occurred and zero otherwise. Possible errors are .ZN XCNOMEM (out of memory). .LP Because it is a return value, the data is a pointer. The .ZN XFindContext function returns a nonzero error code if an error has occurred and zero otherwise. Possible errors are .ZN XCNOENT (context-not-found). .LP The .ZN XDeleteContext function deletes the entry for the given resource ID and type from the data structure. This function returns the same error codes that .ZN XFindContext returns if called with the same arguments. .ZN XDeleteContext does not free the data whose address was saved. .LP The .ZN XUniqueContext function creates a unique context type that may be used in subsequent calls to .ZN XSaveContext . .SH "SEE ALSO" \fI\*(xL\fP reby 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, sublibX11-1.6.3/man/XContextDependentDrawing.man000064401431060000012000000000711247741723500212430ustar00alancstaff00002660200006.so man__libmansuffix__/XFontsOfFontSet.__libmansuffix__ libX11-1.6.3/man/XSetTransientForHint.man000064401431060000012000000114571247741723500204030ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XSetTransientForHint __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XSetTransientForHint, XGetTransientForHint \- set or read a window's WM_TRANSIENT_FOR property .SH SYNTAX .HP int XSetTransientForHint\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, Window \fIprop_window\fP\^); .HP Status XGetTransientForHint\^(\^Display *\fIdisplay\fP\^, Window \fIw\fP\^, Window *\fIprop_window_return\fP\^); .SH ARGUMENTS .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIw\fP 1i Specifies the window. .IP \fIprop_window\fP 1i Specifies the window that the WM_TRANSIENT_FOR property is to be set to. .IP \fIprop_window_return\fP 1i Returns the WM_TRANSIENT_FOR property of the specified window. .SH DESCRIPTION The .ZN XSetTransientForHint function sets the WM_TRANSIENT_FOR property of the specified window to the specified prop_window. .LP .ZN XSetTransientForHint can generate .ZN BadAlloc and .ZN BadWindow errors. .LP The .ZN XGetTransientForHint function returns the WM_TRANSIENT_FOR property for the specified window. It returns a nonzero status on success; otherwise, it returns a zero status. .LP .ZN XGetTransientForHint can generate a .ZN BadWindow error. .SH PROPERTIES .TP 1i \s-1WM_TRANSIENT_FOR\s+1 Set by application programs to indicate to the window manager that a transient top-level window, such as a dialog box. .SH DIAGNOSTICS .TP 1i .ZN BadAlloc The server failed to allocate the requested resource or server memory. .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XAllocClassHint(__libmansuffix__), XAllocIconSize(__libmansuffix__), XAllocSizeHints(__libmansuffix__), XAllocWMHints(__libmansuffix__), XSetCommand(__libmansuffix__), XSetTextProperty(__libmansuffix__), XSetWMClientMachine(__libmansuffix__), XSetWMColormapWindows(__libmansuffix__), XSetWMIconName(__libmansuffix__), XSetWMName(__libmansuffix__), XSetWMProperties(__libmansuffix__), XSetWMProtocols(__libmansuffix__), XStringListToTextProperty(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XDrawString16.man000064401431060000012000000000651247741723500167120ustar00alancstaff00002660200006.so man__libmansuffix__/XDrawString.__libmansuffix__ libX11-1.6.3/man/XRemoveFromSaveSet.man000064401431060000012000000000701247741723500200270ustar00alancstaff00002660200006.so man__libmansuffix__/XChangeSaveSet.__libmansuffix__ libX11-1.6.3/man/XIMOfIC.man000064401431060000012000000000631247741723500154630ustar00alancstaff00002660200006.so man__libmansuffix__/XCreateIC.__libmansuffix__ libX11-1.6.3/man/XConvertSelection.man000064401431060000012000000000741247741723500177450ustar00alancstaff00002660200006.so man__libmansuffix__/XSetSelectionOwner.__libmansuffix__ libX11-1.6.3/man/XButtonEvent.man000064401431060000012000000241141247741723500167350ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XButtonEvent __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XButtonEvent, XKeyEvent, XMotionEvent \- KeyPress, KeyRelease, ButtonPress, ButtonRelease, and MotionNotify event structures .SH STRUCTURES The structures for .ZN KeyPress , .ZN KeyRelease , .ZN ButtonPress , .ZN ButtonRelease , and .ZN MotionNotify events contain: .LP .Ds 0 typedef struct { int type; /\&* ButtonPress or ButtonRelease */ unsigned long serial; /\&* # of last request processed by server */ Bool send_event; /\&* true if this came from a SendEvent request */ Display *display; /\&* Display the event was read from */ Window window; /\&* ``event'' window it is reported relative to */ Window root; /\&* root window that the event occurred on */ Window subwindow; /\&* child window */ Time time; /\&* milliseconds */ int x, y; /\&* pointer x, y coordinates in event window */ int x_root, y_root; /\&* coordinates relative to root */ unsigned int state; /\&* key or button mask */ unsigned int button; /\&* detail */ Bool same_screen; /\&* same screen flag */ } XButtonEvent; typedef XButtonEvent XButtonPressedEvent; typedef XButtonEvent XButtonReleasedEvent; .De .LP .Ds 0 typedef struct { int type; /\&* KeyPress or KeyRelease */ unsigned long serial; /\&* # of last request processed by server */ Bool send_event; /\&* true if this came from a SendEvent request */ Display *display; /\&* Display the event was read from */ Window window; /\&* ``event'' window it is reported relative to */ Window root; /\&* root window that the event occurred on */ Window subwindow; /\&* child window */ Time time; /\&* milliseconds */ int x, y; /\&* pointer x, y coordinates in event window */ int x_root, y_root; /\&* coordinates relative to root */ unsigned int state; /\&* key or button mask */ unsigned int keycode; /\&* detail */ Bool same_screen; /\&* same screen flag */ } XKeyEvent; typedef XKeyEvent XKeyPressedEvent; typedef XKeyEvent XKeyReleasedEvent; .De .LP .Ds 0 typedef struct { int type; /\&* MotionNotify */ unsigned long serial; /\&* # of last request processed by server */ Bool send_event; /\&* true if this came from a SendEvent request */ Display *display; /\&* Display the event was read from */ Window window; /\&* ``event'' window reported relative to */ Window root; /\&* root window that the event occurred on */ Window subwindow; /\&* child window */ Time time; /\&* milliseconds */ int x, y; /\&* pointer x, y coordinates in event window */ int x_root, y_root; /\&* coordinates relative to root */ unsigned int state; /\&* key or button mask */ char is_hint; /\&* detail */ Bool same_screen; /\&* same screen flag */ } XMotionEvent; typedef XMotionEvent XPointerMovedEvent; .De .LP When you receive these events, their structure members are set as follows. .LP The type member is set to the event type constant name that uniquely identifies it. For example, when the X server reports a .ZN GraphicsExpose event to a client application, it sends an .ZN XGraphicsExposeEvent structure with the type member set to .ZN GraphicsExpose . The display member is set to a pointer to the display the event was read on. The send_event member is set to .ZN True if the event came from a .ZN SendEvent protocol request. The serial member is set from the serial number reported in the protocol but expanded from the 16-bit least-significant bits to a full 32-bit value. The window member is set to the window that is most useful to toolkit dispatchers. .LP These structures have the following common members: window, root, subwindow, time, x, y, x_root, y_root, state, and same_screen. The window member is set to the window on which the event was generated and is referred to as the event window. As long as the conditions previously discussed are met, this is the window used by the X server to report the event. The root member is set to the source window's root window. The x_root and y_root members are set to the pointer's coordinates relative to the root window's origin at the time of the event. .LP The same_screen member is set to indicate whether the event window is on the same screen as the root window and can be either .ZN True or .ZN False . If .ZN True , the event and root windows are on the same screen. If .ZN False , the event and root windows are not on the same screen. .LP If the source window is an inferior of the event window, the subwindow member of the structure is set to the child of the event window that is the source window or the child of the event window that is an ancestor of the source window. Otherwise, the X server sets the subwindow member to .ZN None . The time member is set to the time when the event was generated and is expressed in milliseconds. .LP If the event window is on the same screen as the root window, the x and y members are set to the coordinates relative to the event window's origin. Otherwise, these members are set to zero. .LP The state member is set to indicate the logical state of the pointer buttons and modifier keys just prior to the event, which is the bitwise inclusive OR of one or more of the button or modifier key masks: .ZN Button1Mask , .ZN Button2Mask , .ZN Button3Mask , .ZN Button4Mask , .ZN Button5Mask , .ZN ShiftMask , .ZN LockMask , .ZN ControlMask , .ZN Mod1Mask , .ZN Mod2Mask , .ZN Mod3Mask , .ZN Mod4Mask , and .ZN Mod5Mask . .LP Each of these structures also has a member that indicates the detail. For the .ZN XKeyPressedEvent and .ZN XKeyReleasedEvent structures, this member is called a keycode. It is set to a number that represents a physical key on the keyboard. The keycode is an arbitrary representation for any key on the keyboard (see sections 12.7 and 16.1). .LP For the .ZN XButtonPressedEvent and .ZN XButtonReleasedEvent structures, this member is called button. It represents the pointer button that changed state and can be the .ZN Button1 , .ZN Button2 , .ZN Button3 , .ZN Button4 , or .ZN Button5 value. For the .ZN XPointerMovedEvent structure, this member is called is_hint. It can be set to .ZN NotifyNormal or .ZN NotifyHint . .SH "SEE ALSO" XAnyEvent(__libmansuffix__), XCreateWindowEvent(__libmansuffix__), XCirculateEvent(__libmansuffix__), XCirculateRequestEvent(__libmansuffix__), XColormapEvent(__libmansuffix__), XConfigureEvent(__libmansuffix__), XConfigureRequestEvent(__libmansuffix__), XCrossingEvent(__libmansuffix__), XDestroyWindowEvent(__libmansuffix__), XErrorEvent(__libmansuffix__), XExposeEvent(__libmansuffix__), XFocusChangeEvent(__libmansuffix__), XGraphicsExposeEvent(__libmansuffix__), XGravityEvent(__libmansuffix__), XKeymapEvent(__libmansuffix__), XMapEvent(__libmansuffix__), XMapRequestEvent(__libmansuffix__), XPropertyEvent(__libmansuffix__), XReparentEvent(__libmansuffix__), XResizeRequestEvent(__libmansuffix__), XSelectionClearEvent(__libmansuffix__), XSelectionEvent(__libmansuffix__), XSelectionRequestEvent(__libmansuffix__), XUnmapEvent(__libmansuffix__), XVisibilityEvent(__libmansuffix__) .br \fI\*(xL\fP py, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" DigilibX11-1.6.3/man/XGetWMIconName.man000064401431060000012000000000701247741723500170500ustar00alancstaff00002660200006.so man__libmansuffix__/XSetWMIconName.__libmansuffix__ libX11-1.6.3/man/XCloseDisplay.man000064401431060000012000000000661247741723500170530ustar00alancstaff00002660200006.so man__libmansuffix__/XOpenDisplay.__libmansuffix__ libX11-1.6.3/man/XwcTextPerCharExtents.man000064401431060000012000000000771247741723500205600ustar00alancstaff00002660200006.so man__libmansuffix__/XmbTextPerCharExtents.__libmansuffix__ libX11-1.6.3/man/XGetPointerMapping.man000064401431060000012000000000741247741723500200530ustar00alancstaff00002660200006.so man__libmansuffix__/XSetPointerMapping.__libmansuffix__ libX11-1.6.3/man/XOffsetRegion.man000064401431060000012000000000721247741723500170470ustar00alancstaff00002660200006.so man__libmansuffix__/XIntersectRegion.__libmansuffix__ libX11-1.6.3/man/XGrabPointer.man000064401431060000012000000242131247741723500166740ustar00alancstaff00002660200006.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium .\" .\" 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: .\" .\" The above copyright notice and this permission notice shall be included .\" in all copies or substantial portions of the Software. .\" .\" THE SOFTWARE IS PROVIDED "AS IS", 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. .\" .\" Except as contained in this notice, the name of the X Consortium shall .\" not be used in advertising or otherwise to promote the sale, use or .\" other dealings in this Software without prior written authorization .\" from the X Consortium. .\" .\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by .\" Digital Equipment Corporation .\" .\" Portions Copyright \(co 1990, 1991 by .\" Tektronix, Inc. .\" .\" Permission to use, copy, modify and distribute this documentation for .\" any purpose and without fee is hereby granted, provided that the above .\" copyright notice appears in all copies and that both that copyright notice .\" and this permission notice appear in all copies, and that the names of .\" Digital and Tektronix not be used in in advertising or publicity pertaining .\" to this documentation without specific, written prior permission. .\" Digital and Tektronix makes no representations about the suitability .\" of this documentation for any purpose. .\" It is provided ``as is'' without express or implied warranty. .\" .\" .ds xT X Toolkit Intrinsics \- C Language Interface .ds xW Athena X Widgets \- C Language X Toolkit Interface .ds xL Xlib \- C Language X Interface .ds xC Inter-Client Communication Conventions Manual .na .de Ds .nf .\\$1D \\$2 \\$1 .ft CW .\".ps \\n(PS .\".if \\n(VS>=40 .vs \\n(VSu .\".if \\n(VS<=39 .vs \\n(VSp .. .de De .ce 0 .if \\n(BD .DF .nr BD 0 .in \\n(OIu .if \\n(TM .ls 2 .sp \\n(DDu .fi .. .de IN \" send an index entry to the stderr .. .de Pn .ie t \\$1\fB\^\\$2\^\fR\\$3 .el \\$1\fI\^\\$2\^\fP\\$3 .. .de ZN .ie t \fB\^\\$1\^\fR\\$2 .el \fI\^\\$1\^\fP\\$2 .. .de hN .ie t <\fB\\$1\fR>\\$2 .el <\fI\\$1\fP>\\$2 .. .ny0 .TH XGrabPointer __libmansuffix__ __xorgversion__ "XLIB FUNCTIONS" .SH NAME XGrabPointer, XUngrabPointer, XChangeActivePointerGrab \- grab the pointer .SH SYNTAX .HP int XGrabPointer\^(\^Display *\fIdisplay\fP\^, Window \fIgrab_window\fP\^, Bool \fIowner_events\fP\^, unsigned int \fIevent_mask\fP\^, int \fIpointer_mode\fP\^, int \fIkeyboard_mode\fP\^, Window \fIconfine_to\fP\^, Cursor \fIcursor\fP\^, Time \fItime\fP\^); .HP int XUngrabPointer\^(\^Display *\fIdisplay\fP\^, Time \fItime\fP\^); .HP int XChangeActivePointerGrab\^(\^Display *\fIdisplay\fP\^, unsigned int \fIevent_mask\fP\^, Cursor \fIcursor\fP\^, Time \fItime\fP\^); .SH ARGUMENTS .IP \fIconfine_to\fP 1i Specifies the window to confine the pointer in or .ZN None . .IP \fIcursor\fP 1i Specifies the cursor that is to be displayed during the grab or .ZN None . .IP \fIdisplay\fP 1i Specifies the connection to the X server. .IP \fIevent_mask\fP 1i Specifies which pointer events are reported to the client. The mask is the bitwise inclusive OR of the valid pointer event mask bits. .IP \fIgrab_window\fP 1i Specifies the grab window. .IP \fIkeyboard_mode\fP 1i Specifies further processing of keyboard events. You can pass .ZN GrabModeSync or .ZN GrabModeAsync . .IP \fIowner_events\fP 1i Specifies a Boolean value that indicates whether the pointer events are to be reported as usual or reported with respect to the grab window if selected by the event mask. .IP \fIpointer_mode\fP 1i Specifies further processing of pointer events. You can pass .ZN GrabModeSync or .ZN GrabModeAsync . .IP \fItime\fP 1i Specifies the time. You can pass either a timestamp or .ZN CurrentTime . .SH DESCRIPTION The .ZN XGrabPointer function actively grabs control of the pointer and returns .ZN GrabSuccess if the grab was successful. Further pointer events are reported only to the grabbing client. .ZN XGrabPointer overrides any active pointer grab by this client. If owner_events is .ZN False , all generated pointer events are reported with respect to grab_window and are reported only if selected by event_mask. If owner_events is .ZN True and if a generated pointer event would normally be reported to this client, it is reported as usual. Otherwise, the event is reported with respect to the grab_window and is reported only if selected by event_mask. For either value of owner_events, unreported events are discarded. .LP If the pointer_mode is .ZN GrabModeAsync , pointer event processing continues as usual. If the pointer is currently frozen by this client, the processing of events for the pointer is resumed. If the pointer_mode is .ZN GrabModeSync , the state of the pointer, as seen by client applications, appears to freeze, and the X server generates no further pointer events until the grabbing client calls .ZN XAllowEvents or until the pointer grab is released. Actual pointer changes are not lost while the pointer is frozen; they are simply queued in the server for later processing. .LP If the keyboard_mode is .ZN GrabModeAsync , keyboard event processing is unaffected by activation of the grab. If the keyboard_mode is .ZN GrabModeSync , the state of the keyboard, as seen by client applications, appears to freeze, and the X server generates no further keyboard events until the grabbing client calls .ZN XAllowEvents or until the pointer grab is released. Actual keyboard changes are not lost while the pointer is frozen; they are simply queued in the server for later processing. .LP If a cursor is specified, it is displayed regardless of what window the pointer is in. If .ZN None is specified, the normal cursor for that window is displayed when the pointer is in grab_window or one of its subwindows; otherwise, the cursor for grab_window is displayed. .LP If a confine_to window is specified, the pointer is restricted to stay contained in that window. The confine_to window need have no relationship to the grab_window. If the pointer is not initially in the confine_to window, it is warped automatically to the closest edge just before the grab activates and enter/leave events are generated as usual. If the confine_to window is subsequently reconfigured, the pointer is warped automatically, as necessary, to keep it contained in the window. .LP The time argument allows you to avoid certain circumstances that come up if applications take a long time to respond or if there are long network delays. Consider a situation where you have two applications, both of which normally grab the pointer when clicked on. If both applications specify the timestamp from the event, the second application may wake up faster and successfully grab the pointer before the first application. The first application then will get an indication that the other application grabbed the pointer before its request was processed. .LP .ZN XGrabPointer generates .ZN EnterNotify and .ZN LeaveNotify events. .LP Either if grab_window or confine_to window is not viewable or if the confine_to window lies completely outside the boundaries of the root window, .ZN XGrabPointer fails and returns .ZN GrabNotViewable . If the pointer is actively grabbed by some other client, it fails and returns .ZN AlreadyGrabbed . If the pointer is frozen by an active grab of another client, it fails and returns .ZN GrabFrozen . If the specified time is earlier than the last-pointer-grab time or later than the current X server time, it fails and returns .ZN GrabInvalidTime . Otherwise, the last-pointer-grab time is set to the specified time .Pn ( CurrentTime is replaced by the current X server time). .LP .ZN XGrabPointer can generate .ZN BadCursor , .ZN BadValue , and .ZN BadWindow errors. .LP The .ZN XUngrabPointer function releases the pointer and any queued events if this client has actively grabbed the pointer from .ZN XGrabPointer , .ZN XGrabButton , or from a normal button press. .ZN XUngrabPointer does not release the pointer if the specified time is earlier than the last-pointer-grab time or is later than the current X server time. It also generates .ZN EnterNotify and .ZN LeaveNotify events. The X server performs an .ZN UngrabPointer request automatically if the event window or confine_to window for an active pointer grab becomes not viewable or if window reconfiguration causes the confine_to window to lie completely outside the boundaries of the root window. .LP The .ZN XChangeActivePointerGrab function changes the specified dynamic parameters if the pointer is actively grabbed by the client and if the specified time is no earlier than the last-pointer-grab time and no later than the current X server time. This function has no effect on the passive parameters of a .ZN XGrabButton . The interpretation of event_mask and cursor is the same as described in .ZN XGrabPointer . .LP .ZN XChangeActivePointerGrab can generate a .ZN BadCursor and .ZN BadValue error. .SH DIAGNOSTICS .TP 1i .ZN BadCursor A value for a Cursor argument does not name a defined Cursor. .TP 1i .ZN BadValue Some numeric value falls outside the range of values accepted by the request. Unless a specific range is specified for an argument, the full range defined by the argument's type is accepted. Any argument defined as a set of alternatives can generate this error. .TP 1i .ZN BadWindow A value for a Window argument does not name a defined Window. .SH "SEE ALSO" XAllowEvents(__libmansuffix__), XGrabButton(__libmansuffix__), XGrabKey(__libmansuffix__), XGrabKeyboard(__libmansuffix__) .br \fI\*(xL\fP libX11-1.6.3/man/XLocaleOfIM.man000064401431060000012000000000611247741723500163650ustar00alancstaff00002660200006.so man__libmansuffix__/XOpenIM.__libmansuffix__ libX11-1.6.3/man/XSetPlaneMask.man000064401431060000012000000000631247741723500170040ustar00alancstaff00002660200006.so man__libmansuffix__/XSetState.__libmansuffix__ libX11-1.6.3/INSTALL000064401431060000012000000366001247742036600141130ustar00alancstaff00002660200006Installation Instructions ************************* Copyright (C) 1994-1996, 1999-2002, 2004-2011 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell commands `./configure; make; make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for instructions specific to this package. Some packages provide this `INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. Running `configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type `make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the `make install' phase executed with root privileges. 5. Optionally, type `make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior `make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type `make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide `make distcheck', which can by used by developers to test that all other targets like `make install' and `make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. This is known as a "VPATH" build. With a non-GNU `make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple `-arch' options to the compiler but only a single `-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the `lipo' tool if you have problems. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of `${prefix}', so that specifying just `--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to `configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the `make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, `make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of `${prefix}'. Any directories that were specified during `configure', but not in terms of `${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the `DESTDIR' variable. For example, `make install DESTDIR=/alternate/directory' will prepend `/alternate/directory' before all installation names. The approach of `DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of `${prefix}' at `configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of `make' will be. For these packages, running `./configure --enable-silent-rules' sets the default to minimal output, which can be overridden with `make V=1'; while running `./configure --disable-silent-rules' sets the default to verbose, which can be overridden with `make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. HP-UX `make' updates targets which have the same time stamps as their prerequisites, which makes it generally unusable when shipped generated files such as `configure' are involved. Use GNU `make' instead. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its `' header file. The option `-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put `/usr/ucb' early in your `PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in `/usr/bin'. So, if you need `/usr/ucb' in your `PATH', put it _after_ `/usr/bin'. On Haiku, software installed for all users goes in `/boot/common', not `/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to an Autoconf bug. Until the bug is fixed you can use this workaround: CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of all of the options to `configure', and exit. `--help=short' `--help=recursive' Print a summary of the options unique to this package's `configure', and exit. The `short' variant lists options used only in the top level, while the `recursive' variant lists options also present in any nested packages. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. `--no-create' `-n' Run the configure checks, but stop before creating any output files. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. only a single `-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -archlibX11-1.6.3/ChangeLog000064401431060000012000017363711247742036600146510ustar00alancstaff00002660200006commit 5a499ca7b064bf7e6a4fcc169f22862dce0c60c5 Author: Alan Coopersmith Date: Mon Mar 9 15:28:29 2015 -0700 libX11 1.6.3 Signed-off-by: Alan Coopersmith commit c8e19b393defd53f046ddc2da3a16881221b3c34 Author: Joonas Javanainen Date: Thu Feb 5 17:31:04 2015 +0200 Fix XErrorEvent struct field order in man page In the man page the field "resourceid" was in a different place than in the actual struct layout in Xlib.h Signed-off-by: Joonas Javanainen Signed-off-by: Peter Hutterer commit ddf3b09bb262d01b56fbaade421ac85b0e60a69f Author: Ran Benita Date: Tue Feb 3 13:23:50 2015 -0500 compose: fix the description of modifiers in compose sequences The Compose format has a feature which allows specifying certain modifiers must (or must not) be present with a given keysym in the sequence. The grammar in imLcPrs.c and the Compose man page both do not match what the code actually does (see the handling of the variables `modifier_mask` and `modifier` in parseline() in imLcPrs.c, which are eventually matched as `ev->state & modifier_mask == modifier`). Also explicitly list the accepted modifier names, since they are not standard (e.g. "Ctrl" instead of "Control"). Signed-off-by: Ran Benita Signed-off-by: James Cloos commit 129f13f385c50e3d8b53ea7441b17386b0f36aeb Author: Ran Benita Date: Tue Feb 3 13:23:49 2015 -0500 xkb: fix misleading comment about consumed modifiers In the spec and the man page the `mods_rtrn` argument is described as "backfilled with unconsumed modifiers" but actually it is backfilled with the *consumed* modifiers. This is also mentioned a few lines below in each case. Signed-off-by: Ran Benita Signed-off-by: James Cloos commit 446f5f7f41317a85a0cd0efa5e6a1b37bc99fba2 Author: Ingo Schwarze Date: Tue Dec 9 10:44:13 2014 +0100 Fix pasto in XkbGetKeyBehaviors(3) manual Reviewed-by: Thomas Klausner Signed-off-by: Peter Hutterer commit f3831dde6972e4da9e018c6a5f4013d8756a5e78 Author: Benno Schulenberg Date: Sun Nov 23 21:35:36 2014 +0100 nls: Sorting compose sequences rigorously in mirroring pairs, as is custom. Signed-off-by: Benno Schulenberg commit a51681b60c84109fe19f5d449e13080522499324 Author: Benno Schulenberg Date: Thu Sep 19 16:42:01 2013 +0200 nls: Remove a duplicate locale name, and sort some others more strictly. Also improve the grammar of the initial comment. Signed-off-by: Benno Schulenberg Signed-off-by: James Cloos commit 426b7f850f5376db96a4b12420ee141603fcc3cd Author: Benno Schulenberg Date: Fri Sep 20 12:37:29 2013 +0200 nls: Add a comment to the block of accented Hebrew letters. And align them in a nicer manner. Signed-off-by: Benno Schulenberg Signed-off-by: James Cloos commit 7474c6f1ee78dd097b1d0b4c7e3e4ea41317e335 Author: Benno Schulenberg Date: Fri Sep 20 12:05:09 2013 +0200 nls: Add one lowercase compose variant for ®, to mirror those for ©. Signed-off-by: Benno Schulenberg Signed-off-by: James Cloos commit 18dcd13514fa538afefa78c93523d9dbd4688e74 Author: Benno Schulenberg Date: Sat Sep 7 20:10:43 2013 +0200 nls: Adding the visual composing characters to two comment lines. The lines around them also contain the characters in the comments. Signed-off-by: Benno Schulenberg Signed-off-by: James Cloos commit 18d8307575af748913d5da17e3de45da2a22ede4 Author: Benno Schulenberg Date: Sat Sep 7 20:09:32 2013 +0200 nls: Grouping a lone superscript minus together with its mates. Signed-off-by: Benno Schulenberg Signed-off-by: James Cloos commit 33301cc45e6a2b8aa841ed6325547af970f8c4db Author: Benno Schulenberg Date: Sat Sep 7 19:53:38 2013 +0200 nls: Grouping the compose sequences for Dstroke/dstroke together. Signed-off-by: Benno Schulenberg Signed-off-by: James Cloos commit 78fe1becb6c18fa33c0d5f04005b45d856f8952a Author: Gioele Barabucci Date: Sun Sep 21 23:05:55 2014 +0200 Add compose sequence for U+20B9 INDIAN RUPEE SIGN The compose sequence for the new Indian Rupee sign is modelled after the sequence for the Euro sign. Signed-off-by: Gioele Barabucci Signed-off-by: James Cloos commit 6101b967b641355dd863fd1ce52c6a7d58bcbe68 Author: Gabriel Souza Franco Date: Thu Jul 31 22:23:28 2014 -0300 Add double-arrow compose sequence Signed-off-by: Gabriel Souza Franco Reviewed-by: Alan Coopersmith Signed-off-by: Alan Coopersmith commit 368a6401c6a3275d3497fec38a3dcbc38cd9df60 Author: James Cloos Date: Fri Aug 1 18:30:42 2014 -0400 Add cs_CZ.UTF-8 locale to configure.ac Commit cf4d5989383a should have included this. Reported-by: Colin Harrison Signed-off-by: James Cloos commit cf4d5989383acc4ed1b7eebadde9f380f2129766 Author: James Cloos Date: Tue Jul 29 15:02:56 2014 -0400 Add nls for cs_CZ.UTF-8 Based on the iso8859-2 compose, and a bug report by Vladimír Marek, override the en_US.UTF-8 use of to enter »ǔ« instead to enter »ů«, and likewise for the majuscule, for the Czech locale. This evidently is the norm for Czech keyboards. Fixes bz#81875. The XI18N_OBJS and XLC_LOCALE.pre files are empty, as they are for several other locales. That may require an update. Reported-by: Vladimír Marek Signed-off-by: James Cloos commit d9f569572bd14db31921471e7b877523b5cf1e4c Author: Alan Coopersmith Date: Sat Jul 26 12:17:47 2014 -0700 Fix source paths for out-of-tree lintlib builds Signed-off-by: Alan Coopersmith commit 0885cad1e4a9ed57266582be320be55259c881bf Author: Alan Coopersmith Date: Sun Jul 20 09:21:20 2014 -0700 specs/XKB: Markup fractions as <{super,sub}script> instead of Matches the way they were styled in original doc, before conversion to DocBook. Signed-off-by: Alan Coopersmith commit d0a9e9d56bb003315787201ee525b4d00fd54e06 Author: Alan Coopersmith Date: Sat Jul 19 23:55:47 2014 -0700 specs/XKB: acknowledge my contributions Signed-off-by: Alan Coopersmith commit 9c0be82017f513e2eb63d59b095f1cf1955f2e2b Author: Alan Coopersmith Date: Sat Jul 19 23:53:48 2014 -0700 specs/XKB: Trim leading spaces off text lines perl -i -p -e 's{/\*(\S)}{/* \1}g;' *.xml Signed-off-by: Alan Coopersmith commit 75b0b10990f38d966c6fcc821bf15e58c5a90c91 Author: Alan Coopersmith Date: Sat Jul 19 20:30:55 2014 -0700 specs/XKB: Add olinks to libX11 for "X Library Functions Affected by Xkb" Signed-off-by: Alan Coopersmith commit 5009621799444e9d1d284719f871d00be13e7330 Author: Alan Coopersmith Date: Sat Jul 19 12:34:28 2014 -0700 specs/XKB: Fix miscelleanous typos & spelling errors Signed-off-by: Alan Coopersmith commit ac219bf1522a592bd3e3283b1a6ea3dfd2c3c48c Author: Alan Coopersmith Date: Sat Jul 19 00:46:41 2014 -0700 specs/XKB: add some more indexterms by hand Signed-off-by: Alan Coopersmith commit 5c3aa4c69e65ecf2e56d5e26f3833fb5d31973c2 Author: Alan Coopersmith Date: Sat Jul 19 00:48:02 2014 -0700 specs/XKB: fixup various formatting issues in s Signed-off-by: Alan Coopersmith commit 70c648ff852fd9bc784967cfc77ea70bd7f14c8d Author: Alan Coopersmith Date: Fri Jul 18 23:56:29 2014 -0700 specs/XKB: fixup various formatting issues in s Including translating some that are really just lists into markup. Signed-off-by: Alan Coopersmith commit 94b56774784ac00b9db02403aecea10bb0814c10 Author: Alan Coopersmith Date: Fri Jul 18 23:18:52 2014 -0700 specs/XKB: add some more links by hand random bits where a link looked handy Signed-off-by: Alan Coopersmith commit 7a15a934cdb07ed1b991bd0ef633f32ee00b1833 Author: Alan Coopersmith Date: Fri Jul 18 23:16:31 2014 -0700 specs/XKB: add links for terms in definition list under figure 1.1 Signed-off-by: Alan Coopersmith commit 92b86fc3c50fbb7ab2e36af10a2fb3fe6284f58c Author: Alan Coopersmith Date: Fri Jul 18 22:52:16 2014 -0700 specs/XKB: add links to more tables listing section references Signed-off-by: Alan Coopersmith commit 06a4483a05053b4f8d8c0d4cc0513c68ea912676 Author: Alan Coopersmith Date: Fri Jul 18 22:49:34 2014 -0700 specs/XKB: Table 4.1: remove page numbers & unnecessary para tags Page numbers refer to old doc format, didn't translate to new one Signed-off-by: Alan Coopersmith commit 61bd55c6d1ab211b89d604bd05555dc417f6e53d Author: Alan Coopersmith Date: Sat Jul 19 11:55:51 2014 -0700 specs/XKB: remove unwanted white space around C -> struct references perl -i -0 -p -e 's{\s*->\s*}{->}g' *xml Signed-off-by: Alan Coopersmith commit 2be0cc0b2abbcc98cfd150210dea415a04787251 Author: Alan Coopersmith Date: Fri Jul 18 22:26:20 2014 -0700 specs/XKB: replace -> with → when used as arrow, not in C structs Signed-off-by: Alan Coopersmith commit bf1f3d6f6f995303624679ae546f507c70967dc0 Author: Alan Coopersmith Date: Fri Jul 18 22:21:10 2014 -0700 specs/XKB: replace => with ⇒ for double arrows Signed-off-by: Alan Coopersmith commit c7ee427fc0a72abd4a4f147ab16a5d1128a6a2ba Author: Alan Coopersmith Date: Sat Jul 19 11:33:35 2014 -0700 specs/XKB: Markup some ranges with – instead of - commit ec4075303c6c0d1d64bfe378e585968f9a137da7 Author: Alan Coopersmith Date: Fri Jul 18 22:10:45 2014 -0700 specs/XKB: Markup some subtractions with − instead of - Signed-off-by: Alan Coopersmith commit 441a267e461132a38abed205245f028686526f1d Author: Alan Coopersmith Date: Fri Jul 18 22:04:40 2014 -0700 specs/XKB: make sure all files have DOCTYPEs so standard entities work Signed-off-by: Alan Coopersmith commit 88fd70bee410f290b4f540405fdc7ecd85c26f25 Author: Alan Coopersmith Date: Fri Jul 18 21:55:41 2014 -0700 specs/XKB: Markup quoted terms as instead of with "" Signed-off-by: Alan Coopersmith commit 3576587ff10334a8f48c34b4fe5b7e829dec9a1b Author: Alan Coopersmith Date: Sat Jul 19 09:01:26 2014 -0700 specs/XKB: fixup newlines between tags and punctuation Get rid of unwanted whitespace before punctuation by moving them to the lines with the tags, instead of before & after. perl -i -0 -p -e 's{\>\s*\n([\.,;:])}{>\1\n}g' *xml Signed-off-by: Alan Coopersmith commit 6d5ec492cd28c206423337f926503349702af5a6 Author: Alan Coopersmith Date: Fri Jul 18 21:29:33 2014 -0700 specs/XKB: fixup newlines between tags and parens Get rid of unwanted whitespace inside parens by moving them to the lines with the tags, instead of before & after. perl -i -0 -p \ -e 's{(? comments out of the way now. Signed-off-by: Alan Coopersmith commit ce95f152eda509263874c53fb7c6b4a6bdab2c29 Author: Alan Coopersmith Date: Mon Jul 7 22:59:25 2014 -0700 specs/XKB: Remove remaining xref comments All the places marked by these have been turned into the appropriate link, xref, or olink tags now. Signed-off-by: Alan Coopersmith commit 6590b66e19af8dff68888ac403ac82f5d585b4e2 Author: Alan Coopersmith Date: Mon Jul 7 22:56:36 2014 -0700 specs/XKB: make olinks to xkbproto for references in section 10.13 Signed-off-by: Alan Coopersmith commit fcda446877a62e7443d7bc704ba3610e90d1e755 Author: Alan Coopersmith Date: Mon Jul 7 22:22:28 2014 -0700 specs/XKB: Add

tags and make Figure references link to them Signed-off-by: Alan Coopersmith commit 087a2338476719e340dc3d5af0df6fdc4a26ce7a Author: Alan Coopersmith Date: Mon Jul 7 21:30:01 2014 -0700 specs/XKB: Turn Table references into links Adds id attributes to all table tags so we can link to them Signed-off-by: Alan Coopersmith commit 135fa07b74cb50172c6a75768d499cd87ddb336e Author: Alan Coopersmith Date: Sun Jul 6 21:29:59 2014 -0700 specs/XKB: Turn section references into xref links Signed-off-by: Alan Coopersmith commit 53e931d79926af8a3996253efd8b5f6c21d9e5d7 Author: Alan Coopersmith Date: Sun Jul 6 21:17:18 2014 -0700 specs/XKB: Turn Chapter references into xref links Signed-off-by: Alan Coopersmith commit b7f00ce5bcb0c00696bb82503ab548e14f04d17d Author: Alan Coopersmith Date: Sun Jul 6 20:40:18 2014 -0700 specs/XKB: Apply to semantic tag transformations from Xlib spec Signed-off-by: Alan Coopersmith commit b00a7ddff2744238fbfe31c2298b02028a45a6ff Author: Alan Coopersmith Date: Sun Jul 6 20:34:51 2014 -0700 specs/XKB: Markup function names as instead of Signed-off-by: Alan Coopersmith commit bfbb58b7679221cb5c9212665209ea9099ad079a Author: Alan Coopersmith Date: Sun Jul 6 20:25:46 2014 -0700 specs/XKB: normalize layout in xml files - Stop placing on empty space, commas, and periods. - Move periods & commas after closing tag - move open & close tags to same line, instead of mirroring nroff layout. Simplifies automating further transformations of these tags. Performed via: perl -i -0 -p \ -e 's{(\s*)}{}msg;' \ -e 's{([\s\.,]*)\s*}{\1}msg;' \ -e 's{\n([\.,])\s*}{\1\n}msg;' \ -e 's{([^\.])([\.,])\s*}{\1\2}msg;' \ -e 's{\s*\n\s*}{\n}msg;' *xml Signed-off-by: Alan Coopersmith commit b16ee69a0103109a661a88140a1765dcd7bda634 Author: Alan Coopersmith Date: Sun Jul 6 15:57:41 2014 -0700 specs/XKB: Convert to funcsynopsis+variablelist instead of informaltable Signed-off-by: Alan Coopersmith commit b41d43d4cf0c0a1a049a171ee8cf6fd8a3ee4335 Author: Alan Coopersmith Date: Sun Jul 6 19:29:38 2014 -0700 specs/XKB: Add index Signed-off-by: Alan Coopersmith commit 72ae1d793be078db521dda60af578ece71f364de Author: Alan Coopersmith Date: Sun Jul 6 13:21:40 2014 -0700 specs/XKB: Fix various markup issues in functiondecl tables - Merge some functionargdecl entries incorrectly split across rows - Add missing parameter name markup to some functionargdecls - Add missing function prototype markup to a functiondecl - Remove stray emphasis tags in a functiondecl Allows them to correctly convert to funcsynopsis markup in next step. Signed-off-by: Alan Coopersmith commit 9fdb973012de80ac60dbc59c39162f4e839fc5a4 Author: Alan Coopersmith Date: Sun Jul 6 12:15:23 2014 -0700 specs/XKB: Convert header filenames to filename tags Signed-off-by: Alan Coopersmith commit 5525e8433f93bce464412f27cffa203ea628f368 Author: Alan Coopersmith Date: Tue Jul 8 00:05:32 2014 -0700 specs/libX11: disengender a user reference Signed-off-by: Alan Coopersmith commit d8679eae9317b389ad4acb0430360ee0663e2af8 Author: Alan Coopersmith Date: Fri Jul 11 18:41:42 2014 -0700 specs/libX11: Correct value of IconicState to match Xutil.h Xutil.h has always had a value of 3 for IconicState, since 2 was previously used for the long-obsolete ZoomState, so make the spec match what programs have used for decades. Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit 7ce2b0f12a48fb832f457cbafb0e1144ef557f9a Author: Alan Coopersmith Date: Fri Jul 11 10:34:08 2014 -0700 Use C99 named initializers to fill in events passed to XSendEvent Forces compiler to zero-fill unset fields in the struct (fixing bug 81236) and allows optimizer to order field initialization to best fit cache layout or other considerations. Before & after output of gcc -S on AMD64 shows insertion of "rep stosq" instructions to rapidly zero-fill structs. Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit 169805e1dc8743b37b00e24cf3a5eb8748f733ad Author: Alan Coopersmith Date: Sun Jul 6 11:13:49 2014 -0700 Fix validation of ctrls parameter to XkbGetPerClientControls() Nothing in the XKB spec states that the memory pointed to by ctrls has to be initialized to any given value when passed to the function, only that it is set by the function to the values returned by the X server: http://www.x.org/releases/X11R7.7/doc/libX11/XKB/xkblib.html#The_Miscellaneous_Per_client_Controls The check for the incoming value seems to be copied from XkbSetPerClientControls without explanation. Instead change it to checking if ctrls is non-NULL, since there's no point asking the X server to return a value the caller won't even see. Found while investigating report from cppcheck-1.65: [src/xkb/XKB.c:699] -> [src/xkb/XKB.c:719]: (warning) Possible null pointer dereference: ctrls - otherwise it is redundant to check it against null. Signed-off-by: Alan Coopersmith commit 1e362fac92c6688fb42b195ccad16d7a337a34c1 Author: Alan Coopersmith Date: Sun Jul 6 10:54:57 2014 -0700 Fix map->num_types check in XkbAddKeyType() Check is intended to ensure we allocate at least XkbNumRequiredTypes in map, but was accidentally marked with a ! causing the wrong check. Reported-by: Harms Reviewed-by: Matthieu Herrb Signed-off-by: Alan Coopersmith commit ff9a5c199251a84fa59d14fd48dadb3f8920b54b Author: Alan Coopersmith Date: Sun Jul 6 15:08:21 2014 -0700 specs/libX11: Add missing spaces to 'unsignedint' & 'unsignedlong' types Signed-off-by: Alan Coopersmith commit a06ea86773568926c36ae650b188fc818d540db7 Author: Alan Coopersmith Date: Sun Jul 6 15:04:27 2014 -0700 specs/libX11: Fix height & width in parameter lists to be two separate entries "unsigned int width, unsigned int height", not a single parameter "height" of type "unsignedintwidth,". Signed-off-by: Alan Coopersmith commit e4db5e503682b3304fe82e4b17b419a8e0f0a9f2 Author: Alan Coopersmith Date: Sun Jul 6 14:38:10 2014 -0700 specs/libX11: Fix x & y in parameter lists to be two separate parameters "int x, int y" not a single parameter y of type "intx" Signed-off-by: Alan Coopersmith commit aa8bda0db2c6d82515b90ceb4a7d6403e38895e9 Author: walter harms Date: Sat Jun 7 12:03:17 2014 +0200 lcDefConv.c: fix use before check * Do not use variables before checked for NULL. * remove some superfluid spaces (Mark Kettenis) Signed-off-by: Harms Reviewed-by: Alan Coopersmith Signed-off-by: Alan Coopersmith commit c0670e5d3ae330e611ecb05303d579a4f8a3d114 Author: Alan Coopersmith Date: Mon Jun 16 15:16:10 2014 -0700 Start adding Unicode 7.0 support to compose table New characters defined in http://www.unicode.org/charts/PDF/U1F300.pdf Signed-off-by: Alan Coopersmith commit a4679baaa18142576d42d423afe816447f08336c Author: walter harms Date: Sat Jun 7 11:54:34 2014 +0200 rm redundant null checks remove more redundant NULL checks note that _XkbFree() is really Xfree() Signed-off-by: Harms Reviewed-by: Rémi Cardona Signed-off-by: Peter Hutterer commit 602d7f5030fe93b2fe7f29fb7310deb6f50cb6df Author: walter harms Date: Sat Jun 7 15:17:27 2014 +0200 libX11: rm redundante NULL checks This patch removes the last remaining NULL checks for Xfree() Signed-off-by: Harms Reviewed-by: Peter Hutterer Signed-off-by: Peter Hutterer commit d81fed46144d089bdfa1d916a28dffc9ebffe1e4 Author: walter harms Date: Fri Jun 6 22:53:05 2014 +0200 Remove more redundant null checks before Xfree() Signed-off-by: Harms Reviewed-by: Alan Coopersmith Signed-off-by: Alan Coopersmith commit 0b7fd7dbec136bae317bd9a329309eaa089beee3 Author: walter harms Date: Thu Jun 5 18:37:40 2014 +0200 Remove redundant null checks before free This patch removes some redundant null checks before free. It should not change the code otherwise. Be aware that this is only the first series. Signed-off-by: Harms Reviewed-by: Alan Coopersmith Signed-off-by: Alan Coopersmith commit 7d452fad5068ba92b964e92bc46708046f4044aa Author: walter harms Date: Wed Jun 4 17:12:31 2014 +0200 libX11/lcUTF8.c fix: dereferenced before check * Do not use variables before checked for NULL. Signed-off-by: Harms Reviewed-by: Alan Coopersmith Signed-off-by: Alan Coopersmith commit a3808f51517a720e7ff738208af60865779dd6ef Author: walter harms Date: Wed Jun 4 17:10:20 2014 +0200 libX11/XKBNames.c fix: dereferenced before check * Do not use variables before checked for NULL. Signed-off-by: Harms Reviewed-by: Alan Coopersmith Signed-off-by: Alan Coopersmith commit b3c9f6a17e430aabe16aecbe097f7312a0f6ff78 Author: walter harms Date: Wed Jun 4 17:08:12 2014 +0200 libX11/lcGenConv.c fix: dereferenced before check * Do not use variables before checked for NULL. Signed-off-by: Harms Reviewed-by: Alan Coopersmith Signed-off-by: Alan Coopersmith commit c6bc28d433243c32b3f74955f1478451b4fd27b5 Author: Andreas Schwab Date: Sun Jan 19 16:59:13 2014 +0100 Restore lost tabs in sed commands Signed-off-by: Andreas Schwab Signed-off-by: Alan Coopersmith commit e3dc0d17339e61eaf0b51b8907510984e3bf23cb Author: Benno Schulenberg Date: Thu Sep 19 11:01:11 2013 +0200 nls: Transform Brazilian compose file to an include plus three overrides. Signed-off-by: James Cloos commit 16c87dda4da2271aaecc5d8b6fe6ecd072cc584c Author: Benno Schulenberg Date: Fri Sep 6 12:10:01 2013 +0200 nls: Adding the missing compose sequences with for O with ogonek. All other vowels with ogoneks can already be composed using . Signed-off-by: Benno Schulenberg Signed-off-by: James Cloos commit 655b60f48376069750b151c46da836fdd411c83b Author: Benno Schulenberg Date: Fri Sep 6 12:04:24 2013 +0200 nls: Adding the missing postfix sequences for composing vowels with ogoneks. It existed for lowercase i, but not for uppercase I nor the other vowels. Signed-off-by: Benno Schulenberg Signed-off-by: James Cloos commit 7f8f9a36ef901f31279c385caf960a22daeb33fe Author: Owen W. Taylor Date: Fri May 9 18:21:05 2014 -0400 Fix XNextRequest() after direct usage of XCB When XCB owns the X socket, dpy->request is not updated, so NextRequest() and XNextRequest() return the wrong value. There's nothing we can do to fix NextRequest() while retaining ABI compat, but change XNextRequest() to grab the socket back from XCB, updating dpy->request. Signed-off-by: Owen W. Taylor Reviewed-by: Uli Schlachter Signed-off-by: Alan Coopersmith commit 0f9e734ea96556fe750a4baf354d42d5a87bcd14 Author: Alan Coopersmith Date: Sun May 4 11:54:59 2014 -0700 Add missing .TE tags to end tables in Xkb man pages Signed-off-by: Alan Coopersmith commit 280274e5292e013b43e552274111fab434f5ed4e Author: Alan Coopersmith Date: Sun May 4 11:23:17 2014 -0700 XCreateGC.man: simplify table to work with Solaris tbl Having every table cell be a text diversion (T{...T}) was too much for Solaris tbl to handle, and thus "man XCreateGC" would print the error /usr/man/man3x11/XCreateGC.3x11: line 402: Too many text block diversions tbl quits and not display the table of mask bits or any text in the man page after that table. Since the #define column doesn't need special handling, making it not use text diversions brings the table under the tbl limit. Signed-off-by: Alan Coopersmith commit 93bb325a54025dd15f4744abce54b358960420f9 Author: James Cloos Date: Tue May 20 17:30:10 2014 -0400 Revert "nls: Adding compose sequences (with first) that GTK also has." Parenleft is already in use for sequences of the form <(> <)> to generate circled letters. Eg, generates ⓐ. This reverts commit f020235f4bd91fb6eade82f8c9f7b85a57981768. Signed-off-by: James Cloos commit 060707851be918f2f507a26d17b016f764ddf2b4 Author: Benno Schulenberg Date: Fri Sep 6 11:42:59 2013 +0200 nls: Adding accessible compose sequences for Ș and Ț (with comma below). Compose sequences with exist, but very few keyboard layouts contain that symbol. So a more usual character is needed to be able to easily compose Ș, ș, Ț and ț. The semicolon is normally only used for composing letters with ogoneks -- but only vowels take ogoneks, so the character is free for consonants, and thus is used here to compose commas below. It is somewhat fitting, because on most Romanian keyboards the Ș is placed on that key, and the Ț next to it. (Oh -- the more obvious sequences with were already taken for composing S and T with cedillas.) Signed-off-by: Benno Schulenberg Signed-off-by: James Cloos commit ca435c2f753aa2961fb35ac448cdb2cc77112755 Author: Benno Schulenberg Date: Tue Sep 3 21:10:33 2013 +0200 nls: Ordering some compose sequences in a more customary way. The custom seems to be: pairing the ones that have only the sequence of two keys reversed, and putting the one with the diacritic first first. Signed-off-by: Benno Schulenberg Signed-off-by: James Cloos commit f020235f4bd91fb6eade82f8c9f7b85a57981768 Author: Benno Schulenberg Date: Tue Sep 3 20:44:42 2013 +0200 nls: Adding compose sequences (with first) that GTK also has. Signed-off-by: Benno Schulenberg Signed-off-by: James Cloos commit bda0b3b5bd19154206dc40166364e73d4b6b1374 Author: Benno Schulenberg Date: Tue Sep 3 11:14:16 2013 +0200 nls: Allowing Romanian Ă and ă to be composed also with lowercase . Signed-off-by: Benno Schulenberg Signed-off-by: James Cloos commit 8be4610939b833587954957f5963eb4191b43d19 Author: Alan Coopersmith Date: Thu Mar 13 23:22:48 2014 -0700 Fix "follwing" typo in en_US.UTF-8/Compose comment Signed-off-by: Alan Coopersmith commit 6f30e9034f29c3ae6ad7e617b3d5e903aa107b6a Author: Reuben Thomas Date: Mon Jan 27 14:18:24 2014 +0000 en_US.UTF-8/Compose: Fix apparent copy-paste-o, changing capital to small A. Signed-off-by: Alan Coopersmith commit d6bd988bc00494914b38b95ee5df77ac4f32f19f Author: Peter Hutterer Date: Mon Mar 3 12:38:48 2014 +1000 man: fix man page for XkbGetMap Returned structure must be freed with XkbFreeKeyboard(). Reported-by: Morten Bøgeskov Signed-off-by: Peter Hutterer commit a6dcf2201a05adbff54122df05a1e6325936abb6 Author: Ran Benita Date: Tue Feb 11 13:26:16 2014 +0200 Remove dead USE_OWN_COMPOSE-protected code The build doesn't provide any way to define this option. It also refers to files (imComp.h) and functions (e.g. XimCompInitTables(), XimCompProcessSym()) which are not found anywhere, and the ordinary Compose implementation in xim doesn't use any of it. Signed-off-by: Ran Benita Reviewed-by: Julien Cristau Signed-off-by: Alan Coopersmith commit b64bee2ddb7b96f00713a8b8435f11ad9ac1c9e0 Author: Ran Benita Date: Sun Feb 16 15:24:58 2014 +0200 nls: always use XCOMM instead of # for comments in Compose.pre files Lines starting with # are considered as preprocessor directives in the .pre files. Fixes warnings like: :3:0: error: invalid preprocessing directive #Khmer Signed-off-by: Ran Benita Signed-off-by: James Cloos commit 470e2289a3ebc59c5a35e54e1adeb0f261d5bf88 Author: Alan Coopersmith Date: Thu Feb 6 13:48:08 2014 -0800 Fix typos in Xrm.c comments Signed-off-by: Alan Coopersmith commit aacf95dacc7c598e7297894580d4d655593813b2 Author: Marko Myllynen Date: Mon Jan 13 16:43:18 2014 +0200 Annotate Finnish Compose map with Unicode code points Scripted annotation, no functional changes. Signed-off-by: James Cloos commit 20fdccd81b54678376d49e00edfebbbe94951f07 Author: Teemu Likonen Date: Fri Jul 20 19:21:04 2012 +0300 Fix "RING ABOVE" key in the Finnish compose file The Finnish keyboard standard defines that must insert the character U+02DA RING ABOVE. Currently the Finnish Compose file inserts U+00B0 DEGREE SIGN even though the line's comment says "RING ABOVE". This commit changes the character to U+02DA RING ABOVE. Signed-off-by: Teemu Likonen Signed-off-by: James Cloos commit 8757e2ac8e04f2932ff437127f3e2ae9ac20c1d7 Author: Ran Benita Date: Wed Jan 29 02:11:47 2014 +0200 nls: remove duplicate 'ohorn' and 'uhorn' compose sequences Since == and == , when translated to keysyms: #define XK_Ohorn 0x10001a0 /* U+01A0 LATIN CAPITAL LETTER O WITH HORN */ #define XK_ohorn 0x10001a1 /* U+01A1 LATIN SMALL LETTER O WITH HORN */ (and similarly for uhorn), there is no need to have both names. Remove the unicode literal ones. Signed-off-by: Ran Benita Signed-off-by: James Cloos commit b98998cb3bea7cb3005f2e9d5bc5332d14b1d5d3 Author: Alan Coopersmith Date: Sat Jan 18 22:35:18 2014 -0800 Add RANDR 1.4 requests & events to XErrorDB Checked against randrproto.txt & randr.h Signed-off-by: Alan Coopersmith commit 321392ded15a7ee9d177d4ebe8846336ba76741c Author: Alan Coopersmith Date: Fri Jan 3 20:04:33 2014 -0800 Remove unused ETEST & ESZTEST macros from XlibInt.c Left behind when 15e5eaf62897 removed support for building without XCB. Signed-off-by: Alan Coopersmith Reviewed-by: Jasper St. Pierre commit 1ffc0c5503d4f419fdbc765243832a53491bf5bc Author: Alan Coopersmith Date: Thu Dec 26 09:26:13 2013 -0800 _XkbReadGeomOverlay: check for NULL first, then use pointer Flagged by cppcheck 1.62: [lib/libX11/src/xkb/XKBGeom.c:479] -> [lib/libX11/src/xkb/XKBGeom.c:480]: (warning) Possible null pointer dereference: row - otherwise it is redundant to check it against null. Signed-off-by: Alan Coopersmith commit ddf5f130cc29bb3bf8b9c757dcbac31bc56e9379 Author: Alan Coopersmith Date: Thu Dec 26 09:22:49 2013 -0800 XkbSelectEventDetails: remove unnecessary assignments clear & selectAll are set to 0 already a few lines earlier, affectWhich is set to XkbMapNotifyMask a few lines later. None are used between the other assignments and the removed ones. Signed-off-by: Alan Coopersmith commit 3d69b0a83e62f8f6fbdd952fc49cdbdf8825e1e6 Author: Jon TURNEY Date: Thu Oct 7 18:46:08 2010 +0100 Don't try so hard to find a matching font with the given encoding See http://sourceware.org/bugzilla/show_bug.cgi?id=10948 Currently, if the locale is UTF-8, no CJK fonts are installed, and someone does XCreateFontSet() with a font name of "*", we end up asking the server to list the (non-existent) fonts 11 times for each CJK encoding, which can take a while. A * wildcard can match multiple components in a XLFD name in XListFonts(), so there's no need to try adding more than one to get a match. We do try once with a leading '*-' in case the fontname isn't a full well-formed XLFD name, maybe even that isn't needed? (See also http://invisible-island.net/xterm/xterm.faq.html#slow_menus) Signed-off-by: Jon TURNEY Signed-off-by: Alan Coopersmith commit 7e163300735d4bcd3386b86eec112acdad139c59 Author: Alan Coopersmith Date: Mon Dec 2 21:51:27 2013 -0800 unifdef -UISC Signed-off-by: Alan Coopersmith commit 1e43c262d13cab2b759665f9f13bdedbc7afbfd4 Author: Benno Schulenberg Date: Thu Sep 19 13:20:05 2013 +0200 nls: Fix transposed locale identifier for Khmer. Signed-off-by: Benno Schulenberg Reviewed-by: Alan Coopersmith Signed-off-by: Alan Coopersmith commit 0e45f64766c0557c8e99a979c70ca6f55664dae7 Author: Alan Coopersmith Date: Sat Nov 16 20:21:54 2013 -0800 Drop X_LOCALE fallback for OS'es without setlocale() C89 or bust! This was documented as being needed for "only Lynx, Linux-libc5, OS/2" and has never been enabled in modular builds, since none of those platforms have had anyone step up to add support since the X11R7 conversion to autotools. Mostly performed with unifdef -UX_LOCALE, followed by removal of files left without any purpose, and manual cleanup of remaining references. Signed-off-by: Alan Coopersmith Reviewed-by: Adam Jackson commit 6cb02b166361200da35ba14f52cd9aaa493eb0ea Author: Alan Coopersmith Date: Wed Oct 23 10:37:53 2013 -0700 Xcms file parsing should not require the impossible to succeed The field2 helper function, to split lines from Xcms.txt files into two tab delimited fields, contained a check: if ((*pBuf != '\n') || (*pBuf != '\0')) { return(XcmsFailure); which would cause it to return failure unless *pBuf had a value that was simultaneously equal to both \n & \0, and no one wants to live in a world where that could ever be true. This has gone unnoticed since 1991, since this only caused lines in Xcms.txt that started with whitespace to be rejected, but now gcc -Wlogicalop has brought it to our attention, and https://bugs.freedesktop.org/show_bug.cgi?id=70803 was filed. Now that we see it, and cannot unsee it, we change it to use the same logic as the check at other points in this function, to return failure only if we hit \n or \0 before we find the first non-whitespace character, so that lines starting with whitespace will have the space skipped over to get to the color name to be defined. Signed-off-by: Alan Coopersmith Reviewed-by: Dan Nicholson commit 18a5278b008e9faa59b346fcab18a8d74b875fda Author: Gaetan Nadon Date: Sat Sep 28 17:33:52 2013 -0400 makekeys: don't need to use target-specific CFLAGS It's the only thing built in that directory, so we can use AM_CFLAGS and AM_CPPFLAGS as usual. Reviewed-by: Alan Coopersmith Signed-off-by: Gaetan Nadon commit 5dcb40f28d59587597d2ff6e6ac64c71cfe6ff7b Author: James Cloos Date: Tue Sep 17 12:50:42 2013 -0400 nls/en_US.UTF-8/Compose.pre: Fix typo. Fix typo added in 215ce6a67863, s/actute/acute/. Fixes bug #69476. Reported by Jean Krohn. Signed-off-by: James Cloos commit cb107760df33ffc8630677e66e2e50aa37950a5c Author: Alan Coopersmith Date: Sun Sep 8 18:37:01 2013 -0700 libX11 1.6.2 commit 215ce6a67863de7acfd6dd3562b4fd97ef87b411 Author: Benno Schulenberg Date: Sun Sep 1 12:38:30 2013 +0200 nls: Adding more accessible compose sequences for J́ and j́. Few keyboards have an key, so this adds the much more accessible and usual compose sequences with , ánd the most comfortable ones with . Signed-off-by: Benno Schulenberg Signed-off-by: James Cloos commit e9b14d10d0258bfcc273ff8bc84cd349dccda62c Author: Alan Coopersmith Date: Sat Aug 24 17:27:43 2013 -0700 Bug 68413 - [Bisected]Error in `xterm': realloc(): invalid next size Pass *new* size to realloc, not old size. Signed-off-by: Alan Coopersmith commit c2b8e30790c21d6386767265263b3294ce1b1f9a Author: Alan Coopersmith Date: Fri Aug 16 21:04:02 2013 -0700 Stop checking for HAVE_DIX_CONFIG_H on the client side Leftover from when these XKB files were shared with the server sources and could be compiled in either the client or server, with the different autoconf config files in each. Signed-off-by: Alan Coopersmith commit 84276609b2f0aec74fb464c428c7db5714b0fcfc Author: Alan Coopersmith Date: Fri Aug 16 18:27:28 2013 -0700 Rearrange some variable declarations & initializations in XKB Little things noticed during XKB restyling that seemed to make the code easier to read. Signed-off-by: Alan Coopersmith commit b90b7e859cf45ec76921fa21bbfc1f3840d6e8d1 Author: Alan Coopersmith Date: Sun Aug 11 13:29:33 2013 -0700 Reindent XKB code to X.Org standard style Signed-off-by: Alan Coopersmith commit c0a0f78eb49c2e4ad956209de77475c85b9314ea Author: Alan Coopersmith Date: Fri Aug 16 18:14:14 2013 -0700 Fix overflow checks in _XkbReadKeySyms when key_sym_map is already created We were checking to make sure that the largest keysym value was within the range of the allocated buffer, but checking against different limits in the not-yet-allocated vs. the already-allocated branches. The check should be the same in both, and reflect the size used for the allocation, which is based on the maximum key code value, so we move it to be a common check, before we branch, instead of duplicating in each branch. map->key_sym_map is an array of XkbSymMapRec structs, [0..max_key_code] map->syms is the array for which num_syms is recorded, hence is not the right value to check for ensuring our key_sym_map accesses are in range. Signed-off-by: Alan Coopersmith Reported-by: Barry Kauler Tested-by: Barry Kauler commit bea6cbd027973142fc64532274e1d16861b47190 Author: Alan Coopersmith Date: Sun Aug 11 17:02:21 2013 -0700 Remove long unused src/udcInf.c I can find no record of what this file was for. Neither the X11R6.8.2 monolith Imakefile nor any modular release Makefile.am have ever built it and nothing else references it. Signed-off-by: Alan Coopersmith commit bf3501e0395abe890acfea98fdd9f50a6966f118 Author: Alan Coopersmith Date: Sun Aug 11 00:07:33 2013 -0700 Remove unnecessary casts of pointers to (char *) in calls to Xfree() Left one cast behind that is necessary to change from const char * to char * in src/xlibi18n/lcCharSet.c. Signed-off-by: Alan Coopersmith commit 6ead9dd92ab90aabd9f0e328d59597e6b5bc09d3 Author: Alan Coopersmith Date: Sat Aug 10 23:57:55 2013 -0700 Don't cast sizeof() results to unsigned when passing to Xmalloc/Xcalloc sizeof() returns size_t, malloc() & calloc() expect sizes in size_t, don't strip down to unsigned int and re-expand unnecessarily. Signed-off-by: Alan Coopersmith commit 25a7a329def672fc8d26078538173777850c6390 Author: Alan Coopersmith Date: Sat Aug 10 23:51:08 2013 -0700 Remove even more casts of return values from Xmalloc/Xrealloc Signed-off-by: Alan Coopersmith commit f8fa16092a148b74ca35b4beb182053352606f2f Author: Alan Coopersmith Date: Sat Aug 10 23:05:13 2013 -0700 xlibi18n: fix argsize argument to _XlcParsePath The array is defined as having NUM_LOCALEDIR entries, so use that instead of hardcoded 256 value (the other two calls already did this). Reported by parfait: Buffer overflow (CWE 120): In pointer dereference of argv[argc] with index argc Pointer size is 64 elements (of 8 bytes each), index is 255 at line 82 of src/xlibi18n/lcFile.c in function 'parse_line'. called at line 178 in function '_XlcParsePath' with argv = argv. called at line 722 in function '_XlcLocaleLibDirName' with argv = args, argsize = 256. at line 82 of src/xlibi18n/lcFile.c in function 'parse_line'. called at line 178 in function '_XlcParsePath' with argv = argv. called at line 638 in function '_XlcLocaleDirName' with argv = args, argsize = 256. [ This bug was found by the Parfait 1.2.0 bug checking tool. http://labs.oracle.com/pls/apex/f?p=labs:49:::::P49_PROJECT_ID:13 ] Signed-off-by: Alan Coopersmith commit e7d46c6452c0b90fd66ae9f538546b968e0dd608 Author: Alan Coopersmith Date: Sat Aug 10 22:32:42 2013 -0700 i18n modules: Fix some const cast warnings imRm.c: In function '_XimSetICMode': imRm.c:2419:37: warning: cast discards '__attribute__((const))' qualifier from pointer target type [-Wcast-qual] imRm.c:2420:30: warning: cast discards '__attribute__((const))' qualifier from pointer target type [-Wcast-qual] lcGenConv.c: In function 'byteM_parse_codeset': lcGenConv.c:345:13: warning: cast discards '__attribute__((const))' qualifier from pointer target type [-Wcast-qual] Signed-off-by: Alan Coopersmith commit cbd86eccf175dc82a5cbcea54c8bd21ce18b70c0 Author: Alan Coopersmith Date: Sat Aug 10 22:21:54 2013 -0700 xlibi18n: Fix a bunch of const cast warnings Add const qualifiers to casts where needed, remove other casts that are no longer needed. Signed-off-by: Alan Coopersmith commit eb3676113fc2dd0f34d92b89beb81b3f61569aa1 Author: Alan Coopersmith Date: Sat Aug 10 22:18:00 2013 -0700 Fix const handling in XSetLocaleModifiers Instead of reusing the input parameter to store the output, make a result variable instead, so that there's less const confusion. Fixes gcc warnings: lcWrap.c: In function 'XSetLocaleModifiers': lcWrap.c:87:18: warning: cast discards '__attribute__((const))' qualifier from pointer target type [-Wcast-qual] lcWrap.c:91:25: warning: cast discards '__attribute__((const))' qualifier from pointer target type [-Wcast-qual] lcWrap.c:93:12: warning: cast discards '__attribute__((const))' qualifier from pointer target type [-Wcast-qual] Signed-off-by: Alan Coopersmith commit 8ebbffa98563960910152e4f2e31cb032375d871 Author: Alan Coopersmith Date: Sat Aug 10 21:46:37 2013 -0700 Constify lc_name argument to _XlcLocaleDirName() & _XlcLocaleLibDirName() Makes code considerably less crufty and clears gcc warnings: XlcDL.c: In function '_XlcDynamicLoad': XlcDL.c:384:44: warning: cast discards '__attribute__((const))' qualifier from pointer target type [-Wcast-qual] XlcDL.c:386:51: warning: cast discards '__attribute__((const))' qualifier from pointer target type [-Wcast-qual] Signed-off-by: Alan Coopersmith commit 07e4e864107b38c2f393564fdacc90f4e858f23f Author: Alan Coopersmith Date: Sat Aug 10 13:37:53 2013 -0700 init_om: remove unneeded extra copy of string to local buffer Strings from the supported_charset_list[] were being copied one by one to a stack buffer, and then strdup called on that buffer. Instead, just strdup the original string, without the local copy, and use a more traditional for loop, so it's easier to figure out what the code is doing (cleaning up a gcc const-cast warning in the process). Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit 1cec14dad904ba21a861f4af131be5982ecb83dd Author: Alan Coopersmith Date: Sat Aug 10 12:34:53 2013 -0700 Delete unused XKB_INSURE_SIZE macro from XKBlibint.h Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit 5f32182c7c4045540ff3833c48ee24a3a25726e2 Author: Alan Coopersmith Date: Sat Aug 10 12:19:17 2013 -0700 miRegionOp(): ensure region size is not updated if realloc fails This function performs operations on a region, and when finished, checks to see if it should compact the rectangle list. If the number of rectangles for which memory is allocated in the list is more than twice the number used, it tries to shrink. realloc() should not fail in this case, but if it does, might as well keep the correct value for the number of allocated rectangles, so we don't try to grow it unnecessarily later if adding to the region. Signed-off-by: Alan Coopersmith commit bd2a0b5a187798bb2e2f05dc5062ca79e37075dd Author: Alan Coopersmith Date: Sat Aug 10 12:19:17 2013 -0700 miRegionCopy(): handle realloc failure better Zero out the region size when freeing the region so callers don't think there's anything there. (Pointer is already set to NULL from the realloc result itself.) Return 0 to the callers, and have them cascade that back to their callers to indicate failure, instead of their usual return value of 1 on success. Signed-off-by: Alan Coopersmith commit 5dc8b5385d513bbda88697c2372db750d23f46d4 Author: Alan Coopersmith Date: Sat Aug 10 11:27:22 2013 -0700 Avoid memory leak/corruption if realloc fails in Xregion.h:MEMCHECK macro Signed-off-by: Alan Coopersmith commit 453c4ee436ef32d91501d7736d7a91c1aeafc565 Author: Alan Coopersmith Date: Sat Aug 10 12:07:51 2013 -0700 Avoid memory leak/corruption if realloc fails in imLcPrs.c:parseline() Signed-off-by: Alan Coopersmith commit b3fea74ec5b7d4f83755a52a8d49c564b71c6d12 Author: Alan Coopersmith Date: Sat Aug 10 12:30:39 2013 -0700 lcDB.c: ensure buffer size is updated correctly if realloc fails Signed-off-by: Alan Coopersmith commit 43bb822c714a73c3b2d15e621ffb3333cd10da8c Author: Alan Coopersmith Date: Sat Aug 10 11:07:47 2013 -0700 Avoid memory leak/corruption if realloc fails in XlcDL.c:resolve_object() Previously, if realloc failed to increase the size, we'd still record that we had allocated the larger size, but the pointer to it would be NULL, causing future calls to be broken, and the previous allocation to be lost/leaked. Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit 5d47a39978e92bb34ec928b1b15d71c0c2434870 Author: Alan Coopersmith Date: Fri Aug 9 23:33:03 2013 -0700 omGeneric.c: convert sprintf calls to snprintf Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit 88a27a2aa9b7d35cb79b16334ea3413e572b724a Author: Alan Coopersmith Date: Fri Aug 9 23:30:30 2013 -0700 ximcp/imRm.c: convert sprintf calls to snprintf Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit 4fadae243fb485628c9a137f5da3489ed6214b21 Author: Alan Coopersmith Date: Fri Aug 9 23:02:12 2013 -0700 xlibi18n: convert sprintf calls to snprintf Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit 36a7edf0e5edfc5ef4ff2c3a8b4fa3dc4796e854 Author: Alan Coopersmith Date: Fri Aug 9 23:02:12 2013 -0700 lcfile: skip over any null entries in args list Previous code seemed to assume that printf("%s", NULL) would result in a 0-length string, not "(null)" or similar, but since there's no point looking for files in "(null)/filepath...", instead we just skip over NULL entries in search paths when generating file names. In the *DirName() functions, this effectively just moves the "bail on NULL in arg[i]" check up from the later code that assigned it to targetdir and then bailed if that was NULL. Not sure how there ever could be a NULL in arg[i], given the current implementation of XlcParsePath, but it's easy enough to check once and reject up front instead of on every reference. Signed-off-by: Alan Coopersmith commit ee0824f24392d5ca3d5fd5f5ed8d78c0d892f7c0 Author: Alan Coopersmith Date: Fri Aug 9 22:00:09 2013 -0700 Fix file leak on malloc error in XlcDL.c:resolve_object() File Leak: Leaked File fp at line 219 of lib/libX11/src/xlibi18n/XlcDL.c in function 'resolve_object'. fp initialized at line 198 with fopen [ This bug was found by the Parfait 1.2.0 bug checking tool. http://labs.oracle.com/pls/apex/f?p=labs:49:::::P49_PROJECT_ID:13 ] Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit 9b291044a240e5b9b031ed814e0c84e53a1c3084 Author: Julien Cristau Date: Sat Jun 15 18:02:21 2013 +0200 Add missing locales to configure.ac Commits 40761898692e5063957bfa2518cca3d35b2e354a and f198c6aa98f88ff285d903175a3c4c0fd33a4575 added two new locales (sr_CS.UTF-8 and km_KH.UTF-8), but didn't list them in configure.ac, meaning they're not included in tarballs. Signed-off-by: Julien Cristau Reviewed-by: James Cloos commit 8f58e54a5f46c3cd4897a23b89950f4800ae38d4 Author: ISHIKAWA,chiaki Date: Tue Dec 18 15:28:05 2012 +0000 Fix bogus timestamp generated by XIM Fix bogus timestamp generted by XIM due to uninitialized data field. Also set appropriate serial, too. Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=39367 Signed-off-by: Chiaki ISHIKAWA Signed-off-by: Alan Coopersmith commit e7fd6f0eda57300df4d6b695b7064610ca5dec57 Author: Egbert Eich Date: Thu Jun 16 18:47:49 2011 +0200 XIM: Fix sync problem on focus change. XSetICFocus() and XUnsetICFocus() are both asynchronous events. This is a pretty stupid idea: those functions may undo certain settings on the client side for which requests from the server may still be in the queue unprocessed. Thus things may be set in the wrong order ie instead of set -> unest it will be unset -> set. Moreover there is no way for either the client or the server to cause the event queue to be flushed - which is pretty bad as XIM is bidirectional. The scenario is as follows: Two ICs are created: ic1 = XCreateIC(im, XNInputStyle, XIMPreeditCallbacks | XIMStatusCallbacks, XNClientWindow, window, XNPreeditAttributes, preedit_attr, XNStatusAttributes, status_attr, NULL); ic2 = XCreateIC(im, XNInputStyle, XIMPreeditNothing | XIMStatusNothing, XNClientWindow, window, NULL); Then the focus is removed from ic2: XUnsetICFocus(ic2); If SCIM is used as the input server it will send a bunch of requests following an XCreateIC(). One of the requests registers a key release filter. XUnsetICFocus() unsets both key press and release filters. Since it is asynchronous, the input server requests to register key press and release filters may not have been processed, when XUnsetICFocus() is called. Since there is no explicite way for client programs to enforce the request queue to be flushed explicitely before an X[Set/Unset]ICFocus() call it would be safest to make those two calls synchronous in the sense that they ensure the request queue has been handled before they execute. The easiest way to do this from Xlib is thru a call to XGetICValues() which sends a request to the server and subsequently reads the queue from the server to the client. This will cause all outstanding requests in the queue to be read and handled. This is an ugly hack and this could be fixed directly in the client, however it seems to be easier to fix Xlib than to fix numerous clients. This problem arose since there is no well documented way how to handle and synchronize XIM requests and not all input servers send requests when an IC is created. This has been discussed extensively in: https://bugzilla.novell.com/show_bug.cgi?id=221326 Signed-off-by: Egbert Eich commit 26ec7d3821bc19debc73c8c3e42e6e33ef6f856e Author: Egbert Eich Date: Thu Jun 16 17:28:39 2011 +0200 XIM: Fix race on focus change: set 'FABRICATED' only when keyev filters in place. When synthesized key events are sent on commit XIM sets the 'fabricated' flag so that the keypress handler knows that these were not real events. This also happens when committing due to the loss of focus. However in this case the keypress/release filters which consume and unset this flag are no longer in the filter chain. So the flag is erronously set when a real keyboard event is received after focus has been regained. So the first event is wrongly treated as a fabricated key in the keypress handler which will at the same time reset the flag so the second key event is treated correctly. This fix only sets the flag when at least one of the keyboard filters is in place. How to reproduce this bug: run scim, choose a Japanese input method start two instances of xterm: start typing in one xterm (this should pop up an IM window). Without comitting (hitting 'enter') move focus to the other xterm, then move focus back. Start typing again. The first character will be committed immediately without popping up an input window. With this fix this behavior is gone. See also: https://bugzilla.novell.com/show_bug.cgi?id=239698 Signed-off-by: Egbert Eich commit 44f84223f5e2dd46883fcbd352af2798bfa9aeb6 Author: Alan Coopersmith Date: Mon Jul 29 21:29:49 2013 -0700 libX11 1.6.1 Signed-off-by: Alan Coopersmith commit d19cfaca15826943d3c637ef7fa5db0a23d5feed Author: Alan Coopersmith Date: Sat Jul 27 12:19:00 2013 -0700 Fix undefined XCMSDIR error when building lint library Signed-off-by: Alan Coopersmith commit 3083cd43d7dcd59da587975e7cadda681cd8a103 Author: Alan Coopersmith Date: Sat Jul 27 00:36:08 2013 -0700 Add ku_TR.UTF-8 (Kurdish language, Turkey region) to compose/locale.dir Upstreaming from changes originally integrated into OpenSolaris under Sun bug id 6882572. Signed-off-by: Alan Coopersmith Reviewed-by: Thomas Klausner commit 208e586c808e88a2ee819e4450dc27f557afc2bf Author: Alan Coopersmith Date: Sat Jul 27 01:03:18 2013 -0700 omGeneric: remove space between struct name & member name Signed-off-by: Alan Coopersmith commit 7db74514e454d3fc4ff70aa08ddac66bfffda4dd Author: Alan Coopersmith Date: Tue Jul 23 22:18:46 2013 -0700 Refactor common code from XAddHost & XRemoveHost into single function On the Xlib side, the only real difference is the mode flag we send to the server with the address, so just make that an argument to the function with the common code for packing the address into the request. (Aside from labels, gcc 4.7.2 generates identical code before & after this change due to inlining, verified via diff of gcc -S output.) Signed-off-by: Alan Coopersmith commit 3292195a64a9ce4f0d27134cd544651ec647e728 Author: Alan Coopersmith Date: Tue Jul 23 22:11:34 2013 -0700 XSetModifierMapping: Use Data instead of GetReqExtra Handle arbitrary length data in the same fashion as other calls, avoiding need to ensure it fits all in the request buffer. Signed-off-by: Alan Coopersmith commit feb131b18aee31c2c125dc3275b0260940245882 Author: Kees Cook Date: Sun Jun 9 11:13:43 2013 -0700 libX11: check "req" when calling GetReqExtra This fixes the two callers of GetReqExtra to check that "req" is non-NULL to avoid crashing now that GetReqExtra does internal bounds-checking on the resulting buffer sizes. Additionally updates comment describing return values to use names instead of only literal values. Signed-off-by: Kees Cook Reviewed-by: Alan Coopersmith Signed-off-by: Alan Coopersmith commit 54540d7cba0c2bfe9176221c7bca910058d304df Author: Kees Cook Date: Sun Jun 9 11:13:42 2013 -0700 libX11: check size of GetReqExtra after XFlush Two users of GetReqExtra pass arbitrarily sized allocations from the caller (ModMap and Host). Adjust _XGetRequest() (called by the GetReqExtra macro) to double-check the requested length and invalidate "req" when this happens. Users of GetReqExtra passing lengths greater than the Xlib buffer size (normally 16K) must check "req" and fail gracefully instead of crashing. Any callers of GetReqExtra that do not check "req" for NULL will experience this change, in the pathological case, as a NULL dereference instead of a buffer overflow. This is an improvement, but the documentation for GetReqExtra has been updated to reflect the need to check the value of "req" after the call. Bug that manifested the problem: https://bugs.launchpad.net/ubuntu/+source/x11-xserver-utils/+bug/792628 Signed-off-by: Kees Cook Reviewed-by: Alan Coopersmith Signed-off-by: Alan Coopersmith commit 24d3ee0d08f24e23c91d55702f010f73d7b908e5 Author: Thomas Klausner Date: Tue Jun 25 22:35:29 2013 +0200 Tighten out-of-range comparisons. [For all of these, LONG_MAX was the correct value to prevent overflows for the recent CVEs. Lowering to INT_MAX catches buggy replies from the server that 32-bit clients would reject but 64-bit would accept, so we catch bugs sooner, and really, no sane & working server should ever report more than 2gb of extension names, font path entries, key modifier maps, etc. -alan- ] Reviewed-by: Alan Coopersmith Signed-off-by: Alan Coopersmith commit 6d926088d80a08e13e6d6c4ff207b81ad52e667f Author: Thomas Klausner Date: Tue Jun 25 18:34:32 2013 +0200 Fix out-of-range comparison in _XF86BigfontQueryFont clang complained (correctly): warning: comparison of constant 768614336404564650 with expression of type 'CARD32' (aka 'unsigned int') is always true [-Wtautological-constant-out-of-range-compare] [While LONG_MAX is correct, since it's used in size_t math, the numbers have to be limited to 32-bit range to be usable by 32-bit clients, and values beyond that range are far more likely to be bugs in the data from the server than valid numbers of characters in a font. -alan- ] Reviewed-by: Alan Coopersmith Signed-off-by: Alan Coopersmith commit 383e2b0d029482a0f4c39fe00e15397538576fc1 Author: Thomas Klausner Date: Tue Jun 25 18:33:56 2013 +0200 Check for symbol existence with #ifdef, not #if Reviewed-by: Jamey Sharp Signed-off-by: Alan Coopersmith commit 9955d1c8de994a90fe7f2e3187e7362611d7d265 Author: Thomas Klausner Date: Tue Jun 25 18:33:07 2013 +0200 Use newer callback-based API for XIM. Let libX11 load and make available the newer (X11R6) callback-based API for XIM (expected by emacs). This patch updates the files to match the other nls/ files. Patch from Ian D. Leroux on pkgsrc-users@NetBSD.org following a hint by Nhat Minh Lê . Reviewed-by: James Cloos Signed-off-by: Alan Coopersmith commit a17ceb7100bd36c2db210473ee701deb5d515731 Author: Thomas Klausner Date: Tue Jun 25 18:31:32 2013 +0200 Stop truncating source to destination length if it is larger. It seems useless to do that since the code tests for both source length and destination to be non-zero. This fixes a cut'n'paste problem in xterm where the paste length was limited to 1024 (BUFSIZ) in button.c. Signed-off-by: Alan Coopersmith commit a336db9a0add3ae0783dda6e52459236622a12af Author: Alan Coopersmith Date: Mon Jun 24 23:02:05 2013 -0700 Require ANSI C89 pre-processor, drop pre-C89 token pasting support Signed-off-by: Alan Coopersmith commit 9dfb0f3c0a761590bcdc1f3396b1e064da4e18e8 Author: Alan Coopersmith Date: Fri Jun 7 11:30:11 2013 -0700 troff macro expansion in specs/libX11 Many of the custom nroff macros (.ds ) were left unsubstituted in the nroff->docbook conversion. This substitution is now performed, via the following perl script: #! /usr/bin/perl -w -i use Text::Wrap; while ($_ = <>) { while ($_ =~ m/\((\w+)\b/g) { my $m = $1; if (exists $macro{$m}) { $_ =~ s/\($m/$macro{$m}/; $_ = wrap('', '', $_); $_ =~ s/[ \t]+$//; } } if ($_ =~ /\/) { my ($m, $s) = ($1, $2); $macro{$m} = $s; while ($macro{$m} =~ /\\\s*$/) { $macro{$m} =~ s/\\\s*$//ms; $macro{$m} .= <>; chomp($macro{$m}); } $macro{$m} =~ s/\\ / /g; } else { print $_; } } Signed-off-by: Alan Coopersmith commit 20c17bd9ebf767a24643279e45866dddcb57b5ce Author: Alan Coopersmith Date: Fri Jun 7 09:27:26 2013 -0700 specs/libX11: correct prototype for XListPixmapFormats/XImageByteOrder The XListPixmapFormats arguments was being shown with XImageByteOrder's name and return types. Appears to have been a glitch in the nroff -> docbook conversion. Reported-by: ZHANG Zhaolong Reviewed-by: Jamey Sharp Signed-off-by: Alan Coopersmith commit ed3d830243c8a0eefaf24e15b11823272ffe5049 Author: Thomas Klausner Date: Sun Jun 2 20:49:55 2013 +0200 Deal with the limited range of VAX floating point numbers when compiling for VAX. Signed-off-by: Alan Coopersmith commit 0a48235d63639fb917c44d27c86e928e79fbac66 Author: Eric S. Raymond Date: Thu Jun 6 16:43:56 2013 -0400 Remove call to undefined macro. commit 9e4719b9b719f2f8d255f6778e2e8c1809e32599 Author: Eric S. Raymond Date: Thu Jun 6 16:42:20 2013 -0400 Remove call to undefined macro. commit 8496122eb00ce6cd5d2308ee54f64b68c378e455 Author: Alan Coopersmith Date: Mon Jun 3 20:06:43 2013 -0700 Update README to reflect where to find the Xlib specs now Signed-off-by: Alan Coopersmith commit 655d631e86c95b14888758b27ed2836ca3e3ce86 Author: Alan Coopersmith Date: Mon Jun 3 19:21:06 2013 -0700 libX11 1.6.0 Signed-off-by: Alan Coopersmith commit 4a89b7ea908554628f374537a79931c8006a2de3 Author: Thomas Klausner Date: Sun Jun 2 11:49:54 2013 -0700 cmsMath.c: Add missing stdio header for printf(3) in DEBUG build. Signed-off-by: Alan Coopersmith commit 96dcf747f13b26b8e4d17b1bc8605d933c3e1dc6 Author: Thomas Klausner Date: Sun Jun 2 20:49:48 2013 +0200 XCreateGC man page: Avoid .TS H and .TH macros Avoid .TS H and .TH for now as it doesn't alter the output in this case, and improve the output with mandoc(1). Signed-off-by: Alan Coopersmith commit 95a388158c9d73df7d24016d6a3d61506d7d53a4 Author: Alan Coopersmith Date: Thu May 23 19:43:35 2013 -0700 libX11 1.5.99.902 (1.6 RC2) Signed-off-by: Alan Coopersmith commit a3bdd2b090915fe0163b062f0e6576fe05dd332e Author: Julien Cristau Date: Thu May 23 20:39:46 2013 +0200 xkb: fix off-by-one in _XkbReadGetNamesReply and _XkbReadVirtualModMap The size of the arrays is max_key_code + 1. This makes these functions consistent with the other checks added for CVE-2013-1997. Also check the XkbGetNames reply when names->keys was just allocated. Signed-off-by: Julien Cristau Tested-by: Colin Walters Reviewed-by: Alan Coopersmith commit 7e30056e78e4b7979ff47f102e00327617266019 Author: Niveditha Rau Date: Fri May 17 15:26:21 2013 -0700 Make sure internal headers include required headers Fixes builds with Solaris Studio 12.3 when lint is enabled, since it no longer ignores *.h files, but complains when they reference undefined typedefs or macros. Signed-off-by: Niveditha Rau Signed-off-by: Alan Coopersmith commit 2820100bf8ba130b94253f415e7fa5ac28bb2037 Author: Alan Coopersmith Date: Thu May 16 23:05:36 2013 -0700 Free fs->properties in _XF86BigfontQueryFont overflow error path Fixes small memory leak introduced in commit 5669a22081 Reported-by: Julien Cristau Signed-off-by: Alan Coopersmith commit 3131740513133a9ff7cb12123d29ceb18584fc38 Author: Matthieu Herrb Date: Wed May 8 19:33:09 2013 +0200 XListFontsWithInfo: Re-decrement flist[0] before calling free() on it. Freeing a pointer that wasn't returned by malloc() is undefined behavior and produces an error with OpenBSD's implementation. Signed-off-by: Matthieu Herrb Reviewed-by: Alan Coopersmith Signed-off-by: Alan Coopersmith commit 3fe4bea086149f06a142a8f1d575f627ec1e22c7 Author: Alan Coopersmith Date: Fri Apr 19 14:30:40 2013 -0700 Give GNU & Solaris Studio compilers hints about XEatData branches Try to offset the cost of all the recent checks we've added by giving the compiler a hint that the branches that involve us eating data are less likely to be used than the ones that process it. Signed-off-by: Alan Coopersmith commit e1b457beb8d4e831ef44279dada6c475cb955738 Author: Alan Coopersmith Date: Sun Mar 31 12:22:35 2013 -0700 _XkbReadGetMapReply: reject maxKeyCodes smaller than the minKeyCode Various other bounds checks in the code assume this is true, so enforce it when we first get the data from the X server. Signed-off-by: Alan Coopersmith commit 12ad4c6432496897ff000eb7cfecd0fb4b290331 Author: Alan Coopersmith Date: Sat Mar 16 10:03:13 2013 -0700 Use calloc in XOpenDisplay to initialize structs containing pointers Prevents trying to free uninitialized pointers if we have to bail out partway through setup, such as if we receive a corrupted or incomplete connection setup block from the server. Signed-off-by: Alan Coopersmith commit d38527e25f8b6e2f1174ecc21260c5c5416f972e Author: Alan Coopersmith Date: Thu Mar 7 23:46:05 2013 -0800 Remove more unnecessary casts from Xmalloc/calloc calls Signed-off-by: Alan Coopersmith commit b2c86b582c58f50c7b14da01cf7ebd20ef12a6b2 Author: Alan Coopersmith Date: Sat Mar 2 16:56:16 2013 -0800 Convert more _XEatData callers to _XEatDataWords Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit 192bbb9e2fc45df4e17b35b6d14ea0eb418dbd39 Author: Alan Coopersmith Date: Sat Mar 9 11:04:37 2013 -0800 Make XGetWindowProperty() always initialize returned values Avoids memory corruption and other errors when callers access them without checking to see if XGetWindowProperty() returned an error value. Callers are still required to check for errors, this just reduces the damage when they don't. Reported-by: Ilja Van Sprundel Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit db1b1c871da29aa0545182bf888df81627f165a5 Author: Alan Coopersmith Date: Sat Mar 2 15:08:21 2013 -0800 Avoid overflows in XListExtensions() [CVE-2013-1997 15/15] Ensure that when breaking the returned list into individual strings, we don't walk past the end of allocated memory to write the '\0' bytes Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit 8d5936594993921acdfec778dd8f41b555e2543a Author: Alan Coopersmith Date: Sat Mar 2 15:08:21 2013 -0800 Avoid overflows in XGetFontPath() [CVE-2013-1997 14/15] Ensure that when breaking the returned list into individual strings, we don't walk past the end of allocated memory to write the '\0' bytes Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit 0c404db6a92dc2c198328bf586c02d8abbe02013 Author: Alan Coopersmith Date: Sat Mar 2 15:08:21 2013 -0800 Avoid overflows in XListFonts() [CVE-2013-1997 13/15] Ensure that when breaking the returned list into individual strings, we don't walk past the end of allocated memory to write the '\0' bytes Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit 0b0f5d4358c3de7563d6af03f0d2ce454702a06a Author: Alan Coopersmith Date: Sat Mar 2 15:08:21 2013 -0800 integer overflow in XGetModifierMapping() [CVE-2013-1981 13/13] Ensure that we don't underallocate when the server claims a very large reply Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit a351b8103b2ba78882e1c309e85893ca3abe2073 Author: Alan Coopersmith Date: Sat Mar 2 15:08:21 2013 -0800 integer overflow in XGetPointerMapping() & XGetKeyboardMapping() [CVE-2013-1981 12/13] Ensure that we don't underallocate when the server claims a very large reply Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit 833f6b70bc789d33607f6dbfee9e0a4178ec4b59 Author: Alan Coopersmith Date: Sat Mar 2 15:08:21 2013 -0800 integer overflow in XGetImage() [CVE-2013-1981 11/13] Ensure that we don't underallocate when the server claims to have sent a very large reply. Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit 79d8dc08eb98842173ce239b9dd60df0e9e9ae72 Author: Alan Coopersmith Date: Fri Mar 8 22:25:35 2013 -0800 integer overflow in XGetWindowProperty() [CVE-2013-1981 10/13] If the reported number of properties is too large, the calculations to allocate memory for them may overflow, leaving us returning less memory to the caller than implied by the value written to *nitems. Reported-by: Ilja Van Sprundel Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit 164bf4dfe839b1cc75cdeee378a243d04a8200e4 Author: Alan Coopersmith Date: Sat Mar 2 13:18:48 2013 -0800 integer overflows in TransFileName() [CVE-2013-1981 9/13] When trying to process file paths the tokens %H, %L, & %S are expanded to $HOME, the standard compose file path & the xlocaledir path. If enough of these tokens are repeated and values like $HOME are set to very large values, the calculation of the total string size required to hold the expanded path can overflow, resulting in allocating a smaller string than the amount of data we'll write to it. Simply restrict all of these values, and the total path size to PATH_MAX, because really, that's all you should need for a filename path. Reported-by: Ilja Van Sprundel Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit 460e8a223b87d4fa0ea1e97823e998a770e0f2a2 Author: Alan Coopersmith Date: Fri Mar 1 18:37:37 2013 -0800 integer truncation in _XimParseStringFile() [CVE-2013-1981 8/13] Called from _XimCreateDefaultTree() which uses getenv("XCOMPOSEFILE") to specify filename. If the size of off_t is larger than the size of unsigned long (as in 32-bit builds with large file flags), a file larger than 4 gigs could have its size truncated, leading to data from that file being written past the end of the undersized buffer allocated for it. While configure.ac does not use AC_SYS_LARGEFILE to set large file mode, builders may have added the large file compilation flags to CFLAGS on their own. size is left limited to an int, because if your Xim file is larger than 2gb, you're doing it wrong. Reported-by: Ilja Van Sprundel Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit 226622349a4b1e16064649d4444a34fb4be4f464 Author: Alan Coopersmith Date: Sat Mar 2 12:39:58 2013 -0800 Unbounded recursion in _XimParseStringFile() when parsing include files [CVE-2013-2004 2/2] parseline() can call _XimParseStringFile() which can call parseline() which can call _XimParseStringFile() which can call parseline() .... eventually causing recursive stack overflow and crash. Limit is set to a include depth of 100 files, which should be enough for all known use cases, but could be adjusted later if necessary. Reported-by: Ilja Van Sprundel Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit 236b603d235dc264d1c6250dca09c745458a9088 Author: Alan Coopersmith Date: Sat Mar 2 12:01:39 2013 -0800 Unbounded recursion in GetDatabase() when parsing include files [CVE-2013-2004 1/2] GetIncludeFile() can call GetDatabase() which can call GetIncludeFile() which can call GetDatabase() which can call GetIncludeFile() .... eventually causing recursive stack overflow and crash. Easily reproduced with a resource file that #includes itself. Limit is set to a include depth of 100 files, which should be enough for all known use cases, but could be adjusted later if necessary. Reported-by: Ilja Van Sprundel Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit 076428918e6c35f66b9b55c3fa097ff06496d155 Author: Alan Coopersmith Date: Fri Mar 1 18:37:37 2013 -0800 integer overflow in ReadInFile() in Xrm.c [CVE-2013-1981 7/13] Called from XrmGetFileDatabase() which gets called from InitDefaults() which gets the filename from getenv ("XENVIRONMENT") If file is exactly 0xffffffff bytes long (or longer and truncates to 0xffffffff, on implementations where off_t is larger than an int), then size may be set to a value which overflows causing less memory to be allocated than is written to by the following read() call. size is left limited to an int, because if your Xresources file is larger than 2gb, you're very definitely doing it wrong. Reported-by: Ilja Van Sprundel Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit 90fd5abac2faca86f9f100353a3c9c7b89f31484 Author: Alan Coopersmith Date: Sat Mar 2 11:44:19 2013 -0800 Integer overflows in stringSectionSize() cause buffer overflow in ReadColornameDB() [CVE-2013-1981 6/13] LoadColornameDB() calls stringSectionSize() to do a first pass over the file (which may be provided by the user via XCMSDB environment variable) to determine how much memory needs to be allocated to read in the file, then allocates the returned sizes and calls ReadColornameDB() to load the data from the file into that newly allocated memory. If stringSectionSize() overflows the signed ints used to calculate the file size (say if you have an xcmsdb with ~4 billion lines in or a combined string length of ~4 gig - which while it may have been inconceivable when Xlib was written, is quite possible today), then LoadColornameDB() may allocate a memory buffer much smaller than the amount of data ReadColornameDB() will write to it. The total size is left limited to an int, because if your xcmsdb file is larger than 2gb, you're doing it wrong. Reported-by: Ilja Van Sprundel Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit b9ba832401734e1cbd30a930c0d11d850293f3f9 Author: Alan Coopersmith Date: Sat Mar 2 11:25:25 2013 -0800 unvalidated length in _XimXGetReadData() [CVE-2013-1997 12/15] Check the provided buffer size against the amount of data we're going to write into it, not against the reported length from the ClientMessage. Reported-by: Ilja Van Sprundel Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit de2e6c322c4aca22856b380f67f8e488e7510015 Author: Alan Coopersmith Date: Sat Mar 2 11:11:08 2013 -0800 unvalidated index/length in _XkbReadGetNamesReply() [CVE-2013-1997 11/15] If the X server returns key name indexes outside the range of the number of keys it told us to allocate, out of bounds memory writes could occur. Reported-by: Ilja Van Sprundel Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit 2df882eeb3a70256170127a746a9ba26376599a1 Author: Alan Coopersmith Date: Sat Mar 2 11:01:04 2013 -0800 unvalidated index in _XkbReadVirtualModMap() [CVE-2013-1997 10/15] If the X server returns modifier map indexes outside the range of the number of keys it told us to allocate, out of bounds memory writes could occur. Reported-by: Ilja Van Sprundel Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit 4d7c422a37eb9617fb22f8e37527c2b34b105665 Author: Alan Coopersmith Date: Sat Mar 2 11:04:44 2013 -0800 unvalidated index in _XkbReadExplicitComponents() [CVE-2013-1997 9/15] If the X server returns key indexes outside the range of the number of keys it told us to allocate, out of bounds memory writes could occur. Reported-by: Ilja Van Sprundel Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit e56a2ada719c5cfac5ed61a52a80ade86c0f5957 Author: Alan Coopersmith Date: Sat Mar 2 10:51:51 2013 -0800 unvalidated index in _XkbReadModifierMap() [CVE-2013-1997 8/15] If the X server returns modifier map indexes outside the range of the number of keys it told us to allocate, out of bounds memory writes could occur. Reported-by: Ilja Van Sprundel Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit 06c086e8a1d8374ea9a95ff989f053c96bb1bdca Author: Alan Coopersmith Date: Sat Mar 2 10:39:21 2013 -0800 unvalidated index in _XkbReadKeyBehaviors() [CVE-2013-1997 7/15] If the X server returns key behavior indexes outside the range of the number of keys it told us to allocate, out of bounds memory writes could occur. Reported-by: Ilja Van Sprundel Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit 00626c3830b869259098985afa38933d77ccec72 Author: Alan Coopersmith Date: Sat Mar 2 09:40:22 2013 -0800 unvalidated index in _XkbReadKeyActions() [CVE-2013-1997 6/15] If the X server returns key action indexes outside the range of the number of keys it told us to allocate, out of bounds memory access could occur. Reported-by: Ilja Van Sprundel Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit fd7d4956bc7a1c4b5c38661b12777ebee4d685d9 Author: Alan Coopersmith Date: Sat Mar 2 09:28:33 2013 -0800 unvalidated index in _XkbReadKeySyms() [CVE-2013-1997 5/15] If the X server returns keymap indexes outside the range of the number of keys it told us to allocate, out of bounds memory access could occur. Reported-by: Ilja Van Sprundel Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit 59ae16a00d18588e98af57d26e442af8ea42b7aa Author: Alan Coopersmith Date: Sat Mar 2 09:18:26 2013 -0800 unvalidated indexes in _XkbReadGetGeometryReply() [CVE-2013-1997 4/15] If the X server returns color indexes outside the range of the number of colors it told us to allocate, out of bounds memory access could occur. Reported-by: Ilja Van Sprundel Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit bff938b9fe1629cbacb726509edfa2a3840b7207 Author: Alan Coopersmith Date: Sat Mar 2 09:12:47 2013 -0800 unvalidated indexes in _XkbReadGeomShapes() [CVE-2013-1997 3/15] If the X server returns shape indexes outside the range of the number of shapes it told us to allocate, out of bounds memory access could occur. Reported-by: Ilja Van Sprundel Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit f293659d5a4024bda386305bb7ebeb4647c40934 Author: Alan Coopersmith Date: Fri Mar 1 22:49:01 2013 -0800 unvalidated index in _XkbReadGetDeviceInfoReply() [CVE-2013-1997 2/15] If the X server returns more buttons than are allocated in the XKB device info structures, out of bounds writes could occur. Reported-by: Ilja Van Sprundel Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit cddc4e7e3cb4b9b7ad25f8591971a86901c249f2 Author: Alan Coopersmith Date: Fri Mar 1 19:30:09 2013 -0800 unvalidated lengths in XAllocColorCells() [CVE-2013-1997 1/15] If a broken server returned larger than requested values for nPixels or nMasks, XAllocColorCells would happily overflow the buffers provided by the caller to write the results into. Reported-by: Ilja Van Sprundel Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit 2cd62b5eb99ffbb2fce99f3c459455e630b35bf7 Author: Alan Coopersmith Date: Fri Mar 1 22:49:01 2013 -0800 integer overflow in XListHosts() [CVE-2013-1981 5/13] If the reported number of host entries is too large, the calculations to allocate memory for them may overflow, leaving us writing beyond the bounds of the allocation. Reported-by: Ilja Van Sprundel Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit 1f6a3dbf699b85c0ea715ef21de7e7095a714e12 Author: Alan Coopersmith Date: Fri Mar 1 22:49:01 2013 -0800 integer overflow in XGetMotionEvents() [CVE-2013-1981 4/13] If the reported number of motion events is too large, the calculations to allocate memory for them may overflow, leaving us writing beyond the bounds of the allocation. v2: Ensure nEvents is set to 0 when returning NULL events pointer Reported-by: Ilja Van Sprundel Signed-off-by: Alan Coopersmith commit 39515b7c3ba8cae9021bf6695e378ae19487082f Author: Alan Coopersmith Date: Fri Mar 1 22:49:01 2013 -0800 integer overflow in XListFontsWithInfo() [CVE-2013-1981 3/13] If the reported number of remaining fonts is too large, the calculations to allocate memory for them may overflow, leaving us writing beyond the bounds of the allocation. v2: Fix reply_left calculations, check calculated sizes fit in reply_left v3: On error cases, also set values to be returned in pointer args to 0/NULL Reported-by: Ilja Van Sprundel Signed-off-by: Alan Coopersmith commit 5669a220816b7d58fcaf0c302ead16fbe5c87817 Author: Alan Coopersmith Date: Fri Mar 1 21:05:27 2013 -0800 integer overflow in _XF86BigfontQueryFont() [CVE-2013-1981 2/13] Similar to _XQueryFont, but with more ways to go wrong and overflow. Only compiled if libX11 is built with XF86BigFont support. v2: Fix reply_left calculations, check calculated sizes fit in reply_left Reported-by: Ilja Van Sprundel Signed-off-by: Alan Coopersmith commit 6df8a63d34b7514077188e2062a13774f920c085 Author: Alan Coopersmith Date: Fri Mar 1 21:05:27 2013 -0800 integer overflow in _XQueryFont() on 32-bit platforms [CVE-2013-1981 1/13] If the CARD32 reply.nCharInfos * sizeof(XCharStruct) overflows an unsigned long, then too small of a buffer will be allocated for the data copied in from the reply. v2: Fix reply_left calculations, check calculated sizes fit in reply_left Reported-by: Ilja Van Sprundel Signed-off-by: Alan Coopersmith commit 9f5d83706543696fc944c1835a403938c06f2cc5 Author: Alan Coopersmith Date: Fri Mar 1 20:54:24 2013 -0800 Add _XEatDataWords to discard a given number of 32-bit words of reply data Matches the units of the length field in X protocol replies, and provides a single implementation of overflow checking to avoid having to replicate those checks in every caller. Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit d7f04c340ade3834e603c23d543132e1ee4e0c63 Author: Alan Coopersmith Date: Sat Mar 2 13:03:55 2013 -0800 Move repeated #ifdef magic to find PATH_MAX into a common header Lets stop duplicating the mess all over Signed-off-by: Alan Coopersmith Reviewed-by: Matthieu Herrb commit f3a553a4e4a55d9d19deda1ea01883e1d5d682b1 Author: Pander Date: Tue May 7 18:38:14 2013 -0400 Add compose sequences for J́ and j́. The resulting sequences are: U+004A LATIN CAPITAL LETTER J U+0301 COMBINING ACUTE ACCENT U+006A LATIN SMALL LETTER J U+0301 COMBINING ACUTE ACCENT Used in Dutch, per: http://lists.x.org/archives/xorg-devel/2013-February/035514.html https://nl.wikipedia.org/wiki/Accenttekens_in_de_Nederlandse_spelling Signed-off-by: Pander Signed-off-by: James Cloos commit f49bb2dd6d4ea45c55bd21acc0efe2b764441020 Author: Alan Coopersmith Date: Sat Mar 16 18:30:56 2013 -0700 Move big request comment in XOpenDisplay to the right place Signed-off-by: Alan Coopersmith commit 3996543c1b2919e97d61a5d70fe1ebd7cd76fc83 Author: Alan Coopersmith Date: Sat Mar 9 19:16:03 2013 -0800 libX11 1.5.99.901 (1.6 RC1) Signed-off-by: Alan Coopersmith commit f9cd175a471116a616e681fb0ca1a61b3d84a6a0 Author: Alan Coopersmith Date: Fri Mar 8 22:33:28 2013 -0800 Fix very weird indenting in src/GetFProp.c Signed-off-by: Alan Coopersmith commit e9bd757630368afb374c5d1bcc5d4d85ad3c6c4c Author: Alan Coopersmith Date: Fri Mar 8 15:37:33 2013 -0800 XAllocClassHint: Assume calloc sets pointers in allocated memory to NULL While the C standard technically allows for the compiler to translate pointer = 0 or pointer = NULL into something other than filling the pointer address with 0 bytes, the rest of the Xlib code already assumes that calloc initializes any pointers in the struct to NULL, and there are no known systems supported by X.Org where this is not true. Signed-off-by: Alan Coopersmith commit 39547d600a13713e15429f49768e54c3173c828d Author: Karl Tomlinson Date: Mon Feb 18 01:25:34 2013 +0000 MakeBigReq: don't move the last word, already handled by Data32 MakeBigReq inserts a length field after the first 4 bytes of the request (after req->length), pushing everything else back by 4 bytes. The current memmove moves everything but the first 4 bytes back. If a request aligns to the end of the buffer pointer when MakeBigReq is invoked for that request, this runs over the buffer. Instead, we need to memmove minus the first 4 bytes (which aren't moved), minus the last 4 bytes (so we still align to the previous tail). The 4 bytes that fell out are already handled with Data32, which will handle the buffermax correctly. The case where req->length = 1 was already not functional. Reported by Abhishek Arya . https://bugzilla.mozilla.org/show_bug.cgi?id=803762 Reviewed-by: Jeff Muizelaar Reviewed-by: Peter Hutterer Signed-off-by: Alan Coopersmith commit 3cdb6c3a1646f670afa03d424ec12ac418181d1e Author: Quentin Glidic Date: Tue Jan 15 21:07:17 2013 +0000 nls/Makefile.am: Use LOG_COMPILER TESTS_ENVIRONMENT is deprecated Signed-off-by: Quentin Glidic Signed-off-by: Alan Coopersmith commit df66d7a98e2bc7f44fb5583b645df87d525f07f1 Author: Quentin Glidic Date: Tue Jan 15 21:07:16 2013 +0000 nls/Makefile.am: Remove unneeded $(srcdir) Signed-off-by: Quentin Glidic Reviewed-by: Gaetan Nadon Signed-off-by: Alan Coopersmith commit 3facbe5c0df1b5597571b7b00d5f7bdbc92fb278 Author: Alan Coopersmith Date: Sat Mar 2 12:01:39 2013 -0800 Add hint to all Xrm* man pages Help users figure out which header file they need to #include Signed-off-by: Alan Coopersmith commit 466404007f2c8f7166e4faddfea1454c5bfe1e9a Author: Alan Coopersmith Date: Fri Mar 8 17:13:09 2013 -0800 _xudc_code_to_glyph: check for NULL pointer *before* writing to it, not after Signed-off-by: Alan Coopersmith commit 47d2eff64d167b3245d346d7f38ca703be645e26 Author: Ken Moffat Date: Thu Mar 7 18:27:54 2013 -0500 dead_double_grave and dead_inverted_breve should only have one underscore. Correct instances of dead_double_grave and dead_inverted_breve to dead_doublegrave and dead_invertedbreve. Signed-off-by: Ken Moffat Signed-off-by: James Cloos commit c23d61d1b84dca3740bf4786978c7908d0065fb9 Author: Alan Coopersmith Date: Fri Mar 1 18:10:27 2013 -0800 Assume size_t is always available, since it was defined in C89 Don't provide a fallback definition #ifdef X_NOT_POSIX anymore. We already use size_t throughout the rest of Xlib, just had this one instance left in XKBGAlloc.c of a fallback definition. Signed-off-by: Alan Coopersmith commit 9bcfd84aa1410387bc8cf002a5f90f44705aa0d1 Author: Alan Coopersmith Date: Fri Mar 1 18:09:07 2013 -0800 unifdef XKB_IN_SERVER Leftovers from XKB files that were previously shared between the client and server code, but aren't any more. Signed-off-by: Alan Coopersmith Reviewed-by: Peter Hutterer commit 769a0efa2298040fe8316a89fc9e75fb61e288e5 Author: Alan Coopersmith Date: Thu Feb 28 20:04:25 2013 -0800 unifdef CRAY & _CRAY (mostly performed with unifdef, followed by some manual cleanup of the remaining code) Signed-off-by: Alan Coopersmith Reviewed-by: Peter Hutterer commit ca106eb03e5f5468df8033300c5caae3d3c6936b Author: Alan Coopersmith Date: Thu Feb 28 20:04:25 2013 -0800 unifdef WORD64 WORD64 seems to have only been defined in when building for CRAY, to handle int being a 64-bit value (ILP64, not LP64) and having 64-bit alignment requirements. It hadn't been fully supported even before autotooling, as can be seen by removed code such as: #ifdef WORD64 _XkbWriteCopyData32 Not Implemented Yet for sizeof(int)==8 #endif (mostly performed with unifdef, followed by some manual cleanup of the remaining code) Signed-off-by: Alan Coopersmith Reviewed-by: Peter Hutterer commit 9399caf2c12cbe1ed56f4f6b368c5811cb5d0458 Author: Alan Coopersmith Date: Thu Feb 28 20:04:25 2013 -0800 unifdef MUSTCOPY MUSTCOPY seems to have only been defined in when building for CRAY, to handle missing some sizes of integer type. (mostly performed with unifdef, followed by some manual cleanup of spacing/indenting in the remaining code) Signed-off-by: Alan Coopersmith Reviewed-by: Peter Hutterer commit b687440c28c7da6ee0ae44514d20248db5161606 Author: Alan Coopersmith Date: Sat Feb 16 10:42:23 2013 -0800 Convert more sprintf calls to snprintf You could analyze most of these and quickly recognize that there was no chance of buffer overflow already, but why make everyone spend time doing that when we can just make it obviously safe? Signed-off-by: Alan Coopersmith commit b092dabbd712d7b656abcf572d253b9b206c0237 Author: Alan Coopersmith Date: Fri Feb 15 23:43:12 2013 -0800 XKeysymToString: move variable declarations to the scope of their usage Makes it easier for readers to understand scope of variable usage, and clears up gcc warning: KeysymStr.c: In function 'XKeysymToString': KeysymStr.c:128:13: warning: declaration of 'i' shadows a previous local [-Wshadow] KeysymStr.c:73:18: warning: shadowed declaration is here [-Wshadow] Signed-off-by: Alan Coopersmith commit f0b171c8ea7b055ba520272ea9a2604e18841ac7 Author: Alan Coopersmith Date: Fri Feb 15 23:34:40 2013 -0800 Preserve constness in casting arguments through the Data*() routines Casts were annoying gcc by dropping constness when changing types, when routines simply either copy data into the request buffer or send it directly to the X server, and never modify the input. Fixes gcc warnings including: ChProp.c: In function 'XChangeProperty': ChProp.c:65:6: warning: cast discards '__attribute__((const))' qualifier from pointer target type [-Wcast-qual] ChProp.c:65:6: warning: cast discards '__attribute__((const))' qualifier from pointer target type [-Wcast-qual] ChProp.c:74:6: warning: cast discards '__attribute__((const))' qualifier from pointer target type [-Wcast-qual] ChProp.c:74:6: warning: cast discards '__attribute__((const))' qualifier from pointer target type [-Wcast-qual] ChProp.c:83:6: warning: cast discards '__attribute__((const))' qualifier from pointer target type [-Wcast-qual] SetHints.c: In function 'XSetStandardProperties': SetHints.c:262:20: warning: cast discards '__attribute__((const))' qualifier from pointer target type [-Wcast-qual] SetPntMap.c: In function 'XSetPointerMapping': SetPntMap.c:46:5: warning: cast discards '__attribute__((const))' qualifier from pointer target type [-Wcast-qual] SetPntMap.c:46:5: warning: cast discards '__attribute__((const))' qualifier from pointer target type [-Wcast-qual] StBytes.c: In function 'XStoreBuffer': StBytes.c:97:33: warning: cast discards '__attribute__((const))' qualifier from pointer target type [-Wcast-qual] StName.c: In function 'XStoreName': StName.c:40:27: warning: cast discards '__attribute__((const))' qualifier from pointer target type [-Wcast-qual] StName.c: In function 'XSetIconName': StName.c:51:27: warning: cast discards '__attribute__((const))' qualifier from pointer target type [-Wcast-qual] Signed-off-by: Alan Coopersmith commit 6c558ee357292dd9dfc6d9006f4525f625327c52 Author: Alan Coopersmith Date: Fri Feb 15 22:58:54 2013 -0800 Fix comment typo & confusing indentation levels in Data() macro definition The final } matches the one on the #define line, not one that doesn't appear after the else statement it was lined up with Signed-off-by: Alan Coopersmith commit afd6593da90e51234d59f8921c411317f91ab48b Author: Alan Coopersmith Date: Fri Feb 15 23:25:38 2013 -0800 XStringToKeysym: preserve constness when casting off unsignedness for strcmp Fixes gcc warning: StrKeysym.c:97:17: warning: cast discards '__attribute__((const))' qualifier from pointer target type [-Wcast-qual] Signed-off-by: Alan Coopersmith commit 7e3bf4dd83fec22bd568146de75e6d59eff74e21 Author: Alan Coopersmith Date: Fri Feb 15 23:14:40 2013 -0800 XRebindKeysym: Drop unnecessary const-removing cast C89 defines memcpy as taking a const void *, so casting from const unsigned char * to char * simply angers gcc for no benefit: KeyBind.c:1017:24: warning: cast discards '__attribute__((const))' qualifier from pointer target type [-Wcast-qual] Signed-off-by: Alan Coopersmith commit 54527eab93d46055cf11eb6c18abb353a03ae544 Author: Alan Coopersmith Date: Fri Feb 15 22:45:19 2013 -0800 cmsColNm.c: maintain constness of arguments to qsort helper function Fixes gcc warning: cmsColNm.c: In function 'FirstCmp': cmsColNm.c:257:20: warning: cast discards '__attribute__((const))' qualifier from pointer target type [-Wcast-qual] cmsColNm.c:257:45: warning: cast discards '__attribute__((const))' qualifier from pointer target type [-Wcast-qual] Signed-off-by: Alan Coopersmith commit deedeada53676ee529d700bf96fde0b29a3a1def Author: Nickolai Zeldovich Date: Tue Jan 22 10:03:00 2013 -0500 XListFontsWithInfo: avoid accessing realloc'ed memory If exactly one of the two reallocs in XListFontsWithInfo() fails, the subsequent code accesses memory freed by the other realloc. Signed-off-by: Nickolai Zeldovich Reviewed-by: Alan Coopersmith Signed-off-by: Alan Coopersmith commit f57fd760cba92ad846917f21e94e73e9c846185f Author: Colin Walters Date: Wed Jan 4 17:37:06 2012 -0500 autogen.sh: Implement GNOME Build API http://people.gnome.org/~walters/docs/build-api.txt Signed-off-by: Adam Jackson commit 51c102d39e855cf1704d9eb3afba76a2e73c6b81 Author: Adam Jackson Date: Tue Jan 15 14:28:48 2013 -0500 configure: Remove AM_MAINTAINER_MODE Signed-off-by: Adam Jackson commit 3cd974b1d4d1fa6389d3695fa9fcc0c22a51d50c Author: Alan Coopersmith Date: Wed Dec 26 22:57:39 2012 -0800 Remove unused DECnet ("DNETCONN") code from Xlib Has never been converted to build in modular builds, so has been unusable since X11R7.0 release in 2005. DNETCONN support was removed from xtrans back in 2008. Signed-off-by: Alan Coopersmith commit a6e5b36a3e6d4a7a9fb4bad905ed127e67b1957e Author: Alan Coopersmith Date: Wed Dec 26 22:56:38 2012 -0800 Remove unused TLI ("STREAMSCONN") code from Xlib Has never been converted to build in modular builds, so has been unusable since X11R7.0 release in 2005. All known platforms with TLI/XTI support that X11R7 & later releases run on also have (and mostly prefer) BSD socket support for their networking API. Signed-off-by: Alan Coopersmith commit 59c9ee8cd58857c5769b643611cbe526005a9e45 Author: Alan Coopersmith Date: Sun Dec 16 17:44:42 2012 -0800 Tell clang not to report -Wpadded warnings on public headers we can't fix Better to silence the compiler warning than break ABI. Signed-off-by: Alan Coopersmith commit 0b148750027fd0557c5ed93afda861ddf4b92e0f Author: Jon TURNEY Date: Mon Nov 12 17:27:52 2012 +0000 Fix config check for loadable modules The config check of the results of testing for dlfcn.h or dl.h just tests the value of the ac_cv_ variables, which will be 'yes' or 'no', rather than checking it is 'yes', so loadable module support would always be detected. This is necessary for successful compilation for the MinGW target without the optional dlfcn-win32 library. v2: Also, fixed typoed name of ac_cv_header_dlfcn_h, so check still works correctly when dlfcn.h is available Signed-off-by: Jon TURNEY Reviewed-by: Dan Nicholson commit cd25cab4b5b957641183ce72dd1ae0424aff1663 Author: Egbert Eich Date: Fri May 20 18:27:02 2011 +0200 Install Xcms.txt in $(datadir) rather than $(libdir). This file is an architecture independent data and should be where other databases are. This is the Xlib provided sample file, applications are free to use a different one specifying its location in the XCMSDB env variable. Signed-off-by: Egbert Eich Reviewed-by: Alan Coopersmith commit 51fef7e273b5c6256e4c9604e3e1afe5dc8f6a1a Author: Egbert Eich Date: Fri May 20 18:25:24 2011 +0200 Don't hard code path to Xcms.txt file. The path to this file is configurable at build time. The source however contains a hard coded path. Signed-off-by: Egbert Eich Reviewed-by: Alan Coopersmith commit 9833489e6c3829a1e835bc0a11f028fc180809e4 Author: Colin Walters Date: Fri Dec 7 08:51:21 2012 -0500 Fix build after dropping locales They also needed to be removed from configure.ac Signed-off-by: Colin Walters Signed-off-by: Julien Cristau commit 0a740a574aaf0c0eec78859b773a532cff3b74c3 Author: Egbert Eich Date: Fri May 20 13:04:11 2011 +0200 i18n: Uppercased all occurances if 'iso8859' in the full locale name. Making all occurances of iso8859 upper case in the full local name makes the alias entries more consistent and match the entries on locale.dir. Signed-off-by: Egbert Eich Reviewed-by: Alan Coopersmith commit 5e7d589697755a70fb22d85c6a1ae82b39843e53 Author: Egbert Eich Date: Fri May 20 17:55:49 2011 +0200 i18n: Remove ja.S90 and ja.U90 locales. Both locales carry a copyright notice and a prorietary statement: Copyright 1995 by FUJITSU LIMITED This is source code modified by FUJITSU LIMITED under the Joint Development Agreement for the CDEnext PST. This is unpublished proprietary source code of FUJITSU LIMITED Signed-off-by: Egbert Eich Reviewed-by: Alan Coopersmith commit 99eae3dcb7bf6764e3b243d2a2934a4d1ecce90e Author: Egbert Eich Date: Fri May 20 16:46:15 2011 +0200 i18n: Bring locale.dir and compose.dir in sync. Some entries for locale/encoding combinations were missing from either file or just misspelled, some entries were wrong or just aliases. Signed-off-by: Egbert Eich Reviewed-by: Alan Coopersmith commit d1e6baa4e290b758e430077cb74e7c03ad850771 Author: Egbert Eich Date: Fri May 20 14:02:39 2011 +0200 i18n: Treat 'a3_AZ' as an alias for 'az_AZ'. locale.alias contains a comment: XCOMM a3 is not an ISO 639 language code, but in Cyrillic, "Z" looks like "3". Thus lets treat 'a3' as an alias for 'az'. Signed-off-by: Egbert Eich Reviewed-by: Alan Coopersmith Reviewed-by: Magnus Kessler commit fa2aab0bea18efa26a56977d3166277582ab7b07 Author: Egbert Eich Date: Fri May 20 13:09:38 2011 +0200 i18n: Fixed typos in full locale names. Fixing those typos those names actually match entries in locale.dir. Signed-off-by: Egbert Eich Reviewed-by: Alan Coopersmith commit b88dd95005dce4c40f9b4d5f938f945e7955fd04 Author: Egbert Eich Date: Sat May 21 07:29:38 2011 +0200 i18n: Remove duplicates and aliases to oneself. Aliases to itself don't make much sense. This changes occurances of: xy_UV.UTF-8: xy_UV.UTF-8 to xy_UV: xy_UV.UTF-8 where applicable. Signed-off-by: Egbert Eich Reviewed-by: James Cloos commit f198c6aa98f88ff285d903175a3c4c0fd33a4575 Author: Jens Herden Date: Fri May 20 17:29:03 2011 +0200 i18n: Add support for Khmer locale and compose table. Signed-off-by: Egbert Eich Reviewed-by: James Cloos commit 40761898692e5063957bfa2518cca3d35b2e354a Author: Kalman Kemenczy Date: Fri May 20 17:03:24 2011 +0200 i18n: Add support for Serbian specific compose table entries. Signed-off-by: Egbert Eich Reviewed-by: James Cloos commit 7c14aacc9f01d7a975f8d9d033b9b13cbd777a61 Author: Egbert Eich Date: Fri May 20 14:00:35 2011 +0200 i18n: Adding and removing comments. Signed-off-by: Egbert Eich Reviewed-by: James Cloos commit 7754d68976106183751243c2c35a84134be17b34 Author: Egbert Eich Date: Fri May 20 13:45:31 2011 +0200 i18n: Add missing locales which existed in locale.alias. Signed-off-by: Egbert Eich Reviewed-by: James Cloos commit 952eccd0d25ba66023acfd31873eee2e71c38c42 Author: Egbert Eich Date: Fri May 20 10:57:57 2011 +0200 i18n: Consolidate compose handling for locales with UTF-8 encoding. - add an entry to include the default en_US compose file for the ja_JP, ko_KR, th_TH, zh_CN, zh_HK and zh_TW locales. - add missing entries for zh_CN. and zh_HK and am_ET. - change entries for the UTF-8 encoding for ru_RU, ja_JP, ko_KR, th_TH and zh_TW to point to their native directory entries. Signed-off-by: Egbert Eich Reviewed-by: James Cloos commit d14b6a250f004fa405179db7020f6953001d17b9 Author: Yaakov Selkowitz Date: Mon Oct 22 13:54:11 2012 -0500 XIM: remove Private and Public macros Private is a struct member name in mingw-w64 , causing this useless define in a private header to break the build. Signed-off-by: Yaakov Selkowitz Reviewed-by: Jon TURNEY commit f2a8def423a46d52e834cf7ea49fa0079427663a Author: Adam Jackson Date: Wed Oct 17 14:40:43 2012 -0400 XErrorDB: Add GLXBadProfileARB Signed-off-by: Adam Jackson commit d45b3fc19fbe95c41afc4e51d768df6d42332010 Author: Ross Burton Date: Wed Sep 12 14:39:40 2012 +0100 Allow overriding location of keysymdef.h Currently keysymdef.h is found by using the includedir of xproto. This doesn't work when cross-compiling with a sysroot as that ends up being /usr/include/X11, not a path into the cross-build environment. So, add an option to allow explicitly specifying the location of keysymdef.h, and verify that the specified or found path exists. (original patch by Martin Jansa , revised by myself) Signed-off-by: Ross Burton Reviewed-by: Dan Nicholson Reviewed-by: Daniel Stone commit 44cdc0dc2c68d67654023ec707b807145d3a38c0 Author: Eric S. Raymond Date: Thu Aug 23 19:15:07 2012 -0400 Renove some unnecessary low-level markup. Also, SYNTAX -> SYNOPSIS so function prototypes get parsed by doclifter. This appears to have been somebody's thinko, it's only in a few of the files. Signed-off-by: Eric S. Raymond commit b686600ab5ca93b5750f827786e79c329ab2db4d Author: Eric S. Raymond Date: Thu Aug 23 10:53:33 2012 -0400 The .NT/.NE macro pair is no longer used. Remove it. Signed-off-by: Eric S. Raymond commit b83f2898528c5dd683acd2a2143879a760a8dad5 Author: Eric S. Raymond Date: Thu Aug 23 10:42:46 2012 -0400 Remove the one and only use of the .NT/.NE pair. The problem with these macros is that they rely on being able to center the note label. That doesn't play well with modern HTML, not anyway without coomplications like CSS. This use was just a cute trick, not adding enough value to be kept. commit e9509fa6745d25eee01ec6f1c34edf8a806d66b3 Author: Eric S. Raymond Date: Thu Aug 23 10:23:45 2012 -0400 The .C{ and .C} macros are never used. Remove them. Signed-off-by: Eric S. Raymond commit 6b2f7ddeea6c87dbec4ddfc19b1fed33f1bb8575 Author: Eric S. Raymond Date: Thu Aug 23 10:08:08 2012 -0400 The .FN macro, paired with .FD, is also never used. Remove it. Signed-off-by: Eric S. Raymond commit cac6572701c976542da562b2b277b07ffb892a6f Author: Eric S. Raymond Date: Thu Aug 23 10:03:00 2012 -0400 The ".FD" macro is never used. Remove it. It was a temptation to presentation-level klugery and is best gone. Signed-off-by: Eric S. Raymond commit 6e27a828f39f7028bc7f4a8736e7262fca250632 Author: Eric S. Raymond Date: Thu Aug 23 09:54:25 2012 -0400 Clean up, my last commit missed four cases. Signed-off-by: Eric S. Raymond commit a7fb575957ff4d9dd3671994a005ac3be8bb10fe Author: Eric S. Raymond Date: Thu Aug 23 08:24:17 2012 -0400 Eliminate all uses of tab stops in the libX11 man pages. Two steps: First, expand tabs to 8 spaces in code and structure listings. Second, make the .Ds used to wrap code listings switch to constant-width font (CW) rather than numeric font position 1, which maps to R on most systems. It is possible some archaic systems won't know what CW is, but the only risk is that code listings won't look quite right on troff devices; the PostScript and DVI drivers definitely grok it, so those important cases are OK. The purpose of these changes is to get rid of presentation-level markup so these pages will lift clean to DocBook. Signed-off-by: Eric S. Raymond commit 8042f88ace33573f9d0dfaa21ed54ac7cef266d5 Author: Will Thompson Date: Mon Jul 9 18:00:27 2012 +0100 Add compose sequences for "therefore" and "because". These sequences look sensible to me. I added them to the APL-related section of Mathematical Operators—they're in that section of Unicode anyway. https://bugs.freedesktop.org/show_bug.cgi?id=51922 Signed-off-by: Will Thompson Reviewed-by: Daniel Stone commit 65358ea5079236b2508f787ac2fb2024a477e36d Author: Alan Coopersmith Date: Fri Jun 29 23:08:04 2012 -0700 Convert XCreate{Pix,Bit}map...Data to use C99 designated initializers Signed-off-by: Alan Coopersmith commit 0dc93f7e43deb102b1f8fb7c4c4844cdce7ffd1e Author: Alan Coopersmith Date: Fri Jun 29 22:57:13 2012 -0700 XCreate{Pix,Bit}map...Data: Free pixmap in error path if XCreateGC fails Fixes leaks in error paths found by Parfait 1.0.0: Error: X Resource Leak Leaked X Resource pix at line 62 of CrBFData.c in function 'XCreateBitmapFromData'. pix initialized at line 60 with XCreatePixmap Error: X Resource Leak Leaked X Resource pix at line 70 of CrPFBData.c in function 'XCreatePixmapFromBitmapData'. pix initialized at line 66 with XCreatePixmap Signed-off-by: Alan Coopersmith Reviewed-by: Aaron Plattner commit dce84b8c39ad5a8908c29bb6de25b6c3004c1ab7 Author: Alan Coopersmith Date: Wed Jun 6 13:31:16 2012 -0700 libX11 spec: Correct prototype for XConvertSelection selection & target parameters were accidentally run together Signed-off-by: Alan Coopersmith commit 6c5cb2a90a6479f56855e5167039c37c234cdfe7 Author: Alan Coopersmith Date: Fri Jun 1 23:37:09 2012 -0700 libX11 1.5.0 Signed-off-by: Alan Coopersmith commit 05c587ec3be880721131a17c1dd4366e458fdd8b Author: Alan Coopersmith Date: Sat May 26 14:37:28 2012 -0700 libX11 1.4.99.902 (1.5 RC2) Signed-off-by: Alan Coopersmith commit d817834d9772e3500d5102e2eae868b04a33c31f Author: Pander Date: Sat May 5 19:02:10 2012 +0200 Compose: Reassigned squences with minus and a or o Reassigned squences with minus and a or o (vice versa and lower and upper case) to conform existing series and not resulting in tilde. Also added noe missing underscore sequence. Signed-off-by: Alan Coopersmith commit 6bfd1dca6e7cb2046ee6bf9dbbddc0af5ef7cc00 Author: Pander Date: Sat May 5 16:56:05 2012 +0200 Compose: Removed and vice versa Combination with lower case u suffices Signed-off-by: Alan Coopersmith commit 3a8b1637132d1e36eb5e11f52dfb284081772d14 Author: Pander Date: Sat May 5 16:44:31 2012 +0200 Compose: Removed for n with tilde, also vice versa & for upper case Signed-off-by: Alan Coopersmith commit fd514d7a35119dd4413b51c84f2a536f2ca501a6 Author: Pander Date: Sat May 5 16:40:20 2012 +0200 Compose: Removed in combination with a numeral for superscript Signed-off-by: Alan Coopersmith commit 1b5cad3ca54410c4edbca79c23c463e9e088bc0d Author: Pander Date: Sat May 5 16:28:01 2012 +0200 Compose: Reassigned to oacute, also for upper case. Signed-off-by: Alan Coopersmith commit 0bbc0d5e605e2a4a3eb00a229b651d4546e8aef4 Author: James Cloos Date: Thu May 10 12:27:28 2012 -0400 Remove duplicate compose sequences from commit e51e37c118ae. The compose-check script only handles compiled Compose files, not the Compose.pre files. One must remember to use: ./autogen.sh; make; make check when reviewing patches to the Compose.pre files.... Signed-off-by: James Cloos commit e51e37c118ae6cb9ced8244ce1c410677e0279ce Author: Geoff Streeter Date: Thu Mar 22 15:02:00 2012 +0000 Add APL support to compose Signed-off-by: Geoff Streeter Signed-off-by: James Cloos commit dac90324cee224df977a428afe80d960dceca769 Author: Julien Cristau Date: Sat May 5 16:05:07 2012 +0200 configure: make previous change work with older autoconf autoconf 2.63 doesn't seem to like the nested AC_CHECK_DECL/FUNC. So do the tests separately. Reported-by: Dave Airlie Signed-off-by: Julien Cristau commit f5b50af4324186962e258ffe9be78d5ee4681982 Author: Julien Cristau Date: Sun Apr 29 16:43:09 2012 +0200 configure: check if issetugid is declared GNU/kFreeBSD has issetugid in libc (for legacy apps?), but doesn't declare it anywhere, causing gcc to error out with -Werror=implicit-function-declaration. Use AC_CHECK_DECL in addition to AC_CHECK_FUNC so we disable this code instead of failing to build it. Debian bug#669670 Signed-off-by: Julien Cristau Reviewed-by: Alan Coopersmith Signed-off-by: Alan Coopersmith commit 52e1b5cc3b6de76ccf4285b55652474a522ed9a8 Author: Peter Hutterer Date: Mon Apr 30 16:36:47 2012 +1000 Typo fix Signed-off-by: Peter Hutterer commit b64969f0e510d5d3300cf968741a3726a6409577 Author: Alan Coopersmith Date: Tue Apr 17 18:12:02 2012 -0700 Add X11R7 sections to the libX11 & XKBlib credits to cover Docbook conversion Signed-off-by: Alan Coopersmith commit 9ea611696f317ac3b3fb67893f1d6d87d49e3b5e Author: Alan Coopersmith Date: Tue Apr 17 18:01:36 2012 -0700 Add olinks from libX11 & localedb specs to ICCCM spec Signed-off-by: Alan Coopersmith commit b3c1b8cdab7d14220426c9b997ac362dc16318fc Author: Alan Coopersmith Date: Tue Apr 17 17:49:44 2012 -0700 Add olinks from libX11 spec to ICCCM spec Also convert ICCCM title mentions from to Signed-off-by: Alan Coopersmith commit ebebb65e753007ad01966dccc90bd6ca9a826488 Author: Alan Coopersmith Date: Sat Apr 14 23:40:01 2012 -0700 libX11 AppC: Fix section headers that didn't translate from nroff properly Signed-off-by: Alan Coopersmith Acked-by: Peter Hutterer commit d5ab4ae0e74ae1fb30fb72add0751effe2759bf2 Author: Alan Coopersmith Date: Sat Apr 14 23:13:05 2012 -0700 Add olinks from libX11 spec to x11protocol spec Signed-off-by: Alan Coopersmith Acked-by: Peter Hutterer commit 83878a0e34fffd255597300dd3e6cd43fcd645b0 Author: Alan Coopersmith Date: Sat Apr 14 22:28:53 2012 -0700 libX11 spec: Remove .br nroff macro left behind in XGetWindowProperty prototype Signed-off-by: Alan Coopersmith commit abc523fce31fcf2687229697a8eb656e343ecb0c Author: Alan Coopersmith Date: Thu Mar 15 22:14:45 2012 -0700 libX11 1.4.99.901 (1.5 RC1) Signed-off-by: Alan Coopersmith commit b2cc5905a4a6d519957223e8ba2caef71520040c Author: Alan Coopersmith Date: Thu Mar 15 22:03:21 2012 -0700 Remove "register" qualifier that annoys Solaris Studio compiler Fixes warning: "Xrm.c", line 1094: warning: storage class after type is obsolescent Signed-off-by: Alan Coopersmith commit 62d42953893f93a98db0504eaf06d650ceaf5811 Author: James Cloos Date: Wed Mar 14 17:25:46 2012 -0400 Fix the gtk+ additions (Some of) the Dstroke and dstroke entries already were present as U011[01], even though XK_Dstroke and XK_dstroke are part of the latin2 set in keysymdef.h. The addition of as a postfix version of blocks the existing entries for ǻ and Ǻ. That prevents its and ’s addition. Signed-off-by: James Cloos commit 91bcce48d94792f78333d2aea73961cc2e739d2e Author: Pander Date: Wed Mar 14 12:54:53 2012 -0400 Complete compose key sequences for musical symbols Signed-off-by: Pander Signed-off-by: James Cloos commit cf040016d455bc37f7665d6714337c5eafd8ea94 Author: Pander Date: Wed Mar 14 12:46:25 2012 -0400 Add compose sequences from gtk+ to X.Org Signed-off-by: Pander Signed-off-by: James Cloos commit a4c591ced5cac9301b9abfa0e521be2d0b267882 Author: Keith Packard Date: Sun Mar 4 02:00:13 2012 -0800 Block for other threads in _XUserLockDisplay Wait for all other threads to release the user-level lock when acquiring it. This ensures that only one thread at a time holds the user-level lock, necessary as it is a nesting lock and a single variable is used to determine when the lock is nesting and when it is contended. Signed-off-by: Keith Packard Reviewed-by: Jamey Sharp commit ed00b460acb08787b695f27b864e96102dfd4867 Author: Jon TURNEY Date: Fri Oct 28 11:09:20 2011 -0500 Don't use caddr_t casts (caddr_t) isn't used anywhere else in xcb or libX11. Cast to (char *) for consistency. Removing this cast allows building for MinGW without patching. v2: Cast to (char *) rather than just dropping the cast Signed-off-by: Jon TURNEY Reviewed-by: Alan Coopersmith commit 20adca02c2a1d0b7c95ecbe387d68f881fd57754 Author: Julien Cristau Date: Sun Feb 19 13:27:38 2012 +0100 Revert "xcb: Add TCP fallback" This reverts commit f09c5299a381e2729e800a0ac43f1c0e371f65f6. The TCP fallback ended up falling back to UNIX socket connection if $DISPLAY was set to e.g. some.host:0 and the initial attempt failed. Debian bug#659558 Signed-off-by: Julien Cristau Conflicts: src/OpenDis.c commit f4378193619baa9bb973c1b5b718721bbcbe92c7 Author: James Cloos Date: Wed Feb 22 14:13:20 2012 -0500 Make the compose sequence for ẞ work. There is no XK_Ssharp symbol for U+1E9E LATIN CAPITAL LETTER SHARP S, so use the U1e9e symbol in the Compose sequence. (Compose sequences do not work when the target symbol is unknown.) Signed-off-by: James Cloos commit 2ca641c3a506dcbee97e279b67990d5387389f36 Author: Marko Myllynen Date: Mon Feb 20 17:04:59 2012 +0200 Use ezh/EZH in compose maps Related: https://bugs.freedesktop.org/show_bug.cgi?id=19687 Signed-off-by: Marko Myllynen Reviewed-by: Matt Dew Signed-off-by: James Cloos commit 61725822f20f47684a545c1797183ee7075243ac Author: Marko Myllynen Date: Sun Feb 20 17:09:43 2011 +0200 Provide translation from XK_permille (ad5) to Unicode (U2030) https://bugs.freedesktop.org/show_bug.cgi?id=19687 Signed-off-by: Marko Myllynen Reviewed-by: Matt Dew Signed-off-by: James Cloos commit d2cce0abba0fa0143f49026442c8cab5ed721625 Author: Jeremy Huddleston Date: Sun Feb 12 19:01:43 2012 -0800 nls: Use LC_CTYPE=C for sed magic Stricter versions of sed can trip up if the input does not match LC_CTYPE Signed-off-by: Jeremy Huddleston commit f180e043f55531933bedfa6e0ff36a00a9ec07f3 Author: Frédéric Boiteux Date: Wed Nov 30 12:47:31 2011 +0000 Compositions with the dead greek symbol FreeDesktop Bug 21475 Signed-off-by: Frédéric Boiteux Signed-off-by: James Cloos commit d58e8f8e27790017fcfdeca0843b7318d541c189 Author: Ryan Pavlik Date: Sun Jan 1 21:04:52 2012 +0000 Use pthreads on MinGW also Use pthreads (provided by the pthreads-win32 compatability library which implements them using native Win32 threading) on MinGW Reviewed-by: Jon TURNEY commit bf15ccb6821664746ec23d769d757edf8059007e Author: Ryan Pavlik Date: Mon Jan 23 14:18:02 2012 +0000 Add XWindows.h include to Xxcbint.h This avoids some conflicting type re-definition errors which occur if we attempt to include Windows headers after Xmd.h Reviewed-by: Jon TURNEY commit cadcbd376f0a5d17a71a2fe2f8ced5d93232921a Author: Matt Dew Date: Sat Jan 21 17:59:51 2012 -0700 informaltable & table cleanup On certain tables, add top and bottom borders to table header and a bottom border to the table. This matches what those tables in the old pdfs looked like. the prevents tables from splitting across pages. Useful for tiny tables. Converting the colwidth to a floating point, IE, 1* -> 1.0* cleans up these build errors: WARNING: table-layout="fixed" and column-width unspecified => falling back to proportional-column-width(1) Signed-off-by: Matt Dew commit bb551f654df8f647c867f79252241964521e689e Author: Alan Coopersmith Date: Wed Dec 28 21:22:41 2011 -0800 Add more Xkb man pages to the See Also lists for core keyboard functions Signed-off-by: Alan Coopersmith Reviewed-by: Peter Hutterer commit b7bb23fe7c8b8a17128e5bc98a05f68595190438 Author: Gaetan Nadon Date: Fri Dec 30 17:08:14 2011 -0500 docbook.am: embed css styles inside the HTML HEAD element Rather than referring to the external xorg.css stylesheet, embed the content of the file in the html output produced. This is accomplished by using version 1.10 of xorg-xhtml.xsl. This makes the whole html docs tree much more relocatable. In addition, it eliminates xorg.css as a runtime file which makes xorg-sgml-doctools a build time only package. Signed-off-by: Gaetan Nadon commit 70505468b7c4a7068cc39be42e421dcee34ec595 Author: Alan Coopersmith Date: Tue Dec 13 19:58:30 2011 -0800 makekeys: move buf declaration from global to main to silence gcc -Wshadow The global was only referenced in the main() function, which passes it as an argument of the same name to the parse_line() function, leading to gcc -Wshadow warnings: makekeys.c: In function ‘parse_line’: makekeys.c:58:24: warning: declaration of ‘buf’ shadows a global declaration makekeys.c:54:13: warning: shadowed declaration is here Signed-off-by: Alan Coopersmith commit 87e10a7b9a97c951ab4d477f61177779ac0a6a66 Author: Kusanagi Kouichi Date: Wed Dec 14 02:17:55 2011 -0500 XQueryColors: Split a request into multiple requests if necessary https://bugs.freedesktop.org/show_bug.cgi?id=9160 Signed-off-by: Kusanagi Kouichi Signed-off-by: James Cloos commit d3b3570592e9b9e57f270a0bd86762fd205a2833 Author: Andreas Wettstein Date: Tue Nov 8 20:18:09 2011 +0000 XIM: Allow modifier releases in compose sequences (#26705) Currently, only non-modifier keys (actually, keysyms) can be part of a compose sequence, and they are matched against the defined compose sequences at the time the key is pressed. The patch allows to use modifier keys an well, but matches them on key release, and only if no other key has been pressed after the modifier. Releasing a non-matched modifier during an ongoing compose sequence only aborts the sequence if any modifier release would have matched. In particular, if no compose sequences with modifiers are specified, the compose mechanism works exactly as without this patch. Even if modifiers are part of a compose sequence, they are not filtered. This is because modifiers affect the keyboard state no matter what we do here and, therefore, filtering them only could confuse clients. The purpose is this extension to the compose mechanism is to allow to make better use of keys in convenient reach for touch typing. Signed-off-by: Andreas Wettstein Signed-off-by: James Cloos commit 56448a626fc90bcf75a1fa2f4c294b0eb1f23bd6 Author: Alan Coopersmith Date: Tue Nov 29 23:56:57 2011 -0800 Reject negative string counts in copy_string_list Silences parfait warning of a potential memory leak: Memory leak of pointer 'dst' allocated with malloc(length) at line 160 of FSWrap.c in function 'copy_string_list'. 'dst' allocated at line 145 with malloc(length). dst leaks when count <= 0 at line 154. Signed-off-by: Alan Coopersmith commit bf2d7c8c6d70539c72560b1921e18df2610acf29 Author: Peter Hutterer Date: Fri Nov 11 14:56:36 2011 +1000 libX11 1.4.99.1 Signed-off-by: Peter Hutterer commit 24283d40b1e4314c6647dda49d2a159833341a8b Author: Derek Buitenhuis Date: Thu Sep 22 18:44:13 2011 -0400 makekeys: Fix build/target word size mismatch when cross-compiling Since makekeys is built using build environment's gcc and runs natively, we have to make sure that the size of the Signature type is the same on both the native environment and the target, otherwise we get mismatches upon running X, and some LSB test failures (xts5). Use an unsigned 32-bit integer on all platforms. Also, eliminate the redundant multiple typedefs for the Signature type. Signed-off-by: Derek Buitenhuis Reviewed-by: Daniel Stone commit 1c41f3b9b86b5eeedfa3bff92e519d45aa097587 Author: Alan Coopersmith Date: Wed Nov 9 21:00:36 2011 -0800 XlcSL.c: convert old-style function definitions to ANSI C89 style Signed-off-by: Alan Coopersmith commit f6dad6aaa384bf836baa28ccb72b476a85c40eff Author: Peter Hutterer Date: Thu Oct 27 13:53:22 2011 +1000 Use GetReqSized for GetReq and GetReqExtra GetEmptyReq and GetResReq cannot do this due to the final typecast - typically requests that need either of those do not have their own typedef in the protocol headers. Signed-off-by: Peter Hutterer Reviewed-by: Jamey Sharp commit c9c99058b9d98789c0b2d7e78a23443c2b57a047 Author: Peter Hutterer Date: Fri Oct 14 14:51:06 2011 +1000 include: Add GetReqSized() for request buffers of specific size Some XI2 requests change in size over different versions and libXi would need to hack around GetReq and GetReqExtra. Add a new GetReqSized so the library can explicitly specify the size of the request in 4-byte units. Signed-off-by: Peter Hutterer Reviewed-by: Jamey Sharp commit ba8a7a19165e30d14bc165f43f67c19b6a115585 Author: Peter Hutterer Date: Thu Oct 27 13:24:10 2011 +1000 Switch GetEmptyReq and GetResReq to call _XGetRequest Signed-off-by: Peter Hutterer Reviewed-by: Jamey Sharp commit 4a060f993bf676cf21ad9784e010f54134da7b40 Author: Peter Hutterer Date: Mon Oct 17 09:45:15 2011 +1000 Add _XGetRequest as substitute for GetReq/GetReqExtra Signed-off-by: Peter Hutterer Reviewed-by: Jamey Sharp commit d8956520deb79c1cbb5e974c175bf8493859b22b Author: Alan Coopersmith Date: Fri Oct 14 17:53:00 2011 -0700 Fix "nomal" -> "normal" typo in several comments Signed-off-by: Alan Coopersmith commit 002b36e308a26a152504f9b40aa08a0dce9a7991 Author: Xue Wei Date: Fri Oct 14 17:39:21 2011 -0700 mbtocs should not truncate input Fixes pasting more than 1024 bytes into xterm, as described in https://bugs.freedesktop.org/show_bug.cgi?id=25209 Signed-off-by: Alan Coopersmith commit 9b8d8c9e5b27273e8856a3851ba9b68022bed3cd Author: Marko Myllynen Date: Mon Oct 10 09:41:13 2011 +0300 Add new compose sequences This patch adds few new compose sequences to the en_US map, ligatures common in typesetting and sequences already in use in the fi_FI map. https://bugs.freedesktop.org/show_bug.cgi?id=30621 https://bugs.freedesktop.org/show_bug.cgi?id=34523 Reviewed-by: Jeremy Huddleston commit 738f7b867341c1da87ee667d48815822715c3e75 Author: Choe Hwanjin Date: Thu Oct 13 07:58:02 2011 +0900 XIM: Make Xim handle NEED_SYNC_REPLY flag NEED_SYNC_REPLY flag should be in Xim not in Xic. Because the focused Xic can be changed before sending sync reply. After focused Xic changed, the new Xic doesn't have NEED_SYNC_REPLY flag enabled, so libX11 doesn't send XIM_SYNC_REPLY packet. This patch adds sync reply flag to Xim and removes sync reply from Xic. Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=7869 Signed-off-by: Choe Hwanjin Reviewed-by: Jeremy Huddleston commit 50e15379331c436851abb194251cde96999e67b3 Author: Bodo Graumann Date: Mon Oct 10 16:40:52 2011 +0200 libX11: Fixing modifier key range in Xutil.h (Bug #21910) IsModifierKey, defined in include/X11/Xutil.h, is a macro determining, which keys are regarded as modifiers. The constants ISO_Level5_Shift, ISO_Level5_Latch and ISO_Level5_Lock where excluded previously, leaving some Neo2 modifiers functionless in combination with compose. This patch adjusts the range to include the correct, full range of modifier constants. Neo2 Bug 277 X.Org Bug 21910 Signed-off-by: Bodo Graumann Reviewed-by: Daniel Stone commit b5a108624331fabf393223c0891914cc54d4caf4 Author: Yann Droneaud Date: Tue Oct 11 17:27:59 2011 +0200 Return name instead of False in XSetICValues() In case of error, XSetICValues() must return the first argument that failed to be set. But in some error paths, it returns False, which is converted to NULL, so the function returns OK in case of error. Signed-off-by: Yann Droneaud Reviewed-by: Jeremy Huddleston commit 10992cb8dc5e4d938e7e5a633b68a81b5875f3ba Author: Yann Droneaud Date: Sun Oct 9 17:56:45 2011 +0200 Return name instead of value in XGetIMValues() and XSetIMValues() As stated in man page (XOpenIM) and Xlib documentation (chapter 13.5.3), XGetIMValues() and XSetImValues() "returns the name of the first argument that could not be obtained." But currently, err = XGetIMValues(im, "invalid", &arg, NULL); returns &arg instead of "invalid". This patch fixes https://bugs.freedesktop.org/show_bug.cgi?id=12897 Signed-off-by: Yann Droneaud Reviewed-by: Jeremy Huddleston commit f2651e03f3295a453a2965c3749bc8b6e66f1c09 Author: Jeremy Huddleston Date: Mon Oct 10 14:09:17 2011 -0700 Mark XKeycodeToKeysym as _X_DEPRECATED Signed-off-by: Jeremy Huddleston commit 25d7bb9c705623ebbb3afba3b86d0ded5b6bb4fb Author: Jeremy Huddleston Date: Sun Oct 9 02:38:28 2011 -0700 Fix nobreakspace for pt_BR.UTF-8 https://bugs.freedesktop.org/show_bug.cgi?id=31334 Signed-off-by: Jeremy Huddleston commit 913603660c17ec59a4d39d3e3b9d60469ee5c060 Author: Jeremy Huddleston Date: Sun Oct 9 02:26:45 2011 -0700 Fix potential uninitialized variable access in _XimMakeICAttrIDList Found by clang static analysis Signed-off-by: Jeremy Huddleston commit 566ceaf5a92c721ac7155528e4d0d2e5cbef023f Author: Jeremy Huddleston Date: Sun Oct 9 02:25:50 2011 -0700 Remove self-resolving aliases https://bugs.freedesktop.org/show_bug.cgi?id=30112 Signed-off-by: Jeremy Huddleston commit 22ba43d198dcca86c88eb15a56fc7d8fc47c422e Author: Matt Dew Date: Fri Oct 7 22:52:30 2011 -0600 Cleanup IDs and links in doc 1 - fix the capitalization of the ID attributes to match either the or <funcdef> string it goes with. 2 - fix any <linkend>'s that were affected by 1. 3 - any <function> in the docs that has an actual funcdef, will become an olink. Signed-off-by: Matt Dew <marcoz@osource.org> commit f858f3326adbc0c5711669b92a64a84a9083a055 Author: James Cloos <cloos@jhcloos.com> Date: Tue Oct 4 17:11:11 2011 -0400 [nls] Fix typo/synco. The iso8859-1 Compose table includes an optional section which uses Ctrl<T> as a substitute for <Multi_key>. In that section the sequence to generate an @ (at) either was incorrectly copied from the Multi_key section or was not kept in sync with the Multi_key section. Fixing this eliminates the warning from compose-check.pl: ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ┃ Clash with existing sequence in iso8859-1/Compose.pre ┃ on line 661: Ctrl<T> <A> <A> ┃ line #661: Ctrl<T> <A> <A> : "\305" Aring ┃ line #480: Ctrl<T> <A> <A> : "@" at ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Signed-off-by: James Cloos <cloos@jhcloos.com> commit 7f35f7efc23234b3f8529fee31a802c21846d9ab Author: Jeremy Huddleston <jeremyhu@apple.com> Date: Mon Sep 26 11:32:56 2011 -0700 Remove conflicting compose sequences for cent and colon Regression from 4d78ad4bf6dcabca9bb5f84c770abfbb02d3f7a4 Found by tinderbox Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com> commit 4d78ad4bf6dcabca9bb5f84c770abfbb02d3f7a4 Author: Jeremy Huddleston <jeremyhu@apple.com> Date: Sun Sep 25 16:29:17 2011 -0700 Add additional compose sequences for pound sterling, yen, and cent (mixed case) https://bugs.freedesktop.org/show_bug.cgi?id=1013 Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com> Reviewed-by: Gaetan Nadon <memsize@videotron.ca> commit 0ca4153a373e2af7a9eb3cef003393ab332bc79e Author: Jeremy Huddleston <jeremyhu@apple.com> Date: Sat Sep 24 16:44:04 2011 -0700 Use a configure check for seteuid HP-UX doesn't have seteuid https://bugs.freedesktop.org/show_bug.cgi?id=1497 Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com> commit 79594b4d66344f248eb4314ecb78eb81f632c3ab Author: Gaetan Nadon <memsize@videotron.ca> Date: Tue Sep 20 16:06:10 2011 -0400 localedb specs: use <copyright> for first holder of multi license Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 154430268cf004b06920edde2f1812dc16d71fae Author: Gaetan Nadon <memsize@videotron.ca> Date: Tue Sep 20 16:01:52 2011 -0400 libX11 specs: use <copyright> for first holder of multi license Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 66e621f58dee804acb795ff2c79ce6dd38b34a3f Author: Tollef Fog Heen <tfheen@err.no> Date: Tue Sep 20 13:07:37 2011 -0400 NLS: Add more vulgar fractions Add 1/7, 1/9, 1/10 and 0/3 vulgar fractions. Signed-off-by: Tollef Fog Heen <tfheen@err.no> Signed-off-by: James Cloos <cloos@jhcloos.com> commit e37a6da814b5653be46000a9a76902729660a2e6 Author: Alexander Polakov <polachok@gmail.com> Date: Sat Sep 17 20:54:58 2011 +0400 XGrabKey manual page: change XAllowAccess to XAllowEvents in See Also There is no XAllowAccess man page to see. Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit a23f3323f269b33a43d16dce01395cd28bc41b45 Author: Gaetan Nadon <memsize@videotron.ca> Date: Mon Sep 19 15:27:44 2011 -0400 XKB: provide adequate quotes for the license text Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit a9c7a5cad91d968f5536ef8fc735036e921832a3 Author: Gaetan Nadon <memsize@videotron.ca> Date: Mon Sep 19 15:18:53 2011 -0400 XIM: refactor the multi licensing legal text Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit c46f934ed89e7de79746a0387c9f998d91994ea6 Author: Gaetan Nadon <memsize@videotron.ca> Date: Mon Sep 19 10:33:30 2011 -0400 xim trans: restore Fujitsu copyright legal text Somehow lost during docbook conversion. text from x.org ftp R7.5. Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 3d75f993382bfdc89d31668d7dfc71c91222e0d7 Author: Gaetan Nadon <memsize@videotron.ca> Date: Mon Sep 19 10:11:46 2011 -0400 xtrans: restore X Consortium original legal text Asking X Consortium permission to use The Open Group name makes no sense. Even more so in 1994 before X Window System was passed on to the Open Group. Using original text from xorg-docs/general/License Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 136a381585a4a9686c11bad1a6130837978e677f Author: Gaetan Nadon <memsize@videotron.ca> Date: Mon Sep 19 10:03:21 2011 -0400 Framework: restore X Consortium copyright Somewhat dammaged during docbook conversion. Also restore pasrt of the original license text Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 33f346878406762704a0c13cdc018111c666f3c1 Author: Gaetan Nadon <memsize@videotron.ca> Date: Mon Sep 19 09:50:00 2011 -0400 localedb: restore X Consortium original legal text Asking X Consortium permission to use The Open Group name makes no sense. Even more so in 1994 before X Window System was passed on to the Open Group. Using original text from xorg-docs/general/License Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit e99c9338e413efca026210b9d830efb5c74d34e5 Author: Gaetan Nadon <memsize@videotron.ca> Date: Mon Sep 19 08:23:18 2011 -0400 specs: support multi licensed copyright notice and license text For documentation having multiple licenses, the copyright and legalnotice elements sequence cannot instantiated multiple times. The copyright notice and license text are therefore coded inside a legalnotice element. The role attribute on the paragraph is used to allow styling of the copyright notice text which should not be italicized. Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit b9dedc757e667333ce899115d618f25cdaa4dd5e Author: Gaetan Nadon <memsize@videotron.ca> Date: Mon Sep 19 08:17:50 2011 -0400 localedb: add release info to spec Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 4519c89a87ddce01e599542737a27c26030fe4ff Author: Gaetan Nadon <memsize@videotron.ca> Date: Mon Sep 19 08:05:32 2011 -0400 specs: fix The Open Group license text The warranty referred to the X Consortium Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 08ac378423e7be72e340197ba5559a1a36f1783c Author: Gaetan Nadon <memsize@videotron.ca> Date: Mon Sep 19 08:03:39 2011 -0400 specs: The strandard name is still "X Consortium Standard" This spec, and fsproto spec, are the only two docs with a different standard name. Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 8dfbeb1b1b1e8aa17f69d0a373155419a5f6a172 Author: Gaetan Nadon <memsize@videotron.ca> Date: Sun Sep 18 13:22:34 2011 -0400 specs: support multi licensed copyright notice and license text For documentation having multiple licenses, the copyright and legalnotice elements sequence cannot instantiated multiple times. The copyright notice and license text are therefore coded inside a legalnotice element. The role attribute on the paragraph is used to allow styling of the copyright notice text which should not be italicized. Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 278ca8947c1dabb2b819527dca0fa6190c034f67 Author: Gaetan Nadon <memsize@videotron.ca> Date: Fri Sep 16 11:45:56 2011 -0400 docs: merge copyright holder under the same copyright notice As per the docbook markup dtd. Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 7ff012bb433109a622ac122ade71669e842ebdcf Author: Gaetan Nadon <memsize@videotron.ca> Date: Fri Sep 16 10:09:57 2011 -0400 specs: handle multiple sets of copyright notice/license/warranty Docbook groups all the <copyright> elements together and all the <legalnotice> elements together. We cannot have a sequence: <copyright> <legalnotice> <copyright> <legalnotice> [...] A workaround, which was done in some documents, is to put the copyright notice inside the legalnotice in plain text without the <copyright> element. A formal paragraph title is added here which makes the copyright notice bold, and makes it much easier to locate. Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 4a550c71b8221c37b1a9378d5a170da9eaa03405 Author: Gaetan Nadon <memsize@videotron.ca> Date: Wed Sep 14 15:55:42 2011 -0400 specs: remove orphan affiliation. Authors affiliation are correct. Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 0cc02a6df65214560b7575e89cebee741d6d2469 Author: Gaetan Nadon <memsize@videotron.ca> Date: Tue Sep 13 17:39:02 2011 -0400 specs: use appropriate markup for Copyright statements Also move <releaseinfo> to match order of appearance Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit afe13e19ebf0fc4e3460644164433af016f0add7 Author: Gaetan Nadon <memsize@videotron.ca> Date: Mon Sep 12 16:54:45 2011 -0400 docs: use the &fullrelvers; entity to set X11 release information Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 22a2153282db13e9d94881022b8c979539841a2c Author: Gaetan Nadon <memsize@videotron.ca> Date: Sun Sep 11 19:49:53 2011 -0400 docs: remove <productnumber> which is not used by default This element is not rendered by default on the title. A template customization is required to display it. X Window System does not have a product number. Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 719f16570d9fcfd15247813ee51fa51ac8a6ff4c Author: Gaetan Nadon <memsize@videotron.ca> Date: Sun Sep 11 17:40:21 2011 -0400 docs: use the &fullrelvers; entity to set X11 release information Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit a6b2992f50b571d612ea9ade631c432c3099bc12 Author: Gaetan Nadon <memsize@videotron.ca> Date: Sun Sep 11 17:38:42 2011 -0400 docs: remove orphan <affiliation> Somehow created during the conversion from roff. Unable to locate the author to which it belongs. Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit c7420060b6e47b8467ba50c796ec3c1bab090bc7 Author: Gaetan Nadon <memsize@videotron.ca> Date: Sun Sep 11 17:38:05 2011 -0400 docs: remove <productnumber> which is not used by default This element is not rendered by default on the title. A template customization is required to display it. X Window System does not have a product number. Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 7d5b718c1edbc43c54b7001be548e515a49540ea Author: Gaetan Nadon <memsize@videotron.ca> Date: Fri Sep 9 14:46:39 2011 -0400 docbook.am: embed css styles inside the HTML HEAD element Rather than referring to the external xorg.css stylesheet, embed the content of the file in the html output produced. This is accomplished by using version 1.10 of xorg-xhtml.xsl. This makes the whole html docs tree much more relocatable. In addition, it eliminates xorg.css as a runtime file which makes xorg-sgml-doctools a build time only package. Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 24632d280491c465dfe208ef788815890892e326 Author: Gaetan Nadon <memsize@videotron.ca> Date: Mon Sep 5 12:53:12 2011 -0400 compose: upgrade makefile to support olinking on chunked html The essential differences over the regular docbook.am are: Adding root.filename parameter for naming of chapters html files. Using xhtml xmlto format and xorg-chunk.xsl stylesheet Set olink.base.uri for pdf but not for chunked html Olink is not applicable to ps and txt formats. Html chapters are added to shelf_DATA as they are also installed. The xml is generated from a perl script and not distributed. Requires version 1.10 of xorg-sgml-doctools. Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 93ab0a1c9a4f9094cf0c8e1c686130673e681798 Author: Gaetan Nadon <memsize@videotron.ca> Date: Wed Aug 31 19:46:20 2011 -0400 docbook.am: refactor common flags for xmlto and xsltproc Maximize reuse and reduce risk of setting the wrong flag at the wrong place. Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 85b725aa9ef76aeb5e94d42e0cd60f896da7ab97 Author: Gaetan Nadon <memsize@videotron.ca> Date: Wed Aug 31 10:46:59 2011 -0400 docbook.am: add search path for local entities Currently, only $(XORG_SGML_PATH)/X11 is searched for xml entities. A module may want to add entities that apply only to itself and not to all modules, like the xserver does. This feature may or may not be used in this module, but all modules share a copy of docbook.am. Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit b5ed2d368d47f244d43d2513329fa2758bc4ef54 Author: Gaetan Nadon <memsize@videotron.ca> Date: Thu Aug 25 14:39:20 2011 -0400 docbook.am: explicitly list xmlto flags for each target Normal evolution of make targets make it impractical to factor out common command flags for xmlto. The targets now list each command option as its presence or absence needs to be justified. xorg.ss is only needed by xmlto for html. masterdb is only needed by xmlto. img.src.path must not be used by html. xsltproc need to use customization layer xorg-*.xsl. txt format is not required to search masterdb. Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit d5b3605f3b0639452e892e9ff3afb18bb7442069 Author: Gaetan Nadon <memsize@videotron.ca> Date: Thu Aug 25 13:12:49 2011 -0400 docbook.am: do not generate docs if docbook customization layer is missing The stylesheets used to be only about style, fonts or colors. Complex features are now used like olink and chunked html which may cause a build break when stylesheets are missing or lead to hard to find problem. Some modules may be built when stylesheets are present while others are built without. There is no requirement to build crippled docs. Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 7f23c72c94d9d14122426b0d8c66054f1402769a Author: Gaetan Nadon <memsize@videotron.ca> Date: Fri Aug 5 14:33:32 2011 -0400 libX11 specs: review doclifter generated tables Many tables had a questionnable layout and some had information dropped. Each table was cross-referenced with a pre-docbook version to ensure semantic integrity. Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 1efdbeb8cd08f443188ac783cbab6ba0654a66d6 Author: Gaetan Nadon <memsize@videotron.ca> Date: Wed Jul 20 15:28:47 2011 -0400 credits.xml: remove toc from Acknowledgments There should be no toc for a simple preface with only one Acknowledgments section. Use <simplesect> markup rather than sect1. Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 77cc17ed0817c1df3ac5feb9dc83a5ba5d021a4b Author: Gaetan Nadon <memsize@videotron.ca> Date: Thu Aug 4 19:59:37 2011 -0400 libX11 specs: move </para> above <varaiablelist> Many, but not all, function synopsis have a paragraph that nests the variable list. The code was generated by doclifter and there is no apprent reasons as to why it was done this way. Found while investigating a spacing issue. Before the patch: <para>Some blurb about the function <funcsynopsis> </funcsynopsis> <variablelist> </variablelist> </para> After the patch: <para>Some blurb about the function</para> <funcsynopsis> </funcsynopsis> <variablelist> </variablelist> There are no noticable differences when reading the doc other than than the removed few pixels of spacing between the function sysnopsis and the variable list block. In some cases, there are no "blurb about the fucntion" and the empty paragraph is removed. Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 18595f0d8f95ff1c12e7b9f73bd4b30dda5c7168 Author: Gaetan Nadon <memsize@videotron.ca> Date: Thu Jul 28 19:46:14 2011 -0400 compose specs: generate chunked html For large 600 page documents such as this one, chunked html provide faster browser load time and better navigation. Simply click on the locale of your choice in the toc and the browser loads just that one file. Being a DocBook, it benefits from all of the usual features and can be integrated with the rest of the documentation. Acked-by: Alan Coopersmith <alan.coopersmith@oracle.com> Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 5cc8815b8a117cf0b6af37e7d55c5a420d9fff57 Author: Gaetan Nadon <memsize@videotron.ca> Date: Thu Jun 23 15:16:47 2011 -0400 specs: build compose keys tables in specs/i18n/compose Build the tables article together with the rest of the specs. Make it transparent that the source in generated in nls. Reuse docbook.am and get all the features such as olink. The docbook article file stem and id must be the same. The new name for the main article is libX11-keys. The new installation location is $docdir/libX11/i18n/compose. The nls dir retains the role of generating the DocBook/XML source but does not build neither installs output formats or generated source. The tables article now has to specify that each included locale section is a dependency. It did not matter before as they were web links. The xorg-sgml-doctools masterdb shall be updated to include this new doc. Install location moved from doc/libX11/Compose to doc/libX11/i18n/compose. Acked-by: Alan Coopersmith <alan.coopersmith@oracle.com> Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit adebbe3856b4aee39c0c7af902c1dea847dd6d7c Author: Gaetan Nadon <memsize@videotron.ca> Date: Thu Jun 23 14:43:31 2011 -0400 nls: restructure charts as a single article with sections Looks more like a real article with a toc rather than individual web pages. Looks nicer in pdf. Each locale is a "section" rather than an "article". Using XInclude to aggregate xml source files gets you the toc for free. The single document is over 600 pages while there were 62 separate documents previously. FOP version 1.0 is required to handle missing character like capital sharp s. Acked-by: Alan Coopersmith <alan.coopersmith@oracle.com> Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit fc74dc12b1ff3c43e240e1a713316ce1bf525d61 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Thu Jul 28 19:32:40 2011 -0700 libX11 1.4.4 Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit ab1f30231755d99ed123af6873b981834640f01d Author: Matt Dew <marcoz@osource.org> Date: Wed Jul 13 12:33:40 2011 -0600 Add id attributes to error codes to allow linking from other docs. Signed-off-by: Matt Dew <marcoz@osource.org> Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> Acked-by: Gaetan Nadon <memsize@videotron.ca> commit 5c831fef402914ccf2ec14005c25be48852f119b Author: David Coppa <dcoppa@gmail.com> Date: Tue Jul 12 10:05:47 2011 +0200 Fix libpthread linkage on OpenBSD. OpenBSD prefers to use the -pthread to fetch pthread libs when needed. Signed-off-by: Matthieu Herrb <matthieu.herrb@laas.fr> Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 445b0b3efc04a74fc77cd3e483b25cfb5da82f12 Author: Gaetan Nadon <memsize@videotron.ca> Date: Wed Jun 22 20:46:26 2011 -0400 config: use XORG_WITH_PERL macro to replace custom program check New in version util-macros 1.15, the macro does the usual checking for program path and provides an interface for makefile variables. Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 47d99a324db9232029a22dd523e3bc3ed0936aca Author: Gaetan Nadon <memsize@videotron.ca> Date: Wed Jun 22 20:41:18 2011 -0400 config: update XORG_WITH_FOP macro usage A new feature to test for a minimum version has been added. The parameter position changed. Due to limited usage and requiring 1.15, it turns out to be backward compatible. There is no functional change to how docs are build. Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit e659683ad51ecc26c989fbdefdfe20f83af2c5a5 Author: Gaetan Nadon <memsize@videotron.ca> Date: Wed Jun 22 11:48:49 2011 -0400 Remove unused xmlrules.in in specs, now in /nls The specs dir has been converted to docbook.am Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 9992092609bd83a0db778e9a9ac1e879d445e637 Author: Gaetan Nadon <memsize@videotron.ca> Date: Thu Mar 31 10:23:22 2011 -0400 nls: move xmlrules.in from specs to nls It is no longer used in the specs dir. Remove html from CLEANFILES as it breaks. Make do not clean directories Remove SUFFIXES as pattern rules are used rather than suffix rules. Other improvements are possible, the first priority is to move it out of the specs dir. Acked-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit b370eeb0191b0e2a8bde2f03a442a8ca62e35d58 Author: Gaetan Nadon <memsize@videotron.ca> Date: Sun Jun 5 16:27:36 2011 -0400 Install target dbs alongside generated documents This matches a change in xorg-sgml-docs whereby the masterdb will look for the target dbs into the same location as the generated documents. The target dbs are now installed alongside the generated documents. Previously they are installed in $prefix/sgml/X11/dbs alongside masterdb which has the potential of installing outside the package prefix and cause distcheck to fail when user does not have write permission in this package. Requires XORG_CHECK_SGML_DOCTOOLS(1.8) which was released 2011-06-11 commit 4e741654b7e0a283779b8b4af5bb32e05b7fc678 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Tue Jun 7 18:41:30 2011 -0700 specs/libX11: Turn appendix references into links Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit a3d1152bc4b300f59ea2f08925739aab1ebfbc4e Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Tue Jun 7 18:37:41 2011 -0700 specs/libX11: Turn chapter references into links Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit d0cc949dfe44a41a71f19e4fe6c7547bb3d9bdbe Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Tue Jun 7 00:52:32 2011 -0700 specs/libX11: Turn many "see section ..." into links Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 02d4c08dead2f266809b3f93ec72377783423ac7 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Sun Jun 5 22:50:37 2011 -0700 specs/libX11: Convert some header filenames to filename tags perl -i -p -e 's{^<(.*\.h)>\ *}{<filename class="headerfile"><\1></filename>}' *.xml Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit c51a011329afa6e5b9d2b285349c132683ecf9fb Author: Matt Dew <marcoz@osource.org> Date: Tue May 31 20:03:23 2011 -0600 Add id attributes to funcsynopsis to allow other docs to olink to them. Signed-off-by: Matt Dew <marcoz@osource.org> Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Gaetan Nadon <memsize@videotron.ca> commit 6841260c8bb15404a0b4805bee3b0bdfec7176b3 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Fri May 27 20:14:36 2011 -0700 Bug 37624 - parameter x is missing from synopsis of XDrawString in libX11.html https://bugs.freedesktop.org/show_bug.cgi?id=37624 Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 205af6a4e557c62a6395feadc1c89f4a9fe1713b Author: Matt Dew <marcoz@osource.org> Date: Sat May 21 00:23:06 2011 -0600 Add id's to functions, to make clickable links. Signed-off-by: Matt Dew <marcoz@osource.org> Reviewed-by: Gaetan Nadon <memsize@videotron.ca> commit 5c06bc594473f6ab234724cd90db32e7b57fe811 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Fri May 20 15:38:08 2011 -0700 libX11 spec: fix monospaced column alignment after deligaturization Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit ef0019c714c273cb9b4ad3eba52d0b905109826b Author: James Cloos <cloos@jhcloos.com> Date: Fri May 20 15:51:46 2011 -0400 Expand latin ligatures out to their NFKC equivalents. Ligatures should be done by the typesetting system. Manuscripts should not bother with them. Signed-off-by: James Cloos <cloos@jhcloos.com> Reviewed-by: Keith Packard <keithp@keithp.com> commit 761b8aa0c9b3c58c478ac5ea1b3aaafadcfc1325 Author: Daniel Stone <daniel@fooishbar.org> Date: Thu May 12 16:21:50 2011 +0200 XCB: Add more friendly error messages for common asserts This patch adds more friendly error messages for three common classes of assertion: - missed sequence numbers due to being griefed by another thread - unknown requests in queue due to being griefed by another thread - extensions dequeuing too much or too little reply data It adds error messages offering advice (e.g. call XInitThreads() first) on stderr, but still generates actual assertions. Hopefully this means it's a little more Googleable and a little less frightening. Signed-off-by: Daniel Stone <daniel@fooishbar.org> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> commit 159bf292477048b9a2f074735afc516f52c93d80 Author: Gaetan Nadon <memsize@videotron.ca> Date: Thu May 19 20:22:11 2011 -0400 Remove misplaced hyphens in libX11 DocBook/XML #37364 Reported-by: Christopher Yeleighton <giecrilj@stegny.2a.pl> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 0ee6d8247d397500ae183ef180b6ff21bceefa1c Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Tue May 17 20:49:59 2011 -0700 Fix man page and comment references to use XFreeModifiermap (lowercase map) Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 3275ec4ca8790d571b6a1902367ca5f68a2dc5fd Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Tue May 17 20:30:54 2011 -0700 XKB man pages: Fix coordinantes typo in multiple pages Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit ca33a80606cd68e4572fa49ed6aaa1d1fc31a47f Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Tue May 17 16:27:32 2011 -0700 DisplayOfCCC.man: Fix typo "ClientWhitePointOfCC" -> "ClientWhitePointOfCCC" Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit ae39d82b01359b07dd1fe092d867f79ea95a5438 Author: Jeremy Huddleston <jeremyhu@apple.com> Date: Sun May 8 09:08:07 2011 -0700 Silence clang static analysis warnings for SetReqLen This provides a simplified version of the SetReqLen macro when using clang for static analysis. Prior to this change, we would see many Idempotent operation warnings inside this macro due to the common case of calling with arg2 and arg3 being the same variable. This has no effect on code produced during compilation, but it silences a number of false positives in static analysis. XIPassiveGrab.c:170:5: warning: Assigned value is always the same as the existing value SetReqLen(req, num_modifiers, num_modifiers); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from XIPassiveGrab.c:26: .../include/X11/Xlibint.h:580:8: note: instantiated from: n = badlen; \ ^ Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com> commit 130af2bc02090ee2526adb2f9803fc07019b8f1f Author: Jeremy Huddleston <jeremyhu@apple.com> Date: Wed May 4 15:34:31 2011 -0700 XKB: XkbComputeSectionBounds: Check correct bounds in default switch-case XKBGeom.c:191:25: warning: Access to field 'x1' results in a dereference of a null pointer (loaded from variable 'rbounds') _XkbCheckBounds(bounds,rbounds->x1,rbounds->y1); ^~~~~~~ Found-by: clang static analyzer Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> commit c987ef04bea345d5810e60cf6c53b747ddbe910e Author: Jeremy Huddleston <jeremyhu@apple.com> Date: Wed May 4 15:31:17 2011 -0700 Revert "XKB: Avoid a possible NULL dereference" Sorry for the noise. I accidentally pushed and didn't mean to. =( This reverts commit 4024091678ea07e0d898b798df9b29f3bf68eb08. commit 46d04bc4e7ff6c86385002c929d8eb0310f737a8 Author: Jeremy Huddleston <jeremyhu@apple.com> Date: Wed May 4 11:35:31 2011 -0700 Dead code removal XKBGeom.c:118:27: warning: Assigned value is always the same as the existing value for (key=row->keys,pos=k=0;k<row->num_keys;k++,key++) { ~~~^~~~ XKBGeom.c:115:5: warning: Value stored to 'pos' is never read pos= 0; ^ ~ Found-by: clang static analyzer Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com> commit 4024091678ea07e0d898b798df9b29f3bf68eb08 Author: Jeremy Huddleston <jeremyhu@apple.com> Date: Wed May 4 11:34:53 2011 -0700 XKB: Avoid a possible NULL dereference XKBGeom.c:191:25: warning: Access to field 'x1' results in a dereference of a null pointer (loaded from variable 'rbounds') _XkbCheckBounds(bounds,rbounds->x1,rbounds->y1); ^~~~~~~ Found-by: clang static analyzer Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com> commit 626e5e34be55b7cf734d745bd40a7ee3359029f8 Author: Jeremy Huddleston <jeremyhu@apple.com> Date: Wed May 4 11:21:41 2011 -0700 Annotate _XIOError as _X_NORETURN Found-by: clang static analyzer Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com> commit d3d7896408b435ab42656398839ff4351a37724d Author: Jeremy Huddleston <jeremyhu@apple.com> Date: Tue May 3 09:32:53 2011 -0700 clang analyzer: Don't warn about Xmalloc(0) This will prevent a number of false positives in where clang's static analysis reports about calls to malloc(0). Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com> commit 393921cf2188b2b0713cc157effaf17d0abab783 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Thu Apr 21 16:21:04 2011 -0700 Delete special case code to append "/sparcv9" to i18n module path Was triggered by defined(__sparcv9) so only built on Solaris SPARC 64-bit. Inconsistent with all other platforms, and a bit overcomplicated. Should anyone need to continue using that path, simply build with a #define POSTLOCALELIBDIR "sparcv9" to get the same result. Fixes Solaris bug 7038737: sparcv9 Xlib looking in wrong path for i18n loadable modules Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Daniel Stone <daniel@fooishbar.org> commit b9ff9cfd5c56ae6d52c6503f7019756d9de29557 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Thu Apr 14 13:47:12 2011 -0700 specs/libX11: Fix XOpenDisplay() prototype in chapter 2 [bug 36244] Was incorrectly showing AllPlanes() instead when describing XOpenDisplay() https://bugs.freedesktop.org/show_bug.cgi?id=36244 Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit b850adbdebcf500c659f85285d4d7374e15857f5 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Tue Apr 12 22:30:45 2011 -0700 Convert malloc(strlen()); strcpy() sets to strdup Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com> commit 09194042d3dc44a463add1f7c122a68ffd5ef0bf Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Tue Apr 12 21:27:45 2011 -0700 Replace Xmalloc+bzero pairs with Xcalloc calls Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com> commit ac1e2bff7121987fd768500a11d428d9fb9447c5 Author: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Date: Fri Mar 25 14:47:35 2011 +0200 om: Fix memory leaks on get_font_name error paths. While at it, remove unneeded check for NULL before Xfree. Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 7c362e275c93c92b4e68fe862e73ee36665de703 Author: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Date: Wed Mar 30 15:06:10 2011 +0300 xcms: Fix memory leaks on LINEAR_RGB_InitSCCData error path. pScreenData is replaced when building per visual intensity tables. If malloc failed the old value of pScreenData (stored also in pScreenDefaultData) was being leaked. Also, property_return wasn't free'd in that case. Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 5c810e2ac233e00f361549bafb9b59e8a9e05eff Author: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Date: Wed Mar 30 15:19:28 2011 +0300 xcms: Fix error on LINEAR_RGB_InitSCCData error path. Due to what looks like a copy & paste error, pScreenData->pBlueTbl would be accessed after being free'd. Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit d749948f9492fd9b61c74655a08e32c595e0e3a5 Author: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Date: Fri Mar 25 16:06:15 2011 +0200 om: Fix potential memory leak in init_om. Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit d0749d6abdf0fd4d8b4e59b02dad8ccda3f10995 Author: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Date: Thu Mar 24 20:40:41 2011 +0200 om: Fix memory leak on read_EncodingInfo error path. Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 4b2e8d00f5b6969c14003ee8eb258b9f0e4dd7c3 Author: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Date: Thu Mar 24 19:55:33 2011 +0200 Fix memory leaks on _XimCbDispatch error path. Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 46e6c78b1a89e4774e0f7e0f4d6d0fd060c3897e Author: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Date: Thu Mar 24 19:52:05 2011 +0200 Fix memory leak on _XimCommitRecv error path. Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 0ace642a2d47265f01450bfa2b2fd48eb6956a83 Author: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Date: Thu Mar 24 19:48:44 2011 +0200 Fix memory leaks on _XimWriteCachedDefaultTree error paths. Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit e29be94edbb58b3b8dab545377a710d1f73b61e0 Author: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Date: Thu Mar 24 19:42:36 2011 +0200 Fix memory leaks on _XimGetAttributeID error paths. Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit d144a50512466766f55ce61e3884925334b08f0d Author: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Date: Thu Mar 24 19:36:56 2011 +0200 Fix memory leaks on _XimProtoCreateIC error paths. Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 6a452f7a98499508f753cb8a7c3f08bcbec736b9 Author: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Date: Thu Mar 24 16:24:29 2011 +0200 Fix leaks in _XimEncodingNegotiation error paths. name_ptr and detail_ptr weren't free'd in some cases before returning False. Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 396e5a452a59c1f121220ba72167b720a863b30f Author: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Date: Thu Mar 24 14:17:44 2011 +0200 FSWrap: fix potential leak in copy_string_list If list_count is 0, dst would be allocated and leaked. Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 1a944260182bb552b954d69f6355c2760d4415df Author: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Date: Wed Mar 23 14:36:22 2011 +0200 Fix memory leak with broken bitmap files in XReadBitmapFileData Bitmap file data is read looping through the lines in the input file. If there is extra data after the bitmap, these lines will be processed and if this data represents another bitmap it will replace the one read before causing the memory allocated for bits to leak. This changes the code to stop processing the file once a bitmap was read. Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit c1c91e9a221a0e762d96cc12a3f189d6e59f4865 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Tue Apr 12 20:50:42 2011 -0700 Fix "attrinute" typo in comments in ximcp Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 7103b83a88edb9c93acfa68f3b556595b087baff Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Fri Apr 8 21:36:11 2011 -0700 Make doc install subdirectories more like the pre-docbook.am paths Haven't restored the "specs" path in the install path, but have restored libX11 & i18n subdirectories in the path for better logical grouping. Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Gaetan Nadon <memsize@videotron.ca> commit 9a1ae7a90f815a737a942e42d5eb1ffff400977b Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Fri Apr 8 13:24:28 2011 -0700 Install xml versions of specs even if HAVE_XMLTO is false Moves HAVE_XMLTO check into docbook.am, more closely matches behaviour from before docbook.am changes (commit e8c76407d2f6e3) Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Gaetan Nadon <memsize@videotron.ca> commit a0ad0d5c99023bb9a8ce3944dbc3267f5265721e Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Tue Apr 5 13:29:04 2011 -0700 libX11 1.4.3 Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit e8c76407d2f6e3b11babdb84426e43e780c859c3 Author: Gaetan Nadon <memsize@videotron.ca> Date: Fri Feb 25 09:23:54 2011 -0500 Documentation: add Docbook external references support When writing technical documentation, it is often necessary to cross reference to other information. When that other information is not in the current document, additional support is needed, namely <olink>. A new feature with version 1.7 of xorg-sgml-doctools adds references to other documents within or outside this package. This patch adds technical support for this feature but does not change the content of the documentation as seen by the end user. Each book or article must generate a database containing the href of sections that can be referred to from another document. This database is installed in DATAROOTDIR/sgml/X11/dbs. There is a requirement that the value of DATAROOTDIR for xorg-sgml-doctools and for the package documentation is the same. This forms a virtual document tree. This database is consulted by other documents while they are being generated in order to fulfill the missing information for linking. Refer to the xorg-sgml-doctools for further technical information. Co-authored-by: Matt Dew <marcoz@osource.org> Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 25eb76b3d2726f2f1de759901971ae53b2539dc4 Author: Harshula Jayasuriya <harshula@gmail.com> Date: Mon Mar 21 14:49:37 2011 +0000 Add #define XK_SINHALA Add #define XK_SINHALA so that the Sinhala keysyms can be used by the lk xkb keymap. Signed-off-by: Harshula Jayasuriya <harshula@gmail.com> Reviewed-by: Daniel Stone <daniel@fooishbar.org> commit db8b20b789112717ac0590b40f0b4dc2171797d0 Author: Jeremy Huddleston <jeremyhu@apple.com> Date: Thu Mar 17 16:15:00 2011 -0700 configure.ac: Bump version to 1.4.2 Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com> commit 83e1ba59c48c79f8b0a7e7aa0b9c9cfd84fa403d Author: Jamey Sharp <jamey@minilop.net> Date: Tue Mar 15 16:48:07 2011 -0700 Call _XErrorFunction without holding the Display lock. Historically, Xlib dropped the Display lock around the upcall to any user-supplied _XErrorFunction, but somewhere along the way I quit doing that if you built with XCB. The reasons are lost somewhere in the pre-git history of Xlib/XCB, and I can't now see any reason to hold the lock. The documentation for XSetErrorHandler still applies though: Because this condition is not assumed to be fatal, it is acceptable for your error handler to return; the returned value is ignored. However, the error handler should not call any functions (directly or indirectly) on the display that will generate protocol requests or that will look for input events. So while you are now once again permitted to re-enter Xlib from the error handler, you're only allowed to call non-protocol functions. Signed-off-by: Jamey Sharp <jamey@minilop.net> commit fd85aca7a616c595fc17b2520f84316a11e8906f Author: Jamey Sharp <jamey@minilop.net> Date: Mon Mar 14 14:45:35 2011 -0700 Ignore user locks after sleeping in _XReply and _XReadEvents. This bug appears as a hang in applications that wait for replies from multiple threads, where one such thread has taken a user lock using XLockDisplay. Prior to this fix, the code could deadlock in this way: If thread 1 goes to sleep waiting for a reply, and then thread 2 takes a user lock and waits for a reply, then thread 2 will wait for thread 1 to process its reply (because responses must be processed in order), but thread 1 will wait for thread 2 to drop its user lock. Fixed by making thread 1 not wait for thread 2 to drop its user lock. This makes the semantics of user locks hard to define, but they were already hard to define. The new behavior appears to be consistent with the way Xlib worked historically, anyway. Fixes: http://lists.freedesktop.org/archives/xcb/2011-March/006802.html There was a similar potential for deadlock in _XReadEvents, fixed the same way, with the same caveats about user-lock semantics. Signed-off-by: Jamey Sharp <jamey@minilop.net> commit 690f8bffd48a4e7e74298360ddd0431dc95dcd3f Author: Erkki Seppälä <erkki.seppala@vincit.fi> Date: Tue Jan 18 15:58:20 2011 +0200 xkb: XkbPropertyPtr determined allocation success from wrong variables Cannot reach dead statement "return NULL;" Check for the NULLness of prop->name and prop->value instead of name and value, which was checked earlier anyway. Decided against using strdup due to curious memory allocation functions and the rest of the xkb not using it either. Signed-off-by: Erkki Seppälä <erkki.seppala@vincit.fi> Reviewed-by: Alan Coopersmith <alan.coopersmith at oracle.com> commit 6a4d027284e7bb5dd458157947bbb1ff580ad071 Author: Erkki Seppälä <erkki.seppala@vincit.fi> Date: Mon Jan 10 16:37:22 2011 +0200 keyBind: Use Xcalloc to initialize allocated _XKeytrans Using uninitialized value "p->modifiers" Small fix by using Xcalloc instead of Xmalloc Signed-off-by: Erkki Seppälä <erkki.seppala@vincit.fi> Reviewed-by: Alan Coopersmith <alan.coopersmith at oracle.com> commit b993d73bb3214ecc24646f5427c8003b816c6921 Author: Erkki Seppälä <erkki.seppala@vincit.fi> Date: Mon Jan 10 16:22:45 2011 +0200 im/ximcp: release modifiermap before returning Variable "map" goes out of scope Release modifiermap before returning. Reordered code to call XGetModifierMapping after the first return from the function. Signed-off-by: Erkki Seppälä <erkki.seppala@vincit.fi> Reviewed-by: Dirk Wallenstein <halsmit@t-online.de> commit 807a7fc0354f2212dfa5ff1f9e4ede56d8e69ef4 Author: Gaetan Nadon <memsize@videotron.ca> Date: Fri Feb 25 09:23:54 2011 -0500 Docbook: change the book id to match the xml file basename This is required for the up-coming external references support. Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 40812b53ff5fe548f6eaf43ba4c8781cb43dab43 Author: Samuel Thibault <samuel.thibault@ens-lyon.org> Date: Mon Feb 21 21:54:17 2011 +0100 Make the Local XIM request key releases for braille Braille chords management needs key release events. We need to explicitly request then, else GTK would not pass them throught XFilterEvent and braille wouldn't work. Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org> commit c97c42c49cd5095462abecdf908b416fb0b540b6 Author: Samuel Thibault <samuel.thibault@ens-lyon.org> Date: Mon Feb 21 17:27:38 2011 +0100 Match braille patterns with compose tree Braille patterns should also be usable in Compose. This combines the implementation of braille chords and compose tree: only emit the braille pattern if it can not be found in the compose tree, if any. Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org> commit 0c6ca565d7c8a47ef3ea823569a9ca5298a5307d Author: Samuel Thibault <samuel.thibault@ens-lyon.org> Date: Mon Feb 21 15:56:54 2011 +0100 Fix status reporting for braille patterns _XimLocalMbLookupString can return a braille keysym even if _Xlcwctomb can't convert to the current MB charset. _XimLocalUtf8LookupString needs to set the braille keysym and status too. Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org> commit 993abe751f4141f54d8d28b8b73588a1c9085970 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Fri Feb 11 14:49:17 2011 -0800 Clean up memory when first XCreateRegion succeeds and second fails Error: Memory leak (CWE 401) Memory leak of pointer 's' allocated with XCreateRegion() at line 387 of /export/alanc/X.Org/sx86-gcc/lib/libX11/src/Region.c in function 'XShrinkRegion'. 's' allocated at line 387 with XCreateRegion(). s leaks when s != 0 at line 387. Error: Memory leak (CWE 401) Memory leak of pointer 'tra' allocated with XCreateRegion() at line 1452 of /export/alanc/X.Org/sx86-gcc/lib/libX11/src/Region.c in function 'XXorRegion'. 'tra' allocated at line 1451 with XCreateRegion(). tra leaks when tra != 0 at line 1451. [ This bug was found by the Parfait 0.3.6 bug checking tool. For more information see http://labs.oracle.com/projects/parfait/ ] Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 6ac417cea1136a3617f5e40f4b106aaa3f48d6c2 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Fri Feb 11 14:20:24 2011 -0800 ximcp: Prevent memory leak & double free if multiple %L in string In the highly unlikely event that TransFileName was passed a path containing multiple %L entries, for each entry it would call _XlcFileName, leaking the previous results, and then for each entry it would copy from that pointer and free it, resulting in invalid pointers & possible double frees for each use after the first one freed it. Error: Use after free (CWE 416) Use after free of pointer 'lcCompose' at line 358 of modules/im/ximcp/imLcPrs.c in function 'TransFileName'. Previously freed at line 360 with free. Error: Use after free (CWE 416) Use after free of pointer 'lcCompose' at line 359 of modules/im/ximcp/imLcPrs.c in function 'TransFileName'. Previously freed at line 360 with free. Error: Double free (CWE 415) Double free of pointer 'lcCompose' at line 360 of modules/im/ximcp/imLcPrs.c in function 'TransFileName'. Previously freed at line 360 with free. [ This bug was found by the Parfait 0.3.6 bug checking tool. For more information see http://labs.oracle.com/projects/parfait/ ] Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 502d414118c97d35a44f8e295709682022876331 Author: Erkki Seppälä <erkki.seppala@vincit.fi> Date: Thu Feb 3 17:08:57 2011 +0200 xcms/cmsProp: don't deal with uninitialized values, fail instead Properly handle the return value of XGetWindowProperty by considering if after the loop as well. Using freed pointer "prop_ret" There were numerous things wrong in how this function interacted with XGetWindowProperty. None of the local variables were initialized and remained that way if the call to XGetWindowProperty returned 1 (not Succeed). That doesn't result in after_ret being initialized in which case if it happens to be 0, the loop was exited. In that case format_ret and nitems_ret were uninitialized and the function might return with success (but with uninitialized pointer in prop_ret) or XcmsFailure. As the buffer enlarging code was called only when XGetWindowProperty failed (returned not Success), after_ret would not have been initialized. It would have been initialized only if the XGetWindowProperty has returned Success earlier, but in that case the code fragment would not have been reached. This patch alters the function to return XcmsFailure if the call to XGetWindowProperty fails. Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Reviewed-by: Rami Ylimäki <rami.ylimaki@vincit.fi> Signed-off-by: Erkki Seppälä <erkki.seppala@vincit.fi> commit c37e278993b9e5b3d7025ef4c434373a011996ec Author: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Date: Mon Jan 31 14:02:07 2011 +0200 xcms/LRGB: don't double-free property_return property_return was free'd before and in the case the conditional is true, the call to XcmsGetProperty failed which means that property_return wasn't set so there is no need to free it again. Double free of pointer "property_return" in call to "free" Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Erkki Seppälä <erkki.seppala@vincit.fi> Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> commit 50f4107811249806718a100f9d34f996c58e5e25 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Wed Feb 2 08:58:45 2011 -0800 Xrm.c: ReadInFile: refactor fstat error handling We can simplify the fstat failure case now that the GetFileSize macro has been expanded inline. Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Julien Cristau <jcristau@debian.org> commit 5e9c40fcb5da43c9fdacf12967d090bf202daf2a Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Wed Feb 2 08:56:00 2011 -0800 Expand GetSizeOfFile() macro at the one place it's called Removes XrmI.h header that only contained this single macro Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Julien Cristau <jcristau@debian.org> commit 450e17422c0e374d25c643f343ea268cec68da38 Author: Erkki Seppälä <erkki.seppala@vincit.fi> Date: Mon Jan 31 14:01:57 2011 +0200 XlibInt: Use strncpy+zero termination instead of strcpy to enforce buffer size Possible overrun of 8192 byte fixed size buffer "buffer" by copying "ext->name" without length checking Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Signed-off-by: Erkki Seppälä <erkki.seppala@vincit.fi> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit e2566e43b02d2d7b7c1c3bb7db7c5ae81c1245fa Author: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Date: Mon Jan 31 14:02:13 2011 +0200 lc/def/lcDefConv: Use Xcalloc to avoid use of uninitialized memory Fixed by zero'ing conv on allocation with Xcalloc. Then close_converter works properly. Using uninitialized value "conv->state" in call to function "close_converter" Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Erkki Seppälä <erkki.seppala@vincit.fi> Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 03f81ad8fb9783986cf9b17661dd31e95c396681 Author: Erkki Seppälä <erkki.seppala@vincit.fi> Date: Mon Jan 31 14:02:16 2011 +0200 xlibi18n/lcFile: Removed superfluous check for NULL target_dir The situation is already handled before this code. Cannot reach dead expression "0U" inside statement "if (1U + (target_dir ? strl..." Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Signed-off-by: Erkki Seppälä <erkki.seppala@vincit.fi> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 1346b9ea3b3882201ff8c3ee462ff4b0d4edf639 Author: Erkki Seppälä <erkki.seppala@vincit.fi> Date: Mon Jan 31 14:02:15 2011 +0200 ximcp/imLckup: Handle negative return value from _Xlcwctomb Fixed by negative value to memcpy by checking for the negative return value of _Xlcwctomb and returning 0/XLookupNone in that case. a negative value was passed to memcpy Unfortunately the other return values for *status don't fit into the error (which appears to indicate some internal error or running out of memory). The other valid status codes are XBufferOverflow, XLookupNone, XLookupChars, XLookupKeySym, and XLookupBoth. Each of these has a specific meaning attached. Reviewed-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Signed-off-by: Erkki Seppälä <erkki.seppala@vincit.fi> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 79a5c86e020f08cc108184298a72e2777036de39 Author: Erkki Seppälä <erkki.seppala@vincit.fi> Date: Mon Jan 31 14:02:14 2011 +0200 ximcp/imTrX: Handle failing XGetWindowProperty Checked return value of XGetWindowProperty and return false if it fails. Return value of "XGetWindowProperty(im->core.display, spec->lib_connect_wid, prop, 0L, (length + bytes_after_ret + 3UL) / 4UL, 1, 0UL, &type_ret, &format_ret, &nitems, &bytes_after_ret, &prop_ret)" is not checked Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> Signed-off-by: Erkki Seppälä <erkki.seppala@vincit.fi> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 2ace8d5c89c8f6d9f42b4068f4b508ca28f0ced1 Author: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Date: Mon Jan 31 14:02:12 2011 +0200 XlibInt: info_list->watch_data was reallocated, but result was discarded info_list->watch_data was being reallocated, but the return value of the reallocation was stored only into a local variable. This might cause some funky behavior and crashes. Variable "wd_array" goes out of scope Value "wd_array" is overwritten in "wd_array = (XPointer*)realloc((char*)info_list->watch_data, (((dpy->watcher_count + 1) * 4U == 0U) ? 1U : ((dpy->watcher_count + 1) * 4U)))" Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Erkki Seppälä <erkki.seppala@vincit.fi> Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 2b16a7e683e355c9746290b2cee2fd0dd2bf342a Author: Erkki Seppälä <erkki.seppala@vincit.fi> Date: Mon Jan 31 14:02:10 2011 +0200 GetProp: Zero-initialized error so its resourceID field is initialized Using uninitialized value "error.resourceID" in call to function "_XError" Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Erkki Seppälä <erkki.seppala@vincit.fi> Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 85e9f38e016137f0ff2791eb0d092ab027382d2c Author: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Date: Tue Feb 1 11:07:25 2011 +0200 xcms/LRGB: Add a label for freeing property_return. The rest of the code uses goto's to free memory allocated later and prevent memory leaks, but there were several paths were property_return was free'd just before a goto. Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Signed-off-by: Erkki Seppälä <erkki.seppala@vincit.fi> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 3161dc57d4e9b70f852f05e5e474455e121b06ab Author: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Date: Mon Jan 31 14:02:08 2011 +0200 xcms/LRGB: Fix potential resource leak. property_return was not free'd if the allocation of pRedTbl failed. Reviewed-by: Erkki Seppälä <erkki.seppala@vincit.fi> Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit be3e6c205d94dedc1cdebf5d17b987f0f828377a Author: Erkki Seppälä <erkki.seppala@vincit.fi> Date: Mon Jan 31 14:02:06 2011 +0200 Xrm: Handle the extremely unlikely situation of fstat failing Tracked variable "size" was passed to a negative sink. Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Signed-off-by: Erkki Seppälä <erkki.seppala@vincit.fi> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 3fae16c64d6ef76fd4a25a54c7f7de76596457db Author: Erkki Seppälä <erkki.seppala@vincit.fi> Date: Mon Jan 31 14:02:05 2011 +0200 Xrm: NEWTABLE had a memory leak after a memory allocation error The NEWTABLE macro missed freeing its allocated memory on subsequent memory allocation errors. Added call to Xfree. Variable "table" goes out of scope Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Signed-off-by: Erkki Seppälä <erkki.seppala@vincit.fi> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 7110ac653349a23c80c365f11f6270dc27c8975a Author: Erkki Seppälä <erkki.seppala@vincit.fi> Date: Mon Jan 31 14:02:03 2011 +0200 ImUtil: Handle a memory leak in one early return branch Fixed memory leak by adding Xfree for image Variable "image" goes out of scope Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Signed-off-by: Erkki Seppälä <erkki.seppala@vincit.fi> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit d695f5da9f5b778e54b6987d9177048e32818c4d Author: Erkki Seppälä <erkki.seppala@vincit.fi> Date: Mon Jan 31 14:02:01 2011 +0200 ximcp/imRm: Handle leaking colormap_ret Fixed memory leak by adding Xfree for colormap_ret Variable "colormap_ret" goes out of scope Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Signed-off-by: Erkki Seppälä <erkki.seppala@vincit.fi> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit f9eda19d08c1ea0973dfe0bc10a2519d6fd26cc7 Author: Erkki Seppälä <erkki.seppala@vincit.fi> Date: Mon Jan 31 14:01:59 2011 +0200 ximcp/imRmAttr: Handle leaking missing_list Fixed memory leak by adding Xfree and initializing missing_list with NULL Variable "missing_list" goes out of scope Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Signed-off-by: Erkki Seppälä <erkki.seppala@vincit.fi> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 3183269e0979c9dbce9d55d9e03937897dc9fb3b Author: Erkki Seppälä <erkki.seppala@vincit.fi> Date: Mon Jan 31 14:01:58 2011 +0200 ximcp/imRmAttr: Handle leaking colormap_ret XFree colormap_ret and initialize it when appropriate. Variable "colormap_ret" goes out of scope Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> Signed-off-by: Erkki Seppälä <erkki.seppala@vincit.fi> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit f66a032a937030f2d9baa81744d36dc585bb085c Author: Erkki Seppälä <erkki.seppala@vincit.fi> Date: Mon Jan 31 14:01:56 2011 +0200 xlibi18n/lcGeneric: Initialize uninitialized local variable Using uninitialized value "new" Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Signed-off-by: Erkki Seppälä <erkki.seppala@vincit.fi> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit d0266e06d38110ec908ca28379014eff743630b7 Author: Erkki Seppälä <erkki.seppala@vincit.fi> Date: Mon Jan 31 14:01:54 2011 +0200 xcmx/cmxColNm: Removed unused assignments to pBuf (in two functions) Pointer "pBuf" returned from "fgets(buf, 256, stream)" is never used Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Signed-off-by: Erkki Seppälä <erkki.seppala@vincit.fi> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit cc686655d7bfdeab8b67e01a24bd452a2e9e3fcf Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Tue Feb 1 12:30:56 2011 +0200 XDefaultOMIF.c: Fix memory leaks in get_font_name Instead of copying the value returned by get_prop_name and then releasing it, directly use the return value of get_prop_name, which allocates memory for the name. If get_prop_name returns NULL, continue on to XFreeFont to release the font before returning the NULL via the normal function return. Reviewed-by: Erkki Seppälä <erkki.seppala@vincit.fi> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 95796351435d81eaef8166d49ba3a6e7b633d70a Author: Gaetan Nadon <memsize@videotron.ca> Date: Mon Jan 31 14:50:19 2011 -0500 config: comment, minor upgrade, quote and layout configure.ac Group statements per section as per Autoconf standard layout Quote statements where appropriate. Autoconf recommends not using dnl instead of # for comments Use AC_CONFIG_FILES to replace the deprecated AC_OUTPUT with parameters. Remove redundant AC_CANONICAL_HOST included in XORG_DEFAULT_OPTIONS This helps automated maintenance and release activities. Details can be found in http://wiki.x.org/wiki/NewModuleGuidelines Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit e994ab227ed28655565c3193e63733630105e7f9 Author: Erkki Seppälä <erkki.seppala@vincit.fi> Date: Tue Jan 18 12:49:48 2011 +0200 Comparing array against NULL is not useful "&xkb->server->vmods != NULL" Removed superfluous comparison. Reviewed-by: Dirk Wallenstein <halsmit@t-online.de> Signed-off-by: Erkki Seppälä <erkki.seppala@vincit.fi> commit 4115f051e62f9b098efce691e070d44f09f30f1c Author: Erkki Seppälä <erkki.seppala@vincit.fi> Date: Wed Jan 12 15:51:11 2011 +0200 Variable "entry" tracked as NULL was dereferenced. Check entry for non-nullness before dereferencing it Reviewed-by: Dirk Wallenstein <halsmit@t-online.de> Reviewed-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Signed-off-by: Erkki Seppälä <erkki.seppala@vincit.fi> commit 0edb76d1d5fdca5a2543332699be2e72386dab24 Author: Erkki Seppälä <erkki.seppala@vincit.fi> Date: Thu Jan 27 09:54:00 2011 +0200 Dereferencing possibly NULL "str" in call to function "memcpy" (Deref assumed on the basis of 'nonnull' parameter attribute.) If _XkbGetReadBufferPtr returns NULL, goto BAILOUT Reviewed-by: Dirk Wallenstein <halsmit@t-online.de> Reviewed-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Signed-off-by: Erkki Seppälä <erkki.seppala@vincit.fi> commit 59da8a211ef723909d0530c0331d541db8e63378 Author: Erkki Seppälä <erkki.seppala@vincit.fi> Date: Mon Jan 10 16:17:47 2011 +0200 Using freed pointer "e" Reordered code to first to do the comparison and then to release data Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Signed-off-by: Erkki Seppälä <erkki.seppala@vincit.fi> commit 0f11c229f7099f7c5aeed4691b358dca151dac7d Author: Matt Dew <marcoz@osource.org> Date: Thu Jan 27 00:31:23 2011 -0700 Remove <literal> tags from compose-chart.pl so pdf building doesn't die on soft-hyphens. Signed-off-by: Matt Dew <marcoz@osource.org> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit ca00bb202f3afcdbbcb8c4cb50308c5dd03f2322 Author: Gaetan Nadon <memsize@videotron.ca> Date: Fri Jan 28 16:07:07 2011 -0500 config: replace deprecated AC_HELP_STRING with AS_HELP_STRING This silences an Automake warning. Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 8dac08c7515cb6f8a8f4d0a721713697eae755d8 Author: Gaetan Nadon <memsize@videotron.ca> Date: Fri Jan 28 14:59:04 2011 -0500 config: remove unrequired AC_HEADER_STDC Autoconf says: "This macro is obsolescent, as current systems have conforming header files. New programs need not use this macro". commit d4483375e37a72631d5821413cb75a423e990ffe Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Tue Jan 18 19:37:02 2011 -0800 config: Use correct AC_CONFIG_HEADERS macro Replaces obsolete AM_CONFIG_HEADER and undocumented AC_CONFIG_HEADER Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Gaetan Nadon <memsize@videotron.ca> Reviewed-by: Dan Nicholson <dbn.lists@gmail.com> commit c6405fe931f313a0d159bdad00244fc8aae12468 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Sun Jan 16 11:55:23 2011 -0800 config: remove AC_PROG_CC as it overrides AC_PROG_C_C99 XORG_STRICT_OPTION from XORG_DEFAULT_OPTIONS calls AC_PROG_C_C99. This sets gcc with -std=gnu99. If AC_PROG_CC macro is called afterwards, it resets CC to gcc. Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Gaetan Nadon <memsize@videotron.ca> commit 17aa1f2305da0952ad594c7329d08aba21f13ac8 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Sun Jan 16 11:40:59 2011 -0800 Update to xf86bigfontproto >= 1.2.0 header name Clears compile-time warning of: "X11/extensions/xf86bigfstr.h", line 1: #warning: "xf86bigfstr.h is obsolete and may be removed in the future." "X11/extensions/xf86bigfstr.h", line 2: #warning: "include <X11/extensions/xf86bigfproto.h> for the protocol defines." Requires xf86bigfontproto >= 1.2.0 if --disable-xf86bigfont is not passed to configure. Also removes unnecessary AC_SUBST of BIGFONT_CFLAGS & BIGFONT_LIBS that PKG_CHECK_MODULES does automatically Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Julien Cristau <jcristau@debian.org> commit a9228fcc676aacf9a760dd94891c89f9bc82b20d Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Tue Jan 11 17:55:22 2011 -0800 libX11 1.4.1 Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 92fa96451af37a7a0f2592de07643fdaed7a9efd Author: Pauli Nieminen <ext-pauli.nieminen@nokia.com> Date: Mon Jan 3 12:25:28 2011 -0500 Initialize event type If we receive unsupported event closing connection triggers valgrind error. ==12017== Conditional jump or move depends on uninitialised value(s) ==12017== at 0x487D454: _XFreeDisplayStructure (OpenDis.c:607) ==12017== by 0x486857B: XCloseDisplay (ClDisplay.c:72) *snip* ==12017== Uninitialised value was created by a heap allocation ==12017== at 0x4834C48: malloc (vg_replace_malloc.c:236) ==12017== by 0x4894147: _XEnq (XlibInt.c:877) ==12017== by 0x4891BF3: handle_response (xcb_io.c:335) ==12017== by 0x4892263: _XReply (xcb_io.c:626) *snip* Problem is that XFreeDisplaySturture is checking for qelt->event.type == GenericEvent while _XUnknownWireEvent doesn't store the type. Reviewed-by: Adam Jackson <ajax@redhat.com> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Pauli Nieminen <ext-pauli.nieminen@nokia.com> commit fa9747b9d4443eef9b1687b8b1208801f5c585da Author: Fernando Carrijo <fcarrijo.lists@gmail.com> Date: Tue Dec 28 16:18:57 2010 -0500 specs: convert images from gif to svg format. Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 0012e2a4eaddc0840617b4758931ad976ca2eb7c Author: Philipp Reh <sefi@s-e-f-i.de> Date: Wed Dec 22 15:14:05 2010 +0000 Events: Store event cookie when dequeuing event When we dequeue an event in XCheckTypedEvent or XCheckTypedWindowEvent, make sure to store the corresponding cookie too. Signed-off-by: Philipp Reh <sefi@s-e-f-i.de> Reviewed-by: Daniel Stone <daniel@fooishbar.org> commit d2714d65e85b44abedf5f82e1a31506dba397ef2 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Tue Dec 21 18:47:16 2010 -0800 Revert "Mark atom names argument to XInternAtoms as const" This reverts commit c8701115462b482d99ecff24d9de0f2806084ba5. The constification of a pointer to a pointer caused unexpected issues, and xorg-devel was unable to come up with a clean, safe, reasonable way to handle them, so we're chalking this up for now as yet another mistake in the Xlib API definition we'll be living with. See https://bugs.freedesktop.org/show_bug.cgi?id=32098 for details. Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 6459f9a48a82de3bc0235bd36acab2df11e436d5 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Mon Dec 20 20:54:07 2010 -0800 specs/XKB: make acknowlegement section <preface> instead of <chapter> Fixes numbering of actual chapters to match their filenames and to make the table/figure numbering match the references in the text. Reported-by: jelmd on freenode irc Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 42c653d5413fc5870486a9cf51dd28d1e88f7c69 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Sun Dec 19 23:53:02 2010 -0800 Add XKBlib spec images to dist_spec_DATA for distribution & installation Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Gaetan Nadon <memsize@videotron.ca> commit 8f8a3c8c42af82976d261ac2447cfbb0f90fa77d Author: Matt Dew <matt@osource.org> Date: Tue Nov 30 10:52:07 2010 -0500 specs: convert XKBlib spec from Framemaker to DocBook.xml Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit c8701115462b482d99ecff24d9de0f2806084ba5 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Sun Nov 21 20:49:05 2010 -0800 Mark atom names argument to XInternAtoms as const Updates code & docs for XInternAtoms. The single atom name argument to XInternAtom was already const char * in the code, but not the docs, so updated it in the docs too. Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> commit 24db5b5ff0d51b0ed9d9701a792c5f14f23b638d Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Sun Nov 21 14:04:32 2010 -0800 libX11 1.4.0 Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 18d3c3e9de19e936281b111d5a82acfb3a3f552e Author: Dan Nicholson <dbn.lists@gmail.com> Date: Sat Nov 6 21:58:10 2010 +0000 config: Check host string when deciding architecture to build for When checking for the OS/2 platform, $target_os is used. However, unless building a cross compiler, the $host* strings contain the platform details for the build system. See: http://www.gnu.org/software/automake/manual/automake.html#Cross_002dCompilation $host_os is already being used to determine the transport and threading options. Signed-off-by: Dan Nicholson <dbn.lists@gmail.com> Reviewed-by: Julien Cristau <jcristau@debian.org> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit affc2488a7f2660a74dc8354fc3e0bff2c4f879c Author: Dan Nicholson <dbn.lists@gmail.com> Date: Sat Nov 6 21:58:09 2010 +0000 config: Fix architecture check for OS/2 to skip nios2 cpu The OS/2 platform requires some utility functions as well as having a non-32 bit wchar_t. Fix the configure check so that it doesn't also affect the nios2 cpu, which wouldn't influence these operating system issues. Signed-off-by: Dan Nicholson <dbn.lists@gmail.com> Tested-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com> Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Julien Cristau <jcristau@debian.org> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 8cbca8a10761d1ea75a75bafa647632d6c0dac71 Author: Gaetan Nadon <memsize@videotron.ca> Date: Tue Nov 9 13:04:44 2010 -0500 config: HTML file generation: use the installed copy of xorg.css Currenlty the xorg.css file is copied in each location where a DocBook/XML file resides. This produces about 70 copies in the $(docdir) install tree. Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 3e8907305e1818369aef5a5c0da61f09e20de4f8 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Fri Oct 29 22:02:10 2010 -0700 libX11 1.3.99.903 (1.4.0 RC3) Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 5d245d8013289b13e0c42100951b26166c7fada4 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Fri Oct 29 22:01:39 2010 -0700 Require xorg-macros 1.11 now that it is released Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 1ec89689fc771f116a6165226b9e076f54254a40 Author: Dan Nicholson <dbn.lists@gmail.com> Date: Fri Oct 22 19:09:07 2010 -0700 docs: Disable fop documentation by default fop is used to generate the pdf and ps formats of the documentation. This can significantly slow down the build, especially when creating all the compose key charts. Since few people probably want the full set of doc formats, set the default to 'no'. The default parameter for XORG_WITH_FOP is only available in recent macros. Users generating configure from older macros will just get 'auto' as the default. Signed-off-by: Dan Nicholson <dbn.lists@gmail.com> Reviewed-by: Gaetan Nadon <memsize@videotron.ca> Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 03877bda911b72ac60a7144d6eced7d5be4b4d72 Author: Jon TURNEY <jon.turney@dronecode.org.uk> Date: Wed Apr 14 13:38:18 2010 +0100 Add C.UTF-8 and C.ASCII locale aliases Add C.UTF-8 locale as an alias for en_US.UTF-8 Add C.ASCII locale as an alias for C (C.UTF-8 is the default locale for cygwin. It also exists in debian, although I don't think it's intended for use by humans.) Signed-off-by: Jon TURNEY <jon.turney@dronecode.org.uk> Acked-by: Julien Cristau <jcristau@debian.org> Reviewed-by: James Cloos <cloos@jhcloos.com> commit 81d1d9a6bdca779a44f931730b866eea75777c00 Author: Dan Nicholson <dbn.lists@gmail.com> Date: Sat Oct 9 16:00:47 2010 -0700 docs: Remove directory prerequisites from make rules Make expects prerequisites to be files with valid timestamps, and directories are treated as always being out of date. Thus, any targets depending on directories will always be rebuilt. Instead, the doc rules are changed to always create the target's leading directory. This should prevent the documentation from being rebuilt when "make install" is run. Signed-off-by: Dan Nicholson <dbn.lists@gmail.com> Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit d0cbf388919364fe6b5b9127f36426eb744090a0 Author: Jeremy Huddleston <jeremyhu@apple.com> Date: Sun Sep 26 21:21:16 2010 -0700 Add an "X11_" string to header guards to avoid possible collision This addresses a build failure which can result from <X11/Xlocale.h> and <xlocale.h> being included in the same code since they both used the same _XLOCALE_H_ protection. Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com> commit b51ac675f44f5ce1a28c5734bf3c26983f8b4192 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Tue Sep 21 19:53:03 2010 -0700 libX11 1.3.99.902 (1.4.0 RC2) Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 986bb6d1d54368fe91e3ea24f518d43ce6179782 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Tue Sep 14 00:10:31 2010 -0700 Bug 19379 - Provide docs with overview of all compose key combinations Adds compose-chart.pl to generate DocBook/XML documents listing compose keys, and Makefile rules to generate HTML & PDF output from them if xmlto is present. https://bugs.freedesktop.org/show_bug.cgi?id=19379 Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Mikhail Gusarov <dottedmag@dottedmag.net> Reviewed-by: James Cloos <cloos@jhcloos.com> Tested-by: Gaetan Nadon <memsize@videotron.ca> commit 3eb064071695ebf0f371163ed818a428dfeba8e6 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Sat Sep 11 00:49:21 2010 -0700 Make locale data build non-recursive / parallelizable On a 4 core CPU with gmake -j 16 the nls subdir builds in half the time, plus this simplifies the next set of changes. Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Mikhail Gusarov <dottedmag@dottedmag.net> Reviewed-by: James Cloos <cloos@jhcloos.com> Tested-by: Gaetan Nadon <memsize@videotron.ca> commit a3fc78ac352e5a70a958996ef6aec50f653974d1 Author: Gaetan Nadon <memsize@videotron.ca> Date: Fri Sep 17 17:38:11 2010 -0400 config: remove man page suffix from bottom summary The man page suffix is the same for all libraries on a given platform and is not configurable. It should have been removed in commit 09edc6de6. Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit a52b0068f36c739eb7e426214cd72a8d9bb776ca Author: Gaetan Nadon <memsize@videotron.ca> Date: Fri Sep 17 17:29:30 2010 -0400 config: remove unhelpful comment in .gitignore Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 10dd881e7818be9074da4ab3a68577adcdaf71d2 Author: Adam Jackson <ajax@redhat.com> Date: Wed Sep 8 10:44:23 2010 -0400 Zero buffer data in BufAlloc() Inspired by a pattern in NoMachine's NX. Consistently zeroed buffers compress better with ssh and friends. Note that you'll need to rebuild all your protocol libraries to take advantage of this. Signed-off-by: Adam Jackson <ajax@redhat.com> Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com> Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit da099f0d2015831ea5f4a5d0740ed962aa4d5d8b Author: James Cloos <cloos@jhcloos.com> Date: Sun Sep 12 17:00:54 2010 -0400 Revert “Dolt-ify" Libtool’s is now sufficiently fast that DOLT is no longer worth the bother, even on those few systems where is works. This reverts commit 3e9afd501e40d76040635bd9a3045bcaf5a03b60 and part of commit d31e644c65c52828ea3e7abd94a8cf9aee12265c. It conflicted with commit f6a4fd0c7615684d08e848245849dea4017a5214 which moved dolt from configure.ac to m4/dolt.m4. And it addresses: http://bugs.freedesktop.org/show_bug.cgi?id=28188 Signed-off-by: James Cloos <cloos@jhcloos.com> commit 2661fbe6b809c937a60c2c1ca5ddb8280e399bd8 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Thu Sep 9 19:24:29 2010 -0700 XIM spec title page minor formatting cleanup Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit f99f1380bbf7bb2a0c491acad4a3d8db44bfd752 Author: Jens Petersen <petersen@redhat.com> Date: Mon Aug 23 18:08:10 2010 -0700 Bug 29773: aliases for nb_NO.utf8 and nn_NO.utf8 <https://bugs.freedesktop.org/show_bug.cgi?id=29773> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit b15b8a558ec64c834cc8f6a52d7f3c4f530c8c4b Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Fri Sep 3 23:11:53 2010 -0700 Sun's copyrights are now owned by Oracle Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 7742bf62b1fa652da4270587e280249945367cae Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Fri Sep 3 18:31:44 2010 -0700 libX11 1.3.99.901 (1.4.0 RC1) Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 5a02d6d74b5451d48d8f55709dfd4ecd3c068586 Author: Jeroen Hoek <mail@jeroenhoek.nl> Date: Sun Aug 29 09:47:06 2010 -0400 libX11/nls compose tables, add LATIN CAPITAL LETTER SHARP S Add LATIN CAPITAL LETTER SHARP S (See https://bugs.freedesktop.org/show_bug.cgi?id=29448 for rationale) Signed-off-by: James Cloos <cloos@jhcloos.com> commit 09edc6de6619a2eabda3b808ebff4165550664f1 Author: Gaetan Nadon <memsize@videotron.ca> Date: Fri Aug 13 14:21:08 2010 -0400 config: remove man-pages configuration option This option was added in commit 6e752ea120 with no explanation. The section number is provoded by XORG_MANPAGE_SECTIONS There is no case where libX11 should be different than other libs The option was also used to disable building of the man pages, which build in 14 secs. No indication this is required. If there is a requirement from system builders to disable building of man pages, it could be done consistently for all modules. Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit f92e754297ec5fdb81068b56a4435026666224fa Author: Aaron Plattner <aplattner@nvidia.com> Date: Sun Aug 15 21:51:38 2010 -0700 XOpenDisplay: save the correct display_name value The X Test Suite's XDisplayString test checks the invariant XDisplayString(XOpenDisplay(str)) == str. The Xlib XOpenDisplay violates this invariant by expanding str to the canonical form "host:display.scrn" (unless HAVE_LAUNCHD is set and it starts with "/tmp/launch"). E.g., this expands ":1" to ":1.0": 400|26 1 1 19:26:41|IC Start 200|26 1 19:26:41|TP Start 520|26 1 00032625 1 1|VSW5TESTSUITE PURPOSE 1 520|26 1 00032625 1 2|Assertion XDisplayString-1.(A) 520|26 1 00032625 1 3|A call to XDisplayString returns the string that was used 520|26 1 00032625 1 4|as the argument to the XOpenDisplay call that returned the 520|26 1 00032625 1 5|value used as the display argument. 520|26 1 00032625 1 6|METH: Open a connection using XOpenDisplay. 520|26 1 00032625 1 7|METH: Obtain the display string using XDisplayString. 520|26 1 00032625 1 8|METH: Verify that the value of the string is the parameter used in XOpenDisplay. 520|26 1 00032625 1 9|METH: Close the display using XCloseDisplay. 520|26 1 00032625 1 10|REPORT: XDisplayString() returned ":1.0" instead of ":1". 220|26 1 1 19:26:41|FAIL 410|26 1 1 19:26:41|IC End Fix this by deleting all of the code to construct the canonical path and just stashing a copy of the original display_name in dpy->display_name. Signed-off-by: Aaron Plattner <aplattner@nvidia.com> Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com> commit 1dc401f678469d0235e6d0b28eb4356f03327c9f Author: Gaetan Nadon <memsize@videotron.ca> Date: Fri Aug 13 13:06:51 2010 -0400 man: xkb: remove unused variable LIB_MAN_DIR_SUFFIX Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit cbe9eebd11e5ebab4280d25b57b4cd4001241619 Author: Gaetan Nadon <memsize@videotron.ca> Date: Fri Aug 13 11:42:29 2010 -0400 man: simplify building of shadow man pages Store the shadow files in git as any other man page. Move man pages to man dir and use the common makefile Local fix in CVS for bug 5628 is not required as the problem has been fixed in util-macros d9062e4077ebfd0985baf8418f3d0f111b9ddbba Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit bfd899c9af2318ecbe84cb69007dba4223fdb502 Author: Gaetan Nadon <memsize@videotron.ca> Date: Mon Aug 9 09:39:26 2010 -0400 config: reinstate XORG_PROG_RAWCPP erroneoulsy removed in commit 76e07ef6911734eac418e399b114f1b544512736. Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 76e07ef6911734eac418e399b114f1b544512736 Author: Gaetan Nadon <memsize@videotron.ca> Date: Fri Aug 6 14:01:51 2010 -0400 man: using the C preprocessor is not required for man pages. There were no special symbols needing cpp. Everything can be handled by the default MAN_SUBSTS in util-macros. Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 4b8ff7db39f2fe7ef12968d462aaf3f9054b6c18 Author: Jamey Sharp <jamey@minilop.net> Date: Fri Aug 6 15:51:56 2010 -0700 Fix use-after-free in _XReply on X errors. _XReply would always call dequeue_pending_request on errors. When it got an error for the current request, it would call dequeue, then break out of the loop; then, if it had an error in the event queue, it would compare it with the sequence number of the now-freed pending request. _XReply already stored that sequence number in dpy->last_request_read before freeing it, so look at that instead. Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=29412 Signed-off-by: Jamey Sharp <jamey@minilop.net> Signed-off-by: Josh Triplett <josh@joshtriplett.org> commit 9fa146b30046396b70d64986e50d6617b3a8ac48 Author: Gaetan Nadon <memsize@videotron.ca> Date: Sat Jul 31 16:15:35 2010 -0400 specs: xsl stylesheet requires abs path to images Using abs_builddir requires automake 1.10 or later. Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit a8727d4bc39015e303b4128d0ad8aaf6d5fc9f0a Author: Gaetan Nadon <memsize@videotron.ca> Date: Sun Aug 1 14:13:07 2010 -0400 specs: update .gitignore now that all groff generated files are gone Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit f70527f05677aaf6a493ba42d2d95f738aaebafa Author: Adam Jackson <ajax@redhat.com> Date: Thu Jul 29 11:11:21 2010 -0400 nls: Switch one of the interrobang sequences to gnaborretni Since gnaborretni is primarily used in LTR locales, the ? part of the sequence reflects the position of the bulge in the ?. When scanning an inverted interrobang left-to-right, you see the bulge first, so the compose sequence ?! is used; upright interrobang shows the bulge last, so it's !?. This is a change in behaviour, but I was unable to come up with anything better. ??!! or !!?? would match the patterns for ¿ and ¡, but they would delay evaluation of them; "¿Qué?" wouldn't show the ¿ until you hit Q. Likewise ?!?! and !?!? would delay showing the interrobang itself. ~!? and ~?! were considered but are arguably less intuitive. Reviewed-by: James Cloos <cloos@jhcloos.com> Signed-off-by: Adam Jackson <ajax@redhat.com> commit 511c4f6d29b2da4f71093feabcbb3913cb5d12a7 Author: Gaetan Nadon <memsize@videotron.ca> Date: Wed Jul 28 10:27:39 2010 -0400 specs: move indexterm from glossdef to glossterm This move fixes a Java class cast exception in the glossary. The problem was introduced in commit 26f4f0d50840fe5ba4c46aae0a8e68db0059434b It may not happen on all versions of the doc toolchain. There is no reason why indexterm cannot appear in glossdef, this is a workaround to an implementation problem found by trial and error. Signed-off-by: Gaetan Nadon <memsize@videotron.ca> Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 87a108f3aa565aa803dacb3a53b811f45025b609 Author: Matt Dew <matt@osource.org> Date: Sat Jul 24 14:46:57 2010 -0400 specs: replace troff source with docbook-xml source Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 8e603413586ff42b1351688f6f99318cbe243bca Author: Julien Cristau <jcristau@debian.org> Date: Sat Jul 24 22:13:07 2010 +0200 Compose.man: default user compose file is .XCompose, not .Xcompose The path was correct in the DESCRIPTION section, but not in FILES. Signed-off-by: Julien Cristau <jcristau@debian.org> commit 554da76ece85d0fc0cada45a86860e69c2107e9a Author: Daniel Stone <daniel@fooishbar.org> Date: Tue Jul 20 12:34:48 2010 +0100 NLS: Add \o/ Compose sequence Unicode is even more pointlessly awesome! Add a binding for Compose-\o/ to U+1F64C PERSON RAISING BOTH HANDS IN CELEBRATION. Signed-off-by: Daniel Stone <daniel@fooishbar.org> commit 2e7a18b6a617b9b4bfcea2d36f2bd2d7e0c4a3dd Author: Daniel Stone <daniel@fooishbar.org> Date: Fri Jul 9 18:13:13 2010 +0100 XStringToKeysym: Cope with 0x1234cafe-style input If we get input in the style of 0xdeadbeef, just return that exact keysym. Introduces a dependency on strtoul, which I'm told is OK on all the systems we care about. Signed-off-by: Daniel Stone <daniel@fooishbar.org> commit 3df45ed0c29b98ff468a0ff0ba24830bb664fd5a Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Mon Jul 19 17:58:27 2010 -0700 specs/libX11: Fix column count of Gravity Attributes table Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 53bcba0d1d2dc3fd5e0de4bae3da30a1aa31a0c4 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Mon Jul 19 14:43:38 2010 -0700 specs/libX11: Convert \- to − and \^ to either   or removed Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 5a0b45275638281e1bb2ae7d3e16b98e6470dae9 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Mon Jul 19 11:28:50 2010 -0700 specs/libX11: Manual cleanup pass over Ch. 1 Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 21567992958a6f12b3d0186f2f27a5b2a41b8448 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Mon Jul 19 14:51:10 2010 -0700 specs/libX11: make sure all files have DOCTYPEs so standard entities work Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit c944a8521f5760b485192658b921145159cdb439 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Sun Jul 18 13:12:20 2010 -0700 specs/libX11: Fix up list of header files in Ch.1 & add index entries Combination of manual editing and automatic substitution via: perl -i -p -00 -e 's{<varlistentry>(\s+)<term><X11/([^&]+)></term>(\s+)<listitem>(\s+)<para>}{<varlistentry id="Standard_Header_Files:$2">$1<term><filename class="headerfile"><X11/$2></filename></term>$3<listitem>$4<indexterm type="file"><primary><filename class="headerfile">X11/$2</filename></primary></indexterm>$4<indexterm><primary>Files</primary><secondary><X11/$2></secondary></indexterm>$4<indexterm><primary>Headers</primary><secondary><X11/$2></secondary></indexterm>$4<para>}g' CH01.xml Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit bb66e8f1ce330043278d3e8cbc7d5d3bc56ee030 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Sun Jul 18 12:47:27 2010 -0700 specs/libX11: Add indexterms for headerfiles that .hN used to provide Automatic substitution performed via: perl -i -p -e 's{^<<filename class="headerfile">([^<]+)</filename>>(.*)$}{<filename class="headerfile"><$1></filename>$2\n<indexterm type="file"><primary><filename class="headerfile">$1</filename></primary></indexterm>\n<indexterm><primary>Files</primary><secondary><filename class="headerfile"><$1></filename></secondary></indexterm>\n<indexterm><primary>Headers</primary><secondary><filename class="headerfile"><$1></filename></secondary></indexterm>}' *.xml Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit d0b0d215cb85da48b323b1392149ce181e7ef5ec Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Fri Jul 16 21:15:13 2010 -0700 specs/libX11: convert multicolumn lists from tables to <simplelist> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit e679f80c6210c0aefe3669f8f536353619097a4b Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Fri Jul 16 20:51:52 2010 -0700 specs/libX11: Tag WM_* as <property> Mass substitution done by: perl -i -p -e 'if ($_ !~ m{^\<}) { $_ =~ s{(WM_\w+)}{<property>$1</property>}g; }' *.xml Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit c7b7e59b3b22221d0be6286c540001c360308f69 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Fri Jul 16 20:41:33 2010 -0700 specs/libX11: Convert simpler eqn markup to docbook tags Mostly "sup" to <superscript> There's several more complicated equations that will probably need MathML or SVG to solve. Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 897486c54c6a54771867d667441aaf9a4b9c35ca Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Fri Jul 16 00:50:39 2010 -0700 specs/libX11: App. D: convert literallayouts to synopsis or programlisting Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 692906c3b3d8aa8b8927fbc230c3050d633785d2 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Fri Jul 16 00:36:43 2010 -0700 specs/libX11: Fix section headers in Appendix D Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit bcc41baa02e137884d847aec0f3ff8ca5c85c32f Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Wed Jul 14 07:22:26 2010 -0700 specs/libX11: Explicitly tag document as English Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 6783544706ff370e900c137f951e90230586d6dc Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Mon Jul 12 22:03:18 2010 -0700 specs/libX11: Appendix C: convert literallayouts to synopsis or programlisting Fixes display of a bunch of function prototypes and sample code Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 8834cd9285e6aaf437aee56292c508d99a090fa9 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Mon Jul 12 18:37:16 2010 -0700 xmlrules.in: Add chunked-html rule to manually generate smaller files Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 53f78680c34ebc94ce26b5e14c2a0003435cf10d Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Mon Jul 12 18:35:59 2010 -0700 specs/libX11: Convert Appendix A tables to real tables Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 705a1257a8a47f4a1f94979aee09a837500ede7d Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Mon Jul 12 18:38:09 2010 -0700 specs/libX11: Fix out-of-place text in Chapter 1 DTD violation error introduced in 89cc2e02e7c29ef9a02f0cfdf2090a2934f539e4 Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit a151346a2b7810e988f1de4b1e00b37672dc587a Author: Jeremy Huddleston <jeremyhu@apple.com> Date: Mon Jul 12 16:52:12 2010 -0700 launchd: Explicitly search /sbin Previously, launchd wasn't found if /sbin wasn't in the user's PATH. https://bugs.freedesktop.org/show_bug.cgi?id=29028 Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com> commit 89cc2e02e7c29ef9a02f0cfdf2090a2934f539e4 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Mon Jul 12 13:38:04 2010 -0700 Replace untranslated .hN macros with <filename> tags to show header names Translation performed by: perl -i -p -e 's{\<\!-- .hN (\S+) (\S+)?\s*-->} {<<filename class="headerfile">$1</filename>>$2}' *.xml Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 75480440946603b8efdbbf78b88d59c641b6d2c8 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Sat Jul 10 00:06:13 2010 -0700 specs/libX11: Mass substitution of <function> tags with more specific tags Matched names from X headers & "nm libX11.so" output to names in spec to map to more specific tags. Tags used: <code> code fragments <constant> enum values <errorname> X protocol errors <filename> filenames <function> functions <function> function-like macros (#define foo(a,b)...) <returnvalue> function return codes <structfield> struct members <structname> struct names (even when typedefed) <symbol> simple value #defines (#define NAME value) <systemitem> X protocol requests <systemitem class="event"> X protocol events <type> non-struct typedefs <varname> global variables (Also fixed a couple typos detected by failures of this matching, such as XESSetPrintErrorValues -> XESetPrintErrorValues.) Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 26f4f0d50840fe5ba4c46aae0a8e68db0059434b Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Fri Jul 9 00:37:23 2010 -0700 specs/libX11: Glossary cross-reference links Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 930b52d84031de0e15e0a11cf4ecfd3b2f59e073 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Thu Jul 8 21:19:08 2010 -0700 specs/libX11: Make whitespace around <function> tags more uniform Simplifies regular expressions for further mass substitutions. Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 730ce6b8aca77b77385aa894d234cbde5fcbce37 Author: Gaetan Nadon <memsize@videotron.ca> Date: Fri Jul 9 20:10:37 2010 -0400 specs: use pattern rules rather than suffix rules This allows target to rebuild when included .xml files are changed. Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 5527b4bc8ce7de60123eb28789ddef54aa48a378 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Thu Jul 8 20:56:41 2010 -0700 specs/libX11: Move punctuation outside of the <function> tags Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit d66d2134dfc38cd866c7c2d9ea45ed4b4dad23f0 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Thu Jul 8 20:42:50 2010 -0700 specs/libX11: Mark a number of <acronym>s Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit d5bbb12f55ac9f691eab6242cedc53207275131b Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Thu Jul 8 19:31:36 2010 -0700 specs/libX11: Glossary terms should not be marked as functions Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 5decf7bc5dae0ae0c45c47eaaa9c4fdf9515ca1c Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Thu Jul 8 19:28:18 2010 -0700 specs/libX11: Clean up author list & acknowledgements a little Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 0cd29bdb332c333e5123dce65b25ad1d97fbdae3 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Thu Jul 8 17:30:34 2010 -0700 specs/libX11: Convert troff .IN macros to docbook <indexterm> tags Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit a67d99ccbe22c8ce5f7a12f13b8991d9e0cf4491 Author: Gaetan Nadon <memsize@videotron.ca> Date: Thu Jul 8 17:29:21 2010 -0400 specs: specdir is required to install xml files The source is installed as well as the targets. This failed when configuring with --without-xmlto Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit e14273f44c1501ab51db4adcb83b18a1073787d8 Author: Matt Dew <matt@osource.org> Date: Thu Jul 8 14:42:32 2010 -0400 specs: replace troff source with docbook-xml source Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit bea0873caf50e9ed1b89255775d9ab912cbecd45 Author: Daniel Stone <daniel@fooishbar.org> Date: Thu Jul 8 16:49:51 2010 +0100 XStringToKeysym: Check strdup() return value Signed-off-by: Daniel Stone <daniel@fooishbar.org> Reviewed-by: Keith Packard <keithp@keithp.com> commit cffa71b4a5743e2b6675b9a917d15aef4177d513 Author: Marko Myllynen <myllynen@redhat.com> Date: Mon Jun 28 15:08:05 2010 +0300 Fix two typos in SFS 5966 Annex 3 X.Org bug#28792 <https://bugs.freedesktop.org/show_bug.cgi?id=28792> Signed-off-by: Julien Cristau <jcristau@debian.org> commit eb023c0f8919e809b8b609e1467b14d20a290aa7 Author: Daniel Stone <daniel@fooishbar.org> Date: Tue Jun 15 18:49:43 2010 +0100 Delete now-redundant XKeysymDB Since XStringToKeysym now supports all the vendor keysyms, just delete our XKeysymDB, which was incomplete at best, misleading at worst, and always an annoyance. Signed-off-by: Daniel Stone <daniel@fooishbar.org> Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 00175397480b76d32bf82b0c7c94c91a2a95954e Author: Daniel Stone <daniel@fooishbar.org> Date: Tue Jun 15 18:48:48 2010 +0100 makekeys: Scan vendor keysyms as well as core Since we can't really live without vendor keysyms, scan them all in to generate ks_tables.h, rather than only doing the core ones, and leaving the vendor syms to be manually synchronised with XKeysymDB. Signed-off-by: Daniel Stone <daniel@fooishbar.org> Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit ebd6ef0a4db0ddef0ae17ad14571518ccdeea5ba Author: Daniel Stone <daniel@fooishbar.org> Date: Tue Jun 15 18:47:37 2010 +0100 XStringToKeysym: Special case for XF86 keysyms Some XFree86 keysyms were in XKeysymDB as XF86_foo, despite really being XF86foo. So, if we get to the bottom of XStringToKeysym and haven't found our XF86_foo, try it again as XF86foo. Signed-off-by: Daniel Stone <daniel@fooishbar.org> Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 8c2ffce9e5c6eef8a04f7e2732db46b3b62e13bb Author: Daniel Stone <daniel@fooishbar.org> Date: Tue Jun 15 17:20:48 2010 +0100 configure.ac: Change from deprecated AC_DEFINE_DIR to AX_ AC_DEFINE_DIR is deprecated as it's squatting on the autoconf-builtin namespace, so start using the more proper AX_DEFINE_DIR instead. Signed-off-by: Daniel Stone <daniel@fooishbar.org> Reviewed-by: Gaetan Nadon <memsize@videotron.ca> Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 6de368c9aa7ccd2fcd62fca5a2b278913db4d03d Author: Fernando Carrijo <fcarrijo@yahoo.com.br> Date: Thu Jul 1 06:50:47 2010 -0300 Purge macros NEED_EVENTS and NEED_REPLIES Signed-off-by: Fernando Carrijo <fcarrijo@yahoo.com.br> Acked-by: Tiago Vignatti <tiago.vignatti@nokia.com> Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 0b724231be17f19538ee115a03b82b221b1f83c0 Author: Adam Jackson <ajax@redhat.com> Date: Wed Jun 30 16:30:49 2010 -0400 Use -version-number consistently instead of -version-info The latter is libtool braindamage. Signed-off-by: Adam Jackson <ajax@redhat.com> commit 241a990afcf9c967c587ad6fd245df21b68b1ad9 Author: Juliusz Chroboczek <jch@pps.jussieu.fr> Date: Tue Jun 29 18:32:42 2010 +0200 Make Compose-comma map to ogonek for I and U in UTF-8 locales. With the preceding patch, it makes the UTF-8 compose map consistent with the ISO 8859-4 and -13 maps. commit af55e582f485a668c2bf43129be972bc65f03c60 Author: Juliusz Chroboczek <jch@pps.jussieu.fr> Date: Tue Jun 29 18:20:18 2010 +0200 Make Compose-comma map to Ogonek for A and E in UTF-8 locales. This makes the UTF-8 compose file consistent with the ISO 8859-2 compose file as far as Polish is concerned. We only sacrifice one pair of characters, e-cedilla, which is not used in any language. commit d6ba13009fc9ef876a104b907ffef73c6e405d4b Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Thu Jun 24 13:13:11 2010 -0700 Define FILE_MAN_DIR_SUFFIX so XCompose shadow page has correct path Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 978c7238789037de917b9423ea9adfb006da1260 Author: Jamey Sharp <jamey@minilop.net> Date: Sat Jun 19 10:44:55 2010 -0700 poll_for_response: Really handle xcb_poll_for_reply getting a reply. Don't lose async replies. That's bad. `xlsfonts -l`, which uses XListFontsWithInfo, worked fine, because the _XReply path worked; that path waited for replies, rather than polling. However, XRecordProcessReplies, which does nothing but call XPending, relied on the event-handling path to process async replies, and that was busted. Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=28595 Signed-off-by: Jamey Sharp <jamey@minilop.net> commit ef67486c5a8aada24fd95b2991a3c4979f53805f Author: Jamey Sharp <jamey@minilop.net> Date: Mon Jun 21 13:34:15 2010 -0700 Revert "xcb_io.c: poll_for_response doesn't guarantee there's a pending request." This reverts commit 4a8b6528ff69f6feb8c0e119939b4ce6c088f29e, because as a matter of fact, if poll_for_response returns NULL when we know dpy->xcb->next_event is non-NULL, there *is* guaranteed to be a pending request. commit 301ec5b41e9d253a446db656e1789ac7345dc433 Author: Jamey Sharp <jamey@minilop.net> Date: Mon Jun 21 13:24:24 2010 -0700 Revert "poll_for_response: Really handle xcb_poll_for_reply getting a reply." This reverts commit c115095d7f2bc4f5a4fb26380e3698fefdad7611. We *do* need to check poll_for_event every time through the loop in poll_for_response, so the commit did too much. commit 4a8b6528ff69f6feb8c0e119939b4ce6c088f29e Author: Jamey Sharp <jamey@minilop.net> Date: Mon Jun 21 10:54:02 2010 -0700 xcb_io.c: poll_for_response doesn't guarantee there's a pending request. Fixes the second bug reported in: https://bugs.freedesktop.org/show_bug.cgi?id=28595 Signed-off-by: Jamey Sharp <jamey@minilop.net> commit c115095d7f2bc4f5a4fb26380e3698fefdad7611 Author: Jamey Sharp <jamey@minilop.net> Date: Sat Jun 19 10:44:55 2010 -0700 poll_for_response: Really handle xcb_poll_for_reply getting a reply. Don't lose async replies. That's bad. `xlsfonts -l`, which uses XListFontsWithInfo, worked fine, because the _XReply path worked; that path waited for replies, rather than polling. However, XRecordProcessReplies, which does nothing but call XPending, relied on the event-handling path to process async replies, and that was busted. Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=28595 Signed-off-by: Jamey Sharp <jamey@minilop.net> Signed-off-by: Josh Triplett <josh@joshtriplett.org> commit a25ae169862ab9b76daf259613b37c6b07bc2ef2 Author: Marko Myllynen <myllynen@redhat.com> Date: Sun Jun 13 19:23:05 2010 +0300 Implement SFS 5966 Annex 4 for Finland This patch adds Annex 4 of SFS 5966 for Finland and fixes two typos in Annex 3 (which were actually copied verbatim from the standard text). The implementation of the standard is now complete. X.Org bug#28498 <https://bugs.freedesktop.org/show_bug.cgi?id=28498> Signed-off-by: Julien Cristau <jcristau@debian.org> commit 47b04195d8a31c8f9e6dd804196162c6cfca3ac6 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Fri Jun 4 13:20:17 2010 -0700 LINEAR_RGB_InitSCCData: When malloc fails, don't try to free unallocated bits One of the malloc failure checks had a goto to the wrong spot in the list of cleanup free() calls to unwind at the end, and was freeing bits that hadn't been initialized/allocated yet, since they would be stored in the struct that just failed to be allocated. Error: Null pointer dereference (CWE 476) Read from pointer that could be constant 'NULL' at line 805 of /export/alanc/X.Org/sx86/lib/libX11/src/xcms/LRGB.c in function 'LINEAR_RGB_InitSCCData'. Pointer checked against constant 'NULL' at line 754 but does not protect the dereference. [ This bug was found by the Parfait bug checking tool. For more information see http://research.sun.com/projects/parfait ] Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit aebbf3623888119b43893b253195d93b613a6e1e Author: Josh Triplett <josh@joshtriplett.org> Date: Sun Jun 6 19:11:55 2010 -0700 Mark the rest of Xprivate.h as _X_HIDDEN. None of the functions in Xprivate.h should have any callers outside of Xlib, by definition. Signed-off-by: Josh Triplett <josh@joshtriplett.org> Suggested-by: Jamey Sharp <jamey@minilop.net> Reviewed-by: Jamey Sharp <jamey@minilop.net> commit abcd1b67c8135ad652833e5a60d818837c39fce1 Author: Julien Cristau <jcristau@debian.org> Date: Fri Jun 4 13:57:45 2010 +0200 Hide _XSeqSyncFunction Commit a6d974dc59f2722b36e2df9d4f07aeee4f83ce43 made _XSeqSyncFunction non-static, but we don't need to export it. Signed-off-by: Julien Cristau <jcristau@debian.org> Reviewed-by: Adam Jackson <ajax@redhat.com> Reviewed-by: Jamey Sharp <jamey@minilop.net> commit 15e5eaf62897b3179d1fbe457cb19f886f0449f8 Author: Josh Triplett <josh@joshtriplett.org> Date: Thu Jun 3 09:41:01 2010 -0700 Remove support for building without XCB And there was much rejoicing. Signed-off-by: Josh Triplett <josh@joshtriplett.org> Reviewed-by: Jamey Sharp <jamey@minilop.net> Consensus on #xorg-devel agrees with removing --without-xcb; in particular, acks from Adam Jackson, Daniel Stone, Kristian Høgsberg, Julien Cristau, and Rémi Cardona. commit fb19eb767a32fd4ff74021c51bc6f60eb8bdff74 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Thu Jun 3 15:21:40 2010 -0700 libX11 1.3.4 Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 8f3db40ca5108a919244f3fff7466d01a14b3ce2 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Thu Jun 3 13:08:17 2010 -0700 Workaround bug in groff flag processing that breaks distcheck At least with the groff 1.19.2 package I have installed, groff passes on the -I flags for the include path to grohtml, which if they come after the -P-I... flag we pass to grohtml to specify the image file name pattern cause it to override that flag and put the images in the wrong place, breaking "make distcheck" - changing the flag order works around this. Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit bdb31a1fb707cebccc9efbbf68cb55c10fa4ea3e Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Thu Jun 3 11:25:33 2010 -0700 Fix typo that made configure always report "none" for man page suffix Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 6bb7d2d21d6b58019fb37b724b59c9744f30b9ce Author: Paul Bender <pebender@gmail.com> Date: Thu Jun 3 11:20:26 2010 -0700 Bug 22591 - configure does not obey the --enable-*-transport options https://bugs.freedesktop.org/show_bug.cgi?id=22591 Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit d7f35946d673bb00f2768e025b6e1017422b2174 Author: Paul Bender <pebender@gmail.com> Date: Thu Jun 3 11:17:45 2010 -0700 Bug 22590 - libX11 1.2.1 has broken abstract namespace support https://bugs.freedesktop.org/show_bug.cgi?id=22590 Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit b2487d07f7b355f230a56e32c763acd08862735c Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Thu Jun 3 11:06:15 2010 -0700 Bug 22584 - libX11 does not cross compile Adaptation of patch submitted by Paul Bender in attachment 27301 to https://bugs.freedesktop.org/show_bug.cgi?id=22584 Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Mikhail Gusarov <dottedmag@dottedmag.net> Reviewed-by: Dan Nicholson <dbn.lists@gmail.com> commit 4378219ff8c1418418c70086085358b69d574e74 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Tue Jun 1 18:55:48 2010 -0700 Clarify requirements in XRestackWindows man page The required common parent window is not specified in the arguments, just implied as the parent of the first window in the list. Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit f09c5299a381e2729e800a0ac43f1c0e371f65f6 Author: Jeremy Huddleston <jeremyhu@apple.com> Date: Wed May 12 16:42:18 2010 -0700 xcb: Add TCP fallback If we fail to connect to a UNIX socket and the transport isn't specified, fallback on TCP. This matches behavior with the xtrans codepath and the Xlib spec. http://lists.x.org/archives/xorg-devel/2010-April/007915.html Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com> Reviewed-by: Jamey Sharp <jamey@minilop.net> commit fd82552d5c0ce1931f29006a0c36f5e03cf8577e Merge: aae2a4a 933aee1 Author: Jamey Sharp <jamey@minilop.net> Date: Mon May 10 16:51:24 2010 -0700 Merge branch 'xlib-xcb-thread-fixes' commit aae2a4a7aab26de3fa715d6ecd0a0e0926b37fc9 Author: Jeremy Huddleston <jeremyhu@apple.com> Date: Fri Apr 23 21:50:29 2010 -0700 Don't append the screen number when using a launchd socket ssh gets confused by this. XQuartz is the only DDX using this functionality, and it doesn't support different screens, so let's just not include this until most ssh know how to handle this. Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com> commit adcd0ec209abf832a769d52db660fb37eaad6e0c Author: Jeremy Huddleston <jeremyhu@apple.com> Date: Fri Apr 23 16:33:44 2010 -0700 Remove launchd logic from _XConnectXCB as it's handled in XCB Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com> commit d232b259c36fdde1f4179822809fec1480867dc5 Author: Jeremy Huddleston <jeremyhu@apple.com> Date: Tue Feb 2 17:01:28 2010 -0800 Fix various build warnings imLcIm.c: In function '_XimCachedFileName': imLcIm.c:361: warning: format '%03x' expects type 'unsigned int', but argument 8 has type 'long unsigned int' imLcIm.c:364: warning: format '%03x' expects type 'unsigned int', but argument 8 has type 'long unsigned int' imRm.c: In function '_XimDefaultArea': imRm.c:597: warning: cast from pointer to integer of different size imRm.c: In function '_XimDefaultColormap': imRm.c:626: warning: cast from pointer to integer of different size lcFile.c:224: warning: no previous prototype for 'xlocaledir' lcUTF8.c: In function 'iconv_cstombs': lcUTF8.c:1841: warning: assignment discards qualifiers from pointer target type lcUTF8.c:1869: warning: pointer targets in passing argument 1 of 'wctomb' differ in signedness lcUTF8.c:1873: warning: pointer targets in passing argument 1 of 'wctomb' differ in signedness lcUTF8.c: In function 'iconv_mbstocs': lcUTF8.c:1935: warning: pointer targets in passing argument 2 of 'mbtowc' differ in signedness lcUTF8.c: In function 'iconv_mbtocs': lcUTF8.c:2031: warning: pointer targets in passing argument 2 of 'mbtowc' differ in signedness lcUTF8.c: In function 'iconv_mbstostr': lcUTF8.c:2121: warning: pointer targets in passing argument 2 of 'mbtowc' differ in signedness lcUTF8.c: In function 'iconv_strtombs': lcUTF8.c:2180: warning: pointer targets in passing argument 1 of 'wctomb' differ in signedness lcUTF8.c: In function '_XlcAddGB18030LocaleConverters': lcUTF8.c:2367: warning: passing argument 5 of '_XlcSetConverter' from incompatible pointer type lcUTF8.c:2368: warning: passing argument 5 of '_XlcSetConverter' from incompatible pointer type lcUTF8.c:2373: warning: passing argument 5 of '_XlcSetConverter' from incompatible pointer type lcUTF8.c:2374: warning: passing argument 5 of '_XlcSetConverter' from incompatible pointer type lcUTF8.c:2375: warning: passing argument 5 of '_XlcSetConverter' from incompatible pointer type lcUTF8.c:2376: warning: passing argument 5 of '_XlcSetConverter' from incompatible pointer type lcUTF8.c:2377: warning: passing argument 5 of '_XlcSetConverter' from incompatible pointer type XlibInt.c: In function '_XGetHostname': XlibInt.c:3441: warning: implicit declaration of function 'gethostname' XlibInt.c:3441: warning: nested extern declaration of 'gethostname' ConnDis.c: In function '_XDisconnectDisplay': ConnDis.c:540: warning: old-style function definition ConnDis.c: In function '_XSendClientPrefix': ConnDis.c:554: warning: old-style function definition ConnDis.c: In function 'XSetAuthorization': ConnDis.c:677: warning: old-style function definition Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com> commit 3e11c73187acb2e2be9a812840bbbea947527ccb Author: Daniel Kahn Gillmor <dkg@fifthhorseman.net> Date: Fri Apr 23 00:01:54 2010 +0200 Allow X11 users to compose anarchism I can easily compose the hammer and sickle (the symbol representative of communism) by pressing the key sequence: <Compose> <C> <C> <C> <P> -> ☭ But i can't easily make the circled A (the symbol representative of anarchism). I'd like to be able to use <Compose> <O> <A> (this is a currently unused key sequence) to generate the symbol: Ⓐ Debian bug#555938 <http://bugs.debian.org/555938> Signed-off-by: Julien Cristau <jcristau@debian.org> commit 933aee1d5c53b0cc7d608011a29188b594c8d70b Author: Jamey Sharp <jamey@minilop.net> Date: Fri Apr 16 20:18:28 2010 -0700 Fix Xlib/XCB for multi-threaded applications (with caveats). Rather than trying to group all response processing in one monolithic process_responses function, let _XEventsQueued, _XReadEvents, and _XReply each do their own thing with a minimum of code that can all be reasoned about independently. Tested with `ico -threads 20`, which seems to be able to make many icosahedrons dance at once quite nicely now. Caveats: - Anything that was not thread-safe in Xlib before XCB probably still isn't. XListFontsWithInfo, for instance. - If one thread is waiting for events and another thread tries to read a reply, both will hang until an event arrives. Previously, if this happened it might work sometimes, but otherwise would trigger either an assertion failure or a permanent hang. - Versions of libxcb up to and including 1.6 have a bug that can cause xcb_wait_for_event or xcb_wait_for_reply to hang if they run concurrently with xcb_writev or other writers. So you'll want that fix as well. Signed-off-by: Jamey Sharp <jamey@minilop.net> Reviewed-by: Josh Triplett <josh@freedesktop.org> commit aab43278ae619eb57d2dd9c7396f460f078588fc Author: Jamey Sharp <jamey@minilop.net> Date: Fri Apr 16 22:24:16 2010 -0700 Use InternalLockDisplay on code paths called from LockDisplay. It's easier to reason about the code when we can't re-enter the Xlib-private sync-handlers while they're already running. Signed-off-by: Jamey Sharp <jamey@minilop.net> Reviewed-by: Josh Triplett <josh@freedesktop.org> commit 660b7d05f4ca4ab4661c9fe7ce655a4909b4e556 Author: Jamey Sharp <jamey@minilop.net> Date: Fri Apr 16 19:45:11 2010 -0700 Fix _XSend to enqueue the right range of pending requests. _XSend was off-by-one on both ends. It should not re-enqueue the last request that was already flushed, but it should enqueue the last request currently being flushed. Signed-off-by: Jamey Sharp <jamey@minilop.net> Reviewed-by: Josh Triplett <josh@freedesktop.org> commit f2735889908d6e5a7f8dbee42f00c54a52665191 Author: Jamey Sharp <jamey@minilop.net> Date: Fri Apr 16 19:45:11 2010 -0700 Pending requests are always added in-order. Replace insert_pending_request, which did an in-order search of the queue to find the right insertion point, with a simpler append_pending_request, and use that in _XSend as well. Includes assertions to check that the list of pending requests is in order by sequence number and does not have duplicates. Signed-off-by: Jamey Sharp <jamey@minilop.net> Reviewed-by: Josh Triplett <josh@freedesktop.org> commit d9cf5885b0f97942fbbd2a7cc50118132ece50f6 Author: Markus Duft <markus.duft@salomon.at> Date: Fri Apr 16 08:39:34 2010 -0700 Bug 26839: Fix build problem on Interix (POSIX layer on Windows) https://bugs.freedesktop.org/show_bug.cgi?id=26839 Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit a3f5f1b90936d23e9894e3261b2d77fb7b32a51a Author: Josh Triplett <josh@freedesktop.org> Date: Thu Apr 15 14:24:21 2010 -0700 Stop returning an int from _XIDHandler and _XSeqSyncFunction _XIDHandler and _XSeqSyncFunction originally ran from dpy->synchandler, and thus had to return an int. Now, they only run from _XPrivSyncHandler or LockDisplay, neither of which needs to check their return value since they always returned 0. Make them both void. Signed-off-by: Josh Triplett <josh@freedesktop.org> Signed-off-by: Jamey Sharp <jamey@minilop.net> commit a6d974dc59f2722b36e2df9d4f07aeee4f83ce43 Author: Jamey Sharp <jamey@minilop.net> Date: Thu Apr 15 13:05:08 2010 -0700 Move XID and sync handling from SyncHandle to LockDisplay to fix races. XID and sync handling happened via _XPrivSyncHandler, assigned to dpy->synchandler and called from SyncHandle. _XPrivSyncHandler thus ran without the Display lock, so manipulating the Display caused races, and these races led to assertions in multithreaded code (demonstrated via ico). In the XTHREADS case, after you've called XInitThreads, we can hook LockDisplay and UnlockDisplay. Use that to run _XIDHandler and _XSeqSyncHandler from LockDisplay rather than SyncHandle; we then know that we hold the lock, and thus we can avoid races. We think it makes sense to do these both from LockDisplay rather than UnlockDisplay, so that you know you have valid sync and a valid XID before you start setting up the request you locked to prepare. In the !XTHREADS case, or if you haven't called XInitThreads, you don't get to use Xlib from multiple threads, so we can use the logic we have now (with synchandler and savedsynchandler) without any concern about races. This approach gets a bit exciting when the XID and sequence sync handlers drop and re-acquire the Display lock. Reacquisition will re-run the handlers, but they return immediately unless they have work to do, so they can't recurse more than once. In the worst case, if both of them have work to do, we can nest the Display lock three deep. In the case of the _XIDHandler, we drop the lock to call xcb_generate_id, which takes the socket back if it needs to request more XIDs, and taking the socket back will reacquire the lock; we take care to avoid letting _XIDHandler run again and re-enter XCB from the return_socket callback (which causes Very Bad Things, and is Not Allowed). Tested with ico (with 1 and 20 threads), and with several test programs for XID and sequence sync. Tested with and without XInitThreads(), and with and without XCB. Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=23192 Signed-off-by: Jamey Sharp <jamey@minilop.net> Signed-off-by: Josh Triplett <josh@freedesktop.org> commit b089b53b697c2851db2985d32af3b29f1da5e31e Author: Jamey Sharp <jamey@minilop.net> Date: Wed Apr 14 12:59:11 2010 -0700 Honest. Extensions get to filter async errors too. Under some circumstances, errors are picked up by calling xcb_poll_for_reply, rather than xcb_poll_for_event, because Xlib issued the requests with the XCB_REQUEST_CHECKED flag. That happens when either an async handler is queued at the time the requests are flushed, or when XSetEventQueueOwner has been used to prevent Xlib from processing XCB's event queue. This bugfix extends 405132dab64bf2375f8e57d02b1b53da2311933a to cover those cases. Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=26545 Signed-off-by: Jamey Sharp <jamey@minilop.net> commit a15c31274650e391bc6de5d0951eb4464c228139 Author: Jamey Sharp <jamey@minilop.net> Date: Wed Apr 14 12:10:34 2010 -0700 _XError already runs async handlers; only call them directly for replies. The previous behavior probably would have triggered bug reports someday. Signed-off-by: Jamey Sharp <jamey@minilop.net> commit 405132dab64bf2375f8e57d02b1b53da2311933a Author: Jamey Sharp <jamey@minilop.net> Date: Tue Apr 13 12:12:36 2010 -0700 Extensions get to filter async errors too. Apparently I misread XlibInt.c:_XReply and thought that handlers set with XESetError should be consulted only for the sequence number that _XReply is currently looking for. In fact, the error handlers are also consulted when an error arrives for a request that was not expected to have a reply. However, in an odd twist, the error handlers are *not* consulted outside of _XReply--that is, when looking for events, or waiting to be able to flush the output queue. So this patch takes some small pains to preserve that behavior, though it seems likely to have been unintentional. Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=26545 Signed-off-by: Jamey Sharp <jamey@minilop.net> commit d3eab4a38f3e53ef21eb3b6fa66ead7afecf6227 Author: Jamey Sharp <jamey@minilop.net> Date: Tue Apr 13 12:49:59 2010 -0700 Prefer the xcb_generic_error_t we already have over casting to xEvent. Just a minor cleanup. Signed-off-by: Jamey Sharp <jamey@minilop.net> commit 75ea8c37935ccc911557d16a303ba595b8ab106b Author: Jamey Sharp <jamey@minilop.net> Date: Mon Apr 12 11:30:20 2010 -0700 Run the user's synchandler as well as any internal synchandlers. Fixes https://bugs.freedesktop.org/show_bug.cgi?id=27595 Signed-off-by: Jamey Sharp <jamey@minilop.net> commit c3f3e4a9e531d010312c97e753d6e543e607094d Author: Kusanagi Kouichi <slash@ac.auone-net.jp> Date: Fri Feb 12 17:16:10 2010 +0900 Fix manual typos. Signed-off-by: Kusanagi Kouichi <slash@ac.auone-net.jp> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 75c6c5595408caba9ef8233839d77021d02f86f2 Author: Dirk Wallenstein <dirkwallenstein@t-online.de> Date: Fri Feb 5 20:42:46 2010 +0100 man: Correct the XkbAllAccessXEventsMask mask name This mask has probably been renamed but not been updated in the manuals. Signed-off-by: Dirk Wallenstein <dirkwallenstein@t-online.de> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 9262aceaff24c954cab8c252690032bc2ec25e7d Author: Dirk Wallenstein <dirkwallenstein@t-online.de> Date: Fri Feb 5 20:42:45 2010 +0100 man: Add missing geometry component flag Signed-off-by: Dirk Wallenstein <dirkwallenstein@t-online.de> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 50cf134465f6fd263f37acecac94518468ef1c6d Author: Dirk Wallenstein <halsmit@t-online.de> Date: Tue Feb 2 21:24:32 2010 +0100 man: Return value of XkbGetState is Status and not Bool Signed-off-by: Dirk Wallenstein <halsmit@t-online.de> Reviewed-by: Julien Cristau <jcristau@debian.org> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 7a93ae2bb5292a97fdd27ed818bc81248b37f641 Author: Dirk Wallenstein <halsmit@t-online.de> Date: Tue Feb 2 21:24:30 2010 +0100 man: Fix return value specification of XkbKeyActionEntry The XkbKeyActionEntry macro expands to a pointer. Signed-off-by: Dirk Wallenstein <halsmit@t-online.de> Reviewed-by: Julien Cristau <jcristau@debian.org> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit e9884d4a05a5661ec343ea8a2aa0562b6419e086 Author: Dirk Wallenstein <halsmit@t-online.de> Date: Tue Feb 2 21:24:29 2010 +0100 man: Redirect users from XKeycodeToKeysym to XkbKeycodeToKeysym #25732 XKeycodeToKeysym keeps compatibility with pre-XKB and thus only sees 2 groups with 2 levels each. It wraps the index into the next group. This behavior confuses the unaware user, and therefore this will add a reference to XkbKeycodeToKeysym in the corresponding man paragraph. Another bug had that issue, too. #5349 Signed-off-by: Dirk Wallenstein <halsmit@t-online.de> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 6474cdf97cd648afaeaa872155f3fa21cfb43f80 Author: Alan Coopersmith <alan.coopersmith@oracle.com> Date: Thu Apr 8 19:59:55 2010 -0700 Fix typo in new fi_FI.UTF-8 that was reported by "make check" Unrecognized pattern in Compose on line #154: <dead_diaeresis> <space> " "¨" Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> commit 91bd5e7af2d3a9526aefb73dc10f417896f0e4dd Author: Marko Myllynen <myllynen@redhat.com> Date: Thu Apr 8 19:52:42 2010 -0700 Bug 27465 - Rewritten fi_FI.UTF-8 Compose file I've rewritten the fi_FI.UTF-8 Compose file so that it - includes en_US.UTF-8/Compose for base compose definitions (and thus gets any possible additions to en_US.UTF-8/Compose automatically included) - overrides any en_US.UTF-8/Compose definitions with fi_FI.UTF-8/Compose definitions (thus making it safe to include en_US.UTF-8/Compose) - lists all the definitions specified in the SFS 5966 standard (thus making it easy to verify that the implementation is valid and complete) - adds a header about the file itself as required by the standard The rewritten version is ~320 lines compared to over 5000 lines of the previous version. https://bugs.freedesktop.org/show_bug.cgi?id=27465 commit f6a4fd0c7615684d08e848245849dea4017a5214 Author: Gaetan Nadon <memsize@videotron.ca> Date: Thu Apr 1 21:46:12 2010 -0400 config: update and relocate AC_DEFINE_DIR macro Remove deprecated acinclude.m4 macro container file Use separate macro files as per autoconf recommendation Use the latest macro from GNU (ax) which replaces the non-gnu version (ac) This preserves the Autoconf macro AC namespace. Also moved out of acinclude.m4 is the DOLT macro Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 61d5231db418cec51bd718633c3bba39b18689d6 Author: Gaetan Nadon <memsize@videotron.ca> Date: Mon Mar 29 14:53:48 2010 -0400 config: remove the pkgconfig pc.in file from EXTRA_DIST Automake always includes it in the tarball. Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 69fc76a0321c6b25cc4286173c53435c69ab8e0e Author: Fernando Carrijo <fcarrijo@yahoo.com.br> Date: Wed Mar 17 23:53:16 2010 -0300 No need for req->firstKeyCode to be set twice. There is no reason to set req->firstKeyCode twice when a client, wishful for changing keyboard mappings, calls XChangeKeyboardMapping. This patch fixes the mistake by making no functional changes to libX11 whatsoever. Signed-off-by: Fernando Carrijo <fcarrijo@yahoo.com.br> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> commit b5797597f83ee62228abfb88f026ef92163e07a5 Author: Gaetan Nadon <memsize@videotron.ca> Date: Tue Feb 16 10:37:21 2010 -0500 config: move CWARNFLAGS from configure.ac to Makefile.am Compiler warning flags should be explicitly set in the makefile rather than being merged with other packages compiler flags. Reviewed-by: Dan Nicholson <dbn.lists@gmail.com> Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 052c4d7995b0e52a038933beb85cd544571c6b7e Author: Gaetan Nadon <memsize@videotron.ca> Date: Tue Feb 16 14:28:21 2010 -0500 specs: change install cmd due to automake 1.11 specData_INSTALL is defined in 1.9 and 1.10 but not 1.11 Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 7277a18cda9f5a6807d11cf4ceb9449b1c302c18 Author: Gaetan Nadon <memsize@videotron.ca> Date: Tue Feb 9 17:27:08 2010 -0500 doc: use $(mkdir_p) rather than $(MKDIR_P) due to automake 1.9.6 $(MKDIR_P) is not defined in automake 1.9. Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit e66eda95b520727969d721416d4ea49b54ef2b03 Author: Gaetan Nadon <memsize@videotron.ca> Date: Tue Feb 2 16:29:26 2010 -0500 specs: install html images in $docdir with html files The images required by the html files have been omitted. Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 137d1ff6be99d040e77c8c4c52029c5bdf1f4808 Author: Gaetan Nadon <memsize@videotron.ca> Date: Sun Jan 31 14:16:20 2010 -0500 doc: use new macros to control doc generation Namely XORG_WITH_GROFF for the groff generation tool XORG_WITH_PS2PDF for the conversion of PS docs to PDF XORG_ENABLE_SPECS for the generation of specs Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit 9ca583c5d6fcf9cd8151ee7b019630b141d32fab Author: Gaetan Nadon <memsize@videotron.ca> Date: Tue Jan 26 19:41:08 2010 -0500 doc: clean-up generated html images Generate images in /images as is the convention Provide a base file name for images rather than process ID Remove images directory when running make clean Signed-off-by: Gaetan Nadon <memsize@videotron.ca> commit eb289b34bfc9978eef724e0f268975938334c06c Author: Kristian Høgsberg <krh@bitplanet.net> Date: Thu Jan 21 13:39:17 2010 -0500 XErrorDB: Add new DRI2 request names commit 6babf2123d05adb9349394c49cc2d81d1f66cf9e Author: Julien Cristau <jcristau@debian.org> Date: Sat Jan 16 22:47:03 2010 +0000 man: Fix typo in Makefile Missing line continuation was preventing the XCompose alias from being generated. Signed-off-by: Julien Cristau <jcristau@debian.org> Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 68530599e61cf9fef3fcc91650e7cef21837fce7 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Sat Jan 16 11:41:32 2010 -0800 libX11 1.3.3 Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 1e5af224b9fbdb154620f898558704f2bc4bf4e9 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Thu Jan 14 18:33:39 2010 -0800 Update COPYING file with actual licenses from libX11 code & docs COPYING was previously a years out-of-date copy of the LICENSES doc summarizing all licenses for all XFree86 components, many of which did not apply to libX11. Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit ddb1786720d6136b1b28be599c75c10ad1b76a2a Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Thu Jan 14 17:38:26 2010 -0800 Purge CVS/RCS id tags Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit c1db9ddcfa7091f173478dca45bf720badedfca4 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Thu Jan 14 15:39:14 2010 -0800 Update Sun license notices to current X.Org standard form Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 1aaa7c0358c5c035b99625f5715cb722bc2d2a2f Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Thu Jan 14 08:28:22 2010 -0800 Add %S substitutions to Compose man page Commit 9df349a7894725f9469b106af645f57f7f3f9af3 added support for %S in Compose file include statements - this documents it in the Compose file man page. Also changes the existing substitution documentation to list format instead of a paragraph format to allow easier adding of %S. Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 94b45db93058cffa25598fe27dd3e385ace9d305 Author: Richard Purdie <rpurdie@linux.intel.com> Date: Thu Jan 14 08:04:28 2010 -0800 Fix configure.ac PKG_ macro calls If the first call to PKG_CHECK_MODULES() may not be called during execution which is the case here since its inside a case statement, call PKG_PROG_PKG_CONFIG() to ensure things worked correctly. Fixes a configure failure introduced by commit 87529c039050ce3336ff9ce00f1b5a21d15690da when xcb is enabled. http://bugs.freedesktop.org/show_bug.cgi?id=26041 Signed-off-by: Richard Purdie <rpurdie@linux.intel.com> Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit df559d8bc2238a2c369152fcb06e5b5ab132a5dc Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Tue Jan 12 09:18:15 2010 -0800 Raise xorg-macros requirement to 1.4 Needed since the changes in 464390f16d7ed4aa5bf80f89863ba92273075ec2 depend on the INSTALL file delivered in xorg-macros 1.4 Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 9df349a7894725f9469b106af645f57f7f3f9af3 Author: James Cloos <cloos@jhcloos.com> Date: Wed Jan 13 11:04:38 2010 -0500 Allow inclusion of system level compose files. With the release of XFree86 4.4 an inclusion system of compose files was added to Xlib to allow inclusion of the default compose file (with %L), any compose files from user’s home directory (with %H), or a compose file with a hard coded path¹. However, even today including system level compose files is not possible in a platform independent manner although the machinery for including compose files and overriding previously defined compositions is already in place. With the ability to include system level compose files one could greatly reduce the need for compose file rule duplication and the work needed to propagate changes in one compose file to others. For example, currently the Finnish compose file fi_FI.UTF-8 weights over 5000 lines² but it is almost identical with en_US.UTF-8 except for perhaps half a dozen compositions. This commit allows one to include system level compose files with the following kind of syntax: include "%S/en_US.UTF-8/Compose" 1] http://www.xfree86.org/4.4.0/RELNOTES5.html#42 2] http://cgit.freedesktop.org/xorg/lib/libX11/tree/nls/fi_FI.UTF-8/Compose.pre Signed-off-by: Marko Myllynen <myllynen@redhat.com> Signed-off-by: James Cloos <cloos@jhcloos.com> commit ccf21a8877f40136e25f2f62d0668b0c76b3cfbd Author: Thien-Thi Nguyen <ttn@gnuvola.org> Date: Tue Dec 1 10:31:47 2009 +0100 libX11: Fix comment: Invert polarity (direction) of reformat description. Signed-off-by: Thien-Thi Nguyen <ttn@gnuvola.org> Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 4d4676c0d6324d2ff9d00d15ab485fa5d848a369 Author: Osamu Sayama <osamu.sayama@sun.com> Date: Tue Jan 5 17:26:40 2010 -0800 set_fontset_extents crash after get_rotate_fontname fix in 2bef065b70f7 - In set_fontset_extents, check font_data is not NULL before running loop that may increment it to a non-NULL invalid pointer. - Make sure get_rotate_fontname counts the final field Fixes OpenSolaris bug 6913809: X application dumps core in ja_JP.UTF-8 locale <http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6913809> Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> Reviewed-by: Adam Jackson <ajax@redhat.com> commit 87529c039050ce3336ff9ce00f1b5a21d15690da Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Tue Jan 5 18:02:37 2010 -0800 Merge X11, XKBPROTO, & XPROTO pkg-config lists Since the XPROTO_CFLAGS & XKBPROTO_CFLAGS are just merged into X11_CFLAGS in configure.ac anyway, might as well combine the lists passed to PKG_CHECK_MODULES to reduce duplication in the flags. Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> Reviewed-by: Rémi Cardona <remi@gentoo.org> Acked-by: Peter Hutterer <peter.hutterer@who-t.net> commit 2dd053667b44c55e2bf601aec7b75fc6fee1cf44 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Tue Jan 5 17:56:58 2010 -0800 Add XCompose man page shadow for Compose man page Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 02543bba816e065c02cd36e0c9e21519a9ee9c96 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Tue Jan 5 17:47:44 2010 -0800 Add $(AM_V_GEN) to silence lint rules too Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit db7c6fdeeaef9475458498e4cf09d6b1329e9aa3 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Tue Jan 5 17:42:42 2010 -0800 Remove GCC_WARNINGS now that XORG_CWARNFLAGS sets them for us Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 6b4e526e7ba105622f6b143e8e2639b44cb6cc19 Author: Gaetan Nadon <memsize@videotron.ca> Date: Sun Nov 29 10:44:24 2009 -0500 configure.ac: restore correct order for XORG_DEFAULT_OPTIONS It must be following AC_USE_SYSTEM_EXTENSION commit 3dbaa11d1c8705e1b309c6686f354766b651ad20 Author: Gaetan Nadon <memsize@videotron.ca> Date: Sun Nov 29 10:01:44 2009 -0500 Add .gitignore in /specs for generated files Being in /specs, it will apply for all 3 subdirs commit f45d39d37aab04742e44cd8c3c993aad7587e40c Author: Gaetan Nadon <memsize@videotron.ca> Date: Fri Nov 27 20:56:03 2009 -0500 Makefile.am: add ChangeLog and INSTALL on MAINTAINERCLEANFILES Now that the INSTALL file is generated. Allows running make maintainer-clean. commit 464390f16d7ed4aa5bf80f89863ba92273075ec2 Author: Gaetan Nadon <memsize@videotron.ca> Date: Wed Oct 28 14:09:10 2009 -0400 INSTALL, NEWS, README or AUTHORS files are missing/incorrect #24206 Add missing INSTALL file. Use standard GNU file on building tarball README may have been updated Remove AUTHORS file as it is empty and no content available yet. Remove NEWS file as it is empty and no content available yet. commit 6360e7f0ce6a75da2bed33ede7fea783a1fb80e1 Author: Gaetan Nadon <memsize@videotron.ca> Date: Tue Oct 27 15:07:25 2009 -0400 Deploy the new XORG_DEFAULT_OPTIONS #24242 This macro aggregate a number of existing macros that sets commmon X.Org components configuration options. It shields the configuration file from future changes. commit d02f943c98fde2f14319bc57fd9ad77eb9a2a572 Author: Gaetan Nadon <memsize@videotron.ca> Date: Mon Oct 26 22:08:42 2009 -0400 Makefile.am: ChangeLog not required: EXTRA_DIST or *CLEANFILES #24432 ChangeLog filename is known to Automake and requires no further coding in the makefile. commit f77c89c751a6a63c8ef11ecdddca2aed11ff6e29 Author: Gaetan Nadon <memsize@videotron.ca> Date: Thu Oct 22 12:34:19 2009 -0400 .gitignore: use common defaults with custom section # 24239 Using common defaults will reduce errors and maintenance. Only the very small or inexistent custom section need periodic maintenance when the structure of the component changes. Do not edit defaults. commit 46c7b0e9d0d85cf5ccc0d40d19821fcc3335503b Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Thu Nov 12 23:05:40 2009 -0800 Add compose-check.pl to EXTRA_DIST Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 54c64267cc8bc98641cc39a22cb7bd71673e89e0 Author: Julien Cristau <jcristau@debian.org> Date: Thu Oct 29 17:17:24 2009 +0100 man: fix XCopyGC argument order Ubuntu bug#408337 commit aad10032651cdc2a53b359035954454a28d6db67 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Fri Oct 23 13:55:14 2009 -0700 libX11 1.3.2 Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 6303ada89cb228c0f9656036f798703afb42fc29 Author: Peter Hutterer <peter.hutterer@who-t.net> Date: Wed Oct 21 12:42:07 2009 +1000 Add smiley faces to compose sequences. I wonder how we could have lasted that long without them. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Acked-by: Daniel Stone <daniel@fooishbar.org> Acked-By: James Cloos <cloos@jhcloos.com> commit 0e104ebd8628803c27e36b16922ad1edd891325a Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Thu Oct 22 23:12:30 2009 -0700 Add man page for Compose file format Based on grammar description in modules/im/ximcp/imLcPrs.c and note on XFree86 changes formerly found in xorg-docs RELNOTES.sgml Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 9c95f2af7c442b3a59b1a30cf804f1ef4e7fc5b5 Author: Jeremy Huddleston <jeremyhu@freedesktop.org> Date: Tue Oct 20 12:46:03 2009 -0700 Add extra configuration and sanity checks for groff and ps2pdf 1) Add AC_ARG_VAR for GROFF and PS2PDF to inform users of these environment variables. 2) Check that groff -ms works Some distributions ship the ms macros as a separate package which may not be installed together with groff, so we need to make sure that groff works and the required macros are actually installed before attempting to build the specs. Signed-off-by: Jeremy Huddleston <jeremyhu@freedesktop.org> Signed-off-by: Dan Nicholson <dbn.lists@gmail.com> Signed-off-by: Yaakov Selkowitz <yselkowitz@users.sourceforge.net> commit d3f801fd2f9198eaad6797414dba652f9c006c6d Author: Yaakov Selkowitz <yselkowitz@users.sourceforge.net> Date: Sun Oct 18 17:34:53 2009 -0500 Fix VPATH build of libX11 specs Signed-off-by: Yaakov Selkowitz <yselkowitz@users.sourceforge.net> commit ad15e1a89d30ccc11d80745897b83def1448e8c0 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Sat Oct 17 16:14:34 2009 -0700 libX11 1.3.1 Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 0cbf98c17a7484bb58b2464b98d63bb3b4ea2594 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Sat Oct 17 16:28:25 2009 -0700 Fix make distcheck Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 082e62ad268ef16a3bebc5a3c9fa008dbdc483ed Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Fri Oct 16 19:25:35 2009 -0700 Use $(AM_V_GEN) to silence echo commands for generating shadow man pages Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 4e66da0783b2e5e3b288aaecd3c89396ed425c20 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Wed Oct 14 16:18:24 2009 -0700 Move libX11 & XIM/locale specs from xorg-docs If groff is found, and --disable-specs is not passed to configure, specs will be converted to text, html and ps (or pdf if ps2pdf is found) and installed to $(docdir) Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 5d3d817a42ddcc8d0c6efd33efd1442fe14f5c6b Author: Yaakov Selkowitz <yselkowitz@users.sourceforge.net> Date: Tue Oct 13 19:15:51 2009 -0500 Provide _Xsetlocale compat wrappers on Cygwin Previous versions of Cygwin did not have proper locale support, so Cygwin/X defined X_LOCALE, using _Xsetlocale instead. Cygwin 1.7 has added locale support, but we can't remove the _Xsetlocale entry point without breaking ABI. Signed-off-by: Yaakov Selkowitz <yselkowitz@users.sourceforge.net> commit 2c8b3a877a713bb66a6316a7051b43c46af6e1a0 Author: Yaakov Selkowitz <yselkowitz@users.sourceforge.net> Date: Tue Oct 13 19:15:49 2009 -0500 dolt: add Cygwin to supported platforms Signed-off-by: Yaakov Selkowitz <yselkowitz@users.sourceforge.net> commit a2c8e3e34b15b57ff881a52101fc961a602f35e4 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Wed Oct 14 13:23:30 2009 -0700 Recognize XSUNBUFFERSIZE alias for XLIBBUFFERSIZE on Solaris Also fix indenting of the XLIBBUFFERSIZE code to match surrounding code Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 34ddfca7b7d58240b0fe74bec6b2e0652d15c051 Author: Jon TURNEY <jon.turney@dronecode.org.uk> Date: Tue Feb 10 17:47:25 2009 +0000 Include sys/select.h for select() and struct timeval, if it exists This is a cygwin build fix commit 383165916ddac91740d4c780174d4c0d07cdb994 Author: Xake <xake@rymdraket.net> Date: Sun Sep 27 11:16:36 2009 +0200 Use AM_V_GEN instead of customized macros for AM_SILENT_RULES Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 854269d55cdda8caf425515bfed2855e211a5ada Author: Julien Cristau <jcristau@debian.org> Date: Tue Oct 6 16:11:24 2009 +0200 configure: quote argument to m4_pattern_forbid Without this, configure spits out ../configure: line 12364: ac_fn_c_check_member: command not found ../configure: line 12378: ac_fn_c_check_type: command not found Also anchor the pattern to make it stricter. Signed-off-by: Julien Cristau <jcristau@debian.org> commit 3bb020587ce74e0737ec7aceb20041f1e77d3b87 Author: Jeremy Huddleston <jeremyhu@freedesktop.org> Date: Thu Oct 1 22:20:38 2009 -0700 Split CFLAGS into CPPFLAGS and CFLAGS On some build systems, CPPFLAGS is set to "-I/some/prefix/include". If older X11 headers are in /some/prefix/include, they will be preferred over the shipped headers. This corrects that problem. commit d54caf1c9c55af8247621b7ba6afb20b23699839 Author: Peter Hutterer <peter.hutterer@who-t.net> Date: Fri Oct 2 10:59:08 2009 +1000 libX11 1.3 Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> commit dd201bcf9e7f8863b7ef32273a5ef021678133c1 Author: Peter Hutterer <peter.hutterer@who-t.net> Date: Fri Oct 2 12:10:29 2009 +1000 nls: remove duplicate Compose sequences from pt_BR.UTF-8 Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> commit a293ae9e83739067fc92db1a39c262857bc2283e Author: Peter Hutterer <peter.hutterer@who-t.net> Date: Fri Sep 25 11:19:41 2009 +1000 Add XF86TouchpadToggle to XKeysymDB Lenovo laptops provide a key to enable or disable the touchpad and the trackstick. This key is usually located on Fn + F8. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Acked-by: Adam Jackson <ajax@redhat.com> commit 69839f8903a24eab08f17a781b3797fb64dce9cf Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Sun Sep 27 10:34:16 2009 -0700 Bug 24173: libX11 from git fails to build with automake older then 1.11 AM_CONDITIONAL must come *before* the AC_OUTPUT that creates the Makefiles, instead of after. <http://bugs.freedesktop.org/show_bug.cgi?id=24173> Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit f5effd041f58ef07703cca2b4f396758811e1eec Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Wed Apr 15 10:59:23 2009 -0700 Resolve conflicting Compose sequences in iso8859-2, el_GR.UTF-8 & pt_BR.UTF-8 Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 3843778358d3a0cd6a2d07dba5dd061248053ac9 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Wed Apr 15 10:56:09 2009 -0700 Add perl script to check for duplicate or conflicting compose file entries Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 19cc5e1fa17a285045662820a8b4de2a0f9a194d Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Fri Sep 18 17:10:04 2009 -0700 Use make rules instead of shell for loops to generate shadow man pages Allows parallel make and simpler build logs/error reporting Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 7dabcac973d0b6692a3cd62bd6d8e0467b24200b Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Fri Sep 18 16:58:53 2009 -0700 Add AM_SILENT_RULES support for cpp rules for man & nls files Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit bfa19cddd8546b4930a773f3bbd81137c362d82b Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Fri Sep 18 16:58:16 2009 -0700 Update to using xorg-macros 1.3 & XORG_DEFAULT_OPTIONS Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 51396066c8003a96a6399c9a4bed2a81e512b582 Author: Mikko Niskanen <mikko.niskanen@iki.fi> Date: Fri Sep 4 10:11:15 2009 +1000 Fix wrong typedef on HP-UX (#18998) shl_dt doesn't exist, the type is shl_t. X.Org Bug 18998 <http://bugs.freedesktop.org/show_bug.cgi?id=18998> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> commit 615220a312b9430a580fe6dcf51703c6ef244f66 Author: Paul Bender <pebender@gmail.com> Date: Fri Sep 4 09:57:10 2009 +1000 Don't require xdmcp in configure.ac (#22583) X.Org Bug 22583 <http://bugs.freedesktop.org/show_bug.cgi?id=22583> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> commit 20f9ecd86ad2a9ac6966f7eee32234cb5ef77c29 Author: Peter Hutterer <peter.hutterer@who-t.net> Date: Thu Sep 3 14:02:44 2009 +1000 man: fix parameters to XkbAllocGeomOverlay{Rows|Keys} (#23499) X.Org Bug 23499 <http://bugs.freedesktop.org/show_bug.cgi?id=23499> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> commit c2814a614dc4d9409bfa0f44c18bfd69ad7f7b85 Author: Peter Hutterer <peter.hutterer@who-t.net> Date: Thu Sep 3 12:05:25 2009 +1000 man: XQueryTree may return BadWindow. (#23416) X.Org Bug 23416 <http://bugs.freedesktop.org/show_bug.cgi?id=XXX> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> commit dbe98d456ccc6eeca9fa3e241a3db0a4d83c5a65 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Fri Aug 28 23:07:58 2009 +0800 Fix version tag in .TH line of several XKB man pages Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit bf24400936c10af6f5aa0c75cfe2207ab9b680b4 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Fri Aug 28 23:04:38 2009 +0800 XkbSetDeviceButtonActions.man: remove non-existent actions argument Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 53affa9335116f2d367f041e6502a411d4619e47 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Fri Aug 28 23:00:17 2009 +0800 XkbQueryExtension.man: Arguments should be pointers Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 6233948885acc5873a5abddfff235afec555f3c2 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Fri Aug 28 22:53:03 2009 +0800 XkbSAActionSetCtrls.man: Fix typo in formatting macro Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 28a9ca57cdec4aa9ca92322f963b01f0c2daf47a Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Fri Aug 28 22:49:31 2009 +0800 Convert Xkb API man pages to ANSI prototypes Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit fa2eecca85baab9616f7143cc1a853a594b4a90c Author: James Cloos <cloos@jhcloos.com> Date: Mon Aug 24 06:35:17 2009 -0400 Add some (Serbian) Cyrillic NFD sequences. A number of characters in use in the various countries which use the Cyrillic script do not appear as pre-composed characters in The UCS or Unicode; they are only available as combining-character sequences. This commit adds support for using (prefix) dead keys and Multi_key- initiated sequences to enter a number of these combining-character sequences. This ensures that users can enter these scripts even when using the current Cyrillic keymaps, which lack support for the combining characters. Please see the discussions on the xkb mailing list. Signed-off-by: James Cloos <cloos@jhcloos.com> commit d1bdc909f9246119696c8b0d9afb7bd8afb71b60 Author: Julien Cristau <jcristau@debian.org> Date: Wed Aug 5 18:14:23 2009 +0200 man/xkb: delete spurious newline in .TH headers commit ee723b83b24682db833a2f0abd96cd319b8a62af Author: Julien Cristau <jcristau@debian.org> Date: Wed Aug 5 16:45:19 2009 +0200 man: use __libmansuffix__ instead of 3X11 for references to other pages commit 595e204feb82c798a92eea41fea03be6476ac181 Author: Julien Cristau <jcristau@debian.org> Date: Wed Aug 5 16:43:36 2009 +0200 man/xkb: use __libmansuffix__ instead of hardcoding 3Xkb for manpage sections commit 9da7e230d5320e1556ad2084fcd06ee7994385ea Author: Peter Hutterer <peter.hutterer@who-t.net> Date: Wed Aug 5 14:15:02 2009 +1000 Bump to 1.2.99.901 (1.3 RC1) Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> commit 8f78c7b4e3570cd46c5a220982963c17fe2157b8 Author: Filippo Giunchedi <filippo@debian.org> Date: Sat Jun 6 16:56:54 2009 +0200 nls: add {left,right}wards arrow to compose table Debian bug#532117 <http://bugs.debian.org/532117> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> commit 7949bfa00390241d994f32463e50d4bd78920568 Author: Julien Cristau <jcristau@debian.org> Date: Fri Jul 31 13:33:52 2009 +0200 Update library version for new symbols Commit 554f755e5545f63d3c8f299297927238da155773 added generic event cookie handling. Bump libX11 version number accordingly. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> commit 640fec5f4feacd01a00eea3dcd4edb220907d3dc Author: Julien Cristau <jcristau@debian.org> Date: Sun Aug 2 17:18:31 2009 +0200 Add _XFUNCPROTOBEGIN/END to Xlib-xcb.h X.Org bug#22252 <https://bugs.freedesktop.org/show_bug.cgi?id=22252> Reported-by: Riku Salminen <rsalmin2@cc.hut.fi> Signed-off-by: Julien Cristau <jcristau@debian.org> commit bc06d49e9dac1836d6824769ddb2ac5ba9f14df7 Author: Peter Hutterer <peter.hutterer@who-t.net> Date: Wed Jul 29 08:44:09 2009 +1000 Fix compiler warning 'unused variable qelt' Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> commit 03f4907e14f5755e72309f08742977b871e81e33 Author: Peter Hutterer <peter.hutterer@who-t.net> Date: Wed Jul 29 08:34:57 2009 +1000 Add utlist.h to the Makefile.am utlist.h contains the linked list macros, it was added with the recent addition of event cookies but utlist.h wasn't added to the Makefile.am. As a result, make dist failed. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> commit 554f755e5545f63d3c8f299297927238da155773 Author: Peter Hutterer <peter.hutterer@who-t.net> Date: Fri Jun 26 11:27:43 2009 +1000 Add generic event cookie handling to libX11. Generic events require more bytes than Xlib provides in the standard XEvent. Memory allocated by the extension and stored as pointers inside the event is prone to leak by simple 'while (1) { XNextEvent(...); }' loops. This patch adds cookie handling for generic events. Extensions may register a cookie handler in addition to the normal event vectors. If an extension has registered a cookie handler, _all_ generic events for this extensions must be handled through cookies. Otherwise, the default event handler is used. The cookie handler must return an XGenericEventCookie with a pointer to the data.The rest of the event (type, serialNumber, etc.) are to be filled as normal. When a client retrieves such a cookie event, the data is stored in an internal queue (the 'cookiejar'). This data is freed on the next call to XNextEvent(). New extension interfaces: XESetWireToEventCookie(display, extension_number, cookie_handler) Where cookie_handler must set cookie->data. The data pointer is of arbitray size and type but must be a single memory block. This memory block represents the actual extension's event. New client interfaces: XGetEventData(display, *cookie); XFreeEventData(display, *cookie); If the client needs the actual event data, it must call XGetEventData() with the cookie. This returns the data pointer (and removes it from the cookie jar) and the client is then responsible for freeing the event with XFreeEventData(). It is safe to call either function with a non-cookie event. Events unclaimed or not handled by the XGetEventData() are cleaned up automatically. Example client code: XEvent event; XGenericEventCookie *cookie = &ev; XNextEvent(display, &event); if (XGetEventData(display, cookie)) { XIEvent *xievent = cookie->data; ... } else if (cookie->type == GenericEvent) { /* handle generic event */ } else { /* handle extension/core event */ } XFreeEventData(display, cookie); Cookies are not multi-threading safe. Clients that use XGetEventData() must lock between XNextEvent and XGetEventData to avoid other threads freeing cookies. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> commit d7675cb8fa7155e7aff1459636a117a97aa1bf28 Author: Peter Hutterer <peter.hutterer@who-t.net> Date: Mon Jul 6 13:17:35 2009 +1000 Bump to 1.2.99.1 Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> commit 75fe48e7a42a685d7098e8d7108b9b956c471563 Author: Peter Hutterer <peter.hutterer@who-t.net> Date: Fri Jul 10 14:07:34 2009 +1000 Bump to 1.2.2 Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> commit 5d0fe0e0e92759af5667c5dca2eacb1b6f2d66ea Author: Peter Hutterer <peter.hutterer@who-t.net> Date: Thu Jul 2 09:10:25 2009 +1000 XMaskEvent/XCheckMaskedEvents must not check for GenericEvents. GenericEvent cannot be selected for in the core event masks and they must thus be treated like extension events. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> commit c1bf65b89f4e361f6178a73dd5334c8f2bd95732 Author: Peter Hutterer <peter.hutterer@who-t.net> Date: Thu Jul 2 09:06:05 2009 +1000 XWindowEvent/XCheckWindowEvent must not return GenericEvents. GenericEvents have no fixed position for the window, so they must be treated like extension events. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> commit 38f9054554d63525d2dd51aafb5eb57821158ab9 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Mon Jun 15 19:00:43 2009 -0700 Drop ancient USG SysV #ifdefs Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 7bfe1323f16a1a69cc474659f7ac0c2570b1cf42 Author: Adam Jackson <ajax@redhat.com> Date: Fri Jun 12 12:44:01 2009 -0400 Remove X_NOT_STDC_ENV usage. (#6527) commit 6dd74d7fb414ca1e99bae5c13e333961f396eb36 Author: Julien Cristau <jcristau@debian.org> Date: Fri May 29 11:18:11 2009 +0200 nls: remove more duplicated aliases Signed-off-by: Julien Cristau <jcristau@debian.org> commit e4b0899f516da224010e68bd2d953d5293d94993 Author: parag <parag@rawhideTM.pnq.redhat.com> Date: Thu May 28 11:29:35 2009 +0530 nls: Add pa_PK locale information and make pa_IN as default for pa. X.Org bug#21954 <http://bugs.freedesktop.org/show_bug.cgi?id=21954> [jcristau: removed the pa_PK.UTF-8 alias to itself] Signed-off-by: parag <pnemade@redhat.com> Signed-off-by: Julien Cristau <jcristau@debian.org> commit f0ea1f6d51145592f8617854f9320ec5dbff3299 Author: Julien Cristau <jcristau@debian.org> Date: Fri May 29 10:58:20 2009 +0200 nls: remove broken sd_IN.UTF-8 alias Signed-off-by: Julien Cristau <jcristau@debian.org> commit e29e010dabdb17d6498f2ef1786f69b8830c18ca Author: Julien Cristau <jcristau@debian.org> Date: Fri May 29 10:57:43 2009 +0200 nls: remove duplicated en_US* aliases Signed-off-by: Julien Cristau <jcristau@debian.org> commit a89a300d87852c84389ad97db66dcb8930cb45dd Author: Caolan McNamara <caolanm@redhat.com> Date: Thu May 21 18:41:05 2009 +0200 man: missing space in XAllocColor man page X.Org bug#21854 <http://bugs.freedesktop.org/show_bug.cgi?id=21854> commit c1c001e36504fd304f76f69bf6af3643225c49ea Author: James Cloos <cloos@jhcloos.com> Date: Wed May 13 13:03:54 2009 -0400 [nls] Replace remaining UCS Combining Characters in Compose sequences. The replaces the instances of keysyms which match <U03[0-6][0-9A-Fa-f]>, where the keysym is used as a dead_key, with an actual dead_key symbol. The only remaining instances of UCS combining characters in the compose sequences are of U0338 COMBINING LONG SOLIDUS OVERLAY used as a suffix in Multi_key-initiated sequences to create mathematics characters such as ∉ U+2209 NOT AN ELEMENT OF from ∈ U+2208 ELEMENT OF. commit e2b0bad3d3b9e9ca781fc264eb7584afbe2a1a4f Author: James Cloos <cloos@jhcloos.com> Date: Wed May 13 09:58:59 2009 -0400 [nls] Remove extraneous instances of UCS Combining Characters in Compose sequences. This removes those instances of keysyms which match <U03[0-6][0-9A-Fa-f]>, where the matching keysym is used as a dead_key, and for which alternative compose sequences exist. commit 79f47e6dff2f0a0b673bbfecc47528edca814baa Author: James Cloos <cloos@jhcloos.com> Date: Fri May 8 20:11:54 2009 -0400 [nls] Remove combining_ keysyms from the Compose files Some of the UTF-8 Compose tables included combining_ keysyms in the compose sequences as though they were dead symbols. This is contrary to how combining characters are used in the UCS. Therefore, those lines have been removed from the Compose tables. There were also some combining_ keysyms as targets. As those are not included in x11proto’s keysymdef.h, and as those do exist there as Uxxxx keysyms, they are replaced with the Uxxxx keysym names. This addresses http://bugzilla.freedesktop.org/show_bug.cgi?id=5107 and is based on attachment 25644 by samuel.thibault@ens-lyon.org. Signed-off-by: James Cloos <cloos@jhcloos.com> commit 4a08a3dfbda497b2be46e3e5fe6b777815ea27f9 Author: parag <pnemade@redhat.com> Date: Tue May 5 16:50:47 2009 +0530 libX11: Add new Indic language information to nls directory files. #21560 Signed-off-by: parag <pnemade@redhat.com> commit aaf81096eb44b4c2812108721ba02738391884da Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Sat May 2 01:38:14 2009 -0700 Correct return type in XkbGetKeyboard man page Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 2bef065b70f70af520b5de8fb23529254d15f003 Author: Christoph Pfister <christophpfister@gmail.com> Date: Mon Apr 27 22:32:57 2009 -0700 X.Org Bug #21117: crash in get_rotate_fontname (omGeneric.c) http://bugs.freedesktop.org/show_bug.cgi?id=21117 Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 5c1cde105db10df24d3c532f032cbc59050c7313 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Fri Apr 17 22:14:47 2009 -0700 Use AC_USE_SYSTEM_EXTENSIONS instead of hand-rolled check for _GNU_SOURCE Raises minimum autoconf version required to 2.60 Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 84b7a91ef84f345384e4b0e13907385ca3ca3255 Author: Julien Cristau <jcristau@debian.org> Date: Tue Apr 14 15:59:57 2009 +0100 Fix fi_FI.UTF-8, again Commit 97fc6babd4ccaf300e25708868aa2a738893dc30 "NLS: Add UTF-8 compose file for Finnish" made fi_FI.UTF-8 use a broken empty XLC_LOCALE file. This reverts it back to using the en_US.UTF-8 one. commit 128daff4422f973ea40dd1e31b2db230e643549e Author: Theppitak Karoonboonyanan <thep@linux.thai.net> Date: Thu Apr 9 12:01:07 2009 +0700 Thai XIM not retrieve MB surrounding on UTF-8 LC On th_TH.UTF-8 locale, Thai XIM rejects all combining characters for GTK+ apps that use X Input Method. This is because GTK+ imxim immodule passes surrounding text in locale encoding, which is UTF-8 for UTF-8 locales. But current Thai XIM in Xlib assumes the multi-byte StringConversionText response for the StringConversionCallback to always be TIS-620, by retrieving a single byte and using it as-is. If the Thai XIM tries to convert the multi-byte text based on locale codeset before using it, it will work again. X.Org But 12759 <http://bugs.freedesktop.org/show_bug.cgi?id=12759> Signed-off-by: Theppitak Karoonboonyanan <thep@linux.thai.net> Signed-off-by: Julien Cristau <jcristau@debian.org> commit e09f0d227fbf95b6252759af9d426efd57686f9f Author: Theppitak Karoonboonyanan <thep@linux.thai.net> Date: Thu Apr 9 11:47:55 2009 +0700 Thai XIM not filters when NumLock or CapsLock is on The Thai XIM component in libx11 activated on 'th*' locales normally filters input sequence according to orthographic rules. However, when NumLock/CapsLock is on, this stops working. All sequences are passed through. This is caused by missing masks in _XimThaiFilter(), which normally screens out certain special keys from entering orthographic rules. Unfortunately, this included events with NumLock/CapsLock on. Negating the masks from the check allows the events to be tested by the rules. X.Org Bug 12517 <http://bugs.freedesktop.org/show_bug.cgi?id=12517> Signed-off-by: Theppitak Karoonboonyanan <thep@linux.thai.net> Signed-off-by: Julien Cristau <jcristau@debian.org> commit d108d3c706af3502820b5202564488ea19908b77 Author: Theppitak Karoonboonyanan <thep@linux.thai.net> Date: Thu Apr 9 11:25:25 2009 +0700 CharSet-to-CompoundText Conversion Failed for Thai Locales SCIM fails to commit Thai input characters on Thai locales, because it commits string in compound text form, which was converted via XwcTextListToTextProperty(). But the XLC_LOCALE for th_TH and th_TH.UTF-8 declares cs1's ct_encoding as TIS620-0:GR, which was commented out in src/xlibi18n/lcCT.c default_ct_data, in favor of ISO8859-11 ESC sequence. So, declaring cs1 as ISO8859-11:GR instead makes it work. Besides, for th_TH.UTF-8, adding cs2 class with ISO10646-1 encoding also adds support for UTF-8 input. And, along discussion in the bug, a similar problem was found for fontset, too, by causing delays on X apps startups on systems without tis620-0 fonts. This is normally the case, as mkfontdir and mkfontscale generate iso8859-11 entries by default for Thai X fonts. So, Thai fontset charset is also patched. X.Org Bug 16475 <http://bugs.freedesktop.org/show_bug.cgi?id=16475> Signed-off-by: Theppitak Karoonboonyanan <thep@linux.thai.net> Signed-off-by: Julien Cristau <jcristau@debian.org> commit fd62d3318c846cd43d66a505946e94704d7d83dc Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Wed Apr 8 19:42:25 2009 -0700 Revert "Change masculine to ordmasculine in Compose file comments" This reverts commit 892b401d5acc055803a20e349ede0d64490f2230. As Julien Cristau correctly points out, I misread the Compose file grammar in modules/im/ximcp/imLcPrs.c, and those are keysyms, not comments, and the keysym is named XK_masculine in keysymdef.h. This change is thus a bug in the Solaris compose tables to be fixed, not an improvement to bring upstream. commit eac57c77afdf44f50692225b8b0345a7c927bc84 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Tue Apr 7 15:38:45 2009 -0700 Version bump: 1.2.1 Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit bfbec08baec33c5024510b0bcbbee6e4a8473e79 Author: Yaakov Selkowitz (Cygwin Ports maintainer) <yselkowitz@users.sourceforge.net> Date: Tue Apr 7 13:46:57 2009 -0700 Bug 20773: Xcursor dynamic loading on Cygwin X.Org Bug #20773 <http://bugs.freedesktop.org/show_bug.cgi?id=20773> Patch #24096 <http://bugs.freedesktop.org/attachment.cgi?id=24096> Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit c8c41614911be4fa222fa22478677d263b41c751 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Mon Apr 6 16:52:46 2009 -0700 Fix a several sparse warnings: Using plain integer as NULL pointer Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit b336c3d0cc2aefc8926500cff5f76b5a3e803886 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Mon Apr 6 16:32:05 2009 -0700 Further ansify prototypes & reduce #ifdefs in locking.c Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 892b401d5acc055803a20e349ede0d64490f2230 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Mon Apr 6 10:50:09 2009 -0700 Change masculine to ordmasculine in Compose file comments Matches the ordfeminine name used for the matching character, and the ordmasculine name used in many font descriptions of the glyph. Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit e3198b55dc16ec57346cc28aa8d34165ce8cde96 Author: Julien Cristau <jcristau@debian.org> Date: Fri Mar 13 13:52:33 2009 +0100 Add a ru_RU.UTF-8 locale Based on patch by Eugene Konev <ejka@imfi.kspu.ru> for X.Org 6.9.0. Debian bug#330144 <http://bugs.debian.org/330144> X.Org bug#15887 <http://bugs.freedesktop.org/show_bug.cgi?id=15887> commit d239de9452691d6f875e6e5ace3d499ec3bf14d9 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Wed Mar 25 17:59:09 2009 -0700 Delete some unused "#ifdef notdef" static functions Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 4281892e31058ef3aecc96a5767824b34d88d415 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Wed Mar 25 17:52:48 2009 -0700 Remove _XP_PRINT_SERVER_ #ifdefs from Xrm.c This copy of Xrm.c is never compiled into the Xprint server any more, so this old code-sharing #ifdef from the monolith tree isn't needed. Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 27a2e16e8ea11c1604e28645fae4d6ba4371d513 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Tue Mar 17 18:38:58 2009 -0700 makekeys: combine malloc(strlen)+strcpy into strdup Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 78a894231ae8ec4959007b6d9b8d2a15d6333a1e Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Tue Mar 17 15:42:19 2009 -0700 When makekeys fails to find a good hash, print error instead of divide-by-zero Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit c9f84af591d15fbc3fa890bcd955d94f1ff82a0b Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Tue Mar 17 14:59:16 2009 -0700 Remove ifdef checks for macII left over from ancient A/UX 3.0 support Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 4b90da0ffb32b791d915ecae11996cc2f2cac9a7 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Mon Mar 16 18:37:49 2009 -0700 XErrorDB additions for DRI2 requests Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 273f45af1441be9d2135e4cac8c46ceb33470236 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Mon Mar 16 18:35:44 2009 -0700 XErrorDB additions for XInput errors and new XInput 1.5 requests Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 90ef36f6336068183bf9d13ca972202db35b1202 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Mon Mar 16 18:23:05 2009 -0700 XErrorDB additions for RANDR 1.3 Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 124a4efaccf329f1a44f6b824e70278bdd1cad83 Author: Lubos Lunak <l.lunak@suse.cz> Date: Mon Mar 16 18:03:36 2009 -0700 XErrorDB updates for XTEST, RANDR, DAMAGE extensions From http://lists.freedesktop.org/archives/xorg/2008-January/031937.html Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 80811846e37b805fddb37c71589fd5f6f6037b3f Author: Lubos Lunak <l.lunak@suse.cz> Date: Mon Mar 16 17:57:52 2009 -0700 XGetErrorText() fails for extension error codes equal to the error base From http://lists.freedesktop.org/archives/xorg/2008-January/031937.html Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit da95ecbbdcacc483cd0b5fd7db1fb2e2543341bd Author: Milos Komarcevic <miloskomarcevic@netscape.net> Date: Mon Mar 16 17:43:26 2009 -0700 Bug 11456: Serbian locale updates (sr_RS and sr_ME) X.Org Bug #11456 <http://bugs.freedesktop.org/show_bug.cgi?id=11456> Patch #23937 <http://bugs.freedesktop.org/attachment.cgi?id=23937> Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 934a6c0519a9e32505beee55b004f36c2a710217 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Mon Mar 16 14:55:22 2009 -0700 Bug 10082: Compose entries for some standard mathematical operators X.Org Bug #10082 <http://bugs.freedesktop.org/show_bug.cgi?id=10082> Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit abf4da1ed0f735ca7ce471dc13a0ec3677391486 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Mon Mar 16 14:27:46 2009 -0700 Bug 14651: We need to add new locale specification for Belarusian Latin locale X.Org Bug #14651 <http://bugs.freedesktop.org/show_bug.cgi?id=14651> Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 837703c8651e1321a50147a8311c56e4758ce08a Author: Caolan McNamara <caolanm@redhat.com> Date: Mon Mar 16 14:15:50 2009 -0700 Bug 20575: man page for XCreatePixmapFromBitmapData doesn't match signature X.Org Bug #20575 <http://bugs.freedesktop.org/show_bug.cgi?id=20575> Patch #23717 <http://bugs.freedesktop.org/attachment.cgi?id=23717> Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 22199018879055d8653e59d8236bef57164fac66 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Mon Mar 16 13:28:18 2009 -0700 Correct locale alias for sh_BA.ISO8859-2@bosnia (should be sr, not nr) Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 4c63c27eab2b88f5556dbf72c36321f50f6de35e Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Thu Mar 12 18:57:20 2009 -0700 Bug 9953: Please provide locale alias hu_HU.utf8 X.Org Bug #9953 <http://bugs.freedesktop.org/show_bug.cgi?id=9953> Debian Bug #407573 <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=407573> Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 501f4e0ada1690783ada05ad412e4b191ad55336 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Thu Mar 12 17:38:21 2009 -0700 Bug 6820: Xlib shouldn't handle EAGAIN as a fatal IO error X.Org Bug #6820 <http://bugs.freedesktop.org/show_bug.cgi?id=6820> Patch #17637 <http://bugs.freedesktop.org/attachment.cgi?id=17637> Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 7b9c543e7210c7da204871c31a160e79d3a949b6 Author: Paul Bender <pebender@gmail.com> Date: Thu Mar 12 17:11:42 2009 -0700 Bug 15664: xau & xdmcp not needed in x11.pc dependencies when built with xcb X.Org bug #15664 <https://bugs.freedesktop.org/show_bug.cgi?id=15664> Patch #16128 <https://bugs.freedesktop.org/attachment.cgi?id=16128> Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit fd2cf1ef66c2aff3dc758956c9e9e567b9892c06 Author: Xue Wei <Wei.Xue@Sun.COM> Date: Wed Mar 4 19:32:29 2009 -0800 Add UTF-8 locale entries for es_US, kk_KZ, mt_MT, and sh_BA Sun bug 6809309 Add new utf8 locales supported by Xlib <http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6809309> Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit cb70c9bc43267577859a3674ca9de9be396ba69e Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Mon Feb 23 19:29:15 2009 -0800 Add --with-locale-lib-dir configure option to set locale lib install dir Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit ccd3584f0330db8dac90b9313c33ab8b5b2ec6af Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Mon Feb 23 18:33:51 2009 -0800 Incorporate more locale names/aliases from Solaris libX11 Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 83ce4daefdf544f801c7d666c89162690a36ce41 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Mon Feb 23 18:32:34 2009 -0800 Incorporate char range comments from Solaris version of ksc5601.h Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit ee279c84e34f1ebb8a6ff17d54ee146d11e29764 Author: Chris Ball <cjb@laptop.org> Date: Sat Feb 21 14:48:42 2009 -0500 Fix fi_FI locale install directory. fi_FI was setting "x11thislocaledir" to en_US, with the result that its locale data was written in that locale dir. Signed-off-by: Chris Ball <cjb@laptop.org> commit da6bbca07c796c69172a649405474f03bee66754 Author: Emilio Jesús Gallego Arias <egallego@babel.ls.fi.upm.es> Date: Sat Feb 21 20:17:23 2009 +0100 xcb_io: Avoid datatype overflow on AMD64 and friends. commit 4ef6491afa69e8441caee7bbebc583e6e796275e Author: Chris Ball <cjb@laptop.org> Date: Sat Feb 21 12:51:03 2009 -0500 Build fix for fi_FI. Commit 642c4e928e770e0.. instructs make to enter nls/fi_FI, but no Makefile is written there by configure. Signed-off-by: Chris Ball <cjb@laptop.org> commit 642c4e928e770e012379539a6ce09e11c02f09a6 Author: Julien Cristau <jcristau@debian.org> Date: Sat Feb 21 03:12:05 2009 +0100 nls: actually use the fi_FI.UTF-8 files The subdir wasn't added to nls/Makefile.am commit 9bad8309ef289bb943651abf6967b24fa2252aac Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Fri Feb 20 14:45:54 2009 -0800 flags member of Display structure needs to be marked volatile Since the Xlib multithreaded code checks the flags variable in _XFlushInt to see if the other threads are done yet, it has to be marked volatile so the compiler doesn't optimize out re-loading it on each trip through the while loop and end up in an impossible-to-exit infinite loop of CPU chewing. Part of fix for Sun bug 6409332: infinite loop in XFlushInt() on x86/32-bit <http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6409332> Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit ef5c446395aa30d7b1096a112e241a81c5b358e7 Author: Xue Wei <Wei.Xue@Sun.COM> Date: Fri Feb 20 15:12:35 2009 -0800 Add nn_NO.UTF-8 to compose.dir.pre for Norwegian Nynorsk Sun bug 6691236: Swing applications dump core when locale is nn_NO.UTF-8 <http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6691236> Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 3822f2654e9630167f0c6cae317b472c09771672 Author: Xue Wei <Wei.Xue@Sun.COM> Date: Fri Feb 20 15:03:51 2009 -0800 Add locale aliases for no_NO & sh_BA locale variants Fixes Sun bug id 6691219: xterm refuses to start in some locales <http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6691219> Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit 63b6b5b5f522c0a606b32163c643edb64ca91d54 Author: Xue Wei <Wei.Xue@Sun.COM> Date: Fri Feb 20 14:23:11 2009 -0800 Add kk_KZ.UTF-8 to locale.dir.pre for Kazakhstan Fixes Sun bug id 6737254 ("kk_KZ.UTF-8 locale: In Java applications changing keyboard layout with gimlet does not work") <http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6737254> Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit d497301707962f3b94542e999a36abffcfbd303d Author: Julien Cristau <jcristau@debian.org> Date: Tue Feb 17 16:09:41 2009 +0100 Bump to 1.2 commit 990e71361d1d7b79bf07b1dc93e4e905d4f1bdaf Author: Julien Cristau <jcristau@debian.org> Date: Tue Feb 17 15:23:40 2009 +0100 Check Xmalloc return value in _XConnectXCB X.Org bug#19137 <http://bugs.freedesktop.org/show_bug.cgi?id=19137> Signed-off-by: Julien Cristau <jcristau@debian.org> commit b4b5893f69419ff577bbaa4d18f78e4ffd729a0c Author: James Cloos <cloos@jhcloos.com> Date: Sat Feb 14 12:35:56 2009 -0500 dolt: allow older versions of bash to compile the library Cf xserver commit 7be6520d and bugzilla #19031. commit 20982d6866e24453642b0b592fa0f13a88aa747c Author: Will Thompson <will@willthompson.co.uk> Date: Thu Feb 5 02:53:06 2009 +1100 NLS: Compose: Non-aliasing CCCP Oops, cccp aliased cc for question mark. Upper-case it to avoid fail. Signed-off-by: Will Thompson <will@willthompson.co.uk> Signed-off-by: Daniel Stone <daniel@fooishbar.org> (sorry) commit f052665394f3f0319e93a98f1d5d4ea287e1dd07 Author: Will Thompson <will@willthompson.co.uk> Date: Wed Feb 4 14:51:11 2009 +0000 Add two essential compose sequences Signed-off-by: Will Thompson <will@willthompson.co.uk> Signed-off-by: Daniel Stone <daniel@fooishbar.org> commit d7bea6fa909bf34c43efe0ca8239ab0f9f3a415f Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Mon Feb 2 20:34:31 2009 -0800 Add README with pointers to mailing list, bugzilla & git repos Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com> commit f682c27e93512773122887d2cbabb1657af45d2e Author: Paulo Cesar Pereira de Andrade <pcpa@mandriva.com.br> Date: Mon Feb 2 16:36:39 2009 -0200 Check if a function argument is NULL. This was an addition to patch (also by me) https://bugs.freedesktop.org/attachment.cgi?id=14660 that was not added when rediscovering/correcting the problem. commit 427e9d45d424b84efd9fc499aebf8d72392844c5 Author: Paulo Cesar Pereira de Andrade <pcpa@mandriva.com.br> Date: Thu Feb 28 15:58:12 2008 -0300 Allow multiple inclusions of cursorfont.h, cosmetic patch. commit b91524a53e691f6a5d278fd8972b48a14ebeedeb Author: Paulo Cesar Pereira de Andrade <pcpa@mandriva.com.br> Date: Thu Feb 28 15:54:43 2008 -0300 Don't add prototypes for functions that don't exist. Note that a full review was not done, only for functions that receive char/short arguments, or one of it's parameters is a function pointer that requires char/short arguments. commit 537eb52fe266ac439c4b383bb04a70017b709911 Author: Paulo Cesar Pereira de Andrade <pcpa@mandriva.com.br> Date: Thu Feb 28 15:50:27 2008 -0300 WORD64 compile fix. This bug catched on a overview of the code. The code is wrong since the first git revision, so it seens that it has not been compiled with WORD64 for quite some time, there is also another interesting code in xkb/XKBRdBuf.c: <hash>ifdef WORD64 _XkbWriteCopyData32 Not Implemented Yet for sizeof(int)==8 <hash>endif and possibly there are other similar problems. commit ffd0300fb74c6183208ae599133f2ded09e08d97 Author: Brian Rogers <brian@xyzw.org> Date: Sat Jan 31 10:37:51 2009 -0800 Initialize event_notify after allocating the memory for it. An uninitialized or otherwise invalid condition variable can apparently cause a hang in pthread_cond_broadcast. Ekiga, openoffice, and xine at least are freezing as a result of event_notify never being initialized. Signed-off-by: Brian Rogers <brian@xyzw.org> Signed-off-by: Bart Massey <bart@cs.pdx.edu> commit 97fc6babd4ccaf300e25708868aa2a738893dc30 Author: James Cloos <cloos@jhcloos.com> Date: Thu Jan 29 20:10:41 2009 -0500 NLS: Add UTF-8 compose file for Finnish From bug report: https://bugs.freedesktop.org/show_bug.cgi?id=18747 commit 1bd2966ed88f83479a066c6ca7da23a515979550 Author: Paulo Cesar Pereira de Andrade <pcpa@mandriva.com.br> Date: Thu Jan 29 20:25:15 2009 -0200 patches to avoid gcc warnings for libX11 (#4) Author is Peter Breitenlohner <peb@mppmu.mpg.de> Bug #17946, attachment #19443 This patch avoids the gcc warning ../../../../libX11-1.1.5/modules/im/ximcp/imDefLkup.c:223: warning: passing arg 1 of `_XimProcSyncReply' from incompatible pointer type (same as already done at other places) BTW: what is the difference between XIM (the type of ic->core.im) and Xim ? commit f16dd6af3eb17a25b8ee03d6617a7acc6e919fb0 Author: Paulo Cesar Pereira de Andrade <pcpa@mandriva.com.br> Date: Thu Jan 29 20:22:21 2009 -0200 patches to avoid gcc warnings for libX11 (#3) Author is Peter Breitenlohner <peb@mppmu.mpg.de> Bug #17946, attachment #19441 This patch avoids the two gcc warnings ../../../../libX11-1.1.5/modules/im/ximcp/imRm.c:413: warning: assignment discards qualifiers from pointer target type ../../../../libX11-1.1.5/modules/im/ximcp/imRm.c:450: warning: assignment discards qualifiers from pointer target type Note, that this as a rather crude fix of the problem (and it is really a shame to cast name_table to non-const). The right solution would be to declare XIMValuesList.supported_values (in include/X11/Xlib.h) as 'const char **' (or '_Xconst char **'). This will, however, require extensive modifications in various places. commit cce75c5dce73fe1f8626ed9e6798138ada09a860 Author: Paulo Cesar Pereira de Andrade <pcpa@mandriva.com.br> Date: Thu Jan 29 20:20:18 2009 -0200 patches to avoid gcc warnings for libX11 (#2) Author is Peter Breitenlohner <peb@mppmu.mpg.de> Bug #17946, attachment #19440 Avoid a preprocessor message <stdin>:194: warning: no newline at end of file Two more such warnings (in XkbSAGroup.man and XkbSASetGroup.man) seem to be caused by a truncated (or otherwise incomplete) manpage. commit 692baebcc50f1e952800bfe4e2e6bc42f54e62fe Author: Paulo Cesar Pereira de Andrade <pcpa@mandriva.com.br> Date: Thu Jan 29 20:12:24 2009 -0200 patches to avoid gcc warnings for libX11 (#1) Author is Peter Breitenlohner <peb@mppmu.mpg.de> Bug #17946, attachment #19439 Define as 1 (one) as done by autoconf and the command line option, e.g. -DX11_t, not as empty. This avoids the gcc (3.4.6) warnings: ../../libX11-1.1.5/src/x11_trans.c:27:1: warning: "X11_t" redefined <command line>:7:1: warning: this is the location of the previous definition ../../libX11-1.1.5/src/x11_trans.c:28:1: warning: "TRANS_CLIENT" redefined <command line>:8:1: warning: this is the location of the previous definition Similarly, follow the autoconf convention to define XTHREADS and XUSE_MTSAFE_API as one. This avoids analogous warnings when compiling libXcomposite, libXcursor, and libXdamage. No reason to AC_SUBST XTHREADS and XUSE_MTSAFE_API (unused). commit a1977883c9f5ef0e515569d6e2ebccb07411f98c Author: Paulo Cesar Pereira de Andrade <pcpa@mandriva.com.br> Date: Thu Jan 29 15:01:06 2009 -0200 Janitor: Correct some gcc/sparse warnings. Most remaining warnings are about XIM/Xim to/from conversion and discarding const from pointers. commit 8ba0ca32a63c532f128bdca7f1bf982cab8e12be Author: Paulo Cesar Pereira de Andrade <pcpa@mandriva.com.br> Date: Wed Jan 28 20:31:42 2009 -0200 Janitor: ansification, make distcheck, compiler warnings. Only convert to use "ansi prototypes" the functions warned from compilation with "./autogen.sh --prefix=/usr", on a Linux computer. Also, only address "trivial" compiler warning fixes in this commit. The new .gitignore is the output of a command like: % find . -name .gitignore -exec cat {} \; | sort | uniq and only the toplevel .gitignore file was kept. commit 091c1624fd2f9d933329d6152e4ecd865aa7903a Author: Peter Hutterer <peter.hutterer@who-t.net> Date: Tue Jan 13 12:05:54 2009 +1000 Fix wrong implies symbol. Quote Simos Xenitellis: > I checked the gtk+ commit logs that go back to 2000, and I see that still it > was > > { 0x08ce, 0x21d2 }, /* implies ⇒ RIGHTWARDS > DOUBLE ARROW */ > > In XFree86, it appears there was an error when they converted the > original table to > http://cvsweb.xfree86.org/cvsweb/xc/lib/X11/imKStoUCS.c?rev=1.1&content-type=text/vnd.viewcvs-markup > and the problem still shows up there (November 2000). http://lists.freedesktop.org/archives/xorg/2008-October/039743.html Reported by Erik Streb del Toro. commit e32521f19e0b07649b7e3a03d56a2bd556b138fb Author: James Cloos <cloos@jhcloos.com> Date: Sun Dec 7 04:13:34 2008 -0500 [i18n] s/U00DC/Udiaeresis/g The xkeyboard-config keyboards generate the symbol Udiaeresis, not U00DC. Make sure the relevant Compose sequences expect the symbol which the keyboards actually send. commit b7502abfe22f8dc009b21cda1172af221d8f9f32 Author: James Cloos <cloos@jhcloos.com> Date: Sun Dec 7 04:09:46 2008 -0500 Revert "For nls/*.pre, allow people to comment lines by starting them with '##'." As of commit c9d20e3 the initial double-hashes are replaced with proper C comments. This reverts commit a225a0be48770beb689d5ac5da97073634f7deab. commit c9d20e3f697c9cfae5511412023362c1db7449b1 Author: James Cloos <cloos@jhcloos.com> Date: Sun Dec 7 04:08:23 2008 -0500 Use C comments rather than initial doubled hashes to exclude lines from .pre files commit c34ce54d9eac2d8052dc5f205a2ab09866ef5d25 Author: vehemens <vehemens@verizon.net> Date: Sun Dec 7 01:18:26 2008 -0500 [i18n] Distribute new headers which were added for gb18030 support. big5hkscs.h and gbk.h, added in 67e34d7a, need to be in SOURCES to make it into the tar. Completes 67e34d7a82ccd31f1208c0c43a6d58c3c05bf51. Signed-off-by: James Cloos <cloos@jhcloos.com> commit 418819558d2c60e58b4e3022ce0fadf2143488ac Author: Stefan Dirsch <sndirsch@suse.de> Date: Sat Nov 22 22:01:07 2008 +0100 Fixed strange font mixups, when fontsets are still used (#2676, Novell #74299). commit 67e34d7a82ccd31f1208c0c43a6d58c3c05bf51a Author: Stefan Dirsch <sndirsch@suse.de> Date: Sat Nov 22 19:40:54 2008 +0100 Added remaining xlib patch required for gb18030 support (#1573). commit 55782a0a1fe1560f1a9c0ed78bc7f2575c15abcf Author: Stefan Dirsch <sndirsch@suse.de> Date: Sat Nov 22 17:53:06 2008 +0100 Added remaining hunk of Egbert's patch to prevent XIM deadlocks (#1182). commit c859446c500c883a67f7a86cab1a44844e24dade Author: Ken Thomases <ken@codeweavers.com> Date: Fri Nov 21 13:58:10 2008 -0500 [i18n] Provide translation from XK_partialderivative (8ef) to Unicode (U2202) Signed-off-by: James Cloos <cloos@jhcloos.com> commit 5e68e94d852c730ef9264fc0d8ca61a2ffe98b53 Author: Jeremy Huddleston <jeremyhu@freedesktop.org> Date: Mon Nov 17 20:47:26 2008 -0800 Force local transport when using the launchd socket. Fixes a regression due to bf53987eaf0fbd7f7627783fc39e7ee99e8361ba commit 7aca689ce14d314b5c8c72c8df76f53f76ab467c Author: Peter Hutterer <peter.hutterer@redhat.com> Date: Fri Nov 14 10:32:50 2008 +1000 Add XF86Suspend, XF86Hibernate to KeysymDB. commit d16b11f25f8265e651def8d80bcd430c0448e664 Author: James Cloos <cloos@jhcloos.com> Date: Tue Nov 11 19:43:39 2008 -0500 [nls] Annotate the Bépo compose sequences Add comments with the UCS names. Add utf-8 strings for each result. Format for easy reading. commit 730298464240be6f65b32416b3f9b20062c61825 Author: James Cloos <cloos@jhcloos.com> Date: Tue Nov 11 16:41:34 2008 -0500 [nls] Add some UTF-8 Compose sequences As requested for the Bépo keyboard layout (http://clavier-dvorak.org/wiki/). Cf. bugs: https://bugs.freedesktop.org/show_bug.cgi?id=17821 https://bugs.freedesktop.org/show_bug.cgi?id=17822 commit ad6008a0c92733826983eb93f063d3d6276007d8 Author: Colin Harrison <colin.harrison@virgin.net> Date: Thu Nov 6 17:48:21 2008 -0500 Fix copy/paste typo in imLcPrs Signed-off-by: James Cloos <cloos@jhcloos.com> commit 0f0168ad18f8a280fc5a689eb02cfaa62d022ea6 Author: Adam Jackson <ajax@redhat.com> Date: Thu Nov 6 14:54:13 2008 -0500 Fix leak in _XimXGetReadData Spotted by Denis Dzyubenko commit ae23c25b9349ab1d7ff81f3075c000cf35fc442b Author: Julien Cristau <jcristau@debian.org> Date: Wed Nov 5 22:09:37 2008 +0100 Bump to 1.1.99.2 commit d31e644c65c52828ea3e7abd94a8cf9aee12265c Author: Julien Cristau <jcristau@debian.org> Date: Wed Nov 5 21:33:13 2008 +0100 Fix distcheck commit e6a7b70cdb2ae8b713012839a0a0bbb93817b8ef Author: Jamey Sharp <jamey@minilop.net> Date: Wed Oct 29 14:00:33 2008 -0700 Support multiple independent internal sync handlers Xlib has several independent tasks that need to be performed with the display unlocked. It does this by replacing the existing sync handler with one of a variety of internal sync handlers. However, if multiple internal sync handlers need to run, then the last one registering wins and previously registered internal sync handlers are never invoked. This manifested as a bug with DRI applications on Xlib/XCB as that requires both an XID handler after every XID allocation, and the periodic sequence number handler. The XID handler would win, and the sequence number handler would never be invoked. Fix this by unifying the internal sync handler mechanism into a single function that calls all of the known internal sync handlers. They all need to deal with being called when not strictly necessary now. Signed-off-by: Keith Packard <keithp@keithp.com> Signed-off-by: Jamey Sharp <jamey@minilop.net> Signed-off-by: Josh Triplett <josh@freedesktop.org> commit 2dbaaab9c4e3894b33dcae850551dee5473431d5 Author: Keith Packard <keithp@keithp.com> Date: Sat Oct 11 21:44:21 2008 -0700 Ensure that _XReadEvents always leaves an event in the queue on return XNextEvent assumes that the event queue will be non-empty on return from _XReadEvents, but with multiple event readers running, the previous change could leave the queue empty on return from process_responses. Re-invoke process_responses until the queue is non-empty. Signed-off-by: Keith Packard <keithp@keithp.com> commit bedfe68259037c5564fe52758c92b9c97729640a Author: Keith Packard <keithp@keithp.com> Date: Sat Oct 11 21:10:23 2008 -0700 Permit only one Xlib thread to block waiting for events As Xlib queues events internally, we must prevent multiple Xlib threads from entering XCB to wait for an event in case the queued event is to be delivered to the thread which didn't manage to read it. In other words, let only one Xlib thread into xcb_wait_for_event at a time. Jamey Sharp looked over my shoulder while making this fix and, while hating my whitespace conventions, appears happy enough with the actual code. Signed-off-by: Keith Packard <keithp@keithp.com> commit cc19618d2eb3ed92a0b574aee26a7da8b4aed5d2 Author: Jamey Sharp <jamey@minilop.net> Date: Sun Mar 23 16:33:50 2008 -0700 Fix XAllocID race: hold the user display lock until we have a new XID. Xlib built --without-xcb is also vulnerable to this race, and a similar fix might work there too. Also, use an XID that's truly invalid while waiting for the next XID to be requested. commit 54e5c0941b0ded1628d559a9f0a3451ea96c299b Author: Josh Triplett <josh@freedesktop.org> Date: Sat Mar 15 17:22:23 2008 -0700 Use XCB's new socket handoff mechanism rather than the old XCB Xlib lock. Previously, Xlib/XCB used XCB's Xlib lock to prevent XCB from sending requests between calls to Xlib's LockDisplay and UnlockDisplay macros. Xlib/XCB then sent all of its requests using XCB's xcb_send_request, and had to flush its requests when unlocking the display. XCB 1.2 adds a new socket handoff mechanism, xcb_take_socket. Replace much of the existing Xlib/XCB implementation with the use of xcb_take_socket to take ownership of the write side of the X connection socket, and a return_socket callback which writes any outstanding requests with xcb_writev. This approach allows Xlib/XCB to use the same buffering as traditional Xlib did. In particular, programs which use Xlib/XCB and never make XCB calls will never need to hand the socket back to XCB, and vice versa. This allows us to discard large quantities of synchronization code from Xlib/XCB, together with the synchronization bugs present in that code. Several test cases which previously failed now work perfectly, including multi-threaded ico. In addition, the infamous locking correctness assertions, triggered when double-locking or when unlocking without a previous lock, no longer exist, because Xlib/XCB no longer has any reason to care more about application locking than traditional Xlib does. Furthermore, the handoff approach provides great improvements to performance. Results from x11perf's XNoOp test, which represented the worst case for the lock-based Xlib/XCB: Traditional Xlib: average 19100000/sec Lock-based Xlib/XCB: average 3350000/sec Handoff-based Xlib/XCB: average 17400000/sec Thus, for no-ops, the handoff mechanism provides more than a 4x speedup to Xlib/XCB, bringing Xlib/XCB within 9% of traditional Xlib no-op performance. Of course, real-world workloads do not use no-op, so your mileage may vary. In particular, since no-ops represent the worst case, we expect real workloads to more closely match the performance of traditional Xlib. While removing synchronization code, we changed _XReply to not drop any locks when calling xcb_wait_for_reply; previously, we had to carefully avoid a deadlock between the Display lock and the XCB Xlib lock. Holding the locks reduces implementation complexity and should not impact applications. Commit by Jamey Sharp and Josh Triplett. XCB's handoff mechanism inspired by Keith Packard. commit 5a19ac473f7a8046b0421fbd5d53da160c22ed75 Author: Chris Ball <cjb@laptop.org> Date: Mon Nov 3 22:57:29 2008 -0500 Remove configure check for xcb-xlib. xcb-xlib has been intentionally removed from libxcb; stop checking for it at configure-time. commit 34b35dda0bb7f3cf0ad9ab95ad7953d35d24f71b Author: Josh Triplett <josh@freedesktop.org> Date: Wed Oct 29 14:37:44 2008 -0700 .gitignore: Add dolt files commit 1290cccf2d90083eba852f5f413f7e3dff48ccd2 Author: Peter Hutterer <peter.hutterer@redhat.com> Date: Tue Oct 28 11:56:55 2008 +1030 man: fix formatting error in XkbGetIndicatorState man page. commit b1022fa6d7e97640049e93ffa108083fc8d71b05 Author: James Cloos <cloos@jhcloos.com> Date: Sat Oct 25 09:13:08 2008 -0400 Increase size of working arrays in the makekeys utility program. Makekeys is used to create an optimal hash of the keysyms defined in x11proto’s keysymdef.h. The recent addition of new keysyms there has triggered a bug in makekeys where it tries to use a zero on the rhs of the % (mod) operator (resulting in a divide by zero error) whenever it fails to find a solution within its constraints. Increasing the size of the arrays allows it to find a solution for the current set of keysyms. Makekeys is only run durring the build process, so this has no impact on users of libX11, only on the amount of VM needed to build it. It still needs a more complete fix, but this allows compiles to progress until that is completed. commit 3e9afd501e40d76040635bd9a3045bcaf5a03b60 Author: James Cloos <cloos@jhcloos.com> Date: Sat Oct 11 01:03:14 2008 -0400 Dolt-ify Add dolt to acinclude.m4 and call it it configure.ac to speed compiles. commit 39c0b266cac8cbc15bf501d7869186862f01d823 Author: Peter Hutterer <peter.hutterer@redhat.com> Date: Wed Oct 15 14:30:20 2008 +1030 Add more keysyms for PS3 BD remotes, Ericsson Phones #16519 X.Org Bug 16519 <https://bugs.freedesktop.org/show_bug.cgi?id=16519> commit d23aad31338e7d869d878d5aa1b6b91d20287005 Author: Peter Hutterer <peter.hutterer@redhat.com> Date: Mon Oct 13 09:41:59 2008 +1030 Add XF86Battery, XF86Bluetooth, XF86WLAN, XF86UWB to keysymdb. commit 214ea6f5fd6aeaa7303ea4a69f9aedabf219ec4c Author: Peter Hutterer <peter.hutterer@who-t.net> Date: Thu Jul 24 15:44:26 2008 +0930 xkb: fix out-by-1 error in _XkbWriteKeyExplicit. Thanks to Michael Meeks, Novell Bug 369263. https://bugzilla.novell.com/show_bug.cgi?id=369263 commit e7ece39afc8e0adc3b6b1e70b337b98376754462 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Tue Oct 7 15:41:38 2008 -0700 Sun bug #6739431: double free in _X11TransConnectDisplay() Double free() introduced in bf53987eaf0fbd7f7627783fc39e7ee99e8361ba After copying original_hostname to phostname, set original_hostname to NULL, so we don't free the same pointer twice when we free both original_hostname and phostname. <http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6739431> commit 0877bc916afbd1ff8f1833edc930b765ea783576 Author: Daniel Stone <daniel@fooishbar.org> Date: Tue Sep 23 19:02:02 2008 +0300 configure.ac: Fix CC_FOR_BUILD logic error Turns out we were accidentally smashing it so that you couldn't set it externally at all. Oops. commit 58bf3aa746908f01c37be7045699e43a4e270944 Author: John Tapsell <johnflux@gmail.com> Date: Tue Sep 23 17:30:13 2008 +0300 Build: Use native compiler for makekeys makekeys needs to be run during the build process, as opposed to on the target, so build it with either of gcc or cc to fix cross-compiling. This can be overridden by setting $CC_FOR_BUILD. commit 340422a5c7a413faef18666cada27cee14615250 Author: Adam Jackson <ajax@redhat.com> Date: Wed Sep 17 12:54:34 2008 -0400 Fix the previous patch for the BadFont case. commit 2335eafe4b53c27f6f9ee1bab3e1f5842f896428 Author: Matthias Clasen <mclasen@redhat.com> Date: Wed Sep 17 10:43:52 2008 -0400 Bug #17616: Fix an XCB leak when the client has a non-fatal error handler. commit db0b85db29699be6bf7e78dede655d59ba926dfc Author: Rafael Ávila de Espíndola <rafael.espindola@gmail.com> Date: Sun Sep 14 19:15:26 2008 -0400 Fix problem with <dead_acute> <c> in pt_BR.UTF-8 The <dead_acute> <C> and <dead_acute> <c> lines in the pt_BR UTF-8 Compose file show "Ç" and "ç" (c with cedilla accent) (akin to the ISO 8859 pt_BR Compose file) as the string but specify the keysym and comment for Ć and ć (c with acute accent). This commit normalizes those two lines to match the specified string. Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=4671 Signed-off-by: James Cloos <cloos@jhcloos.com> commit b065c011baa69b69e3ea77c30d5e153c0d103e2d Author: Michael Verret <michael.verret@gmail.com> Date: Mon Sep 8 16:33:35 2008 -0400 Fix documentation typo Signed-off-by: James Cloos <cloos@jhcloos.com> commit 4213ea95185377bdd1b51e82933f331fc0f52e5b Author: James Cloos <cloos@jhcloos.com> Date: Sat Sep 6 04:19:19 2008 -0400 Remove extraneous <angle brackets> from the Ethiopic Compose file. The am_ET.UTF-8 Compose file submitted in: https://bugs.freedesktop.org/show_bug.cgi?id=11307 for the OLCP project used incorrect syntax. (It has angle brackets around the Uxxxx symbols on the right hand side rather than only on the left hand side). This bug is noted in OLPC’s ticket: http://dev.laptop.org/ticket/7474 http://dev.laptop.org/attachment/ticket/7474/olpc_7474_dead_vowels_libX11.patch commit 9df84b513dd2b6e65e6d528cfac6d4cc3ea46918 Author: James Cloos <cloos@jhcloos.com> Date: Mon Sep 1 17:49:33 2008 -0400 Complete the set of vulgar fractions Unicode 1.1 added thirds, fifths, sixths and eights; we might as well catch up. (Unicode and ISO 10646 have 1/7 (U2150), 1/9 (U2151), 1/10 (U2152) and 0/3 (U2189) in their pipelines, but those four can be added here after they are published.) commit a788792e9de95f8db0639557859722a35087481d Author: James Cloos <cloos@jhcloos.com> Date: Wed Aug 20 15:28:07 2008 -0400 nls (en_US) Re-remove long compositions that override shorter As reported in <https://bugs.freedesktop.org/show_bug.cgi?id=17228>: Commit a6f4bbf7 nls (en_US): remove long compositions that override shorter [...] removed some longer compose sequences because there are shorter ones which take preference over the longer. For example the sequences: <Multi_key> <apostrophe> <comma> <c> : U1E09 # ḉ <Multi_key> <apostrophe> <comma> <C> : U1E08 # Ḉ were removed becase there already was: <Multi_key> <apostrophe> <comma> : U201A # ‚ Then commit 4ba09125 Work on making the en_US and pt_BR UTF-8 Compose as similar as possible added exactly the same key sequences again. Obviusly they won't work. commit 55248e5c84c3fd8c349a3bb4cb15a1ec86989d74 Author: James Cloos <cloos@jhcloos.com> Date: Thu Jul 17 21:01:42 2008 -0400 Add more <Multi_key> <cedilla> Compose tuples The last commit missed the el_GR UTF-8 Compose.pre as well as the various ISO 8859 locales which have compose sequences generating ‘WITH CEDILLA’ characters. (Interestingly, some of the 8859 locales already supported <Multi_key> <cedilla> for some CEDILLA characters, but not for Ç or ç.) This is further work on bug 10397. commit 4ba091255bb953d53078ba5619d6751052c739f7 Author: James Cloos <cloos@jhcloos.com> Date: Thu Jul 17 17:16:50 2008 -0400 Work on making the en_US and pt_BR UTF-8 Compose as similar as possible. The eventual goal here is to have a single primary UTF-8 Compose file which the locale-specific UTF-8 Compose.pre files can #include. commit 254522d3c24e0590732fc03cdd61ff4564819d94 Author: James Cloos <cloos@jhcloos.com> Date: Thu Jul 17 17:13:36 2008 -0400 Add <Multi_key> <cedilla> Compose tuples The en_US and pt_BR UTF-8 Compose tables had support for using <comma> with <Multi_key> to enter CEDILLA characters. Bug 10397 requests support for using <cedilla> instead of <comma> in said sequences. This commit makes both styles work. commit 7dc907f6032e1d5cbe4da0e414bdf2c569c04b44 Author: James Cloos <cloos@jhcloos.com> Date: Sat Jun 28 15:25:23 2008 -0400 Fix commit 21e464ec682ab23ba20ddf6bd72c6db214cfbe01 The new block was added twice to the en_US.UTF-8 Compose.pre; delete the duplicate. commit 596e081b7457dcd1c4ad555ac140e6999239bc0d Author: Peter Hutterer <peter@cs.unisa.edu.au> Date: Sat Jun 28 20:14:05 2008 +0930 Fix unbalanced parenthesis in XKBlib.h # 16551 X.Org Bug 16551 <http://bugs.freedesktop.org/show_bug.cgi?id=16551> commit f6af6dd2f76c12b56ec166bb771457b9f08fe246 Author: Adam Jackson <ajax@redhat.com> Date: Tue Jun 24 13:16:53 2008 -0400 Bug #14898: Don't abuse the sprintf() implementation. The thing you're printing into should not itself appear in the list of things to print from, that's bad juju. Just use strcat(). commit 21e464ec682ab23ba20ddf6bd72c6db214cfbe01 Author: Khaled Hosny <khaledhosny@eglug.org> Date: Thu Jun 19 18:26:11 2008 -0400 NLS: Add Arabic Lam-Alef ligature compose sequences (bug #16426) Add some Arabic digraphs to utf-8 locales with a Compose.pre Signed-off-by: James Cloos <cloos@jhcloos.com> commit bf53987eaf0fbd7f7627783fc39e7ee99e8361ba Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Wed Jun 18 20:00:25 2008 -0700 Rework code to choose local connection types and fallback to others Adds --with-local-transport-order configure flag if you don't like the default ordering (which is platform dependent) Includes fixes for these Sun/Solaris bug ids: 6678250 X Commands returning incorrect display value unix:0.0 not <system>:0.0 <http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6678250> 6716481 libX11 should prefer Unix domain sockets over named pipes on Solaris <http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6716481> commit cf49e537014c3cb5aaee07e57400933e0bb72b6b Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Tue Jun 17 14:41:17 2008 -0700 Strip whitespace from end of lines in source files commit f76fd81dfbbd5cfae75c87ce0511e88e08529cf3 Author: Jeff Smith <whydoubt@yahoo.com> Date: Sun Jun 15 23:52:20 2008 -0500 Fix memory leak in XOpenDisplay Signed-off-by: Peter Hutterer <peter@cs.unisa.edu.au> commit fca0b0ba3f72b7284601d4690bba99fc80a92614 Author: Jens Herden <jens@khmeros.info> Date: Tue Jun 10 20:07:30 2008 +0300 NLS: Add Khmer compose sequences (bug #5706) Add some Khmer digraphs to all locales with a Compose.pre. commit e54cffb649b1622c17457e470cfab8cc56d38c97 Merge: 19802cc 721b574 Author: Daniel Stone <daniel@fooishbar.org> Date: Tue Jun 10 20:04:30 2008 +0300 Merge branch 'master' of ssh://git.freedesktop.org/git/xorg/lib/libX11 commit 721b574d36f1884c3f1bf7bd933646e2ed6680b5 Author: Peter Hutterer <peter@cs.unisa.edu.au> Date: Thu May 29 10:57:21 2008 +0930 Bump to 1.1.99.1 commit 631d32d13247d1cf52c0833d438c5b38b01b17a4 Author: Peter Hutterer <peter@cs.unisa.edu.au> Date: Wed May 28 17:31:59 2008 +0930 Require xproto 7.0.13 and libxcb 1.1.90 (for GenericEvents) commit e9195db7257e418f83707233baeeb84b225caf4f Merge: c34f76f a7f8556 Author: Peter Hutterer <peter@cs.unisa.edu.au> Date: Thu May 22 12:14:28 2008 +0930 Merge branch 'master' into xge commit 19802ccd3909145e3ba2f6c073271cb5f3701685 Author: Daniel Stone <daniel@fooishbar.org> Date: Mon May 19 19:22:31 2008 +0300 gitignore: Update with loads more bits from server commit a7f85567a3e850fba0c44571453d2852ab1a09be Author: Adam Jackson <ajax@redhat.com> Date: Tue May 13 10:28:39 2008 -0400 Bug #15884: Remove useless sleep()'s from the connection code. For network transports, there's enough delay in the network layer already without adding more. For local transports, just hurry up and fail if the server isn't there. commit c34f76f475bc632490122e67b5a82575d69d5569 Author: Peter Hutterer <peter@cs.unisa.edu.au> Date: Mon May 12 21:46:24 2008 +0930 Pull down extra bytes when reading a GenericEvent (non-xcb). I refuse to take any responsibily for this code. It works, I guess. But - all the flushing is done somewhere before that, so we might need to flush here. Under some circumstances anyway. Don't ask me, I'm an optical illusion. Build with xcb as transport layer highly recommended. commit c9b2ff1e6a607463993afa4a8d085857d97cc2f3 Merge: 17d7dcb 9129057 Author: Peter Hutterer <peter@cs.unisa.edu.au> Date: Mon May 12 17:58:37 2008 +0930 Merge branch 'master' into xge commit 9129057bdbff0ec9cd8bb780cf7f85f134a291eb Author: Teemu Likonen <tlikonen@iki.fi> Date: Wed May 7 21:44:22 2008 +0300 Change <dead_belowdot> to <dead_belowring> for U+1E00 and U+U1E01 Commit 6b6caeea830a977bdb54688cfb648d879821e752 added <dead_belowdot> <A> and <dead_belowdot> <a> compose sequences for letters U+1E00 and U+U1E01 (LATIN CAPITAL/SMALL LETTER A WITH RING BELOW). This caused duplicate compose sequences since these have already been defined. Also, using <dead_belowring> is more logical since the diacritic is indeed a "RING BELOW". commit 01a9cb58888d290cc3d319feec4ee4a0297a844c Author: Daniel Stone <daniel@fooishbar.org> Date: Wed May 7 20:04:44 2008 +0300 NLS: Make UTF-8 the default for Russian No-one uses 8859-5 anymore, so make the default for Russian UTF-8; the only other possible answer would be KOI8-R. Signed-off-by: Sergey V. Udaltsov <sergey.udaltsov@gmail.com> commit 407b81bfbbabf6feb565d6da22f9ef9a69016ab8 Author: Ross Burton <ross@burtonini.com> Date: Tue Apr 29 13:38:10 2008 +0300 NLS: Add interrobang to UTF-8 compose tables (bug #15653) It is what it says on the box. commit 0b6682303e9c61fefc3818acfda616b1e3691abf Author: Theppitak Karoonboonyanan <thep@linux.thai.net> Date: Mon Apr 28 11:51:25 2008 +0300 IM: Respect XMODIFIERS for Thai locale (bug #15719) When looking at Thai input methods, make sure XMODIFIERS is checked before jumping straight into built-in Thai processing, so external XIM servers such as SCIM can be used with Thai. commit c13aded1b2f830ba5004abb0ec5518f9ea16087e Author: Colin Harrison <colin.harrison-at-virgin.net> Date: Sat Apr 26 18:56:05 2008 +0100 Fix missing error condition commit f5c5ffc175cb383c92ea0fa8c08cfb087c5f3083 Author: Colin Harrison <colin.harrison-at-virgin.net> Date: Mon Apr 21 17:24:33 2008 +0100 Xlib warning fixes commit 6b6caeea830a977bdb54688cfb648d879821e752 Author: James Cloos <cloos@jhcloos.com> Date: Fri Apr 18 02:50:55 2008 -0400 Add some dead_key sequences to en_US.UTF-8 Compose table Make use of the new dead key symbols added to x11proto’s commit 44e24a27bca023cf7b799f191fe6d52e12efbe5f (which was in responce to bug #15446). commit 8f9b039580deaf658e464b7d6254064fcf183df6 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Mon Apr 14 19:09:42 2008 -0700 Update ac_define_dir macro in acinclude.m4 to 2008-04-12 version commit 9f5e96eb91ab55dd441c3e94b75caf48c588778f Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Mon Apr 14 18:21:14 2008 -0700 Fix mismatched brace indenting commit a19f9c65ee9e5e5d783feaa84998c36439b0288b Author: Bart Massey <bart@cs.pdx.edu> Date: Fri Apr 4 18:58:45 2008 -0700 added error check in Xcms color file parser; closes bug #15305 commit 12e8d0d01dd72ce98e7683ddb1bde181b7ed246f Author: Christian Weisgerber <naddy@mips.inka.de> Date: Tue Mar 18 07:30:05 2008 +0100 ConnDis: properly cast 'addr' before accessing it as a byte array. If you use XDM-AUTHORIZATION-1 authorization keys for remote X11 clients over IPv6, the clients are liable to segfaults. commit 64325f38bab082a8e0e9ce779a8e582de5c8588e Author: Josh Triplett <josh@freedesktop.org> Date: Sat Mar 15 12:29:33 2008 -0700 Fix fd.o bug 15023: make Xlib sync correctly given many void requests If given many requests without replies, Xlib may not sync until it flushes the output buffer. Thus, if Xlib can fit enough requests in the buffer to pass by the number of requests it would normally sync after (65536 - BUFSIZE/sizeof(xReq)), it will sync too late. The test case in bug 15023 demonstrated this by issuing a request with a reply (ListExtensions) at just the right time to get confused with the GetInputFocus reply issued in response to the sync 65,536 requests later; the test case used an async handler to watch the replies, since otherwise it could not issue a request without waiting for the response. When the test case failed, Xlib's sync handler would eat the ListExtensions reply, and the test case's async handler would see the GetInputFocus reply. Fix this by replacing SEQLIMIT with a function sync_hazard() that uses the buffer size to figure out when the sequence numbers could potentially wrap before the next flush. With this commit, the test case consistently passed, and the async reply handler always saw the ListExtensions reply. Commit by Jamey Sharp and Josh Triplett. commit a5395563bbee15fabe1e8fd7aa86f9f314d8d30e Author: Colin Harrison <colin.harrison@virgin.net> Date: Sat Mar 15 13:39:13 2008 -0400 Fix typo Signed-off-by: James Cloos <cloos@jhcloos.com> commit f07585ca27a8487bc66dfe41486c823f0fdcea7d Author: Daniel Stone <daniel@fooishbar.org> Date: Sat Mar 15 17:32:57 2008 +0200 configure.ac: Don't search for legacy X11 headers This can actually break cross-compiles, so don't do it anymore. commit bf69541238c7df6606340c0f389e5c47149b29c7 Author: Matthieu Herrb <matthieu.herrb@laas.fr> Date: Sun Mar 9 09:08:07 2008 +0100 nuke RCS Ids commit 5e98aed13e529638df744e45893c471d5f2014fb Author: Adam Jackson <ajax@redhat.com> Date: Thu Mar 6 16:10:33 2008 -0500 libX11 1.1.4 commit 8e085971dc661da9f80ff6b67747459c0fb15c08 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Thu Feb 28 20:17:41 2008 -0800 Man page typo fixes commit 1a1a42a3ca1dfaf42f1094936b71c140fc030fcb Author: Søren Sandmann Pedersen <sandmann@redhat.com> Date: Sun Feb 24 20:03:35 2008 -0500 XIM: Fix a hand when switching input context. Red Hat bug #201284. commit e02e4ccafcaf3eb8993152dfcbfbee0240ea2db2 Author: Adam Jackson <ajax@redhat.com> Date: Sun Feb 24 20:00:43 2008 -0500 Bug #14029: Don't LockDisplay() recursively. See also Red Hat bugzilla #326461. commit e5892467ae3308c8651be76e06db322dcbc08522 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Fri Feb 15 17:27:53 2008 -0800 Add support for building lint library with --enable-lint-library commit e3eb83ec6a9bffa63cdffd94f077c12f85ad7240 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Mon Feb 11 20:11:43 2008 -0800 Spell out number in XkbGetKeyVirtualModMap man page to avoid cpp errors from # commit d5ceed7a73a6b61758ddb6ff4e194955fbd5c185 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Fri Feb 8 16:46:46 2008 -0800 Add WM_LOCALE_NAME to list of properties set in XSetWMProperties comment commit 416a812200f24d19149dcc497e5c51a0608120f6 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Fri Feb 8 15:31:31 2008 -0800 XErrorDB updates for Render 0.9 & XFixes 4.0 commit 16a76091cd632e5a3708e235ff864b58f3e4613e Author: Kim Woelders <kim@woelders.dk> Date: Sat Dec 22 21:45:23 2007 +0100 Fix bs_BA entries in locale.dir.pre X.Org bug#13786 <http://bugs.freedesktop.org/show_bug.cgi?id=13786> commit 32115c563b87d2f37e3f9de70fbd0f4d9e424aea Merge: 8f0bd3f e8d4cef Author: James Cloos <cloos@jhcloos.com> Date: Fri Dec 14 22:43:47 2007 -0500 Merge branch 'master' of ssh://git.freedesktop.org/git/xorg/lib/libX11 commit 8f0bd3f445cbdcc67650f6e8e3baf2ed89cb3695 Author: James Cloos <cloos@jhcloos.com> Date: Fri Dec 14 22:42:59 2007 -0500 add a comment to en_US.UTF-8/Compose commit 4d6c45e60ed13d3b0fea10413873d6a74f9d6a3b Author: James Cloos <cloos@jhcloos.com> Date: Fri Dec 14 22:40:13 2007 -0500 Add <dead_stroke> compose sequences The added sequences match the existing <Multi_key> <slash> sequences. This is related to bug #12765¹. 1] https://bugs.freedesktop.org/show_bug.cgi?id=12765 commit e8d4cefa0837afa149a10e981528b368485a9e38 Author: Jeremy Huddleston <jeremy@yuffie.local> Date: Mon Dec 10 23:00:44 2007 -0800 Added launchd support. commit 17d7dcbfced4a9417b33507bd3fd9b7dd8268242 Merge: 5dfefd3 13ac804 Author: Peter Hutterer <peter@cs.unisa.edu.au> Date: Thu Dec 6 14:08:29 2007 +1030 Merge branch 'master' into xge commit 5dfefd3829d3ba7e41d5db0ad28e9dfee92fadd5 Merge: a68a1cd eff33ae Author: Peter Hutterer <peter@cs.unisa.edu.au> Date: Thu Dec 6 13:57:09 2007 +1030 Merge branch 'master' into xge Conflicts: src/xcb_io.c commit 13ac80469f6958cabac596834e203bd9cb6d4c94 Author: James Cloos <cloos@jhcloos.com> Date: Wed Dec 5 20:14:03 2007 -0500 Update the currency symbols block of en_US.UTF-8/Compose.pre Add XCOMM lines a la the existing NEW SHEQEL SIGN entry for the KIP, TUGRIK, DRACHMA. GERMAN PENNY, PESO, GUARANI, AUSTRAL, HRYVNIA and CEDI SIGNs. commit b0a8f2ec4ba698841683f8ce389f9d72e6bce53e Author: Anton Zinoviev <anton@lml.bas.bg> Date: Wed Dec 5 19:56:03 2007 -0500 Additions to the Compose file for UTF-8 From bug #5371¹ Commit 5cf5bc76642bfece7cb5b76faf414bf445f14489 left out this change from those in attachment #4122². The post³ on xorg resulted in only a positive reply⁴ from Daniel, so this block is now also commited. 1] https://bugs.freedesktop.org/show_bug.cgi?id=5371 2] https://bugs.freedesktop.org/attachment.cgi?id=4122 3] http://article.gmane.org/gmane.comp.freedesktop.xorg/20628 4] http://article.gmane.org/gmane.comp.freedesktop.xorg/23966 Signed-off-by: James Cloos <cloos@jhcloos.com> Acked-by: Daniel Stone <daniel@fooishbar.org> commit 438d02ebc08ee171cf1d3936f4c81050d428ab92 Author: James Cloos <cloos@jhcloos.com> Date: Tue Dec 4 17:25:39 2007 -0500 Fix the <U\x+> keysyms in the en_US.UTF-8 Compose file Based on src/KeysymStr.c and src/StrKeysym.c and comments in bugs #11930¹ and #5129² it is clear that <U100XXXXX> is invalid; those should be in the form U plus the hex of the UCS Code Point. The 0x01000000 is ORed in by the code. This update fixes all of those. 1] https://bugs.freedesktop.org/show_bug.cgi?id=11930 2] https://bugs.freedesktop.org/show_bug.cgi?id=5129 commit 02e04059c89e175f51647e3b031344f743286b34 Merge: 1254c57 b57129e Author: James Cloos <cloos@jhcloos.com> Date: Tue Dec 4 06:55:04 2007 -0500 Merge branch 'master' of ssh://git.freedesktop.org/git/xorg/lib/libX11 commit 1254c57dd3a8d6ea87041b2f63024f99094f290f Author: James Cloos <cloos@jhcloos.com> Date: Tue Dec 4 06:53:55 2007 -0500 Use the new dead_psili and dead_dasia keysyms added to proto/x11proto 7.0.11 Inspired by bug 11930¹: Commit 40ed4eef92e31fcf7ea0a436e1a00cdf49484c1b to x11proto added dead_psili and dead_dasia keysyms. Make use of them in the en_US.UTF-8 and el_GR.UTF-8 Compose files. This was done with a pair of perl scripts based on the one quoted in the log for commit c76d30253f1483ac8200ad5c032a818907e65030. 1] https://bugs.freedesktop.org/show_bug.cgi?id=11930 commit b57129ef324c73ee91c2a796b800c4b45f4d4855 Author: Jeremy Huddleston <jeremy@yuffie.local> Date: Mon Dec 3 20:04:19 2007 -0800 Use __APPLE__ instead of __DARWIN__ commit b9c032e1d5ed08510863dfb91b8bda588e6c8c9e Author: Jeremy Huddleston <jeremy@yuffie.local> Date: Wed Nov 28 16:43:49 2007 -0800 Define __DARWIN__ when host_os == darwin* as needed in SetLocale.c commit 4b91ed099554626f1ec17d5bdf7bd77ce1a70037 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Wed Nov 21 16:50:04 2007 -0800 X.Org Bug #4312: incorrect comment asterisk in XAnyEvent.3x man page X.Org Bugzilla #4312 <http://bugs.freedesktop.org/show_bug.cgi?id=4312> Protect /* sequences from cpp pre-processor removal without transforming to Unicode mathematical asterisk character commit 2af660c2fcd15c86c66459bfc074c190ea1462e6 Author: Jamey Sharp <jamey@minilop.net> Date: Mon Oct 29 10:46:20 2007 -0700 Two threads can request sequence sync and XID fetch simultaneously. So don't assert that they can't. This makes the Xlib/XCB implementation of _XAllocID more closely resemble the traditional Xlib version. commit 6e5485e0a5e3ab738becad12193e760c5fee83a4 Author: Samuel Thibault <samuel.thibault@ens-lyon.org> Date: Sun Oct 28 04:44:00 2007 -0800 X.Org Bug #12983: Typos in ./man/XChangeKeyboardControl.man <http://bugs.freedesktop.org/show_bug.cgi?id=12983> commit 24527c92fd1f433ea135e85ec876a94a529fe500 Author: Yann Droneaud <ydroneaud@mandriva.com> Date: Wed Oct 24 19:26:07 2007 +0300 XIM: Properly initialise client event Make sure all ClientMessage fields are initialised to 0 before we send it. commit e41477f37b0d9b74a056d22dbf0073a94eecb9d6 Author: Daniel Stone <daniel@fooishbar.org> Date: Wed Oct 24 19:22:22 2007 +0300 Colours: Fix --disable-xcms Disable large tracts of colour management code when passing --disable-xcms. commit 11ea09745efa8de7dc82fe30ebd2393f08390957 Author: Eric Anholt <eric@anholt.net> Date: Fri Aug 31 17:30:33 2007 -0700 Bug #2081: Note the range limitation of XSetScreenSaver arguments. commit 31540f1438ec63faf37044f2fd654b335ddf80f0 Author: Kristian Høgsberg <krh@redhat.com> Date: Wed Aug 29 19:50:57 2007 -0400 Add GLX 1.4 requests and errors. commit 7c996f78914c77fe17e9f4feede980d895d9df51 Author: Eric Anholt <eric@anholt.net> Date: Tue Aug 28 15:15:11 2007 -0700 Add XF86 keyboard/monitor brightness keysyms to the keysymbdb. commit fa4effe82759f864a22a2dc6c920fa72ddb175a8 Author: Eric S. Raymond <esr@thyrsus.com> Date: Sun Jan 14 10:48:00 2007 -0800 Bug #9658: Bad markup on XIfEvent.3x X.Org Bugzilla #9658 <https://bugs.freedesktop.org/show_bug.cgi?id=9658> commit 74cba78daa738ef4d92096107d95c1a585933666 Author: Eric S. Raymond <esr@thyrsus.com> Date: Sun Jan 14 10:43:00 2007 -0800 Bug #9655: Bad markup in XrmUniqueQuark.3x X.Org Bugzilla #9655 <https://bugs.freedesktop.org/show_bug.cgi?id=9655> commit 4341d1a34b2a2e460b58131b6fd81935f3355bbc Author: Eric S. Raymond <esr@thyrsus.com> Date: Sun Jan 14 10:43:00 2007 -0800 Bug #9654: Bad markup in XrmGetFileDatabase.3x X.Org Bugzilla #9654 <https://bugs.freedesktop.org/show_bug.cgi?id=9654> commit 2db713252090cae08f0200fecad4fc25fb64c8b1 Author: Eric S. Raymond <esr@thyrsus.com> Date: Sun Jan 14 10:40:00 2007 -0800 Bug #9653: Bad markup in XQueryColor.3x X.Org Bugzilla #9653 <https://bugs.freedesktop.org/show_bug.cgi?id=9653> commit 9d3ceea4b902e0471824c1e07ad64342b9a1114e Author: Eric S. Raymond <esr@thyrsus.com> Date: Sun Jan 14 10:40:00 2007 -0800 Bug #9652: Bad markup in XDrawArc.3x X.Org Bugzilla #9652 <https://bugs.freedesktop.org/show_bug.cgi?id=9652> commit 2e7e0748d353d7f53bbd65ec6bf0df8758528ddc Author: Eric S. Raymond <esr@thyrsus.com> Date: Sun Jan 14 10:39:00 2007 -0800 Bug #9651: Bad markup in XcmsColor.3x X.Org Bugzilla #9651 <https://bugs.freedesktop.org/show_bug.cgi?id=9651> commit c316aaf0aab06951db9dc5c9c1148bfea835d885 Author: Eric S. Raymond <esr@thyrsus.com> Date: Sun Jan 14 10:38:00 2007 -0800 Bug #9650: Bad markup in XLoadFont.3x manual page X.Org Bugzilla #9650 <https://bugs.freedesktop.org/show_bug.cgi?id=9650> commit ca5d9a625ea0965853fa9e74a448b8c29c78ec95 Author: Eric S. Raymond <esr@thyrsus.com> Date: Tue Jan 2 10:18:00 2007 -0800 Bug 9523: Markup problems in XQueryExtension.3x X.Org Bugzilla #9523 <https://bugs.freedesktop.org/show_bug.cgi?id=9523> commit fe713c616e29ba19c179b43c18eca1035079ce18 Author: Ian Romanick <idr@us.ibm.com> Date: Tue Aug 21 14:56:33 2007 -0700 Make sure nls/am_ET.UTF-8/Makefile is created by configure. commit e3430616f26b68e1439143cbe10732f3fc329d20 Author: Eric S. Raymond <esr@thyrsus.com> Date: Tue Jan 2 08:40:00 2007 -0800 Bug #9516: Markup error in XAllocWMHints.3x X.Org Bugzilla #9516 <https://bugs.freedesktop.org/show_bug.cgi?id=9516> commit d8fe979fc929833e8c754aed32641786d5a0622b Merge: 21ca953 4ec1723 Author: James Cloos <cloos@jhcloos.com> Date: Mon Aug 20 15:34:50 2007 -0400 Merge branch 'master' of ssh://git.freedesktop.org/git/xorg/lib/libX11 commit 21ca953337fb221b85345bf35ce1a98a0dcb2bf2 Author: James Cloos <cloos@jhcloos.com> Date: Mon Aug 20 15:34:03 2007 -0400 Fix typo The code <U1000000D> was used where <U10000DC> was obviously intended. It is possible that <Udiaeresis> should be used instead, if that will not break anyone’s setup. commit 4ec1723fff729440cd3349c1f95d87d2a6ba89cf Author: James Cloos <cloos@jhcloos.com> Date: Mon Aug 20 15:25:48 2007 -0400 Add compose file for Ethiopic to match new keyboard in xkeyboard-config From bug report: https://bugs.freedesktop.org/show_bug.cgi?id=11307 commit eff33ae525337ce2026be135a26464c7b1237113 Author: James Cloos <cloos@jhcloos.com> Date: Sat Aug 18 17:58:23 2007 -0400 Patch for Catalan locales From bugzilla bug 10943¹: There are several Catalan locale codes which presently can be used in X11 systems; especially after they were accepted in belocs-locale-data². In the following patches, I³ add ca_AD, ca_FR and ca_IT Catalan locale codes. For instance, without this, using ca_AD (actually a quite used locale⁴) some applications (eg. Emacs or Skype) cannot display Catalan diacritic marks as you type them. 1] https://bugs.freedesktop.org/show_bug.cgi?id=10943 2] http://lists.debian.org/debian-devel-changes/2005/07/msg01429.html 3] Toni Hermoso Pulido <toniher@softcatala.org> 4] https://launchpad.net/~ubuntu.cat/+members commit 1f980cb7d022f53d0aee9e793b08203fb888e86e Author: James Cloos <cloos@jhcloos.com> Date: Sat Aug 18 17:47:04 2007 -0400 Add additional Euro signs to compose Inspired by bug 7419¹ make all of: C=, =C, c=, =c, E=, =E, e=, E= after <Multi_key> generate € U+20AC EURO SIGN. 1] https://bugs.freedesktop.org/show_bug.cgi?id=7419 commit 4b0a14521449dfce8b4347bd17243efd1d3eae2d Author: James Cloos <cloos@jhcloos.com> Date: Sat Aug 18 17:29:08 2007 -0400 Compose fix for Latin-1 (from Debian) The description from bugzilla bug 7417¹ is: We've been shipping this patch for some time in Debian now. The problem description from the patch header is reproduced below. You may want to note the licensing issue mentioned below, but we've been shipping it because the method by which this particular patch was generated and updated was also given below. This patch by Denis Barbier. The X11 protocol states that Unicode keysyms are in the range 0x01000100 - 0x0110FFFF. If the result of composing characters is a Unicode codepoint, X returns the corresponding Unicode keysym, which is its Unicode codepoint augmented by 0x01000000. Latin-1 characters must not appear with their Unicode codepoints in compose files, otherwise the returned composed character lies in the range 0x01000000 - 0x010000FF which is not valid. There are two solutions: either fix composing routines to return 0xZZ instead of 0x010000ZZ (where Z is an hexadecimal digit), or replace U00ZZ by their corresponding keysyms in compose files. The latter is more logical and less error prone, so compose files will be patched. Many applications accept these invalid Unicode keysyms, but few of them don't, most notably xemacs. Only UTF-8 locales are affected. This has been fixed very recently in XFree86 CVS (but not xorg), but for licensing reasons, this patch is not grabbed. Instead automatic conversion is performed by: sed -e '/XK_LATIN1/,/XK_LATIN1/!d' /usr/include/X11/keysymdef.h \ | grep -v deprecated | grep 0x0 \ | sed -e 's/0x0/U0/' -e 's/XK_//' \ | awk '{ printf "s/\\b%s\\b/%s/ig\n", $3, $2; }' > sedfile for f in nls/*.UTF-8/Compose.pre do sed -f sedfile $f > $f.tmp && mv $f.tmp $f done [I edited the quoted script to update it for the current location of the installed keysymdef.h and the current layout of the libX11 repo. -JimC] I applied the script, not the patch attached to the bugreport. 1] https://bugs.freedesktop.org/show_bug.cgi?id=7417 commit 5cf5bc76642bfece7cb5b76faf414bf445f14489 Author: James Cloos <cloos@jhcloos.com> Date: Sat Aug 18 17:13:41 2007 -0400 Add some compose sequences Add some compose sequences from the patch in bug 5371 (attachment 4122). Cf: https://bugs.freedesktop.org/show_bug.cgi?id=5371 https://bugs.freedesktop.org/attachment.cgi?id=4122 commit d4002e389dd69780dfc7c2f7bd3cb0c57f05d4f8 Author: James Cloos <cloos@jhcloos.com> Date: Sat Aug 18 13:57:31 2007 -0400 Fix SMP Compose targets The compose targets from the SMP (plane 1) were incorrect. At some point the 0x10000 bit had been lost. commit f1ed3da9a30a1f0264fdc7d1c6466f27fe2a3d7d Author: Jeremy C. Reed <reed@glacier.reedmedia.net> Date: Thu Aug 16 17:37:22 2007 -0500 Fix a mutex reference-counting bug. I was told that some systems have a much more permissive libpthread. I was asked to commit this. This is from NetBSD's X source. (I didn't receive any feedback on xorg list for over two weeks about this.) commit ac00a44b4875de70382da5a40dd87f976e5b9327 Author: Tilman Sauerbeck <tilman@code-monkey.de> Date: Wed Aug 1 20:36:03 2007 +0200 Bumped version to 1.1.3. commit 76fae9cba1e9bdf7f0eb2ff2b90153d622136cf0 Author: Joerg Sonnenberger <joerg@netbsd.org> Date: Fri Jul 27 11:15:47 2007 -0700 Fail properly on errors in recursive make. commit 1a18319b3bde08dd9ef69c7cd735a76000cf3177 Author: Brice Goglin <Brice.Goglin@ens-lyon.org> Date: Thu Jul 26 23:31:15 2007 +0200 Add missing override parameter in XrmCombineDatabase prototype in the manpage Reported by Arnaud Giersch <arnaud.giersch@iut-bm.univ-fcomte.fr> in http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=393434 and https://bugs.freedesktop.org/show_bug.cgi?id=9948 Also add the type of the second argument in XrmMergeDatabases. commit 6f0764d4b56f64786b4980839ca262f10a51af6f Author: Brice Goglin <Brice.Goglin@ens-lyon.org> Date: Thu Jul 26 22:53:52 2007 +0200 Clarify return value of XGetCommand in case of error in the manpage Reported by Sean Perry <shalehperry@attbi.com> in http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=133348 and https://bugs.freedesktop.org/show_bug.cgi?id=9828 commit b8bef57342632cc2d25580bb7daa3839bae04d89 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Wed Jul 25 17:44:06 2007 -0700 Include comment/copyright/license for AC_DEFINE_DIR in acinclude.m4 commit 590cde811a79375231c59ed8583e02b111ed567c Author: Kean Johnston <kean@armory.com> Date: Thu Jul 19 16:44:20 2007 -0700 Reset hostname when falling back from :0 to hostname/localhost:0 as well commit d334665e619e9db657a2ea2764a8b852401d4a3f Author: Kean Johnston <kean@armory.com> Date: Tue Jul 17 16:34:30 2007 -0700 LOCALCONN fallback changes DisplayString() output, breaks KDE See <http://lists.freedesktop.org/archives/xorg/2007-July/026443.html> commit 8e76bcf3cafda85058ce5f35f1f81929f4772f72 Author: Olivier Blin <blino@mandriva.org> Date: Mon Jun 11 18:32:09 2007 +1000 fix XGetMotionEvents arguments order - Fixes bug 11222 commit c2f88cdf5cd9c94b77e5bfdac572b5ac06ab4aa8 Author: Jamey Sharp <jamey@minilop.net> Date: Sun Jun 10 16:19:59 2007 -0700 Fix locking in _XimGetWindowEventmask. Now that XFilterEvent drops the Display lock before invoking callback functions, _XimGetWindowEventmask is called without the lock held. So when it called _XGetWindowAttributes, a variant of XGetWindowAttributes that does not lock the Display, Xlib/XCB would assert: xcb_xlib.c:50: xcb_xlib_unlock: Assertion `c->xlib.lock' failed. Should fix Gentoo #156367, Ubuntu #87947, Debian #427296. And others? commit 65f0ab5d46d80d55fc04d4eb14fa05f130eb8b9c Author: Jamey Sharp <jamey@minilop.net> Date: Sun Jun 3 21:41:47 2007 -0700 Move security fixes to the top of NEWS, and fix spacing. Commit by Josh Triplett and Jamey Sharp. commit a549a258b8fcb1ba9d0c1b01b72967e385f67cab Author: Jamey Sharp <jamey@minilop.net> Date: Sun Jun 3 21:29:40 2007 -0700 Add NEWS item for bugfix in commit e2c1d788d1fe7bd2d34756493951552441e59b8c. Commit by Josh Triplett and Jamey Sharp commit 5123b77a3d32d3ad479462f319762c328278aed9 Author: Jamey Sharp <jamey@minilop.net> Date: Sun Jun 3 21:24:54 2007 -0700 Xlib/XCB: Inline and simplify handle_event, since only process_responses calls it now. Commit by Josh Triplett and Jamey Sharp. commit 582ca690ea4f3ffd2b94826c4db97229bd3c7238 Author: Jamey Sharp <jamey@minilop.net> Date: Sun Jun 3 20:59:12 2007 -0700 Xlib/XCB: Fix _XReadEvents to always enqueue a new event, even if an error occurs Commit c337f9de7cfd89f983f83956b7457a274dd412f3 broke the invariant that _XReadEvents always enqueues at least one event even if an error occurred, because the one call to xcb_wait_for_event would then return an error, not an event, and nothing else ensured that process_responses would obtain an event. Fix this by reverting most of c337f9de7cfd89f983f83956b7457a274dd412f3 and f417570735aac865eb6b576d1ea76b5bfcd8573b and implementing the correct fix. In process_responses, wait_for_first_event now serves as a flag, cleared when actually handling an event. Commit by Josh Triplett and Jamey Sharp. commit e2c1d788d1fe7bd2d34756493951552441e59b8c Author: Jamey Sharp <jamey@minilop.net> Date: Sun Jun 3 17:33:23 2007 -0700 Xlib/XCB: Only remove pending_requests when there are provably no more responses. commit 7a6dbd4b07ca0a49c30ca7a1d2437eafb2e15eab Author: Josh Triplett <josh@freedesktop.org> Date: Sun Jun 3 15:39:39 2007 -0700 Bump version number to 1.1.2, and add NEWS entry for 1.1.2 Signed-off-by: Josh Triplett <josh@freedesktop.org> commit 416f38f2e67ee1979b3d2feac6f06b3670238804 Author: Josh Triplett <josh@freedesktop.org> Date: Sun Jun 3 12:13:44 2007 -0700 Revert "Revert "include: don't distribute XlibConf.h"" This reverts commit 79fa3d8070d95b960ba486f2439225872471dadd. Re-revert the XlibConf.h change, which prevented distribution, not installation. commit 79fa3d8070d95b960ba486f2439225872471dadd Author: Josh Triplett <josh@freedesktop.org> Date: Sat Jun 2 22:05:16 2007 -0700 Revert "include: don't distribute XlibConf.h" This reverts commit c9e28e05ae01ce8a29bea09df759b6271865b44c. The installed XlibInt.h includes XlibConf.h , so libX11 should ship XlibConf.h. (Commit c9e28e05ae01ce8a29bea09df759b6271865b44c didn't actually prevent automake from shipping XlibConf.h, because it used nodist_x11include_HEADERS rather than nodist_HEADERS.) commit f417570735aac865eb6b576d1ea76b5bfcd8573b Author: Jamey Sharp <jamey@minilop.net> Date: Sat Jun 2 17:59:15 2007 -0700 Xlib/XCB: inline wait_or_poll_for_event, which now had only one caller. Commit by Josh Triplett and Jamey Sharp. commit c337f9de7cfd89f983f83956b7457a274dd412f3 Author: Jamey Sharp <jamey@minilop.net> Date: Sat Jun 2 17:46:41 2007 -0700 Xlib/XCB: Ensure _XReadEvents reads at least one new event and blocks for exactly one event. Commit by Jamey Sharp and Josh Triplett. commit 7f66c897f04806b75e574b55b48921b48045e3f9 Author: Jamey Sharp <jamey@minilop.net> Date: Sat Jun 2 16:43:39 2007 -0700 Update _XReply's copy of _XCBUnlockDisplay's guts. We introduced this bug in 6b81cbbedfb521ce046b77ee3cc54e884a1dc0c5. Also add a comment in _XCBUnlockDisplay to discourage this problem from respawning. Commit by Josh Triplett and Jamey Sharp. commit 740ead23512f8d2eaafaa69e514f1ebafad475b9 Author: Jamey Sharp <jamey@minilop.net> Date: Sat Jun 2 16:01:01 2007 -0700 Xlib/XCB: Avoid re-crashing after _XIOError. Commit by Josh Triplett and Jamey Sharp. commit 6b81cbbedfb521ce046b77ee3cc54e884a1dc0c5 Author: Jamey Sharp <jamey@minilop.net> Date: Sat Jun 2 12:30:30 2007 -0700 Hold XCB's Xlib lock even when only the user lock (XLockDisplay) is held. An Xlib client can query Display state, such as with NextRequest, while it holds only the Xlib user lock (between XLockDisplay and XUnlockDisplay), so XCB requests in other threads should be blocked when the Xlib user lock is held. We acquire the lock even when XInitThreads was not called, so that pure XCB code can use multiple threads even in an otherwise single-threaded Xlib application. Commit by Josh Triplett and Jamey Sharp. commit 95523387d619af5b400748898d722e080b5ce1a6 Author: Jamey Sharp <jamey@minilop.net> Date: Sat Jun 2 11:57:39 2007 -0700 Allow re-entrant Xlib calls from _XIOError. Some libraries try to clean up X resources from atexit handlers, _fini, or C++ destructors. To make these work, the Display lock should be downgraded to a user lock (as in XLockDisplay) before calling exit(3). This blocks Xlib calls from threads other than the one calling exit(3) while still allowing the exit handlers to call Xlib. This assumes that the thread calling exit will call any atexit handlers. If this does not hold, then an alternate solution would involve registering an atexit handler to take over the lock, which would only assume that the same thread calls all the atexit handlers. Commit by Josh Triplett and Jamey Sharp. commit 91b02b8064f4e0bcc56019f0722914850008a597 Author: Tilman Sauerbeck <tilman@code-monkey.de> Date: Thu May 17 19:07:34 2007 +0200 More constification. commit a4f3841940158351f9424c3f59b305cce877177d Author: Tilman Sauerbeck <tilman@code-monkey.de> Date: Thu May 17 00:29:43 2007 +0200 Constified composite text charset table. commit 0581c0aa6039e6b2abb9f7b0a4f9904d8e01f00e Author: Tilman Sauerbeck <tilman@code-monkey.de> Date: Wed May 16 23:19:22 2007 +0200 Have the compiler fill in hexTable so we don't have to do it at runtime. commit 0e8d9ca47dab0d069e305d5784d05f2ade04f0a8 Author: Tilman Sauerbeck <tilman@code-monkey.de> Date: Wed May 16 19:36:23 2007 +0200 More constification. commit 6d2bed8f04942b4de086a519ac693e729c9fdeea Author: Tilman Sauerbeck <tilman@code-monkey.de> Date: Wed May 16 19:18:20 2007 +0200 Constify and clean up token table. commit 6c508eab5df5d517f7e4cbe6087308cd53a564b2 Author: Tilman Sauerbeck <tilman@code-monkey.de> Date: Wed May 16 18:24:42 2007 +0200 Constified more tables. commit e699c4231c205ef00d687b6412308d031b99806b Author: Tilman Sauerbeck <tilman@code-monkey.de> Date: Wed May 16 18:01:23 2007 +0200 Constified error list. commit a68a1cd7cb990ba276fbc36a7591044d78b3d3c1 Author: Peter Hutterer <peter@cs.unisa.edu.au> Date: Tue May 15 16:54:01 2007 +0930 Add XGenericEvent definition and handling for long events. commit c76d30253f1483ac8200ad5c032a818907e65030 Author: Jan Willem Stumpel <jstumpel@planet.nl> Date: Fri May 4 12:00:49 2007 -0700 Update el_GR.UTF-8/Compose.pre to match changes in xkeyboard-config cvs Cf: https://bugs.freedesktop.org/show_bug.cgi?id=10851 https://bugs.freedesktop.org/show_bug.cgi?id=10824 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=386385 The greek keyboard definition was changed to replace dead_horn and dead_ogonek with U0313 COMBINING COMMA ABOVE (aka Psili) and U0314 COMBINING REVERSED COMMA ABOVE (aka Dasia). This patch modifies the Greek Compose.pre to match. It is generated by the script Jan Willem Stumpel <jstumpel@planet.nl> posted to 386385@bugs.debian.org: #!/usr/bin/perl while (<>) { print $_; if (/dead_horn/) { s/dead_horn/U0313/; print $_; } elsif (/dead_ogonek/) { s/dead_ogonek/U0314/; print $_; } } commit a48386ce6b5f8fd2d9dc11a966c9bf5da59f3831 Author: Magnus Kessler <Magnus.Kessler@gmx.net> Date: Tue May 1 15:20:08 2007 +0200 Switched function definitions from K&R to ANSI style. commit 605d357074d556a05a3fba2e85cbea36a3204248 Author: Tilman Sauerbeck <tilman@code-monkey.de> Date: Tue May 1 14:47:03 2007 +0200 Tweaked configure output about the man pages suffix. commit 9824b40d2af4ca2376512c1be7743da0d5065900 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Sat Apr 28 00:42:18 2007 -0700 Fix typo in nroff macro in XkbAddGeomOverlayKey.man commit f93849dcc68bd5042ea0884e5190dc7c35b31d68 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Sat Apr 28 00:30:55 2007 -0700 Protect C comments and #defines in XKB man pages from being mangled by cpp commit f2f27d4763c7665e422fab10b96b4cf5ad6c0a6f Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Sat Apr 28 00:14:50 2007 -0700 Add Makefile to process/install XKB man pages commit d9954c6f6f3a8c406b946acd0d034ff83c656156 Author: Dennis Arellano <Dennis.Arellano@Sun.COM> Date: Thu Aug 19 00:00:00 1999 -0700 Add man pages for XKB API's Man pages originally written for X11R6.4 integration to Solaris 7 11/99 Sun bug id 4258344: Add new XKB API manpages for 6.4 upgrade <http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=4258344> (Volunteer needed to convert prototypes in man pages to ANSI C style...) commit f640a49b5e2ebf29f9d655df544c63bf826f619a Author: Tilman Sauerbeck <tilman@code-monkey.de> Date: Fri Apr 20 18:39:59 2007 +0200 Markup tweak for XOpenIM. commit e972b0bb255af4f3258217852542faf5afa60b28 Author: Julien Cristau <jcristau@debian.org> Date: Fri Apr 20 18:35:09 2007 +0200 Bug #9695: Fixed a few argument types in the XOpenIM manpage. commit b4e2276f329fa42397cb8609cfcd34ebafd3d96b Author: Julien Cristau <jcristau@debian.org> Date: Fri Apr 20 18:28:52 2007 +0200 Bug #9697: Fixed documentation of XVisualInfo struct. The "depth" member was said to be unsigned int, but it's signed. commit 4068f3dae01c630f825002673b1d3a047ad61863 Author: Julien Cristau <jcristau@debian.org> Date: Fri Apr 20 16:41:21 2007 +0200 Bug #9696: refer to XDefineCursor() instead of XDefineCusor(). commit 603c2f88d4e57ce1a3c16e8b6246866e6edd8fa8 Author: Tilman Sauerbeck <tilman@code-monkey.de> Date: Sat Apr 7 14:42:55 2007 +0200 Use unistd.h to get getresuid() and friends. This works since we now have _GNU_SOURCE defined. commit 0300f295bbd3a0c7c46baac8e0a27aeaf53c9d9b Author: Tilman Sauerbeck <tilman@code-monkey.de> Date: Sat Apr 7 14:27:12 2007 +0200 Bug #10562: Define _GNU_SOURCE on glibc systems. commit a225a0be48770beb689d5ac5da97073634f7deab Author: Tilman Sauerbeck <tilman@code-monkey.de> Date: Fri Apr 6 12:46:25 2007 +0200 For nls/*.pre, allow people to comment lines by starting them with '##'. This fixes a bunch of cpp warnings from nls/en_US.UTF-8/Compose.pre. Fixing that file would have been a larger diff, and using ## may be nicer to use anyway. commit 1c75a9479011e5f1ad01c950628d0ef5a302d8b6 Author: Tilman Sauerbeck <tilman@code-monkey.de> Date: Fri Apr 6 11:59:31 2007 +0200 Bug #10475: Fixed lots of char*/const char* mixups. I didn't fix all of them, as that would require touching public headers. commit 680dd50193b5b3fcabdd3f1fcbd6a889d5a95c54 Author: Matthias Hopf <mhopf@suse.de> Date: Thu Apr 5 11:53:18 2007 +0200 Fix 64bit issues with reallocation. commit 4d38aeaca42d0bdfe34a833a142ee4d895de03bf Author: Tilman Sauerbeck <tilman@code-monkey.de> Date: Wed Apr 4 18:41:18 2007 +0200 Fixed a few warnings. commit 7dc7ef398b6ad90ccd1680ed9cd1cfdd47312f5a Author: Matthieu Herrb <matthieu@roadrock.(none)> Date: Tue Apr 3 15:39:52 2007 +0200 Multiple integer overflows in the XGetPixel() and XInitImage functions CVE-2007-1667 commit 0284b144340a455a4b5b5011d81ac5a610372291 Author: David Baron <dbaron@dbaron.org> Date: Fri Mar 30 17:07:46 2007 +0200 Bug #7703: Fixed XSetSizeHints() et al wrt use of uninitialized data. Now only those fields of the respective hint struct are set that are actually valid in the input data. The changed functions are: XSetSizeHints(), XSetWMHints() and XSetWMSizeHints(). commit 0994faa0c76c45b106442db461b8a30a3e1c9395 Author: Tilman Sauerbeck <tilman@code-monkey.de> Date: Thu Mar 29 17:31:25 2007 +0200 Fixed the change from the previous SendEvent commit. Testing a different patch than the one you commit is bad, right? commit 398d75528a84f4b8414eb0e363cf53b1b16f6fdf Author: Tilman Sauerbeck <tilman@code-monkey.de> Date: Wed Mar 28 22:23:44 2007 +0200 Bug #10292: Fixed a memory leak related to XOpenDisplay() in the XCB code. commit ab0bcd07957cecc8e7c0e75d5160a625e91264fe Author: David Baron <dbaron@dbaron.org> Date: Wed Mar 28 22:21:40 2007 +0200 Bug #7713: Initialize all of the event's fields before sending it. commit bc80f9fe3ccce40ee41246b97470c4f0519756ad Author: Julien Cristau <jcristau@debian.org> Date: Sun Mar 18 13:14:48 2007 +0100 Bug #9279: Fixed a file descriptor leak. commit c9e28e05ae01ce8a29bea09df759b6271865b44c Author: Daniel Stone <daniel@fooishbar.org> Date: Sat Dec 16 00:45:19 2006 +0200 include: don't distribute XlibConf.h Since XlibConf.h is built by configure, don't distribute it. commit dd1705ced2cac6b4b6b21e79272fcf9bed4bf376 Merge: 129bbb9 769b985 Author: Jeremy C. Reed <reed@glacier.reedmedia.net> Date: Thu Dec 14 14:23:20 2006 -0600 Merge branch 'master' of git+ssh://git.freedesktop.org/git/xorg/lib/libX11 commit 129bbb9f9114a571556fa3a24f15ba58a5cdb2de Author: Jeremy C. Reed <reed@glacier.reedmedia.net> Date: Thu Dec 14 14:21:19 2006 -0600 For NetBSD, define the XTHREADLIB and XTHREAD_CFLAGS. commit 769b9854f7eb1d6d20dd0b4a1c1215ad8e1b77b6 Author: Daniel Stone <daniel@fooishbar.org> Date: Wed Dec 6 18:53:00 2006 +0200 Makefile.am: make ChangeLog hook safer Make ChangeLog hook as safe as possible. (cherry picked from f5d6a3d24095c7ffed86705995d0874c885e7676 commit) commit 8a8185a649e93b90ffa820387ffdca831227f5a9 Author: Josh Triplett <josh@freedesktop.org> Date: Thu Nov 30 18:33:13 2006 -0800 Add autogen.sh to EXTRA_DIST. commit efe817f95ef8d05e863c83147e903140bc860de4 Author: Jamey Sharp <jamey@minilop.net> Date: Thu Nov 30 17:58:35 2006 -0800 Release libX11 1.1.1. commit f637a5b03164263a3af2e644cf655e52b015f1bb Author: Ross Combs <rocombs@cs.nmsu.edu> Date: Sat Nov 25 14:45:17 2006 -0800 Debian bug #354315: Clarify return value in XGetWindowAttributes man page This man page does not discuss the actual return values of the function, but says they are of type "Status". One might assume that this means you could compare it with the "Success" macro. One would be wrong. The X functions seem to have two three types representing status. If it is an "int" there are a number of error codes or "Success" which can be compared against. If it is a bool, the result can be compared with "True" or "False". If the return type is "Status" it appears that the return type is either 0 or 1. Unfortunately the value for Success is zero, so it is important to distinguish between the first two types of return values and the third; otherwise the conditional will be inverted. XGetWindowAttributes() is one of the functions which returns zero for failure. The man page should make this clear. commit c6a0b0f18ed1242eeb908f5cf767ab8381edd456 Author: Jamey Sharp <jamey@minilop.net> Date: Sat Nov 25 14:23:45 2006 -0800 Bug #9154: Always process an event for _XReadEvents, even if an error occurs Previously, process_responses (in the wait_for_first_event case called from _XReadEvents) considered any return from xcb_wait_for_event sufficient to think it had processed an event. If xcb_wait_for_event returned an error, and no more events occurred before process_responses called xcb_poll_for_event, process_responses would try to return with dpy->head NULL, and would fail an assertion for the _XReadEvents postcondition. Now, process_responses continues using xcb_wait_for_event until it gets an event. commit d56e78acce9b2aa1dd1bf172afedaa3bccd5e1c8 Author: Tilman Sauerbeck <tilman@code-monkey.de> Date: Sat Nov 25 05:29:31 2006 -0800 Bug #9153: Fix access to freed memory. The fix for bug #8622 introduced a smaller bug where _XReply would read memory shortly after freeing it. This patch caches the needed value in a stack-allocated variable before the heap-allocated memory is freed. commit 934ca763bbc0dd7ae460469bfc000ba101602bcc Author: Josh Triplett <josh@freedesktop.org> Date: Fri Nov 24 19:57:58 2006 -0800 libx11 doesn't use inputproto in public headers; don't require it in x11.pc Based on a Debian patch. commit 4255997ef2d92740d51f6e63e9eabcfa089683f0 Author: Josh Triplett <josh@freedesktop.org> Date: Thu Nov 23 07:19:32 2006 -0800 Release libX11 1.1 commit a1168e11ec9377307c51a7271faec3bf88a63a66 Author: Jamey Sharp <jamey@minilop.net> Date: Tue Nov 21 17:52:34 2006 -0800 Add note in man-page that XListFontsWithInfo is not thread-safe. _XReply drops the Display lock, so the value of dpy->request may change before _XReply is called again. I discovered this by inspection a year or two ago. I'm pretty confident in the claim, and nobody has come up with an argument for why it's safe despite appearances. commit 67abe024268c6b1fdee516e5d3a046ccffd7e80a Author: Jamey Sharp <jamey@minilop.net> Date: Sat Nov 18 15:39:26 2006 -0800 Bug #8622: Fix response processing order for threaded apps Previously, process_responses (the common code for _XReply, _XReadEvents, and _XEventsQueued) took the current request sequence number as an argument, and did some highly complicated processing to attempt to process responses in order across threads. This didn't actually work. Now, process_responses handles responses in order, by adding condition variables to the list of outstanding requests in dpy->xcb->pending_requests, and blocking on them when those requests should get processed to allow _XReply to process them; if actually called from _XReply, it returns when _XReply's request should get processed. _XReply broadcasts on the condition variable after it has read its reply and re-acquired the display lock. Another great commit brought to you by Jamey Sharp, Josh Triplett, the Gobby collaborative text editor, conspy, and ridiculous amounts of SSH forwarding. Signed-off-by: Josh Triplett <josh@freedesktop.org> Signed-off-by: Jamey Sharp <jamey@minilop.net> commit 941f02ede63baa46f93ed8abccebe76fb29c0789 Author: Lars Knoll <lars@trolltech.com> Date: Wed Nov 8 12:17:41 2006 -0800 Don't hold the display lock around callbacks to the application. This fixes an XCB locking assertion failure, particularly with emacs. commit e494ecaac1ec8a22bd9a85f800fca74d02e9d358 Author: Diego 'Flameeyes' Pettenò <flameeyes@gentoo.org> Date: Tue Nov 7 09:32:00 2006 -0800 Add xcb-xlib dependency to x11.pc when built against XCB. commit 2302008a3793eb4df8ede777d54fe06505c47eaf Author: Eric Anholt <eric@anholt.net> Date: Mon Nov 6 17:11:42 2006 -0800 XCB: Allocate the right amount of memory for dpy->lock_fns. Fixes a crash I was experiencing on startup of anything using gdk. commit 5f860655be88108b03ccd97470a0814819254bf0 Author: Jamey Sharp <jamey@minilop.net> Date: Thu Nov 2 17:55:31 2006 -0800 Release libX11 1.1 RC2 (1.0.99.2). commit a6f4bbf7b1d725b0f04bd660f57b861a76b19831 Author: Benno Schulenberg <bensberg@justemail.net> Date: Sun Oct 29 03:10:30 2006 +0300 nls (en_US): remove long compositions that override shorter (bug #2286) Remove long compositions that override (or get overriden by) later shorter compositions, e.g. a four-key compose sequence that gets overriden by a later three-key compose sequence. commit 0280bf11ef88673a9b5bba3a91a599260f1f0949 Author: Benno Schulenberg <bensberg@justemail.net> Date: Sun Oct 29 03:08:36 2006 +0300 nls: remove shadowed compose entries (bug #2286) Remove compose entries shadowed by others later on. commit d118f2b1ef10997194b281524177dea7396da7dd Author: Benno Schulenberg <bensberg@justemail.net> Date: Sun Oct 29 03:07:15 2006 +0300 nls: remove duplicate compose entries (bug #2286) Remove a bunch of duplicate entries from various Compose files. commit 5e1cc2fe20e5904ca1e05a4cb7be13d450a593bb Author: Caolan McNamara <caolanm@redhat.com> Date: Sun Oct 29 02:46:15 2006 +0300 XKB geometry: fix leaks in GetKeyboardByName (bug #8099) Don't leak the name and value of every property we parse, as well as the name of every colour. commit 686bb8b35acf6cecae80fe89b2b5853f5816ce19 Author: Matthias Hopf <mhopf@suse.de> Date: Wed Oct 18 14:25:04 2006 +0200 Fix double open of compose file. Issue found by Kees Cook <kees@canonical.com>. commit d3e65cb8cddf08913d83c9df2bb9b1517f2ad3a8 Author: Jamey Sharp <jamey@minilop.net> Date: Sat Oct 14 21:25:10 2006 -0700 XCB: check for and handle I/O errors in _XGetXCBBuffer. commit 256eba6b40c5f811a03b04abf5f85f728ee3ab5d Author: Jamey Sharp <jamey@minilop.net> Date: Wed Oct 11 00:06:50 2006 -0700 XKB bugfix: SyncHandle must be called after UnlockDisplay, not before. commit 1eedf1bd033e496843cfde42ae4ae5a119298605 Author: Jamey Sharp <jamey@minilop.net> Date: Tue Oct 10 23:03:28 2006 -0700 Add correct Display locking to XKB functions. Some XKB functions didn't correctly call LockDisplay or UnlockDisplay. This patch fixes at least some instances of that problem. Thanks to Magnus Kessler <Magnus.Kessler@gmx.net> for finding these bugs and proposing a fix, which this patch is based on. commit e17c2cbe9fbaa1600d4b9463ec800a874b0d87cd Author: David Nusinow <dnusinow@debian.org> Date: Tue Oct 10 22:11:05 2006 -0400 Dynamically generate internal manpage section using __libmanpagesuffix__ so that it actually matches the section if you don't use 3X11 commit e53557da969b706dbc843f6fde3db31ffe382e0f Author: Jamey Sharp <jamey@minilop.net> Date: Sat Oct 7 21:00:36 2006 -0700 Release libX11 1.1 RC1 (1.0.99.1). commit bf237409c5fce32c557d298f62f44d456c2b5bc8 Merge: ba47719 2d426d1 Author: Jamey Sharp <jamey@minilop.net> Date: Sat Oct 7 21:07:16 2006 -0700 As XCB support is about to be released in libX11, stable is now subsumed by master. commit ba477191c67ce93e61423cc1abe35275704cce50 Author: Jamey Sharp <jamey@minilop.net> Date: Sat Oct 7 03:48:13 2006 -0700 XCB: Don't rely on having the definition of struct xcb_setup_t available. commit 117b55cbd0b0ce51362df88363ed83d44a493ac7 Author: Jamey Sharp <jamey@minilop.net> Date: Fri Oct 6 16:27:31 2006 -0700 xcb_poll_for_event no longer takes an 'int *error' out-parameter. commit caaa8e8a55e837b3585c1dee7bef194fc4c79d16 Author: Josh Triplett <josh@freedesktop.org> Date: Fri Oct 6 16:26:11 2006 -0700 Actually ship Xxcbint.h commit 7b027e53b5e393082f4f515c8ba18077eb97163f Author: Josh Triplett <josh@freedesktop.org> Date: Fri Oct 6 16:25:50 2006 -0700 Clean ChangeLog only in "make maintainer-clean", not "make clean" ChangeLog requires a git repo to generate; make clean and make distclean shouldn't get rid of it. commit cab22e02e78b3e5b8a73d1cd55cf6686426b47e0 Author: Josh Triplett <josh@freedesktop.org> Date: Fri Oct 6 16:24:58 2006 -0700 Add ChangeLog and "make dist"-generated files to .gitignore commit e4c7cfdee4a40e466c0c6b370cabd432e9e855a0 Author: Josh Triplett <josh@freedesktop.org> Date: Fri Oct 6 15:53:27 2006 -0700 Add manual pages for XGetXCBConnection and XSetEventQueueOwner commit 688224cea95e453f94c5a602dc6fce84bc93dfc0 Author: Josh Triplett <josh@freedesktop.org> Date: Fri Oct 6 13:41:16 2006 -0700 Remove unnecessary prototype for _XFreeDisplayStructure in xcb_disp.c commit ab728ca372288d0db1b486c265e34c1376f29104 Author: Josh Triplett <josh@freedesktop.org> Date: Fri Oct 6 12:36:39 2006 -0700 XCL is dead; long live Xlib/XCB Rename all instances of "XCL" to Xlib/XCB-derived names. The only user-visible change: rename the include file <X11/xcl.h> to <X11/Xlib-xcb.h>; programs will need to change their #include lines to match. Remove the XCL cast inlines from Xlib-xcb.h. commit 5b73093203039d307eb7ab3845c3ced207e9e26c Author: Josh Triplett <josh@freedesktop.org> Date: Fri Oct 6 11:33:49 2006 -0700 Add XCB developers to AUTHORS commit 1cb71ff139276a0a58c60ea5f261f64b94706b9b Author: Josh Triplett <josh@freedesktop.org> Date: Fri Oct 6 11:21:28 2006 -0700 Fix email addresses in README commit 12f038669278019594ca0ed53dadcf4e84092422 Author: Jamey Sharp <jamey@minilop.net> Date: Fri Oct 6 02:13:05 2006 -0700 XCB: Handle all responses in order of monotonically increasing sequence number. commit f392680273278b43079302206897f794e60f3c70 Author: Josh Triplett <josh@freedesktop.org> Date: Fri Oct 6 01:11:08 2006 -0700 Actually install x11-xcb.pc, and ship x11-xcb.pc.in commit f1fcad2e3fd17aaf1294f1d8e9f406fd5b32a863 Author: Jamey Sharp <jamey@minilop.net> Date: Thu Oct 5 18:32:29 2006 -0700 XCB: correctly handle failure to connect to X server. commit e754b3b078d556c7861da56aad47d244e9199e06 Author: Josh Triplett <josh@freedesktop.org> Date: Thu Oct 5 17:44:22 2006 -0700 Split public Xlib/XCB functions into libX11-xcb We can never change the libX11 soname, and we don't want to commit to never changing the public Xlib/XCB functions, so split them into a separate library libX11-xcb. This also means that a program linked solely against libX11 should work with either Xlib or Xlib/XCB, which will make life easier for package maintainers. Signed-off-by: Josh Triplett <josh@freedesktop.org> Acked-by: Jamey Sharp <jamey@minilop.net> commit ffd367f708b295abaedf3a23a1bfd4710d171d6f Author: Jamey Sharp <jamey@minilop.net> Date: Wed Oct 4 17:16:46 2006 -0700 No longer #include Xmd from xcl.h: we do not need it. commit 3aff149d42ba8ed620091971b3766bdf96c62aaf Author: Jamey Sharp <jamey@minilop.net> Date: Wed Oct 4 16:58:32 2006 -0700 XCB: Revert locking to simple wrapper around libX11's normal locks. No more recursive mutexes, no more banging XCB's I/O lock in-place, and reduces the differences between the previous stable release and an XCB-enabled one. Sadly, Xlib's pluggable thread functions work again too, now. I apologize to the world. commit 8ff122fb529bdb1c2b9a86b12d06b6da1b35d708 Author: Jamey Sharp <jamey@minilop.net> Date: Mon Sep 25 04:54:52 2006 -0700 Link explicitly against XCB's Xlib compatibility functions. commit bde3cd123d65a2f36ee0c417f5f231b7e01d0671 Author: Jamey Sharp <jamey@minilop.net> Date: Mon Sep 25 04:13:20 2006 -0700 libxcb now installs header files in <xcb>, not <X11/XCB>. commit 87d00207f5a1f25a45a153618739cd6481814f89 Author: Ian Osgood <iano@quirkster.com> Date: Sun Sep 24 23:39:01 2006 -0700 Track XCB's "Great Renaming". commit 85a5e98dff9b7752fae157fad9b8c9825cb0efab Author: Jamey Sharp <jamey@minilop.net> Date: Tue Sep 12 23:02:42 2006 -0700 Quit using XCBGetQueuedRequestRead. commit a61936fc4e9bd93b108764bbacd5b8f786e51915 Author: Tollef Fog Heen <tfheen@err.no> Date: Wed Aug 30 00:05:54 2006 +0300 nls: use _XlcUtf8Loader for en_US (bug #7982) Use _XlcUtf8Loader instead of _XlcUnicodeLoade,r bringing it into line with every other locale. commit abcc7e1865cdfbd591f6520cfe4257f0b0b1c03e Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Wed Aug 23 18:49:30 2006 -0700 When opening display, if LOCALCONN fails, fall back to UNIXCONN, then TCPCONN Port to X11R7 of Sun bug fix 4061225 by Alex Chen for X11R6 - when failing to connect on a named pipe, try a Unix socket first, to better support people who replace their X servers with ones that don't support named pipe transport. <http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=4061225> commit 1ddc44c1cada7e926bd4787406444ce7c36b61e1 Author: Mark Brown <mark.brown@sun.com> Date: Thu Jul 27 19:17:10 2006 -0700 Sun bug 1149809: Document event delivery when grab is terminated. commit 171107b03ac89d94f9006c7cda242aeefb9ecd16 Author: Dennis Arellano <Dennis.Arellano@Sun.COM> Date: Thu Jul 27 18:47:06 2006 -0700 Sun bug 4091271: XGetWindowProperty is missing a crucial prop_return description Document that 32-bit format properties are always returned in arrays of type long, even on systems where long is 64-bits. <http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=4091271> commit 8309efe6550877cd0bf22979904b3f6bd3e6cffa Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Mon Jul 24 15:52:00 2006 -0700 Add support for "make lint" to check code with lint/sparse/etc. commit 931e02fbd1acd09aae2b0954c34342c86c72dff6 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Mon Jul 24 15:50:52 2006 -0700 ANSIfy some static function definitions commit 20b7abcaac324d90454de63f32f4a2b398e69e63 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Mon Jul 24 15:01:40 2006 -0700 Fix sparse warning: Using plain integer as NULL pointer commit d158ab29930513c4097f5b67e7bea08ed2bfd62c Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Mon Jul 24 14:00:24 2006 -0700 Remove unused variable commit 30377000375bdb958042dcb1f38503c94ef21eaf Author: Eric Anholt <anholt@FreeBSD.org> Date: Fri Jul 21 18:55:36 2006 -0400 Bug #7188: Fix the documentation of XUrgencyHint (not UrgencyHint). commit 4eba45879aea4e415ab550ee56b900d060099110 Author: Matthieu Herrb <matthieu.herrb@laas.fr> Date: Sun Jul 16 10:55:39 2006 +0200 set GIT_DIR=${srcdir}/.git for git-log commit 2d426d1f2608fedb77bd7d010dabece76b8d4a60 Author: Aaron Plattner <aplattner@nvidia.com> Date: Tue Jul 11 13:27:49 2006 -0700 Add a .PHONY to ensure the ChangeLog isn't stale. Setting the ChangeLog rule as phony forces it to be re-run even when the ChangeLog file already exists. Research indicates .PHONY is portable to BSD and Solaris make. (cherry picked from b8a98809ed81e1226775e6447ef219ffc01334b5 commit) commit b8a98809ed81e1226775e6447ef219ffc01334b5 Author: Aaron Plattner <aplattner@nvidia.com> Date: Tue Jul 11 13:27:49 2006 -0700 Add a .PHONY to ensure the ChangeLog isn't stale. Setting the ChangeLog rule as phony forces it to be re-run even when the ChangeLog file already exists. Research indicates .PHONY is portable to BSD and Solaris make. commit 8f2be66089b88e4ed6acb0211ea107f4bb910bd3 Author: Mayank Jain <majain@redhat.com> Date: Tue Jul 11 19:42:47 2006 +0100 add Indian language locales Add as, kn, ml, or, ur, and te locales. commit a92eb6785699bbc9c6c3813f6af3bb9431a3f6b0 Author: Matthias Hopf <mhopf@suse.de> Date: Tue Jul 4 12:16:30 2006 +0200 Fix for autoconf 2.60 issue. Updated AC_DEFINE_DIR. Reverted datarootdir change. commit 644f4828b15bce42b597eb123ba0bbc372c46c03 Author: Keith Packard <keithp@neko.keithp.com> Date: Sat Jul 1 21:31:23 2006 -0700 Work around recent autoconf (2.59?) changes in directory expansion. Recent autoconf versions have changed how directory names are managed in the configure.ac script; automatic 'eval' invocations now occur as a part of the AC_DEFINE_DIR macro which make it imperative that AC_DEFINE_DIR be executed before the variables are used in further macro definitions. Also, ${datadir} is apparantly an old name for ${datarootdir} as ${datadir} doesn't get expanded correctly by AC_DEFINE_DIR. This looks like an autoconf bug, but it is easy to work around by just using ${datarootdir} instead of ${datadir}. commit be70a31229aa106aff0a09d78c00812682cd3475 Author: Keith Packard <keithp@neko.keithp.com> Date: Sat Jul 1 01:56:05 2006 -0700 Xlib/XCB: handle 32-bit sequence wrap. Replace broken sequence compares with XCB_SEQUENCE_COMPARE (copied from XCB). Account for XCB sequence 0 handling. commit 99c711707ad08e1396e123b1c7df687c560a489a Author: Donnie Berkholz <spyderous@gentoo.org> Date: Thu Jun 29 19:43:20 2006 -0700 Bump version to 1.0.3. commit cde3c0dd72af2b490e80cffca962e3487dd31be4 Author: Donnie Berkholz <spyderous@gentoo.org> Date: Thu Jun 29 19:39:36 2006 -0700 Bug #7349: Missed one of the setuid fixes. (cherry picked from e9614c963b532f46a7932c2305a4b177a996a222 commit) commit df3fef8983d96c59d481c4cdaf1f271d54a116d2 Author: Matthias Hopf <mhopf@suse.de> Date: Thu Jun 29 18:59:57 2006 +0200 Update to final Compose cache directory location. (cherry picked from abda4d223e9cce9ac6e7b5d82a5680d9a502e52a commit) commit 912ef198292d3053daa810f842510e5d62ded0f0 Author: Matthias Hopf <mhopf@suse.de> Date: Thu Jun 29 17:41:41 2006 +0200 Fix alignment of trees and wide chars in the cache. (cherry picked from 40a64c61f8bc33d497e1224e02c41dea2d424d97 commit) commit 2ece832118b3ee5d8ed19f1ee9b1c822b70ec6e9 Author: Matthias Hopf <mhopf@suse.de> Date: Wed Jun 28 19:17:03 2006 +0200 First (dummy) entry of compose caches was not initialized and thus contained varying garbage. (cherry picked from f442dcaa56f8ecb7443e8e51c88ed97e10dbdba3 commit) commit e9614c963b532f46a7932c2305a4b177a996a222 Author: Donnie Berkholz <spyderous@gentoo.org> Date: Thu Jun 29 19:39:36 2006 -0700 Bug #7349: Missed one of the setuid fixes. commit abda4d223e9cce9ac6e7b5d82a5680d9a502e52a Author: Matthias Hopf <mhopf@suse.de> Date: Thu Jun 29 18:59:57 2006 +0200 Update to final Compose cache directory location. commit 40a64c61f8bc33d497e1224e02c41dea2d424d97 Author: Matthias Hopf <mhopf@suse.de> Date: Thu Jun 29 17:41:41 2006 +0200 Fix alignment of trees and wide chars in the cache. commit f442dcaa56f8ecb7443e8e51c88ed97e10dbdba3 Author: Matthias Hopf <mhopf@suse.de> Date: Wed Jun 28 19:17:03 2006 +0200 First (dummy) entry of compose caches was not initialized and thus contained varying garbage. commit bdbe464d774e01d317f67c63ebbda2fd0edbbdd1 Author: Donnie Berkholz <spyderous@gentoo.org> Date: Thu Jun 22 23:59:03 2006 -0700 Delete ChangeLog, and add a rule to autogenerate it for distribution. Also add 'foreign' to AM_INIT_AUTOMAKE to make autotools happy with not having a ChangeLog. (cherry picked from b0edfb8df16ab8c9959b83a4c966d55a59c4e295 commit) commit b0edfb8df16ab8c9959b83a4c966d55a59c4e295 Author: Donnie Berkholz <donnie@comet.(none)> Date: Thu Jun 22 23:47:38 2006 -0700 Delete ChangeLog, and add a rule to autogenerate it for distribution. Also add 'foreign' to AM_INIT_AUTOMAKE to make autotools happy with not having a ChangeLog. commit dd54981aa76e9dfdc4c3302d6105b4b229447c84 Author: Donnie Berkholz <donnie@comet.(none)> Date: Thu Jun 22 15:47:38 2006 -0700 Bump version to 1.0.2. commit c93539d974a67f596a5eb5b65042d26602546c72 Author: Matthieu Herrb <matthieu@deville.herrb.com> Date: Tue Jun 20 21:04:03 2006 +0200 Check setuid() return value. (cherry picked from 5169d0e08ff6acb350a6ea768623f5ff0b85b05f commit) commit 605533f814ab7892991578706a6458f61a89ca4d Author: Derek Wang <derek.wang@sun.com> Date: Mon Jun 19 11:05:37 2006 -0700 Sun bug 6209243: XExtentsOfFontSet causes segfault when font set not loaded (cherry picked from eff50c94a07194297e705da53d9fbb3a40fb9ad4 commit) commit 5bbd0822c5a926de0ed293437fb9f2b75cf3c4f4 Author: Scott Revelt <scott.revelt@sun.com> Date: Fri Jun 16 19:11:13 2006 -0700 Sun bug 4022903: Xcms routines may fail if sscanf() is looking for separators based on locale that doesn't match those used in the Xcms.txt (cherry picked from 94f3213fc4bd6ec49bfb68e8b4a4fddea2bf3baa commit) commit 0b05cd4da6134df527fb010384a9fd569bd5d6a3 Author: Alan Coopersmith <alanc@alf.(none)> Date: Fri Jun 16 18:53:33 2006 -0700 Add *~ to ignore emacs droppings (cherry picked from c33d7b8282ac196b36229be26442296768c16f3e commit) commit 214658b76b56768f69c3959a11525aae7813f448 Author: Matthias Hopf <mhopf@suse.de> Date: Fri Jun 16 15:36:40 2006 +0200 Bug #3104: Compose table cache for faster X11 application starts. (cherry picked from 1f4c9893ade08bad30c9bd12a36bee57d30b001e commit) commit 13968a23aaea838ba4b69e42e8900f803499e091 Author: Matthias Hopf <mhopf@suse.de> Date: Tue Jun 13 20:23:46 2006 +0200 Bug #3104: Compose table cache for faster X11 application starts. (cherry picked from 4fe22647e6010a2886c2f3a7093adeaeb6678faa commit) commit e7f8bca08f5476d0ca262097639ac7d424bb4d10 Author: Lubos Lunak <llunak@suse.de> Date: Mon Jun 12 18:48:08 2006 +0200 Bug #3104: Compose table cache for faster X11 application starts. (cherry picked from 1d28a655629a11ea7fd1e5df4c7b77dd4b63e3be commit) commit f506aaf8ac9aae1ee8daaef6cde34ee85aecd641 Author: Matthias Hopf <mhopf@suse.de> Date: Fri Jun 9 18:24:02 2006 +0200 Bug #3104: Compose table cache for faster X11 application starts. Part 1: Pointerless compose data structure, using indices instead of pointers, needed for mmap()ing data structure. (cherry picked from 9354351fcb8baeaab85250d14409cfb4fa50f3e9 commit) commit 0e6d5e979aacb0c295ce79369ecc5f22ffa7922c Author: Jamey Sharp <jamey@minilop.net> Date: Wed Jun 7 20:29:05 2006 -0700 Fix bug #7035: unnecessary memmove in XOpenDisplay. Using memmove on the connection setup data causes a problem for XCB, but making Xlib stop doing that should be harmless for non-XCB as well. (cherry picked from b18713ec3f36a10b3cdb1e16f9550e1d2e05dff0 commit) commit cd7328c46ae72903ed02832828891b2dab4d5ee0 Author: Daniel Stone <daniels@preemptive.fooishbar.org> Date: Sat Jun 3 13:51:51 2006 +0300 Fix threading support on GNU/kFreeBSD systems. (Robert Millan) (cherry picked from e3acee88cfcc4ef0fa8a7db39763a5ebe2e985cb commit) commit c336eb6b80a6f91da1d0b3d28634a2cfde324670 Merge: 33556ca ad9ebbd Author: Donnie Berkholz <donnie@comet.(none)> Date: Thu Jun 22 14:25:35 2006 -0700 Merge branch 'stable' of http://people.freedesktop.org/~jamey/libX11 into stable commit 213dacad21740466e7ab31b01d3fc513fe4b3e74 Author: Daniel Stone <daniel@fooishbar.org> Date: Thu Jun 22 17:20:59 2006 +0300 Bump to 1.0.99.0 to avoid confusion. commit efedfd68e31bcee2d21ac340be8dc9e1825ec890 Merge: e3acee8 4b8eb5d Author: Daniel Stone <daniel@fooishbar.org> Date: Thu Jun 22 16:53:45 2006 +0300 Merge branch 'master' of git+ssh://git.freedesktop.org/srv/git.freedesktop.org/git/xorg/lib/libX11 commit 4b8eb5d4a1da73a94b5a6ab12e34784aae4c79c5 Merge: 5169d0e eff50c9 Author: Matthieu Herrb <matthieu@deville.herrb.com> Date: Tue Jun 20 21:05:15 2006 +0200 Merge branch 'master' of git+ssh://herrb@git.freedesktop.org/git/xorg/lib/libX11 commit 5169d0e08ff6acb350a6ea768623f5ff0b85b05f Author: Matthieu Herrb <matthieu@deville.herrb.com> Date: Tue Jun 20 21:04:03 2006 +0200 Check setuid() return value. commit eff50c94a07194297e705da53d9fbb3a40fb9ad4 Author: Derek Wang <derek.wang@sun.com> Date: Mon Jun 19 11:05:37 2006 -0700 Sun bug 6209243: XExtentsOfFontSet causes segfault when font set not loaded commit 94f3213fc4bd6ec49bfb68e8b4a4fddea2bf3baa Author: Scott Revelt <scott.revelt@sun.com> Date: Fri Jun 16 19:11:13 2006 -0700 Sun bug 4022903: Xcms routines may fail if sscanf() is looking for separators based on locale that doesn't match those used in the Xcms.txt commit c33d7b8282ac196b36229be26442296768c16f3e Author: Alan Coopersmith <alanc@alf.(none)> Date: Fri Jun 16 18:53:33 2006 -0700 Add *~ to ignore emacs droppings commit 1f4c9893ade08bad30c9bd12a36bee57d30b001e Author: Matthias Hopf <mhopf@suse.de> Date: Fri Jun 16 15:36:40 2006 +0200 Bug #3104: Compose table cache for faster X11 application starts. commit 4fe22647e6010a2886c2f3a7093adeaeb6678faa Author: Matthias Hopf <mhopf@suse.de> Date: Tue Jun 13 20:23:46 2006 +0200 Bug #3104: Compose table cache for faster X11 application starts. commit 1d28a655629a11ea7fd1e5df4c7b77dd4b63e3be Author: Lubos Lunak <llunak@suse.de> Date: Mon Jun 12 18:48:08 2006 +0200 Bug #3104: Compose table cache for faster X11 application starts. commit 9354351fcb8baeaab85250d14409cfb4fa50f3e9 Author: Matthias Hopf <mhopf@suse.de> Date: Fri Jun 9 18:24:02 2006 +0200 Bug #3104: Compose table cache for faster X11 application starts. Part 1: Pointerless compose data structure, using indices instead of pointers, needed for mmap()ing data structure. commit b18713ec3f36a10b3cdb1e16f9550e1d2e05dff0 Author: Jamey Sharp <jamey@minilop.net> Date: Wed Jun 7 20:29:05 2006 -0700 Fix bug #7035: unnecessary memmove in XOpenDisplay. Using memmove on the connection setup data causes a problem for XCB, but making Xlib stop doing that should be harmless for non-XCB as well. commit ad9ebbd2424bc2699944ffdf4e19e13f9dd8ab84 Author: Daniel Stone <daniels@preemptive.fooishbar.org> Date: Sat Jun 3 12:57:55 2006 +0300 Bug #2186: Add cs_CZ.iso8859-2 alias. commit 9e7765e0b1cbaae6643072d91066ba1201b36227 Author: Daniel Stone <daniel@fooishbar.org> Date: Fri Jun 2 02:46:29 2006 +0300 nls: Serbian (sr_CS) update (#5575) Bug #5575: 'Yugoslavia' has changed to Serbia & Montenegro, along with a corresponding locale change. Update compose.dir.pre, locale.alias.pre, and locale.dir.pre. (Milos Komarcevic) commit a4ac2242b588da23044a20aa999ae84d4de7b2d8 Author: Daniel Stone <daniel@fooishbar.org> Date: Fri Jun 2 02:24:25 2006 +0300 im: add Braille input method (#6296) Bug #6296: Add a Braille input method. (Samuel Thibault) commit 90de1e2e141ec591048a76cb695579ef809a28d3 Author: Daniel Stone <daniel@fooishbar.org> Date: Fri Jun 2 02:22:17 2006 +0300 xkb support: small typo commit 4c3e34bece7402f08139d34d1ef5834e3cf533c7 Author: Daniel Stone <daniel@fooishbar.org> Date: Fri Jun 2 01:50:24 2006 +0300 en_US.UTF-8 Compose.pre: updates from Simos (#5129) Bug #5129: Numerous updates from Simos Xenitellis, fixing Unicode keysyms, adding Unicode character names, removing duplicate entries, et al. commit 0c6473dd329c7334ae511884bcb6e73e632c784f Author: Daniel Stone <daniel@fooishbar.org> Date: Fri Jun 2 01:44:53 2006 +0300 nls: fix use of non-keysym dead_space (#5107) Bug #5107: Change users of dead_space to space. commit 6f99f6349de5120f1cb7e02fbc97849341bc48e8 Author: Daniel Stone <daniel@fooishbar.org> Date: Fri Jun 2 01:41:18 2006 +0300 optional XKB support fix Fix compilation with --disable-xkb. commit 217d43ed44ced901122093af3ef1294e1736bb77 Author: Daniel Stone <daniel@fooishbar.org> Date: Fri Jun 2 01:39:12 2006 +0300 i18n: separate data and lib directories Break out locale data into separate data and library directories, under $(datadir) and $(libdir), respectively, by default. commit 92fa7fcde8df22830fca7c0275ab201033f7909c Author: Adam Jackson <ajax@benzedrine.nwnk.net> Date: Thu May 11 14:04:48 2006 -0400 libXcursor.so.1, not libXcursor.so commit 135b4df13ed7c35dbae8975f302fc1fb8412d7c0 Author: Daniel Stone <daniels@preemptive.fooishbar.org> Date: Wed May 10 18:06:03 2006 +0300 XKBMisc.c: use Xfree, not xfree Use Xfree() instead of xfree() when freeing interps. commit 3518d772b08e3433bc28b4d8d293fa53ca25f0ee Author: Daniel Stone <daniels@preemptive.fooishbar.org> Date: Wed May 10 14:51:37 2006 +0300 locale.alias.pre: bg_BG typo fix Fix typo (be_BG.UTF-8 rather than bg_BG.UTF-8) in locale.alias.pre. commit cc533db60cb64dc163c66451933a9bf77c519062 Author: Daniel Stone <daniels@endtroducing.localdomain> Date: Sun Apr 9 22:22:03 2006 +0300 Coverity #203, #204: Fix potential NULL dereferences. commit b83adf7dfd6157694fe4f232012fef36cd9666da Author: Daniel Stone <daniels@endtroducing.localdomain> Date: Sun Apr 9 22:20:25 2006 +0300 Coverity #205: Fix potential NULL dereference. commit 2d0cd10ad907864d0136739eaac459779c9a5332 Author: Daniel Stone <daniels@endtroducing.localdomain> Date: Sun Apr 9 22:18:20 2006 +0300 Coverity #209: Fix potential NULL dereference. (Alan Coopersmith) commit dc2f3966068d66a564aa452cab9f0c26657fa1df Author: Daniel Stone <daniels@preemptive.research.nokia.com> Date: Fri Apr 7 18:11:52 2006 +0300 Coverity #826: Fix potential memory leak. commit 23df609ec451a01c77e8f31ecc85c5af7c62efed Author: Daniel Stone <daniels@preemptive.research.nokia.com> Date: Fri Apr 7 17:49:41 2006 +0300 Bug #1625: Include keysym.h from Xutil.h. commit 5262a1945c543a3419ed626e1deb09ef5b4584c1 Author: Eric Anholt <anholt@leguin.anholt.net> Date: Wed Apr 5 17:12:15 2006 -0700 Check if visualList == NULL, not nVisualsMatched == 0. NULL happens in more cases (allocation failure) than nVisualsMatched == 0. Noticed from inspection of Coverity #599, #600. commit 8b42635f577468bb143ca593cdd9fb3450ad712c Author: Eric Anholt <anholt@leguin.anholt.net> Date: Wed Apr 5 16:42:26 2006 -0700 Coverity #558: Free newly-allocated Database in error path. commit 6d06e41d1f431b3f1a1fcf69161e0af411325e9f Author: Eric Anholt <anholt@leguin.anholt.net> Date: Wed Apr 5 16:38:52 2006 -0700 Coverity #582: Free newly-allocated region in error path. commit 5fd8f79ad3e38df74d9a6cb573617542c101df1a Author: Daniel Stone <daniels@preemptive.research.nokia.com> Date: Fri Mar 17 15:58:39 2006 +0200 Properly clip bounds when only one point is defining an outline. commit 1e1572eb7f8394ce152e99d96f711ccf9083baf9 Author: Matthieu Herrb <matthieu@bluenote.herrb.com> Date: Sat Mar 11 15:39:15 2006 +0100 Fix prototype of XConfigureWindow(). Bugzilla #6023. commit 1da8bd904f1fc79d63d368473531b438d08bfe37 Author: Jeremy C. Reed <reed@reedmedia.net> Date: Tue Feb 21 14:10:22 2006 -0800 Set XTHREADLIB correctly for dragonfly platforms. commit c9768133e3f65ac4bb64e3941e2d6ae36897ec9c Author: Jamey Sharp <jamey@minilop.net> Date: Sun Feb 19 12:29:27 2006 -0800 Update .gitignores for *.o and nls/locale.dir*. commit efcbde6ba0b770bb0d4c7818e307712161011f10 Author: Jamey Sharp <jamey@minilop.net> Date: Sun Feb 19 12:28:41 2006 -0800 Move .cvsignore to .gitignore. commit e3acee88cfcc4ef0fa8a7db39763a5ebe2e985cb Author: Daniel Stone <daniels@preemptive.fooishbar.org> Date: Sat Jun 3 13:51:51 2006 +0300 Fix threading support on GNU/kFreeBSD systems. (Robert Millan) commit f1bd3152359ddfadd0d043006036c239f3e2907b Author: Daniel Stone <daniels@preemptive.fooishbar.org> Date: Sat Jun 3 12:57:55 2006 +0300 Bug #2186: Add cs_CZ.iso8859-2 alias. commit 2b1b79d90db1d7f0472718b8c010c36275994195 Author: Daniel Stone <daniel@fooishbar.org> Date: Fri Jun 2 02:46:29 2006 +0300 nls: Serbian (sr_CS) update (#5575) Bug #5575: 'Yugoslavia' has changed to Serbia & Montenegro, along with a corresponding locale change. Update compose.dir.pre, locale.alias.pre, and locale.dir.pre. (Milos Komarcevic) commit d6fba1f44d404362d3be1b421f57d7ccc3c8cdac Author: Daniel Stone <daniel@fooishbar.org> Date: Fri Jun 2 02:24:25 2006 +0300 im: add Braille input method (#6296) Bug #6296: Add a Braille input method. (Samuel Thibault) commit 0fed7d3185addd610e917dcdaa0676f0256c0ec5 Author: Daniel Stone <daniel@fooishbar.org> Date: Fri Jun 2 02:22:17 2006 +0300 xkb support: small typo commit cf7d9f9e46f3ce01ac04a95978918d5c0f3f3cf9 Author: Daniel Stone <daniel@fooishbar.org> Date: Fri Jun 2 01:50:24 2006 +0300 en_US.UTF-8 Compose.pre: updates from Simos (#5129) Bug #5129: Numerous updates from Simos Xenitellis, fixing Unicode keysyms, adding Unicode character names, removing duplicate entries, et al. commit 332d45fce9fdbf59168d90a133af1f580a589e54 Author: Daniel Stone <daniel@fooishbar.org> Date: Fri Jun 2 01:44:53 2006 +0300 nls: fix use of non-keysym dead_space (#5107) Bug #5107: Change users of dead_space to space. commit 34f59ce3d1e2eb2971b732d11871c6fff8a1c75b Author: Daniel Stone <daniel@fooishbar.org> Date: Fri Jun 2 01:41:18 2006 +0300 optional XKB support fix Fix compilation with --disable-xkb. commit c5940a0b85edec4003f91a59fc3c44f538accfe1 Author: Daniel Stone <daniel@fooishbar.org> Date: Fri Jun 2 01:39:12 2006 +0300 i18n: separate data and lib directories Break out locale data into separate data and library directories, under $(datadir) and $(libdir), respectively, by default. commit 33556ca81db2419b9d2a37664c4cea2069414b37 Author: Adam Jackson <ajax@benzedrine.nwnk.net> Date: Fri May 12 14:49:17 2006 -0400 Bump to 1.0.1 commit 80d88557626fae9debc404de33d7fb5d69a6049d Author: Adam Jackson <ajax@benzedrine.nwnk.net> Date: Thu May 11 14:06:28 2006 -0400 libXcursor.so.1, not libXcursor.so commit 5384f27dfe3c94c462c137ab3540eaa5646ca4c6 Author: Adam Jackson <ajax@benzedrine.nwnk.net> Date: Thu May 11 14:04:48 2006 -0400 libXcursor.so.1, not libXcursor.so commit 01f4d433eed6b70c6e9636157acac022054fdeb6 Author: Jamey Sharp <jamey@minilop.net> Date: Wed May 10 17:02:52 2006 -0700 Count any partial request towards the current Xlib sequence number. commit 770cfbd1fcc80a83a9be0c4f68727b8af2c8f4a4 Author: Daniel Stone <daniels@preemptive.fooishbar.org> Date: Wed May 10 18:06:03 2006 +0300 XKBMisc.c: use Xfree, not xfree Use Xfree() instead of xfree() when freeing interps. commit 22a5255b80b80772612279bc840a953edd0e3442 Author: Daniel Stone <daniels@preemptive.fooishbar.org> Date: Wed May 10 14:51:37 2006 +0300 locale.alias.pre: bg_BG typo fix Fix typo (be_BG.UTF-8 rather than bg_BG.UTF-8) in locale.alias.pre. commit 9cac8c9824874ca7d835f001a4efa910b7fdd822 Merge: 19b8840 e514bc8 Author: Daniel Stone <daniels@preemptive.fooishbar.org> Date: Wed May 10 14:50:37 2006 +0300 Merge branch 'master' of git+ssh://git.freedesktop.org/srv/git.freedesktop.org/git/xorg/lib/libX11 commit e514bc875f27f4bf197b06b8315eeca526195915 Author: Jamey Sharp <jamey@minilop.net> Date: Tue May 9 12:41:59 2006 -0700 Assert that dpy->request does not go backwards. Catches #5839 earlier. commit fc1159137365a599bf611ee001f439416952c4e0 Author: Jamey Sharp <jamey@minilop.net> Date: Sun May 7 17:40:01 2006 -0700 In _XPutXCBBuffer, set aside any trailing partial request until the last byte is available. commit c394480a4247213239822808e3f6e7c6cd6decd9 Author: Jamey Sharp <jamey@minilop.net> Date: Sun May 7 16:58:13 2006 -0700 Update for XCB ConnSetupSuccessRep name change. commit 7672bf93bc1200905461aeb0a2dc2c2696410b93 Author: Daniel Stone <daniels@endtroducing.localdomain> Date: Sun Apr 9 22:22:03 2006 +0300 Coverity #203, #204: Fix potential NULL dereferences. commit cfcafbe48d22d9a0cd50eb9454ce0ff88f0129d3 Author: Daniel Stone <daniels@endtroducing.localdomain> Date: Sun Apr 9 22:20:25 2006 +0300 Coverity #205: Fix potential NULL dereference. commit b6771501feea98d037032f82117b6d4f15779f07 Author: Daniel Stone <daniels@endtroducing.localdomain> Date: Sun Apr 9 22:18:20 2006 +0300 Coverity #209: Fix potential NULL dereference. (Alan Coopersmith) commit 19b8840af241087bb17b1edabcaa9b28fdd0a1dc Author: Daniel Stone <daniels@preemptive.research.nokia.com> Date: Fri Apr 7 18:11:52 2006 +0300 Coverity #826: Fix potential memory leak. commit 3a16f262abe48b44ed641525e894bc22e13bf72a Author: Daniel Stone <daniels@preemptive.research.nokia.com> Date: Fri Apr 7 17:49:41 2006 +0300 Bug #1625: Include keysym.h from Xutil.h. commit 2481b767ae96e2f2503c0390545932c8397b090f Author: Eric Anholt <anholt@leguin.anholt.net> Date: Wed Apr 5 17:12:15 2006 -0700 Check if visualList == NULL, not nVisualsMatched == 0. NULL happens in more cases (allocation failure) than nVisualsMatched == 0. Noticed from inspection of Coverity #599, #600. commit 152b17e47d878c2d928eb74581aa69d925a29123 Author: Eric Anholt <anholt@leguin.anholt.net> Date: Wed Apr 5 16:42:26 2006 -0700 Coverity #558: Free newly-allocated Database in error path. commit bc62b99ef36edb34035911c42104be7f6f9d2333 Author: Eric Anholt <anholt@leguin.anholt.net> Date: Wed Apr 5 16:38:52 2006 -0700 Coverity #582: Free newly-allocated region in error path. commit d47f0b3cec1388f7ce60ab2af91df0dea0f221c5 Author: Jamey Sharp <jamey@minilop.net> Date: Fri Mar 31 22:53:07 2006 -0800 Fix buggy interaction with XCB when running out of XIDs. commit e3f452571824d6a875bbf582946de185de9e01e9 Author: Jamey Sharp <jamey@minilop.net> Date: Fri Mar 31 22:52:14 2006 -0800 Add explicit include of Xmd.h to work around bug including both xcb.h and Xmd.h simultaneously. commit 2363b74ca795c1b3a73c9e572532ba5191adec5b Author: Daniel Stone <daniels@preemptive.research.nokia.com> Date: Fri Mar 17 15:58:39 2006 +0200 Properly clip bounds when only one point is defining an outline. commit e876efb8aa410f2f5c87aaaa7042f847c4ff96f7 Merge: be266b2 f71ea0b Author: Matthieu Herrb <matthieu@bluenote.herrb.com> Date: Sat Mar 11 15:40:35 2006 +0100 Merge branch 'master' of git+ssh://herrb@git.freedesktop.org/git/xorg/lib/libX11 commit be266b201dc13530a302a7572283ccd3f32aad87 Author: Matthieu Herrb <matthieu@bluenote.herrb.com> Date: Sat Mar 11 15:39:15 2006 +0100 Fix prototype of XConfigureWindow(). Bugzilla #6023. commit f71ea0bc737c5a42e9e022b86e7ec3b4f846d31c Author: Jamey Sharp <jamey@minilop.net> Date: Fri Mar 3 11:08:41 2006 -0800 Update for XCBSendRequest sequence number API changes. commit a11d1b0ae674320cf9897f6a83ec08c65eca8d9b Author: Jamey Sharp <jamey@minilop.net> Date: Fri Mar 3 01:42:49 2006 -0800 Use the full_sequence from XCBGenericError/Event for setting last_request_read, and quit replacing _XSetLastRequestRead with an XCB-specific version. commit d8ba4ae7045b227f8b675628b9094dded02f1c08 Author: Jamey Sharp <jamey@minilop.net> Date: Thu Mar 2 23:43:26 2006 -0800 Bugfix: Rely on XCBSendRequest to leave iov in a well-defined state, and place the spare iovecs at the beginning of the array. commit f9afb5a54435c30961306080e9358d4240ecb844 Author: Jamey Sharp <jamey@minilop.net> Date: Thu Mar 2 23:34:19 2006 -0800 assert() that we will not infinite loop or read uninitialized memory. commit d3512ef3aae5b036a8ce6579318108f1ec20ee22 Author: Jamey Sharp <jamey@minilop.net> Date: Thu Mar 2 15:58:52 2006 -0800 Quit relying on XCBSendRequest to pad to 4-byte boundaries and do it ourselves. commit fb590c15a740264ee867d15a2547072e43b21eed Author: Jamey Sharp <jamey@minilop.net> Date: Thu Mar 2 12:06:04 2006 -0800 Handle errors correctly when Xlib owns the event queue and XCB has the checked error feature. commit 8356ba37d307a9eda895a6bf41ef727bbfc9a695 Author: Jamey Sharp <jamey@minilop.net> Date: Mon Feb 27 11:51:47 2006 -0800 Use the new XCBSendRequest flag, XCB_REQUEST_RAW, to hand a bag-o-bytes down uninterpreted. commit 07bdf1fbbf2418f866df1a2140d514dd3f035139 Author: Jamey Sharp <jamey@minilop.net> Date: Sun Feb 26 15:46:01 2006 -0800 Update for new XCBSendRequest API. commit 409a08cff8347d39e0e6c53c9f380d21f221f5ac Author: Jamey Sharp <jamey@minilop.net> Date: Thu Feb 23 18:12:31 2006 -0800 Performance fix: Replace calls to XCBGetRequestRead with the new XCBGetQueuedRequestRead. Cuts a lot of syscalls. commit ec30a27341b97620b07dd886f98d1d7664a67685 Author: Jamey Sharp <jamey@minilop.net> Date: Thu Feb 23 18:01:46 2006 -0800 Minor performance fix: Access dpy->xcl->connection directly instead of calling XCBConnectionOfDisplay. It happens a lot. commit 53c471c6a835d5cedeca99f2c97058d196a3fd7e Author: Jamey Sharp <jamey@minilop.net> Date: Thu Feb 23 11:46:09 2006 -0800 XCBFlush used to return non-positive on failure, and this test did not catch 0. Now it returns boolean: 0 or 1. Testing <= 0 covers both cases. I probably want to switch to a boolean test eventually. commit 41c0121a8718b530feaf7fe315b673d9b8defce2 Author: Jamey Sharp <jamey@minilop.net> Date: Tue Feb 21 21:25:41 2006 -0800 Refactor the code that passes requests down to XCB into a separate issue_complete_request function. commit 67d06e0fe468dca22847aa14d3f917128f89f9cf Author: Jamey Sharp <jamey@minilop.net> Date: Tue Feb 21 15:33:05 2006 -0800 If we have not actually put the buffer back, deferred invariants may not hold. This is OK. commit 434bf80b4053ff1ba82adf65de1f76b4d3731bf1 Author: Jeremy C. Reed <reed@reedmedia.net> Date: Tue Feb 21 14:10:22 2006 -0800 Set XTHREADLIB correctly for dragonfly platforms. commit b24834762e975bd319f9ab5c7cf790b2a02a9474 Author: Jamey Sharp <jamey@minilop.net> Date: Tue Feb 21 14:03:26 2006 -0800 Sometimes functions other than _XUnlockDisplay call _XPutXCBBuffer. Some invariants appropriate for Unlock are not appropriate otherwise: move them to _XUnlockDisplay. commit 99b8defd0d5e6993071e21638128c9de2574b37d Author: Jamey Sharp <jamey@minilop.net> Date: Tue Feb 21 13:04:21 2006 -0800 Execute BeforeFlush hooks on complete buffers, not request-at-a-time. Traditional Xlib worked this way; I dunno why I changed it. commit 9b01e7849775749182052fe324df9d8e6ceeee99 Author: Jamey Sharp <jamey@minilop.net> Date: Tue Feb 21 12:51:44 2006 -0800 Factor the XCBSendRequest call out of the conditional in _XPutXCBBuffer. commit 7ce7ac882de128955751a5307889db9d712d8a72 Author: Jamey Sharp <jamey@minilop.net> Date: Tue Feb 21 12:44:30 2006 -0800 Quit using a triple-pointer. Almost as if I were a sensible person. commit 35a858be218cdbfa4593d44a67663d5c25297016 Author: Jamey Sharp <jamey@minilop.net> Date: Tue Feb 21 12:21:01 2006 -0800 Remove the XCL_PAD macro. commit e741b70ed2542c5463c57dac44bc37328616733b Author: Jamey Sharp <jamey@minilop.net> Date: Sun Feb 19 12:29:27 2006 -0800 Update .gitignores for *.o and nls/locale.dir*. commit f25b4b00e1683b0d97dba46dac46d65a9c2270a6 Author: Jamey Sharp <jamey@minilop.net> Date: Sun Feb 19 12:28:41 2006 -0800 Move .cvsignore to .gitignore. commit c7cda56eebaf6ab11403363be14d4948d7d8be38 Author: Jamey Sharp <jamey@minilop.net> Date: Sun Feb 19 11:49:15 2006 -0800 Land XCB support on X.org HEAD. commit 881467b3032261791ef5ec61b3879bb68d0a3d8c Author: Jamey Sharp <jamey@minilop.net> Date: Sun Feb 19 02:14:11 2006 +0000 Merge the X11 and BIGREQS package sets: they were used in exactly the same places. commit 6b0158dfad714db5b89c04dbea3aedeafa0fb146 Author: Jamey Sharp <jamey@minilop.net> Date: Tue Feb 14 19:37:36 2006 +0000 Refactor _XFlush and _XSend code that sets dpy->synchandler to _XSeqSyncFunction into a new function, _XSetSeqSyncFunction. It makes the patch for XCB cleaner, but is arguably a good idea anyway. commit 010c3acbb3a6993d39274f42d88c00849acb0fb0 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Sun Feb 12 18:19:17 2006 +0000 Bug #5628 <https://bugs.freedesktop.org/show_bug.cgi?id=5628> Shadow pages not created correctly when MANDIR & MANSUFFIX don't match. commit fe8c01c80263457f01b70dc1511b2bd9466b7c96 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Fri Feb 3 23:34:43 2006 +0000 Fix typo in .TH line commit b091c217f3c3f60dde78b09a95c150df6c83d7ba Author: Kevin E Martin <kem@kem.org> Date: Thu Dec 15 00:24:28 2005 +0000 Update package version number for final X11R7 release candidate. commit e7c04e0e65a2a0c70c6ad29ec2d6f4350fd81c2a Author: Kevin E Martin <kem@kem.org> Date: Tue Dec 6 22:48:41 2005 +0000 Change *man_SOURCES ==> *man_PRE to fix autotools warnings. commit b5c495854d5270e64e6d588388ffa906bfcaac22 Author: Kevin E Martin <kem@kem.org> Date: Sat Dec 3 05:49:42 2005 +0000 Update package version number for X11R7 RC3 release. commit 9e96dbc343c7f27ff47607acd75378ab23903e2a Author: Kevin E Martin <kem@kem.org> Date: Sat Dec 3 04:41:47 2005 +0000 Add check and cflags for malloc(0) returning NULL. commit 649c37b47909620ccafde3e983de8321cddd74ce Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Mon Nov 28 22:03:04 2005 +0000 Change *mandir targets to use new *_MAN_DIR variables set by xorg-macros.m4 update to fix bug #5167 (Linux prefers *.1x man pages in man1 subdir) commit 8d1500df66d796ebff2b0d8c02205e5fa6796d4a Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Wed Nov 23 22:33:06 2005 +0000 Bug #5003 <https://bugs.freedesktop.org/show_bug.cgi?id=5003> Patch #3763 <https://bugs.freedesktop.org/attachment.cgi?id=3763> Xorg code misuses S_IF* macros commit 93cf3747f9ae8d30bd485b41c5ff10397f68f078 Author: Eric Anholt <anholt@freebsd.org> Date: Sun Nov 20 23:17:39 2005 +0000 Add/improve libs .cvsignores. commit fa1f4a08112bfa14d3758f4702733dd3892966c3 Author: Kevin E Martin <kem@kem.org> Date: Sat Nov 19 07:15:39 2005 +0000 Update pkgconfig files to separate library build-time dependencies from application build-time dependencies, and update package deps to work with separate build roots. commit 7012f9b56c594cf40855ba0dbf93af1263417a8c Author: Kevin E Martin <kem@kem.org> Date: Mon Nov 14 21:51:07 2005 +0000 Fix xf86bigfont pkgconfig dep typo. commit 60a72f47951f46b4e0505d9903a94af3b6bed8ca Author: Kevin E Martin <kem@kem.org> Date: Wed Nov 9 21:19:12 2005 +0000 Update package version number for X11R7 RC2 release. commit 6bb0c3796b6e1beddc376a896e865704886e1462 Author: Kean Johnson <kean@armory.com> Date: Tue Nov 8 06:33:25 2005 +0000 See ChangeLog entry 2005-11-07 for details. commit 14be0098ad90c3e68bd2d21b00ffabb76f1fd780 Author: Kevin E Martin <kem@kem.org> Date: Tue Nov 1 15:11:50 2005 +0000 Update pkgcheck dependencies to work with separate build roots. commit 1bf71462a972e0fc56de63f5c7fd613b37fc70f1 Author: Donnie Berkholz <spyderous@gentoo.org> Date: Fri Oct 28 10:44:03 2005 +0000 Revert that, it's redundant. But it is worth noting that --disable-xkb is broken, if anyone cares. commit be627a39fe373e2e81fdc263780e70a271d9e0c5 Author: Donnie Berkholz <spyderous@gentoo.org> Date: Fri Oct 28 08:28:08 2005 +0000 Add dependency on inputproto for XI.h. commit 5fae4cb456cb03fb70cd065dbc2ca94c8ed99082 Author: Adam Jackson <ajax@nwnk.net> Date: Fri Oct 21 18:44:24 2005 +0000 Bug #4736: Error decoding for Damage extension. (Jonathan Lennox) commit 1171fa9dc77413f0e90933a565ec07068052afb4 Author: Kevin E Martin <kem@kem.org> Date: Wed Oct 19 02:48:08 2005 +0000 Update package version number for RC1 release. commit 2a2d905706308b9d5a1c16af1067fb390f43850c Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Tue Oct 18 00:00:08 2005 +0000 Use @LIB_MAN_SUFFIX@ instead of $(LIB_MAN_SUFFIX) in macro substitutions to work better with BSD make commit 66d35b6971fb26762392a2a8e2c47db46c11116a Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Mon Oct 17 21:13:15 2005 +0000 Rename .shadows.DONE to shadows.DONE to avoid some make's thinking it's a suffix rule (reported by Matthieu Herrb) commit a316995a17c084e98ef1b7f25d287c2c08b6d749 Author: Donnie Berkholz <spyderous@gentoo.org> Date: Sun Oct 16 03:03:35 2005 +0000 Change '==' to portable '='. commit b76a072530e884bcbea6ed8fed5aef39361dcfc0 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Wed Oct 12 00:04:50 2005 +0000 configure.ac Use XORG_MAN_SECTIONS instead of custom man section configuration. Add shadow man pages for man pages that document multiple functions. commit 8ee5c1429af98206e05a0536f87c0f21a529cdf0 Author: Eric Anholt <anholt@freebsd.org> Date: Tue Oct 11 02:18:36 2005 +0000 Add appropriate pthread libs/flags for FreeBSD, fixing the build of ico and probably others. commit 41ff3b9d1f194a7b56437b650d5f589225c078c6 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Sun Oct 9 22:28:39 2005 +0000 Bug #3021 <https://bugs.freedesktop.org/show_bug.cgi?id=3021> Requests and Errors for XFixes are not in XErrorDB (Jonathan Lennox) commit 91ed79852e790049ab54e68f288afb3c953194c9 Author: Kevin E Martin <kem@kem.org> Date: Fri Oct 7 15:00:00 2005 +0000 Clean up generated files Add missing dist tarball files commit 440399b470c97b159a530602fff11c315aca8d97 Author: Søren Sandmann Pedersen <sandmann@daimi.au.dk> Date: Wed Oct 5 18:27:10 2005 +0000 Add el_GR.UTF-8 compose file commit 010f0647e25ac617d0f92c8d2b8dda684da545db Author: Daniel Stone <daniel@fooishbar.org> Date: Fri Sep 30 07:52:46 2005 +0000 Bug #2609: Add Kyrgyz locale (Ilyas Bakirov). commit 3ef2fb67bd8905b208ad7eb790c3843e14cea7ed Author: Daniel Stone <daniel@fooishbar.org> Date: Fri Sep 30 07:47:55 2005 +0000 Bug #1640: Kinyarwanda locale support. (Steve Murphy) commit 4ae0decabe0960870df0ec165f495166c10a053c Author: Daniel Stone <daniel@fooishbar.org> Date: Fri Sep 30 07:40:03 2005 +0000 Bug #2268: Add South African locales (Dwayne Bailey). Some whitespace cleanups, as the parser is a little touchy. commit 3f79eb4c99844f618f1889741d1631c2ffe5385f Author: Daniel Stone <daniel@fooishbar.org> Date: Fri Sep 30 07:11:19 2005 +0000 Generate locale.alias and compose.dir exactly like we do in the monolith, which fixes non-UTF-8 locales in particular (so we get foo: bar, as well as foo bar). Switch to generating locale.dir the same way. commit d1237d1483ff972c76a0ac344ec97d5280db0007 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Thu Sep 29 21:27:12 2005 +0000 Add Xcms.txt to lib/X11 commit 4a86f299693f7376cbe98175f0b0c44d691802b3 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Sat Sep 24 20:11:06 2005 +0000 Add XQueryExtension.man commit a057a66e2041d45198a13a4ece7c07068f76f21b Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Sat Sep 24 00:16:32 2005 +0000 Add XTHREAD_CFLAGS for platforms that need special defines like -D_REENTRANT or -D_POSIX_whatever to get re-entrant function definitions. Set XDMCP_LIBS correctly for later libXdmcp tests. commit 3e920a65a7c376ad63eae2240fd06904d25d18bf Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Fri Sep 2 23:00:30 2005 +0000 Issue an error if XTRANS macros were not found when generating configure from configure.ac to flag errors early, instead of when people wonder why libX11 can't talk to an Xserver because it has no transports defined commit 3eb9f2d693af89d04e2fd92492c8205dce332c9c Author: Kristian Høgsberg <krh@redhat.com> Date: Thu Sep 1 19:24:13 2005 +0000 Use $(X11_LOCALEDATADIR) instead of @X11_LOCALEDATADIR@ so this install destination can be overridden at make install time. commit 7afa64325183b78d2d6a4862821f8b3e9866105c Author: Matthieu Herrb <matthieu.herrb@laas.fr> Date: Sun Aug 28 19:45:48 2005 +0000 OpenBSD needs -lpthread for threaded applications too. commit 2b2f3d3877cb7927f196d01a5df6a27bf8d0518a Author: Daniel Stone <daniel@fooishbar.org> Date: Fri Aug 26 05:16:46 2005 +0000 Define ERRORDB/KEYSYMDB to XERRORDB/XKEYSYMDB if the former is undefined but the latter is. (Gerte Hoogewerf) commit 07066da0902df91c71f2adb81d1a17ec29165553 Author: Matthieu Herrb <matthieu.herrb@laas.fr> Date: Sun Aug 21 15:45:04 2005 +0000 update commit de44d8b111f57bd2f015e085fd8298c5f2a15ef3 Author: Matthieu Herrb <matthieu.herrb@laas.fr> Date: Sun Aug 21 15:38:39 2005 +0000 Threads support for BSD systems: - need to check for gewtpwuid_r to define mtsafeapi - build UIThrstubs if needed. commit 60217fdb918bafb2082519efe5cba3b13ad3082a Author: Adam Jackson <ajax@nwnk.net> Date: Wed Aug 17 19:46:08 2005 +0000 Add xthreadlib variable to x11.pc. Bump to 0.99.1. commit e1f4c6f5e36c1511f66fa1fac76520fd97eecbad Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Wed Aug 17 01:27:08 2005 +0000 Fix more broken multi-line .ds macros. Remove extraneous ;'s . commit 1909786f4a7d686369edcfc05a938df115fab37c Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Tue Aug 16 19:23:15 2005 +0000 Bugzilla #4112 <https://bugs.freedesktop.org/show_bug.cgi?id=4112> Patch #2687 <https://bugs.freedesktop.org/attachment.cgi?id=2897> Fix multi-line macros in XPutImage man page. (Debian bug #323210, fix by David Mart?nez Moreno) commit 83406d69c62070d2eeef23eb47f1ca887f711ee5 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Mon Aug 15 19:53:37 2005 +0000 Move RAWCPP macro to xorg-macros.m4 so other modules can use it Add check for whether or not RAWCPP needs -traditional instead of hardcoding it, so non-gcc cpp's can be used commit 5bb43de17de8e71d967488a713bf2b3448533444 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Sat Aug 6 18:59:49 2005 +0000 Typo fix in output message commit afe34b95862bb3c06cdbe724cb5ec3001a4a5215 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Thu Aug 4 02:55:49 2005 +0000 //bugs.freedesktop.org/show_bug.cgi?id=1887> Patch #3005 <https://bugs.freedesktop.org/attachment.cgi?id=3005> libX11 locale defs severely adrift from glibc: adding new aliases (From Debian via Nathanael Nerode) commit 3979a0b88edf6475ce5cfaa386e18ef980bda13c Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Thu Aug 4 02:51:30 2005 +0000 //bugs.freedesktop.org/show_bug.cgi?id=1887> Patch #3002 <https://bugs.freedesktop.org/attachment.cgi?id=3002> libX11 locale defs severely adrift from glibc: locales bugfix for bs_BA (From Debian via Nathanael Nerode) commit 34b454df192f4563499c453ccdb8c079f4a20cbe Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Sat Jul 30 20:30:46 2005 +0000 Include config.h so Xtrans knows which transport types to build code for commit cd9c9936b49c125eda779b99887d7e6ae4cf56cd Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Sat Jul 30 19:15:16 2005 +0000 Add -D flags to clear various warnings (Stefan Dirsch) commit e7fef67b4531faddd805d8f2157903006d3117ed Author: Kevin E Martin <kem@kem.org> Date: Fri Jul 29 21:22:50 2005 +0000 Various changes preparing packages for RC0: - Verify and update package version numbers as needed - Implement versioning scheme - Change bug address to point to bugzilla bug entry form - Disable loadable i18n in libX11 by default (use --enable-loadable-i18n to reenable it) - Fix makedepend to use pkgconfig and pass distcheck - Update build script to build macros first - Update modular Xorg version commit 2ebb00244928237088e68325b1032b3550455ce9 Author: Matthieu Herrb <matthieu.herrb@laas.fr> Date: Sat Jul 23 20:19:31 2005 +0000 remove orphan TAB at begin of line commit dd7a9cdecda73e024ca84c5b9a22b18688038d94 Author: Kevin E Martin <kem@kem.org> Date: Sat Jul 23 18:09:39 2005 +0000 Modify modular libs to use Xregion.h instead of region.h commit 6d635a88d91647b1b63611c3591f74916f88cd1c Author: Kevin E Martin <kem@kem.org> Date: Sat Jul 23 18:06:16 2005 +0000 lib/Xrender/Picture.c Change region.h to Xregion.h and modify internal references to include <X11/Xregion.h>. commit 36283f50fd9748733ae84cb7fb52ca8d9e661c15 Author: Daniel Stone <daniel@fooishbar.org> Date: Sat Jul 16 06:25:35 2005 +0000 Set soversion to 6.2.0. commit 75fd5ae6e4683b9b9dcc13bc2f0faf223610a74f Author: Keith Packard <keithp@keithp.com> Date: Fri Jul 15 04:27:32 2005 +0000 Add missing Makefile.am to lib/X11/modules commit 6d84a8b1329af1fcfe86b198f1a6e7dd6ff616c3 Author: Keith Packard <keithp@keithp.com> Date: Fri Jul 15 04:08:51 2005 +0000 Move i18n modules to top-level so they can be built in the right order (before xlib for non-loadable, after xlib for loadable). Link i18n modules against xlib to resolve Xlib symbols used by them. commit 45f40126a73295345bb5eb187b1167874842ab6e Author: Alexander Gottwald <ago@freedesktop.org> Date: Thu Jul 14 19:50:00 2005 +0000 Add $(top_srcdir)/src to include list commit 0aed7d91f5928d09d541617aad03709b5090658d Author: Matthieu Herrb <matthieu.herrb@laas.fr> Date: Thu Jul 14 17:04:49 2005 +0000 Build fix for non-GNU make. commit b79422ccb02ab44548d1038956ab0cd4e2638645 Author: Adam Jackson <ajax@nwnk.net> Date: Thu Jul 14 15:12:44 2005 +0000 typo fixes (Matthieu Herrb) commit 419304cde2fda19457c667870edefc0b227651b3 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Wed Jul 13 02:41:36 2005 +0000 Add missing backslashes to xlocale_la_SOURCES commit d14cc5c8964c4539b57c6cb51ef653292e410b79 Author: Keith Packard <keithp@keithp.com> Date: Mon Jul 11 20:32:55 2005 +0000 Ammend AM_CFLAGS with all needed includes; cannot figure out an easy way to automate this. commit 424c2d8905eb2ad0a2df15b1da2f96140bfbcffb Author: Lars Knoll <lars@trolltech.com> Date: Mon Jul 11 15:24:32 2005 +0000 compile commit de9784eb1bde46efc316da279e3da27c6cc288a7 Author: Keith Packard <keithp@keithp.com> Date: Mon Jul 11 09:26:40 2005 +0000 Ignore built man page files commit 0c258c36d1523113790c599b16d2947d7aa6469a Author: Keith Packard <keithp@keithp.com> Date: Mon Jul 11 09:18:31 2005 +0000 Minor changes to help modular Xlib build i18n modules commit 6e752ea1203b786423e40f43340bce15ca3de0f0 Author: Keith Packard <keithp@keithp.com> Date: Mon Jul 11 08:29:18 2005 +0000 Enable loadable i18n modules, making them configurable on the configure command line. Clean up conditionals for XKB, XCMS, XLOCALEDIR Create new lib directory for locale modules in ${X11_LIBDIR}/locale/lib. Add this to the default XLOCALEDIR search path. Create separate X11_LOCALEDATADIR variable pointing at ${datadir}/X11/locale for installing locale data. Split out xcms, xkb, xlibi18n sources from main xlib bits so they can be conditionally included more easily. Lots of source files have been moved with this step; the result seems like it might be easier to maintain. Display message at end of configure script with selected options. Fix manual building with cpp to add -traditional in cpprules.in. This isn't conditionalized at all, so it will break on systems not using GNU cpp. commit b46cf0d879f1dbf92dcf5a0305d18986c766ed84 Author: Daniel Stone <daniel@fooishbar.org> Date: Sun Jul 10 22:37:33 2005 +0000 Fix segfault when _XimProtoCreateIC() fails to create a context; Debian #239991. (Chung-chieh Shan) commit 6f2132b18e61ca9755e4b45550f3f5097dd1fbb7 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Sat Jul 9 20:06:04 2005 +0000 Set __libmansuffix__ & __xorgversion__ correctly when cpp processing man pages commit 3939ac4410446b46071c9d714f4270c12bf904fe Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Sat Jul 9 18:44:14 2005 +0000 - Since all but one line of all the nls/*/Makefile.am files are identical, move common bits to nls/localerules.in for easier updating and use automake includes to include in all the nls/*/Makefile.am files - Don't assume $(CPP) can take gcc-only -traditional flag - CPP process man pages as is done in the monolithic tree commit 19ba9d0df86c688319377467254b9ea9c4b0eccc Author: Keith Packard <keithp@keithp.com> Date: Sat Jul 9 06:01:49 2005 +0000 Clean up .cvsignore files commit f4bba6fa9b9ce637be7662754750054567e9250a Author: Adam Jackson <ajax@nwnk.net> Date: Sat Jul 9 02:53:29 2005 +0000 typo fix. i suck. commit 3305da61a61695e24c1ea11d3f59dddb52873d47 Author: Adam Jackson <ajax@nwnk.net> Date: Sat Jul 9 02:41:18 2005 +0000 Check for bigfont proto headers via pkgconfig (Arwed von Merkatz) commit afdae2e8ccb93de2987b5a5e850695af15ece7e0 Author: Keith Packard <keithp@keithp.com> Date: Fri Jul 8 07:11:56 2005 +0000 Create and use XlibConf.h to match modular build which needs XTHREADS defined when building extensions commit 86fa88dc594ca2093030acf5c84973ee2b33eb4c Author: Keith Packard <keithp@keithp.com> Date: Fri Jul 8 06:57:06 2005 +0000 Create and install XlibConf.h to provide external users of Xlibint.h the defines necessary to correctly use the library. Xlibint.h should #include this new file. Add a bunch of .cvsignore files commit 30f6ffedeaf899e699f0c6b14c9471ce9bcc430c Author: Chris Less <clee@c133.org> Date: Mon Jul 4 23:01:48 2005 +0000 Fixing bug #380 - add a man page for XQueryExtension, XListExtensions, and XFreeExtensionList. commit 55328bb6caabd37885cd19d7a5821ed425daf321 Author: Eric Anholt <anholt@freebsd.org> Date: Sun Jul 3 10:17:38 2005 +0000 Avoid a gmake-specific construct, and instead just write the name of the current directory into each Makefile.am. commit 726538ba21b631bfb0b8094a5546acdaf57379ff Author: Daniel Stone <daniel@fooishbar.org> Date: Sun Jul 3 07:37:33 2005 +0000 Fix more include paths; add dix-config.h to XKB code. commit 8c7677138e70e14eca0255f2168583f0ecc21994 Author: Daniel Stone <daniel@fooishbar.org> Date: Sun Jul 3 07:00:55 2005 +0000 Add Xtrans definitions (FONT_t, TRANS_CLIENT) to clean up warnings. Add XSERV_t, TRANS_SERVER, TRANS_REOPEN to quash warnings. Add #include <dix-config.h> or <xorg-config.h>, as appropriate, to all source files in the xserver/xorg tree, predicated on defines of HAVE_{DIX,XORG}_CONFIG_H. Change all Xfont includes to <X11/fonts/foo.h>. commit 197697c92a63091a4cc3cc04dcb7fa29d2655758 Author: Daniel Stone <daniel@fooishbar.org> Date: Fri Jul 1 22:13:35 2005 +0000 Fix objdir != srcdir, as well as make distcheck. Don't attempt to create Compose.pre files; formatting fixes. Added if not already present. commit c162d60ad8f124563f94a2a266de59373936266c Author: Søren Sandmann Pedersen <sandmann@daimi.au.dk> Date: Wed Jun 22 22:46:31 2005 +0000 Apply these patches from Theo van Klaveren: lib-dmx.patch lib-FS.patch lib-X11.patch lib-XRes.patch lib-XScrnSaver.patch lib-xtrans.patch to make the libraries distcheck. commit 9ee8abdab03ea605a6327118ab7dacab6adf8876 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Sat Jun 18 07:48:43 2005 +0000 Move Secure RPC flags from X11/configure.ac to xtrans/xtrans.m4 since multiple modules will need them commit 12afc57b7d455781eee305e9ed6a899ceec8729e Author: Daniel Stone <daniel@fooishbar.org> Date: Wed Jun 15 16:50:47 2005 +0000 Typo fix to locale/error/keysym location declarations. commit 9a895777e30762f61b98d25be3b5d8b1169baa17 Author: Daniel Stone <daniel@fooishbar.org> Date: Wed Jun 15 13:37:43 2005 +0000 Typo in ImUtil.h commit -- I AM CAPTAIN SKILL. commit add49285663684875ab7a5c58ec7a2cf8b775f67 Author: Daniel Stone <daniel@fooishbar.org> Date: Wed Jun 15 13:32:35 2005 +0000 Define locations for XErrorDB, XKeysymDB, and locale data in configure.ac. Add AC_DEFINE_DIR macro from autoconf-archive.cryp.to towards this end. Move ImUtil.h from src/ to include/X11/. commit 845dfc6b42b950890866ee4df27761e086f50dca Author: Daniel Stone <daniel@fooishbar.org> Date: Wed Jun 15 13:27:48 2005 +0000 Move ImUtil.h from src/ to include/X11/. Additionally, copy Cmap.h as a distribution file. commit bba117f0d98f62cfb060d0fab97b407a3a0bfda9 Author: Daniel Stone <daniel@fooishbar.org> Date: Fri Jun 10 14:11:36 2005 +0000 Remove pointless include of Xlib.h. Fix #include path to bigreqstr.h. commit 1a0de49da1274882bab05b0f7240936b37955e5c Author: Alexander Gottwald <ago@freedesktop.org> Date: Thu Jun 9 21:30:15 2005 +0000 Use $(srcdir) for Compose.pre and XLC_LOCALE.pre commit af4f0f302644ebfbb0ca9f4016a4aee85c973d37 Author: Alexander Gottwald <ago@freedesktop.org> Date: Thu Jun 9 15:55:33 2005 +0000 Replace <X11/transport.c> with <X11/Xtrans/transport.c> commit fd5f58e0baf692e34b9b622286f18762cc2500d3 Author: Alexander Gottwald <ago@freedesktop.org> Date: Thu Jun 9 15:52:02 2005 +0000 Replace <X11/Xtrans.h> with <X11/Xtrans/Xtrans.h> Copy Xtrans.h to exports/include/X11/Xtrans only commit 44538f9940f969d46c0e5e4b201c684cde2ba611 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Sun Jun 5 03:29:33 2005 +0000 Port Imake flags to autoconf tests & --enable-* flags: HASSETUGID, HASGETRESUID, NO_XLOCALEDIR, HAS_SHM and XF86BIGFONT commit 588e30e9ec65fa6205a34be650b79d5e2243edec Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Sat Jun 4 22:53:21 2005 +0000 Add --enable-secure-rpc flag and checks for needed functions for Secure RPC ("SUN-DES-1") authentication method commit a547afee2ef49cc41bbb67f9cff5a52a283c0854 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Sat Jun 4 21:20:20 2005 +0000 Bug #3436 <https://bugs.freedesktop.org/show_bug.cgi?id=3436> Conndis.c uses incorrect type for args to XdmcpWrap() (Mike Harris - mharris@www.linux.org.uk) commit ca93c761559ae464189c7ea7cf11c6a6679f2431 Author: Matthieu Herrb <matthieu.herrb@laas.fr> Date: Sat May 28 01:02:32 2005 +0000 Don't use $< in explicit rules. This only works with GNU make. <https://bugs.freedesktop.org/show_bug.cgi?id=3383> commit 09ebb349359e3dd9131fa2fa8b07559faa173654 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Sun May 22 19:05:11 2005 +0000 Convert man pages to long file names in lib/X11, lib/Xt, & lib/Xext commit 761219b1ef9befc350c8a35b6f96d047e5f008cc Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Sat May 21 23:07:48 2005 +0000 xtrans: Create autoconf macro XTRANS_CONNECTION_FLAGS to provide standard set of --enable flags for which transports to support and common place to update for required libraries for platforms that need certain libs for certain transports ICE: Add ICE_t #define required by Xtrans headers. Replace static defines of LOCALCONN & UNIXCONN with new XTRANS_CONNECTION_FLAGS macro. X11: Moved transport type checks to new macro XTRANS_CONNECTION_FLAGS in xtrans.m4 in xtrans module so they can be shared by all modules using xtrans. commit 4b1ba6eb975b547b808f4d5c8825a3261de5e02a Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Sat May 21 04:26:12 2005 +0000 Quote $ac_cv_search_* variables to prevent errors from test when they are set to "none required" (as happens on Solaris since dlopen is in libc) Comment out "override CC = gcc" line as it breaks builds with non-GNU makes, and its incorrect to force a specific compiler. Change LINK line from gcc to $(CC). commit 1d425d5e2092dd18a7dd599b37ed9af61cf59819 Author: Adam Jackson <ajax@nwnk.net> Date: Thu May 19 00:22:32 2005 +0000 revert last change, didn't do right thing at all, sorry for the noise commit 1b0c46c1ae61d751dd3ca96de8e2c3fe21c5f4f2 Author: Adam Jackson <ajax@nwnk.net> Date: Thu May 19 00:10:07 2005 +0000 Require automake 1.7 in AM_INIT_AUTOMAKE commit cd4657c175dbab6aaca36f18a0ca92c95b5567dd Author: Søren Sandmann Pedersen <sandmann@daimi.au.dk> Date: Tue May 17 22:32:09 2005 +0000 - Check for xproto as its CFLAGS are needed in the .pc file commit 46e8d8a65430dd87c10b066b5cff99a689c22241 Author: Egbert Eich <eich-at-freedesktop-dot-org> Date: Tue May 17 08:10:10 2005 +0000 gcc4 allows to check if sentinels are correct (a sentinel is the terminating element in a varargs list). A sentinel needs to be NULL, not 0 - which doesn't make a difference on 32bit but matters on 64bit. Furthermore it can be told that functions have a printf-like format string and argument list so that they can verify that both match. To use these features certain attributes need to be set - which are compiler specific. To do this we define macros which are expanded depending on the compiler version. For now we put those in include/Xfuncproto.h (the XFree86 DDX layer contains a file compiler.h which however is not visible outside the DDX) (Bugzilla #3268). commit 23198d2bfbf0049b2630235cd4d4a4ffba7ec6c1 Author: <ssp@aware-of-vacuity.boston.redhat.com> Date: Mon May 16 22:35:27 2005 +0000 Make Xdmcp unconditionally required, require various protocol modules. Mon May 16 17:48:03 2005 Søren Sandmann <sandmann@redhat.com> Check for kbproto if using XKB. Require xextproto rather than xextensions Remove the entries from the xlibs tree, as they are not relevant here. commit 8bd3aea84ce54b8b76a898f3ae00e2b499c14a5e Author: Søren Sandmann Pedersen <sandmann@daimi.au.dk> Date: Mon May 16 21:48:36 2005 +0000 Mon May 16 17:48:03 2005 Søren Sandmann <sandmann@redhat.com> Check for kbproto if using XKB. commit 9b1fa9ca3ed852ed40860f137511683f4bdae6fa Author: <ssp@aware-of-vacuity.boston.redhat.com> Date: Mon May 16 21:27:35 2005 +0000 Require xextproto rather than xextensions Remove the entries from the xlibs tree, as they are not relevant here. commit 7eee605e3aeed549d1053325a03027c5e8cbf71b Author: Søren Sandmann Pedersen <sandmann@daimi.au.dk> Date: Fri May 13 22:53:36 2005 +0000 - For now put xtrans in X11/Xtrans/X11, since libX11 is looking for it in <X11/...> - For Xcomposite and Xdamage, don't link the build system out of the xc tree - Link the public X11 headers into their own directory - Add links to XKeysymDB and XErrorDB - Add links to all the Xlib man pages - Add links to the lcUniConv subdirectory - Conditionally include config.h in Xlib source commit 6769ccda88caf27d1441d335ef2b318a047a612b Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Mon Mar 21 04:58:21 2005 +0000 xc/lib/X11/ErrDes.c //bugs.freedesktop.org/show_bug.cgi?id=132) Patch #2168 (https://bugs.freedesktop.org/attachment.cgi?id=2168) Replace a couple of BUFSIZE uses with better values to check against. Fixes by Stuart Anderson <anderson@netsweng.com> commit 3b9e8ece93b916c55a82df53e85f097418edf471 Author: Roland Mainz <roland.mainz@nrubsig.org> Date: Sat Mar 19 22:04:55 2005 +0000 xc/nls/Compose/iso8859-2 xc/nls/Compose/iso8859-3 xc/nls/Compose/iso8859-9 //bugs.freedesktop.org/show_bug.cgi?id=2592) attachment #2156 (https://bugs.freedesktop.org/attachment.cgi?id=2156) Fix a couple of typos in ISO8859-* Compose files ("asciicircum" instead "of asciicirum"). Patch by Matthias Hopf <mhopf@suse.de>. commit 0ce5950a08b9ab23ca8a32effdd40c421e92df84 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Tue Mar 8 02:53:36 2005 +0000 Bugzilla Bug 2006 (https://bugs.freedesktop.org/show_bug.cgi?id=2006) Patch #2031 (https://bugs.freedesktop.org/attachment.cgi?id=2031) XEmbed client doesn't receive key events from XIM: Use | to set a bit, not &. Patch by Hidetoshi Tajima <hidetoshi.tajima@sun.com>. commit df341cd2f2f263f13323e8c0936ea8aa0d7fbba1 Author: Roland Mainz <roland.mainz@nrubsig.org> Date: Tue Feb 1 03:12:28 2005 +0000 xc/nls/Compose/pt_BR.UTF-8 //bugs.freedesktop.org/show_bug.cgi?id=2400) attachment #1762 (https://bugs.freedesktop.org/attachment.cgi?id=1762): Fix build bustage caused by broken patch for brazillian locale support (see Bugzilla #1896). Patch by Kevin E. Martin <kem@freedesktop.org>. commit 483d3973f56dda51f9251d3ea808aaf7f3b48c10 Author: Markus Kuhn <Markus.Kuhn@cl.cam.ac.uk> Date: Fri Jan 28 18:31:31 2005 +0000 cleaned up boundary-case handling for Uxxxx Unicode keysym notation commit f234188a4c1e6b655aef0e3957ccad20d4c5847f Author: Roland Mainz <roland.mainz@nrubsig.org> Date: Wed Jan 19 01:53:55 2005 +0000 xc/nls/compose.dir xc/nls/locale.dir xc/nls/Compose/Imakefile xc/nls/Compose/pt_BR.UTF-8 xc/nls/XI18N_OBJS/Imakefile xc/nls/XI18N_OBJS/pt_BR.UTF-8 xc/nls/XLC_LOCALE/Imakefile xc/nls/XLC_LOCALE/pt_BR.UTF-8 //bugs.freedesktop.org/show_bug.cgi?id=1896) attachment #1675 (https://bugs.freedesktop.org/attachment.cgi?id=1675): Add support for pt_BR.UTF-8 locale. Patch by Gustavo Noronha Silva, Branden Robinson, Julien Lafon. commit 7448ea7ef425d35cfc31eb41d46f4d879774f376 Author: Egbert Eich <eich-at-freedesktop-dot-org> Date: Fri Jan 14 18:03:09 2005 +0000 Made some security enhancements: - no writing past end of buffer caused by bogus locale. - explicitely add a \0 character at end of string. (Bugzilla #2262) commit 5557d47fcf22a6f3adf327691158f2270e3d5094 Author: Roland Mainz <roland.mainz@nrubsig.org> Date: Fri Jan 14 04:59:05 2005 +0000 xc/nls/compose.dir xc/nls/locale.alias xc/nls/locale.dir //bugs.freedesktop.org/show_bug.cgi?id=1830) attachment #1674 (https://bugs.freedesktop.org/attachment.cgi?id=1674): Adding support for the bs_BA (bs, bs_BA, bs_BA.iso88592, bs_BA.ISO-8859-2, bs_BA.ISO_8859-2, bs_BA.UTF-8) locale. Patch by Vedran Ljubovic <vljubovic@smartnet.ba>. commit 1fa3737f042f798fa11a9ff5b03f3b3ba3529824 Author: Egbert Eich <eich-at-freedesktop-dot-org> Date: Tue Jan 11 17:37:57 2005 +0000 'Normalize' locale names (ie. remove any '-' and '_' and convert to lower case after the <language>_<territory> part) before matching against locale.alias (Bugzilla #2262). This needs adequate testing that we don't accidentally introduce undesirable side effects. commit 642cd269f94a234aa470a1d43385bd42625d89a1 Author: Egbert Eich <eich-at-freedesktop-dot-org> Date: Tue Dec 14 08:59:20 2004 +0000 Removed #ifdef'ed out code together with the comment explaining why it was #ifdef'ed out. Fixed typo. Added comment to a changed that's been committed with one of the previous commits. commit a07ccae36e629741d2e48de7730114d30a975a41 Author: Matthieu Herrb <matthieu.herrb@laas.fr> Date: Sun Dec 12 08:42:50 2004 +0000 Fix missing XChangeProperty() prototype missing in synopsis section. commit c73adb1c8ad806c2f9f0ba32f4b449e7a871501c Author: Alexander Gottwald <ago at freedesktop dot org> Date: Wed Dec 8 13:42:01 2004 +0000 Bugzilla #1980 (https://bugs.freedesktop.org/show_bug.cgi?id=1980) Handle XERRORDB only on WIN32 platform commit d5e7ab194103e22fd6c5094aaa107d90210bb600 Author: Jim Gettys <jg@freedesktop.org> Date: Thu Dec 2 16:18:16 2004 +0000 fix comment to indicate additional possible mode. i bug 1756 reported by Owen Taylor. commit 03940d7330cb1bbf93d49c650aefb19de457da7c Author: Alexander Gottwald <ago at freedesktop dot org> Date: Wed Dec 1 13:06:55 2004 +0000 Bugzilla #1980, https://bugs.freedesktop.org/show_bug.cgi?id=1980 Make location of XErrorDB configurable commit 11a03ab908bfcfab8a3492684e8e9320e492d552 Author: Alexander Gottwald <ago at freedesktop dot org> Date: Wed Dec 1 12:42:17 2004 +0000 Bugzilla #1864, http://freedesktop.org/bugzilla/show_bug.cgi?id=1864 Initialize pointer to NULL to avoid freeing random memory commit f3d83ee153f42e8899b844377e6b842d93411e62 Author: Alexander Gottwald <ago@freedesktop.org> Date: Mon Nov 15 15:06:54 2004 +0000 Bufzilla #1802, http://freedesktop.org/bugzilla/show_bug.cgi?id=1802 Added mingw (Win32) port commit b798ea11911ac58a8e6e7d15a2a643b023859749 Author: Alexander Gottwald <ago at freedesktop dot org> Date: Mon Nov 15 13:29:56 2004 +0000 Bugzilla #1864, http://freedesktop.org/bugzilla/show_bug.cgi?id=1864 Initialize pointer to NULL to avoid freeing random memory commit 436108cd6c84053698e5ca629096f59b34f50c2a Author: Kristian Høgsberg <krh@redhat.com> Date: Thu Nov 11 15:37:01 2004 +0000 Fix #1818 commit bf2e6ef66ba55f90efa4a4ba8c8b6d3ec0d1531c Author: Roland Mainz <roland.mainz@nrubsig.org> Date: Tue Nov 9 00:56:56 2004 +0000 xc/nls/compose.dir xc/nls/locale.alias xc/nls/locale.dir //freedesktop.org/bugzilla/show_bug.cgi?id=1544): Adding support for the si_LK (si, sinhala, si_LK, si_LK.UTF-8) locale. Patch by Anuradha Ratnaweera <gnu.slash.linux@gmail.com>. commit 443890ceefbd6dafe68e30d103ec4f9d316ed655 Author: Roland Mainz <roland.mainz@nrubsig.org> Date: Fri Nov 5 00:58:49 2004 +0000 xc/nls/compose.dir xc/nls/locale.alias xc/nls/locale.dir Adding some of the major indic locales (bn_IN.UTF-8, bn_IN.utf8, gu_IN.UTF-8, gu_IN.utf8, pa_IN.UTF-8, pa_IN.utf8) to X. Patch by Leon Ho <llch@redhat.com>. commit af7467ec734321f127b957921cce7792902b6794 Author: Egbert Eich <eich-at-freedesktop-dot-org> Date: Mon Oct 18 17:29:03 2004 +0000 Correcting font encodings for GB18030, GBK and BIG5-HKSCS. Adding nls support for those encodings (Bugzilla 1573, James Su). commit 1b900b59cb24fe8be3db0d434b04d462c0eeb206 Author: Egbert Eich <eich-at-freedesktop-dot-xorg> Date: Mon Oct 18 14:21:45 2004 +0000 Made handling of DevelDrivers for x86-64 more conformant to other platforms. Compress all font encodings (Stefan Dirsch). Fixed warnings. Turn on forwarding XNSpotLocation event to XIM server in OffTheSpot and Root mode (bugzilla #1580, James Su). Added another compose key combination for the Euro symbol (Stefan Dirsch). Added support for UTF-8 in ja_JP, ko_KR and zh_TW locales (Mike Fabian). Changed default encoding for ru from KOI8-R to ISO8859-5 (Mike Fabian). This is the encoding that is also used by glibc. We may break other libcs - lets see who complains. Added explanation for DESTDIR to install to a different directory than /. Added some early bailouts to atiprobe if PCI structure pointer is NULL to prevent sig11. XV support doesn't depend on 2D acceleration any more. This patch removes this limitation from the NSC driver. This is a patch that I have committed to XFree86 a while ago but never ported over to X.Org. Matthieu Herrb contributed some build fixes. Fixing SetDPMSTimers() so that DPMS*Time == 0 disables the appropriate timer. This takes advantage of the fact that TimerSet() with a timeout argument 0 behaves like TimerCanel(). Use /dev/xconsole (named pipe) or devpts for system logger (Werner Fink). Create missing links for backward compatibility to XFree86 (Stefan Dirsch). Changed comment to mention xorg. Changed cursor for the 'kill' action from XC_draped_box to XC_Pirate. If you don't like it we can change it back (original author unkown). Added 'pic' to the man page rendering command pipeline (Werner Fink). Added missing return value (Stefan Dirsch, Roland Mainz) commit 1ba103c3cad2329db3a31f88d7798b913affc570 Author: Eric Anholt <anholt@freebsd.org> Date: Wed Oct 13 07:38:00 2004 +0000 Use attributes instead of pragmas for weak symbols on gcc 2.95 as well. Using pragmas may result in the symbols being undefined with big -O. (FreeBSD ports/69708, Masakazu HIGAKI <higamasa@dream.com>) commit d80237db627bf71ad5615ff4ba05e6ab436aa740 Author: Søren Sandmann Pedersen <sandmann@daimi.au.dk> Date: Fri Oct 8 22:57:56 2004 +0000 Fri Oct 8 18:53:11 2004 Soeren Sandmann <sandmann@redhat.com> Move iso10646 last so the "fallback" fonts will actually be used if they are better matches. commit d1f76d17ecf418396627b1a58319f2b9b255548a Author: Markus Kuhn <Markus.Kuhn@cl.cam.ac.uk> Date: Sun Sep 26 22:54:57 2004 +0000 bug fix for previous patch commit 48932d9b71d10e15812f47d5b842ab6aa8dac625 Author: Markus Kuhn <Markus.Kuhn@cl.cam.ac.uk> Date: Sun Sep 26 20:46:17 2004 +0000 The big keysym cleanup, to bring implementation in line with the recent revision of Appendix A of the protocol spec. (Markus Kuhn) commit 2e02a95dcc43dd3ec7bbaf4675ffb94f5074f543 Author: Egbert Eich <eich@freedesktop.org> Date: Wed Sep 15 09:05:22 2004 +0000 Unregistering events in XSelectInput() when unregistering IM filter callbacks may be a bad idea as others may be interested in this event. Removed the call to XSelectInput() altogether as we are in root window anyway (Lubos Lunak). Fix size of a variable that gets assigned the value of SmartScheduleTime (long) to long. This should help to prevent smart scheduler lockup on 64 bit systems due to overruns (Andreas Schwab). commit 2d3afb68a104a80a21ee622b9abb9c95e83505d3 Author: Egbert Eich <eich@freedesktop.org> Date: Tue Aug 31 11:37:03 2004 +0000 Fixed some lockups in XIM code when the application is running with multi thread support. These lockups occur deep down in XFilterEvents() which itself locks when another Xlib function gets called that also locks. This fixes two instances by separating those Xlib functions into an internal (non-locking) call and a locking wrapper that is used as an external function. There may be several other such instances therefore another more general patch is eventually required (Bugzilla #1182). commit e689746c8d0e21e9011e8b91a3071d235d3a2a74 Author: Kevin E Martin <kem@kem.org> Date: Thu Aug 19 06:48:06 2004 +0000 Fix header file to #ifdef the XKB keysyms when they are used. This fixes the X test suite build failure. commit d558a53a6f57eecfcaadce5141fe3a08860defcb Author: Keith Packard <keithp@keithp.com> Date: Sat Aug 14 07:12:36 2004 +0000 Use XLIB_SKIP_ARGB_VISUALS environment variable to disable all depth 32 visuals. Necessary to keep Flash from crashing. Must call ValidateGC/ValidatePicture on "real" GC/Picture to ensure pCompositeClip is set correctly. Need to take the composite clip from the "real" GC/Picture and turn it into the clientClip for the backing version. Adjust pixmap screen origin to account for drawable->x/y Change debugging output a bit (disabled by default) commit 85c2d81f299ed3444658011b7d6fb0a7ab8a6f55 Author: Alexander Gottwald <ago@freedesktop.org> Date: Fri Aug 13 16:28:19 2004 +0000 Set most significant bit to be a one. (Bug #1024, Kensuke Matsuzaki) Fix conversion from sjis and euc. (Bug #1024, Toshio Takabe) commit c4d56e4e288d4e48b84b021a61638f46e9a45e27 Author: Adam Jackson <ajax@nwnk.net> Date: Wed Aug 11 05:25:13 2004 +0000 Bug #372: Prevent a crash in XPolygonRegion when called with a bogus point count. Reported by Andreas Luik. commit 92487437173f600f208d825f65756d3ad14a4f7e Author: Kevin E Martin <kem@kem.org> Date: Mon Aug 9 22:37:22 2004 +0000 Fix install problem on platforms not using xorg.cf/xfree86.cf (Bug #339, Harold L. Hunt II, Alexander Gottwald). Fix crash when using X core font in zh_CN.UTF-8 locale (Bug #368, Yu Shao, David Dawes). Fix glXMakeCurrent(Dpy, None, NULL) crash (Bug #719, Adam Jackson). HP-PA build fix (Bug #828, Guy Martin, Paul Anderson). Fix SDK build for GATOS and Wacom driver (Bug #829, Bryan Stine). Fix attempt to read video ROM before enabling it (Bug #843, Ivan Kokshaysky, Mike A. Harris). Fix detection of primary adapter (Bug #843, Ivan Kokshaysky, Mike A. Harris). Clarify xset man page description of how to use the keyboard repeat rate settings (Bug #846, Mike A. Harris). Fix problem where print-screen key would get remapped to sys-req in certain keymaps, which broke GNOME printscreen functionality (Bug #847, Owen Taylor). Fix several render problems: - MMIO mode support - Hang on IGP chips - VT switching hang - 3D render corruption (Bug #922, Hui Yu). commit 55c2ee568e7d3903258286a13bdf96ce5348ffda Author: Matthieu Herrb <matthieu.herrb@laas.fr> Date: Tue Jul 27 06:06:05 2004 +0000 - remove remaining AMOEBA references. - remove unused file. commit 6e884b12911eedfb003e90a3829ce66f7fc9cf2d Author: Søren Sandmann Pedersen <sandmann@daimi.au.dk> Date: Tue Jul 20 17:48:09 2004 +0000 Tue Jul 20 19:38:06 2004 Soeren Sandmann <sandmann@daimi.au.dk> Set font_data->xlfd_data to NULL after XFree(). (#837, patch from Bastien Nocera). Tue Jul 20 18:23:32 2004 Soeren Sandmann <sandmann@daimi.au.dk> Use /dev/urandom on Linux.(#761). commit 6f0bc97aa4e6de5a4b001f40ac10795cfdf09fc1 Author: Eric Anholt <anholt@freebsd.org> Date: Fri May 28 23:26:44 2004 +0000 Forced commit to note repocopy from xc/lib/XThrStub, will be connected to the build after this. commit aa7010c43ae9f39fb84b5ff155f76117c9e527a0 Author: Egbert Eich <eich@pdx.freedesktop.org> Date: Mon May 24 19:02:11 2004 +0000 Improve 'uniqueness' of authorization cookie sent by client for XDM-AUTHORIZATION-1. Old 'uniquness' consisted of the PID of the client, a time stamp (in seconds) and a number obtained by starting to count down from 0xffff. When a client did an XOpenDisplay() then execv'ed a child and did XOpenDisplay() again within the same second, the cookie was identical to the previous one (as the PID did not change but the static 'count down' variable was reinitialized) and thus refused by the server. commit 720702da29769d80ad1254d92edbad5b30f8a8da Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Sat May 22 03:47:42 2004 +0000 Bugzilla #658: XStringToKeysym fails for Greek_IOTAdiaeresis (Fixes VSW5 testcase XStringToKeysym-7 failure) commit 3aed873292424b497d9a7dcee2975b95bf5ac966 Author: Alan Coopersmith <alan.coopersmith@sun.com> Date: Sat Apr 24 23:39:25 2004 +0000 XOpenDisplay should try tcp connection if local connections fail (aka Sun bug id #4624183). Also includes fix from NetBSD Problem Report #25098 (Michael van Elst) (Xlib segfaults with IPv6 if compiled with HASXDMAUTH). xc/config/cf/sunLib.tmpl xc/lib/FS/Imakefile Add missing shared library dependencies for Solaris commit c6349f43193b74a3c09945f3093a871b0157ba47 Author: Egbert Eich <eich@freedesktop.org> Date: Fri Apr 23 18:42:09 2004 +0000 Merging XORG-CURRENT into trunk commit c3c4ddc682950a01b80825021f3e2503ab01ea7f Author: Kaleb Keithley <kaleb@freedesktop.org> Date: Tue Nov 25 19:28:07 2003 +0000 Initial revision commit dc4268a7dadc8da0d561757a68461246728613d3 Author: Kaleb Keithley <kaleb@freedesktop.org> Date: Fri Nov 14 16:48:47 2003 +0000 Initial revision commit deae12c6b683898f5213992d561a59d4ea889cca Author: Kaleb Keithley <kaleb@freedesktop.org> Date: Fri Nov 14 15:54:30 2003 +0000 R6.6 is the Xorg base-line r //freedesktop.org/bugzilla/show_bug.cgi?id=1544): Adding support for the si_LK (si, sinhala, si_LK, si_LK.UTF-8) locale. Patch by Anuradha Ratnaweera <gnu.slash.linux@gmail.com>. commit 443890ceefbd6dafe68e30d103ec4f9d316ed655 Author: Roland Mainz <roland.libX11-1.6.3/x11-xcb.pc.in��������������������������������������������������������������������������0000644�0143106�0000012�00000000347�12477417235�0015176�0����������������������������������������������������������������������������������������������������ustar�00alanc���������������������������staff���������������������������0000266�0200006������������������������������������������������������������������������������������������������������������������������������������������������������������������������prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: X11 XCB Description: X Library XCB interface Version: @PACKAGE_VERSION@ Requires: x11 xcb Cflags: -I${includedir} Libs: -L${libdir} -lX11-xcb �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libX11-1.6.3/cpprules.in����������������������������������������������������������������������������0000644�0143106�0000012�00000002235�12477417235�0015245�0����������������������������������������������������������������������������������������������������ustar�00alanc���������������������������staff���������������������������0000266�0200006������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- Makefile -*- # Rules for generating files using the C pre-processor # (Replaces CppFileTarget from Imake) SED = LC_CTYPE=C sed SUFFIXES += .pre WCHAR32_FLAGS = -DWCHAR32=@WCHAR32@ CPP_FILES_FLAGS = $(WCHAR32_FLAGS) # Translate XCOMM into pound sign with sed, rather than passing -DXCOMM=XCOMM # to cpp, because that trick does not work on all ANSI C preprocessors. # Delete line numbers from the cpp output (-P is not portable, I guess). # Allow XCOMM to be preceded by whitespace and provide a means of generating # output lines with trailing backslashes. # Allow XHASH to always be substituted, even in cases where XCOMM isn't. CPP_SED_MAGIC = $(SED) -e '/^\# *[0-9][0-9]* *.*$$/d' \ -e '/^\#line *[0-9][0-9]* *.*$$/d' \ -e '/^[ ]*XCOMM$$/s/XCOMM/\#/' \ -e '/^[ ]*XCOMM[^a-zA-Z0-9_]/s/XCOMM/\#/' \ -e '/^[ ]*XHASH/s/XHASH/\#/' \ -e 's,X11_LOCALEDATADIR,$(X11_LOCALEDATADIR),g' \ -e '/\@\@$$/s/\@\@$$/\\/' .pre: @$(MKDIR_P) $(@D) $(AM_V_GEN)$(RAWCPP) $(RAWCPPFLAGS) $(CPP_FILES_FLAGS) < $< | $(CPP_SED_MAGIC) > $@ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libX11-1.6.3/aclocal.m4�����������������������������������������������������������������������������0000644�0143106�0000012�00001515234�12477417244�0014731�0����������������������������������������������������������������������������������������������������ustar�00alanc���������������������������staff���������������������������0000266�0200006������������������������������������������������������������������������������������������������������������������������������������������������������������������������# generated automatically by aclocal 1.15 -*- Autoconf -*- # Copyright (C) 1996-2014 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # Copyright (C) 2002-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.15' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.15], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.15])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each '.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html> # <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html> AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542> Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: <http://www.gnu.org/software/coreutils/>. If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar <conftest.tar]) AM_RUN_LOG([cat conftest.dir/file]) grep GrepMe conftest.dir/file >/dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/ax_define_dir.m4]) # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 57 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the `libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to `config.status' so that its # declaration there will have the same value as in `configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # <var>='`$ECHO "$<var>" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags="_LT_TAGS"dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the `libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into `config.status', and then the shell code to quote escape them in # for loops in `config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # `#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test $lt_write_fail = 0 && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to <bug-libtool@gnu.org>." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_REPLACE_SHELLFNS mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test "$lt_cv_ld_force_load" = "yes"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script which will find a shell with a builtin # printf (which we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case "$ECHO" in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified).], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([${with_sysroot}]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and in which our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include <dlfcn.h> #endif #include <stdio.h> #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib<name>.so # instead of lib<name>.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$lt_save_ifs" else lt_cv_path_LD="$LD" # Let the user override the test with a path. fi]) LD="$lt_cv_path_LD" if test -n "$LD"; then AC_MSG_RESULT($LD) else AC_MSG_RESULT(no) fi test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) _LT_PATH_LD_GNU AC_SUBST([LD]) _LT_TAGDECL([], [LD], [1], [The linker used to build libraries]) ])# LT_PATH_LD # Old names: AU_ALIAS([AM_PROG_LD], [LT_PATH_LD]) AU_ALIAS([AC_PROG_LD], [LT_PATH_LD]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_LD], []) dnl AC_DEFUN([AC_PROG_LD], []) # _LT_PATH_LD_GNU #- -------------- m4_defun([_LT_PATH_LD_GNU], [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld, [# I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) lt_cv_prog_gnu_ld=yes ;; *) lt_cv_prog_gnu_ld=no ;; esac]) with_gnu_ld=$lt_cv_prog_gnu_ld ])# _LT_PATH_LD_GNU # _LT_CMD_RELOAD # -------------- # find reload flag for linker # -- PORTME Some linkers may need a different reload flag. m4_defun([_LT_CMD_RELOAD], [AC_CACHE_CHECK([for $LD option to reload object files], lt_cv_ld_reload_flag, [lt_cv_ld_reload_flag='-r']) reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test "$GCC" != yes; then reload_cmds=false fi ;; darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac _LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl _LT_TAGDECL([], [reload_cmds], [2])dnl ])# _LT_CMD_RELOAD # _LT_CHECK_MAGIC_METHOD # ---------------------- # how to check for library dependencies # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_MAGIC_METHOD], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) AC_CACHE_CHECK([how to recognize dependent libraries], lt_cv_deplibs_check_method, [lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[[4-9]]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[[45]]*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach <jrb3@best.com> says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS="$save_LDFLAGS"]) if test "$lt_cv_irix_exported_symbol" = yes; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach <jrb3@best.com> says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) # ------------------------------------------------------ # In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and # '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. m4_defun([_LT_PROG_FUNCTION_REPLACE], [dnl { sed -e '/^$1 ()$/,/^} # $1 /c\ $1 ()\ {\ m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) } # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: ]) # _LT_PROG_REPLACE_SHELLFNS # ------------------------- # Replace existing portable implementations of several shell functions with # equivalent extended shell implementations where those features are available.. m4_defun([_LT_PROG_REPLACE_SHELLFNS], [if test x"$xsi_shell" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"}]) _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl func_split_long_opt_name=${1%%=*} func_split_long_opt_arg=${1#*=}]) _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) fi if test x"$lt_shell_append" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl func_quote_for_eval "${2}" dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) fi ]) # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine which file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS # Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, # Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 7 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the `shared' and # `disable-shared' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the `static' and # `disable-static' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the `fast-install' # and `disable-fast-install' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) # ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59 which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) # ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 3337 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.2]) m4_define([LT_PACKAGE_REVISION], [1.3337]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.2' macro_revision='1.3337' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) # lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # # Copyright © 2004 Scott James Remnant <scott@netsplit.com>. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # PKG_PROG_PKG_CONFIG([MIN-VERSION]) # ---------------------------------- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])# PKG_PROG_PKG_CONFIG # PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of modules exists. Similar # to PKG_CHECK_MODULES(), but does not set variables or print errors. # # # Similar to PKG_CHECK_MODULES, make sure that the first instance of # this or PKG_CHECK_MODULES is called, or make sure to call # PKG_CHECK_EXISTS manually # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_ifval([$2], [$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # --------------------------------------------- m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])# _PKG_CONFIG # _PKG_SHORT_ERRORS_SUPPORTED # ----------------------------- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])# _PKG_SHORT_ERRORS_SUPPORTED # PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # # # Note that if there is a possibility the first call to # PKG_CHECK_MODULES might not happen, you should be sure to include an # explicit call to PKG_PROG_PKG_CONFIG in your configure.ac # # # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD ifelse([$4], , [AC_MSG_ERROR(dnl [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT ])], [AC_MSG_RESULT([no]) $4]) elif test $pkg_failed = untried; then ifelse([$4], , [AC_MSG_FAILURE(dnl [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see <http://pkg-config.freedesktop.org/>.])], [$4]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) ifelse([$3], , :, [$3]) fi[]dnl ])# PKG_CHECK_MODULES dnl xorg-macros.m4. Generated from xorg-macros.m4.in xorgversion.m4 by configure. dnl dnl Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. dnl dnl Permission is hereby granted, free of charge, to any person obtaining a dnl copy of this software and associated documentation files (the "Software"), dnl to deal in the Software without restriction, including without limitation dnl the rights to use, copy, modify, merge, publish, distribute, sublicense, dnl and/or sell copies of the Software, and to permit persons to whom the dnl Software is furnished to do so, subject to the following conditions: dnl dnl The above copyright notice and this permission notice (including the next dnl paragraph) shall be included in all copies or substantial portions of the dnl Software. dnl dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR dnl IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, dnl FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL dnl THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER dnl LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING dnl FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER dnl DEALINGS IN THE SOFTWARE. # XORG_MACROS_VERSION(required-version) # ------------------------------------- # Minimum version: 1.1.0 # # If you're using a macro added in Version 1.1 or newer, include this in # your configure.ac with the minimum required version, such as: # XORG_MACROS_VERSION(1.1) # # To ensure that this macro is defined, also add: # m4_ifndef([XORG_MACROS_VERSION], # [m4_fatal([must install xorg-macros 1.1 or later before running autoconf/autogen])]) # # # See the "minimum version" comment for each macro you use to see what # version you require. m4_defun([XORG_MACROS_VERSION],[ m4_define([vers_have], [1.19.0]) m4_define([maj_have], m4_substr(vers_have, 0, m4_index(vers_have, [.]))) m4_define([maj_needed], m4_substr([$1], 0, m4_index([$1], [.]))) m4_if(m4_cmp(maj_have, maj_needed), 0,, [m4_fatal([xorg-macros major version ]maj_needed[ is required but ]vers_have[ found])]) m4_if(m4_version_compare(vers_have, [$1]), -1, [m4_fatal([xorg-macros version $1 or higher is required but ]vers_have[ found])]) m4_undefine([vers_have]) m4_undefine([maj_have]) m4_undefine([maj_needed]) ]) # XORG_MACROS_VERSION # XORG_PROG_RAWCPP() # ------------------ # Minimum version: 1.0.0 # # Find cpp program and necessary flags for use in pre-processing text files # such as man pages and config files AC_DEFUN([XORG_PROG_RAWCPP],[ AC_REQUIRE([AC_PROG_CPP]) AC_PATH_PROGS(RAWCPP, [cpp], [${CPP}], [$PATH:/bin:/usr/bin:/usr/lib:/usr/libexec:/usr/ccs/lib:/usr/ccs/lbin:/lib]) # Check for flag to avoid builtin definitions - assumes unix is predefined, # which is not the best choice for supporting other OS'es, but covers most # of the ones we need for now. AC_MSG_CHECKING([if $RAWCPP requires -undef]) AC_LANG_CONFTEST([AC_LANG_SOURCE([[Does cpp redefine unix ?]])]) if test `${RAWCPP} < conftest.$ac_ext | grep -c 'unix'` -eq 1 ; then AC_MSG_RESULT([no]) else if test `${RAWCPP} -undef < conftest.$ac_ext | grep -c 'unix'` -eq 1 ; then RAWCPPFLAGS=-undef AC_MSG_RESULT([yes]) # under Cygwin unix is still defined even with -undef elif test `${RAWCPP} -undef -ansi < conftest.$ac_ext | grep -c 'unix'` -eq 1 ; then RAWCPPFLAGS="-undef -ansi" AC_MSG_RESULT([yes, with -ansi]) else AC_MSG_ERROR([${RAWCPP} defines unix with or without -undef. I don't know what to do.]) fi fi rm -f conftest.$ac_ext AC_MSG_CHECKING([if $RAWCPP requires -traditional]) AC_LANG_CONFTEST([AC_LANG_SOURCE([[Does cpp preserve "whitespace"?]])]) if test `${RAWCPP} < conftest.$ac_ext | grep -c 'preserve \"'` -eq 1 ; then AC_MSG_RESULT([no]) else if test `${RAWCPP} -traditional < conftest.$ac_ext | grep -c 'preserve \"'` -eq 1 ; then TRADITIONALCPPFLAGS="-traditional" RAWCPPFLAGS="${RAWCPPFLAGS} -traditional" AC_MSG_RESULT([yes]) else AC_MSG_ERROR([${RAWCPP} does not preserve whitespace with or without -traditional. I don't know what to do.]) fi fi rm -f conftest.$ac_ext AC_SUBST(RAWCPPFLAGS) AC_SUBST(TRADITIONALCPPFLAGS) ]) # XORG_PROG_RAWCPP # XORG_MANPAGE_SECTIONS() # ----------------------- # Minimum version: 1.0.0 # # Determine which sections man pages go in for the different man page types # on this OS - replaces *ManSuffix settings in old Imake *.cf per-os files. # Not sure if there's any better way than just hardcoding by OS name. # Override default settings by setting environment variables # Added MAN_SUBSTS in version 1.8 # Added AC_PROG_SED in version 1.8 AC_DEFUN([XORG_MANPAGE_SECTIONS],[ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_PROG_SED]) if test x$APP_MAN_SUFFIX = x ; then APP_MAN_SUFFIX=1 fi if test x$APP_MAN_DIR = x ; then APP_MAN_DIR='$(mandir)/man$(APP_MAN_SUFFIX)' fi if test x$LIB_MAN_SUFFIX = x ; then LIB_MAN_SUFFIX=3 fi if test x$LIB_MAN_DIR = x ; then LIB_MAN_DIR='$(mandir)/man$(LIB_MAN_SUFFIX)' fi if test x$FILE_MAN_SUFFIX = x ; then case $host_os in solaris*) FILE_MAN_SUFFIX=4 ;; *) FILE_MAN_SUFFIX=5 ;; esac fi if test x$FILE_MAN_DIR = x ; then FILE_MAN_DIR='$(mandir)/man$(FILE_MAN_SUFFIX)' fi if test x$MISC_MAN_SUFFIX = x ; then case $host_os in solaris*) MISC_MAN_SUFFIX=5 ;; *) MISC_MAN_SUFFIX=7 ;; esac fi if test x$MISC_MAN_DIR = x ; then MISC_MAN_DIR='$(mandir)/man$(MISC_MAN_SUFFIX)' fi if test x$DRIVER_MAN_SUFFIX = x ; then case $host_os in solaris*) DRIVER_MAN_SUFFIX=7 ;; *) DRIVER_MAN_SUFFIX=4 ;; esac fi if test x$DRIVER_MAN_DIR = x ; then DRIVER_MAN_DIR='$(mandir)/man$(DRIVER_MAN_SUFFIX)' fi if test x$ADMIN_MAN_SUFFIX = x ; then case $host_os in solaris*) ADMIN_MAN_SUFFIX=1m ;; *) ADMIN_MAN_SUFFIX=8 ;; esac fi if test x$ADMIN_MAN_DIR = x ; then ADMIN_MAN_DIR='$(mandir)/man$(ADMIN_MAN_SUFFIX)' fi AC_SUBST([APP_MAN_SUFFIX]) AC_SUBST([LIB_MAN_SUFFIX]) AC_SUBST([FILE_MAN_SUFFIX]) AC_SUBST([MISC_MAN_SUFFIX]) AC_SUBST([DRIVER_MAN_SUFFIX]) AC_SUBST([ADMIN_MAN_SUFFIX]) AC_SUBST([APP_MAN_DIR]) AC_SUBST([LIB_MAN_DIR]) AC_SUBST([FILE_MAN_DIR]) AC_SUBST([MISC_MAN_DIR]) AC_SUBST([DRIVER_MAN_DIR]) AC_SUBST([ADMIN_MAN_DIR]) XORG_MAN_PAGE="X Version 11" AC_SUBST([XORG_MAN_PAGE]) MAN_SUBSTS="\ -e 's|__vendorversion__|\"\$(PACKAGE_STRING)\" \"\$(XORG_MAN_PAGE)\"|' \ -e 's|__xorgversion__|\"\$(PACKAGE_STRING)\" \"\$(XORG_MAN_PAGE)\"|' \ -e 's|__xservername__|Xorg|g' \ -e 's|__xconfigfile__|xorg.conf|g' \ -e 's|__projectroot__|\$(prefix)|g' \ -e 's|__apploaddir__|\$(appdefaultdir)|g' \ -e 's|__appmansuffix__|\$(APP_MAN_SUFFIX)|g' \ -e 's|__drivermansuffix__|\$(DRIVER_MAN_SUFFIX)|g' \ -e 's|__adminmansuffix__|\$(ADMIN_MAN_SUFFIX)|g' \ -e 's|__libmansuffix__|\$(LIB_MAN_SUFFIX)|g' \ -e 's|__miscmansuffix__|\$(MISC_MAN_SUFFIX)|g' \ -e 's|__filemansuffix__|\$(FILE_MAN_SUFFIX)|g'" AC_SUBST([MAN_SUBSTS]) ]) # XORG_MANPAGE_SECTIONS # XORG_CHECK_SGML_DOCTOOLS([MIN-VERSION]) # ------------------------ # Minimum version: 1.7.0 # # Defines the variable XORG_SGML_PATH containing the location of X11/defs.ent # provided by xorg-sgml-doctools, if installed. AC_DEFUN([XORG_CHECK_SGML_DOCTOOLS],[ AC_MSG_CHECKING([for X.Org SGML entities m4_ifval([$1],[>= $1])]) XORG_SGML_PATH= PKG_CHECK_EXISTS([xorg-sgml-doctools m4_ifval([$1],[>= $1])], [XORG_SGML_PATH=`$PKG_CONFIG --variable=sgmlrootdir xorg-sgml-doctools`], [m4_ifval([$1],[:], [if test x"$cross_compiling" != x"yes" ; then AC_CHECK_FILE([$prefix/share/sgml/X11/defs.ent], [XORG_SGML_PATH=$prefix/share/sgml]) fi]) ]) # Define variables STYLESHEET_SRCDIR and XSL_STYLESHEET containing # the path and the name of the doc stylesheet if test "x$XORG_SGML_PATH" != "x" ; then AC_MSG_RESULT([$XORG_SGML_PATH]) STYLESHEET_SRCDIR=$XORG_SGML_PATH/X11 XSL_STYLESHEET=$STYLESHEET_SRCDIR/xorg.xsl else AC_MSG_RESULT([no]) fi AC_SUBST(XORG_SGML_PATH) AC_SUBST(STYLESHEET_SRCDIR) AC_SUBST(XSL_STYLESHEET) AM_CONDITIONAL([HAVE_STYLESHEETS], [test "x$XSL_STYLESHEET" != "x"]) ]) # XORG_CHECK_SGML_DOCTOOLS # XORG_CHECK_LINUXDOC # ------------------- # Minimum version: 1.0.0 # # Defines the variable MAKE_TEXT if the necessary tools and # files are found. $(MAKE_TEXT) blah.sgml will then produce blah.txt. # Whether or not the necessary tools and files are found can be checked # with the AM_CONDITIONAL "BUILD_LINUXDOC" AC_DEFUN([XORG_CHECK_LINUXDOC],[ AC_REQUIRE([XORG_CHECK_SGML_DOCTOOLS]) AC_REQUIRE([XORG_WITH_PS2PDF]) AC_PATH_PROG(LINUXDOC, linuxdoc) AC_MSG_CHECKING([whether to build documentation]) if test x$XORG_SGML_PATH != x && test x$LINUXDOC != x ; then BUILDDOC=yes else BUILDDOC=no fi AM_CONDITIONAL(BUILD_LINUXDOC, [test x$BUILDDOC = xyes]) AC_MSG_RESULT([$BUILDDOC]) AC_MSG_CHECKING([whether to build pdf documentation]) if test x$have_ps2pdf != xno && test x$BUILD_PDFDOC != xno; then BUILDPDFDOC=yes else BUILDPDFDOC=no fi AM_CONDITIONAL(BUILD_PDFDOC, [test x$BUILDPDFDOC = xyes]) AC_MSG_RESULT([$BUILDPDFDOC]) MAKE_TEXT="SGML_SEARCH_PATH=$XORG_SGML_PATH GROFF_NO_SGR=y $LINUXDOC -B txt -f" MAKE_PS="SGML_SEARCH_PATH=$XORG_SGML_PATH $LINUXDOC -B latex --papersize=letter --output=ps" MAKE_PDF="$PS2PDF" MAKE_HTML="SGML_SEARCH_PATH=$XORG_SGML_PATH $LINUXDOC -B html --split=0" AC_SUBST(MAKE_TEXT) AC_SUBST(MAKE_PS) AC_SUBST(MAKE_PDF) AC_SUBST(MAKE_HTML) ]) # XORG_CHECK_LINUXDOC # XORG_CHECK_DOCBOOK # ------------------- # Minimum version: 1.0.0 # # Checks for the ability to build output formats from SGML DocBook source. # For XXX in {TXT, PDF, PS, HTML}, the AM_CONDITIONAL "BUILD_XXXDOC" # indicates whether the necessary tools and files are found and, if set, # $(MAKE_XXX) blah.sgml will produce blah.xxx. AC_DEFUN([XORG_CHECK_DOCBOOK],[ AC_REQUIRE([XORG_CHECK_SGML_DOCTOOLS]) BUILDTXTDOC=no BUILDPDFDOC=no BUILDPSDOC=no BUILDHTMLDOC=no AC_PATH_PROG(DOCBOOKPS, docbook2ps) AC_PATH_PROG(DOCBOOKPDF, docbook2pdf) AC_PATH_PROG(DOCBOOKHTML, docbook2html) AC_PATH_PROG(DOCBOOKTXT, docbook2txt) AC_MSG_CHECKING([whether to build text documentation]) if test x$XORG_SGML_PATH != x && test x$DOCBOOKTXT != x && test x$BUILD_TXTDOC != xno; then BUILDTXTDOC=yes fi AM_CONDITIONAL(BUILD_TXTDOC, [test x$BUILDTXTDOC = xyes]) AC_MSG_RESULT([$BUILDTXTDOC]) AC_MSG_CHECKING([whether to build PDF documentation]) if test x$XORG_SGML_PATH != x && test x$DOCBOOKPDF != x && test x$BUILD_PDFDOC != xno; then BUILDPDFDOC=yes fi AM_CONDITIONAL(BUILD_PDFDOC, [test x$BUILDPDFDOC = xyes]) AC_MSG_RESULT([$BUILDPDFDOC]) AC_MSG_CHECKING([whether to build PostScript documentation]) if test x$XORG_SGML_PATH != x && test x$DOCBOOKPS != x && test x$BUILD_PSDOC != xno; then BUILDPSDOC=yes fi AM_CONDITIONAL(BUILD_PSDOC, [test x$BUILDPSDOC = xyes]) AC_MSG_RESULT([$BUILDPSDOC]) AC_MSG_CHECKING([whether to build HTML documentation]) if test x$XORG_SGML_PATH != x && test x$DOCBOOKHTML != x && test x$BUILD_HTMLDOC != xno; then BUILDHTMLDOC=yes fi AM_CONDITIONAL(BUILD_HTMLDOC, [test x$BUILDHTMLDOC = xyes]) AC_MSG_RESULT([$BUILDHTMLDOC]) MAKE_TEXT="SGML_SEARCH_PATH=$XORG_SGML_PATH $DOCBOOKTXT" MAKE_PS="SGML_SEARCH_PATH=$XORG_SGML_PATH $DOCBOOKPS" MAKE_PDF="SGML_SEARCH_PATH=$XORG_SGML_PATH $DOCBOOKPDF" MAKE_HTML="SGML_SEARCH_PATH=$XORG_SGML_PATH $DOCBOOKHTML" AC_SUBST(MAKE_TEXT) AC_SUBST(MAKE_PS) AC_SUBST(MAKE_PDF) AC_SUBST(MAKE_HTML) ]) # XORG_CHECK_DOCBOOK # XORG_WITH_XMLTO([MIN-VERSION], [DEFAULT]) # ---------------- # Minimum version: 1.5.0 # Minimum version for optional DEFAULT argument: 1.11.0 # # Documentation tools are not always available on all platforms and sometimes # not at the appropriate level. This macro enables a module to test for the # presence of the tool and obtain it's path in separate variables. Coupled with # the --with-xmlto option, it allows maximum flexibilty in making decisions # as whether or not to use the xmlto package. When DEFAULT is not specified, # --with-xmlto assumes 'auto'. # # Interface to module: # HAVE_XMLTO: used in makefiles to conditionally generate documentation # XMLTO: returns the path of the xmlto program found # returns the path set by the user in the environment # --with-xmlto: 'yes' user instructs the module to use xmlto # 'no' user instructs the module not to use xmlto # # Added in version 1.10.0 # HAVE_XMLTO_TEXT: used in makefiles to conditionally generate text documentation # xmlto for text output requires either lynx, links, or w3m browsers # # If the user sets the value of XMLTO, AC_PATH_PROG skips testing the path. # AC_DEFUN([XORG_WITH_XMLTO],[ AC_ARG_VAR([XMLTO], [Path to xmlto command]) m4_define([_defopt], m4_default([$2], [auto])) AC_ARG_WITH(xmlto, AS_HELP_STRING([--with-xmlto], [Use xmlto to regenerate documentation (default: ]_defopt[)]), [use_xmlto=$withval], [use_xmlto=]_defopt) m4_undefine([_defopt]) if test "x$use_xmlto" = x"auto"; then AC_PATH_PROG([XMLTO], [xmlto]) if test "x$XMLTO" = "x"; then AC_MSG_WARN([xmlto not found - documentation targets will be skipped]) have_xmlto=no else have_xmlto=yes fi elif test "x$use_xmlto" = x"yes" ; then AC_PATH_PROG([XMLTO], [xmlto]) if test "x$XMLTO" = "x"; then AC_MSG_ERROR([--with-xmlto=yes specified but xmlto not found in PATH]) fi have_xmlto=yes elif test "x$use_xmlto" = x"no" ; then if test "x$XMLTO" != "x"; then AC_MSG_WARN([ignoring XMLTO environment variable since --with-xmlto=no was specified]) fi have_xmlto=no else AC_MSG_ERROR([--with-xmlto expects 'yes' or 'no']) fi # Test for a minimum version of xmlto, if provided. m4_ifval([$1], [if test "$have_xmlto" = yes; then # scrape the xmlto version AC_MSG_CHECKING([the xmlto version]) xmlto_version=`$XMLTO --version 2>/dev/null | cut -d' ' -f3` AC_MSG_RESULT([$xmlto_version]) AS_VERSION_COMPARE([$xmlto_version], [$1], [if test "x$use_xmlto" = xauto; then AC_MSG_WARN([xmlto version $xmlto_version found, but $1 needed]) have_xmlto=no else AC_MSG_ERROR([xmlto version $xmlto_version found, but $1 needed]) fi]) fi]) # Test for the ability of xmlto to generate a text target have_xmlto_text=no cat > conftest.xml << "EOF" EOF AS_IF([test "$have_xmlto" = yes], [AS_IF([$XMLTO --skip-validation txt conftest.xml >/dev/null 2>&1], [have_xmlto_text=yes], [AC_MSG_WARN([xmlto cannot generate text format, this format skipped])])]) rm -f conftest.xml AM_CONDITIONAL([HAVE_XMLTO_TEXT], [test $have_xmlto_text = yes]) AM_CONDITIONAL([HAVE_XMLTO], [test "$have_xmlto" = yes]) ]) # XORG_WITH_XMLTO # XORG_WITH_XSLTPROC([MIN-VERSION], [DEFAULT]) # -------------------------------------------- # Minimum version: 1.12.0 # Minimum version for optional DEFAULT argument: 1.12.0 # # XSLT (Extensible Stylesheet Language Transformations) is a declarative, # XML-based language used for the transformation of XML documents. # The xsltproc command line tool is for applying XSLT stylesheets to XML documents. # It is used under the cover by xmlto to generate html files from DocBook/XML. # The XSLT processor is often used as a standalone tool for transformations. # It should not be assumed that this tool is used only to work with documnetation. # When DEFAULT is not specified, --with-xsltproc assumes 'auto'. # # Interface to module: # HAVE_XSLTPROC: used in makefiles to conditionally generate documentation # XSLTPROC: returns the path of the xsltproc program found # returns the path set by the user in the environment # --with-xsltproc: 'yes' user instructs the module to use xsltproc # 'no' user instructs the module not to use xsltproc # have_xsltproc: returns yes if xsltproc found in PATH or no # # If the user sets the value of XSLTPROC, AC_PATH_PROG skips testing the path. # AC_DEFUN([XORG_WITH_XSLTPROC],[ AC_ARG_VAR([XSLTPROC], [Path to xsltproc command]) # Preserves the interface, should it be implemented later m4_ifval([$1], [m4_warn([syntax], [Checking for xsltproc MIN-VERSION is not implemented])]) m4_define([_defopt], m4_default([$2], [auto])) AC_ARG_WITH(xsltproc, AS_HELP_STRING([--with-xsltproc], [Use xsltproc for the transformation of XML documents (default: ]_defopt[)]), [use_xsltproc=$withval], [use_xsltproc=]_defopt) m4_undefine([_defopt]) if test "x$use_xsltproc" = x"auto"; then AC_PATH_PROG([XSLTPROC], [xsltproc]) if test "x$XSLTPROC" = "x"; then AC_MSG_WARN([xsltproc not found - cannot transform XML documents]) have_xsltproc=no else have_xsltproc=yes fi elif test "x$use_xsltproc" = x"yes" ; then AC_PATH_PROG([XSLTPROC], [xsltproc]) if test "x$XSLTPROC" = "x"; then AC_MSG_ERROR([--with-xsltproc=yes specified but xsltproc not found in PATH]) fi have_xsltproc=yes elif test "x$use_xsltproc" = x"no" ; then if test "x$XSLTPROC" != "x"; then AC_MSG_WARN([ignoring XSLTPROC environment variable since --with-xsltproc=no was specified]) fi have_xsltproc=no else AC_MSG_ERROR([--with-xsltproc expects 'yes' or 'no']) fi AM_CONDITIONAL([HAVE_XSLTPROC], [test "$have_xsltproc" = yes]) ]) # XORG_WITH_XSLTPROC # XORG_WITH_PERL([MIN-VERSION], [DEFAULT]) # ---------------------------------------- # Minimum version: 1.15.0 # # PERL (Practical Extraction and Report Language) is a language optimized for # scanning arbitrary text files, extracting information from those text files, # and printing reports based on that information. # # When DEFAULT is not specified, --with-perl assumes 'auto'. # # Interface to module: # HAVE_PERL: used in makefiles to conditionally scan text files # PERL: returns the path of the perl program found # returns the path set by the user in the environment # --with-perl: 'yes' user instructs the module to use perl # 'no' user instructs the module not to use perl # have_perl: returns yes if perl found in PATH or no # # If the user sets the value of PERL, AC_PATH_PROG skips testing the path. # AC_DEFUN([XORG_WITH_PERL],[ AC_ARG_VAR([PERL], [Path to perl command]) # Preserves the interface, should it be implemented later m4_ifval([$1], [m4_warn([syntax], [Checking for perl MIN-VERSION is not implemented])]) m4_define([_defopt], m4_default([$2], [auto])) AC_ARG_WITH(perl, AS_HELP_STRING([--with-perl], [Use perl for extracting information from files (default: ]_defopt[)]), [use_perl=$withval], [use_perl=]_defopt) m4_undefine([_defopt]) if test "x$use_perl" = x"auto"; then AC_PATH_PROG([PERL], [perl]) if test "x$PERL" = "x"; then AC_MSG_WARN([perl not found - cannot extract information and report]) have_perl=no else have_perl=yes fi elif test "x$use_perl" = x"yes" ; then AC_PATH_PROG([PERL], [perl]) if test "x$PERL" = "x"; then AC_MSG_ERROR([--with-perl=yes specified but perl not found in PATH]) fi have_perl=yes elif test "x$use_perl" = x"no" ; then if test "x$PERL" != "x"; then AC_MSG_WARN([ignoring PERL environment variable since --with-perl=no was specified]) fi have_perl=no else AC_MSG_ERROR([--with-perl expects 'yes' or 'no']) fi AM_CONDITIONAL([HAVE_PERL], [test "$have_perl" = yes]) ]) # XORG_WITH_PERL # XORG_WITH_ASCIIDOC([MIN-VERSION], [DEFAULT]) # ---------------- # Minimum version: 1.5.0 # Minimum version for optional DEFAULT argument: 1.11.0 # # Documentation tools are not always available on all platforms and sometimes # not at the appropriate level. This macro enables a module to test for the # presence of the tool and obtain it's path in separate variables. Coupled with # the --with-asciidoc option, it allows maximum flexibilty in making decisions # as whether or not to use the asciidoc package. When DEFAULT is not specified, # --with-asciidoc assumes 'auto'. # # Interface to module: # HAVE_ASCIIDOC: used in makefiles to conditionally generate documentation # ASCIIDOC: returns the path of the asciidoc program found # returns the path set by the user in the environment # --with-asciidoc: 'yes' user instructs the module to use asciidoc # 'no' user instructs the module not to use asciidoc # # If the user sets the value of ASCIIDOC, AC_PATH_PROG skips testing the path. # AC_DEFUN([XORG_WITH_ASCIIDOC],[ AC_ARG_VAR([ASCIIDOC], [Path to asciidoc command]) m4_define([_defopt], m4_default([$2], [auto])) AC_ARG_WITH(asciidoc, AS_HELP_STRING([--with-asciidoc], [Use asciidoc to regenerate documentation (default: ]_defopt[)]), [use_asciidoc=$withval], [use_asciidoc=]_defopt) m4_undefine([_defopt]) if test "x$use_asciidoc" = x"auto"; then AC_PATH_PROG([ASCIIDOC], [asciidoc]) if test "x$ASCIIDOC" = "x"; then AC_MSG_WARN([asciidoc not found - documentation targets will be skipped]) have_asciidoc=no else have_asciidoc=yes fi elif test "x$use_asciidoc" = x"yes" ; then AC_PATH_PROG([ASCIIDOC], [asciidoc]) if test "x$ASCIIDOC" = "x"; then AC_MSG_ERROR([--with-asciidoc=yes specified but asciidoc not found in PATH]) fi have_asciidoc=yes elif test "x$use_asciidoc" = x"no" ; then if test "x$ASCIIDOC" != "x"; then AC_MSG_WARN([ignoring ASCIIDOC environment variable since --with-asciidoc=no was specified]) fi have_asciidoc=no else AC_MSG_ERROR([--with-asciidoc expects 'yes' or 'no']) fi m4_ifval([$1], [if test "$have_asciidoc" = yes; then # scrape the asciidoc version AC_MSG_CHECKING([the asciidoc version]) asciidoc_version=`$ASCIIDOC --version 2>/dev/null | cut -d' ' -f2` AC_MSG_RESULT([$asciidoc_version]) AS_VERSION_COMPARE([$asciidoc_version], [$1], [if test "x$use_asciidoc" = xauto; then AC_MSG_WARN([asciidoc version $asciidoc_version found, but $1 needed]) have_asciidoc=no else AC_MSG_ERROR([asciidoc version $asciidoc_version found, but $1 needed]) fi]) fi]) AM_CONDITIONAL([HAVE_ASCIIDOC], [test "$have_asciidoc" = yes]) ]) # XORG_WITH_ASCIIDOC # XORG_WITH_DOXYGEN([MIN-VERSION], [DEFAULT]) # ------------------------------------------- # Minimum version: 1.5.0 # Minimum version for optional DEFAULT argument: 1.11.0 # Minimum version for optional DOT checking: 1.18.0 # # Documentation tools are not always available on all platforms and sometimes # not at the appropriate level. This macro enables a module to test for the # presence of the tool and obtain it's path in separate variables. Coupled with # the --with-doxygen option, it allows maximum flexibilty in making decisions # as whether or not to use the doxygen package. When DEFAULT is not specified, # --with-doxygen assumes 'auto'. # # Interface to module: # HAVE_DOXYGEN: used in makefiles to conditionally generate documentation # DOXYGEN: returns the path of the doxygen program found # returns the path set by the user in the environment # --with-doxygen: 'yes' user instructs the module to use doxygen # 'no' user instructs the module not to use doxygen # # If the user sets the value of DOXYGEN, AC_PATH_PROG skips testing the path. # AC_DEFUN([XORG_WITH_DOXYGEN],[ AC_ARG_VAR([DOXYGEN], [Path to doxygen command]) AC_ARG_VAR([DOT], [Path to the dot graphics utility]) m4_define([_defopt], m4_default([$2], [auto])) AC_ARG_WITH(doxygen, AS_HELP_STRING([--with-doxygen], [Use doxygen to regenerate documentation (default: ]_defopt[)]), [use_doxygen=$withval], [use_doxygen=]_defopt) m4_undefine([_defopt]) if test "x$use_doxygen" = x"auto"; then AC_PATH_PROG([DOXYGEN], [doxygen]) if test "x$DOXYGEN" = "x"; then AC_MSG_WARN([doxygen not found - documentation targets will be skipped]) have_doxygen=no else have_doxygen=yes fi elif test "x$use_doxygen" = x"yes" ; then AC_PATH_PROG([DOXYGEN], [doxygen]) if test "x$DOXYGEN" = "x"; then AC_MSG_ERROR([--with-doxygen=yes specified but doxygen not found in PATH]) fi have_doxygen=yes elif test "x$use_doxygen" = x"no" ; then if test "x$DOXYGEN" != "x"; then AC_MSG_WARN([ignoring DOXYGEN environment variable since --with-doxygen=no was specified]) fi have_doxygen=no else AC_MSG_ERROR([--with-doxygen expects 'yes' or 'no']) fi m4_ifval([$1], [if test "$have_doxygen" = yes; then # scrape the doxygen version AC_MSG_CHECKING([the doxygen version]) doxygen_version=`$DOXYGEN --version 2>/dev/null` AC_MSG_RESULT([$doxygen_version]) AS_VERSION_COMPARE([$doxygen_version], [$1], [if test "x$use_doxygen" = xauto; then AC_MSG_WARN([doxygen version $doxygen_version found, but $1 needed]) have_doxygen=no else AC_MSG_ERROR([doxygen version $doxygen_version found, but $1 needed]) fi]) fi]) dnl Check for DOT if we have doxygen. The caller decides if it is mandatory dnl HAVE_DOT is a variable that can be used in your doxygen.in config file: dnl HAVE_DOT = @HAVE_DOT@ HAVE_DOT=no if test "x$have_doxygen" = "xyes"; then AC_PATH_PROG([DOT], [dot]) if test "x$DOT" != "x"; then HAVE_DOT=yes fi fi AC_SUBST([HAVE_DOT]) AM_CONDITIONAL([HAVE_DOT], [test "$HAVE_DOT" = "yes"]) AM_CONDITIONAL([HAVE_DOXYGEN], [test "$have_doxygen" = yes]) ]) # XORG_WITH_DOXYGEN # XORG_WITH_GROFF([DEFAULT]) # ---------------- # Minimum version: 1.6.0 # Minimum version for optional DEFAULT argument: 1.11.0 # # Documentation tools are not always available on all platforms and sometimes # not at the appropriate level. This macro enables a module to test for the # presence of the tool and obtain it's path in separate variables. Coupled with # the --with-groff option, it allows maximum flexibilty in making decisions # as whether or not to use the groff package. When DEFAULT is not specified, # --with-groff assumes 'auto'. # # Interface to module: # HAVE_GROFF: used in makefiles to conditionally generate documentation # HAVE_GROFF_MM: the memorandum macros (-mm) package # HAVE_GROFF_MS: the -ms macros package # GROFF: returns the path of the groff program found # returns the path set by the user in the environment # --with-groff: 'yes' user instructs the module to use groff # 'no' user instructs the module not to use groff # # Added in version 1.9.0: # HAVE_GROFF_HTML: groff has dependencies to output HTML format: # pnmcut pnmcrop pnmtopng pnmtops from the netpbm package. # psselect from the psutils package. # the ghostcript package. Refer to the grohtml man pages # # If the user sets the value of GROFF, AC_PATH_PROG skips testing the path. # # OS and distros often splits groff in a basic and full package, the former # having the groff program and the later having devices, fonts and macros # Checking for the groff executable is not enough. # # If macros are missing, we cannot assume that groff is useless, so we don't # unset HAVE_GROFF or GROFF env variables. # HAVE_GROFF_?? can never be true while HAVE_GROFF is false. # AC_DEFUN([XORG_WITH_GROFF],[ AC_ARG_VAR([GROFF], [Path to groff command]) m4_define([_defopt], m4_default([$1], [auto])) AC_ARG_WITH(groff, AS_HELP_STRING([--with-groff], [Use groff to regenerate documentation (default: ]_defopt[)]), [use_groff=$withval], [use_groff=]_defopt) m4_undefine([_defopt]) if test "x$use_groff" = x"auto"; then AC_PATH_PROG([GROFF], [groff]) if test "x$GROFF" = "x"; then AC_MSG_WARN([groff not found - documentation targets will be skipped]) have_groff=no else have_groff=yes fi elif test "x$use_groff" = x"yes" ; then AC_PATH_PROG([GROFF], [groff]) if test "x$GROFF" = "x"; then AC_MSG_ERROR([--with-groff=yes specified but groff not found in PATH]) fi have_groff=yes elif test "x$use_groff" = x"no" ; then if test "x$GROFF" != "x"; then AC_MSG_WARN([ignoring GROFF environment variable since --with-groff=no was specified]) fi have_groff=no else AC_MSG_ERROR([--with-groff expects 'yes' or 'no']) fi # We have groff, test for the presence of the macro packages if test "x$have_groff" = x"yes"; then AC_MSG_CHECKING([for ${GROFF} -ms macros]) if ${GROFF} -ms -I. /dev/null >/dev/null 2>&1 ; then groff_ms_works=yes else groff_ms_works=no fi AC_MSG_RESULT([$groff_ms_works]) AC_MSG_CHECKING([for ${GROFF} -mm macros]) if ${GROFF} -mm -I. /dev/null >/dev/null 2>&1 ; then groff_mm_works=yes else groff_mm_works=no fi AC_MSG_RESULT([$groff_mm_works]) fi # We have groff, test for HTML dependencies, one command per package if test "x$have_groff" = x"yes"; then AC_PATH_PROGS(GS_PATH, [gs gswin32c]) AC_PATH_PROG(PNMTOPNG_PATH, [pnmtopng]) AC_PATH_PROG(PSSELECT_PATH, [psselect]) if test "x$GS_PATH" != "x" -a "x$PNMTOPNG_PATH" != "x" -a "x$PSSELECT_PATH" != "x"; then have_groff_html=yes else have_groff_html=no AC_MSG_WARN([grohtml dependencies not found - HTML Documentation skipped. Refer to grohtml man pages]) fi fi # Set Automake conditionals for Makefiles AM_CONDITIONAL([HAVE_GROFF], [test "$have_groff" = yes]) AM_CONDITIONAL([HAVE_GROFF_MS], [test "$groff_ms_works" = yes]) AM_CONDITIONAL([HAVE_GROFF_MM], [test "$groff_mm_works" = yes]) AM_CONDITIONAL([HAVE_GROFF_HTML], [test "$have_groff_html" = yes]) ]) # XORG_WITH_GROFF # XORG_WITH_FOP([MIN-VERSION], [DEFAULT]) # --------------------------------------- # Minimum version: 1.6.0 # Minimum version for optional DEFAULT argument: 1.11.0 # Minimum version for optional MIN-VERSION argument: 1.15.0 # # Documentation tools are not always available on all platforms and sometimes # not at the appropriate level. This macro enables a module to test for the # presence of the tool and obtain it's path in separate variables. Coupled with # the --with-fop option, it allows maximum flexibilty in making decisions # as whether or not to use the fop package. When DEFAULT is not specified, # --with-fop assumes 'auto'. # # Interface to module: # HAVE_FOP: used in makefiles to conditionally generate documentation # FOP: returns the path of the fop program found # returns the path set by the user in the environment # --with-fop: 'yes' user instructs the module to use fop # 'no' user instructs the module not to use fop # # If the user sets the value of FOP, AC_PATH_PROG skips testing the path. # AC_DEFUN([XORG_WITH_FOP],[ AC_ARG_VAR([FOP], [Path to fop command]) m4_define([_defopt], m4_default([$2], [auto])) AC_ARG_WITH(fop, AS_HELP_STRING([--with-fop], [Use fop to regenerate documentation (default: ]_defopt[)]), [use_fop=$withval], [use_fop=]_defopt) m4_undefine([_defopt]) if test "x$use_fop" = x"auto"; then AC_PATH_PROG([FOP], [fop]) if test "x$FOP" = "x"; then AC_MSG_WARN([fop not found - documentation targets will be skipped]) have_fop=no else have_fop=yes fi elif test "x$use_fop" = x"yes" ; then AC_PATH_PROG([FOP], [fop]) if test "x$FOP" = "x"; then AC_MSG_ERROR([--with-fop=yes specified but fop not found in PATH]) fi have_fop=yes elif test "x$use_fop" = x"no" ; then if test "x$FOP" != "x"; then AC_MSG_WARN([ignoring FOP environment variable since --with-fop=no was specified]) fi have_fop=no else AC_MSG_ERROR([--with-fop expects 'yes' or 'no']) fi # Test for a minimum version of fop, if provided. m4_ifval([$1], [if test "$have_fop" = yes; then # scrape the fop version AC_MSG_CHECKING([for fop minimum version]) fop_version=`$FOP -version 2>/dev/null | cut -d' ' -f3` AC_MSG_RESULT([$fop_version]) AS_VERSION_COMPARE([$fop_version], [$1], [if test "x$use_fop" = xauto; then AC_MSG_WARN([fop version $fop_version found, but $1 needed]) have_fop=no else AC_MSG_ERROR([fop version $fop_version found, but $1 needed]) fi]) fi]) AM_CONDITIONAL([HAVE_FOP], [test "$have_fop" = yes]) ]) # XORG_WITH_FOP # XORG_WITH_M4([MIN-VERSION]) # --------------------------- # Minimum version: 1.19.0 # # This macro attempts to locate an m4 macro processor which supports # -I option and is only useful for modules relying on M4 in order to # expand macros in source code files. # # Interface to module: # M4: returns the path of the m4 program found # returns the path set by the user in the environment # AC_DEFUN([XORG_WITH_M4], [ AC_CACHE_CHECK([for m4 that supports -I option], [ac_cv_path_M4], [AC_PATH_PROGS_FEATURE_CHECK([M4], [m4 gm4], [[$ac_path_M4 -I. /dev/null > /dev/null 2>&1 && \ ac_cv_path_M4=$ac_path_M4 ac_path_M4_found=:]], [AC_MSG_ERROR([could not find m4 that supports -I option])], [$PATH:/usr/gnu/bin])]) AC_SUBST([M4], [$ac_cv_path_M4]) ]) # XORG_WITH_M4 # XORG_WITH_PS2PDF([DEFAULT]) # ---------------- # Minimum version: 1.6.0 # Minimum version for optional DEFAULT argument: 1.11.0 # # Documentation tools are not always available on all platforms and sometimes # not at the appropriate level. This macro enables a module to test for the # presence of the tool and obtain it's path in separate variables. Coupled with # the --with-ps2pdf option, it allows maximum flexibilty in making decisions # as whether or not to use the ps2pdf package. When DEFAULT is not specified, # --with-ps2pdf assumes 'auto'. # # Interface to module: # HAVE_PS2PDF: used in makefiles to conditionally generate documentation # PS2PDF: returns the path of the ps2pdf program found # returns the path set by the user in the environment # --with-ps2pdf: 'yes' user instructs the module to use ps2pdf # 'no' user instructs the module not to use ps2pdf # # If the user sets the value of PS2PDF, AC_PATH_PROG skips testing the path. # AC_DEFUN([XORG_WITH_PS2PDF],[ AC_ARG_VAR([PS2PDF], [Path to ps2pdf command]) m4_define([_defopt], m4_default([$1], [auto])) AC_ARG_WITH(ps2pdf, AS_HELP_STRING([--with-ps2pdf], [Use ps2pdf to regenerate documentation (default: ]_defopt[)]), [use_ps2pdf=$withval], [use_ps2pdf=]_defopt) m4_undefine([_defopt]) if test "x$use_ps2pdf" = x"auto"; then AC_PATH_PROG([PS2PDF], [ps2pdf]) if test "x$PS2PDF" = "x"; then AC_MSG_WARN([ps2pdf not found - documentation targets will be skipped]) have_ps2pdf=no else have_ps2pdf=yes fi elif test "x$use_ps2pdf" = x"yes" ; then AC_PATH_PROG([PS2PDF], [ps2pdf]) if test "x$PS2PDF" = "x"; then AC_MSG_ERROR([--with-ps2pdf=yes specified but ps2pdf not found in PATH]) fi have_ps2pdf=yes elif test "x$use_ps2pdf" = x"no" ; then if test "x$PS2PDF" != "x"; then AC_MSG_WARN([ignoring PS2PDF environment variable since --with-ps2pdf=no was specified]) fi have_ps2pdf=no else AC_MSG_ERROR([--with-ps2pdf expects 'yes' or 'no']) fi AM_CONDITIONAL([HAVE_PS2PDF], [test "$have_ps2pdf" = yes]) ]) # XORG_WITH_PS2PDF # XORG_ENABLE_DOCS (enable_docs=yes) # ---------------- # Minimum version: 1.6.0 # # Documentation tools are not always available on all platforms and sometimes # not at the appropriate level. This macro enables a builder to skip all # documentation targets except traditional man pages. # Combined with the specific tool checking macros XORG_WITH_*, it provides # maximum flexibilty in controlling documentation building. # Refer to: # XORG_WITH_XMLTO --with-xmlto # XORG_WITH_ASCIIDOC --with-asciidoc # XORG_WITH_DOXYGEN --with-doxygen # XORG_WITH_FOP --with-fop # XORG_WITH_GROFF --with-groff # XORG_WITH_PS2PDF --with-ps2pdf # # Interface to module: # ENABLE_DOCS: used in makefiles to conditionally generate documentation # --enable-docs: 'yes' user instructs the module to generate docs # 'no' user instructs the module not to generate docs # parm1: specify the default value, yes or no. # AC_DEFUN([XORG_ENABLE_DOCS],[ m4_define([docs_default], m4_default([$1], [yes])) AC_ARG_ENABLE(docs, AS_HELP_STRING([--enable-docs], [Enable building the documentation (default: ]docs_default[)]), [build_docs=$enableval], [build_docs=]docs_default) m4_undefine([docs_default]) AM_CONDITIONAL(ENABLE_DOCS, [test x$build_docs = xyes]) AC_MSG_CHECKING([whether to build documentation]) AC_MSG_RESULT([$build_docs]) ]) # XORG_ENABLE_DOCS # XORG_ENABLE_DEVEL_DOCS (enable_devel_docs=yes) # ---------------- # Minimum version: 1.6.0 # # This macro enables a builder to skip all developer documentation. # Combined with the specific tool checking macros XORG_WITH_*, it provides # maximum flexibilty in controlling documentation building. # Refer to: # XORG_WITH_XMLTO --with-xmlto # XORG_WITH_ASCIIDOC --with-asciidoc # XORG_WITH_DOXYGEN --with-doxygen # XORG_WITH_FOP --with-fop # XORG_WITH_GROFF --with-groff # XORG_WITH_PS2PDF --with-ps2pdf # # Interface to module: # ENABLE_DEVEL_DOCS: used in makefiles to conditionally generate developer docs # --enable-devel-docs: 'yes' user instructs the module to generate developer docs # 'no' user instructs the module not to generate developer docs # parm1: specify the default value, yes or no. # AC_DEFUN([XORG_ENABLE_DEVEL_DOCS],[ m4_define([devel_default], m4_default([$1], [yes])) AC_ARG_ENABLE(devel-docs, AS_HELP_STRING([--enable-devel-docs], [Enable building the developer documentation (default: ]devel_default[)]), [build_devel_docs=$enableval], [build_devel_docs=]devel_default) m4_undefine([devel_default]) AM_CONDITIONAL(ENABLE_DEVEL_DOCS, [test x$build_devel_docs = xyes]) AC_MSG_CHECKING([whether to build developer documentation]) AC_MSG_RESULT([$build_devel_docs]) ]) # XORG_ENABLE_DEVEL_DOCS # XORG_ENABLE_SPECS (enable_specs=yes) # ---------------- # Minimum version: 1.6.0 # # This macro enables a builder to skip all functional specification targets. # Combined with the specific tool checking macros XORG_WITH_*, it provides # maximum flexibilty in controlling documentation building. # Refer to: # XORG_WITH_XMLTO --with-xmlto # XORG_WITH_ASCIIDOC --with-asciidoc # XORG_WITH_DOXYGEN --with-doxygen # XORG_WITH_FOP --with-fop # XORG_WITH_GROFF --with-groff # XORG_WITH_PS2PDF --with-ps2pdf # # Interface to module: # ENABLE_SPECS: used in makefiles to conditionally generate specs # --enable-specs: 'yes' user instructs the module to generate specs # 'no' user instructs the module not to generate specs # parm1: specify the default value, yes or no. # AC_DEFUN([XORG_ENABLE_SPECS],[ m4_define([spec_default], m4_default([$1], [yes])) AC_ARG_ENABLE(specs, AS_HELP_STRING([--enable-specs], [Enable building the specs (default: ]spec_default[)]), [build_specs=$enableval], [build_specs=]spec_default) m4_undefine([spec_default]) AM_CONDITIONAL(ENABLE_SPECS, [test x$build_specs = xyes]) AC_MSG_CHECKING([whether to build functional specifications]) AC_MSG_RESULT([$build_specs]) ]) # XORG_ENABLE_SPECS # XORG_ENABLE_UNIT_TESTS (enable_unit_tests=auto) # ---------------------------------------------- # Minimum version: 1.13.0 # # This macro enables a builder to enable/disable unit testing # It makes no assumption about the test cases implementation # Test cases may or may not use Automake "Support for test suites" # They may or may not use the software utility library GLib # # When used in conjunction with XORG_WITH_GLIB, use both AM_CONDITIONAL # ENABLE_UNIT_TESTS and HAVE_GLIB. Not all unit tests may use glib. # The variable enable_unit_tests is used by other macros in this file. # # Interface to module: # ENABLE_UNIT_TESTS: used in makefiles to conditionally build tests # enable_unit_tests: used in configure.ac for additional configuration # --enable-unit-tests: 'yes' user instructs the module to build tests # 'no' user instructs the module not to build tests # parm1: specify the default value, yes or no. # AC_DEFUN([XORG_ENABLE_UNIT_TESTS],[ AC_BEFORE([$0], [XORG_WITH_GLIB]) AC_BEFORE([$0], [XORG_LD_WRAP]) AC_REQUIRE([XORG_MEMORY_CHECK_FLAGS]) m4_define([_defopt], m4_default([$1], [auto])) AC_ARG_ENABLE(unit-tests, AS_HELP_STRING([--enable-unit-tests], [Enable building unit test cases (default: ]_defopt[)]), [enable_unit_tests=$enableval], [enable_unit_tests=]_defopt) m4_undefine([_defopt]) AM_CONDITIONAL(ENABLE_UNIT_TESTS, [test "x$enable_unit_tests" != xno]) AC_MSG_CHECKING([whether to build unit test cases]) AC_MSG_RESULT([$enable_unit_tests]) ]) # XORG_ENABLE_UNIT_TESTS # XORG_ENABLE_INTEGRATION_TESTS (enable_unit_tests=auto) # ------------------------------------------------------ # Minimum version: 1.17.0 # # This macro enables a builder to enable/disable integration testing # It makes no assumption about the test cases' implementation # Test cases may or may not use Automake "Support for test suites" # # Please see XORG_ENABLE_UNIT_TESTS for unit test support. Unit test support # usually requires less dependencies and may be built and run under less # stringent environments than integration tests. # # Interface to module: # ENABLE_INTEGRATION_TESTS: used in makefiles to conditionally build tests # enable_integration_tests: used in configure.ac for additional configuration # --enable-integration-tests: 'yes' user instructs the module to build tests # 'no' user instructs the module not to build tests # parm1: specify the default value, yes or no. # AC_DEFUN([XORG_ENABLE_INTEGRATION_TESTS],[ AC_REQUIRE([XORG_MEMORY_CHECK_FLAGS]) m4_define([_defopt], m4_default([$1], [auto])) AC_ARG_ENABLE(integration-tests, AS_HELP_STRING([--enable-integration-tests], [Enable building integration test cases (default: ]_defopt[)]), [enable_integration_tests=$enableval], [enable_integration_tests=]_defopt) m4_undefine([_defopt]) AM_CONDITIONAL([ENABLE_INTEGRATION_TESTS], [test "x$enable_integration_tests" != xno]) AC_MSG_CHECKING([whether to build unit test cases]) AC_MSG_RESULT([$enable_integration_tests]) ]) # XORG_ENABLE_INTEGRATION_TESTS # XORG_WITH_GLIB([MIN-VERSION], [DEFAULT]) # ---------------------------------------- # Minimum version: 1.13.0 # # GLib is a library which provides advanced data structures and functions. # This macro enables a module to test for the presence of Glib. # # When used with ENABLE_UNIT_TESTS, it is assumed GLib is used for unit testing. # Otherwise the value of $enable_unit_tests is blank. # # Please see XORG_ENABLE_INTEGRATION_TESTS for integration test support. Unit # test support usually requires less dependencies and may be built and run under # less stringent environments than integration tests. # # Interface to module: # HAVE_GLIB: used in makefiles to conditionally build targets # with_glib: used in configure.ac to know if GLib has been found # --with-glib: 'yes' user instructs the module to use glib # 'no' user instructs the module not to use glib # AC_DEFUN([XORG_WITH_GLIB],[ AC_REQUIRE([PKG_PROG_PKG_CONFIG]) m4_define([_defopt], m4_default([$2], [auto])) AC_ARG_WITH(glib, AS_HELP_STRING([--with-glib], [Use GLib library for unit testing (default: ]_defopt[)]), [with_glib=$withval], [with_glib=]_defopt) m4_undefine([_defopt]) have_glib=no # Do not probe GLib if user explicitly disabled unit testing if test "x$enable_unit_tests" != x"no"; then # Do not probe GLib if user explicitly disabled it if test "x$with_glib" != x"no"; then m4_ifval( [$1], [PKG_CHECK_MODULES([GLIB], [glib-2.0 >= $1], [have_glib=yes], [have_glib=no])], [PKG_CHECK_MODULES([GLIB], [glib-2.0], [have_glib=yes], [have_glib=no])] ) fi fi # Not having GLib when unit testing has been explicitly requested is an error if test "x$enable_unit_tests" = x"yes"; then if test "x$have_glib" = x"no"; then AC_MSG_ERROR([--enable-unit-tests=yes specified but glib-2.0 not found]) fi fi # Having unit testing disabled when GLib has been explicitly requested is an error if test "x$enable_unit_tests" = x"no"; then if test "x$with_glib" = x"yes"; then AC_MSG_ERROR([--enable-unit-tests=yes specified but glib-2.0 not found]) fi fi # Not having GLib when it has been explicitly requested is an error if test "x$with_glib" = x"yes"; then if test "x$have_glib" = x"no"; then AC_MSG_ERROR([--with-glib=yes specified but glib-2.0 not found]) fi fi AM_CONDITIONAL([HAVE_GLIB], [test "$have_glib" = yes]) ]) # XORG_WITH_GLIB # XORG_LD_WRAP([required|optional]) # --------------------------------- # Minimum version: 1.13.0 # # Check if linker supports -wrap, passed via compiler flags # # When used with ENABLE_UNIT_TESTS, it is assumed -wrap is used for unit testing. # Otherwise the value of $enable_unit_tests is blank. # # Argument added in 1.16.0 - default is "required", to match existing behavior # of returning an error if enable_unit_tests is yes, and ld -wrap is not # available, an argument of "optional" allows use when some unit tests require # ld -wrap and others do not. # AC_DEFUN([XORG_LD_WRAP],[ XORG_CHECK_LINKER_FLAGS([-Wl,-wrap,exit],[have_ld_wrap=yes],[have_ld_wrap=no], [AC_LANG_PROGRAM([#include <stdlib.h> void __wrap_exit(int status) { return; }], [exit(0);])]) # Not having ld wrap when unit testing has been explicitly requested is an error if test "x$enable_unit_tests" = x"yes" -a "x$1" != "xoptional"; then if test "x$have_ld_wrap" = x"no"; then AC_MSG_ERROR([--enable-unit-tests=yes specified but ld -wrap support is not available]) fi fi AM_CONDITIONAL([HAVE_LD_WRAP], [test "$have_ld_wrap" = yes]) # ]) # XORG_LD_WRAP # XORG_CHECK_LINKER_FLAGS # ----------------------- # SYNOPSIS # # XORG_CHECK_LINKER_FLAGS(FLAGS, [ACTION-SUCCESS], [ACTION-FAILURE], [PROGRAM-SOURCE]) # # DESCRIPTION # # Check whether the given linker FLAGS work with the current language's # linker, or whether they give an error. # # ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on # success/failure. # # PROGRAM-SOURCE is the program source to link with, if needed # # NOTE: Based on AX_CHECK_COMPILER_FLAGS. # # LICENSE # # Copyright (c) 2009 Mike Frysinger <vapier@gentoo.org> # Copyright (c) 2009 Steven G. Johnson <stevenj@alum.mit.edu> # Copyright (c) 2009 Matteo Frigo # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see <http://www.gnu.org/licenses/>. # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well.# AC_DEFUN([XORG_CHECK_LINKER_FLAGS], [AC_MSG_CHECKING([whether the linker accepts $1]) dnl Some hackery here since AC_CACHE_VAL can't handle a non-literal varname: AS_LITERAL_IF([$1], [AC_CACHE_VAL(AS_TR_SH(xorg_cv_linker_flags_[$1]), [ ax_save_FLAGS=$LDFLAGS LDFLAGS="$1" AC_LINK_IFELSE([m4_default([$4],[AC_LANG_PROGRAM()])], AS_TR_SH(xorg_cv_linker_flags_[$1])=yes, AS_TR_SH(xorg_cv_linker_flags_[$1])=no) LDFLAGS=$ax_save_FLAGS])], [ax_save_FLAGS=$LDFLAGS LDFLAGS="$1" AC_LINK_IFELSE([AC_LANG_PROGRAM()], eval AS_TR_SH(xorg_cv_linker_flags_[$1])=yes, eval AS_TR_SH(xorg_cv_linker_flags_[$1])=no) LDFLAGS=$ax_save_FLAGS]) eval xorg_check_linker_flags=$AS_TR_SH(xorg_cv_linker_flags_[$1]) AC_MSG_RESULT($xorg_check_linker_flags) if test "x$xorg_check_linker_flags" = xyes; then m4_default([$2], :) else m4_default([$3], :) fi ]) # XORG_CHECK_LINKER_FLAGS # XORG_MEMORY_CHECK_FLAGS # ----------------------- # Minimum version: 1.16.0 # # This macro attempts to find appropriate memory checking functionality # for various platforms which unit testing code may use to catch various # forms of memory allocation and access errors in testing. # # Interface to module: # XORG_MALLOC_DEBUG_ENV - environment variables to set to enable debugging # Usually added to TESTS_ENVIRONMENT in Makefile.am # # If the user sets the value of XORG_MALLOC_DEBUG_ENV, it is used verbatim. # AC_DEFUN([XORG_MEMORY_CHECK_FLAGS],[ AC_REQUIRE([AC_CANONICAL_HOST]) AC_ARG_VAR([XORG_MALLOC_DEBUG_ENV], [Environment variables to enable memory checking in tests]) # Check for different types of support on different platforms case $host_os in solaris*) AC_CHECK_LIB([umem], [umem_alloc], [malloc_debug_env='LD_PRELOAD=libumem.so UMEM_DEBUG=default']) ;; *-gnu*) # GNU libc - Value is used as a single byte bit pattern, # both directly and inverted, so should not be 0 or 255. malloc_debug_env='MALLOC_PERTURB_=15' ;; darwin*) malloc_debug_env='MallocPreScribble=1 MallocScribble=1 DYLD_INSERT_LIBRARIES=/usr/lib/libgmalloc.dylib' ;; *bsd*) malloc_debug_env='MallocPreScribble=1 MallocScribble=1' ;; esac # User supplied flags override default flags if test "x$XORG_MALLOC_DEBUG_ENV" != "x"; then malloc_debug_env="$XORG_MALLOC_DEBUG_ENV" fi AC_SUBST([XORG_MALLOC_DEBUG_ENV],[$malloc_debug_env]) ]) # XORG_WITH_LINT # XORG_CHECK_MALLOC_ZERO # ---------------------- # Minimum version: 1.0.0 # # Defines {MALLOC,XMALLOC,XTMALLOC}_ZERO_CFLAGS appropriately if # malloc(0) returns NULL. Packages should add one of these cflags to # their AM_CFLAGS (or other appropriate *_CFLAGS) to use them. AC_DEFUN([XORG_CHECK_MALLOC_ZERO],[ AC_ARG_ENABLE(malloc0returnsnull, AS_HELP_STRING([--enable-malloc0returnsnull], [malloc(0) returns NULL (default: auto)]), [MALLOC_ZERO_RETURNS_NULL=$enableval], [MALLOC_ZERO_RETURNS_NULL=auto]) AC_MSG_CHECKING([whether malloc(0) returns NULL]) if test "x$MALLOC_ZERO_RETURNS_NULL" = xauto; then AC_CACHE_VAL([xorg_cv_malloc0_returns_null], [AC_RUN_IFELSE([AC_LANG_PROGRAM([ #include <stdlib.h> ],[ char *m0, *r0, *c0, *p; m0 = malloc(0); p = malloc(10); r0 = realloc(p,0); c0 = calloc(0,10); exit((m0 == 0 || r0 == 0 || c0 == 0) ? 0 : 1); ])], [xorg_cv_malloc0_returns_null=yes], [xorg_cv_malloc0_returns_null=no])]) MALLOC_ZERO_RETURNS_NULL=$xorg_cv_malloc0_returns_null fi AC_MSG_RESULT([$MALLOC_ZERO_RETURNS_NULL]) if test "x$MALLOC_ZERO_RETURNS_NULL" = xyes; then MALLOC_ZERO_CFLAGS="-DMALLOC_0_RETURNS_NULL" XMALLOC_ZERO_CFLAGS=$MALLOC_ZERO_CFLAGS XTMALLOC_ZERO_CFLAGS="$MALLOC_ZERO_CFLAGS -DXTMALLOC_BC" else MALLOC_ZERO_CFLAGS="" XMALLOC_ZERO_CFLAGS="" XTMALLOC_ZERO_CFLAGS="" fi AC_SUBST([MALLOC_ZERO_CFLAGS]) AC_SUBST([XMALLOC_ZERO_CFLAGS]) AC_SUBST([XTMALLOC_ZERO_CFLAGS]) ]) # XORG_CHECK_MALLOC_ZERO # XORG_WITH_LINT() # ---------------- # Minimum version: 1.1.0 # # This macro enables the use of a tool that flags some suspicious and # non-portable constructs (likely to be bugs) in C language source code. # It will attempt to locate the tool and use appropriate options. # There are various lint type tools on different platforms. # # Interface to module: # LINT: returns the path to the tool found on the platform # or the value set to LINT on the configure cmd line # also an Automake conditional # LINT_FLAGS: an Automake variable with appropriate flags # # --with-lint: 'yes' user instructs the module to use lint # 'no' user instructs the module not to use lint (default) # # If the user sets the value of LINT, AC_PATH_PROG skips testing the path. # If the user sets the value of LINT_FLAGS, they are used verbatim. # AC_DEFUN([XORG_WITH_LINT],[ AC_ARG_VAR([LINT], [Path to a lint-style command]) AC_ARG_VAR([LINT_FLAGS], [Flags for the lint-style command]) AC_ARG_WITH(lint, [AS_HELP_STRING([--with-lint], [Use a lint-style source code checker (default: disabled)])], [use_lint=$withval], [use_lint=no]) # Obtain platform specific info like program name and options # The lint program on FreeBSD and NetBSD is different from the one on Solaris case $host_os in *linux* | *openbsd* | kfreebsd*-gnu | darwin* | cygwin*) lint_name=splint lint_options="-badflag" ;; *freebsd* | *netbsd*) lint_name=lint lint_options="-u -b" ;; *solaris*) lint_name=lint lint_options="-u -b -h -erroff=E_INDISTING_FROM_TRUNC2" ;; esac # Test for the presence of the program (either guessed by the code or spelled out by the user) if test "x$use_lint" = x"yes" ; then AC_PATH_PROG([LINT], [$lint_name]) if test "x$LINT" = "x"; then AC_MSG_ERROR([--with-lint=yes specified but lint-style tool not found in PATH]) fi elif test "x$use_lint" = x"no" ; then if test "x$LINT" != "x"; then AC_MSG_WARN([ignoring LINT environment variable since --with-lint=no was specified]) fi else AC_MSG_ERROR([--with-lint expects 'yes' or 'no'. Use LINT variable to specify path.]) fi # User supplied flags override default flags if test "x$LINT_FLAGS" != "x"; then lint_options=$LINT_FLAGS fi AC_SUBST([LINT_FLAGS],[$lint_options]) AM_CONDITIONAL(LINT, [test "x$LINT" != x]) ]) # XORG_WITH_LINT # XORG_LINT_LIBRARY(LIBNAME) # -------------------------- # Minimum version: 1.1.0 # # Sets up flags for building lint libraries for checking programs that call # functions in the library. # # Interface to module: # LINTLIB - Automake variable with the name of lint library file to make # MAKE_LINT_LIB - Automake conditional # # --enable-lint-library: - 'yes' user instructs the module to created a lint library # - 'no' user instructs the module not to create a lint library (default) AC_DEFUN([XORG_LINT_LIBRARY],[ AC_REQUIRE([XORG_WITH_LINT]) AC_ARG_ENABLE(lint-library, [AS_HELP_STRING([--enable-lint-library], [Create lint library (default: disabled)])], [make_lint_lib=$enableval], [make_lint_lib=no]) if test "x$make_lint_lib" = x"yes" ; then LINTLIB=llib-l$1.ln if test "x$LINT" = "x"; then AC_MSG_ERROR([Cannot make lint library without --with-lint]) fi elif test "x$make_lint_lib" != x"no" ; then AC_MSG_ERROR([--enable-lint-library expects 'yes' or 'no'.]) fi AC_SUBST(LINTLIB) AM_CONDITIONAL(MAKE_LINT_LIB, [test x$make_lint_lib != xno]) ]) # XORG_LINT_LIBRARY # XORG_COMPILER_BRAND # ------------------- # Minimum version: 1.14.0 # # Checks for various brands of compilers and sets flags as appropriate: # GNU gcc - relies on AC_PROG_CC (via AC_PROG_CC_C99) to set GCC to "yes" # GNU g++ - relies on AC_PROG_CXX to set GXX to "yes" # clang compiler - sets CLANGCC to "yes" # Intel compiler - sets INTELCC to "yes" # Sun/Oracle Solaris Studio cc - sets SUNCC to "yes" # AC_DEFUN([XORG_COMPILER_BRAND], [ AC_LANG_CASE( [C], [ AC_REQUIRE([AC_PROG_CC_C99]) ], [C++], [ AC_REQUIRE([AC_PROG_CXX]) ] ) AC_CHECK_DECL([__clang__], [CLANGCC="yes"], [CLANGCC="no"]) AC_CHECK_DECL([__INTEL_COMPILER], [INTELCC="yes"], [INTELCC="no"]) AC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"]) ]) # XORG_COMPILER_BRAND # XORG_TESTSET_CFLAG(<variable>, <flag>, [<alternative flag>, ...]) # --------------- # Minimum version: 1.16.0 # # Test if the compiler works when passed the given flag as a command line argument. # If it succeeds, the flag is appeneded to the given variable. If not, it tries the # next flag in the list until there are no more options. # # Note that this does not guarantee that the compiler supports the flag as some # compilers will simply ignore arguments that they do not understand, but we do # attempt to weed out false positives by using -Werror=unknown-warning-option and # -Werror=unused-command-line-argument # AC_DEFUN([XORG_TESTSET_CFLAG], [ m4_if([$#], 0, [m4_fatal([XORG_TESTSET_CFLAG was given with an unsupported number of arguments])]) m4_if([$#], 1, [m4_fatal([XORG_TESTSET_CFLAG was given with an unsupported number of arguments])]) AC_LANG_COMPILER_REQUIRE AC_LANG_CASE( [C], [ AC_REQUIRE([AC_PROG_CC_C99]) define([PREFIX], [C]) define([CACHE_PREFIX], [cc]) define([COMPILER], [$CC]) ], [C++], [ define([PREFIX], [CXX]) define([CACHE_PREFIX], [cxx]) define([COMPILER], [$CXX]) ] ) [xorg_testset_save_]PREFIX[FLAGS]="$PREFIX[FLAGS]" if test "x$[xorg_testset_]CACHE_PREFIX[_unknown_warning_option]" = "x" ; then PREFIX[FLAGS]="$PREFIX[FLAGS] -Werror=unknown-warning-option" AC_CACHE_CHECK([if ]COMPILER[ supports -Werror=unknown-warning-option], [xorg_cv_]CACHE_PREFIX[_flag_unknown_warning_option], AC_COMPILE_IFELSE([AC_LANG_SOURCE([int i;])], [xorg_cv_]CACHE_PREFIX[_flag_unknown_warning_option=yes], [xorg_cv_]CACHE_PREFIX[_flag_unknown_warning_option=no])) [xorg_testset_]CACHE_PREFIX[_unknown_warning_option]=$[xorg_cv_]CACHE_PREFIX[_flag_unknown_warning_option] PREFIX[FLAGS]="$[xorg_testset_save_]PREFIX[FLAGS]" fi if test "x$[xorg_testset_]CACHE_PREFIX[_unused_command_line_argument]" = "x" ; then if test "x$[xorg_testset_]CACHE_PREFIX[_unknown_warning_option]" = "xyes" ; then PREFIX[FLAGS]="$PREFIX[FLAGS] -Werror=unknown-warning-option" fi PREFIX[FLAGS]="$PREFIX[FLAGS] -Werror=unused-command-line-argument" AC_CACHE_CHECK([if ]COMPILER[ supports -Werror=unused-command-line-argument], [xorg_cv_]CACHE_PREFIX[_flag_unused_command_line_argument], AC_COMPILE_IFELSE([AC_LANG_SOURCE([int i;])], [xorg_cv_]CACHE_PREFIX[_flag_unused_command_line_argument=yes], [xorg_cv_]CACHE_PREFIX[_flag_unused_command_line_argument=no])) [xorg_testset_]CACHE_PREFIX[_unused_command_line_argument]=$[xorg_cv_]CACHE_PREFIX[_flag_unused_command_line_argument] PREFIX[FLAGS]="$[xorg_testset_save_]PREFIX[FLAGS]" fi found="no" m4_foreach([flag], m4_cdr($@), [ if test $found = "no" ; then if test "x$xorg_testset_]CACHE_PREFIX[_unknown_warning_option" = "xyes" ; then PREFIX[FLAGS]="$PREFIX[FLAGS] -Werror=unknown-warning-option" fi if test "x$xorg_testset_]CACHE_PREFIX[_unused_command_line_argument" = "xyes" ; then PREFIX[FLAGS]="$PREFIX[FLAGS] -Werror=unused-command-line-argument" fi PREFIX[FLAGS]="$PREFIX[FLAGS] ]flag[" dnl Some hackery here since AC_CACHE_VAL can't handle a non-literal varname AC_MSG_CHECKING([if ]COMPILER[ supports ]flag[]) cacheid=AS_TR_SH([xorg_cv_]CACHE_PREFIX[_flag_]flag[]) AC_CACHE_VAL($cacheid, [AC_LINK_IFELSE([AC_LANG_PROGRAM([int i;])], [eval $cacheid=yes], [eval $cacheid=no])]) PREFIX[FLAGS]="$[xorg_testset_save_]PREFIX[FLAGS]" eval supported=\$$cacheid AC_MSG_RESULT([$supported]) if test "$supported" = "yes" ; then $1="$$1 ]flag[" found="yes" fi fi ]) ]) # XORG_TESTSET_CFLAG # XORG_COMPILER_FLAGS # --------------- # Minimum version: 1.16.0 # # Defines BASE_CFLAGS or BASE_CXXFLAGS to contain a set of command line # arguments supported by the selected compiler which do NOT alter the generated # code. These arguments will cause the compiler to print various warnings # during compilation AND turn a conservative set of warnings into errors. # # The set of flags supported by BASE_CFLAGS and BASE_CXXFLAGS will grow in # future versions of util-macros as options are added to new compilers. # AC_DEFUN([XORG_COMPILER_FLAGS], [ AC_REQUIRE([XORG_COMPILER_BRAND]) AC_ARG_ENABLE(selective-werror, AS_HELP_STRING([--disable-selective-werror], [Turn off selective compiler errors. (default: enabled)]), [SELECTIVE_WERROR=$enableval], [SELECTIVE_WERROR=yes]) AC_LANG_CASE( [C], [ define([PREFIX], [C]) ], [C++], [ define([PREFIX], [CXX]) ] ) # -v is too short to test reliably with XORG_TESTSET_CFLAG if test "x$SUNCC" = "xyes"; then [BASE_]PREFIX[FLAGS]="-v" else [BASE_]PREFIX[FLAGS]="" fi # This chunk of warnings were those that existed in the legacy CWARNFLAGS XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wall]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wpointer-arith]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wmissing-declarations]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wformat=2], [-Wformat]) AC_LANG_CASE( [C], [ XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wstrict-prototypes]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wmissing-prototypes]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wnested-externs]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wbad-function-cast]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wold-style-definition], [-fd]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wdeclaration-after-statement]) ] ) # This chunk adds additional warnings that could catch undesired effects. XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wunused]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wuninitialized]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wshadow]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wmissing-noreturn]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wmissing-format-attribute]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wredundant-decls]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wlogical-op]) # These are currently disabled because they are noisy. They will be enabled # in the future once the codebase is sufficiently modernized to silence # them. For now, I don't want them to drown out the other warnings. # XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wparentheses]) # XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wcast-align]) # XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wcast-qual]) # Turn some warnings into errors, so we don't accidently get successful builds # when there are problems that should be fixed. if test "x$SELECTIVE_WERROR" = "xyes" ; then XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=implicit], [-errwarn=E_NO_EXPLICIT_TYPE_GIVEN -errwarn=E_NO_IMPLICIT_DECL_ALLOWED]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=nonnull]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=init-self]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=main]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=missing-braces]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=sequence-point]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=return-type], [-errwarn=E_FUNC_HAS_NO_RETURN_STMT]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=trigraphs]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=array-bounds]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=write-strings]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=address]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=int-to-pointer-cast], [-errwarn=E_BAD_PTR_INT_COMBINATION]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Werror=pointer-to-int-cast]) # Also -errwarn=E_BAD_PTR_INT_COMBINATION else AC_MSG_WARN([You have chosen not to turn some select compiler warnings into errors. This should not be necessary. Please report why you needed to do so in a bug report at $PACKAGE_BUGREPORT]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wimplicit]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wnonnull]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Winit-self]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wmain]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wmissing-braces]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wsequence-point]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wreturn-type]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wtrigraphs]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Warray-bounds]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wwrite-strings]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Waddress]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wint-to-pointer-cast]) XORG_TESTSET_CFLAG([[BASE_]PREFIX[FLAGS]], [-Wpointer-to-int-cast]) fi AC_SUBST([BASE_]PREFIX[FLAGS]) ]) # XORG_COMPILER_FLAGS # XORG_CWARNFLAGS # --------------- # Minimum version: 1.2.0 # Deprecated since: 1.16.0 (Use XORG_COMPILER_FLAGS instead) # # Defines CWARNFLAGS to enable C compiler warnings. # # This function is deprecated because it defines -fno-strict-aliasing # which alters the code generated by the compiler. If -fno-strict-aliasing # is needed, then it should be added explicitly in the module when # it is updated to use BASE_CFLAGS. # AC_DEFUN([XORG_CWARNFLAGS], [ AC_REQUIRE([XORG_COMPILER_FLAGS]) AC_REQUIRE([XORG_COMPILER_BRAND]) AC_LANG_CASE( [C], [ CWARNFLAGS="$BASE_CFLAGS" if test "x$GCC" = xyes ; then CWARNFLAGS="$CWARNFLAGS -fno-strict-aliasing" fi AC_SUBST(CWARNFLAGS) ] ) ]) # XORG_CWARNFLAGS # XORG_STRICT_OPTION # ----------------------- # Minimum version: 1.3.0 # # Add configure option to enable strict compilation flags, such as treating # warnings as fatal errors. # If --enable-strict-compilation is passed to configure, adds strict flags to # $BASE_CFLAGS or $BASE_CXXFLAGS and the deprecated $CWARNFLAGS. # # Starting in 1.14.0 also exports $STRICT_CFLAGS for use in other tests or # when strict compilation is unconditionally desired. AC_DEFUN([XORG_STRICT_OPTION], [ AC_REQUIRE([XORG_CWARNFLAGS]) AC_REQUIRE([XORG_COMPILER_FLAGS]) AC_ARG_ENABLE(strict-compilation, AS_HELP_STRING([--enable-strict-compilation], [Enable all warnings from compiler and make them errors (default: disabled)]), [STRICT_COMPILE=$enableval], [STRICT_COMPILE=no]) AC_LANG_CASE( [C], [ define([PREFIX], [C]) ], [C++], [ define([PREFIX], [CXX]) ] ) [STRICT_]PREFIX[FLAGS]="" XORG_TESTSET_CFLAG([[STRICT_]PREFIX[FLAGS]], [-pedantic]) XORG_TESTSET_CFLAG([[STRICT_]PREFIX[FLAGS]], [-Werror], [-errwarn]) # Earlier versions of gcc (eg: 4.2) support -Werror=attributes, but do not # activate it with -Werror, so we add it here explicitly. XORG_TESTSET_CFLAG([[STRICT_]PREFIX[FLAGS]], [-Werror=attributes]) if test "x$STRICT_COMPILE" = "xyes"; then [BASE_]PREFIX[FLAGS]="$[BASE_]PREFIX[FLAGS] $[STRICT_]PREFIX[FLAGS]" AC_LANG_CASE([C], [CWARNFLAGS="$CWARNFLAGS $STRICT_CFLAGS"]) fi AC_SUBST([STRICT_]PREFIX[FLAGS]) AC_SUBST([BASE_]PREFIX[FLAGS]) AC_LANG_CASE([C], AC_SUBST([CWARNFLAGS])) ]) # XORG_STRICT_OPTION # XORG_DEFAULT_OPTIONS # -------------------- # Minimum version: 1.3.0 # # Defines default options for X.Org modules. # AC_DEFUN([XORG_DEFAULT_OPTIONS], [ AC_REQUIRE([AC_PROG_INSTALL]) XORG_COMPILER_FLAGS XORG_CWARNFLAGS XORG_STRICT_OPTION XORG_RELEASE_VERSION XORG_CHANGELOG XORG_INSTALL XORG_MANPAGE_SECTIONS m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])], [AC_SUBST([AM_DEFAULT_VERBOSITY], [1])]) ]) # XORG_DEFAULT_OPTIONS # XORG_INSTALL() # ---------------- # Minimum version: 1.4.0 # # Defines the variable INSTALL_CMD as the command to copy # INSTALL from $prefix/share/util-macros. # AC_DEFUN([XORG_INSTALL], [ AC_REQUIRE([PKG_PROG_PKG_CONFIG]) macros_datadir=`$PKG_CONFIG --print-errors --variable=pkgdatadir xorg-macros` INSTALL_CMD="(cp -f "$macros_datadir/INSTALL" \$(top_srcdir)/.INSTALL.tmp && \ mv \$(top_srcdir)/.INSTALL.tmp \$(top_srcdir)/INSTALL) \ || (rm -f \$(top_srcdir)/.INSTALL.tmp; touch \$(top_srcdir)/INSTALL; \ echo 'util-macros \"pkgdatadir\" from xorg-macros.pc not found: installing possibly empty INSTALL.' >&2)" AC_SUBST([INSTALL_CMD]) ]) # XORG_INSTALL dnl Copyright 2005 Red Hat, Inc dnl dnl Permission to use, copy, modify, distribute, and sell this software and its dnl documentation for any purpose is hereby granted without fee, provided that dnl the above copyright notice appear in all copies and that both that dnl copyright notice and this permission notice appear in supporting dnl documentation. dnl dnl The above copyright notice and this permission notice shall be included dnl in all copies or substantial portions of the Software. dnl dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS dnl OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF dnl MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. dnl IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR dnl OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, dnl ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR dnl OTHER DEALINGS IN THE SOFTWARE. dnl dnl Except as contained in this notice, the name of the copyright holders shall dnl not be used in advertising or otherwise to promote the sale, use or dnl other dealings in this Software without prior written authorization dnl from the copyright holders. dnl # XORG_RELEASE_VERSION # -------------------- # Defines PACKAGE_VERSION_{MAJOR,MINOR,PATCHLEVEL} for modules to use. AC_DEFUN([XORG_RELEASE_VERSION],[ AC_DEFINE_UNQUOTED([PACKAGE_VERSION_MAJOR], [`echo $PACKAGE_VERSION | cut -d . -f 1`], [Major version of this package]) PVM=`echo $PACKAGE_VERSION | cut -d . -f 2 | cut -d - -f 1` if test "x$PVM" = "x"; then PVM="0" fi AC_DEFINE_UNQUOTED([PACKAGE_VERSION_MINOR], [$PVM], [Minor version of this package]) PVP=`echo $PACKAGE_VERSION | cut -d . -f 3 | cut -d - -f 1` if test "x$PVP" = "x"; then PVP="0" fi AC_DEFINE_UNQUOTED([PACKAGE_VERSION_PATCHLEVEL], [$PVP], [Patch version of this package]) ]) # XORG_CHANGELOG() # ---------------- # Minimum version: 1.2.0 # # Defines the variable CHANGELOG_CMD as the command to generate # ChangeLog from git. # # AC_DEFUN([XORG_CHANGELOG], [ CHANGELOG_CMD="(GIT_DIR=\$(top_srcdir)/.git git log > \$(top_srcdir)/.changelog.tmp && \ mv \$(top_srcdir)/.changelog.tmp \$(top_srcdir)/ChangeLog) \ || (rm -f \$(top_srcdir)/.changelog.tmp; touch \$(top_srcdir)/ChangeLog; \ echo 'git directory not found: installing possibly empty changelog.' >&2)" AC_SUBST([CHANGELOG_CMD]) ]) # XORG_CHANGELOG dnl dnl Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. dnl dnl Permission is hereby granted, free of charge, to any person obtaining a dnl copy of this software and associated documentation files (the "Software"), dnl to deal in the Software without restriction, including without limitation dnl the rights to use, copy, modify, merge, publish, distribute, sublicense, dnl and/or sell copies of the Software, and to permit persons to whom the dnl Software is furnished to do so, subject to the following conditions: dnl dnl The above copyright notice and this permission notice (including the next dnl paragraph) shall be included in all copies or substantial portions of the dnl Software. dnl dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR dnl IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, dnl FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL dnl THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER dnl LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING dnl FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER dnl DEALINGS IN THE SOFTWARE. dnl # XTRANS_TCP_FLAGS() # ------------------ # Find needed libraries for TCP sockets, and check for IPv6 support AC_DEFUN([XTRANS_TCP_FLAGS],[ # SVR4 hides these in libraries other than libc AC_SEARCH_LIBS(socket, [socket]) AC_SEARCH_LIBS(gethostbyname, [nsl]) if test "$ac_cv_search_socket$ac_cv_search_gethostbyname" = "nono"; then AC_CHECK_LIB([ws2_32],[main]) fi # Needs to come after above checks for libsocket & libnsl for SVR4 systems AC_ARG_ENABLE(ipv6, AS_HELP_STRING([--enable-ipv6],[Enable IPv6 support]), [IPV6CONN=$enableval], [AC_CHECK_FUNC(getaddrinfo,[IPV6CONN=yes],[IPV6CONN=no])]) AC_MSG_CHECKING([if IPv6 support should be built]) if test "$IPV6CONN" = "yes"; then AC_DEFINE(IPv6,1,[Support IPv6 for TCP connections]) fi AC_MSG_RESULT($IPV6CONN) # 4.3BSD-Reno added a new member to struct sockaddr_in AC_CHECK_MEMBER([struct sockaddr_in.sin_len], AC_DEFINE([BSD44SOCKETS],1, [Define to 1 if `struct sockaddr_in' has a `sin_len' member]), [], [ #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> ]) # POSIX.1g changed the type of pointer passed to getsockname/getpeername/etc. AC_CHECK_TYPES([socklen_t], [], [], [ AC_INCLUDES_DEFAULT #include <sys/socket.h>]) # XPG4v2/UNIX95 added msg_control - check to see if we need to define # _XOPEN_SOURCE to get it (such as on Solaris) AC_CHECK_MEMBER([struct msghdr.msg_control], [], [], [ AC_INCLUDES_DEFAULT #include <sys/socket.h> ]) # First try for Solaris in C99 compliant mode, which requires XPG6/UNIX03 if test "x$ac_cv_member_struct_msghdr_msg_control" = xno; then unset ac_cv_member_struct_msghdr_msg_control AC_MSG_NOTICE([trying again with _XOPEN_SOURCE=600]) AC_CHECK_MEMBER([struct msghdr.msg_control], [AC_DEFINE([_XOPEN_SOURCE], [600], [Defined if needed to expose struct msghdr.msg_control]) ], [], [ #define _XOPEN_SOURCE 600 AC_INCLUDES_DEFAULT #include <sys/socket.h> ]) fi # If that didn't work, fall back to XPG5/UNIX98 with C89 if test "x$ac_cv_member_struct_msghdr_msg_control" = xno; then unset ac_cv_member_struct_msghdr_msg_control AC_MSG_NOTICE([trying again with _XOPEN_SOURCE=500]) AC_CHECK_MEMBER([struct msghdr.msg_control], [AC_DEFINE([_XOPEN_SOURCE], [500], [Defined if needed to expose struct msghdr.msg_control]) ], [], [ #define _XOPEN_SOURCE 500 AC_INCLUDES_DEFAULT #include <sys/socket.h> ]) fi ]) # XTRANS_TCP_FLAGS # XTRANS_CONNECTION_FLAGS() # ------------------------- # Standard checks for which Xtrans transports to use by the Xorg packages # that use Xtrans functions AC_DEFUN([XTRANS_CONNECTION_FLAGS],[ AC_REQUIRE([AC_CANONICAL_HOST]) [case $host_os in mingw*) unixdef="no" ;; *) unixdef="yes" ;; esac] AC_ARG_ENABLE(unix-transport, AS_HELP_STRING([--enable-unix-transport],[Enable UNIX domain socket transport]), [UNIXCONN=$enableval], [UNIXCONN=$unixdef]) AC_MSG_CHECKING([if Xtrans should support UNIX socket connections]) if test "$UNIXCONN" = "yes"; then AC_DEFINE(UNIXCONN,1,[Support UNIX socket connections]) fi AC_MSG_RESULT($UNIXCONN) AC_ARG_ENABLE(tcp-transport, AS_HELP_STRING([--enable-tcp-transport],[Enable TCP socket transport]), [TCPCONN=$enableval], [TCPCONN=yes]) AC_MSG_CHECKING([if Xtrans should support TCP socket connections]) AC_MSG_RESULT($TCPCONN) if test "$TCPCONN" = "yes"; then AC_DEFINE(TCPCONN,1,[Support TCP socket connections]) XTRANS_TCP_FLAGS fi [case $host_os in solaris*|sco*|sysv4*) localdef="yes" ;; *) localdef="no" ;; esac] AC_ARG_ENABLE(local-transport, AS_HELP_STRING([--enable-local-transport],[Enable os-specific local transport]), [LOCALCONN=$enableval], [LOCALCONN=$localdef]) AC_MSG_CHECKING([if Xtrans should support os-specific local connections]) AC_MSG_RESULT($LOCALCONN) if test "$LOCALCONN" = "yes"; then AC_DEFINE(LOCALCONN,1,[Support os-specific local connections]) fi ]) # XTRANS_CONNECTION_FLAGS # XTRANS_SECURE_RPC_FLAGS() # ------------------------- # Check for Secure RPC functions - must come after XTRANS_TCP_FLAGS # so that any necessary networking libraries are already found AC_DEFUN([XTRANS_SECURE_RPC_FLAGS], [AC_REQUIRE([XTRANS_TCP_FLAGS]) AC_ARG_ENABLE(secure-rpc, AS_HELP_STRING([--enable-secure-rpc],[Enable Secure RPC]), [SECURE_RPC=$enableval], [SECURE_RPC="try"]) if test "x$SECURE_RPC" = "xyes" -o "x$SECURE_RPC" = "xtry" ; then FOUND_SECURE_RPC="no" AC_CHECK_FUNCS([authdes_seccreate authdes_create], [FOUND_SECURE_RPC="yes"]) if test "x$FOUND_SECURE_RPC" = "xno" ; then if test "x$SECURE_RPC" = "xyes" ; then AC_MSG_ERROR([Secure RPC requested, but required functions not found]) fi SECURE_RPC="no" else dnl FreeBSD keeps getsecretkey in librpcsvc AC_SEARCH_LIBS(getsecretkey, [rpcsvc]) SECURE_RPC="yes" fi fi AC_MSG_CHECKING([if Secure RPC authentication ("SUN-DES-1") should be supported]) if test "x$SECURE_RPC" = "xyes" ; then AC_DEFINE(SECURE_RPC, 1, [Support Secure RPC ("SUN-DES-1") authentication for X11 clients]) fi AC_MSG_RESULT($SECURE_RPC) ]) # XTRANS_SECURE_RPC_FLAGS SE_]PREFIX[FLAGS] $[STRICT_]PREFIX[FLAGS]" AC_LANG_CASE([C], [CWARNFLAGS="$CWARNFLAGS $STRICT_CFLAGS"]) fi AC_SUBST([STRICT_]PREFIX[FLAGS]) AC_SUBST([BASE_]PREFIX[FLAGS]) AC_LANG_CASE([C], AC_SUBST([CWARNFLAGS])) ]) # XORG_STRICT_OPTION # XORG_DEFAULT_OPTIONS # -------------------- # Minimum version: 1.3.0 # # Defines default options for X.Org modullibX11-1.6.3/install-sh�����������������������������������������������������������������������������0000755�0143106�0000012�00000034523�12477417254�0015072�0����������������������������������������������������������������������������������������������������ustar�00alanc���������������������������staff���������������������������0000266�0200006������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # install - install a program, script, or datafile scriptversion=2013-12-25.23; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # 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: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", 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 CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the prece����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������